{"report_id":"eeff5ca8-c154-4c84-81f8-e1b8a0da7eac","version":0,"status":"done","tags":[],"date":"2026-07-27T09:36:33Z","url":{"schema":"http","addr":"1nch-svap.com","fqdn":"1nch-svap.com","domain":"1nch-svap.com","tld":"com"},"ip":{"addr":"104.21.75.136","port":0,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"final":{"url":{"schema":"https","addr":"1nch-svap.com/","fqdn":"1nch-svap.com","domain":"1nch-svap.com","tld":"com"},"title":"Cross-Chain Swaps Across 13+ Networks | 1inch","dom":{"size":34397,"mime_type":"text/html; charset=utf-8","magic":"HTML document, Unicode text, UTF-8 text, with very long lines (14649)","md5":"2b54e6cf5023526edd9979ec7ea1ec91","sha1":"1da69ecea2b3d04ca85c7928d42e8355e9e445f4","sha256":"2cb6e021fb0d441ea07a71e4ebea1fdd85d684c7f79e136e4173de59af02fe52","sha512":"0fd344d43bdacc8e867792e8f9e937d9aa157623d8f14942d3c958de3aba863f802e51a42a281449407b209bcf3ffd5b778a49ee61652d3003dedf41710be2fe","ssdeep":"384:5o6rOERwHE03lvF8C9SH4VK9rWO8U5Q6nBOmEAUU/cxksc64Jysq7vAdLagiZ7An:lWsnB7cxksc64Jysq7vAlaB7Adv+KT","tlshash":"25f2e841781822782a2b4375fac8676ca125b503ef5344a4f24d108ddbc3ff62ae7bd9","dom_hash":"domhash92304df0926e350bbc91d7ce923386ea","first_seen":"2026-07-27T07:59:48.807799Z","last_seen":"2026-07-27T09:36:42.906743Z","times_seen":2,"resource_available":false,"data":null}},"submit":{"url":{"schema":"http","addr":"1nch-svap.com","fqdn":"1nch-svap.com","domain":"1nch-svap.com","tld":"com"},"ip":{"addr":"104.21.75.136","port":0,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"tags":null,"meta":null},"settings":{"access":"public","device_type":"desktop","expires_at":"2027-08-31T09:36:33Z","useragent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0","referer":"","cookies":null,"exit_node":"qguvgzjxzsgb3vs"},"stats":{"alert_count":{"ids":0,"urlquery":0,"analyzer":0}},"detection":{"ids":null,"analyzer":null,"urlquery":null},"summary":[{"fqdn":"fonts.googleapis.com","ip":{"addr":"142.250.178.106","port":443,"asn":15169,"as":"GOOGLE","country":"United States","country_code":"US"},"domain_registered":"2005-01-25","domain_rank":313,"first_seen":"2012-05-23T12:41:44Z","last_seen":"2026-07-26T22:23:14.439231Z","alert_count":0,"request_count":2,"received_data":44453,"sent_data":1123,"comment":"","tags":null,"fingerprints":[{"name":"HSTS","description":"HTTP Strict Transport Security (HSTS) informs browsers that the site should only be accessed using HTTPS.","website":"https://www.rfc-editor.org/rfc/rfc6797#section-6.1","common_platform_enumeration":"","icon":"","categories":["Security"]}]},{"fqdn":"1nch-svap.com","ip":{"addr":"104.21.75.136","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"domain_registered":"2026-07-26","domain_rank":0,"first_seen":"2026-07-27T09:36:36.138612Z","last_seen":"2026-07-27T09:36:36.138612Z","alert_count":0,"request_count":9,"received_data":2405776,"sent_data":4185,"comment":"","tags":null,"fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}]},{"fqdn":"explorer-api.walletconnect.com","ip":{"addr":"172.66.147.126","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"domain_registered":"2009-12-19","domain_rank":466611,"first_seen":"2022-10-10T18:16:28Z","last_seen":"2026-07-20T21:56:40.518786Z","alert_count":0,"request_count":12,"received_data":38518,"sent_data":8696,"comment":"","tags":null,"fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}]}],"files":null,"artifacts":{"windows_shortcuts":null,"files":null,"telegram":null,"pdfs":null,"clipboard":null},"sensors":{"ids":null,"analyzer":null,"urlquery":null},"javascript":{"script":[{"url":{"schema":"https","addr":"1nch-svap.com/assets/index-DIb0zmuf.js","fqdn":"1nch-svap.com","domain":"1nch-svap.com","tld":"com"},"ip":{"addr":"104.21.75.136","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"introduction_type":"scriptElement","is_inline":false,"md5":"72f0fa87598e7991bf272a3a85246d3f","sha1":"0ccc5de527a08f91d193edffb74c9218cd9907bf","sha256":"ea35af4b3e81fcd38e2d6279a2c0f2750bdc36db4995601c2da9dff3f0be2ca3","sha512":"673b5d7a90e1a5372ececac778e1978f9d5789c9e6604cef7b6f6ea96ab920625dd31b88d62dea708552be5341c6955aa14331ff58332dee41e7e03440af98cb","ssdeep":"12288:5S0vyPU01PPVQUgVQ/ww2xYsCaE8rILg5K:QZOLQYwGYsCaE80","tlshash":"19b48e85f141727997e706e5a06f8108723a1e54f52e80b8f17c48ee29b118ab17bffd","size":506839,"data":"","first_seen":"2026-07-27T07:59:48.812251Z","last_seen":"2026-07-27T09:36:42.923635Z","times_seen":2,"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"1nch-svap.com/assets/walletconnect-CEkgoR9i.js","fqdn":"1nch-svap.com","domain":"1nch-svap.com","tld":"com"},"ip":{"addr":"104.21.75.136","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"introduction_type":"scriptElement","is_inline":false,"md5":"4a71dcd572ab7aaf4923d272c1da007a","sha1":"4447e49c51675a948c5db4267774db5e478ddc89","sha256":"7942cba5e9ff0c2e6e01a960d61c60ac5094f437d6e68cf2857244cf25ba53d5","sha512":"4b6b45db4497363a49418959c8479600ed87a7fd63e25c377cea14577532ad9c06c2bbe2545118b7a2c9d12995f3c1683e7810c24e76f00a1db6e70c14d5fe09","ssdeep":"12288:FCdRclLLSf4ZMy+oK37afWPUsKAyixsWleNSou:F7LLSXy+obWPUsKAyiveNvu","tlshash":"95b44b8073a5a07243da55e994371101f239d8643049846cfbacedff7da588a9a7ff38","size":512640,"data":"","first_seen":"2026-07-27T07:59:48.822501Z","last_seen":"2026-07-27T09:36:42.910647Z","times_seen":2,"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"1nch-svap.com/assets/tronweb-DoSo1Lbu.js","fqdn":"1nch-svap.com","domain":"1nch-svap.com","tld":"com"},"ip":{"addr":"104.21.75.136","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"introduction_type":"scriptElement","is_inline":false,"md5":"7d48a25cfd883b4db0d8c7193dc9f06c","sha1":"a9554acd611e7c7d69cdc0b0fd978f63640f8f4e","sha256":"f5fc6b9116b880c5d4bfdc036044e7f284257948f26707cc7abde09869c57923","sha512":"84c3e83f6c940e1a9fc1f1b85918003ab050dd9266204314f3a3093ca4f8ccf2f2d6d9d71607144a756c9ff4d0fef7297eb04c1d0954f3dce52f319e5c4933b2","ssdeep":"24576:Ru1esMXgqwbxxCtygzprHT01fbBuhcIV8F9N1u9E0M3QvhtOY8494N:Ru1esMXgqwbxxCtygzprHA1fbBuhcIaT","tlshash":"ca15078432c6f66643a110e01a3b540eb23d6b5cd01ca69af38cd4e77ef95c6466bf78","size":926002,"data":"","first_seen":"2026-07-27T07:59:48.824292Z","last_seen":"2026-07-27T09:36:42.914738Z","times_seen":2,"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"1nch-svap.com/assets/index-BFPQ7A-A.js","fqdn":"1nch-svap.com","domain":"1nch-svap.com","tld":"com"},"ip":{"addr":"104.21.75.136","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"introduction_type":"scriptElement","is_inline":false,"md5":"835a6d59868acb597ed5cc9cefa38435","sha1":"ed630f0b14986f403d5e5d26358ca4045cb7170c","sha256":"f9ca756461878858864bb0ae53a09246f8d06877dec3402d51d8a2223513d644","sha512":"c8988ec64b809cf916595df67308a011bd354435608026dc2c634c2eff94220bfc26bdda41a8a0fcdbbf661e6cb6205ef499e1a1379451293f548f44f704eefb","ssdeep":"3072:mTMycmMgkXJATljTjyrwaIFm99q2Yjjbgiwcvp598k:mTymtTjyrwhFW9xCp5Ck","tlshash":"5fd34cd473b0f17e625342ae813b0595f2386804b929c068f2ec96eb54d3e96c5b7b7c","size":137695,"data":"","first_seen":"2026-07-27T07:59:48.813203Z","last_seen":"2026-07-27T09:36:42.934478Z","times_seen":2,"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"1nch-svap.com/assets/react-BHL9MuHZ.js","fqdn":"1nch-svap.com","domain":"1nch-svap.com","tld":"com"},"ip":{"addr":"104.21.75.136","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"introduction_type":"scriptElement","is_inline":false,"md5":"b7ea1f4c1a6593a89828a1af097bfa93","sha1":"7cfcd10b74c52c5a52c408fd19542a1a06e9131d","sha256":"8439d64d3fb39d84e6751f28166e3e8d90b0f3e9e35cd00d20966513c583eb69","sha512":"38eb30e08bcf721217f43471cd14d9ba6fdc9edc67ff34e9e9afb4eb48e13bc08907cf2a6bd112eb5639b932e839b252e42977601addf83e72f651cff97dddb6","ssdeep":"3072:FFf21nRhtI8/0GPiKJAvKXj6VDECAc11v:FAzI8/0GPiKJAClC15","tlshash":"67f30ae831aeb6526ba357b600af1507733829272c0c8861a111fd9e77f540991bbffd","size":162452,"data":"","first_seen":"2026-07-20T11:29:48.038507Z","last_seen":"2026-07-27T09:36:42.925384Z","times_seen":4,"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"1nch-svap.com/","fqdn":"1nch-svap.com","domain":"1nch-svap.com","tld":"com"},"ip":{"addr":"104.21.75.136","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"introduction_type":"scriptElement","is_inline":true,"md5":"6d3dddaff33209a90117476a317e14e6","sha1":"9e4c215a7a389e182dc758af87bf39de6aaeb168","sha256":"591c7b9fe2c6bb1259d2ffa93b26a2c8e769fc9b22eeaf17d68b9067ef30322c","sha512":"b08a179c17b7c074e6290e1b9d7d76b39c08981a2cd0f24f12002cd66e5039bd7e64dd1aacf5d27651925d6adde463e0d6361d00240dcca9f778fc86113dd131","ssdeep":"","tlshash":"dff0c05a1c43745777e92528c31756b62b23030364c1d405f94f84953fac9491c42a8d","size":556,"data":"","first_seen":"2026-07-27T07:59:48.826463Z","last_seen":"2026-07-27T09:36:42.941978Z","times_seen":2,"alerts":{"ids":null,"analyzer":null,"urlquery":null}}],"eval":null,"write":null,"console":null},"http":[{"url":{"schema":"https","addr":"fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800\u0026display=swap","fqdn":"fonts.googleapis.com","domain":"fonts.googleapis.com","tld":"googleapis.com"},"ip":{"addr":"142.250.178.106","port":443,"asn":15169,"as":"GOOGLE","country":"United States","country_code":"US"},"is_navigation_request":false,"resource_type":"stylesheet","requested_by":"https://1nch-svap.com/","date":"2026-07-27T09:36:06.065Z","timestamp":1785144966065,"http_version":"HTTP/2","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_256_GCM_SHA384","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"upload.video.google.com","organization":""},"issuer":{"commonName":"WE2","organization":"Google Trust Services"},"validity":{"start":"Mon, 29 Jun 2026 08:39:27 GMT","end":"Mon, 21 Sep 2026 08:39:26 GMT"},"fingerprint":{"sha1":"50:37:CF:61:33:A1:EE:47:D9:3D:A6:5E:07:BA:4C:FF:F7:25:9F:76","sha256":"7D:4D:21:06:63:E2:5E:F0:8C:59:8E:EB:B7:94:2B:81:70:11:D3:F4:C0:A0:81:A6:1B:E7:27:FD:56:10:1A:11"}}},"request":{"raw":"GET /css2?family=Inter:wght@400;500;600;700;800\u0026display=swap HTTP/1.1\r\nHost: fonts.googleapis.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: text/css,*/*;q=0.1\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nSec-Fetch-Storage-Access: none\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://1nch-svap.com/\r\nSec-Fetch-Dest: style\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: cross-site\r\nPriority: u=2\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/2 200 \r\ncontent-type: text/css; charset=utf-8\r\nvary: Sec-Fetch-Dest, Sec-Fetch-Mode, Sec-Fetch-Site\r\naccess-control-allow-origin: *\r\ntiming-allow-origin: *\r\nlink: \u003chttps://fonts.gstatic.com\u003e; rel=preconnect; crossorigin\r\nstrict-transport-security: max-age=31536000\r\nexpires: Mon, 27 Jul 2026 09:36:06 GMT\r\ndate: Mon, 27 Jul 2026 09:36:06 GMT\r\ncache-control: private, max-age=86400\r\ncross-origin-opener-policy: same-origin-allow-popups\r\ncross-origin-resource-policy: cross-origin\r\ncontent-encoding: gzip\r\nserver: ESF\r\nx-xss-protection: 0\r\nx-frame-options: SAMEORIGIN\r\nx-content-type-options: nosniff\r\nalt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000\r\nX-Firefox-Spdy: h2\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"HSTS","description":"HTTP Strict Transport Security (HSTS) informs browsers that the site should only be accessed using HTTPS.","website":"https://www.rfc-editor.org/rfc/rfc6797#section-6.1","common_platform_enumeration":"","icon":"","categories":["Security"]}],"data":{"size":12635,"size_decoded":1486,"mime_type":"text/css; charset=utf-8","magic":"ASCII text","md5":"4b1d52c19ccef2398d1de007b3c9a55c","sha1":"c57fa2bcac927a7d60c526cb7ec2b6249019dfe7","sha256":"05f842619ec9f615de0b749034eadaea60e3554d798683fb01ee1eb27abd1e68","sha512":"9dfc4ab3832325eb1438bd85674e15ceb62771b94f06ea8e48a2e286453d571218df3f6727b8df4c1bdfa47218eb5fed0298601da289391a736a76a230d68c3b","ssdeep":"192:9NNIxO34OxDENOPCO3/Nx8NNryfO3iExlONEhYO3RrxGfNx0NO3kCxHx:vXuM0p2+g7r","tlshash":"1e427892002ba400ab971dc233cf7f3aaece50896085d1b95ffd0dc59cead66436876d","first_seen":"2025-09-10T22:54:08.549336Z","last_seen":"2026-08-12T23:00:54.578802Z","times_seen":15671,"resource_available":false,"data":"LyogY3lyaWxsaWMtZXh0ICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMkpMN1cwSTVudndVZ0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMUM4MC0xQzhBLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RiwgVStGRTJFLUZFMkY7Cn0KLyogY3lyaWxsaWMgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWEwWkw3VzBJNW52d1VnSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzMDEsIFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQovKiBncmVlay1leHQgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWEyWkw3VzBJNW52d1VnSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQovKiBncmVlayAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M3M0Z3ckszaUxUZUh1U19uVk1yTXhDcDUwU2pJYTFwTDdXMEk1bnZ3VWdIVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wMzc3LCBVKzAzN0EtMDM3RiwgVSswMzg0LTAzOEEsIFUrMDM4QywgVSswMzhFLTAzQTEsIFUrMDNBMy0wM0ZGOwp9Ci8qIHZpZXRuYW1lc2UgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWEycEw3VzBJNW52d1VnSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSswMTEwLTAxMTEsIFUrMDEyOC0wMTI5LCBVKzAxNjgtMDE2OSwgVSswMUEwLTAxQTEsIFUrMDFBRi0wMUIwLCBVKzAzMDAtMDMwMSwgVSswMzAzLTAzMDQsIFUrMDMwOC0wMzA5LCBVKzAzMjMsIFUrMDMyOSwgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQovKiBsYXRpbi1leHQgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWEyNUw3VzBJNW52d1VnSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDJCQSwgVSswMkJELTAyQzUsIFUrMDJDNy0wMkNDLCBVKzAyQ0UtMDJENywgVSswMkRELTAyRkYsIFUrMDMwNCwgVSswMzA4LCBVKzAzMjksIFUrMUQwMC0xREJGLCBVKzFFMDAtMUU5RiwgVSsxRUYyLTFFRkYsIFUrMjAyMCwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMEMwLCBVKzIxMTMsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQovKiBsYXRpbiAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M3M0Z3ckszaUxUZUh1U19uVk1yTXhDcDUwU2pJYTFaTDdXMEk1bnZ3VS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQkItMDJCQywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSswMzA0LCBVKzAzMDgsIFUrMDMyOSwgVSsyMDAwLTIwNkYsIFUrMjBBQywgVSsyMTIyLCBVKzIxOTEsIFUrMjE5MywgVSsyMjEyLCBVKzIyMTUsIFUrRkVGRiwgVStGRkZEOwp9Ci8qIGN5cmlsbGljLWV4dCAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M3M0Z3ckszaUxUZUh1U19uVk1yTXhDcDUwU2pJYTJKTDdXMEk1bnZ3VWdIVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzFDODAtMUM4QSwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUYsIFUrRkUyRS1GRTJGOwp9Ci8qIGN5cmlsbGljICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMFpMN1cwSTVudndVZ0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzAxLCBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KLyogZ3JlZWstZXh0ICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMlpMN1cwSTVudndVZ0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KLyogZ3JlZWsgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWExcEw3VzBJNW52d1VnSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDM3NywgVSswMzdBLTAzN0YsIFUrMDM4NC0wMzhBLCBVKzAzOEMsIFUrMDM4RS0wM0ExLCBVKzAzQTMtMDNGRjsKfQovKiB2aWV0bmFtZXNlICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMnBMN1cwSTVudndVZ0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMDExMC0wMTExLCBVKzAxMjgtMDEyOSwgVSswMTY4LTAxNjksIFUrMDFBMC0wMUExLCBVKzAxQUYtMDFCMCwgVSswMzAwLTAzMDEsIFUrMDMwMy0wMzA0LCBVKzAzMDgtMDMwOSwgVSswMzIzLCBVKzAzMjksIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KLyogbGF0aW4tZXh0ICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMjVMN1cwSTVudndVZ0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyQkEsIFUrMDJCRC0wMkM1LCBVKzAyQzctMDJDQywgVSswMkNFLTAyRDcsIFUrMDJERC0wMkZGLCBVKzAzMDQsIFUrMDMwOCwgVSswMzI5LCBVKzFEMDAtMURCRiwgVSsxRTAwLTFFOUYsIFUrMUVGMi0xRUZGLCBVKzIwMjAsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDMCwgVSsyMTEzLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KLyogbGF0aW4gKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWExWkw3VzBJNW52d1Uud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkJCLTAyQkMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMDMwNCwgVSswMzA4LCBVKzAzMjksIFUrMjAwMC0yMDZGLCBVKzIwQUMsIFUrMjEyMiwgVSsyMTkxLCBVKzIxOTMsIFUrMjIxMiwgVSsyMjE1LCBVK0ZFRkYsIFUrRkZGRDsKfQovKiBjeXJpbGxpYy1leHQgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWEySkw3VzBJNW52d1VnSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsxQzgwLTFDOEEsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGLCBVK0ZFMkUtRkUyRjsKfQovKiBjeXJpbGxpYyAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M3M0Z3ckszaUxUZUh1U19uVk1yTXhDcDUwU2pJYTBaTDdXMEk1bnZ3VWdIVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDMwMSwgVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9Ci8qIGdyZWVrLWV4dCAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M3M0Z3ckszaUxUZUh1U19uVk1yTXhDcDUwU2pJYTJaTDdXMEk1bnZ3VWdIVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9Ci8qIGdyZWVrICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNjAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMXBMN1cwSTVudndVZ0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzNzcsIFUrMDM3QS0wMzdGLCBVKzAzODQtMDM4QSwgVSswMzhDLCBVKzAzOEUtMDNBMSwgVSswM0EzLTAzRkY7Cn0KLyogdmlldG5hbWVzZSAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M3M0Z3ckszaUxUZUh1U19uVk1yTXhDcDUwU2pJYTJwTDdXMEk1bnZ3VWdIVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzAxMTAtMDExMSwgVSswMTI4LTAxMjksIFUrMDE2OC0wMTY5LCBVKzAxQTAtMDFBMSwgVSswMUFGLTAxQjAsIFUrMDMwMC0wMzAxLCBVKzAzMDMtMDMwNCwgVSswMzA4LTAzMDksIFUrMDMyMywgVSswMzI5LCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9Ci8qIGxhdGluLWV4dCAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M3M0Z3ckszaUxUZUh1U19uVk1yTXhDcDUwU2pJYTI1TDdXMEk1bnZ3VWdIVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMkJBLCBVKzAyQkQtMDJDNSwgVSswMkM3LTAyQ0MsIFUrMDJDRS0wMkQ3LCBVKzAyREQtMDJGRiwgVSswMzA0LCBVKzAzMDgsIFUrMDMyOSwgVSsxRDAwLTFEQkYsIFUrMUUwMC0xRTlGLCBVKzFFRjItMUVGRiwgVSsyMDIwLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQzAsIFUrMjExMywgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9Ci8qIGxhdGluICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNjAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMVpMN1cwSTVudndVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJCQi0wMkJDLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzAzMDQsIFUrMDMwOCwgVSswMzI5LCBVKzIwMDAtMjA2RiwgVSsyMEFDLCBVKzIxMjIsIFUrMjE5MSwgVSsyMTkzLCBVKzIyMTIsIFUrMjIxNSwgVStGRUZGLCBVK0ZGRkQ7Cn0KLyogY3lyaWxsaWMtZXh0ICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMkpMN1cwSTVudndVZ0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMUM4MC0xQzhBLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RiwgVStGRTJFLUZFMkY7Cn0KLyogY3lyaWxsaWMgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWEwWkw3VzBJNW52d1VnSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzMDEsIFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQovKiBncmVlay1leHQgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWEyWkw3VzBJNW52d1VnSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQovKiBncmVlayAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M3M0Z3ckszaUxUZUh1U19uVk1yTXhDcDUwU2pJYTFwTDdXMEk1bnZ3VWdIVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wMzc3LCBVKzAzN0EtMDM3RiwgVSswMzg0LTAzOEEsIFUrMDM4QywgVSswMzhFLTAzQTEsIFUrMDNBMy0wM0ZGOwp9Ci8qIHZpZXRuYW1lc2UgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWEycEw3VzBJNW52d1VnSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSswMTEwLTAxMTEsIFUrMDEyOC0wMTI5LCBVKzAxNjgtMDE2OSwgVSswMUEwLTAxQTEsIFUrMDFBRi0wMUIwLCBVKzAzMDAtMDMwMSwgVSswMzAzLTAzMDQsIFUrMDMwOC0wMzA5LCBVKzAzMjMsIFUrMDMyOSwgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQovKiBsYXRpbi1leHQgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWEyNUw3VzBJNW52d1VnSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDJCQSwgVSswMkJELTAyQzUsIFUrMDJDNy0wMkNDLCBVKzAyQ0UtMDJENywgVSswMkRELTAyRkYsIFUrMDMwNCwgVSswMzA4LCBVKzAzMjksIFUrMUQwMC0xREJGLCBVKzFFMDAtMUU5RiwgVSsxRUYyLTFFRkYsIFUrMjAyMCwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMEMwLCBVKzIxMTMsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQovKiBsYXRpbiAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M3M0Z3ckszaUxUZUh1U19uVk1yTXhDcDUwU2pJYTFaTDdXMEk1bnZ3VS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQkItMDJCQywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSswMzA0LCBVKzAzMDgsIFUrMDMyOSwgVSsyMDAwLTIwNkYsIFUrMjBBQywgVSsyMTIyLCBVKzIxOTEsIFUrMjE5MywgVSsyMjEyLCBVKzIyMTUsIFUrRkVGRiwgVStGRkZEOwp9Ci8qIGN5cmlsbGljLWV4dCAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDgwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M3M0Z3ckszaUxUZUh1U19uVk1yTXhDcDUwU2pJYTJKTDdXMEk1bnZ3VWdIVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzFDODAtMUM4QSwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUYsIFUrRkUyRS1GRTJGOwp9Ci8qIGN5cmlsbGljICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogODAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMFpMN1cwSTVudndVZ0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzAxLCBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KLyogZ3JlZWstZXh0ICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogODAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMlpMN1cwSTVudndVZ0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KLyogZ3JlZWsgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA4MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWExcEw3VzBJNW52d1VnSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDM3NywgVSswMzdBLTAzN0YsIFUrMDM4NC0wMzhBLCBVKzAzOEMsIFUrMDM4RS0wM0ExLCBVKzAzQTMtMDNGRjsKfQovKiB2aWV0bmFtZXNlICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogODAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMnBMN1cwSTVudndVZ0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMDExMC0wMTExLCBVKzAxMjgtMDEyOSwgVSswMTY4LTAxNjksIFUrMDFBMC0wMUExLCBVKzAxQUYtMDFCMCwgVSswMzAwLTAzMDEsIFUrMDMwMy0wMzA0LCBVKzAzMDgtMDMwOSwgVSswMzIzLCBVKzAzMjksIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KLyogbGF0aW4tZXh0ICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogODAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMjVMN1cwSTVudndVZ0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyQkEsIFUrMDJCRC0wMkM1LCBVKzAyQzctMDJDQywgVSswMkNFLTAyRDcsIFUrMDJERC0wMkZGLCBVKzAzMDQsIFUrMDMwOCwgVSswMzI5LCBVKzFEMDAtMURCRiwgVSsxRTAwLTFFOUYsIFUrMUVGMi0xRUZGLCBVKzIwMjAsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDMCwgVSsyMTEzLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KLyogbGF0aW4gKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA4MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWExWkw3VzBJNW52d1Uud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkJCLTAyQkMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMDMwNCwgVSswMzA4LCBVKzAzMjksIFUrMjAwMC0yMDZGLCBVKzIwQUMsIFUrMjEyMiwgVSsyMTkxLCBVKzIxOTMsIFUrMjIxMiwgVSsyMjE1LCBVK0ZFRkYsIFUrRkZGRDsKfQo="}},"time_used":83,"timings":{"blocked":-1,"dns":0,"connect":15,"send":0,"wait":34,"receive":0,"ssl":33},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"1nch-svap.com/assets/walletconnect-CEkgoR9i.js","fqdn":"1nch-svap.com","domain":"1nch-svap.com","tld":"com"},"ip":{"addr":"104.21.75.136","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://1nch-svap.com/","date":"2026-07-27T09:36:06.069Z","timestamp":1785144966069,"http_version":"HTTP/3","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"1nch-svap.com","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Sat, 25 Jul 2026 23:12:54 GMT","end":"Sat, 24 Oct 2026 00:11:42 GMT"},"fingerprint":{"sha1":"AC:8D:24:B7:93:96:7F:75:AF:8B:42:06:6A:52:88:B7:26:2A:AB:CA","sha256":"86:DE:73:A5:AD:EB:38:13:F1:14:61:D6:2F:48:3B:8B:38:4F:60:E5:95:4D:89:FE:BD:DB:2B:C3:94:10:DC:D3"}}},"request":{"raw":"GET /assets/walletconnect-CEkgoR9i.js HTTP/1.1\r\nHost: 1nch-svap.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://1nch-svap.com/\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=1\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/3 200 \r\nserver: cloudflare\r\ndate: Mon, 27 Jul 2026 09:36:06 GMT\r\ncontent-type: application/javascript\r\nlast-modified: Sun, 26 Jul 2026 12:28:54 GMT\r\nnel: {\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}\r\npriority: u=1,i=?0\r\nvary: Accept-Encoding\r\netag: W/\"6a65fd86-7d280\"\r\nexpires: Wed, 26 Aug 2026 07:59:11 GMT\r\ncache-control: public, max-age=2592000, immutable\r\ncontent-encoding: gzip\r\nage: 5814\r\ncf-cache-status: HIT\r\nreport-to: {\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=Fu1cVpLdaMmAUqhz487zRI67kV34pQH05KP%2FnCiWQdKyIE2nJrSSGAQuy8KFkXo1s6PkGZyRd1qnqsq%2F5jSd6YM%2BRtftY7M3iVxS%2FqGIPKU%2B2n%2FdPU%2FPo2FFv20vUapH\"}]}\r\ncf-ray: a21aa865e8255699-OSL\r\nalt-svc: h3=\":443\"; ma=86400\r\nserver-timing: cfExtPri\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}],"data":{"size":512640,"size_decoded":154690,"mime_type":"application/javascript","magic":"JavaScript source, ASCII text, with very long lines (41441)","md5":"4a71dcd572ab7aaf4923d272c1da007a","sha1":"4447e49c51675a948c5db4267774db5e478ddc89","sha256":"7942cba5e9ff0c2e6e01a960d61c60ac5094f437d6e68cf2857244cf25ba53d5","sha512":"4b6b45db4497363a49418959c8479600ed87a7fd63e25c377cea14577532ad9c06c2bbe2545118b7a2c9d12995f3c1683e7810c24e76f00a1db6e70c14d5fe09","ssdeep":"12288:FCdRclLLSf4ZMy+oK37afWPUsKAyixsWleNSou:F7LLSXy+obWPUsKAyiveNvu","tlshash":"95b44b8073a5a07243da55e994371101f239d8643049846cfbacedff7da588a9a7ff38","first_seen":"2026-07-27T07:59:48.822501Z","last_seen":"2026-07-27T09:36:42.910647Z","times_seen":2,"resource_available":true,"data":"Y29uc3QgX192aXRlX19tYXBEZXBzPShpLG09X192aXRlX19tYXBEZXBzLGQ9KG0uZnx8KG0uZj1bImFzc2V0cy9pbmRleC1CRlBRN0EtQS5qcyIsImFzc2V0cy9yZWFjdC1CSEw5TXVIWi5qcyJdKSkpPT5pLm1hcChpPT5kW2ldKTsKdmFyIEUwPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgdjA9KHQsZSxyKT0+ZSBpbiB0P0UwKHQsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6cn0pOnRbZV09cjt2YXIgdGU9KHQsZSxyKT0+djAodCx0eXBlb2YgZSE9InN5bWJvbCI/ZSsiIjplLHIpO2ltcG9ydHtnIGFzIE9jLGEgYXMgeDAsYyBhcyBadH1mcm9tIi4vcmVhY3QtQkhMOU11SFouanMiO2NvbnN0IF8wPSJtb2R1bGVwcmVsb2FkIixJMD1mdW5jdGlvbih0KXtyZXR1cm4iLyIrdH0sT3U9e30sUzA9ZnVuY3Rpb24oZSxyLG4pe2xldCBpPVByb21pc2UucmVzb2x2ZSgpO2lmKHImJnIubGVuZ3RoPjApe2RvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsaW5rIik7Y29uc3Qgbz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJtZXRhW3Byb3BlcnR5PWNzcC1ub25jZV0iKSxhPW8/Lm5vbmNlfHxvPy5nZXRBdHRyaWJ1dGUoIm5vbmNlIik7aT1Qcm9taXNlLmFsbFNldHRsZWQoci5tYXAoYz0+e2lmKGM9STAoYyksYyBpbiBPdSlyZXR1cm47T3VbY109ITA7Y29uc3QgdT1jLmVuZHNXaXRoKCIuY3NzIiksbD11PydbcmVsPSJzdHlsZXNoZWV0Il0nOiIiO2lmKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYGxpbmtbaHJlZj0iJHtjfSJdJHtsfWApKXJldHVybjtjb25zdCBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTtpZihoLnJlbD11PyJzdHlsZXNoZWV0IjpfMCx1fHwoaC5hcz0ic2NyaXB0IiksaC5jcm9zc09yaWdpbj0iIixoLmhyZWY9YyxhJiZoLnNldEF0dHJpYnV0ZSgibm9uY2UiLGEpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoaCksdSlyZXR1cm4gbmV3IFByb21pc2UoKHAsZyk9PntoLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHApLGguYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCgpPT5nKG5ldyBFcnJvcihgVW5hYmxlIHRvIHByZWxvYWQgQ1NTIGZvciAke2N9YCkpKX0pfSkpfWZ1bmN0aW9uIHMobyl7Y29uc3QgYT1uZXcgRXZlbnQoInZpdGU6cHJlbG9hZEVycm9yIix7Y2FuY2VsYWJsZTohMH0pO2lmKGEucGF5bG9hZD1vLHdpbmRvdy5kaXNwYXRjaEV2ZW50KGEpLCFhLmRlZmF1bHRQcmV2ZW50ZWQpdGhyb3cgb31yZXR1cm4gaS50aGVuKG89Pntmb3IoY29uc3QgYSBvZiBvfHxbXSlhLnN0YXR1cz09PSJyZWplY3RlZCImJnMoYS5yZWFzb24pO3JldHVybiBlKCkuY2F0Y2gocyl9KX07ZnVuY3Rpb24gQTAodCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsImRlZmF1bHQiKT90LmRlZmF1bHQ6dH12YXIgbWY9e2V4cG9ydHM6e319LF9lPW1mLmV4cG9ydHM9e30sR3QsWXQ7ZnVuY3Rpb24gcWEoKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBqYSgpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9KGZ1bmN0aW9uKCl7dHJ5e3R5cGVvZiBzZXRUaW1lb3V0PT0iZnVuY3Rpb24iP0d0PXNldFRpbWVvdXQ6R3Q9cWF9Y2F0Y2h7R3Q9cWF9dHJ5e3R5cGVvZiBjbGVhclRpbWVvdXQ9PSJmdW5jdGlvbiI/WXQ9Y2xlYXJUaW1lb3V0Oll0PWphfWNhdGNoe1l0PWphfX0pKCk7ZnVuY3Rpb24gYmYodCl7aWYoR3Q9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KHQsMCk7aWYoKEd0PT09cWF8fCFHdCkmJnNldFRpbWVvdXQpcmV0dXJuIEd0PXNldFRpbWVvdXQsc2V0VGltZW91dCh0LDApO3RyeXtyZXR1cm4gR3QodCwwKX1jYXRjaHt0cnl7cmV0dXJuIEd0LmNhbGwobnVsbCx0LDApfWNhdGNoe3JldHVybiBHdC5jYWxsKHRoaXMsdCwwKX19fWZ1bmN0aW9uIEQwKHQpe2lmKFl0PT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQodCk7aWYoKFl0PT09amF8fCFZdCkmJmNsZWFyVGltZW91dClyZXR1cm4gWXQ9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dCh0KTt0cnl7cmV0dXJuIFl0KHQpfWNhdGNoe3RyeXtyZXR1cm4gWXQuY2FsbChudWxsLHQpfWNhdGNoe3JldHVybiBZdC5jYWxsKHRoaXMsdCl9fX12YXIgbXI9W10sWG49ITEsZ24sTnM9LTE7ZnVuY3Rpb24gTzAoKXshWG58fCFnbnx8KFhuPSExLGduLmxlbmd0aD9tcj1nbi5jb25jYXQobXIpOk5zPS0xLG1yLmxlbmd0aCYmRWYoKSl9ZnVuY3Rpb24gRWYoKXtpZighWG4pe3ZhciB0PWJmKE8wKTtYbj0hMDtmb3IodmFyIGU9bXIubGVuZ3RoO2U7KXtmb3IoZ249bXIsbXI9W107KytOczxlOylnbiYmZ25bTnNdLnJ1bigpO05zPS0xLGU9bXIubGVuZ3RofWduPW51bGwsWG49ITEsRDAodCl9fV9lLm5leHRUaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWVbci0xXT1hcmd1bWVudHNbcl07bXIucHVzaChuZXcgdmYodCxlKSksbXIubGVuZ3RoPT09MSYmIVhuJiZiZihFZil9O2Z1bmN0aW9uIHZmKHQsZSl7dGhpcy5mdW49dCx0aGlzLmFycmF5PWV9dmYucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O19lLnRpdGxlPSJicm93c2VyIjtfZS5icm93c2VyPSEwO19lLmVudj17fTtfZS5hcmd2PVtdO19lLnZlcnNpb249IiI7X2UudmVyc2lvbnM9e307ZnVuY3Rpb24gU3IoKXt9X2Uub249U3I7X2UuYWRkTGlzdGVuZXI9U3I7X2Uub25jZT1TcjtfZS5vZmY9U3I7X2UucmVtb3ZlTGlzdGVuZXI9U3I7X2UucmVtb3ZlQWxsTGlzdGVuZXJzPVNyO19lLmVtaXQ9U3I7X2UucHJlcGVuZExpc3RlbmVyPVNyO19lLnByZXBlbmRPbmNlTGlzdGVuZXI9U3I7X2UubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybltdfTtfZS5iaW5kaW5nPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX07X2UuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifTtfZS5jaGRpcj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfTtfZS51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfTt2YXIgJDA9bWYuZXhwb3J0cztjb25zdCBfdD1BMCgkMCksYWU9Z2xvYmFsVGhpc3x8dm9pZCAwfHxzZWxmO3ZhciAkYz17ZXhwb3J0czp7fX0sSm49dHlwZW9mIFJlZmxlY3Q9PSJvYmplY3QiP1JlZmxlY3Q6bnVsbCwkdT1KbiYmdHlwZW9mIEpuLmFwcGx5PT0iZnVuY3Rpb24iP0puLmFwcGx5OmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoZSxyLG4pfSxMcztKbiYmdHlwZW9mIEpuLm93bktleXM9PSJmdW5jdGlvbiI/THM9Sm4ub3duS2V5czpPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP0xzPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKSl9OkxzPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKX07ZnVuY3Rpb24gQjAodCl7Y29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4odCl9dmFyIHhmPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT1lfTtmdW5jdGlvbiBoZSgpe2hlLmluaXQuY2FsbCh0aGlzKX0kYy5leHBvcnRzPWhlOyRjLmV4cG9ydHMub25jZT1DMDtoZS5FdmVudEVtaXR0ZXI9aGU7aGUucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwO2hlLnByb3RvdHlwZS5fZXZlbnRzQ291bnQ9MDtoZS5wcm90b3R5cGUuX21heExpc3RlbmVycz12b2lkIDA7dmFyIEJ1PTEwO2Z1bmN0aW9uIHdvKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAibGlzdGVuZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiB0KX1PYmplY3QuZGVmaW5lUHJvcGVydHkoaGUsImRlZmF1bHRNYXhMaXN0ZW5lcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCdX0sc2V0OmZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0IT0ibnVtYmVyInx8dDwwfHx4Zih0KSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJkZWZhdWx0TWF4TGlzdGVuZXJzIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK3QrIi4iKTtCdT10fX0pO2hlLmluaXQ9ZnVuY3Rpb24oKXsodGhpcy5fZXZlbnRzPT09dm9pZCAwfHx0aGlzLl9ldmVudHM9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50cykmJih0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9O2hlLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oZSl7aWYodHlwZW9mIGUhPSJudW1iZXIifHxlPDB8fHhmKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgIm4iIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrZSsiLiIpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9ZSx0aGlzfTtmdW5jdGlvbiBfZih0KXtyZXR1cm4gdC5fbWF4TGlzdGVuZXJzPT09dm9pZCAwP2hlLmRlZmF1bHRNYXhMaXN0ZW5lcnM6dC5fbWF4TGlzdGVuZXJzfWhlLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gX2YodGhpcyl9O2hlLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyLnB1c2goYXJndW1lbnRzW25dKTt2YXIgaT1lPT09ImVycm9yIixzPXRoaXMuX2V2ZW50cztpZihzIT09dm9pZCAwKWk9aSYmcy5lcnJvcj09PXZvaWQgMDtlbHNlIGlmKCFpKXJldHVybiExO2lmKGkpe3ZhciBvO2lmKHIubGVuZ3RoPjAmJihvPXJbMF0pLG8gaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBvO3ZhciBhPW5ldyBFcnJvcigiVW5oYW5kbGVkIGVycm9yLiIrKG8/IiAoIitvLm1lc3NhZ2UrIikiOiIiKSk7dGhyb3cgYS5jb250ZXh0PW8sYX12YXIgYz1zW2VdO2lmKGM9PT12b2lkIDApcmV0dXJuITE7aWYodHlwZW9mIGM9PSJmdW5jdGlvbiIpJHUoYyx0aGlzLHIpO2Vsc2UgZm9yKHZhciB1PWMubGVuZ3RoLGw9T2YoYyx1KSxuPTA7bjx1OysrbikkdShsW25dLHRoaXMscik7cmV0dXJuITB9O2Z1bmN0aW9uIElmKHQsZSxyLG4pe3ZhciBpLHMsbztpZih3byhyKSxzPXQuX2V2ZW50cyxzPT09dm9pZCAwPyhzPXQuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHQuX2V2ZW50c0NvdW50PTApOihzLm5ld0xpc3RlbmVyIT09dm9pZCAwJiYodC5lbWl0KCJuZXdMaXN0ZW5lciIsZSxyLmxpc3RlbmVyP3IubGlzdGVuZXI6cikscz10Ll9ldmVudHMpLG89c1tlXSksbz09PXZvaWQgMClvPXNbZV09ciwrK3QuX2V2ZW50c0NvdW50O2Vsc2UgaWYodHlwZW9mIG89PSJmdW5jdGlvbiI/bz1zW2VdPW4/W3Isb106W28scl06bj9vLnVuc2hpZnQocik6by5wdXNoKHIpLGk9X2YodCksaT4wJiZvLmxlbmd0aD5pJiYhby53YXJuZWQpe28ud2FybmVkPSEwO3ZhciBhPW5ldyBFcnJvcigiUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAiK28ubGVuZ3RoKyIgIitTdHJpbmcoZSkrIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0Iik7YS5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmciLGEuZW1pdHRlcj10LGEudHlwZT1lLGEuY291bnQ9by5sZW5ndGgsQjAoYSl9cmV0dXJuIHR9aGUucHJvdG90eXBlLmFkZExpc3RlbmVyPWZ1bmN0aW9uKGUscil7cmV0dXJuIElmKHRoaXMsZSxyLCExKX07aGUucHJvdG90eXBlLm9uPWhlLnByb3RvdHlwZS5hZGRMaXN0ZW5lcjtoZS5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyPWZ1bmN0aW9uKGUscil7cmV0dXJuIElmKHRoaXMsZSxyLCEwKX07ZnVuY3Rpb24gUDAoKXtpZighdGhpcy5maXJlZClyZXR1cm4gdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEwLGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk6dGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCxhcmd1bWVudHMpfWZ1bmN0aW9uIFNmKHQsZSxyKXt2YXIgbj17ZmlyZWQ6ITEsd3JhcEZuOnZvaWQgMCx0YXJnZXQ6dCx0eXBlOmUsbGlzdGVuZXI6cn0saT1QMC5iaW5kKG4pO3JldHVybiBpLmxpc3RlbmVyPXIsbi53cmFwRm49aSxpfWhlLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKGUscil7cmV0dXJuIHdvKHIpLHRoaXMub24oZSxTZih0aGlzLGUscikpLHRoaXN9O2hlLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyPWZ1bmN0aW9uKGUscil7cmV0dXJuIHdvKHIpLHRoaXMucHJlcGVuZExpc3RlbmVyKGUsU2YodGhpcyxlLHIpKSx0aGlzfTtoZS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oZSxyKXt2YXIgbixpLHMsbyxhO2lmKHdvKHIpLGk9dGhpcy5fZXZlbnRzLGk9PT12b2lkIDApcmV0dXJuIHRoaXM7aWYobj1pW2VdLG49PT12b2lkIDApcmV0dXJuIHRoaXM7aWYobj09PXJ8fG4ubGlzdGVuZXI9PT1yKS0tdGhpcy5fZXZlbnRzQ291bnQ9PT0wP3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOihkZWxldGUgaVtlXSxpLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixlLG4ubGlzdGVuZXJ8fHIpKTtlbHNlIGlmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXtmb3Iocz0tMSxvPW4ubGVuZ3RoLTE7bz49MDtvLS0paWYobltvXT09PXJ8fG5bb10ubGlzdGVuZXI9PT1yKXthPW5bb10ubGlzdGVuZXIscz1vO2JyZWFrfWlmKHM8MClyZXR1cm4gdGhpcztzPT09MD9uLnNoaWZ0KCk6VDAobixzKSxuLmxlbmd0aD09PTEmJihpW2VdPW5bMF0pLGkucmVtb3ZlTGlzdGVuZXIhPT12b2lkIDAmJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLGUsYXx8cil9cmV0dXJuIHRoaXN9O2hlLnByb3RvdHlwZS5vZmY9aGUucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO2hlLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oZSl7dmFyIHIsbixpO2lmKG49dGhpcy5fZXZlbnRzLG49PT12b2lkIDApcmV0dXJuIHRoaXM7aWYobi5yZW1vdmVMaXN0ZW5lcj09PXZvaWQgMClyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOm5bZV0hPT12b2lkIDAmJigtLXRoaXMuX2V2ZW50c0NvdW50PT09MD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTpkZWxldGUgbltlXSksdGhpcztpZihhcmd1bWVudHMubGVuZ3RoPT09MCl7dmFyIHM9T2JqZWN0LmtleXMobiksbztmb3IoaT0wO2k8cy5sZW5ndGg7KytpKW89c1tpXSxvIT09InJlbW92ZUxpc3RlbmVyIiYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMobyk7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCJyZW1vdmVMaXN0ZW5lciIpLHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTAsdGhpc31pZihyPW5bZV0sdHlwZW9mIHI9PSJmdW5jdGlvbiIpdGhpcy5yZW1vdmVMaXN0ZW5lcihlLHIpO2Vsc2UgaWYociE9PXZvaWQgMClmb3IoaT1yLmxlbmd0aC0xO2k+PTA7aS0tKXRoaXMucmVtb3ZlTGlzdGVuZXIoZSxyW2ldKTtyZXR1cm4gdGhpc307ZnVuY3Rpb24gQWYodCxlLHIpe3ZhciBuPXQuX2V2ZW50cztpZihuPT09dm9pZCAwKXJldHVybltdO3ZhciBpPW5bZV07cmV0dXJuIGk9PT12b2lkIDA/W106dHlwZW9mIGk9PSJmdW5jdGlvbiI/cj9baS5saXN0ZW5lcnx8aV06W2ldOnI/UjAoaSk6T2YoaSxpLmxlbmd0aCl9aGUucHJvdG90eXBlLmxpc3RlbmVycz1mdW5jdGlvbihlKXtyZXR1cm4gQWYodGhpcyxlLCEwKX07aGUucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbihlKXtyZXR1cm4gQWYodGhpcyxlLCExKX07aGUubGlzdGVuZXJDb3VudD1mdW5jdGlvbih0LGUpe3JldHVybiB0eXBlb2YgdC5saXN0ZW5lckNvdW50PT0iZnVuY3Rpb24iP3QubGlzdGVuZXJDb3VudChlKTpEZi5jYWxsKHQsZSl9O2hlLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PURmO2Z1bmN0aW9uIERmKHQpe3ZhciBlPXRoaXMuX2V2ZW50cztpZihlIT09dm9pZCAwKXt2YXIgcj1lW3RdO2lmKHR5cGVvZiByPT0iZnVuY3Rpb24iKXJldHVybiAxO2lmKHIhPT12b2lkIDApcmV0dXJuIHIubGVuZ3RofXJldHVybiAwfWhlLnByb3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50PjA/THModGhpcy5fZXZlbnRzKTpbXX07ZnVuY3Rpb24gT2YodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09dFtuXTtyZXR1cm4gcn1mdW5jdGlvbiBUMCh0LGUpe2Zvcig7ZSsxPHQubGVuZ3RoO2UrKyl0W2VdPXRbZSsxXTt0LnBvcCgpfWZ1bmN0aW9uIFIwKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MDtyPGUubGVuZ3RoOysrcillW3JdPXRbcl0ubGlzdGVuZXJ8fHRbcl07cmV0dXJuIGV9ZnVuY3Rpb24gQzAodCxlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixuKXtmdW5jdGlvbiBpKG8pe3QucmVtb3ZlTGlzdGVuZXIoZSxzKSxuKG8pfWZ1bmN0aW9uIHMoKXt0eXBlb2YgdC5yZW1vdmVMaXN0ZW5lcj09ImZ1bmN0aW9uIiYmdC5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLGkpLHIoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX0kZih0LGUscyx7b25jZTohMH0pLGUhPT0iZXJyb3IiJiZVMCh0LGkse29uY2U6ITB9KX0pfWZ1bmN0aW9uIFUwKHQsZSxyKXt0eXBlb2YgdC5vbj09ImZ1bmN0aW9uIiYmJGYodCwiZXJyb3IiLGUscil9ZnVuY3Rpb24gJGYodCxlLHIsbil7aWYodHlwZW9mIHQub249PSJmdW5jdGlvbiIpbi5vbmNlP3Qub25jZShlLHIpOnQub24oZSxyKTtlbHNlIGlmKHR5cGVvZiB0LmFkZEV2ZW50TGlzdGVuZXI9PSJmdW5jdGlvbiIpdC5hZGRFdmVudExpc3RlbmVyKGUsZnVuY3Rpb24gaShzKXtuLm9uY2UmJnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGkpLHIocyl9KTtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZW1pdHRlciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiB0KX12YXIgU3Q9JGMuZXhwb3J0cztjb25zdCBCYz1PYyhTdCk7dmFyIEc9e307LyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLgoKUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIClJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQpBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTQpMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgpPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SClBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovdmFyIHphPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHphPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihyLG4pe3IuX19wcm90b19fPW59fHxmdW5jdGlvbihyLG4pe2Zvcih2YXIgaSBpbiBuKW4uaGFzT3duUHJvcGVydHkoaSkmJihyW2ldPW5baV0pfSx6YSh0LGUpfTtmdW5jdGlvbiBOMCh0LGUpe3phKHQsZSk7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9dH10LnByb3RvdHlwZT1lPT09bnVsbD9PYmplY3QuY3JlYXRlKGUpOihyLnByb3RvdHlwZT1lLnByb3RvdHlwZSxuZXcgcil9dmFyIEhhPWZ1bmN0aW9uKCl7cmV0dXJuIEhhPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgcixuPTEsaT1hcmd1bWVudHMubGVuZ3RoO248aTtuKyspe3I9YXJndW1lbnRzW25dO2Zvcih2YXIgcyBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLHMpJiYoZVtzXT1yW3NdKX1yZXR1cm4gZX0sSGEuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiBMMCh0LGUpe3ZhciByPXt9O2Zvcih2YXIgbiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiZlLmluZGV4T2Yobik8MCYmKHJbbl09dFtuXSk7aWYodCE9bnVsbCYmdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM9PSJmdW5jdGlvbiIpZm9yKHZhciBpPTAsbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2k8bi5sZW5ndGg7aSsrKWUuaW5kZXhPZihuW2ldKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodCxuW2ldKSYmKHJbbltpXV09dFtuW2ldXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gRjAodCxlLHIsbil7dmFyIGk9YXJndW1lbnRzLmxlbmd0aCxzPWk8Mz9lOm49PT1udWxsP249T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHIpOm4sbztpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0LmRlY29yYXRlPT0iZnVuY3Rpb24iKXM9UmVmbGVjdC5kZWNvcmF0ZSh0LGUscixuKTtlbHNlIGZvcih2YXIgYT10Lmxlbmd0aC0xO2E+PTA7YS0tKShvPXRbYV0pJiYocz0oaTwzP28ocyk6aT4zP28oZSxyLHMpOm8oZSxyKSl8fHMpO3JldHVybiBpPjMmJnMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIscyksc31mdW5jdGlvbiBrMCh0LGUpe3JldHVybiBmdW5jdGlvbihyLG4pe2UocixuLHQpfX1mdW5jdGlvbiBNMCh0LGUpe2lmKHR5cGVvZiBSZWZsZWN0PT0ib2JqZWN0IiYmdHlwZW9mIFJlZmxlY3QubWV0YWRhdGE9PSJmdW5jdGlvbiIpcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEodCxlKX1mdW5jdGlvbiBxMCh0LGUscixuKXtmdW5jdGlvbiBpKHMpe3JldHVybiBzIGluc3RhbmNlb2Ygcj9zOm5ldyByKGZ1bmN0aW9uKG8pe28ocyl9KX1yZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKShmdW5jdGlvbihzLG8pe2Z1bmN0aW9uIGEobCl7dHJ5e3Uobi5uZXh0KGwpKX1jYXRjaChoKXtvKGgpfX1mdW5jdGlvbiBjKGwpe3RyeXt1KG4udGhyb3cobCkpfWNhdGNoKGgpe28oaCl9fWZ1bmN0aW9uIHUobCl7bC5kb25lP3MobC52YWx1ZSk6aShsLnZhbHVlKS50aGVuKGEsYyl9dSgobj1uLmFwcGx5KHQsZXx8W10pKS5uZXh0KCkpfSl9ZnVuY3Rpb24gajAodCxlKXt2YXIgcj17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoc1swXSYxKXRocm93IHNbMV07cmV0dXJuIHNbMV19LHRyeXM6W10sb3BzOltdfSxuLGkscyxvO3JldHVybiBvPXtuZXh0OmEoMCksdGhyb3c6YSgxKSxyZXR1cm46YSgyKX0sdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmKG9bU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksbztmdW5jdGlvbiBhKHUpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gYyhbdSxsXSl9fWZ1bmN0aW9uIGModSl7aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtyOyl0cnl7aWYobj0xLGkmJihzPXVbMF0mMj9pLnJldHVybjp1WzBdP2kudGhyb3d8fCgocz1pLnJldHVybikmJnMuY2FsbChpKSwwKTppLm5leHQpJiYhKHM9cy5jYWxsKGksdVsxXSkpLmRvbmUpcmV0dXJuIHM7c3dpdGNoKGk9MCxzJiYodT1bdVswXSYyLHMudmFsdWVdKSx1WzBdKXtjYXNlIDA6Y2FzZSAxOnM9dTticmVhaztjYXNlIDQ6cmV0dXJuIHIubGFiZWwrKyx7dmFsdWU6dVsxXSxkb25lOiExfTtjYXNlIDU6ci5sYWJlbCsrLGk9dVsxXSx1PVswXTtjb250aW51ZTtjYXNlIDc6dT1yLm9wcy5wb3AoKSxyLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZihzPXIudHJ5cywhKHM9cy5sZW5ndGg+MCYmc1tzLmxlbmd0aC0xXSkmJih1WzBdPT09Nnx8dVswXT09PTIpKXtyPTA7Y29udGludWV9aWYodVswXT09PTMmJighc3x8dVsxXT5zWzBdJiZ1WzFdPHNbM10pKXtyLmxhYmVsPXVbMV07YnJlYWt9aWYodVswXT09PTYmJnIubGFiZWw8c1sxXSl7ci5sYWJlbD1zWzFdLHM9dTticmVha31pZihzJiZyLmxhYmVsPHNbMl0pe3IubGFiZWw9c1syXSxyLm9wcy5wdXNoKHUpO2JyZWFrfXNbMl0mJnIub3BzLnBvcCgpLHIudHJ5cy5wb3AoKTtjb250aW51ZX11PWUuY2FsbCh0LHIpfWNhdGNoKGwpe3U9WzYsbF0saT0wfWZpbmFsbHl7bj1zPTB9aWYodVswXSY1KXRocm93IHVbMV07cmV0dXJue3ZhbHVlOnVbMF0/dVsxXTp2b2lkIDAsZG9uZTohMH19fWZ1bmN0aW9uIHowKHQsZSxyLG4pe249PT12b2lkIDAmJihuPXIpLHRbbl09ZVtyXX1mdW5jdGlvbiBIMCh0LGUpe2Zvcih2YXIgciBpbiB0KXIhPT0iZGVmYXVsdCImJiFlLmhhc093blByb3BlcnR5KHIpJiYoZVtyXT10W3JdKX1mdW5jdGlvbiBLYSh0KXt2YXIgZT10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wuaXRlcmF0b3Iscj1lJiZ0W2VdLG49MDtpZihyKXJldHVybiByLmNhbGwodCk7aWYodCYmdHlwZW9mIHQubGVuZ3RoPT0ibnVtYmVyIilyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybiB0JiZuPj10Lmxlbmd0aCYmKHQ9dm9pZCAwKSx7dmFsdWU6dCYmdFtuKytdLGRvbmU6IXR9fX07dGhyb3cgbmV3IFR5cGVFcnJvcihlPyJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLiI6IlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKX1mdW5jdGlvbiBCZih0LGUpe3ZhciByPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnRbU3ltYm9sLml0ZXJhdG9yXTtpZighcilyZXR1cm4gdDt2YXIgbj1yLmNhbGwodCksaSxzPVtdLG87dHJ5e2Zvcig7KGU9PT12b2lkIDB8fGUtLSA+MCkmJiEoaT1uLm5leHQoKSkuZG9uZTspcy5wdXNoKGkudmFsdWUpfWNhdGNoKGEpe289e2Vycm9yOmF9fWZpbmFsbHl7dHJ5e2kmJiFpLmRvbmUmJihyPW4ucmV0dXJuKSYmci5jYWxsKG4pfWZpbmFsbHl7aWYobyl0aHJvdyBvLmVycm9yfX1yZXR1cm4gc31mdW5jdGlvbiBLMCgpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0PXQuY29uY2F0KEJmKGFyZ3VtZW50c1tlXSkpO3JldHVybiB0fWZ1bmN0aW9uIFYwKCl7Zm9yKHZhciB0PTAsZT0wLHI9YXJndW1lbnRzLmxlbmd0aDtlPHI7ZSsrKXQrPWFyZ3VtZW50c1tlXS5sZW5ndGg7Zm9yKHZhciBuPUFycmF5KHQpLGk9MCxlPTA7ZTxyO2UrKylmb3IodmFyIHM9YXJndW1lbnRzW2VdLG89MCxhPXMubGVuZ3RoO288YTtvKyssaSsrKW5baV09c1tvXTtyZXR1cm4gbn1mdW5jdGlvbiBxaSh0KXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHFpPyh0aGlzLnY9dCx0aGlzKTpuZXcgcWkodCl9ZnVuY3Rpb24gVzAodCxlLHIpe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgbj1yLmFwcGx5KHQsZXx8W10pLGkscz1bXTtyZXR1cm4gaT17fSxvKCJuZXh0IiksbygidGhyb3ciKSxvKCJyZXR1cm4iKSxpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxpO2Z1bmN0aW9uIG8ocCl7bltwXSYmKGlbcF09ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHcsYil7cy5wdXNoKFtwLGcsdyxiXSk+MXx8YShwLGcpfSl9KX1mdW5jdGlvbiBhKHAsZyl7dHJ5e2MobltwXShnKSl9Y2F0Y2godyl7aChzWzBdWzNdLHcpfX1mdW5jdGlvbiBjKHApe3AudmFsdWUgaW5zdGFuY2VvZiBxaT9Qcm9taXNlLnJlc29sdmUocC52YWx1ZS52KS50aGVuKHUsbCk6aChzWzBdWzJdLHApfWZ1bmN0aW9uIHUocCl7YSgibmV4dCIscCl9ZnVuY3Rpb24gbChwKXthKCJ0aHJvdyIscCl9ZnVuY3Rpb24gaChwLGcpe3AoZykscy5zaGlmdCgpLHMubGVuZ3RoJiZhKHNbMF1bMF0sc1swXVsxXSl9fWZ1bmN0aW9uIEcwKHQpe3ZhciBlLHI7cmV0dXJuIGU9e30sbigibmV4dCIpLG4oInRocm93IixmdW5jdGlvbihpKXt0aHJvdyBpfSksbigicmV0dXJuIiksZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGU7ZnVuY3Rpb24gbihpLHMpe2VbaV09dFtpXT9mdW5jdGlvbihvKXtyZXR1cm4ocj0hcik/e3ZhbHVlOnFpKHRbaV0obykpLGRvbmU6aT09PSJyZXR1cm4ifTpzP3Mobyk6b306c319ZnVuY3Rpb24gWTAodCl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBlPXRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLHI7cmV0dXJuIGU/ZS5jYWxsKHQpOih0PXR5cGVvZiBLYT09ImZ1bmN0aW9uIj9LYSh0KTp0W1N5bWJvbC5pdGVyYXRvcl0oKSxyPXt9LG4oIm5leHQiKSxuKCJ0aHJvdyIpLG4oInJldHVybiIpLHJbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHIpO2Z1bmN0aW9uIG4ocyl7cltzXT10W3NdJiZmdW5jdGlvbihvKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYSxjKXtvPXRbc10obyksaShhLGMsby5kb25lLG8udmFsdWUpfSl9fWZ1bmN0aW9uIGkocyxvLGEsYyl7UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4oZnVuY3Rpb24odSl7cyh7dmFsdWU6dSxkb25lOmF9KX0sbyl9fWZ1bmN0aW9uIFowKHQsZSl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkodCwicmF3Iix7dmFsdWU6ZX0pOnQucmF3PWUsdH1mdW5jdGlvbiBYMCh0KXtpZih0JiZ0Ll9fZXNNb2R1bGUpcmV0dXJuIHQ7dmFyIGU9e307aWYodCE9bnVsbClmb3IodmFyIHIgaW4gdClPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpJiYoZVtyXT10W3JdKTtyZXR1cm4gZS5kZWZhdWx0PXQsZX1mdW5jdGlvbiBKMCh0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6e2RlZmF1bHQ6dH19ZnVuY3Rpb24gUTAodCxlKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX1mdW5jdGlvbiBleSh0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5zZXQodCxyKSxyfWNvbnN0IHR5PU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxnZXQgX19hc3NpZ24oKXtyZXR1cm4gSGF9LF9fYXN5bmNEZWxlZ2F0b3I6RzAsX19hc3luY0dlbmVyYXRvcjpXMCxfX2FzeW5jVmFsdWVzOlkwLF9fYXdhaXQ6cWksX19hd2FpdGVyOnEwLF9fY2xhc3NQcml2YXRlRmllbGRHZXQ6UTAsX19jbGFzc1ByaXZhdGVGaWVsZFNldDpleSxfX2NyZWF0ZUJpbmRpbmc6ejAsX19kZWNvcmF0ZTpGMCxfX2V4cG9ydFN0YXI6SDAsX19leHRlbmRzOk4wLF9fZ2VuZXJhdG9yOmowLF9faW1wb3J0RGVmYXVsdDpKMCxfX2ltcG9ydFN0YXI6WDAsX19tYWtlVGVtcGxhdGVPYmplY3Q6WjAsX19tZXRhZGF0YTpNMCxfX3BhcmFtOmswLF9fcmVhZDpCZixfX3Jlc3Q6TDAsX19zcHJlYWQ6SzAsX19zcHJlYWRBcnJheXM6VjAsX192YWx1ZXM6S2F9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksWGk9eDAodHkpO3ZhciB6bz17fSx3aT17fSxQdTtmdW5jdGlvbiByeSgpe2lmKFB1KXJldHVybiB3aTtQdT0xLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksd2kuZGVsYXk9dm9pZCAwO2Z1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyBQcm9taXNlKHI9PntzZXRUaW1lb3V0KCgpPT57cighMCl9LGUpfSl9cmV0dXJuIHdpLmRlbGF5PXQsd2l9dmFyIHNuPXt9LEhvPXt9LG9uPXt9LFR1O2Z1bmN0aW9uIG55KCl7cmV0dXJuIFR1fHwoVHU9MSxPYmplY3QuZGVmaW5lUHJvcGVydHkob24sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG9uLk9ORV9USE9VU0FORD1vbi5PTkVfSFVORFJFRD12b2lkIDAsb24uT05FX0hVTkRSRUQ9MTAwLG9uLk9ORV9USE9VU0FORD0xZTMpLG9ufXZhciBLbz17fSxSdTtmdW5jdGlvbiBpeSgpe3JldHVybiBSdXx8KFJ1PTEsZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuT05FX1lFQVI9dC5GT1VSX1dFRUtTPXQuVEhSRUVfV0VFS1M9dC5UV09fV0VFS1M9dC5PTkVfV0VFSz10LlRISVJUWV9EQVlTPXQuU0VWRU5fREFZUz10LkZJVkVfREFZUz10LlRIUkVFX0RBWVM9dC5PTkVfREFZPXQuVFdFTlRZX0ZPVVJfSE9VUlM9dC5UV0VMVkVfSE9VUlM9dC5TSVhfSE9VUlM9dC5USFJFRV9IT1VSUz10Lk9ORV9IT1VSPXQuU0lYVFlfTUlOVVRFUz10LlRISVJUWV9NSU5VVEVTPXQuVEVOX01JTlVURVM9dC5GSVZFX01JTlVURVM9dC5PTkVfTUlOVVRFPXQuU0lYVFlfU0VDT05EUz10LlRISVJUWV9TRUNPTkRTPXQuVEVOX1NFQ09ORFM9dC5GSVZFX1NFQ09ORFM9dC5PTkVfU0VDT05EPXZvaWQgMCx0Lk9ORV9TRUNPTkQ9MSx0LkZJVkVfU0VDT05EUz01LHQuVEVOX1NFQ09ORFM9MTAsdC5USElSVFlfU0VDT05EUz0zMCx0LlNJWFRZX1NFQ09ORFM9NjAsdC5PTkVfTUlOVVRFPXQuU0lYVFlfU0VDT05EUyx0LkZJVkVfTUlOVVRFUz10Lk9ORV9NSU5VVEUqNSx0LlRFTl9NSU5VVEVTPXQuT05FX01JTlVURSoxMCx0LlRISVJUWV9NSU5VVEVTPXQuT05FX01JTlVURSozMCx0LlNJWFRZX01JTlVURVM9dC5PTkVfTUlOVVRFKjYwLHQuT05FX0hPVVI9dC5TSVhUWV9NSU5VVEVTLHQuVEhSRUVfSE9VUlM9dC5PTkVfSE9VUiozLHQuU0lYX0hPVVJTPXQuT05FX0hPVVIqNix0LlRXRUxWRV9IT1VSUz10Lk9ORV9IT1VSKjEyLHQuVFdFTlRZX0ZPVVJfSE9VUlM9dC5PTkVfSE9VUioyNCx0Lk9ORV9EQVk9dC5UV0VOVFlfRk9VUl9IT1VSUyx0LlRIUkVFX0RBWVM9dC5PTkVfREFZKjMsdC5GSVZFX0RBWVM9dC5PTkVfREFZKjUsdC5TRVZFTl9EQVlTPXQuT05FX0RBWSo3LHQuVEhJUlRZX0RBWVM9dC5PTkVfREFZKjMwLHQuT05FX1dFRUs9dC5TRVZFTl9EQVlTLHQuVFdPX1dFRUtTPXQuT05FX1dFRUsqMix0LlRIUkVFX1dFRUtTPXQuT05FX1dFRUsqMyx0LkZPVVJfV0VFS1M9dC5PTkVfV0VFSyo0LHQuT05FX1lFQVI9dC5PTkVfREFZKjM2NX0oS28pKSxLb312YXIgQ3U7ZnVuY3Rpb24gUGYoKXtyZXR1cm4gQ3V8fChDdT0xLGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBlPVhpO2UuX19leHBvcnRTdGFyKG55KCksdCksZS5fX2V4cG9ydFN0YXIoaXkoKSx0KX0oSG8pKSxIb312YXIgVXU7ZnVuY3Rpb24gc3koKXtpZihVdSlyZXR1cm4gc247VXU9MSxPYmplY3QuZGVmaW5lUHJvcGVydHkoc24sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHNuLmZyb21NaWxpc2Vjb25kcz1zbi50b01pbGlzZWNvbmRzPXZvaWQgMDtjb25zdCB0PVBmKCk7ZnVuY3Rpb24gZShuKXtyZXR1cm4gbip0Lk9ORV9USE9VU0FORH1zbi50b01pbGlzZWNvbmRzPWU7ZnVuY3Rpb24gcihuKXtyZXR1cm4gTWF0aC5mbG9vcihuL3QuT05FX1RIT1VTQU5EKX1yZXR1cm4gc24uZnJvbU1pbGlzZWNvbmRzPXIsc259dmFyIE51O2Z1bmN0aW9uIG95KCl7cmV0dXJuIE51fHwoTnU9MSxmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3QgZT1YaTtlLl9fZXhwb3J0U3RhcihyeSgpLHQpLGUuX19leHBvcnRTdGFyKHN5KCksdCl9KHpvKSksem99dmFyIGtuPXt9LEx1O2Z1bmN0aW9uIGF5KCl7aWYoTHUpcmV0dXJuIGtuO0x1PTEsT2JqZWN0LmRlZmluZVByb3BlcnR5KGtuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxrbi5XYXRjaD12b2lkIDA7Y2xhc3MgdHtjb25zdHJ1Y3Rvcigpe3RoaXMudGltZXN0YW1wcz1uZXcgTWFwfXN0YXJ0KHIpe2lmKHRoaXMudGltZXN0YW1wcy5oYXMocikpdGhyb3cgbmV3IEVycm9yKGBXYXRjaCBhbHJlYWR5IHN0YXJ0ZWQgZm9yIGxhYmVsOiAke3J9YCk7dGhpcy50aW1lc3RhbXBzLnNldChyLHtzdGFydGVkOkRhdGUubm93KCl9KX1zdG9wKHIpe2NvbnN0IG49dGhpcy5nZXQocik7aWYodHlwZW9mIG4uZWxhcHNlZDwidSIpdGhyb3cgbmV3IEVycm9yKGBXYXRjaCBhbHJlYWR5IHN0b3BwZWQgZm9yIGxhYmVsOiAke3J9YCk7Y29uc3QgaT1EYXRlLm5vdygpLW4uc3RhcnRlZDt0aGlzLnRpbWVzdGFtcHMuc2V0KHIse3N0YXJ0ZWQ6bi5zdGFydGVkLGVsYXBzZWQ6aX0pfWdldChyKXtjb25zdCBuPXRoaXMudGltZXN0YW1wcy5nZXQocik7aWYodHlwZW9mIG4+InUiKXRocm93IG5ldyBFcnJvcihgTm8gdGltZXN0YW1wIGZvdW5kIGZvciBsYWJlbDogJHtyfWApO3JldHVybiBufWVsYXBzZWQocil7Y29uc3Qgbj10aGlzLmdldChyKTtyZXR1cm4gbi5lbGFwc2VkfHxEYXRlLm5vdygpLW4uc3RhcnRlZH19cmV0dXJuIGtuLldhdGNoPXQsa24uZGVmYXVsdD10LGtufXZhciBWbz17fSxtaT17fSxGdTtmdW5jdGlvbiBjeSgpe2lmKEZ1KXJldHVybiBtaTtGdT0xLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtaSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbWkuSVdhdGNoPXZvaWQgMDtjbGFzcyB0e31yZXR1cm4gbWkuSVdhdGNoPXQsbWl9dmFyIGt1O2Z1bmN0aW9uIHV5KCl7cmV0dXJuIGt1fHwoa3U9MSxmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWGkuX19leHBvcnRTdGFyKGN5KCksdCl9KFZvKSksVm99KGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBlPVhpO2UuX19leHBvcnRTdGFyKG95KCksdCksZS5fX2V4cG9ydFN0YXIoYXkoKSx0KSxlLl9fZXhwb3J0U3Rhcih1eSgpLHQpLGUuX19leHBvcnRTdGFyKFBmKCksdCl9KShHKTtjbGFzcyBCbnt9bGV0IGx5PWNsYXNzIGV4dGVuZHMgQm57Y29uc3RydWN0b3IoZSl7c3VwZXIoKX19O2NvbnN0IE11PUcuRklWRV9TRUNPTkRTLFBuPXtwdWxzZToiaGVhcnRiZWF0X3B1bHNlIn07bGV0IGh5PWNsYXNzIFRmIGV4dGVuZHMgbHl7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5ldmVudHM9bmV3IFN0LkV2ZW50RW1pdHRlcix0aGlzLmludGVydmFsPU11LHRoaXMuaW50ZXJ2YWw9ZT8uaW50ZXJ2YWx8fE11fXN0YXRpYyBhc3luYyBpbml0KGUpe2NvbnN0IHI9bmV3IFRmKGUpO3JldHVybiBhd2FpdCByLmluaXQoKSxyfWFzeW5jIGluaXQoKXthd2FpdCB0aGlzLmluaXRpYWxpemUoKX1zdG9wKCl7Y2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsUmVmKX1vbihlLHIpe3RoaXMuZXZlbnRzLm9uKGUscil9b25jZShlLHIpe3RoaXMuZXZlbnRzLm9uY2UoZSxyKX1vZmYoZSxyKXt0aGlzLmV2ZW50cy5vZmYoZSxyKX1yZW1vdmVMaXN0ZW5lcihlLHIpe3RoaXMuZXZlbnRzLnJlbW92ZUxpc3RlbmVyKGUscil9YXN5bmMgaW5pdGlhbGl6ZSgpe3RoaXMuaW50ZXJ2YWxSZWY9c2V0SW50ZXJ2YWwoKCk9PnRoaXMucHVsc2UoKSxHLnRvTWlsaXNlY29uZHModGhpcy5pbnRlcnZhbCkpfXB1bHNlKCl7dGhpcy5ldmVudHMuZW1pdChQbi5wdWxzZSl9fTtjb25zdCBmeT0vIig/Ol98XFx1MHsyfTVbRmZdKXsyfSg/OnB8XFx1MHsyfTcwKSg/OnJ8XFx1MHsyfTcyKSg/Om98XFx1MHsyfTZbRmZdKSg/OnR8XFx1MHsyfTc0KSg/Om98XFx1MHsyfTZbRmZdKSg/Ol98XFx1MHsyfTVbRmZdKXsyfSJccyo6LyxkeT0vIig/OmN8XFx1MDA2MykoPzpvfFxcdTAwNltGZl0pKD86bnxcXHUwMDZbRWVdKSg/OnN8XFx1MDA3MykoPzp0fFxcdTAwNzQpKD86cnxcXHUwMDcyKSg/OnV8XFx1MDA3NSkoPzpjfFxcdTAwNjMpKD86dHxcXHUwMDc0KSg/Om98XFx1MDA2W0ZmXSkoPzpyfFxcdTAwNzIpIlxzKjovLHB5PS9eXHMqWyJbe118XlxzKi0/XGR7MSwxNn0oXC5cZHsxLDE3fSk/KFtFZV1bKy1dP1xkKyk/XHMqJC87ZnVuY3Rpb24gZ3kodCxlKXtpZih0PT09Il9fcHJvdG9fXyJ8fHQ9PT0iY29uc3RydWN0b3IiJiZlJiZ0eXBlb2YgZT09Im9iamVjdCImJiJwcm90b3R5cGUiaW4gZSl7eXkodCk7cmV0dXJufXJldHVybiBlfWZ1bmN0aW9uIHl5KHQpe2NvbnNvbGUud2FybihgW2Rlc3RyXSBEcm9wcGluZyAiJHt0fSIga2V5IHRvIHByZXZlbnQgcHJvdG90eXBlIHBvbGx1dGlvbi5gKX1mdW5jdGlvbiBocyh0LGU9e30pe2lmKHR5cGVvZiB0IT0ic3RyaW5nIilyZXR1cm4gdDtpZih0WzBdPT09JyInJiZ0W3QubGVuZ3RoLTFdPT09JyInJiZ0LmluZGV4T2YoIlxcIik9PT0tMSlyZXR1cm4gdC5zbGljZSgxLC0xKTtjb25zdCByPXQudHJpbSgpO2lmKHIubGVuZ3RoPD05KXN3aXRjaChyLnRvTG93ZXJDYXNlKCkpe2Nhc2UidHJ1ZSI6cmV0dXJuITA7Y2FzZSJmYWxzZSI6cmV0dXJuITE7Y2FzZSJ1bmRlZmluZWQiOnJldHVybjtjYXNlIm51bGwiOnJldHVybiBudWxsO2Nhc2UibmFuIjpyZXR1cm4gTnVtYmVyLk5hTjtjYXNlImluZmluaXR5IjpyZXR1cm4gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2Nhc2UiLWluZmluaXR5IjpyZXR1cm4gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZfWlmKCFweS50ZXN0KHQpKXtpZihlLnN0cmljdCl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIltkZXN0cl0gSW52YWxpZCBKU09OIik7cmV0dXJuIHR9dHJ5e2lmKGZ5LnRlc3QodCl8fGR5LnRlc3QodCkpe2lmKGUuc3RyaWN0KXRocm93IG5ldyBFcnJvcigiW2Rlc3RyXSBQb3NzaWJsZSBwcm90b3R5cGUgcG9sbHV0aW9uIik7cmV0dXJuIEpTT04ucGFyc2UodCxneSl9cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2gobil7aWYoZS5zdHJpY3QpdGhyb3cgbjtyZXR1cm4gdH19dmFyIFJmPXt9LG1vPXt9O21vLmJ5dGVMZW5ndGg9Ynk7bW8udG9CeXRlQXJyYXk9dnk7bW8uZnJvbUJ5dGVBcnJheT1JeTt2YXIgUXQ9W10sYnQ9W10sd3k9dHlwZW9mIFVpbnQ4QXJyYXk8InUiP1VpbnQ4QXJyYXk6QXJyYXksV289IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iO2Zvcih2YXIgTW49MCxteT1Xby5sZW5ndGg7TW48bXk7KytNbilRdFtNbl09V29bTW5dLGJ0W1dvLmNoYXJDb2RlQXQoTW4pXT1NbjtidFs0NV09NjI7YnRbOTVdPTYzO2Z1bmN0aW9uIENmKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGUlND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO3ZhciByPXQuaW5kZXhPZigiPSIpO3I9PT0tMSYmKHI9ZSk7dmFyIG49cj09PWU/MDo0LXIlNDtyZXR1cm5bcixuXX1mdW5jdGlvbiBieSh0KXt2YXIgZT1DZih0KSxyPWVbMF0sbj1lWzFdO3JldHVybihyK24pKjMvNC1ufWZ1bmN0aW9uIEV5KHQsZSxyKXtyZXR1cm4oZStyKSozLzQtcn1mdW5jdGlvbiB2eSh0KXt2YXIgZSxyPUNmKHQpLG49clswXSxpPXJbMV0scz1uZXcgd3koRXkodCxuLGkpKSxvPTAsYT1pPjA/bi00Om4sYztmb3IoYz0wO2M8YTtjKz00KWU9YnRbdC5jaGFyQ29kZUF0KGMpXTw8MTh8YnRbdC5jaGFyQ29kZUF0KGMrMSldPDwxMnxidFt0LmNoYXJDb2RlQXQoYysyKV08PDZ8YnRbdC5jaGFyQ29kZUF0KGMrMyldLHNbbysrXT1lPj4xNiYyNTUsc1tvKytdPWU+PjgmMjU1LHNbbysrXT1lJjI1NTtyZXR1cm4gaT09PTImJihlPWJ0W3QuY2hhckNvZGVBdChjKV08PDJ8YnRbdC5jaGFyQ29kZUF0KGMrMSldPj40LHNbbysrXT1lJjI1NSksaT09PTEmJihlPWJ0W3QuY2hhckNvZGVBdChjKV08PDEwfGJ0W3QuY2hhckNvZGVBdChjKzEpXTw8NHxidFt0LmNoYXJDb2RlQXQoYysyKV0+PjIsc1tvKytdPWU+PjgmMjU1LHNbbysrXT1lJjI1NSksc31mdW5jdGlvbiB4eSh0KXtyZXR1cm4gUXRbdD4+MTgmNjNdK1F0W3Q+PjEyJjYzXStRdFt0Pj42JjYzXStRdFt0JjYzXX1mdW5jdGlvbiBfeSh0LGUscil7Zm9yKHZhciBuLGk9W10scz1lO3M8cjtzKz0zKW49KHRbc108PDE2JjE2NzExNjgwKSsodFtzKzFdPDw4JjY1MjgwKSsodFtzKzJdJjI1NSksaS5wdXNoKHh5KG4pKTtyZXR1cm4gaS5qb2luKCIiKX1mdW5jdGlvbiBJeSh0KXtmb3IodmFyIGUscj10Lmxlbmd0aCxuPXIlMyxpPVtdLHM9MTYzODMsbz0wLGE9ci1uO288YTtvKz1zKWkucHVzaChfeSh0LG8sbytzPmE/YTpvK3MpKTtyZXR1cm4gbj09PTE/KGU9dFtyLTFdLGkucHVzaChRdFtlPj4yXStRdFtlPDw0JjYzXSsiPT0iKSk6bj09PTImJihlPSh0W3ItMl08PDgpK3Rbci0xXSxpLnB1c2goUXRbZT4+MTBdK1F0W2U+PjQmNjNdK1F0W2U8PDImNjNdKyI9IikpLGkuam9pbigiIil9dmFyIFBjPXt9Oy8qISBpZWVlNzU0LiBCU0QtMy1DbGF1c2UgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovUGMucmVhZD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBzLG8sYT1pKjgtbi0xLGM9KDE8PGEpLTEsdT1jPj4xLGw9LTcsaD1yP2ktMTowLHA9cj8tMToxLGc9dFtlK2hdO2ZvcihoKz1wLHM9ZyYoMTw8LWwpLTEsZz4+PS1sLGwrPWE7bD4wO3M9cyoyNTYrdFtlK2hdLGgrPXAsbC09OCk7Zm9yKG89cyYoMTw8LWwpLTEscz4+PS1sLGwrPW47bD4wO289byoyNTYrdFtlK2hdLGgrPXAsbC09OCk7aWYocz09PTApcz0xLXU7ZWxzZXtpZihzPT09YylyZXR1cm4gbz9OYU46KGc/LTE6MSkqKDEvMCk7bz1vK01hdGgucG93KDIsbikscz1zLXV9cmV0dXJuKGc/LTE6MSkqbypNYXRoLnBvdygyLHMtbil9O1BjLndyaXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxzKXt2YXIgbyxhLGMsdT1zKjgtaS0xLGw9KDE8PHUpLTEsaD1sPj4xLHA9aT09PTIzP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxnPW4/MDpzLTEsdz1uPzE6LTEsYj1lPDB8fGU9PT0wJiYxL2U8MD8xOjA7Zm9yKGU9TWF0aC5hYnMoZSksaXNOYU4oZSl8fGU9PT0xLzA/KGE9aXNOYU4oZSk/MTowLG89bCk6KG89TWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMiksZSooYz1NYXRoLnBvdygyLC1vKSk8MSYmKG8tLSxjKj0yKSxvK2g+PTE/ZSs9cC9jOmUrPXAqTWF0aC5wb3coMiwxLWgpLGUqYz49MiYmKG8rKyxjLz0yKSxvK2g+PWw/KGE9MCxvPWwpOm8raD49MT8oYT0oZSpjLTEpKk1hdGgucG93KDIsaSksbz1vK2gpOihhPWUqTWF0aC5wb3coMixoLTEpKk1hdGgucG93KDIsaSksbz0wKSk7aT49ODt0W3IrZ109YSYyNTUsZys9dyxhLz0yNTYsaS09OCk7Zm9yKG89bzw8aXxhLHUrPWk7dT4wO3RbcitnXT1vJjI1NSxnKz13LG8vPTI1Nix1LT04KTt0W3IrZy13XXw9YioxMjh9Oy8qIQogKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci4KICoKICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz4KICogQGxpY2Vuc2UgIE1JVAogKi8oZnVuY3Rpb24odCl7Y29uc3QgZT1tbyxyPVBjLG49dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbC5mb3I9PSJmdW5jdGlvbiI/U3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKTpudWxsO3QuQnVmZmVyPWwsdC5TbG93QnVmZmVyPUMsdC5JTlNQRUNUX01BWF9CWVRFUz01MDtjb25zdCBpPTIxNDc0ODM2NDc7dC5rTWF4TGVuZ3RoPWk7Y29uc3R7VWludDhBcnJheTpzLEFycmF5QnVmZmVyOm8sU2hhcmVkQXJyYXlCdWZmZXI6YX09Z2xvYmFsVGhpcztsLlRZUEVEX0FSUkFZX1NVUFBPUlQ9YygpLCFsLlRZUEVEX0FSUkFZX1NVUFBPUlQmJnR5cGVvZiBjb25zb2xlPCJ1IiYmdHlwZW9mIGNvbnNvbGUuZXJyb3I9PSJmdW5jdGlvbiImJmNvbnNvbGUuZXJyb3IoIlRoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSBgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LiIpO2Z1bmN0aW9uIGMoKXt0cnl7Y29uc3QgRT1uZXcgcygxKSxmPXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKGYscy5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihFLGYpLEUuZm9vKCk9PT00Mn1jYXRjaHtyZXR1cm4hMX19T2JqZWN0LmRlZmluZVByb3BlcnR5KGwucHJvdG90eXBlLCJwYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKGwuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihsLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSk7ZnVuY3Rpb24gdShFKXtpZihFPmkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytFKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTtjb25zdCBmPW5ldyBzKEUpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YoZixsLnByb3RvdHlwZSksZn1mdW5jdGlvbiBsKEUsZixkKXtpZih0eXBlb2YgRT09Im51bWJlciIpe2lmKHR5cGVvZiBmPT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gdyhFKX1yZXR1cm4gaChFLGYsZCl9bC5wb29sU2l6ZT04MTkyO2Z1bmN0aW9uIGgoRSxmLGQpe2lmKHR5cGVvZiBFPT0ic3RyaW5nIilyZXR1cm4gYihFLGYpO2lmKG8uaXNWaWV3KEUpKXJldHVybiBPKEUpO2lmKEU9PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgRSk7aWYobHQoRSxvKXx8RSYmbHQoRS5idWZmZXIsbyl8fHR5cGVvZiBhPCJ1IiYmKGx0KEUsYSl8fEUmJmx0KEUuYnVmZmVyLGEpKSlyZXR1cm4gRihFLGYsZCk7aWYodHlwZW9mIEU9PSJudW1iZXIiKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO2NvbnN0IHg9RS52YWx1ZU9mJiZFLnZhbHVlT2YoKTtpZih4IT1udWxsJiZ4IT09RSlyZXR1cm4gbC5mcm9tKHgsZixkKTtjb25zdCBCPV8oRSk7aWYoQilyZXR1cm4gQjtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvUHJpbWl0aXZlIT1udWxsJiZ0eXBlb2YgRVtTeW1ib2wudG9QcmltaXRpdmVdPT0iZnVuY3Rpb24iKXJldHVybiBsLmZyb20oRVtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmciKSxmLGQpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIEUpfWwuZnJvbT1mdW5jdGlvbihFLGYsZCl7cmV0dXJuIGgoRSxmLGQpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YobC5wcm90b3R5cGUscy5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihsLHMpO2Z1bmN0aW9uIHAoRSl7aWYodHlwZW9mIEUhPSJudW1iZXIiKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJyk7aWYoRTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrRSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyl9ZnVuY3Rpb24gZyhFLGYsZCl7cmV0dXJuIHAoRSksRTw9MD91KEUpOmYhPT12b2lkIDA/dHlwZW9mIGQ9PSJzdHJpbmciP3UoRSkuZmlsbChmLGQpOnUoRSkuZmlsbChmKTp1KEUpfWwuYWxsb2M9ZnVuY3Rpb24oRSxmLGQpe3JldHVybiBnKEUsZixkKX07ZnVuY3Rpb24gdyhFKXtyZXR1cm4gcChFKSx1KEU8MD8wOlAoRSl8MCl9bC5hbGxvY1Vuc2FmZT1mdW5jdGlvbihFKXtyZXR1cm4gdyhFKX0sbC5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oRSl7cmV0dXJuIHcoRSl9O2Z1bmN0aW9uIGIoRSxmKXtpZigodHlwZW9mIGYhPSJzdHJpbmcifHxmPT09IiIpJiYoZj0idXRmOCIpLCFsLmlzRW5jb2RpbmcoZikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitmKTtjb25zdCBkPWooRSxmKXwwO2xldCB4PXUoZCk7Y29uc3QgQj14LndyaXRlKEUsZik7cmV0dXJuIEIhPT1kJiYoeD14LnNsaWNlKDAsQikpLHh9ZnVuY3Rpb24gdihFKXtjb25zdCBmPUUubGVuZ3RoPDA/MDpQKEUubGVuZ3RoKXwwLGQ9dShmKTtmb3IobGV0IHg9MDt4PGY7eCs9MSlkW3hdPUVbeF0mMjU1O3JldHVybiBkfWZ1bmN0aW9uIE8oRSl7aWYobHQoRSxzKSl7Y29uc3QgZj1uZXcgcyhFKTtyZXR1cm4gRihmLmJ1ZmZlcixmLmJ5dGVPZmZzZXQsZi5ieXRlTGVuZ3RoKX1yZXR1cm4gdihFKX1mdW5jdGlvbiBGKEUsZixkKXtpZihmPDB8fEUuYnl0ZUxlbmd0aDxmKXRocm93IG5ldyBSYW5nZUVycm9yKCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZihFLmJ5dGVMZW5ndGg8ZisoZHx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJsZW5ndGgiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2xldCB4O3JldHVybiBmPT09dm9pZCAwJiZkPT09dm9pZCAwP3g9bmV3IHMoRSk6ZD09PXZvaWQgMD94PW5ldyBzKEUsZik6eD1uZXcgcyhFLGYsZCksT2JqZWN0LnNldFByb3RvdHlwZU9mKHgsbC5wcm90b3R5cGUpLHh9ZnVuY3Rpb24gXyhFKXtpZihsLmlzQnVmZmVyKEUpKXtjb25zdCBmPVAoRS5sZW5ndGgpfDAsZD11KGYpO3JldHVybiBkLmxlbmd0aD09PTB8fEUuY29weShkLDAsMCxmKSxkfWlmKEUubGVuZ3RoIT09dm9pZCAwKXJldHVybiB0eXBlb2YgRS5sZW5ndGghPSJudW1iZXIifHxGbihFLmxlbmd0aCk/dSgwKTp2KEUpO2lmKEUudHlwZT09PSJCdWZmZXIiJiZBcnJheS5pc0FycmF5KEUuZGF0YSkpcmV0dXJuIHYoRS5kYXRhKX1mdW5jdGlvbiBQKEUpe2lmKEU+PWkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK2kudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gRXwwfWZ1bmN0aW9uIEMoRSl7cmV0dXJuK0UhPUUmJihFPTApLGwuYWxsb2MoK0UpfWwuaXNCdWZmZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGYhPW51bGwmJmYuX2lzQnVmZmVyPT09ITAmJmYhPT1sLnByb3RvdHlwZX0sbC5jb21wYXJlPWZ1bmN0aW9uKGYsZCl7aWYobHQoZixzKSYmKGY9bC5mcm9tKGYsZi5vZmZzZXQsZi5ieXRlTGVuZ3RoKSksbHQoZCxzKSYmKGQ9bC5mcm9tKGQsZC5vZmZzZXQsZC5ieXRlTGVuZ3RoKSksIWwuaXNCdWZmZXIoZil8fCFsLmlzQnVmZmVyKGQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKGY9PT1kKXJldHVybiAwO2xldCB4PWYubGVuZ3RoLEI9ZC5sZW5ndGg7Zm9yKGxldCBMPTAsSD1NYXRoLm1pbih4LEIpO0w8SDsrK0wpaWYoZltMXSE9PWRbTF0pe3g9ZltMXSxCPWRbTF07YnJlYWt9cmV0dXJuIHg8Qj8tMTpCPHg/MTowfSxsLmlzRW5jb2Rpbmc9ZnVuY3Rpb24oZil7c3dpdGNoKFN0cmluZyhmKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LGwuY29uY2F0PWZ1bmN0aW9uKGYsZCl7aWYoIUFycmF5LmlzQXJyYXkoZikpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKGYubGVuZ3RoPT09MClyZXR1cm4gbC5hbGxvYygwKTtsZXQgeDtpZihkPT09dm9pZCAwKWZvcihkPTAseD0wO3g8Zi5sZW5ndGg7Kyt4KWQrPWZbeF0ubGVuZ3RoO2NvbnN0IEI9bC5hbGxvY1Vuc2FmZShkKTtsZXQgTD0wO2Zvcih4PTA7eDxmLmxlbmd0aDsrK3gpe2xldCBIPWZbeF07aWYobHQoSCxzKSlMK0gubGVuZ3RoPkIubGVuZ3RoPyhsLmlzQnVmZmVyKEgpfHwoSD1sLmZyb20oSCkpLEguY29weShCLEwpKTpzLnByb3RvdHlwZS5zZXQuY2FsbChCLEgsTCk7ZWxzZSBpZihsLmlzQnVmZmVyKEgpKUguY29weShCLEwpO2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO0wrPUgubGVuZ3RofXJldHVybiBCfTtmdW5jdGlvbiBqKEUsZil7aWYobC5pc0J1ZmZlcihFKSlyZXR1cm4gRS5sZW5ndGg7aWYoby5pc1ZpZXcoRSl8fGx0KEUsbykpcmV0dXJuIEUuYnl0ZUxlbmd0aDtpZih0eXBlb2YgRSE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIEUpO2NvbnN0IGQ9RS5sZW5ndGgseD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXT09PSEwO2lmKCF4JiZkPT09MClyZXR1cm4gMDtsZXQgQj0hMTtmb3IoOzspc3dpdGNoKGYpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGQ7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gTG4oRSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gZCoyO2Nhc2UiaGV4IjpyZXR1cm4gZD4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiB5aShFKS5sZW5ndGg7ZGVmYXVsdDppZihCKXJldHVybiB4Py0xOkxuKEUpLmxlbmd0aDtmPSgiIitmKS50b0xvd2VyQ2FzZSgpLEI9ITB9fWwuYnl0ZUxlbmd0aD1qO2Z1bmN0aW9uIHEoRSxmLGQpe2xldCB4PSExO2lmKChmPT09dm9pZCAwfHxmPDApJiYoZj0wKSxmPnRoaXMubGVuZ3RofHwoKGQ9PT12b2lkIDB8fGQ+dGhpcy5sZW5ndGgpJiYoZD10aGlzLmxlbmd0aCksZDw9MCl8fChkPj4+PTAsZj4+Pj0wLGQ8PWYpKXJldHVybiIiO2ZvcihFfHwoRT0idXRmOCIpOzspc3dpdGNoKEUpe2Nhc2UiaGV4IjpyZXR1cm4gSyh0aGlzLGYsZCk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gSSh0aGlzLGYsZCk7Y2FzZSJhc2NpaSI6cmV0dXJuICQodGhpcyxmLGQpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGsodGhpcyxmLGQpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gbSh0aGlzLGYsZCk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBaKHRoaXMsZixkKTtkZWZhdWx0OmlmKHgpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitFKTtFPShFKyIiKS50b0xvd2VyQ2FzZSgpLHg9ITB9fWwucHJvdG90eXBlLl9pc0J1ZmZlcj0hMDtmdW5jdGlvbiBNKEUsZixkKXtjb25zdCB4PUVbZl07RVtmXT1FW2RdLEVbZF09eH1sLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXtjb25zdCBmPXRoaXMubGVuZ3RoO2lmKGYlMiE9PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKGxldCBkPTA7ZDxmO2QrPTIpTSh0aGlzLGQsZCsxKTtyZXR1cm4gdGhpc30sbC5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7Y29uc3QgZj10aGlzLmxlbmd0aDtpZihmJTQhPT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2ZvcihsZXQgZD0wO2Q8ZjtkKz00KU0odGhpcyxkLGQrMyksTSh0aGlzLGQrMSxkKzIpO3JldHVybiB0aGlzfSxsLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXtjb25zdCBmPXRoaXMubGVuZ3RoO2lmKGYlOCE9PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKGxldCBkPTA7ZDxmO2QrPTgpTSh0aGlzLGQsZCs3KSxNKHRoaXMsZCsxLGQrNiksTSh0aGlzLGQrMixkKzUpLE0odGhpcyxkKzMsZCs0KTtyZXR1cm4gdGhpc30sbC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtjb25zdCBmPXRoaXMubGVuZ3RoO3JldHVybiBmPT09MD8iIjphcmd1bWVudHMubGVuZ3RoPT09MD9JKHRoaXMsMCxmKTpxLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sbC5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9bC5wcm90b3R5cGUudG9TdHJpbmcsbC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGYpe2lmKCFsLmlzQnVmZmVyKGYpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWY/ITA6bC5jb21wYXJlKHRoaXMsZik9PT0wfSxsLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7bGV0IGY9IiI7Y29uc3QgZD10LklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiBmPXRoaXMudG9TdHJpbmcoImhleCIsMCxkKS5yZXBsYWNlKC8oLnsyfSkvZywiJDEgIikudHJpbSgpLHRoaXMubGVuZ3RoPmQmJihmKz0iIC4uLiAiKSwiPEJ1ZmZlciAiK2YrIj4ifSxuJiYobC5wcm90b3R5cGVbbl09bC5wcm90b3R5cGUuaW5zcGVjdCksbC5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihmLGQseCxCLEwpe2lmKGx0KGYscykmJihmPWwuZnJvbShmLGYub2Zmc2V0LGYuYnl0ZUxlbmd0aCkpLCFsLmlzQnVmZmVyKGYpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidGFyZ2V0IiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGYpO2lmKGQ9PT12b2lkIDAmJihkPTApLHg9PT12b2lkIDAmJih4PWY/Zi5sZW5ndGg6MCksQj09PXZvaWQgMCYmKEI9MCksTD09PXZvaWQgMCYmKEw9dGhpcy5sZW5ndGgpLGQ8MHx8eD5mLmxlbmd0aHx8QjwwfHxMPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihCPj1MJiZkPj14KXJldHVybiAwO2lmKEI+PUwpcmV0dXJuLTE7aWYoZD49eClyZXR1cm4gMTtpZihkPj4+PTAseD4+Pj0wLEI+Pj49MCxMPj4+PTAsdGhpcz09PWYpcmV0dXJuIDA7bGV0IEg9TC1CLG9lPXgtZDtjb25zdCBiZT1NYXRoLm1pbihILG9lKSx3ZT10aGlzLnNsaWNlKEIsTCksRWU9Zi5zbGljZShkLHgpO2ZvcihsZXQgZGU9MDtkZTxiZTsrK2RlKWlmKHdlW2RlXSE9PUVlW2RlXSl7SD13ZVtkZV0sb2U9RWVbZGVdO2JyZWFrfXJldHVybiBIPG9lPy0xOm9lPEg/MTowfTtmdW5jdGlvbiBUKEUsZixkLHgsQil7aWYoRS5sZW5ndGg9PT0wKXJldHVybi0xO2lmKHR5cGVvZiBkPT0ic3RyaW5nIj8oeD1kLGQ9MCk6ZD4yMTQ3NDgzNjQ3P2Q9MjE0NzQ4MzY0NzpkPC0yMTQ3NDgzNjQ4JiYoZD0tMjE0NzQ4MzY0OCksZD0rZCxGbihkKSYmKGQ9Qj8wOkUubGVuZ3RoLTEpLGQ8MCYmKGQ9RS5sZW5ndGgrZCksZD49RS5sZW5ndGgpe2lmKEIpcmV0dXJuLTE7ZD1FLmxlbmd0aC0xfWVsc2UgaWYoZDwwKWlmKEIpZD0wO2Vsc2UgcmV0dXJuLTE7aWYodHlwZW9mIGY9PSJzdHJpbmciJiYoZj1sLmZyb20oZix4KSksbC5pc0J1ZmZlcihmKSlyZXR1cm4gZi5sZW5ndGg9PT0wPy0xOnooRSxmLGQseCxCKTtpZih0eXBlb2YgZj09Im51bWJlciIpcmV0dXJuIGY9ZiYyNTUsdHlwZW9mIHMucHJvdG90eXBlLmluZGV4T2Y9PSJmdW5jdGlvbiI/Qj9zLnByb3RvdHlwZS5pbmRleE9mLmNhbGwoRSxmLGQpOnMucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoRSxmLGQpOnooRSxbZl0sZCx4LEIpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIHooRSxmLGQseCxCKXtsZXQgTD0xLEg9RS5sZW5ndGgsb2U9Zi5sZW5ndGg7aWYoeCE9PXZvaWQgMCYmKHg9U3RyaW5nKHgpLnRvTG93ZXJDYXNlKCkseD09PSJ1Y3MyInx8eD09PSJ1Y3MtMiJ8fHg9PT0idXRmMTZsZSJ8fHg9PT0idXRmLTE2bGUiKSl7aWYoRS5sZW5ndGg8Mnx8Zi5sZW5ndGg8MilyZXR1cm4tMTtMPTIsSC89MixvZS89MixkLz0yfWZ1bmN0aW9uIGJlKEVlLGRlKXtyZXR1cm4gTD09PTE/RWVbZGVdOkVlLnJlYWRVSW50MTZCRShkZSpMKX1sZXQgd2U7aWYoQil7bGV0IEVlPS0xO2Zvcih3ZT1kO3dlPEg7d2UrKylpZihiZShFLHdlKT09PWJlKGYsRWU9PT0tMT8wOndlLUVlKSl7aWYoRWU9PT0tMSYmKEVlPXdlKSx3ZS1FZSsxPT09b2UpcmV0dXJuIEVlKkx9ZWxzZSBFZSE9PS0xJiYod2UtPXdlLUVlKSxFZT0tMX1lbHNlIGZvcihkK29lPkgmJihkPUgtb2UpLHdlPWQ7d2U+PTA7d2UtLSl7bGV0IEVlPSEwO2ZvcihsZXQgZGU9MDtkZTxvZTtkZSsrKWlmKGJlKEUsd2UrZGUpIT09YmUoZixkZSkpe0VlPSExO2JyZWFrfWlmKEVlKXJldHVybiB3ZX1yZXR1cm4tMX1sLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihmLGQseCl7cmV0dXJuIHRoaXMuaW5kZXhPZihmLGQseCkhPT0tMX0sbC5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihmLGQseCl7cmV0dXJuIFQodGhpcyxmLGQseCwhMCl9LGwucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGYsZCx4KXtyZXR1cm4gVCh0aGlzLGYsZCx4LCExKX07ZnVuY3Rpb24gVShFLGYsZCx4KXtkPU51bWJlcihkKXx8MDtjb25zdCBCPUUubGVuZ3RoLWQ7eD8oeD1OdW1iZXIoeCkseD5CJiYoeD1CKSk6eD1CO2NvbnN0IEw9Zi5sZW5ndGg7eD5MLzImJih4PUwvMik7bGV0IEg7Zm9yKEg9MDtIPHg7KytIKXtjb25zdCBvZT1wYXJzZUludChmLnN1YnN0cihIKjIsMiksMTYpO2lmKEZuKG9lKSlyZXR1cm4gSDtFW2QrSF09b2V9cmV0dXJuIEh9ZnVuY3Rpb24gTihFLGYsZCx4KXtyZXR1cm4gbm4oTG4oZixFLmxlbmd0aC1kKSxFLGQseCl9ZnVuY3Rpb24gRChFLGYsZCx4KXtyZXR1cm4gbm4oZ2koZiksRSxkLHgpfWZ1bmN0aW9uIFIoRSxmLGQseCl7cmV0dXJuIG5uKHlpKGYpLEUsZCx4KX1mdW5jdGlvbiB5KEUsZixkLHgpe3JldHVybiBubihscyhmLEUubGVuZ3RoLWQpLEUsZCx4KX1sLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihmLGQseCxCKXtpZihkPT09dm9pZCAwKUI9InV0ZjgiLHg9dGhpcy5sZW5ndGgsZD0wO2Vsc2UgaWYoeD09PXZvaWQgMCYmdHlwZW9mIGQ9PSJzdHJpbmciKUI9ZCx4PXRoaXMubGVuZ3RoLGQ9MDtlbHNlIGlmKGlzRmluaXRlKGQpKWQ9ZD4+PjAsaXNGaW5pdGUoeCk/KHg9eD4+PjAsQj09PXZvaWQgMCYmKEI9InV0ZjgiKSk6KEI9eCx4PXZvaWQgMCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7Y29uc3QgTD10aGlzLmxlbmd0aC1kO2lmKCh4PT09dm9pZCAwfHx4PkwpJiYoeD1MKSxmLmxlbmd0aD4wJiYoeDwwfHxkPDApfHxkPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO0J8fChCPSJ1dGY4Iik7bGV0IEg9ITE7Zm9yKDs7KXN3aXRjaChCKXtjYXNlImhleCI6cmV0dXJuIFUodGhpcyxmLGQseCk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gTih0aGlzLGYsZCx4KTtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBEKHRoaXMsZixkLHgpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gUih0aGlzLGYsZCx4KTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHkodGhpcyxmLGQseCk7ZGVmYXVsdDppZihIKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrQik7Qj0oIiIrQikudG9Mb3dlckNhc2UoKSxIPSEwfX0sbC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJ1ZmZlciIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTtmdW5jdGlvbiBtKEUsZixkKXtyZXR1cm4gZj09PTAmJmQ9PT1FLmxlbmd0aD9lLmZyb21CeXRlQXJyYXkoRSk6ZS5mcm9tQnl0ZUFycmF5KEUuc2xpY2UoZixkKSl9ZnVuY3Rpb24gSShFLGYsZCl7ZD1NYXRoLm1pbihFLmxlbmd0aCxkKTtjb25zdCB4PVtdO2xldCBCPWY7Zm9yKDtCPGQ7KXtjb25zdCBMPUVbQl07bGV0IEg9bnVsbCxvZT1MPjIzOT80Okw+MjIzPzM6TD4xOTE/MjoxO2lmKEIrb2U8PWQpe2xldCBiZSx3ZSxFZSxkZTtzd2l0Y2gob2Upe2Nhc2UgMTpMPDEyOCYmKEg9TCk7YnJlYWs7Y2FzZSAyOmJlPUVbQisxXSwoYmUmMTkyKT09PTEyOCYmKGRlPShMJjMxKTw8NnxiZSY2MyxkZT4xMjcmJihIPWRlKSk7YnJlYWs7Y2FzZSAzOmJlPUVbQisxXSx3ZT1FW0IrMl0sKGJlJjE5Mik9PT0xMjgmJih3ZSYxOTIpPT09MTI4JiYoZGU9KEwmMTUpPDwxMnwoYmUmNjMpPDw2fHdlJjYzLGRlPjIwNDcmJihkZTw1NTI5Nnx8ZGU+NTczNDMpJiYoSD1kZSkpO2JyZWFrO2Nhc2UgNDpiZT1FW0IrMV0sd2U9RVtCKzJdLEVlPUVbQiszXSwoYmUmMTkyKT09PTEyOCYmKHdlJjE5Mik9PT0xMjgmJihFZSYxOTIpPT09MTI4JiYoZGU9KEwmMTUpPDwxOHwoYmUmNjMpPDwxMnwod2UmNjMpPDw2fEVlJjYzLGRlPjY1NTM1JiZkZTwxMTE0MTEyJiYoSD1kZSkpfX1IPT09bnVsbD8oSD02NTUzMyxvZT0xKTpIPjY1NTM1JiYoSC09NjU1MzYseC5wdXNoKEg+Pj4xMCYxMDIzfDU1Mjk2KSxIPTU2MzIwfEgmMTAyMykseC5wdXNoKEgpLEIrPW9lfXJldHVybiBTKHgpfWNvbnN0IEE9NDA5NjtmdW5jdGlvbiBTKEUpe2NvbnN0IGY9RS5sZW5ndGg7aWYoZjw9QSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsRSk7bGV0IGQ9IiIseD0wO2Zvcig7eDxmOylkKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxFLnNsaWNlKHgseCs9QSkpO3JldHVybiBkfWZ1bmN0aW9uICQoRSxmLGQpe2xldCB4PSIiO2Q9TWF0aC5taW4oRS5sZW5ndGgsZCk7Zm9yKGxldCBCPWY7QjxkOysrQil4Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKEVbQl0mMTI3KTtyZXR1cm4geH1mdW5jdGlvbiBrKEUsZixkKXtsZXQgeD0iIjtkPU1hdGgubWluKEUubGVuZ3RoLGQpO2ZvcihsZXQgQj1mO0I8ZDsrK0IpeCs9U3RyaW5nLmZyb21DaGFyQ29kZShFW0JdKTtyZXR1cm4geH1mdW5jdGlvbiBLKEUsZixkKXtjb25zdCB4PUUubGVuZ3RoOyghZnx8ZjwwKSYmKGY9MCksKCFkfHxkPDB8fGQ+eCkmJihkPXgpO2xldCBCPSIiO2ZvcihsZXQgTD1mO0w8ZDsrK0wpQis9cW9bRVtMXV07cmV0dXJuIEJ9ZnVuY3Rpb24gWihFLGYsZCl7Y29uc3QgeD1FLnNsaWNlKGYsZCk7bGV0IEI9IiI7Zm9yKGxldCBMPTA7TDx4Lmxlbmd0aC0xO0wrPTIpQis9U3RyaW5nLmZyb21DaGFyQ29kZSh4W0xdK3hbTCsxXSoyNTYpO3JldHVybiBCfWwucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGYsZCl7Y29uc3QgeD10aGlzLmxlbmd0aDtmPX5+ZixkPWQ9PT12b2lkIDA/eDp+fmQsZjwwPyhmKz14LGY8MCYmKGY9MCkpOmY+eCYmKGY9eCksZDwwPyhkKz14LGQ8MCYmKGQ9MCkpOmQ+eCYmKGQ9eCksZDxmJiYoZD1mKTtjb25zdCBCPXRoaXMuc3ViYXJyYXkoZixkKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKEIsbC5wcm90b3R5cGUpLEJ9O2Z1bmN0aW9uIFYoRSxmLGQpe2lmKEUlMSE9PTB8fEU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoRStmPmQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1sLnByb3RvdHlwZS5yZWFkVWludExFPWwucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oZixkLHgpe2Y9Zj4+PjAsZD1kPj4+MCx4fHxWKGYsZCx0aGlzLmxlbmd0aCk7bGV0IEI9dGhpc1tmXSxMPTEsSD0wO2Zvcig7KytIPGQmJihMKj0yNTYpOylCKz10aGlzW2YrSF0qTDtyZXR1cm4gQn0sbC5wcm90b3R5cGUucmVhZFVpbnRCRT1sLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGYsZCx4KXtmPWY+Pj4wLGQ9ZD4+PjAseHx8VihmLGQsdGhpcy5sZW5ndGgpO2xldCBCPXRoaXNbZistLWRdLEw9MTtmb3IoO2Q+MCYmKEwqPTI1Nik7KUIrPXRoaXNbZistLWRdKkw7cmV0dXJuIEJ9LGwucHJvdG90eXBlLnJlYWRVaW50OD1sLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZixkKXtyZXR1cm4gZj1mPj4+MCxkfHxWKGYsMSx0aGlzLmxlbmd0aCksdGhpc1tmXX0sbC5wcm90b3R5cGUucmVhZFVpbnQxNkxFPWwucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihmLGQpe3JldHVybiBmPWY+Pj4wLGR8fFYoZiwyLHRoaXMubGVuZ3RoKSx0aGlzW2ZdfHRoaXNbZisxXTw8OH0sbC5wcm90b3R5cGUucmVhZFVpbnQxNkJFPWwucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihmLGQpe3JldHVybiBmPWY+Pj4wLGR8fFYoZiwyLHRoaXMubGVuZ3RoKSx0aGlzW2ZdPDw4fHRoaXNbZisxXX0sbC5wcm90b3R5cGUucmVhZFVpbnQzMkxFPWwucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihmLGQpe3JldHVybiBmPWY+Pj4wLGR8fFYoZiw0LHRoaXMubGVuZ3RoKSwodGhpc1tmXXx0aGlzW2YrMV08PDh8dGhpc1tmKzJdPDwxNikrdGhpc1tmKzNdKjE2Nzc3MjE2fSxsLnByb3RvdHlwZS5yZWFkVWludDMyQkU9bC5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGYsZCl7cmV0dXJuIGY9Zj4+PjAsZHx8VihmLDQsdGhpcy5sZW5ndGgpLHRoaXNbZl0qMTY3NzcyMTYrKHRoaXNbZisxXTw8MTZ8dGhpc1tmKzJdPDw4fHRoaXNbZiszXSl9LGwucHJvdG90eXBlLnJlYWRCaWdVSW50NjRMRT1GdChmdW5jdGlvbihmKXtmPWY+Pj4wLEF0KGYsIm9mZnNldCIpO2NvbnN0IGQ9dGhpc1tmXSx4PXRoaXNbZis3XTsoZD09PXZvaWQgMHx8eD09PXZvaWQgMCkmJnJuKGYsdGhpcy5sZW5ndGgtOCk7Y29uc3QgQj1kK3RoaXNbKytmXSoyKio4K3RoaXNbKytmXSoyKioxNit0aGlzWysrZl0qMioqMjQsTD10aGlzWysrZl0rdGhpc1srK2ZdKjIqKjgrdGhpc1srK2ZdKjIqKjE2K3gqMioqMjQ7cmV0dXJuIEJpZ0ludChCKSsoQmlnSW50KEwpPDxCaWdJbnQoMzIpKX0pLGwucHJvdG90eXBlLnJlYWRCaWdVSW50NjRCRT1GdChmdW5jdGlvbihmKXtmPWY+Pj4wLEF0KGYsIm9mZnNldCIpO2NvbnN0IGQ9dGhpc1tmXSx4PXRoaXNbZis3XTsoZD09PXZvaWQgMHx8eD09PXZvaWQgMCkmJnJuKGYsdGhpcy5sZW5ndGgtOCk7Y29uc3QgQj1kKjIqKjI0K3RoaXNbKytmXSoyKioxNit0aGlzWysrZl0qMioqOCt0aGlzWysrZl0sTD10aGlzWysrZl0qMioqMjQrdGhpc1srK2ZdKjIqKjE2K3RoaXNbKytmXSoyKio4K3g7cmV0dXJuKEJpZ0ludChCKTw8QmlnSW50KDMyKSkrQmlnSW50KEwpfSksbC5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGYsZCx4KXtmPWY+Pj4wLGQ9ZD4+PjAseHx8VihmLGQsdGhpcy5sZW5ndGgpO2xldCBCPXRoaXNbZl0sTD0xLEg9MDtmb3IoOysrSDxkJiYoTCo9MjU2KTspQis9dGhpc1tmK0hdKkw7cmV0dXJuIEwqPTEyOCxCPj1MJiYoQi09TWF0aC5wb3coMiw4KmQpKSxCfSxsLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oZixkLHgpe2Y9Zj4+PjAsZD1kPj4+MCx4fHxWKGYsZCx0aGlzLmxlbmd0aCk7bGV0IEI9ZCxMPTEsSD10aGlzW2YrLS1CXTtmb3IoO0I+MCYmKEwqPTI1Nik7KUgrPXRoaXNbZistLUJdKkw7cmV0dXJuIEwqPTEyOCxIPj1MJiYoSC09TWF0aC5wb3coMiw4KmQpKSxIfSxsLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihmLGQpe3JldHVybiBmPWY+Pj4wLGR8fFYoZiwxLHRoaXMubGVuZ3RoKSx0aGlzW2ZdJjEyOD8oMjU1LXRoaXNbZl0rMSkqLTE6dGhpc1tmXX0sbC5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZixkKXtmPWY+Pj4wLGR8fFYoZiwyLHRoaXMubGVuZ3RoKTtjb25zdCB4PXRoaXNbZl18dGhpc1tmKzFdPDw4O3JldHVybiB4JjMyNzY4P3h8NDI5NDkwMTc2MDp4fSxsLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihmLGQpe2Y9Zj4+PjAsZHx8VihmLDIsdGhpcy5sZW5ndGgpO2NvbnN0IHg9dGhpc1tmKzFdfHRoaXNbZl08PDg7cmV0dXJuIHgmMzI3Njg/eHw0Mjk0OTAxNzYwOnh9LGwucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKGYsZCl7cmV0dXJuIGY9Zj4+PjAsZHx8VihmLDQsdGhpcy5sZW5ndGgpLHRoaXNbZl18dGhpc1tmKzFdPDw4fHRoaXNbZisyXTw8MTZ8dGhpc1tmKzNdPDwyNH0sbC5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZixkKXtyZXR1cm4gZj1mPj4+MCxkfHxWKGYsNCx0aGlzLmxlbmd0aCksdGhpc1tmXTw8MjR8dGhpc1tmKzFdPDwxNnx0aGlzW2YrMl08PDh8dGhpc1tmKzNdfSxsLnByb3RvdHlwZS5yZWFkQmlnSW50NjRMRT1GdChmdW5jdGlvbihmKXtmPWY+Pj4wLEF0KGYsIm9mZnNldCIpO2NvbnN0IGQ9dGhpc1tmXSx4PXRoaXNbZis3XTsoZD09PXZvaWQgMHx8eD09PXZvaWQgMCkmJnJuKGYsdGhpcy5sZW5ndGgtOCk7Y29uc3QgQj10aGlzW2YrNF0rdGhpc1tmKzVdKjIqKjgrdGhpc1tmKzZdKjIqKjE2Kyh4PDwyNCk7cmV0dXJuKEJpZ0ludChCKTw8QmlnSW50KDMyKSkrQmlnSW50KGQrdGhpc1srK2ZdKjIqKjgrdGhpc1srK2ZdKjIqKjE2K3RoaXNbKytmXSoyKioyNCl9KSxsLnByb3RvdHlwZS5yZWFkQmlnSW50NjRCRT1GdChmdW5jdGlvbihmKXtmPWY+Pj4wLEF0KGYsIm9mZnNldCIpO2NvbnN0IGQ9dGhpc1tmXSx4PXRoaXNbZis3XTsoZD09PXZvaWQgMHx8eD09PXZvaWQgMCkmJnJuKGYsdGhpcy5sZW5ndGgtOCk7Y29uc3QgQj0oZDw8MjQpK3RoaXNbKytmXSoyKioxNit0aGlzWysrZl0qMioqOCt0aGlzWysrZl07cmV0dXJuKEJpZ0ludChCKTw8QmlnSW50KDMyKSkrQmlnSW50KHRoaXNbKytmXSoyKioyNCt0aGlzWysrZl0qMioqMTYrdGhpc1srK2ZdKjIqKjgreCl9KSxsLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihmLGQpe3JldHVybiBmPWY+Pj4wLGR8fFYoZiw0LHRoaXMubGVuZ3RoKSxyLnJlYWQodGhpcyxmLCEwLDIzLDQpfSxsLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihmLGQpe3JldHVybiBmPWY+Pj4wLGR8fFYoZiw0LHRoaXMubGVuZ3RoKSxyLnJlYWQodGhpcyxmLCExLDIzLDQpfSxsLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZixkKXtyZXR1cm4gZj1mPj4+MCxkfHxWKGYsOCx0aGlzLmxlbmd0aCksci5yZWFkKHRoaXMsZiwhMCw1Miw4KX0sbC5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKGYsZCl7cmV0dXJuIGY9Zj4+PjAsZHx8VihmLDgsdGhpcy5sZW5ndGgpLHIucmVhZCh0aGlzLGYsITEsNTIsOCl9O2Z1bmN0aW9uIFcoRSxmLGQseCxCLEwpe2lmKCFsLmlzQnVmZmVyKEUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZihmPkJ8fGY8TCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYoZCt4PkUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1sLnByb3RvdHlwZS53cml0ZVVpbnRMRT1sLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihmLGQseCxCKXtpZihmPStmLGQ9ZD4+PjAseD14Pj4+MCwhQil7Y29uc3Qgb2U9TWF0aC5wb3coMiw4KngpLTE7Vyh0aGlzLGYsZCx4LG9lLDApfWxldCBMPTEsSD0wO2Zvcih0aGlzW2RdPWYmMjU1OysrSDx4JiYoTCo9MjU2KTspdGhpc1tkK0hdPWYvTCYyNTU7cmV0dXJuIGQreH0sbC5wcm90b3R5cGUud3JpdGVVaW50QkU9bC5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZixkLHgsQil7aWYoZj0rZixkPWQ+Pj4wLHg9eD4+PjAsIUIpe2NvbnN0IG9lPU1hdGgucG93KDIsOCp4KS0xO1codGhpcyxmLGQseCxvZSwwKX1sZXQgTD14LTEsSD0xO2Zvcih0aGlzW2QrTF09ZiYyNTU7LS1MPj0wJiYoSCo9MjU2KTspdGhpc1tkK0xdPWYvSCYyNTU7cmV0dXJuIGQreH0sbC5wcm90b3R5cGUud3JpdGVVaW50OD1sLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGYsZCx4KXtyZXR1cm4gZj0rZixkPWQ+Pj4wLHh8fFcodGhpcyxmLGQsMSwyNTUsMCksdGhpc1tkXT1mJjI1NSxkKzF9LGwucHJvdG90eXBlLndyaXRlVWludDE2TEU9bC5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihmLGQseCl7cmV0dXJuIGY9K2YsZD1kPj4+MCx4fHxXKHRoaXMsZixkLDIsNjU1MzUsMCksdGhpc1tkXT1mJjI1NSx0aGlzW2QrMV09Zj4+PjgsZCsyfSxsLnByb3RvdHlwZS53cml0ZVVpbnQxNkJFPWwucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oZixkLHgpe3JldHVybiBmPStmLGQ9ZD4+PjAseHx8Vyh0aGlzLGYsZCwyLDY1NTM1LDApLHRoaXNbZF09Zj4+PjgsdGhpc1tkKzFdPWYmMjU1LGQrMn0sbC5wcm90b3R5cGUud3JpdGVVaW50MzJMRT1sLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGYsZCx4KXtyZXR1cm4gZj0rZixkPWQ+Pj4wLHh8fFcodGhpcyxmLGQsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbZCszXT1mPj4+MjQsdGhpc1tkKzJdPWY+Pj4xNix0aGlzW2QrMV09Zj4+PjgsdGhpc1tkXT1mJjI1NSxkKzR9LGwucHJvdG90eXBlLndyaXRlVWludDMyQkU9bC5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihmLGQseCl7cmV0dXJuIGY9K2YsZD1kPj4+MCx4fHxXKHRoaXMsZixkLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2RdPWY+Pj4yNCx0aGlzW2QrMV09Zj4+PjE2LHRoaXNbZCsyXT1mPj4+OCx0aGlzW2QrM109ZiYyNTUsZCs0fTtmdW5jdGlvbiBKKEUsZixkLHgsQil7ZXQoZix4LEIsRSxkLDcpO2xldCBMPU51bWJlcihmJkJpZ0ludCg0Mjk0OTY3Mjk1KSk7RVtkKytdPUwsTD1MPj44LEVbZCsrXT1MLEw9TD4+OCxFW2QrK109TCxMPUw+PjgsRVtkKytdPUw7bGV0IEg9TnVtYmVyKGY+PkJpZ0ludCgzMikmQmlnSW50KDQyOTQ5NjcyOTUpKTtyZXR1cm4gRVtkKytdPUgsSD1IPj44LEVbZCsrXT1ILEg9SD4+OCxFW2QrK109SCxIPUg+PjgsRVtkKytdPUgsZH1mdW5jdGlvbiBlZShFLGYsZCx4LEIpe2V0KGYseCxCLEUsZCw3KTtsZXQgTD1OdW1iZXIoZiZCaWdJbnQoNDI5NDk2NzI5NSkpO0VbZCs3XT1MLEw9TD4+OCxFW2QrNl09TCxMPUw+PjgsRVtkKzVdPUwsTD1MPj44LEVbZCs0XT1MO2xldCBIPU51bWJlcihmPj5CaWdJbnQoMzIpJkJpZ0ludCg0Mjk0OTY3Mjk1KSk7cmV0dXJuIEVbZCszXT1ILEg9SD4+OCxFW2QrMl09SCxIPUg+PjgsRVtkKzFdPUgsSD1IPj44LEVbZF09SCxkKzh9bC5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRMRT1GdChmdW5jdGlvbihmLGQ9MCl7cmV0dXJuIEoodGhpcyxmLGQsQmlnSW50KDApLEJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZmIikpfSksbC5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRCRT1GdChmdW5jdGlvbihmLGQ9MCl7cmV0dXJuIGVlKHRoaXMsZixkLEJpZ0ludCgwKSxCaWdJbnQoIjB4ZmZmZmZmZmZmZmZmZmZmZiIpKX0pLGwucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oZixkLHgsQil7aWYoZj0rZixkPWQ+Pj4wLCFCKXtjb25zdCBiZT1NYXRoLnBvdygyLDgqeC0xKTtXKHRoaXMsZixkLHgsYmUtMSwtYmUpfWxldCBMPTAsSD0xLG9lPTA7Zm9yKHRoaXNbZF09ZiYyNTU7KytMPHgmJihIKj0yNTYpOylmPDAmJm9lPT09MCYmdGhpc1tkK0wtMV0hPT0wJiYob2U9MSksdGhpc1tkK0xdPShmL0g+PjApLW9lJjI1NTtyZXR1cm4gZCt4fSxsLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGYsZCx4LEIpe2lmKGY9K2YsZD1kPj4+MCwhQil7Y29uc3QgYmU9TWF0aC5wb3coMiw4KngtMSk7Vyh0aGlzLGYsZCx4LGJlLTEsLWJlKX1sZXQgTD14LTEsSD0xLG9lPTA7Zm9yKHRoaXNbZCtMXT1mJjI1NTstLUw+PTAmJihIKj0yNTYpOylmPDAmJm9lPT09MCYmdGhpc1tkK0wrMV0hPT0wJiYob2U9MSksdGhpc1tkK0xdPShmL0g+PjApLW9lJjI1NTtyZXR1cm4gZCt4fSxsLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZixkLHgpe3JldHVybiBmPStmLGQ9ZD4+PjAseHx8Vyh0aGlzLGYsZCwxLDEyNywtMTI4KSxmPDAmJihmPTI1NStmKzEpLHRoaXNbZF09ZiYyNTUsZCsxfSxsLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZixkLHgpe3JldHVybiBmPStmLGQ9ZD4+PjAseHx8Vyh0aGlzLGYsZCwyLDMyNzY3LC0zMjc2OCksdGhpc1tkXT1mJjI1NSx0aGlzW2QrMV09Zj4+PjgsZCsyfSxsLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZixkLHgpe3JldHVybiBmPStmLGQ9ZD4+PjAseHx8Vyh0aGlzLGYsZCwyLDMyNzY3LC0zMjc2OCksdGhpc1tkXT1mPj4+OCx0aGlzW2QrMV09ZiYyNTUsZCsyfSxsLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oZixkLHgpe3JldHVybiBmPStmLGQ9ZD4+PjAseHx8Vyh0aGlzLGYsZCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHRoaXNbZF09ZiYyNTUsdGhpc1tkKzFdPWY+Pj44LHRoaXNbZCsyXT1mPj4+MTYsdGhpc1tkKzNdPWY+Pj4yNCxkKzR9LGwucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihmLGQseCl7cmV0dXJuIGY9K2YsZD1kPj4+MCx4fHxXKHRoaXMsZixkLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZjwwJiYoZj00Mjk0OTY3Mjk1K2YrMSksdGhpc1tkXT1mPj4+MjQsdGhpc1tkKzFdPWY+Pj4xNix0aGlzW2QrMl09Zj4+PjgsdGhpc1tkKzNdPWYmMjU1LGQrNH0sbC5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NExFPUZ0KGZ1bmN0aW9uKGYsZD0wKXtyZXR1cm4gSih0aGlzLGYsZCwtQmlnSW50KCIweDgwMDAwMDAwMDAwMDAwMDAiKSxCaWdJbnQoIjB4N2ZmZmZmZmZmZmZmZmZmZiIpKX0pLGwucHJvdG90eXBlLndyaXRlQmlnSW50NjRCRT1GdChmdW5jdGlvbihmLGQ9MCl7cmV0dXJuIGVlKHRoaXMsZixkLC1CaWdJbnQoIjB4ODAwMDAwMDAwMDAwMDAwMCIpLEJpZ0ludCgiMHg3ZmZmZmZmZmZmZmZmZmZmIikpfSk7ZnVuY3Rpb24gcmUoRSxmLGQseCxCLEwpe2lmKGQreD5FLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoZDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBRKEUsZixkLHgsQil7cmV0dXJuIGY9K2YsZD1kPj4+MCxCfHxyZShFLGYsZCw0KSxyLndyaXRlKEUsZixkLHgsMjMsNCksZCs0fWwucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihmLGQseCl7cmV0dXJuIFEodGhpcyxmLGQsITAseCl9LGwucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihmLGQseCl7cmV0dXJuIFEodGhpcyxmLGQsITEseCl9O2Z1bmN0aW9uIGllKEUsZixkLHgsQil7cmV0dXJuIGY9K2YsZD1kPj4+MCxCfHxyZShFLGYsZCw4KSxyLndyaXRlKEUsZixkLHgsNTIsOCksZCs4fWwucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oZixkLHgpe3JldHVybiBpZSh0aGlzLGYsZCwhMCx4KX0sbC5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihmLGQseCl7cmV0dXJuIGllKHRoaXMsZixkLCExLHgpfSxsLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGYsZCx4LEIpe2lmKCFsLmlzQnVmZmVyKGYpKXRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpO2lmKHh8fCh4PTApLCFCJiZCIT09MCYmKEI9dGhpcy5sZW5ndGgpLGQ+PWYubGVuZ3RoJiYoZD1mLmxlbmd0aCksZHx8KGQ9MCksQj4wJiZCPHgmJihCPXgpLEI9PT14fHxmLmxlbmd0aD09PTB8fHRoaXMubGVuZ3RoPT09MClyZXR1cm4gMDtpZihkPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZih4PDB8fHg+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihCPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzIik7Qj50aGlzLmxlbmd0aCYmKEI9dGhpcy5sZW5ndGgpLGYubGVuZ3RoLWQ8Qi14JiYoQj1mLmxlbmd0aC1kK3gpO2NvbnN0IEw9Qi14O3JldHVybiB0aGlzPT09ZiYmdHlwZW9mIHMucHJvdG90eXBlLmNvcHlXaXRoaW49PSJmdW5jdGlvbiI/dGhpcy5jb3B5V2l0aGluKGQseCxCKTpzLnByb3RvdHlwZS5zZXQuY2FsbChmLHRoaXMuc3ViYXJyYXkoeCxCKSxkKSxMfSxsLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGYsZCx4LEIpe2lmKHR5cGVvZiBmPT0ic3RyaW5nIil7aWYodHlwZW9mIGQ9PSJzdHJpbmciPyhCPWQsZD0wLHg9dGhpcy5sZW5ndGgpOnR5cGVvZiB4PT0ic3RyaW5nIiYmKEI9eCx4PXRoaXMubGVuZ3RoKSxCIT09dm9pZCAwJiZ0eXBlb2YgQiE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKHR5cGVvZiBCPT0ic3RyaW5nIiYmIWwuaXNFbmNvZGluZyhCKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK0IpO2lmKGYubGVuZ3RoPT09MSl7Y29uc3QgSD1mLmNoYXJDb2RlQXQoMCk7KEI9PT0idXRmOCImJkg8MTI4fHxCPT09ImxhdGluMSIpJiYoZj1IKX19ZWxzZSB0eXBlb2YgZj09Im51bWJlciI/Zj1mJjI1NTp0eXBlb2YgZj09ImJvb2xlYW4iJiYoZj1OdW1iZXIoZikpO2lmKGQ8MHx8dGhpcy5sZW5ndGg8ZHx8dGhpcy5sZW5ndGg8eCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYoeDw9ZClyZXR1cm4gdGhpcztkPWQ+Pj4wLHg9eD09PXZvaWQgMD90aGlzLmxlbmd0aDp4Pj4+MCxmfHwoZj0wKTtsZXQgTDtpZih0eXBlb2YgZj09Im51bWJlciIpZm9yKEw9ZDtMPHg7KytMKXRoaXNbTF09ZjtlbHNle2NvbnN0IEg9bC5pc0J1ZmZlcihmKT9mOmwuZnJvbShmLEIpLG9lPUgubGVuZ3RoO2lmKG9lPT09MCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgIicrZisnIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCAidmFsdWUiJyk7Zm9yKEw9MDtMPHgtZDsrK0wpdGhpc1tMK2RdPUhbTCVvZV19cmV0dXJuIHRoaXN9O2NvbnN0IGZlPXt9O2Z1bmN0aW9uIEllKEUsZixkKXtmZVtFXT1jbGFzcyBleHRlbmRzIGR7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJtZXNzYWdlIix7dmFsdWU6Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyksd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdGhpcy5uYW1lPWAke3RoaXMubmFtZX0gWyR7RX1dYCx0aGlzLnN0YWNrLGRlbGV0ZSB0aGlzLm5hbWV9Z2V0IGNvZGUoKXtyZXR1cm4gRX1zZXQgY29kZShCKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY29kZSIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOkIsd3JpdGFibGU6ITB9KX10b1N0cmluZygpe3JldHVybmAke3RoaXMubmFtZX0gWyR7RX1dOiAke3RoaXMubWVzc2FnZX1gfX19SWUoIkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUyIsZnVuY3Rpb24oRSl7cmV0dXJuIEU/YCR7RX0gaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzYDoiQXR0ZW1wdCB0byBhY2Nlc3MgbWVtb3J5IG91dHNpZGUgYnVmZmVyIGJvdW5kcyJ9LFJhbmdlRXJyb3IpLEllKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsZnVuY3Rpb24oRSxmKXtyZXR1cm5gVGhlICIke0V9IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIGZ9YH0sVHlwZUVycm9yKSxJZSgiRVJSX09VVF9PRl9SQU5HRSIsZnVuY3Rpb24oRSxmLGQpe2xldCB4PWBUaGUgdmFsdWUgb2YgIiR7RX0iIGlzIG91dCBvZiByYW5nZS5gLEI9ZDtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihkKSYmTWF0aC5hYnMoZCk+MioqMzI/Qj1EZShTdHJpbmcoZCkpOnR5cGVvZiBkPT0iYmlnaW50IiYmKEI9U3RyaW5nKGQpLChkPkJpZ0ludCgyKSoqQmlnSW50KDMyKXx8ZDwtKEJpZ0ludCgyKSoqQmlnSW50KDMyKSkpJiYoQj1EZShCKSksQis9Im4iKSx4Kz1gIEl0IG11c3QgYmUgJHtmfS4gUmVjZWl2ZWQgJHtCfWAseH0sUmFuZ2VFcnJvcik7ZnVuY3Rpb24gRGUoRSl7bGV0IGY9IiIsZD1FLmxlbmd0aDtjb25zdCB4PUVbMF09PT0iLSI/MTowO2Zvcig7ZD49eCs0O2QtPTMpZj1gXyR7RS5zbGljZShkLTMsZCl9JHtmfWA7cmV0dXJuYCR7RS5zbGljZSgwLGQpfSR7Zn1gfWZ1bmN0aW9uIHV0KEUsZixkKXtBdChmLCJvZmZzZXQiKSwoRVtmXT09PXZvaWQgMHx8RVtmK2RdPT09dm9pZCAwKSYmcm4oZixFLmxlbmd0aC0oZCsxKSl9ZnVuY3Rpb24gZXQoRSxmLGQseCxCLEwpe2lmKEU+ZHx8RTxmKXtjb25zdCBIPXR5cGVvZiBmPT0iYmlnaW50Ij8ibiI6IiI7bGV0IG9lO3Rocm93IGY9PT0wfHxmPT09QmlnSW50KDApP29lPWA+PSAwJHtIfSBhbmQgPCAyJHtIfSAqKiAkeyhMKzEpKjh9JHtIfWA6b2U9YD49IC0oMiR7SH0gKiogJHsoTCsxKSo4LTF9JHtIfSkgYW5kIDwgMiAqKiAkeyhMKzEpKjgtMX0ke0h9YCxuZXcgZmUuRVJSX09VVF9PRl9SQU5HRSgidmFsdWUiLG9lLEUpfXV0KHgsQixMKX1mdW5jdGlvbiBBdChFLGYpe2lmKHR5cGVvZiBFIT0ibnVtYmVyIil0aHJvdyBuZXcgZmUuRVJSX0lOVkFMSURfQVJHX1RZUEUoZiwibnVtYmVyIixFKX1mdW5jdGlvbiBybihFLGYsZCl7dGhyb3cgTWF0aC5mbG9vcihFKSE9PUU/KEF0KEUsZCksbmV3IGZlLkVSUl9PVVRfT0ZfUkFOR0UoIm9mZnNldCIsImFuIGludGVnZXIiLEUpKTpmPDA/bmV3IGZlLkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUzpuZXcgZmUuRVJSX09VVF9PRl9SQU5HRSgib2Zmc2V0IixgPj0gMCBhbmQgPD0gJHtmfWAsRSl9Y29uc3QgTW89L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiB1cyhFKXtpZihFPUUuc3BsaXQoIj0iKVswXSxFPUUudHJpbSgpLnJlcGxhY2UoTW8sIiIpLEUubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDtFLmxlbmd0aCU0IT09MDspRT1FKyI9IjtyZXR1cm4gRX1mdW5jdGlvbiBMbihFLGYpe2Y9Znx8MS8wO2xldCBkO2NvbnN0IHg9RS5sZW5ndGg7bGV0IEI9bnVsbDtjb25zdCBMPVtdO2ZvcihsZXQgSD0wO0g8eDsrK0gpe2lmKGQ9RS5jaGFyQ29kZUF0KEgpLGQ+NTUyOTUmJmQ8NTczNDQpe2lmKCFCKXtpZihkPjU2MzE5KXsoZi09Myk+LTEmJkwucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9ZWxzZSBpZihIKzE9PT14KXsoZi09Myk+LTEmJkwucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9Qj1kO2NvbnRpbnVlfWlmKGQ8NTYzMjApeyhmLT0zKT4tMSYmTC5wdXNoKDIzOSwxOTEsMTg5KSxCPWQ7Y29udGludWV9ZD0oQi01NTI5Njw8MTB8ZC01NjMyMCkrNjU1MzZ9ZWxzZSBCJiYoZi09Myk+LTEmJkwucHVzaCgyMzksMTkxLDE4OSk7aWYoQj1udWxsLGQ8MTI4KXtpZigoZi09MSk8MClicmVhaztMLnB1c2goZCl9ZWxzZSBpZihkPDIwNDgpe2lmKChmLT0yKTwwKWJyZWFrO0wucHVzaChkPj42fDE5MixkJjYzfDEyOCl9ZWxzZSBpZihkPDY1NTM2KXtpZigoZi09Myk8MClicmVhaztMLnB1c2goZD4+MTJ8MjI0LGQ+PjYmNjN8MTI4LGQmNjN8MTI4KX1lbHNlIGlmKGQ8MTExNDExMil7aWYoKGYtPTQpPDApYnJlYWs7TC5wdXNoKGQ+PjE4fDI0MCxkPj4xMiY2M3wxMjgsZD4+NiY2M3wxMjgsZCY2M3wxMjgpfWVsc2UgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKX1yZXR1cm4gTH1mdW5jdGlvbiBnaShFKXtjb25zdCBmPVtdO2ZvcihsZXQgZD0wO2Q8RS5sZW5ndGg7KytkKWYucHVzaChFLmNoYXJDb2RlQXQoZCkmMjU1KTtyZXR1cm4gZn1mdW5jdGlvbiBscyhFLGYpe2xldCBkLHgsQjtjb25zdCBMPVtdO2ZvcihsZXQgSD0wO0g8RS5sZW5ndGgmJiEoKGYtPTIpPDApOysrSClkPUUuY2hhckNvZGVBdChIKSx4PWQ+PjgsQj1kJTI1NixMLnB1c2goQiksTC5wdXNoKHgpO3JldHVybiBMfWZ1bmN0aW9uIHlpKEUpe3JldHVybiBlLnRvQnl0ZUFycmF5KHVzKEUpKX1mdW5jdGlvbiBubihFLGYsZCx4KXtsZXQgQjtmb3IoQj0wO0I8eCYmIShCK2Q+PWYubGVuZ3RofHxCPj1FLmxlbmd0aCk7KytCKWZbQitkXT1FW0JdO3JldHVybiBCfWZ1bmN0aW9uIGx0KEUsZil7cmV0dXJuIEUgaW5zdGFuY2VvZiBmfHxFIT1udWxsJiZFLmNvbnN0cnVjdG9yIT1udWxsJiZFLmNvbnN0cnVjdG9yLm5hbWUhPW51bGwmJkUuY29uc3RydWN0b3IubmFtZT09PWYubmFtZX1mdW5jdGlvbiBGbihFKXtyZXR1cm4gRSE9PUV9Y29uc3QgcW89ZnVuY3Rpb24oKXtjb25zdCBFPSIwMTIzNDU2Nzg5YWJjZGVmIixmPW5ldyBBcnJheSgyNTYpO2ZvcihsZXQgZD0wO2Q8MTY7KytkKXtjb25zdCB4PWQqMTY7Zm9yKGxldCBCPTA7QjwxNjsrK0IpZlt4K0JdPUVbZF0rRVtCXX1yZXR1cm4gZn0oKTtmdW5jdGlvbiBGdChFKXtyZXR1cm4gdHlwZW9mIEJpZ0ludD4idSI/am86RX1mdW5jdGlvbiBqbygpe3Rocm93IG5ldyBFcnJvcigiQmlnSW50IG5vdCBzdXBwb3J0ZWQiKX19KShSZik7Y29uc3QgdHI9UmYuQnVmZmVyO2Z1bmN0aW9uIFN5KHQpe3JldHVybiF0fHx0eXBlb2YgdC50aGVuIT0iZnVuY3Rpb24iP1Byb21pc2UucmVzb2x2ZSh0KTp0fWZ1bmN0aW9uIFRlKHQsLi4uZSl7dHJ5e3JldHVybiBTeSh0KC4uLmUpKX1jYXRjaChyKXtyZXR1cm4gUHJvbWlzZS5yZWplY3Qocil9fWZ1bmN0aW9uIEF5KHQpe2NvbnN0IGU9dHlwZW9mIHQ7cmV0dXJuIHQ9PT1udWxsfHxlIT09Im9iamVjdCImJmUhPT0iZnVuY3Rpb24ifWZ1bmN0aW9uIER5KHQpe2NvbnN0IGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpO3JldHVybiFlfHxlLmlzUHJvdG90eXBlT2YoT2JqZWN0KX1mdW5jdGlvbiBGcyh0KXtpZihBeSh0KSlyZXR1cm4gU3RyaW5nKHQpO2lmKER5KHQpfHxBcnJheS5pc0FycmF5KHQpKXJldHVybiBKU09OLnN0cmluZ2lmeSh0KTtpZih0eXBlb2YgdC50b0pTT049PSJmdW5jdGlvbiIpcmV0dXJuIEZzKHQudG9KU09OKCkpO3Rocm93IG5ldyBFcnJvcigiW3Vuc3RvcmFnZV0gQ2Fubm90IHN0cmluZ2lmeSB2YWx1ZSEiKX1jb25zdCBWYT0iYmFzZTY0OiI7ZnVuY3Rpb24gT3kodCl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj90OlZhK1B5KHQpfWZ1bmN0aW9uICR5KHQpe3JldHVybiB0eXBlb2YgdCE9InN0cmluZyJ8fCF0LnN0YXJ0c1dpdGgoVmEpP3Q6QnkodC5zbGljZShWYS5sZW5ndGgpKX1mdW5jdGlvbiBCeSh0KXtyZXR1cm4gZ2xvYmFsVGhpcy5CdWZmZXI/dHIuZnJvbSh0LCJiYXNlNjQiKTpVaW50OEFycmF5LmZyb20oZ2xvYmFsVGhpcy5hdG9iKHQpLGU9PmUuY29kZVBvaW50QXQoMCkpfWZ1bmN0aW9uIFB5KHQpe3JldHVybiBnbG9iYWxUaGlzLkJ1ZmZlcj90ci5mcm9tKHQpLnRvU3RyaW5nKCJiYXNlNjQiKTpnbG9iYWxUaGlzLmJ0b2EoU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4udCkpfWZ1bmN0aW9uIHJ0KHQpe3JldHVybiB0JiZ0LnNwbGl0KCI/IilbMF0/LnJlcGxhY2UoL1svXFxdL2csIjoiKS5yZXBsYWNlKC86Ky9nLCI6IikucmVwbGFjZSgvXjp8OiQvZywiIil8fCIifWZ1bmN0aW9uIFR5KC4uLnQpe3JldHVybiBydCh0LmpvaW4oIjoiKSl9ZnVuY3Rpb24gZnModCl7cmV0dXJuIHQ9cnQodCksdD90KyI6IjoiIn1mdW5jdGlvbiBSeSh0LGUpe2lmKGU9PT12b2lkIDApcmV0dXJuITA7bGV0IHI9MCxuPXQuaW5kZXhPZigiOiIpO2Zvcig7bj4tMTspcisrLG49dC5pbmRleE9mKCI6IixuKzEpO3JldHVybiByPD1lfWZ1bmN0aW9uIEN5KHQsZSl7cmV0dXJuIGU/dC5zdGFydHNXaXRoKGUpJiZ0W3QubGVuZ3RoLTFdIT09IiQiOnRbdC5sZW5ndGgtMV0hPT0iJCJ9Y29uc3QgVXk9Im1lbW9yeSIsTnk9KCk9Pntjb25zdCB0PW5ldyBNYXA7cmV0dXJue25hbWU6VXksZ2V0SW5zdGFuY2U6KCk9PnQsaGFzSXRlbShlKXtyZXR1cm4gdC5oYXMoZSl9LGdldEl0ZW0oZSl7cmV0dXJuIHQuZ2V0KGUpPz9udWxsfSxnZXRJdGVtUmF3KGUpe3JldHVybiB0LmdldChlKT8/bnVsbH0sc2V0SXRlbShlLHIpe3Quc2V0KGUscil9LHNldEl0ZW1SYXcoZSxyKXt0LnNldChlLHIpfSxyZW1vdmVJdGVtKGUpe3QuZGVsZXRlKGUpfSxnZXRLZXlzKCl7cmV0dXJuWy4uLnQua2V5cygpXX0sY2xlYXIoKXt0LmNsZWFyKCl9LGRpc3Bvc2UoKXt0LmNsZWFyKCl9fX07ZnVuY3Rpb24gTHkodD17fSl7Y29uc3QgZT17bW91bnRzOnsiIjp0LmRyaXZlcnx8TnkoKX0sbW91bnRwb2ludHM6WyIiXSx3YXRjaGluZzohMSx3YXRjaExpc3RlbmVyczpbXSx1bndhdGNoOnt9fSxyPXU9Pntmb3IoY29uc3QgbCBvZiBlLm1vdW50cG9pbnRzKWlmKHUuc3RhcnRzV2l0aChsKSlyZXR1cm57YmFzZTpsLHJlbGF0aXZlS2V5OnUuc2xpY2UobC5sZW5ndGgpLGRyaXZlcjplLm1vdW50c1tsXX07cmV0dXJue2Jhc2U6IiIscmVsYXRpdmVLZXk6dSxkcml2ZXI6ZS5tb3VudHNbIiJdfX0sbj0odSxsKT0+ZS5tb3VudHBvaW50cy5maWx0ZXIoaD0+aC5zdGFydHNXaXRoKHUpfHxsJiZ1LnN0YXJ0c1dpdGgoaCkpLm1hcChoPT4oe3JlbGF0aXZlQmFzZTp1Lmxlbmd0aD5oLmxlbmd0aD91LnNsaWNlKGgubGVuZ3RoKTp2b2lkIDAsbW91bnRwb2ludDpoLGRyaXZlcjplLm1vdW50c1toXX0pKSxpPSh1LGwpPT57aWYoZS53YXRjaGluZyl7bD1ydChsKTtmb3IoY29uc3QgaCBvZiBlLndhdGNoTGlzdGVuZXJzKWgodSxsKX19LHM9YXN5bmMoKT0+e2lmKCFlLndhdGNoaW5nKXtlLndhdGNoaW5nPSEwO2Zvcihjb25zdCB1IGluIGUubW91bnRzKWUudW53YXRjaFt1XT1hd2FpdCBxdShlLm1vdW50c1t1XSxpLHUpfX0sbz1hc3luYygpPT57aWYoZS53YXRjaGluZyl7Zm9yKGNvbnN0IHUgaW4gZS51bndhdGNoKWF3YWl0IGUudW53YXRjaFt1XSgpO2UudW53YXRjaD17fSxlLndhdGNoaW5nPSExfX0sYT0odSxsLGgpPT57Y29uc3QgcD1uZXcgTWFwLGc9dz0+e2xldCBiPXAuZ2V0KHcuYmFzZSk7cmV0dXJuIGJ8fChiPXtkcml2ZXI6dy5kcml2ZXIsYmFzZTp3LmJhc2UsaXRlbXM6W119LHAuc2V0KHcuYmFzZSxiKSksYn07Zm9yKGNvbnN0IHcgb2YgdSl7Y29uc3QgYj10eXBlb2Ygdz09InN0cmluZyIsdj1ydChiP3c6dy5rZXkpLE89Yj92b2lkIDA6dy52YWx1ZSxGPWJ8fCF3Lm9wdGlvbnM/bDp7Li4ubCwuLi53Lm9wdGlvbnN9LF89cih2KTtnKF8pLml0ZW1zLnB1c2goe2tleTp2LHZhbHVlOk8scmVsYXRpdmVLZXk6Xy5yZWxhdGl2ZUtleSxvcHRpb25zOkZ9KX1yZXR1cm4gUHJvbWlzZS5hbGwoWy4uLnAudmFsdWVzKCldLm1hcCh3PT5oKHcpKSkudGhlbih3PT53LmZsYXQoKSl9LGM9e2hhc0l0ZW0odSxsPXt9KXt1PXJ0KHUpO2NvbnN0e3JlbGF0aXZlS2V5OmgsZHJpdmVyOnB9PXIodSk7cmV0dXJuIFRlKHAuaGFzSXRlbSxoLGwpfSxnZXRJdGVtKHUsbD17fSl7dT1ydCh1KTtjb25zdHtyZWxhdGl2ZUtleTpoLGRyaXZlcjpwfT1yKHUpO3JldHVybiBUZShwLmdldEl0ZW0saCxsKS50aGVuKGc9PmhzKGcpKX0sZ2V0SXRlbXModSxsPXt9KXtyZXR1cm4gYSh1LGwsaD0+aC5kcml2ZXIuZ2V0SXRlbXM/VGUoaC5kcml2ZXIuZ2V0SXRlbXMsaC5pdGVtcy5tYXAocD0+KHtrZXk6cC5yZWxhdGl2ZUtleSxvcHRpb25zOnAub3B0aW9uc30pKSxsKS50aGVuKHA9PnAubWFwKGc9Pih7a2V5OlR5KGguYmFzZSxnLmtleSksdmFsdWU6aHMoZy52YWx1ZSl9KSkpOlByb21pc2UuYWxsKGguaXRlbXMubWFwKHA9PlRlKGguZHJpdmVyLmdldEl0ZW0scC5yZWxhdGl2ZUtleSxwLm9wdGlvbnMpLnRoZW4oZz0+KHtrZXk6cC5rZXksdmFsdWU6aHMoZyl9KSkpKSl9LGdldEl0ZW1SYXcodSxsPXt9KXt1PXJ0KHUpO2NvbnN0e3JlbGF0aXZlS2V5OmgsZHJpdmVyOnB9PXIodSk7cmV0dXJuIHAuZ2V0SXRlbVJhdz9UZShwLmdldEl0ZW1SYXcsaCxsKTpUZShwLmdldEl0ZW0saCxsKS50aGVuKGc9PiR5KGcpKX0sYXN5bmMgc2V0SXRlbSh1LGwsaD17fSl7aWYobD09PXZvaWQgMClyZXR1cm4gYy5yZW1vdmVJdGVtKHUpO3U9cnQodSk7Y29uc3R7cmVsYXRpdmVLZXk6cCxkcml2ZXI6Z309cih1KTtnLnNldEl0ZW0mJihhd2FpdCBUZShnLnNldEl0ZW0scCxGcyhsKSxoKSxnLndhdGNofHxpKCJ1cGRhdGUiLHUpKX0sYXN5bmMgc2V0SXRlbXModSxsKXthd2FpdCBhKHUsbCxhc3luYyBoPT57aWYoaC5kcml2ZXIuc2V0SXRlbXMpcmV0dXJuIFRlKGguZHJpdmVyLnNldEl0ZW1zLGguaXRlbXMubWFwKHA9Pih7a2V5OnAucmVsYXRpdmVLZXksdmFsdWU6RnMocC52YWx1ZSksb3B0aW9uczpwLm9wdGlvbnN9KSksbCk7aC5kcml2ZXIuc2V0SXRlbSYmYXdhaXQgUHJvbWlzZS5hbGwoaC5pdGVtcy5tYXAocD0+VGUoaC5kcml2ZXIuc2V0SXRlbSxwLnJlbGF0aXZlS2V5LEZzKHAudmFsdWUpLHAub3B0aW9ucykpKX0pfSxhc3luYyBzZXRJdGVtUmF3KHUsbCxoPXt9KXtpZihsPT09dm9pZCAwKXJldHVybiBjLnJlbW92ZUl0ZW0odSxoKTt1PXJ0KHUpO2NvbnN0e3JlbGF0aXZlS2V5OnAsZHJpdmVyOmd9PXIodSk7aWYoZy5zZXRJdGVtUmF3KWF3YWl0IFRlKGcuc2V0SXRlbVJhdyxwLGwsaCk7ZWxzZSBpZihnLnNldEl0ZW0pYXdhaXQgVGUoZy5zZXRJdGVtLHAsT3kobCksaCk7ZWxzZSByZXR1cm47Zy53YXRjaHx8aSgidXBkYXRlIix1KX0sYXN5bmMgcmVtb3ZlSXRlbSh1LGw9e30pe3R5cGVvZiBsPT0iYm9vbGVhbiImJihsPXtyZW1vdmVNZXRhOmx9KSx1PXJ0KHUpO2NvbnN0e3JlbGF0aXZlS2V5OmgsZHJpdmVyOnB9PXIodSk7cC5yZW1vdmVJdGVtJiYoYXdhaXQgVGUocC5yZW1vdmVJdGVtLGgsbCksKGwucmVtb3ZlTWV0YXx8bC5yZW1vdmVNYXRhKSYmYXdhaXQgVGUocC5yZW1vdmVJdGVtLGgrIiQiLGwpLHAud2F0Y2h8fGkoInJlbW92ZSIsdSkpfSxhc3luYyBnZXRNZXRhKHUsbD17fSl7dHlwZW9mIGw9PSJib29sZWFuIiYmKGw9e25hdGl2ZU9ubHk6bH0pLHU9cnQodSk7Y29uc3R7cmVsYXRpdmVLZXk6aCxkcml2ZXI6cH09cih1KSxnPU9iamVjdC5jcmVhdGUobnVsbCk7aWYocC5nZXRNZXRhJiZPYmplY3QuYXNzaWduKGcsYXdhaXQgVGUocC5nZXRNZXRhLGgsbCkpLCFsLm5hdGl2ZU9ubHkpe2NvbnN0IHc9YXdhaXQgVGUocC5nZXRJdGVtLGgrIiQiLGwpLnRoZW4oYj0+aHMoYikpO3cmJnR5cGVvZiB3PT0ib2JqZWN0IiYmKHR5cGVvZiB3LmF0aW1lPT0ic3RyaW5nIiYmKHcuYXRpbWU9bmV3IERhdGUody5hdGltZSkpLHR5cGVvZiB3Lm10aW1lPT0ic3RyaW5nIiYmKHcubXRpbWU9bmV3IERhdGUody5tdGltZSkpLE9iamVjdC5hc3NpZ24oZyx3KSl9cmV0dXJuIGd9LHNldE1ldGEodSxsLGg9e30pe3JldHVybiB0aGlzLnNldEl0ZW0odSsiJCIsbCxoKX0scmVtb3ZlTWV0YSh1LGw9e30pe3JldHVybiB0aGlzLnJlbW92ZUl0ZW0odSsiJCIsbCl9LGFzeW5jIGdldEtleXModSxsPXt9KXt1PWZzKHUpO2NvbnN0IGg9bih1LCEwKTtsZXQgcD1bXTtjb25zdCBnPVtdO2xldCB3PSEwO2Zvcihjb25zdCB2IG9mIGgpe3YuZHJpdmVyLmZsYWdzPy5tYXhEZXB0aHx8KHc9ITEpO2NvbnN0IE89YXdhaXQgVGUodi5kcml2ZXIuZ2V0S2V5cyx2LnJlbGF0aXZlQmFzZSxsKTtmb3IoY29uc3QgRiBvZiBPKXtjb25zdCBfPXYubW91bnRwb2ludCtydChGKTtwLnNvbWUoUD0+Xy5zdGFydHNXaXRoKFApKXx8Zy5wdXNoKF8pfXA9W3YubW91bnRwb2ludCwuLi5wLmZpbHRlcihGPT4hRi5zdGFydHNXaXRoKHYubW91bnRwb2ludCkpXX1jb25zdCBiPWwubWF4RGVwdGghPT12b2lkIDAmJiF3O3JldHVybiBnLmZpbHRlcih2PT4oIWJ8fFJ5KHYsbC5tYXhEZXB0aCkpJiZDeSh2LHUpKX0sYXN5bmMgY2xlYXIodSxsPXt9KXt1PWZzKHUpLGF3YWl0IFByb21pc2UuYWxsKG4odSwhMSkubWFwKGFzeW5jIGg9PntpZihoLmRyaXZlci5jbGVhcilyZXR1cm4gVGUoaC5kcml2ZXIuY2xlYXIsaC5yZWxhdGl2ZUJhc2UsbCk7aWYoaC5kcml2ZXIucmVtb3ZlSXRlbSl7Y29uc3QgcD1hd2FpdCBoLmRyaXZlci5nZXRLZXlzKGgucmVsYXRpdmVCYXNlfHwiIixsKTtyZXR1cm4gUHJvbWlzZS5hbGwocC5tYXAoZz0+aC5kcml2ZXIucmVtb3ZlSXRlbShnLGwpKSl9fSkpfSxhc3luYyBkaXNwb3NlKCl7YXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LnZhbHVlcyhlLm1vdW50cykubWFwKHU9Pmp1KHUpKSl9LGFzeW5jIHdhdGNoKHUpe3JldHVybiBhd2FpdCBzKCksZS53YXRjaExpc3RlbmVycy5wdXNoKHUpLGFzeW5jKCk9PntlLndhdGNoTGlzdGVuZXJzPWUud2F0Y2hMaXN0ZW5lcnMuZmlsdGVyKGw9PmwhPT11KSxlLndhdGNoTGlzdGVuZXJzLmxlbmd0aD09PTAmJmF3YWl0IG8oKX19LGFzeW5jIHVud2F0Y2goKXtlLndhdGNoTGlzdGVuZXJzPVtdLGF3YWl0IG8oKX0sbW91bnQodSxsKXtpZih1PWZzKHUpLHUmJmUubW91bnRzW3VdKXRocm93IG5ldyBFcnJvcihgYWxyZWFkeSBtb3VudGVkIGF0ICR7dX1gKTtyZXR1cm4gdSYmKGUubW91bnRwb2ludHMucHVzaCh1KSxlLm1vdW50cG9pbnRzLnNvcnQoKGgscCk9PnAubGVuZ3RoLWgubGVuZ3RoKSksZS5tb3VudHNbdV09bCxlLndhdGNoaW5nJiZQcm9taXNlLnJlc29sdmUocXUobCxpLHUpKS50aGVuKGg9PntlLnVud2F0Y2hbdV09aH0pLmNhdGNoKGNvbnNvbGUuZXJyb3IpLGN9LGFzeW5jIHVubW91bnQodSxsPSEwKXt1PWZzKHUpLCEoIXV8fCFlLm1vdW50c1t1XSkmJihlLndhdGNoaW5nJiZ1IGluIGUudW53YXRjaCYmKGUudW53YXRjaFt1XT8uKCksZGVsZXRlIGUudW53YXRjaFt1XSksbCYmYXdhaXQganUoZS5tb3VudHNbdV0pLGUubW91bnRwb2ludHM9ZS5tb3VudHBvaW50cy5maWx0ZXIoaD0+aCE9PXUpLGRlbGV0ZSBlLm1vdW50c1t1XSl9LGdldE1vdW50KHU9IiIpe3U9cnQodSkrIjoiO2NvbnN0IGw9cih1KTtyZXR1cm57ZHJpdmVyOmwuZHJpdmVyLGJhc2U6bC5iYXNlfX0sZ2V0TW91bnRzKHU9IiIsbD17fSl7cmV0dXJuIHU9cnQodSksbih1LGwucGFyZW50cykubWFwKHA9Pih7ZHJpdmVyOnAuZHJpdmVyLGJhc2U6cC5tb3VudHBvaW50fSkpfSxrZXlzOih1LGw9e30pPT5jLmdldEtleXModSxsKSxnZXQ6KHUsbD17fSk9PmMuZ2V0SXRlbSh1LGwpLHNldDoodSxsLGg9e30pPT5jLnNldEl0ZW0odSxsLGgpLGhhczoodSxsPXt9KT0+Yy5oYXNJdGVtKHUsbCksZGVsOih1LGw9e30pPT5jLnJlbW92ZUl0ZW0odSxsKSxyZW1vdmU6KHUsbD17fSk9PmMucmVtb3ZlSXRlbSh1LGwpfTtyZXR1cm4gY31mdW5jdGlvbiBxdSh0LGUscil7cmV0dXJuIHQud2F0Y2g/dC53YXRjaCgobixpKT0+ZShuLHIraSkpOigpPT57fX1hc3luYyBmdW5jdGlvbiBqdSh0KXt0eXBlb2YgdC5kaXNwb3NlPT0iZnVuY3Rpb24iJiZhd2FpdCBUZSh0LmRpc3Bvc2UpfWZ1bmN0aW9uIFRuKHQpe3JldHVybiBuZXcgUHJvbWlzZSgoZSxyKT0+e3Qub25jb21wbGV0ZT10Lm9uc3VjY2Vzcz0oKT0+ZSh0LnJlc3VsdCksdC5vbmFib3J0PXQub25lcnJvcj0oKT0+cih0LmVycm9yKX0pfWZ1bmN0aW9uIFVmKHQsZSl7bGV0IHI7Y29uc3Qgbj0oKT0+e2lmKHIpcmV0dXJuIHI7Y29uc3QgaT1pbmRleGVkREIub3Blbih0KTtyZXR1cm4gaS5vbnVwZ3JhZGVuZWVkZWQ9KCk9PmkucmVzdWx0LmNyZWF0ZU9iamVjdFN0b3JlKGUpLHI9VG4oaSksci50aGVuKHM9PntzLm9uY2xvc2U9KCk9PnI9dm9pZCAwfSwoKT0+e3I9dm9pZCAwfSkscn07cmV0dXJuKGkscyk9Pm4oKS50aGVuKG89PnMoby50cmFuc2FjdGlvbihlLGkpLm9iamVjdFN0b3JlKGUpKSl9bGV0IEdvO2Z1bmN0aW9uIEppKCl7cmV0dXJuIEdvfHwoR289VWYoImtleXZhbC1zdG9yZSIsImtleXZhbCIpKSxHb31mdW5jdGlvbiB6dSh0LGU9SmkoKSl7cmV0dXJuIGUoInJlYWRvbmx5IixyPT5UbihyLmdldCh0KSkpfWZ1bmN0aW9uIEZ5KHQsZSxyPUppKCkpe3JldHVybiByKCJyZWFkd3JpdGUiLG49PihuLnB1dChlLHQpLFRuKG4udHJhbnNhY3Rpb24pKSl9ZnVuY3Rpb24ga3kodCxlPUppKCkpe3JldHVybiBlKCJyZWFkd3JpdGUiLHI9PihyLmRlbGV0ZSh0KSxUbihyLnRyYW5zYWN0aW9uKSkpfWZ1bmN0aW9uIE15KHQ9SmkoKSl7cmV0dXJuIHQoInJlYWR3cml0ZSIsZT0+KGUuY2xlYXIoKSxUbihlLnRyYW5zYWN0aW9uKSkpfWZ1bmN0aW9uIHF5KHQsZSl7cmV0dXJuIHQub3BlbkN1cnNvcigpLm9uc3VjY2Vzcz1mdW5jdGlvbigpe3RoaXMucmVzdWx0JiYoZSh0aGlzLnJlc3VsdCksdGhpcy5yZXN1bHQuY29udGludWUoKSl9LFRuKHQudHJhbnNhY3Rpb24pfWZ1bmN0aW9uIGp5KHQ9SmkoKSl7cmV0dXJuIHQoInJlYWRvbmx5IixlPT57aWYoZS5nZXRBbGxLZXlzKXJldHVybiBUbihlLmdldEFsbEtleXMoKSk7Y29uc3Qgcj1bXTtyZXR1cm4gcXkoZSxuPT5yLnB1c2gobi5rZXkpKS50aGVuKCgpPT5yKX0pfWNvbnN0IHp5PXQ9PkpTT04uc3RyaW5naWZ5KHQsKGUscik9PnR5cGVvZiByPT0iYmlnaW50Ij9yLnRvU3RyaW5nKCkrIm4iOnIpLEh5PXQ9Pntjb25zdCBlPS8oW1xbOl0pPyhcZHsxNyx9fCg/Ols5XSg/OlsxLTldMDcxOTkyNTQ3NDA5OTF8MFsxLTldNzE5OTI1NDc0MDk5MXwwMFs4LTldMTk5MjU0NzQwOTkxfDAwN1syLTldOTkyNTQ3NDA5OTF8MDA3MTk5WzMtOV01NDc0MDk5MXwwMDcxOTkyWzYtOV00NzQwOTkxfDAwNzE5OTI1WzUtOV03NDA5OTF8MDA3MTk5MjU0WzgtOV00MDk5MXwwMDcxOTkyNTQ3WzUtOV0wOTkxfDAwNzE5OTI1NDc0WzEtOV05OTF8MDA3MTk5MjU0NzQwOTlbMi05XSkpKShbLFx9XF1dKS9nLHI9dC5yZXBsYWNlKGUsJyQxIiQybiIkMycpO3JldHVybiBKU09OLnBhcnNlKHIsKG4saSk9PnR5cGVvZiBpPT0ic3RyaW5nIiYmaS5tYXRjaCgvXlxkK24kLyk/QmlnSW50KGkuc3Vic3RyaW5nKDAsaS5sZW5ndGgtMSkpOmkpfTtmdW5jdGlvbiBfbih0KXtpZih0eXBlb2YgdCE9InN0cmluZyIpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2FmZSBqc29uIHBhcnNlIHZhbHVlIG9mIHR5cGUgJHt0eXBlb2YgdH1gKTt0cnl7cmV0dXJuIEh5KHQpfWNhdGNoe3JldHVybiB0fX1mdW5jdGlvbiBJbih0KXtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmciP3Q6enkodCl8fCIifWNvbnN0IEt5PSJpZGIta2V5dmFsIjt2YXIgVnk9KHQ9e30pPT57Y29uc3QgZT10LmJhc2UmJnQuYmFzZS5sZW5ndGg+MD9gJHt0LmJhc2V9OmA6IiIscj1pPT5lK2k7bGV0IG47cmV0dXJuIHQuZGJOYW1lJiZ0LnN0b3JlTmFtZSYmKG49VWYodC5kYk5hbWUsdC5zdG9yZU5hbWUpKSx7bmFtZTpLeSxvcHRpb25zOnQsYXN5bmMgaGFzSXRlbShpKXtyZXR1cm4hKHR5cGVvZiBhd2FpdCB6dShyKGkpLG4pPiJ1Iil9LGFzeW5jIGdldEl0ZW0oaSl7cmV0dXJuIGF3YWl0IHp1KHIoaSksbik/P251bGx9LHNldEl0ZW0oaSxzKXtyZXR1cm4gRnkocihpKSxzLG4pfSxyZW1vdmVJdGVtKGkpe3JldHVybiBreShyKGkpLG4pfSxnZXRLZXlzKCl7cmV0dXJuIGp5KG4pfSxjbGVhcigpe3JldHVybiBNeShuKX19fTtjb25zdCBXeT0iV0FMTEVUX0NPTk5FQ1RfVjJfSU5ERVhFRF9EQiIsR3k9ImtleXZhbHVlc3RvcmFnZSI7bGV0IFl5PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5pbmRleGVkRGI9THkoe2RyaXZlcjpWeSh7ZGJOYW1lOld5LHN0b3JlTmFtZTpHeX0pfSl9YXN5bmMgZ2V0S2V5cygpe3JldHVybiB0aGlzLmluZGV4ZWREYi5nZXRLZXlzKCl9YXN5bmMgZ2V0RW50cmllcygpe3JldHVybihhd2FpdCB0aGlzLmluZGV4ZWREYi5nZXRJdGVtcyhhd2FpdCB0aGlzLmluZGV4ZWREYi5nZXRLZXlzKCkpKS5tYXAoZT0+W2Uua2V5LGUudmFsdWVdKX1hc3luYyBnZXRJdGVtKGUpe2NvbnN0IHI9YXdhaXQgdGhpcy5pbmRleGVkRGIuZ2V0SXRlbShlKTtpZihyIT09bnVsbClyZXR1cm4gcn1hc3luYyBzZXRJdGVtKGUscil7YXdhaXQgdGhpcy5pbmRleGVkRGIuc2V0SXRlbShlLEluKHIpKX1hc3luYyByZW1vdmVJdGVtKGUpe2F3YWl0IHRoaXMuaW5kZXhlZERiLnJlbW92ZUl0ZW0oZSl9fTt2YXIgWW89dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBhZTwidSI/YWU6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30sa3M9e2V4cG9ydHM6e319OyhmdW5jdGlvbigpe2xldCB0O2Z1bmN0aW9uIGUoKXt9dD1lLHQucHJvdG90eXBlLmdldEl0ZW09ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuaGFzT3duUHJvcGVydHkocik/U3RyaW5nKHRoaXNbcl0pOm51bGx9LHQucHJvdG90eXBlLnNldEl0ZW09ZnVuY3Rpb24ocixuKXt0aGlzW3JdPVN0cmluZyhuKX0sdC5wcm90b3R5cGUucmVtb3ZlSXRlbT1mdW5jdGlvbihyKXtkZWxldGUgdGhpc1tyXX0sdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtjb25zdCByPXRoaXM7T2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbihuKXtyW25dPXZvaWQgMCxkZWxldGUgcltuXX0pfSx0LnByb3RvdHlwZS5rZXk9ZnVuY3Rpb24ocil7cmV0dXJuIHI9cnx8MCxPYmplY3Qua2V5cyh0aGlzKVtyXX0sdC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXygibGVuZ3RoIixmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzKS5sZW5ndGh9KSx0eXBlb2YgWW88InUiJiZZby5sb2NhbFN0b3JhZ2U/a3MuZXhwb3J0cz1Zby5sb2NhbFN0b3JhZ2U6dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5sb2NhbFN0b3JhZ2U/a3MuZXhwb3J0cz13aW5kb3cubG9jYWxTdG9yYWdlOmtzLmV4cG9ydHM9bmV3IGV9KSgpO2Z1bmN0aW9uIFp5KHQpe3ZhciBlO3JldHVyblt0WzBdLF9uKChlPXRbMV0pIT1udWxsP2U6IiIpXX1sZXQgWHk9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmxvY2FsU3RvcmFnZT1rcy5leHBvcnRzfWFzeW5jIGdldEtleXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5sb2NhbFN0b3JhZ2UpfWFzeW5jIGdldEVudHJpZXMoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5sb2NhbFN0b3JhZ2UpLm1hcChaeSl9YXN5bmMgZ2V0SXRlbShlKXtjb25zdCByPXRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0oZSk7aWYociE9PW51bGwpcmV0dXJuIF9uKHIpfWFzeW5jIHNldEl0ZW0oZSxyKXt0aGlzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKGUsSW4ocikpfWFzeW5jIHJlbW92ZUl0ZW0oZSl7dGhpcy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShlKX19O2NvbnN0IEp5PSJ3Y19zdG9yYWdlX3ZlcnNpb24iLEh1PTEsUXk9YXN5bmModCxlLHIpPT57Y29uc3Qgbj1KeSxpPWF3YWl0IGUuZ2V0SXRlbShuKTtpZihpJiZpPj1IdSl7cihlKTtyZXR1cm59Y29uc3Qgcz1hd2FpdCB0LmdldEtleXMoKTtpZighcy5sZW5ndGgpe3IoZSk7cmV0dXJufWNvbnN0IG89W107Zm9yKDtzLmxlbmd0aDspe2NvbnN0IGE9cy5zaGlmdCgpO2lmKCFhKWNvbnRpbnVlO2NvbnN0IGM9YS50b0xvd2VyQ2FzZSgpO2lmKGMuaW5jbHVkZXMoIndjQCIpfHxjLmluY2x1ZGVzKCJ3YWxsZXRjb25uZWN0Iil8fGMuaW5jbHVkZXMoIndjXyIpfHxjLmluY2x1ZGVzKCJ3YWxsZXRfY29ubmVjdCIpKXtjb25zdCB1PWF3YWl0IHQuZ2V0SXRlbShhKTthd2FpdCBlLnNldEl0ZW0oYSx1KSxvLnB1c2goYSl9fWF3YWl0IGUuc2V0SXRlbShuLEh1KSxyKGUpLGV3KHQsbyl9LGV3PWFzeW5jKHQsZSk9PntlLmxlbmd0aCYmZS5mb3JFYWNoKGFzeW5jIHI9Pnthd2FpdCB0LnJlbW92ZUl0ZW0ocil9KX07bGV0IHR3PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLnNldEluaXRpYWxpemVkPXI9Pnt0aGlzLnN0b3JhZ2U9cix0aGlzLmluaXRpYWxpemVkPSEwfTtjb25zdCBlPW5ldyBYeTt0aGlzLnN0b3JhZ2U9ZTt0cnl7Y29uc3Qgcj1uZXcgWXk7UXkoZSxyLHRoaXMuc2V0SW5pdGlhbGl6ZWQpfWNhdGNoe3RoaXMuaW5pdGlhbGl6ZWQ9ITB9fWFzeW5jIGdldEtleXMoKXtyZXR1cm4gYXdhaXQgdGhpcy5pbml0aWFsaXplKCksdGhpcy5zdG9yYWdlLmdldEtleXMoKX1hc3luYyBnZXRFbnRyaWVzKCl7cmV0dXJuIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZSgpLHRoaXMuc3RvcmFnZS5nZXRFbnRyaWVzKCl9YXN5bmMgZ2V0SXRlbShlKXtyZXR1cm4gYXdhaXQgdGhpcy5pbml0aWFsaXplKCksdGhpcy5zdG9yYWdlLmdldEl0ZW0oZSl9YXN5bmMgc2V0SXRlbShlLHIpe3JldHVybiBhd2FpdCB0aGlzLmluaXRpYWxpemUoKSx0aGlzLnN0b3JhZ2Uuc2V0SXRlbShlLHIpfWFzeW5jIHJlbW92ZUl0ZW0oZSl7cmV0dXJuIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZSgpLHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKGUpfWFzeW5jIGluaXRpYWxpemUoKXt0aGlzLmluaXRpYWxpemVkfHxhd2FpdCBuZXcgUHJvbWlzZShlPT57Y29uc3Qgcj1zZXRJbnRlcnZhbCgoKT0+e3RoaXMuaW5pdGlhbGl6ZWQmJihjbGVhckludGVydmFsKHIpLGUoKSl9LDIwKX0pfX07dmFyIGVyPXtleHBvcnRzOnt9fTtmdW5jdGlvbiBydyh0KXt0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpfWNhdGNoe3JldHVybiciW0NpcmN1bGFyXSInfX12YXIgbnc9aXc7ZnVuY3Rpb24gaXcodCxlLHIpe3ZhciBuPXImJnIuc3RyaW5naWZ5fHxydyxpPTE7aWYodHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbCl7dmFyIHM9ZS5sZW5ndGgraTtpZihzPT09MSlyZXR1cm4gdDt2YXIgbz1uZXcgQXJyYXkocyk7b1swXT1uKHQpO2Zvcih2YXIgYT0xO2E8czthKyspb1thXT1uKGVbYV0pO3JldHVybiBvLmpvaW4oIiAiKX1pZih0eXBlb2YgdCE9InN0cmluZyIpcmV0dXJuIHQ7dmFyIGM9ZS5sZW5ndGg7aWYoYz09PTApcmV0dXJuIHQ7Zm9yKHZhciB1PSIiLGw9MS1pLGg9LTEscD10JiZ0Lmxlbmd0aHx8MCxnPTA7ZzxwOyl7aWYodC5jaGFyQ29kZUF0KGcpPT09MzcmJmcrMTxwKXtzd2l0Y2goaD1oPi0xP2g6MCx0LmNoYXJDb2RlQXQoZysxKSl7Y2FzZSAxMDA6Y2FzZSAxMDI6aWYobD49Y3x8ZVtsXT09bnVsbClicmVhaztoPGcmJih1Kz10LnNsaWNlKGgsZykpLHUrPU51bWJlcihlW2xdKSxoPWcrMixnKys7YnJlYWs7Y2FzZSAxMDU6aWYobD49Y3x8ZVtsXT09bnVsbClicmVhaztoPGcmJih1Kz10LnNsaWNlKGgsZykpLHUrPU1hdGguZmxvb3IoTnVtYmVyKGVbbF0pKSxoPWcrMixnKys7YnJlYWs7Y2FzZSA3OTpjYXNlIDExMTpjYXNlIDEwNjppZihsPj1jfHxlW2xdPT09dm9pZCAwKWJyZWFrO2g8ZyYmKHUrPXQuc2xpY2UoaCxnKSk7dmFyIHc9dHlwZW9mIGVbbF07aWYodz09PSJzdHJpbmciKXt1Kz0iJyIrZVtsXSsiJyIsaD1nKzIsZysrO2JyZWFrfWlmKHc9PT0iZnVuY3Rpb24iKXt1Kz1lW2xdLm5hbWV8fCI8YW5vbnltb3VzPiIsaD1nKzIsZysrO2JyZWFrfXUrPW4oZVtsXSksaD1nKzIsZysrO2JyZWFrO2Nhc2UgMTE1OmlmKGw+PWMpYnJlYWs7aDxnJiYodSs9dC5zbGljZShoLGcpKSx1Kz1TdHJpbmcoZVtsXSksaD1nKzIsZysrO2JyZWFrO2Nhc2UgMzc6aDxnJiYodSs9dC5zbGljZShoLGcpKSx1Kz0iJSIsaD1nKzIsZysrLGwtLTticmVha30rK2x9KytnfXJldHVybiBoPT09LTE/dDooaDxwJiYodSs9dC5zbGljZShoKSksdSl9Y29uc3QgS3U9bnc7ZXIuZXhwb3J0cz1Fcjtjb25zdCBqaT1idygpLmNvbnNvbGV8fHt9LHN3PXttYXBIdHRwUmVxdWVzdDpkcyxtYXBIdHRwUmVzcG9uc2U6ZHMsd3JhcFJlcXVlc3RTZXJpYWxpemVyOlpvLHdyYXBSZXNwb25zZVNlcmlhbGl6ZXI6Wm8sd3JhcEVycm9yU2VyaWFsaXplcjpabyxyZXE6ZHMscmVzOmRzLGVycjpXdSxlcnJXaXRoQ2F1c2U6V3V9O2Z1bmN0aW9uIFZyKHQsZSl7cmV0dXJuIHQ9PT0ic2lsZW50Ij8xLzA6ZS5sZXZlbHMudmFsdWVzW3RdfWNvbnN0IFRjPVN5bWJvbCgicGluby5sb2dGdW5jcyIpLFdhPVN5bWJvbCgicGluby5oaWVyYXJjaHkiKSxvdz17ZXJyb3I6ImxvZyIsZmF0YWw6ImVycm9yIix3YXJuOiJlcnJvciIsaW5mbzoibG9nIixkZWJ1ZzoibG9nIix0cmFjZToibG9nIn07ZnVuY3Rpb24gVnUodCxlKXtjb25zdCByPXtsb2dnZXI6ZSxwYXJlbnQ6dFtXYV19O2VbV2FdPXJ9ZnVuY3Rpb24gYXcodCxlLHIpe2NvbnN0IG49e307ZS5mb3JFYWNoKGk9PntuW2ldPXJbaV0/cltpXTpqaVtpXXx8amlbb3dbaV18fCJsb2ciXXx8UW59KSx0W1RjXT1ufWZ1bmN0aW9uIGN3KHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5maWx0ZXIoZnVuY3Rpb24ocil7cmV0dXJuIHIhPT0iIXN0ZFNlcmlhbGl6ZXJzLmVyciJ9KTp0PT09ITA/T2JqZWN0LmtleXMoZSk6ITF9ZnVuY3Rpb24gRXIodCl7dD10fHx7fSx0LmJyb3dzZXI9dC5icm93c2VyfHx7fTtjb25zdCBlPXQuYnJvd3Nlci50cmFuc21pdDtpZihlJiZ0eXBlb2YgZS5zZW5kIT0iZnVuY3Rpb24iKXRocm93IEVycm9yKCJwaW5vOiB0cmFuc21pdCBvcHRpb24gbXVzdCBoYXZlIGEgc2VuZCBmdW5jdGlvbiIpO2NvbnN0IHI9dC5icm93c2VyLndyaXRlfHxqaTt0LmJyb3dzZXIud3JpdGUmJih0LmJyb3dzZXIuYXNPYmplY3Q9ITApO2NvbnN0IG49dC5zZXJpYWxpemVyc3x8e30saT1jdyh0LmJyb3dzZXIuc2VyaWFsaXplLG4pO2xldCBzPXQuYnJvd3Nlci5zZXJpYWxpemU7QXJyYXkuaXNBcnJheSh0LmJyb3dzZXIuc2VyaWFsaXplKSYmdC5icm93c2VyLnNlcmlhbGl6ZS5pbmRleE9mKCIhc3RkU2VyaWFsaXplcnMuZXJyIik+LTEmJihzPSExKTtjb25zdCBvPU9iamVjdC5rZXlzKHQuY3VzdG9tTGV2ZWxzfHx7fSksYT1bImVycm9yIiwiZmF0YWwiLCJ3YXJuIiwiaW5mbyIsImRlYnVnIiwidHJhY2UiXS5jb25jYXQobyk7dHlwZW9mIHI9PSJmdW5jdGlvbiImJmEuZm9yRWFjaChmdW5jdGlvbihiKXtyW2JdPXJ9KSwodC5lbmFibGVkPT09ITF8fHQuYnJvd3Nlci5kaXNhYmxlZCkmJih0LmxldmVsPSJzaWxlbnQiKTtjb25zdCBjPXQubGV2ZWx8fCJpbmZvIix1PU9iamVjdC5jcmVhdGUocik7dS5sb2d8fCh1LmxvZz1RbiksYXcodSxhLHIpLFZ1KHt9LHUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LCJsZXZlbFZhbCIse2dldDpofSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsImxldmVsIix7Z2V0OnAsc2V0Omd9KTtjb25zdCBsPXt0cmFuc21pdDplLHNlcmlhbGl6ZTppLGFzT2JqZWN0OnQuYnJvd3Nlci5hc09iamVjdCxhc09iamVjdEJpbmRpbmdzT25seTp0LmJyb3dzZXIuYXNPYmplY3RCaW5kaW5nc09ubHksZm9ybWF0dGVyczp0LmJyb3dzZXIuZm9ybWF0dGVycyxsZXZlbHM6YSx0aW1lc3RhbXA6eXcodCksbWVzc2FnZUtleTp0Lm1lc3NhZ2VLZXl8fCJtc2ciLG9uQ2hpbGQ6dC5vbkNoaWxkfHxRbn07dS5sZXZlbHM9dXcodCksdS5sZXZlbD1jLHUuaXNMZXZlbEVuYWJsZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGV2ZWxzLnZhbHVlc1tiXT90aGlzLmxldmVscy52YWx1ZXNbYl0+PXRoaXMubGV2ZWxzLnZhbHVlc1t0aGlzLmxldmVsXTohMX0sdS5zZXRNYXhMaXN0ZW5lcnM9dS5nZXRNYXhMaXN0ZW5lcnM9dS5lbWl0PXUuYWRkTGlzdGVuZXI9dS5vbj11LnByZXBlbmRMaXN0ZW5lcj11Lm9uY2U9dS5wcmVwZW5kT25jZUxpc3RlbmVyPXUucmVtb3ZlTGlzdGVuZXI9dS5yZW1vdmVBbGxMaXN0ZW5lcnM9dS5saXN0ZW5lcnM9dS5saXN0ZW5lckNvdW50PXUuZXZlbnROYW1lcz11LndyaXRlPXUuZmx1c2g9UW4sdS5zZXJpYWxpemVycz1uLHUuX3NlcmlhbGl6ZT1pLHUuX3N0ZEVyclNlcmlhbGl6ZT1zLHUuY2hpbGQ9ZnVuY3Rpb24oLi4uYil7cmV0dXJuIHcuY2FsbCh0aGlzLGwsLi4uYil9LGUmJih1Ll9sb2dFdmVudD1HYSgpKTtmdW5jdGlvbiBoKCl7cmV0dXJuIFZyKHRoaXMubGV2ZWwsdGhpcyl9ZnVuY3Rpb24gcCgpe3JldHVybiB0aGlzLl9sZXZlbH1mdW5jdGlvbiBnKGIpe2lmKGIhPT0ic2lsZW50IiYmIXRoaXMubGV2ZWxzLnZhbHVlc1tiXSl0aHJvdyBFcnJvcigidW5rbm93biBsZXZlbCAiK2IpO3RoaXMuX2xldmVsPWIsYW4odGhpcyxsLHUsImVycm9yIiksYW4odGhpcyxsLHUsImZhdGFsIiksYW4odGhpcyxsLHUsIndhcm4iKSxhbih0aGlzLGwsdSwiaW5mbyIpLGFuKHRoaXMsbCx1LCJkZWJ1ZyIpLGFuKHRoaXMsbCx1LCJ0cmFjZSIpLG8uZm9yRWFjaCh2PT57YW4odGhpcyxsLHUsdil9KX1mdW5jdGlvbiB3KGIsdixPKXtpZighdil0aHJvdyBuZXcgRXJyb3IoIm1pc3NpbmcgYmluZGluZ3MgZm9yIGNoaWxkIFBpbm8iKTtPPU98fHt9LGkmJnYuc2VyaWFsaXplcnMmJihPLnNlcmlhbGl6ZXJzPXYuc2VyaWFsaXplcnMpO2NvbnN0IEY9Ty5zZXJpYWxpemVycztpZihpJiZGKXt2YXIgXz1PYmplY3QuYXNzaWduKHt9LG4sRiksUD10LmJyb3dzZXIuc2VyaWFsaXplPT09ITA/T2JqZWN0LmtleXMoXyk6aTtkZWxldGUgdi5zZXJpYWxpemVycyxSYyhbdl0sUCxfLHRoaXMuX3N0ZEVyclNlcmlhbGl6ZSl9ZnVuY3Rpb24gQyhxKXt0aGlzLl9jaGlsZExldmVsPShxLl9jaGlsZExldmVsfDApKzEsdGhpcy5iaW5kaW5ncz12LF8mJih0aGlzLnNlcmlhbGl6ZXJzPV8sdGhpcy5fc2VyaWFsaXplPVApLGUmJih0aGlzLl9sb2dFdmVudD1HYShbXS5jb25jYXQocS5fbG9nRXZlbnQuYmluZGluZ3MsdikpKX1DLnByb3RvdHlwZT10aGlzO2NvbnN0IGo9bmV3IEModGhpcyk7cmV0dXJuIFZ1KHRoaXMsaiksai5jaGlsZD1mdW5jdGlvbiguLi5xKXtyZXR1cm4gdy5jYWxsKHRoaXMsYiwuLi5xKX0sai5sZXZlbD1PLmxldmVsfHx0aGlzLmxldmVsLGIub25DaGlsZChqKSxqfXJldHVybiB1fWZ1bmN0aW9uIHV3KHQpe2NvbnN0IGU9dC5jdXN0b21MZXZlbHN8fHt9LHI9T2JqZWN0LmFzc2lnbih7fSxFci5sZXZlbHMudmFsdWVzLGUpLG49T2JqZWN0LmFzc2lnbih7fSxFci5sZXZlbHMubGFiZWxzLGx3KGUpKTtyZXR1cm57dmFsdWVzOnIsbGFiZWxzOm59fWZ1bmN0aW9uIGx3KHQpe2NvbnN0IGU9e307cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24ocil7ZVt0W3JdXT1yfSksZX1Fci5sZXZlbHM9e3ZhbHVlczp7ZmF0YWw6NjAsZXJyb3I6NTAsd2Fybjo0MCxpbmZvOjMwLGRlYnVnOjIwLHRyYWNlOjEwfSxsYWJlbHM6ezEwOiJ0cmFjZSIsMjA6ImRlYnVnIiwzMDoiaW5mbyIsNDA6Indhcm4iLDUwOiJlcnJvciIsNjA6ImZhdGFsIn19LEVyLnN0ZFNlcmlhbGl6ZXJzPXN3LEVyLnN0ZFRpbWVGdW5jdGlvbnM9T2JqZWN0LmFzc2lnbih7fSx7bnVsbFRpbWU6TmYsZXBvY2hUaW1lOkxmLHVuaXhUaW1lOnd3LGlzb1RpbWU6bXd9KTtmdW5jdGlvbiBodyh0KXtjb25zdCBlPVtdO3QuYmluZGluZ3MmJmUucHVzaCh0LmJpbmRpbmdzKTtsZXQgcj10W1dhXTtmb3IoO3IucGFyZW50OylyPXIucGFyZW50LHIubG9nZ2VyLmJpbmRpbmdzJiZlLnB1c2goci5sb2dnZXIuYmluZGluZ3MpO3JldHVybiBlLnJldmVyc2UoKX1mdW5jdGlvbiBhbih0LGUscixuKXtpZihPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHt2YWx1ZTpWcih0LmxldmVsLHIpPlZyKG4scik/UW46cltUY11bbl0sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0W25dPT09UW4pe2lmKCFlLnRyYW5zbWl0KXJldHVybjtjb25zdCBzPWUudHJhbnNtaXQubGV2ZWx8fHQubGV2ZWwsbz1WcihzLHIpO2lmKFZyKG4scik8bylyZXR1cm59dFtuXT1kdyh0LGUscixuKTtjb25zdCBpPWh3KHQpO2kubGVuZ3RoIT09MCYmKHRbbl09ZncoaSx0W25dKSl9ZnVuY3Rpb24gZncodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0aGlzLFsuLi50LC4uLmFyZ3VtZW50c10pfX1mdW5jdGlvbiBkdyh0LGUscixuKXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGZ1bmN0aW9uKCl7Y29uc3Qgcz1lLnRpbWVzdGFtcCgpLG89bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLGE9T2JqZWN0LmdldFByb3RvdHlwZU9mJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk9PT1qaT9qaTp0aGlzO2Zvcih2YXIgYz0wO2M8by5sZW5ndGg7YysrKW9bY109YXJndW1lbnRzW2NdO3ZhciB1PSExO2lmKGUuc2VyaWFsaXplJiYoUmMobyx0aGlzLl9zZXJpYWxpemUsdGhpcy5zZXJpYWxpemVycyx0aGlzLl9zdGRFcnJTZXJpYWxpemUpLHU9ITApLGUuYXNPYmplY3R8fGUuZm9ybWF0dGVycz9pLmNhbGwoYSwuLi5wdyh0aGlzLG4sbyxzLGUpKTppLmFwcGx5KGEsbyksZS50cmFuc21pdCl7Y29uc3QgbD1lLnRyYW5zbWl0LmxldmVsfHx0Ll9sZXZlbCxoPVZyKGwscikscD1WcihuLHIpO2lmKHA8aClyZXR1cm47Z3codGhpcyx7dHM6cyxtZXRob2RMZXZlbDpuLG1ldGhvZFZhbHVlOnAsdHJhbnNtaXRWYWx1ZTpyLmxldmVscy52YWx1ZXNbZS50cmFuc21pdC5sZXZlbHx8dC5fbGV2ZWxdLHNlbmQ6ZS50cmFuc21pdC5zZW5kLHZhbDpWcih0Ll9sZXZlbCxyKX0sbyx1KX19fSh0W1RjXVtuXSl9ZnVuY3Rpb24gcHcodCxlLHIsbixpKXtjb25zdHtsZXZlbDpzLGxvZzpvPWg9Pmh9PWkuZm9ybWF0dGVyc3x8e30sYT1yLnNsaWNlKCk7bGV0IGM9YVswXTtjb25zdCB1PXt9O2xldCBsPSh0Ll9jaGlsZExldmVsfDApKzE7aWYobDwxJiYobD0xKSxuJiYodS50aW1lPW4pLHMpe2NvbnN0IGg9cyhlLHQubGV2ZWxzLnZhbHVlc1tlXSk7T2JqZWN0LmFzc2lnbih1LGgpfWVsc2UgdS5sZXZlbD10LmxldmVscy52YWx1ZXNbZV07aWYoaS5hc09iamVjdEJpbmRpbmdzT25seSl7aWYoYyE9PW51bGwmJnR5cGVvZiBjPT0ib2JqZWN0Iilmb3IoO2wtLSYmdHlwZW9mIGFbMF09PSJvYmplY3QiOylPYmplY3QuYXNzaWduKHUsYS5zaGlmdCgpKTtyZXR1cm5bbyh1KSwuLi5hXX1lbHNle2lmKGMhPT1udWxsJiZ0eXBlb2YgYz09Im9iamVjdCIpe2Zvcig7bC0tJiZ0eXBlb2YgYVswXT09Im9iamVjdCI7KU9iamVjdC5hc3NpZ24odSxhLnNoaWZ0KCkpO2M9YS5sZW5ndGg/S3UoYS5zaGlmdCgpLGEpOnZvaWQgMH1lbHNlIHR5cGVvZiBjPT0ic3RyaW5nIiYmKGM9S3UoYS5zaGlmdCgpLGEpKTtyZXR1cm4gYyE9PXZvaWQgMCYmKHVbaS5tZXNzYWdlS2V5XT1jKSxbbyh1KV19fWZ1bmN0aW9uIFJjKHQsZSxyLG4pe2Zvcihjb25zdCBpIGluIHQpaWYobiYmdFtpXWluc3RhbmNlb2YgRXJyb3IpdFtpXT1Fci5zdGRTZXJpYWxpemVycy5lcnIodFtpXSk7ZWxzZSBpZih0eXBlb2YgdFtpXT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KHRbaV0pJiZlKWZvcihjb25zdCBzIGluIHRbaV0pZS5pbmRleE9mKHMpPi0xJiZzIGluIHImJih0W2ldW3NdPXJbc10odFtpXVtzXSkpfWZ1bmN0aW9uIGd3KHQsZSxyLG49ITEpe2NvbnN0IGk9ZS5zZW5kLHM9ZS50cyxvPWUubWV0aG9kTGV2ZWwsYT1lLm1ldGhvZFZhbHVlLGM9ZS52YWwsdT10Ll9sb2dFdmVudC5iaW5kaW5ncztufHxSYyhyLHQuX3NlcmlhbGl6ZXx8T2JqZWN0LmtleXModC5zZXJpYWxpemVycyksdC5zZXJpYWxpemVycyx0Ll9zdGRFcnJTZXJpYWxpemU9PT12b2lkIDA/ITA6dC5fc3RkRXJyU2VyaWFsaXplKSx0Ll9sb2dFdmVudC50cz1zLHQuX2xvZ0V2ZW50Lm1lc3NhZ2VzPXIuZmlsdGVyKGZ1bmN0aW9uKGwpe3JldHVybiB1LmluZGV4T2YobCk9PT0tMX0pLHQuX2xvZ0V2ZW50LmxldmVsLmxhYmVsPW8sdC5fbG9nRXZlbnQubGV2ZWwudmFsdWU9YSxpKG8sdC5fbG9nRXZlbnQsYyksdC5fbG9nRXZlbnQ9R2EodSl9ZnVuY3Rpb24gR2EodCl7cmV0dXJue3RzOjAsbWVzc2FnZXM6W10sYmluZGluZ3M6dHx8W10sbGV2ZWw6e2xhYmVsOiIiLHZhbHVlOjB9fX1mdW5jdGlvbiBXdSh0KXtjb25zdCBlPXt0eXBlOnQuY29uc3RydWN0b3IubmFtZSxtc2c6dC5tZXNzYWdlLHN0YWNrOnQuc3RhY2t9O2Zvcihjb25zdCByIGluIHQpZVtyXT09PXZvaWQgMCYmKGVbcl09dFtyXSk7cmV0dXJuIGV9ZnVuY3Rpb24geXcodCl7cmV0dXJuIHR5cGVvZiB0LnRpbWVzdGFtcD09ImZ1bmN0aW9uIj90LnRpbWVzdGFtcDp0LnRpbWVzdGFtcD09PSExP05mOkxmfWZ1bmN0aW9uIGRzKCl7cmV0dXJue319ZnVuY3Rpb24gWm8odCl7cmV0dXJuIHR9ZnVuY3Rpb24gUW4oKXt9ZnVuY3Rpb24gTmYoKXtyZXR1cm4hMX1mdW5jdGlvbiBMZigpe3JldHVybiBEYXRlLm5vdygpfWZ1bmN0aW9uIHd3KCl7cmV0dXJuIE1hdGgucm91bmQoRGF0ZS5ub3coKS8xZTMpfWZ1bmN0aW9uIG13KCl7cmV0dXJuIG5ldyBEYXRlKERhdGUubm93KCkpLnRvSVNPU3RyaW5nKCl9ZnVuY3Rpb24gYncoKXtmdW5jdGlvbiB0KGUpe3JldHVybiB0eXBlb2YgZTwidSImJmV9dHJ5e3JldHVybiB0eXBlb2YgZ2xvYmFsVGhpczwidSJ8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBlLCJnbG9iYWxUaGlzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGRlbGV0ZSBPYmplY3QucHJvdG90eXBlLmdsb2JhbFRoaXMsdGhpcy5nbG9iYWxUaGlzPXRoaXN9LGNvbmZpZ3VyYWJsZTohMH0pLGdsb2JhbFRoaXN9Y2F0Y2h7cmV0dXJuIHQoc2VsZil8fHQod2luZG93KXx8dCh0aGlzKXx8e319fWVyLmV4cG9ydHMuZGVmYXVsdD1Fcjtlci5leHBvcnRzLnBpbm89RXI7Y29uc3QgRXc9e2xldmVsOiJpbmZvIn0sYm89ImN1c3RvbV9jb250ZXh0IixDYz0xZTMqMTAyNDt2YXIgdnc9T2JqZWN0LmRlZmluZVByb3BlcnR5LHh3PSh0LGUscik9PmUgaW4gdD92dyh0LGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnJ9KTp0W2VdPXIsSHI9KHQsZSxyKT0+eHcodCx0eXBlb2YgZSE9InN5bWJvbCI/ZSsiIjplLHIpO2xldCBfdz1jbGFzc3tjb25zdHJ1Y3RvcihlKXtIcih0aGlzLCJub2RlVmFsdWUiKSxIcih0aGlzLCJzaXplSW5CeXRlcyIpLEhyKHRoaXMsIm5leHQiKSx0aGlzLm5vZGVWYWx1ZT1lLHRoaXMuc2l6ZUluQnl0ZXM9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHRoaXMubm9kZVZhbHVlKS5sZW5ndGgsdGhpcy5uZXh0PW51bGx9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMubm9kZVZhbHVlfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuc2l6ZUluQnl0ZXN9fSxHdT1jbGFzc3tjb25zdHJ1Y3RvcihlKXtIcih0aGlzLCJsZW5ndGhJbk5vZGVzIiksSHIodGhpcywic2l6ZUluQnl0ZXMiKSxIcih0aGlzLCJoZWFkIiksSHIodGhpcywidGFpbCIpLEhyKHRoaXMsIm1heFNpemVJbkJ5dGVzIiksdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGhJbk5vZGVzPTAsdGhpcy5tYXhTaXplSW5CeXRlcz1lLHRoaXMuc2l6ZUluQnl0ZXM9MH1hcHBlbmQoZSl7Y29uc3Qgcj1uZXcgX3coZSk7aWYoci5zaXplPnRoaXMubWF4U2l6ZUluQnl0ZXMpdGhyb3cgbmV3IEVycm9yKGBbTGlua2VkTGlzdF0gVmFsdWUgdG9vIGJpZyB0byBpbnNlcnQgaW50byBsaXN0OiAke2V9IHdpdGggc2l6ZSAke3Iuc2l6ZX1gKTtmb3IoO3RoaXMuc2l6ZStyLnNpemU+dGhpcy5tYXhTaXplSW5CeXRlczspdGhpcy5zaGlmdCgpO3RoaXMuaGVhZD8odGhpcy50YWlsJiYodGhpcy50YWlsLm5leHQ9ciksdGhpcy50YWlsPXIpOih0aGlzLmhlYWQ9cix0aGlzLnRhaWw9ciksdGhpcy5sZW5ndGhJbk5vZGVzKyssdGhpcy5zaXplSW5CeXRlcys9ci5zaXplfXNoaWZ0KCl7aWYoIXRoaXMuaGVhZClyZXR1cm47Y29uc3QgZT10aGlzLmhlYWQ7dGhpcy5oZWFkPXRoaXMuaGVhZC5uZXh0LHRoaXMuaGVhZHx8KHRoaXMudGFpbD1udWxsKSx0aGlzLmxlbmd0aEluTm9kZXMtLSx0aGlzLnNpemVJbkJ5dGVzLT1lLnNpemV9dG9BcnJheSgpe2NvbnN0IGU9W107bGV0IHI9dGhpcy5oZWFkO2Zvcig7ciE9PW51bGw7KWUucHVzaChyLnZhbHVlKSxyPXIubmV4dDtyZXR1cm4gZX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMubGVuZ3RoSW5Ob2Rlc31nZXQgc2l6ZSgpe3JldHVybiB0aGlzLnNpemVJbkJ5dGVzfXRvT3JkZXJlZEFycmF5KCl7cmV0dXJuIEFycmF5LmZyb20odGhpcyl9W1N5bWJvbC5pdGVyYXRvcl0oKXtsZXQgZT10aGlzLmhlYWQ7cmV0dXJue25leHQ6KCk9PntpZighZSlyZXR1cm57ZG9uZTohMCx2YWx1ZTpudWxsfTtjb25zdCByPWUudmFsdWU7cmV0dXJuIGU9ZS5uZXh0LHtkb25lOiExLHZhbHVlOnJ9fX19fTtjb25zdCBJdz10PT5KU09OLnN0cmluZ2lmeSh0LChlLHIpPT50eXBlb2Ygcj09ImJpZ2ludCI/ci50b1N0cmluZygpKyJuIjpyKTtmdW5jdGlvbiBZdSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmciP3Q6SXcodCl8fCIifXZhciBTdz1PYmplY3QuZGVmaW5lUHJvcGVydHksQXc9KHQsZSxyKT0+ZSBpbiB0P1N3KHQsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6cn0pOnRbZV09cixwcz0odCxlLHIpPT5Bdyh0LHR5cGVvZiBlIT0ic3ltYm9sIj9lKyIiOmUscik7bGV0IEZmPWNsYXNze2NvbnN0cnVjdG9yKGUscj1DYyl7cHModGhpcywibG9ncyIpLHBzKHRoaXMsImxldmVsIikscHModGhpcywibGV2ZWxWYWx1ZSIpLHBzKHRoaXMsIk1BWF9MT0dfU0laRV9JTl9CWVRFUyIpLHRoaXMubGV2ZWw9ZT8/ImVycm9yIix0aGlzLmxldmVsVmFsdWU9ZXIuZXhwb3J0cy5sZXZlbHMudmFsdWVzW3RoaXMubGV2ZWxdLHRoaXMuTUFYX0xPR19TSVpFX0lOX0JZVEVTPXIsdGhpcy5sb2dzPW5ldyBHdSh0aGlzLk1BWF9MT0dfU0laRV9JTl9CWVRFUyl9Zm9yd2FyZFRvQ29uc29sZShlLHIpe3I9PT1lci5leHBvcnRzLmxldmVscy52YWx1ZXMuZXJyb3I/Y29uc29sZS5lcnJvcihlKTpyPT09ZXIuZXhwb3J0cy5sZXZlbHMudmFsdWVzLndhcm4/Y29uc29sZS53YXJuKGUpOnI9PT1lci5leHBvcnRzLmxldmVscy52YWx1ZXMuZGVidWc/Y29uc29sZS5kZWJ1ZyhlKTpyPT09ZXIuZXhwb3J0cy5sZXZlbHMudmFsdWVzLnRyYWNlP2NvbnNvbGUudHJhY2UoZSk6Y29uc29sZS5sb2coZSl9YXBwZW5kVG9Mb2dzKGUpe3RoaXMubG9ncy5hcHBlbmQoWXUoe3RpbWVzdGFtcDpuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksbG9nOmV9KSk7Y29uc3Qgcj10eXBlb2YgZT09InN0cmluZyI/SlNPTi5wYXJzZShlKS5sZXZlbDplLmxldmVsO3I+PXRoaXMubGV2ZWxWYWx1ZSYmdGhpcy5mb3J3YXJkVG9Db25zb2xlKGUscil9Z2V0TG9ncygpe3JldHVybiB0aGlzLmxvZ3N9Y2xlYXJMb2dzKCl7dGhpcy5sb2dzPW5ldyBHdSh0aGlzLk1BWF9MT0dfU0laRV9JTl9CWVRFUyl9Z2V0TG9nQXJyYXkoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmxvZ3MpfWxvZ3NUb0Jsb2IoZSl7Y29uc3Qgcj10aGlzLmdldExvZ0FycmF5KCk7cmV0dXJuIHIucHVzaChZdSh7ZXh0cmFNZXRhZGF0YTplfSkpLG5ldyBCbG9iKHIse3R5cGU6ImFwcGxpY2F0aW9uL2pzb24ifSl9fTt2YXIgRHc9T2JqZWN0LmRlZmluZVByb3BlcnR5LE93PSh0LGUscik9PmUgaW4gdD9Edyh0LGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnJ9KTp0W2VdPXIsJHc9KHQsZSxyKT0+T3codCxlKyIiLHIpO2xldCBCdz1jbGFzc3tjb25zdHJ1Y3RvcihlLHI9Q2MpeyR3KHRoaXMsImJhc2VDaHVua0xvZ2dlciIpLHRoaXMuYmFzZUNodW5rTG9nZ2VyPW5ldyBGZihlLHIpfXdyaXRlKGUpe3RoaXMuYmFzZUNodW5rTG9nZ2VyLmFwcGVuZFRvTG9ncyhlKX1nZXRMb2dzKCl7cmV0dXJuIHRoaXMuYmFzZUNodW5rTG9nZ2VyLmdldExvZ3MoKX1jbGVhckxvZ3MoKXt0aGlzLmJhc2VDaHVua0xvZ2dlci5jbGVhckxvZ3MoKX1nZXRMb2dBcnJheSgpe3JldHVybiB0aGlzLmJhc2VDaHVua0xvZ2dlci5nZXRMb2dBcnJheSgpfWxvZ3NUb0Jsb2IoZSl7cmV0dXJuIHRoaXMuYmFzZUNodW5rTG9nZ2VyLmxvZ3NUb0Jsb2IoZSl9ZG93bmxvYWRMb2dzQmxvYkluQnJvd3NlcihlKXtjb25zdCByPVVSTC5jcmVhdGVPYmplY3RVUkwodGhpcy5sb2dzVG9CbG9iKGUpKSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtuLmhyZWY9cixuLmRvd25sb2FkPWB3YWxsZXRjb25uZWN0LWxvZ3MtJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9LnR4dGAsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChuKSxuLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChuKSxVUkwucmV2b2tlT2JqZWN0VVJMKHIpfX07dmFyIFB3PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxUdz0odCxlLHIpPT5lIGluIHQ/UHcodCxlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSk6dFtlXT1yLFJ3PSh0LGUscik9PlR3KHQsZSsiIixyKTtsZXQgQ3c9Y2xhc3N7Y29uc3RydWN0b3IoZSxyPUNjKXtSdyh0aGlzLCJiYXNlQ2h1bmtMb2dnZXIiKSx0aGlzLmJhc2VDaHVua0xvZ2dlcj1uZXcgRmYoZSxyKX13cml0ZShlKXt0aGlzLmJhc2VDaHVua0xvZ2dlci5hcHBlbmRUb0xvZ3MoZSl9Z2V0TG9ncygpe3JldHVybiB0aGlzLmJhc2VDaHVua0xvZ2dlci5nZXRMb2dzKCl9Y2xlYXJMb2dzKCl7dGhpcy5iYXNlQ2h1bmtMb2dnZXIuY2xlYXJMb2dzKCl9Z2V0TG9nQXJyYXkoKXtyZXR1cm4gdGhpcy5iYXNlQ2h1bmtMb2dnZXIuZ2V0TG9nQXJyYXkoKX1sb2dzVG9CbG9iKGUpe3JldHVybiB0aGlzLmJhc2VDaHVua0xvZ2dlci5sb2dzVG9CbG9iKGUpfX07dmFyIFV3PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxOdz1PYmplY3QuZGVmaW5lUHJvcGVydGllcyxMdz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxadT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLEZ3PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksa3c9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxYdT0odCxlLHIpPT5lIGluIHQ/VXcodCxlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSk6dFtlXT1yLEdyPSh0LGUpPT57Zm9yKHZhciByIGluIGV8fChlPXt9KSlGdy5jYWxsKGUscikmJlh1KHQscixlW3JdKTtpZihadSlmb3IodmFyIHIgb2YgWnUoZSkpa3cuY2FsbChlLHIpJiZYdSh0LHIsZVtyXSk7cmV0dXJuIHR9LFlyPSh0LGUpPT5Odyh0LEx3KGUpKTtmdW5jdGlvbiBNdyh0KXtyZXR1cm4gWXIoR3Ioe30sdCkse2xldmVsOnQ/LmxldmVsfHxFdy5sZXZlbH0pfWZ1bmN0aW9uIHF3KHQsZSxyPWJvKXtyZXR1cm4gdFtyXT1lLHR9ZnVuY3Rpb24gY3QodCxlPWJvKXtyZXR1cm4gdFtlXXx8IiJ9ZnVuY3Rpb24gancodCxlLHI9Ym8pe2NvbnN0IG49Y3QodCxyKTtyZXR1cm4gbi50cmltKCk/YCR7bn0vJHtlfWA6ZX1mdW5jdGlvbiBndCh0LGUscj1ibyl7Y29uc3Qgbj1qdyh0LGUsciksaT10LmNoaWxkKHtjb250ZXh0Om59KTtyZXR1cm4gcXcoaSxuLHIpfWZ1bmN0aW9uIHp3KHQpe3ZhciBlLHI7Y29uc3Qgbj1uZXcgQncoKGU9dC5vcHRzKT09bnVsbD92b2lkIDA6ZS5sZXZlbCx0Lm1heFNpemVJbkJ5dGVzKTtyZXR1cm57bG9nZ2VyOmVyLmV4cG9ydHMoWXIoR3Ioe30sdC5vcHRzKSx7bGV2ZWw6InRyYWNlIixicm93c2VyOllyKEdyKHt9LChyPXQub3B0cyk9PW51bGw/dm9pZCAwOnIuYnJvd3Nlcikse3dyaXRlOmk9Pm4ud3JpdGUoaSl9KX0pKSxjaHVua0xvZ2dlckNvbnRyb2xsZXI6bn19ZnVuY3Rpb24gSHcodCl7dmFyIGUscjtjb25zdCBuPW5ldyBDdygoZT10Lm9wdHMpPT1udWxsP3ZvaWQgMDplLmxldmVsLHQubWF4U2l6ZUluQnl0ZXMpO3JldHVybntsb2dnZXI6ZXIuZXhwb3J0cyhZcihHcih7fSx0Lm9wdHMpLHtsZXZlbDoidHJhY2UiLGJyb3dzZXI6WXIoR3Ioe30sKHI9dC5vcHRzKT09bnVsbD92b2lkIDA6ci5icm93c2VyKSx7d3JpdGU6aT0+bi53cml0ZShpKX0pfSksbiksY2h1bmtMb2dnZXJDb250cm9sbGVyOm59fWZ1bmN0aW9uIGtmKHQpe3ZhciBlO2lmKHR5cGVvZiB0LmxvZ2dlck92ZXJyaWRlPCJ1IiYmdHlwZW9mIHQubG9nZ2VyT3ZlcnJpZGUhPSJzdHJpbmciKXJldHVybntsb2dnZXI6dC5sb2dnZXJPdmVycmlkZSxjaHVua0xvZ2dlckNvbnRyb2xsZXI6bnVsbH07Y29uc3Qgcj1ZcihHcih7fSx0Lm9wdHMpLHtsZXZlbDp0eXBlb2YgdC5sb2dnZXJPdmVycmlkZT09InN0cmluZyI/dC5sb2dnZXJPdmVycmlkZTooZT10Lm9wdHMpPT1udWxsP3ZvaWQgMDplLmxldmVsfSk7cmV0dXJuIHR5cGVvZiB3aW5kb3c8InUiP3p3KFlyKEdyKHt9LHQpLHtvcHRzOnJ9KSk6SHcoWXIoR3Ioe30sdCkse29wdHM6cn0pKX1sZXQgS3c9Y2xhc3MgZXh0ZW5kcyBCbntjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMub3B0cz1lLHRoaXMucHJvdG9jb2w9IndjIix0aGlzLnZlcnNpb249Mn19LFZ3PWNsYXNzIGV4dGVuZHMgQm57Y29uc3RydWN0b3IoZSxyKXtzdXBlcigpLHRoaXMuY29yZT1lLHRoaXMubG9nZ2VyPXIsdGhpcy5yZWNvcmRzPW5ldyBNYXB9fTtjbGFzcyBXd3tjb25zdHJ1Y3RvcihlLHIpe3RoaXMubG9nZ2VyPWUsdGhpcy5jb3JlPXJ9fWxldCBHdz1jbGFzcyBleHRlbmRzIEJue2NvbnN0cnVjdG9yKGUscil7c3VwZXIoKSx0aGlzLnJlbGF5ZXI9ZSx0aGlzLmxvZ2dlcj1yfX0sWXc9Y2xhc3MgZXh0ZW5kcyBCbntjb25zdHJ1Y3RvcihlKXtzdXBlcigpfX0sWnc9Y2xhc3N7Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5jb3JlPWUsdGhpcy5sb2dnZXI9cix0aGlzLm5hbWU9bn19LFh3PWNsYXNzIGV4dGVuZHMgQm57Y29uc3RydWN0b3IoZSxyKXtzdXBlcigpLHRoaXMucmVsYXllcj1lLHRoaXMubG9nZ2VyPXJ9fSxKdz1jbGFzcyBleHRlbmRzIEJue2NvbnN0cnVjdG9yKGUscil7c3VwZXIoKSx0aGlzLmNvcmU9ZSx0aGlzLmxvZ2dlcj1yfX0sUXc9Y2xhc3N7Y29uc3RydWN0b3IoZSxyLG4pe3RoaXMuY29yZT1lLHRoaXMubG9nZ2VyPXIsdGhpcy5zdG9yZT1ufX0sZW09Y2xhc3N7Y29uc3RydWN0b3IoZSxyKXt0aGlzLnByb2plY3RJZD1lLHRoaXMubG9nZ2VyPXJ9fSx0bT1jbGFzc3tjb25zdHJ1Y3RvcihlLHIsbil7dGhpcy5jb3JlPWUsdGhpcy5sb2dnZXI9cix0aGlzLnRlbGVtZXRyeUVuYWJsZWQ9bn19LHJtPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMub3B0cz1lLHRoaXMucHJvdG9jb2w9IndjIix0aGlzLnZlcnNpb249Mn19LG5tPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuY2xpZW50PWV9fTtmdW5jdGlvbiBpbSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEFycmF5QnVmZmVyLmlzVmlldyh0KSYmdC5jb25zdHJ1Y3Rvci5uYW1lPT09IlVpbnQ4QXJyYXkifWZ1bmN0aW9uIE1mKHQsLi4uZSl7aWYoIWltKHQpKXRocm93IG5ldyBFcnJvcigiVWludDhBcnJheSBleHBlY3RlZCIpO2lmKGUubGVuZ3RoPjAmJiFlLmluY2x1ZGVzKHQubGVuZ3RoKSl0aHJvdyBuZXcgRXJyb3IoIlVpbnQ4QXJyYXkgZXhwZWN0ZWQgb2YgbGVuZ3RoICIrZSsiLCBnb3QgbGVuZ3RoPSIrdC5sZW5ndGgpfWZ1bmN0aW9uIEp1KHQsZT0hMCl7aWYodC5kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJIYXNoIGluc3RhbmNlIGhhcyBiZWVuIGRlc3Ryb3llZCIpO2lmKGUmJnQuZmluaXNoZWQpdGhyb3cgbmV3IEVycm9yKCJIYXNoI2RpZ2VzdCgpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIil9ZnVuY3Rpb24gc20odCxlKXtNZih0KTtjb25zdCByPWUub3V0cHV0TGVuO2lmKHQubGVuZ3RoPHIpdGhyb3cgbmV3IEVycm9yKCJkaWdlc3RJbnRvKCkgZXhwZWN0cyBvdXRwdXQgYnVmZmVyIG9mIGxlbmd0aCBhdCBsZWFzdCAiK3IpfWNvbnN0IHFuPXR5cGVvZiBnbG9iYWxUaGlzPT0ib2JqZWN0IiYmImNyeXB0byJpbiBnbG9iYWxUaGlzP2dsb2JhbFRoaXMuY3J5cHRvOnZvaWQgMDsvKiEgbm9ibGUtaGFzaGVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICovY29uc3QgWG89dD0+bmV3IERhdGFWaWV3KHQuYnVmZmVyLHQuYnl0ZU9mZnNldCx0LmJ5dGVMZW5ndGgpO2Z1bmN0aW9uIG9tKHQpe2lmKHR5cGVvZiB0IT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoInV0ZjhUb0J5dGVzIGV4cGVjdGVkIHN0cmluZywgZ290ICIrdHlwZW9mIHQpO3JldHVybiBuZXcgVWludDhBcnJheShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodCkpfWZ1bmN0aW9uIHFmKHQpe3JldHVybiB0eXBlb2YgdD09InN0cmluZyImJih0PW9tKHQpKSxNZih0KSx0fWNsYXNzIGFte2Nsb25lKCl7cmV0dXJuIHRoaXMuX2Nsb25lSW50bygpfX1mdW5jdGlvbiBjbSh0KXtjb25zdCBlPW49PnQoKS51cGRhdGUocWYobikpLmRpZ2VzdCgpLHI9dCgpO3JldHVybiBlLm91dHB1dExlbj1yLm91dHB1dExlbixlLmJsb2NrTGVuPXIuYmxvY2tMZW4sZS5jcmVhdGU9KCk9PnQoKSxlfWZ1bmN0aW9uIGpmKHQ9MzIpe2lmKHFuJiZ0eXBlb2YgcW4uZ2V0UmFuZG9tVmFsdWVzPT0iZnVuY3Rpb24iKXJldHVybiBxbi5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkodCkpO2lmKHFuJiZ0eXBlb2YgcW4ucmFuZG9tQnl0ZXM9PSJmdW5jdGlvbiIpcmV0dXJuIHFuLnJhbmRvbUJ5dGVzKHQpO3Rocm93IG5ldyBFcnJvcigiY3J5cHRvLmdldFJhbmRvbVZhbHVlcyBtdXN0IGJlIGRlZmluZWQiKX1mdW5jdGlvbiB1bSh0LGUscixuKXtpZih0eXBlb2YgdC5zZXRCaWdVaW50NjQ9PSJmdW5jdGlvbiIpcmV0dXJuIHQuc2V0QmlnVWludDY0KGUscixuKTtjb25zdCBpPUJpZ0ludCgzMikscz1CaWdJbnQoNDI5NDk2NzI5NSksbz1OdW1iZXIocj4+aSZzKSxhPU51bWJlcihyJnMpLGM9bj80OjAsdT1uPzA6NDt0LnNldFVpbnQzMihlK2MsbyxuKSx0LnNldFVpbnQzMihlK3UsYSxuKX1jbGFzcyBsbSBleHRlbmRzIGFte2NvbnN0cnVjdG9yKGUscixuLGkpe3N1cGVyKCksdGhpcy5ibG9ja0xlbj1lLHRoaXMub3V0cHV0TGVuPXIsdGhpcy5wYWRPZmZzZXQ9bix0aGlzLmlzTEU9aSx0aGlzLmZpbmlzaGVkPSExLHRoaXMubGVuZ3RoPTAsdGhpcy5wb3M9MCx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheShlKSx0aGlzLnZpZXc9WG8odGhpcy5idWZmZXIpfXVwZGF0ZShlKXtKdSh0aGlzKTtjb25zdHt2aWV3OnIsYnVmZmVyOm4sYmxvY2tMZW46aX09dGhpcztlPXFmKGUpO2NvbnN0IHM9ZS5sZW5ndGg7Zm9yKGxldCBvPTA7bzxzOyl7Y29uc3QgYT1NYXRoLm1pbihpLXRoaXMucG9zLHMtbyk7aWYoYT09PWkpe2NvbnN0IGM9WG8oZSk7Zm9yKDtpPD1zLW87bys9aSl0aGlzLnByb2Nlc3MoYyxvKTtjb250aW51ZX1uLnNldChlLnN1YmFycmF5KG8sbythKSx0aGlzLnBvcyksdGhpcy5wb3MrPWEsbys9YSx0aGlzLnBvcz09PWkmJih0aGlzLnByb2Nlc3MociwwKSx0aGlzLnBvcz0wKX1yZXR1cm4gdGhpcy5sZW5ndGgrPWUubGVuZ3RoLHRoaXMucm91bmRDbGVhbigpLHRoaXN9ZGlnZXN0SW50byhlKXtKdSh0aGlzKSxzbShlLHRoaXMpLHRoaXMuZmluaXNoZWQ9ITA7Y29uc3R7YnVmZmVyOnIsdmlldzpuLGJsb2NrTGVuOmksaXNMRTpzfT10aGlzO2xldHtwb3M6b309dGhpcztyW28rK109MTI4LHRoaXMuYnVmZmVyLnN1YmFycmF5KG8pLmZpbGwoMCksdGhpcy5wYWRPZmZzZXQ+aS1vJiYodGhpcy5wcm9jZXNzKG4sMCksbz0wKTtmb3IobGV0IGg9bztoPGk7aCsrKXJbaF09MDt1bShuLGktOCxCaWdJbnQodGhpcy5sZW5ndGgqOCkscyksdGhpcy5wcm9jZXNzKG4sMCk7Y29uc3QgYT1YbyhlKSxjPXRoaXMub3V0cHV0TGVuO2lmKGMlNCl0aHJvdyBuZXcgRXJyb3IoIl9zaGEyOiBvdXRwdXRMZW4gc2hvdWxkIGJlIGFsaWduZWQgdG8gMzJiaXQiKTtjb25zdCB1PWMvNCxsPXRoaXMuZ2V0KCk7aWYodT5sLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIl9zaGEyOiBvdXRwdXRMZW4gYmlnZ2VyIHRoYW4gc3RhdGUiKTtmb3IobGV0IGg9MDtoPHU7aCsrKWEuc2V0VWludDMyKDQqaCxsW2hdLHMpfWRpZ2VzdCgpe2NvbnN0e2J1ZmZlcjplLG91dHB1dExlbjpyfT10aGlzO3RoaXMuZGlnZXN0SW50byhlKTtjb25zdCBuPWUuc2xpY2UoMCxyKTtyZXR1cm4gdGhpcy5kZXN0cm95KCksbn1fY2xvbmVJbnRvKGUpe2V8fChlPW5ldyB0aGlzLmNvbnN0cnVjdG9yKSxlLnNldCguLi50aGlzLmdldCgpKTtjb25zdHtibG9ja0xlbjpyLGJ1ZmZlcjpuLGxlbmd0aDppLGZpbmlzaGVkOnMsZGVzdHJveWVkOm8scG9zOmF9PXRoaXM7cmV0dXJuIGUubGVuZ3RoPWksZS5wb3M9YSxlLmZpbmlzaGVkPXMsZS5kZXN0cm95ZWQ9byxpJXImJmUuYnVmZmVyLnNldChuKSxlfX1jb25zdCBncz1CaWdJbnQoMioqMzItMSksWWE9QmlnSW50KDMyKTtmdW5jdGlvbiB6Zih0LGU9ITEpe3JldHVybiBlP3toOk51bWJlcih0JmdzKSxsOk51bWJlcih0Pj5ZYSZncyl9OntoOk51bWJlcih0Pj5ZYSZncyl8MCxsOk51bWJlcih0JmdzKXwwfX1mdW5jdGlvbiBobSh0LGU9ITEpe2xldCByPW5ldyBVaW50MzJBcnJheSh0Lmxlbmd0aCksbj1uZXcgVWludDMyQXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKXtjb25zdHtoOnMsbDpvfT16Zih0W2ldLGUpO1tyW2ldLG5baV1dPVtzLG9dfXJldHVybltyLG5dfWNvbnN0IGZtPSh0LGUpPT5CaWdJbnQodD4+PjApPDxZYXxCaWdJbnQoZT4+PjApLGRtPSh0LGUscik9PnQ+Pj5yLHBtPSh0LGUscik9PnQ8PDMyLXJ8ZT4+PnIsZ209KHQsZSxyKT0+dD4+PnJ8ZTw8MzItcix5bT0odCxlLHIpPT50PDwzMi1yfGU+Pj5yLHdtPSh0LGUscik9PnQ8PDY0LXJ8ZT4+PnItMzIsbW09KHQsZSxyKT0+dD4+PnItMzJ8ZTw8NjQtcixibT0odCxlKT0+ZSxFbT0odCxlKT0+dCx2bT0odCxlLHIpPT50PDxyfGU+Pj4zMi1yLHhtPSh0LGUscik9PmU8PHJ8dD4+PjMyLXIsX209KHQsZSxyKT0+ZTw8ci0zMnx0Pj4+NjQtcixJbT0odCxlLHIpPT50PDxyLTMyfGU+Pj42NC1yO2Z1bmN0aW9uIFNtKHQsZSxyLG4pe2NvbnN0IGk9KGU+Pj4wKSsobj4+PjApO3JldHVybntoOnQrcisoaS8yKiozMnwwKXwwLGw6aXwwfX1jb25zdCBBbT0odCxlLHIpPT4odD4+PjApKyhlPj4+MCkrKHI+Pj4wKSxEbT0odCxlLHIsbik9PmUrcituKyh0LzIqKjMyfDApfDAsT209KHQsZSxyLG4pPT4odD4+PjApKyhlPj4+MCkrKHI+Pj4wKSsobj4+PjApLCRtPSh0LGUscixuLGkpPT5lK3IrbitpKyh0LzIqKjMyfDApfDAsQm09KHQsZSxyLG4saSk9Pih0Pj4+MCkrKGU+Pj4wKSsocj4+PjApKyhuPj4+MCkrKGk+Pj4wKSxQbT0odCxlLHIsbixpLHMpPT5lK3IrbitpK3MrKHQvMioqMzJ8MCl8MCxzZT17ZnJvbUJpZzp6ZixzcGxpdDpobSx0b0JpZzpmbSxzaHJTSDpkbSxzaHJTTDpwbSxyb3RyU0g6Z20scm90clNMOnltLHJvdHJCSDp3bSxyb3RyQkw6bW0scm90cjMySDpibSxyb3RyMzJMOkVtLHJvdGxTSDp2bSxyb3RsU0w6eG0scm90bEJIOl9tLHJvdGxCTDpJbSxhZGQ6U20sYWRkM0w6QW0sYWRkM0g6RG0sYWRkNEw6T20sYWRkNEg6JG0sYWRkNUg6UG0sYWRkNUw6Qm19LFtUbSxSbV09c2Uuc3BsaXQoWyIweDQyOGEyZjk4ZDcyOGFlMjIiLCIweDcxMzc0NDkxMjNlZjY1Y2QiLCIweGI1YzBmYmNmZWM0ZDNiMmYiLCIweGU5YjVkYmE1ODE4OWRiYmMiLCIweDM5NTZjMjViZjM0OGI1MzgiLCIweDU5ZjExMWYxYjYwNWQwMTkiLCIweDkyM2Y4MmE0YWYxOTRmOWIiLCIweGFiMWM1ZWQ1ZGE2ZDgxMTgiLCIweGQ4MDdhYTk4YTMwMzAyNDIiLCIweDEyODM1YjAxNDU3MDZmYmUiLCIweDI0MzE4NWJlNGVlNGIyOGMiLCIweDU1MGM3ZGMzZDVmZmI0ZTIiLCIweDcyYmU1ZDc0ZjI3Yjg5NmYiLCIweDgwZGViMWZlM2IxNjk2YjEiLCIweDliZGMwNmE3MjVjNzEyMzUiLCIweGMxOWJmMTc0Y2Y2OTI2OTQiLCIweGU0OWI2OWMxOWVmMTRhZDIiLCIweGVmYmU0Nzg2Mzg0ZjI1ZTMiLCIweDBmYzE5ZGM2OGI4Y2Q1YjUiLCIweDI0MGNhMWNjNzdhYzljNjUiLCIweDJkZTkyYzZmNTkyYjAyNzUiLCIweDRhNzQ4NGFhNmVhNmU0ODMiLCIweDVjYjBhOWRjYmQ0MWZiZDQiLCIweDc2Zjk4OGRhODMxMTUzYjUiLCIweDk4M2U1MTUyZWU2NmRmYWIiLCIweGE4MzFjNjZkMmRiNDMyMTAiLCIweGIwMDMyN2M4OThmYjIxM2YiLCIweGJmNTk3ZmM3YmVlZjBlZTQiLCIweGM2ZTAwYmYzM2RhODhmYzIiLCIweGQ1YTc5MTQ3OTMwYWE3MjUiLCIweDA2Y2E2MzUxZTAwMzgyNmYiLCIweDE0MjkyOTY3MGEwZTZlNzAiLCIweDI3YjcwYTg1NDZkMjJmZmMiLCIweDJlMWIyMTM4NWMyNmM5MjYiLCIweDRkMmM2ZGZjNWFjNDJhZWQiLCIweDUzMzgwZDEzOWQ5NWIzZGYiLCIweDY1MGE3MzU0OGJhZjYzZGUiLCIweDc2NmEwYWJiM2M3N2IyYTgiLCIweDgxYzJjOTJlNDdlZGFlZTYiLCIweDkyNzIyYzg1MTQ4MjM1M2IiLCIweGEyYmZlOGExNGNmMTAzNjQiLCIweGE4MWE2NjRiYmM0MjMwMDEiLCIweGMyNGI4YjcwZDBmODk3OTEiLCIweGM3NmM1MWEzMDY1NGJlMzAiLCIweGQxOTJlODE5ZDZlZjUyMTgiLCIweGQ2OTkwNjI0NTU2NWE5MTAiLCIweGY0MGUzNTg1NTc3MTIwMmEiLCIweDEwNmFhMDcwMzJiYmQxYjgiLCIweDE5YTRjMTE2YjhkMmQwYzgiLCIweDFlMzc2YzA4NTE0MWFiNTMiLCIweDI3NDg3NzRjZGY4ZWViOTkiLCIweDM0YjBiY2I1ZTE5YjQ4YTgiLCIweDM5MWMwY2IzYzVjOTVhNjMiLCIweDRlZDhhYTRhZTM0MThhY2IiLCIweDViOWNjYTRmNzc2M2UzNzMiLCIweDY4MmU2ZmYzZDZiMmI4YTMiLCIweDc0OGY4MmVlNWRlZmIyZmMiLCIweDc4YTU2MzZmNDMxNzJmNjAiLCIweDg0Yzg3ODE0YTFmMGFiNzIiLCIweDhjYzcwMjA4MWE2NDM5ZWMiLCIweDkwYmVmZmZhMjM2MzFlMjgiLCIweGE0NTA2Y2ViZGU4MmJkZTkiLCIweGJlZjlhM2Y3YjJjNjc5MTUiLCIweGM2NzE3OGYyZTM3MjUzMmIiLCIweGNhMjczZWNlZWEyNjYxOWMiLCIweGQxODZiOGM3MjFjMGMyMDciLCIweGVhZGE3ZGQ2Y2RlMGViMWUiLCIweGY1N2Q0ZjdmZWU2ZWQxNzgiLCIweDA2ZjA2N2FhNzIxNzZmYmEiLCIweDBhNjM3ZGM1YTJjODk4YTYiLCIweDExM2Y5ODA0YmVmOTBkYWUiLCIweDFiNzEwYjM1MTMxYzQ3MWIiLCIweDI4ZGI3N2Y1MjMwNDdkODQiLCIweDMyY2FhYjdiNDBjNzI0OTMiLCIweDNjOWViZTBhMTVjOWJlYmMiLCIweDQzMWQ2N2M0OWMxMDBkNGMiLCIweDRjYzVkNGJlY2IzZTQyYjYiLCIweDU5N2YyOTljZmM2NTdlMmEiLCIweDVmY2I2ZmFiM2FkNmZhZWMiLCIweDZjNDQxOThjNGE0NzU4MTciXS5tYXAodD0+QmlnSW50KHQpKSksQXI9bmV3IFVpbnQzMkFycmF5KDgwKSxEcj1uZXcgVWludDMyQXJyYXkoODApO2xldCBDbT1jbGFzcyBleHRlbmRzIGxte2NvbnN0cnVjdG9yKCl7c3VwZXIoMTI4LDY0LDE2LCExKSx0aGlzLkFoPTE3NzkwMzM3MDMsdGhpcy5BbD0tMjA1NzMxNTc2LHRoaXMuQmg9LTExNTA4MzMwMTksdGhpcy5CbD0tMjA2NzA5MzcwMSx0aGlzLkNoPTEwMTM5MDQyNDIsdGhpcy5DbD0tMjM3OTE1NzMsdGhpcy5EaD0tMTUyMTQ4NjUzNCx0aGlzLkRsPTE1OTU3NTAxMjksdGhpcy5FaD0xMzU5ODkzMTE5LHRoaXMuRWw9LTEzNzc0MDIxNTksdGhpcy5GaD0tMTY5NDE0NDM3Mix0aGlzLkZsPTcyNTUxMTE5OSx0aGlzLkdoPTUyODczNDYzNSx0aGlzLkdsPS03OTU3Nzc0OSx0aGlzLkhoPTE1NDE0NTkyMjUsdGhpcy5IbD0zMjcwMzMyMDl9Z2V0KCl7Y29uc3R7QWg6ZSxBbDpyLEJoOm4sQmw6aSxDaDpzLENsOm8sRGg6YSxEbDpjLEVoOnUsRWw6bCxGaDpoLEZsOnAsR2g6ZyxHbDp3LEhoOmIsSGw6dn09dGhpcztyZXR1cm5bZSxyLG4saSxzLG8sYSxjLHUsbCxoLHAsZyx3LGIsdl19c2V0KGUscixuLGkscyxvLGEsYyx1LGwsaCxwLGcsdyxiLHYpe3RoaXMuQWg9ZXwwLHRoaXMuQWw9cnwwLHRoaXMuQmg9bnwwLHRoaXMuQmw9aXwwLHRoaXMuQ2g9c3wwLHRoaXMuQ2w9b3wwLHRoaXMuRGg9YXwwLHRoaXMuRGw9Y3wwLHRoaXMuRWg9dXwwLHRoaXMuRWw9bHwwLHRoaXMuRmg9aHwwLHRoaXMuRmw9cHwwLHRoaXMuR2g9Z3wwLHRoaXMuR2w9d3wwLHRoaXMuSGg9YnwwLHRoaXMuSGw9dnwwfXByb2Nlc3MoZSxyKXtmb3IobGV0IF89MDtfPDE2O18rKyxyKz00KUFyW19dPWUuZ2V0VWludDMyKHIpLERyW19dPWUuZ2V0VWludDMyKHIrPTQpO2ZvcihsZXQgXz0xNjtfPDgwO18rKyl7Y29uc3QgUD1BcltfLTE1XXwwLEM9RHJbXy0xNV18MCxqPXNlLnJvdHJTSChQLEMsMSlec2Uucm90clNIKFAsQyw4KV5zZS5zaHJTSChQLEMsNykscT1zZS5yb3RyU0woUCxDLDEpXnNlLnJvdHJTTChQLEMsOClec2Uuc2hyU0woUCxDLDcpLE09QXJbXy0yXXwwLFQ9RHJbXy0yXXwwLHo9c2Uucm90clNIKE0sVCwxOSlec2Uucm90ckJIKE0sVCw2MSlec2Uuc2hyU0goTSxULDYpLFU9c2Uucm90clNMKE0sVCwxOSlec2Uucm90ckJMKE0sVCw2MSlec2Uuc2hyU0woTSxULDYpLE49c2UuYWRkNEwocSxVLERyW18tN10sRHJbXy0xNl0pLEQ9c2UuYWRkNEgoTixqLHosQXJbXy03XSxBcltfLTE2XSk7QXJbX109RHwwLERyW19dPU58MH1sZXR7QWg6bixBbDppLEJoOnMsQmw6byxDaDphLENsOmMsRGg6dSxEbDpsLEVoOmgsRWw6cCxGaDpnLEZsOncsR2g6YixHbDp2LEhoOk8sSGw6Rn09dGhpcztmb3IobGV0IF89MDtfPDgwO18rKyl7Y29uc3QgUD1zZS5yb3RyU0goaCxwLDE0KV5zZS5yb3RyU0goaCxwLDE4KV5zZS5yb3RyQkgoaCxwLDQxKSxDPXNlLnJvdHJTTChoLHAsMTQpXnNlLnJvdHJTTChoLHAsMTgpXnNlLnJvdHJCTChoLHAsNDEpLGo9aCZnXn5oJmIscT1wJndefnAmdixNPXNlLmFkZDVMKEYsQyxxLFJtW19dLERyW19dKSxUPXNlLmFkZDVIKE0sTyxQLGosVG1bX10sQXJbX10pLHo9TXwwLFU9c2Uucm90clNIKG4saSwyOClec2Uucm90ckJIKG4saSwzNClec2Uucm90ckJIKG4saSwzOSksTj1zZS5yb3RyU0wobixpLDI4KV5zZS5yb3RyQkwobixpLDM0KV5zZS5yb3RyQkwobixpLDM5KSxEPW4mc15uJmFecyZhLFI9aSZvXmkmY15vJmM7Tz1ifDAsRj12fDAsYj1nfDAsdj13fDAsZz1ofDAsdz1wfDAse2gsbDpwfT1zZS5hZGQodXwwLGx8MCxUfDAsenwwKSx1PWF8MCxsPWN8MCxhPXN8MCxjPW98MCxzPW58MCxvPWl8MDtjb25zdCB5PXNlLmFkZDNMKHosTixSKTtuPXNlLmFkZDNIKHksVCxVLEQpLGk9eXwwfSh7aDpuLGw6aX09c2UuYWRkKHRoaXMuQWh8MCx0aGlzLkFsfDAsbnwwLGl8MCkpLHtoOnMsbDpvfT1zZS5hZGQodGhpcy5CaHwwLHRoaXMuQmx8MCxzfDAsb3wwKSx7aDphLGw6Y309c2UuYWRkKHRoaXMuQ2h8MCx0aGlzLkNsfDAsYXwwLGN8MCkse2g6dSxsfT1zZS5hZGQodGhpcy5EaHwwLHRoaXMuRGx8MCx1fDAsbHwwKSx7aCxsOnB9PXNlLmFkZCh0aGlzLkVofDAsdGhpcy5FbHwwLGh8MCxwfDApLHtoOmcsbDp3fT1zZS5hZGQodGhpcy5GaHwwLHRoaXMuRmx8MCxnfDAsd3wwKSx7aDpiLGw6dn09c2UuYWRkKHRoaXMuR2h8MCx0aGlzLkdsfDAsYnwwLHZ8MCkse2g6TyxsOkZ9PXNlLmFkZCh0aGlzLkhofDAsdGhpcy5IbHwwLE98MCxGfDApLHRoaXMuc2V0KG4saSxzLG8sYSxjLHUsbCxoLHAsZyx3LGIsdixPLEYpfXJvdW5kQ2xlYW4oKXtBci5maWxsKDApLERyLmZpbGwoMCl9ZGVzdHJveSgpe3RoaXMuYnVmZmVyLmZpbGwoMCksdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCl9fTtjb25zdCBVbT1jbSgoKT0+bmV3IENtKTsvKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICovY29uc3QgVWM9QmlnSW50KDApLEhmPUJpZ0ludCgxKSxObT1CaWdJbnQoMik7ZnVuY3Rpb24gTmModCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxBcnJheUJ1ZmZlci5pc1ZpZXcodCkmJnQuY29uc3RydWN0b3IubmFtZT09PSJVaW50OEFycmF5In1mdW5jdGlvbiBMYyh0KXtpZighTmModCkpdGhyb3cgbmV3IEVycm9yKCJVaW50OEFycmF5IGV4cGVjdGVkIil9ZnVuY3Rpb24gSm8odCxlKXtpZih0eXBlb2YgZSE9ImJvb2xlYW4iKXRocm93IG5ldyBFcnJvcih0KyIgYm9vbGVhbiBleHBlY3RlZCwgZ290ICIrZSl9Y29uc3QgTG09QXJyYXkuZnJvbSh7bGVuZ3RoOjI1Nn0sKHQsZSk9PmUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKSk7ZnVuY3Rpb24gRmModCl7TGModCk7bGV0IGU9IiI7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspZSs9TG1bdFtyXV07cmV0dXJuIGV9ZnVuY3Rpb24gS2YodCl7aWYodHlwZW9mIHQhPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiaGV4IHN0cmluZyBleHBlY3RlZCwgZ290ICIrdHlwZW9mIHQpO3JldHVybiB0PT09IiI/VWM6QmlnSW50KCIweCIrdCl9Y29uc3Qgc3I9e18wOjQ4LF85OjU3LEE6NjUsRjo3MCxhOjk3LGY6MTAyfTtmdW5jdGlvbiBRdSh0KXtpZih0Pj1zci5fMCYmdDw9c3IuXzkpcmV0dXJuIHQtc3IuXzA7aWYodD49c3IuQSYmdDw9c3IuRilyZXR1cm4gdC0oc3IuQS0xMCk7aWYodD49c3IuYSYmdDw9c3IuZilyZXR1cm4gdC0oc3IuYS0xMCl9ZnVuY3Rpb24gVmYodCl7aWYodHlwZW9mIHQhPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiaGV4IHN0cmluZyBleHBlY3RlZCwgZ290ICIrdHlwZW9mIHQpO2NvbnN0IGU9dC5sZW5ndGgscj1lLzI7aWYoZSUyKXRocm93IG5ldyBFcnJvcigiaGV4IHN0cmluZyBleHBlY3RlZCwgZ290IHVucGFkZGVkIGhleCBvZiBsZW5ndGggIitlKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHIpO2ZvcihsZXQgaT0wLHM9MDtpPHI7aSsrLHMrPTIpe2NvbnN0IG89UXUodC5jaGFyQ29kZUF0KHMpKSxhPVF1KHQuY2hhckNvZGVBdChzKzEpKTtpZihvPT09dm9pZCAwfHxhPT09dm9pZCAwKXtjb25zdCBjPXRbc10rdFtzKzFdO3Rocm93IG5ldyBFcnJvcignaGV4IHN0cmluZyBleHBlY3RlZCwgZ290IG5vbi1oZXggY2hhcmFjdGVyICInK2MrJyIgYXQgaW5kZXggJytzKX1uW2ldPW8qMTYrYX1yZXR1cm4gbn1mdW5jdGlvbiBGbSh0KXtyZXR1cm4gS2YoRmModCkpfWZ1bmN0aW9uIE1zKHQpe3JldHVybiBMYyh0KSxLZihGYyhVaW50OEFycmF5LmZyb20odCkucmV2ZXJzZSgpKSl9ZnVuY3Rpb24gV2YodCxlKXtyZXR1cm4gVmYodC50b1N0cmluZygxNikucGFkU3RhcnQoZSoyLCIwIikpfWZ1bmN0aW9uIFphKHQsZSl7cmV0dXJuIFdmKHQsZSkucmV2ZXJzZSgpfWZ1bmN0aW9uIG9yKHQsZSxyKXtsZXQgbjtpZih0eXBlb2YgZT09InN0cmluZyIpdHJ5e249VmYoZSl9Y2F0Y2gocyl7dGhyb3cgbmV3IEVycm9yKHQrIiBtdXN0IGJlIGhleCBzdHJpbmcgb3IgVWludDhBcnJheSwgY2F1c2U6ICIrcyl9ZWxzZSBpZihOYyhlKSluPVVpbnQ4QXJyYXkuZnJvbShlKTtlbHNlIHRocm93IG5ldyBFcnJvcih0KyIgbXVzdCBiZSBoZXggc3RyaW5nIG9yIFVpbnQ4QXJyYXkiKTtjb25zdCBpPW4ubGVuZ3RoO2lmKHR5cGVvZiByPT0ibnVtYmVyIiYmaSE9PXIpdGhyb3cgbmV3IEVycm9yKHQrIiBvZiBsZW5ndGggIityKyIgZXhwZWN0ZWQsIGdvdCAiK2kpO3JldHVybiBufWZ1bmN0aW9uIGVsKC4uLnQpe2xldCBlPTA7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IGk9dFtuXTtMYyhpKSxlKz1pLmxlbmd0aH1jb25zdCByPW5ldyBVaW50OEFycmF5KGUpO2ZvcihsZXQgbj0wLGk9MDtuPHQubGVuZ3RoO24rKyl7Y29uc3Qgcz10W25dO3Iuc2V0KHMsaSksaSs9cy5sZW5ndGh9cmV0dXJuIHJ9Y29uc3QgUW89dD0+dHlwZW9mIHQ9PSJiaWdpbnQiJiZVYzw9dDtmdW5jdGlvbiBrbSh0LGUscil7cmV0dXJuIFFvKHQpJiZRbyhlKSYmUW8ocikmJmU8PXQmJnQ8cn1mdW5jdGlvbiBiaSh0LGUscixuKXtpZigha20oZSxyLG4pKXRocm93IG5ldyBFcnJvcigiZXhwZWN0ZWQgdmFsaWQgIit0KyI6ICIrcisiIDw9IG4gPCAiK24rIiwgZ290ICIrZSl9ZnVuY3Rpb24gTW0odCl7bGV0IGU7Zm9yKGU9MDt0PlVjO3Q+Pj1IZixlKz0xKTtyZXR1cm4gZX1jb25zdCBxbT10PT4oTm08PEJpZ0ludCh0LTEpKS1IZixqbT17YmlnaW50OnQ9PnR5cGVvZiB0PT0iYmlnaW50IixmdW5jdGlvbjp0PT50eXBlb2YgdD09ImZ1bmN0aW9uIixib29sZWFuOnQ9PnR5cGVvZiB0PT0iYm9vbGVhbiIsc3RyaW5nOnQ9PnR5cGVvZiB0PT0ic3RyaW5nIixzdHJpbmdPclVpbnQ4QXJyYXk6dD0+dHlwZW9mIHQ9PSJzdHJpbmcifHxOYyh0KSxpc1NhZmVJbnRlZ2VyOnQ9Pk51bWJlci5pc1NhZmVJbnRlZ2VyKHQpLGFycmF5OnQ9PkFycmF5LmlzQXJyYXkodCksZmllbGQ6KHQsZSk9PmUuRnAuaXNWYWxpZCh0KSxoYXNoOnQ9PnR5cGVvZiB0PT0iZnVuY3Rpb24iJiZOdW1iZXIuaXNTYWZlSW50ZWdlcih0Lm91dHB1dExlbil9O2Z1bmN0aW9uIGtjKHQsZSxyPXt9KXtjb25zdCBuPShpLHMsbyk9Pntjb25zdCBhPWptW3NdO2lmKHR5cGVvZiBhIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCB2YWxpZGF0b3IgZnVuY3Rpb24iKTtjb25zdCBjPXRbaV07aWYoIShvJiZjPT09dm9pZCAwKSYmIWEoYyx0KSl0aHJvdyBuZXcgRXJyb3IoInBhcmFtICIrU3RyaW5nKGkpKyIgaXMgaW52YWxpZC4gRXhwZWN0ZWQgIitzKyIsIGdvdCAiK2MpfTtmb3IoY29uc3RbaSxzXW9mIE9iamVjdC5lbnRyaWVzKGUpKW4oaSxzLCExKTtmb3IoY29uc3RbaSxzXW9mIE9iamVjdC5lbnRyaWVzKHIpKW4oaSxzLCEwKTtyZXR1cm4gdH1mdW5jdGlvbiB0bCh0KXtjb25zdCBlPW5ldyBXZWFrTWFwO3JldHVybihyLC4uLm4pPT57Y29uc3QgaT1lLmdldChyKTtpZihpIT09dm9pZCAwKXJldHVybiBpO2NvbnN0IHM9dChyLC4uLm4pO3JldHVybiBlLnNldChyLHMpLHN9fWNvbnN0IENlPUJpZ0ludCgwKSx4ZT1CaWdJbnQoMSksZG49QmlnSW50KDIpLHptPUJpZ0ludCgzKSxYYT1CaWdJbnQoNCkscmw9QmlnSW50KDUpLG5sPUJpZ0ludCg4KTtmdW5jdGlvbiAkZSh0LGUpe2NvbnN0IHI9dCVlO3JldHVybiByPj1DZT9yOmUrcn1mdW5jdGlvbiBIbSh0LGUscil7aWYoZTxDZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZXhwb25lbnQsIG5lZ2F0aXZlcyB1bnN1cHBvcnRlZCIpO2lmKHI8PUNlKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBtb2R1bHVzIik7aWYocj09PXhlKXJldHVybiBDZTtsZXQgbj14ZTtmb3IoO2U+Q2U7KWUmeGUmJihuPW4qdCVyKSx0PXQqdCVyLGU+Pj14ZTtyZXR1cm4gbn1mdW5jdGlvbiBrdCh0LGUscil7bGV0IG49dDtmb3IoO2UtLSA+Q2U7KW4qPW4sbiU9cjtyZXR1cm4gbn1mdW5jdGlvbiBpbCh0LGUpe2lmKHQ9PT1DZSl0aHJvdyBuZXcgRXJyb3IoImludmVydDogZXhwZWN0ZWQgbm9uLXplcm8gbnVtYmVyIik7aWYoZTw9Q2UpdGhyb3cgbmV3IEVycm9yKCJpbnZlcnQ6IGV4cGVjdGVkIHBvc2l0aXZlIG1vZHVsdXMsIGdvdCAiK2UpO2xldCByPSRlKHQsZSksbj1lLGk9Q2Uscz14ZTtmb3IoO3IhPT1DZTspe2NvbnN0IG89bi9yLGE9biVyLGM9aS1zKm87bj1yLHI9YSxpPXMscz1jfWlmKG4hPT14ZSl0aHJvdyBuZXcgRXJyb3IoImludmVydDogZG9lcyBub3QgZXhpc3QiKTtyZXR1cm4gJGUoaSxlKX1mdW5jdGlvbiBLbSh0KXtjb25zdCBlPSh0LXhlKS9kbjtsZXQgcixuLGk7Zm9yKHI9dC14ZSxuPTA7ciVkbj09PUNlO3IvPWRuLG4rKyk7Zm9yKGk9ZG47aTx0JiZIbShpLGUsdCkhPT10LXhlO2krKylpZihpPjFlMyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNxdWFyZSByb290OiBsaWtlbHkgbm9uLXByaW1lIFAiKTtpZihuPT09MSl7Y29uc3Qgbz0odCt4ZSkvWGE7cmV0dXJuIGZ1bmN0aW9uKGEsYyl7Y29uc3QgdT1hLnBvdyhjLG8pO2lmKCFhLmVxbChhLnNxcih1KSxjKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNxdWFyZSByb290Iik7cmV0dXJuIHV9fWNvbnN0IHM9KHIreGUpL2RuO3JldHVybiBmdW5jdGlvbihvLGEpe2lmKG8ucG93KGEsZSk9PT1vLm5lZyhvLk9ORSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCIpO2xldCBjPW4sdT1vLnBvdyhvLm11bChvLk9ORSxpKSxyKSxsPW8ucG93KGEscyksaD1vLnBvdyhhLHIpO2Zvcig7IW8uZXFsKGgsby5PTkUpOyl7aWYoby5lcWwoaCxvLlpFUk8pKXJldHVybiBvLlpFUk87bGV0IHA9MTtmb3IobGV0IHc9by5zcXIoaCk7cDxjJiYhby5lcWwodyxvLk9ORSk7cCsrKXc9by5zcXIodyk7Y29uc3QgZz1vLnBvdyh1LHhlPDxCaWdJbnQoYy1wLTEpKTt1PW8uc3FyKGcpLGw9by5tdWwobCxnKSxoPW8ubXVsKGgsdSksYz1wfXJldHVybiBsfX1mdW5jdGlvbiBWbSh0KXtpZih0JVhhPT09em0pe2NvbnN0IGU9KHQreGUpL1hhO3JldHVybiBmdW5jdGlvbihyLG4pe2NvbnN0IGk9ci5wb3cobixlKTtpZighci5lcWwoci5zcXIoaSksbikpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCIpO3JldHVybiBpfX1pZih0JW5sPT09cmwpe2NvbnN0IGU9KHQtcmwpL25sO3JldHVybiBmdW5jdGlvbihyLG4pe2NvbnN0IGk9ci5tdWwobixkbikscz1yLnBvdyhpLGUpLG89ci5tdWwobixzKSxhPXIubXVsKHIubXVsKG8sZG4pLHMpLGM9ci5tdWwobyxyLnN1YihhLHIuT05FKSk7aWYoIXIuZXFsKHIuc3FyKGMpLG4pKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc3F1YXJlIHJvb3QiKTtyZXR1cm4gY319cmV0dXJuIEttKHQpfWNvbnN0IFdtPSh0LGUpPT4oJGUodCxlKSZ4ZSk9PT14ZSxHbT1bImNyZWF0ZSIsImlzVmFsaWQiLCJpczAiLCJuZWciLCJpbnYiLCJzcXJ0Iiwic3FyIiwiZXFsIiwiYWRkIiwic3ViIiwibXVsIiwicG93IiwiZGl2IiwiYWRkTiIsInN1Yk4iLCJtdWxOIiwic3FyTiJdO2Z1bmN0aW9uIFltKHQpe2NvbnN0IGU9e09SREVSOiJiaWdpbnQiLE1BU0s6ImJpZ2ludCIsQllURVM6ImlzU2FmZUludGVnZXIiLEJJVFM6ImlzU2FmZUludGVnZXIifSxyPUdtLnJlZHVjZSgobixpKT0+KG5baV09ImZ1bmN0aW9uIixuKSxlKTtyZXR1cm4ga2ModCxyKX1mdW5jdGlvbiBabSh0LGUscil7aWYocjxDZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZXhwb25lbnQsIG5lZ2F0aXZlcyB1bnN1cHBvcnRlZCIpO2lmKHI9PT1DZSlyZXR1cm4gdC5PTkU7aWYocj09PXhlKXJldHVybiBlO2xldCBuPXQuT05FLGk9ZTtmb3IoO3I+Q2U7KXImeGUmJihuPXQubXVsKG4saSkpLGk9dC5zcXIoaSkscj4+PXhlO3JldHVybiBufWZ1bmN0aW9uIFhtKHQsZSl7Y29uc3Qgcj1uZXcgQXJyYXkoZS5sZW5ndGgpLG49ZS5yZWR1Y2UoKHMsbyxhKT0+dC5pczAobyk/czooclthXT1zLHQubXVsKHMsbykpLHQuT05FKSxpPXQuaW52KG4pO3JldHVybiBlLnJlZHVjZVJpZ2h0KChzLG8sYSk9PnQuaXMwKG8pP3M6KHJbYV09dC5tdWwocyxyW2FdKSx0Lm11bChzLG8pKSxpKSxyfWZ1bmN0aW9uIEdmKHQsZSl7Y29uc3Qgcj1lIT09dm9pZCAwP2U6dC50b1N0cmluZygyKS5sZW5ndGgsbj1NYXRoLmNlaWwoci84KTtyZXR1cm57bkJpdExlbmd0aDpyLG5CeXRlTGVuZ3RoOm59fWZ1bmN0aW9uIFlmKHQsZSxyPSExLG49e30pe2lmKHQ8PUNlKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmaWVsZDogZXhwZWN0ZWQgT1JERVIgPiAwLCBnb3QgIit0KTtjb25zdHtuQml0TGVuZ3RoOmksbkJ5dGVMZW5ndGg6c309R2YodCxlKTtpZihzPjIwNDgpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZpZWxkOiBleHBlY3RlZCBPUkRFUiBvZiA8PSAyMDQ4IGJ5dGVzIik7bGV0IG87Y29uc3QgYT1PYmplY3QuZnJlZXplKHtPUkRFUjp0LGlzTEU6cixCSVRTOmksQllURVM6cyxNQVNLOnFtKGkpLFpFUk86Q2UsT05FOnhlLGNyZWF0ZTpjPT4kZShjLHQpLGlzVmFsaWQ6Yz0+e2lmKHR5cGVvZiBjIT0iYmlnaW50Iil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZmllbGQgZWxlbWVudDogZXhwZWN0ZWQgYmlnaW50LCBnb3QgIit0eXBlb2YgYyk7cmV0dXJuIENlPD1jJiZjPHR9LGlzMDpjPT5jPT09Q2UsaXNPZGQ6Yz0+KGMmeGUpPT09eGUsbmVnOmM9PiRlKC1jLHQpLGVxbDooYyx1KT0+Yz09PXUsc3FyOmM9PiRlKGMqYyx0KSxhZGQ6KGMsdSk9PiRlKGMrdSx0KSxzdWI6KGMsdSk9PiRlKGMtdSx0KSxtdWw6KGMsdSk9PiRlKGMqdSx0KSxwb3c6KGMsdSk9PlptKGEsYyx1KSxkaXY6KGMsdSk9PiRlKGMqaWwodSx0KSx0KSxzcXJOOmM9PmMqYyxhZGROOihjLHUpPT5jK3Usc3ViTjooYyx1KT0+Yy11LG11bE46KGMsdSk9PmMqdSxpbnY6Yz0+aWwoYyx0KSxzcXJ0Om4uc3FydHx8KGM9PihvfHwobz1WbSh0KSksbyhhLGMpKSksaW52ZXJ0QmF0Y2g6Yz0+WG0oYSxjKSxjbW92OihjLHUsbCk9Pmw/dTpjLHRvQnl0ZXM6Yz0+cj9aYShjLHMpOldmKGMscyksZnJvbUJ5dGVzOmM9PntpZihjLmxlbmd0aCE9PXMpdGhyb3cgbmV3IEVycm9yKCJGaWVsZC5mcm9tQnl0ZXM6IGV4cGVjdGVkICIrcysiIGJ5dGVzLCBnb3QgIitjLmxlbmd0aCk7cmV0dXJuIHI/TXMoYyk6Rm0oYyl9fSk7cmV0dXJuIE9iamVjdC5mcmVlemUoYSl9Y29uc3Qgc2w9QmlnSW50KDApLHlzPUJpZ0ludCgxKTtmdW5jdGlvbiBlYSh0LGUpe2NvbnN0IHI9ZS5uZWdhdGUoKTtyZXR1cm4gdD9yOmV9ZnVuY3Rpb24gWmYodCxlKXtpZighTnVtYmVyLmlzU2FmZUludGVnZXIodCl8fHQ8PTB8fHQ+ZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgd2luZG93IHNpemUsIGV4cGVjdGVkIFsxLi4iK2UrIl0sIGdvdCBXPSIrdCl9ZnVuY3Rpb24gdGEodCxlKXtaZih0LGUpO2NvbnN0IHI9TWF0aC5jZWlsKGUvdCkrMSxuPTIqKih0LTEpO3JldHVybnt3aW5kb3dzOnIsd2luZG93U2l6ZTpufX1mdW5jdGlvbiBKbSh0LGUpe2lmKCFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBFcnJvcigiYXJyYXkgZXhwZWN0ZWQiKTt0LmZvckVhY2goKHIsbik9PntpZighKHIgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQgYXQgaW5kZXggIituKX0pfWZ1bmN0aW9uIFFtKHQsZSl7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IEVycm9yKCJhcnJheSBvZiBzY2FsYXJzIGV4cGVjdGVkIik7dC5mb3JFYWNoKChyLG4pPT57aWYoIWUuaXNWYWxpZChyKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2NhbGFyIGF0IGluZGV4ICIrbil9KX1jb25zdCByYT1uZXcgV2Vha01hcCxYZj1uZXcgV2Vha01hcDtmdW5jdGlvbiBuYSh0KXtyZXR1cm4gWGYuZ2V0KHQpfHwxfWZ1bmN0aW9uIGViKHQsZSl7cmV0dXJue2NvbnN0VGltZU5lZ2F0ZTplYSxoYXNQcmVjb21wdXRlcyhyKXtyZXR1cm4gbmEocikhPT0xfSx1bnNhZmVMYWRkZXIocixuLGk9dC5aRVJPKXtsZXQgcz1yO2Zvcig7bj5zbDspbiZ5cyYmKGk9aS5hZGQocykpLHM9cy5kb3VibGUoKSxuPj49eXM7cmV0dXJuIGl9LHByZWNvbXB1dGVXaW5kb3cocixuKXtjb25zdHt3aW5kb3dzOmksd2luZG93U2l6ZTpzfT10YShuLGUpLG89W107bGV0IGE9cixjPWE7Zm9yKGxldCB1PTA7dTxpO3UrKyl7Yz1hLG8ucHVzaChjKTtmb3IobGV0IGw9MTtsPHM7bCsrKWM9Yy5hZGQoYSksby5wdXNoKGMpO2E9Yy5kb3VibGUoKX1yZXR1cm4gb30sd05BRihyLG4saSl7Y29uc3R7d2luZG93czpzLHdpbmRvd1NpemU6b309dGEocixlKTtsZXQgYT10LlpFUk8sYz10LkJBU0U7Y29uc3QgdT1CaWdJbnQoMioqci0xKSxsPTIqKnIsaD1CaWdJbnQocik7Zm9yKGxldCBwPTA7cDxzO3ArKyl7Y29uc3QgZz1wKm87bGV0IHc9TnVtYmVyKGkmdSk7aT4+PWgsdz5vJiYody09bCxpKz15cyk7Y29uc3QgYj1nLHY9ZytNYXRoLmFicyh3KS0xLE89cCUyIT09MCxGPXc8MDt3PT09MD9jPWMuYWRkKGVhKE8sbltiXSkpOmE9YS5hZGQoZWEoRixuW3ZdKSl9cmV0dXJue3A6YSxmOmN9fSx3TkFGVW5zYWZlKHIsbixpLHM9dC5aRVJPKXtjb25zdHt3aW5kb3dzOm8sd2luZG93U2l6ZTphfT10YShyLGUpLGM9QmlnSW50KDIqKnItMSksdT0yKipyLGw9QmlnSW50KHIpO2ZvcihsZXQgaD0wO2g8bztoKyspe2NvbnN0IHA9aCphO2lmKGk9PT1zbClicmVhaztsZXQgZz1OdW1iZXIoaSZjKTtpZihpPj49bCxnPmEmJihnLT11LGkrPXlzKSxnPT09MCljb250aW51ZTtsZXQgdz1uW3ArTWF0aC5hYnMoZyktMV07ZzwwJiYodz13Lm5lZ2F0ZSgpKSxzPXMuYWRkKHcpfXJldHVybiBzfSxnZXRQcmVjb21wdXRlcyhyLG4saSl7bGV0IHM9cmEuZ2V0KG4pO3JldHVybiBzfHwocz10aGlzLnByZWNvbXB1dGVXaW5kb3cobixyKSxyIT09MSYmcmEuc2V0KG4saShzKSkpLHN9LHdOQUZDYWNoZWQocixuLGkpe2NvbnN0IHM9bmEocik7cmV0dXJuIHRoaXMud05BRihzLHRoaXMuZ2V0UHJlY29tcHV0ZXMocyxyLGkpLG4pfSx3TkFGQ2FjaGVkVW5zYWZlKHIsbixpLHMpe2NvbnN0IG89bmEocik7cmV0dXJuIG89PT0xP3RoaXMudW5zYWZlTGFkZGVyKHIsbixzKTp0aGlzLndOQUZVbnNhZmUobyx0aGlzLmdldFByZWNvbXB1dGVzKG8scixpKSxuLHMpfSxzZXRXaW5kb3dTaXplKHIsbil7WmYobixlKSxYZi5zZXQocixuKSxyYS5kZWxldGUocil9fX1mdW5jdGlvbiB0Yih0LGUscixuKXtpZihKbShyLHQpLFFtKG4sZSksci5sZW5ndGghPT1uLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImFycmF5cyBvZiBwb2ludHMgYW5kIHNjYWxhcnMgbXVzdCBoYXZlIGVxdWFsIGxlbmd0aCIpO2NvbnN0IGk9dC5aRVJPLHM9TW0oQmlnSW50KHIubGVuZ3RoKSksbz1zPjEyP3MtMzpzPjQ/cy0yOnM/MjoxLGE9KDE8PG8pLTEsYz1uZXcgQXJyYXkoYSsxKS5maWxsKGkpLHU9TWF0aC5mbG9vcigoZS5CSVRTLTEpL28pKm87bGV0IGw9aTtmb3IobGV0IGg9dTtoPj0wO2gtPW8pe2MuZmlsbChpKTtmb3IobGV0IGc9MDtnPG4ubGVuZ3RoO2crKyl7Y29uc3Qgdz1uW2ddLGI9TnVtYmVyKHc+PkJpZ0ludChoKSZCaWdJbnQoYSkpO2NbYl09Y1tiXS5hZGQocltnXSl9bGV0IHA9aTtmb3IobGV0IGc9Yy5sZW5ndGgtMSx3PWk7Zz4wO2ctLSl3PXcuYWRkKGNbZ10pLHA9cC5hZGQodyk7aWYobD1sLmFkZChwKSxoIT09MClmb3IobGV0IGc9MDtnPG87ZysrKWw9bC5kb3VibGUoKX1yZXR1cm4gbH1mdW5jdGlvbiByYih0KXtyZXR1cm4gWW0odC5GcCksa2ModCx7bjoiYmlnaW50IixoOiJiaWdpbnQiLEd4OiJmaWVsZCIsR3k6ImZpZWxkIn0se25CaXRMZW5ndGg6ImlzU2FmZUludGVnZXIiLG5CeXRlTGVuZ3RoOiJpc1NhZmVJbnRlZ2VyIn0pLE9iamVjdC5mcmVlemUoey4uLkdmKHQubix0Lm5CaXRMZW5ndGgpLC4uLnQscDp0LkZwLk9SREVSfSl9Y29uc3QgRHQ9QmlnSW50KDApLHR0PUJpZ0ludCgxKSx3cz1CaWdJbnQoMiksbmI9QmlnSW50KDgpLGliPXt6aXAyMTU6ITB9O2Z1bmN0aW9uIHNiKHQpe2NvbnN0IGU9cmIodCk7cmV0dXJuIGtjKHQse2hhc2g6ImZ1bmN0aW9uIixhOiJiaWdpbnQiLGQ6ImJpZ2ludCIscmFuZG9tQnl0ZXM6ImZ1bmN0aW9uIn0se2FkanVzdFNjYWxhckJ5dGVzOiJmdW5jdGlvbiIsZG9tYWluOiJmdW5jdGlvbiIsdXZSYXRpbzoiZnVuY3Rpb24iLG1hcFRvQ3VydmU6ImZ1bmN0aW9uIn0pLE9iamVjdC5mcmVlemUoey4uLmV9KX1mdW5jdGlvbiBvYih0KXtjb25zdCBlPXNiKHQpLHtGcDpyLG4scHJlaGFzaDppLGhhc2g6cyxyYW5kb21CeXRlczpvLG5CeXRlTGVuZ3RoOmEsaDpjfT1lLHU9d3M8PEJpZ0ludChhKjgpLXR0LGw9ci5jcmVhdGUsaD1ZZihlLm4sZS5uQml0TGVuZ3RoKSxwPWUudXZSYXRpb3x8KCh5LG0pPT57dHJ5e3JldHVybntpc1ZhbGlkOiEwLHZhbHVlOnIuc3FydCh5KnIuaW52KG0pKX19Y2F0Y2h7cmV0dXJue2lzVmFsaWQ6ITEsdmFsdWU6RHR9fX0pLGc9ZS5hZGp1c3RTY2FsYXJCeXRlc3x8KHk9PnkpLHc9ZS5kb21haW58fCgoeSxtLEkpPT57aWYoSm8oInBoZmxhZyIsSSksbS5sZW5ndGh8fEkpdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0cy9wcmUtaGFzaCBhcmUgbm90IHN1cHBvcnRlZCIpO3JldHVybiB5fSk7ZnVuY3Rpb24gYih5LG0pe2JpKCJjb29yZGluYXRlICIreSxtLER0LHUpfWZ1bmN0aW9uIHYoeSl7aWYoISh5IGluc3RhbmNlb2YgXykpdGhyb3cgbmV3IEVycm9yKCJFeHRlbmRlZFBvaW50IGV4cGVjdGVkIil9Y29uc3QgTz10bCgoeSxtKT0+e2NvbnN0e2V4OkksZXk6QSxlejpTfT15LCQ9eS5pczAoKTttPT1udWxsJiYobT0kP25iOnIuaW52KFMpKTtjb25zdCBrPWwoSSptKSxLPWwoQSptKSxaPWwoUyptKTtpZigkKXJldHVybnt4OkR0LHk6dHR9O2lmKFohPT10dCl0aHJvdyBuZXcgRXJyb3IoImludlogd2FzIGludmFsaWQiKTtyZXR1cm57eDprLHk6S319KSxGPXRsKHk9Pntjb25zdHthOm0sZDpJfT1lO2lmKHkuaXMwKCkpdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9pbnQ6IFpFUk8iKTtjb25zdHtleDpBLGV5OlMsZXo6JCxldDprfT15LEs9bChBKkEpLFo9bChTKlMpLFY9bCgkKiQpLFc9bChWKlYpLEo9bChLKm0pLGVlPWwoVipsKEorWikpLHJlPWwoVytsKEkqbChLKlopKSk7aWYoZWUhPT1yZSl0aHJvdyBuZXcgRXJyb3IoImJhZCBwb2ludDogZXF1YXRpb24gbGVmdCAhPSByaWdodCAoMSkiKTtjb25zdCBRPWwoQSpTKSxpZT1sKCQqayk7aWYoUSE9PWllKXRocm93IG5ldyBFcnJvcigiYmFkIHBvaW50OiBlcXVhdGlvbiBsZWZ0ICE9IHJpZ2h0ICgyKSIpO3JldHVybiEwfSk7Y2xhc3MgX3tjb25zdHJ1Y3RvcihtLEksQSxTKXt0aGlzLmV4PW0sdGhpcy5leT1JLHRoaXMuZXo9QSx0aGlzLmV0PVMsYigieCIsbSksYigieSIsSSksYigieiIsQSksYigidCIsUyksT2JqZWN0LmZyZWV6ZSh0aGlzKX1nZXQgeCgpe3JldHVybiB0aGlzLnRvQWZmaW5lKCkueH1nZXQgeSgpe3JldHVybiB0aGlzLnRvQWZmaW5lKCkueX1zdGF0aWMgZnJvbUFmZmluZShtKXtpZihtIGluc3RhbmNlb2YgXyl0aHJvdyBuZXcgRXJyb3IoImV4dGVuZGVkIHBvaW50IG5vdCBhbGxvd2VkIik7Y29uc3R7eDpJLHk6QX09bXx8e307cmV0dXJuIGIoIngiLEkpLGIoInkiLEEpLG5ldyBfKEksQSx0dCxsKEkqQSkpfXN0YXRpYyBub3JtYWxpemVaKG0pe2NvbnN0IEk9ci5pbnZlcnRCYXRjaChtLm1hcChBPT5BLmV6KSk7cmV0dXJuIG0ubWFwKChBLFMpPT5BLnRvQWZmaW5lKElbU10pKS5tYXAoXy5mcm9tQWZmaW5lKX1zdGF0aWMgbXNtKG0sSSl7cmV0dXJuIHRiKF8saCxtLEkpfV9zZXRXaW5kb3dTaXplKG0pe2ouc2V0V2luZG93U2l6ZSh0aGlzLG0pfWFzc2VydFZhbGlkaXR5KCl7Rih0aGlzKX1lcXVhbHMobSl7dihtKTtjb25zdHtleDpJLGV5OkEsZXo6U309dGhpcyx7ZXg6JCxleTprLGV6Okt9PW0sWj1sKEkqSyksVj1sKCQqUyksVz1sKEEqSyksSj1sKGsqUyk7cmV0dXJuIFo9PT1WJiZXPT09Sn1pczAoKXtyZXR1cm4gdGhpcy5lcXVhbHMoXy5aRVJPKX1uZWdhdGUoKXtyZXR1cm4gbmV3IF8obCgtdGhpcy5leCksdGhpcy5leSx0aGlzLmV6LGwoLXRoaXMuZXQpKX1kb3VibGUoKXtjb25zdHthOm19PWUse2V4OkksZXk6QSxlejpTfT10aGlzLCQ9bChJKkkpLGs9bChBKkEpLEs9bCh3cypsKFMqUykpLFo9bChtKiQpLFY9SStBLFc9bChsKFYqViktJC1rKSxKPVorayxlZT1KLUsscmU9Wi1rLFE9bChXKmVlKSxpZT1sKEoqcmUpLGZlPWwoVypyZSksSWU9bChlZSpKKTtyZXR1cm4gbmV3IF8oUSxpZSxJZSxmZSl9YWRkKG0pe3YobSk7Y29uc3R7YTpJLGQ6QX09ZSx7ZXg6UyxleTokLGV6OmssZXQ6S309dGhpcyx7ZXg6WixleTpWLGV6OlcsZXQ6Sn09bTtpZihJPT09QmlnSW50KC0xKSl7Y29uc3QgdXM9bCgoJC1TKSooVitaKSksTG49bCgoJCtTKSooVi1aKSksZ2k9bChMbi11cyk7aWYoZ2k9PT1EdClyZXR1cm4gdGhpcy5kb3VibGUoKTtjb25zdCBscz1sKGsqd3MqSikseWk9bChLKndzKlcpLG5uPXlpK2xzLGx0PUxuK3VzLEZuPXlpLWxzLHFvPWwobm4qZ2kpLEZ0PWwobHQqRm4pLGpvPWwobm4qRm4pLEU9bChnaSpsdCk7cmV0dXJuIG5ldyBfKHFvLEZ0LEUsam8pfWNvbnN0IGVlPWwoUypaKSxyZT1sKCQqViksUT1sKEsqQSpKKSxpZT1sKGsqVyksZmU9bCgoUyskKSooWitWKS1lZS1yZSksSWU9aWUtUSxEZT1pZStRLHV0PWwocmUtSSplZSksZXQ9bChmZSpJZSksQXQ9bChEZSp1dCkscm49bChmZSp1dCksTW89bChJZSpEZSk7cmV0dXJuIG5ldyBfKGV0LEF0LE1vLHJuKX1zdWJ0cmFjdChtKXtyZXR1cm4gdGhpcy5hZGQobS5uZWdhdGUoKSl9d05BRihtKXtyZXR1cm4gai53TkFGQ2FjaGVkKHRoaXMsbSxfLm5vcm1hbGl6ZVopfW11bHRpcGx5KG0pe2NvbnN0IEk9bTtiaSgic2NhbGFyIixJLHR0LG4pO2NvbnN0e3A6QSxmOlN9PXRoaXMud05BRihJKTtyZXR1cm4gXy5ub3JtYWxpemVaKFtBLFNdKVswXX1tdWx0aXBseVVuc2FmZShtLEk9Xy5aRVJPKXtjb25zdCBBPW07cmV0dXJuIGJpKCJzY2FsYXIiLEEsRHQsbiksQT09PUR0P0M6dGhpcy5pczAoKXx8QT09PXR0P3RoaXM6ai53TkFGQ2FjaGVkVW5zYWZlKHRoaXMsQSxfLm5vcm1hbGl6ZVosSSl9aXNTbWFsbE9yZGVyKCl7cmV0dXJuIHRoaXMubXVsdGlwbHlVbnNhZmUoYykuaXMwKCl9aXNUb3JzaW9uRnJlZSgpe3JldHVybiBqLnVuc2FmZUxhZGRlcih0aGlzLG4pLmlzMCgpfXRvQWZmaW5lKG0pe3JldHVybiBPKHRoaXMsbSl9Y2xlYXJDb2ZhY3Rvcigpe2NvbnN0e2g6bX09ZTtyZXR1cm4gbT09PXR0P3RoaXM6dGhpcy5tdWx0aXBseVVuc2FmZShtKX1zdGF0aWMgZnJvbUhleChtLEk9ITEpe2NvbnN0e2Q6QSxhOlN9PWUsJD1yLkJZVEVTO209b3IoInBvaW50SGV4IixtLCQpLEpvKCJ6aXAyMTUiLEkpO2NvbnN0IGs9bS5zbGljZSgpLEs9bVskLTFdO2tbJC0xXT1LJi0xMjk7Y29uc3QgWj1NcyhrKSxWPUk/dTpyLk9SREVSO2JpKCJwb2ludEhleC55IixaLER0LFYpO2NvbnN0IFc9bChaKlopLEo9bChXLXR0KSxlZT1sKEEqVy1TKTtsZXR7aXNWYWxpZDpyZSx2YWx1ZTpRfT1wKEosZWUpO2lmKCFyZSl0aHJvdyBuZXcgRXJyb3IoIlBvaW50LmZyb21IZXg6IGludmFsaWQgeSBjb29yZGluYXRlIik7Y29uc3QgaWU9KFEmdHQpPT09dHQsZmU9KEsmMTI4KSE9PTA7aWYoIUkmJlE9PT1EdCYmZmUpdGhyb3cgbmV3IEVycm9yKCJQb2ludC5mcm9tSGV4OiB4PTAgYW5kIHhfMD0xIik7cmV0dXJuIGZlIT09aWUmJihRPWwoLVEpKSxfLmZyb21BZmZpbmUoe3g6USx5Olp9KX1zdGF0aWMgZnJvbVByaXZhdGVLZXkobSl7cmV0dXJuIFQobSkucG9pbnR9dG9SYXdCeXRlcygpe2NvbnN0e3g6bSx5Okl9PXRoaXMudG9BZmZpbmUoKSxBPVphKEksci5CWVRFUyk7cmV0dXJuIEFbQS5sZW5ndGgtMV18PW0mdHQ/MTI4OjAsQX10b0hleCgpe3JldHVybiBGYyh0aGlzLnRvUmF3Qnl0ZXMoKSl9fV8uQkFTRT1uZXcgXyhlLkd4LGUuR3ksdHQsbChlLkd4KmUuR3kpKSxfLlpFUk89bmV3IF8oRHQsdHQsdHQsRHQpO2NvbnN0e0JBU0U6UCxaRVJPOkN9PV8saj1lYihfLGEqOCk7ZnVuY3Rpb24gcSh5KXtyZXR1cm4gJGUoeSxuKX1mdW5jdGlvbiBNKHkpe3JldHVybiBxKE1zKHkpKX1mdW5jdGlvbiBUKHkpe2NvbnN0IG09ci5CWVRFUzt5PW9yKCJwcml2YXRlIGtleSIseSxtKTtjb25zdCBJPW9yKCJoYXNoZWQgcHJpdmF0ZSBrZXkiLHMoeSksMiptKSxBPWcoSS5zbGljZSgwLG0pKSxTPUkuc2xpY2UobSwyKm0pLCQ9TShBKSxrPVAubXVsdGlwbHkoJCksSz1rLnRvUmF3Qnl0ZXMoKTtyZXR1cm57aGVhZDpBLHByZWZpeDpTLHNjYWxhcjokLHBvaW50OmsscG9pbnRCeXRlczpLfX1mdW5jdGlvbiB6KHkpe3JldHVybiBUKHkpLnBvaW50Qnl0ZXN9ZnVuY3Rpb24gVSh5PW5ldyBVaW50OEFycmF5LC4uLm0pe2NvbnN0IEk9ZWwoLi4ubSk7cmV0dXJuIE0ocyh3KEksb3IoImNvbnRleHQiLHkpLCEhaSkpKX1mdW5jdGlvbiBOKHksbSxJPXt9KXt5PW9yKCJtZXNzYWdlIix5KSxpJiYoeT1pKHkpKTtjb25zdHtwcmVmaXg6QSxzY2FsYXI6Uyxwb2ludEJ5dGVzOiR9PVQobSksaz1VKEkuY29udGV4dCxBLHkpLEs9UC5tdWx0aXBseShrKS50b1Jhd0J5dGVzKCksWj1VKEkuY29udGV4dCxLLCQseSksVj1xKGsrWipTKTtiaSgic2lnbmF0dXJlLnMiLFYsRHQsbik7Y29uc3QgVz1lbChLLFphKFYsci5CWVRFUykpO3JldHVybiBvcigicmVzdWx0IixXLHIuQllURVMqMil9Y29uc3QgRD1pYjtmdW5jdGlvbiBSKHksbSxJLEE9RCl7Y29uc3R7Y29udGV4dDpTLHppcDIxNTokfT1BLGs9ci5CWVRFUzt5PW9yKCJzaWduYXR1cmUiLHksMiprKSxtPW9yKCJtZXNzYWdlIixtKSxJPW9yKCJwdWJsaWNLZXkiLEksayksJCE9PXZvaWQgMCYmSm8oInppcDIxNSIsJCksaSYmKG09aShtKSk7Y29uc3QgSz1Ncyh5LnNsaWNlKGssMiprKSk7bGV0IFosVixXO3RyeXtaPV8uZnJvbUhleChJLCQpLFY9Xy5mcm9tSGV4KHkuc2xpY2UoMCxrKSwkKSxXPVAubXVsdGlwbHlVbnNhZmUoSyl9Y2F0Y2h7cmV0dXJuITF9aWYoISQmJlouaXNTbWFsbE9yZGVyKCkpcmV0dXJuITE7Y29uc3QgSj1VKFMsVi50b1Jhd0J5dGVzKCksWi50b1Jhd0J5dGVzKCksbSk7cmV0dXJuIFYuYWRkKFoubXVsdGlwbHlVbnNhZmUoSikpLnN1YnRyYWN0KFcpLmNsZWFyQ29mYWN0b3IoKS5lcXVhbHMoXy5aRVJPKX1yZXR1cm4gUC5fc2V0V2luZG93U2l6ZSg4KSx7Q1VSVkU6ZSxnZXRQdWJsaWNLZXk6eixzaWduOk4sdmVyaWZ5OlIsRXh0ZW5kZWRQb2ludDpfLHV0aWxzOntnZXRFeHRlbmRlZFB1YmxpY0tleTpULHJhbmRvbVByaXZhdGVLZXk6KCk9Pm8oci5CWVRFUykscHJlY29tcHV0ZSh5PTgsbT1fLkJBU0Upe3JldHVybiBtLl9zZXRXaW5kb3dTaXplKHkpLG0ubXVsdGlwbHkoQmlnSW50KDMpKSxtfX19fUJpZ0ludCgwKSxCaWdJbnQoMSk7Y29uc3QgTWM9QmlnSW50KCI1Nzg5NjA0NDYxODY1ODA5NzcxMTc4NTQ5MjUwNDM0Mzk1MzkyNjYzNDk5MjMzMjgyMDI4MjAxOTcyODc5MjAwMzk1NjU2NDgxOTk0OSIpLG9sPUJpZ0ludCgiMTk2ODExNjEzNzY3MDc1MDU5NTY4MDcwNzkzMDQ5ODg1NDIwMTU0NDYwNjY1MTU5MjM4OTAxNjI3NDQwMjEwNzMxMjM4Mjk3ODQ3NTIiKTtCaWdJbnQoMCk7Y29uc3QgYWI9QmlnSW50KDEpLGFsPUJpZ0ludCgyKTtCaWdJbnQoMyk7Y29uc3QgY2I9QmlnSW50KDUpLHViPUJpZ0ludCg4KTtmdW5jdGlvbiBsYih0KXtjb25zdCBlPUJpZ0ludCgxMCkscj1CaWdJbnQoMjApLG49QmlnSW50KDQwKSxpPUJpZ0ludCg4MCkscz1NYyxvPXQqdCVzKnQlcyxhPWt0KG8sYWwscykqbyVzLGM9a3QoYSxhYixzKSp0JXMsdT1rdChjLGNiLHMpKmMlcyxsPWt0KHUsZSxzKSp1JXMsaD1rdChsLHIscykqbCVzLHA9a3QoaCxuLHMpKmglcyxnPWt0KHAsaSxzKSpwJXMsdz1rdChnLGkscykqcCVzLGI9a3QodyxlLHMpKnUlcztyZXR1cm57cG93X3BfNV84Omt0KGIsYWwscykqdCVzLGIyOm99fWZ1bmN0aW9uIGhiKHQpe3JldHVybiB0WzBdJj0yNDgsdFszMV0mPTEyNyx0WzMxXXw9NjQsdH1mdW5jdGlvbiBmYih0LGUpe2NvbnN0IHI9TWMsbj0kZShlKmUqZSxyKSxpPSRlKG4qbiplLHIpLHM9bGIodCppKS5wb3dfcF81Xzg7bGV0IG89JGUodCpuKnMscik7Y29uc3QgYT0kZShlKm8qbyxyKSxjPW8sdT0kZShvKm9sLHIpLGw9YT09PXQsaD1hPT09JGUoLXQscikscD1hPT09JGUoLXQqb2wscik7cmV0dXJuIGwmJihvPWMpLChofHxwKSYmKG89dSksV20obyxyKSYmKG89JGUoLW8scikpLHtpc1ZhbGlkOmx8fGgsdmFsdWU6b319Y29uc3QgZGI9WWYoTWMsdm9pZCAwLCEwKSxwYj17YTpCaWdJbnQoLTEpLGQ6QmlnSW50KCIzNzA5NTcwNTkzNDY2OTQzOTM0MzEzODA4MzUwODc1NDU2NTE4OTU0MjExMzg3OTg0MzIxOTAxNjM4ODc4NTUzMzA4NTk0MDI4MzU1NSIpLEZwOmRiLG46QmlnSW50KCI3MjM3MDA1NTc3MzMyMjYyMjEzOTczMTg2NTYzMDQyOTk0MjQwODU3MTE2MzU5Mzc5OTA3NjA2MDAxOTUwOTM4Mjg1NDU0MjUwOTg5IiksaDp1YixHeDpCaWdJbnQoIjE1MTEyMjIxMzQ5NTM1NDAwNzcyNTAxMTUxNDA5NTg4NTMxNTExNDU0MDEyNjkzMDQxODU3MjA2MDQ2MTEzMjgzOTQ5ODQ3NzYyMjAyIiksR3k6QmlnSW50KCI0NjMxNjgzNTY5NDkyNjQ3ODE2OTQyODM5NDAwMzQ3NTE2MzE0MTMwNzk5Mzg2NjI1NjIyNTYxNTc4MzAzMzYwMzE2NTI1MTg1NTk2MCIpLGhhc2g6VW0scmFuZG9tQnl0ZXM6amYsYWRqdXN0U2NhbGFyQnl0ZXM6aGIsdXZSYXRpbzpmYn0sSmY9b2IocGIpLGdiPSJFZERTQSIseWI9IkpXVCIsVnM9Ii4iLEVvPSJiYXNlNjR1cmwiLFFmPSJ1dGY4IixlZD0idXRmOCIsd2I9IjoiLG1iPSJkaWQiLGJiPSJrZXkiLGNsPSJiYXNlNThidGMiLEViPSJ6Iix2Yj0iSzM2Iix4Yj0zMjtmdW5jdGlvbiBxYyh0KXtyZXR1cm4gZ2xvYmFsVGhpcy5CdWZmZXIhPW51bGw/bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIsdC5ieXRlT2Zmc2V0LHQuYnl0ZUxlbmd0aCk6dH1mdW5jdGlvbiB0ZCh0PTApe3JldHVybiBnbG9iYWxUaGlzLkJ1ZmZlciE9bnVsbCYmZ2xvYmFsVGhpcy5CdWZmZXIuYWxsb2NVbnNhZmUhPW51bGw/cWMoZ2xvYmFsVGhpcy5CdWZmZXIuYWxsb2NVbnNhZmUodCkpOm5ldyBVaW50OEFycmF5KHQpfWZ1bmN0aW9uIHJkKHQsZSl7ZXx8KGU9dC5yZWR1Y2UoKGkscyk9Pmkrcy5sZW5ndGgsMCkpO2NvbnN0IHI9dGQoZSk7bGV0IG49MDtmb3IoY29uc3QgaSBvZiB0KXIuc2V0KGksbiksbis9aS5sZW5ndGg7cmV0dXJuIHFjKHIpfWZ1bmN0aW9uIF9iKHQsZSl7aWYodC5sZW5ndGg+PTI1NSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBbHBoYWJldCB0b28gbG9uZyIpO2Zvcih2YXIgcj1uZXcgVWludDhBcnJheSgyNTYpLG49MDtuPHIubGVuZ3RoO24rKylyW25dPTI1NTtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIHM9dC5jaGFyQXQoaSksbz1zLmNoYXJDb2RlQXQoMCk7aWYocltvXSE9PTI1NSl0aHJvdyBuZXcgVHlwZUVycm9yKHMrIiBpcyBhbWJpZ3VvdXMiKTtyW29dPWl9dmFyIGE9dC5sZW5ndGgsYz10LmNoYXJBdCgwKSx1PU1hdGgubG9nKGEpL01hdGgubG9nKDI1NiksbD1NYXRoLmxvZygyNTYpL01hdGgubG9nKGEpO2Z1bmN0aW9uIGgodyl7aWYodyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fChBcnJheUJ1ZmZlci5pc1ZpZXcodyk/dz1uZXcgVWludDhBcnJheSh3LmJ1ZmZlcix3LmJ5dGVPZmZzZXQsdy5ieXRlTGVuZ3RoKTpBcnJheS5pc0FycmF5KHcpJiYodz1VaW50OEFycmF5LmZyb20odykpKSwhKHcgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBVaW50OEFycmF5Iik7aWYody5sZW5ndGg9PT0wKXJldHVybiIiO2Zvcih2YXIgYj0wLHY9MCxPPTAsRj13Lmxlbmd0aDtPIT09RiYmd1tPXT09PTA7KU8rKyxiKys7Zm9yKHZhciBfPShGLU8pKmwrMT4+PjAsUD1uZXcgVWludDhBcnJheShfKTtPIT09Rjspe2Zvcih2YXIgQz13W09dLGo9MCxxPV8tMTsoQyE9PTB8fGo8dikmJnEhPT0tMTtxLS0saisrKUMrPTI1NipQW3FdPj4+MCxQW3FdPUMlYT4+PjAsQz1DL2E+Pj4wO2lmKEMhPT0wKXRocm93IG5ldyBFcnJvcigiTm9uLXplcm8gY2FycnkiKTt2PWosTysrfWZvcih2YXIgTT1fLXY7TSE9PV8mJlBbTV09PT0wOylNKys7Zm9yKHZhciBUPWMucmVwZWF0KGIpO008XzsrK00pVCs9dC5jaGFyQXQoUFtNXSk7cmV0dXJuIFR9ZnVuY3Rpb24gcCh3KXtpZih0eXBlb2YgdyE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgU3RyaW5nIik7aWYody5sZW5ndGg9PT0wKXJldHVybiBuZXcgVWludDhBcnJheTt2YXIgYj0wO2lmKHdbYl0hPT0iICIpe2Zvcih2YXIgdj0wLE89MDt3W2JdPT09YzspdisrLGIrKztmb3IodmFyIEY9KHcubGVuZ3RoLWIpKnUrMT4+PjAsXz1uZXcgVWludDhBcnJheShGKTt3W2JdOyl7dmFyIFA9clt3LmNoYXJDb2RlQXQoYildO2lmKFA9PT0yNTUpcmV0dXJuO2Zvcih2YXIgQz0wLGo9Ri0xOyhQIT09MHx8QzxPKSYmaiE9PS0xO2otLSxDKyspUCs9YSpfW2pdPj4+MCxfW2pdPVAlMjU2Pj4+MCxQPVAvMjU2Pj4+MDtpZihQIT09MCl0aHJvdyBuZXcgRXJyb3IoIk5vbi16ZXJvIGNhcnJ5Iik7Tz1DLGIrK31pZih3W2JdIT09IiAiKXtmb3IodmFyIHE9Ri1PO3EhPT1GJiZfW3FdPT09MDspcSsrO2Zvcih2YXIgTT1uZXcgVWludDhBcnJheSh2KyhGLXEpKSxUPXY7cSE9PUY7KU1bVCsrXT1fW3ErK107cmV0dXJuIE19fX1mdW5jdGlvbiBnKHcpe3ZhciBiPXAodyk7aWYoYilyZXR1cm4gYjt0aHJvdyBuZXcgRXJyb3IoYE5vbi0ke2V9IGNoYXJhY3RlcmApfXJldHVybntlbmNvZGU6aCxkZWNvZGVVbnNhZmU6cCxkZWNvZGU6Z319dmFyIEliPV9iLFNiPUliO2NvbnN0IG5kPXQ9PntpZih0IGluc3RhbmNlb2YgVWludDhBcnJheSYmdC5jb25zdHJ1Y3Rvci5uYW1lPT09IlVpbnQ4QXJyYXkiKXJldHVybiB0O2lmKHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gbmV3IFVpbnQ4QXJyYXkodCk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpKXJldHVybiBuZXcgVWludDhBcnJheSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKTt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gdHlwZSwgbXVzdCBiZSBiaW5hcnkgdHlwZSIpfSxBYj10PT5uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodCksRGI9dD0+bmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKHQpO2xldCBPYj1jbGFzc3tjb25zdHJ1Y3RvcihlLHIsbil7dGhpcy5uYW1lPWUsdGhpcy5wcmVmaXg9cix0aGlzLmJhc2VFbmNvZGU9bn1lbmNvZGUoZSl7aWYoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuYCR7dGhpcy5wcmVmaXh9JHt0aGlzLmJhc2VFbmNvZGUoZSl9YDt0aHJvdyBFcnJvcigiVW5rbm93biB0eXBlLCBtdXN0IGJlIGJpbmFyeSB0eXBlIil9fSwkYj1jbGFzc3tjb25zdHJ1Y3RvcihlLHIsbil7aWYodGhpcy5uYW1lPWUsdGhpcy5wcmVmaXg9cixyLmNvZGVQb2ludEF0KDApPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBwcmVmaXggY2hhcmFjdGVyIik7dGhpcy5wcmVmaXhDb2RlUG9pbnQ9ci5jb2RlUG9pbnRBdCgwKSx0aGlzLmJhc2VEZWNvZGU9bn1kZWNvZGUoZSl7aWYodHlwZW9mIGU9PSJzdHJpbmciKXtpZihlLmNvZGVQb2ludEF0KDApIT09dGhpcy5wcmVmaXhDb2RlUG9pbnQpdGhyb3cgRXJyb3IoYFVuYWJsZSB0byBkZWNvZGUgbXVsdGliYXNlIHN0cmluZyAke0pTT04uc3RyaW5naWZ5KGUpfSwgJHt0aGlzLm5hbWV9IGRlY29kZXIgb25seSBzdXBwb3J0cyBpbnB1dHMgcHJlZml4ZWQgd2l0aCAke3RoaXMucHJlZml4fWApO3JldHVybiB0aGlzLmJhc2VEZWNvZGUoZS5zbGljZSh0aGlzLnByZWZpeC5sZW5ndGgpKX1lbHNlIHRocm93IEVycm9yKCJDYW4gb25seSBtdWx0aWJhc2UgZGVjb2RlIHN0cmluZ3MiKX1vcihlKXtyZXR1cm4gaWQodGhpcyxlKX19LEJiPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZGVjb2RlcnM9ZX1vcihlKXtyZXR1cm4gaWQodGhpcyxlKX1kZWNvZGUoZSl7Y29uc3Qgcj1lWzBdLG49dGhpcy5kZWNvZGVyc1tyXTtpZihuKXJldHVybiBuLmRlY29kZShlKTt0aHJvdyBSYW5nZUVycm9yKGBVbmFibGUgdG8gZGVjb2RlIG11bHRpYmFzZSBzdHJpbmcgJHtKU09OLnN0cmluZ2lmeShlKX0sIG9ubHkgaW5wdXRzIHByZWZpeGVkIHdpdGggJHtPYmplY3Qua2V5cyh0aGlzLmRlY29kZXJzKX0gYXJlIHN1cHBvcnRlZGApfX07Y29uc3QgaWQ9KHQsZSk9Pm5ldyBCYih7Li4udC5kZWNvZGVyc3x8e1t0LnByZWZpeF06dH0sLi4uZS5kZWNvZGVyc3x8e1tlLnByZWZpeF06ZX19KTtsZXQgUGI9Y2xhc3N7Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5uYW1lPWUsdGhpcy5wcmVmaXg9cix0aGlzLmJhc2VFbmNvZGU9bix0aGlzLmJhc2VEZWNvZGU9aSx0aGlzLmVuY29kZXI9bmV3IE9iKGUscixuKSx0aGlzLmRlY29kZXI9bmV3ICRiKGUscixpKX1lbmNvZGUoZSl7cmV0dXJuIHRoaXMuZW5jb2Rlci5lbmNvZGUoZSl9ZGVjb2RlKGUpe3JldHVybiB0aGlzLmRlY29kZXIuZGVjb2RlKGUpfX07Y29uc3Qgdm89KHtuYW1lOnQscHJlZml4OmUsZW5jb2RlOnIsZGVjb2RlOm59KT0+bmV3IFBiKHQsZSxyLG4pLFFpPSh7cHJlZml4OnQsbmFtZTplLGFscGhhYmV0OnJ9KT0+e2NvbnN0e2VuY29kZTpuLGRlY29kZTppfT1TYihyLGUpO3JldHVybiB2byh7cHJlZml4OnQsbmFtZTplLGVuY29kZTpuLGRlY29kZTpzPT5uZChpKHMpKX0pfSxUYj0odCxlLHIsbik9Pntjb25zdCBpPXt9O2ZvcihsZXQgbD0wO2w8ZS5sZW5ndGg7KytsKWlbZVtsXV09bDtsZXQgcz10Lmxlbmd0aDtmb3IoO3Rbcy0xXT09PSI9IjspLS1zO2NvbnN0IG89bmV3IFVpbnQ4QXJyYXkocypyLzh8MCk7bGV0IGE9MCxjPTAsdT0wO2ZvcihsZXQgbD0wO2w8czsrK2wpe2NvbnN0IGg9aVt0W2xdXTtpZihoPT09dm9pZCAwKXRocm93IG5ldyBTeW50YXhFcnJvcihgTm9uLSR7bn0gY2hhcmFjdGVyYCk7Yz1jPDxyfGgsYSs9cixhPj04JiYoYS09OCxvW3UrK109MjU1JmM+PmEpfWlmKGE+PXJ8fDI1NSZjPDw4LWEpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJVbmV4cGVjdGVkIGVuZCBvZiBkYXRhIik7cmV0dXJuIG99LFJiPSh0LGUscik9Pntjb25zdCBuPWVbZS5sZW5ndGgtMV09PT0iPSIsaT0oMTw8ciktMTtsZXQgcz0iIixvPTAsYT0wO2ZvcihsZXQgYz0wO2M8dC5sZW5ndGg7KytjKWZvcihhPWE8PDh8dFtjXSxvKz04O28+cjspby09cixzKz1lW2kmYT4+b107aWYobyYmKHMrPWVbaSZhPDxyLW9dKSxuKWZvcig7cy5sZW5ndGgqciY3OylzKz0iPSI7cmV0dXJuIHN9LE1lPSh7bmFtZTp0LHByZWZpeDplLGJpdHNQZXJDaGFyOnIsYWxwaGFiZXQ6bn0pPT52byh7cHJlZml4OmUsbmFtZTp0LGVuY29kZShpKXtyZXR1cm4gUmIoaSxuLHIpfSxkZWNvZGUoaSl7cmV0dXJuIFRiKGksbixyLHQpfX0pLENiPXZvKHtwcmVmaXg6IlwwIixuYW1lOiJpZGVudGl0eSIsZW5jb2RlOnQ9PkRiKHQpLGRlY29kZTp0PT5BYih0KX0pO3ZhciBVYj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxpZGVudGl0eTpDYn0pO2NvbnN0IE5iPU1lKHtwcmVmaXg6IjAiLG5hbWU6ImJhc2UyIixhbHBoYWJldDoiMDEiLGJpdHNQZXJDaGFyOjF9KTt2YXIgTGI9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsYmFzZTI6TmJ9KTtjb25zdCBGYj1NZSh7cHJlZml4OiI3IixuYW1lOiJiYXNlOCIsYWxwaGFiZXQ6IjAxMjM0NTY3IixiaXRzUGVyQ2hhcjozfSk7dmFyIGtiPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGJhc2U4OkZifSk7Y29uc3QgTWI9UWkoe3ByZWZpeDoiOSIsbmFtZToiYmFzZTEwIixhbHBoYWJldDoiMDEyMzQ1Njc4OSJ9KTt2YXIgcWI9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsYmFzZTEwOk1ifSk7Y29uc3QgamI9TWUoe3ByZWZpeDoiZiIsbmFtZToiYmFzZTE2IixhbHBoYWJldDoiMDEyMzQ1Njc4OWFiY2RlZiIsYml0c1BlckNoYXI6NH0pLHpiPU1lKHtwcmVmaXg6IkYiLG5hbWU6ImJhc2UxNnVwcGVyIixhbHBoYWJldDoiMDEyMzQ1Njc4OUFCQ0RFRiIsYml0c1BlckNoYXI6NH0pO3ZhciBIYj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxiYXNlMTY6amIsYmFzZTE2dXBwZXI6emJ9KTtjb25zdCBLYj1NZSh7cHJlZml4OiJiIixuYW1lOiJiYXNlMzIiLGFscGhhYmV0OiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejIzNDU2NyIsYml0c1BlckNoYXI6NX0pLFZiPU1lKHtwcmVmaXg6IkIiLG5hbWU6ImJhc2UzMnVwcGVyIixhbHBoYWJldDoiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoyMzQ1NjciLGJpdHNQZXJDaGFyOjV9KSxXYj1NZSh7cHJlZml4OiJjIixuYW1lOiJiYXNlMzJwYWQiLGFscGhhYmV0OiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejIzNDU2Nz0iLGJpdHNQZXJDaGFyOjV9KSxHYj1NZSh7cHJlZml4OiJDIixuYW1lOiJiYXNlMzJwYWR1cHBlciIsYWxwaGFiZXQ6IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMjM0NTY3PSIsYml0c1BlckNoYXI6NX0pLFliPU1lKHtwcmVmaXg6InYiLG5hbWU6ImJhc2UzMmhleCIsYWxwaGFiZXQ6IjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2IixiaXRzUGVyQ2hhcjo1fSksWmI9TWUoe3ByZWZpeDoiViIsbmFtZToiYmFzZTMyaGV4dXBwZXIiLGFscGhhYmV0OiIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVViIsYml0c1BlckNoYXI6NX0pLFhiPU1lKHtwcmVmaXg6InQiLG5hbWU6ImJhc2UzMmhleHBhZCIsYWxwaGFiZXQ6IjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2PSIsYml0c1BlckNoYXI6NX0pLEpiPU1lKHtwcmVmaXg6IlQiLG5hbWU6ImJhc2UzMmhleHBhZHVwcGVyIixhbHBoYWJldDoiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVY9IixiaXRzUGVyQ2hhcjo1fSksUWI9TWUoe3ByZWZpeDoiaCIsbmFtZToiYmFzZTMyeiIsYWxwaGFiZXQ6InlibmRyZmc4ZWprbWNwcXhvdDF1d2lzemEzNDVoNzY5IixiaXRzUGVyQ2hhcjo1fSk7dmFyIGUxPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGJhc2UzMjpLYixiYXNlMzJ1cHBlcjpWYixiYXNlMzJwYWQ6V2IsYmFzZTMycGFkdXBwZXI6R2IsYmFzZTMyaGV4OlliLGJhc2UzMmhleHVwcGVyOlpiLGJhc2UzMmhleHBhZDpYYixiYXNlMzJoZXhwYWR1cHBlcjpKYixiYXNlMzJ6OlFifSk7Y29uc3QgdDE9UWkoe3ByZWZpeDoiayIsbmFtZToiYmFzZTM2IixhbHBoYWJldDoiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6In0pLHIxPVFpKHtwcmVmaXg6IksiLG5hbWU6ImJhc2UzNnVwcGVyIixhbHBoYWJldDoiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIn0pO3ZhciBuMT1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxiYXNlMzY6dDEsYmFzZTM2dXBwZXI6cjF9KTtjb25zdCBpMT1RaSh7bmFtZToiYmFzZTU4YnRjIixwcmVmaXg6InoiLGFscGhhYmV0OiIxMjM0NTY3ODlBQkNERUZHSEpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa21ub3BxcnN0dXZ3eHl6In0pLHMxPVFpKHtuYW1lOiJiYXNlNThmbGlja3IiLHByZWZpeDoiWiIsYWxwaGFiZXQ6IjEyMzQ1Njc4OWFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXpBQkNERUZHSEpLTE1OUFFSU1RVVldYWVoifSk7dmFyIG8xPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGJhc2U1OGJ0YzppMSxiYXNlNThmbGlja3I6czF9KTtjb25zdCBhMT1NZSh7cHJlZml4OiJtIixuYW1lOiJiYXNlNjQiLGFscGhhYmV0OiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixiaXRzUGVyQ2hhcjo2fSksYzE9TWUoe3ByZWZpeDoiTSIsbmFtZToiYmFzZTY0cGFkIixhbHBoYWJldDoiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLGJpdHNQZXJDaGFyOjZ9KSx1MT1NZSh7cHJlZml4OiJ1IixuYW1lOiJiYXNlNjR1cmwiLGFscGhhYmV0OiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fIixiaXRzUGVyQ2hhcjo2fSksbDE9TWUoe3ByZWZpeDoiVSIsbmFtZToiYmFzZTY0dXJscGFkIixhbHBoYWJldDoiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktXz0iLGJpdHNQZXJDaGFyOjZ9KTt2YXIgaDE9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsYmFzZTY0OmExLGJhc2U2NHBhZDpjMSxiYXNlNjR1cmw6dTEsYmFzZTY0dXJscGFkOmwxfSk7Y29uc3Qgc2Q9QXJyYXkuZnJvbSgi8J+agPCfqpDimITwn5uw8J+MjPCfjJHwn4yS8J+Mk/CfjJTwn4yV8J+MlvCfjJfwn4yY8J+MjfCfjI/wn4yO8J+QieKYgPCfkrvwn5al8J+SvvCfkr/wn5iC4p2k8J+YjfCfpKPwn5iK8J+Zj/CfkpXwn5it8J+YmPCfkY3wn5iF8J+Rj/CfmIHwn5Sl8J+lsPCfkpTwn5KW8J+SmfCfmKLwn6SU8J+YhvCfmYTwn5Kq8J+YieKYuvCfkYzwn6SX8J+SnPCfmJTwn5iO8J+Yh/CfjLnwn6Sm8J+OifCfkp7inIzinKjwn6S38J+YsfCfmIzwn4y48J+ZjPCfmIvwn5KX8J+SmvCfmI/wn5Kb8J+ZgvCfkpPwn6Sp8J+YhPCfmIDwn5ak8J+Yg/Cfkq/wn5mI8J+Rh/Cfjrbwn5iS8J+kreKdo/CfmJzwn5KL8J+RgPCfmKrwn5iR8J+SpfCfmYvwn5ie8J+YqfCfmKHwn6Sq8J+RivCfpbPwn5il8J+kpPCfkYnwn5KD8J+Ys+Kci/CfmJrwn5id8J+YtPCfjJ/wn5is8J+Zg/CfjYDwn4y38J+Yu/CfmJPirZDinIXwn6W68J+MiPCfmIjwn6SY8J+SpuKclPCfmKPwn4+D8J+SkOKYufCfjorwn5KY8J+YoOKYnfCfmJXwn4y68J+OgvCfjLvwn5iQ8J+WlfCfkp3wn5mK8J+YufCfl6Pwn5Kr8J+SgPCfkZHwn4618J+knvCfmJvwn5S08J+YpPCfjLzwn5ir4pq98J+kmeKYlfCfj4bwn6Sr8J+RiPCfmK7wn5mG8J+Nu/CfjYPwn5C28J+SgfCfmLLwn4y/8J+nofCfjoHimqHwn4ye8J+OiOKdjOKcivCfkYvwn5iw8J+kqPCfmLbwn6Sd8J+atvCfkrDwn42T8J+SovCfpJ/wn5mB8J+aqPCfkqjwn6Ss4pyI8J+OgPCfjbrwn6ST8J+YmfCfkp/wn4yx8J+YlvCfkbbwn6W04pa24p6h4p2T8J+SjvCfkrjirIfwn5io8J+MmvCfpovwn5i38J+VuuKaoPCfmYXwn5if8J+YtfCfkY7wn6Sy8J+koPCfpKfwn5OM8J+UtfCfkoXwn6eQ8J+QvvCfjZLwn5iX8J+kkfCfjIrwn6Sv8J+Qt+KYjvCfkqfwn5iv8J+ShvCfkYbwn46k8J+Zh/CfjZHinYTwn4y08J+So/CfkLjwn5KM8J+TjfCfpYDwn6Si8J+RhfCfkqHwn5Kp8J+RkPCfk7jwn5G78J+kkPCfpK7wn4688J+ltfCfmqnwn42O8J+NivCfkbzwn5KN8J+To/CfpYIiKSxmMT1zZC5yZWR1Y2UoKHQsZSxyKT0+KHRbcl09ZSx0KSxbXSksZDE9c2QucmVkdWNlKCh0LGUscik9Pih0W2UuY29kZVBvaW50QXQoMCldPXIsdCksW10pO2Z1bmN0aW9uIHAxKHQpe3JldHVybiB0LnJlZHVjZSgoZSxyKT0+KGUrPWYxW3JdLGUpLCIiKX1mdW5jdGlvbiBnMSh0KXtjb25zdCBlPVtdO2Zvcihjb25zdCByIG9mIHQpe2NvbnN0IG49ZDFbci5jb2RlUG9pbnRBdCgwKV07aWYobj09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYE5vbi1iYXNlMjU2ZW1vamkgY2hhcmFjdGVyOiAke3J9YCk7ZS5wdXNoKG4pfXJldHVybiBuZXcgVWludDhBcnJheShlKX1jb25zdCB5MT12byh7cHJlZml4OiLwn5qAIixuYW1lOiJiYXNlMjU2ZW1vamkiLGVuY29kZTpwMSxkZWNvZGU6ZzF9KTt2YXIgdzE9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsYmFzZTI1NmVtb2ppOnkxfSksbTE9b2QsdWw9MTI4LGIxPS0xMjgsRTE9TWF0aC5wb3coMiwzMSk7ZnVuY3Rpb24gb2QodCxlLHIpe2U9ZXx8W10scj1yfHwwO2Zvcih2YXIgbj1yO3Q+PUUxOyllW3IrK109dCYyNTV8dWwsdC89MTI4O2Zvcig7dCZiMTspZVtyKytdPXQmMjU1fHVsLHQ+Pj49NztyZXR1cm4gZVtyXT10fDAsb2QuYnl0ZXM9ci1uKzEsZX12YXIgdjE9SmEseDE9MTI4LGxsPTEyNztmdW5jdGlvbiBKYSh0LG4pe3ZhciByPTAsbj1ufHwwLGk9MCxzPW4sbyxhPXQubGVuZ3RoO2Rve2lmKHM+PWEpdGhyb3cgSmEuYnl0ZXM9MCxuZXcgUmFuZ2VFcnJvcigiQ291bGQgbm90IGRlY29kZSB2YXJpbnQiKTtvPXRbcysrXSxyKz1pPDI4PyhvJmxsKTw8aToobyZsbCkqTWF0aC5wb3coMixpKSxpKz03fXdoaWxlKG8+PXgxKTtyZXR1cm4gSmEuYnl0ZXM9cy1uLHJ9dmFyIF8xPU1hdGgucG93KDIsNyksSTE9TWF0aC5wb3coMiwxNCksUzE9TWF0aC5wb3coMiwyMSksQTE9TWF0aC5wb3coMiwyOCksRDE9TWF0aC5wb3coMiwzNSksTzE9TWF0aC5wb3coMiw0MiksJDE9TWF0aC5wb3coMiw0OSksQjE9TWF0aC5wb3coMiw1NiksUDE9TWF0aC5wb3coMiw2MyksVDE9ZnVuY3Rpb24odCl7cmV0dXJuIHQ8XzE/MTp0PEkxPzI6dDxTMT8zOnQ8QTE/NDp0PEQxPzU6dDxPMT82OnQ8JDE/Nzp0PEIxPzg6dDxQMT85OjEwfSxSMT17ZW5jb2RlOm0xLGRlY29kZTp2MSxlbmNvZGluZ0xlbmd0aDpUMX0sYWQ9UjE7Y29uc3QgaGw9KHQsZSxyPTApPT4oYWQuZW5jb2RlKHQsZSxyKSxlKSxmbD10PT5hZC5lbmNvZGluZ0xlbmd0aCh0KSxRYT0odCxlKT0+e2NvbnN0IHI9ZS5ieXRlTGVuZ3RoLG49ZmwodCksaT1uK2ZsKHIpLHM9bmV3IFVpbnQ4QXJyYXkoaStyKTtyZXR1cm4gaGwodCxzLDApLGhsKHIscyxuKSxzLnNldChlLGkpLG5ldyBDMSh0LHIsZSxzKX07Y2xhc3MgQzF7Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5jb2RlPWUsdGhpcy5zaXplPXIsdGhpcy5kaWdlc3Q9bix0aGlzLmJ5dGVzPWl9fWNvbnN0IGNkPSh7bmFtZTp0LGNvZGU6ZSxlbmNvZGU6cn0pPT5uZXcgVTEodCxlLHIpO2NsYXNzIFUxe2NvbnN0cnVjdG9yKGUscixuKXt0aGlzLm5hbWU9ZSx0aGlzLmNvZGU9cix0aGlzLmVuY29kZT1ufWRpZ2VzdChlKXtpZihlIGluc3RhbmNlb2YgVWludDhBcnJheSl7Y29uc3Qgcj10aGlzLmVuY29kZShlKTtyZXR1cm4gciBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk/UWEodGhpcy5jb2RlLHIpOnIudGhlbihuPT5RYSh0aGlzLmNvZGUsbikpfWVsc2UgdGhyb3cgRXJyb3IoIlVua25vd24gdHlwZSwgbXVzdCBiZSBiaW5hcnkgdHlwZSIpfX1jb25zdCB1ZD10PT5hc3luYyBlPT5uZXcgVWludDhBcnJheShhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCh0LGUpKSxOMT1jZCh7bmFtZToic2hhMi0yNTYiLGNvZGU6MTgsZW5jb2RlOnVkKCJTSEEtMjU2Iil9KSxMMT1jZCh7bmFtZToic2hhMi01MTIiLGNvZGU6MTksZW5jb2RlOnVkKCJTSEEtNTEyIil9KTt2YXIgRjE9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsc2hhMjU2Ok4xLHNoYTUxMjpMMX0pO2NvbnN0IGxkPTAsazE9ImlkZW50aXR5IixoZD1uZCxNMT10PT5RYShsZCxoZCh0KSkscTE9e2NvZGU6bGQsbmFtZTprMSxlbmNvZGU6aGQsZGlnZXN0Ok0xfTt2YXIgajE9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsaWRlbnRpdHk6cTF9KTtuZXcgVGV4dEVuY29kZXIsbmV3IFRleHREZWNvZGVyO2NvbnN0IGRsPXsuLi5VYiwuLi5MYiwuLi5rYiwuLi5xYiwuLi5IYiwuLi5lMSwuLi5uMSwuLi5vMSwuLi5oMSwuLi53MX07KHsuLi5GMSwuLi5qMX0pO2Z1bmN0aW9uIGZkKHQsZSxyLG4pe3JldHVybntuYW1lOnQscHJlZml4OmUsZW5jb2Rlcjp7bmFtZTp0LHByZWZpeDplLGVuY29kZTpyfSxkZWNvZGVyOntkZWNvZGU6bn19fWNvbnN0IHBsPWZkKCJ1dGY4IiwidSIsdD0+InUiK25ldyBUZXh0RGVjb2RlcigidXRmOCIpLmRlY29kZSh0KSx0PT5uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodC5zdWJzdHJpbmcoMSkpKSxpYT1mZCgiYXNjaWkiLCJhIix0PT57bGV0IGU9ImEiO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKWUrPVN0cmluZy5mcm9tQ2hhckNvZGUodFtyXSk7cmV0dXJuIGV9LHQ9Pnt0PXQuc3Vic3RyaW5nKDEpO2NvbnN0IGU9dGQodC5sZW5ndGgpO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKWVbcl09dC5jaGFyQ29kZUF0KHIpO3JldHVybiBlfSksZGQ9e3V0Zjg6cGwsInV0Zi04IjpwbCxoZXg6ZGwuYmFzZTE2LGxhdGluMTppYSxhc2NpaTppYSxiaW5hcnk6aWEsLi4uZGx9O2Z1bmN0aW9uIHhvKHQsZT0idXRmOCIpe2NvbnN0IHI9ZGRbZV07aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBlbmNvZGluZyAiJHtlfSJgKTtyZXR1cm4oZT09PSJ1dGY4Inx8ZT09PSJ1dGYtOCIpJiZnbG9iYWxUaGlzLkJ1ZmZlciE9bnVsbCYmZ2xvYmFsVGhpcy5CdWZmZXIuZnJvbSE9bnVsbD9nbG9iYWxUaGlzLkJ1ZmZlci5mcm9tKHQuYnVmZmVyLHQuYnl0ZU9mZnNldCx0LmJ5dGVMZW5ndGgpLnRvU3RyaW5nKCJ1dGY4Iik6ci5lbmNvZGVyLmVuY29kZSh0KS5zdWJzdHJpbmcoMSl9ZnVuY3Rpb24gaGkodCxlPSJ1dGY4Iil7Y29uc3Qgcj1kZFtlXTtpZighcil0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGVuY29kaW5nICIke2V9ImApO3JldHVybihlPT09InV0ZjgifHxlPT09InV0Zi04IikmJmdsb2JhbFRoaXMuQnVmZmVyIT1udWxsJiZnbG9iYWxUaGlzLkJ1ZmZlci5mcm9tIT1udWxsP3FjKGdsb2JhbFRoaXMuQnVmZmVyLmZyb20odCwidXRmLTgiKSk6ci5kZWNvZGVyLmRlY29kZShgJHtyLnByZWZpeH0ke3R9YCl9ZnVuY3Rpb24gZ2wodCl7cmV0dXJuIF9uKHhvKGhpKHQsRW8pLFFmKSl9ZnVuY3Rpb24gV3ModCl7cmV0dXJuIHhvKGhpKEluKHQpLFFmKSxFbyl9ZnVuY3Rpb24gcGQodCl7Y29uc3QgZT1oaSh2YixjbCkscj1FYit4byhyZChbZSx0XSksY2wpO3JldHVyblttYixiYixyXS5qb2luKHdiKX1mdW5jdGlvbiB6MSh0KXtyZXR1cm4geG8odCxFbyl9ZnVuY3Rpb24gSDEodCl7cmV0dXJuIGhpKHQsRW8pfWZ1bmN0aW9uIEsxKHQpe3JldHVybiBoaShbV3ModC5oZWFkZXIpLFdzKHQucGF5bG9hZCldLmpvaW4oVnMpLGVkKX1mdW5jdGlvbiBWMSh0KXtyZXR1cm5bV3ModC5oZWFkZXIpLFdzKHQucGF5bG9hZCksejEodC5zaWduYXR1cmUpXS5qb2luKFZzKX1mdW5jdGlvbiBlYyh0KXtjb25zdCBlPXQuc3BsaXQoVnMpLHI9Z2woZVswXSksbj1nbChlWzFdKSxpPUgxKGVbMl0pLHM9aGkoZS5zbGljZSgwLDIpLmpvaW4oVnMpLGVkKTtyZXR1cm57aGVhZGVyOnIscGF5bG9hZDpuLHNpZ25hdHVyZTppLGRhdGE6c319ZnVuY3Rpb24geWwodD1qZih4Yikpe2NvbnN0IGU9SmYuZ2V0UHVibGljS2V5KHQpO3JldHVybntzZWNyZXRLZXk6cmQoW3QsZV0pLHB1YmxpY0tleTplfX1hc3luYyBmdW5jdGlvbiBXMSh0LGUscixuLGk9Ry5mcm9tTWlsaXNlY29uZHMoRGF0ZS5ub3coKSkpe2NvbnN0IHM9e2FsZzpnYix0eXA6eWJ9LG89cGQobi5wdWJsaWNLZXkpLGE9aStyLGM9e2lzczpvLHN1Yjp0LGF1ZDplLGlhdDppLGV4cDphfSx1PUsxKHtoZWFkZXI6cyxwYXlsb2FkOmN9KSxsPUpmLnNpZ24odSxuLnNlY3JldEtleS5zbGljZSgwLDMyKSk7cmV0dXJuIFYxKHtoZWFkZXI6cyxwYXlsb2FkOmMsc2lnbmF0dXJlOmx9KX1mdW5jdGlvbiBHMSh0LGUpe2lmKHQubGVuZ3RoPj0yNTUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQWxwaGFiZXQgdG9vIGxvbmciKTtmb3IodmFyIHI9bmV3IFVpbnQ4QXJyYXkoMjU2KSxuPTA7bjxyLmxlbmd0aDtuKyspcltuXT0yNTU7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBzPXQuY2hhckF0KGkpLG89cy5jaGFyQ29kZUF0KDApO2lmKHJbb10hPT0yNTUpdGhyb3cgbmV3IFR5cGVFcnJvcihzKyIgaXMgYW1iaWd1b3VzIik7cltvXT1pfXZhciBhPXQubGVuZ3RoLGM9dC5jaGFyQXQoMCksdT1NYXRoLmxvZyhhKS9NYXRoLmxvZygyNTYpLGw9TWF0aC5sb2coMjU2KS9NYXRoLmxvZyhhKTtmdW5jdGlvbiBoKHcpe2lmKHcgaW5zdGFuY2VvZiBVaW50OEFycmF5fHwoQXJyYXlCdWZmZXIuaXNWaWV3KHcpP3c9bmV3IFVpbnQ4QXJyYXkody5idWZmZXIsdy5ieXRlT2Zmc2V0LHcuYnl0ZUxlbmd0aCk6QXJyYXkuaXNBcnJheSh3KSYmKHc9VWludDhBcnJheS5mcm9tKHcpKSksISh3IGluc3RhbmNlb2YgVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgVWludDhBcnJheSIpO2lmKHcubGVuZ3RoPT09MClyZXR1cm4iIjtmb3IodmFyIGI9MCx2PTAsTz0wLEY9dy5sZW5ndGg7TyE9PUYmJndbT109PT0wOylPKyssYisrO2Zvcih2YXIgXz0oRi1PKSpsKzE+Pj4wLFA9bmV3IFVpbnQ4QXJyYXkoXyk7TyE9PUY7KXtmb3IodmFyIEM9d1tPXSxqPTAscT1fLTE7KEMhPT0wfHxqPHYpJiZxIT09LTE7cS0tLGorKylDKz0yNTYqUFtxXT4+PjAsUFtxXT1DJWE+Pj4wLEM9Qy9hPj4+MDtpZihDIT09MCl0aHJvdyBuZXcgRXJyb3IoIk5vbi16ZXJvIGNhcnJ5Iik7dj1qLE8rK31mb3IodmFyIE09Xy12O00hPT1fJiZQW01dPT09MDspTSsrO2Zvcih2YXIgVD1jLnJlcGVhdChiKTtNPF87KytNKVQrPXQuY2hhckF0KFBbTV0pO3JldHVybiBUfWZ1bmN0aW9uIHAodyl7aWYodHlwZW9mIHchPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIFN0cmluZyIpO2lmKHcubGVuZ3RoPT09MClyZXR1cm4gbmV3IFVpbnQ4QXJyYXk7dmFyIGI9MDtpZih3W2JdIT09IiAiKXtmb3IodmFyIHY9MCxPPTA7d1tiXT09PWM7KXYrKyxiKys7Zm9yKHZhciBGPSh3Lmxlbmd0aC1iKSp1KzE+Pj4wLF89bmV3IFVpbnQ4QXJyYXkoRik7d1tiXTspe3ZhciBQPXJbdy5jaGFyQ29kZUF0KGIpXTtpZihQPT09MjU1KXJldHVybjtmb3IodmFyIEM9MCxqPUYtMTsoUCE9PTB8fEM8TykmJmohPT0tMTtqLS0sQysrKVArPWEqX1tqXT4+PjAsX1tqXT1QJTI1Nj4+PjAsUD1QLzI1Nj4+PjA7aWYoUCE9PTApdGhyb3cgbmV3IEVycm9yKCJOb24temVybyBjYXJyeSIpO089QyxiKyt9aWYod1tiXSE9PSIgIil7Zm9yKHZhciBxPUYtTztxIT09RiYmX1txXT09PTA7KXErKztmb3IodmFyIE09bmV3IFVpbnQ4QXJyYXkodisoRi1xKSksVD12O3EhPT1GOylNW1QrK109X1txKytdO3JldHVybiBNfX19ZnVuY3Rpb24gZyh3KXt2YXIgYj1wKHcpO2lmKGIpcmV0dXJuIGI7dGhyb3cgbmV3IEVycm9yKGBOb24tJHtlfSBjaGFyYWN0ZXJgKX1yZXR1cm57ZW5jb2RlOmgsZGVjb2RlVW5zYWZlOnAsZGVjb2RlOmd9fXZhciBZMT1HMSxaMT1ZMTtjb25zdCBYMT10PT57aWYodCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJnQuY29uc3RydWN0b3IubmFtZT09PSJVaW50OEFycmF5IilyZXR1cm4gdDtpZih0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIG5ldyBVaW50OEFycmF5KHQpO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KSlyZXR1cm4gbmV3IFVpbnQ4QXJyYXkodC5idWZmZXIsdC5ieXRlT2Zmc2V0LHQuYnl0ZUxlbmd0aCk7dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHR5cGUsIG11c3QgYmUgYmluYXJ5IHR5cGUiKX0sSjE9dD0+bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHQpLFExPXQ9Pm5ldyBUZXh0RGVjb2RlcigpLmRlY29kZSh0KTtsZXQgZUU9Y2xhc3N7Y29uc3RydWN0b3IoZSxyLG4pe3RoaXMubmFtZT1lLHRoaXMucHJlZml4PXIsdGhpcy5iYXNlRW5jb2RlPW59ZW5jb2RlKGUpe2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybmAke3RoaXMucHJlZml4fSR7dGhpcy5iYXNlRW5jb2RlKGUpfWA7dGhyb3cgRXJyb3IoIlVua25vd24gdHlwZSwgbXVzdCBiZSBiaW5hcnkgdHlwZSIpfX0sdEU9Y2xhc3N7Y29uc3RydWN0b3IoZSxyLG4pe2lmKHRoaXMubmFtZT1lLHRoaXMucHJlZml4PXIsci5jb2RlUG9pbnRBdCgwKT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcHJlZml4IGNoYXJhY3RlciIpO3RoaXMucHJlZml4Q29kZVBvaW50PXIuY29kZVBvaW50QXQoMCksdGhpcy5iYXNlRGVjb2RlPW59ZGVjb2RlKGUpe2lmKHR5cGVvZiBlPT0ic3RyaW5nIil7aWYoZS5jb2RlUG9pbnRBdCgwKSE9PXRoaXMucHJlZml4Q29kZVBvaW50KXRocm93IEVycm9yKGBVbmFibGUgdG8gZGVjb2RlIG11bHRpYmFzZSBzdHJpbmcgJHtKU09OLnN0cmluZ2lmeShlKX0sICR7dGhpcy5uYW1lfSBkZWNvZGVyIG9ubHkgc3VwcG9ydHMgaW5wdXRzIHByZWZpeGVkIHdpdGggJHt0aGlzLnByZWZpeH1gKTtyZXR1cm4gdGhpcy5iYXNlRGVjb2RlKGUuc2xpY2UodGhpcy5wcmVmaXgubGVuZ3RoKSl9ZWxzZSB0aHJvdyBFcnJvcigiQ2FuIG9ubHkgbXVsdGliYXNlIGRlY29kZSBzdHJpbmdzIil9b3IoZSl7cmV0dXJuIGdkKHRoaXMsZSl9fTtjbGFzcyByRXtjb25zdHJ1Y3RvcihlKXt0aGlzLmRlY29kZXJzPWV9b3IoZSl7cmV0dXJuIGdkKHRoaXMsZSl9ZGVjb2RlKGUpe2NvbnN0IHI9ZVswXSxuPXRoaXMuZGVjb2RlcnNbcl07aWYobilyZXR1cm4gbi5kZWNvZGUoZSk7dGhyb3cgUmFuZ2VFcnJvcihgVW5hYmxlIHRvIGRlY29kZSBtdWx0aWJhc2Ugc3RyaW5nICR7SlNPTi5zdHJpbmdpZnkoZSl9LCBvbmx5IGlucHV0cyBwcmVmaXhlZCB3aXRoICR7T2JqZWN0LmtleXModGhpcy5kZWNvZGVycyl9IGFyZSBzdXBwb3J0ZWRgKX19Y29uc3QgZ2Q9KHQsZSk9Pm5ldyByRSh7Li4udC5kZWNvZGVyc3x8e1t0LnByZWZpeF06dH0sLi4uZS5kZWNvZGVyc3x8e1tlLnByZWZpeF06ZX19KTtjbGFzcyBuRXtjb25zdHJ1Y3RvcihlLHIsbixpKXt0aGlzLm5hbWU9ZSx0aGlzLnByZWZpeD1yLHRoaXMuYmFzZUVuY29kZT1uLHRoaXMuYmFzZURlY29kZT1pLHRoaXMuZW5jb2Rlcj1uZXcgZUUoZSxyLG4pLHRoaXMuZGVjb2Rlcj1uZXcgdEUoZSxyLGkpfWVuY29kZShlKXtyZXR1cm4gdGhpcy5lbmNvZGVyLmVuY29kZShlKX1kZWNvZGUoZSl7cmV0dXJuIHRoaXMuZGVjb2Rlci5kZWNvZGUoZSl9fWNvbnN0IF9vPSh7bmFtZTp0LHByZWZpeDplLGVuY29kZTpyLGRlY29kZTpufSk9Pm5ldyBuRSh0LGUscixuKSxlcz0oe3ByZWZpeDp0LG5hbWU6ZSxhbHBoYWJldDpyfSk9Pntjb25zdHtlbmNvZGU6bixkZWNvZGU6aX09WjEocixlKTtyZXR1cm4gX28oe3ByZWZpeDp0LG5hbWU6ZSxlbmNvZGU6bixkZWNvZGU6cz0+WDEoaShzKSl9KX0saUU9KHQsZSxyLG4pPT57Y29uc3QgaT17fTtmb3IobGV0IGw9MDtsPGUubGVuZ3RoOysrbClpW2VbbF1dPWw7bGV0IHM9dC5sZW5ndGg7Zm9yKDt0W3MtMV09PT0iPSI7KS0tcztjb25zdCBvPW5ldyBVaW50OEFycmF5KHMqci84fDApO2xldCBhPTAsYz0wLHU9MDtmb3IobGV0IGw9MDtsPHM7KytsKXtjb25zdCBoPWlbdFtsXV07aWYoaD09PXZvaWQgMCl0aHJvdyBuZXcgU3ludGF4RXJyb3IoYE5vbi0ke259IGNoYXJhY3RlcmApO2M9Yzw8cnxoLGErPXIsYT49OCYmKGEtPTgsb1t1KytdPTI1NSZjPj5hKX1pZihhPj1yfHwyNTUmYzw8OC1hKXRocm93IG5ldyBTeW50YXhFcnJvcigiVW5leHBlY3RlZCBlbmQgb2YgZGF0YSIpO3JldHVybiBvfSxzRT0odCxlLHIpPT57Y29uc3Qgbj1lW2UubGVuZ3RoLTFdPT09Ij0iLGk9KDE8PHIpLTE7bGV0IHM9IiIsbz0wLGE9MDtmb3IobGV0IGM9MDtjPHQubGVuZ3RoOysrYylmb3IoYT1hPDw4fHRbY10sbys9ODtvPnI7KW8tPXIscys9ZVtpJmE+Pm9dO2lmKG8mJihzKz1lW2kmYTw8ci1vXSksbilmb3IoO3MubGVuZ3RoKnImNzspcys9Ij0iO3JldHVybiBzfSxxZT0oe25hbWU6dCxwcmVmaXg6ZSxiaXRzUGVyQ2hhcjpyLGFscGhhYmV0Om59KT0+X28oe3ByZWZpeDplLG5hbWU6dCxlbmNvZGUoaSl7cmV0dXJuIHNFKGksbixyKX0sZGVjb2RlKGkpe3JldHVybiBpRShpLG4scix0KX19KSxvRT1fbyh7cHJlZml4OiJcMCIsbmFtZToiaWRlbnRpdHkiLGVuY29kZTp0PT5RMSh0KSxkZWNvZGU6dD0+SjEodCl9KSxhRT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsaWRlbnRpdHk6b0V9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksY0U9cWUoe3ByZWZpeDoiMCIsbmFtZToiYmFzZTIiLGFscGhhYmV0OiIwMSIsYml0c1BlckNoYXI6MX0pLHVFPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxiYXNlMjpjRX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxsRT1xZSh7cHJlZml4OiI3IixuYW1lOiJiYXNlOCIsYWxwaGFiZXQ6IjAxMjM0NTY3IixiaXRzUGVyQ2hhcjozfSksaEU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGJhc2U4OmxFfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLGZFPWVzKHtwcmVmaXg6IjkiLG5hbWU6ImJhc2UxMCIsYWxwaGFiZXQ6IjAxMjM0NTY3ODkifSksZEU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGJhc2UxMDpmRX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxwRT1xZSh7cHJlZml4OiJmIixuYW1lOiJiYXNlMTYiLGFscGhhYmV0OiIwMTIzNDU2Nzg5YWJjZGVmIixiaXRzUGVyQ2hhcjo0fSksZ0U9cWUoe3ByZWZpeDoiRiIsbmFtZToiYmFzZTE2dXBwZXIiLGFscGhhYmV0OiIwMTIzNDU2Nzg5QUJDREVGIixiaXRzUGVyQ2hhcjo0fSkseUU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGJhc2UxNjpwRSxiYXNlMTZ1cHBlcjpnRX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSx3RT1xZSh7cHJlZml4OiJiIixuYW1lOiJiYXNlMzIiLGFscGhhYmV0OiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejIzNDU2NyIsYml0c1BlckNoYXI6NX0pLG1FPXFlKHtwcmVmaXg6IkIiLG5hbWU6ImJhc2UzMnVwcGVyIixhbHBoYWJldDoiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoyMzQ1NjciLGJpdHNQZXJDaGFyOjV9KSxiRT1xZSh7cHJlZml4OiJjIixuYW1lOiJiYXNlMzJwYWQiLGFscGhhYmV0OiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejIzNDU2Nz0iLGJpdHNQZXJDaGFyOjV9KSxFRT1xZSh7cHJlZml4OiJDIixuYW1lOiJiYXNlMzJwYWR1cHBlciIsYWxwaGFiZXQ6IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMjM0NTY3PSIsYml0c1BlckNoYXI6NX0pLHZFPXFlKHtwcmVmaXg6InYiLG5hbWU6ImJhc2UzMmhleCIsYWxwaGFiZXQ6IjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2IixiaXRzUGVyQ2hhcjo1fSkseEU9cWUoe3ByZWZpeDoiViIsbmFtZToiYmFzZTMyaGV4dXBwZXIiLGFscGhhYmV0OiIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVViIsYml0c1BlckNoYXI6NX0pLF9FPXFlKHtwcmVmaXg6InQiLG5hbWU6ImJhc2UzMmhleHBhZCIsYWxwaGFiZXQ6IjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2PSIsYml0c1BlckNoYXI6NX0pLElFPXFlKHtwcmVmaXg6IlQiLG5hbWU6ImJhc2UzMmhleHBhZHVwcGVyIixhbHBoYWJldDoiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVY9IixiaXRzUGVyQ2hhcjo1fSksU0U9cWUoe3ByZWZpeDoiaCIsbmFtZToiYmFzZTMyeiIsYWxwaGFiZXQ6InlibmRyZmc4ZWprbWNwcXhvdDF1d2lzemEzNDVoNzY5IixiaXRzUGVyQ2hhcjo1fSksQUU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGJhc2UzMjp3RSxiYXNlMzJoZXg6dkUsYmFzZTMyaGV4cGFkOl9FLGJhc2UzMmhleHBhZHVwcGVyOklFLGJhc2UzMmhleHVwcGVyOnhFLGJhc2UzMnBhZDpiRSxiYXNlMzJwYWR1cHBlcjpFRSxiYXNlMzJ1cHBlcjptRSxiYXNlMzJ6OlNFfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLERFPWVzKHtwcmVmaXg6ImsiLG5hbWU6ImJhc2UzNiIsYWxwaGFiZXQ6IjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiJ9KSxPRT1lcyh7cHJlZml4OiJLIixuYW1lOiJiYXNlMzZ1cHBlciIsYWxwaGFiZXQ6IjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiJ9KSwkRT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYmFzZTM2OkRFLGJhc2UzNnVwcGVyOk9FfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLEJFPWVzKHtuYW1lOiJiYXNlNThidGMiLHByZWZpeDoieiIsYWxwaGFiZXQ6IjEyMzQ1Njc4OUFCQ0RFRkdISktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXoifSksUEU9ZXMoe25hbWU6ImJhc2U1OGZsaWNrciIscHJlZml4OiJaIixhbHBoYWJldDoiMTIzNDU2Nzg5YWJjZGVmZ2hpamttbm9wcXJzdHV2d3h5ekFCQ0RFRkdISktMTU5QUVJTVFVWV1hZWiJ9KSxURT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYmFzZTU4YnRjOkJFLGJhc2U1OGZsaWNrcjpQRX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxSRT1xZSh7cHJlZml4OiJtIixuYW1lOiJiYXNlNjQiLGFscGhhYmV0OiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixiaXRzUGVyQ2hhcjo2fSksQ0U9cWUoe3ByZWZpeDoiTSIsbmFtZToiYmFzZTY0cGFkIixhbHBoYWJldDoiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLGJpdHNQZXJDaGFyOjZ9KSxVRT1xZSh7cHJlZml4OiJ1IixuYW1lOiJiYXNlNjR1cmwiLGFscGhhYmV0OiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fIixiaXRzUGVyQ2hhcjo2fSksTkU9cWUoe3ByZWZpeDoiVSIsbmFtZToiYmFzZTY0dXJscGFkIixhbHBoYWJldDoiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktXz0iLGJpdHNQZXJDaGFyOjZ9KSxMRT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYmFzZTY0OlJFLGJhc2U2NHBhZDpDRSxiYXNlNjR1cmw6VUUsYmFzZTY0dXJscGFkOk5FfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLHlkPUFycmF5LmZyb20oIvCfmoDwn6qQ4piE8J+bsPCfjIzwn4yR8J+MkvCfjJPwn4yU8J+MlfCfjJbwn4yX8J+MmPCfjI3wn4yP8J+MjvCfkInimIDwn5K78J+WpfCfkr7wn5K/8J+YguKdpPCfmI3wn6Sj8J+YivCfmY/wn5KV8J+YrfCfmJjwn5GN8J+YhfCfkY/wn5iB8J+UpfCfpbDwn5KU8J+SlvCfkpnwn5ii8J+klPCfmIbwn5mE8J+SqvCfmInimLrwn5GM8J+kl/Cfkpzwn5iU8J+YjvCfmIfwn4y58J+kpvCfjonwn5Ke4pyM4pyo8J+kt/CfmLHwn5iM8J+MuPCfmYzwn5iL8J+Sl/Cfkprwn5iP8J+Sm/CfmYLwn5KT8J+kqfCfmITwn5iA8J+WpPCfmIPwn5Kv8J+ZiPCfkYfwn4628J+YkvCfpK3inaPwn5ic8J+Si/CfkYDwn5iq8J+YkfCfkqXwn5mL8J+YnvCfmKnwn5ih8J+kqvCfkYrwn6Wz8J+YpfCfpKTwn5GJ8J+Sg/CfmLPinIvwn5ia8J+YnfCfmLTwn4yf8J+YrPCfmYPwn42A8J+Mt/CfmLvwn5iT4q2Q4pyF8J+luvCfjIjwn5iI8J+kmPCfkqbinJTwn5ij8J+Pg/CfkpDimLnwn46K8J+SmPCfmKDimJ3wn5iV8J+MuvCfjoLwn4y78J+YkPCflpXwn5Kd8J+ZivCfmLnwn5ej8J+Sq/CfkoDwn5GR8J+OtfCfpJ7wn5ib8J+UtPCfmKTwn4y88J+Yq+KavfCfpJnimJXwn4+G8J+kq/CfkYjwn5iu8J+ZhvCfjbvwn42D8J+QtvCfkoHwn5iy8J+Mv/Cfp6Hwn46B4pqh8J+MnvCfjojinYzinIrwn5GL8J+YsPCfpKjwn5i28J+knfCfmrbwn5Kw8J+Nk/CfkqLwn6Sf8J+ZgfCfmqjwn5Ko8J+krOKciPCfjoDwn4268J+kk/CfmJnwn5Kf8J+MsfCfmJbwn5G28J+ltOKWtuKeoeKdk/Cfko7wn5K44qyH8J+YqPCfjJrwn6aL8J+Yt/CflbrimqDwn5mF8J+Yn/CfmLXwn5GO8J+ksvCfpKDwn6Sn8J+TjPCflLXwn5KF8J+nkPCfkL7wn42S8J+Yl/CfpJHwn4yK8J+kr/CfkLfimI7wn5Kn8J+Yr/Cfkobwn5GG8J+OpPCfmYfwn42R4p2E8J+MtPCfkqPwn5C48J+SjPCfk43wn6WA8J+kovCfkYXwn5Kh8J+SqfCfkZDwn5O48J+Ru/CfpJDwn6Su8J+OvPCfpbXwn5qp8J+NjvCfjYrwn5G88J+SjfCfk6Pwn6WCIiksRkU9eWQucmVkdWNlKCh0LGUscik9Pih0W3JdPWUsdCksW10pLGtFPXlkLnJlZHVjZSgodCxlLHIpPT4odFtlLmNvZGVQb2ludEF0KDApXT1yLHQpLFtdKTtmdW5jdGlvbiBNRSh0KXtyZXR1cm4gdC5yZWR1Y2UoKGUscik9PihlKz1GRVtyXSxlKSwiIil9ZnVuY3Rpb24gcUUodCl7Y29uc3QgZT1bXTtmb3IoY29uc3QgciBvZiB0KXtjb25zdCBuPWtFW3IuY29kZVBvaW50QXQoMCldO2lmKG49PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBOb24tYmFzZTI1NmVtb2ppIGNoYXJhY3RlcjogJHtyfWApO2UucHVzaChuKX1yZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZSl9Y29uc3QgakU9X28oe3ByZWZpeDoi8J+agCIsbmFtZToiYmFzZTI1NmVtb2ppIixlbmNvZGU6TUUsZGVjb2RlOnFFfSksekU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGJhc2UyNTZlbW9qaTpqRX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTtuZXcgVGV4dEVuY29kZXI7bmV3IFRleHREZWNvZGVyO2NvbnN0IHdsPXsuLi5hRSwuLi51RSwuLi5oRSwuLi5kRSwuLi55RSwuLi5BRSwuLi4kRSwuLi5URSwuLi5MRSwuLi56RX07ZnVuY3Rpb24gamModCl7cmV0dXJuIGdsb2JhbFRoaXMuQnVmZmVyIT1udWxsP25ldyBVaW50OEFycmF5KHQuYnVmZmVyLHQuYnl0ZU9mZnNldCx0LmJ5dGVMZW5ndGgpOnR9ZnVuY3Rpb24gd2QodD0wKXtyZXR1cm4gZ2xvYmFsVGhpcy5CdWZmZXIhPW51bGwmJmdsb2JhbFRoaXMuQnVmZmVyLmFsbG9jVW5zYWZlIT1udWxsP2pjKGdsb2JhbFRoaXMuQnVmZmVyLmFsbG9jVW5zYWZlKHQpKTpuZXcgVWludDhBcnJheSh0KX1mdW5jdGlvbiBtZCh0LGUscixuKXtyZXR1cm57bmFtZTp0LHByZWZpeDplLGVuY29kZXI6e25hbWU6dCxwcmVmaXg6ZSxlbmNvZGU6cn0sZGVjb2Rlcjp7ZGVjb2RlOm59fX1jb25zdCBtbD1tZCgidXRmOCIsInUiLHQ9PiJ1IituZXcgVGV4dERlY29kZXIoInV0ZjgiKS5kZWNvZGUodCksdD0+bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHQuc3Vic3RyaW5nKDEpKSksc2E9bWQoImFzY2lpIiwiYSIsdD0+e2xldCBlPSJhIjtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyllKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbcl0pO3JldHVybiBlfSx0PT57dD10LnN1YnN0cmluZygxKTtjb25zdCBlPXdkKHQubGVuZ3RoKTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyllW3JdPXQuY2hhckNvZGVBdChyKTtyZXR1cm4gZX0pLGJkPXt1dGY4Om1sLCJ1dGYtOCI6bWwsaGV4OndsLmJhc2UxNixsYXRpbjE6c2EsYXNjaWk6c2EsYmluYXJ5OnNhLC4uLndsfTtmdW5jdGlvbiBaZSh0LGU9InV0ZjgiKXtjb25zdCByPWJkW2VdO2lmKCFyKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZW5jb2RpbmcgIiR7ZX0iYCk7cmV0dXJuKGU9PT0idXRmOCJ8fGU9PT0idXRmLTgiKSYmZ2xvYmFsVGhpcy5CdWZmZXIhPW51bGwmJmdsb2JhbFRoaXMuQnVmZmVyLmZyb20hPW51bGw/amMoZ2xvYmFsVGhpcy5CdWZmZXIuZnJvbSh0LCJ1dGYtOCIpKTpyLmRlY29kZXIuZGVjb2RlKGAke3IucHJlZml4fSR7dH1gKX12YXIgYmw9ZnVuY3Rpb24odCxlLHIpe2lmKHJ8fGFyZ3VtZW50cy5sZW5ndGg9PT0yKWZvcih2YXIgbj0wLGk9ZS5sZW5ndGgscztuPGk7bisrKShzfHwhKG4gaW4gZSkpJiYoc3x8KHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSwwLG4pKSxzW25dPWVbbl0pO3JldHVybiB0LmNvbmNhdChzfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlKSl9LEhFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIsbil7dGhpcy5uYW1lPWUsdGhpcy52ZXJzaW9uPXIsdGhpcy5vcz1uLHRoaXMudHlwZT0iYnJvd3NlciJ9cmV0dXJuIHR9KCksS0U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3RoaXMudmVyc2lvbj1lLHRoaXMudHlwZT0ibm9kZSIsdGhpcy5uYW1lPSJub2RlIix0aGlzLm9zPV90LnBsYXRmb3JtfXJldHVybiB0fSgpLFZFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIsbixpKXt0aGlzLm5hbWU9ZSx0aGlzLnZlcnNpb249cix0aGlzLm9zPW4sdGhpcy5ib3Q9aSx0aGlzLnR5cGU9ImJvdC1kZXZpY2UifXJldHVybiB0fSgpLFdFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMudHlwZT0iYm90Iix0aGlzLmJvdD0hMCx0aGlzLm5hbWU9ImJvdCIsdGhpcy52ZXJzaW9uPW51bGwsdGhpcy5vcz1udWxsfXJldHVybiB0fSgpLEdFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMudHlwZT0icmVhY3QtbmF0aXZlIix0aGlzLm5hbWU9InJlYWN0LW5hdGl2ZSIsdGhpcy52ZXJzaW9uPW51bGwsdGhpcy5vcz1udWxsfXJldHVybiB0fSgpLFlFPS9hbGV4YXxib3R8Y3Jhd2woZXJ8aW5nKXxmYWNlYm9va2V4dGVybmFsaGl0fGZlZWRidXJuZXJ8Z29vZ2xlIHdlYiBwcmV2aWV3fG5hZ2lvc3xwb3N0cmFua3xwaW5nZG9tfHNsdXJwfHNwaWRlcnx5YWhvbyF8eWFuZGV4LyxaRT0vKG51aGt8Y3VybHxHb29nbGVib3R8WWFtbXlib3R8T3BlbmJvdHxTbHVycHxNU05Cb3R8QXNrXCBKZWV2ZXNcL1Rlb21hfGlhX2FyY2hpdmVyKS8sRWw9MyxYRT1bWyJhb2wiLC9BT0xTaGllbGRcLyhbMC05XC5fXSspL10sWyJlZGdlIiwvRWRnZVwvKFswLTlcLl9dKykvXSxbImVkZ2UtaW9zIiwvRWRnaU9TXC8oWzAtOVwuX10rKS9dLFsieWFuZGV4YnJvd3NlciIsL1lhQnJvd3NlclwvKFswLTlcLl9dKykvXSxbImtha2FvdGFsayIsL0tBS0FPVEFMS1xzKFswLTlcLl0rKS9dLFsic2Ftc3VuZyIsL1NhbXN1bmdCcm93c2VyXC8oWzAtOVwuXSspL10sWyJzaWxrIiwvXGJTaWxrXC8oWzAtOS5fLV0rKVxiL10sWyJtaXVpIiwvTWl1aUJyb3dzZXJcLyhbMC05XC5dKykkL10sWyJiZWFrZXIiLC9CZWFrZXJCcm93c2VyXC8oWzAtOVwuXSspL10sWyJlZGdlLWNocm9taXVtIiwvRWRnQT9cLyhbMC05XC5dKykvXSxbImNocm9taXVtLXdlYnZpZXciLC8oPyFDaHJvbS4qT1BSKXd2XCkuKkNocm9tKD86ZXxpdW0pXC8oWzAtOVwuXSspKDo/XHN8JCkvXSxbImNocm9tZSIsLyg/IUNocm9tLipPUFIpQ2hyb20oPzplfGl1bSlcLyhbMC05XC5dKykoOj9cc3wkKS9dLFsicGhhbnRvbWpzIiwvUGhhbnRvbUpTXC8oWzAtOVwuXSspKDo/XHN8JCkvXSxbImNyaW9zIiwvQ3JpT1NcLyhbMC05XC5dKykoOj9cc3wkKS9dLFsiZmlyZWZveCIsL0ZpcmVmb3hcLyhbMC05XC5dKykoPzpcc3wkKS9dLFsiZnhpb3MiLC9GeGlPU1wvKFswLTlcLl0rKS9dLFsib3BlcmEtbWluaSIsL09wZXJhIE1pbmkuKlZlcnNpb25cLyhbMC05XC5dKykvXSxbIm9wZXJhIiwvT3BlcmFcLyhbMC05XC5dKykoPzpcc3wkKS9dLFsib3BlcmEiLC9PUFJcLyhbMC05XC5dKykoOj9cc3wkKS9dLFsicGllIiwvXk1pY3Jvc29mdCBQb2NrZXQgSW50ZXJuZXQgRXhwbG9yZXJcLyhcZCtcLlxkKykkL10sWyJwaWUiLC9eTW96aWxsYVwvXGRcLlxkK1xzXChjb21wYXRpYmxlO1xzKD86TVNQP0lFfE1TSW50ZXJuZXQgRXhwbG9yZXIpIChcZCtcLlxkKyk7LipXaW5kb3dzIENFLipcKSQvXSxbIm5ldGZyb250IiwvXk1vemlsbGFcL1xkXC5cZCsuKk5ldEZyb250XC8oXGQuXGQpL10sWyJpZSIsL1RyaWRlbnRcLzdcLjAuKnJ2XDooWzAtOVwuXSspLipcKS4qR2Vja28kL10sWyJpZSIsL01TSUVccyhbMC05XC5dKyk7LipUcmlkZW50XC9bNC03XS4wL10sWyJpZSIsL01TSUVccyg3XC4wKS9dLFsiYmIxMCIsL0JCMTA7XHNUb3VjaC4qVmVyc2lvblwvKFswLTlcLl0rKS9dLFsiYW5kcm9pZCIsL0FuZHJvaWRccyhbMC05XC5dKykvXSxbImlvcyIsL1ZlcnNpb25cLyhbMC05XC5fXSspLipNb2JpbGUuKlNhZmFyaS4qL10sWyJzYWZhcmkiLC9WZXJzaW9uXC8oWzAtOVwuX10rKS4qU2FmYXJpL10sWyJmYWNlYm9vayIsL0ZCW0FTXVZcLyhbMC05XC5dKykvXSxbImluc3RhZ3JhbSIsL0luc3RhZ3JhbVxzKFswLTlcLl0rKS9dLFsiaW9zLXdlYnZpZXciLC9BcHBsZVdlYktpdFwvKFswLTlcLl0rKS4qTW9iaWxlL10sWyJpb3Mtd2VidmlldyIsL0FwcGxlV2ViS2l0XC8oWzAtOVwuXSspLipHZWNrb1wpJC9dLFsiY3VybCIsL15jdXJsXC8oWzAtOVwuXSspJC9dLFsic2VhcmNoYm90IixZRV1dLHZsPVtbImlPUyIsL2lQKGhvbmV8b2R8YWQpL10sWyJBbmRyb2lkIE9TIiwvQW5kcm9pZC9dLFsiQmxhY2tCZXJyeSBPUyIsL0JsYWNrQmVycnl8QkIxMC9dLFsiV2luZG93cyBNb2JpbGUiLC9JRU1vYmlsZS9dLFsiQW1hem9uIE9TIiwvS2luZGxlL10sWyJXaW5kb3dzIDMuMTEiLC9XaW4xNi9dLFsiV2luZG93cyA5NSIsLyhXaW5kb3dzIDk1KXwoV2luOTUpfChXaW5kb3dzXzk1KS9dLFsiV2luZG93cyA5OCIsLyhXaW5kb3dzIDk4KXwoV2luOTgpL10sWyJXaW5kb3dzIDIwMDAiLC8oV2luZG93cyBOVCA1LjApfChXaW5kb3dzIDIwMDApL10sWyJXaW5kb3dzIFhQIiwvKFdpbmRvd3MgTlQgNS4xKXwoV2luZG93cyBYUCkvXSxbIldpbmRvd3MgU2VydmVyIDIwMDMiLC8oV2luZG93cyBOVCA1LjIpL10sWyJXaW5kb3dzIFZpc3RhIiwvKFdpbmRvd3MgTlQgNi4wKS9dLFsiV2luZG93cyA3IiwvKFdpbmRvd3MgTlQgNi4xKS9dLFsiV2luZG93cyA4IiwvKFdpbmRvd3MgTlQgNi4yKS9dLFsiV2luZG93cyA4LjEiLC8oV2luZG93cyBOVCA2LjMpL10sWyJXaW5kb3dzIDEwIiwvKFdpbmRvd3MgTlQgMTAuMCkvXSxbIldpbmRvd3MgTUUiLC9XaW5kb3dzIE1FL10sWyJXaW5kb3dzIENFIiwvV2luZG93cyBDRXxXaW5DRXxNaWNyb3NvZnQgUG9ja2V0IEludGVybmV0IEV4cGxvcmVyL10sWyJPcGVuIEJTRCIsL09wZW5CU0QvXSxbIlN1biBPUyIsL1N1bk9TL10sWyJDaHJvbWUgT1MiLC9Dck9TL10sWyJMaW51eCIsLyhMaW51eCl8KFgxMSkvXSxbIk1hYyBPUyIsLyhNYWNfUG93ZXJQQyl8KE1hY2ludG9zaCkvXSxbIlFOWCIsL1FOWC9dLFsiQmVPUyIsL0JlT1MvXSxbIk9TLzIiLC9PU1wvMi9dXTtmdW5jdGlvbiBKRSh0KXtyZXR1cm4gdHlwZW9mIGRvY3VtZW50PiJ1IiYmdHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0PT09IlJlYWN0TmF0aXZlIj9uZXcgR0U6dHlwZW9mIG5hdmlnYXRvcjwidSI/ZXYobmF2aWdhdG9yLnVzZXJBZ2VudCk6cnYoKX1mdW5jdGlvbiBRRSh0KXtyZXR1cm4gdCE9PSIiJiZYRS5yZWR1Y2UoZnVuY3Rpb24oZSxyKXt2YXIgbj1yWzBdLGk9clsxXTtpZihlKXJldHVybiBlO3ZhciBzPWkuZXhlYyh0KTtyZXR1cm4hIXMmJltuLHNdfSwhMSl9ZnVuY3Rpb24gZXYodCl7dmFyIGU9UUUodCk7aWYoIWUpcmV0dXJuIG51bGw7dmFyIHI9ZVswXSxuPWVbMV07aWYocj09PSJzZWFyY2hib3QiKXJldHVybiBuZXcgV0U7dmFyIGk9blsxXSYmblsxXS5zcGxpdCgiLiIpLmpvaW4oIl8iKS5zcGxpdCgiXyIpLnNsaWNlKDAsMyk7aT9pLmxlbmd0aDxFbCYmKGk9YmwoYmwoW10saSwhMCksbnYoRWwtaS5sZW5ndGgpLCEwKSk6aT1bXTt2YXIgcz1pLmpvaW4oIi4iKSxvPXR2KHQpLGE9WkUuZXhlYyh0KTtyZXR1cm4gYSYmYVsxXT9uZXcgVkUocixzLG8sYVsxXSk6bmV3IEhFKHIscyxvKX1mdW5jdGlvbiB0dih0KXtmb3IodmFyIGU9MCxyPXZsLmxlbmd0aDtlPHI7ZSsrKXt2YXIgbj12bFtlXSxpPW5bMF0scz1uWzFdLG89cy5leGVjKHQpO2lmKG8pcmV0dXJuIGl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcnYoKXt2YXIgdD10eXBlb2YgX3Q8InUiJiZfdC52ZXJzaW9uO3JldHVybiB0P25ldyBLRShfdC52ZXJzaW9uLnNsaWNlKDEpKTpudWxsfWZ1bmN0aW9uIG52KHQpe2Zvcih2YXIgZT1bXSxyPTA7cjx0O3IrKyllLnB1c2goIjAiKTtyZXR1cm4gZX12YXIgZ2U9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KGdlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtnZS5nZXRMb2NhbFN0b3JhZ2U9Z2UuZ2V0TG9jYWxTdG9yYWdlT3JUaHJvdz1nZS5nZXRDcnlwdG89Z2UuZ2V0Q3J5cHRvT3JUaHJvdz1FZD1nZS5nZXRMb2NhdGlvbj1nZS5nZXRMb2NhdGlvbk9yVGhyb3c9emM9Z2UuZ2V0TmF2aWdhdG9yPWdlLmdldE5hdmlnYXRvck9yVGhyb3c9U249Z2UuZ2V0RG9jdW1lbnQ9Z2UuZ2V0RG9jdW1lbnRPclRocm93PWdlLmdldEZyb21XaW5kb3dPclRocm93PWdlLmdldEZyb21XaW5kb3c9dm9pZCAwO2Z1bmN0aW9uIFJuKHQpe2xldCBlO3JldHVybiB0eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvd1t0XTwidSImJihlPXdpbmRvd1t0XSksZX1nZS5nZXRGcm9tV2luZG93PVJuO2Z1bmN0aW9uIGZpKHQpe2NvbnN0IGU9Um4odCk7aWYoIWUpdGhyb3cgbmV3IEVycm9yKGAke3R9IGlzIG5vdCBkZWZpbmVkIGluIFdpbmRvd2ApO3JldHVybiBlfWdlLmdldEZyb21XaW5kb3dPclRocm93PWZpO2Z1bmN0aW9uIGl2KCl7cmV0dXJuIGZpKCJkb2N1bWVudCIpfWdlLmdldERvY3VtZW50T3JUaHJvdz1pdjtmdW5jdGlvbiBzdigpe3JldHVybiBSbigiZG9jdW1lbnQiKX12YXIgU249Z2UuZ2V0RG9jdW1lbnQ9c3Y7ZnVuY3Rpb24gb3YoKXtyZXR1cm4gZmkoIm5hdmlnYXRvciIpfWdlLmdldE5hdmlnYXRvck9yVGhyb3c9b3Y7ZnVuY3Rpb24gYXYoKXtyZXR1cm4gUm4oIm5hdmlnYXRvciIpfXZhciB6Yz1nZS5nZXROYXZpZ2F0b3I9YXY7ZnVuY3Rpb24gY3YoKXtyZXR1cm4gZmkoImxvY2F0aW9uIil9Z2UuZ2V0TG9jYXRpb25PclRocm93PWN2O2Z1bmN0aW9uIHV2KCl7cmV0dXJuIFJuKCJsb2NhdGlvbiIpfXZhciBFZD1nZS5nZXRMb2NhdGlvbj11djtmdW5jdGlvbiBsdigpe3JldHVybiBmaSgiY3J5cHRvIil9Z2UuZ2V0Q3J5cHRvT3JUaHJvdz1sdjtmdW5jdGlvbiBodigpe3JldHVybiBSbigiY3J5cHRvIil9Z2UuZ2V0Q3J5cHRvPWh2O2Z1bmN0aW9uIGZ2KCl7cmV0dXJuIGZpKCJsb2NhbFN0b3JhZ2UiKX1nZS5nZXRMb2NhbFN0b3JhZ2VPclRocm93PWZ2O2Z1bmN0aW9uIGR2KCl7cmV0dXJuIFJuKCJsb2NhbFN0b3JhZ2UiKX1nZS5nZXRMb2NhbFN0b3JhZ2U9ZHY7dmFyIEhjPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShIYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHZkPUhjLmdldFdpbmRvd01ldGFkYXRhPXZvaWQgMDtjb25zdCB4bD1nZTtmdW5jdGlvbiBwdigpe2xldCB0LGU7dHJ5e3Q9eGwuZ2V0RG9jdW1lbnRPclRocm93KCksZT14bC5nZXRMb2NhdGlvbk9yVGhyb3coKX1jYXRjaHtyZXR1cm4gbnVsbH1mdW5jdGlvbiByKCl7Y29uc3QgaD10LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsaW5rIikscD1bXTtmb3IobGV0IGc9MDtnPGgubGVuZ3RoO2crKyl7Y29uc3Qgdz1oW2ddLGI9dy5nZXRBdHRyaWJ1dGUoInJlbCIpO2lmKGImJmIudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJpY29uIik+LTEpe2NvbnN0IHY9dy5nZXRBdHRyaWJ1dGUoImhyZWYiKTtpZih2KWlmKHYudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJodHRwczoiKT09PS0xJiZ2LnRvTG93ZXJDYXNlKCkuaW5kZXhPZigiaHR0cDoiKT09PS0xJiZ2LmluZGV4T2YoIi8vIikhPT0wKXtsZXQgTz1lLnByb3RvY29sKyIvLyIrZS5ob3N0O2lmKHYuaW5kZXhPZigiLyIpPT09MClPKz12O2Vsc2V7Y29uc3QgRj1lLnBhdGhuYW1lLnNwbGl0KCIvIik7Ri5wb3AoKTtjb25zdCBfPUYuam9pbigiLyIpO08rPV8rIi8iK3Z9cC5wdXNoKE8pfWVsc2UgaWYodi5pbmRleE9mKCIvLyIpPT09MCl7Y29uc3QgTz1lLnByb3RvY29sK3Y7cC5wdXNoKE8pfWVsc2UgcC5wdXNoKHYpfX1yZXR1cm4gcH1mdW5jdGlvbiBuKC4uLmgpe2NvbnN0IHA9dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgibWV0YSIpO2ZvcihsZXQgZz0wO2c8cC5sZW5ndGg7ZysrKXtjb25zdCB3PXBbZ10sYj1bIml0ZW1wcm9wIiwicHJvcGVydHkiLCJuYW1lIl0ubWFwKHY9PncuZ2V0QXR0cmlidXRlKHYpKS5maWx0ZXIodj0+dj9oLmluY2x1ZGVzKHYpOiExKTtpZihiLmxlbmd0aCYmYil7Y29uc3Qgdj13LmdldEF0dHJpYnV0ZSgiY29udGVudCIpO2lmKHYpcmV0dXJuIHZ9fXJldHVybiIifWZ1bmN0aW9uIGkoKXtsZXQgaD1uKCJuYW1lIiwib2c6c2l0ZV9uYW1lIiwib2c6dGl0bGUiLCJ0d2l0dGVyOnRpdGxlIik7cmV0dXJuIGh8fChoPXQudGl0bGUpLGh9ZnVuY3Rpb24gcygpe3JldHVybiBuKCJkZXNjcmlwdGlvbiIsIm9nOmRlc2NyaXB0aW9uIiwidHdpdHRlcjpkZXNjcmlwdGlvbiIsImtleXdvcmRzIil9Y29uc3Qgbz1pKCksYT1zKCksYz1lLm9yaWdpbix1PXIoKTtyZXR1cm57ZGVzY3JpcHRpb246YSx1cmw6YyxpY29uczp1LG5hbWU6b319dmQ9SGMuZ2V0V2luZG93TWV0YWRhdGE9cHY7Y29uc3QgbXM9QmlnSW50KDIqKjMyLTEpLF9sPUJpZ0ludCgzMik7ZnVuY3Rpb24geGQodCxlPSExKXtyZXR1cm4gZT97aDpOdW1iZXIodCZtcyksbDpOdW1iZXIodD4+X2wmbXMpfTp7aDpOdW1iZXIodD4+X2wmbXMpfDAsbDpOdW1iZXIodCZtcyl8MH19ZnVuY3Rpb24gX2QodCxlPSExKXtjb25zdCByPXQubGVuZ3RoO2xldCBuPW5ldyBVaW50MzJBcnJheShyKSxpPW5ldyBVaW50MzJBcnJheShyKTtmb3IobGV0IHM9MDtzPHI7cysrKXtjb25zdHtoOm8sbDphfT14ZCh0W3NdLGUpO1tuW3NdLGlbc11dPVtvLGFdfXJldHVybltuLGldfWNvbnN0IElsPSh0LGUscik9PnQ+Pj5yLFNsPSh0LGUscik9PnQ8PDMyLXJ8ZT4+PnIsTXI9KHQsZSxyKT0+dD4+PnJ8ZTw8MzItcixxcj0odCxlLHIpPT50PDwzMi1yfGU+Pj5yLFBpPSh0LGUscik9PnQ8PDY0LXJ8ZT4+PnItMzIsVGk9KHQsZSxyKT0+dD4+PnItMzJ8ZTw8NjQtcixndj0odCxlKT0+ZSx5dj0odCxlKT0+dCx3dj0odCxlLHIpPT50PDxyfGU+Pj4zMi1yLG12PSh0LGUscik9PmU8PHJ8dD4+PjMyLXIsYnY9KHQsZSxyKT0+ZTw8ci0zMnx0Pj4+NjQtcixFdj0odCxlLHIpPT50PDxyLTMyfGU+Pj42NC1yO2Z1bmN0aW9uIFB0KHQsZSxyLG4pe2NvbnN0IGk9KGU+Pj4wKSsobj4+PjApO3JldHVybntoOnQrcisoaS8yKiozMnwwKXwwLGw6aXwwfX1jb25zdCBLYz0odCxlLHIpPT4odD4+PjApKyhlPj4+MCkrKHI+Pj4wKSxWYz0odCxlLHIsbik9PmUrcituKyh0LzIqKjMyfDApfDAsdnY9KHQsZSxyLG4pPT4odD4+PjApKyhlPj4+MCkrKHI+Pj4wKSsobj4+PjApLHh2PSh0LGUscixuLGkpPT5lK3IrbitpKyh0LzIqKjMyfDApfDAsX3Y9KHQsZSxyLG4saSk9Pih0Pj4+MCkrKGU+Pj4wKSsocj4+PjApKyhuPj4+MCkrKGk+Pj4wKSxJdj0odCxlLHIsbixpLHMpPT5lK3IrbitpK3MrKHQvMioqMzJ8MCl8MCxqbj10eXBlb2YgZ2xvYmFsVGhpcz09Im9iamVjdCImJiJjcnlwdG8iaW4gZ2xvYmFsVGhpcz9nbG9iYWxUaGlzLmNyeXB0bzp2b2lkIDA7LyohIG5vYmxlLWhhc2hlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqL2Z1bmN0aW9uIElvKHQpe3JldHVybiB0IGluc3RhbmNlb2YgVWludDhBcnJheXx8QXJyYXlCdWZmZXIuaXNWaWV3KHQpJiZ0LmNvbnN0cnVjdG9yLm5hbWU9PT0iVWludDhBcnJheSJ9ZnVuY3Rpb24gSXIodCl7aWYoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHQpfHx0PDApdGhyb3cgbmV3IEVycm9yKCJwb3NpdGl2ZSBpbnRlZ2VyIGV4cGVjdGVkLCBnb3QgIit0KX1mdW5jdGlvbiBMdCh0LC4uLmUpe2lmKCFJbyh0KSl0aHJvdyBuZXcgRXJyb3IoIlVpbnQ4QXJyYXkgZXhwZWN0ZWQiKTtpZihlLmxlbmd0aD4wJiYhZS5pbmNsdWRlcyh0Lmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKCJVaW50OEFycmF5IGV4cGVjdGVkIG9mIGxlbmd0aCAiK2UrIiwgZ290IGxlbmd0aD0iK3QubGVuZ3RoKX1mdW5jdGlvbiBTbyh0KXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uInx8dHlwZW9mIHQuY3JlYXRlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiSGFzaCBzaG91bGQgYmUgd3JhcHBlZCBieSB1dGlscy5jcmVhdGVIYXNoZXIiKTtJcih0Lm91dHB1dExlbiksSXIodC5ibG9ja0xlbil9ZnVuY3Rpb24gWHIodCxlPSEwKXtpZih0LmRlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIkhhc2ggaW5zdGFuY2UgaGFzIGJlZW4gZGVzdHJveWVkIik7aWYoZSYmdC5maW5pc2hlZCl0aHJvdyBuZXcgRXJyb3IoIkhhc2gjZGlnZXN0KCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQiKX1mdW5jdGlvbiBXYyh0LGUpe0x0KHQpO2NvbnN0IHI9ZS5vdXRwdXRMZW47aWYodC5sZW5ndGg8cil0aHJvdyBuZXcgRXJyb3IoImRpZ2VzdEludG8oKSBleHBlY3RzIG91dHB1dCBidWZmZXIgb2YgbGVuZ3RoIGF0IGxlYXN0ICIrcil9ZnVuY3Rpb24gemkodCl7cmV0dXJuIG5ldyBVaW50MzJBcnJheSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQsTWF0aC5mbG9vcih0LmJ5dGVMZW5ndGgvNCkpfWZ1bmN0aW9uIEl0KC4uLnQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0uZmlsbCgwKX1mdW5jdGlvbiBvYSh0KXtyZXR1cm4gbmV3IERhdGFWaWV3KHQuYnVmZmVyLHQuYnl0ZU9mZnNldCx0LmJ5dGVMZW5ndGgpfWZ1bmN0aW9uIE10KHQsZSl7cmV0dXJuIHQ8PDMyLWV8dD4+PmV9Y29uc3QgSWQ9bmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQzMkFycmF5KFsyODc0NTQwMjBdKS5idWZmZXIpWzBdPT09Njg7ZnVuY3Rpb24gU2QodCl7cmV0dXJuIHQ8PDI0JjQyNzgxOTAwODB8dDw8OCYxNjcxMTY4MHx0Pj4+OCY2NTI4MHx0Pj4+MjQmMjU1fWNvbnN0IGZyPUlkP3Q9PnQ6dD0+U2QodCk7ZnVuY3Rpb24gU3YodCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXT1TZCh0W2VdKTtyZXR1cm4gdH1jb25zdCBqcj1JZD90PT50OlN2LEFkPXR5cGVvZiBVaW50OEFycmF5LmZyb20oW10pLnRvSGV4PT0iZnVuY3Rpb24iJiZ0eXBlb2YgVWludDhBcnJheS5mcm9tSGV4PT0iZnVuY3Rpb24iLEF2PUFycmF5LmZyb20oe2xlbmd0aDoyNTZ9LCh0LGUpPT5lLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIikpO2Z1bmN0aW9uIGVpKHQpe2lmKEx0KHQpLEFkKXJldHVybiB0LnRvSGV4KCk7bGV0IGU9IiI7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspZSs9QXZbdFtyXV07cmV0dXJuIGV9Y29uc3QgYXI9e18wOjQ4LF85OjU3LEE6NjUsRjo3MCxhOjk3LGY6MTAyfTtmdW5jdGlvbiBBbCh0KXtpZih0Pj1hci5fMCYmdDw9YXIuXzkpcmV0dXJuIHQtYXIuXzA7aWYodD49YXIuQSYmdDw9YXIuRilyZXR1cm4gdC0oYXIuQS0xMCk7aWYodD49YXIuYSYmdDw9YXIuZilyZXR1cm4gdC0oYXIuYS0xMCl9ZnVuY3Rpb24gR3ModCl7aWYodHlwZW9mIHQhPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiaGV4IHN0cmluZyBleHBlY3RlZCwgZ290ICIrdHlwZW9mIHQpO2lmKEFkKXJldHVybiBVaW50OEFycmF5LmZyb21IZXgodCk7Y29uc3QgZT10Lmxlbmd0aCxyPWUvMjtpZihlJTIpdGhyb3cgbmV3IEVycm9yKCJoZXggc3RyaW5nIGV4cGVjdGVkLCBnb3QgdW5wYWRkZWQgaGV4IG9mIGxlbmd0aCAiK2UpO2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkocik7Zm9yKGxldCBpPTAscz0wO2k8cjtpKysscys9Mil7Y29uc3Qgbz1BbCh0LmNoYXJDb2RlQXQocykpLGE9QWwodC5jaGFyQ29kZUF0KHMrMSkpO2lmKG89PT12b2lkIDB8fGE9PT12b2lkIDApe2NvbnN0IGM9dFtzXSt0W3MrMV07dGhyb3cgbmV3IEVycm9yKCdoZXggc3RyaW5nIGV4cGVjdGVkLCBnb3Qgbm9uLWhleCBjaGFyYWN0ZXIgIicrYysnIiBhdCBpbmRleCAnK3MpfW5baV09byoxNithfXJldHVybiBufWZ1bmN0aW9uIER2KHQpe2lmKHR5cGVvZiB0IT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoInN0cmluZyBleHBlY3RlZCIpO3JldHVybiBuZXcgVWludDhBcnJheShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodCkpfWZ1bmN0aW9uIE50KHQpe3JldHVybiB0eXBlb2YgdD09InN0cmluZyImJih0PUR2KHQpKSxMdCh0KSx0fWZ1bmN0aW9uIEtyKC4uLnQpe2xldCBlPTA7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IGk9dFtuXTtMdChpKSxlKz1pLmxlbmd0aH1jb25zdCByPW5ldyBVaW50OEFycmF5KGUpO2ZvcihsZXQgbj0wLGk9MDtuPHQubGVuZ3RoO24rKyl7Y29uc3Qgcz10W25dO3Iuc2V0KHMsaSksaSs9cy5sZW5ndGh9cmV0dXJuIHJ9bGV0IEFvPWNsYXNze307ZnVuY3Rpb24gdHModCl7Y29uc3QgZT1uPT50KCkudXBkYXRlKE50KG4pKS5kaWdlc3QoKSxyPXQoKTtyZXR1cm4gZS5vdXRwdXRMZW49ci5vdXRwdXRMZW4sZS5ibG9ja0xlbj1yLmJsb2NrTGVuLGUuY3JlYXRlPSgpPT50KCksZX1mdW5jdGlvbiBPdih0KXtjb25zdCBlPShuLGkpPT50KGkpLnVwZGF0ZShOdChuKSkuZGlnZXN0KCkscj10KHt9KTtyZXR1cm4gZS5vdXRwdXRMZW49ci5vdXRwdXRMZW4sZS5ibG9ja0xlbj1yLmJsb2NrTGVuLGUuY3JlYXRlPW49PnQobiksZX1mdW5jdGlvbiBDbih0PTMyKXtpZihqbiYmdHlwZW9mIGpuLmdldFJhbmRvbVZhbHVlcz09ImZ1bmN0aW9uIilyZXR1cm4gam4uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KHQpKTtpZihqbiYmdHlwZW9mIGpuLnJhbmRvbUJ5dGVzPT0iZnVuY3Rpb24iKXJldHVybiBVaW50OEFycmF5LmZyb20oam4ucmFuZG9tQnl0ZXModCkpO3Rocm93IG5ldyBFcnJvcigiY3J5cHRvLmdldFJhbmRvbVZhbHVlcyBtdXN0IGJlIGRlZmluZWQiKX1jb25zdCAkdj1CaWdJbnQoMCksRWk9QmlnSW50KDEpLEJ2PUJpZ0ludCgyKSxQdj1CaWdJbnQoNyksVHY9QmlnSW50KDI1NiksUnY9QmlnSW50KDExMyksRGQ9W10sT2Q9W10sJGQ9W107Zm9yKGxldCB0PTAsZT1FaSxyPTEsbj0wO3Q8MjQ7dCsrKXtbcixuXT1bbiwoMipyKzMqbiklNV0sRGQucHVzaCgyKig1Km4rcikpLE9kLnB1c2goKHQrMSkqKHQrMikvMiU2NCk7bGV0IGk9JHY7Zm9yKGxldCBzPTA7czw3O3MrKyllPShlPDxFaV4oZT4+UHYpKlJ2KSVUdixlJkJ2JiYoaV49RWk8PChFaTw8QmlnSW50KHMpKS1FaSk7JGQucHVzaChpKX1jb25zdCBCZD1fZCgkZCwhMCksQ3Y9QmRbMF0sVXY9QmRbMV0sRGw9KHQsZSxyKT0+cj4zMj9idih0LGUscik6d3YodCxlLHIpLE9sPSh0LGUscik9PnI+MzI/RXYodCxlLHIpOm12KHQsZSxyKTtmdW5jdGlvbiBOdih0LGU9MjQpe2NvbnN0IHI9bmV3IFVpbnQzMkFycmF5KDEwKTtmb3IobGV0IG49MjQtZTtuPDI0O24rKyl7Zm9yKGxldCBvPTA7bzwxMDtvKyspcltvXT10W29dXnRbbysxMF1edFtvKzIwXV50W28rMzBdXnRbbys0MF07Zm9yKGxldCBvPTA7bzwxMDtvKz0yKXtjb25zdCBhPShvKzgpJTEwLGM9KG8rMiklMTAsdT1yW2NdLGw9cltjKzFdLGg9RGwodSxsLDEpXnJbYV0scD1PbCh1LGwsMSleclthKzFdO2ZvcihsZXQgZz0wO2c8NTA7Zys9MTApdFtvK2ddXj1oLHRbbytnKzFdXj1wfWxldCBpPXRbMl0scz10WzNdO2ZvcihsZXQgbz0wO288MjQ7bysrKXtjb25zdCBhPU9kW29dLGM9RGwoaSxzLGEpLHU9T2woaSxzLGEpLGw9RGRbb107aT10W2xdLHM9dFtsKzFdLHRbbF09Yyx0W2wrMV09dX1mb3IobGV0IG89MDtvPDUwO28rPTEwKXtmb3IobGV0IGE9MDthPDEwO2ErKylyW2FdPXRbbythXTtmb3IobGV0IGE9MDthPDEwO2ErKyl0W28rYV1ePX5yWyhhKzIpJTEwXSZyWyhhKzQpJTEwXX10WzBdXj1DdltuXSx0WzFdXj1VdltuXX1JdChyKX1sZXQgTHY9Y2xhc3MgUGQgZXh0ZW5kcyBBb3tjb25zdHJ1Y3RvcihlLHIsbixpPSExLHM9MjQpe2lmKHN1cGVyKCksdGhpcy5wb3M9MCx0aGlzLnBvc091dD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5lbmFibGVYT0Y9ITEsdGhpcy5ibG9ja0xlbj1lLHRoaXMuc3VmZml4PXIsdGhpcy5vdXRwdXRMZW49bix0aGlzLmVuYWJsZVhPRj1pLHRoaXMucm91bmRzPXMsSXIobiksISgwPGUmJmU8MjAwKSl0aHJvdyBuZXcgRXJyb3IoIm9ubHkga2VjY2FrLWYxNjAwIGZ1bmN0aW9uIGlzIHN1cHBvcnRlZCIpO3RoaXMuc3RhdGU9bmV3IFVpbnQ4QXJyYXkoMjAwKSx0aGlzLnN0YXRlMzI9emkodGhpcy5zdGF0ZSl9Y2xvbmUoKXtyZXR1cm4gdGhpcy5fY2xvbmVJbnRvKCl9a2VjY2FrKCl7anIodGhpcy5zdGF0ZTMyKSxOdih0aGlzLnN0YXRlMzIsdGhpcy5yb3VuZHMpLGpyKHRoaXMuc3RhdGUzMiksdGhpcy5wb3NPdXQ9MCx0aGlzLnBvcz0wfXVwZGF0ZShlKXtYcih0aGlzKSxlPU50KGUpLEx0KGUpO2NvbnN0e2Jsb2NrTGVuOnIsc3RhdGU6bn09dGhpcyxpPWUubGVuZ3RoO2ZvcihsZXQgcz0wO3M8aTspe2NvbnN0IG89TWF0aC5taW4oci10aGlzLnBvcyxpLXMpO2ZvcihsZXQgYT0wO2E8bzthKyspblt0aGlzLnBvcysrXV49ZVtzKytdO3RoaXMucG9zPT09ciYmdGhpcy5rZWNjYWsoKX1yZXR1cm4gdGhpc31maW5pc2goKXtpZih0aGlzLmZpbmlzaGVkKXJldHVybjt0aGlzLmZpbmlzaGVkPSEwO2NvbnN0e3N0YXRlOmUsc3VmZml4OnIscG9zOm4sYmxvY2tMZW46aX09dGhpcztlW25dXj1yLHImMTI4JiZuPT09aS0xJiZ0aGlzLmtlY2NhaygpLGVbaS0xXV49MTI4LHRoaXMua2VjY2FrKCl9d3JpdGVJbnRvKGUpe1hyKHRoaXMsITEpLEx0KGUpLHRoaXMuZmluaXNoKCk7Y29uc3Qgcj10aGlzLnN0YXRlLHtibG9ja0xlbjpufT10aGlzO2ZvcihsZXQgaT0wLHM9ZS5sZW5ndGg7aTxzOyl7dGhpcy5wb3NPdXQ+PW4mJnRoaXMua2VjY2FrKCk7Y29uc3Qgbz1NYXRoLm1pbihuLXRoaXMucG9zT3V0LHMtaSk7ZS5zZXQoci5zdWJhcnJheSh0aGlzLnBvc091dCx0aGlzLnBvc091dCtvKSxpKSx0aGlzLnBvc091dCs9byxpKz1vfXJldHVybiBlfXhvZkludG8oZSl7aWYoIXRoaXMuZW5hYmxlWE9GKXRocm93IG5ldyBFcnJvcigiWE9GIGlzIG5vdCBwb3NzaWJsZSBmb3IgdGhpcyBpbnN0YW5jZSIpO3JldHVybiB0aGlzLndyaXRlSW50byhlKX14b2YoZSl7cmV0dXJuIElyKGUpLHRoaXMueG9mSW50byhuZXcgVWludDhBcnJheShlKSl9ZGlnZXN0SW50byhlKXtpZihXYyhlLHRoaXMpLHRoaXMuZmluaXNoZWQpdGhyb3cgbmV3IEVycm9yKCJkaWdlc3QoKSB3YXMgYWxyZWFkeSBjYWxsZWQiKTtyZXR1cm4gdGhpcy53cml0ZUludG8oZSksdGhpcy5kZXN0cm95KCksZX1kaWdlc3QoKXtyZXR1cm4gdGhpcy5kaWdlc3RJbnRvKG5ldyBVaW50OEFycmF5KHRoaXMub3V0cHV0TGVuKSl9ZGVzdHJveSgpe3RoaXMuZGVzdHJveWVkPSEwLEl0KHRoaXMuc3RhdGUpfV9jbG9uZUludG8oZSl7Y29uc3R7YmxvY2tMZW46cixzdWZmaXg6bixvdXRwdXRMZW46aSxyb3VuZHM6cyxlbmFibGVYT0Y6b309dGhpcztyZXR1cm4gZXx8KGU9bmV3IFBkKHIsbixpLG8scykpLGUuc3RhdGUzMi5zZXQodGhpcy5zdGF0ZTMyKSxlLnBvcz10aGlzLnBvcyxlLnBvc091dD10aGlzLnBvc091dCxlLmZpbmlzaGVkPXRoaXMuZmluaXNoZWQsZS5yb3VuZHM9cyxlLnN1ZmZpeD1uLGUub3V0cHV0TGVuPWksZS5lbmFibGVYT0Y9byxlLmRlc3Ryb3llZD10aGlzLmRlc3Ryb3llZCxlfX07Y29uc3QgRnY9KHQsZSxyKT0+dHMoKCk9Pm5ldyBMdihlLHQscikpLGt2PUZ2KDEsMTM2LDI1Ni84KSxNdj0iMC4xLjEiO2Z1bmN0aW9uIHF2KCl7cmV0dXJuIE12fWNsYXNzIG1lIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSxyPXt9KXtjb25zdCBuPSgoKT0+e2lmKHIuY2F1c2UgaW5zdGFuY2VvZiBtZSl7aWYoci5jYXVzZS5kZXRhaWxzKXJldHVybiByLmNhdXNlLmRldGFpbHM7aWYoci5jYXVzZS5zaG9ydE1lc3NhZ2UpcmV0dXJuIHIuY2F1c2Uuc2hvcnRNZXNzYWdlfXJldHVybiByLmNhdXNlJiYiZGV0YWlscyJpbiByLmNhdXNlJiZ0eXBlb2Ygci5jYXVzZS5kZXRhaWxzPT0ic3RyaW5nIj9yLmNhdXNlLmRldGFpbHM6ci5jYXVzZT8ubWVzc2FnZT9yLmNhdXNlLm1lc3NhZ2U6ci5kZXRhaWxzfSkoKSxpPXIuY2F1c2UgaW5zdGFuY2VvZiBtZSYmci5jYXVzZS5kb2NzUGF0aHx8ci5kb2NzUGF0aCxvPWBodHRwczovL294bGliLnNoJHtpPz8iIn1gLGE9W2V8fCJBbiBlcnJvciBvY2N1cnJlZC4iLC4uLnIubWV0YU1lc3NhZ2VzP1siIiwuLi5yLm1ldGFNZXNzYWdlc106W10sLi4ubnx8aT9bIiIsbj9gRGV0YWlsczogJHtufWA6dm9pZCAwLGk/YFNlZTogJHtvfWA6dm9pZCAwXTpbXV0uZmlsdGVyKGM9PnR5cGVvZiBjPT0ic3RyaW5nIikuam9pbihgCmApO3N1cGVyKGEsci5jYXVzZT97Y2F1c2U6ci5jYXVzZX06dm9pZCAwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiZGV0YWlscyIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJkb2NzIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImRvY3NQYXRoIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInNob3J0TWVzc2FnZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJjYXVzZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJuYW1lIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6IkJhc2VFcnJvciJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidmVyc2lvbiIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmBveEAke3F2KCl9YH0pLHRoaXMuY2F1c2U9ci5jYXVzZSx0aGlzLmRldGFpbHM9bix0aGlzLmRvY3M9byx0aGlzLmRvY3NQYXRoPWksdGhpcy5zaG9ydE1lc3NhZ2U9ZX13YWxrKGUpe3JldHVybiBUZCh0aGlzLGUpfX1mdW5jdGlvbiBUZCh0LGUpe3JldHVybiBlPy4odCk/dDp0JiZ0eXBlb2YgdD09Im9iamVjdCImJiJjYXVzZSJpbiB0JiZ0LmNhdXNlP1RkKHQuY2F1c2UsZSk6ZT9udWxsOnR9Y29uc3Qgem49dHlwZW9mIGdsb2JhbFRoaXM9PSJvYmplY3QiJiYiY3J5cHRvImluIGdsb2JhbFRoaXM/Z2xvYmFsVGhpcy5jcnlwdG86dm9pZCAwOy8qISBub2JsZS1oYXNoZXMgLSBNSVQgTGljZW5zZSAoYykgMjAyMiBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKi9mdW5jdGlvbiBqdih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEFycmF5QnVmZmVyLmlzVmlldyh0KSYmdC5jb25zdHJ1Y3Rvci5uYW1lPT09IlVpbnQ4QXJyYXkifWZ1bmN0aW9uIEhpKHQpe2lmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcih0KXx8dDwwKXRocm93IG5ldyBFcnJvcigicG9zaXRpdmUgaW50ZWdlciBleHBlY3RlZCwgZ290ICIrdCl9ZnVuY3Rpb24gQW4odCwuLi5lKXtpZighanYodCkpdGhyb3cgbmV3IEVycm9yKCJVaW50OEFycmF5IGV4cGVjdGVkIik7aWYoZS5sZW5ndGg+MCYmIWUuaW5jbHVkZXModC5sZW5ndGgpKXRocm93IG5ldyBFcnJvcigiVWludDhBcnJheSBleHBlY3RlZCBvZiBsZW5ndGggIitlKyIsIGdvdCBsZW5ndGg9Iit0Lmxlbmd0aCl9ZnVuY3Rpb24genYodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiJ8fHR5cGVvZiB0LmNyZWF0ZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoIkhhc2ggc2hvdWxkIGJlIHdyYXBwZWQgYnkgdXRpbHMuY3JlYXRlSGFzaGVyIik7SGkodC5vdXRwdXRMZW4pLEhpKHQuYmxvY2tMZW4pfWZ1bmN0aW9uIG9pKHQsZT0hMCl7aWYodC5kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJIYXNoIGluc3RhbmNlIGhhcyBiZWVuIGRlc3Ryb3llZCIpO2lmKGUmJnQuZmluaXNoZWQpdGhyb3cgbmV3IEVycm9yKCJIYXNoI2RpZ2VzdCgpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIil9ZnVuY3Rpb24gUmQodCxlKXtBbih0KTtjb25zdCByPWUub3V0cHV0TGVuO2lmKHQubGVuZ3RoPHIpdGhyb3cgbmV3IEVycm9yKCJkaWdlc3RJbnRvKCkgZXhwZWN0cyBvdXRwdXQgYnVmZmVyIG9mIGxlbmd0aCBhdCBsZWFzdCAiK3IpfWZ1bmN0aW9uIEh2KHQpe3JldHVybiBuZXcgVWludDMyQXJyYXkodC5idWZmZXIsdC5ieXRlT2Zmc2V0LE1hdGguZmxvb3IodC5ieXRlTGVuZ3RoLzQpKX1mdW5jdGlvbiBhaSguLi50KXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLmZpbGwoMCl9ZnVuY3Rpb24gYWEodCl7cmV0dXJuIG5ldyBEYXRhVmlldyh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKX1mdW5jdGlvbiBxdCh0LGUpe3JldHVybiB0PDwzMi1lfHQ+Pj5lfWNvbnN0IEt2PW5ldyBVaW50OEFycmF5KG5ldyBVaW50MzJBcnJheShbMjg3NDU0MDIwXSkuYnVmZmVyKVswXT09PTY4O2Z1bmN0aW9uIFZ2KHQpe3JldHVybiB0PDwyNCY0Mjc4MTkwMDgwfHQ8PDgmMTY3MTE2ODB8dD4+PjgmNjUyODB8dD4+PjI0JjI1NX1mdW5jdGlvbiBXdih0KXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdPVZ2KHRbZV0pO3JldHVybiB0fWNvbnN0ICRsPUt2P3Q9PnQ6V3Y7ZnVuY3Rpb24gR3YodCl7aWYodHlwZW9mIHQhPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigic3RyaW5nIGV4cGVjdGVkIik7cmV0dXJuIG5ldyBVaW50OEFycmF5KG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0KSl9ZnVuY3Rpb24gRG8odCl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIiYmKHQ9R3YodCkpLEFuKHQpLHR9ZnVuY3Rpb24gWXYoLi4udCl7bGV0IGU9MDtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7Y29uc3QgaT10W25dO0FuKGkpLGUrPWkubGVuZ3RofWNvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoZSk7Zm9yKGxldCBuPTAsaT0wO248dC5sZW5ndGg7bisrKXtjb25zdCBzPXRbbl07ci5zZXQocyxpKSxpKz1zLmxlbmd0aH1yZXR1cm4gcn1jbGFzcyBHY3t9ZnVuY3Rpb24gQ2QodCl7Y29uc3QgZT1uPT50KCkudXBkYXRlKERvKG4pKS5kaWdlc3QoKSxyPXQoKTtyZXR1cm4gZS5vdXRwdXRMZW49ci5vdXRwdXRMZW4sZS5ibG9ja0xlbj1yLmJsb2NrTGVuLGUuY3JlYXRlPSgpPT50KCksZX1mdW5jdGlvbiBadih0PTMyKXtpZih6biYmdHlwZW9mIHpuLmdldFJhbmRvbVZhbHVlcz09ImZ1bmN0aW9uIilyZXR1cm4gem4uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KHQpKTtpZih6biYmdHlwZW9mIHpuLnJhbmRvbUJ5dGVzPT0iZnVuY3Rpb24iKXJldHVybiBVaW50OEFycmF5LmZyb20oem4ucmFuZG9tQnl0ZXModCkpO3Rocm93IG5ldyBFcnJvcigiY3J5cHRvLmdldFJhbmRvbVZhbHVlcyBtdXN0IGJlIGRlZmluZWQiKX1mdW5jdGlvbiBYdih0LGUscixuKXtpZih0eXBlb2YgdC5zZXRCaWdVaW50NjQ9PSJmdW5jdGlvbiIpcmV0dXJuIHQuc2V0QmlnVWludDY0KGUscixuKTtjb25zdCBpPUJpZ0ludCgzMikscz1CaWdJbnQoNDI5NDk2NzI5NSksbz1OdW1iZXIocj4+aSZzKSxhPU51bWJlcihyJnMpLGM9bj80OjAsdT1uPzA6NDt0LnNldFVpbnQzMihlK2MsbyxuKSx0LnNldFVpbnQzMihlK3UsYSxuKX1mdW5jdGlvbiBKdih0LGUscil7cmV0dXJuIHQmZV5+dCZyfWZ1bmN0aW9uIFF2KHQsZSxyKXtyZXR1cm4gdCZlXnQmcl5lJnJ9bGV0IGUyPWNsYXNzIGV4dGVuZHMgR2N7Y29uc3RydWN0b3IoZSxyLG4saSl7c3VwZXIoKSx0aGlzLmZpbmlzaGVkPSExLHRoaXMubGVuZ3RoPTAsdGhpcy5wb3M9MCx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmJsb2NrTGVuPWUsdGhpcy5vdXRwdXRMZW49cix0aGlzLnBhZE9mZnNldD1uLHRoaXMuaXNMRT1pLHRoaXMuYnVmZmVyPW5ldyBVaW50OEFycmF5KGUpLHRoaXMudmlldz1hYSh0aGlzLmJ1ZmZlcil9dXBkYXRlKGUpe29pKHRoaXMpLGU9RG8oZSksQW4oZSk7Y29uc3R7dmlldzpyLGJ1ZmZlcjpuLGJsb2NrTGVuOml9PXRoaXMscz1lLmxlbmd0aDtmb3IobGV0IG89MDtvPHM7KXtjb25zdCBhPU1hdGgubWluKGktdGhpcy5wb3Mscy1vKTtpZihhPT09aSl7Y29uc3QgYz1hYShlKTtmb3IoO2k8PXMtbztvKz1pKXRoaXMucHJvY2VzcyhjLG8pO2NvbnRpbnVlfW4uc2V0KGUuc3ViYXJyYXkobyxvK2EpLHRoaXMucG9zKSx0aGlzLnBvcys9YSxvKz1hLHRoaXMucG9zPT09aSYmKHRoaXMucHJvY2VzcyhyLDApLHRoaXMucG9zPTApfXJldHVybiB0aGlzLmxlbmd0aCs9ZS5sZW5ndGgsdGhpcy5yb3VuZENsZWFuKCksdGhpc31kaWdlc3RJbnRvKGUpe29pKHRoaXMpLFJkKGUsdGhpcyksdGhpcy5maW5pc2hlZD0hMDtjb25zdHtidWZmZXI6cix2aWV3Om4sYmxvY2tMZW46aSxpc0xFOnN9PXRoaXM7bGV0e3BvczpvfT10aGlzO3JbbysrXT0xMjgsYWkodGhpcy5idWZmZXIuc3ViYXJyYXkobykpLHRoaXMucGFkT2Zmc2V0PmktbyYmKHRoaXMucHJvY2VzcyhuLDApLG89MCk7Zm9yKGxldCBoPW87aDxpO2grKylyW2hdPTA7WHYobixpLTgsQmlnSW50KHRoaXMubGVuZ3RoKjgpLHMpLHRoaXMucHJvY2VzcyhuLDApO2NvbnN0IGE9YWEoZSksYz10aGlzLm91dHB1dExlbjtpZihjJTQpdGhyb3cgbmV3IEVycm9yKCJfc2hhMjogb3V0cHV0TGVuIHNob3VsZCBiZSBhbGlnbmVkIHRvIDMyYml0Iik7Y29uc3QgdT1jLzQsbD10aGlzLmdldCgpO2lmKHU+bC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJfc2hhMjogb3V0cHV0TGVuIGJpZ2dlciB0aGFuIHN0YXRlIik7Zm9yKGxldCBoPTA7aDx1O2grKylhLnNldFVpbnQzMig0KmgsbFtoXSxzKX1kaWdlc3QoKXtjb25zdHtidWZmZXI6ZSxvdXRwdXRMZW46cn09dGhpczt0aGlzLmRpZ2VzdEludG8oZSk7Y29uc3Qgbj1lLnNsaWNlKDAscik7cmV0dXJuIHRoaXMuZGVzdHJveSgpLG59X2Nsb25lSW50byhlKXtlfHwoZT1uZXcgdGhpcy5jb25zdHJ1Y3RvciksZS5zZXQoLi4udGhpcy5nZXQoKSk7Y29uc3R7YmxvY2tMZW46cixidWZmZXI6bixsZW5ndGg6aSxmaW5pc2hlZDpzLGRlc3Ryb3llZDpvLHBvczphfT10aGlzO3JldHVybiBlLmRlc3Ryb3llZD1vLGUuZmluaXNoZWQ9cyxlLmxlbmd0aD1pLGUucG9zPWEsaSVyJiZlLmJ1ZmZlci5zZXQobiksZX1jbG9uZSgpe3JldHVybiB0aGlzLl9jbG9uZUludG8oKX19O2NvbnN0IE9yPVVpbnQzMkFycmF5LmZyb20oWzE3NzkwMzM3MDMsMzE0NDEzNDI3NywxMDEzOTA0MjQyLDI3NzM0ODA3NjIsMTM1OTg5MzExOSwyNjAwODIyOTI0LDUyODczNDYzNSwxNTQxNDU5MjI1XSksYnM9QmlnSW50KDIqKjMyLTEpLEJsPUJpZ0ludCgzMik7ZnVuY3Rpb24gdDIodCxlPSExKXtyZXR1cm4gZT97aDpOdW1iZXIodCZicyksbDpOdW1iZXIodD4+QmwmYnMpfTp7aDpOdW1iZXIodD4+QmwmYnMpfDAsbDpOdW1iZXIodCZicyl8MH19ZnVuY3Rpb24gcjIodCxlPSExKXtjb25zdCByPXQubGVuZ3RoO2xldCBuPW5ldyBVaW50MzJBcnJheShyKSxpPW5ldyBVaW50MzJBcnJheShyKTtmb3IobGV0IHM9MDtzPHI7cysrKXtjb25zdHtoOm8sbDphfT10Mih0W3NdLGUpO1tuW3NdLGlbc11dPVtvLGFdfXJldHVybltuLGldfWNvbnN0IG4yPSh0LGUscik9PnQ8PHJ8ZT4+PjMyLXIsaTI9KHQsZSxyKT0+ZTw8cnx0Pj4+MzItcixzMj0odCxlLHIpPT5lPDxyLTMyfHQ+Pj42NC1yLG8yPSh0LGUscik9PnQ8PHItMzJ8ZT4+PjY0LXIsYTI9QmlnSW50KDApLHZpPUJpZ0ludCgxKSxjMj1CaWdJbnQoMiksdTI9QmlnSW50KDcpLGwyPUJpZ0ludCgyNTYpLGgyPUJpZ0ludCgxMTMpLFVkPVtdLE5kPVtdLExkPVtdO2ZvcihsZXQgdD0wLGU9dmkscj0xLG49MDt0PDI0O3QrKyl7W3Isbl09W24sKDIqciszKm4pJTVdLFVkLnB1c2goMiooNSpuK3IpKSxOZC5wdXNoKCh0KzEpKih0KzIpLzIlNjQpO2xldCBpPWEyO2ZvcihsZXQgcz0wO3M8NztzKyspZT0oZTw8dmleKGU+PnUyKSpoMiklbDIsZSZjMiYmKGlePXZpPDwodmk8PEJpZ0ludChzKSktdmkpO0xkLnB1c2goaSl9Y29uc3QgRmQ9cjIoTGQsITApLGYyPUZkWzBdLGQyPUZkWzFdLFBsPSh0LGUscik9PnI+MzI/czIodCxlLHIpOm4yKHQsZSxyKSxUbD0odCxlLHIpPT5yPjMyP28yKHQsZSxyKTppMih0LGUscik7ZnVuY3Rpb24gcDIodCxlPTI0KXtjb25zdCByPW5ldyBVaW50MzJBcnJheSgxMCk7Zm9yKGxldCBuPTI0LWU7bjwyNDtuKyspe2ZvcihsZXQgbz0wO288MTA7bysrKXJbb109dFtvXV50W28rMTBdXnRbbysyMF1edFtvKzMwXV50W28rNDBdO2ZvcihsZXQgbz0wO288MTA7bys9Mil7Y29uc3QgYT0obys4KSUxMCxjPShvKzIpJTEwLHU9cltjXSxsPXJbYysxXSxoPVBsKHUsbCwxKV5yW2FdLHA9VGwodSxsLDEpXnJbYSsxXTtmb3IobGV0IGc9MDtnPDUwO2crPTEwKXRbbytnXV49aCx0W28rZysxXV49cH1sZXQgaT10WzJdLHM9dFszXTtmb3IobGV0IG89MDtvPDI0O28rKyl7Y29uc3QgYT1OZFtvXSxjPVBsKGkscyxhKSx1PVRsKGkscyxhKSxsPVVkW29dO2k9dFtsXSxzPXRbbCsxXSx0W2xdPWMsdFtsKzFdPXV9Zm9yKGxldCBvPTA7bzw1MDtvKz0xMCl7Zm9yKGxldCBhPTA7YTwxMDthKyspclthXT10W28rYV07Zm9yKGxldCBhPTA7YTwxMDthKyspdFtvK2FdXj1+clsoYSsyKSUxMF0mclsoYSs0KSUxMF19dFswXV49ZjJbbl0sdFsxXV49ZDJbbl19YWkocil9Y2xhc3MgWWMgZXh0ZW5kcyBHY3tjb25zdHJ1Y3RvcihlLHIsbixpPSExLHM9MjQpe2lmKHN1cGVyKCksdGhpcy5wb3M9MCx0aGlzLnBvc091dD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5lbmFibGVYT0Y9ITEsdGhpcy5ibG9ja0xlbj1lLHRoaXMuc3VmZml4PXIsdGhpcy5vdXRwdXRMZW49bix0aGlzLmVuYWJsZVhPRj1pLHRoaXMucm91bmRzPXMsSGkobiksISgwPGUmJmU8MjAwKSl0aHJvdyBuZXcgRXJyb3IoIm9ubHkga2VjY2FrLWYxNjAwIGZ1bmN0aW9uIGlzIHN1cHBvcnRlZCIpO3RoaXMuc3RhdGU9bmV3IFVpbnQ4QXJyYXkoMjAwKSx0aGlzLnN0YXRlMzI9SHYodGhpcy5zdGF0ZSl9Y2xvbmUoKXtyZXR1cm4gdGhpcy5fY2xvbmVJbnRvKCl9a2VjY2FrKCl7JGwodGhpcy5zdGF0ZTMyKSxwMih0aGlzLnN0YXRlMzIsdGhpcy5yb3VuZHMpLCRsKHRoaXMuc3RhdGUzMiksdGhpcy5wb3NPdXQ9MCx0aGlzLnBvcz0wfXVwZGF0ZShlKXtvaSh0aGlzKSxlPURvKGUpLEFuKGUpO2NvbnN0e2Jsb2NrTGVuOnIsc3RhdGU6bn09dGhpcyxpPWUubGVuZ3RoO2ZvcihsZXQgcz0wO3M8aTspe2NvbnN0IG89TWF0aC5taW4oci10aGlzLnBvcyxpLXMpO2ZvcihsZXQgYT0wO2E8bzthKyspblt0aGlzLnBvcysrXV49ZVtzKytdO3RoaXMucG9zPT09ciYmdGhpcy5rZWNjYWsoKX1yZXR1cm4gdGhpc31maW5pc2goKXtpZih0aGlzLmZpbmlzaGVkKXJldHVybjt0aGlzLmZpbmlzaGVkPSEwO2NvbnN0e3N0YXRlOmUsc3VmZml4OnIscG9zOm4sYmxvY2tMZW46aX09dGhpcztlW25dXj1yLHImMTI4JiZuPT09aS0xJiZ0aGlzLmtlY2NhaygpLGVbaS0xXV49MTI4LHRoaXMua2VjY2FrKCl9d3JpdGVJbnRvKGUpe29pKHRoaXMsITEpLEFuKGUpLHRoaXMuZmluaXNoKCk7Y29uc3Qgcj10aGlzLnN0YXRlLHtibG9ja0xlbjpufT10aGlzO2ZvcihsZXQgaT0wLHM9ZS5sZW5ndGg7aTxzOyl7dGhpcy5wb3NPdXQ+PW4mJnRoaXMua2VjY2FrKCk7Y29uc3Qgbz1NYXRoLm1pbihuLXRoaXMucG9zT3V0LHMtaSk7ZS5zZXQoci5zdWJhcnJheSh0aGlzLnBvc091dCx0aGlzLnBvc091dCtvKSxpKSx0aGlzLnBvc091dCs9byxpKz1vfXJldHVybiBlfXhvZkludG8oZSl7aWYoIXRoaXMuZW5hYmxlWE9GKXRocm93IG5ldyBFcnJvcigiWE9GIGlzIG5vdCBwb3NzaWJsZSBmb3IgdGhpcyBpbnN0YW5jZSIpO3JldHVybiB0aGlzLndyaXRlSW50byhlKX14b2YoZSl7cmV0dXJuIEhpKGUpLHRoaXMueG9mSW50byhuZXcgVWludDhBcnJheShlKSl9ZGlnZXN0SW50byhlKXtpZihSZChlLHRoaXMpLHRoaXMuZmluaXNoZWQpdGhyb3cgbmV3IEVycm9yKCJkaWdlc3QoKSB3YXMgYWxyZWFkeSBjYWxsZWQiKTtyZXR1cm4gdGhpcy53cml0ZUludG8oZSksdGhpcy5kZXN0cm95KCksZX1kaWdlc3QoKXtyZXR1cm4gdGhpcy5kaWdlc3RJbnRvKG5ldyBVaW50OEFycmF5KHRoaXMub3V0cHV0TGVuKSl9ZGVzdHJveSgpe3RoaXMuZGVzdHJveWVkPSEwLGFpKHRoaXMuc3RhdGUpfV9jbG9uZUludG8oZSl7Y29uc3R7YmxvY2tMZW46cixzdWZmaXg6bixvdXRwdXRMZW46aSxyb3VuZHM6cyxlbmFibGVYT0Y6b309dGhpcztyZXR1cm4gZXx8KGU9bmV3IFljKHIsbixpLG8scykpLGUuc3RhdGUzMi5zZXQodGhpcy5zdGF0ZTMyKSxlLnBvcz10aGlzLnBvcyxlLnBvc091dD10aGlzLnBvc091dCxlLmZpbmlzaGVkPXRoaXMuZmluaXNoZWQsZS5yb3VuZHM9cyxlLnN1ZmZpeD1uLGUub3V0cHV0TGVuPWksZS5lbmFibGVYT0Y9byxlLmRlc3Ryb3llZD10aGlzLmRlc3Ryb3llZCxlfX1jb25zdCBnMj0odCxlLHIpPT5DZCgoKT0+bmV3IFljKGUsdCxyKSkseTI9ZzIoMSwxMzYsMjU2LzgpLHcyPVVpbnQzMkFycmF5LmZyb20oWzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0pLCRyPW5ldyBVaW50MzJBcnJheSg2NCk7bGV0IG0yPWNsYXNzIGV4dGVuZHMgZTJ7Y29uc3RydWN0b3IoZT0zMil7c3VwZXIoNjQsZSw4LCExKSx0aGlzLkE9T3JbMF18MCx0aGlzLkI9T3JbMV18MCx0aGlzLkM9T3JbMl18MCx0aGlzLkQ9T3JbM118MCx0aGlzLkU9T3JbNF18MCx0aGlzLkY9T3JbNV18MCx0aGlzLkc9T3JbNl18MCx0aGlzLkg9T3JbN118MH1nZXQoKXtjb25zdHtBOmUsQjpyLEM6bixEOmksRTpzLEY6byxHOmEsSDpjfT10aGlzO3JldHVybltlLHIsbixpLHMsbyxhLGNdfXNldChlLHIsbixpLHMsbyxhLGMpe3RoaXMuQT1lfDAsdGhpcy5CPXJ8MCx0aGlzLkM9bnwwLHRoaXMuRD1pfDAsdGhpcy5FPXN8MCx0aGlzLkY9b3wwLHRoaXMuRz1hfDAsdGhpcy5IPWN8MH1wcm9jZXNzKGUscil7Zm9yKGxldCBoPTA7aDwxNjtoKysscis9NCkkcltoXT1lLmdldFVpbnQzMihyLCExKTtmb3IobGV0IGg9MTY7aDw2NDtoKyspe2NvbnN0IHA9JHJbaC0xNV0sZz0kcltoLTJdLHc9cXQocCw3KV5xdChwLDE4KV5wPj4+MyxiPXF0KGcsMTcpXnF0KGcsMTkpXmc+Pj4xMDskcltoXT1iKyRyW2gtN10rdyskcltoLTE2XXwwfWxldHtBOm4sQjppLEM6cyxEOm8sRTphLEY6YyxHOnUsSDpsfT10aGlzO2ZvcihsZXQgaD0wO2g8NjQ7aCsrKXtjb25zdCBwPXF0KGEsNilecXQoYSwxMSlecXQoYSwyNSksZz1sK3ArSnYoYSxjLHUpK3cyW2hdKyRyW2hdfDAsYj0ocXQobiwyKV5xdChuLDEzKV5xdChuLDIyKSkrUXYobixpLHMpfDA7bD11LHU9YyxjPWEsYT1vK2d8MCxvPXMscz1pLGk9bixuPWcrYnwwfW49bit0aGlzLkF8MCxpPWkrdGhpcy5CfDAscz1zK3RoaXMuQ3wwLG89byt0aGlzLkR8MCxhPWErdGhpcy5FfDAsYz1jK3RoaXMuRnwwLHU9dSt0aGlzLkd8MCxsPWwrdGhpcy5IfDAsdGhpcy5zZXQobixpLHMsbyxhLGMsdSxsKX1yb3VuZENsZWFuKCl7YWkoJHIpfWRlc3Ryb3koKXt0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDApLGFpKHRoaXMuYnVmZmVyKX19O2NvbnN0IGIyPUNkKCgpPT5uZXcgbTIpOy8qISBub2JsZS1jdXJ2ZXMgLSBNSVQgTGljZW5zZSAoYykgMjAyMiBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKi9jb25zdCBaYz1CaWdJbnQoMCksdGM9QmlnSW50KDEpO2Z1bmN0aW9uIHJzKHQpe3JldHVybiB0IGluc3RhbmNlb2YgVWludDhBcnJheXx8QXJyYXlCdWZmZXIuaXNWaWV3KHQpJiZ0LmNvbnN0cnVjdG9yLm5hbWU9PT0iVWludDhBcnJheSJ9ZnVuY3Rpb24gWGModCl7aWYoIXJzKHQpKXRocm93IG5ldyBFcnJvcigiVWludDhBcnJheSBleHBlY3RlZCIpfWZ1bmN0aW9uIEtpKHQsZSl7aWYodHlwZW9mIGUhPSJib29sZWFuIil0aHJvdyBuZXcgRXJyb3IodCsiIGJvb2xlYW4gZXhwZWN0ZWQsIGdvdCAiK2UpfWZ1bmN0aW9uIEVzKHQpe2NvbnN0IGU9dC50b1N0cmluZygxNik7cmV0dXJuIGUubGVuZ3RoJjE/IjAiK2U6ZX1mdW5jdGlvbiBrZCh0KXtpZih0eXBlb2YgdCE9InN0cmluZyIpdGhyb3cgbmV3IEVycm9yKCJoZXggc3RyaW5nIGV4cGVjdGVkLCBnb3QgIit0eXBlb2YgdCk7cmV0dXJuIHQ9PT0iIj9aYzpCaWdJbnQoIjB4Iit0KX1jb25zdCBNZD10eXBlb2YgVWludDhBcnJheS5mcm9tKFtdKS50b0hleD09ImZ1bmN0aW9uIiYmdHlwZW9mIFVpbnQ4QXJyYXkuZnJvbUhleD09ImZ1bmN0aW9uIixFMj1BcnJheS5mcm9tKHtsZW5ndGg6MjU2fSwodCxlKT0+ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKTtmdW5jdGlvbiBWaSh0KXtpZihYYyh0KSxNZClyZXR1cm4gdC50b0hleCgpO2xldCBlPSIiO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKWUrPUUyW3Rbcl1dO3JldHVybiBlfWNvbnN0IGNyPXtfMDo0OCxfOTo1NyxBOjY1LEY6NzAsYTo5NyxmOjEwMn07ZnVuY3Rpb24gUmwodCl7aWYodD49Y3IuXzAmJnQ8PWNyLl85KXJldHVybiB0LWNyLl8wO2lmKHQ+PWNyLkEmJnQ8PWNyLkYpcmV0dXJuIHQtKGNyLkEtMTApO2lmKHQ+PWNyLmEmJnQ8PWNyLmYpcmV0dXJuIHQtKGNyLmEtMTApfWZ1bmN0aW9uIFlzKHQpe2lmKHR5cGVvZiB0IT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoImhleCBzdHJpbmcgZXhwZWN0ZWQsIGdvdCAiK3R5cGVvZiB0KTtpZihNZClyZXR1cm4gVWludDhBcnJheS5mcm9tSGV4KHQpO2NvbnN0IGU9dC5sZW5ndGgscj1lLzI7aWYoZSUyKXRocm93IG5ldyBFcnJvcigiaGV4IHN0cmluZyBleHBlY3RlZCwgZ290IHVucGFkZGVkIGhleCBvZiBsZW5ndGggIitlKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHIpO2ZvcihsZXQgaT0wLHM9MDtpPHI7aSsrLHMrPTIpe2NvbnN0IG89UmwodC5jaGFyQ29kZUF0KHMpKSxhPVJsKHQuY2hhckNvZGVBdChzKzEpKTtpZihvPT09dm9pZCAwfHxhPT09dm9pZCAwKXtjb25zdCBjPXRbc10rdFtzKzFdO3Rocm93IG5ldyBFcnJvcignaGV4IHN0cmluZyBleHBlY3RlZCwgZ290IG5vbi1oZXggY2hhcmFjdGVyICInK2MrJyIgYXQgaW5kZXggJytzKX1uW2ldPW8qMTYrYX1yZXR1cm4gbn1mdW5jdGlvbiB2bih0KXtyZXR1cm4ga2QoVmkodCkpfWZ1bmN0aW9uIHFkKHQpe3JldHVybiBYYyh0KSxrZChWaShVaW50OEFycmF5LmZyb20odCkucmV2ZXJzZSgpKSl9ZnVuY3Rpb24gbnModCxlKXtyZXR1cm4gWXModC50b1N0cmluZygxNikucGFkU3RhcnQoZSoyLCIwIikpfWZ1bmN0aW9uIGpkKHQsZSl7cmV0dXJuIG5zKHQsZSkucmV2ZXJzZSgpfWZ1bmN0aW9uIEV0KHQsZSxyKXtsZXQgbjtpZih0eXBlb2YgZT09InN0cmluZyIpdHJ5e249WXMoZSl9Y2F0Y2gocyl7dGhyb3cgbmV3IEVycm9yKHQrIiBtdXN0IGJlIGhleCBzdHJpbmcgb3IgVWludDhBcnJheSwgY2F1c2U6ICIrcyl9ZWxzZSBpZihycyhlKSluPVVpbnQ4QXJyYXkuZnJvbShlKTtlbHNlIHRocm93IG5ldyBFcnJvcih0KyIgbXVzdCBiZSBoZXggc3RyaW5nIG9yIFVpbnQ4QXJyYXkiKTtjb25zdCBpPW4ubGVuZ3RoO2lmKHR5cGVvZiByPT0ibnVtYmVyIiYmaSE9PXIpdGhyb3cgbmV3IEVycm9yKHQrIiBvZiBsZW5ndGggIityKyIgZXhwZWN0ZWQsIGdvdCAiK2kpO3JldHVybiBufWZ1bmN0aW9uIFpzKC4uLnQpe2xldCBlPTA7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IGk9dFtuXTtYYyhpKSxlKz1pLmxlbmd0aH1jb25zdCByPW5ldyBVaW50OEFycmF5KGUpO2ZvcihsZXQgbj0wLGk9MDtuPHQubGVuZ3RoO24rKyl7Y29uc3Qgcz10W25dO3Iuc2V0KHMsaSksaSs9cy5sZW5ndGh9cmV0dXJuIHJ9Y29uc3QgY2E9dD0+dHlwZW9mIHQ9PSJiaWdpbnQiJiZaYzw9dDtmdW5jdGlvbiBKYyh0LGUscil7cmV0dXJuIGNhKHQpJiZjYShlKSYmY2EocikmJmU8PXQmJnQ8cn1mdW5jdGlvbiB0aSh0LGUscixuKXtpZighSmMoZSxyLG4pKXRocm93IG5ldyBFcnJvcigiZXhwZWN0ZWQgdmFsaWQgIit0KyI6ICIrcisiIDw9IG4gPCAiK24rIiwgZ290ICIrZSl9ZnVuY3Rpb24gdjIodCl7bGV0IGU7Zm9yKGU9MDt0PlpjO3Q+Pj10YyxlKz0xKTtyZXR1cm4gZX1jb25zdCBPbz10PT4odGM8PEJpZ0ludCh0KSktdGMsdWE9dD0+bmV3IFVpbnQ4QXJyYXkodCksQ2w9dD0+VWludDhBcnJheS5mcm9tKHQpO2Z1bmN0aW9uIHgyKHQsZSxyKXtpZih0eXBlb2YgdCE9Im51bWJlciJ8fHQ8Mil0aHJvdyBuZXcgRXJyb3IoImhhc2hMZW4gbXVzdCBiZSBhIG51bWJlciIpO2lmKHR5cGVvZiBlIT0ibnVtYmVyInx8ZTwyKXRocm93IG5ldyBFcnJvcigicUJ5dGVMZW4gbXVzdCBiZSBhIG51bWJlciIpO2lmKHR5cGVvZiByIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaG1hY0ZuIG11c3QgYmUgYSBmdW5jdGlvbiIpO2xldCBuPXVhKHQpLGk9dWEodCkscz0wO2NvbnN0IG89KCk9PntuLmZpbGwoMSksaS5maWxsKDApLHM9MH0sYT0oLi4uaCk9PnIoaSxuLC4uLmgpLGM9KGg9dWEoMCkpPT57aT1hKENsKFswXSksaCksbj1hKCksaC5sZW5ndGghPT0wJiYoaT1hKENsKFsxXSksaCksbj1hKCkpfSx1PSgpPT57aWYocysrPj0xZTMpdGhyb3cgbmV3IEVycm9yKCJkcmJnOiB0cmllZCAxMDAwIHZhbHVlcyIpO2xldCBoPTA7Y29uc3QgcD1bXTtmb3IoO2g8ZTspe249YSgpO2NvbnN0IGc9bi5zbGljZSgpO3AucHVzaChnKSxoKz1uLmxlbmd0aH1yZXR1cm4gWnMoLi4ucCl9O3JldHVybihoLHApPT57bygpLGMoaCk7bGV0IGc7Zm9yKDshKGc9cCh1KCkpKTspYygpO3JldHVybiBvKCksZ319Y29uc3QgXzI9e2JpZ2ludDp0PT50eXBlb2YgdD09ImJpZ2ludCIsZnVuY3Rpb246dD0+dHlwZW9mIHQ9PSJmdW5jdGlvbiIsYm9vbGVhbjp0PT50eXBlb2YgdD09ImJvb2xlYW4iLHN0cmluZzp0PT50eXBlb2YgdD09InN0cmluZyIsc3RyaW5nT3JVaW50OEFycmF5OnQ9PnR5cGVvZiB0PT0ic3RyaW5nInx8cnModCksaXNTYWZlSW50ZWdlcjp0PT5OdW1iZXIuaXNTYWZlSW50ZWdlcih0KSxhcnJheTp0PT5BcnJheS5pc0FycmF5KHQpLGZpZWxkOih0LGUpPT5lLkZwLmlzVmFsaWQodCksaGFzaDp0PT50eXBlb2YgdD09ImZ1bmN0aW9uIiYmTnVtYmVyLmlzU2FmZUludGVnZXIodC5vdXRwdXRMZW4pfTtmdW5jdGlvbiAkbyh0LGUscj17fSl7Y29uc3Qgbj0oaSxzLG8pPT57Y29uc3QgYT1fMltzXTtpZih0eXBlb2YgYSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgdmFsaWRhdG9yIGZ1bmN0aW9uIik7Y29uc3QgYz10W2ldO2lmKCEobyYmYz09PXZvaWQgMCkmJiFhKGMsdCkpdGhyb3cgbmV3IEVycm9yKCJwYXJhbSAiK1N0cmluZyhpKSsiIGlzIGludmFsaWQuIEV4cGVjdGVkICIrcysiLCBnb3QgIitjKX07Zm9yKGNvbnN0W2ksc11vZiBPYmplY3QuZW50cmllcyhlKSluKGkscywhMSk7Zm9yKGNvbnN0W2ksc11vZiBPYmplY3QuZW50cmllcyhyKSluKGkscywhMCk7cmV0dXJuIHR9ZnVuY3Rpb24gVWwodCl7Y29uc3QgZT1uZXcgV2Vha01hcDtyZXR1cm4ociwuLi5uKT0+e2NvbnN0IGk9ZS5nZXQocik7aWYoaSE9PXZvaWQgMClyZXR1cm4gaTtjb25zdCBzPXQociwuLi5uKTtyZXR1cm4gZS5zZXQocixzKSxzfX1mdW5jdGlvbiBJMih0LGUpe2lmKGtsKHQpPmUpdGhyb3cgbmV3IEsyKHtnaXZlblNpemU6a2wodCksbWF4U2l6ZTplfSl9Y29uc3QgdXI9e3plcm86NDgsbmluZTo1NyxBOjY1LEY6NzAsYTo5NyxmOjEwMn07ZnVuY3Rpb24gTmwodCl7aWYodD49dXIuemVybyYmdDw9dXIubmluZSlyZXR1cm4gdC11ci56ZXJvO2lmKHQ+PXVyLkEmJnQ8PXVyLkYpcmV0dXJuIHQtKHVyLkEtMTApO2lmKHQ+PXVyLmEmJnQ8PXVyLmYpcmV0dXJuIHQtKHVyLmEtMTApfWZ1bmN0aW9uIFMyKHQsZT17fSl7Y29uc3R7ZGlyOnIsc2l6ZTpuPTMyfT1lO2lmKG49PT0wKXJldHVybiB0O2lmKHQubGVuZ3RoPm4pdGhyb3cgbmV3IFYyKHtzaXplOnQubGVuZ3RoLHRhcmdldFNpemU6bix0eXBlOiJCeXRlcyJ9KTtjb25zdCBpPW5ldyBVaW50OEFycmF5KG4pO2ZvcihsZXQgcz0wO3M8bjtzKyspe2NvbnN0IG89cj09PSJyaWdodCI7aVtvP3M6bi1zLTFdPXRbbz9zOnQubGVuZ3RoLXMtMV19cmV0dXJuIGl9ZnVuY3Rpb24gemQodCxlKXtpZihKcih0KT5lKXRocm93IG5ldyBVMih7Z2l2ZW5TaXplOkpyKHQpLG1heFNpemU6ZX0pfWZ1bmN0aW9uIEEyKHQsZSl7aWYodHlwZW9mIGU9PSJudW1iZXIiJiZlPjAmJmU+SnIodCktMSl0aHJvdyBuZXcgVmQoe29mZnNldDplLHBvc2l0aW9uOiJzdGFydCIsc2l6ZTpKcih0KX0pfWZ1bmN0aW9uIEQyKHQsZSxyKXtpZih0eXBlb2YgZT09Im51bWJlciImJnR5cGVvZiByPT0ibnVtYmVyIiYmSnIodCkhPT1yLWUpdGhyb3cgbmV3IFZkKHtvZmZzZXQ6cixwb3NpdGlvbjoiZW5kIixzaXplOkpyKHQpfSl9ZnVuY3Rpb24gSGQodCxlPXt9KXtjb25zdHtkaXI6cixzaXplOm49MzJ9PWU7aWYobj09PTApcmV0dXJuIHQ7Y29uc3QgaT10LnJlcGxhY2UoIjB4IiwiIik7aWYoaS5sZW5ndGg+bioyKXRocm93IG5ldyBOMih7c2l6ZTpNYXRoLmNlaWwoaS5sZW5ndGgvMiksdGFyZ2V0U2l6ZTpuLHR5cGU6IkhleCJ9KTtyZXR1cm5gMHgke2lbcj09PSJyaWdodCI/InBhZEVuZCI6InBhZFN0YXJ0Il0obioyLCIwIil9YH1jb25zdCBPMj0iI19fYmlnaW50IjtmdW5jdGlvbiBRYyh0LGUscil7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQsKG4saSk9PnR5cGVvZiBpPT0iYmlnaW50Ij9pLnRvU3RyaW5nKCkrTzI6aSxyKX1jb25zdCAkMj1BcnJheS5mcm9tKHtsZW5ndGg6MjU2fSwodCxlKT0+ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKTtmdW5jdGlvbiBCMih0LGU9e30pe2NvbnN0e3N0cmljdDpyPSExfT1lO2lmKCF0KXRocm93IG5ldyBMbCh0KTtpZih0eXBlb2YgdCE9InN0cmluZyIpdGhyb3cgbmV3IExsKHQpO2lmKHImJiEvXjB4WzAtOWEtZkEtRl0qJC8udGVzdCh0KSl0aHJvdyBuZXcgRmwodCk7aWYoIXQuc3RhcnRzV2l0aCgiMHgiKSl0aHJvdyBuZXcgRmwodCl9ZnVuY3Rpb24gUDIoLi4udCl7cmV0dXJuYDB4JHt0LnJlZHVjZSgoZSxyKT0+ZStyLnJlcGxhY2UoIjB4IiwiIiksIiIpfWB9ZnVuY3Rpb24gZXUodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBVaW50OEFycmF5P1hzKHQpOkFycmF5LmlzQXJyYXkodCk/WHMobmV3IFVpbnQ4QXJyYXkodCkpOnR9ZnVuY3Rpb24gWHModCxlPXt9KXtsZXQgcj0iIjtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKylyKz0kMlt0W2ldXTtjb25zdCBuPWAweCR7cn1gO3JldHVybiB0eXBlb2YgZS5zaXplPT0ibnVtYmVyIj8oemQobixlLnNpemUpLEtkKG4sZS5zaXplKSk6bn1mdW5jdGlvbiBsYSh0LGU9e30pe2NvbnN0e3NpZ25lZDpyLHNpemU6bn09ZSxpPUJpZ0ludCh0KTtsZXQgcztuP3I/cz0oMW48PEJpZ0ludChuKSo4bi0xbiktMW46cz0ybioqKEJpZ0ludChuKSo4biktMW46dHlwZW9mIHQ9PSJudW1iZXIiJiYocz1CaWdJbnQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKTtjb25zdCBvPXR5cGVvZiBzPT0iYmlnaW50IiYmcj8tcy0xbjowO2lmKHMmJmk+c3x8aTxvKXtjb25zdCB1PXR5cGVvZiB0PT0iYmlnaW50Ij8ibiI6IiI7dGhyb3cgbmV3IEMyKHttYXg6cz9gJHtzfSR7dX1gOnZvaWQgMCxtaW46YCR7b30ke3V9YCxzaWduZWQ6cixzaXplOm4sdmFsdWU6YCR7dH0ke3V9YH0pfWNvbnN0IGM9YDB4JHsociYmaTwwPygxbjw8QmlnSW50KG4qOCkpK0JpZ0ludChpKTppKS50b1N0cmluZygxNil9YDtyZXR1cm4gbj9UMihjLG4pOmN9ZnVuY3Rpb24gVDIodCxlKXtyZXR1cm4gSGQodCx7ZGlyOiJsZWZ0IixzaXplOmV9KX1mdW5jdGlvbiBLZCh0LGUpe3JldHVybiBIZCh0LHtkaXI6InJpZ2h0IixzaXplOmV9KX1mdW5jdGlvbiBwcih0LGUscixuPXt9KXtjb25zdHtzdHJpY3Q6aX09bjtBMih0LGUpO2NvbnN0IHM9YDB4JHt0LnJlcGxhY2UoIjB4IiwiIikuc2xpY2UoKGU/PzApKjIsKHI/P3QubGVuZ3RoKSoyKX1gO3JldHVybiBpJiZEMihzLGUsciksc31mdW5jdGlvbiBKcih0KXtyZXR1cm4gTWF0aC5jZWlsKCh0Lmxlbmd0aC0yKS8yKX1mdW5jdGlvbiBSMih0LGU9e30pe2NvbnN0e3N0cmljdDpyPSExfT1lO3RyeXtyZXR1cm4gQjIodCx7c3RyaWN0OnJ9KSwhMH1jYXRjaHtyZXR1cm4hMX19Y2xhc3MgQzIgZXh0ZW5kcyBtZXtjb25zdHJ1Y3Rvcih7bWF4OmUsbWluOnIsc2lnbmVkOm4sc2l6ZTppLHZhbHVlOnN9KXtzdXBlcihgTnVtYmVyIFxgJHtzfVxgIGlzIG5vdCBpbiBzYWZlJHtpP2AgJHtpKjh9LWJpdGA6IiJ9JHtuPyIgc2lnbmVkIjoiIHVuc2lnbmVkIn0gaW50ZWdlciByYW5nZSAke2U/YChcYCR7cn1cYCB0byBcYCR7ZX1cYClgOmAoYWJvdmUgXGAke3J9XGApYH1gKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibmFtZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOiJIZXguSW50ZWdlck91dE9mUmFuZ2VFcnJvciJ9KX19Y2xhc3MgTGwgZXh0ZW5kcyBtZXtjb25zdHJ1Y3RvcihlKXtzdXBlcihgVmFsdWUgXGAke3R5cGVvZiBlPT0ib2JqZWN0Ij9RYyhlKTplfVxgIG9mIHR5cGUgXGAke3R5cGVvZiBlfVxgIGlzIGFuIGludmFsaWQgaGV4IHR5cGUuYCx7bWV0YU1lc3NhZ2VzOlsnSGV4IHR5cGVzIG11c3QgYmUgcmVwcmVzZW50ZWQgYXMgYCIweCR7c3RyaW5nfSJgLiddfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm5hbWUiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZToiSGV4LkludmFsaWRIZXhUeXBlRXJyb3IifSl9fWNsYXNzIEZsIGV4dGVuZHMgbWV7Y29uc3RydWN0b3IoZSl7c3VwZXIoYFZhbHVlIFxgJHtlfVxgIGlzIGFuIGludmFsaWQgaGV4IHZhbHVlLmAse21ldGFNZXNzYWdlczpbJ0hleCB2YWx1ZXMgbXVzdCBzdGFydCB3aXRoIGAiMHgiYCBhbmQgY29udGFpbiBvbmx5IGhleGFkZWNpbWFsIGNoYXJhY3RlcnMgKDAtOSwgYS1mLCBBLUYpLiddfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm5hbWUiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZToiSGV4LkludmFsaWRIZXhWYWx1ZUVycm9yIn0pfX1sZXQgVTI9Y2xhc3MgZXh0ZW5kcyBtZXtjb25zdHJ1Y3Rvcih7Z2l2ZW5TaXplOmUsbWF4U2l6ZTpyfSl7c3VwZXIoYFNpemUgY2Fubm90IGV4Y2VlZCBcYCR7cn1cYCBieXRlcy4gR2l2ZW4gc2l6ZTogXGAke2V9XGAgYnl0ZXMuYCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm5hbWUiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZToiSGV4LlNpemVPdmVyZmxvd0Vycm9yIn0pfX07Y2xhc3MgVmQgZXh0ZW5kcyBtZXtjb25zdHJ1Y3Rvcih7b2Zmc2V0OmUscG9zaXRpb246cixzaXplOm59KXtzdXBlcihgU2xpY2UgJHtyPT09InN0YXJ0Ij8ic3RhcnRpbmciOiJlbmRpbmcifSBhdCBvZmZzZXQgXGAke2V9XGAgaXMgb3V0LW9mLWJvdW5kcyAoc2l6ZTogXGAke259XGApLmApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJuYW1lIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6IkhleC5TbGljZU9mZnNldE91dE9mQm91bmRzRXJyb3IifSl9fWxldCBOMj1jbGFzcyBleHRlbmRzIG1le2NvbnN0cnVjdG9yKHtzaXplOmUsdGFyZ2V0U2l6ZTpyLHR5cGU6bn0pe3N1cGVyKGAke24uY2hhckF0KDApLnRvVXBwZXJDYXNlKCl9JHtuLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCl9IHNpemUgKFxgJHtlfVxgKSBleGNlZWRzIHBhZGRpbmcgc2l6ZSAoXGAke3J9XGApLmApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJuYW1lIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6IkhleC5TaXplRXhjZWVkc1BhZGRpbmdTaXplRXJyb3IifSl9fTtjb25zdCBMMj1uZXcgVGV4dEVuY29kZXI7ZnVuY3Rpb24gRjIodCl7aWYoISh0IGluc3RhbmNlb2YgVWludDhBcnJheSkpe2lmKCF0KXRocm93IG5ldyB2cyh0KTtpZih0eXBlb2YgdCE9Im9iamVjdCIpdGhyb3cgbmV3IHZzKHQpO2lmKCEoIkJZVEVTX1BFUl9FTEVNRU5UImluIHQpKXRocm93IG5ldyB2cyh0KTtpZih0LkJZVEVTX1BFUl9FTEVNRU5UIT09MXx8dC5jb25zdHJ1Y3Rvci5uYW1lIT09IlVpbnQ4QXJyYXkiKXRocm93IG5ldyB2cyh0KX19ZnVuY3Rpb24gazIodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBVaW50OEFycmF5P3Q6dHlwZW9mIHQ9PSJzdHJpbmciP3EyKHQpOk0yKHQpfWZ1bmN0aW9uIE0yKHQpe3JldHVybiB0IGluc3RhbmNlb2YgVWludDhBcnJheT90Om5ldyBVaW50OEFycmF5KHQpfWZ1bmN0aW9uIHEyKHQsZT17fSl7Y29uc3R7c2l6ZTpyfT1lO2xldCBuPXQ7ciYmKHpkKHQsciksbj1LZCh0LHIpKTtsZXQgaT1uLnNsaWNlKDIpO2kubGVuZ3RoJTImJihpPWAwJHtpfWApO2NvbnN0IHM9aS5sZW5ndGgvMixvPW5ldyBVaW50OEFycmF5KHMpO2ZvcihsZXQgYT0wLGM9MDthPHM7YSsrKXtjb25zdCB1PU5sKGkuY2hhckNvZGVBdChjKyspKSxsPU5sKGkuY2hhckNvZGVBdChjKyspKTtpZih1PT09dm9pZCAwfHxsPT09dm9pZCAwKXRocm93IG5ldyBtZShgSW52YWxpZCBieXRlIHNlcXVlbmNlICgiJHtpW2MtMl19JHtpW2MtMV19IiBpbiAiJHtpfSIpLmApO29bYV09dSoxNitsfXJldHVybiBvfWZ1bmN0aW9uIGoyKHQsZT17fSl7Y29uc3R7c2l6ZTpyfT1lLG49TDIuZW5jb2RlKHQpO3JldHVybiB0eXBlb2Ygcj09Im51bWJlciI/KEkyKG4sciksejIobixyKSk6bn1mdW5jdGlvbiB6Mih0LGUpe3JldHVybiBTMih0LHtkaXI6InJpZ2h0IixzaXplOmV9KX1mdW5jdGlvbiBrbCh0KXtyZXR1cm4gdC5sZW5ndGh9ZnVuY3Rpb24gSDIodCl7dHJ5e3JldHVybiBGMih0KSwhMH1jYXRjaHtyZXR1cm4hMX19Y2xhc3MgdnMgZXh0ZW5kcyBtZXtjb25zdHJ1Y3RvcihlKXtzdXBlcihgVmFsdWUgXGAke3R5cGVvZiBlPT0ib2JqZWN0Ij9RYyhlKTplfVxgIG9mIHR5cGUgXGAke3R5cGVvZiBlfVxgIGlzIGFuIGludmFsaWQgQnl0ZXMgdmFsdWUuYCx7bWV0YU1lc3NhZ2VzOlsiQnl0ZXMgdmFsdWVzIG11c3QgYmUgb2YgdHlwZSBgQnl0ZXNgLiJdfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm5hbWUiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZToiQnl0ZXMuSW52YWxpZEJ5dGVzVHlwZUVycm9yIn0pfX1jbGFzcyBLMiBleHRlbmRzIG1le2NvbnN0cnVjdG9yKHtnaXZlblNpemU6ZSxtYXhTaXplOnJ9KXtzdXBlcihgU2l6ZSBjYW5ub3QgZXhjZWVkIFxgJHtyfVxgIGJ5dGVzLiBHaXZlbiBzaXplOiBcYCR7ZX1cYCBieXRlcy5gKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibmFtZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOiJCeXRlcy5TaXplT3ZlcmZsb3dFcnJvciJ9KX19Y2xhc3MgVjIgZXh0ZW5kcyBtZXtjb25zdHJ1Y3Rvcih7c2l6ZTplLHRhcmdldFNpemU6cix0eXBlOm59KXtzdXBlcihgJHtuLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7bi5zbGljZSgxKS50b0xvd2VyQ2FzZSgpfSBzaXplIChcYCR7ZX1cYCkgZXhjZWVkcyBwYWRkaW5nIHNpemUgKFxgJHtyfVxgKS5gKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibmFtZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOiJCeXRlcy5TaXplRXhjZWVkc1BhZGRpbmdTaXplRXJyb3IifSl9fWZ1bmN0aW9uIFdkKHQsZT17fSl7Y29uc3R7YXM6cj10eXBlb2YgdD09InN0cmluZyI/IkhleCI6IkJ5dGVzIn09ZSxuPXkyKGsyKHQpKTtyZXR1cm4gcj09PSJCeXRlcyI/bjpYcyhuKX1jbGFzcyBXMiBleHRlbmRzIE1hcHtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJtYXhTaXplIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdGhpcy5tYXhTaXplPWV9Z2V0KGUpe2NvbnN0IHI9c3VwZXIuZ2V0KGUpO3JldHVybiBzdXBlci5oYXMoZSkmJnIhPT12b2lkIDAmJih0aGlzLmRlbGV0ZShlKSxzdXBlci5zZXQoZSxyKSkscn1zZXQoZSxyKXtpZihzdXBlci5zZXQoZSxyKSx0aGlzLm1heFNpemUmJnRoaXMuc2l6ZT50aGlzLm1heFNpemUpe2NvbnN0IG49dGhpcy5rZXlzKCkubmV4dCgpLnZhbHVlO24mJnRoaXMuZGVsZXRlKG4pfXJldHVybiB0aGlzfX1jb25zdCBHMj17Y2hlY2tzdW06bmV3IFcyKDgxOTIpfSxoYT1HMi5jaGVja3N1bTtmdW5jdGlvbiBHZCh0LGU9e30pe2NvbnN0e2NvbXByZXNzZWQ6cn09ZSx7cHJlZml4Om4seDppLHk6c309dDtpZihyPT09ITF8fHR5cGVvZiBpPT0iYmlnaW50IiYmdHlwZW9mIHM9PSJiaWdpbnQiKXtpZihuIT09NCl0aHJvdyBuZXcgTWwoe3ByZWZpeDpuLGNhdXNlOm5ldyBleH0pO3JldHVybn1pZihyPT09ITB8fHR5cGVvZiBpPT0iYmlnaW50IiYmdHlwZW9mIHM+InUiKXtpZihuIT09MyYmbiE9PTIpdGhyb3cgbmV3IE1sKHtwcmVmaXg6bixjYXVzZTpuZXcgUTJ9KTtyZXR1cm59dGhyb3cgbmV3IEoyKHtwdWJsaWNLZXk6dH0pfWZ1bmN0aW9uIFkyKHQpe2NvbnN0IGU9KCgpPT57aWYoUjIodCkpcmV0dXJuIFlkKHQpO2lmKEgyKHQpKXJldHVybiBaMih0KTtjb25zdHtwcmVmaXg6cix4Om4seTppfT10O3JldHVybiB0eXBlb2Ygbj09ImJpZ2ludCImJnR5cGVvZiBpPT0iYmlnaW50Ij97cHJlZml4OnI/PzQseDpuLHk6aX06e3ByZWZpeDpyLHg6bn19KSgpO3JldHVybiBHZChlKSxlfWZ1bmN0aW9uIFoyKHQpe3JldHVybiBZZChYcyh0KSl9ZnVuY3Rpb24gWWQodCl7aWYodC5sZW5ndGghPT0xMzImJnQubGVuZ3RoIT09MTMwJiZ0Lmxlbmd0aCE9PTY4KXRocm93IG5ldyB0eCh7cHVibGljS2V5OnR9KTtpZih0Lmxlbmd0aD09PTEzMCl7Y29uc3Qgbj1CaWdJbnQocHIodCwwLDMyKSksaT1CaWdJbnQocHIodCwzMiw2NCkpO3JldHVybntwcmVmaXg6NCx4Om4seTppfX1pZih0Lmxlbmd0aD09PTEzMil7Y29uc3Qgbj1OdW1iZXIocHIodCwwLDEpKSxpPUJpZ0ludChwcih0LDEsMzMpKSxzPUJpZ0ludChwcih0LDMzLDY1KSk7cmV0dXJue3ByZWZpeDpuLHg6aSx5OnN9fWNvbnN0IGU9TnVtYmVyKHByKHQsMCwxKSkscj1CaWdJbnQocHIodCwxLDMzKSk7cmV0dXJue3ByZWZpeDplLHg6cn19ZnVuY3Rpb24gWDIodCxlPXt9KXtHZCh0KTtjb25zdHtwcmVmaXg6cix4Om4seTppfT10LHtpbmNsdWRlUHJlZml4OnM9ITB9PWU7cmV0dXJuIFAyKHM/bGEocix7c2l6ZToxfSk6IjB4IixsYShuLHtzaXplOjMyfSksdHlwZW9mIGk9PSJiaWdpbnQiP2xhKGkse3NpemU6MzJ9KToiMHgiKX1jbGFzcyBKMiBleHRlbmRzIG1le2NvbnN0cnVjdG9yKHtwdWJsaWNLZXk6ZX0pe3N1cGVyKGBWYWx1ZSBcYCR7UWMoZSl9XGAgaXMgbm90IGEgdmFsaWQgcHVibGljIGtleS5gLHttZXRhTWVzc2FnZXM6WyJQdWJsaWMga2V5IG11c3QgY29udGFpbjoiLCItIGFuIGB4YCBhbmQgYHByZWZpeGAgdmFsdWUgKGNvbXByZXNzZWQpIiwiLSBhbiBgeGAsIGB5YCwgYW5kIGBwcmVmaXhgIHZhbHVlICh1bmNvbXByZXNzZWQpIl19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibmFtZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOiJQdWJsaWNLZXkuSW52YWxpZEVycm9yIn0pfX1jbGFzcyBNbCBleHRlbmRzIG1le2NvbnN0cnVjdG9yKHtwcmVmaXg6ZSxjYXVzZTpyfSl7c3VwZXIoYFByZWZpeCAiJHtlfSIgaXMgaW52YWxpZC5gLHtjYXVzZTpyfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm5hbWUiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZToiUHVibGljS2V5LkludmFsaWRQcmVmaXhFcnJvciJ9KX19Y2xhc3MgUTIgZXh0ZW5kcyBtZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCJQcmVmaXggbXVzdCBiZSAyIG9yIDMgZm9yIGNvbXByZXNzZWQgcHVibGljIGtleXMuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm5hbWUiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZToiUHVibGljS2V5LkludmFsaWRDb21wcmVzc2VkUHJlZml4RXJyb3IifSl9fWNsYXNzIGV4IGV4dGVuZHMgbWV7Y29uc3RydWN0b3IoKXtzdXBlcigiUHJlZml4IG11c3QgYmUgNCBmb3IgdW5jb21wcmVzc2VkIHB1YmxpYyBrZXlzLiIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJuYW1lIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6IlB1YmxpY0tleS5JbnZhbGlkVW5jb21wcmVzc2VkUHJlZml4RXJyb3IifSl9fWxldCB0eD1jbGFzcyBleHRlbmRzIG1le2NvbnN0cnVjdG9yKHtwdWJsaWNLZXk6ZX0pe3N1cGVyKGBWYWx1ZSBcYCR7ZX1cYCBpcyBhbiBpbnZhbGlkIHB1YmxpYyBrZXkgc2l6ZS5gLHttZXRhTWVzc2FnZXM6WyJFeHBlY3RlZDogMzMgYnl0ZXMgKGNvbXByZXNzZWQgKyBwcmVmaXgpLCA2NCBieXRlcyAodW5jb21wcmVzc2VkKSBvciA2NSBieXRlcyAodW5jb21wcmVzc2VkICsgcHJlZml4KS4iLGBSZWNlaXZlZCAke0pyKGV1KGUpKX0gYnl0ZXMuYF19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibmFtZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOiJQdWJsaWNLZXkuSW52YWxpZFNlcmlhbGl6ZWRTaXplRXJyb3IifSl9fTtjb25zdCByeD0vXjB4W2EtZkEtRjAtOV17NDB9JC87ZnVuY3Rpb24gWmQodCxlPXt9KXtjb25zdHtzdHJpY3Q6cj0hMH09ZTtpZighcngudGVzdCh0KSl0aHJvdyBuZXcgcWwoe2FkZHJlc3M6dCxjYXVzZTpuZXcgc3h9KTtpZihyKXtpZih0LnRvTG93ZXJDYXNlKCk9PT10KXJldHVybjtpZihYZCh0KSE9PXQpdGhyb3cgbmV3IHFsKHthZGRyZXNzOnQsY2F1c2U6bmV3IG94fSl9fWZ1bmN0aW9uIFhkKHQpe2lmKGhhLmhhcyh0KSlyZXR1cm4gaGEuZ2V0KHQpO1pkKHQse3N0cmljdDohMX0pO2NvbnN0IGU9dC5zdWJzdHJpbmcoMikudG9Mb3dlckNhc2UoKSxyPVdkKGoyKGUpLHthczoiQnl0ZXMifSksbj1lLnNwbGl0KCIiKTtmb3IobGV0IHM9MDtzPDQwO3MrPTIpcltzPj4xXT4+ND49OCYmbltzXSYmKG5bc109bltzXS50b1VwcGVyQ2FzZSgpKSwocltzPj4xXSYxNSk+PTgmJm5bcysxXSYmKG5bcysxXT1uW3MrMV0udG9VcHBlckNhc2UoKSk7Y29uc3QgaT1gMHgke24uam9pbigiIil9YDtyZXR1cm4gaGEuc2V0KHQsaSksaX1mdW5jdGlvbiBueCh0LGU9e30pe2NvbnN0e2NoZWNrc3VtOnI9ITF9PWU7cmV0dXJuIFpkKHQpLHI/WGQodCk6dH1mdW5jdGlvbiBpeCh0LGU9e30pe2NvbnN0IHI9V2QoYDB4JHtYMih0KS5zbGljZSg0KX1gKS5zdWJzdHJpbmcoMjYpO3JldHVybiBueChgMHgke3J9YCxlKX1jbGFzcyBxbCBleHRlbmRzIG1le2NvbnN0cnVjdG9yKHthZGRyZXNzOmUsY2F1c2U6cn0pe3N1cGVyKGBBZGRyZXNzICIke2V9IiBpcyBpbnZhbGlkLmAse2NhdXNlOnJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibmFtZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOiJBZGRyZXNzLkludmFsaWRBZGRyZXNzRXJyb3IifSl9fWNsYXNzIHN4IGV4dGVuZHMgbWV7Y29uc3RydWN0b3IoKXtzdXBlcigiQWRkcmVzcyBpcyBub3QgYSAyMCBieXRlICg0MCBoZXhhZGVjaW1hbCBjaGFyYWN0ZXIpIHZhbHVlLiIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJuYW1lIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6IkFkZHJlc3MuSW52YWxpZElucHV0RXJyb3IifSl9fWNsYXNzIG94IGV4dGVuZHMgbWV7Y29uc3RydWN0b3IoKXtzdXBlcigiQWRkcmVzcyBkb2VzIG5vdCBtYXRjaCBpdHMgY2hlY2tzdW0gY291bnRlcnBhcnQuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm5hbWUiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZToiQWRkcmVzcy5JbnZhbGlkQ2hlY2tzdW1FcnJvciJ9KX19bGV0IEpkPWNsYXNzIGV4dGVuZHMgR2N7Y29uc3RydWN0b3IoZSxyKXtzdXBlcigpLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsenYoZSk7Y29uc3Qgbj1EbyhyKTtpZih0aGlzLmlIYXNoPWUuY3JlYXRlKCksdHlwZW9mIHRoaXMuaUhhc2gudXBkYXRlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgaW5zdGFuY2Ugb2YgY2xhc3Mgd2hpY2ggZXh0ZW5kcyB1dGlscy5IYXNoIik7dGhpcy5ibG9ja0xlbj10aGlzLmlIYXNoLmJsb2NrTGVuLHRoaXMub3V0cHV0TGVuPXRoaXMuaUhhc2gub3V0cHV0TGVuO2NvbnN0IGk9dGhpcy5ibG9ja0xlbixzPW5ldyBVaW50OEFycmF5KGkpO3Muc2V0KG4ubGVuZ3RoPmk/ZS5jcmVhdGUoKS51cGRhdGUobikuZGlnZXN0KCk6bik7Zm9yKGxldCBvPTA7bzxzLmxlbmd0aDtvKyspc1tvXV49NTQ7dGhpcy5pSGFzaC51cGRhdGUocyksdGhpcy5vSGFzaD1lLmNyZWF0ZSgpO2ZvcihsZXQgbz0wO288cy5sZW5ndGg7bysrKXNbb11ePTEwNjt0aGlzLm9IYXNoLnVwZGF0ZShzKSxhaShzKX11cGRhdGUoZSl7cmV0dXJuIG9pKHRoaXMpLHRoaXMuaUhhc2gudXBkYXRlKGUpLHRoaXN9ZGlnZXN0SW50byhlKXtvaSh0aGlzKSxBbihlLHRoaXMub3V0cHV0TGVuKSx0aGlzLmZpbmlzaGVkPSEwLHRoaXMuaUhhc2guZGlnZXN0SW50byhlKSx0aGlzLm9IYXNoLnVwZGF0ZShlKSx0aGlzLm9IYXNoLmRpZ2VzdEludG8oZSksdGhpcy5kZXN0cm95KCl9ZGlnZXN0KCl7Y29uc3QgZT1uZXcgVWludDhBcnJheSh0aGlzLm9IYXNoLm91dHB1dExlbik7cmV0dXJuIHRoaXMuZGlnZXN0SW50byhlKSxlfV9jbG9uZUludG8oZSl7ZXx8KGU9T2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykse30pKTtjb25zdHtvSGFzaDpyLGlIYXNoOm4sZmluaXNoZWQ6aSxkZXN0cm95ZWQ6cyxibG9ja0xlbjpvLG91dHB1dExlbjphfT10aGlzO3JldHVybiBlPWUsZS5maW5pc2hlZD1pLGUuZGVzdHJveWVkPXMsZS5ibG9ja0xlbj1vLGUub3V0cHV0TGVuPWEsZS5vSGFzaD1yLl9jbG9uZUludG8oZS5vSGFzaCksZS5pSGFzaD1uLl9jbG9uZUludG8oZS5pSGFzaCksZX1jbG9uZSgpe3JldHVybiB0aGlzLl9jbG9uZUludG8oKX1kZXN0cm95KCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5vSGFzaC5kZXN0cm95KCksdGhpcy5pSGFzaC5kZXN0cm95KCl9fTtjb25zdCBRZD0odCxlLHIpPT5uZXcgSmQodCxlKS51cGRhdGUocikuZGlnZXN0KCk7UWQuY3JlYXRlPSh0LGUpPT5uZXcgSmQodCxlKTsvKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICovY29uc3Qgb3Q9QmlnSW50KDApLFhlPUJpZ0ludCgxKSx5bj1CaWdJbnQoMiksYXg9QmlnSW50KDMpLGVwPUJpZ0ludCg0KSx0cD1CaWdJbnQoNSkscnA9QmlnSW50KDgpO2Z1bmN0aW9uIGl0KHQsZSl7Y29uc3Qgcj10JWU7cmV0dXJuIHI+PW90P3I6ZStyfWZ1bmN0aW9uIHl0KHQsZSxyKXtsZXQgbj10O2Zvcig7ZS0tID5vdDspbio9bixuJT1yO3JldHVybiBufWZ1bmN0aW9uIHJjKHQsZSl7aWYodD09PW90KXRocm93IG5ldyBFcnJvcigiaW52ZXJ0OiBleHBlY3RlZCBub24temVybyBudW1iZXIiKTtpZihlPD1vdCl0aHJvdyBuZXcgRXJyb3IoImludmVydDogZXhwZWN0ZWQgcG9zaXRpdmUgbW9kdWx1cywgZ290ICIrZSk7bGV0IHI9aXQodCxlKSxuPWUsaT1vdCxzPVhlO2Zvcig7ciE9PW90Oyl7Y29uc3QgYT1uL3IsYz1uJXIsdT1pLXMqYTtuPXIscj1jLGk9cyxzPXV9aWYobiE9PVhlKXRocm93IG5ldyBFcnJvcigiaW52ZXJ0OiBkb2VzIG5vdCBleGlzdCIpO3JldHVybiBpdChpLGUpfWZ1bmN0aW9uIG5wKHQsZSl7Y29uc3Qgcj0odC5PUkRFUitYZSkvZXAsbj10LnBvdyhlLHIpO2lmKCF0LmVxbCh0LnNxcihuKSxlKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNxdWFyZSByb290Iik7cmV0dXJuIG59ZnVuY3Rpb24gY3godCxlKXtjb25zdCByPSh0Lk9SREVSLXRwKS9ycCxuPXQubXVsKGUseW4pLGk9dC5wb3cobixyKSxzPXQubXVsKGUsaSksbz10Lm11bCh0Lm11bChzLHluKSxpKSxhPXQubXVsKHMsdC5zdWIobyx0Lk9ORSkpO2lmKCF0LmVxbCh0LnNxcihhKSxlKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNxdWFyZSByb290Iik7cmV0dXJuIGF9ZnVuY3Rpb24gdXgodCl7aWYodDxCaWdJbnQoMykpdGhyb3cgbmV3IEVycm9yKCJzcXJ0IGlzIG5vdCBkZWZpbmVkIGZvciBzbWFsbCBmaWVsZCIpO2xldCBlPXQtWGUscj0wO2Zvcig7ZSV5bj09PW90OyllLz15bixyKys7bGV0IG49eW47Y29uc3QgaT10dSh0KTtmb3IoO2psKGksbik9PT0xOylpZihuKys+MWUzKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc3F1YXJlIHJvb3Q6IHByb2JhYmx5IG5vbi1wcmltZSBQIik7aWYocj09PTEpcmV0dXJuIG5wO2xldCBzPWkucG93KG4sZSk7Y29uc3Qgbz0oZStYZSkveW47cmV0dXJuIGZ1bmN0aW9uKGMsdSl7aWYoYy5pczAodSkpcmV0dXJuIHU7aWYoamwoYyx1KSE9PTEpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCIpO2xldCBsPXIsaD1jLm11bChjLk9ORSxzKSxwPWMucG93KHUsZSksZz1jLnBvdyh1LG8pO2Zvcig7IWMuZXFsKHAsYy5PTkUpOyl7aWYoYy5pczAocCkpcmV0dXJuIGMuWkVSTztsZXQgdz0xLGI9Yy5zcXIocCk7Zm9yKDshYy5lcWwoYixjLk9ORSk7KWlmKHcrKyxiPWMuc3FyKGIpLHc9PT1sKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc3F1YXJlIHJvb3QiKTtjb25zdCB2PVhlPDxCaWdJbnQobC13LTEpLE89Yy5wb3coaCx2KTtsPXcsaD1jLnNxcihPKSxwPWMubXVsKHAsaCksZz1jLm11bChnLE8pfXJldHVybiBnfX1mdW5jdGlvbiBseCh0KXtyZXR1cm4gdCVlcD09PWF4P25wOnQlcnA9PT10cD9jeDp1eCh0KX1jb25zdCBoeD1bImNyZWF0ZSIsImlzVmFsaWQiLCJpczAiLCJuZWciLCJpbnYiLCJzcXJ0Iiwic3FyIiwiZXFsIiwiYWRkIiwic3ViIiwibXVsIiwicG93IiwiZGl2IiwiYWRkTiIsInN1Yk4iLCJtdWxOIiwic3FyTiJdO2Z1bmN0aW9uIGZ4KHQpe2NvbnN0IGU9e09SREVSOiJiaWdpbnQiLE1BU0s6ImJpZ2ludCIsQllURVM6ImlzU2FmZUludGVnZXIiLEJJVFM6ImlzU2FmZUludGVnZXIifSxyPWh4LnJlZHVjZSgobixpKT0+KG5baV09ImZ1bmN0aW9uIixuKSxlKTtyZXR1cm4gJG8odCxyKX1mdW5jdGlvbiBkeCh0LGUscil7aWYocjxvdCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZXhwb25lbnQsIG5lZ2F0aXZlcyB1bnN1cHBvcnRlZCIpO2lmKHI9PT1vdClyZXR1cm4gdC5PTkU7aWYocj09PVhlKXJldHVybiBlO2xldCBuPXQuT05FLGk9ZTtmb3IoO3I+b3Q7KXImWGUmJihuPXQubXVsKG4saSkpLGk9dC5zcXIoaSkscj4+PVhlO3JldHVybiBufWZ1bmN0aW9uIGlwKHQsZSxyPSExKXtjb25zdCBuPW5ldyBBcnJheShlLmxlbmd0aCkuZmlsbChyP3QuWkVSTzp2b2lkIDApLGk9ZS5yZWR1Y2UoKG8sYSxjKT0+dC5pczAoYSk/bzoobltjXT1vLHQubXVsKG8sYSkpLHQuT05FKSxzPXQuaW52KGkpO3JldHVybiBlLnJlZHVjZVJpZ2h0KChvLGEsYyk9PnQuaXMwKGEpP286KG5bY109dC5tdWwobyxuW2NdKSx0Lm11bChvLGEpKSxzKSxufWZ1bmN0aW9uIGpsKHQsZSl7Y29uc3Qgcj0odC5PUkRFUi1YZSkveW4sbj10LnBvdyhlLHIpLGk9dC5lcWwobix0Lk9ORSkscz10LmVxbChuLHQuWkVSTyksbz10LmVxbChuLHQubmVnKHQuT05FKSk7aWYoIWkmJiFzJiYhbyl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgTGVnZW5kcmUgc3ltYm9sIHJlc3VsdCIpO3JldHVybiBpPzE6cz8wOi0xfWZ1bmN0aW9uIHNwKHQsZSl7ZSE9PXZvaWQgMCYmSGkoZSk7Y29uc3Qgcj1lIT09dm9pZCAwP2U6dC50b1N0cmluZygyKS5sZW5ndGgsbj1NYXRoLmNlaWwoci84KTtyZXR1cm57bkJpdExlbmd0aDpyLG5CeXRlTGVuZ3RoOm59fWZ1bmN0aW9uIHR1KHQsZSxyPSExLG49e30pe2lmKHQ8PW90KXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmaWVsZDogZXhwZWN0ZWQgT1JERVIgPiAwLCBnb3QgIit0KTtjb25zdHtuQml0TGVuZ3RoOmksbkJ5dGVMZW5ndGg6c309c3AodCxlKTtpZihzPjIwNDgpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZpZWxkOiBleHBlY3RlZCBPUkRFUiBvZiA8PSAyMDQ4IGJ5dGVzIik7bGV0IG87Y29uc3QgYT1PYmplY3QuZnJlZXplKHtPUkRFUjp0LGlzTEU6cixCSVRTOmksQllURVM6cyxNQVNLOk9vKGkpLFpFUk86b3QsT05FOlhlLGNyZWF0ZTpjPT5pdChjLHQpLGlzVmFsaWQ6Yz0+e2lmKHR5cGVvZiBjIT0iYmlnaW50Iil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZmllbGQgZWxlbWVudDogZXhwZWN0ZWQgYmlnaW50LCBnb3QgIit0eXBlb2YgYyk7cmV0dXJuIG90PD1jJiZjPHR9LGlzMDpjPT5jPT09b3QsaXNPZGQ6Yz0+KGMmWGUpPT09WGUsbmVnOmM9Pml0KC1jLHQpLGVxbDooYyx1KT0+Yz09PXUsc3FyOmM9Pml0KGMqYyx0KSxhZGQ6KGMsdSk9Pml0KGMrdSx0KSxzdWI6KGMsdSk9Pml0KGMtdSx0KSxtdWw6KGMsdSk9Pml0KGMqdSx0KSxwb3c6KGMsdSk9PmR4KGEsYyx1KSxkaXY6KGMsdSk9Pml0KGMqcmModSx0KSx0KSxzcXJOOmM9PmMqYyxhZGROOihjLHUpPT5jK3Usc3ViTjooYyx1KT0+Yy11LG11bE46KGMsdSk9PmMqdSxpbnY6Yz0+cmMoYyx0KSxzcXJ0Om4uc3FydHx8KGM9PihvfHwobz1seCh0KSksbyhhLGMpKSksdG9CeXRlczpjPT5yP2pkKGMscyk6bnMoYyxzKSxmcm9tQnl0ZXM6Yz0+e2lmKGMubGVuZ3RoIT09cyl0aHJvdyBuZXcgRXJyb3IoIkZpZWxkLmZyb21CeXRlczogZXhwZWN0ZWQgIitzKyIgYnl0ZXMsIGdvdCAiK2MubGVuZ3RoKTtyZXR1cm4gcj9xZChjKTp2bihjKX0saW52ZXJ0QmF0Y2g6Yz0+aXAoYSxjKSxjbW92OihjLHUsbCk9Pmw/dTpjfSk7cmV0dXJuIE9iamVjdC5mcmVlemUoYSl9ZnVuY3Rpb24gb3AodCl7aWYodHlwZW9mIHQhPSJiaWdpbnQiKXRocm93IG5ldyBFcnJvcigiZmllbGQgb3JkZXIgbXVzdCBiZSBiaWdpbnQiKTtjb25zdCBlPXQudG9TdHJpbmcoMikubGVuZ3RoO3JldHVybiBNYXRoLmNlaWwoZS84KX1mdW5jdGlvbiBhcCh0KXtjb25zdCBlPW9wKHQpO3JldHVybiBlK01hdGguY2VpbChlLzIpfWZ1bmN0aW9uIHB4KHQsZSxyPSExKXtjb25zdCBuPXQubGVuZ3RoLGk9b3AoZSkscz1hcChlKTtpZihuPDE2fHxuPHN8fG4+MTAyNCl0aHJvdyBuZXcgRXJyb3IoImV4cGVjdGVkICIrcysiLTEwMjQgYnl0ZXMgb2YgaW5wdXQsIGdvdCAiK24pO2NvbnN0IG89cj9xZCh0KTp2bih0KSxhPWl0KG8sZS1YZSkrWGU7cmV0dXJuIHI/amQoYSxpKTpucyhhLGkpfS8qISBub2JsZS1jdXJ2ZXMgLSBNSVQgTGljZW5zZSAoYykgMjAyMiBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKi9jb25zdCB6bD1CaWdJbnQoMCksbmM9QmlnSW50KDEpO2Z1bmN0aW9uIGZhKHQsZSl7Y29uc3Qgcj1lLm5lZ2F0ZSgpO3JldHVybiB0P3I6ZX1mdW5jdGlvbiBjcCh0LGUpe2lmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcih0KXx8dDw9MHx8dD5lKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCB3aW5kb3cgc2l6ZSwgZXhwZWN0ZWQgWzEuLiIrZSsiXSwgZ290IFc9Iit0KX1mdW5jdGlvbiBkYSh0LGUpe2NwKHQsZSk7Y29uc3Qgcj1NYXRoLmNlaWwoZS90KSsxLG49MioqKHQtMSksaT0yKip0LHM9T28odCksbz1CaWdJbnQodCk7cmV0dXJue3dpbmRvd3M6cix3aW5kb3dTaXplOm4sbWFzazpzLG1heE51bWJlcjppLHNoaWZ0Qnk6b319ZnVuY3Rpb24gSGwodCxlLHIpe2NvbnN0e3dpbmRvd1NpemU6bixtYXNrOmksbWF4TnVtYmVyOnMsc2hpZnRCeTpvfT1yO2xldCBhPU51bWJlcih0JmkpLGM9dD4+bzthPm4mJihhLT1zLGMrPW5jKTtjb25zdCB1PWUqbixsPXUrTWF0aC5hYnMoYSktMSxoPWE9PT0wLHA9YTwwLGc9ZSUyIT09MDtyZXR1cm57bmV4dE46YyxvZmZzZXQ6bCxpc1plcm86aCxpc05lZzpwLGlzTmVnRjpnLG9mZnNldEY6dX19ZnVuY3Rpb24gZ3godCxlKXtpZighQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgRXJyb3IoImFycmF5IGV4cGVjdGVkIik7dC5mb3JFYWNoKChyLG4pPT57aWYoIShyIGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50IGF0IGluZGV4ICIrbil9KX1mdW5jdGlvbiB5eCh0LGUpe2lmKCFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBFcnJvcigiYXJyYXkgb2Ygc2NhbGFycyBleHBlY3RlZCIpO3QuZm9yRWFjaCgocixuKT0+e2lmKCFlLmlzVmFsaWQocikpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNjYWxhciBhdCBpbmRleCAiK24pfSl9Y29uc3QgcGE9bmV3IFdlYWtNYXAsdXA9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gZ2EodCl7cmV0dXJuIHVwLmdldCh0KXx8MX1mdW5jdGlvbiB3eCh0LGUpe3JldHVybntjb25zdFRpbWVOZWdhdGU6ZmEsaGFzUHJlY29tcHV0ZXMocil7cmV0dXJuIGdhKHIpIT09MX0sdW5zYWZlTGFkZGVyKHIsbixpPXQuWkVSTyl7bGV0IHM9cjtmb3IoO24+emw7KW4mbmMmJihpPWkuYWRkKHMpKSxzPXMuZG91YmxlKCksbj4+PW5jO3JldHVybiBpfSxwcmVjb21wdXRlV2luZG93KHIsbil7Y29uc3R7d2luZG93czppLHdpbmRvd1NpemU6c309ZGEobixlKSxvPVtdO2xldCBhPXIsYz1hO2ZvcihsZXQgdT0wO3U8aTt1Kyspe2M9YSxvLnB1c2goYyk7Zm9yKGxldCBsPTE7bDxzO2wrKyljPWMuYWRkKGEpLG8ucHVzaChjKTthPWMuZG91YmxlKCl9cmV0dXJuIG99LHdOQUYocixuLGkpe2xldCBzPXQuWkVSTyxvPXQuQkFTRTtjb25zdCBhPWRhKHIsZSk7Zm9yKGxldCBjPTA7YzxhLndpbmRvd3M7YysrKXtjb25zdHtuZXh0Tjp1LG9mZnNldDpsLGlzWmVybzpoLGlzTmVnOnAsaXNOZWdGOmcsb2Zmc2V0Rjp3fT1IbChpLGMsYSk7aT11LGg/bz1vLmFkZChmYShnLG5bd10pKTpzPXMuYWRkKGZhKHAsbltsXSkpfXJldHVybntwOnMsZjpvfX0sd05BRlVuc2FmZShyLG4saSxzPXQuWkVSTyl7Y29uc3Qgbz1kYShyLGUpO2ZvcihsZXQgYT0wO2E8by53aW5kb3dzJiZpIT09emw7YSsrKXtjb25zdHtuZXh0TjpjLG9mZnNldDp1LGlzWmVybzpsLGlzTmVnOmh9PUhsKGksYSxvKTtpZihpPWMsIWwpe2NvbnN0IHA9blt1XTtzPXMuYWRkKGg/cC5uZWdhdGUoKTpwKX19cmV0dXJuIHN9LGdldFByZWNvbXB1dGVzKHIsbixpKXtsZXQgcz1wYS5nZXQobik7cmV0dXJuIHN8fChzPXRoaXMucHJlY29tcHV0ZVdpbmRvdyhuLHIpLHIhPT0xJiZwYS5zZXQobixpKHMpKSksc30sd05BRkNhY2hlZChyLG4saSl7Y29uc3Qgcz1nYShyKTtyZXR1cm4gdGhpcy53TkFGKHMsdGhpcy5nZXRQcmVjb21wdXRlcyhzLHIsaSksbil9LHdOQUZDYWNoZWRVbnNhZmUocixuLGkscyl7Y29uc3Qgbz1nYShyKTtyZXR1cm4gbz09PTE/dGhpcy51bnNhZmVMYWRkZXIocixuLHMpOnRoaXMud05BRlVuc2FmZShvLHRoaXMuZ2V0UHJlY29tcHV0ZXMobyxyLGkpLG4scyl9LHNldFdpbmRvd1NpemUocixuKXtjcChuLGUpLHVwLnNldChyLG4pLHBhLmRlbGV0ZShyKX19fWZ1bmN0aW9uIG14KHQsZSxyLG4pe2d4KHIsdCkseXgobixlKTtjb25zdCBpPXIubGVuZ3RoLHM9bi5sZW5ndGg7aWYoaSE9PXMpdGhyb3cgbmV3IEVycm9yKCJhcnJheXMgb2YgcG9pbnRzIGFuZCBzY2FsYXJzIG11c3QgaGF2ZSBlcXVhbCBsZW5ndGgiKTtjb25zdCBvPXQuWkVSTyxhPXYyKEJpZ0ludChpKSk7bGV0IGM9MTthPjEyP2M9YS0zOmE+ND9jPWEtMjphPjAmJihjPTIpO2NvbnN0IHU9T28oYyksbD1uZXcgQXJyYXkoTnVtYmVyKHUpKzEpLmZpbGwobyksaD1NYXRoLmZsb29yKChlLkJJVFMtMSkvYykqYztsZXQgcD1vO2ZvcihsZXQgZz1oO2c+PTA7Zy09Yyl7bC5maWxsKG8pO2ZvcihsZXQgYj0wO2I8cztiKyspe2NvbnN0IHY9bltiXSxPPU51bWJlcih2Pj5CaWdJbnQoZykmdSk7bFtPXT1sW09dLmFkZChyW2JdKX1sZXQgdz1vO2ZvcihsZXQgYj1sLmxlbmd0aC0xLHY9bztiPjA7Yi0tKXY9di5hZGQobFtiXSksdz13LmFkZCh2KTtpZihwPXAuYWRkKHcpLGchPT0wKWZvcihsZXQgYj0wO2I8YztiKyspcD1wLmRvdWJsZSgpfXJldHVybiBwfWZ1bmN0aW9uIGxwKHQpe3JldHVybiBmeCh0LkZwKSwkbyh0LHtuOiJiaWdpbnQiLGg6ImJpZ2ludCIsR3g6ImZpZWxkIixHeToiZmllbGQifSx7bkJpdExlbmd0aDoiaXNTYWZlSW50ZWdlciIsbkJ5dGVMZW5ndGg6ImlzU2FmZUludGVnZXIifSksT2JqZWN0LmZyZWV6ZSh7Li4uc3AodC5uLHQubkJpdExlbmd0aCksLi4udCxwOnQuRnAuT1JERVJ9KX0vKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICovZnVuY3Rpb24gS2wodCl7dC5sb3dTIT09dm9pZCAwJiZLaSgibG93UyIsdC5sb3dTKSx0LnByZWhhc2ghPT12b2lkIDAmJktpKCJwcmVoYXNoIix0LnByZWhhc2gpfWZ1bmN0aW9uIGJ4KHQpe2NvbnN0IGU9bHAodCk7JG8oZSx7YToiZmllbGQiLGI6ImZpZWxkIn0se2FsbG93SW5maW5pdHlQb2ludDoiYm9vbGVhbiIsYWxsb3dlZFByaXZhdGVLZXlMZW5ndGhzOiJhcnJheSIsY2xlYXJDb2ZhY3RvcjoiZnVuY3Rpb24iLGZyb21CeXRlczoiZnVuY3Rpb24iLGlzVG9yc2lvbkZyZWU6ImZ1bmN0aW9uIix0b0J5dGVzOiJmdW5jdGlvbiIsd3JhcFByaXZhdGVLZXk6ImJvb2xlYW4ifSk7Y29uc3R7ZW5kbzpyLEZwOm4sYTppfT1lO2lmKHIpe2lmKCFuLmVxbChpLG4uWkVSTykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGVuZG86IENVUlZFLmEgbXVzdCBiZSAwIik7aWYodHlwZW9mIHIhPSJvYmplY3QifHx0eXBlb2Ygci5iZXRhIT0iYmlnaW50Inx8dHlwZW9mIHIuc3BsaXRTY2FsYXIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGVuZG86IGV4cGVjdGVkICJiZXRhIjogYmlnaW50IGFuZCAic3BsaXRTY2FsYXIiOiBmdW5jdGlvbicpfXJldHVybiBPYmplY3QuZnJlZXplKHsuLi5lfSl9bGV0IEV4PWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZT0iIil7c3VwZXIoZSl9fTtjb25zdCBncj17RXJyOkV4LF90bHY6e2VuY29kZToodCxlKT0+e2NvbnN0e0VycjpyfT1ncjtpZih0PDB8fHQ+MjU2KXRocm93IG5ldyByKCJ0bHYuZW5jb2RlOiB3cm9uZyB0YWciKTtpZihlLmxlbmd0aCYxKXRocm93IG5ldyByKCJ0bHYuZW5jb2RlOiB1bnBhZGRlZCBkYXRhIik7Y29uc3Qgbj1lLmxlbmd0aC8yLGk9RXMobik7aWYoaS5sZW5ndGgvMiYxMjgpdGhyb3cgbmV3IHIoInRsdi5lbmNvZGU6IGxvbmcgZm9ybSBsZW5ndGggdG9vIGJpZyIpO2NvbnN0IHM9bj4xMjc/RXMoaS5sZW5ndGgvMnwxMjgpOiIiO3JldHVybiBFcyh0KStzK2krZX0sZGVjb2RlKHQsZSl7Y29uc3R7RXJyOnJ9PWdyO2xldCBuPTA7aWYodDwwfHx0PjI1Nil0aHJvdyBuZXcgcigidGx2LmVuY29kZTogd3JvbmcgdGFnIik7aWYoZS5sZW5ndGg8Mnx8ZVtuKytdIT09dCl0aHJvdyBuZXcgcigidGx2LmRlY29kZTogd3JvbmcgdGx2Iik7Y29uc3QgaT1lW24rK10scz0hIShpJjEyOCk7bGV0IG89MDtpZighcylvPWk7ZWxzZXtjb25zdCBjPWkmMTI3O2lmKCFjKXRocm93IG5ldyByKCJ0bHYuZGVjb2RlKGxvbmcpOiBpbmRlZmluaXRlIGxlbmd0aCBub3Qgc3VwcG9ydGVkIik7aWYoYz40KXRocm93IG5ldyByKCJ0bHYuZGVjb2RlKGxvbmcpOiBieXRlIGxlbmd0aCBpcyB0b28gYmlnIik7Y29uc3QgdT1lLnN1YmFycmF5KG4sbitjKTtpZih1Lmxlbmd0aCE9PWMpdGhyb3cgbmV3IHIoInRsdi5kZWNvZGU6IGxlbmd0aCBieXRlcyBub3QgY29tcGxldGUiKTtpZih1WzBdPT09MCl0aHJvdyBuZXcgcigidGx2LmRlY29kZShsb25nKTogemVybyBsZWZ0bW9zdCBieXRlIik7Zm9yKGNvbnN0IGwgb2YgdSlvPW88PDh8bDtpZihuKz1jLG88MTI4KXRocm93IG5ldyByKCJ0bHYuZGVjb2RlKGxvbmcpOiBub3QgbWluaW1hbCBlbmNvZGluZyIpfWNvbnN0IGE9ZS5zdWJhcnJheShuLG4rbyk7aWYoYS5sZW5ndGghPT1vKXRocm93IG5ldyByKCJ0bHYuZGVjb2RlOiB3cm9uZyB2YWx1ZSBsZW5ndGgiKTtyZXR1cm57djphLGw6ZS5zdWJhcnJheShuK28pfX19LF9pbnQ6e2VuY29kZSh0KXtjb25zdHtFcnI6ZX09Z3I7aWYodDx3cil0aHJvdyBuZXcgZSgiaW50ZWdlcjogbmVnYXRpdmUgaW50ZWdlcnMgYXJlIG5vdCBhbGxvd2VkIik7bGV0IHI9RXModCk7aWYoTnVtYmVyLnBhcnNlSW50KHJbMF0sMTYpJjgmJihyPSIwMCIrciksci5sZW5ndGgmMSl0aHJvdyBuZXcgZSgidW5leHBlY3RlZCBERVIgcGFyc2luZyBhc3NlcnRpb246IHVucGFkZGVkIGhleCIpO3JldHVybiByfSxkZWNvZGUodCl7Y29uc3R7RXJyOmV9PWdyO2lmKHRbMF0mMTI4KXRocm93IG5ldyBlKCJpbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyOiBuZWdhdGl2ZSIpO2lmKHRbMF09PT0wJiYhKHRbMV0mMTI4KSl0aHJvdyBuZXcgZSgiaW52YWxpZCBzaWduYXR1cmUgaW50ZWdlcjogdW5uZWNlc3NhcnkgbGVhZGluZyB6ZXJvIik7cmV0dXJuIHZuKHQpfX0sdG9TaWcodCl7Y29uc3R7RXJyOmUsX2ludDpyLF90bHY6bn09Z3IsaT1FdCgic2lnbmF0dXJlIix0KSx7djpzLGw6b309bi5kZWNvZGUoNDgsaSk7aWYoby5sZW5ndGgpdGhyb3cgbmV3IGUoImludmFsaWQgc2lnbmF0dXJlOiBsZWZ0IGJ5dGVzIGFmdGVyIHBhcnNpbmciKTtjb25zdHt2OmEsbDpjfT1uLmRlY29kZSgyLHMpLHt2OnUsbH09bi5kZWNvZGUoMixjKTtpZihsLmxlbmd0aCl0aHJvdyBuZXcgZSgiaW52YWxpZCBzaWduYXR1cmU6IGxlZnQgYnl0ZXMgYWZ0ZXIgcGFyc2luZyIpO3JldHVybntyOnIuZGVjb2RlKGEpLHM6ci5kZWNvZGUodSl9fSxoZXhGcm9tU2lnKHQpe2NvbnN0e190bHY6ZSxfaW50OnJ9PWdyLG49ZS5lbmNvZGUoMixyLmVuY29kZSh0LnIpKSxpPWUuZW5jb2RlKDIsci5lbmNvZGUodC5zKSkscz1uK2k7cmV0dXJuIGUuZW5jb2RlKDQ4LHMpfX07ZnVuY3Rpb24geWEodCxlKXtyZXR1cm4gVmkobnModCxlKSl9Y29uc3Qgd3I9QmlnSW50KDApLFJlPUJpZ0ludCgxKTtCaWdJbnQoMik7Y29uc3Qgd2E9QmlnSW50KDMpLHZ4PUJpZ0ludCg0KTtmdW5jdGlvbiB4eCh0KXtjb25zdCBlPWJ4KHQpLHtGcDpyfT1lLG49dHUoZS5uLGUubkJpdExlbmd0aCksaT1lLnRvQnl0ZXN8fCgoXyxQLEMpPT57Y29uc3Qgaj1QLnRvQWZmaW5lKCk7cmV0dXJuIFpzKFVpbnQ4QXJyYXkuZnJvbShbNF0pLHIudG9CeXRlcyhqLngpLHIudG9CeXRlcyhqLnkpKX0pLHM9ZS5mcm9tQnl0ZXN8fChfPT57Y29uc3QgUD1fLnN1YmFycmF5KDEpLEM9ci5mcm9tQnl0ZXMoUC5zdWJhcnJheSgwLHIuQllURVMpKSxqPXIuZnJvbUJ5dGVzKFAuc3ViYXJyYXkoci5CWVRFUywyKnIuQllURVMpKTtyZXR1cm57eDpDLHk6an19KTtmdW5jdGlvbiBvKF8pe2NvbnN0e2E6UCxiOkN9PWUsaj1yLnNxcihfKSxxPXIubXVsKGosXyk7cmV0dXJuIHIuYWRkKHIuYWRkKHEsci5tdWwoXyxQKSksQyl9ZnVuY3Rpb24gYShfLFApe2NvbnN0IEM9ci5zcXIoUCksaj1vKF8pO3JldHVybiByLmVxbChDLGopfWlmKCFhKGUuR3gsZS5HeSkpdGhyb3cgbmV3IEVycm9yKCJiYWQgY3VydmUgcGFyYW1zOiBnZW5lcmF0b3IgcG9pbnQiKTtjb25zdCBjPXIubXVsKHIucG93KGUuYSx3YSksdngpLHU9ci5tdWwoci5zcXIoZS5iKSxCaWdJbnQoMjcpKTtpZihyLmlzMChyLmFkZChjLHUpKSl0aHJvdyBuZXcgRXJyb3IoImJhZCBjdXJ2ZSBwYXJhbXM6IGEgb3IgYiIpO2Z1bmN0aW9uIGwoXyl7cmV0dXJuIEpjKF8sUmUsZS5uKX1mdW5jdGlvbiBoKF8pe2NvbnN0e2FsbG93ZWRQcml2YXRlS2V5TGVuZ3RoczpQLG5CeXRlTGVuZ3RoOkMsd3JhcFByaXZhdGVLZXk6aixuOnF9PWU7aWYoUCYmdHlwZW9mIF8hPSJiaWdpbnQiKXtpZihycyhfKSYmKF89VmkoXykpLHR5cGVvZiBfIT0ic3RyaW5nInx8IVAuaW5jbHVkZXMoXy5sZW5ndGgpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwcml2YXRlIGtleSIpO189Xy5wYWRTdGFydChDKjIsIjAiKX1sZXQgTTt0cnl7TT10eXBlb2YgXz09ImJpZ2ludCI/Xzp2bihFdCgicHJpdmF0ZSBrZXkiLF8sQykpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiaW52YWxpZCBwcml2YXRlIGtleSwgZXhwZWN0ZWQgaGV4IG9yICIrQysiIGJ5dGVzLCBnb3QgIit0eXBlb2YgXyl9cmV0dXJuIGomJihNPWl0KE0scSkpLHRpKCJwcml2YXRlIGtleSIsTSxSZSxxKSxNfWZ1bmN0aW9uIHAoXyl7aWYoIShfIGluc3RhbmNlb2YgYikpdGhyb3cgbmV3IEVycm9yKCJQcm9qZWN0aXZlUG9pbnQgZXhwZWN0ZWQiKX1jb25zdCBnPVVsKChfLFApPT57Y29uc3R7cHg6QyxweTpqLHB6OnF9PV87aWYoci5lcWwocSxyLk9ORSkpcmV0dXJue3g6Qyx5Omp9O2NvbnN0IE09Xy5pczAoKTtQPT1udWxsJiYoUD1NP3IuT05FOnIuaW52KHEpKTtjb25zdCBUPXIubXVsKEMsUCksej1yLm11bChqLFApLFU9ci5tdWwocSxQKTtpZihNKXJldHVybnt4OnIuWkVSTyx5OnIuWkVST307aWYoIXIuZXFsKFUsci5PTkUpKXRocm93IG5ldyBFcnJvcigiaW52WiB3YXMgaW52YWxpZCIpO3JldHVybnt4OlQseTp6fX0pLHc9VWwoXz0+e2lmKF8uaXMwKCkpe2lmKGUuYWxsb3dJbmZpbml0eVBvaW50JiYhci5pczAoXy5weSkpcmV0dXJuO3Rocm93IG5ldyBFcnJvcigiYmFkIHBvaW50OiBaRVJPIil9Y29uc3R7eDpQLHk6Q309Xy50b0FmZmluZSgpO2lmKCFyLmlzVmFsaWQoUCl8fCFyLmlzVmFsaWQoQykpdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9pbnQ6IHggb3IgeSBub3QgRkUiKTtpZighYShQLEMpKXRocm93IG5ldyBFcnJvcigiYmFkIHBvaW50OiBlcXVhdGlvbiBsZWZ0ICE9IHJpZ2h0Iik7aWYoIV8uaXNUb3JzaW9uRnJlZSgpKXRocm93IG5ldyBFcnJvcigiYmFkIHBvaW50OiBub3QgaW4gcHJpbWUtb3JkZXIgc3ViZ3JvdXAiKTtyZXR1cm4hMH0pO2NsYXNzIGJ7Y29uc3RydWN0b3IoUCxDLGope2lmKFA9PW51bGx8fCFyLmlzVmFsaWQoUCkpdGhyb3cgbmV3IEVycm9yKCJ4IHJlcXVpcmVkIik7aWYoQz09bnVsbHx8IXIuaXNWYWxpZChDKXx8ci5pczAoQykpdGhyb3cgbmV3IEVycm9yKCJ5IHJlcXVpcmVkIik7aWYoaj09bnVsbHx8IXIuaXNWYWxpZChqKSl0aHJvdyBuZXcgRXJyb3IoInogcmVxdWlyZWQiKTt0aGlzLnB4PVAsdGhpcy5weT1DLHRoaXMucHo9aixPYmplY3QuZnJlZXplKHRoaXMpfXN0YXRpYyBmcm9tQWZmaW5lKFApe2NvbnN0e3g6Qyx5Omp9PVB8fHt9O2lmKCFQfHwhci5pc1ZhbGlkKEMpfHwhci5pc1ZhbGlkKGopKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBhZmZpbmUgcG9pbnQiKTtpZihQIGluc3RhbmNlb2YgYil0aHJvdyBuZXcgRXJyb3IoInByb2plY3RpdmUgcG9pbnQgbm90IGFsbG93ZWQiKTtjb25zdCBxPU09PnIuZXFsKE0sci5aRVJPKTtyZXR1cm4gcShDKSYmcShqKT9iLlpFUk86bmV3IGIoQyxqLHIuT05FKX1nZXQgeCgpe3JldHVybiB0aGlzLnRvQWZmaW5lKCkueH1nZXQgeSgpe3JldHVybiB0aGlzLnRvQWZmaW5lKCkueX1zdGF0aWMgbm9ybWFsaXplWihQKXtjb25zdCBDPWlwKHIsUC5tYXAoaj0+ai5weikpO3JldHVybiBQLm1hcCgoaixxKT0+ai50b0FmZmluZShDW3FdKSkubWFwKGIuZnJvbUFmZmluZSl9c3RhdGljIGZyb21IZXgoUCl7Y29uc3QgQz1iLmZyb21BZmZpbmUocyhFdCgicG9pbnRIZXgiLFApKSk7cmV0dXJuIEMuYXNzZXJ0VmFsaWRpdHkoKSxDfXN0YXRpYyBmcm9tUHJpdmF0ZUtleShQKXtyZXR1cm4gYi5CQVNFLm11bHRpcGx5KGgoUCkpfXN0YXRpYyBtc20oUCxDKXtyZXR1cm4gbXgoYixuLFAsQyl9X3NldFdpbmRvd1NpemUoUCl7Ri5zZXRXaW5kb3dTaXplKHRoaXMsUCl9YXNzZXJ0VmFsaWRpdHkoKXt3KHRoaXMpfWhhc0V2ZW5ZKCl7Y29uc3R7eTpQfT10aGlzLnRvQWZmaW5lKCk7aWYoci5pc09kZClyZXR1cm4hci5pc09kZChQKTt0aHJvdyBuZXcgRXJyb3IoIkZpZWxkIGRvZXNuJ3Qgc3VwcG9ydCBpc09kZCIpfWVxdWFscyhQKXtwKFApO2NvbnN0e3B4OkMscHk6aixwejpxfT10aGlzLHtweDpNLHB5OlQscHo6en09UCxVPXIuZXFsKHIubXVsKEMseiksci5tdWwoTSxxKSksTj1yLmVxbChyLm11bChqLHopLHIubXVsKFQscSkpO3JldHVybiBVJiZOfW5lZ2F0ZSgpe3JldHVybiBuZXcgYih0aGlzLnB4LHIubmVnKHRoaXMucHkpLHRoaXMucHopfWRvdWJsZSgpe2NvbnN0e2E6UCxiOkN9PWUsaj1yLm11bChDLHdhKSx7cHg6cSxweTpNLHB6OlR9PXRoaXM7bGV0IHo9ci5aRVJPLFU9ci5aRVJPLE49ci5aRVJPLEQ9ci5tdWwocSxxKSxSPXIubXVsKE0sTSkseT1yLm11bChULFQpLG09ci5tdWwocSxNKTtyZXR1cm4gbT1yLmFkZChtLG0pLE49ci5tdWwocSxUKSxOPXIuYWRkKE4sTiksej1yLm11bChQLE4pLFU9ci5tdWwoaix5KSxVPXIuYWRkKHosVSksej1yLnN1YihSLFUpLFU9ci5hZGQoUixVKSxVPXIubXVsKHosVSksej1yLm11bChtLHopLE49ci5tdWwoaixOKSx5PXIubXVsKFAseSksbT1yLnN1YihELHkpLG09ci5tdWwoUCxtKSxtPXIuYWRkKG0sTiksTj1yLmFkZChELEQpLEQ9ci5hZGQoTixEKSxEPXIuYWRkKEQseSksRD1yLm11bChELG0pLFU9ci5hZGQoVSxEKSx5PXIubXVsKE0sVCkseT1yLmFkZCh5LHkpLEQ9ci5tdWwoeSxtKSx6PXIuc3ViKHosRCksTj1yLm11bCh5LFIpLE49ci5hZGQoTixOKSxOPXIuYWRkKE4sTiksbmV3IGIoeixVLE4pfWFkZChQKXtwKFApO2NvbnN0e3B4OkMscHk6aixwejpxfT10aGlzLHtweDpNLHB5OlQscHo6en09UDtsZXQgVT1yLlpFUk8sTj1yLlpFUk8sRD1yLlpFUk87Y29uc3QgUj1lLmEseT1yLm11bChlLmIsd2EpO2xldCBtPXIubXVsKEMsTSksST1yLm11bChqLFQpLEE9ci5tdWwocSx6KSxTPXIuYWRkKEMsaiksJD1yLmFkZChNLFQpO1M9ci5tdWwoUywkKSwkPXIuYWRkKG0sSSksUz1yLnN1YihTLCQpLCQ9ci5hZGQoQyxxKTtsZXQgaz1yLmFkZChNLHopO3JldHVybiAkPXIubXVsKCQsayksaz1yLmFkZChtLEEpLCQ9ci5zdWIoJCxrKSxrPXIuYWRkKGoscSksVT1yLmFkZChULHopLGs9ci5tdWwoayxVKSxVPXIuYWRkKEksQSksaz1yLnN1YihrLFUpLEQ9ci5tdWwoUiwkKSxVPXIubXVsKHksQSksRD1yLmFkZChVLEQpLFU9ci5zdWIoSSxEKSxEPXIuYWRkKEksRCksTj1yLm11bChVLEQpLEk9ci5hZGQobSxtKSxJPXIuYWRkKEksbSksQT1yLm11bChSLEEpLCQ9ci5tdWwoeSwkKSxJPXIuYWRkKEksQSksQT1yLnN1YihtLEEpLEE9ci5tdWwoUixBKSwkPXIuYWRkKCQsQSksbT1yLm11bChJLCQpLE49ci5hZGQoTixtKSxtPXIubXVsKGssJCksVT1yLm11bChTLFUpLFU9ci5zdWIoVSxtKSxtPXIubXVsKFMsSSksRD1yLm11bChrLEQpLEQ9ci5hZGQoRCxtKSxuZXcgYihVLE4sRCl9c3VidHJhY3QoUCl7cmV0dXJuIHRoaXMuYWRkKFAubmVnYXRlKCkpfWlzMCgpe3JldHVybiB0aGlzLmVxdWFscyhiLlpFUk8pfXdOQUYoUCl7cmV0dXJuIEYud05BRkNhY2hlZCh0aGlzLFAsYi5ub3JtYWxpemVaKX1tdWx0aXBseVVuc2FmZShQKXtjb25zdHtlbmRvOkMsbjpqfT1lO3RpKCJzY2FsYXIiLFAsd3Isaik7Y29uc3QgcT1iLlpFUk87aWYoUD09PXdyKXJldHVybiBxO2lmKHRoaXMuaXMwKCl8fFA9PT1SZSlyZXR1cm4gdGhpcztpZighQ3x8Ri5oYXNQcmVjb21wdXRlcyh0aGlzKSlyZXR1cm4gRi53TkFGQ2FjaGVkVW5zYWZlKHRoaXMsUCxiLm5vcm1hbGl6ZVopO2xldHtrMW5lZzpNLGsxOlQsazJuZWc6eixrMjpVfT1DLnNwbGl0U2NhbGFyKFApLE49cSxEPXEsUj10aGlzO2Zvcig7VD53cnx8VT53cjspVCZSZSYmKE49Ti5hZGQoUikpLFUmUmUmJihEPUQuYWRkKFIpKSxSPVIuZG91YmxlKCksVD4+PVJlLFU+Pj1SZTtyZXR1cm4gTSYmKE49Ti5uZWdhdGUoKSkseiYmKEQ9RC5uZWdhdGUoKSksRD1uZXcgYihyLm11bChELnB4LEMuYmV0YSksRC5weSxELnB6KSxOLmFkZChEKX1tdWx0aXBseShQKXtjb25zdHtlbmRvOkMsbjpqfT1lO3RpKCJzY2FsYXIiLFAsUmUsaik7bGV0IHEsTTtpZihDKXtjb25zdHtrMW5lZzpULGsxOnosazJuZWc6VSxrMjpOfT1DLnNwbGl0U2NhbGFyKFApO2xldHtwOkQsZjpSfT10aGlzLndOQUYoeikse3A6eSxmOm19PXRoaXMud05BRihOKTtEPUYuY29uc3RUaW1lTmVnYXRlKFQsRCkseT1GLmNvbnN0VGltZU5lZ2F0ZShVLHkpLHk9bmV3IGIoci5tdWwoeS5weCxDLmJldGEpLHkucHkseS5weikscT1ELmFkZCh5KSxNPVIuYWRkKG0pfWVsc2V7Y29uc3R7cDpULGY6en09dGhpcy53TkFGKFApO3E9VCxNPXp9cmV0dXJuIGIubm9ybWFsaXplWihbcSxNXSlbMF19bXVsdGlwbHlBbmRBZGRVbnNhZmUoUCxDLGope2NvbnN0IHE9Yi5CQVNFLE09KHosVSk9PlU9PT13cnx8VT09PVJlfHwhei5lcXVhbHMocSk/ei5tdWx0aXBseVVuc2FmZShVKTp6Lm11bHRpcGx5KFUpLFQ9TSh0aGlzLEMpLmFkZChNKFAsaikpO3JldHVybiBULmlzMCgpP3ZvaWQgMDpUfXRvQWZmaW5lKFApe3JldHVybiBnKHRoaXMsUCl9aXNUb3JzaW9uRnJlZSgpe2NvbnN0e2g6UCxpc1RvcnNpb25GcmVlOkN9PWU7aWYoUD09PVJlKXJldHVybiEwO2lmKEMpcmV0dXJuIEMoYix0aGlzKTt0aHJvdyBuZXcgRXJyb3IoImlzVG9yc2lvbkZyZWUoKSBoYXMgbm90IGJlZW4gZGVjbGFyZWQgZm9yIHRoZSBlbGxpcHRpYyBjdXJ2ZSIpfWNsZWFyQ29mYWN0b3IoKXtjb25zdHtoOlAsY2xlYXJDb2ZhY3RvcjpDfT1lO3JldHVybiBQPT09UmU/dGhpczpDP0MoYix0aGlzKTp0aGlzLm11bHRpcGx5VW5zYWZlKGUuaCl9dG9SYXdCeXRlcyhQPSEwKXtyZXR1cm4gS2koImlzQ29tcHJlc3NlZCIsUCksdGhpcy5hc3NlcnRWYWxpZGl0eSgpLGkoYix0aGlzLFApfXRvSGV4KFA9ITApe3JldHVybiBLaSgiaXNDb21wcmVzc2VkIixQKSxWaSh0aGlzLnRvUmF3Qnl0ZXMoUCkpfX1iLkJBU0U9bmV3IGIoZS5HeCxlLkd5LHIuT05FKSxiLlpFUk89bmV3IGIoci5aRVJPLHIuT05FLHIuWkVSTyk7Y29uc3R7ZW5kbzp2LG5CaXRMZW5ndGg6T309ZSxGPXd4KGIsdj9NYXRoLmNlaWwoTy8yKTpPKTtyZXR1cm57Q1VSVkU6ZSxQcm9qZWN0aXZlUG9pbnQ6Yixub3JtUHJpdmF0ZUtleVRvU2NhbGFyOmgsd2VpZXJzdHJhc3NFcXVhdGlvbjpvLGlzV2l0aGluQ3VydmVPcmRlcjpsfX1mdW5jdGlvbiBfeCh0KXtjb25zdCBlPWxwKHQpO3JldHVybiAkbyhlLHtoYXNoOiJoYXNoIixobWFjOiJmdW5jdGlvbiIscmFuZG9tQnl0ZXM6ImZ1bmN0aW9uIn0se2JpdHMyaW50OiJmdW5jdGlvbiIsYml0czJpbnRfbW9kTjoiZnVuY3Rpb24iLGxvd1M6ImJvb2xlYW4ifSksT2JqZWN0LmZyZWV6ZSh7bG93UzohMCwuLi5lfSl9ZnVuY3Rpb24gSXgodCl7Y29uc3QgZT1feCh0KSx7RnA6cixuLG5CeXRlTGVuZ3RoOmksbkJpdExlbmd0aDpzfT1lLG89ci5CWVRFUysxLGE9MipyLkJZVEVTKzE7ZnVuY3Rpb24gYyh5KXtyZXR1cm4gaXQoeSxuKX1mdW5jdGlvbiB1KHkpe3JldHVybiByYyh5LG4pfWNvbnN0e1Byb2plY3RpdmVQb2ludDpsLG5vcm1Qcml2YXRlS2V5VG9TY2FsYXI6aCx3ZWllcnN0cmFzc0VxdWF0aW9uOnAsaXNXaXRoaW5DdXJ2ZU9yZGVyOmd9PXh4KHsuLi5lLHRvQnl0ZXMoeSxtLEkpe2NvbnN0IEE9bS50b0FmZmluZSgpLFM9ci50b0J5dGVzKEEueCksJD1acztyZXR1cm4gS2koImlzQ29tcHJlc3NlZCIsSSksST8kKFVpbnQ4QXJyYXkuZnJvbShbbS5oYXNFdmVuWSgpPzI6M10pLFMpOiQoVWludDhBcnJheS5mcm9tKFs0XSksUyxyLnRvQnl0ZXMoQS55KSl9LGZyb21CeXRlcyh5KXtjb25zdCBtPXkubGVuZ3RoLEk9eVswXSxBPXkuc3ViYXJyYXkoMSk7aWYobT09PW8mJihJPT09Mnx8ST09PTMpKXtjb25zdCBTPXZuKEEpO2lmKCFKYyhTLFJlLHIuT1JERVIpKXRocm93IG5ldyBFcnJvcigiUG9pbnQgaXMgbm90IG9uIGN1cnZlIik7Y29uc3QgJD1wKFMpO2xldCBrO3RyeXtrPXIuc3FydCgkKX1jYXRjaChWKXtjb25zdCBXPVYgaW5zdGFuY2VvZiBFcnJvcj8iOiAiK1YubWVzc2FnZToiIjt0aHJvdyBuZXcgRXJyb3IoIlBvaW50IGlzIG5vdCBvbiBjdXJ2ZSIrVyl9Y29uc3QgSz0oayZSZSk9PT1SZTtyZXR1cm4oSSYxKT09PTEhPT1LJiYoaz1yLm5lZyhrKSkse3g6Uyx5Omt9fWVsc2UgaWYobT09PWEmJkk9PT00KXtjb25zdCBTPXIuZnJvbUJ5dGVzKEEuc3ViYXJyYXkoMCxyLkJZVEVTKSksJD1yLmZyb21CeXRlcyhBLnN1YmFycmF5KHIuQllURVMsMipyLkJZVEVTKSk7cmV0dXJue3g6Uyx5OiR9fWVsc2V7Y29uc3QgUz1vLCQ9YTt0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgUG9pbnQsIGV4cGVjdGVkIGxlbmd0aCBvZiAiK1MrIiwgb3IgdW5jb21wcmVzc2VkICIrJCsiLCBnb3QgIittKX19fSk7ZnVuY3Rpb24gdyh5KXtjb25zdCBtPW4+PlJlO3JldHVybiB5Pm19ZnVuY3Rpb24gYih5KXtyZXR1cm4gdyh5KT9jKC15KTp5fWNvbnN0IHY9KHksbSxJKT0+dm4oeS5zbGljZShtLEkpKTtjbGFzcyBPe2NvbnN0cnVjdG9yKG0sSSxBKXt0aSgiciIsbSxSZSxuKSx0aSgicyIsSSxSZSxuKSx0aGlzLnI9bSx0aGlzLnM9SSxBIT1udWxsJiYodGhpcy5yZWNvdmVyeT1BKSxPYmplY3QuZnJlZXplKHRoaXMpfXN0YXRpYyBmcm9tQ29tcGFjdChtKXtjb25zdCBJPWk7cmV0dXJuIG09RXQoImNvbXBhY3RTaWduYXR1cmUiLG0sSSoyKSxuZXcgTyh2KG0sMCxJKSx2KG0sSSwyKkkpKX1zdGF0aWMgZnJvbURFUihtKXtjb25zdHtyOkksczpBfT1nci50b1NpZyhFdCgiREVSIixtKSk7cmV0dXJuIG5ldyBPKEksQSl9YXNzZXJ0VmFsaWRpdHkoKXt9YWRkUmVjb3ZlcnlCaXQobSl7cmV0dXJuIG5ldyBPKHRoaXMucix0aGlzLnMsbSl9cmVjb3ZlclB1YmxpY0tleShtKXtjb25zdHtyOkksczpBLHJlY292ZXJ5OlN9PXRoaXMsJD1xKEV0KCJtc2dIYXNoIixtKSk7aWYoUz09bnVsbHx8IVswLDEsMiwzXS5pbmNsdWRlcyhTKSl0aHJvdyBuZXcgRXJyb3IoInJlY292ZXJ5IGlkIGludmFsaWQiKTtjb25zdCBrPVM9PT0yfHxTPT09Mz9JK2UubjpJO2lmKGs+PXIuT1JERVIpdGhyb3cgbmV3IEVycm9yKCJyZWNvdmVyeSBpZCAyIG9yIDMgaW52YWxpZCIpO2NvbnN0IEs9UyYxPyIwMyI6IjAyIixaPWwuZnJvbUhleChLK3lhKGssci5CWVRFUykpLFY9dShrKSxXPWMoLSQqViksSj1jKEEqViksZWU9bC5CQVNFLm11bHRpcGx5QW5kQWRkVW5zYWZlKFosVyxKKTtpZighZWUpdGhyb3cgbmV3IEVycm9yKCJwb2ludCBhdCBpbmZpbmlmeSIpO3JldHVybiBlZS5hc3NlcnRWYWxpZGl0eSgpLGVlfWhhc0hpZ2hTKCl7cmV0dXJuIHcodGhpcy5zKX1ub3JtYWxpemVTKCl7cmV0dXJuIHRoaXMuaGFzSGlnaFMoKT9uZXcgTyh0aGlzLnIsYygtdGhpcy5zKSx0aGlzLnJlY292ZXJ5KTp0aGlzfXRvREVSUmF3Qnl0ZXMoKXtyZXR1cm4gWXModGhpcy50b0RFUkhleCgpKX10b0RFUkhleCgpe3JldHVybiBnci5oZXhGcm9tU2lnKHRoaXMpfXRvQ29tcGFjdFJhd0J5dGVzKCl7cmV0dXJuIFlzKHRoaXMudG9Db21wYWN0SGV4KCkpfXRvQ29tcGFjdEhleCgpe2NvbnN0IG09aTtyZXR1cm4geWEodGhpcy5yLG0pK3lhKHRoaXMucyxtKX19Y29uc3QgRj17aXNWYWxpZFByaXZhdGVLZXkoeSl7dHJ5e3JldHVybiBoKHkpLCEwfWNhdGNoe3JldHVybiExfX0sbm9ybVByaXZhdGVLZXlUb1NjYWxhcjpoLHJhbmRvbVByaXZhdGVLZXk6KCk9Pntjb25zdCB5PWFwKGUubik7cmV0dXJuIHB4KGUucmFuZG9tQnl0ZXMoeSksZS5uKX0scHJlY29tcHV0ZSh5PTgsbT1sLkJBU0Upe3JldHVybiBtLl9zZXRXaW5kb3dTaXplKHkpLG0ubXVsdGlwbHkoQmlnSW50KDMpKSxtfX07ZnVuY3Rpb24gXyh5LG09ITApe3JldHVybiBsLmZyb21Qcml2YXRlS2V5KHkpLnRvUmF3Qnl0ZXMobSl9ZnVuY3Rpb24gUCh5KXtpZih0eXBlb2YgeT09ImJpZ2ludCIpcmV0dXJuITE7aWYoeSBpbnN0YW5jZW9mIGwpcmV0dXJuITA7Y29uc3QgST1FdCgia2V5Iix5KS5sZW5ndGgsQT1yLkJZVEVTLFM9QSsxLCQ9MipBKzE7aWYoIShlLmFsbG93ZWRQcml2YXRlS2V5TGVuZ3Roc3x8aT09PVMpKXJldHVybiBJPT09U3x8ST09PSR9ZnVuY3Rpb24gQyh5LG0sST0hMCl7aWYoUCh5KT09PSEwKXRocm93IG5ldyBFcnJvcigiZmlyc3QgYXJnIG11c3QgYmUgcHJpdmF0ZSBrZXkiKTtpZihQKG0pPT09ITEpdGhyb3cgbmV3IEVycm9yKCJzZWNvbmQgYXJnIG11c3QgYmUgcHVibGljIGtleSIpO3JldHVybiBsLmZyb21IZXgobSkubXVsdGlwbHkoaCh5KSkudG9SYXdCeXRlcyhJKX1jb25zdCBqPWUuYml0czJpbnR8fGZ1bmN0aW9uKHkpe2lmKHkubGVuZ3RoPjgxOTIpdGhyb3cgbmV3IEVycm9yKCJpbnB1dCBpcyB0b28gbGFyZ2UiKTtjb25zdCBtPXZuKHkpLEk9eS5sZW5ndGgqOC1zO3JldHVybiBJPjA/bT4+QmlnSW50KEkpOm19LHE9ZS5iaXRzMmludF9tb2ROfHxmdW5jdGlvbih5KXtyZXR1cm4gYyhqKHkpKX0sTT1PbyhzKTtmdW5jdGlvbiBUKHkpe3JldHVybiB0aSgibnVtIDwgMl4iK3MseSx3cixNKSxucyh5LGkpfWZ1bmN0aW9uIHooeSxtLEk9VSl7aWYoWyJyZWNvdmVyZWQiLCJjYW5vbmljYWwiXS5zb21lKFE9PlEgaW4gSSkpdGhyb3cgbmV3IEVycm9yKCJzaWduKCkgbGVnYWN5IG9wdGlvbnMgbm90IHN1cHBvcnRlZCIpO2NvbnN0e2hhc2g6QSxyYW5kb21CeXRlczpTfT1lO2xldHtsb3dTOiQscHJlaGFzaDprLGV4dHJhRW50cm9weTpLfT1JOyQ9PW51bGwmJigkPSEwKSx5PUV0KCJtc2dIYXNoIix5KSxLbChJKSxrJiYoeT1FdCgicHJlaGFzaGVkIG1zZ0hhc2giLEEoeSkpKTtjb25zdCBaPXEoeSksVj1oKG0pLFc9W1QoViksVChaKV07aWYoSyE9bnVsbCYmSyE9PSExKXtjb25zdCBRPUs9PT0hMD9TKHIuQllURVMpOks7Vy5wdXNoKEV0KCJleHRyYUVudHJvcHkiLFEpKX1jb25zdCBKPVpzKC4uLlcpLGVlPVo7ZnVuY3Rpb24gcmUoUSl7Y29uc3QgaWU9aihRKTtpZighZyhpZSkpcmV0dXJuO2NvbnN0IGZlPXUoaWUpLEllPWwuQkFTRS5tdWx0aXBseShpZSkudG9BZmZpbmUoKSxEZT1jKEllLngpO2lmKERlPT09d3IpcmV0dXJuO2NvbnN0IHV0PWMoZmUqYyhlZStEZSpWKSk7aWYodXQ9PT13cilyZXR1cm47bGV0IGV0PShJZS54PT09RGU/MDoyKXxOdW1iZXIoSWUueSZSZSksQXQ9dXQ7cmV0dXJuICQmJncodXQpJiYoQXQ9Yih1dCksZXRePTEpLG5ldyBPKERlLEF0LGV0KX1yZXR1cm57c2VlZDpKLGsyc2lnOnJlfX1jb25zdCBVPXtsb3dTOmUubG93UyxwcmVoYXNoOiExfSxOPXtsb3dTOmUubG93UyxwcmVoYXNoOiExfTtmdW5jdGlvbiBEKHksbSxJPVUpe2NvbnN0e3NlZWQ6QSxrMnNpZzpTfT16KHksbSxJKSwkPWU7cmV0dXJuIHgyKCQuaGFzaC5vdXRwdXRMZW4sJC5uQnl0ZUxlbmd0aCwkLmhtYWMpKEEsUyl9bC5CQVNFLl9zZXRXaW5kb3dTaXplKDgpO2Z1bmN0aW9uIFIoeSxtLEksQT1OKXtjb25zdCBTPXk7bT1FdCgibXNnSGFzaCIsbSksST1FdCgicHVibGljS2V5IixJKTtjb25zdHtsb3dTOiQscHJlaGFzaDprLGZvcm1hdDpLfT1BO2lmKEtsKEEpLCJzdHJpY3QiaW4gQSl0aHJvdyBuZXcgRXJyb3IoIm9wdGlvbnMuc3RyaWN0IHdhcyByZW5hbWVkIHRvIGxvd1MiKTtpZihLIT09dm9pZCAwJiZLIT09ImNvbXBhY3QiJiZLIT09ImRlciIpdGhyb3cgbmV3IEVycm9yKCJmb3JtYXQgbXVzdCBiZSBjb21wYWN0IG9yIGRlciIpO2NvbnN0IFo9dHlwZW9mIFM9PSJzdHJpbmcifHxycyhTKSxWPSFaJiYhSyYmdHlwZW9mIFM9PSJvYmplY3QiJiZTIT09bnVsbCYmdHlwZW9mIFMucj09ImJpZ2ludCImJnR5cGVvZiBTLnM9PSJiaWdpbnQiO2lmKCFaJiYhVil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2lnbmF0dXJlLCBleHBlY3RlZCBVaW50OEFycmF5LCBoZXggc3RyaW5nIG9yIFNpZ25hdHVyZSBpbnN0YW5jZSIpO2xldCBXLEo7dHJ5e2lmKFYmJihXPW5ldyBPKFMucixTLnMpKSxaKXt0cnl7SyE9PSJjb21wYWN0IiYmKFc9Ty5mcm9tREVSKFMpKX1jYXRjaChldCl7aWYoIShldCBpbnN0YW5jZW9mIGdyLkVycikpdGhyb3cgZXR9IVcmJkshPT0iZGVyIiYmKFc9Ty5mcm9tQ29tcGFjdChTKSl9Sj1sLmZyb21IZXgoSSl9Y2F0Y2h7cmV0dXJuITF9aWYoIVd8fCQmJlcuaGFzSGlnaFMoKSlyZXR1cm4hMTtrJiYobT1lLmhhc2gobSkpO2NvbnN0e3I6ZWUsczpyZX09VyxRPXEobSksaWU9dShyZSksZmU9YyhRKmllKSxJZT1jKGVlKmllKSxEZT1sLkJBU0UubXVsdGlwbHlBbmRBZGRVbnNhZmUoSixmZSxJZSk/LnRvQWZmaW5lKCk7cmV0dXJuIERlP2MoRGUueCk9PT1lZTohMX1yZXR1cm57Q1VSVkU6ZSxnZXRQdWJsaWNLZXk6XyxnZXRTaGFyZWRTZWNyZXQ6QyxzaWduOkQsdmVyaWZ5OlIsUHJvamVjdGl2ZVBvaW50OmwsU2lnbmF0dXJlOk8sdXRpbHM6Rn19LyohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqL2Z1bmN0aW9uIFN4KHQpe3JldHVybntoYXNoOnQsaG1hYzooZSwuLi5yKT0+UWQodCxlLFl2KC4uLnIpKSxyYW5kb21CeXRlczpadn19ZnVuY3Rpb24gQXgodCxlKXtjb25zdCByPW49Pkl4KHsuLi50LC4uLlN4KG4pfSk7cmV0dXJuey4uLnIoZSksY3JlYXRlOnJ9fS8qISBub2JsZS1jdXJ2ZXMgLSBNSVQgTGljZW5zZSAoYykgMjAyMiBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKi9jb25zdCBocD1CaWdJbnQoIjB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVmZmZmZmMyZiIpLFZsPUJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWJhYWVkY2U2YWY0OGEwM2JiZmQyNWU4Y2QwMzY0MTQxIiksRHg9QmlnSW50KDApLE94PUJpZ0ludCgxKSxpYz1CaWdJbnQoMiksV2w9KHQsZSk9Pih0K2UvaWMpL2U7ZnVuY3Rpb24gJHgodCl7Y29uc3QgZT1ocCxyPUJpZ0ludCgzKSxuPUJpZ0ludCg2KSxpPUJpZ0ludCgxMSkscz1CaWdJbnQoMjIpLG89QmlnSW50KDIzKSxhPUJpZ0ludCg0NCksYz1CaWdJbnQoODgpLHU9dCp0KnQlZSxsPXUqdSp0JWUsaD15dChsLHIsZSkqbCVlLHA9eXQoaCxyLGUpKmwlZSxnPXl0KHAsaWMsZSkqdSVlLHc9eXQoZyxpLGUpKmclZSxiPXl0KHcscyxlKSp3JWUsdj15dChiLGEsZSkqYiVlLE89eXQodixjLGUpKnYlZSxGPXl0KE8sYSxlKSpiJWUsXz15dChGLHIsZSkqbCVlLFA9eXQoXyxvLGUpKnclZSxDPXl0KFAsbixlKSp1JWUsaj15dChDLGljLGUpO2lmKCFzYy5lcWwoc2Muc3FyKGopLHQpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc3F1YXJlIHJvb3QiKTtyZXR1cm4gan1jb25zdCBzYz10dShocCx2b2lkIDAsdm9pZCAwLHtzcXJ0OiR4fSksQng9QXgoe2E6RHgsYjpCaWdJbnQoNyksRnA6c2MsbjpWbCxHeDpCaWdJbnQoIjU1MDY2MjYzMDIyMjc3MzQzNjY5NTc4NzE4ODk1MTY4NTM0MzI2MjUwNjAzNDUzNzc3NTk0MTc1NTAwMTg3MzYwMzg5MTE2NzI5MjQwIiksR3k6QmlnSW50KCIzMjY3MDUxMDAyMDc1ODgxNjk3ODA4MzA4NTEzMDUwNzA0MzE4NDQ3MTI3MzM4MDY1OTI0MzI3NTkzODkwNDMzNTc1NzMzNzQ4MjQyNCIpLGg6QmlnSW50KDEpLGxvd1M6ITAsZW5kbzp7YmV0YTpCaWdJbnQoIjB4N2FlOTZhMmI2NTdjMDcxMDZlNjQ0NzllYWMzNDM0ZTk5Y2YwNDk3NTEyZjU4OTk1YzEzOTZjMjg3MTk1MDFlZSIpLHNwbGl0U2NhbGFyOnQ9Pntjb25zdCBlPVZsLHI9QmlnSW50KCIweDMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1Iiksbj0tT3gqQmlnSW50KCIweGU0NDM3ZWQ2MDEwZTg4Mjg2ZjU0N2ZhOTBhYmZlNGMzIiksaT1CaWdJbnQoIjB4MTE0Y2E1MGY3YThlMmYzZjY1N2MxMTA4ZDlkNDRjZmQ4Iikscz1yLG89QmlnSW50KCIweDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIpLGE9V2wocyp0LGUpLGM9V2woLW4qdCxlKTtsZXQgdT1pdCh0LWEqci1jKmksZSksbD1pdCgtYSpuLWMqcyxlKTtjb25zdCBoPXU+byxwPWw+bztpZihoJiYodT1lLXUpLHAmJihsPWUtbCksdT5vfHxsPm8pdGhyb3cgbmV3IEVycm9yKCJzcGxpdFNjYWxhcjogRW5kb21vcnBoaXNtIGZhaWxlZCwgaz0iK3QpO3JldHVybntrMW5lZzpoLGsxOnUsazJuZWc6cCxrMjpsfX19fSxiMik7ZnVuY3Rpb24gUHgodCl7aWYodC5sZW5ndGghPT0xMzAmJnQubGVuZ3RoIT09MTMyKXRocm93IG5ldyBSeCh7c2lnbmF0dXJlOnR9KTtjb25zdCBlPUJpZ0ludChwcih0LDAsMzIpKSxyPUJpZ0ludChwcih0LDMyLDY0KSksbj0oKCk9Pntjb25zdCBpPStgMHgke3Quc2xpY2UoMTMwKX1gO2lmKCFOdW1iZXIuaXNOYU4oaSkpdHJ5e3JldHVybiBUeChpKX1jYXRjaHt0aHJvdyBuZXcgQ3goe3ZhbHVlOml9KX19KSgpO3JldHVybiB0eXBlb2Ygbj4idSI/e3I6ZSxzOnJ9OntyOmUsczpyLHlQYXJpdHk6bn19ZnVuY3Rpb24gVHgodCl7aWYodD09PTB8fHQ9PT0yNylyZXR1cm4gMDtpZih0PT09MXx8dD09PTI4KXJldHVybiAxO2lmKHQ+PTM1KXJldHVybiB0JTI9PT0wPzE6MDt0aHJvdyBuZXcgVXgoe3ZhbHVlOnR9KX1jbGFzcyBSeCBleHRlbmRzIG1le2NvbnN0cnVjdG9yKHtzaWduYXR1cmU6ZX0pe3N1cGVyKGBWYWx1ZSBcYCR7ZX1cYCBpcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSBzaXplLmAse21ldGFNZXNzYWdlczpbIkV4cGVjdGVkOiA2NCBieXRlcyBvciA2NSBieXRlcy4iLGBSZWNlaXZlZCAke0pyKGV1KGUpKX0gYnl0ZXMuYF19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibmFtZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOiJTaWduYXR1cmUuSW52YWxpZFNlcmlhbGl6ZWRTaXplRXJyb3IifSl9fWNsYXNzIEN4IGV4dGVuZHMgbWV7Y29uc3RydWN0b3Ioe3ZhbHVlOmV9KXtzdXBlcihgVmFsdWUgXGAke2V9XGAgaXMgYW4gaW52YWxpZCB5LXBhcml0eSB2YWx1ZS4gWS1wYXJpdHkgbXVzdCBiZSAwIG9yIDEuYCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm5hbWUiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZToiU2lnbmF0dXJlLkludmFsaWRZUGFyaXR5RXJyb3IifSl9fWNsYXNzIFV4IGV4dGVuZHMgbWV7Y29uc3RydWN0b3Ioe3ZhbHVlOmV9KXtzdXBlcihgVmFsdWUgXGAke2V9XGAgaXMgYW4gaW52YWxpZCB2IHZhbHVlLiB2IG11c3QgYmUgMjcsIDI4IG9yID49MzUuYCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm5hbWUiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZToiU2lnbmF0dXJlLkludmFsaWRWRXJyb3IifSl9fS8qISBzY3VyZS1iYXNlIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICovZnVuY3Rpb24gZnAodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxBcnJheUJ1ZmZlci5pc1ZpZXcodCkmJnQuY29uc3RydWN0b3IubmFtZT09PSJVaW50OEFycmF5In1mdW5jdGlvbiBkcCh0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2UubGVuZ3RoPT09MD8hMDp0P2UuZXZlcnkocj0+dHlwZW9mIHI9PSJzdHJpbmciKTplLmV2ZXJ5KHI9Pk51bWJlci5pc1NhZmVJbnRlZ2VyKHIpKTohMX1mdW5jdGlvbiBKcyh0LGUpe2lmKHR5cGVvZiBlIT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoYCR7dH06IHN0cmluZyBleHBlY3RlZGApO3JldHVybiEwfWZ1bmN0aW9uIGlzKHQpe2lmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcih0KSl0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgaW50ZWdlcjogJHt0fWApfWZ1bmN0aW9uIFFzKHQpe2lmKCFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBFcnJvcigiYXJyYXkgZXhwZWN0ZWQiKX1mdW5jdGlvbiBlbyh0LGUpe2lmKCFkcCghMCxlKSl0aHJvdyBuZXcgRXJyb3IoYCR7dH06IGFycmF5IG9mIHN0cmluZ3MgZXhwZWN0ZWRgKX1mdW5jdGlvbiBwcCh0LGUpe2lmKCFkcCghMSxlKSl0aHJvdyBuZXcgRXJyb3IoYCR7dH06IGFycmF5IG9mIG51bWJlcnMgZXhwZWN0ZWRgKX1mdW5jdGlvbiBncCguLi50KXtjb25zdCBlPXM9PnMscj0ocyxvKT0+YT0+cyhvKGEpKSxuPXQubWFwKHM9PnMuZW5jb2RlKS5yZWR1Y2VSaWdodChyLGUpLGk9dC5tYXAocz0+cy5kZWNvZGUpLnJlZHVjZShyLGUpO3JldHVybntlbmNvZGU6bixkZWNvZGU6aX19ZnVuY3Rpb24geXAodCl7Y29uc3QgZT10eXBlb2YgdD09InN0cmluZyI/dC5zcGxpdCgiIik6dCxyPWUubGVuZ3RoO2VvKCJhbHBoYWJldCIsZSk7Y29uc3Qgbj1uZXcgTWFwKGUubWFwKChpLHMpPT5baSxzXSkpO3JldHVybntlbmNvZGU6aT0+KFFzKGkpLGkubWFwKHM9PntpZighTnVtYmVyLmlzU2FmZUludGVnZXIocyl8fHM8MHx8cz49cil0aHJvdyBuZXcgRXJyb3IoYGFscGhhYmV0LmVuY29kZTogZGlnaXQgaW5kZXggb3V0c2lkZSBhbHBoYWJldCAiJHtzfSIuIEFsbG93ZWQ6ICR7dH1gKTtyZXR1cm4gZVtzXX0pKSxkZWNvZGU6aT0+KFFzKGkpLGkubWFwKHM9PntKcygiYWxwaGFiZXQuZGVjb2RlIixzKTtjb25zdCBvPW4uZ2V0KHMpO2lmKG89PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxldHRlcjogIiR7c30iLiBBbGxvd2VkOiAke3R9YCk7cmV0dXJuIG99KSl9fWZ1bmN0aW9uIHdwKHQ9IiIpe3JldHVybiBKcygiam9pbiIsdCkse2VuY29kZTplPT4oZW8oImpvaW4uZGVjb2RlIixlKSxlLmpvaW4odCkpLGRlY29kZTplPT4oSnMoImpvaW4uZGVjb2RlIixlKSxlLnNwbGl0KHQpKX19ZnVuY3Rpb24gTngodCxlPSI9Iil7cmV0dXJuIGlzKHQpLEpzKCJwYWRkaW5nIixlKSx7ZW5jb2RlKHIpe2ZvcihlbygicGFkZGluZy5lbmNvZGUiLHIpO3IubGVuZ3RoKnQlODspci5wdXNoKGUpO3JldHVybiByfSxkZWNvZGUocil7ZW8oInBhZGRpbmcuZGVjb2RlIixyKTtsZXQgbj1yLmxlbmd0aDtpZihuKnQlOCl0aHJvdyBuZXcgRXJyb3IoInBhZGRpbmc6IGludmFsaWQsIHN0cmluZyBzaG91bGQgaGF2ZSB3aG9sZSBudW1iZXIgb2YgYnl0ZXMiKTtmb3IoO24+MCYmcltuLTFdPT09ZTtuLS0paWYoKG4tMSkqdCU4PT09MCl0aHJvdyBuZXcgRXJyb3IoInBhZGRpbmc6IGludmFsaWQsIHN0cmluZyBoYXMgdG9vIG11Y2ggcGFkZGluZyIpO3JldHVybiByLnNsaWNlKDAsbil9fX1mdW5jdGlvbiBHbCh0LGUscil7aWYoZTwyKXRocm93IG5ldyBFcnJvcihgY29udmVydFJhZGl4OiBpbnZhbGlkIGZyb209JHtlfSwgYmFzZSBjYW5ub3QgYmUgbGVzcyB0aGFuIDJgKTtpZihyPDIpdGhyb3cgbmV3IEVycm9yKGBjb252ZXJ0UmFkaXg6IGludmFsaWQgdG89JHtyfSwgYmFzZSBjYW5ub3QgYmUgbGVzcyB0aGFuIDJgKTtpZihRcyh0KSwhdC5sZW5ndGgpcmV0dXJuW107bGV0IG49MDtjb25zdCBpPVtdLHM9QXJyYXkuZnJvbSh0LGE9PntpZihpcyhhKSxhPDB8fGE+PWUpdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGludGVnZXI6ICR7YX1gKTtyZXR1cm4gYX0pLG89cy5sZW5ndGg7Zm9yKDs7KXtsZXQgYT0wLGM9ITA7Zm9yKGxldCB1PW47dTxvO3UrKyl7Y29uc3QgbD1zW3VdLGg9ZSphLHA9aCtsO2lmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihwKXx8aC9lIT09YXx8cC1sIT09aCl0aHJvdyBuZXcgRXJyb3IoImNvbnZlcnRSYWRpeDogY2Fycnkgb3ZlcmZsb3ciKTtjb25zdCBnPXAvcjthPXAlcjtjb25zdCB3PU1hdGguZmxvb3IoZyk7aWYoc1t1XT13LCFOdW1iZXIuaXNTYWZlSW50ZWdlcih3KXx8dypyK2EhPT1wKXRocm93IG5ldyBFcnJvcigiY29udmVydFJhZGl4OiBjYXJyeSBvdmVyZmxvdyIpO2lmKGMpdz9jPSExOm49dTtlbHNlIGNvbnRpbnVlfWlmKGkucHVzaChhKSxjKWJyZWFrfWZvcihsZXQgYT0wO2E8dC5sZW5ndGgtMSYmdFthXT09PTA7YSsrKWkucHVzaCgwKTtyZXR1cm4gaS5yZXZlcnNlKCl9Y29uc3QgbXA9KHQsZSk9PmU9PT0wP3Q6bXAoZSx0JWUpLHRvPSh0LGUpPT50KyhlLW1wKHQsZSkpLG1hPSgoKT0+e2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8NDA7ZSsrKXQucHVzaCgyKiplKTtyZXR1cm4gdH0pKCk7ZnVuY3Rpb24gWWwodCxlLHIsbil7aWYoUXModCksZTw9MHx8ZT4zMil0aHJvdyBuZXcgRXJyb3IoYGNvbnZlcnRSYWRpeDI6IHdyb25nIGZyb209JHtlfWApO2lmKHI8PTB8fHI+MzIpdGhyb3cgbmV3IEVycm9yKGBjb252ZXJ0UmFkaXgyOiB3cm9uZyB0bz0ke3J9YCk7aWYodG8oZSxyKT4zMil0aHJvdyBuZXcgRXJyb3IoYGNvbnZlcnRSYWRpeDI6IGNhcnJ5IG92ZXJmbG93IGZyb209JHtlfSB0bz0ke3J9IGNhcnJ5Qml0cz0ke3RvKGUscil9YCk7bGV0IGk9MCxzPTA7Y29uc3Qgbz1tYVtlXSxhPW1hW3JdLTEsYz1bXTtmb3IoY29uc3QgdSBvZiB0KXtpZihpcyh1KSx1Pj1vKXRocm93IG5ldyBFcnJvcihgY29udmVydFJhZGl4MjogaW52YWxpZCBkYXRhIHdvcmQ9JHt1fSBmcm9tPSR7ZX1gKTtpZihpPWk8PGV8dSxzK2U+MzIpdGhyb3cgbmV3IEVycm9yKGBjb252ZXJ0UmFkaXgyOiBjYXJyeSBvdmVyZmxvdyBwb3M9JHtzfSBmcm9tPSR7ZX1gKTtmb3Iocys9ZTtzPj1yO3MtPXIpYy5wdXNoKChpPj5zLXImYSk+Pj4wKTtjb25zdCBsPW1hW3NdO2lmKGw9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhcnJ5Iik7aSY9bC0xfWlmKGk9aTw8ci1zJmEsIW4mJnM+PWUpdGhyb3cgbmV3IEVycm9yKCJFeGNlc3MgcGFkZGluZyIpO2lmKCFuJiZpPjApdGhyb3cgbmV3IEVycm9yKGBOb24temVybyBwYWRkaW5nOiAke2l9YCk7cmV0dXJuIG4mJnM+MCYmYy5wdXNoKGk+Pj4wKSxjfWZ1bmN0aW9uIEx4KHQpe2lzKHQpO2NvbnN0IGU9MioqODtyZXR1cm57ZW5jb2RlOnI9PntpZighZnAocikpdGhyb3cgbmV3IEVycm9yKCJyYWRpeC5lbmNvZGUgaW5wdXQgc2hvdWxkIGJlIFVpbnQ4QXJyYXkiKTtyZXR1cm4gR2woQXJyYXkuZnJvbShyKSxlLHQpfSxkZWNvZGU6cj0+KHBwKCJyYWRpeC5kZWNvZGUiLHIpLFVpbnQ4QXJyYXkuZnJvbShHbChyLHQsZSkpKX19ZnVuY3Rpb24gRngodCxlPSExKXtpZihpcyh0KSx0PD0wfHx0PjMyKXRocm93IG5ldyBFcnJvcigicmFkaXgyOiBiaXRzIHNob3VsZCBiZSBpbiAoMC4uMzJdIik7aWYodG8oOCx0KT4zMnx8dG8odCw4KT4zMil0aHJvdyBuZXcgRXJyb3IoInJhZGl4MjogY2Fycnkgb3ZlcmZsb3ciKTtyZXR1cm57ZW5jb2RlOnI9PntpZighZnAocikpdGhyb3cgbmV3IEVycm9yKCJyYWRpeDIuZW5jb2RlIGlucHV0IHNob3VsZCBiZSBVaW50OEFycmF5Iik7cmV0dXJuIFlsKEFycmF5LmZyb20ociksOCx0LCFlKX0sZGVjb2RlOnI9PihwcCgicmFkaXgyLmRlY29kZSIsciksVWludDhBcnJheS5mcm9tKFlsKHIsdCw4LGUpKSl9fWNvbnN0IGt4PWdwKEZ4KDUpLHlwKCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjIzNDU2NyIpLE54KDUpLHdwKCIiKSksTXg9dD0+Z3AoTHgoNTgpLHlwKHQpLHdwKCIiKSksc3M9TXgoIjEyMzQ1Njc4OUFCQ0RFRkdISktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXoiKTtmdW5jdGlvbiBxeCh0KXtyZXR1cm4gaXgoangodCkpfWZ1bmN0aW9uIGp4KHQpe2NvbnN0e3BheWxvYWQ6ZSxzaWduYXR1cmU6cn09dCx7cjpuLHM6aSx5UGFyaXR5OnN9PXIsYT1uZXcgQnguU2lnbmF0dXJlKEJpZ0ludChuKSxCaWdJbnQoaSkpLmFkZFJlY292ZXJ5Qml0KHMpLnJlY292ZXJQdWJsaWNLZXkoZXUoZSkuc3Vic3RyaW5nKDIpKTtyZXR1cm4gWTIoYSl9LyohIG5vYmxlLWNpcGhlcnMgLSBNSVQgTGljZW5zZSAoYykgMjAyMyBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKi9mdW5jdGlvbiBicCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEFycmF5QnVmZmVyLmlzVmlldyh0KSYmdC5jb25zdHJ1Y3Rvci5uYW1lPT09IlVpbnQ4QXJyYXkifWZ1bmN0aW9uIG9jKHQpe2lmKHR5cGVvZiB0IT0iYm9vbGVhbiIpdGhyb3cgbmV3IEVycm9yKGBib29sZWFuIGV4cGVjdGVkLCBub3QgJHt0fWApfWZ1bmN0aW9uIGJhKHQpe2lmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcih0KXx8dDwwKXRocm93IG5ldyBFcnJvcigicG9zaXRpdmUgaW50ZWdlciBleHBlY3RlZCwgZ290ICIrdCl9ZnVuY3Rpb24gc3QodCwuLi5lKXtpZighYnAodCkpdGhyb3cgbmV3IEVycm9yKCJVaW50OEFycmF5IGV4cGVjdGVkIik7aWYoZS5sZW5ndGg+MCYmIWUuaW5jbHVkZXModC5sZW5ndGgpKXRocm93IG5ldyBFcnJvcigiVWludDhBcnJheSBleHBlY3RlZCBvZiBsZW5ndGggIitlKyIsIGdvdCBsZW5ndGg9Iit0Lmxlbmd0aCl9ZnVuY3Rpb24gWmwodCxlPSEwKXtpZih0LmRlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIkhhc2ggaW5zdGFuY2UgaGFzIGJlZW4gZGVzdHJveWVkIik7aWYoZSYmdC5maW5pc2hlZCl0aHJvdyBuZXcgRXJyb3IoIkhhc2gjZGlnZXN0KCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQiKX1mdW5jdGlvbiB6eCh0LGUpe3N0KHQpO2NvbnN0IHI9ZS5vdXRwdXRMZW47aWYodC5sZW5ndGg8cil0aHJvdyBuZXcgRXJyb3IoImRpZ2VzdEludG8oKSBleHBlY3RzIG91dHB1dCBidWZmZXIgb2YgbGVuZ3RoIGF0IGxlYXN0ICIrcil9ZnVuY3Rpb24gWnIodCl7cmV0dXJuIG5ldyBVaW50MzJBcnJheSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQsTWF0aC5mbG9vcih0LmJ5dGVMZW5ndGgvNCkpfWZ1bmN0aW9uIGNpKC4uLnQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0uZmlsbCgwKX1mdW5jdGlvbiBIeCh0KXtyZXR1cm4gbmV3IERhdGFWaWV3KHQuYnVmZmVyLHQuYnl0ZU9mZnNldCx0LmJ5dGVMZW5ndGgpfWNvbnN0IEt4PW5ldyBVaW50OEFycmF5KG5ldyBVaW50MzJBcnJheShbMjg3NDU0MDIwXSkuYnVmZmVyKVswXT09PTY4O2Z1bmN0aW9uIFZ4KHQpe2lmKHR5cGVvZiB0IT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoInN0cmluZyBleHBlY3RlZCIpO3JldHVybiBuZXcgVWludDhBcnJheShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodCkpfWZ1bmN0aW9uIGFjKHQpe2lmKHR5cGVvZiB0PT0ic3RyaW5nIil0PVZ4KHQpO2Vsc2UgaWYoYnAodCkpdD1jYyh0KTtlbHNlIHRocm93IG5ldyBFcnJvcigiVWludDhBcnJheSBleHBlY3RlZCwgZ290ICIrdHlwZW9mIHQpO3JldHVybiB0fWZ1bmN0aW9uIFd4KHQsZSl7aWYoZT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiKXRocm93IG5ldyBFcnJvcigib3B0aW9ucyBtdXN0IGJlIGRlZmluZWQiKTtyZXR1cm4gT2JqZWN0LmFzc2lnbih0LGUpfWZ1bmN0aW9uIEd4KHQsZSl7aWYodC5sZW5ndGghPT1lLmxlbmd0aClyZXR1cm4hMTtsZXQgcj0wO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXJ8PXRbbl1eZVtuXTtyZXR1cm4gcj09PTB9Y29uc3QgWXg9KHQsZSk9PntmdW5jdGlvbiByKG4sLi4uaSl7aWYoc3QobiksIUt4KXRocm93IG5ldyBFcnJvcigiTm9uIGxpdHRsZS1lbmRpYW4gaGFyZHdhcmUgaXMgbm90IHlldCBzdXBwb3J0ZWQiKTtpZih0Lm5vbmNlTGVuZ3RoIT09dm9pZCAwKXtjb25zdCBsPWlbMF07aWYoIWwpdGhyb3cgbmV3IEVycm9yKCJub25jZSAvIGl2IHJlcXVpcmVkIik7dC52YXJTaXplTm9uY2U/c3QobCk6c3QobCx0Lm5vbmNlTGVuZ3RoKX1jb25zdCBzPXQudGFnTGVuZ3RoO3MmJmlbMV0hPT12b2lkIDAmJnN0KGlbMV0pO2NvbnN0IG89ZShuLC4uLmkpLGE9KGwsaCk9PntpZihoIT09dm9pZCAwKXtpZihsIT09Mil0aHJvdyBuZXcgRXJyb3IoImNpcGhlciBvdXRwdXQgbm90IHN1cHBvcnRlZCIpO3N0KGgpfX07bGV0IGM9ITE7cmV0dXJue2VuY3J5cHQobCxoKXtpZihjKXRocm93IG5ldyBFcnJvcigiY2Fubm90IGVuY3J5cHQoKSB0d2ljZSB3aXRoIHNhbWUga2V5ICsgbm9uY2UiKTtyZXR1cm4gYz0hMCxzdChsKSxhKG8uZW5jcnlwdC5sZW5ndGgsaCksby5lbmNyeXB0KGwsaCl9LGRlY3J5cHQobCxoKXtpZihzdChsKSxzJiZsLmxlbmd0aDxzKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjaXBoZXJ0ZXh0IGxlbmd0aDogc21hbGxlciB0aGFuIHRhZ0xlbmd0aD0iK3MpO3JldHVybiBhKG8uZGVjcnlwdC5sZW5ndGgsaCksby5kZWNyeXB0KGwsaCl9fX1yZXR1cm4gT2JqZWN0LmFzc2lnbihyLHQpLHJ9O2Z1bmN0aW9uIFhsKHQsZSxyPSEwKXtpZihlPT09dm9pZCAwKXJldHVybiBuZXcgVWludDhBcnJheSh0KTtpZihlLmxlbmd0aCE9PXQpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIG91dHB1dCBsZW5ndGgsIGV4cGVjdGVkICIrdCsiLCBnb3Q6ICIrZS5sZW5ndGgpO2lmKHImJiFYeChlKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgb3V0cHV0LCBtdXN0IGJlIGFsaWduZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBKbCh0LGUscixuKXtpZih0eXBlb2YgdC5zZXRCaWdVaW50NjQ9PSJmdW5jdGlvbiIpcmV0dXJuIHQuc2V0QmlnVWludDY0KGUscixuKTtjb25zdCBpPUJpZ0ludCgzMikscz1CaWdJbnQoNDI5NDk2NzI5NSksbz1OdW1iZXIocj4+aSZzKSxhPU51bWJlcihyJnMpLGM9NCx1PTA7dC5zZXRVaW50MzIoZStjLG8sbiksdC5zZXRVaW50MzIoZSt1LGEsbil9ZnVuY3Rpb24gWngodCxlLHIpe29jKHIpO2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkoMTYpLGk9SHgobik7cmV0dXJuIEpsKGksMCxCaWdJbnQoZSksciksSmwoaSw4LEJpZ0ludCh0KSxyKSxufWZ1bmN0aW9uIFh4KHQpe3JldHVybiB0LmJ5dGVPZmZzZXQlND09PTB9ZnVuY3Rpb24gY2ModCl7cmV0dXJuIFVpbnQ4QXJyYXkuZnJvbSh0KX12YXIgRXA9e2V4cG9ydHM6e319OyhmdW5jdGlvbih0KXt2YXIgZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHI9In4iO2Z1bmN0aW9uIG4oKXt9T2JqZWN0LmNyZWF0ZSYmKG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobnVsbCksbmV3IG4oKS5fX3Byb3RvX198fChyPSExKSk7ZnVuY3Rpb24gaShjLHUsbCl7dGhpcy5mbj1jLHRoaXMuY29udGV4dD11LHRoaXMub25jZT1sfHwhMX1mdW5jdGlvbiBzKGMsdSxsLGgscCl7aWYodHlwZW9mIGwhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGxpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbiIpO3ZhciBnPW5ldyBpKGwsaHx8YyxwKSx3PXI/cit1OnU7cmV0dXJuIGMuX2V2ZW50c1t3XT9jLl9ldmVudHNbd10uZm4/Yy5fZXZlbnRzW3ddPVtjLl9ldmVudHNbd10sZ106Yy5fZXZlbnRzW3ddLnB1c2goZyk6KGMuX2V2ZW50c1t3XT1nLGMuX2V2ZW50c0NvdW50KyspLGN9ZnVuY3Rpb24gbyhjLHUpey0tYy5fZXZlbnRzQ291bnQ9PT0wP2MuX2V2ZW50cz1uZXcgbjpkZWxldGUgYy5fZXZlbnRzW3VdfWZ1bmN0aW9uIGEoKXt0aGlzLl9ldmVudHM9bmV3IG4sdGhpcy5fZXZlbnRzQ291bnQ9MH1hLnByb3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0aW9uKCl7dmFyIHU9W10sbCxoO2lmKHRoaXMuX2V2ZW50c0NvdW50PT09MClyZXR1cm4gdTtmb3IoaCBpbiBsPXRoaXMuX2V2ZW50cyllLmNhbGwobCxoKSYmdS5wdXNoKHI/aC5zbGljZSgxKTpoKTtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz91LmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGwpKTp1fSxhLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24odSl7dmFyIGw9cj9yK3U6dSxoPXRoaXMuX2V2ZW50c1tsXTtpZighaClyZXR1cm5bXTtpZihoLmZuKXJldHVybltoLmZuXTtmb3IodmFyIHA9MCxnPWgubGVuZ3RoLHc9bmV3IEFycmF5KGcpO3A8ZztwKyspd1twXT1oW3BdLmZuO3JldHVybiB3fSxhLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PWZ1bmN0aW9uKHUpe3ZhciBsPXI/cit1OnUsaD10aGlzLl9ldmVudHNbbF07cmV0dXJuIGg/aC5mbj8xOmgubGVuZ3RoOjB9LGEucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24odSxsLGgscCxnLHcpe3ZhciBiPXI/cit1OnU7aWYoIXRoaXMuX2V2ZW50c1tiXSlyZXR1cm4hMTt2YXIgdj10aGlzLl9ldmVudHNbYl0sTz1hcmd1bWVudHMubGVuZ3RoLEYsXztpZih2LmZuKXtzd2l0Y2godi5vbmNlJiZ0aGlzLnJlbW92ZUxpc3RlbmVyKHUsdi5mbix2b2lkIDAsITApLE8pe2Nhc2UgMTpyZXR1cm4gdi5mbi5jYWxsKHYuY29udGV4dCksITA7Y2FzZSAyOnJldHVybiB2LmZuLmNhbGwodi5jb250ZXh0LGwpLCEwO2Nhc2UgMzpyZXR1cm4gdi5mbi5jYWxsKHYuY29udGV4dCxsLGgpLCEwO2Nhc2UgNDpyZXR1cm4gdi5mbi5jYWxsKHYuY29udGV4dCxsLGgscCksITA7Y2FzZSA1OnJldHVybiB2LmZuLmNhbGwodi5jb250ZXh0LGwsaCxwLGcpLCEwO2Nhc2UgNjpyZXR1cm4gdi5mbi5jYWxsKHYuY29udGV4dCxsLGgscCxnLHcpLCEwfWZvcihfPTEsRj1uZXcgQXJyYXkoTy0xKTtfPE87XysrKUZbXy0xXT1hcmd1bWVudHNbX107di5mbi5hcHBseSh2LmNvbnRleHQsRil9ZWxzZXt2YXIgUD12Lmxlbmd0aCxDO2ZvcihfPTA7XzxQO18rKylzd2l0Y2godltfXS5vbmNlJiZ0aGlzLnJlbW92ZUxpc3RlbmVyKHUsdltfXS5mbix2b2lkIDAsITApLE8pe2Nhc2UgMTp2W19dLmZuLmNhbGwodltfXS5jb250ZXh0KTticmVhaztjYXNlIDI6dltfXS5mbi5jYWxsKHZbX10uY29udGV4dCxsKTticmVhaztjYXNlIDM6dltfXS5mbi5jYWxsKHZbX10uY29udGV4dCxsLGgpO2JyZWFrO2Nhc2UgNDp2W19dLmZuLmNhbGwodltfXS5jb250ZXh0LGwsaCxwKTticmVhaztkZWZhdWx0OmlmKCFGKWZvcihDPTEsRj1uZXcgQXJyYXkoTy0xKTtDPE87QysrKUZbQy0xXT1hcmd1bWVudHNbQ107dltfXS5mbi5hcHBseSh2W19dLmNvbnRleHQsRil9fXJldHVybiEwfSxhLnByb3RvdHlwZS5vbj1mdW5jdGlvbih1LGwsaCl7cmV0dXJuIHModGhpcyx1LGwsaCwhMSl9LGEucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24odSxsLGgpe3JldHVybiBzKHRoaXMsdSxsLGgsITApfSxhLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbih1LGwsaCxwKXt2YXIgZz1yP3IrdTp1O2lmKCF0aGlzLl9ldmVudHNbZ10pcmV0dXJuIHRoaXM7aWYoIWwpcmV0dXJuIG8odGhpcyxnKSx0aGlzO3ZhciB3PXRoaXMuX2V2ZW50c1tnXTtpZih3LmZuKXcuZm49PT1sJiYoIXB8fHcub25jZSkmJighaHx8dy5jb250ZXh0PT09aCkmJm8odGhpcyxnKTtlbHNle2Zvcih2YXIgYj0wLHY9W10sTz13Lmxlbmd0aDtiPE87YisrKSh3W2JdLmZuIT09bHx8cCYmIXdbYl0ub25jZXx8aCYmd1tiXS5jb250ZXh0IT09aCkmJnYucHVzaCh3W2JdKTt2Lmxlbmd0aD90aGlzLl9ldmVudHNbZ109di5sZW5ndGg9PT0xP3ZbMF06djpvKHRoaXMsZyl9cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbih1KXt2YXIgbDtyZXR1cm4gdT8obD1yP3IrdTp1LHRoaXMuX2V2ZW50c1tsXSYmbyh0aGlzLGwpKToodGhpcy5fZXZlbnRzPW5ldyBuLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXN9LGEucHJvdG90eXBlLm9mZj1hLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcixhLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1hLnByb3RvdHlwZS5vbixhLnByZWZpeGVkPXIsYS5FdmVudEVtaXR0ZXI9YSx0LmV4cG9ydHM9YX0pKEVwKTt2YXIgSng9RXAuZXhwb3J0cztjb25zdCBHNj1PYyhKeCk7ZnVuY3Rpb24gUXgodCxlLHIsbil7aWYodHlwZW9mIHQuc2V0QmlnVWludDY0PT0iZnVuY3Rpb24iKXJldHVybiB0LnNldEJpZ1VpbnQ2NChlLHIsbik7Y29uc3QgaT1CaWdJbnQoMzIpLHM9QmlnSW50KDQyOTQ5NjcyOTUpLG89TnVtYmVyKHI+PmkmcyksYT1OdW1iZXIociZzKSxjPW4/NDowLHU9bj8wOjQ7dC5zZXRVaW50MzIoZStjLG8sbiksdC5zZXRVaW50MzIoZSt1LGEsbil9ZnVuY3Rpb24gZV8odCxlLHIpe3JldHVybiB0JmVefnQmcn1mdW5jdGlvbiB0Xyh0LGUscil7cmV0dXJuIHQmZV50JnJeZSZyfWNsYXNzIHZwIGV4dGVuZHMgQW97Y29uc3RydWN0b3IoZSxyLG4saSl7c3VwZXIoKSx0aGlzLmZpbmlzaGVkPSExLHRoaXMubGVuZ3RoPTAsdGhpcy5wb3M9MCx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmJsb2NrTGVuPWUsdGhpcy5vdXRwdXRMZW49cix0aGlzLnBhZE9mZnNldD1uLHRoaXMuaXNMRT1pLHRoaXMuYnVmZmVyPW5ldyBVaW50OEFycmF5KGUpLHRoaXMudmlldz1vYSh0aGlzLmJ1ZmZlcil9dXBkYXRlKGUpe1hyKHRoaXMpLGU9TnQoZSksTHQoZSk7Y29uc3R7dmlldzpyLGJ1ZmZlcjpuLGJsb2NrTGVuOml9PXRoaXMscz1lLmxlbmd0aDtmb3IobGV0IG89MDtvPHM7KXtjb25zdCBhPU1hdGgubWluKGktdGhpcy5wb3Mscy1vKTtpZihhPT09aSl7Y29uc3QgYz1vYShlKTtmb3IoO2k8PXMtbztvKz1pKXRoaXMucHJvY2VzcyhjLG8pO2NvbnRpbnVlfW4uc2V0KGUuc3ViYXJyYXkobyxvK2EpLHRoaXMucG9zKSx0aGlzLnBvcys9YSxvKz1hLHRoaXMucG9zPT09aSYmKHRoaXMucHJvY2VzcyhyLDApLHRoaXMucG9zPTApfXJldHVybiB0aGlzLmxlbmd0aCs9ZS5sZW5ndGgsdGhpcy5yb3VuZENsZWFuKCksdGhpc31kaWdlc3RJbnRvKGUpe1hyKHRoaXMpLFdjKGUsdGhpcyksdGhpcy5maW5pc2hlZD0hMDtjb25zdHtidWZmZXI6cix2aWV3Om4sYmxvY2tMZW46aSxpc0xFOnN9PXRoaXM7bGV0e3BvczpvfT10aGlzO3JbbysrXT0xMjgsSXQodGhpcy5idWZmZXIuc3ViYXJyYXkobykpLHRoaXMucGFkT2Zmc2V0PmktbyYmKHRoaXMucHJvY2VzcyhuLDApLG89MCk7Zm9yKGxldCBoPW87aDxpO2grKylyW2hdPTA7UXgobixpLTgsQmlnSW50KHRoaXMubGVuZ3RoKjgpLHMpLHRoaXMucHJvY2VzcyhuLDApO2NvbnN0IGE9b2EoZSksYz10aGlzLm91dHB1dExlbjtpZihjJTQpdGhyb3cgbmV3IEVycm9yKCJfc2hhMjogb3V0cHV0TGVuIHNob3VsZCBiZSBhbGlnbmVkIHRvIDMyYml0Iik7Y29uc3QgdT1jLzQsbD10aGlzLmdldCgpO2lmKHU+bC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJfc2hhMjogb3V0cHV0TGVuIGJpZ2dlciB0aGFuIHN0YXRlIik7Zm9yKGxldCBoPTA7aDx1O2grKylhLnNldFVpbnQzMig0KmgsbFtoXSxzKX1kaWdlc3QoKXtjb25zdHtidWZmZXI6ZSxvdXRwdXRMZW46cn09dGhpczt0aGlzLmRpZ2VzdEludG8oZSk7Y29uc3Qgbj1lLnNsaWNlKDAscik7cmV0dXJuIHRoaXMuZGVzdHJveSgpLG59X2Nsb25lSW50byhlKXtlfHwoZT1uZXcgdGhpcy5jb25zdHJ1Y3RvciksZS5zZXQoLi4udGhpcy5nZXQoKSk7Y29uc3R7YmxvY2tMZW46cixidWZmZXI6bixsZW5ndGg6aSxmaW5pc2hlZDpzLGRlc3Ryb3llZDpvLHBvczphfT10aGlzO3JldHVybiBlLmRlc3Ryb3llZD1vLGUuZmluaXNoZWQ9cyxlLmxlbmd0aD1pLGUucG9zPWEsaSVyJiZlLmJ1ZmZlci5zZXQobiksZX1jbG9uZSgpe3JldHVybiB0aGlzLl9jbG9uZUludG8oKX19Y29uc3QgQnI9VWludDMyQXJyYXkuZnJvbShbMTc3OTAzMzcwMywzMTQ0MTM0Mjc3LDEwMTM5MDQyNDIsMjc3MzQ4MDc2MiwxMzU5ODkzMTE5LDI2MDA4MjI5MjQsNTI4NzM0NjM1LDE1NDE0NTkyMjVdKSxqZT1VaW50MzJBcnJheS5mcm9tKFszNDE4MDcwMzY1LDMyMzgzNzEwMzIsMTY1NDI3MDI1MCw5MTQxNTA2NjMsMjQzODUyOTM3MCw4MTI3MDI5OTksMzU1NDYyMzYwLDQxNDQ5MTI2OTcsMTczMTQwNTQxNSw0MjkwNzc1ODU3LDIzOTQxODAyMzEsMTc1MDYwMzAyNSwzNjc1MDA4NTI1LDE2OTQwNzY4MzksMTIwMzA2MjgxMywzMjA0MDc1NDI4XSksemU9VWludDMyQXJyYXkuZnJvbShbMTc3OTAzMzcwMyw0MDg5MjM1NzIwLDMxNDQxMzQyNzcsMjIyNzg3MzU5NSwxMDEzOTA0MjQyLDQyNzExNzU3MjMsMjc3MzQ4MDc2MiwxNTk1NzUwMTI5LDEzNTk4OTMxMTksMjkxNzU2NTEzNywyNjAwODIyOTI0LDcyNTUxMTE5OSw1Mjg3MzQ2MzUsNDIxNTM4OTU0NywxNTQxNDU5MjI1LDMyNzAzMzIwOV0pLHJfPVVpbnQzMkFycmF5LmZyb20oWzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0pLFByPW5ldyBVaW50MzJBcnJheSg2NCk7Y2xhc3Mgbl8gZXh0ZW5kcyB2cHtjb25zdHJ1Y3RvcihlPTMyKXtzdXBlcig2NCxlLDgsITEpLHRoaXMuQT1CclswXXwwLHRoaXMuQj1CclsxXXwwLHRoaXMuQz1CclsyXXwwLHRoaXMuRD1CclszXXwwLHRoaXMuRT1Ccls0XXwwLHRoaXMuRj1Ccls1XXwwLHRoaXMuRz1Ccls2XXwwLHRoaXMuSD1Ccls3XXwwfWdldCgpe2NvbnN0e0E6ZSxCOnIsQzpuLEQ6aSxFOnMsRjpvLEc6YSxIOmN9PXRoaXM7cmV0dXJuW2UscixuLGkscyxvLGEsY119c2V0KGUscixuLGkscyxvLGEsYyl7dGhpcy5BPWV8MCx0aGlzLkI9cnwwLHRoaXMuQz1ufDAsdGhpcy5EPWl8MCx0aGlzLkU9c3wwLHRoaXMuRj1vfDAsdGhpcy5HPWF8MCx0aGlzLkg9Y3wwfXByb2Nlc3MoZSxyKXtmb3IobGV0IGg9MDtoPDE2O2grKyxyKz00KVByW2hdPWUuZ2V0VWludDMyKHIsITEpO2ZvcihsZXQgaD0xNjtoPDY0O2grKyl7Y29uc3QgcD1QcltoLTE1XSxnPVByW2gtMl0sdz1NdChwLDcpXk10KHAsMTgpXnA+Pj4zLGI9TXQoZywxNyleTXQoZywxOSleZz4+PjEwO1ByW2hdPWIrUHJbaC03XSt3K1ByW2gtMTZdfDB9bGV0e0E6bixCOmksQzpzLEQ6byxFOmEsRjpjLEc6dSxIOmx9PXRoaXM7Zm9yKGxldCBoPTA7aDw2NDtoKyspe2NvbnN0IHA9TXQoYSw2KV5NdChhLDExKV5NdChhLDI1KSxnPWwrcCtlXyhhLGMsdSkrcl9baF0rUHJbaF18MCxiPShNdChuLDIpXk10KG4sMTMpXk10KG4sMjIpKSt0XyhuLGkscyl8MDtsPXUsdT1jLGM9YSxhPW8rZ3wwLG89cyxzPWksaT1uLG49ZytifDB9bj1uK3RoaXMuQXwwLGk9aSt0aGlzLkJ8MCxzPXMrdGhpcy5DfDAsbz1vK3RoaXMuRHwwLGE9YSt0aGlzLkV8MCxjPWMrdGhpcy5GfDAsdT11K3RoaXMuR3wwLGw9bCt0aGlzLkh8MCx0aGlzLnNldChuLGkscyxvLGEsYyx1LGwpfXJvdW5kQ2xlYW4oKXtJdChQcil9ZGVzdHJveSgpe3RoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCksSXQodGhpcy5idWZmZXIpfX1jb25zdCB4cD1fZChbIjB4NDI4YTJmOThkNzI4YWUyMiIsIjB4NzEzNzQ0OTEyM2VmNjVjZCIsIjB4YjVjMGZiY2ZlYzRkM2IyZiIsIjB4ZTliNWRiYTU4MTg5ZGJiYyIsIjB4Mzk1NmMyNWJmMzQ4YjUzOCIsIjB4NTlmMTExZjFiNjA1ZDAxOSIsIjB4OTIzZjgyYTRhZjE5NGY5YiIsIjB4YWIxYzVlZDVkYTZkODExOCIsIjB4ZDgwN2FhOThhMzAzMDI0MiIsIjB4MTI4MzViMDE0NTcwNmZiZSIsIjB4MjQzMTg1YmU0ZWU0YjI4YyIsIjB4NTUwYzdkYzNkNWZmYjRlMiIsIjB4NzJiZTVkNzRmMjdiODk2ZiIsIjB4ODBkZWIxZmUzYjE2OTZiMSIsIjB4OWJkYzA2YTcyNWM3MTIzNSIsIjB4YzE5YmYxNzRjZjY5MjY5NCIsIjB4ZTQ5YjY5YzE5ZWYxNGFkMiIsIjB4ZWZiZTQ3ODYzODRmMjVlMyIsIjB4MGZjMTlkYzY4YjhjZDViNSIsIjB4MjQwY2ExY2M3N2FjOWM2NSIsIjB4MmRlOTJjNmY1OTJiMDI3NSIsIjB4NGE3NDg0YWE2ZWE2ZTQ4MyIsIjB4NWNiMGE5ZGNiZDQxZmJkNCIsIjB4NzZmOTg4ZGE4MzExNTNiNSIsIjB4OTgzZTUxNTJlZTY2ZGZhYiIsIjB4YTgzMWM2NmQyZGI0MzIxMCIsIjB4YjAwMzI3Yzg5OGZiMjEzZiIsIjB4YmY1OTdmYzdiZWVmMGVlNCIsIjB4YzZlMDBiZjMzZGE4OGZjMiIsIjB4ZDVhNzkxNDc5MzBhYTcyNSIsIjB4MDZjYTYzNTFlMDAzODI2ZiIsIjB4MTQyOTI5NjcwYTBlNmU3MCIsIjB4MjdiNzBhODU0NmQyMmZmYyIsIjB4MmUxYjIxMzg1YzI2YzkyNiIsIjB4NGQyYzZkZmM1YWM0MmFlZCIsIjB4NTMzODBkMTM5ZDk1YjNkZiIsIjB4NjUwYTczNTQ4YmFmNjNkZSIsIjB4NzY2YTBhYmIzYzc3YjJhOCIsIjB4ODFjMmM5MmU0N2VkYWVlNiIsIjB4OTI3MjJjODUxNDgyMzUzYiIsIjB4YTJiZmU4YTE0Y2YxMDM2NCIsIjB4YTgxYTY2NGJiYzQyMzAwMSIsIjB4YzI0YjhiNzBkMGY4OTc5MSIsIjB4Yzc2YzUxYTMwNjU0YmUzMCIsIjB4ZDE5MmU4MTlkNmVmNTIxOCIsIjB4ZDY5OTA2MjQ1NTY1YTkxMCIsIjB4ZjQwZTM1ODU1NzcxMjAyYSIsIjB4MTA2YWEwNzAzMmJiZDFiOCIsIjB4MTlhNGMxMTZiOGQyZDBjOCIsIjB4MWUzNzZjMDg1MTQxYWI1MyIsIjB4Mjc0ODc3NGNkZjhlZWI5OSIsIjB4MzRiMGJjYjVlMTliNDhhOCIsIjB4MzkxYzBjYjNjNWM5NWE2MyIsIjB4NGVkOGFhNGFlMzQxOGFjYiIsIjB4NWI5Y2NhNGY3NzYzZTM3MyIsIjB4NjgyZTZmZjNkNmIyYjhhMyIsIjB4NzQ4ZjgyZWU1ZGVmYjJmYyIsIjB4NzhhNTYzNmY0MzE3MmY2MCIsIjB4ODRjODc4MTRhMWYwYWI3MiIsIjB4OGNjNzAyMDgxYTY0MzllYyIsIjB4OTBiZWZmZmEyMzYzMWUyOCIsIjB4YTQ1MDZjZWJkZTgyYmRlOSIsIjB4YmVmOWEzZjdiMmM2NzkxNSIsIjB4YzY3MTc4ZjJlMzcyNTMyYiIsIjB4Y2EyNzNlY2VlYTI2NjE5YyIsIjB4ZDE4NmI4YzcyMWMwYzIwNyIsIjB4ZWFkYTdkZDZjZGUwZWIxZSIsIjB4ZjU3ZDRmN2ZlZTZlZDE3OCIsIjB4MDZmMDY3YWE3MjE3NmZiYSIsIjB4MGE2MzdkYzVhMmM4OThhNiIsIjB4MTEzZjk4MDRiZWY5MGRhZSIsIjB4MWI3MTBiMzUxMzFjNDcxYiIsIjB4MjhkYjc3ZjUyMzA0N2Q4NCIsIjB4MzJjYWFiN2I0MGM3MjQ5MyIsIjB4M2M5ZWJlMGExNWM5YmViYyIsIjB4NDMxZDY3YzQ5YzEwMGQ0YyIsIjB4NGNjNWQ0YmVjYjNlNDJiNiIsIjB4NTk3ZjI5OWNmYzY1N2UyYSIsIjB4NWZjYjZmYWIzYWQ2ZmFlYyIsIjB4NmM0NDE5OGM0YTQ3NTgxNyJdLm1hcCh0PT5CaWdJbnQodCkpKSxpXz14cFswXSxzXz14cFsxXSxUcj1uZXcgVWludDMyQXJyYXkoODApLFJyPW5ldyBVaW50MzJBcnJheSg4MCk7Y2xhc3MgcnUgZXh0ZW5kcyB2cHtjb25zdHJ1Y3RvcihlPTY0KXtzdXBlcigxMjgsZSwxNiwhMSksdGhpcy5BaD16ZVswXXwwLHRoaXMuQWw9emVbMV18MCx0aGlzLkJoPXplWzJdfDAsdGhpcy5CbD16ZVszXXwwLHRoaXMuQ2g9emVbNF18MCx0aGlzLkNsPXplWzVdfDAsdGhpcy5EaD16ZVs2XXwwLHRoaXMuRGw9emVbN118MCx0aGlzLkVoPXplWzhdfDAsdGhpcy5FbD16ZVs5XXwwLHRoaXMuRmg9emVbMTBdfDAsdGhpcy5GbD16ZVsxMV18MCx0aGlzLkdoPXplWzEyXXwwLHRoaXMuR2w9emVbMTNdfDAsdGhpcy5IaD16ZVsxNF18MCx0aGlzLkhsPXplWzE1XXwwfWdldCgpe2NvbnN0e0FoOmUsQWw6cixCaDpuLEJsOmksQ2g6cyxDbDpvLERoOmEsRGw6YyxFaDp1LEVsOmwsRmg6aCxGbDpwLEdoOmcsR2w6dyxIaDpiLEhsOnZ9PXRoaXM7cmV0dXJuW2UscixuLGkscyxvLGEsYyx1LGwsaCxwLGcsdyxiLHZdfXNldChlLHIsbixpLHMsbyxhLGMsdSxsLGgscCxnLHcsYix2KXt0aGlzLkFoPWV8MCx0aGlzLkFsPXJ8MCx0aGlzLkJoPW58MCx0aGlzLkJsPWl8MCx0aGlzLkNoPXN8MCx0aGlzLkNsPW98MCx0aGlzLkRoPWF8MCx0aGlzLkRsPWN8MCx0aGlzLkVoPXV8MCx0aGlzLkVsPWx8MCx0aGlzLkZoPWh8MCx0aGlzLkZsPXB8MCx0aGlzLkdoPWd8MCx0aGlzLkdsPXd8MCx0aGlzLkhoPWJ8MCx0aGlzLkhsPXZ8MH1wcm9jZXNzKGUscil7Zm9yKGxldCBfPTA7XzwxNjtfKysscis9NClUcltfXT1lLmdldFVpbnQzMihyKSxScltfXT1lLmdldFVpbnQzMihyKz00KTtmb3IobGV0IF89MTY7Xzw4MDtfKyspe2NvbnN0IFA9VHJbXy0xNV18MCxDPVJyW18tMTVdfDAsaj1NcihQLEMsMSleTXIoUCxDLDgpXklsKFAsQyw3KSxxPXFyKFAsQywxKV5xcihQLEMsOCleU2woUCxDLDcpLE09VHJbXy0yXXwwLFQ9UnJbXy0yXXwwLHo9TXIoTSxULDE5KV5QaShNLFQsNjEpXklsKE0sVCw2KSxVPXFyKE0sVCwxOSleVGkoTSxULDYxKV5TbChNLFQsNiksTj12dihxLFUsUnJbXy03XSxScltfLTE2XSksRD14dihOLGoseixUcltfLTddLFRyW18tMTZdKTtUcltfXT1EfDAsUnJbX109TnwwfWxldHtBaDpuLEFsOmksQmg6cyxCbDpvLENoOmEsQ2w6YyxEaDp1LERsOmwsRWg6aCxFbDpwLEZoOmcsRmw6dyxHaDpiLEdsOnYsSGg6TyxIbDpGfT10aGlzO2ZvcihsZXQgXz0wO188ODA7XysrKXtjb25zdCBQPU1yKGgscCwxNCleTXIoaCxwLDE4KV5QaShoLHAsNDEpLEM9cXIoaCxwLDE0KV5xcihoLHAsMTgpXlRpKGgscCw0MSksaj1oJmdefmgmYixxPXAmd15+cCZ2LE09X3YoRixDLHEsc19bX10sUnJbX10pLFQ9SXYoTSxPLFAsaixpX1tfXSxUcltfXSksej1NfDAsVT1NcihuLGksMjgpXlBpKG4saSwzNCleUGkobixpLDM5KSxOPXFyKG4saSwyOCleVGkobixpLDM0KV5UaShuLGksMzkpLEQ9biZzXm4mYV5zJmEsUj1pJm9eaSZjXm8mYztPPWJ8MCxGPXZ8MCxiPWd8MCx2PXd8MCxnPWh8MCx3PXB8MCx7aCxsOnB9PVB0KHV8MCxsfDAsVHwwLHp8MCksdT1hfDAsbD1jfDAsYT1zfDAsYz1vfDAscz1ufDAsbz1pfDA7Y29uc3QgeT1LYyh6LE4sUik7bj1WYyh5LFQsVSxEKSxpPXl8MH0oe2g6bixsOml9PVB0KHRoaXMuQWh8MCx0aGlzLkFsfDAsbnwwLGl8MCkpLHtoOnMsbDpvfT1QdCh0aGlzLkJofDAsdGhpcy5CbHwwLHN8MCxvfDApLHtoOmEsbDpjfT1QdCh0aGlzLkNofDAsdGhpcy5DbHwwLGF8MCxjfDApLHtoOnUsbH09UHQodGhpcy5EaHwwLHRoaXMuRGx8MCx1fDAsbHwwKSx7aCxsOnB9PVB0KHRoaXMuRWh8MCx0aGlzLkVsfDAsaHwwLHB8MCkse2g6ZyxsOnd9PVB0KHRoaXMuRmh8MCx0aGlzLkZsfDAsZ3wwLHd8MCkse2g6YixsOnZ9PVB0KHRoaXMuR2h8MCx0aGlzLkdsfDAsYnwwLHZ8MCkse2g6TyxsOkZ9PVB0KHRoaXMuSGh8MCx0aGlzLkhsfDAsT3wwLEZ8MCksdGhpcy5zZXQobixpLHMsbyxhLGMsdSxsLGgscCxnLHcsYix2LE8sRil9cm91bmRDbGVhbigpe0l0KFRyLFJyKX1kZXN0cm95KCl7SXQodGhpcy5idWZmZXIpLHRoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDApfX1jbGFzcyBvXyBleHRlbmRzIHJ1e2NvbnN0cnVjdG9yKCl7c3VwZXIoNDgpLHRoaXMuQWg9amVbMF18MCx0aGlzLkFsPWplWzFdfDAsdGhpcy5CaD1qZVsyXXwwLHRoaXMuQmw9amVbM118MCx0aGlzLkNoPWplWzRdfDAsdGhpcy5DbD1qZVs1XXwwLHRoaXMuRGg9amVbNl18MCx0aGlzLkRsPWplWzddfDAsdGhpcy5FaD1qZVs4XXwwLHRoaXMuRWw9amVbOV18MCx0aGlzLkZoPWplWzEwXXwwLHRoaXMuRmw9amVbMTFdfDAsdGhpcy5HaD1qZVsxMl18MCx0aGlzLkdsPWplWzEzXXwwLHRoaXMuSGg9amVbMTRdfDAsdGhpcy5IbD1qZVsxNV18MH19Y29uc3QgSGU9VWludDMyQXJyYXkuZnJvbShbNTczNjQ1MjA0LDQyMzA3Mzk3NTYsMjY3MzE3MjM4NywzMzYwNDQ5NzMwLDU5Njg4MzU2MywxODY3NzU1ODU3LDI1MjAyODI5MDUsMTQ5NzQyNjYyMSwyNTE5MjE5OTM4LDI4Mjc5NDM5MDcsMzE5MzgzOTE0MSwxNDAxMzA1NDkwLDcyMTUyNTI0NCw3NDY5NjEwNjYsMjQ2ODg1ODUyLDIxNzcxODI4ODJdKTtjbGFzcyBhXyBleHRlbmRzIHJ1e2NvbnN0cnVjdG9yKCl7c3VwZXIoMzIpLHRoaXMuQWg9SGVbMF18MCx0aGlzLkFsPUhlWzFdfDAsdGhpcy5CaD1IZVsyXXwwLHRoaXMuQmw9SGVbM118MCx0aGlzLkNoPUhlWzRdfDAsdGhpcy5DbD1IZVs1XXwwLHRoaXMuRGg9SGVbNl18MCx0aGlzLkRsPUhlWzddfDAsdGhpcy5FaD1IZVs4XXwwLHRoaXMuRWw9SGVbOV18MCx0aGlzLkZoPUhlWzEwXXwwLHRoaXMuRmw9SGVbMTFdfDAsdGhpcy5HaD1IZVsxMl18MCx0aGlzLkdsPUhlWzEzXXwwLHRoaXMuSGg9SGVbMTRdfDAsdGhpcy5IbD1IZVsxNV18MH19Y29uc3QgQm89dHMoKCk9Pm5ldyBuXyksY189dHMoKCk9Pm5ldyBydSksdV89dHMoKCk9Pm5ldyBvXyksbF89dHMoKCk9Pm5ldyBhXyksaF89VWludDhBcnJheS5mcm9tKFswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE0LDEwLDQsOCw5LDE1LDEzLDYsMSwxMiwwLDIsMTEsNyw1LDMsMTEsOCwxMiwwLDUsMiwxNSwxMywxMCwxNCwzLDYsNywxLDksNCw3LDksMywxLDEzLDEyLDExLDE0LDIsNiw1LDEwLDQsMCwxNSw4LDksMCw1LDcsMiw0LDEwLDE1LDE0LDEsMTEsMTIsNiw4LDMsMTMsMiwxMiw2LDEwLDAsMTEsOCwzLDQsMTMsNyw1LDE1LDE0LDEsOSwxMiw1LDEsMTUsMTQsMTMsNCwxMCwwLDcsNiwzLDksMiw4LDExLDEzLDExLDcsMTQsMTIsMSwzLDksNSwwLDE1LDQsOCw2LDIsMTAsNiwxNSwxNCw5LDExLDMsMCw4LDEyLDIsMTMsNywxLDQsMTAsNSwxMCwyLDgsNCw3LDYsMSw1LDE1LDExLDksMTQsMywxMiwxMywwLDAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTQsMTAsNCw4LDksMTUsMTMsNiwxLDEyLDAsMiwxMSw3LDUsMywxMSw4LDEyLDAsNSwyLDE1LDEzLDEwLDE0LDMsNiw3LDEsOSw0LDcsOSwzLDEsMTMsMTIsMTEsMTQsMiw2LDUsMTAsNCwwLDE1LDgsOSwwLDUsNywyLDQsMTAsMTUsMTQsMSwxMSwxMiw2LDgsMywxMywyLDEyLDYsMTAsMCwxMSw4LDMsNCwxMyw3LDUsMTUsMTQsMSw5XSksT2U9VWludDMyQXJyYXkuZnJvbShbNDA4OTIzNTcyMCwxNzc5MDMzNzAzLDIyMjc4NzM1OTUsMzE0NDEzNDI3Nyw0MjcxMTc1NzIzLDEwMTM5MDQyNDIsMTU5NTc1MDEyOSwyNzczNDgwNzYyLDI5MTc1NjUxMzcsMTM1OTg5MzExOSw3MjU1MTExOTksMjYwMDgyMjkyNCw0MjE1Mzg5NTQ3LDUyODczNDYzNSwzMjcwMzMyMDksMTU0MTQ1OTIyNV0pLFg9bmV3IFVpbnQzMkFycmF5KDMyKTtmdW5jdGlvbiBDcih0LGUscixuLGkscyl7Y29uc3Qgbz1pW3NdLGE9aVtzKzFdO2xldCBjPVhbMip0XSx1PVhbMip0KzFdLGw9WFsyKmVdLGg9WFsyKmUrMV0scD1YWzIqcl0sZz1YWzIqcisxXSx3PVhbMipuXSxiPVhbMipuKzFdLHY9S2MoYyxsLG8pO3U9VmModix1LGgsYSksYz12fDAse0RoOmIsRGw6d309e0RoOmJedSxEbDp3XmN9LHtEaDpiLERsOnd9PXtEaDpndihiLHcpLERsOnl2KGIpfSx7aDpnLGw6cH09UHQoZyxwLGIsdykse0JoOmgsQmw6bH09e0JoOmheZyxCbDpsXnB9LHtCaDpoLEJsOmx9PXtCaDpNcihoLGwsMjQpLEJsOnFyKGgsbCwyNCl9LFhbMip0XT1jLFhbMip0KzFdPXUsWFsyKmVdPWwsWFsyKmUrMV09aCxYWzIqcl09cCxYWzIqcisxXT1nLFhbMipuXT13LFhbMipuKzFdPWJ9ZnVuY3Rpb24gVXIodCxlLHIsbixpLHMpe2NvbnN0IG89aVtzXSxhPWlbcysxXTtsZXQgYz1YWzIqdF0sdT1YWzIqdCsxXSxsPVhbMiplXSxoPVhbMiplKzFdLHA9WFsyKnJdLGc9WFsyKnIrMV0sdz1YWzIqbl0sYj1YWzIqbisxXSx2PUtjKGMsbCxvKTt1PVZjKHYsdSxoLGEpLGM9dnwwLHtEaDpiLERsOnd9PXtEaDpiXnUsRGw6d15jfSx7RGg6YixEbDp3fT17RGg6TXIoYix3LDE2KSxEbDpxcihiLHcsMTYpfSx7aDpnLGw6cH09UHQoZyxwLGIsdykse0JoOmgsQmw6bH09e0JoOmheZyxCbDpsXnB9LHtCaDpoLEJsOmx9PXtCaDpQaShoLGwsNjMpLEJsOlRpKGgsbCw2Myl9LFhbMip0XT1jLFhbMip0KzFdPXUsWFsyKmVdPWwsWFsyKmUrMV09aCxYWzIqcl09cCxYWzIqcisxXT1nLFhbMipuXT13LFhbMipuKzFdPWJ9ZnVuY3Rpb24gZl8odCxlPXt9LHIsbixpKXtpZihJcihyKSx0PDB8fHQ+cil0aHJvdyBuZXcgRXJyb3IoIm91dHB1dExlbiBiaWdnZXIgdGhhbiBrZXlMZW4iKTtjb25zdHtrZXk6cyxzYWx0Om8scGVyc29uYWxpemF0aW9uOmF9PWU7aWYocyE9PXZvaWQgMCYmKHMubGVuZ3RoPDF8fHMubGVuZ3RoPnIpKXRocm93IG5ldyBFcnJvcigia2V5IGxlbmd0aCBtdXN0IGJlIHVuZGVmaW5lZCBvciAxLi4iK3IpO2lmKG8hPT12b2lkIDAmJm8ubGVuZ3RoIT09bil0aHJvdyBuZXcgRXJyb3IoInNhbHQgbXVzdCBiZSB1bmRlZmluZWQgb3IgIituKTtpZihhIT09dm9pZCAwJiZhLmxlbmd0aCE9PWkpdGhyb3cgbmV3IEVycm9yKCJwZXJzb25hbGl6YXRpb24gbXVzdCBiZSB1bmRlZmluZWQgb3IgIitpKX1jbGFzcyBkXyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKGUscil7c3VwZXIoKSx0aGlzLmZpbmlzaGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMubGVuZ3RoPTAsdGhpcy5wb3M9MCxJcihlKSxJcihyKSx0aGlzLmJsb2NrTGVuPWUsdGhpcy5vdXRwdXRMZW49cix0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheShlKSx0aGlzLmJ1ZmZlcjMyPXppKHRoaXMuYnVmZmVyKX11cGRhdGUoZSl7WHIodGhpcyksZT1OdChlKSxMdChlKTtjb25zdHtibG9ja0xlbjpyLGJ1ZmZlcjpuLGJ1ZmZlcjMyOml9PXRoaXMscz1lLmxlbmd0aCxvPWUuYnl0ZU9mZnNldCxhPWUuYnVmZmVyO2ZvcihsZXQgYz0wO2M8czspe3RoaXMucG9zPT09ciYmKGpyKGkpLHRoaXMuY29tcHJlc3MoaSwwLCExKSxqcihpKSx0aGlzLnBvcz0wKTtjb25zdCB1PU1hdGgubWluKHItdGhpcy5wb3Mscy1jKSxsPW8rYztpZih1PT09ciYmIShsJTQpJiZjK3U8cyl7Y29uc3QgaD1uZXcgVWludDMyQXJyYXkoYSxsLE1hdGguZmxvb3IoKHMtYykvNCkpO2pyKGgpO2ZvcihsZXQgcD0wO2MrcjxzO3ArPWkubGVuZ3RoLGMrPXIpdGhpcy5sZW5ndGgrPXIsdGhpcy5jb21wcmVzcyhoLHAsITEpO2pyKGgpO2NvbnRpbnVlfW4uc2V0KGUuc3ViYXJyYXkoYyxjK3UpLHRoaXMucG9zKSx0aGlzLnBvcys9dSx0aGlzLmxlbmd0aCs9dSxjKz11fXJldHVybiB0aGlzfWRpZ2VzdEludG8oZSl7WHIodGhpcyksV2MoZSx0aGlzKTtjb25zdHtwb3M6cixidWZmZXIzMjpufT10aGlzO3RoaXMuZmluaXNoZWQ9ITAsSXQodGhpcy5idWZmZXIuc3ViYXJyYXkocikpLGpyKG4pLHRoaXMuY29tcHJlc3MobiwwLCEwKSxqcihuKTtjb25zdCBpPXppKGUpO3RoaXMuZ2V0KCkuZm9yRWFjaCgocyxvKT0+aVtvXT1mcihzKSl9ZGlnZXN0KCl7Y29uc3R7YnVmZmVyOmUsb3V0cHV0TGVuOnJ9PXRoaXM7dGhpcy5kaWdlc3RJbnRvKGUpO2NvbnN0IG49ZS5zbGljZSgwLHIpO3JldHVybiB0aGlzLmRlc3Ryb3koKSxufV9jbG9uZUludG8oZSl7Y29uc3R7YnVmZmVyOnIsbGVuZ3RoOm4sZmluaXNoZWQ6aSxkZXN0cm95ZWQ6cyxvdXRwdXRMZW46byxwb3M6YX09dGhpcztyZXR1cm4gZXx8KGU9bmV3IHRoaXMuY29uc3RydWN0b3Ioe2RrTGVuOm99KSksZS5zZXQoLi4udGhpcy5nZXQoKSksZS5idWZmZXIuc2V0KHIpLGUuZGVzdHJveWVkPXMsZS5maW5pc2hlZD1pLGUubGVuZ3RoPW4sZS5wb3M9YSxlLm91dHB1dExlbj1vLGV9Y2xvbmUoKXtyZXR1cm4gdGhpcy5fY2xvbmVJbnRvKCl9fWNsYXNzIHBfIGV4dGVuZHMgZF97Y29uc3RydWN0b3IoZT17fSl7Y29uc3Qgcj1lLmRrTGVuPT09dm9pZCAwPzY0OmUuZGtMZW47c3VwZXIoMTI4LHIpLHRoaXMudjBsPU9lWzBdfDAsdGhpcy52MGg9T2VbMV18MCx0aGlzLnYxbD1PZVsyXXwwLHRoaXMudjFoPU9lWzNdfDAsdGhpcy52Mmw9T2VbNF18MCx0aGlzLnYyaD1PZVs1XXwwLHRoaXMudjNsPU9lWzZdfDAsdGhpcy52M2g9T2VbN118MCx0aGlzLnY0bD1PZVs4XXwwLHRoaXMudjRoPU9lWzldfDAsdGhpcy52NWw9T2VbMTBdfDAsdGhpcy52NWg9T2VbMTFdfDAsdGhpcy52Nmw9T2VbMTJdfDAsdGhpcy52Nmg9T2VbMTNdfDAsdGhpcy52N2w9T2VbMTRdfDAsdGhpcy52N2g9T2VbMTVdfDAsZl8ocixlLDY0LDE2LDE2KTtsZXR7a2V5Om4scGVyc29uYWxpemF0aW9uOmksc2FsdDpzfT1lLG89MDtpZihuIT09dm9pZCAwJiYobj1OdChuKSxvPW4ubGVuZ3RoKSx0aGlzLnYwbF49dGhpcy5vdXRwdXRMZW58bzw8OHw2NTUzNnwxPDwyNCxzIT09dm9pZCAwKXtzPU50KHMpO2NvbnN0IGE9emkocyk7dGhpcy52NGxePWZyKGFbMF0pLHRoaXMudjRoXj1mcihhWzFdKSx0aGlzLnY1bF49ZnIoYVsyXSksdGhpcy52NWhePWZyKGFbM10pfWlmKGkhPT12b2lkIDApe2k9TnQoaSk7Y29uc3QgYT16aShpKTt0aGlzLnY2bF49ZnIoYVswXSksdGhpcy52NmhePWZyKGFbMV0pLHRoaXMudjdsXj1mcihhWzJdKSx0aGlzLnY3aF49ZnIoYVszXSl9aWYobiE9PXZvaWQgMCl7Y29uc3QgYT1uZXcgVWludDhBcnJheSh0aGlzLmJsb2NrTGVuKTthLnNldChuKSx0aGlzLnVwZGF0ZShhKX19Z2V0KCl7bGV0e3YwbDplLHYwaDpyLHYxbDpuLHYxaDppLHYybDpzLHYyaDpvLHYzbDphLHYzaDpjLHY0bDp1LHY0aDpsLHY1bDpoLHY1aDpwLHY2bDpnLHY2aDp3LHY3bDpiLHY3aDp2fT10aGlzO3JldHVybltlLHIsbixpLHMsbyxhLGMsdSxsLGgscCxnLHcsYix2XX1zZXQoZSxyLG4saSxzLG8sYSxjLHUsbCxoLHAsZyx3LGIsdil7dGhpcy52MGw9ZXwwLHRoaXMudjBoPXJ8MCx0aGlzLnYxbD1ufDAsdGhpcy52MWg9aXwwLHRoaXMudjJsPXN8MCx0aGlzLnYyaD1vfDAsdGhpcy52M2w9YXwwLHRoaXMudjNoPWN8MCx0aGlzLnY0bD11fDAsdGhpcy52NGg9bHwwLHRoaXMudjVsPWh8MCx0aGlzLnY1aD1wfDAsdGhpcy52Nmw9Z3wwLHRoaXMudjZoPXd8MCx0aGlzLnY3bD1ifDAsdGhpcy52N2g9dnwwfWNvbXByZXNzKGUscixuKXt0aGlzLmdldCgpLmZvckVhY2goKGMsdSk9PlhbdV09YyksWC5zZXQoT2UsMTYpO2xldHtoOmksbDpzfT14ZChCaWdJbnQodGhpcy5sZW5ndGgpKTtYWzI0XT1PZVs4XV5zLFhbMjVdPU9lWzldXmksbiYmKFhbMjhdPX5YWzI4XSxYWzI5XT1+WFsyOV0pO2xldCBvPTA7Y29uc3QgYT1oXztmb3IobGV0IGM9MDtjPDEyO2MrKylDcigwLDQsOCwxMixlLHIrMiphW28rK10pLFVyKDAsNCw4LDEyLGUscisyKmFbbysrXSksQ3IoMSw1LDksMTMsZSxyKzIqYVtvKytdKSxVcigxLDUsOSwxMyxlLHIrMiphW28rK10pLENyKDIsNiwxMCwxNCxlLHIrMiphW28rK10pLFVyKDIsNiwxMCwxNCxlLHIrMiphW28rK10pLENyKDMsNywxMSwxNSxlLHIrMiphW28rK10pLFVyKDMsNywxMSwxNSxlLHIrMiphW28rK10pLENyKDAsNSwxMCwxNSxlLHIrMiphW28rK10pLFVyKDAsNSwxMCwxNSxlLHIrMiphW28rK10pLENyKDEsNiwxMSwxMixlLHIrMiphW28rK10pLFVyKDEsNiwxMSwxMixlLHIrMiphW28rK10pLENyKDIsNyw4LDEzLGUscisyKmFbbysrXSksVXIoMiw3LDgsMTMsZSxyKzIqYVtvKytdKSxDcigzLDQsOSwxNCxlLHIrMiphW28rK10pLFVyKDMsNCw5LDE0LGUscisyKmFbbysrXSk7dGhpcy52MGxePVhbMF1eWFsxNl0sdGhpcy52MGhePVhbMV1eWFsxN10sdGhpcy52MWxePVhbMl1eWFsxOF0sdGhpcy52MWhePVhbM11eWFsxOV0sdGhpcy52MmxePVhbNF1eWFsyMF0sdGhpcy52MmhePVhbNV1eWFsyMV0sdGhpcy52M2xePVhbNl1eWFsyMl0sdGhpcy52M2hePVhbN11eWFsyM10sdGhpcy52NGxePVhbOF1eWFsyNF0sdGhpcy52NGhePVhbOV1eWFsyNV0sdGhpcy52NWxePVhbMTBdXlhbMjZdLHRoaXMudjVoXj1YWzExXV5YWzI3XSx0aGlzLnY2bF49WFsxMl1eWFsyOF0sdGhpcy52NmhePVhbMTNdXlhbMjldLHRoaXMudjdsXj1YWzE0XV5YWzMwXSx0aGlzLnY3aF49WFsxNV1eWFszMV0sSXQoWCl9ZGVzdHJveSgpe3RoaXMuZGVzdHJveWVkPSEwLEl0KHRoaXMuYnVmZmVyMzIpLHRoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDApfX1jb25zdCBnXz1Pdih0PT5uZXcgcF8odCkpO2Z1bmN0aW9uIHlfKHQpe2NvbnN0IGU9dC5sZW5ndGg7bGV0IHI9MCxuPTA7Zm9yKDtuPGU7KXtsZXQgaT10LmNoYXJDb2RlQXQobisrKTtpZihpJjQyOTQ5NjcxNjgpaWYoIShpJjQyOTQ5NjUyNDgpKXIrPTI7ZWxzZXtpZihpPj01NTI5NiYmaTw9NTYzMTkmJm48ZSl7Y29uc3Qgcz10LmNoYXJDb2RlQXQobik7KHMmNjQ1MTIpPT09NTYzMjAmJigrK24saT0oKGkmMTAyMyk8PDEwKSsocyYxMDIzKSs2NTUzNil9aSY0Mjk0OTAxNzYwP3IrPTQ6cis9M31lbHNle3IrKztjb250aW51ZX19cmV0dXJuIHJ9ZnVuY3Rpb24gd18odCxlLHIpe2NvbnN0IG49dC5sZW5ndGg7bGV0IGk9cixzPTA7Zm9yKDtzPG47KXtsZXQgbz10LmNoYXJDb2RlQXQocysrKTtpZihvJjQyOTQ5NjcxNjgpaWYoIShvJjQyOTQ5NjUyNDgpKWVbaSsrXT1vPj42JjMxfDE5MjtlbHNle2lmKG8+PTU1Mjk2JiZvPD01NjMxOSYmczxuKXtjb25zdCBhPXQuY2hhckNvZGVBdChzKTsoYSY2NDUxMik9PT01NjMyMCYmKCsrcyxvPSgobyYxMDIzKTw8MTApKyhhJjEwMjMpKzY1NTM2KX1vJjQyOTQ5MDE3NjA/KGVbaSsrXT1vPj4xOCY3fDI0MCxlW2krK109bz4+MTImNjN8MTI4LGVbaSsrXT1vPj42JjYzfDEyOCk6KGVbaSsrXT1vPj4xMiYxNXwyMjQsZVtpKytdPW8+PjYmNjN8MTI4KX1lbHNle2VbaSsrXT1vO2NvbnRpbnVlfWVbaSsrXT1vJjYzfDEyOH19Y29uc3QgbV89bmV3IFRleHRFbmNvZGVyLGJfPTUwO2Z1bmN0aW9uIEVfKHQsZSxyKXttXy5lbmNvZGVJbnRvKHQsZS5zdWJhcnJheShyKSl9ZnVuY3Rpb24gdl8odCxlLHIpe3QubGVuZ3RoPmJfP0VfKHQsZSxyKTp3Xyh0LGUscil9Y29uc3QgeF89NDA5NjtmdW5jdGlvbiBfcCh0LGUscil7bGV0IG49ZTtjb25zdCBpPW4rcixzPVtdO2xldCBvPSIiO2Zvcig7bjxpOyl7Y29uc3QgYT10W24rK107aWYoIShhJjEyOCkpcy5wdXNoKGEpO2Vsc2UgaWYoKGEmMjI0KT09PTE5Mil7Y29uc3QgYz10W24rK10mNjM7cy5wdXNoKChhJjMxKTw8NnxjKX1lbHNlIGlmKChhJjI0MCk9PT0yMjQpe2NvbnN0IGM9dFtuKytdJjYzLHU9dFtuKytdJjYzO3MucHVzaCgoYSYzMSk8PDEyfGM8PDZ8dSl9ZWxzZSBpZigoYSYyNDgpPT09MjQwKXtjb25zdCBjPXRbbisrXSY2Myx1PXRbbisrXSY2MyxsPXRbbisrXSY2MztsZXQgaD0oYSY3KTw8MTh8Yzw8MTJ8dTw8NnxsO2g+NjU1MzUmJihoLT02NTUzNixzLnB1c2goaD4+PjEwJjEwMjN8NTUyOTYpLGg9NTYzMjB8aCYxMDIzKSxzLnB1c2goaCl9ZWxzZSBzLnB1c2goYSk7cy5sZW5ndGg+PXhfJiYobys9U3RyaW5nLmZyb21DaGFyQ29kZSguLi5zKSxzLmxlbmd0aD0wKX1yZXR1cm4gcy5sZW5ndGg+MCYmKG8rPVN0cmluZy5mcm9tQ2hhckNvZGUoLi4ucykpLG99Y29uc3QgX189bmV3IFRleHREZWNvZGVyLElfPTIwMDtmdW5jdGlvbiBTXyh0LGUscil7Y29uc3Qgbj10LnN1YmFycmF5KGUsZStyKTtyZXR1cm4gX18uZGVjb2RlKG4pfWZ1bmN0aW9uIEFfKHQsZSxyKXtyZXR1cm4gcj5JXz9TXyh0LGUscik6X3AodCxlLHIpfWNsYXNzIHhze2NvbnN0cnVjdG9yKGUscil7dGUodGhpcywidHlwZSIpO3RlKHRoaXMsImRhdGEiKTt0aGlzLnR5cGU9ZSx0aGlzLmRhdGE9cn19Y2xhc3MgZnQgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdCByPU9iamVjdC5jcmVhdGUoZnQucHJvdG90eXBlKTtPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibmFtZSIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOmZ0Lm5hbWV9KX19Y29uc3QgeGk9NDI5NDk2NzI5NTtmdW5jdGlvbiBEXyh0LGUscil7Y29uc3Qgbj1yLzQyOTQ5NjcyOTYsaT1yO3Quc2V0VWludDMyKGUsbiksdC5zZXRVaW50MzIoZSs0LGkpfWZ1bmN0aW9uIElwKHQsZSxyKXtjb25zdCBuPU1hdGguZmxvb3Ioci80Mjk0OTY3Mjk2KSxpPXI7dC5zZXRVaW50MzIoZSxuKSx0LnNldFVpbnQzMihlKzQsaSl9ZnVuY3Rpb24gU3AodCxlKXtjb25zdCByPXQuZ2V0SW50MzIoZSksbj10LmdldFVpbnQzMihlKzQpO3JldHVybiByKjQyOTQ5NjcyOTYrbn1mdW5jdGlvbiBPXyh0LGUpe2NvbnN0IHI9dC5nZXRVaW50MzIoZSksbj10LmdldFVpbnQzMihlKzQpO3JldHVybiByKjQyOTQ5NjcyOTYrbn1jb25zdCAkXz0tMSxCXz00Mjk0OTY3Mjk2LTEsUF89MTcxNzk4NjkxODQtMTtmdW5jdGlvbiBUXyh7c2VjOnQsbnNlYzplfSl7aWYodD49MCYmZT49MCYmdDw9UF8paWYoZT09PTAmJnQ8PUJfKXtjb25zdCByPW5ldyBVaW50OEFycmF5KDQpO3JldHVybiBuZXcgRGF0YVZpZXcoci5idWZmZXIpLnNldFVpbnQzMigwLHQpLHJ9ZWxzZXtjb25zdCByPXQvNDI5NDk2NzI5NixuPXQmNDI5NDk2NzI5NSxpPW5ldyBVaW50OEFycmF5KDgpLHM9bmV3IERhdGFWaWV3KGkuYnVmZmVyKTtyZXR1cm4gcy5zZXRVaW50MzIoMCxlPDwyfHImMykscy5zZXRVaW50MzIoNCxuKSxpfWVsc2V7Y29uc3Qgcj1uZXcgVWludDhBcnJheSgxMiksbj1uZXcgRGF0YVZpZXcoci5idWZmZXIpO3JldHVybiBuLnNldFVpbnQzMigwLGUpLElwKG4sNCx0KSxyfX1mdW5jdGlvbiBSXyh0KXtjb25zdCBlPXQuZ2V0VGltZSgpLHI9TWF0aC5mbG9vcihlLzFlMyksbj0oZS1yKjFlMykqMWU2LGk9TWF0aC5mbG9vcihuLzFlOSk7cmV0dXJue3NlYzpyK2ksbnNlYzpuLWkqMWU5fX1mdW5jdGlvbiBDXyh0KXtpZih0IGluc3RhbmNlb2YgRGF0ZSl7Y29uc3QgZT1SXyh0KTtyZXR1cm4gVF8oZSl9ZWxzZSByZXR1cm4gbnVsbH1mdW5jdGlvbiBVXyh0KXtjb25zdCBlPW5ldyBEYXRhVmlldyh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKTtzd2l0Y2godC5ieXRlTGVuZ3RoKXtjYXNlIDQ6cmV0dXJue3NlYzplLmdldFVpbnQzMigwKSxuc2VjOjB9O2Nhc2UgODp7Y29uc3Qgcj1lLmdldFVpbnQzMigwKSxuPWUuZ2V0VWludDMyKDQpLGk9KHImMykqNDI5NDk2NzI5NituLHM9cj4+PjI7cmV0dXJue3NlYzppLG5zZWM6c319Y2FzZSAxMjp7Y29uc3Qgcj1TcChlLDQpLG49ZS5nZXRVaW50MzIoMCk7cmV0dXJue3NlYzpyLG5zZWM6bn19ZGVmYXVsdDp0aHJvdyBuZXcgZnQoYFVucmVjb2duaXplZCBkYXRhIHNpemUgZm9yIHRpbWVzdGFtcCAoZXhwZWN0ZWQgNCwgOCwgb3IgMTIpOiAke3QubGVuZ3RofWApfX1mdW5jdGlvbiBOXyh0KXtjb25zdCBlPVVfKHQpO3JldHVybiBuZXcgRGF0ZShlLnNlYyoxZTMrZS5uc2VjLzFlNil9Y29uc3QgTF89e3R5cGU6JF8sZW5jb2RlOkNfLGRlY29kZTpOX30seW89Y2xhc3MgeW97Y29uc3RydWN0b3IoKXt0ZSh0aGlzLCJfX2JyYW5kIik7dGUodGhpcywiYnVpbHRJbkVuY29kZXJzIixbXSk7dGUodGhpcywiYnVpbHRJbkRlY29kZXJzIixbXSk7dGUodGhpcywiZW5jb2RlcnMiLFtdKTt0ZSh0aGlzLCJkZWNvZGVycyIsW10pO3RoaXMucmVnaXN0ZXIoTF8pfXJlZ2lzdGVyKHt0eXBlOmUsZW5jb2RlOnIsZGVjb2RlOm59KXtpZihlPj0wKXRoaXMuZW5jb2RlcnNbZV09cix0aGlzLmRlY29kZXJzW2VdPW47ZWxzZXtjb25zdCBpPS0xLWU7dGhpcy5idWlsdEluRW5jb2RlcnNbaV09cix0aGlzLmJ1aWx0SW5EZWNvZGVyc1tpXT1ufX10cnlUb0VuY29kZShlLHIpe2ZvcihsZXQgbj0wO248dGhpcy5idWlsdEluRW5jb2RlcnMubGVuZ3RoO24rKyl7Y29uc3QgaT10aGlzLmJ1aWx0SW5FbmNvZGVyc1tuXTtpZihpIT1udWxsKXtjb25zdCBzPWkoZSxyKTtpZihzIT1udWxsKXtjb25zdCBvPS0xLW47cmV0dXJuIG5ldyB4cyhvLHMpfX19Zm9yKGxldCBuPTA7bjx0aGlzLmVuY29kZXJzLmxlbmd0aDtuKyspe2NvbnN0IGk9dGhpcy5lbmNvZGVyc1tuXTtpZihpIT1udWxsKXtjb25zdCBzPWkoZSxyKTtpZihzIT1udWxsKXtjb25zdCBvPW47cmV0dXJuIG5ldyB4cyhvLHMpfX19cmV0dXJuIGUgaW5zdGFuY2VvZiB4cz9lOm51bGx9ZGVjb2RlKGUscixuKXtjb25zdCBpPXI8MD90aGlzLmJ1aWx0SW5EZWNvZGVyc1stMS1yXTp0aGlzLmRlY29kZXJzW3JdO3JldHVybiBpP2koZSxyLG4pOm5ldyB4cyhyLGUpfX07dGUoeW8sImRlZmF1bHRDb2RlYyIsbmV3IHlvKTtsZXQgcm89eW87ZnVuY3Rpb24gRl8odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1IiYmdCBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyfWZ1bmN0aW9uIHVjKHQpe3JldHVybiB0IGluc3RhbmNlb2YgVWludDhBcnJheT90OkFycmF5QnVmZmVyLmlzVmlldyh0KT9uZXcgVWludDhBcnJheSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKTpGXyh0KT9uZXcgVWludDhBcnJheSh0KTpVaW50OEFycmF5LmZyb20odCl9Y29uc3Qga189MTAwLE1fPTIwNDg7Y2xhc3MgbnV7Y29uc3RydWN0b3IoZSl7dGUodGhpcywiZXh0ZW5zaW9uQ29kZWMiKTt0ZSh0aGlzLCJjb250ZXh0Iik7dGUodGhpcywidXNlQmlnSW50NjQiKTt0ZSh0aGlzLCJtYXhEZXB0aCIpO3RlKHRoaXMsImluaXRpYWxCdWZmZXJTaXplIik7dGUodGhpcywic29ydEtleXMiKTt0ZSh0aGlzLCJmb3JjZUZsb2F0MzIiKTt0ZSh0aGlzLCJpZ25vcmVVbmRlZmluZWQiKTt0ZSh0aGlzLCJmb3JjZUludGVnZXJUb0Zsb2F0Iik7dGUodGhpcywicG9zIik7dGUodGhpcywidmlldyIpO3RlKHRoaXMsImJ5dGVzIik7dGUodGhpcywiZW50ZXJlZCIsITEpO3RoaXMuZXh0ZW5zaW9uQ29kZWM9ZT8uZXh0ZW5zaW9uQ29kZWM/P3JvLmRlZmF1bHRDb2RlYyx0aGlzLmNvbnRleHQ9ZT8uY29udGV4dCx0aGlzLnVzZUJpZ0ludDY0PWU/LnVzZUJpZ0ludDY0Pz8hMSx0aGlzLm1heERlcHRoPWU/Lm1heERlcHRoPz9rXyx0aGlzLmluaXRpYWxCdWZmZXJTaXplPWU/LmluaXRpYWxCdWZmZXJTaXplPz9NXyx0aGlzLnNvcnRLZXlzPWU/LnNvcnRLZXlzPz8hMSx0aGlzLmZvcmNlRmxvYXQzMj1lPy5mb3JjZUZsb2F0MzI/PyExLHRoaXMuaWdub3JlVW5kZWZpbmVkPWU/Lmlnbm9yZVVuZGVmaW5lZD8/ITEsdGhpcy5mb3JjZUludGVnZXJUb0Zsb2F0PWU/LmZvcmNlSW50ZWdlclRvRmxvYXQ/PyExLHRoaXMucG9zPTAsdGhpcy52aWV3PW5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIodGhpcy5pbml0aWFsQnVmZmVyU2l6ZSkpLHRoaXMuYnl0ZXM9bmV3IFVpbnQ4QXJyYXkodGhpcy52aWV3LmJ1ZmZlcil9Y2xvbmUoKXtyZXR1cm4gbmV3IG51KHtleHRlbnNpb25Db2RlYzp0aGlzLmV4dGVuc2lvbkNvZGVjLGNvbnRleHQ6dGhpcy5jb250ZXh0LHVzZUJpZ0ludDY0OnRoaXMudXNlQmlnSW50NjQsbWF4RGVwdGg6dGhpcy5tYXhEZXB0aCxpbml0aWFsQnVmZmVyU2l6ZTp0aGlzLmluaXRpYWxCdWZmZXJTaXplLHNvcnRLZXlzOnRoaXMuc29ydEtleXMsZm9yY2VGbG9hdDMyOnRoaXMuZm9yY2VGbG9hdDMyLGlnbm9yZVVuZGVmaW5lZDp0aGlzLmlnbm9yZVVuZGVmaW5lZCxmb3JjZUludGVnZXJUb0Zsb2F0OnRoaXMuZm9yY2VJbnRlZ2VyVG9GbG9hdH0pfXJlaW5pdGlhbGl6ZVN0YXRlKCl7dGhpcy5wb3M9MH1lbmNvZGVTaGFyZWRSZWYoZSl7aWYodGhpcy5lbnRlcmVkKXJldHVybiB0aGlzLmNsb25lKCkuZW5jb2RlU2hhcmVkUmVmKGUpO3RyeXtyZXR1cm4gdGhpcy5lbnRlcmVkPSEwLHRoaXMucmVpbml0aWFsaXplU3RhdGUoKSx0aGlzLmRvRW5jb2RlKGUsMSksdGhpcy5ieXRlcy5zdWJhcnJheSgwLHRoaXMucG9zKX1maW5hbGx5e3RoaXMuZW50ZXJlZD0hMX19ZW5jb2RlKGUpe2lmKHRoaXMuZW50ZXJlZClyZXR1cm4gdGhpcy5jbG9uZSgpLmVuY29kZShlKTt0cnl7cmV0dXJuIHRoaXMuZW50ZXJlZD0hMCx0aGlzLnJlaW5pdGlhbGl6ZVN0YXRlKCksdGhpcy5kb0VuY29kZShlLDEpLHRoaXMuYnl0ZXMuc2xpY2UoMCx0aGlzLnBvcyl9ZmluYWxseXt0aGlzLmVudGVyZWQ9ITF9fWRvRW5jb2RlKGUscil7aWYocj50aGlzLm1heERlcHRoKXRocm93IG5ldyBFcnJvcihgVG9vIGRlZXAgb2JqZWN0cyBpbiBkZXB0aCAke3J9YCk7ZT09bnVsbD90aGlzLmVuY29kZU5pbCgpOnR5cGVvZiBlPT0iYm9vbGVhbiI/dGhpcy5lbmNvZGVCb29sZWFuKGUpOnR5cGVvZiBlPT0ibnVtYmVyIj90aGlzLmZvcmNlSW50ZWdlclRvRmxvYXQ/dGhpcy5lbmNvZGVOdW1iZXJBc0Zsb2F0KGUpOnRoaXMuZW5jb2RlTnVtYmVyKGUpOnR5cGVvZiBlPT0ic3RyaW5nIj90aGlzLmVuY29kZVN0cmluZyhlKTp0aGlzLnVzZUJpZ0ludDY0JiZ0eXBlb2YgZT09ImJpZ2ludCI/dGhpcy5lbmNvZGVCaWdJbnQ2NChlKTp0aGlzLmVuY29kZU9iamVjdChlLHIpfWVuc3VyZUJ1ZmZlclNpemVUb1dyaXRlKGUpe2NvbnN0IHI9dGhpcy5wb3MrZTt0aGlzLnZpZXcuYnl0ZUxlbmd0aDxyJiZ0aGlzLnJlc2l6ZUJ1ZmZlcihyKjIpfXJlc2l6ZUJ1ZmZlcihlKXtjb25zdCByPW5ldyBBcnJheUJ1ZmZlcihlKSxuPW5ldyBVaW50OEFycmF5KHIpLGk9bmV3IERhdGFWaWV3KHIpO24uc2V0KHRoaXMuYnl0ZXMpLHRoaXMudmlldz1pLHRoaXMuYnl0ZXM9bn1lbmNvZGVOaWwoKXt0aGlzLndyaXRlVTgoMTkyKX1lbmNvZGVCb29sZWFuKGUpe2U9PT0hMT90aGlzLndyaXRlVTgoMTk0KTp0aGlzLndyaXRlVTgoMTk1KX1lbmNvZGVOdW1iZXIoZSl7IXRoaXMuZm9yY2VJbnRlZ2VyVG9GbG9hdCYmTnVtYmVyLmlzU2FmZUludGVnZXIoZSk/ZT49MD9lPDEyOD90aGlzLndyaXRlVTgoZSk6ZTwyNTY/KHRoaXMud3JpdGVVOCgyMDQpLHRoaXMud3JpdGVVOChlKSk6ZTw2NTUzNj8odGhpcy53cml0ZVU4KDIwNSksdGhpcy53cml0ZVUxNihlKSk6ZTw0Mjk0OTY3Mjk2Pyh0aGlzLndyaXRlVTgoMjA2KSx0aGlzLndyaXRlVTMyKGUpKTp0aGlzLnVzZUJpZ0ludDY0P3RoaXMuZW5jb2RlTnVtYmVyQXNGbG9hdChlKToodGhpcy53cml0ZVU4KDIwNyksdGhpcy53cml0ZVU2NChlKSk6ZT49LTMyP3RoaXMud3JpdGVVOCgyMjR8ZSszMik6ZT49LTEyOD8odGhpcy53cml0ZVU4KDIwOCksdGhpcy53cml0ZUk4KGUpKTplPj0tMzI3Njg/KHRoaXMud3JpdGVVOCgyMDkpLHRoaXMud3JpdGVJMTYoZSkpOmU+PS0yMTQ3NDgzNjQ4Pyh0aGlzLndyaXRlVTgoMjEwKSx0aGlzLndyaXRlSTMyKGUpKTp0aGlzLnVzZUJpZ0ludDY0P3RoaXMuZW5jb2RlTnVtYmVyQXNGbG9hdChlKToodGhpcy53cml0ZVU4KDIxMSksdGhpcy53cml0ZUk2NChlKSk6dGhpcy5lbmNvZGVOdW1iZXJBc0Zsb2F0KGUpfWVuY29kZU51bWJlckFzRmxvYXQoZSl7dGhpcy5mb3JjZUZsb2F0MzI/KHRoaXMud3JpdGVVOCgyMDIpLHRoaXMud3JpdGVGMzIoZSkpOih0aGlzLndyaXRlVTgoMjAzKSx0aGlzLndyaXRlRjY0KGUpKX1lbmNvZGVCaWdJbnQ2NChlKXtlPj1CaWdJbnQoMCk/KHRoaXMud3JpdGVVOCgyMDcpLHRoaXMud3JpdGVCaWdVaW50NjQoZSkpOih0aGlzLndyaXRlVTgoMjExKSx0aGlzLndyaXRlQmlnSW50NjQoZSkpfXdyaXRlU3RyaW5nSGVhZGVyKGUpe2lmKGU8MzIpdGhpcy53cml0ZVU4KDE2MCtlKTtlbHNlIGlmKGU8MjU2KXRoaXMud3JpdGVVOCgyMTcpLHRoaXMud3JpdGVVOChlKTtlbHNlIGlmKGU8NjU1MzYpdGhpcy53cml0ZVU4KDIxOCksdGhpcy53cml0ZVUxNihlKTtlbHNlIGlmKGU8NDI5NDk2NzI5Nil0aGlzLndyaXRlVTgoMjE5KSx0aGlzLndyaXRlVTMyKGUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBUb28gbG9uZyBzdHJpbmc6ICR7ZX0gYnl0ZXMgaW4gVVRGLThgKX1lbmNvZGVTdHJpbmcoZSl7Y29uc3Qgbj15XyhlKTt0aGlzLmVuc3VyZUJ1ZmZlclNpemVUb1dyaXRlKDUrbiksdGhpcy53cml0ZVN0cmluZ0hlYWRlcihuKSx2XyhlLHRoaXMuYnl0ZXMsdGhpcy5wb3MpLHRoaXMucG9zKz1ufWVuY29kZU9iamVjdChlLHIpe2NvbnN0IG49dGhpcy5leHRlbnNpb25Db2RlYy50cnlUb0VuY29kZShlLHRoaXMuY29udGV4dCk7aWYobiE9bnVsbCl0aGlzLmVuY29kZUV4dGVuc2lvbihuKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpdGhpcy5lbmNvZGVBcnJheShlLHIpO2Vsc2UgaWYoQXJyYXlCdWZmZXIuaXNWaWV3KGUpKXRoaXMuZW5jb2RlQmluYXJ5KGUpO2Vsc2UgaWYodHlwZW9mIGU9PSJvYmplY3QiKXRoaXMuZW5jb2RlTWFwKGUscik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBvYmplY3Q6ICR7T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShlKX1gKX1lbmNvZGVCaW5hcnkoZSl7Y29uc3Qgcj1lLmJ5dGVMZW5ndGg7aWYocjwyNTYpdGhpcy53cml0ZVU4KDE5NiksdGhpcy53cml0ZVU4KHIpO2Vsc2UgaWYocjw2NTUzNil0aGlzLndyaXRlVTgoMTk3KSx0aGlzLndyaXRlVTE2KHIpO2Vsc2UgaWYocjw0Mjk0OTY3Mjk2KXRoaXMud3JpdGVVOCgxOTgpLHRoaXMud3JpdGVVMzIocik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYFRvbyBsYXJnZSBiaW5hcnk6ICR7cn1gKTtjb25zdCBuPXVjKGUpO3RoaXMud3JpdGVVOGEobil9ZW5jb2RlQXJyYXkoZSxyKXtjb25zdCBuPWUubGVuZ3RoO2lmKG48MTYpdGhpcy53cml0ZVU4KDE0NCtuKTtlbHNlIGlmKG48NjU1MzYpdGhpcy53cml0ZVU4KDIyMCksdGhpcy53cml0ZVUxNihuKTtlbHNlIGlmKG48NDI5NDk2NzI5Nil0aGlzLndyaXRlVTgoMjIxKSx0aGlzLndyaXRlVTMyKG4pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBUb28gbGFyZ2UgYXJyYXk6ICR7bn1gKTtmb3IoY29uc3QgaSBvZiBlKXRoaXMuZG9FbmNvZGUoaSxyKzEpfWNvdW50V2l0aG91dFVuZGVmaW5lZChlLHIpe2xldCBuPTA7Zm9yKGNvbnN0IGkgb2YgcillW2ldIT09dm9pZCAwJiZuKys7cmV0dXJuIG59ZW5jb2RlTWFwKGUscil7Y29uc3Qgbj1PYmplY3Qua2V5cyhlKTt0aGlzLnNvcnRLZXlzJiZuLnNvcnQoKTtjb25zdCBpPXRoaXMuaWdub3JlVW5kZWZpbmVkP3RoaXMuY291bnRXaXRob3V0VW5kZWZpbmVkKGUsbik6bi5sZW5ndGg7aWYoaTwxNil0aGlzLndyaXRlVTgoMTI4K2kpO2Vsc2UgaWYoaTw2NTUzNil0aGlzLndyaXRlVTgoMjIyKSx0aGlzLndyaXRlVTE2KGkpO2Vsc2UgaWYoaTw0Mjk0OTY3Mjk2KXRoaXMud3JpdGVVOCgyMjMpLHRoaXMud3JpdGVVMzIoaSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYFRvbyBsYXJnZSBtYXAgb2JqZWN0OiAke2l9YCk7Zm9yKGNvbnN0IHMgb2Ygbil7Y29uc3Qgbz1lW3NdO3RoaXMuaWdub3JlVW5kZWZpbmVkJiZvPT09dm9pZCAwfHwodGhpcy5lbmNvZGVTdHJpbmcocyksdGhpcy5kb0VuY29kZShvLHIrMSkpfX1lbmNvZGVFeHRlbnNpb24oZSl7aWYodHlwZW9mIGUuZGF0YT09ImZ1bmN0aW9uIil7Y29uc3Qgbj1lLmRhdGEodGhpcy5wb3MrNiksaT1uLmxlbmd0aDtpZihpPj00Mjk0OTY3Mjk2KXRocm93IG5ldyBFcnJvcihgVG9vIGxhcmdlIGV4dGVuc2lvbiBvYmplY3Q6ICR7aX1gKTt0aGlzLndyaXRlVTgoMjAxKSx0aGlzLndyaXRlVTMyKGkpLHRoaXMud3JpdGVJOChlLnR5cGUpLHRoaXMud3JpdGVVOGEobik7cmV0dXJufWNvbnN0IHI9ZS5kYXRhLmxlbmd0aDtpZihyPT09MSl0aGlzLndyaXRlVTgoMjEyKTtlbHNlIGlmKHI9PT0yKXRoaXMud3JpdGVVOCgyMTMpO2Vsc2UgaWYocj09PTQpdGhpcy53cml0ZVU4KDIxNCk7ZWxzZSBpZihyPT09OCl0aGlzLndyaXRlVTgoMjE1KTtlbHNlIGlmKHI9PT0xNil0aGlzLndyaXRlVTgoMjE2KTtlbHNlIGlmKHI8MjU2KXRoaXMud3JpdGVVOCgxOTkpLHRoaXMud3JpdGVVOChyKTtlbHNlIGlmKHI8NjU1MzYpdGhpcy53cml0ZVU4KDIwMCksdGhpcy53cml0ZVUxNihyKTtlbHNlIGlmKHI8NDI5NDk2NzI5Nil0aGlzLndyaXRlVTgoMjAxKSx0aGlzLndyaXRlVTMyKHIpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBUb28gbGFyZ2UgZXh0ZW5zaW9uIG9iamVjdDogJHtyfWApO3RoaXMud3JpdGVJOChlLnR5cGUpLHRoaXMud3JpdGVVOGEoZS5kYXRhKX13cml0ZVU4KGUpe3RoaXMuZW5zdXJlQnVmZmVyU2l6ZVRvV3JpdGUoMSksdGhpcy52aWV3LnNldFVpbnQ4KHRoaXMucG9zLGUpLHRoaXMucG9zKyt9d3JpdGVVOGEoZSl7Y29uc3Qgcj1lLmxlbmd0aDt0aGlzLmVuc3VyZUJ1ZmZlclNpemVUb1dyaXRlKHIpLHRoaXMuYnl0ZXMuc2V0KGUsdGhpcy5wb3MpLHRoaXMucG9zKz1yfXdyaXRlSTgoZSl7dGhpcy5lbnN1cmVCdWZmZXJTaXplVG9Xcml0ZSgxKSx0aGlzLnZpZXcuc2V0SW50OCh0aGlzLnBvcyxlKSx0aGlzLnBvcysrfXdyaXRlVTE2KGUpe3RoaXMuZW5zdXJlQnVmZmVyU2l6ZVRvV3JpdGUoMiksdGhpcy52aWV3LnNldFVpbnQxNih0aGlzLnBvcyxlKSx0aGlzLnBvcys9Mn13cml0ZUkxNihlKXt0aGlzLmVuc3VyZUJ1ZmZlclNpemVUb1dyaXRlKDIpLHRoaXMudmlldy5zZXRJbnQxNih0aGlzLnBvcyxlKSx0aGlzLnBvcys9Mn13cml0ZVUzMihlKXt0aGlzLmVuc3VyZUJ1ZmZlclNpemVUb1dyaXRlKDQpLHRoaXMudmlldy5zZXRVaW50MzIodGhpcy5wb3MsZSksdGhpcy5wb3MrPTR9d3JpdGVJMzIoZSl7dGhpcy5lbnN1cmVCdWZmZXJTaXplVG9Xcml0ZSg0KSx0aGlzLnZpZXcuc2V0SW50MzIodGhpcy5wb3MsZSksdGhpcy5wb3MrPTR9d3JpdGVGMzIoZSl7dGhpcy5lbnN1cmVCdWZmZXJTaXplVG9Xcml0ZSg0KSx0aGlzLnZpZXcuc2V0RmxvYXQzMih0aGlzLnBvcyxlKSx0aGlzLnBvcys9NH13cml0ZUY2NChlKXt0aGlzLmVuc3VyZUJ1ZmZlclNpemVUb1dyaXRlKDgpLHRoaXMudmlldy5zZXRGbG9hdDY0KHRoaXMucG9zLGUpLHRoaXMucG9zKz04fXdyaXRlVTY0KGUpe3RoaXMuZW5zdXJlQnVmZmVyU2l6ZVRvV3JpdGUoOCksRF8odGhpcy52aWV3LHRoaXMucG9zLGUpLHRoaXMucG9zKz04fXdyaXRlSTY0KGUpe3RoaXMuZW5zdXJlQnVmZmVyU2l6ZVRvV3JpdGUoOCksSXAodGhpcy52aWV3LHRoaXMucG9zLGUpLHRoaXMucG9zKz04fXdyaXRlQmlnVWludDY0KGUpe3RoaXMuZW5zdXJlQnVmZmVyU2l6ZVRvV3JpdGUoOCksdGhpcy52aWV3LnNldEJpZ1VpbnQ2NCh0aGlzLnBvcyxlKSx0aGlzLnBvcys9OH13cml0ZUJpZ0ludDY0KGUpe3RoaXMuZW5zdXJlQnVmZmVyU2l6ZVRvV3JpdGUoOCksdGhpcy52aWV3LnNldEJpZ0ludDY0KHRoaXMucG9zLGUpLHRoaXMucG9zKz04fX1mdW5jdGlvbiBxXyh0LGUpe3JldHVybiBuZXcgbnUoZSkuZW5jb2RlU2hhcmVkUmVmKHQpfWZ1bmN0aW9uIEVhKHQpe3JldHVybmAke3Q8MD8iLSI6IiJ9MHgke01hdGguYWJzKHQpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIil9YH1jb25zdCBqXz0xNix6Xz0xNjtjbGFzcyBIX3tjb25zdHJ1Y3RvcihlPWpfLHI9el8pe3RlKHRoaXMsImhpdCIsMCk7dGUodGhpcywibWlzcyIsMCk7dGUodGhpcywiY2FjaGVzIik7dGUodGhpcywibWF4S2V5TGVuZ3RoIik7dGUodGhpcywibWF4TGVuZ3RoUGVyS2V5Iik7dGhpcy5tYXhLZXlMZW5ndGg9ZSx0aGlzLm1heExlbmd0aFBlcktleT1yLHRoaXMuY2FjaGVzPVtdO2ZvcihsZXQgbj0wO248dGhpcy5tYXhLZXlMZW5ndGg7bisrKXRoaXMuY2FjaGVzLnB1c2goW10pfWNhbkJlQ2FjaGVkKGUpe3JldHVybiBlPjAmJmU8PXRoaXMubWF4S2V5TGVuZ3RofWZpbmQoZSxyLG4pe2NvbnN0IGk9dGhpcy5jYWNoZXNbbi0xXTtlOmZvcihjb25zdCBzIG9mIGkpe2NvbnN0IG89cy5ieXRlcztmb3IobGV0IGE9MDthPG47YSsrKWlmKG9bYV0hPT1lW3IrYV0pY29udGludWUgZTtyZXR1cm4gcy5zdHJ9cmV0dXJuIG51bGx9c3RvcmUoZSxyKXtjb25zdCBuPXRoaXMuY2FjaGVzW2UubGVuZ3RoLTFdLGk9e2J5dGVzOmUsc3RyOnJ9O24ubGVuZ3RoPj10aGlzLm1heExlbmd0aFBlcktleT9uW01hdGgucmFuZG9tKCkqbi5sZW5ndGh8MF09aTpuLnB1c2goaSl9ZGVjb2RlKGUscixuKXtjb25zdCBpPXRoaXMuZmluZChlLHIsbik7aWYoaSE9bnVsbClyZXR1cm4gdGhpcy5oaXQrKyxpO3RoaXMubWlzcysrO2NvbnN0IHM9X3AoZSxyLG4pLG89VWludDhBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLHIscituKTtyZXR1cm4gdGhpcy5zdG9yZShvLHMpLHN9fWNvbnN0IGxjPSJhcnJheSIsVWk9Im1hcF9rZXkiLEFwPSJtYXBfdmFsdWUiLEtfPXQ9PntpZih0eXBlb2YgdD09InN0cmluZyJ8fHR5cGVvZiB0PT0ibnVtYmVyIilyZXR1cm4gdDt0aHJvdyBuZXcgZnQoIlRoZSB0eXBlIG9mIGtleSBtdXN0IGJlIHN0cmluZyBvciBudW1iZXIgYnV0ICIrdHlwZW9mIHQpfTtjbGFzcyBWX3tjb25zdHJ1Y3Rvcigpe3RlKHRoaXMsInN0YWNrIixbXSk7dGUodGhpcywic3RhY2tIZWFkUG9zaXRpb24iLC0xKX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuc3RhY2tIZWFkUG9zaXRpb24rMX10b3AoKXtyZXR1cm4gdGhpcy5zdGFja1t0aGlzLnN0YWNrSGVhZFBvc2l0aW9uXX1wdXNoQXJyYXlTdGF0ZShlKXtjb25zdCByPXRoaXMuZ2V0VW5pbml0aWFsaXplZFN0YXRlRnJvbVBvb2woKTtyLnR5cGU9bGMsci5wb3NpdGlvbj0wLHIuc2l6ZT1lLHIuYXJyYXk9bmV3IEFycmF5KGUpfXB1c2hNYXBTdGF0ZShlKXtjb25zdCByPXRoaXMuZ2V0VW5pbml0aWFsaXplZFN0YXRlRnJvbVBvb2woKTtyLnR5cGU9VWksci5yZWFkQ291bnQ9MCxyLnNpemU9ZSxyLm1hcD17fX1nZXRVbmluaXRpYWxpemVkU3RhdGVGcm9tUG9vbCgpe2lmKHRoaXMuc3RhY2tIZWFkUG9zaXRpb24rKyx0aGlzLnN0YWNrSGVhZFBvc2l0aW9uPT09dGhpcy5zdGFjay5sZW5ndGgpe2NvbnN0IGU9e3R5cGU6dm9pZCAwLHNpemU6MCxhcnJheTp2b2lkIDAscG9zaXRpb246MCxyZWFkQ291bnQ6MCxtYXA6dm9pZCAwLGtleTpudWxsfTt0aGlzLnN0YWNrLnB1c2goZSl9cmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5zdGFja0hlYWRQb3NpdGlvbl19cmVsZWFzZShlKXtpZih0aGlzLnN0YWNrW3RoaXMuc3RhY2tIZWFkUG9zaXRpb25dIT09ZSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RhY2sgc3RhdGUuIFJlbGVhc2VkIHN0YXRlIGlzIG5vdCBvbiB0b3Agb2YgdGhlIHN0YWNrLiIpO2lmKGUudHlwZT09PWxjKXtjb25zdCBuPWU7bi5zaXplPTAsbi5hcnJheT12b2lkIDAsbi5wb3NpdGlvbj0wLG4udHlwZT12b2lkIDB9aWYoZS50eXBlPT09VWl8fGUudHlwZT09PUFwKXtjb25zdCBuPWU7bi5zaXplPTAsbi5tYXA9dm9pZCAwLG4ucmVhZENvdW50PTAsbi50eXBlPXZvaWQgMH10aGlzLnN0YWNrSGVhZFBvc2l0aW9uLS19cmVzZXQoKXt0aGlzLnN0YWNrLmxlbmd0aD0wLHRoaXMuc3RhY2tIZWFkUG9zaXRpb249LTF9fWNvbnN0IF9pPS0xLGl1PW5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMCkpLFdfPW5ldyBVaW50OEFycmF5KGl1LmJ1ZmZlcik7dHJ5e2l1LmdldEludDgoMCl9Y2F0Y2godCl7aWYoISh0IGluc3RhbmNlb2YgUmFuZ2VFcnJvcikpdGhyb3cgbmV3IEVycm9yKCJUaGlzIG1vZHVsZSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBjdXJyZW50IEphdmFTY3JpcHQgZW5naW5lIGJlY2F1c2UgRGF0YVZpZXcgZG9lcyBub3QgdGhyb3cgUmFuZ2VFcnJvciBvbiBvdXQtb2YtYm91bmRzIGFjY2VzcyIpfWNvbnN0IFFsPW5ldyBSYW5nZUVycm9yKCJJbnN1ZmZpY2llbnQgZGF0YSIpLEdfPW5ldyBIXztjbGFzcyBzdXtjb25zdHJ1Y3RvcihlKXt0ZSh0aGlzLCJleHRlbnNpb25Db2RlYyIpO3RlKHRoaXMsImNvbnRleHQiKTt0ZSh0aGlzLCJ1c2VCaWdJbnQ2NCIpO3RlKHRoaXMsInJhd1N0cmluZ3MiKTt0ZSh0aGlzLCJtYXhTdHJMZW5ndGgiKTt0ZSh0aGlzLCJtYXhCaW5MZW5ndGgiKTt0ZSh0aGlzLCJtYXhBcnJheUxlbmd0aCIpO3RlKHRoaXMsIm1heE1hcExlbmd0aCIpO3RlKHRoaXMsIm1heEV4dExlbmd0aCIpO3RlKHRoaXMsImtleURlY29kZXIiKTt0ZSh0aGlzLCJtYXBLZXlDb252ZXJ0ZXIiKTt0ZSh0aGlzLCJ0b3RhbFBvcyIsMCk7dGUodGhpcywicG9zIiwwKTt0ZSh0aGlzLCJ2aWV3IixpdSk7dGUodGhpcywiYnl0ZXMiLFdfKTt0ZSh0aGlzLCJoZWFkQnl0ZSIsX2kpO3RlKHRoaXMsInN0YWNrIixuZXcgVl8pO3RlKHRoaXMsImVudGVyZWQiLCExKTt0aGlzLmV4dGVuc2lvbkNvZGVjPWU/LmV4dGVuc2lvbkNvZGVjPz9yby5kZWZhdWx0Q29kZWMsdGhpcy5jb250ZXh0PWU/LmNvbnRleHQsdGhpcy51c2VCaWdJbnQ2ND1lPy51c2VCaWdJbnQ2ND8/ITEsdGhpcy5yYXdTdHJpbmdzPWU/LnJhd1N0cmluZ3M/PyExLHRoaXMubWF4U3RyTGVuZ3RoPWU/Lm1heFN0ckxlbmd0aD8/eGksdGhpcy5tYXhCaW5MZW5ndGg9ZT8ubWF4QmluTGVuZ3RoPz94aSx0aGlzLm1heEFycmF5TGVuZ3RoPWU/Lm1heEFycmF5TGVuZ3RoPz94aSx0aGlzLm1heE1hcExlbmd0aD1lPy5tYXhNYXBMZW5ndGg/P3hpLHRoaXMubWF4RXh0TGVuZ3RoPWU/Lm1heEV4dExlbmd0aD8/eGksdGhpcy5rZXlEZWNvZGVyPWU/LmtleURlY29kZXIhPT12b2lkIDA/ZS5rZXlEZWNvZGVyOkdfLHRoaXMubWFwS2V5Q29udmVydGVyPWU/Lm1hcEtleUNvbnZlcnRlcj8/S199Y2xvbmUoKXtyZXR1cm4gbmV3IHN1KHtleHRlbnNpb25Db2RlYzp0aGlzLmV4dGVuc2lvbkNvZGVjLGNvbnRleHQ6dGhpcy5jb250ZXh0LHVzZUJpZ0ludDY0OnRoaXMudXNlQmlnSW50NjQscmF3U3RyaW5nczp0aGlzLnJhd1N0cmluZ3MsbWF4U3RyTGVuZ3RoOnRoaXMubWF4U3RyTGVuZ3RoLG1heEJpbkxlbmd0aDp0aGlzLm1heEJpbkxlbmd0aCxtYXhBcnJheUxlbmd0aDp0aGlzLm1heEFycmF5TGVuZ3RoLG1heE1hcExlbmd0aDp0aGlzLm1heE1hcExlbmd0aCxtYXhFeHRMZW5ndGg6dGhpcy5tYXhFeHRMZW5ndGgsa2V5RGVjb2Rlcjp0aGlzLmtleURlY29kZXJ9KX1yZWluaXRpYWxpemVTdGF0ZSgpe3RoaXMudG90YWxQb3M9MCx0aGlzLmhlYWRCeXRlPV9pLHRoaXMuc3RhY2sucmVzZXQoKX1zZXRCdWZmZXIoZSl7Y29uc3Qgcj11YyhlKTt0aGlzLmJ5dGVzPXIsdGhpcy52aWV3PW5ldyBEYXRhVmlldyhyLmJ1ZmZlcixyLmJ5dGVPZmZzZXQsci5ieXRlTGVuZ3RoKSx0aGlzLnBvcz0wfWFwcGVuZEJ1ZmZlcihlKXtpZih0aGlzLmhlYWRCeXRlPT09X2kmJiF0aGlzLmhhc1JlbWFpbmluZygxKSl0aGlzLnNldEJ1ZmZlcihlKTtlbHNle2NvbnN0IHI9dGhpcy5ieXRlcy5zdWJhcnJheSh0aGlzLnBvcyksbj11YyhlKSxpPW5ldyBVaW50OEFycmF5KHIubGVuZ3RoK24ubGVuZ3RoKTtpLnNldChyKSxpLnNldChuLHIubGVuZ3RoKSx0aGlzLnNldEJ1ZmZlcihpKX19aGFzUmVtYWluaW5nKGUpe3JldHVybiB0aGlzLnZpZXcuYnl0ZUxlbmd0aC10aGlzLnBvcz49ZX1jcmVhdGVFeHRyYUJ5dGVFcnJvcihlKXtjb25zdHt2aWV3OnIscG9zOm59PXRoaXM7cmV0dXJuIG5ldyBSYW5nZUVycm9yKGBFeHRyYSAke3IuYnl0ZUxlbmd0aC1ufSBvZiAke3IuYnl0ZUxlbmd0aH0gYnl0ZShzKSBmb3VuZCBhdCBidWZmZXJbJHtlfV1gKX1kZWNvZGUoZSl7aWYodGhpcy5lbnRlcmVkKXJldHVybiB0aGlzLmNsb25lKCkuZGVjb2RlKGUpO3RyeXt0aGlzLmVudGVyZWQ9ITAsdGhpcy5yZWluaXRpYWxpemVTdGF0ZSgpLHRoaXMuc2V0QnVmZmVyKGUpO2NvbnN0IHI9dGhpcy5kb0RlY29kZVN5bmMoKTtpZih0aGlzLmhhc1JlbWFpbmluZygxKSl0aHJvdyB0aGlzLmNyZWF0ZUV4dHJhQnl0ZUVycm9yKHRoaXMucG9zKTtyZXR1cm4gcn1maW5hbGx5e3RoaXMuZW50ZXJlZD0hMX19KmRlY29kZU11bHRpKGUpe2lmKHRoaXMuZW50ZXJlZCl7eWllbGQqdGhpcy5jbG9uZSgpLmRlY29kZU11bHRpKGUpO3JldHVybn10cnl7Zm9yKHRoaXMuZW50ZXJlZD0hMCx0aGlzLnJlaW5pdGlhbGl6ZVN0YXRlKCksdGhpcy5zZXRCdWZmZXIoZSk7dGhpcy5oYXNSZW1haW5pbmcoMSk7KXlpZWxkIHRoaXMuZG9EZWNvZGVTeW5jKCl9ZmluYWxseXt0aGlzLmVudGVyZWQ9ITF9fWFzeW5jIGRlY29kZUFzeW5jKGUpe2lmKHRoaXMuZW50ZXJlZClyZXR1cm4gdGhpcy5jbG9uZSgpLmRlY29kZUFzeW5jKGUpO3RyeXt0aGlzLmVudGVyZWQ9ITA7bGV0IHI9ITEsbjtmb3IgYXdhaXQoY29uc3QgYSBvZiBlKXtpZihyKXRocm93IHRoaXMuZW50ZXJlZD0hMSx0aGlzLmNyZWF0ZUV4dHJhQnl0ZUVycm9yKHRoaXMudG90YWxQb3MpO3RoaXMuYXBwZW5kQnVmZmVyKGEpO3RyeXtuPXRoaXMuZG9EZWNvZGVTeW5jKCkscj0hMH1jYXRjaChjKXtpZighKGMgaW5zdGFuY2VvZiBSYW5nZUVycm9yKSl0aHJvdyBjfXRoaXMudG90YWxQb3MrPXRoaXMucG9zfWlmKHIpe2lmKHRoaXMuaGFzUmVtYWluaW5nKDEpKXRocm93IHRoaXMuY3JlYXRlRXh0cmFCeXRlRXJyb3IodGhpcy50b3RhbFBvcyk7cmV0dXJuIG59Y29uc3R7aGVhZEJ5dGU6aSxwb3M6cyx0b3RhbFBvczpvfT10aGlzO3Rocm93IG5ldyBSYW5nZUVycm9yKGBJbnN1ZmZpY2llbnQgZGF0YSBpbiBwYXJzaW5nICR7RWEoaSl9IGF0ICR7b30gKCR7c30gaW4gdGhlIGN1cnJlbnQgYnVmZmVyKWApfWZpbmFsbHl7dGhpcy5lbnRlcmVkPSExfX1kZWNvZGVBcnJheVN0cmVhbShlKXtyZXR1cm4gdGhpcy5kZWNvZGVNdWx0aUFzeW5jKGUsITApfWRlY29kZVN0cmVhbShlKXtyZXR1cm4gdGhpcy5kZWNvZGVNdWx0aUFzeW5jKGUsITEpfWFzeW5jKmRlY29kZU11bHRpQXN5bmMoZSxyKXtpZih0aGlzLmVudGVyZWQpe3lpZWxkKnRoaXMuY2xvbmUoKS5kZWNvZGVNdWx0aUFzeW5jKGUscik7cmV0dXJufXRyeXt0aGlzLmVudGVyZWQ9ITA7bGV0IG49cixpPS0xO2ZvciBhd2FpdChjb25zdCBzIG9mIGUpe2lmKHImJmk9PT0wKXRocm93IHRoaXMuY3JlYXRlRXh0cmFCeXRlRXJyb3IodGhpcy50b3RhbFBvcyk7dGhpcy5hcHBlbmRCdWZmZXIocyksbiYmKGk9dGhpcy5yZWFkQXJyYXlTaXplKCksbj0hMSx0aGlzLmNvbXBsZXRlKCkpO3RyeXtmb3IoO3lpZWxkIHRoaXMuZG9EZWNvZGVTeW5jKCksLS1pIT09MDspO31jYXRjaChvKXtpZighKG8gaW5zdGFuY2VvZiBSYW5nZUVycm9yKSl0aHJvdyBvfXRoaXMudG90YWxQb3MrPXRoaXMucG9zfX1maW5hbGx5e3RoaXMuZW50ZXJlZD0hMX19ZG9EZWNvZGVTeW5jKCl7ZTpmb3IoOzspe2NvbnN0IGU9dGhpcy5yZWFkSGVhZEJ5dGUoKTtsZXQgcjtpZihlPj0yMjQpcj1lLTI1NjtlbHNlIGlmKGU8MTkyKWlmKGU8MTI4KXI9ZTtlbHNlIGlmKGU8MTQ0KXtjb25zdCBpPWUtMTI4O2lmKGkhPT0wKXt0aGlzLnB1c2hNYXBTdGF0ZShpKSx0aGlzLmNvbXBsZXRlKCk7Y29udGludWUgZX1lbHNlIHI9e319ZWxzZSBpZihlPDE2MCl7Y29uc3QgaT1lLTE0NDtpZihpIT09MCl7dGhpcy5wdXNoQXJyYXlTdGF0ZShpKSx0aGlzLmNvbXBsZXRlKCk7Y29udGludWUgZX1lbHNlIHI9W119ZWxzZXtjb25zdCBpPWUtMTYwO3I9dGhpcy5kZWNvZGVTdHJpbmcoaSwwKX1lbHNlIGlmKGU9PT0xOTIpcj1udWxsO2Vsc2UgaWYoZT09PTE5NClyPSExO2Vsc2UgaWYoZT09PTE5NSlyPSEwO2Vsc2UgaWYoZT09PTIwMilyPXRoaXMucmVhZEYzMigpO2Vsc2UgaWYoZT09PTIwMylyPXRoaXMucmVhZEY2NCgpO2Vsc2UgaWYoZT09PTIwNClyPXRoaXMucmVhZFU4KCk7ZWxzZSBpZihlPT09MjA1KXI9dGhpcy5yZWFkVTE2KCk7ZWxzZSBpZihlPT09MjA2KXI9dGhpcy5yZWFkVTMyKCk7ZWxzZSBpZihlPT09MjA3KXRoaXMudXNlQmlnSW50NjQ/cj10aGlzLnJlYWRVNjRBc0JpZ0ludCgpOnI9dGhpcy5yZWFkVTY0KCk7ZWxzZSBpZihlPT09MjA4KXI9dGhpcy5yZWFkSTgoKTtlbHNlIGlmKGU9PT0yMDkpcj10aGlzLnJlYWRJMTYoKTtlbHNlIGlmKGU9PT0yMTApcj10aGlzLnJlYWRJMzIoKTtlbHNlIGlmKGU9PT0yMTEpdGhpcy51c2VCaWdJbnQ2ND9yPXRoaXMucmVhZEk2NEFzQmlnSW50KCk6cj10aGlzLnJlYWRJNjQoKTtlbHNlIGlmKGU9PT0yMTcpe2NvbnN0IGk9dGhpcy5sb29rVTgoKTtyPXRoaXMuZGVjb2RlU3RyaW5nKGksMSl9ZWxzZSBpZihlPT09MjE4KXtjb25zdCBpPXRoaXMubG9va1UxNigpO3I9dGhpcy5kZWNvZGVTdHJpbmcoaSwyKX1lbHNlIGlmKGU9PT0yMTkpe2NvbnN0IGk9dGhpcy5sb29rVTMyKCk7cj10aGlzLmRlY29kZVN0cmluZyhpLDQpfWVsc2UgaWYoZT09PTIyMCl7Y29uc3QgaT10aGlzLnJlYWRVMTYoKTtpZihpIT09MCl7dGhpcy5wdXNoQXJyYXlTdGF0ZShpKSx0aGlzLmNvbXBsZXRlKCk7Y29udGludWUgZX1lbHNlIHI9W119ZWxzZSBpZihlPT09MjIxKXtjb25zdCBpPXRoaXMucmVhZFUzMigpO2lmKGkhPT0wKXt0aGlzLnB1c2hBcnJheVN0YXRlKGkpLHRoaXMuY29tcGxldGUoKTtjb250aW51ZSBlfWVsc2Ugcj1bXX1lbHNlIGlmKGU9PT0yMjIpe2NvbnN0IGk9dGhpcy5yZWFkVTE2KCk7aWYoaSE9PTApe3RoaXMucHVzaE1hcFN0YXRlKGkpLHRoaXMuY29tcGxldGUoKTtjb250aW51ZSBlfWVsc2Ugcj17fX1lbHNlIGlmKGU9PT0yMjMpe2NvbnN0IGk9dGhpcy5yZWFkVTMyKCk7aWYoaSE9PTApe3RoaXMucHVzaE1hcFN0YXRlKGkpLHRoaXMuY29tcGxldGUoKTtjb250aW51ZSBlfWVsc2Ugcj17fX1lbHNlIGlmKGU9PT0xOTYpe2NvbnN0IGk9dGhpcy5sb29rVTgoKTtyPXRoaXMuZGVjb2RlQmluYXJ5KGksMSl9ZWxzZSBpZihlPT09MTk3KXtjb25zdCBpPXRoaXMubG9va1UxNigpO3I9dGhpcy5kZWNvZGVCaW5hcnkoaSwyKX1lbHNlIGlmKGU9PT0xOTgpe2NvbnN0IGk9dGhpcy5sb29rVTMyKCk7cj10aGlzLmRlY29kZUJpbmFyeShpLDQpfWVsc2UgaWYoZT09PTIxMilyPXRoaXMuZGVjb2RlRXh0ZW5zaW9uKDEsMCk7ZWxzZSBpZihlPT09MjEzKXI9dGhpcy5kZWNvZGVFeHRlbnNpb24oMiwwKTtlbHNlIGlmKGU9PT0yMTQpcj10aGlzLmRlY29kZUV4dGVuc2lvbig0LDApO2Vsc2UgaWYoZT09PTIxNSlyPXRoaXMuZGVjb2RlRXh0ZW5zaW9uKDgsMCk7ZWxzZSBpZihlPT09MjE2KXI9dGhpcy5kZWNvZGVFeHRlbnNpb24oMTYsMCk7ZWxzZSBpZihlPT09MTk5KXtjb25zdCBpPXRoaXMubG9va1U4KCk7cj10aGlzLmRlY29kZUV4dGVuc2lvbihpLDEpfWVsc2UgaWYoZT09PTIwMCl7Y29uc3QgaT10aGlzLmxvb2tVMTYoKTtyPXRoaXMuZGVjb2RlRXh0ZW5zaW9uKGksMil9ZWxzZSBpZihlPT09MjAxKXtjb25zdCBpPXRoaXMubG9va1UzMigpO3I9dGhpcy5kZWNvZGVFeHRlbnNpb24oaSw0KX1lbHNlIHRocm93IG5ldyBmdChgVW5yZWNvZ25pemVkIHR5cGUgYnl0ZTogJHtFYShlKX1gKTt0aGlzLmNvbXBsZXRlKCk7Y29uc3Qgbj10aGlzLnN0YWNrO2Zvcig7bi5sZW5ndGg+MDspe2NvbnN0IGk9bi50b3AoKTtpZihpLnR5cGU9PT1sYylpZihpLmFycmF5W2kucG9zaXRpb25dPXIsaS5wb3NpdGlvbisrLGkucG9zaXRpb249PT1pLnNpemUpcj1pLmFycmF5LG4ucmVsZWFzZShpKTtlbHNlIGNvbnRpbnVlIGU7ZWxzZSBpZihpLnR5cGU9PT1VaSl7aWYocj09PSJfX3Byb3RvX18iKXRocm93IG5ldyBmdCgiVGhlIGtleSBfX3Byb3RvX18gaXMgbm90IGFsbG93ZWQiKTtpLmtleT10aGlzLm1hcEtleUNvbnZlcnRlcihyKSxpLnR5cGU9QXA7Y29udGludWUgZX1lbHNlIGlmKGkubWFwW2kua2V5XT1yLGkucmVhZENvdW50KyssaS5yZWFkQ291bnQ9PT1pLnNpemUpcj1pLm1hcCxuLnJlbGVhc2UoaSk7ZWxzZXtpLmtleT1udWxsLGkudHlwZT1VaTtjb250aW51ZSBlfX1yZXR1cm4gcn19cmVhZEhlYWRCeXRlKCl7cmV0dXJuIHRoaXMuaGVhZEJ5dGU9PT1faSYmKHRoaXMuaGVhZEJ5dGU9dGhpcy5yZWFkVTgoKSksdGhpcy5oZWFkQnl0ZX1jb21wbGV0ZSgpe3RoaXMuaGVhZEJ5dGU9X2l9cmVhZEFycmF5U2l6ZSgpe2NvbnN0IGU9dGhpcy5yZWFkSGVhZEJ5dGUoKTtzd2l0Y2goZSl7Y2FzZSAyMjA6cmV0dXJuIHRoaXMucmVhZFUxNigpO2Nhc2UgMjIxOnJldHVybiB0aGlzLnJlYWRVMzIoKTtkZWZhdWx0OntpZihlPDE2MClyZXR1cm4gZS0xNDQ7dGhyb3cgbmV3IGZ0KGBVbnJlY29nbml6ZWQgYXJyYXkgdHlwZSBieXRlOiAke0VhKGUpfWApfX19cHVzaE1hcFN0YXRlKGUpe2lmKGU+dGhpcy5tYXhNYXBMZW5ndGgpdGhyb3cgbmV3IGZ0KGBNYXggbGVuZ3RoIGV4Y2VlZGVkOiBtYXAgbGVuZ3RoICgke2V9KSA+IG1heE1hcExlbmd0aExlbmd0aCAoJHt0aGlzLm1heE1hcExlbmd0aH0pYCk7dGhpcy5zdGFjay5wdXNoTWFwU3RhdGUoZSl9cHVzaEFycmF5U3RhdGUoZSl7aWYoZT50aGlzLm1heEFycmF5TGVuZ3RoKXRocm93IG5ldyBmdChgTWF4IGxlbmd0aCBleGNlZWRlZDogYXJyYXkgbGVuZ3RoICgke2V9KSA+IG1heEFycmF5TGVuZ3RoICgke3RoaXMubWF4QXJyYXlMZW5ndGh9KWApO3RoaXMuc3RhY2sucHVzaEFycmF5U3RhdGUoZSl9ZGVjb2RlU3RyaW5nKGUscil7cmV0dXJuIXRoaXMucmF3U3RyaW5nc3x8dGhpcy5zdGF0ZUlzTWFwS2V5KCk/dGhpcy5kZWNvZGVVdGY4U3RyaW5nKGUscik6dGhpcy5kZWNvZGVCaW5hcnkoZSxyKX1kZWNvZGVVdGY4U3RyaW5nKGUscil7aWYoZT50aGlzLm1heFN0ckxlbmd0aCl0aHJvdyBuZXcgZnQoYE1heCBsZW5ndGggZXhjZWVkZWQ6IFVURi04IGJ5dGUgbGVuZ3RoICgke2V9KSA+IG1heFN0ckxlbmd0aCAoJHt0aGlzLm1heFN0ckxlbmd0aH0pYCk7aWYodGhpcy5ieXRlcy5ieXRlTGVuZ3RoPHRoaXMucG9zK3IrZSl0aHJvdyBRbDtjb25zdCBuPXRoaXMucG9zK3I7bGV0IGk7cmV0dXJuIHRoaXMuc3RhdGVJc01hcEtleSgpJiZ0aGlzLmtleURlY29kZXI/LmNhbkJlQ2FjaGVkKGUpP2k9dGhpcy5rZXlEZWNvZGVyLmRlY29kZSh0aGlzLmJ5dGVzLG4sZSk6aT1BXyh0aGlzLmJ5dGVzLG4sZSksdGhpcy5wb3MrPXIrZSxpfXN0YXRlSXNNYXBLZXkoKXtyZXR1cm4gdGhpcy5zdGFjay5sZW5ndGg+MD90aGlzLnN0YWNrLnRvcCgpLnR5cGU9PT1VaTohMX1kZWNvZGVCaW5hcnkoZSxyKXtpZihlPnRoaXMubWF4QmluTGVuZ3RoKXRocm93IG5ldyBmdChgTWF4IGxlbmd0aCBleGNlZWRlZDogYmluIGxlbmd0aCAoJHtlfSkgPiBtYXhCaW5MZW5ndGggKCR7dGhpcy5tYXhCaW5MZW5ndGh9KWApO2lmKCF0aGlzLmhhc1JlbWFpbmluZyhlK3IpKXRocm93IFFsO2NvbnN0IG49dGhpcy5wb3MrcixpPXRoaXMuYnl0ZXMuc3ViYXJyYXkobixuK2UpO3JldHVybiB0aGlzLnBvcys9citlLGl9ZGVjb2RlRXh0ZW5zaW9uKGUscil7aWYoZT50aGlzLm1heEV4dExlbmd0aCl0aHJvdyBuZXcgZnQoYE1heCBsZW5ndGggZXhjZWVkZWQ6IGV4dCBsZW5ndGggKCR7ZX0pID4gbWF4RXh0TGVuZ3RoICgke3RoaXMubWF4RXh0TGVuZ3RofSlgKTtjb25zdCBuPXRoaXMudmlldy5nZXRJbnQ4KHRoaXMucG9zK3IpLGk9dGhpcy5kZWNvZGVCaW5hcnkoZSxyKzEpO3JldHVybiB0aGlzLmV4dGVuc2lvbkNvZGVjLmRlY29kZShpLG4sdGhpcy5jb250ZXh0KX1sb29rVTgoKXtyZXR1cm4gdGhpcy52aWV3LmdldFVpbnQ4KHRoaXMucG9zKX1sb29rVTE2KCl7cmV0dXJuIHRoaXMudmlldy5nZXRVaW50MTYodGhpcy5wb3MpfWxvb2tVMzIoKXtyZXR1cm4gdGhpcy52aWV3LmdldFVpbnQzMih0aGlzLnBvcyl9cmVhZFU4KCl7Y29uc3QgZT10aGlzLnZpZXcuZ2V0VWludDgodGhpcy5wb3MpO3JldHVybiB0aGlzLnBvcysrLGV9cmVhZEk4KCl7Y29uc3QgZT10aGlzLnZpZXcuZ2V0SW50OCh0aGlzLnBvcyk7cmV0dXJuIHRoaXMucG9zKyssZX1yZWFkVTE2KCl7Y29uc3QgZT10aGlzLnZpZXcuZ2V0VWludDE2KHRoaXMucG9zKTtyZXR1cm4gdGhpcy5wb3MrPTIsZX1yZWFkSTE2KCl7Y29uc3QgZT10aGlzLnZpZXcuZ2V0SW50MTYodGhpcy5wb3MpO3JldHVybiB0aGlzLnBvcys9MixlfXJlYWRVMzIoKXtjb25zdCBlPXRoaXMudmlldy5nZXRVaW50MzIodGhpcy5wb3MpO3JldHVybiB0aGlzLnBvcys9NCxlfXJlYWRJMzIoKXtjb25zdCBlPXRoaXMudmlldy5nZXRJbnQzMih0aGlzLnBvcyk7cmV0dXJuIHRoaXMucG9zKz00LGV9cmVhZFU2NCgpe2NvbnN0IGU9T18odGhpcy52aWV3LHRoaXMucG9zKTtyZXR1cm4gdGhpcy5wb3MrPTgsZX1yZWFkSTY0KCl7Y29uc3QgZT1TcCh0aGlzLnZpZXcsdGhpcy5wb3MpO3JldHVybiB0aGlzLnBvcys9OCxlfXJlYWRVNjRBc0JpZ0ludCgpe2NvbnN0IGU9dGhpcy52aWV3LmdldEJpZ1VpbnQ2NCh0aGlzLnBvcyk7cmV0dXJuIHRoaXMucG9zKz04LGV9cmVhZEk2NEFzQmlnSW50KCl7Y29uc3QgZT10aGlzLnZpZXcuZ2V0QmlnSW50NjQodGhpcy5wb3MpO3JldHVybiB0aGlzLnBvcys9OCxlfXJlYWRGMzIoKXtjb25zdCBlPXRoaXMudmlldy5nZXRGbG9hdDMyKHRoaXMucG9zKTtyZXR1cm4gdGhpcy5wb3MrPTQsZX1yZWFkRjY0KCl7Y29uc3QgZT10aGlzLnZpZXcuZ2V0RmxvYXQ2NCh0aGlzLnBvcyk7cmV0dXJuIHRoaXMucG9zKz04LGV9fWZ1bmN0aW9uIFlfKHQsZSl7cmV0dXJuIG5ldyBzdShlKS5kZWNvZGUodCl9ZnVuY3Rpb24geG4odCxlKXtlfHwoZT10LnJlZHVjZSgoaSxzKT0+aStzLmxlbmd0aCwwKSk7Y29uc3Qgcj13ZChlKTtsZXQgbj0wO2Zvcihjb25zdCBpIG9mIHQpci5zZXQoaSxuKSxuKz1pLmxlbmd0aDtyZXR1cm4gamMocil9ZnVuY3Rpb24gVWUodCxlPSJ1dGY4Iil7Y29uc3Qgcj1iZFtlXTtpZighcil0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGVuY29kaW5nICIke2V9ImApO3JldHVybihlPT09InV0ZjgifHxlPT09InV0Zi04IikmJmdsb2JhbFRoaXMuQnVmZmVyIT1udWxsJiZnbG9iYWxUaGlzLkJ1ZmZlci5mcm9tIT1udWxsP2dsb2JhbFRoaXMuQnVmZmVyLmZyb20odC5idWZmZXIsdC5ieXRlT2Zmc2V0LHQuYnl0ZUxlbmd0aCkudG9TdHJpbmcoInV0ZjgiKTpyLmVuY29kZXIuZW5jb2RlKHQpLnN1YnN0cmluZygxKX1jb25zdCBEcD10PT5VaW50OEFycmF5LmZyb20odC5zcGxpdCgiIikubWFwKGU9PmUuY2hhckNvZGVBdCgwKSkpLFpfPURwKCJleHBhbmQgMTYtYnl0ZSBrIiksWF89RHAoImV4cGFuZCAzMi1ieXRlIGsiKSxKXz1acihaXyksUV89WnIoWF8pO2Z1bmN0aW9uIGNlKHQsZSl7cmV0dXJuIHQ8PGV8dD4+PjMyLWV9ZnVuY3Rpb24gaGModCl7cmV0dXJuIHQuYnl0ZU9mZnNldCU0PT09MH1jb25zdCBfcz02NCxlST0xNixPcD0yKiozMi0xLGVoPW5ldyBVaW50MzJBcnJheTtmdW5jdGlvbiB0SSh0LGUscixuLGkscyxvLGEpe2NvbnN0IGM9aS5sZW5ndGgsdT1uZXcgVWludDhBcnJheShfcyksbD1acih1KSxoPWhjKGkpJiZoYyhzKSxwPWg/WnIoaSk6ZWgsZz1oP1pyKHMpOmVoO2ZvcihsZXQgdz0wO3c8YztvKyspe2lmKHQoZSxyLG4sbCxvLGEpLG8+PU9wKXRocm93IG5ldyBFcnJvcigiYXJ4OiBjb3VudGVyIG92ZXJmbG93Iik7Y29uc3QgYj1NYXRoLm1pbihfcyxjLXcpO2lmKGgmJmI9PT1fcyl7Y29uc3Qgdj13LzQ7aWYodyU0IT09MCl0aHJvdyBuZXcgRXJyb3IoImFyeDogaW52YWxpZCBibG9jayBwb3NpdGlvbiIpO2ZvcihsZXQgTz0wLEY7TzxlSTtPKyspRj12K08sZ1tGXT1wW0ZdXmxbT107dys9X3M7Y29udGludWV9Zm9yKGxldCB2PTAsTzt2PGI7disrKU89dyt2LHNbT109aVtPXV51W3ZdO3crPWJ9fWZ1bmN0aW9uIHJJKHQsZSl7Y29uc3R7YWxsb3dTaG9ydEtleXM6cixleHRlbmROb25jZUZuOm4sY291bnRlckxlbmd0aDppLGNvdW50ZXJSaWdodDpzLHJvdW5kczpvfT1XeCh7YWxsb3dTaG9ydEtleXM6ITEsY291bnRlckxlbmd0aDo4LGNvdW50ZXJSaWdodDohMSxyb3VuZHM6MjB9LGUpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiY29yZSBtdXN0IGJlIGEgZnVuY3Rpb24iKTtyZXR1cm4gYmEoaSksYmEobyksb2Mocyksb2MociksKGEsYyx1LGwsaD0wKT0+e3N0KGEpLHN0KGMpLHN0KHUpO2NvbnN0IHA9dS5sZW5ndGg7aWYobD09PXZvaWQgMCYmKGw9bmV3IFVpbnQ4QXJyYXkocCkpLHN0KGwpLGJhKGgpLGg8MHx8aD49T3ApdGhyb3cgbmV3IEVycm9yKCJhcng6IGNvdW50ZXIgb3ZlcmZsb3ciKTtpZihsLmxlbmd0aDxwKXRocm93IG5ldyBFcnJvcihgYXJ4OiBvdXRwdXQgKCR7bC5sZW5ndGh9KSBpcyBzaG9ydGVyIHRoYW4gZGF0YSAoJHtwfSlgKTtjb25zdCBnPVtdO2xldCB3PWEubGVuZ3RoLGIsdjtpZih3PT09MzIpZy5wdXNoKGI9Y2MoYSkpLHY9UV87ZWxzZSBpZih3PT09MTYmJnIpYj1uZXcgVWludDhBcnJheSgzMiksYi5zZXQoYSksYi5zZXQoYSwxNiksdj1KXyxnLnB1c2goYik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYGFyeDogaW52YWxpZCAzMi1ieXRlIGtleSwgZ290IGxlbmd0aD0ke3d9YCk7aGMoYyl8fGcucHVzaChjPWNjKGMpKTtjb25zdCBPPVpyKGIpO2lmKG4pe2lmKGMubGVuZ3RoIT09MjQpdGhyb3cgbmV3IEVycm9yKCJhcng6IGV4dGVuZGVkIG5vbmNlIG11c3QgYmUgMjQgYnl0ZXMiKTtuKHYsTyxacihjLnN1YmFycmF5KDAsMTYpKSxPKSxjPWMuc3ViYXJyYXkoMTYpfWNvbnN0IEY9MTYtaTtpZihGIT09Yy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBhcng6IG5vbmNlIG11c3QgYmUgJHtGfSBvciAxNiBieXRlc2ApO2lmKEYhPT0xMil7Y29uc3QgUD1uZXcgVWludDhBcnJheSgxMik7UC5zZXQoYyxzPzA6MTItYy5sZW5ndGgpLGM9UCxnLnB1c2goYyl9Y29uc3QgXz1acihjKTtyZXR1cm4gdEkodCx2LE8sXyx1LGwsaCxvKSxjaSguLi5nKSxsfX1jb25zdCBOZT0odCxlKT0+dFtlKytdJjI1NXwodFtlKytdJjI1NSk8PDg7Y2xhc3Mgbkl7Y29uc3RydWN0b3IoZSl7dGhpcy5ibG9ja0xlbj0xNix0aGlzLm91dHB1dExlbj0xNix0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxNiksdGhpcy5yPW5ldyBVaW50MTZBcnJheSgxMCksdGhpcy5oPW5ldyBVaW50MTZBcnJheSgxMCksdGhpcy5wYWQ9bmV3IFVpbnQxNkFycmF5KDgpLHRoaXMucG9zPTAsdGhpcy5maW5pc2hlZD0hMSxlPWFjKGUpLHN0KGUsMzIpO2NvbnN0IHI9TmUoZSwwKSxuPU5lKGUsMiksaT1OZShlLDQpLHM9TmUoZSw2KSxvPU5lKGUsOCksYT1OZShlLDEwKSxjPU5lKGUsMTIpLHU9TmUoZSwxNCk7dGhpcy5yWzBdPXImODE5MSx0aGlzLnJbMV09KHI+Pj4xM3xuPDwzKSY4MTkxLHRoaXMuclsyXT0obj4+PjEwfGk8PDYpJjc5MzksdGhpcy5yWzNdPShpPj4+N3xzPDw5KSY4MTkxLHRoaXMucls0XT0ocz4+PjR8bzw8MTIpJjI1NSx0aGlzLnJbNV09bz4+PjEmODE5MCx0aGlzLnJbNl09KG8+Pj4xNHxhPDwyKSY4MTkxLHRoaXMucls3XT0oYT4+PjExfGM8PDUpJjgwNjUsdGhpcy5yWzhdPShjPj4+OHx1PDw4KSY4MTkxLHRoaXMucls5XT11Pj4+NSYxMjc7Zm9yKGxldCBsPTA7bDw4O2wrKyl0aGlzLnBhZFtsXT1OZShlLDE2KzIqbCl9cHJvY2VzcyhlLHIsbj0hMSl7Y29uc3QgaT1uPzA6MjA0OCx7aDpzLHI6b309dGhpcyxhPW9bMF0sYz1vWzFdLHU9b1syXSxsPW9bM10saD1vWzRdLHA9b1s1XSxnPW9bNl0sdz1vWzddLGI9b1s4XSx2PW9bOV0sTz1OZShlLHIrMCksRj1OZShlLHIrMiksXz1OZShlLHIrNCksUD1OZShlLHIrNiksQz1OZShlLHIrOCksaj1OZShlLHIrMTApLHE9TmUoZSxyKzEyKSxNPU5lKGUscisxNCk7bGV0IFQ9c1swXSsoTyY4MTkxKSx6PXNbMV0rKChPPj4+MTN8Rjw8MykmODE5MSksVT1zWzJdKygoRj4+PjEwfF88PDYpJjgxOTEpLE49c1szXSsoKF8+Pj43fFA8PDkpJjgxOTEpLEQ9c1s0XSsoKFA+Pj40fEM8PDEyKSY4MTkxKSxSPXNbNV0rKEM+Pj4xJjgxOTEpLHk9c1s2XSsoKEM+Pj4xNHxqPDwyKSY4MTkxKSxtPXNbN10rKChqPj4+MTF8cTw8NSkmODE5MSksST1zWzhdKygocT4+Pjh8TTw8OCkmODE5MSksQT1zWzldKyhNPj4+NXxpKSxTPTAsJD1TK1QqYSt6Kig1KnYpK1UqKDUqYikrTiooNSp3KStEKig1KmcpO1M9JD4+PjEzLCQmPTgxOTEsJCs9UiooNSpwKSt5Kig1KmgpK20qKDUqbCkrSSooNSp1KStBKig1KmMpLFMrPSQ+Pj4xMywkJj04MTkxO2xldCBrPVMrVCpjK3oqYStVKig1KnYpK04qKDUqYikrRCooNSp3KTtTPWs+Pj4xMyxrJj04MTkxLGsrPVIqKDUqZykreSooNSpwKSttKig1KmgpK0kqKDUqbCkrQSooNSp1KSxTKz1rPj4+MTMsayY9ODE5MTtsZXQgSz1TK1QqdSt6KmMrVSphK04qKDUqdikrRCooNSpiKTtTPUs+Pj4xMyxLJj04MTkxLEsrPVIqKDUqdykreSooNSpnKSttKig1KnApK0kqKDUqaCkrQSooNSpsKSxTKz1LPj4+MTMsSyY9ODE5MTtsZXQgWj1TK1QqbCt6KnUrVSpjK04qYStEKig1KnYpO1M9Wj4+PjEzLFomPTgxOTEsWis9UiooNSpiKSt5Kig1KncpK20qKDUqZykrSSooNSpwKStBKig1KmgpLFMrPVo+Pj4xMyxaJj04MTkxO2xldCBWPVMrVCpoK3oqbCtVKnUrTipjK0QqYTtTPVY+Pj4xMyxWJj04MTkxLFYrPVIqKDUqdikreSooNSpiKSttKig1KncpK0kqKDUqZykrQSooNSpwKSxTKz1WPj4+MTMsViY9ODE5MTtsZXQgVz1TK1QqcCt6KmgrVSpsK04qdStEKmM7Uz1XPj4+MTMsVyY9ODE5MSxXKz1SKmEreSooNSp2KSttKig1KmIpK0kqKDUqdykrQSooNSpnKSxTKz1XPj4+MTMsVyY9ODE5MTtsZXQgSj1TK1QqZyt6KnArVSpoK04qbCtEKnU7Uz1KPj4+MTMsSiY9ODE5MSxKKz1SKmMreSphK20qKDUqdikrSSooNSpiKStBKig1KncpLFMrPUo+Pj4xMyxKJj04MTkxO2xldCBlZT1TK1Qqdyt6KmcrVSpwK04qaCtEKmw7Uz1lZT4+PjEzLGVlJj04MTkxLGVlKz1SKnUreSpjK20qYStJKig1KnYpK0EqKDUqYiksUys9ZWU+Pj4xMyxlZSY9ODE5MTtsZXQgcmU9UytUKmIreip3K1UqZytOKnArRCpoO1M9cmU+Pj4xMyxyZSY9ODE5MSxyZSs9UipsK3kqdSttKmMrSSphK0EqKDUqdiksUys9cmU+Pj4xMyxyZSY9ODE5MTtsZXQgUT1TK1Qqdit6KmIrVSp3K04qZytEKnA7Uz1RPj4+MTMsUSY9ODE5MSxRKz1SKmgreSpsK20qdStJKmMrQSphLFMrPVE+Pj4xMyxRJj04MTkxLFM9KFM8PDIpK1N8MCxTPVMrJHwwLCQ9UyY4MTkxLFM9Uz4+PjEzLGsrPVMsc1swXT0kLHNbMV09ayxzWzJdPUssc1szXT1aLHNbNF09VixzWzVdPVcsc1s2XT1KLHNbN109ZWUsc1s4XT1yZSxzWzldPVF9ZmluYWxpemUoKXtjb25zdHtoOmUscGFkOnJ9PXRoaXMsbj1uZXcgVWludDE2QXJyYXkoMTApO2xldCBpPWVbMV0+Pj4xMztlWzFdJj04MTkxO2ZvcihsZXQgYT0yO2E8MTA7YSsrKWVbYV0rPWksaT1lW2FdPj4+MTMsZVthXSY9ODE5MTtlWzBdKz1pKjUsaT1lWzBdPj4+MTMsZVswXSY9ODE5MSxlWzFdKz1pLGk9ZVsxXT4+PjEzLGVbMV0mPTgxOTEsZVsyXSs9aSxuWzBdPWVbMF0rNSxpPW5bMF0+Pj4xMyxuWzBdJj04MTkxO2ZvcihsZXQgYT0xO2E8MTA7YSsrKW5bYV09ZVthXStpLGk9blthXT4+PjEzLG5bYV0mPTgxOTE7bls5XS09ODE5MjtsZXQgcz0oaV4xKS0xO2ZvcihsZXQgYT0wO2E8MTA7YSsrKW5bYV0mPXM7cz1+cztmb3IobGV0IGE9MDthPDEwO2ErKyllW2FdPWVbYV0mc3xuW2FdO2VbMF09KGVbMF18ZVsxXTw8MTMpJjY1NTM1LGVbMV09KGVbMV0+Pj4zfGVbMl08PDEwKSY2NTUzNSxlWzJdPShlWzJdPj4+NnxlWzNdPDw3KSY2NTUzNSxlWzNdPShlWzNdPj4+OXxlWzRdPDw0KSY2NTUzNSxlWzRdPShlWzRdPj4+MTJ8ZVs1XTw8MXxlWzZdPDwxNCkmNjU1MzUsZVs1XT0oZVs2XT4+PjJ8ZVs3XTw8MTEpJjY1NTM1LGVbNl09KGVbN10+Pj41fGVbOF08PDgpJjY1NTM1LGVbN109KGVbOF0+Pj44fGVbOV08PDUpJjY1NTM1O2xldCBvPWVbMF0rclswXTtlWzBdPW8mNjU1MzU7Zm9yKGxldCBhPTE7YTw4O2ErKylvPShlW2FdK3JbYV18MCkrKG8+Pj4xNil8MCxlW2FdPW8mNjU1MzU7Y2kobil9dXBkYXRlKGUpe1psKHRoaXMpLGU9YWMoZSksc3QoZSk7Y29uc3R7YnVmZmVyOnIsYmxvY2tMZW46bn09dGhpcyxpPWUubGVuZ3RoO2ZvcihsZXQgcz0wO3M8aTspe2NvbnN0IG89TWF0aC5taW4obi10aGlzLnBvcyxpLXMpO2lmKG89PT1uKXtmb3IoO248PWktcztzKz1uKXRoaXMucHJvY2VzcyhlLHMpO2NvbnRpbnVlfXIuc2V0KGUuc3ViYXJyYXkocyxzK28pLHRoaXMucG9zKSx0aGlzLnBvcys9byxzKz1vLHRoaXMucG9zPT09biYmKHRoaXMucHJvY2VzcyhyLDAsITEpLHRoaXMucG9zPTApfXJldHVybiB0aGlzfWRlc3Ryb3koKXtjaSh0aGlzLmgsdGhpcy5yLHRoaXMuYnVmZmVyLHRoaXMucGFkKX1kaWdlc3RJbnRvKGUpe1psKHRoaXMpLHp4KGUsdGhpcyksdGhpcy5maW5pc2hlZD0hMDtjb25zdHtidWZmZXI6cixoOm59PXRoaXM7bGV0e3BvczppfT10aGlzO2lmKGkpe2ZvcihyW2krK109MTtpPDE2O2krKylyW2ldPTA7dGhpcy5wcm9jZXNzKHIsMCwhMCl9dGhpcy5maW5hbGl6ZSgpO2xldCBzPTA7Zm9yKGxldCBvPTA7bzw4O28rKyllW3MrK109bltvXT4+PjAsZVtzKytdPW5bb10+Pj44O3JldHVybiBlfWRpZ2VzdCgpe2NvbnN0e2J1ZmZlcjplLG91dHB1dExlbjpyfT10aGlzO3RoaXMuZGlnZXN0SW50byhlKTtjb25zdCBuPWUuc2xpY2UoMCxyKTtyZXR1cm4gdGhpcy5kZXN0cm95KCksbn19ZnVuY3Rpb24gaUkodCl7Y29uc3QgZT0obixpKT0+dChpKS51cGRhdGUoYWMobikpLmRpZ2VzdCgpLHI9dChuZXcgVWludDhBcnJheSgzMikpO3JldHVybiBlLm91dHB1dExlbj1yLm91dHB1dExlbixlLmJsb2NrTGVuPXIuYmxvY2tMZW4sZS5jcmVhdGU9bj0+dChuKSxlfWNvbnN0IHNJPWlJKHQ9Pm5ldyBuSSh0KSk7ZnVuY3Rpb24gb0kodCxlLHIsbixpLHM9MjApe2xldCBvPXRbMF0sYT10WzFdLGM9dFsyXSx1PXRbM10sbD1lWzBdLGg9ZVsxXSxwPWVbMl0sZz1lWzNdLHc9ZVs0XSxiPWVbNV0sdj1lWzZdLE89ZVs3XSxGPWksXz1yWzBdLFA9clsxXSxDPXJbMl0saj1vLHE9YSxNPWMsVD11LHo9bCxVPWgsTj1wLEQ9ZyxSPXcseT1iLG09dixJPU8sQT1GLFM9XywkPVAsaz1DO2ZvcihsZXQgWj0wO1o8cztaKz0yKWo9ait6fDAsQT1jZShBXmosMTYpLFI9UitBfDAsej1jZSh6XlIsMTIpLGo9ait6fDAsQT1jZShBXmosOCksUj1SK0F8MCx6PWNlKHpeUiw3KSxxPXErVXwwLFM9Y2UoU15xLDE2KSx5PXkrU3wwLFU9Y2UoVV55LDEyKSxxPXErVXwwLFM9Y2UoU15xLDgpLHk9eStTfDAsVT1jZShVXnksNyksTT1NK058MCwkPWNlKCReTSwxNiksbT1tKyR8MCxOPWNlKE5ebSwxMiksTT1NK058MCwkPWNlKCReTSw4KSxtPW0rJHwwLE49Y2UoTl5tLDcpLFQ9VCtEfDAsaz1jZShrXlQsMTYpLEk9SStrfDAsRD1jZShEXkksMTIpLFQ9VCtEfDAsaz1jZShrXlQsOCksST1JK2t8MCxEPWNlKEReSSw3KSxqPWorVXwwLGs9Y2Uoa15qLDE2KSxtPW0ra3wwLFU9Y2UoVV5tLDEyKSxqPWorVXwwLGs9Y2Uoa15qLDgpLG09bStrfDAsVT1jZShVXm0sNykscT1xK058MCxBPWNlKEFecSwxNiksST1JK0F8MCxOPWNlKE5eSSwxMikscT1xK058MCxBPWNlKEFecSw4KSxJPUkrQXwwLE49Y2UoTl5JLDcpLE09TStEfDAsUz1jZShTXk0sMTYpLFI9UitTfDAsRD1jZShEXlIsMTIpLE09TStEfDAsUz1jZShTXk0sOCksUj1SK1N8MCxEPWNlKEReUiw3KSxUPVQrenwwLCQ9Y2UoJF5ULDE2KSx5PXkrJHwwLHo9Y2Uoel55LDEyKSxUPVQrenwwLCQ9Y2UoJF5ULDgpLHk9eSskfDAsej1jZSh6XnksNyk7bGV0IEs9MDtuW0srK109bytqfDAsbltLKytdPWErcXwwLG5bSysrXT1jK018MCxuW0srK109dStUfDAsbltLKytdPWwrenwwLG5bSysrXT1oK1V8MCxuW0srK109cCtOfDAsbltLKytdPWcrRHwwLG5bSysrXT13K1J8MCxuW0srK109Yit5fDAsbltLKytdPXYrbXwwLG5bSysrXT1PK0l8MCxuW0srK109RitBfDAsbltLKytdPV8rU3wwLG5bSysrXT1QKyR8MCxuW0srK109QytrfDB9Y29uc3QgYUk9ckkob0kse2NvdW50ZXJSaWdodDohMSxjb3VudGVyTGVuZ3RoOjQsYWxsb3dTaG9ydEtleXM6ITF9KSxjST1uZXcgVWludDhBcnJheSgxNiksdGg9KHQsZSk9Pnt0LnVwZGF0ZShlKTtjb25zdCByPWUubGVuZ3RoJTE2O3ImJnQudXBkYXRlKGNJLnN1YmFycmF5KHIpKX0sdUk9bmV3IFVpbnQ4QXJyYXkoMzIpO2Z1bmN0aW9uIHJoKHQsZSxyLG4saSl7Y29uc3Qgcz10KGUscix1SSksbz1zSS5jcmVhdGUocyk7aSYmdGgobyxpKSx0aChvLG4pO2NvbnN0IGE9Wngobi5sZW5ndGgsaT9pLmxlbmd0aDowLCEwKTtvLnVwZGF0ZShhKTtjb25zdCBjPW8uZGlnZXN0KCk7cmV0dXJuIGNpKHMsYSksY31jb25zdCBsST10PT4oZSxyLG4pPT4oe2VuY3J5cHQocyxvKXtjb25zdCBhPXMubGVuZ3RoO289WGwoYSsxNixvLCExKSxvLnNldChzKTtjb25zdCBjPW8uc3ViYXJyYXkoMCwtMTYpO3QoZSxyLGMsYywxKTtjb25zdCB1PXJoKHQsZSxyLGMsbik7cmV0dXJuIG8uc2V0KHUsYSksY2kodSksb30sZGVjcnlwdChzLG8pe289WGwocy5sZW5ndGgtMTYsbywhMSk7Y29uc3QgYT1zLnN1YmFycmF5KDAsLTE2KSxjPXMuc3ViYXJyYXkoLTE2KSx1PXJoKHQsZSxyLGEsbik7aWYoIUd4KGMsdSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHRhZyIpO3JldHVybiBvLnNldChzLnN1YmFycmF5KDAsLTE2KSksdChlLHIsbyxvLDEpLGNpKHUpLG99fSksJHA9WXgoe2Jsb2NrU2l6ZTo2NCxub25jZUxlbmd0aDoxMix0YWdMZW5ndGg6MTZ9LGxJKGFJKSk7Y2xhc3MgQnAgZXh0ZW5kcyBBb3tjb25zdHJ1Y3RvcihlLHIpe3N1cGVyKCksdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSxTbyhlKTtjb25zdCBuPU50KHIpO2lmKHRoaXMuaUhhc2g9ZS5jcmVhdGUoKSx0eXBlb2YgdGhpcy5pSGFzaC51cGRhdGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBpbnN0YW5jZSBvZiBjbGFzcyB3aGljaCBleHRlbmRzIHV0aWxzLkhhc2giKTt0aGlzLmJsb2NrTGVuPXRoaXMuaUhhc2guYmxvY2tMZW4sdGhpcy5vdXRwdXRMZW49dGhpcy5pSGFzaC5vdXRwdXRMZW47Y29uc3QgaT10aGlzLmJsb2NrTGVuLHM9bmV3IFVpbnQ4QXJyYXkoaSk7cy5zZXQobi5sZW5ndGg+aT9lLmNyZWF0ZSgpLnVwZGF0ZShuKS5kaWdlc3QoKTpuKTtmb3IobGV0IG89MDtvPHMubGVuZ3RoO28rKylzW29dXj01NDt0aGlzLmlIYXNoLnVwZGF0ZShzKSx0aGlzLm9IYXNoPWUuY3JlYXRlKCk7Zm9yKGxldCBvPTA7bzxzLmxlbmd0aDtvKyspc1tvXV49MTA2O3RoaXMub0hhc2gudXBkYXRlKHMpLEl0KHMpfXVwZGF0ZShlKXtyZXR1cm4gWHIodGhpcyksdGhpcy5pSGFzaC51cGRhdGUoZSksdGhpc31kaWdlc3RJbnRvKGUpe1hyKHRoaXMpLEx0KGUsdGhpcy5vdXRwdXRMZW4pLHRoaXMuZmluaXNoZWQ9ITAsdGhpcy5pSGFzaC5kaWdlc3RJbnRvKGUpLHRoaXMub0hhc2gudXBkYXRlKGUpLHRoaXMub0hhc2guZGlnZXN0SW50byhlKSx0aGlzLmRlc3Ryb3koKX1kaWdlc3QoKXtjb25zdCBlPW5ldyBVaW50OEFycmF5KHRoaXMub0hhc2gub3V0cHV0TGVuKTtyZXR1cm4gdGhpcy5kaWdlc3RJbnRvKGUpLGV9X2Nsb25lSW50byhlKXtlfHwoZT1PYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSx7fSkpO2NvbnN0e29IYXNoOnIsaUhhc2g6bixmaW5pc2hlZDppLGRlc3Ryb3llZDpzLGJsb2NrTGVuOm8sb3V0cHV0TGVuOmF9PXRoaXM7cmV0dXJuIGU9ZSxlLmZpbmlzaGVkPWksZS5kZXN0cm95ZWQ9cyxlLmJsb2NrTGVuPW8sZS5vdXRwdXRMZW49YSxlLm9IYXNoPXIuX2Nsb25lSW50byhlLm9IYXNoKSxlLmlIYXNoPW4uX2Nsb25lSW50byhlLmlIYXNoKSxlfWNsb25lKCl7cmV0dXJuIHRoaXMuX2Nsb25lSW50bygpfWRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLm9IYXNoLmRlc3Ryb3koKSx0aGlzLmlIYXNoLmRlc3Ryb3koKX19Y29uc3QgUG89KHQsZSxyKT0+bmV3IEJwKHQsZSkudXBkYXRlKHIpLmRpZ2VzdCgpO1BvLmNyZWF0ZT0odCxlKT0+bmV3IEJwKHQsZSk7ZnVuY3Rpb24gaEkodCxlLHIpe3JldHVybiBTbyh0KSxyPT09dm9pZCAwJiYocj1uZXcgVWludDhBcnJheSh0Lm91dHB1dExlbikpLFBvKHQsTnQociksTnQoZSkpfWNvbnN0IHZhPVVpbnQ4QXJyYXkuZnJvbShbMF0pLG5oPVVpbnQ4QXJyYXkub2YoKTtmdW5jdGlvbiBmSSh0LGUscixuPTMyKXtTbyh0KSxJcihuKTtjb25zdCBpPXQub3V0cHV0TGVuO2lmKG4+MjU1KmkpdGhyb3cgbmV3IEVycm9yKCJMZW5ndGggc2hvdWxkIGJlIDw9IDI1NSpIYXNoTGVuIik7Y29uc3Qgcz1NYXRoLmNlaWwobi9pKTtyPT09dm9pZCAwJiYocj1uaCk7Y29uc3Qgbz1uZXcgVWludDhBcnJheShzKmkpLGE9UG8uY3JlYXRlKHQsZSksYz1hLl9jbG9uZUludG8oKSx1PW5ldyBVaW50OEFycmF5KGEub3V0cHV0TGVuKTtmb3IobGV0IGw9MDtsPHM7bCsrKXZhWzBdPWwrMSxjLnVwZGF0ZShsPT09MD9uaDp1KS51cGRhdGUocikudXBkYXRlKHZhKS5kaWdlc3RJbnRvKHUpLG8uc2V0KHUsaSpsKSxhLl9jbG9uZUludG8oYyk7cmV0dXJuIGEuZGVzdHJveSgpLGMuZGVzdHJveSgpLEl0KHUsdmEpLG8uc2xpY2UoMCxuKX1jb25zdCBkST0odCxlLHIsbixpKT0+ZkkodCxoSSh0LGUsciksbixpKSxUbz1CbzsvKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICovY29uc3Qgb3U9QmlnSW50KDApLGZjPUJpZ0ludCgxKTtmdW5jdGlvbiBubyh0LGU9IiIpe2lmKHR5cGVvZiB0IT0iYm9vbGVhbiIpe2NvbnN0IHI9ZSYmYCIke2V9ImA7dGhyb3cgbmV3IEVycm9yKHIrImV4cGVjdGVkIGJvb2xlYW4sIGdvdCB0eXBlPSIrdHlwZW9mIHQpfXJldHVybiB0fWZ1bmN0aW9uIHduKHQsZSxyPSIiKXtjb25zdCBuPUlvKHQpLGk9dD8ubGVuZ3RoLHM9ZSE9PXZvaWQgMDtpZighbnx8cyYmaSE9PWUpe2NvbnN0IG89ciYmYCIke3J9IiBgLGE9cz9gIG9mIGxlbmd0aCAke2V9YDoiIixjPW4/YGxlbmd0aD0ke2l9YDpgdHlwZT0ke3R5cGVvZiB0fWA7dGhyb3cgbmV3IEVycm9yKG8rImV4cGVjdGVkIFVpbnQ4QXJyYXkiK2ErIiwgZ290ICIrYyl9cmV0dXJuIHR9ZnVuY3Rpb24gSXModCl7Y29uc3QgZT10LnRvU3RyaW5nKDE2KTtyZXR1cm4gZS5sZW5ndGgmMT8iMCIrZTplfWZ1bmN0aW9uIFBwKHQpe2lmKHR5cGVvZiB0IT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoImhleCBzdHJpbmcgZXhwZWN0ZWQsIGdvdCAiK3R5cGVvZiB0KTtyZXR1cm4gdD09PSIiP291OkJpZ0ludCgiMHgiK3QpfWZ1bmN0aW9uIFJvKHQpe3JldHVybiBQcChlaSh0KSl9ZnVuY3Rpb24gaW8odCl7cmV0dXJuIEx0KHQpLFBwKGVpKFVpbnQ4QXJyYXkuZnJvbSh0KS5yZXZlcnNlKCkpKX1mdW5jdGlvbiBhdSh0LGUpe3JldHVybiBHcyh0LnRvU3RyaW5nKDE2KS5wYWRTdGFydChlKjIsIjAiKSl9ZnVuY3Rpb24gY3UodCxlKXtyZXR1cm4gYXUodCxlKS5yZXZlcnNlKCl9ZnVuY3Rpb24gR2UodCxlLHIpe2xldCBuO2lmKHR5cGVvZiBlPT0ic3RyaW5nIil0cnl7bj1HcyhlKX1jYXRjaChzKXt0aHJvdyBuZXcgRXJyb3IodCsiIG11c3QgYmUgaGV4IHN0cmluZyBvciBVaW50OEFycmF5LCBjYXVzZTogIitzKX1lbHNlIGlmKElvKGUpKW49VWludDhBcnJheS5mcm9tKGUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKHQrIiBtdXN0IGJlIGhleCBzdHJpbmcgb3IgVWludDhBcnJheSIpO2NvbnN0IGk9bi5sZW5ndGg7aWYodHlwZW9mIHI9PSJudW1iZXIiJiZpIT09cil0aHJvdyBuZXcgRXJyb3IodCsiIG9mIGxlbmd0aCAiK3IrIiBleHBlY3RlZCwgZ290ICIraSk7cmV0dXJuIG59Y29uc3QgeGE9dD0+dHlwZW9mIHQ9PSJiaWdpbnQiJiZvdTw9dDtmdW5jdGlvbiBwSSh0LGUscil7cmV0dXJuIHhhKHQpJiZ4YShlKSYmeGEocikmJmU8PXQmJnQ8cn1mdW5jdGlvbiBkYyh0LGUscixuKXtpZighcEkoZSxyLG4pKXRocm93IG5ldyBFcnJvcigiZXhwZWN0ZWQgdmFsaWQgIit0KyI6ICIrcisiIDw9IG4gPCAiK24rIiwgZ290ICIrZSl9ZnVuY3Rpb24gVHAodCl7bGV0IGU7Zm9yKGU9MDt0Pm91O3Q+Pj1mYyxlKz0xKTtyZXR1cm4gZX1jb25zdCBvcz10PT4oZmM8PEJpZ0ludCh0KSktZmM7ZnVuY3Rpb24gZ0kodCxlLHIpe2lmKHR5cGVvZiB0IT0ibnVtYmVyInx8dDwyKXRocm93IG5ldyBFcnJvcigiaGFzaExlbiBtdXN0IGJlIGEgbnVtYmVyIik7aWYodHlwZW9mIGUhPSJudW1iZXIifHxlPDIpdGhyb3cgbmV3IEVycm9yKCJxQnl0ZUxlbiBtdXN0IGJlIGEgbnVtYmVyIik7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJobWFjRm4gbXVzdCBiZSBhIGZ1bmN0aW9uIik7Y29uc3Qgbj1nPT5uZXcgVWludDhBcnJheShnKSxpPWc9PlVpbnQ4QXJyYXkub2YoZyk7bGV0IHM9bih0KSxvPW4odCksYT0wO2NvbnN0IGM9KCk9PntzLmZpbGwoMSksby5maWxsKDApLGE9MH0sdT0oLi4uZyk9PnIobyxzLC4uLmcpLGw9KGc9bigwKSk9PntvPXUoaSgwKSxnKSxzPXUoKSxnLmxlbmd0aCE9PTAmJihvPXUoaSgxKSxnKSxzPXUoKSl9LGg9KCk9PntpZihhKys+PTFlMyl0aHJvdyBuZXcgRXJyb3IoImRyYmc6IHRyaWVkIDEwMDAgdmFsdWVzIik7bGV0IGc9MDtjb25zdCB3PVtdO2Zvcig7ZzxlOyl7cz11KCk7Y29uc3QgYj1zLnNsaWNlKCk7dy5wdXNoKGIpLGcrPXMubGVuZ3RofXJldHVybiBLciguLi53KX07cmV0dXJuKGcsdyk9PntjKCksbChnKTtsZXQgYjtmb3IoOyEoYj13KGgoKSkpOylsKCk7cmV0dXJuIGMoKSxifX1mdW5jdGlvbiBDbyh0LGUscj17fSl7aWYoIXR8fHR5cGVvZiB0IT0ib2JqZWN0Iil0aHJvdyBuZXcgRXJyb3IoImV4cGVjdGVkIHZhbGlkIG9wdGlvbnMgb2JqZWN0Iik7ZnVuY3Rpb24gbihpLHMsbyl7Y29uc3QgYT10W2ldO2lmKG8mJmE9PT12b2lkIDApcmV0dXJuO2NvbnN0IGM9dHlwZW9mIGE7aWYoYyE9PXN8fGE9PT1udWxsKXRocm93IG5ldyBFcnJvcihgcGFyYW0gIiR7aX0iIGlzIGludmFsaWQ6IGV4cGVjdGVkICR7c30sIGdvdCAke2N9YCl9T2JqZWN0LmVudHJpZXMoZSkuZm9yRWFjaCgoW2ksc10pPT5uKGkscywhMSkpLE9iamVjdC5lbnRyaWVzKHIpLmZvckVhY2goKFtpLHNdKT0+bihpLHMsITApKX1mdW5jdGlvbiBpaCh0KXtjb25zdCBlPW5ldyBXZWFrTWFwO3JldHVybihyLC4uLm4pPT57Y29uc3QgaT1lLmdldChyKTtpZihpIT09dm9pZCAwKXJldHVybiBpO2NvbnN0IHM9dChyLC4uLm4pO3JldHVybiBlLnNldChyLHMpLHN9fS8qISBub2JsZS1jdXJ2ZXMgLSBNSVQgTGljZW5zZSAoYykgMjAyMiBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKi9jb25zdCBhdD1CaWdJbnQoMCksSmU9QmlnSW50KDEpLG1uPUJpZ0ludCgyKSxScD1CaWdJbnQoMyksQ3A9QmlnSW50KDQpLFVwPUJpZ0ludCg1KSx5ST1CaWdJbnQoNyksTnA9QmlnSW50KDgpLHdJPUJpZ0ludCg5KSxMcD1CaWdJbnQoMTYpO2Z1bmN0aW9uIGR0KHQsZSl7Y29uc3Qgcj10JWU7cmV0dXJuIHI+PWF0P3I6ZStyfWZ1bmN0aW9uIEJ0KHQsZSxyKXtsZXQgbj10O2Zvcig7ZS0tID5hdDspbio9bixuJT1yO3JldHVybiBufWZ1bmN0aW9uIHNoKHQsZSl7aWYodD09PWF0KXRocm93IG5ldyBFcnJvcigiaW52ZXJ0OiBleHBlY3RlZCBub24temVybyBudW1iZXIiKTtpZihlPD1hdCl0aHJvdyBuZXcgRXJyb3IoImludmVydDogZXhwZWN0ZWQgcG9zaXRpdmUgbW9kdWx1cywgZ290ICIrZSk7bGV0IHI9ZHQodCxlKSxuPWUsaT1hdCxzPUplO2Zvcig7ciE9PWF0Oyl7Y29uc3QgYT1uL3IsYz1uJXIsdT1pLXMqYTtuPXIscj1jLGk9cyxzPXV9aWYobiE9PUplKXRocm93IG5ldyBFcnJvcigiaW52ZXJ0OiBkb2VzIG5vdCBleGlzdCIpO3JldHVybiBkdChpLGUpfWZ1bmN0aW9uIHV1KHQsZSxyKXtpZighdC5lcWwodC5zcXIoZSkscikpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCIpfWZ1bmN0aW9uIEZwKHQsZSl7Y29uc3Qgcj0odC5PUkRFUitKZSkvQ3Asbj10LnBvdyhlLHIpO3JldHVybiB1dSh0LG4sZSksbn1mdW5jdGlvbiBtSSh0LGUpe2NvbnN0IHI9KHQuT1JERVItVXApL05wLG49dC5tdWwoZSxtbiksaT10LnBvdyhuLHIpLHM9dC5tdWwoZSxpKSxvPXQubXVsKHQubXVsKHMsbW4pLGkpLGE9dC5tdWwocyx0LnN1YihvLHQuT05FKSk7cmV0dXJuIHV1KHQsYSxlKSxhfWZ1bmN0aW9uIGJJKHQpe2NvbnN0IGU9UXIodCkscj1rcCh0KSxuPXIoZSxlLm5lZyhlLk9ORSkpLGk9cihlLG4pLHM9cihlLGUubmVnKG4pKSxvPSh0K3lJKS9McDtyZXR1cm4oYSxjKT0+e2xldCB1PWEucG93KGMsbyksbD1hLm11bCh1LG4pO2NvbnN0IGg9YS5tdWwodSxpKSxwPWEubXVsKHUscyksZz1hLmVxbChhLnNxcihsKSxjKSx3PWEuZXFsKGEuc3FyKGgpLGMpO3U9YS5jbW92KHUsbCxnKSxsPWEuY21vdihwLGgsdyk7Y29uc3QgYj1hLmVxbChhLnNxcihsKSxjKSx2PWEuY21vdih1LGwsYik7cmV0dXJuIHV1KGEsdixjKSx2fX1mdW5jdGlvbiBrcCh0KXtpZih0PFJwKXRocm93IG5ldyBFcnJvcigic3FydCBpcyBub3QgZGVmaW5lZCBmb3Igc21hbGwgZmllbGQiKTtsZXQgZT10LUplLHI9MDtmb3IoO2UlbW49PT1hdDspZS89bW4scisrO2xldCBuPW1uO2NvbnN0IGk9UXIodCk7Zm9yKDtvaChpLG4pPT09MTspaWYobisrPjFlMyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNxdWFyZSByb290OiBwcm9iYWJseSBub24tcHJpbWUgUCIpO2lmKHI9PT0xKXJldHVybiBGcDtsZXQgcz1pLnBvdyhuLGUpO2NvbnN0IG89KGUrSmUpL21uO3JldHVybiBmdW5jdGlvbihjLHUpe2lmKGMuaXMwKHUpKXJldHVybiB1O2lmKG9oKGMsdSkhPT0xKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc3F1YXJlIHJvb3QiKTtsZXQgbD1yLGg9Yy5tdWwoYy5PTkUscykscD1jLnBvdyh1LGUpLGc9Yy5wb3codSxvKTtmb3IoOyFjLmVxbChwLGMuT05FKTspe2lmKGMuaXMwKHApKXJldHVybiBjLlpFUk87bGV0IHc9MSxiPWMuc3FyKHApO2Zvcig7IWMuZXFsKGIsYy5PTkUpOylpZih3KyssYj1jLnNxcihiKSx3PT09bCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNxdWFyZSByb290Iik7Y29uc3Qgdj1KZTw8QmlnSW50KGwtdy0xKSxPPWMucG93KGgsdik7bD13LGg9Yy5zcXIoTykscD1jLm11bChwLGgpLGc9Yy5tdWwoZyxPKX1yZXR1cm4gZ319ZnVuY3Rpb24gRUkodCl7cmV0dXJuIHQlQ3A9PT1ScD9GcDp0JU5wPT09VXA/bUk6dCVMcD09PXdJP2JJKHQpOmtwKHQpfWNvbnN0IHZJPVsiY3JlYXRlIiwiaXNWYWxpZCIsImlzMCIsIm5lZyIsImludiIsInNxcnQiLCJzcXIiLCJlcWwiLCJhZGQiLCJzdWIiLCJtdWwiLCJwb3ciLCJkaXYiLCJhZGROIiwic3ViTiIsIm11bE4iLCJzcXJOIl07ZnVuY3Rpb24geEkodCl7Y29uc3QgZT17T1JERVI6ImJpZ2ludCIsTUFTSzoiYmlnaW50IixCWVRFUzoibnVtYmVyIixCSVRTOiJudW1iZXIifSxyPXZJLnJlZHVjZSgobixpKT0+KG5baV09ImZ1bmN0aW9uIixuKSxlKTtyZXR1cm4gQ28odCxyKSx0fWZ1bmN0aW9uIF9JKHQsZSxyKXtpZihyPGF0KXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBleHBvbmVudCwgbmVnYXRpdmVzIHVuc3VwcG9ydGVkIik7aWYocj09PWF0KXJldHVybiB0Lk9ORTtpZihyPT09SmUpcmV0dXJuIGU7bGV0IG49dC5PTkUsaT1lO2Zvcig7cj5hdDspciZKZSYmKG49dC5tdWwobixpKSksaT10LnNxcihpKSxyPj49SmU7cmV0dXJuIG59ZnVuY3Rpb24gTXAodCxlLHI9ITEpe2NvbnN0IG49bmV3IEFycmF5KGUubGVuZ3RoKS5maWxsKHI/dC5aRVJPOnZvaWQgMCksaT1lLnJlZHVjZSgobyxhLGMpPT50LmlzMChhKT9vOihuW2NdPW8sdC5tdWwobyxhKSksdC5PTkUpLHM9dC5pbnYoaSk7cmV0dXJuIGUucmVkdWNlUmlnaHQoKG8sYSxjKT0+dC5pczAoYSk/bzoobltjXT10Lm11bChvLG5bY10pLHQubXVsKG8sYSkpLHMpLG59ZnVuY3Rpb24gb2godCxlKXtjb25zdCByPSh0Lk9SREVSLUplKS9tbixuPXQucG93KGUsciksaT10LmVxbChuLHQuT05FKSxzPXQuZXFsKG4sdC5aRVJPKSxvPXQuZXFsKG4sdC5uZWcodC5PTkUpKTtpZighaSYmIXMmJiFvKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBMZWdlbmRyZSBzeW1ib2wgcmVzdWx0Iik7cmV0dXJuIGk/MTpzPzA6LTF9ZnVuY3Rpb24gcXAodCxlKXtlIT09dm9pZCAwJiZJcihlKTtjb25zdCByPWUhPT12b2lkIDA/ZTp0LnRvU3RyaW5nKDIpLmxlbmd0aCxuPU1hdGguY2VpbChyLzgpO3JldHVybntuQml0TGVuZ3RoOnIsbkJ5dGVMZW5ndGg6bn19ZnVuY3Rpb24gUXIodCxlLHI9ITEsbj17fSl7aWYodDw9YXQpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZpZWxkOiBleHBlY3RlZCBPUkRFUiA+IDAsIGdvdCAiK3QpO2xldCBpLHMsbz0hMSxhO2lmKHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9bnVsbCl7aWYobi5zcXJ0fHxyKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHNwZWNpZnkgb3B0cyBpbiB0d28gYXJndW1lbnRzIik7Y29uc3QgcD1lO3AuQklUUyYmKGk9cC5CSVRTKSxwLnNxcnQmJihzPXAuc3FydCksdHlwZW9mIHAuaXNMRT09ImJvb2xlYW4iJiYocj1wLmlzTEUpLHR5cGVvZiBwLm1vZEZyb21CeXRlcz09ImJvb2xlYW4iJiYobz1wLm1vZEZyb21CeXRlcyksYT1wLmFsbG93ZWRMZW5ndGhzfWVsc2UgdHlwZW9mIGU9PSJudW1iZXIiJiYoaT1lKSxuLnNxcnQmJihzPW4uc3FydCk7Y29uc3R7bkJpdExlbmd0aDpjLG5CeXRlTGVuZ3RoOnV9PXFwKHQsaSk7aWYodT4yMDQ4KXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmaWVsZDogZXhwZWN0ZWQgT1JERVIgb2YgPD0gMjA0OCBieXRlcyIpO2xldCBsO2NvbnN0IGg9T2JqZWN0LmZyZWV6ZSh7T1JERVI6dCxpc0xFOnIsQklUUzpjLEJZVEVTOnUsTUFTSzpvcyhjKSxaRVJPOmF0LE9ORTpKZSxhbGxvd2VkTGVuZ3RoczphLGNyZWF0ZTpwPT5kdChwLHQpLGlzVmFsaWQ6cD0+e2lmKHR5cGVvZiBwIT0iYmlnaW50Iil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZmllbGQgZWxlbWVudDogZXhwZWN0ZWQgYmlnaW50LCBnb3QgIit0eXBlb2YgcCk7cmV0dXJuIGF0PD1wJiZwPHR9LGlzMDpwPT5wPT09YXQsaXNWYWxpZE5vdDA6cD0+IWguaXMwKHApJiZoLmlzVmFsaWQocCksaXNPZGQ6cD0+KHAmSmUpPT09SmUsbmVnOnA9PmR0KC1wLHQpLGVxbDoocCxnKT0+cD09PWcsc3FyOnA9PmR0KHAqcCx0KSxhZGQ6KHAsZyk9PmR0KHArZyx0KSxzdWI6KHAsZyk9PmR0KHAtZyx0KSxtdWw6KHAsZyk9PmR0KHAqZyx0KSxwb3c6KHAsZyk9Pl9JKGgscCxnKSxkaXY6KHAsZyk9PmR0KHAqc2goZyx0KSx0KSxzcXJOOnA9PnAqcCxhZGROOihwLGcpPT5wK2csc3ViTjoocCxnKT0+cC1nLG11bE46KHAsZyk9PnAqZyxpbnY6cD0+c2gocCx0KSxzcXJ0OnN8fChwPT4obHx8KGw9RUkodCkpLGwoaCxwKSkpLHRvQnl0ZXM6cD0+cj9jdShwLHUpOmF1KHAsdSksZnJvbUJ5dGVzOihwLGc9ITApPT57aWYoYSl7aWYoIWEuaW5jbHVkZXMocC5sZW5ndGgpfHxwLmxlbmd0aD51KXRocm93IG5ldyBFcnJvcigiRmllbGQuZnJvbUJ5dGVzOiBleHBlY3RlZCAiK2ErIiBieXRlcywgZ290ICIrcC5sZW5ndGgpO2NvbnN0IGI9bmV3IFVpbnQ4QXJyYXkodSk7Yi5zZXQocCxyPzA6Yi5sZW5ndGgtcC5sZW5ndGgpLHA9Yn1pZihwLmxlbmd0aCE9PXUpdGhyb3cgbmV3IEVycm9yKCJGaWVsZC5mcm9tQnl0ZXM6IGV4cGVjdGVkICIrdSsiIGJ5dGVzLCBnb3QgIitwLmxlbmd0aCk7bGV0IHc9cj9pbyhwKTpSbyhwKTtpZihvJiYodz1kdCh3LHQpKSwhZyYmIWguaXNWYWxpZCh3KSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZmllbGQgZWxlbWVudDogb3V0c2lkZSBvZiByYW5nZSAwLi5PUkRFUiIpO3JldHVybiB3fSxpbnZlcnRCYXRjaDpwPT5NcChoLHApLGNtb3Y6KHAsZyx3KT0+dz9nOnB9KTtyZXR1cm4gT2JqZWN0LmZyZWV6ZShoKX1mdW5jdGlvbiBqcCh0KXtpZih0eXBlb2YgdCE9ImJpZ2ludCIpdGhyb3cgbmV3IEVycm9yKCJmaWVsZCBvcmRlciBtdXN0IGJlIGJpZ2ludCIpO2NvbnN0IGU9dC50b1N0cmluZygyKS5sZW5ndGg7cmV0dXJuIE1hdGguY2VpbChlLzgpfWZ1bmN0aW9uIHpwKHQpe2NvbnN0IGU9anAodCk7cmV0dXJuIGUrTWF0aC5jZWlsKGUvMil9ZnVuY3Rpb24gSUkodCxlLHI9ITEpe2NvbnN0IG49dC5sZW5ndGgsaT1qcChlKSxzPXpwKGUpO2lmKG48MTZ8fG48c3x8bj4xMDI0KXRocm93IG5ldyBFcnJvcigiZXhwZWN0ZWQgIitzKyItMTAyNCBieXRlcyBvZiBpbnB1dCwgZ290ICIrbik7Y29uc3Qgbz1yP2lvKHQpOlJvKHQpLGE9ZHQobyxlLUplKStKZTtyZXR1cm4gcj9jdShhLGkpOmF1KGEsaSl9LyohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqL2NvbnN0IHVpPUJpZ0ludCgwKSxibj1CaWdJbnQoMSk7ZnVuY3Rpb24gc28odCxlKXtjb25zdCByPWUubmVnYXRlKCk7cmV0dXJuIHQ/cjplfWZ1bmN0aW9uIF9hKHQsZSl7Y29uc3Qgcj1NcCh0LkZwLGUubWFwKG49Pm4uWikpO3JldHVybiBlLm1hcCgobixpKT0+dC5mcm9tQWZmaW5lKG4udG9BZmZpbmUocltpXSkpKX1mdW5jdGlvbiBIcCh0LGUpe2lmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcih0KXx8dDw9MHx8dD5lKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCB3aW5kb3cgc2l6ZSwgZXhwZWN0ZWQgWzEuLiIrZSsiXSwgZ290IFc9Iit0KX1mdW5jdGlvbiBJYSh0LGUpe0hwKHQsZSk7Y29uc3Qgcj1NYXRoLmNlaWwoZS90KSsxLG49MioqKHQtMSksaT0yKip0LHM9b3ModCksbz1CaWdJbnQodCk7cmV0dXJue3dpbmRvd3M6cix3aW5kb3dTaXplOm4sbWFzazpzLG1heE51bWJlcjppLHNoaWZ0Qnk6b319ZnVuY3Rpb24gYWgodCxlLHIpe2NvbnN0e3dpbmRvd1NpemU6bixtYXNrOmksbWF4TnVtYmVyOnMsc2hpZnRCeTpvfT1yO2xldCBhPU51bWJlcih0JmkpLGM9dD4+bzthPm4mJihhLT1zLGMrPWJuKTtjb25zdCB1PWUqbixsPXUrTWF0aC5hYnMoYSktMSxoPWE9PT0wLHA9YTwwLGc9ZSUyIT09MDtyZXR1cm57bmV4dE46YyxvZmZzZXQ6bCxpc1plcm86aCxpc05lZzpwLGlzTmVnRjpnLG9mZnNldEY6dX19ZnVuY3Rpb24gU0kodCxlKXtpZighQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgRXJyb3IoImFycmF5IGV4cGVjdGVkIik7dC5mb3JFYWNoKChyLG4pPT57aWYoIShyIGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50IGF0IGluZGV4ICIrbil9KX1mdW5jdGlvbiBBSSh0LGUpe2lmKCFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBFcnJvcigiYXJyYXkgb2Ygc2NhbGFycyBleHBlY3RlZCIpO3QuZm9yRWFjaCgocixuKT0+e2lmKCFlLmlzVmFsaWQocikpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNjYWxhciBhdCBpbmRleCAiK24pfSl9Y29uc3QgU2E9bmV3IFdlYWtNYXAsS3A9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gQWEodCl7cmV0dXJuIEtwLmdldCh0KXx8MX1mdW5jdGlvbiBjaCh0KXtpZih0IT09dWkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHdOQUYiKX1jbGFzcyBESXtjb25zdHJ1Y3RvcihlLHIpe3RoaXMuQkFTRT1lLkJBU0UsdGhpcy5aRVJPPWUuWkVSTyx0aGlzLkZuPWUuRm4sdGhpcy5iaXRzPXJ9X3Vuc2FmZUxhZGRlcihlLHIsbj10aGlzLlpFUk8pe2xldCBpPWU7Zm9yKDtyPnVpOylyJmJuJiYobj1uLmFkZChpKSksaT1pLmRvdWJsZSgpLHI+Pj1ibjtyZXR1cm4gbn1wcmVjb21wdXRlV2luZG93KGUscil7Y29uc3R7d2luZG93czpuLHdpbmRvd1NpemU6aX09SWEocix0aGlzLmJpdHMpLHM9W107bGV0IG89ZSxhPW87Zm9yKGxldCBjPTA7YzxuO2MrKyl7YT1vLHMucHVzaChhKTtmb3IobGV0IHU9MTt1PGk7dSsrKWE9YS5hZGQobykscy5wdXNoKGEpO289YS5kb3VibGUoKX1yZXR1cm4gc313TkFGKGUscixuKXtpZighdGhpcy5Gbi5pc1ZhbGlkKG4pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzY2FsYXIiKTtsZXQgaT10aGlzLlpFUk8scz10aGlzLkJBU0U7Y29uc3Qgbz1JYShlLHRoaXMuYml0cyk7Zm9yKGxldCBhPTA7YTxvLndpbmRvd3M7YSsrKXtjb25zdHtuZXh0TjpjLG9mZnNldDp1LGlzWmVybzpsLGlzTmVnOmgsaXNOZWdGOnAsb2Zmc2V0RjpnfT1haChuLGEsbyk7bj1jLGw/cz1zLmFkZChzbyhwLHJbZ10pKTppPWkuYWRkKHNvKGgsclt1XSkpfXJldHVybiBjaChuKSx7cDppLGY6c319d05BRlVuc2FmZShlLHIsbixpPXRoaXMuWkVSTyl7Y29uc3Qgcz1JYShlLHRoaXMuYml0cyk7Zm9yKGxldCBvPTA7bzxzLndpbmRvd3MmJm4hPT11aTtvKyspe2NvbnN0e25leHROOmEsb2Zmc2V0OmMsaXNaZXJvOnUsaXNOZWc6bH09YWgobixvLHMpO2lmKG49YSwhdSl7Y29uc3QgaD1yW2NdO2k9aS5hZGQobD9oLm5lZ2F0ZSgpOmgpfX1yZXR1cm4gY2gobiksaX1nZXRQcmVjb21wdXRlcyhlLHIsbil7bGV0IGk9U2EuZ2V0KHIpO3JldHVybiBpfHwoaT10aGlzLnByZWNvbXB1dGVXaW5kb3cocixlKSxlIT09MSYmKHR5cGVvZiBuPT0iZnVuY3Rpb24iJiYoaT1uKGkpKSxTYS5zZXQocixpKSkpLGl9Y2FjaGVkKGUscixuKXtjb25zdCBpPUFhKGUpO3JldHVybiB0aGlzLndOQUYoaSx0aGlzLmdldFByZWNvbXB1dGVzKGksZSxuKSxyKX11bnNhZmUoZSxyLG4saSl7Y29uc3Qgcz1BYShlKTtyZXR1cm4gcz09PTE/dGhpcy5fdW5zYWZlTGFkZGVyKGUscixpKTp0aGlzLndOQUZVbnNhZmUocyx0aGlzLmdldFByZWNvbXB1dGVzKHMsZSxuKSxyLGkpfWNyZWF0ZUNhY2hlKGUscil7SHAocix0aGlzLmJpdHMpLEtwLnNldChlLHIpLFNhLmRlbGV0ZShlKX1oYXNDYWNoZShlKXtyZXR1cm4gQWEoZSkhPT0xfX1mdW5jdGlvbiBPSSh0LGUscixuKXtsZXQgaT1lLHM9dC5aRVJPLG89dC5aRVJPO2Zvcig7cj51aXx8bj51aTspciZibiYmKHM9cy5hZGQoaSkpLG4mYm4mJihvPW8uYWRkKGkpKSxpPWkuZG91YmxlKCkscj4+PWJuLG4+Pj1ibjtyZXR1cm57cDE6cyxwMjpvfX1mdW5jdGlvbiAkSSh0LGUscixuKXtTSShyLHQpLEFJKG4sZSk7Y29uc3QgaT1yLmxlbmd0aCxzPW4ubGVuZ3RoO2lmKGkhPT1zKXRocm93IG5ldyBFcnJvcigiYXJyYXlzIG9mIHBvaW50cyBhbmQgc2NhbGFycyBtdXN0IGhhdmUgZXF1YWwgbGVuZ3RoIik7Y29uc3Qgbz10LlpFUk8sYT1UcChCaWdJbnQoaSkpO2xldCBjPTE7YT4xMj9jPWEtMzphPjQ/Yz1hLTI6YT4wJiYoYz0yKTtjb25zdCB1PW9zKGMpLGw9bmV3IEFycmF5KE51bWJlcih1KSsxKS5maWxsKG8pLGg9TWF0aC5mbG9vcigoZS5CSVRTLTEpL2MpKmM7bGV0IHA9bztmb3IobGV0IGc9aDtnPj0wO2ctPWMpe2wuZmlsbChvKTtmb3IobGV0IGI9MDtiPHM7YisrKXtjb25zdCB2PW5bYl0sTz1OdW1iZXIodj4+QmlnSW50KGcpJnUpO2xbT109bFtPXS5hZGQocltiXSl9bGV0IHc9bztmb3IobGV0IGI9bC5sZW5ndGgtMSx2PW87Yj4wO2ItLSl2PXYuYWRkKGxbYl0pLHc9dy5hZGQodik7aWYocD1wLmFkZCh3KSxnIT09MClmb3IobGV0IGI9MDtiPGM7YisrKXA9cC5kb3VibGUoKX1yZXR1cm4gcH1mdW5jdGlvbiB1aCh0LGUscil7aWYoZSl7aWYoZS5PUkRFUiE9PXQpdGhyb3cgbmV3IEVycm9yKCJGaWVsZC5PUkRFUiBtdXN0IG1hdGNoIG9yZGVyOiBGcCA9PSBwLCBGbiA9PSBuIik7cmV0dXJuIHhJKGUpLGV9ZWxzZSByZXR1cm4gUXIodCx7aXNMRTpyfSl9ZnVuY3Rpb24gQkkodCxlLHI9e30sbil7aWYobj09PXZvaWQgMCYmKG49dD09PSJlZHdhcmRzIiksIWV8fHR5cGVvZiBlIT0ib2JqZWN0Iil0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkIHZhbGlkICR7dH0gQ1VSVkUgb2JqZWN0YCk7Zm9yKGNvbnN0IGMgb2ZbInAiLCJuIiwiaCJdKXtjb25zdCB1PWVbY107aWYoISh0eXBlb2YgdT09ImJpZ2ludCImJnU+dWkpKXRocm93IG5ldyBFcnJvcihgQ1VSVkUuJHtjfSBtdXN0IGJlIHBvc2l0aXZlIGJpZ2ludGApfWNvbnN0IGk9dWgoZS5wLHIuRnAsbikscz11aChlLm4sci5GbixuKSxhPVsiR3giLCJHeSIsImEiLCJiIl07Zm9yKGNvbnN0IGMgb2YgYSlpZighaS5pc1ZhbGlkKGVbY10pKXRocm93IG5ldyBFcnJvcihgQ1VSVkUuJHtjfSBtdXN0IGJlIHZhbGlkIGZpZWxkIGVsZW1lbnQgb2YgQ1VSVkUuRnBgKTtyZXR1cm4gZT1PYmplY3QuZnJlZXplKE9iamVjdC5hc3NpZ24oe30sZSkpLHtDVVJWRTplLEZwOmksRm46c319LyohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqL0JpZ0ludCgwKTtCaWdJbnQoMSk7QmlnSW50KDIpO0JpZ0ludCg4KTsvKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICovY29uc3QgSWk9QmlnSW50KDApLEhuPUJpZ0ludCgxKSxTcz1CaWdJbnQoMik7ZnVuY3Rpb24gUEkodCl7cmV0dXJuIENvKHQse2FkanVzdFNjYWxhckJ5dGVzOiJmdW5jdGlvbiIscG93UG1pbnVzMjoiZnVuY3Rpb24ifSksT2JqZWN0LmZyZWV6ZSh7Li4udH0pfWZ1bmN0aW9uIFRJKHQpe2NvbnN0IGU9UEkodCkse1A6cix0eXBlOm4sYWRqdXN0U2NhbGFyQnl0ZXM6aSxwb3dQbWludXMyOnMscmFuZG9tQnl0ZXM6b309ZSxhPW49PT0ieDI1NTE5IjtpZighYSYmbiE9PSJ4NDQ4Iil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgdHlwZSIpO2NvbnN0IGM9b3x8Q24sdT1hPzI1NTo0NDgsbD1hPzMyOjU2LGg9QmlnSW50KGE/OTo1KSxwPUJpZ0ludChhPzEyMTY2NTozOTA4MSksZz1hP1NzKipCaWdJbnQoMjU0KTpTcyoqQmlnSW50KDQ0Nyksdz1hP0JpZ0ludCg4KSpTcyoqQmlnSW50KDI1MSktSG46QmlnSW50KDQpKlNzKipCaWdJbnQoNDQ1KS1IbixiPWcrdytIbix2PUQ9PmR0KEQsciksTz1GKGgpO2Z1bmN0aW9uIEYoRCl7cmV0dXJuIGN1KHYoRCksbCl9ZnVuY3Rpb24gXyhEKXtjb25zdCBSPUdlKCJ1IGNvb3JkaW5hdGUiLEQsbCk7cmV0dXJuIGEmJihSWzMxXSY9MTI3KSx2KGlvKFIpKX1mdW5jdGlvbiBQKEQpe3JldHVybiBpbyhpKEdlKCJzY2FsYXIiLEQsbCkpKX1mdW5jdGlvbiBDKEQsUil7Y29uc3QgeT1NKF8oUiksUChEKSk7aWYoeT09PUlpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwcml2YXRlIG9yIHB1YmxpYyBrZXkgcmVjZWl2ZWQiKTtyZXR1cm4gRih5KX1mdW5jdGlvbiBqKEQpe3JldHVybiBDKEQsTyl9ZnVuY3Rpb24gcShELFIseSl7Y29uc3QgbT12KEQqKFIteSkpO3JldHVybiBSPXYoUi1tKSx5PXYoeSttKSx7eF8yOlIseF8zOnl9fWZ1bmN0aW9uIE0oRCxSKXtkYygidSIsRCxJaSxyKSxkYygic2NhbGFyIixSLGcsYik7Y29uc3QgeT1SLG09RDtsZXQgST1IbixBPUlpLFM9RCwkPUhuLGs9SWk7Zm9yKGxldCBaPUJpZ0ludCh1LTEpO1o+PUlpO1otLSl7Y29uc3QgVj15Pj5aJkhuO2tePVYse3hfMjpJLHhfMzpTfT1xKGssSSxTKSx7eF8yOkEseF8zOiR9PXEoayxBLCQpLGs9Vjtjb25zdCBXPUkrQSxKPXYoVypXKSxlZT1JLUEscmU9dihlZSplZSksUT1KLXJlLGllPVMrJCxmZT1TLSQsSWU9dihmZSpXKSxEZT12KGllKmVlKSx1dD1JZStEZSxldD1JZS1EZTtTPXYodXQqdXQpLCQ9dihtKnYoZXQqZXQpKSxJPXYoSipyZSksQT12KFEqKEordihwKlEpKSl9KHt4XzI6SSx4XzM6U309cShrLEksUykpLHt4XzI6QSx4XzM6JH09cShrLEEsJCk7Y29uc3QgSz1zKEEpO3JldHVybiB2KEkqSyl9Y29uc3QgVD17c2VjcmV0S2V5OmwscHVibGljS2V5Omwsc2VlZDpsfSx6PShEPWMobCkpPT4oTHQoRCxULnNlZWQpLEQpO2Z1bmN0aW9uIFUoRCl7Y29uc3QgUj16KEQpO3JldHVybntzZWNyZXRLZXk6UixwdWJsaWNLZXk6aihSKX19cmV0dXJue2tleWdlbjpVLGdldFNoYXJlZFNlY3JldDooRCxSKT0+QyhELFIpLGdldFB1YmxpY0tleTpEPT5qKEQpLHNjYWxhck11bHQ6QyxzY2FsYXJNdWx0QmFzZTpqLHV0aWxzOntyYW5kb21TZWNyZXRLZXk6eixyYW5kb21Qcml2YXRlS2V5Onp9LEd1Qnl0ZXM6Ty5zbGljZSgpLGxlbmd0aHM6VH19LyohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqL2NvbnN0IFJJPUJpZ0ludCgxKSxsaD1CaWdJbnQoMiksQ0k9QmlnSW50KDMpLFVJPUJpZ0ludCg1KSxOST1CaWdJbnQoOCksVnA9QmlnSW50KCIweDdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWQiKSxMST17cDpWcCxuOkJpZ0ludCgiMHgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0ZGVmOWRlYTJmNzljZDY1ODEyNjMxYTVjZjVkM2VkIiksaDpOSSxhOkJpZ0ludCgiMHg3ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVjIiksZDpCaWdJbnQoIjB4NTIwMzZjZWUyYjZmZmU3MzhjYzc0MDc5Nzc3OWU4OTgwMDcwMGE0ZDQxNDFkOGFiNzVlYjRkY2ExMzU5NzhhMyIpLEd4OkJpZ0ludCgiMHgyMTY5MzZkM2NkNmU1M2ZlYzBhNGUyMzFmZGQ2ZGM1YzY5MmNjNzYwOTUyNWE3YjJjOTU2MmQ2MDhmMjVkNTFhIiksR3k6QmlnSW50KCIweDY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NTgiKX07ZnVuY3Rpb24gRkkodCl7Y29uc3QgZT1CaWdJbnQoMTApLHI9QmlnSW50KDIwKSxuPUJpZ0ludCg0MCksaT1CaWdJbnQoODApLHM9VnAsYT10KnQlcyp0JXMsYz1CdChhLGxoLHMpKmElcyx1PUJ0KGMsUkkscykqdCVzLGw9QnQodSxVSSxzKSp1JXMsaD1CdChsLGUscykqbCVzLHA9QnQoaCxyLHMpKmglcyxnPUJ0KHAsbixzKSpwJXMsdz1CdChnLGkscykqZyVzLGI9QnQodyxpLHMpKmclcyx2PUJ0KGIsZSxzKSpsJXM7cmV0dXJue3Bvd19wXzVfODpCdCh2LGxoLHMpKnQlcyxiMjphfX1mdW5jdGlvbiBrSSh0KXtyZXR1cm4gdFswXSY9MjQ4LHRbMzFdJj0xMjcsdFszMV18PTY0LHR9Y29uc3QgTUk9UXIoTEkucCx7aXNMRTohMH0pLHBjPSgoKT0+e2NvbnN0IHQ9TUkuT1JERVI7cmV0dXJuIFRJKHtQOnQsdHlwZToieDI1NTE5Iixwb3dQbWludXMyOmU9Pntjb25zdHtwb3dfcF81Xzg6cixiMjpufT1GSShlKTtyZXR1cm4gZHQoQnQocixDSSx0KSpuLHQpfSxhZGp1c3RTY2FsYXJCeXRlczprSX0pfSkoKTsvKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICovY29uc3QgaGg9KHQsZSk9Pih0Kyh0Pj0wP2U6LWUpL1dwKS9lO2Z1bmN0aW9uIHFJKHQsZSxyKXtjb25zdFtbbixpXSxbcyxvXV09ZSxhPWhoKG8qdCxyKSxjPWhoKC1pKnQscik7bGV0IHU9dC1hKm4tYypzLGw9LWEqaS1jKm87Y29uc3QgaD11PGJyLHA9bDxicjtoJiYodT0tdSkscCYmKGw9LWwpO2NvbnN0IGc9b3MoTWF0aC5jZWlsKFRwKHIpLzIpKStyaTtpZih1PGJyfHx1Pj1nfHxsPGJyfHxsPj1nKXRocm93IG5ldyBFcnJvcigic3BsaXRTY2FsYXIgKGVuZG9tb3JwaGlzbSk6IGZhaWxlZCwgaz0iK3QpO3JldHVybntrMW5lZzpoLGsxOnUsazJuZWc6cCxrMjpsfX1mdW5jdGlvbiBnYyh0KXtpZighWyJjb21wYWN0IiwicmVjb3ZlcmVkIiwiZGVyIl0uaW5jbHVkZXModCkpdGhyb3cgbmV3IEVycm9yKCdTaWduYXR1cmUgZm9ybWF0IG11c3QgYmUgImNvbXBhY3QiLCAicmVjb3ZlcmVkIiwgb3IgImRlciInKTtyZXR1cm4gdH1mdW5jdGlvbiBEYSh0LGUpe2NvbnN0IHI9e307Zm9yKGxldCBuIG9mIE9iamVjdC5rZXlzKGUpKXJbbl09dFtuXT09PXZvaWQgMD9lW25dOnRbbl07cmV0dXJuIG5vKHIubG93UywibG93UyIpLG5vKHIucHJlaGFzaCwicHJlaGFzaCIpLHIuZm9ybWF0IT09dm9pZCAwJiZnYyhyLmZvcm1hdCkscn1jbGFzcyBqSSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGU9IiIpe3N1cGVyKGUpfX1jb25zdCB5cj17RXJyOmpJLF90bHY6e2VuY29kZToodCxlKT0+e2NvbnN0e0VycjpyfT15cjtpZih0PDB8fHQ+MjU2KXRocm93IG5ldyByKCJ0bHYuZW5jb2RlOiB3cm9uZyB0YWciKTtpZihlLmxlbmd0aCYxKXRocm93IG5ldyByKCJ0bHYuZW5jb2RlOiB1bnBhZGRlZCBkYXRhIik7Y29uc3Qgbj1lLmxlbmd0aC8yLGk9SXMobik7aWYoaS5sZW5ndGgvMiYxMjgpdGhyb3cgbmV3IHIoInRsdi5lbmNvZGU6IGxvbmcgZm9ybSBsZW5ndGggdG9vIGJpZyIpO2NvbnN0IHM9bj4xMjc/SXMoaS5sZW5ndGgvMnwxMjgpOiIiO3JldHVybiBJcyh0KStzK2krZX0sZGVjb2RlKHQsZSl7Y29uc3R7RXJyOnJ9PXlyO2xldCBuPTA7aWYodDwwfHx0PjI1Nil0aHJvdyBuZXcgcigidGx2LmVuY29kZTogd3JvbmcgdGFnIik7aWYoZS5sZW5ndGg8Mnx8ZVtuKytdIT09dCl0aHJvdyBuZXcgcigidGx2LmRlY29kZTogd3JvbmcgdGx2Iik7Y29uc3QgaT1lW24rK10scz0hIShpJjEyOCk7bGV0IG89MDtpZighcylvPWk7ZWxzZXtjb25zdCBjPWkmMTI3O2lmKCFjKXRocm93IG5ldyByKCJ0bHYuZGVjb2RlKGxvbmcpOiBpbmRlZmluaXRlIGxlbmd0aCBub3Qgc3VwcG9ydGVkIik7aWYoYz40KXRocm93IG5ldyByKCJ0bHYuZGVjb2RlKGxvbmcpOiBieXRlIGxlbmd0aCBpcyB0b28gYmlnIik7Y29uc3QgdT1lLnN1YmFycmF5KG4sbitjKTtpZih1Lmxlbmd0aCE9PWMpdGhyb3cgbmV3IHIoInRsdi5kZWNvZGU6IGxlbmd0aCBieXRlcyBub3QgY29tcGxldGUiKTtpZih1WzBdPT09MCl0aHJvdyBuZXcgcigidGx2LmRlY29kZShsb25nKTogemVybyBsZWZ0bW9zdCBieXRlIik7Zm9yKGNvbnN0IGwgb2YgdSlvPW88PDh8bDtpZihuKz1jLG88MTI4KXRocm93IG5ldyByKCJ0bHYuZGVjb2RlKGxvbmcpOiBub3QgbWluaW1hbCBlbmNvZGluZyIpfWNvbnN0IGE9ZS5zdWJhcnJheShuLG4rbyk7aWYoYS5sZW5ndGghPT1vKXRocm93IG5ldyByKCJ0bHYuZGVjb2RlOiB3cm9uZyB2YWx1ZSBsZW5ndGgiKTtyZXR1cm57djphLGw6ZS5zdWJhcnJheShuK28pfX19LF9pbnQ6e2VuY29kZSh0KXtjb25zdHtFcnI6ZX09eXI7aWYodDxicil0aHJvdyBuZXcgZSgiaW50ZWdlcjogbmVnYXRpdmUgaW50ZWdlcnMgYXJlIG5vdCBhbGxvd2VkIik7bGV0IHI9SXModCk7aWYoTnVtYmVyLnBhcnNlSW50KHJbMF0sMTYpJjgmJihyPSIwMCIrciksci5sZW5ndGgmMSl0aHJvdyBuZXcgZSgidW5leHBlY3RlZCBERVIgcGFyc2luZyBhc3NlcnRpb246IHVucGFkZGVkIGhleCIpO3JldHVybiByfSxkZWNvZGUodCl7Y29uc3R7RXJyOmV9PXlyO2lmKHRbMF0mMTI4KXRocm93IG5ldyBlKCJpbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyOiBuZWdhdGl2ZSIpO2lmKHRbMF09PT0wJiYhKHRbMV0mMTI4KSl0aHJvdyBuZXcgZSgiaW52YWxpZCBzaWduYXR1cmUgaW50ZWdlcjogdW5uZWNlc3NhcnkgbGVhZGluZyB6ZXJvIik7cmV0dXJuIFJvKHQpfX0sdG9TaWcodCl7Y29uc3R7RXJyOmUsX2ludDpyLF90bHY6bn09eXIsaT1HZSgic2lnbmF0dXJlIix0KSx7djpzLGw6b309bi5kZWNvZGUoNDgsaSk7aWYoby5sZW5ndGgpdGhyb3cgbmV3IGUoImludmFsaWQgc2lnbmF0dXJlOiBsZWZ0IGJ5dGVzIGFmdGVyIHBhcnNpbmciKTtjb25zdHt2OmEsbDpjfT1uLmRlY29kZSgyLHMpLHt2OnUsbH09bi5kZWNvZGUoMixjKTtpZihsLmxlbmd0aCl0aHJvdyBuZXcgZSgiaW52YWxpZCBzaWduYXR1cmU6IGxlZnQgYnl0ZXMgYWZ0ZXIgcGFyc2luZyIpO3JldHVybntyOnIuZGVjb2RlKGEpLHM6ci5kZWNvZGUodSl9fSxoZXhGcm9tU2lnKHQpe2NvbnN0e190bHY6ZSxfaW50OnJ9PXlyLG49ZS5lbmNvZGUoMixyLmVuY29kZSh0LnIpKSxpPWUuZW5jb2RlKDIsci5lbmNvZGUodC5zKSkscz1uK2k7cmV0dXJuIGUuZW5jb2RlKDQ4LHMpfX0sYnI9QmlnSW50KDApLHJpPUJpZ0ludCgxKSxXcD1CaWdJbnQoMiksQXM9QmlnSW50KDMpLHpJPUJpZ0ludCg0KTtmdW5jdGlvbiBXbih0LGUpe2NvbnN0e0JZVEVTOnJ9PXQ7bGV0IG47aWYodHlwZW9mIGU9PSJiaWdpbnQiKW49ZTtlbHNle2xldCBpPUdlKCJwcml2YXRlIGtleSIsZSk7dHJ5e249dC5mcm9tQnl0ZXMoaSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHByaXZhdGUga2V5OiBleHBlY3RlZCB1aThhIG9mIHNpemUgJHtyfSwgZ290ICR7dHlwZW9mIGV9YCl9fWlmKCF0LmlzVmFsaWROb3QwKG4pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwcml2YXRlIGtleTogb3V0IG9mIHJhbmdlIFsxLi5OLTFdIik7cmV0dXJuIG59ZnVuY3Rpb24gSEkodCxlPXt9KXtjb25zdCByPUJJKCJ3ZWllcnN0cmFzcyIsdCxlKSx7RnA6bixGbjppfT1yO2xldCBzPXIuQ1VSVkU7Y29uc3R7aDpvLG46YX09cztDbyhlLHt9LHthbGxvd0luZmluaXR5UG9pbnQ6ImJvb2xlYW4iLGNsZWFyQ29mYWN0b3I6ImZ1bmN0aW9uIixpc1RvcnNpb25GcmVlOiJmdW5jdGlvbiIsZnJvbUJ5dGVzOiJmdW5jdGlvbiIsdG9CeXRlczoiZnVuY3Rpb24iLGVuZG86Im9iamVjdCIsd3JhcFByaXZhdGVLZXk6ImJvb2xlYW4ifSk7Y29uc3R7ZW5kbzpjfT1lO2lmKGMmJighbi5pczAocy5hKXx8dHlwZW9mIGMuYmV0YSE9ImJpZ2ludCJ8fCFBcnJheS5pc0FycmF5KGMuYmFzaXNlcykpKXRocm93IG5ldyBFcnJvcignaW52YWxpZCBlbmRvOiBleHBlY3RlZCAiYmV0YSI6IGJpZ2ludCBhbmQgImJhc2lzZXMiOiBhcnJheScpO2NvbnN0IHU9WXAobixpKTtmdW5jdGlvbiBsKCl7aWYoIW4uaXNPZGQpdGhyb3cgbmV3IEVycm9yKCJjb21wcmVzc2lvbiBpcyBub3Qgc3VwcG9ydGVkOiBGaWVsZCBkb2VzIG5vdCBoYXZlIC5pc09kZCgpIil9ZnVuY3Rpb24gaChOLEQsUil7Y29uc3R7eDp5LHk6bX09RC50b0FmZmluZSgpLEk9bi50b0J5dGVzKHkpO2lmKG5vKFIsImlzQ29tcHJlc3NlZCIpLFIpe2woKTtjb25zdCBBPSFuLmlzT2RkKG0pO3JldHVybiBLcihHcChBKSxJKX1lbHNlIHJldHVybiBLcihVaW50OEFycmF5Lm9mKDQpLEksbi50b0J5dGVzKG0pKX1mdW5jdGlvbiBwKE4pe3duKE4sdm9pZCAwLCJQb2ludCIpO2NvbnN0e3B1YmxpY0tleTpELHB1YmxpY0tleVVuY29tcHJlc3NlZDpSfT11LHk9Ti5sZW5ndGgsbT1OWzBdLEk9Ti5zdWJhcnJheSgxKTtpZih5PT09RCYmKG09PT0yfHxtPT09Mykpe2NvbnN0IEE9bi5mcm9tQnl0ZXMoSSk7aWYoIW4uaXNWYWxpZChBKSl0aHJvdyBuZXcgRXJyb3IoImJhZCBwb2ludDogaXMgbm90IG9uIGN1cnZlLCB3cm9uZyB4Iik7Y29uc3QgUz1iKEEpO2xldCAkO3RyeXskPW4uc3FydChTKX1jYXRjaChaKXtjb25zdCBWPVogaW5zdGFuY2VvZiBFcnJvcj8iOiAiK1oubWVzc2FnZToiIjt0aHJvdyBuZXcgRXJyb3IoImJhZCBwb2ludDogaXMgbm90IG9uIGN1cnZlLCBzcXJ0IGVycm9yIitWKX1sKCk7Y29uc3Qgaz1uLmlzT2RkKCQpO3JldHVybihtJjEpPT09MSE9PWsmJigkPW4ubmVnKCQpKSx7eDpBLHk6JH19ZWxzZSBpZih5PT09UiYmbT09PTQpe2NvbnN0IEE9bi5CWVRFUyxTPW4uZnJvbUJ5dGVzKEkuc3ViYXJyYXkoMCxBKSksJD1uLmZyb21CeXRlcyhJLnN1YmFycmF5KEEsQSoyKSk7aWYoIXYoUywkKSl0aHJvdyBuZXcgRXJyb3IoImJhZCBwb2ludDogaXMgbm90IG9uIGN1cnZlIik7cmV0dXJue3g6Uyx5OiR9fWVsc2UgdGhyb3cgbmV3IEVycm9yKGBiYWQgcG9pbnQ6IGdvdCBsZW5ndGggJHt5fSwgZXhwZWN0ZWQgY29tcHJlc3NlZD0ke0R9IG9yIHVuY29tcHJlc3NlZD0ke1J9YCl9Y29uc3QgZz1lLnRvQnl0ZXN8fGgsdz1lLmZyb21CeXRlc3x8cDtmdW5jdGlvbiBiKE4pe2NvbnN0IEQ9bi5zcXIoTiksUj1uLm11bChELE4pO3JldHVybiBuLmFkZChuLmFkZChSLG4ubXVsKE4scy5hKSkscy5iKX1mdW5jdGlvbiB2KE4sRCl7Y29uc3QgUj1uLnNxcihEKSx5PWIoTik7cmV0dXJuIG4uZXFsKFIseSl9aWYoIXYocy5HeCxzLkd5KSl0aHJvdyBuZXcgRXJyb3IoImJhZCBjdXJ2ZSBwYXJhbXM6IGdlbmVyYXRvciBwb2ludCIpO2NvbnN0IE89bi5tdWwobi5wb3cocy5hLEFzKSx6SSksRj1uLm11bChuLnNxcihzLmIpLEJpZ0ludCgyNykpO2lmKG4uaXMwKG4uYWRkKE8sRikpKXRocm93IG5ldyBFcnJvcigiYmFkIGN1cnZlIHBhcmFtczogYSBvciBiIik7ZnVuY3Rpb24gXyhOLEQsUj0hMSl7aWYoIW4uaXNWYWxpZChEKXx8UiYmbi5pczAoRCkpdGhyb3cgbmV3IEVycm9yKGBiYWQgcG9pbnQgY29vcmRpbmF0ZSAke059YCk7cmV0dXJuIER9ZnVuY3Rpb24gUChOKXtpZighKE4gaW5zdGFuY2VvZiBUKSl0aHJvdyBuZXcgRXJyb3IoIlByb2plY3RpdmVQb2ludCBleHBlY3RlZCIpfWZ1bmN0aW9uIEMoTil7aWYoIWN8fCFjLmJhc2lzZXMpdGhyb3cgbmV3IEVycm9yKCJubyBlbmRvIik7cmV0dXJuIHFJKE4sYy5iYXNpc2VzLGkuT1JERVIpfWNvbnN0IGo9aWgoKE4sRCk9Pntjb25zdHtYOlIsWTp5LFo6bX09TjtpZihuLmVxbChtLG4uT05FKSlyZXR1cm57eDpSLHl9O2NvbnN0IEk9Ti5pczAoKTtEPT1udWxsJiYoRD1JP24uT05FOm4uaW52KG0pKTtjb25zdCBBPW4ubXVsKFIsRCksUz1uLm11bCh5LEQpLCQ9bi5tdWwobSxEKTtpZihJKXJldHVybnt4Om4uWkVSTyx5Om4uWkVST307aWYoIW4uZXFsKCQsbi5PTkUpKXRocm93IG5ldyBFcnJvcigiaW52WiB3YXMgaW52YWxpZCIpO3JldHVybnt4OkEseTpTfX0pLHE9aWgoTj0+e2lmKE4uaXMwKCkpe2lmKGUuYWxsb3dJbmZpbml0eVBvaW50JiYhbi5pczAoTi5ZKSlyZXR1cm47dGhyb3cgbmV3IEVycm9yKCJiYWQgcG9pbnQ6IFpFUk8iKX1jb25zdHt4OkQseTpSfT1OLnRvQWZmaW5lKCk7aWYoIW4uaXNWYWxpZChEKXx8IW4uaXNWYWxpZChSKSl0aHJvdyBuZXcgRXJyb3IoImJhZCBwb2ludDogeCBvciB5IG5vdCBmaWVsZCBlbGVtZW50cyIpO2lmKCF2KEQsUikpdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9pbnQ6IGVxdWF0aW9uIGxlZnQgIT0gcmlnaHQiKTtpZighTi5pc1RvcnNpb25GcmVlKCkpdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9pbnQ6IG5vdCBpbiBwcmltZS1vcmRlciBzdWJncm91cCIpO3JldHVybiEwfSk7ZnVuY3Rpb24gTShOLEQsUix5LG0pe3JldHVybiBSPW5ldyBUKG4ubXVsKFIuWCxOKSxSLlksUi5aKSxEPXNvKHksRCksUj1zbyhtLFIpLEQuYWRkKFIpfWNsYXNzIFR7Y29uc3RydWN0b3IoRCxSLHkpe3RoaXMuWD1fKCJ4IixEKSx0aGlzLlk9XygieSIsUiwhMCksdGhpcy5aPV8oInoiLHkpLE9iamVjdC5mcmVlemUodGhpcyl9c3RhdGljIENVUlZFKCl7cmV0dXJuIHN9c3RhdGljIGZyb21BZmZpbmUoRCl7Y29uc3R7eDpSLHl9PUR8fHt9O2lmKCFEfHwhbi5pc1ZhbGlkKFIpfHwhbi5pc1ZhbGlkKHkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBhZmZpbmUgcG9pbnQiKTtpZihEIGluc3RhbmNlb2YgVCl0aHJvdyBuZXcgRXJyb3IoInByb2plY3RpdmUgcG9pbnQgbm90IGFsbG93ZWQiKTtyZXR1cm4gbi5pczAoUikmJm4uaXMwKHkpP1QuWkVSTzpuZXcgVChSLHksbi5PTkUpfXN0YXRpYyBmcm9tQnl0ZXMoRCl7Y29uc3QgUj1ULmZyb21BZmZpbmUodyh3bihELHZvaWQgMCwicG9pbnQiKSkpO3JldHVybiBSLmFzc2VydFZhbGlkaXR5KCksUn1zdGF0aWMgZnJvbUhleChEKXtyZXR1cm4gVC5mcm9tQnl0ZXMoR2UoInBvaW50SGV4IixEKSl9Z2V0IHgoKXtyZXR1cm4gdGhpcy50b0FmZmluZSgpLnh9Z2V0IHkoKXtyZXR1cm4gdGhpcy50b0FmZmluZSgpLnl9cHJlY29tcHV0ZShEPTgsUj0hMCl7cmV0dXJuIFUuY3JlYXRlQ2FjaGUodGhpcyxEKSxSfHx0aGlzLm11bHRpcGx5KEFzKSx0aGlzfWFzc2VydFZhbGlkaXR5KCl7cSh0aGlzKX1oYXNFdmVuWSgpe2NvbnN0e3k6RH09dGhpcy50b0FmZmluZSgpO2lmKCFuLmlzT2RkKXRocm93IG5ldyBFcnJvcigiRmllbGQgZG9lc24ndCBzdXBwb3J0IGlzT2RkIik7cmV0dXJuIW4uaXNPZGQoRCl9ZXF1YWxzKEQpe1AoRCk7Y29uc3R7WDpSLFk6eSxaOm19PXRoaXMse1g6SSxZOkEsWjpTfT1ELCQ9bi5lcWwobi5tdWwoUixTKSxuLm11bChJLG0pKSxrPW4uZXFsKG4ubXVsKHksUyksbi5tdWwoQSxtKSk7cmV0dXJuICQmJmt9bmVnYXRlKCl7cmV0dXJuIG5ldyBUKHRoaXMuWCxuLm5lZyh0aGlzLlkpLHRoaXMuWil9ZG91YmxlKCl7Y29uc3R7YTpELGI6Un09cyx5PW4ubXVsKFIsQXMpLHtYOm0sWTpJLFo6QX09dGhpcztsZXQgUz1uLlpFUk8sJD1uLlpFUk8saz1uLlpFUk8sSz1uLm11bChtLG0pLFo9bi5tdWwoSSxJKSxWPW4ubXVsKEEsQSksVz1uLm11bChtLEkpO3JldHVybiBXPW4uYWRkKFcsVyksaz1uLm11bChtLEEpLGs9bi5hZGQoayxrKSxTPW4ubXVsKEQsayksJD1uLm11bCh5LFYpLCQ9bi5hZGQoUywkKSxTPW4uc3ViKFosJCksJD1uLmFkZChaLCQpLCQ9bi5tdWwoUywkKSxTPW4ubXVsKFcsUyksaz1uLm11bCh5LGspLFY9bi5tdWwoRCxWKSxXPW4uc3ViKEssViksVz1uLm11bChELFcpLFc9bi5hZGQoVyxrKSxrPW4uYWRkKEssSyksSz1uLmFkZChrLEspLEs9bi5hZGQoSyxWKSxLPW4ubXVsKEssVyksJD1uLmFkZCgkLEspLFY9bi5tdWwoSSxBKSxWPW4uYWRkKFYsViksSz1uLm11bChWLFcpLFM9bi5zdWIoUyxLKSxrPW4ubXVsKFYsWiksaz1uLmFkZChrLGspLGs9bi5hZGQoayxrKSxuZXcgVChTLCQsayl9YWRkKEQpe1AoRCk7Y29uc3R7WDpSLFk6eSxaOm19PXRoaXMse1g6SSxZOkEsWjpTfT1EO2xldCAkPW4uWkVSTyxrPW4uWkVSTyxLPW4uWkVSTztjb25zdCBaPXMuYSxWPW4ubXVsKHMuYixBcyk7bGV0IFc9bi5tdWwoUixJKSxKPW4ubXVsKHksQSksZWU9bi5tdWwobSxTKSxyZT1uLmFkZChSLHkpLFE9bi5hZGQoSSxBKTtyZT1uLm11bChyZSxRKSxRPW4uYWRkKFcsSikscmU9bi5zdWIocmUsUSksUT1uLmFkZChSLG0pO2xldCBpZT1uLmFkZChJLFMpO3JldHVybiBRPW4ubXVsKFEsaWUpLGllPW4uYWRkKFcsZWUpLFE9bi5zdWIoUSxpZSksaWU9bi5hZGQoeSxtKSwkPW4uYWRkKEEsUyksaWU9bi5tdWwoaWUsJCksJD1uLmFkZChKLGVlKSxpZT1uLnN1YihpZSwkKSxLPW4ubXVsKFosUSksJD1uLm11bChWLGVlKSxLPW4uYWRkKCQsSyksJD1uLnN1YihKLEspLEs9bi5hZGQoSixLKSxrPW4ubXVsKCQsSyksSj1uLmFkZChXLFcpLEo9bi5hZGQoSixXKSxlZT1uLm11bChaLGVlKSxRPW4ubXVsKFYsUSksSj1uLmFkZChKLGVlKSxlZT1uLnN1YihXLGVlKSxlZT1uLm11bChaLGVlKSxRPW4uYWRkKFEsZWUpLFc9bi5tdWwoSixRKSxrPW4uYWRkKGssVyksVz1uLm11bChpZSxRKSwkPW4ubXVsKHJlLCQpLCQ9bi5zdWIoJCxXKSxXPW4ubXVsKHJlLEopLEs9bi5tdWwoaWUsSyksSz1uLmFkZChLLFcpLG5ldyBUKCQsayxLKX1zdWJ0cmFjdChEKXtyZXR1cm4gdGhpcy5hZGQoRC5uZWdhdGUoKSl9aXMwKCl7cmV0dXJuIHRoaXMuZXF1YWxzKFQuWkVSTyl9bXVsdGlwbHkoRCl7Y29uc3R7ZW5kbzpSfT1lO2lmKCFpLmlzVmFsaWROb3QwKEQpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzY2FsYXI6IG91dCBvZiByYW5nZSIpO2xldCB5LG07Y29uc3QgST1BPT5VLmNhY2hlZCh0aGlzLEEsUz0+X2EoVCxTKSk7aWYoUil7Y29uc3R7azFuZWc6QSxrMTpTLGsybmVnOiQsazI6a309QyhEKSx7cDpLLGY6Wn09SShTKSx7cDpWLGY6V309SShrKTttPVouYWRkKFcpLHk9TShSLmJldGEsSyxWLEEsJCl9ZWxzZXtjb25zdHtwOkEsZjpTfT1JKEQpO3k9QSxtPVN9cmV0dXJuIF9hKFQsW3ksbV0pWzBdfW11bHRpcGx5VW5zYWZlKEQpe2NvbnN0e2VuZG86Un09ZSx5PXRoaXM7aWYoIWkuaXNWYWxpZChEKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2NhbGFyOiBvdXQgb2YgcmFuZ2UiKTtpZihEPT09YnJ8fHkuaXMwKCkpcmV0dXJuIFQuWkVSTztpZihEPT09cmkpcmV0dXJuIHk7aWYoVS5oYXNDYWNoZSh0aGlzKSlyZXR1cm4gdGhpcy5tdWx0aXBseShEKTtpZihSKXtjb25zdHtrMW5lZzptLGsxOkksazJuZWc6QSxrMjpTfT1DKEQpLHtwMTokLHAyOmt9PU9JKFQseSxJLFMpO3JldHVybiBNKFIuYmV0YSwkLGssbSxBKX1lbHNlIHJldHVybiBVLnVuc2FmZSh5LEQpfW11bHRpcGx5QW5kQWRkVW5zYWZlKEQsUix5KXtjb25zdCBtPXRoaXMubXVsdGlwbHlVbnNhZmUoUikuYWRkKEQubXVsdGlwbHlVbnNhZmUoeSkpO3JldHVybiBtLmlzMCgpP3ZvaWQgMDptfXRvQWZmaW5lKEQpe3JldHVybiBqKHRoaXMsRCl9aXNUb3JzaW9uRnJlZSgpe2NvbnN0e2lzVG9yc2lvbkZyZWU6RH09ZTtyZXR1cm4gbz09PXJpPyEwOkQ/RChULHRoaXMpOlUudW5zYWZlKHRoaXMsYSkuaXMwKCl9Y2xlYXJDb2ZhY3Rvcigpe2NvbnN0e2NsZWFyQ29mYWN0b3I6RH09ZTtyZXR1cm4gbz09PXJpP3RoaXM6RD9EKFQsdGhpcyk6dGhpcy5tdWx0aXBseVVuc2FmZShvKX1pc1NtYWxsT3JkZXIoKXtyZXR1cm4gdGhpcy5tdWx0aXBseVVuc2FmZShvKS5pczAoKX10b0J5dGVzKEQ9ITApe3JldHVybiBubyhELCJpc0NvbXByZXNzZWQiKSx0aGlzLmFzc2VydFZhbGlkaXR5KCksZyhULHRoaXMsRCl9dG9IZXgoRD0hMCl7cmV0dXJuIGVpKHRoaXMudG9CeXRlcyhEKSl9dG9TdHJpbmcoKXtyZXR1cm5gPFBvaW50ICR7dGhpcy5pczAoKT8iWkVSTyI6dGhpcy50b0hleCgpfT5gfWdldCBweCgpe3JldHVybiB0aGlzLlh9Z2V0IHB5KCl7cmV0dXJuIHRoaXMuWH1nZXQgcHooKXtyZXR1cm4gdGhpcy5afXRvUmF3Qnl0ZXMoRD0hMCl7cmV0dXJuIHRoaXMudG9CeXRlcyhEKX1fc2V0V2luZG93U2l6ZShEKXt0aGlzLnByZWNvbXB1dGUoRCl9c3RhdGljIG5vcm1hbGl6ZVooRCl7cmV0dXJuIF9hKFQsRCl9c3RhdGljIG1zbShELFIpe3JldHVybiAkSShULGksRCxSKX1zdGF0aWMgZnJvbVByaXZhdGVLZXkoRCl7cmV0dXJuIFQuQkFTRS5tdWx0aXBseShXbihpLEQpKX19VC5CQVNFPW5ldyBUKHMuR3gscy5HeSxuLk9ORSksVC5aRVJPPW5ldyBUKG4uWkVSTyxuLk9ORSxuLlpFUk8pLFQuRnA9bixULkZuPWk7Y29uc3Qgej1pLkJJVFMsVT1uZXcgREkoVCxlLmVuZG8/TWF0aC5jZWlsKHovMik6eik7cmV0dXJuIFQuQkFTRS5wcmVjb21wdXRlKDgpLFR9ZnVuY3Rpb24gR3AodCl7cmV0dXJuIFVpbnQ4QXJyYXkub2YodD8yOjMpfWZ1bmN0aW9uIFlwKHQsZSl7cmV0dXJue3NlY3JldEtleTplLkJZVEVTLHB1YmxpY0tleToxK3QuQllURVMscHVibGljS2V5VW5jb21wcmVzc2VkOjErMip0LkJZVEVTLHB1YmxpY0tleUhhc1ByZWZpeDohMCxzaWduYXR1cmU6MiplLkJZVEVTfX1mdW5jdGlvbiBLSSh0LGU9e30pe2NvbnN0e0ZuOnJ9PXQsbj1lLnJhbmRvbUJ5dGVzfHxDbixpPU9iamVjdC5hc3NpZ24oWXAodC5GcCxyKSx7c2VlZDp6cChyLk9SREVSKX0pO2Z1bmN0aW9uIHMoZyl7dHJ5e3JldHVybiEhV24ocixnKX1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gbyhnLHcpe2NvbnN0e3B1YmxpY0tleTpiLHB1YmxpY0tleVVuY29tcHJlc3NlZDp2fT1pO3RyeXtjb25zdCBPPWcubGVuZ3RoO3JldHVybiB3PT09ITAmJk8hPT1ifHx3PT09ITEmJk8hPT12PyExOiEhdC5mcm9tQnl0ZXMoZyl9Y2F0Y2h7cmV0dXJuITF9fWZ1bmN0aW9uIGEoZz1uKGkuc2VlZCkpe3JldHVybiBJSSh3bihnLGkuc2VlZCwic2VlZCIpLHIuT1JERVIpfWZ1bmN0aW9uIGMoZyx3PSEwKXtyZXR1cm4gdC5CQVNFLm11bHRpcGx5KFduKHIsZykpLnRvQnl0ZXModyl9ZnVuY3Rpb24gdShnKXtjb25zdCB3PWEoZyk7cmV0dXJue3NlY3JldEtleTp3LHB1YmxpY0tleTpjKHcpfX1mdW5jdGlvbiBsKGcpe2lmKHR5cGVvZiBnPT0iYmlnaW50IilyZXR1cm4hMTtpZihnIGluc3RhbmNlb2YgdClyZXR1cm4hMDtjb25zdHtzZWNyZXRLZXk6dyxwdWJsaWNLZXk6YixwdWJsaWNLZXlVbmNvbXByZXNzZWQ6dn09aTtpZihyLmFsbG93ZWRMZW5ndGhzfHx3PT09YilyZXR1cm47Y29uc3QgTz1HZSgia2V5IixnKS5sZW5ndGg7cmV0dXJuIE89PT1ifHxPPT09dn1mdW5jdGlvbiBoKGcsdyxiPSEwKXtpZihsKGcpPT09ITApdGhyb3cgbmV3IEVycm9yKCJmaXJzdCBhcmcgbXVzdCBiZSBwcml2YXRlIGtleSIpO2lmKGwodyk9PT0hMSl0aHJvdyBuZXcgRXJyb3IoInNlY29uZCBhcmcgbXVzdCBiZSBwdWJsaWMga2V5Iik7Y29uc3Qgdj1XbihyLGcpO3JldHVybiB0LmZyb21IZXgodykubXVsdGlwbHkodikudG9CeXRlcyhiKX1yZXR1cm4gT2JqZWN0LmZyZWV6ZSh7Z2V0UHVibGljS2V5OmMsZ2V0U2hhcmVkU2VjcmV0Omgsa2V5Z2VuOnUsUG9pbnQ6dCx1dGlsczp7aXNWYWxpZFNlY3JldEtleTpzLGlzVmFsaWRQdWJsaWNLZXk6byxyYW5kb21TZWNyZXRLZXk6YSxpc1ZhbGlkUHJpdmF0ZUtleTpzLHJhbmRvbVByaXZhdGVLZXk6YSxub3JtUHJpdmF0ZUtleVRvU2NhbGFyOmc9PlduKHIsZykscHJlY29tcHV0ZShnPTgsdz10LkJBU0Upe3JldHVybiB3LnByZWNvbXB1dGUoZywhMSl9fSxsZW5ndGhzOml9KX1mdW5jdGlvbiBWSSh0LGUscj17fSl7U28oZSksQ28ocix7fSx7aG1hYzoiZnVuY3Rpb24iLGxvd1M6ImJvb2xlYW4iLHJhbmRvbUJ5dGVzOiJmdW5jdGlvbiIsYml0czJpbnQ6ImZ1bmN0aW9uIixiaXRzMmludF9tb2ROOiJmdW5jdGlvbiJ9KTtjb25zdCBuPXIucmFuZG9tQnl0ZXN8fENuLGk9ci5obWFjfHwoKFIsLi4ueSk9PlBvKGUsUixLciguLi55KSkpLHtGcDpzLEZuOm99PXQse09SREVSOmEsQklUUzpjfT1vLHtrZXlnZW46dSxnZXRQdWJsaWNLZXk6bCxnZXRTaGFyZWRTZWNyZXQ6aCx1dGlsczpwLGxlbmd0aHM6Z309S0kodCxyKSx3PXtwcmVoYXNoOiExLGxvd1M6dHlwZW9mIHIubG93Uz09ImJvb2xlYW4iP3IubG93UzohMSxmb3JtYXQ6dm9pZCAwLGV4dHJhRW50cm9weTohMX0sYj0iY29tcGFjdCI7ZnVuY3Rpb24gdihSKXtjb25zdCB5PWE+PnJpO3JldHVybiBSPnl9ZnVuY3Rpb24gTyhSLHkpe2lmKCFvLmlzVmFsaWROb3QwKHkpKXRocm93IG5ldyBFcnJvcihgaW52YWxpZCBzaWduYXR1cmUgJHtSfTogb3V0IG9mIHJhbmdlIDEuLlBvaW50LkZuLk9SREVSYCk7cmV0dXJuIHl9ZnVuY3Rpb24gRihSLHkpe2djKHkpO2NvbnN0IG09Zy5zaWduYXR1cmUsST15PT09ImNvbXBhY3QiP206eT09PSJyZWNvdmVyZWQiP20rMTp2b2lkIDA7cmV0dXJuIHduKFIsSSxgJHt5fSBzaWduYXR1cmVgKX1jbGFzcyBfe2NvbnN0cnVjdG9yKHksbSxJKXt0aGlzLnI9TygiciIseSksdGhpcy5zPU8oInMiLG0pLEkhPW51bGwmJih0aGlzLnJlY292ZXJ5PUkpLE9iamVjdC5mcmVlemUodGhpcyl9c3RhdGljIGZyb21CeXRlcyh5LG09Yil7Rih5LG0pO2xldCBJO2lmKG09PT0iZGVyIil7Y29uc3R7cjprLHM6S309eXIudG9TaWcod24oeSkpO3JldHVybiBuZXcgXyhrLEspfW09PT0icmVjb3ZlcmVkIiYmKEk9eVswXSxtPSJjb21wYWN0Iix5PXkuc3ViYXJyYXkoMSkpO2NvbnN0IEE9by5CWVRFUyxTPXkuc3ViYXJyYXkoMCxBKSwkPXkuc3ViYXJyYXkoQSxBKjIpO3JldHVybiBuZXcgXyhvLmZyb21CeXRlcyhTKSxvLmZyb21CeXRlcygkKSxJKX1zdGF0aWMgZnJvbUhleCh5LG0pe3JldHVybiB0aGlzLmZyb21CeXRlcyhHcyh5KSxtKX1hZGRSZWNvdmVyeUJpdCh5KXtyZXR1cm4gbmV3IF8odGhpcy5yLHRoaXMucyx5KX1yZWNvdmVyUHVibGljS2V5KHkpe2NvbnN0IG09cy5PUkRFUix7cjpJLHM6QSxyZWNvdmVyeTpTfT10aGlzO2lmKFM9PW51bGx8fCFbMCwxLDIsM10uaW5jbHVkZXMoUykpdGhyb3cgbmV3IEVycm9yKCJyZWNvdmVyeSBpZCBpbnZhbGlkIik7aWYoYSpXcDxtJiZTPjEpdGhyb3cgbmV3IEVycm9yKCJyZWNvdmVyeSBpZCBpcyBhbWJpZ3VvdXMgZm9yIGg+MSBjdXJ2ZSIpO2NvbnN0IGs9Uz09PTJ8fFM9PT0zP0krYTpJO2lmKCFzLmlzVmFsaWQoaykpdGhyb3cgbmV3IEVycm9yKCJyZWNvdmVyeSBpZCAyIG9yIDMgaW52YWxpZCIpO2NvbnN0IEs9cy50b0J5dGVzKGspLFo9dC5mcm9tQnl0ZXMoS3IoR3AoKFMmMSk9PT0wKSxLKSksVj1vLmludihrKSxXPUMoR2UoIm1zZ0hhc2giLHkpKSxKPW8uY3JlYXRlKC1XKlYpLGVlPW8uY3JlYXRlKEEqVikscmU9dC5CQVNFLm11bHRpcGx5VW5zYWZlKEopLmFkZChaLm11bHRpcGx5VW5zYWZlKGVlKSk7aWYocmUuaXMwKCkpdGhyb3cgbmV3IEVycm9yKCJwb2ludCBhdCBpbmZpbmlmeSIpO3JldHVybiByZS5hc3NlcnRWYWxpZGl0eSgpLHJlfWhhc0hpZ2hTKCl7cmV0dXJuIHYodGhpcy5zKX10b0J5dGVzKHk9Yil7aWYoZ2MoeSkseT09PSJkZXIiKXJldHVybiBHcyh5ci5oZXhGcm9tU2lnKHRoaXMpKTtjb25zdCBtPW8udG9CeXRlcyh0aGlzLnIpLEk9by50b0J5dGVzKHRoaXMucyk7aWYoeT09PSJyZWNvdmVyZWQiKXtpZih0aGlzLnJlY292ZXJ5PT1udWxsKXRocm93IG5ldyBFcnJvcigicmVjb3ZlcnkgYml0IG11c3QgYmUgcHJlc2VudCIpO3JldHVybiBLcihVaW50OEFycmF5Lm9mKHRoaXMucmVjb3ZlcnkpLG0sSSl9cmV0dXJuIEtyKG0sSSl9dG9IZXgoeSl7cmV0dXJuIGVpKHRoaXMudG9CeXRlcyh5KSl9YXNzZXJ0VmFsaWRpdHkoKXt9c3RhdGljIGZyb21Db21wYWN0KHkpe3JldHVybiBfLmZyb21CeXRlcyhHZSgic2lnIix5KSwiY29tcGFjdCIpfXN0YXRpYyBmcm9tREVSKHkpe3JldHVybiBfLmZyb21CeXRlcyhHZSgic2lnIix5KSwiZGVyIil9bm9ybWFsaXplUygpe3JldHVybiB0aGlzLmhhc0hpZ2hTKCk/bmV3IF8odGhpcy5yLG8ubmVnKHRoaXMucyksdGhpcy5yZWNvdmVyeSk6dGhpc310b0RFUlJhd0J5dGVzKCl7cmV0dXJuIHRoaXMudG9CeXRlcygiZGVyIil9dG9ERVJIZXgoKXtyZXR1cm4gZWkodGhpcy50b0J5dGVzKCJkZXIiKSl9dG9Db21wYWN0UmF3Qnl0ZXMoKXtyZXR1cm4gdGhpcy50b0J5dGVzKCJjb21wYWN0Iil9dG9Db21wYWN0SGV4KCl7cmV0dXJuIGVpKHRoaXMudG9CeXRlcygiY29tcGFjdCIpKX19Y29uc3QgUD1yLmJpdHMyaW50fHxmdW5jdGlvbih5KXtpZih5Lmxlbmd0aD44MTkyKXRocm93IG5ldyBFcnJvcigiaW5wdXQgaXMgdG9vIGxhcmdlIik7Y29uc3QgbT1Sbyh5KSxJPXkubGVuZ3RoKjgtYztyZXR1cm4gST4wP20+PkJpZ0ludChJKTptfSxDPXIuYml0czJpbnRfbW9kTnx8ZnVuY3Rpb24oeSl7cmV0dXJuIG8uY3JlYXRlKFAoeSkpfSxqPW9zKGMpO2Z1bmN0aW9uIHEoUil7cmV0dXJuIGRjKCJudW0gPCAyXiIrYyxSLGJyLGopLG8udG9CeXRlcyhSKX1mdW5jdGlvbiBNKFIseSl7cmV0dXJuIHduKFIsdm9pZCAwLCJtZXNzYWdlIikseT93bihlKFIpLHZvaWQgMCwicHJlaGFzaGVkIG1lc3NhZ2UiKTpSfWZ1bmN0aW9uIFQoUix5LG0pe2lmKFsicmVjb3ZlcmVkIiwiY2Fub25pY2FsIl0uc29tZShKPT5KIGluIG0pKXRocm93IG5ldyBFcnJvcigic2lnbigpIGxlZ2FjeSBvcHRpb25zIG5vdCBzdXBwb3J0ZWQiKTtjb25zdHtsb3dTOkkscHJlaGFzaDpBLGV4dHJhRW50cm9weTpTfT1EYShtLHcpO1I9TShSLEEpO2NvbnN0ICQ9QyhSKSxrPVduKG8seSksSz1bcShrKSxxKCQpXTtpZihTIT1udWxsJiZTIT09ITEpe2NvbnN0IEo9Uz09PSEwP24oZy5zZWNyZXRLZXkpOlM7Sy5wdXNoKEdlKCJleHRyYUVudHJvcHkiLEopKX1jb25zdCBaPUtyKC4uLkspLFY9JDtmdW5jdGlvbiBXKEope2NvbnN0IGVlPVAoSik7aWYoIW8uaXNWYWxpZE5vdDAoZWUpKXJldHVybjtjb25zdCByZT1vLmludihlZSksUT10LkJBU0UubXVsdGlwbHkoZWUpLnRvQWZmaW5lKCksaWU9by5jcmVhdGUoUS54KTtpZihpZT09PWJyKXJldHVybjtjb25zdCBmZT1vLmNyZWF0ZShyZSpvLmNyZWF0ZShWK2llKmspKTtpZihmZT09PWJyKXJldHVybjtsZXQgSWU9KFEueD09PWllPzA6Mil8TnVtYmVyKFEueSZyaSksRGU9ZmU7cmV0dXJuIEkmJnYoZmUpJiYoRGU9by5uZWcoZmUpLEllXj0xKSxuZXcgXyhpZSxEZSxJZSl9cmV0dXJue3NlZWQ6WixrMnNpZzpXfX1mdW5jdGlvbiB6KFIseSxtPXt9KXtSPUdlKCJtZXNzYWdlIixSKTtjb25zdHtzZWVkOkksazJzaWc6QX09VChSLHksbSk7cmV0dXJuIGdJKGUub3V0cHV0TGVuLG8uQllURVMsaSkoSSxBKX1mdW5jdGlvbiBVKFIpe2xldCB5O2NvbnN0IG09dHlwZW9mIFI9PSJzdHJpbmcifHxJbyhSKSxJPSFtJiZSIT09bnVsbCYmdHlwZW9mIFI9PSJvYmplY3QiJiZ0eXBlb2YgUi5yPT0iYmlnaW50IiYmdHlwZW9mIFIucz09ImJpZ2ludCI7aWYoIW0mJiFJKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaWduYXR1cmUsIGV4cGVjdGVkIFVpbnQ4QXJyYXksIGhleCBzdHJpbmcgb3IgU2lnbmF0dXJlIGluc3RhbmNlIik7aWYoSSl5PW5ldyBfKFIucixSLnMpO2Vsc2UgaWYobSl7dHJ5e3k9Xy5mcm9tQnl0ZXMoR2UoInNpZyIsUiksImRlciIpfWNhdGNoKEEpe2lmKCEoQSBpbnN0YW5jZW9mIHlyLkVycikpdGhyb3cgQX1pZigheSl0cnl7eT1fLmZyb21CeXRlcyhHZSgic2lnIixSKSwiY29tcGFjdCIpfWNhdGNoe3JldHVybiExfX1yZXR1cm4geXx8ITF9ZnVuY3Rpb24gTihSLHksbSxJPXt9KXtjb25zdHtsb3dTOkEscHJlaGFzaDpTLGZvcm1hdDokfT1EYShJLHcpO2lmKG09R2UoInB1YmxpY0tleSIsbSkseT1NKEdlKCJtZXNzYWdlIix5KSxTKSwic3RyaWN0ImluIEkpdGhyb3cgbmV3IEVycm9yKCJvcHRpb25zLnN0cmljdCB3YXMgcmVuYW1lZCB0byBsb3dTIik7Y29uc3Qgaz0kPT09dm9pZCAwP1UoUik6Xy5mcm9tQnl0ZXMoR2UoInNpZyIsUiksJCk7aWYoaz09PSExKXJldHVybiExO3RyeXtjb25zdCBLPXQuZnJvbUJ5dGVzKG0pO2lmKEEmJmsuaGFzSGlnaFMoKSlyZXR1cm4hMTtjb25zdHtyOlosczpWfT1rLFc9Qyh5KSxKPW8uaW52KFYpLGVlPW8uY3JlYXRlKFcqSikscmU9by5jcmVhdGUoWipKKSxRPXQuQkFTRS5tdWx0aXBseVVuc2FmZShlZSkuYWRkKEsubXVsdGlwbHlVbnNhZmUocmUpKTtyZXR1cm4gUS5pczAoKT8hMTpvLmNyZWF0ZShRLngpPT09Wn1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gRChSLHksbT17fSl7Y29uc3R7cHJlaGFzaDpJfT1EYShtLHcpO3JldHVybiB5PU0oeSxJKSxfLmZyb21CeXRlcyhSLCJyZWNvdmVyZWQiKS5yZWNvdmVyUHVibGljS2V5KHkpLnRvQnl0ZXMoKX1yZXR1cm4gT2JqZWN0LmZyZWV6ZSh7a2V5Z2VuOnUsZ2V0UHVibGljS2V5OmwsZ2V0U2hhcmVkU2VjcmV0OmgsdXRpbHM6cCxsZW5ndGhzOmcsUG9pbnQ6dCxzaWduOnosdmVyaWZ5Ok4scmVjb3ZlclB1YmxpY0tleTpELFNpZ25hdHVyZTpfLGhhc2g6ZX0pfWZ1bmN0aW9uIFdJKHQpe2NvbnN0IGU9e2E6dC5hLGI6dC5iLHA6dC5GcC5PUkRFUixuOnQubixoOnQuaCxHeDp0Lkd4LEd5OnQuR3l9LHI9dC5GcDtsZXQgbj10LmFsbG93ZWRQcml2YXRlS2V5TGVuZ3Rocz9BcnJheS5mcm9tKG5ldyBTZXQodC5hbGxvd2VkUHJpdmF0ZUtleUxlbmd0aHMubWFwKG89Pk1hdGguY2VpbChvLzIpKSkpOnZvaWQgMDtjb25zdCBpPVFyKGUubix7QklUUzp0Lm5CaXRMZW5ndGgsYWxsb3dlZExlbmd0aHM6bixtb2RGcm9tQnl0ZXM6dC53cmFwUHJpdmF0ZUtleX0pLHM9e0ZwOnIsRm46aSxhbGxvd0luZmluaXR5UG9pbnQ6dC5hbGxvd0luZmluaXR5UG9pbnQsZW5kbzp0LmVuZG8saXNUb3JzaW9uRnJlZTp0LmlzVG9yc2lvbkZyZWUsY2xlYXJDb2ZhY3Rvcjp0LmNsZWFyQ29mYWN0b3IsZnJvbUJ5dGVzOnQuZnJvbUJ5dGVzLHRvQnl0ZXM6dC50b0J5dGVzfTtyZXR1cm57Q1VSVkU6ZSxjdXJ2ZU9wdHM6c319ZnVuY3Rpb24gR0kodCl7Y29uc3R7Q1VSVkU6ZSxjdXJ2ZU9wdHM6cn09V0kodCksbj17aG1hYzp0LmhtYWMscmFuZG9tQnl0ZXM6dC5yYW5kb21CeXRlcyxsb3dTOnQubG93UyxiaXRzMmludDp0LmJpdHMyaW50LGJpdHMyaW50X21vZE46dC5iaXRzMmludF9tb2ROfTtyZXR1cm57Q1VSVkU6ZSxjdXJ2ZU9wdHM6cixoYXNoOnQuaGFzaCxlY2RzYU9wdHM6bn19ZnVuY3Rpb24gWUkodCxlKXtjb25zdCByPWUuUG9pbnQ7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sZSx7UHJvamVjdGl2ZVBvaW50OnIsQ1VSVkU6T2JqZWN0LmFzc2lnbih7fSx0LHFwKHIuRm4uT1JERVIsci5Gbi5CSVRTKSl9KX1mdW5jdGlvbiBaSSh0KXtjb25zdHtDVVJWRTplLGN1cnZlT3B0czpyLGhhc2g6bixlY2RzYU9wdHM6aX09R0kodCkscz1ISShlLHIpLG89VkkocyxuLGkpO3JldHVybiBZSSh0LG8pfS8qISBub2JsZS1jdXJ2ZXMgLSBNSVQgTGljZW5zZSAoYykgMjAyMiBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKi9mdW5jdGlvbiBsdSh0LGUpe2NvbnN0IHI9bj0+Wkkoey4uLnQsaGFzaDpufSk7cmV0dXJuey4uLnIoZSksY3JlYXRlOnJ9fS8qISBub2JsZS1jdXJ2ZXMgLSBNSVQgTGljZW5zZSAoYykgMjAyMiBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKi9jb25zdCBacD17cDpCaWdJbnQoIjB4ZmZmZmZmZmYwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIpLG46QmlnSW50KCIweGZmZmZmZmZmMDAwMDAwMDBmZmZmZmZmZmZmZmZmZmZmYmNlNmZhYWRhNzE3OWU4NGYzYjljYWMyZmM2MzI1NTEiKSxoOkJpZ0ludCgxKSxhOkJpZ0ludCgiMHhmZmZmZmZmZjAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjIiksYjpCaWdJbnQoIjB4NWFjNjM1ZDhhYTNhOTNlN2IzZWJiZDU1NzY5ODg2YmM2NTFkMDZiMGNjNTNiMGY2M2JjZTNjM2UyN2QyNjA0YiIpLEd4OkJpZ0ludCgiMHg2YjE3ZDFmMmUxMmM0MjQ3ZjhiY2U2ZTU2M2E0NDBmMjc3MDM3ZDgxMmRlYjMzYTBmNGExMzk0NWQ4OThjMjk2IiksR3k6QmlnSW50KCIweDRmZTM0MmUyZmUxYTdmOWI4ZWU3ZWI0YTdjMGY5ZTE2MmJjZTMzNTc2YjMxNWVjZWNiYjY0MDY4MzdiZjUxZjUiKX0sWHA9e3A6QmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDBmZmZmZmZmZiIpLG46QmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmM3NjM0ZDgxZjQzNzJkZGY1ODFhMGRiMjQ4YjBhNzdhZWNlYzE5NmFjY2M1Mjk3MyIpLGg6QmlnSW50KDEpLGE6QmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDBmZmZmZmZmYyIpLGI6QmlnSW50KCIweGIzMzEyZmE3ZTIzZWU3ZTQ5ODhlMDU2YmUzZjgyZDE5MTgxZDljNmVmZTgxNDExMjAzMTQwODhmNTAxMzg3NWFjNjU2Mzk4ZDhhMmVkMTlkMmE4NWM4ZWRkM2VjMmFlZiIpLEd4OkJpZ0ludCgiMHhhYTg3Y2EyMmJlOGIwNTM3OGViMWM3MWVmMzIwYWQ3NDZlMWQzYjYyOGJhNzliOTg1OWY3NDFlMDgyNTQyYTM4NTUwMmYyNWRiZjU1Mjk2YzNhNTQ1ZTM4NzI3NjBhYjciKSxHeTpCaWdJbnQoIjB4MzYxN2RlNGE5NjI2MmM2ZjVkOWU5OGJmOTI5MmRjMjlmOGY0MWRiZDI4OWExNDdjZTlkYTMxMTNiNWYwYjhjMDBhNjBiMWNlMWQ3ZTgxOWQ3YTQzMWQ3YzkwZWEwZTVmIil9LEpwPXtwOkJpZ0ludCgiMHgxZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIpLG46QmlnSW50KCIweDAxZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZhNTE4Njg3ODNiZjJmOTY2YjdmY2MwMTQ4ZjcwOWE1ZDAzYmI1YzliODg5OWM0N2FlYmI2ZmI3MWU5MTM4NjQwOSIpLGg6QmlnSW50KDEpLGE6QmlnSW50KCIweDFmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjIiksYjpCaWdJbnQoIjB4MDA1MTk1M2ViOTYxOGUxYzlhMWY5MjlhMjFhMGI2ODU0MGVlYTJkYTcyNWI5OWIzMTVmM2I4YjQ4OTkxOGVmMTA5ZTE1NjE5Mzk1MWVjN2U5MzdiMTY1MmMwYmQzYmIxYmYwNzM1NzNkZjg4M2QyYzM0ZjFlZjQ1MWZkNDZiNTAzZjAwIiksR3g6QmlnSW50KCIweDAwYzY4NThlMDZiNzA0MDRlOWNkOWUzZWNiNjYyMzk1YjQ0MjljNjQ4MTM5MDUzZmI1MjFmODI4YWY2MDZiNGQzZGJhYTE0YjVlNzdlZmU3NTkyOGZlMWRjMTI3YTJmZmE4ZGUzMzQ4YjNjMTg1NmE0MjliZjk3ZTdlMzFjMmU1YmQ2NiIpLEd5OkJpZ0ludCgiMHgwMTE4MzkyOTZhNzg5YTNiYzAwNDVjOGE1ZmI0MmM3ZDFiZDk5OGY1NDQ0OTU3OWI0NDY4MTdhZmJkMTcyNzNlNjYyYzk3ZWU3Mjk5NWVmNDI2NDBjNTUwYjkwMTNmYWQwNzYxMzUzYzcwODZhMjcyYzI0MDg4YmU5NDc2OWZkMTY2NTAiKX0sWEk9UXIoWnAucCksSkk9UXIoWHAucCksUUk9UXIoSnAucCksZTM9bHUoey4uLlpwLEZwOlhJLGxvd1M6ITF9LEJvKTtsdSh7Li4uWHAsRnA6SkksbG93UzohMX0sdV8pO2x1KHsuLi5KcCxGcDpRSSxsb3dTOiExLGFsbG93ZWRQcml2YXRlS2V5TGVuZ3RoczpbMTMwLDEzMSwxMzJdfSxjXyk7LyohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqL2NvbnN0IHQzPWUzLHIzPXt3YWt1OntwdWJsaXNoOiJ3YWt1X3B1Ymxpc2giLGJhdGNoUHVibGlzaDoid2FrdV9iYXRjaFB1Ymxpc2giLHN1YnNjcmliZToid2FrdV9zdWJzY3JpYmUiLGJhdGNoU3Vic2NyaWJlOiJ3YWt1X2JhdGNoU3Vic2NyaWJlIixzdWJzY3JpcHRpb246Indha3Vfc3Vic2NyaXB0aW9uIix1bnN1YnNjcmliZToid2FrdV91bnN1YnNjcmliZSIsYmF0Y2hVbnN1YnNjcmliZToid2FrdV9iYXRjaFVuc3Vic2NyaWJlIixiYXRjaEZldGNoTWVzc2FnZXM6Indha3VfYmF0Y2hGZXRjaE1lc3NhZ2VzIn0saXJuOntwdWJsaXNoOiJpcm5fcHVibGlzaCIsYmF0Y2hQdWJsaXNoOiJpcm5fYmF0Y2hQdWJsaXNoIixzdWJzY3JpYmU6Imlybl9zdWJzY3JpYmUiLGJhdGNoU3Vic2NyaWJlOiJpcm5fYmF0Y2hTdWJzY3JpYmUiLHN1YnNjcmlwdGlvbjoiaXJuX3N1YnNjcmlwdGlvbiIsdW5zdWJzY3JpYmU6Imlybl91bnN1YnNjcmliZSIsYmF0Y2hVbnN1YnNjcmliZToiaXJuX2JhdGNoVW5zdWJzY3JpYmUiLGJhdGNoRmV0Y2hNZXNzYWdlczoiaXJuX2JhdGNoRmV0Y2hNZXNzYWdlcyJ9LGlyaWRpdW06e3B1Ymxpc2g6ImlyaWRpdW1fcHVibGlzaCIsYmF0Y2hQdWJsaXNoOiJpcmlkaXVtX2JhdGNoUHVibGlzaCIsc3Vic2NyaWJlOiJpcmlkaXVtX3N1YnNjcmliZSIsYmF0Y2hTdWJzY3JpYmU6ImlyaWRpdW1fYmF0Y2hTdWJzY3JpYmUiLHN1YnNjcmlwdGlvbjoiaXJpZGl1bV9zdWJzY3JpcHRpb24iLHVuc3Vic2NyaWJlOiJpcmlkaXVtX3Vuc3Vic2NyaWJlIixiYXRjaFVuc3Vic2NyaWJlOiJpcmlkaXVtX2JhdGNoVW5zdWJzY3JpYmUiLGJhdGNoRmV0Y2hNZXNzYWdlczoiaXJpZGl1bV9iYXRjaEZldGNoTWVzc2FnZXMifX0sbjM9IklucHV0IG11c3QgYmUgYW4gc3RyaW5nLCBCdWZmZXIgb3IgVWludDhBcnJheSI7ZnVuY3Rpb24gaTModCl7bGV0IGU7aWYodCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpZT10O2Vsc2UgaWYodHlwZW9mIHQ9PSJzdHJpbmciKWU9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHQpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKG4zKTtyZXR1cm4gZX1mdW5jdGlvbiBzMyh0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKHQsZnVuY3Rpb24oZSl7cmV0dXJuKGU8MTY/IjAiOiIiKStlLnRvU3RyaW5nKDE2KX0pLmpvaW4oIiIpfWZ1bmN0aW9uIERzKHQpe3JldHVybig0Mjk0OTY3Mjk2K3QpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSl9ZnVuY3Rpb24gbzModCxlLHIpe2xldCBuPWAKYCt0KyIgPSAiO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSs9Mil7aWYocj09PTMyKW4rPURzKGVbaV0pLnRvVXBwZXJDYXNlKCksbis9IiAiLG4rPURzKGVbaSsxXSkudG9VcHBlckNhc2UoKTtlbHNlIGlmKHI9PT02NCluKz1EcyhlW2krMV0pLnRvVXBwZXJDYXNlKCksbis9RHMoZVtpXSkudG9VcHBlckNhc2UoKTtlbHNlIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzaXplICIrcik7aSU2PT09ND9uKz1gCmArbmV3IEFycmF5KHQubGVuZ3RoKzQpLmpvaW4oIiAiKTppPGUubGVuZ3RoLTImJihuKz0iICIpfWNvbnNvbGUubG9nKG4pfWZ1bmN0aW9uIGEzKHQsZSxyKXtsZXQgbj1uZXcgRGF0ZSgpLmdldFRpbWUoKTtjb25zdCBpPW5ldyBVaW50OEFycmF5KGUpO2ZvcihsZXQgbz0wO288ZTtvKyspaVtvXT1vJTI1Njtjb25zdCBzPW5ldyBEYXRlKCkuZ2V0VGltZSgpO2NvbnNvbGUubG9nKCJHZW5lcmF0ZWQgcmFuZG9tIGlucHV0IGluICIrKHMtbikrIm1zIiksbj1zO2ZvcihsZXQgbz0wO288cjtvKyspe2NvbnN0IGE9dChpKSxjPW5ldyBEYXRlKCkuZ2V0VGltZSgpLHU9Yy1uO249Yyxjb25zb2xlLmxvZygiSGFzaGVkIGluICIrdSsibXM6ICIrYS5zdWJzdHJpbmcoMCwyMCkrIi4uLiIpLGNvbnNvbGUubG9nKE1hdGgucm91bmQoZS8oMTw8MjApLyh1LzFlMykqMTAwKS8xMDArIiBNQiBQRVIgU0VDT05EIil9fXZhciBRcD17bm9ybWFsaXplSW5wdXQ6aTMsdG9IZXg6czMsZGVidWdQcmludDpvMyx0ZXN0U3BlZWQ6YTN9O2NvbnN0IHFzPVFwO2Z1bmN0aW9uIE9zKHQsZSxyKXtjb25zdCBuPXRbZV0rdFtyXTtsZXQgaT10W2UrMV0rdFtyKzFdO24+PTQyOTQ5NjcyOTYmJmkrKyx0W2VdPW4sdFtlKzFdPWl9ZnVuY3Rpb24gZmgodCxlLHIsbil7bGV0IGk9dFtlXStyO3I8MCYmKGkrPTQyOTQ5NjcyOTYpO2xldCBzPXRbZSsxXStuO2k+PTQyOTQ5NjcyOTYmJnMrKyx0W2VdPWksdFtlKzFdPXN9ZnVuY3Rpb24gZWcodCxlKXtyZXR1cm4gdFtlXV50W2UrMV08PDhedFtlKzJdPDwxNl50W2UrM108PDI0fWZ1bmN0aW9uIE5yKHQsZSxyLG4saSxzKXtjb25zdCBvPVJpW2ldLGE9UmlbaSsxXSxjPVJpW3NdLHU9UmlbcysxXTtPcyhuZSx0LGUpLGZoKG5lLHQsbyxhKTtsZXQgbD1uZVtuXV5uZVt0XSxoPW5lW24rMV1ebmVbdCsxXTtuZVtuXT1oLG5lW24rMV09bCxPcyhuZSxyLG4pLGw9bmVbZV1ebmVbcl0saD1uZVtlKzFdXm5lW3IrMV0sbmVbZV09bD4+PjI0Xmg8PDgsbmVbZSsxXT1oPj4+MjRebDw8OCxPcyhuZSx0LGUpLGZoKG5lLHQsYyx1KSxsPW5lW25dXm5lW3RdLGg9bmVbbisxXV5uZVt0KzFdLG5lW25dPWw+Pj4xNl5oPDwxNixuZVtuKzFdPWg+Pj4xNl5sPDwxNixPcyhuZSxyLG4pLGw9bmVbZV1ebmVbcl0saD1uZVtlKzFdXm5lW3IrMV0sbmVbZV09aD4+PjMxXmw8PDEsbmVbZSsxXT1sPj4+MzFeaDw8MX1jb25zdCB0Zz1uZXcgVWludDMyQXJyYXkoWzQwODkyMzU3MjAsMTc3OTAzMzcwMywyMjI3ODczNTk1LDMxNDQxMzQyNzcsNDI3MTE3NTcyMywxMDEzOTA0MjQyLDE1OTU3NTAxMjksMjc3MzQ4MDc2MiwyOTE3NTY1MTM3LDEzNTk4OTMxMTksNzI1NTExMTk5LDI2MDA4MjI5MjQsNDIxNTM4OTU0Nyw1Mjg3MzQ2MzUsMzI3MDMzMjA5LDE1NDE0NTkyMjVdKSxjMz1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNCwxMCw0LDgsOSwxNSwxMyw2LDEsMTIsMCwyLDExLDcsNSwzLDExLDgsMTIsMCw1LDIsMTUsMTMsMTAsMTQsMyw2LDcsMSw5LDQsNyw5LDMsMSwxMywxMiwxMSwxNCwyLDYsNSwxMCw0LDAsMTUsOCw5LDAsNSw3LDIsNCwxMCwxNSwxNCwxLDExLDEyLDYsOCwzLDEzLDIsMTIsNiwxMCwwLDExLDgsMyw0LDEzLDcsNSwxNSwxNCwxLDksMTIsNSwxLDE1LDE0LDEzLDQsMTAsMCw3LDYsMyw5LDIsOCwxMSwxMywxMSw3LDE0LDEyLDEsMyw5LDUsMCwxNSw0LDgsNiwyLDEwLDYsMTUsMTQsOSwxMSwzLDAsOCwxMiwyLDEzLDcsMSw0LDEwLDUsMTAsMiw4LDQsNyw2LDEsNSwxNSwxMSw5LDE0LDMsMTIsMTMsMCwwLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE0LDEwLDQsOCw5LDE1LDEzLDYsMSwxMiwwLDIsMTEsNyw1LDNdLEtlPW5ldyBVaW50OEFycmF5KGMzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdCoyfSkpLG5lPW5ldyBVaW50MzJBcnJheSgzMiksUmk9bmV3IFVpbnQzMkFycmF5KDMyKTtmdW5jdGlvbiByZyh0LGUpe2xldCByPTA7Zm9yKHI9MDtyPDE2O3IrKyluZVtyXT10Lmhbcl0sbmVbcisxNl09dGdbcl07Zm9yKG5lWzI0XT1uZVsyNF1edC50LG5lWzI1XT1uZVsyNV1edC50LzQyOTQ5NjcyOTYsZSYmKG5lWzI4XT1+bmVbMjhdLG5lWzI5XT1+bmVbMjldKSxyPTA7cjwzMjtyKyspUmlbcl09ZWcodC5iLDQqcik7Zm9yKHI9MDtyPDEyO3IrKylOcigwLDgsMTYsMjQsS2VbcioxNiswXSxLZVtyKjE2KzFdKSxOcigyLDEwLDE4LDI2LEtlW3IqMTYrMl0sS2VbcioxNiszXSksTnIoNCwxMiwyMCwyOCxLZVtyKjE2KzRdLEtlW3IqMTYrNV0pLE5yKDYsMTQsMjIsMzAsS2VbcioxNis2XSxLZVtyKjE2KzddKSxOcigwLDEwLDIwLDMwLEtlW3IqMTYrOF0sS2VbcioxNis5XSksTnIoMiwxMiwyMiwyNCxLZVtyKjE2KzEwXSxLZVtyKjE2KzExXSksTnIoNCwxNCwxNiwyNixLZVtyKjE2KzEyXSxLZVtyKjE2KzEzXSksTnIoNiw4LDE4LDI4LEtlW3IqMTYrMTRdLEtlW3IqMTYrMTVdKTtmb3Iocj0wO3I8MTY7cisrKXQuaFtyXT10Lmhbcl1ebmVbcl1ebmVbcisxNl19Y29uc3QgTHI9bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdKTtmdW5jdGlvbiBuZyh0LGUscixuKXtpZih0PT09MHx8dD42NCl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgb3V0cHV0IGxlbmd0aCwgZXhwZWN0ZWQgMCA8IGxlbmd0aCA8PSA2NCIpO2lmKGUmJmUubGVuZ3RoPjY0KXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBrZXksIGV4cGVjdGVkIFVpbnQ4QXJyYXkgd2l0aCAwIDwgbGVuZ3RoIDw9IDY0Iik7aWYociYmci5sZW5ndGghPT0xNil0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgc2FsdCwgZXhwZWN0ZWQgVWludDhBcnJheSB3aXRoIGxlbmd0aCBpcyAxNiIpO2lmKG4mJm4ubGVuZ3RoIT09MTYpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIHBlcnNvbmFsLCBleHBlY3RlZCBVaW50OEFycmF5IHdpdGggbGVuZ3RoIGlzIDE2Iik7Y29uc3QgaT17YjpuZXcgVWludDhBcnJheSgxMjgpLGg6bmV3IFVpbnQzMkFycmF5KDE2KSx0OjAsYzowLG91dGxlbjp0fTtMci5maWxsKDApLExyWzBdPXQsZSYmKExyWzFdPWUubGVuZ3RoKSxMclsyXT0xLExyWzNdPTEsciYmTHIuc2V0KHIsMzIpLG4mJkxyLnNldChuLDQ4KTtmb3IobGV0IHM9MDtzPDE2O3MrKylpLmhbc109dGdbc11eZWcoTHIscyo0KTtyZXR1cm4gZSYmKGh1KGksZSksaS5jPTEyOCksaX1mdW5jdGlvbiBodSh0LGUpe2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKXQuYz09PTEyOCYmKHQudCs9dC5jLHJnKHQsITEpLHQuYz0wKSx0LmJbdC5jKytdPWVbcl19ZnVuY3Rpb24gaWcodCl7Zm9yKHQudCs9dC5jO3QuYzwxMjg7KXQuYlt0LmMrK109MDtyZyh0LCEwKTtjb25zdCBlPW5ldyBVaW50OEFycmF5KHQub3V0bGVuKTtmb3IobGV0IHI9MDtyPHQub3V0bGVuO3IrKyllW3JdPXQuaFtyPj4yXT4+OCoociYzKTtyZXR1cm4gZX1mdW5jdGlvbiBzZyh0LGUscixuLGkpe3I9cnx8NjQsdD1xcy5ub3JtYWxpemVJbnB1dCh0KSxuJiYobj1xcy5ub3JtYWxpemVJbnB1dChuKSksaSYmKGk9cXMubm9ybWFsaXplSW5wdXQoaSkpO2NvbnN0IHM9bmcocixlLG4saSk7cmV0dXJuIGh1KHMsdCksaWcocyl9ZnVuY3Rpb24gdTModCxlLHIsbixpKXtjb25zdCBzPXNnKHQsZSxyLG4saSk7cmV0dXJuIHFzLnRvSGV4KHMpfXZhciBsMz17Ymxha2UyYjpzZyxibGFrZTJiSGV4OnUzLGJsYWtlMmJJbml0Om5nLGJsYWtlMmJVcGRhdGU6aHUsYmxha2UyYkZpbmFsOmlnfTtjb25zdCBvZz1RcDtmdW5jdGlvbiBoMyh0LGUpe3JldHVybiB0W2VdXnRbZSsxXTw8OF50W2UrMl08PDE2XnRbZSszXTw8MjR9ZnVuY3Rpb24gRnIodCxlLHIsbixpLHMpe3VlW3RdPXVlW3RdK3VlW2VdK2ksdWVbbl09JHModWVbbl1edWVbdF0sMTYpLHVlW3JdPXVlW3JdK3VlW25dLHVlW2VdPSRzKHVlW2VdXnVlW3JdLDEyKSx1ZVt0XT11ZVt0XSt1ZVtlXStzLHVlW25dPSRzKHVlW25dXnVlW3RdLDgpLHVlW3JdPXVlW3JdK3VlW25dLHVlW2VdPSRzKHVlW2VdXnVlW3JdLDcpfWZ1bmN0aW9uICRzKHQsZSl7cmV0dXJuIHQ+Pj5lXnQ8PDMyLWV9Y29uc3QgYWc9bmV3IFVpbnQzMkFycmF5KFsxNzc5MDMzNzAzLDMxNDQxMzQyNzcsMTAxMzkwNDI0MiwyNzczNDgwNzYyLDEzNTk4OTMxMTksMjYwMDgyMjkyNCw1Mjg3MzQ2MzUsMTU0MTQ1OTIyNV0pLFZlPW5ldyBVaW50OEFycmF5KFswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE0LDEwLDQsOCw5LDE1LDEzLDYsMSwxMiwwLDIsMTEsNyw1LDMsMTEsOCwxMiwwLDUsMiwxNSwxMywxMCwxNCwzLDYsNywxLDksNCw3LDksMywxLDEzLDEyLDExLDE0LDIsNiw1LDEwLDQsMCwxNSw4LDksMCw1LDcsMiw0LDEwLDE1LDE0LDEsMTEsMTIsNiw4LDMsMTMsMiwxMiw2LDEwLDAsMTEsOCwzLDQsMTMsNyw1LDE1LDE0LDEsOSwxMiw1LDEsMTUsMTQsMTMsNCwxMCwwLDcsNiwzLDksMiw4LDExLDEzLDExLDcsMTQsMTIsMSwzLDksNSwwLDE1LDQsOCw2LDIsMTAsNiwxNSwxNCw5LDExLDMsMCw4LDEyLDIsMTMsNywxLDQsMTAsNSwxMCwyLDgsNCw3LDYsMSw1LDE1LDExLDksMTQsMywxMiwxMywwXSksdWU9bmV3IFVpbnQzMkFycmF5KDE2KSxMZT1uZXcgVWludDMyQXJyYXkoMTYpO2Z1bmN0aW9uIGNnKHQsZSl7bGV0IHI9MDtmb3Iocj0wO3I8ODtyKyspdWVbcl09dC5oW3JdLHVlW3IrOF09YWdbcl07Zm9yKHVlWzEyXV49dC50LHVlWzEzXV49dC50LzQyOTQ5NjcyOTYsZSYmKHVlWzE0XT1+dWVbMTRdKSxyPTA7cjwxNjtyKyspTGVbcl09aDModC5iLDQqcik7Zm9yKHI9MDtyPDEwO3IrKylGcigwLDQsOCwxMixMZVtWZVtyKjE2KzBdXSxMZVtWZVtyKjE2KzFdXSksRnIoMSw1LDksMTMsTGVbVmVbcioxNisyXV0sTGVbVmVbcioxNiszXV0pLEZyKDIsNiwxMCwxNCxMZVtWZVtyKjE2KzRdXSxMZVtWZVtyKjE2KzVdXSksRnIoMyw3LDExLDE1LExlW1ZlW3IqMTYrNl1dLExlW1ZlW3IqMTYrN11dKSxGcigwLDUsMTAsMTUsTGVbVmVbcioxNis4XV0sTGVbVmVbcioxNis5XV0pLEZyKDEsNiwxMSwxMixMZVtWZVtyKjE2KzEwXV0sTGVbVmVbcioxNisxMV1dKSxGcigyLDcsOCwxMyxMZVtWZVtyKjE2KzEyXV0sTGVbVmVbcioxNisxM11dKSxGcigzLDQsOSwxNCxMZVtWZVtyKjE2KzE0XV0sTGVbVmVbcioxNisxNV1dKTtmb3Iocj0wO3I8ODtyKyspdC5oW3JdXj11ZVtyXV51ZVtyKzhdfWZ1bmN0aW9uIHVnKHQsZSl7aWYoISh0PjAmJnQ8PTMyKSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBvdXRwdXQgbGVuZ3RoLCBzaG91bGQgYmUgaW4gWzEsIDMyXSIpO2NvbnN0IHI9ZT9lLmxlbmd0aDowO2lmKGUmJiEocj4wJiZyPD0zMikpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3Qga2V5IGxlbmd0aCwgc2hvdWxkIGJlIGluIFsxLCAzMl0iKTtjb25zdCBuPXtoOm5ldyBVaW50MzJBcnJheShhZyksYjpuZXcgVWludDhBcnJheSg2NCksYzowLHQ6MCxvdXRsZW46dH07cmV0dXJuIG4uaFswXV49MTY4NDI3NTJecjw8OF50LHI+MCYmKGZ1KG4sZSksbi5jPTY0KSxufWZ1bmN0aW9uIGZ1KHQsZSl7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspdC5jPT09NjQmJih0LnQrPXQuYyxjZyh0LCExKSx0LmM9MCksdC5iW3QuYysrXT1lW3JdfWZ1bmN0aW9uIGxnKHQpe2Zvcih0LnQrPXQuYzt0LmM8NjQ7KXQuYlt0LmMrK109MDtjZyh0LCEwKTtjb25zdCBlPW5ldyBVaW50OEFycmF5KHQub3V0bGVuKTtmb3IobGV0IHI9MDtyPHQub3V0bGVuO3IrKyllW3JdPXQuaFtyPj4yXT4+OCoociYzKSYyNTU7cmV0dXJuIGV9ZnVuY3Rpb24gaGcodCxlLHIpe3I9cnx8MzIsdD1vZy5ub3JtYWxpemVJbnB1dCh0KTtjb25zdCBuPXVnKHIsZSk7cmV0dXJuIGZ1KG4sdCksbGcobil9ZnVuY3Rpb24gZjModCxlLHIpe2NvbnN0IG49aGcodCxlLHIpO3JldHVybiBvZy50b0hleChuKX12YXIgZDM9e2JsYWtlMnM6aGcsYmxha2Uyc0hleDpmMyxibGFrZTJzSW5pdDp1ZyxibGFrZTJzVXBkYXRlOmZ1LGJsYWtlMnNGaW5hbDpsZ307Y29uc3QgU2k9bDMsQWk9ZDM7dmFyIHAzPXtibGFrZTJiOlNpLmJsYWtlMmIsYmxha2UyYkhleDpTaS5ibGFrZTJiSGV4LGJsYWtlMmJJbml0OlNpLmJsYWtlMmJJbml0LGJsYWtlMmJVcGRhdGU6U2kuYmxha2UyYlVwZGF0ZSxibGFrZTJiRmluYWw6U2kuYmxha2UyYkZpbmFsLGJsYWtlMnM6QWkuYmxha2UycyxibGFrZTJzSGV4OkFpLmJsYWtlMnNIZXgsYmxha2Uyc0luaXQ6QWkuYmxha2Uyc0luaXQsYmxha2Uyc1VwZGF0ZTpBaS5ibGFrZTJzVXBkYXRlLGJsYWtlMnNGaW5hbDpBaS5ibGFrZTJzRmluYWx9LGczPXt9O2NvbnN0IHkzPSI6IjtmdW5jdGlvbiB2cih0KXtjb25zdFtlLHJdPXQuc3BsaXQoeTMpO3JldHVybntuYW1lc3BhY2U6ZSxyZWZlcmVuY2U6cn19ZnVuY3Rpb24gZmcodCxlKXtyZXR1cm4gdC5pbmNsdWRlcygiOiIpP1t0XTplLmNoYWluc3x8W119Y29uc3QgdzM9e0lOVkFMSURfTUVUSE9EOnttZXNzYWdlOiJJbnZhbGlkIG1ldGhvZC4iLGNvZGU6MTAwMX0sSU5WQUxJRF9FVkVOVDp7bWVzc2FnZToiSW52YWxpZCBldmVudC4iLGNvZGU6MTAwMn0sSU5WQUxJRF9VUERBVEVfUkVRVUVTVDp7bWVzc2FnZToiSW52YWxpZCB1cGRhdGUgcmVxdWVzdC4iLGNvZGU6MTAwM30sSU5WQUxJRF9FWFRFTkRfUkVRVUVTVDp7bWVzc2FnZToiSW52YWxpZCBleHRlbmQgcmVxdWVzdC4iLGNvZGU6MTAwNH0sSU5WQUxJRF9TRVNTSU9OX1NFVFRMRV9SRVFVRVNUOnttZXNzYWdlOiJJbnZhbGlkIHNlc3Npb24gc2V0dGxlIHJlcXVlc3QuIixjb2RlOjEwMDV9LFVOQVVUSE9SSVpFRF9NRVRIT0Q6e21lc3NhZ2U6IlVuYXV0aG9yaXplZCBtZXRob2QuIixjb2RlOjMwMDF9LFVOQVVUSE9SSVpFRF9FVkVOVDp7bWVzc2FnZToiVW5hdXRob3JpemVkIGV2ZW50LiIsY29kZTozMDAyfSxVTkFVVEhPUklaRURfVVBEQVRFX1JFUVVFU1Q6e21lc3NhZ2U6IlVuYXV0aG9yaXplZCB1cGRhdGUgcmVxdWVzdC4iLGNvZGU6MzAwM30sVU5BVVRIT1JJWkVEX0VYVEVORF9SRVFVRVNUOnttZXNzYWdlOiJVbmF1dGhvcml6ZWQgZXh0ZW5kIHJlcXVlc3QuIixjb2RlOjMwMDR9LFVTRVJfUkVKRUNURUQ6e21lc3NhZ2U6IlVzZXIgcmVqZWN0ZWQuIixjb2RlOjVlM30sVVNFUl9SRUpFQ1RFRF9DSEFJTlM6e21lc3NhZ2U6IlVzZXIgcmVqZWN0ZWQgY2hhaW5zLiIsY29kZTo1MDAxfSxVU0VSX1JFSkVDVEVEX01FVEhPRFM6e21lc3NhZ2U6IlVzZXIgcmVqZWN0ZWQgbWV0aG9kcy4iLGNvZGU6NTAwMn0sVVNFUl9SRUpFQ1RFRF9FVkVOVFM6e21lc3NhZ2U6IlVzZXIgcmVqZWN0ZWQgZXZlbnRzLiIsY29kZTo1MDAzfSxVTlNVUFBPUlRFRF9DSEFJTlM6e21lc3NhZ2U6IlVuc3VwcG9ydGVkIGNoYWlucy4iLGNvZGU6NTEwMH0sVU5TVVBQT1JURURfTUVUSE9EUzp7bWVzc2FnZToiVW5zdXBwb3J0ZWQgbWV0aG9kcy4iLGNvZGU6NTEwMX0sVU5TVVBQT1JURURfRVZFTlRTOnttZXNzYWdlOiJVbnN1cHBvcnRlZCBldmVudHMuIixjb2RlOjUxMDJ9LFVOU1VQUE9SVEVEX0FDQ09VTlRTOnttZXNzYWdlOiJVbnN1cHBvcnRlZCBhY2NvdW50cy4iLGNvZGU6NTEwM30sVU5TVVBQT1JURURfTkFNRVNQQUNFX0tFWTp7bWVzc2FnZToiVW5zdXBwb3J0ZWQgbmFtZXNwYWNlIGtleS4iLGNvZGU6NTEwNH0sVVNFUl9ESVNDT05ORUNURUQ6e21lc3NhZ2U6IlVzZXIgZGlzY29ubmVjdGVkLiIsY29kZTo2ZTN9LFNFU1NJT05fU0VUVExFTUVOVF9GQUlMRUQ6e21lc3NhZ2U6IlNlc3Npb24gc2V0dGxlbWVudCBmYWlsZWQuIixjb2RlOjdlM30sV0NfTUVUSE9EX1VOU1VQUE9SVEVEOnttZXNzYWdlOiJVbnN1cHBvcnRlZCB3Y18gbWV0aG9kLiIsY29kZToxMDAwMX19LG0zPXtOT1RfSU5JVElBTElaRUQ6e21lc3NhZ2U6Ik5vdCBpbml0aWFsaXplZC4iLGNvZGU6MX0sTk9fTUFUQ0hJTkdfS0VZOnttZXNzYWdlOiJObyBtYXRjaGluZyBrZXkuIixjb2RlOjJ9LFJFU1RPUkVfV0lMTF9PVkVSUklERTp7bWVzc2FnZToiUmVzdG9yZSB3aWxsIG92ZXJyaWRlLiIsY29kZTozfSxSRVNVQlNDUklCRUQ6e21lc3NhZ2U6IlJlc3Vic2NyaWJlZC4iLGNvZGU6NH0sTUlTU0lOR19PUl9JTlZBTElEOnttZXNzYWdlOiJNaXNzaW5nIG9yIGludmFsaWQuIixjb2RlOjV9LEVYUElSRUQ6e21lc3NhZ2U6IkV4cGlyZWQuIixjb2RlOjZ9LFVOS05PV05fVFlQRTp7bWVzc2FnZToiVW5rbm93biB0eXBlLiIsY29kZTo3fSxNSVNNQVRDSEVEX1RPUElDOnttZXNzYWdlOiJNaXNtYXRjaGVkIHRvcGljLiIsY29kZTo4fSxOT05fQ09ORk9STUlOR19OQU1FU1BBQ0VTOnttZXNzYWdlOiJOb24gY29uZm9ybWluZyBuYW1lc3BhY2VzLiIsY29kZTo5fX07ZnVuY3Rpb24gWSh0LGUpe2NvbnN0e21lc3NhZ2U6cixjb2RlOm59PW0zW3RdO3JldHVybnttZXNzYWdlOmU/YCR7cn0gJHtlfWA6cixjb2RlOm59fWZ1bmN0aW9uIHllKHQsZSl7Y29uc3R7bWVzc2FnZTpyLGNvZGU6bn09dzNbdF07cmV0dXJue21lc3NhZ2U6ZT9gJHtyfSAke2V9YDpyLGNvZGU6bn19Y29uc3QgYjM9IlJlYWN0TmF0aXZlIixwdD17cmVhY3ROYXRpdmU6InJlYWN0LW5hdGl2ZSIsbm9kZToibm9kZSIsYnJvd3NlcjoiYnJvd3NlciIsdW5rbm93bjoidW5rbm93biJ9LEUzPSJqcyI7ZnVuY3Rpb24gb28oKXtyZXR1cm4gdHlwZW9mIF90PCJ1IiYmdHlwZW9mIF90LnZlcnNpb25zPCJ1IiYmdHlwZW9mIF90LnZlcnNpb25zLm5vZGU8InUifWZ1bmN0aW9uIGVuKCl7cmV0dXJuIVNuKCkmJiEhemMoKSYmbmF2aWdhdG9yLnByb2R1Y3Q9PT1iM31mdW5jdGlvbiB2Mygpe3JldHVybiBlbigpJiZ0eXBlb2YgYWU8InUiJiZ0eXBlb2YgYWU/LlBsYXRmb3JtPCJ1IiYmYWU/LlBsYXRmb3JtLk9TPT09ImFuZHJvaWQifWZ1bmN0aW9uIHgzKCl7cmV0dXJuIGVuKCkmJnR5cGVvZiBhZTwidSImJnR5cGVvZiBhZT8uUGxhdGZvcm08InUiJiZhZT8uUGxhdGZvcm0uT1M9PT0iaW9zIn1mdW5jdGlvbiBkaSgpe3JldHVybiFvbygpJiYhIXpjKCkmJiEhU24oKX1mdW5jdGlvbiBhcygpe3JldHVybiBlbigpP3B0LnJlYWN0TmF0aXZlOm9vKCk/cHQubm9kZTpkaSgpP3B0LmJyb3dzZXI6cHQudW5rbm93bn1mdW5jdGlvbiBkaCgpe3RyeXtyZXR1cm4gZW4oKSYmdHlwZW9mIGFlPCJ1IiYmdHlwZW9mIGFlPy5BcHBsaWNhdGlvbjwidSI/YWUuQXBwbGljYXRpb24/LmFwcGxpY2F0aW9uSWQ6dm9pZCAwfWNhdGNoe3JldHVybn19ZnVuY3Rpb24gXzModCxlKXtjb25zdCByPW5ldyBVUkxTZWFyY2hQYXJhbXModCk7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLnNvcnQoKFtuXSxbaV0pPT5uLmxvY2FsZUNvbXBhcmUoaSkpLmZvckVhY2goKFtuLGldKT0+e2khPW51bGwmJnIuc2V0KG4sU3RyaW5nKGkpKX0pLHIudG9TdHJpbmcoKX1mdW5jdGlvbiBJMyh0KXtjb25zdCBlPWRnKCk7dHJ5e3JldHVybiB0Py51cmwmJmUudXJsJiZuZXcgVVJMKHQudXJsKS5ob3N0IT09bmV3IFVSTChlLnVybCkuaG9zdCYmKGNvbnNvbGUud2FybihgVGhlIGNvbmZpZ3VyZWQgV2FsbGV0Q29ubmVjdCAnbWV0YWRhdGEudXJsJzoke3QudXJsfSBkaWZmZXJzIGZyb20gdGhlIGFjdHVhbCBwYWdlIHVybDoke2UudXJsfS4gVGhpcyBpcyBwcm9iYWJseSB1bmludGVuZGVkIGFuZCBjYW4gbGVhZCB0byBpc3N1ZXMuYCksdC51cmw9ZS51cmwpLHQ/Lmljb25zPy5sZW5ndGgmJnQuaWNvbnMubGVuZ3RoPjAmJih0Lmljb25zPXQuaWNvbnMuZmlsdGVyKHI9PnIhPT0iIikpLHsuLi5lLC4uLnQsdXJsOnQ/LnVybHx8ZS51cmwsbmFtZTp0Py5uYW1lfHxlLm5hbWUsZGVzY3JpcHRpb246dD8uZGVzY3JpcHRpb258fGUuZGVzY3JpcHRpb24saWNvbnM6dD8uaWNvbnM/Lmxlbmd0aCYmdC5pY29ucy5sZW5ndGg+MD90Lmljb25zOmUuaWNvbnN9fWNhdGNoKHIpe3JldHVybiBjb25zb2xlLndhcm4oIkVycm9yIHBvcHVsYXRpbmcgYXBwIG1ldGFkYXRhIixyKSx0fHxlfX1mdW5jdGlvbiBkZygpe3JldHVybiB2ZCgpfHx7bmFtZToiIixkZXNjcmlwdGlvbjoiIix1cmw6IiIsaWNvbnM6WyIiXX19ZnVuY3Rpb24gUzMoKXtpZihhcygpPT09cHQucmVhY3ROYXRpdmUmJnR5cGVvZiBhZTwidSImJnR5cGVvZiBhZT8uUGxhdGZvcm08InUiKXtjb25zdHtPUzpyLFZlcnNpb246bn09YWUuUGxhdGZvcm07cmV0dXJuW3Isbl0uam9pbigiLSIpfWNvbnN0IHQ9SkUoKTtpZih0PT09bnVsbClyZXR1cm4idW5rbm93biI7Y29uc3QgZT10Lm9zP3Qub3MucmVwbGFjZSgiICIsIiIpLnRvTG93ZXJDYXNlKCk6InVua25vd24iO3JldHVybiB0LnR5cGU9PT0iYnJvd3NlciI/W2UsdC5uYW1lLHQudmVyc2lvbl0uam9pbigiLSIpOltlLHQudmVyc2lvbl0uam9pbigiLSIpfWZ1bmN0aW9uIEEzKCl7Y29uc3QgdD1hcygpO3JldHVybiB0PT09cHQuYnJvd3Nlcj9bdCxFZCgpPy5ob3N0fHwidW5rbm93biJdLmpvaW4oIjoiKTp0fWZ1bmN0aW9uIHBnKHQsZSxyKXtjb25zdCBuPVMzKCksaT1BMygpO3JldHVybltbdCxlXS5qb2luKCItIiksW0UzLHJdLmpvaW4oIi0iKSxuLGldLmpvaW4oIi8iKX1mdW5jdGlvbiBEMyh7cHJvdG9jb2w6dCx2ZXJzaW9uOmUscmVsYXlVcmw6cixzZGtWZXJzaW9uOm4sYXV0aDppLHByb2plY3RJZDpzLHVzZU9uQ2xvc2VFdmVudDpvLGJ1bmRsZUlkOmEscGFja2FnZU5hbWU6Y30pe2NvbnN0IHU9ci5zcGxpdCgiPyIpLGw9cGcodCxlLG4pLGg9e2F1dGg6aSx1YTpsLHByb2plY3RJZDpzLHVzZU9uQ2xvc2VFdmVudDpvLHBhY2thZ2VOYW1lOmN8fHZvaWQgMCxidW5kbGVJZDphfHx2b2lkIDB9LHA9XzModVsxXXx8IiIsaCk7cmV0dXJuIHVbMF0rIj8iK3B9ZnVuY3Rpb24gRW4odCxlKXtyZXR1cm4gdC5maWx0ZXIocj0+ZS5pbmNsdWRlcyhyKSkubGVuZ3RoPT09dC5sZW5ndGh9ZnVuY3Rpb24geWModCl7cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyh0LmVudHJpZXMoKSl9ZnVuY3Rpb24gd2ModCl7cmV0dXJuIG5ldyBNYXAoT2JqZWN0LmVudHJpZXModCkpfWZ1bmN0aW9uIGZuKHQ9Ry5GSVZFX01JTlVURVMsZSl7Y29uc3Qgcj1HLnRvTWlsaXNlY29uZHModHx8Ry5GSVZFX01JTlVURVMpO2xldCBuLGkscyxvO3JldHVybntyZXNvbHZlOmE9PntzJiZuJiYoY2xlYXJUaW1lb3V0KHMpLG4oYSksbz1Qcm9taXNlLnJlc29sdmUoYSkpfSxyZWplY3Q6YT0+e3MmJmkmJihjbGVhclRpbWVvdXQocyksaShhKSl9LGRvbmU6KCk9Pm5ldyBQcm9taXNlKChhLGMpPT57aWYobylyZXR1cm4gYShvKTtzPXNldFRpbWVvdXQoKCk9Pntjb25zdCB1PVkoIkVYUElSRUQiKSxsPW5ldyBFcnJvcihlfHx1Lm1lc3NhZ2UpO2wuY29kZT11LmNvZGUsYyhsKX0sciksbj1hLGk9Y30pfX1mdW5jdGlvbiBDdCh0LGUscil7cmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jKG4saSk9Pntjb25zdCBzPXNldFRpbWVvdXQoKCk9PmkobmV3IEVycm9yKHIpKSxlKTt0cnl7Y29uc3Qgbz1hd2FpdCB0O24obyl9Y2F0Y2gobyl7aShvKX1jbGVhclRpbWVvdXQocyl9KX1mdW5jdGlvbiBnZyh0LGUpe2lmKHR5cGVvZiBlPT0ic3RyaW5nIiYmZS5zdGFydHNXaXRoKGAke3R9OmApKXJldHVybiBlO2lmKHQudG9Mb3dlckNhc2UoKT09PSJ0b3BpYyIpe2lmKHR5cGVvZiBlIT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIG11c3QgYmUgInN0cmluZyIgZm9yIGV4cGlyZXIgdGFyZ2V0IHR5cGU6IHRvcGljJyk7cmV0dXJuYHRvcGljOiR7ZX1gfWVsc2UgaWYodC50b0xvd2VyQ2FzZSgpPT09ImlkIil7aWYodHlwZW9mIGUhPSJudW1iZXIiKXRocm93IG5ldyBFcnJvcignVmFsdWUgbXVzdCBiZSAibnVtYmVyIiBmb3IgZXhwaXJlciB0YXJnZXQgdHlwZTogaWQnKTtyZXR1cm5gaWQ6JHtlfWB9dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGV4cGlyZXIgdGFyZ2V0IHR5cGU6ICR7dH1gKX1mdW5jdGlvbiBPMyh0KXtyZXR1cm4gZ2coInRvcGljIix0KX1mdW5jdGlvbiAkMyh0KXtyZXR1cm4gZ2coImlkIix0KX1mdW5jdGlvbiB5Zyh0KXtjb25zdFtlLHJdPXQuc3BsaXQoIjoiKSxuPXtpZDp2b2lkIDAsdG9waWM6dm9pZCAwfTtpZihlPT09InRvcGljIiYmdHlwZW9mIHI9PSJzdHJpbmciKW4udG9waWM9cjtlbHNlIGlmKGU9PT0iaWQiJiZOdW1iZXIuaXNJbnRlZ2VyKE51bWJlcihyKSkpbi5pZD1OdW1iZXIocik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGFyZ2V0LCBleHBlY3RlZCBpZDpudW1iZXIgb3IgdG9waWM6c3RyaW5nLCBnb3QgJHtlfToke3J9YCk7cmV0dXJuIG59ZnVuY3Rpb24gU2UodCxlKXtyZXR1cm4gRy5mcm9tTWlsaXNlY29uZHMoRGF0ZS5ub3coKStHLnRvTWlsaXNlY29uZHModCkpfWZ1bmN0aW9uIFh0KHQpe3JldHVybiBEYXRlLm5vdygpPj1HLnRvTWlsaXNlY29uZHModCl9ZnVuY3Rpb24gbGUodCxlKXtyZXR1cm5gJHt0fSR7ZT9gOiR7ZX1gOiIifWB9ZnVuY3Rpb24gcnIodD1bXSxlPVtdKXtyZXR1cm5bLi4ubmV3IFNldChbLi4udCwuLi5lXSldfWFzeW5jIGZ1bmN0aW9uIEIzKHtpZDp0LHRvcGljOmUsd2NEZWVwTGluazpyfSl7dHJ5e2lmKCFyKXJldHVybjtjb25zdCBuPSh0eXBlb2Ygcj09InN0cmluZyI/SlNPTi5wYXJzZShyKTpyKT8uaHJlZjtpZih0eXBlb2YgbiE9InN0cmluZyIpcmV0dXJuO2NvbnN0IGk9UDMobix0LGUpLHM9YXMoKTtpZihzPT09cHQuYnJvd3Nlcil7aWYoIVNuKCk/Lmhhc0ZvY3VzKCkpe2NvbnNvbGUud2FybigiRG9jdW1lbnQgZG9lcyBub3QgaGF2ZSBmb2N1cywgc2tpcHBpbmcgZGVlcGxpbmsuIik7cmV0dXJufVQzKGkpfWVsc2Ugcz09PXB0LnJlYWN0TmF0aXZlJiZ0eXBlb2YgYWU/Lkxpbmtpbmc8InUiJiZhd2FpdCBhZS5MaW5raW5nLm9wZW5VUkwoaSl9Y2F0Y2gobil7Y29uc29sZS5lcnJvcihuKX19ZnVuY3Rpb24gUDModCxlLHIpe2NvbnN0IG49YHJlcXVlc3RJZD0ke2V9JnNlc3Npb25Ub3BpYz0ke3J9YDt0LmVuZHNXaXRoKCIvIikmJih0PXQuc2xpY2UoMCwtMSkpO2xldCBpPWAke3R9YDtpZih0LnN0YXJ0c1dpdGgoImh0dHBzOi8vdC5tZSIpKXtjb25zdCBzPXQuaW5jbHVkZXMoIj8iKT8iJnN0YXJ0YXBwPSI6Ij9zdGFydGFwcD0iO2k9YCR7aX0ke3N9JHtOMyhuLCEwKX1gfWVsc2UgaT1gJHtpfS93Yz8ke259YDtyZXR1cm4gaX1mdW5jdGlvbiBUMyh0KXtsZXQgZT0iX3NlbGYiO1UzKCk/ZT0iX3RvcCI6KEMzKCl8fHQuc3RhcnRzV2l0aCgiaHR0cHM6Ly8iKXx8dC5zdGFydHNXaXRoKCJodHRwOi8vIikpJiYoZT0iX2JsYW5rIiksd2luZG93Lm9wZW4odCxlLCJub3JlZmVycmVyIG5vb3BlbmVyIil9YXN5bmMgZnVuY3Rpb24gUjModCxlKXtsZXQgcj0iIjt0cnl7aWYoZGkoKSYmKHI9bG9jYWxTdG9yYWdlLmdldEl0ZW0oZSkscikpcmV0dXJuIHI7cj1hd2FpdCB0LmdldEl0ZW0oZSl9Y2F0Y2gobil7Y29uc29sZS5lcnJvcihuKX1yZXR1cm4gcn1mdW5jdGlvbiBwaCh0LGUpe2lmKCF0LmluY2x1ZGVzKGUpKXJldHVybiBudWxsO2NvbnN0IHI9dC5zcGxpdCgvKFsmLD8sPV0pLyksbj1yLmluZGV4T2YoZSk7cmV0dXJuIHJbbisyXX1mdW5jdGlvbiBnaCgpe3JldHVybiB0eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvPy5yYW5kb21VVUlEP2NyeXB0by5yYW5kb21VVUlEKCk6Inh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCIucmVwbGFjZSgvW3h5XS9ndSx0PT57Y29uc3QgZT1NYXRoLnJhbmRvbSgpKjE2fDA7cmV0dXJuKHQ9PT0ieCI/ZTplJjN8OCkudG9TdHJpbmcoMTYpfSl9ZnVuY3Rpb24gZHUoKXtyZXR1cm4gdHlwZW9mIF90PCJ1IiYmZzMuSVNfVklURVNUPT09InRydWUifWZ1bmN0aW9uIEMzKCl7cmV0dXJuIHR5cGVvZiB3aW5kb3c8InUiJiYoISF3aW5kb3cuVGVsZWdyYW1XZWJ2aWV3UHJveHl8fCEhd2luZG93LlRlbGVncmFtfHwhIXdpbmRvdy5UZWxlZ3JhbVdlYnZpZXdQcm94eVByb3RvKX1mdW5jdGlvbiBVMygpe3RyeXtyZXR1cm4gd2luZG93LnNlbGYhPT13aW5kb3cudG9wfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBOMyh0LGU9ITEpe2NvbnN0IHI9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHQpLG49bmV3IEFycmF5KHIubGVuZ3RoKTtmb3IobGV0IHM9MDtzPHIubGVuZ3RoO3MrKyluW3NdPVN0cmluZy5mcm9tQ2hhckNvZGUocltzXSk7Y29uc3QgaT1idG9hKG4uam9pbigiIikpO3JldHVybiBlP2kucmVwbGFjZSgvWz1dL2csIiIpOml9ZnVuY3Rpb24gd2codCl7Y29uc3QgZT10KyI9Ii5yZXBlYXQoKDQtdC5sZW5ndGglNCklNCkscj1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkoci5sZW5ndGgpO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKW5baV09ci5jaGFyQ29kZUF0KGkpO3JldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUobil9ZnVuY3Rpb24gTDModCl7cmV0dXJuIG5ldyBQcm9taXNlKGU9PnNldFRpbWVvdXQoZSx0KSl9Y2xhc3MgRjN7Y29uc3RydWN0b3Ioe2xpbWl0OmV9KXt0aGlzLmxpbWl0PWUsdGhpcy5zZXQ9bmV3IFNldH1hZGQoZSl7aWYoIXRoaXMuc2V0LmhhcyhlKSl7aWYodGhpcy5zZXQuc2l6ZT49dGhpcy5saW1pdCl7Y29uc3Qgcj10aGlzLnNldC52YWx1ZXMoKS5uZXh0KCkudmFsdWU7ciYmdGhpcy5zZXQuZGVsZXRlKHIpfXRoaXMuc2V0LmFkZChlKX19aGFzKGUpe3JldHVybiB0aGlzLnNldC5oYXMoZSl9fWNvbnN0IGszPSJodHRwczovL3JwYy53YWxsZXRjb25uZWN0Lm9yZy92MSI7ZnVuY3Rpb24gbmkodCl7Y29uc3QgZT10KyI9Ii5yZXBlYXQoKDQtdC5sZW5ndGglNCklNCkscj1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkoci5sZW5ndGgpO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKW5baV09ci5jaGFyQ29kZUF0KGkpO3JldHVybiBufWZ1bmN0aW9uIG1nKHQpe2NvbnN0IGU9YBlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZToKJHt0Lmxlbmd0aH1gLHI9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGUrdCk7cmV0dXJuIjB4IitVZShrdihyKSwiYmFzZTE2Iil9YXN5bmMgZnVuY3Rpb24gTTModCxlLHIsbixpLHMpe3N3aXRjaChyLnQpe2Nhc2UiZWlwMTkxIjpyZXR1cm4gYXdhaXQgcTModCxlLHIucyk7Y2FzZSJlaXAxMjcxIjpyZXR1cm4gYXdhaXQgajModCxlLHIucyxuLGkscyk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYHZlcmlmeVNpZ25hdHVyZSBmYWlsZWQ6IEF0dGVtcHRlZCB0byB2ZXJpZnkgQ2FjYW9TaWduYXR1cmUgd2l0aCB1bmtub3duIHR5cGU6ICR7ci50fWApfX1mdW5jdGlvbiBxMyh0LGUscil7Y29uc3Qgbj1QeChyKTtyZXR1cm4gcXgoe3BheWxvYWQ6bWcoZSksc2lnbmF0dXJlOm59KS50b0xvd2VyQ2FzZSgpPT09dC50b0xvd2VyQ2FzZSgpfWFzeW5jIGZ1bmN0aW9uIGozKHQsZSxyLG4saSxzKXtjb25zdCBvPXZyKG4pO2lmKCFvLm5hbWVzcGFjZXx8IW8ucmVmZXJlbmNlKXRocm93IG5ldyBFcnJvcihgaXNWYWxpZEVpcDEyNzFTaWduYXR1cmUgZmFpbGVkOiBjaGFpbklkIG11c3QgYmUgaW4gQ0FJUC0yIGZvcm1hdCwgcmVjZWl2ZWQ6ICR7bn1gKTt0cnl7Y29uc3QgYT0iMHgxNjI2YmE3ZSIsYz0iMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MCIsdT1yLnN1YnN0cmluZygyKSxsPSh1Lmxlbmd0aC8yKS50b1N0cmluZygxNikucGFkU3RhcnQoNjQsIjAiKSxoPShlLnN0YXJ0c1dpdGgoIjB4Iik/ZTptZyhlKSkuc3Vic3RyaW5nKDIpLHA9YStoK2MrbCt1LGc9YXdhaXQgZmV0Y2goYCR7c3x8azN9Lz9jaGFpbklkPSR7bn0mcHJvamVjdElkPSR7aX1gLHtoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LG1ldGhvZDoiUE9TVCIsYm9keTpKU09OLnN0cmluZ2lmeSh7aWQ6ejMoKSxqc29ucnBjOiIyLjAiLG1ldGhvZDoiZXRoX2NhbGwiLHBhcmFtczpbe3RvOnQsZGF0YTpwfSwibGF0ZXN0Il19KX0pLHtyZXN1bHQ6d309YXdhaXQgZy5qc29uKCk7cmV0dXJuIHc/dy5zbGljZSgwLGEubGVuZ3RoKS50b0xvd2VyQ2FzZSgpPT09YS50b0xvd2VyQ2FzZSgpOiExfWNhdGNoKGEpe3JldHVybiBjb25zb2xlLmVycm9yKCJpc1ZhbGlkRWlwMTI3MVNpZ25hdHVyZTogIixhKSwhMX19ZnVuY3Rpb24gejMoKXtyZXR1cm4gRGF0ZS5ub3coKStNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMWUzKX1mdW5jdGlvbiBIMyh0KXtjb25zdCBlPW5pKHQpLHI9ZVswXTtpZihyPT09MCl0aHJvdyBuZXcgRXJyb3IoIk5vIHNpZ25hdHVyZXMgZm91bmQiKTtjb25zdCBuPTErcio2NDtpZihlLmxlbmd0aDxuKXRocm93IG5ldyBFcnJvcigiVHJhbnNhY3Rpb24gZGF0YSB0b28gc2hvcnQgZm9yIGNsYWltZWQgc2lnbmF0dXJlIGNvdW50Iik7aWYoZS5sZW5ndGg8MTAwKXRocm93IG5ldyBFcnJvcigiVHJhbnNhY3Rpb24gdG9vIHNob3J0Iik7Y29uc3QgaT1lLnNsaWNlKDEsNjUpO3JldHVybiBzcy5lbmNvZGUoaSl9ZnVuY3Rpb24gSzModCl7Y29uc3QgZT1uaSh0KSxyPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSgiVHJhbnNhY3Rpb25EYXRhOjoiKSxuPW5ldyBVaW50OEFycmF5KHIubGVuZ3RoK2UubGVuZ3RoKTtuLnNldChyKSxuLnNldChlLHIubGVuZ3RoKTtjb25zdCBpPWdfKG4se2RrTGVuOjMyfSk7cmV0dXJuIHNzLmVuY29kZShpKX1mdW5jdGlvbiB5aCh0KXtjb25zdCBlPW5ldyBVaW50OEFycmF5KEJvKFYzKHQpKSk7cmV0dXJuIHNzLmVuY29kZShlKX1mdW5jdGlvbiBWMyh0KXtpZih0IGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gdDtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBuZXcgVWludDhBcnJheSh0KTtpZih0eXBlb2YgdD09Im9iamVjdCImJnQ/LmRhdGEpcmV0dXJuIG5ldyBVaW50OEFycmF5KE9iamVjdC52YWx1ZXModC5kYXRhKSk7aWYodHlwZW9mIHQ9PSJvYmplY3QiJiZ0KXJldHVybiBuZXcgVWludDhBcnJheShPYmplY3QudmFsdWVzKHQpKTt0aHJvdyBuZXcgRXJyb3IoImdldE5lYXJVaW50OEFycmF5RnJvbUJ5dGVzOiBVbmV4cGVjdGVkIHJlc3VsdCB0eXBlIGZyb20gYnl0ZXMgYXJyYXkiKX1mdW5jdGlvbiB3aCh0KXtjb25zdCBlPW5pKHQpLHI9WV8oZSkudHhuO2lmKCFyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzaWduZWQgdHJhbnNhY3Rpb246IG1pc3NpbmcgJ3R4bicgZmllbGQiKTtjb25zdCBuPXFfKHIpLGk9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKCJUWCIpLHM9eG4oW2ksbmV3IFVpbnQ4QXJyYXkobildKSxvPWxfKHMpO3JldHVybiBreC5lbmNvZGUobykucmVwbGFjZSgvPSskLywiIil9ZnVuY3Rpb24gT2EodCl7Y29uc3QgZT1bXTtsZXQgcj1CaWdJbnQodCk7Zm9yKDtyPj0weDgwbjspZS5wdXNoKE51bWJlcihyJjB4N2ZufDB4ODBuKSkscj4+PTduO3JldHVybiBlLnB1c2goTnVtYmVyKHIpKSxuZXcgVWludDhBcnJheShlKX1mdW5jdGlvbiBXMyh0KXtjb25zdCBlPW5pKHQuc2lnbmVkLmJvZHlCeXRlcykscj1uaSh0LnNpZ25lZC5hdXRoSW5mb0J5dGVzKSxuPW5pKHQuc2lnbmF0dXJlLnNpZ25hdHVyZSksaT1bXTtpLnB1c2gobmV3IFVpbnQ4QXJyYXkoWzEwXSkpLGkucHVzaChPYShlLmxlbmd0aCkpLGkucHVzaChlKSxpLnB1c2gobmV3IFVpbnQ4QXJyYXkoWzE4XSkpLGkucHVzaChPYShyLmxlbmd0aCkpLGkucHVzaChyKSxpLnB1c2gobmV3IFVpbnQ4QXJyYXkoWzI2XSkpLGkucHVzaChPYShuLmxlbmd0aCkpLGkucHVzaChuKTtjb25zdCBzPXhuKGkpLG89Qm8ocyk7cmV0dXJuIFVlKG8sImJhc2UxNiIpLnRvVXBwZXJDYXNlKCl9ZnVuY3Rpb24gRzModCl7Y29uc3QgZT1bXTt0cnl7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiBlLnB1c2godCksZTtpZih0eXBlb2YgdCE9Im9iamVjdCIpcmV0dXJuIGU7dD8uaWQmJmUucHVzaCh0LmlkKTtjb25zdCByPXQ/LmNhcGFiaWxpdGllcz8uY2FpcDM0NT8udHJhbnNhY3Rpb25IYXNoZXM7ciYmZS5wdXNoKC4uLnIpfWNhdGNoKHIpe2NvbnNvbGUud2FybigiZ2V0V2FsbGV0U2VuZENhbGxzSGFzaGVzIGZhaWxlZDogIixyKX1yZXR1cm4gZX1jb25zdCBiZz0iZGlkOnBraDoiLFkzPXtlaXAxNTU6IkV0aGVyZXVtIixzb2xhbmE6IlNvbGFuYSIsYmlwMTIyOiJCaXRjb2luIn0sWjM9dD0+dD9ZM1t0XXx8dDoiIixVbz10PT50Py5zcGxpdCgiOiIpLFgzPXQ9Pntjb25zdCBlPXQmJlVvKHQpO2lmKGUpcmV0dXJuIHQuaW5jbHVkZXMoYmcpP2VbM106ZVsxXX0sSjM9dD0+e2NvbnN0IGU9dCYmVW8odCk7aWYoZSlyZXR1cm4gdC5pbmNsdWRlcyhiZyk/ZVsyXTplWzBdfSxtYz10PT57Y29uc3QgZT10JiZVbyh0KTtpZihlKXJldHVybiBlWzJdKyI6IitlWzNdfSxhbz10PT57Y29uc3QgZT10JiZVbyh0KTtpZihlKXJldHVybiBlLnBvcCgpfTthc3luYyBmdW5jdGlvbiBtaCh0KXtjb25zdHtjYWNhbzplLHByb2plY3RJZDpyfT10LHtzOm4scDppfT1lO2xldCBzO3RyeXtzPUVnKGksaS5pc3MpfWNhdGNoe3JldHVybiExfWNvbnN0IG89YW8oaS5pc3MpO3JldHVybiBhd2FpdCBNMyhvLHMsbixtYyhpLmlzcykscil9Y29uc3QgRWc9KHQsZSk9Pntjb25zdCByPUozKGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpc3N1ZXI6ICIrZSk7Y29uc3Qgbj1gJHt0LmRvbWFpbn0gd2FudHMgeW91IHRvIHNpZ24gaW4gd2l0aCB5b3VyICR7WjMocil9IGFjY291bnQ6YCxpPWFvKGUpO2lmKCF0LmF1ZCYmIXQudXJpKXRocm93IG5ldyBFcnJvcigiRWl0aGVyIGBhdWRgIG9yIGB1cmlgIGlzIHJlcXVpcmVkIHRvIGNvbnN0cnVjdCB0aGUgbWVzc2FnZSIpO2xldCBzPXQuc3RhdGVtZW50fHx2b2lkIDA7Y29uc3Qgbz1gVVJJOiAke3QuYXVkfHx0LnVyaX1gLGE9YFZlcnNpb246ICR7dC52ZXJzaW9ufWAsYz1gQ2hhaW4gSUQ6ICR7WDMoZSl9YCx1PWBOb25jZTogJHt0Lm5vbmNlfWAsbD1gSXNzdWVkIEF0OiAke3QuaWF0fWAsaD10LmV4cD9gRXhwaXJhdGlvbiBUaW1lOiAke3QuZXhwfWA6dm9pZCAwLHA9dC5uYmY/YE5vdCBCZWZvcmU6ICR7dC5uYmZ9YDp2b2lkIDAsZz10LnJlcXVlc3RJZD9gUmVxdWVzdCBJRDogJHt0LnJlcXVlc3RJZH1gOnZvaWQgMCx3PXQucmVzb3VyY2VzP2BSZXNvdXJjZXM6JHt0LnJlc291cmNlcy5tYXAodj0+YAotICR7dn1gKS5qb2luKCIiKX1gOnZvaWQgMCxiPWpzKHQucmVzb3VyY2VzKTtpZihiKXtjb25zdCB2PVdpKGIpO3M9YVMocyx2KX1pZihzJiYvXHJ8XG4vLnRlc3QocykpdGhyb3cgbmV3IEVycm9yKCJTdGF0ZW1lbnQgbXVzdCBub3QgY29udGFpbiBsaW5lIGJyZWFrcyAoYFxccmAgb3IgYFxcbmApIik7cmV0dXJuW24saSwiIixzLCIiLG8sYSxjLHUsbCxoLHAsZyx3XS5maWx0ZXIodj0+diE9bnVsbCkuam9pbihgCmApfTtmdW5jdGlvbiBRMyh0KXtjb25zdCBlPUpTT04uc3RyaW5naWZ5KHQpLHI9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGUpLG49bmV3IEFycmF5KHIubGVuZ3RoKTtmb3IobGV0IGk9MDtpPHIubGVuZ3RoO2krKyluW2ldPVN0cmluZy5mcm9tQ2hhckNvZGUocltpXSk7cmV0dXJuIGJ0b2Eobi5qb2luKCIiKSl9ZnVuY3Rpb24gZVModCl7Y29uc3QgZT10KyI9Ii5yZXBlYXQoKDQtdC5sZW5ndGglNCklNCkscj1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkoci5sZW5ndGgpO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKW5baV09ci5jaGFyQ29kZUF0KGkpO3JldHVybiBKU09OLnBhcnNlKG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShuKSl9ZnVuY3Rpb24gRG4odCl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJObyByZWNhcCBwcm92aWRlZCwgdmFsdWUgaXMgdW5kZWZpbmVkIik7aWYoIXQuYXR0KXRocm93IG5ldyBFcnJvcigiTm8gYGF0dGAgcHJvcGVydHkgZm91bmQiKTtjb25zdCBlPU9iamVjdC5rZXlzKHQuYXR0KTtpZighZT8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiTm8gcmVzb3VyY2VzIGZvdW5kIGluIGBhdHRgIHByb3BlcnR5Iik7ZS5mb3JFYWNoKHI9Pntjb25zdCBuPXQuYXR0W3JdO2lmKEFycmF5LmlzQXJyYXkobikpdGhyb3cgbmV3IEVycm9yKGBSZXNvdXJjZSBtdXN0IGJlIGFuIG9iamVjdDogJHtyfWApO2lmKHR5cGVvZiBuIT0ib2JqZWN0Iil0aHJvdyBuZXcgRXJyb3IoYFJlc291cmNlIG11c3QgYmUgYW4gb2JqZWN0OiAke3J9YCk7aWYoIU9iamVjdC5rZXlzKG4pLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFJlc291cmNlIG9iamVjdCBpcyBlbXB0eTogJHtyfWApO09iamVjdC5rZXlzKG4pLmZvckVhY2goaT0+e2NvbnN0IHM9bltpXTtpZighQXJyYXkuaXNBcnJheShzKSl0aHJvdyBuZXcgRXJyb3IoYEFiaWxpdHkgbGltaXRzICR7aX0gbXVzdCBiZSBhbiBhcnJheSBvZiBvYmplY3RzLCBmb3VuZDogJHtzfWApO2lmKCFzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFZhbHVlIG9mICR7aX0gaXMgZW1wdHkgYXJyYXksIG11c3QgYmUgYW4gYXJyYXkgd2l0aCBvYmplY3RzYCk7cy5mb3JFYWNoKG89PntpZih0eXBlb2YgbyE9Im9iamVjdCIpdGhyb3cgbmV3IEVycm9yKGBBYmlsaXR5IGxpbWl0cyAoJHtpfSkgbXVzdCBiZSBhbiBhcnJheSBvZiBvYmplY3RzLCBmb3VuZDogJHtvfWApfSl9KX0pfWZ1bmN0aW9uIHRTKHQsZSxyLG49e30pe3JldHVybiByPy5zb3J0KChpLHMpPT5pLmxvY2FsZUNvbXBhcmUocykpLHthdHQ6e1t0XTpyUyhlLHIsbil9fX1mdW5jdGlvbiByUyh0LGUscj17fSl7ZT1lPy5zb3J0KChpLHMpPT5pLmxvY2FsZUNvbXBhcmUocykpO2NvbnN0IG49ZS5tYXAoaT0+KHtbYCR7dH0vJHtpfWBdOltyXX0pKTtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwuLi5uKX1mdW5jdGlvbiB2Zyh0KXtyZXR1cm4gRG4odCksYHVybjpyZWNhcDoke1EzKHQpLnJlcGxhY2UoLz0vZywiIil9YH1mdW5jdGlvbiBXaSh0KXtjb25zdCBlPWVTKHQucmVwbGFjZSgidXJuOnJlY2FwOiIsIiIpKTtyZXR1cm4gRG4oZSksZX1mdW5jdGlvbiBuUyh0LGUscil7Y29uc3Qgbj10Uyh0LGUscik7cmV0dXJuIHZnKG4pfWZ1bmN0aW9uIGlTKHQpe3JldHVybiB0JiZ0LmluY2x1ZGVzKCJ1cm46cmVjYXA6Iil9ZnVuY3Rpb24gc1ModCxlKXtjb25zdCByPVdpKHQpLG49V2koZSksaT1vUyhyLG4pO3JldHVybiB2ZyhpKX1mdW5jdGlvbiBvUyh0LGUpe0RuKHQpLERuKGUpO2NvbnN0IHI9T2JqZWN0LmtleXModC5hdHQpLmNvbmNhdChPYmplY3Qua2V5cyhlLmF0dCkpLnNvcnQoKGkscyk9PmkubG9jYWxlQ29tcGFyZShzKSksbj17YXR0Ont9fTtyZXR1cm4gci5mb3JFYWNoKGk9PntPYmplY3Qua2V5cyh0LmF0dD8uW2ldfHx7fSkuY29uY2F0KE9iamVjdC5rZXlzKGUuYXR0Py5baV18fHt9KSkuc29ydCgocyxvKT0+cy5sb2NhbGVDb21wYXJlKG8pKS5mb3JFYWNoKHM9PntuLmF0dFtpXT17Li4ubi5hdHRbaV0sW3NdOnQuYXR0W2ldPy5bc118fGUuYXR0W2ldPy5bc119fSl9KSxufWZ1bmN0aW9uIGFTKHQ9IiIsZSl7RG4oZSk7Y29uc3Qgcj0iSSBmdXJ0aGVyIGF1dGhvcml6ZSB0aGUgc3RhdGVkIFVSSSB0byBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBvbiBteSBiZWhhbGY6ICI7aWYodC5pbmNsdWRlcyhyKSlyZXR1cm4gdDtjb25zdCBuPVtdO2xldCBpPTA7T2JqZWN0LmtleXMoZS5hdHQpLmZvckVhY2goYT0+e2NvbnN0IGM9T2JqZWN0LmtleXMoZS5hdHRbYV0pLm1hcChoPT4oe2FiaWxpdHk6aC5zcGxpdCgiLyIpWzBdLGFjdGlvbjpoLnNwbGl0KCIvIilbMV19KSk7Yy5zb3J0KChoLHApPT5oLmFjdGlvbi5sb2NhbGVDb21wYXJlKHAuYWN0aW9uKSk7Y29uc3QgdT17fTtjLmZvckVhY2goaD0+e3VbaC5hYmlsaXR5XXx8KHVbaC5hYmlsaXR5XT1bXSksdVtoLmFiaWxpdHldLnB1c2goaC5hY3Rpb24pfSk7Y29uc3QgbD1PYmplY3Qua2V5cyh1KS5tYXAoaD0+KGkrKyxgKCR7aX0pICcke2h9JzogJyR7dVtoXS5qb2luKCInLCAnIil9JyBmb3IgJyR7YX0nLmApKTtuLnB1c2gobC5qb2luKCIsICIpLnJlcGxhY2UoIi4sIiwiLiIpKX0pO2NvbnN0IHM9bi5qb2luKCIgIiksbz1gJHtyfSR7c31gO3JldHVybmAke3Q/dCsiICI6IiJ9JHtvfWB9ZnVuY3Rpb24gYmgodCl7Y29uc3QgZT1XaSh0KTtEbihlKTtjb25zdCByPWUuYXR0Py5laXAxNTU7cmV0dXJuIHI/T2JqZWN0LmtleXMocikubWFwKG49Pm4uc3BsaXQoIi8iKVsxXSk6W119ZnVuY3Rpb24gRWgodCl7Y29uc3QgZT1XaSh0KTtEbihlKTtjb25zdCByPVtdO3JldHVybiBPYmplY3QudmFsdWVzKGUuYXR0KS5mb3JFYWNoKG49PntPYmplY3QudmFsdWVzKG4pLmZvckVhY2goaT0+e2k/LlswXT8uY2hhaW5zJiZyLnB1c2goaVswXS5jaGFpbnMpfSl9KSxbLi4ubmV3IFNldChyLmZsYXQoKSldfWZ1bmN0aW9uIGpzKHQpe2lmKCF0KXJldHVybjtjb25zdCBlPXQ/Llt0Lmxlbmd0aC0xXTtyZXR1cm4gaVMoZSk/ZTp2b2lkIDB9Y29uc3QgeGc9ImJhc2UxMCIsUWU9ImJhc2UxNiIsa2U9ImJhc2U2NHBhZCIsSnQ9ImJhc2U2NHVybCIsY3M9InV0ZjgiLF9nPTAseHI9MSxPbj0yLGNTPTAsdmg9MSxOaT0xMixwdT0zMjtmdW5jdGlvbiB1Uygpe2NvbnN0IHQ9cGMudXRpbHMucmFuZG9tUHJpdmF0ZUtleSgpLGU9cGMuZ2V0UHVibGljS2V5KHQpO3JldHVybntwcml2YXRlS2V5OlVlKHQsUWUpLHB1YmxpY0tleTpVZShlLFFlKX19ZnVuY3Rpb24gYmMoKXtjb25zdCB0PUNuKHB1KTtyZXR1cm4gVWUodCxRZSl9ZnVuY3Rpb24gbFModCxlKXtjb25zdCByPXBjLmdldFNoYXJlZFNlY3JldChaZSh0LFFlKSxaZShlLFFlKSksbj1kSShUbyxyLHZvaWQgMCx2b2lkIDAscHUpO3JldHVybiBVZShuLFFlKX1mdW5jdGlvbiB6cyh0KXtjb25zdCBlPVRvKFplKHQsUWUpKTtyZXR1cm4gVWUoZSxRZSl9ZnVuY3Rpb24gdnQodCl7Y29uc3QgZT1UbyhaZSh0LGNzKSk7cmV0dXJuIFVlKGUsUWUpfWZ1bmN0aW9uIElnKHQpe3JldHVybiBaZShgJHt0fWAseGcpfWZ1bmN0aW9uICRuKHQpe3JldHVybiBOdW1iZXIoVWUodCx4ZykpfWZ1bmN0aW9uIFNnKHQpe3JldHVybiB0LnJlcGxhY2UoL1wrL2csIi0iKS5yZXBsYWNlKC9cLy9nLCJfIikucmVwbGFjZSgvPS9nLCIiKX1mdW5jdGlvbiBjbyh0KXtjb25zdCBlPXQucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIikscj0oNC1lLmxlbmd0aCU0KSU0O3JldHVybiBlKyI9Ii5yZXBlYXQocil9ZnVuY3Rpb24gaFModCl7Y29uc3QgZT1JZyh0eXBlb2YgdC50eXBlPCJ1Ij90LnR5cGU6X2cpO2lmKCRuKGUpPT09eHImJnR5cGVvZiB0LnNlbmRlclB1YmxpY0tleT4idSIpdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIHNlbmRlciBwdWJsaWMga2V5IGZvciB0eXBlIDEgZW52ZWxvcGUiKTtjb25zdCByPXR5cGVvZiB0LnNlbmRlclB1YmxpY0tleTwidSI/WmUodC5zZW5kZXJQdWJsaWNLZXksUWUpOnZvaWQgMCxuPXR5cGVvZiB0Lml2PCJ1Ij9aZSh0Lml2LFFlKTpDbihOaSksaT1aZSh0LnN5bUtleSxRZSkscz0kcChpLG4pLmVuY3J5cHQoWmUodC5tZXNzYWdlLGNzKSksbz1BZyh7dHlwZTplLHNlYWxlZDpzLGl2Om4sc2VuZGVyUHVibGljS2V5OnJ9KTtyZXR1cm4gdC5lbmNvZGluZz09PUp0P1NnKG8pOm99ZnVuY3Rpb24gZlModCl7Y29uc3QgZT1aZSh0LnN5bUtleSxRZSkse3NlYWxlZDpyLGl2Om59PUdpKHtlbmNvZGVkOnQuZW5jb2RlZCxlbmNvZGluZzp0LmVuY29kaW5nfSksaT0kcChlLG4pLmRlY3J5cHQocik7aWYoaT09PW51bGwpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gZGVjcnlwdCIpO3JldHVybiBVZShpLGNzKX1mdW5jdGlvbiBkUyh0LGUpe2NvbnN0IHI9SWcoT24pLG49Q24oTmkpLGk9WmUodCxjcykscz1BZyh7dHlwZTpyLHNlYWxlZDppLGl2Om59KTtyZXR1cm4gZT09PUp0P1NnKHMpOnN9ZnVuY3Rpb24gcFModCxlKXtjb25zdHtzZWFsZWQ6cn09R2koe2VuY29kZWQ6dCxlbmNvZGluZzplfSk7cmV0dXJuIFVlKHIsY3MpfWZ1bmN0aW9uIEFnKHQpe2lmKCRuKHQudHlwZSk9PT1PbilyZXR1cm4gVWUoeG4oW3QudHlwZSx0LnNlYWxlZF0pLGtlKTtpZigkbih0LnR5cGUpPT09eHIpe2lmKHR5cGVvZiB0LnNlbmRlclB1YmxpY0tleT4idSIpdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIHNlbmRlciBwdWJsaWMga2V5IGZvciB0eXBlIDEgZW52ZWxvcGUiKTtyZXR1cm4gVWUoeG4oW3QudHlwZSx0LnNlbmRlclB1YmxpY0tleSx0Lml2LHQuc2VhbGVkXSksa2UpfXJldHVybiBVZSh4bihbdC50eXBlLHQuaXYsdC5zZWFsZWRdKSxrZSl9ZnVuY3Rpb24gR2kodCl7Y29uc3QgZT0odC5lbmNvZGluZ3x8a2UpPT09SnQ/Y28odC5lbmNvZGVkKTp0LmVuY29kZWQscj1aZShlLGtlKSxuPXIuc2xpY2UoY1MsdmgpLGk9dmg7aWYoJG4obik9PT14cil7Y29uc3QgYz1pK3B1LHU9YytOaSxsPXIuc2xpY2UoaSxjKSxoPXIuc2xpY2UoYyx1KSxwPXIuc2xpY2UodSk7cmV0dXJue3R5cGU6bixzZWFsZWQ6cCxpdjpoLHNlbmRlclB1YmxpY0tleTpsfX1pZigkbihuKT09PU9uKXtjb25zdCBjPXIuc2xpY2UoaSksdT1DbihOaSk7cmV0dXJue3R5cGU6bixzZWFsZWQ6Yyxpdjp1fX1jb25zdCBzPWkrTmksbz1yLnNsaWNlKGkscyksYT1yLnNsaWNlKHMpO3JldHVybnt0eXBlOm4sc2VhbGVkOmEsaXY6b319ZnVuY3Rpb24gZ1ModCxlKXtjb25zdCByPUdpKHtlbmNvZGVkOnQsZW5jb2Rpbmc6ZT8uZW5jb2Rpbmd9KTtyZXR1cm4gRGcoe3R5cGU6JG4oci50eXBlKSxzZW5kZXJQdWJsaWNLZXk6dHlwZW9mIHIuc2VuZGVyUHVibGljS2V5PCJ1Ij9VZShyLnNlbmRlclB1YmxpY0tleSxRZSk6dm9pZCAwLHJlY2VpdmVyUHVibGljS2V5OmU/LnJlY2VpdmVyUHVibGljS2V5fSl9ZnVuY3Rpb24gRGcodCl7Y29uc3QgZT10Py50eXBlfHxfZztpZihlPT09eHIpe2lmKHR5cGVvZiB0Py5zZW5kZXJQdWJsaWNLZXk+InUiKXRocm93IG5ldyBFcnJvcigibWlzc2luZyBzZW5kZXIgcHVibGljIGtleSIpO2lmKHR5cGVvZiB0Py5yZWNlaXZlclB1YmxpY0tleT4idSIpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nIHJlY2VpdmVyIHB1YmxpYyBrZXkiKX1yZXR1cm57dHlwZTplLHNlbmRlclB1YmxpY0tleTp0Py5zZW5kZXJQdWJsaWNLZXkscmVjZWl2ZXJQdWJsaWNLZXk6dD8ucmVjZWl2ZXJQdWJsaWNLZXl9fWZ1bmN0aW9uIHhoKHQpe3JldHVybiB0LnR5cGU9PT14ciYmdHlwZW9mIHQuc2VuZGVyUHVibGljS2V5PT0ic3RyaW5nIiYmdHlwZW9mIHQucmVjZWl2ZXJQdWJsaWNLZXk9PSJzdHJpbmcifWZ1bmN0aW9uIF9oKHQpe3JldHVybiB0LnR5cGU9PT1Pbn1mdW5jdGlvbiB5Uyh0KXtjb25zdCBlPVplKGNvKHQueCksa2UpLHI9WmUoY28odC55KSxrZSk7cmV0dXJuIHhuKFtuZXcgVWludDhBcnJheShbNF0pLGUscl0pfWZ1bmN0aW9uIHdTKHQsZSl7Y29uc3RbcixuLGldPXQuc3BsaXQoIi4iKSxzPVplKGNvKGkpLGtlKTtpZihzLmxlbmd0aCE9PTY0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzaWduYXR1cmUgbGVuZ3RoIik7Y29uc3Qgbz1zLnNsaWNlKDAsMzIpLGE9cy5zbGljZSgzMiw2NCksYz1gJHtyfS4ke259YCx1PVRvKGMpLGw9eVMoZSk7aWYoIXQzLnZlcmlmeSh4bihbbyxhXSksdSxsKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2lnbmF0dXJlIik7cmV0dXJuIGVjKHQpLnBheWxvYWR9Y29uc3QgbVM9ImlybiI7ZnVuY3Rpb24gdW8odCl7cmV0dXJuIHQ/LnJlbGF5fHx7cHJvdG9jb2w6bVN9fWZ1bmN0aW9uIEduKHQpe2NvbnN0IGU9cjNbdF07aWYodHlwZW9mIGU+InUiKXRocm93IG5ldyBFcnJvcihgUmVsYXkgUHJvdG9jb2wgbm90IHN1cHBvcnRlZDogJHt0fWApO3JldHVybiBlfWZ1bmN0aW9uIGJTKHQsZT0iLSIpe2NvbnN0IHI9e30sbj0icmVsYXkiK2U7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goaT0+e2lmKGkuc3RhcnRzV2l0aChuKSl7Y29uc3Qgcz1pLnJlcGxhY2UobiwiIiksbz10W2ldO3Jbc109b319KSxyfWZ1bmN0aW9uIEloKHQpe2lmKCF0LmluY2x1ZGVzKCJ3YzoiKSl7Y29uc3QgdT13Zyh0KTt1Py5pbmNsdWRlcygid2M6IikmJih0PXUpfXQ9dC5pbmNsdWRlcygid2M6Ly8iKT90LnJlcGxhY2UoIndjOi8vIiwiIik6dCx0PXQuaW5jbHVkZXMoIndjOiIpP3QucmVwbGFjZSgid2M6IiwiIik6dDtjb25zdCBlPXQuaW5kZXhPZigiOiIpLHI9dC5pbmRleE9mKCI/IikhPT0tMT90LmluZGV4T2YoIj8iKTp2b2lkIDAsbj10LnN1YnN0cmluZygwLGUpLGk9dC5zdWJzdHJpbmcoZSsxLHIpLnNwbGl0KCJAIikscz10eXBlb2YgcjwidSI/dC5zdWJzdHJpbmcocik6IiIsbz1uZXcgVVJMU2VhcmNoUGFyYW1zKHMpLGE9T2JqZWN0LmZyb21FbnRyaWVzKG8uZW50cmllcygpKSxjPXR5cGVvZiBhLm1ldGhvZHM9PSJzdHJpbmciP2EubWV0aG9kcy5zcGxpdCgiLCIpOnZvaWQgMDtyZXR1cm57cHJvdG9jb2w6bix0b3BpYzpFUyhpWzBdKSx2ZXJzaW9uOnBhcnNlSW50KGlbMV0sMTApLHN5bUtleTphLnN5bUtleSxyZWxheTpiUyhhKSxtZXRob2RzOmMsZXhwaXJ5VGltZXN0YW1wOmEuZXhwaXJ5VGltZXN0YW1wP3BhcnNlSW50KGEuZXhwaXJ5VGltZXN0YW1wLDEwKTp2b2lkIDB9fWZ1bmN0aW9uIEVTKHQpe3JldHVybiB0LnN0YXJ0c1dpdGgoIi8vIik/dC5zdWJzdHJpbmcoMik6dH1mdW5jdGlvbiB2Uyh0LGU9Ii0iKXtjb25zdCByPSJyZWxheSIsbj17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChpPT57Y29uc3Qgcz1pLG89citlK3M7dFtzXSYmKG5bb109dFtzXSl9KSxufWZ1bmN0aW9uIFNoKHQpe2NvbnN0IGU9bmV3IFVSTFNlYXJjaFBhcmFtcyxyPXsuLi52Uyh0LnJlbGF5KSxzeW1LZXk6dC5zeW1LZXksLi4udC5leHBpcnlUaW1lc3RhbXAmJntleHBpcnlUaW1lc3RhbXA6dC5leHBpcnlUaW1lc3RhbXAudG9TdHJpbmcoKX0sLi4udC5tZXRob2RzJiZ7bWV0aG9kczp0Lm1ldGhvZHMuam9pbigiLCIpfX07cmV0dXJuIE9iamVjdC5lbnRyaWVzKHIpLnNvcnQoKFtuXSxbaV0pPT5uLmxvY2FsZUNvbXBhcmUoaSkpLmZvckVhY2goKFtuLGldKT0+e2khPT12b2lkIDAmJmUuYXBwZW5kKG4sU3RyaW5nKGkpKX0pLGAke3QucHJvdG9jb2x9OiR7dC50b3BpY31AJHt0LnZlcnNpb259PyR7ZX1gfWZ1bmN0aW9uIEJzKHQsZSxyKXtyZXR1cm5gJHt0fT93Y19ldj0ke3J9JnRvcGljPSR7ZX1gfWZ1bmN0aW9uIHBpKHQpe2NvbnN0IGU9W107cmV0dXJuIHQuZm9yRWFjaChyPT57Y29uc3RbbixpXT1yLnNwbGl0KCI6Iik7ZS5wdXNoKGAke259OiR7aX1gKX0pLGV9ZnVuY3Rpb24gT2codCl7Y29uc3QgZT1bXTtyZXR1cm4gT2JqZWN0LnZhbHVlcyh0KS5mb3JFYWNoKHI9PntlLnB1c2goLi4ucGkoci5hY2NvdW50cykpfSksWy4uLm5ldyBTZXQoZSldfWZ1bmN0aW9uIHhTKHQpe2NvbnN0IGU9W107cmV0dXJuIE9iamVjdC52YWx1ZXModCkuZm9yRWFjaChyPT57ZS5wdXNoKC4uLnIubWV0aG9kcyl9KSxbLi4ubmV3IFNldChlKV19ZnVuY3Rpb24gX1ModCl7Y29uc3QgZT1bXTtyZXR1cm4gT2JqZWN0LnZhbHVlcyh0KS5mb3JFYWNoKHI9PntlLnB1c2goLi4uci5ldmVudHMpfSksWy4uLm5ldyBTZXQoZSldfWZ1bmN0aW9uIElTKHQsZSl7Y29uc3Qgcj1bXTtyZXR1cm4gT2JqZWN0LnZhbHVlcyh0KS5mb3JFYWNoKG49PntwaShuLmFjY291bnRzKS5pbmNsdWRlcyhlKSYmci5wdXNoKC4uLm4ubWV0aG9kcyl9KSxyfWZ1bmN0aW9uIFNTKHQsZSl7Y29uc3Qgcj1bXTtyZXR1cm4gT2JqZWN0LnZhbHVlcyh0KS5mb3JFYWNoKG49PntwaShuLmFjY291bnRzKS5pbmNsdWRlcyhlKSYmci5wdXNoKC4uLm4uZXZlbnRzKX0pLHJ9ZnVuY3Rpb24gTm8odCl7cmV0dXJuIHQuaW5jbHVkZXMoIjoiKX1mdW5jdGlvbiBZbih0KXtyZXR1cm4gTm8odCk/dC5zcGxpdCgiOiIpWzBdOnR9ZnVuY3Rpb24gQWgodCl7Y29uc3QgZT17fTtpZighbnIodCkpcmV0dXJuIGU7Zm9yKGNvbnN0W3Isbl1vZiBPYmplY3QuZW50cmllcyh0KSl7Y29uc3QgaT1ObyhyKT9bcl06bi5jaGFpbnMscz1uLm1ldGhvZHN8fFtdLG89bi5ldmVudHN8fFtdLGE9WW4ocik7ZVthXT17Li4uZVthXSxjaGFpbnM6cnIoaSxlW2FdPy5jaGFpbnMpLG1ldGhvZHM6cnIocyxlW2FdPy5tZXRob2RzKSxldmVudHM6cnIobyxlW2FdPy5ldmVudHMpfX1yZXR1cm4gZX1mdW5jdGlvbiBBUyh0KXtjb25zdCBlPXt9O3JldHVybiB0Py5mb3JFYWNoKHI9Pntjb25zdFtuLGldPXIuc3BsaXQoIjoiKTtlW25dfHwoZVtuXT17YWNjb3VudHM6W10sY2hhaW5zOltdLGV2ZW50czpbXSxtZXRob2RzOltdfSksZVtuXS5hY2NvdW50cy5wdXNoKHIpLGVbbl0uY2hhaW5zPy5wdXNoKGAke259OiR7aX1gKX0pLGV9ZnVuY3Rpb24gRGgodCxlKXtlPWUubWFwKG49Pm4ucmVwbGFjZSgiZGlkOnBraDoiLCIiKSk7Y29uc3Qgcj1BUyhlKTtmb3IoY29uc3RbbixpXW9mIE9iamVjdC5lbnRyaWVzKHIpKWkubWV0aG9kcz9pLm1ldGhvZHM9cnIoaS5tZXRob2RzLHQpOmkubWV0aG9kcz10LGkuZXZlbnRzPVsiY2hhaW5DaGFuZ2VkIiwiYWNjb3VudHNDaGFuZ2VkIl07cmV0dXJuIHJ9ZnVuY3Rpb24gRFModCxlKXtjb25zdCByPUFoKHQpLG49QWgoZSksaT17fSxzPU9iamVjdC5rZXlzKHIpLmNvbmNhdChPYmplY3Qua2V5cyhuKSk7Zm9yKGNvbnN0IG8gb2YgcylpW29dPXtjaGFpbnM6cnIocltvXT8uY2hhaW5zLG5bb10/LmNoYWlucyksbWV0aG9kczpycihyW29dPy5tZXRob2RzLG5bb10/Lm1ldGhvZHMpLGV2ZW50czpycihyW29dPy5ldmVudHMsbltvXT8uZXZlbnRzKX07cmV0dXJuIGl9ZnVuY3Rpb24gX3IodCxlKXtyZXR1cm4hIUFycmF5LmlzQXJyYXkodCl9ZnVuY3Rpb24gbnIodCl7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZih0KT09PU9iamVjdC5wcm90b3R5cGUmJk9iamVjdC5rZXlzKHQpLmxlbmd0aH1mdW5jdGlvbiBCZSh0KXtyZXR1cm4gdHlwZW9mIHQ+InUifWZ1bmN0aW9uIEFlKHQsZSl7cmV0dXJuIGUmJkJlKHQpPyEwOnR5cGVvZiB0PT0ic3RyaW5nIiYmISF0LnRyaW0oKS5sZW5ndGh9ZnVuY3Rpb24gZ3UodCxlKXtyZXR1cm4gZSYmQmUodCk/ITA6dHlwZW9mIHQ9PSJudW1iZXIiJiYhaXNOYU4odCl9ZnVuY3Rpb24gT1ModCxlKXtjb25zdHtyZXF1aXJlZE5hbWVzcGFjZXM6cn09ZSxuPU9iamVjdC5rZXlzKHQubmFtZXNwYWNlcyksaT1PYmplY3Qua2V5cyhyKTtsZXQgcz0hMDtyZXR1cm4gRW4oaSxuKT8obi5mb3JFYWNoKG89Pntjb25zdHthY2NvdW50czphLG1ldGhvZHM6YyxldmVudHM6dX09dC5uYW1lc3BhY2VzW29dLGw9cGkoYSksaD1yW29dOyghRW4oZmcobyxoKSxsKXx8IUVuKGgubWV0aG9kcyxjKXx8IUVuKGguZXZlbnRzLHUpKSYmKHM9ITEpfSkscyk6ITF9ZnVuY3Rpb24gbG8odCl7cmV0dXJuIEFlKHQsITEpJiZ0LmluY2x1ZGVzKCI6Iik/dC5zcGxpdCgiOiIpLmxlbmd0aD09PTI6ITF9ZnVuY3Rpb24gJFModCl7aWYoQWUodCwhMSkmJnQuaW5jbHVkZXMoIjoiKSl7Y29uc3QgZT10LnNwbGl0KCI6Iik7aWYoZS5sZW5ndGg9PT0zKXtjb25zdCByPWVbMF0rIjoiK2VbMV07cmV0dXJuISFlWzJdJiZsbyhyKX19cmV0dXJuITF9ZnVuY3Rpb24gQlModCl7ZnVuY3Rpb24gZShyKXt0cnl7cmV0dXJuIHR5cGVvZiBuZXcgVVJMKHIpPCJ1In1jYXRjaHtyZXR1cm4hMX19dHJ5e2lmKEFlKHQsITEpKXtpZihlKHQpKXJldHVybiEwO2NvbnN0IHI9d2codCk7cmV0dXJuIGUocil9fWNhdGNoe31yZXR1cm4hMX1mdW5jdGlvbiBQUyh0KXtyZXR1cm4gdD8ucHJvcG9zZXI/LnB1YmxpY0tleX1mdW5jdGlvbiBUUyh0KXtyZXR1cm4gdD8udG9waWN9ZnVuY3Rpb24gUlModCxlKXtsZXQgcj1udWxsO3JldHVybiBBZSh0Py5wdWJsaWNLZXksITEpfHwocj1ZKCJNSVNTSU5HX09SX0lOVkFMSUQiLGAke2V9IGNvbnRyb2xsZXIgcHVibGljIGtleSBzaG91bGQgYmUgYSBzdHJpbmdgKSkscn1mdW5jdGlvbiBPaCh0KXtsZXQgZT0hMDtyZXR1cm4gX3IodCk/dC5sZW5ndGgmJihlPXQuZXZlcnkocj0+QWUociwhMSkpKTplPSExLGV9ZnVuY3Rpb24gQ1ModCxlLHIpe2xldCBuPW51bGw7cmV0dXJuIF9yKGUpJiZlLmxlbmd0aD9lLmZvckVhY2goaT0+e258fGxvKGkpfHwobj15ZSgiVU5TVVBQT1JURURfQ0hBSU5TIixgJHtyfSwgY2hhaW4gJHtpfSBzaG91bGQgYmUgYSBzdHJpbmcgYW5kIGNvbmZvcm0gdG8gIm5hbWVzcGFjZTpjaGFpbklkIiBmb3JtYXRgKSl9KTpsbyh0KXx8KG49eWUoIlVOU1VQUE9SVEVEX0NIQUlOUyIsYCR7cn0sIGNoYWlucyBtdXN0IGJlIGRlZmluZWQgYXMgIm5hbWVzcGFjZTpjaGFpbklkIiBlLmcuICJlaXAxNTU6MSI6IHsuLi59IGluIHRoZSBuYW1lc3BhY2Uga2V5IE9SIGFzIGFuIGFycmF5IG9mIENBSVAtMiBjaGFpbklkcyBlLmcuIGVpcDE1NTogeyBjaGFpbnM6IFsiZWlwMTU1OjEiLCAiZWlwMTU1OjUiXSB9YCkpLG59ZnVuY3Rpb24gVVModCxlLHIpe2xldCBuPW51bGw7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtpLHNdKT0+e2lmKG4pcmV0dXJuO2NvbnN0IG89Q1MoaSxmZyhpLHMpLGAke2V9ICR7cn1gKTtvJiYobj1vKX0pLG59ZnVuY3Rpb24gTlModCxlKXtsZXQgcj1udWxsO3JldHVybiBfcih0KT90LmZvckVhY2gobj0+e3J8fCRTKG4pfHwocj15ZSgiVU5TVVBQT1JURURfQUNDT1VOVFMiLGAke2V9LCBhY2NvdW50ICR7bn0gc2hvdWxkIGJlIGEgc3RyaW5nIGFuZCBjb25mb3JtIHRvICJuYW1lc3BhY2U6Y2hhaW5JZDphZGRyZXNzIiBmb3JtYXRgKSl9KTpyPXllKCJVTlNVUFBPUlRFRF9BQ0NPVU5UUyIsYCR7ZX0sIGFjY291bnRzIHNob3VsZCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzIGNvbmZvcm1pbmcgdG8gIm5hbWVzcGFjZTpjaGFpbklkOmFkZHJlc3MiIGZvcm1hdGApLHJ9ZnVuY3Rpb24gTFModCxlKXtsZXQgcj1udWxsO3JldHVybiBPYmplY3QudmFsdWVzKHQpLmZvckVhY2gobj0+e2lmKHIpcmV0dXJuO2NvbnN0IGk9TlMobj8uYWNjb3VudHMsYCR7ZX0gbmFtZXNwYWNlYCk7aSYmKHI9aSl9KSxyfWZ1bmN0aW9uIEZTKHQsZSl7bGV0IHI9bnVsbDtyZXR1cm4gT2godD8ubWV0aG9kcyk/T2godD8uZXZlbnRzKXx8KHI9eWUoIlVOU1VQUE9SVEVEX0VWRU5UUyIsYCR7ZX0sIGV2ZW50cyBzaG91bGQgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyBvciBlbXB0eSBhcnJheSBmb3Igbm8gZXZlbnRzYCkpOnI9eWUoIlVOU1VQUE9SVEVEX01FVEhPRFMiLGAke2V9LCBtZXRob2RzIHNob3VsZCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzIG9yIGVtcHR5IGFycmF5IGZvciBubyBtZXRob2RzYCkscn1mdW5jdGlvbiAkZyh0LGUpe2xldCByPW51bGw7cmV0dXJuIE9iamVjdC52YWx1ZXModCkuZm9yRWFjaChuPT57aWYocilyZXR1cm47Y29uc3QgaT1GUyhuLGAke2V9LCBuYW1lc3BhY2VgKTtpJiYocj1pKX0pLHJ9ZnVuY3Rpb24ga1ModCxlLHIpe2xldCBuPW51bGw7aWYodCYmbnIodCkpe2NvbnN0IGk9JGcodCxlKTtpJiYobj1pKTtjb25zdCBzPVVTKHQsZSxyKTtzJiYobj1zKX1lbHNlIG49WSgiTUlTU0lOR19PUl9JTlZBTElEIixgJHtlfSwgJHtyfSBzaG91bGQgYmUgYW4gb2JqZWN0IHdpdGggZGF0YWApO3JldHVybiBufWZ1bmN0aW9uICRhKHQsZSl7bGV0IHI9bnVsbDtpZih0JiZucih0KSl7Y29uc3Qgbj0kZyh0LGUpO24mJihyPW4pO2NvbnN0IGk9TFModCxlKTtpJiYocj1pKX1lbHNlIHI9WSgiTUlTU0lOR19PUl9JTlZBTElEIixgJHtlfSwgbmFtZXNwYWNlcyBzaG91bGQgYmUgYW4gb2JqZWN0IHdpdGggZGF0YWApO3JldHVybiByfWZ1bmN0aW9uIEJnKHQpe3JldHVybiBBZSh0LnByb3RvY29sLCEwKX1mdW5jdGlvbiBNUyh0LGUpe2xldCByPSExO3JldHVybiB0P3QmJl9yKHQpJiZ0Lmxlbmd0aCYmdC5mb3JFYWNoKG49PntyPUJnKG4pfSk6cj0hMCxyfWZ1bmN0aW9uIHFTKHQpe3JldHVybiB0eXBlb2YgdD09Im51bWJlciJ9ZnVuY3Rpb24gbnQodCl7cmV0dXJuIHR5cGVvZiB0PCJ1IiYmdHlwZW9mIHQhPT1udWxsfWZ1bmN0aW9uIGpTKHQpe3JldHVybiEoIXR8fHR5cGVvZiB0IT0ib2JqZWN0Inx8IXQuY29kZXx8IWd1KHQuY29kZSwhMSl8fCF0Lm1lc3NhZ2V8fCFBZSh0Lm1lc3NhZ2UsITEpKX1mdW5jdGlvbiB6Uyh0KXtyZXR1cm4hKEJlKHQpfHwhQWUodC5tZXRob2QsITEpKX1mdW5jdGlvbiBIUyh0KXtyZXR1cm4hKEJlKHQpfHxCZSh0LnJlc3VsdCkmJkJlKHQuZXJyb3IpfHwhZ3UodC5pZCwhMSl8fCFBZSh0Lmpzb25ycGMsITEpKX1mdW5jdGlvbiBLUyh0KXtyZXR1cm4hKEJlKHQpfHwhQWUodC5uYW1lLCExKSl9ZnVuY3Rpb24gJGgodCxlKXtyZXR1cm4hKCFsbyhlKXx8IU9nKHQpLmluY2x1ZGVzKGUpKX1mdW5jdGlvbiBWUyh0LGUscil7cmV0dXJuIEFlKHIsITEpP0lTKHQsZSkuaW5jbHVkZXMocik6ITF9ZnVuY3Rpb24gV1ModCxlLHIpe3JldHVybiBBZShyLCExKT9TUyh0LGUpLmluY2x1ZGVzKHIpOiExfWZ1bmN0aW9uIEJoKHQsZSxyKXtsZXQgbj1udWxsO2NvbnN0IGk9R1ModCkscz1ZUyhlKSxvPU9iamVjdC5rZXlzKGkpLGE9T2JqZWN0LmtleXMocyksYz1QaChPYmplY3Qua2V5cyh0KSksdT1QaChPYmplY3Qua2V5cyhlKSksbD1jLmZpbHRlcihoPT4hdS5pbmNsdWRlcyhoKSk7cmV0dXJuIGwubGVuZ3RoJiYobj1ZKCJOT05fQ09ORk9STUlOR19OQU1FU1BBQ0VTIixgJHtyfSBuYW1lc3BhY2VzIGtleXMgZG9uJ3Qgc2F0aXNmeSByZXF1aXJlZE5hbWVzcGFjZXMuCiAgICAgIFJlcXVpcmVkOiAke2wudG9TdHJpbmcoKX0KICAgICAgUmVjZWl2ZWQ6ICR7T2JqZWN0LmtleXMoZSkudG9TdHJpbmcoKX1gKSksRW4obyxhKXx8KG49WSgiTk9OX0NPTkZPUk1JTkdfTkFNRVNQQUNFUyIsYCR7cn0gbmFtZXNwYWNlcyBjaGFpbnMgZG9uJ3Qgc2F0aXNmeSByZXF1aXJlZCBuYW1lc3BhY2VzLgogICAgICBSZXF1aXJlZDogJHtvLnRvU3RyaW5nKCl9CiAgICAgIEFwcHJvdmVkOiAke2EudG9TdHJpbmcoKX1gKSksT2JqZWN0LmtleXMoZSkuZm9yRWFjaChoPT57aWYoIWguaW5jbHVkZXMoIjoiKXx8bilyZXR1cm47Y29uc3QgcD1waShlW2hdLmFjY291bnRzKTtwLmluY2x1ZGVzKGgpfHwobj1ZKCJOT05fQ09ORk9STUlOR19OQU1FU1BBQ0VTIixgJHtyfSBuYW1lc3BhY2VzIGFjY291bnRzIGRvbid0IHNhdGlzZnkgbmFtZXNwYWNlIGFjY291bnRzIGZvciAke2h9CiAgICAgICAgUmVxdWlyZWQ6ICR7aH0KICAgICAgICBBcHByb3ZlZDogJHtwLnRvU3RyaW5nKCl9YCkpfSksby5mb3JFYWNoKGg9PntufHwoRW4oaVtoXS5tZXRob2RzLHNbaF0ubWV0aG9kcyk/RW4oaVtoXS5ldmVudHMsc1toXS5ldmVudHMpfHwobj1ZKCJOT05fQ09ORk9STUlOR19OQU1FU1BBQ0VTIixgJHtyfSBuYW1lc3BhY2VzIGV2ZW50cyBkb24ndCBzYXRpc2Z5IG5hbWVzcGFjZSBldmVudHMgZm9yICR7aH1gKSk6bj1ZKCJOT05fQ09ORk9STUlOR19OQU1FU1BBQ0VTIixgJHtyfSBuYW1lc3BhY2VzIG1ldGhvZHMgZG9uJ3Qgc2F0aXNmeSBuYW1lc3BhY2UgbWV0aG9kcyBmb3IgJHtofWApKX0pLG59ZnVuY3Rpb24gR1ModCl7Y29uc3QgZT17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChyPT57ci5pbmNsdWRlcygiOiIpP2Vbcl09dFtyXTp0W3JdLmNoYWlucz8uZm9yRWFjaChuPT57ZVtuXT17bWV0aG9kczp0W3JdLm1ldGhvZHMsZXZlbnRzOnRbcl0uZXZlbnRzfX0pfSksZX1mdW5jdGlvbiBQaCh0KXtyZXR1cm5bLi4ubmV3IFNldCh0Lm1hcChlPT5lLmluY2x1ZGVzKCI6Iik/ZS5zcGxpdCgiOiIpWzBdOmUpKV19ZnVuY3Rpb24gWVModCl7Y29uc3QgZT17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChyPT57ci5pbmNsdWRlcygiOiIpP2Vbcl09dFtyXTpwaSh0W3JdLmFjY291bnRzKT8uZm9yRWFjaChuPT57ZVtuXT17YWNjb3VudHM6dFtyXS5hY2NvdW50cy5maWx0ZXIoaT0+aS5pbmNsdWRlcyhgJHtufTpgKSksbWV0aG9kczp0W3JdLm1ldGhvZHMsZXZlbnRzOnRbcl0uZXZlbnRzfX0pfSksZX1mdW5jdGlvbiBaUyh0LGUpe3JldHVybiBndSh0LCExKSYmdDw9ZS5tYXgmJnQ+PWUubWlufWZ1bmN0aW9uIFRoKCl7Y29uc3QgdD1hcygpO3JldHVybiBuZXcgUHJvbWlzZShlPT57c3dpdGNoKHQpe2Nhc2UgcHQuYnJvd3NlcjplKFhTKCkpO2JyZWFrO2Nhc2UgcHQucmVhY3ROYXRpdmU6ZShKUygpKTticmVhaztjYXNlIHB0Lm5vZGU6ZShRUygpKTticmVhaztkZWZhdWx0OmUoITApfX0pfWZ1bmN0aW9uIFhTKCl7cmV0dXJuIGRpKCkmJm5hdmlnYXRvcj8ub25MaW5lfWFzeW5jIGZ1bmN0aW9uIEpTKCl7cmV0dXJuIGVuKCkmJnR5cGVvZiBhZTwidSImJmFlPy5OZXRJbmZvPyhhd2FpdCBhZT8uTmV0SW5mby5mZXRjaCgpKT8uaXNDb25uZWN0ZWQ6ITB9ZnVuY3Rpb24gUVMoKXtyZXR1cm4hMH1mdW5jdGlvbiBlOCh0KXtzd2l0Y2goYXMoKSl7Y2FzZSBwdC5icm93c2VyOnQ4KHQpO2JyZWFrO2Nhc2UgcHQucmVhY3ROYXRpdmU6cjgodCk7YnJlYWt9fWZ1bmN0aW9uIHQ4KHQpeyFlbigpJiZkaSgpJiYod2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm9ubGluZSIsKCk9PnQoITApKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigib2ZmbGluZSIsKCk9PnQoITEpKSl9ZnVuY3Rpb24gcjgodCl7ZW4oKSYmdHlwZW9mIGFlPCJ1IiYmYWU/Lk5ldEluZm8mJmFlPy5OZXRJbmZvLmFkZEV2ZW50TGlzdGVuZXIoZT0+dChlPy5pc0Nvbm5lY3RlZCkpfWZ1bmN0aW9uIG44KCl7cmV0dXJuIGRpKCkmJlNuKCk/U24oKT8udmlzaWJpbGl0eVN0YXRlPT09InZpc2libGUiOiEwfWNvbnN0IEJhPXt9O2NsYXNzIERpe3N0YXRpYyBnZXQoZSl7cmV0dXJuIEJhW2VdfXN0YXRpYyBzZXQoZSxyKXtCYVtlXT1yfXN0YXRpYyBkZWxldGUoZSl7ZGVsZXRlIEJhW2VdfX1mdW5jdGlvbiBpOCh0KXtjb25zdCBlPXNzLmRlY29kZSh0KTtpZihlLmxlbmd0aDwzMyl0aHJvdyBuZXcgRXJyb3IoIlRvbyBzaG9ydCB0byBjb250YWluIGEgcHVibGljIGtleSIpO3JldHVybiBlLnNsaWNlKDEsMzMpfWZ1bmN0aW9uIHM4KHtwdWJsaWNLZXk6dCxzaWduYXR1cmU6ZSxwYXlsb2FkOnJ9KXtjb25zdCBuPWhvKHIubWV0aG9kKSxpPTEyOHxwYXJzZUludChyLnZlcnNpb24/LnRvU3RyaW5nKCl8fCI0Iikscz1jOChyLmFkZHJlc3MpLG89ci5lcmE9PT0iMDAiP25ldyBVaW50OEFycmF5KFswXSk6aG8oci5lcmEpO2lmKG8ubGVuZ3RoIT09MSYmby5sZW5ndGghPT0yKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBlcmEgbGVuZ3RoIik7Y29uc3QgYT1wYXJzZUludChyLm5vbmNlLDE2KSxjPW5ldyBVaW50OEFycmF5KFthJjI1NSxhPj44JjI1NV0pLHU9QmlnSW50KGAweCR7YTgoci50aXApfWApLGw9bDgodSksaD1uZXcgVWludDhBcnJheShbMCwuLi50LHMsLi4uZSwuLi5vLC4uLmMsLi4ubCwuLi5uXSkscD11OChoLmxlbmd0aCsxKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWy4uLnAsaSwuLi5oXSl9ZnVuY3Rpb24gbzgodCl7Y29uc3QgZT1obyh0KSxyPXAzLmJsYWtlMmIoZSx2b2lkIDAsMzIpO3JldHVybiIweCIrVWUociwiYmFzZTE2Iil9ZnVuY3Rpb24gaG8odCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KHQucmVwbGFjZSgvXjB4LywiIikubWF0Y2goLy57MSwyfS9nKS5tYXAoZT0+cGFyc2VJbnQoZSwxNikpKX1mdW5jdGlvbiBhOCh0KXtyZXR1cm4gdC5zdGFydHNXaXRoKCIweCIpP3Quc2xpY2UoMik6dH1mdW5jdGlvbiBjOCh0KXtjb25zdCBlPXNzLmRlY29kZSh0KVswXTtyZXR1cm4gZT09PTQyPzA6ZT09PTYwPzI6MX1mdW5jdGlvbiB1OCh0KXtpZih0PDY0KXJldHVybiBuZXcgVWludDhBcnJheShbdDw8Ml0pO2lmKHQ8MTYzODQpe2NvbnN0IGU9dDw8MnwxO3JldHVybiBuZXcgVWludDhBcnJheShbZSYyNTUsZT4+OCYyNTVdKX1lbHNlIGlmKHQ8MTw8MzApe2NvbnN0IGU9dDw8MnwyO3JldHVybiBuZXcgVWludDhBcnJheShbZSYyNTUsZT4+OCYyNTUsZT4+MTYmMjU1LGU+PjI0JjI1NV0pfWVsc2UgdGhyb3cgbmV3IEVycm9yKCJDb21wYWN0IGVuY29kaW5nID4gMl4zMCBub3Qgc3VwcG9ydGVkIil9ZnVuY3Rpb24gbDgodCl7aWYodDwxbjw8Nm4pcmV0dXJuIG5ldyBVaW50OEFycmF5KFtOdW1iZXIodDw8Mm4pXSk7aWYodDwxbjw8MTRuKXtjb25zdCBlPXQ8PDJufDB4MDFuO3JldHVybiBuZXcgVWludDhBcnJheShbTnVtYmVyKGUmMHhmZm4pLE51bWJlcihlPj44biYweGZmbildKX1lbHNlIGlmKHQ8MW48PDMwbil7Y29uc3QgZT10PDwybnwweDAybjtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoW051bWJlcihlJjB4ZmZuKSxOdW1iZXIoZT4+OG4mMHhmZm4pLE51bWJlcihlPj4xNm4mMHhmZm4pLE51bWJlcihlPj4yNG4mMHhmZm4pXSl9ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkJpZ0ludCBjb21wYWN0IGVuY29kaW5nIG5vdCBzdXBwb3J0ZWQgPiAyXjMwIil9ZnVuY3Rpb24gaDgodCl7Y29uc3QgZT1obyh0LnNpZ25hdHVyZSkscj1pOCh0LnRyYW5zYWN0aW9uLmFkZHJlc3MpLG49czgoe3B1YmxpY0tleTpyLHNpZ25hdHVyZTplLHBheWxvYWQ6dC50cmFuc2FjdGlvbn0pLGk9VWUobiwiYmFzZTE2Iik7cmV0dXJuIG84KGkpfWNvbnN0IGY4PW5ldyBTZXQoWyJUcmFuc2ZlckZhY3RvcnlfVHJhbnNmZXIiLCJEZWxlZ2F0ZVByb3h5X1RyYW5zZmVyRmFjdG9yeV9UcmFuc2ZlciJdKTtmdW5jdGlvbiBkOCh0KXtjb25zdCBlPXQ/LmNvbW1hbmRzO2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybltdO2NvbnN0IHI9W107Zm9yKGNvbnN0IG4gb2YgZSl7Y29uc3QgaT1uPy5FeGVyY2lzZUNvbW1hbmQ7aWYoIWl8fCFmOC5oYXMoaS5jaG9pY2UpKWNvbnRpbnVlO2NvbnN0IHM9aS5jaG9pY2VBcmd1bWVudD8udHJhbnNmZXI7IXM/LmFtb3VudHx8IXM/Lmluc3RydW1lbnRJZD8uaWR8fHIucHVzaCh7YW1vdW50OlN0cmluZyhzLmFtb3VudCksaW5zdHJ1bWVudElkOlN0cmluZyhzLmluc3RydW1lbnRJZC5pZCl9KX1yZXR1cm4gcn1mdW5jdGlvbiBwOCh0LGUpe2NvbnN0IHI9ZT8ucGF5bG9hZD8udXBkYXRlSWQ7aWYoIXIpcmV0dXJuW107Y29uc3Qgbj1kOCh0KTtyZXR1cm4gbi5sZW5ndGg9PT0wP1tTdHJpbmcocildOm4ubWFwKGk9PmAke3J9OiR7aS5hbW91bnR9OiR7aS5pbnN0cnVtZW50SWR9YCl9ZnVuY3Rpb24geXUoe2xvZ2dlcjp0LG5hbWU6ZX0pe2NvbnN0IHI9dHlwZW9mIHQ9PSJzdHJpbmciP2tmKHtvcHRzOntsZXZlbDp0LG5hbWU6ZX19KS5sb2dnZXI6dDtyZXR1cm4gci5sZXZlbD10eXBlb2YgdD09InN0cmluZyI/dDp0LmxldmVsLHJ9Y29uc3QgZzg9IlBBUlNFX0VSUk9SIix5OD0iSU5WQUxJRF9SRVFVRVNUIix3OD0iTUVUSE9EX05PVF9GT1VORCIsbTg9IklOVkFMSURfUEFSQU1TIixQZz0iSU5URVJOQUxfRVJST1IiLHd1PSJTRVJWRVJfRVJST1IiLGI4PVstMzI3MDAsLTMyNjAwLC0zMjYwMSwtMzI2MDIsLTMyNjAzXSxMaT17W2c4XTp7Y29kZTotMzI3MDAsbWVzc2FnZToiUGFyc2UgZXJyb3IifSxbeThdOntjb2RlOi0zMjYwMCxtZXNzYWdlOiJJbnZhbGlkIFJlcXVlc3QifSxbdzhdOntjb2RlOi0zMjYwMSxtZXNzYWdlOiJNZXRob2Qgbm90IGZvdW5kIn0sW204XTp7Y29kZTotMzI2MDIsbWVzc2FnZToiSW52YWxpZCBwYXJhbXMifSxbUGddOntjb2RlOi0zMjYwMyxtZXNzYWdlOiJJbnRlcm5hbCBlcnJvciJ9LFt3dV06e2NvZGU6LTMyZTMsbWVzc2FnZToiU2VydmVyIGVycm9yIn19LFRnPXd1O2Z1bmN0aW9uIEU4KHQpe3JldHVybiBiOC5pbmNsdWRlcyh0KX1mdW5jdGlvbiBSaCh0KXtyZXR1cm4gT2JqZWN0LmtleXMoTGkpLmluY2x1ZGVzKHQpP0xpW3RdOkxpW1RnXX1mdW5jdGlvbiB2OCh0KXtjb25zdCBlPU9iamVjdC52YWx1ZXMoTGkpLmZpbmQocj0+ci5jb2RlPT09dCk7cmV0dXJuIGV8fExpW1RnXX1mdW5jdGlvbiBSZyh0LGUscil7cmV0dXJuIHQubWVzc2FnZS5pbmNsdWRlcygiZ2V0YWRkcmluZm8gRU5PVEZPVU5EIil8fHQubWVzc2FnZS5pbmNsdWRlcygiY29ubmVjdCBFQ09OTlJFRlVTRUQiKT9uZXcgRXJyb3IoYFVuYXZhaWxhYmxlICR7cn0gUlBDIHVybCBhdCAke2V9YCk6dH12YXIgQ2c9e30sbHI9e30sQ2g7ZnVuY3Rpb24geDgoKXtpZihDaClyZXR1cm4gbHI7Q2g9MSxPYmplY3QuZGVmaW5lUHJvcGVydHkobHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGxyLmlzQnJvd3NlckNyeXB0b0F2YWlsYWJsZT1sci5nZXRTdWJ0bGVDcnlwdG89bHIuZ2V0QnJvd2VyQ3J5cHRvPXZvaWQgMDtmdW5jdGlvbiB0KCl7cmV0dXJuKFp0PT09bnVsbHx8WnQ9PT12b2lkIDA/dm9pZCAwOlp0LmNyeXB0byl8fChadD09PW51bGx8fFp0PT09dm9pZCAwP3ZvaWQgMDpadC5tc0NyeXB0byl8fHt9fWxyLmdldEJyb3dlckNyeXB0bz10O2Z1bmN0aW9uIGUoKXtjb25zdCBuPXQoKTtyZXR1cm4gbi5zdWJ0bGV8fG4ud2Via2l0U3VidGxlfWxyLmdldFN1YnRsZUNyeXB0bz1lO2Z1bmN0aW9uIHIoKXtyZXR1cm4hIXQoKSYmISFlKCl9cmV0dXJuIGxyLmlzQnJvd3NlckNyeXB0b0F2YWlsYWJsZT1yLGxyfXZhciBocj17fSxVaDtmdW5jdGlvbiBfOCgpe2lmKFVoKXJldHVybiBocjtVaD0xLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksaHIuaXNCcm93c2VyPWhyLmlzTm9kZT1oci5pc1JlYWN0TmF0aXZlPXZvaWQgMDtmdW5jdGlvbiB0KCl7cmV0dXJuIHR5cGVvZiBkb2N1bWVudD4idSImJnR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdD09PSJSZWFjdE5hdGl2ZSJ9aHIuaXNSZWFjdE5hdGl2ZT10O2Z1bmN0aW9uIGUoKXtyZXR1cm4gdHlwZW9mIF90PCJ1IiYmdHlwZW9mIF90LnZlcnNpb25zPCJ1IiYmdHlwZW9mIF90LnZlcnNpb25zLm5vZGU8InUifWhyLmlzTm9kZT1lO2Z1bmN0aW9uIHIoKXtyZXR1cm4hdCgpJiYhZSgpfXJldHVybiBoci5pc0Jyb3dzZXI9cixocn0oZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IGU9WGk7ZS5fX2V4cG9ydFN0YXIoeDgoKSx0KSxlLl9fZXhwb3J0U3RhcihfOCgpLHQpfSkoQ2cpO2Z1bmN0aW9uIFZ0KHQ9Myl7Y29uc3QgZT1EYXRlLm5vdygpKk1hdGgucG93KDEwLHQpLHI9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk1hdGgucG93KDEwLHQpKTtyZXR1cm4gZStyfWZ1bmN0aW9uIFdyKHQ9Nil7cmV0dXJuIEJpZ0ludChWdCh0KSl9ZnVuY3Rpb24gUnQodCxlLHIpe3JldHVybntpZDpyfHxWdCgpLGpzb25ycGM6IjIuMCIsbWV0aG9kOnQscGFyYW1zOmV9fWZ1bmN0aW9uIFlpKHQsZSl7cmV0dXJue2lkOnQsanNvbnJwYzoiMi4wIixyZXN1bHQ6ZX19ZnVuY3Rpb24gTG8odCxlLHIpe3JldHVybntpZDp0LGpzb25ycGM6IjIuMCIsZXJyb3I6STgoZSl9fWZ1bmN0aW9uIEk4KHQsZSl7cmV0dXJuIHR5cGVvZiB0PiJ1Ij9SaChQZyk6KHR5cGVvZiB0PT0ic3RyaW5nIiYmKHQ9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LFJoKHd1KSkse21lc3NhZ2U6dH0pKSxFOCh0LmNvZGUpJiYodD12OCh0LmNvZGUpKSx0KX1jbGFzcyBTOHt9Y2xhc3MgQTggZXh0ZW5kcyBTOHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCl9fWNsYXNzIEQ4IGV4dGVuZHMgQTh7Y29uc3RydWN0b3IoZSl7c3VwZXIoKX19Y29uc3QgTzg9Il5odHRwcz86IiwkOD0iXndzcz86IjtmdW5jdGlvbiBCOCh0KXtjb25zdCBlPXQubWF0Y2gobmV3IFJlZ0V4cCgvXlx3KzovLCJnaSIpKTtpZighKCFlfHwhZS5sZW5ndGgpKXJldHVybiBlWzBdfWZ1bmN0aW9uIFVnKHQsZSl7Y29uc3Qgcj1COCh0KTtyZXR1cm4gdHlwZW9mIHI+InUiPyExOm5ldyBSZWdFeHAoZSkudGVzdChyKX1mdW5jdGlvbiBOaCh0KXtyZXR1cm4gVWcodCxPOCl9ZnVuY3Rpb24gTGgodCl7cmV0dXJuIFVnKHQsJDgpfWZ1bmN0aW9uIFA4KHQpe3JldHVybiBuZXcgUmVnRXhwKCJ3c3M/Oi8vbG9jYWxob3N0KDpkezIsNX0pPyIpLnRlc3QodCl9ZnVuY3Rpb24gTmcodCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmImlkImluIHQmJiJqc29ucnBjImluIHQmJnQuanNvbnJwYz09PSIyLjAifWZ1bmN0aW9uIG11KHQpe3JldHVybiBOZyh0KSYmIm1ldGhvZCJpbiB0fWZ1bmN0aW9uIEZvKHQpe3JldHVybiBOZyh0KSYmKFd0KHQpfHx4dCh0KSl9ZnVuY3Rpb24gV3QodCl7cmV0dXJuInJlc3VsdCJpbiB0fWZ1bmN0aW9uIHh0KHQpe3JldHVybiJlcnJvciJpbiB0fWxldCBidT1jbGFzcyBleHRlbmRzIEQ4e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMuZXZlbnRzPW5ldyBTdC5FdmVudEVtaXR0ZXIsdGhpcy5oYXNSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcnM9ITEsdGhpcy5jb25uZWN0aW9uPXRoaXMuc2V0Q29ubmVjdGlvbihlKSx0aGlzLmNvbm5lY3Rpb24uY29ubmVjdGVkJiZ0aGlzLnJlZ2lzdGVyRXZlbnRMaXN0ZW5lcnMoKX1hc3luYyBjb25uZWN0KGU9dGhpcy5jb25uZWN0aW9uKXthd2FpdCB0aGlzLm9wZW4oZSl9YXN5bmMgZGlzY29ubmVjdCgpe2F3YWl0IHRoaXMuY2xvc2UoKX1vbihlLHIpe3RoaXMuZXZlbnRzLm9uKGUscil9b25jZShlLHIpe3RoaXMuZXZlbnRzLm9uY2UoZSxyKX1vZmYoZSxyKXt0aGlzLmV2ZW50cy5vZmYoZSxyKX1yZW1vdmVMaXN0ZW5lcihlLHIpe3RoaXMuZXZlbnRzLnJlbW92ZUxpc3RlbmVyKGUscil9YXN5bmMgcmVxdWVzdChlLHIpe3JldHVybiB0aGlzLnJlcXVlc3RTdHJpY3QoUnQoZS5tZXRob2QsZS5wYXJhbXN8fFtdLGUuaWR8fFdyKCkudG9TdHJpbmcoKSkscil9YXN5bmMgcmVxdWVzdFN0cmljdChlLHIpe3JldHVybiBuZXcgUHJvbWlzZShhc3luYyhuLGkpPT57aWYoIXRoaXMuY29ubmVjdGlvbi5jb25uZWN0ZWQpdHJ5e2F3YWl0IHRoaXMub3BlbigpfWNhdGNoKHMpe2kocyl9dGhpcy5ldmVudHMub24oYCR7ZS5pZH1gLHM9Pnt4dChzKT9pKHMuZXJyb3IpOm4ocy5yZXN1bHQpfSk7dHJ5e2F3YWl0IHRoaXMuY29ubmVjdGlvbi5zZW5kKGUscil9Y2F0Y2gocyl7aShzKX19KX1zZXRDb25uZWN0aW9uKGU9dGhpcy5jb25uZWN0aW9uKXtyZXR1cm4gZX1vblBheWxvYWQoZSl7dGhpcy5ldmVudHMuZW1pdCgicGF5bG9hZCIsZSksRm8oZSk/dGhpcy5ldmVudHMuZW1pdChgJHtlLmlkfWAsZSk6dGhpcy5ldmVudHMuZW1pdCgibWVzc2FnZSIse3R5cGU6ZS5tZXRob2QsZGF0YTplLnBhcmFtc30pfW9uQ2xvc2UoZSl7ZSYmZS5jb2RlPT09M2UzJiZ0aGlzLmV2ZW50cy5lbWl0KCJlcnJvciIsbmV3IEVycm9yKGBXZWJTb2NrZXQgY29ubmVjdGlvbiBjbG9zZWQgYWJub3JtYWxseSB3aXRoIGNvZGU6ICR7ZS5jb2RlfSAke2UucmVhc29uP2AoJHtlLnJlYXNvbn0pYDoiIn1gKSksdGhpcy5ldmVudHMuZW1pdCgiZGlzY29ubmVjdCIpfWFzeW5jIG9wZW4oZT10aGlzLmNvbm5lY3Rpb24pe3RoaXMuY29ubmVjdGlvbj09PWUmJnRoaXMuY29ubmVjdGlvbi5jb25uZWN0ZWR8fCh0aGlzLmNvbm5lY3Rpb24uY29ubmVjdGVkJiZ0aGlzLmNsb3NlKCksdHlwZW9mIGU9PSJzdHJpbmciJiYoYXdhaXQgdGhpcy5jb25uZWN0aW9uLm9wZW4oZSksZT10aGlzLmNvbm5lY3Rpb24pLHRoaXMuY29ubmVjdGlvbj10aGlzLnNldENvbm5lY3Rpb24oZSksYXdhaXQgdGhpcy5jb25uZWN0aW9uLm9wZW4oKSx0aGlzLnJlZ2lzdGVyRXZlbnRMaXN0ZW5lcnMoKSx0aGlzLmV2ZW50cy5lbWl0KCJjb25uZWN0IikpfWFzeW5jIGNsb3NlKCl7YXdhaXQgdGhpcy5jb25uZWN0aW9uLmNsb3NlKCl9cmVnaXN0ZXJFdmVudExpc3RlbmVycygpe3RoaXMuaGFzUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJzfHwodGhpcy5jb25uZWN0aW9uLm9uKCJwYXlsb2FkIixlPT50aGlzLm9uUGF5bG9hZChlKSksdGhpcy5jb25uZWN0aW9uLm9uKCJjbG9zZSIsZT0+dGhpcy5vbkNsb3NlKGUpKSx0aGlzLmNvbm5lY3Rpb24ub24oImVycm9yIixlPT50aGlzLmV2ZW50cy5lbWl0KCJlcnJvciIsZSkpLHRoaXMuY29ubmVjdGlvbi5vbigicmVnaXN0ZXJfZXJyb3IiLGU9PnRoaXMub25DbG9zZSgpKSx0aGlzLmhhc1JlZ2lzdGVyZWRFdmVudExpc3RlbmVycz0hMCl9fTtjb25zdCBUOD0oKT0+dHlwZW9mIFdlYlNvY2tldDwidSI/V2ViU29ja2V0OnR5cGVvZiBhZTwidSImJnR5cGVvZiBhZS5XZWJTb2NrZXQ8InUiP2FlLldlYlNvY2tldDp0eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5XZWJTb2NrZXQ8InUiP3dpbmRvdy5XZWJTb2NrZXQ6dHlwZW9mIHNlbGY8InUiJiZ0eXBlb2Ygc2VsZi5XZWJTb2NrZXQ8InUiP3NlbGYuV2ViU29ja2V0OnJlcXVpcmUoIndzIiksUjg9KCk9PnR5cGVvZiBXZWJTb2NrZXQ8InUifHx0eXBlb2YgYWU8InUiJiZ0eXBlb2YgYWUuV2ViU29ja2V0PCJ1Inx8dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuV2ViU29ja2V0PCJ1Inx8dHlwZW9mIHNlbGY8InUiJiZ0eXBlb2Ygc2VsZi5XZWJTb2NrZXQ8InUiLEZoPXQ9PnQuc3BsaXQoIj8iKVswXSxraD0xMCxDOD1UOCgpO2xldCBVOD1jbGFzc3tjb25zdHJ1Y3RvcihlKXtpZih0aGlzLnVybD1lLHRoaXMuZXZlbnRzPW5ldyBTdC5FdmVudEVtaXR0ZXIsdGhpcy5yZWdpc3RlcmluZz0hMSwhTGgoZSkpdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlZCBVUkwgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBXZWJTb2NrZXQgY29ubmVjdGlvbjogJHtlfWApO3RoaXMudXJsPWV9Z2V0IGNvbm5lY3RlZCgpe3JldHVybiB0eXBlb2YgdGhpcy5zb2NrZXQ8InUifWdldCBjb25uZWN0aW5nKCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJpbmd9b24oZSxyKXt0aGlzLmV2ZW50cy5vbihlLHIpfW9uY2UoZSxyKXt0aGlzLmV2ZW50cy5vbmNlKGUscil9b2ZmKGUscil7dGhpcy5ldmVudHMub2ZmKGUscil9cmVtb3ZlTGlzdGVuZXIoZSxyKXt0aGlzLmV2ZW50cy5yZW1vdmVMaXN0ZW5lcihlLHIpfWFzeW5jIG9wZW4oZT10aGlzLnVybCl7YXdhaXQgdGhpcy5yZWdpc3RlcihlKX1hc3luYyBjbG9zZSgpe3JldHVybiBuZXcgUHJvbWlzZSgoZSxyKT0+e2lmKHR5cGVvZiB0aGlzLnNvY2tldD4idSIpe3IobmV3IEVycm9yKCJDb25uZWN0aW9uIGFscmVhZHkgY2xvc2VkIikpO3JldHVybn10aGlzLnNvY2tldC5vbmNsb3NlPW49Pnt0aGlzLm9uQ2xvc2UobiksZSgpfSx0aGlzLnNvY2tldC5jbG9zZSgpfSl9YXN5bmMgc2VuZChlKXt0eXBlb2YgdGhpcy5zb2NrZXQ+InUiJiYodGhpcy5zb2NrZXQ9YXdhaXQgdGhpcy5yZWdpc3RlcigpKTt0cnl7dGhpcy5zb2NrZXQuc2VuZChJbihlKSl9Y2F0Y2gocil7dGhpcy5vbkVycm9yKGUuaWQscil9fXJlZ2lzdGVyKGU9dGhpcy51cmwpe2lmKCFMaChlKSl0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVkIFVSTCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIFdlYlNvY2tldCBjb25uZWN0aW9uOiAke2V9YCk7aWYodGhpcy5yZWdpc3RlcmluZyl7Y29uc3Qgcj10aGlzLmV2ZW50cy5nZXRNYXhMaXN0ZW5lcnMoKTtyZXR1cm4odGhpcy5ldmVudHMubGlzdGVuZXJDb3VudCgicmVnaXN0ZXJfZXJyb3IiKT49cnx8dGhpcy5ldmVudHMubGlzdGVuZXJDb3VudCgib3BlbiIpPj1yKSYmdGhpcy5ldmVudHMuc2V0TWF4TGlzdGVuZXJzKHIrMSksbmV3IFByb21pc2UoKG4saSk9Pnt0aGlzLmV2ZW50cy5vbmNlKCJyZWdpc3Rlcl9lcnJvciIscz0+e3RoaXMucmVzZXRNYXhMaXN0ZW5lcnMoKSxpKHMpfSksdGhpcy5ldmVudHMub25jZSgib3BlbiIsKCk9PntpZih0aGlzLnJlc2V0TWF4TGlzdGVuZXJzKCksdHlwZW9mIHRoaXMuc29ja2V0PiJ1IilyZXR1cm4gaShuZXcgRXJyb3IoIldlYlNvY2tldCBjb25uZWN0aW9uIGlzIG1pc3Npbmcgb3IgaW52YWxpZCIpKTtuKHRoaXMuc29ja2V0KX0pfSl9cmV0dXJuIHRoaXMudXJsPWUsdGhpcy5yZWdpc3RlcmluZz0hMCxuZXcgUHJvbWlzZSgocixuKT0+e2NvbnN0IGk9Q2cuaXNSZWFjdE5hdGl2ZSgpP3ZvaWQgMDp7cmVqZWN0VW5hdXRob3JpemVkOiFQOChlKX0scz1uZXcgQzgoZSxbXSxpKTtSOCgpP3Mub25lcnJvcj1vPT57Y29uc3QgYT1vO24odGhpcy5lbWl0RXJyb3IoYS5lcnJvcikpfTpzLm9uKCJlcnJvciIsbz0+e24odGhpcy5lbWl0RXJyb3IobykpfSkscy5vbm9wZW49KCk9Pnt0aGlzLm9uT3BlbihzKSxyKHMpfX0pfW9uT3BlbihlKXtlLm9ubWVzc2FnZT1yPT50aGlzLm9uUGF5bG9hZChyKSxlLm9uY2xvc2U9cj0+dGhpcy5vbkNsb3NlKHIpLHRoaXMuc29ja2V0PWUsdGhpcy5yZWdpc3RlcmluZz0hMSx0aGlzLmV2ZW50cy5lbWl0KCJvcGVuIil9b25DbG9zZShlKXt0aGlzLnNvY2tldD12b2lkIDAsdGhpcy5yZWdpc3RlcmluZz0hMSx0aGlzLmV2ZW50cy5lbWl0KCJjbG9zZSIsZSl9b25QYXlsb2FkKGUpe2lmKHR5cGVvZiBlLmRhdGE+InUiKXJldHVybjtjb25zdCByPXR5cGVvZiBlLmRhdGE9PSJzdHJpbmciP19uKGUuZGF0YSk6ZS5kYXRhO3RoaXMuZXZlbnRzLmVtaXQoInBheWxvYWQiLHIpfW9uRXJyb3IoZSxyKXtjb25zdCBuPXRoaXMucGFyc2VFcnJvcihyKSxpPW4ubWVzc2FnZXx8bi50b1N0cmluZygpLHM9TG8oZSxpKTt0aGlzLmV2ZW50cy5lbWl0KCJwYXlsb2FkIixzKX1wYXJzZUVycm9yKGUscj10aGlzLnVybCl7cmV0dXJuIFJnKGUsRmgociksIldTIil9cmVzZXRNYXhMaXN0ZW5lcnMoKXt0aGlzLmV2ZW50cy5nZXRNYXhMaXN0ZW5lcnMoKT5raCYmdGhpcy5ldmVudHMuc2V0TWF4TGlzdGVuZXJzKGtoKX1lbWl0RXJyb3IoZSl7Y29uc3Qgcj10aGlzLnBhcnNlRXJyb3IobmV3IEVycm9yKGU/Lm1lc3NhZ2V8fGBXZWJTb2NrZXQgY29ubmVjdGlvbiBmYWlsZWQgZm9yIGhvc3Q6ICR7RmgodGhpcy51cmwpfWApKTtyZXR1cm4gdGhpcy5ldmVudHMuZW1pdCgicmVnaXN0ZXJfZXJyb3IiLHIpLHJ9fTtmdW5jdGlvbiBOOCh0KXtyZXR1cm4gTnVtYmVyLmlzU2FmZUludGVnZXIodCkmJnQ+PTB9ZnVuY3Rpb24gTDgodCl7cmV0dXJuIHQhPW51bGwmJnR5cGVvZiB0IT0iZnVuY3Rpb24iJiZOOCh0Lmxlbmd0aCl9ZnVuY3Rpb24gRjgodCl7cmV0dXJuIHQ9PT0iX19wcm90b19fIn1mdW5jdGlvbiBFdSh0KXtyZXR1cm4gdD09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIn1mdW5jdGlvbiBrOCh0LGUpe3JldHVybiB0PT09ZXx8TnVtYmVyLmlzTmFOKHQpJiZOdW1iZXIuaXNOYU4oZSl9ZnVuY3Rpb24gZm8odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGU9Pk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh0LGUpKX1mdW5jdGlvbiBaaSh0KXtyZXR1cm4gdD09bnVsbD90PT09dm9pZCAwPyJbb2JqZWN0IFVuZGVmaW5lZF0iOiJbb2JqZWN0IE51bGxdIjpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9Y29uc3QgTGc9IltvYmplY3QgUmVnRXhwXSIsdnU9IltvYmplY3QgU3RyaW5nXSIseHU9IltvYmplY3QgTnVtYmVyXSIsX3U9IltvYmplY3QgQm9vbGVhbl0iLHBvPSJbb2JqZWN0IEFyZ3VtZW50c10iLEZnPSJbb2JqZWN0IFN5bWJvbF0iLGtnPSJbb2JqZWN0IERhdGVdIixNZz0iW29iamVjdCBNYXBdIixxZz0iW29iamVjdCBTZXRdIixqZz0iW29iamVjdCBBcnJheV0iLE04PSJbb2JqZWN0IEZ1bmN0aW9uXSIsemc9IltvYmplY3QgQXJyYXlCdWZmZXJdIixGaT0iW29iamVjdCBPYmplY3RdIixxOD0iW29iamVjdCBFcnJvcl0iLEhnPSJbb2JqZWN0IERhdGFWaWV3XSIsS2c9IltvYmplY3QgVWludDhBcnJheV0iLFZnPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsV2c9IltvYmplY3QgVWludDE2QXJyYXldIixHZz0iW29iamVjdCBVaW50MzJBcnJheV0iLGo4PSJbb2JqZWN0IEJpZ1VpbnQ2NEFycmF5XSIsWWc9IltvYmplY3QgSW50OEFycmF5XSIsWmc9IltvYmplY3QgSW50MTZBcnJheV0iLFhnPSJbb2JqZWN0IEludDMyQXJyYXldIix6OD0iW29iamVjdCBCaWdJbnQ2NEFycmF5XSIsSmc9IltvYmplY3QgRmxvYXQzMkFycmF5XSIsUWc9IltvYmplY3QgRmxvYXQ2NEFycmF5XSI7ZnVuY3Rpb24gSXUodCl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgRGF0YVZpZXcpfWZ1bmN0aW9uIEg4KHQsZSl7cmV0dXJuIFpuKHQsdm9pZCAwLHQsbmV3IE1hcCxlKX1mdW5jdGlvbiBabih0LGUscixuPW5ldyBNYXAsaT12b2lkIDApe2NvbnN0IHM9aT8uKHQsZSxyLG4pO2lmKHMhPT12b2lkIDApcmV0dXJuIHM7aWYoRXUodCkpcmV0dXJuIHQ7aWYobi5oYXModCkpcmV0dXJuIG4uZ2V0KHQpO2lmKEFycmF5LmlzQXJyYXkodCkpe2NvbnN0IG89bmV3IEFycmF5KHQubGVuZ3RoKTtuLnNldCh0LG8pO2ZvcihsZXQgYT0wO2E8dC5sZW5ndGg7YSsrKW9bYV09Wm4odFthXSxhLHIsbixpKTtyZXR1cm4gT2JqZWN0Lmhhc093bih0LCJpbmRleCIpJiYoby5pbmRleD10LmluZGV4KSxPYmplY3QuaGFzT3duKHQsImlucHV0IikmJihvLmlucHV0PXQuaW5wdXQpLG99aWYodCBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKHQuZ2V0VGltZSgpKTtpZih0IGluc3RhbmNlb2YgUmVnRXhwKXtjb25zdCBvPW5ldyBSZWdFeHAodC5zb3VyY2UsdC5mbGFncyk7cmV0dXJuIG8ubGFzdEluZGV4PXQubGFzdEluZGV4LG99aWYodCBpbnN0YW5jZW9mIE1hcCl7Y29uc3Qgbz1uZXcgTWFwO24uc2V0KHQsbyk7Zm9yKGNvbnN0W2EsY11vZiB0KW8uc2V0KGEsWm4oYyxhLHIsbixpKSk7cmV0dXJuIG99aWYodCBpbnN0YW5jZW9mIFNldCl7Y29uc3Qgbz1uZXcgU2V0O24uc2V0KHQsbyk7Zm9yKGNvbnN0IGEgb2YgdClvLmFkZChabihhLHZvaWQgMCxyLG4saSkpO3JldHVybiBvfWlmKHR5cGVvZiB0cjwidSImJnRyLmlzQnVmZmVyKHQpKXJldHVybiB0LnN1YmFycmF5KCk7aWYoSXUodCkpe2NvbnN0IG89bmV3KE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY29uc3RydWN0b3IodC5sZW5ndGgpO24uc2V0KHQsbyk7Zm9yKGxldCBhPTA7YTx0Lmxlbmd0aDthKyspb1thXT1abih0W2FdLGEscixuLGkpO3JldHVybiBvfWlmKHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1IiYmdCBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyKXJldHVybiB0LnNsaWNlKDApO2lmKHQgaW5zdGFuY2VvZiBEYXRhVmlldyl7Y29uc3Qgbz1uZXcgRGF0YVZpZXcodC5idWZmZXIuc2xpY2UoMCksdC5ieXRlT2Zmc2V0LHQuYnl0ZUxlbmd0aCk7cmV0dXJuIG4uc2V0KHQsbyksVHQobyx0LHIsbixpKSxvfWlmKHR5cGVvZiBGaWxlPCJ1IiYmdCBpbnN0YW5jZW9mIEZpbGUpe2NvbnN0IG89bmV3IEZpbGUoW3RdLHQubmFtZSx7dHlwZTp0LnR5cGV9KTtyZXR1cm4gbi5zZXQodCxvKSxUdChvLHQscixuLGkpLG99aWYodHlwZW9mIEJsb2I8InUiJiZ0IGluc3RhbmNlb2YgQmxvYil7Y29uc3Qgbz1uZXcgQmxvYihbdF0se3R5cGU6dC50eXBlfSk7cmV0dXJuIG4uc2V0KHQsbyksVHQobyx0LHIsbixpKSxvfWlmKHQgaW5zdGFuY2VvZiBFcnJvcil7Y29uc3Qgbz1zdHJ1Y3R1cmVkQ2xvbmUodCk7cmV0dXJuIG4uc2V0KHQsbyksby5tZXNzYWdlPXQubWVzc2FnZSxvLm5hbWU9dC5uYW1lLG8uc3RhY2s9dC5zdGFjayxvLmNhdXNlPXQuY2F1c2Usby5jb25zdHJ1Y3Rvcj10LmNvbnN0cnVjdG9yLFR0KG8sdCxyLG4saSksb31pZih0IGluc3RhbmNlb2YgQm9vbGVhbil7Y29uc3Qgbz1uZXcgQm9vbGVhbih0LnZhbHVlT2YoKSk7cmV0dXJuIG4uc2V0KHQsbyksVHQobyx0LHIsbixpKSxvfWlmKHQgaW5zdGFuY2VvZiBOdW1iZXIpe2NvbnN0IG89bmV3IE51bWJlcih0LnZhbHVlT2YoKSk7cmV0dXJuIG4uc2V0KHQsbyksVHQobyx0LHIsbixpKSxvfWlmKHQgaW5zdGFuY2VvZiBTdHJpbmcpe2NvbnN0IG89bmV3IFN0cmluZyh0LnZhbHVlT2YoKSk7cmV0dXJuIG4uc2V0KHQsbyksVHQobyx0LHIsbixpKSxvfWlmKHR5cGVvZiB0PT0ib2JqZWN0IiYmSzgodCkpe2NvbnN0IG89T2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpO3JldHVybiBuLnNldCh0LG8pLFR0KG8sdCxyLG4saSksb31yZXR1cm4gdH1mdW5jdGlvbiBUdCh0LGUscj10LG4saSl7Y29uc3Qgcz1bLi4uT2JqZWN0LmtleXMoZSksLi4uZm8oZSldO2ZvcihsZXQgbz0wO288cy5sZW5ndGg7bysrKXtjb25zdCBhPXNbb10sYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsYSk7KGM9PW51bGx8fGMud3JpdGFibGUpJiYodFthXT1abihlW2FdLGEscixuLGkpKX19ZnVuY3Rpb24gSzgodCl7c3dpdGNoKFppKHQpKXtjYXNlIHBvOmNhc2Ugamc6Y2FzZSB6ZzpjYXNlIEhnOmNhc2UgX3U6Y2FzZSBrZzpjYXNlIEpnOmNhc2UgUWc6Y2FzZSBZZzpjYXNlIFpnOmNhc2UgWGc6Y2FzZSBNZzpjYXNlIHh1OmNhc2UgRmk6Y2FzZSBMZzpjYXNlIHFnOmNhc2UgdnU6Y2FzZSBGZzpjYXNlIEtnOmNhc2UgVmc6Y2FzZSBXZzpjYXNlIEdnOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIFY4KHQsZSl7cmV0dXJuIEg4KHQsKHIsbixpLHMpPT57aWYodHlwZW9mIHQ9PSJvYmplY3QiKXtpZihaaSh0KT09PUZpJiZ0eXBlb2YgdC5jb25zdHJ1Y3RvciE9ImZ1bmN0aW9uIil7Y29uc3Qgbz17fTtyZXR1cm4gcy5zZXQodCxvKSxUdChvLHQsaSxzKSxvfXN3aXRjaChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpe2Nhc2UgeHU6Y2FzZSB2dTpjYXNlIF91Ontjb25zdCBvPW5ldyB0LmNvbnN0cnVjdG9yKHQ/LnZhbHVlT2YoKSk7cmV0dXJuIFR0KG8sdCksb31jYXNlIHBvOntjb25zdCBvPXt9O3JldHVybiBUdChvLHQpLG8ubGVuZ3RoPXQubGVuZ3RoLG9bU3ltYm9sLml0ZXJhdG9yXT10W1N5bWJvbC5pdGVyYXRvcl0sb31kZWZhdWx0OnJldHVybn19fSl9ZnVuY3Rpb24gTWgodCl7cmV0dXJuIFY4KHQpfWZ1bmN0aW9uIHFoKHQpe3JldHVybiB0IT09bnVsbCYmdHlwZW9mIHQ9PSJvYmplY3QiJiZaaSh0KT09PSJbb2JqZWN0IEFyZ3VtZW50c10ifWZ1bmN0aW9uIEVjKHQpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsfWZ1bmN0aW9uIFc4KHQpe3JldHVybiBFYyh0KSYmTDgodCl9ZnVuY3Rpb24gamgodCl7aWYoIXR8fHR5cGVvZiB0IT0ib2JqZWN0IilyZXR1cm4hMTtjb25zdCBlPU9iamVjdC5nZXRQcm90b3R5cGVPZih0KTtyZXR1cm4gZT09PW51bGx8fGU9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1udWxsP09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT09PSJbb2JqZWN0IE9iamVjdF0iOiExfWZ1bmN0aW9uIEc4KHQsZSxyKXtyZXR1cm4gQ2kodCxlLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxyKX1mdW5jdGlvbiBDaSh0LGUscixuLGkscyxvKXtjb25zdCBhPW8odCxlLHIsbixpLHMpO2lmKGEhPT12b2lkIDApcmV0dXJuIGE7aWYodHlwZW9mIHQ9PXR5cGVvZiBlKXN3aXRjaCh0eXBlb2YgdCl7Y2FzZSJiaWdpbnQiOmNhc2Uic3RyaW5nIjpjYXNlImJvb2xlYW4iOmNhc2Uic3ltYm9sIjpjYXNlInVuZGVmaW5lZCI6cmV0dXJuIHQ9PT1lO2Nhc2UibnVtYmVyIjpyZXR1cm4gdD09PWV8fE9iamVjdC5pcyh0LGUpO2Nhc2UiZnVuY3Rpb24iOnJldHVybiB0PT09ZTtjYXNlIm9iamVjdCI6cmV0dXJuIGtpKHQsZSxzLG8pfXJldHVybiBraSh0LGUscyxvKX1mdW5jdGlvbiBraSh0LGUscixuKXtpZihPYmplY3QuaXModCxlKSlyZXR1cm4hMDtsZXQgaT1aaSh0KSxzPVppKGUpO2lmKGk9PT1wbyYmKGk9RmkpLHM9PT1wbyYmKHM9RmkpLGkhPT1zKXJldHVybiExO3N3aXRjaChpKXtjYXNlIHZ1OnJldHVybiB0LnRvU3RyaW5nKCk9PT1lLnRvU3RyaW5nKCk7Y2FzZSB4dTp7Y29uc3QgYz10LnZhbHVlT2YoKSx1PWUudmFsdWVPZigpO3JldHVybiBrOChjLHUpfWNhc2UgX3U6Y2FzZSBrZzpjYXNlIEZnOnJldHVybiBPYmplY3QuaXModC52YWx1ZU9mKCksZS52YWx1ZU9mKCkpO2Nhc2UgTGc6cmV0dXJuIHQuc291cmNlPT09ZS5zb3VyY2UmJnQuZmxhZ3M9PT1lLmZsYWdzO2Nhc2UgTTg6cmV0dXJuIHQ9PT1lfXI9cj8/bmV3IE1hcDtjb25zdCBvPXIuZ2V0KHQpLGE9ci5nZXQoZSk7aWYobyE9bnVsbCYmYSE9bnVsbClyZXR1cm4gbz09PWU7ci5zZXQodCxlKSxyLnNldChlLHQpO3RyeXtzd2l0Y2goaSl7Y2FzZSBNZzp7aWYodC5zaXplIT09ZS5zaXplKXJldHVybiExO2Zvcihjb25zdFtjLHVdb2YgdC5lbnRyaWVzKCkpaWYoIWUuaGFzKGMpfHwhQ2kodSxlLmdldChjKSxjLHQsZSxyLG4pKXJldHVybiExO3JldHVybiEwfWNhc2UgcWc6e2lmKHQuc2l6ZSE9PWUuc2l6ZSlyZXR1cm4hMTtjb25zdCBjPUFycmF5LmZyb20odC52YWx1ZXMoKSksdT1BcnJheS5mcm9tKGUudmFsdWVzKCkpO2ZvcihsZXQgbD0wO2w8Yy5sZW5ndGg7bCsrKXtjb25zdCBoPWNbbF0scD11LmZpbmRJbmRleChnPT5DaShoLGcsdm9pZCAwLHQsZSxyLG4pKTtpZihwPT09LTEpcmV0dXJuITE7dS5zcGxpY2UocCwxKX1yZXR1cm4hMH1jYXNlIGpnOmNhc2UgS2c6Y2FzZSBWZzpjYXNlIFdnOmNhc2UgR2c6Y2FzZSBqODpjYXNlIFlnOmNhc2UgWmc6Y2FzZSBYZzpjYXNlIHo4OmNhc2UgSmc6Y2FzZSBRZzp7aWYodHlwZW9mIHRyPCJ1IiYmdHIuaXNCdWZmZXIodCkhPT10ci5pc0J1ZmZlcihlKXx8dC5sZW5ndGghPT1lLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGM9MDtjPHQubGVuZ3RoO2MrKylpZighQ2kodFtjXSxlW2NdLGMsdCxlLHIsbikpcmV0dXJuITE7cmV0dXJuITB9Y2FzZSB6ZzpyZXR1cm4gdC5ieXRlTGVuZ3RoIT09ZS5ieXRlTGVuZ3RoPyExOmtpKG5ldyBVaW50OEFycmF5KHQpLG5ldyBVaW50OEFycmF5KGUpLHIsbik7Y2FzZSBIZzpyZXR1cm4gdC5ieXRlTGVuZ3RoIT09ZS5ieXRlTGVuZ3RofHx0LmJ5dGVPZmZzZXQhPT1lLmJ5dGVPZmZzZXQ/ITE6a2kobmV3IFVpbnQ4QXJyYXkodCksbmV3IFVpbnQ4QXJyYXkoZSkscixuKTtjYXNlIHE4OnJldHVybiB0Lm5hbWU9PT1lLm5hbWUmJnQubWVzc2FnZT09PWUubWVzc2FnZTtjYXNlIEZpOntpZighKGtpKHQuY29uc3RydWN0b3IsZS5jb25zdHJ1Y3RvcixyLG4pfHxqaCh0KSYmamgoZSkpKXJldHVybiExO2NvbnN0IHU9Wy4uLk9iamVjdC5rZXlzKHQpLC4uLmZvKHQpXSxsPVsuLi5PYmplY3Qua2V5cyhlKSwuLi5mbyhlKV07aWYodS5sZW5ndGghPT1sLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGg9MDtoPHUubGVuZ3RoO2grKyl7Y29uc3QgcD11W2hdLGc9dFtwXTtpZighT2JqZWN0Lmhhc093bihlLHApKXJldHVybiExO2NvbnN0IHc9ZVtwXTtpZighQ2koZyx3LHAsdCxlLHIsbikpcmV0dXJuITF9cmV0dXJuITB9ZGVmYXVsdDpyZXR1cm4hMX19ZmluYWxseXtyLmRlbGV0ZSh0KSxyLmRlbGV0ZShlKX19ZnVuY3Rpb24gZTAoKXt9ZnVuY3Rpb24gWTgodCxlKXtyZXR1cm4gRzgodCxlLGUwKX1mdW5jdGlvbiBQYSh0KXtyZXR1cm4gSXUodCl9ZnVuY3Rpb24gVGEodCl7aWYodHlwZW9mIHQhPSJvYmplY3QifHx0PT1udWxsKXJldHVybiExO2lmKE9iamVjdC5nZXRQcm90b3R5cGVPZih0KT09PW51bGwpcmV0dXJuITA7aWYoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpIT09IltvYmplY3QgT2JqZWN0XSIpe2NvbnN0IHI9dFtTeW1ib2wudG9TdHJpbmdUYWddO3JldHVybiByPT1udWxsfHwhT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LFN5bWJvbC50b1N0cmluZ1RhZyk/LndyaXRhYmxlPyExOnQudG9TdHJpbmcoKT09PWBbb2JqZWN0ICR7cn1dYH1sZXQgZT10O2Zvcig7T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpIT09bnVsbDspZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZih0KT09PWV9ZnVuY3Rpb24gWjgodCl7aWYoRXUodCkpcmV0dXJuIHQ7aWYoQXJyYXkuaXNBcnJheSh0KXx8SXUodCl8fHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1IiYmdCBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyKXJldHVybiB0LnNsaWNlKDApO2NvbnN0IGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpO2lmKGU9PW51bGwpcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShlKSx0KTtjb25zdCByPWUuY29uc3RydWN0b3I7aWYodCBpbnN0YW5jZW9mIERhdGV8fHQgaW5zdGFuY2VvZiBNYXB8fHQgaW5zdGFuY2VvZiBTZXQpcmV0dXJuIG5ldyByKHQpO2lmKHQgaW5zdGFuY2VvZiBSZWdFeHApe2NvbnN0IG49bmV3IHIodCk7cmV0dXJuIG4ubGFzdEluZGV4PXQubGFzdEluZGV4LG59aWYodCBpbnN0YW5jZW9mIERhdGFWaWV3KXJldHVybiBuZXcgcih0LmJ1ZmZlci5zbGljZSgwKSk7aWYodCBpbnN0YW5jZW9mIEVycm9yKXtsZXQgbjtyZXR1cm4gdCBpbnN0YW5jZW9mIEFnZ3JlZ2F0ZUVycm9yP249bmV3IHIodC5lcnJvcnMsdC5tZXNzYWdlLHtjYXVzZTp0LmNhdXNlfSk6bj1uZXcgcih0Lm1lc3NhZ2Use2NhdXNlOnQuY2F1c2V9KSxuLnN0YWNrPXQuc3RhY2ssT2JqZWN0LmFzc2lnbihuLHQpLG59aWYodHlwZW9mIEZpbGU8InUiJiZ0IGluc3RhbmNlb2YgRmlsZSlyZXR1cm4gbmV3IHIoW3RdLHQubmFtZSx7dHlwZTp0LnR5cGUsbGFzdE1vZGlmaWVkOnQubGFzdE1vZGlmaWVkfSk7aWYodHlwZW9mIHQ9PSJvYmplY3QiKXtjb25zdCBuPU9iamVjdC5jcmVhdGUoZSk7cmV0dXJuIE9iamVjdC5hc3NpZ24obix0KX1yZXR1cm4gdH1mdW5jdGlvbiBYOCh0LC4uLmUpe2NvbnN0IHI9ZS5zbGljZSgwLC0xKSxuPWVbZS5sZW5ndGgtMV07bGV0IGk9dDtmb3IobGV0IHM9MDtzPHIubGVuZ3RoO3MrKyl7Y29uc3Qgbz1yW3NdO2k9SHMoaSxvLG4sbmV3IE1hcCl9cmV0dXJuIGl9ZnVuY3Rpb24gSHModCxlLHIsbil7aWYoRXUodCkmJih0PU9iamVjdCh0KSksZT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiKXJldHVybiB0O2lmKG4uaGFzKGUpKXJldHVybiBaOChuLmdldChlKSk7aWYobi5zZXQoZSx0KSxBcnJheS5pc0FycmF5KGUpKXtlPWUuc2xpY2UoKTtmb3IobGV0IHM9MDtzPGUubGVuZ3RoO3MrKyllW3NdPWVbc10/P3ZvaWQgMH1jb25zdCBpPVsuLi5PYmplY3Qua2V5cyhlKSwuLi5mbyhlKV07Zm9yKGxldCBzPTA7czxpLmxlbmd0aDtzKyspe2NvbnN0IG89aVtzXTtpZihGOChvKSljb250aW51ZTtsZXQgYT1lW29dLGM9dFtvXTtpZihxaChhKSYmKGE9ey4uLmF9KSxxaChjKSYmKGM9ey4uLmN9KSx0eXBlb2YgdHI8InUiJiZ0ci5pc0J1ZmZlcihhKSYmKGE9TWgoYSkpLEFycmF5LmlzQXJyYXkoYSkpaWYoQXJyYXkuaXNBcnJheShjKSl7Y29uc3QgbD1bXSxoPVJlZmxlY3Qub3duS2V5cyhjKTtmb3IobGV0IHA9MDtwPGgubGVuZ3RoO3ArKyl7Y29uc3QgZz1oW3BdO2xbZ109Y1tnXX1jPWx9ZWxzZSBpZihXOChjKSl7Y29uc3QgbD1bXTtmb3IobGV0IGg9MDtoPGMubGVuZ3RoO2grKylsW2hdPWNbaF07Yz1sfWVsc2UgYz1bXTtjb25zdCB1PXIoYyxhLG8sdCxlLG4pO3UhPT12b2lkIDA/dFtvXT11OkFycmF5LmlzQXJyYXkoYSl8fEVjKGMpJiZFYyhhKSYmKFRhKGMpfHxUYShhKXx8UGEoYyl8fFBhKGEpKT90W29dPUhzKGMsYSxyLG4pOmM9PW51bGwmJlRhKGEpP3Rbb109SHMoe30sYSxyLG4pOmM9PW51bGwmJlBhKGEpP3Rbb109TWgoYSk6KGM9PT12b2lkIDB8fGEhPT12b2lkIDApJiYodFtvXT1hKX1yZXR1cm4gdH1mdW5jdGlvbiBKOCh0LC4uLmUpe3JldHVybiBYOCh0LC4uLmUsZTApfXZhciBROD17fTtjb25zdCB0MD0id2MiLHIwPTIsdmM9ImNvcmUiLGlyPWAke3QwfUAyOiR7dmN9OmAsZUE9e2xvZ2dlcjoiZXJyb3IifSx0QT17ZGF0YWJhc2U6IjptZW1vcnk6In0sckE9ImNyeXB0byIsemg9ImNsaWVudF9lZDI1NTE5X3NlZWQiLG5BPUcuT05FX0RBWSxpQT0ia2V5Y2hhaW4iLHNBPSIwLjMiLG9BPSJtZXNzYWdlcyIsYUE9IjAuMyIsY0E9Ry5TSVhfSE9VUlMsdUE9InB1Ymxpc2hlciIsbjA9ImlybiIsbEE9ImVycm9yIixpMD0id3NzOi8vcmVsYXkud2FsbGV0Y29ubmVjdC5vcmciLGhBPSJyZWxheWVyIix2ZT17bWVzc2FnZToicmVsYXllcl9tZXNzYWdlIixtZXNzYWdlX2FjazoicmVsYXllcl9tZXNzYWdlX2FjayIsY29ubmVjdDoicmVsYXllcl9jb25uZWN0IixkaXNjb25uZWN0OiJyZWxheWVyX2Rpc2Nvbm5lY3QiLGVycm9yOiJyZWxheWVyX2Vycm9yIixjb25uZWN0aW9uX3N0YWxsZWQ6InJlbGF5ZXJfY29ubmVjdGlvbl9zdGFsbGVkIix0cmFuc3BvcnRfY2xvc2VkOiJyZWxheWVyX3RyYW5zcG9ydF9jbG9zZWQiLHB1Ymxpc2g6InJlbGF5ZXJfcHVibGlzaCJ9LGZBPSJfc3Vic2NyaXB0aW9uIix3dD17cGF5bG9hZDoicGF5bG9hZCIsY29ubmVjdDoiY29ubmVjdCIsZGlzY29ubmVjdDoiZGlzY29ubmVjdCIsZXJyb3I6ImVycm9yIn0sZEE9LjEseGM9IjIuMjMuMTAiLHBlPXtsaW5rX21vZGU6ImxpbmtfbW9kZSIscmVsYXk6InJlbGF5In0sS3M9e2luYm91bmQ6ImluYm91bmQiLG91dGJvdW5kOiJvdXRib3VuZCJ9LHBBPSIwLjMiLGdBPSJXQUxMRVRDT05ORUNUX0NMSUVOVF9JRCIsSGg9IldBTExFVENPTk5FQ1RfTElOS19NT0RFX0FQUFMiLGh0PXtjcmVhdGVkOiJzdWJzY3JpcHRpb25fY3JlYXRlZCIsZGVsZXRlZDoic3Vic2NyaXB0aW9uX2RlbGV0ZWQiLGV4cGlyZWQ6InN1YnNjcmlwdGlvbl9leHBpcmVkIixkaXNhYmxlZDoic3Vic2NyaXB0aW9uX2Rpc2FibGVkIixzeW5jOiJzdWJzY3JpcHRpb25fc3luYyIscmVzdWJzY3JpYmVkOiJzdWJzY3JpcHRpb25fcmVzdWJzY3JpYmVkIn0seUE9InN1YnNjcmlwdGlvbiIsd0E9IjAuMyIsbUE9InBhaXJpbmciLGJBPSIwLjMiLE9pPXt3Y19wYWlyaW5nRGVsZXRlOntyZXE6e3R0bDpHLk9ORV9EQVkscHJvbXB0OiExLHRhZzoxZTN9LHJlczp7dHRsOkcuT05FX0RBWSxwcm9tcHQ6ITEsdGFnOjEwMDF9fSx3Y19wYWlyaW5nUGluZzp7cmVxOnt0dGw6Ry5USElSVFlfU0VDT05EUyxwcm9tcHQ6ITEsdGFnOjEwMDJ9LHJlczp7dHRsOkcuVEhJUlRZX1NFQ09ORFMscHJvbXB0OiExLHRhZzoxMDAzfX0sdW5yZWdpc3RlcmVkX21ldGhvZDp7cmVxOnt0dGw6Ry5PTkVfREFZLHByb21wdDohMSx0YWc6MH0scmVzOnt0dGw6Ry5PTkVfREFZLHByb21wdDohMSx0YWc6MH19fSxwbj17Y3JlYXRlOiJwYWlyaW5nX2NyZWF0ZSIsZXhwaXJlOiJwYWlyaW5nX2V4cGlyZSIsZGVsZXRlOiJwYWlyaW5nX2RlbGV0ZSIscGluZzoicGFpcmluZ19waW5nIn0sT3Q9e2NyZWF0ZWQ6Imhpc3RvcnlfY3JlYXRlZCIsdXBkYXRlZDoiaGlzdG9yeV91cGRhdGVkIixkZWxldGVkOiJoaXN0b3J5X2RlbGV0ZWQiLHN5bmM6Imhpc3Rvcnlfc3luYyJ9LEVBPSJoaXN0b3J5Iix2QT0iMC4zIix4QT0iZXhwaXJlciIsbXQ9e2NyZWF0ZWQ6ImV4cGlyZXJfY3JlYXRlZCIsZGVsZXRlZDoiZXhwaXJlcl9kZWxldGVkIixleHBpcmVkOiJleHBpcmVyX2V4cGlyZWQiLHN5bmM6ImV4cGlyZXJfc3luYyJ9LF9BPSIwLjMiLElBPSJ2ZXJpZnktYXBpIixTQT0iaHR0cHM6Ly92ZXJpZnkud2FsbGV0Y29ubmVjdC5jb20iLHMwPSJodHRwczovL3ZlcmlmeS53YWxsZXRjb25uZWN0Lm9yZyIsTWk9czAsQUE9YCR7TWl9L3YzYCxEQT1bU0EsczBdLE9BPSJlY2hvIiwkQT0iaHR0cHM6Ly9lY2hvLndhbGxldGNvbm5lY3QuY29tIixLdD17cGFpcmluZ19zdGFydGVkOiJwYWlyaW5nX3N0YXJ0ZWQiLHBhaXJpbmdfdXJpX3ZhbGlkYXRpb25fc3VjY2VzczoicGFpcmluZ191cmlfdmFsaWRhdGlvbl9zdWNjZXNzIixwYWlyaW5nX3VyaV9ub3RfZXhwaXJlZDoicGFpcmluZ191cmlfbm90X2V4cGlyZWQiLHN0b3JlX25ld19wYWlyaW5nOiJzdG9yZV9uZXdfcGFpcmluZyIsc3Vic2NyaWJpbmdfcGFpcmluZ190b3BpYzoic3Vic2NyaWJpbmdfcGFpcmluZ190b3BpYyIsc3Vic2NyaWJlX3BhaXJpbmdfdG9waWNfc3VjY2Vzczoic3Vic2NyaWJlX3BhaXJpbmdfdG9waWNfc3VjY2VzcyIsZXhpc3RpbmdfcGFpcmluZzoiZXhpc3RpbmdfcGFpcmluZyIscGFpcmluZ19ub3RfZXhwaXJlZDoicGFpcmluZ19ub3RfZXhwaXJlZCIsZW1pdF9pbmFjdGl2ZV9wYWlyaW5nOiJlbWl0X2luYWN0aXZlX3BhaXJpbmciLGVtaXRfc2Vzc2lvbl9wcm9wb3NhbDoiZW1pdF9zZXNzaW9uX3Byb3Bvc2FsIixzdWJzY3JpYmluZ190b19wYWlyaW5nX3RvcGljOiJzdWJzY3JpYmluZ190b19wYWlyaW5nX3RvcGljIn0sZHI9e25vX3dzc19jb25uZWN0aW9uOiJub193c3NfY29ubmVjdGlvbiIsbm9faW50ZXJuZXRfY29ubmVjdGlvbjoibm9faW50ZXJuZXRfY29ubmVjdGlvbiIsbWFsZm9ybWVkX3BhaXJpbmdfdXJpOiJtYWxmb3JtZWRfcGFpcmluZ191cmkiLGFjdGl2ZV9wYWlyaW5nX2FscmVhZHlfZXhpc3RzOiJhY3RpdmVfcGFpcmluZ19hbHJlYWR5X2V4aXN0cyIsc3Vic2NyaWJlX3BhaXJpbmdfdG9waWNfZmFpbHVyZToic3Vic2NyaWJlX3BhaXJpbmdfdG9waWNfZmFpbHVyZSIscGFpcmluZ19leHBpcmVkOiJwYWlyaW5nX2V4cGlyZWQiLHByb3Bvc2FsX2V4cGlyZWQ6InByb3Bvc2FsX2V4cGlyZWQiLHByb3Bvc2FsX2xpc3RlbmVyX25vdF9mb3VuZDoicHJvcG9zYWxfbGlzdGVuZXJfbm90X2ZvdW5kIn0sJHQ9e3Nlc3Npb25fYXBwcm92ZV9zdGFydGVkOiJzZXNzaW9uX2FwcHJvdmVfc3RhcnRlZCIscHJvcG9zYWxfbm90X2V4cGlyZWQ6InByb3Bvc2FsX25vdF9leHBpcmVkIixzZXNzaW9uX25hbWVzcGFjZXNfdmFsaWRhdGlvbl9zdWNjZXNzOiJzZXNzaW9uX25hbWVzcGFjZXNfdmFsaWRhdGlvbl9zdWNjZXNzIixjcmVhdGVfc2Vzc2lvbl90b3BpYzoiY3JlYXRlX3Nlc3Npb25fdG9waWMiLHN1YnNjcmliaW5nX3Nlc3Npb25fdG9waWM6InN1YnNjcmliaW5nX3Nlc3Npb25fdG9waWMiLHN1YnNjcmliZV9zZXNzaW9uX3RvcGljX3N1Y2Nlc3M6InN1YnNjcmliZV9zZXNzaW9uX3RvcGljX3N1Y2Nlc3MiLHB1Ymxpc2hpbmdfc2Vzc2lvbl9hcHByb3ZlOiJwdWJsaXNoaW5nX3Nlc3Npb25fYXBwcm92ZSIsc2Vzc2lvbl9hcHByb3ZlX3B1Ymxpc2hfc3VjY2Vzczoic2Vzc2lvbl9hcHByb3ZlX3B1Ymxpc2hfc3VjY2VzcyIsc3RvcmVfc2Vzc2lvbjoic3RvcmVfc2Vzc2lvbiIscHVibGlzaGluZ19zZXNzaW9uX3NldHRsZToicHVibGlzaGluZ19zZXNzaW9uX3NldHRsZSIsc2Vzc2lvbl9zZXR0bGVfcHVibGlzaF9zdWNjZXNzOiJzZXNzaW9uX3NldHRsZV9wdWJsaXNoX3N1Y2Nlc3MiLHNlc3Npb25fcmVxdWVzdF9yZXNwb25zZV9zdGFydGVkOiJzZXNzaW9uX3JlcXVlc3RfcmVzcG9uc2Vfc3RhcnRlZCIsc2Vzc2lvbl9yZXF1ZXN0X3Jlc3BvbnNlX3ZhbGlkYXRpb25fc3VjY2Vzczoic2Vzc2lvbl9yZXF1ZXN0X3Jlc3BvbnNlX3ZhbGlkYXRpb25fc3VjY2VzcyIsc2Vzc2lvbl9yZXF1ZXN0X3Jlc3BvbnNlX3B1Ymxpc2hfc3RhcnRlZDoic2Vzc2lvbl9yZXF1ZXN0X3Jlc3BvbnNlX3B1Ymxpc2hfc3RhcnRlZCJ9LGNuPXtub19pbnRlcm5ldF9jb25uZWN0aW9uOiJub19pbnRlcm5ldF9jb25uZWN0aW9uIixub193c3NfY29ubmVjdGlvbjoibm9fd3NzX2Nvbm5lY3Rpb24iLHByb3Bvc2FsX2V4cGlyZWQ6InByb3Bvc2FsX2V4cGlyZWQiLHN1YnNjcmliZV9zZXNzaW9uX3RvcGljX2ZhaWx1cmU6InN1YnNjcmliZV9zZXNzaW9uX3RvcGljX2ZhaWx1cmUiLHNlc3Npb25fYXBwcm92ZV9wdWJsaXNoX2ZhaWx1cmU6InNlc3Npb25fYXBwcm92ZV9wdWJsaXNoX2ZhaWx1cmUiLHNlc3Npb25fc2V0dGxlX3B1Ymxpc2hfZmFpbHVyZToic2Vzc2lvbl9zZXR0bGVfcHVibGlzaF9mYWlsdXJlIixzZXNzaW9uX2FwcHJvdmVfbmFtZXNwYWNlX3ZhbGlkYXRpb25fZmFpbHVyZToic2Vzc2lvbl9hcHByb3ZlX25hbWVzcGFjZV92YWxpZGF0aW9uX2ZhaWx1cmUiLHByb3Bvc2FsX25vdF9mb3VuZDoicHJvcG9zYWxfbm90X2ZvdW5kIixzZXNzaW9uX3JlcXVlc3RfcmVzcG9uc2VfdmFsaWRhdGlvbl9mYWlsdXJlOiJzZXNzaW9uX3JlcXVlc3RfcmVzcG9uc2VfdmFsaWRhdGlvbl9mYWlsdXJlIixzZXNzaW9uX3JlcXVlc3RfcmVzcG9uc2VfcHVibGlzaF9mYWlsdXJlOiJzZXNzaW9uX3JlcXVlc3RfcmVzcG9uc2VfcHVibGlzaF9mYWlsdXJlIn0sdW49e2F1dGhlbnRpY2F0ZWRfc2Vzc2lvbl9hcHByb3ZlX3N0YXJ0ZWQ6ImF1dGhlbnRpY2F0ZWRfc2Vzc2lvbl9hcHByb3ZlX3N0YXJ0ZWQiLGNyZWF0ZV9hdXRoZW50aWNhdGVkX3Nlc3Npb25fdG9waWM6ImNyZWF0ZV9hdXRoZW50aWNhdGVkX3Nlc3Npb25fdG9waWMiLGNhY2Fvc192ZXJpZmllZDoiY2FjYW9zX3ZlcmlmaWVkIixzdG9yZV9hdXRoZW50aWNhdGVkX3Nlc3Npb246InN0b3JlX2F1dGhlbnRpY2F0ZWRfc2Vzc2lvbiIsc3Vic2NyaWJpbmdfYXV0aGVudGljYXRlZF9zZXNzaW9uX3RvcGljOiJzdWJzY3JpYmluZ19hdXRoZW50aWNhdGVkX3Nlc3Npb25fdG9waWMiLHN1YnNjcmliZV9hdXRoZW50aWNhdGVkX3Nlc3Npb25fdG9waWNfc3VjY2Vzczoic3Vic2NyaWJlX2F1dGhlbnRpY2F0ZWRfc2Vzc2lvbl90b3BpY19zdWNjZXNzIixwdWJsaXNoaW5nX2F1dGhlbnRpY2F0ZWRfc2Vzc2lvbl9hcHByb3ZlOiJwdWJsaXNoaW5nX2F1dGhlbnRpY2F0ZWRfc2Vzc2lvbl9hcHByb3ZlIn0sJGk9e25vX2ludGVybmV0X2Nvbm5lY3Rpb246Im5vX2ludGVybmV0X2Nvbm5lY3Rpb24iLGludmFsaWRfY2FjYW86ImludmFsaWRfY2FjYW8iLHN1YnNjcmliZV9hdXRoZW50aWNhdGVkX3Nlc3Npb25fdG9waWNfZmFpbHVyZToic3Vic2NyaWJlX2F1dGhlbnRpY2F0ZWRfc2Vzc2lvbl90b3BpY19mYWlsdXJlIixhdXRoZW50aWNhdGVkX3Nlc3Npb25fYXBwcm92ZV9wdWJsaXNoX2ZhaWx1cmU6ImF1dGhlbnRpY2F0ZWRfc2Vzc2lvbl9hcHByb3ZlX3B1Ymxpc2hfZmFpbHVyZSIsYXV0aGVudGljYXRlZF9zZXNzaW9uX3BlbmRpbmdfcmVxdWVzdF9ub3RfZm91bmQ6ImF1dGhlbnRpY2F0ZWRfc2Vzc2lvbl9wZW5kaW5nX3JlcXVlc3Rfbm90X2ZvdW5kIn0sQkE9LjEsUEE9ImV2ZW50LWNsaWVudCIsVEE9ODY0MDAsUkE9Imh0dHBzOi8vcHVsc2Uud2FsbGV0Y29ubmVjdC5vcmcvYmF0Y2giO2xldCBDQT1jbGFzc3tjb25zdHJ1Y3RvcihlLHIpe3RoaXMuY29yZT1lLHRoaXMubG9nZ2VyPXIsdGhpcy5rZXljaGFpbj1uZXcgTWFwLHRoaXMubmFtZT1pQSx0aGlzLnZlcnNpb249c0EsdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLnN0b3JhZ2VQcmVmaXg9aXIsdGhpcy5pbml0PWFzeW5jKCk9PntpZighdGhpcy5pbml0aWFsaXplZCl7Y29uc3Qgbj1hd2FpdCB0aGlzLmdldEtleUNoYWluKCk7dHlwZW9mIG48InUiJiYodGhpcy5rZXljaGFpbj1uKSx0aGlzLmluaXRpYWxpemVkPSEwfX0sdGhpcy5oYXM9bj0+KHRoaXMuaXNJbml0aWFsaXplZCgpLHRoaXMua2V5Y2hhaW4uaGFzKG4pKSx0aGlzLnNldD1hc3luYyhuLGkpPT57dGhpcy5pc0luaXRpYWxpemVkKCksdGhpcy5rZXljaGFpbi5zZXQobixpKSxhd2FpdCB0aGlzLnBlcnNpc3QoKX0sdGhpcy5nZXQ9bj0+e3RoaXMuaXNJbml0aWFsaXplZCgpO2NvbnN0IGk9dGhpcy5rZXljaGFpbi5nZXQobik7aWYodHlwZW9mIGk+InUiKXtjb25zdHttZXNzYWdlOnN9PVkoIk5PX01BVENISU5HX0tFWSIsYCR7dGhpcy5uYW1lfTogJHtufWApO3Rocm93IG5ldyBFcnJvcihzKX1yZXR1cm4gaX0sdGhpcy5kZWw9YXN5bmMgbj0+e3RoaXMuaXNJbml0aWFsaXplZCgpLHRoaXMua2V5Y2hhaW4uZGVsZXRlKG4pLGF3YWl0IHRoaXMucGVyc2lzdCgpfSx0aGlzLmNvcmU9ZSx0aGlzLmxvZ2dlcj1ndChyLHRoaXMubmFtZSl9Z2V0IGNvbnRleHQoKXtyZXR1cm4gY3QodGhpcy5sb2dnZXIpfWdldCBzdG9yYWdlS2V5KCl7cmV0dXJuIHRoaXMuc3RvcmFnZVByZWZpeCt0aGlzLnZlcnNpb24rdGhpcy5jb3JlLmN1c3RvbVN0b3JhZ2VQcmVmaXgrIi8vIit0aGlzLm5hbWV9YXN5bmMgc2V0S2V5Q2hhaW4oZSl7YXdhaXQgdGhpcy5jb3JlLnN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXkseWMoZSkpfWFzeW5jIGdldEtleUNoYWluKCl7Y29uc3QgZT1hd2FpdCB0aGlzLmNvcmUuc3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleSk7cmV0dXJuIHR5cGVvZiBlPCJ1Ij93YyhlKTp2b2lkIDB9YXN5bmMgcGVyc2lzdCgpe2F3YWl0IHRoaXMuc2V0S2V5Q2hhaW4odGhpcy5rZXljaGFpbil9aXNJbml0aWFsaXplZCgpe2lmKCF0aGlzLmluaXRpYWxpemVkKXtjb25zdHttZXNzYWdlOmV9PVkoIk5PVF9JTklUSUFMSVpFRCIsdGhpcy5uYW1lKTt0aHJvdyBuZXcgRXJyb3IoZSl9fX0sVUE9Y2xhc3N7Y29uc3RydWN0b3IoZSxyLG4pe3RoaXMuY29yZT1lLHRoaXMubG9nZ2VyPXIsdGhpcy5uYW1lPXJBLHRoaXMucmFuZG9tU2Vzc2lvbklkZW50aWZpZXI9YmMoKSx0aGlzLmluaXRpYWxpemVkPSExLHRoaXMuaW5pdD1hc3luYygpPT57dGhpcy5pbml0aWFsaXplZHx8KGF3YWl0IHRoaXMua2V5Y2hhaW4uaW5pdCgpLHRoaXMuaW5pdGlhbGl6ZWQ9ITApfSx0aGlzLmhhc0tleXM9aT0+KHRoaXMuaXNJbml0aWFsaXplZCgpLHRoaXMua2V5Y2hhaW4uaGFzKGkpKSx0aGlzLmdldENsaWVudElkPWFzeW5jKCk9PntpZih0aGlzLmlzSW5pdGlhbGl6ZWQoKSx0aGlzLmNsaWVudElkKXJldHVybiB0aGlzLmNsaWVudElkO2NvbnN0IGk9YXdhaXQgdGhpcy5nZXRDbGllbnRTZWVkKCkscz15bChpKSxvPXBkKHMucHVibGljS2V5KTtyZXR1cm4gdGhpcy5jbGllbnRJZD1vLG99LHRoaXMuZ2VuZXJhdGVLZXlQYWlyPSgpPT57dGhpcy5pc0luaXRpYWxpemVkKCk7Y29uc3QgaT11UygpO3JldHVybiB0aGlzLnNldFByaXZhdGVLZXkoaS5wdWJsaWNLZXksaS5wcml2YXRlS2V5KX0sdGhpcy5zaWduSldUPWFzeW5jIGk9Pnt0aGlzLmlzSW5pdGlhbGl6ZWQoKTtjb25zdCBzPWF3YWl0IHRoaXMuZ2V0Q2xpZW50U2VlZCgpLG89eWwocyksYT10aGlzLnJhbmRvbVNlc3Npb25JZGVudGlmaWVyO3JldHVybiBhd2FpdCBXMShhLGksbkEsbyl9LHRoaXMuZ2VuZXJhdGVTaGFyZWRLZXk9KGkscyxvKT0+e3RoaXMuaXNJbml0aWFsaXplZCgpO2NvbnN0IGE9dGhpcy5nZXRQcml2YXRlS2V5KGkpLGM9bFMoYSxzKTtyZXR1cm4gdGhpcy5zZXRTeW1LZXkoYyxvKX0sdGhpcy5zZXRTeW1LZXk9YXN5bmMoaSxzKT0+e3RoaXMuaXNJbml0aWFsaXplZCgpO2NvbnN0IG89c3x8enMoaSk7cmV0dXJuIGF3YWl0IHRoaXMua2V5Y2hhaW4uc2V0KG8saSksb30sdGhpcy5kZWxldGVLZXlQYWlyPWFzeW5jIGk9Pnt0aGlzLmlzSW5pdGlhbGl6ZWQoKSxhd2FpdCB0aGlzLmtleWNoYWluLmRlbChpKX0sdGhpcy5kZWxldGVTeW1LZXk9YXN5bmMgaT0+e3RoaXMuaXNJbml0aWFsaXplZCgpLGF3YWl0IHRoaXMua2V5Y2hhaW4uZGVsKGkpfSx0aGlzLmVuY29kZT1hc3luYyhpLHMsbyk9Pnt0aGlzLmlzSW5pdGlhbGl6ZWQoKTtjb25zdCBhPURnKG8pLGM9SW4ocyk7aWYoX2goYSkpcmV0dXJuIGRTKGMsbz8uZW5jb2RpbmcpO2lmKHhoKGEpKXtjb25zdCBwPWEuc2VuZGVyUHVibGljS2V5LGc9YS5yZWNlaXZlclB1YmxpY0tleTtpPWF3YWl0IHRoaXMuZ2VuZXJhdGVTaGFyZWRLZXkocCxnKX1jb25zdCB1PXRoaXMuZ2V0U3ltS2V5KGkpLHt0eXBlOmwsc2VuZGVyUHVibGljS2V5Omh9PWE7cmV0dXJuIGhTKHt0eXBlOmwsc3ltS2V5OnUsbWVzc2FnZTpjLHNlbmRlclB1YmxpY0tleTpoLGVuY29kaW5nOm8/LmVuY29kaW5nfSl9LHRoaXMuZGVjb2RlPWFzeW5jKGkscyxvKT0+e3RoaXMuaXNJbml0aWFsaXplZCgpO2NvbnN0IGE9Z1MocyxvKTtpZihfaChhKSl7Y29uc3QgYz1wUyhzLG8/LmVuY29kaW5nKTtyZXR1cm4gX24oYyl9aWYoeGgoYSkpe2NvbnN0IGM9YS5yZWNlaXZlclB1YmxpY0tleSx1PWEuc2VuZGVyUHVibGljS2V5O2k9YXdhaXQgdGhpcy5nZW5lcmF0ZVNoYXJlZEtleShjLHUpfXRyeXtjb25zdCBjPXRoaXMuZ2V0U3ltS2V5KGkpLHU9ZlMoe3N5bUtleTpjLGVuY29kZWQ6cyxlbmNvZGluZzpvPy5lbmNvZGluZ30pO3JldHVybiBfbih1KX1jYXRjaChjKXt0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGRlY29kZSBtZXNzYWdlIGZyb20gdG9waWM6ICcke2l9JywgY2xpZW50SWQ6ICcke2F3YWl0IHRoaXMuZ2V0Q2xpZW50SWQoKX0nYCksdGhpcy5sb2dnZXIuZXJyb3IoYyl9fSx0aGlzLmdldFBheWxvYWRUeXBlPShpLHM9a2UpPT57Y29uc3Qgbz1HaSh7ZW5jb2RlZDppLGVuY29kaW5nOnN9KTtyZXR1cm4gJG4oby50eXBlKX0sdGhpcy5nZXRQYXlsb2FkU2VuZGVyUHVibGljS2V5PShpLHM9a2UpPT57Y29uc3Qgbz1HaSh7ZW5jb2RlZDppLGVuY29kaW5nOnN9KTtyZXR1cm4gby5zZW5kZXJQdWJsaWNLZXk/VWUoby5zZW5kZXJQdWJsaWNLZXksUWUpOnZvaWQgMH0sdGhpcy5jb3JlPWUsdGhpcy5sb2dnZXI9Z3Qocix0aGlzLm5hbWUpLHRoaXMua2V5Y2hhaW49bnx8bmV3IENBKHRoaXMuY29yZSx0aGlzLmxvZ2dlcil9Z2V0IGNvbnRleHQoKXtyZXR1cm4gY3QodGhpcy5sb2dnZXIpfWFzeW5jIHNldFByaXZhdGVLZXkoZSxyKXtyZXR1cm4gYXdhaXQgdGhpcy5rZXljaGFpbi5zZXQoZSxyKSxlfWdldFByaXZhdGVLZXkoZSl7cmV0dXJuIHRoaXMua2V5Y2hhaW4uZ2V0KGUpfWFzeW5jIGdldENsaWVudFNlZWQoKXtsZXQgZT0iIjt0cnl7ZT10aGlzLmtleWNoYWluLmdldCh6aCl9Y2F0Y2h7ZT1iYygpLGF3YWl0IHRoaXMua2V5Y2hhaW4uc2V0KHpoLGUpfXJldHVybiBaZShlLCJiYXNlMTYiKX1nZXRTeW1LZXkoZSl7cmV0dXJuIHRoaXMua2V5Y2hhaW4uZ2V0KGUpfWlzSW5pdGlhbGl6ZWQoKXtpZighdGhpcy5pbml0aWFsaXplZCl7Y29uc3R7bWVzc2FnZTplfT1ZKCJOT1RfSU5JVElBTElaRUQiLHRoaXMubmFtZSk7dGhyb3cgbmV3IEVycm9yKGUpfX19LE5BPWNsYXNzIGV4dGVuZHMgV3d7Y29uc3RydWN0b3IoZSxyKXtzdXBlcihlLHIpLHRoaXMubG9nZ2VyPWUsdGhpcy5jb3JlPXIsdGhpcy5tZXNzYWdlcz1uZXcgTWFwLHRoaXMubWVzc2FnZXNXaXRob3V0Q2xpZW50QWNrPW5ldyBNYXAsdGhpcy5uYW1lPW9BLHRoaXMudmVyc2lvbj1hQSx0aGlzLmluaXRpYWxpemVkPSExLHRoaXMuc3RvcmFnZVByZWZpeD1pcix0aGlzLmluaXQ9YXN5bmMoKT0+e2lmKCF0aGlzLmluaXRpYWxpemVkKXt0aGlzLmxvZ2dlci50cmFjZSgiSW5pdGlhbGl6ZWQiKTt0cnl7Y29uc3Qgbj1hd2FpdCB0aGlzLmdldFJlbGF5ZXJNZXNzYWdlcygpO3R5cGVvZiBuPCJ1IiYmKHRoaXMubWVzc2FnZXM9bik7Y29uc3QgaT1hd2FpdCB0aGlzLmdldFJlbGF5ZXJNZXNzYWdlc1dpdGhvdXRDbGllbnRBY2soKTt0eXBlb2YgaTwidSImJih0aGlzLm1lc3NhZ2VzV2l0aG91dENsaWVudEFjaz1pKSx0aGlzLmxvZ2dlci5kZWJ1ZyhgU3VjY2Vzc2Z1bGx5IFJlc3RvcmVkIHJlY29yZHMgZm9yICR7dGhpcy5uYW1lfWApLHRoaXMubG9nZ2VyLnRyYWNlKHt0eXBlOiJtZXRob2QiLG1ldGhvZDoicmVzdG9yZSIsc2l6ZTp0aGlzLm1lc3NhZ2VzLnNpemV9KX1jYXRjaChuKXt0aGlzLmxvZ2dlci5kZWJ1ZyhgRmFpbGVkIHRvIFJlc3RvcmUgcmVjb3JkcyBmb3IgJHt0aGlzLm5hbWV9YCksdGhpcy5sb2dnZXIuZXJyb3Iobil9ZmluYWxseXt0aGlzLmluaXRpYWxpemVkPSEwfX19LHRoaXMuc2V0PWFzeW5jKG4saSxzKT0+e3RoaXMuaXNJbml0aWFsaXplZCgpO2NvbnN0IG89dnQoaSk7bGV0IGE9dGhpcy5tZXNzYWdlcy5nZXQobik7aWYodHlwZW9mIGE+InUiJiYoYT17fSksdHlwZW9mIGFbb108InUiKXJldHVybiBvO2lmKGFbb109aSx0aGlzLm1lc3NhZ2VzLnNldChuLGEpLHM9PT1Lcy5pbmJvdW5kKXtjb25zdCBjPXRoaXMubWVzc2FnZXNXaXRob3V0Q2xpZW50QWNrLmdldChuKXx8e307dGhpcy5tZXNzYWdlc1dpdGhvdXRDbGllbnRBY2suc2V0KG4sey4uLmMsW29dOml9KX1yZXR1cm4gYXdhaXQgdGhpcy5wZXJzaXN0KCksb30sdGhpcy5nZXQ9bj0+e3RoaXMuaXNJbml0aWFsaXplZCgpO2xldCBpPXRoaXMubWVzc2FnZXMuZ2V0KG4pO3JldHVybiB0eXBlb2YgaT4idSImJihpPXt9KSxpfSx0aGlzLmdldFdpdGhvdXRBY2s9bj0+e3RoaXMuaXNJbml0aWFsaXplZCgpO2NvbnN0IGk9e307Zm9yKGNvbnN0IHMgb2Ygbil7Y29uc3Qgbz10aGlzLm1lc3NhZ2VzV2l0aG91dENsaWVudEFjay5nZXQocyl8fHt9O2lbc109T2JqZWN0LnZhbHVlcyhvKX1yZXR1cm4gaX0sdGhpcy5oYXM9KG4saSk9Pnt0aGlzLmlzSW5pdGlhbGl6ZWQoKTtjb25zdCBzPXRoaXMuZ2V0KG4pLG89dnQoaSk7cmV0dXJuIHR5cGVvZiBzW29dPCJ1In0sdGhpcy5hY2s9YXN5bmMobixpKT0+e3RoaXMuaXNJbml0aWFsaXplZCgpO2NvbnN0IHM9dGhpcy5tZXNzYWdlc1dpdGhvdXRDbGllbnRBY2suZ2V0KG4pO2lmKHR5cGVvZiBzPiJ1IilyZXR1cm47Y29uc3Qgbz12dChpKTtkZWxldGUgc1tvXSxPYmplY3Qua2V5cyhzKS5sZW5ndGg9PT0wP3RoaXMubWVzc2FnZXNXaXRob3V0Q2xpZW50QWNrLmRlbGV0ZShuKTp0aGlzLm1lc3NhZ2VzV2l0aG91dENsaWVudEFjay5zZXQobixzKSxhd2FpdCB0aGlzLnBlcnNpc3QoKX0sdGhpcy5kZWw9YXN5bmMgbj0+e3RoaXMuaXNJbml0aWFsaXplZCgpLHRoaXMubWVzc2FnZXMuZGVsZXRlKG4pLHRoaXMubWVzc2FnZXNXaXRob3V0Q2xpZW50QWNrLmRlbGV0ZShuKSxhd2FpdCB0aGlzLnBlcnNpc3QoKX0sdGhpcy5sb2dnZXI9Z3QoZSx0aGlzLm5hbWUpLHRoaXMuY29yZT1yfWdldCBjb250ZXh0KCl7cmV0dXJuIGN0KHRoaXMubG9nZ2VyKX1nZXQgc3RvcmFnZUtleSgpe3JldHVybiB0aGlzLnN0b3JhZ2VQcmVmaXgrdGhpcy52ZXJzaW9uK3RoaXMuY29yZS5jdXN0b21TdG9yYWdlUHJlZml4KyIvLyIrdGhpcy5uYW1lfWdldCBzdG9yYWdlS2V5V2l0aG91dENsaWVudEFjaygpe3JldHVybiB0aGlzLnN0b3JhZ2VQcmVmaXgrdGhpcy52ZXJzaW9uK3RoaXMuY29yZS5jdXN0b21TdG9yYWdlUHJlZml4KyIvLyIrdGhpcy5uYW1lKyJfd2l0aG91dENsaWVudEFjayJ9YXN5bmMgc2V0UmVsYXllck1lc3NhZ2VzKGUpe2F3YWl0IHRoaXMuY29yZS5zdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlS2V5LHljKGUpKX1hc3luYyBzZXRSZWxheWVyTWVzc2FnZXNXaXRob3V0Q2xpZW50QWNrKGUpe2F3YWl0IHRoaXMuY29yZS5zdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlS2V5V2l0aG91dENsaWVudEFjayx5YyhlKSl9YXN5bmMgZ2V0UmVsYXllck1lc3NhZ2VzKCl7Y29uc3QgZT1hd2FpdCB0aGlzLmNvcmUuc3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleSk7cmV0dXJuIHR5cGVvZiBlPCJ1Ij93YyhlKTp2b2lkIDB9YXN5bmMgZ2V0UmVsYXllck1lc3NhZ2VzV2l0aG91dENsaWVudEFjaygpe2NvbnN0IGU9YXdhaXQgdGhpcy5jb3JlLnN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXlXaXRob3V0Q2xpZW50QWNrKTtyZXR1cm4gdHlwZW9mIGU8InUiP3djKGUpOnZvaWQgMH1hc3luYyBwZXJzaXN0KCl7YXdhaXQgdGhpcy5zZXRSZWxheWVyTWVzc2FnZXModGhpcy5tZXNzYWdlcyksYXdhaXQgdGhpcy5zZXRSZWxheWVyTWVzc2FnZXNXaXRob3V0Q2xpZW50QWNrKHRoaXMubWVzc2FnZXNXaXRob3V0Q2xpZW50QWNrKX1pc0luaXRpYWxpemVkKCl7aWYoIXRoaXMuaW5pdGlhbGl6ZWQpe2NvbnN0e21lc3NhZ2U6ZX09WSgiTk9UX0lOSVRJQUxJWkVEIix0aGlzLm5hbWUpO3Rocm93IG5ldyBFcnJvcihlKX19fTtjbGFzcyBMQSBleHRlbmRzIEd3e2NvbnN0cnVjdG9yKGUscil7c3VwZXIoZSxyKSx0aGlzLnJlbGF5ZXI9ZSx0aGlzLmxvZ2dlcj1yLHRoaXMuZXZlbnRzPW5ldyBTdC5FdmVudEVtaXR0ZXIsdGhpcy5uYW1lPXVBLHRoaXMucXVldWU9bmV3IE1hcCx0aGlzLnB1Ymxpc2hUaW1lb3V0PUcudG9NaWxpc2Vjb25kcyhHLk9ORV9NSU5VVEUpLHRoaXMuaW5pdGlhbFB1Ymxpc2hUaW1lb3V0PUcudG9NaWxpc2Vjb25kcyhHLk9ORV9TRUNPTkQqMTUpLHRoaXMubmVlZHNUcmFuc3BvcnRSZXN0YXJ0PSExLHRoaXMucHVibGlzaD1hc3luYyhuLGkscyk9Pnt0aGlzLmxvZ2dlci5kZWJ1ZygiUHVibGlzaGluZyBQYXlsb2FkIiksdGhpcy5sb2dnZXIudHJhY2Uoe3R5cGU6Im1ldGhvZCIsbWV0aG9kOiJwdWJsaXNoIixwYXJhbXM6e3RvcGljOm4sbWVzc2FnZTppLG9wdHM6c319KTtjb25zdCBvPXM/LnR0bHx8Y0EsYT1zPy5wcm9tcHR8fCExLGM9cz8udGFnfHwwLHU9cz8uaWR8fFdyKCkudG9TdHJpbmcoKSxsPUduKHVvKCkucHJvdG9jb2wpLGg9e2lkOnUsbWV0aG9kOnM/LnB1Ymxpc2hNZXRob2R8fGwucHVibGlzaCxwYXJhbXM6e3RvcGljOm4sbWVzc2FnZTppLHR0bDpvLHByb21wdDphLHRhZzpjLGF0dGVzdGF0aW9uOnM/LmF0dGVzdGF0aW9uLC4uLnM/LnR2Zn19LHA9YEZhaWxlZCB0byBwdWJsaXNoIHBheWxvYWQsIHBsZWFzZSB0cnkgYWdhaW4uIGlkOiR7dX0gdGFnOiR7Y31gO3RyeXtCZShoLnBhcmFtcz8ucHJvbXB0KSYmZGVsZXRlIGgucGFyYW1zPy5wcm9tcHQsQmUoaC5wYXJhbXM/LnRhZykmJmRlbGV0ZSBoLnBhcmFtcz8udGFnO2NvbnN0IGc9bmV3IFByb21pc2UoYXN5bmMgdz0+e2NvbnN0IGI9KHtpZDpPfSk9PntoLmlkPy50b1N0cmluZygpPT09Ty50b1N0cmluZygpJiYodGhpcy5yZW1vdmVSZXF1ZXN0RnJvbVF1ZXVlKE8pLHRoaXMucmVsYXllci5ldmVudHMucmVtb3ZlTGlzdGVuZXIodmUucHVibGlzaCxiKSx3KCkpfTt0aGlzLnJlbGF5ZXIuZXZlbnRzLm9uKHZlLnB1Ymxpc2gsYik7Y29uc3Qgdj1DdChuZXcgUHJvbWlzZSgoTyxGKT0+e3RoaXMucnBjUHVibGlzaChoLHMpLnRoZW4oTykuY2F0Y2goXz0+e3RoaXMubG9nZ2VyLndhcm4oXyxfPy5tZXNzYWdlKSxGKF8pfSl9KSx0aGlzLmluaXRpYWxQdWJsaXNoVGltZW91dCxgRmFpbGVkIGluaXRpYWwgcHVibGlzaCwgcmV0cnlpbmcuLi4uIGlkOiR7dX0gdGFnOiR7Y31gKTt0cnl7YXdhaXQgdix0aGlzLmV2ZW50cy5yZW1vdmVMaXN0ZW5lcih2ZS5wdWJsaXNoLGIpfWNhdGNoKE8pe3RoaXMucXVldWUuc2V0KHUse3JlcXVlc3Q6aCxvcHRzOnMsYXR0ZW1wdDoxfSksdGhpcy5sb2dnZXIud2FybihPLE8/Lm1lc3NhZ2UpfX0pO3RoaXMubG9nZ2VyLnRyYWNlKHt0eXBlOiJtZXRob2QiLG1ldGhvZDoicHVibGlzaCIscGFyYW1zOntpZDp1LHRvcGljOm4sbWVzc2FnZTppLG9wdHM6c319KSxhd2FpdCBDdChnLHRoaXMucHVibGlzaFRpbWVvdXQscCl9Y2F0Y2goZyl7aWYodGhpcy5sb2dnZXIuZGVidWcoIkZhaWxlZCB0byBQdWJsaXNoIFBheWxvYWQiKSx0aGlzLmxvZ2dlci5lcnJvcihnKSxzPy5pbnRlcm5hbD8udGhyb3dPbkZhaWxlZFB1Ymxpc2gpdGhyb3cgZ31maW5hbGx5e3RoaXMucXVldWUuZGVsZXRlKHUpfX0sdGhpcy5wdWJsaXNoQ3VzdG9tPWFzeW5jIG49Pnt0aGlzLmxvZ2dlci5kZWJ1ZygiUHVibGlzaGluZyBjdXN0b20gcGF5bG9hZCIpLHRoaXMubG9nZ2VyLnRyYWNlKHt0eXBlOiJtZXRob2QiLG1ldGhvZDoicHVibGlzaEN1c3RvbSIscGFyYW1zOm59KTtjb25zdHtwYXlsb2FkOmksb3B0czpzPXt9fT1uLHthdHRlc3RhdGlvbjpvLHR2ZjphLHB1Ymxpc2hNZXRob2Q6Yyxwcm9tcHQ6dSx0YWc6bCx0dGw6aD1HLkZJVkVfTUlOVVRFU309cyxwPXMuaWR8fFdyKCkudG9TdHJpbmcoKSxnPUduKHVvKCkucHJvdG9jb2wpLHc9Y3x8Zy5wdWJsaXNoLGI9e2lkOnAsbWV0aG9kOncscGFyYW1zOnsuLi5pLHR0bDpoLHByb21wdDp1LHRhZzpsLGF0dGVzdGF0aW9uOm8sLi4uYX19LHY9YEZhaWxlZCB0byBwdWJsaXNoIGN1c3RvbSBwYXlsb2FkLCBwbGVhc2UgdHJ5IGFnYWluLiBpZDoke3B9IHRhZzoke2x9YDt0cnl7QmUoYi5wYXJhbXM/LnByb21wdCkmJmRlbGV0ZSBiLnBhcmFtcz8ucHJvbXB0LEJlKGIucGFyYW1zPy50YWcpJiZkZWxldGUgYi5wYXJhbXM/LnRhZztjb25zdCBPPW5ldyBQcm9taXNlKGFzeW5jIEY9Pntjb25zdCBfPSh7aWQ6Q30pPT57Yi5pZD8udG9TdHJpbmcoKT09PUMudG9TdHJpbmcoKSYmKHRoaXMucmVtb3ZlUmVxdWVzdEZyb21RdWV1ZShDKSx0aGlzLnJlbGF5ZXIuZXZlbnRzLnJlbW92ZUxpc3RlbmVyKHZlLnB1Ymxpc2gsXyksRigpKX07dGhpcy5yZWxheWVyLmV2ZW50cy5vbih2ZS5wdWJsaXNoLF8pO2NvbnN0IFA9Q3QobmV3IFByb21pc2UoKEMsaik9Pnt0aGlzLnJwY1B1Ymxpc2goYixzKS50aGVuKEMpLmNhdGNoKHE9Pnt0aGlzLmxvZ2dlci53YXJuKHEscT8ubWVzc2FnZSksaihxKX0pfSksdGhpcy5pbml0aWFsUHVibGlzaFRpbWVvdXQsYEZhaWxlZCBpbml0aWFsIGN1c3RvbSBwYXlsb2FkIHB1Ymxpc2gsIHJldHJ5aW5nLi4uLiBtZXRob2Q6JHt3fSBpZDoke3B9IHRhZzoke2x9YCk7dHJ5e2F3YWl0IFAsdGhpcy5ldmVudHMucmVtb3ZlTGlzdGVuZXIodmUucHVibGlzaCxfKX1jYXRjaChDKXt0aGlzLnF1ZXVlLnNldChwLHtyZXF1ZXN0OmIsb3B0czpzLGF0dGVtcHQ6MX0pLHRoaXMubG9nZ2VyLndhcm4oQyxDPy5tZXNzYWdlKX19KTt0aGlzLmxvZ2dlci50cmFjZSh7dHlwZToibWV0aG9kIixtZXRob2Q6InB1Ymxpc2giLHBhcmFtczp7aWQ6cCxwYXlsb2FkOmksb3B0czpzfX0pLGF3YWl0IEN0KE8sdGhpcy5wdWJsaXNoVGltZW91dCx2KX1jYXRjaChPKXtpZih0aGlzLmxvZ2dlci5kZWJ1ZygiRmFpbGVkIHRvIFB1Ymxpc2ggUGF5bG9hZCIpLHRoaXMubG9nZ2VyLmVycm9yKE8pLHM/LmludGVybmFsPy50aHJvd09uRmFpbGVkUHVibGlzaCl0aHJvdyBPfWZpbmFsbHl7dGhpcy5xdWV1ZS5kZWxldGUocCl9fSx0aGlzLm9uPShuLGkpPT57dGhpcy5ldmVudHMub24obixpKX0sdGhpcy5vbmNlPShuLGkpPT57dGhpcy5ldmVudHMub25jZShuLGkpfSx0aGlzLm9mZj0obixpKT0+e3RoaXMuZXZlbnRzLm9mZihuLGkpfSx0aGlzLnJlbW92ZUxpc3RlbmVyPShuLGkpPT57dGhpcy5ldmVudHMucmVtb3ZlTGlzdGVuZXIobixpKX0sdGhpcy5yZWxheWVyPWUsdGhpcy5sb2dnZXI9Z3Qocix0aGlzLm5hbWUpLHRoaXMucmVnaXN0ZXJFdmVudExpc3RlbmVycygpfWdldCBjb250ZXh0KCl7cmV0dXJuIGN0KHRoaXMubG9nZ2VyKX1hc3luYyBycGNQdWJsaXNoKGUscil7dGhpcy5sb2dnZXIuZGVidWcoIk91dGdvaW5nIFJlbGF5IFBheWxvYWQiKSx0aGlzLmxvZ2dlci50cmFjZSh7dHlwZToibWVzc2FnZSIsZGlyZWN0aW9uOiJvdXRnb2luZyIscmVxdWVzdDplfSk7Y29uc3Qgbj1hd2FpdCB0aGlzLnJlbGF5ZXIucmVxdWVzdChlKTtyZXR1cm4gdGhpcy5yZWxheWVyLmV2ZW50cy5lbWl0KHZlLnB1Ymxpc2gsey4uLmUsLi4ucn0pLHRoaXMubG9nZ2VyLmRlYnVnKCJTdWNjZXNzZnVsbHkgUHVibGlzaGVkIFBheWxvYWQiKSxufXJlbW92ZVJlcXVlc3RGcm9tUXVldWUoZSl7dGhpcy5xdWV1ZS5kZWxldGUoZSl9Y2hlY2tRdWV1ZSgpe3RoaXMucXVldWUuZm9yRWFjaChhc3luYyhlLHIpPT57Y29uc3Qgbj1lLmF0dGVtcHQrMTt0aGlzLnF1ZXVlLnNldChyLHsuLi5lLGF0dGVtcHQ6bn0pLHRoaXMubG9nZ2VyLndhcm4oe30sYFB1Ymxpc2hlcjogcXVldWUtPnB1Ymxpc2hpbmc6ICR7ZS5yZXF1ZXN0LmlkfSwgdGFnOiAke2UucmVxdWVzdC5wYXJhbXM/LnRhZ30sIGF0dGVtcHQ6ICR7bn1gKSxhd2FpdCB0aGlzLnJwY1B1Ymxpc2goZS5yZXF1ZXN0LGUub3B0cyksdGhpcy5sb2dnZXIud2Fybih7fSxgUHVibGlzaGVyOiBxdWV1ZS0+cHVibGlzaGVkOiAke2UucmVxdWVzdC5pZH1gKX0pfXJlZ2lzdGVyRXZlbnRMaXN0ZW5lcnMoKXt0aGlzLnJlbGF5ZXIuY29yZS5oZWFydGJlYXQub24oUG4ucHVsc2UsKCk9PntpZih0aGlzLm5lZWRzVHJhbnNwb3J0UmVzdGFydCl7dGhpcy5uZWVkc1RyYW5zcG9ydFJlc3RhcnQ9ITEsdGhpcy5yZWxheWVyLmV2ZW50cy5lbWl0KHZlLmNvbm5lY3Rpb25fc3RhbGxlZCk7cmV0dXJufXRoaXMuY2hlY2tRdWV1ZSgpfSksdGhpcy5yZWxheWVyLm9uKHZlLm1lc3NhZ2VfYWNrLGU9Pnt0aGlzLnJlbW92ZVJlcXVlc3RGcm9tUXVldWUoZS5pZC50b1N0cmluZygpKX0pfX1jbGFzcyBGQXtjb25zdHJ1Y3Rvcigpe3RoaXMubWFwPW5ldyBNYXAsdGhpcy5zZXQ9KGUscik9Pntjb25zdCBuPXRoaXMuZ2V0KGUpO3RoaXMuZXhpc3RzKGUscil8fHRoaXMubWFwLnNldChlLFsuLi5uLHJdKX0sdGhpcy5nZXQ9ZT0+dGhpcy5tYXAuZ2V0KGUpfHxbXSx0aGlzLmV4aXN0cz0oZSxyKT0+dGhpcy5nZXQoZSkuaW5jbHVkZXMociksdGhpcy5kZWxldGU9KGUscik9PntpZih0eXBlb2Ygcj4idSIpe3RoaXMubWFwLmRlbGV0ZShlKTtyZXR1cm59aWYoIXRoaXMubWFwLmhhcyhlKSlyZXR1cm47Y29uc3Qgbj10aGlzLmdldChlKTtpZighdGhpcy5leGlzdHMoZSxyKSlyZXR1cm47Y29uc3QgaT1uLmZpbHRlcihzPT5zIT09cik7aWYoIWkubGVuZ3RoKXt0aGlzLm1hcC5kZWxldGUoZSk7cmV0dXJufXRoaXMubWFwLnNldChlLGkpfSx0aGlzLmNsZWFyPSgpPT57dGhpcy5tYXAuY2xlYXIoKX19Z2V0IHRvcGljcygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMubWFwLmtleXMoKSl9fWxldCBrQT1jbGFzcyBleHRlbmRzIFh3e2NvbnN0cnVjdG9yKGUscil7c3VwZXIoZSxyKSx0aGlzLnJlbGF5ZXI9ZSx0aGlzLmxvZ2dlcj1yLHRoaXMuc3Vic2NyaXB0aW9ucz1uZXcgTWFwLHRoaXMudG9waWNNYXA9bmV3IEZBLHRoaXMuZXZlbnRzPW5ldyBTdC5FdmVudEVtaXR0ZXIsdGhpcy5uYW1lPXlBLHRoaXMudmVyc2lvbj13QSx0aGlzLnBlbmRpbmc9bmV3IE1hcCx0aGlzLmNhY2hlZD1bXSx0aGlzLmluaXRpYWxpemVkPSExLHRoaXMuc3RvcmFnZVByZWZpeD1pcix0aGlzLnN1YnNjcmliZVRpbWVvdXQ9Ry50b01pbGlzZWNvbmRzKEcuT05FX01JTlVURSksdGhpcy5pbml0aWFsU3Vic2NyaWJlVGltZW91dD1HLnRvTWlsaXNlY29uZHMoRy5PTkVfU0VDT05EKjE1KSx0aGlzLmJhdGNoU3Vic2NyaWJlVG9waWNzTGltaXQ9NTAwLHRoaXMuaW5pdD1hc3luYygpPT57dGhpcy5pbml0aWFsaXplZHx8KHRoaXMubG9nZ2VyLnRyYWNlKCJJbml0aWFsaXplZCIpLHRoaXMucmVnaXN0ZXJFdmVudExpc3RlbmVycygpLGF3YWl0IHRoaXMucmVzdG9yZSgpKSx0aGlzLmluaXRpYWxpemVkPSEwfSx0aGlzLnN1YnNjcmliZT1hc3luYyhuLGkpPT57dGhpcy5pc0luaXRpYWxpemVkKCksdGhpcy5sb2dnZXIuZGVidWcoIlN1YnNjcmliaW5nIFRvcGljIiksdGhpcy5sb2dnZXIudHJhY2Uoe3R5cGU6Im1ldGhvZCIsbWV0aG9kOiJzdWJzY3JpYmUiLHBhcmFtczp7dG9waWM6bixvcHRzOml9fSk7dHJ5e2NvbnN0IHM9dW8oaSksbz17dG9waWM6bixyZWxheTpzLHRyYW5zcG9ydFR5cGU6aT8udHJhbnNwb3J0VHlwZX07aT8uaW50ZXJuYWw/LnNraXBTdWJzY3JpYmV8fHRoaXMucGVuZGluZy5zZXQobixvKTtjb25zdCBhPWF3YWl0IHRoaXMucnBjU3Vic2NyaWJlKG4scyxpKTtyZXR1cm4gdHlwZW9mIGE9PSJzdHJpbmciJiYodGhpcy5vblN1YnNjcmliZShhLG8pLHRoaXMubG9nZ2VyLmRlYnVnKCJTdWNjZXNzZnVsbHkgU3Vic2NyaWJlZCBUb3BpYyIpLHRoaXMubG9nZ2VyLnRyYWNlKHt0eXBlOiJtZXRob2QiLG1ldGhvZDoic3Vic2NyaWJlIixwYXJhbXM6e3RvcGljOm4sb3B0czppfX0pKSxhfWNhdGNoKHMpe3Rocm93IHRoaXMubG9nZ2VyLmRlYnVnKCJGYWlsZWQgdG8gU3Vic2NyaWJlIFRvcGljIiksdGhpcy5sb2dnZXIuZXJyb3Iocyksc319LHRoaXMudW5zdWJzY3JpYmU9YXN5bmMobixpKT0+e3RoaXMuaXNJbml0aWFsaXplZCgpLHR5cGVvZiBpPy5pZDwidSI/YXdhaXQgdGhpcy51bnN1YnNjcmliZUJ5SWQobixpLmlkLGkpOmF3YWl0IHRoaXMudW5zdWJzY3JpYmVCeVRvcGljKG4saSl9LHRoaXMuaXNTdWJzY3JpYmVkPW49Pm5ldyBQcm9taXNlKGk9PntpKHRoaXMudG9waWNNYXAudG9waWNzLmluY2x1ZGVzKG4pKX0pLHRoaXMuaXNLbm93blRvcGljPW49Pm5ldyBQcm9taXNlKGk9PntpKHRoaXMudG9waWNNYXAudG9waWNzLmluY2x1ZGVzKG4pfHx0aGlzLnBlbmRpbmcuaGFzKG4pfHx0aGlzLmNhY2hlZC5zb21lKHM9PnMudG9waWM9PT1uKSl9KSx0aGlzLm9uPShuLGkpPT57dGhpcy5ldmVudHMub24obixpKX0sdGhpcy5vbmNlPShuLGkpPT57dGhpcy5ldmVudHMub25jZShuLGkpfSx0aGlzLm9mZj0obixpKT0+e3RoaXMuZXZlbnRzLm9mZihuLGkpfSx0aGlzLnJlbW92ZUxpc3RlbmVyPShuLGkpPT57dGhpcy5ldmVudHMucmVtb3ZlTGlzdGVuZXIobixpKX0sdGhpcy5zdGFydD1hc3luYygpPT57YXdhaXQgdGhpcy5vbkNvbm5lY3QoKX0sdGhpcy5zdG9wPWFzeW5jKCk9Pnthd2FpdCB0aGlzLm9uRGlzY29ubmVjdCgpfSx0aGlzLnJlc3RhcnQ9YXN5bmMoKT0+e2F3YWl0IHRoaXMucmVzdG9yZSgpLGF3YWl0IHRoaXMub25SZXN0YXJ0KCl9LHRoaXMuY2hlY2tQZW5kaW5nPWFzeW5jKCk9PntpZih0aGlzLnBlbmRpbmcuc2l6ZT09PTAmJighdGhpcy5pbml0aWFsaXplZHx8IXRoaXMucmVsYXllci5jb25uZWN0ZWQpKXJldHVybjtjb25zdCBuPVtdO3RoaXMucGVuZGluZy5mb3JFYWNoKGk9PntuLnB1c2goaSl9KSxhd2FpdCB0aGlzLmJhdGNoU3Vic2NyaWJlKG4pfSx0aGlzLnJlZ2lzdGVyRXZlbnRMaXN0ZW5lcnM9KCk9Pnt0aGlzLnJlbGF5ZXIuY29yZS5oZWFydGJlYXQub24oUG4ucHVsc2UsYXN5bmMoKT0+e2F3YWl0IHRoaXMuY2hlY2tQZW5kaW5nKCl9KSx0aGlzLmV2ZW50cy5vbihodC5jcmVhdGVkLGFzeW5jIG49Pntjb25zdCBpPWh0LmNyZWF0ZWQ7dGhpcy5sb2dnZXIuaW5mbyhgRW1pdHRpbmcgJHtpfWApLHRoaXMubG9nZ2VyLmRlYnVnKHt0eXBlOiJldmVudCIsZXZlbnQ6aSxkYXRhOm59KSxhd2FpdCB0aGlzLnBlcnNpc3QoKX0pLHRoaXMuZXZlbnRzLm9uKGh0LmRlbGV0ZWQsYXN5bmMgbj0+e2NvbnN0IGk9aHQuZGVsZXRlZDt0aGlzLmxvZ2dlci5pbmZvKGBFbWl0dGluZyAke2l9YCksdGhpcy5sb2dnZXIuZGVidWcoe3R5cGU6ImV2ZW50IixldmVudDppLGRhdGE6bn0pLGF3YWl0IHRoaXMucGVyc2lzdCgpfSl9LHRoaXMucmVsYXllcj1lLHRoaXMubG9nZ2VyPWd0KHIsdGhpcy5uYW1lKSx0aGlzLmNsaWVudElkPSIifWdldCBjb250ZXh0KCl7cmV0dXJuIGN0KHRoaXMubG9nZ2VyKX1nZXQgc3RvcmFnZUtleSgpe3JldHVybiB0aGlzLnN0b3JhZ2VQcmVmaXgrdGhpcy52ZXJzaW9uK3RoaXMucmVsYXllci5jb3JlLmN1c3RvbVN0b3JhZ2VQcmVmaXgrIi8vIit0aGlzLm5hbWV9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLnN1YnNjcmlwdGlvbnMuc2l6ZX1nZXQgaWRzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5zdWJzY3JpcHRpb25zLmtleXMoKSl9Z2V0IHZhbHVlcygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuc3Vic2NyaXB0aW9ucy52YWx1ZXMoKSl9Z2V0IHRvcGljcygpe3JldHVybiB0aGlzLnRvcGljTWFwLnRvcGljc31nZXQgaGFzQW55VG9waWNzKCl7cmV0dXJuIHRoaXMudG9waWNNYXAudG9waWNzLmxlbmd0aD4wfHx0aGlzLnBlbmRpbmcuc2l6ZT4wfHx0aGlzLmNhY2hlZC5sZW5ndGg+MHx8dGhpcy5zdWJzY3JpcHRpb25zLnNpemU+MH1oYXNTdWJzY3JpcHRpb24oZSxyKXtsZXQgbj0hMTt0cnl7bj10aGlzLmdldFN1YnNjcmlwdGlvbihlKS50b3BpYz09PXJ9Y2F0Y2h7fXJldHVybiBufXJlc2V0KCl7dGhpcy5jYWNoZWQ9W10sdGhpcy5pbml0aWFsaXplZD0hMH1vbkRpc2FibGUoKXt0aGlzLnZhbHVlcy5sZW5ndGg+MCYmKHRoaXMuY2FjaGVkPXRoaXMudmFsdWVzKSx0aGlzLnN1YnNjcmlwdGlvbnMuY2xlYXIoKSx0aGlzLnRvcGljTWFwLmNsZWFyKCl9YXN5bmMgdW5zdWJzY3JpYmVCeVRvcGljKGUscil7Y29uc3Qgbj10aGlzLnRvcGljTWFwLmdldChlKTthd2FpdCBQcm9taXNlLmFsbChuLm1hcChhc3luYyBpPT5hd2FpdCB0aGlzLnVuc3Vic2NyaWJlQnlJZChlLGkscikpKX1hc3luYyB1bnN1YnNjcmliZUJ5SWQoZSxyLG4pe3RoaXMubG9nZ2VyLmRlYnVnKCJVbnN1YnNjcmliaW5nIFRvcGljIiksdGhpcy5sb2dnZXIudHJhY2Uoe3R5cGU6Im1ldGhvZCIsbWV0aG9kOiJ1bnN1YnNjcmliZSIscGFyYW1zOnt0b3BpYzplLGlkOnIsb3B0czpufX0pO3RyeXtjb25zdCBpPXllKCJVU0VSX0RJU0NPTk5FQ1RFRCIsYCR7dGhpcy5uYW1lfSwgJHtlfWApO2F3YWl0IHRoaXMub25VbnN1YnNjcmliZShlLHIsaSk7Y29uc3Qgcz11byhuKTthd2FpdCB0aGlzLnJlc3RhcnRUb0NvbXBsZXRlKHt0b3BpYzplLGlkOnIscmVsYXk6c30pLGF3YWl0IHRoaXMucnBjVW5zdWJzY3JpYmUoZSxyLHMpLHRoaXMubG9nZ2VyLmRlYnVnKCJTdWNjZXNzZnVsbHkgVW5zdWJzY3JpYmVkIFRvcGljIiksdGhpcy5sb2dnZXIudHJhY2Uoe3R5cGU6Im1ldGhvZCIsbWV0aG9kOiJ1bnN1YnNjcmliZSIscGFyYW1zOnt0b3BpYzplLGlkOnIsb3B0czpufX0pfWNhdGNoKGkpe3Rocm93IHRoaXMubG9nZ2VyLmRlYnVnKCJGYWlsZWQgdG8gVW5zdWJzY3JpYmUgVG9waWMiKSx0aGlzLmxvZ2dlci5lcnJvcihpKSxpfX1hc3luYyBycGNTdWJzY3JpYmUoZSxyLG4pe2NvbnN0IGk9YXdhaXQgdGhpcy5nZXRTdWJzY3JpcHRpb25JZChlKTtpZihuPy5pbnRlcm5hbD8uc2tpcFN1YnNjcmliZSlyZXR1cm4gaTsoIW58fG4/LnRyYW5zcG9ydFR5cGU9PT1wZS5yZWxheSkmJmF3YWl0IHRoaXMucmVzdGFydFRvQ29tcGxldGUoe3RvcGljOmUsaWQ6ZSxyZWxheTpyfSk7Y29uc3Qgcz17bWV0aG9kOkduKHIucHJvdG9jb2wpLnN1YnNjcmliZSxwYXJhbXM6e3RvcGljOmV9fTt0aGlzLmxvZ2dlci5kZWJ1ZygiT3V0Z29pbmcgUmVsYXkgUGF5bG9hZCIpLHRoaXMubG9nZ2VyLnRyYWNlKHt0eXBlOiJwYXlsb2FkIixkaXJlY3Rpb246Im91dGdvaW5nIixyZXF1ZXN0OnN9KTtjb25zdCBvPW4/LmludGVybmFsPy50aHJvd09uRmFpbGVkUHVibGlzaDt0cnl7aWYobj8udHJhbnNwb3J0VHlwZT09PXBlLmxpbmtfbW9kZSlyZXR1cm4gc2V0VGltZW91dCgoKT0+eyh0aGlzLnJlbGF5ZXIuY29ubmVjdGVkfHx0aGlzLnJlbGF5ZXIuY29ubmVjdGluZykmJnRoaXMucmVsYXllci5yZXF1ZXN0KHMpLmNhdGNoKHU9PnRoaXMubG9nZ2VyLndhcm4odSkpfSxHLnRvTWlsaXNlY29uZHMoRy5PTkVfU0VDT05EKSksaTtjb25zdCBhPW5ldyBQcm9taXNlKGFzeW5jIHU9Pntjb25zdCBsPWg9PntoLnRvcGljPT09ZSYmKHRoaXMuZXZlbnRzLnJlbW92ZUxpc3RlbmVyKGh0LmNyZWF0ZWQsbCksdShoLmlkKSl9O3RoaXMuZXZlbnRzLm9uKGh0LmNyZWF0ZWQsbCk7dHJ5e2NvbnN0IGg9YXdhaXQgQ3QobmV3IFByb21pc2UoKHAsZyk9Pnt0aGlzLnJlbGF5ZXIucmVxdWVzdChzKS5jYXRjaCh3PT57dGhpcy5sb2dnZXIud2Fybih3LHc/Lm1lc3NhZ2UpLGcodyl9KS50aGVuKHApfSksdGhpcy5pbml0aWFsU3Vic2NyaWJlVGltZW91dCxgU3Vic2NyaWJpbmcgdG8gJHtlfSBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW5gKTt0aGlzLmV2ZW50cy5yZW1vdmVMaXN0ZW5lcihodC5jcmVhdGVkLGwpLHUoaCl9Y2F0Y2h7fX0pLGM9YXdhaXQgQ3QoYSx0aGlzLnN1YnNjcmliZVRpbWVvdXQsYFN1YnNjcmliaW5nIHRvICR7ZX0gZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluYCk7aWYoIWMmJm8pdGhyb3cgbmV3IEVycm9yKGBTdWJzY3JpYmluZyB0byAke2V9IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbmApO3JldHVybiBjP2k6bnVsbH1jYXRjaChhKXtpZih0aGlzLmxvZ2dlci5kZWJ1ZygiT3V0Z29pbmcgUmVsYXkgU3Vic2NyaWJlIFBheWxvYWQgc3RhbGxlZCIpLHRoaXMucmVsYXllci5ldmVudHMuZW1pdCh2ZS5jb25uZWN0aW9uX3N0YWxsZWQpLG8pdGhyb3cgYX1yZXR1cm4gbnVsbH1hc3luYyBycGNCYXRjaFN1YnNjcmliZShlKXtpZighZS5sZW5ndGgpcmV0dXJuITA7Y29uc3Qgcj1lWzBdLnJlbGF5LG49e21ldGhvZDpHbihyLnByb3RvY29sKS5iYXRjaFN1YnNjcmliZSxwYXJhbXM6e3RvcGljczplLm1hcChpPT5pLnRvcGljKX19O3RoaXMubG9nZ2VyLmRlYnVnKCJPdXRnb2luZyBSZWxheSBQYXlsb2FkIiksdGhpcy5sb2dnZXIudHJhY2Uoe3R5cGU6InBheWxvYWQiLGRpcmVjdGlvbjoib3V0Z29pbmciLHJlcXVlc3Q6bn0pO3RyeXtyZXR1cm4gYXdhaXQgQ3QobmV3IFByb21pc2UoKGkscyk9Pnt0aGlzLnJlbGF5ZXIucmVxdWVzdChuKS50aGVuKGkpLmNhdGNoKG89Pnt0aGlzLmxvZ2dlci53YXJuKG8pLHMobyl9KX0pLHRoaXMuc3Vic2NyaWJlVGltZW91dCwicnBjQmF0Y2hTdWJzY3JpYmUgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIiksITB9Y2F0Y2h7cmV0dXJuIHRoaXMucmVsYXllci5ldmVudHMuZW1pdCh2ZS5jb25uZWN0aW9uX3N0YWxsZWQpLCExfX1hc3luYyBycGNCYXRjaEZldGNoTWVzc2FnZXMoZSl7aWYoIWUubGVuZ3RoKXJldHVybjtjb25zdCByPWVbMF0ucmVsYXksbj17bWV0aG9kOkduKHIucHJvdG9jb2wpLmJhdGNoRmV0Y2hNZXNzYWdlcyxwYXJhbXM6e3RvcGljczplLm1hcChzPT5zLnRvcGljKX19O3RoaXMubG9nZ2VyLmRlYnVnKCJPdXRnb2luZyBSZWxheSBQYXlsb2FkIiksdGhpcy5sb2dnZXIudHJhY2Uoe3R5cGU6InBheWxvYWQiLGRpcmVjdGlvbjoib3V0Z29pbmciLHJlcXVlc3Q6bn0pO2xldCBpO3RyeXtpPWF3YWl0IGF3YWl0IEN0KG5ldyBQcm9taXNlKChzLG8pPT57dGhpcy5yZWxheWVyLnJlcXVlc3QobikuY2F0Y2goYT0+e3RoaXMubG9nZ2VyLndhcm4oYSksbyhhKX0pLnRoZW4ocyl9KSx0aGlzLnN1YnNjcmliZVRpbWVvdXQsInJwY0JhdGNoRmV0Y2hNZXNzYWdlcyBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4iKX1jYXRjaHt0aGlzLnJlbGF5ZXIuZXZlbnRzLmVtaXQodmUuY29ubmVjdGlvbl9zdGFsbGVkKX1yZXR1cm4gaX1ycGNVbnN1YnNjcmliZShlLHIsbil7Y29uc3QgaT17bWV0aG9kOkduKG4ucHJvdG9jb2wpLnVuc3Vic2NyaWJlLHBhcmFtczp7dG9waWM6ZSxpZDpyfX07cmV0dXJuIHRoaXMubG9nZ2VyLmRlYnVnKCJPdXRnb2luZyBSZWxheSBQYXlsb2FkIiksdGhpcy5sb2dnZXIudHJhY2Uoe3R5cGU6InBheWxvYWQiLGRpcmVjdGlvbjoib3V0Z29pbmciLHJlcXVlc3Q6aX0pLHRoaXMucmVsYXllci5yZXF1ZXN0KGkpfW9uU3Vic2NyaWJlKGUscil7dGhpcy5zZXRTdWJzY3JpcHRpb24oZSx7Li4ucixpZDplfSksdGhpcy5wZW5kaW5nLmRlbGV0ZShyLnRvcGljKX1vbkJhdGNoU3Vic2NyaWJlKGUpe2UubGVuZ3RoJiZlLmZvckVhY2gocj0+e3RoaXMuc2V0U3Vic2NyaXB0aW9uKHIuaWQsey4uLnJ9KSx0aGlzLnBlbmRpbmcuZGVsZXRlKHIudG9waWMpfSl9YXN5bmMgb25VbnN1YnNjcmliZShlLHIsbil7dGhpcy5ldmVudHMucmVtb3ZlQWxsTGlzdGVuZXJzKHIpLHRoaXMuaGFzU3Vic2NyaXB0aW9uKHIsZSkmJnRoaXMuZGVsZXRlU3Vic2NyaXB0aW9uKHIsbiksYXdhaXQgdGhpcy5yZWxheWVyLm1lc3NhZ2VzLmRlbChlKX1hc3luYyBzZXRSZWxheWVyU3Vic2NyaXB0aW9ucyhlKXthd2FpdCB0aGlzLnJlbGF5ZXIuY29yZS5zdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlS2V5LGUpfWFzeW5jIGdldFJlbGF5ZXJTdWJzY3JpcHRpb25zKCl7cmV0dXJuIGF3YWl0IHRoaXMucmVsYXllci5jb3JlLnN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXkpfXNldFN1YnNjcmlwdGlvbihlLHIpe3RoaXMubG9nZ2VyLmRlYnVnKCJTZXR0aW5nIHN1YnNjcmlwdGlvbiIpLHRoaXMubG9nZ2VyLnRyYWNlKHt0eXBlOiJtZXRob2QiLG1ldGhvZDoic2V0U3Vic2NyaXB0aW9uIixpZDplLHN1YnNjcmlwdGlvbjpyfSksdGhpcy5hZGRTdWJzY3JpcHRpb24oZSxyKX1hZGRTdWJzY3JpcHRpb24oZSxyKXt0aGlzLnN1YnNjcmlwdGlvbnMuc2V0KGUsey4uLnJ9KSx0aGlzLnRvcGljTWFwLnNldChyLnRvcGljLGUpLHRoaXMuZXZlbnRzLmVtaXQoaHQuY3JlYXRlZCxyKX1nZXRTdWJzY3JpcHRpb24oZSl7dGhpcy5sb2dnZXIuZGVidWcoIkdldHRpbmcgc3Vic2NyaXB0aW9uIiksdGhpcy5sb2dnZXIudHJhY2Uoe3R5cGU6Im1ldGhvZCIsbWV0aG9kOiJnZXRTdWJzY3JpcHRpb24iLGlkOmV9KTtjb25zdCByPXRoaXMuc3Vic2NyaXB0aW9ucy5nZXQoZSk7aWYoIXIpe2NvbnN0e21lc3NhZ2U6bn09WSgiTk9fTUFUQ0hJTkdfS0VZIixgJHt0aGlzLm5hbWV9OiAke2V9YCk7dGhyb3cgbmV3IEVycm9yKG4pfXJldHVybiByfWRlbGV0ZVN1YnNjcmlwdGlvbihlLHIpe3RoaXMubG9nZ2VyLmRlYnVnKCJEZWxldGluZyBzdWJzY3JpcHRpb24iKSx0aGlzLmxvZ2dlci50cmFjZSh7dHlwZToibWV0aG9kIixtZXRob2Q6ImRlbGV0ZVN1YnNjcmlwdGlvbiIsaWQ6ZSxyZWFzb246cn0pO2NvbnN0IG49dGhpcy5nZXRTdWJzY3JpcHRpb24oZSk7dGhpcy5zdWJzY3JpcHRpb25zLmRlbGV0ZShlKSx0aGlzLnRvcGljTWFwLmRlbGV0ZShuLnRvcGljLGUpLHRoaXMuZXZlbnRzLmVtaXQoaHQuZGVsZXRlZCx7Li4ubixyZWFzb246cn0pfWFzeW5jIHBlcnNpc3QoKXthd2FpdCB0aGlzLnNldFJlbGF5ZXJTdWJzY3JpcHRpb25zKHRoaXMudmFsdWVzKSx0aGlzLmV2ZW50cy5lbWl0KGh0LnN5bmMpfWFzeW5jIG9uUmVzdGFydCgpe2lmKHRoaXMuY2FjaGVkLmxlbmd0aCl7Y29uc3QgZT1bLi4udGhpcy5jYWNoZWRdLHI9TWF0aC5jZWlsKHRoaXMuY2FjaGVkLmxlbmd0aC90aGlzLmJhdGNoU3Vic2NyaWJlVG9waWNzTGltaXQpO2ZvcihsZXQgbj0wO248cjtuKyspe2NvbnN0IGk9ZS5zcGxpY2UoMCx0aGlzLmJhdGNoU3Vic2NyaWJlVG9waWNzTGltaXQpO2F3YWl0IHRoaXMuYmF0Y2hTdWJzY3JpYmUoaSl9fXRoaXMuZXZlbnRzLmVtaXQoaHQucmVzdWJzY3JpYmVkKX1hc3luYyByZXN0b3JlKCl7dHJ5e2NvbnN0IGU9YXdhaXQgdGhpcy5nZXRSZWxheWVyU3Vic2NyaXB0aW9ucygpO2lmKHR5cGVvZiBlPiJ1Inx8IWUubGVuZ3RoKXJldHVybjtpZih0aGlzLnN1YnNjcmlwdGlvbnMuc2l6ZSYmIWUuZXZlcnkocj0+ci50b3BpYz09PXRoaXMuc3Vic2NyaXB0aW9ucy5nZXQoci5pZCk/LnRvcGljKSl7Y29uc3R7bWVzc2FnZTpyfT1ZKCJSRVNUT1JFX1dJTExfT1ZFUlJJREUiLHRoaXMubmFtZSk7dGhyb3cgdGhpcy5sb2dnZXIuZXJyb3IociksdGhpcy5sb2dnZXIuZXJyb3IoYCR7dGhpcy5uYW1lfTogJHtKU09OLnN0cmluZ2lmeSh0aGlzLnZhbHVlcyl9YCksbmV3IEVycm9yKHIpfXRoaXMuY2FjaGVkPWUsdGhpcy5sb2dnZXIuZGVidWcoYFN1Y2Nlc3NmdWxseSBSZXN0b3JlZCBzdWJzY3JpcHRpb25zIGZvciAke3RoaXMubmFtZX1gKSx0aGlzLmxvZ2dlci50cmFjZSh7dHlwZToibWV0aG9kIixtZXRob2Q6InJlc3RvcmUiLHN1YnNjcmlwdGlvbnM6dGhpcy52YWx1ZXN9KX1jYXRjaChlKXt0aGlzLmxvZ2dlci5kZWJ1ZyhgRmFpbGVkIHRvIFJlc3RvcmUgc3Vic2NyaXB0aW9ucyBmb3IgJHt0aGlzLm5hbWV9YCksdGhpcy5sb2dnZXIuZXJyb3IoZSl9fWFzeW5jIGJhdGNoU3Vic2NyaWJlKGUpe2lmKGUubGVuZ3RoKXtpZighYXdhaXQgdGhpcy5ycGNCYXRjaFN1YnNjcmliZShlKSl7dGhpcy5sb2dnZXIud2FybihgQmF0Y2ggc3Vic2NyaWJlIGZhaWxlZCBmb3IgJHtlLmxlbmd0aH0gdG9waWNzLCBhZGRpbmcgdG8gcGVuZGluZyBmb3IgcmV0cnlgKSxlLmZvckVhY2gocj0+e3RoaXMucGVuZGluZy5zZXQoci50b3BpYyxyKX0pO3JldHVybn10aGlzLm9uQmF0Y2hTdWJzY3JpYmUoYXdhaXQgUHJvbWlzZS5hbGwoZS5tYXAoYXN5bmMgcj0+KHsuLi5yLGlkOmF3YWl0IHRoaXMuZ2V0U3Vic2NyaXB0aW9uSWQoci50b3BpYyl9KSkpKX19YXN5bmMgYmF0Y2hGZXRjaE1lc3NhZ2VzKGUpe2lmKCFlLmxlbmd0aClyZXR1cm47dGhpcy5sb2dnZXIudHJhY2UoYEZldGNoaW5nIGJhdGNoIG1lc3NhZ2VzIGZvciAke2UubGVuZ3RofSBzdWJzY3JpcHRpb25zYCk7Y29uc3Qgcj1hd2FpdCB0aGlzLnJwY0JhdGNoRmV0Y2hNZXNzYWdlcyhlKTtyJiZyLm1lc3NhZ2VzJiYoYXdhaXQgTDMoRy50b01pbGlzZWNvbmRzKEcuT05FX1NFQ09ORCkpLGF3YWl0IHRoaXMucmVsYXllci5oYW5kbGVCYXRjaE1lc3NhZ2VFdmVudHMoci5tZXNzYWdlcykpfWFzeW5jIG9uQ29ubmVjdCgpe2F3YWl0IHRoaXMucmVzdGFydCgpLHRoaXMucmVzZXQoKX1vbkRpc2Nvbm5lY3QoKXt0aGlzLm9uRGlzYWJsZSgpfWlzSW5pdGlhbGl6ZWQoKXtpZighdGhpcy5pbml0aWFsaXplZCl7Y29uc3R7bWVzc2FnZTplfT1ZKCJOT1RfSU5JVElBTElaRUQiLHRoaXMubmFtZSk7dGhyb3cgbmV3IEVycm9yKGUpfX1hc3luYyByZXN0YXJ0VG9Db21wbGV0ZShlKXshdGhpcy5yZWxheWVyLmNvbm5lY3RlZCYmIXRoaXMucmVsYXllci5jb25uZWN0aW5nJiYodGhpcy5jYWNoZWQucHVzaChlKSxhd2FpdCB0aGlzLnJlbGF5ZXIudHJhbnNwb3J0T3BlbigpKX1hc3luYyBnZXRDbGllbnRJZCgpe3JldHVybiB0aGlzLmNsaWVudElkfHwodGhpcy5jbGllbnRJZD1hd2FpdCB0aGlzLnJlbGF5ZXIuY29yZS5jcnlwdG8uZ2V0Q2xpZW50SWQoKSksdGhpcy5jbGllbnRJZH1hc3luYyBnZXRTdWJzY3JpcHRpb25JZChlKXtyZXR1cm4gdnQoZSthd2FpdCB0aGlzLmdldENsaWVudElkKCkpfX0sTUE9Y2xhc3MgZXh0ZW5kcyBZd3tjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLnByb3RvY29sPSJ3YyIsdGhpcy52ZXJzaW9uPTIsdGhpcy5ldmVudHM9bmV3IFN0LkV2ZW50RW1pdHRlcix0aGlzLm5hbWU9aEEsdGhpcy50cmFuc3BvcnRFeHBsaWNpdGx5Q2xvc2VkPSExLHRoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy5jb25uZWN0aW9uQXR0ZW1wdEluUHJvZ3Jlc3M9ITEsdGhpcy5oYXNFeHBlcmllbmNlZE5ldHdvcmtEaXNydXB0aW9uPSExLHRoaXMuaGVhcnRCZWF0VGltZW91dD1HLnRvTWlsaXNlY29uZHMoRy5USElSVFlfU0VDT05EUytHLkZJVkVfU0VDT05EUyksdGhpcy5yZWNvbm5lY3RJblByb2dyZXNzPSExLHRoaXMucmVxdWVzdHNJbkZsaWdodD1bXSx0aGlzLmNvbm5lY3RUaW1lb3V0PUcudG9NaWxpc2Vjb25kcyhHLk9ORV9TRUNPTkQqMTUpLHRoaXMuc3RhbGxlZFJlc3RhcnRJblByb2dyZXNzPSExLHRoaXMuc3RhbGxlZFJlc3RhcnRCYWNrb2ZmPTAsdGhpcy5zdGFsbGVkUmVzdGFydEJhc2VJbnRlcnZhbD1HLnRvTWlsaXNlY29uZHMoRy5PTkVfU0VDT05EKjIpLHRoaXMuc3RhbGxlZFJlc3RhcnRNYXhJbnRlcnZhbD1HLnRvTWlsaXNlY29uZHMoRy5USElSVFlfU0VDT05EUyksdGhpcy5yZXF1ZXN0PWFzeW5jIHI9Pnt0aGlzLmxvZ2dlci5kZWJ1ZygiUHVibGlzaGluZyBSZXF1ZXN0IFBheWxvYWQiKTtjb25zdCBuPXIuaWR8fFdyKCkudG9TdHJpbmcoKTthd2FpdCB0aGlzLnRvRXN0YWJsaXNoQ29ubmVjdGlvbigpO3RyeXt0aGlzLmxvZ2dlci50cmFjZSh7aWQ6bixtZXRob2Q6ci5tZXRob2QsdG9waWM6ci5wYXJhbXM/LnRvcGljfSwicmVsYXllci5yZXF1ZXN0IC0gcHVibGlzaGluZy4uLiIpO2NvbnN0IGk9YCR7bn06JHtyLnBhcmFtcz8udGFnfHwiIn1gO3RoaXMucmVxdWVzdHNJbkZsaWdodC5wdXNoKGkpO2NvbnN0IHM9YXdhaXQgdGhpcy5wcm92aWRlci5yZXF1ZXN0KHIpO3JldHVybiB0aGlzLnJlcXVlc3RzSW5GbGlnaHQ9dGhpcy5yZXF1ZXN0c0luRmxpZ2h0LmZpbHRlcihvPT5vIT09aSksc31jYXRjaChpKXt0aHJvdyB0aGlzLmxvZ2dlci5kZWJ1ZyhgRmFpbGVkIHRvIFB1Ymxpc2ggUmVxdWVzdDogJHtufWApLGl9fSx0aGlzLnJlc2V0UGluZ1RpbWVvdXQ9KCk9PntvbygpJiYoY2xlYXJUaW1lb3V0KHRoaXMucGluZ1RpbWVvdXQpLHRoaXMucGluZ1RpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RyeXt0aGlzLmxvZ2dlci5kZWJ1Zyh7fSwicGluZ1RpbWVvdXQ6IENvbm5lY3Rpb24gc3RhbGxlZCwgdGVybWluYXRpbmcuLi4iKSx0aGlzLnByb3ZpZGVyPy5jb25uZWN0aW9uPy5zb2NrZXQ/LnRlcm1pbmF0ZT8uKCl9Y2F0Y2gocil7dGhpcy5sb2dnZXIud2FybihyLHI/Lm1lc3NhZ2UpfX0sdGhpcy5oZWFydEJlYXRUaW1lb3V0KSl9LHRoaXMub25QYXlsb2FkSGFuZGxlcj1yPT57dGhpcy5vblByb3ZpZGVyUGF5bG9hZChyKSx0aGlzLnJlc2V0UGluZ1RpbWVvdXQoKX0sdGhpcy5vbkNvbm5lY3RIYW5kbGVyPSgpPT57dGhpcy5sb2dnZXIud2Fybih7fSwiUmVsYXllciBjb25uZWN0ZWQg8J+bnCIpLHRoaXMuc3RhcnRQaW5nVGltZW91dCgpLHRoaXMuc3RhbGxlZFJlc3RhcnRCYWNrb2ZmPTAsdGhpcy5ldmVudHMuZW1pdCh2ZS5jb25uZWN0KX0sdGhpcy5vbkRpc2Nvbm5lY3RIYW5kbGVyPSgpPT57dGhpcy5sb2dnZXIud2Fybih7fSwiUmVsYXllciBkaXNjb25uZWN0ZWQg8J+bkSIpLHRoaXMucmVxdWVzdHNJbkZsaWdodD1bXSx0aGlzLm9uUHJvdmlkZXJEaXNjb25uZWN0KCl9LHRoaXMub25Qcm92aWRlckVycm9ySGFuZGxlcj1yPT57dGhpcy5sb2dnZXIuZmF0YWwoYEZhdGFsIHNvY2tldCBlcnJvcjogJHtyLm1lc3NhZ2V9YCksdGhpcy5ldmVudHMuZW1pdCh2ZS5lcnJvcixyKSx0aGlzLmxvZ2dlci5mYXRhbCgiRmF0YWwgc29ja2V0IGVycm9yIHJlY2VpdmVkLCBjbG9zaW5nIHRyYW5zcG9ydCIpLHRoaXMudHJhbnNwb3J0RXhwbGljaXRseUNsb3NlZD0hMCxjbGVhclRpbWVvdXQodGhpcy5yZWNvbm5lY3RUaW1lb3V0KSx0aGlzLnJlY29ubmVjdFRpbWVvdXQ9dm9pZCAwLHRoaXMucmVjb25uZWN0SW5Qcm9ncmVzcz0hMSx0aGlzLnRyYW5zcG9ydENsb3NlKCkuY2F0Y2gobj0+dGhpcy5sb2dnZXIud2FybihuKSl9LHRoaXMucmVnaXN0ZXJQcm92aWRlckxpc3RlbmVycz0oKT0+e3RoaXMucHJvdmlkZXIub24od3QucGF5bG9hZCx0aGlzLm9uUGF5bG9hZEhhbmRsZXIpLHRoaXMucHJvdmlkZXIub24od3QuY29ubmVjdCx0aGlzLm9uQ29ubmVjdEhhbmRsZXIpLHRoaXMucHJvdmlkZXIub24od3QuZGlzY29ubmVjdCx0aGlzLm9uRGlzY29ubmVjdEhhbmRsZXIpLHRoaXMucHJvdmlkZXIub24od3QuZXJyb3IsdGhpcy5vblByb3ZpZGVyRXJyb3JIYW5kbGVyKX0sdGhpcy5jb3JlPWUuY29yZSx0aGlzLmxvZ2dlcj15dSh7bG9nZ2VyOmUubG9nZ2VyPz9sQSxuYW1lOnRoaXMubmFtZX0pLHRoaXMubWVzc2FnZXM9bmV3IE5BKHRoaXMubG9nZ2VyLGUuY29yZSksdGhpcy5zdWJzY3JpYmVyPW5ldyBrQSh0aGlzLHRoaXMubG9nZ2VyKSx0aGlzLnB1Ymxpc2hlcj1uZXcgTEEodGhpcyx0aGlzLmxvZ2dlciksdGhpcy5wcm9qZWN0SWQ9ZS5wcm9qZWN0SWQsdGhpcy5yZWxheVVybD1lLnJlbGF5VXJsfHxpMCx2MygpP3RoaXMucGFja2FnZU5hbWU9ZGgoKTp4MygpJiYodGhpcy5idW5kbGVJZD1kaCgpKSx0aGlzLnByb3ZpZGVyPXt9fWFzeW5jIGluaXQoKXt0aGlzLmxvZ2dlci50cmFjZSgiSW5pdGlhbGl6ZWQiKSx0aGlzLnJlZ2lzdGVyRXZlbnRMaXN0ZW5lcnMoKSxhd2FpdCBQcm9taXNlLmFsbChbdGhpcy5tZXNzYWdlcy5pbml0KCksdGhpcy5zdWJzY3JpYmVyLmluaXQoKV0pLHRoaXMuaW5pdGlhbGl6ZWQ9ITAsdGhpcy50cmFuc3BvcnRPcGVuKCkuY2F0Y2goZT0+dGhpcy5sb2dnZXIud2FybihlLGU/Lm1lc3NhZ2UpKX1nZXQgY29udGV4dCgpe3JldHVybiBjdCh0aGlzLmxvZ2dlcil9Z2V0IGNvbm5lY3RlZCgpe3JldHVybiB0aGlzLnByb3ZpZGVyPy5jb25uZWN0aW9uPy5zb2NrZXQ/LnJlYWR5U3RhdGU9PT0xfWdldCBjb25uZWN0aW5nKCl7cmV0dXJuIHRoaXMucHJvdmlkZXI/LmNvbm5lY3Rpb24/LnNvY2tldD8ucmVhZHlTdGF0ZT09PTB8fHRoaXMuY29ubmVjdFByb21pc2UhPT12b2lkIDB9YXN5bmMgcHVibGlzaChlLHIsbil7dGhpcy5pc0luaXRpYWxpemVkKCksYXdhaXQgdGhpcy5wdWJsaXNoZXIucHVibGlzaChlLHIsbiksYXdhaXQgdGhpcy5yZWNvcmRNZXNzYWdlRXZlbnQoe3RvcGljOmUsbWVzc2FnZTpyLHB1Ymxpc2hlZEF0OkRhdGUubm93KCksdHJhbnNwb3J0VHlwZTpwZS5yZWxheX0sS3Mub3V0Ym91bmQpfWFzeW5jIHB1Ymxpc2hDdXN0b20oZSl7dGhpcy5pc0luaXRpYWxpemVkKCksYXdhaXQgdGhpcy5wdWJsaXNoZXIucHVibGlzaEN1c3RvbShlKX1hc3luYyBzdWJzY3JpYmUoZSxyKXt0aGlzLmlzSW5pdGlhbGl6ZWQoKSwoIXI/LnRyYW5zcG9ydFR5cGV8fHI/LnRyYW5zcG9ydFR5cGU9PT0icmVsYXkiKSYmYXdhaXQgdGhpcy50b0VzdGFibGlzaENvbm5lY3Rpb24oKTtjb25zdCBuPXI/LmludGVybmFsPy50aHJvd09uRmFpbGVkUHVibGlzaD8/ITA7bGV0IGk9dGhpcy5zdWJzY3JpYmVyLnRvcGljTWFwLmdldChlKT8uWzBdfHwiIixzO2NvbnN0IG89YT0+e2EudG9waWM9PT1lJiYodGhpcy5zdWJzY3JpYmVyLm9mZihodC5jcmVhdGVkLG8pLHMoKSl9O3JldHVybiBhd2FpdCBQcm9taXNlLmFsbChbbmV3IFByb21pc2UoYT0+e3M9YSx0aGlzLnN1YnNjcmliZXIub24oaHQuY3JlYXRlZCxvKX0pLG5ldyBQcm9taXNlKChhLGMpPT57dGhpcy5zdWJzY3JpYmVyLnN1YnNjcmliZShlLHtpbnRlcm5hbDp7dGhyb3dPbkZhaWxlZFB1Ymxpc2g6bn0sLi4ucn0pLnRoZW4odT0+e2k9dXx8aSxhKCl9KS5jYXRjaCh1PT57bj9jKHUpOmEoKX0pfSldKSxpfWFzeW5jIHVuc3Vic2NyaWJlKGUscil7dGhpcy5pc0luaXRpYWxpemVkKCksYXdhaXQgdGhpcy5zdWJzY3JpYmVyLnVuc3Vic2NyaWJlKGUscil9b24oZSxyKXt0aGlzLmV2ZW50cy5vbihlLHIpfW9uY2UoZSxyKXt0aGlzLmV2ZW50cy5vbmNlKGUscil9b2ZmKGUscil7dGhpcy5ldmVudHMub2ZmKGUscil9cmVtb3ZlTGlzdGVuZXIoZSxyKXt0aGlzLmV2ZW50cy5yZW1vdmVMaXN0ZW5lcihlLHIpfWFzeW5jIHRyYW5zcG9ydERpc2Nvbm5lY3QoKXt0aGlzLnByb3ZpZGVyLmRpc2Nvbm5lY3QmJih0aGlzLmhhc0V4cGVyaWVuY2VkTmV0d29ya0Rpc3J1cHRpb258fHRoaXMuY29ubmVjdGVkKT9hd2FpdCBDdCh0aGlzLnByb3ZpZGVyLmRpc2Nvbm5lY3QoKSwyZTMsInByb3ZpZGVyLmRpc2Nvbm5lY3QoKSIpLmNhdGNoKCgpPT50aGlzLm9uUHJvdmlkZXJEaXNjb25uZWN0KCkpOnRoaXMub25Qcm92aWRlckRpc2Nvbm5lY3QoKX1hc3luYyB0cmFuc3BvcnRDbG9zZSgpe3RoaXMudHJhbnNwb3J0RXhwbGljaXRseUNsb3NlZD0hMCxjbGVhclRpbWVvdXQodGhpcy5zdGFsbGVkUmVzdGFydFRpbWVvdXQpLHRoaXMuc3RhbGxlZFJlc3RhcnRJblByb2dyZXNzPSExLHRoaXMuc3RhbGxlZFJlc3RhcnRCYWNrb2ZmPTAsYXdhaXQgdGhpcy5yZXNldFRyYW5zcG9ydCgpfWFzeW5jIHRyYW5zcG9ydE9wZW4oZSl7aWYoIXRoaXMuc3Vic2NyaWJlci5oYXNBbnlUb3BpY3Mpe3RoaXMubG9nZ2VyLmluZm8oIlN0YXJ0aW5nIFdTIGNvbm5lY3Rpb24gc2tpcHBlZCBiZWNhdXNlIHRoZSBjbGllbnQgaGFzIG5vIHRvcGljcyB0byB3b3JrIHdpdGguIik7cmV0dXJufWlmKHRoaXMuY29ubmVjdFByb21pc2U/KHRoaXMubG9nZ2VyLmRlYnVnKHt9LCJXYWl0aW5nIGZvciBleGlzdGluZyBjb25uZWN0aW9uIGF0dGVtcHQgdG8gcmVzb2x2ZS4uLiIpLGF3YWl0IHRoaXMuY29ubmVjdFByb21pc2UsdGhpcy5sb2dnZXIuZGVidWcoe30sIkV4aXN0aW5nIGNvbm5lY3Rpb24gYXR0ZW1wdCByZXNvbHZlZCIpKToodGhpcy5jb25uZWN0UHJvbWlzZT10aGlzLmNvbm5lY3QoZSkuZmluYWxseSgoKT0+e3RoaXMuY29ubmVjdFByb21pc2U9dm9pZCAwfSksYXdhaXQgdGhpcy5jb25uZWN0UHJvbWlzZSksIXRoaXMuY29ubmVjdGVkKXRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZXN0YWJsaXNoIHNvY2tldCBjb25uZWN0aW9uIHRvIHRoZSByZWxheSBzZXJ2ZXI6ICR7dGhpcy5yZWxheVVybH1gKX1hc3luYyByZXN0YXJ0VHJhbnNwb3J0KGUpe3RoaXMubG9nZ2VyLmRlYnVnKHt9LCJSZXN0YXJ0aW5nIHRyYW5zcG9ydC4uLiIpLCF0aGlzLmNvbm5lY3Rpb25BdHRlbXB0SW5Qcm9ncmVzcyYmKHRoaXMucmVsYXlVcmw9ZXx8dGhpcy5yZWxheVVybCxhd2FpdCB0aGlzLmNvbmZpcm1PbmxpbmVTdGF0ZU9yVGhyb3coKSxhd2FpdCB0aGlzLnJlc2V0VHJhbnNwb3J0KCksYXdhaXQgdGhpcy50cmFuc3BvcnRPcGVuKCkpfWFzeW5jIHJlc2V0VHJhbnNwb3J0KCl7dGhpcy5yZWNvbm5lY3RJblByb2dyZXNzPSEwLGNsZWFyVGltZW91dCh0aGlzLnJlY29ubmVjdFRpbWVvdXQpLHRoaXMucmVjb25uZWN0VGltZW91dD12b2lkIDAsYXdhaXQgdGhpcy50cmFuc3BvcnREaXNjb25uZWN0KCksYXdhaXQgdGhpcy5zdWJzY3JpYmVyLnN0b3AoKSx0aGlzLnJlY29ubmVjdEluUHJvZ3Jlc3M9ITF9YXN5bmMgY29uZmlybU9ubGluZVN0YXRlT3JUaHJvdygpe2lmKCFhd2FpdCBUaCgpKXRocm93IG5ldyBFcnJvcigiTm8gaW50ZXJuZXQgY29ubmVjdGlvbiBkZXRlY3RlZC4gUGxlYXNlIHJlc3RhcnQgeW91ciBuZXR3b3JrIGFuZCB0cnkgYWdhaW4uIil9YXN5bmMgaGFuZGxlQmF0Y2hNZXNzYWdlRXZlbnRzKGUpe2lmKGU/Lmxlbmd0aD09PTApe3RoaXMubG9nZ2VyLnRyYWNlKCJCYXRjaCBtZXNzYWdlIGV2ZW50cyBpcyBlbXB0eS4gSWdub3JpbmcuLi4iKTtyZXR1cm59Y29uc3Qgcj1lLnNvcnQoKG4saSk9Pm4ucHVibGlzaGVkQXQtaS5wdWJsaXNoZWRBdCk7dGhpcy5sb2dnZXIuZGVidWcoYEJhdGNoIG9mICR7ci5sZW5ndGh9IG1lc3NhZ2UgZXZlbnRzIHNvcnRlZGApO2Zvcihjb25zdCBuIG9mIHIpdHJ5e2F3YWl0IHRoaXMub25NZXNzYWdlRXZlbnQobil9Y2F0Y2goaSl7dGhpcy5sb2dnZXIud2FybihpLCJFcnJvciB3aGlsZSBwcm9jZXNzaW5nIGJhdGNoIG1lc3NhZ2UgZXZlbnQ6ICIraT8ubWVzc2FnZSl9dGhpcy5sb2dnZXIudHJhY2UoYEJhdGNoIG9mICR7ci5sZW5ndGh9IG1lc3NhZ2UgZXZlbnRzIHByb2Nlc3NlZGApfWFzeW5jIG9uTGlua01lc3NhZ2VFdmVudChlLHIpe2NvbnN0e3RvcGljOm59PWU7aWYoIXIuc2Vzc2lvbkV4aXN0cyl7Y29uc3QgaT1TZShHLkZJVkVfTUlOVVRFUykscz17dG9waWM6bixleHBpcnk6aSxyZWxheTp7cHJvdG9jb2w6ImlybiJ9LGFjdGl2ZTohMX07YXdhaXQgdGhpcy5jb3JlLnBhaXJpbmcucGFpcmluZ3Muc2V0KG4scyl9dGhpcy5ldmVudHMuZW1pdCh2ZS5tZXNzYWdlLGUpLGF3YWl0IHRoaXMucmVjb3JkTWVzc2FnZUV2ZW50KGUsS3MuaW5ib3VuZCl9YXN5bmMgY29ubmVjdChlKXthd2FpdCB0aGlzLmNvbmZpcm1PbmxpbmVTdGF0ZU9yVGhyb3coKSxlJiZlIT09dGhpcy5yZWxheVVybCYmKHRoaXMucmVsYXlVcmw9ZSxhd2FpdCB0aGlzLnRyYW5zcG9ydERpc2Nvbm5lY3QoKSksdGhpcy50cmFuc3BvcnRFeHBsaWNpdGx5Q2xvc2VkPSExO2xldCByPTE7dHJ5e2Zvcig7cjw2Oyl7dGhpcy5jb25uZWN0aW9uQXR0ZW1wdEluUHJvZ3Jlc3M9ITA7dHJ5e2lmKHRoaXMudHJhbnNwb3J0RXhwbGljaXRseUNsb3NlZClicmVhazt0aGlzLmxvZ2dlci5kZWJ1Zyh7fSxgQ29ubmVjdGluZyB0byAke3RoaXMucmVsYXlVcmx9LCBhdHRlbXB0OiAke3J9Li4uYCksYXdhaXQgdGhpcy5jcmVhdGVQcm92aWRlcigpLGF3YWl0IG5ldyBQcm9taXNlKChuLGkpPT57Y29uc3Qgcz0oKT0+e2kobmV3IEVycm9yKCJDb25uZWN0aW9uIGludGVycnVwdGVkIHdoaWxlIHRyeWluZyB0byBjb25uZWN0IikpfTt0aGlzLnByb3ZpZGVyLm9uY2Uod3QuZGlzY29ubmVjdCxzKSxDdCh0aGlzLnByb3ZpZGVyLmNvbm5lY3QoKSx0aGlzLmNvbm5lY3RUaW1lb3V0LGBTb2NrZXQgc3RhbGxlZCB3aGVuIHRyeWluZyB0byBjb25uZWN0IHRvICR7dGhpcy5yZWxheVVybH1gKS50aGVuKCgpPT5uKCkpLmNhdGNoKGkpLmZpbmFsbHkoKCk9Pnt0aGlzLnByb3ZpZGVyLm9mZih3dC5kaXNjb25uZWN0LHMpLGNsZWFyVGltZW91dCh0aGlzLnJlY29ubmVjdFRpbWVvdXQpfSl9KSxhd2FpdCBuZXcgUHJvbWlzZSgobixpKT0+e2NvbnN0IHM9KCk9PntpKG5ldyBFcnJvcigiQ29ubmVjdGlvbiBpbnRlcnJ1cHRlZCB3aGlsZSB0cnlpbmcgdG8gc3Vic2NyaWJlIikpfTt0aGlzLnByb3ZpZGVyLm9uY2Uod3QuZGlzY29ubmVjdCxzKSx0aGlzLnN1YnNjcmliZXIuc3RhcnQoKS50aGVuKG4pLmNhdGNoKGkpLmZpbmFsbHkoKCk9Pnt0aGlzLnByb3ZpZGVyLm9mZih3dC5kaXNjb25uZWN0LHMpfSl9KSx0aGlzLmhhc0V4cGVyaWVuY2VkTmV0d29ya0Rpc3J1cHRpb249ITF9Y2F0Y2gobil7YXdhaXQgdGhpcy5zdWJzY3JpYmVyLnN0b3AoKTtjb25zdCBpPW47dGhpcy5sb2dnZXIud2Fybih7fSxpLm1lc3NhZ2UpLHRoaXMuaGFzRXhwZXJpZW5jZWROZXR3b3JrRGlzcnVwdGlvbj0hMH1pZih0aGlzLmNvbm5lY3RlZCl7dGhpcy5sb2dnZXIuZGVidWcoe30sYENvbm5lY3RlZCB0byAke3RoaXMucmVsYXlVcmx9IHN1Y2Nlc3NmdWxseSBvbiBhdHRlbXB0OiAke3J9YCk7YnJlYWt9YXdhaXQgbmV3IFByb21pc2Uobj0+c2V0VGltZW91dChuLEcudG9NaWxpc2Vjb25kcyhyKjEpKSkscisrfX1maW5hbGx5e3RoaXMuY29ubmVjdGlvbkF0dGVtcHRJblByb2dyZXNzPSExLGNsZWFyVGltZW91dCh0aGlzLnJlY29ubmVjdFRpbWVvdXQpLHRoaXMucmVjb25uZWN0VGltZW91dD12b2lkIDAsdGhpcy5yZWNvbm5lY3RJblByb2dyZXNzPSExfX1zdGFydFBpbmdUaW1lb3V0KCl7aWYob28oKSl0cnl7dGhpcy5wcm92aWRlcj8uY29ubmVjdGlvbj8uc29ja2V0Py5vbigicGluZyIsKCk9Pnt0aGlzLnJlc2V0UGluZ1RpbWVvdXQoKX0pLHRoaXMucmVzZXRQaW5nVGltZW91dCgpfWNhdGNoKGUpe3RoaXMubG9nZ2VyLndhcm4oZSxlPy5tZXNzYWdlKX19YXN5bmMgY3JlYXRlUHJvdmlkZXIoKXtpZih0aGlzLnByb3ZpZGVyLmNvbm5lY3Rpb24mJih0aGlzLnVucmVnaXN0ZXJQcm92aWRlckxpc3RlbmVycygpLHRoaXMuY29ubmVjdGVkKSl0cnl7YXdhaXQgQ3QodGhpcy5wcm92aWRlci5kaXNjb25uZWN0KCksMWUzLCJDbG9zaW5nIHByZXZpb3VzIHByb3ZpZGVyIil9Y2F0Y2h7fWNvbnN0IGU9YXdhaXQgdGhpcy5jb3JlLmNyeXB0by5zaWduSldUKHRoaXMucmVsYXlVcmwpO3RoaXMucHJvdmlkZXI9bmV3IGJ1KG5ldyBVOChEMyh7c2RrVmVyc2lvbjp4Yyxwcm90b2NvbDp0aGlzLnByb3RvY29sLHZlcnNpb246dGhpcy52ZXJzaW9uLHJlbGF5VXJsOnRoaXMucmVsYXlVcmwscHJvamVjdElkOnRoaXMucHJvamVjdElkLGF1dGg6ZSx1c2VPbkNsb3NlRXZlbnQ6ITAsYnVuZGxlSWQ6dGhpcy5idW5kbGVJZCxwYWNrYWdlTmFtZTp0aGlzLnBhY2thZ2VOYW1lfSkpKSx0aGlzLnJlZ2lzdGVyUHJvdmlkZXJMaXN0ZW5lcnMoKX1hc3luYyByZWNvcmRNZXNzYWdlRXZlbnQoZSxyKXtjb25zdHt0b3BpYzpuLG1lc3NhZ2U6aX09ZTthd2FpdCB0aGlzLm1lc3NhZ2VzLnNldChuLGkscil9YXN5bmMgc2hvdWxkSWdub3JlTWVzc2FnZUV2ZW50KGUpe2NvbnN0e3RvcGljOnIsbWVzc2FnZTpufT1lO2lmKCFufHxuLmxlbmd0aD09PTApcmV0dXJuIHRoaXMubG9nZ2VyLndhcm4oYElnbm9yaW5nIGludmFsaWQvZW1wdHkgbWVzc2FnZTogJHtufWApLCEwO2lmKCFhd2FpdCB0aGlzLnN1YnNjcmliZXIuaXNLbm93blRvcGljKHIpKXJldHVybiB0aGlzLmxvZ2dlci53YXJuKGBJZ25vcmluZyBtZXNzYWdlIGZvciB1bmtub3duIHRvcGljICR7cn1gKSwhMDtjb25zdCBpPXRoaXMubWVzc2FnZXMuaGFzKHIsbik7cmV0dXJuIGkmJnRoaXMubG9nZ2VyLndhcm4oYElnbm9yaW5nIGR1cGxpY2F0ZSBtZXNzYWdlOiAke259YCksaX1hc3luYyBvblByb3ZpZGVyUGF5bG9hZChlKXtpZih0aGlzLmxvZ2dlci5kZWJ1ZygiSW5jb21pbmcgUmVsYXkgUGF5bG9hZCIpLHRoaXMubG9nZ2VyLnRyYWNlKHt0eXBlOiJwYXlsb2FkIixkaXJlY3Rpb246ImluY29taW5nIixwYXlsb2FkOmV9KSxtdShlKSl7aWYoIWUubWV0aG9kLmVuZHNXaXRoKGZBKSlyZXR1cm47Y29uc3Qgcj1lLnBhcmFtcyx7dG9waWM6bixtZXNzYWdlOmkscHVibGlzaGVkQXQ6cyxhdHRlc3RhdGlvbjpvfT1yLmRhdGEsYT17dG9waWM6bixtZXNzYWdlOmkscHVibGlzaGVkQXQ6cyx0cmFuc3BvcnRUeXBlOnBlLnJlbGF5LGF0dGVzdGF0aW9uOm99O3RoaXMubG9nZ2VyLmRlYnVnKCJFbWl0dGluZyBSZWxheWVyIFBheWxvYWQiKSx0aGlzLmxvZ2dlci50cmFjZSh7dHlwZToiZXZlbnQiLGV2ZW50OnIuaWQsLi4uYX0pLHRoaXMuZXZlbnRzLmVtaXQoci5pZCxhKSxhd2FpdCB0aGlzLmFja25vd2xlZGdlUGF5bG9hZChlKSxhd2FpdCB0aGlzLm9uTWVzc2FnZUV2ZW50KGEpfWVsc2UgRm8oZSkmJnRoaXMuZXZlbnRzLmVtaXQodmUubWVzc2FnZV9hY2ssZSl9YXN5bmMgb25NZXNzYWdlRXZlbnQoZSl7YXdhaXQgdGhpcy5zaG91bGRJZ25vcmVNZXNzYWdlRXZlbnQoZSl8fChhd2FpdCB0aGlzLnJlY29yZE1lc3NhZ2VFdmVudChlLEtzLmluYm91bmQpLHRoaXMuZXZlbnRzLmVtaXQodmUubWVzc2FnZSxlKSl9YXN5bmMgYWNrbm93bGVkZ2VQYXlsb2FkKGUpe2NvbnN0IHI9WWkoZS5pZCwhMCk7YXdhaXQgdGhpcy5wcm92aWRlci5jb25uZWN0aW9uLnNlbmQocil9dW5yZWdpc3RlclByb3ZpZGVyTGlzdGVuZXJzKCl7dGhpcy5wcm92aWRlci5vZmYod3QucGF5bG9hZCx0aGlzLm9uUGF5bG9hZEhhbmRsZXIpLHRoaXMucHJvdmlkZXIub2ZmKHd0LmNvbm5lY3QsdGhpcy5vbkNvbm5lY3RIYW5kbGVyKSx0aGlzLnByb3ZpZGVyLm9mZih3dC5kaXNjb25uZWN0LHRoaXMub25EaXNjb25uZWN0SGFuZGxlciksdGhpcy5wcm92aWRlci5vZmYod3QuZXJyb3IsdGhpcy5vblByb3ZpZGVyRXJyb3JIYW5kbGVyKSxjbGVhclRpbWVvdXQodGhpcy5waW5nVGltZW91dCl9YXN5bmMgcmVnaXN0ZXJFdmVudExpc3RlbmVycygpe2xldCBlPWF3YWl0IFRoKCk7ZTgoYXN5bmMgcj0+e2UhPT1yJiYoZT1yLHI/YXdhaXQgdGhpcy50cmFuc3BvcnRPcGVuKCkuY2F0Y2gobj0+dGhpcy5sb2dnZXIuZXJyb3IobixuPy5tZXNzYWdlKSk6KHRoaXMuaGFzRXhwZXJpZW5jZWROZXR3b3JrRGlzcnVwdGlvbj0hMCxhd2FpdCB0aGlzLnRyYW5zcG9ydERpc2Nvbm5lY3QoKSx0aGlzLnRyYW5zcG9ydEV4cGxpY2l0bHlDbG9zZWQ9ITEpKX0pLHRoaXMuY29yZS5oZWFydGJlYXQub24oUG4ucHVsc2UsYXN5bmMoKT0+e2lmKCF0aGlzLnRyYW5zcG9ydEV4cGxpY2l0bHlDbG9zZWQmJiF0aGlzLmNvbm5lY3RlZCYmbjgoKSl0cnl7YXdhaXQgdGhpcy5jb25maXJtT25saW5lU3RhdGVPclRocm93KCksYXdhaXQgdGhpcy50cmFuc3BvcnRPcGVuKCl9Y2F0Y2gocil7dGhpcy5sb2dnZXIud2FybihyLHI/Lm1lc3NhZ2UpfX0pLHRoaXMuZXZlbnRzLm9uKHZlLmNvbm5lY3Rpb25fc3RhbGxlZCwoKT0+e2lmKHRoaXMudHJhbnNwb3J0RXhwbGljaXRseUNsb3NlZHx8dGhpcy5zdGFsbGVkUmVzdGFydEluUHJvZ3Jlc3MpcmV0dXJuO3RoaXMuc3RhbGxlZFJlc3RhcnRJblByb2dyZXNzPSEwO2NvbnN0IHI9dGhpcy5zdGFsbGVkUmVzdGFydEJhY2tvZmY9PT0wPzA6TWF0aC5taW4oTWF0aC5wb3coMix0aGlzLnN0YWxsZWRSZXN0YXJ0QmFja29mZi0xKSp0aGlzLnN0YWxsZWRSZXN0YXJ0QmFzZUludGVydmFsLHRoaXMuc3RhbGxlZFJlc3RhcnRNYXhJbnRlcnZhbCk7dGhpcy5zdGFsbGVkUmVzdGFydEJhY2tvZmYrKyx0aGlzLmxvZ2dlci53YXJuKGBDb25uZWN0aW9uIHN0YWxsZWQsIHJlc3RhcnRpbmcgdHJhbnNwb3J0JHtyP2AgaW4gJHtyfW1zYDoiIn0uLi5gKSx0aGlzLnN0YWxsZWRSZXN0YXJ0VGltZW91dD1zZXRUaW1lb3V0KGFzeW5jKCk9Pnt0cnl7aWYodGhpcy50cmFuc3BvcnRFeHBsaWNpdGx5Q2xvc2VkKXJldHVybjthd2FpdCB0aGlzLnJlc3RhcnRUcmFuc3BvcnQoKX1jYXRjaChuKXt0aGlzLmxvZ2dlci5lcnJvcihuLG4/Lm1lc3NhZ2UpfWZpbmFsbHl7dGhpcy5zdGFsbGVkUmVzdGFydEluUHJvZ3Jlc3M9ITF9fSxyKX0pfWFzeW5jIG9uUHJvdmlkZXJEaXNjb25uZWN0KCl7aWYoY2xlYXJUaW1lb3V0KHRoaXMucGluZ1RpbWVvdXQpLHRoaXMuZXZlbnRzLmVtaXQodmUuZGlzY29ubmVjdCksIXRoaXMucmVjb25uZWN0SW5Qcm9ncmVzcyl7dGhpcy5yZWNvbm5lY3RJblByb2dyZXNzPSEwO3RyeXthd2FpdCB0aGlzLnN1YnNjcmliZXIuc3RvcCgpfWNhdGNoKGUpe3RoaXMubG9nZ2VyLndhcm4oZSwic3Vic2NyaWJlci5zdG9wKCkgZmFpbGVkIGR1cmluZyBkaXNjb25uZWN0Iil9aWYoIXRoaXMuc3Vic2NyaWJlci5oYXNBbnlUb3BpY3N8fHRoaXMudHJhbnNwb3J0RXhwbGljaXRseUNsb3NlZCl7dGhpcy5yZWNvbm5lY3RJblByb2dyZXNzPSExO3JldHVybn10aGlzLnJlY29ubmVjdFRpbWVvdXQ9c2V0VGltZW91dChhc3luYygpPT57YXdhaXQgdGhpcy50cmFuc3BvcnRPcGVuKCkuY2F0Y2goZT0+dGhpcy5sb2dnZXIuZXJyb3IoZSxlPy5tZXNzYWdlKSksdGhpcy5yZWNvbm5lY3RUaW1lb3V0PXZvaWQgMCx0aGlzLnJlY29ubmVjdEluUHJvZ3Jlc3M9ITF9LEcudG9NaWxpc2Vjb25kcyhkQSkpfX1pc0luaXRpYWxpemVkKCl7aWYoIXRoaXMuaW5pdGlhbGl6ZWQpe2NvbnN0e21lc3NhZ2U6ZX09WSgiTk9UX0lOSVRJQUxJWkVEIix0aGlzLm5hbWUpO3Rocm93IG5ldyBFcnJvcihlKX19YXN5bmMgdG9Fc3RhYmxpc2hDb25uZWN0aW9uKCl7aWYoYXdhaXQgdGhpcy5jb25maXJtT25saW5lU3RhdGVPclRocm93KCksIXRoaXMuY29ubmVjdGVkKXtpZih0aGlzLmNvbm5lY3RQcm9taXNlKXthd2FpdCB0aGlzLmNvbm5lY3RQcm9taXNlO3JldHVybn10aGlzLmNvbm5lY3RQcm9taXNlPXRoaXMuY29ubmVjdCgpLmZpbmFsbHkoKCk9Pnt0aGlzLmNvbm5lY3RQcm9taXNlPXZvaWQgMH0pLGF3YWl0IHRoaXMuY29ubmVjdFByb21pc2V9fX0sVW49Y2xhc3MgZXh0ZW5kcyBad3tjb25zdHJ1Y3RvcihlLHIsbixpPWlyLHM9dm9pZCAwKXtzdXBlcihlLHIsbixpKSx0aGlzLmNvcmU9ZSx0aGlzLmxvZ2dlcj1yLHRoaXMubmFtZT1uLHRoaXMubWFwPW5ldyBNYXAsdGhpcy52ZXJzaW9uPXBBLHRoaXMuY2FjaGVkPVtdLHRoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy5zdG9yYWdlUHJlZml4PWlyLHRoaXMucmVjZW50bHlEZWxldGVkPVtdLHRoaXMucmVjZW50bHlEZWxldGVkTGltaXQ9MjAwLHRoaXMuaW5pdD1hc3luYygpPT57dGhpcy5pbml0aWFsaXplZHx8KHRoaXMubG9nZ2VyLnRyYWNlKCJJbml0aWFsaXplZCIpLGF3YWl0IHRoaXMucmVzdG9yZSgpLHRoaXMuY2FjaGVkLmZvckVhY2gobz0+e3RoaXMuZ2V0S2V5JiZvIT09bnVsbCYmIUJlKG8pP3RoaXMubWFwLnNldCh0aGlzLmdldEtleShvKSxvKTpQUyhvKT90aGlzLm1hcC5zZXQoby5pZCxvKTpUUyhvKSYmdGhpcy5tYXAuc2V0KG8udG9waWMsbyl9KSx0aGlzLmNhY2hlZD1bXSx0aGlzLmluaXRpYWxpemVkPSEwKX0sdGhpcy5zZXQ9YXN5bmMobyxhKT0+e3RoaXMuaXNJbml0aWFsaXplZCgpLHRoaXMubWFwLmhhcyhvKT9hd2FpdCB0aGlzLnVwZGF0ZShvLGEpOih0aGlzLmxvZ2dlci5kZWJ1ZygiU2V0dGluZyB2YWx1ZSIpLHRoaXMubG9nZ2VyLnRyYWNlKHt0eXBlOiJtZXRob2QiLG1ldGhvZDoic2V0IixrZXk6byx2YWx1ZTphfSksdGhpcy5tYXAuc2V0KG8sYSksYXdhaXQgdGhpcy5wZXJzaXN0KCkpfSx0aGlzLmdldD1vPT4odGhpcy5pc0luaXRpYWxpemVkKCksdGhpcy5sb2dnZXIuZGVidWcoIkdldHRpbmcgdmFsdWUiKSx0aGlzLmxvZ2dlci50cmFjZSh7dHlwZToibWV0aG9kIixtZXRob2Q6ImdldCIsa2V5Om99KSx0aGlzLmdldERhdGEobykpLHRoaXMuZ2V0QWxsPW89Pih0aGlzLmlzSW5pdGlhbGl6ZWQoKSxvP3RoaXMudmFsdWVzLmZpbHRlcihhPT5PYmplY3Qua2V5cyhvKS5ldmVyeShjPT5ZOChhW2NdLG9bY10pKSk6dGhpcy52YWx1ZXMpLHRoaXMudXBkYXRlPWFzeW5jKG8sYSk9Pnt0aGlzLmlzSW5pdGlhbGl6ZWQoKSx0aGlzLmxvZ2dlci5kZWJ1ZygiVXBkYXRpbmcgdmFsdWUiKSx0aGlzLmxvZ2dlci50cmFjZSh7dHlwZToibWV0aG9kIixtZXRob2Q6InVwZGF0ZSIsa2V5Om8sdXBkYXRlOmF9KTtjb25zdCBjPXsuLi50aGlzLmdldERhdGEobyksLi4uYX07dGhpcy5tYXAuc2V0KG8sYyksYXdhaXQgdGhpcy5wZXJzaXN0KCl9LHRoaXMuZGVsZXRlPWFzeW5jKG8sYSk9Pnt0aGlzLmlzSW5pdGlhbGl6ZWQoKSx0aGlzLm1hcC5oYXMobykmJih0aGlzLmxvZ2dlci5kZWJ1ZygiRGVsZXRpbmcgdmFsdWUiKSx0aGlzLmxvZ2dlci50cmFjZSh7dHlwZToibWV0aG9kIixtZXRob2Q6ImRlbGV0ZSIsa2V5Om8scmVhc29uOmF9KSx0aGlzLm1hcC5kZWxldGUobyksdGhpcy5hZGRUb1JlY2VudGx5RGVsZXRlZChvKSxhd2FpdCB0aGlzLnBlcnNpc3QoKSl9LHRoaXMubG9nZ2VyPWd0KHIsdGhpcy5uYW1lKSx0aGlzLnN0b3JhZ2VQcmVmaXg9aSx0aGlzLmdldEtleT1zfWdldCBjb250ZXh0KCl7cmV0dXJuIGN0KHRoaXMubG9nZ2VyKX1nZXQgc3RvcmFnZUtleSgpe3JldHVybiB0aGlzLnN0b3JhZ2VQcmVmaXgrdGhpcy52ZXJzaW9uK3RoaXMuY29yZS5jdXN0b21TdG9yYWdlUHJlZml4KyIvLyIrdGhpcy5uYW1lfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5tYXAuc2l6ZX1nZXQga2V5cygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMubWFwLmtleXMoKSl9Z2V0IHZhbHVlcygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMubWFwLnZhbHVlcygpKX1hZGRUb1JlY2VudGx5RGVsZXRlZChlKXt0aGlzLnJlY2VudGx5RGVsZXRlZC5wdXNoKGUpLHRoaXMucmVjZW50bHlEZWxldGVkLmxlbmd0aD49dGhpcy5yZWNlbnRseURlbGV0ZWRMaW1pdCYmdGhpcy5yZWNlbnRseURlbGV0ZWQuc3BsaWNlKDAsdGhpcy5yZWNlbnRseURlbGV0ZWRMaW1pdC8yKX1hc3luYyBzZXREYXRhU3RvcmUoZSl7YXdhaXQgdGhpcy5jb3JlLnN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXksZSl9YXN5bmMgZ2V0RGF0YVN0b3JlKCl7cmV0dXJuIGF3YWl0IHRoaXMuY29yZS5zdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5KX1nZXREYXRhKGUpe2NvbnN0IHI9dGhpcy5tYXAuZ2V0KGUpO2lmKCFyKXtpZih0aGlzLnJlY2VudGx5RGVsZXRlZC5pbmNsdWRlcyhlKSl7Y29uc3R7bWVzc2FnZTppfT1ZKCJNSVNTSU5HX09SX0lOVkFMSUQiLGBSZWNvcmQgd2FzIHJlY2VudGx5IGRlbGV0ZWQgLSAke3RoaXMubmFtZX06ICR7ZX1gKTt0aHJvdyB0aGlzLmxvZ2dlci5lcnJvcihpKSxuZXcgRXJyb3IoaSl9Y29uc3R7bWVzc2FnZTpufT1ZKCJOT19NQVRDSElOR19LRVkiLGAke3RoaXMubmFtZX06ICR7ZX1gKTt0aHJvdyB0aGlzLmxvZ2dlci5lcnJvcihuKSxuZXcgRXJyb3Iobil9cmV0dXJuIHJ9YXN5bmMgcGVyc2lzdCgpe2F3YWl0IHRoaXMuc2V0RGF0YVN0b3JlKHRoaXMudmFsdWVzKX1hc3luYyByZXN0b3JlKCl7dHJ5e2NvbnN0IGU9YXdhaXQgdGhpcy5nZXREYXRhU3RvcmUoKTtpZih0eXBlb2YgZT4idSJ8fCFlLmxlbmd0aClyZXR1cm47aWYodGhpcy5tYXAuc2l6ZSl7Y29uc3R7bWVzc2FnZTpyfT1ZKCJSRVNUT1JFX1dJTExfT1ZFUlJJREUiLHRoaXMubmFtZSk7dGhyb3cgdGhpcy5sb2dnZXIuZXJyb3IociksbmV3IEVycm9yKHIpfXRoaXMuY2FjaGVkPWUsdGhpcy5sb2dnZXIuZGVidWcoYFN1Y2Nlc3NmdWxseSBSZXN0b3JlZCB2YWx1ZSBmb3IgJHt0aGlzLm5hbWV9YCksdGhpcy5sb2dnZXIudHJhY2Uoe3R5cGU6Im1ldGhvZCIsbWV0aG9kOiJyZXN0b3JlIix2YWx1ZTp0aGlzLnZhbHVlc30pfWNhdGNoKGUpe3RoaXMubG9nZ2VyLmRlYnVnKGBGYWlsZWQgdG8gUmVzdG9yZSB2YWx1ZSBmb3IgJHt0aGlzLm5hbWV9YCksdGhpcy5sb2dnZXIuZXJyb3IoZSl9fWlzSW5pdGlhbGl6ZWQoKXtpZighdGhpcy5pbml0aWFsaXplZCl7Y29uc3R7bWVzc2FnZTplfT1ZKCJOT1RfSU5JVElBTElaRUQiLHRoaXMubmFtZSk7dGhyb3cgbmV3IEVycm9yKGUpfX19O2NsYXNzIHFBe2NvbnN0cnVjdG9yKGUscil7dGhpcy5jb3JlPWUsdGhpcy5sb2dnZXI9cix0aGlzLm5hbWU9bUEsdGhpcy52ZXJzaW9uPWJBLHRoaXMuZXZlbnRzPW5ldyBCYyx0aGlzLmluaXRpYWxpemVkPSExLHRoaXMuc3RvcmFnZVByZWZpeD1pcix0aGlzLmlnbm9yZWRQYXlsb2FkVHlwZXM9W3hyXSx0aGlzLnJlZ2lzdGVyZWRNZXRob2RzPVtdLHRoaXMuaW5pdD1hc3luYygpPT57dGhpcy5pbml0aWFsaXplZHx8KGF3YWl0IHRoaXMucGFpcmluZ3MuaW5pdCgpLGF3YWl0IHRoaXMuY2xlYW51cCgpLHRoaXMucmVnaXN0ZXJSZWxheWVyRXZlbnRzKCksdGhpcy5yZWdpc3RlckV4cGlyZXJFdmVudHMoKSx0aGlzLmluaXRpYWxpemVkPSEwLHRoaXMubG9nZ2VyLnRyYWNlKCJJbml0aWFsaXplZCIpKX0sdGhpcy5yZWdpc3Rlcj0oe21ldGhvZHM6bn0pPT57dGhpcy5pc0luaXRpYWxpemVkKCksdGhpcy5yZWdpc3RlcmVkTWV0aG9kcz1bLi4ubmV3IFNldChbLi4udGhpcy5yZWdpc3RlcmVkTWV0aG9kcywuLi5uXSldfSx0aGlzLmNyZWF0ZT1hc3luYyBuPT57dGhpcy5pc0luaXRpYWxpemVkKCk7Y29uc3QgaT1iYygpLHM9YXdhaXQgdGhpcy5jb3JlLmNyeXB0by5zZXRTeW1LZXkoaSksbz1TZShHLkZJVkVfTUlOVVRFUyksYT17cHJvdG9jb2w6bjB9LGM9e3RvcGljOnMsZXhwaXJ5Om8scmVsYXk6YSxhY3RpdmU6ITEsbWV0aG9kczpuPy5tZXRob2RzfSx1PVNoKHtwcm90b2NvbDp0aGlzLmNvcmUucHJvdG9jb2wsdmVyc2lvbjp0aGlzLmNvcmUudmVyc2lvbix0b3BpYzpzLHN5bUtleTppLHJlbGF5OmEsZXhwaXJ5VGltZXN0YW1wOm8sbWV0aG9kczpuPy5tZXRob2RzfSk7cmV0dXJuIHRoaXMuZXZlbnRzLmVtaXQocG4uY3JlYXRlLGMpLHRoaXMuY29yZS5leHBpcmVyLnNldChzLG8pLGF3YWl0IHRoaXMucGFpcmluZ3Muc2V0KHMsYyksYXdhaXQgdGhpcy5jb3JlLnJlbGF5ZXIuc3Vic2NyaWJlKHMse3RyYW5zcG9ydFR5cGU6bj8udHJhbnNwb3J0VHlwZSxpbnRlcm5hbDpuPy5pbnRlcm5hbH0pLHt0b3BpYzpzLHVyaTp1fX0sdGhpcy5wYWlyPWFzeW5jIG49Pnt0aGlzLmlzSW5pdGlhbGl6ZWQoKTtjb25zdCBpPXRoaXMuY29yZS5ldmVudENsaWVudC5jcmVhdGVFdmVudCh7cHJvcGVydGllczp7dG9waWM6bj8udXJpLHRyYWNlOltLdC5wYWlyaW5nX3N0YXJ0ZWRdfX0pO3RoaXMuaXNWYWxpZFBhaXIobixpKTtjb25zdHt0b3BpYzpzLHN5bUtleTpvLHJlbGF5OmEsZXhwaXJ5VGltZXN0YW1wOmMsbWV0aG9kczp1fT1JaChuLnVyaSk7aS5wcm9wcy5wcm9wZXJ0aWVzLnRvcGljPXMsaS5hZGRUcmFjZShLdC5wYWlyaW5nX3VyaV92YWxpZGF0aW9uX3N1Y2Nlc3MpLGkuYWRkVHJhY2UoS3QucGFpcmluZ191cmlfbm90X2V4cGlyZWQpO2xldCBsO2lmKHRoaXMucGFpcmluZ3Mua2V5cy5pbmNsdWRlcyhzKSl7aWYobD10aGlzLnBhaXJpbmdzLmdldChzKSxpLmFkZFRyYWNlKEt0LmV4aXN0aW5nX3BhaXJpbmcpLGwuYWN0aXZlKXRocm93IGkuc2V0RXJyb3IoZHIuYWN0aXZlX3BhaXJpbmdfYWxyZWFkeV9leGlzdHMpLG5ldyBFcnJvcihgUGFpcmluZyBhbHJlYWR5IGV4aXN0czogJHtzfS4gUGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGEgbmV3IGNvbm5lY3Rpb24gVVJJLmApO2kuYWRkVHJhY2UoS3QucGFpcmluZ19ub3RfZXhwaXJlZCl9Y29uc3QgaD1jfHxTZShHLkZJVkVfTUlOVVRFUykscD17dG9waWM6cyxyZWxheTphLGV4cGlyeTpoLGFjdGl2ZTohMSxtZXRob2RzOnV9O3RoaXMuY29yZS5leHBpcmVyLnNldChzLGgpLGF3YWl0IHRoaXMucGFpcmluZ3Muc2V0KHMscCksaS5hZGRUcmFjZShLdC5zdG9yZV9uZXdfcGFpcmluZyksbi5hY3RpdmF0ZVBhaXJpbmcmJmF3YWl0IHRoaXMuYWN0aXZhdGUoe3RvcGljOnN9KSx0aGlzLmV2ZW50cy5lbWl0KHBuLmNyZWF0ZSxwKSxpLmFkZFRyYWNlKEt0LmVtaXRfaW5hY3RpdmVfcGFpcmluZyksdGhpcy5jb3JlLmNyeXB0by5rZXljaGFpbi5oYXMocyl8fGF3YWl0IHRoaXMuY29yZS5jcnlwdG8uc2V0U3ltS2V5KG8scyksaS5hZGRUcmFjZShLdC5zdWJzY3JpYmluZ19wYWlyaW5nX3RvcGljKTt0cnl7YXdhaXQgdGhpcy5jb3JlLnJlbGF5ZXIuY29uZmlybU9ubGluZVN0YXRlT3JUaHJvdygpfWNhdGNoe2kuc2V0RXJyb3IoZHIubm9faW50ZXJuZXRfY29ubmVjdGlvbil9dHJ5e2F3YWl0IHRoaXMuY29yZS5yZWxheWVyLnN1YnNjcmliZShzLHtyZWxheTphfSl9Y2F0Y2goZyl7dGhyb3cgaS5zZXRFcnJvcihkci5zdWJzY3JpYmVfcGFpcmluZ190b3BpY19mYWlsdXJlKSxnfXJldHVybiBpLmFkZFRyYWNlKEt0LnN1YnNjcmliZV9wYWlyaW5nX3RvcGljX3N1Y2Nlc3MpLHB9LHRoaXMuYWN0aXZhdGU9YXN5bmMoe3RvcGljOm59KT0+e3RoaXMuaXNJbml0aWFsaXplZCgpO2NvbnN0IGk9U2UoRy5GSVZFX01JTlVURVMpO3RoaXMuY29yZS5leHBpcmVyLnNldChuLGkpLGF3YWl0IHRoaXMucGFpcmluZ3MudXBkYXRlKG4se2FjdGl2ZTohMCxleHBpcnk6aX0pfSx0aGlzLnBpbmc9YXN5bmMgbj0+e3RoaXMuaXNJbml0aWFsaXplZCgpLGF3YWl0IHRoaXMuaXNWYWxpZFBpbmcobiksdGhpcy5sb2dnZXIud2FybigicGluZygpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLiIpO2NvbnN0e3RvcGljOml9PW47aWYodGhpcy5wYWlyaW5ncy5rZXlzLmluY2x1ZGVzKGkpKXtjb25zdCBzPWF3YWl0IHRoaXMuc2VuZFJlcXVlc3QoaSwid2NfcGFpcmluZ1BpbmciLHt9KSx7ZG9uZTpvLHJlc29sdmU6YSxyZWplY3Q6Y309Zm4oKTt0aGlzLmV2ZW50cy5vbmNlKGxlKCJwYWlyaW5nX3BpbmciLHMpLCh7ZXJyb3I6dX0pPT57dT9jKHUpOmEoKX0pLGF3YWl0IG8oKX19LHRoaXMudXBkYXRlRXhwaXJ5PWFzeW5jKHt0b3BpYzpuLGV4cGlyeTppfSk9Pnt0aGlzLmlzSW5pdGlhbGl6ZWQoKSxhd2FpdCB0aGlzLnBhaXJpbmdzLnVwZGF0ZShuLHtleHBpcnk6aX0pfSx0aGlzLnVwZGF0ZU1ldGFkYXRhPWFzeW5jKHt0b3BpYzpuLG1ldGFkYXRhOml9KT0+e3RoaXMuaXNJbml0aWFsaXplZCgpLGF3YWl0IHRoaXMucGFpcmluZ3MudXBkYXRlKG4se3BlZXJNZXRhZGF0YTppfSl9LHRoaXMuZ2V0UGFpcmluZ3M9KCk9Pih0aGlzLmlzSW5pdGlhbGl6ZWQoKSx0aGlzLnBhaXJpbmdzLnZhbHVlcyksdGhpcy5kaXNjb25uZWN0PWFzeW5jIG49Pnt0aGlzLmlzSW5pdGlhbGl6ZWQoKSxhd2FpdCB0aGlzLmlzVmFsaWREaXNjb25uZWN0KG4pO2NvbnN0e3RvcGljOml9PW47dGhpcy5wYWlyaW5ncy5rZXlzLmluY2x1ZGVzKGkpJiYoYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChpLCJ3Y19wYWlyaW5nRGVsZXRlIix5ZSgiVVNFUl9ESVNDT05ORUNURUQiKSksYXdhaXQgdGhpcy5kZWxldGVQYWlyaW5nKGkpKX0sdGhpcy5mb3JtYXRVcmlGcm9tUGFpcmluZz1uPT57dGhpcy5pc0luaXRpYWxpemVkKCk7Y29uc3R7dG9waWM6aSxyZWxheTpzLGV4cGlyeTpvLG1ldGhvZHM6YX09bixjPXRoaXMuY29yZS5jcnlwdG8ua2V5Y2hhaW4uZ2V0KGkpO3JldHVybiBTaCh7cHJvdG9jb2w6dGhpcy5jb3JlLnByb3RvY29sLHZlcnNpb246dGhpcy5jb3JlLnZlcnNpb24sdG9waWM6aSxzeW1LZXk6YyxyZWxheTpzLGV4cGlyeVRpbWVzdGFtcDpvLG1ldGhvZHM6YX0pfSx0aGlzLnNlbmRSZXF1ZXN0PWFzeW5jKG4saSxzKT0+e2NvbnN0IG89UnQoaSxzKSxhPWF3YWl0IHRoaXMuY29yZS5jcnlwdG8uZW5jb2RlKG4sbyksYz1PaVtpXS5yZXE7cmV0dXJuIHRoaXMuY29yZS5oaXN0b3J5LnNldChuLG8pLHRoaXMuY29yZS5yZWxheWVyLnB1Ymxpc2gobixhLGMpLG8uaWR9LHRoaXMuc2VuZFJlc3VsdD1hc3luYyhuLGkscyk9Pntjb25zdCBvPVlpKG4scyksYT1hd2FpdCB0aGlzLmNvcmUuY3J5cHRvLmVuY29kZShpLG8pLGM9KGF3YWl0IHRoaXMuY29yZS5oaXN0b3J5LmdldChpLG4pKS5yZXF1ZXN0Lm1ldGhvZCx1PU9pW2NdLnJlczthd2FpdCB0aGlzLmNvcmUucmVsYXllci5wdWJsaXNoKGksYSx1KSxhd2FpdCB0aGlzLmNvcmUuaGlzdG9yeS5yZXNvbHZlKG8pfSx0aGlzLnNlbmRFcnJvcj1hc3luYyhuLGkscyk9Pntjb25zdCBvPUxvKG4scyksYT1hd2FpdCB0aGlzLmNvcmUuY3J5cHRvLmVuY29kZShpLG8pLGM9KGF3YWl0IHRoaXMuY29yZS5oaXN0b3J5LmdldChpLG4pKS5yZXF1ZXN0Lm1ldGhvZCx1PU9pW2NdP09pW2NdLnJlczpPaS51bnJlZ2lzdGVyZWRfbWV0aG9kLnJlczthd2FpdCB0aGlzLmNvcmUucmVsYXllci5wdWJsaXNoKGksYSx1KSxhd2FpdCB0aGlzLmNvcmUuaGlzdG9yeS5yZXNvbHZlKG8pfSx0aGlzLmRlbGV0ZVBhaXJpbmc9YXN5bmMobixpKT0+e2F3YWl0IHRoaXMuY29yZS5yZWxheWVyLnVuc3Vic2NyaWJlKG4pLGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLnBhaXJpbmdzLmRlbGV0ZShuLHllKCJVU0VSX0RJU0NPTk5FQ1RFRCIpKSx0aGlzLmNvcmUuY3J5cHRvLmRlbGV0ZVN5bUtleShuKSxpP1Byb21pc2UucmVzb2x2ZSgpOnRoaXMuY29yZS5leHBpcmVyLmRlbChuKV0pfSx0aGlzLmNsZWFudXA9YXN5bmMoKT0+e2NvbnN0IG49dGhpcy5wYWlyaW5ncy5nZXRBbGwoKS5maWx0ZXIoaT0+WHQoaS5leHBpcnkpKTthd2FpdCBQcm9taXNlLmFsbChuLm1hcChpPT50aGlzLmRlbGV0ZVBhaXJpbmcoaS50b3BpYykpKX0sdGhpcy5vblJlbGF5RXZlbnRSZXF1ZXN0PWFzeW5jIG49Pntjb25zdHt0b3BpYzppLHBheWxvYWQ6c309bjtzd2l0Y2gocy5tZXRob2Qpe2Nhc2Uid2NfcGFpcmluZ1BpbmciOnJldHVybiBhd2FpdCB0aGlzLm9uUGFpcmluZ1BpbmdSZXF1ZXN0KGkscyk7Y2FzZSJ3Y19wYWlyaW5nRGVsZXRlIjpyZXR1cm4gYXdhaXQgdGhpcy5vblBhaXJpbmdEZWxldGVSZXF1ZXN0KGkscyk7ZGVmYXVsdDpyZXR1cm4gYXdhaXQgdGhpcy5vblVua25vd25ScGNNZXRob2RSZXF1ZXN0KGkscyl9fSx0aGlzLm9uUmVsYXlFdmVudFJlc3BvbnNlPWFzeW5jIG49Pntjb25zdHt0b3BpYzppLHBheWxvYWQ6c309bixvPShhd2FpdCB0aGlzLmNvcmUuaGlzdG9yeS5nZXQoaSxzLmlkKSkucmVxdWVzdC5tZXRob2Q7c3dpdGNoKG8pe2Nhc2Uid2NfcGFpcmluZ1BpbmciOnJldHVybiB0aGlzLm9uUGFpcmluZ1BpbmdSZXNwb25zZShpLHMpO2RlZmF1bHQ6cmV0dXJuIHRoaXMub25Vbmtub3duUnBjTWV0aG9kUmVzcG9uc2Uobyl9fSx0aGlzLm9uUGFpcmluZ1BpbmdSZXF1ZXN0PWFzeW5jKG4saSk9Pntjb25zdHtpZDpzfT1pO3RyeXt0aGlzLmlzVmFsaWRQaW5nKHt0b3BpYzpufSksYXdhaXQgdGhpcy5zZW5kUmVzdWx0KHMsbiwhMCksdGhpcy5ldmVudHMuZW1pdChwbi5waW5nLHtpZDpzLHRvcGljOm59KX1jYXRjaChvKXthd2FpdCB0aGlzLnNlbmRFcnJvcihzLG4sbyksdGhpcy5sb2dnZXIuZXJyb3Iobyl9fSx0aGlzLm9uUGFpcmluZ1BpbmdSZXNwb25zZT0obixpKT0+e2NvbnN0e2lkOnN9PWk7c2V0VGltZW91dCgoKT0+e1d0KGkpP3RoaXMuZXZlbnRzLmVtaXQobGUoInBhaXJpbmdfcGluZyIscykse30pOnh0KGkpJiZ0aGlzLmV2ZW50cy5lbWl0KGxlKCJwYWlyaW5nX3BpbmciLHMpLHtlcnJvcjppLmVycm9yfSl9LDUwMCl9LHRoaXMub25QYWlyaW5nRGVsZXRlUmVxdWVzdD1hc3luYyhuLGkpPT57Y29uc3R7aWQ6c309aTt0cnl7dGhpcy5pc1ZhbGlkRGlzY29ubmVjdCh7dG9waWM6bn0pLGF3YWl0IHRoaXMuZGVsZXRlUGFpcmluZyhuKSx0aGlzLmV2ZW50cy5lbWl0KHBuLmRlbGV0ZSx7aWQ6cyx0b3BpYzpufSl9Y2F0Y2gobyl7YXdhaXQgdGhpcy5zZW5kRXJyb3IocyxuLG8pLHRoaXMubG9nZ2VyLmVycm9yKG8pfX0sdGhpcy5vblVua25vd25ScGNNZXRob2RSZXF1ZXN0PWFzeW5jKG4saSk9Pntjb25zdHtpZDpzLG1ldGhvZDpvfT1pO3RyeXtpZih0aGlzLnJlZ2lzdGVyZWRNZXRob2RzLmluY2x1ZGVzKG8pKXJldHVybjtjb25zdCBhPXllKCJXQ19NRVRIT0RfVU5TVVBQT1JURUQiLG8pO2F3YWl0IHRoaXMuc2VuZEVycm9yKHMsbixhKSx0aGlzLmxvZ2dlci5lcnJvcihhKX1jYXRjaChhKXthd2FpdCB0aGlzLnNlbmRFcnJvcihzLG4sYSksdGhpcy5sb2dnZXIuZXJyb3IoYSl9fSx0aGlzLm9uVW5rbm93blJwY01ldGhvZFJlc3BvbnNlPW49Pnt0aGlzLnJlZ2lzdGVyZWRNZXRob2RzLmluY2x1ZGVzKG4pfHx0aGlzLmxvZ2dlci5lcnJvcih5ZSgiV0NfTUVUSE9EX1VOU1VQUE9SVEVEIixuKSl9LHRoaXMuaXNWYWxpZFBhaXI9KG4saSk9PntpZighbnQobikpe2NvbnN0e21lc3NhZ2U6b309WSgiTUlTU0lOR19PUl9JTlZBTElEIixgcGFpcigpIHBhcmFtczogJHtufWApO3Rocm93IGkuc2V0RXJyb3IoZHIubWFsZm9ybWVkX3BhaXJpbmdfdXJpKSxuZXcgRXJyb3Iobyl9aWYoIUJTKG4udXJpKSl7Y29uc3R7bWVzc2FnZTpvfT1ZKCJNSVNTSU5HX09SX0lOVkFMSUQiLGBwYWlyKCkgdXJpOiAke24udXJpfWApO3Rocm93IGkuc2V0RXJyb3IoZHIubWFsZm9ybWVkX3BhaXJpbmdfdXJpKSxuZXcgRXJyb3Iobyl9Y29uc3Qgcz1JaChuPy51cmkpO2lmKCFzPy5yZWxheT8ucHJvdG9jb2wpe2NvbnN0e21lc3NhZ2U6b309WSgiTUlTU0lOR19PUl9JTlZBTElEIiwicGFpcigpIHVyaSNyZWxheS1wcm90b2NvbCIpO3Rocm93IGkuc2V0RXJyb3IoZHIubWFsZm9ybWVkX3BhaXJpbmdfdXJpKSxuZXcgRXJyb3Iobyl9aWYoIXM/LnN5bUtleSl7Y29uc3R7bWVzc2FnZTpvfT1ZKCJNSVNTSU5HX09SX0lOVkFMSUQiLCJwYWlyKCkgdXJpI3N5bUtleSIpO3Rocm93IGkuc2V0RXJyb3IoZHIubWFsZm9ybWVkX3BhaXJpbmdfdXJpKSxuZXcgRXJyb3Iobyl9aWYocz8uZXhwaXJ5VGltZXN0YW1wJiZHLnRvTWlsaXNlY29uZHMocz8uZXhwaXJ5VGltZXN0YW1wKTxEYXRlLm5vdygpKXtpLnNldEVycm9yKGRyLnBhaXJpbmdfZXhwaXJlZCk7Y29uc3R7bWVzc2FnZTpvfT1ZKCJFWFBJUkVEIiwicGFpcigpIFVSSSBoYXMgZXhwaXJlZC4gUGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGEgbmV3IGNvbm5lY3Rpb24gVVJJLiIpO3Rocm93IG5ldyBFcnJvcihvKX19LHRoaXMuaXNWYWxpZFBpbmc9YXN5bmMgbj0+e2lmKCFudChuKSl7Y29uc3R7bWVzc2FnZTpzfT1ZKCJNSVNTSU5HX09SX0lOVkFMSUQiLGBwaW5nKCkgcGFyYW1zOiAke259YCk7dGhyb3cgbmV3IEVycm9yKHMpfWNvbnN0e3RvcGljOml9PW47YXdhaXQgdGhpcy5pc1ZhbGlkUGFpcmluZ1RvcGljKGkpfSx0aGlzLmlzVmFsaWREaXNjb25uZWN0PWFzeW5jIG49PntpZighbnQobikpe2NvbnN0e21lc3NhZ2U6c309WSgiTUlTU0lOR19PUl9JTlZBTElEIixgZGlzY29ubmVjdCgpIHBhcmFtczogJHtufWApO3Rocm93IG5ldyBFcnJvcihzKX1jb25zdHt0b3BpYzppfT1uO2F3YWl0IHRoaXMuaXNWYWxpZFBhaXJpbmdUb3BpYyhpKX0sdGhpcy5pc1ZhbGlkUGFpcmluZ1RvcGljPWFzeW5jIG49PntpZighQWUobiwhMSkpe2NvbnN0e21lc3NhZ2U6aX09WSgiTUlTU0lOR19PUl9JTlZBTElEIixgcGFpcmluZyB0b3BpYyBzaG91bGQgYmUgYSBzdHJpbmc6ICR7bn1gKTt0aHJvdyBuZXcgRXJyb3IoaSl9aWYoIXRoaXMucGFpcmluZ3Mua2V5cy5pbmNsdWRlcyhuKSl7Y29uc3R7bWVzc2FnZTppfT1ZKCJOT19NQVRDSElOR19LRVkiLGBwYWlyaW5nIHRvcGljIGRvZXNuJ3QgZXhpc3Q6ICR7bn1gKTt0aHJvdyBuZXcgRXJyb3IoaSl9aWYoWHQodGhpcy5wYWlyaW5ncy5nZXQobikuZXhwaXJ5KSl7YXdhaXQgdGhpcy5kZWxldGVQYWlyaW5nKG4pO2NvbnN0e21lc3NhZ2U6aX09WSgiRVhQSVJFRCIsYHBhaXJpbmcgdG9waWM6ICR7bn1gKTt0aHJvdyBuZXcgRXJyb3IoaSl9fSx0aGlzLmNvcmU9ZSx0aGlzLmxvZ2dlcj1ndChyLHRoaXMubmFtZSksdGhpcy5wYWlyaW5ncz1uZXcgVW4odGhpcy5jb3JlLHRoaXMubG9nZ2VyLHRoaXMubmFtZSx0aGlzLnN0b3JhZ2VQcmVmaXgpfWdldCBjb250ZXh0KCl7cmV0dXJuIGN0KHRoaXMubG9nZ2VyKX1pc0luaXRpYWxpemVkKCl7aWYoIXRoaXMuaW5pdGlhbGl6ZWQpe2NvbnN0e21lc3NhZ2U6ZX09WSgiTk9UX0lOSVRJQUxJWkVEIix0aGlzLm5hbWUpO3Rocm93IG5ldyBFcnJvcihlKX19cmVnaXN0ZXJSZWxheWVyRXZlbnRzKCl7dGhpcy5jb3JlLnJlbGF5ZXIub24odmUubWVzc2FnZSxhc3luYyBlPT57Y29uc3R7dG9waWM6cixtZXNzYWdlOm4sdHJhbnNwb3J0VHlwZTppfT1lO2lmKHRoaXMucGFpcmluZ3Mua2V5cy5pbmNsdWRlcyhyKSYmaSE9PXBlLmxpbmtfbW9kZSl7dHJ5e2lmKHRoaXMuY29yZS5jcnlwdG8uZ2V0UGF5bG9hZFR5cGUobixKdCk9PT1Pbil7dGhpcy5sb2dnZXIud2FybihgcmVnaXN0ZXJSZWxheWVyRXZlbnRzKCkgLT4gbm9uLWxpbmsgbW9kZSBUWVBFXzIgcGF5bG9hZCBpZ25vcmVkOiAke259YCk7cmV0dXJufX1jYXRjaHt9aWYoIXRoaXMuaWdub3JlZFBheWxvYWRUeXBlcy5pbmNsdWRlcyh0aGlzLmNvcmUuY3J5cHRvLmdldFBheWxvYWRUeXBlKG4pKSl0cnl7Y29uc3Qgcz1hd2FpdCB0aGlzLmNvcmUuY3J5cHRvLmRlY29kZShyLG4pO211KHMpPyh0aGlzLmNvcmUuaGlzdG9yeS5zZXQocixzKSxhd2FpdCB0aGlzLm9uUmVsYXlFdmVudFJlcXVlc3Qoe3RvcGljOnIscGF5bG9hZDpzfSkpOkZvKHMpJiYoYXdhaXQgdGhpcy5jb3JlLmhpc3RvcnkucmVzb2x2ZShzKSxhd2FpdCB0aGlzLm9uUmVsYXlFdmVudFJlc3BvbnNlKHt0b3BpYzpyLHBheWxvYWQ6c30pLHRoaXMuY29yZS5oaXN0b3J5LmRlbGV0ZShyLHMuaWQpKSxhd2FpdCB0aGlzLmNvcmUucmVsYXllci5tZXNzYWdlcy5hY2socixuKX1jYXRjaChzKXt0aGlzLmxvZ2dlci5lcnJvcihzKX19fSl9cmVnaXN0ZXJFeHBpcmVyRXZlbnRzKCl7dGhpcy5jb3JlLmV4cGlyZXIub24obXQuZXhwaXJlZCxhc3luYyBlPT57Y29uc3R7dG9waWM6cn09eWcoZS50YXJnZXQpO3ImJnRoaXMucGFpcmluZ3Mua2V5cy5pbmNsdWRlcyhyKSYmKGF3YWl0IHRoaXMuZGVsZXRlUGFpcmluZyhyLCEwKSx0aGlzLmV2ZW50cy5lbWl0KHBuLmV4cGlyZSx7dG9waWM6cn0pKX0pfX1jbGFzcyBqQSBleHRlbmRzIFZ3e2NvbnN0cnVjdG9yKGUscil7c3VwZXIoZSxyKSx0aGlzLmNvcmU9ZSx0aGlzLmxvZ2dlcj1yLHRoaXMucmVjb3Jkcz1uZXcgTWFwLHRoaXMuZXZlbnRzPW5ldyBTdC5FdmVudEVtaXR0ZXIsdGhpcy5uYW1lPUVBLHRoaXMudmVyc2lvbj12QSx0aGlzLmNhY2hlZD1bXSx0aGlzLmluaXRpYWxpemVkPSExLHRoaXMuc3RvcmFnZVByZWZpeD1pcix0aGlzLmluaXQ9YXN5bmMoKT0+e3RoaXMuaW5pdGlhbGl6ZWR8fCh0aGlzLmxvZ2dlci50cmFjZSgiSW5pdGlhbGl6ZWQiKSxhd2FpdCB0aGlzLnJlc3RvcmUoKSx0aGlzLmNhY2hlZC5mb3JFYWNoKG49PnRoaXMucmVjb3Jkcy5zZXQobi5pZCxuKSksdGhpcy5jYWNoZWQ9W10sdGhpcy5yZWdpc3RlckV2ZW50TGlzdGVuZXJzKCksdGhpcy5pbml0aWFsaXplZD0hMCl9LHRoaXMuc2V0PShuLGkscyk9PntpZih0aGlzLmlzSW5pdGlhbGl6ZWQoKSx0aGlzLmxvZ2dlci5kZWJ1ZygiU2V0dGluZyBKU09OLVJQQyByZXF1ZXN0IGhpc3RvcnkgcmVjb3JkIiksdGhpcy5sb2dnZXIudHJhY2Uoe3R5cGU6Im1ldGhvZCIsbWV0aG9kOiJzZXQiLHRvcGljOm4scmVxdWVzdDppLGNoYWluSWQ6c30pLHRoaXMucmVjb3Jkcy5oYXMoaS5pZCkpcmV0dXJuO2NvbnN0IG89e2lkOmkuaWQsdG9waWM6bixyZXF1ZXN0OnttZXRob2Q6aS5tZXRob2QscGFyYW1zOmkucGFyYW1zfHxudWxsfSxjaGFpbklkOnMsZXhwaXJ5OlNlKEcuVEhJUlRZX0RBWVMpfTt0aGlzLnJlY29yZHMuc2V0KG8uaWQsbyksdGhpcy5wZXJzaXN0KCksdGhpcy5ldmVudHMuZW1pdChPdC5jcmVhdGVkLG8pfSx0aGlzLnJlc29sdmU9YXN5bmMgbj0+e2lmKHRoaXMuaXNJbml0aWFsaXplZCgpLHRoaXMubG9nZ2VyLmRlYnVnKCJVcGRhdGluZyBKU09OLVJQQyByZXNwb25zZSBoaXN0b3J5IHJlY29yZCIpLHRoaXMubG9nZ2VyLnRyYWNlKHt0eXBlOiJtZXRob2QiLG1ldGhvZDoidXBkYXRlIixyZXNwb25zZTpufSksIXRoaXMucmVjb3Jkcy5oYXMobi5pZCkpcmV0dXJuO2NvbnN0IGk9YXdhaXQgdGhpcy5nZXRSZWNvcmQobi5pZCk7dHlwZW9mIGkucmVzcG9uc2U8InUifHwoaS5yZXNwb25zZT14dChuKT97ZXJyb3I6bi5lcnJvcn06e3Jlc3VsdDpuLnJlc3VsdH0sdGhpcy5yZWNvcmRzLnNldChpLmlkLGkpLHRoaXMucGVyc2lzdCgpLHRoaXMuZXZlbnRzLmVtaXQoT3QudXBkYXRlZCxpKSl9LHRoaXMuZ2V0PWFzeW5jKG4saSk9Pih0aGlzLmlzSW5pdGlhbGl6ZWQoKSx0aGlzLmxvZ2dlci5kZWJ1ZygiR2V0dGluZyByZWNvcmQiKSx0aGlzLmxvZ2dlci50cmFjZSh7dHlwZToibWV0aG9kIixtZXRob2Q6ImdldCIsdG9waWM6bixpZDppfSksYXdhaXQgdGhpcy5nZXRSZWNvcmQoaSkpLHRoaXMuZGVsZXRlPShuLGkpPT57dGhpcy5pc0luaXRpYWxpemVkKCksdGhpcy5sb2dnZXIuZGVidWcoIkRlbGV0aW5nIHJlY29yZCIpLHRoaXMubG9nZ2VyLnRyYWNlKHt0eXBlOiJtZXRob2QiLG1ldGhvZDoiZGVsZXRlIixpZDppfSksdGhpcy52YWx1ZXMuZm9yRWFjaChzPT57aWYocy50b3BpYz09PW4pe2lmKHR5cGVvZiBpPCJ1IiYmcy5pZCE9PWkpcmV0dXJuO3RoaXMucmVjb3Jkcy5kZWxldGUocy5pZCksdGhpcy5ldmVudHMuZW1pdChPdC5kZWxldGVkLHMpfX0pLHRoaXMucGVyc2lzdCgpfSx0aGlzLmV4aXN0cz1hc3luYyhuLGkpPT4odGhpcy5pc0luaXRpYWxpemVkKCksdGhpcy5yZWNvcmRzLmhhcyhpKT8oYXdhaXQgdGhpcy5nZXRSZWNvcmQoaSkpLnRvcGljPT09bjohMSksdGhpcy5vbj0obixpKT0+e3RoaXMuZXZlbnRzLm9uKG4saSl9LHRoaXMub25jZT0obixpKT0+e3RoaXMuZXZlbnRzLm9uY2UobixpKX0sdGhpcy5vZmY9KG4saSk9Pnt0aGlzLmV2ZW50cy5vZmYobixpKX0sdGhpcy5yZW1vdmVMaXN0ZW5lcj0obixpKT0+e3RoaXMuZXZlbnRzLnJlbW92ZUxpc3RlbmVyKG4saSl9LHRoaXMubG9nZ2VyPWd0KHIsdGhpcy5uYW1lKX1nZXQgY29udGV4dCgpe3JldHVybiBjdCh0aGlzLmxvZ2dlcil9Z2V0IHN0b3JhZ2VLZXkoKXtyZXR1cm4gdGhpcy5zdG9yYWdlUHJlZml4K3RoaXMudmVyc2lvbit0aGlzLmNvcmUuY3VzdG9tU3RvcmFnZVByZWZpeCsiLy8iK3RoaXMubmFtZX1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLnJlY29yZHMuc2l6ZX1nZXQga2V5cygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMucmVjb3Jkcy5rZXlzKCkpfWdldCB2YWx1ZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnJlY29yZHMudmFsdWVzKCkpfWdldCBwZW5kaW5nKCl7Y29uc3QgZT1bXTtyZXR1cm4gdGhpcy52YWx1ZXMuZm9yRWFjaChyPT57aWYodHlwZW9mIHIucmVzcG9uc2U8InUiKXJldHVybjtjb25zdCBuPXt0b3BpYzpyLnRvcGljLHJlcXVlc3Q6UnQoci5yZXF1ZXN0Lm1ldGhvZCxyLnJlcXVlc3QucGFyYW1zLHIuaWQpLGNoYWluSWQ6ci5jaGFpbklkfTtyZXR1cm4gZS5wdXNoKG4pfSksZX1hc3luYyBzZXRKc29uUnBjUmVjb3JkcyhlKXthd2FpdCB0aGlzLmNvcmUuc3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZUtleSxlKX1hc3luYyBnZXRKc29uUnBjUmVjb3Jkcygpe3JldHVybiBhd2FpdCB0aGlzLmNvcmUuc3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleSl9Z2V0UmVjb3JkKGUpe3RoaXMuaXNJbml0aWFsaXplZCgpO2NvbnN0IHI9dGhpcy5yZWNvcmRzLmdldChlKTtpZighcil7Y29uc3R7bWVzc2FnZTpufT1ZKCJOT19NQVRDSElOR19LRVkiLGAke3RoaXMubmFtZX06ICR7ZX1gKTt0aHJvdyBuZXcgRXJyb3Iobil9cmV0dXJuIHJ9YXN5bmMgcGVyc2lzdCgpe2F3YWl0IHRoaXMuc2V0SnNvblJwY1JlY29yZHModGhpcy52YWx1ZXMpLHRoaXMuZXZlbnRzLmVtaXQoT3Quc3luYyl9YXN5bmMgcmVzdG9yZSgpe3RyeXtjb25zdCBlPWF3YWl0IHRoaXMuZ2V0SnNvblJwY1JlY29yZHMoKTtpZih0eXBlb2YgZT4idSJ8fCFlLmxlbmd0aClyZXR1cm47aWYodGhpcy5yZWNvcmRzLnNpemUpe2NvbnN0e21lc3NhZ2U6cn09WSgiUkVTVE9SRV9XSUxMX09WRVJSSURFIix0aGlzLm5hbWUpO3Rocm93IHRoaXMubG9nZ2VyLmVycm9yKHIpLG5ldyBFcnJvcihyKX10aGlzLmNhY2hlZD1lLHRoaXMubG9nZ2VyLmRlYnVnKGBTdWNjZXNzZnVsbHkgUmVzdG9yZWQgcmVjb3JkcyBmb3IgJHt0aGlzLm5hbWV9YCksdGhpcy5sb2dnZXIudHJhY2Uoe3R5cGU6Im1ldGhvZCIsbWV0aG9kOiJyZXN0b3JlIixyZWNvcmRzOnRoaXMudmFsdWVzfSl9Y2F0Y2goZSl7dGhpcy5sb2dnZXIuZGVidWcoYEZhaWxlZCB0byBSZXN0b3JlIHJlY29yZHMgZm9yICR7dGhpcy5uYW1lfWApLHRoaXMubG9nZ2VyLmVycm9yKGUpfX1yZWdpc3RlckV2ZW50TGlzdGVuZXJzKCl7dGhpcy5ldmVudHMub24oT3QuY3JlYXRlZCxlPT57Y29uc3Qgcj1PdC5jcmVhdGVkO3RoaXMubG9nZ2VyLmluZm8oYEVtaXR0aW5nICR7cn1gKSx0aGlzLmxvZ2dlci5kZWJ1Zyh7dHlwZToiZXZlbnQiLGV2ZW50OnIscmVjb3JkOmV9KX0pLHRoaXMuZXZlbnRzLm9uKE90LnVwZGF0ZWQsZT0+e2NvbnN0IHI9T3QudXBkYXRlZDt0aGlzLmxvZ2dlci5pbmZvKGBFbWl0dGluZyAke3J9YCksdGhpcy5sb2dnZXIuZGVidWcoe3R5cGU6ImV2ZW50IixldmVudDpyLHJlY29yZDplfSl9KSx0aGlzLmV2ZW50cy5vbihPdC5kZWxldGVkLGU9Pntjb25zdCByPU90LmRlbGV0ZWQ7dGhpcy5sb2dnZXIuaW5mbyhgRW1pdHRpbmcgJHtyfWApLHRoaXMubG9nZ2VyLmRlYnVnKHt0eXBlOiJldmVudCIsZXZlbnQ6cixyZWNvcmQ6ZX0pfSksdGhpcy5jb3JlLmhlYXJ0YmVhdC5vbihQbi5wdWxzZSwoKT0+e3RoaXMuY2xlYW51cCgpfSl9Y2xlYW51cCgpe3RyeXt0aGlzLmlzSW5pdGlhbGl6ZWQoKTtsZXQgZT0hMTt0aGlzLnJlY29yZHMuZm9yRWFjaChyPT57Ry50b01pbGlzZWNvbmRzKHIuZXhwaXJ5fHwwKS1EYXRlLm5vdygpPD0wJiYodGhpcy5sb2dnZXIuaW5mbyhgRGVsZXRpbmcgZXhwaXJlZCBoaXN0b3J5IGxvZzogJHtyLmlkfWApLHRoaXMucmVjb3Jkcy5kZWxldGUoci5pZCksdGhpcy5ldmVudHMuZW1pdChPdC5kZWxldGVkLHIsITEpLGU9ITApfSksZSYmdGhpcy5wZXJzaXN0KCl9Y2F0Y2goZSl7dGhpcy5sb2dnZXIud2FybihlKX19aXNJbml0aWFsaXplZCgpe2lmKCF0aGlzLmluaXRpYWxpemVkKXtjb25zdHttZXNzYWdlOmV9PVkoIk5PVF9JTklUSUFMSVpFRCIsdGhpcy5uYW1lKTt0aHJvdyBuZXcgRXJyb3IoZSl9fX1jbGFzcyB6QSBleHRlbmRzIEp3e2NvbnN0cnVjdG9yKGUscil7c3VwZXIoZSxyKSx0aGlzLmNvcmU9ZSx0aGlzLmxvZ2dlcj1yLHRoaXMuZXhwaXJhdGlvbnM9bmV3IE1hcCx0aGlzLmV2ZW50cz1uZXcgU3QuRXZlbnRFbWl0dGVyLHRoaXMubmFtZT14QSx0aGlzLnZlcnNpb249X0EsdGhpcy5jYWNoZWQ9W10sdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLnN0b3JhZ2VQcmVmaXg9aXIsdGhpcy5pbml0PWFzeW5jKCk9Pnt0aGlzLmluaXRpYWxpemVkfHwodGhpcy5sb2dnZXIudHJhY2UoIkluaXRpYWxpemVkIiksYXdhaXQgdGhpcy5yZXN0b3JlKCksdGhpcy5jYWNoZWQuZm9yRWFjaChuPT50aGlzLmV4cGlyYXRpb25zLnNldChuLnRhcmdldCxuKSksdGhpcy5jYWNoZWQ9W10sdGhpcy5yZWdpc3RlckV2ZW50TGlzdGVuZXJzKCksdGhpcy5pbml0aWFsaXplZD0hMCl9LHRoaXMuaGFzPW49Pnt0cnl7Y29uc3QgaT10aGlzLmZvcm1hdFRhcmdldChuKTtyZXR1cm4gdHlwZW9mIHRoaXMuZ2V0RXhwaXJhdGlvbihpKTwidSJ9Y2F0Y2h7cmV0dXJuITF9fSx0aGlzLnNldD0obixpKT0+e3RoaXMuaXNJbml0aWFsaXplZCgpO2NvbnN0IHM9dGhpcy5mb3JtYXRUYXJnZXQobiksbz17dGFyZ2V0OnMsZXhwaXJ5Oml9O3RoaXMuZXhwaXJhdGlvbnMuc2V0KHMsbyksdGhpcy5jaGVja0V4cGlyeShzLG8pLHRoaXMuZXZlbnRzLmVtaXQobXQuY3JlYXRlZCx7dGFyZ2V0OnMsZXhwaXJhdGlvbjpvfSl9LHRoaXMuZ2V0PW49Pnt0aGlzLmlzSW5pdGlhbGl6ZWQoKTtjb25zdCBpPXRoaXMuZm9ybWF0VGFyZ2V0KG4pO3JldHVybiB0aGlzLmdldEV4cGlyYXRpb24oaSl9LHRoaXMuZGVsPW49PntpZih0aGlzLmlzSW5pdGlhbGl6ZWQoKSx0aGlzLmhhcyhuKSl7Y29uc3QgaT10aGlzLmZvcm1hdFRhcmdldChuKSxzPXRoaXMuZ2V0RXhwaXJhdGlvbihpKTt0aGlzLmV4cGlyYXRpb25zLmRlbGV0ZShpKSx0aGlzLmV2ZW50cy5lbWl0KG10LmRlbGV0ZWQse3RhcmdldDppLGV4cGlyYXRpb246c30pfX0sdGhpcy5vbj0obixpKT0+e3RoaXMuZXZlbnRzLm9uKG4saSl9LHRoaXMub25jZT0obixpKT0+e3RoaXMuZXZlbnRzLm9uY2UobixpKX0sdGhpcy5vZmY9KG4saSk9Pnt0aGlzLmV2ZW50cy5vZmYobixpKX0sdGhpcy5yZW1vdmVMaXN0ZW5lcj0obixpKT0+e3RoaXMuZXZlbnRzLnJlbW92ZUxpc3RlbmVyKG4saSl9LHRoaXMubG9nZ2VyPWd0KHIsdGhpcy5uYW1lKX1nZXQgY29udGV4dCgpe3JldHVybiBjdCh0aGlzLmxvZ2dlcil9Z2V0IHN0b3JhZ2VLZXkoKXtyZXR1cm4gdGhpcy5zdG9yYWdlUHJlZml4K3RoaXMudmVyc2lvbit0aGlzLmNvcmUuY3VzdG9tU3RvcmFnZVByZWZpeCsiLy8iK3RoaXMubmFtZX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZXhwaXJhdGlvbnMuc2l6ZX1nZXQga2V5cygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuZXhwaXJhdGlvbnMua2V5cygpKX1nZXQgdmFsdWVzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5leHBpcmF0aW9ucy52YWx1ZXMoKSl9Zm9ybWF0VGFyZ2V0KGUpe2lmKHR5cGVvZiBlPT0ic3RyaW5nIilyZXR1cm4gTzMoZSk7aWYodHlwZW9mIGU9PSJudW1iZXIiKXJldHVybiAkMyhlKTtjb25zdHttZXNzYWdlOnJ9PVkoIlVOS05PV05fVFlQRSIsYFRhcmdldCB0eXBlOiAke3R5cGVvZiBlfWApO3Rocm93IG5ldyBFcnJvcihyKX1hc3luYyBzZXRFeHBpcmF0aW9ucyhlKXthd2FpdCB0aGlzLmNvcmUuc3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZUtleSxlKX1hc3luYyBnZXRFeHBpcmF0aW9ucygpe3JldHVybiBhd2FpdCB0aGlzLmNvcmUuc3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleSl9YXN5bmMgcGVyc2lzdCgpe2F3YWl0IHRoaXMuc2V0RXhwaXJhdGlvbnModGhpcy52YWx1ZXMpLHRoaXMuZXZlbnRzLmVtaXQobXQuc3luYyl9YXN5bmMgcmVzdG9yZSgpe3RyeXtjb25zdCBlPWF3YWl0IHRoaXMuZ2V0RXhwaXJhdGlvbnMoKTtpZih0eXBlb2YgZT4idSJ8fCFlLmxlbmd0aClyZXR1cm47aWYodGhpcy5leHBpcmF0aW9ucy5zaXplKXtjb25zdHttZXNzYWdlOnJ9PVkoIlJFU1RPUkVfV0lMTF9PVkVSUklERSIsdGhpcy5uYW1lKTt0aHJvdyB0aGlzLmxvZ2dlci5lcnJvcihyKSxuZXcgRXJyb3Iocil9dGhpcy5jYWNoZWQ9ZSx0aGlzLmxvZ2dlci5kZWJ1ZyhgU3VjY2Vzc2Z1bGx5IFJlc3RvcmVkIGV4cGlyYXRpb25zIGZvciAke3RoaXMubmFtZX1gKSx0aGlzLmxvZ2dlci50cmFjZSh7dHlwZToibWV0aG9kIixtZXRob2Q6InJlc3RvcmUiLGV4cGlyYXRpb25zOnRoaXMudmFsdWVzfSl9Y2F0Y2goZSl7dGhpcy5sb2dnZXIuZGVidWcoYEZhaWxlZCB0byBSZXN0b3JlIGV4cGlyYXRpb25zIGZvciAke3RoaXMubmFtZX1gKSx0aGlzLmxvZ2dlci5lcnJvcihlKX19Z2V0RXhwaXJhdGlvbihlKXtjb25zdCByPXRoaXMuZXhwaXJhdGlvbnMuZ2V0KGUpO2lmKCFyKXtjb25zdHttZXNzYWdlOm59PVkoIk5PX01BVENISU5HX0tFWSIsYCR7dGhpcy5uYW1lfTogJHtlfWApO3Rocm93IHRoaXMubG9nZ2VyLndhcm4obiksbmV3IEVycm9yKG4pfXJldHVybiByfWNoZWNrRXhwaXJ5KGUscil7Y29uc3R7ZXhwaXJ5Om59PXI7Ry50b01pbGlzZWNvbmRzKG4pLURhdGUubm93KCk8PTAmJnRoaXMuZXhwaXJlKGUscil9ZXhwaXJlKGUscil7dGhpcy5leHBpcmF0aW9ucy5kZWxldGUoZSksdGhpcy5ldmVudHMuZW1pdChtdC5leHBpcmVkLHt0YXJnZXQ6ZSxleHBpcmF0aW9uOnJ9KX1jaGVja0V4cGlyYXRpb25zKCl7dGhpcy5jb3JlLnJlbGF5ZXIuY29ubmVjdGVkJiZ0aGlzLmV4cGlyYXRpb25zLmZvckVhY2goKGUscik9PnRoaXMuY2hlY2tFeHBpcnkocixlKSl9cmVnaXN0ZXJFdmVudExpc3RlbmVycygpe3RoaXMuY29yZS5oZWFydGJlYXQub24oUG4ucHVsc2UsKCk9PnRoaXMuY2hlY2tFeHBpcmF0aW9ucygpKSx0aGlzLmV2ZW50cy5vbihtdC5jcmVhdGVkLGU9Pntjb25zdCByPW10LmNyZWF0ZWQ7dGhpcy5sb2dnZXIuaW5mbyhgRW1pdHRpbmcgJHtyfWApLHRoaXMubG9nZ2VyLmRlYnVnKHt0eXBlOiJldmVudCIsZXZlbnQ6cixkYXRhOmV9KSx0aGlzLnBlcnNpc3QoKX0pLHRoaXMuZXZlbnRzLm9uKG10LmV4cGlyZWQsZT0+e2NvbnN0IHI9bXQuZXhwaXJlZDt0aGlzLmxvZ2dlci5pbmZvKGBFbWl0dGluZyAke3J9YCksdGhpcy5sb2dnZXIuZGVidWcoe3R5cGU6ImV2ZW50IixldmVudDpyLGRhdGE6ZX0pLHRoaXMucGVyc2lzdCgpfSksdGhpcy5ldmVudHMub24obXQuZGVsZXRlZCxlPT57Y29uc3Qgcj1tdC5kZWxldGVkO3RoaXMubG9nZ2VyLmluZm8oYEVtaXR0aW5nICR7cn1gKSx0aGlzLmxvZ2dlci5kZWJ1Zyh7dHlwZToiZXZlbnQiLGV2ZW50OnIsZGF0YTplfSksdGhpcy5wZXJzaXN0KCl9KX1pc0luaXRpYWxpemVkKCl7aWYoIXRoaXMuaW5pdGlhbGl6ZWQpe2NvbnN0e21lc3NhZ2U6ZX09WSgiTk9UX0lOSVRJQUxJWkVEIix0aGlzLm5hbWUpO3Rocm93IG5ldyBFcnJvcihlKX19fWNsYXNzIEhBIGV4dGVuZHMgUXd7Y29uc3RydWN0b3IoZSxyLG4pe3N1cGVyKGUscixuKSx0aGlzLmNvcmU9ZSx0aGlzLmxvZ2dlcj1yLHRoaXMuc3RvcmU9bix0aGlzLm5hbWU9SUEsdGhpcy52ZXJpZnlVcmxWMz1BQSx0aGlzLnN0b3JhZ2VQcmVmaXg9aXIsdGhpcy52ZXJzaW9uPXIwLHRoaXMuaW5pdD1hc3luYygpPT57dGhpcy5pc0RldkVudnx8KHRoaXMucHVibGljS2V5PWF3YWl0IHRoaXMuc3RvcmUuZ2V0SXRlbSh0aGlzLnN0b3JlS2V5KSx0aGlzLnB1YmxpY0tleSYmRy50b01pbGlzZWNvbmRzKHRoaXMucHVibGljS2V5Py5leHBpcmVzQXQpPERhdGUubm93KCkmJih0aGlzLmxvZ2dlci5kZWJ1ZygidmVyaWZ5IHYyIHB1YmxpYyBrZXkgZXhwaXJlZCIpLGF3YWl0IHRoaXMucmVtb3ZlUHVibGljS2V5KCkpKX0sdGhpcy5yZWdpc3Rlcj1hc3luYyBpPT57aWYoIWRpKCl8fHRoaXMuaXNEZXZFbnYpcmV0dXJuO2NvbnN0IHM9d2luZG93LmxvY2F0aW9uLm9yaWdpbix7aWQ6byxkZWNyeXB0ZWRJZDphfT1pLGM9YCR7dGhpcy52ZXJpZnlVcmxWM30vYXR0ZXN0YXRpb24/cHJvamVjdElkPSR7dGhpcy5jb3JlLnByb2plY3RJZH0mb3JpZ2luPSR7c30maWQ9JHtvfSZkZWNyeXB0ZWRJZD0ke2F9YDt0cnl7Y29uc3QgdT1TbigpLGw9dGhpcy5zdGFydEFib3J0VGltZXIoRy5PTkVfU0VDT05EKjUpLGg9YXdhaXQgbmV3IFByb21pc2UoKHAsZyk9Pntjb25zdCB3PSgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHYpLHUuYm9keS5yZW1vdmVDaGlsZChiKSxnKCJhdHRlc3RhdGlvbiBhYm9ydGVkIil9O3RoaXMuYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsdyk7Y29uc3QgYj11LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2Iuc3JjPWMsYi5zdHlsZS5kaXNwbGF5PSJub25lIixiLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIix3LHtzaWduYWw6dGhpcy5hYm9ydENvbnRyb2xsZXIuc2lnbmFsfSk7Y29uc3Qgdj1PPT57aWYoTy5kYXRhJiZ0eXBlb2YgTy5kYXRhPT0ic3RyaW5nIil0cnl7Y29uc3QgRj1KU09OLnBhcnNlKE8uZGF0YSk7aWYoRi50eXBlPT09InZlcmlmeV9hdHRlc3RhdGlvbiIpe2lmKGVjKEYuYXR0ZXN0YXRpb24pLnBheWxvYWQuaWQhPT1vKXJldHVybjtjbGVhckludGVydmFsKGwpLHUuYm9keS5yZW1vdmVDaGlsZChiKSx0aGlzLmFib3J0Q29udHJvbGxlci5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHcpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIix2KSxwKEYuYXR0ZXN0YXRpb249PT1udWxsPyIiOkYuYXR0ZXN0YXRpb24pfX1jYXRjaChGKXt0aGlzLmxvZ2dlci53YXJuKEYpfX07dS5ib2R5LmFwcGVuZENoaWxkKGIpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix2LHtzaWduYWw6dGhpcy5hYm9ydENvbnRyb2xsZXIuc2lnbmFsfSl9KTtyZXR1cm4gdGhpcy5sb2dnZXIuZGVidWcoaCwiand0IGF0dGVzdGF0aW9uIiksaH1jYXRjaCh1KXt0aGlzLmxvZ2dlci53YXJuKHUpfXJldHVybiIifSx0aGlzLnJlc29sdmU9YXN5bmMgaT0+e2lmKHRoaXMuaXNEZXZFbnYpcmV0dXJuIiI7Y29uc3R7YXR0ZXN0YXRpb25JZDpzLGhhc2g6byxlbmNyeXB0ZWRJZDphfT1pO2lmKHM9PT0iIil7dGhpcy5sb2dnZXIuZGVidWcoInJlc29sdmU6IGF0dGVzdGF0aW9uSWQgaXMgZW1wdHksIHNraXBwaW5nIik7cmV0dXJufWlmKHMpe2lmKGVjKHMpLnBheWxvYWQuaWQhPT1hKXJldHVybjtjb25zdCB1PWF3YWl0IHRoaXMuaXNWYWxpZEp3dEF0dGVzdGF0aW9uKHMpO2lmKHUpe2lmKCF1LmlzVmVyaWZpZWQpe3RoaXMubG9nZ2VyLndhcm4oInJlc29sdmU6IGp3dCBhdHRlc3RhdGlvbjogb3JpZ2luIHVybCBub3QgdmVyaWZpZWQiKTtyZXR1cm59cmV0dXJuIHV9fWlmKCFvKXJldHVybjtjb25zdCBjPXRoaXMuZ2V0VmVyaWZ5VXJsKGk/LnZlcmlmeVVybCk7cmV0dXJuIHRoaXMuZmV0Y2hBdHRlc3RhdGlvbihvLGMpfSx0aGlzLmZldGNoQXR0ZXN0YXRpb249YXN5bmMoaSxzKT0+e3RoaXMubG9nZ2VyLmRlYnVnKGByZXNvbHZpbmcgYXR0ZXN0YXRpb246ICR7aX0gZnJvbSB1cmw6ICR7c31gKTtjb25zdCBvPXRoaXMuc3RhcnRBYm9ydFRpbWVyKEcuT05FX1NFQ09ORCo1KSxhPWF3YWl0IGZldGNoKGAke3N9L2F0dGVzdGF0aW9uLyR7aX0/djJTdXBwb3J0ZWQ9dHJ1ZWAse3NpZ25hbDp0aGlzLmFib3J0Q29udHJvbGxlci5zaWduYWx9KTtyZXR1cm4gY2xlYXJUaW1lb3V0KG8pLGEuc3RhdHVzPT09MjAwP2F3YWl0IGEuanNvbigpOnZvaWQgMH0sdGhpcy5nZXRWZXJpZnlVcmw9aT0+e2xldCBzPWl8fE1pO3JldHVybiBEQS5pbmNsdWRlcyhzKXx8KHRoaXMubG9nZ2VyLmluZm8oYHZlcmlmeSB1cmw6ICR7c30sIG5vdCBpbmNsdWRlZCBpbiB0cnVzdGVkIGxpc3QsIGFzc2lnbmluZyBkZWZhdWx0OiAke01pfWApLHM9TWkpLHN9LHRoaXMuZmV0Y2hQdWJsaWNLZXk9YXN5bmMoKT0+e3RyeXt0aGlzLmxvZ2dlci5kZWJ1ZyhgZmV0Y2hpbmcgcHVibGljIGtleSBmcm9tOiAke3RoaXMudmVyaWZ5VXJsVjN9YCk7Y29uc3QgaT10aGlzLnN0YXJ0QWJvcnRUaW1lcihHLkZJVkVfU0VDT05EUykscz1hd2FpdCBmZXRjaChgJHt0aGlzLnZlcmlmeVVybFYzfS9wdWJsaWMta2V5YCx7c2lnbmFsOnRoaXMuYWJvcnRDb250cm9sbGVyLnNpZ25hbH0pO3JldHVybiBjbGVhclRpbWVvdXQoaSksYXdhaXQgcy5qc29uKCl9Y2F0Y2goaSl7dGhpcy5sb2dnZXIud2FybihpKX19LHRoaXMucGVyc2lzdFB1YmxpY0tleT1hc3luYyBpPT57dGhpcy5sb2dnZXIuZGVidWcoaSwicGVyc2lzdGluZyBwdWJsaWMga2V5IHRvIGxvY2FsIHN0b3JhZ2UiKSxhd2FpdCB0aGlzLnN0b3JlLnNldEl0ZW0odGhpcy5zdG9yZUtleSxpKSx0aGlzLnB1YmxpY0tleT1pfSx0aGlzLnJlbW92ZVB1YmxpY0tleT1hc3luYygpPT57dGhpcy5sb2dnZXIuZGVidWcoInJlbW92aW5nIHZlcmlmeSB2MiBwdWJsaWMga2V5IGZyb20gc3RvcmFnZSIpLGF3YWl0IHRoaXMuc3RvcmUucmVtb3ZlSXRlbSh0aGlzLnN0b3JlS2V5KSx0aGlzLnB1YmxpY0tleT12b2lkIDB9LHRoaXMuaXNWYWxpZEp3dEF0dGVzdGF0aW9uPWFzeW5jIGk9Pntjb25zdCBzPWF3YWl0IHRoaXMuZ2V0UHVibGljS2V5KCk7dHJ5e2lmKHMpcmV0dXJuIHRoaXMudmFsaWRhdGVBdHRlc3RhdGlvbihpLHMpfWNhdGNoKGEpe3RoaXMubG9nZ2VyLmVycm9yKGEpLHRoaXMubG9nZ2VyLndhcm4oImVycm9yIHZhbGlkYXRpbmcgYXR0ZXN0YXRpb24iKX1jb25zdCBvPWF3YWl0IHRoaXMuZmV0Y2hBbmRQZXJzaXN0UHVibGljS2V5KCk7dHJ5e2lmKG8pcmV0dXJuIHRoaXMudmFsaWRhdGVBdHRlc3RhdGlvbihpLG8pfWNhdGNoKGEpe3RoaXMubG9nZ2VyLmVycm9yKGEpLHRoaXMubG9nZ2VyLndhcm4oImVycm9yIHZhbGlkYXRpbmcgYXR0ZXN0YXRpb24iKX19LHRoaXMuZ2V0UHVibGljS2V5PWFzeW5jKCk9PnRoaXMucHVibGljS2V5P3RoaXMucHVibGljS2V5OmF3YWl0IHRoaXMuZmV0Y2hBbmRQZXJzaXN0UHVibGljS2V5KCksdGhpcy5mZXRjaEFuZFBlcnNpc3RQdWJsaWNLZXk9YXN5bmMoKT0+e2lmKHRoaXMuZmV0Y2hQcm9taXNlKXJldHVybiBhd2FpdCB0aGlzLmZldGNoUHJvbWlzZSx0aGlzLnB1YmxpY0tleTt0aGlzLmZldGNoUHJvbWlzZT1uZXcgUHJvbWlzZShhc3luYyBzPT57Y29uc3Qgbz1hd2FpdCB0aGlzLmZldGNoUHVibGljS2V5KCk7byYmKGF3YWl0IHRoaXMucGVyc2lzdFB1YmxpY0tleShvKSxzKG8pKX0pO2NvbnN0IGk9YXdhaXQgdGhpcy5mZXRjaFByb21pc2U7cmV0dXJuIHRoaXMuZmV0Y2hQcm9taXNlPXZvaWQgMCxpfSx0aGlzLnZhbGlkYXRlQXR0ZXN0YXRpb249KGkscyk9Pntjb25zdCBvPXdTKGkscy5wdWJsaWNLZXkpLGE9e2hhc0V4cGlyZWQ6Ry50b01pbGlzZWNvbmRzKG8uZXhwKTxEYXRlLm5vdygpLHBheWxvYWQ6b307aWYoYS5oYXNFeHBpcmVkKXRocm93IHRoaXMubG9nZ2VyLndhcm4oInJlc29sdmU6IGp3dCBhdHRlc3RhdGlvbiBleHBpcmVkIiksbmV3IEVycm9yKCJKV1QgYXR0ZXN0YXRpb24gZXhwaXJlZCIpO3JldHVybntvcmlnaW46YS5wYXlsb2FkLm9yaWdpbixpc1NjYW06YS5wYXlsb2FkLmlzU2NhbSxpc1ZlcmlmaWVkOmEucGF5bG9hZC5pc1ZlcmlmaWVkfX0sdGhpcy5sb2dnZXI9Z3Qocix0aGlzLm5hbWUpLHRoaXMuYWJvcnRDb250cm9sbGVyPW5ldyBBYm9ydENvbnRyb2xsZXIsdGhpcy5pc0RldkVudj1kdSgpLHRoaXMuaW5pdCgpfWdldCBzdG9yZUtleSgpe3JldHVybiB0aGlzLnN0b3JhZ2VQcmVmaXgrdGhpcy52ZXJzaW9uK3RoaXMuY29yZS5jdXN0b21TdG9yYWdlUHJlZml4KyIvL3ZlcmlmeTpwdWJsaWM6a2V5In1nZXQgY29udGV4dCgpe3JldHVybiBjdCh0aGlzLmxvZ2dlcil9c3RhcnRBYm9ydFRpbWVyKGUpe3JldHVybiB0aGlzLmFib3J0Q29udHJvbGxlcj1uZXcgQWJvcnRDb250cm9sbGVyLHNldFRpbWVvdXQoKCk9PnRoaXMuYWJvcnRDb250cm9sbGVyLmFib3J0KCksRy50b01pbGlzZWNvbmRzKGUpKX19Y2xhc3MgS0EgZXh0ZW5kcyBlbXtjb25zdHJ1Y3RvcihlLHIpe3N1cGVyKGUsciksdGhpcy5wcm9qZWN0SWQ9ZSx0aGlzLmxvZ2dlcj1yLHRoaXMuY29udGV4dD1PQSx0aGlzLnJlZ2lzdGVyRGV2aWNlVG9rZW49YXN5bmMgbj0+e2NvbnN0e2NsaWVudElkOmksdG9rZW46cyxub3RpZmljYXRpb25UeXBlOm8sZW5hYmxlRW5jcnlwdGVkOmE9ITF9PW4sYz1gJHskQX0vJHt0aGlzLnByb2plY3RJZH0vY2xpZW50c2A7YXdhaXQgZmV0Y2goYyx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe2NsaWVudF9pZDppLHR5cGU6byx0b2tlbjpzLGFsd2F5c19yYXc6YX0pfSl9LHRoaXMubG9nZ2VyPWd0KHIsdGhpcy5jb250ZXh0KX19bGV0IFZBPWNsYXNzIGV4dGVuZHMgdG17Y29uc3RydWN0b3IoZSxyLG49ITApe3N1cGVyKGUscixuKSx0aGlzLmNvcmU9ZSx0aGlzLmxvZ2dlcj1yLHRoaXMuY29udGV4dD1QQSx0aGlzLnN0b3JhZ2VQcmVmaXg9aXIsdGhpcy5zdG9yYWdlVmVyc2lvbj1CQSx0aGlzLmV2ZW50cz1uZXcgTWFwLHRoaXMuc2hvdWxkUGVyc2lzdD0hMSx0aGlzLmluaXQ9YXN5bmMoKT0+e2lmKCFkdSgpKXRyeXtjb25zdCBpPXtldmVudElkOmdoKCksdGltZXN0YW1wOkRhdGUubm93KCksZG9tYWluOnRoaXMuZ2V0QXBwRG9tYWluKCkscHJvcHM6e2V2ZW50OiJJTklUIix0eXBlOiIiLHByb3BlcnRpZXM6e2NsaWVudF9pZDphd2FpdCB0aGlzLmNvcmUuY3J5cHRvLmdldENsaWVudElkKCksdXNlcl9hZ2VudDpwZyh0aGlzLmNvcmUucmVsYXllci5wcm90b2NvbCx0aGlzLmNvcmUucmVsYXllci52ZXJzaW9uLHhjKX19fTthd2FpdCB0aGlzLnNlbmRFdmVudChbaV0pfWNhdGNoKGkpe3RoaXMubG9nZ2VyLndhcm4oaSl9fSx0aGlzLmNyZWF0ZUV2ZW50PWk9Pntjb25zdHtldmVudDpzPSJFUlJPUiIsdHlwZTpvPSIiLHByb3BlcnRpZXM6e3RvcGljOmEsdHJhY2U6Y319PWksdT1naCgpLGw9dGhpcy5jb3JlLnByb2plY3RJZHx8IiIsaD1EYXRlLm5vdygpLHA9e2V2ZW50SWQ6dSx0aW1lc3RhbXA6aCxwcm9wczp7ZXZlbnQ6cyx0eXBlOm8scHJvcGVydGllczp7dG9waWM6YSx0cmFjZTpjfX0sYnVuZGxlSWQ6bCxkb21haW46dGhpcy5nZXRBcHBEb21haW4oKSwuLi50aGlzLnNldE1ldGhvZHModSl9O3JldHVybiB0aGlzLnRlbGVtZXRyeUVuYWJsZWQmJih0aGlzLmV2ZW50cy5zZXQodSxwKSx0aGlzLnNob3VsZFBlcnNpc3Q9ITApLHB9LHRoaXMuZ2V0RXZlbnQ9aT0+e2NvbnN0e2V2ZW50SWQ6cyx0b3BpYzpvfT1pO2lmKHMpcmV0dXJuIHRoaXMuZXZlbnRzLmdldChzKTtjb25zdCBhPUFycmF5LmZyb20odGhpcy5ldmVudHMudmFsdWVzKCkpLmZpbmQoYz0+Yy5wcm9wcy5wcm9wZXJ0aWVzLnRvcGljPT09byk7aWYoYSlyZXR1cm57Li4uYSwuLi50aGlzLnNldE1ldGhvZHMoYS5ldmVudElkKX19LHRoaXMuZGVsZXRlRXZlbnQ9aT0+e2NvbnN0e2V2ZW50SWQ6c309aTt0aGlzLmV2ZW50cy5kZWxldGUocyksdGhpcy5zaG91bGRQZXJzaXN0PSEwfSx0aGlzLnNldEV2ZW50TGlzdGVuZXJzPSgpPT57dGhpcy5jb3JlLmhlYXJ0YmVhdC5vbihQbi5wdWxzZSxhc3luYygpPT57dGhpcy5zaG91bGRQZXJzaXN0JiZhd2FpdCB0aGlzLnBlcnNpc3QoKSx0aGlzLmV2ZW50cy5mb3JFYWNoKGk9PntHLmZyb21NaWxpc2Vjb25kcyhEYXRlLm5vdygpKS1HLmZyb21NaWxpc2Vjb25kcyhpLnRpbWVzdGFtcCk+VEEmJih0aGlzLmV2ZW50cy5kZWxldGUoaS5ldmVudElkKSx0aGlzLnNob3VsZFBlcnNpc3Q9ITApfSl9KX0sdGhpcy5zZXRNZXRob2RzPWk9Pih7YWRkVHJhY2U6cz0+dGhpcy5hZGRUcmFjZShpLHMpLHNldEVycm9yOnM9PnRoaXMuc2V0RXJyb3IoaSxzKX0pLHRoaXMuYWRkVHJhY2U9KGkscyk9Pntjb25zdCBvPXRoaXMuZXZlbnRzLmdldChpKTtvJiYoby5wcm9wcy5wcm9wZXJ0aWVzLnRyYWNlLnB1c2gocyksdGhpcy5ldmVudHMuc2V0KGksbyksdGhpcy5zaG91bGRQZXJzaXN0PSEwKX0sdGhpcy5zZXRFcnJvcj0oaSxzKT0+e2NvbnN0IG89dGhpcy5ldmVudHMuZ2V0KGkpO28mJihvLnByb3BzLnR5cGU9cyxvLnRpbWVzdGFtcD1EYXRlLm5vdygpLHRoaXMuZXZlbnRzLnNldChpLG8pLHRoaXMuc2hvdWxkUGVyc2lzdD0hMCl9LHRoaXMucGVyc2lzdD1hc3luYygpPT57YXdhaXQgdGhpcy5jb3JlLnN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXksQXJyYXkuZnJvbSh0aGlzLmV2ZW50cy52YWx1ZXMoKSkpLHRoaXMuc2hvdWxkUGVyc2lzdD0hMX0sdGhpcy5yZXN0b3JlPWFzeW5jKCk9Pnt0cnl7Y29uc3QgaT1hd2FpdCB0aGlzLmNvcmUuc3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleSl8fFtdO2lmKCFpLmxlbmd0aClyZXR1cm47aS5mb3JFYWNoKHM9Pnt0aGlzLmV2ZW50cy5zZXQocy5ldmVudElkLHsuLi5zLC4uLnRoaXMuc2V0TWV0aG9kcyhzLmV2ZW50SWQpfSl9KX1jYXRjaChpKXt0aGlzLmxvZ2dlci53YXJuKGkpfX0sdGhpcy5zdWJtaXQ9YXN5bmMoKT0+e2lmKCF0aGlzLnRlbGVtZXRyeUVuYWJsZWR8fHRoaXMuZXZlbnRzLnNpemU9PT0wKXJldHVybjtjb25zdCBpPVtdO2Zvcihjb25zdFtzLG9db2YgdGhpcy5ldmVudHMpby5wcm9wcy50eXBlJiZpLnB1c2gobyk7aWYoaS5sZW5ndGghPT0wKXRyeXtpZigoYXdhaXQgdGhpcy5zZW5kRXZlbnQoaSkpLm9rKWZvcihjb25zdCBzIG9mIGkpdGhpcy5ldmVudHMuZGVsZXRlKHMuZXZlbnRJZCksdGhpcy5zaG91bGRQZXJzaXN0PSEwfWNhdGNoKHMpe3RoaXMubG9nZ2VyLndhcm4ocyl9fSx0aGlzLnNlbmRFdmVudD1hc3luYyBpPT57Y29uc3Qgcz10aGlzLmdldEFwcERvbWFpbigpPyIiOiImc3A9ZGVza3RvcCI7cmV0dXJuIGF3YWl0IGZldGNoKGAke1JBfT9wcm9qZWN0SWQ9JHt0aGlzLmNvcmUucHJvamVjdElkfSZzdD1ldmVudHNfc2RrJnN2PWpzLSR7eGN9JHtzfWAse21ldGhvZDoiUE9TVCIsYm9keTpKU09OLnN0cmluZ2lmeShpKX0pfSx0aGlzLmdldEFwcERvbWFpbj0oKT0+ZGcoKS51cmwsdGhpcy5sb2dnZXI9Z3Qocix0aGlzLmNvbnRleHQpLHRoaXMudGVsZW1ldHJ5RW5hYmxlZD1uLG4/dGhpcy5yZXN0b3JlKCkudGhlbihhc3luYygpPT57YXdhaXQgdGhpcy5zdWJtaXQoKSx0aGlzLnNldEV2ZW50TGlzdGVuZXJzKCl9KTp0aGlzLnBlcnNpc3QoKX1nZXQgc3RvcmFnZUtleSgpe3JldHVybiB0aGlzLnN0b3JhZ2VQcmVmaXgrdGhpcy5zdG9yYWdlVmVyc2lvbit0aGlzLmNvcmUuY3VzdG9tU3RvcmFnZVByZWZpeCsiLy8iK3RoaXMuY29udGV4dH19LFdBPWNsYXNzIG8wIGV4dGVuZHMgS3d7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5wcm90b2NvbD10MCx0aGlzLnZlcnNpb249cjAsdGhpcy5uYW1lPXZjLHRoaXMuZXZlbnRzPW5ldyBTdC5FdmVudEVtaXR0ZXIsdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLm9uPShvLGEpPT50aGlzLmV2ZW50cy5vbihvLGEpLHRoaXMub25jZT0obyxhKT0+dGhpcy5ldmVudHMub25jZShvLGEpLHRoaXMub2ZmPShvLGEpPT50aGlzLmV2ZW50cy5vZmYobyxhKSx0aGlzLnJlbW92ZUxpc3RlbmVyPShvLGEpPT50aGlzLmV2ZW50cy5yZW1vdmVMaXN0ZW5lcihvLGEpLHRoaXMuZGlzcGF0Y2hFbnZlbG9wZT0oe3RvcGljOm8sbWVzc2FnZTphLHNlc3Npb25FeGlzdHM6Y30pPT57aWYoIW98fCFhKXJldHVybjtjb25zdCB1PXt0b3BpYzpvLG1lc3NhZ2U6YSxwdWJsaXNoZWRBdDpEYXRlLm5vdygpLHRyYW5zcG9ydFR5cGU6cGUubGlua19tb2RlfTt0aGlzLnJlbGF5ZXIub25MaW5rTWVzc2FnZUV2ZW50KHUse3Nlc3Npb25FeGlzdHM6Y30pfTtjb25zdCByPXRoaXMuZ2V0R2xvYmFsQ29yZShlPy5jdXN0b21TdG9yYWdlUHJlZml4KTtpZihyKXRyeXtyZXR1cm4gdGhpcy5jdXN0b21TdG9yYWdlUHJlZml4PXIuY3VzdG9tU3RvcmFnZVByZWZpeCx0aGlzLmxvZ2dlcj1yLmxvZ2dlcix0aGlzLmhlYXJ0YmVhdD1yLmhlYXJ0YmVhdCx0aGlzLmNyeXB0bz1yLmNyeXB0byx0aGlzLmhpc3Rvcnk9ci5oaXN0b3J5LHRoaXMuZXhwaXJlcj1yLmV4cGlyZXIsdGhpcy5zdG9yYWdlPXIuc3RvcmFnZSx0aGlzLnJlbGF5ZXI9ci5yZWxheWVyLHRoaXMucGFpcmluZz1yLnBhaXJpbmcsdGhpcy52ZXJpZnk9ci52ZXJpZnksdGhpcy5lY2hvQ2xpZW50PXIuZWNob0NsaWVudCx0aGlzLmxpbmtNb2RlU3VwcG9ydGVkQXBwcz1yLmxpbmtNb2RlU3VwcG9ydGVkQXBwcyx0aGlzLmV2ZW50Q2xpZW50PXIuZXZlbnRDbGllbnQsdGhpcy5pbml0aWFsaXplZD1yLmluaXRpYWxpemVkLHRoaXMubG9nQ2h1bmtDb250cm9sbGVyPXIubG9nQ2h1bmtDb250cm9sbGVyLHJ9Y2F0Y2gobyl7Y29uc29sZS53YXJuKCJGYWlsZWQgdG8gY29weSBnbG9iYWwgY29yZSIsbyl9dGhpcy5wcm9qZWN0SWQ9ZT8ucHJvamVjdElkLHRoaXMucmVsYXlVcmw9ZT8ucmVsYXlVcmx8fGkwLHRoaXMuY3VzdG9tU3RvcmFnZVByZWZpeD1lPy5jdXN0b21TdG9yYWdlUHJlZml4P2A6JHtlLmN1c3RvbVN0b3JhZ2VQcmVmaXh9YDoiIjtjb25zdCBuPU13KHtsZXZlbDp0eXBlb2YgZT8ubG9nZ2VyPT0ic3RyaW5nIiYmZS5sb2dnZXI/ZS5sb2dnZXI6ZUEubG9nZ2VyLG5hbWU6dmN9KSx7bG9nZ2VyOmksY2h1bmtMb2dnZXJDb250cm9sbGVyOnN9PWtmKHtvcHRzOm4sbWF4U2l6ZUluQnl0ZXM6ZT8ubWF4TG9nQmxvYlNpemVJbkJ5dGVzLGxvZ2dlck92ZXJyaWRlOmU/LmxvZ2dlcn0pO3RoaXMubG9nQ2h1bmtDb250cm9sbGVyPXMsdGhpcy5sb2dDaHVua0NvbnRyb2xsZXI/LmRvd25sb2FkTG9nc0Jsb2JJbkJyb3dzZXImJih3aW5kb3cuZG93bmxvYWRMb2dzQmxvYkluQnJvd3Nlcj1hc3luYygpPT57dGhpcy5sb2dDaHVua0NvbnRyb2xsZXI/LmRvd25sb2FkTG9nc0Jsb2JJbkJyb3dzZXImJnRoaXMubG9nQ2h1bmtDb250cm9sbGVyPy5kb3dubG9hZExvZ3NCbG9iSW5Ccm93c2VyKHtjbGllbnRJZDphd2FpdCB0aGlzLmNyeXB0by5nZXRDbGllbnRJZCgpfSl9KSx0aGlzLmxvZ2dlcj1ndChpLHRoaXMubmFtZSksdGhpcy5oZWFydGJlYXQ9bmV3IGh5LHRoaXMuY3J5cHRvPW5ldyBVQSh0aGlzLHRoaXMubG9nZ2VyLGU/LmtleWNoYWluKSx0aGlzLmhpc3Rvcnk9bmV3IGpBKHRoaXMsdGhpcy5sb2dnZXIpLHRoaXMuZXhwaXJlcj1uZXcgekEodGhpcyx0aGlzLmxvZ2dlciksdGhpcy5zdG9yYWdlPWU/LnN0b3JhZ2U/ZS5zdG9yYWdlOm5ldyB0dyh7Li4udEEsLi4uZT8uc3RvcmFnZU9wdGlvbnN9KSx0aGlzLnJlbGF5ZXI9bmV3IE1BKHtjb3JlOnRoaXMsbG9nZ2VyOnRoaXMubG9nZ2VyLHJlbGF5VXJsOnRoaXMucmVsYXlVcmwscHJvamVjdElkOnRoaXMucHJvamVjdElkfSksdGhpcy5wYWlyaW5nPW5ldyBxQSh0aGlzLHRoaXMubG9nZ2VyKSx0aGlzLnZlcmlmeT1uZXcgSEEodGhpcyx0aGlzLmxvZ2dlcix0aGlzLnN0b3JhZ2UpLHRoaXMuZWNob0NsaWVudD1uZXcgS0EodGhpcy5wcm9qZWN0SWR8fCIiLHRoaXMubG9nZ2VyKSx0aGlzLmxpbmtNb2RlU3VwcG9ydGVkQXBwcz1bXSx0aGlzLmV2ZW50Q2xpZW50PW5ldyBWQSh0aGlzLHRoaXMubG9nZ2VyLGU/LnRlbGVtZXRyeUVuYWJsZWQpLHRoaXMuc2V0R2xvYmFsQ29yZSh0aGlzKX1zdGF0aWMgYXN5bmMgaW5pdChlKXtjb25zdCByPW5ldyBvMChlKTthd2FpdCByLmluaXRpYWxpemUoKTtjb25zdCBuPWF3YWl0IHIuY3J5cHRvLmdldENsaWVudElkKCk7cmV0dXJuIGF3YWl0IHIuc3RvcmFnZS5zZXRJdGVtKGdBLG4pLHJ9Z2V0IGNvbnRleHQoKXtyZXR1cm4gY3QodGhpcy5sb2dnZXIpfWFzeW5jIHN0YXJ0KCl7dGhpcy5pbml0aWFsaXplZHx8YXdhaXQgdGhpcy5pbml0aWFsaXplKCl9YXN5bmMgZ2V0TG9nc0Jsb2IoKXtyZXR1cm4gdGhpcy5sb2dDaHVua0NvbnRyb2xsZXI/LmxvZ3NUb0Jsb2Ioe2NsaWVudElkOmF3YWl0IHRoaXMuY3J5cHRvLmdldENsaWVudElkKCl9KX1hc3luYyBhZGRMaW5rTW9kZVN1cHBvcnRlZEFwcChlKXt0aGlzLmxpbmtNb2RlU3VwcG9ydGVkQXBwcy5pbmNsdWRlcyhlKXx8KHRoaXMubGlua01vZGVTdXBwb3J0ZWRBcHBzLnB1c2goZSksYXdhaXQgdGhpcy5zdG9yYWdlLnNldEl0ZW0oSGgsdGhpcy5saW5rTW9kZVN1cHBvcnRlZEFwcHMpKX1hc3luYyBpbml0aWFsaXplKCl7dGhpcy5sb2dnZXIudHJhY2UoIkluaXRpYWxpemVkIik7dHJ5e2F3YWl0IHRoaXMuY3J5cHRvLmluaXQoKSxhd2FpdCB0aGlzLmhpc3RvcnkuaW5pdCgpLGF3YWl0IHRoaXMuZXhwaXJlci5pbml0KCksYXdhaXQgdGhpcy5yZWxheWVyLmluaXQoKSxhd2FpdCB0aGlzLmhlYXJ0YmVhdC5pbml0KCksYXdhaXQgdGhpcy5wYWlyaW5nLmluaXQoKSx0aGlzLmxpbmtNb2RlU3VwcG9ydGVkQXBwcz1hd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShIaCl8fFtdLHRoaXMuaW5pdGlhbGl6ZWQ9ITAsdGhpcy5sb2dnZXIuaW5mbygiQ29yZSBJbml0aWFsaXphdGlvbiBTdWNjZXNzIil9Y2F0Y2goZSl7dGhyb3cgdGhpcy5sb2dnZXIud2FybihlLGBDb3JlIEluaXRpYWxpemF0aW9uIEZhaWx1cmUgYXQgZXBvY2ggJHtEYXRlLm5vdygpfWApLHRoaXMubG9nZ2VyLmVycm9yKGUubWVzc2FnZSksZX19Z2V0R2xvYmFsQ29yZShlPSIiKXt0cnl7aWYodGhpcy5pc0dsb2JhbENvcmVEaXNhYmxlZCgpKXJldHVybjtjb25zdCByPWBfd2FsbGV0Q29ubmVjdENvcmVfJHtlfWAsbj1gJHtyfV9jb3VudGA7cmV0dXJuIGdsb2JhbFRoaXNbbl09KGdsb2JhbFRoaXNbbl18fDApKzEsZ2xvYmFsVGhpc1tuXT4xJiZjb25zb2xlLndhcm4oYFdhbGxldENvbm5lY3QgQ29yZSBpcyBhbHJlYWR5IGluaXRpYWxpemVkLiBUaGlzIGlzIHByb2JhYmx5IGEgbWlzdGFrZSBhbmQgY2FuIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvci4gSW5pdCgpIHdhcyBjYWxsZWQgJHtnbG9iYWxUaGlzW25dfSB0aW1lcy5gKSxnbG9iYWxUaGlzW3JdfWNhdGNoKHIpe2NvbnNvbGUud2FybigiRmFpbGVkIHRvIGdldCBnbG9iYWwgV2FsbGV0Q29ubmVjdCBjb3JlIixyKTtyZXR1cm59fXNldEdsb2JhbENvcmUoZSl7dHJ5e2lmKHRoaXMuaXNHbG9iYWxDb3JlRGlzYWJsZWQoKSlyZXR1cm47Y29uc3Qgcj1gX3dhbGxldENvbm5lY3RDb3JlXyR7ZS5vcHRzPy5jdXN0b21TdG9yYWdlUHJlZml4fHwiIn1gO2dsb2JhbFRoaXNbcl09ZX1jYXRjaChyKXtjb25zb2xlLndhcm4oIkZhaWxlZCB0byBzZXQgZ2xvYmFsIFdhbGxldENvbm5lY3QgY29yZSIscil9fWlzR2xvYmFsQ29yZURpc2FibGVkKCl7dHJ5e3JldHVybiB0eXBlb2YgX3Q8InUiJiZROC5ESVNBQkxFX0dMT0JBTF9DT1JFPT09InRydWUifWNhdGNoe3JldHVybiEwfX19O2NvbnN0IEdBPVdBLGEwPSJ3YyIsYzA9Mix1MD0iY2xpZW50IixTdT1gJHthMH1AJHtjMH06JHt1MH06YCxSYT17bmFtZTp1MCxsb2dnZXI6ImVycm9yIn0sS2g9IldBTExFVENPTk5FQ1RfREVFUExJTktfQ0hPSUNFIixZQT0icHJvcG9zYWwiLFZoPSJQcm9wb3NhbCBleHBpcmVkIixaQT0ic2Vzc2lvbiIsS249Ry5TRVZFTl9EQVlTLFhBPSJlbmdpbmUiLEZlPXt3Y19zZXNzaW9uUHJvcG9zZTp7cmVxOnt0dGw6Ry5GSVZFX01JTlVURVMscHJvbXB0OiEwLHRhZzoxMTAwfSxyZXM6e3R0bDpHLkZJVkVfTUlOVVRFUyxwcm9tcHQ6ITEsdGFnOjExMDF9LHJlamVjdDp7dHRsOkcuRklWRV9NSU5VVEVTLHByb21wdDohMSx0YWc6MTEyMH0sYXV0b1JlamVjdDp7dHRsOkcuRklWRV9NSU5VVEVTLHByb21wdDohMSx0YWc6MTEyMX19LHdjX3Nlc3Npb25TZXR0bGU6e3JlcTp7dHRsOkcuRklWRV9NSU5VVEVTLHByb21wdDohMSx0YWc6MTEwMn0scmVzOnt0dGw6Ry5GSVZFX01JTlVURVMscHJvbXB0OiExLHRhZzoxMTAzfX0sd2Nfc2Vzc2lvblVwZGF0ZTp7cmVxOnt0dGw6Ry5PTkVfREFZLHByb21wdDohMSx0YWc6MTEwNH0scmVzOnt0dGw6Ry5PTkVfREFZLHByb21wdDohMSx0YWc6MTEwNX19LHdjX3Nlc3Npb25FeHRlbmQ6e3JlcTp7dHRsOkcuT05FX0RBWSxwcm9tcHQ6ITEsdGFnOjExMDZ9LHJlczp7dHRsOkcuT05FX0RBWSxwcm9tcHQ6ITEsdGFnOjExMDd9fSx3Y19zZXNzaW9uUmVxdWVzdDp7cmVxOnt0dGw6Ry5GSVZFX01JTlVURVMqMyxwcm9tcHQ6ITAsdGFnOjExMDh9LHJlczp7dHRsOkcuRklWRV9NSU5VVEVTKjMscHJvbXB0OiExLHRhZzoxMTA5fX0sd2Nfc2Vzc2lvbkV2ZW50OntyZXE6e3R0bDpHLkZJVkVfTUlOVVRFUyxwcm9tcHQ6ITAsdGFnOjExMTB9LHJlczp7dHRsOkcuRklWRV9NSU5VVEVTLHByb21wdDohMSx0YWc6MTExMX19LHdjX3Nlc3Npb25EZWxldGU6e3JlcTp7dHRsOkcuT05FX0RBWSxwcm9tcHQ6ITEsdGFnOjExMTJ9LHJlczp7dHRsOkcuT05FX0RBWSxwcm9tcHQ6ITEsdGFnOjExMTN9fSx3Y19zZXNzaW9uUGluZzp7cmVxOnt0dGw6Ry5PTkVfREFZLHByb21wdDohMSx0YWc6MTExNH0scmVzOnt0dGw6Ry5PTkVfREFZLHByb21wdDohMSx0YWc6MTExNX19LHdjX3Nlc3Npb25BdXRoZW50aWNhdGU6e3JlcTp7dHRsOkcuT05FX0hPVVIscHJvbXB0OiEwLHRhZzoxMTE2fSxyZXM6e3R0bDpHLk9ORV9IT1VSLHByb21wdDohMSx0YWc6MTExN30scmVqZWN0Ont0dGw6Ry5GSVZFX01JTlVURVMscHJvbXB0OiExLHRhZzoxMTE4fSxhdXRvUmVqZWN0Ont0dGw6Ry5GSVZFX01JTlVURVMscHJvbXB0OiExLHRhZzoxMTE5fX19LENhPXttaW46Ry5GSVZFX01JTlVURVMsbWF4OkcuU0VWRU5fREFZU30sanQ9e2lkbGU6IklETEUiLGFjdGl2ZToiQUNUSVZFIn0sSkE9e2V0aF9zZW5kVHJhbnNhY3Rpb246e2tleToiIn0sZXRoX3NlbmRSYXdUcmFuc2FjdGlvbjp7a2V5OiIifSx3YWxsZXRfc2VuZENhbGxzOntrZXk6IiJ9LHNvbGFuYV9zaWduVHJhbnNhY3Rpb246e2tleToic2lnbmF0dXJlIn0sc29sYW5hX3NpZ25BbGxUcmFuc2FjdGlvbnM6e2tleToidHJhbnNhY3Rpb25zIn0sc29sYW5hX3NpZ25BbmRTZW5kVHJhbnNhY3Rpb246e2tleToic2lnbmF0dXJlIn0sc3VpX3NpZ25BbmRFeGVjdXRlVHJhbnNhY3Rpb246e2tleToiZGlnZXN0In0sc3VpX3NpZ25UcmFuc2FjdGlvbjp7a2V5OiIifSxoZWRlcmFfc2lnbkFuZEV4ZWN1dGVUcmFuc2FjdGlvbjp7a2V5OiJ0cmFuc2FjdGlvbklkIn0saGVkZXJhX2V4ZWN1dGVUcmFuc2FjdGlvbjp7a2V5OiJ0cmFuc2FjdGlvbklkIn0sbmVhcl9zaWduVHJhbnNhY3Rpb246e2tleToiIn0sbmVhcl9zaWduVHJhbnNhY3Rpb25zOntrZXk6IiJ9LHRyb25fc2lnblRyYW5zYWN0aW9uOntrZXk6InR4SUQifSx4cnBsX3NpZ25UcmFuc2FjdGlvbjp7a2V5OiIifSx4cnBsX3NpZ25UcmFuc2FjdGlvbkZvcjp7a2V5OiIifSxhbGdvX3NpZ25UeG46e2tleToiIn0sc2VuZFRyYW5zZmVyOntrZXk6InR4aWQifSxzdGFja3Nfc3R4VHJhbnNmZXI6e2tleToidHhJZCJ9LHBvbGthZG90X3NpZ25UcmFuc2FjdGlvbjp7a2V5OiIifSxjb3Ntb3Nfc2lnbkRpcmVjdDp7a2V5OiIifSxjYW50b25fcHJlcGFyZVNpZ25FeGVjdXRlOntrZXk6IiJ9fSxRQT0icmVxdWVzdCIsZUQ9WyJ3Y19zZXNzaW9uUHJvcG9zZSIsIndjX3Nlc3Npb25SZXF1ZXN0Iiwid2NfYXV0aFJlcXVlc3QiLCJ3Y19zZXNzaW9uQXV0aGVudGljYXRlIl0sdEQ9IndjIixyRD0iYXV0aCIsbkQ9ImF1dGhLZXlzIixpRD0icGFpcmluZ1RvcGljcyIsc0Q9InJlcXVlc3RzIixrbz1gJHt0RH1AJHsxLjV9OiR7ckR9OmAsa3I9YCR7a299OlBVQl9LRVlgO2NsYXNzIG9EIGV4dGVuZHMgbm17Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5uYW1lPVhBLHRoaXMuZXZlbnRzPW5ldyBCYyx0aGlzLmluaXRpYWxpemVkPSExLHRoaXMucmVxdWVzdFF1ZXVlPXtzdGF0ZTpqdC5pZGxlLHF1ZXVlOltdfSx0aGlzLnNlc3Npb25SZXF1ZXN0UXVldWU9e3N0YXRlOmp0LmlkbGUscXVldWU6W119LHRoaXMuZW1pdHRlZFNlc3Npb25SZXF1ZXN0cz1uZXcgRjMoe2xpbWl0OjUwMH0pLHRoaXMucmVxdWVzdFF1ZXVlRGVsYXk9Ry5PTkVfU0VDT05ELHRoaXMuZXhwZWN0ZWRQYWlyaW5nTWV0aG9kTWFwPW5ldyBNYXAsdGhpcy5yZWNlbnRseURlbGV0ZWRNYXA9bmV3IE1hcCx0aGlzLnJlY2VudGx5RGVsZXRlZExpbWl0PTIwMCx0aGlzLnJlbGF5TWVzc2FnZUNhY2hlPVtdLHRoaXMucGVuZGluZ1Nlc3Npb25zPW5ldyBNYXAsdGhpcy5pbml0PWFzeW5jKCk9Pnt0aGlzLmluaXRpYWxpemVkfHwoYXdhaXQgdGhpcy5jbGVhbnVwKCksdGhpcy5yZWdpc3RlclJlbGF5ZXJFdmVudHMoKSx0aGlzLnJlZ2lzdGVyRXhwaXJlckV2ZW50cygpLHRoaXMucmVnaXN0ZXJQYWlyaW5nRXZlbnRzKCksdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbkNsZWFudXAoKSxhd2FpdCB0aGlzLnJlZ2lzdGVyTGlua01vZGVMaXN0ZW5lcnMoKSx0aGlzLmNsaWVudC5jb3JlLnBhaXJpbmcucmVnaXN0ZXIoe21ldGhvZHM6T2JqZWN0LmtleXMoRmUpfSksdGhpcy5pbml0aWFsaXplZD0hMCxzZXRUaW1lb3V0KGFzeW5jKCk9Pnthd2FpdCB0aGlzLnByb2Nlc3NQZW5kaW5nTWVzc2FnZUV2ZW50cygpLHRoaXMuc2Vzc2lvblJlcXVlc3RRdWV1ZS5xdWV1ZT10aGlzLmdldFBlbmRpbmdTZXNzaW9uUmVxdWVzdHMoKSx0aGlzLnByb2Nlc3NTZXNzaW9uUmVxdWVzdFF1ZXVlKCl9LEcudG9NaWxpc2Vjb25kcyh0aGlzLnJlcXVlc3RRdWV1ZURlbGF5KSkpfSx0aGlzLmNvbm5lY3Q9YXN5bmMgcj0+e3RoaXMuaXNJbml0aWFsaXplZCgpLGF3YWl0IHRoaXMuY29uZmlybU9ubGluZVN0YXRlT3JUaHJvdygpO2NvbnN0IG49ey4uLnIscmVxdWlyZWROYW1lc3BhY2VzOnIucmVxdWlyZWROYW1lc3BhY2VzfHx7fSxvcHRpb25hbE5hbWVzcGFjZXM6ci5vcHRpb25hbE5hbWVzcGFjZXN8fHt9fTthd2FpdCB0aGlzLmlzVmFsaWRDb25uZWN0KG4pLG4ub3B0aW9uYWxOYW1lc3BhY2VzPURTKG4ucmVxdWlyZWROYW1lc3BhY2VzLG4ub3B0aW9uYWxOYW1lc3BhY2VzKSxuLnJlcXVpcmVkTmFtZXNwYWNlcz17fTtjb25zdHtwYWlyaW5nVG9waWM6aSxyZXF1aXJlZE5hbWVzcGFjZXM6cyxvcHRpb25hbE5hbWVzcGFjZXM6byxzZXNzaW9uUHJvcGVydGllczphLHNjb3BlZFByb3BlcnRpZXM6YyxyZWxheXM6dSxhdXRoZW50aWNhdGlvbjpsLHdhbGxldFBheTpofT1uLHA9bD8uWzBdPy50dGx8fEZlLndjX3Nlc3Npb25Qcm9wb3NlLnJlcS50dGx8fEcuRklWRV9NSU5VVEVTO3RoaXMudmFsaWRhdGVSZXF1ZXN0RXhwaXJ5KHApO2xldCBnPWksdyxiPSExO3RyeXtpZihnKXtjb25zdCBNPXRoaXMuY2xpZW50LmNvcmUucGFpcmluZy5wYWlyaW5ncy5nZXQoZyk7dGhpcy5jbGllbnQubG9nZ2VyLndhcm4oImNvbm5lY3QoKSB3aXRoIGV4aXN0aW5nIHBhaXJpbmcgdG9waWMgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuIiksYj1NLmFjdGl2ZX19Y2F0Y2goTSl7dGhyb3cgdGhpcy5jbGllbnQubG9nZ2VyLmVycm9yKGBjb25uZWN0KCkgLT4gcGFpcmluZy5nZXQoJHtnfSkgZmFpbGVkYCksTX1pZighZ3x8IWIpe2NvbnN0e3RvcGljOk0sdXJpOlR9PWF3YWl0IHRoaXMuY2xpZW50LmNvcmUucGFpcmluZy5jcmVhdGUoe2ludGVybmFsOntza2lwU3Vic2NyaWJlOiEwfX0pO2c9TSx3PVR9aWYoIWcpe2NvbnN0e21lc3NhZ2U6TX09WSgiTk9fTUFUQ0hJTkdfS0VZIixgY29ubmVjdCgpIHBhaXJpbmcgdG9waWM6ICR7Z31gKTt0aHJvdyBuZXcgRXJyb3IoTSl9Y29uc3Qgdj1hd2FpdCB0aGlzLmNsaWVudC5jb3JlLmNyeXB0by5nZW5lcmF0ZUtleVBhaXIoKSxPPVNlKHApLEY9e3JlcXVpcmVkTmFtZXNwYWNlczpzLG9wdGlvbmFsTmFtZXNwYWNlczpvLHJlbGF5czp1Pz9be3Byb3RvY29sOm4wfV0scHJvcG9zZXI6e3B1YmxpY0tleTp2LG1ldGFkYXRhOnRoaXMuY2xpZW50Lm1ldGFkYXRhfSxleHBpcnlUaW1lc3RhbXA6TyxwYWlyaW5nVG9waWM6ZywuLi5hJiZ7c2Vzc2lvblByb3BlcnRpZXM6YX0sLi4uYyYme3Njb3BlZFByb3BlcnRpZXM6Y30saWQ6VnQoKSwuLi4obHx8aCkmJntyZXF1ZXN0czp7YXV0aGVudGljYXRpb246bD8ubWFwKE09Pntjb25zdHtkb21haW46VCxjaGFpbnM6eixub25jZTpVLHVyaTpOLGV4cDpELG5iZjpSLHR5cGU6eSxzdGF0ZW1lbnQ6bSxyZXF1ZXN0SWQ6SSxyZXNvdXJjZXM6QSxzaWduYXR1cmVUeXBlczpTfT1NO3JldHVybntkb21haW46VCxjaGFpbnM6eixub25jZTpVLHR5cGU6eT8/ImNhaXAxMjIiLGF1ZDpOLHZlcnNpb246IjEiLGlhdDpuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksZXhwOkQsbmJmOlIsc3RhdGVtZW50Om0scmVxdWVzdElkOkkscmVzb3VyY2VzOkEsc2lnbmF0dXJlVHlwZXM6U319KSx3YWxsZXRQYXk6aH19fSxfPWxlKCJzZXNzaW9uX2Nvbm5lY3QiLEYuaWQpLHtyZWplY3Q6UCxyZXNvbHZlOkMsZG9uZTpqfT1mbihwLFZoKSxxPSh7aWQ6TX0pPT57aWYoTT09PUYuaWQpe3RoaXMuY2xpZW50LmV2ZW50cy5vZmYoInByb3Bvc2FsX2V4cGlyZSIscSk7Y29uc3QgVD10aGlzLnBlbmRpbmdTZXNzaW9ucy5nZXQoRi5pZCk7aWYoVCl7Y29uc3R7c2Vzc2lvblRvcGljOnoscHVibGljS2V5OlV9PVQ7UHJvbWlzZS5hbGwoW3RoaXMuY2xpZW50LmNvcmUucmVsYXllci51bnN1YnNjcmliZSh6KSx0aGlzLmNsaWVudC5jb3JlLmNyeXB0by5rZXljaGFpbi5oYXMoeik/dGhpcy5jbGllbnQuY29yZS5jcnlwdG8uZGVsZXRlU3ltS2V5KHopOlByb21pc2UucmVzb2x2ZSgpLHRoaXMuY2xpZW50LmNvcmUuY3J5cHRvLmtleWNoYWluLmhhcyhVKT90aGlzLmNsaWVudC5jb3JlLmNyeXB0by5kZWxldGVLZXlQYWlyKFUpOlByb21pc2UucmVzb2x2ZSgpXSkuY2F0Y2goTj0+dGhpcy5jbGllbnQubG9nZ2VyLndhcm4oTikpfXRoaXMucGVuZGluZ1Nlc3Npb25zLmRlbGV0ZShGLmlkKSx0aGlzLmV2ZW50cy5lbWl0KF8se2Vycm9yOnttZXNzYWdlOlZoLGNvZGU6MH19KX19O3JldHVybiB0aGlzLmNsaWVudC5ldmVudHMub24oInByb3Bvc2FsX2V4cGlyZSIscSksdGhpcy5ldmVudHMub25jZShfLCh7ZXJyb3I6TSxzZXNzaW9uOlR9KT0+e3RoaXMuY2xpZW50LmV2ZW50cy5vZmYoInByb3Bvc2FsX2V4cGlyZSIscSksTT9QKE0pOlQmJkMoVCl9KSxhd2FpdCB0aGlzLnNldFByb3Bvc2FsKEYuaWQsRiksYXdhaXQgdGhpcy5zZW5kUHJvcG9zZVNlc3Npb24oe3Byb3Bvc2FsOkYscHVibGlzaE9wdHM6e2ludGVybmFsOnt0aHJvd09uRmFpbGVkUHVibGlzaDohMH0sdHZmOntjb3JyZWxhdGlvbklkOkYuaWR9fX0pLmNhdGNoKE09Pnt0aHJvdyB0aGlzLmRlbGV0ZVByb3Bvc2FsKEYuaWQpLE19KSx7dXJpOncsYXBwcm92YWw6an19LHRoaXMucGFpcj1hc3luYyByPT57dGhpcy5pc0luaXRpYWxpemVkKCksYXdhaXQgdGhpcy5jb25maXJtT25saW5lU3RhdGVPclRocm93KCk7dHJ5e3JldHVybiBhd2FpdCB0aGlzLmNsaWVudC5jb3JlLnBhaXJpbmcucGFpcihyKX1jYXRjaChuKXt0aHJvdyB0aGlzLmNsaWVudC5sb2dnZXIuZXJyb3IoInBhaXIoKSBmYWlsZWQiKSxufX0sdGhpcy5hcHByb3ZlPWFzeW5jIHI9Pntjb25zdCBuPXRoaXMuY2xpZW50LmNvcmUuZXZlbnRDbGllbnQuY3JlYXRlRXZlbnQoe3Byb3BlcnRpZXM6e3RvcGljOnI/LmlkPy50b1N0cmluZygpLHRyYWNlOlskdC5zZXNzaW9uX2FwcHJvdmVfc3RhcnRlZF19fSk7dHJ5e3RoaXMuaXNJbml0aWFsaXplZCgpLGF3YWl0IHRoaXMuY29uZmlybU9ubGluZVN0YXRlT3JUaHJvdygpfWNhdGNoKHEpe3Rocm93IG4uc2V0RXJyb3IoY24ubm9faW50ZXJuZXRfY29ubmVjdGlvbikscX10cnl7YXdhaXQgdGhpcy5pc1ZhbGlkUHJvcG9zYWxJZChyPy5pZCl9Y2F0Y2gocSl7dGhyb3cgdGhpcy5jbGllbnQubG9nZ2VyLmVycm9yKGBhcHByb3ZlKCkgLT4gcHJvcG9zYWwuZ2V0KCR7cj8uaWR9KSBmYWlsZWRgKSxuLnNldEVycm9yKGNuLnByb3Bvc2FsX25vdF9mb3VuZCkscX10cnl7YXdhaXQgdGhpcy5pc1ZhbGlkQXBwcm92ZShyKX1jYXRjaChxKXt0aHJvdyB0aGlzLmNsaWVudC5sb2dnZXIuZXJyb3IoImFwcHJvdmUoKSAtPiBpc1ZhbGlkQXBwcm92ZSgpIGZhaWxlZCIpLG4uc2V0RXJyb3IoY24uc2Vzc2lvbl9hcHByb3ZlX25hbWVzcGFjZV92YWxpZGF0aW9uX2ZhaWx1cmUpLHF9Y29uc3R7aWQ6aSxyZWxheVByb3RvY29sOnMsbmFtZXNwYWNlczpvLHNlc3Npb25Qcm9wZXJ0aWVzOmEsc2NvcGVkUHJvcGVydGllczpjLHNlc3Npb25Db25maWc6dSxwcm9wb3NhbFJlcXVlc3RzUmVzcG9uc2VzOmx9PXIsaD10aGlzLmNsaWVudC5wcm9wb3NhbC5nZXQoaSk7dGhpcy5jbGllbnQuY29yZS5ldmVudENsaWVudC5kZWxldGVFdmVudCh7ZXZlbnRJZDpuLmV2ZW50SWR9KTtjb25zdHtwYWlyaW5nVG9waWM6cCxwcm9wb3NlcjpnLHJlcXVpcmVkTmFtZXNwYWNlczp3LG9wdGlvbmFsTmFtZXNwYWNlczpifT1oO2xldCB2PXRoaXMuY2xpZW50LmNvcmUuZXZlbnRDbGllbnQ/LmdldEV2ZW50KHt0b3BpYzpwfSk7dnx8KHY9dGhpcy5jbGllbnQuY29yZS5ldmVudENsaWVudD8uY3JlYXRlRXZlbnQoe3R5cGU6JHQuc2Vzc2lvbl9hcHByb3ZlX3N0YXJ0ZWQscHJvcGVydGllczp7dG9waWM6cCx0cmFjZTpbJHQuc2Vzc2lvbl9hcHByb3ZlX3N0YXJ0ZWQsJHQuc2Vzc2lvbl9uYW1lc3BhY2VzX3ZhbGlkYXRpb25fc3VjY2Vzc119fSkpO2NvbnN0IE89YXdhaXQgdGhpcy5jbGllbnQuY29yZS5jcnlwdG8uZ2VuZXJhdGVLZXlQYWlyKCksRj1nLnB1YmxpY0tleSxfPWF3YWl0IHRoaXMuY2xpZW50LmNvcmUuY3J5cHRvLmdlbmVyYXRlU2hhcmVkS2V5KE8sRiksUD17cmVsYXk6e3Byb3RvY29sOnM/PyJpcm4ifSxuYW1lc3BhY2VzOm8sY29udHJvbGxlcjp7cHVibGljS2V5Ok8sbWV0YWRhdGE6dGhpcy5jbGllbnQubWV0YWRhdGF9LGV4cGlyeTpTZShLbiksLi4uYSYme3Nlc3Npb25Qcm9wZXJ0aWVzOmF9LC4uLmMmJntzY29wZWRQcm9wZXJ0aWVzOmN9LC4uLnUmJntzZXNzaW9uQ29uZmlnOnV9LHByb3Bvc2FsUmVxdWVzdHNSZXNwb25zZXM6bH0sQz1wZS5yZWxheTt2LmFkZFRyYWNlKCR0LnN1YnNjcmliaW5nX3Nlc3Npb25fdG9waWMpO3RyeXthd2FpdCB0aGlzLmNsaWVudC5jb3JlLnJlbGF5ZXIuc3Vic2NyaWJlKF8se3RyYW5zcG9ydFR5cGU6QyxpbnRlcm5hbDp7c2tpcFN1YnNjcmliZTohMH19KX1jYXRjaChxKXt0aHJvdyB2LnNldEVycm9yKGNuLnN1YnNjcmliZV9zZXNzaW9uX3RvcGljX2ZhaWx1cmUpLHF9di5hZGRUcmFjZSgkdC5zdWJzY3JpYmVfc2Vzc2lvbl90b3BpY19zdWNjZXNzKTtjb25zdCBqPXsuLi5QLHRvcGljOl8scmVxdWlyZWROYW1lc3BhY2VzOncsb3B0aW9uYWxOYW1lc3BhY2VzOmIscGFpcmluZ1RvcGljOnAsYWNrbm93bGVkZ2VkOiExLHNlbGY6UC5jb250cm9sbGVyLHBlZXI6e3B1YmxpY0tleTpnLnB1YmxpY0tleSxtZXRhZGF0YTpnLm1ldGFkYXRhfSxjb250cm9sbGVyOk8sdHJhbnNwb3J0VHlwZTpwZS5yZWxheSxhdXRoZW50aWNhdGlvbjpsPy5hdXRoZW50aWNhdGlvbix3YWxsZXRQYXlSZXN1bHQ6bD8ud2FsbGV0UGF5fTthd2FpdCB0aGlzLmNsaWVudC5zZXNzaW9uLnNldChfLGopLHYuYWRkVHJhY2UoJHQuc3RvcmVfc2Vzc2lvbik7dHJ5e2F3YWl0IHRoaXMuc2VuZEFwcHJvdmVTZXNzaW9uKHtzZXNzaW9uVG9waWM6Xyxwcm9wb3NhbDpoLHBhaXJpbmdQcm9wb3NhbFJlc3BvbnNlOntyZWxheTp7cHJvdG9jb2w6cz8/ImlybiJ9LHJlc3BvbmRlclB1YmxpY0tleTpPfSxzZXNzaW9uU2V0dGxlUmVxdWVzdDpQLHB1Ymxpc2hPcHRzOntpbnRlcm5hbDp7dGhyb3dPbkZhaWxlZFB1Ymxpc2g6ITB9LHR2Zjp7Y29ycmVsYXRpb25JZDppLC4uLnRoaXMuZ2V0VFZGQXBwcm92ZVBhcmFtcyhqKX19fSksdi5hZGRUcmFjZSgkdC5zZXNzaW9uX2FwcHJvdmVfcHVibGlzaF9zdWNjZXNzKX1jYXRjaChxKXt0aHJvdyB0aGlzLmNsaWVudC5sb2dnZXIuZXJyb3IocSksdGhpcy5jbGllbnQuc2Vzc2lvbi5kZWxldGUoXyx5ZSgiVVNFUl9ESVNDT05ORUNURUQiKSksYXdhaXQgdGhpcy5jbGllbnQuY29yZS5yZWxheWVyLnVuc3Vic2NyaWJlKF8pLHF9cmV0dXJuIHRoaXMuY2xpZW50LmNvcmUuZXZlbnRDbGllbnQuZGVsZXRlRXZlbnQoe2V2ZW50SWQ6di5ldmVudElkfSksYXdhaXQgdGhpcy5jbGllbnQuY29yZS5wYWlyaW5nLnVwZGF0ZU1ldGFkYXRhKHt0b3BpYzpwLG1ldGFkYXRhOmcubWV0YWRhdGF9KSxhd2FpdCB0aGlzLmRlbGV0ZVByb3Bvc2FsKGkpLGF3YWl0IHRoaXMuY2xpZW50LmNvcmUucGFpcmluZy5hY3RpdmF0ZSh7dG9waWM6cH0pLGF3YWl0IHRoaXMuc2V0RXhwaXJ5KF8sU2UoS24pKSx7dG9waWM6XyxhY2tub3dsZWRnZWQ6KCk9PlByb21pc2UucmVzb2x2ZSh0aGlzLmNsaWVudC5zZXNzaW9uLmdldChfKSl9fSx0aGlzLnJlamVjdD1hc3luYyByPT57dGhpcy5pc0luaXRpYWxpemVkKCksYXdhaXQgdGhpcy5jb25maXJtT25saW5lU3RhdGVPclRocm93KCk7dHJ5e2F3YWl0IHRoaXMuaXNWYWxpZFJlamVjdChyKX1jYXRjaChvKXt0aHJvdyB0aGlzLmNsaWVudC5sb2dnZXIuZXJyb3IoInJlamVjdCgpIC0+IGlzVmFsaWRSZWplY3QoKSBmYWlsZWQiKSxvfWNvbnN0e2lkOm4scmVhc29uOml9PXI7bGV0IHM7dHJ5e3M9dGhpcy5jbGllbnQucHJvcG9zYWwuZ2V0KG4pLnBhaXJpbmdUb3BpY31jYXRjaChvKXt0aHJvdyB0aGlzLmNsaWVudC5sb2dnZXIuZXJyb3IoYHJlamVjdCgpIC0+IHByb3Bvc2FsLmdldCgke259KSBmYWlsZWRgKSxvfXMmJmF3YWl0IHRoaXMuc2VuZEVycm9yKHtpZDpuLHRvcGljOnMsZXJyb3I6aSxycGNPcHRzOkZlLndjX3Nlc3Npb25Qcm9wb3NlLnJlamVjdH0pLGF3YWl0IHRoaXMuZGVsZXRlUHJvcG9zYWwobil9LHRoaXMudXBkYXRlPWFzeW5jIHI9Pnt0aGlzLmlzSW5pdGlhbGl6ZWQoKSxhd2FpdCB0aGlzLmNvbmZpcm1PbmxpbmVTdGF0ZU9yVGhyb3coKTt0cnl7YXdhaXQgdGhpcy5pc1ZhbGlkVXBkYXRlKHIpfWNhdGNoKHApe3Rocm93IHRoaXMuY2xpZW50LmxvZ2dlci5lcnJvcigidXBkYXRlKCkgLT4gaXNWYWxpZFVwZGF0ZSgpIGZhaWxlZCIpLHB9Y29uc3R7dG9waWM6bixuYW1lc3BhY2VzOml9PXIscz10aGlzLmNsaWVudC5zZXNzaW9uLmdldChuKTtpZihzLnNlbGYucHVibGljS2V5IT09cy5jb250cm9sbGVyKXtjb25zdHttZXNzYWdlOnB9PXllKCJVTkFVVEhPUklaRURfVVBEQVRFX1JFUVVFU1QiKTt0aHJvdyBuZXcgRXJyb3IocCl9Y29uc3R7ZG9uZTpvLHJlc29sdmU6YSxyZWplY3Q6Y309Zm4oRy5GSVZFX01JTlVURVMsIlNlc3Npb24gdXBkYXRlIHJlcXVlc3QgZXhwaXJlZCB3aXRob3V0IHJlY2VpdmluZyBhbnkgYWNrbm93bGVkZ2VtZW50IiksdT1WdCgpLGw9V3IoKS50b1N0cmluZygpLGg9dGhpcy5jbGllbnQuc2Vzc2lvbi5nZXQobikubmFtZXNwYWNlcztyZXR1cm4gdGhpcy5ldmVudHMub25jZShsZSgic2Vzc2lvbl91cGRhdGUiLHUpLCh7ZXJyb3I6cH0pPT57cD9jKHApOmEoKX0pLGF3YWl0IHRoaXMuY2xpZW50LnNlc3Npb24udXBkYXRlKG4se25hbWVzcGFjZXM6aX0pLGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe3RvcGljOm4sbWV0aG9kOiJ3Y19zZXNzaW9uVXBkYXRlIixwYXJhbXM6e25hbWVzcGFjZXM6aX0sdGhyb3dPbkZhaWxlZFB1Ymxpc2g6ITAsY2xpZW50UnBjSWQ6dSxyZWxheVJwY0lkOmx9KS5jYXRjaChwPT57dGhpcy5jbGllbnQubG9nZ2VyLmVycm9yKHApLHRoaXMuY2xpZW50LnNlc3Npb24udXBkYXRlKG4se25hbWVzcGFjZXM6aH0pLGMocCl9KSx7YWNrbm93bGVkZ2VkOm99fSx0aGlzLmV4dGVuZD1hc3luYyByPT57dGhpcy5pc0luaXRpYWxpemVkKCksYXdhaXQgdGhpcy5jb25maXJtT25saW5lU3RhdGVPclRocm93KCk7dHJ5e2F3YWl0IHRoaXMuaXNWYWxpZEV4dGVuZChyKX1jYXRjaChjKXt0aHJvdyB0aGlzLmNsaWVudC5sb2dnZXIuZXJyb3IoImV4dGVuZCgpIC0+IGlzVmFsaWRFeHRlbmQoKSBmYWlsZWQiKSxjfWNvbnN0e3RvcGljOm59PXIsaT1WdCgpLHtkb25lOnMscmVzb2x2ZTpvLHJlamVjdDphfT1mbihHLkZJVkVfTUlOVVRFUywiU2Vzc2lvbiBleHRlbmQgcmVxdWVzdCBleHBpcmVkIHdpdGhvdXQgcmVjZWl2aW5nIGFueSBhY2tub3dsZWRnZW1lbnQiKTtyZXR1cm4gdGhpcy5ldmVudHMub25jZShsZSgic2Vzc2lvbl9leHRlbmQiLGkpLCh7ZXJyb3I6Y30pPT57Yz9hKGMpOm8oKX0pLGF3YWl0IHRoaXMuc2V0RXhwaXJ5KG4sU2UoS24pKSx0aGlzLnNlbmRSZXF1ZXN0KHt0b3BpYzpuLG1ldGhvZDoid2Nfc2Vzc2lvbkV4dGVuZCIscGFyYW1zOnt9LGNsaWVudFJwY0lkOmksdGhyb3dPbkZhaWxlZFB1Ymxpc2g6ITB9KS5jYXRjaChjPT57YShjKX0pLHthY2tub3dsZWRnZWQ6c319LHRoaXMucmVxdWVzdD1hc3luYyByPT57dGhpcy5pc0luaXRpYWxpemVkKCk7dHJ5e2F3YWl0IHRoaXMuaXNWYWxpZFJlcXVlc3Qocil9Y2F0Y2godil7dGhyb3cgdGhpcy5jbGllbnQubG9nZ2VyLmVycm9yKCJyZXF1ZXN0KCkgLT4gaXNWYWxpZFJlcXVlc3QoKSBmYWlsZWQiKSx2fWNvbnN0e2NoYWluSWQ6bixyZXF1ZXN0OmksdG9waWM6cyxleHBpcnk6bz1GZS53Y19zZXNzaW9uUmVxdWVzdC5yZXEudHRsfT1yLGE9dGhpcy5jbGllbnQuc2Vzc2lvbi5nZXQocyk7YT8udHJhbnNwb3J0VHlwZT09PXBlLnJlbGF5JiZhd2FpdCB0aGlzLmNvbmZpcm1PbmxpbmVTdGF0ZU9yVGhyb3coKTtjb25zdCBjPVZ0KCksdT1XcigpLnRvU3RyaW5nKCkse2RvbmU6bCxyZXNvbHZlOmgscmVqZWN0OnB9PWZuKG8sIlJlcXVlc3QgZXhwaXJlZC4gUGxlYXNlIHRyeSBhZ2Fpbi4iKTt0aGlzLmV2ZW50cy5vbmNlKGxlKCJzZXNzaW9uX3JlcXVlc3QiLGMpLCh7ZXJyb3I6dixyZXN1bHQ6T30pPT57dj9wKHYpOmgoTyl9KTtjb25zdCBnPSJ3Y19zZXNzaW9uUmVxdWVzdCIsdz10aGlzLmdldEFwcExpbmtJZkVuYWJsZWQoYS5wZWVyLm1ldGFkYXRhLGEudHJhbnNwb3J0VHlwZSk7aWYodylyZXR1cm4gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7Y2xpZW50UnBjSWQ6YyxyZWxheVJwY0lkOnUsdG9waWM6cyxtZXRob2Q6ZyxwYXJhbXM6e3JlcXVlc3Q6ey4uLmksZXhwaXJ5VGltZXN0YW1wOlNlKG8pfSxjaGFpbklkOm59LGV4cGlyeTpvLHRocm93T25GYWlsZWRQdWJsaXNoOiEwLGFwcExpbms6d30pLmNhdGNoKHY9PnAodikpLHRoaXMuY2xpZW50LmV2ZW50cy5lbWl0KCJzZXNzaW9uX3JlcXVlc3Rfc2VudCIse3RvcGljOnMscmVxdWVzdDppLGNoYWluSWQ6bixpZDpjfSksYXdhaXQgbCgpO2NvbnN0IGI9e3JlcXVlc3Q6ey4uLmksZXhwaXJ5VGltZXN0YW1wOlNlKG8pfSxjaGFpbklkOm59O3JldHVybiBhd2FpdCBQcm9taXNlLmFsbChbbmV3IFByb21pc2UoYXN5bmMgdj0+e2F3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe2NsaWVudFJwY0lkOmMscmVsYXlScGNJZDp1LHRvcGljOnMsbWV0aG9kOmcscGFyYW1zOmIsZXhwaXJ5Om8sdGhyb3dPbkZhaWxlZFB1Ymxpc2g6ITAsdHZmOnRoaXMuZ2V0VFZGUGFyYW1zKGMsYil9KS5jYXRjaChPPT5wKE8pKSx0aGlzLmNsaWVudC5ldmVudHMuZW1pdCgic2Vzc2lvbl9yZXF1ZXN0X3NlbnQiLHt0b3BpYzpzLHJlcXVlc3Q6aSxjaGFpbklkOm4saWQ6Y30pLHYoKX0pLG5ldyBQcm9taXNlKGFzeW5jIHY9PntpZighYS5zZXNzaW9uQ29uZmlnPy5kaXNhYmxlRGVlcExpbmspe2NvbnN0IE89YXdhaXQgUjModGhpcy5jbGllbnQuY29yZS5zdG9yYWdlLEtoKTthd2FpdCBCMyh7aWQ6Yyx0b3BpYzpzLHdjRGVlcExpbms6T30pfXYoKX0pLGwoKV0pLnRoZW4odj0+dlsyXSl9LHRoaXMucmVzcG9uZD1hc3luYyByPT57dGhpcy5pc0luaXRpYWxpemVkKCk7Y29uc3Qgbj10aGlzLmNsaWVudC5jb3JlLmV2ZW50Q2xpZW50LmNyZWF0ZUV2ZW50KHtwcm9wZXJ0aWVzOnt0b3BpYzpyPy50b3BpY3x8cj8ucmVzcG9uc2U/LmlkPy50b1N0cmluZygpLHRyYWNlOlskdC5zZXNzaW9uX3JlcXVlc3RfcmVzcG9uc2Vfc3RhcnRlZF19fSk7dHJ5e2F3YWl0IHRoaXMuaXNWYWxpZFJlc3BvbmQocil9Y2F0Y2godSl7dGhyb3cgbi5hZGRUcmFjZSh1Py5tZXNzYWdlKSxuLnNldEVycm9yKGNuLnNlc3Npb25fcmVxdWVzdF9yZXNwb25zZV92YWxpZGF0aW9uX2ZhaWx1cmUpLHV9bi5hZGRUcmFjZSgkdC5zZXNzaW9uX3JlcXVlc3RfcmVzcG9uc2VfdmFsaWRhdGlvbl9zdWNjZXNzKTtjb25zdHt0b3BpYzppLHJlc3BvbnNlOnN9PXIse2lkOm99PXMsYT10aGlzLmNsaWVudC5zZXNzaW9uLmdldChpKTthLnRyYW5zcG9ydFR5cGU9PT1wZS5yZWxheSYmYXdhaXQgdGhpcy5jb25maXJtT25saW5lU3RhdGVPclRocm93KCk7Y29uc3QgYz10aGlzLmdldEFwcExpbmtJZkVuYWJsZWQoYS5wZWVyLm1ldGFkYXRhLGEudHJhbnNwb3J0VHlwZSk7dHJ5e24uYWRkVHJhY2UoJHQuc2Vzc2lvbl9yZXF1ZXN0X3Jlc3BvbnNlX3B1Ymxpc2hfc3RhcnRlZCksV3Qocyk/YXdhaXQgdGhpcy5zZW5kUmVzdWx0KHtpZDpvLHRvcGljOmkscmVzdWx0OnMucmVzdWx0LHRocm93T25GYWlsZWRQdWJsaXNoOiEwLGFwcExpbms6Y30pOnh0KHMpJiZhd2FpdCB0aGlzLnNlbmRFcnJvcih7aWQ6byx0b3BpYzppLGVycm9yOnMuZXJyb3IsYXBwTGluazpjfSksdGhpcy5jbGVhbnVwQWZ0ZXJSZXNwb25zZShyKX1jYXRjaCh1KXt0aHJvdyBuLmFkZFRyYWNlKHU/Lm1lc3NhZ2UpLG4uc2V0RXJyb3IoY24uc2Vzc2lvbl9yZXF1ZXN0X3Jlc3BvbnNlX3B1Ymxpc2hfZmFpbHVyZSksdX19LHRoaXMucGluZz1hc3luYyByPT57dGhpcy5pc0luaXRpYWxpemVkKCksYXdhaXQgdGhpcy5jb25maXJtT25saW5lU3RhdGVPclRocm93KCk7dHJ5e2F3YWl0IHRoaXMuaXNWYWxpZFBpbmcocil9Y2F0Y2goaSl7dGhyb3cgdGhpcy5jbGllbnQubG9nZ2VyLmVycm9yKCJwaW5nKCkgLT4gaXNWYWxpZFBpbmcoKSBmYWlsZWQiKSxpfWNvbnN0e3RvcGljOm59PXI7aWYodGhpcy5jbGllbnQuc2Vzc2lvbi5rZXlzLmluY2x1ZGVzKG4pKXtjb25zdCBpPVZ0KCkscz1XcigpLnRvU3RyaW5nKCkse2RvbmU6byxyZXNvbHZlOmEscmVqZWN0OmN9PWZuKEcuRklWRV9NSU5VVEVTLCJQaW5nIHJlcXVlc3QgZXhwaXJlZCB3aXRob3V0IHJlY2VpdmluZyBhbnkgYWNrbm93bGVkZ2VtZW50Iik7dGhpcy5ldmVudHMub25jZShsZSgic2Vzc2lvbl9waW5nIixpKSwoe2Vycm9yOnV9KT0+e3U/Yyh1KTphKCl9KSxhd2FpdCBQcm9taXNlLmFsbChbdGhpcy5zZW5kUmVxdWVzdCh7dG9waWM6bixtZXRob2Q6IndjX3Nlc3Npb25QaW5nIixwYXJhbXM6e30sdGhyb3dPbkZhaWxlZFB1Ymxpc2g6ITAsY2xpZW50UnBjSWQ6aSxyZWxheVJwY0lkOnN9KSxvKCldKX1lbHNlIHRoaXMuY2xpZW50LmNvcmUucGFpcmluZy5wYWlyaW5ncy5rZXlzLmluY2x1ZGVzKG4pJiYodGhpcy5jbGllbnQubG9nZ2VyLndhcm4oInBpbmcoKSBvbiBwYWlyaW5nIHRvcGljIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLiIpLGF3YWl0IHRoaXMuY2xpZW50LmNvcmUucGFpcmluZy5waW5nKHt0b3BpYzpufSkpfSx0aGlzLmVtaXQ9YXN5bmMgcj0+e3RoaXMuaXNJbml0aWFsaXplZCgpLGF3YWl0IHRoaXMuY29uZmlybU9ubGluZVN0YXRlT3JUaHJvdygpLGF3YWl0IHRoaXMuaXNWYWxpZEVtaXQocik7Y29uc3R7dG9waWM6bixldmVudDppLGNoYWluSWQ6c309cixvPVdyKCkudG9TdHJpbmcoKSxhPVZ0KCk7YXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7dG9waWM6bixtZXRob2Q6IndjX3Nlc3Npb25FdmVudCIscGFyYW1zOntldmVudDppLGNoYWluSWQ6c30sdGhyb3dPbkZhaWxlZFB1Ymxpc2g6ITAscmVsYXlScGNJZDpvLGNsaWVudFJwY0lkOmF9KX0sdGhpcy5kaXNjb25uZWN0PWFzeW5jIHI9Pnt0aGlzLmlzSW5pdGlhbGl6ZWQoKSxhd2FpdCB0aGlzLmNvbmZpcm1PbmxpbmVTdGF0ZU9yVGhyb3coKSxhd2FpdCB0aGlzLmlzVmFsaWREaXNjb25uZWN0KHIpO2NvbnN0e3RvcGljOm59PXI7aWYodGhpcy5jbGllbnQuc2Vzc2lvbi5rZXlzLmluY2x1ZGVzKG4pKWF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe3RvcGljOm4sbWV0aG9kOiJ3Y19zZXNzaW9uRGVsZXRlIixwYXJhbXM6eWUoIlVTRVJfRElTQ09OTkVDVEVEIiksdGhyb3dPbkZhaWxlZFB1Ymxpc2g6ITB9KSxhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oe3RvcGljOm4sZW1pdEV2ZW50OiExfSk7ZWxzZSBpZih0aGlzLmNsaWVudC5jb3JlLnBhaXJpbmcucGFpcmluZ3Mua2V5cy5pbmNsdWRlcyhuKSlhd2FpdCB0aGlzLmNsaWVudC5jb3JlLnBhaXJpbmcuZGlzY29ubmVjdCh7dG9waWM6bn0pO2Vsc2V7Y29uc3R7bWVzc2FnZTppfT1ZKCJNSVNNQVRDSEVEX1RPUElDIixgU2Vzc2lvbiBvciBwYWlyaW5nIHRvcGljIG5vdCBmb3VuZDogJHtufWApO3Rocm93IG5ldyBFcnJvcihpKX19LHRoaXMuZmluZD1yPT4odGhpcy5pc0luaXRpYWxpemVkKCksdGhpcy5jbGllbnQuc2Vzc2lvbi5nZXRBbGwoKS5maWx0ZXIobj0+T1MobixyKSkpLHRoaXMuZ2V0UGVuZGluZ1Nlc3Npb25SZXF1ZXN0cz0oKT0+dGhpcy5jbGllbnQucGVuZGluZ1JlcXVlc3QuZ2V0QWxsKCksdGhpcy5hdXRoZW50aWNhdGU9YXN5bmMocixuKT0+e3RoaXMuaXNJbml0aWFsaXplZCgpLHRoaXMuaXNWYWxpZEF1dGhlbnRpY2F0ZShyKTtjb25zdCBpPW4mJnRoaXMuY2xpZW50LmNvcmUubGlua01vZGVTdXBwb3J0ZWRBcHBzLmluY2x1ZGVzKG4pJiZ0aGlzLmNsaWVudC5tZXRhZGF0YS5yZWRpcmVjdD8ubGlua01vZGUscz1pP3BlLmxpbmtfbW9kZTpwZS5yZWxheTtzPT09cGUucmVsYXkmJmF3YWl0IHRoaXMuY29uZmlybU9ubGluZVN0YXRlT3JUaHJvdygpO2NvbnN0e2NoYWluczpvLHN0YXRlbWVudDphPSIiLHVyaTpjLGRvbWFpbjp1LG5vbmNlOmwsdHlwZTpoLGV4cDpwLG5iZjpnLG1ldGhvZHM6dz1bXSxleHBpcnk6Yn09cix2PVsuLi5yLnJlc291cmNlc3x8W11dLHt0b3BpYzpPLHVyaTpGfT1hd2FpdCB0aGlzLmNsaWVudC5jb3JlLnBhaXJpbmcuY3JlYXRlKHttZXRob2RzOlsid2Nfc2Vzc2lvbkF1dGhlbnRpY2F0ZSJdLHRyYW5zcG9ydFR5cGU6c30pO2lmKHRoaXMuY2xpZW50LmxvZ2dlci5pbmZvKHttZXNzYWdlOiJHZW5lcmF0ZWQgbmV3IHBhaXJpbmciLHBhaXJpbmc6e3RvcGljOk8sdXJpOkZ9fSksdGhpcy5jbGllbnQuYXV0aC5hdXRoS2V5cy5rZXlzLmluY2x1ZGVzKGtyKSl7Y29uc3R7cmVzcG9uc2VUb3BpYzpBLHB1YmxpY0tleTpTfT10aGlzLmNsaWVudC5hdXRoLmF1dGhLZXlzLmdldChrcik7QSYmKGF3YWl0IHRoaXMuY2xpZW50LmNvcmUucmVsYXllci51bnN1YnNjcmliZShBKS5jYXRjaCgkPT50aGlzLmNsaWVudC5sb2dnZXIud2FybigkKSksYXdhaXQgdGhpcy5jbGllbnQuYXV0aC5wYWlyaW5nVG9waWNzLmRlbGV0ZShBLHttZXNzYWdlOiJyZXBsYWNlZCIsY29kZTowfSkuY2F0Y2goJD0+dGhpcy5jbGllbnQubG9nZ2VyLndhcm4oJCkpKSxTJiZ0aGlzLmNsaWVudC5jb3JlLmNyeXB0by5rZXljaGFpbi5oYXMoUykmJmF3YWl0IHRoaXMuY2xpZW50LmNvcmUuY3J5cHRvLmRlbGV0ZUtleVBhaXIoUyl9Y29uc3QgXz1hd2FpdCB0aGlzLmNsaWVudC5jb3JlLmNyeXB0by5nZW5lcmF0ZUtleVBhaXIoKSxQPXpzKF8pO2lmKGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLmNsaWVudC5hdXRoLmF1dGhLZXlzLnNldChrcix7cmVzcG9uc2VUb3BpYzpQLHB1YmxpY0tleTpffSksdGhpcy5jbGllbnQuYXV0aC5wYWlyaW5nVG9waWNzLnNldChQLHt0b3BpYzpQLHBhaXJpbmdUb3BpYzpPfSldKSxhd2FpdCB0aGlzLmNsaWVudC5jb3JlLnJlbGF5ZXIuc3Vic2NyaWJlKFAse3RyYW5zcG9ydFR5cGU6c30pLHRoaXMuY2xpZW50LmxvZ2dlci5pbmZvKGBzZW5kaW5nIHJlcXVlc3QgdG8gbmV3IHBhaXJpbmcgdG9waWM6ICR7T31gKSx3Lmxlbmd0aD4wKXtjb25zdHtuYW1lc3BhY2U6QX09dnIob1swXSk7bGV0IFM9blMoQSwicmVxdWVzdCIsdyk7anModikmJihTPXNTKFMsdi5wb3AoKSkpLHYucHVzaChTKX1jb25zdCBDPWImJmI+RmUud2Nfc2Vzc2lvbkF1dGhlbnRpY2F0ZS5yZXEudHRsP2I6RmUud2Nfc2Vzc2lvbkF1dGhlbnRpY2F0ZS5yZXEudHRsLGo9e2F1dGhQYXlsb2FkOnt0eXBlOmg/PyJjYWlwMTIyIixjaGFpbnM6byxzdGF0ZW1lbnQ6YSxhdWQ6Yyxkb21haW46dSx2ZXJzaW9uOiIxIixub25jZTpsLGlhdDpuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksZXhwOnAsbmJmOmcscmVzb3VyY2VzOnZ9LHJlcXVlc3Rlcjp7cHVibGljS2V5Ol8sbWV0YWRhdGE6dGhpcy5jbGllbnQubWV0YWRhdGF9LGV4cGlyeVRpbWVzdGFtcDpTZShDKX0scT17ZWlwMTU1OntjaGFpbnM6byxtZXRob2RzOlsuLi5uZXcgU2V0KFsicGVyc29uYWxfc2lnbiIsLi4ud10pXSxldmVudHM6WyJjaGFpbkNoYW5nZWQiLCJhY2NvdW50c0NoYW5nZWQiXX19LE09e3JlcXVpcmVkTmFtZXNwYWNlczp7fSxvcHRpb25hbE5hbWVzcGFjZXM6cSxyZWxheXM6W3twcm90b2NvbDoiaXJuIn1dLHBhaXJpbmdUb3BpYzpPLHByb3Bvc2VyOntwdWJsaWNLZXk6XyxtZXRhZGF0YTp0aGlzLmNsaWVudC5tZXRhZGF0YX0sZXhwaXJ5VGltZXN0YW1wOlNlKEZlLndjX3Nlc3Npb25Qcm9wb3NlLnJlcS50dGwpLGlkOlZ0KCl9LHtkb25lOlQscmVzb2x2ZTp6LHJlamVjdDpVfT1mbihDLCJSZXF1ZXN0IGV4cGlyZWQiKSxOPVZ0KCksRD1sZSgic2Vzc2lvbl9jb25uZWN0IixNLmlkKSxSPWxlKCJzZXNzaW9uX3JlcXVlc3QiLE4pLHk9YXN5bmMoe2Vycm9yOkEsc2Vzc2lvbjpTfSk9Pnt0aGlzLmV2ZW50cy5vZmYoUixtKSxBP1UoQSk6UyYmeih7c2Vzc2lvbjpTfSl9LG09YXN5bmMgQT0+e2lmKGF3YWl0IHRoaXMuZGVsZXRlUGVuZGluZ0F1dGhSZXF1ZXN0KE4se21lc3NhZ2U6ImZ1bGZpbGxlZCIsY29kZTowfSksQS5lcnJvcil7Y29uc3QgVz15ZSgiV0NfTUVUSE9EX1VOU1VQUE9SVEVEIiwid2Nfc2Vzc2lvbkF1dGhlbnRpY2F0ZSIpO3JldHVybiBBLmVycm9yLmNvZGU9PT1XLmNvZGU/dm9pZCAwOih0aGlzLmV2ZW50cy5vZmYoRCx5KSxVKEEuZXJyb3IubWVzc2FnZSkpfWF3YWl0IHRoaXMuZGVsZXRlUHJvcG9zYWwoTS5pZCksdGhpcy5ldmVudHMub2ZmKEQseSk7Y29uc3R7Y2FjYW9zOlMscmVzcG9uZGVyOiR9PUEucmVzdWx0LGs9W10sSz1bXTtmb3IoY29uc3QgVyBvZiBTKXthd2FpdCBtaCh7Y2FjYW86Vyxwcm9qZWN0SWQ6dGhpcy5jbGllbnQuY29yZS5wcm9qZWN0SWR9KXx8KHRoaXMuY2xpZW50LmxvZ2dlci5lcnJvcihXLCJTaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZCIpLFUoeWUoIlNFU1NJT05fU0VUVExFTUVOVF9GQUlMRUQiLCJTaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZCIpKSk7Y29uc3R7cDpKfT1XLGVlPWpzKEoucmVzb3VyY2VzKSxyZT1bbWMoSi5pc3MpXSxRPWFvKEouaXNzKTtpZihlZSl7Y29uc3QgaWU9YmgoZWUpLGZlPUVoKGVlKTtrLnB1c2goLi4uaWUpLHJlLnB1c2goLi4uZmUpfWZvcihjb25zdCBpZSBvZiByZSlLLnB1c2goYCR7aWV9OiR7UX1gKX1jb25zdCBaPWF3YWl0IHRoaXMuY2xpZW50LmNvcmUuY3J5cHRvLmdlbmVyYXRlU2hhcmVkS2V5KF8sJC5wdWJsaWNLZXkpO2xldCBWO2subGVuZ3RoPjAmJihWPXt0b3BpYzpaLGFja25vd2xlZGdlZDohMCxzZWxmOntwdWJsaWNLZXk6XyxtZXRhZGF0YTp0aGlzLmNsaWVudC5tZXRhZGF0YX0scGVlcjokLGNvbnRyb2xsZXI6JC5wdWJsaWNLZXksZXhwaXJ5OlNlKEtuKSxyZXF1aXJlZE5hbWVzcGFjZXM6e30sb3B0aW9uYWxOYW1lc3BhY2VzOnt9LHJlbGF5Ontwcm90b2NvbDoiaXJuIn0scGFpcmluZ1RvcGljOk8sbmFtZXNwYWNlczpEaChbLi4ubmV3IFNldChrKV0sWy4uLm5ldyBTZXQoSyldKSx0cmFuc3BvcnRUeXBlOnN9LGF3YWl0IHRoaXMuY2xpZW50LmNvcmUucmVsYXllci5zdWJzY3JpYmUoWix7dHJhbnNwb3J0VHlwZTpzfSksYXdhaXQgdGhpcy5jbGllbnQuc2Vzc2lvbi5zZXQoWixWKSxPJiZhd2FpdCB0aGlzLmNsaWVudC5jb3JlLnBhaXJpbmcudXBkYXRlTWV0YWRhdGEoe3RvcGljOk8sbWV0YWRhdGE6JC5tZXRhZGF0YX0pLFY9dGhpcy5jbGllbnQuc2Vzc2lvbi5nZXQoWikpLHRoaXMuY2xpZW50Lm1ldGFkYXRhLnJlZGlyZWN0Py5saW5rTW9kZSYmJC5tZXRhZGF0YS5yZWRpcmVjdD8ubGlua01vZGUmJiQubWV0YWRhdGEucmVkaXJlY3Q/LnVuaXZlcnNhbCYmbiYmKHRoaXMuY2xpZW50LmNvcmUuYWRkTGlua01vZGVTdXBwb3J0ZWRBcHAoJC5tZXRhZGF0YS5yZWRpcmVjdC51bml2ZXJzYWwpLHRoaXMuY2xpZW50LnNlc3Npb24udXBkYXRlKFose3RyYW5zcG9ydFR5cGU6cGUubGlua19tb2RlfSkpLHooe2F1dGhzOlMsc2Vzc2lvbjpWfSl9O3RoaXMuZXZlbnRzLm9uY2UoRCx5KSx0aGlzLmV2ZW50cy5vbmNlKFIsbSk7bGV0IEk7dHJ5e2lmKGkpe2NvbnN0IEE9UnQoIndjX3Nlc3Npb25BdXRoZW50aWNhdGUiLGosTik7dGhpcy5jbGllbnQuY29yZS5oaXN0b3J5LnNldChPLEEpO2NvbnN0IFM9YXdhaXQgdGhpcy5jbGllbnQuY29yZS5jcnlwdG8uZW5jb2RlKCIiLEEse3R5cGU6T24sZW5jb2Rpbmc6SnR9KTtJPUJzKG4sTyxTKX1lbHNlIGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLnNlbmRSZXF1ZXN0KHt0b3BpYzpPLG1ldGhvZDoid2Nfc2Vzc2lvbkF1dGhlbnRpY2F0ZSIscGFyYW1zOmosZXhwaXJ5OnIuZXhwaXJ5LHRocm93T25GYWlsZWRQdWJsaXNoOiEwLGNsaWVudFJwY0lkOk59KSx0aGlzLnNlbmRSZXF1ZXN0KHt0b3BpYzpPLG1ldGhvZDoid2Nfc2Vzc2lvblByb3Bvc2UiLHBhcmFtczpNLGV4cGlyeTpGZS53Y19zZXNzaW9uUHJvcG9zZS5yZXEudHRsLHRocm93T25GYWlsZWRQdWJsaXNoOiEwLGNsaWVudFJwY0lkOk0uaWR9KV0pfWNhdGNoKEEpe3Rocm93IHRoaXMuZXZlbnRzLm9mZihELHkpLHRoaXMuZXZlbnRzLm9mZihSLG0pLEF9cmV0dXJuIGF3YWl0IHRoaXMuc2V0UHJvcG9zYWwoTS5pZCxNKSxhd2FpdCB0aGlzLnNldEF1dGhSZXF1ZXN0KE4se3JlcXVlc3Q6ey4uLmosdmVyaWZ5Q29udGV4dDp7fX0scGFpcmluZ1RvcGljOk8sdHJhbnNwb3J0VHlwZTpzfSkse3VyaTpJPz9GLHJlc3BvbnNlOlR9fSx0aGlzLmFwcHJvdmVTZXNzaW9uQXV0aGVudGljYXRlPWFzeW5jIHI9Pntjb25zdHtpZDpuLGF1dGhzOml9PXIscz10aGlzLmNsaWVudC5jb3JlLmV2ZW50Q2xpZW50LmNyZWF0ZUV2ZW50KHtwcm9wZXJ0aWVzOnt0b3BpYzpuLnRvU3RyaW5nKCksdHJhY2U6W3VuLmF1dGhlbnRpY2F0ZWRfc2Vzc2lvbl9hcHByb3ZlX3N0YXJ0ZWRdfX0pO3RyeXt0aGlzLmlzSW5pdGlhbGl6ZWQoKX1jYXRjaCh2KXt0aHJvdyBzLnNldEVycm9yKCRpLm5vX2ludGVybmV0X2Nvbm5lY3Rpb24pLHZ9Y29uc3Qgbz10aGlzLmdldFBlbmRpbmdBdXRoUmVxdWVzdChuKTtpZighbyl0aHJvdyBzLnNldEVycm9yKCRpLmF1dGhlbnRpY2F0ZWRfc2Vzc2lvbl9wZW5kaW5nX3JlcXVlc3Rfbm90X2ZvdW5kKSxuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHBlbmRpbmcgYXV0aCByZXF1ZXN0IHdpdGggaWQgJHtufWApO2NvbnN0IGE9by50cmFuc3BvcnRUeXBlfHxwZS5yZWxheTthPT09cGUucmVsYXkmJmF3YWl0IHRoaXMuY29uZmlybU9ubGluZVN0YXRlT3JUaHJvdygpO2NvbnN0IGM9by5yZXF1ZXN0ZXIucHVibGljS2V5LHU9YXdhaXQgdGhpcy5jbGllbnQuY29yZS5jcnlwdG8uZ2VuZXJhdGVLZXlQYWlyKCksbD16cyhjKSxoPXt0eXBlOnhyLHJlY2VpdmVyUHVibGljS2V5OmMsc2VuZGVyUHVibGljS2V5OnV9LHA9W10sZz1bXTtmb3IoY29uc3QgdiBvZiBpKXtpZighYXdhaXQgbWgoe2NhY2FvOnYscHJvamVjdElkOnRoaXMuY2xpZW50LmNvcmUucHJvamVjdElkfSkpe3Muc2V0RXJyb3IoJGkuaW52YWxpZF9jYWNhbyk7Y29uc3QgQz15ZSgiU0VTU0lPTl9TRVRUTEVNRU5UX0ZBSUxFRCIsIlNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkIik7dGhyb3cgYXdhaXQgdGhpcy5zZW5kRXJyb3Ioe2lkOm4sdG9waWM6bCxlcnJvcjpDLGVuY29kZU9wdHM6aH0pLG5ldyBFcnJvcihDLm1lc3NhZ2UpfXMuYWRkVHJhY2UodW4uY2FjYW9zX3ZlcmlmaWVkKTtjb25zdHtwOk99PXYsRj1qcyhPLnJlc291cmNlcyksXz1bbWMoTy5pc3MpXSxQPWFvKE8uaXNzKTtpZihGKXtjb25zdCBDPWJoKEYpLGo9RWgoRik7cC5wdXNoKC4uLkMpLF8ucHVzaCguLi5qKX1mb3IoY29uc3QgQyBvZiBfKWcucHVzaChgJHtDfToke1B9YCl9Y29uc3Qgdz1hd2FpdCB0aGlzLmNsaWVudC5jb3JlLmNyeXB0by5nZW5lcmF0ZVNoYXJlZEtleSh1LGMpO3MuYWRkVHJhY2UodW4uY3JlYXRlX2F1dGhlbnRpY2F0ZWRfc2Vzc2lvbl90b3BpYyk7bGV0IGI7aWYocD8ubGVuZ3RoPjApe2I9e3RvcGljOncsYWNrbm93bGVkZ2VkOiEwLHNlbGY6e3B1YmxpY0tleTp1LG1ldGFkYXRhOnRoaXMuY2xpZW50Lm1ldGFkYXRhfSxwZWVyOntwdWJsaWNLZXk6YyxtZXRhZGF0YTpvLnJlcXVlc3Rlci5tZXRhZGF0YX0sY29udHJvbGxlcjpjLGV4cGlyeTpTZShLbiksYXV0aGVudGljYXRpb246aSxyZXF1aXJlZE5hbWVzcGFjZXM6e30sb3B0aW9uYWxOYW1lc3BhY2VzOnt9LHJlbGF5Ontwcm90b2NvbDoiaXJuIn0scGFpcmluZ1RvcGljOm8ucGFpcmluZ1RvcGljLG5hbWVzcGFjZXM6RGgoWy4uLm5ldyBTZXQocCldLFsuLi5uZXcgU2V0KGcpXSksdHJhbnNwb3J0VHlwZTphfSxzLmFkZFRyYWNlKHVuLnN1YnNjcmliaW5nX2F1dGhlbnRpY2F0ZWRfc2Vzc2lvbl90b3BpYyk7dHJ5e2F3YWl0IHRoaXMuY2xpZW50LmNvcmUucmVsYXllci5zdWJzY3JpYmUodyx7dHJhbnNwb3J0VHlwZTphfSl9Y2F0Y2godil7dGhyb3cgcy5zZXRFcnJvcigkaS5zdWJzY3JpYmVfYXV0aGVudGljYXRlZF9zZXNzaW9uX3RvcGljX2ZhaWx1cmUpLHZ9cy5hZGRUcmFjZSh1bi5zdWJzY3JpYmVfYXV0aGVudGljYXRlZF9zZXNzaW9uX3RvcGljX3N1Y2Nlc3MpLGF3YWl0IHRoaXMuY2xpZW50LnNlc3Npb24uc2V0KHcsYikscy5hZGRUcmFjZSh1bi5zdG9yZV9hdXRoZW50aWNhdGVkX3Nlc3Npb24pLGF3YWl0IHRoaXMuY2xpZW50LmNvcmUucGFpcmluZy51cGRhdGVNZXRhZGF0YSh7dG9waWM6by5wYWlyaW5nVG9waWMsbWV0YWRhdGE6by5yZXF1ZXN0ZXIubWV0YWRhdGF9KX1zLmFkZFRyYWNlKHVuLnB1Ymxpc2hpbmdfYXV0aGVudGljYXRlZF9zZXNzaW9uX2FwcHJvdmUpO3RyeXthd2FpdCB0aGlzLnNlbmRSZXN1bHQoe3RvcGljOmwsaWQ6bixyZXN1bHQ6e2NhY2FvczppLHJlc3BvbmRlcjp7cHVibGljS2V5OnUsbWV0YWRhdGE6dGhpcy5jbGllbnQubWV0YWRhdGF9fSxlbmNvZGVPcHRzOmgsdGhyb3dPbkZhaWxlZFB1Ymxpc2g6ITAsYXBwTGluazp0aGlzLmdldEFwcExpbmtJZkVuYWJsZWQoby5yZXF1ZXN0ZXIubWV0YWRhdGEsYSl9KX1jYXRjaCh2KXt0aHJvdyBzLnNldEVycm9yKCRpLmF1dGhlbnRpY2F0ZWRfc2Vzc2lvbl9hcHByb3ZlX3B1Ymxpc2hfZmFpbHVyZSksdn1yZXR1cm4gYXdhaXQgdGhpcy5jbGllbnQuYXV0aC5yZXF1ZXN0cy5kZWxldGUobix7bWVzc2FnZToiZnVsZmlsbGVkIixjb2RlOjB9KSxhd2FpdCB0aGlzLmNsaWVudC5jb3JlLnBhaXJpbmcuYWN0aXZhdGUoe3RvcGljOm8ucGFpcmluZ1RvcGljfSksdGhpcy5jbGllbnQuY29yZS5ldmVudENsaWVudC5kZWxldGVFdmVudCh7ZXZlbnRJZDpzLmV2ZW50SWR9KSx7c2Vzc2lvbjpifX0sdGhpcy5yZWplY3RTZXNzaW9uQXV0aGVudGljYXRlPWFzeW5jIHI9Pnt0aGlzLmlzSW5pdGlhbGl6ZWQoKTtjb25zdHtpZDpuLHJlYXNvbjppfT1yLHM9dGhpcy5nZXRQZW5kaW5nQXV0aFJlcXVlc3Qobik7aWYoIXMpdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBwZW5kaW5nIGF1dGggcmVxdWVzdCB3aXRoIGlkICR7bn1gKTtzLnRyYW5zcG9ydFR5cGU9PT1wZS5yZWxheSYmYXdhaXQgdGhpcy5jb25maXJtT25saW5lU3RhdGVPclRocm93KCk7Y29uc3Qgbz1zLnJlcXVlc3Rlci5wdWJsaWNLZXksYT1hd2FpdCB0aGlzLmNsaWVudC5jb3JlLmNyeXB0by5nZW5lcmF0ZUtleVBhaXIoKSxjPXpzKG8pLHU9e3R5cGU6eHIscmVjZWl2ZXJQdWJsaWNLZXk6byxzZW5kZXJQdWJsaWNLZXk6YX07YXdhaXQgdGhpcy5zZW5kRXJyb3Ioe2lkOm4sdG9waWM6YyxlcnJvcjppLGVuY29kZU9wdHM6dSxycGNPcHRzOkZlLndjX3Nlc3Npb25BdXRoZW50aWNhdGUucmVqZWN0LGFwcExpbms6dGhpcy5nZXRBcHBMaW5rSWZFbmFibGVkKHMucmVxdWVzdGVyLm1ldGFkYXRhLHMudHJhbnNwb3J0VHlwZSl9KSxhd2FpdCB0aGlzLmNsaWVudC5hdXRoLnJlcXVlc3RzLmRlbGV0ZShuLHttZXNzYWdlOiJyZWplY3RlZCIsY29kZTowfSksYXdhaXQgdGhpcy5kZWxldGVQcm9wb3NhbChuKX0sdGhpcy5mb3JtYXRBdXRoTWVzc2FnZT1yPT57dGhpcy5pc0luaXRpYWxpemVkKCk7Y29uc3R7cmVxdWVzdDpuLGlzczppfT1yO3JldHVybiBFZyhuLGkpfSx0aGlzLnByb2Nlc3NSZWxheU1lc3NhZ2VDYWNoZT0oKT0+e3NldFRpbWVvdXQoYXN5bmMoKT0+e2lmKHRoaXMucmVsYXlNZXNzYWdlQ2FjaGUubGVuZ3RoIT09MClmb3IoO3RoaXMucmVsYXlNZXNzYWdlQ2FjaGUubGVuZ3RoPjA7KXRyeXtjb25zdCByPXRoaXMucmVsYXlNZXNzYWdlQ2FjaGUuc2hpZnQoKTtyJiZhd2FpdCB0aGlzLm9uUmVsYXlNZXNzYWdlKHIpfWNhdGNoKHIpe3RoaXMuY2xpZW50LmxvZ2dlci5lcnJvcihyKX19LDUwKX0sdGhpcy5jbGVhbnVwRHVwbGljYXRlUGFpcmluZ3M9YXN5bmMgcj0+e2lmKHIucGFpcmluZ1RvcGljKXRyeXtjb25zdCBuPXRoaXMuY2xpZW50LmNvcmUucGFpcmluZy5wYWlyaW5ncy5nZXQoci5wYWlyaW5nVG9waWMpLGk9dGhpcy5jbGllbnQuY29yZS5wYWlyaW5nLnBhaXJpbmdzLmdldEFsbCgpLmZpbHRlcihzPT5zLnBlZXJNZXRhZGF0YT8udXJsJiZzLnBlZXJNZXRhZGF0YT8udXJsPT09ci5wZWVyLm1ldGFkYXRhLnVybCYmcy50b3BpYyYmcy50b3BpYyE9PW4udG9waWMpO2lmKGkubGVuZ3RoPT09MClyZXR1cm47dGhpcy5jbGllbnQubG9nZ2VyLmluZm8oYENsZWFuaW5nIHVwICR7aS5sZW5ndGh9IGR1cGxpY2F0ZSBwYWlyaW5nKHMpYCksYXdhaXQgUHJvbWlzZS5hbGwoaS5tYXAocz0+dGhpcy5jbGllbnQuY29yZS5wYWlyaW5nLmRpc2Nvbm5lY3Qoe3RvcGljOnMudG9waWN9KSkpLHRoaXMuY2xpZW50LmxvZ2dlci5pbmZvKCJEdXBsaWNhdGUgcGFpcmluZ3MgY2xlYW4gdXAgZmluaXNoZWQiKX1jYXRjaChuKXt0aGlzLmNsaWVudC5sb2dnZXIuZXJyb3Iobil9fSx0aGlzLmRlbGV0ZVNlc3Npb249YXN5bmMgcj0+e2NvbnN0e3RvcGljOm4sZXhwaXJlckhhc0RlbGV0ZWQ6aT0hMSxlbWl0RXZlbnQ6cz0hMCxpZDpvPTB9PXIse3NlbGY6YX09dGhpcy5jbGllbnQuc2Vzc2lvbi5nZXQobik7YXdhaXQgdGhpcy5jbGllbnQuY29yZS5yZWxheWVyLnVuc3Vic2NyaWJlKG4pLGF3YWl0IHRoaXMuY2xpZW50LnNlc3Npb24uZGVsZXRlKG4seWUoIlVTRVJfRElTQ09OTkVDVEVEIikpLHRoaXMuYWRkVG9SZWNlbnRseURlbGV0ZWQobiwic2Vzc2lvbiIpLHRoaXMuY2xpZW50LmNvcmUuY3J5cHRvLmtleWNoYWluLmhhcyhhLnB1YmxpY0tleSkmJmF3YWl0IHRoaXMuY2xpZW50LmNvcmUuY3J5cHRvLmRlbGV0ZUtleVBhaXIoYS5wdWJsaWNLZXkpLHRoaXMuY2xpZW50LmNvcmUuY3J5cHRvLmtleWNoYWluLmhhcyhuKSYmYXdhaXQgdGhpcy5jbGllbnQuY29yZS5jcnlwdG8uZGVsZXRlU3ltS2V5KG4pLGl8fHRoaXMuY2xpZW50LmNvcmUuZXhwaXJlci5kZWwobiksdGhpcy5jbGllbnQuY29yZS5zdG9yYWdlLnJlbW92ZUl0ZW0oS2gpLmNhdGNoKGM9PnRoaXMuY2xpZW50LmxvZ2dlci53YXJuKGMpKSxuPT09dGhpcy5zZXNzaW9uUmVxdWVzdFF1ZXVlLnF1ZXVlWzBdPy50b3BpYyYmKHRoaXMuc2Vzc2lvblJlcXVlc3RRdWV1ZS5zdGF0ZT1qdC5pZGxlKSxhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmdldFBlbmRpbmdTZXNzaW9uUmVxdWVzdHMoKS5maWx0ZXIoYz0+Yy50b3BpYz09PW4pLm1hcChjPT50aGlzLmRlbGV0ZVBlbmRpbmdTZXNzaW9uUmVxdWVzdChjLmlkLHllKCJVU0VSX0RJU0NPTk5FQ1RFRCIpKSkpLHMmJnRoaXMuY2xpZW50LmV2ZW50cy5lbWl0KCJzZXNzaW9uX2RlbGV0ZSIse2lkOm8sdG9waWM6bn0pfSx0aGlzLmRlbGV0ZVByb3Bvc2FsPWFzeW5jKHIsbik9PntpZihuKXRyeXtjb25zdCBpPXRoaXMuY2xpZW50LnByb3Bvc2FsLmdldChyKTt0aGlzLmNsaWVudC5jb3JlLmV2ZW50Q2xpZW50LmdldEV2ZW50KHt0b3BpYzppLnBhaXJpbmdUb3BpY30pPy5zZXRFcnJvcihjbi5wcm9wb3NhbF9leHBpcmVkKX1jYXRjaHt9YXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMuY2xpZW50LnByb3Bvc2FsLmRlbGV0ZShyLHllKCJVU0VSX0RJU0NPTk5FQ1RFRCIpKSxuP1Byb21pc2UucmVzb2x2ZSgpOnRoaXMuY2xpZW50LmNvcmUuZXhwaXJlci5kZWwocildKSx0aGlzLmFkZFRvUmVjZW50bHlEZWxldGVkKHIsInByb3Bvc2FsIil9LHRoaXMuZGVsZXRlUGVuZGluZ1Nlc3Npb25SZXF1ZXN0PWFzeW5jKHIsbixpPSExKT0+e2F3YWl0IFByb21pc2UuYWxsKFt0aGlzLmNsaWVudC5wZW5kaW5nUmVxdWVzdC5kZWxldGUocixuKSxpP1Byb21pc2UucmVzb2x2ZSgpOnRoaXMuY2xpZW50LmNvcmUuZXhwaXJlci5kZWwocildKSx0aGlzLmFkZFRvUmVjZW50bHlEZWxldGVkKHIsInJlcXVlc3QiKSx0aGlzLnNlc3Npb25SZXF1ZXN0UXVldWUucXVldWU9dGhpcy5zZXNzaW9uUmVxdWVzdFF1ZXVlLnF1ZXVlLmZpbHRlcihzPT5zLmlkIT09ciksaSYmKHRoaXMuc2Vzc2lvblJlcXVlc3RRdWV1ZS5zdGF0ZT1qdC5pZGxlLHRoaXMuY2xpZW50LmV2ZW50cy5lbWl0KCJzZXNzaW9uX3JlcXVlc3RfZXhwaXJlIix7aWQ6cn0pKX0sdGhpcy5kZWxldGVQZW5kaW5nQXV0aFJlcXVlc3Q9YXN5bmMocixuLGk9ITEpPT57YXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMuY2xpZW50LmF1dGgucmVxdWVzdHMuZGVsZXRlKHIsbiksaT9Qcm9taXNlLnJlc29sdmUoKTp0aGlzLmNsaWVudC5jb3JlLmV4cGlyZXIuZGVsKHIpXSl9LHRoaXMuc2V0RXhwaXJ5PWFzeW5jKHIsbik9Pnt0aGlzLmNsaWVudC5zZXNzaW9uLmtleXMuaW5jbHVkZXMocikmJih0aGlzLmNsaWVudC5jb3JlLmV4cGlyZXIuc2V0KHIsbiksYXdhaXQgdGhpcy5jbGllbnQuc2Vzc2lvbi51cGRhdGUocix7ZXhwaXJ5Om59KSl9LHRoaXMuc2V0UHJvcG9zYWw9YXN5bmMocixuKT0+e3RoaXMuY2xpZW50LmNvcmUuZXhwaXJlci5zZXQocixTZShGZS53Y19zZXNzaW9uUHJvcG9zZS5yZXEudHRsKSksYXdhaXQgdGhpcy5jbGllbnQucHJvcG9zYWwuc2V0KHIsbil9LHRoaXMuc2V0QXV0aFJlcXVlc3Q9YXN5bmMocixuKT0+e2NvbnN0e3JlcXVlc3Q6aSxwYWlyaW5nVG9waWM6cyx0cmFuc3BvcnRUeXBlOm89cGUucmVsYXl9PW47dGhpcy5jbGllbnQuY29yZS5leHBpcmVyLnNldChyLGkuZXhwaXJ5VGltZXN0YW1wKSxhd2FpdCB0aGlzLmNsaWVudC5hdXRoLnJlcXVlc3RzLnNldChyLHthdXRoUGF5bG9hZDppLmF1dGhQYXlsb2FkLHJlcXVlc3RlcjppLnJlcXVlc3RlcixleHBpcnlUaW1lc3RhbXA6aS5leHBpcnlUaW1lc3RhbXAsaWQ6cixwYWlyaW5nVG9waWM6cyx2ZXJpZnlDb250ZXh0OmkudmVyaWZ5Q29udGV4dCx0cmFuc3BvcnRUeXBlOm99KX0sdGhpcy5zZXRQZW5kaW5nU2Vzc2lvblJlcXVlc3Q9YXN5bmMgcj0+e2NvbnN0e2lkOm4sdG9waWM6aSxwYXJhbXM6cyx2ZXJpZnlDb250ZXh0Om99PXIsYT1zLnJlcXVlc3QuZXhwaXJ5VGltZXN0YW1wfHxTZShGZS53Y19zZXNzaW9uUmVxdWVzdC5yZXEudHRsKTt0aGlzLmNsaWVudC5jb3JlLmV4cGlyZXIuc2V0KG4sYSksYXdhaXQgdGhpcy5jbGllbnQucGVuZGluZ1JlcXVlc3Quc2V0KG4se2lkOm4sdG9waWM6aSxwYXJhbXM6cyx2ZXJpZnlDb250ZXh0Om99KX0sdGhpcy5zZW5kUmVxdWVzdD1hc3luYyByPT57Y29uc3R7dG9waWM6bixtZXRob2Q6aSxwYXJhbXM6cyxleHBpcnk6byxyZWxheVJwY0lkOmEsY2xpZW50UnBjSWQ6Yyx0aHJvd09uRmFpbGVkUHVibGlzaDp1LGFwcExpbms6bCx0dmY6aCxwdWJsaXNoT3B0czpwPXt9fT1yLGc9UnQoaSxzLGMpO2xldCB3O2NvbnN0IGI9ISFsO3RyeXtjb25zdCBGPWI/SnQ6a2U7dz1hd2FpdCB0aGlzLmNsaWVudC5jb3JlLmNyeXB0by5lbmNvZGUobixnLHtlbmNvZGluZzpGfSl9Y2F0Y2goRil7dGhyb3cgYXdhaXQgdGhpcy5jbGVhbnVwKCksdGhpcy5jbGllbnQubG9nZ2VyLmVycm9yKGBzZW5kUmVxdWVzdCgpIC0+IGNvcmUuY3J5cHRvLmVuY29kZSgpIGZvciB0b3BpYyAke259IGZhaWxlZGApLEZ9bGV0IHY7aWYoZUQuaW5jbHVkZXMoaSkpe2NvbnN0IEY9dnQoSlNPTi5zdHJpbmdpZnkoZykpLF89dnQodyk7dj1hd2FpdCB0aGlzLmNsaWVudC5jb3JlLnZlcmlmeS5yZWdpc3Rlcih7aWQ6XyxkZWNyeXB0ZWRJZDpGfSl9Y29uc3QgTz17Li4uRmVbaV0ucmVxLC4uLnB9O2lmKE8uYXR0ZXN0YXRpb249dixvJiYoTy50dGw9byksYSYmKE8uaWQ9YSksdGhpcy5jbGllbnQuY29yZS5oaXN0b3J5LnNldChuLGcpLGIpe2NvbnN0IEY9QnMobCxuLHcpO2F3YWl0IGFlLkxpbmtpbmcub3BlblVSTChGLHRoaXMuY2xpZW50Lm5hbWUpfWVsc2UgTy50dmY9ey4uLmgsY29ycmVsYXRpb25JZDpnLmlkfSx1PyhPLmludGVybmFsPXsuLi5PLmludGVybmFsLHRocm93T25GYWlsZWRQdWJsaXNoOiEwfSxhd2FpdCB0aGlzLmNsaWVudC5jb3JlLnJlbGF5ZXIucHVibGlzaChuLHcsTykpOnRoaXMuY2xpZW50LmNvcmUucmVsYXllci5wdWJsaXNoKG4sdyxPKS5jYXRjaChGPT50aGlzLmNsaWVudC5sb2dnZXIuZXJyb3IoRikpO3JldHVybiBnLmlkfSx0aGlzLnNlbmRQcm9wb3NlU2Vzc2lvbj1hc3luYyByPT57Y29uc3R7cHJvcG9zYWw6bixwdWJsaXNoT3B0czppfT1yLHM9UnQoIndjX3Nlc3Npb25Qcm9wb3NlIixuLG4uaWQpO3RoaXMuY2xpZW50LmNvcmUuaGlzdG9yeS5zZXQobi5wYWlyaW5nVG9waWMscyk7Y29uc3Qgbz1hd2FpdCB0aGlzLmNsaWVudC5jb3JlLmNyeXB0by5lbmNvZGUobi5wYWlyaW5nVG9waWMscyx7ZW5jb2Rpbmc6a2V9KSxhPXZ0KEpTT04uc3RyaW5naWZ5KHMpKSxjPXZ0KG8pLHU9YXdhaXQgdGhpcy5jbGllbnQuY29yZS52ZXJpZnkucmVnaXN0ZXIoe2lkOmMsZGVjcnlwdGVkSWQ6YX0pO2F3YWl0IHRoaXMuY2xpZW50LmNvcmUucmVsYXllci5wdWJsaXNoQ3VzdG9tKHtwYXlsb2FkOntwYWlyaW5nVG9waWM6bi5wYWlyaW5nVG9waWMsc2Vzc2lvblByb3Bvc2FsOm99LG9wdHM6ey4uLmkscHVibGlzaE1ldGhvZDoid2NfcHJvcG9zZVNlc3Npb24iLGF0dGVzdGF0aW9uOnV9fSl9LHRoaXMuc2VuZEFwcHJvdmVTZXNzaW9uPWFzeW5jIHI9Pntjb25zdHtzZXNzaW9uVG9waWM6bixwYWlyaW5nUHJvcG9zYWxSZXNwb25zZTppLHByb3Bvc2FsOnMsc2Vzc2lvblNldHRsZVJlcXVlc3Q6byxwdWJsaXNoT3B0czphfT1yLGM9WWkocy5pZCxpKSx1PWF3YWl0IHRoaXMuY2xpZW50LmNvcmUuY3J5cHRvLmVuY29kZShzLnBhaXJpbmdUb3BpYyxjLHtlbmNvZGluZzprZX0pLGw9UnQoIndjX3Nlc3Npb25TZXR0bGUiLG8sYT8uaWQpLGg9YXdhaXQgdGhpcy5jbGllbnQuY29yZS5jcnlwdG8uZW5jb2RlKG4sbCx7ZW5jb2Rpbmc6a2V9KTt0aGlzLmNsaWVudC5jb3JlLmhpc3Rvcnkuc2V0KG4sbCksYXdhaXQgdGhpcy5jbGllbnQuY29yZS5yZWxheWVyLnB1Ymxpc2hDdXN0b20oe3BheWxvYWQ6e3Nlc3Npb25Ub3BpYzpuLHBhaXJpbmdUb3BpYzpzLnBhaXJpbmdUb3BpYyxzZXNzaW9uUHJvcG9zYWxSZXNwb25zZTp1LHNlc3Npb25TZXR0bGVtZW50UmVxdWVzdDpofSxvcHRzOnsuLi5hLHB1Ymxpc2hNZXRob2Q6IndjX2FwcHJvdmVTZXNzaW9uIn19KX0sdGhpcy5zZW5kUmVzdWx0PWFzeW5jIHI9Pntjb25zdHtpZDpuLHRvcGljOmkscmVzdWx0OnMsdGhyb3dPbkZhaWxlZFB1Ymxpc2g6byxlbmNvZGVPcHRzOmEsYXBwTGluazpjfT1yLHU9WWkobixzKTtsZXQgbDtjb25zdCBoPWMmJnR5cGVvZiBhZT8uTGlua2luZzwidSI7dHJ5e2NvbnN0IHc9aD9KdDprZTtsPWF3YWl0IHRoaXMuY2xpZW50LmNvcmUuY3J5cHRvLmVuY29kZShpLHUsey4uLmF8fHt9LGVuY29kaW5nOnd9KX1jYXRjaCh3KXt0aHJvdyBhd2FpdCB0aGlzLmNsZWFudXAoKSx0aGlzLmNsaWVudC5sb2dnZXIuZXJyb3IoYHNlbmRSZXN1bHQoKSAtPiBjb3JlLmNyeXB0by5lbmNvZGUoKSBmb3IgdG9waWMgJHtpfSBmYWlsZWRgKSx3fWxldCBwLGc7dHJ5e3A9YXdhaXQgdGhpcy5jbGllbnQuY29yZS5oaXN0b3J5LmdldChpLG4pO2NvbnN0IHc9cC5yZXF1ZXN0O3RyeXtnPXRoaXMuZ2V0VFZGUGFyYW1zKG4sdy5wYXJhbXMscyl9Y2F0Y2goYil7dGhpcy5jbGllbnQubG9nZ2VyLndhcm4oYHNlbmRSZXN1bHQoKSAtPiBnZXRUVkZQYXJhbXMoKSBmYWlsZWQ6ICR7Yj8ubWVzc2FnZX1gKX19Y2F0Y2godyl7dGhyb3cgdGhpcy5jbGllbnQubG9nZ2VyLmVycm9yKGBzZW5kUmVzdWx0KCkgLT4gaGlzdG9yeS5nZXQoJHtpfSwgJHtufSkgZmFpbGVkYCksd31pZihoKXtjb25zdCB3PUJzKGMsaSxsKTthd2FpdCBhZS5MaW5raW5nLm9wZW5VUkwodyx0aGlzLmNsaWVudC5uYW1lKX1lbHNle2NvbnN0IHc9cC5yZXF1ZXN0Lm1ldGhvZCxiPUZlW3ddLnJlcztiLnR2Zj17Li4uZyxjb3JyZWxhdGlvbklkOm59LG8/KGIuaW50ZXJuYWw9ey4uLmIuaW50ZXJuYWwsdGhyb3dPbkZhaWxlZFB1Ymxpc2g6ITB9LGF3YWl0IHRoaXMuY2xpZW50LmNvcmUucmVsYXllci5wdWJsaXNoKGksbCxiKSk6dGhpcy5jbGllbnQuY29yZS5yZWxheWVyLnB1Ymxpc2goaSxsLGIpLmNhdGNoKHY9PnRoaXMuY2xpZW50LmxvZ2dlci5lcnJvcih2KSl9YXdhaXQgdGhpcy5jbGllbnQuY29yZS5oaXN0b3J5LnJlc29sdmUodSl9LHRoaXMuc2VuZEVycm9yPWFzeW5jIHI9Pntjb25zdHtpZDpuLHRvcGljOmksZXJyb3I6cyxlbmNvZGVPcHRzOm8scnBjT3B0czphLGFwcExpbms6Y309cix1PUxvKG4scyk7bGV0IGw7Y29uc3QgaD1jJiZ0eXBlb2YgYWU/Lkxpbmtpbmc8InUiO3RyeXtjb25zdCBnPWg/SnQ6a2U7bD1hd2FpdCB0aGlzLmNsaWVudC5jb3JlLmNyeXB0by5lbmNvZGUoaSx1LHsuLi5vfHx7fSxlbmNvZGluZzpnfSl9Y2F0Y2goZyl7dGhyb3cgYXdhaXQgdGhpcy5jbGVhbnVwKCksdGhpcy5jbGllbnQubG9nZ2VyLmVycm9yKGBzZW5kRXJyb3IoKSAtPiBjb3JlLmNyeXB0by5lbmNvZGUoKSBmb3IgdG9waWMgJHtpfSBmYWlsZWRgKSxnfWxldCBwO3RyeXtwPWF3YWl0IHRoaXMuY2xpZW50LmNvcmUuaGlzdG9yeS5nZXQoaSxuKX1jYXRjaChnKXt0aHJvdyB0aGlzLmNsaWVudC5sb2dnZXIuZXJyb3IoYHNlbmRFcnJvcigpIC0+IGhpc3RvcnkuZ2V0KCR7aX0sICR7bn0pIGZhaWxlZGApLGd9aWYoaCl7Y29uc3QgZz1CcyhjLGksbCk7YXdhaXQgYWUuTGlua2luZy5vcGVuVVJMKGcsdGhpcy5jbGllbnQubmFtZSl9ZWxzZXtjb25zdCBnPXAucmVxdWVzdC5tZXRob2Qsdz1hfHxGZVtnXS5yZXM7dGhpcy5jbGllbnQuY29yZS5yZWxheWVyLnB1Ymxpc2goaSxsLHcpfWF3YWl0IHRoaXMuY2xpZW50LmNvcmUuaGlzdG9yeS5yZXNvbHZlKHUpfSx0aGlzLmNsZWFudXA9YXN5bmMoKT0+e2NvbnN0IHI9W10sbj1bXTt0aGlzLmNsaWVudC5zZXNzaW9uLmdldEFsbCgpLmZvckVhY2goaT0+e2xldCBzPSExO1h0KGkuZXhwaXJ5KSYmKHM9ITApLHRoaXMuY2xpZW50LmNvcmUuY3J5cHRvLmtleWNoYWluLmhhcyhpLnRvcGljKXx8KHM9ITApLHMmJnIucHVzaChpLnRvcGljKX0pLHRoaXMuY2xpZW50LnByb3Bvc2FsLmdldEFsbCgpLmZvckVhY2goaT0+e1h0KGkuZXhwaXJ5VGltZXN0YW1wKSYmbi5wdXNoKGkuaWQpfSksYXdhaXQgUHJvbWlzZS5hbGwoWy4uLnIubWFwKGk9PnRoaXMuZGVsZXRlU2Vzc2lvbih7dG9waWM6aX0pKSwuLi5uLm1hcChpPT50aGlzLmRlbGV0ZVByb3Bvc2FsKGkpKV0pfSx0aGlzLm9uUHJvdmlkZXJNZXNzYWdlRXZlbnQ9YXN5bmMgcj0+eyF0aGlzLmluaXRpYWxpemVkfHx0aGlzLnJlbGF5TWVzc2FnZUNhY2hlLmxlbmd0aD4wP3RoaXMucmVsYXlNZXNzYWdlQ2FjaGUucHVzaChyKTphd2FpdCB0aGlzLm9uUmVsYXlNZXNzYWdlKHIpfSx0aGlzLm9uUmVsYXlFdmVudFJlcXVlc3Q9YXN5bmMgcj0+e3RoaXMucmVxdWVzdFF1ZXVlLnF1ZXVlLnB1c2gociksYXdhaXQgdGhpcy5wcm9jZXNzUmVxdWVzdHNRdWV1ZSgpfSx0aGlzLnByb2Nlc3NSZXF1ZXN0c1F1ZXVlPWFzeW5jKCk9PntpZih0aGlzLnJlcXVlc3RRdWV1ZS5zdGF0ZT09PWp0LmFjdGl2ZSl7dGhpcy5jbGllbnQubG9nZ2VyLmluZm8oIlJlcXVlc3QgcXVldWUgYWxyZWFkeSBhY3RpdmUsIHNraXBwaW5nLi4uIik7cmV0dXJufWZvcih0aGlzLmNsaWVudC5sb2dnZXIuaW5mbyhgUmVxdWVzdCBxdWV1ZSBzdGFydGluZyB3aXRoICR7dGhpcy5yZXF1ZXN0UXVldWUucXVldWUubGVuZ3RofSByZXF1ZXN0c2ApO3RoaXMucmVxdWVzdFF1ZXVlLnF1ZXVlLmxlbmd0aD4wOyl7dGhpcy5yZXF1ZXN0UXVldWUuc3RhdGU9anQuYWN0aXZlO2NvbnN0IHI9dGhpcy5yZXF1ZXN0UXVldWUucXVldWUuc2hpZnQoKTtpZihyKXRyeXthd2FpdCB0aGlzLnByb2Nlc3NSZXF1ZXN0KHIpfWNhdGNoKG4pe3RoaXMuY2xpZW50LmxvZ2dlci53YXJuKG4pfX10aGlzLnJlcXVlc3RRdWV1ZS5zdGF0ZT1qdC5pZGxlfSx0aGlzLnByb2Nlc3NSZXF1ZXN0PWFzeW5jIHI9Pntjb25zdHt0b3BpYzpuLHBheWxvYWQ6aSxhdHRlc3RhdGlvbjpzLHRyYW5zcG9ydFR5cGU6byxlbmNyeXB0ZWRJZDphfT1yLGM9aS5tZXRob2Q7aWYoIXRoaXMuc2hvdWxkSWdub3JlUGFpcmluZ1JlcXVlc3Qoe3RvcGljOm4scmVxdWVzdE1ldGhvZDpjfSkpc3dpdGNoKGMpe2Nhc2Uid2Nfc2Vzc2lvblByb3Bvc2UiOnJldHVybiBhd2FpdCB0aGlzLm9uU2Vzc2lvblByb3Bvc2VSZXF1ZXN0KHt0b3BpYzpuLHBheWxvYWQ6aSxhdHRlc3RhdGlvbjpzLGVuY3J5cHRlZElkOmF9KTtjYXNlIndjX3Nlc3Npb25TZXR0bGUiOnJldHVybiBhd2FpdCB0aGlzLm9uU2Vzc2lvblNldHRsZVJlcXVlc3QobixpKTtjYXNlIndjX3Nlc3Npb25VcGRhdGUiOnJldHVybiBhd2FpdCB0aGlzLm9uU2Vzc2lvblVwZGF0ZVJlcXVlc3QobixpKTtjYXNlIndjX3Nlc3Npb25FeHRlbmQiOnJldHVybiBhd2FpdCB0aGlzLm9uU2Vzc2lvbkV4dGVuZFJlcXVlc3QobixpKTtjYXNlIndjX3Nlc3Npb25QaW5nIjpyZXR1cm4gYXdhaXQgdGhpcy5vblNlc3Npb25QaW5nUmVxdWVzdChuLGkpO2Nhc2Uid2Nfc2Vzc2lvbkRlbGV0ZSI6cmV0dXJuIGF3YWl0IHRoaXMub25TZXNzaW9uRGVsZXRlUmVxdWVzdChuLGkpO2Nhc2Uid2Nfc2Vzc2lvblJlcXVlc3QiOnJldHVybiBhd2FpdCB0aGlzLm9uU2Vzc2lvblJlcXVlc3Qoe3RvcGljOm4scGF5bG9hZDppLGF0dGVzdGF0aW9uOnMsZW5jcnlwdGVkSWQ6YSx0cmFuc3BvcnRUeXBlOm99KTtjYXNlIndjX3Nlc3Npb25FdmVudCI6cmV0dXJuIGF3YWl0IHRoaXMub25TZXNzaW9uRXZlbnRSZXF1ZXN0KG4saSk7Y2FzZSJ3Y19zZXNzaW9uQXV0aGVudGljYXRlIjpyZXR1cm4gYXdhaXQgdGhpcy5vblNlc3Npb25BdXRoZW50aWNhdGVSZXF1ZXN0KHt0b3BpYzpuLHBheWxvYWQ6aSxhdHRlc3RhdGlvbjpzLGVuY3J5cHRlZElkOmEsdHJhbnNwb3J0VHlwZTpvfSk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5jbGllbnQubG9nZ2VyLmluZm8oYFVuc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kICR7Y31gKX19LHRoaXMub25SZWxheUV2ZW50UmVzcG9uc2U9YXN5bmMgcj0+e2NvbnN0e3RvcGljOm4scGF5bG9hZDppLHRyYW5zcG9ydFR5cGU6c309cixvPShhd2FpdCB0aGlzLmNsaWVudC5jb3JlLmhpc3RvcnkuZ2V0KG4saS5pZCkpLnJlcXVlc3QubWV0aG9kO3N3aXRjaChvKXtjYXNlIndjX3Nlc3Npb25Qcm9wb3NlIjpyZXR1cm4gdGhpcy5vblNlc3Npb25Qcm9wb3NlUmVzcG9uc2UobixpLHMpO2Nhc2Uid2Nfc2Vzc2lvblNldHRsZSI6cmV0dXJuIHRoaXMub25TZXNzaW9uU2V0dGxlUmVzcG9uc2UobixpKTtjYXNlIndjX3Nlc3Npb25VcGRhdGUiOnJldHVybiB0aGlzLm9uU2Vzc2lvblVwZGF0ZVJlc3BvbnNlKG4saSk7Y2FzZSJ3Y19zZXNzaW9uRXh0ZW5kIjpyZXR1cm4gdGhpcy5vblNlc3Npb25FeHRlbmRSZXNwb25zZShuLGkpO2Nhc2Uid2Nfc2Vzc2lvblBpbmciOnJldHVybiB0aGlzLm9uU2Vzc2lvblBpbmdSZXNwb25zZShuLGkpO2Nhc2Uid2Nfc2Vzc2lvblJlcXVlc3QiOnJldHVybiB0aGlzLm9uU2Vzc2lvblJlcXVlc3RSZXNwb25zZShuLGkpO2Nhc2Uid2Nfc2Vzc2lvbkF1dGhlbnRpY2F0ZSI6cmV0dXJuIHRoaXMub25TZXNzaW9uQXV0aGVudGljYXRlUmVzcG9uc2UobixpKTtkZWZhdWx0OnJldHVybiB0aGlzLmNsaWVudC5sb2dnZXIuaW5mbyhgVW5zdXBwb3J0ZWQgcmVzcG9uc2UgbWV0aG9kICR7b31gKX19LHRoaXMub25SZWxheUV2ZW50VW5rbm93blBheWxvYWQ9cj0+e2NvbnN0e3RvcGljOm59PXIse21lc3NhZ2U6aX09WSgiTUlTU0lOR19PUl9JTlZBTElEIixgRGVjb2RlZCBwYXlsb2FkIG9uIHRvcGljICR7bn0gaXMgbm90IGlkZW50aWZpYWJsZSBhcyBhIEpTT04tUlBDIHJlcXVlc3Qgb3IgYSByZXNwb25zZS5gKTt0aHJvdyBuZXcgRXJyb3IoaSl9LHRoaXMuc2hvdWxkSWdub3JlUGFpcmluZ1JlcXVlc3Q9cj0+e2NvbnN0e3RvcGljOm4scmVxdWVzdE1ldGhvZDppfT1yLHM9dGhpcy5leHBlY3RlZFBhaXJpbmdNZXRob2RNYXAuZ2V0KG4pO3JldHVybiFzfHxzLmluY2x1ZGVzKGkpPyExOiEhKHMuaW5jbHVkZXMoIndjX3Nlc3Npb25BdXRoZW50aWNhdGUiKSYmdGhpcy5jbGllbnQuZXZlbnRzLmxpc3RlbmVyQ291bnQoInNlc3Npb25fYXV0aGVudGljYXRlIik+MCl9LHRoaXMub25TZXNzaW9uUHJvcG9zZVJlcXVlc3Q9YXN5bmMgcj0+e2NvbnN0e3RvcGljOm4scGF5bG9hZDppLGF0dGVzdGF0aW9uOnMsZW5jcnlwdGVkSWQ6b309cix7cGFyYW1zOmEsaWQ6Y309aTt0cnl7Y29uc3QgdT10aGlzLmNsaWVudC5jb3JlLmV2ZW50Q2xpZW50LmdldEV2ZW50KHt0b3BpYzpufSk7dGhpcy5jbGllbnQuZXZlbnRzLmxpc3RlbmVyQ291bnQoInNlc3Npb25fcHJvcG9zYWwiKT09PTAmJihjb25zb2xlLndhcm4oIk5vIGxpc3RlbmVyIGZvciBzZXNzaW9uX3Byb3Bvc2FsIGV2ZW50IiksdT8uc2V0RXJyb3IoZHIucHJvcG9zYWxfbGlzdGVuZXJfbm90X2ZvdW5kKSksdGhpcy5pc1ZhbGlkQ29ubmVjdCh7Li4uaS5wYXJhbXN9KTtjb25zdCBsPWEuZXhwaXJ5VGltZXN0YW1wfHxTZShGZS53Y19zZXNzaW9uUHJvcG9zZS5yZXEudHRsKSxoPXtpZDpjLHBhaXJpbmdUb3BpYzpuLGV4cGlyeVRpbWVzdGFtcDpsLGF0dGVzdGF0aW9uOnMsZW5jcnlwdGVkSWQ6bywuLi5hfTthd2FpdCB0aGlzLnNldFByb3Bvc2FsKGMsaCk7Y29uc3QgcD1hd2FpdCB0aGlzLmdldFZlcmlmeUNvbnRleHQoe2F0dGVzdGF0aW9uSWQ6cyxoYXNoOnZ0KEpTT04uc3RyaW5naWZ5KGkpKSxlbmNyeXB0ZWRJZDpvLG1ldGFkYXRhOmgucHJvcG9zZXIubWV0YWRhdGF9KTt1Py5hZGRUcmFjZShLdC5lbWl0X3Nlc3Npb25fcHJvcG9zYWwpLHRoaXMuY2xpZW50LmV2ZW50cy5lbWl0KCJzZXNzaW9uX3Byb3Bvc2FsIix7aWQ6YyxwYXJhbXM6aCx2ZXJpZnlDb250ZXh0OnB9KX1jYXRjaCh1KXthd2FpdCB0aGlzLnNlbmRFcnJvcih7aWQ6Yyx0b3BpYzpuLGVycm9yOnUscnBjT3B0czpGZS53Y19zZXNzaW9uUHJvcG9zZS5hdXRvUmVqZWN0fSksdGhpcy5jbGllbnQubG9nZ2VyLmVycm9yKHUpfX0sdGhpcy5vblNlc3Npb25Qcm9wb3NlUmVzcG9uc2U9YXN5bmMocixuLGkpPT57Y29uc3R7aWQ6c309bjtpZihXdChuKSl7Y29uc3R7cmVzdWx0Om99PW47dGhpcy5jbGllbnQubG9nZ2VyLnRyYWNlKHt0eXBlOiJtZXRob2QiLG1ldGhvZDoib25TZXNzaW9uUHJvcG9zZVJlc3BvbnNlIixyZXN1bHQ6b30pO2NvbnN0IGE9dGhpcy5jbGllbnQucHJvcG9zYWwuZ2V0KHMpO3RoaXMuY2xpZW50LmxvZ2dlci50cmFjZSh7dHlwZToibWV0aG9kIixtZXRob2Q6Im9uU2Vzc2lvblByb3Bvc2VSZXNwb25zZSIscHJvcG9zYWw6YX0pO2NvbnN0IGM9YS5wcm9wb3Nlci5wdWJsaWNLZXk7dGhpcy5jbGllbnQubG9nZ2VyLnRyYWNlKHt0eXBlOiJtZXRob2QiLG1ldGhvZDoib25TZXNzaW9uUHJvcG9zZVJlc3BvbnNlIixzZWxmUHVibGljS2V5OmN9KTtjb25zdCB1PW8ucmVzcG9uZGVyUHVibGljS2V5O3RoaXMuY2xpZW50LmxvZ2dlci50cmFjZSh7dHlwZToibWV0aG9kIixtZXRob2Q6Im9uU2Vzc2lvblByb3Bvc2VSZXNwb25zZSIscGVlclB1YmxpY0tleTp1fSk7Y29uc3QgbD1hd2FpdCB0aGlzLmNsaWVudC5jb3JlLmNyeXB0by5nZW5lcmF0ZVNoYXJlZEtleShjLHUpO3RoaXMucGVuZGluZ1Nlc3Npb25zLnNldChzLHtzZXNzaW9uVG9waWM6bCxwYWlyaW5nVG9waWM6cixwcm9wb3NhbElkOnMscHVibGljS2V5OmN9KTtjb25zdCBoPWF3YWl0IHRoaXMuY2xpZW50LmNvcmUucmVsYXllci5zdWJzY3JpYmUobCx7dHJhbnNwb3J0VHlwZTppfSk7dGhpcy5jbGllbnQubG9nZ2VyLnRyYWNlKHt0eXBlOiJtZXRob2QiLG1ldGhvZDoib25TZXNzaW9uUHJvcG9zZVJlc3BvbnNlIixzdWJzY3JpcHRpb25JZDpofSksYXdhaXQgdGhpcy5jbGllbnQuY29yZS5wYWlyaW5nLmFjdGl2YXRlKHt0b3BpYzpyfSl9ZWxzZSBpZih4dChuKSl7YXdhaXQgdGhpcy5kZWxldGVQcm9wb3NhbChzKTtjb25zdCBvPWxlKCJzZXNzaW9uX2Nvbm5lY3QiLHMpO2lmKHRoaXMuZXZlbnRzLmxpc3RlbmVyQ291bnQobyk9PT0wKXRocm93IG5ldyBFcnJvcihgZW1pdHRpbmcgJHtvfSB3aXRob3V0IGFueSBsaXN0ZW5lcnMsIDk1NGApO3RoaXMuZXZlbnRzLmVtaXQobyx7ZXJyb3I6bi5lcnJvcn0pfX0sdGhpcy5vblNlc3Npb25TZXR0bGVSZXF1ZXN0PWFzeW5jKHIsbik9Pntjb25zdHtpZDppLHBhcmFtczpzfT1uO3RyeXt0aGlzLmlzVmFsaWRTZXNzaW9uU2V0dGxlUmVxdWVzdChzKTtjb25zdHtyZWxheTpvLGNvbnRyb2xsZXI6YSxleHBpcnk6YyxuYW1lc3BhY2VzOnUsc2Vzc2lvblByb3BlcnRpZXM6bCxzY29wZWRQcm9wZXJ0aWVzOmgsc2Vzc2lvbkNvbmZpZzpwLHByb3Bvc2FsUmVxdWVzdHNSZXNwb25zZXM6Z309bi5wYXJhbXMsdz1bLi4udGhpcy5wZW5kaW5nU2Vzc2lvbnMudmFsdWVzKCldLmZpbmQoTz0+Ty5zZXNzaW9uVG9waWM9PT1yKTtpZighdylyZXR1cm4gdGhpcy5jbGllbnQubG9nZ2VyLmVycm9yKGBQZW5kaW5nIHNlc3Npb24gbm90IGZvdW5kIGZvciB0b3BpYyAke3J9YCk7Y29uc3QgYj10aGlzLmNsaWVudC5wcm9wb3NhbC5nZXQody5wcm9wb3NhbElkKSx2PXt0b3BpYzpyLHJlbGF5Om8sZXhwaXJ5OmMsbmFtZXNwYWNlczp1LGFja25vd2xlZGdlZDohMCxwYWlyaW5nVG9waWM6dy5wYWlyaW5nVG9waWMscmVxdWlyZWROYW1lc3BhY2VzOmIucmVxdWlyZWROYW1lc3BhY2VzLG9wdGlvbmFsTmFtZXNwYWNlczpiLm9wdGlvbmFsTmFtZXNwYWNlcyxjb250cm9sbGVyOmEucHVibGljS2V5LHNlbGY6e3B1YmxpY0tleTp3LnB1YmxpY0tleSxtZXRhZGF0YTp0aGlzLmNsaWVudC5tZXRhZGF0YX0scGVlcjp7cHVibGljS2V5OmEucHVibGljS2V5LG1ldGFkYXRhOmEubWV0YWRhdGF9LC4uLmwmJntzZXNzaW9uUHJvcGVydGllczpsfSwuLi5oJiZ7c2NvcGVkUHJvcGVydGllczpofSwuLi5wJiZ7c2Vzc2lvbkNvbmZpZzpwfSx0cmFuc3BvcnRUeXBlOnBlLnJlbGF5LGF1dGhlbnRpY2F0aW9uOmc/LmF1dGhlbnRpY2F0aW9uLHdhbGxldFBheVJlc3VsdDpnPy53YWxsZXRQYXl9O2F3YWl0IHRoaXMuY2xpZW50LnNlc3Npb24uc2V0KHYudG9waWMsdiksYXdhaXQgdGhpcy5zZXRFeHBpcnkodi50b3BpYyx2LmV4cGlyeSksYXdhaXQgdGhpcy5jbGllbnQuY29yZS5wYWlyaW5nLnVwZGF0ZU1ldGFkYXRhKHt0b3BpYzp3LnBhaXJpbmdUb3BpYyxtZXRhZGF0YTp2LnBlZXIubWV0YWRhdGF9KSx0aGlzLnBlbmRpbmdTZXNzaW9ucy5kZWxldGUody5wcm9wb3NhbElkKSx0aGlzLmRlbGV0ZVByb3Bvc2FsKHcucHJvcG9zYWxJZCwhMSksdGhpcy5jbGVhbnVwRHVwbGljYXRlUGFpcmluZ3ModiksYXdhaXQgdGhpcy5zZW5kUmVzdWx0KHtpZDpuLmlkLHRvcGljOnIsdGhyb3dPbkZhaWxlZFB1Ymxpc2g6ITAscmVzdWx0OiEwfSksdGhpcy5jbGllbnQuZXZlbnRzLmVtaXQoInNlc3Npb25fY29ubmVjdCIse3Nlc3Npb246dn0pLHRoaXMuZXZlbnRzLmVtaXQobGUoInNlc3Npb25fY29ubmVjdCIsdy5wcm9wb3NhbElkKSx7c2Vzc2lvbjp2fSl9Y2F0Y2gobyl7YXdhaXQgdGhpcy5zZW5kRXJyb3Ioe2lkOmksdG9waWM6cixlcnJvcjpvfSksdGhpcy5jbGllbnQubG9nZ2VyLmVycm9yKG8pfX0sdGhpcy5vblNlc3Npb25TZXR0bGVSZXNwb25zZT1hc3luYyhyLG4pPT57Y29uc3R7aWQ6aX09bjtXdChuKT8oYXdhaXQgdGhpcy5jbGllbnQuc2Vzc2lvbi51cGRhdGUocix7YWNrbm93bGVkZ2VkOiEwfSksdGhpcy5ldmVudHMuZW1pdChsZSgic2Vzc2lvbl9hcHByb3ZlIixpKSx7fSkpOnh0KG4pJiYoYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKHt0b3BpYzpyLGVtaXRFdmVudDohMX0pLHRoaXMuZXZlbnRzLmVtaXQobGUoInNlc3Npb25fYXBwcm92ZSIsaSkse2Vycm9yOm4uZXJyb3J9KSl9LHRoaXMub25TZXNzaW9uVXBkYXRlUmVxdWVzdD1hc3luYyhyLG4pPT57Y29uc3R7cGFyYW1zOmksaWQ6c309bjt0cnl7Y29uc3Qgbz1gJHtyfV9zZXNzaW9uX3VwZGF0ZWAsYT1EaS5nZXQobyk7aWYoYSYmdGhpcy5pc1JlcXVlc3RPdXRPZlN5bmMoYSxzKSl7dGhpcy5jbGllbnQubG9nZ2VyLndhcm4oYERpc2NhcmRpbmcgb3V0IG9mIHN5bmMgcmVxdWVzdCAtICR7c31gKSx0aGlzLnNlbmRFcnJvcih7aWQ6cyx0b3BpYzpyLGVycm9yOnllKCJJTlZBTElEX1VQREFURV9SRVFVRVNUIil9KTtyZXR1cm59YXdhaXQgdGhpcy5pc1ZhbGlkVXBkYXRlKHt0b3BpYzpyLC4uLml9KTtjb25zdCBjPXRoaXMuY2xpZW50LnNlc3Npb24uZ2V0KHIpO2lmKGMucGVlci5wdWJsaWNLZXkhPT1jLmNvbnRyb2xsZXIpdGhyb3cgeWUoIlVOQVVUSE9SSVpFRF9VUERBVEVfUkVRVUVTVCIpO3RyeXtEaS5zZXQobyxzKSxhd2FpdCB0aGlzLmNsaWVudC5zZXNzaW9uLnVwZGF0ZShyLHtuYW1lc3BhY2VzOmkubmFtZXNwYWNlc30pLGF3YWl0IHRoaXMuc2VuZFJlc3VsdCh7aWQ6cyx0b3BpYzpyLHJlc3VsdDohMH0pfWNhdGNoKHUpe3Rocm93IERpLmRlbGV0ZShvKSx1fXRoaXMuY2xpZW50LmV2ZW50cy5lbWl0KCJzZXNzaW9uX3VwZGF0ZSIse2lkOnMsdG9waWM6cixwYXJhbXM6aX0pfWNhdGNoKG8pe2F3YWl0IHRoaXMuc2VuZEVycm9yKHtpZDpzLHRvcGljOnIsZXJyb3I6b30pLHRoaXMuY2xpZW50LmxvZ2dlci5lcnJvcihvKX19LHRoaXMuaXNSZXF1ZXN0T3V0T2ZTeW5jPShyLG4pPT5uLnRvU3RyaW5nKCkuc2xpY2UoMCwtMyk8ci50b1N0cmluZygpLnNsaWNlKDAsLTMpLHRoaXMub25TZXNzaW9uVXBkYXRlUmVzcG9uc2U9KHIsbik9Pntjb25zdHtpZDppfT1uLHM9bGUoInNlc3Npb25fdXBkYXRlIixpKTtpZih0aGlzLmV2ZW50cy5saXN0ZW5lckNvdW50KHMpPT09MCl0aHJvdyBuZXcgRXJyb3IoYGVtaXR0aW5nICR7c30gd2l0aG91dCBhbnkgbGlzdGVuZXJzYCk7V3Qobik/dGhpcy5ldmVudHMuZW1pdChsZSgic2Vzc2lvbl91cGRhdGUiLGkpLHt9KTp4dChuKSYmdGhpcy5ldmVudHMuZW1pdChsZSgic2Vzc2lvbl91cGRhdGUiLGkpLHtlcnJvcjpuLmVycm9yfSl9LHRoaXMub25TZXNzaW9uRXh0ZW5kUmVxdWVzdD1hc3luYyhyLG4pPT57Y29uc3R7aWQ6aX09bjt0cnl7YXdhaXQgdGhpcy5pc1ZhbGlkRXh0ZW5kKHt0b3BpYzpyfSksYXdhaXQgdGhpcy5zZXRFeHBpcnkocixTZShLbikpLGF3YWl0IHRoaXMuc2VuZFJlc3VsdCh7aWQ6aSx0b3BpYzpyLHJlc3VsdDohMH0pLHRoaXMuY2xpZW50LmV2ZW50cy5lbWl0KCJzZXNzaW9uX2V4dGVuZCIse2lkOmksdG9waWM6cn0pfWNhdGNoKHMpe2F3YWl0IHRoaXMuc2VuZEVycm9yKHtpZDppLHRvcGljOnIsZXJyb3I6c30pLHRoaXMuY2xpZW50LmxvZ2dlci5lcnJvcihzKX19LHRoaXMub25TZXNzaW9uRXh0ZW5kUmVzcG9uc2U9KHIsbik9Pntjb25zdHtpZDppfT1uLHM9bGUoInNlc3Npb25fZXh0ZW5kIixpKTtpZih0aGlzLmV2ZW50cy5saXN0ZW5lckNvdW50KHMpPT09MCl0aHJvdyBuZXcgRXJyb3IoYGVtaXR0aW5nICR7c30gd2l0aG91dCBhbnkgbGlzdGVuZXJzYCk7V3Qobik/dGhpcy5ldmVudHMuZW1pdChsZSgic2Vzc2lvbl9leHRlbmQiLGkpLHt9KTp4dChuKSYmdGhpcy5ldmVudHMuZW1pdChsZSgic2Vzc2lvbl9leHRlbmQiLGkpLHtlcnJvcjpuLmVycm9yfSl9LHRoaXMub25TZXNzaW9uUGluZ1JlcXVlc3Q9YXN5bmMocixuKT0+e2NvbnN0e2lkOml9PW47dHJ5e3RoaXMuaXNWYWxpZFBpbmcoe3RvcGljOnJ9KSxhd2FpdCB0aGlzLnNlbmRSZXN1bHQoe2lkOmksdG9waWM6cixyZXN1bHQ6ITAsdGhyb3dPbkZhaWxlZFB1Ymxpc2g6ITB9KSx0aGlzLmNsaWVudC5ldmVudHMuZW1pdCgic2Vzc2lvbl9waW5nIix7aWQ6aSx0b3BpYzpyfSl9Y2F0Y2gocyl7YXdhaXQgdGhpcy5zZW5kRXJyb3Ioe2lkOmksdG9waWM6cixlcnJvcjpzfSksdGhpcy5jbGllbnQubG9nZ2VyLmVycm9yKHMpfX0sdGhpcy5vblNlc3Npb25QaW5nUmVzcG9uc2U9KHIsbik9Pntjb25zdHtpZDppfT1uLHM9bGUoInNlc3Npb25fcGluZyIsaSk7c2V0VGltZW91dCgoKT0+e2lmKHRoaXMuZXZlbnRzLmxpc3RlbmVyQ291bnQocyk9PT0wKXRocm93IG5ldyBFcnJvcihgZW1pdHRpbmcgJHtzfSB3aXRob3V0IGFueSBsaXN0ZW5lcnMgMjE3NmApO1d0KG4pP3RoaXMuZXZlbnRzLmVtaXQobGUoInNlc3Npb25fcGluZyIsaSkse30pOnh0KG4pJiZ0aGlzLmV2ZW50cy5lbWl0KGxlKCJzZXNzaW9uX3BpbmciLGkpLHtlcnJvcjpuLmVycm9yfSl9LDUwMCl9LHRoaXMub25TZXNzaW9uRGVsZXRlUmVxdWVzdD1hc3luYyhyLG4pPT57Y29uc3R7aWQ6aX09bjt0cnl7YXdhaXQgdGhpcy5pc1ZhbGlkRGlzY29ubmVjdCh7dG9waWM6cixyZWFzb246bi5wYXJhbXN9KSx0aGlzLmNsZWFudXBQZW5kaW5nU2VudFJlcXVlc3RzRm9yVG9waWMoe3RvcGljOnIsZXJyb3I6eWUoIlVTRVJfRElTQ09OTkVDVEVEIil9KSxhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oe3RvcGljOnIsaWQ6aX0pfWNhdGNoKHMpe3RoaXMuY2xpZW50LmxvZ2dlci5lcnJvcihzKX19LHRoaXMub25TZXNzaW9uUmVxdWVzdD1hc3luYyByPT57Y29uc3R7dG9waWM6bixwYXlsb2FkOmksYXR0ZXN0YXRpb246cyxlbmNyeXB0ZWRJZDpvLHRyYW5zcG9ydFR5cGU6YX09cix7aWQ6YyxwYXJhbXM6dX09aTt0cnl7YXdhaXQgdGhpcy5pc1ZhbGlkUmVxdWVzdCh7dG9waWM6biwuLi51fSk7Y29uc3QgbD10aGlzLmNsaWVudC5zZXNzaW9uLmdldChuKSxoPWF3YWl0IHRoaXMuZ2V0VmVyaWZ5Q29udGV4dCh7YXR0ZXN0YXRpb25JZDpzLGhhc2g6dnQoSlNPTi5zdHJpbmdpZnkoUnQoIndjX3Nlc3Npb25SZXF1ZXN0Iix1LGMpKSksZW5jcnlwdGVkSWQ6byxtZXRhZGF0YTpsLnBlZXIubWV0YWRhdGEsdHJhbnNwb3J0VHlwZTphfSkscD17aWQ6Yyx0b3BpYzpuLHBhcmFtczp1LHZlcmlmeUNvbnRleHQ6aH07YXdhaXQgdGhpcy5zZXRQZW5kaW5nU2Vzc2lvblJlcXVlc3QocCksYT09PXBlLmxpbmtfbW9kZSYmbC5wZWVyLm1ldGFkYXRhLnJlZGlyZWN0Py51bml2ZXJzYWwmJnRoaXMuY2xpZW50LmNvcmUuYWRkTGlua01vZGVTdXBwb3J0ZWRBcHAobC5wZWVyLm1ldGFkYXRhLnJlZGlyZWN0Py51bml2ZXJzYWwpLHRoaXMuY2xpZW50LnNpZ25Db25maWc/LmRpc2FibGVSZXF1ZXN0UXVldWU/dGhpcy5lbWl0U2Vzc2lvblJlcXVlc3QocCk6KHRoaXMuYWRkU2Vzc2lvblJlcXVlc3RUb1Nlc3Npb25SZXF1ZXN0UXVldWUocCksdGhpcy5wcm9jZXNzU2Vzc2lvblJlcXVlc3RRdWV1ZSgpKX1jYXRjaChsKXthd2FpdCB0aGlzLnNlbmRFcnJvcih7aWQ6Yyx0b3BpYzpuLGVycm9yOmx9KSx0aGlzLmNsaWVudC5sb2dnZXIuZXJyb3IobCl9fSx0aGlzLm9uU2Vzc2lvblJlcXVlc3RSZXNwb25zZT0ocixuKT0+e2NvbnN0e2lkOml9PW4scz1sZSgic2Vzc2lvbl9yZXF1ZXN0IixpKTtpZih0aGlzLmV2ZW50cy5saXN0ZW5lckNvdW50KHMpPT09MCl0aHJvdyBuZXcgRXJyb3IoYGVtaXR0aW5nICR7c30gd2l0aG91dCBhbnkgbGlzdGVuZXJzYCk7V3Qobik/dGhpcy5ldmVudHMuZW1pdChsZSgic2Vzc2lvbl9yZXF1ZXN0IixpKSx7cmVzdWx0Om4ucmVzdWx0fSk6eHQobikmJnRoaXMuZXZlbnRzLmVtaXQobGUoInNlc3Npb25fcmVxdWVzdCIsaSkse2Vycm9yOm4uZXJyb3J9KX0sdGhpcy5vblNlc3Npb25FdmVudFJlcXVlc3Q9YXN5bmMocixuKT0+e2NvbnN0e2lkOmkscGFyYW1zOnN9PW47dHJ5e2NvbnN0IG89YCR7cn1fc2Vzc2lvbl9ldmVudF8ke3MuZXZlbnQubmFtZX1gLGE9RGkuZ2V0KG8pO2lmKGEmJnRoaXMuaXNSZXF1ZXN0T3V0T2ZTeW5jKGEsaSkpe3RoaXMuY2xpZW50LmxvZ2dlci5pbmZvKGBEaXNjYXJkaW5nIG91dCBvZiBzeW5jIHJlcXVlc3QgLSAke2l9YCk7cmV0dXJufXRoaXMuaXNWYWxpZEVtaXQoe3RvcGljOnIsLi4uc30pLHRoaXMuY2xpZW50LmV2ZW50cy5lbWl0KCJzZXNzaW9uX2V2ZW50Iix7aWQ6aSx0b3BpYzpyLHBhcmFtczpzfSksRGkuc2V0KG8saSl9Y2F0Y2gobyl7YXdhaXQgdGhpcy5zZW5kRXJyb3Ioe2lkOmksdG9waWM6cixlcnJvcjpvfSksdGhpcy5jbGllbnQubG9nZ2VyLmVycm9yKG8pfX0sdGhpcy5vblNlc3Npb25BdXRoZW50aWNhdGVSZXNwb25zZT0ocixuKT0+e2NvbnN0e2lkOml9PW47dGhpcy5jbGllbnQubG9nZ2VyLnRyYWNlKHt0eXBlOiJtZXRob2QiLG1ldGhvZDoib25TZXNzaW9uQXV0aGVudGljYXRlUmVzcG9uc2UiLHRvcGljOnIscGF5bG9hZDpufSksV3Qobik/dGhpcy5ldmVudHMuZW1pdChsZSgic2Vzc2lvbl9yZXF1ZXN0IixpKSx7cmVzdWx0Om4ucmVzdWx0fSk6eHQobikmJnRoaXMuZXZlbnRzLmVtaXQobGUoInNlc3Npb25fcmVxdWVzdCIsaSkse2Vycm9yOm4uZXJyb3J9KX0sdGhpcy5vblNlc3Npb25BdXRoZW50aWNhdGVSZXF1ZXN0PWFzeW5jIHI9Pntjb25zdHt0b3BpYzpuLHBheWxvYWQ6aSxhdHRlc3RhdGlvbjpzLGVuY3J5cHRlZElkOm8sdHJhbnNwb3J0VHlwZTphfT1yO3RyeXtjb25zdHtyZXF1ZXN0ZXI6YyxhdXRoUGF5bG9hZDp1LGV4cGlyeVRpbWVzdGFtcDpsfT1pLnBhcmFtcyxoPWF3YWl0IHRoaXMuZ2V0VmVyaWZ5Q29udGV4dCh7YXR0ZXN0YXRpb25JZDpzLGhhc2g6dnQoSlNPTi5zdHJpbmdpZnkoaSkpLGVuY3J5cHRlZElkOm8sbWV0YWRhdGE6Yy5tZXRhZGF0YSx0cmFuc3BvcnRUeXBlOmF9KSxwPXtyZXF1ZXN0ZXI6YyxwYWlyaW5nVG9waWM6bixpZDppLmlkLGF1dGhQYXlsb2FkOnUsdmVyaWZ5Q29udGV4dDpoLGV4cGlyeVRpbWVzdGFtcDpsfTthd2FpdCB0aGlzLnNldEF1dGhSZXF1ZXN0KGkuaWQse3JlcXVlc3Q6cCxwYWlyaW5nVG9waWM6bix0cmFuc3BvcnRUeXBlOmF9KSxhPT09cGUubGlua19tb2RlJiZjLm1ldGFkYXRhLnJlZGlyZWN0Py51bml2ZXJzYWwmJnRoaXMuY2xpZW50LmNvcmUuYWRkTGlua01vZGVTdXBwb3J0ZWRBcHAoYy5tZXRhZGF0YS5yZWRpcmVjdC51bml2ZXJzYWwpLHRoaXMuY2xpZW50LmV2ZW50cy5lbWl0KCJzZXNzaW9uX2F1dGhlbnRpY2F0ZSIse3RvcGljOm4scGFyYW1zOmkucGFyYW1zLGlkOmkuaWQsdmVyaWZ5Q29udGV4dDpofSl9Y2F0Y2goYyl7dGhpcy5jbGllbnQubG9nZ2VyLmVycm9yKGMpO2NvbnN0IHU9aS5wYXJhbXMucmVxdWVzdGVyLnB1YmxpY0tleSxsPWF3YWl0IHRoaXMuY2xpZW50LmNvcmUuY3J5cHRvLmdlbmVyYXRlS2V5UGFpcigpLGg9dGhpcy5nZXRBcHBMaW5rSWZFbmFibGVkKGkucGFyYW1zLnJlcXVlc3Rlci5tZXRhZGF0YSxhKSxwPXt0eXBlOnhyLHJlY2VpdmVyUHVibGljS2V5OnUsc2VuZGVyUHVibGljS2V5Omx9O2F3YWl0IHRoaXMuc2VuZEVycm9yKHtpZDppLmlkLHRvcGljOm4sZXJyb3I6YyxlbmNvZGVPcHRzOnAscnBjT3B0czpGZS53Y19zZXNzaW9uQXV0aGVudGljYXRlLmF1dG9SZWplY3QsYXBwTGluazpofSl9fSx0aGlzLmFkZFNlc3Npb25SZXF1ZXN0VG9TZXNzaW9uUmVxdWVzdFF1ZXVlPXI9Pnt0aGlzLnNlc3Npb25SZXF1ZXN0UXVldWUucXVldWUucHVzaChyKX0sdGhpcy5jbGVhbnVwQWZ0ZXJSZXNwb25zZT1yPT57dGhpcy5kZWxldGVQZW5kaW5nU2Vzc2lvblJlcXVlc3Qoci5yZXNwb25zZS5pZCx7bWVzc2FnZToiZnVsZmlsbGVkIixjb2RlOjB9KSxzZXRUaW1lb3V0KCgpPT57dGhpcy5zZXNzaW9uUmVxdWVzdFF1ZXVlLnN0YXRlPWp0LmlkbGUsdGhpcy5wcm9jZXNzU2Vzc2lvblJlcXVlc3RRdWV1ZSgpfSxHLnRvTWlsaXNlY29uZHModGhpcy5yZXF1ZXN0UXVldWVEZWxheSkpfSx0aGlzLmNsZWFudXBQZW5kaW5nU2VudFJlcXVlc3RzRm9yVG9waWM9KHt0b3BpYzpyLGVycm9yOm59KT0+e2NvbnN0IGk9dGhpcy5jbGllbnQuY29yZS5oaXN0b3J5LnBlbmRpbmc7aS5sZW5ndGg+MCYmaS5maWx0ZXIocz0+cy50b3BpYz09PXImJnMucmVxdWVzdC5tZXRob2Q9PT0id2Nfc2Vzc2lvblJlcXVlc3QiKS5mb3JFYWNoKHM9Pnt0aGlzLmV2ZW50cy5lbWl0KGxlKCJzZXNzaW9uX3JlcXVlc3QiLHMucmVxdWVzdC5pZCkse2Vycm9yOm59KX0pfSx0aGlzLnByb2Nlc3NTZXNzaW9uUmVxdWVzdFF1ZXVlPSgpPT57aWYodGhpcy5zZXNzaW9uUmVxdWVzdFF1ZXVlLnN0YXRlPT09anQuYWN0aXZlKXt0aGlzLmNsaWVudC5sb2dnZXIuaW5mbygic2Vzc2lvbiByZXF1ZXN0IHF1ZXVlIGlzIGFscmVhZHkgYWN0aXZlLiIpO3JldHVybn1jb25zdCByPXRoaXMuc2Vzc2lvblJlcXVlc3RRdWV1ZS5xdWV1ZVswXTtpZighcil7dGhpcy5jbGllbnQubG9nZ2VyLmluZm8oInNlc3Npb24gcmVxdWVzdCBxdWV1ZSBpcyBlbXB0eS4iKTtyZXR1cm59dHJ5e3RoaXMuZW1pdFNlc3Npb25SZXF1ZXN0KHIpfWNhdGNoKG4pe3RoaXMuY2xpZW50LmxvZ2dlci5lcnJvcihuKX19LHRoaXMuZW1pdFNlc3Npb25SZXF1ZXN0PXI9PntpZih0aGlzLmVtaXR0ZWRTZXNzaW9uUmVxdWVzdHMuaGFzKHIuaWQpKXt0aGlzLmNsaWVudC5sb2dnZXIud2Fybih7aWQ6ci5pZH0sYFNraXBwaW5nIGVtaXR0aW5nIFxgc2Vzc2lvbl9yZXF1ZXN0XGAgZXZlbnQgZm9yIGR1cGxpY2F0ZSByZXF1ZXN0LiBpZDogJHtyLmlkfWApO3JldHVybn10aGlzLnNlc3Npb25SZXF1ZXN0UXVldWUuc3RhdGU9anQuYWN0aXZlLHRoaXMuZW1pdHRlZFNlc3Npb25SZXF1ZXN0cy5hZGQoci5pZCksdGhpcy5jbGllbnQuZXZlbnRzLmVtaXQoInNlc3Npb25fcmVxdWVzdCIscil9LHRoaXMuY2xlYW51cEluUHJvZ3Jlc3M9ITEsdGhpcy5jbGVhbnVwT3JwaGFuZWRTdWJzY3JpcHRpb25zPWFzeW5jKCk9Pntjb25zdCByPXRoaXMuY2xpZW50LmNvcmUucmVsYXllci5zdWJzY3JpYmVyLnRvcGljcztpZihyLmxlbmd0aD09PTApcmV0dXJuO2NvbnN0IG49bmV3IFNldCh0aGlzLmNsaWVudC5zZXNzaW9uLmtleXMpLGk9bmV3IFNldCh0aGlzLmNsaWVudC5jb3JlLnBhaXJpbmcucGFpcmluZ3Mua2V5cykscz1uZXcgU2V0KFsuLi50aGlzLnBlbmRpbmdTZXNzaW9ucy52YWx1ZXMoKV0ubWFwKGE9PmEuc2Vzc2lvblRvcGljKSk7bGV0IG87aWYodGhpcy5jbGllbnQuYXV0aC5hdXRoS2V5cy5rZXlzLmluY2x1ZGVzKGtyKSl7Y29uc3R7cmVzcG9uc2VUb3BpYzphfT10aGlzLmNsaWVudC5hdXRoLmF1dGhLZXlzLmdldChrcik7bz1hfWZvcihjb25zdCBhIG9mIHIpaWYoIW4uaGFzKGEpJiYhaS5oYXMoYSkmJiFzLmhhcyhhKSYmYSE9PW8pe3RoaXMuY2xpZW50LmxvZ2dlci5pbmZvKGBDbGVhbmluZyB1cCBvcnBoYW5lZCBzdWJzY3JpYmVyIHRvcGljOiAke2F9YCk7dHJ5e2F3YWl0IHRoaXMuY2xpZW50LmNvcmUucmVsYXllci5zdWJzY3JpYmVyLnVuc3Vic2NyaWJlKGEpfWNhdGNoKGMpe3RoaXMuY2xpZW50LmxvZ2dlci53YXJuKGMsYEZhaWxlZCB0byBjbGVhbiB1cCBvcnBoYW5lZCBzdWJzY3JpcHRpb246ICR7YX1gKX19fSx0aGlzLm9uUGFpcmluZ0NyZWF0ZWQ9cj0+e2lmKHIubWV0aG9kcyYmdGhpcy5leHBlY3RlZFBhaXJpbmdNZXRob2RNYXAuc2V0KHIudG9waWMsci5tZXRob2RzKSxyLmFjdGl2ZSlyZXR1cm47Y29uc3Qgbj10aGlzLmNsaWVudC5wcm9wb3NhbC5nZXRBbGwoKS5maW5kKGk9PmkucGFpcmluZ1RvcGljPT09ci50b3BpYyk7biYmdGhpcy5vblNlc3Npb25Qcm9wb3NlUmVxdWVzdCh7dG9waWM6ci50b3BpYyxwYXlsb2FkOlJ0KCJ3Y19zZXNzaW9uUHJvcG9zZSIsey4uLm4scmVxdWlyZWROYW1lc3BhY2VzOm4ucmVxdWlyZWROYW1lc3BhY2VzLG9wdGlvbmFsTmFtZXNwYWNlczpuLm9wdGlvbmFsTmFtZXNwYWNlcyxyZWxheXM6bi5yZWxheXMscHJvcG9zZXI6bi5wcm9wb3NlcixzZXNzaW9uUHJvcGVydGllczpuLnNlc3Npb25Qcm9wZXJ0aWVzLHNjb3BlZFByb3BlcnRpZXM6bi5zY29wZWRQcm9wZXJ0aWVzfSxuLmlkKSxhdHRlc3RhdGlvbjpuLmF0dGVzdGF0aW9uLGVuY3J5cHRlZElkOm4uZW5jcnlwdGVkSWR9KX0sdGhpcy5pc1ZhbGlkQ29ubmVjdD1hc3luYyByPT57aWYoIW50KHIpKXtjb25zdHttZXNzYWdlOnV9PVkoIk1JU1NJTkdfT1JfSU5WQUxJRCIsYGNvbm5lY3QoKSBwYXJhbXM6ICR7SlNPTi5zdHJpbmdpZnkocil9YCk7dGhyb3cgbmV3IEVycm9yKHUpfWNvbnN0e3BhaXJpbmdUb3BpYzpuLHJlcXVpcmVkTmFtZXNwYWNlczppLG9wdGlvbmFsTmFtZXNwYWNlczpzLHNlc3Npb25Qcm9wZXJ0aWVzOm8sc2NvcGVkUHJvcGVydGllczphLHJlbGF5czpjfT1yO2lmKEJlKG4pfHxhd2FpdCB0aGlzLmlzVmFsaWRQYWlyaW5nVG9waWMobiksIU1TKGMpKXtjb25zdHttZXNzYWdlOnV9PVkoIk1JU1NJTkdfT1JfSU5WQUxJRCIsYGNvbm5lY3QoKSByZWxheXM6ICR7Y31gKTt0aHJvdyBuZXcgRXJyb3IodSl9aWYoaSYmIUJlKGkpJiZucihpKSE9PTApe2NvbnN0IHU9InJlcXVpcmVkTmFtZXNwYWNlcyBhcmUgZGVwcmVjYXRlZCBhbmQgYXJlIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgdG8gb3B0aW9uYWxOYW1lc3BhY2VzIjtbImZhdGFsIiwiZXJyb3IiLCJzaWxlbnQiXS5pbmNsdWRlcyh0aGlzLmNsaWVudC5sb2dnZXIubGV2ZWwpP2NvbnNvbGUud2Fybih1KTp0aGlzLmNsaWVudC5sb2dnZXIud2Fybih1KSx0aGlzLnZhbGlkYXRlTmFtZXNwYWNlcyhpLCJyZXF1aXJlZE5hbWVzcGFjZXMiKX1pZihzJiYhQmUocykmJm5yKHMpIT09MCYmdGhpcy52YWxpZGF0ZU5hbWVzcGFjZXMocywib3B0aW9uYWxOYW1lc3BhY2VzIiksbyYmIUJlKG8pJiZ0aGlzLnZhbGlkYXRlU2Vzc2lvblByb3BzKG8sInNlc3Npb25Qcm9wZXJ0aWVzIiksYSYmIUJlKGEpKXt0aGlzLnZhbGlkYXRlU2Vzc2lvblByb3BzKGEsInNjb3BlZFByb3BlcnRpZXMiKTtjb25zdCB1PU9iamVjdC5rZXlzKGl8fHt9KS5jb25jYXQoT2JqZWN0LmtleXMoc3x8e30pKTtpZighT2JqZWN0LmtleXMoYSkuZXZlcnkobD0+dS5pbmNsdWRlcyhsLnNwbGl0KCI6IilbMF0pKSl0aHJvdyBuZXcgRXJyb3IoYFNjb3BlZCBwcm9wZXJ0aWVzIG11c3QgYmUgYSBzdWJzZXQgb2YgcmVxdWlyZWQvb3B0aW9uYWwgbmFtZXNwYWNlcywgcmVjZWl2ZWQ6ICR7SlNPTi5zdHJpbmdpZnkoYSl9LCByZXF1aXJlZC9vcHRpb25hbCBuYW1lc3BhY2VzOiAke0pTT04uc3RyaW5naWZ5KHUpfWApfX0sdGhpcy52YWxpZGF0ZU5hbWVzcGFjZXM9KHIsbik9Pntjb25zdCBpPWtTKHIsImNvbm5lY3QoKSIsbik7aWYoaSl0aHJvdyBuZXcgRXJyb3IoaS5tZXNzYWdlKX0sdGhpcy5pc1ZhbGlkQXBwcm92ZT1hc3luYyByPT57aWYoIW50KHIpKXRocm93IG5ldyBFcnJvcihZKCJNSVNTSU5HX09SX0lOVkFMSUQiLGBhcHByb3ZlKCkgcGFyYW1zOiAke3J9YCkubWVzc2FnZSk7Y29uc3R7aWQ6bixuYW1lc3BhY2VzOmkscmVsYXlQcm90b2NvbDpzLHNlc3Npb25Qcm9wZXJ0aWVzOm8sc2NvcGVkUHJvcGVydGllczphfT1yO3RoaXMuY2hlY2tSZWNlbnRseURlbGV0ZWQobiksYXdhaXQgdGhpcy5pc1ZhbGlkUHJvcG9zYWxJZChuKTtjb25zdCBjPXRoaXMuY2xpZW50LnByb3Bvc2FsLmdldChuKSx1PSRhKGksImFwcHJvdmUoKSIpO2lmKHUpdGhyb3cgbmV3IEVycm9yKHUubWVzc2FnZSk7Y29uc3QgbD1CaChjLnJlcXVpcmVkTmFtZXNwYWNlcyxpLCJhcHByb3ZlKCkiKTtpZihsKXRocm93IG5ldyBFcnJvcihsLm1lc3NhZ2UpO2lmKCFBZShzLCEwKSl7Y29uc3R7bWVzc2FnZTpofT1ZKCJNSVNTSU5HX09SX0lOVkFMSUQiLGBhcHByb3ZlKCkgcmVsYXlQcm90b2NvbDogJHtzfWApO3Rocm93IG5ldyBFcnJvcihoKX1pZihvJiYhQmUobykmJnRoaXMudmFsaWRhdGVTZXNzaW9uUHJvcHMobywic2Vzc2lvblByb3BlcnRpZXMiKSxhJiYhQmUoYSkpe3RoaXMudmFsaWRhdGVTZXNzaW9uUHJvcHMoYSwic2NvcGVkUHJvcGVydGllcyIpO2NvbnN0IGg9bmV3IFNldChPYmplY3Qua2V5cyhpKSk7aWYoIU9iamVjdC5rZXlzKGEpLmV2ZXJ5KHA9PmguaGFzKHAuc3BsaXQoIjoiKVswXSkpKXRocm93IG5ldyBFcnJvcihgU2NvcGVkIHByb3BlcnRpZXMgbXVzdCBiZSBhIHN1YnNldCBvZiBhcHByb3ZlZCBuYW1lc3BhY2VzLCByZWNlaXZlZDogJHtKU09OLnN0cmluZ2lmeShhKX0sIGFwcHJvdmVkIG5hbWVzcGFjZXM6ICR7QXJyYXkuZnJvbShoKS5qb2luKCIsICIpfWApfX0sdGhpcy5pc1ZhbGlkUmVqZWN0PWFzeW5jIHI9PntpZighbnQocikpe2NvbnN0e21lc3NhZ2U6c309WSgiTUlTU0lOR19PUl9JTlZBTElEIixgcmVqZWN0KCkgcGFyYW1zOiAke3J9YCk7dGhyb3cgbmV3IEVycm9yKHMpfWNvbnN0e2lkOm4scmVhc29uOml9PXI7aWYodGhpcy5jaGVja1JlY2VudGx5RGVsZXRlZChuKSxhd2FpdCB0aGlzLmlzVmFsaWRQcm9wb3NhbElkKG4pLCFqUyhpKSl7Y29uc3R7bWVzc2FnZTpzfT1ZKCJNSVNTSU5HX09SX0lOVkFMSUQiLGByZWplY3QoKSByZWFzb246ICR7SlNPTi5zdHJpbmdpZnkoaSl9YCk7dGhyb3cgbmV3IEVycm9yKHMpfX0sdGhpcy5pc1ZhbGlkU2Vzc2lvblNldHRsZVJlcXVlc3Q9cj0+e2lmKCFudChyKSl7Y29uc3R7bWVzc2FnZTp1fT1ZKCJNSVNTSU5HX09SX0lOVkFMSUQiLGBvblNlc3Npb25TZXR0bGVSZXF1ZXN0KCkgcGFyYW1zOiAke3J9YCk7dGhyb3cgbmV3IEVycm9yKHUpfWNvbnN0e3JlbGF5Om4sY29udHJvbGxlcjppLG5hbWVzcGFjZXM6cyxleHBpcnk6b309cjtpZighQmcobikpe2NvbnN0e21lc3NhZ2U6dX09WSgiTUlTU0lOR19PUl9JTlZBTElEIiwib25TZXNzaW9uU2V0dGxlUmVxdWVzdCgpIHJlbGF5IHByb3RvY29sIHNob3VsZCBiZSBhIHN0cmluZyIpO3Rocm93IG5ldyBFcnJvcih1KX1jb25zdCBhPVJTKGksIm9uU2Vzc2lvblNldHRsZVJlcXVlc3QoKSIpO2lmKGEpdGhyb3cgbmV3IEVycm9yKGEubWVzc2FnZSk7Y29uc3QgYz0kYShzLCJvblNlc3Npb25TZXR0bGVSZXF1ZXN0KCkiKTtpZihjKXRocm93IG5ldyBFcnJvcihjLm1lc3NhZ2UpO2lmKFh0KG8pKXtjb25zdHttZXNzYWdlOnV9PVkoIkVYUElSRUQiLCJvblNlc3Npb25TZXR0bGVSZXF1ZXN0KCkiKTt0aHJvdyBuZXcgRXJyb3IodSl9fSx0aGlzLmlzVmFsaWRVcGRhdGU9YXN5bmMgcj0+e2lmKCFudChyKSl7Y29uc3R7bWVzc2FnZTpjfT1ZKCJNSVNTSU5HX09SX0lOVkFMSUQiLGB1cGRhdGUoKSBwYXJhbXM6ICR7cn1gKTt0aHJvdyBuZXcgRXJyb3IoYyl9Y29uc3R7dG9waWM6bixuYW1lc3BhY2VzOml9PXI7dGhpcy5jaGVja1JlY2VudGx5RGVsZXRlZChuKSxhd2FpdCB0aGlzLmlzVmFsaWRTZXNzaW9uVG9waWMobik7Y29uc3Qgcz10aGlzLmNsaWVudC5zZXNzaW9uLmdldChuKSxvPSRhKGksInVwZGF0ZSgpIik7aWYobyl0aHJvdyBuZXcgRXJyb3Ioby5tZXNzYWdlKTtjb25zdCBhPUJoKHMucmVxdWlyZWROYW1lc3BhY2VzLGksInVwZGF0ZSgpIik7aWYoYSl0aHJvdyBuZXcgRXJyb3IoYS5tZXNzYWdlKX0sdGhpcy5pc1ZhbGlkRXh0ZW5kPWFzeW5jIHI9PntpZighbnQocikpe2NvbnN0e21lc3NhZ2U6aX09WSgiTUlTU0lOR19PUl9JTlZBTElEIixgZXh0ZW5kKCkgcGFyYW1zOiAke3J9YCk7dGhyb3cgbmV3IEVycm9yKGkpfWNvbnN0e3RvcGljOm59PXI7dGhpcy5jaGVja1JlY2VudGx5RGVsZXRlZChuKSxhd2FpdCB0aGlzLmlzVmFsaWRTZXNzaW9uVG9waWMobil9LHRoaXMuaXNWYWxpZFJlcXVlc3Q9YXN5bmMgcj0+e2lmKCFudChyKSl7Y29uc3R7bWVzc2FnZTpjfT1ZKCJNSVNTSU5HX09SX0lOVkFMSUQiLGByZXF1ZXN0KCkgcGFyYW1zOiAke3J9YCk7dGhyb3cgbmV3IEVycm9yKGMpfWNvbnN0e3RvcGljOm4scmVxdWVzdDppLGNoYWluSWQ6cyxleHBpcnk6b309cjt0aGlzLmNoZWNrUmVjZW50bHlEZWxldGVkKG4pLGF3YWl0IHRoaXMuaXNWYWxpZFNlc3Npb25Ub3BpYyhuKTtjb25zdHtuYW1lc3BhY2VzOmF9PXRoaXMuY2xpZW50LnNlc3Npb24uZ2V0KG4pO2lmKCEkaChhLHMpKXtjb25zdHttZXNzYWdlOmN9PVkoIk1JU1NJTkdfT1JfSU5WQUxJRCIsYHJlcXVlc3QoKSBjaGFpbklkOiAke3N9YCk7dGhyb3cgbmV3IEVycm9yKGMpfWlmKCF6UyhpKSl7Y29uc3R7bWVzc2FnZTpjfT1ZKCJNSVNTSU5HX09SX0lOVkFMSUQiLGByZXF1ZXN0KCkgJHtKU09OLnN0cmluZ2lmeShpKX1gKTt0aHJvdyBuZXcgRXJyb3IoYyl9aWYoIVZTKGEscyxpLm1ldGhvZCkpe2NvbnN0e21lc3NhZ2U6Y309WSgiTUlTU0lOR19PUl9JTlZBTElEIixgcmVxdWVzdCgpIG1ldGhvZDogJHtpLm1ldGhvZH1gKTt0aHJvdyBuZXcgRXJyb3IoYyl9dGhpcy52YWxpZGF0ZVJlcXVlc3RFeHBpcnkobyl9LHRoaXMuaXNWYWxpZFJlc3BvbmQ9YXN5bmMgcj0+e2lmKCFudChyKSl7Y29uc3R7bWVzc2FnZTpvfT1ZKCJNSVNTSU5HX09SX0lOVkFMSUQiLGByZXNwb25kKCkgcGFyYW1zOiAke3J9YCk7dGhyb3cgbmV3IEVycm9yKG8pfWNvbnN0e3RvcGljOm4scmVzcG9uc2U6aX09cjt0cnl7YXdhaXQgdGhpcy5pc1ZhbGlkU2Vzc2lvblRvcGljKG4pfWNhdGNoKG8pe3Rocm93IHI/LnJlc3BvbnNlPy5pZCYmdGhpcy5jbGVhbnVwQWZ0ZXJSZXNwb25zZShyKSxvfWlmKCFIUyhpKSl7Y29uc3R7bWVzc2FnZTpvfT1ZKCJNSVNTSU5HX09SX0lOVkFMSUQiLGByZXNwb25kKCkgcmVzcG9uc2U6ICR7SlNPTi5zdHJpbmdpZnkoaSl9YCk7dGhyb3cgbmV3IEVycm9yKG8pfWNvbnN0IHM9dGhpcy5jbGllbnQucGVuZGluZ1JlcXVlc3QuZ2V0KGkuaWQpO2lmKHMudG9waWMhPT1uKXtjb25zdHttZXNzYWdlOm99PVkoIk1JU01BVENIRURfVE9QSUMiLGBSZXF1ZXN0IHJlc3BvbnNlIHRvcGljIG1pc21hdGNoLiByZXFJZDogJHtpLmlkfSwgZXhwZWN0ZWQgdG9waWM6ICR7cy50b3BpY30sIHJlY2VpdmVkIHRvcGljOiAke259YCk7dGhyb3cgbmV3IEVycm9yKG8pfX0sdGhpcy5pc1ZhbGlkUGluZz1hc3luYyByPT57aWYoIW50KHIpKXtjb25zdHttZXNzYWdlOml9PVkoIk1JU1NJTkdfT1JfSU5WQUxJRCIsYHBpbmcoKSBwYXJhbXM6ICR7cn1gKTt0aHJvdyBuZXcgRXJyb3IoaSl9Y29uc3R7dG9waWM6bn09cjthd2FpdCB0aGlzLmlzVmFsaWRTZXNzaW9uT3JQYWlyaW5nVG9waWMobil9LHRoaXMuaXNWYWxpZEVtaXQ9YXN5bmMgcj0+e2lmKCFudChyKSl7Y29uc3R7bWVzc2FnZTphfT1ZKCJNSVNTSU5HX09SX0lOVkFMSUQiLGBlbWl0KCkgcGFyYW1zOiAke3J9YCk7dGhyb3cgbmV3IEVycm9yKGEpfWNvbnN0e3RvcGljOm4sZXZlbnQ6aSxjaGFpbklkOnN9PXI7YXdhaXQgdGhpcy5pc1ZhbGlkU2Vzc2lvblRvcGljKG4pO2NvbnN0e25hbWVzcGFjZXM6b309dGhpcy5jbGllbnQuc2Vzc2lvbi5nZXQobik7aWYoISRoKG8scykpe2NvbnN0e21lc3NhZ2U6YX09WSgiTUlTU0lOR19PUl9JTlZBTElEIixgZW1pdCgpIGNoYWluSWQ6ICR7c31gKTt0aHJvdyBuZXcgRXJyb3IoYSl9aWYoIUtTKGkpKXtjb25zdHttZXNzYWdlOmF9PVkoIk1JU1NJTkdfT1JfSU5WQUxJRCIsYGVtaXQoKSBldmVudDogJHtKU09OLnN0cmluZ2lmeShpKX1gKTt0aHJvdyBuZXcgRXJyb3IoYSl9aWYoIVdTKG8scyxpLm5hbWUpKXtjb25zdHttZXNzYWdlOmF9PVkoIk1JU1NJTkdfT1JfSU5WQUxJRCIsYGVtaXQoKSBldmVudDogJHtKU09OLnN0cmluZ2lmeShpKX1gKTt0aHJvdyBuZXcgRXJyb3IoYSl9fSx0aGlzLmlzVmFsaWREaXNjb25uZWN0PWFzeW5jIHI9PntpZighbnQocikpe2NvbnN0e21lc3NhZ2U6aX09WSgiTUlTU0lOR19PUl9JTlZBTElEIixgZGlzY29ubmVjdCgpIHBhcmFtczogJHtyfWApO3Rocm93IG5ldyBFcnJvcihpKX1jb25zdHt0b3BpYzpufT1yO2F3YWl0IHRoaXMuaXNWYWxpZFNlc3Npb25PclBhaXJpbmdUb3BpYyhuKX0sdGhpcy5pc1ZhbGlkQXV0aGVudGljYXRlPXI9Pntjb25zdHtjaGFpbnM6bix1cmk6aSxkb21haW46cyxub25jZTpvfT1yO2lmKCFBcnJheS5pc0FycmF5KG4pfHxuLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKCJjaGFpbnMgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBub24tZW1wdHkgYXJyYXkiKTtpZighQWUoaSwhMSkpdGhyb3cgbmV3IEVycm9yKCJ1cmkgaXMgcmVxdWlyZWQgcGFyYW1ldGVyIik7aWYoIUFlKHMsITEpKXRocm93IG5ldyBFcnJvcigiZG9tYWluIGlzIHJlcXVpcmVkIHBhcmFtZXRlciIpO2lmKCFBZShvLCExKSl0aHJvdyBuZXcgRXJyb3IoIm5vbmNlIGlzIHJlcXVpcmVkIHBhcmFtZXRlciIpO2lmKFsuLi5uZXcgU2V0KG4ubWFwKGM9PnZyKGMpLm5hbWVzcGFjZSkpXS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIk11bHRpLW5hbWVzcGFjZSByZXF1ZXN0cyBhcmUgbm90IHN1cHBvcnRlZC4gUGxlYXNlIHJlcXVlc3Qgc2luZ2xlIG5hbWVzcGFjZSBvbmx5LiIpO2NvbnN0e25hbWVzcGFjZTphfT12cihuWzBdKTtpZihhIT09ImVpcDE1NSIpdGhyb3cgbmV3IEVycm9yKCJPbmx5IGVpcDE1NSBuYW1lc3BhY2UgaXMgc3VwcG9ydGVkIGZvciBhdXRoZW50aWNhdGVkIHNlc3Npb25zLiBQbGVhc2UgdXNlIC5jb25uZWN0KCkgZm9yIG5vbi1laXAxNTUgY2hhaW5zLiIpfSx0aGlzLmdldFZlcmlmeUNvbnRleHQ9YXN5bmMgcj0+e2NvbnN0e2F0dGVzdGF0aW9uSWQ6bixoYXNoOmksZW5jcnlwdGVkSWQ6cyxtZXRhZGF0YTpvLHRyYW5zcG9ydFR5cGU6YX09cixjPXt2ZXJpZmllZDp7dmVyaWZ5VXJsOm8udmVyaWZ5VXJsfHxNaSx2YWxpZGF0aW9uOiJVTktOT1dOIixvcmlnaW46by51cmx8fCIifX07dHJ5e2lmKGE9PT1wZS5saW5rX21vZGUpe2NvbnN0IGw9dGhpcy5nZXRBcHBMaW5rSWZFbmFibGVkKG8sYSk7cmV0dXJuIGMudmVyaWZpZWQudmFsaWRhdGlvbj1sJiZuZXcgVVJMKGwpLm9yaWdpbj09PW5ldyBVUkwoby51cmwpLm9yaWdpbj8iVkFMSUQiOiJJTlZBTElEIixjfWNvbnN0IHU9YXdhaXQgdGhpcy5jbGllbnQuY29yZS52ZXJpZnkucmVzb2x2ZSh7YXR0ZXN0YXRpb25JZDpuLGhhc2g6aSxlbmNyeXB0ZWRJZDpzLHZlcmlmeVVybDpvLnZlcmlmeVVybH0pO3UmJihjLnZlcmlmaWVkLm9yaWdpbj11Lm9yaWdpbixjLnZlcmlmaWVkLmlzU2NhbT11LmlzU2NhbSxjLnZlcmlmaWVkLnZhbGlkYXRpb249dS5vcmlnaW49PT1uZXcgVVJMKG8udXJsKS5vcmlnaW4/IlZBTElEIjoiSU5WQUxJRCIpfWNhdGNoKHUpe3RoaXMuY2xpZW50LmxvZ2dlci53YXJuKHUpfXJldHVybiB0aGlzLmNsaWVudC5sb2dnZXIuZGVidWcoYFZlcmlmeSBjb250ZXh0OiAke0pTT04uc3RyaW5naWZ5KGMpfWApLGN9LHRoaXMudmFsaWRhdGVTZXNzaW9uUHJvcHM9KHIsbik9PntPYmplY3QudmFsdWVzKHIpLmZvckVhY2goKGkscyk9PntpZihpPT1udWxsKXtjb25zdHttZXNzYWdlOm99PVkoIk1JU1NJTkdfT1JfSU5WQUxJRCIsYCR7bn0gbXVzdCBjb250YWluIGFuIGV4aXN0aW5nIHZhbHVlIGZvciBlYWNoIGtleS4gUmVjZWl2ZWQ6ICR7aX0gZm9yIGtleSAke09iamVjdC5rZXlzKHIpW3NdfWApO3Rocm93IG5ldyBFcnJvcihvKX19KX0sdGhpcy5nZXRQZW5kaW5nQXV0aFJlcXVlc3Q9cj0+e2NvbnN0IG49dGhpcy5jbGllbnQuYXV0aC5yZXF1ZXN0cy5nZXQocik7cmV0dXJuIHR5cGVvZiBuPT0ib2JqZWN0Ij9uOnZvaWQgMH0sdGhpcy5hZGRUb1JlY2VudGx5RGVsZXRlZD0ocixuKT0+e2lmKHRoaXMucmVjZW50bHlEZWxldGVkTWFwLnNldChyLG4pLHRoaXMucmVjZW50bHlEZWxldGVkTWFwLnNpemU+PXRoaXMucmVjZW50bHlEZWxldGVkTGltaXQpe2xldCBpPTA7Y29uc3Qgcz10aGlzLnJlY2VudGx5RGVsZXRlZExpbWl0LzI7Zm9yKGNvbnN0IG8gb2YgdGhpcy5yZWNlbnRseURlbGV0ZWRNYXAua2V5cygpKXtpZihpKys+PXMpYnJlYWs7dGhpcy5yZWNlbnRseURlbGV0ZWRNYXAuZGVsZXRlKG8pfX19LHRoaXMuY2hlY2tSZWNlbnRseURlbGV0ZWQ9cj0+e2NvbnN0IG49dGhpcy5yZWNlbnRseURlbGV0ZWRNYXAuZ2V0KHIpO2lmKG4pe2NvbnN0e21lc3NhZ2U6aX09WSgiTUlTU0lOR19PUl9JTlZBTElEIixgUmVjb3JkIHdhcyByZWNlbnRseSBkZWxldGVkIC0gJHtufTogJHtyfWApO3Rocm93IG5ldyBFcnJvcihpKX19LHRoaXMuaXNMaW5rTW9kZUVuYWJsZWQ9KHIsbik9PiFyfHxuIT09cGUubGlua19tb2RlPyExOnRoaXMuY2xpZW50Lm1ldGFkYXRhPy5yZWRpcmVjdD8ubGlua01vZGU9PT0hMCYmdGhpcy5jbGllbnQubWV0YWRhdGE/LnJlZGlyZWN0Py51bml2ZXJzYWwhPT12b2lkIDAmJnRoaXMuY2xpZW50Lm1ldGFkYXRhPy5yZWRpcmVjdD8udW5pdmVyc2FsIT09IiImJnI/LnJlZGlyZWN0Py51bml2ZXJzYWwhPT12b2lkIDAmJnI/LnJlZGlyZWN0Py51bml2ZXJzYWwhPT0iIiYmcj8ucmVkaXJlY3Q/LmxpbmtNb2RlPT09ITAmJnRoaXMuY2xpZW50LmNvcmUubGlua01vZGVTdXBwb3J0ZWRBcHBzLmluY2x1ZGVzKHIucmVkaXJlY3QudW5pdmVyc2FsKSYmdHlwZW9mIGFlPy5MaW5raW5nPCJ1Iix0aGlzLmdldEFwcExpbmtJZkVuYWJsZWQ9KHIsbik9PnRoaXMuaXNMaW5rTW9kZUVuYWJsZWQocixuKT9yPy5yZWRpcmVjdD8udW5pdmVyc2FsOnZvaWQgMCx0aGlzLmhhbmRsZUxpbmtNb2RlTWVzc2FnZT0oe3VybDpyfSk9PntpZighcnx8IXIuaW5jbHVkZXMoIndjX2V2Iil8fCFyLmluY2x1ZGVzKCJ0b3BpYyIpKXJldHVybjtjb25zdCBuPXBoKHIsInRvcGljIil8fCIiLGk9ZGVjb2RlVVJJQ29tcG9uZW50KHBoKHIsIndjX2V2Iil8fCIiKSxzPXRoaXMuY2xpZW50LnNlc3Npb24ua2V5cy5pbmNsdWRlcyhuKTtzJiZ0aGlzLmNsaWVudC5zZXNzaW9uLnVwZGF0ZShuLHt0cmFuc3BvcnRUeXBlOnBlLmxpbmtfbW9kZX0pLHRoaXMuY2xpZW50LmNvcmUuZGlzcGF0Y2hFbnZlbG9wZSh7dG9waWM6bixtZXNzYWdlOmksc2Vzc2lvbkV4aXN0czpzfSl9LHRoaXMucmVnaXN0ZXJMaW5rTW9kZUxpc3RlbmVycz1hc3luYygpPT57aWYoZHUoKXx8ZW4oKSYmdGhpcy5jbGllbnQubWV0YWRhdGEucmVkaXJlY3Q/LmxpbmtNb2RlKXtjb25zdCByPWFlPy5MaW5raW5nO2lmKHR5cGVvZiByPCJ1Iil7ci5hZGRFdmVudExpc3RlbmVyKCJ1cmwiLHRoaXMuaGFuZGxlTGlua01vZGVNZXNzYWdlLHRoaXMuY2xpZW50Lm5hbWUpO2NvbnN0IG49YXdhaXQgci5nZXRJbml0aWFsVVJMKCk7biYmc2V0VGltZW91dCgoKT0+e3RoaXMuaGFuZGxlTGlua01vZGVNZXNzYWdlKHt1cmw6bn0pfSw1MCl9fX0sdGhpcy5nZXRUVkZBcHByb3ZlUGFyYW1zPXI9Pnt0cnl7Y29uc3Qgbj1PZyhyLm5hbWVzcGFjZXMpLGk9eFMoci5uYW1lc3BhY2VzKSxzPV9TKHIubmFtZXNwYWNlcyksbz1yLnNlc3Npb25Qcm9wZXJ0aWVzLGE9ci5zY29wZWRQcm9wZXJ0aWVzO3JldHVybnthcHByb3ZlZENoYWluczpuLGFwcHJvdmVkTWV0aG9kczppLGFwcHJvdmVkRXZlbnRzOnMsc2Vzc2lvblByb3BlcnRpZXM6byxzY29wZWRQcm9wZXJ0aWVzOmF9fWNhdGNoKG4pe3JldHVybiB0aGlzLmNsaWVudC5sb2dnZXIud2FybihuLCJFcnJvciBnZXR0aW5nIFRWRiBhcHByb3ZlIHBhcmFtcyIpLHt9fX0sdGhpcy5nZXRUVkZQYXJhbXM9KHIsbixpKT0+e2lmKCFuLnJlcXVlc3Q/Lm1ldGhvZClyZXR1cm57fTtjb25zdCBzPXtjb3JyZWxhdGlvbklkOnIscnBjTWV0aG9kczpbbi5yZXF1ZXN0Lm1ldGhvZF0sY2hhaW5JZDpuLmNoYWluSWR9O3RyeXtjb25zdCBvPXRoaXMuZXh0cmFjdFR4SGFzaGVzRnJvbVJlc3VsdChuLnJlcXVlc3QsaSk7cy50eEhhc2hlcz1vLHMuY29udHJhY3RBZGRyZXNzZXM9dGhpcy5pc1ZhbGlkQ29udHJhY3REYXRhKG4ucmVxdWVzdC5wYXJhbXMpP1tuLnJlcXVlc3QucGFyYW1zPy5bMF0/LnRvXTpbXX1jYXRjaChvKXt0aGlzLmNsaWVudC5sb2dnZXIud2FybihvLCJFcnJvciBnZXR0aW5nIFRWRiBwYXJhbXMiKX1yZXR1cm4gc30sdGhpcy5pc1ZhbGlkQ29udHJhY3REYXRhPXI9PntpZighcilyZXR1cm4hMTt0cnl7Y29uc3Qgbj1yPy5kYXRhfHxyPy5bMF0/LmRhdGE7aWYoIW4uc3RhcnRzV2l0aCgiMHgiKSlyZXR1cm4hMTtjb25zdCBpPW4uc2xpY2UoMik7cmV0dXJuL15bMC05YS1mQS1GXSokLy50ZXN0KGkpP2kubGVuZ3RoJTI9PT0wOiExfWNhdGNoe31yZXR1cm4hMX0sdGhpcy5leHRyYWN0VHhIYXNoZXNGcm9tUmVzdWx0PShyLG4pPT57dHJ5e2lmKCFuKXJldHVybltdO2NvbnN0IGk9ci5tZXRob2Qscz1KQVtpXTtpZihpPT09InN1aV9zaWduVHJhbnNhY3Rpb24iKXJldHVybltLMyhuLnRyYW5zYWN0aW9uQnl0ZXMpXTtpZihpPT09Im5lYXJfc2lnblRyYW5zYWN0aW9uIilyZXR1cm5beWgobildO2lmKGk9PT0ibmVhcl9zaWduVHJhbnNhY3Rpb25zIilyZXR1cm4gbi5tYXAoYT0+eWgoYSkpO2lmKGk9PT0ieHJwbF9zaWduVHJhbnNhY3Rpb25Gb3IifHxpPT09InhycGxfc2lnblRyYW5zYWN0aW9uIilyZXR1cm5bbi50eF9qc29uPy5oYXNoXTtpZihpPT09InBvbGthZG90X3NpZ25UcmFuc2FjdGlvbiIpcmV0dXJuW2g4KHt0cmFuc2FjdGlvbjpyLnBhcmFtcy50cmFuc2FjdGlvblBheWxvYWQsc2lnbmF0dXJlOm4uc2lnbmF0dXJlfSldO2lmKGk9PT0iYWxnb19zaWduVHhuIilyZXR1cm4gX3Iobik/bi5tYXAoYT0+d2goYSkpOlt3aChuKV07aWYoaT09PSJjb3Ntb3Nfc2lnbkRpcmVjdCIpcmV0dXJuW1czKG4pXTtpZihpPT09IndhbGxldF9zZW5kQ2FsbHMiKXJldHVybiBHMyhuKTtpZihpPT09ImNhbnRvbl9wcmVwYXJlU2lnbkV4ZWN1dGUiKXJldHVybiBwOChyLnBhcmFtcyxuKTtpZih0eXBlb2Ygbj09InN0cmluZyIpcmV0dXJuW25dO2NvbnN0IG89bltzLmtleV07aWYoX3IobykpcmV0dXJuIGk9PT0ic29sYW5hX3NpZ25BbGxUcmFuc2FjdGlvbnMiP28ubWFwKGE9PkgzKGEpKTpvO2lmKHR5cGVvZiBvPT0ic3RyaW5nIilyZXR1cm5bb119Y2F0Y2goaSl7dGhpcy5jbGllbnQubG9nZ2VyLndhcm4oaSwiRXJyb3IgZXh0cmFjdGluZyB0eCBoYXNoZXMgZnJvbSByZXN1bHQiKX1yZXR1cm5bXX19YXN5bmMgcHJvY2Vzc1BlbmRpbmdNZXNzYWdlRXZlbnRzKCl7dHJ5e2NvbnN0IGU9dGhpcy5jbGllbnQuc2Vzc2lvbi5rZXlzLHI9dGhpcy5jbGllbnQuY29yZS5yZWxheWVyLm1lc3NhZ2VzLmdldFdpdGhvdXRBY2soZSk7Zm9yKGNvbnN0W24saV1vZiBPYmplY3QuZW50cmllcyhyKSlmb3IoY29uc3QgcyBvZiBpKXRyeXthd2FpdCB0aGlzLm9uUHJvdmlkZXJNZXNzYWdlRXZlbnQoe3RvcGljOm4sbWVzc2FnZTpzLHB1Ymxpc2hlZEF0OkRhdGUubm93KCl9KX1jYXRjaHt0aGlzLmNsaWVudC5sb2dnZXIud2FybihgRXJyb3IgcHJvY2Vzc2luZyBwZW5kaW5nIG1lc3NhZ2UgZXZlbnQgZm9yIHRvcGljOiAke259LCBtZXNzYWdlOiAke3N9YCl9fWNhdGNoKGUpe3RoaXMuY2xpZW50LmxvZ2dlci53YXJuKGUsInByb2Nlc3NQZW5kaW5nTWVzc2FnZUV2ZW50cyBmYWlsZWQiKX19aXNJbml0aWFsaXplZCgpe2lmKCF0aGlzLmluaXRpYWxpemVkKXtjb25zdHttZXNzYWdlOmV9PVkoIk5PVF9JTklUSUFMSVpFRCIsdGhpcy5uYW1lKTt0aHJvdyBuZXcgRXJyb3IoZSl9fWFzeW5jIGNvbmZpcm1PbmxpbmVTdGF0ZU9yVGhyb3coKXthd2FpdCB0aGlzLmNsaWVudC5jb3JlLnJlbGF5ZXIuY29uZmlybU9ubGluZVN0YXRlT3JUaHJvdygpfXJlZ2lzdGVyUmVsYXllckV2ZW50cygpe3RoaXMuY2xpZW50LmNvcmUucmVsYXllci5vbih2ZS5tZXNzYWdlLGU9Pnt0aGlzLm9uUHJvdmlkZXJNZXNzYWdlRXZlbnQoZSl9KX1hc3luYyBvblJlbGF5TWVzc2FnZShlKXtjb25zdHt0b3BpYzpyLG1lc3NhZ2U6bixhdHRlc3RhdGlvbjppLHRyYW5zcG9ydFR5cGU6c309ZSx7cHVibGljS2V5Om99PXRoaXMuY2xpZW50LmF1dGguYXV0aEtleXMua2V5cy5pbmNsdWRlcyhrcik/dGhpcy5jbGllbnQuYXV0aC5hdXRoS2V5cy5nZXQoa3IpOntwdWJsaWNLZXk6dm9pZCAwfTt0cnl7dHJ5e2lmKHMhPT1wZS5saW5rX21vZGUmJnRoaXMuY2xpZW50LmNvcmUuY3J5cHRvLmdldFBheWxvYWRUeXBlKG4sSnQpPT09T24pe3RoaXMuY2xpZW50LmxvZ2dlci53YXJuKGBvblJlbGF5TWVzc2FnZSgpIC0+IG5vbi1saW5rIG1vZGUgVFlQRV8yIHBheWxvYWQgaWdub3JlZDogJHtufWApO3JldHVybn19Y2F0Y2h7fWNvbnN0IGE9YXdhaXQgdGhpcy5jbGllbnQuY29yZS5jcnlwdG8uZGVjb2RlKHIsbix7cmVjZWl2ZXJQdWJsaWNLZXk6byxlbmNvZGluZzpzPT09cGUubGlua19tb2RlP0p0OmtlfSk7bXUoYSk/KHRoaXMuY2xpZW50LmNvcmUuaGlzdG9yeS5zZXQocixhKSxhd2FpdCB0aGlzLm9uUmVsYXlFdmVudFJlcXVlc3Qoe3RvcGljOnIscGF5bG9hZDphLGF0dGVzdGF0aW9uOmksdHJhbnNwb3J0VHlwZTpzLGVuY3J5cHRlZElkOnZ0KG4pfSkpOkZvKGEpPyhhd2FpdCB0aGlzLmNsaWVudC5jb3JlLmhpc3RvcnkucmVzb2x2ZShhKSxhd2FpdCB0aGlzLm9uUmVsYXlFdmVudFJlc3BvbnNlKHt0b3BpYzpyLHBheWxvYWQ6YSx0cmFuc3BvcnRUeXBlOnN9KSx0aGlzLmNsaWVudC5jb3JlLmhpc3RvcnkuZGVsZXRlKHIsYS5pZCkpOih0aGlzLmNsaWVudC5sb2dnZXIuZXJyb3IoYG9uUmVsYXlNZXNzYWdlKCkgLT4gdW5rbm93biBwYXlsb2FkOiAke0pTT04uc3RyaW5naWZ5KGEpfWApLGF3YWl0IHRoaXMub25SZWxheUV2ZW50VW5rbm93blBheWxvYWQoe3RvcGljOnIscGF5bG9hZDphLHRyYW5zcG9ydFR5cGU6c30pKSxhd2FpdCB0aGlzLmNsaWVudC5jb3JlLnJlbGF5ZXIubWVzc2FnZXMuYWNrKHIsbil9Y2F0Y2goYSl7dGhpcy5jbGllbnQubG9nZ2VyLmVycm9yKGBvblJlbGF5TWVzc2FnZSgpIC0+IGZhaWxlZCB0byBwcm9jZXNzIGFuIGluYm91bmQgbWVzc2FnZTogJHtufWApLHRoaXMuY2xpZW50LmxvZ2dlci5lcnJvcihhPy5tZXNzYWdlKX19cmVnaXN0ZXJFeHBpcmVyRXZlbnRzKCl7dGhpcy5jbGllbnQuY29yZS5leHBpcmVyLm9uKG10LmV4cGlyZWQsYXN5bmMgZT0+e2NvbnN0e3RvcGljOnIsaWQ6bn09eWcoZS50YXJnZXQpO2lmKG4mJnRoaXMuY2xpZW50LnBlbmRpbmdSZXF1ZXN0LmtleXMuaW5jbHVkZXMobikpcmV0dXJuIGF3YWl0IHRoaXMuZGVsZXRlUGVuZGluZ1Nlc3Npb25SZXF1ZXN0KG4sWSgiRVhQSVJFRCIpLCEwKTtpZihuJiZ0aGlzLmNsaWVudC5hdXRoLnJlcXVlc3RzLmtleXMuaW5jbHVkZXMobikpcmV0dXJuIGF3YWl0IHRoaXMuZGVsZXRlUGVuZGluZ0F1dGhSZXF1ZXN0KG4sWSgiRVhQSVJFRCIpLCEwKTtyP3RoaXMuY2xpZW50LnNlc3Npb24ua2V5cy5pbmNsdWRlcyhyKSYmKGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbih7dG9waWM6cixleHBpcmVySGFzRGVsZXRlZDohMH0pLHRoaXMuY2xpZW50LmV2ZW50cy5lbWl0KCJzZXNzaW9uX2V4cGlyZSIse3RvcGljOnJ9KSk6biYmKGF3YWl0IHRoaXMuZGVsZXRlUHJvcG9zYWwobiwhMCksdGhpcy5jbGllbnQuZXZlbnRzLmVtaXQoInByb3Bvc2FsX2V4cGlyZSIse2lkOm59KSl9KX1yZWdpc3RlclN1YnNjcmlwdGlvbkNsZWFudXAoKXt0aGlzLmNsaWVudC5jb3JlLmhlYXJ0YmVhdC5vbigiaGVhcnRiZWF0X3B1bHNlIixhc3luYygpPT57aWYoIXRoaXMuY2xlYW51cEluUHJvZ3Jlc3Mpe3RoaXMuY2xlYW51cEluUHJvZ3Jlc3M9ITA7dHJ5e2F3YWl0IHRoaXMuY2xlYW51cE9ycGhhbmVkU3Vic2NyaXB0aW9ucygpfWNhdGNoKGUpe3RoaXMuY2xpZW50LmxvZ2dlci53YXJuKGUpfWZpbmFsbHl7dGhpcy5jbGVhbnVwSW5Qcm9ncmVzcz0hMX19fSl9cmVnaXN0ZXJQYWlyaW5nRXZlbnRzKCl7dGhpcy5jbGllbnQuY29yZS5wYWlyaW5nLmV2ZW50cy5vbihwbi5jcmVhdGUsZT0+dGhpcy5vblBhaXJpbmdDcmVhdGVkKGUpKSx0aGlzLmNsaWVudC5jb3JlLnBhaXJpbmcuZXZlbnRzLm9uKHBuLmRlbGV0ZSxlPT57dGhpcy5hZGRUb1JlY2VudGx5RGVsZXRlZChlLnRvcGljLCJwYWlyaW5nIil9KX1pc1ZhbGlkUGFpcmluZ1RvcGljKGUpe2lmKCFBZShlLCExKSl7Y29uc3R7bWVzc2FnZTpyfT1ZKCJNSVNTSU5HX09SX0lOVkFMSUQiLGBwYWlyaW5nIHRvcGljIHNob3VsZCBiZSBhIHN0cmluZzogJHtlfWApO3Rocm93IG5ldyBFcnJvcihyKX1pZighdGhpcy5jbGllbnQuY29yZS5wYWlyaW5nLnBhaXJpbmdzLmtleXMuaW5jbHVkZXMoZSkpe2NvbnN0e21lc3NhZ2U6cn09WSgiTk9fTUFUQ0hJTkdfS0VZIixgcGFpcmluZyB0b3BpYyBkb2Vzbid0IGV4aXN0OiAke2V9YCk7dGhyb3cgbmV3IEVycm9yKHIpfWlmKFh0KHRoaXMuY2xpZW50LmNvcmUucGFpcmluZy5wYWlyaW5ncy5nZXQoZSkuZXhwaXJ5KSl7Y29uc3R7bWVzc2FnZTpyfT1ZKCJFWFBJUkVEIixgcGFpcmluZyB0b3BpYzogJHtlfWApO3Rocm93IG5ldyBFcnJvcihyKX19YXN5bmMgaXNWYWxpZFNlc3Npb25Ub3BpYyhlKXtpZighQWUoZSwhMSkpe2NvbnN0e21lc3NhZ2U6cn09WSgiTUlTU0lOR19PUl9JTlZBTElEIixgc2Vzc2lvbiB0b3BpYyBzaG91bGQgYmUgYSBzdHJpbmc6ICR7ZX1gKTt0aHJvdyBuZXcgRXJyb3Iocil9aWYodGhpcy5jaGVja1JlY2VudGx5RGVsZXRlZChlKSwhdGhpcy5jbGllbnQuc2Vzc2lvbi5rZXlzLmluY2x1ZGVzKGUpKXtjb25zdHttZXNzYWdlOnJ9PVkoIk5PX01BVENISU5HX0tFWSIsYHNlc3Npb24gdG9waWMgZG9lc24ndCBleGlzdDogJHtlfWApO3Rocm93IG5ldyBFcnJvcihyKX1pZihYdCh0aGlzLmNsaWVudC5zZXNzaW9uLmdldChlKS5leHBpcnkpKXthd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oe3RvcGljOmV9KTtjb25zdHttZXNzYWdlOnJ9PVkoIkVYUElSRUQiLGBzZXNzaW9uIHRvcGljOiAke2V9YCk7dGhyb3cgbmV3IEVycm9yKHIpfWlmKCF0aGlzLmNsaWVudC5jb3JlLmNyeXB0by5rZXljaGFpbi5oYXMoZSkpe2NvbnN0e21lc3NhZ2U6cn09WSgiTUlTU0lOR19PUl9JTlZBTElEIixgc2Vzc2lvbiB0b3BpYyBkb2VzIG5vdCBleGlzdCBpbiBrZXljaGFpbjogJHtlfWApO3Rocm93IGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbih7dG9waWM6ZX0pLG5ldyBFcnJvcihyKX19YXN5bmMgaXNWYWxpZFNlc3Npb25PclBhaXJpbmdUb3BpYyhlKXtpZih0aGlzLmNoZWNrUmVjZW50bHlEZWxldGVkKGUpLHRoaXMuY2xpZW50LnNlc3Npb24ua2V5cy5pbmNsdWRlcyhlKSlhd2FpdCB0aGlzLmlzVmFsaWRTZXNzaW9uVG9waWMoZSk7ZWxzZSBpZih0aGlzLmNsaWVudC5jb3JlLnBhaXJpbmcucGFpcmluZ3Mua2V5cy5pbmNsdWRlcyhlKSl0aGlzLmlzVmFsaWRQYWlyaW5nVG9waWMoZSk7ZWxzZSBpZihBZShlLCExKSl7Y29uc3R7bWVzc2FnZTpyfT1ZKCJOT19NQVRDSElOR19LRVkiLGBzZXNzaW9uIG9yIHBhaXJpbmcgdG9waWMgZG9lc24ndCBleGlzdDogJHtlfWApO3Rocm93IG5ldyBFcnJvcihyKX1lbHNle2NvbnN0e21lc3NhZ2U6cn09WSgiTUlTU0lOR19PUl9JTlZBTElEIixgc2Vzc2lvbiBvciBwYWlyaW5nIHRvcGljIHNob3VsZCBiZSBhIHN0cmluZzogJHtlfWApO3Rocm93IG5ldyBFcnJvcihyKX19YXN5bmMgaXNWYWxpZFByb3Bvc2FsSWQoZSl7aWYoIXFTKGUpKXtjb25zdHttZXNzYWdlOnJ9PVkoIk1JU1NJTkdfT1JfSU5WQUxJRCIsYHByb3Bvc2FsIGlkIHNob3VsZCBiZSBhIG51bWJlcjogJHtlfWApO3Rocm93IG5ldyBFcnJvcihyKX1pZighdGhpcy5jbGllbnQucHJvcG9zYWwua2V5cy5pbmNsdWRlcyhlKSl7Y29uc3R7bWVzc2FnZTpyfT1ZKCJOT19NQVRDSElOR19LRVkiLGBwcm9wb3NhbCBpZCBkb2Vzbid0IGV4aXN0OiAke2V9YCk7dGhyb3cgbmV3IEVycm9yKHIpfWlmKFh0KHRoaXMuY2xpZW50LnByb3Bvc2FsLmdldChlKS5leHBpcnlUaW1lc3RhbXApKXthd2FpdCB0aGlzLmRlbGV0ZVByb3Bvc2FsKGUpO2NvbnN0e21lc3NhZ2U6cn09WSgiRVhQSVJFRCIsYHByb3Bvc2FsIGlkOiAke2V9YCk7dGhyb3cgbmV3IEVycm9yKHIpfX12YWxpZGF0ZVJlcXVlc3RFeHBpcnkoZSl7aWYoZSYmIVpTKGUsQ2EpKXtjb25zdHttZXNzYWdlOnJ9PVkoIk1JU1NJTkdfT1JfSU5WQUxJRCIsYHJlcXVlc3QoKSBleHBpcnk6ICR7ZX0uIEV4cGlyeSBtdXN0IGJlIGEgbnVtYmVyIChpbiBzZWNvbmRzKSBiZXR3ZWVuICR7Q2EubWlufSBhbmQgJHtDYS5tYXh9YCk7dGhyb3cgbmV3IEVycm9yKHIpfX19Y2xhc3MgYUQgZXh0ZW5kcyBVbntjb25zdHJ1Y3RvcihlLHIpe3N1cGVyKGUscixZQSxTdSksdGhpcy5jb3JlPWUsdGhpcy5sb2dnZXI9cn19Y2xhc3MgY0QgZXh0ZW5kcyBVbntjb25zdHJ1Y3RvcihlLHIpe3N1cGVyKGUscixaQSxTdSksdGhpcy5jb3JlPWUsdGhpcy5sb2dnZXI9cn19Y2xhc3MgdUQgZXh0ZW5kcyBVbntjb25zdHJ1Y3RvcihlLHIpe3N1cGVyKGUscixRQSxTdSxuPT5uLmlkKSx0aGlzLmNvcmU9ZSx0aGlzLmxvZ2dlcj1yfX1jbGFzcyBsRCBleHRlbmRzIFVue2NvbnN0cnVjdG9yKGUscil7c3VwZXIoZSxyLG5ELGtvLCgpPT5rciksdGhpcy5jb3JlPWUsdGhpcy5sb2dnZXI9cn19Y2xhc3MgaEQgZXh0ZW5kcyBVbntjb25zdHJ1Y3RvcihlLHIpe3N1cGVyKGUscixpRCxrbyksdGhpcy5jb3JlPWUsdGhpcy5sb2dnZXI9cn19Y2xhc3MgZkQgZXh0ZW5kcyBVbntjb25zdHJ1Y3RvcihlLHIpe3N1cGVyKGUscixzRCxrbyxuPT5uLmlkKSx0aGlzLmNvcmU9ZSx0aGlzLmxvZ2dlcj1yfX1jbGFzcyBkRHtjb25zdHJ1Y3RvcihlLHIpe3RoaXMuY29yZT1lLHRoaXMubG9nZ2VyPXIsdGhpcy5hdXRoS2V5cz1uZXcgbEQodGhpcy5jb3JlLHRoaXMubG9nZ2VyKSx0aGlzLnBhaXJpbmdUb3BpY3M9bmV3IGhEKHRoaXMuY29yZSx0aGlzLmxvZ2dlciksdGhpcy5yZXF1ZXN0cz1uZXcgZkQodGhpcy5jb3JlLHRoaXMubG9nZ2VyKX1hc3luYyBpbml0KCl7YXdhaXQgdGhpcy5hdXRoS2V5cy5pbml0KCksYXdhaXQgdGhpcy5wYWlyaW5nVG9waWNzLmluaXQoKSxhd2FpdCB0aGlzLnJlcXVlc3RzLmluaXQoKX19bGV0IHBEPWNsYXNzIGwwIGV4dGVuZHMgcm17Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5wcm90b2NvbD1hMCx0aGlzLnZlcnNpb249YzAsdGhpcy5uYW1lPVJhLm5hbWUsdGhpcy5ldmVudHM9bmV3IFN0LkV2ZW50RW1pdHRlcix0aGlzLm9uPShuLGkpPT50aGlzLmV2ZW50cy5vbihuLGkpLHRoaXMub25jZT0obixpKT0+dGhpcy5ldmVudHMub25jZShuLGkpLHRoaXMub2ZmPShuLGkpPT50aGlzLmV2ZW50cy5vZmYobixpKSx0aGlzLnJlbW92ZUxpc3RlbmVyPShuLGkpPT50aGlzLmV2ZW50cy5yZW1vdmVMaXN0ZW5lcihuLGkpLHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzPW49PnRoaXMuZXZlbnRzLnJlbW92ZUFsbExpc3RlbmVycyhuKSx0aGlzLmNvbm5lY3Q9YXN5bmMgbj0+e3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5lbmdpbmUuY29ubmVjdChuKX1jYXRjaChpKXt0aHJvdyB0aGlzLmxvZ2dlci5lcnJvcihpLm1lc3NhZ2UpLGl9fSx0aGlzLnBhaXI9YXN5bmMgbj0+e3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5lbmdpbmUucGFpcihuKX1jYXRjaChpKXt0aHJvdyB0aGlzLmxvZ2dlci5lcnJvcihpLm1lc3NhZ2UpLGl9fSx0aGlzLmFwcHJvdmU9YXN5bmMgbj0+e3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5lbmdpbmUuYXBwcm92ZShuKX1jYXRjaChpKXt0aHJvdyB0aGlzLmxvZ2dlci5lcnJvcihpLm1lc3NhZ2UpLGl9fSx0aGlzLnJlamVjdD1hc3luYyBuPT57dHJ5e3JldHVybiBhd2FpdCB0aGlzLmVuZ2luZS5yZWplY3Qobil9Y2F0Y2goaSl7dGhyb3cgdGhpcy5sb2dnZXIuZXJyb3IoaS5tZXNzYWdlKSxpfX0sdGhpcy51cGRhdGU9YXN5bmMgbj0+e3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5lbmdpbmUudXBkYXRlKG4pfWNhdGNoKGkpe3Rocm93IHRoaXMubG9nZ2VyLmVycm9yKGkubWVzc2FnZSksaX19LHRoaXMuZXh0ZW5kPWFzeW5jIG49Pnt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuZW5naW5lLmV4dGVuZChuKX1jYXRjaChpKXt0aHJvdyB0aGlzLmxvZ2dlci5lcnJvcihpLm1lc3NhZ2UpLGl9fSx0aGlzLnJlcXVlc3Q9YXN5bmMgbj0+e3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5lbmdpbmUucmVxdWVzdChuKX1jYXRjaChpKXt0aHJvdyB0aGlzLmxvZ2dlci5lcnJvcihpLm1lc3NhZ2UpLGl9fSx0aGlzLnJlc3BvbmQ9YXN5bmMgbj0+e3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5lbmdpbmUucmVzcG9uZChuKX1jYXRjaChpKXt0aHJvdyB0aGlzLmxvZ2dlci5lcnJvcihpLm1lc3NhZ2UpLGl9fSx0aGlzLnBpbmc9YXN5bmMgbj0+e3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5lbmdpbmUucGluZyhuKX1jYXRjaChpKXt0aHJvdyB0aGlzLmxvZ2dlci5lcnJvcihpLm1lc3NhZ2UpLGl9fSx0aGlzLmVtaXQ9YXN5bmMgbj0+e3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5lbmdpbmUuZW1pdChuKX1jYXRjaChpKXt0aHJvdyB0aGlzLmxvZ2dlci5lcnJvcihpLm1lc3NhZ2UpLGl9fSx0aGlzLmRpc2Nvbm5lY3Q9YXN5bmMgbj0+e3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5lbmdpbmUuZGlzY29ubmVjdChuKX1jYXRjaChpKXt0aHJvdyB0aGlzLmxvZ2dlci5lcnJvcihpLm1lc3NhZ2UpLGl9fSx0aGlzLmZpbmQ9bj0+e3RyeXtyZXR1cm4gdGhpcy5lbmdpbmUuZmluZChuKX1jYXRjaChpKXt0aHJvdyB0aGlzLmxvZ2dlci5lcnJvcihpLm1lc3NhZ2UpLGl9fSx0aGlzLmdldFBlbmRpbmdTZXNzaW9uUmVxdWVzdHM9KCk9Pnt0cnl7cmV0dXJuIHRoaXMuZW5naW5lLmdldFBlbmRpbmdTZXNzaW9uUmVxdWVzdHMoKX1jYXRjaChuKXt0aHJvdyB0aGlzLmxvZ2dlci5lcnJvcihuLm1lc3NhZ2UpLG59fSx0aGlzLmF1dGhlbnRpY2F0ZT1hc3luYyhuLGkpPT57dHJ5e3JldHVybiBjb25zb2xlLndhcm4oIltXYWxsZXRDb25uZWN0XSBgYXV0aGVudGljYXRlYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4gVXNlIGBjb25uZWN0KClgJ3MgYGF1dGhlbnRpY2F0aW9uYCBpbnN0ZWFkIHRvIGVzdGFibGlzaCBhbiBhdXRoZW50aWNhdGVkIHNlc3Npb24uIiksYXdhaXQgdGhpcy5lbmdpbmUuYXV0aGVudGljYXRlKG4saSl9Y2F0Y2gocyl7dGhyb3cgdGhpcy5sb2dnZXIuZXJyb3Iocy5tZXNzYWdlKSxzfX0sdGhpcy5mb3JtYXRBdXRoTWVzc2FnZT1uPT57dHJ5e3JldHVybiB0aGlzLmVuZ2luZS5mb3JtYXRBdXRoTWVzc2FnZShuKX1jYXRjaChpKXt0aHJvdyB0aGlzLmxvZ2dlci5lcnJvcihpLm1lc3NhZ2UpLGl9fSx0aGlzLmFwcHJvdmVTZXNzaW9uQXV0aGVudGljYXRlPWFzeW5jIG49Pnt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuZW5naW5lLmFwcHJvdmVTZXNzaW9uQXV0aGVudGljYXRlKG4pfWNhdGNoKGkpe3Rocm93IHRoaXMubG9nZ2VyLmVycm9yKGkubWVzc2FnZSksaX19LHRoaXMucmVqZWN0U2Vzc2lvbkF1dGhlbnRpY2F0ZT1hc3luYyBuPT57dHJ5e3JldHVybiBhd2FpdCB0aGlzLmVuZ2luZS5yZWplY3RTZXNzaW9uQXV0aGVudGljYXRlKG4pfWNhdGNoKGkpe3Rocm93IHRoaXMubG9nZ2VyLmVycm9yKGkubWVzc2FnZSksaX19LHRoaXMubmFtZT1lPy5uYW1lfHxSYS5uYW1lLHRoaXMubWV0YWRhdGE9STMoZT8ubWV0YWRhdGEpLHRoaXMuc2lnbkNvbmZpZz1lPy5zaWduQ29uZmlnO2NvbnN0IHI9eXUoe2xvZ2dlcjplPy5sb2dnZXJ8fFJhLmxvZ2dlcixuYW1lOnRoaXMubmFtZX0pO3RoaXMubG9nZ2VyPXIsdGhpcy5jb3JlPWU/LmNvcmV8fG5ldyBHQShlKSx0aGlzLnNlc3Npb249bmV3IGNEKHRoaXMuY29yZSx0aGlzLmxvZ2dlciksdGhpcy5wcm9wb3NhbD1uZXcgYUQodGhpcy5jb3JlLHRoaXMubG9nZ2VyKSx0aGlzLnBlbmRpbmdSZXF1ZXN0PW5ldyB1RCh0aGlzLmNvcmUsdGhpcy5sb2dnZXIpLHRoaXMuZW5naW5lPW5ldyBvRCh0aGlzKSx0aGlzLmF1dGg9bmV3IGREKHRoaXMuY29yZSx0aGlzLmxvZ2dlcil9c3RhdGljIGFzeW5jIGluaXQoZSl7Y29uc3Qgcj1uZXcgbDAoZSk7cmV0dXJuIGF3YWl0IHIuaW5pdGlhbGl6ZSgpLHJ9Z2V0IGNvbnRleHQoKXtyZXR1cm4gY3QodGhpcy5sb2dnZXIpfWdldCBwYWlyaW5nKCl7cmV0dXJuIHRoaXMuY29yZS5wYWlyaW5nLnBhaXJpbmdzfWFzeW5jIGluaXRpYWxpemUoKXt0aGlzLmxvZ2dlci50cmFjZSgiSW5pdGlhbGl6ZWQiKTt0cnl7YXdhaXQgdGhpcy5jb3JlLnN0YXJ0KCksYXdhaXQgdGhpcy5zZXNzaW9uLmluaXQoKSxhd2FpdCB0aGlzLnByb3Bvc2FsLmluaXQoKSxhd2FpdCB0aGlzLnBlbmRpbmdSZXF1ZXN0LmluaXQoKSxhd2FpdCB0aGlzLmF1dGguaW5pdCgpLGF3YWl0IHRoaXMuZW5naW5lLmluaXQoKSx0aGlzLmxvZ2dlci5pbmZvKCJTaWduQ2xpZW50IEluaXRpYWxpemF0aW9uIFN1Y2Nlc3MiKX1jYXRjaChlKXt0aHJvdyB0aGlzLmxvZ2dlci5pbmZvKCJTaWduQ2xpZW50IEluaXRpYWxpemF0aW9uIEZhaWx1cmUiKSx0aGlzLmxvZ2dlci5lcnJvcihlLm1lc3NhZ2UpLGV9fX07Y29uc3QgZ0Q9cEQ7dmFyIF9jPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24odCxlKXt2YXIgcj10eXBlb2YgZ2xvYmFsVGhpczwidSImJmdsb2JhbFRoaXN8fHR5cGVvZiBzZWxmPCJ1IiYmc2VsZnx8dHlwZW9mIFp0PCJ1IiYmWnQsbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHMoKXt0aGlzLmZldGNoPSExLHRoaXMuRE9NRXhjZXB0aW9uPXIuRE9NRXhjZXB0aW9ufXJldHVybiBzLnByb3RvdHlwZT1yLG5ldyBzfSgpOyhmdW5jdGlvbihzKXsoZnVuY3Rpb24obyl7dmFyIGE9dHlwZW9mIHM8InUiJiZzfHx0eXBlb2Ygc2VsZjwidSImJnNlbGZ8fHR5cGVvZiBadDwidSImJlp0fHx7fSxjPXtzZWFyY2hQYXJhbXM6IlVSTFNlYXJjaFBhcmFtcyJpbiBhLGl0ZXJhYmxlOiJTeW1ib2wiaW4gYSYmIml0ZXJhdG9yImluIFN5bWJvbCxibG9iOiJGaWxlUmVhZGVyImluIGEmJiJCbG9iImluIGEmJmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgQmxvYiwhMH1jYXRjaHtyZXR1cm4hMX19KCksZm9ybURhdGE6IkZvcm1EYXRhImluIGEsYXJyYXlCdWZmZXI6IkFycmF5QnVmZmVyImluIGF9O2Z1bmN0aW9uIHUoeSl7cmV0dXJuIHkmJkRhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHkpfWlmKGMuYXJyYXlCdWZmZXIpdmFyIGw9WyJbb2JqZWN0IEludDhBcnJheV0iLCJbb2JqZWN0IFVpbnQ4QXJyYXldIiwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLCJbb2JqZWN0IEludDE2QXJyYXldIiwiW29iamVjdCBVaW50MTZBcnJheV0iLCJbb2JqZWN0IEludDMyQXJyYXldIiwiW29iamVjdCBVaW50MzJBcnJheV0iLCJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLCJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXSxoPUFycmF5QnVmZmVyLmlzVmlld3x8ZnVuY3Rpb24oeSl7cmV0dXJuIHkmJmwuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeSkpPi0xfTtmdW5jdGlvbiBwKHkpe2lmKHR5cGVvZiB5IT0ic3RyaW5nIiYmKHk9U3RyaW5nKHkpKSwvW15hLXowLTlcLSMkJSYnKisuXl9gfH4hXS9pLnRlc3QoeSl8fHk9PT0iIil0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZTogIicreSsnIicpO3JldHVybiB5LnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gZyh5KXtyZXR1cm4gdHlwZW9mIHkhPSJzdHJpbmciJiYoeT1TdHJpbmcoeSkpLHl9ZnVuY3Rpb24gdyh5KXt2YXIgbT17bmV4dDpmdW5jdGlvbigpe3ZhciBJPXkuc2hpZnQoKTtyZXR1cm57ZG9uZTpJPT09dm9pZCAwLHZhbHVlOkl9fX07cmV0dXJuIGMuaXRlcmFibGUmJihtW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gbX0pLG19ZnVuY3Rpb24gYih5KXt0aGlzLm1hcD17fSx5IGluc3RhbmNlb2YgYj95LmZvckVhY2goZnVuY3Rpb24obSxJKXt0aGlzLmFwcGVuZChJLG0pfSx0aGlzKTpBcnJheS5pc0FycmF5KHkpP3kuZm9yRWFjaChmdW5jdGlvbihtKXtpZihtLmxlbmd0aCE9Mil0aHJvdyBuZXcgVHlwZUVycm9yKCJIZWFkZXJzIGNvbnN0cnVjdG9yOiBleHBlY3RlZCBuYW1lL3ZhbHVlIHBhaXIgdG8gYmUgbGVuZ3RoIDIsIGZvdW5kIittLmxlbmd0aCk7dGhpcy5hcHBlbmQobVswXSxtWzFdKX0sdGhpcyk6eSYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoeSkuZm9yRWFjaChmdW5jdGlvbihtKXt0aGlzLmFwcGVuZChtLHlbbV0pfSx0aGlzKX1iLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oeSxtKXt5PXAoeSksbT1nKG0pO3ZhciBJPXRoaXMubWFwW3ldO3RoaXMubWFwW3ldPUk/SSsiLCAiK206bX0sYi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHkpe2RlbGV0ZSB0aGlzLm1hcFtwKHkpXX0sYi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHkpe3JldHVybiB5PXAoeSksdGhpcy5oYXMoeSk/dGhpcy5tYXBbeV06bnVsbH0sYi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShwKHkpKX0sYi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHksbSl7dGhpcy5tYXBbcCh5KV09ZyhtKX0sYi5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih5LG0pe2Zvcih2YXIgSSBpbiB0aGlzLm1hcCl0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShJKSYmeS5jYWxsKG0sdGhpcy5tYXBbSV0sSSx0aGlzKX0sYi5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3ZhciB5PVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24obSxJKXt5LnB1c2goSSl9KSx3KHkpfSxiLnByb3RvdHlwZS52YWx1ZXM9ZnVuY3Rpb24oKXt2YXIgeT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKG0pe3kucHVzaChtKX0pLHcoeSl9LGIucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXt2YXIgeT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKG0sSSl7eS5wdXNoKFtJLG1dKX0pLHcoeSl9LGMuaXRlcmFibGUmJihiLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWIucHJvdG90eXBlLmVudHJpZXMpO2Z1bmN0aW9uIHYoeSl7aWYoIXkuX25vQm9keSl7aWYoeS5ib2R5VXNlZClyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcigiQWxyZWFkeSByZWFkIikpO3kuYm9keVVzZWQ9ITB9fWZ1bmN0aW9uIE8oeSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG0sSSl7eS5vbmxvYWQ9ZnVuY3Rpb24oKXttKHkucmVzdWx0KX0seS5vbmVycm9yPWZ1bmN0aW9uKCl7SSh5LmVycm9yKX19KX1mdW5jdGlvbiBGKHkpe3ZhciBtPW5ldyBGaWxlUmVhZGVyLEk9TyhtKTtyZXR1cm4gbS5yZWFkQXNBcnJheUJ1ZmZlcih5KSxJfWZ1bmN0aW9uIF8oeSl7dmFyIG09bmV3IEZpbGVSZWFkZXIsST1PKG0pLEE9L2NoYXJzZXQ9KFtBLVphLXowLTlfLV0rKS8uZXhlYyh5LnR5cGUpLFM9QT9BWzFdOiJ1dGYtOCI7cmV0dXJuIG0ucmVhZEFzVGV4dCh5LFMpLEl9ZnVuY3Rpb24gUCh5KXtmb3IodmFyIG09bmV3IFVpbnQ4QXJyYXkoeSksST1uZXcgQXJyYXkobS5sZW5ndGgpLEE9MDtBPG0ubGVuZ3RoO0ErKylJW0FdPVN0cmluZy5mcm9tQ2hhckNvZGUobVtBXSk7cmV0dXJuIEkuam9pbigiIil9ZnVuY3Rpb24gQyh5KXtpZih5LnNsaWNlKXJldHVybiB5LnNsaWNlKDApO3ZhciBtPW5ldyBVaW50OEFycmF5KHkuYnl0ZUxlbmd0aCk7cmV0dXJuIG0uc2V0KG5ldyBVaW50OEFycmF5KHkpKSxtLmJ1ZmZlcn1mdW5jdGlvbiBqKCl7cmV0dXJuIHRoaXMuYm9keVVzZWQ9ITEsdGhpcy5faW5pdEJvZHk9ZnVuY3Rpb24oeSl7dGhpcy5ib2R5VXNlZD10aGlzLmJvZHlVc2VkLHRoaXMuX2JvZHlJbml0PXkseT90eXBlb2YgeT09InN0cmluZyI/dGhpcy5fYm9keVRleHQ9eTpjLmJsb2ImJkJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoeSk/dGhpcy5fYm9keUJsb2I9eTpjLmZvcm1EYXRhJiZGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZih5KT90aGlzLl9ib2R5Rm9ybURhdGE9eTpjLnNlYXJjaFBhcmFtcyYmVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHkpP3RoaXMuX2JvZHlUZXh0PXkudG9TdHJpbmcoKTpjLmFycmF5QnVmZmVyJiZjLmJsb2ImJnUoeSk/KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcj1DKHkuYnVmZmVyKSx0aGlzLl9ib2R5SW5pdD1uZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpOmMuYXJyYXlCdWZmZXImJihBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZih5KXx8aCh5KSk/dGhpcy5fYm9keUFycmF5QnVmZmVyPUMoeSk6dGhpcy5fYm9keVRleHQ9eT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeSk6KHRoaXMuX25vQm9keT0hMCx0aGlzLl9ib2R5VGV4dD0iIiksdGhpcy5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIil8fCh0eXBlb2YgeT09InN0cmluZyI/dGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIiwidGV4dC9wbGFpbjtjaGFyc2V0PVVURi04Iik6dGhpcy5fYm9keUJsb2ImJnRoaXMuX2JvZHlCbG9iLnR5cGU/dGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIix0aGlzLl9ib2R5QmxvYi50eXBlKTpjLnNlYXJjaFBhcmFtcyYmVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHkpJiZ0aGlzLmhlYWRlcnMuc2V0KCJjb250ZW50LXR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCIpKX0sYy5ibG9iJiYodGhpcy5ibG9iPWZ1bmN0aW9uKCl7dmFyIHk9dih0aGlzKTtpZih5KXJldHVybiB5O2lmKHRoaXMuX2JvZHlCbG9iKXJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcigiY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iIik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSl9KSx0aGlzLmFycmF5QnVmZmVyPWZ1bmN0aW9uKCl7aWYodGhpcy5fYm9keUFycmF5QnVmZmVyKXt2YXIgeT12KHRoaXMpO3JldHVybiB5fHwoQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcik/UHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5idWZmZXIuc2xpY2UodGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQsdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQrdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVMZW5ndGgpKTpQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKSl9ZWxzZXtpZihjLmJsb2IpcmV0dXJuIHRoaXMuYmxvYigpLnRoZW4oRik7dGhyb3cgbmV3IEVycm9yKCJjb3VsZCBub3QgcmVhZCBhcyBBcnJheUJ1ZmZlciIpfX0sdGhpcy50ZXh0PWZ1bmN0aW9uKCl7dmFyIHk9dih0aGlzKTtpZih5KXJldHVybiB5O2lmKHRoaXMuX2JvZHlCbG9iKXJldHVybiBfKHRoaXMuX2JvZHlCbG9iKTtpZih0aGlzLl9ib2R5QXJyYXlCdWZmZXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShQKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpO2lmKHRoaXMuX2JvZHlGb3JtRGF0YSl0aHJvdyBuZXcgRXJyb3IoImNvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCIpO3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpfSxjLmZvcm1EYXRhJiYodGhpcy5mb3JtRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQoKS50aGVuKHopfSksdGhpcy5qc29uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSl9LHRoaXN9dmFyIHE9WyJDT05ORUNUIiwiREVMRVRFIiwiR0VUIiwiSEVBRCIsIk9QVElPTlMiLCJQQVRDSCIsIlBPU1QiLCJQVVQiLCJUUkFDRSJdO2Z1bmN0aW9uIE0oeSl7dmFyIG09eS50b1VwcGVyQ2FzZSgpO3JldHVybiBxLmluZGV4T2YobSk+LTE/bTp5fWZ1bmN0aW9uIFQoeSxtKXtpZighKHRoaXMgaW5zdGFuY2VvZiBUKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSAibmV3IiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKTttPW18fHt9O3ZhciBJPW0uYm9keTtpZih5IGluc3RhbmNlb2YgVCl7aWYoeS5ib2R5VXNlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBbHJlYWR5IHJlYWQiKTt0aGlzLnVybD15LnVybCx0aGlzLmNyZWRlbnRpYWxzPXkuY3JlZGVudGlhbHMsbS5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBiKHkuaGVhZGVycykpLHRoaXMubWV0aG9kPXkubWV0aG9kLHRoaXMubW9kZT15Lm1vZGUsdGhpcy5zaWduYWw9eS5zaWduYWwsIUkmJnkuX2JvZHlJbml0IT1udWxsJiYoST15Ll9ib2R5SW5pdCx5LmJvZHlVc2VkPSEwKX1lbHNlIHRoaXMudXJsPVN0cmluZyh5KTtpZih0aGlzLmNyZWRlbnRpYWxzPW0uY3JlZGVudGlhbHN8fHRoaXMuY3JlZGVudGlhbHN8fCJzYW1lLW9yaWdpbiIsKG0uaGVhZGVyc3x8IXRoaXMuaGVhZGVycykmJih0aGlzLmhlYWRlcnM9bmV3IGIobS5oZWFkZXJzKSksdGhpcy5tZXRob2Q9TShtLm1ldGhvZHx8dGhpcy5tZXRob2R8fCJHRVQiKSx0aGlzLm1vZGU9bS5tb2RlfHx0aGlzLm1vZGV8fG51bGwsdGhpcy5zaWduYWw9bS5zaWduYWx8fHRoaXMuc2lnbmFsfHxmdW5jdGlvbigpe2lmKCJBYm9ydENvbnRyb2xsZXIiaW4gYSl7dmFyICQ9bmV3IEFib3J0Q29udHJvbGxlcjtyZXR1cm4gJC5zaWduYWx9fSgpLHRoaXMucmVmZXJyZXI9bnVsbCwodGhpcy5tZXRob2Q9PT0iR0VUInx8dGhpcy5tZXRob2Q9PT0iSEVBRCIpJiZJKXRocm93IG5ldyBUeXBlRXJyb3IoIkJvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzIik7aWYodGhpcy5faW5pdEJvZHkoSSksKHRoaXMubWV0aG9kPT09IkdFVCJ8fHRoaXMubWV0aG9kPT09IkhFQUQiKSYmKG0uY2FjaGU9PT0ibm8tc3RvcmUifHxtLmNhY2hlPT09Im5vLWNhY2hlIikpe3ZhciBBPS8oWz8mXSlfPVteJl0qLztpZihBLnRlc3QodGhpcy51cmwpKXRoaXMudXJsPXRoaXMudXJsLnJlcGxhY2UoQSwiJDFfPSIrbmV3IERhdGUoKS5nZXRUaW1lKCkpO2Vsc2V7dmFyIFM9L1w/Lzt0aGlzLnVybCs9KFMudGVzdCh0aGlzLnVybCk/IiYiOiI/IikrIl89IituZXcgRGF0ZSgpLmdldFRpbWUoKX19fVQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUKHRoaXMse2JvZHk6dGhpcy5fYm9keUluaXR9KX07ZnVuY3Rpb24geih5KXt2YXIgbT1uZXcgRm9ybURhdGE7cmV0dXJuIHkudHJpbSgpLnNwbGl0KCImIikuZm9yRWFjaChmdW5jdGlvbihJKXtpZihJKXt2YXIgQT1JLnNwbGl0KCI9IiksUz1BLnNoaWZ0KCkucmVwbGFjZSgvXCsvZywiICIpLCQ9QS5qb2luKCI9IikucmVwbGFjZSgvXCsvZywiICIpO20uYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChTKSxkZWNvZGVVUklDb21wb25lbnQoJCkpfX0pLG19ZnVuY3Rpb24gVSh5KXt2YXIgbT1uZXcgYixJPXkucmVwbGFjZSgvXHI/XG5bXHQgXSsvZywiICIpO3JldHVybiBJLnNwbGl0KCJcciIpLm1hcChmdW5jdGlvbihBKXtyZXR1cm4gQS5pbmRleE9mKGAKYCk9PT0wP0Euc3Vic3RyKDEsQS5sZW5ndGgpOkF9KS5mb3JFYWNoKGZ1bmN0aW9uKEEpe3ZhciBTPUEuc3BsaXQoIjoiKSwkPVMuc2hpZnQoKS50cmltKCk7aWYoJCl7dmFyIGs9Uy5qb2luKCI6IikudHJpbSgpO3RyeXttLmFwcGVuZCgkLGspfWNhdGNoKEspe2NvbnNvbGUud2FybigiUmVzcG9uc2UgIitLLm1lc3NhZ2UpfX19KSxtfWouY2FsbChULnByb3RvdHlwZSk7ZnVuY3Rpb24gTih5LG0pe2lmKCEodGhpcyBpbnN0YW5jZW9mIE4pKXRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlICJuZXciIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpO2lmKG18fChtPXt9KSx0aGlzLnR5cGU9ImRlZmF1bHQiLHRoaXMuc3RhdHVzPW0uc3RhdHVzPT09dm9pZCAwPzIwMDptLnN0YXR1cyx0aGlzLnN0YXR1czwyMDB8fHRoaXMuc3RhdHVzPjU5OSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUmVzcG9uc2UnOiBUaGUgc3RhdHVzIHByb3ZpZGVkICgwKSBpcyBvdXRzaWRlIHRoZSByYW5nZSBbMjAwLCA1OTldLiIpO3RoaXMub2s9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwLHRoaXMuc3RhdHVzVGV4dD1tLnN0YXR1c1RleHQ9PT12b2lkIDA/IiI6IiIrbS5zdGF0dXNUZXh0LHRoaXMuaGVhZGVycz1uZXcgYihtLmhlYWRlcnMpLHRoaXMudXJsPW0udXJsfHwiIix0aGlzLl9pbml0Qm9keSh5KX1qLmNhbGwoTi5wcm90b3R5cGUpLE4ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBOKHRoaXMuX2JvZHlJbml0LHtzdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0aGlzLnN0YXR1c1RleHQsaGVhZGVyczpuZXcgYih0aGlzLmhlYWRlcnMpLHVybDp0aGlzLnVybH0pfSxOLmVycm9yPWZ1bmN0aW9uKCl7dmFyIHk9bmV3IE4obnVsbCx7c3RhdHVzOjIwMCxzdGF0dXNUZXh0OiIifSk7cmV0dXJuIHkub2s9ITEseS5zdGF0dXM9MCx5LnR5cGU9ImVycm9yIix5fTt2YXIgRD1bMzAxLDMwMiwzMDMsMzA3LDMwOF07Ti5yZWRpcmVjdD1mdW5jdGlvbih5LG0pe2lmKEQuaW5kZXhPZihtKT09PS0xKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHN0YXR1cyBjb2RlIik7cmV0dXJuIG5ldyBOKG51bGwse3N0YXR1czptLGhlYWRlcnM6e2xvY2F0aW9uOnl9fSl9LG8uRE9NRXhjZXB0aW9uPWEuRE9NRXhjZXB0aW9uO3RyeXtuZXcgby5ET01FeGNlcHRpb259Y2F0Y2h7by5ET01FeGNlcHRpb249ZnVuY3Rpb24obSxJKXt0aGlzLm1lc3NhZ2U9bSx0aGlzLm5hbWU9STt2YXIgQT1FcnJvcihtKTt0aGlzLnN0YWNrPUEuc3RhY2t9LG8uRE9NRXhjZXB0aW9uLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksby5ET01FeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW8uRE9NRXhjZXB0aW9ufWZ1bmN0aW9uIFIoeSxtKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oSSxBKXt2YXIgUz1uZXcgVCh5LG0pO2lmKFMuc2lnbmFsJiZTLnNpZ25hbC5hYm9ydGVkKXJldHVybiBBKG5ldyBvLkRPTUV4Y2VwdGlvbigiQWJvcnRlZCIsIkFib3J0RXJyb3IiKSk7dmFyICQ9bmV3IFhNTEh0dHBSZXF1ZXN0O2Z1bmN0aW9uIGsoKXskLmFib3J0KCl9JC5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgVj17c3RhdHVzVGV4dDokLnN0YXR1c1RleHQsaGVhZGVyczpVKCQuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCl8fCIiKX07Uy51cmwuaW5kZXhPZigiZmlsZTovLyIpPT09MCYmKCQuc3RhdHVzPDIwMHx8JC5zdGF0dXM+NTk5KT9WLnN0YXR1cz0yMDA6Vi5zdGF0dXM9JC5zdGF0dXMsVi51cmw9InJlc3BvbnNlVVJMImluICQ/JC5yZXNwb25zZVVSTDpWLmhlYWRlcnMuZ2V0KCJYLVJlcXVlc3QtVVJMIik7dmFyIFc9InJlc3BvbnNlImluICQ/JC5yZXNwb25zZTokLnJlc3BvbnNlVGV4dDtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7SShuZXcgTihXLFYpKX0sMCl9LCQub25lcnJvcj1mdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtBKG5ldyBUeXBlRXJyb3IoIk5ldHdvcmsgcmVxdWVzdCBmYWlsZWQiKSl9LDApfSwkLm9udGltZW91dD1mdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtBKG5ldyBUeXBlRXJyb3IoIk5ldHdvcmsgcmVxdWVzdCB0aW1lZCBvdXQiKSl9LDApfSwkLm9uYWJvcnQ9ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7QShuZXcgby5ET01FeGNlcHRpb24oIkFib3J0ZWQiLCJBYm9ydEVycm9yIikpfSwwKX07ZnVuY3Rpb24gSyhWKXt0cnl7cmV0dXJuIFY9PT0iIiYmYS5sb2NhdGlvbi5ocmVmP2EubG9jYXRpb24uaHJlZjpWfWNhdGNoe3JldHVybiBWfX1pZigkLm9wZW4oUy5tZXRob2QsSyhTLnVybCksITApLFMuY3JlZGVudGlhbHM9PT0iaW5jbHVkZSI/JC53aXRoQ3JlZGVudGlhbHM9ITA6Uy5jcmVkZW50aWFscz09PSJvbWl0IiYmKCQud2l0aENyZWRlbnRpYWxzPSExKSwicmVzcG9uc2VUeXBlImluICQmJihjLmJsb2I/JC5yZXNwb25zZVR5cGU9ImJsb2IiOmMuYXJyYXlCdWZmZXImJigkLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiKSksbSYmdHlwZW9mIG0uaGVhZGVycz09Im9iamVjdCImJiEobS5oZWFkZXJzIGluc3RhbmNlb2YgYnx8YS5IZWFkZXJzJiZtLmhlYWRlcnMgaW5zdGFuY2VvZiBhLkhlYWRlcnMpKXt2YXIgWj1bXTtPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhtLmhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24oVil7Wi5wdXNoKHAoVikpLCQuc2V0UmVxdWVzdEhlYWRlcihWLGcobS5oZWFkZXJzW1ZdKSl9KSxTLmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihWLFcpe1ouaW5kZXhPZihXKT09PS0xJiYkLnNldFJlcXVlc3RIZWFkZXIoVyxWKX0pfWVsc2UgUy5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oVixXKXskLnNldFJlcXVlc3RIZWFkZXIoVyxWKX0pO1Muc2lnbmFsJiYoUy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGspLCQub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7JC5yZWFkeVN0YXRlPT09NCYmUy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGspfSksJC5zZW5kKHR5cGVvZiBTLl9ib2R5SW5pdD4idSI/bnVsbDpTLl9ib2R5SW5pdCl9KX1yZXR1cm4gUi5wb2x5ZmlsbD0hMCxhLmZldGNofHwoYS5mZXRjaD1SLGEuSGVhZGVycz1iLGEuUmVxdWVzdD1ULGEuUmVzcG9uc2U9Tiksby5IZWFkZXJzPWIsby5SZXF1ZXN0PVQsby5SZXNwb25zZT1OLG8uZmV0Y2g9UixPYmplY3QuZGVmaW5lUHJvcGVydHkobywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksb30pKHt9KX0pKG4pLG4uZmV0Y2gucG9ueWZpbGw9ITAsZGVsZXRlIG4uZmV0Y2gucG9seWZpbGw7dmFyIGk9ci5mZXRjaD9yOm47ZT1pLmZldGNoLGUuZGVmYXVsdD1pLmZldGNoLGUuZmV0Y2g9aS5mZXRjaCxlLkhlYWRlcnM9aS5IZWFkZXJzLGUuUmVxdWVzdD1pLlJlcXVlc3QsZS5SZXNwb25zZT1pLlJlc3BvbnNlLHQuZXhwb3J0cz1lfSkoX2MsX2MuZXhwb3J0cyk7dmFyIHlEPV9jLmV4cG9ydHM7Y29uc3QgV2g9T2MoeUQpO3ZhciB3RD1PYmplY3QuZGVmaW5lUHJvcGVydHksbUQ9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMsYkQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMsR2g9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxFRD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHZEPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUsWWg9KHQsZSxyKT0+ZSBpbiB0P3dEKHQsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6cn0pOnRbZV09cixaaD0odCxlKT0+e2Zvcih2YXIgciBpbiBlfHwoZT17fSkpRUQuY2FsbChlLHIpJiZZaCh0LHIsZVtyXSk7aWYoR2gpZm9yKHZhciByIG9mIEdoKGUpKXZELmNhbGwoZSxyKSYmWWgodCxyLGVbcl0pO3JldHVybiB0fSxYaD0odCxlKT0+bUQodCxiRChlKSk7Y29uc3QgeEQ9e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiIsIkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxfRD0iUE9TVCIsSmg9e2hlYWRlcnM6eEQsbWV0aG9kOl9EfSxRaD0xMDtjbGFzcyBoMHtjb25zdHJ1Y3RvcihlLHI9ITEpe2lmKHRoaXMudXJsPWUsdGhpcy5kaXNhYmxlUHJvdmlkZXJQaW5nPXIsdGhpcy5ldmVudHM9bmV3IFN0LkV2ZW50RW1pdHRlcix0aGlzLmlzQXZhaWxhYmxlPSExLHRoaXMucmVnaXN0ZXJpbmc9ITEsIU5oKGUpKXRocm93IG5ldyBFcnJvcihgUHJvdmlkZWQgVVJMIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggSFRUUCBjb25uZWN0aW9uOiAke2V9YCk7dGhpcy51cmw9ZSx0aGlzLmRpc2FibGVQcm92aWRlclBpbmc9cn1nZXQgY29ubmVjdGVkKCl7cmV0dXJuIHRoaXMuaXNBdmFpbGFibGV9Z2V0IGNvbm5lY3RpbmcoKXtyZXR1cm4gdGhpcy5yZWdpc3RlcmluZ31vbihlLHIpe3RoaXMuZXZlbnRzLm9uKGUscil9b25jZShlLHIpe3RoaXMuZXZlbnRzLm9uY2UoZSxyKX1vZmYoZSxyKXt0aGlzLmV2ZW50cy5vZmYoZSxyKX1yZW1vdmVMaXN0ZW5lcihlLHIpe3RoaXMuZXZlbnRzLnJlbW92ZUxpc3RlbmVyKGUscil9YXN5bmMgb3BlbihlPXRoaXMudXJsKXthd2FpdCB0aGlzLnJlZ2lzdGVyKGUpfWFzeW5jIGNsb3NlKCl7aWYoIXRoaXMuaXNBdmFpbGFibGUpdGhyb3cgbmV3IEVycm9yKCJDb25uZWN0aW9uIGFscmVhZHkgY2xvc2VkIik7dGhpcy5vbkNsb3NlKCl9YXN5bmMgc2VuZChlKXt0aGlzLmlzQXZhaWxhYmxlfHxhd2FpdCB0aGlzLnJlZ2lzdGVyKCk7dHJ5e2NvbnN0IHI9SW4oZSksbj1hd2FpdChhd2FpdCBXaCh0aGlzLnVybCxYaChaaCh7fSxKaCkse2JvZHk6cn0pKSkuanNvbigpO3RoaXMub25QYXlsb2FkKHtkYXRhOm59KX1jYXRjaChyKXt0aGlzLm9uRXJyb3IoZS5pZCxyKX19YXN5bmMgcmVnaXN0ZXIoZT10aGlzLnVybCl7aWYoIU5oKGUpKXRocm93IG5ldyBFcnJvcihgUHJvdmlkZWQgVVJMIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggSFRUUCBjb25uZWN0aW9uOiAke2V9YCk7aWYodGhpcy5yZWdpc3RlcmluZyl7Y29uc3Qgcj10aGlzLmV2ZW50cy5nZXRNYXhMaXN0ZW5lcnMoKTtyZXR1cm4odGhpcy5ldmVudHMubGlzdGVuZXJDb3VudCgicmVnaXN0ZXJfZXJyb3IiKT49cnx8dGhpcy5ldmVudHMubGlzdGVuZXJDb3VudCgib3BlbiIpPj1yKSYmdGhpcy5ldmVudHMuc2V0TWF4TGlzdGVuZXJzKHIrMSksbmV3IFByb21pc2UoKG4saSk9Pnt0aGlzLmV2ZW50cy5vbmNlKCJyZWdpc3Rlcl9lcnJvciIscz0+e3RoaXMucmVzZXRNYXhMaXN0ZW5lcnMoKSxpKHMpfSksdGhpcy5ldmVudHMub25jZSgib3BlbiIsKCk9PntpZih0aGlzLnJlc2V0TWF4TGlzdGVuZXJzKCksdHlwZW9mIHRoaXMuaXNBdmFpbGFibGU+InUiKXJldHVybiBpKG5ldyBFcnJvcigiSFRUUCBjb25uZWN0aW9uIGlzIG1pc3Npbmcgb3IgaW52YWxpZCIpKTtuKCl9KX0pfXRoaXMudXJsPWUsdGhpcy5yZWdpc3RlcmluZz0hMDt0cnl7aWYoIXRoaXMuZGlzYWJsZVByb3ZpZGVyUGluZyl7Y29uc3Qgcj1Jbih7aWQ6MSxqc29ucnBjOiIyLjAiLG1ldGhvZDoidGVzdCIscGFyYW1zOltdfSk7YXdhaXQgV2goZSxYaChaaCh7fSxKaCkse2JvZHk6cn0pKX10aGlzLm9uT3BlbigpfWNhdGNoKHIpe2NvbnN0IG49dGhpcy5wYXJzZUVycm9yKHIpO3Rocm93IHRoaXMuZXZlbnRzLmVtaXQoInJlZ2lzdGVyX2Vycm9yIixuKSx0aGlzLm9uQ2xvc2UoKSxufX1vbk9wZW4oKXt0aGlzLmlzQXZhaWxhYmxlPSEwLHRoaXMucmVnaXN0ZXJpbmc9ITEsdGhpcy5ldmVudHMuZW1pdCgib3BlbiIpfW9uQ2xvc2UoKXt0aGlzLmlzQXZhaWxhYmxlPSExLHRoaXMucmVnaXN0ZXJpbmc9ITEsdGhpcy5ldmVudHMuZW1pdCgiY2xvc2UiKX1vblBheWxvYWQoZSl7aWYodHlwZW9mIGUuZGF0YT4idSIpcmV0dXJuO2NvbnN0IHI9dHlwZW9mIGUuZGF0YT09InN0cmluZyI/X24oZS5kYXRhKTplLmRhdGE7dGhpcy5ldmVudHMuZW1pdCgicGF5bG9hZCIscil9b25FcnJvcihlLHIpe2NvbnN0IG49dGhpcy5wYXJzZUVycm9yKHIpLGk9bi5tZXNzYWdlfHxuLnRvU3RyaW5nKCkscz1MbyhlLGkpO3RoaXMuZXZlbnRzLmVtaXQoInBheWxvYWQiLHMpfXBhcnNlRXJyb3IoZSxyPXRoaXMudXJsKXtyZXR1cm4gUmcoZSxyLCJIVFRQIil9cmVzZXRNYXhMaXN0ZW5lcnMoKXt0aGlzLmV2ZW50cy5nZXRNYXhMaXN0ZW5lcnMoKT5RaCYmdGhpcy5ldmVudHMuc2V0TWF4TGlzdGVuZXJzKFFoKX19Y29uc3QgZWY9ImVycm9yIixJRD0id3NzOi8vcmVsYXkud2FsbGV0Y29ubmVjdC5vcmciLFNEPSJ3YyIsZjA9InVuaXZlcnNhbF9wcm92aWRlciIsUHM9YCR7U0R9QDI6JHtmMH06YCxkMD0iaHR0cHM6Ly9ycGMud2FsbGV0Y29ubmVjdC5vcmcvdjEvIixwMD0iZ2VuZXJpYyIsQUQ9YCR7ZDB9YnVuZGxlcmAsaWk9ImNhbGxfc3RhdHVzIixERD04NjQwMCxBdT17REVGQVVMVF9DSEFJTl9DSEFOR0VEOiJkZWZhdWx0X2NoYWluX2NoYW5nZWQifTtmdW5jdGlvbiBnMCh0LGUscil7Y29uc3Qgbj12cih0KTtyZXR1cm4gZS5ycGNNYXA/LltuLnJlZmVyZW5jZV18fGAke2QwfT9jaGFpbklkPSR7bi5uYW1lc3BhY2V9OiR7bi5yZWZlcmVuY2V9JnByb2plY3RJZD0ke3J9YH1mdW5jdGlvbiBPRCh0KXtyZXR1cm4gdC5pbmNsdWRlcygiOiIpP3Quc3BsaXQoIjoiKVsxXTp0fWZ1bmN0aW9uIHkwKHQpe3JldHVybiB0Lm1hcChlPT5gJHtlLnNwbGl0KCI6IilbMF19OiR7ZS5zcGxpdCgiOiIpWzFdfWApfWZ1bmN0aW9uICREKHQsZSl7Y29uc3Qgcj1PYmplY3Qua2V5cyhlLm5hbWVzcGFjZXMpLmZpbHRlcihpPT5pLmluY2x1ZGVzKHQpKTtpZighci5sZW5ndGgpcmV0dXJuW107Y29uc3Qgbj1bXTtyZXR1cm4gci5mb3JFYWNoKGk9Pntjb25zdCBzPWUubmFtZXNwYWNlc1tpXS5hY2NvdW50cztuLnB1c2goLi4ucyl9KSxufWZ1bmN0aW9uIHRmKHQpe3JldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXModCkuZmlsdGVyKChbZSxyXSk9PnI/LmNoYWlucz8ubGVuZ3RoJiZyPy5jaGFpbnM/Lmxlbmd0aD4wKSl9ZnVuY3Rpb24gVHModD17fSxlPXt9KXtjb25zdCByPXRmKHJmKHQpKSxuPXRmKHJmKGUpKTtyZXR1cm4gSjgocixuKX1mdW5jdGlvbiByZih0KXtjb25zdCBlPXt9O2lmKCFucih0KSlyZXR1cm4gZTtmb3IoY29uc3RbcixuXW9mIE9iamVjdC5lbnRyaWVzKHQpKXtjb25zdCBpPU5vKHIpP1tyXTpuLmNoYWlucyxzPW4ubWV0aG9kc3x8W10sbz1uLmV2ZW50c3x8W10sYT1uLnJwY01hcHx8e30sYz1ZbihyKTtlW2NdPXsuLi5lW2NdLC4uLm4sY2hhaW5zOnJyKGksZVtjXT8uY2hhaW5zKSxtZXRob2RzOnJyKHMsZVtjXT8ubWV0aG9kcyksZXZlbnRzOnJyKG8sZVtjXT8uZXZlbnRzKX0sKG5yKGEpfHxucihlW2NdPy5ycGNNYXB8fHt9KSkmJihlW2NdLnJwY01hcD17Li4uYSwuLi5lW2NdPy5ycGNNYXB9KX1yZXR1cm4gZX1mdW5jdGlvbiBuZih0KXtyZXR1cm4gdC5pbmNsdWRlcygiOiIpP3Quc3BsaXQoIjoiKVsyXTp0fWZ1bmN0aW9uIHNmKHQpe2NvbnN0IGU9e307Zm9yKGNvbnN0W3Isbl1vZiBPYmplY3QuZW50cmllcyh0KSl7Y29uc3QgaT1uLm1ldGhvZHN8fFtdLHM9bi5ldmVudHN8fFtdLG89bi5hY2NvdW50c3x8W10sYT1ObyhyKT9bcl06bi5jaGFpbnM/bi5jaGFpbnM6eTAobi5hY2NvdW50cyk7ZVtyXT17Y2hhaW5zOmEsbWV0aG9kczppLGV2ZW50czpzLGFjY291bnRzOm99fXJldHVybiBlfWZ1bmN0aW9uIFVhKHQpe3JldHVybiB0eXBlb2YgdD09Im51bWJlciI/dDp0LmluY2x1ZGVzKCIweCIpP3BhcnNlSW50KHQsMTYpOih0PXQuaW5jbHVkZXMoIjoiKT90LnNwbGl0KCI6IilbMV06dCxpc05hTihOdW1iZXIodCkpP3Q6TnVtYmVyKHQpKX1mdW5jdGlvbiBCRCh0KXt0cnl7Y29uc3QgZT1KU09OLnBhcnNlKHQpO3JldHVybiB0eXBlb2YgZT09Im9iamVjdCImJmUhPT1udWxsJiYhQXJyYXkuaXNBcnJheShlKX1jYXRjaHtyZXR1cm4hMX19Y29uc3QgdzA9e30sc2k9dD0+dzBbdF0sTmE9KHQsZSk9Pnt3MFt0XT1lfSxvZj0iZWlwMTU1IixQRD1bImF0b21pYyIsImZsb3ctY29udHJvbCIsInBheW1hc3RlclNlcnZpY2UiLCJzZXNzaW9uS2V5cyIsImF1eGlsaWFyeUZ1bmRzIl0sVEQ9dD0+dCYmdC5zdGFydHNXaXRoKCIweCIpP0JpZ0ludCh0KS50b1N0cmluZygxMCk6dCxMYT10PT50JiZ0LnN0YXJ0c1dpdGgoIjB4Iik/dDpgMHgke0JpZ0ludCh0KS50b1N0cmluZygxNil9YCxhZj10PT5PYmplY3Qua2V5cyh0KS5maWx0ZXIoZT0+UEQuaW5jbHVkZXMoZSkpLnJlZHVjZSgoZSxyKT0+KGVbcl09UkQodFtyXSksZSkse30pLFJEPXQ9PnR5cGVvZiB0PT0ic3RyaW5nIiYmQkQodCk/SlNPTi5wYXJzZSh0KTp0LENEPSh0LGUscik9Pntjb25zdHtzZXNzaW9uUHJvcGVydGllczpuPXt9LHNjb3BlZFByb3BlcnRpZXM6aT17fX09dCxzPXt9O2lmKCFucihpKSYmIW5yKG4pKXJldHVybjtjb25zdCBvPWFmKG4pO2Zvcihjb25zdCBhIG9mIHIpe2NvbnN0IGM9VEQoYSk7aWYoIWMpY29udGludWU7c1tMYShjKV09bztjb25zdCB1PWk/LltgJHtvZn06JHtjfWBdO2lmKHUpe2NvbnN0IGw9dT8uW2Ake29mfToke2N9OiR7ZX1gXTtzW0xhKGMpXT17Li4uc1tMYShjKV0sLi4uYWYobHx8dSl9fX1mb3IoY29uc3RbYSxjXW9mIE9iamVjdC5lbnRyaWVzKHMpKU9iamVjdC5rZXlzKGMpLmxlbmd0aD09PTAmJmRlbGV0ZSBzW2FdO3JldHVybiBPYmplY3Qua2V5cyhzKS5sZW5ndGg+MD9zOnZvaWQgMH07bGV0IEZhO2NsYXNzIER1e2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmFnZT1lfWFzeW5jIGdldEl0ZW0oZSl7cmV0dXJuIGF3YWl0IHRoaXMuc3RvcmFnZS5nZXRJdGVtKGUpfWFzeW5jIHNldEl0ZW0oZSxyKXtyZXR1cm4gYXdhaXQgdGhpcy5zdG9yYWdlLnNldEl0ZW0oZSxyKX1hc3luYyByZW1vdmVJdGVtKGUpe3JldHVybiBhd2FpdCB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbShlKX1zdGF0aWMgZ2V0U3RvcmFnZShlKXtyZXR1cm4gRmF8fChGYT1uZXcgRHUoZSkpLEZhfX1hc3luYyBmdW5jdGlvbiBVRCh0LGUpe2NvbnN0IHI9dnIodC5yZXN1bHQuY2FwYWJpbGl0aWVzLmNhaXAzNDUuY2FpcDIpLG49dC5yZXN1bHQuY2FwYWJpbGl0aWVzLmNhaXAzNDUudHJhbnNhY3Rpb25IYXNoZXMsaT1hd2FpdCBQcm9taXNlLmFsbFNldHRsZWQobi5tYXAoaD0+TkQoci5yZWZlcmVuY2UsaCxlKSkpLHM9aS5maWx0ZXIoaD0+aC5zdGF0dXM9PT0iZnVsZmlsbGVkIikubWFwKGg9PmgudmFsdWUpLmZpbHRlcihoPT5oKTtpLmZpbHRlcihoPT5oLnN0YXR1cz09PSJyZWplY3RlZCIpLmZvckVhY2goaD0+Y29uc29sZS53YXJuKCJGYWlsZWQgdG8gZmV0Y2ggdHJhbnNhY3Rpb24gcmVjZWlwdDoiLGgucmVhc29uKSk7Y29uc3Qgbz0hcy5sZW5ndGh8fHMuc29tZShoPT4haCksYT1zLmV2ZXJ5KGg9Pmg/LnN0YXR1cz09PSIweDEiKSxjPXMuZXZlcnkoaD0+aD8uc3RhdHVzPT09IjB4MCIpLHU9cy5zb21lKGg9Pmg/LnN0YXR1cz09PSIweDAiKTtsZXQgbDtyZXR1cm4gbz9sPTEwMDphP2w9MjAwOmM/bD01MDA6dSYmKGw9NjAwKSx7aWQ6dC5yZXN1bHQuaWQsdmVyc2lvbjp0LnJlcXVlc3QudmVyc2lvbixhdG9taWM6dC5yZXF1ZXN0LmF0b21pY1JlcXVpcmVkLGNoYWluSWQ6dC5yZXF1ZXN0LmNoYWluSWQsY2FwYWJpbGl0aWVzOnQucmVzdWx0LmNhcGFiaWxpdGllcyxyZWNlaXB0czpzLHN0YXR1czpsfX1hc3luYyBmdW5jdGlvbiBORCh0LGUscil7cmV0dXJuIGF3YWl0IHIocGFyc2VJbnQodCkpLnJlcXVlc3QoUnQoImV0aF9nZXRUcmFuc2FjdGlvblJlY2VpcHQiLFtlXSkpfWFzeW5jIGZ1bmN0aW9uIExEKHtzZW5kQ2FsbHM6dCxzdG9yYWdlOmV9KXtjb25zdCByPWF3YWl0IGUuZ2V0SXRlbShpaSk7YXdhaXQgZS5zZXRJdGVtKGlpLHsuLi5yLFt0LnJlc3VsdC5pZF06e3JlcXVlc3Q6dC5yZXF1ZXN0LHJlc3VsdDp0LnJlc3VsdCxleHBpcnk6U2UoREQpfX0pfWFzeW5jIGZ1bmN0aW9uIEZEKHtyZXN1bHRJZDp0LHN0b3JhZ2U6ZX0pe2NvbnN0IHI9YXdhaXQgZS5nZXRJdGVtKGlpKTtpZihyKXtkZWxldGUgclt0XSxhd2FpdCBlLnNldEl0ZW0oaWkscik7Zm9yKGNvbnN0IG4gaW4gcilYdChyW25dLmV4cGlyeSkmJmRlbGV0ZSByW25dO2F3YWl0IGUuc2V0SXRlbShpaSxyKX19YXN5bmMgZnVuY3Rpb24ga0Qoe3Jlc3VsdElkOnQsc3RvcmFnZTplfSl7Y29uc3Qgcj0oYXdhaXQgZS5nZXRJdGVtKGlpKSk/Llt0XTtpZihyJiYhWHQoci5leHBpcnkpKXJldHVybiByO2F3YWl0IEZEKHtyZXN1bHRJZDp0LHN0b3JhZ2U6ZX0pfWNsYXNzIE1Ee2NvbnN0cnVjdG9yKGUpe3RoaXMubmFtZT0iZWlwMTU1Iix0aGlzLm5hbWVzcGFjZT1lLm5hbWVzcGFjZSx0aGlzLmV2ZW50cz1zaSgiZXZlbnRzIiksdGhpcy5jbGllbnQ9c2koImNsaWVudCIpLHRoaXMuaHR0cFByb3ZpZGVycz10aGlzLmNyZWF0ZUh0dHBQcm92aWRlcnMoKSx0aGlzLmNoYWluSWQ9cGFyc2VJbnQodGhpcy5nZXREZWZhdWx0Q2hhaW4oKSksdGhpcy5zdG9yYWdlPUR1LmdldFN0b3JhZ2UodGhpcy5jbGllbnQuY29yZS5zdG9yYWdlKX1hc3luYyByZXF1ZXN0KGUpe3N3aXRjaChlLnJlcXVlc3QubWV0aG9kKXtjYXNlImV0aF9yZXF1ZXN0QWNjb3VudHMiOnJldHVybiB0aGlzLmdldEFjY291bnRzKCk7Y2FzZSJldGhfYWNjb3VudHMiOnJldHVybiB0aGlzLmdldEFjY291bnRzKCk7Y2FzZSJ3YWxsZXRfc3dpdGNoRXRoZXJldW1DaGFpbiI6cmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlU3dpdGNoQ2hhaW4oZSk7Y2FzZSJldGhfY2hhaW5JZCI6cmV0dXJuIHBhcnNlSW50KHRoaXMuZ2V0RGVmYXVsdENoYWluKCkpO2Nhc2Uid2FsbGV0X2dldENhcGFiaWxpdGllcyI6cmV0dXJuIGF3YWl0IHRoaXMuZ2V0Q2FwYWJpbGl0aWVzKGUpO2Nhc2Uid2FsbGV0X2dldENhbGxzU3RhdHVzIjpyZXR1cm4gYXdhaXQgdGhpcy5nZXRDYWxsU3RhdHVzKGUpO2Nhc2Uid2FsbGV0X3NlbmRDYWxscyI6cmV0dXJuIGF3YWl0IHRoaXMuc2VuZENhbGxzKGUpfXJldHVybiB0aGlzLm5hbWVzcGFjZS5tZXRob2RzLmluY2x1ZGVzKGUucmVxdWVzdC5tZXRob2QpP2F3YWl0IHRoaXMuY2xpZW50LnJlcXVlc3QoZSk6dGhpcy5nZXRIdHRwUHJvdmlkZXIoKS5yZXF1ZXN0KGUucmVxdWVzdCl9dXBkYXRlTmFtZXNwYWNlKGUpe3RoaXMubmFtZXNwYWNlPU9iamVjdC5hc3NpZ24odGhpcy5uYW1lc3BhY2UsZSl9c2V0RGVmYXVsdENoYWluKGUscil7dGhpcy5odHRwUHJvdmlkZXJzW2VdfHx0aGlzLnNldEh0dHBQcm92aWRlcihwYXJzZUludChlKSxyKTtjb25zdCBuPXRoaXMuY2hhaW5JZDt0aGlzLmNoYWluSWQ9cGFyc2VJbnQoZSksdGhpcy5ldmVudHMuZW1pdChBdS5ERUZBVUxUX0NIQUlOX0NIQU5HRUQse2N1cnJlbnRDYWlwQ2hhaW5JZDpgJHt0aGlzLm5hbWV9OiR7ZX1gLHByZXZpb3VzQ2FpcENoYWluSWQ6YCR7dGhpcy5uYW1lfToke259YH0pfXJlcXVlc3RBY2NvdW50cygpe3JldHVybiB0aGlzLmdldEFjY291bnRzKCl9Z2V0RGVmYXVsdENoYWluKCl7aWYodGhpcy5jaGFpbklkKXJldHVybiB0aGlzLmNoYWluSWQudG9TdHJpbmcoKTtpZih0aGlzLm5hbWVzcGFjZS5kZWZhdWx0Q2hhaW4pcmV0dXJuIHRoaXMubmFtZXNwYWNlLmRlZmF1bHRDaGFpbjtjb25zdCBlPXRoaXMubmFtZXNwYWNlLmNoYWluc1swXTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkNoYWluSWQgbm90IGZvdW5kIik7cmV0dXJuIGUuc3BsaXQoIjoiKVsxXX1jcmVhdGVIdHRwUHJvdmlkZXIoZSxyKXtjb25zdCBuPXJ8fGcwKGAke3RoaXMubmFtZX06JHtlfWAsdGhpcy5uYW1lc3BhY2UsdGhpcy5jbGllbnQuY29yZS5wcm9qZWN0SWQpO2lmKCFuKXRocm93IG5ldyBFcnJvcihgTm8gUlBDIHVybCBwcm92aWRlZCBmb3IgY2hhaW5JZDogJHtlfWApO3JldHVybiBuZXcgYnUobmV3IGgwKG4sc2koImRpc2FibGVQcm92aWRlclBpbmciKSkpfXNldEh0dHBQcm92aWRlcihlLHIpe2NvbnN0IG49dGhpcy5jcmVhdGVIdHRwUHJvdmlkZXIoZSxyKTtuJiYodGhpcy5odHRwUHJvdmlkZXJzW2VdPW4pfWNyZWF0ZUh0dHBQcm92aWRlcnMoKXtjb25zdCBlPXt9O3JldHVybiB0aGlzLm5hbWVzcGFjZS5jaGFpbnMuZm9yRWFjaChyPT57Y29uc3Qgbj1wYXJzZUludChPRChyKSk7ZVtuXT10aGlzLmNyZWF0ZUh0dHBQcm92aWRlcihuLHRoaXMubmFtZXNwYWNlLnJwY01hcD8uW3JdKX0pLGV9Z2V0QWNjb3VudHMoKXtjb25zdCBlPXRoaXMubmFtZXNwYWNlLmFjY291bnRzO3JldHVybiBlP1suLi5uZXcgU2V0KGUuZmlsdGVyKHI9PnIuc3BsaXQoIjoiKVsxXT09PXRoaXMuY2hhaW5JZC50b1N0cmluZygpKS5tYXAocj0+ci5zcGxpdCgiOiIpWzJdKSldOltdfWdldEh0dHBQcm92aWRlcihlKXtjb25zdCByPWV8fHRoaXMuY2hhaW5JZDtyZXR1cm4gdGhpcy5odHRwUHJvdmlkZXJzW3JdfHwodGhpcy5odHRwUHJvdmlkZXJzPXsuLi50aGlzLmh0dHBQcm92aWRlcnMsW3JdOnRoaXMuY3JlYXRlSHR0cFByb3ZpZGVyKHIpfSx0aGlzLmh0dHBQcm92aWRlcnNbcl0pfWFzeW5jIGhhbmRsZVN3aXRjaENoYWluKGUpe2xldCByPWUucmVxdWVzdC5wYXJhbXM/ZS5yZXF1ZXN0LnBhcmFtc1swXT8uY2hhaW5JZDoiMHgwIjtyPXIuc3RhcnRzV2l0aCgiMHgiKT9yOmAweCR7cn1gO2NvbnN0IG49cGFyc2VJbnQociwxNik7aWYodGhpcy5pc0NoYWluQXBwcm92ZWQobikpdGhpcy5zZXREZWZhdWx0Q2hhaW4oYCR7bn1gKTtlbHNlIGlmKHRoaXMubmFtZXNwYWNlLm1ldGhvZHMuaW5jbHVkZXMoIndhbGxldF9zd2l0Y2hFdGhlcmV1bUNoYWluIikpYXdhaXQgdGhpcy5jbGllbnQucmVxdWVzdCh7dG9waWM6ZS50b3BpYyxyZXF1ZXN0OnttZXRob2Q6ZS5yZXF1ZXN0Lm1ldGhvZCxwYXJhbXM6W3tjaGFpbklkOnJ9XX0sY2hhaW5JZDp0aGlzLm5hbWVzcGFjZS5jaGFpbnM/LlswXX0pLHRoaXMuc2V0RGVmYXVsdENoYWluKGAke259YCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBzd2l0Y2ggdG8gY2hhaW4gJ2VpcDE1NToke259Jy4gVGhlIGNoYWluIGlzIG5vdCBhcHByb3ZlZCBvciB0aGUgd2FsbGV0IGRvZXMgbm90IHN1cHBvcnQgJ3dhbGxldF9zd2l0Y2hFdGhlcmV1bUNoYWluJyBtZXRob2QuYCk7cmV0dXJuIG51bGx9aXNDaGFpbkFwcHJvdmVkKGUpe3JldHVybiB0aGlzLm5hbWVzcGFjZS5jaGFpbnMuaW5jbHVkZXMoYCR7dGhpcy5uYW1lfToke2V9YCl9YXN5bmMgZ2V0Q2FwYWJpbGl0aWVzKGUpe2NvbnN0IHI9ZS5yZXF1ZXN0Py5wYXJhbXM/LlswXSxuPWUucmVxdWVzdD8ucGFyYW1zPy5bMV18fFtdO2lmKCFyKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyBhZGRyZXNzIHBhcmFtZXRlciBpbiBgd2FsbGV0X2dldENhcGFiaWxpdGllc2AgcmVxdWVzdCIpO2NvbnN0IGk9dGhpcy5jbGllbnQuc2Vzc2lvbi5nZXQoZS50b3BpYykscz1pPy5zZXNzaW9uUHJvcGVydGllcz8uY2FwYWJpbGl0aWVzfHx7fSxvPW4ubGVuZ3RoPjA/bi5qb2luKCIsIik6YDB4JHt0aGlzLmNoYWluSWQudG9TdHJpbmcoMTYpfWAsYT1gJHtyfSR7b31gLGM9cz8uW2FdO2lmKGMpcmV0dXJuIGM7bGV0IHU7dHJ5e3U9Q0QoaSxyLG4pfWNhdGNoKGgpe2NvbnNvbGUud2FybigiRmFpbGVkIHRvIGV4dHJhY3QgY2FwYWJpbGl0aWVzIGZyb20gc2Vzc2lvbiIsaCl9aWYodSlyZXR1cm4gdTtjb25zdCBsPWF3YWl0IHRoaXMuY2xpZW50LnJlcXVlc3QoZSk7dHJ5e2F3YWl0IHRoaXMuY2xpZW50LnNlc3Npb24udXBkYXRlKGUudG9waWMse3Nlc3Npb25Qcm9wZXJ0aWVzOnsuLi5pLnNlc3Npb25Qcm9wZXJ0aWVzfHx7fSxjYXBhYmlsaXRpZXM6ey4uLnN8fHt9LFthXTpsfX19KX1jYXRjaChoKXtjb25zb2xlLndhcm4oIkZhaWxlZCB0byB1cGRhdGUgc2Vzc2lvbiB3aXRoIGNhcGFiaWxpdGllcyIsaCl9cmV0dXJuIGx9YXN5bmMgZ2V0Q2FsbFN0YXR1cyhlKXtjb25zdCByPXRoaXMuY2xpZW50LnNlc3Npb24uZ2V0KGUudG9waWMpLG49ci5zZXNzaW9uUHJvcGVydGllcz8uYnVuZGxlcl9uYW1lO2lmKG4pe2NvbnN0IG89dGhpcy5nZXRCdW5kbGVyVXJsKGUuY2hhaW5JZCxuKTt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuZ2V0VXNlck9wZXJhdGlvblJlY2VpcHQobyxlKX1jYXRjaChhKXtjb25zb2xlLndhcm4oIkZhaWxlZCB0byBmZXRjaCBjYWxsIHN0YXR1cyBmcm9tIGJ1bmRsZXIiLGEsbyl9fWNvbnN0IGk9ci5zZXNzaW9uUHJvcGVydGllcz8uYnVuZGxlcl91cmw7aWYoaSl0cnl7cmV0dXJuIGF3YWl0IHRoaXMuZ2V0VXNlck9wZXJhdGlvblJlY2VpcHQoaSxlKX1jYXRjaChvKXtjb25zb2xlLndhcm4oIkZhaWxlZCB0byBmZXRjaCBjYWxsIHN0YXR1cyBmcm9tIGN1c3RvbSBidW5kbGVyIixvLGkpfWNvbnN0IHM9YXdhaXQga0Qoe3Jlc3VsdElkOmUucmVxdWVzdC5wYXJhbXM/LlswXSxzdG9yYWdlOnRoaXMuc3RvcmFnZX0pO2lmKHMpdHJ5e3JldHVybiBhd2FpdCBVRChzLHRoaXMuZ2V0SHR0cFByb3ZpZGVyLmJpbmQodGhpcykpfWNhdGNoKG8pe2NvbnNvbGUud2FybigiRmFpbGVkIHRvIGZldGNoIGNhbGwgc3RhdHVzIGZyb20gc3RvcmVkIHNlbmQgY2FsbHMiLG8scyl9aWYodGhpcy5uYW1lc3BhY2UubWV0aG9kcy5pbmNsdWRlcyhlLnJlcXVlc3QubWV0aG9kKSlyZXR1cm4gYXdhaXQgdGhpcy5jbGllbnQucmVxdWVzdChlKTt0aHJvdyBuZXcgRXJyb3IoIkZldGNoaW5nIGNhbGwgc3RhdHVzIG5vdCBhcHByb3ZlZCBieSB0aGUgd2FsbGV0LiIpfWFzeW5jIGdldFVzZXJPcGVyYXRpb25SZWNlaXB0KGUscil7Y29uc3Qgbj1uZXcgVVJMKGUpLGk9YXdhaXQgZmV0Y2gobix7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoUnQoImV0aF9nZXRVc2VyT3BlcmF0aW9uUmVjZWlwdCIsW3IucmVxdWVzdC5wYXJhbXM/LlswXV0pKX0pO2lmKCFpLm9rKXRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIHVzZXIgb3BlcmF0aW9uIHJlY2VpcHQgLSAke2kuc3RhdHVzfWApO3JldHVybiBhd2FpdCBpLmpzb24oKX1nZXRCdW5kbGVyVXJsKGUscil7cmV0dXJuYCR7QUR9P3Byb2plY3RJZD0ke3RoaXMuY2xpZW50LmNvcmUucHJvamVjdElkfSZjaGFpbklkPSR7ZX0mYnVuZGxlcj0ke3J9YH1hc3luYyBzZW5kQ2FsbHMoZSl7Y29uc3Qgcj1hd2FpdCB0aGlzLmNsaWVudC5yZXF1ZXN0KGUpLG49ZS5yZXF1ZXN0LnBhcmFtcz8uWzBdLGk9cj8uaWQscz1yPy5jYXBhYmlsaXRpZXN8fHt9LG89cz8uY2FpcDM0NT8uY2FpcDIsYT1zPy5jYWlwMzQ1Py50cmFuc2FjdGlvbkhhc2hlcztyZXR1cm4haXx8IW98fCFhPy5sZW5ndGh8fGF3YWl0IExEKHtzZW5kQ2FsbHM6e3JlcXVlc3Q6bixyZXN1bHQ6cn0sc3RvcmFnZTp0aGlzLnN0b3JhZ2V9KSxyfX1jbGFzcyBxRHtjb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWU9cDAsdGhpcy5uYW1lc3BhY2U9ZS5uYW1lc3BhY2UsdGhpcy5ldmVudHM9c2koImV2ZW50cyIpLHRoaXMuY2xpZW50PXNpKCJjbGllbnQiKSx0aGlzLmNoYWluSWQ9dGhpcy5nZXREZWZhdWx0Q2hhaW4oKSx0aGlzLm5hbWU9dGhpcy5nZXROYW1lc3BhY2VOYW1lKCksdGhpcy5odHRwUHJvdmlkZXJzPXRoaXMuY3JlYXRlSHR0cFByb3ZpZGVycygpfXVwZGF0ZU5hbWVzcGFjZShlKXt0aGlzLm5hbWVzcGFjZS5jaGFpbnM9Wy4uLm5ldyBTZXQoKHRoaXMubmFtZXNwYWNlLmNoYWluc3x8W10pLmNvbmNhdChlLmNoYWluc3x8W10pKV0sdGhpcy5uYW1lc3BhY2UuYWNjb3VudHM9Wy4uLm5ldyBTZXQoKHRoaXMubmFtZXNwYWNlLmFjY291bnRzfHxbXSkuY29uY2F0KGUuYWNjb3VudHN8fFtdKSldLHRoaXMubmFtZXNwYWNlLm1ldGhvZHM9Wy4uLm5ldyBTZXQoKHRoaXMubmFtZXNwYWNlLm1ldGhvZHN8fFtdKS5jb25jYXQoZS5tZXRob2RzfHxbXSkpXSx0aGlzLm5hbWVzcGFjZS5ldmVudHM9Wy4uLm5ldyBTZXQoKHRoaXMubmFtZXNwYWNlLmV2ZW50c3x8W10pLmNvbmNhdChlLmV2ZW50c3x8W10pKV0sdGhpcy5odHRwUHJvdmlkZXJzPXRoaXMuY3JlYXRlSHR0cFByb3ZpZGVycygpfXJlcXVlc3RBY2NvdW50cygpe3JldHVybiB0aGlzLmdldEFjY291bnRzKCl9cmVxdWVzdChlKXtyZXR1cm4gdGhpcy5uYW1lc3BhY2UubWV0aG9kcy5pbmNsdWRlcyhlLnJlcXVlc3QubWV0aG9kKT90aGlzLmNsaWVudC5yZXF1ZXN0KGUpOnRoaXMuZ2V0SHR0cFByb3ZpZGVyKGUuY2hhaW5JZCkucmVxdWVzdChlLnJlcXVlc3QpfXNldERlZmF1bHRDaGFpbihlLHIpe3RoaXMuaHR0cFByb3ZpZGVyc1tlXXx8dGhpcy5zZXRIdHRwUHJvdmlkZXIoZSxyKTtjb25zdCBuPXRoaXMuY2hhaW5JZDt0aGlzLmNoYWluSWQ9ZSx0aGlzLmV2ZW50cy5lbWl0KEF1LkRFRkFVTFRfQ0hBSU5fQ0hBTkdFRCx7Y3VycmVudENhaXBDaGFpbklkOmAke3RoaXMubmFtZX06JHtlfWAscHJldmlvdXNDYWlwQ2hhaW5JZDpgJHt0aGlzLm5hbWV9OiR7bn1gfSl9Z2V0RGVmYXVsdENoYWluKCl7aWYodGhpcy5jaGFpbklkKXJldHVybiB0aGlzLmNoYWluSWQ7aWYodGhpcy5uYW1lc3BhY2UuZGVmYXVsdENoYWluKXJldHVybiB0aGlzLm5hbWVzcGFjZS5kZWZhdWx0Q2hhaW47Y29uc3QgZT10aGlzLm5hbWVzcGFjZS5jaGFpbnNbMF07aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJDaGFpbklkIG5vdCBmb3VuZCIpO3JldHVybiBlLnNwbGl0KCI6IilbMV19Z2V0TmFtZXNwYWNlTmFtZSgpe2NvbnN0IGU9dGhpcy5uYW1lc3BhY2UuY2hhaW5zWzBdO2lmKCFlKXRocm93IG5ldyBFcnJvcigiQ2hhaW5JZCBub3QgZm91bmQiKTtyZXR1cm4gdnIoZSkubmFtZXNwYWNlfWdldEFjY291bnRzKCl7Y29uc3QgZT10aGlzLm5hbWVzcGFjZS5hY2NvdW50cztyZXR1cm4gZT9bLi4ubmV3IFNldChlLmZpbHRlcihyPT5yLnNwbGl0KCI6IilbMV09PT10aGlzLmNoYWluSWQudG9TdHJpbmcoKSkubWFwKHI9PnIuc3BsaXQoIjoiKVsyXSkpXTpbXX1jcmVhdGVIdHRwUHJvdmlkZXJzKCl7Y29uc3QgZT17fTtyZXR1cm4gdGhpcy5uYW1lc3BhY2U/LmFjY291bnRzPy5mb3JFYWNoKHI9Pntjb25zdCBuPXZyKHIpLGk9dGhpcy5uYW1lc3BhY2U/LnJwY01hcD8uW2Ake24ubmFtZXNwYWNlfToke24ucmVmZXJlbmNlfWBdO2Vbbi5yZWZlcmVuY2VdPXRoaXMuY3JlYXRlSHR0cFByb3ZpZGVyKHIsaSl9KSxlfWdldEh0dHBQcm92aWRlcihlKXtjb25zdCByPXZyKGUpLnJlZmVyZW5jZSxuPXRoaXMuaHR0cFByb3ZpZGVyc1tyXTtpZih0eXBlb2Ygbj4idSIpdGhyb3cgbmV3IEVycm9yKGBKU09OLVJQQyBwcm92aWRlciBmb3IgJHtlfSBub3QgZm91bmRgKTtyZXR1cm4gbn1zZXRIdHRwUHJvdmlkZXIoZSxyKXtjb25zdCBuPXRoaXMuY3JlYXRlSHR0cFByb3ZpZGVyKGUscik7biYmKHRoaXMuaHR0cFByb3ZpZGVyc1tlXT1uKX1jcmVhdGVIdHRwUHJvdmlkZXIoZSxyKXtjb25zdCBuPXJ8fGcwKGUsdGhpcy5uYW1lc3BhY2UsdGhpcy5jbGllbnQuY29yZS5wcm9qZWN0SWQpO2lmKCFuKXRocm93IG5ldyBFcnJvcihgTm8gUlBDIHVybCBwcm92aWRlZCBmb3IgY2hhaW5JZDogJHtlfWApO3JldHVybiBuZXcgYnUobmV3IGgwKG4sc2koImRpc2FibGVQcm92aWRlclBpbmciKSkpfX1sZXQgaU89Y2xhc3MgbTB7Y29uc3RydWN0b3IoZSl7dGhpcy5ldmVudHM9bmV3IEJjLHRoaXMucnBjUHJvdmlkZXJzPXt9LHRoaXMuZGlzYWJsZVByb3ZpZGVyUGluZz0hMSx0aGlzLnByb3ZpZGVyT3B0cz1lLHRoaXMubG9nZ2VyPXl1KHtsb2dnZXI6ZS5sb2dnZXI/P2VmLG5hbWU6dGhpcy5wcm92aWRlck9wdHMubmFtZT8/ZjB9KSx0aGlzLmRpc2FibGVQcm92aWRlclBpbmc9ZT8uZGlzYWJsZVByb3ZpZGVyUGluZ3x8ITF9c3RhdGljIGFzeW5jIGluaXQoZSl7Y29uc3Qgcj1uZXcgbTAoZSk7cmV0dXJuIGF3YWl0IHIuaW5pdGlhbGl6ZSgpLHJ9YXN5bmMgcmVxdWVzdChlLHIsbil7Y29uc3RbaSxzXT10aGlzLnZhbGlkYXRlQ2hhaW4ocik7aWYoIXRoaXMuc2Vzc2lvbil0aHJvdyBuZXcgRXJyb3IoIlBsZWFzZSBjYWxsIGNvbm5lY3QoKSBiZWZvcmUgcmVxdWVzdCgpIik7cmV0dXJuIGF3YWl0IHRoaXMuZ2V0UHJvdmlkZXIoaSkucmVxdWVzdCh7cmVxdWVzdDp7Li4uZX0sY2hhaW5JZDpgJHtpfToke3N9YCx0b3BpYzp0aGlzLnNlc3Npb24udG9waWMsZXhwaXJ5Om59KX1zZW5kQXN5bmMoZSxyLG4saSl7Y29uc3Qgcz1uZXcgRGF0ZSgpLmdldFRpbWUoKTt0aGlzLnJlcXVlc3QoZSxuLGkpLnRoZW4obz0+cihudWxsLFlpKHMsbykpKS5jYXRjaChvPT5yKG8sdm9pZCAwKSl9YXN5bmMgZW5hYmxlKCl7aWYoIXRoaXMuY2xpZW50KXRocm93IG5ldyBFcnJvcigiU2lnbiBDbGllbnQgbm90IGluaXRpYWxpemVkIik7cmV0dXJuIHRoaXMuc2Vzc2lvbnx8YXdhaXQgdGhpcy5jb25uZWN0KHtuYW1lc3BhY2VzOnRoaXMubmFtZXNwYWNlcyxvcHRpb25hbE5hbWVzcGFjZXM6dGhpcy5vcHRpb25hbE5hbWVzcGFjZXMsc2Vzc2lvblByb3BlcnRpZXM6dGhpcy5zZXNzaW9uUHJvcGVydGllcyxzY29wZWRQcm9wZXJ0aWVzOnRoaXMuc2NvcGVkUHJvcGVydGllc30pLGF3YWl0IHRoaXMucmVxdWVzdEFjY291bnRzKCl9YXN5bmMgZGlzY29ubmVjdCgpe2lmKCF0aGlzLnNlc3Npb24pdGhyb3cgbmV3IEVycm9yKCJQbGVhc2UgY2FsbCBjb25uZWN0KCkgYmVmb3JlIGVuYWJsZSgpIik7YXdhaXQgdGhpcy5jbGllbnQuZGlzY29ubmVjdCh7dG9waWM6dGhpcy5zZXNzaW9uPy50b3BpYyxyZWFzb246eWUoIlVTRVJfRElTQ09OTkVDVEVEIil9KSxhd2FpdCB0aGlzLmNsZWFudXAoKX1hc3luYyBjb25uZWN0KGUpe2lmKCF0aGlzLmNsaWVudCl0aHJvdyBuZXcgRXJyb3IoIlNpZ24gQ2xpZW50IG5vdCBpbml0aWFsaXplZCIpO2lmKHRoaXMuY29ubmVjdFBhcmFtcz1lLHRoaXMuc2V0TmFtZXNwYWNlcyhlKSx0aGlzLmNsZWFudXBQZW5kaW5nUGFpcmluZ3MoKSwhZS5za2lwUGFpcmluZylyZXR1cm4gYXdhaXQgdGhpcy5wYWlyKGUucGFpcmluZ1RvcGljKX1hc3luYyBhdXRoZW50aWNhdGUoZSxyKXtpZighdGhpcy5jbGllbnQpdGhyb3cgbmV3IEVycm9yKCJTaWduIENsaWVudCBub3QgaW5pdGlhbGl6ZWQiKTt0aGlzLnNldE5hbWVzcGFjZXMoZSksYXdhaXQgdGhpcy5jbGVhbnVwUGVuZGluZ1BhaXJpbmdzKCk7Y29uc3R7dXJpOm4scmVzcG9uc2U6aX09YXdhaXQgdGhpcy5jbGllbnQuYXV0aGVudGljYXRlKGUscik7biYmKHRoaXMudXJpPW4sdGhpcy5ldmVudHMuZW1pdCgiZGlzcGxheV91cmkiLG4pKTtjb25zdCBzPWF3YWl0IGkoKTtpZih0aGlzLnNlc3Npb249cy5zZXNzaW9uLHRoaXMuc2Vzc2lvbil7Y29uc3Qgbz1zZih0aGlzLnNlc3Npb24ubmFtZXNwYWNlcyk7dGhpcy5uYW1lc3BhY2VzPVRzKHRoaXMubmFtZXNwYWNlcyxvKSxhd2FpdCB0aGlzLnBlcnNpc3QoIm5hbWVzcGFjZXMiLHRoaXMubmFtZXNwYWNlcyksdGhpcy5vbkNvbm5lY3QoKX1yZXR1cm4gc31vbihlLHIpe3RoaXMuZXZlbnRzLm9uKGUscil9b25jZShlLHIpe3RoaXMuZXZlbnRzLm9uY2UoZSxyKX1yZW1vdmVMaXN0ZW5lcihlLHIpe3RoaXMuZXZlbnRzLnJlbW92ZUxpc3RlbmVyKGUscil9b2ZmKGUscil7dGhpcy5ldmVudHMub2ZmKGUscil9Z2V0IGlzV2FsbGV0Q29ubmVjdCgpe3JldHVybiEwfWFzeW5jIHBhaXIoZSl7Y29uc3R7dXJpOnIsYXBwcm92YWw6bn09YXdhaXQgdGhpcy5jbGllbnQuY29ubmVjdCh7cGFpcmluZ1RvcGljOmUscmVxdWlyZWROYW1lc3BhY2VzOnRoaXMubmFtZXNwYWNlcyxvcHRpb25hbE5hbWVzcGFjZXM6dGhpcy5vcHRpb25hbE5hbWVzcGFjZXMsc2Vzc2lvblByb3BlcnRpZXM6dGhpcy5zZXNzaW9uUHJvcGVydGllcyxzY29wZWRQcm9wZXJ0aWVzOnRoaXMuc2NvcGVkUHJvcGVydGllcyxhdXRoZW50aWNhdGlvbjp0aGlzLmNvbm5lY3RQYXJhbXM/LmF1dGhlbnRpY2F0aW9uLHdhbGxldFBheTp0aGlzLmNvbm5lY3RQYXJhbXM/LndhbGxldFBheX0pO3ImJih0aGlzLnVyaT1yLHRoaXMuZXZlbnRzLmVtaXQoImRpc3BsYXlfdXJpIixyKSk7Y29uc3QgaT1hd2FpdCBuKCk7dGhpcy5zZXNzaW9uPWk7Y29uc3Qgcz1zZihpLm5hbWVzcGFjZXMpO3JldHVybiB0aGlzLm5hbWVzcGFjZXM9VHModGhpcy5uYW1lc3BhY2VzLHMpLGF3YWl0IHRoaXMucGVyc2lzdCgibmFtZXNwYWNlcyIsdGhpcy5uYW1lc3BhY2VzKSxhd2FpdCB0aGlzLnBlcnNpc3QoIm9wdGlvbmFsTmFtZXNwYWNlcyIsdGhpcy5vcHRpb25hbE5hbWVzcGFjZXMpLHRoaXMub25Db25uZWN0KCksdGhpcy5zZXNzaW9ufXNldERlZmF1bHRDaGFpbihlLHIpe3RyeXtpZighdGhpcy5zZXNzaW9uKXJldHVybjtjb25zdFtuLGldPXRoaXMudmFsaWRhdGVDaGFpbihlKSxzPXRoaXMuZ2V0UHJvdmlkZXIobik7cz9zLnNldERlZmF1bHRDaGFpbihpLHIpOnRoaXMuc2Vzc2lvbiYmdGhpcy5sb2dnZXIud2FybihgUHJvdmlkZXIgZm9yIG5hbWVzcGFjZSAnJHtufScgbm90IGZvdW5kIGluIHNldERlZmF1bHRDaGFpbmApfWNhdGNoKG4pe2lmKCEvUGxlYXNlIGNhbGwgY29ubmVjdC8udGVzdChuLm1lc3NhZ2UpKXRocm93IG59fWFzeW5jIGNsZWFudXBQZW5kaW5nUGFpcmluZ3MoZT17fSl7dHJ5e3RoaXMubG9nZ2VyLmluZm8oIkNsZWFuaW5nIHVwIGluYWN0aXZlIHBhaXJpbmdzLi4uIik7Y29uc3Qgcj10aGlzLmNsaWVudC5wYWlyaW5nLmdldEFsbCgpO2lmKCFfcihyKSlyZXR1cm47Zm9yKGNvbnN0IG4gb2YgcillLmRlbGV0ZVBhaXJpbmdzP3RoaXMuY2xpZW50LmNvcmUuZXhwaXJlci5zZXQobi50b3BpYywwKTphd2FpdCB0aGlzLmNsaWVudC5jb3JlLnJlbGF5ZXIuc3Vic2NyaWJlci51bnN1YnNjcmliZShuLnRvcGljKTt0aGlzLmxvZ2dlci5pbmZvKGBJbmFjdGl2ZSBwYWlyaW5ncyBjbGVhcmVkOiAke3IubGVuZ3RofWApfWNhdGNoKHIpe3RoaXMubG9nZ2VyLndhcm4ociwiRmFpbGVkIHRvIGNsZWFudXAgcGVuZGluZyBwYWlyaW5ncyIpfX1hYm9ydFBhaXJpbmdBdHRlbXB0KCl7dGhpcy5sb2dnZXIud2FybigiYWJvcnRQYWlyaW5nQXR0ZW1wdCBpcyBkZXByZWNhdGVkLiBUaGlzIGlzIG5vdyBhIG5vLW9wLiIpfWFzeW5jIGNoZWNrU3RvcmFnZSgpe3RoaXMubmFtZXNwYWNlcz1hd2FpdCB0aGlzLmdldEZyb21TdG9yZSgibmFtZXNwYWNlcyIpfHx7fSx0aGlzLm9wdGlvbmFsTmFtZXNwYWNlcz1hd2FpdCB0aGlzLmdldEZyb21TdG9yZSgib3B0aW9uYWxOYW1lc3BhY2VzIil8fHt9LHRoaXMuc2Vzc2lvbiYmdGhpcy5jcmVhdGVQcm92aWRlcnMoKX1hc3luYyBpbml0aWFsaXplKCl7dGhpcy5sb2dnZXIudHJhY2UoIkluaXRpYWxpemVkIiksYXdhaXQgdGhpcy5jcmVhdGVDbGllbnQoKSxhd2FpdCB0aGlzLmNoZWNrU3RvcmFnZSgpLHRoaXMucmVnaXN0ZXJFdmVudExpc3RlbmVycygpfWFzeW5jIGNyZWF0ZUNsaWVudCgpe2lmKHRoaXMuY2xpZW50PXRoaXMucHJvdmlkZXJPcHRzLmNsaWVudHx8YXdhaXQgZ0QuaW5pdCh7Y29yZTp0aGlzLnByb3ZpZGVyT3B0cy5jb3JlLGxvZ2dlcjp0aGlzLnByb3ZpZGVyT3B0cy5sb2dnZXJ8fGVmLHJlbGF5VXJsOnRoaXMucHJvdmlkZXJPcHRzLnJlbGF5VXJsfHxJRCxwcm9qZWN0SWQ6dGhpcy5wcm92aWRlck9wdHMucHJvamVjdElkLG1ldGFkYXRhOnRoaXMucHJvdmlkZXJPcHRzLm1ldGFkYXRhLHN0b3JhZ2VPcHRpb25zOnRoaXMucHJvdmlkZXJPcHRzLnN0b3JhZ2VPcHRpb25zLHN0b3JhZ2U6dGhpcy5wcm92aWRlck9wdHMuc3RvcmFnZSxuYW1lOnRoaXMucHJvdmlkZXJPcHRzLm5hbWUsY3VzdG9tU3RvcmFnZVByZWZpeDp0aGlzLnByb3ZpZGVyT3B0cy5jdXN0b21TdG9yYWdlUHJlZml4LHRlbGVtZXRyeUVuYWJsZWQ6dGhpcy5wcm92aWRlck9wdHMudGVsZW1ldHJ5RW5hYmxlZH0pLHRoaXMucHJvdmlkZXJPcHRzLnNlc3Npb24pdHJ5e3RoaXMuc2Vzc2lvbj10aGlzLmNsaWVudC5zZXNzaW9uLmdldCh0aGlzLnByb3ZpZGVyT3B0cy5zZXNzaW9uLnRvcGljKX1jYXRjaChlKXt0aHJvdyB0aGlzLmxvZ2dlci5lcnJvcihlLCJGYWlsZWQgdG8gZ2V0IHNlc3Npb24iKSxuZXcgRXJyb3IoYFRoZSBwcm92aWRlZCBzZXNzaW9uOiAke3RoaXMucHJvdmlkZXJPcHRzPy5zZXNzaW9uPy50b3BpY30gZG9lc24ndCBleGlzdCBpbiB0aGUgU2lnbiBjbGllbnRgKX1lbHNle2NvbnN0IGU9dGhpcy5jbGllbnQuc2Vzc2lvbi5nZXRBbGwoKTt0aGlzLnNlc3Npb249ZVswXX10aGlzLmxvZ2dlci50cmFjZSgiU2lnbkNsaWVudCBJbml0aWFsaXplZCIpfWNyZWF0ZVByb3ZpZGVycygpe2lmKCF0aGlzLmNsaWVudCl0aHJvdyBuZXcgRXJyb3IoIlNpZ24gQ2xpZW50IG5vdCBpbml0aWFsaXplZCIpO2lmKCF0aGlzLnNlc3Npb24pdGhyb3cgbmV3IEVycm9yKCJTZXNzaW9uIG5vdCBpbml0aWFsaXplZC4gUGxlYXNlIGNhbGwgY29ubmVjdCgpIGJlZm9yZSBlbmFibGUoKSIpO2NvbnN0IGU9Wy4uLm5ldyBTZXQoT2JqZWN0LmtleXModGhpcy5zZXNzaW9uLm5hbWVzcGFjZXMpLm1hcChyPT5ZbihyKSkpXTtOYSgiY2xpZW50Iix0aGlzLmNsaWVudCksTmEoImV2ZW50cyIsdGhpcy5ldmVudHMpLE5hKCJkaXNhYmxlUHJvdmlkZXJQaW5nIix0aGlzLmRpc2FibGVQcm92aWRlclBpbmcpLGUuZm9yRWFjaChyPT57aWYoIXRoaXMuc2Vzc2lvbilyZXR1cm47Y29uc3Qgbj0kRChyLHRoaXMuc2Vzc2lvbik7aWYobj8ubGVuZ3RoPT09MClyZXR1cm47Y29uc3QgaT15MChuKSxzPXsuLi5Ucyh0aGlzLm5hbWVzcGFjZXMsdGhpcy5vcHRpb25hbE5hbWVzcGFjZXMpW3JdLGFjY291bnRzOm4sY2hhaW5zOml9O3N3aXRjaChyKXtjYXNlImVpcDE1NSI6dGhpcy5ycGNQcm92aWRlcnNbcl09bmV3IE1EKHtuYW1lc3BhY2U6c30pO2JyZWFrO2RlZmF1bHQ6dGhpcy5ycGNQcm92aWRlcnNbcl09bmV3IHFEKHtuYW1lc3BhY2U6c30pfX0pfXJlZ2lzdGVyRXZlbnRMaXN0ZW5lcnMoKXtpZih0eXBlb2YgdGhpcy5jbGllbnQ+InUiKXRocm93IG5ldyBFcnJvcigiU2lnbiBDbGllbnQgaXMgbm90IGluaXRpYWxpemVkIik7dGhpcy5jbGllbnQub24oInNlc3Npb25fcGluZyIsZT0+e2NvbnN0e3RvcGljOnJ9PWU7cj09PXRoaXMuc2Vzc2lvbj8udG9waWMmJnRoaXMuZXZlbnRzLmVtaXQoInNlc3Npb25fcGluZyIsZSl9KSx0aGlzLmNsaWVudC5vbigic2Vzc2lvbl9ldmVudCIsZT0+e2NvbnN0e3BhcmFtczpyLHRvcGljOm59PWU7aWYobiE9PXRoaXMuc2Vzc2lvbj8udG9waWMpcmV0dXJuO2NvbnN0e2V2ZW50Oml9PXI7aWYoaS5uYW1lPT09ImFjY291bnRzQ2hhbmdlZCIpe2NvbnN0IHM9aS5kYXRhO3MmJl9yKHMpJiZ0aGlzLmV2ZW50cy5lbWl0KCJhY2NvdW50c0NoYW5nZWQiLHMubWFwKG5mKSl9ZWxzZSBpZihpLm5hbWU9PT0iY2hhaW5DaGFuZ2VkIil7Y29uc3Qgcz1yLmNoYWluSWQsbz1yLmV2ZW50LmRhdGEsYT1ZbihzKSxjPVVhKHMpIT09VWEobyk/YCR7YX06JHtVYShvKX1gOnM7dGhpcy5vbkNoYWluQ2hhbmdlZCh7Y3VycmVudENhaXBDaGFpbklkOmN9KX1lbHNlIHRoaXMuZXZlbnRzLmVtaXQoaS5uYW1lLGkuZGF0YSk7dGhpcy5ldmVudHMuZW1pdCgic2Vzc2lvbl9ldmVudCIsZSl9KSx0aGlzLmNsaWVudC5vbigic2Vzc2lvbl91cGRhdGUiLCh7dG9waWM6ZSxwYXJhbXM6cn0pPT57aWYoZSE9PXRoaXMuc2Vzc2lvbj8udG9waWMpcmV0dXJuO2NvbnN0e25hbWVzcGFjZXM6bn09cixpPXRoaXMuY2xpZW50Py5zZXNzaW9uLmdldChlKTt0aGlzLnNlc3Npb249ey4uLmksbmFtZXNwYWNlczpufSx0aGlzLm9uU2Vzc2lvblVwZGF0ZSgpLHRoaXMuZXZlbnRzLmVtaXQoInNlc3Npb25fdXBkYXRlIix7dG9waWM6ZSxwYXJhbXM6cn0pfSksdGhpcy5jbGllbnQub24oInNlc3Npb25fZGVsZXRlIixhc3luYyBlPT57ZS50b3BpYz09PXRoaXMuc2Vzc2lvbj8udG9waWMmJihhd2FpdCB0aGlzLmNsZWFudXAoKSx0aGlzLmV2ZW50cy5lbWl0KCJzZXNzaW9uX2RlbGV0ZSIsZSksdGhpcy5ldmVudHMuZW1pdCgiZGlzY29ubmVjdCIsey4uLnllKCJVU0VSX0RJU0NPTk5FQ1RFRCIpLGRhdGE6ZS50b3BpY30pKX0pLHRoaXMub24oQXUuREVGQVVMVF9DSEFJTl9DSEFOR0VELGU9Pnt0aGlzLm9uQ2hhaW5DaGFuZ2VkKHsuLi5lLGludGVybmFsOiEwfSl9KX1nZXRQcm92aWRlcihlKXtyZXR1cm4gdGhpcy5ycGNQcm92aWRlcnNbZV18fHRoaXMucnBjUHJvdmlkZXJzW3AwXX1vblNlc3Npb25VcGRhdGUoKXtPYmplY3Qua2V5cyh0aGlzLnJwY1Byb3ZpZGVycykuZm9yRWFjaChlPT57dGhpcy5nZXRQcm92aWRlcihlKS51cGRhdGVOYW1lc3BhY2UodGhpcy5zZXNzaW9uPy5uYW1lc3BhY2VzW2VdKX0pfXNldE5hbWVzcGFjZXMoZSl7Y29uc3R7bmFtZXNwYWNlczpyPXt9LG9wdGlvbmFsTmFtZXNwYWNlczpuPXt9LHNlc3Npb25Qcm9wZXJ0aWVzOmksc2NvcGVkUHJvcGVydGllczpzfT1lO3RoaXMub3B0aW9uYWxOYW1lc3BhY2VzPVRzKHIsbiksdGhpcy5zZXNzaW9uUHJvcGVydGllcz1pLHRoaXMuc2NvcGVkUHJvcGVydGllcz1zfXZhbGlkYXRlQ2hhaW4oZSl7Y29uc3RbcixuXT1lPy5zcGxpdCgiOiIpfHxbIiIsIiJdO2lmKCF0aGlzLm5hbWVzcGFjZXN8fCFPYmplY3Qua2V5cyh0aGlzLm5hbWVzcGFjZXMpLmxlbmd0aClyZXR1cm5bcixuXTtpZihyJiYhT2JqZWN0LmtleXModGhpcy5uYW1lc3BhY2VzfHx7fSkubWFwKG89PlluKG8pKS5pbmNsdWRlcyhyKSl0aHJvdyBuZXcgRXJyb3IoYE5hbWVzcGFjZSAnJHtyfScgaXMgbm90IGNvbmZpZ3VyZWQuIFBsZWFzZSBjYWxsIGNvbm5lY3QoKSBmaXJzdCB3aXRoIG5hbWVzcGFjZSBjb25maWcuYCk7aWYociYmbilyZXR1cm5bcixuXTtjb25zdCBpPVluKE9iamVjdC5rZXlzKHRoaXMubmFtZXNwYWNlcylbMF0pLHM9dGhpcy5ycGNQcm92aWRlcnNbaV0uZ2V0RGVmYXVsdENoYWluKCk7cmV0dXJuW2ksc119YXN5bmMgcmVxdWVzdEFjY291bnRzKCl7Y29uc3RbZV09dGhpcy52YWxpZGF0ZUNoYWluKCk7cmV0dXJuIGF3YWl0IHRoaXMuZ2V0UHJvdmlkZXIoZSkucmVxdWVzdEFjY291bnRzKCl9YXN5bmMgb25DaGFpbkNoYW5nZWQoe2N1cnJlbnRDYWlwQ2hhaW5JZDplLHByZXZpb3VzQ2FpcENoYWluSWQ6cixpbnRlcm5hbDpuPSExfSl7aWYoIXRoaXMubmFtZXNwYWNlcylyZXR1cm47Y29uc3RbaSxzXT10aGlzLnZhbGlkYXRlQ2hhaW4oZSk7aWYocyl7aWYodGhpcy51cGRhdGVOYW1lc3BhY2VDaGFpbihpLHMpLG4pdGhpcy5ldmVudHMuZW1pdCgiY2hhaW5DaGFuZ2VkIixzKSx0aGlzLmVtaXRBY2NvdW50c0NoYW5nZWRPbkNoYWluQ2hhbmdlKHtuYW1lc3BhY2U6aSxjdXJyZW50Q2FpcENoYWluSWQ6ZSxwcmV2aW91c0NhaXBDaGFpbklkOnJ9KTtlbHNle2NvbnN0IG89dGhpcy5nZXRQcm92aWRlcihpKTtvP28uc2V0RGVmYXVsdENoYWluKHMpOnRoaXMuc2Vzc2lvbiYmdGhpcy5sb2dnZXIud2FybihgUHJvdmlkZXIgZm9yIG5hbWVzcGFjZSAnJHtpfScgbm90IGZvdW5kIGR1cmluZyBjaGFpbiBjaGFuZ2VgKX1hd2FpdCB0aGlzLnBlcnNpc3QoIm5hbWVzcGFjZXMiLHRoaXMubmFtZXNwYWNlcyl9fWVtaXRBY2NvdW50c0NoYW5nZWRPbkNoYWluQ2hhbmdlKHtuYW1lc3BhY2U6ZSxjdXJyZW50Q2FpcENoYWluSWQ6cixwcmV2aW91c0NhaXBDaGFpbklkOm59KXt0cnl7aWYobj09PXIpcmV0dXJuO2NvbnN0IGk9dGhpcy5zZXNzaW9uPy5uYW1lc3BhY2VzW2VdPy5hY2NvdW50cztpZighaSlyZXR1cm47Y29uc3Qgcz1pLmZpbHRlcihvPT5vLmluY2x1ZGVzKGAke3J9OmApKS5tYXAobmYpO2lmKCFfcihzKSlyZXR1cm47dGhpcy5ldmVudHMuZW1pdCgiYWNjb3VudHNDaGFuZ2VkIixzKX1jYXRjaChpKXt0aGlzLmxvZ2dlci53YXJuKGksIkZhaWxlZCB0byBlbWl0IGFjY291bnRzQ2hhbmdlZCBvbiBjaGFpbiBjaGFuZ2UiKX19dXBkYXRlTmFtZXNwYWNlQ2hhaW4oZSxyKXtpZighdGhpcy5uYW1lc3BhY2VzKXJldHVybjtjb25zdCBuPXRoaXMubmFtZXNwYWNlc1tlXT9lOmAke2V9OiR7cn1gLGk9e2NoYWluczpbXSxtZXRob2RzOltdLGV2ZW50czpbXSxkZWZhdWx0Q2hhaW46cn07dGhpcy5uYW1lc3BhY2VzW25dP3RoaXMubmFtZXNwYWNlc1tuXSYmKHRoaXMubmFtZXNwYWNlc1tuXS5kZWZhdWx0Q2hhaW49cik6dGhpcy5uYW1lc3BhY2VzW25dPWl9b25Db25uZWN0KCl7dGhpcy5jcmVhdGVQcm92aWRlcnMoKSx0aGlzLmV2ZW50cy5lbWl0KCJjb25uZWN0Iix7c2Vzc2lvbjp0aGlzLnNlc3Npb259KX1hc3luYyBjbGVhbnVwKCl7dGhpcy5jb25uZWN0UGFyYW1zPXZvaWQgMCx0aGlzLm5hbWVzcGFjZXM9dm9pZCAwLHRoaXMub3B0aW9uYWxOYW1lc3BhY2VzPXZvaWQgMCx0aGlzLnNlc3Npb25Qcm9wZXJ0aWVzPXZvaWQgMCxhd2FpdCB0aGlzLmRlbGV0ZUZyb21TdG9yZSgibmFtZXNwYWNlcyIpLGF3YWl0IHRoaXMuZGVsZXRlRnJvbVN0b3JlKCJvcHRpb25hbE5hbWVzcGFjZXMiKSxhd2FpdCB0aGlzLmRlbGV0ZUZyb21TdG9yZSgic2Vzc2lvblByb3BlcnRpZXMiKSx0aGlzLnNlc3Npb249dm9pZCAwLHRoaXMuY2xlYW51cFBlbmRpbmdQYWlyaW5ncyh7ZGVsZXRlUGFpcmluZ3M6ITB9KSxhd2FpdCB0aGlzLmNsZWFudXBTdG9yYWdlKCl9YXN5bmMgcGVyc2lzdChlLHIpe2NvbnN0IG49dGhpcy5zZXNzaW9uPy50b3BpY3x8IiI7YXdhaXQgdGhpcy5jbGllbnQuY29yZS5zdG9yYWdlLnNldEl0ZW0oYCR7UHN9LyR7ZX0ke259YCxyKX1hc3luYyBnZXRGcm9tU3RvcmUoZSl7Y29uc3Qgcj10aGlzLnNlc3Npb24/LnRvcGljfHwiIjtyZXR1cm4gYXdhaXQgdGhpcy5jbGllbnQuY29yZS5zdG9yYWdlLmdldEl0ZW0oYCR7UHN9LyR7ZX0ke3J9YCl9YXN5bmMgZGVsZXRlRnJvbVN0b3JlKGUpe2NvbnN0IHI9dGhpcy5zZXNzaW9uPy50b3BpY3x8IiI7YXdhaXQgdGhpcy5jbGllbnQuY29yZS5zdG9yYWdlLnJlbW92ZUl0ZW0oYCR7UHN9LyR7ZX0ke3J9YCl9YXN5bmMgY2xlYW51cFN0b3JhZ2UoKXt0cnl7aWYodGhpcy5jbGllbnQ/LnNlc3Npb24ubGVuZ3RoPjApcmV0dXJuO2NvbnN0IGU9YXdhaXQgdGhpcy5jbGllbnQuY29yZS5zdG9yYWdlLmdldEtleXMoKTtmb3IoY29uc3QgciBvZiBlKXIuc3RhcnRzV2l0aChQcykmJmF3YWl0IHRoaXMuY2xpZW50LmNvcmUuc3RvcmFnZS5yZW1vdmVJdGVtKHIpfWNhdGNoKGUpe3RoaXMubG9nZ2VyLndhcm4oZSwiRmFpbGVkIHRvIGNsZWFudXAgc3RvcmFnZSIpfX19O2NvbnN0IGpEPVN5bWJvbCgpLGNmPU9iamVjdC5nZXRQcm90b3R5cGVPZixJYz1uZXcgV2Vha01hcCx6RD10PT50JiYoSWMuaGFzKHQpP0ljLmdldCh0KTpjZih0KT09PU9iamVjdC5wcm90b3R5cGV8fGNmKHQpPT09QXJyYXkucHJvdG90eXBlKSxIRD10PT56RCh0KSYmdFtqRF18fG51bGwsdWY9KHQsZT0hMCk9PntJYy5zZXQodCxlKX0sZ289e30sa2E9dD0+dHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbCx6cj1uZXcgV2Vha01hcCxScz1uZXcgV2Vha1NldCxLRD0odD1PYmplY3QuaXMsZT0odSxsKT0+bmV3IFByb3h5KHUsbCkscj11PT5rYSh1KSYmIVJzLmhhcyh1KSYmKEFycmF5LmlzQXJyYXkodSl8fCEoU3ltYm9sLml0ZXJhdG9yIGluIHUpKSYmISh1IGluc3RhbmNlb2YgV2Vha01hcCkmJiEodSBpbnN0YW5jZW9mIFdlYWtTZXQpJiYhKHUgaW5zdGFuY2VvZiBFcnJvcikmJiEodSBpbnN0YW5jZW9mIE51bWJlcikmJiEodSBpbnN0YW5jZW9mIERhdGUpJiYhKHUgaW5zdGFuY2VvZiBTdHJpbmcpJiYhKHUgaW5zdGFuY2VvZiBSZWdFeHApJiYhKHUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciksbj11PT57c3dpdGNoKHUuc3RhdHVzKXtjYXNlImZ1bGZpbGxlZCI6cmV0dXJuIHUudmFsdWU7Y2FzZSJyZWplY3RlZCI6dGhyb3cgdS5yZWFzb247ZGVmYXVsdDp0aHJvdyB1fX0saT1uZXcgV2Vha01hcCxzPSh1LGwsaD1uKT0+e2NvbnN0IHA9aS5nZXQodSk7aWYocD8uWzBdPT09bClyZXR1cm4gcFsxXTtjb25zdCBnPUFycmF5LmlzQXJyYXkodSk/W106T2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodSkpO3JldHVybiB1ZihnLCEwKSxpLnNldCh1LFtsLGddKSxSZWZsZWN0Lm93bktleXModSkuZm9yRWFjaCh3PT57aWYoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnLHcpKXJldHVybjtjb25zdCBiPVJlZmxlY3QuZ2V0KHUsdyksdj17dmFsdWU6YixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH07aWYoUnMuaGFzKGIpKXVmKGIsITEpO2Vsc2UgaWYoYiBpbnN0YW5jZW9mIFByb21pc2UpZGVsZXRlIHYudmFsdWUsdi5nZXQ9KCk9PmgoYik7ZWxzZSBpZih6ci5oYXMoYikpe2NvbnN0W08sRl09enIuZ2V0KGIpO3YudmFsdWU9cyhPLEYoKSxoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZyx3LHYpfSksT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKGcpfSxvPW5ldyBXZWFrTWFwLGE9WzEsMV0sYz11PT57aWYoIWthKHUpKXRocm93IG5ldyBFcnJvcigib2JqZWN0IHJlcXVpcmVkIik7Y29uc3QgbD1vLmdldCh1KTtpZihsKXJldHVybiBsO2xldCBoPWFbMF07Y29uc3QgcD1uZXcgU2V0LGc9KFQsej0rK2FbMF0pPT57aCE9PXomJihoPXoscC5mb3JFYWNoKFU9PlUoVCx6KSkpfTtsZXQgdz1hWzFdO2NvbnN0IGI9KFQ9KythWzFdKT0+KHchPT1UJiYhcC5zaXplJiYodz1ULE8uZm9yRWFjaCgoW3pdKT0+e2NvbnN0IFU9elsxXShUKTtVPmgmJihoPVUpfSkpLGgpLHY9VD0+KHosVSk9Pntjb25zdCBOPVsuLi56XTtOWzFdPVtULC4uLk5bMV1dLGcoTixVKX0sTz1uZXcgTWFwLEY9KFQseik9PntpZigoZ28/InByb2R1Y3Rpb24iOnZvaWQgMCkhPT0icHJvZHVjdGlvbiImJk8uaGFzKFQpKXRocm93IG5ldyBFcnJvcigicHJvcCBsaXN0ZW5lciBhbHJlYWR5IGV4aXN0cyIpO2lmKHAuc2l6ZSl7Y29uc3QgVT16WzNdKHYoVCkpO08uc2V0KFQsW3osVV0pfWVsc2UgTy5zZXQoVCxbel0pfSxfPVQ9Pnt2YXIgejtjb25zdCBVPU8uZ2V0KFQpO1UmJihPLmRlbGV0ZShUKSwoej1VWzFdKT09bnVsbHx8ei5jYWxsKFUpKX0sUD1UPT4ocC5hZGQoVCkscC5zaXplPT09MSYmTy5mb3JFYWNoKChbVSxOXSxEKT0+e2lmKChnbz8icHJvZHVjdGlvbiI6dm9pZCAwKSE9PSJwcm9kdWN0aW9uIiYmTil0aHJvdyBuZXcgRXJyb3IoInJlbW92ZSBhbHJlYWR5IGV4aXN0cyIpO2NvbnN0IFI9VVszXSh2KEQpKTtPLnNldChELFtVLFJdKX0pLCgpPT57cC5kZWxldGUoVCkscC5zaXplPT09MCYmTy5mb3JFYWNoKChbVSxOXSxEKT0+e04mJihOKCksTy5zZXQoRCxbVV0pKX0pfSksQz1BcnJheS5pc0FycmF5KHUpP1tdOk9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHUpKSxxPWUoQyx7ZGVsZXRlUHJvcGVydHkoVCx6KXtjb25zdCBVPVJlZmxlY3QuZ2V0KFQseik7Xyh6KTtjb25zdCBOPVJlZmxlY3QuZGVsZXRlUHJvcGVydHkoVCx6KTtyZXR1cm4gTiYmZyhbImRlbGV0ZSIsW3pdLFVdKSxOfSxzZXQoVCx6LFUsTil7Y29uc3QgRD1SZWZsZWN0LmhhcyhULHopLFI9UmVmbGVjdC5nZXQoVCx6LE4pO2lmKEQmJih0KFIsVSl8fG8uaGFzKFUpJiZ0KFIsby5nZXQoVSkpKSlyZXR1cm4hMDtfKHopLGthKFUpJiYoVT1IRChVKXx8VSk7bGV0IHk9VTtpZihVIGluc3RhbmNlb2YgUHJvbWlzZSlVLnRoZW4obT0+e1Uuc3RhdHVzPSJmdWxmaWxsZWQiLFUudmFsdWU9bSxnKFsicmVzb2x2ZSIsW3pdLG1dKX0pLmNhdGNoKG09PntVLnN0YXR1cz0icmVqZWN0ZWQiLFUucmVhc29uPW0sZyhbInJlamVjdCIsW3pdLG1dKX0pO2Vsc2V7IXpyLmhhcyhVKSYmcihVKSYmKHk9YyhVKSk7Y29uc3QgbT0hUnMuaGFzKHkpJiZ6ci5nZXQoeSk7bSYmRih6LG0pfXJldHVybiBSZWZsZWN0LnNldChULHoseSxOKSxnKFsic2V0Iixbel0sVSxSXSksITB9fSk7by5zZXQodSxxKTtjb25zdCBNPVtDLGIscyxQXTtyZXR1cm4genIuc2V0KHEsTSksUmVmbGVjdC5vd25LZXlzKHUpLmZvckVhY2goVD0+e2NvbnN0IHo9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih1LFQpOyJ2YWx1ZSJpbiB6JiYocVtUXT11W1RdLGRlbGV0ZSB6LnZhbHVlLGRlbGV0ZSB6LndyaXRhYmxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQyxULHopfSkscX0pPT5bYyx6cixScyx0LGUscixuLGkscyxvLGFdLFtWRF09S0QoKTtmdW5jdGlvbiB0bih0PXt9KXtyZXR1cm4gVkQodCl9ZnVuY3Rpb24gTm4odCxlLHIpe2NvbnN0IG49enIuZ2V0KHQpOyhnbz8icHJvZHVjdGlvbiI6dm9pZCAwKSE9PSJwcm9kdWN0aW9uIiYmIW4mJmNvbnNvbGUud2FybigiUGxlYXNlIHVzZSBwcm94eSBvYmplY3QiKTtsZXQgaTtjb25zdCBzPVtdLG89blszXTtsZXQgYT0hMTtjb25zdCB1PW8obD0+e3MucHVzaChsKSxpfHwoaT1Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57aT12b2lkIDAsYSYmZShzLnNwbGljZSgwKSl9KSl9KTtyZXR1cm4gYT0hMCwoKT0+e2E9ITEsdSgpfX1mdW5jdGlvbiBXRCh0LGUpe2NvbnN0IHI9enIuZ2V0KHQpOyhnbz8icHJvZHVjdGlvbiI6dm9pZCAwKSE9PSJwcm9kdWN0aW9uIiYmIXImJmNvbnNvbGUud2FybigiUGxlYXNlIHVzZSBwcm94eSBvYmplY3QiKTtjb25zdFtuLGksc109cjtyZXR1cm4gcyhuLGkoKSxlKX1jb25zdCBQZT10bih7aGlzdG9yeTpbIkNvbm5lY3RXYWxsZXQiXSx2aWV3OiJDb25uZWN0V2FsbGV0IixkYXRhOnZvaWQgMH0pLGIwPXtzdGF0ZTpQZSxzdWJzY3JpYmUodCl7cmV0dXJuIE5uKFBlLCgpPT50KFBlKSl9LHB1c2godCxlKXt0IT09UGUudmlldyYmKFBlLnZpZXc9dCxlJiYoUGUuZGF0YT1lKSxQZS5oaXN0b3J5LnB1c2godCkpfSxyZXNldCh0KXtQZS52aWV3PXQsUGUuaGlzdG9yeT1bdF19LHJlcGxhY2UodCl7UGUuaGlzdG9yeS5sZW5ndGg+MSYmKFBlLmhpc3RvcnlbUGUuaGlzdG9yeS5sZW5ndGgtMV09dCxQZS52aWV3PXQpfSxnb0JhY2soKXtpZihQZS5oaXN0b3J5Lmxlbmd0aD4xKXtQZS5oaXN0b3J5LnBvcCgpO2NvbnN0W3RdPVBlLmhpc3Rvcnkuc2xpY2UoLTEpO1BlLnZpZXc9dH19LHNldERhdGEodCl7UGUuZGF0YT10fX0sWWU9e1dBTExFVENPTk5FQ1RfREVFUExJTktfQ0hPSUNFOiJXQUxMRVRDT05ORUNUX0RFRVBMSU5LX0NIT0lDRSIsV0NNX1ZFUlNJT046IldDTV9WRVJTSU9OIixSRUNPTU1FTkRFRF9XQUxMRVRfQU1PVU5UOjksaXNNb2JpbGUoKXtyZXR1cm4gdHlwZW9mIHdpbmRvdzwidSI/ISEod2luZG93Lm1hdGNoTWVkaWEoIihwb2ludGVyOmNvYXJzZSkiKS5tYXRjaGVzfHwvQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8T3BlcmEgTWluaS91LnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpOiExfSxpc0FuZHJvaWQoKXtyZXR1cm4gWWUuaXNNb2JpbGUoKSYmbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJhbmRyb2lkIil9LGlzSW9zKCl7Y29uc3QgdD1uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7cmV0dXJuIFllLmlzTW9iaWxlKCkmJih0LmluY2x1ZGVzKCJpcGhvbmUiKXx8dC5pbmNsdWRlcygiaXBhZCIpKX0saXNIdHRwVXJsKHQpe3JldHVybiB0LnN0YXJ0c1dpdGgoImh0dHA6Ly8iKXx8dC5zdGFydHNXaXRoKCJodHRwczovLyIpfSxpc0FycmF5KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aD4wfSxpc1RlbGVncmFtKCl7cmV0dXJuIHR5cGVvZiB3aW5kb3c8InUiJiYoISF3aW5kb3cuVGVsZWdyYW1XZWJ2aWV3UHJveHl8fCEhd2luZG93LlRlbGVncmFtfHwhIXdpbmRvdy5UZWxlZ3JhbVdlYnZpZXdQcm94eVByb3RvKX0sZm9ybWF0TmF0aXZlVXJsKHQsZSxyKXtpZihZZS5pc0h0dHBVcmwodCkpcmV0dXJuIHRoaXMuZm9ybWF0VW5pdmVyc2FsVXJsKHQsZSxyKTtsZXQgbj10O24uaW5jbHVkZXMoIjovLyIpfHwobj10LnJlcGxhY2VBbGwoIi8iLCIiKS5yZXBsYWNlQWxsKCI6IiwiIiksbj1gJHtufTovL2ApLG4uZW5kc1dpdGgoIi8iKXx8KG49YCR7bn0vYCksdGhpcy5zZXRXYWxsZXRDb25uZWN0RGVlcExpbmsobixyKTtjb25zdCBpPWVuY29kZVVSSUNvbXBvbmVudChlKTtyZXR1cm5gJHtufXdjP3VyaT0ke2l9YH0sZm9ybWF0VW5pdmVyc2FsVXJsKHQsZSxyKXtpZighWWUuaXNIdHRwVXJsKHQpKXJldHVybiB0aGlzLmZvcm1hdE5hdGl2ZVVybCh0LGUscik7bGV0IG49dDtpZihuLnN0YXJ0c1dpdGgoImh0dHBzOi8vdC5tZSIpKXtjb25zdCBzPXRyLmZyb20oZSkudG9TdHJpbmcoImJhc2U2NCIpLnJlcGxhY2UoL1s9XS9nLCIiKTtuLmVuZHNXaXRoKCIvIikmJihuPW4uc2xpY2UoMCwtMSkpLHRoaXMuc2V0V2FsbGV0Q29ubmVjdERlZXBMaW5rKG4scik7Y29uc3Qgbz1uZXcgVVJMKG4pO3JldHVybiBvLnNlYXJjaFBhcmFtcy5zZXQoInN0YXJ0YXBwIixzKSxvLnRvU3RyaW5nKCl9bi5lbmRzV2l0aCgiLyIpfHwobj1gJHtufS9gKSx0aGlzLnNldFdhbGxldENvbm5lY3REZWVwTGluayhuLHIpO2NvbnN0IGk9ZW5jb2RlVVJJQ29tcG9uZW50KGUpO3JldHVybmAke259d2M/dXJpPSR7aX1gfSxhc3luYyB3YWl0KHQpe3JldHVybiBuZXcgUHJvbWlzZShlPT57c2V0VGltZW91dChlLHQpfSl9LG9wZW5IcmVmKHQsZSl7Y29uc3Qgcj10aGlzLmlzVGVsZWdyYW0oKT8iX2JsYW5rIjplO3dpbmRvdy5vcGVuKHQsciwibm9yZWZlcnJlciBub29wZW5lciIpfSxzZXRXYWxsZXRDb25uZWN0RGVlcExpbmsodCxlKXt0cnl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oWWUuV0FMTEVUQ09OTkVDVF9ERUVQTElOS19DSE9JQ0UsSlNPTi5zdHJpbmdpZnkoe2hyZWY6dCxuYW1lOmV9KSl9Y2F0Y2h7Y29uc29sZS5pbmZvKCJVbmFibGUgdG8gc2V0IFdhbGxldENvbm5lY3QgZGVlcCBsaW5rIil9fSxzZXRXYWxsZXRDb25uZWN0QW5kcm9pZERlZXBMaW5rKHQpe3RyeXtjb25zdFtlXT10LnNwbGl0KCI/Iik7bG9jYWxTdG9yYWdlLnNldEl0ZW0oWWUuV0FMTEVUQ09OTkVDVF9ERUVQTElOS19DSE9JQ0UsSlNPTi5zdHJpbmdpZnkoe2hyZWY6ZSxuYW1lOiJBbmRyb2lkIn0pKX1jYXRjaHtjb25zb2xlLmluZm8oIlVuYWJsZSB0byBzZXQgV2FsbGV0Q29ubmVjdCBhbmRyb2lkIGRlZXAgbGluayIpfX0scmVtb3ZlV2FsbGV0Q29ubmVjdERlZXBMaW5rKCl7dHJ5e2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFllLldBTExFVENPTk5FQ1RfREVFUExJTktfQ0hPSUNFKX1jYXRjaHtjb25zb2xlLmluZm8oIlVuYWJsZSB0byByZW1vdmUgV2FsbGV0Q29ubmVjdCBkZWVwIGxpbmsiKX19LHNldE1vZGFsVmVyc2lvbkluU3RvcmFnZSgpe3RyeXt0eXBlb2YgbG9jYWxTdG9yYWdlPCJ1IiYmbG9jYWxTdG9yYWdlLnNldEl0ZW0oWWUuV0NNX1ZFUlNJT04sIjIuNy4wIil9Y2F0Y2h7Y29uc29sZS5pbmZvKCJVbmFibGUgdG8gc2V0IFdlYjNNb2RhbCB2ZXJzaW9uIGluIHN0b3JhZ2UiKX19LGdldFdhbGxldFJvdXRlckRhdGEoKXt2YXIgdDtjb25zdCBlPSh0PWIwLnN0YXRlLmRhdGEpPT1udWxsP3ZvaWQgMDp0LldhbGxldDtpZighZSl0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgIldhbGxldCIgdmlldyBkYXRhJyk7cmV0dXJuIGV9fSxHRD10eXBlb2YgbG9jYXRpb248InUiJiYobG9jYXRpb24uaG9zdG5hbWUuaW5jbHVkZXMoImxvY2FsaG9zdCIpfHxsb2NhdGlvbi5wcm90b2NvbC5pbmNsdWRlcygiaHR0cHMiKSksV2U9dG4oe2VuYWJsZWQ6R0QsdXNlclNlc3Npb25JZDoiIixldmVudHM6W10sY29ubmVjdGVkV2FsbGV0SWQ6dm9pZCAwfSksWUQ9e3N0YXRlOldlLHN1YnNjcmliZSh0KXtyZXR1cm4gTm4oV2UuZXZlbnRzLCgpPT50KFdEKFdlLmV2ZW50c1tXZS5ldmVudHMubGVuZ3RoLTFdKSkpfSxpbml0aWFsaXplKCl7V2UuZW5hYmxlZCYmdHlwZW9mKGNyeXB0bz09bnVsbD92b2lkIDA6Y3J5cHRvLnJhbmRvbVVVSUQpPCJ1IiYmKFdlLnVzZXJTZXNzaW9uSWQ9Y3J5cHRvLnJhbmRvbVVVSUQoKSl9LHNldENvbm5lY3RlZFdhbGxldElkKHQpe1dlLmNvbm5lY3RlZFdhbGxldElkPXR9LGNsaWNrKHQpe2lmKFdlLmVuYWJsZWQpe2NvbnN0IGU9e3R5cGU6IkNMSUNLIixuYW1lOnQubmFtZSx1c2VyU2Vzc2lvbklkOldlLnVzZXJTZXNzaW9uSWQsdGltZXN0YW1wOkRhdGUubm93KCksZGF0YTp0fTtXZS5ldmVudHMucHVzaChlKX19LHRyYWNrKHQpe2lmKFdlLmVuYWJsZWQpe2NvbnN0IGU9e3R5cGU6IlRSQUNLIixuYW1lOnQubmFtZSx1c2VyU2Vzc2lvbklkOldlLnVzZXJTZXNzaW9uSWQsdGltZXN0YW1wOkRhdGUubm93KCksZGF0YTp0fTtXZS5ldmVudHMucHVzaChlKX19LHZpZXcodCl7aWYoV2UuZW5hYmxlZCl7Y29uc3QgZT17dHlwZToiVklFVyIsbmFtZTp0Lm5hbWUsdXNlclNlc3Npb25JZDpXZS51c2VyU2Vzc2lvbklkLHRpbWVzdGFtcDpEYXRlLm5vdygpLGRhdGE6dH07V2UuZXZlbnRzLnB1c2goZSl9fX0senQ9dG4oe2NoYWluczp2b2lkIDAsd2FsbGV0Q29ubmVjdFVyaTp2b2lkIDAsaXNBdXRoOiExLGlzQ3VzdG9tRGVza3RvcDohMSxpc0N1c3RvbU1vYmlsZTohMSxpc0RhdGFMb2FkZWQ6ITEsaXNVaUxvYWRlZDohMX0pLFV0PXtzdGF0ZTp6dCxzdWJzY3JpYmUodCl7cmV0dXJuIE5uKHp0LCgpPT50KHp0KSl9LHNldENoYWlucyh0KXt6dC5jaGFpbnM9dH0sc2V0V2FsbGV0Q29ubmVjdFVyaSh0KXt6dC53YWxsZXRDb25uZWN0VXJpPXR9LHNldElzQ3VzdG9tRGVza3RvcCh0KXt6dC5pc0N1c3RvbURlc2t0b3A9dH0sc2V0SXNDdXN0b21Nb2JpbGUodCl7enQuaXNDdXN0b21Nb2JpbGU9dH0sc2V0SXNEYXRhTG9hZGVkKHQpe3p0LmlzRGF0YUxvYWRlZD10fSxzZXRJc1VpTG9hZGVkKHQpe3p0LmlzVWlMb2FkZWQ9dH0sc2V0SXNBdXRoKHQpe3p0LmlzQXV0aD10fX0sQ3M9dG4oe3Byb2plY3RJZDoiIixtb2JpbGVXYWxsZXRzOnZvaWQgMCxkZXNrdG9wV2FsbGV0czp2b2lkIDAsd2FsbGV0SW1hZ2VzOnZvaWQgMCxjaGFpbnM6dm9pZCAwLGVuYWJsZUF1dGhNb2RlOiExLGVuYWJsZUV4cGxvcmVyOiEwLGV4cGxvcmVyRXhjbHVkZWRXYWxsZXRJZHM6dm9pZCAwLGV4cGxvcmVyUmVjb21tZW5kZWRXYWxsZXRJZHM6dm9pZCAwLHRlcm1zT2ZTZXJ2aWNlVXJsOnZvaWQgMCxwcml2YWN5UG9saWN5VXJsOnZvaWQgMH0pLGxpPXtzdGF0ZTpDcyxzdWJzY3JpYmUodCl7cmV0dXJuIE5uKENzLCgpPT50KENzKSl9LHNldENvbmZpZyh0KXt2YXIgZSxyO1lELmluaXRpYWxpemUoKSxVdC5zZXRDaGFpbnModC5jaGFpbnMpLFV0LnNldElzQXV0aCghIXQuZW5hYmxlQXV0aE1vZGUpLFV0LnNldElzQ3VzdG9tTW9iaWxlKCEhKChlPXQubW9iaWxlV2FsbGV0cykhPW51bGwmJmUubGVuZ3RoKSksVXQuc2V0SXNDdXN0b21EZXNrdG9wKCEhKChyPXQuZGVza3RvcFdhbGxldHMpIT1udWxsJiZyLmxlbmd0aCkpLFllLnNldE1vZGFsVmVyc2lvbkluU3RvcmFnZSgpLE9iamVjdC5hc3NpZ24oQ3MsdCl9fTt2YXIgWkQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LGxmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsWEQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxKRD1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLGhmPSh0LGUscik9PmUgaW4gdD9aRCh0LGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnJ9KTp0W2VdPXIsUUQ9KHQsZSk9Pntmb3IodmFyIHIgaW4gZXx8KGU9e30pKVhELmNhbGwoZSxyKSYmaGYodCxyLGVbcl0pO2lmKGxmKWZvcih2YXIgciBvZiBsZihlKSlKRC5jYWxsKGUscikmJmhmKHQscixlW3JdKTtyZXR1cm4gdH07Y29uc3QgU2M9Imh0dHBzOi8vZXhwbG9yZXItYXBpLndhbGxldGNvbm5lY3QuY29tIixBYz0id2NtIixEYz0ianMtMi43LjAiO2FzeW5jIGZ1bmN0aW9uIFVzKHQsZSl7Y29uc3Qgcj1RRCh7c2RrVHlwZTpBYyxzZGtWZXJzaW9uOkRjfSxlKSxuPW5ldyBVUkwodCxTYyk7cmV0dXJuIG4uc2VhcmNoUGFyYW1zLmFwcGVuZCgicHJvamVjdElkIixsaS5zdGF0ZS5wcm9qZWN0SWQpLE9iamVjdC5lbnRyaWVzKHIpLmZvckVhY2goKFtzLG9dKT0+e28mJm4uc2VhcmNoUGFyYW1zLmFwcGVuZChzLFN0cmluZyhvKSl9KSwoYXdhaXQgZmV0Y2gobikpLmpzb24oKX1jb25zdCBsbj17YXN5bmMgZ2V0RGVza3RvcExpc3RpbmdzKHQpe3JldHVybiBVcygiL3czbS92MS9nZXREZXNrdG9wTGlzdGluZ3MiLHQpfSxhc3luYyBnZXRNb2JpbGVMaXN0aW5ncyh0KXtyZXR1cm4gVXMoIi93M20vdjEvZ2V0TW9iaWxlTGlzdGluZ3MiLHQpfSxhc3luYyBnZXRJbmplY3RlZExpc3RpbmdzKHQpe3JldHVybiBVcygiL3czbS92MS9nZXRJbmplY3RlZExpc3RpbmdzIix0KX0sYXN5bmMgZ2V0QWxsTGlzdGluZ3ModCl7cmV0dXJuIFVzKCIvdzNtL3YxL2dldEFsbExpc3RpbmdzIix0KX0sZ2V0V2FsbGV0SW1hZ2VVcmwodCl7cmV0dXJuYCR7U2N9L3czbS92MS9nZXRXYWxsZXRJbWFnZS8ke3R9P3Byb2plY3RJZD0ke2xpLnN0YXRlLnByb2plY3RJZH0mc2RrVHlwZT0ke0FjfSZzZGtWZXJzaW9uPSR7RGN9YH0sZ2V0QXNzZXRJbWFnZVVybCh0KXtyZXR1cm5gJHtTY30vdzNtL3YxL2dldEFzc2V0SW1hZ2UvJHt0fT9wcm9qZWN0SWQ9JHtsaS5zdGF0ZS5wcm9qZWN0SWR9JnNka1R5cGU9JHtBY30mc2RrVmVyc2lvbj0ke0RjfWB9fTt2YXIgZTY9T2JqZWN0LmRlZmluZVByb3BlcnR5LGZmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsdDY9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxyNj1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLGRmPSh0LGUscik9PmUgaW4gdD9lNih0LGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnJ9KTp0W2VdPXIsbjY9KHQsZSk9Pntmb3IodmFyIHIgaW4gZXx8KGU9e30pKXQ2LmNhbGwoZSxyKSYmZGYodCxyLGVbcl0pO2lmKGZmKWZvcih2YXIgciBvZiBmZihlKSlyNi5jYWxsKGUscikmJmRmKHQscixlW3JdKTtyZXR1cm4gdH07Y29uc3QgcGY9WWUuaXNNb2JpbGUoKSxIdD10bih7d2FsbGV0czp7bGlzdGluZ3M6W10sdG90YWw6MCxwYWdlOjF9LHNlYXJjaDp7bGlzdGluZ3M6W10sdG90YWw6MCxwYWdlOjF9LHJlY29tZW5kZWRXYWxsZXRzOltdfSksc089e3N0YXRlOkh0LGFzeW5jIGdldFJlY29tZW5kZWRXYWxsZXRzKCl7Y29uc3R7ZXhwbG9yZXJSZWNvbW1lbmRlZFdhbGxldElkczp0LGV4cGxvcmVyRXhjbHVkZWRXYWxsZXRJZHM6ZX09bGkuc3RhdGU7aWYodD09PSJOT05FInx8ZT09PSJBTEwiJiYhdClyZXR1cm4gSHQucmVjb21lbmRlZFdhbGxldHM7aWYoWWUuaXNBcnJheSh0KSl7Y29uc3Qgbj17cmVjb21tZW5kZWRJZHM6dC5qb2luKCIsIil9LHtsaXN0aW5nczppfT1hd2FpdCBsbi5nZXRBbGxMaXN0aW5ncyhuKSxzPU9iamVjdC52YWx1ZXMoaSk7cy5zb3J0KChvLGEpPT57Y29uc3QgYz10LmluZGV4T2Yoby5pZCksdT10LmluZGV4T2YoYS5pZCk7cmV0dXJuIGMtdX0pLEh0LnJlY29tZW5kZWRXYWxsZXRzPXN9ZWxzZXtjb25zdHtjaGFpbnM6cixpc0F1dGg6bn09VXQuc3RhdGUsaT1yPy5qb2luKCIsIikscz1ZZS5pc0FycmF5KGUpLG89e3BhZ2U6MSxzZGtzOm4/ImF1dGhfdjEiOnZvaWQgMCxlbnRyaWVzOlllLlJFQ09NTUVOREVEX1dBTExFVF9BTU9VTlQsY2hhaW5zOmksdmVyc2lvbjoyLGV4Y2x1ZGVkSWRzOnM/ZS5qb2luKCIsIik6dm9pZCAwfSx7bGlzdGluZ3M6YX09cGY/YXdhaXQgbG4uZ2V0TW9iaWxlTGlzdGluZ3Mobyk6YXdhaXQgbG4uZ2V0RGVza3RvcExpc3RpbmdzKG8pO0h0LnJlY29tZW5kZWRXYWxsZXRzPU9iamVjdC52YWx1ZXMoYSl9cmV0dXJuIEh0LnJlY29tZW5kZWRXYWxsZXRzfSxhc3luYyBnZXRXYWxsZXRzKHQpe2NvbnN0IGU9bjYoe30sdCkse2V4cGxvcmVyUmVjb21tZW5kZWRXYWxsZXRJZHM6cixleHBsb3JlckV4Y2x1ZGVkV2FsbGV0SWRzOm59PWxpLnN0YXRlLHtyZWNvbWVuZGVkV2FsbGV0czppfT1IdDtpZihuPT09IkFMTCIpcmV0dXJuIEh0LndhbGxldHM7aS5sZW5ndGg/ZS5leGNsdWRlZElkcz1pLm1hcChoPT5oLmlkKS5qb2luKCIsIik6WWUuaXNBcnJheShyKSYmKGUuZXhjbHVkZWRJZHM9ci5qb2luKCIsIikpLFllLmlzQXJyYXkobikmJihlLmV4Y2x1ZGVkSWRzPVtlLmV4Y2x1ZGVkSWRzLG5dLmZpbHRlcihCb29sZWFuKS5qb2luKCIsIikpLFV0LnN0YXRlLmlzQXV0aCYmKGUuc2Rrcz0iYXV0aF92MSIpO2NvbnN0e3BhZ2U6cyxzZWFyY2g6b309dCx7bGlzdGluZ3M6YSx0b3RhbDpjfT1wZj9hd2FpdCBsbi5nZXRNb2JpbGVMaXN0aW5ncyhlKTphd2FpdCBsbi5nZXREZXNrdG9wTGlzdGluZ3MoZSksdT1PYmplY3QudmFsdWVzKGEpLGw9bz8ic2VhcmNoIjoid2FsbGV0cyI7cmV0dXJuIEh0W2xdPXtsaXN0aW5nczpbLi4uSHRbbF0ubGlzdGluZ3MsLi4udV0sdG90YWw6YyxwYWdlOnM/PzF9LHtsaXN0aW5nczp1LHRvdGFsOmN9fSxnZXRXYWxsZXRJbWFnZVVybCh0KXtyZXR1cm4gbG4uZ2V0V2FsbGV0SW1hZ2VVcmwodCl9LGdldEFzc2V0SW1hZ2VVcmwodCl7cmV0dXJuIGxuLmdldEFzc2V0SW1hZ2VVcmwodCl9LHJlc2V0U2VhcmNoKCl7SHQuc2VhcmNoPXtsaXN0aW5nczpbXSx0b3RhbDowLHBhZ2U6MX19fSxWbj10bih7b3BlbjohMX0pLE1hPXtzdGF0ZTpWbixzdWJzY3JpYmUodCl7cmV0dXJuIE5uKFZuLCgpPT50KFZuKSl9LGFzeW5jIG9wZW4odCl7cmV0dXJuIG5ldyBQcm9taXNlKGU9Pntjb25zdHtpc1VpTG9hZGVkOnIsaXNEYXRhTG9hZGVkOm59PVV0LnN0YXRlO2lmKFllLnJlbW92ZVdhbGxldENvbm5lY3REZWVwTGluaygpLFV0LnNldFdhbGxldENvbm5lY3RVcmkodD8udXJpKSxVdC5zZXRDaGFpbnModD8uY2hhaW5zKSxiMC5yZXNldCgiQ29ubmVjdFdhbGxldCIpLHImJm4pVm4ub3Blbj0hMCxlKCk7ZWxzZXtjb25zdCBpPXNldEludGVydmFsKCgpPT57Y29uc3Qgcz1VdC5zdGF0ZTtzLmlzVWlMb2FkZWQmJnMuaXNEYXRhTG9hZGVkJiYoY2xlYXJJbnRlcnZhbChpKSxWbi5vcGVuPSEwLGUoKSl9LDIwMCl9fSl9LGNsb3NlKCl7Vm4ub3Blbj0hMX19O3ZhciBpNj1PYmplY3QuZGVmaW5lUHJvcGVydHksZ2Y9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxzNj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LG82PU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUseWY9KHQsZSxyKT0+ZSBpbiB0P2k2KHQsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6cn0pOnRbZV09cixhNj0odCxlKT0+e2Zvcih2YXIgciBpbiBlfHwoZT17fSkpczYuY2FsbChlLHIpJiZ5Zih0LHIsZVtyXSk7aWYoZ2YpZm9yKHZhciByIG9mIGdmKGUpKW82LmNhbGwoZSxyKSYmeWYodCxyLGVbcl0pO3JldHVybiB0fTtmdW5jdGlvbiBjNigpe3JldHVybiB0eXBlb2YgbWF0Y2hNZWRpYTwidSImJm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKS5tYXRjaGVzfWNvbnN0IEJpPXRuKHt0aGVtZU1vZGU6YzYoKT8iZGFyayI6ImxpZ2h0In0pLHdmPXtzdGF0ZTpCaSxzdWJzY3JpYmUodCl7cmV0dXJuIE5uKEJpLCgpPT50KEJpKSl9LHNldFRoZW1lQ29uZmlnKHQpe2NvbnN0e3RoZW1lTW9kZTplLHRoZW1lVmFyaWFibGVzOnJ9PXQ7ZSYmKEJpLnRoZW1lTW9kZT1lKSxyJiYoQmkudGhlbWVWYXJpYWJsZXM9YTYoe30scikpfX0saG49dG4oe29wZW46ITEsbWVzc2FnZToiIix2YXJpYW50OiJzdWNjZXNzIn0pLG9PPXtzdGF0ZTpobixzdWJzY3JpYmUodCl7cmV0dXJuIE5uKGhuLCgpPT50KGhuKSl9LG9wZW5Ub2FzdCh0LGUpe2huLm9wZW49ITAsaG4ubWVzc2FnZT10LGhuLnZhcmlhbnQ9ZX0sY2xvc2VUb2FzdCgpe2huLm9wZW49ITF9fTtjbGFzcyBhT3tjb25zdHJ1Y3RvcihlKXt0aGlzLm9wZW5Nb2RhbD1NYS5vcGVuLHRoaXMuY2xvc2VNb2RhbD1NYS5jbG9zZSx0aGlzLnN1YnNjcmliZU1vZGFsPU1hLnN1YnNjcmliZSx0aGlzLnNldFRoZW1lPXdmLnNldFRoZW1lQ29uZmlnLHdmLnNldFRoZW1lQ29uZmlnKGUpLGxpLnNldENvbmZpZyhlKSx0aGlzLmluaXRVaSgpfWFzeW5jIGluaXRVaSgpe2lmKHR5cGVvZiB3aW5kb3c8InUiKXthd2FpdCBTMCgoKT0+aW1wb3J0KCIuL2luZGV4LUJGUFE3QS1BLmpzIiksX192aXRlX19tYXBEZXBzKFswLDFdKSk7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ3Y20tbW9kYWwiKTtkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50RWxlbWVudCgiYmVmb3JlZW5kIixlKSxVdC5zZXRJc1VpTG9hZGVkKCEwKX19fWV4cG9ydHt0ciBhcyBCLFllIGFzIEMsRzYgYXMgRSxpTyBhcyBKLE1hIGFzIE0sVXQgYXMgTyxiMCBhcyBSLHdmIGFzIFQsYU8gYXMgVyxTMCBhcyBfLGxpIGFzIGEsb08gYXMgYixzTyBhcyBjLFlEIGFzIGQsYWUgYXMgZyxfdCBhcyBwfTsK"}},"time_used":25,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":10,"receive":15,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"explorer-api.walletconnect.com/w3m/v1/getWalletImage/c55df831-3c52-49fc-d1d1-97a926dc0c00?projectId=bc97055fbc522cecb678f539aea6c54f\u0026sdkType=wcm\u0026sdkVersion=js-2.7.0","fqdn":"explorer-api.walletconnect.com","domain":"walletconnect.com","tld":"com"},"ip":{"addr":"172.66.147.126","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"img","requested_by":"https://1nch-svap.com/","date":"2026-07-27T09:36:06.494Z","timestamp":1785144966494,"http_version":"HTTP/3","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"walletconnect.com","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Thu, 04 Jun 2026 04:16:36 GMT","end":"Wed, 02 Sep 2026 05:16:25 GMT"},"fingerprint":{"sha1":"DC:D0:F7:32:00:90:71:77:19:17:82:23:72:AF:55:89:00:14:EB:BA","sha256":"FE:88:1B:93:AC:1B:71:AB:36:AD:D8:5C:FB:D5:69:2B:08:AA:96:B8:CF:3B:C0:A4:52:8F:C1:32:3F:7D:8B:AD"}}},"request":{"raw":"GET /w3m/v1/getWalletImage/c55df831-3c52-49fc-d1d1-97a926dc0c00?projectId=bc97055fbc522cecb678f539aea6c54f\u0026sdkType=wcm\u0026sdkVersion=js-2.7.0 HTTP/1.1\r\nHost: explorer-api.walletconnect.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nOrigin: https://1nch-svap.com\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://1nch-svap.com/\r\nSec-Fetch-Dest: image\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: cross-site\r\nPriority: u=5, i\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/3 200 \r\nserver-timing: cfExtPri\r\nx-robots-tag: noindex\r\ndate: Mon, 27 Jul 2026 09:36:06 GMT\r\ncontent-type: image/webp\r\npriority: u=5,i\r\ncf-ray: a21aa8689e3d5694-OSL\r\ncf-cache-status: HIT\r\naccept-ranges: bytes\r\naccess-control-allow-origin: *\r\nage: 5813\r\ncache-control: public, max-age=31536000, s-maxage=86400\r\netag: \"cfy1h_699XsftIISQ45Kwp4frpfmDcyauXnchu_YTSDQ\"\r\nserver: cloudflare\r\nvary: Accept\r\nx-wc-r2-status: HIT\r\ncf-images: internal=ok/- q=0 n=1134+6 c=2+4 v=2025.4.5 l=968 f=false c2=0\r\ncontent-security-policy: default-src 'none'; navigate-to 'none'; form-action 'none'\r\nx-content-type-options: nosniff\r\nalt-svc: h3=\":443\"; ma=86400\r\ncontent-length: 968\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}],"data":{"size":968,"size_decoded":1638,"mime_type":"image/webp","magic":"RIFF (little-endian) data, Web/P image","md5":"56876be1d7a186939b3a6521138c8a3f","sha1":"b620f979afec63db1227e26229263ed86cdc207d","sha256":"4cad7436857a569fef90ada84a070ab66c819df31c7bb6d8956080398a979264","sha512":"19a37177705dc3a77f3b55808ff243fabb16bfe80329d4c272028f22c57fed0c05e77a0c7cca454224b6d282280524e1116f1565801328367d437542cf1b2ae6","ssdeep":"","tlshash":"6b110889b3b858a8cdc7bc2be300f80061b300c49338c747661e06ab5a0d940b8f969a","first_seen":"2025-11-27T16:59:39.315355Z","last_seen":"2026-07-27T09:36:42.912619Z","times_seen":25,"resource_available":false,"data":"UklGRsADAABXRUJQVlA4WAoAAAAQAAAAdwAAdwAAQUxQSHAAAAABD9D/iAgwjiSpzXAFSM8LgVAIjeC9/0b0X2HaNoyddLzCNdUCaQ3bHNVVGxKK/IByIy3X0nZdqfcxLDR1Dlvuo9S5T2BfY4HyIqVnaI2ffVXeYwSwmIHHMFXJiWOPzUmtkVikVPlHHs3WNEObaVoAVlA4ICoDAADwFACdASp4AHgAPkkii0QioiEWTwSEKASEoC5qpB2y/47oKfyQ/CXkaO8f4QdlK+70bbcTzAfqf6rv+y1KD0Gv2O65Fuu5lrj6CVMkJ+YnwLtlYaEG3KtmJtRpzhrkwZlQ8MLhX+CDBcxzNnQCwYWMHlz3HKXu8KdT2ak1KucHwGClTYRJBl1fKCb0Pb061aozEGgj2nD981wsDlpdlnD16xx2Lm+EbOA3KOCgn5gsAAD++UWSf3nzyT4xfn32czxHmY9cBxjI2xsPhzE9Tw+rg72eT+pvG3/BoH5i5T68SYT4yUoogX/Sw3/Z3gPUo9+J7yZekMCdtfZ4qknD40LcNS8IUGL8JXPANE/YvkEEb0g1/jK+yaya5UHavzy4jf2PGH79R6s2S9XXfztKJKep+4ol2OZKMzBSn6e7830bjfw9Z4X6n8fEIUvDv0Ia8KjUw2xB5ws9hmWNgbSvR3du9TKVJSPkJb5I+szEpKR4KO1dyXqyumi6sq76VJ0+hup5rXHxtJ4OWK/zXmgu/KsE9qfgKGeyHEQqfg2n3cIINgyfTmfYGf/mlzPYviC1Y29lhfd62hHcxVYHQYQ81blbIYx2Ob2A5HjgCH5Cf0ao7/47f9olXHg/2xeXPwIuNDHS1XQ1c6iE7EZY7Ar19MRcDNyZg0nI1jN7qMYOy6tN46Uys1x5Tj3TjmbjutGEQNIvCfFavJeXAC/7/605/x6GCo36m1mnIo8cDeoW7xBCv/x2pnUqlQjT8kNU66D8aAiYpp/Sv/UB9sN490fC6CJ9n2ouoMRBAopcuy2KPN/PAvyruUvfAS/8Nf9xB0/+GN8ILn/9OFLxwNal/tkW7t5aSdMZvllw6///XTctz/jUVtC5sbGB/8Hd8kkYd+V24vonTM1QNNWR17qgE5j8mL/N4X35v2AX0uh5u9/E7K7wkHYYgy2x/u6rrIL6RmrLkmxIMqupYflKqOcA6ZlHYmgXJI10ZsKU7X/9Bv8PiLubJv4ds+YLWMOIAPoXVS+SWZQfi7Ca+3X+kre7Nmm93XSrUiAA0wB/gAKbAABWroRuaiLxJlq26ysAAAA="}},"time_used":28,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":28,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"explorer-api.walletconnect.com/w3m/v1/getWalletImage/c20e1cec-05e8-4ac6-a086-7ce355092400?projectId=bc97055fbc522cecb678f539aea6c54f\u0026sdkType=wcm\u0026sdkVersion=js-2.7.0","fqdn":"explorer-api.walletconnect.com","domain":"walletconnect.com","tld":"com"},"ip":{"addr":"172.66.147.126","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"img","requested_by":"https://1nch-svap.com/","date":"2026-07-27T09:36:06.495Z","timestamp":1785144966495,"http_version":"HTTP/3","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"walletconnect.com","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Thu, 04 Jun 2026 04:16:36 GMT","end":"Wed, 02 Sep 2026 05:16:25 GMT"},"fingerprint":{"sha1":"DC:D0:F7:32:00:90:71:77:19:17:82:23:72:AF:55:89:00:14:EB:BA","sha256":"FE:88:1B:93:AC:1B:71:AB:36:AD:D8:5C:FB:D5:69:2B:08:AA:96:B8:CF:3B:C0:A4:52:8F:C1:32:3F:7D:8B:AD"}}},"request":{"raw":"GET /w3m/v1/getWalletImage/c20e1cec-05e8-4ac6-a086-7ce355092400?projectId=bc97055fbc522cecb678f539aea6c54f\u0026sdkType=wcm\u0026sdkVersion=js-2.7.0 HTTP/1.1\r\nHost: explorer-api.walletconnect.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nOrigin: https://1nch-svap.com\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://1nch-svap.com/\r\nSec-Fetch-Dest: image\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: cross-site\r\nPriority: u=5, i\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/3 200 \r\nserver-timing: cfExtPri\r\nx-robots-tag: noindex\r\ndate: Mon, 27 Jul 2026 09:36:06 GMT\r\ncontent-type: image/webp\r\npriority: u=5,i\r\ncf-ray: a21aa8689e3e5694-OSL\r\ncf-cache-status: HIT\r\naccept-ranges: bytes\r\naccess-control-allow-origin: *\r\nage: 5813\r\ncache-control: public, max-age=31536000, s-maxage=86400\r\netag: \"cfs6eobn8WxmhFyQ_IbBrw7DUFfmDcyauXnchu_YTSDQ\"\r\nserver: cloudflare\r\nvary: accept\r\nx-wc-r2-status: HIT\r\ncf-images: internal=ok/- q=0 n=7+0 c=0+2 v=2026.4.6 l=1192 f=false c2=0\r\ncontent-security-policy: default-src 'none'; navigate-to 'none'; form-action 'none'; img-src data:; style-src 'unsafe-inline';\r\nx-content-type-options: nosniff\r\nalt-svc: h3=\":443\"; ma=86400\r\ncontent-length: 1192\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}],"data":{"size":1192,"size_decoded":1904,"mime_type":"image/webp","magic":"RIFF (little-endian) data, Web/P image","md5":"4d40ea4af9c48c1d894bf5aabcbdcd8c","sha1":"4b82938b46b8d238553afe63c1f591ce24a562af","sha256":"54656b79cfe70edf0e291967e6aeeec12239fa8042d1d2281efa356889de134f","sha512":"16a8587b3aee0df3406f3464adf437b2e43aba4b87823a4dd3ee1e18f89c725c817f308d38f186e5a9ff12fd69757701ad3a827b36b0360d27c8e40a8cda751e","ssdeep":"","tlshash":"89210ae1123e045cc83bb3fe0f5433e35d9b4921d88228d1684489046dbc0c12301ed2","first_seen":"2024-12-05T15:42:26.551532Z","last_seen":"2026-08-12T07:04:43.323477Z","times_seen":1241,"resource_available":false,"data":"UklGRqAEAABXRUJQVlA4WAoAAAAQAAAAdwAAdwAAQUxQSPkAAAABgFttWxTrS2fDEoi1EOpwirlSgdw6NKUQJyKkADTk4Dr7fNldImICcLtQ2ro+jR83BWcrJfDwouri+MFjV+WPkd/D+PFDLR9Q+pGiL+/ZmZGm2d2UNSPRNrth145Um901M5I1V84j3XJDej5eruqRsAGQB0ZDAeiRsoboOHVCRU5RfY2ktWVlHSvXs+oTqzT++//f/z+AJ1apZxUcK2dZWc1Kq8gpKtFxughUnDRQDIxCDsAwqgFAej5erlDyKbFt2Bhc3TVc2t01ZC2TNsOtO8PD7HDn2XPwJe6Xdfh8g5F4aK4v8ZPFThd4eKa0dSF9ntQ7WymB2wEAVlA4IIADAACQGACdASp4AHgAPkkkj0UioiGRTM18KASEtIA3/64DQl5ER4P/qHV64V3JvfdPxk5AddX8lfyZ43fjv9A/r35eapl/auNvmIfzP/F+l9/pfcB7d/oz/ke4R+on+37Bv7Y+xn+1RKPZtexTbl8j5gBqkydw+7LSdszmyaVdMoJ3uplWA9d9DhoSZCa8CfmNrSi3/ul9yWVwfeSBqzSDzZ0fa3dM30eKYsjxGtNBZ0Gt71fXyO7T3Ae/7zUDyZSaR53DiInmgSDHNr6zQeRgAP7+BtBMfaEp0AU/1f4i4SUINESf+Vesnb/jFN2jffFLpfSD/YYTgHzpRzcJvSNBHB/cTzTfo/841wdcjQxVCgSgqvMdV4aBsvMPq5EcSGavaOf4mDe+3fHylmooVTYZsp8uhMvoCn9RTaH9jBZr0W5Vp1Je2Q37oeJxSbKKeY/JgMmZAosliQ9zTHatDBOysdCbitjGUKYo0+JzDkAxNT9C5vbXETMqutqozEkhPV37hOw6tcR8A+D2NXSgWpFJFyxS7eRk4Z2GlVc0fGpEqmTU/BMJ9VNFo25RwrAtah2FTIS8IuBiCMLFlZa6kKkXOYgs7JQ4jyWxMNWHeVFcZDEXMpNMXWYGvPUPm5kEhrWy2DoM9xcZxvZiUjxoTo5IioVpud1ouaj5gD++p1cj4y9Lro/9bK2hyCOxm7galiC7uU9Tz4Q/tg+U8iV5nGmI4/5Y3PVU0SlOPmAoZuZH/62v0nm3R04mKcge2e/EVxHw1i+9MZ42O872MfwM0EA6BcyZFmjnWtFJrfyyFcVqk/uFcu1Kk2BY11r7o4sMDAhpaNsebH+W5NkXv9WbqZORVocI2uj0+NMGTyf5NEj9nI7oX0PCwTUsOJHjFzavlzpfw5au99TaPl1gN1ruovL/4qLXcud23t7bUVPfiW7Kel8rZsp64yNvW5wX6rLYBz0wEWY1qNDTHxCHj7YQToJpNYIyBcPM0hNUTToPxAqPkq6m/7e194x5hxT22HkAkTFvvYlF+Jw2nUj/SByinnBha0r6lS44Jb/9n0KN9CJIhwNvHcKoPkqKYia6PIC6tv5bd63HN0z/ONTsXLxGkrPCIXflj0XjF4XZtlpTc8Zx9U0R/a+saE1uSjM/geTvDJleiA3oZxg5a/UF9GbrUgV9ARXwIBNKjGpYi3509o1ZAAAAAA=="}},"time_used":24,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":24,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"1nch-svap.com/assets/tronweb-DoSo1Lbu.js","fqdn":"1nch-svap.com","domain":"1nch-svap.com","tld":"com"},"ip":{"addr":"104.21.75.136","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://1nch-svap.com/","date":"2026-07-27T09:36:06.070Z","timestamp":1785144966070,"http_version":"HTTP/3","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"1nch-svap.com","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Sat, 25 Jul 2026 23:12:54 GMT","end":"Sat, 24 Oct 2026 00:11:42 GMT"},"fingerprint":{"sha1":"AC:8D:24:B7:93:96:7F:75:AF:8B:42:06:6A:52:88:B7:26:2A:AB:CA","sha256":"86:DE:73:A5:AD:EB:38:13:F1:14:61:D6:2F:48:3B:8B:38:4F:60:E5:95:4D:89:FE:BD:DB:2B:C3:94:10:DC:D3"}}},"request":{"raw":"GET /assets/tronweb-DoSo1Lbu.js HTTP/1.1\r\nHost: 1nch-svap.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://1nch-svap.com/\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=1\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/3 200 \r\nserver: cloudflare\r\ndate: Mon, 27 Jul 2026 09:36:06 GMT\r\ncontent-type: application/javascript\r\nlast-modified: Sun, 26 Jul 2026 12:28:54 GMT\r\nnel: {\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}\r\npriority: u=1,i=?0\r\nvary: Accept-Encoding\r\netag: W/\"6a65fd86-e2132\"\r\nexpires: Wed, 26 Aug 2026 07:59:11 GMT\r\ncache-control: public, max-age=2592000, immutable\r\ncontent-encoding: gzip\r\nage: 5814\r\ncf-cache-status: HIT\r\nreport-to: {\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=HgrRUP0JU0n2Qnll4tDFa1enXKXml2Tj0hPFfU2wu0Io1oYkuK%2F98EXwPkAE%2F1jBnPuHfUx8jyabt2wGX9e1Qu4dMhxW7%2Fcsk9oMF74lt5JSdOn1wFhsNVzaXByiAhw6\"}]}\r\ncf-ray: a21aa865f8275699-OSL\r\nalt-svc: h3=\":443\"; ma=86400\r\nserver-timing: cfExtPri\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}],"data":{"size":926002,"size_decoded":239476,"mime_type":"application/javascript","magic":"JavaScript source, Unicode text, UTF-8 text, with very long lines (63303)","md5":"7d48a25cfd883b4db0d8c7193dc9f06c","sha1":"a9554acd611e7c7d69cdc0b0fd978f63640f8f4e","sha256":"f5fc6b9116b880c5d4bfdc036044e7f284257948f26707cc7abde09869c57923","sha512":"84c3e83f6c940e1a9fc1f1b85918003ab050dd9266204314f3a3093ca4f8ccf2f2d6d9d71607144a756c9ff4d0fef7297eb04c1d0954f3dce52f319e5c4933b2","ssdeep":"24576:Ru1esMXgqwbxxCtygzprHT01fbBuhcIV8F9N1u9E0M3QvhtOY8494N:Ru1esMXgqwbxxCtygzprHA1fbBuhcIaT","tlshash":"ca15078432c6f66643a110e01a3b540eb23d6b5cd01ca69af38cd4e77ef95c6466bf78","first_seen":"2026-07-27T07:59:48.824292Z","last_seen":"2026-07-27T09:36:42.914738Z","times_seen":2,"resource_available":true,"data":"dmFyIEZ4PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgSTA9bj0+e3Rocm93IFR5cGVFcnJvcihuKX07dmFyIE54PShuLGUsdCk9PmUgaW4gbj9GeChuLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnR9KTpuW2VdPXQ7dmFyIFo9KG4sZSx0KT0+Tngobix0eXBlb2YgZSE9InN5bWJvbCI/ZSsiIjplLHQpLEpjPShuLGUsdCk9PmUuaGFzKG4pfHxJMCgiQ2Fubm90ICIrdCk7dmFyIFk9KG4sZSx0KT0+KEpjKG4sZSwicmVhZCBmcm9tIHByaXZhdGUgZmllbGQiKSx0P3QuY2FsbChuKTplLmdldChuKSksUGU9KG4sZSx0KT0+ZS5oYXMobik/STAoIkNhbm5vdCBhZGQgdGhlIHNhbWUgcHJpdmF0ZSBtZW1iZXIgbW9yZSB0aGFuIG9uY2UiKTplIGluc3RhbmNlb2YgV2Vha1NldD9lLmFkZChuKTplLnNldChuLHQpLHVlPShuLGUsdCxhKT0+KEpjKG4sZSwid3JpdGUgdG8gcHJpdmF0ZSBmaWVsZCIpLGE/YS5jYWxsKG4sdCk6ZS5zZXQobix0KSx0KSxGZT0obixlLHQpPT4oSmMobixlLCJhY2Nlc3MgcHJpdmF0ZSBtZXRob2QiKSx0KTt2YXIgWWM9KG4sZSx0LGEpPT4oe3NldCBfKHMpe3VlKG4sZSxzLHQpfSxnZXQgXygpe3JldHVybiBZKG4sZSxhKX19KTtpbXBvcnR7ZyBhcyBQYSxwIGFzIFZ1LEIgYXMga3gsRSBhcyBVeH1mcm9tIi4vd2FsbGV0Y29ubmVjdC1DRWtnb1I5aS5qcyI7aW1wb3J0e2cgYXMgVGQsYyBhcyB1b31mcm9tIi4vcmVhY3QtQkhMOU11SFouanMiO2NvbnN0IFN0PSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSI7Y2xhc3MgQWR7ZW5jb2RlKGUpe2xldCB0PSIiLGEscyxyLG8saSxjLGYsZD0wO2Zvcig7ZDxlLmxlbmd0aDspYT1lLmNoYXJDb2RlQXQoZCsrKSxzPWUuY2hhckNvZGVBdChkKyspLHI9ZS5jaGFyQ29kZUF0KGQrKyksbz1hPj4yLGk9KGEmMyk8PDR8cz4+NCxjPShzJjE1KTw8MnxyPj42LGY9ciY2Myxpc05hTihzKT9jPWY9NjQ6aXNOYU4ocikmJihmPTY0KSx0PXQrU3QuY2hhckF0KG8pK1N0LmNoYXJBdChpKStTdC5jaGFyQXQoYykrU3QuY2hhckF0KGYpO3JldHVybiB0fWVuY29kZUlnbm9yZVV0ZjgoZSl7bGV0IHQ9IiIsYSxzLHIsbyxpLGMsZixkPTA7Zm9yKDtkPGUubGVuZ3RoOylhPWVbZCsrXSxzPWVbZCsrXSxyPWVbZCsrXSxvPWE+PjIsaT0oYSYzKTw8NHxzPj40LGM9KHMmMTUpPDwyfHI+PjYsZj1yJjYzLGlzTmFOKHMpP2M9Zj02NDppc05hTihyKSYmKGY9NjQpLHQ9dCtTdC5jaGFyQXQobykrU3QuY2hhckF0KGkpK1N0LmNoYXJBdChjKStTdC5jaGFyQXQoZik7cmV0dXJuIHR9ZGVjb2RlKGUpe2xldCB0PSIiLGEscyxyLG8saSxjLGYsZD0wO2ZvcihlPWUucmVwbGFjZSgvW15BLVphLXowLTlcK1wvXD1dL2csIiIpO2Q8ZS5sZW5ndGg7KW89U3QuaW5kZXhPZihlLmNoYXJBdChkKyspKSxpPVN0LmluZGV4T2YoZS5jaGFyQXQoZCsrKSksYz1TdC5pbmRleE9mKGUuY2hhckF0KGQrKykpLGY9U3QuaW5kZXhPZihlLmNoYXJBdChkKyspKSxhPW88PDJ8aT4+NCxzPShpJjE1KTw8NHxjPj4yLHI9KGMmMyk8PDZ8Zix0PXQrU3RyaW5nLmZyb21DaGFyQ29kZShhKSxjIT02NCYmKHQ9dCtTdHJpbmcuZnJvbUNoYXJDb2RlKHMpKSxmIT02NCYmKHQ9dCtTdHJpbmcuZnJvbUNoYXJDb2RlKHIpKTtyZXR1cm4gdGhpcy5fdXRmOF9kZWNvZGUodCl9ZGVjb2RlVG9CeXRlQXJyYXkoZSl7bGV0IHQ9IiIsYSxzLHIsbyxpLGMsZixkPTA7Zm9yKGU9ZS5yZXBsYWNlKC9bXkEtWmEtejAtOVwrXC9cPV0vZywiIik7ZDxlLmxlbmd0aDspbz1TdC5pbmRleE9mKGUuY2hhckF0KGQrKykpLGk9U3QuaW5kZXhPZihlLmNoYXJBdChkKyspKSxjPVN0LmluZGV4T2YoZS5jaGFyQXQoZCsrKSksZj1TdC5pbmRleE9mKGUuY2hhckF0KGQrKykpLGE9bzw8MnxpPj40LHM9KGkmMTUpPDw0fGM+PjIscj0oYyYzKTw8NnxmLHQ9dCtTdHJpbmcuZnJvbUNoYXJDb2RlKGEpLGMhPTY0JiYodD10K1N0cmluZy5mcm9tQ2hhckNvZGUocykpLGYhPTY0JiYodD10K1N0cmluZy5mcm9tQ2hhckNvZGUocikpO3JldHVybiB0aGlzLl9vdXQyQnl0ZUFycmF5KHQpfV9vdXQyQnl0ZUFycmF5KGUpe2NvbnN0IHQ9bmV3IEFycmF5KGUubGVuZ3RoKTtsZXQgYT0wLHM9MDtmb3IoO2E8ZS5sZW5ndGg7KXM9ZS5jaGFyQ29kZUF0KGEpLHRbYV09cyxhKys7cmV0dXJuIHR9X3V0ZjhfZW5jb2RlKGUpe2U9ZS5yZXBsYWNlKC9cclxuL2csYApgKTtsZXQgdD0iIjtmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl7Y29uc3Qgcz1lLmNoYXJDb2RlQXQoYSk7czwxMjg/dCs9U3RyaW5nLmZyb21DaGFyQ29kZShzKTpzPjEyNyYmczwyMDQ4Pyh0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHM+PjZ8MTkyKSx0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHMmNjN8MTI4KSk6KHQrPVN0cmluZy5mcm9tQ2hhckNvZGUocz4+MTJ8MjI0KSx0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHM+PjYmNjN8MTI4KSx0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHMmNjN8MTI4KSl9cmV0dXJuIHR9X3V0ZjhfZGVjb2RlKGUpe2xldCB0PSIiLGE9MCxzPTAscj0wLG89MDtmb3IoO2E8ZS5sZW5ndGg7KXM9ZS5jaGFyQ29kZUF0KGEpLHM8MTI4Pyh0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHMpLGErKyk6cz4xOTEmJnM8MjI0PyhyPWUuY2hhckNvZGVBdChhKzEpLHQrPVN0cmluZy5mcm9tQ2hhckNvZGUoKHMmMzEpPDw2fHImNjMpLGErPTIpOihyPWUuY2hhckNvZGVBdChhKzEpLG89ZS5jaGFyQ29kZUF0KGErMiksdCs9U3RyaW5nLmZyb21DaGFyQ29kZSgocyYxNSk8PDEyfChyJjYzKTw8NnxvJjYzKSxhKz0zKTtyZXR1cm4gdH19ZnVuY3Rpb24gQWMobil7aWYobjwwfHxuPjI1NSl0aHJvdyBuZXcgRXJyb3IoIklucHV0IG11c3QgYmUgYSBieXRlIik7Y29uc3QgZT0iMDEyMzQ1Njc4OUFCQ0RFRiI7bGV0IHQ9IiI7cmV0dXJuIHQrPWUuY2hhckF0KG4+PjQpLHQrPWUuY2hhckF0KG4mMTUpLHR9ZnVuY3Rpb24gbWQobil7bGV0IGU9IiI7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0Kyspe2NvbnN0IGE9blt0XS50b1N0cmluZygyKSxzPWEubWF0Y2goL14xKz8oPz0wKS8pO2lmKHMmJmEubGVuZ3RoPT09OCl7Y29uc3Qgcj1zWzBdLmxlbmd0aDtsZXQgbz1uW3RdLnRvU3RyaW5nKDIpLnNsaWNlKDctcik7Zm9yKGxldCBpPTE7aTxyO2krKylvKz1uW2krdF0udG9TdHJpbmcoMikuc2xpY2UoMik7ZSs9U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChvLDIpKSx0Kz1yLTF9ZWxzZSBlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5bdF0pfXJldHVybiBlfWZ1bmN0aW9uIFhoKG4pe2NvbnN0IGU9bi5yZXBsYWNlKC9eMHgvLCIiKS5zcGxpdCgiIik7bGV0IHQ9IiI7Zm9yKGxldCBhPTA7YTxlLmxlbmd0aC8yO2ErKyl7Y29uc3Qgcz1gMHgke2VbYSoyXX0ke2VbYSoyKzFdfWA7dCs9U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChzKSl9cmV0dXJuIHR9ZnVuY3Rpb24gbGUobil7bGV0IGU9IiI7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0KyspZSs9QWMoblt0XSk7cmV0dXJuIGV9ZnVuY3Rpb24gem8obil7cmV0dXJuIG5ldyBBZCgpLmRlY29kZVRvQnl0ZUFycmF5KG4pfWZ1bmN0aW9uIFBkKG4pe3JldHVybiBuZXcgQWQoKS5lbmNvZGVJZ25vcmVVdGY4KG4pfWNvbnN0IER4PU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxiYXNlNjREZWNvZGVGcm9tU3RyaW5nOnpvLGJhc2U2NEVuY29kZVRvU3RyaW5nOlBkLGJ5dGUyaGV4U3RyOkFjLGJ5dGVBcnJheTJoZXhTdHI6bGUsYnl0ZXNUb1N0cmluZzptZCxoZXh0b1N0cmluZzpYaH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxRaD0zNCxGcj0iNDEiLGVnPTY1LHdhPS9eKDQxKS8sdGc9Im0vNDQnLzE5NSciLHdkPXRnKyIvMCcvMC8wIiwkeD1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQUREUkVTU19QUkVGSVg6RnIsQUREUkVTU19QUkVGSVhfQllURTplZyxBRERSRVNTX1BSRUZJWF9SRUdFWDp3YSxBRERSRVNTX1NJWkU6UWgsVFJPTl9CSVAzOV9QQVRIX0lOREVYXzA6d2QsVFJPTl9CSVAzOV9QQVRIX1BSRUZJWDp0Z30sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTtmdW5jdGlvbiBMeChuKXtyZXR1cm4gbWQobil9ZnVuY3Rpb24gengobixlLHQ9ITEpe2lmKG4ubGVuZ3RoIT1lLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGE9MDthPG4ubGVuZ3RoO2ErKylpZih0KXtpZihuW2FdIT1lW2FdKXJldHVybiExfWVsc2UgaWYoSlNPTi5zdHJpbmdpZnkoblthXSkhPUpTT04uc3RyaW5naWZ5KGVbYV0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGp4KG4pe2NvbnN0IGU9W10sdD1uLmxlbmd0aDtsZXQgYTtmb3IobGV0IHM9MDtzPHQ7cysrKWE9bi5jaGFyQ29kZUF0KHMpLGE+PTY1NTM2JiZhPD0xMTE0MTExPyhlLnB1c2goYT4+MTgmN3wyNDApLGUucHVzaChhPj4xMiY2M3wxMjgpLGUucHVzaChhPj42JjYzfDEyOCksZS5wdXNoKGEmNjN8MTI4KSk6YT49MjA0OCYmYTw9NjU1MzU/KGUucHVzaChhPj4xMiYxNXwyMjQpLGUucHVzaChhPj42JjYzfDEyOCksZS5wdXNoKGEmNjN8MTI4KSk6YT49MTI4JiZhPD0yMDQ3PyhlLnB1c2goYT4+NiYzMXwxOTIpLGUucHVzaChhJjYzfDEyOCkpOmUucHVzaChhJjI1NSk7cmV0dXJuIGV9ZnVuY3Rpb24gcmcobil7bGV0IGU7aWYobj49IkEiJiZuPD0iRiI/ZT1uLmNoYXJDb2RlQXQoMCktNjUrMTA6bj49ImEiJiZuPD0iZiI/ZT1uLmNoYXJDb2RlQXQoMCktOTcrMTA6bj49IjAiJiZuPD0iOSImJihlPW4uY2hhckNvZGVBdCgwKS00OCksdHlwZW9mIGU9PSJudW1iZXIiKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcigiVGhlIHBhc3NlZCBoZXggY2hhciBpcyBub3QgYSB2YWxpZCBoZXggY2hhciIpfWZ1bmN0aW9uIHZkKG4pe3JldHVybiBuPj0iQSImJm48PSJGInx8bj49ImEiJiZuPD0iZiJ8fG4+PSIwIiYmbjw9IjkiPzE6MH1mdW5jdGlvbiBJdChuLGU9ITEpe2xldCB0PW4ubGVuZ3RoO2UmJnQlMiYmKG49YDAke259YCx0KyspO2NvbnN0IGE9W107bGV0IHM9MCxyPTAsbz0wO2ZvcihsZXQgaT0wO2k8dDtpKyspe2NvbnN0IGM9bi5jaGFyQXQoaSk7aWYodmQoYykpczw8PTQscys9cmcoYykscisrLHIlMj09PTAmJihhW28rK109cyxzPTApO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJUaGUgcGFzc2VkIGhleCBjaGFyIGlzIG5vdCBhIHZhbGlkIGhleCBzdHJpbmciKX1yZXR1cm4gYX1mdW5jdGlvbiBWeChuKXtpZighL15cZHs0fS1cZHsyfS1cZHsyfSggXGR7Mn0tXGR7Mn0tXGR7Mn18KS8udGVzdChuKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBwYXNzZWQgZGF0ZSBzdHJpbmcgaXMgbm90IHZhbGlkIik7Y29uc3QgZT1uLnNwbGl0KCIgIiksdD1lWzBdLnNwbGl0KCItIiksYT1wYXJzZUludCh0WzBdLDEwKSxzPXBhcnNlSW50KHRbMV0sMTApLTEscj1wYXJzZUludCh0WzJdLDEwKTtpZihlLmxlbmd0aD4xKXtjb25zdCBvPWVbMV0uc3BsaXQoIi0iKSxpPXBhcnNlSW50KG9bMF0sMTApLGM9cGFyc2VJbnQob1sxXSwxMCksZj1wYXJzZUludChvWzJdLDEwKTtyZXR1cm4gbmV3IERhdGUoYSxzLHIsaSxjLGYpfXJldHVybiBuZXcgRGF0ZShhLHMscil9ZnVuY3Rpb24gbmcobil7cmV0dXJuIG4+PSIwIiYmbjw9IjkiPzE6MH1mdW5jdGlvbiBHeChuKXtpZihuPT1udWxsfHxuLmxlbmd0aD09MHx8bj09IiIpcmV0dXJuLTE7bGV0IGU9MDtpZihuLmxlbmd0aD09NDApZm9yKDtlPDQwO2UrKyl7Y29uc3QgdD1uLmNoYXJBdChlKTtpZighdmQodCkpYnJlYWt9aWYoZT09NDApcmV0dXJuIDE7Zm9yKGU9MDtlPG4ubGVuZ3RoO2UrKyl7Y29uc3QgdD1uLmNoYXJBdChlKTtpZighbmcodCkpYnJlYWt9aWYoZT09bi5sZW5ndGgpcmV0dXJuIDI7Zm9yKGU9MDtlPG4ubGVuZ3RoO2UrKylpZihuLmNoYXJBdChlKT4iICIpcmV0dXJuIDM7cmV0dXJuLTF9Y29uc3QgSHg9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGFycmF5RXF1YWxzOnp4LGJhc2U2NERlY29kZUZyb21TdHJpbmc6em8sYmFzZTY0RW5jb2RlVG9TdHJpbmc6UGQsYmluMlN0cmluZzpMeCxieXRlMmhleFN0cjpBYyxieXRlQXJyYXkyaGV4U3RyOmxlLGJ5dGVzVG9TdHJpbmc6bWQsZ2V0U3RyaW5nVHlwZTpHeCxoZXhDaGFyMmJ5dGU6cmcsaGV4U3RyMmJ5dGVBcnJheTpJdCxoZXh0b1N0cmluZzpYaCxpc0hleENoYXI6dmQsaXNOdW1iZXI6bmcsc3RyVG9EYXRlOlZ4LHN0cmluZ1RvQnl0ZXM6anh9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksR3U9IjEyMzQ1Njc4OUFCQ0RFRkdISktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXoiLEh1PXt9O2ZvcihsZXQgbj0wO248R3UubGVuZ3RoO24rKylIdVtHdS5jaGFyQXQobildPW47Y29uc3QgeGE9NTg7ZnVuY3Rpb24gb2cobil7aWYobi5sZW5ndGg9PT0wKXJldHVybiIiO2xldCBlLHQ7Y29uc3QgYT1bMF07Zm9yKGU9MDtlPG4ubGVuZ3RoO2UrKyl7Zm9yKHQ9MDt0PGEubGVuZ3RoO3QrKylhW3RdPDw9ODthWzBdKz1uW2VdO2xldCBzPTA7Zm9yKHQ9MDt0PGEubGVuZ3RoOysrdClhW3RdKz1zLHM9YVt0XS94YXwwLGFbdF0lPXhhO2Zvcig7czspYS5wdXNoKHMleGEpLHM9cy94YXwwfWZvcihlPTA7bltlXT09PTAmJmU8bi5sZW5ndGgtMTtlKyspYS5wdXNoKDApO3JldHVybiBhLnJldmVyc2UoKS5tYXAocz0+R3Vbc10pLmpvaW4oIiIpfWZ1bmN0aW9uIG1jKG4pe2lmKG4ubGVuZ3RoPT09MClyZXR1cm5bXTtsZXQgZSx0O2NvbnN0IGE9WzBdO2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspe2NvbnN0IHM9bltlXTtpZighKHMgaW4gSHUpKXRocm93IG5ldyBFcnJvcigiTm9uLWJhc2U1OCBjaGFyYWN0ZXIiKTtmb3IodD0wO3Q8YS5sZW5ndGg7dCsrKWFbdF0qPXhhO2FbMF0rPUh1W3NdO2xldCByPTA7Zm9yKHQ9MDt0PGEubGVuZ3RoOysrdClhW3RdKz1yLHI9YVt0XT4+OCxhW3RdJj0yNTU7Zm9yKDtyOylhLnB1c2gociYyNTUpLHI+Pj04fWZvcihlPTA7bltlXT09PSIxIiYmZTxuLmxlbmd0aC0xO2UrKylhLnB1c2goMCk7cmV0dXJuIGEucmV2ZXJzZSgpfWNvbnN0IEt4PU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkZWNvZGU1ODptYyxlbmNvZGU1ODpvZ30sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxzZz0iNi4xMy41IjtmdW5jdGlvbiBaeChuLGUsdCl7Y29uc3QgYT1lLnNwbGl0KCJ8IikubWFwKHI9PnIudHJpbSgpKTtmb3IobGV0IHI9MDtyPGEubGVuZ3RoO3IrKylzd2l0Y2goZSl7Y2FzZSJhbnkiOnJldHVybjtjYXNlImJpZ2ludCI6Y2FzZSJib29sZWFuIjpjYXNlIm51bWJlciI6Y2FzZSJzdHJpbmciOmlmKHR5cGVvZiBuPT09ZSlyZXR1cm59Y29uc3Qgcz1uZXcgRXJyb3IoYGludmFsaWQgdmFsdWUgZm9yIHR5cGUgJHtlfWApO3Rocm93IHMuY29kZT0iSU5WQUxJRF9BUkdVTUVOVCIscy5hcmd1bWVudD1gdmFsdWUuJHt0fWAscy52YWx1ZT1uLHN9YXN5bmMgZnVuY3Rpb24gQ2Qobil7Y29uc3QgZT1PYmplY3Qua2V5cyhuKTtyZXR1cm4oYXdhaXQgUHJvbWlzZS5hbGwoZS5tYXAoYT0+UHJvbWlzZS5yZXNvbHZlKG5bYV0pKSkpLnJlZHVjZSgoYSxzLHIpPT4oYVtlW3JdXT1zLGEpLHt9KX1mdW5jdGlvbiB6ZShuLGUsdCl7Zm9yKGxldCBhIGluIGUpe2xldCBzPWVbYV07Y29uc3Qgcj10P3RbYV06bnVsbDtyJiZaeChzLHIsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sYSx7ZW51bWVyYWJsZTohMCx2YWx1ZTpzLHdyaXRhYmxlOiExfSl9fWZ1bmN0aW9uIG5zKG4pe2lmKG49PW51bGwpcmV0dXJuIm51bGwiO2lmKEFycmF5LmlzQXJyYXkobikpcmV0dXJuIlsgIituLm1hcChucykuam9pbigiLCAiKSsiIF0iO2lmKG4gaW5zdGFuY2VvZiBVaW50OEFycmF5KXtjb25zdCBlPSIwMTIzNDU2Nzg5YWJjZGVmIjtsZXQgdD0iMHgiO2ZvcihsZXQgYT0wO2E8bi5sZW5ndGg7YSsrKXQrPWVbblthXT4+NF0sdCs9ZVtuW2FdJjE1XTtyZXR1cm4gdH1pZih0eXBlb2Ygbj09Im9iamVjdCImJnR5cGVvZiBuLnRvSlNPTj09ImZ1bmN0aW9uIilyZXR1cm4gbnMobi50b0pTT04oKSk7c3dpdGNoKHR5cGVvZiBuKXtjYXNlImJvb2xlYW4iOmNhc2Uic3ltYm9sIjpyZXR1cm4gbi50b1N0cmluZygpO2Nhc2UiYmlnaW50IjpyZXR1cm4gQmlnSW50KG4pLnRvU3RyaW5nKCk7Y2FzZSJudW1iZXIiOnJldHVybiBuLnRvU3RyaW5nKCk7Y2FzZSJzdHJpbmciOnJldHVybiBKU09OLnN0cmluZ2lmeShuKTtjYXNlIm9iamVjdCI6e2NvbnN0IGU9T2JqZWN0LmtleXMobik7cmV0dXJuIGUuc29ydCgpLCJ7ICIrZS5tYXAodD0+YCR7bnModCl9OiAke25zKG5bdF0pfWApLmpvaW4oIiwgIikrIiB9In19cmV0dXJuIlsgQ09VTEQgTk9UIFNFUklBTElaRSBdIn1mdW5jdGlvbiBTMChuLGUpe3JldHVybiBuJiZuLmNvZGU9PT1lfWZ1bmN0aW9uIGFnKG4sZSx0KXtsZXQgYT1uO3tjb25zdCByPVtdO2lmKHQpe2lmKCJtZXNzYWdlImluIHR8fCJjb2RlImluIHR8fCJuYW1lImluIHQpdGhyb3cgbmV3IEVycm9yKGB2YWx1ZSB3aWxsIG92ZXJ3cml0ZSBwb3B1bGF0ZWQgdmFsdWVzOiAke25zKHQpfWApO2Zvcihjb25zdCBvIGluIHQpe2lmKG89PT0ic2hvcnRNZXNzYWdlIiljb250aW51ZTtjb25zdCBpPXRbb107ci5wdXNoKG8rIj0iK25zKGkpKX19ci5wdXNoKGBjb2RlPSR7ZX1gKSxyLnB1c2goYHZlcnNpb249JHtzZ31gKSxyLmxlbmd0aCYmKG4rPSIgKCIrci5qb2luKCIsICIpKyIpIil9bGV0IHM7c3dpdGNoKGUpe2Nhc2UiSU5WQUxJRF9BUkdVTUVOVCI6cz1uZXcgVHlwZUVycm9yKG4pO2JyZWFrO2Nhc2UiTlVNRVJJQ19GQVVMVCI6Y2FzZSJCVUZGRVJfT1ZFUlJVTiI6cz1uZXcgUmFuZ2VFcnJvcihuKTticmVhaztkZWZhdWx0OnM9bmV3IEVycm9yKG4pfXJldHVybiB6ZShzLHtjb2RlOmV9KSx0JiZPYmplY3QuYXNzaWduKHMsdCkscy5zaG9ydE1lc3NhZ2U9PW51bGwmJnplKHMse3Nob3J0TWVzc2FnZTphfSksc31mdW5jdGlvbiBSZShuLGUsdCxhKXtpZighbil0aHJvdyBhZyhlLHQsYSl9ZnVuY3Rpb24gRyhuLGUsdCxhKXtSZShuLGUsIklOVkFMSURfQVJHVU1FTlQiLHthcmd1bWVudDp0LHZhbHVlOmF9KX1mdW5jdGlvbiBpZyhuLGUsdCl7dD09bnVsbCYmKHQ9IiIpLHQmJih0PSI6ICIrdCksUmUobj49ZSwibWlzc2luZyBhcmd1bWVudCIrdCwiTUlTU0lOR19BUkdVTUVOVCIse2NvdW50Om4sZXhwZWN0ZWRDb3VudDplfSksUmUobjw9ZSwidG9vIG1hbnkgYXJndW1lbnRzIit0LCJVTkVYUEVDVEVEX0FSR1VNRU5UIix7Y291bnQ6bixleHBlY3RlZENvdW50OmV9KX1jb25zdCBxeD1bIk5GRCIsIk5GQyIsIk5GS0QiLCJORktDIl0ucmVkdWNlKChuLGUpPT57dHJ5e2lmKCJ0ZXN0Ii5ub3JtYWxpemUoZSkhPT0idGVzdCIpdGhyb3cgbmV3IEVycm9yKCJiYWQiKTtpZihlPT09Ik5GRCImJiLDqSIubm9ybWFsaXplKCJORkQiKSE9PSJlzIEiKXRocm93IG5ldyBFcnJvcigiYnJva2VuIik7bi5wdXNoKGUpfWNhdGNoe31yZXR1cm4gbn0sW10pO2Z1bmN0aW9uIGNnKG4pe1JlKHF4LmluZGV4T2Yobik+PTAsInBsYXRmb3JtIG1pc3NpbmcgU3RyaW5nLnByb3RvdHlwZS5ub3JtYWxpemUiLCJVTlNVUFBPUlRFRF9PUEVSQVRJT04iLHtvcGVyYXRpb246IlN0cmluZy5wcm90b3R5cGUubm9ybWFsaXplIixpbmZvOntmb3JtOm59fSl9ZnVuY3Rpb24gdG8obixlLHQpe2lmKHQ9PW51bGwmJih0PSIiKSxuIT09ZSl7bGV0IGE9dCxzPSJuZXciO3QmJihhKz0iLiIscys9IiAiK3QpLFJlKCExLGBwcml2YXRlIGNvbnN0cnVjdG9yOyB1c2UgJHthfWZyb20qIG1ldGhvZHNgLCJVTlNVUFBPUlRFRF9PUEVSQVRJT04iLHtvcGVyYXRpb246c30pfX1mdW5jdGlvbiB1ZyhuLGUsdCl7aWYobiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuIHQ/bmV3IFVpbnQ4QXJyYXkobik6bjtpZih0eXBlb2Ygbj09InN0cmluZyImJm4ubWF0Y2goL14weCg/OlswLTlhLWZdWzAtOWEtZl0pKiQvaSkpe2NvbnN0IGE9bmV3IFVpbnQ4QXJyYXkoKG4ubGVuZ3RoLTIpLzIpO2xldCBzPTI7Zm9yKGxldCByPTA7cjxhLmxlbmd0aDtyKyspYVtyXT1wYXJzZUludChuLnN1YnN0cmluZyhzLHMrMiksMTYpLHMrPTI7cmV0dXJuIGF9RyghMSwiaW52YWxpZCBCeXRlc0xpa2UgdmFsdWUiLGV8fCJ2YWx1ZSIsbil9ZnVuY3Rpb24gQWUobixlKXtyZXR1cm4gdWcobixlLCExKX1mdW5jdGlvbiBGdChuLGUpe3JldHVybiB1ZyhuLGUsITApfWZ1bmN0aW9uIE50KG4sZSl7cmV0dXJuISh0eXBlb2YgbiE9InN0cmluZyJ8fCFuLm1hdGNoKC9eMHhbMC05QS1GYS1mXSokLyl8fHR5cGVvZiBlPT0ibnVtYmVyIiYmbi5sZW5ndGghPT0yKzIqZXx8ZT09PSEwJiZuLmxlbmd0aCUyIT09MCl9ZnVuY3Rpb24gUGMobil7cmV0dXJuIE50KG4sITApfHxuIGluc3RhbmNlb2YgVWludDhBcnJheX1jb25zdCBfMD0iMDEyMzQ1Njc4OWFiY2RlZiI7ZnVuY3Rpb24geWUobil7Y29uc3QgZT1BZShuKTtsZXQgdD0iMHgiO2ZvcihsZXQgYT0wO2E8ZS5sZW5ndGg7YSsrKXtjb25zdCBzPWVbYV07dCs9XzBbKHMmMjQwKT4+NF0rXzBbcyYxNV19cmV0dXJuIHR9ZnVuY3Rpb24gZXQobil7cmV0dXJuIjB4IituLm1hcChlPT55ZShlKS5zdWJzdHJpbmcoMikpLmpvaW4oIiIpfWZ1bmN0aW9uIG1hKG4pe3JldHVybiBOdChuLCEwKT8obi5sZW5ndGgtMikvMjpBZShuKS5sZW5ndGh9ZnVuY3Rpb24gQW4obixlLHQpe2NvbnN0IGE9QWUobik7cmV0dXJuIHQhPW51bGwmJnQ+YS5sZW5ndGgmJlJlKCExLCJjYW5ub3Qgc2xpY2UgYmV5b25kIGRhdGEgYm91bmRzIiwiQlVGRkVSX09WRVJSVU4iLHtidWZmZXI6YSxsZW5ndGg6YS5sZW5ndGgsb2Zmc2V0OnR9KSx5ZShhLnNsaWNlKGU/PzAsdD8/YS5sZW5ndGgpKX1mdW5jdGlvbiBKeChuLGUsdCl7Y29uc3QgYT1BZShuKTtSZShlPj1hLmxlbmd0aCwicGFkZGluZyBleGNlZWRzIGRhdGEgbGVuZ3RoIiwiQlVGRkVSX09WRVJSVU4iLHtidWZmZXI6bmV3IFVpbnQ4QXJyYXkoYSksbGVuZ3RoOmUsb2Zmc2V0OmUrMX0pO2NvbnN0IHM9bmV3IFVpbnQ4QXJyYXkoZSk7cmV0dXJuIHMuZmlsbCgwKSxzLnNldChhLGUtYS5sZW5ndGgpLHllKHMpfWZ1bmN0aW9uIEpuKG4sZSl7cmV0dXJuIEp4KG4sZSl9Y29uc3Qgd2M9QmlnSW50KDApLEdyPUJpZ0ludCgxKSxvcz05MDA3MTk5MjU0NzQwOTkxO2Z1bmN0aW9uIFl4KG4sZSl7Y29uc3QgdD12YyhuLCJ2YWx1ZSIpLGE9QmlnSW50KEJ0KGUsIndpZHRoIikpO2lmKFJlKHQ+PmE9PT13Yywib3ZlcmZsb3ciLCJOVU1FUklDX0ZBVUxUIix7b3BlcmF0aW9uOiJmcm9tVHdvcyIsZmF1bHQ6Im92ZXJmbG93Iix2YWx1ZTpufSksdD4+YS1Hcil7Y29uc3Qgcz0oR3I8PGEpLUdyO3JldHVybi0oKH50JnMpK0dyKX1yZXR1cm4gdH1mdW5jdGlvbiBFZChuLGUpe2xldCB0PXR0KG4sInZhbHVlIik7Y29uc3QgYT1CaWdJbnQoQnQoZSwid2lkdGgiKSkscz1Hcjw8YS1HcjtpZih0PHdjKXt0PS10LFJlKHQ8PXMsInRvbyBsb3ciLCJOVU1FUklDX0ZBVUxUIix7b3BlcmF0aW9uOiJ0b1R3b3MiLGZhdWx0OiJvdmVyZmxvdyIsdmFsdWU6bn0pO2NvbnN0IHI9KEdyPDxhKS1HcjtyZXR1cm4ofnQmcikrR3J9ZWxzZSBSZSh0PHMsInRvbyBoaWdoIiwiTlVNRVJJQ19GQVVMVCIse29wZXJhdGlvbjoidG9Ud29zIixmYXVsdDoib3ZlcmZsb3ciLHZhbHVlOm59KTtyZXR1cm4gdH1mdW5jdGlvbiBzcyhuLGUpe2NvbnN0IHQ9dmMobiwidmFsdWUiKSxhPUJpZ0ludChCdChlLCJiaXRzIikpO3JldHVybiB0JihHcjw8YSktR3J9ZnVuY3Rpb24gdHQobixlKXtzd2l0Y2godHlwZW9mIG4pe2Nhc2UiYmlnaW50IjpyZXR1cm4gbjtjYXNlIm51bWJlciI6cmV0dXJuIEcoTnVtYmVyLmlzSW50ZWdlcihuKSwidW5kZXJmbG93IixlfHwidmFsdWUiLG4pLEcobj49LW9zJiZuPD1vcywib3ZlcmZsb3ciLGV8fCJ2YWx1ZSIsbiksQmlnSW50KG4pO2Nhc2Uic3RyaW5nIjp0cnl7aWYobj09PSIiKXRocm93IG5ldyBFcnJvcigiZW1wdHkgc3RyaW5nIik7cmV0dXJuIG5bMF09PT0iLSImJm5bMV0hPT0iLSI/LUJpZ0ludChuLnN1YnN0cmluZygxKSk6QmlnSW50KG4pfWNhdGNoKHQpe0coITEsYGludmFsaWQgQmlnTnVtYmVyaXNoIHN0cmluZzogJHt0Lm1lc3NhZ2V9YCxlfHwidmFsdWUiLG4pfX1HKCExLCJpbnZhbGlkIEJpZ051bWJlcmlzaCB2YWx1ZSIsZXx8InZhbHVlIixuKX1mdW5jdGlvbiB2YyhuLGUpe2NvbnN0IHQ9dHQobixlKTtyZXR1cm4gUmUodD49d2MsInVuc2lnbmVkIHZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZSIsIk5VTUVSSUNfRkFVTFQiLHtmYXVsdDoib3ZlcmZsb3ciLG9wZXJhdGlvbjoiZ2V0VWludCIsdmFsdWU6bn0pLHR9Y29uc3QgTzA9IjAxMjM0NTY3ODlhYmNkZWYiO2Z1bmN0aW9uIENjKG4pe2lmKG4gaW5zdGFuY2VvZiBVaW50OEFycmF5KXtsZXQgZT0iMHgwIjtmb3IoY29uc3QgdCBvZiBuKWUrPU8wW3Q+PjRdLGUrPU8wW3QmMTVdO3JldHVybiBCaWdJbnQoZSl9cmV0dXJuIHR0KG4pfWZ1bmN0aW9uIEJ0KG4sZSl7c3dpdGNoKHR5cGVvZiBuKXtjYXNlImJpZ2ludCI6cmV0dXJuIEcobj49LW9zJiZuPD1vcywib3ZlcmZsb3ciLGV8fCJ2YWx1ZSIsbiksTnVtYmVyKG4pO2Nhc2UibnVtYmVyIjpyZXR1cm4gRyhOdW1iZXIuaXNJbnRlZ2VyKG4pLCJ1bmRlcmZsb3ciLGV8fCJ2YWx1ZSIsbiksRyhuPj0tb3MmJm48PW9zLCJvdmVyZmxvdyIsZXx8InZhbHVlIixuKSxuO2Nhc2Uic3RyaW5nIjp0cnl7aWYobj09PSIiKXRocm93IG5ldyBFcnJvcigiZW1wdHkgc3RyaW5nIik7cmV0dXJuIEJ0KEJpZ0ludChuKSxlKX1jYXRjaCh0KXtHKCExLGBpbnZhbGlkIG51bWVyaWMgc3RyaW5nOiAke3QubWVzc2FnZX1gLGV8fCJ2YWx1ZSIsbil9fUcoITEsImludmFsaWQgbnVtZXJpYyB2YWx1ZSIsZXx8InZhbHVlIixuKX1mdW5jdGlvbiBYeChuKXtyZXR1cm4gQnQoQ2MobikpfWZ1bmN0aW9uIEtyKG4sZSl7bGV0IGE9dmMobiwidmFsdWUiKS50b1N0cmluZygxNik7aWYoZT09bnVsbClhLmxlbmd0aCUyJiYoYT0iMCIrYSk7ZWxzZXtjb25zdCBzPUJ0KGUsIndpZHRoIik7Zm9yKFJlKHMqMj49YS5sZW5ndGgsYHZhbHVlIGV4Y2VlZHMgd2lkdGggKCR7c30gYnl0ZXMpYCwiTlVNRVJJQ19GQVVMVCIse29wZXJhdGlvbjoidG9CZUhleCIsZmF1bHQ6Im92ZXJmbG93Iix2YWx1ZTpufSk7YS5sZW5ndGg8cyoyOylhPSIwIithfXJldHVybiIweCIrYX1mdW5jdGlvbiBWdChuKXtjb25zdCBlPXZjKG4sInZhbHVlIik7aWYoZT09PXdjKXJldHVybiBuZXcgVWludDhBcnJheShbXSk7bGV0IHQ9ZS50b1N0cmluZygxNik7dC5sZW5ndGglMiYmKHQ9IjAiK3QpO2NvbnN0IGE9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgvMik7Zm9yKGxldCBzPTA7czxhLmxlbmd0aDtzKyspe2NvbnN0IHI9cyoyO2Fbc109cGFyc2VJbnQodC5zdWJzdHJpbmcocixyKzIpLDE2KX1yZXR1cm4gYX1mdW5jdGlvbiBsZyhuKXtsZXQgZT15ZShQYyhuKT9uOlZ0KG4pKS5zdWJzdHJpbmcoMik7Zm9yKDtlLnN0YXJ0c1dpdGgoIjAiKTspZT1lLnN1YnN0cmluZygxKTtyZXR1cm4gZT09PSIiJiYoZT0iMCIpLCIweCIrZX1jb25zdCBhYz0iMTIzNDU2Nzg5QUJDREVGR0hKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamttbm9wcXJzdHV2d3h5eiI7bGV0IHdpPW51bGw7ZnVuY3Rpb24gUXgobil7aWYod2k9PW51bGwpe3dpPXt9O2ZvcihsZXQgdD0wO3Q8YWMubGVuZ3RoO3QrKyl3aVthY1t0XV09QmlnSW50KHQpfWNvbnN0IGU9d2lbbl07cmV0dXJuIEcoZSE9bnVsbCwiaW52YWxpZCBiYXNlNTggdmFsdWUiLCJsZXR0ZXIiLG4pLGV9Y29uc3QgZTE9QmlnSW50KDApLEt1PUJpZ0ludCg1OCk7ZnVuY3Rpb24gdDEobil7Y29uc3QgZT1BZShuKTtsZXQgdD1DYyhlKSxhPSIiO2Zvcig7dDspYT1hY1tOdW1iZXIodCVLdSldK2EsdC89S3U7Zm9yKGxldCBzPTA7czxlLmxlbmd0aCYmIWVbc107cysrKWE9YWNbMF0rYTtyZXR1cm4gYX1mdW5jdGlvbiByMShuKXtsZXQgZT1lMTtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyllKj1LdSxlKz1ReChuW3RdKTtyZXR1cm4gZX1mdW5jdGlvbiBuMShuLGUsdCxhLHMpe0coITEsYGludmFsaWQgY29kZXBvaW50IGF0IG9mZnNldCAke2V9OyAke259YCwiYnl0ZXMiLHQpfWZ1bmN0aW9uIGZnKG4sZSx0LGEscyl7aWYobj09PSJCQURfUFJFRklYInx8bj09PSJVTkVYUEVDVEVEX0NPTlRJTlVFIil7bGV0IHI9MDtmb3IobGV0IG89ZSsxO288dC5sZW5ndGgmJnRbb10+PjY9PT0yO28rKylyKys7cmV0dXJuIHJ9cmV0dXJuIG49PT0iT1ZFUlJVTiI/dC5sZW5ndGgtZS0xOjB9ZnVuY3Rpb24gbzEobixlLHQsYSxzKXtyZXR1cm4gbj09PSJPVkVSTE9ORyI/KEcodHlwZW9mIHM9PSJudW1iZXIiLCJpbnZhbGlkIGJhZCBjb2RlIHBvaW50IGZvciByZXBsYWNlbWVudCIsImJhZENvZGVwb2ludCIscyksYS5wdXNoKHMpLDApOihhLnB1c2goNjU1MzMpLGZnKG4sZSx0KSl9Y29uc3QgczE9T2JqZWN0LmZyZWV6ZSh7ZXJyb3I6bjEsaWdub3JlOmZnLHJlcGxhY2U6bzF9KTtmdW5jdGlvbiBhMShuLGUpe2U9PW51bGwmJihlPXMxLmVycm9yKTtjb25zdCB0PUFlKG4sImJ5dGVzIiksYT1bXTtsZXQgcz0wO2Zvcig7czx0Lmxlbmd0aDspe2NvbnN0IHI9dFtzKytdO2lmKCEocj4+Nykpe2EucHVzaChyKTtjb250aW51ZX1sZXQgbz1udWxsLGk9bnVsbDtpZigociYyMjQpPT09MTkyKW89MSxpPTEyNztlbHNlIGlmKChyJjI0MCk9PT0yMjQpbz0yLGk9MjA0NztlbHNlIGlmKChyJjI0OCk9PT0yNDApbz0zLGk9NjU1MzU7ZWxzZXsociYxOTIpPT09MTI4P3MrPWUoIlVORVhQRUNURURfQ09OVElOVUUiLHMtMSx0LGEpOnMrPWUoIkJBRF9QUkVGSVgiLHMtMSx0LGEpO2NvbnRpbnVlfWlmKHMtMStvPj10Lmxlbmd0aCl7cys9ZSgiT1ZFUlJVTiIscy0xLHQsYSk7Y29udGludWV9bGV0IGM9ciYoMTw8OC1vLTEpLTE7Zm9yKGxldCBmPTA7ZjxvO2YrKyl7bGV0IGQ9dFtzXTtpZigoZCYxOTIpIT0xMjgpe3MrPWUoIk1JU1NJTkdfQ09OVElOVUUiLHMsdCxhKSxjPW51bGw7YnJlYWt9Yz1jPDw2fGQmNjMscysrfWlmKGMhPT1udWxsKXtpZihjPjExMTQxMTEpe3MrPWUoIk9VVF9PRl9SQU5HRSIscy0xLW8sdCxhLGMpO2NvbnRpbnVlfWlmKGM+PTU1Mjk2JiZjPD01NzM0Myl7cys9ZSgiVVRGMTZfU1VSUk9HQVRFIixzLTEtbyx0LGEsYyk7Y29udGludWV9aWYoYzw9aSl7cys9ZSgiT1ZFUkxPTkciLHMtMS1vLHQsYSxjKTtjb250aW51ZX1hLnB1c2goYyl9fXJldHVybiBhfWZ1bmN0aW9uIHJyKG4sZSl7Ryh0eXBlb2Ygbj09InN0cmluZyIsImludmFsaWQgc3RyaW5nIHZhbHVlIiwic3RyIixuKSxlIT1udWxsJiYoY2coZSksbj1uLm5vcm1hbGl6ZShlKSk7bGV0IHQ9W107Zm9yKGxldCBhPTA7YTxuLmxlbmd0aDthKyspe2NvbnN0IHM9bi5jaGFyQ29kZUF0KGEpO2lmKHM8MTI4KXQucHVzaChzKTtlbHNlIGlmKHM8MjA0OCl0LnB1c2gocz4+NnwxOTIpLHQucHVzaChzJjYzfDEyOCk7ZWxzZSBpZigocyY2NDUxMik9PTU1Mjk2KXthKys7Y29uc3Qgcj1uLmNoYXJDb2RlQXQoYSk7RyhhPG4ubGVuZ3RoJiYociY2NDUxMik9PT01NjMyMCwiaW52YWxpZCBzdXJyb2dhdGUgcGFpciIsInN0ciIsbik7Y29uc3Qgbz02NTUzNisoKHMmMTAyMyk8PDEwKSsociYxMDIzKTt0LnB1c2gobz4+MTh8MjQwKSx0LnB1c2gobz4+MTImNjN8MTI4KSx0LnB1c2gobz4+NiY2M3wxMjgpLHQucHVzaChvJjYzfDEyOCl9ZWxzZSB0LnB1c2gocz4+MTJ8MjI0KSx0LnB1c2gocz4+NiY2M3wxMjgpLHQucHVzaChzJjYzfDEyOCl9cmV0dXJuIG5ldyBVaW50OEFycmF5KHQpfWZ1bmN0aW9uIGkxKG4pe3JldHVybiBuLm1hcChlPT5lPD02NTUzNT9TdHJpbmcuZnJvbUNoYXJDb2RlKGUpOihlLT02NTUzNixTdHJpbmcuZnJvbUNoYXJDb2RlKChlPj4xMCYxMDIzKSs1NTI5NiwoZSYxMDIzKSs1NjMyMCkpKS5qb2luKCIiKX1mdW5jdGlvbiBkZyhuLGUpe3JldHVybiBpMShhMShuLGUpKX1mdW5jdGlvbiBjMShuKXtsZXQgZT1uLnRvU3RyaW5nKDE2KTtmb3IoO2UubGVuZ3RoPDI7KWU9IjAiK2U7cmV0dXJuIjB4IitlfWZ1bmN0aW9uIFIwKG4sZSx0KXtsZXQgYT0wO2ZvcihsZXQgcz0wO3M8dDtzKyspYT1hKjI1NituW2Urc107cmV0dXJuIGF9ZnVuY3Rpb24gTTAobixlLHQsYSl7Y29uc3Qgcz1bXTtmb3IoO3Q8ZSsxK2E7KXtjb25zdCByPXBnKG4sdCk7cy5wdXNoKHIucmVzdWx0KSx0Kz1yLmNvbnN1bWVkLFJlKHQ8PWUrMSthLCJjaGlsZCBkYXRhIHRvbyBzaG9ydCIsIkJVRkZFUl9PVkVSUlVOIix7YnVmZmVyOm4sbGVuZ3RoOmEsb2Zmc2V0OmV9KX1yZXR1cm57Y29uc3VtZWQ6MSthLHJlc3VsdDpzfX1mdW5jdGlvbiBwZyhuLGUpe1JlKG4ubGVuZ3RoIT09MCwiZGF0YSB0b28gc2hvcnQiLCJCVUZGRVJfT1ZFUlJVTiIse2J1ZmZlcjpuLGxlbmd0aDowLG9mZnNldDoxfSk7Y29uc3QgdD1hPT57UmUoYTw9bi5sZW5ndGgsImRhdGEgc2hvcnQgc2VnbWVudCB0b28gc2hvcnQiLCJCVUZGRVJfT1ZFUlJVTiIse2J1ZmZlcjpuLGxlbmd0aDpuLmxlbmd0aCxvZmZzZXQ6YX0pfTtpZihuW2VdPj0yNDgpe2NvbnN0IGE9bltlXS0yNDc7dChlKzErYSk7Y29uc3Qgcz1SMChuLGUrMSxhKTtyZXR1cm4gdChlKzErYStzKSxNMChuLGUsZSsxK2EsYStzKX1lbHNlIGlmKG5bZV0+PTE5Mil7Y29uc3QgYT1uW2VdLTE5MjtyZXR1cm4gdChlKzErYSksTTAobixlLGUrMSxhKX1lbHNlIGlmKG5bZV0+PTE4NCl7Y29uc3QgYT1uW2VdLTE4Mzt0KGUrMSthKTtjb25zdCBzPVIwKG4sZSsxLGEpO3QoZSsxK2Ercyk7Y29uc3Qgcj15ZShuLnNsaWNlKGUrMSthLGUrMSthK3MpKTtyZXR1cm57Y29uc3VtZWQ6MSthK3MscmVzdWx0OnJ9fWVsc2UgaWYobltlXT49MTI4KXtjb25zdCBhPW5bZV0tMTI4O3QoZSsxK2EpO2NvbnN0IHM9eWUobi5zbGljZShlKzEsZSsxK2EpKTtyZXR1cm57Y29uc3VtZWQ6MSthLHJlc3VsdDpzfX1yZXR1cm57Y29uc3VtZWQ6MSxyZXN1bHQ6YzEobltlXSl9fWZ1bmN0aW9uIEVjKG4pe2NvbnN0IGU9QWUobiwiZGF0YSIpLHQ9cGcoZSwwKTtyZXR1cm4gRyh0LmNvbnN1bWVkPT09ZS5sZW5ndGgsInVuZXhwZWN0ZWQganVuayBhZnRlciBybHAgcGF5bG9hZCIsImRhdGEiLG4pLHQucmVzdWx0fWZ1bmN0aW9uIEYwKG4pe2NvbnN0IGU9W107Zm9yKDtuOyllLnVuc2hpZnQobiYyNTUpLG4+Pj04O3JldHVybiBlfWZ1bmN0aW9uIGhnKG4pe2lmKEFycmF5LmlzQXJyYXkobikpe2xldCBhPVtdO2lmKG4uZm9yRWFjaChmdW5jdGlvbihyKXthPWEuY29uY2F0KGhnKHIpKX0pLGEubGVuZ3RoPD01NSlyZXR1cm4gYS51bnNoaWZ0KDE5MithLmxlbmd0aCksYTtjb25zdCBzPUYwKGEubGVuZ3RoKTtyZXR1cm4gcy51bnNoaWZ0KDI0NytzLmxlbmd0aCkscy5jb25jYXQoYSl9Y29uc3QgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChBZShuLCJvYmplY3QiKSk7aWYoZS5sZW5ndGg9PT0xJiZlWzBdPD0xMjcpcmV0dXJuIGU7aWYoZS5sZW5ndGg8PTU1KXJldHVybiBlLnVuc2hpZnQoMTI4K2UubGVuZ3RoKSxlO2NvbnN0IHQ9RjAoZS5sZW5ndGgpO3JldHVybiB0LnVuc2hpZnQoMTgzK3QubGVuZ3RoKSx0LmNvbmNhdChlKX1jb25zdCBOMD0iMDEyMzQ1Njc4OWFiY2RlZiI7ZnVuY3Rpb24gTXMobil7bGV0IGU9IjB4Ijtmb3IoY29uc3QgdCBvZiBoZyhuKSllKz1OMFt0Pj40XSxlKz1OMFt0JjE1XTtyZXR1cm4gZX1mdW5jdGlvbiB1MShuKXtjb25zdCBlPUFlKG4sInJhbmRvbUJ5dGVzIik7ZVs2XT1lWzZdJjE1fDY0LGVbOF09ZVs4XSY2M3wxMjg7Y29uc3QgdD15ZShlKTtyZXR1cm5bdC5zdWJzdHJpbmcoMiwxMCksdC5zdWJzdHJpbmcoMTAsMTQpLHQuc3Vic3RyaW5nKDE0LDE4KSx0LnN1YnN0cmluZygxOCwyMiksdC5zdWJzdHJpbmcoMjIsMzQpXS5qb2luKCItIil9Y29uc3QgR3Q9MzIsWnU9bmV3IFVpbnQ4QXJyYXkoR3QpLGwxPVsidGhlbiJdLHZpPXt9LGdnPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHBvKG4pe3JldHVybiBnZy5nZXQobil9ZnVuY3Rpb24gazAobixlKXtnZy5zZXQobixlKX1mdW5jdGlvbiBwYShuLGUpe2NvbnN0IHQ9bmV3IEVycm9yKGBkZWZlcnJlZCBlcnJvciBkdXJpbmcgQUJJIGRlY29kaW5nIHRyaWdnZXJlZCBhY2Nlc3NpbmcgJHtufWApO3Rocm93IHQuZXJyb3I9ZSx0fWZ1bmN0aW9uIHF1KG4sZSx0KXtyZXR1cm4gbi5pbmRleE9mKG51bGwpPj0wP2UubWFwKChhLHMpPT5hIGluc3RhbmNlb2YgRnM/cXUocG8oYSksYSx0KTphKTpuLnJlZHVjZSgoYSxzLHIpPT57bGV0IG89ZS5nZXRWYWx1ZShzKTtyZXR1cm4gcyBpbiBhfHwodCYmbyBpbnN0YW5jZW9mIEZzJiYobz1xdShwbyhvKSxvLHQpKSxhW3NdPW8pLGF9LHt9KX12YXIgbHM7Y29uc3QgaXM9Y2xhc3MgaXMgZXh0ZW5kcyBBcnJheXtjb25zdHJ1Y3RvciguLi50KXtjb25zdCBhPXRbMF07bGV0IHM9dFsxXSxyPSh0WzJdfHxbXSkuc2xpY2UoKSxvPSEwO2EhPT12aSYmKHM9dCxyPVtdLG89ITEpO3N1cGVyKHMubGVuZ3RoKTtQZSh0aGlzLGxzKTtzLmZvckVhY2goKGYsZCk9Pnt0aGlzW2RdPWZ9KTtjb25zdCBpPXIucmVkdWNlKChmLGQpPT4odHlwZW9mIGQ9PSJzdHJpbmciJiZmLnNldChkLChmLmdldChkKXx8MCkrMSksZiksbmV3IE1hcCk7aWYoazAodGhpcyxPYmplY3QuZnJlZXplKHMubWFwKChmLGQpPT57Y29uc3QgcD1yW2RdO3JldHVybiBwIT1udWxsJiZpLmdldChwKT09PTE/cDpudWxsfSkpKSx1ZSh0aGlzLGxzLFtdKSxZKHRoaXMsbHMpPT1udWxsJiZZKHRoaXMsbHMpLCFvKXJldHVybjtPYmplY3QuZnJlZXplKHRoaXMpO2NvbnN0IGM9bmV3IFByb3h5KHRoaXMse2dldDooZixkLHApPT57aWYodHlwZW9mIGQ9PSJzdHJpbmciKXtpZihkLm1hdGNoKC9eWzAtOV0rJC8pKXtjb25zdCBUPUJ0KGQsIiVpbmRleCIpO2lmKFQ8MHx8VD49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByZXN1bHQgcmFuZ2UiKTtjb25zdCBXPWZbVF07cmV0dXJuIFcgaW5zdGFuY2VvZiBFcnJvciYmcGEoYGluZGV4ICR7VH1gLFcpLFd9aWYobDEuaW5kZXhPZihkKT49MClyZXR1cm4gUmVmbGVjdC5nZXQoZixkLHApO2NvbnN0IGI9ZltkXTtpZihiIGluc3RhbmNlb2YgRnVuY3Rpb24pcmV0dXJuIGZ1bmN0aW9uKC4uLlQpe3JldHVybiBiLmFwcGx5KHRoaXM9PT1wP2Y6dGhpcyxUKX07aWYoIShkIGluIGYpKXJldHVybiBmLmdldFZhbHVlLmFwcGx5KHRoaXM9PT1wP2Y6dGhpcyxbZF0pfXJldHVybiBSZWZsZWN0LmdldChmLGQscCl9fSk7cmV0dXJuIGswKGMscG8odGhpcykpLGN9dG9BcnJheSh0KXtjb25zdCBhPVtdO3JldHVybiB0aGlzLmZvckVhY2goKHMscik9PntzIGluc3RhbmNlb2YgRXJyb3ImJnBhKGBpbmRleCAke3J9YCxzKSx0JiZzIGluc3RhbmNlb2YgaXMmJihzPXMudG9BcnJheSh0KSksYS5wdXNoKHMpfSksYX10b09iamVjdCh0KXtjb25zdCBhPXBvKHRoaXMpO3JldHVybiBhLnJlZHVjZSgocyxyLG8pPT4oUmUociE9bnVsbCxgdmFsdWUgYXQgaW5kZXggJHtvfSB1bm5hbWVkYCwiVU5TVVBQT1JURURfT1BFUkFUSU9OIix7b3BlcmF0aW9uOiJ0b09iamVjdCgpIn0pLHF1KGEsdGhpcyx0KSkse30pfXNsaWNlKHQsYSl7dD09bnVsbCYmKHQ9MCksdDwwJiYodCs9dGhpcy5sZW5ndGgsdDwwJiYodD0wKSksYT09bnVsbCYmKGE9dGhpcy5sZW5ndGgpLGE8MCYmKGErPXRoaXMubGVuZ3RoLGE8MCYmKGE9MCkpLGE+dGhpcy5sZW5ndGgmJihhPXRoaXMubGVuZ3RoKTtjb25zdCBzPXBvKHRoaXMpLHI9W10sbz1bXTtmb3IobGV0IGk9dDtpPGE7aSsrKXIucHVzaCh0aGlzW2ldKSxvLnB1c2goc1tpXSk7cmV0dXJuIG5ldyBpcyh2aSxyLG8pfWZpbHRlcih0LGEpe2NvbnN0IHM9cG8odGhpcykscj1bXSxvPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXtjb25zdCBjPXRoaXNbaV07YyBpbnN0YW5jZW9mIEVycm9yJiZwYShgaW5kZXggJHtpfWAsYyksdC5jYWxsKGEsYyxpLHRoaXMpJiYoci5wdXNoKGMpLG8ucHVzaChzW2ldKSl9cmV0dXJuIG5ldyBpcyh2aSxyLG8pfW1hcCh0LGEpe2NvbnN0IHM9W107Zm9yKGxldCByPTA7cjx0aGlzLmxlbmd0aDtyKyspe2NvbnN0IG89dGhpc1tyXTtvIGluc3RhbmNlb2YgRXJyb3ImJnBhKGBpbmRleCAke3J9YCxvKSxzLnB1c2godC5jYWxsKGEsbyxyLHRoaXMpKX1yZXR1cm4gc31nZXRWYWx1ZSh0KXtjb25zdCBhPXBvKHRoaXMpLmluZGV4T2YodCk7aWYoYT09PS0xKXJldHVybjtjb25zdCBzPXRoaXNbYV07cmV0dXJuIHMgaW5zdGFuY2VvZiBFcnJvciYmcGEoYHByb3BlcnR5ICR7SlNPTi5zdHJpbmdpZnkodCl9YCxzLmVycm9yKSxzfXN0YXRpYyBmcm9tSXRlbXModCxhKXtyZXR1cm4gbmV3IGlzKHZpLHQsYSl9fTtscz1uZXcgV2Vha01hcDtsZXQgRnM9aXM7ZnVuY3Rpb24gVTAobil7bGV0IGU9VnQobik7cmV0dXJuIFJlKGUubGVuZ3RoPD1HdCwidmFsdWUgb3V0LW9mLWJvdW5kcyIsIkJVRkZFUl9PVkVSUlVOIix7YnVmZmVyOmUsbGVuZ3RoOkd0LG9mZnNldDplLmxlbmd0aH0pLGUubGVuZ3RoIT09R3QmJihlPUZ0KGV0KFtadS5zbGljZShlLmxlbmd0aCVHdCksZV0pKSksZX1jbGFzcyBSbntjb25zdHJ1Y3RvcihlLHQsYSxzKXtaKHRoaXMsIm5hbWUiKTtaKHRoaXMsInR5cGUiKTtaKHRoaXMsImxvY2FsTmFtZSIpO1oodGhpcywiZHluYW1pYyIpO3plKHRoaXMse25hbWU6ZSx0eXBlOnQsbG9jYWxOYW1lOmEsZHluYW1pYzpzfSx7bmFtZToic3RyaW5nIix0eXBlOiJzdHJpbmciLGxvY2FsTmFtZToic3RyaW5nIixkeW5hbWljOiJib29sZWFuIn0pfV90aHJvd0Vycm9yKGUsdCl7RyghMSxlLHRoaXMubG9jYWxOYW1lLHQpfX12YXIgUG4sQW8sZnMsVmk7Y2xhc3MgSnV7Y29uc3RydWN0b3IoKXtQZSh0aGlzLGZzKTtQZSh0aGlzLFBuKTtQZSh0aGlzLEFvKTt1ZSh0aGlzLFBuLFtdKSx1ZSh0aGlzLEFvLDApfWdldCBkYXRhKCl7cmV0dXJuIGV0KFkodGhpcyxQbikpfWdldCBsZW5ndGgoKXtyZXR1cm4gWSh0aGlzLEFvKX1hcHBlbmRXcml0ZXIoZSl7cmV0dXJuIEZlKHRoaXMsZnMsVmkpLmNhbGwodGhpcyxGdChlLmRhdGEpKX13cml0ZUJ5dGVzKGUpe2xldCB0PUZ0KGUpO2NvbnN0IGE9dC5sZW5ndGglR3Q7cmV0dXJuIGEmJih0PUZ0KGV0KFt0LFp1LnNsaWNlKGEpXSkpKSxGZSh0aGlzLGZzLFZpKS5jYWxsKHRoaXMsdCl9d3JpdGVWYWx1ZShlKXtyZXR1cm4gRmUodGhpcyxmcyxWaSkuY2FsbCh0aGlzLFUwKGUpKX13cml0ZVVwZGF0YWJsZVZhbHVlKCl7Y29uc3QgZT1ZKHRoaXMsUG4pLmxlbmd0aDtyZXR1cm4gWSh0aGlzLFBuKS5wdXNoKFp1KSx1ZSh0aGlzLEFvLFkodGhpcyxBbykrR3QpLHQ9PntZKHRoaXMsUG4pW2VdPVUwKHQpfX19UG49bmV3IFdlYWtNYXAsQW89bmV3IFdlYWtNYXAsZnM9bmV3IFdlYWtTZXQsVmk9ZnVuY3Rpb24oZSl7cmV0dXJuIFkodGhpcyxQbikucHVzaChlKSx1ZSh0aGlzLEFvLFkodGhpcyxBbykrZS5sZW5ndGgpLGUubGVuZ3RofTt2YXIgWHQsaHIsbW8sUG8sR24sTG8sWHUsYmc7Y29uc3QgQzA9Y2xhc3MgQzB7Y29uc3RydWN0b3IoZSx0LGEpe1BlKHRoaXMsTG8pO1oodGhpcywiYWxsb3dMb29zZSIpO1BlKHRoaXMsWHQpO1BlKHRoaXMsaHIpO1BlKHRoaXMsbW8pO1BlKHRoaXMsUG8pO1BlKHRoaXMsR24pO3plKHRoaXMse2FsbG93TG9vc2U6ISF0fSksdWUodGhpcyxYdCxGdChlKSksdWUodGhpcyxtbywwKSx1ZSh0aGlzLFBvLG51bGwpLHVlKHRoaXMsR24sYT8/MTAyNCksdWUodGhpcyxociwwKX1nZXQgZGF0YSgpe3JldHVybiB5ZShZKHRoaXMsWHQpKX1nZXQgZGF0YUxlbmd0aCgpe3JldHVybiBZKHRoaXMsWHQpLmxlbmd0aH1nZXQgY29uc3VtZWQoKXtyZXR1cm4gWSh0aGlzLGhyKX1nZXQgYnl0ZXMoKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWSh0aGlzLFh0KSl9c3ViUmVhZGVyKGUpe2NvbnN0IHQ9bmV3IEMwKFkodGhpcyxYdCkuc2xpY2UoWSh0aGlzLGhyKStlKSx0aGlzLmFsbG93TG9vc2UsWSh0aGlzLEduKSk7cmV0dXJuIHVlKHQsUG8sdGhpcyksdH1yZWFkQnl0ZXMoZSx0KXtsZXQgYT1GZSh0aGlzLExvLGJnKS5jYWxsKHRoaXMsMCxlLCEhdCk7cmV0dXJuIEZlKHRoaXMsTG8sWHUpLmNhbGwodGhpcyxlKSx1ZSh0aGlzLGhyLFkodGhpcyxocikrYS5sZW5ndGgpLGEuc2xpY2UoMCxlKX1yZWFkVmFsdWUoKXtyZXR1cm4gQ2ModGhpcy5yZWFkQnl0ZXMoR3QpKX1yZWFkSW5kZXgoKXtyZXR1cm4gWHgodGhpcy5yZWFkQnl0ZXMoR3QpKX19O1h0PW5ldyBXZWFrTWFwLGhyPW5ldyBXZWFrTWFwLG1vPW5ldyBXZWFrTWFwLFBvPW5ldyBXZWFrTWFwLEduPW5ldyBXZWFrTWFwLExvPW5ldyBXZWFrU2V0LFh1PWZ1bmN0aW9uKGUpe3ZhciB0O2lmKFkodGhpcyxQbykpcmV0dXJuIEZlKHQ9WSh0aGlzLFBvKSxMbyxYdSkuY2FsbCh0LGUpO3VlKHRoaXMsbW8sWSh0aGlzLG1vKStlKSxSZShZKHRoaXMsR24pPDF8fFkodGhpcyxtbyk8PVkodGhpcyxHbikqdGhpcy5kYXRhTGVuZ3RoLGBjb21wcmVzc2VkIEFCSSBkYXRhIGV4Y2VlZHMgaW5mbGF0aW9uIHJhdGlvIG9mICR7WSh0aGlzLEduKX0gKCBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ldGhlcnMtaW8vZXRoZXJzLmpzL2lzc3Vlcy80NTM3IClgLCJCVUZGRVJfT1ZFUlJVTiIse2J1ZmZlcjpGdChZKHRoaXMsWHQpKSxvZmZzZXQ6WSh0aGlzLGhyKSxsZW5ndGg6ZSxpbmZvOntieXRlc1JlYWQ6WSh0aGlzLG1vKSxkYXRhTGVuZ3RoOnRoaXMuZGF0YUxlbmd0aH19KX0sYmc9ZnVuY3Rpb24oZSx0LGEpe2xldCBzPU1hdGguY2VpbCh0L0d0KSpHdDtyZXR1cm4gWSh0aGlzLGhyKStzPlkodGhpcyxYdCkubGVuZ3RoJiYodGhpcy5hbGxvd0xvb3NlJiZhJiZZKHRoaXMsaHIpK3Q8PVkodGhpcyxYdCkubGVuZ3RoP3M9dDpSZSghMSwiZGF0YSBvdXQtb2YtYm91bmRzIiwiQlVGRkVSX09WRVJSVU4iLHtidWZmZXI6RnQoWSh0aGlzLFh0KSksbGVuZ3RoOlkodGhpcyxYdCkubGVuZ3RoLG9mZnNldDpZKHRoaXMsaHIpK3N9KSksWSh0aGlzLFh0KS5zbGljZShZKHRoaXMsaHIpLFkodGhpcyxocikrcyl9O2xldCBZdT1DMDtmdW5jdGlvbiBncihuKXtpZighTnVtYmVyLmlzU2FmZUludGVnZXIobil8fG48MCl0aHJvdyBuZXcgRXJyb3IoYFdyb25nIHBvc2l0aXZlIGludGVnZXI6ICR7bn1gKX1mdW5jdGlvbiBXZChuLC4uLmUpe2lmKCEobiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgVWludDhBcnJheSIpO2lmKGUubGVuZ3RoPjAmJiFlLmluY2x1ZGVzKG4ubGVuZ3RoKSl0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIFVpbnQ4QXJyYXkgb2YgbGVuZ3RoICR7ZX0sIG5vdCBvZiBsZW5ndGg9JHtuLmxlbmd0aH1gKX1mdW5jdGlvbiB5ZyhuKXtpZih0eXBlb2YgbiE9ImZ1bmN0aW9uInx8dHlwZW9mIG4uY3JlYXRlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiSGFzaCBzaG91bGQgYmUgd3JhcHBlZCBieSB1dGlscy53cmFwQ29uc3RydWN0b3IiKTtncihuLm91dHB1dExlbiksZ3Iobi5ibG9ja0xlbil9ZnVuY3Rpb24gTnMobixlPSEwKXtpZihuLmRlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIkhhc2ggaW5zdGFuY2UgaGFzIGJlZW4gZGVzdHJveWVkIik7aWYoZSYmbi5maW5pc2hlZCl0aHJvdyBuZXcgRXJyb3IoIkhhc2gjZGlnZXN0KCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQiKX1mdW5jdGlvbiB4ZyhuLGUpe1dkKG4pO2NvbnN0IHQ9ZS5vdXRwdXRMZW47aWYobi5sZW5ndGg8dCl0aHJvdyBuZXcgRXJyb3IoYGRpZ2VzdEludG8oKSBleHBlY3RzIG91dHB1dCBidWZmZXIgb2YgbGVuZ3RoIGF0IGxlYXN0ICR7dH1gKX1jb25zdCBYYz10eXBlb2YgZ2xvYmFsVGhpcz09Im9iamVjdCImJiJjcnlwdG8iaW4gZ2xvYmFsVGhpcz9nbG9iYWxUaGlzLmNyeXB0bzp2b2lkIDA7LyohIG5vYmxlLWhhc2hlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqL2NvbnN0IFRnPW49Pm4gaW5zdGFuY2VvZiBVaW50OEFycmF5LEdpPW49Pm5ldyBVaW50MzJBcnJheShuLmJ1ZmZlcixuLmJ5dGVPZmZzZXQsTWF0aC5mbG9vcihuLmJ5dGVMZW5ndGgvNCkpLEhpPW49Pm5ldyBEYXRhVmlldyhuLmJ1ZmZlcixuLmJ5dGVPZmZzZXQsbi5ieXRlTGVuZ3RoKSxlbj0obixlKT0+bjw8MzItZXxuPj4+ZSxmMT1uZXcgVWludDhBcnJheShuZXcgVWludDMyQXJyYXkoWzI4NzQ1NDAyMF0pLmJ1ZmZlcilbMF09PT02ODtpZighZjEpdGhyb3cgbmV3IEVycm9yKCJOb24gbGl0dGxlLWVuZGlhbiBoYXJkd2FyZSBpcyBub3Qgc3VwcG9ydGVkIik7Y29uc3QgZDE9YXN5bmMoKT0+e307YXN5bmMgZnVuY3Rpb24gRDAobixlLHQpe2xldCBhPURhdGUubm93KCk7Zm9yKGxldCBzPTA7czxuO3MrKyl7dChzKTtjb25zdCByPURhdGUubm93KCktYTtyPj0wJiZyPGV8fChhd2FpdCBkMSgpLGErPXIpfX1mdW5jdGlvbiBwMShuKXtpZih0eXBlb2YgbiE9InN0cmluZyIpdGhyb3cgbmV3IEVycm9yKGB1dGY4VG9CeXRlcyBleHBlY3RlZCBzdHJpbmcsIGdvdCAke3R5cGVvZiBufWApO3JldHVybiBuZXcgVWludDhBcnJheShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUobikpfWZ1bmN0aW9uIGtzKG4pe2lmKHR5cGVvZiBuPT0ic3RyaW5nIiYmKG49cDEobikpLCFUZyhuKSl0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkIFVpbnQ4QXJyYXksIGdvdCAke3R5cGVvZiBufWApO3JldHVybiBufWZ1bmN0aW9uIGgxKC4uLm4pe2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkobi5yZWR1Y2UoKGEscyk9PmErcy5sZW5ndGgsMCkpO2xldCB0PTA7cmV0dXJuIG4uZm9yRWFjaChhPT57aWYoIVRnKGEpKXRocm93IG5ldyBFcnJvcigiVWludDhBcnJheSBleHBlY3RlZCIpO2Uuc2V0KGEsdCksdCs9YS5sZW5ndGh9KSxlfWxldCBCZD1jbGFzc3tjbG9uZSgpe3JldHVybiB0aGlzLl9jbG9uZUludG8oKX19O2NvbnN0IGcxPXt9LnRvU3RyaW5nO2Z1bmN0aW9uIEFnKG4sZSl7aWYoZSE9PXZvaWQgMCYmZzEuY2FsbChlKSE9PSJbb2JqZWN0IE9iamVjdF0iKXRocm93IG5ldyBFcnJvcigiT3B0aW9ucyBzaG91bGQgYmUgb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBPYmplY3QuYXNzaWduKG4sZSl9ZnVuY3Rpb24gV2Mobil7Y29uc3QgZT1hPT5uKCkudXBkYXRlKGtzKGEpKS5kaWdlc3QoKSx0PW4oKTtyZXR1cm4gZS5vdXRwdXRMZW49dC5vdXRwdXRMZW4sZS5ibG9ja0xlbj10LmJsb2NrTGVuLGUuY3JlYXRlPSgpPT5uKCksZX1mdW5jdGlvbiBiMShuPTMyKXtpZihYYyYmdHlwZW9mIFhjLmdldFJhbmRvbVZhbHVlcz09ImZ1bmN0aW9uIilyZXR1cm4gWGMuZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KG4pKTt0aHJvdyBuZXcgRXJyb3IoImNyeXB0by5nZXRSYW5kb21WYWx1ZXMgbXVzdCBiZSBkZWZpbmVkIil9bGV0IG1nPWNsYXNzIGV4dGVuZHMgQmR7Y29uc3RydWN0b3IoZSx0KXtzdXBlcigpLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEseWcoZSk7Y29uc3QgYT1rcyh0KTtpZih0aGlzLmlIYXNoPWUuY3JlYXRlKCksdHlwZW9mIHRoaXMuaUhhc2gudXBkYXRlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgaW5zdGFuY2Ugb2YgY2xhc3Mgd2hpY2ggZXh0ZW5kcyB1dGlscy5IYXNoIik7dGhpcy5ibG9ja0xlbj10aGlzLmlIYXNoLmJsb2NrTGVuLHRoaXMub3V0cHV0TGVuPXRoaXMuaUhhc2gub3V0cHV0TGVuO2NvbnN0IHM9dGhpcy5ibG9ja0xlbixyPW5ldyBVaW50OEFycmF5KHMpO3Iuc2V0KGEubGVuZ3RoPnM/ZS5jcmVhdGUoKS51cGRhdGUoYSkuZGlnZXN0KCk6YSk7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspcltvXV49NTQ7dGhpcy5pSGFzaC51cGRhdGUociksdGhpcy5vSGFzaD1lLmNyZWF0ZSgpO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXJbb11ePTEwNjt0aGlzLm9IYXNoLnVwZGF0ZShyKSxyLmZpbGwoMCl9dXBkYXRlKGUpe3JldHVybiBOcyh0aGlzKSx0aGlzLmlIYXNoLnVwZGF0ZShlKSx0aGlzfWRpZ2VzdEludG8oZSl7TnModGhpcyksV2QoZSx0aGlzLm91dHB1dExlbiksdGhpcy5maW5pc2hlZD0hMCx0aGlzLmlIYXNoLmRpZ2VzdEludG8oZSksdGhpcy5vSGFzaC51cGRhdGUoZSksdGhpcy5vSGFzaC5kaWdlc3RJbnRvKGUpLHRoaXMuZGVzdHJveSgpfWRpZ2VzdCgpe2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkodGhpcy5vSGFzaC5vdXRwdXRMZW4pO3JldHVybiB0aGlzLmRpZ2VzdEludG8oZSksZX1fY2xvbmVJbnRvKGUpe2V8fChlPU9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLHt9KSk7Y29uc3R7b0hhc2g6dCxpSGFzaDphLGZpbmlzaGVkOnMsZGVzdHJveWVkOnIsYmxvY2tMZW46byxvdXRwdXRMZW46aX09dGhpcztyZXR1cm4gZT1lLGUuZmluaXNoZWQ9cyxlLmRlc3Ryb3llZD1yLGUuYmxvY2tMZW49byxlLm91dHB1dExlbj1pLGUub0hhc2g9dC5fY2xvbmVJbnRvKGUub0hhc2gpLGUuaUhhc2g9YS5fY2xvbmVJbnRvKGUuaUhhc2gpLGV9ZGVzdHJveSgpe3RoaXMuZGVzdHJveWVkPSEwLHRoaXMub0hhc2guZGVzdHJveSgpLHRoaXMuaUhhc2guZGVzdHJveSgpfX07Y29uc3QgQmM9KG4sZSx0KT0+bmV3IG1nKG4sZSkudXBkYXRlKHQpLmRpZ2VzdCgpO0JjLmNyZWF0ZT0obixlKT0+bmV3IG1nKG4sZSk7ZnVuY3Rpb24geTEobixlLHQsYSl7eWcobik7Y29uc3Qgcz1BZyh7ZGtMZW46MzIsYXN5bmNUaWNrOjEwfSxhKSx7YzpyLGRrTGVuOm8sYXN5bmNUaWNrOml9PXM7aWYoZ3IociksZ3IobyksZ3IoaSkscjwxKXRocm93IG5ldyBFcnJvcigiUEJLREYyOiBpdGVyYXRpb25zIChjKSBzaG91bGQgYmUgPj0gMSIpO2NvbnN0IGM9a3MoZSksZj1rcyh0KSxkPW5ldyBVaW50OEFycmF5KG8pLHA9QmMuY3JlYXRlKG4sYyksYj1wLl9jbG9uZUludG8oKS51cGRhdGUoZik7cmV0dXJue2M6cixka0xlbjpvLGFzeW5jVGljazppLERLOmQsUFJGOnAsUFJGU2FsdDpifX1mdW5jdGlvbiB4MShuLGUsdCxhLHMpe3JldHVybiBuLmRlc3Ryb3koKSxlLmRlc3Ryb3koKSxhJiZhLmRlc3Ryb3koKSxzLmZpbGwoMCksdH1mdW5jdGlvbiBJZChuLGUsdCxhKXtjb25zdHtjOnMsZGtMZW46cixESzpvLFBSRjppLFBSRlNhbHQ6Y309eTEobixlLHQsYSk7bGV0IGY7Y29uc3QgZD1uZXcgVWludDhBcnJheSg0KSxwPUhpKGQpLGI9bmV3IFVpbnQ4QXJyYXkoaS5vdXRwdXRMZW4pO2ZvcihsZXQgVD0xLFc9MDtXPHI7VCsrLFcrPWkub3V0cHV0TGVuKXtjb25zdCBnPW8uc3ViYXJyYXkoVyxXK2kub3V0cHV0TGVuKTtwLnNldEludDMyKDAsVCwhMSksKGY9Yy5fY2xvbmVJbnRvKGYpKS51cGRhdGUoZCkuZGlnZXN0SW50byhiKSxnLnNldChiLnN1YmFycmF5KDAsZy5sZW5ndGgpKTtmb3IobGV0IEE9MTtBPHM7QSsrKXtpLl9jbG9uZUludG8oZikudXBkYXRlKGIpLmRpZ2VzdEludG8oYik7Zm9yKGxldCBtPTA7bTxnLmxlbmd0aDttKyspZ1ttXV49YlttXX19cmV0dXJuIHgxKGksYyxvLGYsYil9ZnVuY3Rpb24gVDEobixlLHQsYSl7aWYodHlwZW9mIG4uc2V0QmlnVWludDY0PT0iZnVuY3Rpb24iKXJldHVybiBuLnNldEJpZ1VpbnQ2NChlLHQsYSk7Y29uc3Qgcz1CaWdJbnQoMzIpLHI9QmlnSW50KDQyOTQ5NjcyOTUpLG89TnVtYmVyKHQ+PnMmciksaT1OdW1iZXIodCZyKSxjPWE/NDowLGY9YT8wOjQ7bi5zZXRVaW50MzIoZStjLG8sYSksbi5zZXRVaW50MzIoZStmLGksYSl9Y2xhc3MgU2QgZXh0ZW5kcyBCZHtjb25zdHJ1Y3RvcihlLHQsYSxzKXtzdXBlcigpLHRoaXMuYmxvY2tMZW49ZSx0aGlzLm91dHB1dExlbj10LHRoaXMucGFkT2Zmc2V0PWEsdGhpcy5pc0xFPXMsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmxlbmd0aD0wLHRoaXMucG9zPTAsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5idWZmZXI9bmV3IFVpbnQ4QXJyYXkoZSksdGhpcy52aWV3PUhpKHRoaXMuYnVmZmVyKX11cGRhdGUoZSl7TnModGhpcyk7Y29uc3R7dmlldzp0LGJ1ZmZlcjphLGJsb2NrTGVuOnN9PXRoaXM7ZT1rcyhlKTtjb25zdCByPWUubGVuZ3RoO2ZvcihsZXQgbz0wO288cjspe2NvbnN0IGk9TWF0aC5taW4ocy10aGlzLnBvcyxyLW8pO2lmKGk9PT1zKXtjb25zdCBjPUhpKGUpO2Zvcig7czw9ci1vO28rPXMpdGhpcy5wcm9jZXNzKGMsbyk7Y29udGludWV9YS5zZXQoZS5zdWJhcnJheShvLG8raSksdGhpcy5wb3MpLHRoaXMucG9zKz1pLG8rPWksdGhpcy5wb3M9PT1zJiYodGhpcy5wcm9jZXNzKHQsMCksdGhpcy5wb3M9MCl9cmV0dXJuIHRoaXMubGVuZ3RoKz1lLmxlbmd0aCx0aGlzLnJvdW5kQ2xlYW4oKSx0aGlzfWRpZ2VzdEludG8oZSl7TnModGhpcykseGcoZSx0aGlzKSx0aGlzLmZpbmlzaGVkPSEwO2NvbnN0e2J1ZmZlcjp0LHZpZXc6YSxibG9ja0xlbjpzLGlzTEU6cn09dGhpcztsZXR7cG9zOm99PXRoaXM7dFtvKytdPTEyOCx0aGlzLmJ1ZmZlci5zdWJhcnJheShvKS5maWxsKDApLHRoaXMucGFkT2Zmc2V0PnMtbyYmKHRoaXMucHJvY2VzcyhhLDApLG89MCk7Zm9yKGxldCBwPW87cDxzO3ArKyl0W3BdPTA7VDEoYSxzLTgsQmlnSW50KHRoaXMubGVuZ3RoKjgpLHIpLHRoaXMucHJvY2VzcyhhLDApO2NvbnN0IGk9SGkoZSksYz10aGlzLm91dHB1dExlbjtpZihjJTQpdGhyb3cgbmV3IEVycm9yKCJfc2hhMjogb3V0cHV0TGVuIHNob3VsZCBiZSBhbGlnbmVkIHRvIDMyYml0Iik7Y29uc3QgZj1jLzQsZD10aGlzLmdldCgpO2lmKGY+ZC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJfc2hhMjogb3V0cHV0TGVuIGJpZ2dlciB0aGFuIHN0YXRlIik7Zm9yKGxldCBwPTA7cDxmO3ArKylpLnNldFVpbnQzMig0KnAsZFtwXSxyKX1kaWdlc3QoKXtjb25zdHtidWZmZXI6ZSxvdXRwdXRMZW46dH09dGhpczt0aGlzLmRpZ2VzdEludG8oZSk7Y29uc3QgYT1lLnNsaWNlKDAsdCk7cmV0dXJuIHRoaXMuZGVzdHJveSgpLGF9X2Nsb25lSW50byhlKXtlfHwoZT1uZXcgdGhpcy5jb25zdHJ1Y3RvciksZS5zZXQoLi4udGhpcy5nZXQoKSk7Y29uc3R7YmxvY2tMZW46dCxidWZmZXI6YSxsZW5ndGg6cyxmaW5pc2hlZDpyLGRlc3Ryb3llZDpvLHBvczppfT10aGlzO3JldHVybiBlLmxlbmd0aD1zLGUucG9zPWksZS5maW5pc2hlZD1yLGUuZGVzdHJveWVkPW8scyV0JiZlLmJ1ZmZlci5zZXQoYSksZX19Y29uc3QgQTE9KG4sZSx0KT0+biZlXn5uJnQsbTE9KG4sZSx0KT0+biZlXm4mdF5lJnQsUDE9bmV3IFVpbnQzMkFycmF5KFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKSxObj1uZXcgVWludDMyQXJyYXkoWzE3NzkwMzM3MDMsMzE0NDEzNDI3NywxMDEzOTA0MjQyLDI3NzM0ODA3NjIsMTM1OTg5MzExOSwyNjAwODIyOTI0LDUyODczNDYzNSwxNTQxNDU5MjI1XSksa249bmV3IFVpbnQzMkFycmF5KDY0KTtsZXQgdzE9Y2xhc3MgZXh0ZW5kcyBTZHtjb25zdHJ1Y3Rvcigpe3N1cGVyKDY0LDMyLDgsITEpLHRoaXMuQT1OblswXXwwLHRoaXMuQj1OblsxXXwwLHRoaXMuQz1OblsyXXwwLHRoaXMuRD1OblszXXwwLHRoaXMuRT1Obls0XXwwLHRoaXMuRj1Obls1XXwwLHRoaXMuRz1Obls2XXwwLHRoaXMuSD1Obls3XXwwfWdldCgpe2NvbnN0e0E6ZSxCOnQsQzphLEQ6cyxFOnIsRjpvLEc6aSxIOmN9PXRoaXM7cmV0dXJuW2UsdCxhLHMscixvLGksY119c2V0KGUsdCxhLHMscixvLGksYyl7dGhpcy5BPWV8MCx0aGlzLkI9dHwwLHRoaXMuQz1hfDAsdGhpcy5EPXN8MCx0aGlzLkU9cnwwLHRoaXMuRj1vfDAsdGhpcy5HPWl8MCx0aGlzLkg9Y3wwfXByb2Nlc3MoZSx0KXtmb3IobGV0IHA9MDtwPDE2O3ArKyx0Kz00KWtuW3BdPWUuZ2V0VWludDMyKHQsITEpO2ZvcihsZXQgcD0xNjtwPDY0O3ArKyl7Y29uc3QgYj1rbltwLTE1XSxUPWtuW3AtMl0sVz1lbihiLDcpXmVuKGIsMTgpXmI+Pj4zLGc9ZW4oVCwxNyleZW4oVCwxOSleVD4+PjEwO2tuW3BdPWcra25bcC03XStXK2tuW3AtMTZdfDB9bGV0e0E6YSxCOnMsQzpyLEQ6byxFOmksRjpjLEc6ZixIOmR9PXRoaXM7Zm9yKGxldCBwPTA7cDw2NDtwKyspe2NvbnN0IGI9ZW4oaSw2KV5lbihpLDExKV5lbihpLDI1KSxUPWQrYitBMShpLGMsZikrUDFbcF0ra25bcF18MCxnPShlbihhLDIpXmVuKGEsMTMpXmVuKGEsMjIpKSttMShhLHMscil8MDtkPWYsZj1jLGM9aSxpPW8rVHwwLG89cixyPXMscz1hLGE9VCtnfDB9YT1hK3RoaXMuQXwwLHM9cyt0aGlzLkJ8MCxyPXIrdGhpcy5DfDAsbz1vK3RoaXMuRHwwLGk9aSt0aGlzLkV8MCxjPWMrdGhpcy5GfDAsZj1mK3RoaXMuR3wwLGQ9ZCt0aGlzLkh8MCx0aGlzLnNldChhLHMscixvLGksYyxmLGQpfXJvdW5kQ2xlYW4oKXtrbi5maWxsKDApfWRlc3Ryb3koKXt0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDApLHRoaXMuYnVmZmVyLmZpbGwoMCl9fTtjb25zdCBIcz1XYygoKT0+bmV3IHcxKSxDaT1CaWdJbnQoMioqMzItMSksUXU9QmlnSW50KDMyKTtmdW5jdGlvbiBQZyhuLGU9ITEpe3JldHVybiBlP3toOk51bWJlcihuJkNpKSxsOk51bWJlcihuPj5RdSZDaSl9OntoOk51bWJlcihuPj5RdSZDaSl8MCxsOk51bWJlcihuJkNpKXwwfX1mdW5jdGlvbiB3ZyhuLGU9ITEpe2xldCB0PW5ldyBVaW50MzJBcnJheShuLmxlbmd0aCksYT1uZXcgVWludDMyQXJyYXkobi5sZW5ndGgpO2ZvcihsZXQgcz0wO3M8bi5sZW5ndGg7cysrKXtjb25zdHtoOnIsbDpvfT1QZyhuW3NdLGUpO1t0W3NdLGFbc11dPVtyLG9dfXJldHVyblt0LGFdfWNvbnN0IHYxPShuLGUpPT5CaWdJbnQobj4+PjApPDxRdXxCaWdJbnQoZT4+PjApLEMxPShuLGUsdCk9Pm4+Pj50LEUxPShuLGUsdCk9Pm48PDMyLXR8ZT4+PnQsVzE9KG4sZSx0KT0+bj4+PnR8ZTw8MzItdCxCMT0obixlLHQpPT5uPDwzMi10fGU+Pj50LEkxPShuLGUsdCk9Pm48PDY0LXR8ZT4+PnQtMzIsUzE9KG4sZSx0KT0+bj4+PnQtMzJ8ZTw8NjQtdCxfMT0obixlKT0+ZSxPMT0obixlKT0+bix2Zz0obixlLHQpPT5uPDx0fGU+Pj4zMi10LENnPShuLGUsdCk9PmU8PHR8bj4+PjMyLXQsRWc9KG4sZSx0KT0+ZTw8dC0zMnxuPj4+NjQtdCxXZz0obixlLHQpPT5uPDx0LTMyfGU+Pj42NC10O2Z1bmN0aW9uIFIxKG4sZSx0LGEpe2NvbnN0IHM9KGU+Pj4wKSsoYT4+PjApO3JldHVybntoOm4rdCsocy8yKiozMnwwKXwwLGw6c3wwfX1jb25zdCBNMT0obixlLHQpPT4obj4+PjApKyhlPj4+MCkrKHQ+Pj4wKSxGMT0obixlLHQsYSk9PmUrdCthKyhuLzIqKjMyfDApfDAsTjE9KG4sZSx0LGEpPT4obj4+PjApKyhlPj4+MCkrKHQ+Pj4wKSsoYT4+PjApLGsxPShuLGUsdCxhLHMpPT5lK3QrYStzKyhuLzIqKjMyfDApfDAsVTE9KG4sZSx0LGEscyk9PihuPj4+MCkrKGU+Pj4wKSsodD4+PjApKyhhPj4+MCkrKHM+Pj4wKSxEMT0obixlLHQsYSxzLHIpPT5lK3QrYStzK3IrKG4vMioqMzJ8MCl8MCxEZT17ZnJvbUJpZzpQZyxzcGxpdDp3Zyx0b0JpZzp2MSxzaHJTSDpDMSxzaHJTTDpFMSxyb3RyU0g6VzEscm90clNMOkIxLHJvdHJCSDpJMSxyb3RyQkw6UzEscm90cjMySDpfMSxyb3RyMzJMOk8xLHJvdGxTSDp2Zyxyb3RsU0w6Q2cscm90bEJIOkVnLHJvdGxCTDpXZyxhZGQ6UjEsYWRkM0w6TTEsYWRkM0g6RjEsYWRkNEw6TjEsYWRkNEg6azEsYWRkNUg6RDEsYWRkNUw6VTF9LFskMSxMMV09RGUuc3BsaXQoWyIweDQyOGEyZjk4ZDcyOGFlMjIiLCIweDcxMzc0NDkxMjNlZjY1Y2QiLCIweGI1YzBmYmNmZWM0ZDNiMmYiLCIweGU5YjVkYmE1ODE4OWRiYmMiLCIweDM5NTZjMjViZjM0OGI1MzgiLCIweDU5ZjExMWYxYjYwNWQwMTkiLCIweDkyM2Y4MmE0YWYxOTRmOWIiLCIweGFiMWM1ZWQ1ZGE2ZDgxMTgiLCIweGQ4MDdhYTk4YTMwMzAyNDIiLCIweDEyODM1YjAxNDU3MDZmYmUiLCIweDI0MzE4NWJlNGVlNGIyOGMiLCIweDU1MGM3ZGMzZDVmZmI0ZTIiLCIweDcyYmU1ZDc0ZjI3Yjg5NmYiLCIweDgwZGViMWZlM2IxNjk2YjEiLCIweDliZGMwNmE3MjVjNzEyMzUiLCIweGMxOWJmMTc0Y2Y2OTI2OTQiLCIweGU0OWI2OWMxOWVmMTRhZDIiLCIweGVmYmU0Nzg2Mzg0ZjI1ZTMiLCIweDBmYzE5ZGM2OGI4Y2Q1YjUiLCIweDI0MGNhMWNjNzdhYzljNjUiLCIweDJkZTkyYzZmNTkyYjAyNzUiLCIweDRhNzQ4NGFhNmVhNmU0ODMiLCIweDVjYjBhOWRjYmQ0MWZiZDQiLCIweDc2Zjk4OGRhODMxMTUzYjUiLCIweDk4M2U1MTUyZWU2NmRmYWIiLCIweGE4MzFjNjZkMmRiNDMyMTAiLCIweGIwMDMyN2M4OThmYjIxM2YiLCIweGJmNTk3ZmM3YmVlZjBlZTQiLCIweGM2ZTAwYmYzM2RhODhmYzIiLCIweGQ1YTc5MTQ3OTMwYWE3MjUiLCIweDA2Y2E2MzUxZTAwMzgyNmYiLCIweDE0MjkyOTY3MGEwZTZlNzAiLCIweDI3YjcwYTg1NDZkMjJmZmMiLCIweDJlMWIyMTM4NWMyNmM5MjYiLCIweDRkMmM2ZGZjNWFjNDJhZWQiLCIweDUzMzgwZDEzOWQ5NWIzZGYiLCIweDY1MGE3MzU0OGJhZjYzZGUiLCIweDc2NmEwYWJiM2M3N2IyYTgiLCIweDgxYzJjOTJlNDdlZGFlZTYiLCIweDkyNzIyYzg1MTQ4MjM1M2IiLCIweGEyYmZlOGExNGNmMTAzNjQiLCIweGE4MWE2NjRiYmM0MjMwMDEiLCIweGMyNGI4YjcwZDBmODk3OTEiLCIweGM3NmM1MWEzMDY1NGJlMzAiLCIweGQxOTJlODE5ZDZlZjUyMTgiLCIweGQ2OTkwNjI0NTU2NWE5MTAiLCIweGY0MGUzNTg1NTc3MTIwMmEiLCIweDEwNmFhMDcwMzJiYmQxYjgiLCIweDE5YTRjMTE2YjhkMmQwYzgiLCIweDFlMzc2YzA4NTE0MWFiNTMiLCIweDI3NDg3NzRjZGY4ZWViOTkiLCIweDM0YjBiY2I1ZTE5YjQ4YTgiLCIweDM5MWMwY2IzYzVjOTVhNjMiLCIweDRlZDhhYTRhZTM0MThhY2IiLCIweDViOWNjYTRmNzc2M2UzNzMiLCIweDY4MmU2ZmYzZDZiMmI4YTMiLCIweDc0OGY4MmVlNWRlZmIyZmMiLCIweDc4YTU2MzZmNDMxNzJmNjAiLCIweDg0Yzg3ODE0YTFmMGFiNzIiLCIweDhjYzcwMjA4MWE2NDM5ZWMiLCIweDkwYmVmZmZhMjM2MzFlMjgiLCIweGE0NTA2Y2ViZGU4MmJkZTkiLCIweGJlZjlhM2Y3YjJjNjc5MTUiLCIweGM2NzE3OGYyZTM3MjUzMmIiLCIweGNhMjczZWNlZWEyNjYxOWMiLCIweGQxODZiOGM3MjFjMGMyMDciLCIweGVhZGE3ZGQ2Y2RlMGViMWUiLCIweGY1N2Q0ZjdmZWU2ZWQxNzgiLCIweDA2ZjA2N2FhNzIxNzZmYmEiLCIweDBhNjM3ZGM1YTJjODk4YTYiLCIweDExM2Y5ODA0YmVmOTBkYWUiLCIweDFiNzEwYjM1MTMxYzQ3MWIiLCIweDI4ZGI3N2Y1MjMwNDdkODQiLCIweDMyY2FhYjdiNDBjNzI0OTMiLCIweDNjOWViZTBhMTVjOWJlYmMiLCIweDQzMWQ2N2M0OWMxMDBkNGMiLCIweDRjYzVkNGJlY2IzZTQyYjYiLCIweDU5N2YyOTljZmM2NTdlMmEiLCIweDVmY2I2ZmFiM2FkNmZhZWMiLCIweDZjNDQxOThjNGE0NzU4MTciXS5tYXAobj0+QmlnSW50KG4pKSksVW49bmV3IFVpbnQzMkFycmF5KDgwKSxEbj1uZXcgVWludDMyQXJyYXkoODApO2NsYXNzIHoxIGV4dGVuZHMgU2R7Y29uc3RydWN0b3IoKXtzdXBlcigxMjgsNjQsMTYsITEpLHRoaXMuQWg9MTc3OTAzMzcwMyx0aGlzLkFsPS0yMDU3MzE1NzYsdGhpcy5CaD0tMTE1MDgzMzAxOSx0aGlzLkJsPS0yMDY3MDkzNzAxLHRoaXMuQ2g9MTAxMzkwNDI0Mix0aGlzLkNsPS0yMzc5MTU3Myx0aGlzLkRoPS0xNTIxNDg2NTM0LHRoaXMuRGw9MTU5NTc1MDEyOSx0aGlzLkVoPTEzNTk4OTMxMTksdGhpcy5FbD0tMTM3NzQwMjE1OSx0aGlzLkZoPS0xNjk0MTQ0MzcyLHRoaXMuRmw9NzI1NTExMTk5LHRoaXMuR2g9NTI4NzM0NjM1LHRoaXMuR2w9LTc5NTc3NzQ5LHRoaXMuSGg9MTU0MTQ1OTIyNSx0aGlzLkhsPTMyNzAzMzIwOX1nZXQoKXtjb25zdHtBaDplLEFsOnQsQmg6YSxCbDpzLENoOnIsQ2w6byxEaDppLERsOmMsRWg6ZixFbDpkLEZoOnAsRmw6YixHaDpULEdsOlcsSGg6ZyxIbDpBfT10aGlzO3JldHVybltlLHQsYSxzLHIsbyxpLGMsZixkLHAsYixULFcsZyxBXX1zZXQoZSx0LGEscyxyLG8saSxjLGYsZCxwLGIsVCxXLGcsQSl7dGhpcy5BaD1lfDAsdGhpcy5BbD10fDAsdGhpcy5CaD1hfDAsdGhpcy5CbD1zfDAsdGhpcy5DaD1yfDAsdGhpcy5DbD1vfDAsdGhpcy5EaD1pfDAsdGhpcy5EbD1jfDAsdGhpcy5FaD1mfDAsdGhpcy5FbD1kfDAsdGhpcy5GaD1wfDAsdGhpcy5GbD1ifDAsdGhpcy5HaD1UfDAsdGhpcy5HbD1XfDAsdGhpcy5IaD1nfDAsdGhpcy5IbD1BfDB9cHJvY2VzcyhlLHQpe2ZvcihsZXQgQj0wO0I8MTY7QisrLHQrPTQpVW5bQl09ZS5nZXRVaW50MzIodCksRG5bQl09ZS5nZXRVaW50MzIodCs9NCk7Zm9yKGxldCBCPTE2O0I8ODA7QisrKXtjb25zdCBrPVVuW0ItMTVdfDAsVj1EbltCLTE1XXwwLEw9RGUucm90clNIKGssViwxKV5EZS5yb3RyU0goayxWLDgpXkRlLnNoclNIKGssViw3KSxJPURlLnJvdHJTTChrLFYsMSleRGUucm90clNMKGssViw4KV5EZS5zaHJTTChrLFYsNykseT1VbltCLTJdfDAsRT1EbltCLTJdfDAsQz1EZS5yb3RyU0goeSxFLDE5KV5EZS5yb3RyQkgoeSxFLDYxKV5EZS5zaHJTSCh5LEUsNiksRj1EZS5yb3RyU0woeSxFLDE5KV5EZS5yb3RyQkwoeSxFLDYxKV5EZS5zaHJTTCh5LEUsNiksJD1EZS5hZGQ0TChJLEYsRG5bQi03XSxEbltCLTE2XSksTz1EZS5hZGQ0SCgkLEwsQyxVbltCLTddLFVuW0ItMTZdKTtVbltCXT1PfDAsRG5bQl09JHwwfWxldHtBaDphLEFsOnMsQmg6cixCbDpvLENoOmksQ2w6YyxEaDpmLERsOmQsRWg6cCxFbDpiLEZoOlQsRmw6VyxHaDpnLEdsOkEsSGg6bSxIbDp3fT10aGlzO2ZvcihsZXQgQj0wO0I8ODA7QisrKXtjb25zdCBrPURlLnJvdHJTSChwLGIsMTQpXkRlLnJvdHJTSChwLGIsMTgpXkRlLnJvdHJCSChwLGIsNDEpLFY9RGUucm90clNMKHAsYiwxNCleRGUucm90clNMKHAsYiwxOCleRGUucm90ckJMKHAsYiw0MSksTD1wJlRefnAmZyxJPWImV15+YiZBLHk9RGUuYWRkNUwodyxWLEksTDFbQl0sRG5bQl0pLEU9RGUuYWRkNUgoeSxtLGssTCwkMVtCXSxVbltCXSksQz15fDAsRj1EZS5yb3RyU0goYSxzLDI4KV5EZS5yb3RyQkgoYSxzLDM0KV5EZS5yb3RyQkgoYSxzLDM5KSwkPURlLnJvdHJTTChhLHMsMjgpXkRlLnJvdHJCTChhLHMsMzQpXkRlLnJvdHJCTChhLHMsMzkpLE89YSZyXmEmaV5yJmksUj1zJm9ecyZjXm8mYzttPWd8MCx3PUF8MCxnPVR8MCxBPVd8MCxUPXB8MCxXPWJ8MCx7aDpwLGw6Yn09RGUuYWRkKGZ8MCxkfDAsRXwwLEN8MCksZj1pfDAsZD1jfDAsaT1yfDAsYz1vfDAscj1hfDAsbz1zfDA7Y29uc3QgeD1EZS5hZGQzTChDLCQsUik7YT1EZS5hZGQzSCh4LEUsRixPKSxzPXh8MH0oe2g6YSxsOnN9PURlLmFkZCh0aGlzLkFofDAsdGhpcy5BbHwwLGF8MCxzfDApKSx7aDpyLGw6b309RGUuYWRkKHRoaXMuQmh8MCx0aGlzLkJsfDAscnwwLG98MCkse2g6aSxsOmN9PURlLmFkZCh0aGlzLkNofDAsdGhpcy5DbHwwLGl8MCxjfDApLHtoOmYsbDpkfT1EZS5hZGQodGhpcy5EaHwwLHRoaXMuRGx8MCxmfDAsZHwwKSx7aDpwLGw6Yn09RGUuYWRkKHRoaXMuRWh8MCx0aGlzLkVsfDAscHwwLGJ8MCkse2g6VCxsOld9PURlLmFkZCh0aGlzLkZofDAsdGhpcy5GbHwwLFR8MCxXfDApLHtoOmcsbDpBfT1EZS5hZGQodGhpcy5HaHwwLHRoaXMuR2x8MCxnfDAsQXwwKSx7aDptLGw6d309RGUuYWRkKHRoaXMuSGh8MCx0aGlzLkhsfDAsbXwwLHd8MCksdGhpcy5zZXQoYSxzLHIsbyxpLGMsZixkLHAsYixULFcsZyxBLG0sdyl9cm91bmRDbGVhbigpe1VuLmZpbGwoMCksRG4uZmlsbCgwKX1kZXN0cm95KCl7dGhpcy5idWZmZXIuZmlsbCgwKSx0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwKX19Y29uc3QgX2Q9V2MoKCk9Pm5ldyB6MSk7ZnVuY3Rpb24gajEoKXtpZih0eXBlb2Ygc2VsZjwidSIpcmV0dXJuIHNlbGY7aWYodHlwZW9mIHdpbmRvdzwidSIpcmV0dXJuIHdpbmRvdztpZih0eXBlb2YgUGE8InUiKXJldHVybiBQYTt0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdCIpfWNvbnN0ICQwPWoxKCksTDA9JDAuY3J5cHRvfHwkMC5tc0NyeXB0bztmdW5jdGlvbiBCZyhuKXtzd2l0Y2gobil7Y2FzZSJzaGEyNTYiOnJldHVybiBIcy5jcmVhdGUoKTtjYXNlInNoYTUxMiI6cmV0dXJuIF9kLmNyZWF0ZSgpfUcoITEsImludmFsaWQgaGFzaGluZyBhbGdvcml0aG0gbmFtZSIsImFsZ29yaXRobSIsbil9ZnVuY3Rpb24gVjEobixlKXtjb25zdCB0PXtzaGEyNTY6SHMsc2hhNTEyOl9kfVtuXTtyZXR1cm4gRyh0IT1udWxsLCJpbnZhbGlkIGhtYWMgYWxnb3JpdGhtIiwiYWxnb3JpdGhtIixuKSxCYy5jcmVhdGUodCxlKX1mdW5jdGlvbiBHMShuLGUsdCxhLHMpe2NvbnN0IHI9e3NoYTI1NjpIcyxzaGE1MTI6X2R9W3NdO3JldHVybiBHKHIhPW51bGwsImludmFsaWQgcGJrZGYyIGFsZ29yaXRobSIsImFsZ29yaXRobSIscyksSWQocixuLGUse2M6dCxka0xlbjphfSl9ZnVuY3Rpb24gSDEobil7UmUoTDAhPW51bGwsInBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgc2VjdXJlIHJhbmRvbSBudW1iZXJzIiwiVU5TVVBQT1JURURfT1BFUkFUSU9OIix7b3BlcmF0aW9uOiJyYW5kb21CeXRlcyJ9KSxHKE51bWJlci5pc0ludGVnZXIobikmJm4+MCYmbjw9MTAyNCwiaW52YWxpZCBsZW5ndGgiLCJsZW5ndGgiLG4pO2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkobik7cmV0dXJuIEwwLmdldFJhbmRvbVZhbHVlcyhlKSxlfWxldCBJZz0hMTtjb25zdCBTZz1mdW5jdGlvbihuLGUsdCl7cmV0dXJuIFYxKG4sZSkudXBkYXRlKHQpLmRpZ2VzdCgpfTtsZXQgX2c9U2c7ZnVuY3Rpb24gWW4obixlLHQpe2NvbnN0IGE9QWUoZSwia2V5Iikscz1BZSh0LCJkYXRhIik7cmV0dXJuIHllKF9nKG4sYSxzKSl9WW4uXz1TZztZbi5sb2NrPWZ1bmN0aW9uKCl7SWc9ITB9O1luLnJlZ2lzdGVyPWZ1bmN0aW9uKG4pe2lmKElnKXRocm93IG5ldyBFcnJvcigiY29tcHV0ZUhtYWMgaXMgbG9ja2VkIik7X2c9bn07T2JqZWN0LmZyZWV6ZShZbik7Y29uc3RbT2csUmcsTWddPVtbXSxbXSxbXV0sSzE9QmlnSW50KDApLGhhPUJpZ0ludCgxKSxaMT1CaWdJbnQoMikscTE9QmlnSW50KDcpLEoxPUJpZ0ludCgyNTYpLFkxPUJpZ0ludCgxMTMpO2ZvcihsZXQgbj0wLGU9aGEsdD0xLGE9MDtuPDI0O24rKyl7W3QsYV09W2EsKDIqdCszKmEpJTVdLE9nLnB1c2goMiooNSphK3QpKSxSZy5wdXNoKChuKzEpKihuKzIpLzIlNjQpO2xldCBzPUsxO2ZvcihsZXQgcj0wO3I8NztyKyspZT0oZTw8aGFeKGU+PnExKSpZMSklSjEsZSZaMSYmKHNePWhhPDwoaGE8PEJpZ0ludChyKSktaGEpO01nLnB1c2gocyl9Y29uc3RbWDEsUTFdPXdnKE1nLCEwKSx6MD0obixlLHQpPT50PjMyP0VnKG4sZSx0KTp2ZyhuLGUsdCksajA9KG4sZSx0KT0+dD4zMj9XZyhuLGUsdCk6Q2cobixlLHQpO2Z1bmN0aW9uIGVUKG4sZT0yNCl7Y29uc3QgdD1uZXcgVWludDMyQXJyYXkoMTApO2ZvcihsZXQgYT0yNC1lO2E8MjQ7YSsrKXtmb3IobGV0IG89MDtvPDEwO28rKyl0W29dPW5bb11ebltvKzEwXV5uW28rMjBdXm5bbyszMF1ebltvKzQwXTtmb3IobGV0IG89MDtvPDEwO28rPTIpe2NvbnN0IGk9KG8rOCklMTAsYz0obysyKSUxMCxmPXRbY10sZD10W2MrMV0scD16MChmLGQsMSledFtpXSxiPWowKGYsZCwxKV50W2krMV07Zm9yKGxldCBUPTA7VDw1MDtUKz0xMCluW28rVF1ePXAsbltvK1QrMV1ePWJ9bGV0IHM9blsyXSxyPW5bM107Zm9yKGxldCBvPTA7bzwyNDtvKyspe2NvbnN0IGk9Umdbb10sYz16MChzLHIsaSksZj1qMChzLHIsaSksZD1PZ1tvXTtzPW5bZF0scj1uW2QrMV0sbltkXT1jLG5bZCsxXT1mfWZvcihsZXQgbz0wO288NTA7bys9MTApe2ZvcihsZXQgaT0wO2k8MTA7aSsrKXRbaV09bltvK2ldO2ZvcihsZXQgaT0wO2k8MTA7aSsrKW5bbytpXV49fnRbKGkrMiklMTBdJnRbKGkrNCklMTBdfW5bMF1ePVgxW2FdLG5bMV1ePVExW2FdfXQuZmlsbCgwKX1jbGFzcyBPZCBleHRlbmRzIEJke2NvbnN0cnVjdG9yKGUsdCxhLHM9ITEscj0yNCl7aWYoc3VwZXIoKSx0aGlzLmJsb2NrTGVuPWUsdGhpcy5zdWZmaXg9dCx0aGlzLm91dHB1dExlbj1hLHRoaXMuZW5hYmxlWE9GPXMsdGhpcy5yb3VuZHM9cix0aGlzLnBvcz0wLHRoaXMucG9zT3V0PTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSxncihhKSwwPj10aGlzLmJsb2NrTGVufHx0aGlzLmJsb2NrTGVuPj0yMDApdGhyb3cgbmV3IEVycm9yKCJTaGEzIHN1cHBvcnRzIG9ubHkga2VjY2FrLWYxNjAwIGZ1bmN0aW9uIik7dGhpcy5zdGF0ZT1uZXcgVWludDhBcnJheSgyMDApLHRoaXMuc3RhdGUzMj1HaSh0aGlzLnN0YXRlKX1rZWNjYWsoKXtlVCh0aGlzLnN0YXRlMzIsdGhpcy5yb3VuZHMpLHRoaXMucG9zT3V0PTAsdGhpcy5wb3M9MH11cGRhdGUoZSl7TnModGhpcyk7Y29uc3R7YmxvY2tMZW46dCxzdGF0ZTphfT10aGlzO2U9a3MoZSk7Y29uc3Qgcz1lLmxlbmd0aDtmb3IobGV0IHI9MDtyPHM7KXtjb25zdCBvPU1hdGgubWluKHQtdGhpcy5wb3Mscy1yKTtmb3IobGV0IGk9MDtpPG87aSsrKWFbdGhpcy5wb3MrK11ePWVbcisrXTt0aGlzLnBvcz09PXQmJnRoaXMua2VjY2FrKCl9cmV0dXJuIHRoaXN9ZmluaXNoKCl7aWYodGhpcy5maW5pc2hlZClyZXR1cm47dGhpcy5maW5pc2hlZD0hMDtjb25zdHtzdGF0ZTplLHN1ZmZpeDp0LHBvczphLGJsb2NrTGVuOnN9PXRoaXM7ZVthXV49dCx0JjEyOCYmYT09PXMtMSYmdGhpcy5rZWNjYWsoKSxlW3MtMV1ePTEyOCx0aGlzLmtlY2NhaygpfXdyaXRlSW50byhlKXtOcyh0aGlzLCExKSxXZChlKSx0aGlzLmZpbmlzaCgpO2NvbnN0IHQ9dGhpcy5zdGF0ZSx7YmxvY2tMZW46YX09dGhpcztmb3IobGV0IHM9MCxyPWUubGVuZ3RoO3M8cjspe3RoaXMucG9zT3V0Pj1hJiZ0aGlzLmtlY2NhaygpO2NvbnN0IG89TWF0aC5taW4oYS10aGlzLnBvc091dCxyLXMpO2Uuc2V0KHQuc3ViYXJyYXkodGhpcy5wb3NPdXQsdGhpcy5wb3NPdXQrbykscyksdGhpcy5wb3NPdXQrPW8scys9b31yZXR1cm4gZX14b2ZJbnRvKGUpe2lmKCF0aGlzLmVuYWJsZVhPRil0aHJvdyBuZXcgRXJyb3IoIlhPRiBpcyBub3QgcG9zc2libGUgZm9yIHRoaXMgaW5zdGFuY2UiKTtyZXR1cm4gdGhpcy53cml0ZUludG8oZSl9eG9mKGUpe3JldHVybiBncihlKSx0aGlzLnhvZkludG8obmV3IFVpbnQ4QXJyYXkoZSkpfWRpZ2VzdEludG8oZSl7aWYoeGcoZSx0aGlzKSx0aGlzLmZpbmlzaGVkKXRocm93IG5ldyBFcnJvcigiZGlnZXN0KCkgd2FzIGFscmVhZHkgY2FsbGVkIik7cmV0dXJuIHRoaXMud3JpdGVJbnRvKGUpLHRoaXMuZGVzdHJveSgpLGV9ZGlnZXN0KCl7cmV0dXJuIHRoaXMuZGlnZXN0SW50byhuZXcgVWludDhBcnJheSh0aGlzLm91dHB1dExlbikpfWRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLnN0YXRlLmZpbGwoMCl9X2Nsb25lSW50byhlKXtjb25zdHtibG9ja0xlbjp0LHN1ZmZpeDphLG91dHB1dExlbjpzLHJvdW5kczpyLGVuYWJsZVhPRjpvfT10aGlzO3JldHVybiBlfHwoZT1uZXcgT2QodCxhLHMsbyxyKSksZS5zdGF0ZTMyLnNldCh0aGlzLnN0YXRlMzIpLGUucG9zPXRoaXMucG9zLGUucG9zT3V0PXRoaXMucG9zT3V0LGUuZmluaXNoZWQ9dGhpcy5maW5pc2hlZCxlLnJvdW5kcz1yLGUuc3VmZml4PWEsZS5vdXRwdXRMZW49cyxlLmVuYWJsZVhPRj1vLGUuZGVzdHJveWVkPXRoaXMuZGVzdHJveWVkLGV9fWNvbnN0IHRUPShuLGUsdCk9PldjKCgpPT5uZXcgT2QoZSxuLHQpKSxyVD10VCgxLDEzNiwyNTYvOCk7bGV0IEZnPSExO2NvbnN0IE5nPWZ1bmN0aW9uKG4pe3JldHVybiByVChuKX07bGV0IGtnPU5nO2Z1bmN0aW9uICRlKG4pe2NvbnN0IGU9QWUobiwiZGF0YSIpO3JldHVybiB5ZShrZyhlKSl9JGUuXz1OZzskZS5sb2NrPWZ1bmN0aW9uKCl7Rmc9ITB9OyRlLnJlZ2lzdGVyPWZ1bmN0aW9uKG4pe2lmKEZnKXRocm93IG5ldyBUeXBlRXJyb3IoImtlY2NhazI1NiBpcyBsb2NrZWQiKTtrZz1ufTtPYmplY3QuZnJlZXplKCRlKTtjb25zdCBuVD1uZXcgVWludDhBcnJheShbNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOF0pLFVnPVVpbnQ4QXJyYXkuZnJvbSh7bGVuZ3RoOjE2fSwobixlKT0+ZSksb1Q9VWcubWFwKG49Pig5Km4rNSklMTYpO2xldCBSZD1bVWddLE1kPVtvVF07Zm9yKGxldCBuPTA7bjw0O24rKylmb3IobGV0IGUgb2ZbUmQsTWRdKWUucHVzaChlW25dLm1hcCh0PT5uVFt0XSkpO2NvbnN0IERnPVtbMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4XSxbMTIsMTMsMTEsMTUsNiw5LDksNywxMiwxNSwxMSwxMyw3LDgsNyw3XSxbMTMsMTUsMTQsMTEsNyw3LDYsOCwxMywxNCwxMywxMiw1LDUsNiw5XSxbMTQsMTEsMTIsMTQsOCw2LDUsNSwxNSwxMiwxNSwxNCw5LDksOCw2XSxbMTUsMTIsMTMsMTMsOSw1LDgsNiwxNCwxMSwxMiwxMSw4LDYsNSw1XV0ubWFwKG49Pm5ldyBVaW50OEFycmF5KG4pKSxzVD1SZC5tYXAoKG4sZSk9Pm4ubWFwKHQ9PkRnW2VdW3RdKSksYVQ9TWQubWFwKChuLGUpPT5uLm1hcCh0PT5EZ1tlXVt0XSkpLGlUPW5ldyBVaW50MzJBcnJheShbMCwxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwyODQwODUzODM4XSksY1Q9bmV3IFVpbnQzMkFycmF5KFsxMzUyODI5OTI2LDE1NDg2MDM2ODQsMTgzNjA3MjY5MSwyMDUzOTk0MjE3LDBdKSxFaT0obixlKT0+bjw8ZXxuPj4+MzItZTtmdW5jdGlvbiBWMChuLGUsdCxhKXtyZXR1cm4gbj09PTA/ZV50XmE6bj09PTE/ZSZ0fH5lJmE6bj09PTI/KGV8fnQpXmE6bj09PTM/ZSZhfHQmfmE6ZV4odHx+YSl9Y29uc3QgV2k9bmV3IFVpbnQzMkFycmF5KDE2KTtjbGFzcyB1VCBleHRlbmRzIFNke2NvbnN0cnVjdG9yKCl7c3VwZXIoNjQsMjAsOCwhMCksdGhpcy5oMD0xNzMyNTg0MTkzLHRoaXMuaDE9LTI3MTczMzg3OSx0aGlzLmgyPS0xNzMyNTg0MTk0LHRoaXMuaDM9MjcxNzMzODc4LHRoaXMuaDQ9LTEwMDk1ODk3NzZ9Z2V0KCl7Y29uc3R7aDA6ZSxoMTp0LGgyOmEsaDM6cyxoNDpyfT10aGlzO3JldHVybltlLHQsYSxzLHJdfXNldChlLHQsYSxzLHIpe3RoaXMuaDA9ZXwwLHRoaXMuaDE9dHwwLHRoaXMuaDI9YXwwLHRoaXMuaDM9c3wwLHRoaXMuaDQ9cnwwfXByb2Nlc3MoZSx0KXtmb3IobGV0IFQ9MDtUPDE2O1QrKyx0Kz00KVdpW1RdPWUuZ2V0VWludDMyKHQsITApO2xldCBhPXRoaXMuaDB8MCxzPWEscj10aGlzLmgxfDAsbz1yLGk9dGhpcy5oMnwwLGM9aSxmPXRoaXMuaDN8MCxkPWYscD10aGlzLmg0fDAsYj1wO2ZvcihsZXQgVD0wO1Q8NTtUKyspe2NvbnN0IFc9NC1ULGc9aVRbVF0sQT1jVFtUXSxtPVJkW1RdLHc9TWRbVF0sQj1zVFtUXSxrPWFUW1RdO2ZvcihsZXQgVj0wO1Y8MTY7VisrKXtjb25zdCBMPUVpKGErVjAoVCxyLGksZikrV2lbbVtWXV0rZyxCW1ZdKStwfDA7YT1wLHA9ZixmPUVpKGksMTApfDAsaT1yLHI9TH1mb3IobGV0IFY9MDtWPDE2O1YrKyl7Y29uc3QgTD1FaShzK1YwKFcsbyxjLGQpK1dpW3dbVl1dK0Esa1tWXSkrYnwwO3M9YixiPWQsZD1FaShjLDEwKXwwLGM9byxvPUx9fXRoaXMuc2V0KHRoaXMuaDEraStkfDAsdGhpcy5oMitmK2J8MCx0aGlzLmgzK3Arc3wwLHRoaXMuaDQrYStvfDAsdGhpcy5oMCtyK2N8MCl9cm91bmRDbGVhbigpe1dpLmZpbGwoMCl9ZGVzdHJveSgpe3RoaXMuZGVzdHJveWVkPSEwLHRoaXMuYnVmZmVyLmZpbGwoMCksdGhpcy5zZXQoMCwwLDAsMCwwKX19Y29uc3QgbFQ9V2MoKCk9Pm5ldyB1VCk7bGV0ICRnPSExO2NvbnN0IExnPWZ1bmN0aW9uKG4pe3JldHVybiBsVChuKX07bGV0IHpnPUxnO2Z1bmN0aW9uIEtzKG4pe2NvbnN0IGU9QWUobiwiZGF0YSIpO3JldHVybiB5ZSh6ZyhlKSl9S3MuXz1MZztLcy5sb2NrPWZ1bmN0aW9uKCl7JGc9ITB9O0tzLnJlZ2lzdGVyPWZ1bmN0aW9uKG4pe2lmKCRnKXRocm93IG5ldyBUeXBlRXJyb3IoInJpcGVtZDE2MCBpcyBsb2NrZWQiKTt6Zz1ufTtPYmplY3QuZnJlZXplKEtzKTtsZXQgamc9ITE7Y29uc3QgVmc9ZnVuY3Rpb24obixlLHQsYSxzKXtyZXR1cm4gRzEobixlLHQsYSxzKX07bGV0IEdnPVZnO2Z1bmN0aW9uIFpzKG4sZSx0LGEscyl7Y29uc3Qgcj1BZShuLCJwYXNzd29yZCIpLG89QWUoZSwic2FsdCIpO3JldHVybiB5ZShHZyhyLG8sdCxhLHMpKX1acy5fPVZnO1pzLmxvY2s9ZnVuY3Rpb24oKXtqZz0hMH07WnMucmVnaXN0ZXI9ZnVuY3Rpb24obil7aWYoamcpdGhyb3cgbmV3IEVycm9yKCJwYmtkZjIgaXMgbG9ja2VkIik7R2c9bn07T2JqZWN0LmZyZWV6ZShacyk7bGV0IEhnPSExO2NvbnN0IEtnPWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgVWludDhBcnJheShIMShuKSl9O2xldCBaZz1LZztmdW5jdGlvbiBTbihuKXtyZXR1cm4gWmcobil9U24uXz1LZztTbi5sb2NrPWZ1bmN0aW9uKCl7SGc9ITB9O1NuLnJlZ2lzdGVyPWZ1bmN0aW9uKG4pe2lmKEhnKXRocm93IG5ldyBFcnJvcigicmFuZG9tQnl0ZXMgaXMgbG9ja2VkIik7Wmc9bn07T2JqZWN0LmZyZWV6ZShTbik7Y29uc3QgWWU9KG4sZSk9Pm48PGV8bj4+PjMyLWU7ZnVuY3Rpb24gRzAobixlLHQsYSxzLHIpe2xldCBvPW5bZSsrXV50W2ErK10saT1uW2UrK11edFthKytdLGM9bltlKytdXnRbYSsrXSxmPW5bZSsrXV50W2ErK10sZD1uW2UrK11edFthKytdLHA9bltlKytdXnRbYSsrXSxiPW5bZSsrXV50W2ErK10sVD1uW2UrK11edFthKytdLFc9bltlKytdXnRbYSsrXSxnPW5bZSsrXV50W2ErK10sQT1uW2UrK11edFthKytdLG09bltlKytdXnRbYSsrXSx3PW5bZSsrXV50W2ErK10sQj1uW2UrK11edFthKytdLGs9bltlKytdXnRbYSsrXSxWPW5bZSsrXV50W2ErK10sTD1vLEk9aSx5PWMsRT1mLEM9ZCxGPXAsJD1iLE89VCxSPVcseD1nLHY9QSxfPW0sTT13LHo9QixxPWssUT1WO2ZvcihsZXQgZWU9MDtlZTw4O2VlKz0yKUNePVllKEwrTXwwLDcpLFJePVllKEMrTHwwLDkpLE1ePVllKFIrQ3wwLDEzKSxMXj1ZZShNK1J8MCwxOCkseF49WWUoRitJfDAsNyksel49WWUoeCtGfDAsOSksSV49WWUoeit4fDAsMTMpLEZePVllKEkrenwwLDE4KSxxXj1ZZSh2KyR8MCw3KSx5Xj1ZZShxK3Z8MCw5KSwkXj1ZZSh5K3F8MCwxMyksdl49WWUoJCt5fDAsMTgpLEVePVllKFErX3wwLDcpLE9ePVllKEUrUXwwLDkpLF9ePVllKE8rRXwwLDEzKSxRXj1ZZShfK098MCwxOCksSV49WWUoTCtFfDAsNykseV49WWUoSStMfDAsOSksRV49WWUoeStJfDAsMTMpLExePVllKEUreXwwLDE4KSwkXj1ZZShGK0N8MCw3KSxPXj1ZZSgkK0Z8MCw5KSxDXj1ZZShPKyR8MCwxMyksRl49WWUoQytPfDAsMTgpLF9ePVllKHYreHwwLDcpLFJePVllKF8rdnwwLDkpLHhePVllKFIrX3wwLDEzKSx2Xj1ZZSh4K1J8MCwxOCksTV49WWUoUStxfDAsNyksel49WWUoTStRfDAsOSkscV49WWUoeitNfDAsMTMpLFFePVllKHErenwwLDE4KTtzW3IrK109bytMfDAsc1tyKytdPWkrSXwwLHNbcisrXT1jK3l8MCxzW3IrK109ZitFfDAsc1tyKytdPWQrQ3wwLHNbcisrXT1wK0Z8MCxzW3IrK109YiskfDAsc1tyKytdPVQrT3wwLHNbcisrXT1XK1J8MCxzW3IrK109Zyt4fDAsc1tyKytdPUErdnwwLHNbcisrXT1tK198MCxzW3IrK109dytNfDAsc1tyKytdPUIrenwwLHNbcisrXT1rK3F8MCxzW3IrK109VitRfDB9ZnVuY3Rpb24gdXMobixlLHQsYSxzKXtsZXQgcj1hKzAsbz1hKzE2KnM7Zm9yKGxldCBpPTA7aTwxNjtpKyspdFtvK2ldPW5bZSsoMipzLTEpKjE2K2ldO2ZvcihsZXQgaT0wO2k8cztpKysscis9MTYsZSs9MTYpRzAodCxvLG4sZSx0LHIpLGk+MCYmKG8rPTE2KSxHMCh0LHIsbixlKz0xNix0LG8pfWZ1bmN0aW9uIHFnKG4sZSx0KXtjb25zdCBhPUFnKHtka0xlbjozMixhc3luY1RpY2s6MTAsbWF4bWVtOjEwNzM3NDI4NDh9LHQpLHtOOnMscixwOm8sZGtMZW46aSxhc3luY1RpY2s6YyxtYXhtZW06ZixvblByb2dyZXNzOmR9PWE7aWYoZ3IocyksZ3IociksZ3IobyksZ3IoaSksZ3IoYyksZ3IoZiksZCE9PXZvaWQgMCYmdHlwZW9mIGQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJwcm9ncmVzc0NiIHNob3VsZCBiZSBmdW5jdGlvbiIpO2NvbnN0IHA9MTI4KnIsYj1wLzQ7aWYoczw9MXx8cyZzLTF8fHM+PTIqKihwLzgpfHxzPjIqKjMyKXRocm93IG5ldyBFcnJvcigiU2NyeXB0OiBOIG11c3QgYmUgbGFyZ2VyIHRoYW4gMSwgYSBwb3dlciBvZiAyLCBsZXNzIHRoYW4gMl4oMTI4ICogciAvIDgpIGFuZCBsZXNzIHRoYW4gMl4zMiIpO2lmKG88MHx8bz4oMioqMzItMSkqMzIvcCl0aHJvdyBuZXcgRXJyb3IoIlNjcnlwdDogcCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gKCgyXjMyIC0gMSkgKiAzMikgLyAoMTI4ICogcikiKTtpZihpPDB8fGk+KDIqKjMyLTEpKjMyKXRocm93IG5ldyBFcnJvcigiU2NyeXB0OiBka0xlbiBzaG91bGQgYmUgcG9zaXRpdmUgaW50ZWdlciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gKDJeMzIgLSAxKSAqIDMyIik7Y29uc3QgVD1wKihzK28pO2lmKFQ+Zil0aHJvdyBuZXcgRXJyb3IoYFNjcnlwdDogcGFyYW1ldGVycyB0b28gbGFyZ2UsICR7VH0gKDEyOCAqIHIgKiAoTiArIHApKSA+ICR7Zn0gKG1heG1lbSlgKTtjb25zdCBXPUlkKEhzLG4sZSx7YzoxLGRrTGVuOnAqb30pLGc9R2koVyksQT1HaShuZXcgVWludDhBcnJheShwKnMpKSxtPUdpKG5ldyBVaW50OEFycmF5KHApKTtsZXQgdz0oKT0+e307aWYoZCl7Y29uc3QgQj0yKnMqbyxrPU1hdGgubWF4KE1hdGguZmxvb3IoQi8xZTQpLDEpO2xldCBWPTA7dz0oKT0+e1YrKyxkJiYoIShWJWspfHxWPT09QikmJmQoVi9CKX19cmV0dXJue046cyxyLHA6byxka0xlbjppLGJsb2NrU2l6ZTMyOmIsVjpBLEIzMjpnLEI6Vyx0bXA6bSxibG9ja01peENiOncsYXN5bmNUaWNrOmN9fWZ1bmN0aW9uIEpnKG4sZSx0LGEscyl7Y29uc3Qgcj1JZChIcyxuLHQse2M6MSxka0xlbjplfSk7cmV0dXJuIHQuZmlsbCgwKSxhLmZpbGwoMCkscy5maWxsKDApLHJ9ZnVuY3Rpb24gZlQobixlLHQpe2NvbnN0e046YSxyOnMscDpyLGRrTGVuOm8sYmxvY2tTaXplMzI6aSxWOmMsQjMyOmYsQjpkLHRtcDpwLGJsb2NrTWl4Q2I6Yn09cWcobixlLHQpO2ZvcihsZXQgVD0wO1Q8cjtUKyspe2NvbnN0IFc9aSpUO2ZvcihsZXQgZz0wO2c8aTtnKyspY1tnXT1mW1crZ107Zm9yKGxldCBnPTAsQT0wO2c8YS0xO2crKyl1cyhjLEEsYyxBKz1pLHMpLGIoKTt1cyhjLChhLTEpKmksZixXLHMpLGIoKTtmb3IobGV0IGc9MDtnPGE7ZysrKXtjb25zdCBBPWZbVytpLTE2XSVhO2ZvcihsZXQgbT0wO208aTttKyspcFttXT1mW1crbV1eY1tBKmkrbV07dXMocCwwLGYsVyxzKSxiKCl9fXJldHVybiBKZyhuLG8sZCxjLHApfWFzeW5jIGZ1bmN0aW9uIGRUKG4sZSx0KXtjb25zdHtOOmEscjpzLHA6cixka0xlbjpvLGJsb2NrU2l6ZTMyOmksVjpjLEIzMjpmLEI6ZCx0bXA6cCxibG9ja01peENiOmIsYXN5bmNUaWNrOlR9PXFnKG4sZSx0KTtmb3IobGV0IFc9MDtXPHI7VysrKXtjb25zdCBnPWkqVztmb3IobGV0IG09MDttPGk7bSsrKWNbbV09ZltnK21dO2xldCBBPTA7YXdhaXQgRDAoYS0xLFQsKCk9Pnt1cyhjLEEsYyxBKz1pLHMpLGIoKX0pLHVzKGMsKGEtMSkqaSxmLGcscyksYigpLGF3YWl0IEQwKGEsVCwoKT0+e2NvbnN0IG09ZltnK2ktMTZdJWE7Zm9yKGxldCB3PTA7dzxpO3crKylwW3ddPWZbZyt3XV5jW20qaSt3XTt1cyhwLDAsZixnLHMpLGIoKX0pfXJldHVybiBKZyhuLG8sZCxjLHApfWxldCBZZz0hMSxYZz0hMTtjb25zdCBRZz1hc3luYyBmdW5jdGlvbihuLGUsdCxhLHMscixvKXtyZXR1cm4gYXdhaXQgZFQobixlLHtOOnQscjphLHA6cyxka0xlbjpyLG9uUHJvZ3Jlc3M6b30pfSxlYj1mdW5jdGlvbihuLGUsdCxhLHMscil7cmV0dXJuIGZUKG4sZSx7Tjp0LHI6YSxwOnMsZGtMZW46cn0pfTtsZXQgdGI9UWcscmI9ZWI7YXN5bmMgZnVuY3Rpb24gTGEobixlLHQsYSxzLHIsbyl7Y29uc3QgaT1BZShuLCJwYXNzd2QiKSxjPUFlKGUsInNhbHQiKTtyZXR1cm4geWUoYXdhaXQgdGIoaSxjLHQsYSxzLHIsbykpfUxhLl89UWc7TGEubG9jaz1mdW5jdGlvbigpe1hnPSEwfTtMYS5yZWdpc3Rlcj1mdW5jdGlvbihuKXtpZihYZyl0aHJvdyBuZXcgRXJyb3IoInNjcnlwdCBpcyBsb2NrZWQiKTt0Yj1ufTtPYmplY3QuZnJlZXplKExhKTtmdW5jdGlvbiB6YShuLGUsdCxhLHMscil7Y29uc3Qgbz1BZShuLCJwYXNzd2QiKSxpPUFlKGUsInNhbHQiKTtyZXR1cm4geWUocmIobyxpLHQsYSxzLHIpKX16YS5fPWViO3phLmxvY2s9ZnVuY3Rpb24oKXtZZz0hMH07emEucmVnaXN0ZXI9ZnVuY3Rpb24obil7aWYoWWcpdGhyb3cgbmV3IEVycm9yKCJzY3J5cHRTeW5jIGlzIGxvY2tlZCIpO3JiPW59O09iamVjdC5mcmVlemUoemEpO2NvbnN0IG5iPWZ1bmN0aW9uKG4pe3JldHVybiBCZygic2hhMjU2IikudXBkYXRlKG4pLmRpZ2VzdCgpfSxvYj1mdW5jdGlvbihuKXtyZXR1cm4gQmcoInNoYTUxMiIpLnVwZGF0ZShuKS5kaWdlc3QoKX07bGV0IHNiPW5iLGFiPW9iLGliPSExLGNiPSExO2Z1bmN0aW9uIFV0KG4pe2NvbnN0IGU9QWUobiwiZGF0YSIpO3JldHVybiB5ZShzYihlKSl9VXQuXz1uYjtVdC5sb2NrPWZ1bmN0aW9uKCl7aWI9ITB9O1V0LnJlZ2lzdGVyPWZ1bmN0aW9uKG4pe2lmKGliKXRocm93IG5ldyBFcnJvcigic2hhMjU2IGlzIGxvY2tlZCIpO3NiPW59O09iamVjdC5mcmVlemUoVXQpO2Z1bmN0aW9uIEljKG4pe2NvbnN0IGU9QWUobiwiZGF0YSIpO3JldHVybiB5ZShhYihlKSl9SWMuXz1vYjtJYy5sb2NrPWZ1bmN0aW9uKCl7Y2I9ITB9O0ljLnJlZ2lzdGVyPWZ1bmN0aW9uKG4pe2lmKGNiKXRocm93IG5ldyBFcnJvcigic2hhNTEyIGlzIGxvY2tlZCIpO2FiPW59O09iamVjdC5mcmVlemUoVXQpOy8qISBub2JsZS1jdXJ2ZXMgLSBNSVQgTGljZW5zZSAoYykgMjAyMiBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKi9CaWdJbnQoMCk7Y29uc3QgcFQ9QmlnSW50KDEpLGhUPUJpZ0ludCgyKSxTYz1uPT5uIGluc3RhbmNlb2YgVWludDhBcnJheSxnVD1BcnJheS5mcm9tKHtsZW5ndGg6MjU2fSwobixlKT0+ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKTtmdW5jdGlvbiBVcyhuKXtpZighU2MobikpdGhyb3cgbmV3IEVycm9yKCJVaW50OEFycmF5IGV4cGVjdGVkIik7bGV0IGU9IiI7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0KyspZSs9Z1Rbblt0XV07cmV0dXJuIGV9ZnVuY3Rpb24gRmQobil7aWYodHlwZW9mIG4hPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiaGV4IHN0cmluZyBleHBlY3RlZCwgZ290ICIrdHlwZW9mIG4pO3JldHVybiBCaWdJbnQobj09PSIiPyIwIjpgMHgke259YCl9ZnVuY3Rpb24gdmEobil7aWYodHlwZW9mIG4hPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiaGV4IHN0cmluZyBleHBlY3RlZCwgZ290ICIrdHlwZW9mIG4pO2NvbnN0IGU9bi5sZW5ndGg7aWYoZSUyKXRocm93IG5ldyBFcnJvcigicGFkZGVkIGhleCBzdHJpbmcgZXhwZWN0ZWQsIGdvdCB1bnBhZGRlZCBoZXggb2YgbGVuZ3RoICIrZSk7Y29uc3QgdD1uZXcgVWludDhBcnJheShlLzIpO2ZvcihsZXQgYT0wO2E8dC5sZW5ndGg7YSsrKXtjb25zdCBzPWEqMixyPW4uc2xpY2UocyxzKzIpLG89TnVtYmVyLnBhcnNlSW50KHIsMTYpO2lmKE51bWJlci5pc05hTihvKXx8bzwwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBieXRlIHNlcXVlbmNlIik7dFthXT1vfXJldHVybiB0fWZ1bmN0aW9uIEJvKG4pe3JldHVybiBGZChVcyhuKSl9ZnVuY3Rpb24gTmQobil7aWYoIVNjKG4pKXRocm93IG5ldyBFcnJvcigiVWludDhBcnJheSBleHBlY3RlZCIpO3JldHVybiBGZChVcyhVaW50OEFycmF5LmZyb20obikucmV2ZXJzZSgpKSl9ZnVuY3Rpb24gRHMobixlKXtyZXR1cm4gdmEobi50b1N0cmluZygxNikucGFkU3RhcnQoZSoyLCIwIikpfWZ1bmN0aW9uIGtkKG4sZSl7cmV0dXJuIERzKG4sZSkucmV2ZXJzZSgpfWZ1bmN0aW9uIExyKG4sZSx0KXtsZXQgYTtpZih0eXBlb2YgZT09InN0cmluZyIpdHJ5e2E9dmEoZSl9Y2F0Y2gocil7dGhyb3cgbmV3IEVycm9yKGAke259IG11c3QgYmUgdmFsaWQgaGV4IHN0cmluZywgZ290ICIke2V9Ii4gQ2F1c2U6ICR7cn1gKX1lbHNlIGlmKFNjKGUpKWE9VWludDhBcnJheS5mcm9tKGUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGAke259IG11c3QgYmUgaGV4IHN0cmluZyBvciBVaW50OEFycmF5YCk7Y29uc3Qgcz1hLmxlbmd0aDtpZih0eXBlb2YgdD09Im51bWJlciImJnMhPT10KXRocm93IG5ldyBFcnJvcihgJHtufSBleHBlY3RlZCAke3R9IGJ5dGVzLCBnb3QgJHtzfWApO3JldHVybiBhfWZ1bmN0aW9uIENhKC4uLm4pe2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkobi5yZWR1Y2UoKGEscyk9PmErcy5sZW5ndGgsMCkpO2xldCB0PTA7cmV0dXJuIG4uZm9yRWFjaChhPT57aWYoIVNjKGEpKXRocm93IG5ldyBFcnJvcigiVWludDhBcnJheSBleHBlY3RlZCIpO2Uuc2V0KGEsdCksdCs9YS5sZW5ndGh9KSxlfWNvbnN0IFVkPW49PihoVDw8QmlnSW50KG4tMSkpLXBULFFjPW49Pm5ldyBVaW50OEFycmF5KG4pLEgwPW49PlVpbnQ4QXJyYXkuZnJvbShuKTtmdW5jdGlvbiB1YihuLGUsdCl7aWYodHlwZW9mIG4hPSJudW1iZXIifHxuPDIpdGhyb3cgbmV3IEVycm9yKCJoYXNoTGVuIG11c3QgYmUgYSBudW1iZXIiKTtpZih0eXBlb2YgZSE9Im51bWJlciJ8fGU8Mil0aHJvdyBuZXcgRXJyb3IoInFCeXRlTGVuIG11c3QgYmUgYSBudW1iZXIiKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImhtYWNGbiBtdXN0IGJlIGEgZnVuY3Rpb24iKTtsZXQgYT1RYyhuKSxzPVFjKG4pLHI9MDtjb25zdCBvPSgpPT57YS5maWxsKDEpLHMuZmlsbCgwKSxyPTB9LGk9KC4uLnApPT50KHMsYSwuLi5wKSxjPShwPVFjKCkpPT57cz1pKEgwKFswXSkscCksYT1pKCkscC5sZW5ndGghPT0wJiYocz1pKEgwKFsxXSkscCksYT1pKCkpfSxmPSgpPT57aWYocisrPj0xZTMpdGhyb3cgbmV3IEVycm9yKCJkcmJnOiB0cmllZCAxMDAwIHZhbHVlcyIpO2xldCBwPTA7Y29uc3QgYj1bXTtmb3IoO3A8ZTspe2E9aSgpO2NvbnN0IFQ9YS5zbGljZSgpO2IucHVzaChUKSxwKz1hLmxlbmd0aH1yZXR1cm4gQ2EoLi4uYil9O3JldHVybihwLGIpPT57bygpLGMocCk7bGV0IFQ7Zm9yKDshKFQ9YihmKCkpKTspYygpO3JldHVybiBvKCksVH19Y29uc3QgYlQ9e2JpZ2ludDpuPT50eXBlb2Ygbj09ImJpZ2ludCIsZnVuY3Rpb246bj0+dHlwZW9mIG49PSJmdW5jdGlvbiIsYm9vbGVhbjpuPT50eXBlb2Ygbj09ImJvb2xlYW4iLHN0cmluZzpuPT50eXBlb2Ygbj09InN0cmluZyIsc3RyaW5nT3JVaW50OEFycmF5Om49PnR5cGVvZiBuPT0ic3RyaW5nInx8biBpbnN0YW5jZW9mIFVpbnQ4QXJyYXksaXNTYWZlSW50ZWdlcjpuPT5OdW1iZXIuaXNTYWZlSW50ZWdlcihuKSxhcnJheTpuPT5BcnJheS5pc0FycmF5KG4pLGZpZWxkOihuLGUpPT5lLkZwLmlzVmFsaWQobiksaGFzaDpuPT50eXBlb2Ygbj09ImZ1bmN0aW9uIiYmTnVtYmVyLmlzU2FmZUludGVnZXIobi5vdXRwdXRMZW4pfTtmdW5jdGlvbiBqYShuLGUsdD17fSl7Y29uc3QgYT0ocyxyLG8pPT57Y29uc3QgaT1iVFtyXTtpZih0eXBlb2YgaSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmFsaWRhdG9yICIke3J9IiwgZXhwZWN0ZWQgZnVuY3Rpb25gKTtjb25zdCBjPW5bc107aWYoIShvJiZjPT09dm9pZCAwKSYmIWkoYyxuKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW0gJHtTdHJpbmcocyl9PSR7Y30gKCR7dHlwZW9mIGN9KSwgZXhwZWN0ZWQgJHtyfWApfTtmb3IoY29uc3RbcyxyXW9mIE9iamVjdC5lbnRyaWVzKGUpKWEocyxyLCExKTtmb3IoY29uc3RbcyxyXW9mIE9iamVjdC5lbnRyaWVzKHQpKWEocyxyLCEwKTtyZXR1cm4gbn1jb25zdCB5VD1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYml0TWFzazpVZCxieXRlc1RvSGV4OlVzLGJ5dGVzVG9OdW1iZXJCRTpCbyxieXRlc1RvTnVtYmVyTEU6TmQsY29uY2F0Qnl0ZXM6Q2EsY3JlYXRlSG1hY0RyYmc6dWIsZW5zdXJlQnl0ZXM6THIsaGV4VG9CeXRlczp2YSxoZXhUb051bWJlcjpGZCxudW1iZXJUb0J5dGVzQkU6RHMsbnVtYmVyVG9CeXRlc0xFOmtkLHZhbGlkYXRlT2JqZWN0OmphfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpOy8qISBub2JsZS1jdXJ2ZXMgLSBNSVQgTGljZW5zZSAoYykgMjAyMiBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKi9jb25zdCBtdD1CaWdJbnQoMCksaHQ9QmlnSW50KDEpLGhvPUJpZ0ludCgyKSx4VD1CaWdJbnQoMyksZWw9QmlnSW50KDQpLEswPUJpZ0ludCg1KSxaMD1CaWdJbnQoOCk7QmlnSW50KDkpO0JpZ0ludCgxNik7ZnVuY3Rpb24gUXQobixlKXtjb25zdCB0PW4lZTtyZXR1cm4gdD49bXQ/dDplK3R9ZnVuY3Rpb24gVFQobixlLHQpe2lmKHQ8PW10fHxlPG10KXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgcG93ZXIvbW9kdWxvID4gMCIpO2lmKHQ9PT1odClyZXR1cm4gbXQ7bGV0IGE9aHQ7Zm9yKDtlPm10OyllJmh0JiYoYT1hKm4ldCksbj1uKm4ldCxlPj49aHQ7cmV0dXJuIGF9ZnVuY3Rpb24gbXIobixlLHQpe2xldCBhPW47Zm9yKDtlLS0gPm10OylhKj1hLGElPXQ7cmV0dXJuIGF9ZnVuY3Rpb24gdGwobixlKXtpZihuPT09bXR8fGU8PW10KXRocm93IG5ldyBFcnJvcihgaW52ZXJ0OiBleHBlY3RlZCBwb3NpdGl2ZSBpbnRlZ2VycywgZ290IG49JHtufSBtb2Q9JHtlfWApO2xldCB0PVF0KG4sZSksYT1lLHM9bXQscj1odDtmb3IoO3QhPT1tdDspe2NvbnN0IGk9YS90LGM9YSV0LGY9cy1yKmk7YT10LHQ9YyxzPXIscj1mfWlmKGEhPT1odCl0aHJvdyBuZXcgRXJyb3IoImludmVydDogZG9lcyBub3QgZXhpc3QiKTtyZXR1cm4gUXQocyxlKX1mdW5jdGlvbiBBVChuKXtjb25zdCBlPShuLWh0KS9obztsZXQgdCxhLHM7Zm9yKHQ9bi1odCxhPTA7dCVobz09PW10O3QvPWhvLGErKyk7Zm9yKHM9aG87czxuJiZUVChzLGUsbikhPT1uLWh0O3MrKyk7aWYoYT09PTEpe2NvbnN0IG89KG4raHQpL2VsO3JldHVybiBmdW5jdGlvbihjLGYpe2NvbnN0IGQ9Yy5wb3coZixvKTtpZighYy5lcWwoYy5zcXIoZCksZikpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCIpO3JldHVybiBkfX1jb25zdCByPSh0K2h0KS9obztyZXR1cm4gZnVuY3Rpb24oaSxjKXtpZihpLnBvdyhjLGUpPT09aS5uZWcoaS5PTkUpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc3F1YXJlIHJvb3QiKTtsZXQgZj1hLGQ9aS5wb3coaS5tdWwoaS5PTkUscyksdCkscD1pLnBvdyhjLHIpLGI9aS5wb3coYyx0KTtmb3IoOyFpLmVxbChiLGkuT05FKTspe2lmKGkuZXFsKGIsaS5aRVJPKSlyZXR1cm4gaS5aRVJPO2xldCBUPTE7Zm9yKGxldCBnPWkuc3FyKGIpO1Q8ZiYmIWkuZXFsKGcsaS5PTkUpO1QrKylnPWkuc3FyKGcpO2NvbnN0IFc9aS5wb3coZCxodDw8QmlnSW50KGYtVC0xKSk7ZD1pLnNxcihXKSxwPWkubXVsKHAsVyksYj1pLm11bChiLGQpLGY9VH1yZXR1cm4gcH19ZnVuY3Rpb24gbVQobil7aWYobiVlbD09PXhUKXtjb25zdCBlPShuK2h0KS9lbDtyZXR1cm4gZnVuY3Rpb24oYSxzKXtjb25zdCByPWEucG93KHMsZSk7aWYoIWEuZXFsKGEuc3FyKHIpLHMpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc3F1YXJlIHJvb3QiKTtyZXR1cm4gcn19aWYobiVaMD09PUswKXtjb25zdCBlPShuLUswKS9aMDtyZXR1cm4gZnVuY3Rpb24oYSxzKXtjb25zdCByPWEubXVsKHMsaG8pLG89YS5wb3cocixlKSxpPWEubXVsKHMsbyksYz1hLm11bChhLm11bChpLGhvKSxvKSxmPWEubXVsKGksYS5zdWIoYyxhLk9ORSkpO2lmKCFhLmVxbChhLnNxcihmKSxzKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNxdWFyZSByb290Iik7cmV0dXJuIGZ9fXJldHVybiBBVChuKX1jb25zdCBQVD1bImNyZWF0ZSIsImlzVmFsaWQiLCJpczAiLCJuZWciLCJpbnYiLCJzcXJ0Iiwic3FyIiwiZXFsIiwiYWRkIiwic3ViIiwibXVsIiwicG93IiwiZGl2IiwiYWRkTiIsInN1Yk4iLCJtdWxOIiwic3FyTiJdO2Z1bmN0aW9uIHdUKG4pe2NvbnN0IGU9e09SREVSOiJiaWdpbnQiLE1BU0s6ImJpZ2ludCIsQllURVM6ImlzU2FmZUludGVnZXIiLEJJVFM6ImlzU2FmZUludGVnZXIifSx0PVBULnJlZHVjZSgoYSxzKT0+KGFbc109ImZ1bmN0aW9uIixhKSxlKTtyZXR1cm4gamEobix0KX1mdW5jdGlvbiB2VChuLGUsdCl7aWYodDxtdCl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHBvd2VyID4gMCIpO2lmKHQ9PT1tdClyZXR1cm4gbi5PTkU7aWYodD09PWh0KXJldHVybiBlO2xldCBhPW4uT05FLHM9ZTtmb3IoO3Q+bXQ7KXQmaHQmJihhPW4ubXVsKGEscykpLHM9bi5zcXIocyksdD4+PWh0O3JldHVybiBhfWZ1bmN0aW9uIENUKG4sZSl7Y29uc3QgdD1uZXcgQXJyYXkoZS5sZW5ndGgpLGE9ZS5yZWR1Y2UoKHIsbyxpKT0+bi5pczAobyk/cjoodFtpXT1yLG4ubXVsKHIsbykpLG4uT05FKSxzPW4uaW52KGEpO3JldHVybiBlLnJlZHVjZVJpZ2h0KChyLG8saSk9Pm4uaXMwKG8pP3I6KHRbaV09bi5tdWwocix0W2ldKSxuLm11bChyLG8pKSxzKSx0fWZ1bmN0aW9uIGxiKG4sZSl7Y29uc3QgdD1lIT09dm9pZCAwP2U6bi50b1N0cmluZygyKS5sZW5ndGgsYT1NYXRoLmNlaWwodC84KTtyZXR1cm57bkJpdExlbmd0aDp0LG5CeXRlTGVuZ3RoOmF9fWZ1bmN0aW9uIEVUKG4sZSx0PSExLGE9e30pe2lmKG48PW10KXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgRmllbGQgT1JERVIgPiAwLCBnb3QgJHtufWApO2NvbnN0e25CaXRMZW5ndGg6cyxuQnl0ZUxlbmd0aDpyfT1sYihuLGUpO2lmKHI+MjA0OCl0aHJvdyBuZXcgRXJyb3IoIkZpZWxkIGxlbmd0aHMgb3ZlciAyMDQ4IGJ5dGVzIGFyZSBub3Qgc3VwcG9ydGVkIik7Y29uc3Qgbz1tVChuKSxpPU9iamVjdC5mcmVlemUoe09SREVSOm4sQklUUzpzLEJZVEVTOnIsTUFTSzpVZChzKSxaRVJPOm10LE9ORTpodCxjcmVhdGU6Yz0+UXQoYyxuKSxpc1ZhbGlkOmM9PntpZih0eXBlb2YgYyE9ImJpZ2ludCIpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZpZWxkIGVsZW1lbnQ6IGV4cGVjdGVkIGJpZ2ludCwgZ290ICR7dHlwZW9mIGN9YCk7cmV0dXJuIG10PD1jJiZjPG59LGlzMDpjPT5jPT09bXQsaXNPZGQ6Yz0+KGMmaHQpPT09aHQsbmVnOmM9PlF0KC1jLG4pLGVxbDooYyxmKT0+Yz09PWYsc3FyOmM9PlF0KGMqYyxuKSxhZGQ6KGMsZik9PlF0KGMrZixuKSxzdWI6KGMsZik9PlF0KGMtZixuKSxtdWw6KGMsZik9PlF0KGMqZixuKSxwb3c6KGMsZik9PnZUKGksYyxmKSxkaXY6KGMsZik9PlF0KGMqdGwoZixuKSxuKSxzcXJOOmM9PmMqYyxhZGROOihjLGYpPT5jK2Ysc3ViTjooYyxmKT0+Yy1mLG11bE46KGMsZik9PmMqZixpbnY6Yz0+dGwoYyxuKSxzcXJ0OmEuc3FydHx8KGM9Pm8oaSxjKSksaW52ZXJ0QmF0Y2g6Yz0+Q1QoaSxjKSxjbW92OihjLGYsZCk9PmQ/ZjpjLHRvQnl0ZXM6Yz0+dD9rZChjLHIpOkRzKGMsciksZnJvbUJ5dGVzOmM9PntpZihjLmxlbmd0aCE9PXIpdGhyb3cgbmV3IEVycm9yKGBGcC5mcm9tQnl0ZXM6IGV4cGVjdGVkICR7cn0sIGdvdCAke2MubGVuZ3RofWApO3JldHVybiB0P05kKGMpOkJvKGMpfX0pO3JldHVybiBPYmplY3QuZnJlZXplKGkpfWZ1bmN0aW9uIGZiKG4pe2lmKHR5cGVvZiBuIT0iYmlnaW50Iil0aHJvdyBuZXcgRXJyb3IoImZpZWxkIG9yZGVyIG11c3QgYmUgYmlnaW50Iik7Y29uc3QgZT1uLnRvU3RyaW5nKDIpLmxlbmd0aDtyZXR1cm4gTWF0aC5jZWlsKGUvOCl9ZnVuY3Rpb24gZGIobil7Y29uc3QgZT1mYihuKTtyZXR1cm4gZStNYXRoLmNlaWwoZS8yKX1mdW5jdGlvbiBXVChuLGUsdD0hMSl7Y29uc3QgYT1uLmxlbmd0aCxzPWZiKGUpLHI9ZGIoZSk7aWYoYTwxNnx8YTxyfHxhPjEwMjQpdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCAke3J9LTEwMjQgYnl0ZXMgb2YgaW5wdXQsIGdvdCAke2F9YCk7Y29uc3Qgbz10P0JvKG4pOk5kKG4pLGk9UXQobyxlLWh0KStodDtyZXR1cm4gdD9rZChpLHMpOkRzKGkscyl9LyohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqL2NvbnN0IEJUPUJpZ0ludCgwKSxldT1CaWdJbnQoMSk7ZnVuY3Rpb24gSVQobixlKXtjb25zdCB0PShzLHIpPT57Y29uc3Qgbz1yLm5lZ2F0ZSgpO3JldHVybiBzP286cn0sYT1zPT57Y29uc3Qgcj1NYXRoLmNlaWwoZS9zKSsxLG89MioqKHMtMSk7cmV0dXJue3dpbmRvd3M6cix3aW5kb3dTaXplOm99fTtyZXR1cm57Y29uc3RUaW1lTmVnYXRlOnQsdW5zYWZlTGFkZGVyKHMscil7bGV0IG89bi5aRVJPLGk9cztmb3IoO3I+QlQ7KXImZXUmJihvPW8uYWRkKGkpKSxpPWkuZG91YmxlKCkscj4+PWV1O3JldHVybiBvfSxwcmVjb21wdXRlV2luZG93KHMscil7Y29uc3R7d2luZG93czpvLHdpbmRvd1NpemU6aX09YShyKSxjPVtdO2xldCBmPXMsZD1mO2ZvcihsZXQgcD0wO3A8bztwKyspe2Q9ZixjLnB1c2goZCk7Zm9yKGxldCBiPTE7YjxpO2IrKylkPWQuYWRkKGYpLGMucHVzaChkKTtmPWQuZG91YmxlKCl9cmV0dXJuIGN9LHdOQUYocyxyLG8pe2NvbnN0e3dpbmRvd3M6aSx3aW5kb3dTaXplOmN9PWEocyk7bGV0IGY9bi5aRVJPLGQ9bi5CQVNFO2NvbnN0IHA9QmlnSW50KDIqKnMtMSksYj0yKipzLFQ9QmlnSW50KHMpO2ZvcihsZXQgVz0wO1c8aTtXKyspe2NvbnN0IGc9VypjO2xldCBBPU51bWJlcihvJnApO28+Pj1ULEE+YyYmKEEtPWIsbys9ZXUpO2NvbnN0IG09Zyx3PWcrTWF0aC5hYnMoQSktMSxCPVclMiE9PTAsaz1BPDA7QT09PTA/ZD1kLmFkZCh0KEIsclttXSkpOmY9Zi5hZGQodChrLHJbd10pKX1yZXR1cm57cDpmLGY6ZH19LHdOQUZDYWNoZWQocyxyLG8saSl7Y29uc3QgYz1zLl9XSU5ET1dfU0laRXx8MTtsZXQgZj1yLmdldChzKTtyZXR1cm4gZnx8KGY9dGhpcy5wcmVjb21wdXRlV2luZG93KHMsYyksYyE9PTEmJnIuc2V0KHMsaShmKSkpLHRoaXMud05BRihjLGYsbyl9fX1mdW5jdGlvbiBwYihuKXtyZXR1cm4gd1Qobi5GcCksamEobix7bjoiYmlnaW50IixoOiJiaWdpbnQiLEd4OiJmaWVsZCIsR3k6ImZpZWxkIn0se25CaXRMZW5ndGg6ImlzU2FmZUludGVnZXIiLG5CeXRlTGVuZ3RoOiJpc1NhZmVJbnRlZ2VyIn0pLE9iamVjdC5mcmVlemUoey4uLmxiKG4ubixuLm5CaXRMZW5ndGgpLC4uLm4scDpuLkZwLk9SREVSfSl9LyohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqL2Z1bmN0aW9uIFNUKG4pe2NvbnN0IGU9cGIobik7amEoZSx7YToiZmllbGQiLGI6ImZpZWxkIn0se2FsbG93ZWRQcml2YXRlS2V5TGVuZ3RoczoiYXJyYXkiLHdyYXBQcml2YXRlS2V5OiJib29sZWFuIixpc1RvcnNpb25GcmVlOiJmdW5jdGlvbiIsY2xlYXJDb2ZhY3RvcjoiZnVuY3Rpb24iLGFsbG93SW5maW5pdHlQb2ludDoiYm9vbGVhbiIsZnJvbUJ5dGVzOiJmdW5jdGlvbiIsdG9CeXRlczoiZnVuY3Rpb24ifSk7Y29uc3R7ZW5kbzp0LEZwOmEsYTpzfT1lO2lmKHQpe2lmKCFhLmVxbChzLGEuWkVSTykpdGhyb3cgbmV3IEVycm9yKCJFbmRvbW9ycGhpc20gY2FuIG9ubHkgYmUgZGVmaW5lZCBmb3IgS29ibGl0eiBjdXJ2ZXMgdGhhdCBoYXZlIGE9MCIpO2lmKHR5cGVvZiB0IT0ib2JqZWN0Inx8dHlwZW9mIHQuYmV0YSE9ImJpZ2ludCJ8fHR5cGVvZiB0LnNwbGl0U2NhbGFyIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgZW5kb21vcnBoaXNtIHdpdGggYmV0YTogYmlnaW50IGFuZCBzcGxpdFNjYWxhcjogZnVuY3Rpb24iKX1yZXR1cm4gT2JqZWN0LmZyZWV6ZSh7Li4uZX0pfWNvbnN0e2J5dGVzVG9OdW1iZXJCRTpfVCxoZXhUb0J5dGVzOk9UfT15VCx5bz17RXJyOmNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZT0iIil7c3VwZXIoZSl9fSxfcGFyc2VJbnQobil7Y29uc3R7RXJyOmV9PXlvO2lmKG4ubGVuZ3RoPDJ8fG5bMF0hPT0yKXRocm93IG5ldyBlKCJJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyIHRhZyIpO2NvbnN0IHQ9blsxXSxhPW4uc3ViYXJyYXkoMix0KzIpO2lmKCF0fHxhLmxlbmd0aCE9PXQpdGhyb3cgbmV3IGUoIkludmFsaWQgc2lnbmF0dXJlIGludGVnZXI6IHdyb25nIGxlbmd0aCIpO2lmKGFbMF0mMTI4KXRocm93IG5ldyBlKCJJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyOiBuZWdhdGl2ZSIpO2lmKGFbMF09PT0wJiYhKGFbMV0mMTI4KSl0aHJvdyBuZXcgZSgiSW52YWxpZCBzaWduYXR1cmUgaW50ZWdlcjogdW5uZWNlc3NhcnkgbGVhZGluZyB6ZXJvIik7cmV0dXJue2Q6X1QoYSksbDpuLnN1YmFycmF5KHQrMil9fSx0b1NpZyhuKXtjb25zdHtFcnI6ZX09eW8sdD10eXBlb2Ygbj09InN0cmluZyI/T1Qobik6bjtpZighKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl0aHJvdyBuZXcgRXJyb3IoInVpOGEgZXhwZWN0ZWQiKTtsZXQgYT10Lmxlbmd0aDtpZihhPDJ8fHRbMF0hPTQ4KXRocm93IG5ldyBlKCJJbnZhbGlkIHNpZ25hdHVyZSB0YWciKTtpZih0WzFdIT09YS0yKXRocm93IG5ldyBlKCJJbnZhbGlkIHNpZ25hdHVyZTogaW5jb3JyZWN0IGxlbmd0aCIpO2NvbnN0e2Q6cyxsOnJ9PXlvLl9wYXJzZUludCh0LnN1YmFycmF5KDIpKSx7ZDpvLGw6aX09eW8uX3BhcnNlSW50KHIpO2lmKGkubGVuZ3RoKXRocm93IG5ldyBlKCJJbnZhbGlkIHNpZ25hdHVyZTogbGVmdCBieXRlcyBhZnRlciBwYXJzaW5nIik7cmV0dXJue3I6cyxzOm99fSxoZXhGcm9tU2lnKG4pe2NvbnN0IGU9Zj0+TnVtYmVyLnBhcnNlSW50KGZbMF0sMTYpJjg/IjAwIitmOmYsdD1mPT57Y29uc3QgZD1mLnRvU3RyaW5nKDE2KTtyZXR1cm4gZC5sZW5ndGgmMT9gMCR7ZH1gOmR9LGE9ZSh0KG4ucykpLHM9ZSh0KG4ucikpLHI9YS5sZW5ndGgvMixvPXMubGVuZ3RoLzIsaT10KHIpLGM9dChvKTtyZXR1cm5gMzAke3QobytyKzQpfTAyJHtjfSR7c30wMiR7aX0ke2F9YH19LFduPUJpZ0ludCgwKSxPcj1CaWdJbnQoMSk7QmlnSW50KDIpO2NvbnN0IHEwPUJpZ0ludCgzKTtCaWdJbnQoNCk7ZnVuY3Rpb24gUlQobil7Y29uc3QgZT1TVChuKSx7RnA6dH09ZSxhPWUudG9CeXRlc3x8KChXLGcsQSk9Pntjb25zdCBtPWcudG9BZmZpbmUoKTtyZXR1cm4gQ2EoVWludDhBcnJheS5mcm9tKFs0XSksdC50b0J5dGVzKG0ueCksdC50b0J5dGVzKG0ueSkpfSkscz1lLmZyb21CeXRlc3x8KFc9Pntjb25zdCBnPVcuc3ViYXJyYXkoMSksQT10LmZyb21CeXRlcyhnLnN1YmFycmF5KDAsdC5CWVRFUykpLG09dC5mcm9tQnl0ZXMoZy5zdWJhcnJheSh0LkJZVEVTLDIqdC5CWVRFUykpO3JldHVybnt4OkEseTptfX0pO2Z1bmN0aW9uIHIoVyl7Y29uc3R7YTpnLGI6QX09ZSxtPXQuc3FyKFcpLHc9dC5tdWwobSxXKTtyZXR1cm4gdC5hZGQodC5hZGQodyx0Lm11bChXLGcpKSxBKX1pZighdC5lcWwodC5zcXIoZS5HeSkscihlLkd4KSkpdGhyb3cgbmV3IEVycm9yKCJiYWQgZ2VuZXJhdG9yIHBvaW50OiBlcXVhdGlvbiBsZWZ0ICE9IHJpZ2h0Iik7ZnVuY3Rpb24gbyhXKXtyZXR1cm4gdHlwZW9mIFc9PSJiaWdpbnQiJiZXbjxXJiZXPGUubn1mdW5jdGlvbiBpKFcpe2lmKCFvKFcpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdmFsaWQgYmlnaW50OiAwIDwgYmlnaW50IDwgY3VydmUubiIpfWZ1bmN0aW9uIGMoVyl7Y29uc3R7YWxsb3dlZFByaXZhdGVLZXlMZW5ndGhzOmcsbkJ5dGVMZW5ndGg6QSx3cmFwUHJpdmF0ZUtleTptLG46d309ZTtpZihnJiZ0eXBlb2YgVyE9ImJpZ2ludCIpe2lmKFcgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYoVz1VcyhXKSksdHlwZW9mIFchPSJzdHJpbmcifHwhZy5pbmNsdWRlcyhXLmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGtleSIpO1c9Vy5wYWRTdGFydChBKjIsIjAiKX1sZXQgQjt0cnl7Qj10eXBlb2YgVz09ImJpZ2ludCI/VzpCbyhMcigicHJpdmF0ZSBrZXkiLFcsQSkpfWNhdGNoe3Rocm93IG5ldyBFcnJvcihgcHJpdmF0ZSBrZXkgbXVzdCBiZSAke0F9IGJ5dGVzLCBoZXggb3IgYmlnaW50LCBub3QgJHt0eXBlb2YgV31gKX1yZXR1cm4gbSYmKEI9UXQoQix3KSksaShCKSxCfWNvbnN0IGY9bmV3IE1hcDtmdW5jdGlvbiBkKFcpe2lmKCEoVyBpbnN0YW5jZW9mIHApKXRocm93IG5ldyBFcnJvcigiUHJvamVjdGl2ZVBvaW50IGV4cGVjdGVkIil9Y2xhc3MgcHtjb25zdHJ1Y3RvcihnLEEsbSl7aWYodGhpcy5weD1nLHRoaXMucHk9QSx0aGlzLnB6PW0sZz09bnVsbHx8IXQuaXNWYWxpZChnKSl0aHJvdyBuZXcgRXJyb3IoInggcmVxdWlyZWQiKTtpZihBPT1udWxsfHwhdC5pc1ZhbGlkKEEpKXRocm93IG5ldyBFcnJvcigieSByZXF1aXJlZCIpO2lmKG09PW51bGx8fCF0LmlzVmFsaWQobSkpdGhyb3cgbmV3IEVycm9yKCJ6IHJlcXVpcmVkIil9c3RhdGljIGZyb21BZmZpbmUoZyl7Y29uc3R7eDpBLHk6bX09Z3x8e307aWYoIWd8fCF0LmlzVmFsaWQoQSl8fCF0LmlzVmFsaWQobSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGFmZmluZSBwb2ludCIpO2lmKGcgaW5zdGFuY2VvZiBwKXRocm93IG5ldyBFcnJvcigicHJvamVjdGl2ZSBwb2ludCBub3QgYWxsb3dlZCIpO2NvbnN0IHc9Qj0+dC5lcWwoQix0LlpFUk8pO3JldHVybiB3KEEpJiZ3KG0pP3AuWkVSTzpuZXcgcChBLG0sdC5PTkUpfWdldCB4KCl7cmV0dXJuIHRoaXMudG9BZmZpbmUoKS54fWdldCB5KCl7cmV0dXJuIHRoaXMudG9BZmZpbmUoKS55fXN0YXRpYyBub3JtYWxpemVaKGcpe2NvbnN0IEE9dC5pbnZlcnRCYXRjaChnLm1hcChtPT5tLnB6KSk7cmV0dXJuIGcubWFwKChtLHcpPT5tLnRvQWZmaW5lKEFbd10pKS5tYXAocC5mcm9tQWZmaW5lKX1zdGF0aWMgZnJvbUhleChnKXtjb25zdCBBPXAuZnJvbUFmZmluZShzKExyKCJwb2ludEhleCIsZykpKTtyZXR1cm4gQS5hc3NlcnRWYWxpZGl0eSgpLEF9c3RhdGljIGZyb21Qcml2YXRlS2V5KGcpe3JldHVybiBwLkJBU0UubXVsdGlwbHkoYyhnKSl9X3NldFdpbmRvd1NpemUoZyl7dGhpcy5fV0lORE9XX1NJWkU9ZyxmLmRlbGV0ZSh0aGlzKX1hc3NlcnRWYWxpZGl0eSgpe2lmKHRoaXMuaXMwKCkpe2lmKGUuYWxsb3dJbmZpbml0eVBvaW50JiYhdC5pczAodGhpcy5weSkpcmV0dXJuO3Rocm93IG5ldyBFcnJvcigiYmFkIHBvaW50OiBaRVJPIil9Y29uc3R7eDpnLHk6QX09dGhpcy50b0FmZmluZSgpO2lmKCF0LmlzVmFsaWQoZyl8fCF0LmlzVmFsaWQoQSkpdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9pbnQ6IHggb3IgeSBub3QgRkUiKTtjb25zdCBtPXQuc3FyKEEpLHc9cihnKTtpZighdC5lcWwobSx3KSl0aHJvdyBuZXcgRXJyb3IoImJhZCBwb2ludDogZXF1YXRpb24gbGVmdCAhPSByaWdodCIpO2lmKCF0aGlzLmlzVG9yc2lvbkZyZWUoKSl0aHJvdyBuZXcgRXJyb3IoImJhZCBwb2ludDogbm90IGluIHByaW1lLW9yZGVyIHN1Ymdyb3VwIil9aGFzRXZlblkoKXtjb25zdHt5Omd9PXRoaXMudG9BZmZpbmUoKTtpZih0LmlzT2RkKXJldHVybiF0LmlzT2RkKGcpO3Rocm93IG5ldyBFcnJvcigiRmllbGQgZG9lc24ndCBzdXBwb3J0IGlzT2RkIil9ZXF1YWxzKGcpe2QoZyk7Y29uc3R7cHg6QSxweTptLHB6Ond9PXRoaXMse3B4OkIscHk6ayxwejpWfT1nLEw9dC5lcWwodC5tdWwoQSxWKSx0Lm11bChCLHcpKSxJPXQuZXFsKHQubXVsKG0sViksdC5tdWwoayx3KSk7cmV0dXJuIEwmJkl9bmVnYXRlKCl7cmV0dXJuIG5ldyBwKHRoaXMucHgsdC5uZWcodGhpcy5weSksdGhpcy5weil9ZG91YmxlKCl7Y29uc3R7YTpnLGI6QX09ZSxtPXQubXVsKEEscTApLHtweDp3LHB5OkIscHo6a309dGhpcztsZXQgVj10LlpFUk8sTD10LlpFUk8sST10LlpFUk8seT10Lm11bCh3LHcpLEU9dC5tdWwoQixCKSxDPXQubXVsKGssayksRj10Lm11bCh3LEIpO3JldHVybiBGPXQuYWRkKEYsRiksST10Lm11bCh3LGspLEk9dC5hZGQoSSxJKSxWPXQubXVsKGcsSSksTD10Lm11bChtLEMpLEw9dC5hZGQoVixMKSxWPXQuc3ViKEUsTCksTD10LmFkZChFLEwpLEw9dC5tdWwoVixMKSxWPXQubXVsKEYsViksST10Lm11bChtLEkpLEM9dC5tdWwoZyxDKSxGPXQuc3ViKHksQyksRj10Lm11bChnLEYpLEY9dC5hZGQoRixJKSxJPXQuYWRkKHkseSkseT10LmFkZChJLHkpLHk9dC5hZGQoeSxDKSx5PXQubXVsKHksRiksTD10LmFkZChMLHkpLEM9dC5tdWwoQixrKSxDPXQuYWRkKEMsQykseT10Lm11bChDLEYpLFY9dC5zdWIoVix5KSxJPXQubXVsKEMsRSksST10LmFkZChJLEkpLEk9dC5hZGQoSSxJKSxuZXcgcChWLEwsSSl9YWRkKGcpe2QoZyk7Y29uc3R7cHg6QSxweTptLHB6Ond9PXRoaXMse3B4OkIscHk6ayxwejpWfT1nO2xldCBMPXQuWkVSTyxJPXQuWkVSTyx5PXQuWkVSTztjb25zdCBFPWUuYSxDPXQubXVsKGUuYixxMCk7bGV0IEY9dC5tdWwoQSxCKSwkPXQubXVsKG0sayksTz10Lm11bCh3LFYpLFI9dC5hZGQoQSxtKSx4PXQuYWRkKEIsayk7Uj10Lm11bChSLHgpLHg9dC5hZGQoRiwkKSxSPXQuc3ViKFIseCkseD10LmFkZChBLHcpO2xldCB2PXQuYWRkKEIsVik7cmV0dXJuIHg9dC5tdWwoeCx2KSx2PXQuYWRkKEYsTykseD10LnN1Yih4LHYpLHY9dC5hZGQobSx3KSxMPXQuYWRkKGssViksdj10Lm11bCh2LEwpLEw9dC5hZGQoJCxPKSx2PXQuc3ViKHYsTCkseT10Lm11bChFLHgpLEw9dC5tdWwoQyxPKSx5PXQuYWRkKEwseSksTD10LnN1YigkLHkpLHk9dC5hZGQoJCx5KSxJPXQubXVsKEwseSksJD10LmFkZChGLEYpLCQ9dC5hZGQoJCxGKSxPPXQubXVsKEUsTykseD10Lm11bChDLHgpLCQ9dC5hZGQoJCxPKSxPPXQuc3ViKEYsTyksTz10Lm11bChFLE8pLHg9dC5hZGQoeCxPKSxGPXQubXVsKCQseCksST10LmFkZChJLEYpLEY9dC5tdWwodix4KSxMPXQubXVsKFIsTCksTD10LnN1YihMLEYpLEY9dC5tdWwoUiwkKSx5PXQubXVsKHYseSkseT10LmFkZCh5LEYpLG5ldyBwKEwsSSx5KX1zdWJ0cmFjdChnKXtyZXR1cm4gdGhpcy5hZGQoZy5uZWdhdGUoKSl9aXMwKCl7cmV0dXJuIHRoaXMuZXF1YWxzKHAuWkVSTyl9d05BRihnKXtyZXR1cm4gVC53TkFGQ2FjaGVkKHRoaXMsZixnLEE9Pntjb25zdCBtPXQuaW52ZXJ0QmF0Y2goQS5tYXAodz0+dy5weikpO3JldHVybiBBLm1hcCgodyxCKT0+dy50b0FmZmluZShtW0JdKSkubWFwKHAuZnJvbUFmZmluZSl9KX1tdWx0aXBseVVuc2FmZShnKXtjb25zdCBBPXAuWkVSTztpZihnPT09V24pcmV0dXJuIEE7aWYoaShnKSxnPT09T3IpcmV0dXJuIHRoaXM7Y29uc3R7ZW5kbzptfT1lO2lmKCFtKXJldHVybiBULnVuc2FmZUxhZGRlcih0aGlzLGcpO2xldHtrMW5lZzp3LGsxOkIsazJuZWc6ayxrMjpWfT1tLnNwbGl0U2NhbGFyKGcpLEw9QSxJPUEseT10aGlzO2Zvcig7Qj5Xbnx8Vj5XbjspQiZPciYmKEw9TC5hZGQoeSkpLFYmT3ImJihJPUkuYWRkKHkpKSx5PXkuZG91YmxlKCksQj4+PU9yLFY+Pj1PcjtyZXR1cm4gdyYmKEw9TC5uZWdhdGUoKSksayYmKEk9SS5uZWdhdGUoKSksST1uZXcgcCh0Lm11bChJLnB4LG0uYmV0YSksSS5weSxJLnB6KSxMLmFkZChJKX1tdWx0aXBseShnKXtpKGcpO2xldCBBPWcsbSx3O2NvbnN0e2VuZG86Qn09ZTtpZihCKXtjb25zdHtrMW5lZzprLGsxOlYsazJuZWc6TCxrMjpJfT1CLnNwbGl0U2NhbGFyKEEpO2xldHtwOnksZjpFfT10aGlzLndOQUYoVikse3A6QyxmOkZ9PXRoaXMud05BRihJKTt5PVQuY29uc3RUaW1lTmVnYXRlKGsseSksQz1ULmNvbnN0VGltZU5lZ2F0ZShMLEMpLEM9bmV3IHAodC5tdWwoQy5weCxCLmJldGEpLEMucHksQy5weiksbT15LmFkZChDKSx3PUUuYWRkKEYpfWVsc2V7Y29uc3R7cDprLGY6Vn09dGhpcy53TkFGKEEpO209ayx3PVZ9cmV0dXJuIHAubm9ybWFsaXplWihbbSx3XSlbMF19bXVsdGlwbHlBbmRBZGRVbnNhZmUoZyxBLG0pe2NvbnN0IHc9cC5CQVNFLEI9KFYsTCk9Pkw9PT1Xbnx8TD09PU9yfHwhVi5lcXVhbHModyk/Vi5tdWx0aXBseVVuc2FmZShMKTpWLm11bHRpcGx5KEwpLGs9Qih0aGlzLEEpLmFkZChCKGcsbSkpO3JldHVybiBrLmlzMCgpP3ZvaWQgMDprfXRvQWZmaW5lKGcpe2NvbnN0e3B4OkEscHk6bSxwejp3fT10aGlzLEI9dGhpcy5pczAoKTtnPT1udWxsJiYoZz1CP3QuT05FOnQuaW52KHcpKTtjb25zdCBrPXQubXVsKEEsZyksVj10Lm11bChtLGcpLEw9dC5tdWwodyxnKTtpZihCKXJldHVybnt4OnQuWkVSTyx5OnQuWkVST307aWYoIXQuZXFsKEwsdC5PTkUpKXRocm93IG5ldyBFcnJvcigiaW52WiB3YXMgaW52YWxpZCIpO3JldHVybnt4OmsseTpWfX1pc1RvcnNpb25GcmVlKCl7Y29uc3R7aDpnLGlzVG9yc2lvbkZyZWU6QX09ZTtpZihnPT09T3IpcmV0dXJuITA7aWYoQSlyZXR1cm4gQShwLHRoaXMpO3Rocm93IG5ldyBFcnJvcigiaXNUb3JzaW9uRnJlZSgpIGhhcyBub3QgYmVlbiBkZWNsYXJlZCBmb3IgdGhlIGVsbGlwdGljIGN1cnZlIil9Y2xlYXJDb2ZhY3Rvcigpe2NvbnN0e2g6ZyxjbGVhckNvZmFjdG9yOkF9PWU7cmV0dXJuIGc9PT1Pcj90aGlzOkE/QShwLHRoaXMpOnRoaXMubXVsdGlwbHlVbnNhZmUoZS5oKX10b1Jhd0J5dGVzKGc9ITApe3JldHVybiB0aGlzLmFzc2VydFZhbGlkaXR5KCksYShwLHRoaXMsZyl9dG9IZXgoZz0hMCl7cmV0dXJuIFVzKHRoaXMudG9SYXdCeXRlcyhnKSl9fXAuQkFTRT1uZXcgcChlLkd4LGUuR3ksdC5PTkUpLHAuWkVSTz1uZXcgcCh0LlpFUk8sdC5PTkUsdC5aRVJPKTtjb25zdCBiPWUubkJpdExlbmd0aCxUPUlUKHAsZS5lbmRvP01hdGguY2VpbChiLzIpOmIpO3JldHVybntDVVJWRTplLFByb2plY3RpdmVQb2ludDpwLG5vcm1Qcml2YXRlS2V5VG9TY2FsYXI6Yyx3ZWllcnN0cmFzc0VxdWF0aW9uOnIsaXNXaXRoaW5DdXJ2ZU9yZGVyOm99fWZ1bmN0aW9uIE1UKG4pe2NvbnN0IGU9cGIobik7cmV0dXJuIGphKGUse2hhc2g6Imhhc2giLGhtYWM6ImZ1bmN0aW9uIixyYW5kb21CeXRlczoiZnVuY3Rpb24ifSx7Yml0czJpbnQ6ImZ1bmN0aW9uIixiaXRzMmludF9tb2ROOiJmdW5jdGlvbiIsbG93UzoiYm9vbGVhbiJ9KSxPYmplY3QuZnJlZXplKHtsb3dTOiEwLC4uLmV9KX1mdW5jdGlvbiBGVChuKXtjb25zdCBlPU1UKG4pLHtGcDp0LG46YX09ZSxzPXQuQllURVMrMSxyPTIqdC5CWVRFUysxO2Z1bmN0aW9uIG8oeCl7cmV0dXJuIFduPHgmJng8dC5PUkRFUn1mdW5jdGlvbiBpKHgpe3JldHVybiBRdCh4LGEpfWZ1bmN0aW9uIGMoeCl7cmV0dXJuIHRsKHgsYSl9Y29uc3R7UHJvamVjdGl2ZVBvaW50OmYsbm9ybVByaXZhdGVLZXlUb1NjYWxhcjpkLHdlaWVyc3RyYXNzRXF1YXRpb246cCxpc1dpdGhpbkN1cnZlT3JkZXI6Yn09UlQoey4uLmUsdG9CeXRlcyh4LHYsXyl7Y29uc3QgTT12LnRvQWZmaW5lKCksej10LnRvQnl0ZXMoTS54KSxxPUNhO3JldHVybiBfP3EoVWludDhBcnJheS5mcm9tKFt2Lmhhc0V2ZW5ZKCk/MjozXSkseik6cShVaW50OEFycmF5LmZyb20oWzRdKSx6LHQudG9CeXRlcyhNLnkpKX0sZnJvbUJ5dGVzKHgpe2NvbnN0IHY9eC5sZW5ndGgsXz14WzBdLE09eC5zdWJhcnJheSgxKTtpZih2PT09cyYmKF89PT0yfHxfPT09Mykpe2NvbnN0IHo9Qm8oTSk7aWYoIW8oeikpdGhyb3cgbmV3IEVycm9yKCJQb2ludCBpcyBub3Qgb24gY3VydmUiKTtjb25zdCBxPXAoeik7bGV0IFE9dC5zcXJ0KHEpO2NvbnN0IGVlPShRJk9yKT09PU9yO3JldHVybihfJjEpPT09MSE9PWVlJiYoUT10Lm5lZyhRKSkse3g6eix5OlF9fWVsc2UgaWYodj09PXImJl89PT00KXtjb25zdCB6PXQuZnJvbUJ5dGVzKE0uc3ViYXJyYXkoMCx0LkJZVEVTKSkscT10LmZyb21CeXRlcyhNLnN1YmFycmF5KHQuQllURVMsMip0LkJZVEVTKSk7cmV0dXJue3g6eix5OnF9fWVsc2UgdGhyb3cgbmV3IEVycm9yKGBQb2ludCBvZiBsZW5ndGggJHt2fSB3YXMgaW52YWxpZC4gRXhwZWN0ZWQgJHtzfSBjb21wcmVzc2VkIGJ5dGVzIG9yICR7cn0gdW5jb21wcmVzc2VkIGJ5dGVzYCl9fSksVD14PT5VcyhEcyh4LGUubkJ5dGVMZW5ndGgpKTtmdW5jdGlvbiBXKHgpe2NvbnN0IHY9YT4+T3I7cmV0dXJuIHg+dn1mdW5jdGlvbiBnKHgpe3JldHVybiBXKHgpP2koLXgpOnh9Y29uc3QgQT0oeCx2LF8pPT5Cbyh4LnNsaWNlKHYsXykpO2NsYXNzIG17Y29uc3RydWN0b3IodixfLE0pe3RoaXMucj12LHRoaXMucz1fLHRoaXMucmVjb3Zlcnk9TSx0aGlzLmFzc2VydFZhbGlkaXR5KCl9c3RhdGljIGZyb21Db21wYWN0KHYpe2NvbnN0IF89ZS5uQnl0ZUxlbmd0aDtyZXR1cm4gdj1McigiY29tcGFjdFNpZ25hdHVyZSIsdixfKjIpLG5ldyBtKEEodiwwLF8pLEEodixfLDIqXykpfXN0YXRpYyBmcm9tREVSKHYpe2NvbnN0e3I6XyxzOk19PXlvLnRvU2lnKExyKCJERVIiLHYpKTtyZXR1cm4gbmV3IG0oXyxNKX1hc3NlcnRWYWxpZGl0eSgpe2lmKCFiKHRoaXMucikpdGhyb3cgbmV3IEVycm9yKCJyIG11c3QgYmUgMCA8IHIgPCBDVVJWRS5uIik7aWYoIWIodGhpcy5zKSl0aHJvdyBuZXcgRXJyb3IoInMgbXVzdCBiZSAwIDwgcyA8IENVUlZFLm4iKX1hZGRSZWNvdmVyeUJpdCh2KXtyZXR1cm4gbmV3IG0odGhpcy5yLHRoaXMucyx2KX1yZWNvdmVyUHVibGljS2V5KHYpe2NvbnN0e3I6XyxzOk0scmVjb3Zlcnk6en09dGhpcyxxPUkoTHIoIm1zZ0hhc2giLHYpKTtpZih6PT1udWxsfHwhWzAsMSwyLDNdLmluY2x1ZGVzKHopKXRocm93IG5ldyBFcnJvcigicmVjb3ZlcnkgaWQgaW52YWxpZCIpO2NvbnN0IFE9ej09PTJ8fHo9PT0zP18rZS5uOl87aWYoUT49dC5PUkRFUil0aHJvdyBuZXcgRXJyb3IoInJlY292ZXJ5IGlkIDIgb3IgMyBpbnZhbGlkIik7Y29uc3QgZWU9eiYxPyIwMyI6IjAyIixnZT1mLmZyb21IZXgoZWUrVChRKSksVGU9YyhRKSxwZT1pKC1xKlRlKSxmZT1pKE0qVGUpLGRlPWYuQkFTRS5tdWx0aXBseUFuZEFkZFVuc2FmZShnZSxwZSxmZSk7aWYoIWRlKXRocm93IG5ldyBFcnJvcigicG9pbnQgYXQgaW5maW5pZnkiKTtyZXR1cm4gZGUuYXNzZXJ0VmFsaWRpdHkoKSxkZX1oYXNIaWdoUygpe3JldHVybiBXKHRoaXMucyl9bm9ybWFsaXplUygpe3JldHVybiB0aGlzLmhhc0hpZ2hTKCk/bmV3IG0odGhpcy5yLGkoLXRoaXMucyksdGhpcy5yZWNvdmVyeSk6dGhpc310b0RFUlJhd0J5dGVzKCl7cmV0dXJuIHZhKHRoaXMudG9ERVJIZXgoKSl9dG9ERVJIZXgoKXtyZXR1cm4geW8uaGV4RnJvbVNpZyh7cjp0aGlzLnIsczp0aGlzLnN9KX10b0NvbXBhY3RSYXdCeXRlcygpe3JldHVybiB2YSh0aGlzLnRvQ29tcGFjdEhleCgpKX10b0NvbXBhY3RIZXgoKXtyZXR1cm4gVCh0aGlzLnIpK1QodGhpcy5zKX19Y29uc3Qgdz17aXNWYWxpZFByaXZhdGVLZXkoeCl7dHJ5e3JldHVybiBkKHgpLCEwfWNhdGNoe3JldHVybiExfX0sbm9ybVByaXZhdGVLZXlUb1NjYWxhcjpkLHJhbmRvbVByaXZhdGVLZXk6KCk9Pntjb25zdCB4PWRiKGUubik7cmV0dXJuIFdUKGUucmFuZG9tQnl0ZXMoeCksZS5uKX0scHJlY29tcHV0ZSh4PTgsdj1mLkJBU0Upe3JldHVybiB2Ll9zZXRXaW5kb3dTaXplKHgpLHYubXVsdGlwbHkoQmlnSW50KDMpKSx2fX07ZnVuY3Rpb24gQih4LHY9ITApe3JldHVybiBmLmZyb21Qcml2YXRlS2V5KHgpLnRvUmF3Qnl0ZXModil9ZnVuY3Rpb24gayh4KXtjb25zdCB2PXggaW5zdGFuY2VvZiBVaW50OEFycmF5LF89dHlwZW9mIHg9PSJzdHJpbmciLE09KHZ8fF8pJiZ4Lmxlbmd0aDtyZXR1cm4gdj9NPT09c3x8TT09PXI6Xz9NPT09MipzfHxNPT09MipyOnggaW5zdGFuY2VvZiBmfWZ1bmN0aW9uIFYoeCx2LF89ITApe2lmKGsoeCkpdGhyb3cgbmV3IEVycm9yKCJmaXJzdCBhcmcgbXVzdCBiZSBwcml2YXRlIGtleSIpO2lmKCFrKHYpKXRocm93IG5ldyBFcnJvcigic2Vjb25kIGFyZyBtdXN0IGJlIHB1YmxpYyBrZXkiKTtyZXR1cm4gZi5mcm9tSGV4KHYpLm11bHRpcGx5KGQoeCkpLnRvUmF3Qnl0ZXMoXyl9Y29uc3QgTD1lLmJpdHMyaW50fHxmdW5jdGlvbih4KXtjb25zdCB2PUJvKHgpLF89eC5sZW5ndGgqOC1lLm5CaXRMZW5ndGg7cmV0dXJuIF8+MD92Pj5CaWdJbnQoXyk6dn0sST1lLmJpdHMyaW50X21vZE58fGZ1bmN0aW9uKHgpe3JldHVybiBpKEwoeCkpfSx5PVVkKGUubkJpdExlbmd0aCk7ZnVuY3Rpb24gRSh4KXtpZih0eXBlb2YgeCE9ImJpZ2ludCIpdGhyb3cgbmV3IEVycm9yKCJiaWdpbnQgZXhwZWN0ZWQiKTtpZighKFduPD14JiZ4PHkpKXRocm93IG5ldyBFcnJvcihgYmlnaW50IGV4cGVjdGVkIDwgMl4ke2UubkJpdExlbmd0aH1gKTtyZXR1cm4gRHMoeCxlLm5CeXRlTGVuZ3RoKX1mdW5jdGlvbiBDKHgsdixfPUYpe2lmKFsicmVjb3ZlcmVkIiwiY2Fub25pY2FsIl0uc29tZShLZT0+S2UgaW4gXykpdGhyb3cgbmV3IEVycm9yKCJzaWduKCkgbGVnYWN5IG9wdGlvbnMgbm90IHN1cHBvcnRlZCIpO2NvbnN0e2hhc2g6TSxyYW5kb21CeXRlczp6fT1lO2xldHtsb3dTOnEscHJlaGFzaDpRLGV4dHJhRW50cm9weTplZX09XztxPT1udWxsJiYocT0hMCkseD1McigibXNnSGFzaCIseCksUSYmKHg9THIoInByZWhhc2hlZCBtc2dIYXNoIixNKHgpKSk7Y29uc3QgZ2U9SSh4KSxUZT1kKHYpLHBlPVtFKFRlKSxFKGdlKV07aWYoZWUhPW51bGwpe2NvbnN0IEtlPWVlPT09ITA/eih0LkJZVEVTKTplZTtwZS5wdXNoKExyKCJleHRyYUVudHJvcHkiLEtlKSl9Y29uc3QgZmU9Q2EoLi4ucGUpLGRlPWdlO2Z1bmN0aW9uIEJlKEtlKXtjb25zdCBRZT1MKEtlKTtpZighYihRZSkpcmV0dXJuO2NvbnN0IHJ0PWMoUWUpLEllPWYuQkFTRS5tdWx0aXBseShRZSkudG9BZmZpbmUoKSxNZT1pKEllLngpO2lmKE1lPT09V24pcmV0dXJuO2NvbnN0IE5lPWkocnQqaShkZStNZSpUZSkpO2lmKE5lPT09V24pcmV0dXJuO2xldCBfZT0oSWUueD09PU1lPzA6Mil8TnVtYmVyKEllLnkmT3IpLENlPU5lO3JldHVybiBxJiZXKE5lKSYmKENlPWcoTmUpLF9lXj0xKSxuZXcgbShNZSxDZSxfZSl9cmV0dXJue3NlZWQ6ZmUsazJzaWc6QmV9fWNvbnN0IEY9e2xvd1M6ZS5sb3dTLHByZWhhc2g6ITF9LCQ9e2xvd1M6ZS5sb3dTLHByZWhhc2g6ITF9O2Z1bmN0aW9uIE8oeCx2LF89Ril7Y29uc3R7c2VlZDpNLGsyc2lnOnp9PUMoeCx2LF8pLHE9ZTtyZXR1cm4gdWIocS5oYXNoLm91dHB1dExlbixxLm5CeXRlTGVuZ3RoLHEuaG1hYykoTSx6KX1mLkJBU0UuX3NldFdpbmRvd1NpemUoOCk7ZnVuY3Rpb24gUih4LHYsXyxNPSQpe2NvbnN0IHo9eDtpZih2PUxyKCJtc2dIYXNoIix2KSxfPUxyKCJwdWJsaWNLZXkiLF8pLCJzdHJpY3QiaW4gTSl0aHJvdyBuZXcgRXJyb3IoIm9wdGlvbnMuc3RyaWN0IHdhcyByZW5hbWVkIHRvIGxvd1MiKTtjb25zdHtsb3dTOnEscHJlaGFzaDpRfT1NO2xldCBlZSxnZTt0cnl7aWYodHlwZW9mIHo9PSJzdHJpbmcifHx6IGluc3RhbmNlb2YgVWludDhBcnJheSl0cnl7ZWU9bS5mcm9tREVSKHopfWNhdGNoKEllKXtpZighKEllIGluc3RhbmNlb2YgeW8uRXJyKSl0aHJvdyBJZTtlZT1tLmZyb21Db21wYWN0KHopfWVsc2UgaWYodHlwZW9mIHo9PSJvYmplY3QiJiZ0eXBlb2Ygei5yPT0iYmlnaW50IiYmdHlwZW9mIHoucz09ImJpZ2ludCIpe2NvbnN0e3I6SWUsczpNZX09ejtlZT1uZXcgbShJZSxNZSl9ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlBBUlNFIik7Z2U9Zi5mcm9tSGV4KF8pfWNhdGNoKEllKXtpZihJZS5tZXNzYWdlPT09IlBBUlNFIil0aHJvdyBuZXcgRXJyb3IoInNpZ25hdHVyZSBtdXN0IGJlIFNpZ25hdHVyZSBpbnN0YW5jZSwgVWludDhBcnJheSBvciBoZXggc3RyaW5nIik7cmV0dXJuITF9aWYocSYmZWUuaGFzSGlnaFMoKSlyZXR1cm4hMTtRJiYodj1lLmhhc2godikpO2NvbnN0e3I6VGUsczpwZX09ZWUsZmU9SSh2KSxkZT1jKHBlKSxCZT1pKGZlKmRlKSxLZT1pKFRlKmRlKSxRZT1mLkJBU0UubXVsdGlwbHlBbmRBZGRVbnNhZmUoZ2UsQmUsS2UpPy50b0FmZmluZSgpO3JldHVybiBRZT9pKFFlLngpPT09VGU6ITF9cmV0dXJue0NVUlZFOmUsZ2V0UHVibGljS2V5OkIsZ2V0U2hhcmVkU2VjcmV0OlYsc2lnbjpPLHZlcmlmeTpSLFByb2plY3RpdmVQb2ludDpmLFNpZ25hdHVyZTptLHV0aWxzOnd9fS8qISBub2JsZS1jdXJ2ZXMgLSBNSVQgTGljZW5zZSAoYykgMjAyMiBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKi9mdW5jdGlvbiBOVChuKXtyZXR1cm57aGFzaDpuLGhtYWM6KGUsLi4udCk9PkJjKG4sZSxoMSguLi50KSkscmFuZG9tQnl0ZXM6YjF9fWZ1bmN0aW9uIGtUKG4sZSl7Y29uc3QgdD1hPT5GVCh7Li4ubiwuLi5OVChhKX0pO3JldHVybiBPYmplY3QuZnJlZXplKHsuLi50KGUpLGNyZWF0ZTp0fSl9LyohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqL2NvbnN0IGhiPUJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWZmZmZmYzJmIiksSjA9QmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYmFhZWRjZTZhZjQ4YTAzYmJmZDI1ZThjZDAzNjQxNDEiKSxVVD1CaWdJbnQoMSkscmw9QmlnSW50KDIpLFkwPShuLGUpPT4obitlL3JsKS9lO2Z1bmN0aW9uIERUKG4pe2NvbnN0IGU9aGIsdD1CaWdJbnQoMyksYT1CaWdJbnQoNikscz1CaWdJbnQoMTEpLHI9QmlnSW50KDIyKSxvPUJpZ0ludCgyMyksaT1CaWdJbnQoNDQpLGM9QmlnSW50KDg4KSxmPW4qbipuJWUsZD1mKmYqbiVlLHA9bXIoZCx0LGUpKmQlZSxiPW1yKHAsdCxlKSpkJWUsVD1tcihiLHJsLGUpKmYlZSxXPW1yKFQscyxlKSpUJWUsZz1tcihXLHIsZSkqVyVlLEE9bXIoZyxpLGUpKmclZSxtPW1yKEEsYyxlKSpBJWUsdz1tcihtLGksZSkqZyVlLEI9bXIodyx0LGUpKmQlZSxrPW1yKEIsbyxlKSpXJWUsVj1tcihrLGEsZSkqZiVlLEw9bXIoVixybCxlKTtpZighbmwuZXFsKG5sLnNxcihMKSxuKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNxdWFyZSByb290Iik7cmV0dXJuIEx9Y29uc3Qgbmw9RVQoaGIsdm9pZCAwLHZvaWQgMCx7c3FydDpEVH0pLGpuPWtUKHthOkJpZ0ludCgwKSxiOkJpZ0ludCg3KSxGcDpubCxuOkowLEd4OkJpZ0ludCgiNTUwNjYyNjMwMjIyNzczNDM2Njk1Nzg3MTg4OTUxNjg1MzQzMjYyNTA2MDM0NTM3Nzc1OTQxNzU1MDAxODczNjAzODkxMTY3MjkyNDAiKSxHeTpCaWdJbnQoIjMyNjcwNTEwMDIwNzU4ODE2OTc4MDgzMDg1MTMwNTA3MDQzMTg0NDcxMjczMzgwNjU5MjQzMjc1OTM4OTA0MzM1NzU3MzM3NDgyNDI0IiksaDpCaWdJbnQoMSksbG93UzohMCxlbmRvOntiZXRhOkJpZ0ludCgiMHg3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlIiksc3BsaXRTY2FsYXI6bj0+e2NvbnN0IGU9SjAsdD1CaWdJbnQoIjB4MzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUiKSxhPS1VVCpCaWdJbnQoIjB4ZTQ0MzdlZDYwMTBlODgyODZmNTQ3ZmE5MGFiZmU0YzMiKSxzPUJpZ0ludCgiMHgxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDgiKSxyPXQsbz1CaWdJbnQoIjB4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiksaT1ZMChyKm4sZSksYz1ZMCgtYSpuLGUpO2xldCBmPVF0KG4taSp0LWMqcyxlKSxkPVF0KC1pKmEtYypyLGUpO2NvbnN0IHA9Zj5vLGI9ZD5vO2lmKHAmJihmPWUtZiksYiYmKGQ9ZS1kKSxmPm98fGQ+byl0aHJvdyBuZXcgRXJyb3IoInNwbGl0U2NhbGFyOiBFbmRvbW9ycGhpc20gZmFpbGVkLCBrPSIrbik7cmV0dXJue2sxbmVnOnAsazE6ZixrMm5lZzpiLGsyOmR9fX19LEhzKTtCaWdJbnQoMCk7am4uUHJvamVjdGl2ZVBvaW50O2NvbnN0IGdiPSIweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLFgwPSIweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCRUPWAZRXRoZXJldW0gU2lnbmVkIE1lc3NhZ2U6CmAsUTA9QmlnSW50KDApLGVwPUJpZ0ludCgxKSx0cD1CaWdJbnQoMikscnA9QmlnSW50KDI3KSxucD1CaWdJbnQoMjgpLEJpPUJpZ0ludCgzNSksWm89e307ZnVuY3Rpb24gb3Aobil7cmV0dXJuIEpuKFZ0KG4pLDMyKX12YXIgZHMscHMsaHMsd287Y29uc3QgRHI9Y2xhc3MgRHJ7Y29uc3RydWN0b3IoZSx0LGEscyl7UGUodGhpcyxkcyk7UGUodGhpcyxwcyk7UGUodGhpcyxocyk7UGUodGhpcyx3byk7dG8oZSxabywiU2lnbmF0dXJlIiksdWUodGhpcyxkcyx0KSx1ZSh0aGlzLHBzLGEpLHVlKHRoaXMsaHMscyksdWUodGhpcyx3byxudWxsKX1nZXQgcigpe3JldHVybiBZKHRoaXMsZHMpfXNldCByKGUpe0cobWEoZSk9PT0zMiwiaW52YWxpZCByIiwidmFsdWUiLGUpLHVlKHRoaXMsZHMseWUoZSkpfWdldCBzKCl7cmV0dXJuIFkodGhpcyxwcyl9c2V0IHMoZSl7RyhtYShlKT09PTMyLCJpbnZhbGlkIHMiLCJ2YWx1ZSIsZSk7Y29uc3QgdD15ZShlKTtHKHBhcnNlSW50KHQuc3Vic3RyaW5nKDAsMykpPDgsIm5vbi1jYW5vbmljYWwgcyIsInZhbHVlIix0KSx1ZSh0aGlzLHBzLHQpfWdldCB2KCl7cmV0dXJuIFkodGhpcyxocyl9c2V0IHYoZSl7Y29uc3QgdD1CdChlLCJ2YWx1ZSIpO0codD09PTI3fHx0PT09MjgsImludmFsaWQgdiIsInYiLGUpLHVlKHRoaXMsaHMsdCl9Z2V0IG5ldHdvcmtWKCl7cmV0dXJuIFkodGhpcyx3byl9Z2V0IGxlZ2FjeUNoYWluSWQoKXtjb25zdCBlPXRoaXMubmV0d29ya1Y7cmV0dXJuIGU9PW51bGw/bnVsbDpEci5nZXRDaGFpbklkKGUpfWdldCB5UGFyaXR5KCl7cmV0dXJuIHRoaXMudj09PTI3PzA6MX1nZXQgeVBhcml0eUFuZFMoKXtjb25zdCBlPUFlKHRoaXMucyk7cmV0dXJuIHRoaXMueVBhcml0eSYmKGVbMF18PTEyOCkseWUoZSl9Z2V0IGNvbXBhY3RTZXJpYWxpemVkKCl7cmV0dXJuIGV0KFt0aGlzLnIsdGhpcy55UGFyaXR5QW5kU10pfWdldCBzZXJpYWxpemVkKCl7cmV0dXJuIGV0KFt0aGlzLnIsdGhpcy5zLHRoaXMueVBhcml0eT8iMHgxYyI6IjB4MWIiXSl9W1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIildKCl7cmV0dXJuYFNpZ25hdHVyZSB7IHI6ICIke3RoaXMucn0iLCBzOiAiJHt0aGlzLnN9IiwgeVBhcml0eTogJHt0aGlzLnlQYXJpdHl9LCBuZXR3b3JrVjogJHt0aGlzLm5ldHdvcmtWfSB9YH1jbG9uZSgpe2NvbnN0IGU9bmV3IERyKFpvLHRoaXMucix0aGlzLnMsdGhpcy52KTtyZXR1cm4gdGhpcy5uZXR3b3JrViYmdWUoZSx3byx0aGlzLm5ldHdvcmtWKSxlfXRvSlNPTigpe2NvbnN0IGU9dGhpcy5uZXR3b3JrVjtyZXR1cm57X3R5cGU6InNpZ25hdHVyZSIsbmV0d29ya1Y6ZSE9bnVsbD9lLnRvU3RyaW5nKCk6bnVsbCxyOnRoaXMucixzOnRoaXMucyx2OnRoaXMudn19c3RhdGljIGdldENoYWluSWQoZSl7Y29uc3QgdD10dChlLCJ2Iik7cmV0dXJuIHQ9PXJwfHx0PT1ucD9RMDooRyh0Pj1CaSwiaW52YWxpZCBFSVAtMTU1IHYiLCJ2IixlKSwodC1CaSkvdHApfXN0YXRpYyBnZXRDaGFpbklkVihlLHQpe3JldHVybiB0dChlKSp0cCtCaWdJbnQoMzUrdC0yNyl9c3RhdGljIGdldE5vcm1hbGl6ZWRWKGUpe2NvbnN0IHQ9dHQoZSk7cmV0dXJuIHQ9PT1RMHx8dD09PXJwPzI3OnQ9PT1lcHx8dD09PW5wPzI4OihHKHQ+PUJpLCJpbnZhbGlkIHYiLCJ2IixlKSx0JmVwPzI3OjI4KX1zdGF0aWMgZnJvbShlKXtmdW5jdGlvbiB0KGYsZCl7RyhmLGQsInNpZ25hdHVyZSIsZSl9aWYoZT09bnVsbClyZXR1cm4gbmV3IERyKFpvLFgwLFgwLDI3KTtpZih0eXBlb2YgZT09InN0cmluZyIpe2NvbnN0IGY9QWUoZSwic2lnbmF0dXJlIik7aWYoZi5sZW5ndGg9PT02NCl7Y29uc3QgZD15ZShmLnNsaWNlKDAsMzIpKSxwPWYuc2xpY2UoMzIsNjQpLGI9cFswXSYxMjg/Mjg6Mjc7cmV0dXJuIHBbMF0mPTEyNyxuZXcgRHIoWm8sZCx5ZShwKSxiKX1pZihmLmxlbmd0aD09PTY1KXtjb25zdCBkPXllKGYuc2xpY2UoMCwzMikpLHA9Zi5zbGljZSgzMiw2NCk7dCgocFswXSYxMjgpPT09MCwibm9uLWNhbm9uaWNhbCBzIik7Y29uc3QgYj1Eci5nZXROb3JtYWxpemVkVihmWzY0XSk7cmV0dXJuIG5ldyBEcihabyxkLHllKHApLGIpfXQoITEsImludmFsaWQgcmF3IHNpZ25hdHVyZSBsZW5ndGgiKX1pZihlIGluc3RhbmNlb2YgRHIpcmV0dXJuIGUuY2xvbmUoKTtjb25zdCBhPWUucjt0KGEhPW51bGwsIm1pc3NpbmcgciIpO2NvbnN0IHM9b3AoYSkscj1mdW5jdGlvbihmLGQpe2lmKGYhPW51bGwpcmV0dXJuIG9wKGYpO2lmKGQhPW51bGwpe3QoTnQoZCwzMiksImludmFsaWQgeVBhcml0eUFuZFMiKTtjb25zdCBwPUFlKGQpO3JldHVybiBwWzBdJj0xMjcseWUocCl9dCghMSwibWlzc2luZyBzIil9KGUucyxlLnlQYXJpdHlBbmRTKTt0KChBZShyKVswXSYxMjgpPT0wLCJub24tY2Fub25pY2FsIHMiKTtjb25zdHtuZXR3b3JrVjpvLHY6aX09ZnVuY3Rpb24oZixkLHApe2lmKGYhPW51bGwpe2NvbnN0IGI9dHQoZik7cmV0dXJue25ldHdvcmtWOmI+PUJpP2I6dm9pZCAwLHY6RHIuZ2V0Tm9ybWFsaXplZFYoYil9fWlmKGQhPW51bGwpcmV0dXJuIHQoTnQoZCwzMiksImludmFsaWQgeVBhcml0eUFuZFMiKSx7djpBZShkKVswXSYxMjg/Mjg6Mjd9O2lmKHAhPW51bGwpe3N3aXRjaChCdChwLCJzaWcueVBhcml0eSIpKXtjYXNlIDA6cmV0dXJue3Y6Mjd9O2Nhc2UgMTpyZXR1cm57djoyOH19dCghMSwiaW52YWxpZCB5UGFyaXR5Iil9dCghMSwibWlzc2luZyB2Iil9KGUudixlLnlQYXJpdHlBbmRTLGUueVBhcml0eSksYz1uZXcgRHIoWm8scyxyLGkpO3JldHVybiBvJiZ1ZShjLHdvLG8pLHQoZS55UGFyaXR5PT1udWxsfHxCdChlLnlQYXJpdHksInNpZy55UGFyaXR5Iik9PT1jLnlQYXJpdHksInlQYXJpdHkgbWlzbWF0Y2giKSx0KGUueVBhcml0eUFuZFM9PW51bGx8fGUueVBhcml0eUFuZFM9PT1jLnlQYXJpdHlBbmRTLCJ5UGFyaXR5QW5kUyBtaXNtYXRjaCIpLGN9fTtkcz1uZXcgV2Vha01hcCxwcz1uZXcgV2Vha01hcCxocz1uZXcgV2Vha01hcCx3bz1uZXcgV2Vha01hcDtsZXQgS3Q9RHI7dmFyIHduO2NvbnN0IGJvPWNsYXNzIGJve2NvbnN0cnVjdG9yKGUpe1BlKHRoaXMsd24pO0cobWEoZSk9PT0zMiwiaW52YWxpZCBwcml2YXRlIGtleSIsInByaXZhdGVLZXkiLCJbUkVEQUNURURdIiksdWUodGhpcyx3bix5ZShlKSl9Z2V0IHByaXZhdGVLZXkoKXtyZXR1cm4gWSh0aGlzLHduKX1nZXQgcHVibGljS2V5KCl7cmV0dXJuIGJvLmNvbXB1dGVQdWJsaWNLZXkoWSh0aGlzLHduKSl9Z2V0IGNvbXByZXNzZWRQdWJsaWNLZXkoKXtyZXR1cm4gYm8uY29tcHV0ZVB1YmxpY0tleShZKHRoaXMsd24pLCEwKX1zaWduKGUpe0cobWEoZSk9PT0zMiwiaW52YWxpZCBkaWdlc3QgbGVuZ3RoIiwiZGlnZXN0IixlKTtjb25zdCB0PWpuLnNpZ24oRnQoZSksRnQoWSh0aGlzLHduKSkse2xvd1M6ITB9KTtyZXR1cm4gS3QuZnJvbSh7cjpLcih0LnIsMzIpLHM6S3IodC5zLDMyKSx2OnQucmVjb3Zlcnk/Mjg6Mjd9KX1jb21wdXRlU2hhcmVkU2VjcmV0KGUpe2NvbnN0IHQ9Ym8uY29tcHV0ZVB1YmxpY0tleShlKTtyZXR1cm4geWUoam4uZ2V0U2hhcmVkU2VjcmV0KEZ0KFkodGhpcyx3bikpLEFlKHQpLCExKSl9c3RhdGljIGNvbXB1dGVQdWJsaWNLZXkoZSx0KXtsZXQgYT1BZShlLCJrZXkiKTtpZihhLmxlbmd0aD09PTMyKXtjb25zdCByPWpuLmdldFB1YmxpY0tleShhLCEhdCk7cmV0dXJuIHllKHIpfWlmKGEubGVuZ3RoPT09NjQpe2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoNjUpO3JbMF09NCxyLnNldChhLDEpLGE9cn1jb25zdCBzPWpuLlByb2plY3RpdmVQb2ludC5mcm9tSGV4KGEpO3JldHVybiB5ZShzLnRvUmF3Qnl0ZXModCkpfXN0YXRpYyByZWNvdmVyUHVibGljS2V5KGUsdCl7RyhtYShlKT09PTMyLCJpbnZhbGlkIGRpZ2VzdCBsZW5ndGgiLCJkaWdlc3QiLGUpO2NvbnN0IGE9S3QuZnJvbSh0KTtsZXQgcz1qbi5TaWduYXR1cmUuZnJvbUNvbXBhY3QoRnQoZXQoW2EucixhLnNdKSkpO3M9cy5hZGRSZWNvdmVyeUJpdChhLnlQYXJpdHkpO2NvbnN0IHI9cy5yZWNvdmVyUHVibGljS2V5KEZ0KGUpKTtyZXR1cm4gRyhyIT1udWxsLCJpbnZhbGlkIHNpZ25hdXRyZSBmb3IgZGlnZXN0Iiwic2lnbmF0dXJlIix0KSwiMHgiK3IudG9IZXgoITEpfXN0YXRpYyBhZGRQb2ludHMoZSx0LGEpe2NvbnN0IHM9am4uUHJvamVjdGl2ZVBvaW50LmZyb21IZXgoYm8uY29tcHV0ZVB1YmxpY0tleShlKS5zdWJzdHJpbmcoMikpLHI9am4uUHJvamVjdGl2ZVBvaW50LmZyb21IZXgoYm8uY29tcHV0ZVB1YmxpY0tleSh0KS5zdWJzdHJpbmcoMikpO3JldHVybiIweCIrcy5hZGQocikudG9IZXgoISFhKX19O3duPW5ldyBXZWFrTWFwO2xldCBicj1ibztjb25zdCBMVD1CaWdJbnQoMCkselQ9QmlnSW50KDM2KTtmdW5jdGlvbiBzcChuKXtuPW4udG9Mb3dlckNhc2UoKTtjb25zdCBlPW4uc3Vic3RyaW5nKDIpLnNwbGl0KCIiKSx0PW5ldyBVaW50OEFycmF5KDQwKTtmb3IobGV0IHM9MDtzPDQwO3MrKyl0W3NdPWVbc10uY2hhckNvZGVBdCgwKTtjb25zdCBhPUFlKCRlKHQpKTtmb3IobGV0IHM9MDtzPDQwO3MrPTIpYVtzPj4xXT4+ND49OCYmKGVbc109ZVtzXS50b1VwcGVyQ2FzZSgpKSwoYVtzPj4xXSYxNSk+PTgmJihlW3MrMV09ZVtzKzFdLnRvVXBwZXJDYXNlKCkpO3JldHVybiIweCIrZS5qb2luKCIiKX1jb25zdCBEZD17fTtmb3IobGV0IG49MDtuPDEwO24rKylEZFtTdHJpbmcobildPVN0cmluZyhuKTtmb3IobGV0IG49MDtuPDI2O24rKylEZFtTdHJpbmcuZnJvbUNoYXJDb2RlKDY1K24pXT1TdHJpbmcoMTArbik7Y29uc3QgYXA9MTU7ZnVuY3Rpb24galQobil7bj1uLnRvVXBwZXJDYXNlKCksbj1uLnN1YnN0cmluZyg0KStuLnN1YnN0cmluZygwLDIpKyIwMCI7bGV0IGU9bi5zcGxpdCgiIikubWFwKGE9PkRkW2FdKS5qb2luKCIiKTtmb3IoO2UubGVuZ3RoPj1hcDspe2xldCBhPWUuc3Vic3RyaW5nKDAsYXApO2U9cGFyc2VJbnQoYSwxMCklOTcrZS5zdWJzdHJpbmcoYS5sZW5ndGgpfWxldCB0PVN0cmluZyg5OC1wYXJzZUludChlLDEwKSU5Nyk7Zm9yKDt0Lmxlbmd0aDwyOyl0PSIwIit0O3JldHVybiB0fWNvbnN0IFZUPWZ1bmN0aW9uKCl7Y29uc3Qgbj17fTtmb3IobGV0IGU9MDtlPDM2O2UrKyl7Y29uc3QgdD0iMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IltlXTtuW3RdPUJpZ0ludChlKX1yZXR1cm4gbn0oKTtmdW5jdGlvbiBHVChuKXtuPW4udG9Mb3dlckNhc2UoKTtsZXQgZT1MVDtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyllPWUqelQrVlRbblt0XV07cmV0dXJuIGV9ZnVuY3Rpb24geXIobil7aWYoRyh0eXBlb2Ygbj09InN0cmluZyIsImludmFsaWQgYWRkcmVzcyIsImFkZHJlc3MiLG4pLG4ubWF0Y2goL14oMHgpP1swLTlhLWZBLUZdezQwfSQvKSl7bi5zdGFydHNXaXRoKCIweCIpfHwobj0iMHgiK24pO2NvbnN0IGU9c3Aobik7cmV0dXJuIEcoIW4ubWF0Y2goLyhbQS1GXS4qW2EtZl0pfChbYS1mXS4qW0EtRl0pLyl8fGU9PT1uLCJiYWQgYWRkcmVzcyBjaGVja3N1bSIsImFkZHJlc3MiLG4pLGV9aWYobi5tYXRjaCgvXlhFWzAtOV17Mn1bMC05QS1aYS16XXszMCwzMX0kLykpe0cobi5zdWJzdHJpbmcoMiw0KT09PWpUKG4pLCJiYWQgaWNhcCBjaGVja3N1bSIsImFkZHJlc3MiLG4pO2xldCBlPUdUKG4uc3Vic3RyaW5nKDQpKS50b1N0cmluZygxNik7Zm9yKDtlLmxlbmd0aDw0MDspZT0iMCIrZTtyZXR1cm4gc3AoIjB4IitlKX1HKCExLCJpbnZhbGlkIGFkZHJlc3MiLCJhZGRyZXNzIixuKX1mdW5jdGlvbiBIVChuKXtyZXR1cm4gbiYmdHlwZW9mIG4uZ2V0QWRkcmVzcz09ImZ1bmN0aW9uIn1hc3luYyBmdW5jdGlvbiB0dShuLGUpe2NvbnN0IHQ9YXdhaXQgZTtyZXR1cm4odD09bnVsbHx8dD09PSIweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKSYmKFJlKHR5cGVvZiBuIT0ic3RyaW5nIiwidW5jb25maWd1cmVkIG5hbWUiLCJVTkNPTkZJR1VSRURfTkFNRSIse3ZhbHVlOm59KSxHKCExLCJpbnZhbGlkIEFkZHJlc3NMaWtlIHZhbHVlOyBkaWQgbm90IHJlc29sdmUgdG8gYSB2YWx1ZSBhZGRyZXNzIiwidGFyZ2V0IixuKSkseXIodCl9ZnVuY3Rpb24gaWMobixlKXtpZih0eXBlb2Ygbj09InN0cmluZyIpcmV0dXJuIG4ubWF0Y2goL14weFswLTlhLWZdezQwfSQvaSk/eXIobik6KFJlKGUhPW51bGwsIkVOUyByZXNvbHV0aW9uIHJlcXVpcmVzIGEgcHJvdmlkZXIiLCJVTlNVUFBPUlRFRF9PUEVSQVRJT04iLHtvcGVyYXRpb246InJlc29sdmVOYW1lIn0pLHR1KG4sZS5yZXNvbHZlTmFtZShuKSkpO2lmKEhUKG4pKXJldHVybiB0dShuLG4uZ2V0QWRkcmVzcygpKTtpZihuJiZ0eXBlb2Ygbi50aGVuPT0iZnVuY3Rpb24iKXJldHVybiB0dShuLG4pO0coITEsInVuc3VwcG9ydGVkIGFkZHJlc3NhYmxlIHZhbHVlIiwidGFyZ2V0IixuKX1jb25zdCB4bj17fTtmdW5jdGlvbiBtZShuLGUpe2xldCB0PSExO3JldHVybiBlPDAmJih0PSEwLGUqPS0xKSxuZXcgbnIoeG4sYCR7dD8iIjoidSJ9aW50JHtlfWAsbix7c2lnbmVkOnQsd2lkdGg6ZX0pfWZ1bmN0aW9uIFhlKG4sZSl7cmV0dXJuIG5ldyBucih4bixgYnl0ZXMke2V8fCIifWAsbix7c2l6ZTplfSl9Y29uc3QgaXA9U3ltYm9sLmZvcigiX2V0aGVyc190eXBlZCIpO3ZhciB2bztjb25zdCBUbj1jbGFzcyBUbntjb25zdHJ1Y3RvcihlLHQsYSxzKXtaKHRoaXMsInR5cGUiKTtaKHRoaXMsInZhbHVlIik7UGUodGhpcyx2byk7Wih0aGlzLCJfdHlwZWRTeW1ib2wiKTtzPT1udWxsJiYocz1udWxsKSx0byh4bixlLCJUeXBlZCIpLHplKHRoaXMse190eXBlZFN5bWJvbDppcCx0eXBlOnQsdmFsdWU6YX0pLHVlKHRoaXMsdm8scyksdGhpcy5mb3JtYXQoKX1mb3JtYXQoKXtpZih0aGlzLnR5cGU9PT0iYXJyYXkiKXRocm93IG5ldyBFcnJvcigiIik7aWYodGhpcy50eXBlPT09ImR5bmFtaWNBcnJheSIpdGhyb3cgbmV3IEVycm9yKCIiKTtyZXR1cm4gdGhpcy50eXBlPT09InR1cGxlIj9gdHVwbGUoJHt0aGlzLnZhbHVlLm1hcChlPT5lLmZvcm1hdCgpKS5qb2luKCIsIil9KWA6dGhpcy50eXBlfWRlZmF1bHRWYWx1ZSgpe3JldHVybiAwfW1pblZhbHVlKCl7cmV0dXJuIDB9bWF4VmFsdWUoKXtyZXR1cm4gMH1pc0JpZ0ludCgpe3JldHVybiEhdGhpcy50eXBlLm1hdGNoKC9edT9pbnRbMC05XSskLyl9aXNEYXRhKCl7cmV0dXJuIHRoaXMudHlwZS5zdGFydHNXaXRoKCJieXRlcyIpfWlzU3RyaW5nKCl7cmV0dXJuIHRoaXMudHlwZT09PSJzdHJpbmcifWdldCB0dXBsZU5hbWUoKXtpZih0aGlzLnR5cGUhPT0idHVwbGUiKXRocm93IFR5cGVFcnJvcigibm90IGEgdHVwbGUiKTtyZXR1cm4gWSh0aGlzLHZvKX1nZXQgYXJyYXlMZW5ndGgoKXtpZih0aGlzLnR5cGUhPT0iYXJyYXkiKXRocm93IFR5cGVFcnJvcigibm90IGFuIGFycmF5Iik7cmV0dXJuIFkodGhpcyx2byk9PT0hMD8tMTpZKHRoaXMsdm8pPT09ITE/dGhpcy52YWx1ZS5sZW5ndGg6bnVsbH1zdGF0aWMgZnJvbShlLHQpe3JldHVybiBuZXcgVG4oeG4sZSx0KX1zdGF0aWMgdWludDgoZSl7cmV0dXJuIG1lKGUsOCl9c3RhdGljIHVpbnQxNihlKXtyZXR1cm4gbWUoZSwxNil9c3RhdGljIHVpbnQyNChlKXtyZXR1cm4gbWUoZSwyNCl9c3RhdGljIHVpbnQzMihlKXtyZXR1cm4gbWUoZSwzMil9c3RhdGljIHVpbnQ0MChlKXtyZXR1cm4gbWUoZSw0MCl9c3RhdGljIHVpbnQ0OChlKXtyZXR1cm4gbWUoZSw0OCl9c3RhdGljIHVpbnQ1NihlKXtyZXR1cm4gbWUoZSw1Nil9c3RhdGljIHVpbnQ2NChlKXtyZXR1cm4gbWUoZSw2NCl9c3RhdGljIHVpbnQ3MihlKXtyZXR1cm4gbWUoZSw3Mil9c3RhdGljIHVpbnQ4MChlKXtyZXR1cm4gbWUoZSw4MCl9c3RhdGljIHVpbnQ4OChlKXtyZXR1cm4gbWUoZSw4OCl9c3RhdGljIHVpbnQ5NihlKXtyZXR1cm4gbWUoZSw5Nil9c3RhdGljIHVpbnQxMDQoZSl7cmV0dXJuIG1lKGUsMTA0KX1zdGF0aWMgdWludDExMihlKXtyZXR1cm4gbWUoZSwxMTIpfXN0YXRpYyB1aW50MTIwKGUpe3JldHVybiBtZShlLDEyMCl9c3RhdGljIHVpbnQxMjgoZSl7cmV0dXJuIG1lKGUsMTI4KX1zdGF0aWMgdWludDEzNihlKXtyZXR1cm4gbWUoZSwxMzYpfXN0YXRpYyB1aW50MTQ0KGUpe3JldHVybiBtZShlLDE0NCl9c3RhdGljIHVpbnQxNTIoZSl7cmV0dXJuIG1lKGUsMTUyKX1zdGF0aWMgdWludDE2MChlKXtyZXR1cm4gbWUoZSwxNjApfXN0YXRpYyB1aW50MTY4KGUpe3JldHVybiBtZShlLDE2OCl9c3RhdGljIHVpbnQxNzYoZSl7cmV0dXJuIG1lKGUsMTc2KX1zdGF0aWMgdWludDE4NChlKXtyZXR1cm4gbWUoZSwxODQpfXN0YXRpYyB1aW50MTkyKGUpe3JldHVybiBtZShlLDE5Mil9c3RhdGljIHVpbnQyMDAoZSl7cmV0dXJuIG1lKGUsMjAwKX1zdGF0aWMgdWludDIwOChlKXtyZXR1cm4gbWUoZSwyMDgpfXN0YXRpYyB1aW50MjE2KGUpe3JldHVybiBtZShlLDIxNil9c3RhdGljIHVpbnQyMjQoZSl7cmV0dXJuIG1lKGUsMjI0KX1zdGF0aWMgdWludDIzMihlKXtyZXR1cm4gbWUoZSwyMzIpfXN0YXRpYyB1aW50MjQwKGUpe3JldHVybiBtZShlLDI0MCl9c3RhdGljIHVpbnQyNDgoZSl7cmV0dXJuIG1lKGUsMjQ4KX1zdGF0aWMgdWludDI1NihlKXtyZXR1cm4gbWUoZSwyNTYpfXN0YXRpYyB1aW50KGUpe3JldHVybiBtZShlLDI1Nil9c3RhdGljIGludDgoZSl7cmV0dXJuIG1lKGUsLTgpfXN0YXRpYyBpbnQxNihlKXtyZXR1cm4gbWUoZSwtMTYpfXN0YXRpYyBpbnQyNChlKXtyZXR1cm4gbWUoZSwtMjQpfXN0YXRpYyBpbnQzMihlKXtyZXR1cm4gbWUoZSwtMzIpfXN0YXRpYyBpbnQ0MChlKXtyZXR1cm4gbWUoZSwtNDApfXN0YXRpYyBpbnQ0OChlKXtyZXR1cm4gbWUoZSwtNDgpfXN0YXRpYyBpbnQ1NihlKXtyZXR1cm4gbWUoZSwtNTYpfXN0YXRpYyBpbnQ2NChlKXtyZXR1cm4gbWUoZSwtNjQpfXN0YXRpYyBpbnQ3MihlKXtyZXR1cm4gbWUoZSwtNzIpfXN0YXRpYyBpbnQ4MChlKXtyZXR1cm4gbWUoZSwtODApfXN0YXRpYyBpbnQ4OChlKXtyZXR1cm4gbWUoZSwtODgpfXN0YXRpYyBpbnQ5NihlKXtyZXR1cm4gbWUoZSwtOTYpfXN0YXRpYyBpbnQxMDQoZSl7cmV0dXJuIG1lKGUsLTEwNCl9c3RhdGljIGludDExMihlKXtyZXR1cm4gbWUoZSwtMTEyKX1zdGF0aWMgaW50MTIwKGUpe3JldHVybiBtZShlLC0xMjApfXN0YXRpYyBpbnQxMjgoZSl7cmV0dXJuIG1lKGUsLTEyOCl9c3RhdGljIGludDEzNihlKXtyZXR1cm4gbWUoZSwtMTM2KX1zdGF0aWMgaW50MTQ0KGUpe3JldHVybiBtZShlLC0xNDQpfXN0YXRpYyBpbnQxNTIoZSl7cmV0dXJuIG1lKGUsLTE1Mil9c3RhdGljIGludDE2MChlKXtyZXR1cm4gbWUoZSwtMTYwKX1zdGF0aWMgaW50MTY4KGUpe3JldHVybiBtZShlLC0xNjgpfXN0YXRpYyBpbnQxNzYoZSl7cmV0dXJuIG1lKGUsLTE3Nil9c3RhdGljIGludDE4NChlKXtyZXR1cm4gbWUoZSwtMTg0KX1zdGF0aWMgaW50MTkyKGUpe3JldHVybiBtZShlLC0xOTIpfXN0YXRpYyBpbnQyMDAoZSl7cmV0dXJuIG1lKGUsLTIwMCl9c3RhdGljIGludDIwOChlKXtyZXR1cm4gbWUoZSwtMjA4KX1zdGF0aWMgaW50MjE2KGUpe3JldHVybiBtZShlLC0yMTYpfXN0YXRpYyBpbnQyMjQoZSl7cmV0dXJuIG1lKGUsLTIyNCl9c3RhdGljIGludDIzMihlKXtyZXR1cm4gbWUoZSwtMjMyKX1zdGF0aWMgaW50MjQwKGUpe3JldHVybiBtZShlLC0yNDApfXN0YXRpYyBpbnQyNDgoZSl7cmV0dXJuIG1lKGUsLTI0OCl9c3RhdGljIGludDI1NihlKXtyZXR1cm4gbWUoZSwtMjU2KX1zdGF0aWMgaW50KGUpe3JldHVybiBtZShlLC0yNTYpfXN0YXRpYyBieXRlczEoZSl7cmV0dXJuIFhlKGUsMSl9c3RhdGljIGJ5dGVzMihlKXtyZXR1cm4gWGUoZSwyKX1zdGF0aWMgYnl0ZXMzKGUpe3JldHVybiBYZShlLDMpfXN0YXRpYyBieXRlczQoZSl7cmV0dXJuIFhlKGUsNCl9c3RhdGljIGJ5dGVzNShlKXtyZXR1cm4gWGUoZSw1KX1zdGF0aWMgYnl0ZXM2KGUpe3JldHVybiBYZShlLDYpfXN0YXRpYyBieXRlczcoZSl7cmV0dXJuIFhlKGUsNyl9c3RhdGljIGJ5dGVzOChlKXtyZXR1cm4gWGUoZSw4KX1zdGF0aWMgYnl0ZXM5KGUpe3JldHVybiBYZShlLDkpfXN0YXRpYyBieXRlczEwKGUpe3JldHVybiBYZShlLDEwKX1zdGF0aWMgYnl0ZXMxMShlKXtyZXR1cm4gWGUoZSwxMSl9c3RhdGljIGJ5dGVzMTIoZSl7cmV0dXJuIFhlKGUsMTIpfXN0YXRpYyBieXRlczEzKGUpe3JldHVybiBYZShlLDEzKX1zdGF0aWMgYnl0ZXMxNChlKXtyZXR1cm4gWGUoZSwxNCl9c3RhdGljIGJ5dGVzMTUoZSl7cmV0dXJuIFhlKGUsMTUpfXN0YXRpYyBieXRlczE2KGUpe3JldHVybiBYZShlLDE2KX1zdGF0aWMgYnl0ZXMxNyhlKXtyZXR1cm4gWGUoZSwxNyl9c3RhdGljIGJ5dGVzMTgoZSl7cmV0dXJuIFhlKGUsMTgpfXN0YXRpYyBieXRlczE5KGUpe3JldHVybiBYZShlLDE5KX1zdGF0aWMgYnl0ZXMyMChlKXtyZXR1cm4gWGUoZSwyMCl9c3RhdGljIGJ5dGVzMjEoZSl7cmV0dXJuIFhlKGUsMjEpfXN0YXRpYyBieXRlczIyKGUpe3JldHVybiBYZShlLDIyKX1zdGF0aWMgYnl0ZXMyMyhlKXtyZXR1cm4gWGUoZSwyMyl9c3RhdGljIGJ5dGVzMjQoZSl7cmV0dXJuIFhlKGUsMjQpfXN0YXRpYyBieXRlczI1KGUpe3JldHVybiBYZShlLDI1KX1zdGF0aWMgYnl0ZXMyNihlKXtyZXR1cm4gWGUoZSwyNil9c3RhdGljIGJ5dGVzMjcoZSl7cmV0dXJuIFhlKGUsMjcpfXN0YXRpYyBieXRlczI4KGUpe3JldHVybiBYZShlLDI4KX1zdGF0aWMgYnl0ZXMyOShlKXtyZXR1cm4gWGUoZSwyOSl9c3RhdGljIGJ5dGVzMzAoZSl7cmV0dXJuIFhlKGUsMzApfXN0YXRpYyBieXRlczMxKGUpe3JldHVybiBYZShlLDMxKX1zdGF0aWMgYnl0ZXMzMihlKXtyZXR1cm4gWGUoZSwzMil9c3RhdGljIGFkZHJlc3MoZSl7cmV0dXJuIG5ldyBUbih4biwiYWRkcmVzcyIsZSl9c3RhdGljIGJvb2woZSl7cmV0dXJuIG5ldyBUbih4biwiYm9vbCIsISFlKX1zdGF0aWMgYnl0ZXMoZSl7cmV0dXJuIG5ldyBUbih4biwiYnl0ZXMiLGUpfXN0YXRpYyBzdHJpbmcoZSl7cmV0dXJuIG5ldyBUbih4biwic3RyaW5nIixlKX1zdGF0aWMgYXJyYXkoZSx0KXt0aHJvdyBuZXcgRXJyb3IoIm5vdCBpbXBsZW1lbnRlZCB5ZXQiKX1zdGF0aWMgdHVwbGUoZSx0KXt0aHJvdyBuZXcgRXJyb3IoIm5vdCBpbXBsZW1lbnRlZCB5ZXQiKX1zdGF0aWMgb3ZlcnJpZGVzKGUpe3JldHVybiBuZXcgVG4oeG4sIm92ZXJyaWRlcyIsT2JqZWN0LmFzc2lnbih7fSxlKSl9c3RhdGljIGlzVHlwZWQoZSl7cmV0dXJuIGUmJnR5cGVvZiBlPT0ib2JqZWN0IiYmIl90eXBlZFN5bWJvbCJpbiBlJiZlLl90eXBlZFN5bWJvbD09PWlwfXN0YXRpYyBkZXJlZmVyZW5jZShlLHQpe2lmKFRuLmlzVHlwZWQoZSkpe2lmKGUudHlwZSE9PXQpdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHR5cGU6IGV4cGVjZXRkICR7dH0sIGdvdCAke2UudHlwZX1gKTtyZXR1cm4gZS52YWx1ZX1yZXR1cm4gZX19O3ZvPW5ldyBXZWFrTWFwO2xldCBucj1UbjtjbGFzcyBLVCBleHRlbmRzIFJue2NvbnN0cnVjdG9yKGUpe3N1cGVyKCJhZGRyZXNzIiwiYWRkcmVzcyIsZSwhMSl9ZGVmYXVsdFZhbHVlKCl7cmV0dXJuIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJ9ZW5jb2RlKGUsdCl7bGV0IGE9bnIuZGVyZWZlcmVuY2UodCwic3RyaW5nIik7dHJ5e2E9eXIoYSl9Y2F0Y2gocyl7cmV0dXJuIHRoaXMuX3Rocm93RXJyb3Iocy5tZXNzYWdlLHQpfXJldHVybiBlLndyaXRlVmFsdWUoYSl9ZGVjb2RlKGUpe3JldHVybiB5cihLcihlLnJlYWRWYWx1ZSgpLDIwKSl9fWNsYXNzIFpUIGV4dGVuZHMgUm57Y29uc3RydWN0b3IodCl7c3VwZXIodC5uYW1lLHQudHlwZSwiXyIsdC5keW5hbWljKTtaKHRoaXMsImNvZGVyIik7dGhpcy5jb2Rlcj10fWRlZmF1bHRWYWx1ZSgpe3JldHVybiB0aGlzLmNvZGVyLmRlZmF1bHRWYWx1ZSgpfWVuY29kZSh0LGEpe3JldHVybiB0aGlzLmNvZGVyLmVuY29kZSh0LGEpfWRlY29kZSh0KXtyZXR1cm4gdGhpcy5jb2Rlci5kZWNvZGUodCl9fWZ1bmN0aW9uIGJiKG4sZSx0KXtsZXQgYT1bXTtpZihBcnJheS5pc0FycmF5KHQpKWE9dDtlbHNlIGlmKHQmJnR5cGVvZiB0PT0ib2JqZWN0Iil7bGV0IGM9e307YT1lLm1hcChmPT57Y29uc3QgZD1mLmxvY2FsTmFtZTtyZXR1cm4gUmUoZCwiY2Fubm90IGVuY29kZSBvYmplY3QgZm9yIHNpZ25hdHVyZSB3aXRoIG1pc3NpbmcgbmFtZXMiLCJJTlZBTElEX0FSR1VNRU5UIix7YXJndW1lbnQ6InZhbHVlcyIsaW5mbzp7Y29kZXI6Zn0sdmFsdWU6dH0pLFJlKCFjW2RdLCJjYW5ub3QgZW5jb2RlIG9iamVjdCBmb3Igc2lnbmF0dXJlIHdpdGggZHVwbGljYXRlIG5hbWVzIiwiSU5WQUxJRF9BUkdVTUVOVCIse2FyZ3VtZW50OiJ2YWx1ZXMiLGluZm86e2NvZGVyOmZ9LHZhbHVlOnR9KSxjW2RdPSEwLHRbZF19KX1lbHNlIEcoITEsImludmFsaWQgdHVwbGUgdmFsdWUiLCJ0dXBsZSIsdCk7RyhlLmxlbmd0aD09PWEubGVuZ3RoLCJ0eXBlcy92YWx1ZSBsZW5ndGggbWlzbWF0Y2giLCJ0dXBsZSIsdCk7bGV0IHM9bmV3IEp1LHI9bmV3IEp1LG89W107ZS5mb3JFYWNoKChjLGYpPT57bGV0IGQ9YVtmXTtpZihjLmR5bmFtaWMpe2xldCBwPXIubGVuZ3RoO2MuZW5jb2RlKHIsZCk7bGV0IGI9cy53cml0ZVVwZGF0YWJsZVZhbHVlKCk7by5wdXNoKFQ9PntiKFQrcCl9KX1lbHNlIGMuZW5jb2RlKHMsZCl9KSxvLmZvckVhY2goYz0+e2Mocy5sZW5ndGgpfSk7bGV0IGk9bi5hcHBlbmRXcml0ZXIocyk7cmV0dXJuIGkrPW4uYXBwZW5kV3JpdGVyKHIpLGl9ZnVuY3Rpb24geWIobixlKXtsZXQgdD1bXSxhPVtdLHM9bi5zdWJSZWFkZXIoMCk7cmV0dXJuIGUuZm9yRWFjaChyPT57bGV0IG89bnVsbDtpZihyLmR5bmFtaWMpe2xldCBpPW4ucmVhZEluZGV4KCksYz1zLnN1YlJlYWRlcihpKTt0cnl7bz1yLmRlY29kZShjKX1jYXRjaChmKXtpZihTMChmLCJCVUZGRVJfT1ZFUlJVTiIpKXRocm93IGY7bz1mLG8uYmFzZVR5cGU9ci5uYW1lLG8ubmFtZT1yLmxvY2FsTmFtZSxvLnR5cGU9ci50eXBlfX1lbHNlIHRyeXtvPXIuZGVjb2RlKG4pfWNhdGNoKGkpe2lmKFMwKGksIkJVRkZFUl9PVkVSUlVOIikpdGhyb3cgaTtvPWksby5iYXNlVHlwZT1yLm5hbWUsby5uYW1lPXIubG9jYWxOYW1lLG8udHlwZT1yLnR5cGV9aWYobz09bnVsbCl0aHJvdyBuZXcgRXJyb3IoImludmVzdGlnYXRlIik7dC5wdXNoKG8pLGEucHVzaChyLmxvY2FsTmFtZXx8bnVsbCl9KSxGcy5mcm9tSXRlbXModCxhKX1jbGFzcyBxVCBleHRlbmRzIFJue2NvbnN0cnVjdG9yKHQsYSxzKXtjb25zdCByPXQudHlwZSsiWyIrKGE+PTA/YToiIikrIl0iLG89YT09PS0xfHx0LmR5bmFtaWM7c3VwZXIoImFycmF5IixyLHMsbyk7Wih0aGlzLCJjb2RlciIpO1oodGhpcywibGVuZ3RoIik7emUodGhpcyx7Y29kZXI6dCxsZW5ndGg6YX0pfWRlZmF1bHRWYWx1ZSgpe2NvbnN0IHQ9dGhpcy5jb2Rlci5kZWZhdWx0VmFsdWUoKSxhPVtdO2ZvcihsZXQgcz0wO3M8dGhpcy5sZW5ndGg7cysrKWEucHVzaCh0KTtyZXR1cm4gYX1lbmNvZGUodCxhKXtjb25zdCBzPW5yLmRlcmVmZXJlbmNlKGEsImFycmF5Iik7QXJyYXkuaXNBcnJheShzKXx8dGhpcy5fdGhyb3dFcnJvcigiZXhwZWN0ZWQgYXJyYXkgdmFsdWUiLHMpO2xldCByPXRoaXMubGVuZ3RoO3I9PT0tMSYmKHI9cy5sZW5ndGgsdC53cml0ZVZhbHVlKHMubGVuZ3RoKSksaWcocy5sZW5ndGgsciwiY29kZXIgYXJyYXkiKyh0aGlzLmxvY2FsTmFtZT8iICIrdGhpcy5sb2NhbE5hbWU6IiIpKTtsZXQgbz1bXTtmb3IobGV0IGk9MDtpPHMubGVuZ3RoO2krKylvLnB1c2godGhpcy5jb2Rlcik7cmV0dXJuIGJiKHQsbyxzKX1kZWNvZGUodCl7bGV0IGE9dGhpcy5sZW5ndGg7YT09PS0xJiYoYT10LnJlYWRJbmRleCgpLFJlKGEqR3Q8PXQuZGF0YUxlbmd0aCwiaW5zdWZmaWNpZW50IGRhdGEgbGVuZ3RoIiwiQlVGRkVSX09WRVJSVU4iLHtidWZmZXI6dC5ieXRlcyxvZmZzZXQ6YSpHdCxsZW5ndGg6dC5kYXRhTGVuZ3RofSkpO2xldCBzPVtdO2ZvcihsZXQgcj0wO3I8YTtyKyspcy5wdXNoKG5ldyBaVCh0aGlzLmNvZGVyKSk7cmV0dXJuIHliKHQscyl9fWNsYXNzIEpUIGV4dGVuZHMgUm57Y29uc3RydWN0b3IoZSl7c3VwZXIoImJvb2wiLCJib29sIixlLCExKX1kZWZhdWx0VmFsdWUoKXtyZXR1cm4hMX1lbmNvZGUoZSx0KXtjb25zdCBhPW5yLmRlcmVmZXJlbmNlKHQsImJvb2wiKTtyZXR1cm4gZS53cml0ZVZhbHVlKGE/MTowKX1kZWNvZGUoZSl7cmV0dXJuISFlLnJlYWRWYWx1ZSgpfX1jbGFzcyB4YiBleHRlbmRzIFJue2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSxlLHQsITApfWRlZmF1bHRWYWx1ZSgpe3JldHVybiIweCJ9ZW5jb2RlKGUsdCl7dD1GdCh0KTtsZXQgYT1lLndyaXRlVmFsdWUodC5sZW5ndGgpO3JldHVybiBhKz1lLndyaXRlQnl0ZXModCksYX1kZWNvZGUoZSl7cmV0dXJuIGUucmVhZEJ5dGVzKGUucmVhZEluZGV4KCksITApfX1jbGFzcyBZVCBleHRlbmRzIHhie2NvbnN0cnVjdG9yKGUpe3N1cGVyKCJieXRlcyIsZSl9ZGVjb2RlKGUpe3JldHVybiB5ZShzdXBlci5kZWNvZGUoZSkpfX1jbGFzcyBYVCBleHRlbmRzIFJue2NvbnN0cnVjdG9yKHQsYSl7bGV0IHM9ImJ5dGVzIitTdHJpbmcodCk7c3VwZXIocyxzLGEsITEpO1oodGhpcywic2l6ZSIpO3plKHRoaXMse3NpemU6dH0se3NpemU6Im51bWJlciJ9KX1kZWZhdWx0VmFsdWUoKXtyZXR1cm4iMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIi5zdWJzdHJpbmcoMCwyK3RoaXMuc2l6ZSoyKX1lbmNvZGUodCxhKXtsZXQgcz1GdChuci5kZXJlZmVyZW5jZShhLHRoaXMudHlwZSkpO3JldHVybiBzLmxlbmd0aCE9PXRoaXMuc2l6ZSYmdGhpcy5fdGhyb3dFcnJvcigiaW5jb3JyZWN0IGRhdGEgbGVuZ3RoIixhKSx0LndyaXRlQnl0ZXMocyl9ZGVjb2RlKHQpe3JldHVybiB5ZSh0LnJlYWRCeXRlcyh0aGlzLnNpemUpKX19Y29uc3QgUVQ9bmV3IFVpbnQ4QXJyYXkoW10pO2NsYXNzIGVBIGV4dGVuZHMgUm57Y29uc3RydWN0b3IoZSl7c3VwZXIoIm51bGwiLCIiLGUsITEpfWRlZmF1bHRWYWx1ZSgpe3JldHVybiBudWxsfWVuY29kZShlLHQpe3JldHVybiB0IT1udWxsJiZ0aGlzLl90aHJvd0Vycm9yKCJub3QgbnVsbCIsdCksZS53cml0ZUJ5dGVzKFFUKX1kZWNvZGUoZSl7cmV0dXJuIGUucmVhZEJ5dGVzKDApLG51bGx9fWNvbnN0IHRBPUJpZ0ludCgwKSxyQT1CaWdJbnQoMSksbkE9QmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiKTtjbGFzcyBvQSBleHRlbmRzIFJue2NvbnN0cnVjdG9yKHQsYSxzKXtjb25zdCByPShhPyJpbnQiOiJ1aW50IikrdCo4O3N1cGVyKHIscixzLCExKTtaKHRoaXMsInNpemUiKTtaKHRoaXMsInNpZ25lZCIpO3plKHRoaXMse3NpemU6dCxzaWduZWQ6YX0se3NpemU6Im51bWJlciIsc2lnbmVkOiJib29sZWFuIn0pfWRlZmF1bHRWYWx1ZSgpe3JldHVybiAwfWVuY29kZSh0LGEpe2xldCBzPXR0KG5yLmRlcmVmZXJlbmNlKGEsdGhpcy50eXBlKSkscj1zcyhuQSxHdCo4KTtpZih0aGlzLnNpZ25lZCl7bGV0IG89c3Mocix0aGlzLnNpemUqOC0xKTsocz5vfHxzPC0obytyQSkpJiZ0aGlzLl90aHJvd0Vycm9yKCJ2YWx1ZSBvdXQtb2YtYm91bmRzIixhKSxzPUVkKHMsOCpHdCl9ZWxzZShzPHRBfHxzPnNzKHIsdGhpcy5zaXplKjgpKSYmdGhpcy5fdGhyb3dFcnJvcigidmFsdWUgb3V0LW9mLWJvdW5kcyIsYSk7cmV0dXJuIHQud3JpdGVWYWx1ZShzKX1kZWNvZGUodCl7bGV0IGE9c3ModC5yZWFkVmFsdWUoKSx0aGlzLnNpemUqOCk7cmV0dXJuIHRoaXMuc2lnbmVkJiYoYT1ZeChhLHRoaXMuc2l6ZSo4KSksYX19Y2xhc3Mgc0EgZXh0ZW5kcyB4Yntjb25zdHJ1Y3RvcihlKXtzdXBlcigic3RyaW5nIixlKX1kZWZhdWx0VmFsdWUoKXtyZXR1cm4iIn1lbmNvZGUoZSx0KXtyZXR1cm4gc3VwZXIuZW5jb2RlKGUscnIobnIuZGVyZWZlcmVuY2UodCwic3RyaW5nIikpKX1kZWNvZGUoZSl7cmV0dXJuIGRnKHN1cGVyLmRlY29kZShlKSl9fWNsYXNzIElpIGV4dGVuZHMgUm57Y29uc3RydWN0b3IodCxhKXtsZXQgcz0hMTtjb25zdCByPVtdO3QuZm9yRWFjaChpPT57aS5keW5hbWljJiYocz0hMCksci5wdXNoKGkudHlwZSl9KTtjb25zdCBvPSJ0dXBsZSgiK3Iuam9pbigiLCIpKyIpIjtzdXBlcigidHVwbGUiLG8sYSxzKTtaKHRoaXMsImNvZGVycyIpO3plKHRoaXMse2NvZGVyczpPYmplY3QuZnJlZXplKHQuc2xpY2UoKSl9KX1kZWZhdWx0VmFsdWUoKXtjb25zdCB0PVtdO3RoaXMuY29kZXJzLmZvckVhY2gocz0+e3QucHVzaChzLmRlZmF1bHRWYWx1ZSgpKX0pO2NvbnN0IGE9dGhpcy5jb2RlcnMucmVkdWNlKChzLHIpPT57Y29uc3Qgbz1yLmxvY2FsTmFtZTtyZXR1cm4gbyYmKHNbb118fChzW29dPTApLHNbb10rKyksc30se30pO3JldHVybiB0aGlzLmNvZGVycy5mb3JFYWNoKChzLHIpPT57bGV0IG89cy5sb2NhbE5hbWU7IW98fGFbb10hPT0xfHwobz09PSJsZW5ndGgiJiYobz0iX2xlbmd0aCIpLHRbb109PW51bGwmJih0W29dPXRbcl0pKX0pLE9iamVjdC5mcmVlemUodCl9ZW5jb2RlKHQsYSl7Y29uc3Qgcz1uci5kZXJlZmVyZW5jZShhLCJ0dXBsZSIpO3JldHVybiBiYih0LHRoaXMuY29kZXJzLHMpfWRlY29kZSh0KXtyZXR1cm4geWIodCx0aGlzLmNvZGVycyl9fWZ1bmN0aW9uIFpyKG4pe3JldHVybiAkZShycihuKSl9ZnVuY3Rpb24gcnUobixlKXtyZXR1cm57YWRkcmVzczp5cihuKSxzdG9yYWdlS2V5czplLm1hcCgodCxhKT0+KEcoTnQodCwzMiksImludmFsaWQgc2xvdCIsYHN0b3JhZ2VLZXlzWyR7YX1dYCx0KSx0LnRvTG93ZXJDYXNlKCkpKX19ZnVuY3Rpb24gX2Mobil7aWYoQXJyYXkuaXNBcnJheShuKSlyZXR1cm4gbi5tYXAoKHQsYSk9PkFycmF5LmlzQXJyYXkodCk/KEcodC5sZW5ndGg9PT0yLCJpbnZhbGlkIHNsb3Qgc2V0IixgdmFsdWVbJHthfV1gLHQpLHJ1KHRbMF0sdFsxXSkpOihHKHQhPW51bGwmJnR5cGVvZiB0PT0ib2JqZWN0IiwiaW52YWxpZCBhZGRyZXNzLXNsb3Qgc2V0IiwidmFsdWUiLG4pLHJ1KHQuYWRkcmVzcyx0LnN0b3JhZ2VLZXlzKSkpO0cobiE9bnVsbCYmdHlwZW9mIG49PSJvYmplY3QiLCJpbnZhbGlkIGFjY2VzcyBsaXN0IiwidmFsdWUiLG4pO2NvbnN0IGU9T2JqZWN0LmtleXMobikubWFwKHQ9Pntjb25zdCBhPW5bdF0ucmVkdWNlKChzLHIpPT4oc1tyXT0hMCxzKSx7fSk7cmV0dXJuIHJ1KHQsT2JqZWN0LmtleXMoYSkuc29ydCgpKX0pO3JldHVybiBlLnNvcnQoKHQsYSk9PnQuYWRkcmVzcy5sb2NhbGVDb21wYXJlKGEuYWRkcmVzcykpLGV9ZnVuY3Rpb24gT2Mobil7bGV0IGU7cmV0dXJuIHR5cGVvZiBuPT0ic3RyaW5nIj9lPWJyLmNvbXB1dGVQdWJsaWNLZXkobiwhMSk6ZT1uLnB1YmxpY0tleSx5cigkZSgiMHgiK2Uuc3Vic3RyaW5nKDQpKS5zdWJzdHJpbmcoMjYpKX1mdW5jdGlvbiBSbyhuLGUpe3JldHVybiBPYyhici5yZWNvdmVyUHVibGljS2V5KG4sZSkpfWNvbnN0IEF0PUJpZ0ludCgwKSxhQT1CaWdJbnQoMiksaUE9QmlnSW50KDI3KSxjQT1CaWdJbnQoMjgpLHVBPUJpZ0ludCgzNSksbEE9QmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiKSxudT00MDk2KjMyO2Z1bmN0aW9uIGNwKG4sZSl7bGV0IHQ9bi50b1N0cmluZygxNik7Zm9yKDt0Lmxlbmd0aDwyOyl0PSIwIit0O3JldHVybiB0Kz1VdChlKS5zdWJzdHJpbmcoNCksIjB4Iit0fWZ1bmN0aW9uIFJjKG4pe3JldHVybiBuPT09IjB4Ij9udWxsOnlyKG4pfWZ1bmN0aW9uICRkKG4sZSl7dHJ5e3JldHVybiBfYyhuKX1jYXRjaCh0KXtHKCExLHQubWVzc2FnZSxlLG4pfX1mdW5jdGlvbiBWYShuLGUpe3JldHVybiBuPT09IjB4Ij8wOkJ0KG4sZSl9ZnVuY3Rpb24gZ3QobixlKXtpZihuPT09IjB4IilyZXR1cm4gQXQ7Y29uc3QgdD10dChuLGUpO3JldHVybiBHKHQ8PWxBLCJ2YWx1ZSBleGNlZWRzIHVpbnQgc2l6ZSIsZSx0KSx0fWZ1bmN0aW9uIHN0KG4sZSl7Y29uc3QgdD10dChuLCJ2YWx1ZSIpLGE9VnQodCk7cmV0dXJuIEcoYS5sZW5ndGg8PTMyLCJ2YWx1ZSB0b28gbGFyZ2UiLGB0eC4ke2V9YCx0KSxhfWZ1bmN0aW9uIExkKG4pe3JldHVybiBfYyhuKS5tYXAoZT0+W2UuYWRkcmVzcyxlLnN0b3JhZ2VLZXlzXSl9ZnVuY3Rpb24gZkEobixlKXtHKEFycmF5LmlzQXJyYXkobiksYGludmFsaWQgJHtlfWAsInZhbHVlIixuKTtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKylHKE50KG5bdF0sMzIpLCJpbnZhbGlkICR7IHBhcmFtIH0gaGFzaCIsYHZhbHVlWyR7dH1dYCxuW3RdKTtyZXR1cm4gbn1mdW5jdGlvbiBkQShuKXtjb25zdCBlPUVjKG4pO0coQXJyYXkuaXNBcnJheShlKSYmKGUubGVuZ3RoPT09OXx8ZS5sZW5ndGg9PT02KSwiaW52YWxpZCBmaWVsZCBjb3VudCBmb3IgbGVnYWN5IHRyYW5zYWN0aW9uIiwiZGF0YSIsbik7Y29uc3QgdD17dHlwZTowLG5vbmNlOlZhKGVbMF0sIm5vbmNlIiksZ2FzUHJpY2U6Z3QoZVsxXSwiZ2FzUHJpY2UiKSxnYXNMaW1pdDpndChlWzJdLCJnYXNMaW1pdCIpLHRvOlJjKGVbM10pLHZhbHVlOmd0KGVbNF0sInZhbHVlIiksZGF0YTp5ZShlWzVdKSxjaGFpbklkOkF0fTtpZihlLmxlbmd0aD09PTYpcmV0dXJuIHQ7Y29uc3QgYT1ndChlWzZdLCJ2Iikscz1ndChlWzddLCJyIikscj1ndChlWzhdLCJzIik7aWYocz09PUF0JiZyPT09QXQpdC5jaGFpbklkPWE7ZWxzZXtsZXQgbz0oYS11QSkvYUE7bzxBdCYmKG89QXQpLHQuY2hhaW5JZD1vLEcobyE9PUF0fHxhPT09aUF8fGE9PT1jQSwibm9uLWNhbm9uaWNhbCBsZWdhY3kgdiIsInYiLGVbNl0pLHQuc2lnbmF0dXJlPUt0LmZyb20oe3I6Sm4oZVs3XSwzMiksczpKbihlWzhdLDMyKSx2OmF9KX1yZXR1cm4gdH1mdW5jdGlvbiBwQShuLGUpe2NvbnN0IHQ9W3N0KG4ubm9uY2UsIm5vbmNlIiksc3Qobi5nYXNQcmljZXx8MCwiZ2FzUHJpY2UiKSxzdChuLmdhc0xpbWl0LCJnYXNMaW1pdCIpLG4udG98fCIweCIsc3Qobi52YWx1ZSwidmFsdWUiKSxuLmRhdGFdO2xldCBhPUF0O2lmKG4uY2hhaW5JZCE9QXQpYT10dChuLmNoYWluSWQsInR4LmNoYWluSWQiKSxHKCFlfHxlLm5ldHdvcmtWPT1udWxsfHxlLmxlZ2FjeUNoYWluSWQ9PT1hLCJ0eC5jaGFpbklkL3NpZy52IG1pc21hdGNoIiwic2lnIixlKTtlbHNlIGlmKG4uc2lnbmF0dXJlKXtjb25zdCByPW4uc2lnbmF0dXJlLmxlZ2FjeUNoYWluSWQ7ciE9bnVsbCYmKGE9cil9aWYoIWUpcmV0dXJuIGEhPT1BdCYmKHQucHVzaChWdChhKSksdC5wdXNoKCIweCIpLHQucHVzaCgiMHgiKSksTXModCk7bGV0IHM9QmlnSW50KDI3K2UueVBhcml0eSk7cmV0dXJuIGEhPT1BdD9zPUt0LmdldENoYWluSWRWKGEsZS52KTpCaWdJbnQoZS52KSE9PXMmJkcoITEsInR4LmNoYWluSWQvc2lnLnYgbWlzbWF0Y2giLCJzaWciLGUpLHQucHVzaChWdChzKSksdC5wdXNoKFZ0KGUucikpLHQucHVzaChWdChlLnMpKSxNcyh0KX1mdW5jdGlvbiB6ZChuLGUpe2xldCB0O3RyeXtpZih0PVZhKGVbMF0sInlQYXJpdHkiKSx0IT09MCYmdCE9PTEpdGhyb3cgbmV3IEVycm9yKCJiYWQgeVBhcml0eSIpfWNhdGNoe0coITEsImludmFsaWQgeVBhcml0eSIsInlQYXJpdHkiLGVbMF0pfWNvbnN0IGE9Sm4oZVsxXSwzMikscz1KbihlWzJdLDMyKSxyPUt0LmZyb20oe3I6YSxzLHlQYXJpdHk6dH0pO24uc2lnbmF0dXJlPXJ9ZnVuY3Rpb24gaEEobil7Y29uc3QgZT1FYyhBZShuKS5zbGljZSgxKSk7RyhBcnJheS5pc0FycmF5KGUpJiYoZS5sZW5ndGg9PT05fHxlLmxlbmd0aD09PTEyKSwiaW52YWxpZCBmaWVsZCBjb3VudCBmb3IgdHJhbnNhY3Rpb24gdHlwZTogMiIsImRhdGEiLHllKG4pKTtjb25zdCB0PXt0eXBlOjIsY2hhaW5JZDpndChlWzBdLCJjaGFpbklkIiksbm9uY2U6VmEoZVsxXSwibm9uY2UiKSxtYXhQcmlvcml0eUZlZVBlckdhczpndChlWzJdLCJtYXhQcmlvcml0eUZlZVBlckdhcyIpLG1heEZlZVBlckdhczpndChlWzNdLCJtYXhGZWVQZXJHYXMiKSxnYXNQcmljZTpudWxsLGdhc0xpbWl0Omd0KGVbNF0sImdhc0xpbWl0IiksdG86UmMoZVs1XSksdmFsdWU6Z3QoZVs2XSwidmFsdWUiKSxkYXRhOnllKGVbN10pLGFjY2Vzc0xpc3Q6JGQoZVs4XSwiYWNjZXNzTGlzdCIpfTtyZXR1cm4gZS5sZW5ndGg9PT05fHx6ZCh0LGUuc2xpY2UoOSkpLHR9ZnVuY3Rpb24gZ0EobixlKXtjb25zdCB0PVtzdChuLmNoYWluSWQsImNoYWluSWQiKSxzdChuLm5vbmNlLCJub25jZSIpLHN0KG4ubWF4UHJpb3JpdHlGZWVQZXJHYXN8fDAsIm1heFByaW9yaXR5RmVlUGVyR2FzIiksc3Qobi5tYXhGZWVQZXJHYXN8fDAsIm1heEZlZVBlckdhcyIpLHN0KG4uZ2FzTGltaXQsImdhc0xpbWl0Iiksbi50b3x8IjB4IixzdChuLnZhbHVlLCJ2YWx1ZSIpLG4uZGF0YSxMZChuLmFjY2Vzc0xpc3R8fFtdKV07cmV0dXJuIGUmJih0LnB1c2goc3QoZS55UGFyaXR5LCJ5UGFyaXR5IikpLHQucHVzaChWdChlLnIpKSx0LnB1c2goVnQoZS5zKSkpLGV0KFsiMHgwMiIsTXModCldKX1mdW5jdGlvbiBiQShuKXtjb25zdCBlPUVjKEFlKG4pLnNsaWNlKDEpKTtHKEFycmF5LmlzQXJyYXkoZSkmJihlLmxlbmd0aD09PTh8fGUubGVuZ3RoPT09MTEpLCJpbnZhbGlkIGZpZWxkIGNvdW50IGZvciB0cmFuc2FjdGlvbiB0eXBlOiAxIiwiZGF0YSIseWUobikpO2NvbnN0IHQ9e3R5cGU6MSxjaGFpbklkOmd0KGVbMF0sImNoYWluSWQiKSxub25jZTpWYShlWzFdLCJub25jZSIpLGdhc1ByaWNlOmd0KGVbMl0sImdhc1ByaWNlIiksZ2FzTGltaXQ6Z3QoZVszXSwiZ2FzTGltaXQiKSx0bzpSYyhlWzRdKSx2YWx1ZTpndChlWzVdLCJ2YWx1ZSIpLGRhdGE6eWUoZVs2XSksYWNjZXNzTGlzdDokZChlWzddLCJhY2Nlc3NMaXN0Iil9O3JldHVybiBlLmxlbmd0aD09PTh8fHpkKHQsZS5zbGljZSg4KSksdH1mdW5jdGlvbiB5QShuLGUpe2NvbnN0IHQ9W3N0KG4uY2hhaW5JZCwiY2hhaW5JZCIpLHN0KG4ubm9uY2UsIm5vbmNlIiksc3Qobi5nYXNQcmljZXx8MCwiZ2FzUHJpY2UiKSxzdChuLmdhc0xpbWl0LCJnYXNMaW1pdCIpLG4udG98fCIweCIsc3Qobi52YWx1ZSwidmFsdWUiKSxuLmRhdGEsTGQobi5hY2Nlc3NMaXN0fHxbXSldO3JldHVybiBlJiYodC5wdXNoKHN0KGUueVBhcml0eSwicmVjb3ZlcnlQYXJhbSIpKSx0LnB1c2goVnQoZS5yKSksdC5wdXNoKFZ0KGUucykpKSxldChbIjB4MDEiLE1zKHQpXSl9ZnVuY3Rpb24geEEobil7bGV0IGU9RWMoQWUobikuc2xpY2UoMSkpLHQ9IjMiLGE9bnVsbDtpZihlLmxlbmd0aD09PTQmJkFycmF5LmlzQXJyYXkoZVswXSkpe3Q9IjMgKG5ldHdvcmsgZm9ybWF0KSI7Y29uc3Qgcj1lWzFdLG89ZVsyXSxpPWVbM107RyhBcnJheS5pc0FycmF5KHIpLCJpbnZhbGlkIG5ldHdvcmsgZm9ybWF0OiBibG9icyBub3QgYW4gYXJyYXkiLCJmaWVsZHNbMV0iLHIpLEcoQXJyYXkuaXNBcnJheShvKSwiaW52YWxpZCBuZXR3b3JrIGZvcm1hdDogY29tbWl0bWVudHMgbm90IGFuIGFycmF5IiwiZmllbGRzWzJdIixvKSxHKEFycmF5LmlzQXJyYXkoaSksImludmFsaWQgbmV0d29yayBmb3JtYXQ6IHByb29mcyBub3QgYW4gYXJyYXkiLCJmaWVsZHNbM10iLGkpLEcoci5sZW5ndGg9PT1vLmxlbmd0aCwiaW52YWxpZCBuZXR3b3JrIGZvcm1hdDogYmxvYnMvY29tbWl0bWVudHMgbGVuZ3RoIG1pc21hdGNoIiwiZmllbGRzIixlKSxHKHIubGVuZ3RoPT09aS5sZW5ndGgsImludmFsaWQgbmV0d29yayBmb3JtYXQ6IGJsb2JzL3Byb29mcyBsZW5ndGggbWlzbWF0Y2giLCJmaWVsZHMiLGUpLGE9W107Zm9yKGxldCBjPTA7YzxlWzFdLmxlbmd0aDtjKyspYS5wdXNoKHtkYXRhOnJbY10sY29tbWl0bWVudDpvW2NdLHByb29mOmlbY119KTtlPWVbMF19RyhBcnJheS5pc0FycmF5KGUpJiYoZS5sZW5ndGg9PT0xMXx8ZS5sZW5ndGg9PT0xNCksYGludmFsaWQgZmllbGQgY291bnQgZm9yIHRyYW5zYWN0aW9uIHR5cGU6ICR7dH1gLCJkYXRhIix5ZShuKSk7Y29uc3Qgcz17dHlwZTozLGNoYWluSWQ6Z3QoZVswXSwiY2hhaW5JZCIpLG5vbmNlOlZhKGVbMV0sIm5vbmNlIiksbWF4UHJpb3JpdHlGZWVQZXJHYXM6Z3QoZVsyXSwibWF4UHJpb3JpdHlGZWVQZXJHYXMiKSxtYXhGZWVQZXJHYXM6Z3QoZVszXSwibWF4RmVlUGVyR2FzIiksZ2FzUHJpY2U6bnVsbCxnYXNMaW1pdDpndChlWzRdLCJnYXNMaW1pdCIpLHRvOlJjKGVbNV0pLHZhbHVlOmd0KGVbNl0sInZhbHVlIiksZGF0YTp5ZShlWzddKSxhY2Nlc3NMaXN0OiRkKGVbOF0sImFjY2Vzc0xpc3QiKSxtYXhGZWVQZXJCbG9iR2FzOmd0KGVbOV0sIm1heEZlZVBlckJsb2JHYXMiKSxibG9iVmVyc2lvbmVkSGFzaGVzOmVbMTBdfTthJiYocy5ibG9icz1hKSxHKHMudG8hPW51bGwsYGludmFsaWQgYWRkcmVzcyBmb3IgdHJhbnNhY3Rpb24gdHlwZTogJHt0fWAsImRhdGEiLG4pLEcoQXJyYXkuaXNBcnJheShzLmJsb2JWZXJzaW9uZWRIYXNoZXMpLCJpbnZhbGlkIGJsb2JWZXJzaW9uZWRIYXNoZXM6IG11c3QgYmUgYW4gYXJyYXkiLCJkYXRhIixuKTtmb3IobGV0IHI9MDtyPHMuYmxvYlZlcnNpb25lZEhhc2hlcy5sZW5ndGg7cisrKUcoTnQocy5ibG9iVmVyc2lvbmVkSGFzaGVzW3JdLDMyKSxgaW52YWxpZCBibG9iVmVyc2lvbmVkSGFzaCBhdCBpbmRleCAke3J9OiBtdXN0IGJlIGxlbmd0aCAzMmAsImRhdGEiLG4pO3JldHVybiBlLmxlbmd0aD09PTExfHx6ZChzLGUuc2xpY2UoMTEpKSxzfWZ1bmN0aW9uIFRBKG4sZSx0KXtjb25zdCBhPVtzdChuLmNoYWluSWQsImNoYWluSWQiKSxzdChuLm5vbmNlLCJub25jZSIpLHN0KG4ubWF4UHJpb3JpdHlGZWVQZXJHYXN8fDAsIm1heFByaW9yaXR5RmVlUGVyR2FzIiksc3Qobi5tYXhGZWVQZXJHYXN8fDAsIm1heEZlZVBlckdhcyIpLHN0KG4uZ2FzTGltaXQsImdhc0xpbWl0Iiksbi50b3x8Z2Isc3Qobi52YWx1ZSwidmFsdWUiKSxuLmRhdGEsTGQobi5hY2Nlc3NMaXN0fHxbXSksc3Qobi5tYXhGZWVQZXJCbG9iR2FzfHwwLCJtYXhGZWVQZXJCbG9iR2FzIiksZkEobi5ibG9iVmVyc2lvbmVkSGFzaGVzfHxbXSwiYmxvYlZlcnNpb25lZEhhc2hlcyIpXTtyZXR1cm4gZSYmKGEucHVzaChzdChlLnlQYXJpdHksInlQYXJpdHkiKSksYS5wdXNoKFZ0KGUucikpLGEucHVzaChWdChlLnMpKSx0KT9ldChbIjB4MDMiLE1zKFthLHQubWFwKHM9PnMuZGF0YSksdC5tYXAocz0+cy5jb21taXRtZW50KSx0Lm1hcChzPT5zLnByb29mKV0pXSk6ZXQoWyIweDAzIixNcyhhKV0pfXZhciBhbixncyxicyx5cyx4cyxUcyxBcyxtcyxQcyx3cyx2cyxDcyxDbyxIbix2bixLbixFcyxLaSxNcjtsZXQgVGI9KE1yPWNsYXNze2NvbnN0cnVjdG9yKCl7UGUodGhpcyxFcyk7UGUodGhpcyxhbik7UGUodGhpcyxncyk7UGUodGhpcyxicyk7UGUodGhpcyx5cyk7UGUodGhpcyx4cyk7UGUodGhpcyxUcyk7UGUodGhpcyxBcyk7UGUodGhpcyxtcyk7UGUodGhpcyxQcyk7UGUodGhpcyx3cyk7UGUodGhpcyx2cyk7UGUodGhpcyxDcyk7UGUodGhpcyxDbyk7UGUodGhpcyxIbik7UGUodGhpcyx2bik7UGUodGhpcyxLbik7dWUodGhpcyxhbixudWxsKSx1ZSh0aGlzLGdzLG51bGwpLHVlKHRoaXMseXMsMCksdWUodGhpcyx4cyxBdCksdWUodGhpcyxUcyxudWxsKSx1ZSh0aGlzLEFzLG51bGwpLHVlKHRoaXMsbXMsbnVsbCksdWUodGhpcyxicywiMHgiKSx1ZSh0aGlzLFBzLEF0KSx1ZSh0aGlzLHdzLEF0KSx1ZSh0aGlzLHZzLG51bGwpLHVlKHRoaXMsQ3MsbnVsbCksdWUodGhpcyxDbyxudWxsKSx1ZSh0aGlzLEhuLG51bGwpLHVlKHRoaXMsS24sbnVsbCksdWUodGhpcyx2bixudWxsKX1nZXQgdHlwZSgpe3JldHVybiBZKHRoaXMsYW4pfXNldCB0eXBlKGUpe3N3aXRjaChlKXtjYXNlIG51bGw6dWUodGhpcyxhbixudWxsKTticmVhaztjYXNlIDA6Y2FzZSJsZWdhY3kiOnVlKHRoaXMsYW4sMCk7YnJlYWs7Y2FzZSAxOmNhc2UiYmVybGluIjpjYXNlImVpcC0yOTMwIjp1ZSh0aGlzLGFuLDEpO2JyZWFrO2Nhc2UgMjpjYXNlImxvbmRvbiI6Y2FzZSJlaXAtMTU1OSI6dWUodGhpcyxhbiwyKTticmVhaztjYXNlIDM6Y2FzZSJjYW5jdW4iOmNhc2UiZWlwLTQ4NDQiOnVlKHRoaXMsYW4sMyk7YnJlYWs7ZGVmYXVsdDpHKCExLCJ1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlIiwidHlwZSIsZSl9fWdldCB0eXBlTmFtZSgpe3N3aXRjaCh0aGlzLnR5cGUpe2Nhc2UgMDpyZXR1cm4ibGVnYWN5IjtjYXNlIDE6cmV0dXJuImVpcC0yOTMwIjtjYXNlIDI6cmV0dXJuImVpcC0xNTU5IjtjYXNlIDM6cmV0dXJuImVpcC00ODQ0In1yZXR1cm4gbnVsbH1nZXQgdG8oKXtjb25zdCBlPVkodGhpcyxncyk7cmV0dXJuIGU9PW51bGwmJnRoaXMudHlwZT09PTM/Z2I6ZX1zZXQgdG8oZSl7dWUodGhpcyxncyxlPT1udWxsP251bGw6eXIoZSkpfWdldCBub25jZSgpe3JldHVybiBZKHRoaXMseXMpfXNldCBub25jZShlKXt1ZSh0aGlzLHlzLEJ0KGUsInZhbHVlIikpfWdldCBnYXNMaW1pdCgpe3JldHVybiBZKHRoaXMseHMpfXNldCBnYXNMaW1pdChlKXt1ZSh0aGlzLHhzLHR0KGUpKX1nZXQgZ2FzUHJpY2UoKXtjb25zdCBlPVkodGhpcyxUcyk7cmV0dXJuIGU9PW51bGwmJih0aGlzLnR5cGU9PT0wfHx0aGlzLnR5cGU9PT0xKT9BdDplfXNldCBnYXNQcmljZShlKXt1ZSh0aGlzLFRzLGU9PW51bGw/bnVsbDp0dChlLCJnYXNQcmljZSIpKX1nZXQgbWF4UHJpb3JpdHlGZWVQZXJHYXMoKXtjb25zdCBlPVkodGhpcyxBcyk7cmV0dXJuIGU/Pyh0aGlzLnR5cGU9PT0yfHx0aGlzLnR5cGU9PT0zP0F0Om51bGwpfXNldCBtYXhQcmlvcml0eUZlZVBlckdhcyhlKXt1ZSh0aGlzLEFzLGU9PW51bGw/bnVsbDp0dChlLCJtYXhQcmlvcml0eUZlZVBlckdhcyIpKX1nZXQgbWF4RmVlUGVyR2FzKCl7Y29uc3QgZT1ZKHRoaXMsbXMpO3JldHVybiBlPz8odGhpcy50eXBlPT09Mnx8dGhpcy50eXBlPT09Mz9BdDpudWxsKX1zZXQgbWF4RmVlUGVyR2FzKGUpe3VlKHRoaXMsbXMsZT09bnVsbD9udWxsOnR0KGUsIm1heEZlZVBlckdhcyIpKX1nZXQgZGF0YSgpe3JldHVybiBZKHRoaXMsYnMpfXNldCBkYXRhKGUpe3VlKHRoaXMsYnMseWUoZSkpfWdldCB2YWx1ZSgpe3JldHVybiBZKHRoaXMsUHMpfXNldCB2YWx1ZShlKXt1ZSh0aGlzLFBzLHR0KGUsInZhbHVlIikpfWdldCBjaGFpbklkKCl7cmV0dXJuIFkodGhpcyx3cyl9c2V0IGNoYWluSWQoZSl7dWUodGhpcyx3cyx0dChlKSl9Z2V0IHNpZ25hdHVyZSgpe3JldHVybiBZKHRoaXMsdnMpfHxudWxsfXNldCBzaWduYXR1cmUoZSl7dWUodGhpcyx2cyxlPT1udWxsP251bGw6S3QuZnJvbShlKSl9Z2V0IGFjY2Vzc0xpc3QoKXtjb25zdCBlPVkodGhpcyxDcyl8fG51bGw7cmV0dXJuIGU/Pyh0aGlzLnR5cGU9PT0xfHx0aGlzLnR5cGU9PT0yfHx0aGlzLnR5cGU9PT0zP1tdOm51bGwpfXNldCBhY2Nlc3NMaXN0KGUpe3VlKHRoaXMsQ3MsZT09bnVsbD9udWxsOl9jKGUpKX1nZXQgbWF4RmVlUGVyQmxvYkdhcygpe2NvbnN0IGU9WSh0aGlzLENvKTtyZXR1cm4gZT09bnVsbCYmdGhpcy50eXBlPT09Mz9BdDplfXNldCBtYXhGZWVQZXJCbG9iR2FzKGUpe3VlKHRoaXMsQ28sZT09bnVsbD9udWxsOnR0KGUsIm1heEZlZVBlckJsb2JHYXMiKSl9Z2V0IGJsb2JWZXJzaW9uZWRIYXNoZXMoKXtsZXQgZT1ZKHRoaXMsSG4pO3JldHVybiBlPT1udWxsJiZ0aGlzLnR5cGU9PT0zP1tdOmV9c2V0IGJsb2JWZXJzaW9uZWRIYXNoZXMoZSl7aWYoZSE9bnVsbCl7RyhBcnJheS5pc0FycmF5KGUpLCJibG9iVmVyc2lvbmVkSGFzaGVzIG11c3QgYmUgYW4gQXJyYXkiLCJ2YWx1ZSIsZSksZT1lLnNsaWNlKCk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspRyhOdChlW3RdLDMyKSwiaW52YWxpZCBibG9iVmVyc2lvbmVkSGFzaCIsYHZhbHVlWyR7dH1dYCxlW3RdKX11ZSh0aGlzLEhuLGUpfWdldCBibG9icygpe3JldHVybiBZKHRoaXMsS24pPT1udWxsP251bGw6WSh0aGlzLEtuKS5tYXAoZT0+T2JqZWN0LmFzc2lnbih7fSxlKSl9c2V0IGJsb2JzKGUpe2lmKGU9PW51bGwpe3VlKHRoaXMsS24sbnVsbCk7cmV0dXJufWNvbnN0IHQ9W10sYT1bXTtmb3IobGV0IHM9MDtzPGUubGVuZ3RoO3MrKyl7Y29uc3Qgcj1lW3NdO2lmKFBjKHIpKXtSZShZKHRoaXMsdm4pLCJhZGRpbmcgYSByYXcgYmxvYiByZXF1aXJlcyBhIEtaRyBsaWJyYXJ5IiwiVU5TVVBQT1JURURfT1BFUkFUSU9OIix7b3BlcmF0aW9uOiJzZXQgYmxvYnMoKSJ9KTtsZXQgbz1BZShyKTtpZihHKG8ubGVuZ3RoPD1udSwiYmxvYiBpcyB0b28gbGFyZ2UiLGBibG9ic1ske3N9XWAsciksby5sZW5ndGghPT1udSl7Y29uc3QgZj1uZXcgVWludDhBcnJheShudSk7Zi5zZXQobyksbz1mfWNvbnN0IGk9WSh0aGlzLHZuKS5ibG9iVG9LemdDb21taXRtZW50KG8pLGM9eWUoWSh0aGlzLHZuKS5jb21wdXRlQmxvYkt6Z1Byb29mKG8saSkpO3QucHVzaCh7ZGF0YTp5ZShvKSxjb21taXRtZW50OnllKGkpLHByb29mOmN9KSxhLnB1c2goY3AoMSxpKSl9ZWxzZXtjb25zdCBvPXllKHIuY29tbWl0bWVudCk7dC5wdXNoKHtkYXRhOnllKHIuZGF0YSksY29tbWl0bWVudDpvLHByb29mOnllKHIucHJvb2YpfSksYS5wdXNoKGNwKDEsbykpfX11ZSh0aGlzLEtuLHQpLHVlKHRoaXMsSG4sYSl9Z2V0IGt6Zygpe3JldHVybiBZKHRoaXMsdm4pfXNldCBremcoZSl7dWUodGhpcyx2bixlKX1nZXQgaGFzaCgpe3JldHVybiB0aGlzLnNpZ25hdHVyZT09bnVsbD9udWxsOiRlKEZlKHRoaXMsRXMsS2kpLmNhbGwodGhpcywhMCwhMSkpfWdldCB1bnNpZ25lZEhhc2goKXtyZXR1cm4gJGUodGhpcy51bnNpZ25lZFNlcmlhbGl6ZWQpfWdldCBmcm9tKCl7cmV0dXJuIHRoaXMuc2lnbmF0dXJlPT1udWxsP251bGw6Um8odGhpcy51bnNpZ25lZEhhc2gsdGhpcy5zaWduYXR1cmUpfWdldCBmcm9tUHVibGljS2V5KCl7cmV0dXJuIHRoaXMuc2lnbmF0dXJlPT1udWxsP251bGw6YnIucmVjb3ZlclB1YmxpY0tleSh0aGlzLnVuc2lnbmVkSGFzaCx0aGlzLnNpZ25hdHVyZSl9aXNTaWduZWQoKXtyZXR1cm4gdGhpcy5zaWduYXR1cmUhPW51bGx9Z2V0IHNlcmlhbGl6ZWQoKXtyZXR1cm4gRmUodGhpcyxFcyxLaSkuY2FsbCh0aGlzLCEwLCEwKX1nZXQgdW5zaWduZWRTZXJpYWxpemVkKCl7cmV0dXJuIEZlKHRoaXMsRXMsS2kpLmNhbGwodGhpcywhMSwhMSl9aW5mZXJUeXBlKCl7Y29uc3QgZT10aGlzLmluZmVyVHlwZXMoKTtyZXR1cm4gZS5pbmRleE9mKDIpPj0wPzI6ZS5wb3AoKX1pbmZlclR5cGVzKCl7Y29uc3QgZT10aGlzLmdhc1ByaWNlIT1udWxsLHQ9dGhpcy5tYXhGZWVQZXJHYXMhPW51bGx8fHRoaXMubWF4UHJpb3JpdHlGZWVQZXJHYXMhPW51bGwsYT10aGlzLmFjY2Vzc0xpc3QhPW51bGwscz1ZKHRoaXMsQ28pIT1udWxsfHxZKHRoaXMsSG4pO3RoaXMubWF4RmVlUGVyR2FzIT1udWxsJiZ0aGlzLm1heFByaW9yaXR5RmVlUGVyR2FzIT1udWxsJiZSZSh0aGlzLm1heEZlZVBlckdhcz49dGhpcy5tYXhQcmlvcml0eUZlZVBlckdhcywicHJpb3JpdHlGZWUgY2Fubm90IGJlIG1vcmUgdGhhbiBtYXhGZWUiLCJCQURfREFUQSIse3ZhbHVlOnRoaXN9KSxSZSghdHx8dGhpcy50eXBlIT09MCYmdGhpcy50eXBlIT09MSwidHJhbnNhY3Rpb24gdHlwZSBjYW5ub3QgaGF2ZSBtYXhGZWVQZXJHYXMgb3IgbWF4UHJpb3JpdHlGZWVQZXJHYXMiLCJCQURfREFUQSIse3ZhbHVlOnRoaXN9KSxSZSh0aGlzLnR5cGUhPT0wfHwhYSwibGVnYWN5IHRyYW5zYWN0aW9uIGNhbm5vdCBoYXZlIGFjY2Vzc0xpc3QiLCJCQURfREFUQSIse3ZhbHVlOnRoaXN9KTtjb25zdCByPVtdO3JldHVybiB0aGlzLnR5cGUhPW51bGw/ci5wdXNoKHRoaXMudHlwZSk6dD9yLnB1c2goMik6ZT8oci5wdXNoKDEpLGF8fHIucHVzaCgwKSk6YT8oci5wdXNoKDEpLHIucHVzaCgyKSk6KHMmJnRoaXMudG98fChyLnB1c2goMCksci5wdXNoKDEpLHIucHVzaCgyKSksci5wdXNoKDMpKSxyLnNvcnQoKSxyfWlzTGVnYWN5KCl7cmV0dXJuIHRoaXMudHlwZT09PTB9aXNCZXJsaW4oKXtyZXR1cm4gdGhpcy50eXBlPT09MX1pc0xvbmRvbigpe3JldHVybiB0aGlzLnR5cGU9PT0yfWlzQ2FuY3VuKCl7cmV0dXJuIHRoaXMudHlwZT09PTN9Y2xvbmUoKXtyZXR1cm4gTXIuZnJvbSh0aGlzKX10b0pTT04oKXtjb25zdCBlPXQ9PnQ9PW51bGw/bnVsbDp0LnRvU3RyaW5nKCk7cmV0dXJue3R5cGU6dGhpcy50eXBlLHRvOnRoaXMudG8sZGF0YTp0aGlzLmRhdGEsbm9uY2U6dGhpcy5ub25jZSxnYXNMaW1pdDplKHRoaXMuZ2FzTGltaXQpLGdhc1ByaWNlOmUodGhpcy5nYXNQcmljZSksbWF4UHJpb3JpdHlGZWVQZXJHYXM6ZSh0aGlzLm1heFByaW9yaXR5RmVlUGVyR2FzKSxtYXhGZWVQZXJHYXM6ZSh0aGlzLm1heEZlZVBlckdhcyksdmFsdWU6ZSh0aGlzLnZhbHVlKSxjaGFpbklkOmUodGhpcy5jaGFpbklkKSxzaWc6dGhpcy5zaWduYXR1cmU/dGhpcy5zaWduYXR1cmUudG9KU09OKCk6bnVsbCxhY2Nlc3NMaXN0OnRoaXMuYWNjZXNzTGlzdH19c3RhdGljIGZyb20oZSl7aWYoZT09bnVsbClyZXR1cm4gbmV3IE1yO2lmKHR5cGVvZiBlPT0ic3RyaW5nIil7Y29uc3QgYT1BZShlKTtpZihhWzBdPj0xMjcpcmV0dXJuIE1yLmZyb20oZEEoYSkpO3N3aXRjaChhWzBdKXtjYXNlIDE6cmV0dXJuIE1yLmZyb20oYkEoYSkpO2Nhc2UgMjpyZXR1cm4gTXIuZnJvbShoQShhKSk7Y2FzZSAzOnJldHVybiBNci5mcm9tKHhBKGEpKX1SZSghMSwidW5zdXBwb3J0ZWQgdHJhbnNhY3Rpb24gdHlwZSIsIlVOU1VQUE9SVEVEX09QRVJBVElPTiIse29wZXJhdGlvbjoiZnJvbSJ9KX1jb25zdCB0PW5ldyBNcjtyZXR1cm4gZS50eXBlIT1udWxsJiYodC50eXBlPWUudHlwZSksZS50byE9bnVsbCYmKHQudG89ZS50byksZS5ub25jZSE9bnVsbCYmKHQubm9uY2U9ZS5ub25jZSksZS5nYXNMaW1pdCE9bnVsbCYmKHQuZ2FzTGltaXQ9ZS5nYXNMaW1pdCksZS5nYXNQcmljZSE9bnVsbCYmKHQuZ2FzUHJpY2U9ZS5nYXNQcmljZSksZS5tYXhQcmlvcml0eUZlZVBlckdhcyE9bnVsbCYmKHQubWF4UHJpb3JpdHlGZWVQZXJHYXM9ZS5tYXhQcmlvcml0eUZlZVBlckdhcyksZS5tYXhGZWVQZXJHYXMhPW51bGwmJih0Lm1heEZlZVBlckdhcz1lLm1heEZlZVBlckdhcyksZS5tYXhGZWVQZXJCbG9iR2FzIT1udWxsJiYodC5tYXhGZWVQZXJCbG9iR2FzPWUubWF4RmVlUGVyQmxvYkdhcyksZS5kYXRhIT1udWxsJiYodC5kYXRhPWUuZGF0YSksZS52YWx1ZSE9bnVsbCYmKHQudmFsdWU9ZS52YWx1ZSksZS5jaGFpbklkIT1udWxsJiYodC5jaGFpbklkPWUuY2hhaW5JZCksZS5zaWduYXR1cmUhPW51bGwmJih0LnNpZ25hdHVyZT1LdC5mcm9tKGUuc2lnbmF0dXJlKSksZS5hY2Nlc3NMaXN0IT1udWxsJiYodC5hY2Nlc3NMaXN0PWUuYWNjZXNzTGlzdCksZS5ibG9iVmVyc2lvbmVkSGFzaGVzIT1udWxsJiYodC5ibG9iVmVyc2lvbmVkSGFzaGVzPWUuYmxvYlZlcnNpb25lZEhhc2hlcyksZS5remchPW51bGwmJih0Lmt6Zz1lLmt6ZyksZS5ibG9icyE9bnVsbCYmKHQuYmxvYnM9ZS5ibG9icyksZS5oYXNoIT1udWxsJiYoRyh0LmlzU2lnbmVkKCksInVuc2lnbmVkIHRyYW5zYWN0aW9uIGNhbm5vdCBkZWZpbmUgJy5oYXNoJyIsInR4IixlKSxHKHQuaGFzaD09PWUuaGFzaCwiaGFzaCBtaXNtYXRjaCIsInR4IixlKSksZS5mcm9tIT1udWxsJiYoRyh0LmlzU2lnbmVkKCksInVuc2lnbmVkIHRyYW5zYWN0aW9uIGNhbm5vdCBkZWZpbmUgJy5mcm9tJyIsInR4IixlKSxHKHQuZnJvbS50b0xvd2VyQ2FzZSgpPT09KGUuZnJvbXx8IiIpLnRvTG93ZXJDYXNlKCksImZyb20gbWlzbWF0Y2giLCJ0eCIsZSkpLHR9fSxhbj1uZXcgV2Vha01hcCxncz1uZXcgV2Vha01hcCxicz1uZXcgV2Vha01hcCx5cz1uZXcgV2Vha01hcCx4cz1uZXcgV2Vha01hcCxUcz1uZXcgV2Vha01hcCxBcz1uZXcgV2Vha01hcCxtcz1uZXcgV2Vha01hcCxQcz1uZXcgV2Vha01hcCx3cz1uZXcgV2Vha01hcCx2cz1uZXcgV2Vha01hcCxDcz1uZXcgV2Vha01hcCxDbz1uZXcgV2Vha01hcCxIbj1uZXcgV2Vha01hcCx2bj1uZXcgV2Vha01hcCxLbj1uZXcgV2Vha01hcCxFcz1uZXcgV2Vha1NldCxLaT1mdW5jdGlvbihlLHQpe1JlKCFlfHx0aGlzLnNpZ25hdHVyZSE9bnVsbCwiY2Fubm90IHNlcmlhbGl6ZSB1bnNpZ25lZCB0cmFuc2FjdGlvbjsgbWF5YmUgeW91IG1lYW50IC51bnNpZ25lZFNlcmlhbGl6ZWQiLCJVTlNVUFBPUlRFRF9PUEVSQVRJT04iLHtvcGVyYXRpb246Ii5zZXJpYWxpemVkIn0pO2NvbnN0IGE9ZT90aGlzLnNpZ25hdHVyZTpudWxsO3N3aXRjaCh0aGlzLmluZmVyVHlwZSgpKXtjYXNlIDA6cmV0dXJuIHBBKHRoaXMsYSk7Y2FzZSAxOnJldHVybiB5QSh0aGlzLGEpO2Nhc2UgMjpyZXR1cm4gZ0EodGhpcyxhKTtjYXNlIDM6cmV0dXJuIFRBKHRoaXMsYSx0P3RoaXMuYmxvYnM6bnVsbCl9UmUoITEsInVuc3VwcG9ydGVkIHRyYW5zYWN0aW9uIHR5cGUiLCJVTlNVUFBPUlRFRF9PUEVSQVRJT04iLHtvcGVyYXRpb246Ii5zZXJpYWxpemVkIn0pfSxNcik7ZnVuY3Rpb24gQUEobil7cmV0dXJuIHR5cGVvZiBuPT0ic3RyaW5nIiYmKG49cnIobikpLCRlKGV0KFtycigkVCkscnIoU3RyaW5nKG4ubGVuZ3RoKSksbl0pKX1jb25zdCBBYj1uZXcgVWludDhBcnJheSgzMik7QWIuZmlsbCgwKTtjb25zdCBtQT1CaWdJbnQoLTEpLG1iPUJpZ0ludCgwKSxQYj1CaWdJbnQoMSksUEE9QmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiKTtmdW5jdGlvbiB3QShuKXtjb25zdCBlPUFlKG4pLHQ9ZS5sZW5ndGglMzI7cmV0dXJuIHQ/ZXQoW2UsQWIuc2xpY2UodCldKTp5ZShlKX1jb25zdCB2QT1LcihQYiwzMiksQ0E9S3IobWIsMzIpLHVwPXtuYW1lOiJzdHJpbmciLHZlcnNpb246InN0cmluZyIsY2hhaW5JZDoidWludDI1NiIsdmVyaWZ5aW5nQ29udHJhY3Q6ImFkZHJlc3MiLHNhbHQ6ImJ5dGVzMzIifSxvdT1bIm5hbWUiLCJ2ZXJzaW9uIiwiY2hhaW5JZCIsInZlcmlmeWluZ0NvbnRyYWN0Iiwic2FsdCJdO2Z1bmN0aW9uIGxwKG4pe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gRyh0eXBlb2YgZT09InN0cmluZyIsYGludmFsaWQgZG9tYWluIHZhbHVlIGZvciAke0pTT04uc3RyaW5naWZ5KG4pfWAsYGRvbWFpbi4ke259YCxlKSxlfX1jb25zdCBFQT17bmFtZTpscCgibmFtZSIpLHZlcnNpb246bHAoInZlcnNpb24iKSxjaGFpbklkOmZ1bmN0aW9uKG4pe2NvbnN0IGU9dHQobiwiZG9tYWluLmNoYWluSWQiKTtyZXR1cm4gRyhlPj0wLCJpbnZhbGlkIGNoYWluIElEIiwiZG9tYWluLmNoYWluSWQiLG4pLE51bWJlci5pc1NhZmVJbnRlZ2VyKGUpP051bWJlcihlKTpsZyhlKX0sdmVyaWZ5aW5nQ29udHJhY3Q6ZnVuY3Rpb24obil7dHJ5e3JldHVybiB5cihuKS50b0xvd2VyQ2FzZSgpfWNhdGNoe31HKCExLCdpbnZhbGlkIGRvbWFpbiB2YWx1ZSAidmVyaWZ5aW5nQ29udHJhY3QiJywiZG9tYWluLnZlcmlmeWluZ0NvbnRyYWN0IixuKX0sc2FsdDpmdW5jdGlvbihuKXtjb25zdCBlPUFlKG4sImRvbWFpbi5zYWx0Iik7cmV0dXJuIEcoZS5sZW5ndGg9PT0zMiwnaW52YWxpZCBkb21haW4gdmFsdWUgInNhbHQiJywiZG9tYWluLnNhbHQiLG4pLHllKGUpfX07ZnVuY3Rpb24gc3Uobil7e2NvbnN0IGU9bi5tYXRjaCgvXih1PylpbnQoXGQrKSQvKTtpZihlKXtjb25zdCB0PWVbMV09PT0iIixhPXBhcnNlSW50KGVbMl0pO0coYSU4PT09MCYmYSE9PTAmJmE8PTI1NiYmZVsyXT09PVN0cmluZyhhKSwiaW52YWxpZCBudW1lcmljIHdpZHRoIiwidHlwZSIsbik7Y29uc3Qgcz1zcyhQQSx0P2EtMTphKSxyPXQ/KHMrUGIpKm1BOm1iO3JldHVybiBmdW5jdGlvbihvKXtjb25zdCBpPXR0KG8sInZhbHVlIik7cmV0dXJuIEcoaT49ciYmaTw9cyxgdmFsdWUgb3V0LW9mLWJvdW5kcyBmb3IgJHtufWAsInZhbHVlIixpKSxLcih0P0VkKGksMjU2KTppLDMyKX19fXtjb25zdCBlPW4ubWF0Y2goL15ieXRlcyhcZCspJC8pO2lmKGUpe2NvbnN0IHQ9cGFyc2VJbnQoZVsxXSk7cmV0dXJuIEcodCE9PTAmJnQ8PTMyJiZlWzFdPT09U3RyaW5nKHQpLCJpbnZhbGlkIGJ5dGVzIHdpZHRoIiwidHlwZSIsbiksZnVuY3Rpb24oYSl7Y29uc3Qgcz1BZShhKTtyZXR1cm4gRyhzLmxlbmd0aD09PXQsYGludmFsaWQgbGVuZ3RoIGZvciAke259YCwidmFsdWUiLGEpLHdBKGEpfX19c3dpdGNoKG4pe2Nhc2UiYWRkcmVzcyI6cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBKbih5cihlKSwzMil9O2Nhc2UiYm9vbCI6cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlP3ZBOkNBfTtjYXNlImJ5dGVzIjpyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuICRlKGUpfTtjYXNlInN0cmluZyI6cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBacihlKX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gZnAobixlKXtyZXR1cm5gJHtufSgke2UubWFwKCh7bmFtZTp0LHR5cGU6YX0pPT5hKyIgIit0KS5qb2luKCIsIil9KWB9ZnVuY3Rpb24gU2kobil7Y29uc3QgZT1uLm1hdGNoKC9eKFteXHg1Yl0qKSgoXHg1YlxkKlx4NWQpKikoXHg1YihcZCopXHg1ZCkkLyk7cmV0dXJuIGU/e2Jhc2U6ZVsxXSxpbmRleDplWzJdK2VbNF0sYXJyYXk6e2Jhc2U6ZVsxXSxwcmVmaXg6ZVsxXStlWzJdLGNvdW50OmVbNV0/cGFyc2VJbnQoZVs1XSk6LTF9fTp7YmFzZTpufX12YXIgTWEsQ24sV3MseWMsd2IsTHQ7bGV0IGRwPShMdD1jbGFzc3tjb25zdHJ1Y3RvcihlKXtQZSh0aGlzLHljKTtaKHRoaXMsInByaW1hcnlUeXBlIik7UGUodGhpcyxNYSk7UGUodGhpcyxDbik7UGUodGhpcyxXcyk7dWUodGhpcyxDbixuZXcgTWFwKSx1ZSh0aGlzLFdzLG5ldyBNYXApO2NvbnN0IHQ9bmV3IE1hcCxhPW5ldyBNYXAscz1uZXcgTWFwLHI9e307T2JqZWN0LmtleXMoZSkuZm9yRWFjaChjPT57cltjXT1lW2NdLm1hcCgoe25hbWU6Zix0eXBlOmR9KT0+e2xldHtiYXNlOnAsaW5kZXg6Yn09U2koZCk7cmV0dXJuIHA9PT0iaW50IiYmIWUuaW50JiYocD0iaW50MjU2IikscD09PSJ1aW50IiYmIWUudWludCYmKHA9InVpbnQyNTYiKSx7bmFtZTpmLHR5cGU6cCsoYnx8IiIpfX0pLHQuc2V0KGMsbmV3IFNldCksYS5zZXQoYyxbXSkscy5zZXQoYyxuZXcgU2V0KX0pLHVlKHRoaXMsTWEsSlNPTi5zdHJpbmdpZnkocikpO2Zvcihjb25zdCBjIGluIHIpe2NvbnN0IGY9bmV3IFNldDtmb3IoY29uc3QgZCBvZiByW2NdKXtHKCFmLmhhcyhkLm5hbWUpLGBkdXBsaWNhdGUgdmFyaWFibGUgbmFtZSAke0pTT04uc3RyaW5naWZ5KGQubmFtZSl9IGluICR7SlNPTi5zdHJpbmdpZnkoYyl9YCwidHlwZXMiLGUpLGYuYWRkKGQubmFtZSk7Y29uc3QgcD1TaShkLnR5cGUpLmJhc2U7RyhwIT09YyxgY2lyY3VsYXIgdHlwZSByZWZlcmVuY2UgdG8gJHtKU09OLnN0cmluZ2lmeShwKX1gLCJ0eXBlcyIsZSksIXN1KHApJiYoRyhhLmhhcyhwKSxgdW5rbm93biB0eXBlICR7SlNPTi5zdHJpbmdpZnkocCl9YCwidHlwZXMiLGUpLGEuZ2V0KHApLnB1c2goYyksdC5nZXQoYykuYWRkKHApKX19Y29uc3Qgbz1BcnJheS5mcm9tKGEua2V5cygpKS5maWx0ZXIoYz0+YS5nZXQoYykubGVuZ3RoPT09MCk7RyhvLmxlbmd0aCE9PTAsIm1pc3NpbmcgcHJpbWFyeSB0eXBlIiwidHlwZXMiLGUpLEcoby5sZW5ndGg9PT0xLGBhbWJpZ3VvdXMgcHJpbWFyeSB0eXBlcyBvciB1bnVzZWQgdHlwZXM6ICR7by5tYXAoYz0+SlNPTi5zdHJpbmdpZnkoYykpLmpvaW4oIiwgIil9YCwidHlwZXMiLGUpLHplKHRoaXMse3ByaW1hcnlUeXBlOm9bMF19KTtmdW5jdGlvbiBpKGMsZil7RyghZi5oYXMoYyksYGNpcmN1bGFyIHR5cGUgcmVmZXJlbmNlIHRvICR7SlNPTi5zdHJpbmdpZnkoYyl9YCwidHlwZXMiLGUpLGYuYWRkKGMpO2Zvcihjb25zdCBkIG9mIHQuZ2V0KGMpKWlmKGEuaGFzKGQpKXtpKGQsZik7Zm9yKGNvbnN0IHAgb2YgZilzLmdldChwKS5hZGQoZCl9Zi5kZWxldGUoYyl9aSh0aGlzLnByaW1hcnlUeXBlLG5ldyBTZXQpO2Zvcihjb25zdFtjLGZdb2Ygcyl7Y29uc3QgZD1BcnJheS5mcm9tKGYpO2Quc29ydCgpLFkodGhpcyxDbikuc2V0KGMsZnAoYyxyW2NdKStkLm1hcChwPT5mcChwLHJbcF0pKS5qb2luKCIiKSl9fWdldCB0eXBlcygpe3JldHVybiBKU09OLnBhcnNlKFkodGhpcyxNYSkpfWdldEVuY29kZXIoZSl7bGV0IHQ9WSh0aGlzLFdzKS5nZXQoZSk7cmV0dXJuIHR8fCh0PUZlKHRoaXMseWMsd2IpLmNhbGwodGhpcyxlKSxZKHRoaXMsV3MpLnNldChlLHQpKSx0fWVuY29kZVR5cGUoZSl7Y29uc3QgdD1ZKHRoaXMsQ24pLmdldChlKTtyZXR1cm4gRyh0LGB1bmtub3duIHR5cGU6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCwibmFtZSIsZSksdH1lbmNvZGVEYXRhKGUsdCl7cmV0dXJuIHRoaXMuZ2V0RW5jb2RlcihlKSh0KX1oYXNoU3RydWN0KGUsdCl7cmV0dXJuICRlKHRoaXMuZW5jb2RlRGF0YShlLHQpKX1lbmNvZGUoZSl7cmV0dXJuIHRoaXMuZW5jb2RlRGF0YSh0aGlzLnByaW1hcnlUeXBlLGUpfWhhc2goZSl7cmV0dXJuIHRoaXMuaGFzaFN0cnVjdCh0aGlzLnByaW1hcnlUeXBlLGUpfV92aXNpdChlLHQsYSl7aWYoc3UoZSkpcmV0dXJuIGEoZSx0KTtjb25zdCBzPVNpKGUpLmFycmF5O2lmKHMpcmV0dXJuIEcocy5jb3VudD09PS0xfHxzLmNvdW50PT09dC5sZW5ndGgsYGFycmF5IGxlbmd0aCBtaXNtYXRjaDsgZXhwZWN0ZWQgbGVuZ3RoICR7cy5jb3VudH1gLCJ2YWx1ZSIsdCksdC5tYXAobz0+dGhpcy5fdmlzaXQocy5wcmVmaXgsbyxhKSk7Y29uc3Qgcj10aGlzLnR5cGVzW2VdO2lmKHIpcmV0dXJuIHIucmVkdWNlKChvLHtuYW1lOmksdHlwZTpjfSk9PihvW2ldPXRoaXMuX3Zpc2l0KGMsdFtpXSxhKSxvKSx7fSk7RyghMSxgdW5rbm93biB0eXBlOiAke2V9YCwidHlwZSIsZSl9dmlzaXQoZSx0KXtyZXR1cm4gdGhpcy5fdmlzaXQodGhpcy5wcmltYXJ5VHlwZSxlLHQpfXN0YXRpYyBmcm9tKGUpe3JldHVybiBuZXcgTHQoZSl9c3RhdGljIGdldFByaW1hcnlUeXBlKGUpe3JldHVybiBMdC5mcm9tKGUpLnByaW1hcnlUeXBlfXN0YXRpYyBoYXNoU3RydWN0KGUsdCxhKXtyZXR1cm4gTHQuZnJvbSh0KS5oYXNoU3RydWN0KGUsYSl9c3RhdGljIGhhc2hEb21haW4oZSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgYSBpbiBlKXtpZihlW2FdPT1udWxsKWNvbnRpbnVlO2NvbnN0IHM9dXBbYV07RyhzLGBpbnZhbGlkIHR5cGVkLWRhdGEgZG9tYWluIGtleTogJHtKU09OLnN0cmluZ2lmeShhKX1gLCJkb21haW4iLGUpLHQucHVzaCh7bmFtZTphLHR5cGU6c30pfXJldHVybiB0LnNvcnQoKGEscyk9Pm91LmluZGV4T2YoYS5uYW1lKS1vdS5pbmRleE9mKHMubmFtZSkpLEx0Lmhhc2hTdHJ1Y3QoIkVJUDcxMkRvbWFpbiIse0VJUDcxMkRvbWFpbjp0fSxlKX1zdGF0aWMgZW5jb2RlKGUsdCxhKXtyZXR1cm4gZXQoWyIweDE5MDEiLEx0Lmhhc2hEb21haW4oZSksTHQuZnJvbSh0KS5oYXNoKGEpXSl9c3RhdGljIGhhc2goZSx0LGEpe3JldHVybiAkZShMdC5lbmNvZGUoZSx0LGEpKX1zdGF0aWMgYXN5bmMgcmVzb2x2ZU5hbWVzKGUsdCxhLHMpe2U9T2JqZWN0LmFzc2lnbih7fSxlKTtmb3IoY29uc3QgaSBpbiBlKWVbaV09PW51bGwmJmRlbGV0ZSBlW2ldO2NvbnN0IHI9e307ZS52ZXJpZnlpbmdDb250cmFjdCYmIU50KGUudmVyaWZ5aW5nQ29udHJhY3QsMjApJiYocltlLnZlcmlmeWluZ0NvbnRyYWN0XT0iMHgiKTtjb25zdCBvPUx0LmZyb20odCk7by52aXNpdChhLChpLGMpPT4oaT09PSJhZGRyZXNzIiYmIU50KGMsMjApJiYocltjXT0iMHgiKSxjKSk7Zm9yKGNvbnN0IGkgaW4gcilyW2ldPWF3YWl0IHMoaSk7cmV0dXJuIGUudmVyaWZ5aW5nQ29udHJhY3QmJnJbZS52ZXJpZnlpbmdDb250cmFjdF0mJihlLnZlcmlmeWluZ0NvbnRyYWN0PXJbZS52ZXJpZnlpbmdDb250cmFjdF0pLGE9by52aXNpdChhLChpLGMpPT5pPT09ImFkZHJlc3MiJiZyW2NdP3JbY106Yykse2RvbWFpbjplLHZhbHVlOmF9fXN0YXRpYyBnZXRQYXlsb2FkKGUsdCxhKXtMdC5oYXNoRG9tYWluKGUpO2NvbnN0IHM9e30scj1bXTtvdS5mb3JFYWNoKGM9Pntjb25zdCBmPWVbY107ZiE9bnVsbCYmKHNbY109RUFbY10oZiksci5wdXNoKHtuYW1lOmMsdHlwZTp1cFtjXX0pKX0pO2NvbnN0IG89THQuZnJvbSh0KTt0PW8udHlwZXM7Y29uc3QgaT1PYmplY3QuYXNzaWduKHt9LHQpO3JldHVybiBHKGkuRUlQNzEyRG9tYWluPT1udWxsLCJ0eXBlcyBtdXN0IG5vdCBjb250YWluIEVJUDcxMkRvbWFpbiB0eXBlIiwidHlwZXMuRUlQNzEyRG9tYWluIix0KSxpLkVJUDcxMkRvbWFpbj1yLG8uZW5jb2RlKGEpLHt0eXBlczppLGRvbWFpbjpzLHByaW1hcnlUeXBlOm8ucHJpbWFyeVR5cGUsbWVzc2FnZTpvLnZpc2l0KGEsKGMsZik9PntpZihjLm1hdGNoKC9eYnl0ZXMoXGQqKS8pKXJldHVybiB5ZShBZShmKSk7aWYoYy5tYXRjaCgvXnU/aW50LykpcmV0dXJuIHR0KGYpLnRvU3RyaW5nKCk7c3dpdGNoKGMpe2Nhc2UiYWRkcmVzcyI6cmV0dXJuIGYudG9Mb3dlckNhc2UoKTtjYXNlImJvb2wiOnJldHVybiEhZjtjYXNlInN0cmluZyI6cmV0dXJuIEcodHlwZW9mIGY9PSJzdHJpbmciLCJpbnZhbGlkIHN0cmluZyIsInZhbHVlIixmKSxmfUcoITEsInVuc3VwcG9ydGVkIHR5cGUiLCJ0eXBlIixjKX0pfX19LE1hPW5ldyBXZWFrTWFwLENuPW5ldyBXZWFrTWFwLFdzPW5ldyBXZWFrTWFwLHljPW5ldyBXZWFrU2V0LHdiPWZ1bmN0aW9uKGUpe3tjb25zdCBzPXN1KGUpO2lmKHMpcmV0dXJuIHN9Y29uc3QgdD1TaShlKS5hcnJheTtpZih0KXtjb25zdCBzPXQucHJlZml4LHI9dGhpcy5nZXRFbmNvZGVyKHMpO3JldHVybiBvPT57Ryh0LmNvdW50PT09LTF8fHQuY291bnQ9PT1vLmxlbmd0aCxgYXJyYXkgbGVuZ3RoIG1pc21hdGNoOyBleHBlY3RlZCBsZW5ndGggJHt0LmNvdW50fWAsInZhbHVlIixvKTtsZXQgaT1vLm1hcChyKTtyZXR1cm4gWSh0aGlzLENuKS5oYXMocykmJihpPWkubWFwKCRlKSksJGUoZXQoaSkpfX1jb25zdCBhPXRoaXMudHlwZXNbZV07aWYoYSl7Y29uc3Qgcz1acihZKHRoaXMsQ24pLmdldChlKSk7cmV0dXJuIHI9Pntjb25zdCBvPWEubWFwKCh7bmFtZTppLHR5cGU6Y30pPT57Y29uc3QgZj10aGlzLmdldEVuY29kZXIoYykocltpXSk7cmV0dXJuIFkodGhpcyxDbikuaGFzKGMpPyRlKGYpOmZ9KTtyZXR1cm4gby51bnNoaWZ0KHMpLGV0KG8pfX1HKCExLGB1bmtub3duIHR5cGU6ICR7ZX1gLCJ0eXBlIixlKX0sTHQpO2Z1bmN0aW9uIHFzKG4pe2NvbnN0IGU9bmV3IFNldDtyZXR1cm4gbi5mb3JFYWNoKHQ9PmUuYWRkKHQpKSxPYmplY3QuZnJlZXplKGUpfWNvbnN0IFdBPSJleHRlcm5hbCBwdWJsaWMgcGF5YWJsZSBvdmVycmlkZSI7cXMoV0Euc3BsaXQoIiAiKSk7Y29uc3QgdmI9ImNvbnN0YW50IGV4dGVybmFsIGludGVybmFsIHBheWFibGUgcHJpdmF0ZSBwdWJsaWMgcHVyZSB2aWV3IG92ZXJyaWRlIjtxcyh2Yi5zcGxpdCgiICIpKTtjb25zdCBDYj0iY29uc3RydWN0b3IgZXJyb3IgZXZlbnQgZmFsbGJhY2sgZnVuY3Rpb24gcmVjZWl2ZSBzdHJ1Y3QiO3FzKENiLnNwbGl0KCIgIikpO2NvbnN0IEViPSJjYWxsZGF0YSBtZW1vcnkgc3RvcmFnZSBwYXlhYmxlIGluZGV4ZWQiLEJBPXFzKEViLnNwbGl0KCIgIikpLElBPSJ0dXBsZSByZXR1cm5zIixTQT1bQ2IsRWIsSUEsdmJdLmpvaW4oIiAiKSxfQT1xcyhTQS5zcGxpdCgiICIpKSxPQT17IigiOiJPUEVOX1BBUkVOIiwiKSI6IkNMT1NFX1BBUkVOIiwiWyI6Ik9QRU5fQlJBQ0tFVCIsIl0iOiJDTE9TRV9CUkFDS0VUIiwiLCI6IkNPTU1BIiwiQCI6IkFUIn0sUkE9bmV3IFJlZ0V4cCgiXihcXHMqKSIpLE1BPW5ldyBSZWdFeHAoIl4oWzAtOV0rKSIpLEZBPW5ldyBSZWdFeHAoIl4oW2EtekEtWiRfXVthLXpBLVowLTkkX10qKSIpLE5BPW5ldyBSZWdFeHAoIl4oW2EtekEtWiRfXVthLXpBLVowLTkkX10qKSQiKSxXYj1uZXcgUmVnRXhwKCJeKGFkZHJlc3N8Ym9vbHxieXRlcyhbMC05XSopfHN0cmluZ3x1P2ludChbMC05XSopKSQiKTt2YXIgQ3QsanIsRmEsb2wsT287bGV0IEJiPShPbz1jbGFzc3tjb25zdHJ1Y3RvcihlKXtQZSh0aGlzLEZhKTtQZSh0aGlzLEN0KTtQZSh0aGlzLGpyKTt1ZSh0aGlzLEN0LDApLHVlKHRoaXMsanIsZS5zbGljZSgpKX1nZXQgb2Zmc2V0KCl7cmV0dXJuIFkodGhpcyxDdCl9Z2V0IGxlbmd0aCgpe3JldHVybiBZKHRoaXMsanIpLmxlbmd0aC1ZKHRoaXMsQ3QpfWNsb25lKCl7cmV0dXJuIG5ldyBPbyhZKHRoaXMsanIpKX1yZXNldCgpe3VlKHRoaXMsQ3QsMCl9cG9wS2V5d29yZChlKXtjb25zdCB0PXRoaXMucGVlaygpO2lmKHQudHlwZSE9PSJLRVlXT1JEInx8IWUuaGFzKHQudGV4dCkpdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCBrZXl3b3JkICR7dC50ZXh0fWApO3JldHVybiB0aGlzLnBvcCgpLnRleHR9cG9wVHlwZShlKXtpZih0aGlzLnBlZWsoKS50eXBlIT09ZSl7Y29uc3QgdD10aGlzLnBlZWsoKTt0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkICR7ZX07IGdvdCAke3QudHlwZX0gJHtKU09OLnN0cmluZ2lmeSh0LnRleHQpfWApfXJldHVybiB0aGlzLnBvcCgpLnRleHR9cG9wUGFyZW4oKXtjb25zdCBlPXRoaXMucGVlaygpO2lmKGUudHlwZSE9PSJPUEVOX1BBUkVOIil0aHJvdyBuZXcgRXJyb3IoImJhZCBzdGFydCIpO2NvbnN0IHQ9RmUodGhpcyxGYSxvbCkuY2FsbCh0aGlzLFkodGhpcyxDdCkrMSxlLm1hdGNoKzEpO3JldHVybiB1ZSh0aGlzLEN0LGUubWF0Y2grMSksdH1wb3BQYXJhbXMoKXtjb25zdCBlPXRoaXMucGVlaygpO2lmKGUudHlwZSE9PSJPUEVOX1BBUkVOIil0aHJvdyBuZXcgRXJyb3IoImJhZCBzdGFydCIpO2NvbnN0IHQ9W107Zm9yKDtZKHRoaXMsQ3QpPGUubWF0Y2gtMTspe2NvbnN0IGE9dGhpcy5wZWVrKCkubGlua05leHQ7dC5wdXNoKEZlKHRoaXMsRmEsb2wpLmNhbGwodGhpcyxZKHRoaXMsQ3QpKzEsYSkpLHVlKHRoaXMsQ3QsYSl9cmV0dXJuIHVlKHRoaXMsQ3QsZS5tYXRjaCsxKSx0fXBlZWsoKXtpZihZKHRoaXMsQ3QpPj1ZKHRoaXMsanIpLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIm91dC1vZi1ib3VuZHMiKTtyZXR1cm4gWSh0aGlzLGpyKVtZKHRoaXMsQ3QpXX1wZWVrS2V5d29yZChlKXtjb25zdCB0PXRoaXMucGVla1R5cGUoIktFWVdPUkQiKTtyZXR1cm4gdCE9bnVsbCYmZS5oYXModCk/dDpudWxsfXBlZWtUeXBlKGUpe2lmKHRoaXMubGVuZ3RoPT09MClyZXR1cm4gbnVsbDtjb25zdCB0PXRoaXMucGVlaygpO3JldHVybiB0LnR5cGU9PT1lP3QudGV4dDpudWxsfXBvcCgpe2NvbnN0IGU9dGhpcy5wZWVrKCk7cmV0dXJuIFljKHRoaXMsQ3QpLl8rKyxlfXRvU3RyaW5nKCl7Y29uc3QgZT1bXTtmb3IobGV0IHQ9WSh0aGlzLEN0KTt0PFkodGhpcyxqcikubGVuZ3RoO3QrKyl7Y29uc3QgYT1ZKHRoaXMsanIpW3RdO2UucHVzaChgJHthLnR5cGV9OiR7YS50ZXh0fWApfXJldHVybmA8VG9rZW5TdHJpbmcgJHtlLmpvaW4oIiAiKX0+YH19LEN0PW5ldyBXZWFrTWFwLGpyPW5ldyBXZWFrTWFwLEZhPW5ldyBXZWFrU2V0LG9sPWZ1bmN0aW9uKGU9MCx0PTApe3JldHVybiBuZXcgT28oWSh0aGlzLGpyKS5zbGljZShlLHQpLm1hcChhPT5PYmplY3QuZnJlZXplKE9iamVjdC5hc3NpZ24oe30sYSx7bWF0Y2g6YS5tYXRjaC1lLGxpbmtCYWNrOmEubGlua0JhY2stZSxsaW5rTmV4dDphLmxpbmtOZXh0LWV9KSkpKX0sT28pO2Z1bmN0aW9uIGtBKG4pe2NvbnN0IGU9W10sdD1vPT57Y29uc3QgaT1yPG4ubGVuZ3RoP0pTT04uc3RyaW5naWZ5KG5bcl0pOiIkRU9JIjt0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgdG9rZW4gJHtpfSBhdCAke3J9OiAke299YCl9O2xldCBhPVtdLHM9W10scj0wO2Zvcig7cjxuLmxlbmd0aDspe2xldCBvPW4uc3Vic3RyaW5nKHIpLGk9by5tYXRjaChSQSk7aSYmKHIrPWlbMV0ubGVuZ3RoLG89bi5zdWJzdHJpbmcocikpO2NvbnN0IGM9e2RlcHRoOmEubGVuZ3RoLGxpbmtCYWNrOi0xLGxpbmtOZXh0Oi0xLG1hdGNoOi0xLHR5cGU6IiIsdGV4dDoiIixvZmZzZXQ6cix2YWx1ZTotMX07ZS5wdXNoKGMpO2xldCBmPU9BW29bMF1dfHwiIjtpZihmKXtpZihjLnR5cGU9ZixjLnRleHQ9b1swXSxyKyssZj09PSJPUEVOX1BBUkVOIilhLnB1c2goZS5sZW5ndGgtMSkscy5wdXNoKGUubGVuZ3RoLTEpO2Vsc2UgaWYoZj09IkNMT1NFX1BBUkVOIilhLmxlbmd0aD09PTAmJnQoIm5vIG1hdGNoaW5nIG9wZW4gYnJhY2tldCIpLGMubWF0Y2g9YS5wb3AoKSxlW2MubWF0Y2hdLm1hdGNoPWUubGVuZ3RoLTEsYy5kZXB0aC0tLGMubGlua0JhY2s9cy5wb3AoKSxlW2MubGlua0JhY2tdLmxpbmtOZXh0PWUubGVuZ3RoLTE7ZWxzZSBpZihmPT09IkNPTU1BIiljLmxpbmtCYWNrPXMucG9wKCksZVtjLmxpbmtCYWNrXS5saW5rTmV4dD1lLmxlbmd0aC0xLHMucHVzaChlLmxlbmd0aC0xKTtlbHNlIGlmKGY9PT0iT1BFTl9CUkFDS0VUIiljLnR5cGU9IkJSQUNLRVQiO2Vsc2UgaWYoZj09PSJDTE9TRV9CUkFDS0VUIil7bGV0IGQ9ZS5wb3AoKS50ZXh0O2lmKGUubGVuZ3RoPjAmJmVbZS5sZW5ndGgtMV0udHlwZT09PSJOVU1CRVIiKXtjb25zdCBwPWUucG9wKCkudGV4dDtkPXArZCxlW2UubGVuZ3RoLTFdLnZhbHVlPUJ0KHApfWlmKGUubGVuZ3RoPT09MHx8ZVtlLmxlbmd0aC0xXS50eXBlIT09IkJSQUNLRVQiKXRocm93IG5ldyBFcnJvcigibWlzc2luZyBvcGVuaW5nIGJyYWNrZXQiKTtlW2UubGVuZ3RoLTFdLnRleHQrPWR9Y29udGludWV9aWYoaT1vLm1hdGNoKEZBKSxpKXtpZihjLnRleHQ9aVsxXSxyKz1jLnRleHQubGVuZ3RoLF9BLmhhcyhjLnRleHQpKXtjLnR5cGU9IktFWVdPUkQiO2NvbnRpbnVlfWlmKGMudGV4dC5tYXRjaChXYikpe2MudHlwZT0iVFlQRSI7Y29udGludWV9Yy50eXBlPSJJRCI7Y29udGludWV9aWYoaT1vLm1hdGNoKE1BKSxpKXtjLnRleHQ9aVsxXSxjLnR5cGU9Ik5VTUJFUiIscis9Yy50ZXh0Lmxlbmd0aDtjb250aW51ZX10aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgdG9rZW4gJHtKU09OLnN0cmluZ2lmeShvWzBdKX0gYXQgcG9zaXRpb24gJHtyfWApfXJldHVybiBuZXcgQmIoZS5tYXAobz0+T2JqZWN0LmZyZWV6ZShvKSkpfWZ1bmN0aW9uIHBwKG4sZSl7Y29uc3QgdD1uZXcgU2V0O2Zvcig7Oyl7Y29uc3QgYT1uLnBlZWtUeXBlKCJLRVlXT1JEIik7aWYoYT09bnVsbHx8ZSYmIWUuaGFzKGEpKWJyZWFrO2lmKG4ucG9wKCksdC5oYXMoYSkpdGhyb3cgbmV3IEVycm9yKGBkdXBsaWNhdGUga2V5d29yZHM6ICR7SlNPTi5zdHJpbmdpZnkoYSl9YCk7dC5hZGQoYSl9cmV0dXJuIE9iamVjdC5mcmVlemUodCl9Y29uc3QgVUE9bmV3IFJlZ0V4cCgvXiguKilcWyhbMC05XSopXF0kLyk7ZnVuY3Rpb24gaHAobil7Y29uc3QgZT1uLm1hdGNoKFdiKTtpZihHKGUsImludmFsaWQgdHlwZSIsInR5cGUiLG4pLG49PT0idWludCIpcmV0dXJuInVpbnQyNTYiO2lmKG49PT0iaW50IilyZXR1cm4iaW50MjU2IjtpZihlWzJdKXtjb25zdCB0PXBhcnNlSW50KGVbMl0pO0codCE9PTAmJnQ8PTMyLCJpbnZhbGlkIGJ5dGVzIGxlbmd0aCIsInR5cGUiLG4pfWVsc2UgaWYoZVszXSl7Y29uc3QgdD1wYXJzZUludChlWzNdKTtHKHQhPT0wJiZ0PD0yNTYmJnQlOD09PTAsImludmFsaWQgbnVtZXJpYyB3aWR0aCIsInR5cGUiLG4pfXJldHVybiBufWNvbnN0IHFvPXt9LGdwPVN5bWJvbC5mb3IoIl9ldGhlcnNfaW50ZXJuYWwiKSxicD0iX1BhcmFtVHlwZUludGVybmFsIjt2YXIgQnMsWmksenQ7bGV0IGF1PSh6dD1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsYSxzLHIsbyxpLGMpe1BlKHRoaXMsQnMpO1oodGhpcywibmFtZSIpO1oodGhpcywidHlwZSIpO1oodGhpcywiYmFzZVR5cGUiKTtaKHRoaXMsImluZGV4ZWQiKTtaKHRoaXMsImNvbXBvbmVudHMiKTtaKHRoaXMsImFycmF5TGVuZ3RoIik7Wih0aGlzLCJhcnJheUNoaWxkcmVuIik7aWYodG8oZSxxbywiUGFyYW1UeXBlIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZ3Ase3ZhbHVlOmJwfSksbyYmKG89T2JqZWN0LmZyZWV6ZShvLnNsaWNlKCkpKSxzPT09ImFycmF5Iil7aWYoaT09bnVsbHx8Yz09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIiIpfWVsc2UgaWYoaSE9bnVsbHx8YyE9bnVsbCl0aHJvdyBuZXcgRXJyb3IoIiIpO2lmKHM9PT0idHVwbGUiKXtpZihvPT1udWxsKXRocm93IG5ldyBFcnJvcigiIil9ZWxzZSBpZihvIT1udWxsKXRocm93IG5ldyBFcnJvcigiIik7emUodGhpcyx7bmFtZTp0LHR5cGU6YSxiYXNlVHlwZTpzLGluZGV4ZWQ6cixjb21wb25lbnRzOm8sYXJyYXlMZW5ndGg6aSxhcnJheUNoaWxkcmVuOmN9KX1mb3JtYXQoZSl7aWYoZT09bnVsbCYmKGU9InNpZ2hhc2giKSxlPT09Impzb24iKXtjb25zdCBhPXRoaXMubmFtZXx8IiI7aWYodGhpcy5pc0FycmF5KCkpe2NvbnN0IHI9SlNPTi5wYXJzZSh0aGlzLmFycmF5Q2hpbGRyZW4uZm9ybWF0KCJqc29uIikpO3JldHVybiByLm5hbWU9YSxyLnR5cGUrPWBbJHt0aGlzLmFycmF5TGVuZ3RoPDA/IiI6U3RyaW5nKHRoaXMuYXJyYXlMZW5ndGgpfV1gLEpTT04uc3RyaW5naWZ5KHIpfWNvbnN0IHM9e3R5cGU6dGhpcy5iYXNlVHlwZT09PSJ0dXBsZSI/InR1cGxlIjp0aGlzLnR5cGUsbmFtZTphfTtyZXR1cm4gdHlwZW9mIHRoaXMuaW5kZXhlZD09ImJvb2xlYW4iJiYocy5pbmRleGVkPXRoaXMuaW5kZXhlZCksdGhpcy5pc1R1cGxlKCkmJihzLmNvbXBvbmVudHM9dGhpcy5jb21wb25lbnRzLm1hcChyPT5KU09OLnBhcnNlKHIuZm9ybWF0KGUpKSkpLEpTT04uc3RyaW5naWZ5KHMpfWxldCB0PSIiO3JldHVybiB0aGlzLmlzQXJyYXkoKT8odCs9dGhpcy5hcnJheUNoaWxkcmVuLmZvcm1hdChlKSx0Kz1gWyR7dGhpcy5hcnJheUxlbmd0aDwwPyIiOlN0cmluZyh0aGlzLmFycmF5TGVuZ3RoKX1dYCk6dGhpcy5pc1R1cGxlKCk/dCs9IigiK3RoaXMuY29tcG9uZW50cy5tYXAoYT0+YS5mb3JtYXQoZSkpLmpvaW4oZT09PSJmdWxsIj8iLCAiOiIsIikrIikiOnQrPXRoaXMudHlwZSxlIT09InNpZ2hhc2giJiYodGhpcy5pbmRleGVkPT09ITAmJih0Kz0iIGluZGV4ZWQiKSxlPT09ImZ1bGwiJiZ0aGlzLm5hbWUmJih0Kz0iICIrdGhpcy5uYW1lKSksdH1pc0FycmF5KCl7cmV0dXJuIHRoaXMuYmFzZVR5cGU9PT0iYXJyYXkifWlzVHVwbGUoKXtyZXR1cm4gdGhpcy5iYXNlVHlwZT09PSJ0dXBsZSJ9aXNJbmRleGFibGUoKXtyZXR1cm4gdGhpcy5pbmRleGVkIT1udWxsfXdhbGsoZSx0KXtpZih0aGlzLmlzQXJyYXkoKSl7aWYoIUFycmF5LmlzQXJyYXkoZSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGFycmF5IHZhbHVlIik7aWYodGhpcy5hcnJheUxlbmd0aCE9PS0xJiZlLmxlbmd0aCE9PXRoaXMuYXJyYXlMZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhcnJheSBpcyB3cm9uZyBsZW5ndGgiKTtjb25zdCBhPXRoaXM7cmV0dXJuIGUubWFwKHM9PmEuYXJyYXlDaGlsZHJlbi53YWxrKHMsdCkpfWlmKHRoaXMuaXNUdXBsZSgpKXtpZighQXJyYXkuaXNBcnJheShlKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgdHVwbGUgdmFsdWUiKTtpZihlLmxlbmd0aCE9PXRoaXMuY29tcG9uZW50cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhcnJheSBpcyB3cm9uZyBsZW5ndGgiKTtjb25zdCBhPXRoaXM7cmV0dXJuIGUubWFwKChzLHIpPT5hLmNvbXBvbmVudHNbcl0ud2FsayhzLHQpKX1yZXR1cm4gdCh0aGlzLnR5cGUsZSl9YXN5bmMgd2Fsa0FzeW5jKGUsdCl7Y29uc3QgYT1bXSxzPVtlXTtyZXR1cm4gRmUodGhpcyxCcyxaaSkuY2FsbCh0aGlzLGEsZSx0LHI9PntzWzBdPXJ9KSxhLmxlbmd0aCYmYXdhaXQgUHJvbWlzZS5hbGwoYSksc1swXX1zdGF0aWMgZnJvbShlLHQpe2lmKHp0LmlzUGFyYW1UeXBlKGUpKXJldHVybiBlO2lmKHR5cGVvZiBlPT0ic3RyaW5nIil0cnl7cmV0dXJuIHp0LmZyb20oa0EoZSksdCl9Y2F0Y2h7RyghMSwiaW52YWxpZCBwYXJhbSB0eXBlIiwib2JqIixlKX1lbHNlIGlmKGUgaW5zdGFuY2VvZiBCYil7bGV0IGk9IiIsYz0iIixmPW51bGw7cHAoZSxxcyhbInR1cGxlIl0pKS5oYXMoInR1cGxlIil8fGUucGVla1R5cGUoIk9QRU5fUEFSRU4iKT8oYz0idHVwbGUiLGY9ZS5wb3BQYXJhbXMoKS5tYXAoZz0+enQuZnJvbShnKSksaT1gdHVwbGUoJHtmLm1hcChnPT5nLmZvcm1hdCgpKS5qb2luKCIsIil9KWApOihpPWhwKGUucG9wVHlwZSgiVFlQRSIpKSxjPWkpO2xldCBkPW51bGwscD1udWxsO2Zvcig7ZS5sZW5ndGgmJmUucGVla1R5cGUoIkJSQUNLRVQiKTspe2NvbnN0IGc9ZS5wb3AoKTtkPW5ldyB6dChxbywiIixpLGMsbnVsbCxmLHAsZCkscD1nLnZhbHVlLGkrPWcudGV4dCxjPSJhcnJheSIsZj1udWxsfWxldCBiPW51bGw7aWYocHAoZSxCQSkuaGFzKCJpbmRleGVkIikpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiIik7Yj0hMH1jb25zdCBXPWUucGVla1R5cGUoIklEIik/ZS5wb3AoKS50ZXh0OiIiO2lmKGUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigibGVmdG92ZXIgdG9rZW5zIik7cmV0dXJuIG5ldyB6dChxbyxXLGksYyxiLGYscCxkKX1jb25zdCBhPWUubmFtZTtHKCFhfHx0eXBlb2YgYT09InN0cmluZyImJmEubWF0Y2goTkEpLCJpbnZhbGlkIG5hbWUiLCJvYmoubmFtZSIsYSk7bGV0IHM9ZS5pbmRleGVkO3MhPW51bGwmJihHKHQsInBhcmFtZXRlciBjYW5ub3QgYmUgaW5kZXhlZCIsIm9iai5pbmRleGVkIixlLmluZGV4ZWQpLHM9ISFzKTtsZXQgcj1lLnR5cGUsbz1yLm1hdGNoKFVBKTtpZihvKXtjb25zdCBpPXBhcnNlSW50KG9bMl18fCItMSIpLGM9enQuZnJvbSh7dHlwZTpvWzFdLGNvbXBvbmVudHM6ZS5jb21wb25lbnRzfSk7cmV0dXJuIG5ldyB6dChxbyxhfHwiIixyLCJhcnJheSIscyxudWxsLGksYyl9aWYocj09PSJ0dXBsZSJ8fHIuc3RhcnRzV2l0aCgidHVwbGUoIil8fHIuc3RhcnRzV2l0aCgiKCIpKXtjb25zdCBpPWUuY29tcG9uZW50cyE9bnVsbD9lLmNvbXBvbmVudHMubWFwKGY9Pnp0LmZyb20oZikpOm51bGw7cmV0dXJuIG5ldyB6dChxbyxhfHwiIixyLCJ0dXBsZSIscyxpLG51bGwsbnVsbCl9cmV0dXJuIHI9aHAoZS50eXBlKSxuZXcgenQocW8sYXx8IiIscixyLHMsbnVsbCxudWxsLG51bGwpfXN0YXRpYyBpc1BhcmFtVHlwZShlKXtyZXR1cm4gZSYmZVtncF09PT1icH19LEJzPW5ldyBXZWFrU2V0LFppPWZ1bmN0aW9uKGUsdCxhLHMpe2lmKHRoaXMuaXNBcnJheSgpKXtpZighQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgYXJyYXkgdmFsdWUiKTtpZih0aGlzLmFycmF5TGVuZ3RoIT09LTEmJnQubGVuZ3RoIT09dGhpcy5hcnJheUxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImFycmF5IGlzIHdyb25nIGxlbmd0aCIpO2NvbnN0IG89dGhpcy5hcnJheUNoaWxkcmVuLGk9dC5zbGljZSgpO2kuZm9yRWFjaCgoYyxmKT0+e3ZhciBkO0ZlKGQ9byxCcyxaaSkuY2FsbChkLGUsYyxhLHA9PntpW2ZdPXB9KX0pLHMoaSk7cmV0dXJufWlmKHRoaXMuaXNUdXBsZSgpKXtjb25zdCBvPXRoaXMuY29tcG9uZW50cztsZXQgaTtpZihBcnJheS5pc0FycmF5KHQpKWk9dC5zbGljZSgpO2Vsc2V7aWYodD09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCB0dXBsZSB2YWx1ZSIpO2k9by5tYXAoYz0+e2lmKCFjLm5hbWUpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgdXNlIG9iamVjdCB2YWx1ZSB3aXRoIHVubmFtZWQgY29tcG9uZW50cyIpO2lmKCEoYy5uYW1lIGluIHQpKXRocm93IG5ldyBFcnJvcihgbWlzc2luZyB2YWx1ZSBmb3IgY29tcG9uZW50ICR7Yy5uYW1lfWApO3JldHVybiB0W2MubmFtZV19KX1pZihpLmxlbmd0aCE9PXRoaXMuY29tcG9uZW50cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhcnJheSBpcyB3cm9uZyBsZW5ndGgiKTtpLmZvckVhY2goKGMsZik9Pnt2YXIgZDtGZShkPW9bZl0sQnMsWmkpLmNhbGwoZCxlLGMsYSxwPT57aVtmXT1wfSl9KSxzKGkpO3JldHVybn1jb25zdCByPWEodGhpcy50eXBlLHQpO3IudGhlbj9lLnB1c2goYXN5bmMgZnVuY3Rpb24oKXtzKGF3YWl0IHIpfSgpKTpzKHIpfSx6dCk7Y29uc3QgcXI9bmV3IE1hcDtxci5zZXQoMCwiR0VORVJJQ19QQU5JQyIpO3FyLnNldCgxLCJBU1NFUlRfRkFMU0UiKTtxci5zZXQoMTcsIk9WRVJGTE9XIik7cXIuc2V0KDE4LCJESVZJREVfQllfWkVSTyIpO3FyLnNldCgzMywiRU5VTV9SQU5HRV9FUlJPUiIpO3FyLnNldCgzNCwiQkFEX1NUT1JBR0VfREFUQSIpO3FyLnNldCg0OSwiU1RBQ0tfVU5ERVJGTE9XIik7cXIuc2V0KDUwLCJBUlJBWV9SQU5HRV9FUlJPUiIpO3FyLnNldCg2NSwiT1VUX09GX01FTU9SWSIpO3FyLnNldCg4MSwiVU5JTklUSUFMSVpFRF9GVU5DVElPTl9DQUxMIik7Y29uc3QgREE9bmV3IFJlZ0V4cCgvXmJ5dGVzKFswLTldKikkLyksJEE9bmV3IFJlZ0V4cCgvXih1P2ludCkoWzAtOV0qKSQvKTtsZXQgaXU9bnVsbCx5cD0xMDI0O2Z1bmN0aW9uIExBKG4sZSx0LGEpe2xldCBzPSJtaXNzaW5nIHJldmVydCBkYXRhIixyPW51bGw7Y29uc3Qgbz1udWxsO2xldCBpPW51bGw7aWYodCl7cz0iZXhlY3V0aW9uIHJldmVydGVkIjtjb25zdCBmPUFlKHQpO2lmKHQ9eWUodCksZi5sZW5ndGg9PT0wKXMrPSIgKG5vIGRhdGEgcHJlc2VudDsgbGlrZWx5IHJlcXVpcmUoZmFsc2UpIG9jY3VycmVkIixyPSJyZXF1aXJlKGZhbHNlKSI7ZWxzZSBpZihmLmxlbmd0aCUzMiE9PTQpcys9IiAoY291bGQgbm90IGRlY29kZSByZWFzb247IGludmFsaWQgZGF0YSBsZW5ndGgpIjtlbHNlIGlmKHllKGYuc2xpY2UoMCw0KSk9PT0iMHgwOGMzNzlhMCIpdHJ5e3I9YS5kZWNvZGUoWyJzdHJpbmciXSxmLnNsaWNlKDQpKVswXSxpPXtzaWduYXR1cmU6IkVycm9yKHN0cmluZykiLG5hbWU6IkVycm9yIixhcmdzOltyXX0scys9YDogJHtKU09OLnN0cmluZ2lmeShyKX1gfWNhdGNoe3MrPSIgKGNvdWxkIG5vdCBkZWNvZGUgcmVhc29uOyBpbnZhbGlkIHN0cmluZyBkYXRhKSJ9ZWxzZSBpZih5ZShmLnNsaWNlKDAsNCkpPT09IjB4NGU0ODdiNzEiKXRyeXtjb25zdCBkPU51bWJlcihhLmRlY29kZShbInVpbnQyNTYiXSxmLnNsaWNlKDQpKVswXSk7aT17c2lnbmF0dXJlOiJQYW5pYyh1aW50MjU2KSIsbmFtZToiUGFuaWMiLGFyZ3M6W2RdfSxyPWBQYW5pYyBkdWUgdG8gJHtxci5nZXQoZCl8fCJVTktOT1dOIn0oJHtkfSlgLHMrPWA6ICR7cn1gfWNhdGNoe3MrPSIgKGNvdWxkIG5vdCBkZWNvZGUgcGFuaWMgY29kZSkifWVsc2Ugcys9IiAodW5rbm93biBjdXN0b20gZXJyb3IpIn1jb25zdCBjPXt0bzplLnRvP3lyKGUudG8pOm51bGwsZGF0YTplLmRhdGF8fCIweCJ9O3JldHVybiBlLmZyb20mJihjLmZyb209eXIoZS5mcm9tKSksYWcocywiQ0FMTF9FWENFUFRJT04iLHthY3Rpb246bixkYXRhOnQscmVhc29uOnIsdHJhbnNhY3Rpb246YyxpbnZvY2F0aW9uOm8scmV2ZXJ0Oml9KX12YXIgWm4sdHM7Y29uc3QgeGM9Y2xhc3MgeGN7Y29uc3RydWN0b3IoKXtQZSh0aGlzLFpuKX1nZXREZWZhdWx0VmFsdWUoZSl7Y29uc3QgdD1lLm1hcChzPT5GZSh0aGlzLFpuLHRzKS5jYWxsKHRoaXMsYXUuZnJvbShzKSkpO3JldHVybiBuZXcgSWkodCwiXyIpLmRlZmF1bHRWYWx1ZSgpfWVuY29kZShlLHQpe2lnKHQubGVuZ3RoLGUubGVuZ3RoLCJ0eXBlcy92YWx1ZXMgbGVuZ3RoIG1pc21hdGNoIik7Y29uc3QgYT1lLm1hcChvPT5GZSh0aGlzLFpuLHRzKS5jYWxsKHRoaXMsYXUuZnJvbShvKSkpLHM9bmV3IElpKGEsIl8iKSxyPW5ldyBKdTtyZXR1cm4gcy5lbmNvZGUocix0KSxyLmRhdGF9ZGVjb2RlKGUsdCxhKXtjb25zdCBzPWUubWFwKG89PkZlKHRoaXMsWm4sdHMpLmNhbGwodGhpcyxhdS5mcm9tKG8pKSk7cmV0dXJuIG5ldyBJaShzLCJfIikuZGVjb2RlKG5ldyBZdSh0LGEseXApKX1zdGF0aWMgX3NldERlZmF1bHRNYXhJbmZsYXRpb24oZSl7Ryh0eXBlb2YgZT09Im51bWJlciImJk51bWJlci5pc0ludGVnZXIoZSksImludmFsaWQgZGVmYXVsdE1heEluZmxhdGlvbiBmYWN0b3IiLCJ2YWx1ZSIsZSkseXA9ZX1zdGF0aWMgZGVmYXVsdEFiaUNvZGVyKCl7cmV0dXJuIGl1PT1udWxsJiYoaXU9bmV3IHhjKSxpdX1zdGF0aWMgZ2V0QnVpbHRpbkNhbGxFeGNlcHRpb24oZSx0LGEpe3JldHVybiBMQShlLHQsYSx4Yy5kZWZhdWx0QWJpQ29kZXIoKSl9fTtabj1uZXcgV2Vha1NldCx0cz1mdW5jdGlvbihlKXtpZihlLmlzQXJyYXkoKSlyZXR1cm4gbmV3IHFUKEZlKHRoaXMsWm4sdHMpLmNhbGwodGhpcyxlLmFycmF5Q2hpbGRyZW4pLGUuYXJyYXlMZW5ndGgsZS5uYW1lKTtpZihlLmlzVHVwbGUoKSlyZXR1cm4gbmV3IElpKGUuY29tcG9uZW50cy5tYXAoYT0+RmUodGhpcyxabix0cykuY2FsbCh0aGlzLGEpKSxlLm5hbWUpO3N3aXRjaChlLmJhc2VUeXBlKXtjYXNlImFkZHJlc3MiOnJldHVybiBuZXcgS1QoZS5uYW1lKTtjYXNlImJvb2wiOnJldHVybiBuZXcgSlQoZS5uYW1lKTtjYXNlInN0cmluZyI6cmV0dXJuIG5ldyBzQShlLm5hbWUpO2Nhc2UiYnl0ZXMiOnJldHVybiBuZXcgWVQoZS5uYW1lKTtjYXNlIiI6cmV0dXJuIG5ldyBlQShlLm5hbWUpfWxldCB0PWUudHlwZS5tYXRjaCgkQSk7aWYodCl7bGV0IGE9cGFyc2VJbnQodFsyXXx8IjI1NiIpO3JldHVybiBHKGEhPT0wJiZhPD0yNTYmJmElOD09PTAsImludmFsaWQgIit0WzFdKyIgYml0IGxlbmd0aCIsInBhcmFtIixlKSxuZXcgb0EoYS84LHRbMV09PT0iaW50IixlLm5hbWUpfWlmKHQ9ZS50eXBlLm1hdGNoKERBKSx0KXtsZXQgYT1wYXJzZUludCh0WzFdKTtyZXR1cm4gRyhhIT09MCYmYTw9MzIsImludmFsaWQgYnl0ZXMgbGVuZ3RoIiwicGFyYW0iLGUpLG5ldyBYVChhLGUubmFtZSl9RyghMSwiaW52YWxpZCB0eXBlIiwidHlwZSIsZS50eXBlKX07bGV0IFhuPXhjO0JpZ0ludCgwKTtmdW5jdGlvbiBJYihuKXtjb25zdCBlPXt9O24udG8mJihlLnRvPW4udG8pLG4uZnJvbSYmKGUuZnJvbT1uLmZyb20pLG4uZGF0YSYmKGUuZGF0YT15ZShuLmRhdGEpKTtjb25zdCB0PSJjaGFpbklkLGdhc0xpbWl0LGdhc1ByaWNlLG1heEZlZVBlckJsb2JHYXMsbWF4RmVlUGVyR2FzLG1heFByaW9yaXR5RmVlUGVyR2FzLHZhbHVlIi5zcGxpdCgvLC8pO2Zvcihjb25zdCBzIG9mIHQpIShzIGluIG4pfHxuW3NdPT1udWxsfHwoZVtzXT10dChuW3NdLGByZXF1ZXN0LiR7c31gKSk7Y29uc3QgYT0idHlwZSxub25jZSIuc3BsaXQoLywvKTtmb3IoY29uc3QgcyBvZiBhKSEocyBpbiBuKXx8bltzXT09bnVsbHx8KGVbc109QnQobltzXSxgcmVxdWVzdC4ke3N9YCkpO3JldHVybiBuLmFjY2Vzc0xpc3QmJihlLmFjY2Vzc0xpc3Q9X2Mobi5hY2Nlc3NMaXN0KSksImJsb2NrVGFnImluIG4mJihlLmJsb2NrVGFnPW4uYmxvY2tUYWcpLCJlbmFibGVDY2lwUmVhZCJpbiBuJiYoZS5lbmFibGVDY2lwUmVhZD0hIW4uZW5hYmxlQ2NpcFJlYWQpLCJjdXN0b21EYXRhImluIG4mJihlLmN1c3RvbURhdGE9bi5jdXN0b21EYXRhKSwiYmxvYlZlcnNpb25lZEhhc2hlcyJpbiBuJiZuLmJsb2JWZXJzaW9uZWRIYXNoZXMmJihlLmJsb2JWZXJzaW9uZWRIYXNoZXM9bi5ibG9iVmVyc2lvbmVkSGFzaGVzLnNsaWNlKCkpLCJremciaW4gbiYmKGUua3pnPW4ua3pnKSwiYmxvYnMiaW4gbiYmbi5ibG9icyYmKGUuYmxvYnM9bi5ibG9icy5tYXAocz0+UGMocyk/eWUocyk6T2JqZWN0LmFzc2lnbih7fSxzKSkpLGV9ZnVuY3Rpb24gSm8obixlKXtpZihuLnByb3ZpZGVyKXJldHVybiBuLnByb3ZpZGVyO1JlKCExLCJtaXNzaW5nIHByb3ZpZGVyIiwiVU5TVVBQT1JURURfT1BFUkFUSU9OIix7b3BlcmF0aW9uOmV9KX1hc3luYyBmdW5jdGlvbiB4cChuLGUpe2xldCB0PUliKGUpO2lmKHQudG8hPW51bGwmJih0LnRvPWljKHQudG8sbikpLHQuZnJvbSE9bnVsbCl7Y29uc3QgYT10LmZyb207dC5mcm9tPVByb21pc2UuYWxsKFtuLmdldEFkZHJlc3MoKSxpYyhhLG4pXSkudGhlbigoW3Mscl0pPT4oRyhzLnRvTG93ZXJDYXNlKCk9PT1yLnRvTG93ZXJDYXNlKCksInRyYW5zYWN0aW9uIGZyb20gbWlzbWF0Y2giLCJ0eC5mcm9tIixyKSxzKSl9ZWxzZSB0LmZyb209bi5nZXRBZGRyZXNzKCk7cmV0dXJuIGF3YWl0IENkKHQpfWNsYXNzIFNie2NvbnN0cnVjdG9yKGUpe1oodGhpcywicHJvdmlkZXIiKTt6ZSh0aGlzLHtwcm92aWRlcjplfHxudWxsfSl9YXN5bmMgZ2V0Tm9uY2UoZSl7cmV0dXJuIEpvKHRoaXMsImdldFRyYW5zYWN0aW9uQ291bnQiKS5nZXRUcmFuc2FjdGlvbkNvdW50KGF3YWl0IHRoaXMuZ2V0QWRkcmVzcygpLGUpfWFzeW5jIHBvcHVsYXRlQ2FsbChlKXtyZXR1cm4gYXdhaXQgeHAodGhpcyxlKX1hc3luYyBwb3B1bGF0ZVRyYW5zYWN0aW9uKGUpe2NvbnN0IHQ9Sm8odGhpcywicG9wdWxhdGVUcmFuc2FjdGlvbiIpLGE9YXdhaXQgeHAodGhpcyxlKTthLm5vbmNlPT1udWxsJiYoYS5ub25jZT1hd2FpdCB0aGlzLmdldE5vbmNlKCJwZW5kaW5nIikpLGEuZ2FzTGltaXQ9PW51bGwmJihhLmdhc0xpbWl0PWF3YWl0IHRoaXMuZXN0aW1hdGVHYXMoYSkpO2NvbnN0IHM9YXdhaXQgdGhpcy5wcm92aWRlci5nZXROZXR3b3JrKCk7aWYoYS5jaGFpbklkIT1udWxsKXtjb25zdCBvPXR0KGEuY2hhaW5JZCk7RyhvPT09cy5jaGFpbklkLCJ0cmFuc2FjdGlvbiBjaGFpbklkIG1pc21hdGNoIiwidHguY2hhaW5JZCIsZS5jaGFpbklkKX1lbHNlIGEuY2hhaW5JZD1zLmNoYWluSWQ7Y29uc3Qgcj1hLm1heEZlZVBlckdhcyE9bnVsbHx8YS5tYXhQcmlvcml0eUZlZVBlckdhcyE9bnVsbDtpZihhLmdhc1ByaWNlIT1udWxsJiYoYS50eXBlPT09Mnx8cik/RyghMSwiZWlwLTE1NTkgdHJhbnNhY3Rpb24gZG8gbm90IHN1cHBvcnQgZ2FzUHJpY2UiLCJ0eCIsZSk6KGEudHlwZT09PTB8fGEudHlwZT09PTEpJiZyJiZHKCExLCJwcmUtZWlwLTE1NTkgdHJhbnNhY3Rpb24gZG8gbm90IHN1cHBvcnQgbWF4RmVlUGVyR2FzL21heFByaW9yaXR5RmVlUGVyR2FzIiwidHgiLGUpLChhLnR5cGU9PT0yfHxhLnR5cGU9PW51bGwpJiZhLm1heEZlZVBlckdhcyE9bnVsbCYmYS5tYXhQcmlvcml0eUZlZVBlckdhcyE9bnVsbClhLnR5cGU9MjtlbHNlIGlmKGEudHlwZT09PTB8fGEudHlwZT09PTEpe2NvbnN0IG89YXdhaXQgdC5nZXRGZWVEYXRhKCk7UmUoby5nYXNQcmljZSE9bnVsbCwibmV0d29yayBkb2VzIG5vdCBzdXBwb3J0IGdhc1ByaWNlIiwiVU5TVVBQT1JURURfT1BFUkFUSU9OIix7b3BlcmF0aW9uOiJnZXRHYXNQcmljZSJ9KSxhLmdhc1ByaWNlPT1udWxsJiYoYS5nYXNQcmljZT1vLmdhc1ByaWNlKX1lbHNle2NvbnN0IG89YXdhaXQgdC5nZXRGZWVEYXRhKCk7aWYoYS50eXBlPT1udWxsKWlmKG8ubWF4RmVlUGVyR2FzIT1udWxsJiZvLm1heFByaW9yaXR5RmVlUGVyR2FzIT1udWxsKWlmKGEudHlwZT0yLGEuZ2FzUHJpY2UhPW51bGwpe2NvbnN0IGk9YS5nYXNQcmljZTtkZWxldGUgYS5nYXNQcmljZSxhLm1heEZlZVBlckdhcz1pLGEubWF4UHJpb3JpdHlGZWVQZXJHYXM9aX1lbHNlIGEubWF4RmVlUGVyR2FzPT1udWxsJiYoYS5tYXhGZWVQZXJHYXM9by5tYXhGZWVQZXJHYXMpLGEubWF4UHJpb3JpdHlGZWVQZXJHYXM9PW51bGwmJihhLm1heFByaW9yaXR5RmVlUGVyR2FzPW8ubWF4UHJpb3JpdHlGZWVQZXJHYXMpO2Vsc2Ugby5nYXNQcmljZSE9bnVsbD8oUmUoIXIsIm5ldHdvcmsgZG9lcyBub3Qgc3VwcG9ydCBFSVAtMTU1OSIsIlVOU1VQUE9SVEVEX09QRVJBVElPTiIse29wZXJhdGlvbjoicG9wdWxhdGVUcmFuc2FjdGlvbiJ9KSxhLmdhc1ByaWNlPT1udWxsJiYoYS5nYXNQcmljZT1vLmdhc1ByaWNlKSxhLnR5cGU9MCk6UmUoITEsImZhaWxlZCB0byBnZXQgY29uc2lzdGVudCBmZWUgZGF0YSIsIlVOU1VQUE9SVEVEX09QRVJBVElPTiIse29wZXJhdGlvbjoic2lnbmVyLmdldEZlZURhdGEifSk7ZWxzZShhLnR5cGU9PT0yfHxhLnR5cGU9PT0zKSYmKGEubWF4RmVlUGVyR2FzPT1udWxsJiYoYS5tYXhGZWVQZXJHYXM9by5tYXhGZWVQZXJHYXMpLGEubWF4UHJpb3JpdHlGZWVQZXJHYXM9PW51bGwmJihhLm1heFByaW9yaXR5RmVlUGVyR2FzPW8ubWF4UHJpb3JpdHlGZWVQZXJHYXMpKX1yZXR1cm4gYXdhaXQgQ2QoYSl9YXN5bmMgZXN0aW1hdGVHYXMoZSl7cmV0dXJuIEpvKHRoaXMsImVzdGltYXRlR2FzIikuZXN0aW1hdGVHYXMoYXdhaXQgdGhpcy5wb3B1bGF0ZUNhbGwoZSkpfWFzeW5jIGNhbGwoZSl7cmV0dXJuIEpvKHRoaXMsImNhbGwiKS5jYWxsKGF3YWl0IHRoaXMucG9wdWxhdGVDYWxsKGUpKX1hc3luYyByZXNvbHZlTmFtZShlKXtyZXR1cm4gYXdhaXQgSm8odGhpcywicmVzb2x2ZU5hbWUiKS5yZXNvbHZlTmFtZShlKX1hc3luYyBzZW5kVHJhbnNhY3Rpb24oZSl7Y29uc3QgdD1Kbyh0aGlzLCJzZW5kVHJhbnNhY3Rpb24iKSxhPWF3YWl0IHRoaXMucG9wdWxhdGVUcmFuc2FjdGlvbihlKTtkZWxldGUgYS5mcm9tO2NvbnN0IHM9VGIuZnJvbShhKTtyZXR1cm4gYXdhaXQgdC5icm9hZGNhc3RUcmFuc2FjdGlvbihhd2FpdCB0aGlzLnNpZ25UcmFuc2FjdGlvbihzKSl9fXZhciBJcyxxaTtjb25zdCBFMD1jbGFzcyBFMCBleHRlbmRzIFNie2NvbnN0cnVjdG9yKHQsYSl7c3VwZXIoYSk7UGUodGhpcyxJcyk7Wih0aGlzLCJhZGRyZXNzIik7emUodGhpcyx7YWRkcmVzczp0fSl9YXN5bmMgZ2V0QWRkcmVzcygpe3JldHVybiB0aGlzLmFkZHJlc3N9Y29ubmVjdCh0KXtyZXR1cm4gbmV3IEUwKHRoaXMuYWRkcmVzcyx0KX1hc3luYyBzaWduVHJhbnNhY3Rpb24odCl7RmUodGhpcyxJcyxxaSkuY2FsbCh0aGlzLCJ0cmFuc2FjdGlvbnMiLCJzaWduVHJhbnNhY3Rpb24iKX1hc3luYyBzaWduTWVzc2FnZSh0KXtGZSh0aGlzLElzLHFpKS5jYWxsKHRoaXMsIm1lc3NhZ2VzIiwic2lnbk1lc3NhZ2UiKX1hc3luYyBzaWduVHlwZWREYXRhKHQsYSxzKXtGZSh0aGlzLElzLHFpKS5jYWxsKHRoaXMsInR5cGVkLWRhdGEiLCJzaWduVHlwZWREYXRhIil9fTtJcz1uZXcgV2Vha1NldCxxaT1mdW5jdGlvbih0LGEpe1JlKCExLGBWb2lkU2lnbmVyIGNhbm5vdCBzaWduICR7dH1gLCJVTlNVUFBPUlRFRF9PUEVSQVRJT04iLHtvcGVyYXRpb246YX0pfTtsZXQgc2w9RTA7dmFyIFNzO2NvbnN0IFcwPWNsYXNzIFcwIGV4dGVuZHMgU2J7Y29uc3RydWN0b3IodCxhKXtzdXBlcihhKTtaKHRoaXMsImFkZHJlc3MiKTtQZSh0aGlzLFNzKTtHKHQmJnR5cGVvZiB0LnNpZ249PSJmdW5jdGlvbiIsImludmFsaWQgcHJpdmF0ZSBrZXkiLCJwcml2YXRlS2V5IiwiWyBSRURBQ1RFRCBdIiksdWUodGhpcyxTcyx0KTtjb25zdCBzPU9jKHRoaXMuc2lnbmluZ0tleS5wdWJsaWNLZXkpO3plKHRoaXMse2FkZHJlc3M6c30pfWdldCBzaWduaW5nS2V5KCl7cmV0dXJuIFkodGhpcyxTcyl9Z2V0IHByaXZhdGVLZXkoKXtyZXR1cm4gdGhpcy5zaWduaW5nS2V5LnByaXZhdGVLZXl9YXN5bmMgZ2V0QWRkcmVzcygpe3JldHVybiB0aGlzLmFkZHJlc3N9Y29ubmVjdCh0KXtyZXR1cm4gbmV3IFcwKFkodGhpcyxTcyksdCl9YXN5bmMgc2lnblRyYW5zYWN0aW9uKHQpe3Q9SWIodCk7Y29uc3R7dG86YSxmcm9tOnN9PWF3YWl0IENkKHt0bzp0LnRvP2ljKHQudG8sdGhpcy5wcm92aWRlcik6dm9pZCAwLGZyb206dC5mcm9tP2ljKHQuZnJvbSx0aGlzLnByb3ZpZGVyKTp2b2lkIDB9KTthIT1udWxsJiYodC50bz1hKSxzIT1udWxsJiYodC5mcm9tPXMpLHQuZnJvbSE9bnVsbCYmKEcoeXIodC5mcm9tKT09PXRoaXMuYWRkcmVzcywidHJhbnNhY3Rpb24gZnJvbSBhZGRyZXNzIG1pc21hdGNoIiwidHguZnJvbSIsdC5mcm9tKSxkZWxldGUgdC5mcm9tKTtjb25zdCByPVRiLmZyb20odCk7cmV0dXJuIHIuc2lnbmF0dXJlPXRoaXMuc2lnbmluZ0tleS5zaWduKHIudW5zaWduZWRIYXNoKSxyLnNlcmlhbGl6ZWR9YXN5bmMgc2lnbk1lc3NhZ2UodCl7cmV0dXJuIHRoaXMuc2lnbk1lc3NhZ2VTeW5jKHQpfXNpZ25NZXNzYWdlU3luYyh0KXtyZXR1cm4gdGhpcy5zaWduaW5nS2V5LnNpZ24oQUEodCkpLnNlcmlhbGl6ZWR9YXN5bmMgc2lnblR5cGVkRGF0YSh0LGEscyl7Y29uc3Qgcj1hd2FpdCBkcC5yZXNvbHZlTmFtZXModCxhLHMsYXN5bmMgbz0+e1JlKHRoaXMucHJvdmlkZXIhPW51bGwsImNhbm5vdCByZXNvbHZlIEVOUyBuYW1lcyB3aXRob3V0IGEgcHJvdmlkZXIiLCJVTlNVUFBPUlRFRF9PUEVSQVRJT04iLHtvcGVyYXRpb246InJlc29sdmVOYW1lIixpbmZvOntuYW1lOm99fSk7Y29uc3QgaT1hd2FpdCB0aGlzLnByb3ZpZGVyLnJlc29sdmVOYW1lKG8pO3JldHVybiBSZShpIT1udWxsLCJ1bmNvbmZpZ3VyZWQgRU5TIG5hbWUiLCJVTkNPTkZJR1VSRURfTkFNRSIse3ZhbHVlOm99KSxpfSk7cmV0dXJuIHRoaXMuc2lnbmluZ0tleS5zaWduKGRwLmhhc2goci5kb21haW4sYSxyLnZhbHVlKSkuc2VyaWFsaXplZH19O1NzPW5ldyBXZWFrTWFwO2xldCBhbD1XMDtjb25zdCBjYz0iICEjJCUmJygpKissLS4vPD0+P0BbXV5fYHt8fX4iLHpBPS9eW2Etel0qJC9pO2Z1bmN0aW9uIFRwKG4sZSl7bGV0IHQ9OTc7cmV0dXJuIG4ucmVkdWNlKChhLHMpPT4ocz09PWU/dCsrOnMubWF0Y2goekEpP2EucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHQpK3MpOih0PTk3LGEucHVzaChzKSksYSksW10pfWZ1bmN0aW9uIGpBKG4sZSl7Zm9yKGxldCBzPWNjLmxlbmd0aC0xO3M+PTA7cy0tKW49bi5zcGxpdChjY1tzXSkuam9pbihlLnN1YnN0cmluZygyKnMsMipzKzIpKTtjb25zdCB0PVtdLGE9bi5yZXBsYWNlKC8oOnwoWzAtOV0pfChbQS1aXVthLXpdKikpL2csKHMscixvLGkpPT57aWYobylmb3IobGV0IGM9cGFyc2VJbnQobyk7Yz49MDtjLS0pdC5wdXNoKCI7Iik7ZWxzZSB0LnB1c2goci50b0xvd2VyQ2FzZSgpKTtyZXR1cm4iIn0pO2lmKGEpdGhyb3cgbmV3IEVycm9yKGBsZWZ0b3ZlcnM6ICR7SlNPTi5zdHJpbmdpZnkoYSl9YCk7cmV0dXJuIFRwKFRwKHQsIjsiKSwiOiIpfWZ1bmN0aW9uIFZBKG4pe3JldHVybiBHKG5bMF09PT0iMCIsInVuc3VwcG9ydGVkIGF1d2wgZGF0YSIsImRhdGEiLG4pLGpBKG4uc3Vic3RyaW5nKDErMipjYy5sZW5ndGgpLG4uc3Vic3RyaW5nKDEsMSsyKmNjLmxlbmd0aCkpfWNsYXNzIF9ie2NvbnN0cnVjdG9yKGUpe1oodGhpcywibG9jYWxlIik7emUodGhpcyx7bG9jYWxlOmV9KX1zcGxpdChlKXtyZXR1cm4gZS50b0xvd2VyQ2FzZSgpLnNwbGl0KC9ccysvZyl9am9pbihlKXtyZXR1cm4gZS5qb2luKCIgIil9fXZhciBfcyxOYSxFbyxrYSxpbDtjbGFzcyBHQSBleHRlbmRzIF9ie2NvbnN0cnVjdG9yKHQsYSxzKXtzdXBlcih0KTtQZSh0aGlzLGthKTtQZSh0aGlzLF9zKTtQZSh0aGlzLE5hKTtQZSh0aGlzLEVvKTt1ZSh0aGlzLF9zLGEpLHVlKHRoaXMsTmEscyksdWUodGhpcyxFbyxudWxsKX1nZXQgX2RhdGEoKXtyZXR1cm4gWSh0aGlzLF9zKX1fZGVjb2RlV29yZHMoKXtyZXR1cm4gVkEoWSh0aGlzLF9zKSl9Z2V0V29yZCh0KXtjb25zdCBhPUZlKHRoaXMsa2EsaWwpLmNhbGwodGhpcyk7cmV0dXJuIEcodD49MCYmdDxhLmxlbmd0aCxgaW52YWxpZCB3b3JkIGluZGV4OiAke3R9YCwiaW5kZXgiLHQpLGFbdF19Z2V0V29yZEluZGV4KHQpe3JldHVybiBGZSh0aGlzLGthLGlsKS5jYWxsKHRoaXMpLmluZGV4T2YodCl9fV9zPW5ldyBXZWFrTWFwLE5hPW5ldyBXZWFrTWFwLEVvPW5ldyBXZWFrTWFwLGthPW5ldyBXZWFrU2V0LGlsPWZ1bmN0aW9uKCl7aWYoWSh0aGlzLEVvKT09bnVsbCl7Y29uc3QgdD10aGlzLl9kZWNvZGVXb3JkcygpO2lmKFpyKHQuam9pbihgCmApK2AKYCkhPT1ZKHRoaXMsTmEpKXRocm93IG5ldyBFcnJvcihgQklQMzkgV29yZGxpc3QgZm9yICR7dGhpcy5sb2NhbGV9IEZBSUxFRGApO3VlKHRoaXMsRW8sdCl9cmV0dXJuIFkodGhpcyxFbyl9O2NvbnN0IEhBPSIwZXJsZW9uYWxvcmVuc2VpbmNlcmVnZXN0aWNpdFN0YW52ZXRlYXJjdHNzaSNjaDJBdGhjayZ0bmVMbDBBbmQjSWwueUxlT3V0Tz1TfFMlYi9yYUBTdXJkVScwQ2VbQ2lkfENvdW50Q3UnSGllPUlkT3UsLVF1aSpSb1tUVF1UJVQqW1R1JDBBcHRERC10RCpbSnUsTS5VbHRWPClWaSkwUm9iLTBGYWlyRiVkUmFpZDBBKEVFbnRSZWUwRWFkME1SUnAldFMhX3JtQnVtQ29ob2xFcnRJJkxMZXlMb3dNbyxPfVBoYVJlYWR5U29UIFdheXMwQT51ckF6KGdPbmdPdW50VSdkMEFseSxDaCVDaXxHIEchR3J5SW0kSyFOb3VuKU51JE9gIFN3IFQmbmFUaXF1ZVhpZXR5WTFBcnRPbG9neVBlP1AhUHJvPVJpbDFDaEN0LUVhRW5hR3VlTU1lZE0lTXlPdW5kUjwrUmUsUmk9Um93VFRlZmFAVGksVHclazBLUGVAU2F1bHRTZXRTaSxTdW1lVGhtYTBIIT5PbVRhe1QmZFQudWRlVHJhQDBDdF1ELkd1LE50VGglVG9UdW1uMEVyYStPY2Fkb09pZDBBa2VBKkF5RXNvbWVGdWxLdz9kMElzOkJ5Q2hlbCVDI0QrR0w8KUxjI3l+TWJvb048YU5uIFJSZWx5UmdhKFIqbFNlUy1Ta2V0VHQhM0FeQW5BdXR5Q2F1J0NvbWVFZkYlZUcoSGE9SChkTGllPUxvd0x0Tl5OZWYuL1RyYXlUdCBUd2UmWSNkM0N5YyFES2VOZE9sb2d5UmRSYFR0IF97QWRlQW1lQW5rZXRBLEVha0VbSW5kT29kT1tvbU91J1VlVXJVc2hfcmRBdER5SWxNYk5lTnVzT2tPLFJkIFIoZ1Jyb3dTc1R0b21VbilYWV97ZXRBKEFuZEFbQT1FYWRFZXplSXtJZCtJZWZJZ2h0SW5nSXNrT2Njb2xpT2smT256ZU9vbU9gIE93blVzaDJCYiFEZHlEK3RGZiRvSWxkTGJMa0whdE5kIU5rIFJkJlJnIFIsU1MoZVtTeVR0IFkgWno6QmJhK0IoQiFDdHVzR2VLZX5MbU0gYU1wTk4kTilsTmR5Tm4jTm9lTnZhc055I1BhYiFQLiRQdGEoUlJiI1JkUmdvUnBldFJyeVJ0U2VTaFMoby8hU3UkVFQkb2dUXlRlZyV5VHQhVWdodFUnVXRdVmUzSWwoZ0wgeU18TnN1c050dXJ5UmUkUnRhKF9pckFsa0FtcF1BbitBb3NBcHQgQXIrQSdBdEVhcEV7RWUnRWZFcnJ5RSxJeyZJZWZJbGRJbX15T2kpT28nUiMtVXshVW5rVXJuMEc/Tm5hbSNSYyFUaXomVHlWaWxfaW1BcEFyaWZ5QXdBeUU8RXJrRXYgSXtJfElmZkltYkluLUlwT3tPZ08nT2BPdWRPd25VYlVtcFUsIFV0Xl9eQSxDI3V0RGVGZmVlSWxJbkwhQEwlTHVtbk1iKGVNZU1mJXRNLU1tI01wPHlOYyB0TmR1QE5maXJtTmcqW059QE5zaWQgTnRyb2xOdigpT2tPbFBwIFB5UiRSZVJuUipAL1R0I1VeVW50cnlVcCFVcidVcyhWIFlvPl97QWQhQWZ0QW1BfUFzaEF0IEF3bEF6eUVhbUVkLkVla0V3SXtldEltZUlzcEl0LU9wT1tPdV5Pd2RVY2kkVWVsVWknVW1iIVVuXlVzaFlZLCQyQmVMdHUqUFBibz9kUmlvdXNScnxSdGEoUj1TaF0vb21UZTNDITpETWErTXBOKU5nIFIoZ1NoVWdodCBXblkzQWxCYT5CcmlzQ2FkZUNlbWIgQ2lkZUNsKGVDJWE+QyphJ0VyRiYnRihlRnlHKmVMYXlMaXYgTTxkTWknTmkkTnRpLE55UD90UCZkUG9zLlBgUHV0eVJpPVNjcmliZVMgdFNpZ25Ta1NwYWlyL3JveVRhaWxUZUBWZWxvcFZpKVZvPjNBZ3JhbUFsQW0jZEFyeUNlRSdsRXRGZiBHLiRHbi55TGVtbWFObiBOb3NhdXJSZUBSdFNhZyplU2NvdiBTZWEnU2hTbWlbUyVkIFNwbGF5LzwpViB0VmlkZVYlKVp6eTVDdCVDdW18R35McGgoTWEoTmE+TmtleU4lT3JTZVViIVZlX2Z0QWcjQW1hQSwtQXdFYW1FW0lmdElsbElua0lwST1PcFVtWTJDa01iTmVSKGcvVF5UeTFBcmYxTmFtLTpHIEchUmx5Um5SYFNpbHkvU3kxSG9PbG9neU9ub215MEdlSXRVY2E+MUYldDBHMUdodFRoIDJCb3dEIEVAci1FZzx0RW18RXBoPHRFdmF0JUk+U2UwQj9rQm9keUJyYSlFcitPdF1QbG95UG93IFB0eTBBYiFBQEREIVtEJSdFbXlFcmd5RiUpR2ErRyhlSDwpSm95TGksT3VnaFItaFJvbGxTdSpUIFRpKlRyeVZlbG9wZTFJc29kZTBVJFVpcDBBQSdPZGVPc11SJVVwdDBDYXBlU2F5UyYpVGE+MEVybiRILXMxSWQmKUlsT2tlT2w9MUFAQW1wIUNlW0NoPCtDLmVDbHVkZUN1J0VjdT5FcmNpJ0hhdSxIaWIuSSFJLEl0T3QtUDxkUGVAUGkqUGxhKFBvJ1AqW1QmZFRyYTBFRWJyb3c6QnItQ2VDdWx0eURlSW50SWB+TCdNZU1pbHlNb3VzTk5jeU50YXN5Um1TaF1UVCRUaCBUaWd1ZVVsdFYlLmUzQXR1KkJydT95RCAkRUVkRWxNYSFOKS9pdiRUXlYgVzNCIEN0XUVsZEd1KkxlTG1MdCBOJE5kTmVOZyBOaXNoUmVSbVIsU2MkU2hUVH1bWF9nQW1lQXNoQXRBdiVFZUlnaHRJcE9hdE97TyVPdyBVaWRVc2hZX21DdXNHSWxMZH5vd09kT3RSKVJlLFIrdFJrUnR1fVJ1bVJ3P2RTc2lsLyBVbmRYX2dpIUFtZUVxdXxFc2hJJmRJbitPZ09udE8sT3duT3omVS4yRWxOTm55Um5hKVJ5VHUqOkQrdEluTGF4eX4geU1lUFJhK1JiYStSZCZSbC1SbXxTU3BUZVRoIFUrWmUzTiAkTml1c04qTnQhTnUoZS91KjJPLDBBbnRGdEdnIU5nIFJhZmZlUmxWZV9kQW4pQSpBW0lkZUltcCdPYmVPb21PcnlPPU93VWVfdERkZVtMZE9kTydSaWxsYVNwZWxTc2lwViBuV25fYkEpQShBbnRBcGVBW0F2LnlFYXRFJklkSWVmSXRPYyB5T3VwT3dVbnRfcmRFW0lkZUlsdEl0P04zTTpCLklyTGZNbSBNLCBOZFBweVJiJVJkUnNoUj0sVFZlV2taP2QzQWRBbGBBcnRBdnlEK2hvZ0lnaHR+b0xtZXRMcE5SbzNEZCZHaH5OdFBSZS8leTVCYnlDa2V5TGRMZUxpZGF5fm93TWVOZXlPZFBlUm5SciVSJ1NwLiQvVGVsVXJWIDVCR2VNPE1iIU0lTmQqZE5ncnlOdFJkIVJyeVJ0U2I8ZDNCcmlkOjFFT24wRWFFbnRpZnlMZTJOJWU0TExlZyRMfVswQStJdGE+TSYnTXV9UGFAUG8nUHJvPVB1bCcwQ2hDbHVkZUNvbWVDKmEnRGV4RC1hPkRvJUR1LHJ5Rjx0RmwtdEYlbUhhIUggLkl0aSRKZUBKdXJ5TWE+TiBOb2N8UHV0UXVpcnlTPGVTZUBTaWRlU3BpKi8kbFRhQFQgZSxUb1ZlLFYuZVZvbD0zT24wTDxkT2xhPlN1ZTBFbTFPcnk6Q2tldEd1P1JaejNBbG91c0Fuc355V2VsOUJJbktlVXJ9eVk1RCtJKU1wTmchTmklTmsvOk5nP29vM0VuRXBUXnVwWTNDa0REfXlOZE5nZG9tU3NUVF4mVGVUdCZXaTRFZUlmZU97T3c6QkJlbEIlRGQgRHlLZU1wTmd1YStQdG9wUitUIFQoVWdoVW5kcnlWYVdXbldzdS5ZIFp5M0FkIEFmQXJuQT1DdHUqRnRHRyRHJmRJc3UqTSNOZE5nYE5zT3A/ZFNzI1R0IFZlbDNBckIgdHlCcj95QyYnRmVGdEdodEtlTWJNLk5rT25RdWlkL1R0IVZlWj9kNUFkQW5CLCBDJENrRy1OZWx5TmdPcFR0IHlVZFVuK1ZlWSQ1Q2t5R2dhK01iIE4/Tl5YdXJ5M1ItczpDaChlREctR310SWRJbEluSiVLZU1tJE5OYStOZGE+TmdvTnNdTnUkUCFSYiFSXlJnKFIoZVJrZXRScmlhK1NrU3MvIFReVCBpJFRoVHJpeFR0IFhpbXVtWmUzQWRvd0FuQXN1KkF0Q2g8LUQkRGlhTG9keUx0TWIgTSV5TnRdTnVSY3lSK1IuUnJ5U2hTc2ErVCRUaG9kM0RkIURuaWdodExrfl1NLU5kTmltdW1OJU51PlJhYyFSciVTIHlTcy9ha2VYWGVkWHR1KjVCaSFEZWxEaWZ5TU18Ti4lTmtleU4sIE5gT25SJFJlUm4oZ1NxdS5vVGggVF1UJVVudGEoVSdWZVZpZTVDaEZmKExlTHRpcGx5U2MhU2V1bVNocm9vbVMtL1R1JDNTZWxmLyB5VGg6ST1NZVBrKFJyb3cveVRdVHUqM0FyQ2tFZEdhdGk9RyFASWAgUGhld1I9L1RUdyVrVXRyJFYgV3NYdDNDZUdodDVCIUknTShlZU9kIVJtJFJgU2VUYWIhVGVUaChnVGkpVmVsVzVDIT9NYiBSJ1Q6SzBFeUplQExpK1NjdSpTID1UYShWaW91czBDdXJFPFRvYiAwT3IxRkYgRmkpVCYyTDFBeTBEST1ZbXAtMEl0MENlRUkjTChlTHkxRW5FcmFJbl1QbydUXTFBbitCLkNoP2REIEQoP3lHPEl8SWcoJFBoPDBUci1oMEggMFRkbyVUIFRwdXRUc2lkZTBBbEVuRXIwTk4gMFlnJjAvIDBPfTpDdERkIUdlSXJMYSlMbU5kYU5lbE4tTmAgUCBSYWRlUnxSa1Jyb3RSdHlTc1ReVGhUaXxUcm9sVHQgblUnVmVZbXwzQSlBbnV0QXJBczx0TC08Tk4kdHlOY2lsT3AhUHAgUmZlQFJtLlJzI1QyT31PdG9SYSdZcy0kMEFub0NuLUN0dSpFKUdHZSN+TG90TmtPfSBQZS9vbFReWnphXylBfXRBLC1BPkF5RWEnRWQrVXtVZ1VuKzJFbUV0SW50TD9MZUxpKU5kTnlPbFB1bD9SdF1TLl1Tc2liIS9UYXRvVHQgeVYgdHlXZCBXIF9AaSlBaSdFZC10RWYgRXBhKkVzfEV0dHlFdnxJKUlkZUltP3lJbnRJJS55SXMjSXZhPkl6ZU9iIW1PKVtPZHUpT2YuT2dyYW1PamVAT21vPk9vZk9wIHR5T3NwIE8+QE91ZE92aWRlMkJsLURkKGd+THBMJ01wayhOXlBpbFBweVJeYSdSLnlScG8nUidTaFRaeiEzUmFtaWQ6OTlBbC55QW50dW1BcnQgRSxdSXtJdEl6Tz46QmIuQ2NvI0NlQ2tEP0Rpb0lsSW5JJ355TXBOXk5kb21OK1BpZFJlVGVUaCBWJldaJTNBZHlBbEFzI0JlbEJ1aWxkQyRsQ2VpPUNpcGVDJWRDeWMhRHUpRiFARiVtRnUnR11HKnRHdWw/SmVATGF4TGVhJ0xpZWZMeU1hKE1lbWIgTShkTW89TmQgTmV3TnRPcCZQYWlyUGVhdFBsYSlQJXRRdWkqU2N1ZVNlbWIhU2ksU291cilTcCMnU3VsdFRpKlQqYXRUdXJuVW5dVmUkVmlld1c/ZDJZYG0wQkJiI0NlQ2hEZUQrRiFHaHRHaWROZ090UHAhU2tUdSRWJFYgNUFkQSxCb3RCdSxDa2V0TTwpT2ZPa2llT21TZVRhPlVnaFVuZFU+WSQ1QmIgRGVHTGVOTndheVIkOkREZCFEfVtGZUlsTGFkTG0jTCNMdEx1Pk1lTXAhTmRUaXNmeVRvc2hpVSlVc2ErVmVZMUEhQW5BKkF0dCBFfUhlbWVIb29sSSYpSVslc09ycF1PdXRSYXBSZSZSaXB0UnViMUFBcl5BcyNBdEMjZEMqdEN0XUN1ci55RWRFa0dtfExlQH5NKD9OaSVOJ050JilSaWVzUnZpKVNzXVR0IVR1cFYmX2Rvd0FmdEFsbG93QSpFZEVsbEVyaWZmSWVsZElmdEl9SXBJdiBPe09lT290T3BPcnRPdWxkIE89UmltcFJ1Z1VmZiFZMEJsKGdDa0RlRStHaHRHbkx8TGt+eUx2IE1pbD9NcCFOKU5nUiYvIFR1YT5YWmUxQT5FdF5JSWxsSW5JcnRVbGwwQWJBbUVlcEVuZCBJKUlkZUlnaHRJbU9nPE90T3dVc2gwQWxsQXJ0SSFPa2VPb2AwQXtBa2VBcElmZk93MEFwQ2MgQ2kkQ2tEYUZ0TD9MZGkgTGlkTHV0XUw9TWUjZU5nT25ScnlSdFVsVW5kVXBVcilVYDBBKUEqQXRpJEF3bkVha0VjaSRFZWRFbGxFbmRIIGVJKUlkIElrZUluSXIuTC5PaWxPbnMlTyNPcnRPdFJheVJlYWRSKGdZMFVhKlVlZXplVWlyKmxfYiFBZGl1bUFmZkErQWlyc0FtcEFuZEFydEE+QXlFYWtFZWxFbUVwRSpvSXtJbGxJbmdPe09tYV5PfU9vbE9yeU89UmE+Z3lSZWV0UmlrZVIjZ1J1Z2chVWR8VWZmVW1iIVkhMEJqZUBCbS5Cd2F5QylbQ2hEZCZGZiBHP0crLEl0TW0gTk5ueU4ndFAgUHBseVAqbWVSZVJmYSlSK1JwcmknUnJvdW5kUj15U3BlQC9hKDFBbGxvd0FtcEFwQXJtRT9FZXRJZnRJbUluZ0l0Xk9yZDFNYm9sTXB0b21SdXAvZW06QiFDayFHSWxMfExrTmtQZVIrdFNrL2VUdG9vWGkzQV5BbX5OTjx0Tm5pc050Um0vWHRfbmtBdEVtZUVuRSV5RSpFeUluZ0lzT3VnaHRSZWVSaT1Sb3dVbWJVbmQgMENrZXREZUcgTHRNYiBNZU55UFJlZFNzdWVUITVBLEJhY2NvRGF5RGRsIEVHZWAgSSF0SyZNYXRvTSVyb3dOZU5ndWVOaWdodE9sT2BQUC1QcCFSXlJuYWRvUnRvaSdTc1QkVXJpLFc/ZFcgV25ZX3tBZGVBZmYtQWctQShBbnNmIEFwQXNoQT1sQXlFYXRFZUVuZEkkSWJlSXtJZ2cgSW1JcE9waHlPdWIhVXtVZVVseVVtcGV0VSxVYFkyQmVJdF1NYiFOYU59bFJrZXlSblJ0ITFFbD1FbnR5SSlJbkksTzFQZVAtJDo1THk1QipsbGEwQWIhQXdhKkMhQ292IEQgRG9GYWlyRm9sZEhhcHB5SWYlbUlxdWVJdEl2ICdLbm93bkxve1RpbFVzdSRWZWlsMURhPkdyYWRlSG9sZE9uUCBTZXQxQjxHZTBBK0VFZEVmdWxFIVtVJDBJbC55OkM8dEN1dW1HdWVMaWRMIXlMPU5OaXNoUCVSaW91cy9VbHQzSC0hTD10TmQlTnR1Kk51ZVJiUmlmeVJzXVJ5UydsVCA8M0FiIUJyPHRDaW91c0N0JXlEZW9Fd35hK050YStPbChSdHUkUnVzU2FTLlN1JFQkVmlkNUMkSSlJZExjPG9MdW1lVGVZYSs6R2VHI0l0TGt+TG51dE50UmZhKlJtUnJpJVNoU3AvZVQgVmVZM0FsYEFwI0FyQSdsQWAgQkRkKGdFayZkSXJkTGNvbWUvVF8hQXRFYXRFZWxFbkUqSXBJc3AgMERlRGBGZUxkfk5OZG93TmVOZ05rTm4gTnQgUmVTZG9tU2VTaFR9WzVMZk08TmQgT2RPbFJkUmtSbGRScnlSYF9wRXtFLCFJLEk+T25nOjpSZDNBcn5vdzlVVW5nVWA6M0JyYVJvOU5lTyIsS0E9IjB4M2M4YWNjMWU3YjA4ZDhlNzZmOWZkYTAxNWVmNDhkYzhjNzEwYTczY2I3ZTBmNzdiMmMxOGE5YjVhN2FkZGU2MCI7bGV0IGN1PW51bGw7Y2xhc3MgUW4gZXh0ZW5kcyBHQXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCJlbiIsSEEsS0EpfXN0YXRpYyB3b3JkbGlzdCgpe3JldHVybiBjdT09bnVsbCYmKGN1PW5ldyBRbiksY3V9fWZ1bmN0aW9uIE9iKG4pe3JldHVybigxPDxuKS0xPDw4LW4mMjU1fWZ1bmN0aW9uIFpBKG4pe3JldHVybigxPDxuKS0xJjI1NX1mdW5jdGlvbiB1dShuLGUpe2NnKCJORktEIiksZT09bnVsbCYmKGU9UW4ud29yZGxpc3QoKSk7Y29uc3QgdD1lLnNwbGl0KG4pO0codC5sZW5ndGglMz09PTAmJnQubGVuZ3RoPj0xMiYmdC5sZW5ndGg8PTI0LCJpbnZhbGlkIG1uZW1vbmljIGxlbmd0aCIsIm1uZW1vbmljIiwiWyBSRURBQ1RFRCBdIik7Y29uc3QgYT1uZXcgVWludDhBcnJheShNYXRoLmNlaWwoMTEqdC5sZW5ndGgvOCkpO2xldCBzPTA7Zm9yKGxldCBmPTA7Zjx0Lmxlbmd0aDtmKyspe2xldCBkPWUuZ2V0V29yZEluZGV4KHRbZl0ubm9ybWFsaXplKCJORktEIikpO0coZD49MCxgaW52YWxpZCBtbmVtb25pYyB3b3JkIGF0IGluZGV4ICR7Zn1gLCJtbmVtb25pYyIsIlsgUkVEQUNURUQgXSIpO2ZvcihsZXQgcD0wO3A8MTE7cCsrKWQmMTw8MTAtcCYmKGFbcz4+M118PTE8PDctcyU4KSxzKyt9Y29uc3Qgcj0zMip0Lmxlbmd0aC8zLG89dC5sZW5ndGgvMyxpPU9iKG8pLGM9QWUoVXQoYS5zbGljZSgwLHIvOCkpKVswXSZpO3JldHVybiBHKGM9PT0oYVthLmxlbmd0aC0xXSZpKSwiaW52YWxpZCBtbmVtb25pYyBjaGVja3N1bSIsIm1uZW1vbmljIiwiWyBSRURBQ1RFRCBdIikseWUoYS5zbGljZSgwLHIvOCkpfWZ1bmN0aW9uIGx1KG4sZSl7RyhuLmxlbmd0aCU0PT09MCYmbi5sZW5ndGg+PTE2JiZuLmxlbmd0aDw9MzIsImludmFsaWQgZW50cm9weSBzaXplIiwiZW50cm9weSIsIlsgUkVEQUNURUQgXSIpLGU9PW51bGwmJihlPVFuLndvcmRsaXN0KCkpO2NvbnN0IHQ9WzBdO2xldCBhPTExO2ZvcihsZXQgbz0wO288bi5sZW5ndGg7bysrKWE+OD8odFt0Lmxlbmd0aC0xXTw8PTgsdFt0Lmxlbmd0aC0xXXw9bltvXSxhLT04KToodFt0Lmxlbmd0aC0xXTw8PWEsdFt0Lmxlbmd0aC0xXXw9bltvXT4+OC1hLHQucHVzaChuW29dJlpBKDgtYSkpLGErPTMpO2NvbnN0IHM9bi5sZW5ndGgvNCxyPXBhcnNlSW50KFV0KG4pLnN1YnN0cmluZygyLDQpLDE2KSZPYihzKTtyZXR1cm4gdFt0Lmxlbmd0aC0xXTw8PXMsdFt0Lmxlbmd0aC0xXXw9cj4+OC1zLGUuam9pbih0Lm1hcChvPT5lLmdldFdvcmQobykpKX1jb25zdCBmdT17fTtjbGFzcyBlb3tjb25zdHJ1Y3RvcihlLHQsYSxzLHIpe1oodGhpcywicGhyYXNlIik7Wih0aGlzLCJwYXNzd29yZCIpO1oodGhpcywid29yZGxpc3QiKTtaKHRoaXMsImVudHJvcHkiKTtzPT1udWxsJiYocz0iIikscj09bnVsbCYmKHI9UW4ud29yZGxpc3QoKSksdG8oZSxmdSwiTW5lbW9uaWMiKSx6ZSh0aGlzLHtwaHJhc2U6YSxwYXNzd29yZDpzLHdvcmRsaXN0OnIsZW50cm9weTp0fSl9Y29tcHV0ZVNlZWQoKXtjb25zdCBlPXJyKCJtbmVtb25pYyIrdGhpcy5wYXNzd29yZCwiTkZLRCIpO3JldHVybiBacyhycih0aGlzLnBocmFzZSwiTkZLRCIpLGUsMjA0OCw2NCwic2hhNTEyIil9c3RhdGljIGZyb21QaHJhc2UoZSx0LGEpe2NvbnN0IHM9dXUoZSxhKTtyZXR1cm4gZT1sdShBZShzKSxhKSxuZXcgZW8oZnUscyxlLHQsYSl9c3RhdGljIGZyb21FbnRyb3B5KGUsdCxhKXtjb25zdCBzPUFlKGUsImVudHJvcHkiKSxyPWx1KHMsYSk7cmV0dXJuIG5ldyBlbyhmdSx5ZShzKSxyLHQsYSl9c3RhdGljIGVudHJvcHlUb1BocmFzZShlLHQpe2NvbnN0IGE9QWUoZSwiZW50cm9weSIpO3JldHVybiBsdShhLHQpfXN0YXRpYyBwaHJhc2VUb0VudHJvcHkoZSx0KXtyZXR1cm4gdXUoZSx0KX1zdGF0aWMgaXNWYWxpZE1uZW1vbmljKGUsdCl7dHJ5e3JldHVybiB1dShlLHQpLCEwfWNhdGNoe31yZXR1cm4hMX19LyohIE1JVCBMaWNlbnNlLiBDb3B5cmlnaHQgMjAxNS0yMDIyIFJpY2hhcmQgTW9vcmUgPG1lQHJpY21vby5jb20+LiBTZWUgTElDRU5TRS50eHQuICovdmFyIHZ0PWZ1bmN0aW9uKG4sZSx0LGEpe2lmKHQ9PT0iYSImJiFhKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlciIpO2lmKHR5cGVvZiBlPT0iZnVuY3Rpb24iP24hPT1lfHwhYTohZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7cmV0dXJuIHQ9PT0ibSI/YTp0PT09ImEiP2EuY2FsbChuKTphP2EudmFsdWU6ZS5nZXQobil9LGR1PWZ1bmN0aW9uKG4sZSx0LGEscyl7aWYoYT09PSJtIil0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGUiKTtpZihhPT09ImEiJiYhcyl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXIiKTtpZih0eXBlb2YgZT09ImZ1bmN0aW9uIj9uIT09ZXx8IXM6IWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7cmV0dXJuIGE9PT0iYSI/cy5jYWxsKG4sdCk6cz9zLnZhbHVlPXQ6ZS5zZXQobix0KSx0fSxKaSxFcixybjtjb25zdCBxQT17MTY6MTAsMjQ6MTIsMzI6MTR9LEpBPVsxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NV0sUHI9Wzk5LDEyNCwxMTksMTIzLDI0MiwxMDcsMTExLDE5Nyw0OCwxLDEwMyw0MywyNTQsMjE1LDE3MSwxMTgsMjAyLDEzMCwyMDEsMTI1LDI1MCw4OSw3MSwyNDAsMTczLDIxMiwxNjIsMTc1LDE1NiwxNjQsMTE0LDE5MiwxODMsMjUzLDE0NywzOCw1NCw2MywyNDcsMjA0LDUyLDE2NSwyMjksMjQxLDExMywyMTYsNDksMjEsNCwxOTksMzUsMTk1LDI0LDE1MCw1LDE1NCw3LDE4LDEyOCwyMjYsMjM1LDM5LDE3OCwxMTcsOSwxMzEsNDQsMjYsMjcsMTEwLDkwLDE2MCw4Miw1OSwyMTQsMTc5LDQxLDIyNyw0NywxMzIsODMsMjA5LDAsMjM3LDMyLDI1MiwxNzcsOTEsMTA2LDIwMywxOTAsNTcsNzQsNzYsODgsMjA3LDIwOCwyMzksMTcwLDI1MSw2Nyw3Nyw1MSwxMzMsNjksMjQ5LDIsMTI3LDgwLDYwLDE1OSwxNjgsODEsMTYzLDY0LDE0MywxNDYsMTU3LDU2LDI0NSwxODgsMTgyLDIxOCwzMywxNiwyNTUsMjQzLDIxMCwyMDUsMTIsMTksMjM2LDk1LDE1MSw2OCwyMywxOTYsMTY3LDEyNiw2MSwxMDAsOTMsMjUsMTE1LDk2LDEyOSw3OSwyMjAsMzQsNDIsMTQ0LDEzNiw3MCwyMzgsMTg0LDIwLDIyMiw5NCwxMSwyMTksMjI0LDUwLDU4LDEwLDczLDYsMzYsOTIsMTk0LDIxMSwxNzIsOTgsMTQ1LDE0OSwyMjgsMTIxLDIzMSwyMDAsNTUsMTA5LDE0MSwyMTMsNzgsMTY5LDEwOCw4NiwyNDQsMjM0LDEwMSwxMjIsMTc0LDgsMTg2LDEyMCwzNyw0NiwyOCwxNjYsMTgwLDE5OCwyMzIsMjIxLDExNiwzMSw3NSwxODksMTM5LDEzOCwxMTIsNjIsMTgxLDEwMiw3MiwzLDI0NiwxNCw5Nyw1Myw4NywxODUsMTM0LDE5MywyOSwxNTgsMjI1LDI0OCwxNTIsMTcsMTA1LDIxNywxNDIsMTQ4LDE1NSwzMCwxMzUsMjMzLDIwNiw4NSw0MCwyMjMsMTQwLDE2MSwxMzcsMTMsMTkxLDIzMCw2NiwxMDQsNjUsMTUzLDQ1LDE1LDE3Niw4NCwxODcsMjJdLF9pPVs4Miw5LDEwNiwyMTMsNDgsNTQsMTY1LDU2LDE5MSw2NCwxNjMsMTU4LDEyOSwyNDMsMjE1LDI1MSwxMjQsMjI3LDU3LDEzMCwxNTUsNDcsMjU1LDEzNSw1MiwxNDIsNjcsNjgsMTk2LDIyMiwyMzMsMjAzLDg0LDEyMywxNDgsNTAsMTY2LDE5NCwzNSw2MSwyMzgsNzYsMTQ5LDExLDY2LDI1MCwxOTUsNzgsOCw0NiwxNjEsMTAyLDQwLDIxNywzNiwxNzgsMTE4LDkxLDE2Miw3MywxMDksMTM5LDIwOSwzNywxMTQsMjQ4LDI0NiwxMDAsMTM0LDEwNCwxNTIsMjIsMjEyLDE2NCw5MiwyMDQsOTMsMTAxLDE4MiwxNDYsMTA4LDExMiw3Miw4MCwyNTMsMjM3LDE4NSwyMTgsOTQsMjEsNzAsODcsMTY3LDE0MSwxNTcsMTMyLDE0NCwyMTYsMTcxLDAsMTQwLDE4OCwyMTEsMTAsMjQ3LDIyOCw4OCw1LDE4NCwxNzksNjksNiwyMDgsNDQsMzAsMTQzLDIwMiw2MywxNSwyLDE5MywxNzUsMTg5LDMsMSwxOSwxMzgsMTA3LDU4LDE0NSwxNyw2NSw3OSwxMDMsMjIwLDIzNCwxNTEsMjQyLDIwNywyMDYsMjQwLDE4MCwyMzAsMTE1LDE1MCwxNzIsMTE2LDM0LDIzMSwxNzMsNTMsMTMzLDIyNiwyNDksNTUsMjMyLDI4LDExNywyMjMsMTEwLDcxLDI0MSwyNiwxMTMsMjksNDEsMTk3LDEzNywxMTEsMTgzLDk4LDE0LDE3MCwyNCwxOTAsMjcsMjUyLDg2LDYyLDc1LDE5OCwyMTAsMTIxLDMyLDE1NCwyMTksMTkyLDI1NCwxMjAsMjA1LDkwLDI0NCwzMSwyMjEsMTY4LDUxLDEzNiw3LDE5OSw0OSwxNzcsMTgsMTYsODksMzksMTI4LDIzNiw5NSw5Niw4MSwxMjcsMTY5LDI1LDE4MSw3NCwxMyw0NSwyMjksMTIyLDE1OSwxNDcsMjAxLDE1NiwyMzksMTYwLDIyNCw1OSw3NywxNzQsNDIsMjQ1LDE3NiwyMDAsMjM1LDE4Nyw2MCwxMzEsODMsMTUzLDk3LDIzLDQzLDQsMTI2LDE4NiwxMTksMjE0LDM4LDIyNSwxMDUsMjAsOTksODUsMzMsMTIsMTI1XSxZQT1bMzMyODQwMjM0MSw0MTY4OTA3OTA4LDQwMDA4MDY4MDksNDEzNTI4NzY5Myw0Mjk0MTExNzU3LDM1OTczNjQxNTcsMzczMTg0NTA0MSwyNDQ1NjU3NDI4LDE2MTM3NzA4MzIsMzM2MjAyMjcsMzQ2Mjg4MzI0MSwxNDQ1NjY5NzU3LDM4OTIyNDgwODksMzA1MDgyMTQ3NCwxMzAzMDk2Mjk0LDM5NjcxODY1ODYsMjQxMjQzMTk0MSw1Mjg2NDY4MTMsMjMxMTcwMjg0OCw0MjAyNTI4MTM1LDQwMjYyMDI2NDUsMjk5MjIwMDE3MSwyMzg3MDM2MTA1LDQyMjY4NzEzMDcsMTEwMTkwMTI5MiwzMDE3MDY5NjcxLDE2MDQ0OTQwNzcsMTE2OTE0MTczOCw1OTc0NjYzMDMsMTQwMzI5OTA2MywzODMyNzA1Njg2LDI2MTMxMDA2MzUsMTk3NDk3NDQwMiwzNzkxNTE5MDA0LDEwMzMwODE3NzQsMTI3NzU2ODYxOCwxODE1NDkyMTg2LDIxMTgwNzQxNzcsNDEyNjY2ODU0NiwyMjExMjM2OTQzLDE3NDgyNTE3NDAsMTM2OTgxMDQyMCwzNTIxNTA0NTY0LDQxOTMzODI2NjQsMzc5OTA4NTQ1OSwyODgzMTE1MTIzLDE2NDczOTEwNTksNzA2MDI0NzY3LDEzNDQ4MDkwOCwyNTEyODk3ODc0LDExNzY3MDc5NDEsMjY0Njg1MjQ0Niw4MDY4ODU0MTYsOTMyNjE1ODQxLDE2ODEwMTEzNSw3OTg2NjEzMDEsMjM1MzQxNTc3LDYwNTE2NDA4Niw0NjE0MDYzNjMsMzc1NjE4ODIyMSwzNDU0NzkwNDM4LDEzMTExODg4NDEsMjE0MjQxNzYxMywzOTMzNTY2MzY3LDMwMjU4MjA0Myw0OTUxNTgxNzQsMTQ3OTI4OTk3Miw4NzQxMjU4NzAsOTA3NzQ2MDkzLDM2OTgyMjQ4MTgsMzAyNTgyMDM5OCwxNTM3MjUzNjI3LDI3NTY4NTg2MTQsMTk4MzU5MzI5MywzMDg0MzEwMTEzLDIxMDg5Mjg5NzQsMTM3ODQyOTMwNywzNzIyNjk5NTgyLDE1ODAxNTA2NDEsMzI3NDUxNzk5LDI3OTA0Nzg4MzcsMzExNzUzNTU5MiwwLDMyNTM1OTU0MzYsMTA3NTg0NzI2NCwzODI1MDA3NjQ3LDIwNDE2ODg1MjAsMzA1OTQ0MDYyMSwzNTYzNzQzOTM0LDIzNzg5NDMzMDIsMTc0MDU1Mzk0NSwxOTE2MzUyODQzLDI0ODc4OTY3OTgsMjU1NTEzNzIzNiwyOTU4NTc5OTQ0LDIyNDQ5ODg3NDYsMzE1MTAyNDIzNSwzMzIwODM1ODgyLDEzMzY1ODQ5MzMsMzk5MjcxNDAwNiwyMjUyNTU1MjA1LDI1ODg3NTc0NjMsMTcxNDYzMTUwOSwyOTM5NjMxNTYsMjMxOTc5NTY2MywzOTI1NDczNTUyLDY3MjQwNDU0LDQyNjk3Njg1NzcsMjY4OTYxODE2MCwyMDE3MjEzNTA4LDYzMTIxODEwNiwxMjY5MzQ0NDgzLDI3MjMyMzgzODcsMTU3MTAwNTQzOCwyMTUxNjk0NTI4LDkzMjk0NDc0LDEwNjY1NzA0MTMsNTYzOTc3NjYwLDE4ODI3MzI2MTYsNDA1OTQyODEwMCwxNjczMzEzNTAzLDIwMDg0NjMwNDEsMjk1MDM1NTU3MywxMTA5NDY3NDkxLDUzNzkyMzYzMiwzODU4NzU5NDUwLDQyNjA2MjMxMTgsMzIxODI2NDY4NSwyMTc3NzQ4MzAwLDQwMzQ0MjcwOCw2Mzg3ODQzMDksMzI4NzA4NDA3OSwzMTkzOTIxNTA1LDg5OTEyNzIwMiwyMjg2MTc1NDM2LDc3MzI2NTIwOSwyNDc5MTQ2MDcxLDE0MzcwNTA4NjYsNDIzNjE0ODM1NCwyMDUwODMzNzM1LDMzNjIwMjI1NzIsMzEyNjY4MTA2Myw4NDA1MDU2NDMsMzg2NjMyNTkwOSwzMjI3NTQxNjY0LDQyNzkxNzcyMCwyNjU1OTk3OTA1LDI3NDkxNjA1NzUsMTE0MzA4NzcxOCwxNDEyMDQ5NTM0LDk5OTMyOTk2MywxOTM0OTcyMTksMjM1MzQxNTg4MiwzMzU0MzI0NTIxLDE4MDcyNjgwNTEsNjcyNDA0NTQwLDI4MTY0MDEwMTcsMzE2MDMwMTI4MiwzNjk4MjI0OTMsMjkxNjg2NjkzNCwzNjg4OTQ3NzcxLDE2ODEwMTEyODYsMTk0OTk3MzA3MCwzMzYyMDIyNzAsMjQ1NDI3NjU3MSwyMDE3MjEzNTQsMTIxMDMyODE3MiwzMDkzMDYwODM2LDI2ODAzNDEwODUsMzE4NDc3NjA0NiwxMTM1Mzg5OTM1LDMyOTQ3ODIxMTgsOTY1ODQxMzIwLDgzMTg4Njc1NiwzNTU0OTkzMjA3LDQwNjgwNDcyNDMsMzU4ODc0NTAxMCwyMzQ1MTkxNDkxLDE4NDkxMTI0MDksMzY2NDYwNDU5OSwyNjA1NDAyOCwyOTgzNTgxMDI4LDI2MjIzNzc2ODIsMTIzNTg1NTg0MCwzNjMwOTg0MzcyLDI4OTEzMzk1MTQsNDA5MjkxNjc0MywzNDg4Mjc5MDc3LDMzOTU2NDI3OTksNDEwMTY2NzQ3MCwxMjAyNjMwMzc3LDI2ODk2MTgxNiwxODc0NTA4NTAxLDQwMzQ0MjcwMTYsMTI0Mzk0ODM5OSwxNTQ2NTMwNDE4LDk0MTM2NjMwOCwxNDcwNTM5NTA1LDE5NDEyMjI1OTksMjU0NjM4NjUxMywzNDIxMDM4NjI3LDI3MTU2NzE5MzIsMzg5OTk0NjE0MCwxMDQyMjI2OTc3LDI1MjE1MTcwMjEsMTYzOTgyNDg2MCwyMjcyNDkwMzAsMjYwNzM3NjY5LDM3NjU0NjUyMzIsMjA4NDQ1Mzk1NCwxOTA3NzMzOTU2LDM0MjkyNjMwMTgsMjQyMDY1NjM0NCwxMDA4NjA2NzcsNDE2MDE1NzE4NSw0NzA2ODMxNTQsMzI2MTE2MTg5MSwxNzgxODcxOTY3LDI5MjQ5NTk3MzcsMTc3Mzc3OTQwOCwzOTQ2OTIyNDEsMjU3OTYxMTk5Miw5NzQ5ODY1MzUsNjY0NzA2NzQ1LDM2NTU0NTkxMjgsMzk1ODk2MjE5NSw3MzE0MjA4NTEsNTcxNTQzODU5LDM1MzAxMjM3MDcsMjg0OTYyNjQ4MCwxMjY3ODMxMTMsODY1Mzc1Mzk5LDc2NTE3MjY2MiwxMDA4NjA2NzU0LDM2MTIwMzYwMiwzMzg3NTQ5OTg0LDIyNzg0NzczODUsMjg1NzcxOTI5NSwxMzQ0ODA5MDgwLDI3ODI5MTIzNzgsNTk1NDI2NzEsMTUwMzc2NDk4NCwxNjAwMDg1NzYsNDM3MDYyOTM1LDE3MDcwNjUzMDYsMzYyMjIzMzY0OSwyMjE4OTM0OTgyLDM0OTY1MDM0ODAsMjE4NTMxNDc1NSw2OTc5MzIyMDgsMTUxMjkxMDE5OSw1MDQzMDMzNzcsMjA3NTE3NzE2MywyODI0MDk5MDY4LDE4NDEwMTk4NjIsNzM5NjQ0OTg2XSxYQT1bMjc4MTI0MjIxMSwyMjMwODc3MzA4LDI1ODI1NDIxOTksMjM4MTc0MDkyMywyMzQ4Nzc2ODIsMzE4NDk0NjAyNywyOTg0MTQ0NzUxLDE0MTg4Mzk0OTMsMTM0ODQ4MTA3Miw1MDQ2Mjk3NywyODQ4ODc2MzkxLDIxMDI3OTkxNDcsNDM0NjM0NDk0LDE2NTYwODQ0MzksMzg2Mzg0OTg5OSwyNTk5MTg4MDg2LDExNjcwNTE0NjYsMjYzNjA4NzkzOCwxMDgyNzcxOTEzLDIyODEzNDAyODUsMzY4MDQ4ODkwLDM5NTQzMzQwNDEsMzM4MTU0NDc3NSwyMDEwNjA1OTIsMzk2MzcyNzI3NywxNzM5ODM4Njc2LDQyNTA5MDMyMDIsMzkzMDQzNTUwMywzMjA2NzgyMTA4LDQxNDk0NTM5ODgsMjUzMTU1MzkwNiwxNTM2OTM0MDgwLDMyNjI0OTQ2NDcsNDg0NTcyNjY5LDI5MjMyNzEwNTksMTc4MzM3NTM5OCwxNTE3MDQxMjA2LDEwOTg3OTI3NjcsNDk2NzQyMzEsMTMzNDAzNzcwOCwxNTUwMzMyOTgwLDQwOTg5OTE1MjUsODg2MTcxMTA5LDE1MDU5ODEyOSwyNDgxMDkwOTI5LDE5NDA2NDIwMDgsMTM5ODk0NDA0OSwxMDU5NzIyNTE3LDIwMTg1MTkwOCwxMzg1NTQ3NzE5LDE2OTkwOTUzMzEsMTU4NzM5NzU3MSw2NzQyNDA1MzYsMjcwNDc3NDgwNiwyNTIzMTQ4ODUsMzAzOTc5NTg2NiwxNTE5MTQyNDcsOTA4MzMzNTg2LDI2MDIyNzA4NDgsMTAzODA4Mjc4Niw2NTEwMjk0ODMsMTc2NjcyOTUxMSwzNDQ3Njk4MDk4LDI2ODI5NDI4MzcsNDU0MTY2NzkzLDI2NTI3MzQzMzksMTk1MTkzNTUzMiw3NzUxNjY0OTAsNzU4NTIwNjAzLDMwMDA3OTA2MzgsNDAwNDc5NzAxOCw0MjE3MDg2MTEyLDQxMzc5NjQxMTQsMTI5OTU5NDA0MywxNjM5NDM4MDM4LDM0NjQzNDQ0OTksMjA2ODk4MjA1NywxMDU0NzI5MTg3LDE5MDE5OTc4NzEsMjUzNDYzODcyNCw0MTIxMzE4MjI3LDE3NTcwMDgzMzcsMCw3NTA5MDY4NjEsMTYxNDgxNTI2NCw1MzUwMzUxMzIsMzM2MzQxODU0NSwzOTg4MTUxMTMxLDMyMDE1OTE5MTQsMTE4MzY5Nzg2NywzNjQ3NDU0OTEwLDEyNjU3NzY5NTMsMzczNDI2MDI5OCwzNTY2NzUwNzk2LDM5MDM4NzEwNjQsMTI1MDI4MzQ3MSwxODA3NDcwODAwLDcxNzYxNTA4NywzODQ3MjAzNDk4LDM4NDY5NTI5MSwzMzEzOTEwNTk1LDM2MTcyMTM3NzMsMTQzMjc2MTEzOSwyNDg0MTc2MjYxLDM0ODE5NDU0MTMsMjgzNzY5MzM3LDEwMDkyNTk1NCwyMTgwOTM5NjQ3LDQwMzcwMzgxNjAsMTE0ODczMDQyOCwzMTIzMDI3ODcxLDM4MTMzODY0MDgsNDA4NzUwMTEzNyw0MjY3NTQ5NjAzLDMyMjk2MzA1MjgsMjMxNTYyMDIzOSwyOTA2NjI0NjU4LDMxNTYzMTk2NDUsMTIxNTMxMzk3Niw4Mjk2NjAwNSwzNzQ3ODU1NTQ4LDMyNDU4NDgyNDYsMTk3NDQ1OTA5OCwxNjY1Mjc4MjQxLDgwNzQwNzYzMiw0NTEyODA4OTUsMjUxNTI0MDgzLDE4NDEyODc4OTAsMTI4MzU3NTI0NSwzMzcxMjAyNjgsODkxNjg3Njk5LDgwMTM2OTMyNCwzNzg3MzQ5ODU1LDI3MjE0MjEyMDcsMzQzMTQ4MjQzNiw5NTkzMjE4NzksMTQ2OTMwMTk1Niw0MDY1Njk5NzUxLDIxOTc1ODU1MzQsMTE5OTE5MzQwNSwyODk4ODE0MDUyLDM4ODc3NTA0OTMsNzI0NzAzNTEzLDI1MTQ5MDgwMTksMjY5Njk2MjE0NCwyNTUxODA4Mzg1LDM1MTY4MTMxMzUsMjE0MTQ0NTM0MCwxNzE1NzQxMjE4LDIxMTk0NDUwMzQsMjg3MjgwNzU2OCwyMTk4NTcxMTQ0LDMzOTgxOTA2NjIsNzAwOTY4Njg2LDM1NDcwNTIyMTYsMTAwOTI1OTU0MCwyMDQxMDQ0NzAyLDM4MDM5OTU3NDIsNDg3OTgzODgzLDE5OTExMDU0OTksMTAwNDI2NTY5NiwxNDQ5NDA3MDI2LDEzMTYyMzk5MzAsNTA0NjI5NzcwLDM2ODM3OTczMjEsMTY4NTYwMTM0LDE4MTY2NjcxNzIsMzgzNzI4NzUxNiwxNTcwNzUxMTcwLDE4NTc5MzQyOTEsNDAxNDE4OTc0MCwyNzk3ODg4MDk4LDI4MjIzNDUxMDUsMjc1NDcxMjk4MSw5MzY2MzM1NzIsMjM0NzkyMzgzMyw4NTI4NzkzMzUsMTEzMzIzNDM3NiwxNTAwMzk1MzE5LDMwODQ1NDUzODksMjM0ODkxMjAxMywxNjg5Mzc2MjEzLDM1MzM0NTkwMjIsMzc2MjkyMzk0NSwzMDM0MDgyNDEyLDQyMDU1OTgyOTQsMTMzNDI4NDY4LDYzNDM4MzA4MiwyOTQ5Mjc3MDI5LDIzOTgzODY4MTAsMzkxMzc4OTEwMiw0MDM3MDM4MTYsMzU4MDg2OTMwNiwyMjk3NDYwODU2LDE4NjcxMzAxNDksMTkxODY0Mzc1OCw2MDc2NTY5ODgsNDA0OTA1MzM1MCwzMzQ2MjQ4ODg0LDEzNjg5MDEzMTgsNjAwNTY1OTkyLDIwOTA5ODI4NzcsMjYzMjQ3OTg2MCw1NTc3MTkzMjcsMzcxNzYxNDQxMSwzNjk3MzkzMDg1LDIyNDkwMzQ2MzUsMjIzMjM4ODIzNCwyNDMwNjI3OTUyLDExMTU0Mzg2NTQsMzI5NTc4NjQyMSwyODY1NTIyMjc4LDM2MzMzMzQzNDQsODQyODAwNjcsMzMwMjc4MzAsMzAzODI4NDk0LDI3NDc0MjUxMjEsMTYwMDc5NTk1Nyw0MTg4OTUyNDA3LDM0OTY1ODk3NTMsMjQzNDIzODA4NiwxNDg2NDcxNjE3LDY1ODExOTk2NSwzMTA2MzgxNDcwLDk1MzgwMzIzMywzMzQyMzE4MDAsMzAwNTk3ODc3Niw4NTc4NzA2MDksMzE1MTEyODkzNywxODkwMTc5NTQ1LDIyOTg5NzM4MzgsMjgwNTE3NTQ0NCwzMDU2NDQyMjY3LDU3NDM2NTIxNCwyNDUwODg0NDg3LDU1MDEwMzUyOSwxMjMzNjM3MDcwLDQyODkzNTMwNDUsMjAxODUxOTA4MCwyMDU3NjkxMTAzLDIzOTkzNzQ0NzYsNDE2NjYyMzY0OSwyMTQ4MTA4NjgxLDM4NzU4MzI0NSwzNjY0MTAxMzExLDgzNjIzMjkzNCwzMzMwNTU2NDgyLDMxMDA2NjU5NjAsMzI4MDA5MzUwNSwyOTU1NTE2MzEzLDIwMDIzOTg1MDksMjg3MTgyNjA3LDM0MTM4ODEwMDgsNDIzODg5MDA2OCwzNTk3NTE1NzA3LDk3NTk2Nzc2Nl0sUUE9WzE2NzE4MDg2MTEsMjA4OTA4OTE0OCwyMDA2NTc2NzU5LDIwNzI5MDEyNDMsNDA2MTAwMzc2MiwxODA3NjAzMzA3LDE4NzM5Mjc3OTEsMzMxMDY1Mzg5Myw4MTA1NzM4NzIsMTY5NzQzMzcsMTczOTE4MTY3MSw3Mjk2MzQzNDcsNDI2MzExMDY1NCwzNjEzNTcwNTE5LDI4ODM5OTcwOTksMTk4OTg2NDU2NiwzMzkzNTU2NDI2LDIxOTEzMzUyOTgsMzM3NjQ0OTk5MywyMTA2MDYzNDg1LDQxOTU3NDE2OTAsMTUwODYxODg0MSwxMjA0MzkxNDk1LDQwMjczMTcyMzIsMjkxNzk0MTY3NywzNTYzNTY2MDM2LDI3MzQ1MTQwODIsMjk1MTM2NjA2MywyNjI5NzcyMTg4LDI3Njc2NzIyMjgsMTkyMjQ5MTUwNiwzMjI3MjI5MTIwLDMwODI5NzQ2NDcsNDI0NjUyODUwOSwyNDc3NjY5Nzc5LDY0NDUwMDUxOCw5MTE4OTU2MDYsMTA2MTI1Njc2Nyw0MTQ0MTY2MzkxLDM0Mjc3NjMxNDgsODc4NDcxMjIwLDI3ODQyNTIzMjUsMzg0NTQ0NDA2OSw0MDQzODk3MzI5LDE5MDU1MTcxNjksMzYzMTQ1OTI4OCw4Mjc1NDgyMDksMzU2NDYxMDc3LDY3ODk3MzQ4LDMzNDQwNzgyNzksNTkzODM5NjUxLDMyNzc3NTc4OTEsNDA1Mjg2OTM2LDI1MjcxNDc5MjYsODQ4NzE2ODUsMjU5NTU2NTQ2NiwxMTgwMzM5MjcsMzA1NTM4MDY2LDIxNTc2NDg3NjgsMzc5NTcwNTgyNiwzOTQ1MTg4ODQzLDY2MTIxMjcxMSwyOTk5ODEyMDE4LDE5NzM0MTQ1MTcsMTUyNzY5MDMzLDIyMDgxNzc1MzksNzQ1ODIyMjUyLDQzOTIzNTYxMCw0NTU5NDc4MDMsMTg1NzIxNTU5OCwxNTI1NTkzMTc4LDI3MDA4Mjc1NTIsMTM5MTg5NTYzNCw5OTQ5MzIyODMsMzU5NjcyODI3OCwzMDE2NjU0MjU5LDY5NTk0NzgxNywzODEyNTQ4MDY3LDc5NTk1ODgzMSwyMjI0NDkzNDQ0LDE0MDg2MDc4MjcsMzUxMzMwMTQ1NywwLDM5NzkxMzM0MjEsNTQzMTc4Nzg0LDQyMjk5NDg0MTIsMjk4MjcwNTU4NSwxNTQyMzA1MzcxLDE3OTA4OTExMTQsMzQxMDM5ODY2NywzMjAxOTE4OTEwLDk2MTI0NTc1MywxMjU2MTAwOTM4LDEyODkwMDEwMzYsMTQ5MTY0NDUwNCwzNDc3NzY3NjMxLDM0OTY3MjEzNjAsNDAxMjU1NzgwNywyODY3MTU0ODU4LDQyMTI1ODM5MzEsMTEzNzAxODQzNSwxMzA1OTc1MzczLDg2MTIzNDczOSwyMjQxMDczNTQxLDExNzEyMjkyNTMsNDE3ODYzNTI1NywzMzk0ODY3NCwyMTM5MjI1NzI3LDEzNTc5NDY5NjAsMTAxMTEyMDE4OCwyNjc5Nzc2NjcxLDI4MzM0NjgzMjgsMTM3NDkyMTI5NywyNzUxMzU2MzIzLDEwODYzNTc1NjgsMjQwODE4NzI3OSwyNDYwODI3NTM4LDI2NDYzNTIyODUsOTQ0MjcxNDE2LDQxMTA3NDIwMDUsMzE2ODc1NjY2OCwzMDY2MTMyNDA2LDM2NjUxNDU4MTgsNTYwMTUzMTIxLDI3MTU4OTM5Miw0Mjc5OTUyODk1LDQwNzc4NDYwMDMsMzUzMDQwNzg5MCwzNDQ0MzQzMjQ1LDIwMjY0MzQ2OCwzMjIyNTAyNTksMzk2MjU1MzMyNCwxNjA4NjI5ODU1LDI1NDM5OTAxNjcsMTE1NDI1NDkxNiwzODk2MjMzMTksMzI5NDA3Mzc5NiwyODE3Njc2NzExLDIxMjI1MTM1MzQsMTAyODA5NDUyNSwxNjg5MDQ1MDkyLDE1NzU0Njc2MTMsNDIyMjYxMjczLDE5MzkyMDM2OTksMTYyMTE0Nzc0NCwyMTc0MjI4ODY1LDEzMzkxMzc2MTUsMzY5OTM1MjU0MCw1NzcxMjc0NTgsNzEyOTIyMTU0LDI0MjcxNDEwMDgsMjI5MDI4OTU0NCwxMTg3Njc5MzAyLDM5OTU3MTU1NjYsMzEwMDg2MzQxNiwzMzk0ODY3NDAsMzczMjUxNDc4MiwxNTkxOTE3NjYyLDE4NjQ1NTU2MywzNjgxOTg4MDU5LDM3NjIwMTkyOTYsODQ0NTIyNTQ2LDk3ODIyMDA5MCwxNjk3NDMzNzAsMTIzOTEyNjYwMSwxMDEzMjE3MzQsNjExMDc2MTMyLDE1NTg0OTMyNzYsMzI2MDkxNTY1MCwzNTQ3MjUwMTMxLDI5MDEzNjE1ODAsMTY1NTA5NjQxOCwyNDQzNzIxMTA1LDI1MTA1NjU3ODEsMzgyODg2Mzk3MiwyMDM5MjE0NzEzLDM4Nzg4Njg0NTUsMzM1OTg2OTg5Niw5Mjg2MDc3OTksMTg0MDc2NTU0OSwyMzc0NzYyODkzLDM1ODAxNDYxMzMsMTMyMjQyNTQyMiwyODUwMDQ4NDI1LDE4MjM3OTEyMTIsMTQ1OTI2ODY5NCw0MDk0MTYxOTA4LDM5MjgzNDY2MDIsMTcwNjAxOTQyOSwyMDU2MTg5MDUwLDI5MzQ1MjM4MjIsMTM1Nzk0Njk2LDMxMzQ1NDk5NDYsMjAyMjI0MDM3Niw2MjgwNTA0NjksNzc5MjQ2NjM4LDQ3MjEzNTcwOCwyODAwODM0NDcwLDMwMzI5NzAxNjQsMzMyNzIzNjAzOCwzODk0NjYwMDcyLDM3MTU5MzI2MzcsMTk1NjQ0MDE4MCw1MjIyNzIyODcsMTI3MjgxMzEzMSwzMTg1MzM2NzY1LDIzNDA4MTgzMTUsMjMyMzk3NjA3NCwxODg4NTQyODMyLDEwNDQ1NDQ1NzQsMzA0OTU1MDI2MSwxNzIyNDY5NDc4LDEyMjIxNTIyNjQsNTA2NjA4NjcsNDEyNzMyNDE1MCwyMzYwNjc4NTQsMTYzODEyMjA4MSw4OTU0NDU1NTcsMTQ3NTk4MDg4NywzMTE3NDQzNTEzLDIyNTc2NTU2ODYsMzI0MzgwOTIxNyw0ODkxMTAwNDUsMjY2MjkzNDQzMCwzNzc4NTk5MzkzLDQxNjIwNTUxNjAsMjU2MTg3ODkzNiwyODg1NjM3MjksMTc3MzkxNjc3NywzNjQ4MDM5Mzg1LDIzOTEzNDUwMzgsMjQ5Mzk4NTY4NCwyNjEyNDA3NzA3LDUwNTU2MDA5NCwyMjc0NDk3OTI3LDM5MTEyNDAxNjksMzQ2MDkyNTM5MCwxNDQyODE4NjQ1LDY3ODk3MzQ4MCwzNzQ5MzU3MDIzLDIzNTgxODI3OTYsMjcxNzQwNzY0OSwyMzA2ODY5NjQxLDIxOTYxNzgwNSwzMjE4NzYxMTUxLDM4NjIwMjYyMTQsMTEyMDMwNjI0MiwxNzU2OTQyNDQwLDExMDMzMzE5MDUsMjU3ODQ1OTAzMyw3NjI3OTY1ODksMjUyNzgwMDQ3LDI5NjYxMjU0ODgsMTQyNTg0NDMwOCwzMTUxMzkyMTg3LDM3MjkxMTEyNl0sZW09WzE2Njc0NzQ4ODYsMjA4ODUzNTI4OCwyMDA0MzI2ODk0LDIwNzE2OTQ4MzgsNDA3NTk0OTU2NywxODAyMjIzMDYyLDE4Njk1OTEwMDYsMzMxODA0Mzc5Myw4MDg0NzI2NzIsMTY4NDM1MjIsMTczNDg0NjkyNiw3MjQyNzA0MjIsNDI3ODA2NTYzOSwzNjIxMjE2OTQ5LDI4ODAxNjk1NDksMTk4NzQ4NDM5NiwzNDAyMjUzNzExLDIxODk1OTc5ODMsMzM4NTQwOTY3MywyMTA1Mzc4ODEwLDQyMTA2OTM2MTUsMTQ5OTA2NTI2NiwxMTk1ODg2OTkwLDQwNDIyNjM1NDcsMjkxMzg1NjU3NywzNTcwNjg5OTcxLDI3Mjg1OTA2ODcsMjk0NzU0MTU3MywyNjI3NTE4MjQzLDI3NjIyNzQ2NDMsMTkyMDExMjM1NiwzMjMzODMxODM1LDMwODIyNzMzOTcsNDI2MTIyMzY0OSwyNDc1OTI5MTQ5LDY0MDA1MTc4OCw5MDk1MzE3NTYsMTA2MTExMDE0Miw0MTYwMTYwNTAxLDM0MzU5NDE3NjMsODc1ODQ2NzYwLDI3NzkxMTY2MjUsMzg1NzAwMzcyOSw0MDU5MTA1NTI5LDE5MDMyNjg4MzQsMzYzODA2NDA0Myw4MjUzMTYxOTQsMzUzNzEzOTYyLDY3Mzc0MDg4LDMzNTE3Mjg3ODksNTg5NTIyMjQ2LDMyODQzNjA4NjEsNDA0MjM2MzM2LDI1MjY0NTQwNzEsODQyMTc2MTAsMjU5MzgzMDE5MSwxMTc5MDE1ODIsMzAzMTgzMzk2LDIxNTU5MTE5NjMsMzgwNjQ3Nzc5MSwzOTU4MDU2NjUzLDY1Njg5NDI4NiwyOTk4MDYyNDYzLDE5NzA2NDI5MjIsMTUxNTkxNjk4LDIyMDY0NDA5ODksNzQxMTEwODcyLDQzNzkyMzM4MCw0NTQ3NjU4NzgsMTg1Mjc0ODUwOCwxNTE1OTA4Nzg4LDI2OTQ5MDQ2NjcsMTM4MTE2ODgwNCw5OTM3NDIxOTgsMzYwNDM3Mzk0MywzMDE0OTA1NDY5LDY5MDU4NDQwMiwzODIzMzIwNzk3LDc5MTYzODM2NiwyMjIzMjgxOTM5LDEzOTgwMTEzMDIsMzUyMDE2MTk3NywwLDM5OTE3NDM2ODEsNTM4OTkyNzA0LDQyNDQzODE2NjcsMjk4MTIxODQyNSwxNTMyNzUxMjg2LDE3ODUzODA1NjQsMzQxOTA5NjcxNywzMjAwMTc4NTM1LDk2MDA1NjE3OCwxMjQ2NDIwNjI4LDEyODAxMDM1NzYsMTQ4MjIyMTc0NCwzNDg2NDY4NzQxLDM1MDMzMTk5OTUsNDAyNTQyODY3NywyODYzMzI2NTQzLDQyMjc1MzY2MjEsMTEyODUxNDk1MCwxMjk2OTQ3MDk4LDg1OTAwMjIxNCwyMjQwMTIzOTIxLDExNjIyMDMwMTgsNDE5Mzg0OTU3NywzMzY4NzA0NCwyMTM5MDYyNzgyLDEzNDc0ODE3NjAsMTAxMDU4MjY0OCwyNjc4MDQ1MjIxLDI4Mjk2NDA1MjMsMTM2NDMyNTI4MiwyNzQ1NDMzNjkzLDEwNzc5ODU0MDgsMjQwODU0ODg2OSwyNDU5MDg2MTQzLDI2NDQzNjAyMjUsOTQzMjEyNjU2LDQxMjY0NzU1MDUsMzE2NjQ5NDU2MywzMDY1NDMwMzkxLDM2NzE3NTAwNjMsNTU1ODM2MjI2LDI2OTQ5NjM1Miw0Mjk0OTA4NjQ1LDQwOTI3OTI1NzMsMzUzNzAwNjAxNSwzNDUyNzgzNzQ1LDIwMjExODE2OCwzMjAwMjU4OTQsMzk3NDkwMTY5OSwxNjAwMTE5MjMwLDI1NDMyOTcwNzcsMTE0NTM1OTQ5NiwzODczOTc5MzQsMzMwMTIwMTgxMSwyODEyODAxNjIxLDIxMjIyMjAyODQsMTAyNzQyNjE3MCwxNjg0MzE5NDMyLDE1NjY0MzUyNTgsNDIxMDc5ODU4LDE5MzY5NTQ4NTQsMTYxNjk0NTM0NCwyMTcyNzUzOTQ1LDEzMzA2MzEwNzAsMzcwNTQzODExNSw1NzI2Nzk3NDgsNzA3NDI3OTI0LDI0MjU0MDAxMjMsMjI5MDY0NzgxOSwxMTc5MDQ0NDkyLDQwMDg1ODU2NzEsMzA5OTEyMDQ5MSwzMzY4NzA0NDAsMzczOTEyMjA4NywxNTgzMjc2NzMyLDE4NTI3NzcxOCwzNjg4NTkzMDY5LDM3NzI3OTE3NzEsODQyMTU5NzE2LDk3Njg5OTcwMCwxNjg0MzUyMjAsMTIyOTU3NzEwNiwxMDEwNTkwODQsNjA2MzY2NzkyLDE1NDk1OTE3MzYsMzI2NzUxNzg1NSwzNTUzODQ5MDIxLDI4OTcwMTQ1OTUsMTY1MDYzMjM4OCwyNDQyMjQyMTA1LDI1MDk2MTIwODEsMzg0MDE2MTc0NywyMDM4MDA4ODE4LDM4OTA2ODg3MjUsMzM2ODU2NzY5MSw5MjYzNzQyNTQsMTgzNTkwNzAzNCwyMzc0ODYzODczLDM1ODc1MzE5NTMsMTMxMzc4ODU3MiwyODQ2NDgyNTA1LDE4MTkwNjM1MTIsMTQ0ODU0MDg0NCw0MTA5NjMzNTIzLDM5NDEyMTM2NDcsMTcwMTE2Mjk1NCwyMDU0ODUyMzQwLDI5MzA2OTg1NjcsMTM0NzQ4MTc2LDMxMzI4MDY1MTEsMjAyMTE2NTI5Niw2MjMyMTAzMTQsNzc0Nzk1ODY4LDQ3MTYwNjMyOCwyNzk1OTU4NjE1LDMwMzE3NDY0MTksMzMzNDg4NTc4MywzOTA3NTI3NjI3LDM3MjIyODAwOTcsMTk1Mzc5OTQwMCw1MjIxMzM4MjIsMTI2MzI2MzEyNiwzMTgzMzM2NTQ1LDIzNDExNzY4NDUsMjMyNDMzMzgzOSwxODg2NDI1MzEyLDEwNDQyNjc2NDQsMzA0ODU4ODQwMSwxNzE4MDA0NDI4LDEyMTI3MzM1ODQsNTA1Mjk1NDIsNDE0MzMxNzQ5NSwyMzU4MDMxNjQsMTYzMzc4ODg2Niw4OTI2OTAyODIsMTQ2NTM4MzM0MiwzMTE1OTYyNDczLDIyNTY5NjU5MTEsMzI1MDY3MzgxNyw0ODg0NDk4NTAsMjY2MTIwMjIxNSwzNzg5NjMzNzUzLDQxNzcwMDc1OTUsMjU2MDE0NDE3MSwyODYzMzk4NzQsMTc2ODUzNzA0MiwzNjU0OTA2MDI1LDIzOTE3MDU4NjMsMjQ5Mjc3MDA5OSwyNjEwNjczMTk3LDUwNTI5MTMyNCwyMjczODA4OTE3LDM5MjQzNjk2MDksMzQ2OTYyNTczNSwxNDMxNjk5MzcwLDY3Mzc0MDg4MCwzNzU1OTY1MDkzLDIzNTgwMjE4OTEsMjcxMTc0NjY0OSwyMzA3NDg5ODAxLDIxODk2MTY5MCwzMjE3MDIxNTQxLDM4NzM4NDU3MTksMTExMTY3MjQ1MiwxNzUxNjkzNTIwLDEwOTQ4Mjg5MzAsMjU3Njk4NjE1Myw3NTc5NTQzOTQsMjUyNjQ1NjYyLDI5NjQzNzY0NDMsMTQxNDg1NTg0OCwzMTQ5NjQ5NTE3LDM3MDU1NTQzNl0sdG09WzEzNzQ5ODgxMTIsMjExODIxNDk5NSw0Mzc3NTcxMjMsOTc1NjU4NjQ2LDEwMDEwODk5OTUsNTMwNDAwNzUzLDI5MDIwODc4NTEsMTI3MzE2ODc4Nyw1NDAwODA3MjUsMjkxMDIxOTc2NiwyMjk1MTAxMDczLDQxMTA1Njg0ODUsMTM0MDQ2MzEwMCwzMzA3OTE2MjQ3LDY0MTAyNTE1MiwzMDQzMTQwNDk1LDM3MzYxNjQ5MzcsNjMyOTUzNzAzLDExNzI5NjcwNjQsMTU3Njk3NjYwOSwzMjc0NjY3MjY2LDIxNjkzMDMwNTgsMjM3MDIxMzc5NSwxODA5MDU0MTUwLDU5NzI3ODQ3LDM2MTkyOTg3NywzMjExNjIzMTQ3LDI1MDUyMDIxMzgsMzU2OTI1NTIxMywxNDg0MDA1ODQzLDEyMzk0NDM3NTMsMjM5NTU4ODY3NiwxOTc1NjgzNDM0LDQxMDI5Nzc5MTIsMjU3MjY5NzE5NSw2NjY0NjQ3MzMsMzIwMjQzNzA0Niw0MDM1NDg5MDQ3LDMzNzQzNjE3MDIsMjExMDY2NzQ0NCwxNjc1NTc3ODgwLDM4NDM2OTkwNzQsMjUzODY4MTE4NCwxNjQ5NjM5MjM3LDI5NzYxNTE1MjAsMzE0NDM5NjQyMCw0MjY5OTA3OTk2LDQxNzgwNjIyMjgsMTg4Mzc5MzQ5NiwyNDAzNzI4NjY1LDI0OTc2MDQ3NDMsMTM4Mzg1NjMxMSwyODc2NDk0NjI3LDE5MTc1MTg1NjIsMzgxMDQ5NjM0MywxNzE2ODkwNDEwLDMwMDE3NTU2NTUsODAwNDQwODM1LDIyNjEwODkxNzgsMzU0MzU5OTI2OSw4MDc5NjI2MTAsNTk5NzYyMzU0LDMzNzc4MzYyLDM5Nzc2NzUzNTYsMjMyODgyODk3MSwyODA5NzcxMTU0LDQwNzczODQ0MzIsMTMxNTU2MjE0NSwxNzA4ODQ4MzMzLDEwMTAzOTgyOSwzNTA5ODcxMTM1LDMyOTkyNzg0NzQsODc1NDUxMjkzLDI3MzM4NTYxNjAsOTI5ODc2OTgsMjc2NzY0NTU1NywxOTMxOTUwNjUsMTA4MDA5NDYzNCwxNTg0NTA0NTgyLDMxNzgxMDY5NjEsMTA0MjM4NTY1NywyNTMxMDY3NDUzLDM3MTE4Mjk0MjIsMTMwNjk2NzM2NiwyNDM4MjM3NjIxLDE5MDg2OTQyNzcsNjc1NTY0NjMsMTYxNTg2MTI0Nyw0Mjk0NTYxNjQsMzYwMjc3MDMyNywyMzAyNjkwMjUyLDE3NDIzMTUxMjcsMjk2ODAxMTQ1MywxMjY0NTQ2NjQsMzg3NzE5ODY0OCwyMDQzMjExNDgzLDI3MDkyNjA4NzEsMjA4NDcwNDIzMyw0MTY5NDA4MjAxLDAsMTU5NDE3OTg3LDg0MTczOTU5Miw1MDQ0NTk0MzYsMTgxNzg2NjgzMCw0MjQ1NjE4NjgzLDI2MDM4ODk1MCwxMDM0ODY3OTk4LDkwODkzMzQxNSwxNjg4MTA4NTIsMTc1MDkwMjMwNSwyNjA2NDUzOTY5LDYwNzUzMDU1NCwyMDIwMDg0OTcsMjQ3MjAxMTUzNSwzMDM1NTM1MDU4LDQ2MzE4MDE5MCwyMTYwMTE3MDcxLDE2NDE4MTYyMjYsMTUxNzc2NzUyOSw0NzA5NDgzNzQsMzgwMTMzMjIzNCwzMjMxNzIyMjEzLDEwMDg5MTg1OTUsMzAzNzY1Mjc3LDIzNTQ3NDE4Nyw0MDY5MjQ2ODkzLDc2Njk0NTQ2NSwzMzc1NTM4NjQsMTQ3NTQxODUwMSwyOTQzNjgyMzgwLDQwMDMwNjExNzksMjc0MzAzNDEwOSw0MTQ0MDQ3Nzc1LDE1NTEwMzc4ODQsMTE0NzU1MDY2MSwxNTQzMjA4NTAwLDIzMzY0MzQ1NTAsMzQwODExOTUxNiwzMDY5MDQ5OTYwLDMxMDIwMTE3NDcsMzYxMDM2OTIyNiwxMTEzODE4Mzg0LDMyODY3MTgwOCwyMjI3NTczMDI0LDIyMzYyMjg3MzMsMzUzNTQ4NjQ1NiwyOTM1NTY2ODY1LDMzNDEzOTQyODUsNDk2OTA2MDU5LDM3MDI2NjU0NTksMjI2OTA2ODYwLDIwMDkxOTU0NzIsNzMzMTU2OTcyLDI4NDI3MzcwNDksMjk0OTMwNjgyLDEyMDY0Nzc4NTgsMjgzNTEyMzM5NiwyNzAwMDk5MzU0LDE0NTEwNDQwNTYsNTczODA0NzgzLDIyNjk3Mjg0NTUsMzY0NDM3OTU4NSwyMzYyMDkwMjM4LDI1NjQwMzMzMzQsMjgwMTEwNzQwNywyNzc2MjkyOTA0LDM2Njk0NjI1NjYsMTA2ODM1MTM5Niw3NDIwMzkwMTIsMTM1MDA3ODk4OSwxNzg0NjYzMTk1LDE0MTc1NjE2OTgsNDEzNjQ0MDc3MCwyNDMwMTIyMjE2LDc3NTU1MDgxNCwyMTkzODYyNjQ1LDI2NzM3MDUxNTAsMTc3NTI3NjkyNCwxODc2MjQxODMzLDM0NzUzMTMzMzEsMzM2Njc1NDYxOSwyNzAwNDA0ODcsMzkwMjU2MzE4MiwzNjc4MTI0OTIzLDM0NDE4NTAzNzcsMTg1MTMzMjg1MiwzOTY5NTYyMzY5LDIyMDMwMzIyMzIsMzg2ODU1MjgwNSwyODY4ODk3NDA2LDU2NjAyMTg5Niw0MDExMTkwNTAyLDMxMzU3NDA4ODksMTI0ODgwMjUxMCwzOTM2MjkxMjg0LDY5OTQzMjE1MCw4MzI4NzcyMzEsNzA4NzgwODQ5LDMzMzI3NDAxNDQsODk5ODM1NTg0LDE5NTEzMTcwNDcsNDIzNjQyOTk5MCwzNzY3NTg2OTkyLDg2NjYzNzg0NSw0MDQzNjEwMTg2LDExMDYwNDE1OTEsMjE0NDE2MTgwNiwzOTU0NDE3MTEsMTk4NDgxMjY4NSwxMTM5NzgxNzA5LDM0MzM3MTI5ODAsMzgzNTAzNjg5NSwyNjY0NTQzNzE1LDEyODIwNTAwNzUsMzI0MDg5NDM5MiwxMTgxMDQ1MTE5LDI2NDAyNDMyMDQsMjU5NjU5MTcsNDIwMzE4MTE3MSw0MjExODE4Nzk4LDMwMDk4NzkzODYsMjQ2Mzg3OTc2MiwzOTEwMTYxOTcxLDE4NDI3NTk0NDMsMjU5NzgwNjQ3Niw5MzMzMDEzNzAsMTUwOTQzMDQxNCwzOTQzOTA2NDQxLDM0NjcxOTIzMDIsMzA3NjYzOTAyOSwzNzc2NzY3NDY5LDIwNTE1MTg3ODAsMjYzMTA2NTQzMywxNDQxOTUyNTc1LDQwNDAxNjc2MSwxOTQyNDM1Nzc1LDE0MDg3NDkwMzQsMTYxMDQ1OTczOSwzNzQ1MzQ1MzAwLDIwMTc3Nzg1NjYsMzQwMDUyODc2OSwzMTEwNjUwOTQyLDk0MTg5Njc0OCwzMjY1NDc4NzUxLDM3MTA0OTMzMCwzMTY4OTM3MjI4LDY3NTAzOTYyNyw0Mjc5MDgwMjU3LDk2NzMxMTcyOSwxMzUwNTAyMDYsMzYzNTczMzY2MCwxNjgzNDA3MjQ4LDIwNzY5MzUyNjUsMzU3Njg3MDUxMiwxMjE1MDYxMTA4LDM1MDE3NDE4OTBdLHJtPVsxMzQ3NTQ4MzI3LDE0MDA3ODMyMDUsMzI3MzI2NzEwOCwyNTIwMzkzNTY2LDM0MDk2ODUzNTUsNDA0NTM4MDkzMywyODgwMjQwMjE2LDI0NzEyMjQwNjcsMTQyODE3MzA1MCw0MTM4NTYzMTgxLDI0NDE2NjE1NTgsNjM2ODEzOTAwLDQyMzMwOTQ2MTUsMzYyMDAyMjk4NywyMTQ5OTg3NjUyLDI0MTEwMjkxNTUsMTIzOTMzMTE2MiwxNzMwNTI1NzIzLDI1NTQ3MTg3MzQsMzc4MTAzMzY2NCw0NjM0NjEwMSwzMTA0NjM3MjgsMjc0Mzk0NDg1NSwzMzI4OTU1Mzg1LDM4NzU3NzAyMDcsMjUwMTIxODk3MiwzOTU1MTkxMTYyLDM2NjcyMTkwMzMsNzY4OTE3MTIzLDM1NDU3ODk0NzMsNjkyNzA3NDMzLDExNTAyMDg0NTYsMTc4NjEwMjQwOSwyMDI5MjkzMTc3LDE4MDUyMTE3MTAsMzcxMDM2ODExMywzMDY1OTYyODMxLDQwMTYzOTU5NywxNzI0NDU3MTMyLDMwMjgxNDM2NzQsNDA5MTk4NDEwLDIxOTYwNTI1MjksMTYyMDUyOTQ1OSwxMTY0MDcxODA3LDM3Njk3MjE5NzUsMjIyNjg3NTMxMCw0ODY0NDEzNzYsMjQ5OTM0ODUyMywxNDgzNzUzNTc2LDQyODgxOTk2NSwyMjc0NjgwNDI4LDMwNzU2MzYyMTYsNTk4NDM4ODY3LDM3OTkxNDExMjIsMTQ3NDUwMjU0Myw3MTEzNDk2NzUsMTI5MTY2MTIwLDUzNDU4MzcwLDI1OTI1MjM2NDMsMjc4MjA4MjgyNCw0MDYzMjQyMzc1LDI5ODg2ODcyNjksMzEyMDY5NDEyMiwxNTU5MDQxNjY2LDczMDUxNzI3NiwyNDYwNDQ5MjA0LDQwNDI0NTkxMjIsMjcwNjI3MDY5MCwzNDQ2MDA0NDY4LDM1NzM5NDE2OTQsNTMzODA0MTMwLDIzMjgxNDM2MTQsMjYzNzQ0MjY0MywyNjk1MDMzNjg1LDgzOTIyNDAzMywxOTczNzQ1Mzg3LDk1NzA1NTk4MCwyODU2MzQ1ODM5LDEwNjg1Mjc2NywxMzcxMzY4OTc2LDQxODE1OTg2MDIsMTAzMzI5NzE1OCwyOTMzNzM0OTE3LDExNzk1MTA0NjEsMzA0NjIwMDQ2MSw5MTM0MTkxNywxODYyNTM0ODY4LDQyODQ1MDIwMzcsNjA1NjU3MzM5LDI1NDc0MzI5MzcsMzQzMTU0Njk0NywyMDAzMjk0NjIyLDMxODI0ODc2MTgsMjI4MjE5NTMzOSw5NTQ2Njk0MDMsMzY4MjE5MTU5OCwxMjAxNzY1Mzg2LDM5MTcyMzQ3MDMsMzM4ODUwNzE2NiwwLDIxOTg0MzgwMjIsMTIxMTI0NzU5NywyODg3NjUxNjk2LDEzMTU3MjM4OTAsNDIyNzY2NTY2MywxNDQzODU3NzIwLDUwNzM1ODkzMyw2NTc4NjE5NDUsMTY3ODM4MTAxNyw1NjA0ODc1OTAsMzUxNjYxOTYwNCw5NzU0NTE2OTQsMjk3MDM1NjMyNywyNjEzMTQ1MzUsMzUzNTA3MjkxOCwyNjUyNjA5NDI1LDEzMzM4MzgwMjEsMjcyNDMyMjMzNiwxNzY3NTM2NDU5LDM3MDkzODM5NCwxODI2MjExMTQsMzg1NDYwNjM3OCwxMTI4MDE0NTYwLDQ4NzcyNTg0NywxODU0NjkxOTcsMjkxODM1Mzg2MywzMTA2NzgwODQwLDMzNTY3NjE3NjksMjIzNzEzMzA4MSwxMjg2NTY3MTc1LDMxNTI5NzYzNDksNDI1NTM1MDYyNCwyNjgzNzY1MDMwLDMxNjAxNzUzNDksMzMwOTU5NDE3MSw4Nzg0NDMzOTAsMTk4ODgzODE4NSwzNzA0MzAwNDg2LDE3NTY4MTg5NDAsMTY3MzA2MTYxNywzNDAzMTAwNjM2LDI3Mjc4NjMwOSwxMDc1MDI1Njk4LDU0NTU3MjM2OSwyMTA1ODg3MjY4LDQxNzQ1NjAwNjEsMjk2Njc5NzMwLDE4NDE3Njg4NjUsMTI2MDIzMjIzOSw0MDkxMzI3MDI0LDM5NjAzMDkzMzAsMzQ5NzUwOTM0NywxODE0ODAzMjIyLDI1NzgwMTg0ODksNDE5NTQ1NjA3Miw1NzUxMzgxNDgsMzI5OTQwOTAzNiw0NDY3NTQ4NzksMzYyOTU0Njc5Niw0MDExOTk2MDQ4LDMzNDc1MzIxMTAsMzI1MjIzODU0NSw0MjcwNjM5Nzc4LDkxNTk4NTQxOSwzNDgzODI1NTM3LDY4MTkzMzUzNCw2NTE4NjgwNDYsMjc1NTYzNjY3MSwzODI4MTAzODM3LDIyMzM3NzU1NCwyNjA3NDM5ODIwLDE2NDk3MDQ1MTgsMzI3MDkzNzg3NSwzOTAxODA2Nzc2LDE1ODAwODc3OTksNDExODk4NzY5NSwzMTk4MTE1MjAwLDIwODczMDk0NTksMjg0MjY3ODU3MywzMDE2Njk3MTA2LDEwMDMwMDcxMjksMjgwMjg0OTkxNywxODYwNzM4MTQ3LDIwNzc5NjUyNDMsMTY0NDM5NjcyLDQxMDA4NzI0NzIsMzIyODMzMTksMjgyNzE3Nzg4MiwxNzA5NjEwMzUwLDIxMjUxMzU4NDYsMTM2NDI4NzUxLDM4NzQ0MjgzOTIsMzY1MjkwNDg1OSwzNDYwOTg0NjMwLDM1NzIxNDU5MjksMzU5MzA1NjM4MCwyOTM5MjY2MjI2LDgyNDg1MjI1OSw4MTgzMjQ4ODQsMzIyNDc0MDQ1NCw5MzAzNjkyMTIsMjgwMTU2NjQxMCwyOTY3NTA3MTUyLDM1NTcwNjg0MCwxMjU3MzA5MzM2LDQxNDgyOTI4MjYsMjQzMjU2NjU2LDc5MDA3Mzg0NiwyMzczMzQwNjMwLDEyOTYyOTc5MDQsMTQyMjY5OTA4NSwzNzU2Mjk5NzgwLDM4MTg4MzY0MDUsNDU3OTkyODQwLDMwOTk2Njc0ODcsMjEzNTMxOTg4OSw3NzQyMjMxNCwxNTYwMzgyNTE3LDE5NDU3OTg1MTYsNzg4MjA0MzUzLDE1MjE3MDY3ODEsMTM4NTM1NjI0Miw4NzA5MTIwODYsMzI1OTY1MzgzLDIzNTg5NTc5MjEsMjA1MDQ2NjA2MCwyMzg4MjYwODg0LDIzMTM4ODQ0NzYsNDAwNjUyMTEyNyw5MDEyMTA1NjksMzk5MDk1MzE4OSwxMDE0NjQ2NzA1LDE1MDM0NDk4MjMsMTA2MjU5NzIzNSwyMDMxNjIxMzI2LDMyMTIwMzU4OTUsMzkzMTM3MTQ2OSwxNTMzMDE3NTE0LDM1MDE3NDU3NSwyMjU2MDI4ODkxLDIxNzc1NDQxNzksMTA1MjMzODM3Miw3NDE4NzY3ODgsMTYwNjU5MTI5NiwxOTE0MDUyMDM1LDIxMzcwNTI1MywyMzM0NjY5ODk3LDExMDcyMzQxOTcsMTg5OTYwMzk2OSwzNzI1MDY5NDkxLDI2MzE0NDc3ODAsMjQyMjQ5NDkxMywxNjM1NTAyOTgwLDE4OTMwMjAzNDIsMTk1MDkwMzM4OCwxMTIwOTc0OTM1XSxubT1bMjgwNzA1ODkzMiwxNjk5OTcwNjI1LDI3NjQyNDk2MjMsMTU4NjkwMzU5MSwxODA4NDgxMTk1LDExNzM0MzAxNzMsMTQ4NzY0NTk0Niw1OTk4NDg2Nyw0MTk5ODgyODAwLDE4NDQ4ODI4MDYsMTk4OTI0OTIyOCwxMjc3NTU1OTcwLDM2MjM2MzY5NjUsMzQxOTkxNTU2MiwxMTQ5MjQ5MDc3LDI3NDQxMDQyOTAsMTUxNDc5MDU3Nyw0NTk3NDQ2OTgsMjQ0ODYwMzk0LDMyMzU5OTUxMzQsMTk2MzExNTMxMSw0MDI3NzQ0NTg4LDI1NDQwNzgxNTAsNDE5MDUzMDUxNSwxNjA4OTc1MjQ3LDI2MjcwMTYwODIsMjA2MjI3MDMxNywxNTA3NDk3Mjk4LDIyMDA4MTg4NzgsNTY3NDk4ODY4LDE3NjQzMTM1NjgsMzM1OTkzNjIwMSwyMzA1NDU1NTU0LDIwMzc5NzAwNjIsMTA0NzIzOWUzLDE5MTAzMTkwMzMsMTMzNzM3NjQ4MSwyOTA0MDI3MjcyLDI4OTI0MTczMTIsOTg0OTA3MjE0LDEyNDMxMTI0MTUsODMwNjYxOTE0LDg2MTk2ODIwOSwyMTM1MjUzNTg3LDIwMTEyMTQxODAsMjkyNzkzNDMxNSwyNjg2MjU0NzIxLDczMTE4MzM2OCwxNzUwNjI2Mzc2LDQyNDYzMTA3MjUsMTgyMDgyNDc5OCw0MTcyNzYzNzcxLDM1NDIzMzAyMjcsNDgzOTQ4MjcsMjQwNDkwMTY2MywyODcxNjgyNjQ1LDY3MTU5MzE5NSwzMjU0OTg4NzI1LDIwNzM3MjQ2MTMsMTQ1MDg1MjM5LDIyODA3OTYyMDAsMjc3OTkxNTE5OSwxNzkwNTc1MTA3LDIxODcxMjgwODYsNDcyNjE1NjMxLDMwMjk1MTAwMDksNDA3NTg3NzEyNywzODAyMjIyMTg1LDQxMDcxMDE2NTgsMzIwMTYzMTc0OSwxNjQ2MjUyMzQwLDQyNzA1MDcxNzQsMTQwMjgxMTQzOCwxNDM2NTkwODM1LDM3NzgxNTE4MTgsMzk1MDM1NTcwMiwzOTYzMTYxNDc1LDQwMjA5MTIyMjQsMjY2Nzk5NDczNywyNzM3OTIzNjYsMjMzMTU5MDE3NywxMDQ2OTk2MTMsOTUzNDU5ODIsMzE3NTUwMTI4NiwyMzc3NDg2Njc2LDE1NjA2Mzc4OTIsMzU2NDA0NTMxOCwzNjkwNTc4NzIsNDIxMzQ0NzA2NCwzOTE5MDQyMjM3LDExMzc0Nzc5NTIsMjY1ODYyNTQ5NywxMTE5NzI3ODQ4LDIzNDA5NDc4NDksMTUzMDQ1NTgzMyw0MDA3MzYwOTY4LDE3MjQ2NjU1NiwyNjY5NTk5MzgsNTE2NTUyODM2LDAsMjI1NjczNDU5MiwzOTgwOTMxNjI3LDE4OTAzMjgwODEsMTkxNzc0MjE3MCw0Mjk0NzA0Mzk4LDk0NTE2NDE2NSwzNTc1NTI4ODc4LDk1ODg3MTA4NSwzNjQ3MjEyMDQ3LDI3ODcyMDcyNjAsMTQyMzAyMjkzOSw3NzU1NjIyOTQsMTczOTY1NjIwMiwzODc2NTU3NjU1LDI1MzAzOTEyNzgsMjQ0MzA1ODA3NSwzMzEwMzIxODU2LDU0NzUxMjc5NiwxMjY1MTk1NjM5LDQzNzY1NjU5NCwzMTIxMjc1NTM5LDcxOTcwMDEyOCwzNzYyNTAyNjkwLDM4Nzc4MTE0NywyMTg4MjgyOTcsMzM1MDA2NTgwMywyODMwNzA4MTUwLDI4NDg0NjE4NTQsNDI4MTY5MjAxLDEyMjQ2NjE2NSwzNzIwMDgxMDQ5LDE2MjcyMzUxOTksNjQ4MDE3NjY1LDQxMjI3NjIzNTQsMTAwMjc4Mzg0NiwyMTE3MzYwNjM1LDY5NTYzNDc1NSwzMzM2MzU4NjkxLDQyMzQ3MjEwMDUsNDA0OTg0NDQ1MiwzNzA0MjgwODgxLDIyMzI0MzUyOTksNTc0NjI0NjYzLDI4NzM0MzgxNCw2MTIyMDU4OTgsMTAzOTcxNzA1MSw4NDAwMTk3MDUsMjcwODMyNjE4NSw3OTM0NTE5MzQsODIxMjg4MTE0LDEzOTEyMDE2NzAsMzgyMjA5MDE3NywzNzYxODc4MjcsMzExMzg1NTM0NCwxMjI0MzQ4MDUyLDE2Nzk5NjgyMzMsMjM2MTY5ODU1NiwxMDU4NzA5NzQ0LDc1MjM3NTQyMSwyNDMxNTkwOTYzLDEzMjE2OTkxNDUsMzUxOTE0MjIwMCwyNzM0NTkxMTc4LDE4ODEyNzQ0NCwyMTc3ODY5NTU3LDM3MjcyMDU3NTQsMjM4NDkxMTAzMSwzMjE1MjEyNDYxLDI2NDg5NzY0NDIsMjQ1MDM0NjEwNCwzNDMyNzM3Mzc1LDExODA4NDkyNzgsMzMxNTQ0MjA1LDMxMDIyNDkxNzYsNDE1MDE0NDU2OSwyOTUyMTAyNTk1LDIxNTk5NzYyODUsMjQ3NDQwNDMwNCw3NjYwNzg5MzMsMzEzNzczODYxLDI1NzA4MzIwNDQsMjEwODEwMDYzMiwxNjY4MjEyODkyLDMxNDU0NTY0NDMsMjAxMzkwODI2Miw0MTg2NzIyMTcsMzA3MDM1NjYzNCwyNTk0NzM0OTI3LDE4NTIxNzE5MjUsMzg2NzA2MDk5MSwzNDczNDE2NjM2LDM5MDc0NDg1OTcsMjYxNDczNzYzOSw5MTk0ODkxMzUsMTY0OTQ4NjM5LDIwOTQ0MTAxNjAsMjk5NzgyNTk1Niw1OTA0MjQ2MzksMjQ4NjIyNDU0OSwxNzIzODcyNjc0LDMxNTc3NTA4NjIsMzM5OTk0MTI1MCwzNTAxMjUyNzUyLDM2MjUyNjgxMzUsMjU1NTA0ODE5NiwzNjczNjM3MzU2LDEzNDMxMjc1MDEsNDEzMDI4MTM2MSwzNTk5NTk1MDg1LDI5NTc4NTM2NzksMTI5NzQwMzA1MCw4MTc4MTkxMCwzMDUxNTkzNDI1LDIyODM0OTA0MTAsNTMyMjAxNzcyLDEzNjcyOTU1ODksMzkyNjE3MDk3NCw4OTUyODc2OTIsMTk1Mzc1NzgzMSwxMDkzNTk3OTYzLDQ5MjQ4MzQzMSwzNTI4NjI2OTA3LDE0NDYyNDI1NzYsMTE5MjQ1NTYzOCwxNjM2NjA0NjMxLDIwOTMzNjIyNSwzNDQ4NzM0NjQsMTAxNTY3MTU3MSw2Njk5NjE4OTcsMzM3NTc0MDc2OSwzODU3NTcyMTI0LDI5NzM1MzA2OTUsMzc0NzE5MjAxOCwxOTMzNTMwNjEwLDM0NjQwNDI1MTYsOTM1MjkzODk1LDM0NTQ2ODYxOTksMjg1ODExNTA2OSwxODYzNjM4ODQ1LDM2ODMwMjI5MTYsNDA4NTM2OTUxOSwzMjkyNDQ1MDMyLDg3NTMxMzE4OCwxMDgwMDE3NTcxLDMyNzkwMzM4ODUsNjIxNTkxNzc4LDEyMzM4NTY1NzIsMjUwNDEzMDMxNywyNDE5NzU0NCwzMDE3NjcyNzE2LDM4MzU0ODQzNDAsMzI0NzQ2NTU1OCwyMjIwOTgxMTk1LDMwNjA4NDc5MjIsMTU1MTEyNDU4OCwxNDYzOTk2NjAwXSxvbT1bNDEwNDYwNTc3NywxMDk3MTU5NTUwLDM5NjY3MzgxOCw2NjA1MTAyNjYsMjg3NTk2ODMxNSwyNjM4NjA2NjIzLDQyMDAxMTUxMTYsMzgwODY2MjM0Nyw4MjE3MTIxNjAsMTk4NjkxODA2MSwzNDMwMzIyNTY4LDM4NTQ0ODg1LDM4NTYxMzcyOTUsNzE4MDAyMTE3LDg5MzY4MTcwMiwxNjU0ODg2MzI1LDI5NzU0ODQzODIsMzEyMjM1ODA1MywzOTI2ODI1MDI5LDQyNzQwNTM0NjksNzk2MTk3NTcxLDEyOTA4MDE3OTMsMTE4NDM0MjkyNSwzNTU2MzYxODM1LDI0MDU0MjY5NDcsMjQ1OTczNTMxNywxODM2NzcyMjg3LDEzODE2MjAzNzMsMzE5NjI2Nzk4OCwxOTQ4MzczODQ4LDM3NjQ5ODgyMzMsMzM4NTM0NTE2NiwzMjYzNzg1NTg5LDIzOTAzMjU0OTIsMTQ4MDQ4NTc4NSwzMTExMjQ3MTQzLDM3ODAwOTc3MjYsMjI5MzA0NTIzMiw1NDgxNjk0MTcsMzQ1OTk1Mzc4OSwzNzQ2MTc1MDc1LDQzOTQ1MjM4OSwxMzYyMzIxNTU5LDE0MDA4NDk3NjIsMTY4NTU3NzkwNSwxODA2NTk5MzU1LDIxNzQ3NTQwNDYsMTM3MDczOTEzLDEyMTQ3OTc5MzYsMTE3NDIxNTA1NSwzNzMxNjU0NTQ4LDIwNzk4OTc0MjYsMTk0MzIxNzA2NywxMjU4NDgwMjQyLDUyOTQ4Nzg0MywxNDM3MjgwODcwLDM5NDUyNjkxNzAsMzA0OTM5MDg5NSwzMzEzMjEyMDM4LDkyMzMxMzYxOSw2Nzk5OThlMywzMjE1MzA3Mjk5LDU3MzI2MDgyLDM3NzY0MjIyMSwzNDc0NzI5ODY2LDIwNDE4NzcxNTksMTMzMzYxOTA3LDE3NzY0NjAxMTAsMzY3MzQ3NjQ1Myw5NjM5MjQ1NCw4Nzg4NDU5MDUsMjgwMTY5OTUyNCw3NzcyMzE2NjgsNDA4MjQ3NTE3MCwyMzMwMDE0MjEzLDQxNDI2MjYyMTIsMjIxMzI5NjM5NSwxNjI2MzE5NDI0LDE5MDYyNDcyNjIsMTg0NjU2MzI2MSw1NjI3NTU5MDIsMzcwODE3MzcxOCwxMDQwNTU5ODM3LDM4NzExNjM5ODEsMTQxODU3MzIwMSwzMjk0NDMwNTc3LDExNDU4NTM0OCwxMzQzNjE4OTEyLDI1NjY1OTU2MDksMzE4NjIwMjU4MiwxMDc4MTg1MDk3LDM2NTEwNDExMjcsMzg5NjY4ODA0OCwyMzA3NjIyOTE5LDQyNTQwODc0MywzMzcxMDk2OTUzLDIwODEwNDg0ODEsMTEwODMzOTA2OCwyMjE2NjEwMjk2LDAsMjE1NjI5OTAxNyw3MzY5NzA4MDIsMjkyNTk2NzY2LDE1MTc0NDA2MjAsMjUxNjU3MjEzLDIyMzUwNjE3NzUsMjkzMzIwMjQ5Myw3NTg3MjAzMTAsMjY1OTA1MTYyLDE1NTQzOTE0MDAsMTUzMjI4NTMzOSw5MDg5OTkyMDQsMTc0NTY3NjkyLDE0NzQ3NjA1OTUsNDAwMjg2MTc0OCwyNjEwMDExNjc1LDMyMzQxNTY0MTYsMzY5MzEyNjI0MSwyMDAxNDMwODc0LDMwMzY5OTQ4NCwyNDc4NDQzMjM0LDI2ODcxNjU4ODgsNTg1MTIyNjIwLDQ1NDQ5OTYwMiwxNTE4NDk3NDIsMjM0NTExOTIxOCwzMDY0NTEwNzY1LDUxNDQ0MzI4NCw0MDQ0OTgxNTkxLDE5NjM0MTI2NTUsMjU4MTQ0NTYxNCwyMTM3MDYyODE5LDE5MzA4NTM1LDE5Mjg3MDcxNjQsMTcxNTE5MzE1Niw0MjE5MzUyMTU1LDExMjY3OTA3OTUsNjAwMjM1MjExLDM5OTI3NDIwNzAsMzg0MTAyNDk1Miw4MzY1NTM0MzEsMTY2OTY2NDgzNCwyNTM1NjA0MjQzLDMzMjMwMTEyMDQsMTI0MzkwNTQxMywzMTQxNDAwNzg2LDQxODA4MDgxMTAsNjk4NDQ1MjU1LDI2NTM4OTk1NDksMjk4OTU1MjYwNCwyMjUzNTgxMzI1LDMyNTI5MzI3MjcsMzAwNDU5MTE0NywxODkxMjExNjg5LDI0ODc4MTA1NzcsMzkxNTY1MzcwMyw0MjM3MDgzODE2LDQwMzA2Njc0MjQsMjEwMDA5MDk2Niw4NjUxMzY0MTgsMTIyOTg5OTY1NSw5NTMyNzA3NDUsMzM5OTY3OTYyOCwzNTU3NTA0NjY0LDQxMTg5MjUyMjIsMjA2MTM3OTc0OSwzMDc5NTQ2NTg2LDI5MTUwMTc3OTEsOTgzNDI2MDkyLDIwMjI4Mzc1ODQsMTYwNzI0NDY1MCwyMTE4NTQxOTA4LDIzNjY4ODI1NTAsMzYzNTk5NjgxNiw5NzI1MTI4MTQsMzI4MzA4ODc3MCwxNTY4NzE4NDk1LDM0OTkzMjY1NjksMzU3NjUzOTUwMyw2MjE5ODI2NzEsMjg5NTcyMzQ2NCw0MTA4ODc5NTIsMjYyMzc2MjE1MiwxMDAyMTQyNjgzLDY0NTQwMTAzNywxNDk0ODA3NjYyLDI1OTU2ODQ4NDQsMTMzNTUzNTc0NywyNTA3MDQwMjMwLDQyOTMyOTU3ODYsMzE2NzY4NDY0MSwzNjc1ODUwMDcsMzg4NTc1MDcxNCwxODY1ODYyNzMwLDI2NjgyMjE2NzQsMjk2MDk3MTMwNSwyNzYzMTczNjgxLDEwNTkyNzA5NTQsMjc3Nzk1MjQ1NCwyNzI0NjQyODY5LDEzMjA5NTc4MTIsMjE5NDMxOTEwMCwyNDI5NTk1ODcyLDI4MTU5NTYyNzUsNzcwODk1MjEsMzk3Mzc3MzEyMSwzNDQ0NTc1ODcxLDI0NDg4MzAyMzEsMTMwNTkwNjU1MCw0MDIxMzA4NzM5LDI4NTcxOTQ3MDAsMjUxNjkwMTg2MCwzNTE4MzU4NDMwLDE3ODczMDQ3ODAsNzQwMjc2NDE3LDE2OTk4Mzk4MTQsMTU5MjM5NDkwOSwyMzUyMzA3NDU3LDIyNzI1NTYwMjYsMTg4ODIxMjQzLDE3Mjk5NzcwMTEsMzY4Nzk5NDAwMiwyNzQwODQ4NDEsMzU5NDk4MjI1MywzNjEzNDk0NDI2LDI3MDE5NDk0OTUsNDE2MjA5NjcyOSwzMjI3MzQ1NzEsMjgzNzk2NjU0MiwxNjQwNTc2NDM5LDQ4NDgzMDY4OSwxMjAyNzk3NjkwLDM1Mzc4NTI4MjgsNDA2NzYzOTEyNSwzNDkwNzU3MzYsMzM0MjMxOTQ3NSw0MTU3NDY3MjE5LDQyNTU4MDAxNTksMTAzMDY5MDAxNSwxMTU1MjM3NDk2LDI5NTE5NzEyNzQsMTc1NzY5MTU3Nyw2MDczOTg5NjgsMjczODkwNTAyNiw0OTkzNDc5OTAsMzc5NDA3ODkwOCwxMDExNDUyNzEyLDIyNzg4NTU2NywyODE4NjY2ODA5LDIxMzExNDM3NiwzMDM0ODgxMjQwLDE0NTU1MjU5ODgsMzQxNDQ1MDU1NSw4NTA4MTcyMzcsMTgxNzk5ODQwOCwzMDkyNzI2NDgwXSxzbT1bMCwyMzU0NzQxODcsNDcwOTQ4Mzc0LDMwMzc2NTI3Nyw5NDE4OTY3NDgsOTA4OTMzNDE1LDYwNzUzMDU1NCw3MDg3ODA4NDksMTg4Mzc5MzQ5NiwyMTE4MjE0OTk1LDE4MTc4NjY4MzAsMTY0OTYzOTIzNywxMjE1MDYxMTA4LDExODEwNDUxMTksMTQxNzU2MTY5OCwxNTE3NzY3NTI5LDM3Njc1ODY5OTIsNDAwMzA2MTE3OSw0MjM2NDI5OTkwLDQwNjkyNDY4OTMsMzYzNTczMzY2MCwzNjAyNzcwMzI3LDMyOTkyNzg0NzQsMzQwMDUyODc2OSwyNDMwMTIyMjE2LDI2NjQ1NDM3MTUsMjM2MjA5MDIzOCwyMTkzODYyNjQ1LDI4MzUxMjMzOTYsMjgwMTEwNzQwNywzMDM1NTM1MDU4LDMxMzU3NDA4ODksMzY3ODEyNDkyMywzNTc2ODcwNTEyLDMzNDEzOTQyODUsMzM3NDM2MTcwMiwzODEwNDk2MzQzLDM5Nzc2NzUzNTYsNDI3OTA4MDI1Nyw0MDQzNjEwMTg2LDI4NzY0OTQ2MjcsMjc3NjI5MjkwNCwzMDc2NjM5MDI5LDMxMTA2NTA5NDIsMjQ3MjAxMTUzNSwyNjQwMjQzMjA0LDI0MDM3Mjg2NjUsMjE2OTMwMzA1OCwxMDAxMDg5OTk1LDg5OTgzNTU4NCw2NjY0NjQ3MzMsNjk5NDMyMTUwLDU5NzI3ODQ3LDIyNjkwNjg2MCw1MzA0MDA3NTMsMjk0OTMwNjgyLDEyNzMxNjg3ODcsMTE3Mjk2NzA2NCwxNDc1NDE4NTAxLDE1MDk0MzA0MTQsMTk0MjQzNTc3NSwyMTEwNjY3NDQ0LDE4NzYyNDE4MzMsMTY0MTgxNjIyNiwyOTEwMjE5NzY2LDI3NDMwMzQxMDksMjk3NjE1MTUyMCwzMjExNjIzMTQ3LDI1MDUyMDIxMzgsMjYwNjQ1Mzk2OSwyMzAyNjkwMjUyLDIyNjk3Mjg0NTUsMzcxMTgyOTQyMiwzNTQzNTk5MjY5LDMyNDA4OTQzOTIsMzQ3NTMxMzMzMSwzODQzNjk5MDc0LDM5NDM5MDY0NDEsNDE3ODA2MjIyOCw0MTQ0MDQ3Nzc1LDEzMDY5NjczNjYsMTEzOTc4MTcwOSwxMzc0OTg4MTEyLDE2MTA0NTk3MzksMTk3NTY4MzQzNCwyMDc2OTM1MjY1LDE3NzUyNzY5MjQsMTc0MjMxNTEyNywxMDM0ODY3OTk4LDg2NjYzNzg0NSw1NjYwMjE4OTYsODAwNDQwODM1LDkyOTg3Njk4LDE5MzE5NTA2NSw0Mjk0NTYxNjQsMzk1NDQxNzExLDE5ODQ4MTI2ODUsMjAxNzc3ODU2NiwxNzg0NjYzMTk1LDE2ODM0MDcyNDgsMTMxNTU2MjE0NSwxMDgwMDk0NjM0LDEzODM4NTYzMTEsMTU1MTAzNzg4NCwxMDEwMzk4MjksMTM1MDUwMjA2LDQzNzc1NzEyMywzMzc1NTM4NjQsMTA0MjM4NTY1Nyw4MDc5NjI2MTAsNTczODA0NzgzLDc0MjAzOTAxMiwyNTMxMDY3NDUzLDI1NjQwMzMzMzQsMjMyODgyODk3MSwyMjI3NTczMDI0LDI5MzU1NjY4NjUsMjcwMDA5OTM1NCwzMDAxNzU1NjU1LDMxNjg5MzcyMjgsMzg2ODU1MjgwNSwzOTAyNTYzMTgyLDQyMDMxODExNzEsNDEwMjk3NzkxMiwzNzM2MTY0OTM3LDM1MDE3NDE4OTAsMzI2NTQ3ODc1MSwzNDMzNzEyOTgwLDExMDYwNDE1OTEsMTM0MDQ2MzEwMCwxNTc2OTc2NjA5LDE0MDg3NDkwMzQsMjA0MzIxMTQ4MywyMDA5MTk1NDcyLDE3MDg4NDgzMzMsMTgwOTA1NDE1MCw4MzI4NzcyMzEsMTA2ODM1MTM5Niw3NjY5NDU0NjUsNTk5NzYyMzU0LDE1OTQxNzk4NywxMjY0NTQ2NjQsMzYxOTI5ODc3LDQ2MzE4MDE5MCwyNzA5MjYwODcxLDI5NDM2ODIzODAsMzE3ODEwNjk2MSwzMDA5ODc5Mzg2LDI1NzI2OTcxOTUsMjUzODY4MTE4NCwyMjM2MjI4NzMzLDIzMzY0MzQ1NTAsMzUwOTg3MTEzNSwzNzQ1MzQ1MzAwLDM0NDE4NTAzNzcsMzI3NDY2NzI2NiwzOTEwMTYxOTcxLDM4NzcxOTg2NDgsNDExMDU2ODQ4NSw0MjExODE4Nzk4LDI1OTc4MDY0NzYsMjQ5NzYwNDc0MywyMjYxMDg5MTc4LDIyOTUxMDEwNzMsMjczMzg1NjE2MCwyOTAyMDg3ODUxLDMyMDI0MzcwNDYsMjk2ODAxMTQ1MywzOTM2MjkxMjg0LDM4MzUwMzY4OTUsNDEzNjQ0MDc3MCw0MTY5NDA4MjAxLDM1MzU0ODY0NTYsMzcwMjY2NTQ1OSwzNDY3MTkyMzAyLDMyMzE3MjIyMTMsMjA1MTUxODc4MCwxOTUxMzE3MDQ3LDE3MTY4OTA0MTAsMTc1MDkwMjMwNSwxMTEzODE4Mzg0LDEyODIwNTAwNzUsMTU4NDUwNDU4MiwxMzUwMDc4OTg5LDE2ODgxMDg1Miw2NzU1NjQ2MywzNzEwNDkzMzAsNDA0MDE2NzYxLDg0MTczOTU5MiwxMDA4OTE4NTk1LDc3NTU1MDgxNCw1NDAwODA3MjUsMzk2OTU2MjM2OSwzODAxMzMyMjM0LDQwMzU0ODkwNDcsNDI2OTkwNzk5NiwzNTY5MjU1MjEzLDM2Njk0NjI1NjYsMzM2Njc1NDYxOSwzMzMyNzQwMTQ0LDI2MzEwNjU0MzMsMjQ2Mzg3OTc2MiwyMTYwMTE3MDcxLDIzOTU1ODg2NzYsMjc2NzY0NTU1NywyODY4ODk3NDA2LDMxMDIwMTE3NDcsMzA2OTA0OTk2MCwyMDIwMDg0OTcsMzM3NzgzNjIsMjcwMDQwNDg3LDUwNDQ1OTQzNiw4NzU0NTEyOTMsOTc1NjU4NjQ2LDY3NTAzOTYyNyw2NDEwMjUxNTIsMjA4NDcwNDIzMywxOTE3NTE4NTYyLDE2MTU4NjEyNDcsMTg1MTMzMjg1MiwxMTQ3NTUwNjYxLDEyNDg4MDI1MTAsMTQ4NDAwNTg0MywxNDUxMDQ0MDU2LDkzMzMwMTM3MCw5NjczMTE3MjksNzMzMTU2OTcyLDYzMjk1MzcwMywyNjAzODg5NTAsMjU5NjU5MTcsMzI4NjcxODA4LDQ5NjkwNjA1OSwxMjA2NDc3ODU4LDEyMzk0NDM3NTMsMTU0MzIwODUwMCwxNDQxOTUyNTc1LDIxNDQxNjE4MDYsMTkwODY5NDI3NywxNjc1NTc3ODgwLDE4NDI3NTk0NDMsMzYxMDM2OTIyNiwzNjQ0Mzc5NTg1LDM0MDgxMTk1MTYsMzMwNzkxNjI0Nyw0MDExMTkwNTAyLDM3NzY3Njc0NjksNDA3NzM4NDQzMiw0MjQ1NjE4NjgzLDI4MDk3NzExNTQsMjg0MjczNzA0OSwzMTQ0Mzk2NDIwLDMwNDMxNDA0OTUsMjY3MzcwNTE1MCwyNDM4MjM3NjIxLDIyMDMwMzIyMzIsMjM3MDIxMzc5NV0sYW09WzAsMTg1NDY5MTk3LDM3MDkzODM5NCw0ODc3MjU4NDcsNzQxODc2Nzg4LDY1Nzg2MTk0NSw5NzU0NTE2OTQsODI0ODUyMjU5LDE0ODM3NTM1NzYsMTQwMDc4MzIwNSwxMzE1NzIzODkwLDExNjQwNzE4MDcsMTk1MDkwMzM4OCwyMTM1MzE5ODg5LDE2NDk3MDQ1MTgsMTc2NzUzNjQ1OSwyOTY3NTA3MTUyLDMxNTI5NzYzNDksMjgwMTU2NjQxMCwyOTE4MzUzODYzLDI2MzE0NDc3ODAsMjU0NzQzMjkzNywyMzI4MTQzNjE0LDIxNzc1NDQxNzksMzkwMTgwNjc3NiwzODE4ODM2NDA1LDQyNzA2Mzk3NzgsNDExODk4NzY5NSwzMjk5NDA5MDM2LDM0ODM4MjU1MzcsMzUzNTA3MjkxOCwzNjUyOTA0ODU5LDIwNzc5NjUyNDMsMTg5MzAyMDM0MiwxODQxNzY4ODY1LDE3MjQ0NTcxMzIsMTQ3NDUwMjU0MywxNTU5MDQxNjY2LDExMDcyMzQxOTcsMTI1NzMwOTMzNiw1OTg0Mzg4NjcsNjgxOTMzNTM0LDkwMTIxMDU2OSwxMDUyMzM4MzcyLDI2MTMxNDUzNSw3NzQyMjMxNCw0Mjg4MTk5NjUsMzEwNDYzNzI4LDM0MDk2ODUzNTUsMzIyNDc0MDQ1NCwzNzEwMzY4MTEzLDM1OTMwNTYzODAsMzg3NTc3MDIwNywzOTYwMzA5MzMwLDQwNDUzODA5MzMsNDE5NTQ1NjA3MiwyNDcxMjI0MDY3LDI1NTQ3MTg3MzQsMjIzNzEzMzA4MSwyMzg4MjYwODg0LDMyMTIwMzU4OTUsMzAyODE0MzY3NCwyODQyNjc4NTczLDI3MjQzMjIzMzYsNDEzODU2MzE4MSw0MjU1MzUwNjI0LDM3Njk3MjE5NzUsMzk1NTE5MTE2MiwzNjY3MjE5MDMzLDM1MTY2MTk2MDQsMzQzMTU0Njk0NywzMzQ3NTMyMTEwLDI5MzM3MzQ5MTcsMjc4MjA4MjgyNCwzMDk5NjY3NDg3LDMwMTY2OTcxMDYsMjE5NjA1MjUyOSwyMzEzODg0NDc2LDI0OTkzNDg1MjMsMjY4Mzc2NTAzMCwxMTc5NTEwNDYxLDEyOTYyOTc5MDQsMTM0NzU0ODMyNywxNTMzMDE3NTE0LDE3ODYxMDI0MDksMTYzNTUwMjk4MCwyMDg3MzA5NDU5LDIwMDMyOTQ2MjIsNTA3MzU4OTMzLDM1NTcwNjg0MCwxMzY0Mjg3NTEsNTM0NTgzNzAsODM5MjI0MDMzLDk1NzA1NTk4MCw2MDU2NTczMzksNzkwMDczODQ2LDIzNzMzNDA2MzAsMjI1NjAyODg5MSwyNjA3NDM5ODIwLDI0MjI0OTQ5MTMsMjcwNjI3MDY5MCwyODU2MzQ1ODM5LDMwNzU2MzYyMTYsMzE2MDE3NTM0OSwzNTczOTQxNjk0LDM3MjUwNjk0OTEsMzI3MzI2NzEwOCwzMzU2NzYxNzY5LDQxODE1OTg2MDIsNDA2MzI0MjM3NSw0MDExOTk2MDQ4LDM4MjgxMDM4MzcsMTAzMzI5NzE1OCw5MTU5ODU0MTksNzMwNTE3Mjc2LDU0NTU3MjM2OSwyOTY2Nzk3MzAsNDQ2NzU0ODc5LDEyOTE2NjEyMCwyMTM3MDUyNTMsMTcwOTYxMDM1MCwxODYwNzM4MTQ3LDE5NDU3OTg1MTYsMjAyOTI5MzE3NywxMjM5MzMxMTYyLDExMjA5NzQ5MzUsMTYwNjU5MTI5NiwxNDIyNjk5MDg1LDQxNDgyOTI4MjYsNDIzMzA5NDYxNSwzNzgxMDMzNjY0LDM5MzEzNzE0NjksMzY4MjE5MTU5OCwzNDk3NTA5MzQ3LDM0NDYwMDQ0NjgsMzMyODk1NTM4NSwyOTM5MjY2MjI2LDI3NTU2MzY2NzEsMzEwNjc4MDg0MCwyOTg4Njg3MjY5LDIxOTg0MzgwMjIsMjI4MjE5NTMzOSwyNTAxMjE4OTcyLDI2NTI2MDk0MjUsMTIwMTc2NTM4NiwxMjg2NTY3MTc1LDEzNzEzNjg5NzYsMTUyMTcwNjc4MSwxODA1MjExNzEwLDE2MjA1Mjk0NTksMjEwNTg4NzI2OCwxOTg4ODM4MTg1LDUzMzgwNDEzMCwzNTAxNzQ1NzUsMTY0NDM5NjcyLDQ2MzQ2MTAxLDg3MDkxMjA4Niw5NTQ2Njk0MDMsNjM2ODEzOTAwLDc4ODIwNDM1MywyMzU4OTU3OTIxLDIyNzQ2ODA0MjgsMjU5MjUyMzY0MywyNDQxNjYxNTU4LDI2OTUwMzM2ODUsMjg4MDI0MDIxNiwzMDY1OTYyODMxLDMxODI0ODc2MTgsMzU3MjE0NTkyOSwzNzU2Mjk5NzgwLDMyNzA5Mzc4NzUsMzM4ODUwNzE2Niw0MTc0NTYwMDYxLDQwOTEzMjcwMjQsNDAwNjUyMTEyNywzODU0NjA2Mzc4LDEwMTQ2NDY3MDUsOTMwMzY5MjEyLDcxMTM0OTY3NSw1NjA0ODc1OTAsMjcyNzg2MzA5LDQ1Nzk5Mjg0MCwxMDY4NTI3NjcsMjIzMzc3NTU0LDE2NzgzODEwMTcsMTg2MjUzNDg2OCwxOTE0MDUyMDM1LDIwMzE2MjEzMjYsMTIxMTI0NzU5NywxMTI4MDE0NTYwLDE1ODAwODc3OTksMTQyODE3MzA1MCwzMjI4MzMxOSwxODI2MjExMTQsNDAxNjM5NTk3LDQ4NjQ0MTM3Niw3Njg5MTcxMjMsNjUxODY4MDQ2LDEwMDMwMDcxMjksODE4MzI0ODg0LDE1MDM0NDk4MjMsMTM4NTM1NjI0MiwxMzMzODM4MDIxLDExNTAyMDg0NTYsMTk3Mzc0NTM4NywyMTI1MTM1ODQ2LDE2NzMwNjE2MTcsMTc1NjgxODk0MCwyOTcwMzU2MzI3LDMxMjA2OTQxMjIsMjgwMjg0OTkxNywyODg3NjUxNjk2LDI2Mzc0NDI2NDMsMjUyMDM5MzU2NiwyMzM0NjY5ODk3LDIxNDk5ODc2NTIsMzkxNzIzNDcwMywzNzk5MTQxMTIyLDQyODQ1MDIwMzcsNDEwMDg3MjQ3MiwzMzA5NTk0MTcxLDM0NjA5ODQ2MzAsMzU0NTc4OTQ3MywzNjI5NTQ2Nzk2LDIwNTA0NjYwNjAsMTg5OTYwMzk2OSwxODE0ODAzMjIyLDE3MzA1MjU3MjMsMTQ0Mzg1NzcyMCwxNTYwMzgyNTE3LDEwNzUwMjU2OTgsMTI2MDIzMjIzOSw1NzUxMzgxNDgsNjkyNzA3NDMzLDg3ODQ0MzM5MCwxMDYyNTk3MjM1LDI0MzI1NjY1Niw5MTM0MTkxNyw0MDkxOTg0MTAsMzI1OTY1MzgzLDM0MDMxMDA2MzYsMzI1MjIzODU0NSwzNzA0MzAwNDg2LDM2MjAwMjI5ODcsMzg3NDQyODM5MiwzOTkwOTUzMTg5LDQwNDI0NTkxMjIsNDIyNzY2NTY2MywyNDYwNDQ5MjA0LDI1NzgwMTg0ODksMjIyNjg3NTMxMCwyNDExMDI5MTU1LDMxOTgxMTUyMDAsMzA0NjIwMDQ2MSwyODI3MTc3ODgyLDI3NDM5NDQ4NTVdLGltPVswLDIxODgyODI5Nyw0Mzc2NTY1OTQsMzg3NzgxMTQ3LDg3NTMxMzE4OCw5NTg4NzEwODUsNzc1NTYyMjk0LDU5MDQyNDYzOSwxNzUwNjI2Mzc2LDE2OTk5NzA2MjUsMTkxNzc0MjE3MCwyMTM1MjUzNTg3LDE1NTExMjQ1ODgsMTM2NzI5NTU4OSwxMTgwODQ5Mjc4LDEyNjUxOTU2MzksMzUwMTI1Mjc1MiwzNzIwMDgxMDQ5LDMzOTk5NDEyNTAsMzM1MDA2NTgwMywzODM1NDg0MzQwLDM5MTkwNDIyMzcsNDI3MDUwNzE3NCw0MDg1MzY5NTE5LDMxMDIyNDkxNzYsMzA1MTU5MzQyNSwyNzM0NTkxMTc4LDI5NTIxMDI1OTUsMjM2MTY5ODU1NiwyMTc3ODY5NTU3LDI1MzAzOTEyNzgsMjYxNDczNzYzOSwzMTQ1NDU2NDQzLDMwNjA4NDc5MjIsMjcwODMyNjE4NSwyODkyNDE3MzEyLDI0MDQ5MDE2NjMsMjE4NzEyODA4NiwyNTA0MTMwMzE3LDI1NTUwNDgxOTYsMzU0MjMzMDIyNywzNzI3MjA1NzU0LDMzNzU3NDA3NjksMzI5MjQ0NTAzMiwzODc2NTU3NjU1LDM5MjYxNzA5NzQsNDI0NjMxMDcyNSw0MDI3NzQ0NTg4LDE4MDg0ODExOTUsMTcyMzg3MjY3NCwxOTEwMzE5MDMzLDIwOTQ0MTAxNjAsMTYwODk3NTI0NywxMzkxMjAxNjcwLDExNzM0MzAxNzMsMTIyNDM0ODA1Miw1OTk4NDg2NywyNDQ4NjAzOTQsNDI4MTY5MjAxLDM0NDg3MzQ2NCw5MzUyOTM4OTUsOTg0OTA3MjE0LDc2NjA3ODkzMyw1NDc1MTI3OTYsMTg0NDg4MjgwNiwxNjI3MjM1MTk5LDIwMTEyMTQxODAsMjA2MjI3MDMxNywxNTA3NDk3Mjk4LDE0MjMwMjI5MzksMTEzNzQ3Nzk1MiwxMzIxNjk5MTQ1LDk1MzQ1OTgyLDE0NTA4NTIzOSw1MzIyMDE3NzIsMzEzNzczODYxLDgzMDY2MTkxNCwxMDE1NjcxNTcxLDczMTE4MzM2OCw2NDgwMTc2NjUsMzE3NTUwMTI4NiwyOTU3ODUzNjc5LDI4MDcwNTg5MzIsMjg1ODExNTA2OSwyMzA1NDU1NTU0LDIyMjA5ODExOTUsMjQ3NDQwNDMwNCwyNjU4NjI1NDk3LDM1NzU1Mjg4NzgsMzYyNTI2ODEzNSwzNDczNDE2NjM2LDMyNTQ5ODg3MjUsMzc3ODE1MTgxOCwzOTYzMTYxNDc1LDQyMTM0NDcwNjQsNDEzMDI4MTM2MSwzNTk5NTk1MDg1LDM2ODMwMjI5MTYsMzQzMjczNzM3NSwzMjQ3NDY1NTU4LDM4MDIyMjIxODUsNDAyMDkxMjIyNCw0MTcyNzYzNzcxLDQxMjI3NjIzNTQsMzIwMTYzMTc0OSwzMDE3NjcyNzE2LDI3NjQyNDk2MjMsMjg0ODQ2MTg1NCwyMzMxNTkwMTc3LDIyODA3OTYyMDAsMjQzMTU5MDk2MywyNjQ4OTc2NDQyLDEwNDY5OTYxMywxODgxMjc0NDQsNDcyNjE1NjMxLDI4NzM0MzgxNCw4NDAwMTk3MDUsMTA1ODcwOTc0NCw2NzE1OTMxOTUsNjIxNTkxNzc4LDE4NTIxNzE5MjUsMTY2ODIxMjg5MiwxOTUzNzU3ODMxLDIwMzc5NzAwNjIsMTUxNDc5MDU3NywxNDYzOTk2NjAwLDEwODAwMTc1NzEsMTI5NzQwMzA1MCwzNjczNjM3MzU2LDM2MjM2MzY5NjUsMzIzNTk5NTEzNCwzNDU0Njg2MTk5LDQwMDczNjA5NjgsMzgyMjA5MDE3Nyw0MTA3MTAxNjU4LDQxOTA1MzA1MTUsMjk5NzgyNTk1NiwzMjE1MjEyNDYxLDI4MzA3MDgxNTAsMjc3OTkxNTE5OSwyMjU2NzM0NTkyLDIzNDA5NDc4NDksMjYyNzAxNjA4MiwyNDQzMDU4MDc1LDE3MjQ2NjU1NiwxMjI0NjYxNjUsMjczNzkyMzY2LDQ5MjQ4MzQzMSwxMDQ3MjM5ZTMsODYxOTY4MjA5LDYxMjIwNTg5OCw2OTU2MzQ3NTUsMTY0NjI1MjM0MCwxODYzNjM4ODQ1LDIwMTM5MDgyNjIsMTk2MzExNTMxMSwxNDQ2MjQyNTc2LDE1MzA0NTU4MzMsMTI3NzU1NTk3MCwxMDkzNTk3OTYzLDE2MzY2MDQ2MzEsMTgyMDgyNDc5OCwyMDczNzI0NjEzLDE5ODkyNDkyMjgsMTQzNjU5MDgzNSwxNDg3NjQ1OTQ2LDEzMzczNzY0ODEsMTExOTcyNzg0OCwxNjQ5NDg2MzksODE3ODE5MTAsMzMxNTQ0MjA1LDUxNjU1MjgzNiwxMDM5NzE3MDUxLDgyMTI4ODExNCw2Njk5NjE4OTcsNzE5NzAwMTI4LDI5NzM1MzA2OTUsMzE1Nzc1MDg2MiwyODcxNjgyNjQ1LDI3ODcyMDcyNjAsMjIzMjQzNTI5OSwyMjgzNDkwNDEwLDI2Njc5OTQ3MzcsMjQ1MDM0NjEwNCwzNjQ3MjEyMDQ3LDM1NjQwNDUzMTgsMzI3OTAzMzg4NSwzNDY0MDQyNTE2LDM5ODA5MzE2MjcsMzc2MjUwMjY5MCw0MTUwMTQ0NTY5LDQxOTk4ODI4MDAsMzA3MDM1NjYzNCwzMTIxMjc1NTM5LDI5MDQwMjcyNzIsMjY4NjI1NDcyMSwyMjAwODE4ODc4LDIzODQ5MTEwMzEsMjU3MDgzMjA0NCwyNDg2MjI0NTQ5LDM3NDcxOTIwMTgsMzUyODYyNjkwNywzMzEwMzIxODU2LDMzNTk5MzYyMDEsMzk1MDM1NTcwMiwzODY3MDYwOTkxLDQwNDk4NDQ0NTIsNDIzNDcyMTAwNSwxNzM5NjU2MjAyLDE3OTA1NzUxMDcsMjEwODEwMDYzMiwxODkwMzI4MDgxLDE0MDI4MTE0MzgsMTU4NjkwMzU5MSwxMjMzODU2NTcyLDExNDkyNDkwNzcsMjY2OTU5OTM4LDQ4Mzk0ODI3LDM2OTA1Nzg3Miw0MTg2NzIyMTcsMTAwMjc4Mzg0Niw5MTk0ODkxMzUsNTY3NDk4ODY4LDc1MjM3NTQyMSwyMDkzMzYyMjUsMjQxOTc1NDQsMzc2MTg3ODI3LDQ1OTc0NDY5OCw5NDUxNjQxNjUsODk1Mjg3NjkyLDU3NDYyNDY2Myw3OTM0NTE5MzQsMTY3OTk2ODIzMywxNzY0MzEzNTY4LDIxMTczNjA2MzUsMTkzMzUzMDYxMCwxMzQzMTI3NTAxLDE1NjA2Mzc4OTIsMTI0MzExMjQxNSwxMTkyNDU1NjM4LDM3MDQyODA4ODEsMzUxOTE0MjIwMCwzMzM2MzU4NjkxLDM0MTk5MTU1NjIsMzkwNzQ0ODU5NywzODU3NTcyMTI0LDQwNzU4NzcxMjcsNDI5NDcwNDM5OCwzMDI5NTEwMDA5LDMxMTM4NTUzNDQsMjkyNzkzNDMxNSwyNzQ0MTA0MjkwLDIxNTk5NzYyODUsMjM3NzQ4NjY3NiwyNTk0NzM0OTI3LDI1NDQwNzgxNTBdLGNtPVswLDE1MTg0OTc0MiwzMDM2OTk0ODQsNDU0NDk5NjAyLDYwNzM5ODk2OCw3NTg3MjAzMTAsOTA4OTk5MjA0LDEwNTkyNzA5NTQsMTIxNDc5NzkzNiwxMDk3MTU5NTUwLDE1MTc0NDA2MjAsMTQwMDg0OTc2MiwxODE3OTk4NDA4LDE2OTk4Mzk4MTQsMjExODU0MTkwOCwyMDAxNDMwODc0LDI0Mjk1OTU4NzIsMjU4MTQ0NTYxNCwyMTk0MzE5MTAwLDIzNDUxMTkyMTgsMzAzNDg4MTI0MCwzMTg2MjAyNTgyLDI4MDE2OTk1MjQsMjk1MTk3MTI3NCwzNjM1OTk2ODE2LDM1MTgzNTg0MzAsMzM5OTY3OTYyOCwzMjgzMDg4NzcwLDQyMzcwODM4MTYsNDExODkyNTIyMiw0MDAyODYxNzQ4LDM4ODU3NTA3MTQsMTAwMjE0MjY4Myw4NTA4MTcyMzcsNjk4NDQ1MjU1LDU0ODE2OTQxNyw1Mjk0ODc4NDMsMzc3NjQyMjIxLDIyNzg4NTU2Nyw3NzA4OTUyMSwxOTQzMjE3MDY3LDIwNjEzNzk3NDksMTY0MDU3NjQzOSwxNzU3NjkxNTc3LDE0NzQ3NjA1OTUsMTU5MjM5NDkwOSwxMTc0MjE1MDU1LDEyOTA4MDE3OTMsMjg3NTk2ODMxNSwyNzI0NjQyODY5LDMxMTEyNDcxNDMsMjk2MDk3MTMwNSwyNDA1NDI2OTQ3LDIyNTM1ODEzMjUsMjYzODYwNjYyMywyNDg3ODEwNTc3LDM4MDg2NjIzNDcsMzkyNjgyNTAyOSw0MDQ0OTgxNTkxLDQxNjIwOTY3MjksMzM0MjMxOTQ3NSwzNDU5OTUzNzg5LDM1NzY1Mzk1MDMsMzY5MzEyNjI0MSwxOTg2OTE4MDYxLDIxMzcwNjI4MTksMTY4NTU3NzkwNSwxODM2NzcyMjg3LDEzODE2MjAzNzMsMTUzMjI4NTMzOSwxMDc4MTg1MDk3LDEyMjk4OTk2NTUsMTA0MDU1OTgzNyw5MjMzMTM2MTksNzQwMjc2NDE3LDYyMTk4MjY3MSw0Mzk0NTIzODksMzIyNzM0NTcxLDEzNzA3MzkxMywxOTMwODUzNSwzODcxMTYzOTgxLDQwMjEzMDg3MzksNDEwNDYwNTc3Nyw0MjU1ODAwMTU5LDMyNjM3ODU1ODksMzQxNDQ1MDU1NSwzNDk5MzI2NTY5LDM2NTEwNDExMjcsMjkzMzIwMjQ5MywyODE1OTU2Mjc1LDMxNjc2ODQ2NDEsMzA0OTM5MDg5NSwyMzMwMDE0MjEzLDIyMTMyOTYzOTUsMjU2NjU5NTYwOSwyNDQ4ODMwMjMxLDEzMDU5MDY1NTAsMTE1NTIzNzQ5NiwxNjA3MjQ0NjUwLDE0NTU1MjU5ODgsMTc3NjQ2MDExMCwxNjI2MzE5NDI0LDIwNzk4OTc0MjYsMTkyODcwNzE2NCw5NjM5MjQ1NCwyMTMxMTQzNzYsMzk2NjczODE4LDUxNDQ0MzI4NCw1NjI3NTU5MDIsNjc5OTk4ZTMsODY1MTM2NDE4LDk4MzQyNjA5MiwzNzA4MTczNzE4LDM1NTc1MDQ2NjQsMzQ3NDcyOTg2NiwzMzIzMDExMjA0LDQxODA4MDgxMTAsNDAzMDY2NzQyNCwzOTQ1MjY5MTcwLDM3OTQwNzg5MDgsMjUwNzA0MDIzMCwyNjIzNzYyMTUyLDIyNzI1NTYwMjYsMjM5MDMyNTQ5MiwyOTc1NDg0MzgyLDMwOTI3MjY0ODAsMjczODkwNTAyNiwyODU3MTk0NzAwLDM5NzM3NzMxMjEsMzg1NjEzNzI5NSw0Mjc0MDUzNDY5LDQxNTc0NjcyMTksMzM3MTA5Njk1MywzMjUyOTMyNzI3LDM2NzM0NzY0NTMsMzU1NjM2MTgzNSwyNzYzMTczNjgxLDI5MTUwMTc3OTEsMzA2NDUxMDc2NSwzMjE1MzA3Mjk5LDIxNTYyOTkwMTcsMjMwNzYyMjkxOSwyNDU5NzM1MzE3LDI2MTAwMTE2NzUsMjA4MTA0ODQ4MSwxOTYzNDEyNjU1LDE4NDY1NjMyNjEsMTcyOTk3NzAxMSwxNDgwNDg1Nzg1LDEzNjIzMjE1NTksMTI0MzkwNTQxMywxMTI2NzkwNzk1LDg3ODg0NTkwNSwxMDMwNjkwMDE1LDY0NTQwMTAzNyw3OTYxOTc1NzEsMjc0MDg0ODQxLDQyNTQwODc0MywzODU0NDg4NSwxODg4MjEyNDMsMzYxMzQ5NDQyNiwzNzMxNjU0NTQ4LDMzMTMyMTIwMzgsMzQzMDMyMjU2OCw0MDgyNDc1MTcwLDQyMDAxMTUxMTYsMzc4MDA5NzcyNiwzODk2Njg4MDQ4LDI2NjgyMjE2NzQsMjUxNjkwMTg2MCwyMzY2ODgyNTUwLDIyMTY2MTAyOTYsMzE0MTQwMDc4NiwyOTg5NTUyNjA0LDI4Mzc5NjY1NDIsMjY4NzE2NTg4OCwxMjAyNzk3NjkwLDEzMjA5NTc4MTIsMTQzNzI4MDg3MCwxNTU0MzkxNDAwLDE2Njk2NjQ4MzQsMTc4NzMwNDc4MCwxOTA2MjQ3MjYyLDIwMjI4Mzc1ODQsMjY1OTA1MTYyLDExNDU4NTM0OCw0OTkzNDc5OTAsMzQ5MDc1NzM2LDczNjk3MDgwMiw1ODUxMjI2MjAsOTcyNTEyODE0LDgyMTcxMjE2MCwyNTk1Njg0ODQ0LDI0Nzg0NDMyMzQsMjI5MzA0NTIzMiwyMTc0NzU0MDQ2LDMxOTYyNjc5ODgsMzA3OTU0NjU4NiwyODk1NzIzNDY0LDI3Nzc5NTI0NTQsMzUzNzg1MjgyOCwzNjg3OTk0MDAyLDMyMzQxNTY0MTYsMzM4NTM0NTE2Niw0MTQyNjI2MjEyLDQyOTMyOTU3ODYsMzg0MTAyNDk1MiwzOTkyNzQyMDcwLDE3NDU2NzY5Miw1NzMyNjA4Miw0MTA4ODc5NTIsMjkyNTk2NzY2LDc3NzIzMTY2OCw2NjA1MTAyNjYsMTAxMTQ1MjcxMiw4OTM2ODE3MDIsMTEwODMzOTA2OCwxMjU4NDgwMjQyLDEzNDM2MTg5MTIsMTQ5NDgwNzY2MiwxNzE1MTkzMTU2LDE4NjU4NjI3MzAsMTk0ODM3Mzg0OCwyMTAwMDkwOTY2LDI3MDE5NDk0OTUsMjgxODY2NjgwOSwzMDA0NTkxMTQ3LDMxMjIzNTgwNTMsMjIzNTA2MTc3NSwyMzUyMzA3NDU3LDI1MzU2MDQyNDMsMjY1Mzg5OTU0OSwzOTE1NjUzNzAzLDM3NjQ5ODgyMzMsNDIxOTM1MjE1NSw0MDY3NjM5MTI1LDM0NDQ1NzU4NzEsMzI5NDQzMDU3NywzNzQ2MTc1MDc1LDM1OTQ5ODIyNTMsODM2NTUzNDMxLDk1MzI3MDc0NSw2MDAyMzUyMTEsNzE4MDAyMTE3LDM2NzU4NTAwNyw0ODQ4MzA2ODksMTMzMzYxOTA3LDI1MTY1NzIxMywyMDQxODc3MTU5LDE4OTEyMTE2ODksMTgwNjU5OTM1NSwxNjU0ODg2MzI1LDE1Njg3MTg0OTUsMTQxODU3MzIwMSwxMzM1NTM1NzQ3LDExODQzNDI5MjVdO2Z1bmN0aW9uIHB1KG4pe2NvbnN0IGU9W107Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0Kz00KWUucHVzaChuW3RdPDwyNHxuW3QrMV08PDE2fG5bdCsyXTw8OHxuW3QrM10pO3JldHVybiBlfWNsYXNzIGpke2dldCBrZXkoKXtyZXR1cm4gdnQodGhpcyxKaSwiZiIpLnNsaWNlKCl9Y29uc3RydWN0b3IoZSl7aWYoSmkuc2V0KHRoaXMsdm9pZCAwKSxFci5zZXQodGhpcyx2b2lkIDApLHJuLnNldCh0aGlzLHZvaWQgMCksISh0aGlzIGluc3RhbmNlb2YgamQpKXRocm93IEVycm9yKCJBRVMgbXVzdCBiZSBpbnN0YW5pdGF0ZWQgd2l0aCBgbmV3YCIpO2R1KHRoaXMsSmksbmV3IFVpbnQ4QXJyYXkoZSksImYiKTtjb25zdCB0PXFBW3RoaXMua2V5Lmxlbmd0aF07aWYodD09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtleSBzaXplIChtdXN0IGJlIDE2LCAyNCBvciAzMiBieXRlcykiKTtkdSh0aGlzLHJuLFtdLCJmIiksZHUodGhpcyxFcixbXSwiZiIpO2ZvcihsZXQgZD0wO2Q8PXQ7ZCsrKXZ0KHRoaXMscm4sImYiKS5wdXNoKFswLDAsMCwwXSksdnQodGhpcyxFciwiZiIpLnB1c2goWzAsMCwwLDBdKTtjb25zdCBhPSh0KzEpKjQscz10aGlzLmtleS5sZW5ndGgvNCxyPXB1KHRoaXMua2V5KTtsZXQgbztmb3IobGV0IGQ9MDtkPHM7ZCsrKW89ZD4+Mix2dCh0aGlzLHJuLCJmIilbb11bZCU0XT1yW2RdLHZ0KHRoaXMsRXIsImYiKVt0LW9dW2QlNF09cltkXTtsZXQgaT0wLGM9cyxmO2Zvcig7YzxhOyl7aWYoZj1yW3MtMV0sclswXV49UHJbZj4+MTYmMjU1XTw8MjReUHJbZj4+OCYyNTVdPDwxNl5QcltmJjI1NV08PDheUHJbZj4+MjQmMjU1XV5KQVtpXTw8MjQsaSs9MSxzIT04KWZvcihsZXQgVD0xO1Q8cztUKyspcltUXV49cltULTFdO2Vsc2V7Zm9yKGxldCBUPTE7VDxzLzI7VCsrKXJbVF1ePXJbVC0xXTtmPXJbcy8yLTFdLHJbcy8yXV49UHJbZiYyNTVdXlByW2Y+PjgmMjU1XTw8OF5QcltmPj4xNiYyNTVdPDwxNl5QcltmPj4yNCYyNTVdPDwyNDtmb3IobGV0IFQ9cy8yKzE7VDxzO1QrKylyW1RdXj1yW1QtMV19bGV0IGQ9MCxwLGI7Zm9yKDtkPHMmJmM8YTspcD1jPj4yLGI9YyU0LHZ0KHRoaXMscm4sImYiKVtwXVtiXT1yW2RdLHZ0KHRoaXMsRXIsImYiKVt0LXBdW2JdPXJbZCsrXSxjKyt9Zm9yKGxldCBkPTE7ZDx0O2QrKylmb3IobGV0IHA9MDtwPDQ7cCsrKWY9dnQodGhpcyxFciwiZiIpW2RdW3BdLHZ0KHRoaXMsRXIsImYiKVtkXVtwXT1zbVtmPj4yNCYyNTVdXmFtW2Y+PjE2JjI1NV1eaW1bZj4+OCYyNTVdXmNtW2YmMjU1XX1lbmNyeXB0KGUpe2lmKGUubGVuZ3RoIT0xNil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHBsYWludGV4dCBzaXplIChtdXN0IGJlIDE2IGJ5dGVzKSIpO2NvbnN0IHQ9dnQodGhpcyxybiwiZiIpLmxlbmd0aC0xLGE9WzAsMCwwLDBdO2xldCBzPXB1KGUpO2ZvcihsZXQgaT0wO2k8NDtpKyspc1tpXV49dnQodGhpcyxybiwiZiIpWzBdW2ldO2ZvcihsZXQgaT0xO2k8dDtpKyspe2ZvcihsZXQgYz0wO2M8NDtjKyspYVtjXT1ZQVtzW2NdPj4yNCYyNTVdXlhBW3NbKGMrMSklNF0+PjE2JjI1NV1eUUFbc1soYysyKSU0XT4+OCYyNTVdXmVtW3NbKGMrMyklNF0mMjU1XV52dCh0aGlzLHJuLCJmIilbaV1bY107cz1hLnNsaWNlKCl9Y29uc3Qgcj1uZXcgVWludDhBcnJheSgxNik7bGV0IG89MDtmb3IobGV0IGk9MDtpPDQ7aSsrKW89dnQodGhpcyxybiwiZiIpW3RdW2ldLHJbNCppXT0oUHJbc1tpXT4+MjQmMjU1XV5vPj4yNCkmMjU1LHJbNCppKzFdPShQcltzWyhpKzEpJTRdPj4xNiYyNTVdXm8+PjE2KSYyNTUscls0KmkrMl09KFByW3NbKGkrMiklNF0+PjgmMjU1XV5vPj44KSYyNTUscls0KmkrM109KFByW3NbKGkrMyklNF0mMjU1XV5vKSYyNTU7cmV0dXJuIHJ9ZGVjcnlwdChlKXtpZihlLmxlbmd0aCE9MTYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBjaXBoZXJ0ZXh0IHNpemUgKG11c3QgYmUgMTYgYnl0ZXMpIik7Y29uc3QgdD12dCh0aGlzLEVyLCJmIikubGVuZ3RoLTEsYT1bMCwwLDAsMF07bGV0IHM9cHUoZSk7Zm9yKGxldCBpPTA7aTw0O2krKylzW2ldXj12dCh0aGlzLEVyLCJmIilbMF1baV07Zm9yKGxldCBpPTE7aTx0O2krKyl7Zm9yKGxldCBjPTA7Yzw0O2MrKylhW2NdPXRtW3NbY10+PjI0JjI1NV1ecm1bc1soYyszKSU0XT4+MTYmMjU1XV5ubVtzWyhjKzIpJTRdPj44JjI1NV1eb21bc1soYysxKSU0XSYyNTVdXnZ0KHRoaXMsRXIsImYiKVtpXVtjXTtzPWEuc2xpY2UoKX1jb25zdCByPW5ldyBVaW50OEFycmF5KDE2KTtsZXQgbz0wO2ZvcihsZXQgaT0wO2k8NDtpKyspbz12dCh0aGlzLEVyLCJmIilbdF1baV0scls0KmldPShfaVtzW2ldPj4yNCYyNTVdXm8+PjI0KSYyNTUscls0KmkrMV09KF9pW3NbKGkrMyklNF0+PjE2JjI1NV1ebz4+MTYpJjI1NSxyWzQqaSsyXT0oX2lbc1soaSsyKSU0XT4+OCYyNTVdXm8+PjgpJjI1NSxyWzQqaSszXT0oX2lbc1soaSsxKSU0XSYyNTVdXm8pJjI1NTtyZXR1cm4gcn19Smk9bmV3IFdlYWtNYXAsRXI9bmV3IFdlYWtNYXAscm49bmV3IFdlYWtNYXA7Y2xhc3MgdW17Y29uc3RydWN0b3IoZSx0LGEpe2lmKGEmJiEodGhpcyBpbnN0YW5jZW9mIGEpKXRocm93IG5ldyBFcnJvcihgJHtlfSBtdXN0IGJlIGluc3RhbnRpYXRlZCB3aXRoICJuZXciYCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7YWVzOntlbnVtZXJhYmxlOiEwLHZhbHVlOm5ldyBqZCh0KX0sbmFtZTp7ZW51bWVyYWJsZTohMCx2YWx1ZTplfX0pfX12YXIgWW89ZnVuY3Rpb24obixlLHQsYSxzKXtpZihhPT09Im0iKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZSIpO2lmKGE9PT0iYSImJiFzKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlciIpO2lmKHR5cGVvZiBlPT0iZnVuY3Rpb24iP24hPT1lfHwhczohZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXQiKTtyZXR1cm4gYT09PSJhIj9zLmNhbGwobix0KTpzP3MudmFsdWU9dDplLnNldChuLHQpLHR9LHdyPWZ1bmN0aW9uKG4sZSx0LGEpe2lmKHQ9PT0iYSImJiFhKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlciIpO2lmKHR5cGVvZiBlPT0iZnVuY3Rpb24iP24hPT1lfHwhYTohZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7cmV0dXJuIHQ9PT0ibSI/YTp0PT09ImEiP2EuY2FsbChuKTphP2EudmFsdWU6ZS5nZXQobil9LFRhLGZvLFdyO2NsYXNzIHVjIGV4dGVuZHMgdW17Y29uc3RydWN0b3IoZSx0KXtzdXBlcigiQ1RSIixlLHVjKSxUYS5zZXQodGhpcyx2b2lkIDApLGZvLnNldCh0aGlzLHZvaWQgMCksV3Iuc2V0KHRoaXMsdm9pZCAwKSxZbyh0aGlzLFdyLG5ldyBVaW50OEFycmF5KDE2KSwiZiIpLHdyKHRoaXMsV3IsImYiKS5maWxsKDApLFlvKHRoaXMsVGEsd3IodGhpcyxXciwiZiIpLCJmIiksWW8odGhpcyxmbywxNiwiZiIpLHQ9PW51bGwmJih0PTEpLHR5cGVvZiB0PT0ibnVtYmVyIj90aGlzLnNldENvdW50ZXJWYWx1ZSh0KTp0aGlzLnNldENvdW50ZXJCeXRlcyh0KX1nZXQgY291bnRlcigpe3JldHVybiBuZXcgVWludDhBcnJheSh3cih0aGlzLFdyLCJmIikpfXNldENvdW50ZXJWYWx1ZShlKXtpZighTnVtYmVyLmlzSW50ZWdlcihlKXx8ZTwwfHxlPk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgY291bnRlciBpbml0aWFsIGludGVnZXIgdmFsdWUiKTtmb3IobGV0IHQ9MTU7dD49MDstLXQpd3IodGhpcyxXciwiZiIpW3RdPWUlMjU2LGU9TWF0aC5mbG9vcihlLzI1Nil9c2V0Q291bnRlckJ5dGVzKGUpe2lmKGUubGVuZ3RoIT09MTYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBjb3VudGVyIGluaXRpYWwgVWludDhBcnJheSB2YWx1ZSBsZW5ndGgiKTt3cih0aGlzLFdyLCJmIikuc2V0KGUpfWluY3JlbWVudCgpe2ZvcihsZXQgZT0xNTtlPj0wO2UtLSlpZih3cih0aGlzLFdyLCJmIilbZV09PT0yNTUpd3IodGhpcyxXciwiZiIpW2VdPTA7ZWxzZXt3cih0aGlzLFdyLCJmIilbZV0rKzticmVha319ZW5jcnlwdChlKXt2YXIgdCxhO2NvbnN0IHM9bmV3IFVpbnQ4QXJyYXkoZSk7Zm9yKGxldCByPTA7cjxzLmxlbmd0aDtyKyspd3IodGhpcyxmbywiZiIpPT09MTYmJihZbyh0aGlzLFRhLHRoaXMuYWVzLmVuY3J5cHQod3IodGhpcyxXciwiZiIpKSwiZiIpLFlvKHRoaXMsZm8sMCwiZiIpLHRoaXMuaW5jcmVtZW50KCkpLHNbcl1ePXdyKHRoaXMsVGEsImYiKVtZbyh0aGlzLGZvLChhPXdyKHRoaXMsZm8sImYiKSx0PWErKyxhKSwiZiIpLHRdO3JldHVybiBzfWRlY3J5cHQoZSl7cmV0dXJuIHRoaXMuZW5jcnlwdChlKX19VGE9bmV3IFdlYWtNYXAsZm89bmV3IFdlYWtNYXAsV3I9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gZ2EobixlKXtmb3Iobj1TdHJpbmcobik7bi5sZW5ndGg8ZTspbj0iMCIrbjtyZXR1cm4gbn1mdW5jdGlvbiBSYihuKXtyZXR1cm4gdHlwZW9mIG49PSJzdHJpbmciP3JyKG4sIk5GS0MiKTpGdChuKX1jb25zdCBsbT0ibS80NCcvNjAnLzAnLzAvMCI7ZnVuY3Rpb24gTWIobil7Y29uc3QgZT1uLnNhbHQhPW51bGw/QWUobi5zYWx0LCJvcHRpb25zLnNhbHQiKTpTbigzMik7bGV0IHQ9MTw8MTcsYT04LHM9MTtyZXR1cm4gbi5zY3J5cHQmJihuLnNjcnlwdC5OJiYodD1uLnNjcnlwdC5OKSxuLnNjcnlwdC5yJiYoYT1uLnNjcnlwdC5yKSxuLnNjcnlwdC5wJiYocz1uLnNjcnlwdC5wKSksRyh0eXBlb2YgdD09Im51bWJlciImJnQ+MCYmTnVtYmVyLmlzU2FmZUludGVnZXIodCkmJihCaWdJbnQodCkmQmlnSW50KHQtMSkpPT09QmlnSW50KDApLCJpbnZhbGlkIHNjcnlwdCBOIHBhcmFtZXRlciIsIm9wdGlvbnMuTiIsdCksRyh0eXBlb2YgYT09Im51bWJlciImJmE+MCYmTnVtYmVyLmlzU2FmZUludGVnZXIoYSksImludmFsaWQgc2NyeXB0IHIgcGFyYW1ldGVyIiwib3B0aW9ucy5yIixhKSxHKHR5cGVvZiBzPT0ibnVtYmVyIiYmcz4wJiZOdW1iZXIuaXNTYWZlSW50ZWdlcihzKSwiaW52YWxpZCBzY3J5cHQgcCBwYXJhbWV0ZXIiLCJvcHRpb25zLnAiLHMpLHtuYW1lOiJzY3J5cHQiLGRrTGVuOjMyLHNhbHQ6ZSxOOnQscjphLHA6c319ZnVuY3Rpb24gRmIobixlLHQsYSl7Y29uc3Qgcz1BZSh0LnByaXZhdGVLZXksInByaXZhdGVLZXkiKSxyPWEuaXYhPW51bGw/QWUoYS5pdiwib3B0aW9ucy5pdiIpOlNuKDE2KTtHKHIubGVuZ3RoPT09MTYsImludmFsaWQgb3B0aW9ucy5pdiBsZW5ndGgiLCJvcHRpb25zLml2IixhLml2KTtjb25zdCBvPWEudXVpZCE9bnVsbD9BZShhLnV1aWQsIm9wdGlvbnMudXVpZCIpOlNuKDE2KTtHKG8ubGVuZ3RoPT09MTYsImludmFsaWQgb3B0aW9ucy51dWlkIGxlbmd0aCIsIm9wdGlvbnMudXVpZCIsYS5pdik7Y29uc3QgaT1uLnNsaWNlKDAsMTYpLGM9bi5zbGljZSgxNiwzMiksZj1uZXcgdWMoaSxyKSxkPUFlKGYuZW5jcnlwdChzKSkscD0kZShldChbYyxkXSkpLGI9e2FkZHJlc3M6dC5hZGRyZXNzLnN1YnN0cmluZygyKS50b0xvd2VyQ2FzZSgpLGlkOnUxKG8pLHZlcnNpb246MyxDcnlwdG86e2NpcGhlcjoiYWVzLTEyOC1jdHIiLGNpcGhlcnBhcmFtczp7aXY6eWUocikuc3Vic3RyaW5nKDIpfSxjaXBoZXJ0ZXh0OnllKGQpLnN1YnN0cmluZygyKSxrZGY6InNjcnlwdCIsa2RmcGFyYW1zOntzYWx0OnllKGUuc2FsdCkuc3Vic3RyaW5nKDIpLG46ZS5OLGRrbGVuOjMyLHA6ZS5wLHI6ZS5yfSxtYWM6cC5zdWJzdHJpbmcoMil9fTtpZih0Lm1uZW1vbmljKXtjb25zdCBUPWEuY2xpZW50IT1udWxsP2EuY2xpZW50OmBldGhlcnMvJHtzZ31gLFc9dC5tbmVtb25pYy5wYXRofHxsbSxnPXQubW5lbW9uaWMubG9jYWxlfHwiZW4iLEE9bi5zbGljZSgzMiw2NCksbT1BZSh0Lm1uZW1vbmljLmVudHJvcHksImFjY291bnQubW5lbW9uaWMuZW50cm9weSIpLHc9U24oMTYpLEI9bmV3IHVjKEEsdyksaz1BZShCLmVuY3J5cHQobSkpLFY9bmV3IERhdGUsST0iVVRDLS0iKyhWLmdldFVUQ0Z1bGxZZWFyKCkrIi0iK2dhKFYuZ2V0VVRDTW9udGgoKSsxLDIpKyItIitnYShWLmdldFVUQ0RhdGUoKSwyKSsiVCIrZ2EoVi5nZXRVVENIb3VycygpLDIpKyItIitnYShWLmdldFVUQ01pbnV0ZXMoKSwyKSsiLSIrZ2EoVi5nZXRVVENTZWNvbmRzKCksMikrIi4wWiIpKyItLSIrYi5hZGRyZXNzO2JbIngtZXRoZXJzIl09e2NsaWVudDpULGdldGhGaWxlbmFtZTpJLHBhdGg6Vyxsb2NhbGU6ZyxtbmVtb25pY0NvdW50ZXI6eWUodykuc3Vic3RyaW5nKDIpLG1uZW1vbmljQ2lwaGVydGV4dDp5ZShrKS5zdWJzdHJpbmcoMiksdmVyc2lvbjoiMC4xIn19cmV0dXJuIEpTT04uc3RyaW5naWZ5KGIpfWZ1bmN0aW9uIGZtKG4sZSx0KXt0PT1udWxsJiYodD17fSk7Y29uc3QgYT1SYihlKSxzPU1iKHQpLHI9emEoYSxzLnNhbHQscy5OLHMucixzLnAsNjQpO3JldHVybiBGYihBZShyKSxzLG4sdCl9YXN5bmMgZnVuY3Rpb24gZG0obixlLHQpe3Q9PW51bGwmJih0PXt9KTtjb25zdCBhPVJiKGUpLHM9TWIodCkscj1hd2FpdCBMYShhLHMuc2FsdCxzLk4scy5yLHMucCw2NCx0LnByb2dyZXNzQ2FsbGJhY2spO3JldHVybiBGYihBZShyKSxzLG4sdCl9Y29uc3QgaHU9Im0vNDQnLzYwJy8wJy8wLzAiLHBtPW5ldyBVaW50OEFycmF5KFs2NiwxMDUsMTE2LDk5LDExMSwxMDUsMTEwLDMyLDExNSwxMDEsMTAxLDEwMF0pLHFuPTIxNDc0ODM2NDgsaG09QmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYmFhZWRjZTZhZjQ4YTAzYmJmZDI1ZThjZDAzNjQxNDEiKSxnbT0iMDEyMzQ1Njc4OWFiY2RlZiI7ZnVuY3Rpb24gbGMobixlKXtsZXQgdD0iIjtmb3IoO247KXQ9Z21bbiUxNl0rdCxuPU1hdGgudHJ1bmMobi8xNik7Zm9yKDt0Lmxlbmd0aDxlKjI7KXQ9IjAiK3Q7cmV0dXJuIjB4Iit0fWZ1bmN0aW9uIGNsKG4pe2NvbnN0IGU9QWUobiksdD1BbihVdChVdChlKSksMCw0KSxhPWV0KFtlLHRdKTtyZXR1cm4gdDEoYSl9Y29uc3Qgc249e307ZnVuY3Rpb24gTmIobixlLHQsYSl7Y29uc3Qgcz1uZXcgVWludDhBcnJheSgzNyk7biZxbj8oUmUoYSE9bnVsbCwiY2Fubm90IGRlcml2ZSBjaGlsZCBvZiBuZXV0ZXJlZCBub2RlIiwiVU5TVVBQT1JURURfT1BFUkFUSU9OIix7b3BlcmF0aW9uOiJkZXJpdmVDaGlsZCJ9KSxzLnNldChBZShhKSwxKSk6cy5zZXQoQWUodCkpO2ZvcihsZXQgbz0yNDtvPj0wO28tPTgpc1szMysobz4+MyldPW4+PjI0LW8mMjU1O2NvbnN0IHI9QWUoWW4oInNoYTUxMiIsZSxzKSk7cmV0dXJue0lMOnIuc2xpY2UoMCwzMiksSVI6ci5zbGljZSgzMil9fWZ1bmN0aW9uIGtiKG4sZSl7Y29uc3QgdD1lLnNwbGl0KCIvIik7Ryh0Lmxlbmd0aD4wLCJpbnZhbGlkIHBhdGgiLCJwYXRoIixlKSx0WzBdPT09Im0iJiYoRyhuLmRlcHRoPT09MCxgY2Fubm90IGRlcml2ZSByb290IHBhdGggKGkuZS4gcGF0aCBzdGFydGluZyB3aXRoICJtLyIpIGZvciBhIG5vZGUgYXQgbm9uLXplcm8gZGVwdGggJHtuLmRlcHRofWAsInBhdGgiLGUpLHQuc2hpZnQoKSk7bGV0IGE9bjtmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrKyl7Y29uc3Qgcj10W3NdO2lmKHIubWF0Y2goL15bMC05XSsnJC8pKXtjb25zdCBvPXBhcnNlSW50KHIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMSkpO0cobzxxbiwiaW52YWxpZCBwYXRoIGluZGV4IixgcGF0aFske3N9XWAsciksYT1hLmRlcml2ZUNoaWxkKHFuK28pfWVsc2UgaWYoci5tYXRjaCgvXlswLTldKyQvKSl7Y29uc3Qgbz1wYXJzZUludChyKTtHKG88cW4sImludmFsaWQgcGF0aCBpbmRleCIsYHBhdGhbJHtzfV1gLHIpLGE9YS5kZXJpdmVDaGlsZChvKX1lbHNlIEcoITEsImludmFsaWQgcGF0aCBjb21wb25lbnQiLGBwYXRoWyR7c31dYCxyKX1yZXR1cm4gYX12YXIgVWEsdWwsV28sQWE7Y29uc3QgJHI9Y2xhc3MgJHIgZXh0ZW5kcyBhbHtjb25zdHJ1Y3Rvcih0LGEscyxyLG8saSxjLGYsZCl7c3VwZXIoYSxkKTtQZSh0aGlzLFVhKTtaKHRoaXMsInB1YmxpY0tleSIpO1oodGhpcywiZmluZ2VycHJpbnQiKTtaKHRoaXMsInBhcmVudEZpbmdlcnByaW50Iik7Wih0aGlzLCJtbmVtb25pYyIpO1oodGhpcywiY2hhaW5Db2RlIik7Wih0aGlzLCJwYXRoIik7Wih0aGlzLCJpbmRleCIpO1oodGhpcywiZGVwdGgiKTt0byh0LHNuLCJIRE5vZGVXYWxsZXQiKSx6ZSh0aGlzLHtwdWJsaWNLZXk6YS5jb21wcmVzc2VkUHVibGljS2V5fSk7Y29uc3QgcD1BbihLcyhVdCh0aGlzLnB1YmxpY0tleSkpLDAsNCk7emUodGhpcyx7cGFyZW50RmluZ2VycHJpbnQ6cyxmaW5nZXJwcmludDpwLGNoYWluQ29kZTpyLHBhdGg6byxpbmRleDppLGRlcHRoOmN9KSx6ZSh0aGlzLHttbmVtb25pYzpmfSl9Y29ubmVjdCh0KXtyZXR1cm4gbmV3ICRyKHNuLHRoaXMuc2lnbmluZ0tleSx0aGlzLnBhcmVudEZpbmdlcnByaW50LHRoaXMuY2hhaW5Db2RlLHRoaXMucGF0aCx0aGlzLmluZGV4LHRoaXMuZGVwdGgsdGhpcy5tbmVtb25pYyx0KX1hc3luYyBlbmNyeXB0KHQsYSl7cmV0dXJuIGF3YWl0IGRtKEZlKHRoaXMsVWEsdWwpLmNhbGwodGhpcyksdCx7cHJvZ3Jlc3NDYWxsYmFjazphfSl9ZW5jcnlwdFN5bmModCl7cmV0dXJuIGZtKEZlKHRoaXMsVWEsdWwpLmNhbGwodGhpcyksdCl9Z2V0IGV4dGVuZGVkS2V5KCl7cmV0dXJuIFJlKHRoaXMuZGVwdGg8MjU2LCJEZXB0aCB0b28gZGVlcCIsIlVOU1VQUE9SVEVEX09QRVJBVElPTiIse29wZXJhdGlvbjoiZXh0ZW5kZWRLZXkifSksY2woZXQoWyIweDA0ODhBREU0IixsYyh0aGlzLmRlcHRoLDEpLHRoaXMucGFyZW50RmluZ2VycHJpbnQsbGModGhpcy5pbmRleCw0KSx0aGlzLmNoYWluQ29kZSxldChbIjB4MDAiLHRoaXMucHJpdmF0ZUtleV0pXSkpfWhhc1BhdGgoKXtyZXR1cm4gdGhpcy5wYXRoIT1udWxsfW5ldXRlcigpe3JldHVybiBuZXcgV2Eoc24sdGhpcy5hZGRyZXNzLHRoaXMucHVibGljS2V5LHRoaXMucGFyZW50RmluZ2VycHJpbnQsdGhpcy5jaGFpbkNvZGUsdGhpcy5wYXRoLHRoaXMuaW5kZXgsdGhpcy5kZXB0aCx0aGlzLnByb3ZpZGVyKX1kZXJpdmVDaGlsZCh0KXtjb25zdCBhPUJ0KHQsImluZGV4Iik7RyhhPD00Mjk0OTY3Mjk1LCJpbnZhbGlkIGluZGV4IiwiaW5kZXgiLGEpO2xldCBzPXRoaXMucGF0aDtzJiYocys9Ii8iKyhhJn5xbiksYSZxbiYmKHMrPSInIikpO2NvbnN0e0lSOnIsSUw6b309TmIoYSx0aGlzLmNoYWluQ29kZSx0aGlzLnB1YmxpY0tleSx0aGlzLnByaXZhdGVLZXkpLGk9bmV3IGJyKEtyKChDYyhvKStCaWdJbnQodGhpcy5wcml2YXRlS2V5KSklaG0sMzIpKTtyZXR1cm4gbmV3ICRyKHNuLGksdGhpcy5maW5nZXJwcmludCx5ZShyKSxzLGEsdGhpcy5kZXB0aCsxLHRoaXMubW5lbW9uaWMsdGhpcy5wcm92aWRlcil9ZGVyaXZlUGF0aCh0KXtyZXR1cm4ga2IodGhpcyx0KX1zdGF0aWMgZnJvbUV4dGVuZGVkS2V5KHQpe2NvbnN0IGE9VnQocjEodCkpO0coYS5sZW5ndGg9PT04Mnx8Y2woYS5zbGljZSgwLDc4KSk9PT10LCJpbnZhbGlkIGV4dGVuZGVkIGtleSIsImV4dGVuZGVkS2V5IiwiWyBSRURBQ1RFRCBdIik7Y29uc3Qgcz1hWzRdLHI9eWUoYS5zbGljZSg1LDkpKSxvPXBhcnNlSW50KHllKGEuc2xpY2UoOSwxMykpLnN1YnN0cmluZygyKSwxNiksaT15ZShhLnNsaWNlKDEzLDQ1KSksYz1hLnNsaWNlKDQ1LDc4KTtzd2l0Y2goeWUoYS5zbGljZSgwLDQpKSl7Y2FzZSIweDA0ODhiMjFlIjpjYXNlIjB4MDQzNTg3Y2YiOntjb25zdCBmPXllKGMpO3JldHVybiBuZXcgV2Eoc24sT2MoZiksZixyLGksbnVsbCxvLHMsbnVsbCl9Y2FzZSIweDA0ODhhZGU0IjpjYXNlIjB4MDQzNTgzOTQgIjppZihjWzBdIT09MClicmVhaztyZXR1cm4gbmV3ICRyKHNuLG5ldyBicihjLnNsaWNlKDEpKSxyLGksbnVsbCxvLHMsbnVsbCxudWxsKX1HKCExLCJpbnZhbGlkIGV4dGVuZGVkIGtleSBwcmVmaXgiLCJleHRlbmRlZEtleSIsIlsgUkVEQUNURUQgXSIpfXN0YXRpYyBjcmVhdGVSYW5kb20odCxhLHMpe3ZhciBvO3Q9PW51bGwmJih0PSIiKSxhPT1udWxsJiYoYT1odSkscz09bnVsbCYmKHM9UW4ud29yZGxpc3QoKSk7Y29uc3Qgcj1lby5mcm9tRW50cm9weShTbigxNiksdCxzKTtyZXR1cm4gRmUobz0kcixXbyxBYSkuY2FsbChvLHIuY29tcHV0ZVNlZWQoKSxyKS5kZXJpdmVQYXRoKGEpfXN0YXRpYyBmcm9tTW5lbW9uaWModCxhKXt2YXIgcztyZXR1cm4gYXx8KGE9aHUpLEZlKHM9JHIsV28sQWEpLmNhbGwocyx0LmNvbXB1dGVTZWVkKCksdCkuZGVyaXZlUGF0aChhKX1zdGF0aWMgZnJvbVBocmFzZSh0LGEscyxyKXt2YXIgaTthPT1udWxsJiYoYT0iIikscz09bnVsbCYmKHM9aHUpLHI9PW51bGwmJihyPVFuLndvcmRsaXN0KCkpO2NvbnN0IG89ZW8uZnJvbVBocmFzZSh0LGEscik7cmV0dXJuIEZlKGk9JHIsV28sQWEpLmNhbGwoaSxvLmNvbXB1dGVTZWVkKCksbykuZGVyaXZlUGF0aChzKX1zdGF0aWMgZnJvbVNlZWQodCl7dmFyIGE7cmV0dXJuIEZlKGE9JHIsV28sQWEpLmNhbGwoYSx0LG51bGwpfX07VWE9bmV3IFdlYWtTZXQsdWw9ZnVuY3Rpb24oKXtjb25zdCB0PXthZGRyZXNzOnRoaXMuYWRkcmVzcyxwcml2YXRlS2V5OnRoaXMucHJpdmF0ZUtleX0sYT10aGlzLm1uZW1vbmljO3JldHVybiB0aGlzLnBhdGgmJmEmJmEud29yZGxpc3QubG9jYWxlPT09ImVuIiYmYS5wYXNzd29yZD09PSIiJiYodC5tbmVtb25pYz17cGF0aDp0aGlzLnBhdGgsbG9jYWxlOiJlbiIsZW50cm9weTphLmVudHJvcHl9KSx0fSxXbz1uZXcgV2Vha1NldCxBYT1mdW5jdGlvbih0LGEpe0coUGModCksImludmFsaWQgc2VlZCIsInNlZWQiLCJbUkVEQUNURURdIik7Y29uc3Qgcz1BZSh0LCJzZWVkIik7RyhzLmxlbmd0aD49MTYmJnMubGVuZ3RoPD02NCwiaW52YWxpZCBzZWVkIiwic2VlZCIsIltSRURBQ1RFRF0iKTtjb25zdCByPUFlKFluKCJzaGE1MTIiLHBtLHMpKSxvPW5ldyBicih5ZShyLnNsaWNlKDAsMzIpKSk7cmV0dXJuIG5ldyAkcihzbixvLCIweDAwMDAwMDAwIix5ZShyLnNsaWNlKDMyKSksIm0iLDAsMCxhLG51bGwpfSxQZSgkcixXbyk7bGV0IEVhPSRyO2NsYXNzIFdhIGV4dGVuZHMgc2x7Y29uc3RydWN0b3IodCxhLHMscixvLGksYyxmLGQpe3N1cGVyKGEsZCk7Wih0aGlzLCJwdWJsaWNLZXkiKTtaKHRoaXMsImZpbmdlcnByaW50Iik7Wih0aGlzLCJwYXJlbnRGaW5nZXJwcmludCIpO1oodGhpcywiY2hhaW5Db2RlIik7Wih0aGlzLCJwYXRoIik7Wih0aGlzLCJpbmRleCIpO1oodGhpcywiZGVwdGgiKTt0byh0LHNuLCJIRE5vZGVWb2lkV2FsbGV0IiksemUodGhpcyx7cHVibGljS2V5OnN9KTtjb25zdCBwPUFuKEtzKFV0KHMpKSwwLDQpO3plKHRoaXMse3B1YmxpY0tleTpzLGZpbmdlcnByaW50OnAscGFyZW50RmluZ2VycHJpbnQ6cixjaGFpbkNvZGU6byxwYXRoOmksaW5kZXg6YyxkZXB0aDpmfSl9Y29ubmVjdCh0KXtyZXR1cm4gbmV3IFdhKHNuLHRoaXMuYWRkcmVzcyx0aGlzLnB1YmxpY0tleSx0aGlzLnBhcmVudEZpbmdlcnByaW50LHRoaXMuY2hhaW5Db2RlLHRoaXMucGF0aCx0aGlzLmluZGV4LHRoaXMuZGVwdGgsdCl9Z2V0IGV4dGVuZGVkS2V5KCl7cmV0dXJuIFJlKHRoaXMuZGVwdGg8MjU2LCJEZXB0aCB0b28gZGVlcCIsIlVOU1VQUE9SVEVEX09QRVJBVElPTiIse29wZXJhdGlvbjoiZXh0ZW5kZWRLZXkifSksY2woZXQoWyIweDA0ODhCMjFFIixsYyh0aGlzLmRlcHRoLDEpLHRoaXMucGFyZW50RmluZ2VycHJpbnQsbGModGhpcy5pbmRleCw0KSx0aGlzLmNoYWluQ29kZSx0aGlzLnB1YmxpY0tleV0pKX1oYXNQYXRoKCl7cmV0dXJuIHRoaXMucGF0aCE9bnVsbH1kZXJpdmVDaGlsZCh0KXtjb25zdCBhPUJ0KHQsImluZGV4Iik7RyhhPD00Mjk0OTY3Mjk1LCJpbnZhbGlkIGluZGV4IiwiaW5kZXgiLGEpO2xldCBzPXRoaXMucGF0aDtzJiYocys9Ii8iKyhhJn5xbiksYSZxbiYmKHMrPSInIikpO2NvbnN0e0lSOnIsSUw6b309TmIoYSx0aGlzLmNoYWluQ29kZSx0aGlzLnB1YmxpY0tleSxudWxsKSxpPWJyLmFkZFBvaW50cyhvLHRoaXMucHVibGljS2V5LCEwKSxjPU9jKGkpO3JldHVybiBuZXcgV2Eoc24sYyxpLHRoaXMuZmluZ2VycHJpbnQseWUocikscyxhLHRoaXMuZGVwdGgrMSx0aGlzLnByb3ZpZGVyKX1kZXJpdmVQYXRoKHQpe3JldHVybiBrYih0aGlzLHQpfX1jb25zdCBibT17ZW46UW4ud29yZGxpc3QoKX07dmFyIGxsO2Z1bmN0aW9uIEh0KG4pe2NvbnN0IGU9bmV3IFNldDtyZXR1cm4gbi5mb3JFYWNoKHQ9PmUuYWRkKHQpKSxPYmplY3QuZnJlZXplKGUpfWNvbnN0IFViPSJjb25zdGFudCBleHRlcm5hbCBpbnRlcm5hbCBwYXlhYmxlIHByaXZhdGUgcHVibGljIHB1cmUgdmlldyIseW09SHQoVWIuc3BsaXQoIiAiKSksRGI9ImNvbnN0cnVjdG9yIGVycm9yIGV2ZW50IGZhbGxiYWNrIGZ1bmN0aW9uIHJlY2VpdmUgc3RydWN0IiwkYj1IdChEYi5zcGxpdCgiICIpKSxMYj0iY2FsbGRhdGEgbWVtb3J5IHN0b3JhZ2UgcGF5YWJsZSBpbmRleGVkIix4bT1IdChMYi5zcGxpdCgiICIpKSxUbT0idHVwbGUgcmV0dXJucyIsQW09W0RiLExiLFRtLFViXS5qb2luKCIgIiksbW09SHQoQW0uc3BsaXQoIiAiKSksUG09eyIoIjoiT1BFTl9QQVJFTiIsIikiOiJDTE9TRV9QQVJFTiIsIlsiOiJPUEVOX0JSQUNLRVQiLCJdIjoiQ0xPU0VfQlJBQ0tFVCIsIiwiOiJDT01NQSIsIkAiOiJBVCJ9LHdtPW5ldyBSZWdFeHAoIl4oXFxzKikiKSx2bT1uZXcgUmVnRXhwKCJeKFswLTldKykiKSxDbT1uZXcgUmVnRXhwKCJeKFthLXpBLVokX11bYS16QS1aMC05JF9dKikiKSx6Yj1uZXcgUmVnRXhwKCJeKFthLXpBLVokX11bYS16QS1aMC05JF9dKikkIiksamI9bmV3IFJlZ0V4cCgiXih0cmNUb2tlbnxhZGRyZXNzfGJvb2x8Ynl0ZXMoWzAtOV0qKXxzdHJpbmd8dT9pbnQoWzAtOV0qKSkkIik7dmFyIEV0LFZyLERhLGZsO2NsYXNzIGhue2NvbnN0cnVjdG9yKGUpe1BlKHRoaXMsRGEpO1BlKHRoaXMsRXQpO1BlKHRoaXMsVnIpO3VlKHRoaXMsRXQsMCksdWUodGhpcyxWcixlLnNsaWNlKCkpfWdldCBvZmZzZXQoKXtyZXR1cm4gWSh0aGlzLEV0KX1nZXQgbGVuZ3RoKCl7cmV0dXJuIFkodGhpcyxWcikubGVuZ3RoLVkodGhpcyxFdCl9Y2xvbmUoKXtyZXR1cm4gbmV3IGxsKFkodGhpcyxWcikpfXJlc2V0KCl7dWUodGhpcyxFdCwwKX1wb3BLZXl3b3JkKGUpe2NvbnN0IHQ9dGhpcy5wZWVrKCk7aWYodC50eXBlIT09IktFWVdPUkQifHwhZS5oYXModC50ZXh0KSl0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkIGtleXdvcmQgJHt0LnRleHR9YCk7cmV0dXJuIHRoaXMucG9wKCkudGV4dH1wb3BUeXBlKGUpe2lmKHRoaXMucGVlaygpLnR5cGUhPT1lKXRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgJHtlfTsgZ290ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5wZWVrKCkpfWApO3JldHVybiB0aGlzLnBvcCgpLnRleHR9cG9wUGFyZW4oKXtjb25zdCBlPXRoaXMucGVlaygpO2lmKGUudHlwZSE9PSJPUEVOX1BBUkVOIil0aHJvdyBuZXcgRXJyb3IoImJhZCBzdGFydCIpO2NvbnN0IHQ9RmUodGhpcyxEYSxmbCkuY2FsbCh0aGlzLFkodGhpcyxFdCkrMSxlLm1hdGNoKzEpO3JldHVybiB1ZSh0aGlzLEV0LGUubWF0Y2grMSksdH1wb3BQYXJhbXMoKXtjb25zdCBlPXRoaXMucGVlaygpO2lmKGUudHlwZSE9PSJPUEVOX1BBUkVOIil0aHJvdyBuZXcgRXJyb3IoImJhZCBzdGFydCIpO2NvbnN0IHQ9W107Zm9yKDtZKHRoaXMsRXQpPGUubWF0Y2gtMTspe2NvbnN0IGE9dGhpcy5wZWVrKCkubGlua05leHQ7dC5wdXNoKEZlKHRoaXMsRGEsZmwpLmNhbGwodGhpcyxZKHRoaXMsRXQpKzEsYSkpLHVlKHRoaXMsRXQsYSl9cmV0dXJuIHVlKHRoaXMsRXQsZS5tYXRjaCsxKSx0fXBlZWsoKXtpZihZKHRoaXMsRXQpPj1ZKHRoaXMsVnIpLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIm91dC1vZi1ib3VuZHMiKTtyZXR1cm4gWSh0aGlzLFZyKVtZKHRoaXMsRXQpXX1wZWVrS2V5d29yZChlKXtjb25zdCB0PXRoaXMucGVla1R5cGUoIktFWVdPUkQiKTtyZXR1cm4gdCE9bnVsbCYmZS5oYXModCk/dDpudWxsfXBlZWtUeXBlKGUpe2lmKHRoaXMubGVuZ3RoPT09MClyZXR1cm4gbnVsbDtjb25zdCB0PXRoaXMucGVlaygpO3JldHVybiB0LnR5cGU9PT1lP3QudGV4dDpudWxsfXBvcCgpe2NvbnN0IGU9dGhpcy5wZWVrKCk7cmV0dXJuIFljKHRoaXMsRXQpLl8rKyxlfXRvU3RyaW5nKCl7Y29uc3QgZT1bXTtmb3IobGV0IHQ9WSh0aGlzLEV0KTt0PFkodGhpcyxWcikubGVuZ3RoO3QrKyl7Y29uc3QgYT1ZKHRoaXMsVnIpW3RdO2UucHVzaChgJHthLnR5cGV9OiR7YS50ZXh0fWApfXJldHVybmA8VG9rZW5TdHJpbmcgJHtlLmpvaW4oIiAiKX0+YH19RXQ9bmV3IFdlYWtNYXAsVnI9bmV3IFdlYWtNYXAsRGE9bmV3IFdlYWtTZXQsZmw9ZnVuY3Rpb24oZT0wLHQ9MCl7cmV0dXJuIG5ldyBsbChZKHRoaXMsVnIpLnNsaWNlKGUsdCkubWFwKGE9Pk9iamVjdC5mcmVlemUoT2JqZWN0LmFzc2lnbih7fSxhLHttYXRjaDphLm1hdGNoLWUsbGlua0JhY2s6YS5saW5rQmFjay1lLGxpbmtOZXh0OmEubGlua05leHQtZX0pKSkpfTtsbD1objtmdW5jdGlvbiBybyhuKXtjb25zdCBlPVtdLHQ9bz0+e2NvbnN0IGk9cjxuLmxlbmd0aD9KU09OLnN0cmluZ2lmeShuW3JdKToiJEVPSSI7dGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHRva2VuICR7aX0gYXQgJHtyfTogJHtvfWApfSxhPVtdLHM9W107bGV0IHI9MDtmb3IoO3I8bi5sZW5ndGg7KXtsZXQgbz1uLnN1YnN0cmluZyhyKSxpPW8ubWF0Y2god20pO2kmJihyKz1pWzFdLmxlbmd0aCxvPW4uc3Vic3RyaW5nKHIpKTtjb25zdCBjPXtkZXB0aDphLmxlbmd0aCxsaW5rQmFjazotMSxsaW5rTmV4dDotMSxtYXRjaDotMSx0eXBlOiIiLHRleHQ6IiIsb2Zmc2V0OnIsdmFsdWU6LTF9O2UucHVzaChjKTtjb25zdCBmPVBtW29bMF1dfHwiIjtpZihmKXtpZihjLnR5cGU9ZixjLnRleHQ9b1swXSxyKyssZj09PSJPUEVOX1BBUkVOIilhLnB1c2goZS5sZW5ndGgtMSkscy5wdXNoKGUubGVuZ3RoLTEpO2Vsc2UgaWYoZj09IkNMT1NFX1BBUkVOIilhLmxlbmd0aD09PTAmJnQoIm5vIG1hdGNoaW5nIG9wZW4gYnJhY2tldCIpLGMubWF0Y2g9YS5wb3AoKSxlW2MubWF0Y2hdLm1hdGNoPWUubGVuZ3RoLTEsYy5kZXB0aC0tLGMubGlua0JhY2s9cy5wb3AoKSxlW2MubGlua0JhY2tdLmxpbmtOZXh0PWUubGVuZ3RoLTE7ZWxzZSBpZihmPT09IkNPTU1BIiljLmxpbmtCYWNrPXMucG9wKCksZVtjLmxpbmtCYWNrXS5saW5rTmV4dD1lLmxlbmd0aC0xLHMucHVzaChlLmxlbmd0aC0xKTtlbHNlIGlmKGY9PT0iT1BFTl9CUkFDS0VUIiljLnR5cGU9IkJSQUNLRVQiO2Vsc2UgaWYoZj09PSJDTE9TRV9CUkFDS0VUIil7bGV0IGQ9ZS5wb3AoKS50ZXh0O2lmKGUubGVuZ3RoPjAmJmVbZS5sZW5ndGgtMV0udHlwZT09PSJOVU1CRVIiKXtjb25zdCBwPWUucG9wKCkudGV4dDtkPXArZCxlW2UubGVuZ3RoLTFdLnZhbHVlPUJ0KHApfWlmKGUubGVuZ3RoPT09MHx8ZVtlLmxlbmd0aC0xXS50eXBlIT09IkJSQUNLRVQiKXRocm93IG5ldyBFcnJvcigibWlzc2luZyBvcGVuaW5nIGJyYWNrZXQiKTtlW2UubGVuZ3RoLTFdLnRleHQrPWR9Y29udGludWV9aWYoaT1vLm1hdGNoKENtKSxpKXtpZihjLnRleHQ9aVsxXSxyKz1jLnRleHQubGVuZ3RoLG1tLmhhcyhjLnRleHQpKXtjLnR5cGU9IktFWVdPUkQiO2NvbnRpbnVlfWlmKGMudGV4dC5tYXRjaChqYikpe2MudHlwZT0iVFlQRSI7Y29udGludWV9Yy50eXBlPSJJRCI7Y29udGludWV9aWYoaT1vLm1hdGNoKHZtKSxpKXtjLnRleHQ9aVsxXSxjLnR5cGU9Ik5VTUJFUiIscis9Yy50ZXh0Lmxlbmd0aDtjb250aW51ZX10aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgdG9rZW4gJHtKU09OLnN0cmluZ2lmeShvWzBdKX0gYXQgcG9zaXRpb24gJHtyfWApfXJldHVybiBuZXcgaG4oZS5tYXAobz0+T2JqZWN0LmZyZWV6ZShvKSkpfWZ1bmN0aW9uIEFwKG4sZSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgYSBpbiBlLmtleXMoKSluLmhhcyhhKSYmdC5wdXNoKGEpO2lmKHQubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKGBjb25mbGljdGluZyB0eXBlczogJHt0LmpvaW4oIiwgIil9YCl9ZnVuY3Rpb24gTWMobixlKXtpZihlLnBlZWtLZXl3b3JkKCRiKSl7Y29uc3QgdD1lLnBvcCgpLnRleHQ7aWYodCE9PW4pdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCAke259LCBnb3QgJHt0fWApfXJldHVybiBlLnBvcFR5cGUoIklEIil9ZnVuY3Rpb24gT24obixlKXtjb25zdCB0PW5ldyBTZXQ7Zm9yKDs7KXtjb25zdCBhPW4ucGVla1R5cGUoIktFWVdPUkQiKTtpZihhPT1udWxsfHxlJiYhZS5oYXMoYSkpYnJlYWs7aWYobi5wb3AoKSx0LmhhcyhhKSl0aHJvdyBuZXcgRXJyb3IoYGR1cGxpY2F0ZSBrZXl3b3JkczogJHtKU09OLnN0cmluZ2lmeShhKX1gKTt0LmFkZChhKX1yZXR1cm4gT2JqZWN0LmZyZWV6ZSh0KX1mdW5jdGlvbiBWYihuKXtjb25zdCBlPU9uKG4seW0pO3JldHVybiBBcChlLEh0KCJjb25zdGFudCBwYXlhYmxlIG5vbnBheWFibGUiLnNwbGl0KCIgIikpKSxBcChlLEh0KCJwdXJlIHZpZXcgcGF5YWJsZSBub25wYXlhYmxlIi5zcGxpdCgiICIpKSksZS5oYXMoInZpZXciKT8idmlldyI6ZS5oYXMoInB1cmUiKT8icHVyZSI6ZS5oYXMoInBheWFibGUiKT8icGF5YWJsZSI6ZS5oYXMoIm5vbnBheWFibGUiKT8ibm9ucGF5YWJsZSI6ZS5oYXMoImNvbnN0YW50Iik/InZpZXciOiJub25wYXlhYmxlIn1mdW5jdGlvbiBfbihuLGUpe3JldHVybiBuLnBvcFBhcmFtcygpLm1hcCh0PT5vci5mcm9tKHQsZSkpfWZ1bmN0aW9uIEdiKG4pe2lmKG4ucGVla1R5cGUoIkFUIikpe2lmKG4ucG9wKCksbi5wZWVrVHlwZSgiTlVNQkVSIikpcmV0dXJuIHR0KG4ucG9wKCkudGV4dCk7dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGdhcyIpfXJldHVybiBudWxsfWZ1bmN0aW9uIE1vKG4pe2lmKG4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCB0b2tlbnM6ICR7bi50b1N0cmluZygpfWApfWNvbnN0IEVtPW5ldyBSZWdFeHAoL14oLiopXFsoWzAtOV0qKVxdJC8pO2Z1bmN0aW9uIG1wKG4pe2NvbnN0IGU9bi5tYXRjaChqYik7aWYoRyhlLCJpbnZhbGlkIHR5cGUiLCJ0eXBlIixuKSxuPT09InVpbnQiKXJldHVybiJ1aW50MjU2IjtpZihuPT09ImludCIpcmV0dXJuImludDI1NiI7aWYoZVsyXSl7Y29uc3QgdD1wYXJzZUludChlWzJdKTtHKHQhPT0wJiZ0PD0zMiwiaW52YWxpZCBieXRlcyBsZW5ndGgiLCJ0eXBlIixuKX1lbHNlIGlmKGVbM10pe2NvbnN0IHQ9cGFyc2VJbnQoZVszXSk7Ryh0IT09MCYmdDw9MjU2JiZ0JTg9PT0wLCJpbnZhbGlkIG51bWVyaWMgd2lkdGgiLCJ0eXBlIixuKX1yZXR1cm4gbn1jb25zdCBmdD17fSxhcj1TeW1ib2wuZm9yKCJfZXRoZXJzX2ludGVybmFsIiksUHA9Il9QYXJhbVR5cGVJbnRlcm5hbCIsd3A9Il9FcnJvckludGVybmFsIix2cD0iX0V2ZW50SW50ZXJuYWwiLENwPSJfQ29uc3RydWN0b3JJbnRlcm5hbCIsRXA9Il9GYWxsYmFja0ludGVybmFsIixXcD0iX0Z1bmN0aW9uSW50ZXJuYWwiLEJwPSJfU3RydWN0SW50ZXJuYWwiO3ZhciBPcyxZaTtjb25zdCBTcj1jbGFzcyBTcntjb25zdHJ1Y3RvcihlLHQsYSxzLHIsbyxpLGMpe1BlKHRoaXMsT3MpO1oodGhpcywibmFtZSIpO1oodGhpcywidHlwZSIpO1oodGhpcywiYmFzZVR5cGUiKTtaKHRoaXMsImluZGV4ZWQiKTtaKHRoaXMsImNvbXBvbmVudHMiKTtaKHRoaXMsImFycmF5TGVuZ3RoIik7Wih0aGlzLCJhcnJheUNoaWxkcmVuIik7aWYodG8oZSxmdCwiUGFyYW1UeXBlIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYXIse3ZhbHVlOlBwfSksbyYmKG89T2JqZWN0LmZyZWV6ZShvLnNsaWNlKCkpKSxzPT09ImFycmF5Iil7aWYoaT09bnVsbHx8Yz09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIiIpfWVsc2UgaWYoaSE9bnVsbHx8YyE9bnVsbCl0aHJvdyBuZXcgRXJyb3IoIiIpO2lmKHM9PT0idHVwbGUiKXtpZihvPT1udWxsKXRocm93IG5ldyBFcnJvcigiIil9ZWxzZSBpZihvIT1udWxsKXRocm93IG5ldyBFcnJvcigiIik7emUodGhpcyx7bmFtZTp0LHR5cGU6YSxiYXNlVHlwZTpzLGluZGV4ZWQ6cixjb21wb25lbnRzOm8sYXJyYXlMZW5ndGg6aSxhcnJheUNoaWxkcmVuOmN9KX1mb3JtYXQoZSl7aWYoZT09bnVsbCYmKGU9InNpZ2hhc2giKSxlPT09Impzb24iKXtjb25zdCBhPXt0eXBlOnRoaXMuYmFzZVR5cGU9PT0idHVwbGUiPyJ0dXBsZSI6dGhpcy50eXBlLG5hbWU6dGhpcy5uYW1lfHx2b2lkIDB9O3JldHVybiB0eXBlb2YgdGhpcy5pbmRleGVkPT0iYm9vbGVhbiImJihhLmluZGV4ZWQ9dGhpcy5pbmRleGVkKSx0aGlzLmlzVHVwbGUoKSYmKGEuY29tcG9uZW50cz10aGlzLmNvbXBvbmVudHMubWFwKHM9PkpTT04ucGFyc2Uocy5mb3JtYXQoZSkpKSksSlNPTi5zdHJpbmdpZnkoYSl9bGV0IHQ9IiI7cmV0dXJuIHRoaXMuaXNBcnJheSgpPyh0Kz10aGlzLmFycmF5Q2hpbGRyZW4uZm9ybWF0KGUpLHQrPWBbJHt0aGlzLmFycmF5TGVuZ3RoPDA/IiI6U3RyaW5nKHRoaXMuYXJyYXlMZW5ndGgpfV1gKTp0aGlzLmlzVHVwbGUoKT8oZSE9PSJzaWdoYXNoIiYmKHQrPXRoaXMudHlwZSksdCs9IigiK3RoaXMuY29tcG9uZW50cy5tYXAoYT0+YS5mb3JtYXQoZSkpLmpvaW4oZT09PSJmdWxsIj8iLCAiOiIsIikrIikiKTp0Kz10aGlzLnR5cGUsZSE9PSJzaWdoYXNoIiYmKHRoaXMuaW5kZXhlZD09PSEwJiYodCs9IiBpbmRleGVkIiksZT09PSJmdWxsIiYmdGhpcy5uYW1lJiYodCs9IiAiK3RoaXMubmFtZSkpLHR9aXNBcnJheSgpe3JldHVybiB0aGlzLmJhc2VUeXBlPT09ImFycmF5In1pc1R1cGxlKCl7cmV0dXJuIHRoaXMuYmFzZVR5cGU9PT0idHVwbGUifWlzSW5kZXhhYmxlKCl7cmV0dXJuIHRoaXMuaW5kZXhlZCE9bnVsbH13YWxrKGUsdCl7aWYodGhpcy5pc0FycmF5KCkpe2lmKCFBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBhcnJheSB2YWx1ZSIpO2lmKHRoaXMuYXJyYXlMZW5ndGghPT0tMSYmZS5sZW5ndGghPT10aGlzLmFycmF5TGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYXJyYXkgaXMgd3JvbmcgbGVuZ3RoIik7cmV0dXJuIGUubWFwKGE9PnRoaXMuYXJyYXlDaGlsZHJlbj8ud2FsayhhLHQpKX1pZih0aGlzLmlzVHVwbGUoKSl7aWYoIUFycmF5LmlzQXJyYXkoZSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHR1cGxlIHZhbHVlIik7aWYoZS5sZW5ndGghPT10aGlzLmNvbXBvbmVudHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYXJyYXkgaXMgd3JvbmcgbGVuZ3RoIik7cmV0dXJuIGUubWFwKChhLHMpPT50aGlzLmNvbXBvbmVudHM/LltzXS53YWxrKGEsdCkpfXJldHVybiB0KHRoaXMudHlwZSxlKX1hc3luYyB3YWxrQXN5bmMoZSx0KXtjb25zdCBhPVtdLHM9W2VdO3JldHVybiBGZSh0aGlzLE9zLFlpKS5jYWxsKHRoaXMsYSxlLHQscj0+e3NbMF09cn0pLGEubGVuZ3RoJiZhd2FpdCBQcm9taXNlLmFsbChhKSxzWzBdfXN0YXRpYyBmcm9tKGUsdCl7aWYoU3IuaXNQYXJhbVR5cGUoZSkpcmV0dXJuIGU7aWYodHlwZW9mIGU9PSJzdHJpbmciKXJldHVybiBTci5mcm9tKHJvKGUpLHQpO2lmKGUgaW5zdGFuY2VvZiBobil7bGV0IGk9IiIsYz0iIixmPW51bGw7T24oZSxIdChbInR1cGxlIl0pKS5oYXMoInR1cGxlIil8fGUucGVla1R5cGUoIk9QRU5fUEFSRU4iKT8oYz0idHVwbGUiLGY9ZS5wb3BQYXJhbXMoKS5tYXAoZz0+U3IuZnJvbShnKSksaT1gdHVwbGUoJHtmLm1hcChnPT5nLmZvcm1hdCgpKS5qb2luKCIsIil9KWApOihpPW1wKGUucG9wVHlwZSgiVFlQRSIpKSxjPWkpO2xldCBkPW51bGwscD1udWxsO2Zvcig7ZS5sZW5ndGgmJmUucGVla1R5cGUoIkJSQUNLRVQiKTspe2NvbnN0IGc9ZS5wb3AoKTtkPW5ldyBTcihmdCwiIixpLGMsbnVsbCxmLHAsZCkscD1nLnZhbHVlLGkrPWcudGV4dCxjPSJhcnJheSIsZj1udWxsfWxldCBiPW51bGw7aWYoT24oZSx4bSkuaGFzKCJpbmRleGVkIikpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiIik7Yj0hMH1jb25zdCBXPWUucGVla1R5cGUoIklEIik/ZS5wb3AoKS50ZXh0OiIiO2lmKGUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigibGVmdG92ZXIgdG9rZW5zIik7cmV0dXJuIG5ldyBTcihmdCxXLGksYyxiLGYscCxkKX1jb25zdCBhPWUubmFtZTtHKCFhfHx0eXBlb2YgYT09InN0cmluZyImJmEubWF0Y2goemIpLCJpbnZhbGlkIG5hbWUiLCJvYmoubmFtZSIsYSk7bGV0IHM9ZS5pbmRleGVkO3MhPW51bGwmJihHKHQsInBhcmFtZXRlciBjYW5ub3QgYmUgaW5kZXhlZCIsIm9iai5pbmRleGVkIixlLmluZGV4ZWQpLHM9ISFzKTtsZXQgcj1lLnR5cGU7Y29uc3Qgbz1yLm1hdGNoKEVtKTtpZihvKXtjb25zdCBpPXBhcnNlSW50KG9bMl18fCItMSIpLGM9U3IuZnJvbSh7dHlwZTpvWzFdLGNvbXBvbmVudHM6ZS5jb21wb25lbnRzfSk7cmV0dXJuIG5ldyBTcihmdCxhfHwiIixyLCJhcnJheSIscyxudWxsLGksYyl9aWYocj09PSJ0dXBsZSJ8fHIuc3RhcnRzV2l0aCgidHVwbGUoIil8fHIuc3RhcnRzV2l0aCgiKCIpKXtjb25zdCBpPWUuY29tcG9uZW50cyE9bnVsbD9lLmNvbXBvbmVudHMubWFwKGY9PlNyLmZyb20oZikpOm51bGw7cmV0dXJuIG5ldyBTcihmdCxhfHwiIixyLCJ0dXBsZSIscyxpLG51bGwsbnVsbCl9cmV0dXJuIHI9bXAoZS50eXBlKSxuZXcgU3IoZnQsYXx8IiIscixyLHMsbnVsbCxudWxsLG51bGwpfXN0YXRpYyBpc1BhcmFtVHlwZShlKXtyZXR1cm4gZSYmZVthcl09PT1QcH19O09zPW5ldyBXZWFrU2V0LFlpPWZ1bmN0aW9uKGUsdCxhLHMpe2lmKHRoaXMuaXNBcnJheSgpKXtpZighQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgYXJyYXkgdmFsdWUiKTtpZih0aGlzLmFycmF5TGVuZ3RoIT09LTEmJnQubGVuZ3RoIT09dGhpcy5hcnJheUxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImFycmF5IGlzIHdyb25nIGxlbmd0aCIpO2NvbnN0IG89dGhpcy5hcnJheUNoaWxkcmVuLGk9dC5zbGljZSgpO2kuZm9yRWFjaCgoYyxmKT0+e3ZhciBkO0ZlKGQ9byxPcyxZaSkuY2FsbChkLGUsYyxhLHA9PntpW2ZdPXB9KX0pLHMoaSk7cmV0dXJufWlmKHRoaXMuaXNUdXBsZSgpKXtjb25zdCBvPXRoaXMuY29tcG9uZW50cztsZXQgaTtpZihBcnJheS5pc0FycmF5KHQpKWk9dC5zbGljZSgpO2Vsc2V7aWYodD09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCB0dXBsZSB2YWx1ZSIpO2k9by5tYXAoYz0+e2lmKCFjLm5hbWUpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgdXNlIG9iamVjdCB2YWx1ZSB3aXRoIHVubmFtZWQgY29tcG9uZW50cyIpO2lmKCEoYy5uYW1lIGluIHQpKXRocm93IG5ldyBFcnJvcihgbWlzc2luZyB2YWx1ZSBmb3IgY29tcG9uZW50ICR7Yy5uYW1lfWApO3JldHVybiB0W2MubmFtZV19KX1pZihpLmxlbmd0aCE9PXRoaXMuY29tcG9uZW50cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhcnJheSBpcyB3cm9uZyBsZW5ndGgiKTtpLmZvckVhY2goKGMsZik9Pnt2YXIgZDtGZShkPW9bZl0sT3MsWWkpLmNhbGwoZCxlLGMsYSxwPT57aVtmXT1wfSl9KSxzKGkpO3JldHVybn1jb25zdCByPWEodGhpcy50eXBlLHQpO3IudGhlbj9lLnB1c2goYXN5bmMgZnVuY3Rpb24oKXtzKGF3YWl0IHIpfSgpKTpzKHIpfTtsZXQgb3I9U3I7Y2xhc3MgRm97Y29uc3RydWN0b3IoZSx0LGEpe1oodGhpcywidHlwZSIpO1oodGhpcywiaW5wdXRzIik7dG8oZSxmdCwiRnJhZ21lbnQiKSxhPU9iamVjdC5mcmVlemUoYS5zbGljZSgpKSx6ZSh0aGlzLHt0eXBlOnQsaW5wdXRzOmF9KX1zdGF0aWMgZnJvbShlKXtpZih0eXBlb2YgZT09InN0cmluZyIpe3RyeXtGby5mcm9tKEpTT04ucGFyc2UoZSkpfWNhdGNoe31yZXR1cm4gRm8uZnJvbShybyhlKSl9aWYoZSBpbnN0YW5jZW9mIGhuKXN3aXRjaChlLnBlZWtLZXl3b3JkKCRiKSl7Y2FzZSJjb25zdHJ1Y3RvciI6cmV0dXJuIEluLmZyb20oZSk7Y2FzZSJlcnJvciI6cmV0dXJuIHRyLmZyb20oZSk7Y2FzZSJldmVudCI6cmV0dXJuIGZuLmZyb20oZSk7Y2FzZSJmYWxsYmFjayI6Y2FzZSJyZWNlaXZlIjpyZXR1cm4gbW4uZnJvbShlKTtjYXNlImZ1bmN0aW9uIjpyZXR1cm4gSHIuZnJvbShlKTtjYXNlInN0cnVjdCI6cmV0dXJuIElvLmZyb20oZSl9ZWxzZSBpZih0eXBlb2YgZT09Im9iamVjdCIpe3N3aXRjaChlLnR5cGUpe2Nhc2UiY29uc3RydWN0b3IiOnJldHVybiBJbi5mcm9tKGUpO2Nhc2UiZXJyb3IiOnJldHVybiB0ci5mcm9tKGUpO2Nhc2UiZXZlbnQiOnJldHVybiBmbi5mcm9tKGUpO2Nhc2UiZmFsbGJhY2siOmNhc2UicmVjZWl2ZSI6cmV0dXJuIG1uLmZyb20oZSk7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuIEhyLmZyb20oZSk7Y2FzZSJzdHJ1Y3QiOnJldHVybiBJby5mcm9tKGUpfVJlKCExLGB1bnN1cHBvcnRlZCB0eXBlOiAke2UudHlwZX1gLCJVTlNVUFBPUlRFRF9PUEVSQVRJT04iLHtvcGVyYXRpb246IkZyYWdtZW50LmZyb20ifSl9RyghMSwidW5zdXBwb3J0ZWQgZnJnYW1lbnQgb2JqZWN0Iiwib2JqIixlKX1zdGF0aWMgaXNDb25zdHJ1Y3RvcihlKXtyZXR1cm4gSW4uaXNGcmFnbWVudChlKX1zdGF0aWMgaXNFcnJvcihlKXtyZXR1cm4gdHIuaXNGcmFnbWVudChlKX1zdGF0aWMgaXNFdmVudChlKXtyZXR1cm4gZm4uaXNGcmFnbWVudChlKX1zdGF0aWMgaXNGdW5jdGlvbihlKXtyZXR1cm4gSHIuaXNGcmFnbWVudChlKX1zdGF0aWMgaXNTdHJ1Y3QoZSl7cmV0dXJuIElvLmlzRnJhZ21lbnQoZSl9fWNsYXNzIEZjIGV4dGVuZHMgRm97Y29uc3RydWN0b3IodCxhLHMscil7c3VwZXIodCxhLHIpO1oodGhpcywibmFtZSIpO0codHlwZW9mIHM9PSJzdHJpbmciJiZzLm1hdGNoKHpiKSwiaW52YWxpZCBpZGVudGlmaWVyIiwibmFtZSIscykscj1PYmplY3QuZnJlZXplKHIuc2xpY2UoKSksemUodGhpcyx7bmFtZTpzfSl9fWZ1bmN0aW9uIEJhKG4sZSl7cmV0dXJuIigiK2UubWFwKHQ9PnQuZm9ybWF0KG4pKS5qb2luKG49PT0iZnVsbCI/IiwgIjoiLCIpKyIpIn1jbGFzcyB0ciBleHRlbmRzIEZje2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcihlLCJlcnJvciIsdCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxhcix7dmFsdWU6d3B9KX1nZXQgc2VsZWN0b3IoKXtyZXR1cm4gWnIodGhpcy5mb3JtYXQoInNpZ2hhc2giKSkuc3Vic3RyaW5nKDAsMTApfWZvcm1hdChlKXtpZihlPT1udWxsJiYoZT0ic2lnaGFzaCIpLGU9PT0ianNvbiIpcmV0dXJuIEpTT04uc3RyaW5naWZ5KHt0eXBlOiJlcnJvciIsbmFtZTp0aGlzLm5hbWUsaW5wdXRzOnRoaXMuaW5wdXRzLm1hcChhPT5KU09OLnBhcnNlKGEuZm9ybWF0KGUpKSl9KTtjb25zdCB0PVtdO3JldHVybiBlIT09InNpZ2hhc2giJiZ0LnB1c2goImVycm9yIiksdC5wdXNoKHRoaXMubmFtZStCYShlLHRoaXMuaW5wdXRzKSksdC5qb2luKCIgIil9c3RhdGljIGZyb20oZSl7aWYodHIuaXNGcmFnbWVudChlKSlyZXR1cm4gZTtpZih0eXBlb2YgZT09InN0cmluZyIpcmV0dXJuIHRyLmZyb20ocm8oZSkpO2lmKGUgaW5zdGFuY2VvZiBobil7Y29uc3QgdD1NYygiZXJyb3IiLGUpLGE9X24oZSk7cmV0dXJuIE1vKGUpLG5ldyB0cihmdCx0LGEpfXJldHVybiBuZXcgdHIoZnQsZS5uYW1lLGUuaW5wdXRzP2UuaW5wdXRzLm1hcChvci5mcm9tKTpbXSl9c3RhdGljIGlzRnJhZ21lbnQoZSl7cmV0dXJuIGUmJmVbYXJdPT09d3B9fWNsYXNzIGZuIGV4dGVuZHMgRmN7Y29uc3RydWN0b3IodCxhLHMscil7c3VwZXIodCwiZXZlbnQiLGEscyk7Wih0aGlzLCJhbm9ueW1vdXMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxhcix7dmFsdWU6dnB9KSx6ZSh0aGlzLHthbm9ueW1vdXM6cn0pfWdldCB0b3BpY0hhc2goKXtyZXR1cm4gWnIodGhpcy5mb3JtYXQoInNpZ2hhc2giKSl9Zm9ybWF0KHQpe2lmKHQ9PW51bGwmJih0PSJzaWdoYXNoIiksdD09PSJqc29uIilyZXR1cm4gSlNPTi5zdHJpbmdpZnkoe3R5cGU6ImV2ZW50Iixhbm9ueW1vdXM6dGhpcy5hbm9ueW1vdXMsbmFtZTp0aGlzLm5hbWUsaW5wdXRzOnRoaXMuaW5wdXRzLm1hcChzPT5KU09OLnBhcnNlKHMuZm9ybWF0KHQpKSl9KTtjb25zdCBhPVtdO3JldHVybiB0IT09InNpZ2hhc2giJiZhLnB1c2goImV2ZW50IiksYS5wdXNoKHRoaXMubmFtZStCYSh0LHRoaXMuaW5wdXRzKSksdCE9PSJzaWdoYXNoIiYmdGhpcy5hbm9ueW1vdXMmJmEucHVzaCgiYW5vbnltb3VzIiksYS5qb2luKCIgIil9c3RhdGljIGdldFRvcGljSGFzaCh0LGEpe3JldHVybiBhPShhfHxbXSkubWFwKHI9Pm9yLmZyb20ocikpLG5ldyBmbihmdCx0LGEsITEpLnRvcGljSGFzaH1zdGF0aWMgZnJvbSh0KXtpZihmbi5pc0ZyYWdtZW50KHQpKXJldHVybiB0O2lmKHR5cGVvZiB0PT0ic3RyaW5nIilyZXR1cm4gZm4uZnJvbShybyh0KSk7aWYodCBpbnN0YW5jZW9mIGhuKXtjb25zdCBhPU1jKCJldmVudCIsdCkscz1fbih0LCEwKSxyPSEhT24odCxIdChbImFub255bW91cyJdKSkuaGFzKCJhbm9ueW1vdXMiKTtyZXR1cm4gTW8odCksbmV3IGZuKGZ0LGEscyxyKX1yZXR1cm4gbmV3IGZuKGZ0LHQubmFtZSx0LmlucHV0cz90LmlucHV0cy5tYXAoYT0+b3IuZnJvbShhLCEwKSk6W10sISF0LmFub255bW91cyl9c3RhdGljIGlzRnJhZ21lbnQodCl7cmV0dXJuIHQmJnRbYXJdPT09dnB9fWNsYXNzIEluIGV4dGVuZHMgRm97Y29uc3RydWN0b3IodCxhLHMscixvKXtzdXBlcih0LGEscyk7Wih0aGlzLCJwYXlhYmxlIik7Wih0aGlzLCJnYXMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxhcix7dmFsdWU6Q3B9KSx6ZSh0aGlzLHtwYXlhYmxlOnIsZ2FzOm99KX1mb3JtYXQodCl7aWYoUmUodCE9bnVsbCYmdCE9PSJzaWdoYXNoIiwiY2Fubm90IGZvcm1hdCBhIGNvbnN0cnVjdG9yIGZvciBzaWdoYXNoIiwiVU5TVVBQT1JURURfT1BFUkFUSU9OIix7b3BlcmF0aW9uOiJmb3JtYXQoc2lnaGFzaCkifSksdD09PSJqc29uIilyZXR1cm4gSlNPTi5zdHJpbmdpZnkoe3R5cGU6ImNvbnN0cnVjdG9yIixzdGF0ZU11dGFiaWxpdHk6dGhpcy5wYXlhYmxlPyJwYXlhYmxlIjoidW5kZWZpbmVkIixwYXlhYmxlOnRoaXMucGF5YWJsZSxnYXM6dGhpcy5nYXMhPW51bGw/dGhpcy5nYXM6dm9pZCAwLGlucHV0czp0aGlzLmlucHV0cy5tYXAocz0+SlNPTi5wYXJzZShzLmZvcm1hdCh0KSkpfSk7Y29uc3QgYT1bYGNvbnN0cnVjdG9yJHtCYSh0LHRoaXMuaW5wdXRzKX1gXTtyZXR1cm4gYS5wdXNoKHRoaXMucGF5YWJsZT8icGF5YWJsZSI6Im5vbnBheWFibGUiKSx0aGlzLmdhcyE9bnVsbCYmYS5wdXNoKGBAJHt0aGlzLmdhcy50b1N0cmluZygpfWApLGEuam9pbigiICIpfXN0YXRpYyBmcm9tKHQpe2lmKEluLmlzRnJhZ21lbnQodCkpcmV0dXJuIHQ7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiBJbi5mcm9tKHJvKHQpKTtpZih0IGluc3RhbmNlb2YgaG4pe09uKHQsSHQoWyJjb25zdHJ1Y3RvciJdKSk7Y29uc3QgYT1fbih0KSxzPSEhT24odCxIdChbInBheWFibGUiXSkpLmhhcygicGF5YWJsZSIpLHI9R2IodCk7cmV0dXJuIE1vKHQpLG5ldyBJbihmdCwiY29uc3RydWN0b3IiLGEscyxyKX1yZXR1cm4gbmV3IEluKGZ0LCJjb25zdHJ1Y3RvciIsdC5pbnB1dHM/dC5pbnB1dHMubWFwKG9yLmZyb20pOltdLCEhdC5wYXlhYmxlLHQuZ2FzIT1udWxsP3QuZ2FzOm51bGwpfXN0YXRpYyBpc0ZyYWdtZW50KHQpe3JldHVybiB0JiZ0W2FyXT09PUNwfX1jbGFzcyBtbiBleHRlbmRzIEZve2NvbnN0cnVjdG9yKHQsYSxzKXtzdXBlcih0LCJmYWxsYmFjayIsYSk7Wih0aGlzLCJwYXlhYmxlIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYXIse3ZhbHVlOkVwfSksemUodGhpcyx7cGF5YWJsZTpzfSl9Zm9ybWF0KHQpe2NvbnN0IGE9dGhpcy5pbnB1dHMubGVuZ3RoPT09MD8icmVjZWl2ZSI6ImZhbGxiYWNrIjtpZih0PT09Impzb24iKXtjb25zdCBzPXRoaXMucGF5YWJsZT8icGF5YWJsZSI6Im5vbnBheWFibGUiO3JldHVybiBKU09OLnN0cmluZ2lmeSh7dHlwZTphLHN0YXRlTXV0YWJpbGl0eTpzfSl9cmV0dXJuYCR7YX0oKSR7dGhpcy5wYXlhYmxlPyIgcGF5YWJsZSI6IiJ9YH1zdGF0aWMgZnJvbSh0KXtpZihtbi5pc0ZyYWdtZW50KHQpKXJldHVybiB0O2lmKHR5cGVvZiB0PT0ic3RyaW5nIilyZXR1cm4gbW4uZnJvbShybyh0KSk7aWYodCBpbnN0YW5jZW9mIGhuKXtjb25zdCBhPXQudG9TdHJpbmcoKSxzPXQucGVla0tleXdvcmQoSHQoWyJmYWxsYmFjayIsInJlY2VpdmUiXSkpO2lmKEcocywidHlwZSBtdXN0IGJlIGZhbGxiYWNrIG9yIHJlY2VpdmUiLCJvYmoiLGEpLHQucG9wS2V5d29yZChIdChbImZhbGxiYWNrIiwicmVjZWl2ZSJdKSk9PT0icmVjZWl2ZSIpe2NvbnN0IGM9X24odCk7cmV0dXJuIEcoYy5sZW5ndGg9PT0wLCJyZWNlaXZlIGNhbm5vdCBoYXZlIGFyZ3VtZW50cyIsIm9iai5pbnB1dHMiLGMpLE9uKHQsSHQoWyJwYXlhYmxlIl0pKSxNbyh0KSxuZXcgbW4oZnQsW10sITApfWxldCBvPV9uKHQpO28ubGVuZ3RoP0coby5sZW5ndGg9PT0xJiZvWzBdLnR5cGU9PT0iYnl0ZXMiLCJpbnZhbGlkIGZhbGxiYWNrIGlucHV0cyIsIm9iai5pbnB1dHMiLG8ubWFwKGM9PmMuZm9ybWF0KCJtaW5pbWFsIikpLmpvaW4oIiwgIikpOm89W29yLmZyb20oImJ5dGVzIildO2NvbnN0IGk9VmIodCk7aWYoRyhpPT09Im5vbnBheWFibGUifHxpPT09InBheWFibGUiLCJmYWxsYmFjayBjYW5ub3QgYmUgY29uc3RhbnRzIiwib2JqLnN0YXRlTXV0YWJpbGl0eSIsaSksT24odCxIdChbInJldHVybnMiXSkpLmhhcygicmV0dXJucyIpKXtjb25zdCBjPV9uKHQpO0coYy5sZW5ndGg9PT0xJiZjWzBdLnR5cGU9PT0iYnl0ZXMiLCJpbnZhbGlkIGZhbGxiYWNrIG91dHB1dHMiLCJvYmoub3V0cHV0cyIsYy5tYXAoZj0+Zi5mb3JtYXQoIm1pbmltYWwiKSkuam9pbigiLCAiKSl9cmV0dXJuIE1vKHQpLG5ldyBtbihmdCxvLGk9PT0icGF5YWJsZSIpfWlmKHQudHlwZT09PSJyZWNlaXZlIilyZXR1cm4gbmV3IG1uKGZ0LFtdLCEwKTtpZih0LnR5cGU9PT0iZmFsbGJhY2siKXtjb25zdCBhPVtvci5mcm9tKCJieXRlcyIpXSxzPXQuc3RhdGVNdXRhYmlsaXR5PT09InBheWFibGUiO3JldHVybiBuZXcgbW4oZnQsYSxzKX1HKCExLCJpbnZhbGlkIGZhbGxiYWNrIGRlc2NyaXB0aW9uIiwib2JqIix0KX1zdGF0aWMgaXNGcmFnbWVudCh0KXtyZXR1cm4gdCYmdFthcl09PT1FcH19Y2xhc3MgSHIgZXh0ZW5kcyBGY3tjb25zdHJ1Y3Rvcih0LGEscyxyLG8saSl7c3VwZXIodCwiZnVuY3Rpb24iLGEscik7Wih0aGlzLCJjb25zdGFudCIpO1oodGhpcywib3V0cHV0cyIpO1oodGhpcywic3RhdGVNdXRhYmlsaXR5Iik7Wih0aGlzLCJwYXlhYmxlIik7Wih0aGlzLCJnYXMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxhcix7dmFsdWU6V3B9KSxvPU9iamVjdC5mcmVlemUoby5zbGljZSgpKSx6ZSh0aGlzLHtjb25zdGFudDpzPT09InZpZXcifHxzPT09InB1cmUiLGdhczppLG91dHB1dHM6byxwYXlhYmxlOnM9PT0icGF5YWJsZSIsc3RhdGVNdXRhYmlsaXR5OnN9KX1nZXQgc2VsZWN0b3IoKXtyZXR1cm4gWnIodGhpcy5mb3JtYXQoInNpZ2hhc2giKSkuc3Vic3RyaW5nKDAsMTApfWZvcm1hdCh0KXtpZih0PT1udWxsJiYodD0ic2lnaGFzaCIpLHQ9PT0ianNvbiIpcmV0dXJuIEpTT04uc3RyaW5naWZ5KHt0eXBlOiJmdW5jdGlvbiIsbmFtZTp0aGlzLm5hbWUsY29uc3RhbnQ6dGhpcy5jb25zdGFudCxzdGF0ZU11dGFiaWxpdHk6dGhpcy5zdGF0ZU11dGFiaWxpdHkhPT0ibm9ucGF5YWJsZSI/dGhpcy5zdGF0ZU11dGFiaWxpdHk6dm9pZCAwLHBheWFibGU6dGhpcy5wYXlhYmxlLGdhczp0aGlzLmdhcyE9bnVsbD90aGlzLmdhczp2b2lkIDAsaW5wdXRzOnRoaXMuaW5wdXRzLm1hcChzPT5KU09OLnBhcnNlKHMuZm9ybWF0KHQpKSksb3V0cHV0czp0aGlzLm91dHB1dHMubWFwKHM9PkpTT04ucGFyc2Uocy5mb3JtYXQodCkpKX0pO2NvbnN0IGE9W107cmV0dXJuIHQhPT0ic2lnaGFzaCImJmEucHVzaCgiZnVuY3Rpb24iKSxhLnB1c2godGhpcy5uYW1lK0JhKHQsdGhpcy5pbnB1dHMpKSx0IT09InNpZ2hhc2giJiYodGhpcy5zdGF0ZU11dGFiaWxpdHkhPT0ibm9ucGF5YWJsZSImJmEucHVzaCh0aGlzLnN0YXRlTXV0YWJpbGl0eSksdGhpcy5vdXRwdXRzJiZ0aGlzLm91dHB1dHMubGVuZ3RoJiYoYS5wdXNoKCJyZXR1cm5zIiksYS5wdXNoKEJhKHQsdGhpcy5vdXRwdXRzKSkpLHRoaXMuZ2FzIT1udWxsJiZhLnB1c2goYEAke3RoaXMuZ2FzLnRvU3RyaW5nKCl9YCkpLGEuam9pbigiICIpfXN0YXRpYyBnZXRTZWxlY3Rvcih0LGEpe3JldHVybiBhPShhfHxbXSkubWFwKHI9Pm9yLmZyb20ocikpLG5ldyBIcihmdCx0LCJ2aWV3IixhLFtdLG51bGwpLnNlbGVjdG9yfXN0YXRpYyBmcm9tKHQpe2lmKEhyLmlzRnJhZ21lbnQodCkpcmV0dXJuIHQ7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiBIci5mcm9tKHJvKHQpKTtpZih0IGluc3RhbmNlb2YgaG4pe2NvbnN0IHM9TWMoImZ1bmN0aW9uIix0KSxyPV9uKHQpLG89VmIodCk7bGV0IGk9W107T24odCxIdChbInJldHVybnMiXSkpLmhhcygicmV0dXJucyIpJiYoaT1fbih0KSk7Y29uc3QgYz1HYih0KTtyZXR1cm4gTW8odCksbmV3IEhyKGZ0LHMsbyxyLGksYyl9bGV0IGE9dC5zdGF0ZU11dGFiaWxpdHk7cmV0dXJuIGE9PW51bGwmJihhPSJwYXlhYmxlIix0eXBlb2YgdC5jb25zdGFudD09ImJvb2xlYW4iPyhhPSJ2aWV3Iix0LmNvbnN0YW50fHwoYT0icGF5YWJsZSIsdHlwZW9mIHQucGF5YWJsZT09ImJvb2xlYW4iJiYhdC5wYXlhYmxlJiYoYT0ibm9ucGF5YWJsZSIpKSk6dHlwZW9mIHQucGF5YWJsZT09ImJvb2xlYW4iJiYhdC5wYXlhYmxlJiYoYT0ibm9ucGF5YWJsZSIpKSxuZXcgSHIoZnQsdC5uYW1lLGEsdC5pbnB1dHM/dC5pbnB1dHMubWFwKG9yLmZyb20pOltdLHQub3V0cHV0cz90Lm91dHB1dHMubWFwKG9yLmZyb20pOltdLHQuZ2FzIT1udWxsP3QuZ2FzOm51bGwpfXN0YXRpYyBpc0ZyYWdtZW50KHQpe3JldHVybiB0JiZ0W2FyXT09PVdwfX1jbGFzcyBJbyBleHRlbmRzIEZje2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcihlLCJzdHJ1Y3QiLHQsYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsYXIse3ZhbHVlOkJwfSl9Zm9ybWF0KCl7dGhyb3cgbmV3IEVycm9yKCJAVE9ETyIpfXN0YXRpYyBmcm9tKGUpe2lmKHR5cGVvZiBlPT0ic3RyaW5nIilyZXR1cm4gSW8uZnJvbShybyhlKSk7aWYoZSBpbnN0YW5jZW9mIGhuKXtjb25zdCB0PU1jKCJzdHJ1Y3QiLGUpLGE9X24oZSk7cmV0dXJuIE1vKGUpLG5ldyBJbyhmdCx0LGEpfXJldHVybiBuZXcgSW8oZnQsZS5uYW1lLGUuaW5wdXRzP2UuaW5wdXRzLm1hcChvci5mcm9tKTpbXSl9c3RhdGljIGlzRnJhZ21lbnQoZSl7cmV0dXJuIGUmJmVbYXJdPT09QnB9fWNsYXNzIFdte2NvbnN0cnVjdG9yKGUsdCxhKXtaKHRoaXMsImZyYWdtZW50Iik7Wih0aGlzLCJuYW1lIik7Wih0aGlzLCJzaWduYXR1cmUiKTtaKHRoaXMsInRvcGljIik7Wih0aGlzLCJhcmdzIik7Y29uc3Qgcz1lLm5hbWUscj1lLmZvcm1hdCgpO3plKHRoaXMse2ZyYWdtZW50OmUsbmFtZTpzLHNpZ25hdHVyZTpyLHRvcGljOnQsYXJnczphfSl9fWNsYXNzIEJte2NvbnN0cnVjdG9yKGUsdCxhLHMpe1oodGhpcywiZnJhZ21lbnQiKTtaKHRoaXMsIm5hbWUiKTtaKHRoaXMsImFyZ3MiKTtaKHRoaXMsInNpZ25hdHVyZSIpO1oodGhpcywic2VsZWN0b3IiKTtaKHRoaXMsInZhbHVlIik7Y29uc3Qgcj1lLm5hbWUsbz1lLmZvcm1hdCgpO3plKHRoaXMse2ZyYWdtZW50OmUsbmFtZTpyLGFyZ3M6YSxzaWduYXR1cmU6byxzZWxlY3Rvcjp0LHZhbHVlOnN9KX19Y2xhc3MgSW17Y29uc3RydWN0b3IoZSx0LGEpe1oodGhpcywiZnJhZ21lbnQiKTtaKHRoaXMsIm5hbWUiKTtaKHRoaXMsImFyZ3MiKTtaKHRoaXMsInNpZ25hdHVyZSIpO1oodGhpcywic2VsZWN0b3IiKTtjb25zdCBzPWUubmFtZSxyPWUuZm9ybWF0KCk7emUodGhpcyx7ZnJhZ21lbnQ6ZSxuYW1lOnMsYXJnczphLHNpZ25hdHVyZTpyLHNlbGVjdG9yOnR9KX19Y2xhc3MgSXB7Y29uc3RydWN0b3IoZSl7Wih0aGlzLCJoYXNoIik7Wih0aGlzLCJfaXNJbmRleGVkIik7emUodGhpcyx7aGFzaDplLF9pc0luZGV4ZWQ6ITB9KX1zdGF0aWMgaXNJbmRleGVkKGUpe3JldHVybiEhKGUmJmUuX2lzSW5kZXhlZCl9fWNvbnN0IFNwPXswOiJnZW5lcmljIHBhbmljIiwxOiJhc3NlcnQoZmFsc2UpIiwxNzoiYXJpdGhtZXRpYyBvdmVyZmxvdyIsMTg6ImRpdmlzaW9uIG9yIG1vZHVsbyBieSB6ZXJvIiwzMzoiZW51bSBvdmVyZmxvdyIsMzQ6ImludmFsaWQgZW5jb2RlZCBzdG9yYWdlIGJ5dGUgYXJyYXkgYWNjZXNzZWQiLDQ5OiJvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzczsgcG9wcGluZyBvbiBhbiBlbXB0eSBhcnJheSIsNTA6Im91dC1vZi1ib3VuZHMgYWNjZXNzIG9mIGFuIGFycmF5IG9yIGJ5dGVzTiIsNjU6Im91dCBvZiBtZW1vcnkiLDgxOiJ1bmluaXRpYWxpemVkIGZ1bmN0aW9uIn0sX3A9eyIweDA4YzM3OWEwIjp7c2lnbmF0dXJlOiJFcnJvcihzdHJpbmcpIixuYW1lOiJFcnJvciIsaW5wdXRzOlsic3RyaW5nIl0scmVhc29uOm49PmByZXZlcnRlZCB3aXRoIHJlYXNvbiBzdHJpbmcgJHtKU09OLnN0cmluZ2lmeShuKX1gfSwiMHg0ZTQ4N2I3MSI6e3NpZ25hdHVyZToiUGFuaWModWludDI1NikiLG5hbWU6IlBhbmljIixpbnB1dHM6WyJ1aW50MjU2Il0scmVhc29uOm49PntsZXQgZT0idW5rbm93biBwYW5pYyBjb2RlIjtyZXR1cm4gbj49MCYmbjw9MjU1JiZTcFtuLnRvU3RyaW5nKCldJiYoZT1TcFtuLnRvU3RyaW5nKCldKSxgcmV2ZXJ0ZWQgd2l0aCBwYW5pYyBjb2RlIDB4JHtuLnRvU3RyaW5nKDE2KX0gKCR7ZX0pYH19fTt2YXIgY24sdW4sbG4sTXQsZG4sWGksUWk7Y29uc3QgY3M9Y2xhc3MgY3N7Y29uc3RydWN0b3IoZSl7UGUodGhpcyxkbik7Wih0aGlzLCJmcmFnbWVudHMiKTtaKHRoaXMsImRlcGxveSIpO1oodGhpcywiZmFsbGJhY2siKTtaKHRoaXMsInJlY2VpdmUiKTtQZSh0aGlzLGNuKTtQZSh0aGlzLHVuKTtQZSh0aGlzLGxuKTtQZSh0aGlzLE10KTtsZXQgdD1bXTt0eXBlb2YgZT09InN0cmluZyI/dD1KU09OLnBhcnNlKGUpOnQ9ZSx1ZSh0aGlzLGxuLG5ldyBNYXApLHVlKHRoaXMsY24sbmV3IE1hcCksdWUodGhpcyx1bixuZXcgTWFwKTtjb25zdCBhPVtdO2Zvcihjb25zdCBvIG9mIHQpdHJ5e2EucHVzaChGby5mcm9tKG8pKX1jYXRjaChpKXtjb25zb2xlLmxvZygiRUUiLGkpfXplKHRoaXMse2ZyYWdtZW50czpPYmplY3QuZnJlZXplKGEpfSk7bGV0IHM9bnVsbCxyPSExO3VlKHRoaXMsTXQsdGhpcy5nZXRBYmlDb2RlcigpKSx0aGlzLmZyYWdtZW50cy5mb3JFYWNoKChvLGkpPT57bGV0IGM7c3dpdGNoKG8udHlwZSl7Y2FzZSJjb25zdHJ1Y3RvciI6aWYodGhpcy5kZXBsb3kpe2NvbnNvbGUubG9nKCJkdXBsaWNhdGUgZGVmaW5pdGlvbiAtIGNvbnN0cnVjdG9yIik7cmV0dXJufXplKHRoaXMse2RlcGxveTpvfSk7cmV0dXJuO2Nhc2UiZmFsbGJhY2siOm8uaW5wdXRzLmxlbmd0aD09PTA/cj0hMDooRyghc3x8by5wYXlhYmxlIT09cy5wYXlhYmxlLCJjb25mbGljdGluZyBmYWxsYmFjayBmcmFnbWVudHMiLGBmcmFnbWVudHNbJHtpfV1gLG8pLHM9byxyPXMucGF5YWJsZSk7cmV0dXJuO2Nhc2UiZnVuY3Rpb24iOmM9WSh0aGlzLGxuKTticmVhaztjYXNlImV2ZW50IjpjPVkodGhpcyx1bik7YnJlYWs7Y2FzZSJlcnJvciI6Yz1ZKHRoaXMsY24pO2JyZWFrO2RlZmF1bHQ6cmV0dXJufWNvbnN0IGY9by5mb3JtYXQoKTtjLmhhcyhmKXx8Yy5zZXQoZixvKX0pLHRoaXMuZGVwbG95fHx6ZSh0aGlzLHtkZXBsb3k6SW4uZnJvbSgiY29uc3RydWN0b3IoKSIpfSksemUodGhpcyx7ZmFsbGJhY2s6cyxyZWNlaXZlOnJ9KX1mb3JtYXQoZSl7Y29uc3QgdD1lPyJtaW5pbWFsIjoiZnVsbCI7cmV0dXJuIHRoaXMuZnJhZ21lbnRzLm1hcChzPT5zLmZvcm1hdCh0KSl9Zm9ybWF0SnNvbigpe2NvbnN0IGU9dGhpcy5mcmFnbWVudHMubWFwKHQ9PnQuZm9ybWF0KCJqc29uIikpO3JldHVybiBKU09OLnN0cmluZ2lmeShlLm1hcCh0PT5KU09OLnBhcnNlKHQpKSl9Z2V0QWJpQ29kZXIoKXtyZXR1cm4gWG4uZGVmYXVsdEFiaUNvZGVyKCl9Z2V0RnVuY3Rpb25OYW1lKGUpe2NvbnN0IHQ9RmUodGhpcyxkbixYaSkuY2FsbCh0aGlzLGUsbnVsbCwhMSk7cmV0dXJuIEcodCwibm8gbWF0Y2hpbmcgZnVuY3Rpb24iLCJrZXkiLGUpLHQubmFtZX1oYXNGdW5jdGlvbihlKXtyZXR1cm4hIUZlKHRoaXMsZG4sWGkpLmNhbGwodGhpcyxlLG51bGwsITEpfWdldEZ1bmN0aW9uKGUsdCl7cmV0dXJuIEZlKHRoaXMsZG4sWGkpLmNhbGwodGhpcyxlLHR8fG51bGwsITApfWZvckVhY2hGdW5jdGlvbihlKXtjb25zdCB0PUFycmF5LmZyb20oWSh0aGlzLGxuKS5rZXlzKCkpO3Quc29ydCgoYSxzKT0+YS5sb2NhbGVDb21wYXJlKHMpKTtmb3IobGV0IGE9MDthPHQubGVuZ3RoO2ErKyl7Y29uc3Qgcz10W2FdO2UoWSh0aGlzLGxuKS5nZXQocyksYSl9fWdldEV2ZW50TmFtZShlKXtjb25zdCB0PUZlKHRoaXMsZG4sUWkpLmNhbGwodGhpcyxlLG51bGwsITEpO3JldHVybiBHKHQsIm5vIG1hdGNoaW5nIGV2ZW50Iiwia2V5IixlKSx0Lm5hbWV9aGFzRXZlbnQoZSl7cmV0dXJuISFGZSh0aGlzLGRuLFFpKS5jYWxsKHRoaXMsZSxudWxsLCExKX1nZXRFdmVudChlLHQpe3JldHVybiBGZSh0aGlzLGRuLFFpKS5jYWxsKHRoaXMsZSx0fHxudWxsLCEwKX1mb3JFYWNoRXZlbnQoZSl7Y29uc3QgdD1BcnJheS5mcm9tKFkodGhpcyx1bikua2V5cygpKTt0LnNvcnQoKGEscyk9PmEubG9jYWxlQ29tcGFyZShzKSk7Zm9yKGxldCBhPTA7YTx0Lmxlbmd0aDthKyspe2NvbnN0IHM9dFthXTtlKFkodGhpcyx1bikuZ2V0KHMpLGEpfX1nZXRFcnJvcihlLHQpe2lmKE50KGUpKXtjb25zdCBzPWUudG9Mb3dlckNhc2UoKTtpZihfcFtzXSlyZXR1cm4gdHIuZnJvbShfcFtzXS5zaWduYXR1cmUpO2Zvcihjb25zdCByIG9mIFkodGhpcyxjbikudmFsdWVzKCkpaWYocz09PXIuc2VsZWN0b3IpcmV0dXJuIHI7cmV0dXJuIG51bGx9aWYoZS5pbmRleE9mKCIoIik9PT0tMSl7Y29uc3Qgcz1bXTtmb3IoY29uc3RbcixvXW9mIFkodGhpcyxjbikpci5zcGxpdCgiKCIpWzBdPT09ZSYmcy5wdXNoKG8pO2lmKHMubGVuZ3RoPT09MClyZXR1cm4gZT09PSJFcnJvciI/dHIuZnJvbSgiZXJyb3IgRXJyb3Ioc3RyaW5nKSIpOmU9PT0iUGFuaWMiP3RyLmZyb20oImVycm9yIFBhbmljKHVpbnQyNTYpIik6bnVsbDtpZihzLmxlbmd0aD4xKXtjb25zdCByPXMubWFwKG89PkpTT04uc3RyaW5naWZ5KG8uZm9ybWF0KCkpKS5qb2luKCIsICIpO0coITEsYGFtYmlndW91cyBlcnJvciBkZXNjcmlwdGlvbiAoaS5lLiAke3J9KWAsIm5hbWUiLGUpfXJldHVybiBzWzBdfWlmKGU9dHIuZnJvbShlKS5mb3JtYXQoKSxlPT09IkVycm9yKHN0cmluZykiKXJldHVybiB0ci5mcm9tKCJlcnJvciBFcnJvcihzdHJpbmcpIik7aWYoZT09PSJQYW5pYyh1aW50MjU2KSIpcmV0dXJuIHRyLmZyb20oImVycm9yIFBhbmljKHVpbnQyNTYpIik7Y29uc3QgYT1ZKHRoaXMsY24pLmdldChlKTtyZXR1cm4gYXx8bnVsbH1mb3JFYWNoRXJyb3IoZSl7Y29uc3QgdD1BcnJheS5mcm9tKFkodGhpcyxjbikua2V5cygpKTt0LnNvcnQoKGEscyk9PmEubG9jYWxlQ29tcGFyZShzKSk7Zm9yKGxldCBhPTA7YTx0Lmxlbmd0aDthKyspe2NvbnN0IHM9dFthXTtlKFkodGhpcyxjbikuZ2V0KHMpLGEpfX1fZGVjb2RlUGFyYW1zKGUsdCl7cmV0dXJuIFkodGhpcyxNdCkuZGVjb2RlKGUsdCl9X2VuY29kZVBhcmFtcyhlLHQpe3JldHVybiBZKHRoaXMsTXQpLmVuY29kZShlLHQpfWVuY29kZURlcGxveShlKXtyZXR1cm4gdGhpcy5fZW5jb2RlUGFyYW1zKHRoaXMuZGVwbG95LmlucHV0cyxlfHxbXSl9ZGVjb2RlRXJyb3JSZXN1bHQoZSx0KXtpZih0eXBlb2YgZT09InN0cmluZyIpe2NvbnN0IGE9dGhpcy5nZXRFcnJvcihlKTtHKGEsInVua25vd24gZXJyb3IiLCJmcmFnbWVudCIsZSksZT1hfXJldHVybiBHKEFuKHQsMCw0KT09PWUuc2VsZWN0b3IsYGRhdGEgc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoIGVycm9yICR7ZS5uYW1lfS5gLCJkYXRhIix0KSx0aGlzLl9kZWNvZGVQYXJhbXMoZS5pbnB1dHMsQW4odCw0KSl9ZW5jb2RlRXJyb3JSZXN1bHQoZSx0KXtpZih0eXBlb2YgZT09InN0cmluZyIpe2NvbnN0IGE9dGhpcy5nZXRFcnJvcihlKTtHKGEsInVua25vd24gZXJyb3IiLCJmcmFnbWVudCIsZSksZT1hfXJldHVybiBldChbZS5zZWxlY3Rvcix0aGlzLl9lbmNvZGVQYXJhbXMoZS5pbnB1dHMsdHx8W10pXSl9ZGVjb2RlRnVuY3Rpb25EYXRhKGUsdCl7aWYodHlwZW9mIGU9PSJzdHJpbmciKXtjb25zdCBhPXRoaXMuZ2V0RnVuY3Rpb24oZSk7RyhhLCJ1bmtub3duIGZ1bmN0aW9uIiwiZnJhZ21lbnQiLGUpLGU9YX1yZXR1cm4gRyhBbih0LDAsNCk9PT1lLnNlbGVjdG9yLGBkYXRhIHNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaCBmdW5jdGlvbiAke2UubmFtZX0uYCwiZGF0YSIsdCksdGhpcy5fZGVjb2RlUGFyYW1zKGUuaW5wdXRzLEFuKHQsNCkpfWVuY29kZUZ1bmN0aW9uRGF0YShlLHQpe2lmKHR5cGVvZiBlPT0ic3RyaW5nIil7Y29uc3QgYT10aGlzLmdldEZ1bmN0aW9uKGUpO0coYSwidW5rbm93biBmdW5jdGlvbiIsImZyYWdtZW50IixlKSxlPWF9cmV0dXJuIGV0KFtlLnNlbGVjdG9yLHRoaXMuX2VuY29kZVBhcmFtcyhlLmlucHV0cyx0fHxbXSldKX1kZWNvZGVGdW5jdGlvblJlc3VsdChlLHQpe2lmKHR5cGVvZiBlPT0ic3RyaW5nIil7Y29uc3Qgcj10aGlzLmdldEZ1bmN0aW9uKGUpO0cociwidW5rbm93biBmdW5jdGlvbiIsImZyYWdtZW50IixlKSxlPXJ9bGV0IGE9ImludmFsaWQgbGVuZ3RoIGZvciByZXN1bHQgZGF0YSI7Y29uc3Qgcz1GdCh0KTtpZihzLmxlbmd0aCUzMj09PTApdHJ5e3JldHVybiBZKHRoaXMsTXQpLmRlY29kZShlLm91dHB1dHMscyl9Y2F0Y2h7YT0iY291bGQgbm90IGRlY29kZSByZXN1bHQgZGF0YSJ9UmUoITEsYSwiQkFEX0RBVEEiLHt2YWx1ZTp5ZShzKSxpbmZvOnttZXRob2Q6ZS5uYW1lLHNpZ25hdHVyZTplLmZvcm1hdCgpfX0pfW1ha2VFcnJvcihlLHQpe2NvbnN0IGE9QWUoZSwiZGF0YSIpLHM9WG4uZ2V0QnVpbHRpbkNhbGxFeGNlcHRpb24oImNhbGwiLHQsYSk7aWYocy5tZXNzYWdlLnN0YXJ0c1dpdGgoImV4ZWN1dGlvbiByZXZlcnRlZCAodW5rbm93biBjdXN0b20gZXJyb3IpIikpe2NvbnN0IGk9eWUoYS5zbGljZSgwLDQpKSxjPXRoaXMuZ2V0RXJyb3IoaSk7aWYoYyl0cnl7Y29uc3QgZj1ZKHRoaXMsTXQpLmRlY29kZShjLmlucHV0cyxhLnNsaWNlKDQpKTtzLnJldmVydD17bmFtZTpjLm5hbWUsc2lnbmF0dXJlOmMuZm9ybWF0KCksYXJnczpmfSxzLnJlYXNvbj1zLnJldmVydC5zaWduYXR1cmUscy5tZXNzYWdlPWBleGVjdXRpb24gcmV2ZXJ0ZWQ6ICR7cy5yZWFzb259YH1jYXRjaHtzLm1lc3NhZ2U9ImV4ZWN1dGlvbiByZXZlcnRlZCAoY291bHQgbm90IGRlY29kZSBjdXN0b20gZXJyb3IpIn19Y29uc3Qgbz10aGlzLnBhcnNlVHJhbnNhY3Rpb24odCk7cmV0dXJuIG8mJihzLmludm9jYXRpb249e21ldGhvZDpvLm5hbWUsc2lnbmF0dXJlOm8uc2lnbmF0dXJlLGFyZ3M6by5hcmdzfSksc31lbmNvZGVGdW5jdGlvblJlc3VsdChlLHQpe2lmKHR5cGVvZiBlPT0ic3RyaW5nIil7Y29uc3QgYT10aGlzLmdldEZ1bmN0aW9uKGUpO0coYSwidW5rbm93biBmdW5jdGlvbiIsImZyYWdtZW50IixlKSxlPWF9cmV0dXJuIHllKFkodGhpcyxNdCkuZW5jb2RlKGUub3V0cHV0cyx0fHxbXSkpfWVuY29kZUZpbHRlclRvcGljcyhlLHQpe2lmKHR5cGVvZiBlPT0ic3RyaW5nIil7Y29uc3Qgcj10aGlzLmdldEV2ZW50KGUpO0cociwidW5rbm93biBldmVudCIsImV2ZW50RnJhZ21lbnQiLGUpLGU9cn1SZSh0Lmxlbmd0aDw9ZS5pbnB1dHMubGVuZ3RoLGB0b28gbWFueSBhcmd1bWVudHMgZm9yICR7ZS5mb3JtYXQoKX1gLCJVTkVYUEVDVEVEX0FSR1VNRU5UIix7Y291bnQ6dC5sZW5ndGgsZXhwZWN0ZWRDb3VudDplLmlucHV0cy5sZW5ndGh9KTtjb25zdCBhPVtdO2UuYW5vbnltb3VzfHxhLnB1c2goZS50b3BpY0hhc2gpO2NvbnN0IHM9KHIsbyk9PnIudHlwZT09PSJzdHJpbmciP1pyKG8pOnIudHlwZT09PSJieXRlcyI/JGUoeWUobykpOihyLnR5cGU9PT0iYm9vbCImJnR5cGVvZiBvPT0iYm9vbGVhbiImJihvPW8/IjB4MDEiOiIweDAwIiksci50eXBlLm1hdGNoKC9edT9pbnQvKSYmKG89S3IobykpLHIudHlwZT09PSJhZGRyZXNzIiYmWSh0aGlzLE10KS5lbmNvZGUoWyJhZGRyZXNzIl0sW29dKSxKbih5ZShvKSwzMikpO2Zvcih0LmZvckVhY2goKHIsbyk9Pntjb25zdCBpPWUuaW5wdXRzW29dO2lmKCFpLmluZGV4ZWQpe0cocj09bnVsbCwiY2Fubm90IGZpbHRlciBub24taW5kZXhlZCBwYXJhbWV0ZXJzOyBtdXN0IGJlIG51bGwiLCJjb250cmFjdC4iK2kubmFtZSxyKTtyZXR1cm59cj09bnVsbD9hLnB1c2gobnVsbCk6aS5iYXNlVHlwZT09PSJhcnJheSJ8fGkuYmFzZVR5cGU9PT0idHVwbGUiP0coITEsImZpbHRlcmluZyB3aXRoIHR1cGxlcyBvciBhcnJheXMgbm90IHN1cHBvcnRlZCIsImNvbnRyYWN0LiIraS5uYW1lLHIpOkFycmF5LmlzQXJyYXkocik/YS5wdXNoKHIubWFwKGM9PnMoaSxjKSkpOmEucHVzaChzKGkscikpfSk7YS5sZW5ndGgmJmFbYS5sZW5ndGgtMV09PT1udWxsOylhLnBvcCgpO3JldHVybiBhfWVuY29kZUV2ZW50TG9nKGUsdCl7aWYodHlwZW9mIGU9PSJzdHJpbmciKXtjb25zdCBvPXRoaXMuZ2V0RXZlbnQoZSk7RyhvLCJ1bmtub3duIGV2ZW50IiwiZXZlbnRGcmFnbWVudCIsZSksZT1vfWNvbnN0IGE9W10scz1bXSxyPVtdO3JldHVybiBlLmFub255bW91c3x8YS5wdXNoKGUudG9waWNIYXNoKSxHKHQubGVuZ3RoPT09ZS5pbnB1dHMubGVuZ3RoLCJldmVudCBhcmd1bWVudHMvdmFsdWVzIG1pc21hdGNoIiwidmFsdWVzIix0KSxlLmlucHV0cy5mb3JFYWNoKChvLGkpPT57Y29uc3QgYz10W2ldO2lmKG8uaW5kZXhlZClpZihvLnR5cGU9PT0ic3RyaW5nIilhLnB1c2goWnIoYykpO2Vsc2UgaWYoby50eXBlPT09ImJ5dGVzIilhLnB1c2goJGUoYykpO2Vsc2V7aWYoby5iYXNlVHlwZT09PSJ0dXBsZSJ8fG8uYmFzZVR5cGU9PT0iYXJyYXkiKXRocm93IG5ldyBFcnJvcigibm90IGltcGxlbWVudGVkIik7YS5wdXNoKFkodGhpcyxNdCkuZW5jb2RlKFtvLnR5cGVdLFtjXSkpfWVsc2Ugcy5wdXNoKG8pLHIucHVzaChjKX0pLHtkYXRhOlkodGhpcyxNdCkuZW5jb2RlKHMsciksdG9waWNzOmF9fWRlY29kZUV2ZW50TG9nKGUsdCxhKXtpZih0eXBlb2YgZT09InN0cmluZyIpe2NvbnN0IFQ9dGhpcy5nZXRFdmVudChlKTtHKFQsInVua25vd24gZXZlbnQiLCJldmVudEZyYWdtZW50IixlKSxlPVR9aWYoYSE9bnVsbCYmIWUuYW5vbnltb3VzKXtjb25zdCBUPWUudG9waWNIYXNoO0coTnQoYVswXSwzMikmJmFbMF0udG9Mb3dlckNhc2UoKT09PVQsImZyYWdtZW50L3RvcGljIG1pc21hdGNoIiwidG9waWNzWzBdIixhWzBdKSxhPWEuc2xpY2UoMSl9Y29uc3Qgcz1bXSxyPVtdLG89W107ZS5pbnB1dHMuZm9yRWFjaCgoVCxXKT0+e1QuaW5kZXhlZD9ULnR5cGU9PT0ic3RyaW5nInx8VC50eXBlPT09ImJ5dGVzInx8VC5iYXNlVHlwZT09PSJ0dXBsZSJ8fFQuYmFzZVR5cGU9PT0iYXJyYXkiPyhzLnB1c2gob3IuZnJvbSh7dHlwZToiYnl0ZXMzMiIsbmFtZTpULm5hbWV9KSksby5wdXNoKCEwKSk6KHMucHVzaChUKSxvLnB1c2goITEpKTooci5wdXNoKFQpLG8ucHVzaCghMSkpfSk7Y29uc3QgaT1hIT1udWxsP1kodGhpcyxNdCkuZGVjb2RlKHMsZXQoYSkpOm51bGwsYz1ZKHRoaXMsTXQpLmRlY29kZShyLHQsITApLGY9W10sZD1bXTtsZXQgcD0wLGI9MDtyZXR1cm4gZS5pbnB1dHMuZm9yRWFjaCgoVCxXKT0+e2xldCBnPW51bGw7aWYoVC5pbmRleGVkKWlmKGk9PW51bGwpZz1uZXcgSXAobnVsbCk7ZWxzZSBpZihvW1ddKWc9bmV3IElwKGlbYisrXSk7ZWxzZSB0cnl7Zz1pW2IrK119Y2F0Y2goQSl7Zz1BfWVsc2UgdHJ5e2c9Y1twKytdfWNhdGNoKEEpe2c9QX1mLnB1c2goZyksZC5wdXNoKFQubmFtZXx8bnVsbCl9KSxGcy5mcm9tSXRlbXMoZixkKX1wYXJzZVRyYW5zYWN0aW9uKGUpe2NvbnN0IHQ9QWUoZS5kYXRhLCJ0eC5kYXRhIiksYT10dChlLnZhbHVlIT1udWxsP2UudmFsdWU6MCwidHgudmFsdWUiKSxzPXRoaXMuZ2V0RnVuY3Rpb24oeWUodC5zbGljZSgwLDQpKSk7aWYoIXMpcmV0dXJuIG51bGw7Y29uc3Qgcj1ZKHRoaXMsTXQpLmRlY29kZShzLmlucHV0cyx0LnNsaWNlKDQpKTtyZXR1cm4gbmV3IEJtKHMscy5zZWxlY3RvcixyLGEpfXBhcnNlQ2FsbFJlc3VsdChlKXt0aHJvdyBuZXcgRXJyb3IoIkBUT0RPIil9cGFyc2VMb2coZSl7Y29uc3QgdD10aGlzLmdldEV2ZW50KGUudG9waWNzWzBdKTtyZXR1cm4hdHx8dC5hbm9ueW1vdXM/bnVsbDpuZXcgV20odCx0LnRvcGljSGFzaCx0aGlzLmRlY29kZUV2ZW50TG9nKHQsZS5kYXRhLGUudG9waWNzKSl9cGFyc2VFcnJvcihlKXtjb25zdCB0PXllKGUpLGE9dGhpcy5nZXRFcnJvcihBbih0LDAsNCkpO2lmKCFhKXJldHVybiBudWxsO2NvbnN0IHM9WSh0aGlzLE10KS5kZWNvZGUoYS5pbnB1dHMsQW4odCw0KSk7cmV0dXJuIG5ldyBJbShhLGEuc2VsZWN0b3Iscyl9c3RhdGljIGZyb20oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBjcz9lOnR5cGVvZiBlPT0ic3RyaW5nIj9uZXcgY3MoSlNPTi5wYXJzZShlKSk6dHlwZW9mIGUuZm9ybWF0PT0iZnVuY3Rpb24iP25ldyBjcyhlLmZvcm1hdCgianNvbiIpKTpuZXcgY3MoZSl9fTtjbj1uZXcgV2Vha01hcCx1bj1uZXcgV2Vha01hcCxsbj1uZXcgV2Vha01hcCxNdD1uZXcgV2Vha01hcCxkbj1uZXcgV2Vha1NldCxYaT1mdW5jdGlvbihlLHQsYSl7aWYoTnQoZSkpe2NvbnN0IHI9ZS50b0xvd2VyQ2FzZSgpO2Zvcihjb25zdCBvIG9mIFkodGhpcyxsbikudmFsdWVzKCkpaWYocj09PW8uc2VsZWN0b3IpcmV0dXJuIG87cmV0dXJuIG51bGx9aWYoZS5pbmRleE9mKCIoIik9PT0tMSl7Y29uc3Qgcj1bXTtmb3IoY29uc3RbbyxpXW9mIFkodGhpcyxsbikpby5zcGxpdCgiKCIpWzBdPT09ZSYmci5wdXNoKGkpO2lmKHQpe2NvbnN0IG89dC5sZW5ndGg+MD90W3QubGVuZ3RoLTFdOm51bGw7bGV0IGk9dC5sZW5ndGgsYz0hMDtuci5pc1R5cGVkKG8pJiZvLnR5cGU9PT0ib3ZlcnJpZGVzIiYmKGM9ITEsaS0tKTtmb3IobGV0IGY9ci5sZW5ndGgtMTtmPj0wO2YtLSl7Y29uc3QgZD1yW2ZdLmlucHV0cy5sZW5ndGg7ZCE9PWkmJighY3x8ZCE9PWktMSkmJnIuc3BsaWNlKGYsMSl9Zm9yKGxldCBmPXIubGVuZ3RoLTE7Zj49MDtmLS0pe2NvbnN0IGQ9cltmXS5pbnB1dHM7Zm9yKGxldCBwPTA7cDx0Lmxlbmd0aDtwKyspaWYobnIuaXNUeXBlZCh0W3BdKSl7aWYocD49ZC5sZW5ndGgpe2lmKHRbcF0udHlwZT09PSJvdmVycmlkZXMiKWNvbnRpbnVlO3Iuc3BsaWNlKGYsMSk7YnJlYWt9aWYodFtwXS50eXBlIT09ZFtwXS5iYXNlVHlwZSl7ci5zcGxpY2UoZiwxKTticmVha319fX1pZihyLmxlbmd0aD09PTEmJnQmJnQubGVuZ3RoIT09clswXS5pbnB1dHMubGVuZ3RoKXtjb25zdCBvPXRbdC5sZW5ndGgtMV07KG89PW51bGx8fEFycmF5LmlzQXJyYXkobyl8fHR5cGVvZiBvIT0ib2JqZWN0IikmJnIuc3BsaWNlKDAsMSl9aWYoci5sZW5ndGg9PT0wKXJldHVybiBudWxsO2lmKHIubGVuZ3RoPjEmJmEpe2NvbnN0IG89ci5tYXAoaT0+SlNPTi5zdHJpbmdpZnkoaS5mb3JtYXQoKSkpLmpvaW4oIiwgIik7RyghMSxgYW1iaWd1b3VzIGZ1bmN0aW9uIGRlc2NyaXB0aW9uIChpLmUuIG1hdGNoZXMgJHtvfSlgLCJrZXkiLGUpfXJldHVybiByWzBdfWNvbnN0IHM9WSh0aGlzLGxuKS5nZXQoSHIuZnJvbShlKS5mb3JtYXQoKSk7cmV0dXJuIHN8fG51bGx9LFFpPWZ1bmN0aW9uKGUsdCxhKXtpZihOdChlKSl7Y29uc3Qgcj1lLnRvTG93ZXJDYXNlKCk7Zm9yKGNvbnN0IG8gb2YgWSh0aGlzLHVuKS52YWx1ZXMoKSlpZihyPT09by50b3BpY0hhc2gpcmV0dXJuIG87cmV0dXJuIG51bGx9aWYoZS5pbmRleE9mKCIoIik9PT0tMSl7Y29uc3Qgcj1bXTtmb3IoY29uc3RbbyxpXW9mIFkodGhpcyx1bikpby5zcGxpdCgiKCIpWzBdPT09ZSYmci5wdXNoKGkpO2lmKHQpe2ZvcihsZXQgbz1yLmxlbmd0aC0xO28+PTA7by0tKXJbb10uaW5wdXRzLmxlbmd0aDx0Lmxlbmd0aCYmci5zcGxpY2UobywxKTtmb3IobGV0IG89ci5sZW5ndGgtMTtvPj0wO28tLSl7Y29uc3QgaT1yW29dLmlucHV0cztmb3IobGV0IGM9MDtjPHQubGVuZ3RoO2MrKylpZihuci5pc1R5cGVkKHRbY10pJiZ0W2NdLnR5cGUhPT1pW2NdLmJhc2VUeXBlKXtyLnNwbGljZShvLDEpO2JyZWFrfX19aWYoci5sZW5ndGg9PT0wKXJldHVybiBudWxsO2lmKHIubGVuZ3RoPjEmJmEpe2NvbnN0IG89ci5tYXAoaT0+SlNPTi5zdHJpbmdpZnkoaS5mb3JtYXQoKSkpLmpvaW4oIiwgIik7RyghMSxgYW1iaWd1b3VzIGV2ZW50IGRlc2NyaXB0aW9uIChpLmUuIG1hdGNoZXMgJHtvfSlgLCJrZXkiLGUpfXJldHVybiByWzBdfWNvbnN0IHM9WSh0aGlzLHVuKS5nZXQoZm4uZnJvbShlKS5mb3JtYXQoKSk7cmV0dXJuIHN8fG51bGx9O2xldCBkbD1jcztjb25zdCBTbT1uPT5LdC5mcm9tKG4pLEhiPW49Pkt0LmZyb20obikuc2VyaWFsaXplZCxLYj1uPT5BZShuKSxfbT17c2lnaGFzaDoic2lnaGFzaCIsbWluaW1hbDoibWluaW1hbCIsZnVsbDoiZnVsbCIsanNvbjoianNvbiJ9LE9tPWVvLmlzVmFsaWRNbmVtb25pYztZbi5yZWdpc3RlcigobixlLHQpPT5Zbi5fKG4sQWUoZSksQWUodCkpKTtjb25zdCBSbT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQWJpQ29kZXI6WG4sRm9ybWF0VHlwZXM6X20sSW50ZXJmYWNlOmRsLE1uZW1vbmljOmVvLFNpZ25hdHVyZTpLdCxTaWduaW5nS2V5OmJyLFdvcmRsaXN0Ol9iLGFycmF5aWZ5OktiLGNvbmNhdDpldCxldGhlcnNIRE5vZGVXYWxsZXQ6RWEsaWQ6WnIsaXNWYWxpZE1uZW1vbmljOk9tLGpvaW5TaWduYXR1cmU6SGIsa2VjY2FrMjU2OiRlLHBia2RmMjpacyxyZWNvdmVyQWRkcmVzczpSbyxzaGEyNTY6VXQsc2hhNTEyOkljLHNwbGl0U2lnbmF0dXJlOlNtLHRvVXRmOEJ5dGVzOnJyLHRvVXRmOFN0cmluZzpkZyx3b3JkbGlzdHM6Ym19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7ZnVuY3Rpb24gT3Aobil7aWYoIU51bWJlci5pc1NhZmVJbnRlZ2VyKG4pfHxuPDApdGhyb3cgbmV3IEVycm9yKGBwb3NpdGl2ZSBpbnRlZ2VyIGV4cGVjdGVkLCBub3QgJHtufWApfWZ1bmN0aW9uIE1tKG4pe3JldHVybiBuIGluc3RhbmNlb2YgVWludDhBcnJheXx8biE9bnVsbCYmdHlwZW9mIG49PSJvYmplY3QiJiZuLmNvbnN0cnVjdG9yLm5hbWU9PT0iVWludDhBcnJheSJ9ZnVuY3Rpb24gTmMobiwuLi5lKXtpZighTW0obikpdGhyb3cgbmV3IEVycm9yKCJVaW50OEFycmF5IGV4cGVjdGVkIik7aWYoZS5sZW5ndGg+MCYmIWUuaW5jbHVkZXMobi5sZW5ndGgpKXRocm93IG5ldyBFcnJvcihgVWludDhBcnJheSBleHBlY3RlZCBvZiBsZW5ndGggJHtlfSwgbm90IG9mIGxlbmd0aD0ke24ubGVuZ3RofWApfWZ1bmN0aW9uIEZtKG4pe2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24ifHx0eXBlb2Ygbi5jcmVhdGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJIYXNoIHNob3VsZCBiZSB3cmFwcGVkIGJ5IHV0aWxzLndyYXBDb25zdHJ1Y3RvciIpO09wKG4ub3V0cHV0TGVuKSxPcChuLmJsb2NrTGVuKX1mdW5jdGlvbiBmYyhuLGU9ITApe2lmKG4uZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiSGFzaCBpbnN0YW5jZSBoYXMgYmVlbiBkZXN0cm95ZWQiKTtpZihlJiZuLmZpbmlzaGVkKXRocm93IG5ldyBFcnJvcigiSGFzaCNkaWdlc3QoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCIpfWZ1bmN0aW9uIE5tKG4sZSl7TmMobik7Y29uc3QgdD1lLm91dHB1dExlbjtpZihuLmxlbmd0aDx0KXRocm93IG5ldyBFcnJvcihgZGlnZXN0SW50bygpIGV4cGVjdHMgb3V0cHV0IGJ1ZmZlciBvZiBsZW5ndGggYXQgbGVhc3QgJHt0fWApfWNvbnN0IGd1PXR5cGVvZiBnbG9iYWxUaGlzPT0ib2JqZWN0IiYmImNyeXB0byJpbiBnbG9iYWxUaGlzP2dsb2JhbFRoaXMuY3J5cHRvOnZvaWQgMDsvKiEgbm9ibGUtaGFzaGVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICovY29uc3QgYnU9bj0+bmV3IERhdGFWaWV3KG4uYnVmZmVyLG4uYnl0ZU9mZnNldCxuLmJ5dGVMZW5ndGgpLHRuPShuLGUpPT5uPDwzMi1lfG4+Pj5lO25ldyBVaW50OEFycmF5KG5ldyBVaW50MzJBcnJheShbMjg3NDU0MDIwXSkuYnVmZmVyKVswXTtmdW5jdGlvbiBrbShuKXtpZih0eXBlb2YgbiE9InN0cmluZyIpdGhyb3cgbmV3IEVycm9yKGB1dGY4VG9CeXRlcyBleHBlY3RlZCBzdHJpbmcsIGdvdCAke3R5cGVvZiBufWApO3JldHVybiBuZXcgVWludDhBcnJheShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUobikpfWZ1bmN0aW9uIFZkKG4pe3JldHVybiB0eXBlb2Ygbj09InN0cmluZyImJihuPWttKG4pKSxOYyhuKSxufWZ1bmN0aW9uIFVtKC4uLm4pe2xldCBlPTA7Zm9yKGxldCBhPTA7YTxuLmxlbmd0aDthKyspe2NvbnN0IHM9blthXTtOYyhzKSxlKz1zLmxlbmd0aH1jb25zdCB0PW5ldyBVaW50OEFycmF5KGUpO2ZvcihsZXQgYT0wLHM9MDthPG4ubGVuZ3RoO2ErKyl7Y29uc3Qgcj1uW2FdO3Quc2V0KHIscykscys9ci5sZW5ndGh9cmV0dXJuIHR9Y2xhc3MgWmJ7Y2xvbmUoKXtyZXR1cm4gdGhpcy5fY2xvbmVJbnRvKCl9fWZ1bmN0aW9uIERtKG4pe2NvbnN0IGU9YT0+bigpLnVwZGF0ZShWZChhKSkuZGlnZXN0KCksdD1uKCk7cmV0dXJuIGUub3V0cHV0TGVuPXQub3V0cHV0TGVuLGUuYmxvY2tMZW49dC5ibG9ja0xlbixlLmNyZWF0ZT0oKT0+bigpLGV9ZnVuY3Rpb24gJG0obj0zMil7aWYoZ3UmJnR5cGVvZiBndS5nZXRSYW5kb21WYWx1ZXM9PSJmdW5jdGlvbiIpcmV0dXJuIGd1LmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheShuKSk7dGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzIG11c3QgYmUgZGVmaW5lZCIpfWZ1bmN0aW9uIExtKG4sZSx0LGEpe2lmKHR5cGVvZiBuLnNldEJpZ1VpbnQ2ND09ImZ1bmN0aW9uIilyZXR1cm4gbi5zZXRCaWdVaW50NjQoZSx0LGEpO2NvbnN0IHM9QmlnSW50KDMyKSxyPUJpZ0ludCg0Mjk0OTY3Mjk1KSxvPU51bWJlcih0Pj5zJnIpLGk9TnVtYmVyKHQmciksYz1hPzQ6MCxmPWE/MDo0O24uc2V0VWludDMyKGUrYyxvLGEpLG4uc2V0VWludDMyKGUrZixpLGEpfWNvbnN0IHptPShuLGUsdCk9Pm4mZV5+biZ0LGptPShuLGUsdCk9Pm4mZV5uJnReZSZ0O2NsYXNzIFZtIGV4dGVuZHMgWmJ7Y29uc3RydWN0b3IoZSx0LGEscyl7c3VwZXIoKSx0aGlzLmJsb2NrTGVuPWUsdGhpcy5vdXRwdXRMZW49dCx0aGlzLnBhZE9mZnNldD1hLHRoaXMuaXNMRT1zLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5sZW5ndGg9MCx0aGlzLnBvcz0wLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuYnVmZmVyPW5ldyBVaW50OEFycmF5KGUpLHRoaXMudmlldz1idSh0aGlzLmJ1ZmZlcil9dXBkYXRlKGUpe2ZjKHRoaXMpO2NvbnN0e3ZpZXc6dCxidWZmZXI6YSxibG9ja0xlbjpzfT10aGlzO2U9VmQoZSk7Y29uc3Qgcj1lLmxlbmd0aDtmb3IobGV0IG89MDtvPHI7KXtjb25zdCBpPU1hdGgubWluKHMtdGhpcy5wb3Msci1vKTtpZihpPT09cyl7Y29uc3QgYz1idShlKTtmb3IoO3M8PXItbztvKz1zKXRoaXMucHJvY2VzcyhjLG8pO2NvbnRpbnVlfWEuc2V0KGUuc3ViYXJyYXkobyxvK2kpLHRoaXMucG9zKSx0aGlzLnBvcys9aSxvKz1pLHRoaXMucG9zPT09cyYmKHRoaXMucHJvY2Vzcyh0LDApLHRoaXMucG9zPTApfXJldHVybiB0aGlzLmxlbmd0aCs9ZS5sZW5ndGgsdGhpcy5yb3VuZENsZWFuKCksdGhpc31kaWdlc3RJbnRvKGUpe2ZjKHRoaXMpLE5tKGUsdGhpcyksdGhpcy5maW5pc2hlZD0hMDtjb25zdHtidWZmZXI6dCx2aWV3OmEsYmxvY2tMZW46cyxpc0xFOnJ9PXRoaXM7bGV0e3BvczpvfT10aGlzO3RbbysrXT0xMjgsdGhpcy5idWZmZXIuc3ViYXJyYXkobykuZmlsbCgwKSx0aGlzLnBhZE9mZnNldD5zLW8mJih0aGlzLnByb2Nlc3MoYSwwKSxvPTApO2ZvcihsZXQgcD1vO3A8cztwKyspdFtwXT0wO0xtKGEscy04LEJpZ0ludCh0aGlzLmxlbmd0aCo4KSxyKSx0aGlzLnByb2Nlc3MoYSwwKTtjb25zdCBpPWJ1KGUpLGM9dGhpcy5vdXRwdXRMZW47aWYoYyU0KXRocm93IG5ldyBFcnJvcigiX3NoYTI6IG91dHB1dExlbiBzaG91bGQgYmUgYWxpZ25lZCB0byAzMmJpdCIpO2NvbnN0IGY9Yy80LGQ9dGhpcy5nZXQoKTtpZihmPmQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiX3NoYTI6IG91dHB1dExlbiBiaWdnZXIgdGhhbiBzdGF0ZSIpO2ZvcihsZXQgcD0wO3A8ZjtwKyspaS5zZXRVaW50MzIoNCpwLGRbcF0scil9ZGlnZXN0KCl7Y29uc3R7YnVmZmVyOmUsb3V0cHV0TGVuOnR9PXRoaXM7dGhpcy5kaWdlc3RJbnRvKGUpO2NvbnN0IGE9ZS5zbGljZSgwLHQpO3JldHVybiB0aGlzLmRlc3Ryb3koKSxhfV9jbG9uZUludG8oZSl7ZXx8KGU9bmV3IHRoaXMuY29uc3RydWN0b3IpLGUuc2V0KC4uLnRoaXMuZ2V0KCkpO2NvbnN0e2Jsb2NrTGVuOnQsYnVmZmVyOmEsbGVuZ3RoOnMsZmluaXNoZWQ6cixkZXN0cm95ZWQ6byxwb3M6aX09dGhpcztyZXR1cm4gZS5sZW5ndGg9cyxlLnBvcz1pLGUuZmluaXNoZWQ9cixlLmRlc3Ryb3llZD1vLHMldCYmZS5idWZmZXIuc2V0KGEpLGV9fWNvbnN0IEdtPW5ldyBVaW50MzJBcnJheShbMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSksJG49bmV3IFVpbnQzMkFycmF5KFsxNzc5MDMzNzAzLDMxNDQxMzQyNzcsMTAxMzkwNDI0MiwyNzczNDgwNzYyLDEzNTk4OTMxMTksMjYwMDgyMjkyNCw1Mjg3MzQ2MzUsMTU0MTQ1OTIyNV0pLExuPW5ldyBVaW50MzJBcnJheSg2NCk7bGV0IEhtPWNsYXNzIGV4dGVuZHMgVm17Y29uc3RydWN0b3IoKXtzdXBlcig2NCwzMiw4LCExKSx0aGlzLkE9JG5bMF18MCx0aGlzLkI9JG5bMV18MCx0aGlzLkM9JG5bMl18MCx0aGlzLkQ9JG5bM118MCx0aGlzLkU9JG5bNF18MCx0aGlzLkY9JG5bNV18MCx0aGlzLkc9JG5bNl18MCx0aGlzLkg9JG5bN118MH1nZXQoKXtjb25zdHtBOmUsQjp0LEM6YSxEOnMsRTpyLEY6byxHOmksSDpjfT10aGlzO3JldHVybltlLHQsYSxzLHIsbyxpLGNdfXNldChlLHQsYSxzLHIsbyxpLGMpe3RoaXMuQT1lfDAsdGhpcy5CPXR8MCx0aGlzLkM9YXwwLHRoaXMuRD1zfDAsdGhpcy5FPXJ8MCx0aGlzLkY9b3wwLHRoaXMuRz1pfDAsdGhpcy5IPWN8MH1wcm9jZXNzKGUsdCl7Zm9yKGxldCBwPTA7cDwxNjtwKyssdCs9NClMbltwXT1lLmdldFVpbnQzMih0LCExKTtmb3IobGV0IHA9MTY7cDw2NDtwKyspe2NvbnN0IGI9TG5bcC0xNV0sVD1MbltwLTJdLFc9dG4oYiw3KV50bihiLDE4KV5iPj4+MyxnPXRuKFQsMTcpXnRuKFQsMTkpXlQ+Pj4xMDtMbltwXT1nK0xuW3AtN10rVytMbltwLTE2XXwwfWxldHtBOmEsQjpzLEM6cixEOm8sRTppLEY6YyxHOmYsSDpkfT10aGlzO2ZvcihsZXQgcD0wO3A8NjQ7cCsrKXtjb25zdCBiPXRuKGksNiledG4oaSwxMSledG4oaSwyNSksVD1kK2Irem0oaSxjLGYpK0dtW3BdK0xuW3BdfDAsZz0odG4oYSwyKV50bihhLDEzKV50bihhLDIyKSkram0oYSxzLHIpfDA7ZD1mLGY9YyxjPWksaT1vK1R8MCxvPXIscj1zLHM9YSxhPVQrZ3wwfWE9YSt0aGlzLkF8MCxzPXMrdGhpcy5CfDAscj1yK3RoaXMuQ3wwLG89byt0aGlzLkR8MCxpPWkrdGhpcy5FfDAsYz1jK3RoaXMuRnwwLGY9Zit0aGlzLkd8MCxkPWQrdGhpcy5IfDAsdGhpcy5zZXQoYSxzLHIsbyxpLGMsZixkKX1yb3VuZENsZWFuKCl7TG4uZmlsbCgwKX1kZXN0cm95KCl7dGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwKSx0aGlzLmJ1ZmZlci5maWxsKDApfX07Y29uc3QgS209RG0oKCk9Pm5ldyBIbSk7Y2xhc3MgcWIgZXh0ZW5kcyBaYntjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKCksdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSxGbShlKTtjb25zdCBhPVZkKHQpO2lmKHRoaXMuaUhhc2g9ZS5jcmVhdGUoKSx0eXBlb2YgdGhpcy5pSGFzaC51cGRhdGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBpbnN0YW5jZSBvZiBjbGFzcyB3aGljaCBleHRlbmRzIHV0aWxzLkhhc2giKTt0aGlzLmJsb2NrTGVuPXRoaXMuaUhhc2guYmxvY2tMZW4sdGhpcy5vdXRwdXRMZW49dGhpcy5pSGFzaC5vdXRwdXRMZW47Y29uc3Qgcz10aGlzLmJsb2NrTGVuLHI9bmV3IFVpbnQ4QXJyYXkocyk7ci5zZXQoYS5sZW5ndGg+cz9lLmNyZWF0ZSgpLnVwZGF0ZShhKS5kaWdlc3QoKTphKTtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKylyW29dXj01NDt0aGlzLmlIYXNoLnVwZGF0ZShyKSx0aGlzLm9IYXNoPWUuY3JlYXRlKCk7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspcltvXV49MTA2O3RoaXMub0hhc2gudXBkYXRlKHIpLHIuZmlsbCgwKX11cGRhdGUoZSl7cmV0dXJuIGZjKHRoaXMpLHRoaXMuaUhhc2gudXBkYXRlKGUpLHRoaXN9ZGlnZXN0SW50byhlKXtmYyh0aGlzKSxOYyhlLHRoaXMub3V0cHV0TGVuKSx0aGlzLmZpbmlzaGVkPSEwLHRoaXMuaUhhc2guZGlnZXN0SW50byhlKSx0aGlzLm9IYXNoLnVwZGF0ZShlKSx0aGlzLm9IYXNoLmRpZ2VzdEludG8oZSksdGhpcy5kZXN0cm95KCl9ZGlnZXN0KCl7Y29uc3QgZT1uZXcgVWludDhBcnJheSh0aGlzLm9IYXNoLm91dHB1dExlbik7cmV0dXJuIHRoaXMuZGlnZXN0SW50byhlKSxlfV9jbG9uZUludG8oZSl7ZXx8KGU9T2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykse30pKTtjb25zdHtvSGFzaDp0LGlIYXNoOmEsZmluaXNoZWQ6cyxkZXN0cm95ZWQ6cixibG9ja0xlbjpvLG91dHB1dExlbjppfT10aGlzO3JldHVybiBlPWUsZS5maW5pc2hlZD1zLGUuZGVzdHJveWVkPXIsZS5ibG9ja0xlbj1vLGUub3V0cHV0TGVuPWksZS5vSGFzaD10Ll9jbG9uZUludG8oZS5vSGFzaCksZS5pSGFzaD1hLl9jbG9uZUludG8oZS5pSGFzaCksZX1kZXN0cm95KCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5vSGFzaC5kZXN0cm95KCksdGhpcy5pSGFzaC5kZXN0cm95KCl9fWNvbnN0IEpiPShuLGUsdCk9Pm5ldyBxYihuLGUpLnVwZGF0ZSh0KS5kaWdlc3QoKTtKYi5jcmVhdGU9KG4sZSk9Pm5ldyBxYihuLGUpOy8qISBub2JsZS1jdXJ2ZXMgLSBNSVQgTGljZW5zZSAoYykgMjAyMiBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKi9jb25zdCBabT1CaWdJbnQoMSkscW09QmlnSW50KDIpO2Z1bmN0aW9uIE5vKG4pe3JldHVybiBuIGluc3RhbmNlb2YgVWludDhBcnJheXx8biE9bnVsbCYmdHlwZW9mIG49PSJvYmplY3QiJiZuLmNvbnN0cnVjdG9yLm5hbWU9PT0iVWludDhBcnJheSJ9ZnVuY3Rpb24gR2Eobil7aWYoIU5vKG4pKXRocm93IG5ldyBFcnJvcigiVWludDhBcnJheSBleHBlY3RlZCIpfWNvbnN0IEptPUFycmF5LmZyb20oe2xlbmd0aDoyNTZ9LChuLGUpPT5lLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIikpO2Z1bmN0aW9uICRzKG4pe0dhKG4pO2xldCBlPSIiO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKWUrPUptW25bdF1dO3JldHVybiBlfWZ1bmN0aW9uIEdkKG4pe2lmKHR5cGVvZiBuIT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoImhleCBzdHJpbmcgZXhwZWN0ZWQsIGdvdCAiK3R5cGVvZiBuKTtyZXR1cm4gQmlnSW50KG49PT0iIj8iMCI6YDB4JHtufWApfWNvbnN0IGJuPXtfMDo0OCxfOTo1NyxfQTo2NSxfRjo3MCxfYTo5NyxfZjoxMDJ9O2Z1bmN0aW9uIFJwKG4pe2lmKG4+PWJuLl8wJiZuPD1ibi5fOSlyZXR1cm4gbi1ibi5fMDtpZihuPj1ibi5fQSYmbjw9Ym4uX0YpcmV0dXJuIG4tKGJuLl9BLTEwKTtpZihuPj1ibi5fYSYmbjw9Ym4uX2YpcmV0dXJuIG4tKGJuLl9hLTEwKX1mdW5jdGlvbiBJYShuKXtpZih0eXBlb2YgbiE9InN0cmluZyIpdGhyb3cgbmV3IEVycm9yKCJoZXggc3RyaW5nIGV4cGVjdGVkLCBnb3QgIit0eXBlb2Ygbik7Y29uc3QgZT1uLmxlbmd0aCx0PWUvMjtpZihlJTIpdGhyb3cgbmV3IEVycm9yKCJwYWRkZWQgaGV4IHN0cmluZyBleHBlY3RlZCwgZ290IHVucGFkZGVkIGhleCBvZiBsZW5ndGggIitlKTtjb25zdCBhPW5ldyBVaW50OEFycmF5KHQpO2ZvcihsZXQgcz0wLHI9MDtzPHQ7cysrLHIrPTIpe2NvbnN0IG89UnAobi5jaGFyQ29kZUF0KHIpKSxpPVJwKG4uY2hhckNvZGVBdChyKzEpKTtpZihvPT09dm9pZCAwfHxpPT09dm9pZCAwKXtjb25zdCBjPW5bcl0rbltyKzFdO3Rocm93IG5ldyBFcnJvcignaGV4IHN0cmluZyBleHBlY3RlZCwgZ290IG5vbi1oZXggY2hhcmFjdGVyICInK2MrJyIgYXQgaW5kZXggJytyKX1hW3NdPW8qMTYraX1yZXR1cm4gYX1mdW5jdGlvbiBTbyhuKXtyZXR1cm4gR2QoJHMobikpfWZ1bmN0aW9uIEhkKG4pe3JldHVybiBHYShuKSxHZCgkcyhVaW50OEFycmF5LmZyb20obikucmV2ZXJzZSgpKSl9ZnVuY3Rpb24gTHMobixlKXtyZXR1cm4gSWEobi50b1N0cmluZygxNikucGFkU3RhcnQoZSoyLCIwIikpfWZ1bmN0aW9uIEtkKG4sZSl7cmV0dXJuIExzKG4sZSkucmV2ZXJzZSgpfWZ1bmN0aW9uIHpyKG4sZSx0KXtsZXQgYTtpZih0eXBlb2YgZT09InN0cmluZyIpdHJ5e2E9SWEoZSl9Y2F0Y2gocil7dGhyb3cgbmV3IEVycm9yKGAke259IG11c3QgYmUgdmFsaWQgaGV4IHN0cmluZywgZ290ICIke2V9Ii4gQ2F1c2U6ICR7cn1gKX1lbHNlIGlmKE5vKGUpKWE9VWludDhBcnJheS5mcm9tKGUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGAke259IG11c3QgYmUgaGV4IHN0cmluZyBvciBVaW50OEFycmF5YCk7Y29uc3Qgcz1hLmxlbmd0aDtpZih0eXBlb2YgdD09Im51bWJlciImJnMhPT10KXRocm93IG5ldyBFcnJvcihgJHtufSBleHBlY3RlZCAke3R9IGJ5dGVzLCBnb3QgJHtzfWApO3JldHVybiBhfWZ1bmN0aW9uIFNhKC4uLm4pe2xldCBlPTA7Zm9yKGxldCBhPTA7YTxuLmxlbmd0aDthKyspe2NvbnN0IHM9blthXTtHYShzKSxlKz1zLmxlbmd0aH1jb25zdCB0PW5ldyBVaW50OEFycmF5KGUpO2ZvcihsZXQgYT0wLHM9MDthPG4ubGVuZ3RoO2ErKyl7Y29uc3Qgcj1uW2FdO3Quc2V0KHIscykscys9ci5sZW5ndGh9cmV0dXJuIHR9Y29uc3QgWmQ9bj0+KHFtPDxCaWdJbnQobi0xKSktWm0seXU9bj0+bmV3IFVpbnQ4QXJyYXkobiksTXA9bj0+VWludDhBcnJheS5mcm9tKG4pO2Z1bmN0aW9uIFliKG4sZSx0KXtpZih0eXBlb2YgbiE9Im51bWJlciJ8fG48Mil0aHJvdyBuZXcgRXJyb3IoImhhc2hMZW4gbXVzdCBiZSBhIG51bWJlciIpO2lmKHR5cGVvZiBlIT0ibnVtYmVyInx8ZTwyKXRocm93IG5ldyBFcnJvcigicUJ5dGVMZW4gbXVzdCBiZSBhIG51bWJlciIpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaG1hY0ZuIG11c3QgYmUgYSBmdW5jdGlvbiIpO2xldCBhPXl1KG4pLHM9eXUobikscj0wO2NvbnN0IG89KCk9PnthLmZpbGwoMSkscy5maWxsKDApLHI9MH0saT0oLi4ucCk9PnQocyxhLC4uLnApLGM9KHA9eXUoKSk9PntzPWkoTXAoWzBdKSxwKSxhPWkoKSxwLmxlbmd0aCE9PTAmJihzPWkoTXAoWzFdKSxwKSxhPWkoKSl9LGY9KCk9PntpZihyKys+PTFlMyl0aHJvdyBuZXcgRXJyb3IoImRyYmc6IHRyaWVkIDEwMDAgdmFsdWVzIik7bGV0IHA9MDtjb25zdCBiPVtdO2Zvcig7cDxlOyl7YT1pKCk7Y29uc3QgVD1hLnNsaWNlKCk7Yi5wdXNoKFQpLHArPWEubGVuZ3RofXJldHVybiBTYSguLi5iKX07cmV0dXJuKHAsYik9PntvKCksYyhwKTtsZXQgVDtmb3IoOyEoVD1iKGYoKSkpOyljKCk7cmV0dXJuIG8oKSxUfX1jb25zdCBZbT17YmlnaW50Om49PnR5cGVvZiBuPT0iYmlnaW50IixmdW5jdGlvbjpuPT50eXBlb2Ygbj09ImZ1bmN0aW9uIixib29sZWFuOm49PnR5cGVvZiBuPT0iYm9vbGVhbiIsc3RyaW5nOm49PnR5cGVvZiBuPT0ic3RyaW5nIixzdHJpbmdPclVpbnQ4QXJyYXk6bj0+dHlwZW9mIG49PSJzdHJpbmcifHxObyhuKSxpc1NhZmVJbnRlZ2VyOm49Pk51bWJlci5pc1NhZmVJbnRlZ2VyKG4pLGFycmF5Om49PkFycmF5LmlzQXJyYXkobiksZmllbGQ6KG4sZSk9PmUuRnAuaXNWYWxpZChuKSxoYXNoOm49PnR5cGVvZiBuPT0iZnVuY3Rpb24iJiZOdW1iZXIuaXNTYWZlSW50ZWdlcihuLm91dHB1dExlbil9O2Z1bmN0aW9uIEhhKG4sZSx0PXt9KXtjb25zdCBhPShzLHIsbyk9Pntjb25zdCBpPVltW3JdO2lmKHR5cGVvZiBpIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YWxpZGF0b3IgIiR7cn0iLCBleHBlY3RlZCBmdW5jdGlvbmApO2NvbnN0IGM9bltzXTtpZighKG8mJmM9PT12b2lkIDApJiYhaShjLG4pKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbSAke1N0cmluZyhzKX09JHtjfSAoJHt0eXBlb2YgY30pLCBleHBlY3RlZCAke3J9YCl9O2Zvcihjb25zdFtzLHJdb2YgT2JqZWN0LmVudHJpZXMoZSkpYShzLHIsITEpO2Zvcihjb25zdFtzLHJdb2YgT2JqZWN0LmVudHJpZXModCkpYShzLHIsITApO3JldHVybiBufWNvbnN0IFhtPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxhYnl0ZXM6R2EsYml0TWFzazpaZCxieXRlc1RvSGV4OiRzLGJ5dGVzVG9OdW1iZXJCRTpTbyxieXRlc1RvTnVtYmVyTEU6SGQsY29uY2F0Qnl0ZXM6U2EsY3JlYXRlSG1hY0RyYmc6WWIsZW5zdXJlQnl0ZXM6enIsaGV4VG9CeXRlczpJYSxoZXhUb051bWJlcjpHZCxpc0J5dGVzOk5vLG51bWJlclRvQnl0ZXNCRTpMcyxudW1iZXJUb0J5dGVzTEU6S2QsdmFsaWRhdGVPYmplY3Q6SGF9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7LyohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqL2NvbnN0IFB0PUJpZ0ludCgwKSxidD1CaWdJbnQoMSksZ289QmlnSW50KDIpLFFtPUJpZ0ludCgzKSxwbD1CaWdJbnQoNCksRnA9QmlnSW50KDUpLE5wPUJpZ0ludCg4KTtCaWdJbnQoOSk7QmlnSW50KDE2KTtmdW5jdGlvbiBlcihuLGUpe2NvbnN0IHQ9biVlO3JldHVybiB0Pj1QdD90OmUrdH1mdW5jdGlvbiBlMihuLGUsdCl7aWYodDw9UHR8fGU8UHQpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBwb3dlci9tb2R1bG8gPiAwIik7aWYodD09PWJ0KXJldHVybiBQdDtsZXQgYT1idDtmb3IoO2U+UHQ7KWUmYnQmJihhPWEqbiV0KSxuPW4qbiV0LGU+Pj1idDtyZXR1cm4gYX1mdW5jdGlvbiB2cihuLGUsdCl7bGV0IGE9bjtmb3IoO2UtLSA+UHQ7KWEqPWEsYSU9dDtyZXR1cm4gYX1mdW5jdGlvbiBobChuLGUpe2lmKG49PT1QdHx8ZTw9UHQpdGhyb3cgbmV3IEVycm9yKGBpbnZlcnQ6IGV4cGVjdGVkIHBvc2l0aXZlIGludGVnZXJzLCBnb3Qgbj0ke259IG1vZD0ke2V9YCk7bGV0IHQ9ZXIobixlKSxhPWUscz1QdCxyPWJ0O2Zvcig7dCE9PVB0Oyl7Y29uc3QgaT1hL3QsYz1hJXQsZj1zLXIqaTthPXQsdD1jLHM9cixyPWZ9aWYoYSE9PWJ0KXRocm93IG5ldyBFcnJvcigiaW52ZXJ0OiBkb2VzIG5vdCBleGlzdCIpO3JldHVybiBlcihzLGUpfWZ1bmN0aW9uIHQyKG4pe2NvbnN0IGU9KG4tYnQpL2dvO2xldCB0LGEscztmb3IodD1uLWJ0LGE9MDt0JWdvPT09UHQ7dC89Z28sYSsrKTtmb3Iocz1nbztzPG4mJmUyKHMsZSxuKSE9PW4tYnQ7cysrKTtpZihhPT09MSl7Y29uc3Qgbz0obitidCkvcGw7cmV0dXJuIGZ1bmN0aW9uKGMsZil7Y29uc3QgZD1jLnBvdyhmLG8pO2lmKCFjLmVxbChjLnNxcihkKSxmKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNxdWFyZSByb290Iik7cmV0dXJuIGR9fWNvbnN0IHI9KHQrYnQpL2dvO3JldHVybiBmdW5jdGlvbihpLGMpe2lmKGkucG93KGMsZSk9PT1pLm5lZyhpLk9ORSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCIpO2xldCBmPWEsZD1pLnBvdyhpLm11bChpLk9ORSxzKSx0KSxwPWkucG93KGMsciksYj1pLnBvdyhjLHQpO2Zvcig7IWkuZXFsKGIsaS5PTkUpOyl7aWYoaS5lcWwoYixpLlpFUk8pKXJldHVybiBpLlpFUk87bGV0IFQ9MTtmb3IobGV0IGc9aS5zcXIoYik7VDxmJiYhaS5lcWwoZyxpLk9ORSk7VCsrKWc9aS5zcXIoZyk7Y29uc3QgVz1pLnBvdyhkLGJ0PDxCaWdJbnQoZi1ULTEpKTtkPWkuc3FyKFcpLHA9aS5tdWwocCxXKSxiPWkubXVsKGIsZCksZj1UfXJldHVybiBwfX1mdW5jdGlvbiByMihuKXtpZihuJXBsPT09UW0pe2NvbnN0IGU9KG4rYnQpL3BsO3JldHVybiBmdW5jdGlvbihhLHMpe2NvbnN0IHI9YS5wb3cocyxlKTtpZighYS5lcWwoYS5zcXIocikscykpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCIpO3JldHVybiByfX1pZihuJU5wPT09RnApe2NvbnN0IGU9KG4tRnApL05wO3JldHVybiBmdW5jdGlvbihhLHMpe2NvbnN0IHI9YS5tdWwocyxnbyksbz1hLnBvdyhyLGUpLGk9YS5tdWwocyxvKSxjPWEubXVsKGEubXVsKGksZ28pLG8pLGY9YS5tdWwoaSxhLnN1YihjLGEuT05FKSk7aWYoIWEuZXFsKGEuc3FyKGYpLHMpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc3F1YXJlIHJvb3QiKTtyZXR1cm4gZn19cmV0dXJuIHQyKG4pfWNvbnN0IG4yPVsiY3JlYXRlIiwiaXNWYWxpZCIsImlzMCIsIm5lZyIsImludiIsInNxcnQiLCJzcXIiLCJlcWwiLCJhZGQiLCJzdWIiLCJtdWwiLCJwb3ciLCJkaXYiLCJhZGROIiwic3ViTiIsIm11bE4iLCJzcXJOIl07ZnVuY3Rpb24gbzIobil7Y29uc3QgZT17T1JERVI6ImJpZ2ludCIsTUFTSzoiYmlnaW50IixCWVRFUzoiaXNTYWZlSW50ZWdlciIsQklUUzoiaXNTYWZlSW50ZWdlciJ9LHQ9bjIucmVkdWNlKChhLHMpPT4oYVtzXT0iZnVuY3Rpb24iLGEpLGUpO3JldHVybiBIYShuLHQpfWZ1bmN0aW9uIHMyKG4sZSx0KXtpZih0PFB0KXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgcG93ZXIgPiAwIik7aWYodD09PVB0KXJldHVybiBuLk9ORTtpZih0PT09YnQpcmV0dXJuIGU7bGV0IGE9bi5PTkUscz1lO2Zvcig7dD5QdDspdCZidCYmKGE9bi5tdWwoYSxzKSkscz1uLnNxcihzKSx0Pj49YnQ7cmV0dXJuIGF9ZnVuY3Rpb24gYTIobixlKXtjb25zdCB0PW5ldyBBcnJheShlLmxlbmd0aCksYT1lLnJlZHVjZSgocixvLGkpPT5uLmlzMChvKT9yOih0W2ldPXIsbi5tdWwocixvKSksbi5PTkUpLHM9bi5pbnYoYSk7cmV0dXJuIGUucmVkdWNlUmlnaHQoKHIsbyxpKT0+bi5pczAobyk/cjoodFtpXT1uLm11bChyLHRbaV0pLG4ubXVsKHIsbykpLHMpLHR9ZnVuY3Rpb24gWGIobixlKXtjb25zdCB0PWUhPT12b2lkIDA/ZTpuLnRvU3RyaW5nKDIpLmxlbmd0aCxhPU1hdGguY2VpbCh0LzgpO3JldHVybntuQml0TGVuZ3RoOnQsbkJ5dGVMZW5ndGg6YX19ZnVuY3Rpb24gaTIobixlLHQ9ITEsYT17fSl7aWYobjw9UHQpdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBGaWVsZCBPUkRFUiA+IDAsIGdvdCAke259YCk7Y29uc3R7bkJpdExlbmd0aDpzLG5CeXRlTGVuZ3RoOnJ9PVhiKG4sZSk7aWYocj4yMDQ4KXRocm93IG5ldyBFcnJvcigiRmllbGQgbGVuZ3RocyBvdmVyIDIwNDggYnl0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQiKTtjb25zdCBvPXIyKG4pLGk9T2JqZWN0LmZyZWV6ZSh7T1JERVI6bixCSVRTOnMsQllURVM6cixNQVNLOlpkKHMpLFpFUk86UHQsT05FOmJ0LGNyZWF0ZTpjPT5lcihjLG4pLGlzVmFsaWQ6Yz0+e2lmKHR5cGVvZiBjIT0iYmlnaW50Iil0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZmllbGQgZWxlbWVudDogZXhwZWN0ZWQgYmlnaW50LCBnb3QgJHt0eXBlb2YgY31gKTtyZXR1cm4gUHQ8PWMmJmM8bn0saXMwOmM9PmM9PT1QdCxpc09kZDpjPT4oYyZidCk9PT1idCxuZWc6Yz0+ZXIoLWMsbiksZXFsOihjLGYpPT5jPT09ZixzcXI6Yz0+ZXIoYypjLG4pLGFkZDooYyxmKT0+ZXIoYytmLG4pLHN1YjooYyxmKT0+ZXIoYy1mLG4pLG11bDooYyxmKT0+ZXIoYypmLG4pLHBvdzooYyxmKT0+czIoaSxjLGYpLGRpdjooYyxmKT0+ZXIoYypobChmLG4pLG4pLHNxck46Yz0+YypjLGFkZE46KGMsZik9PmMrZixzdWJOOihjLGYpPT5jLWYsbXVsTjooYyxmKT0+YypmLGludjpjPT5obChjLG4pLHNxcnQ6YS5zcXJ0fHwoYz0+byhpLGMpKSxpbnZlcnRCYXRjaDpjPT5hMihpLGMpLGNtb3Y6KGMsZixkKT0+ZD9mOmMsdG9CeXRlczpjPT50P0tkKGMscik6THMoYyxyKSxmcm9tQnl0ZXM6Yz0+e2lmKGMubGVuZ3RoIT09cil0aHJvdyBuZXcgRXJyb3IoYEZwLmZyb21CeXRlczogZXhwZWN0ZWQgJHtyfSwgZ290ICR7Yy5sZW5ndGh9YCk7cmV0dXJuIHQ/SGQoYyk6U28oYyl9fSk7cmV0dXJuIE9iamVjdC5mcmVlemUoaSl9ZnVuY3Rpb24gUWIobil7aWYodHlwZW9mIG4hPSJiaWdpbnQiKXRocm93IG5ldyBFcnJvcigiZmllbGQgb3JkZXIgbXVzdCBiZSBiaWdpbnQiKTtjb25zdCBlPW4udG9TdHJpbmcoMikubGVuZ3RoO3JldHVybiBNYXRoLmNlaWwoZS84KX1mdW5jdGlvbiBleShuKXtjb25zdCBlPVFiKG4pO3JldHVybiBlK01hdGguY2VpbChlLzIpfWZ1bmN0aW9uIGMyKG4sZSx0PSExKXtjb25zdCBhPW4ubGVuZ3RoLHM9UWIoZSkscj1leShlKTtpZihhPDE2fHxhPHJ8fGE+MTAyNCl0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkICR7cn0tMTAyNCBieXRlcyBvZiBpbnB1dCwgZ290ICR7YX1gKTtjb25zdCBvPXQ/U28obik6SGQobiksaT1lcihvLGUtYnQpK2J0O3JldHVybiB0P0tkKGkscyk6THMoaSxzKX0vKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICovY29uc3QgdTI9QmlnSW50KDApLHh1PUJpZ0ludCgxKTtmdW5jdGlvbiBsMihuLGUpe2NvbnN0IHQ9KHMscik9Pntjb25zdCBvPXIubmVnYXRlKCk7cmV0dXJuIHM/bzpyfSxhPXM9Pntjb25zdCByPU1hdGguY2VpbChlL3MpKzEsbz0yKioocy0xKTtyZXR1cm57d2luZG93czpyLHdpbmRvd1NpemU6b319O3JldHVybntjb25zdFRpbWVOZWdhdGU6dCx1bnNhZmVMYWRkZXIocyxyKXtsZXQgbz1uLlpFUk8saT1zO2Zvcig7cj51MjspciZ4dSYmKG89by5hZGQoaSkpLGk9aS5kb3VibGUoKSxyPj49eHU7cmV0dXJuIG99LHByZWNvbXB1dGVXaW5kb3cocyxyKXtjb25zdHt3aW5kb3dzOm8sd2luZG93U2l6ZTppfT1hKHIpLGM9W107bGV0IGY9cyxkPWY7Zm9yKGxldCBwPTA7cDxvO3ArKyl7ZD1mLGMucHVzaChkKTtmb3IobGV0IGI9MTtiPGk7YisrKWQ9ZC5hZGQoZiksYy5wdXNoKGQpO2Y9ZC5kb3VibGUoKX1yZXR1cm4gY30sd05BRihzLHIsbyl7Y29uc3R7d2luZG93czppLHdpbmRvd1NpemU6Y309YShzKTtsZXQgZj1uLlpFUk8sZD1uLkJBU0U7Y29uc3QgcD1CaWdJbnQoMioqcy0xKSxiPTIqKnMsVD1CaWdJbnQocyk7Zm9yKGxldCBXPTA7VzxpO1crKyl7Y29uc3QgZz1XKmM7bGV0IEE9TnVtYmVyKG8mcCk7bz4+PVQsQT5jJiYoQS09YixvKz14dSk7Y29uc3QgbT1nLHc9ZytNYXRoLmFicyhBKS0xLEI9VyUyIT09MCxrPUE8MDtBPT09MD9kPWQuYWRkKHQoQixyW21dKSk6Zj1mLmFkZCh0KGssclt3XSkpfXJldHVybntwOmYsZjpkfX0sd05BRkNhY2hlZChzLHIsbyxpKXtjb25zdCBjPXMuX1dJTkRPV19TSVpFfHwxO2xldCBmPXIuZ2V0KHMpO3JldHVybiBmfHwoZj10aGlzLnByZWNvbXB1dGVXaW5kb3cocyxjKSxjIT09MSYmci5zZXQocyxpKGYpKSksdGhpcy53TkFGKGMsZixvKX19fWZ1bmN0aW9uIHR5KG4pe3JldHVybiBvMihuLkZwKSxIYShuLHtuOiJiaWdpbnQiLGg6ImJpZ2ludCIsR3g6ImZpZWxkIixHeToiZmllbGQifSx7bkJpdExlbmd0aDoiaXNTYWZlSW50ZWdlciIsbkJ5dGVMZW5ndGg6ImlzU2FmZUludGVnZXIifSksT2JqZWN0LmZyZWV6ZSh7Li4uWGIobi5uLG4ubkJpdExlbmd0aCksLi4ubixwOm4uRnAuT1JERVJ9KX0vKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICovZnVuY3Rpb24gZjIobil7Y29uc3QgZT10eShuKTtIYShlLHthOiJmaWVsZCIsYjoiZmllbGQifSx7YWxsb3dlZFByaXZhdGVLZXlMZW5ndGhzOiJhcnJheSIsd3JhcFByaXZhdGVLZXk6ImJvb2xlYW4iLGlzVG9yc2lvbkZyZWU6ImZ1bmN0aW9uIixjbGVhckNvZmFjdG9yOiJmdW5jdGlvbiIsYWxsb3dJbmZpbml0eVBvaW50OiJib29sZWFuIixmcm9tQnl0ZXM6ImZ1bmN0aW9uIix0b0J5dGVzOiJmdW5jdGlvbiJ9KTtjb25zdHtlbmRvOnQsRnA6YSxhOnN9PWU7aWYodCl7aWYoIWEuZXFsKHMsYS5aRVJPKSl0aHJvdyBuZXcgRXJyb3IoIkVuZG9tb3JwaGlzbSBjYW4gb25seSBiZSBkZWZpbmVkIGZvciBLb2JsaXR6IGN1cnZlcyB0aGF0IGhhdmUgYT0wIik7aWYodHlwZW9mIHQhPSJvYmplY3QifHx0eXBlb2YgdC5iZXRhIT0iYmlnaW50Inx8dHlwZW9mIHQuc3BsaXRTY2FsYXIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBlbmRvbW9ycGhpc20gd2l0aCBiZXRhOiBiaWdpbnQgYW5kIHNwbGl0U2NhbGFyOiBmdW5jdGlvbiIpfXJldHVybiBPYmplY3QuZnJlZXplKHsuLi5lfSl9Y29uc3R7Ynl0ZXNUb051bWJlckJFOmQyLGhleFRvQnl0ZXM6cDJ9PVhtLHhvPXtFcnI6Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlPSIiKXtzdXBlcihlKX19LF9wYXJzZUludChuKXtjb25zdHtFcnI6ZX09eG87aWYobi5sZW5ndGg8Mnx8blswXSE9PTIpdGhyb3cgbmV3IGUoIkludmFsaWQgc2lnbmF0dXJlIGludGVnZXIgdGFnIik7Y29uc3QgdD1uWzFdLGE9bi5zdWJhcnJheSgyLHQrMik7aWYoIXR8fGEubGVuZ3RoIT09dCl0aHJvdyBuZXcgZSgiSW52YWxpZCBzaWduYXR1cmUgaW50ZWdlcjogd3JvbmcgbGVuZ3RoIik7aWYoYVswXSYxMjgpdGhyb3cgbmV3IGUoIkludmFsaWQgc2lnbmF0dXJlIGludGVnZXI6IG5lZ2F0aXZlIik7aWYoYVswXT09PTAmJiEoYVsxXSYxMjgpKXRocm93IG5ldyBlKCJJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyOiB1bm5lY2Vzc2FyeSBsZWFkaW5nIHplcm8iKTtyZXR1cm57ZDpkMihhKSxsOm4uc3ViYXJyYXkodCsyKX19LHRvU2lnKG4pe2NvbnN0e0VycjplfT14byx0PXR5cGVvZiBuPT0ic3RyaW5nIj9wMihuKTpuO0dhKHQpO2xldCBhPXQubGVuZ3RoO2lmKGE8Mnx8dFswXSE9NDgpdGhyb3cgbmV3IGUoIkludmFsaWQgc2lnbmF0dXJlIHRhZyIpO2lmKHRbMV0hPT1hLTIpdGhyb3cgbmV3IGUoIkludmFsaWQgc2lnbmF0dXJlOiBpbmNvcnJlY3QgbGVuZ3RoIik7Y29uc3R7ZDpzLGw6cn09eG8uX3BhcnNlSW50KHQuc3ViYXJyYXkoMikpLHtkOm8sbDppfT14by5fcGFyc2VJbnQocik7aWYoaS5sZW5ndGgpdGhyb3cgbmV3IGUoIkludmFsaWQgc2lnbmF0dXJlOiBsZWZ0IGJ5dGVzIGFmdGVyIHBhcnNpbmciKTtyZXR1cm57cjpzLHM6b319LGhleEZyb21TaWcobil7Y29uc3QgZT1mPT5OdW1iZXIucGFyc2VJbnQoZlswXSwxNikmOD8iMDAiK2Y6Zix0PWY9Pntjb25zdCBkPWYudG9TdHJpbmcoMTYpO3JldHVybiBkLmxlbmd0aCYxP2AwJHtkfWA6ZH0sYT1lKHQobi5zKSkscz1lKHQobi5yKSkscj1hLmxlbmd0aC8yLG89cy5sZW5ndGgvMixpPXQociksYz10KG8pO3JldHVybmAzMCR7dChvK3IrNCl9MDIke2N9JHtzfTAyJHtpfSR7YX1gfX0sQm49QmlnSW50KDApLFJyPUJpZ0ludCgxKTtCaWdJbnQoMik7Y29uc3Qga3A9QmlnSW50KDMpO0JpZ0ludCg0KTtmdW5jdGlvbiBoMihuKXtjb25zdCBlPWYyKG4pLHtGcDp0fT1lLGE9ZS50b0J5dGVzfHwoKFcsZyxBKT0+e2NvbnN0IG09Zy50b0FmZmluZSgpO3JldHVybiBTYShVaW50OEFycmF5LmZyb20oWzRdKSx0LnRvQnl0ZXMobS54KSx0LnRvQnl0ZXMobS55KSl9KSxzPWUuZnJvbUJ5dGVzfHwoVz0+e2NvbnN0IGc9Vy5zdWJhcnJheSgxKSxBPXQuZnJvbUJ5dGVzKGcuc3ViYXJyYXkoMCx0LkJZVEVTKSksbT10LmZyb21CeXRlcyhnLnN1YmFycmF5KHQuQllURVMsMip0LkJZVEVTKSk7cmV0dXJue3g6QSx5Om19fSk7ZnVuY3Rpb24gcihXKXtjb25zdHthOmcsYjpBfT1lLG09dC5zcXIoVyksdz10Lm11bChtLFcpO3JldHVybiB0LmFkZCh0LmFkZCh3LHQubXVsKFcsZykpLEEpfWlmKCF0LmVxbCh0LnNxcihlLkd5KSxyKGUuR3gpKSl0aHJvdyBuZXcgRXJyb3IoImJhZCBnZW5lcmF0b3IgcG9pbnQ6IGVxdWF0aW9uIGxlZnQgIT0gcmlnaHQiKTtmdW5jdGlvbiBvKFcpe3JldHVybiB0eXBlb2YgVz09ImJpZ2ludCImJkJuPFcmJlc8ZS5ufWZ1bmN0aW9uIGkoVyl7aWYoIW8oVykpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB2YWxpZCBiaWdpbnQ6IDAgPCBiaWdpbnQgPCBjdXJ2ZS5uIil9ZnVuY3Rpb24gYyhXKXtjb25zdHthbGxvd2VkUHJpdmF0ZUtleUxlbmd0aHM6ZyxuQnl0ZUxlbmd0aDpBLHdyYXBQcml2YXRlS2V5Om0sbjp3fT1lO2lmKGcmJnR5cGVvZiBXIT0iYmlnaW50Iil7aWYoTm8oVykmJihXPSRzKFcpKSx0eXBlb2YgVyE9InN0cmluZyJ8fCFnLmluY2x1ZGVzKFcubGVuZ3RoKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQga2V5Iik7Vz1XLnBhZFN0YXJ0KEEqMiwiMCIpfWxldCBCO3RyeXtCPXR5cGVvZiBXPT0iYmlnaW50Ij9XOlNvKHpyKCJwcml2YXRlIGtleSIsVyxBKSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKGBwcml2YXRlIGtleSBtdXN0IGJlICR7QX0gYnl0ZXMsIGhleCBvciBiaWdpbnQsIG5vdCAke3R5cGVvZiBXfWApfXJldHVybiBtJiYoQj1lcihCLHcpKSxpKEIpLEJ9Y29uc3QgZj1uZXcgTWFwO2Z1bmN0aW9uIGQoVyl7aWYoIShXIGluc3RhbmNlb2YgcCkpdGhyb3cgbmV3IEVycm9yKCJQcm9qZWN0aXZlUG9pbnQgZXhwZWN0ZWQiKX1jbGFzcyBwe2NvbnN0cnVjdG9yKGcsQSxtKXtpZih0aGlzLnB4PWcsdGhpcy5weT1BLHRoaXMucHo9bSxnPT1udWxsfHwhdC5pc1ZhbGlkKGcpKXRocm93IG5ldyBFcnJvcigieCByZXF1aXJlZCIpO2lmKEE9PW51bGx8fCF0LmlzVmFsaWQoQSkpdGhyb3cgbmV3IEVycm9yKCJ5IHJlcXVpcmVkIik7aWYobT09bnVsbHx8IXQuaXNWYWxpZChtKSl0aHJvdyBuZXcgRXJyb3IoInogcmVxdWlyZWQiKX1zdGF0aWMgZnJvbUFmZmluZShnKXtjb25zdHt4OkEseTptfT1nfHx7fTtpZighZ3x8IXQuaXNWYWxpZChBKXx8IXQuaXNWYWxpZChtKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgYWZmaW5lIHBvaW50Iik7aWYoZyBpbnN0YW5jZW9mIHApdGhyb3cgbmV3IEVycm9yKCJwcm9qZWN0aXZlIHBvaW50IG5vdCBhbGxvd2VkIik7Y29uc3Qgdz1CPT50LmVxbChCLHQuWkVSTyk7cmV0dXJuIHcoQSkmJncobSk/cC5aRVJPOm5ldyBwKEEsbSx0Lk9ORSl9Z2V0IHgoKXtyZXR1cm4gdGhpcy50b0FmZmluZSgpLnh9Z2V0IHkoKXtyZXR1cm4gdGhpcy50b0FmZmluZSgpLnl9c3RhdGljIG5vcm1hbGl6ZVooZyl7Y29uc3QgQT10LmludmVydEJhdGNoKGcubWFwKG09Pm0ucHopKTtyZXR1cm4gZy5tYXAoKG0sdyk9Pm0udG9BZmZpbmUoQVt3XSkpLm1hcChwLmZyb21BZmZpbmUpfXN0YXRpYyBmcm9tSGV4KGcpe2NvbnN0IEE9cC5mcm9tQWZmaW5lKHMoenIoInBvaW50SGV4IixnKSkpO3JldHVybiBBLmFzc2VydFZhbGlkaXR5KCksQX1zdGF0aWMgZnJvbVByaXZhdGVLZXkoZyl7cmV0dXJuIHAuQkFTRS5tdWx0aXBseShjKGcpKX1fc2V0V2luZG93U2l6ZShnKXt0aGlzLl9XSU5ET1dfU0laRT1nLGYuZGVsZXRlKHRoaXMpfWFzc2VydFZhbGlkaXR5KCl7aWYodGhpcy5pczAoKSl7aWYoZS5hbGxvd0luZmluaXR5UG9pbnQmJiF0LmlzMCh0aGlzLnB5KSlyZXR1cm47dGhyb3cgbmV3IEVycm9yKCJiYWQgcG9pbnQ6IFpFUk8iKX1jb25zdHt4OmcseTpBfT10aGlzLnRvQWZmaW5lKCk7aWYoIXQuaXNWYWxpZChnKXx8IXQuaXNWYWxpZChBKSl0aHJvdyBuZXcgRXJyb3IoImJhZCBwb2ludDogeCBvciB5IG5vdCBGRSIpO2NvbnN0IG09dC5zcXIoQSksdz1yKGcpO2lmKCF0LmVxbChtLHcpKXRocm93IG5ldyBFcnJvcigiYmFkIHBvaW50OiBlcXVhdGlvbiBsZWZ0ICE9IHJpZ2h0Iik7aWYoIXRoaXMuaXNUb3JzaW9uRnJlZSgpKXRocm93IG5ldyBFcnJvcigiYmFkIHBvaW50OiBub3QgaW4gcHJpbWUtb3JkZXIgc3ViZ3JvdXAiKX1oYXNFdmVuWSgpe2NvbnN0e3k6Z309dGhpcy50b0FmZmluZSgpO2lmKHQuaXNPZGQpcmV0dXJuIXQuaXNPZGQoZyk7dGhyb3cgbmV3IEVycm9yKCJGaWVsZCBkb2Vzbid0IHN1cHBvcnQgaXNPZGQiKX1lcXVhbHMoZyl7ZChnKTtjb25zdHtweDpBLHB5Om0scHo6d309dGhpcyx7cHg6QixweTprLHB6OlZ9PWcsTD10LmVxbCh0Lm11bChBLFYpLHQubXVsKEIsdykpLEk9dC5lcWwodC5tdWwobSxWKSx0Lm11bChrLHcpKTtyZXR1cm4gTCYmSX1uZWdhdGUoKXtyZXR1cm4gbmV3IHAodGhpcy5weCx0Lm5lZyh0aGlzLnB5KSx0aGlzLnB6KX1kb3VibGUoKXtjb25zdHthOmcsYjpBfT1lLG09dC5tdWwoQSxrcCkse3B4OncscHk6QixwejprfT10aGlzO2xldCBWPXQuWkVSTyxMPXQuWkVSTyxJPXQuWkVSTyx5PXQubXVsKHcsdyksRT10Lm11bChCLEIpLEM9dC5tdWwoayxrKSxGPXQubXVsKHcsQik7cmV0dXJuIEY9dC5hZGQoRixGKSxJPXQubXVsKHcsayksST10LmFkZChJLEkpLFY9dC5tdWwoZyxJKSxMPXQubXVsKG0sQyksTD10LmFkZChWLEwpLFY9dC5zdWIoRSxMKSxMPXQuYWRkKEUsTCksTD10Lm11bChWLEwpLFY9dC5tdWwoRixWKSxJPXQubXVsKG0sSSksQz10Lm11bChnLEMpLEY9dC5zdWIoeSxDKSxGPXQubXVsKGcsRiksRj10LmFkZChGLEkpLEk9dC5hZGQoeSx5KSx5PXQuYWRkKEkseSkseT10LmFkZCh5LEMpLHk9dC5tdWwoeSxGKSxMPXQuYWRkKEwseSksQz10Lm11bChCLGspLEM9dC5hZGQoQyxDKSx5PXQubXVsKEMsRiksVj10LnN1YihWLHkpLEk9dC5tdWwoQyxFKSxJPXQuYWRkKEksSSksST10LmFkZChJLEkpLG5ldyBwKFYsTCxJKX1hZGQoZyl7ZChnKTtjb25zdHtweDpBLHB5Om0scHo6d309dGhpcyx7cHg6QixweTprLHB6OlZ9PWc7bGV0IEw9dC5aRVJPLEk9dC5aRVJPLHk9dC5aRVJPO2NvbnN0IEU9ZS5hLEM9dC5tdWwoZS5iLGtwKTtsZXQgRj10Lm11bChBLEIpLCQ9dC5tdWwobSxrKSxPPXQubXVsKHcsViksUj10LmFkZChBLG0pLHg9dC5hZGQoQixrKTtSPXQubXVsKFIseCkseD10LmFkZChGLCQpLFI9dC5zdWIoUix4KSx4PXQuYWRkKEEsdyk7bGV0IHY9dC5hZGQoQixWKTtyZXR1cm4geD10Lm11bCh4LHYpLHY9dC5hZGQoRixPKSx4PXQuc3ViKHgsdiksdj10LmFkZChtLHcpLEw9dC5hZGQoayxWKSx2PXQubXVsKHYsTCksTD10LmFkZCgkLE8pLHY9dC5zdWIodixMKSx5PXQubXVsKEUseCksTD10Lm11bChDLE8pLHk9dC5hZGQoTCx5KSxMPXQuc3ViKCQseSkseT10LmFkZCgkLHkpLEk9dC5tdWwoTCx5KSwkPXQuYWRkKEYsRiksJD10LmFkZCgkLEYpLE89dC5tdWwoRSxPKSx4PXQubXVsKEMseCksJD10LmFkZCgkLE8pLE89dC5zdWIoRixPKSxPPXQubXVsKEUsTykseD10LmFkZCh4LE8pLEY9dC5tdWwoJCx4KSxJPXQuYWRkKEksRiksRj10Lm11bCh2LHgpLEw9dC5tdWwoUixMKSxMPXQuc3ViKEwsRiksRj10Lm11bChSLCQpLHk9dC5tdWwodix5KSx5PXQuYWRkKHksRiksbmV3IHAoTCxJLHkpfXN1YnRyYWN0KGcpe3JldHVybiB0aGlzLmFkZChnLm5lZ2F0ZSgpKX1pczAoKXtyZXR1cm4gdGhpcy5lcXVhbHMocC5aRVJPKX13TkFGKGcpe3JldHVybiBULndOQUZDYWNoZWQodGhpcyxmLGcsQT0+e2NvbnN0IG09dC5pbnZlcnRCYXRjaChBLm1hcCh3PT53LnB6KSk7cmV0dXJuIEEubWFwKCh3LEIpPT53LnRvQWZmaW5lKG1bQl0pKS5tYXAocC5mcm9tQWZmaW5lKX0pfW11bHRpcGx5VW5zYWZlKGcpe2NvbnN0IEE9cC5aRVJPO2lmKGc9PT1CbilyZXR1cm4gQTtpZihpKGcpLGc9PT1ScilyZXR1cm4gdGhpcztjb25zdHtlbmRvOm19PWU7aWYoIW0pcmV0dXJuIFQudW5zYWZlTGFkZGVyKHRoaXMsZyk7bGV0e2sxbmVnOncsazE6QixrMm5lZzprLGsyOlZ9PW0uc3BsaXRTY2FsYXIoZyksTD1BLEk9QSx5PXRoaXM7Zm9yKDtCPkJufHxWPkJuOylCJlJyJiYoTD1MLmFkZCh5KSksViZSciYmKEk9SS5hZGQoeSkpLHk9eS5kb3VibGUoKSxCPj49UnIsVj4+PVJyO3JldHVybiB3JiYoTD1MLm5lZ2F0ZSgpKSxrJiYoST1JLm5lZ2F0ZSgpKSxJPW5ldyBwKHQubXVsKEkucHgsbS5iZXRhKSxJLnB5LEkucHopLEwuYWRkKEkpfW11bHRpcGx5KGcpe2koZyk7bGV0IEE9ZyxtLHc7Y29uc3R7ZW5kbzpCfT1lO2lmKEIpe2NvbnN0e2sxbmVnOmssazE6VixrMm5lZzpMLGsyOkl9PUIuc3BsaXRTY2FsYXIoQSk7bGV0e3A6eSxmOkV9PXRoaXMud05BRihWKSx7cDpDLGY6Rn09dGhpcy53TkFGKEkpO3k9VC5jb25zdFRpbWVOZWdhdGUoayx5KSxDPVQuY29uc3RUaW1lTmVnYXRlKEwsQyksQz1uZXcgcCh0Lm11bChDLnB4LEIuYmV0YSksQy5weSxDLnB6KSxtPXkuYWRkKEMpLHc9RS5hZGQoRil9ZWxzZXtjb25zdHtwOmssZjpWfT10aGlzLndOQUYoQSk7bT1rLHc9Vn1yZXR1cm4gcC5ub3JtYWxpemVaKFttLHddKVswXX1tdWx0aXBseUFuZEFkZFVuc2FmZShnLEEsbSl7Y29uc3Qgdz1wLkJBU0UsQj0oVixMKT0+TD09PUJufHxMPT09UnJ8fCFWLmVxdWFscyh3KT9WLm11bHRpcGx5VW5zYWZlKEwpOlYubXVsdGlwbHkoTCksaz1CKHRoaXMsQSkuYWRkKEIoZyxtKSk7cmV0dXJuIGsuaXMwKCk/dm9pZCAwOmt9dG9BZmZpbmUoZyl7Y29uc3R7cHg6QSxweTptLHB6Ond9PXRoaXMsQj10aGlzLmlzMCgpO2c9PW51bGwmJihnPUI/dC5PTkU6dC5pbnYodykpO2NvbnN0IGs9dC5tdWwoQSxnKSxWPXQubXVsKG0sZyksTD10Lm11bCh3LGcpO2lmKEIpcmV0dXJue3g6dC5aRVJPLHk6dC5aRVJPfTtpZighdC5lcWwoTCx0Lk9ORSkpdGhyb3cgbmV3IEVycm9yKCJpbnZaIHdhcyBpbnZhbGlkIik7cmV0dXJue3g6ayx5OlZ9fWlzVG9yc2lvbkZyZWUoKXtjb25zdHtoOmcsaXNUb3JzaW9uRnJlZTpBfT1lO2lmKGc9PT1ScilyZXR1cm4hMDtpZihBKXJldHVybiBBKHAsdGhpcyk7dGhyb3cgbmV3IEVycm9yKCJpc1RvcnNpb25GcmVlKCkgaGFzIG5vdCBiZWVuIGRlY2xhcmVkIGZvciB0aGUgZWxsaXB0aWMgY3VydmUiKX1jbGVhckNvZmFjdG9yKCl7Y29uc3R7aDpnLGNsZWFyQ29mYWN0b3I6QX09ZTtyZXR1cm4gZz09PVJyP3RoaXM6QT9BKHAsdGhpcyk6dGhpcy5tdWx0aXBseVVuc2FmZShlLmgpfXRvUmF3Qnl0ZXMoZz0hMCl7cmV0dXJuIHRoaXMuYXNzZXJ0VmFsaWRpdHkoKSxhKHAsdGhpcyxnKX10b0hleChnPSEwKXtyZXR1cm4gJHModGhpcy50b1Jhd0J5dGVzKGcpKX19cC5CQVNFPW5ldyBwKGUuR3gsZS5HeSx0Lk9ORSkscC5aRVJPPW5ldyBwKHQuWkVSTyx0Lk9ORSx0LlpFUk8pO2NvbnN0IGI9ZS5uQml0TGVuZ3RoLFQ9bDIocCxlLmVuZG8/TWF0aC5jZWlsKGIvMik6Yik7cmV0dXJue0NVUlZFOmUsUHJvamVjdGl2ZVBvaW50OnAsbm9ybVByaXZhdGVLZXlUb1NjYWxhcjpjLHdlaWVyc3RyYXNzRXF1YXRpb246cixpc1dpdGhpbkN1cnZlT3JkZXI6b319ZnVuY3Rpb24gZzIobil7Y29uc3QgZT10eShuKTtyZXR1cm4gSGEoZSx7aGFzaDoiaGFzaCIsaG1hYzoiZnVuY3Rpb24iLHJhbmRvbUJ5dGVzOiJmdW5jdGlvbiJ9LHtiaXRzMmludDoiZnVuY3Rpb24iLGJpdHMyaW50X21vZE46ImZ1bmN0aW9uIixsb3dTOiJib29sZWFuIn0pLE9iamVjdC5mcmVlemUoe2xvd1M6ITAsLi4uZX0pfWZ1bmN0aW9uIGIyKG4pe2NvbnN0IGU9ZzIobikse0ZwOnQsbjphfT1lLHM9dC5CWVRFUysxLHI9Mip0LkJZVEVTKzE7ZnVuY3Rpb24gbyh4KXtyZXR1cm4gQm48eCYmeDx0Lk9SREVSfWZ1bmN0aW9uIGkoeCl7cmV0dXJuIGVyKHgsYSl9ZnVuY3Rpb24gYyh4KXtyZXR1cm4gaGwoeCxhKX1jb25zdHtQcm9qZWN0aXZlUG9pbnQ6Zixub3JtUHJpdmF0ZUtleVRvU2NhbGFyOmQsd2VpZXJzdHJhc3NFcXVhdGlvbjpwLGlzV2l0aGluQ3VydmVPcmRlcjpifT1oMih7Li4uZSx0b0J5dGVzKHgsdixfKXtjb25zdCBNPXYudG9BZmZpbmUoKSx6PXQudG9CeXRlcyhNLngpLHE9U2E7cmV0dXJuIF8/cShVaW50OEFycmF5LmZyb20oW3YuaGFzRXZlblkoKT8yOjNdKSx6KTpxKFVpbnQ4QXJyYXkuZnJvbShbNF0pLHosdC50b0J5dGVzKE0ueSkpfSxmcm9tQnl0ZXMoeCl7Y29uc3Qgdj14Lmxlbmd0aCxfPXhbMF0sTT14LnN1YmFycmF5KDEpO2lmKHY9PT1zJiYoXz09PTJ8fF89PT0zKSl7Y29uc3Qgej1TbyhNKTtpZighbyh6KSl0aHJvdyBuZXcgRXJyb3IoIlBvaW50IGlzIG5vdCBvbiBjdXJ2ZSIpO2NvbnN0IHE9cCh6KTtsZXQgUTt0cnl7UT10LnNxcnQocSl9Y2F0Y2goVGUpe2NvbnN0IHBlPVRlIGluc3RhbmNlb2YgRXJyb3I/IjogIitUZS5tZXNzYWdlOiIiO3Rocm93IG5ldyBFcnJvcigiUG9pbnQgaXMgbm90IG9uIGN1cnZlIitwZSl9Y29uc3QgZWU9KFEmUnIpPT09UnI7cmV0dXJuKF8mMSk9PT0xIT09ZWUmJihRPXQubmVnKFEpKSx7eDp6LHk6UX19ZWxzZSBpZih2PT09ciYmXz09PTQpe2NvbnN0IHo9dC5mcm9tQnl0ZXMoTS5zdWJhcnJheSgwLHQuQllURVMpKSxxPXQuZnJvbUJ5dGVzKE0uc3ViYXJyYXkodC5CWVRFUywyKnQuQllURVMpKTtyZXR1cm57eDp6LHk6cX19ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYFBvaW50IG9mIGxlbmd0aCAke3Z9IHdhcyBpbnZhbGlkLiBFeHBlY3RlZCAke3N9IGNvbXByZXNzZWQgYnl0ZXMgb3IgJHtyfSB1bmNvbXByZXNzZWQgYnl0ZXNgKX19KSxUPXg9PiRzKExzKHgsZS5uQnl0ZUxlbmd0aCkpO2Z1bmN0aW9uIFcoeCl7Y29uc3Qgdj1hPj5ScjtyZXR1cm4geD52fWZ1bmN0aW9uIGcoeCl7cmV0dXJuIFcoeCk/aSgteCk6eH1jb25zdCBBPSh4LHYsXyk9PlNvKHguc2xpY2UodixfKSk7Y2xhc3MgbXtjb25zdHJ1Y3Rvcih2LF8sTSl7dGhpcy5yPXYsdGhpcy5zPV8sdGhpcy5yZWNvdmVyeT1NLHRoaXMuYXNzZXJ0VmFsaWRpdHkoKX1zdGF0aWMgZnJvbUNvbXBhY3Qodil7Y29uc3QgXz1lLm5CeXRlTGVuZ3RoO3JldHVybiB2PXpyKCJjb21wYWN0U2lnbmF0dXJlIix2LF8qMiksbmV3IG0oQSh2LDAsXyksQSh2LF8sMipfKSl9c3RhdGljIGZyb21ERVIodil7Y29uc3R7cjpfLHM6TX09eG8udG9TaWcoenIoIkRFUiIsdikpO3JldHVybiBuZXcgbShfLE0pfWFzc2VydFZhbGlkaXR5KCl7aWYoIWIodGhpcy5yKSl0aHJvdyBuZXcgRXJyb3IoInIgbXVzdCBiZSAwIDwgciA8IENVUlZFLm4iKTtpZighYih0aGlzLnMpKXRocm93IG5ldyBFcnJvcigicyBtdXN0IGJlIDAgPCBzIDwgQ1VSVkUubiIpfWFkZFJlY292ZXJ5Qml0KHYpe3JldHVybiBuZXcgbSh0aGlzLnIsdGhpcy5zLHYpfXJlY292ZXJQdWJsaWNLZXkodil7Y29uc3R7cjpfLHM6TSxyZWNvdmVyeTp6fT10aGlzLHE9SSh6cigibXNnSGFzaCIsdikpO2lmKHo9PW51bGx8fCFbMCwxLDIsM10uaW5jbHVkZXMoeikpdGhyb3cgbmV3IEVycm9yKCJyZWNvdmVyeSBpZCBpbnZhbGlkIik7Y29uc3QgUT16PT09Mnx8ej09PTM/XytlLm46XztpZihRPj10Lk9SREVSKXRocm93IG5ldyBFcnJvcigicmVjb3ZlcnkgaWQgMiBvciAzIGludmFsaWQiKTtjb25zdCBlZT16JjE/IjAzIjoiMDIiLGdlPWYuZnJvbUhleChlZStUKFEpKSxUZT1jKFEpLHBlPWkoLXEqVGUpLGZlPWkoTSpUZSksZGU9Zi5CQVNFLm11bHRpcGx5QW5kQWRkVW5zYWZlKGdlLHBlLGZlKTtpZighZGUpdGhyb3cgbmV3IEVycm9yKCJwb2ludCBhdCBpbmZpbmlmeSIpO3JldHVybiBkZS5hc3NlcnRWYWxpZGl0eSgpLGRlfWhhc0hpZ2hTKCl7cmV0dXJuIFcodGhpcy5zKX1ub3JtYWxpemVTKCl7cmV0dXJuIHRoaXMuaGFzSGlnaFMoKT9uZXcgbSh0aGlzLnIsaSgtdGhpcy5zKSx0aGlzLnJlY292ZXJ5KTp0aGlzfXRvREVSUmF3Qnl0ZXMoKXtyZXR1cm4gSWEodGhpcy50b0RFUkhleCgpKX10b0RFUkhleCgpe3JldHVybiB4by5oZXhGcm9tU2lnKHtyOnRoaXMucixzOnRoaXMuc30pfXRvQ29tcGFjdFJhd0J5dGVzKCl7cmV0dXJuIElhKHRoaXMudG9Db21wYWN0SGV4KCkpfXRvQ29tcGFjdEhleCgpe3JldHVybiBUKHRoaXMucikrVCh0aGlzLnMpfX1jb25zdCB3PXtpc1ZhbGlkUHJpdmF0ZUtleSh4KXt0cnl7cmV0dXJuIGQoeCksITB9Y2F0Y2h7cmV0dXJuITF9fSxub3JtUHJpdmF0ZUtleVRvU2NhbGFyOmQscmFuZG9tUHJpdmF0ZUtleTooKT0+e2NvbnN0IHg9ZXkoZS5uKTtyZXR1cm4gYzIoZS5yYW5kb21CeXRlcyh4KSxlLm4pfSxwcmVjb21wdXRlKHg9OCx2PWYuQkFTRSl7cmV0dXJuIHYuX3NldFdpbmRvd1NpemUoeCksdi5tdWx0aXBseShCaWdJbnQoMykpLHZ9fTtmdW5jdGlvbiBCKHgsdj0hMCl7cmV0dXJuIGYuZnJvbVByaXZhdGVLZXkoeCkudG9SYXdCeXRlcyh2KX1mdW5jdGlvbiBrKHgpe2NvbnN0IHY9Tm8oeCksXz10eXBlb2YgeD09InN0cmluZyIsTT0odnx8XykmJngubGVuZ3RoO3JldHVybiB2P009PT1zfHxNPT09cjpfP009PT0yKnN8fE09PT0yKnI6eCBpbnN0YW5jZW9mIGZ9ZnVuY3Rpb24gVih4LHYsXz0hMCl7aWYoayh4KSl0aHJvdyBuZXcgRXJyb3IoImZpcnN0IGFyZyBtdXN0IGJlIHByaXZhdGUga2V5Iik7aWYoIWsodikpdGhyb3cgbmV3IEVycm9yKCJzZWNvbmQgYXJnIG11c3QgYmUgcHVibGljIGtleSIpO3JldHVybiBmLmZyb21IZXgodikubXVsdGlwbHkoZCh4KSkudG9SYXdCeXRlcyhfKX1jb25zdCBMPWUuYml0czJpbnR8fGZ1bmN0aW9uKHgpe2NvbnN0IHY9U28oeCksXz14Lmxlbmd0aCo4LWUubkJpdExlbmd0aDtyZXR1cm4gXz4wP3Y+PkJpZ0ludChfKTp2fSxJPWUuYml0czJpbnRfbW9kTnx8ZnVuY3Rpb24oeCl7cmV0dXJuIGkoTCh4KSl9LHk9WmQoZS5uQml0TGVuZ3RoKTtmdW5jdGlvbiBFKHgpe2lmKHR5cGVvZiB4IT0iYmlnaW50Iil0aHJvdyBuZXcgRXJyb3IoImJpZ2ludCBleHBlY3RlZCIpO2lmKCEoQm48PXgmJng8eSkpdGhyb3cgbmV3IEVycm9yKGBiaWdpbnQgZXhwZWN0ZWQgPCAyXiR7ZS5uQml0TGVuZ3RofWApO3JldHVybiBMcyh4LGUubkJ5dGVMZW5ndGgpfWZ1bmN0aW9uIEMoeCx2LF89Ril7aWYoWyJyZWNvdmVyZWQiLCJjYW5vbmljYWwiXS5zb21lKEtlPT5LZSBpbiBfKSl0aHJvdyBuZXcgRXJyb3IoInNpZ24oKSBsZWdhY3kgb3B0aW9ucyBub3Qgc3VwcG9ydGVkIik7Y29uc3R7aGFzaDpNLHJhbmRvbUJ5dGVzOnp9PWU7bGV0e2xvd1M6cSxwcmVoYXNoOlEsZXh0cmFFbnRyb3B5OmVlfT1fO3E9PW51bGwmJihxPSEwKSx4PXpyKCJtc2dIYXNoIix4KSxRJiYoeD16cigicHJlaGFzaGVkIG1zZ0hhc2giLE0oeCkpKTtjb25zdCBnZT1JKHgpLFRlPWQodikscGU9W0UoVGUpLEUoZ2UpXTtpZihlZSE9bnVsbCYmZWUhPT0hMSl7Y29uc3QgS2U9ZWU9PT0hMD96KHQuQllURVMpOmVlO3BlLnB1c2goenIoImV4dHJhRW50cm9weSIsS2UpKX1jb25zdCBmZT1TYSguLi5wZSksZGU9Z2U7ZnVuY3Rpb24gQmUoS2Upe2NvbnN0IFFlPUwoS2UpO2lmKCFiKFFlKSlyZXR1cm47Y29uc3QgcnQ9YyhRZSksSWU9Zi5CQVNFLm11bHRpcGx5KFFlKS50b0FmZmluZSgpLE1lPWkoSWUueCk7aWYoTWU9PT1CbilyZXR1cm47Y29uc3QgTmU9aShydCppKGRlK01lKlRlKSk7aWYoTmU9PT1CbilyZXR1cm47bGV0IF9lPShJZS54PT09TWU/MDoyKXxOdW1iZXIoSWUueSZSciksQ2U9TmU7cmV0dXJuIHEmJlcoTmUpJiYoQ2U9ZyhOZSksX2VePTEpLG5ldyBtKE1lLENlLF9lKX1yZXR1cm57c2VlZDpmZSxrMnNpZzpCZX19Y29uc3QgRj17bG93UzplLmxvd1MscHJlaGFzaDohMX0sJD17bG93UzplLmxvd1MscHJlaGFzaDohMX07ZnVuY3Rpb24gTyh4LHYsXz1GKXtjb25zdHtzZWVkOk0sazJzaWc6en09Qyh4LHYsXykscT1lO3JldHVybiBZYihxLmhhc2gub3V0cHV0TGVuLHEubkJ5dGVMZW5ndGgscS5obWFjKShNLHopfWYuQkFTRS5fc2V0V2luZG93U2l6ZSg4KTtmdW5jdGlvbiBSKHgsdixfLE09JCl7Y29uc3Qgej14O2lmKHY9enIoIm1zZ0hhc2giLHYpLF89enIoInB1YmxpY0tleSIsXyksInN0cmljdCJpbiBNKXRocm93IG5ldyBFcnJvcigib3B0aW9ucy5zdHJpY3Qgd2FzIHJlbmFtZWQgdG8gbG93UyIpO2NvbnN0e2xvd1M6cSxwcmVoYXNoOlF9PU07bGV0IGVlLGdlO3RyeXtpZih0eXBlb2Ygej09InN0cmluZyJ8fE5vKHopKXRyeXtlZT1tLmZyb21ERVIoeil9Y2F0Y2goSWUpe2lmKCEoSWUgaW5zdGFuY2VvZiB4by5FcnIpKXRocm93IEllO2VlPW0uZnJvbUNvbXBhY3Qoeil9ZWxzZSBpZih0eXBlb2Ygej09Im9iamVjdCImJnR5cGVvZiB6LnI9PSJiaWdpbnQiJiZ0eXBlb2Ygei5zPT0iYmlnaW50Iil7Y29uc3R7cjpJZSxzOk1lfT16O2VlPW5ldyBtKEllLE1lKX1lbHNlIHRocm93IG5ldyBFcnJvcigiUEFSU0UiKTtnZT1mLmZyb21IZXgoXyl9Y2F0Y2goSWUpe2lmKEllLm1lc3NhZ2U9PT0iUEFSU0UiKXRocm93IG5ldyBFcnJvcigic2lnbmF0dXJlIG11c3QgYmUgU2lnbmF0dXJlIGluc3RhbmNlLCBVaW50OEFycmF5IG9yIGhleCBzdHJpbmciKTtyZXR1cm4hMX1pZihxJiZlZS5oYXNIaWdoUygpKXJldHVybiExO1EmJih2PWUuaGFzaCh2KSk7Y29uc3R7cjpUZSxzOnBlfT1lZSxmZT1JKHYpLGRlPWMocGUpLEJlPWkoZmUqZGUpLEtlPWkoVGUqZGUpLFFlPWYuQkFTRS5tdWx0aXBseUFuZEFkZFVuc2FmZShnZSxCZSxLZSk/LnRvQWZmaW5lKCk7cmV0dXJuIFFlP2koUWUueCk9PT1UZTohMX1yZXR1cm57Q1VSVkU6ZSxnZXRQdWJsaWNLZXk6QixnZXRTaGFyZWRTZWNyZXQ6VixzaWduOk8sdmVyaWZ5OlIsUHJvamVjdGl2ZVBvaW50OmYsU2lnbmF0dXJlOm0sdXRpbHM6d319LyohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqL2Z1bmN0aW9uIHkyKG4pe3JldHVybntoYXNoOm4saG1hYzooZSwuLi50KT0+SmIobixlLFVtKC4uLnQpKSxyYW5kb21CeXRlczokbX19ZnVuY3Rpb24geDIobixlKXtjb25zdCB0PWE9PmIyKHsuLi5uLC4uLnkyKGEpfSk7cmV0dXJuIE9iamVjdC5mcmVlemUoey4uLnQoZSksY3JlYXRlOnR9KX0vKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICovY29uc3Qgcnk9QmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlZmZmZmZjMmYiKSxVcD1CaWdJbnQoIjB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmViYWFlZGNlNmFmNDhhMDNiYmZkMjVlOGNkMDM2NDE0MSIpLFQyPUJpZ0ludCgxKSxnbD1CaWdJbnQoMiksRHA9KG4sZSk9PihuK2UvZ2wpL2U7ZnVuY3Rpb24gQTIobil7Y29uc3QgZT1yeSx0PUJpZ0ludCgzKSxhPUJpZ0ludCg2KSxzPUJpZ0ludCgxMSkscj1CaWdJbnQoMjIpLG89QmlnSW50KDIzKSxpPUJpZ0ludCg0NCksYz1CaWdJbnQoODgpLGY9bipuKm4lZSxkPWYqZipuJWUscD12cihkLHQsZSkqZCVlLGI9dnIocCx0LGUpKmQlZSxUPXZyKGIsZ2wsZSkqZiVlLFc9dnIoVCxzLGUpKlQlZSxnPXZyKFcscixlKSpXJWUsQT12cihnLGksZSkqZyVlLG09dnIoQSxjLGUpKkElZSx3PXZyKG0saSxlKSpnJWUsQj12cih3LHQsZSkqZCVlLGs9dnIoQixvLGUpKlclZSxWPXZyKGssYSxlKSpmJWUsTD12cihWLGdsLGUpO2lmKCFibC5lcWwoYmwuc3FyKEwpLG4pKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc3F1YXJlIHJvb3QiKTtyZXR1cm4gTH1jb25zdCBibD1pMihyeSx2b2lkIDAsdm9pZCAwLHtzcXJ0OkEyfSksa2M9eDIoe2E6QmlnSW50KDApLGI6QmlnSW50KDcpLEZwOmJsLG46VXAsR3g6QmlnSW50KCI1NTA2NjI2MzAyMjI3NzM0MzY2OTU3ODcxODg5NTE2ODUzNDMyNjI1MDYwMzQ1Mzc3NzU5NDE3NTUwMDE4NzM2MDM4OTExNjcyOTI0MCIpLEd5OkJpZ0ludCgiMzI2NzA1MTAwMjA3NTg4MTY5NzgwODMwODUxMzA1MDcwNDMxODQ0NzEyNzMzODA2NTkyNDMyNzU5Mzg5MDQzMzU3NTczMzc0ODI0MjQiKSxoOkJpZ0ludCgxKSxsb3dTOiEwLGVuZG86e2JldGE6QmlnSW50KCIweDdhZTk2YTJiNjU3YzA3MTA2ZTY0NDc5ZWFjMzQzNGU5OWNmMDQ5NzUxMmY1ODk5NWMxMzk2YzI4NzE5NTAxZWUiKSxzcGxpdFNjYWxhcjpuPT57Y29uc3QgZT1VcCx0PUJpZ0ludCgiMHgzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSIpLGE9LVQyKkJpZ0ludCgiMHhlNDQzN2VkNjAxMGU4ODI4NmY1NDdmYTkwYWJmZTRjMyIpLHM9QmlnSW50KCIweDExNGNhNTBmN2E4ZTJmM2Y2NTdjMTEwOGQ5ZDQ0Y2ZkOCIpLHI9dCxvPUJpZ0ludCgiMHgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKSxpPURwKHIqbixlKSxjPURwKC1hKm4sZSk7bGV0IGY9ZXIobi1pKnQtYypzLGUpLGQ9ZXIoLWkqYS1jKnIsZSk7Y29uc3QgcD1mPm8sYj1kPm87aWYocCYmKGY9ZS1mKSxiJiYoZD1lLWQpLGY+b3x8ZD5vKXRocm93IG5ldyBFcnJvcigic3BsaXRTY2FsYXI6IEVuZG9tb3JwaGlzbSBmYWlsZWQsIGs9IituKTtyZXR1cm57azFuZWc6cCxrMTpmLGsybmVnOmIsazI6ZH19fX0sS20pO0JpZ0ludCgwKTtrYy5Qcm9qZWN0aXZlUG9pbnQ7ZnVuY3Rpb24gbTIobil7cmV0dXJuIEl0KGxlKG4pLnBhZFN0YXJ0KDY0LCIwIikpfWZ1bmN0aW9uIG5vKG4pe2NvbnN0IGU9cG4obik7bGV0IGE9cG4oZSkuc2xpY2UoMCw0KTtyZXR1cm4gYT1uLmNvbmNhdChhKSxvZyhhKX1mdW5jdGlvbiBueShuKXtpZih0eXBlb2YgbiE9InN0cmluZyJ8fG4ubGVuZ3RoPD00KXJldHVybiExO2xldCBlPW1jKG4pO2lmKGUubGVuZ3RoPD00KXJldHVybiExO2NvbnN0IGE9ZS5sZW5ndGgtNCxzPWUuc2xpY2UoYSk7ZT1lLnNsaWNlKDAsYSk7Y29uc3Qgcj1wbihlKSxpPXBuKHIpLnNsaWNlKDAsNCk7aWYoc1swXT09PWlbMF0mJnNbMV09PT1pWzFdJiZzWzJdPT09aVsyXSYmc1szXT09PWlbM10pcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGFkZHJlc3MgcHJvdmlkZWQiKX1mdW5jdGlvbiBQMihuLGUpe3R5cGVvZiBuPT0ic3RyaW5nIiYmKG49SXQobikpO2NvbnN0IHQ9ZS50eElELGE9cWQoSXQodCksbik7cmV0dXJuIEFycmF5LmlzQXJyYXkoZS5zaWduYXR1cmUpP2Uuc2lnbmF0dXJlLmluY2x1ZGVzKGEpfHxlLnNpZ25hdHVyZS5wdXNoKGEpOmUuc2lnbmF0dXJlPVthXSxlfWZ1bmN0aW9uIHlsKG4sZSl7bj0iMHgiK24ucmVwbGFjZSgvXjB4LywiIiksZT0iMHgiK2UucmVwbGFjZSgvXjB4LywiIik7Y29uc3QgdD1SbyhLYihuKSxLdC5mcm9tKGUpKTtyZXR1cm4gRnIrdC5zdWJzdHJpbmcoMil9ZnVuY3Rpb24gdzIobil7cmV0dXJuIG5ldyBBZCgpLmVuY29kZUlnbm9yZVV0Zjgobil9ZnVuY3Rpb24gdjIobixlKXt0eXBlb2Ygbj09InN0cmluZyImJihuPUl0KG4pKTtjb25zdCB0PXBuKGUpO3JldHVybiBxZCh0LG4pfWZ1bmN0aW9uIEMyKG4pe2NvbnN0IGU9em8obikse1RyYW5zYWN0aW9uOnR9PWdsb2JhbFRoaXMuVHJvbldlYlByb3RvO3JldHVybiB0LmRlc2VyaWFsaXplQmluYXJ5KGUpLmdldFJhd0RhdGEoKS5zZXJpYWxpemVCaW5hcnkoKX1mdW5jdGlvbiBveSgpe2NvbnN0IG49a2MudXRpbHMucmFuZG9tUHJpdmF0ZUtleSgpO2xldCBlPWxlKG4pO3JldHVybiBlPWUucGFkU3RhcnQoNjQsIjAiKSxJdChlKX1mdW5jdGlvbiBLYShuKXtuLmxlbmd0aD09PTY1JiYobj1uLnNsaWNlKDEpKTtjb25zdCBlPSRlKG5ldyBVaW50OEFycmF5KG4pKS50b1N0cmluZygpLnN1YnN0cmluZygyKSx0PUZyK2Uuc3Vic3RyaW5nKDI0KTtyZXR1cm4gSXQodCl9ZnVuY3Rpb24gVWMobil7Y29uc3QgZT1KcyhuKTtyZXR1cm4gS2EoZSl9ZnVuY3Rpb24gRTIobil7Y29uc3QgZT1tYyhuKTtpZihlLmxlbmd0aDw9NClyZXR1cm4hMTtjb25zdCB0PWUuc2xpY2UoMCxlLmxlbmd0aC00KSxhPXBuKHQpLHM9cG4oYSk7cmV0dXJuIHNbMF09PT1lW3QubGVuZ3RoXSYmc1sxXT09PWVbdC5sZW5ndGgrMV0mJnNbMl09PT1lW3QubGVuZ3RoKzJdJiZzWzNdPT09ZVt0Lmxlbmd0aCszXT90OiExfWZ1bmN0aW9uIHN5KG4pe2lmKHR5cGVvZiBuIT0ic3RyaW5nInx8bi5sZW5ndGghPT1RaClyZXR1cm4hMTtsZXQgZT1tYyhuKTtpZihlLmxlbmd0aCE9PTI1fHxlWzBdIT09ZWcpcmV0dXJuITE7Y29uc3QgdD1lLnNsaWNlKDIxKTtlPWUuc2xpY2UoMCwyMSk7Y29uc3QgYT1wbihlKSxyPXBuKGEpLnNsaWNlKDAsNCk7cmV0dXJuIHRbMF09PXJbMF0mJnRbMV09PXJbMV0mJnRbMl09PXJbMl0mJnRbM109PXJbM119ZnVuY3Rpb24gVzIobil7Y29uc3QgZT16byhuKSx0PUpzKGUpLGE9S2EodCk7cmV0dXJuIG5vKGEpfWZ1bmN0aW9uIEIyKG4pe2NvbnN0IGU9em8obiksdD1KcyhlKSxhPUthKHQpO3JldHVybiBsZShhKX1mdW5jdGlvbiBJMihuKXtjb25zdCBlPXpvKG4pLHQ9SnMoZSksYT1LYSh0KTtyZXR1cm4gUGQoYSl9ZnVuY3Rpb24gSnMobil7Y29uc3QgZT1rYy5Qcm9qZWN0aXZlUG9pbnQuZnJvbVByaXZhdGVLZXkobmV3IFVpbnQ4QXJyYXkobTIobikpKSx0PWUueCxhPWUueSxzPXQudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDY0LCIwIikscj1hLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg2NCwiMCIpLG89YDA0JHtzfSR7cn1gO3JldHVybiBJdChvKX1mdW5jdGlvbiBxZChuLGUpe2NvbnN0IHQ9a2Muc2lnbihsZShuKSxsZShlKSksYT10LnIudG9TdHJpbmcoMTYpLHM9dC5zLnRvU3RyaW5nKDE2KSxyPXQucmVjb3ZlcnkrMjc7cmV0dXJuIGEucGFkU3RhcnQoNjQsIjAiKStzLnBhZFN0YXJ0KDY0LCIwIikrQWMocil9ZnVuY3Rpb24gcG4obil7Y29uc3QgZT1sZShuKSx0PVV0KCIweCIrZSkucmVwbGFjZSgvXjB4LywiIik7cmV0dXJuIEl0KHQpfWZ1bmN0aW9uIFMyKG4pe2NvbnN0IGU9em8obiksdD1VYyhlKTtyZXR1cm4gbm8odCl9ZnVuY3Rpb24gRGMobixlPSExKXtuPW4ucmVwbGFjZSgvXjB4LywiIik7Y29uc3QgdD1JdChuLGUpLGE9VWModCk7cmV0dXJuIG5vKGEpfWZ1bmN0aW9uIGF5KG4sZT0hMCl7cmV0dXJuKGU/IjB4IjoiIikrJGUobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKG4pKS50b1N0cmluZygpLnN1YnN0cmluZygyKX1jb25zdCBfMj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsRUNLZXlTaWduOnFkLFNIQTI1NjpwbixhcnJheVRvQmFzZTY0U3RyaW5nOncyLGNvbXB1dGVBZGRyZXNzOkthLGRlY29kZTU4Q2hlY2s6RTIsZGVjb2RlQmFzZTU4QWRkcmVzczpueSxlY1JlY292ZXI6eWwsZ2VuUHJpS2V5Om95LGdldEFkZHJlc3NGcm9tUHJpS2V5OlVjLGdldEFkZHJlc3NGcm9tUHJpS2V5QmFzZTY0U3RyaW5nOkkyLGdldEJhc2U1OENoZWNrQWRkcmVzczpubyxnZXRCYXNlNThDaGVja0FkZHJlc3NGcm9tUHJpS2V5QmFzZTY0U3RyaW5nOlcyLGdldEhleFN0ckFkZHJlc3NGcm9tUHJpS2V5QmFzZTY0U3RyaW5nOkIyLGdldFB1YktleUZyb21QcmlLZXk6SnMsZ2V0Um93Qnl0ZXNGcm9tVHJhbnNhY3Rpb25CYXNlNjQ6QzIsaXNBZGRyZXNzVmFsaWQ6c3kscGFzc3dvcmRUb0FkZHJlc3M6UzIscGtUb0FkZHJlc3M6RGMsc2hhMzpheSxzaWduQnl0ZXM6djIsc2lnblRyYW5zYWN0aW9uOlAyfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLE8yPSJJbnZhbGlkIHRyb24gcGF0aCBwcm92aWRlZCI7ZnVuY3Rpb24gUjIoKXtjb25zdCBuPW95KCksZT1KcyhuKSx0PVVjKG4pLGE9bGUobikscz1sZShlKTtyZXR1cm57cHJpdmF0ZUtleTphLHB1YmxpY0tleTpzLGFkZHJlc3M6e2Jhc2U1ODpubyh0KSxoZXg6bGUodCl9fX1mdW5jdGlvbiBNMihuPSIiLGU9d2QsdCl7Y29uc3QgYT1FYS5jcmVhdGVSYW5kb20obixlLHQpO3JldHVybnttbmVtb25pYzphLm1uZW1vbmljLHByaXZhdGVLZXk6YS5wcml2YXRlS2V5LHB1YmxpY0tleTphLnNpZ25pbmdLZXkucHVibGljS2V5LGFkZHJlc3M6RGMoYS5wcml2YXRlS2V5LnJlcGxhY2UoL14weC8sIiIpKSxwYXRoOmEucGF0aH19ZnVuY3Rpb24gRjIobixlPXdkLHQ9IiIsYT1udWxsKXtpZighU3RyaW5nKGUpLm1hdGNoKC9ebVwvNDRcJ1wvMTk1XCcvKSl0aHJvdyBuZXcgRXJyb3IoTzIpO2NvbnN0IHM9RWEuZnJvbU1uZW1vbmljKGVvLmZyb21QaHJhc2Uobix0LGEpLGUpO3JldHVybnttbmVtb25pYzpzLm1uZW1vbmljLHByaXZhdGVLZXk6cy5wcml2YXRlS2V5LHB1YmxpY0tleTpzLnNpZ25pbmdLZXkucHVibGljS2V5LGFkZHJlc3M6RGMocy5wcml2YXRlS2V5LnJlcGxhY2UoL14weC8sIiIpKX19Y29uc3QgTjI9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGdlbmVyYXRlQWNjb3VudDpSMixnZW5lcmF0ZUFjY291bnRXaXRoTW5lbW9uaWM6RjIsZ2VuZXJhdGVSYW5kb206TTJ9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIGsyPS9eLT8oPzpcZCsoPzpcLlxkKik/fFwuXGQrKSg/OmVbKy1dP1xkKyk/JC9pLFR1PU1hdGguY2VpbCxCcj1NYXRoLmZsb29yLFl0PSJbQmlnTnVtYmVyIEVycm9yXSAiLCRwPVl0KyJOdW1iZXIgcHJpbWl0aXZlIGhhcyBtb3JlIHRoYW4gMTUgc2lnbmlmaWNhbnQgZGlnaXRzOiAiLFVyPTFlMTQsa2U9MTQsQXU9OTAwNzE5OTI1NDc0MDk5MSxtdT1bMSwxMCwxMDAsMWUzLDFlNCwxZTUsMWU2LDFlNywxZTgsMWU5LDFlMTAsMWUxMSwxZTEyLDFlMTNdLHpuPTFlNyxUdD0xZTk7ZnVuY3Rpb24gaXkobil7dmFyIGUsdCxhLHM9dy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOncsdG9TdHJpbmc6bnVsbCx2YWx1ZU9mOm51bGx9LHI9bmV3IHcoMSksbz0yMCxpPTQsYz0tNyxmPTIxLGQ9LTFlNyxwPTFlNyxiPSExLFQ9MSxXPTAsZz17cHJlZml4OiIiLGdyb3VwU2l6ZTozLHNlY29uZGFyeUdyb3VwU2l6ZTowLGdyb3VwU2VwYXJhdG9yOiIsIixkZWNpbWFsU2VwYXJhdG9yOiIuIixmcmFjdGlvbkdyb3VwU2l6ZTowLGZyYWN0aW9uR3JvdXBTZXBhcmF0b3I6IsKgIixzdWZmaXg6IiJ9LEE9IjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsbT0hMDtmdW5jdGlvbiB3KHksRSl7dmFyIEMsRiwkLE8sUix4LHYsXyxNPXRoaXM7aWYoIShNIGluc3RhbmNlb2YgdykpcmV0dXJuIG5ldyB3KHksRSk7aWYoRT09bnVsbCl7aWYoeSYmeS5faXNCaWdOdW1iZXI9PT0hMCl7TS5zPXkucywheS5jfHx5LmU+cD9NLmM9TS5lPW51bGw6eS5lPGQ/TS5jPVtNLmU9MF06KE0uZT15LmUsTS5jPXkuYy5zbGljZSgpKTtyZXR1cm59aWYoKHg9dHlwZW9mIHk9PSJudW1iZXIiKSYmeSowPT0wKXtpZihNLnM9MS95PDA/KHk9LXksLTEpOjEseT09PX5+eSl7Zm9yKE89MCxSPXk7Uj49MTA7Ui89MTAsTysrKTtPPnA/TS5jPU0uZT1udWxsOihNLmU9TyxNLmM9W3ldKTtyZXR1cm59Xz1TdHJpbmcoeSl9ZWxzZXtpZighazIudGVzdChfPVN0cmluZyh5KSkpcmV0dXJuIGEoTSxfLHgpO00ucz1fLmNoYXJDb2RlQXQoMCk9PTQ1PyhfPV8uc2xpY2UoMSksLTEpOjF9KE89Xy5pbmRleE9mKCIuIikpPi0xJiYoXz1fLnJlcGxhY2UoIi4iLCIiKSksKFI9Xy5zZWFyY2goL2UvaSkpPjA/KE88MCYmKE89UiksTys9K18uc2xpY2UoUisxKSxfPV8uc3Vic3RyaW5nKDAsUikpOk88MCYmKE89Xy5sZW5ndGgpfWVsc2V7aWYobHQoRSwyLEEubGVuZ3RoLCJCYXNlIiksRT09MTAmJm0pcmV0dXJuIE09bmV3IHcoeSksTChNLG8rTS5lKzEsaSk7aWYoXz1TdHJpbmcoeSkseD10eXBlb2YgeT09Im51bWJlciIpe2lmKHkqMCE9MClyZXR1cm4gYShNLF8seCxFKTtpZihNLnM9MS95PDA/KF89Xy5zbGljZSgxKSwtMSk6MSx3LkRFQlVHJiZfLnJlcGxhY2UoL14wXC4wKnxcLi8sIiIpLmxlbmd0aD4xNSl0aHJvdyBFcnJvcigkcCt5KX1lbHNlIE0ucz1fLmNoYXJDb2RlQXQoMCk9PT00NT8oXz1fLnNsaWNlKDEpLC0xKToxO2ZvcihDPUEuc2xpY2UoMCxFKSxPPVI9MCx2PV8ubGVuZ3RoO1I8djtSKyspaWYoQy5pbmRleE9mKEY9Xy5jaGFyQXQoUikpPDApe2lmKEY9PSIuIil7aWYoUj5PKXtPPXY7Y29udGludWV9fWVsc2UgaWYoISQmJihfPT1fLnRvVXBwZXJDYXNlKCkmJihfPV8udG9Mb3dlckNhc2UoKSl8fF89PV8udG9Mb3dlckNhc2UoKSYmKF89Xy50b1VwcGVyQ2FzZSgpKSkpeyQ9ITAsUj0tMSxPPTA7Y29udGludWV9cmV0dXJuIGEoTSxTdHJpbmcoeSkseCxFKX14PSExLF89dChfLEUsMTAsTS5zKSwoTz1fLmluZGV4T2YoIi4iKSk+LTE/Xz1fLnJlcGxhY2UoIi4iLCIiKTpPPV8ubGVuZ3RofWZvcihSPTA7Xy5jaGFyQ29kZUF0KFIpPT09NDg7UisrKTtmb3Iodj1fLmxlbmd0aDtfLmNoYXJDb2RlQXQoLS12KT09PTQ4Oyk7aWYoXz1fLnNsaWNlKFIsKyt2KSl7aWYodi09Uix4JiZ3LkRFQlVHJiZ2PjE1JiYoeT5BdXx8eSE9PUJyKHkpKSl0aHJvdyBFcnJvcigkcCtNLnMqeSk7aWYoKE89Ty1SLTEpPnApTS5jPU0uZT1udWxsO2Vsc2UgaWYoTzxkKU0uYz1bTS5lPTBdO2Vsc2V7aWYoTS5lPU8sTS5jPVtdLFI9KE8rMSkla2UsTzwwJiYoUis9a2UpLFI8dil7Zm9yKFImJk0uYy5wdXNoKCtfLnNsaWNlKDAsUikpLHYtPWtlO1I8djspTS5jLnB1c2goK18uc2xpY2UoUixSKz1rZSkpO1I9a2UtKF89Xy5zbGljZShSKSkubGVuZ3RofWVsc2UgUi09djtmb3IoO1ItLTtfKz0iMCIpO00uYy5wdXNoKCtfKX19ZWxzZSBNLmM9W00uZT0wXX13LmNsb25lPWl5LHcuUk9VTkRfVVA9MCx3LlJPVU5EX0RPV049MSx3LlJPVU5EX0NFSUw9Mix3LlJPVU5EX0ZMT09SPTMsdy5ST1VORF9IQUxGX1VQPTQsdy5ST1VORF9IQUxGX0RPV049NSx3LlJPVU5EX0hBTEZfRVZFTj02LHcuUk9VTkRfSEFMRl9DRUlMPTcsdy5ST1VORF9IQUxGX0ZMT09SPTgsdy5FVUNMSUQ9OSx3LmNvbmZpZz13LnNldD1mdW5jdGlvbih5KXt2YXIgRSxDO2lmKHkhPW51bGwpaWYodHlwZW9mIHk9PSJvYmplY3QiKXtpZih5Lmhhc093blByb3BlcnR5KEU9IkRFQ0lNQUxfUExBQ0VTIikmJihDPXlbRV0sbHQoQywwLFR0LEUpLG89QykseS5oYXNPd25Qcm9wZXJ0eShFPSJST1VORElOR19NT0RFIikmJihDPXlbRV0sbHQoQywwLDgsRSksaT1DKSx5Lmhhc093blByb3BlcnR5KEU9IkVYUE9ORU5USUFMX0FUIikmJihDPXlbRV0sQyYmQy5wb3A/KGx0KENbMF0sLVR0LDAsRSksbHQoQ1sxXSwwLFR0LEUpLGM9Q1swXSxmPUNbMV0pOihsdChDLC1UdCxUdCxFKSxjPS0oZj1DPDA/LUM6QykpKSx5Lmhhc093blByb3BlcnR5KEU9IlJBTkdFIikpaWYoQz15W0VdLEMmJkMucG9wKWx0KENbMF0sLVR0LC0xLEUpLGx0KENbMV0sMSxUdCxFKSxkPUNbMF0scD1DWzFdO2Vsc2UgaWYobHQoQywtVHQsVHQsRSksQylkPS0ocD1DPDA/LUM6Qyk7ZWxzZSB0aHJvdyBFcnJvcihZdCtFKyIgY2Fubm90IGJlIHplcm86ICIrQyk7aWYoeS5oYXNPd25Qcm9wZXJ0eShFPSJDUllQVE8iKSlpZihDPXlbRV0sQz09PSEhQylpZihDKWlmKHR5cGVvZiBjcnlwdG88InUiJiZjcnlwdG8mJihjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzfHxjcnlwdG8ucmFuZG9tQnl0ZXMpKWI9QztlbHNlIHRocm93IGI9IUMsRXJyb3IoWXQrImNyeXB0byB1bmF2YWlsYWJsZSIpO2Vsc2UgYj1DO2Vsc2UgdGhyb3cgRXJyb3IoWXQrRSsiIG5vdCB0cnVlIG9yIGZhbHNlOiAiK0MpO2lmKHkuaGFzT3duUHJvcGVydHkoRT0iTU9EVUxPX01PREUiKSYmKEM9eVtFXSxsdChDLDAsOSxFKSxUPUMpLHkuaGFzT3duUHJvcGVydHkoRT0iUE9XX1BSRUNJU0lPTiIpJiYoQz15W0VdLGx0KEMsMCxUdCxFKSxXPUMpLHkuaGFzT3duUHJvcGVydHkoRT0iRk9STUFUIikpaWYoQz15W0VdLHR5cGVvZiBDPT0ib2JqZWN0IilnPUM7ZWxzZSB0aHJvdyBFcnJvcihZdCtFKyIgbm90IGFuIG9iamVjdDogIitDKTtpZih5Lmhhc093blByb3BlcnR5KEU9IkFMUEhBQkVUIikpaWYoQz15W0VdLHR5cGVvZiBDPT0ic3RyaW5nIiYmIS9eLj8kfFsrXC0uXHNdfCguKS4qXDEvLnRlc3QoQykpbT1DLnNsaWNlKDAsMTApPT0iMDEyMzQ1Njc4OSIsQT1DO2Vsc2UgdGhyb3cgRXJyb3IoWXQrRSsiIGludmFsaWQ6ICIrQyl9ZWxzZSB0aHJvdyBFcnJvcihZdCsiT2JqZWN0IGV4cGVjdGVkOiAiK3kpO3JldHVybntERUNJTUFMX1BMQUNFUzpvLFJPVU5ESU5HX01PREU6aSxFWFBPTkVOVElBTF9BVDpbYyxmXSxSQU5HRTpbZCxwXSxDUllQVE86YixNT0RVTE9fTU9ERTpULFBPV19QUkVDSVNJT046VyxGT1JNQVQ6ZyxBTFBIQUJFVDpBfX0sdy5pc0JpZ051bWJlcj1mdW5jdGlvbih5KXtpZigheXx8eS5faXNCaWdOdW1iZXIhPT0hMClyZXR1cm4hMTtpZighdy5ERUJVRylyZXR1cm4hMDt2YXIgRSxDLEY9eS5jLCQ9eS5lLE89eS5zO2U6aWYoe30udG9TdHJpbmcuY2FsbChGKT09IltvYmplY3QgQXJyYXldIil7aWYoKE89PT0xfHxPPT09LTEpJiYkPj0tVHQmJiQ8PVR0JiYkPT09QnIoJCkpe2lmKEZbMF09PT0wKXtpZigkPT09MCYmRi5sZW5ndGg9PT0xKXJldHVybiEwO2JyZWFrIGV9aWYoRT0oJCsxKSVrZSxFPDEmJihFKz1rZSksU3RyaW5nKEZbMF0pLmxlbmd0aD09RSl7Zm9yKEU9MDtFPEYubGVuZ3RoO0UrKylpZihDPUZbRV0sQzwwfHxDPj1Vcnx8QyE9PUJyKEMpKWJyZWFrIGU7aWYoQyE9PTApcmV0dXJuITB9fX1lbHNlIGlmKEY9PT1udWxsJiYkPT09bnVsbCYmKE89PT1udWxsfHxPPT09MXx8Tz09PS0xKSlyZXR1cm4hMDt0aHJvdyBFcnJvcihZdCsiSW52YWxpZCBCaWdOdW1iZXI6ICIreSl9LHcubWF4aW11bT13Lm1heD1mdW5jdGlvbigpe3JldHVybiBrKGFyZ3VtZW50cywtMSl9LHcubWluaW11bT13Lm1pbj1mdW5jdGlvbigpe3JldHVybiBrKGFyZ3VtZW50cywxKX0sdy5yYW5kb209ZnVuY3Rpb24oKXt2YXIgeT05MDA3MTk5MjU0NzQwOTkyLEU9TWF0aC5yYW5kb20oKSp5JjIwOTcxNTE/ZnVuY3Rpb24oKXtyZXR1cm4gQnIoTWF0aC5yYW5kb20oKSp5KX06ZnVuY3Rpb24oKXtyZXR1cm4oTWF0aC5yYW5kb20oKSoxMDczNzQxODI0fDApKjgzODg2MDgrKE1hdGgucmFuZG9tKCkqODM4ODYwOHwwKX07cmV0dXJuIGZ1bmN0aW9uKEMpe3ZhciBGLCQsTyxSLHgsdj0wLF89W10sTT1uZXcgdyhyKTtpZihDPT1udWxsP0M9bzpsdChDLDAsVHQpLFI9VHUoQy9rZSksYilpZihjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXtmb3IoRj1jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheShSKj0yKSk7djxSOyl4PUZbdl0qMTMxMDcyKyhGW3YrMV0+Pj4xMSkseD49OWUxNT8oJD1jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheSgyKSksRlt2XT0kWzBdLEZbdisxXT0kWzFdKTooXy5wdXNoKHglMWUxNCksdis9Mik7dj1SLzJ9ZWxzZSBpZihjcnlwdG8ucmFuZG9tQnl0ZXMpe2ZvcihGPWNyeXB0by5yYW5kb21CeXRlcyhSKj03KTt2PFI7KXg9KEZbdl0mMzEpKjI4MTQ3NDk3NjcxMDY1NitGW3YrMV0qMTA5OTUxMTYyNzc3NitGW3YrMl0qNDI5NDk2NzI5NitGW3YrM10qMTY3NzcyMTYrKEZbdis0XTw8MTYpKyhGW3YrNV08PDgpK0Zbdis2XSx4Pj05ZTE1P2NyeXB0by5yYW5kb21CeXRlcyg3KS5jb3B5KEYsdik6KF8ucHVzaCh4JTFlMTQpLHYrPTcpO3Y9Ui83fWVsc2UgdGhyb3cgYj0hMSxFcnJvcihZdCsiY3J5cHRvIHVuYXZhaWxhYmxlIik7aWYoIWIpZm9yKDt2PFI7KXg9RSgpLHg8OWUxNSYmKF9bdisrXT14JTFlMTQpO2ZvcihSPV9bLS12XSxDJT1rZSxSJiZDJiYoeD1tdVtrZS1DXSxfW3ZdPUJyKFIveCkqeCk7X1t2XT09PTA7Xy5wb3AoKSx2LS0pO2lmKHY8MClfPVtPPTBdO2Vsc2V7Zm9yKE89LTE7X1swXT09PTA7Xy5zcGxpY2UoMCwxKSxPLT1rZSk7Zm9yKHY9MSx4PV9bMF07eD49MTA7eC89MTAsdisrKTt2PGtlJiYoTy09a2Utdil9cmV0dXJuIE0uZT1PLE0uYz1fLE19fSgpLHcuc3VtPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PTEsRT1hcmd1bWVudHMsQz1uZXcgdyhFWzBdKTt5PEUubGVuZ3RoOylDPUMucGx1cyhFW3krK10pO3JldHVybiBDfSx0PWZ1bmN0aW9uKCl7dmFyIHk9IjAxMjM0NTY3ODkiO2Z1bmN0aW9uIEUoQyxGLCQsTyl7Zm9yKHZhciBSLHg9WzBdLHYsXz0wLE09Qy5sZW5ndGg7XzxNOyl7Zm9yKHY9eC5sZW5ndGg7di0tO3hbdl0qPUYpO2Zvcih4WzBdKz1PLmluZGV4T2YoQy5jaGFyQXQoXysrKSksUj0wO1I8eC5sZW5ndGg7UisrKXhbUl0+JC0xJiYoeFtSKzFdPT1udWxsJiYoeFtSKzFdPTApLHhbUisxXSs9eFtSXS8kfDAseFtSXSU9JCl9cmV0dXJuIHgucmV2ZXJzZSgpfXJldHVybiBmdW5jdGlvbihDLEYsJCxPLFIpe3ZhciB4LHYsXyxNLHoscSxRLGVlLGdlPUMuaW5kZXhPZigiLiIpLFRlPW8scGU9aTtmb3IoZ2U+PTAmJihNPVcsVz0wLEM9Qy5yZXBsYWNlKCIuIiwiIiksZWU9bmV3IHcoRikscT1lZS5wb3coQy5sZW5ndGgtZ2UpLFc9TSxlZS5jPUUoeW4oQ3IocS5jKSxxLmUsIjAiKSwxMCwkLHkpLGVlLmU9ZWUuYy5sZW5ndGgpLFE9RShDLEYsJCxSPyh4PUEseSk6KHg9eSxBKSksXz1NPVEubGVuZ3RoO1FbLS1NXT09MDtRLnBvcCgpKTtpZighUVswXSlyZXR1cm4geC5jaGFyQXQoMCk7aWYoZ2U8MD8tLV86KHEuYz1RLHEuZT1fLHEucz1PLHE9ZShxLGVlLFRlLHBlLCQpLFE9cS5jLHo9cS5yLF89cS5lKSx2PV8rVGUrMSxnZT1RW3ZdLE09JC8yLHo9enx8djwwfHxRW3YrMV0hPW51bGwsej1wZTw0PyhnZSE9bnVsbHx8eikmJihwZT09MHx8cGU9PShxLnM8MD8zOjIpKTpnZT5NfHxnZT09TSYmKHBlPT00fHx6fHxwZT09NiYmUVt2LTFdJjF8fHBlPT0ocS5zPDA/ODo3KSksdjwxfHwhUVswXSlDPXo/eW4oeC5jaGFyQXQoMSksLVRlLHguY2hhckF0KDApKTp4LmNoYXJBdCgwKTtlbHNle2lmKFEubGVuZ3RoPXYseilmb3IoLS0kOysrUVstLXZdPiQ7KVFbdl09MCx2fHwoKytfLFE9WzFdLmNvbmNhdChRKSk7Zm9yKE09US5sZW5ndGg7IVFbLS1NXTspO2ZvcihnZT0wLEM9IiI7Z2U8PU07Qys9eC5jaGFyQXQoUVtnZSsrXSkpO0M9eW4oQyxfLHguY2hhckF0KDApKX1yZXR1cm4gQ319KCksZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHkoRiwkLE8pe3ZhciBSLHgsdixfLE09MCx6PUYubGVuZ3RoLHE9JCV6bixRPSQvem58MDtmb3IoRj1GLnNsaWNlKCk7ei0tOyl2PUZbel0lem4sXz1GW3pdL3pufDAsUj1RKnYrXypxLHg9cSp2K1Ilem4qem4rTSxNPSh4L098MCkrKFIvem58MCkrUSpfLEZbel09eCVPO3JldHVybiBNJiYoRj1bTV0uY29uY2F0KEYpKSxGfWZ1bmN0aW9uIEUoRiwkLE8sUil7dmFyIHgsdjtpZihPIT1SKXY9Tz5SPzE6LTE7ZWxzZSBmb3IoeD12PTA7eDxPO3grKylpZihGW3hdIT0kW3hdKXt2PUZbeF0+JFt4XT8xOi0xO2JyZWFrfXJldHVybiB2fWZ1bmN0aW9uIEMoRiwkLE8sUil7Zm9yKHZhciB4PTA7Ty0tOylGW09dLT14LHg9RltPXTwkW09dPzE6MCxGW09dPXgqUitGW09dLSRbT107Zm9yKDshRlswXSYmRi5sZW5ndGg+MTtGLnNwbGljZSgwLDEpKTt9cmV0dXJuIGZ1bmN0aW9uKEYsJCxPLFIseCl7dmFyIHYsXyxNLHoscSxRLGVlLGdlLFRlLHBlLGZlLGRlLEJlLEtlLFFlLHJ0LEllLE1lPUYucz09JC5zPzE6LTEsTmU9Ri5jLF9lPSQuYztpZighTmV8fCFOZVswXXx8IV9lfHwhX2VbMF0pcmV0dXJuIG5ldyB3KCFGLnN8fCEkLnN8fChOZT9fZSYmTmVbMF09PV9lWzBdOiFfZSk/TmFOOk5lJiZOZVswXT09MHx8IV9lP01lKjA6TWUvMCk7Zm9yKGdlPW5ldyB3KE1lKSxUZT1nZS5jPVtdLF89Ri5lLSQuZSxNZT1PK18rMSx4fHwoeD1VcixfPUlyKEYuZS9rZSktSXIoJC5lL2tlKSxNZT1NZS9rZXwwKSxNPTA7X2VbTV09PShOZVtNXXx8MCk7TSsrKTtpZihfZVtNXT4oTmVbTV18fDApJiZfLS0sTWU8MClUZS5wdXNoKDEpLHo9ITA7ZWxzZXtmb3IoS2U9TmUubGVuZ3RoLHJ0PV9lLmxlbmd0aCxNPTAsTWUrPTIscT1Ccih4LyhfZVswXSsxKSkscT4xJiYoX2U9eShfZSxxLHgpLE5lPXkoTmUscSx4KSxydD1fZS5sZW5ndGgsS2U9TmUubGVuZ3RoKSxCZT1ydCxwZT1OZS5zbGljZSgwLHJ0KSxmZT1wZS5sZW5ndGg7ZmU8cnQ7cGVbZmUrK109MCk7SWU9X2Uuc2xpY2UoKSxJZT1bMF0uY29uY2F0KEllKSxRZT1fZVswXSxfZVsxXT49eC8yJiZRZSsrO2Rve2lmKHE9MCx2PUUoX2UscGUscnQsZmUpLHY8MCl7aWYoZGU9cGVbMF0scnQhPWZlJiYoZGU9ZGUqeCsocGVbMV18fDApKSxxPUJyKGRlL1FlKSxxPjEpZm9yKHE+PXgmJihxPXgtMSksUT15KF9lLHEseCksZWU9US5sZW5ndGgsZmU9cGUubGVuZ3RoO0UoUSxwZSxlZSxmZSk9PTE7KXEtLSxDKFEscnQ8ZWU/SWU6X2UsZWUseCksZWU9US5sZW5ndGgsdj0xO2Vsc2UgcT09MCYmKHY9cT0xKSxRPV9lLnNsaWNlKCksZWU9US5sZW5ndGg7aWYoZWU8ZmUmJihRPVswXS5jb25jYXQoUSkpLEMocGUsUSxmZSx4KSxmZT1wZS5sZW5ndGgsdj09LTEpZm9yKDtFKF9lLHBlLHJ0LGZlKTwxOylxKyssQyhwZSxydDxmZT9JZTpfZSxmZSx4KSxmZT1wZS5sZW5ndGh9ZWxzZSB2PT09MCYmKHErKyxwZT1bMF0pO1RlW00rK109cSxwZVswXT9wZVtmZSsrXT1OZVtCZV18fDA6KHBlPVtOZVtCZV1dLGZlPTEpfXdoaWxlKChCZSsrPEtlfHxwZVswXSE9bnVsbCkmJk1lLS0pO3o9cGVbMF0hPW51bGwsVGVbMF18fFRlLnNwbGljZSgwLDEpfWlmKHg9PVVyKXtmb3IoTT0xLE1lPVRlWzBdO01lPj0xMDtNZS89MTAsTSsrKTtMKGdlLE8rKGdlLmU9TStfKmtlLTEpKzEsUix6KX1lbHNlIGdlLmU9XyxnZS5yPSt6O3JldHVybiBnZX19KCk7ZnVuY3Rpb24gQih5LEUsQyxGKXt2YXIgJCxPLFIseCx2O2lmKEM9PW51bGw/Qz1pOmx0KEMsMCw4KSwheS5jKXJldHVybiB5LnRvU3RyaW5nKCk7aWYoJD15LmNbMF0sUj15LmUsRT09bnVsbCl2PUNyKHkuYyksdj1GPT0xfHxGPT0yJiYoUjw9Y3x8Uj49Zik/UmkodixSKTp5bih2LFIsIjAiKTtlbHNlIGlmKHk9TChuZXcgdyh5KSxFLEMpLE89eS5lLHY9Q3IoeS5jKSx4PXYubGVuZ3RoLEY9PTF8fEY9PTImJihFPD1PfHxPPD1jKSl7Zm9yKDt4PEU7dis9IjAiLHgrKyk7dj1SaSh2LE8pfWVsc2UgaWYoRS09Uix2PXluKHYsTywiMCIpLE8rMT54KXtpZigtLUU+MClmb3Iodis9Ii4iO0UtLTt2Kz0iMCIpO31lbHNlIGlmKEUrPU8teCxFPjApZm9yKE8rMT09eCYmKHYrPSIuIik7RS0tO3YrPSIwIik7cmV0dXJuIHkuczwwJiYkPyItIit2OnZ9ZnVuY3Rpb24gayh5LEUpe2Zvcih2YXIgQyxGLCQ9MSxPPW5ldyB3KHlbMF0pOyQ8eS5sZW5ndGg7JCsrKUY9bmV3IHcoeVskXSksKCFGLnN8fChDPWxvKE8sRikpPT09RXx8Qz09PTAmJk8ucz09PUUpJiYoTz1GKTtyZXR1cm4gT31mdW5jdGlvbiBWKHksRSxDKXtmb3IodmFyIEY9MSwkPUUubGVuZ3RoOyFFWy0tJF07RS5wb3AoKSk7Zm9yKCQ9RVswXTskPj0xMDskLz0xMCxGKyspO3JldHVybihDPUYrQyprZS0xKT5wP3kuYz15LmU9bnVsbDpDPGQ/eS5jPVt5LmU9MF06KHkuZT1DLHkuYz1FKSx5fWE9ZnVuY3Rpb24oKXt2YXIgeT0vXigtPykwKFt4Ym9dKSg/PVx3W1x3Ll0qJCkvaSxFPS9eKFteLl0rKVwuJC8sQz0vXlwuKFteLl0rKSQvLEY9L14tPyhJbmZpbml0eXxOYU4pJC8sJD0vXlxzKlwrKD89W1x3Ll0pfF5ccyt8XHMrJC9nO3JldHVybiBmdW5jdGlvbihPLFIseCx2KXt2YXIgXyxNPXg/UjpSLnJlcGxhY2UoJCwiIik7aWYoRi50ZXN0KE0pKU8ucz1pc05hTihNKT9udWxsOk08MD8tMToxO2Vsc2V7aWYoIXgmJihNPU0ucmVwbGFjZSh5LGZ1bmN0aW9uKHoscSxRKXtyZXR1cm4gXz0oUT1RLnRvTG93ZXJDYXNlKCkpPT0ieCI/MTY6UT09ImIiPzI6OCwhdnx8dj09Xz9xOnp9KSx2JiYoXz12LE09TS5yZXBsYWNlKEUsIiQxIikucmVwbGFjZShDLCIwLiQxIikpLFIhPU0pKXJldHVybiBuZXcgdyhNLF8pO2lmKHcuREVCVUcpdGhyb3cgRXJyb3IoWXQrIk5vdCBhIisodj8iIGJhc2UgIit2OiIiKSsiIG51bWJlcjogIitSKTtPLnM9bnVsbH1PLmM9Ty5lPW51bGx9fSgpO2Z1bmN0aW9uIEwoeSxFLEMsRil7dmFyICQsTyxSLHgsdixfLE0sej15LmMscT1tdTtpZih6KXtlOntmb3IoJD0xLHg9elswXTt4Pj0xMDt4Lz0xMCwkKyspO2lmKE89RS0kLE88MClPKz1rZSxSPUUsdj16W189MF0sTT1Ccih2L3FbJC1SLTFdJTEwKTtlbHNlIGlmKF89VHUoKE8rMSkva2UpLF8+PXoubGVuZ3RoKWlmKEYpe2Zvcig7ei5sZW5ndGg8PV87ei5wdXNoKDApKTt2PU09MCwkPTEsTyU9a2UsUj1PLWtlKzF9ZWxzZSBicmVhayBlO2Vsc2V7Zm9yKHY9eD16W19dLCQ9MTt4Pj0xMDt4Lz0xMCwkKyspO08lPWtlLFI9Ty1rZSskLE09UjwwPzA6QnIodi9xWyQtUi0xXSUxMCl9aWYoRj1GfHxFPDB8fHpbXysxXSE9bnVsbHx8KFI8MD92OnYlcVskLVItMV0pLEY9Qzw0PyhNfHxGKSYmKEM9PTB8fEM9PSh5LnM8MD8zOjIpKTpNPjV8fE09PTUmJihDPT00fHxGfHxDPT02JiYoTz4wP1I+MD92L3FbJC1SXTowOnpbXy0xXSklMTAmMXx8Qz09KHkuczwwPzg6NykpLEU8MXx8IXpbMF0pcmV0dXJuIHoubGVuZ3RoPTAsRj8oRS09eS5lKzEselswXT1xWyhrZS1FJWtlKSVrZV0seS5lPS1FfHwwKTp6WzBdPXkuZT0wLHk7aWYoTz09MD8oei5sZW5ndGg9Xyx4PTEsXy0tKTooei5sZW5ndGg9XysxLHg9cVtrZS1PXSx6W19dPVI+MD9Ccih2L3FbJC1SXSVxW1JdKSp4OjApLEYpZm9yKDs7KWlmKF89PTApe2ZvcihPPTEsUj16WzBdO1I+PTEwO1IvPTEwLE8rKyk7Zm9yKFI9elswXSs9eCx4PTE7Uj49MTA7Ui89MTAseCsrKTtPIT14JiYoeS5lKysselswXT09VXImJih6WzBdPTEpKTticmVha31lbHNle2lmKHpbX10rPXgseltfXSE9VXIpYnJlYWs7eltfLS1dPTAseD0xfWZvcihPPXoubGVuZ3RoO3pbLS1PXT09PTA7ei5wb3AoKSk7fXkuZT5wP3kuYz15LmU9bnVsbDp5LmU8ZCYmKHkuYz1beS5lPTBdKX1yZXR1cm4geX1mdW5jdGlvbiBJKHkpe3ZhciBFLEM9eS5lO3JldHVybiBDPT09bnVsbD95LnRvU3RyaW5nKCk6KEU9Q3IoeS5jKSxFPUM8PWN8fEM+PWY/UmkoRSxDKTp5bihFLEMsIjAiKSx5LnM8MD8iLSIrRTpFKX1yZXR1cm4gcy5hYnNvbHV0ZVZhbHVlPXMuYWJzPWZ1bmN0aW9uKCl7dmFyIHk9bmV3IHcodGhpcyk7cmV0dXJuIHkuczwwJiYoeS5zPTEpLHl9LHMuY29tcGFyZWRUbz1mdW5jdGlvbih5LEUpe3JldHVybiBsbyh0aGlzLG5ldyB3KHksRSkpfSxzLmRlY2ltYWxQbGFjZXM9cy5kcD1mdW5jdGlvbih5LEUpe3ZhciBDLEYsJCxPPXRoaXM7aWYoeSE9bnVsbClyZXR1cm4gbHQoeSwwLFR0KSxFPT1udWxsP0U9aTpsdChFLDAsOCksTChuZXcgdyhPKSx5K08uZSsxLEUpO2lmKCEoQz1PLmMpKXJldHVybiBudWxsO2lmKEY9KCgkPUMubGVuZ3RoLTEpLUlyKHRoaXMuZS9rZSkpKmtlLCQ9Q1skXSlmb3IoOyQlMTA9PTA7JC89MTAsRi0tKTtyZXR1cm4gRjwwJiYoRj0wKSxGfSxzLmRpdmlkZWRCeT1zLmRpdj1mdW5jdGlvbih5LEUpe3JldHVybiBlKHRoaXMsbmV3IHcoeSxFKSxvLGkpfSxzLmRpdmlkZWRUb0ludGVnZXJCeT1zLmlkaXY9ZnVuY3Rpb24oeSxFKXtyZXR1cm4gZSh0aGlzLG5ldyB3KHksRSksMCwxKX0scy5leHBvbmVudGlhdGVkQnk9cy5wb3c9ZnVuY3Rpb24oeSxFKXt2YXIgQyxGLCQsTyxSLHgsdixfLE0sej10aGlzO2lmKHk9bmV3IHcoeSkseS5jJiYheS5pc0ludGVnZXIoKSl0aHJvdyBFcnJvcihZdCsiRXhwb25lbnQgbm90IGFuIGludGVnZXI6ICIrSSh5KSk7aWYoRSE9bnVsbCYmKEU9bmV3IHcoRSkpLHg9eS5lPjE0LCF6LmN8fCF6LmNbMF18fHouY1swXT09MSYmIXouZSYmei5jLmxlbmd0aD09MXx8IXkuY3x8IXkuY1swXSlyZXR1cm4gTT1uZXcgdyhNYXRoLnBvdygrSSh6KSx4P3kucyooMi1PaSh5KSk6K0koeSkpKSxFP00ubW9kKEUpOk07aWYodj15LnM8MCxFKXtpZihFLmM/IUUuY1swXTohRS5zKXJldHVybiBuZXcgdyhOYU4pO0Y9IXYmJnouaXNJbnRlZ2VyKCkmJkUuaXNJbnRlZ2VyKCksRiYmKHo9ei5tb2QoRSkpfWVsc2V7aWYoeS5lPjkmJih6LmU+MHx8ei5lPC0xfHwoei5lPT0wP3ouY1swXT4xfHx4JiZ6LmNbMV0+PTI0ZTc6ei5jWzBdPDhlMTN8fHgmJnouY1swXTw9OTk5OTk3NWU3KSkpcmV0dXJuIE89ei5zPDAmJk9pKHkpPy0wOjAsei5lPi0xJiYoTz0xL08pLG5ldyB3KHY/MS9POk8pO1cmJihPPVR1KFcva2UrMikpfWZvcih4PyhDPW5ldyB3KC41KSx2JiYoeS5zPTEpLF89T2koeSkpOigkPU1hdGguYWJzKCtJKHkpKSxfPSQlMiksTT1uZXcgdyhyKTs7KXtpZihfKXtpZihNPU0udGltZXMoeiksIU0uYylicmVhaztPP00uYy5sZW5ndGg+TyYmKE0uYy5sZW5ndGg9Tyk6RiYmKE09TS5tb2QoRSkpfWlmKCQpe2lmKCQ9QnIoJC8yKSwkPT09MClicmVhaztfPSQlMn1lbHNlIGlmKHk9eS50aW1lcyhDKSxMKHkseS5lKzEsMSkseS5lPjE0KV89T2koeSk7ZWxzZXtpZigkPStJKHkpLCQ9PT0wKWJyZWFrO189JCUyfXo9ei50aW1lcyh6KSxPP3ouYyYmei5jLmxlbmd0aD5PJiYoei5jLmxlbmd0aD1PKTpGJiYoej16Lm1vZChFKSl9cmV0dXJuIEY/TToodiYmKE09ci5kaXYoTSkpLEU/TS5tb2QoRSk6Tz9MKE0sVyxpLFIpOk0pfSxzLmludGVnZXJWYWx1ZT1mdW5jdGlvbih5KXt2YXIgRT1uZXcgdyh0aGlzKTtyZXR1cm4geT09bnVsbD95PWk6bHQoeSwwLDgpLEwoRSxFLmUrMSx5KX0scy5pc0VxdWFsVG89cy5lcT1mdW5jdGlvbih5LEUpe3JldHVybiBsbyh0aGlzLG5ldyB3KHksRSkpPT09MH0scy5pc0Zpbml0ZT1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5jfSxzLmlzR3JlYXRlclRoYW49cy5ndD1mdW5jdGlvbih5LEUpe3JldHVybiBsbyh0aGlzLG5ldyB3KHksRSkpPjB9LHMuaXNHcmVhdGVyVGhhbk9yRXF1YWxUbz1zLmd0ZT1mdW5jdGlvbih5LEUpe3JldHVybihFPWxvKHRoaXMsbmV3IHcoeSxFKSkpPT09MXx8RT09PTB9LHMuaXNJbnRlZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmMmJklyKHRoaXMuZS9rZSk+dGhpcy5jLmxlbmd0aC0yfSxzLmlzTGVzc1RoYW49cy5sdD1mdW5jdGlvbih5LEUpe3JldHVybiBsbyh0aGlzLG5ldyB3KHksRSkpPDB9LHMuaXNMZXNzVGhhbk9yRXF1YWxUbz1zLmx0ZT1mdW5jdGlvbih5LEUpe3JldHVybihFPWxvKHRoaXMsbmV3IHcoeSxFKSkpPT09LTF8fEU9PT0wfSxzLmlzTmFOPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuc30scy5pc05lZ2F0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuczwwfSxzLmlzUG9zaXRpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zPjB9LHMuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmMmJnRoaXMuY1swXT09MH0scy5taW51cz1mdW5jdGlvbih5LEUpe3ZhciBDLEYsJCxPLFI9dGhpcyx4PVIucztpZih5PW5ldyB3KHksRSksRT15LnMsIXh8fCFFKXJldHVybiBuZXcgdyhOYU4pO2lmKHghPUUpcmV0dXJuIHkucz0tRSxSLnBsdXMoeSk7dmFyIHY9Ui5lL2tlLF89eS5lL2tlLE09Ui5jLHo9eS5jO2lmKCF2fHwhXyl7aWYoIU18fCF6KXJldHVybiBNPyh5LnM9LUUseSk6bmV3IHcoej9SOk5hTik7aWYoIU1bMF18fCF6WzBdKXJldHVybiB6WzBdPyh5LnM9LUUseSk6bmV3IHcoTVswXT9SOmk9PTM/LTA6MCl9aWYodj1Jcih2KSxfPUlyKF8pLE09TS5zbGljZSgpLHg9di1fKXtmb3IoKE89eDwwKT8oeD0teCwkPU0pOihfPXYsJD16KSwkLnJldmVyc2UoKSxFPXg7RS0tOyQucHVzaCgwKSk7JC5yZXZlcnNlKCl9ZWxzZSBmb3IoRj0oTz0oeD1NLmxlbmd0aCk8KEU9ei5sZW5ndGgpKT94OkUseD1FPTA7RTxGO0UrKylpZihNW0VdIT16W0VdKXtPPU1bRV08eltFXTticmVha31pZihPJiYoJD1NLE09eix6PSQseS5zPS15LnMpLEU9KEY9ei5sZW5ndGgpLShDPU0ubGVuZ3RoKSxFPjApZm9yKDtFLS07TVtDKytdPTApO2ZvcihFPVVyLTE7Rj54Oyl7aWYoTVstLUZdPHpbRl0pe2ZvcihDPUY7QyYmIU1bLS1DXTtNW0NdPUUpOy0tTVtDXSxNW0ZdKz1Vcn1NW0ZdLT16W0ZdfWZvcig7TVswXT09MDtNLnNwbGljZSgwLDEpLC0tXyk7cmV0dXJuIE1bMF0/Vih5LE0sXyk6KHkucz1pPT0zPy0xOjEseS5jPVt5LmU9MF0seSl9LHMubW9kdWxvPXMubW9kPWZ1bmN0aW9uKHksRSl7dmFyIEMsRiwkPXRoaXM7cmV0dXJuIHk9bmV3IHcoeSxFKSwhJC5jfHwheS5zfHx5LmMmJiF5LmNbMF0/bmV3IHcoTmFOKToheS5jfHwkLmMmJiEkLmNbMF0/bmV3IHcoJCk6KFQ9PTk/KEY9eS5zLHkucz0xLEM9ZSgkLHksMCwzKSx5LnM9RixDLnMqPUYpOkM9ZSgkLHksMCxUKSx5PSQubWludXMoQy50aW1lcyh5KSksIXkuY1swXSYmVD09MSYmKHkucz0kLnMpLHkpfSxzLm11bHRpcGxpZWRCeT1zLnRpbWVzPWZ1bmN0aW9uKHksRSl7dmFyIEMsRiwkLE8sUix4LHYsXyxNLHoscSxRLGVlLGdlLFRlLHBlPXRoaXMsZmU9cGUuYyxkZT0oeT1uZXcgdyh5LEUpKS5jO2lmKCFmZXx8IWRlfHwhZmVbMF18fCFkZVswXSlyZXR1cm4hcGUuc3x8IXkuc3x8ZmUmJiFmZVswXSYmIWRlfHxkZSYmIWRlWzBdJiYhZmU/eS5jPXkuZT15LnM9bnVsbDooeS5zKj1wZS5zLCFmZXx8IWRlP3kuYz15LmU9bnVsbDooeS5jPVswXSx5LmU9MCkpLHk7Zm9yKEY9SXIocGUuZS9rZSkrSXIoeS5lL2tlKSx5LnMqPXBlLnMsdj1mZS5sZW5ndGgsej1kZS5sZW5ndGgsdjx6JiYoZWU9ZmUsZmU9ZGUsZGU9ZWUsJD12LHY9eix6PSQpLCQ9dit6LGVlPVtdOyQtLTtlZS5wdXNoKDApKTtmb3IoZ2U9VXIsVGU9em4sJD16Oy0tJD49MDspe2ZvcihDPTAscT1kZVskXSVUZSxRPWRlWyRdL1RlfDAsUj12LE89JCtSO08+JDspXz1mZVstLVJdJVRlLE09ZmVbUl0vVGV8MCx4PVEqXytNKnEsXz1xKl8reCVUZSpUZStlZVtPXStDLEM9KF8vZ2V8MCkrKHgvVGV8MCkrUSpNLGVlW08tLV09XyVnZTtlZVtPXT1DfXJldHVybiBDPysrRjplZS5zcGxpY2UoMCwxKSxWKHksZWUsRil9LHMubmVnYXRlZD1mdW5jdGlvbigpe3ZhciB5PW5ldyB3KHRoaXMpO3JldHVybiB5LnM9LXkuc3x8bnVsbCx5fSxzLnBsdXM9ZnVuY3Rpb24oeSxFKXt2YXIgQyxGPXRoaXMsJD1GLnM7aWYoeT1uZXcgdyh5LEUpLEU9eS5zLCEkfHwhRSlyZXR1cm4gbmV3IHcoTmFOKTtpZigkIT1FKXJldHVybiB5LnM9LUUsRi5taW51cyh5KTt2YXIgTz1GLmUva2UsUj15LmUva2UseD1GLmMsdj15LmM7aWYoIU98fCFSKXtpZigheHx8IXYpcmV0dXJuIG5ldyB3KCQvMCk7aWYoIXhbMF18fCF2WzBdKXJldHVybiB2WzBdP3k6bmV3IHcoeFswXT9GOiQqMCl9aWYoTz1JcihPKSxSPUlyKFIpLHg9eC5zbGljZSgpLCQ9Ty1SKXtmb3IoJD4wPyhSPU8sQz12KTooJD0tJCxDPXgpLEMucmV2ZXJzZSgpOyQtLTtDLnB1c2goMCkpO0MucmV2ZXJzZSgpfWZvcigkPXgubGVuZ3RoLEU9di5sZW5ndGgsJC1FPDAmJihDPXYsdj14LHg9QyxFPSQpLCQ9MDtFOykkPSh4Wy0tRV09eFtFXSt2W0VdKyQpL1VyfDAseFtFXT1Vcj09PXhbRV0/MDp4W0VdJVVyO3JldHVybiAkJiYoeD1bJF0uY29uY2F0KHgpLCsrUiksVih5LHgsUil9LHMucHJlY2lzaW9uPXMuc2Q9ZnVuY3Rpb24oeSxFKXt2YXIgQyxGLCQsTz10aGlzO2lmKHkhPW51bGwmJnkhPT0hIXkpcmV0dXJuIGx0KHksMSxUdCksRT09bnVsbD9FPWk6bHQoRSwwLDgpLEwobmV3IHcoTykseSxFKTtpZighKEM9Ty5jKSlyZXR1cm4gbnVsbDtpZigkPUMubGVuZ3RoLTEsRj0kKmtlKzEsJD1DWyRdKXtmb3IoOyQlMTA9PTA7JC89MTAsRi0tKTtmb3IoJD1DWzBdOyQ+PTEwOyQvPTEwLEYrKyk7fXJldHVybiB5JiZPLmUrMT5GJiYoRj1PLmUrMSksRn0scy5zaGlmdGVkQnk9ZnVuY3Rpb24oeSl7cmV0dXJuIGx0KHksLUF1LEF1KSx0aGlzLnRpbWVzKCIxZSIreSl9LHMuc3F1YXJlUm9vdD1zLnNxcnQ9ZnVuY3Rpb24oKXt2YXIgeSxFLEMsRiwkLE89dGhpcyxSPU8uYyx4PU8ucyx2PU8uZSxfPW8rNCxNPW5ldyB3KCIwLjUiKTtpZih4IT09MXx8IVJ8fCFSWzBdKXJldHVybiBuZXcgdygheHx8eDwwJiYoIVJ8fFJbMF0pP05hTjpSP086MS8wKTtpZih4PU1hdGguc3FydCgrSShPKSkseD09MHx8eD09MS8wPyhFPUNyKFIpLChFLmxlbmd0aCt2KSUyPT0wJiYoRSs9IjAiKSx4PU1hdGguc3FydCgrRSksdj1JcigodisxKS8yKS0odjwwfHx2JTIpLHg9PTEvMD9FPSI1ZSIrdjooRT14LnRvRXhwb25lbnRpYWwoKSxFPUUuc2xpY2UoMCxFLmluZGV4T2YoImUiKSsxKSt2KSxDPW5ldyB3KEUpKTpDPW5ldyB3KHgrIiIpLEMuY1swXSl7Zm9yKHY9Qy5lLHg9ditfLHg8MyYmKHg9MCk7OylpZigkPUMsQz1NLnRpbWVzKCQucGx1cyhlKE8sJCxfLDEpKSksQ3IoJC5jKS5zbGljZSgwLHgpPT09KEU9Q3IoQy5jKSkuc2xpY2UoMCx4KSlpZihDLmU8diYmLS14LEU9RS5zbGljZSh4LTMseCsxKSxFPT0iOTk5OSJ8fCFGJiZFPT0iNDk5OSIpe2lmKCFGJiYoTCgkLCQuZStvKzIsMCksJC50aW1lcygkKS5lcShPKSkpe0M9JDticmVha31fKz00LHgrPTQsRj0xfWVsc2V7KCErRXx8IStFLnNsaWNlKDEpJiZFLmNoYXJBdCgwKT09IjUiKSYmKEwoQyxDLmUrbysyLDEpLHk9IUMudGltZXMoQykuZXEoTykpO2JyZWFrfX1yZXR1cm4gTChDLEMuZStvKzEsaSx5KX0scy50b0V4cG9uZW50aWFsPWZ1bmN0aW9uKHksRSl7cmV0dXJuIHkhPW51bGwmJihsdCh5LDAsVHQpLHkrKyksQih0aGlzLHksRSwxKX0scy50b0ZpeGVkPWZ1bmN0aW9uKHksRSl7cmV0dXJuIHkhPW51bGwmJihsdCh5LDAsVHQpLHk9eSt0aGlzLmUrMSksQih0aGlzLHksRSl9LHMudG9Gb3JtYXQ9ZnVuY3Rpb24oeSxFLEMpe3ZhciBGLCQ9dGhpcztpZihDPT1udWxsKXkhPW51bGwmJkUmJnR5cGVvZiBFPT0ib2JqZWN0Ij8oQz1FLEU9bnVsbCk6eSYmdHlwZW9mIHk9PSJvYmplY3QiPyhDPXkseT1FPW51bGwpOkM9ZztlbHNlIGlmKHR5cGVvZiBDIT0ib2JqZWN0Iil0aHJvdyBFcnJvcihZdCsiQXJndW1lbnQgbm90IGFuIG9iamVjdDogIitDKTtpZihGPSQudG9GaXhlZCh5LEUpLCQuYyl7dmFyIE8sUj1GLnNwbGl0KCIuIikseD0rQy5ncm91cFNpemUsdj0rQy5zZWNvbmRhcnlHcm91cFNpemUsXz1DLmdyb3VwU2VwYXJhdG9yfHwiIixNPVJbMF0sej1SWzFdLHE9JC5zPDAsUT1xP00uc2xpY2UoMSk6TSxlZT1RLmxlbmd0aDtpZih2JiYoTz14LHg9dix2PU8sZWUtPU8pLHg+MCYmZWU+MCl7Zm9yKE89ZWUleHx8eCxNPVEuc3Vic3RyKDAsTyk7TzxlZTtPKz14KU0rPV8rUS5zdWJzdHIoTyx4KTt2PjAmJihNKz1fK1Euc2xpY2UoTykpLHEmJihNPSItIitNKX1GPXo/TSsoQy5kZWNpbWFsU2VwYXJhdG9yfHwiIikrKCh2PStDLmZyYWN0aW9uR3JvdXBTaXplKT96LnJlcGxhY2UobmV3IFJlZ0V4cCgiXFxkeyIrdisifVxcQiIsImciKSwiJCYiKyhDLmZyYWN0aW9uR3JvdXBTZXBhcmF0b3J8fCIiKSk6eik6TX1yZXR1cm4oQy5wcmVmaXh8fCIiKStGKyhDLnN1ZmZpeHx8IiIpfSxzLnRvRnJhY3Rpb249ZnVuY3Rpb24oeSl7dmFyIEUsQyxGLCQsTyxSLHgsdixfLE0seixxLFE9dGhpcyxlZT1RLmM7aWYoeSE9bnVsbCYmKHg9bmV3IHcoeSksIXguaXNJbnRlZ2VyKCkmJih4LmN8fHgucyE9PTEpfHx4Lmx0KHIpKSl0aHJvdyBFcnJvcihZdCsiQXJndW1lbnQgIisoeC5pc0ludGVnZXIoKT8ib3V0IG9mIHJhbmdlOiAiOiJub3QgYW4gaW50ZWdlcjogIikrSSh4KSk7aWYoIWVlKXJldHVybiBuZXcgdyhRKTtmb3IoRT1uZXcgdyhyKSxfPUM9bmV3IHcociksRj12PW5ldyB3KHIpLHE9Q3IoZWUpLE89RS5lPXEubGVuZ3RoLVEuZS0xLEUuY1swXT1tdVsoUj1PJWtlKTwwP2tlK1I6Ul0seT0heXx8eC5jb21wYXJlZFRvKEUpPjA/Tz4wP0U6Xzp4LFI9cCxwPTEvMCx4PW5ldyB3KHEpLHYuY1swXT0wO009ZSh4LEUsMCwxKSwkPUMucGx1cyhNLnRpbWVzKEYpKSwkLmNvbXBhcmVkVG8oeSkhPTE7KUM9RixGPSQsXz12LnBsdXMoTS50aW1lcygkPV8pKSx2PSQsRT14Lm1pbnVzKE0udGltZXMoJD1FKSkseD0kO3JldHVybiAkPWUoeS5taW51cyhDKSxGLDAsMSksdj12LnBsdXMoJC50aW1lcyhfKSksQz1DLnBsdXMoJC50aW1lcyhGKSksdi5zPV8ucz1RLnMsTz1PKjIsej1lKF8sRixPLGkpLm1pbnVzKFEpLmFicygpLmNvbXBhcmVkVG8oZSh2LEMsTyxpKS5taW51cyhRKS5hYnMoKSk8MT9bXyxGXTpbdixDXSxwPVIsen0scy50b051bWJlcj1mdW5jdGlvbigpe3JldHVybitJKHRoaXMpfSxzLnRvUHJlY2lzaW9uPWZ1bmN0aW9uKHksRSl7cmV0dXJuIHkhPW51bGwmJmx0KHksMSxUdCksQih0aGlzLHksRSwyKX0scy50b1N0cmluZz1mdW5jdGlvbih5KXt2YXIgRSxDPXRoaXMsRj1DLnMsJD1DLmU7cmV0dXJuICQ9PT1udWxsP0Y/KEU9IkluZmluaXR5IixGPDAmJihFPSItIitFKSk6RT0iTmFOIjooeT09bnVsbD9FPSQ8PWN8fCQ+PWY/UmkoQ3IoQy5jKSwkKTp5bihDcihDLmMpLCQsIjAiKTp5PT09MTAmJm0/KEM9TChuZXcgdyhDKSxvKyQrMSxpKSxFPXluKENyKEMuYyksQy5lLCIwIikpOihsdCh5LDIsQS5sZW5ndGgsIkJhc2UiKSxFPXQoeW4oQ3IoQy5jKSwkLCIwIiksMTAseSxGLCEwKSksRjwwJiZDLmNbMF0mJihFPSItIitFKSksRX0scy52YWx1ZU9mPXMudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyl9LHMuX2lzQmlnTnVtYmVyPSEwLHNbU3ltYm9sLnRvU3RyaW5nVGFnXT0iQmlnTnVtYmVyIixzW1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIildPXMudmFsdWVPZixuIT1udWxsJiZ3LnNldChuKSx3fWZ1bmN0aW9uIElyKG4pe3ZhciBlPW58MDtyZXR1cm4gbj4wfHxuPT09ZT9lOmUtMX1mdW5jdGlvbiBDcihuKXtmb3IodmFyIGUsdCxhPTEscz1uLmxlbmd0aCxyPW5bMF0rIiI7YTxzOyl7Zm9yKGU9blthKytdKyIiLHQ9a2UtZS5sZW5ndGg7dC0tO2U9IjAiK2UpO3IrPWV9Zm9yKHM9ci5sZW5ndGg7ci5jaGFyQ29kZUF0KC0tcyk9PT00ODspO3JldHVybiByLnNsaWNlKDAscysxfHwxKX1mdW5jdGlvbiBsbyhuLGUpe3ZhciB0LGEscz1uLmMscj1lLmMsbz1uLnMsaT1lLnMsYz1uLmUsZj1lLmU7aWYoIW98fCFpKXJldHVybiBudWxsO2lmKHQ9cyYmIXNbMF0sYT1yJiYhclswXSx0fHxhKXJldHVybiB0P2E/MDotaTpvO2lmKG8hPWkpcmV0dXJuIG87aWYodD1vPDAsYT1jPT1mLCFzfHwhcilyZXR1cm4gYT8wOiFzXnQ/MTotMTtpZighYSlyZXR1cm4gYz5mXnQ/MTotMTtmb3IoaT0oYz1zLmxlbmd0aCk8KGY9ci5sZW5ndGgpP2M6ZixvPTA7bzxpO28rKylpZihzW29dIT1yW29dKXJldHVybiBzW29dPnJbb11edD8xOi0xO3JldHVybiBjPT1mPzA6Yz5mXnQ/MTotMX1mdW5jdGlvbiBsdChuLGUsdCxhKXtpZihuPGV8fG4+dHx8biE9PUJyKG4pKXRocm93IEVycm9yKFl0KyhhfHwiQXJndW1lbnQiKSsodHlwZW9mIG49PSJudW1iZXIiP248ZXx8bj50PyIgb3V0IG9mIHJhbmdlOiAiOiIgbm90IGFuIGludGVnZXI6ICI6IiBub3QgYSBwcmltaXRpdmUgbnVtYmVyOiAiKStTdHJpbmcobikpfWZ1bmN0aW9uIE9pKG4pe3ZhciBlPW4uYy5sZW5ndGgtMTtyZXR1cm4gSXIobi5lL2tlKT09ZSYmbi5jW2VdJTIhPTB9ZnVuY3Rpb24gUmkobixlKXtyZXR1cm4obi5sZW5ndGg+MT9uLmNoYXJBdCgwKSsiLiIrbi5zbGljZSgxKTpuKSsoZTwwPyJlIjoiZSsiKStlfWZ1bmN0aW9uIHluKG4sZSx0KXt2YXIgYSxzO2lmKGU8MCl7Zm9yKHM9dCsiLiI7KytlO3MrPXQpO249cytufWVsc2UgaWYoYT1uLmxlbmd0aCwrK2U+YSl7Zm9yKHM9dCxlLT1hOy0tZTtzKz10KTtuKz1zfWVsc2UgZTxhJiYobj1uLnNsaWNlKDAsZSkrIi4iK24uc2xpY2UoZSkpO3JldHVybiBufXZhciBlYz1peSgpLHhsPXtleHBvcnRzOnt9fSxUbD17ZXhwb3J0czp7fX0sQWw9e2V4cG9ydHM6e319OyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9dDtmdW5jdGlvbiB0KGEpe2lmKGE9PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBzdHJpbmcgYnV0IHJlY2VpdmVkIGEgIi5jb25jYXQoYSkpO2lmKGEuY29uc3RydWN0b3IubmFtZSE9PSJTdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgc3RyaW5nIGJ1dCByZWNlaXZlZCBhICIuY29uY2F0KGEuY29uc3RydWN0b3IubmFtZSkpfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkoQWwsQWwuZXhwb3J0cyk7dmFyIGllPUFsLmV4cG9ydHM7KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1zO3ZhciB0PWEoaWUpO2Z1bmN0aW9uIGEocil7cmV0dXJuIHImJnIuX19lc01vZHVsZT9yOntkZWZhdWx0OnJ9fWZ1bmN0aW9uIHMocil7cmV0dXJuKDAsdC5kZWZhdWx0KShyKSxyPURhdGUucGFyc2UociksaXNOYU4ocik/bnVsbDpuZXcgRGF0ZShyKX1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKFRsLFRsLmV4cG9ydHMpO3ZhciBKZD1UbC5leHBvcnRzLG1sPXtleHBvcnRzOnt9fSxZcz17fSxQbD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD10O2Z1bmN0aW9uIHQoYSl7cmV0dXJuIGE9PW51bGx9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShQbCxQbC5leHBvcnRzKTt2YXIgY3k9UGwuZXhwb3J0cyxjdD17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoY3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2N0LmZhcnNpTG9jYWxlcz1jdC5lbmdsaXNoTG9jYWxlcz1jdC5kb3REZWNpbWFsPWN0LmRlY2ltYWw9Y3QuY29tbWFEZWNpbWFsPWN0LmJlbmdhbGlMb2NhbGVzPWN0LmFyYWJpY0xvY2FsZXM9Y3QuYWxwaGFudW1lcmljPWN0LmFscGhhPXZvaWQgMDt2YXIgaXI9Y3QuYWxwaGE9eyJlbi1VUyI6L15bQS1aXSskL2ksImF6LUFaIjovXltBLVZYWVrDh8aPxJ7EsMSxw5bFnsOcXSskL2ksImJnLUJHIjovXlvQkC3Qr10rJC9pLCJjcy1DWiI6L15bQS1aw4HEjMSOw4nEmsONxYfDk8WYxaDFpMOaxa7DncW9XSskL2ksImRhLURLIjovXltBLVrDhsOYw4VdKyQvaSwiZGUtREUiOi9eW0EtWsOEw5bDnMOfXSskL2ksImVsLUdSIjovXlvOkS3Pjl0rJC9pLCJlcy1FUyI6L15bQS1aw4HDicONw5HDk8Oaw5xdKyQvaSwiZmEtSVIiOi9eW9in2KjZvtiq2KvYrNqG2K3Yrtiv2LDYsdiy2pjYs9i02LXYtti32LjYudi62YHZgtqp2q/ZhNmF2YbZiNmH24xdKyQvaSwiZmktRkkiOi9eW0EtWsOFw4TDll0rJC9pLCJmci1GUiI6L15bQS1aw4DDgsOGw4fDicOIw4rDi8OPw47DlMWSw5nDm8OcxbhdKyQvaSwiaXQtSVQiOi9eW0EtWsOAw4nDiMOMw47Dk8OSw5ldKyQvaSwiamEtSlAiOi9eW+OBgS3jgpPjgqEt44O2772mLe++n+S4gC3pvqDjg7zjg7vjgILjgIFdKyQvaSwibmItTk8iOi9eW0EtWsOGw5jDhV0rJC9pLCJubC1OTCI6L15bQS1aw4HDicOLw4/Dk8OWw5zDml0rJC9pLCJubi1OTyI6L15bQS1aw4bDmMOFXSskL2ksImh1LUhVIjovXltBLVrDgcOJw43Dk8OWxZDDmsOcxbBdKyQvaSwicGwtUEwiOi9eW0EtWsSExIbEmMWaxYHFg8OTxbvFuV0rJC9pLCJwdC1QVCI6L15bQS1aw4PDgcOAw4LDhMOHw4nDisOLw43Dj8OVw5PDlMOWw5rDnF0rJC9pLCJydS1SVSI6L15b0JAt0K/QgV0rJC9pLCJray1LWiI6L15b0JAt0K/QgVx1MDREOFx1MDRCMFx1MDQwNlx1MDRBMlx1MDQ5Mlx1MDRBRVx1MDQ5QVx1MDRFOFx1MDRCQV0rJC9pLCJzbC1TSSI6L15bQS1axIzEhsSQxaDFvV0rJC9pLCJzay1TSyI6L15bQS1aw4HEjMSOw4nDjcWHw5PFoMWkw5rDncW9xLnFlMS9w4TDlF0rJC9pLCJzci1SU0BsYXRpbiI6L15bQS1axIzEhsW9xaDEkF0rJC9pLCJzci1SUyI6L15b0JAt0K/QgtCI0InQitCL0I9dKyQvaSwic3YtU0UiOi9eW0EtWsOFw4TDll0rJC9pLCJ0aC1USCI6L15b4LiBLeC5kFxzXSskL2ksInRyLVRSIjovXltBLVrDh8SexLDEscOWxZ7DnF0rJC9pLCJ1ay1VQSI6L15b0JAt0KnQrNCu0K/QhEnQh9KQ0ZZdKyQvaSwidmktVk4iOi9eW0EtWsOAw4HhuqDhuqLDg8OC4bqm4bqk4bqs4bqo4bqqxILhurDhuq7hurbhurLhurTEkMOIw4nhurjhurrhurzDiuG7gOG6vuG7huG7guG7hMOMw43hu4rhu4jEqMOSw5Phu4zhu47DlcOU4buS4buQ4buY4buU4buWxqDhu5zhu5rhu6Lhu57hu6DDmcOa4buk4bumxajGr+G7quG7qOG7sOG7rOG7ruG7ssOd4bu04bu24bu4XSskL2ksImtvLUtSIjovXlvjhLEt44WO44WPLeOFo+qwgC3tnqNdKiQvLCJrdS1JUSI6L15b2KbYp9io2b7Yqtis2obYrdiu2K/YsdqV2LLamNiz2LTYudi62YHapNmC2qnar9mE2rXZhdmG2Yjbhtq+25XbjNuO2YrYt9ik2KvYotil2KPZg9i22LXYqdi42LBdKyQvaSxhcjovXlvYodii2KPYpNil2KbYp9io2KnYqtir2KzYrdiu2K/YsNix2LLYs9i02LXYtti32LjYudi62YHZgtmD2YTZhdmG2YfZiNmJ2YrZi9mM2Y3ZjtmP2ZDZkdmS2bBdKyQvLGhlOi9eW9eQLdeqXSskLyxmYTovXlsn2KLYp9ih2KPYpNim2KjZvtiq2KvYrNqG2K3Yrtiv2LDYsdiy2pjYs9i02LXYtti32LjYudi62YHZgtqp2q/ZhNmF2YbZiNmH2KnbjCddKyQvaSxibjovXlsn4KaA4KaB4KaC4KaD4KaF4KaG4KaH4KaI4KaJ4KaK4KaL4KaM4KaP4KaQ4KaT4KaU4KaV4KaW4KaX4KaY4KaZ4Kaa4Kab4Kac4Kad4Kae4Kaf4Kag4Kah4Kai4Kaj4Kak4Kal4Kam4Kan4Kao4Kaq4Kar4Kas4Kat4Kau4Kav4Kaw4Kay4Ka24Ka34Ka44Ka54Ka84Ka94Ka+4Ka/4KeA4KeB4KeC4KeD4KeE4KeH4KeI4KeL4KeM4KeN4KeO4KeX4Kec4Ked4Kef4Keg4Keh4Kei4Kej4Kew4Kex4Key4Kez4Ke04Ke14Ke24Ke34Ke44Ke54Ke64Ke7J10rJC8sZW86L15bQUJDxIhELUfEnEjEpElKxLRLLVBSU8WcVFXFrFZaXSskL2ksImhpLUlOIjovXltcdTA5MDAtXHUwOTYxXStbXHUwOTcyLVx1MDk3Rl0qJC9pLCJzaS1MSyI6L15bXHUwRDgwLVx1MERGRl0rJC8sInRhLUlOIjovXltcdTBCODAtXHUwQkZGXSskL2ksInRlLUlOIjovXltcdTBDMDAtXHUwQzdGXSskL2ksImtuLUlOIjovXltcdTBDODAtXHUwQ0ZGXSskL2ksIm1sLUlOIjovXltcdTBEMDAtXHUwRDdGXSskL2ksImd1LUlOIjovXltcdTBBODAtXHUwQUZGXSskL2ksInBhLUlOIjovXltcdTBBMDAtXHUwQTdGXSskL2ksIm9yLUlOIjovXltcdTBCMDAtXHUwQjdGXSskL2l9LGNyPWN0LmFscGhhbnVtZXJpYz17ImVuLVVTIjovXlswLTlBLVpdKyQvaSwiYXotQVoiOi9eWzAtOUEtVlhZWsOHxo/EnsSwxLHDlsWew5xdKyQvaSwiYmctQkciOi9eWzAtOdCQLdCvXSskL2ksImNzLUNaIjovXlswLTlBLVrDgcSMxI7DicSaw43Fh8OTxZjFoMWkw5rFrsOdxb1dKyQvaSwiZGEtREsiOi9eWzAtOUEtWsOGw5jDhV0rJC9pLCJkZS1ERSI6L15bMC05QS1aw4TDlsOcw59dKyQvaSwiZWwtR1IiOi9eWzAtOc6RLc+JXSskL2ksImVzLUVTIjovXlswLTlBLVrDgcOJw43DkcOTw5rDnF0rJC9pLCJmaS1GSSI6L15bMC05QS1aw4XDhMOWXSskL2ksImZyLUZSIjovXlswLTlBLVrDgMOCw4bDh8OJw4jDisOLw4/DjsOUxZLDmcObw5zFuF0rJC9pLCJpdC1JVCI6L15bMC05QS1aw4DDicOIw4zDjsOTw5LDmV0rJC9pLCJqYS1KUCI6L15bMC0577yQLe+8meOBgS3jgpPjgqEt44O2772mLe++n+S4gC3pvqDjg7zjg7vjgILjgIFdKyQvaSwiaHUtSFUiOi9eWzAtOUEtWsOBw4nDjcOTw5bFkMOaw5zFsF0rJC9pLCJuYi1OTyI6L15bMC05QS1aw4bDmMOFXSskL2ksIm5sLU5MIjovXlswLTlBLVrDgcOJw4vDj8OTw5bDnMOaXSskL2ksIm5uLU5PIjovXlswLTlBLVrDhsOYw4VdKyQvaSwicGwtUEwiOi9eWzAtOUEtWsSExIbEmMWaxYHFg8OTxbvFuV0rJC9pLCJwdC1QVCI6L15bMC05QS1aw4PDgcOAw4LDhMOHw4nDisOLw43Dj8OVw5PDlMOWw5rDnF0rJC9pLCJydS1SVSI6L15bMC050JAt0K/QgV0rJC9pLCJray1LWiI6L15bMC050JAt0K/QgVx1MDREOFx1MDRCMFx1MDQwNlx1MDRBMlx1MDQ5Mlx1MDRBRVx1MDQ5QVx1MDRFOFx1MDRCQV0rJC9pLCJzbC1TSSI6L15bMC05QS1axIzEhsSQxaDFvV0rJC9pLCJzay1TSyI6L15bMC05QS1aw4HEjMSOw4nDjcWHw5PFoMWkw5rDncW9xLnFlMS9w4TDlF0rJC9pLCJzci1SU0BsYXRpbiI6L15bMC05QS1axIzEhsW9xaDEkF0rJC9pLCJzci1SUyI6L15bMC050JAt0K/QgtCI0InQitCL0I9dKyQvaSwic3YtU0UiOi9eWzAtOUEtWsOFw4TDll0rJC9pLCJ0aC1USCI6L15b4LiBLeC5mVxzXSskL2ksInRyLVRSIjovXlswLTlBLVrDh8SexLDEscOWxZ7DnF0rJC9pLCJ1ay1VQSI6L15bMC050JAt0KnQrNCu0K/QhEnQh9KQ0ZZdKyQvaSwia28tS1IiOi9eWzAtOeOEsS3jhY7jhY8t44Wj6rCALe2eo10qJC8sImt1LUlRIjovXlvZoNmh2aLZo9mk2aXZptmn2ajZqTAtOdim2KfYqNm+2KrYrNqG2K3Yrtiv2LHaldiy2pjYs9i02LnYutmB2qTZgtqp2q/ZhNq12YXZhtmI24bavtuV24zbjtmK2LfYpNir2KLYpdij2YPYtti12KnYuNiwXSskL2ksInZpLVZOIjovXlswLTlBLVrDgMOB4bqg4bqiw4PDguG6puG6pOG6rOG6qOG6qsSC4bqw4bqu4bq24bqy4bq0xJDDiMOJ4bq44bq64bq8w4rhu4Dhur7hu4bhu4Lhu4TDjMON4buK4buIxKjDksOT4buM4buOw5XDlOG7kuG7kOG7mOG7lOG7lsag4buc4bua4bui4bue4bugw5nDmuG7pOG7psWoxq/hu6rhu6jhu7Dhu6zhu67hu7LDneG7tOG7tuG7uF0rJC9pLGFyOi9eW9mg2aHZotmj2aTZpdmm2afZqNmpMC052KHYotij2KTYpdim2KfYqNip2KrYq9is2K3Yrtiv2LDYsdiy2LPYtNi12LbYt9i42LnYutmB2YLZg9mE2YXZhtmH2YjZidmK2YvZjNmN2Y7Zj9mQ2ZHZktmwXSskLyxoZTovXlswLTnXkC3Xql0rJC8sZmE6L15bJzAtOdii2KfYodij2KTYptio2b7Yqtir2Kzahtit2K7Yr9iw2LHYstqY2LPYtNi12LbYt9i42LnYutmB2YLaqdqv2YTZhdmG2YjZh9ip24zbsduy27PbtNu127bbt9u427nbsCddKyQvaSxibjovXlsn4KaA4KaB4KaC4KaD4KaF4KaG4KaH4KaI4KaJ4KaK4KaL4KaM4KaP4KaQ4KaT4KaU4KaV4KaW4KaX4KaY4KaZ4Kaa4Kab4Kac4Kad4Kae4Kaf4Kag4Kah4Kai4Kaj4Kak4Kal4Kam4Kan4Kao4Kaq4Kar4Kas4Kat4Kau4Kav4Kaw4Kay4Ka24Ka34Ka44Ka54Ka84Ka94Ka+4Ka/4KeA4KeB4KeC4KeD4KeE4KeH4KeI4KeL4KeM4KeN4KeO4KeX4Kec4Ked4Kef4Keg4Keh4Kei4Kej4Kem4Ken4Keo4Kep4Keq4Ker4Kes4Ket4Keu4Kev4Kew4Kex4Key4Kez4Ke04Ke14Ke24Ke34Ke44Ke54Ke64Ke7J10rJC8sZW86L15bMC05QUJDxIhELUfEnEjEpElKxLRLLVBSU8WcVFXFrFZaXSskL2ksImhpLUlOIjovXltcdTA5MDAtXHUwOTYzXStbXHUwOTY2LVx1MDk3Rl0qJC9pLCJzaS1MSyI6L15bMC05XHUwRDgwLVx1MERGRl0rJC8sInRhLUlOIjovXlswLTlcdTBCODAtXHUwQkZGLl0rJC9pLCJ0ZS1JTiI6L15bMC05XHUwQzAwLVx1MEM3Ri5dKyQvaSwia24tSU4iOi9eWzAtOVx1MEM4MC1cdTBDRkYuXSskL2ksIm1sLUlOIjovXlswLTlcdTBEMDAtXHUwRDdGLl0rJC9pLCJndS1JTiI6L15bMC05XHUwQTgwLVx1MEFGRi5dKyQvaSwicGEtSU4iOi9eWzAtOVx1MEEwMC1cdTBBN0YuXSskL2ksIm9yLUlOIjovXlswLTlcdTBCMDAtXHUwQjdGLl0rJC9pfSxadD1jdC5kZWNpbWFsPXsiZW4tVVMiOiIuIixhcjoi2asifSxMcD1jdC5lbmdsaXNoTG9jYWxlcz1bIkFVIiwiR0IiLCJISyIsIklOIiwiTloiLCJaQSIsIlpNIl07Zm9yKHZhciBNaSxQdT0wO1B1PExwLmxlbmd0aDtQdSsrKU1pPSJlbi0iLmNvbmNhdChMcFtQdV0pLGlyW01pXT1pclsiZW4tVVMiXSxjcltNaV09Y3JbImVuLVVTIl0sWnRbTWldPVp0WyJlbi1VUyJdO3ZhciB6cD1jdC5hcmFiaWNMb2NhbGVzPVsiQUUiLCJCSCIsIkRaIiwiRUciLCJJUSIsIkpPIiwiS1ciLCJMQiIsIkxZIiwiTUEiLCJRTSIsIlFBIiwiU0EiLCJTRCIsIlNZIiwiVE4iLCJZRSJdO2Zvcih2YXIgRmksd3U9MDt3dTx6cC5sZW5ndGg7d3UrKylGaT0iYXItIi5jb25jYXQoenBbd3VdKSxpcltGaV09aXIuYXIsY3JbRmldPWNyLmFyLFp0W0ZpXT1adC5hcjt2YXIganA9Y3QuZmFyc2lMb2NhbGVzPVsiSVIiLCJBRiJdO2Zvcih2YXIgdnUsQ3U9MDtDdTxqcC5sZW5ndGg7Q3UrKyl2dT0iZmEtIi5jb25jYXQoanBbQ3VdKSxjclt2dV09Y3IuZmEsWnRbdnVdPVp0LmFyO3ZhciBWcD1jdC5iZW5nYWxpTG9jYWxlcz1bIkJEIiwiSU4iXTtmb3IodmFyIE5pLEV1PTA7RXU8VnAubGVuZ3RoO0V1KyspTmk9ImJuLSIuY29uY2F0KFZwW0V1XSksaXJbTmldPWlyLmJuLGNyW05pXT1jci5ibixadFtOaV09WnRbImVuLVVTIl07dmFyIEdwPWN0LmRvdERlY2ltYWw9WyJhci1FRyIsImFyLUxCIiwiYXItTFkiXSxIcD1jdC5jb21tYURlY2ltYWw9WyJiZy1CRyIsImNzLUNaIiwiZGEtREsiLCJkZS1ERSIsImVsLUdSIiwiZW4tWk0iLCJlbyIsImVzLUVTIiwiZnItQ0EiLCJmci1GUiIsImd1LUlOIiwiaGktSU4iLCJodS1IVSIsImlkLUlEIiwiaXQtSVQiLCJray1LWiIsImtuLUlOIiwia3UtSVEiLCJtbC1JTiIsIm5iLU5PIiwibmwtTkwiLCJubi1OTyIsIm9yLUlOIiwicGEtSU4iLCJwbC1QTCIsInB0LVBUIiwicnUtUlUiLCJzaS1MSyIsInNsLVNJIiwic3ItUlMiLCJzci1SU0BsYXRpbiIsInN2LVNFIiwidGEtSU4iLCJ0ZS1JTiIsInRyLVRSIiwidWstVUEiLCJ2aS1WTiJdO2Zvcih2YXIgV3U9MDtXdTxHcC5sZW5ndGg7V3UrKyladFtHcFtXdV1dPVp0WyJlbi1VUyJdO2Zvcih2YXIgQnU9MDtCdTxIcC5sZW5ndGg7QnUrKyladFtIcFtCdV1dPSIsIjtpclsiZnItQ0EiXT1pclsiZnItRlIiXTtjclsiZnItQ0EiXT1jclsiZnItRlIiXTtpclsicHQtQlIiXT1pclsicHQtUFQiXTtjclsicHQtQlIiXT1jclsicHQtUFQiXTtadFsicHQtQlIiXT1adFsicHQtUFQiXTtpclsicGwtUGwiXT1pclsicGwtUEwiXTtjclsicGwtUGwiXT1jclsicGwtUEwiXTtadFsicGwtUGwiXT1adFsicGwtUEwiXTtpclsiZmEtQUYiXT1pci5mYTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWXMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO1lzLmRlZmF1bHQ9RDI7WXMubG9jYWxlcz12b2lkIDA7dmFyIFUyPWx5KGllKSxraT1seShjeSksdXk9Y3Q7ZnVuY3Rpb24gbHkobil7cmV0dXJuIG4mJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59fWZ1bmN0aW9uIEQyKG4sZSl7KDAsVTIuZGVmYXVsdCkobiksZT1lfHx7fTt2YXIgdD1uZXcgUmVnRXhwKCJeKD86Wy0rXSk/KD86WzAtOV0rKT8oPzpcXCIuY29uY2F0KGUubG9jYWxlP3V5LmRlY2ltYWxbZS5sb2NhbGVdOiIuIiwiWzAtOV0qKT8oPzpbZUVdW1xcK1xcLV0/KD86WzAtOV0rKSk/JCIpKTtpZihuPT09IiJ8fG49PT0iLiJ8fG49PT0iLCJ8fG49PT0iLSJ8fG49PT0iKyIpcmV0dXJuITE7dmFyIGE9cGFyc2VGbG9hdChuLnJlcGxhY2UoIiwiLCIuIikpO3JldHVybiB0LnRlc3QobikmJighZS5oYXNPd25Qcm9wZXJ0eSgibWluIil8fCgwLGtpLmRlZmF1bHQpKGUubWluKXx8YT49ZS5taW4pJiYoIWUuaGFzT3duUHJvcGVydHkoIm1heCIpfHwoMCxraS5kZWZhdWx0KShlLm1heCl8fGE8PWUubWF4KSYmKCFlLmhhc093blByb3BlcnR5KCJsdCIpfHwoMCxraS5kZWZhdWx0KShlLmx0KXx8YTxlLmx0KSYmKCFlLmhhc093blByb3BlcnR5KCJndCIpfHwoMCxraS5kZWZhdWx0KShlLmd0KXx8YT5lLmd0KX1Zcy5sb2NhbGVzPU9iamVjdC5rZXlzKHV5LmRlY2ltYWwpOyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9czt2YXIgdD1hKFlzKTtmdW5jdGlvbiBhKHIpe3JldHVybiByJiZyLl9fZXNNb2R1bGU/cjp7ZGVmYXVsdDpyfX1mdW5jdGlvbiBzKHIpe3JldHVybigwLHQuZGVmYXVsdCkocik/cGFyc2VGbG9hdChyKTpOYU59bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShtbCxtbC5leHBvcnRzKTt2YXIgZnk9bWwuZXhwb3J0cyx3bD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1zO3ZhciB0PWEoaWUpO2Z1bmN0aW9uIGEocil7cmV0dXJuIHImJnIuX19lc01vZHVsZT9yOntkZWZhdWx0OnJ9fWZ1bmN0aW9uIHMocixvKXtyZXR1cm4oMCx0LmRlZmF1bHQpKHIpLHBhcnNlSW50KHIsb3x8MTApfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkod2wsd2wuZXhwb3J0cyk7dmFyICQyPXdsLmV4cG9ydHMsdmw9e2V4cG9ydHM6e319OyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9czt2YXIgdD1hKGllKTtmdW5jdGlvbiBhKHIpe3JldHVybiByJiZyLl9fZXNNb2R1bGU/cjp7ZGVmYXVsdDpyfX1mdW5jdGlvbiBzKHIsbyl7cmV0dXJuKDAsdC5kZWZhdWx0KShyKSxvP3I9PT0iMSJ8fC9edHJ1ZSQvaS50ZXN0KHIpOnIhPT0iMCImJiEvXmZhbHNlJC9pLnRlc3QocikmJnIhPT0iIn1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKHZsLHZsLmV4cG9ydHMpO3ZhciBMMj12bC5leHBvcnRzLENsPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PXM7dmFyIHQ9YShpZSk7ZnVuY3Rpb24gYShyKXtyZXR1cm4gciYmci5fX2VzTW9kdWxlP3I6e2RlZmF1bHQ6cn19ZnVuY3Rpb24gcyhyLG8pe3JldHVybigwLHQuZGVmYXVsdCkocikscj09PW99bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShDbCxDbC5leHBvcnRzKTt2YXIgejI9Q2wuZXhwb3J0cyxFbD17ZXhwb3J0czp7fX0sV2w9e2V4cG9ydHM6e319OyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9YTtmdW5jdGlvbiB0KHMpeyJAYmFiZWwvaGVscGVycyAtIHR5cGVvZiI7cmV0dXJuIHQ9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09InN5bWJvbCI/ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByfTpmdW5jdGlvbihyKXtyZXR1cm4gciYmdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmci5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmciE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHJ9LHQocyl9ZnVuY3Rpb24gYShzKXtyZXR1cm4gdChzKT09PSJvYmplY3QiJiZzIT09bnVsbD90eXBlb2Ygcy50b1N0cmluZz09ImZ1bmN0aW9uIj9zPXMudG9TdHJpbmcoKTpzPSJbb2JqZWN0IE9iamVjdF0iOihzPT09bnVsbHx8dHlwZW9mIHM+InUifHxpc05hTihzKSYmIXMubGVuZ3RoKSYmKHM9IiIpLFN0cmluZyhzKX1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKFdsLFdsLmV4cG9ydHMpO3ZhciBkeT1XbC5leHBvcnRzLEJsPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PXQ7ZnVuY3Rpb24gdCgpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp7fSxzPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwO2Zvcih2YXIgciBpbiBzKXR5cGVvZiBhW3JdPiJ1IiYmKGFbcl09c1tyXSk7cmV0dXJuIGF9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShCbCxCbC5leHBvcnRzKTt2YXIgcXQ9QmwuZXhwb3J0czsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PWk7dmFyIHQ9cihpZSksYT1yKGR5KSxzPXIocXQpO2Z1bmN0aW9uIHIoYyl7cmV0dXJuIGMmJmMuX19lc01vZHVsZT9jOntkZWZhdWx0OmN9fXZhciBvPXtpZ25vcmVDYXNlOiExLG1pbk9jY3VycmVuY2VzOjF9O2Z1bmN0aW9uIGkoYyxmLGQpe3JldHVybigwLHQuZGVmYXVsdCkoYyksZD0oMCxzLmRlZmF1bHQpKGQsbyksZC5pZ25vcmVDYXNlP2MudG9Mb3dlckNhc2UoKS5zcGxpdCgoMCxhLmRlZmF1bHQpKGYpLnRvTG93ZXJDYXNlKCkpLmxlbmd0aD5kLm1pbk9jY3VycmVuY2VzOmMuc3BsaXQoKDAsYS5kZWZhdWx0KShmKSkubGVuZ3RoPmQubWluT2NjdXJyZW5jZXN9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShFbCxFbC5leHBvcnRzKTt2YXIgajI9RWwuZXhwb3J0cyxJbD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1zO3ZhciB0PWEoaWUpO2Z1bmN0aW9uIGEocil7cmV0dXJuIHImJnIuX19lc01vZHVsZT9yOntkZWZhdWx0OnJ9fWZ1bmN0aW9uIHMocixvLGkpe3JldHVybigwLHQuZGVmYXVsdCkociksT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pIT09IltvYmplY3QgUmVnRXhwXSImJihvPW5ldyBSZWdFeHAobyxpKSksISFyLm1hdGNoKG8pfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkoSWwsSWwuZXhwb3J0cyk7dmFyIFYyPUlsLmV4cG9ydHMsU2w9e2V4cG9ydHM6e319LF9sPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PWE7ZnVuY3Rpb24gdChzKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHMpPT09IltvYmplY3QgUmVnRXhwXSJ9ZnVuY3Rpb24gYShzLHIpe2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXt2YXIgaT1yW29dO2lmKHM9PT1pfHx0KGkpJiZpLnRlc3QocykpcmV0dXJuITB9cmV0dXJuITF9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShfbCxfbC5leHBvcnRzKTt2YXIgcHk9X2wuZXhwb3J0cyxPbD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1yO3ZhciB0PWEoaWUpO2Z1bmN0aW9uIGEobyl7cmV0dXJuIG8mJm8uX19lc01vZHVsZT9vOntkZWZhdWx0Om99fWZ1bmN0aW9uIHMobyl7IkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mIjtyZXR1cm4gcz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT0ic3ltYm9sIj9mdW5jdGlvbihpKXtyZXR1cm4gdHlwZW9mIGl9OmZ1bmN0aW9uKGkpe3JldHVybiBpJiZ0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZpLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZpIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgaX0scyhvKX1mdW5jdGlvbiByKG8saSl7KDAsdC5kZWZhdWx0KShvKTt2YXIgYyxmO3MoaSk9PT0ib2JqZWN0Ij8oYz1pLm1pbnx8MCxmPWkubWF4KTooYz1hcmd1bWVudHNbMV0sZj1hcmd1bWVudHNbMl0pO3ZhciBkPWVuY29kZVVSSShvKS5zcGxpdCgvJS4ufC4vKS5sZW5ndGgtMTtyZXR1cm4gZD49YyYmKHR5cGVvZiBmPiJ1Inx8ZDw9Zil9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShPbCxPbC5leHBvcnRzKTt2YXIgaHk9T2wuZXhwb3J0cyxSbD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1vO3ZhciB0PXMoaWUpLGE9cyhxdCk7ZnVuY3Rpb24gcyhpKXtyZXR1cm4gaSYmaS5fX2VzTW9kdWxlP2k6e2RlZmF1bHQ6aX19dmFyIHI9e3JlcXVpcmVfdGxkOiEwLGFsbG93X3VuZGVyc2NvcmVzOiExLGFsbG93X3RyYWlsaW5nX2RvdDohMSxhbGxvd19udW1lcmljX3RsZDohMSxhbGxvd193aWxkY2FyZDohMSxpZ25vcmVfbWF4X2xlbmd0aDohMX07ZnVuY3Rpb24gbyhpLGMpeygwLHQuZGVmYXVsdCkoaSksYz0oMCxhLmRlZmF1bHQpKGMsciksYy5hbGxvd190cmFpbGluZ19kb3QmJmlbaS5sZW5ndGgtMV09PT0iLiImJihpPWkuc3Vic3RyaW5nKDAsaS5sZW5ndGgtMSkpLGMuYWxsb3dfd2lsZGNhcmQ9PT0hMCYmaS5pbmRleE9mKCIqLiIpPT09MCYmKGk9aS5zdWJzdHJpbmcoMikpO3ZhciBmPWkuc3BsaXQoIi4iKSxkPWZbZi5sZW5ndGgtMV07cmV0dXJuIGMucmVxdWlyZV90bGQmJihmLmxlbmd0aDwyfHwhYy5hbGxvd19udW1lcmljX3RsZCYmIS9eKFthLXpcdTAwQTEtXHUwMEE4XHUwMEFBLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkVGXXsyLH18eG5bYS16MC05LV17Mix9KSQvaS50ZXN0KGQpfHwvXHMvLnRlc3QoZCkpfHwhYy5hbGxvd19udW1lcmljX3RsZCYmL15cZCskLy50ZXN0KGQpPyExOmYuZXZlcnkoZnVuY3Rpb24ocCl7cmV0dXJuIShwLmxlbmd0aD42MyYmIWMuaWdub3JlX21heF9sZW5ndGh8fCEvXlthLXpfXHUwMGExLVx1ZmZmZjAtOS1dKyQvaS50ZXN0KHApfHwvW1x1ZmYwMS1cdWZmNWVdLy50ZXN0KHApfHwvXi18LSQvLnRlc3QocCl8fCFjLmFsbG93X3VuZGVyc2NvcmVzJiYvXy8udGVzdChwKSl9KX1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKFJsLFJsLmV4cG9ydHMpO3ZhciBZZD1SbC5leHBvcnRzLE1sPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PWQ7dmFyIHQ9YShpZSk7ZnVuY3Rpb24gYShwKXtyZXR1cm4gcCYmcC5fX2VzTW9kdWxlP3A6e2RlZmF1bHQ6cH19ZnVuY3Rpb24gcyhwKXsiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2YiO3JldHVybiBzPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnR5cGVvZiBTeW1ib2wuaXRlcmF0b3I9PSJzeW1ib2wiP2Z1bmN0aW9uKGIpe3JldHVybiB0eXBlb2YgYn06ZnVuY3Rpb24oYil7cmV0dXJuIGImJnR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJmIuY29uc3RydWN0b3I9PT1TeW1ib2wmJmIhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBifSxzKHApfXZhciByPSIoPzpbMC05XXxbMS05XVswLTldfDFbMC05XVswLTldfDJbMC00XVswLTldfDI1WzAtNV0pIixvPSIoIi5jb25jYXQociwiWy5dKXszfSIpLmNvbmNhdChyKSxpPW5ldyBSZWdFeHAoIl4iLmNvbmNhdChvLCIkIikpLGM9Iig/OlswLTlhLWZBLUZdezEsNH0pIixmPW5ldyBSZWdFeHAoIl4oIisiKD86Ii5jb25jYXQoYywiOil7N30oPzoiKS5jb25jYXQoYywifDopfCIpKyIoPzoiLmNvbmNhdChjLCI6KXs2fSg/OiIpLmNvbmNhdChvLCJ8OiIpLmNvbmNhdChjLCJ8Oil8IikrIig/OiIuY29uY2F0KGMsIjopezV9KD86OiIpLmNvbmNhdChvLCJ8KDoiKS5jb25jYXQoYywiKXsxLDJ9fDopfCIpKyIoPzoiLmNvbmNhdChjLCI6KXs0fSg/Oig6IikuY29uY2F0KGMsIil7MCwxfToiKS5jb25jYXQobywifCg6IikuY29uY2F0KGMsIil7MSwzfXw6KXwiKSsiKD86Ii5jb25jYXQoYywiOil7M30oPzooOiIpLmNvbmNhdChjLCIpezAsMn06IikuY29uY2F0KG8sInwoOiIpLmNvbmNhdChjLCIpezEsNH18Oil8IikrIig/OiIuY29uY2F0KGMsIjopezJ9KD86KDoiKS5jb25jYXQoYywiKXswLDN9OiIpLmNvbmNhdChvLCJ8KDoiKS5jb25jYXQoYywiKXsxLDV9fDopfCIpKyIoPzoiLmNvbmNhdChjLCI6KXsxfSg/Oig6IikuY29uY2F0KGMsIil7MCw0fToiKS5jb25jYXQobywifCg6IikuY29uY2F0KGMsIil7MSw2fXw6KXwiKSsiKD86OigoPzo6Ii5jb25jYXQoYywiKXswLDV9OiIpLmNvbmNhdChvLCJ8KD86OiIpLmNvbmNhdChjLCIpezEsN318OikpIikrIikoJVswLTlhLXpBLVouXXsxLH0pPyQiKTtmdW5jdGlvbiBkKHApe3ZhciBiPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fTsoMCx0LmRlZmF1bHQpKHApO3ZhciBUPShzKGIpPT09Im9iamVjdCI/Yi52ZXJzaW9uOmFyZ3VtZW50c1sxXSl8fCIiO3JldHVybiBUP1QudG9TdHJpbmcoKT09PSI0Ij9pLnRlc3QocCk6VC50b1N0cmluZygpPT09IjYiP2YudGVzdChwKTohMTpkKHAse3ZlcnNpb246NH0pfHxkKHAse3ZlcnNpb246Nn0pfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkoTWwsTWwuZXhwb3J0cyk7dmFyICRjPU1sLmV4cG9ydHM7KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD13O3ZhciB0PWMoaWUpLGE9YyhweSkscz1jKGh5KSxyPWMoWWQpLG89YygkYyksaT1jKHF0KTtmdW5jdGlvbiBjKEIpe3JldHVybiBCJiZCLl9fZXNNb2R1bGU/Qjp7ZGVmYXVsdDpCfX12YXIgZj17YWxsb3dfZGlzcGxheV9uYW1lOiExLGFsbG93X3VuZGVyc2NvcmVzOiExLHJlcXVpcmVfZGlzcGxheV9uYW1lOiExLGFsbG93X3V0ZjhfbG9jYWxfcGFydDohMCxyZXF1aXJlX3RsZDohMCxibGFja2xpc3RlZF9jaGFyczoiIixpZ25vcmVfbWF4X2xlbmd0aDohMSxob3N0X2JsYWNrbGlzdDpbXSxob3N0X3doaXRlbGlzdDpbXX0sZD0vXihbXlx4MDAtXHgxRlx4N0YtXHg5RlxjWF0rKTwvaSxwPS9eW2EtelxkISNcJCUmJ1wqXCtcLVwvPVw/XF5fYHtcfH1+XSskL2ksYj0vXlthLXpcZF0rJC8sVD0vXihbXHNceDAxLVx4MDhceDBiXHgwY1x4MGUtXHgxZlx4N2ZceDIxXHgyMy1ceDViXHg1ZC1ceDdlXXwoXFxbXHgwMS1ceDA5XHgwYlx4MGNceDBkLVx4N2ZdKSkqJC9pLFc9L15bYS16XGQhI1wkJSYnXCpcK1wtXC89XD9cXl9ge1x8fX5cdTAwQTEtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKyQvaSxnPS9eKFtcc1x4MDEtXHgwOFx4MGJceDBjXHgwZS1ceDFmXHg3Zlx4MjFceDIzLVx4NWJceDVkLVx4N2VcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdfChcXFtceDAxLVx4MDlceDBiXHgwY1x4MGQtXHg3Zlx1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pKSokL2ksQT0yNTQ7ZnVuY3Rpb24gbShCKXt2YXIgaz1CLnJlcGxhY2UoL14iKC4rKSIkLywiJDEiKTtpZighay50cmltKCkpcmV0dXJuITE7dmFyIFY9L1tcLiI7PD5dLy50ZXN0KGspO2lmKFYpe2lmKGs9PT1CKXJldHVybiExO3ZhciBMPWsuc3BsaXQoJyInKS5sZW5ndGg9PT1rLnNwbGl0KCdcXCInKS5sZW5ndGg7aWYoIUwpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gdyhCLGspe2lmKCgwLHQuZGVmYXVsdCkoQiksaz0oMCxpLmRlZmF1bHQpKGssZiksay5yZXF1aXJlX2Rpc3BsYXlfbmFtZXx8ay5hbGxvd19kaXNwbGF5X25hbWUpe3ZhciBWPUIubWF0Y2goZCk7aWYoVil7dmFyIEw9VlsxXTtpZihCPUIucmVwbGFjZShMLCIiKS5yZXBsYWNlKC8oXjx8PiQpL2csIiIpLEwuZW5kc1dpdGgoIiAiKSYmKEw9TC5zbGljZSgwLC0xKSksIW0oTCkpcmV0dXJuITF9ZWxzZSBpZihrLnJlcXVpcmVfZGlzcGxheV9uYW1lKXJldHVybiExfWlmKCFrLmlnbm9yZV9tYXhfbGVuZ3RoJiZCLmxlbmd0aD5BKXJldHVybiExO3ZhciBJPUIuc3BsaXQoIkAiKSx5PUkucG9wKCksRT15LnRvTG93ZXJDYXNlKCk7aWYoay5ob3N0X2JsYWNrbGlzdC5sZW5ndGg+MCYmKDAsYS5kZWZhdWx0KShFLGsuaG9zdF9ibGFja2xpc3QpfHxrLmhvc3Rfd2hpdGVsaXN0Lmxlbmd0aD4wJiYhKDAsYS5kZWZhdWx0KShFLGsuaG9zdF93aGl0ZWxpc3QpKXJldHVybiExO3ZhciBDPUkuam9pbigiQCIpO2lmKGsuZG9tYWluX3NwZWNpZmljX3ZhbGlkYXRpb24mJihFPT09ImdtYWlsLmNvbSJ8fEU9PT0iZ29vZ2xlbWFpbC5jb20iKSl7Qz1DLnRvTG93ZXJDYXNlKCk7dmFyIEY9Qy5zcGxpdCgiKyIpWzBdO2lmKCEoMCxzLmRlZmF1bHQpKEYucmVwbGFjZSgvXC4vZywiIikse21pbjo2LG1heDozMH0pKXJldHVybiExO2Zvcih2YXIgJD1GLnNwbGl0KCIuIiksTz0wO088JC5sZW5ndGg7TysrKWlmKCFiLnRlc3QoJFtPXSkpcmV0dXJuITF9aWYoay5pZ25vcmVfbWF4X2xlbmd0aD09PSExJiYoISgwLHMuZGVmYXVsdCkoQyx7bWF4OjY0fSl8fCEoMCxzLmRlZmF1bHQpKHkse21heDoyNTR9KSkpcmV0dXJuITE7aWYoISgwLHIuZGVmYXVsdCkoeSx7cmVxdWlyZV90bGQ6ay5yZXF1aXJlX3RsZCxpZ25vcmVfbWF4X2xlbmd0aDprLmlnbm9yZV9tYXhfbGVuZ3RoLGFsbG93X3VuZGVyc2NvcmVzOmsuYWxsb3dfdW5kZXJzY29yZXN9KSl7aWYoIWsuYWxsb3dfaXBfZG9tYWluKXJldHVybiExO2lmKCEoMCxvLmRlZmF1bHQpKHkpKXtpZigheS5zdGFydHNXaXRoKCJbIil8fCF5LmVuZHNXaXRoKCJdIikpcmV0dXJuITE7dmFyIFI9eS5zbGljZSgxLC0xKTtpZihSLmxlbmd0aD09PTB8fCEoMCxvLmRlZmF1bHQpKFIpKXJldHVybiExfX1pZihrLmJsYWNrbGlzdGVkX2NoYXJzJiZDLnNlYXJjaChuZXcgUmVnRXhwKCJbIi5jb25jYXQoay5ibGFja2xpc3RlZF9jaGFycywiXSsiKSwiZyIpKSE9PS0xKXJldHVybiExO2lmKENbMF09PT0nIicmJkNbQy5sZW5ndGgtMV09PT0nIicpcmV0dXJuIEM9Qy5zbGljZSgxLEMubGVuZ3RoLTEpLGsuYWxsb3dfdXRmOF9sb2NhbF9wYXJ0P2cudGVzdChDKTpULnRlc3QoQyk7Zm9yKHZhciB4PWsuYWxsb3dfdXRmOF9sb2NhbF9wYXJ0P1c6cCx2PUMuc3BsaXQoIi4iKSxfPTA7Xzx2Lmxlbmd0aDtfKyspaWYoIXgudGVzdCh2W19dKSlyZXR1cm4hMTtyZXR1cm4hMH1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKFNsLFNsLmV4cG9ydHMpO3ZhciBneT1TbC5leHBvcnRzLEZsPXtleHBvcnRzOnt9fSxObD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD12b2lkIDA7dmFyIHQ9ZnVuY3Rpb24ocyxyKXtyZXR1cm4gcy5pbmRleE9mKHIpIT09LTF9O2UuZGVmYXVsdD10LG4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkoTmwsTmwuZXhwb3J0cyk7dmFyIGJ5PU5sLmV4cG9ydHM7KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1tO3ZhciB0PWMoaWUpLGE9YyhweSkscz1jKGJ5KSxyPWMoWWQpLG89YygkYyksaT1jKHF0KTtmdW5jdGlvbiBjKHcpe3JldHVybiB3JiZ3Ll9fZXNNb2R1bGU/dzp7ZGVmYXVsdDp3fX1mdW5jdGlvbiBmKHcsQil7cmV0dXJuIFcodyl8fFQodyxCKXx8cCh3LEIpfHxkKCl9ZnVuY3Rpb24gZCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX1mdW5jdGlvbiBwKHcsQil7aWYodyl7aWYodHlwZW9mIHc9PSJzdHJpbmciKXJldHVybiBiKHcsQik7dmFyIGs9e30udG9TdHJpbmcuY2FsbCh3KS5zbGljZSg4LC0xKTtyZXR1cm4gaz09PSJPYmplY3QiJiZ3LmNvbnN0cnVjdG9yJiYoaz13LmNvbnN0cnVjdG9yLm5hbWUpLGs9PT0iTWFwInx8az09PSJTZXQiP0FycmF5LmZyb20odyk6az09PSJBcmd1bWVudHMifHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChrKT9iKHcsQik6dm9pZCAwfX1mdW5jdGlvbiBiKHcsQil7KEI9PW51bGx8fEI+dy5sZW5ndGgpJiYoQj13Lmxlbmd0aCk7Zm9yKHZhciBrPTAsVj1BcnJheShCKTtrPEI7aysrKVZba109d1trXTtyZXR1cm4gVn1mdW5jdGlvbiBUKHcsQil7dmFyIGs9dz09bnVsbD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZ3W1N5bWJvbC5pdGVyYXRvcl18fHdbIkBAaXRlcmF0b3IiXTtpZihrIT1udWxsKXt2YXIgVixMLEkseSxFPVtdLEM9ITAsRj0hMTt0cnl7aWYoST0oaz1rLmNhbGwodykpLm5leHQsQiE9PTApZm9yKDshKEM9KFY9SS5jYWxsKGspKS5kb25lKSYmKEUucHVzaChWLnZhbHVlKSxFLmxlbmd0aCE9PUIpO0M9ITApO31jYXRjaCgkKXtGPSEwLEw9JH1maW5hbGx5e3RyeXtpZighQyYmay5yZXR1cm4hPW51bGwmJih5PWsucmV0dXJuKCksT2JqZWN0KHkpIT09eSkpcmV0dXJufWZpbmFsbHl7aWYoRil0aHJvdyBMfX1yZXR1cm4gRX19ZnVuY3Rpb24gVyh3KXtpZihBcnJheS5pc0FycmF5KHcpKXJldHVybiB3fXZhciBnPXtwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmdHAiXSxyZXF1aXJlX3RsZDohMCxyZXF1aXJlX3Byb3RvY29sOiExLHJlcXVpcmVfaG9zdDohMCxyZXF1aXJlX3BvcnQ6ITEscmVxdWlyZV92YWxpZF9wcm90b2NvbDohMCxhbGxvd191bmRlcnNjb3JlczohMSxhbGxvd190cmFpbGluZ19kb3Q6ITEsYWxsb3dfcHJvdG9jb2xfcmVsYXRpdmVfdXJsczohMSxhbGxvd19mcmFnbWVudHM6ITAsYWxsb3dfcXVlcnlfY29tcG9uZW50czohMCx2YWxpZGF0ZV9sZW5ndGg6ITAsbWF4X2FsbG93ZWRfbGVuZ3RoOjIwODR9LEE9L15cWyhbXlxdXSspXF0oPzo6KFswLTldKykpPyQvO2Z1bmN0aW9uIG0odyxCKXtpZigoMCx0LmRlZmF1bHQpKHcpLCF3fHwvW1xzPD5dLy50ZXN0KHcpfHx3LmluZGV4T2YoIm1haWx0bzoiKT09PTB8fChCPSgwLGkuZGVmYXVsdCkoQixnKSxCLnZhbGlkYXRlX2xlbmd0aCYmdy5sZW5ndGg+Qi5tYXhfYWxsb3dlZF9sZW5ndGgpfHwhQi5hbGxvd19mcmFnbWVudHMmJigwLHMuZGVmYXVsdCkodywiIyIpfHwhQi5hbGxvd19xdWVyeV9jb21wb25lbnRzJiYoKDAscy5kZWZhdWx0KSh3LCI/Iil8fCgwLHMuZGVmYXVsdCkodywiJiIpKSlyZXR1cm4hMTt2YXIgayxWLEwsSSx5LEUsQyxGO0M9dy5zcGxpdCgiIyIpLHc9Qy5zaGlmdCgpLEM9dy5zcGxpdCgiPyIpLHc9Qy5zaGlmdCgpO3ZhciAkPXcubWF0Y2goL14oW2Etel1bYS16MC05K1wtLl0qKTovaSksTz0hMSxSPWZ1bmN0aW9uKHJ0KXtyZXR1cm4gTz0hMCxrPXJ0LnRvTG93ZXJDYXNlKCksQi5yZXF1aXJlX3ZhbGlkX3Byb3RvY29sJiZCLnByb3RvY29scy5pbmRleE9mKGspPT09LTE/ITE6dy5zdWJzdHJpbmcoJFswXS5sZW5ndGgpfTtpZigkKXt2YXIgeD0kWzFdLHY9dy5zdWJzdHJpbmcoJFswXS5sZW5ndGgpLF89di5zbGljZSgwLDIpPT09Ii8vIjtpZihfKXtpZih3PVIoeCksdz09PSExKXJldHVybiExfWVsc2V7dmFyIE09di5pbmRleE9mKCIvIiksej1NPT09LTE/djp2LnN1YnN0cmluZygwLE0pLHE9ei5pbmRleE9mKCJAIik7aWYocSE9PS0xKXt2YXIgUT16LnN1YnN0cmluZygwLHEpLGVlPS9eW2EtekEtWjAtOVwtXy4lOl0qJC8sZ2U9ZWUudGVzdChRKTtpZihnZSl7aWYoQi5yZXF1aXJlX3Byb3RvY29sKXJldHVybiExfWVsc2UgaWYodz1SKHgpLHc9PT0hMSlyZXR1cm4hMX1lbHNle3ZhciBUZT0vXlswLTldLy50ZXN0KHYpO2lmKFRlKXtpZihCLnJlcXVpcmVfcHJvdG9jb2wpcmV0dXJuITF9ZWxzZSBpZih3PVIoeCksdz09PSExKXJldHVybiExfX19ZWxzZSBpZihCLnJlcXVpcmVfcHJvdG9jb2wpcmV0dXJuITE7aWYody5zbGljZSgwLDIpPT09Ii8vIil7aWYoIU8mJiFCLmFsbG93X3Byb3RvY29sX3JlbGF0aXZlX3VybHMpcmV0dXJuITE7dz13LnNsaWNlKDIpfWlmKHc9PT0iIilyZXR1cm4hMTtpZihDPXcuc3BsaXQoIi8iKSx3PUMuc2hpZnQoKSx3PT09IiImJiFCLnJlcXVpcmVfaG9zdClyZXR1cm4hMDtpZihDPXcuc3BsaXQoIkAiKSxDLmxlbmd0aD4xKXtpZihCLmRpc2FsbG93X2F1dGh8fENbMF09PT0iInx8KFY9Qy5zaGlmdCgpLFYuaW5kZXhPZigiOiIpPj0wJiZWLnNwbGl0KCI6IikubGVuZ3RoPjIpKXJldHVybiExO3ZhciBwZT1WLnNwbGl0KCI6IiksZmU9ZihwZSwyKSxkZT1mZVswXSxCZT1mZVsxXTtpZihkZT09PSIiJiZCZT09PSIiKXJldHVybiExfUk9Qy5qb2luKCJAIiksRT1udWxsLEY9bnVsbDt2YXIgS2U9SS5tYXRjaChBKTtpZihLZT8oTD0iIixGPUtlWzFdLEU9S2VbMl18fG51bGwpOihDPUkuc3BsaXQoIjoiKSxMPUMuc2hpZnQoKSxDLmxlbmd0aCYmKEU9Qy5qb2luKCI6IikpKSxFIT09bnVsbCYmRS5sZW5ndGg+MCl7aWYoeT1wYXJzZUludChFLDEwKSwhL15bMC05XSskLy50ZXN0KEUpfHx5PD0wfHx5PjY1NTM1KXJldHVybiExfWVsc2UgaWYoQi5yZXF1aXJlX3BvcnQpcmV0dXJuITE7cmV0dXJuIEIuaG9zdF93aGl0ZWxpc3Q/KDAsYS5kZWZhdWx0KShMLEIuaG9zdF93aGl0ZWxpc3QpOkw9PT0iIiYmIUIucmVxdWlyZV9ob3N0PyEwOiEoISgwLG8uZGVmYXVsdCkoTCkmJiEoMCxyLmRlZmF1bHQpKEwsQikmJighRnx8ISgwLG8uZGVmYXVsdCkoRiw2KSl8fChMPUx8fEYsQi5ob3N0X2JsYWNrbGlzdCYmKDAsYS5kZWZhdWx0KShMLEIuaG9zdF9ibGFja2xpc3QpKSl9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShGbCxGbC5leHBvcnRzKTt2YXIgRzI9RmwuZXhwb3J0cyxrbD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1kO3ZhciB0PWEoaWUpO2Z1bmN0aW9uIGEocCl7cmV0dXJuIHAmJnAuX19lc01vZHVsZT9wOntkZWZhdWx0OnB9fXZhciBzPS9eKD86WzAtOWEtZkEtRl17Mn0oWy06XHNdKSkoWzAtOWEtZkEtRl17Mn1cMSl7NH0oWzAtOWEtZkEtRl17Mn0pJC8scj0vXihbMC05YS1mQS1GXSl7MTJ9JC8sbz0vXihbMC05YS1mQS1GXXs0fVwuKXsyfShbMC05YS1mQS1GXXs0fSkkLyxpPS9eKD86WzAtOWEtZkEtRl17Mn0oWy06XHNdKSkoWzAtOWEtZkEtRl17Mn1cMSl7Nn0oWzAtOWEtZkEtRl17Mn0pJC8sYz0vXihbMC05YS1mQS1GXSl7MTZ9JC8sZj0vXihbMC05YS1mQS1GXXs0fVwuKXszfShbMC05YS1mQS1GXXs0fSkkLztmdW5jdGlvbiBkKHAsYil7cmV0dXJuKDAsdC5kZWZhdWx0KShwKSxiIT1udWxsJiZiLmV1aSYmKGIuZXVpPVN0cmluZyhiLmV1aSkpLGIhPW51bGwmJmIubm9fY29sb25zfHxiIT1udWxsJiZiLm5vX3NlcGFyYXRvcnM/Yi5ldWk9PT0iNDgiP3IudGVzdChwKTpiLmV1aT09PSI2NCI/Yy50ZXN0KHApOnIudGVzdChwKXx8Yy50ZXN0KHApOmI/LmV1aT09PSI0OCI/cy50ZXN0KHApfHxvLnRlc3QocCk6Yj8uZXVpPT09IjY0Ij9pLnRlc3QocCl8fGYudGVzdChwKTpkKHAse2V1aToiNDgifSl8fGQocCx7ZXVpOiI2NCJ9KX1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKGtsLGtsLmV4cG9ydHMpO3ZhciBIMj1rbC5leHBvcnRzLFVsPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PWM7dmFyIHQ9cyhpZSksYT1zKCRjKTtmdW5jdGlvbiBzKGYpe3JldHVybiBmJiZmLl9fZXNNb2R1bGU/Zjp7ZGVmYXVsdDpmfX12YXIgcj0vXlxkezEsM30kLyxvPTMyLGk9MTI4O2Z1bmN0aW9uIGMoZil7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiIiOygwLHQuZGVmYXVsdCkoZik7dmFyIHA9Zi5zcGxpdCgiLyIpO2lmKHAubGVuZ3RoIT09Mnx8IXIudGVzdChwWzFdKXx8cFsxXS5sZW5ndGg+MSYmcFsxXS5zdGFydHNXaXRoKCIwIikpcmV0dXJuITE7dmFyIGI9KDAsYS5kZWZhdWx0KShwWzBdLGQpO2lmKCFiKXJldHVybiExO3ZhciBUPW51bGw7c3dpdGNoKFN0cmluZyhkKSl7Y2FzZSI0IjpUPW87YnJlYWs7Y2FzZSI2IjpUPWk7YnJlYWs7ZGVmYXVsdDpUPSgwLGEuZGVmYXVsdCkocFswXSwiNiIpP2k6b31yZXR1cm4gcFsxXTw9VCYmcFsxXT49MH1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKFVsLFVsLmV4cG9ydHMpO3ZhciBLMj1VbC5leHBvcnRzLERsPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PVc7dmFyIHQ9YShxdCk7ZnVuY3Rpb24gYShnKXtyZXR1cm4gZyYmZy5fX2VzTW9kdWxlP2c6e2RlZmF1bHQ6Z319ZnVuY3Rpb24gcyhnLEEpe3JldHVybiBpKGcpfHxvKGcsQSl8fGYoZyxBKXx8cigpfWZ1bmN0aW9uIHIoKXt0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9ZnVuY3Rpb24gbyhnLEEpe3ZhciBtPWc9PW51bGw/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYmZ1tTeW1ib2wuaXRlcmF0b3JdfHxnWyJAQGl0ZXJhdG9yIl07aWYobSE9bnVsbCl7dmFyIHcsQixrLFYsTD1bXSxJPSEwLHk9ITE7dHJ5e2lmKGs9KG09bS5jYWxsKGcpKS5uZXh0LEEhPT0wKWZvcig7IShJPSh3PWsuY2FsbChtKSkuZG9uZSkmJihMLnB1c2gody52YWx1ZSksTC5sZW5ndGghPT1BKTtJPSEwKTt9Y2F0Y2goRSl7eT0hMCxCPUV9ZmluYWxseXt0cnl7aWYoIUkmJm0ucmV0dXJuIT1udWxsJiYoVj1tLnJldHVybigpLE9iamVjdChWKSE9PVYpKXJldHVybn1maW5hbGx5e2lmKHkpdGhyb3cgQn19cmV0dXJuIEx9fWZ1bmN0aW9uIGkoZyl7aWYoQXJyYXkuaXNBcnJheShnKSlyZXR1cm4gZ31mdW5jdGlvbiBjKGcsQSl7dmFyIG09dHlwZW9mIFN5bWJvbDwidSImJmdbU3ltYm9sLml0ZXJhdG9yXXx8Z1siQEBpdGVyYXRvciJdO2lmKCFtKXtpZihBcnJheS5pc0FycmF5KGcpfHwobT1mKGcpKXx8QSl7bSYmKGc9bSk7dmFyIHc9MCxCPWZ1bmN0aW9uKCl7fTtyZXR1cm57czpCLG46ZnVuY3Rpb24oKXtyZXR1cm4gdz49Zy5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmdbdysrXX19LGU6ZnVuY3Rpb24oeSl7dGhyb3cgeX0sZjpCfX10aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX12YXIgayxWPSEwLEw9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXttPW0uY2FsbChnKX0sbjpmdW5jdGlvbigpe3ZhciB5PW0ubmV4dCgpO3JldHVybiBWPXkuZG9uZSx5fSxlOmZ1bmN0aW9uKHkpe0w9ITAsaz15fSxmOmZ1bmN0aW9uKCl7dHJ5e1Z8fG0ucmV0dXJuPT1udWxsfHxtLnJldHVybigpfWZpbmFsbHl7aWYoTCl0aHJvdyBrfX19fWZ1bmN0aW9uIGYoZyxBKXtpZihnKXtpZih0eXBlb2YgZz09InN0cmluZyIpcmV0dXJuIGQoZyxBKTt2YXIgbT17fS50b1N0cmluZy5jYWxsKGcpLnNsaWNlKDgsLTEpO3JldHVybiBtPT09Ik9iamVjdCImJmcuY29uc3RydWN0b3ImJihtPWcuY29uc3RydWN0b3IubmFtZSksbT09PSJNYXAifHxtPT09IlNldCI/QXJyYXkuZnJvbShnKTptPT09IkFyZ3VtZW50cyJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG0pP2QoZyxBKTp2b2lkIDB9fWZ1bmN0aW9uIGQoZyxBKXsoQT09bnVsbHx8QT5nLmxlbmd0aCkmJihBPWcubGVuZ3RoKTtmb3IodmFyIG09MCx3PUFycmF5KEEpO208QTttKyspd1ttXT1nW21dO3JldHVybiB3fXZhciBwPXtmb3JtYXQ6IllZWVkvTU0vREQiLGRlbGltaXRlcnM6WyIvIiwiLSJdLHN0cmljdE1vZGU6ITF9O2Z1bmN0aW9uIGIoZyl7cmV0dXJuLyheKHl7NH18eXsyfSlbLlwvLV0obXsxLDJ9KVsuXC8tXShkezEsMn0pJCl8KF4obXsxLDJ9KVsuXC8tXShkezEsMn0pWy5cLy1dKCh5ezR9fHl7Mn0pJCkpfCheKGR7MSwyfSlbLlwvLV0obXsxLDJ9KVsuXC8tXSgoeXs0fXx5ezJ9KSQpKS9naS50ZXN0KGcpfWZ1bmN0aW9uIFQoZyxBKXtmb3IodmFyIG09W10sdz1NYXRoLm1heChnLmxlbmd0aCxBLmxlbmd0aCksQj0wO0I8dztCKyspbS5wdXNoKFtnW0JdLEFbQl1dKTtyZXR1cm4gbX1mdW5jdGlvbiBXKGcsQSl7aWYodHlwZW9mIEE9PSJzdHJpbmciP0E9KDAsdC5kZWZhdWx0KSh7Zm9ybWF0OkF9LHApOkE9KDAsdC5kZWZhdWx0KShBLHApLHR5cGVvZiBnPT0ic3RyaW5nIiYmYihBLmZvcm1hdCkpe2lmKEEuc3RyaWN0TW9kZSYmZy5sZW5ndGghPT1BLmZvcm1hdC5sZW5ndGgpcmV0dXJuITE7dmFyIG09QS5kZWxpbWl0ZXJzLmZpbmQoZnVuY3Rpb24oeCl7cmV0dXJuIEEuZm9ybWF0LmluZGV4T2YoeCkhPT0tMX0pLHc9QS5zdHJpY3RNb2RlP206QS5kZWxpbWl0ZXJzLmZpbmQoZnVuY3Rpb24oeCl7cmV0dXJuIGcuaW5kZXhPZih4KSE9PS0xfSksQj1UKGcuc3BsaXQodyksQS5mb3JtYXQudG9Mb3dlckNhc2UoKS5zcGxpdChtKSksaz17fSxWPWMoQiksTDt0cnl7Zm9yKFYucygpOyEoTD1WLm4oKSkuZG9uZTspe3ZhciBJPXMoTC52YWx1ZSwyKSx5PUlbMF0sRT1JWzFdO2lmKCF5fHwhRXx8eS5sZW5ndGghPT1FLmxlbmd0aClyZXR1cm4hMTtrW0UuY2hhckF0KDApXT15fX1jYXRjaCh4KXtWLmUoeCl9ZmluYWxseXtWLmYoKX12YXIgQz1rLnk7aWYoQy5zdGFydHNXaXRoKCItIikpcmV0dXJuITE7aWYoay55Lmxlbmd0aD09PTIpe3ZhciBGPXBhcnNlSW50KGsueSwxMCk7aWYoaXNOYU4oRikpcmV0dXJuITE7dmFyICQ9bmV3IERhdGUoKS5nZXRGdWxsWWVhcigpJTEwMDtGPCQ/Qz0iMjAiLmNvbmNhdChrLnkpOkM9IjE5Ii5jb25jYXQoay55KX12YXIgTz1rLm07ay5tLmxlbmd0aD09PTEmJihPPSIwIi5jb25jYXQoay5tKSk7dmFyIFI9ay5kO3JldHVybiBrLmQubGVuZ3RoPT09MSYmKFI9IjAiLmNvbmNhdChrLmQpKSxuZXcgRGF0ZSgiIi5jb25jYXQoQywiLSIpLmNvbmNhdChPLCItIikuY29uY2F0KFIsIlQwMDowMDowMC4wMDBaIikpLmdldFVUQ0RhdGUoKT09PStrLmR9cmV0dXJuIEEuc3RyaWN0TW9kZT8hMTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZyk9PT0iW29iamVjdCBEYXRlXSImJmlzRmluaXRlKGcpfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkoRGwsRGwuZXhwb3J0cyk7dmFyIHl5PURsLmV4cG9ydHMsJGw9e2V4cG9ydHM6e319OyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9bzt2YXIgdD1hKHF0KTtmdW5jdGlvbiBhKGkpe3JldHVybiBpJiZpLl9fZXNNb2R1bGU/aTp7ZGVmYXVsdDppfX12YXIgcz17aG91ckZvcm1hdDoiaG91cjI0Iixtb2RlOiJkZWZhdWx0In0scj17aG91cjI0OntkZWZhdWx0Oi9eKFswMV0/WzAtOV18MlswLTNdKTooWzAtNV1bMC05XSkkLyx3aXRoU2Vjb25kczovXihbMDFdP1swLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pOihbMC01XVswLTldKSQvLHdpdGhPcHRpb25hbFNlY29uZHM6L14oWzAxXT9bMC05XXwyWzAtM10pOihbMC01XVswLTldKSg/OjooWzAtNV1bMC05XSkpPyQvfSxob3VyMTI6e2RlZmF1bHQ6L14oMD9bMS05XXwxWzAtMl0pOihbMC01XVswLTldKSAoQXxQKU0kLyx3aXRoU2Vjb25kczovXigwP1sxLTldfDFbMC0yXSk6KFswLTVdWzAtOV0pOihbMC01XVswLTldKSAoQXxQKU0kLyx3aXRoT3B0aW9uYWxTZWNvbmRzOi9eKDA/WzEtOV18MVswLTJdKTooWzAtNV1bMC05XSkoPzo6KFswLTVdWzAtOV0pKT8gKEF8UClNJC99fTtmdW5jdGlvbiBvKGksYyl7cmV0dXJuIGM9KDAsdC5kZWZhdWx0KShjLHMpLHR5cGVvZiBpIT0ic3RyaW5nIj8hMTpyW2MuaG91ckZvcm1hdF1bYy5tb2RlXS50ZXN0KGkpfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkoJGwsJGwuZXhwb3J0cyk7dmFyIFoyPSRsLmV4cG9ydHMsTGw9e2V4cG9ydHM6e319LHpsPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PXZvaWQgMDt2YXIgdD1mdW5jdGlvbihzLHIpe3JldHVybiBzLnNvbWUoZnVuY3Rpb24obyl7cmV0dXJuIHI9PT1vfSl9O2UuZGVmYXVsdD10LG4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkoemwsemwuZXhwb3J0cyk7dmFyIFphPXpsLmV4cG9ydHM7KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1jO3ZhciB0PXMoaWUpLGE9cyhaYSk7ZnVuY3Rpb24gcyhmKXtyZXR1cm4gZiYmZi5fX2VzTW9kdWxlP2Y6e2RlZmF1bHQ6Zn19dmFyIHI9e2xvb3NlOiExfSxvPVsidHJ1ZSIsImZhbHNlIiwiMSIsIjAiXSxpPVtdLmNvbmNhdChvLFsieWVzIiwibm8iXSk7ZnVuY3Rpb24gYyhmKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06cjtyZXR1cm4oMCx0LmRlZmF1bHQpKGYpLGQubG9vc2U/KDAsYS5kZWZhdWx0KShpLGYudG9Mb3dlckNhc2UoKSk6KDAsYS5kZWZhdWx0KShvLGYpfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkoTGwsTGwuZXhwb3J0cyk7dmFyIHEyPUxsLmV4cG9ydHMsamw9e2V4cG9ydHM6e319OyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9dzt2YXIgdD1hKGllKTtmdW5jdGlvbiBhKEIpe3JldHVybiBCJiZCLl9fZXNNb2R1bGU/Qjp7ZGVmYXVsdDpCfX12YXIgcz0iKFtBLVphLXpdezN9KC1bQS1aYS16XXszfSl7MCwyfSkiLHI9IigoW2EtekEtWl17MiwzfSgtIi5jb25jYXQocywiKT8pfChbYS16QS1aXXs1LDh9KSkiKSxvPSIoW0EtWmEtel17NH0pIixpPSIoW0EtWmEtel17Mn18XFxkezN9KSIsYz0iKFtBLVphLXowLTldezUsOH18KFxcZFtBLVotYS16MC05XXszfSkpIixmPSIoXFxkfFtBLVddfFtZLVpdfFthLXddfFt5LXpdKSIsZD0iKCIuY29uY2F0KGYsIigtW0EtWmEtejAtOV17Miw4fSkrKSIpLHA9Iih4KC1bQS1aYS16MC05XXsxLDh9KSspIixiPSIoKGVuLUdCLW9lZCl8KGktYW1pKXwoaS1ibm4pfChpLWRlZmF1bHQpfChpLWVub2NoaWFuKXwoaS1oYWspfChpLWtsaW5nb24pfChpLWx1eCl8KGktbWluZ28pfChpLW5hdmFqbyl8KGktcHduKXwoaS10YW8pfChpLXRheSl8KGktdHN1KXwoc2duLUJFLUZSKXwoc2duLUJFLU5MKXwoc2duLUNILURFKSkiLFQ9IigoYXJ0LWxvamJhbil8KGNlbC1nYXVsaXNoKXwobm8tYm9rKXwobm8tbnluKXwoemgtZ3VveXUpfCh6aC1oYWtrYSl8KHpoLW1pbil8KHpoLW1pbi1uYW4pfCh6aC14aWFuZykpIixXPSIoIi5jb25jYXQoYiwifCIpLmNvbmNhdChULCIpIiksZz0iKC18XykiLEE9IiIuY29uY2F0KHIsIigiKS5jb25jYXQoZykuY29uY2F0KG8sIik/KCIpLmNvbmNhdChnKS5jb25jYXQoaSwiKT8oIikuY29uY2F0KGcpLmNvbmNhdChjLCIpKigiKS5jb25jYXQoZykuY29uY2F0KGQsIikqKCIpLmNvbmNhdChnKS5jb25jYXQocCwiKT8iKSxtPW5ldyBSZWdFeHAoIiheIi5jb25jYXQocCwiJCl8KF4iKS5jb25jYXQoVywiJCl8KF4iKS5jb25jYXQoQSwiJCkiKSk7ZnVuY3Rpb24gdyhCKXtyZXR1cm4oMCx0LmRlZmF1bHQpKEIpLG0udGVzdChCKX1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKGpsLGpsLmV4cG9ydHMpO3ZhciBKMj1qbC5leHBvcnRzLFZsPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PXI7dmFyIHQ9YShpZSk7ZnVuY3Rpb24gYShvKXtyZXR1cm4gbyYmby5fX2VzTW9kdWxlP286e2RlZmF1bHQ6b319dmFyIHM9L14oPyEoMVszLTldKXwoMjApfCgzWzMtOV0pfCg0WzAtOV0pfCg1WzAtOV0pfCg2MCl8KDdbMy05XSl8KDhbMS05XSl8KDlbMC0yXSl8KDlbMy05XSkpWzAtOV17OX0kLztmdW5jdGlvbiByKG8pe2lmKCgwLHQuZGVmYXVsdCkobyksIXMudGVzdChvKSlyZXR1cm4hMTtmb3IodmFyIGk9MCxjPTA7YzxvLmxlbmd0aDtjKyspYyUzPT09MD9pKz1vW2NdKjM6YyUzPT09MT9pKz1vW2NdKjc6aSs9b1tjXSoxO3JldHVybiBpJTEwPT09MH1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKFZsLFZsLmV4cG9ydHMpO3ZhciBZMj1WbC5leHBvcnRzLHFhPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxYSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7cWEuZGVmYXVsdD1lUDtxYS5sb2NhbGVzPXZvaWQgMDt2YXIgWDI9UTIoaWUpLEdsPWN0O2Z1bmN0aW9uIFEyKG4pe3JldHVybiBuJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufX1mdW5jdGlvbiBlUChuKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ImVuLVVTIix0PWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTp7fTsoMCxYMi5kZWZhdWx0KShuKTt2YXIgYT1uLHM9dC5pZ25vcmU7aWYocylpZihzIGluc3RhbmNlb2YgUmVnRXhwKWE9YS5yZXBsYWNlKHMsIiIpO2Vsc2UgaWYodHlwZW9mIHM9PSJzdHJpbmciKWE9YS5yZXBsYWNlKG5ldyBSZWdFeHAoIlsiLmNvbmNhdChzLnJlcGxhY2UoL1stW1xde30oKSorPy4sXFxeJHwjXFxzXS9nLCJcXCQmIiksIl0iKSwiZyIpLCIiKTtlbHNlIHRocm93IG5ldyBFcnJvcigiaWdub3JlIHNob3VsZCBiZSBpbnN0YW5jZSBvZiBhIFN0cmluZyBvciBSZWdFeHAiKTtpZihlIGluIEdsLmFscGhhKXJldHVybiBHbC5hbHBoYVtlXS50ZXN0KGEpO3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCBsb2NhbGUgJyIuY29uY2F0KGUsIiciKSl9cWEubG9jYWxlcz1PYmplY3Qua2V5cyhHbC5hbHBoYSk7dmFyIEphPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKYSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7SmEuZGVmYXVsdD1uUDtKYS5sb2NhbGVzPXZvaWQgMDt2YXIgdFA9clAoaWUpLEhsPWN0O2Z1bmN0aW9uIHJQKG4pe3JldHVybiBuJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufX1mdW5jdGlvbiBuUChuKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ImVuLVVTIix0PWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTp7fTsoMCx0UC5kZWZhdWx0KShuKTt2YXIgYT1uLHM9dC5pZ25vcmU7aWYocylpZihzIGluc3RhbmNlb2YgUmVnRXhwKWE9YS5yZXBsYWNlKHMsIiIpO2Vsc2UgaWYodHlwZW9mIHM9PSJzdHJpbmciKWE9YS5yZXBsYWNlKG5ldyBSZWdFeHAoIlsiLmNvbmNhdChzLnJlcGxhY2UoL1stW1xde30oKSorPy4sXFxeJHwjXFxzXS9nLCJcXCQmIiksIl0iKSwiZyIpLCIiKTtlbHNlIHRocm93IG5ldyBFcnJvcigiaWdub3JlIHNob3VsZCBiZSBpbnN0YW5jZSBvZiBhIFN0cmluZyBvciBSZWdFeHAiKTtpZihlIGluIEhsLmFscGhhbnVtZXJpYylyZXR1cm4gSGwuYWxwaGFudW1lcmljW2VdLnRlc3QoYSk7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxvY2FsZSAnIi5jb25jYXQoZSwiJyIpKX1KYS5sb2NhbGVzPU9iamVjdC5rZXlzKEhsLmFscGhhbnVtZXJpYyk7dmFyIEtsPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PW87dmFyIHQ9cyhpZSksYT1jdDtmdW5jdGlvbiBzKGkpe3JldHVybiBpJiZpLl9fZXNNb2R1bGU/aTp7ZGVmYXVsdDppfX12YXIgcj0vXlswLTldKyQvO2Z1bmN0aW9uIG8oaSxjKXtyZXR1cm4oMCx0LmRlZmF1bHQpKGkpLGMmJmMubm9fc3ltYm9scz9yLnRlc3QoaSk6bmV3IFJlZ0V4cCgiXlsrLV0/KFswLTldKlsiLmNvbmNhdCgoY3x8e30pLmxvY2FsZT9hLmRlY2ltYWxbYy5sb2NhbGVdOiIuIiwiXSk/WzAtOV0rJCIpKS50ZXN0KGkpfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkoS2wsS2wuZXhwb3J0cyk7dmFyIG9QPUtsLmV4cG9ydHMsWWE9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KFlhLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtZYS5kZWZhdWx0PWlQO1lhLmxvY2FsZXM9dm9pZCAwO3ZhciBzUD1hUChpZSk7ZnVuY3Rpb24gYVAobil7cmV0dXJuIG4mJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59fXZhciBabD17QU06L15bQS1aXXsyfVxkezd9JC8sQVI6L15bQS1aXXszfVxkezZ9JC8sQVQ6L15bQS1aXVxkezd9JC8sQVU6L15bQS1aXVxkezd9JC8sQVo6L15bQS1aXXsxfVxkezh9JC8sQkU6L15bQS1aXXsyfVxkezZ9JC8sQkc6L15cZHs5fSQvLEJSOi9eW0EtWl17Mn1cZHs2fSQvLEJZOi9eW0EtWl17Mn1cZHs3fSQvLENBOi9eW0EtWl17Mn1cZHs2fSR8XltBLVpdXGR7Nn1bQS1aXXsyfSQvLENIOi9eW0EtWl1cZHs3fSQvLENOOi9eR1xkezh9JHxeRSg/IVtJT10pW0EtWjAtOV1cZHs3fSQvLENZOi9eW0EtWl0oXGR7Nn18XGR7OH0pJC8sQ1o6L15cZHs4fSQvLERFOi9eW0NGR0hKS0xNTlBSVFZXWFlaMC05XXs5fSQvLERLOi9eXGR7OX0kLyxEWjovXlxkezl9JC8sRUU6L14oW0EtWl1cZHs3fXxbQS1aXXsyfVxkezd9KSQvLEVTOi9eW0EtWjAtOV17Mn0oW0EtWjAtOV0/KVxkezZ9JC8sRkk6L15bQS1aXXsyfVxkezd9JC8sRlI6L15cZHsyfVtBLVpdezJ9XGR7NX0kLyxHQjovXlxkezl9JC8sR1I6L15bQS1aXXsyfVxkezd9JC8sSFI6L15cZHs5fSQvLEhVOi9eW0EtWl17Mn0oXGR7Nn18XGR7N30pJC8sSUU6L15bQS1aMC05XXsyfVxkezd9JC8sSU46L15bQS1aXXsxfS0/XGR7N30kLyxJRDovXltBLUNdXGR7N30kLyxJUjovXltBLVpdXGR7OH0kLyxJUzovXihBKVxkezd9JC8sSVQ6L15bQS1aMC05XXsyfVxkezd9JC8sSk06L15bQWFdXGR7N30kLyxKUDovXltBLVpdezJ9XGR7N30kLyxLUjovXltNU11cZHs4fSQvLEtaOi9eW2EtekEtWl1cZHs3fSQvLExJOi9eW2EtekEtWl1cZHs1fSQvLExUOi9eW0EtWjAtOV17OH0kLyxMVTovXltBLVowLTldezh9JC8sTFY6L15bQS1aMC05XXsyfVxkezd9JC8sTFk6L15bQS1aMC05XXs4fSQvLE1UOi9eXGR7N30kLyxNWjovXihbQS1aXXsyfVxkezd9KXwoXGR7Mn1bQS1aXXsyfVxkezV9KSQvLE1ZOi9eW0FIS11cZHs4fSQvLE1YOi9eXGR7MTAsMTF9JC8sTkw6L15bQS1aXXsyfVtBLVowLTldezZ9XGQkLyxOWjovXihbTGxdKFtBYV18W0RkXXxbRmZdfFtIaF0pfFtFZV0oW0FhXXxbUHBdKXxbTm5dKVxkezZ9JC8sUEg6L14oW0EtWl0oXGR7Nn18XGR7N31bQS1aXSkpfChbQS1aXXsyfShcZHs2fXxcZHs3fSkpJC8sUEs6L15bQS1aXXsyfVxkezd9JC8sUEw6L15bQS1aXXsyfVxkezd9JC8sUFQ6L15bQS1aXVxkezZ9JC8sUk86L15cZHs4LDl9JC8sUlU6L15cZHs5fSQvLFNFOi9eXGR7OH0kLyxTTDovXihQKVtBLVpdXGR7N30kLyxTSzovXlswLTlBLVpdXGR7N30kLyxUSDovXltBLVpdezEsMn1cZHs2LDd9JC8sVFI6L15bQS1aXVxkezh9JC8sVUE6L15bQS1aXXsyfVxkezZ9JC8sVVM6L15cZHs5fSR8XltBLVpdXGR7OH0kLyxaQTovXltUQU1EXVxkezh9JC99O1lhLmxvY2FsZXM9T2JqZWN0LmtleXMoWmwpO2Z1bmN0aW9uIGlQKG4sZSl7KDAsc1AuZGVmYXVsdCkobik7dmFyIHQ9bi5yZXBsYWNlKC9ccy9nLCIiKS50b1VwcGVyQ2FzZSgpO3JldHVybiBlLnRvVXBwZXJDYXNlKClpbiBabCYmWmxbZV0udGVzdCh0KX12YXIgcWw9e2V4cG9ydHM6e319LEpsPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PWk7dmFyIHQ9cyhpZSksYT1zKGN5KTtmdW5jdGlvbiBzKGMpe3JldHVybiBjJiZjLl9fZXNNb2R1bGU/Yzp7ZGVmYXVsdDpjfX12YXIgcj0vXig/OlstK10/KD86MHxbMS05XVswLTldKikpJC8sbz0vXlstK10/WzAtOV0rJC87ZnVuY3Rpb24gaShjLGYpeygwLHQuZGVmYXVsdCkoYyksZj1mfHx7fTt2YXIgZD1mLmFsbG93X2xlYWRpbmdfemVyb2VzPT09ITE/cjpvLHA9IWYuaGFzT3duUHJvcGVydHkoIm1pbiIpfHwoMCxhLmRlZmF1bHQpKGYubWluKXx8Yz49Zi5taW4sYj0hZi5oYXNPd25Qcm9wZXJ0eSgibWF4Iil8fCgwLGEuZGVmYXVsdCkoZi5tYXgpfHxjPD1mLm1heCxUPSFmLmhhc093blByb3BlcnR5KCJsdCIpfHwoMCxhLmRlZmF1bHQpKGYubHQpfHxjPGYubHQsVz0hZi5oYXNPd25Qcm9wZXJ0eSgiZ3QiKXx8KDAsYS5kZWZhdWx0KShmLmd0KXx8Yz5mLmd0O3JldHVybiBkLnRlc3QoYykmJnAmJmImJlQmJld9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShKbCxKbC5leHBvcnRzKTt2YXIgWGQ9SmwuZXhwb3J0czsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PXM7dmFyIHQ9YShYZCk7ZnVuY3Rpb24gYShyKXtyZXR1cm4gciYmci5fX2VzTW9kdWxlP3I6e2RlZmF1bHQ6cn19ZnVuY3Rpb24gcyhyKXtyZXR1cm4oMCx0LmRlZmF1bHQpKHIse2FsbG93X2xlYWRpbmdfemVyb2VzOiExLG1pbjowLG1heDo2NTUzNX0pfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkocWwscWwuZXhwb3J0cyk7dmFyIGNQPXFsLmV4cG9ydHMsWWw9e2V4cG9ydHM6e319OyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9czt2YXIgdD1hKGllKTtmdW5jdGlvbiBhKHIpe3JldHVybiByJiZyLl9fZXNNb2R1bGU/cjp7ZGVmYXVsdDpyfX1mdW5jdGlvbiBzKHIpe3JldHVybigwLHQuZGVmYXVsdCkocikscj09PXIudG9Mb3dlckNhc2UoKX1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKFlsLFlsLmV4cG9ydHMpO3ZhciB1UD1ZbC5leHBvcnRzLFhsPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PXM7dmFyIHQ9YShpZSk7ZnVuY3Rpb24gYShyKXtyZXR1cm4gciYmci5fX2VzTW9kdWxlP3I6e2RlZmF1bHQ6cn19ZnVuY3Rpb24gcyhyKXtyZXR1cm4oMCx0LmRlZmF1bHQpKHIpLHI9PT1yLnRvVXBwZXJDYXNlKCl9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShYbCxYbC5leHBvcnRzKTt2YXIgbFA9WGwuZXhwb3J0cyxRbD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1vO3ZhciB0PWEoaWUpO2Z1bmN0aW9uIGEoaSl7cmV0dXJuIGkmJmkuX19lc01vZHVsZT9pOntkZWZhdWx0Oml9fXZhciBzPS9eWzAtOV17MTV9JC8scj0vXlxkezJ9LVxkezZ9LVxkezZ9LVxkezF9JC87ZnVuY3Rpb24gbyhpLGMpeygwLHQuZGVmYXVsdCkoaSksYz1jfHx7fTt2YXIgZj1zO2lmKGMuYWxsb3dfaHlwaGVucyYmKGY9ciksIWYudGVzdChpKSlyZXR1cm4hMTtpPWkucmVwbGFjZSgvLS9nLCIiKTtmb3IodmFyIGQ9MCxwPTIsYj0xNCxUPTA7VDxiO1QrKyl7dmFyIFc9aS5zdWJzdHJpbmcoYi1ULTEsYi1UKSxnPXBhcnNlSW50KFcsMTApKnA7Zz49MTA/ZCs9ZyUxMCsxOmQrPWcscD09PTE/cCs9MTpwLT0xfXZhciBBPSgxMC1kJTEwKSUxMDtyZXR1cm4gQT09PXBhcnNlSW50KGkuc3Vic3RyaW5nKDE0LDE1KSwxMCl9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShRbCxRbC5leHBvcnRzKTt2YXIgZlA9UWwuZXhwb3J0cyxlZj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1yO3ZhciB0PWEoaWUpO2Z1bmN0aW9uIGEobyl7cmV0dXJuIG8mJm8uX19lc01vZHVsZT9vOntkZWZhdWx0Om99fXZhciBzPS9eW1x4MDAtXHg3Rl0rJC87ZnVuY3Rpb24gcihvKXtyZXR1cm4oMCx0LmRlZmF1bHQpKG8pLHMudGVzdChvKX1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKGVmLGVmLmV4cG9ydHMpO3ZhciBkUD1lZi5leHBvcnRzLFhzPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYcywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7WHMuZGVmYXVsdD1iUDtYcy5mdWxsV2lkdGg9dm9pZCAwO3ZhciBwUD1oUChpZSk7ZnVuY3Rpb24gaFAobil7cmV0dXJuIG4mJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59fXZhciBnUD1Ycy5mdWxsV2lkdGg9L1teXHUwMDIwLVx1MDA3RVx1RkY2MS1cdUZGOUZcdUZGQTAtXHVGRkRDXHVGRkU4LVx1RkZFRTAtOWEtekEtWl0vO2Z1bmN0aW9uIGJQKG4pe3JldHVybigwLHBQLmRlZmF1bHQpKG4pLGdQLnRlc3Qobil9dmFyIFFzPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShRcywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7UXMuZGVmYXVsdD1BUDtRcy5oYWxmV2lkdGg9dm9pZCAwO3ZhciB5UD14UChpZSk7ZnVuY3Rpb24geFAobil7cmV0dXJuIG4mJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59fXZhciBUUD1Rcy5oYWxmV2lkdGg9L1tcdTAwMjAtXHUwMDdFXHVGRjYxLVx1RkY5Rlx1RkZBMC1cdUZGRENcdUZGRTgtXHVGRkVFMC05YS16QS1aXS87ZnVuY3Rpb24gQVAobil7cmV0dXJuKDAseVAuZGVmYXVsdCkobiksVFAudGVzdChuKX12YXIgdGY9e2V4cG9ydHM6e319OyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9bzt2YXIgdD1yKGllKSxhPVhzLHM9UXM7ZnVuY3Rpb24gcihpKXtyZXR1cm4gaSYmaS5fX2VzTW9kdWxlP2k6e2RlZmF1bHQ6aX19ZnVuY3Rpb24gbyhpKXtyZXR1cm4oMCx0LmRlZmF1bHQpKGkpLGEuZnVsbFdpZHRoLnRlc3QoaSkmJnMuaGFsZldpZHRoLnRlc3QoaSl9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KSh0Zix0Zi5leHBvcnRzKTt2YXIgbVA9dGYuZXhwb3J0cyxyZj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1yO3ZhciB0PWEoaWUpO2Z1bmN0aW9uIGEobyl7cmV0dXJuIG8mJm8uX19lc01vZHVsZT9vOntkZWZhdWx0Om99fXZhciBzPS9bXlx4MDAtXHg3Rl0vO2Z1bmN0aW9uIHIobyl7cmV0dXJuKDAsdC5kZWZhdWx0KShvKSxzLnRlc3Qobyl9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShyZixyZi5leHBvcnRzKTt2YXIgUFA9cmYuZXhwb3J0cyxuZj17ZXhwb3J0czp7fX0sb2Y9e2V4cG9ydHM6e319OyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9dDtmdW5jdGlvbiB0KGEscyl7dmFyIHI9YS5qb2luKCIiKTtyZXR1cm4gbmV3IFJlZ0V4cChyLHMpfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkob2Ysb2YuZXhwb3J0cyk7dmFyIHdQPW9mLmV4cG9ydHM7KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1vO3ZhciB0PXMoaWUpLGE9cyh3UCk7ZnVuY3Rpb24gcyhpKXtyZXR1cm4gaSYmaS5fX2VzTW9kdWxlP2k6e2RlZmF1bHQ6aX19dmFyIHI9KDAsYS5kZWZhdWx0KShbIl4oMHxbMS05XVxcZCopXFwuKDB8WzEtOV1cXGQqKVxcLigwfFsxLTldXFxkKikiLCIoPzotKCg/OjB8WzEtOV1cXGQqfFxcZCpbYS16LV1bMC05YS16LV0qKSg/OlxcLig/OjB8WzEtOV1cXGQqfFxcZCpbYS16LV1bMC05YS16LV0qKSkqKSkiLCI/KD86XFwrKFswLTlhLXotXSsoPzpcXC5bMC05YS16LV0rKSopKT8kIl0sImkiKTtmdW5jdGlvbiBvKGkpe3JldHVybigwLHQuZGVmYXVsdCkoaSksci50ZXN0KGkpfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkobmYsbmYuZXhwb3J0cyk7dmFyIHZQPW5mLmV4cG9ydHMsc2Y9e2V4cG9ydHM6e319OyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9cjt2YXIgdD1hKGllKTtmdW5jdGlvbiBhKG8pe3JldHVybiBvJiZvLl9fZXNNb2R1bGU/bzp7ZGVmYXVsdDpvfX12YXIgcz0vW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdLztmdW5jdGlvbiByKG8pe3JldHVybigwLHQuZGVmYXVsdCkobykscy50ZXN0KG8pfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkoc2Ysc2YuZXhwb3J0cyk7dmFyIENQPXNmLmV4cG9ydHMsYWY9e2V4cG9ydHM6e319OyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9ZDt2YXIgdD1vKHF0KSxhPW8oaWUpLHM9byhaYSkscj1jdDtmdW5jdGlvbiBvKHApe3JldHVybiBwJiZwLl9fZXNNb2R1bGU/cDp7ZGVmYXVsdDpwfX1mdW5jdGlvbiBpKHApe3ZhciBiPW5ldyBSZWdFeHAoIl5bLStdPyhbMC05XSspPyhcXCIuY29uY2F0KHIuZGVjaW1hbFtwLmxvY2FsZV0sIlswLTldeyIpLmNvbmNhdChwLmRlY2ltYWxfZGlnaXRzLCJ9KSIpLmNvbmNhdChwLmZvcmNlX2RlY2ltYWw/IiI6Ij8iLCIkIikpO3JldHVybiBifXZhciBjPXtmb3JjZV9kZWNpbWFsOiExLGRlY2ltYWxfZGlnaXRzOiIxLCIsbG9jYWxlOiJlbi1VUyJ9LGY9WyIiLCItIiwiKyJdO2Z1bmN0aW9uIGQocCxiKXtpZigoMCxhLmRlZmF1bHQpKHApLGI9KDAsdC5kZWZhdWx0KShiLGMpLGIubG9jYWxlIGluIHIuZGVjaW1hbClyZXR1cm4hKDAscy5kZWZhdWx0KShmLHAucmVwbGFjZSgvIC9nLCIiKSkmJmkoYikudGVzdChwKTt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbG9jYWxlICciLmNvbmNhdChiLmxvY2FsZSwiJyIpKX1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKGFmLGFmLmV4cG9ydHMpO3ZhciBFUD1hZi5leHBvcnRzLGNmPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PXI7dmFyIHQ9YShpZSk7ZnVuY3Rpb24gYShvKXtyZXR1cm4gbyYmby5fX2VzTW9kdWxlP286e2RlZmF1bHQ6b319dmFyIHM9L14oMHh8MGgpP1swLTlBLUZdKyQvaTtmdW5jdGlvbiByKG8pe3JldHVybigwLHQuZGVmYXVsdCkobykscy50ZXN0KG8pfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkoY2YsY2YuZXhwb3J0cyk7dmFyIHh5PWNmLmV4cG9ydHMsdWY9e2V4cG9ydHM6e319OyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9cjt2YXIgdD1hKGllKTtmdW5jdGlvbiBhKG8pe3JldHVybiBvJiZvLl9fZXNNb2R1bGU/bzp7ZGVmYXVsdDpvfX12YXIgcz0vXigwbyk/WzAtN10rJC9pO2Z1bmN0aW9uIHIobyl7cmV0dXJuKDAsdC5kZWZhdWx0KShvKSxzLnRlc3Qobyl9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KSh1Zix1Zi5leHBvcnRzKTt2YXIgV1A9dWYuZXhwb3J0cyxsZj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1yO3ZhciB0PXMoaWUpLGE9cyhmeSk7ZnVuY3Rpb24gcyhvKXtyZXR1cm4gbyYmby5fX2VzTW9kdWxlP286e2RlZmF1bHQ6b319ZnVuY3Rpb24gcihvLGkpe3JldHVybigwLHQuZGVmYXVsdCkobyksKDAsYS5kZWZhdWx0KShvKSVwYXJzZUludChpLDEwKT09PTB9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShsZixsZi5leHBvcnRzKTt2YXIgQlA9bGYuZXhwb3J0cyxmZj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1yO3ZhciB0PWEoaWUpO2Z1bmN0aW9uIGEobyl7cmV0dXJuIG8mJm8uX19lc01vZHVsZT9vOntkZWZhdWx0Om99fXZhciBzPS9eIz8oWzAtOUEtRl17M318WzAtOUEtRl17NH18WzAtOUEtRl17Nn18WzAtOUEtRl17OH0pJC9pO2Z1bmN0aW9uIHIobyl7cmV0dXJuKDAsdC5kZWZhdWx0KShvKSxzLnRlc3Qobyl9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShmZixmZi5leHBvcnRzKTt2YXIgSVA9ZmYuZXhwb3J0cyxkZj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1kO3ZhciB0PWEoaWUpO2Z1bmN0aW9uIGEocCl7cmV0dXJuIHAmJnAuX19lc01vZHVsZT9wOntkZWZhdWx0OnB9fWZ1bmN0aW9uIHMocCl7IkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mIjtyZXR1cm4gcz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT0ic3ltYm9sIj9mdW5jdGlvbihiKXtyZXR1cm4gdHlwZW9mIGJ9OmZ1bmN0aW9uKGIpe3JldHVybiBiJiZ0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZiLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZiIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgYn0scyhwKX12YXIgcj0vXnJnYlwoKChbMC05XXxbMS05XVswLTldfDFbMC05XVswLTldfDJbMC00XVswLTldfDI1WzAtNV0pLCl7Mn0oWzAtOV18WzEtOV1bMC05XXwxWzAtOV1bMC05XXwyWzAtNF1bMC05XXwyNVswLTVdKVwpJC8sbz0vXnJnYmFcKCgoWzAtOV18WzEtOV1bMC05XXwxWzAtOV1bMC05XXwyWzAtNF1bMC05XXwyNVswLTVdKSwpezN9KDA/XC5cZFxkP3wxKFwuMCk/fDAoXC4wKT8pXCkkLyxpPS9ecmdiXCgoKFswLTldJXxbMS05XVswLTldJXwxMDAlKSwpezJ9KFswLTldJXxbMS05XVswLTldJXwxMDAlKVwpJC8sYz0vXnJnYmFcKCgoWzAtOV0lfFsxLTldWzAtOV0lfDEwMCUpLCl7M30oMD9cLlxkXGQ/fDEoXC4wKT98MChcLjApPylcKSQvLGY9L15yZ2JhPy87ZnVuY3Rpb24gZChwLGIpeygwLHQuZGVmYXVsdCkocCk7dmFyIFQ9ITEsVz0hMDtpZihzKGIpIT09Im9iamVjdCI/YXJndW1lbnRzLmxlbmd0aD49MiYmKFc9YXJndW1lbnRzWzFdKTooVD1iLmFsbG93U3BhY2VzIT09dm9pZCAwP2IuYWxsb3dTcGFjZXM6VCxXPWIuaW5jbHVkZVBlcmNlbnRWYWx1ZXMhPT12b2lkIDA/Yi5pbmNsdWRlUGVyY2VudFZhbHVlczpXKSxUKXtpZighZi50ZXN0KHApKXJldHVybiExO3A9cC5yZXBsYWNlKC9ccy9nLCIiKX1yZXR1cm4gVz9yLnRlc3QocCl8fG8udGVzdChwKXx8aS50ZXN0KHApfHxjLnRlc3QocCk6ci50ZXN0KHApfHxvLnRlc3QocCl9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShkZixkZi5leHBvcnRzKTt2YXIgU1A9ZGYuZXhwb3J0cyxwZj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1vO3ZhciB0PWEoaWUpO2Z1bmN0aW9uIGEoaSl7cmV0dXJuIGkmJmkuX19lc01vZHVsZT9pOntkZWZhdWx0Oml9fXZhciBzPS9eaHNsYT9cKCgoXCt8XC0pPyhbMC05XSsoXC5bMC05XSspPyhlKFwrfFwtKT9bMC05XSspP3xcLlswLTldKyhlKFwrfFwtKT9bMC05XSspPykpKGRlZ3xncmFkfHJhZHx0dXJuKT8oLChcK3xcLSk/KFswLTldKyhcLlswLTldKyk/KGUoXCt8XC0pP1swLTldKyk/fFwuWzAtOV0rKGUoXCt8XC0pP1swLTldKyk/KSUpezJ9KCwoKFwrfFwtKT8oWzAtOV0rKFwuWzAtOV0rKT8oZShcK3xcLSk/WzAtOV0rKT98XC5bMC05XSsoZShcK3xcLSk/WzAtOV0rKT8pJT8pKT9cKSQvaSxyPS9eaHNsYT9cKCgoXCt8XC0pPyhbMC05XSsoXC5bMC05XSspPyhlKFwrfFwtKT9bMC05XSspP3xcLlswLTldKyhlKFwrfFwtKT9bMC05XSspPykpKGRlZ3xncmFkfHJhZHx0dXJuKT8oXHMoXCt8XC0pPyhbMC05XSsoXC5bMC05XSspPyhlKFwrfFwtKT9bMC05XSspP3xcLlswLTldKyhlKFwrfFwtKT9bMC05XSspPyklKXsyfVxzPyhcL1xzKChcK3xcLSk/KFswLTldKyhcLlswLTldKyk/KGUoXCt8XC0pP1swLTldKyk/fFwuWzAtOV0rKGUoXCt8XC0pP1swLTldKyk/KSU/KVxzPyk/XCkkL2k7ZnVuY3Rpb24gbyhpKXsoMCx0LmRlZmF1bHQpKGkpO3ZhciBjPWkucmVwbGFjZSgvXHMrL2csIiAiKS5yZXBsYWNlKC9ccz8oaHNsYT9cKHxcKXwsKVxzPy9pZywiJDEiKTtyZXR1cm4gYy5pbmRleE9mKCIsIikhPT0tMT9zLnRlc3QoYyk6ci50ZXN0KGMpfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkocGYscGYuZXhwb3J0cyk7dmFyIF9QPXBmLmV4cG9ydHMsaGY9e2V4cG9ydHM6e319OyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9cjt2YXIgdD1hKGllKTtmdW5jdGlvbiBhKG8pe3JldHVybiBvJiZvLl9fZXNNb2R1bGU/bzp7ZGVmYXVsdDpvfX12YXIgcz0vXltBLVpdezJ9WzAtOUEtWl17M31cZHsyfVxkezV9JC87ZnVuY3Rpb24gcihvKXtyZXR1cm4oMCx0LmRlZmF1bHQpKG8pLHMudGVzdChvKX1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKGhmLGhmLmV4cG9ydHMpO3ZhciBPUD1oZi5leHBvcnRzLFhhPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYYSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7WGEuZGVmYXVsdD1rUDtYYS5sb2NhbGVzPXZvaWQgMDt2YXIgUlA9VHkoaWUpLEtwPVR5KFphKTtmdW5jdGlvbiBUeShuKXtyZXR1cm4gbiYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn19dmFyIGRjPXtBRDovXihBRFswLTldezJ9KVxkezh9W0EtWjAtOV17MTJ9JC8sQUU6L14oQUVbMC05XXsyfSlcZHszfVxkezE2fSQvLEFMOi9eKEFMWzAtOV17Mn0pXGR7OH1bQS1aMC05XXsxNn0kLyxBVDovXihBVFswLTldezJ9KVxkezE2fSQvLEFaOi9eKEFaWzAtOV17Mn0pW0EtWjAtOV17NH1cZHsyMH0kLyxCQTovXihCQVswLTldezJ9KVxkezE2fSQvLEJFOi9eKEJFWzAtOV17Mn0pXGR7MTJ9JC8sQkc6L14oQkdbMC05XXsyfSlbQS1aXXs0fVxkezZ9W0EtWjAtOV17OH0kLyxCSDovXihCSFswLTldezJ9KVtBLVpdezR9W0EtWjAtOV17MTR9JC8sQlI6L14oQlJbMC05XXsyfSlcZHsyM31bQS1aXXsxfVtBLVowLTldezF9JC8sQlk6L14oQllbMC05XXsyfSlbQS1aMC05XXs0fVxkezIwfSQvLENIOi9eKENIWzAtOV17Mn0pXGR7NX1bQS1aMC05XXsxMn0kLyxDUjovXihDUlswLTldezJ9KVxkezE4fSQvLENZOi9eKENZWzAtOV17Mn0pXGR7OH1bQS1aMC05XXsxNn0kLyxDWjovXihDWlswLTldezJ9KVxkezIwfSQvLERFOi9eKERFWzAtOV17Mn0pXGR7MTh9JC8sREs6L14oREtbMC05XXsyfSlcZHsxNH0kLyxETzovXihET1swLTldezJ9KVtBLVpdezR9XGR7MjB9JC8sRFo6L14oRFpcZHsyNH0pJC8sRUU6L14oRUVbMC05XXsyfSlcZHsxNn0kLyxFRzovXihFR1swLTldezJ9KVxkezI1fSQvLEVTOi9eKEVTWzAtOV17Mn0pXGR7MjB9JC8sRkk6L14oRklbMC05XXsyfSlcZHsxNH0kLyxGTzovXihGT1swLTldezJ9KVxkezE0fSQvLEZSOi9eKEZSWzAtOV17Mn0pXGR7MTB9W0EtWjAtOV17MTF9XGR7Mn0kLyxHQjovXihHQlswLTldezJ9KVtBLVpdezR9XGR7MTR9JC8sR0U6L14oR0VbMC05XXsyfSlbQS1aMC05XXsyfVxkezE2fSQvLEdJOi9eKEdJWzAtOV17Mn0pW0EtWl17NH1bQS1aMC05XXsxNX0kLyxHTDovXihHTFswLTldezJ9KVxkezE0fSQvLEdSOi9eKEdSWzAtOV17Mn0pXGR7N31bQS1aMC05XXsxNn0kLyxHVDovXihHVFswLTldezJ9KVtBLVowLTldezR9W0EtWjAtOV17MjB9JC8sSFI6L14oSFJbMC05XXsyfSlcZHsxN30kLyxIVTovXihIVVswLTldezJ9KVxkezI0fSQvLElFOi9eKElFWzAtOV17Mn0pW0EtWl17NH1cZHsxNH0kLyxJTDovXihJTFswLTldezJ9KVxkezE5fSQvLElROi9eKElRWzAtOV17Mn0pW0EtWl17NH1cZHsxNX0kLyxJUjovXihJUlswLTldezJ9KTBcZHsyfTBcZHsxOH0kLyxJUzovXihJU1swLTldezJ9KVxkezIyfSQvLElUOi9eKElUWzAtOV17Mn0pW0EtWl17MX1cZHsxMH1bQS1aMC05XXsxMn0kLyxKTzovXihKT1swLTldezJ9KVtBLVpdezR9XGR7MjJ9JC8sS1c6L14oS1dbMC05XXsyfSlbQS1aXXs0fVtBLVowLTldezIyfSQvLEtaOi9eKEtaWzAtOV17Mn0pXGR7M31bQS1aMC05XXsxM30kLyxMQjovXihMQlswLTldezJ9KVxkezR9W0EtWjAtOV17MjB9JC8sTEM6L14oTENbMC05XXsyfSlbQS1aXXs0fVtBLVowLTldezI0fSQvLExJOi9eKExJWzAtOV17Mn0pXGR7NX1bQS1aMC05XXsxMn0kLyxMVDovXihMVFswLTldezJ9KVxkezE2fSQvLExVOi9eKExVWzAtOV17Mn0pXGR7M31bQS1aMC05XXsxM30kLyxMVjovXihMVlswLTldezJ9KVtBLVpdezR9W0EtWjAtOV17MTN9JC8sTUE6L14oTUFbMC05XXsyNn0pJC8sTUM6L14oTUNbMC05XXsyfSlcZHsxMH1bQS1aMC05XXsxMX1cZHsyfSQvLE1EOi9eKE1EWzAtOV17Mn0pW0EtWjAtOV17MjB9JC8sTUU6L14oTUVbMC05XXsyfSlcZHsxOH0kLyxNSzovXihNS1swLTldezJ9KVxkezN9W0EtWjAtOV17MTB9XGR7Mn0kLyxNUjovXihNUlswLTldezJ9KVxkezIzfSQvLE1UOi9eKE1UWzAtOV17Mn0pW0EtWl17NH1cZHs1fVtBLVowLTldezE4fSQvLE1VOi9eKE1VWzAtOV17Mn0pW0EtWl17NH1cZHsxOX1bQS1aXXszfSQvLE1aOi9eKE1aWzAtOV17Mn0pXGR7MjF9JC8sTkw6L14oTkxbMC05XXsyfSlbQS1aXXs0fVxkezEwfSQvLE5POi9eKE5PWzAtOV17Mn0pXGR7MTF9JC8sUEs6L14oUEtbMC05XXsyfSlbQS1aMC05XXs0fVxkezE2fSQvLFBMOi9eKFBMWzAtOV17Mn0pXGR7MjR9JC8sUFM6L14oUFNbMC05XXsyfSlbQS1aXXs0fVtBLVowLTldezIxfSQvLFBUOi9eKFBUWzAtOV17Mn0pXGR7MjF9JC8sUUE6L14oUUFbMC05XXsyfSlbQS1aXXs0fVtBLVowLTldezIxfSQvLFJPOi9eKFJPWzAtOV17Mn0pW0EtWl17NH1bQS1aMC05XXsxNn0kLyxSUzovXihSU1swLTldezJ9KVxkezE4fSQvLFNBOi9eKFNBWzAtOV17Mn0pXGR7Mn1bQS1aMC05XXsxOH0kLyxTQzovXihTQ1swLTldezJ9KVtBLVpdezR9XGR7MjB9W0EtWl17M30kLyxTRTovXihTRVswLTldezJ9KVxkezIwfSQvLFNJOi9eKFNJWzAtOV17Mn0pXGR7MTV9JC8sU0s6L14oU0tbMC05XXsyfSlcZHsyMH0kLyxTTTovXihTTVswLTldezJ9KVtBLVpdezF9XGR7MTB9W0EtWjAtOV17MTJ9JC8sU1Y6L14oU1ZbMC05XXsyfSlbQS1aMC05XXs0fVxkezIwfSQvLFRMOi9eKFRMWzAtOV17Mn0pXGR7MTl9JC8sVE46L14oVE5bMC05XXsyfSlcZHsyMH0kLyxUUjovXihUUlswLTldezJ9KVxkezV9W0EtWjAtOV17MTd9JC8sVUE6L14oVUFbMC05XXsyfSlcZHs2fVtBLVowLTldezE5fSQvLFZBOi9eKFZBWzAtOV17Mn0pXGR7MTh9JC8sVkc6L14oVkdbMC05XXsyfSlbQS1aXXs0fVxkezE2fSQvLFhLOi9eKFhLWzAtOV17Mn0pXGR7MTZ9JC99O2Z1bmN0aW9uIE1QKG4pe3ZhciBlPW4uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEodCBpbiBkYyl9KTtyZXR1cm4hKGUubGVuZ3RoPjApfWZ1bmN0aW9uIEZQKG4sZSl7dmFyIHQ9bi5yZXBsYWNlKC9bXHNcLV0rL2dpLCIiKS50b1VwcGVyQ2FzZSgpLGE9dC5zbGljZSgwLDIpLnRvVXBwZXJDYXNlKCkscz1hIGluIGRjO2lmKGUud2hpdGVsaXN0KXtpZighTVAoZS53aGl0ZWxpc3QpKXJldHVybiExO3ZhciByPSgwLEtwLmRlZmF1bHQpKGUud2hpdGVsaXN0LGEpO2lmKCFyKXJldHVybiExfWlmKGUuYmxhY2tsaXN0KXt2YXIgbz0oMCxLcC5kZWZhdWx0KShlLmJsYWNrbGlzdCxhKTtpZihvKXJldHVybiExfXJldHVybiBzJiZkY1thXS50ZXN0KHQpfWZ1bmN0aW9uIE5QKG4pe3ZhciBlPW4ucmVwbGFjZSgvW15BLVowLTldKy9naSwiIikudG9VcHBlckNhc2UoKSx0PWUuc2xpY2UoNCkrZS5zbGljZSgwLDQpLGE9dC5yZXBsYWNlKC9bQS1aXS9nLGZ1bmN0aW9uKHIpe3JldHVybiByLmNoYXJDb2RlQXQoMCktNTV9KSxzPWEubWF0Y2goL1xkezEsN30vZykucmVkdWNlKGZ1bmN0aW9uKHIsbyl7cmV0dXJuIE51bWJlcihyK28pJTk3fSwiIik7cmV0dXJuIHM9PT0xfWZ1bmN0aW9uIGtQKG4pe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fTtyZXR1cm4oMCxSUC5kZWZhdWx0KShuKSxGUChuLGUpJiZOUChuKX1YYS5sb2NhbGVzPU9iamVjdC5rZXlzKGRjKTt2YXIgZ2Y9e2V4cG9ydHM6e319LGVhPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShlYSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7ZWEuQ291bnRyeUNvZGVzPXZvaWQgMDtlYS5kZWZhdWx0PSRQO3ZhciBVUD1EUChpZSk7ZnVuY3Rpb24gRFAobil7cmV0dXJuIG4mJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59fXZhciBBeT1uZXcgU2V0KFsiQUQiLCJBRSIsIkFGIiwiQUciLCJBSSIsIkFMIiwiQU0iLCJBTyIsIkFRIiwiQVIiLCJBUyIsIkFUIiwiQVUiLCJBVyIsIkFYIiwiQVoiLCJCQSIsIkJCIiwiQkQiLCJCRSIsIkJGIiwiQkciLCJCSCIsIkJJIiwiQkoiLCJCTCIsIkJNIiwiQk4iLCJCTyIsIkJRIiwiQlIiLCJCUyIsIkJUIiwiQlYiLCJCVyIsIkJZIiwiQloiLCJDQSIsIkNDIiwiQ0QiLCJDRiIsIkNHIiwiQ0giLCJDSSIsIkNLIiwiQ0wiLCJDTSIsIkNOIiwiQ08iLCJDUiIsIkNVIiwiQ1YiLCJDVyIsIkNYIiwiQ1kiLCJDWiIsIkRFIiwiREoiLCJESyIsIkRNIiwiRE8iLCJEWiIsIkVDIiwiRUUiLCJFRyIsIkVIIiwiRVIiLCJFUyIsIkVUIiwiRkkiLCJGSiIsIkZLIiwiRk0iLCJGTyIsIkZSIiwiR0EiLCJHQiIsIkdEIiwiR0UiLCJHRiIsIkdHIiwiR0giLCJHSSIsIkdMIiwiR00iLCJHTiIsIkdQIiwiR1EiLCJHUiIsIkdTIiwiR1QiLCJHVSIsIkdXIiwiR1kiLCJISyIsIkhNIiwiSE4iLCJIUiIsIkhUIiwiSFUiLCJJRCIsIklFIiwiSUwiLCJJTSIsIklOIiwiSU8iLCJJUSIsIklSIiwiSVMiLCJJVCIsIkpFIiwiSk0iLCJKTyIsIkpQIiwiS0UiLCJLRyIsIktIIiwiS0kiLCJLTSIsIktOIiwiS1AiLCJLUiIsIktXIiwiS1kiLCJLWiIsIkxBIiwiTEIiLCJMQyIsIkxJIiwiTEsiLCJMUiIsIkxTIiwiTFQiLCJMVSIsIkxWIiwiTFkiLCJNQSIsIk1DIiwiTUQiLCJNRSIsIk1GIiwiTUciLCJNSCIsIk1LIiwiTUwiLCJNTSIsIk1OIiwiTU8iLCJNUCIsIk1RIiwiTVIiLCJNUyIsIk1UIiwiTVUiLCJNViIsIk1XIiwiTVgiLCJNWSIsIk1aIiwiTkEiLCJOQyIsIk5FIiwiTkYiLCJORyIsIk5JIiwiTkwiLCJOTyIsIk5QIiwiTlIiLCJOVSIsIk5aIiwiT00iLCJQQSIsIlBFIiwiUEYiLCJQRyIsIlBIIiwiUEsiLCJQTCIsIlBNIiwiUE4iLCJQUiIsIlBTIiwiUFQiLCJQVyIsIlBZIiwiUUEiLCJSRSIsIlJPIiwiUlMiLCJSVSIsIlJXIiwiU0EiLCJTQiIsIlNDIiwiU0QiLCJTRSIsIlNHIiwiU0giLCJTSSIsIlNKIiwiU0siLCJTTCIsIlNNIiwiU04iLCJTTyIsIlNSIiwiU1MiLCJTVCIsIlNWIiwiU1giLCJTWSIsIlNaIiwiVEMiLCJURCIsIlRGIiwiVEciLCJUSCIsIlRKIiwiVEsiLCJUTCIsIlRNIiwiVE4iLCJUTyIsIlRSIiwiVFQiLCJUViIsIlRXIiwiVFoiLCJVQSIsIlVHIiwiVU0iLCJVUyIsIlVZIiwiVVoiLCJWQSIsIlZDIiwiVkUiLCJWRyIsIlZJIiwiVk4iLCJWVSIsIldGIiwiV1MiLCJZRSIsIllUIiwiWkEiLCJaTSIsIlpXIl0pO2Z1bmN0aW9uICRQKG4pe3JldHVybigwLFVQLmRlZmF1bHQpKG4pLEF5LmhhcyhuLnRvVXBwZXJDYXNlKCkpfWVhLkNvdW50cnlDb2Rlcz1BeTsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PW87dmFyIHQ9cyhpZSksYT1lYTtmdW5jdGlvbiBzKGkpe3JldHVybiBpJiZpLl9fZXNNb2R1bGU/aTp7ZGVmYXVsdDppfX12YXIgcj0vXltBLVphLXpdezZ9W0EtWmEtejAtOV17Mn0oW0EtWmEtejAtOV17M30pPyQvO2Z1bmN0aW9uIG8oaSl7KDAsdC5kZWZhdWx0KShpKTt2YXIgYz1pLnNsaWNlKDQsNikudG9VcHBlckNhc2UoKTtyZXR1cm4hYS5Db3VudHJ5Q29kZXMuaGFzKGMpJiZjIT09IlhLIj8hMTpyLnRlc3QoaSl9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShnZixnZi5leHBvcnRzKTt2YXIgTFA9Z2YuZXhwb3J0cyxiZj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1yO3ZhciB0PWEoaWUpO2Z1bmN0aW9uIGEobyl7cmV0dXJuIG8mJm8uX19lc01vZHVsZT9vOntkZWZhdWx0Om99fXZhciBzPS9eW2EtZjAtOV17MzJ9JC87ZnVuY3Rpb24gcihvKXtyZXR1cm4oMCx0LmRlZmF1bHQpKG8pLHMudGVzdChvKX1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKGJmLGJmLmV4cG9ydHMpO3ZhciB6UD1iZi5leHBvcnRzLHlmPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PXI7dmFyIHQ9YShpZSk7ZnVuY3Rpb24gYShvKXtyZXR1cm4gbyYmby5fX2VzTW9kdWxlP286e2RlZmF1bHQ6b319dmFyIHM9e21kNTozMixtZDQ6MzIsc2hhMTo0MCxzaGEyNTY6NjQsc2hhMzg0Ojk2LHNoYTUxMjoxMjgscmlwZW1kMTI4OjMyLHJpcGVtZDE2MDo0MCx0aWdlcjEyODozMix0aWdlcjE2MDo0MCx0aWdlcjE5Mjo0OCxjcmMzMjo4LGNyYzMyYjo4fTtmdW5jdGlvbiByKG8saSl7KDAsdC5kZWZhdWx0KShvKTt2YXIgYz1uZXcgUmVnRXhwKCJeW2EtZkEtRjAtOV17Ii5jb25jYXQoc1tpXSwifSQiKSk7cmV0dXJuIGMudGVzdChvKX1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKHlmLHlmLmV4cG9ydHMpO3ZhciBqUD15Zi5leHBvcnRzLHhmPXtleHBvcnRzOnt9fSxUZj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1mO3ZhciB0PXMoaWUpLGE9cyhxdCk7ZnVuY3Rpb24gcyhkKXtyZXR1cm4gZCYmZC5fX2VzTW9kdWxlP2Q6e2RlZmF1bHQ6ZH19dmFyIHI9L15bQS1aYS16MC05Ky9dKz17MCwyfSQvLG89L15bQS1aYS16MC05Ky9dKyQvLGk9L15bQS1aYS16MC05Xy1dKz17MCwyfSQvLGM9L15bQS1aYS16MC05Xy1dKyQvO2Z1bmN0aW9uIGYoZCxwKXt2YXIgYjtpZigoMCx0LmRlZmF1bHQpKGQpLHA9KDAsYS5kZWZhdWx0KShwLHt1cmxTYWZlOiExLHBhZGRpbmc6ISgoYj1wKSE9PW51bGwmJmIhPT12b2lkIDAmJmIudXJsU2FmZSl9KSxkPT09IiIpcmV0dXJuITA7aWYocC5wYWRkaW5nJiZkLmxlbmd0aCU0IT09MClyZXR1cm4hMTt2YXIgVDtyZXR1cm4gcC51cmxTYWZlP1Q9cC5wYWRkaW5nP2k6YzpUPXAucGFkZGluZz9yOm8sKCFwLnBhZGRpbmd8fGQubGVuZ3RoJTQ9PT0wKSYmVC50ZXN0KGQpfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkoVGYsVGYuZXhwb3J0cyk7dmFyIG15PVRmLmV4cG9ydHM7KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1yO3ZhciB0PXMoaWUpLGE9cyhteSk7ZnVuY3Rpb24gcyhvKXtyZXR1cm4gbyYmby5fX2VzTW9kdWxlP286e2RlZmF1bHQ6b319ZnVuY3Rpb24gcihvKXsoMCx0LmRlZmF1bHQpKG8pO3ZhciBpPW8uc3BsaXQoIi4iKSxjPWkubGVuZ3RoO3JldHVybiBjIT09Mz8hMTppLnJlZHVjZShmdW5jdGlvbihmLGQpe3JldHVybiBmJiYoMCxhLmRlZmF1bHQpKGQse3VybFNhZmU6ITB9KX0sITApfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkoeGYseGYuZXhwb3J0cyk7dmFyIFZQPXhmLmV4cG9ydHMsQWY9e2V4cG9ydHM6e319OyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9Yzt2YXIgdD1yKGllKSxhPXIoWmEpLHM9cihxdCk7ZnVuY3Rpb24gcihmKXtyZXR1cm4gZiYmZi5fX2VzTW9kdWxlP2Y6e2RlZmF1bHQ6Zn19ZnVuY3Rpb24gbyhmKXsiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2YiO3JldHVybiBvPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnR5cGVvZiBTeW1ib2wuaXRlcmF0b3I9PSJzeW1ib2wiP2Z1bmN0aW9uKGQpe3JldHVybiB0eXBlb2YgZH06ZnVuY3Rpb24oZCl7cmV0dXJuIGQmJnR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJmQuY29uc3RydWN0b3I9PT1TeW1ib2wmJmQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBkfSxvKGYpfXZhciBpPXthbGxvd19wcmltaXRpdmVzOiExfTtmdW5jdGlvbiBjKGYsZCl7KDAsdC5kZWZhdWx0KShmKTt0cnl7ZD0oMCxzLmRlZmF1bHQpKGQsaSk7dmFyIHA9W107ZC5hbGxvd19wcmltaXRpdmVzJiYocD1bbnVsbCwhMSwhMF0pO3ZhciBiPUpTT04ucGFyc2UoZik7cmV0dXJuKDAsYS5kZWZhdWx0KShwLGIpfHwhIWImJm8oYik9PT0ib2JqZWN0In1jYXRjaHt9cmV0dXJuITF9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShBZixBZi5leHBvcnRzKTt2YXIgR1A9QWYuZXhwb3J0cyxtZj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1vO3ZhciB0PXMoaWUpLGE9cyhxdCk7ZnVuY3Rpb24gcyhpKXtyZXR1cm4gaSYmaS5fX2VzTW9kdWxlP2k6e2RlZmF1bHQ6aX19dmFyIHI9e2lnbm9yZV93aGl0ZXNwYWNlOiExfTtmdW5jdGlvbiBvKGksYyl7cmV0dXJuKDAsdC5kZWZhdWx0KShpKSxjPSgwLGEuZGVmYXVsdCkoYyxyKSwoYy5pZ25vcmVfd2hpdGVzcGFjZT9pLnRyaW0oKS5sZW5ndGg6aS5sZW5ndGgpPT09MH1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKG1mLG1mLmV4cG9ydHMpO3ZhciBIUD1tZi5leHBvcnRzLFBmPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PXI7dmFyIHQ9YShpZSk7ZnVuY3Rpb24gYShvKXtyZXR1cm4gbyYmby5fX2VzTW9kdWxlP286e2RlZmF1bHQ6b319ZnVuY3Rpb24gcyhvKXsiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2YiO3JldHVybiBzPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnR5cGVvZiBTeW1ib2wuaXRlcmF0b3I9PSJzeW1ib2wiP2Z1bmN0aW9uKGkpe3JldHVybiB0eXBlb2YgaX06ZnVuY3Rpb24oaSl7cmV0dXJuIGkmJnR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJmkuY29uc3RydWN0b3I9PT1TeW1ib2wmJmkhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBpfSxzKG8pfWZ1bmN0aW9uIHIobyxpKXsoMCx0LmRlZmF1bHQpKG8pO3ZhciBjLGY7cyhpKT09PSJvYmplY3QiPyhjPWkubWlufHwwLGY9aS5tYXgpOihjPWFyZ3VtZW50c1sxXXx8MCxmPWFyZ3VtZW50c1syXSk7dmFyIGQ9by5tYXRjaCgvW15cdUZFMEZcdUZFMEVdW1x1RkUwRlx1RkUwRV0vZyl8fFtdLHA9by5tYXRjaCgvW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2cpfHxbXSxiPW8ubGVuZ3RoLWQubGVuZ3RoLXAubGVuZ3RoLFQ9Yj49YyYmKHR5cGVvZiBmPiJ1Inx8Yjw9Zik7cmV0dXJuIFQmJkFycmF5LmlzQXJyYXkoaT8uZGlzY3JldGVMZW5ndGhzKT9pLmRpc2NyZXRlTGVuZ3Rocy5zb21lKGZ1bmN0aW9uKFcpe3JldHVybiBXPT09Yn0pOlR9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShQZixQZi5leHBvcnRzKTt2YXIgS1A9UGYuZXhwb3J0cyx3Zj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1zO3ZhciB0PWEoaWUpO2Z1bmN0aW9uIGEocil7cmV0dXJuIHImJnIuX19lc01vZHVsZT9yOntkZWZhdWx0OnJ9fWZ1bmN0aW9uIHMocil7cmV0dXJuKDAsdC5kZWZhdWx0KShyKSwvXlswLTddWzAtOUEtSEpLTU5QLVRWLVpdezI1fSQvaS50ZXN0KHIpfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkod2Ysd2YuZXhwb3J0cyk7dmFyIFpQPXdmLmV4cG9ydHMsdmY9e2V4cG9ydHM6e319OyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9cjt2YXIgdD1hKGllKTtmdW5jdGlvbiBhKG8pe3JldHVybiBvJiZvLl9fZXNNb2R1bGU/bzp7ZGVmYXVsdDpvfX12YXIgcz17MTovXlswLTlBLUZdezh9LVswLTlBLUZdezR9LTFbMC05QS1GXXszfS1bODlBQl1bMC05QS1GXXszfS1bMC05QS1GXXsxMn0kL2ksMjovXlswLTlBLUZdezh9LVswLTlBLUZdezR9LTJbMC05QS1GXXszfS1bODlBQl1bMC05QS1GXXszfS1bMC05QS1GXXsxMn0kL2ksMzovXlswLTlBLUZdezh9LVswLTlBLUZdezR9LTNbMC05QS1GXXszfS1bODlBQl1bMC05QS1GXXszfS1bMC05QS1GXXsxMn0kL2ksNDovXlswLTlBLUZdezh9LVswLTlBLUZdezR9LTRbMC05QS1GXXszfS1bODlBQl1bMC05QS1GXXszfS1bMC05QS1GXXsxMn0kL2ksNTovXlswLTlBLUZdezh9LVswLTlBLUZdezR9LTVbMC05QS1GXXszfS1bODlBQl1bMC05QS1GXXszfS1bMC05QS1GXXsxMn0kL2ksNjovXlswLTlBLUZdezh9LVswLTlBLUZdezR9LTZbMC05QS1GXXszfS1bODlBQl1bMC05QS1GXXszfS1bMC05QS1GXXsxMn0kL2ksNzovXlswLTlBLUZdezh9LVswLTlBLUZdezR9LTdbMC05QS1GXXszfS1bODlBQl1bMC05QS1GXXszfS1bMC05QS1GXXsxMn0kL2ksODovXlswLTlBLUZdezh9LVswLTlBLUZdezR9LThbMC05QS1GXXszfS1bODlBQl1bMC05QS1GXXszfS1bMC05QS1GXXsxMn0kL2ksbmlsOi9eMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJC9pLG1heDovXmZmZmZmZmZmLWZmZmYtZmZmZi1mZmZmLWZmZmZmZmZmZmZmZiQvaSxsb29zZTovXlswLTlBLUZdezh9LVswLTlBLUZdezR9LVswLTlBLUZdezR9LVswLTlBLUZdezR9LVswLTlBLUZdezEyfSQvaSxhbGw6L14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS04XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDB8ZmZmZmZmZmYtZmZmZi1mZmZmLWZmZmYtZmZmZmZmZmZmZmZmKSQvaX07ZnVuY3Rpb24gcihvLGkpe3JldHVybigwLHQuZGVmYXVsdCkobyksaT09bnVsbCYmKGk9ImFsbCIpLGkgaW4gcz9zW2ldLnRlc3Qobyk6ITF9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KSh2Zix2Zi5leHBvcnRzKTt2YXIgcVA9dmYuZXhwb3J0cyxDZj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1yO3ZhciB0PXMoaWUpLGE9cyh4eSk7ZnVuY3Rpb24gcyhvKXtyZXR1cm4gbyYmby5fX2VzTW9kdWxlP286e2RlZmF1bHQ6b319ZnVuY3Rpb24gcihvKXtyZXR1cm4oMCx0LmRlZmF1bHQpKG8pLCgwLGEuZGVmYXVsdCkobykmJm8ubGVuZ3RoPT09MjR9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShDZixDZi5leHBvcnRzKTt2YXIgSlA9Q2YuZXhwb3J0cyxFZj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1yO3ZhciB0PWEoSmQpO2Z1bmN0aW9uIGEobyl7cmV0dXJuIG8mJm8uX19lc01vZHVsZT9vOntkZWZhdWx0Om99fWZ1bmN0aW9uIHMobyl7IkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mIjtyZXR1cm4gcz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT0ic3ltYm9sIj9mdW5jdGlvbihpKXtyZXR1cm4gdHlwZW9mIGl9OmZ1bmN0aW9uKGkpe3JldHVybiBpJiZ0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZpLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZpIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgaX0scyhvKX1mdW5jdGlvbiByKG8saSl7dmFyIGM9KHMoaSk9PT0ib2JqZWN0Ij9pLmNvbXBhcmlzb25EYXRlOmkpfHxEYXRlKCkudG9TdHJpbmcoKSxmPSgwLHQuZGVmYXVsdCkoYyksZD0oMCx0LmRlZmF1bHQpKG8pO3JldHVybiEhKGQmJmYmJmQ+Zil9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShFZixFZi5leHBvcnRzKTt2YXIgWVA9RWYuZXhwb3J0cyxXZj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1yO3ZhciB0PWEoSmQpO2Z1bmN0aW9uIGEobyl7cmV0dXJuIG8mJm8uX19lc01vZHVsZT9vOntkZWZhdWx0Om99fWZ1bmN0aW9uIHMobyl7IkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mIjtyZXR1cm4gcz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT0ic3ltYm9sIj9mdW5jdGlvbihpKXtyZXR1cm4gdHlwZW9mIGl9OmZ1bmN0aW9uKGkpe3JldHVybiBpJiZ0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZpLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZpIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgaX0scyhvKX1mdW5jdGlvbiByKG8saSl7dmFyIGM9KHMoaSk9PT0ib2JqZWN0Ij9pLmNvbXBhcmlzb25EYXRlOmkpfHxEYXRlKCkudG9TdHJpbmcoKSxmPSgwLHQuZGVmYXVsdCkoYyksZD0oMCx0LmRlZmF1bHQpKG8pO3JldHVybiEhKGQmJmYmJmQ8Zil9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShXZixXZi5leHBvcnRzKTt2YXIgWFA9V2YuZXhwb3J0cyxCZj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1vO3ZhciB0PXMoaWUpLGE9cyhkeSk7ZnVuY3Rpb24gcyhpKXtyZXR1cm4gaSYmaS5fX2VzTW9kdWxlP2k6e2RlZmF1bHQ6aX19ZnVuY3Rpb24gcihpKXsiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2YiO3JldHVybiByPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnR5cGVvZiBTeW1ib2wuaXRlcmF0b3I9PSJzeW1ib2wiP2Z1bmN0aW9uKGMpe3JldHVybiB0eXBlb2YgY306ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJnR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJmMuY29uc3RydWN0b3I9PT1TeW1ib2wmJmMhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBjfSxyKGkpfWZ1bmN0aW9uIG8oaSxjKXsoMCx0LmRlZmF1bHQpKGkpO3ZhciBmO2lmKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKT09PSJbb2JqZWN0IEFycmF5XSIpe3ZhciBkPVtdO2ZvcihmIGluIGMpKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsZikmJihkW2ZdPSgwLGEuZGVmYXVsdCkoY1tmXSkpO3JldHVybiBkLmluZGV4T2YoaSk+PTB9ZWxzZXtpZihyKGMpPT09Im9iamVjdCIpcmV0dXJuIGMuaGFzT3duUHJvcGVydHkoaSk7aWYoYyYmdHlwZW9mIGMuaW5kZXhPZj09ImZ1bmN0aW9uIilyZXR1cm4gYy5pbmRleE9mKGkpPj0wfXJldHVybiExfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkoQmYsQmYuZXhwb3J0cyk7dmFyIFFQPUJmLmV4cG9ydHMsSWY9e2V4cG9ydHM6e319OyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9czt2YXIgdD1hKGllKTtmdW5jdGlvbiBhKHIpe3JldHVybiByJiZyLl9fZXNNb2R1bGU/cjp7ZGVmYXVsdDpyfX1mdW5jdGlvbiBzKHIpeygwLHQuZGVmYXVsdCkocik7Zm9yKHZhciBvPXIucmVwbGFjZSgvWy0gXSsvZywiIiksaT0wLGMsZixkLHA9by5sZW5ndGgtMTtwPj0wO3AtLSljPW8uc3Vic3RyaW5nKHAscCsxKSxmPXBhcnNlSW50KGMsMTApLGQ/KGYqPTIsZj49MTA/aSs9ZiUxMCsxOmkrPWYpOmkrPWYsZD0hZDtyZXR1cm4hIShpJTEwPT09MCYmbyl9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShJZixJZi5leHBvcnRzKTt2YXIgUHk9SWYuZXhwb3J0cyxTZj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1pO3ZhciB0PXMoaWUpLGE9cyhQeSk7ZnVuY3Rpb24gcyhjKXtyZXR1cm4gYyYmYy5fX2VzTW9kdWxlP2M6e2RlZmF1bHQ6Y319dmFyIHI9e2FtZXg6L14zWzQ3XVswLTldezEzfSQvLGRpbmVyc2NsdWI6L14zKD86MFswLTVdfFs2OF1bMC05XSlbMC05XXsxMX0kLyxkaXNjb3ZlcjovXjYoPzowMTF8NVswLTldWzAtOV0pWzAtOV17MTIsMTV9JC8samNiOi9eKD86MjEzMXwxODAwfDM1XGR7M30pXGR7MTF9JC8sbWFzdGVyY2FyZDovXjVbMS01XVswLTldezJ9fCgyMjJbMS05XXwyMlszLTldWzAtOV18MlszLTZdWzAtOV17Mn18MjdbMDFdWzAtOV18MjcyMClbMC05XXsxMn0kLyx1bmlvbnBheTovXig2WzI3XVswLTldezE0fXxeKDgxWzAtOV17MTQsMTd9KSkkLyx2aXNhOi9eKD86NFswLTldezEyfSkoPzpbMC05XXszLDZ9KT8kL30sbz1mdW5jdGlvbigpe3ZhciBjPVtdO2Zvcih2YXIgZiBpbiByKXIuaGFzT3duUHJvcGVydHkoZikmJmMucHVzaChyW2ZdKTtyZXR1cm4gY30oKTtmdW5jdGlvbiBpKGMpe3ZhciBmPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fTsoMCx0LmRlZmF1bHQpKGMpO3ZhciBkPWYucHJvdmlkZXIscD1jLnJlcGxhY2UoL1stIF0rL2csIiIpO2lmKGQmJmQudG9Mb3dlckNhc2UoKWluIHIpe2lmKCFyW2QudG9Mb3dlckNhc2UoKV0udGVzdChwKSlyZXR1cm4hMX1lbHNle2lmKGQmJiEoZC50b0xvd2VyQ2FzZSgpaW4gcikpdGhyb3cgbmV3IEVycm9yKCIiLmNvbmNhdChkLCIgaXMgbm90IGEgdmFsaWQgY3JlZGl0IGNhcmQgcHJvdmlkZXIuIikpO2lmKCFvLnNvbWUoZnVuY3Rpb24oYil7cmV0dXJuIGIudGVzdChwKX0pKXJldHVybiExfXJldHVybigwLGEuZGVmYXVsdCkoYyl9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShTZixTZi5leHBvcnRzKTt2YXIgZXc9U2YuZXhwb3J0cyxfZj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1pO3ZhciB0PXIoaWUpLGE9cihaYSkscz1yKFhkKTtmdW5jdGlvbiByKGMpe3JldHVybiBjJiZjLl9fZXNNb2R1bGU/Yzp7ZGVmYXVsdDpjfX12YXIgbz17UEw6ZnVuY3Rpb24oZil7KDAsdC5kZWZhdWx0KShmKTt2YXIgZD17MToxLDI6MywzOjcsNDo5LDU6MSw2OjMsNzo3LDg6OSw5OjEsMTA6MywxMTowfTtpZihmIT1udWxsJiZmLmxlbmd0aD09PTExJiYoMCxzLmRlZmF1bHQpKGYse2FsbG93X2xlYWRpbmdfemVyb2VzOiEwfSkpe3ZhciBwPWYuc3BsaXQoIiIpLnNsaWNlKDAsLTEpLGI9cC5yZWR1Y2UoZnVuY3Rpb24oZyxBLG0pe3JldHVybiBnK051bWJlcihBKSpkW20rMV19LDApLFQ9YiUxMCxXPU51bWJlcihmLmNoYXJBdChmLmxlbmd0aC0xKSk7aWYoVD09PTAmJlc9PT0wfHxXPT09MTAtVClyZXR1cm4hMH1yZXR1cm4hMX0sRVM6ZnVuY3Rpb24oZil7KDAsdC5kZWZhdWx0KShmKTt2YXIgZD0vXlswLTlYLVpdWzAtOV17N31bVFJXQUdNWUZQRFhCTkpaU1FWSExDS0VdJC8scD17WDowLFk6MSxaOjJ9LGI9WyJUIiwiUiIsIlciLCJBIiwiRyIsIk0iLCJZIiwiRiIsIlAiLCJEIiwiWCIsIkIiLCJOIiwiSiIsIloiLCJTIiwiUSIsIlYiLCJIIiwiTCIsIkMiLCJLIiwiRSJdLFQ9Zi50cmltKCkudG9VcHBlckNhc2UoKTtpZighZC50ZXN0KFQpKXJldHVybiExO3ZhciBXPVQuc2xpY2UoMCwtMSkucmVwbGFjZSgvW1gsWSxaXS9nLGZ1bmN0aW9uKGcpe3JldHVybiBwW2ddfSk7cmV0dXJuIFQuZW5kc1dpdGgoYltXJTIzXSl9LEZJOmZ1bmN0aW9uKGYpe2lmKCgwLHQuZGVmYXVsdCkoZiksZi5sZW5ndGghPT0xMXx8IWYubWF0Y2goL15cZHs2fVtcLUFcK11cZHszfVswLTlBQkNERUZISktMTU5QUlNUVVZXWFldezF9JC8pKXJldHVybiExO3ZhciBkPSIwMTIzNDU2Nzg5QUJDREVGSEpLTE1OUFJTVFVWV1hZIixwPXBhcnNlSW50KGYuc2xpY2UoMCw2KSwxMCkqMWUzK3BhcnNlSW50KGYuc2xpY2UoNywxMCksMTApLGI9cCUzMSxUPWRbYl07cmV0dXJuIFQ9PT1mLnNsaWNlKDEwLDExKX0sSU46ZnVuY3Rpb24oZil7dmFyIGQ9L15bMS05XVxkezN9XHM/XGR7NH1ccz9cZHs0fSQvLHA9W1swLDEsMiwzLDQsNSw2LDcsOCw5XSxbMSwyLDMsNCwwLDYsNyw4LDksNV0sWzIsMyw0LDAsMSw3LDgsOSw1LDZdLFszLDQsMCwxLDIsOCw5LDUsNiw3XSxbNCwwLDEsMiwzLDksNSw2LDcsOF0sWzUsOSw4LDcsNiwwLDQsMywyLDFdLFs2LDUsOSw4LDcsMSwwLDQsMywyXSxbNyw2LDUsOSw4LDIsMSwwLDQsM10sWzgsNyw2LDUsOSwzLDIsMSwwLDRdLFs5LDgsNyw2LDUsNCwzLDIsMSwwXV0sYj1bWzAsMSwyLDMsNCw1LDYsNyw4LDldLFsxLDUsNyw2LDIsOCwzLDAsOSw0XSxbNSw4LDAsMyw3LDksNiwxLDQsMl0sWzgsOSwxLDYsMCw0LDMsNSwyLDddLFs5LDQsNSwzLDEsMiw2LDgsNywwXSxbNCwyLDgsNiw1LDcsMyw5LDAsMV0sWzIsNyw5LDMsOCwwLDYsNCwxLDVdLFs3LDAsNCw2LDksMSwzLDIsNSw4XV0sVD1mLnRyaW0oKTtpZighZC50ZXN0KFQpKXJldHVybiExO3ZhciBXPTAsZz1ULnJlcGxhY2UoL1xzL2csIiIpLnNwbGl0KCIiKS5tYXAoTnVtYmVyKS5yZXZlcnNlKCk7cmV0dXJuIGcuZm9yRWFjaChmdW5jdGlvbihBLG0pe1c9cFtXXVtiW20lOF1bQV1dfSksVz09PTB9LElSOmZ1bmN0aW9uKGYpe2lmKCFmLm1hdGNoKC9eXGR7MTB9JC8pfHwoZj0iMDAwMCIuY29uY2F0KGYpLnNsaWNlKGYubGVuZ3RoLTYpLHBhcnNlSW50KGYuc2xpY2UoMyw5KSwxMCk9PT0wKSlyZXR1cm4hMTtmb3IodmFyIGQ9cGFyc2VJbnQoZi5zbGljZSg5LDEwKSwxMCkscD0wLGI9MDtiPDk7YisrKXArPXBhcnNlSW50KGYuc2xpY2UoYixiKzEpLDEwKSooMTAtYik7cmV0dXJuIHAlPTExLHA8MiYmZD09PXB8fHA+PTImJmQ9PT0xMS1wfSxJVDpmdW5jdGlvbihmKXtyZXR1cm4gZi5sZW5ndGghPT05fHxmPT09IkNBMDAwMDBBQSI/ITE6Zi5zZWFyY2goL0NbQS1aXVxkezV9W0EtWl17Mn0vaSk+LTF9LE5POmZ1bmN0aW9uKGYpe3ZhciBkPWYudHJpbSgpO2lmKGlzTmFOKE51bWJlcihkKSl8fGQubGVuZ3RoIT09MTF8fGQ9PT0iMDAwMDAwMDAwMDAiKXJldHVybiExO3ZhciBwPWQuc3BsaXQoIiIpLm1hcChOdW1iZXIpLGI9KDExLSgzKnBbMF0rNypwWzFdKzYqcFsyXSsxKnBbM10rOCpwWzRdKzkqcFs1XSs0KnBbNl0rNSpwWzddKzIqcFs4XSklMTEpJTExLFQ9KDExLSg1KnBbMF0rNCpwWzFdKzMqcFsyXSsyKnBbM10rNypwWzRdKzYqcFs1XSs1KnBbNl0rNCpwWzddKzMqcFs4XSsyKmIpJTExKSUxMTtyZXR1cm4hKGIhPT1wWzldfHxUIT09cFsxMF0pfSxUSDpmdW5jdGlvbihmKXtpZighZi5tYXRjaCgvXlsxLThdXGR7MTJ9JC8pKXJldHVybiExO2Zvcih2YXIgZD0wLHA9MDtwPDEyO3ArKylkKz1wYXJzZUludChmW3BdLDEwKSooMTMtcCk7cmV0dXJuIGZbMTJdPT09KCgxMS1kJTExKSUxMCkudG9TdHJpbmcoKX0sTEs6ZnVuY3Rpb24oZil7dmFyIGQ9L15bMS05XVxkezh9W3Z4XSQvaSxwPS9eWzEtOV1cZHsxMX0kL2k7cmV0dXJuIGYubGVuZ3RoPT09MTAmJmQudGVzdChmKT8hMDohIShmLmxlbmd0aD09PTEyJiZwLnRlc3QoZikpfSwiaGUtSUwiOmZ1bmN0aW9uKGYpe3ZhciBkPS9eXGR7OX0kLyxwPWYudHJpbSgpO2lmKCFkLnRlc3QocCkpcmV0dXJuITE7Zm9yKHZhciBiPXAsVD0wLFcsZz0wO2c8Yi5sZW5ndGg7ZysrKVc9TnVtYmVyKGJbZ10pKihnJTIrMSksVCs9Vz45P1ctOTpXO3JldHVybiBUJTEwPT09MH0sImFyLUxZIjpmdW5jdGlvbihmKXt2YXIgZD0vXigxfDIpXGR7MTF9JC8scD1mLnRyaW0oKTtyZXR1cm4hIWQudGVzdChwKX0sImFyLVROIjpmdW5jdGlvbihmKXt2YXIgZD0vXlxkezh9JC8scD1mLnRyaW0oKTtyZXR1cm4hIWQudGVzdChwKX0sInpoLUNOIjpmdW5jdGlvbihmKXt2YXIgZD1bIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIyMSIsIjIyIiwiMjMiLCIzMSIsIjMyIiwiMzMiLCIzNCIsIjM1IiwiMzYiLCIzNyIsIjQxIiwiNDIiLCI0MyIsIjQ0IiwiNDUiLCI0NiIsIjUwIiwiNTEiLCI1MiIsIjUzIiwiNTQiLCI2MSIsIjYyIiwiNjMiLCI2NCIsIjY1IiwiNzEiLCI4MSIsIjgyIiwiOTEiXSxwPVsiNyIsIjkiLCIxMCIsIjUiLCI4IiwiNCIsIjIiLCIxIiwiNiIsIjMiLCI3IiwiOSIsIjEwIiwiNSIsIjgiLCI0IiwiMiJdLGI9WyIxIiwiMCIsIlgiLCI5IiwiOCIsIjciLCI2IiwiNSIsIjQiLCIzIiwiMiJdLFQ9ZnVuY3Rpb24oVil7cmV0dXJuKDAsYS5kZWZhdWx0KShkLFYpfSxXPWZ1bmN0aW9uKFYpe3ZhciBMPXBhcnNlSW50KFYuc3Vic3RyaW5nKDAsNCksMTApLEk9cGFyc2VJbnQoVi5zdWJzdHJpbmcoNCw2KSwxMCkseT1wYXJzZUludChWLnN1YnN0cmluZyg2KSwxMCksRT1uZXcgRGF0ZShMLEktMSx5KTtyZXR1cm4gRT5uZXcgRGF0ZT8hMTpFLmdldEZ1bGxZZWFyKCk9PT1MJiZFLmdldE1vbnRoKCk9PT1JLTEmJkUuZ2V0RGF0ZSgpPT09eX0sZz1mdW5jdGlvbihWKXtmb3IodmFyIEw9Vi5zdWJzdHJpbmcoMCwxNyksST0wLHk9MDt5PDE3O3krKylJKz1wYXJzZUludChMLmNoYXJBdCh5KSwxMCkqcGFyc2VJbnQocFt5XSwxMCk7dmFyIEU9SSUxMTtyZXR1cm4gYltFXX0sQT1mdW5jdGlvbihWKXtyZXR1cm4gZyhWKT09PVYuY2hhckF0KDE3KS50b1VwcGVyQ2FzZSgpfSxtPWZ1bmN0aW9uKFYpe3ZhciBMPS9eWzEtOV1cZHs3fSgoMFsxLTldKXwoMVswLTJdKSkoKDBbMS05XSl8KFsxLTJdWzAtOV0pfCgzWzAtMV0pKVxkezN9JC8udGVzdChWKTtpZighTClyZXR1cm4hMTt2YXIgST1WLnN1YnN0cmluZygwLDIpO2lmKEw9VChJKSwhTClyZXR1cm4hMTt2YXIgeT0iMTkiLmNvbmNhdChWLnN1YnN0cmluZyg2LDEyKSk7cmV0dXJuIEw9Vyh5KSwhIUx9LHc9ZnVuY3Rpb24oVil7dmFyIEw9L15bMS05XVxkezV9WzEtOV1cZHszfSgoMFsxLTldKXwoMVswLTJdKSkoKDBbMS05XSl8KFsxLTJdWzAtOV0pfCgzWzAtMV0pKVxkezN9KFxkfHh8WCkkLy50ZXN0KFYpO2lmKCFMKXJldHVybiExO3ZhciBJPVYuc3Vic3RyaW5nKDAsMik7aWYoTD1UKEkpLCFMKXJldHVybiExO3ZhciB5PVYuc3Vic3RyaW5nKDYsMTQpO3JldHVybiBMPVcoeSksTD9BKFYpOiExfSxCPWZ1bmN0aW9uKFYpe3ZhciBMPS9eXGR7MTV9fChcZHsxN30oXGR8eHxYKSkkLy50ZXN0KFYpO3JldHVybiBMP1YubGVuZ3RoPT09MTU/bShWKTp3KFYpOiExfTtyZXR1cm4gQihmKX0sInpoLUhLIjpmdW5jdGlvbihmKXtmPWYudHJpbSgpO3ZhciBkPS9eW0EtWl17MSwyfVswLTldezZ9KChcKFswLTlBXVwpKXwoXFtbMC05QV1cXSl8KFswLTlBXSkpJC8scD0vXlswLTldJC87aWYoZj1mLnRvVXBwZXJDYXNlKCksIWQudGVzdChmKSlyZXR1cm4hMTtmPWYucmVwbGFjZSgvXFt8XF18XCh8XCkvZywiIiksZi5sZW5ndGg9PT04JiYoZj0iMyIuY29uY2F0KGYpKTtmb3IodmFyIGI9MCxUPTA7VDw9NztUKyspe3ZhciBXPXZvaWQgMDtwLnRlc3QoZltUXSk/Vz1mW1RdOlc9KGZbVF0uY2hhckNvZGVBdCgwKS01NSklMTEsYis9VyooOS1UKX1iJT0xMTt2YXIgZztyZXR1cm4gYj09PTA/Zz0iMCI6Yj09PTE/Zz0iQSI6Zz1TdHJpbmcoMTEtYiksZz09PWZbZi5sZW5ndGgtMV19LCJ6aC1UVyI6ZnVuY3Rpb24oZil7dmFyIGQ9e0E6MTAsQjoxMSxDOjEyLEQ6MTMsRToxNCxGOjE1LEc6MTYsSDoxNyxJOjM0LEo6MTgsSzoxOSxMOjIwLE06MjEsTjoyMixPOjM1LFA6MjMsUToyNCxSOjI1LFM6MjYsVDoyNyxVOjI4LFY6MjksVzozMixYOjMwLFk6MzEsWjozM30scD1mLnRyaW0oKS50b1VwcGVyQ2FzZSgpO3JldHVybi9eW0EtWl1bMC05XXs5fSQvLnRlc3QocCk/QXJyYXkuZnJvbShwKS5yZWR1Y2UoZnVuY3Rpb24oYixULFcpe2lmKFc9PT0wKXt2YXIgZz1kW1RdO3JldHVybiBnJTEwKjkrTWF0aC5mbG9vcihnLzEwKX1yZXR1cm4gVz09PTk/KDEwLWIlMTAtTnVtYmVyKFQpKSUxMD09PTA6YitOdW1iZXIoVCkqKDktVyl9LDApOiExfSxQSzpmdW5jdGlvbihmKXt2YXIgZD0vXlsxLTddWzAtOV17NH0tWzAtOV17N30tWzEtOV0kLyxwPWYudHJpbSgpO3JldHVybiBkLnRlc3QocCl9fTtmdW5jdGlvbiBpKGMsZil7aWYoKDAsdC5kZWZhdWx0KShjKSxmIGluIG8pcmV0dXJuIG9bZl0oYyk7aWYoZj09PSJhbnkiKXtmb3IodmFyIGQgaW4gbylpZihvLmhhc093blByb3BlcnR5KGQpKXt2YXIgcD1vW2RdO2lmKHAoYykpcmV0dXJuITB9cmV0dXJuITF9dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxvY2FsZSAnIi5jb25jYXQoZiwiJyIpKX1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKF9mLF9mLmV4cG9ydHMpO3ZhciB0dz1fZi5leHBvcnRzLE9mPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PWY7dmFyIHQ9YShpZSk7ZnVuY3Rpb24gYShkKXtyZXR1cm4gZCYmZC5fX2VzTW9kdWxlP2Q6e2RlZmF1bHQ6ZH19dmFyIHM9OCxyPTE0LG89L14oXGR7OH18XGR7MTN9fFxkezE0fSkkLztmdW5jdGlvbiBpKGQscCl7cmV0dXJuIGQ9PT1zfHxkPT09cj9wJTI9PT0wPzM6MTpwJTI9PT0wPzE6M31mdW5jdGlvbiBjKGQpe3ZhciBwPWQuc2xpY2UoMCwtMSkuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihULFcpe3JldHVybiBOdW1iZXIoVCkqaShkLmxlbmd0aCxXKX0pLnJlZHVjZShmdW5jdGlvbihULFcpe3JldHVybiBUK1d9LDApLGI9MTAtcCUxMDtyZXR1cm4gYjwxMD9iOjB9ZnVuY3Rpb24gZihkKXsoMCx0LmRlZmF1bHQpKGQpO3ZhciBwPU51bWJlcihkLnNsaWNlKC0xKSk7cmV0dXJuIG8udGVzdChkKSYmcD09PWMoZCl9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShPZixPZi5leHBvcnRzKTt2YXIgcnc9T2YuZXhwb3J0cyxSZj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1yO3ZhciB0PWEoaWUpO2Z1bmN0aW9uIGEobyl7cmV0dXJuIG8mJm8uX19lc01vZHVsZT9vOntkZWZhdWx0Om99fXZhciBzPS9eW0EtWl17Mn1bMC05QS1aXXs5fVswLTldJC87ZnVuY3Rpb24gcihvKXtpZigoMCx0LmRlZmF1bHQpKG8pLCFzLnRlc3QobykpcmV0dXJuITE7Zm9yKHZhciBpPSEwLGM9MCxmPW8ubGVuZ3RoLTI7Zj49MDtmLS0paWYob1tmXT49IkEiJiZvW2ZdPD0iWiIpZm9yKHZhciBkPW9bZl0uY2hhckNvZGVBdCgwKS01NSxwPWQlMTAsYj1NYXRoLnRydW5jKGQvMTApLFQ9MCxXPVtwLGJdO1Q8Vy5sZW5ndGg7VCsrKXt2YXIgZz1XW1RdO2k/Zz49NT9jKz0xKyhnLTUpKjI6Yys9ZyoyOmMrPWcsaT0haX1lbHNle3ZhciBBPW9bZl0uY2hhckNvZGVBdCgwKS00ODtpP0E+PTU/Yys9MSsoQS01KSoyOmMrPUEqMjpjKz1BLGk9IWl9dmFyIG09TWF0aC50cnVuYygoYys5KS8xMCkqMTAtYztyZXR1cm4rb1tvLmxlbmd0aC0xXT09PW19bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShSZixSZi5leHBvcnRzKTt2YXIgbnc9UmYuZXhwb3J0cyxNZj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1pO3ZhciB0PWEoaWUpO2Z1bmN0aW9uIGEoYyl7cmV0dXJuIGMmJmMuX19lc01vZHVsZT9jOntkZWZhdWx0OmN9fXZhciBzPS9eKD86WzAtOV17OX1YfFswLTldezEwfSkkLyxyPS9eKD86WzAtOV17MTN9KSQvLG89WzEsM107ZnVuY3Rpb24gaShjLGYpeygwLHQuZGVmYXVsdCkoYyk7dmFyIGQ9U3RyaW5nKGY/LnZlcnNpb258fGYpO2lmKCEoZiE9bnVsbCYmZi52ZXJzaW9ufHxmKSlyZXR1cm4gaShjLHt2ZXJzaW9uOjEwfSl8fGkoYyx7dmVyc2lvbjoxM30pO3ZhciBwPWMucmVwbGFjZSgvW1xzLV0rL2csIiIpLGI9MDtpZihkPT09IjEwIil7aWYoIXMudGVzdChwKSlyZXR1cm4hMTtmb3IodmFyIFQ9MDtUPGQtMTtUKyspYis9KFQrMSkqcC5jaGFyQXQoVCk7aWYocC5jaGFyQXQoOSk9PT0iWCI/Yis9MTAqMTA6Yis9MTAqcC5jaGFyQXQoOSksYiUxMT09PTApcmV0dXJuITB9ZWxzZSBpZihkPT09IjEzIil7aWYoIXIudGVzdChwKSlyZXR1cm4hMTtmb3IodmFyIFc9MDtXPDEyO1crKyliKz1vW1clMl0qcC5jaGFyQXQoVyk7aWYocC5jaGFyQXQoMTIpLSgxMC1iJTEwKSUxMD09PTApcmV0dXJuITB9cmV0dXJuITF9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShNZixNZi5leHBvcnRzKTt2YXIgb3c9TWYuZXhwb3J0cyxGZj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1yO3ZhciB0PWEoaWUpO2Z1bmN0aW9uIGEobyl7cmV0dXJuIG8mJm8uX19lc01vZHVsZT9vOntkZWZhdWx0Om99fXZhciBzPSJeXFxkezR9LT9cXGR7M31bXFxkWF0kIjtmdW5jdGlvbiByKG8pe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fTsoMCx0LmRlZmF1bHQpKG8pO3ZhciBjPXM7aWYoYz1pLnJlcXVpcmVfaHlwaGVuP2MucmVwbGFjZSgiPyIsIiIpOmMsYz1pLmNhc2Vfc2Vuc2l0aXZlP25ldyBSZWdFeHAoYyk6bmV3IFJlZ0V4cChjLCJpIiksIWMudGVzdChvKSlyZXR1cm4hMTtmb3IodmFyIGY9by5yZXBsYWNlKCItIiwiIikudG9VcHBlckNhc2UoKSxkPTAscD0wO3A8Zi5sZW5ndGg7cCsrKXt2YXIgYj1mW3BdO2QrPShiPT09IlgiPzEwOitiKSooOC1wKX1yZXR1cm4gZCUxMT09PTB9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShGZixGZi5leHBvcnRzKTt2YXIgc3c9RmYuZXhwb3J0cyxOZj17ZXhwb3J0czp7fX0sam89e307T2JqZWN0LmRlZmluZVByb3BlcnR5KGpvLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtqby5pc283MDY0Q2hlY2s9YXc7am8ubHVobkNoZWNrPWl3O2pvLnJldmVyc2VNdWx0aXBseUFuZFN1bT1jdztqby52ZXJob2VmZkNoZWNrPXV3O2Z1bmN0aW9uIGF3KG4pe2Zvcih2YXIgZT0xMCx0PTA7dDxuLmxlbmd0aC0xO3QrKyllPShwYXJzZUludChuW3RdLDEwKStlKSUxMD09PTA/MTAqMiUxMToocGFyc2VJbnQoblt0XSwxMCkrZSklMTAqMiUxMTtyZXR1cm4gZT1lPT09MT8wOjExLWUsZT09PXBhcnNlSW50KG5bMTBdLDEwKX1mdW5jdGlvbiBpdyhuKXtmb3IodmFyIGU9MCx0PSExLGE9bi5sZW5ndGgtMTthPj0wO2EtLSl7aWYodCl7dmFyIHM9cGFyc2VJbnQoblthXSwxMCkqMjtzPjk/ZSs9cy50b1N0cmluZygpLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIHBhcnNlSW50KHIsMTApfSkucmVkdWNlKGZ1bmN0aW9uKHIsbyl7cmV0dXJuIHIrb30sMCk6ZSs9c31lbHNlIGUrPXBhcnNlSW50KG5bYV0sMTApO3Q9IXR9cmV0dXJuIGUlMTA9PT0wfWZ1bmN0aW9uIGN3KG4sZSl7Zm9yKHZhciB0PTAsYT0wO2E8bi5sZW5ndGg7YSsrKXQrPW5bYV0qKGUtYSk7cmV0dXJuIHR9ZnVuY3Rpb24gdXcobil7Zm9yKHZhciBlPVtbMCwxLDIsMyw0LDUsNiw3LDgsOV0sWzEsMiwzLDQsMCw2LDcsOCw5LDVdLFsyLDMsNCwwLDEsNyw4LDksNSw2XSxbMyw0LDAsMSwyLDgsOSw1LDYsN10sWzQsMCwxLDIsMyw5LDUsNiw3LDhdLFs1LDksOCw3LDYsMCw0LDMsMiwxXSxbNiw1LDksOCw3LDEsMCw0LDMsMl0sWzcsNiw1LDksOCwyLDEsMCw0LDNdLFs4LDcsNiw1LDksMywyLDEsMCw0XSxbOSw4LDcsNiw1LDQsMywyLDEsMF1dLHQ9W1swLDEsMiwzLDQsNSw2LDcsOCw5XSxbMSw1LDcsNiwyLDgsMywwLDksNF0sWzUsOCwwLDMsNyw5LDYsMSw0LDJdLFs4LDksMSw2LDAsNCwzLDUsMiw3XSxbOSw0LDUsMywxLDIsNiw4LDcsMF0sWzQsMiw4LDYsNSw3LDMsOSwwLDFdLFsyLDcsOSwzLDgsMCw2LDQsMSw1XSxbNywwLDQsNiw5LDEsMywyLDUsOF1dLGE9bi5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpLHM9MCxyPTA7cjxhLmxlbmd0aDtyKyspcz1lW3NdW3RbciU4XVtwYXJzZUludChhW3JdLDEwKV1dO3JldHVybiBzPT09MH0oZnVuY3Rpb24obixlKXtmdW5jdGlvbiB0KEQpeyJAYmFiZWwvaGVscGVycyAtIHR5cGVvZiI7cmV0dXJuIHQ9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09InN5bWJvbCI/ZnVuY3Rpb24oail7cmV0dXJuIHR5cGVvZiBqfTpmdW5jdGlvbihqKXtyZXR1cm4gaiYmdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmai5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmaiE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGp9LHQoRCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1DZTt2YXIgYT1pKGllKSxzPW8oam8pLHI9aSh5eSk7ZnVuY3Rpb24gbyhELGope2lmKHR5cGVvZiBXZWFrTWFwPT0iZnVuY3Rpb24iKXZhciBYPW5ldyBXZWFrTWFwLHNlPW5ldyBXZWFrTWFwO3JldHVybihvPWZ1bmN0aW9uKHRlLEVlKXtpZighRWUmJnRlJiZ0ZS5fX2VzTW9kdWxlKXJldHVybiB0ZTt2YXIgU2UsVWUsVmU9e19fcHJvdG9fXzpudWxsLGRlZmF1bHQ6dGV9O2lmKHRlPT09bnVsbHx8dCh0ZSkhPSJvYmplY3QiJiZ0eXBlb2YgdGUhPSJmdW5jdGlvbiIpcmV0dXJuIFZlO2lmKFNlPUVlP3NlOlgpe2lmKFNlLmhhcyh0ZSkpcmV0dXJuIFNlLmdldCh0ZSk7U2Uuc2V0KHRlLFZlKX1mb3IodmFyIHd0IGluIHRlKXd0IT09ImRlZmF1bHQiJiZ7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRlLHd0KSYmKChVZT0oU2U9T2JqZWN0LmRlZmluZVByb3BlcnR5KSYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0ZSx3dCkpJiYoVWUuZ2V0fHxVZS5zZXQpP1NlKFZlLHd0LFVlKTpWZVt3dF09dGVbd3RdKTtyZXR1cm4gVmV9KShELGopfWZ1bmN0aW9uIGkoRCl7cmV0dXJuIEQmJkQuX19lc01vZHVsZT9EOntkZWZhdWx0OkR9fWZ1bmN0aW9uIGMoRCl7cmV0dXJuIGIoRCl8fHAoRCl8fGQoRCl8fGYoKX1mdW5jdGlvbiBmKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX1mdW5jdGlvbiBkKEQsail7aWYoRCl7aWYodHlwZW9mIEQ9PSJzdHJpbmciKXJldHVybiBUKEQsaik7dmFyIFg9e30udG9TdHJpbmcuY2FsbChEKS5zbGljZSg4LC0xKTtyZXR1cm4gWD09PSJPYmplY3QiJiZELmNvbnN0cnVjdG9yJiYoWD1ELmNvbnN0cnVjdG9yLm5hbWUpLFg9PT0iTWFwInx8WD09PSJTZXQiP0FycmF5LmZyb20oRCk6WD09PSJBcmd1bWVudHMifHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChYKT9UKEQsaik6dm9pZCAwfX1mdW5jdGlvbiBwKEQpe2lmKHR5cGVvZiBTeW1ib2w8InUiJiZEW1N5bWJvbC5pdGVyYXRvcl0hPW51bGx8fERbIkBAaXRlcmF0b3IiXSE9bnVsbClyZXR1cm4gQXJyYXkuZnJvbShEKX1mdW5jdGlvbiBiKEQpe2lmKEFycmF5LmlzQXJyYXkoRCkpcmV0dXJuIFQoRCl9ZnVuY3Rpb24gVChELGopeyhqPT1udWxsfHxqPkQubGVuZ3RoKSYmKGo9RC5sZW5ndGgpO2Zvcih2YXIgWD0wLHNlPUFycmF5KGopO1g8ajtYKyspc2VbWF09RFtYXTtyZXR1cm4gc2V9ZnVuY3Rpb24gVyhEKXt2YXIgaj1ELnNsaWNlKDAsMiksWD1wYXJzZUludChELnNsaWNlKDIsNCksMTApO1g+NDA/KFgtPTQwLGo9IjIwIi5jb25jYXQoaikpOlg+MjA/KFgtPTIwLGo9IjE4Ii5jb25jYXQoaikpOmo9IjE5Ii5jb25jYXQoaiksWDwxMCYmKFg9IjAiLmNvbmNhdChYKSk7dmFyIHNlPSIiLmNvbmNhdChqLCIvIikuY29uY2F0KFgsIi8iKS5jb25jYXQoRC5zbGljZSg0LDYpKTtpZighKDAsci5kZWZhdWx0KShzZSwiWVlZWS9NTS9ERCIpKXJldHVybiExO2Zvcih2YXIgbmU9RC5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKFVlKXtyZXR1cm4gcGFyc2VJbnQoVWUsMTApfSksdGU9WzIsNCw4LDUsMTAsOSw3LDMsNl0sRWU9MCxTZT0wO1NlPHRlLmxlbmd0aDtTZSsrKUVlKz1uZVtTZV0qdGVbU2VdO3JldHVybiBFZT1FZSUxMT09PTEwPzA6RWUlMTEsRWU9PT1uZVs5XX1mdW5jdGlvbiBnKEQpe3ZhciBqPUQuc3BsaXQoIiIpLFg9ai5maWx0ZXIoZnVuY3Rpb24obmUsdGUpe3JldHVybiB0ZSUyfSkubWFwKGZ1bmN0aW9uKG5lKXtyZXR1cm4gTnVtYmVyKG5lKSoyfSkuam9pbigiIikuc3BsaXQoIiIpLHNlPWouZmlsdGVyKGZ1bmN0aW9uKG5lLHRlKXtyZXR1cm4hKHRlJTIpfSkuY29uY2F0KFgpLm1hcChmdW5jdGlvbihuZSl7cmV0dXJuIE51bWJlcihuZSl9KS5yZWR1Y2UoZnVuY3Rpb24obmUsdGUpe3JldHVybiBuZSt0ZX0pO3JldHVybiBzZSUxMD09PTB9ZnVuY3Rpb24gQShEKXtEPUQucmVwbGFjZSgvXFcvLCIiKTt2YXIgaj1wYXJzZUludChELnNsaWNlKDAsMiksMTApO2lmKEQubGVuZ3RoPT09MTApajw1ND9qPSIyMCIuY29uY2F0KGopOmo9IjE5Ii5jb25jYXQoaik7ZWxzZXtpZihELnNsaWNlKDYpPT09IjAwMCIpcmV0dXJuITE7aWYoajw1NClqPSIxOSIuY29uY2F0KGopO2Vsc2UgcmV0dXJuITF9ai5sZW5ndGg9PT0zJiYoaj1bai5zbGljZSgwLDIpLCIwIixqLnNsaWNlKDIpXS5qb2luKCIiKSk7dmFyIFg9cGFyc2VJbnQoRC5zbGljZSgyLDQpLDEwKTtpZihYPjUwJiYoWC09NTApLFg+MjApe2lmKHBhcnNlSW50KGosMTApPDIwMDQpcmV0dXJuITE7WC09MjB9WDwxMCYmKFg9IjAiLmNvbmNhdChYKSk7dmFyIHNlPSIiLmNvbmNhdChqLCIvIikuY29uY2F0KFgsIi8iKS5jb25jYXQoRC5zbGljZSg0LDYpKTtpZighKDAsci5kZWZhdWx0KShzZSwiWVlZWS9NTS9ERCIpKXJldHVybiExO2lmKEQubGVuZ3RoPT09MTAmJnBhcnNlSW50KEQsMTApJTExIT09MCl7dmFyIG5lPXBhcnNlSW50KEQuc2xpY2UoMCw5KSwxMCklMTE7aWYocGFyc2VJbnQoaiwxMCk8MTk4NiYmbmU9PT0xMCl7aWYocGFyc2VJbnQoRC5zbGljZSg5KSwxMCkhPT0wKXJldHVybiExfWVsc2UgcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gbShEKXtyZXR1cm4gcy5sdWhuQ2hlY2soRCl9ZnVuY3Rpb24gdyhEKXtmb3IodmFyIGo9RC5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKFVlKXtyZXR1cm4gcGFyc2VJbnQoVWUsMTApfSksWD1bXSxzZT0wO3NlPGoubGVuZ3RoLTE7c2UrKyl7WC5wdXNoKCIiKTtmb3IodmFyIG5lPTA7bmU8ai5sZW5ndGgtMTtuZSsrKWpbc2VdPT09altuZV0mJihYW3NlXSs9bmUpfWlmKFg9WC5maWx0ZXIoZnVuY3Rpb24oVWUpe3JldHVybiBVZS5sZW5ndGg+MX0pLFgubGVuZ3RoIT09MiYmWC5sZW5ndGghPT0zKXJldHVybiExO2lmKFhbMF0ubGVuZ3RoPT09Myl7Zm9yKHZhciB0ZT1YWzBdLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oVWUpe3JldHVybiBwYXJzZUludChVZSwxMCl9KSxFZT0wLFNlPTA7U2U8dGUubGVuZ3RoLTE7U2UrKyl0ZVtTZV0rMT09PXRlW1NlKzFdJiYoRWUrPTEpO2lmKEVlPT09MilyZXR1cm4hMX1yZXR1cm4gcy5pc283MDY0Q2hlY2soRCl9ZnVuY3Rpb24gQihEKXtEPUQucmVwbGFjZSgvXFcvLCIiKTt2YXIgaj1wYXJzZUludChELnNsaWNlKDQsNiksMTApLFg9RC5zbGljZSg2LDcpO3N3aXRjaChYKXtjYXNlIjAiOmNhc2UiMSI6Y2FzZSIyIjpjYXNlIjMiOmo9IjE5Ii5jb25jYXQoaik7YnJlYWs7Y2FzZSI0IjpjYXNlIjkiOmo8Mzc/aj0iMjAiLmNvbmNhdChqKTpqPSIxOSIuY29uY2F0KGopO2JyZWFrO2RlZmF1bHQ6aWYoajwzNylqPSIyMCIuY29uY2F0KGopO2Vsc2UgaWYoaj41OClqPSIxOCIuY29uY2F0KGopO2Vsc2UgcmV0dXJuITE7YnJlYWt9ai5sZW5ndGg9PT0zJiYoaj1bai5zbGljZSgwLDIpLCIwIixqLnNsaWNlKDIpXS5qb2luKCIiKSk7dmFyIHNlPSIiLmNvbmNhdChqLCIvIikuY29uY2F0KEQuc2xpY2UoMiw0KSwiLyIpLmNvbmNhdChELnNsaWNlKDAsMikpO2lmKCEoMCxyLmRlZmF1bHQpKHNlLCJZWVlZL01NL0REIikpcmV0dXJuITE7Zm9yKHZhciBuZT1ELnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oVWUpe3JldHVybiBwYXJzZUludChVZSwxMCl9KSx0ZT0wLEVlPTQsU2U9MDtTZTw5O1NlKyspdGUrPW5lW1NlXSpFZSxFZS09MSxFZT09PTEmJihFZT03KTtyZXR1cm4gdGUlPTExLHRlPT09MT8hMTp0ZT09PTA/bmVbOV09PT0wOm5lWzldPT09MTEtdGV9ZnVuY3Rpb24gayhEKXtmb3IodmFyIGo9RC5zbGljZSgwLDgpLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24odGUpe3JldHVybiBwYXJzZUludCh0ZSwxMCl9KSxYPTAsc2U9MTtzZTxqLmxlbmd0aDtzZSs9MilYKz1qW3NlXTtmb3IodmFyIG5lPTA7bmU8ai5sZW5ndGg7bmUrPTIpaltuZV08Mj9YKz0xLWpbbmVdOihYKz0yKihqW25lXS0yKSs1LGpbbmVdPjQmJihYKz0yKSk7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoWCUyNis2NSk9PT1ELmNoYXJBdCg4KX1mdW5jdGlvbiBWKEQpe2Zvcih2YXIgaj1ELnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24obmUpe3JldHVybiBwYXJzZUludChuZSwxMCl9KSxYPTAsc2U9MDtzZTw4O3NlKyspWCs9altzZV0qTWF0aC5wb3coMiw4LXNlKTtyZXR1cm4gWCUxMSUxMD09PWpbOF19ZnVuY3Rpb24gTChEKXt2YXIgaj1zLnJldmVyc2VNdWx0aXBseUFuZFN1bShELnNwbGl0KCIiKS5zbGljZSgwLDcpLm1hcChmdW5jdGlvbihYKXtyZXR1cm4gcGFyc2VJbnQoWCwxMCl9KSw4KTtyZXR1cm4gRC5sZW5ndGg9PT05JiZEWzhdIT09IlciJiYoais9KERbOF0uY2hhckNvZGVBdCgwKS02NCkqOSksaiU9MjMsaj09PTA/RFs3XS50b1VwcGVyQ2FzZSgpPT09IlciOkRbN10udG9VcHBlckNhc2UoKT09PVN0cmluZy5mcm9tQ2hhckNvZGUoNjQrail9dmFyIEk9e2FuZG92ZXI6WyIxMCIsIjEyIl0sYXRsYW50YTpbIjYwIiwiNjciXSxhdXN0aW46WyI1MCIsIjUzIl0sYnJvb2toYXZlbjpbIjAxIiwiMDIiLCIwMyIsIjA0IiwiMDUiLCIwNiIsIjExIiwiMTMiLCIxNCIsIjE2IiwiMjEiLCIyMiIsIjIzIiwiMjUiLCIzNCIsIjUxIiwiNTIiLCI1NCIsIjU1IiwiNTYiLCI1NyIsIjU4IiwiNTkiLCI2NSJdLGNpbmNpbm5hdGk6WyIzMCIsIjMyIiwiMzUiLCIzNiIsIjM3IiwiMzgiLCI2MSJdLGZyZXNubzpbIjE1IiwiMjQiXSxpbnRlcm5ldDpbIjIwIiwiMjYiLCIyNyIsIjQ1IiwiNDYiLCI0NyJdLGthbnNhczpbIjQwIiwiNDQiXSxtZW1waGlzOlsiOTQiLCI5NSJdLG9nZGVuOlsiODAiLCI5MCJdLHBoaWxhZGVscGhpYTpbIjMzIiwiMzkiLCI0MSIsIjQyIiwiNDMiLCI0NiIsIjQ4IiwiNjIiLCI2MyIsIjY0IiwiNjYiLCI2OCIsIjcxIiwiNzIiLCI3MyIsIjc0IiwiNzUiLCI3NiIsIjc3IiwiODEiLCI4MiIsIjgzIiwiODQiLCI4NSIsIjg2IiwiODciLCI4OCIsIjkxIiwiOTIiLCI5MyIsIjk4IiwiOTkiXSxzYmE6WyIzMSJdfTtmdW5jdGlvbiB5KCl7dmFyIEQ9W107Zm9yKHZhciBqIGluIEkpSS5oYXNPd25Qcm9wZXJ0eShqKSYmRC5wdXNoLmFwcGx5KEQsYyhJW2pdKSk7cmV0dXJuIER9ZnVuY3Rpb24gRShEKXtyZXR1cm4geSgpLmluZGV4T2YoRC5zbGljZSgwLDIpKSE9PS0xfWZ1bmN0aW9uIEMoRCl7Zm9yKHZhciBqPTAsWD1ELnNwbGl0KCIiKSxzZT1wYXJzZUludChYLnBvcCgpLDEwKSxuZT0wO25lPFgubGVuZ3RoO25lKyspais9WFs5LW5lXSooMituZSU2KTt2YXIgdGU9MTEtaiUxMTtyZXR1cm4gdGU9PT0xMT90ZT0wOnRlPT09MTAmJih0ZT05KSxzZT09PXRlfWZ1bmN0aW9uIEYoRCl7dmFyIGo9RC50b1VwcGVyQ2FzZSgpLnNwbGl0KCIiKTtpZihpc05hTihwYXJzZUludChqWzBdLDEwKSkmJmoubGVuZ3RoPjEpe3ZhciBYPTA7c3dpdGNoKGpbMF0pe2Nhc2UiWSI6WD0xO2JyZWFrO2Nhc2UiWiI6WD0yO2JyZWFrfWouc3BsaWNlKDAsMSxYKX1lbHNlIGZvcig7ai5sZW5ndGg8OTspai51bnNoaWZ0KDApO3ZhciBzZT1bIlQiLCJSIiwiVyIsIkEiLCJHIiwiTSIsIlkiLCJGIiwiUCIsIkQiLCJYIiwiQiIsIk4iLCJKIiwiWiIsIlMiLCJRIiwiViIsIkgiLCJMIiwiQyIsIksiLCJFIl07aj1qLmpvaW4oIiIpO3ZhciBuZT1wYXJzZUludChqLnNsaWNlKDAsOCksMTApJTIzO3JldHVybiBqWzhdPT09c2VbbmVdfWZ1bmN0aW9uICQoRCl7dmFyIGo9RC5zbGljZSgxLDMpLFg9RC5zbGljZSgwLDEpO3N3aXRjaChYKXtjYXNlIjEiOmNhc2UiMiI6aj0iMTgiLmNvbmNhdChqKTticmVhaztjYXNlIjMiOmNhc2UiNCI6aj0iMTkiLmNvbmNhdChqKTticmVhaztkZWZhdWx0Omo9IjIwIi5jb25jYXQoaik7YnJlYWt9dmFyIHNlPSIiLmNvbmNhdChqLCIvIikuY29uY2F0KEQuc2xpY2UoMyw1KSwiLyIpLmNvbmNhdChELnNsaWNlKDUsNykpO2lmKCEoMCxyLmRlZmF1bHQpKHNlLCJZWVlZL01NL0REIikpcmV0dXJuITE7Zm9yKHZhciBuZT1ELnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oVmUpe3JldHVybiBwYXJzZUludChWZSwxMCl9KSx0ZT0wLEVlPTEsU2U9MDtTZTwxMDtTZSsrKXRlKz1uZVtTZV0qRWUsRWUrPTEsRWU9PT0xMCYmKEVlPTEpO2lmKHRlJTExPT09MTApe3RlPTAsRWU9Mztmb3IodmFyIFVlPTA7VWU8MTA7VWUrKyl0ZSs9bmVbVWVdKkVlLEVlKz0xLEVlPT09MTAmJihFZT0xKTtpZih0ZSUxMT09PTEwKXJldHVybiBuZVsxMF09PT0wfXJldHVybiB0ZSUxMT09PW5lWzEwXX1mdW5jdGlvbiBPKEQpe3ZhciBqPUQuc2xpY2UoNCw2KSxYPUQuc2xpY2UoNiw3KTtzd2l0Y2goWCl7Y2FzZSIrIjpqPSIxOCIuY29uY2F0KGopO2JyZWFrO2Nhc2UiLSI6aj0iMTkiLmNvbmNhdChqKTticmVhaztkZWZhdWx0Omo9IjIwIi5jb25jYXQoaik7YnJlYWt9dmFyIHNlPSIiLmNvbmNhdChqLCIvIikuY29uY2F0KEQuc2xpY2UoMiw0KSwiLyIpLmNvbmNhdChELnNsaWNlKDAsMikpO2lmKCEoMCxyLmRlZmF1bHQpKHNlLCJZWVlZL01NL0REIikpcmV0dXJuITE7dmFyIG5lPXBhcnNlSW50KEQuc2xpY2UoMCw2KStELnNsaWNlKDcsMTApLDEwKSUzMTtpZihuZTwxMClyZXR1cm4gbmU9PT1wYXJzZUludChELnNsaWNlKDEwKSwxMCk7bmUtPTEwO3ZhciB0ZT1bIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkgiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIlAiLCJSIiwiUyIsIlQiLCJVIiwiViIsIlciLCJYIiwiWSJdO3JldHVybiB0ZVtuZV09PT1ELnNsaWNlKDEwKX1mdW5jdGlvbiBSKEQpe2lmKEQuc2xpY2UoMiw0KSE9PSIwMCJ8fEQuc2xpY2UoNCw2KSE9PSIwMCIpe3ZhciBqPSIiLmNvbmNhdChELnNsaWNlKDAsMiksIi8iKS5jb25jYXQoRC5zbGljZSgyLDQpLCIvIikuY29uY2F0KEQuc2xpY2UoNCw2KSk7aWYoISgwLHIuZGVmYXVsdCkoaiwiWVkvTU0vREQiKSlyZXR1cm4hMX12YXIgWD05Ny1wYXJzZUludChELnNsaWNlKDAsOSksMTApJTk3LHNlPXBhcnNlSW50KEQuc2xpY2UoOSwxMSksMTApO3JldHVybiEoWCE9PXNlJiYoWD05Ny1wYXJzZUludCgiMiIuY29uY2F0KEQuc2xpY2UoMCw5KSksMTApJTk3LFghPT1zZSkpfWZ1bmN0aW9uIHgoRCl7RD1ELnJlcGxhY2UoL1xzL2csIiIpO3ZhciBqPXBhcnNlSW50KEQuc2xpY2UoMCwxMCksMTApJTUxMSxYPXBhcnNlSW50KEQuc2xpY2UoMTAsMTMpLDEwKTtyZXR1cm4gaj09PVh9ZnVuY3Rpb24gdihEKXt2YXIgaj0iIi5jb25jYXQoRC5zbGljZSgwLDQpLCIvIikuY29uY2F0KEQuc2xpY2UoNCw2KSwiLyIpLmNvbmNhdChELnNsaWNlKDYsOCkpO3JldHVybiEoMCxyLmRlZmF1bHQpKGosIllZWVkvTU0vREQiKXx8IXMubHVobkNoZWNrKEQuc2xpY2UoMCwxMikpPyExOnMudmVyaG9lZmZDaGVjaygiIi5jb25jYXQoRC5zbGljZSgwLDExKSkuY29uY2F0KERbMTJdKSl9ZnVuY3Rpb24gXyhEKXtyZXR1cm4gcy5pc283MDY0Q2hlY2soRCl9ZnVuY3Rpb24gTShEKXtmb3IodmFyIGo9RC5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKG5lKXtyZXR1cm4gcGFyc2VJbnQobmUsMTApfSksWD04LHNlPTE7c2U8OTtzZSsrKVgrPWpbc2VdKihzZSsxKTtyZXR1cm4gWCUxMT09PWpbOV19ZnVuY3Rpb24geihEKXtmb3IodmFyIGo9ITEsWD0hMSxzZT0wO3NlPDM7c2UrKylpZighaiYmL1tBRUlPVV0vLnRlc3QoRFtzZV0pKWo9ITA7ZWxzZSBpZighWCYmaiYmRFtzZV09PT0iWCIpWD0hMDtlbHNlIGlmKHNlPjAmJihqJiYhWCYmIS9bQUVJT1VdLy50ZXN0KERbc2VdKXx8WCYmIS9YLy50ZXN0KERbc2VdKSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gcShEKXt2YXIgaj1ELnRvVXBwZXJDYXNlKCkuc3BsaXQoIiIpO2lmKCF6KGouc2xpY2UoMCwzKSl8fCF6KGouc2xpY2UoMyw2KSkpcmV0dXJuITE7Zm9yKHZhciBYPVs2LDcsOSwxMCwxMiwxMywxNF0sc2U9e0w6IjAiLE06IjEiLE46IjIiLFA6IjMiLFE6IjQiLFI6IjUiLFM6IjYiLFQ6IjciLFU6IjgiLFY6IjkifSxuZT0wLHRlPVg7bmU8dGUubGVuZ3RoO25lKyspe3ZhciBFZT10ZVtuZV07altFZV1pbiBzZSYmai5zcGxpY2UoRWUsMSxzZVtqW0VlXV0pfXZhciBTZT17QToiMDEiLEI6IjAyIixDOiIwMyIsRDoiMDQiLEU6IjA1IixIOiIwNiIsTDoiMDciLE06IjA4IixQOiIwOSIsUjoiMTAiLFM6IjExIixUOiIxMiJ9LFVlPVNlW2pbOF1dLFZlPXBhcnNlSW50KGpbOV0ralsxMF0sMTApO1ZlPjQwJiYoVmUtPTQwKSxWZTwxMCYmKFZlPSIwIi5jb25jYXQoVmUpKTt2YXIgd3Q9IiIuY29uY2F0KGpbNl0pLmNvbmNhdChqWzddLCIvIikuY29uY2F0KFVlLCIvIikuY29uY2F0KFZlKTtpZighKDAsci5kZWZhdWx0KSh3dCwiWVkvTU0vREQiKSlyZXR1cm4hMTtmb3IodmFyIHhyPTAsdXI9MTt1cjxqLmxlbmd0aC0xO3VyKz0yKXt2YXIgUXI9cGFyc2VJbnQoalt1cl0sMTApO2lzTmFOKFFyKSYmKFFyPWpbdXJdLmNoYXJDb2RlQXQoMCktNjUpLHhyKz1Rcn1mb3IodmFyIEo9e0E6MSxCOjAsQzo1LEQ6NyxFOjksRjoxMyxHOjE1LEg6MTcsSToxOSxKOjIxLEs6MixMOjQsTToxOCxOOjIwLE86MTEsUDozLFE6NixSOjgsUzoxMixUOjE0LFU6MTYsVjoxMCxXOjIyLFg6MjUsWToyNCxaOjIzLDA6MSwxOjB9LGxyPTA7bHI8ai5sZW5ndGgtMTtscis9Mil7dmFyIFRyPTA7aWYoaltscl1pbiBKKVRyPUpbaltscl1dO2Vsc2V7dmFyIFU9cGFyc2VJbnQoaltscl0sMTApO1RyPTIqVSsxLFU+NCYmKFRyKz0yKX14cis9VHJ9cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoNjUreHIlMjYpPT09alsxNV19ZnVuY3Rpb24gUShEKXtEPUQucmVwbGFjZSgvXFcvLCIiKTt2YXIgaj1ELnNsaWNlKDAsMik7aWYoaiE9PSIzMiIpe3ZhciBYPUQuc2xpY2UoMiw0KTtpZihYIT09IjAwIil7dmFyIHNlPUQuc2xpY2UoNCw2KTtzd2l0Y2goRFs2XSl7Y2FzZSIwIjpzZT0iMTgiLmNvbmNhdChzZSk7YnJlYWs7Y2FzZSIxIjpzZT0iMTkiLmNvbmNhdChzZSk7YnJlYWs7ZGVmYXVsdDpzZT0iMjAiLmNvbmNhdChzZSk7YnJlYWt9dmFyIG5lPSIiLmNvbmNhdChzZSwiLyIpLmNvbmNhdChELnNsaWNlKDIsNCksIi8iKS5jb25jYXQoaik7aWYoISgwLHIuZGVmYXVsdCkobmUsIllZWVkvTU0vREQiKSlyZXR1cm4hMX1mb3IodmFyIHRlPTExMDEsRWU9WzEsNiwzLDcsOSwxMCw1LDgsNCwyXSxTZT0wO1NlPEQubGVuZ3RoLTE7U2UrKyl0ZS09cGFyc2VJbnQoRFtTZV0sMTApKkVlW1NlXTtyZXR1cm4gcGFyc2VJbnQoRFsxMF0sMTApPT09dGUlMTF9cmV0dXJuITB9ZnVuY3Rpb24gZWUoRCl7aWYoRC5sZW5ndGghPT05KXtmb3IodmFyIGo9RC50b1VwcGVyQ2FzZSgpLnNwbGl0KCIiKTtqLmxlbmd0aDw4OylqLnVuc2hpZnQoMCk7c3dpdGNoKERbN10pe2Nhc2UiQSI6Y2FzZSJQIjppZihwYXJzZUludChqWzZdLDEwKT09PTApcmV0dXJuITE7YnJlYWs7ZGVmYXVsdDp7dmFyIFg9cGFyc2VJbnQoai5qb2luKCIiKS5zbGljZSgwLDUpLDEwKTtpZihYPjMyZTMpcmV0dXJuITE7dmFyIHNlPXBhcnNlSW50KGouam9pbigiIikuc2xpY2UoNSw3KSwxMCk7aWYoWD09PXNlKXJldHVybiExfX19cmV0dXJuITB9ZnVuY3Rpb24gZ2UoRCl7cmV0dXJuIHMucmV2ZXJzZU11bHRpcGx5QW5kU3VtKEQuc3BsaXQoIiIpLnNsaWNlKDAsOCkubWFwKGZ1bmN0aW9uKGope3JldHVybiBwYXJzZUludChqLDEwKX0pLDkpJTExPT09cGFyc2VJbnQoRFs4XSwxMCl9ZnVuY3Rpb24gVGUoRCl7aWYoRC5sZW5ndGg9PT0xMCl7Zm9yKHZhciBqPVs2LDUsNywyLDMsNCw1LDYsN10sWD0wLHNlPTA7c2U8ai5sZW5ndGg7c2UrKylYKz1wYXJzZUludChEW3NlXSwxMCkqaltzZV07cmV0dXJuIFglPTExLFg9PT0xMD8hMTpYPT09cGFyc2VJbnQoRFs5XSwxMCl9dmFyIG5lPUQuc2xpY2UoMCwyKSx0ZT1wYXJzZUludChELnNsaWNlKDIsNCksMTApO3RlPjgwPyhuZT0iMTgiLmNvbmNhdChuZSksdGUtPTgwKTp0ZT42MD8obmU9IjIyIi5jb25jYXQobmUpLHRlLT02MCk6dGU+NDA/KG5lPSIyMSIuY29uY2F0KG5lKSx0ZS09NDApOnRlPjIwPyhuZT0iMjAiLmNvbmNhdChuZSksdGUtPTIwKTpuZT0iMTkiLmNvbmNhdChuZSksdGU8MTAmJih0ZT0iMCIuY29uY2F0KHRlKSk7dmFyIEVlPSIiLmNvbmNhdChuZSwiLyIpLmNvbmNhdCh0ZSwiLyIpLmNvbmNhdChELnNsaWNlKDQsNikpO2lmKCEoMCxyLmRlZmF1bHQpKEVlLCJZWVlZL01NL0REIikpcmV0dXJuITE7Zm9yKHZhciBTZT0wLFVlPTEsVmU9MDtWZTxELmxlbmd0aC0xO1ZlKyspU2UrPXBhcnNlSW50KERbVmVdLDEwKSpVZSUxMCxVZSs9MixVZT4xMD9VZT0xOlVlPT09NSYmKFVlKz0yKTtyZXR1cm4gU2U9MTAtU2UlMTAsU2U9PT1wYXJzZUludChEWzEwXSwxMCl9ZnVuY3Rpb24gcGUoRCl7aWYoRC5sZW5ndGg9PT0xMSl7dmFyIGosWDtpZihqPTAsRD09PSIxMTExMTExMTExMSJ8fEQ9PT0iMjIyMjIyMjIyMjIifHxEPT09IjMzMzMzMzMzMzMzInx8RD09PSI0NDQ0NDQ0NDQ0NCJ8fEQ9PT0iNTU1NTU1NTU1NTUifHxEPT09IjY2NjY2NjY2NjY2Inx8RD09PSI3Nzc3Nzc3Nzc3NyJ8fEQ9PT0iODg4ODg4ODg4ODgifHxEPT09Ijk5OTk5OTk5OTk5Inx8RD09PSIwMDAwMDAwMDAwMCIpcmV0dXJuITE7Zm9yKHZhciBzZT0xO3NlPD05O3NlKyspais9cGFyc2VJbnQoRC5zdWJzdHJpbmcoc2UtMSxzZSksMTApKigxMS1zZSk7aWYoWD1qKjEwJTExLFg9PT0xMCYmKFg9MCksWCE9PXBhcnNlSW50KEQuc3Vic3RyaW5nKDksMTApLDEwKSlyZXR1cm4hMTtqPTA7Zm9yKHZhciBuZT0xO25lPD0xMDtuZSsrKWorPXBhcnNlSW50KEQuc3Vic3RyaW5nKG5lLTEsbmUpLDEwKSooMTItbmUpO3JldHVybiBYPWoqMTAlMTEsWD09PTEwJiYoWD0wKSxYPT09cGFyc2VJbnQoRC5zdWJzdHJpbmcoMTAsMTEpLDEwKX1pZihEPT09IjAwMDAwMDAwMDAwMDAwInx8RD09PSIxMTExMTExMTExMTExMSJ8fEQ9PT0iMjIyMjIyMjIyMjIyMjIifHxEPT09IjMzMzMzMzMzMzMzMzMzInx8RD09PSI0NDQ0NDQ0NDQ0NDQ0NCJ8fEQ9PT0iNTU1NTU1NTU1NTU1NTUifHxEPT09IjY2NjY2NjY2NjY2NjY2Inx8RD09PSI3Nzc3Nzc3Nzc3Nzc3NyJ8fEQ9PT0iODg4ODg4ODg4ODg4ODgifHxEPT09Ijk5OTk5OTk5OTk5OTk5IilyZXR1cm4hMTtmb3IodmFyIHRlPUQubGVuZ3RoLTIsRWU9RC5zdWJzdHJpbmcoMCx0ZSksU2U9RC5zdWJzdHJpbmcodGUpLFVlPTAsVmU9dGUtNyx3dD10ZTt3dD49MTt3dC0tKVVlKz1FZS5jaGFyQXQodGUtd3QpKlZlLFZlLT0xLFZlPDImJihWZT05KTt2YXIgeHI9VWUlMTE8Mj8wOjExLVVlJTExO2lmKHhyIT09cGFyc2VJbnQoU2UuY2hhckF0KDApLDEwKSlyZXR1cm4hMTt0ZSs9MSxFZT1ELnN1YnN0cmluZygwLHRlKSxVZT0wLFZlPXRlLTc7Zm9yKHZhciB1cj10ZTt1cj49MTt1ci0tKVVlKz1FZS5jaGFyQXQodGUtdXIpKlZlLFZlLT0xLFZlPDImJihWZT05KTtyZXR1cm4geHI9VWUlMTE8Mj8wOjExLVVlJTExLHhyPT09cGFyc2VJbnQoU2UuY2hhckF0KDEpLDEwKX1mdW5jdGlvbiBmZShEKXt2YXIgaj0xMS1zLnJldmVyc2VNdWx0aXBseUFuZFN1bShELnNwbGl0KCIiKS5zbGljZSgwLDgpLm1hcChmdW5jdGlvbihYKXtyZXR1cm4gcGFyc2VJbnQoWCwxMCl9KSw5KSUxMTtyZXR1cm4gaj45P3BhcnNlSW50KERbOF0sMTApPT09MDpqPT09cGFyc2VJbnQoRFs4XSwxMCl9ZnVuY3Rpb24gZGUoRCl7aWYoRC5zbGljZSgwLDQpIT09IjkwMDAiKXt2YXIgaj1ELnNsaWNlKDEsMyk7c3dpdGNoKERbMF0pe2Nhc2UiMSI6Y2FzZSIyIjpqPSIxOSIuY29uY2F0KGopO2JyZWFrO2Nhc2UiMyI6Y2FzZSI0IjpqPSIxOCIuY29uY2F0KGopO2JyZWFrO2Nhc2UiNSI6Y2FzZSI2IjpqPSIyMCIuY29uY2F0KGopO2JyZWFrfXZhciBYPSIiLmNvbmNhdChqLCIvIikuY29uY2F0KEQuc2xpY2UoMyw1KSwiLyIpLmNvbmNhdChELnNsaWNlKDUsNykpO2lmKFgubGVuZ3RoPT09OCl7aWYoISgwLHIuZGVmYXVsdCkoWCwiWVkvTU0vREQiKSlyZXR1cm4hMX1lbHNlIGlmKCEoMCxyLmRlZmF1bHQpKFgsIllZWVkvTU0vREQiKSlyZXR1cm4hMTtmb3IodmFyIHNlPUQuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihTZSl7cmV0dXJuIHBhcnNlSW50KFNlLDEwKX0pLG5lPVsyLDcsOSwxLDQsNiwzLDUsOCwyLDcsOV0sdGU9MCxFZT0wO0VlPG5lLmxlbmd0aDtFZSsrKXRlKz1zZVtFZV0qbmVbRWVdO3JldHVybiB0ZSUxMT09PTEwP3NlWzEyXT09PTE6c2VbMTJdPT09dGUlMTF9cmV0dXJuITB9ZnVuY3Rpb24gQmUoRCl7aWYoRC5sZW5ndGg9PT05KXtpZihEPUQucmVwbGFjZSgvXFcvLCIiKSxELnNsaWNlKDYpPT09IjAwMCIpcmV0dXJuITE7dmFyIGo9cGFyc2VJbnQoRC5zbGljZSgwLDIpLDEwKTtpZihqPjUzKXJldHVybiExO2o8MTA/aj0iMTkwIi5jb25jYXQoaik6aj0iMTkiLmNvbmNhdChqKTt2YXIgWD1wYXJzZUludChELnNsaWNlKDIsNCksMTApO1g+NTAmJihYLT01MCksWDwxMCYmKFg9IjAiLmNvbmNhdChYKSk7dmFyIHNlPSIiLmNvbmNhdChqLCIvIikuY29uY2F0KFgsIi8iKS5jb25jYXQoRC5zbGljZSg0LDYpKTtpZighKDAsci5kZWZhdWx0KShzZSwiWVlZWS9NTS9ERCIpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIEtlKEQpe3ZhciBqPTExLXMucmV2ZXJzZU11bHRpcGx5QW5kU3VtKEQuc3BsaXQoIiIpLnNsaWNlKDAsNykubWFwKGZ1bmN0aW9uKFgpe3JldHVybiBwYXJzZUludChYLDEwKX0pLDgpJTExO3JldHVybiBqPT09MTA/cGFyc2VJbnQoRFs3XSwxMCk9PT0wOmo9PT1wYXJzZUludChEWzddLDEwKX1mdW5jdGlvbiBRZShEKXt2YXIgaj1ELnNsaWNlKDApO0QubGVuZ3RoPjExJiYoaj1qLnNsaWNlKDIpKTt2YXIgWD0iIixzZT1qLnNsaWNlKDIsNCksbmU9cGFyc2VJbnQoai5zbGljZSg0LDYpLDEwKTtpZihELmxlbmd0aD4xMSlYPUQuc2xpY2UoMCw0KTtlbHNlIGlmKFg9RC5zbGljZSgwLDIpLEQubGVuZ3RoPT09MTEmJm5lPDYwKXt2YXIgdGU9bmV3IERhdGUoKS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCksRWU9cGFyc2VJbnQodGUuc2xpY2UoMCwyKSwxMCk7aWYodGU9cGFyc2VJbnQodGUsMTApLERbNl09PT0iLSIpcGFyc2VJbnQoIiIuY29uY2F0KEVlKS5jb25jYXQoWCksMTApPnRlP1g9IiIuY29uY2F0KEVlLTEpLmNvbmNhdChYKTpYPSIiLmNvbmNhdChFZSkuY29uY2F0KFgpO2Vsc2UgaWYoWD0iIi5jb25jYXQoRWUtMSkuY29uY2F0KFgpLHRlLXBhcnNlSW50KFgsMTApPDEwMClyZXR1cm4hMX1uZT42MCYmKG5lLT02MCksbmU8MTAmJihuZT0iMCIuY29uY2F0KG5lKSk7dmFyIFNlPSIiLmNvbmNhdChYLCIvIikuY29uY2F0KHNlLCIvIikuY29uY2F0KG5lKTtpZihTZS5sZW5ndGg9PT04KXtpZighKDAsci5kZWZhdWx0KShTZSwiWVkvTU0vREQiKSlyZXR1cm4hMX1lbHNlIGlmKCEoMCxyLmRlZmF1bHQpKFNlLCJZWVlZL01NL0REIikpcmV0dXJuITE7cmV0dXJuIHMubHVobkNoZWNrKEQucmVwbGFjZSgvXFcvLCIiKSl9ZnVuY3Rpb24gcnQoRCl7Zm9yKHZhciBqPUQuc3BsaXQoIiIpLm1hcChmdW5jdGlvbih0ZSl7cmV0dXJuIHBhcnNlSW50KHRlLDEwKX0pLFg9Wy0xLDUsNyw5LDQsNiwxMCw1LDddLHNlPTAsbmU9MDtuZTxYLmxlbmd0aDtuZSsrKXNlKz1qW25lXSpYW25lXTtyZXR1cm4gc2UlMTE9PT0xMD9qWzldPT09MDpqWzldPT09c2UlMTF9dmFyIEllPXsiYmctQkciOi9eXGR7MTB9JC8sImNzLUNaIjovXlxkezZ9XC97MCwxfVxkezMsNH0kLywiZGUtQVQiOi9eXGR7OX0kLywiZGUtREUiOi9eWzEtOV1cZHsxMH0kLywiZGstREsiOi9eXGR7Nn0tezAsMX1cZHs0fSQvLCJlbC1DWSI6L15bMDldXGR7N31bQS1aXSQvLCJlbC1HUiI6L14oWzAtNF18WzctOV0pXGR7OH0kLywiZW4tQ0EiOi9eXGR7OX0kLywiZW4tR0IiOi9eXGR7MTB9JHxeKD8hR0J8Tkt8VE58WlopKD8hW0RGSVFVVl0pW0EtWl0oPyFbREZJUVVWT10pW0EtWl1cZHs2fVtBQkNEIF0kL2ksImVuLUlFIjovXlxkezd9W0EtV11bQS1JV117MCwxfSQvaSwiZW4tVVMiOi9eXGR7Mn1bLSBdezAsMX1cZHs3fSQvLCJlcy1BUiI6LygyMHwyM3wyNHwyN3wzMHwzM3wzNClbMC05XXs4fVswLTldLywiZXMtRVMiOi9eKFxkezAsOH18W1hZWktMTV1cZHs3fSlbQS1ISi1OUC1UVi1aXSQvaSwiZXQtRUUiOi9eWzEtNl1cZHs2fSgwMFsxLTldfDBbMS05XVswLTldfFsxLTZdWzAtOV17Mn18NzBbMC05XXw3MTApXGQkLywiZmktRkkiOi9eXGR7Nn1bLStBXVxkezN9WzAtOUEtRkhKLU5QUi1ZXSQvaSwiZnItQkUiOi9eXGR7MTF9JC8sImZyLUZSIjovXlswLTNdXGR7MTJ9JHxeWzAtM11cZFxzXGR7Mn0oXHNcZHszfSl7M30kLywiZnItTFUiOi9eXGR7MTN9JC8sImhyLUhSIjovXlxkezExfSQvLCJodS1IVSI6L144XGR7OX0kLywiaXQtSVQiOi9eW0EtWl17Nn1bTC1OUC1WMC05XXsyfVtBLUVITE1QUlNUXVtMLU5QLVYwLTldezJ9W0EtSUxNWl1bTC1OUC1WMC05XXszfVtBLVpdJC9pLCJsdi1MViI6L15cZHs2fS17MCwxfVxkezV9JC8sIm10LU1UIjovXlxkezMsN31bQVBNR0xIQlpdJHxeKFsxLThdKVwxXGR7N30kL2ksIm5sLU5MIjovXlxkezl9JC8sInBsLVBMIjovXlxkezEwLDExfSQvLCJwdC1CUiI6Lyg/Ol5cZHsxMX0kKXwoPzpeXGR7MTR9JCkvLCJwdC1QVCI6L15cZHs5fSQvLCJyby1STyI6L15cZHsxM30kLywic2stU0siOi9eXGR7Nn1cL3swLDF9XGR7Myw0fSQvLCJzbC1TSSI6L15bMS05XVxkezd9JC8sInN2LVNFIjovXihcZHs2fVstK117MCwxfVxkezR9fCgxOHwxOXwyMClcZHs2fVstK117MCwxfVxkezR9KSQvLCJ1ay1VQSI6L15cZHsxMH0kL307SWVbImxiLUxVIl09SWVbImZyLUxVIl0sSWVbImx0LUxUIl09SWVbImV0LUVFIl0sSWVbIm5sLUJFIl09SWVbImZyLUJFIl0sSWVbImZyLUNBIl09SWVbImVuLUNBIl07dmFyIE1lPXsiYmctQkciOlcsImNzLUNaIjpBLCJkZS1BVCI6bSwiZGUtREUiOncsImRrLURLIjpCLCJlbC1DWSI6aywiZWwtR1IiOlYsImVuLUNBIjpnLCJlbi1JRSI6TCwiZW4tVVMiOkUsImVzLUFSIjpDLCJlcy1FUyI6RiwiZXQtRUUiOiQsImZpLUZJIjpPLCJmci1CRSI6UiwiZnItRlIiOngsImZyLUxVIjp2LCJoci1IUiI6XywiaHUtSFUiOk0sIml0LUlUIjpxLCJsdi1MViI6USwibXQtTVQiOmVlLCJubC1OTCI6Z2UsInBsLVBMIjpUZSwicHQtQlIiOnBlLCJwdC1QVCI6ZmUsInJvLVJPIjpkZSwic2stU0siOkJlLCJzbC1TSSI6S2UsInN2LVNFIjpRZSwidWstVUEiOnJ0fTtNZVsibGItTFUiXT1NZVsiZnItTFUiXSxNZVsibHQtTFQiXT1NZVsiZXQtRUUiXSxNZVsibmwtQkUiXT1NZVsiZnItQkUiXSxNZVsiZnItQ0EiXT1NZVsiZW4tQ0EiXTt2YXIgTmU9L1stXFxcLyFAIyQlXF4mXCpcKFwpXCtcPVxbXF1dKy9nLF9lPXsiZGUtQVQiOk5lLCJkZS1ERSI6L1tcL1xcXS9nLCJmci1CRSI6TmV9O19lWyJubC1CRSJdPV9lWyJmci1CRSJdO2Z1bmN0aW9uIENlKEQpe3ZhciBqPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXToiZW4tVVMiOygwLGEuZGVmYXVsdCkoRCk7dmFyIFg9RC5zbGljZSgwKTtpZihqIGluIEllKXJldHVybiBqIGluIF9lJiYoWD1YLnJlcGxhY2UoX2Vbal0sIiIpKSxJZVtqXS50ZXN0KFgpP2ogaW4gTWU/TWVbal0oWCk6ITA6ITE7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxvY2FsZSAnIi5jb25jYXQoaiwiJyIpKX1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKE5mLE5mLmV4cG9ydHMpO3ZhciBsdz1OZi5leHBvcnRzLFFhPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShRYSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7UWEuZGVmYXVsdD1wdztRYS5sb2NhbGVzPXZvaWQgMDt2YXIgZnc9ZHcoaWUpO2Z1bmN0aW9uIGR3KG4pe3JldHVybiBuJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufX12YXIgdXQ9eyJhbS1BTSI6L14oXCs/Mzc0fDApKDMzfDRbMTM0XXw1NXw3N3w4OHw5WzEzLTY4OV0pXGR7Nn0kLywiYXItQUUiOi9eKChcKz85NzEpfDApPzVbMDI0NTY4XVxkezd9JC8sImFyLUJIIjovXihcKz85NzMpPygzfDYpXGR7N30kLywiYXItRFoiOi9eKFwrPzIxM3wwKSg1fDZ8NylcZHs4fSQvLCJhci1MQiI6L14oXCs/OTYxKT8oKDN8ODEpXGR7Nn18N1xkezd9KSQvLCJhci1FRyI6L14oKFwrPzIwKXwwKT8xWzAxMjVdXGR7OH0kLywiYXItSVEiOi9eKFwrPzk2NHwwKT83WzAtOV1cZHs4fSQvLCJhci1KTyI6L14oXCs/OTYyfDApPzdbNzg5XVxkezd9JC8sImFyLUtXIjovXihcKz85NjUpKFs1NjldXGR7N318NDFcZHs2fSkkLywiYXItTFkiOi9eKChcKz8yMTgpfDApPyg5WzEtNl1cZHs3fXxbMS04XVxkezcsOX0pJC8sImFyLU1BIjovXig/Oig/OlwrfDAwKTIxMnwwKVs1LTddXGR7OH0kLywiYXItT00iOi9eKChcK3wwMCk5NjgpPyhbNzldWzEtOV0pXGR7Nn0kLywiYXItUFMiOi9eKFwrPzk3MHwwKTVbNnw5XShcZHs3fSkkLywiYXItU0EiOi9eKCE/KFwrPzk2Nil8MCk/NVxkezh9JC8sImFyLVNEIjovXigoXCs/MjQ5KXwwKT8oOVswMTIzNjldfDFbMDEyXSlcZHs3fSQvLCJhci1TWSI6L14oIT8oXCs/OTYzKXwwKT85XGR7OH0kLywiYXItVE4iOi9eKFwrPzIxNik/WzI0NTldXGR7N30kLywiYXotQVoiOi9eKFwrOTk0fDApKDEwfDVbMDE1XXw3WzA3XXw5OSlcZHs3fSQvLCJhci1RQSI6L14oXCs/OTc0fDApPyhbMzU2N11cZHs3fSkkLywiYnMtQkEiOi9eKCgoKFwrfDAwKTM4NzYpfDA2KSkoKChbMC0zXXxbNS02XSlcZHs2fSl8KDRcZHs3fSkpJC8sImJlLUJZIjovXihcKz8zNzUpPygyNHwyNXwyOXwzM3w0NClcZHs3fSQvLCJiZy1CRyI6L14oXCs/MzU5fDApPzhbNzg5XVxkezd9JC8sImJuLUJEIjovXihcKz84ODB8MCkxWzEzNDU2Nzg5XVswLTldezh9JC8sImNhLUFEIjovXihcKzM3Nik/WzM0Nl1cZHs1fSQvLCJjcy1DWiI6L14oXCs/NDIwKT8gP1sxLTldWzAtOV17Mn0gP1swLTldezN9ID9bMC05XXszfSQvLCJkYS1ESyI6L14oXCs/NDUpP1xzP1xkezJ9XHM/XGR7Mn1ccz9cZHsyfVxzP1xkezJ9JC8sImRlLURFIjovXigoXCs0OXwwKTEpKDVbMC0yNS05XVxkfDYoWzIzXXwwXGQ/KXw3KFswLTU3LTldfDZcZCkpXGR7Nyw5fSQvLCJkZS1BVCI6L14oXCs0M3wwKVxkezEsNH1cZHszLDEyfSQvLCJkZS1DSCI6L14oXCs0MXwwKShbMS05XSlcZHsxLDl9JC8sImRlLUxVIjovXihcKzM1Mik/KCg2XGQxKVxkezZ9KSQvLCJkdi1NViI6L14oXCs/OTYwKT8oN1syLTldfDlbMS05XSlcZHs1fSQvLCJlbC1HUiI6L14oXCs/MzB8MCk/Nig4WzUtOV18OSg/IVsyNl0pWzAtOV0pXGR7N30kLywiZWwtQ1kiOi9eKFwrPzM1Nz8pPyg5KDl8N3w2fDV8NClcZHs2fSkkLywiZW4tQUkiOi9eKFwrPzF8MCkyNjQoPzoyKDM1fDkyKXw0KD86NlsxLTJdfDc2fDk3KXw1KD86M1s2LTldfDhbMS00XSl8Nyg/OjIoNHw5KXw3MikpXGR7NH0kLywiZW4tQVUiOi9eKFwrPzYxfDApNFxkezh9JC8sImVuLUFHIjovXig/OlwrMXwxKTI2OCg/OjQ2NHw3KD86MVszLTldfFsyOF1cZHwzWzAyNDZdfDY0fDdbMC02ODldKSlcZHs0fSQvLCJlbi1CTSI6L14oXCs/MSk/NDQxKCgoM3w3KVxkezZ9JCl8KDVbMC0zXVswLTldXGR7NH0kKXwoNTlcZHs1fSQpKS8sImVuLUJTIjovXihcKz8xWy1cc10/fDApP1woPzI0MlwpP1stXHNdP1xkezN9Wy1cc10/XGR7NH0kLywiZW4tR0IiOi9eKFwrPzQ0fDApN1sxLTldXGR7OH0kLywiZW4tR0ciOi9eKFwrPzQ0fDApMTQ4MVxkezZ9JC8sImVuLUdIIjovXihcKzIzM3wwKSgyMHw1MHwyNHw1NHwyN3w1N3wyNnw1NnwyM3w1M3wyOHw1NXw1OSlcZHs3fSQvLCJlbi1HWSI6L14oXCs1OTJ8MCk2XGR7Nn0kLywiZW4tSEsiOi9eKFwrPzg1MlstXHNdPyk/WzQ1Njc4OV1cZHszfVstXHNdP1xkezR9JC8sImVuLU1PIjovXihcKz84NTNbLVxzXT8pP1s2XVxkezN9Wy1cc10/XGR7NH0kLywiZW4tSUUiOi9eKFwrPzM1M3wwKThbMzU2Nzg5XVxkezd9JC8sImVuLUlOIjovXihcKz85MXwwKT9bNjc4OV1cZHs5fSQvLCJlbi1KTSI6L14oXCs/ODc2KT9cZHs3fSQvLCJlbi1LRSI6L14oXCs/MjU0fDApKDd8MSlcZHs4fSQvLCJmci1DRiI6L14oXCs/MjM2fCA/KSg3MHw3NXw3N3w3MnwyMXwyMilcZHs2fSQvLCJlbi1TUyI6L14oXCs/MjExfDApKDlbMTI1N10pXGR7N30kLywiZW4tS0kiOi9eKChcKzY4Nnw2ODYpPyk/KCApPygoNnw3KSgyfDN8OClbMC05XXs2fSkkLywiZW4tS04iOi9eKD86XCsxfDEpODY5KD86NDZcZHw0OFs4OV18NTVbNi04XXw2NlxkfDc2WzAyLTddKVxkezR9JC8sImVuLUxTIjovXihcKz8yNjYpKDIyfDI4fDU3fDU4fDU5fDI3fDUyKVxkezZ9JC8sImVuLU1UIjovXihcKz8zNTZ8MCk/KDk5fDc5fDc3fDIxfDI3fDIyfDI1KVswLTldezZ9JC8sImVuLU1VIjovXihcKz8yMzB8MCk/XGR7OH0kLywiZW4tTVciOi9eKFwrPzI2NXwwKSgoKDc3fDg4fDMxfDk5fDk4fDIxKVxkezd9KXwoKCgxMTEpfDEpXGR7Nn0pfCgzMjAwMFxkezR9KSkkLywiZW4tTkEiOi9eKFwrPzI2NHwwKSg2fDgpXGR7N30kLywiZW4tTkciOi9eKFwrPzIzNHwwKT9bNzg5XVxkezl9JC8sImVuLU5aIjovXihcKz82NHwwKVsyOF1cZHs3LDl9JC8sImVuLVBHIjovXihcKz82NzV8MCk/KDdcZHw4WzE4XSlcZHs2fSQvLCJlbi1QSyI6L14oKDAwfFwrKT85MnwwKTNbMC02XVxkezh9JC8sImVuLVBIIjovXigwOXxcKzYzOSlcZHs5fSQvLCJlbi1SVyI6L14oXCs/MjUwfDApP1s3XVxkezh9JC8sImVuLVNHIjovXihcKzY1KT9bMzY4OV1cZHs3fSQvLCJlbi1TTCI6L14oXCs/MjMyfDApXGR7OH0kLywiZW4tVFoiOi9eKFwrPzI1NXwwKT9bNjddXGR7OH0kLywiZW4tVUciOi9eKFwrPzI1NnwwKT9bN11cZHs4fSQvLCJlbi1VUyI6L14oKFwrMXwxKT8oIHwtKT8pPyhcKFsyLTldWzAtOV17Mn1cKXxbMi05XVswLTldezJ9KSggfC0pPyhbMi05XVswLTldezJ9KCB8LSk/WzAtOV17NH0pJC8sImVuLVpBIjovXihcKz8yN3wwKVxkezl9JC8sImVuLVpNIjovXihcKz8yNik/MFs3OV1bNTY3XVxkezd9JC8sImVuLVpXIjovXihcKzI2MylbMC05XXs5fSQvLCJlbi1CVyI6L14oXCs/MjY3KT8oN1sxLThdezF9KVxkezZ9JC8sImVzLUFSIjovXlwrPzU0OSgxMXxbMjM2OF1cZClcZHs4fSQvLCJlcy1CTyI6L14oXCs/NTkxKT8oNnw3KVxkezd9JC8sImVzLUNPIjovXihcKz81Nyk/MygwKDB8MXwyfDR8NSl8MVxkfDJbMC00XXw1KDB8MSkpXGR7N30kLywiZXMtQ0wiOi9eKFwrPzU2fDApWzItOV1cZHsxfVxkezd9JC8sImVzLUNSIjovXihcKzUwNik/WzItOF1cZHs3fSQvLCJlcy1DVSI6L14oXCs1M3wwMDUzKT81XGR7N30kLywiZXMtRE8iOi9eKFwrPzEpPzhbMDI0XTlcZHs3fSQvLCJlcy1ITiI6L14oXCs/NTA0KT9bOXw4fDN8Ml1cZHs3fSQvLCJlcy1FQyI6L14oXCs/NTkzfDApKFsyLTddfDlbMi05XSlcZHs3fSQvLCJlcy1FUyI6L14oXCs/MzQpP1s2fDddXGR7OH0kLywiZXMtR1QiOi9eKFwrPzUwMik/WzJ8Nnw3XVxkezd9JC8sImVzLVBFIjovXihcKz81MSk/OVxkezh9JC8sImVzLU1YIjovXihcKz81Mik/KDF8MDEpP1xkezEwLDExfSQvLCJlcy1OSSI6L14oXCs/NTA1KVxkezcsOH0kLywiZXMtUEEiOi9eKFwrPzUwNylcZHs3LDh9JC8sImVzLVBZIjovXihcKz81OTV8MCk5Wzk4NzZdXGR7N30kLywiZXMtU1YiOi9eKFwrPzUwMyk/WzY3XVxkezd9JC8sImVzLVVZIjovXihcKzU5OHwwKTlbMS05XVtcZF17Nn0kLywiZXMtVkUiOi9eKFwrPzU4KT8oMnw0KVxkezl9JC8sImV0LUVFIjovXihcKz8zNzIpP1xzPyg1fDhbMS00XSlccz8oWzAtOV1ccz8pezYsN30kLywiZmEtSVIiOi9eKFwrPzk4W1wtXHNdP3wwKTlbMC0zOV1cZFtcLVxzXT9cZHszfVtcLVxzXT9cZHs0fSQvLCJmaS1GSSI6L14oXCs/MzU4fDApXHM/KDRbMC02XXw1MClccz8oXGRccz8pezQsOH0kLywiZmotRkoiOi9eKFwrPzY3OSk/XHM/XGR7M31ccz9cZHs0fSQvLCJmby1GTyI6L14oXCs/Mjk4KT9ccz9cZHsyfVxzP1xkezJ9XHM/XGR7Mn0kLywiZnItQkYiOi9eKFwrMjI2fDApWzY3XVxkezd9JC8sImZyLUJKIjovXihcKzIyOSlcZHs4fSQvLCJmci1DRCI6L14oXCs/MjQzfDApPyg4fDkpXGR7OH0kLywiZnItQ00iOi9eKFwrPzIzNyk2WzAtOV17OH0kLywiZnItRlIiOi9eKFwrPzMzfDApWzY3XVxkezh9JC8sImZyLUdGIjovXihcKz81OTR8MHwwMDU5NClbNjddXGR7OH0kLywiZnItR1AiOi9eKFwrPzU5MHwwfDAwNTkwKVs2N11cZHs4fSQvLCJmci1NUSI6L14oXCs/NTk2fDB8MDA1OTYpWzY3XVxkezh9JC8sImZyLVBGIjovXihcKz82ODkpPzhbNzg5XVxkezZ9JC8sImZyLVJFIjovXihcKz8yNjJ8MHwwMDI2MilbNjddXGR7OH0kLywiZnItV0YiOi9eKFwrNjgxKT9cZHs2fSQvLCJoZS1JTCI6L14oXCs5NzJ8MCkoWzIzNDg5XXw1WzAxMjM0NTY4OV18NzcpWzEtOV1cZHs2fSQvLCJodS1IVSI6L14oXCs/MzZ8MDYpKDIwfDMwfDMxfDUwfDcwKVxkezd9JC8sImlkLUlEIjovXihcKz82MnwwKTgoMVsxMjM0NTY3ODldfDJbMTIzOF18M1sxMjM4XXw1WzEyMzU2Nzg5XXw3Wzc4XXw5WzU2Nzg5XXw4WzEyMzQ1Njc4OV0pKFtccz98XGRdezUsMTF9KSQvLCJpci1JUiI6L14oXCs5OHwwKT85XGR7OX0kLywiaXQtSVQiOi9eKFwrPzM5KT9ccz8zXGR7Mn0gP1xkezYsN30kLywiaXQtU00iOi9eKChcKzM3OCl8KDA1NDkpfChcKzM5MDU0OSl8KFwrMzc4MDU0OSkpPzZcZHs1LDl9JC8sImphLUpQIjovXihcKzgxWyBcLV0/KFwoMFwpKT98MClbNjc4OV0wWyBcLV0/XGR7NH1bIFwtXT9cZHs0fSQvLCJrYS1HRSI6L14oXCs/OTk1KT8oNzlcZHs3fXw1XGR7OH0pJC8sImtrLUtaIjovXihcKz83fDgpPzdcZHs5fSQvLCJrbC1HTCI6L14oXCs/Mjk5KT9ccz9cZHsyfVxzP1xkezJ9XHM/XGR7Mn0kLywia28tS1IiOi9eKChcKz84MilbIFwtXT8pPzA/MShbMHwxfDZ8N3w4fDldezF9KVsgXC1dP1xkezMsNH1bIFwtXT9cZHs0fSQvLCJreS1LRyI6L14oXCs5OTZccz8pPygyMlswLTldfDUwWzAtOV18NTVbMC05XXw3MFswLTldfDc1WzAtOV18NzdbMC05XXw4ODB8OTkwfDk5NXw5OTZ8OTk3fDk5OClccz9cZHszfVxzP1xkezN9JC8sImx0LUxUIjovXihcKzM3MHw4KVxkezh9JC8sImx2LUxWIjovXihcKz8zNzEpMlxkezd9JC8sIm1nLU1HIjovXigoXCs/MjYxfDApKDJ8MylcZCk/XGR7N30kLywibW4tTU4iOi9eKFwrfDAwfDAxMSk/OTc2KDc3fDgxfDg4fDkxfDk0fDk1fDk2fDk5KVxkezZ9JC8sIm15LU1NIjovXihcKz85NTl8MDl8OSkoMls1LTddfDNbMS0yXXw0WzAtNV18Nls2LTldfDdbNS05XXw5WzYtOV0pWzAtOV17N30kLywibXMtTVkiOi9eKFwrPzYwfDApMSgoWzAxNDVdKC18XHMpP1xkezcsOH0pfChbMjM2LTldKC18XHMpP1xkezd9KSkkLywibXotTVoiOi9eKFwrPzI1OCk/OFsyMzQ1NjddXGR7N30kLywibmItTk8iOi9eKFwrPzQ3KT9bNDldXGR7N30kLywibmUtTlAiOi9eKFwrPzk3Nyk/OVs3OF1cZHs4fSQvLCJubC1CRSI6L14oXCs/MzJ8MCk0XGR7OH0kLywibmwtTkwiOi9eKCgoXCt8MDApPzMxXCgwXCkpfCgoXCt8MDApPzMxKXwwKTZ7MX1cZHs4fSQvLCJubC1BVyI6L14oXCspPzI5Nyg1Nnw1OXw2NHw3M3w3NHw5OSlcZHs1fSQvLCJubi1OTyI6L14oXCs/NDcpP1s0OV1cZHs3fSQvLCJwbC1QTCI6L14oXCs/NDgpPyA/KFs1LThdXGR8NDUpID9cZHszfSA/XGR7Mn0gP1xkezJ9JC8sInB0LUJSIjovXigoXCs/NTVcID9bMS05XXsyfVwgPyl8KFwrPzU1XCA/XChbMS05XXsyfVwpXCA/KXwoMFsxLTldezJ9XCA/KXwoXChbMS05XXsyfVwpXCA/KXwoWzEtOV17Mn1cID8pKSgoXGR7NH1cLT9cZHs0fSl8KDlbMS05XXsxfVxkezN9XC0/XGR7NH0pKSQvLCJwdC1QVCI6L14oXCs/MzUxKT85WzEyMzZdXGR7N30kLywicHQtQU8iOi9eKFwrPzI0NCk/OVxkezh9JC8sInJvLU1EIjovXihcKz8zNzN8MCkoKDYoMHwxfDJ8Nnw3fDh8OSkpfCg3KDZ8N3w4fDkpKSlcZHs2fSQvLCJyby1STyI6L14oXCs/NDB8MClccz83XGR7Mn0oXC98XHN8XC58LSk/XGR7M30oXHN8XC58LSk/XGR7M30kLywicnUtUlUiOi9eKFwrPzd8OCk/OVxkezl9JC8sInNpLUxLIjovXig/OjB8OTR8XCs5NCk/KDcoMHwxfDJ8NHw1fDZ8N3w4KSggfC0pPylcZHs3fSQvLCJzbC1TSSI6L14oXCszODZccz98MCkoXGR7MX1ccz9cZHszfVxzP1xkezJ9XHM/XGR7Mn18XGR7Mn1ccz9cZHszfVxzP1xkezN9KSQvLCJzay1TSyI6L14oXCs/NDIxKT8gP1sxLTldWzAtOV17Mn0gP1swLTldezN9ID9bMC05XXszfSQvLCJzby1TTyI6L14oXCs/MjUyfDApKCg2WzAtOV0pXGR7N318KDdbMS05XSlcZHs3fSkkLywic3EtQUwiOi9eKFwrMzU1fDApNlsyLTldXGR7N30kLywic3ItUlMiOi9eKFwrMzgxNnwwNilbLSBcZF17NSw5fSQvLCJzdi1TRSI6L14oXCs/NDZ8MClbXHNcLV0/N1tcc1wtXT9bMDIzNjldKFtcc1wtXT9cZCl7N30kLywidGctVEoiOi9eKFwrPzk5Mik/WzVdWzVdXGR7N30kLywidGgtVEgiOi9eKFwrNjZ8NjZ8MClcZHs5fSQvLCJ0ci1UUiI6L14oXCs/OTB8MCk/NVxkezl9JC8sInRrLVRNIjovXihcKzk5M3w5OTN8OClcZHs4fSQvLCJ1ay1VQSI6L14oXCs/MzgpPzAoNTB8NlszNi04XXw3WzM1N118OVsxLTldKVxkezd9JC8sInV6LVVaIjovXihcKz85OTgpPyg2WzEyNS03OV18N1sxLTY5XXw4OHw5XGQpXGR7N30kLywidmktVk4iOi9eKChcKz84NCl8MCkoKDMoWzItOV0pKXwoNShbMjU2ODldKSl8KDcoWzB8Ni05XSkpfCg4KFsxLTldKSl8KDkoWzAtOV0pKSkoWzAtOV17N30pJC8sInpoLUNOIjovXigoXCt8MDApODYpPygxWzMtOV18OVsyOF0pXGR7OX0kLywiemgtVFciOi9eKFwrPzg4NlwtP3wwKT85XGR7OH0kLywiZHotQlQiOi9eKFwrPzk3NXwwKT8oMTd8MTZ8Nzd8MDIpXGR7Nn0kLywiYXItWUUiOi9eKCgoXCt8MDApOTY3N3wwPzcpWzAxMzddXGR7N318KChcK3wwMCk5Njd8MClbMS03XVxkezZ9KSQvLCJhci1FSCI6L14oXCs/MjEyfDApW1xzXC1dPyg1Mjg4fDUyODkpW1xzXC1dP1xkezV9JC8sImZhLUFGIjovXihcKzkzfDApPygyezF9WzAtOF17MX18WzMtNV17MX1bMC00XXsxfSkoXGR7N30pJC8sIm1rLU1LIjovXihcKz8zODl8MCk/KCg/OjJbMi05XVxkezZ9fCg/OjNbMS00XXw0WzItOF0pXGR7Nn18NTAwXGR7NX18NVsyLTldXGR7Nn18N1swLTldWzItOV1cZHs1fXw4WzEtOV1cZHs2fXw4MDBcZHs1fXw4MDA5XGR7NH0pKSQvfTt1dFsiZW4tQ0EiXT11dFsiZW4tVVMiXTt1dFsiZnItQ0EiXT11dFsiZW4tQ0EiXTt1dFsiZnItQkUiXT11dFsibmwtQkUiXTt1dFsiemgtSEsiXT11dFsiZW4tSEsiXTt1dFsiemgtTU8iXT11dFsiZW4tTU8iXTt1dFsiZ2EtSUUiXT11dFsiZW4tSUUiXTt1dFsiZnItQ0giXT11dFsiZGUtQ0giXTt1dFsiaXQtQ0giXT11dFsiZnItQ0giXTtmdW5jdGlvbiBwdyhuLGUsdCl7aWYoKDAsZncuZGVmYXVsdCkobiksdCYmdC5zdHJpY3RNb2RlJiYhbi5zdGFydHNXaXRoKCIrIikpcmV0dXJuITE7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZS5zb21lKGZ1bmN0aW9uKHIpe2lmKHV0Lmhhc093blByb3BlcnR5KHIpKXt2YXIgbz11dFtyXTtpZihvLnRlc3QobikpcmV0dXJuITB9cmV0dXJuITF9KTtpZihlIGluIHV0KXJldHVybiB1dFtlXS50ZXN0KG4pO2lmKCFlfHxlPT09ImFueSIpe2Zvcih2YXIgYSBpbiB1dClpZih1dC5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIHM9dXRbYV07aWYocy50ZXN0KG4pKXJldHVybiEwfXJldHVybiExfXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsb2NhbGUgJyIuY29uY2F0KGUsIiciKSl9UWEubG9jYWxlcz1PYmplY3Qua2V5cyh1dCk7dmFyIGtmPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PXI7dmFyIHQ9YShpZSk7ZnVuY3Rpb24gYShvKXtyZXR1cm4gbyYmby5fX2VzTW9kdWxlP286e2RlZmF1bHQ6b319dmFyIHM9L14oMHgpWzAtOWEtZl17NDB9JC9pO2Z1bmN0aW9uIHIobyl7cmV0dXJuKDAsdC5kZWZhdWx0KShvKSxzLnRlc3Qobyl9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShrZixrZi5leHBvcnRzKTt2YXIgaHc9a2YuZXhwb3J0cyxVZj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1pO3ZhciB0PXMocXQpLGE9cyhpZSk7ZnVuY3Rpb24gcyhjKXtyZXR1cm4gYyYmYy5fX2VzTW9kdWxlP2M6e2RlZmF1bHQ6Y319ZnVuY3Rpb24gcihjKXt2YXIgZj0iXFxkeyIuY29uY2F0KGMuZGlnaXRzX2FmdGVyX2RlY2ltYWxbMF0sIn0iKTtjLmRpZ2l0c19hZnRlcl9kZWNpbWFsLmZvckVhY2goZnVuY3Rpb24odyxCKXtCIT09MCYmKGY9IiIuY29uY2F0KGYsInxcXGR7IikuY29uY2F0KHcsIn0iKSl9KTt2YXIgZD0iKCIuY29uY2F0KGMuc3ltYm9sLnJlcGxhY2UoL1xXLyxmdW5jdGlvbih3KXtyZXR1cm4iXFwiLmNvbmNhdCh3KX0pLCIpIikuY29uY2F0KGMucmVxdWlyZV9zeW1ib2w/IiI6Ij8iKSxwPSItPyIsYj0iWzEtOV1cXGQqIixUPSJbMS05XVxcZHswLDJ9KFxcIi5jb25jYXQoYy50aG91c2FuZHNfc2VwYXJhdG9yLCJcXGR7M30pKiIpLFc9WyIwIixiLFRdLGc9IigiLmNvbmNhdChXLmpvaW4oInwiKSwiKT8iKSxBPSIoXFwiLmNvbmNhdChjLmRlY2ltYWxfc2VwYXJhdG9yLCIoIikuY29uY2F0KGYsIikpIikuY29uY2F0KGMucmVxdWlyZV9kZWNpbWFsPyIiOiI/IiksbT1nKyhjLmFsbG93X2RlY2ltYWx8fGMucmVxdWlyZV9kZWNpbWFsP0E6IiIpO3JldHVybiBjLmFsbG93X25lZ2F0aXZlcyYmIWMucGFyZW5zX2Zvcl9uZWdhdGl2ZXMmJihjLm5lZ2F0aXZlX3NpZ25fYWZ0ZXJfZGlnaXRzP20rPXA6Yy5uZWdhdGl2ZV9zaWduX2JlZm9yZV9kaWdpdHMmJihtPXArbSkpLGMuYWxsb3dfbmVnYXRpdmVfc2lnbl9wbGFjZWhvbGRlcj9tPSIoICg/IVxcLSkpPyIuY29uY2F0KG0pOmMuYWxsb3dfc3BhY2VfYWZ0ZXJfc3ltYm9sP209IiA/Ii5jb25jYXQobSk6Yy5hbGxvd19zcGFjZV9hZnRlcl9kaWdpdHMmJihtKz0iKCAoPyEkKSk/IiksYy5zeW1ib2xfYWZ0ZXJfZGlnaXRzP20rPWQ6bT1kK20sYy5hbGxvd19uZWdhdGl2ZXMmJihjLnBhcmVuc19mb3JfbmVnYXRpdmVzP209IihcXCgiLmNvbmNhdChtLCJcXCl8IikuY29uY2F0KG0sIikiKTpjLm5lZ2F0aXZlX3NpZ25fYmVmb3JlX2RpZ2l0c3x8Yy5uZWdhdGl2ZV9zaWduX2FmdGVyX2RpZ2l0c3x8KG09cCttKSksbmV3IFJlZ0V4cCgiXig/IS0/ICkoPz0uKlxcZCkiLmNvbmNhdChtLCIkIikpfXZhciBvPXtzeW1ib2w6IiQiLHJlcXVpcmVfc3ltYm9sOiExLGFsbG93X3NwYWNlX2FmdGVyX3N5bWJvbDohMSxzeW1ib2xfYWZ0ZXJfZGlnaXRzOiExLGFsbG93X25lZ2F0aXZlczohMCxwYXJlbnNfZm9yX25lZ2F0aXZlczohMSxuZWdhdGl2ZV9zaWduX2JlZm9yZV9kaWdpdHM6ITEsbmVnYXRpdmVfc2lnbl9hZnRlcl9kaWdpdHM6ITEsYWxsb3dfbmVnYXRpdmVfc2lnbl9wbGFjZWhvbGRlcjohMSx0aG91c2FuZHNfc2VwYXJhdG9yOiIsIixkZWNpbWFsX3NlcGFyYXRvcjoiLiIsYWxsb3dfZGVjaW1hbDohMCxyZXF1aXJlX2RlY2ltYWw6ITEsZGlnaXRzX2FmdGVyX2RlY2ltYWw6WzJdLGFsbG93X3NwYWNlX2FmdGVyX2RpZ2l0czohMX07ZnVuY3Rpb24gaShjLGYpe3JldHVybigwLGEuZGVmYXVsdCkoYyksZj0oMCx0LmRlZmF1bHQpKGYsbykscihmKS50ZXN0KGMpfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkoVWYsVWYuZXhwb3J0cyk7dmFyIGd3PVVmLmV4cG9ydHMsRGY9e2V4cG9ydHM6e319OyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9bzt2YXIgdD1hKGllKTtmdW5jdGlvbiBhKGkpe3JldHVybiBpJiZpLl9fZXNNb2R1bGU/aTp7ZGVmYXVsdDppfX12YXIgcz0vXihiYzF8dGIxfGJjMXB8dGIxcClbYWMtaGotbnAtejAyLTldezM5LDU4fSQvLHI9L14oMXwyfDN8bSlbQS1ISi1OUC1aYS1rbS16MS05XXsyNSwzOX0kLztmdW5jdGlvbiBvKGkpe3JldHVybigwLHQuZGVmYXVsdCkoaSkscy50ZXN0KGkpfHxyLnRlc3QoaSl9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShEZixEZi5leHBvcnRzKTt2YXIgYnc9RGYuZXhwb3J0cyxlaT17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZWksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2VpLmlzRnJlaWdodENvbnRhaW5lcklEPXZvaWQgMDtlaS5pc0lTTzYzNDY9d3k7dmFyIHl3PXh3KGllKTtmdW5jdGlvbiB4dyhuKXtyZXR1cm4gbiYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn19dmFyIFR3PS9eW0EtWl17M30oVVswLTldezd9KXwoW0osWl1bMC05XXs2LDd9KSQvLEF3PS9eWzAtOV0kLztmdW5jdGlvbiB3eShuKXtpZigoMCx5dy5kZWZhdWx0KShuKSxuPW4udG9VcHBlckNhc2UoKSwhVHcudGVzdChuKSlyZXR1cm4hMTtpZihuLmxlbmd0aD09PTExKXtmb3IodmFyIGU9MCx0PTA7dDxuLmxlbmd0aC0xO3QrKylpZihBdy50ZXN0KG5bdF0pKWUrPW5bdF0qTWF0aC5wb3coMix0KTtlbHNle3ZhciBhPXZvaWQgMCxzPW4uY2hhckNvZGVBdCh0KS01NTtzPDExP2E9czpzPj0xMSYmczw9MjA/YT0xMitzJTExOnM+PTIxJiZzPD0zMD9hPTIzK3MlMjE6YT0zNCtzJTMxLGUrPWEqTWF0aC5wb3coMix0KX12YXIgcj1lJTExO3JldHVybiByPT09MTAmJihyPTApLE51bWJlcihuW24ubGVuZ3RoLTFdKT09PXJ9cmV0dXJuITB9ZWkuaXNGcmVpZ2h0Q29udGFpbmVySUQ9d3k7dmFyICRmPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PXI7dmFyIHQ9YShpZSk7ZnVuY3Rpb24gYShvKXtyZXR1cm4gbyYmby5fX2VzTW9kdWxlP286e2RlZmF1bHQ6b319dmFyIHM9bmV3IFNldChbImFhIiwiYWIiLCJhZSIsImFmIiwiYWsiLCJhbSIsImFuIiwiYXIiLCJhcyIsImF2IiwiYXkiLCJheiIsImF6IiwiYmEiLCJiZSIsImJnIiwiYmgiLCJiaSIsImJtIiwiYm4iLCJibyIsImJyIiwiYnMiLCJjYSIsImNlIiwiY2giLCJjbyIsImNyIiwiY3MiLCJjdSIsImN2IiwiY3kiLCJkYSIsImRlIiwiZHYiLCJkeiIsImVlIiwiZWwiLCJlbiIsImVvIiwiZXMiLCJldCIsImV1IiwiZmEiLCJmZiIsImZpIiwiZmoiLCJmbyIsImZyIiwiZnkiLCJnYSIsImdkIiwiZ2wiLCJnbiIsImd1IiwiZ3YiLCJoYSIsImhlIiwiaGkiLCJobyIsImhyIiwiaHQiLCJodSIsImh5IiwiaHoiLCJpYSIsImlkIiwiaWUiLCJpZyIsImlpIiwiaWsiLCJpbyIsImlzIiwiaXQiLCJpdSIsImphIiwianYiLCJrYSIsImtnIiwia2kiLCJraiIsImtrIiwia2wiLCJrbSIsImtuIiwia28iLCJrciIsImtzIiwia3UiLCJrdiIsImt3Iiwia3kiLCJsYSIsImxiIiwibGciLCJsaSIsImxuIiwibG8iLCJsdCIsImx1IiwibHYiLCJtZyIsIm1oIiwibWkiLCJtayIsIm1sIiwibW4iLCJtciIsIm1zIiwibXQiLCJteSIsIm5hIiwibmIiLCJuZCIsIm5lIiwibmciLCJubCIsIm5uIiwibm8iLCJuciIsIm52IiwibnkiLCJvYyIsIm9qIiwib20iLCJvciIsIm9zIiwicGEiLCJwaSIsInBsIiwicHMiLCJwdCIsInF1Iiwicm0iLCJybiIsInJvIiwicnUiLCJydyIsInNhIiwic2MiLCJzZCIsInNlIiwic2ciLCJzaSIsInNrIiwic2wiLCJzbSIsInNuIiwic28iLCJzcSIsInNyIiwic3MiLCJzdCIsInN1Iiwic3YiLCJzdyIsInRhIiwidGUiLCJ0ZyIsInRoIiwidGkiLCJ0ayIsInRsIiwidG4iLCJ0byIsInRyIiwidHMiLCJ0dCIsInR3IiwidHkiLCJ1ZyIsInVrIiwidXIiLCJ1eiIsInZlIiwidmkiLCJ2byIsIndhIiwid28iLCJ4aCIsInlpIiwieW8iLCJ6YSIsInpoIiwienUiXSk7ZnVuY3Rpb24gcihvKXtyZXR1cm4oMCx0LmRlZmF1bHQpKG8pLHMuaGFzKG8pfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkoJGYsJGYuZXhwb3J0cyk7dmFyIG13PSRmLmV4cG9ydHMsTGY9e2V4cG9ydHM6e319OyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9aTt2YXIgdD1hKGllKTtmdW5jdGlvbiBhKGMpe3JldHVybiBjJiZjLl9fZXNNb2R1bGU/Yzp7ZGVmYXVsdDpjfX12YXIgcz0vXihbXCstXT9cZHs0fSg/IVxkezJ9XGIpKSgoLT8pKCgwWzEtOV18MVswLTJdKShcMyhbMTJdXGR8MFsxLTldfDNbMDFdKSk/fFcoWzAtNF1cZHw1WzAtM10pKC0/WzEtN10pP3woMDBbMS05XXwwWzEtOV1cZHxbMTJdXGR7Mn18MyhbMC01XVxkfDZbMS02XSkpKShbVFxzXSgoKFswMV1cZHwyWzAtM10pKCg6PylbMC01XVxkKT98MjQ6PzAwKShbXC4sXVxkKyg/ITopKT8pPyhcMTdbMC01XVxkKFtcLixdXGQrKT8pPyhbelpdfChbXCstXSkoWzAxXVxkfDJbMC0zXSk6PyhbMC01XVxkKT8pPyk/KT8kLyxyPS9eKFtcKy1dP1xkezR9KD8hXGR7Mn1cYikpKCgtPykoKDBbMS05XXwxWzAtMl0pKFwzKFsxMl1cZHwwWzEtOV18M1swMV0pKT98VyhbMC00XVxkfDVbMC0zXSkoLT9bMS03XSk/fCgwMFsxLTldfDBbMS05XVxkfFsxMl1cZHsyfXwzKFswLTVdXGR8NlsxLTZdKSkpKFtUXSgoKFswMV1cZHwyWzAtM10pKCg6PylbMC01XVxkKT98MjQ6PzAwKShbXC4sXVxkKyg/ITopKT8pPyhcMTdbMC01XVxkKFtcLixdXGQrKT8pPyhbelpdfChbXCstXSkoWzAxXVxkfDJbMC0zXSk6PyhbMC01XVxkKT8pPyk/KT8kLyxvPWZ1bmN0aW9uKGYpe3ZhciBkPWYubWF0Y2goL14oXGR7NH0pLT8oXGR7M30pKFsgVF17MX1cLip8JCkvKTtpZihkKXt2YXIgcD1OdW1iZXIoZFsxXSksYj1OdW1iZXIoZFsyXSk7cmV0dXJuIHAlND09PTAmJnAlMTAwIT09MHx8cCU0MDA9PT0wP2I8PTM2NjpiPD0zNjV9dmFyIFQ9Zi5tYXRjaCgvKFxkezR9KS0/KFxkezAsMn0pLT8oXGQqKS8pLm1hcChOdW1iZXIpLFc9VFsxXSxnPVRbMl0sQT1UWzNdLG09ZyYmIjAiLmNvbmNhdChnKS5zbGljZSgtMiksdz1BJiYiMCIuY29uY2F0KEEpLnNsaWNlKC0yKSxCPW5ldyBEYXRlKCIiLmNvbmNhdChXLCItIikuY29uY2F0KG18fCIwMSIsIi0iKS5jb25jYXQod3x8IjAxIikpO3JldHVybiBnJiZBP0IuZ2V0VVRDRnVsbFllYXIoKT09PVcmJkIuZ2V0VVRDTW9udGgoKSsxPT09ZyYmQi5nZXRVVENEYXRlKCk9PT1BOiEwfTtmdW5jdGlvbiBpKGMpe3ZhciBmPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fTsoMCx0LmRlZmF1bHQpKGMpO3ZhciBkPWYuc3RyaWN0U2VwYXJhdG9yP3IudGVzdChjKTpzLnRlc3QoYyk7cmV0dXJuIGQmJmYuc3RyaWN0P28oYyk6ZH1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKExmLExmLmV4cG9ydHMpO3ZhciBQdz1MZi5leHBvcnRzLHpmPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PW07dmFyIHQ9YShpZSk7ZnVuY3Rpb24gYSh3KXtyZXR1cm4gdyYmdy5fX2VzTW9kdWxlP3c6e2RlZmF1bHQ6d319dmFyIHM9L1swLTldezR9LyxyPS8oMFsxLTldfDFbMC0yXSkvLG89LyhbMTJdXGR8MFsxLTldfDNbMDFdKS8saT0vKFswMV1bMC05XXwyWzAtM10pLyxjPS9bMC01XVswLTldLyxmPS8oWzAtNV1bMC05XXw2MCkvLGQ9LyhcLlswLTldKyk/LyxwPW5ldyBSZWdFeHAoIlstK10iLmNvbmNhdChpLnNvdXJjZSwiOiIpLmNvbmNhdChjLnNvdXJjZSkpLGI9bmV3IFJlZ0V4cCgiKFt6Wl18Ii5jb25jYXQocC5zb3VyY2UsIikiKSksVD1uZXcgUmVnRXhwKCIiLmNvbmNhdChpLnNvdXJjZSwiOiIpLmNvbmNhdChjLnNvdXJjZSwiOiIpLmNvbmNhdChmLnNvdXJjZSkuY29uY2F0KGQuc291cmNlKSksVz1uZXcgUmVnRXhwKCIiLmNvbmNhdChzLnNvdXJjZSwiLSIpLmNvbmNhdChyLnNvdXJjZSwiLSIpLmNvbmNhdChvLnNvdXJjZSkpLGc9bmV3IFJlZ0V4cCgiIi5jb25jYXQoVC5zb3VyY2UpLmNvbmNhdChiLnNvdXJjZSkpLEE9bmV3IFJlZ0V4cCgiXiIuY29uY2F0KFcuc291cmNlLCJbIHRUXSIpLmNvbmNhdChnLnNvdXJjZSwiJCIpKTtmdW5jdGlvbiBtKHcpe3JldHVybigwLHQuZGVmYXVsdCkodyksQS50ZXN0KHcpfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkoemYsemYuZXhwb3J0cyk7dmFyIHd3PXpmLmV4cG9ydHMsdGk9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KHRpLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0aS5TY3JpcHRDb2Rlcz12b2lkIDA7dGkuZGVmYXVsdD1Fdzt2YXIgdnc9Q3coaWUpO2Z1bmN0aW9uIEN3KG4pe3JldHVybiBuJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufX12YXIgdnk9bmV3IFNldChbIkFkbG0iLCJBZmFrIiwiQWdoYiIsIkFob20iLCJBcmFiIiwiQXJhbiIsIkFybWkiLCJBcm1uIiwiQXZzdCIsIkJhbGkiLCJCYW11IiwiQmFzcyIsIkJhdGsiLCJCZW5nIiwiQmhrcyIsIkJsaXMiLCJCb3BvIiwiQnJhaCIsIkJyYWkiLCJCdWdpIiwiQnVoZCIsIkNha20iLCJDYW5zIiwiQ2FyaSIsIkNoYW0iLCJDaGVyIiwiQ2hpcyIsIkNocnMiLCJDaXJ0IiwiQ29wdCIsIkNwbW4iLCJDcHJ0IiwiQ3lybCIsIkN5cnMiLCJEZXZhIiwiRGlhayIsIkRvZ3IiLCJEc3J0IiwiRHVwbCIsIkVneWQiLCJFZ3loIiwiRWd5cCIsIkVsYmEiLCJFbHltIiwiRXRoaSIsIkdhcmEiLCJHZW9rIiwiR2VvciIsIkdsYWciLCJHb25nIiwiR29ubSIsIkdvdGgiLCJHcmFuIiwiR3JlayIsIkd1anIiLCJHdWtoIiwiR3VydSIsIkhhbmIiLCJIYW5nIiwiSGFuaSIsIkhhbm8iLCJIYW5zIiwiSGFudCIsIkhhdHIiLCJIZWJyIiwiSGlyYSIsIkhsdXciLCJIbW5nIiwiSG1ucCIsIkhya3QiLCJIdW5nIiwiSW5kcyIsIkl0YWwiLCJKYW1vIiwiSmF2YSIsIkpwYW4iLCJKdXJjIiwiS2FsaSIsIkthbmEiLCJLYXdpIiwiS2hhciIsIktobXIiLCJLaG9qIiwiS2l0bCIsIktpdHMiLCJLbmRhIiwiS29yZSIsIktwZWwiLCJLcmFpIiwiS3RoaSIsIkxhbmEiLCJMYW9vIiwiTGF0ZiIsIkxhdGciLCJMYXRuIiwiTGVrZSIsIkxlcGMiLCJMaW1iIiwiTGluYSIsIkxpbmIiLCJMaXN1IiwiTG9tYSIsIkx5Y2kiLCJMeWRpIiwiTWFoaiIsIk1ha2EiLCJNYW5kIiwiTWFuaSIsIk1hcmMiLCJNYXlhIiwiTWVkZiIsIk1lbmQiLCJNZXJjIiwiTWVybyIsIk1seW0iLCJNb2RpIiwiTW9uZyIsIk1vb24iLCJNcm9vIiwiTXRlaSIsIk11bHQiLCJNeW1yIiwiTmFnbSIsIk5hbmQiLCJOYXJiIiwiTmJhdCIsIk5ld2EiLCJOa2RiIiwiTmtnYiIsIk5rb28iLCJOc2h1IiwiT2dhbSIsIk9sY2siLCJPbmFvIiwiT3JraCIsIk9yeWEiLCJPc2dlIiwiT3NtYSIsIk91Z3IiLCJQYWxtIiwiUGF1YyIsIlBjdW4iLCJQZWxtIiwiUGVybSIsIlBoYWciLCJQaGxpIiwiUGhscCIsIlBobHYiLCJQaG54IiwiUGxyZCIsIlBpcWQiLCJQcnRpIiwiUHNpbiIsIlFhYWEiLCJRYWFiIiwiUWFhYyIsIlFhYWQiLCJRYWFlIiwiUWFhZiIsIlFhYWciLCJRYWFoIiwiUWFhaSIsIlFhYWoiLCJRYWFrIiwiUWFhbCIsIlFhYW0iLCJRYWFuIiwiUWFhbyIsIlFhYXAiLCJRYWFxIiwiUWFhciIsIlFhYXMiLCJRYWF0IiwiUWFhdSIsIlFhYXYiLCJRYWF3IiwiUWFheCIsIlFhYXkiLCJRYWF6IiwiUWFiYSIsIlFhYmIiLCJRYWJjIiwiUWFiZCIsIlFhYmUiLCJRYWJmIiwiUWFiZyIsIlFhYmgiLCJRYWJpIiwiUWFiaiIsIlFhYmsiLCJRYWJsIiwiUWFibSIsIlFhYm4iLCJRYWJvIiwiUWFicCIsIlFhYnEiLCJRYWJyIiwiUWFicyIsIlFhYnQiLCJRYWJ1IiwiUWFidiIsIlFhYnciLCJRYWJ4IiwiUmFuaiIsIlJqbmciLCJSb2hnIiwiUm9ybyIsIlJ1bnIiLCJTYW1yIiwiU2FyYSIsIlNhcmIiLCJTYXVyIiwiU2dudyIsIlNoYXciLCJTaHJkIiwiU2h1aSIsIlNpZGQiLCJTaWR0IiwiU2luZCIsIlNpbmgiLCJTb2dkIiwiU29nbyIsIlNvcmEiLCJTb3lvIiwiU3VuZCIsIlN1bnUiLCJTeWxvIiwiU3lyYyIsIlN5cmUiLCJTeXJqIiwiU3lybiIsIlRhZ2IiLCJUYWtyIiwiVGFsZSIsIlRhbHUiLCJUYW1sIiwiVGFuZyIsIlRhdnQiLCJUYXlvIiwiVGVsdSIsIlRlbmciLCJUZm5nIiwiVGdsZyIsIlRoYWEiLCJUaGFpIiwiVGlidCIsIlRpcmgiLCJUbnNhIiwiVG9kciIsIlRvbHMiLCJUb3RvIiwiVHV0ZyIsIlVnYXIiLCJWYWlpIiwiVmlzcCIsIlZpdGgiLCJXYXJhIiwiV2NobyIsIldvbGUiLCJYcGVvIiwiWHN1eCIsIlllemkiLCJZaWlpIiwiWmFuYiIsIlppbmgiLCJabXRoIiwiWnN5ZSIsIlpzeW0iLCJaeHh4IiwiWnl5eSIsIlp6enoiXSk7ZnVuY3Rpb24gRXcobil7cmV0dXJuKDAsdncuZGVmYXVsdCkobiksdnkuaGFzKG4pfXRpLlNjcmlwdENvZGVzPXZ5O3ZhciBqZj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1yO3ZhciB0PWEoaWUpO2Z1bmN0aW9uIGEobyl7cmV0dXJuIG8mJm8uX19lc01vZHVsZT9vOntkZWZhdWx0Om99fXZhciBzPW5ldyBTZXQoWyJBRkciLCJBTEEiLCJBTEIiLCJEWkEiLCJBU00iLCJBTkQiLCJBR08iLCJBSUEiLCJBVEEiLCJBVEciLCJBUkciLCJBUk0iLCJBQlciLCJBVVMiLCJBVVQiLCJBWkUiLCJCSFMiLCJCSFIiLCJCR0QiLCJCUkIiLCJCTFIiLCJCRUwiLCJCTFoiLCJCRU4iLCJCTVUiLCJCVE4iLCJCT0wiLCJCRVMiLCJCSUgiLCJCV0EiLCJCVlQiLCJCUkEiLCJJT1QiLCJCUk4iLCJCR1IiLCJCRkEiLCJCREkiLCJLSE0iLCJDTVIiLCJDQU4iLCJDUFYiLCJDWU0iLCJDQUYiLCJUQ0QiLCJDSEwiLCJDSE4iLCJDWFIiLCJDQ0siLCJDT0wiLCJDT00iLCJDT0ciLCJDT0QiLCJDT0siLCJDUkkiLCJDSVYiLCJIUlYiLCJDVUIiLCJDVVciLCJDWVAiLCJDWkUiLCJETksiLCJESkkiLCJETUEiLCJET00iLCJFQ1UiLCJFR1kiLCJTTFYiLCJHTlEiLCJFUkkiLCJFU1QiLCJFVEgiLCJGTEsiLCJGUk8iLCJGSkkiLCJGSU4iLCJGUkEiLCJHVUYiLCJQWUYiLCJBVEYiLCJHQUIiLCJHTUIiLCJHRU8iLCJERVUiLCJHSEEiLCJHSUIiLCJHUkMiLCJHUkwiLCJHUkQiLCJHTFAiLCJHVU0iLCJHVE0iLCJHR1kiLCJHSU4iLCJHTkIiLCJHVVkiLCJIVEkiLCJITUQiLCJWQVQiLCJITkQiLCJIS0ciLCJIVU4iLCJJU0wiLCJJTkQiLCJJRE4iLCJJUk4iLCJJUlEiLCJJUkwiLCJJTU4iLCJJU1IiLCJJVEEiLCJKQU0iLCJKUE4iLCJKRVkiLCJKT1IiLCJLQVoiLCJLRU4iLCJLSVIiLCJQUksiLCJLT1IiLCJLV1QiLCJLR1oiLCJMQU8iLCJMVkEiLCJMQk4iLCJMU08iLCJMQlIiLCJMQlkiLCJMSUUiLCJMVFUiLCJMVVgiLCJNQUMiLCJNS0QiLCJNREciLCJNV0kiLCJNWVMiLCJNRFYiLCJNTEkiLCJNTFQiLCJNSEwiLCJNVFEiLCJNUlQiLCJNVVMiLCJNWVQiLCJNRVgiLCJGU00iLCJNREEiLCJNQ08iLCJNTkciLCJNTkUiLCJNU1IiLCJNQVIiLCJNT1oiLCJNTVIiLCJOQU0iLCJOUlUiLCJOUEwiLCJOTEQiLCJOQ0wiLCJOWkwiLCJOSUMiLCJORVIiLCJOR0EiLCJOSVUiLCJORksiLCJNTlAiLCJOT1IiLCJPTU4iLCJQQUsiLCJQTFciLCJQU0UiLCJQQU4iLCJQTkciLCJQUlkiLCJQRVIiLCJQSEwiLCJQQ04iLCJQT0wiLCJQUlQiLCJQUkkiLCJRQVQiLCJSRVUiLCJST1UiLCJSVVMiLCJSV0EiLCJCTE0iLCJTSE4iLCJLTkEiLCJMQ0EiLCJNQUYiLCJTUE0iLCJWQ1QiLCJXU00iLCJTTVIiLCJTVFAiLCJTQVUiLCJTRU4iLCJTUkIiLCJTWUMiLCJTTEUiLCJTR1AiLCJTWE0iLCJTVksiLCJTVk4iLCJTTEIiLCJTT00iLCJaQUYiLCJTR1MiLCJTU0QiLCJFU1AiLCJMS0EiLCJTRE4iLCJTVVIiLCJTSk0iLCJTV1oiLCJTV0UiLCJDSEUiLCJTWVIiLCJUV04iLCJUSksiLCJUWkEiLCJUSEEiLCJUTFMiLCJUR08iLCJUS0wiLCJUT04iLCJUVE8iLCJUVU4iLCJUVVIiLCJUS00iLCJUQ0EiLCJUVVYiLCJVR0EiLCJVS1IiLCJBUkUiLCJHQlIiLCJVU0EiLCJVTUkiLCJVUlkiLCJVWkIiLCJWVVQiLCJWRU4iLCJWTk0iLCJWR0IiLCJWSVIiLCJXTEYiLCJFU0giLCJZRU0iLCJaTUIiLCJaV0UiXSk7ZnVuY3Rpb24gcihvKXtyZXR1cm4oMCx0LmRlZmF1bHQpKG8pLHMuaGFzKG8udG9VcHBlckNhc2UoKSl9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShqZixqZi5leHBvcnRzKTt2YXIgV3c9amYuZXhwb3J0cyxWZj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1yO3ZhciB0PWEoaWUpO2Z1bmN0aW9uIGEobyl7cmV0dXJuIG8mJm8uX19lc01vZHVsZT9vOntkZWZhdWx0Om99fXZhciBzPW5ldyBTZXQoWyIwMDQiLCIwMDgiLCIwMTAiLCIwMTIiLCIwMTYiLCIwMjAiLCIwMjQiLCIwMjgiLCIwMzEiLCIwMzIiLCIwMzYiLCIwNDAiLCIwNDQiLCIwNDgiLCIwNTAiLCIwNTEiLCIwNTIiLCIwNTYiLCIwNjAiLCIwNjQiLCIwNjgiLCIwNzAiLCIwNzIiLCIwNzQiLCIwNzYiLCIwODQiLCIwODYiLCIwOTAiLCIwOTIiLCIwOTYiLCIxMDAiLCIxMDQiLCIxMDgiLCIxMTIiLCIxMTYiLCIxMjAiLCIxMjQiLCIxMzIiLCIxMzYiLCIxNDAiLCIxNDQiLCIxNDgiLCIxNTIiLCIxNTYiLCIxNTgiLCIxNjIiLCIxNjYiLCIxNzAiLCIxNzQiLCIxNzUiLCIxNzgiLCIxODAiLCIxODQiLCIxODgiLCIxOTEiLCIxOTIiLCIxOTYiLCIyMDMiLCIyMDQiLCIyMDgiLCIyMTIiLCIyMTQiLCIyMTgiLCIyMjIiLCIyMjYiLCIyMzEiLCIyMzIiLCIyMzMiLCIyMzQiLCIyMzgiLCIyMzkiLCIyNDIiLCIyNDYiLCIyNDgiLCIyNTAiLCIyNTQiLCIyNTgiLCIyNjAiLCIyNjIiLCIyNjYiLCIyNjgiLCIyNzAiLCIyNzUiLCIyNzYiLCIyODgiLCIyOTIiLCIyOTYiLCIzMDAiLCIzMDQiLCIzMDgiLCIzMTIiLCIzMTYiLCIzMjAiLCIzMjQiLCIzMjgiLCIzMzIiLCIzMzQiLCIzMzYiLCIzNDAiLCIzNDQiLCIzNDgiLCIzNTIiLCIzNTYiLCIzNjAiLCIzNjQiLCIzNjgiLCIzNzIiLCIzNzYiLCIzODAiLCIzODQiLCIzODgiLCIzOTIiLCIzOTgiLCI0MDAiLCI0MDQiLCI0MDgiLCI0MTAiLCI0MTQiLCI0MTciLCI0MTgiLCI0MjIiLCI0MjYiLCI0MjgiLCI0MzAiLCI0MzQiLCI0MzgiLCI0NDAiLCI0NDIiLCI0NDYiLCI0NTAiLCI0NTQiLCI0NTgiLCI0NjIiLCI0NjYiLCI0NzAiLCI0NzQiLCI0NzgiLCI0ODAiLCI0ODQiLCI0OTIiLCI0OTYiLCI0OTgiLCI0OTkiLCI1MDAiLCI1MDQiLCI1MDgiLCI1MTIiLCI1MTYiLCI1MjAiLCI1MjQiLCI1MjgiLCI1MzEiLCI1MzMiLCI1MzQiLCI1MzUiLCI1NDAiLCI1NDgiLCI1NTQiLCI1NTgiLCI1NjIiLCI1NjYiLCI1NzAiLCI1NzQiLCI1NzgiLCI1ODAiLCI1ODEiLCI1ODMiLCI1ODQiLCI1ODUiLCI1ODYiLCI1OTEiLCI1OTgiLCI2MDAiLCI2MDQiLCI2MDgiLCI2MTIiLCI2MTYiLCI2MjAiLCI2MjQiLCI2MjYiLCI2MzAiLCI2MzQiLCI2MzgiLCI2NDIiLCI2NDMiLCI2NDYiLCI2NTIiLCI2NTQiLCI2NTkiLCI2NjAiLCI2NjIiLCI2NjMiLCI2NjYiLCI2NzAiLCI2NzQiLCI2NzgiLCI2ODIiLCI2ODYiLCI2ODgiLCI2OTAiLCI2OTQiLCI3MDIiLCI3MDMiLCI3MDQiLCI3MDUiLCI3MDYiLCI3MTAiLCI3MTYiLCI3MjQiLCI3MjgiLCI3MjkiLCI3MzIiLCI3NDAiLCI3NDQiLCI3NDgiLCI3NTIiLCI3NTYiLCI3NjAiLCI3NjIiLCI3NjQiLCI3NjgiLCI3NzIiLCI3NzYiLCI3ODAiLCI3ODQiLCI3ODgiLCI3OTIiLCI3OTUiLCI3OTYiLCI3OTgiLCI4MDAiLCI4MDQiLCI4MDciLCI4MTgiLCI4MjYiLCI4MzEiLCI4MzIiLCI4MzMiLCI4MzQiLCI4NDAiLCI4NTAiLCI4NTQiLCI4NTgiLCI4NjAiLCI4NjIiLCI4NzYiLCI4ODIiLCI4ODciLCI4OTQiXSk7ZnVuY3Rpb24gcihvKXtyZXR1cm4oMCx0LmRlZmF1bHQpKG8pLHMuaGFzKG8pfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkoVmYsVmYuZXhwb3J0cyk7dmFyIEJ3PVZmLmV4cG9ydHMscmk9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KHJpLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtyaS5DdXJyZW5jeUNvZGVzPXZvaWQgMDtyaS5kZWZhdWx0PV93O3ZhciBJdz1TdyhpZSk7ZnVuY3Rpb24gU3cobil7cmV0dXJuIG4mJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59fXZhciBDeT1uZXcgU2V0KFsiQUVEIiwiQUZOIiwiQUxMIiwiQU1EIiwiQU5HIiwiQU9BIiwiQVJTIiwiQVVEIiwiQVdHIiwiQVpOIiwiQkFNIiwiQkJEIiwiQkRUIiwiQkdOIiwiQkhEIiwiQklGIiwiQk1EIiwiQk5EIiwiQk9CIiwiQk9WIiwiQlJMIiwiQlNEIiwiQlROIiwiQldQIiwiQllOIiwiQlpEIiwiQ0FEIiwiQ0RGIiwiQ0hFIiwiQ0hGIiwiQ0hXIiwiQ0xGIiwiQ0xQIiwiQ05ZIiwiQ09QIiwiQ09VIiwiQ1JDIiwiQ1VQIiwiQ1ZFIiwiQ1pLIiwiREpGIiwiREtLIiwiRE9QIiwiRFpEIiwiRUdQIiwiRVJOIiwiRVRCIiwiRVVSIiwiRkpEIiwiRktQIiwiR0JQIiwiR0VMIiwiR0hTIiwiR0lQIiwiR01EIiwiR05GIiwiR1RRIiwiR1lEIiwiSEtEIiwiSE5MIiwiSFRHIiwiSFVGIiwiSURSIiwiSUxTIiwiSU5SIiwiSVFEIiwiSVJSIiwiSVNLIiwiSk1EIiwiSk9EIiwiSlBZIiwiS0VTIiwiS0dTIiwiS0hSIiwiS01GIiwiS1BXIiwiS1JXIiwiS1dEIiwiS1lEIiwiS1pUIiwiTEFLIiwiTEJQIiwiTEtSIiwiTFJEIiwiTFNMIiwiTFlEIiwiTUFEIiwiTURMIiwiTUdBIiwiTUtEIiwiTU1LIiwiTU5UIiwiTU9QIiwiTVJVIiwiTVVSIiwiTVZSIiwiTVdLIiwiTVhOIiwiTVhWIiwiTVlSIiwiTVpOIiwiTkFEIiwiTkdOIiwiTklPIiwiTk9LIiwiTlBSIiwiTlpEIiwiT01SIiwiUEFCIiwiUEVOIiwiUEdLIiwiUEhQIiwiUEtSIiwiUExOIiwiUFlHIiwiUUFSIiwiUk9OIiwiUlNEIiwiUlVCIiwiUldGIiwiU0FSIiwiU0JEIiwiU0NSIiwiU0RHIiwiU0VLIiwiU0dEIiwiU0hQIiwiU0xFIiwiU0xMIiwiU09TIiwiU1JEIiwiU1NQIiwiU1ROIiwiU1ZDIiwiU1lQIiwiU1pMIiwiVEhCIiwiVEpTIiwiVE1UIiwiVE5EIiwiVE9QIiwiVFJZIiwiVFREIiwiVFdEIiwiVFpTIiwiVUFIIiwiVUdYIiwiVVNEIiwiVVNOIiwiVVlJIiwiVVlVIiwiVVlXIiwiVVpTIiwiVkVEIiwiVkVTIiwiVk5EIiwiVlVWIiwiV1NUIiwiWEFGIiwiWEFHIiwiWEFVIiwiWEJBIiwiWEJCIiwiWEJDIiwiWEJEIiwiWENEIiwiWERSIiwiWE9GIiwiWFBEIiwiWFBGIiwiWFBUIiwiWFNVIiwiWFRTIiwiWFVBIiwiWFhYIiwiWUVSIiwiWkFSIiwiWk1XIiwiWldMIl0pO2Z1bmN0aW9uIF93KG4pe3JldHVybigwLEl3LmRlZmF1bHQpKG4pLEN5LmhhcyhuLnRvVXBwZXJDYXNlKCkpfXJpLkN1cnJlbmN5Q29kZXM9Q3k7dmFyIEdmPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PWM7dmFyIHQ9cyhpZSksYT1zKHF0KTtmdW5jdGlvbiBzKGYpe3JldHVybiBmJiZmLl9fZXNNb2R1bGU/Zjp7ZGVmYXVsdDpmfX12YXIgcj0vXltBLVoyLTddKz0qJC8sbz0vXltBLUhKS01OUC1UVi1aMC05XSskLyxpPXtjcm9ja2ZvcmQ6ITF9O2Z1bmN0aW9uIGMoZixkKXtpZigoMCx0LmRlZmF1bHQpKGYpLGQ9KDAsYS5kZWZhdWx0KShkLGkpLGQuY3JvY2tmb3JkKXJldHVybiBvLnRlc3QoZik7dmFyIHA9Zi5sZW5ndGg7cmV0dXJuISEocCU4PT09MCYmci50ZXN0KGYpKX1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKEdmLEdmLmV4cG9ydHMpO3ZhciBPdz1HZi5leHBvcnRzLEhmPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PXI7dmFyIHQ9YShpZSk7ZnVuY3Rpb24gYShvKXtyZXR1cm4gbyYmby5fX2VzTW9kdWxlP286e2RlZmF1bHQ6b319dmFyIHM9L15bQS1ISi1OUC1aYS1rbS16MS05XSokLztmdW5jdGlvbiByKG8pe3JldHVybigwLHQuZGVmYXVsdCkobyksISFzLnRlc3Qobyl9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShIZixIZi5leHBvcnRzKTt2YXIgUnc9SGYuZXhwb3J0cyxLZj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1pO3ZhciB0PWEoaWUpO2Z1bmN0aW9uIGEoYyl7cmV0dXJuIGMmJmMuX19lc01vZHVsZT9jOntkZWZhdWx0OmN9fXZhciBzPS9eW2Etel0rXC9bYS16MC05XC1cK1wuX10rJC9pLHI9L15bYS16XC1dKz1bYS16MC05XC1dKyQvaSxvPS9eW2EtejAtOSFcJCYnXChcKVwqXCssOz1cLVwuX346QFwvXD8lXHNdKiQvaTtmdW5jdGlvbiBpKGMpeygwLHQuZGVmYXVsdCkoYyk7dmFyIGY9Yy5zcGxpdCgiLCIpO2lmKGYubGVuZ3RoPDIpcmV0dXJuITE7dmFyIGQ9Zi5zaGlmdCgpLnRyaW0oKS5zcGxpdCgiOyIpLHA9ZC5zaGlmdCgpO2lmKHAuc2xpY2UoMCw1KSE9PSJkYXRhOiIpcmV0dXJuITE7dmFyIGI9cC5zbGljZSg1KTtpZihiIT09IiImJiFzLnRlc3QoYikpcmV0dXJuITE7Zm9yKHZhciBUPTA7VDxkLmxlbmd0aDtUKyspaWYoIShUPT09ZC5sZW5ndGgtMSYmZFtUXS50b0xvd2VyQ2FzZSgpPT09ImJhc2U2NCIpJiYhci50ZXN0KGRbVF0pKXJldHVybiExO2Zvcih2YXIgVz0wO1c8Zi5sZW5ndGg7VysrKWlmKCFvLnRlc3QoZltXXSkpcmV0dXJuITE7cmV0dXJuITB9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShLZixLZi5leHBvcnRzKTt2YXIgTXc9S2YuZXhwb3J0cyxaZj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1yO3ZhciB0PWEoaWUpO2Z1bmN0aW9uIGEobyl7cmV0dXJuIG8mJm8uX19lc01vZHVsZT9vOntkZWZhdWx0Om99fXZhciBzPS8oPzpebWFnbmV0Olw/fFtePyZdJil4dCg/OlwuMSk/PXVybjooPzooPzphaWNofGJpdHByaW50fGJ0aWh8ZWQya3xlZDJraGFzaHxremhhc2h8bWQ1fHNoYTF8dHJlZTp0aWdlcik6W2EtejAtOV17MzJ9KD86W2EtejAtOV17OH0pP3xidG1oOjEyMjBbYS16MC05XXs2NH0pKD86JHwmKS9pO2Z1bmN0aW9uIHIobyl7cmV0dXJuKDAsdC5kZWZhdWx0KShvKSxvLmluZGV4T2YoIm1hZ25ldDo/IikhPT0wPyExOnMudGVzdChvKX1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKFpmLFpmLmV4cG9ydHMpO3ZhciBGdz1aZi5leHBvcnRzLHFmPXtleHBvcnRzOnt9fSxKZj17ZXhwb3J0czp7fX0sWWY9e2V4cG9ydHM6e319OyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9czt2YXIgdD1hKGllKTtmdW5jdGlvbiBhKHIpe3JldHVybiByJiZyLl9fZXNNb2R1bGU/cjp7ZGVmYXVsdDpyfX1mdW5jdGlvbiBzKHIsbyl7aWYoKDAsdC5kZWZhdWx0KShyKSxvKXt2YXIgaT1uZXcgUmVnRXhwKCJbIi5jb25jYXQoby5yZXBsYWNlKC9bLiorP14ke30oKXxbXF1cXF0vZywiXFwkJiIpLCJdKyQiKSwiZyIpO3JldHVybiByLnJlcGxhY2UoaSwiIil9Zm9yKHZhciBjPXIubGVuZ3RoLTE7L1xzLy50ZXN0KHIuY2hhckF0KGMpKTspYy09MTtyZXR1cm4gci5zbGljZSgwLGMrMSl9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShZZixZZi5leHBvcnRzKTt2YXIgRXk9WWYuZXhwb3J0cyxYZj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1zO3ZhciB0PWEoaWUpO2Z1bmN0aW9uIGEocil7cmV0dXJuIHImJnIuX19lc01vZHVsZT9yOntkZWZhdWx0OnJ9fWZ1bmN0aW9uIHMocixvKXsoMCx0LmRlZmF1bHQpKHIpO3ZhciBpPW8/bmV3IFJlZ0V4cCgiXlsiLmNvbmNhdChvLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCQmIiksIl0rIiksImciKTovXlxzKy9nO3JldHVybiByLnJlcGxhY2UoaSwiIil9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShYZixYZi5leHBvcnRzKTt2YXIgV3k9WGYuZXhwb3J0czsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PXI7dmFyIHQ9cyhFeSksYT1zKFd5KTtmdW5jdGlvbiBzKG8pe3JldHVybiBvJiZvLl9fZXNNb2R1bGU/bzp7ZGVmYXVsdDpvfX1mdW5jdGlvbiByKG8saSl7cmV0dXJuKDAsdC5kZWZhdWx0KSgoMCxhLmRlZmF1bHQpKG8saSksaSl9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShKZixKZi5leHBvcnRzKTt2YXIgQnk9SmYuZXhwb3J0czsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PVc7dmFyIHQ9cihCeSksYT1yKGd5KSxzPXIoaWUpO2Z1bmN0aW9uIHIoZyl7cmV0dXJuIGcmJmcuX19lc01vZHVsZT9nOntkZWZhdWx0Omd9fWZ1bmN0aW9uIG8oZyxBKXtyZXR1cm4gZihnKXx8YyhnLEEpfHxwKGcsQSl8fGkoKX1mdW5jdGlvbiBpKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfWZ1bmN0aW9uIGMoZyxBKXt2YXIgbT1nPT1udWxsP251bGw6dHlwZW9mIFN5bWJvbDwidSImJmdbU3ltYm9sLml0ZXJhdG9yXXx8Z1siQEBpdGVyYXRvciJdO2lmKG0hPW51bGwpe3ZhciB3LEIsayxWLEw9W10sST0hMCx5PSExO3RyeXtpZihrPShtPW0uY2FsbChnKSkubmV4dCxBIT09MClmb3IoOyEoST0odz1rLmNhbGwobSkpLmRvbmUpJiYoTC5wdXNoKHcudmFsdWUpLEwubGVuZ3RoIT09QSk7ST0hMCk7fWNhdGNoKEUpe3k9ITAsQj1FfWZpbmFsbHl7dHJ5e2lmKCFJJiZtLnJldHVybiE9bnVsbCYmKFY9bS5yZXR1cm4oKSxPYmplY3QoVikhPT1WKSlyZXR1cm59ZmluYWxseXtpZih5KXRocm93IEJ9fXJldHVybiBMfX1mdW5jdGlvbiBmKGcpe2lmKEFycmF5LmlzQXJyYXkoZykpcmV0dXJuIGd9ZnVuY3Rpb24gZChnLEEpe3ZhciBtPXR5cGVvZiBTeW1ib2w8InUiJiZnW1N5bWJvbC5pdGVyYXRvcl18fGdbIkBAaXRlcmF0b3IiXTtpZighbSl7aWYoQXJyYXkuaXNBcnJheShnKXx8KG09cChnKSl8fEEpe20mJihnPW0pO3ZhciB3PTAsQj1mdW5jdGlvbigpe307cmV0dXJue3M6QixuOmZ1bmN0aW9uKCl7cmV0dXJuIHc+PWcubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTpnW3crK119fSxlOmZ1bmN0aW9uKHkpe3Rocm93IHl9LGY6Qn19dGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9dmFyIGssVj0hMCxMPSExO3JldHVybntzOmZ1bmN0aW9uKCl7bT1tLmNhbGwoZyl9LG46ZnVuY3Rpb24oKXt2YXIgeT1tLm5leHQoKTtyZXR1cm4gVj15LmRvbmUseX0sZTpmdW5jdGlvbih5KXtMPSEwLGs9eX0sZjpmdW5jdGlvbigpe3RyeXtWfHxtLnJldHVybj09bnVsbHx8bS5yZXR1cm4oKX1maW5hbGx5e2lmKEwpdGhyb3cga319fX1mdW5jdGlvbiBwKGcsQSl7aWYoZyl7aWYodHlwZW9mIGc9PSJzdHJpbmciKXJldHVybiBiKGcsQSk7dmFyIG09e30udG9TdHJpbmcuY2FsbChnKS5zbGljZSg4LC0xKTtyZXR1cm4gbT09PSJPYmplY3QiJiZnLmNvbnN0cnVjdG9yJiYobT1nLmNvbnN0cnVjdG9yLm5hbWUpLG09PT0iTWFwInx8bT09PSJTZXQiP0FycmF5LmZyb20oZyk6bT09PSJBcmd1bWVudHMifHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChtKT9iKGcsQSk6dm9pZCAwfX1mdW5jdGlvbiBiKGcsQSl7KEE9PW51bGx8fEE+Zy5sZW5ndGgpJiYoQT1nLmxlbmd0aCk7Zm9yKHZhciBtPTAsdz1BcnJheShBKTttPEE7bSsrKXdbbV09Z1ttXTtyZXR1cm4gd31mdW5jdGlvbiBUKGcpe3ZhciBBPW5ldyBTZXQoWyJzdWJqZWN0IiwiYm9keSIsImNjIiwiYmNjIl0pLG09e2NjOiIiLGJjYzoiIn0sdz0hMSxCPWcuc3BsaXQoIiYiKTtpZihCLmxlbmd0aD40KXJldHVybiExO3ZhciBrPWQoQiksVjt0cnl7Zm9yKGsucygpOyEoVj1rLm4oKSkuZG9uZTspe3ZhciBMPVYudmFsdWUsST1MLnNwbGl0KCI9IikseT1vKEksMiksRT15WzBdLEM9eVsxXTtpZihFJiYhQS5oYXMoRSkpe3c9ITA7YnJlYWt9QyYmKEU9PT0iY2MifHxFPT09ImJjYyIpJiYobVtFXT1DKSxFJiZBLmRlbGV0ZShFKX19Y2F0Y2goRil7ay5lKEYpfWZpbmFsbHl7ay5mKCl9cmV0dXJuIHc/ITE6bX1mdW5jdGlvbiBXKGcsQSl7aWYoKDAscy5kZWZhdWx0KShnKSxnLmluZGV4T2YoIm1haWx0bzoiKSE9PTApcmV0dXJuITE7dmFyIG09Zy5yZXBsYWNlKCJtYWlsdG86IiwiIikuc3BsaXQoIj8iKSx3PW8obSwyKSxCPXdbMF0saz13WzFdLFY9az09PXZvaWQgMD8iIjprO2lmKCFCJiYhVilyZXR1cm4hMDt2YXIgTD1UKFYpO3JldHVybiBMPyIiLmNvbmNhdChCLCIsIikuY29uY2F0KEwuY2MsIiwiKS5jb25jYXQoTC5iY2MpLnNwbGl0KCIsIikuZXZlcnkoZnVuY3Rpb24oSSl7cmV0dXJuIEk9KDAsdC5kZWZhdWx0KShJLCIgIiksST8oMCxhLmRlZmF1bHQpKEksQSk6ITB9KTohMX1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKHFmLHFmLmV4cG9ydHMpO3ZhciBOdz1xZi5leHBvcnRzLFFmPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PWk7dmFyIHQ9YShpZSk7ZnVuY3Rpb24gYShjKXtyZXR1cm4gYyYmYy5fX2VzTW9kdWxlP2M6e2RlZmF1bHQ6Y319dmFyIHM9L14oYXBwbGljYXRpb258YXVkaW98Zm9udHxpbWFnZXxtZXNzYWdlfG1vZGVsfG11bHRpcGFydHx0ZXh0fHZpZGVvKVwvW2EtekEtWjAtOVwuXC1cK19dezEsMTAwfSQvaSxyPS9edGV4dFwvW2EtekEtWjAtOVwuXC1cK117MSwxMDB9O1xzP2NoYXJzZXQ9KCJbYS16QS1aMC05XC5cLVwrXHNdezAsNzB9InxbYS16QS1aMC05XC5cLVwrXXswLDcwfSkoXHM/XChbYS16QS1aMC05XC5cLVwrXHNdezEsMjB9XCkpPyQvaSxvPS9ebXVsdGlwYXJ0XC9bYS16QS1aMC05XC5cLVwrXXsxLDEwMH0oO1xzPyhib3VuZGFyeXxjaGFyc2V0KT0oIlthLXpBLVowLTlcLlwtXCtcc117MCw3MH0ifFthLXpBLVowLTlcLlwtXCtdezAsNzB9KShccz9cKFthLXpBLVowLTlcLlwtXCtcc117MSwyMH1cKSk/KXswLDJ9JC9pO2Z1bmN0aW9uIGkoYyl7cmV0dXJuKDAsdC5kZWZhdWx0KShjKSxzLnRlc3QoYyl8fHIudGVzdChjKXx8by50ZXN0KGMpfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkoUWYsUWYuZXhwb3J0cyk7dmFyIGt3PVFmLmV4cG9ydHMsZWQ9e2V4cG9ydHM6e319OyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9cDt2YXIgdD1yKGllKSxhPXIocXQpLHM9cihieSk7ZnVuY3Rpb24gcihiKXtyZXR1cm4gYiYmYi5fX2VzTW9kdWxlP2I6e2RlZmF1bHQ6Yn19dmFyIG89L15cKD9bKy1dPyg5MChcLjArKT98WzEtOF0/XGQoXC5cZCspPykkLyxpPS9eXHM/WystXT8oMTgwKFwuMCspP3wxWzAtN11cZChcLlxkKyk/fFxkezEsMn0oXC5cZCspPylcKT8kLyxjPS9eKChbMS04XT9cZClcRCsoWzEtNV0/XGR8NjApXEQrKFsxLTVdP1xkfDYwKShcLlxkKyk/fDkwXEQrMFxEKzApXEQrW05TbnNdPyQvaSxmPS9eXHMqKFsxLTddP1xkezEsMn1cRCsoWzEtNV0/XGR8NjApXEQrKFsxLTVdP1xkfDYwKShcLlxkKyk/fDE4MFxEKzBcRCswKVxEK1tFV2V3XT8kL2ksZD17Y2hlY2tETVM6ITF9O2Z1bmN0aW9uIHAoYixUKXtpZigoMCx0LmRlZmF1bHQpKGIpLFQ9KDAsYS5kZWZhdWx0KShULGQpLCEoMCxzLmRlZmF1bHQpKGIsIiwiKSlyZXR1cm4hMTt2YXIgVz1iLnNwbGl0KCIsIik7cmV0dXJuIFdbMF0uc3RhcnRzV2l0aCgiKCIpJiYhV1sxXS5lbmRzV2l0aCgiKSIpfHxXWzFdLmVuZHNXaXRoKCIpIikmJiFXWzBdLnN0YXJ0c1dpdGgoIigiKT8hMTpULmNoZWNrRE1TP2MudGVzdChXWzBdKSYmZi50ZXN0KFdbMV0pOm8udGVzdChXWzBdKSYmaS50ZXN0KFdbMV0pfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkoZWQsZWQuZXhwb3J0cyk7dmFyIFV3PWVkLmV4cG9ydHMsbmk9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KG5pLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtuaS5kZWZhdWx0PUx3O25pLmxvY2FsZXM9dm9pZCAwO3ZhciBEdz0kdyhpZSk7ZnVuY3Rpb24gJHcobil7cmV0dXJuIG4mJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59fXZhciBacD0vXlxkezN9JC8sZHI9L15cZHs0fSQvLF90PS9eXGR7NX0kLyxJdT0vXlxkezZ9JC8scnM9e0FEOi9eQURcZHszfSQvLEFUOmRyLEFVOmRyLEFaOi9eQVpcZHs0fSQvLEJBOi9eKFs3LThdXGR7NH0kKS8sQkQ6L14oWzEtOF1bMC05XXszfXw5WzAtNF1bMC05XXsyfSkkLyxCRTpkcixCRzpkcixCUjovXlxkezV9LT9cZHszfSQvLEJZOi9eMlsxLTRdXGR7NH0kLyxDQTovXltBQkNFR0hKS0xNTlBSU1RWWFldXGRbQUJDRUdISi1OUFJTVFYtWl1bXHNcLV0/XGRbQUJDRUdISi1OUFJTVFYtWl1cZCQvaSxDSDpkcixDTjovXigwWzEtN118MVswMTIzNTZdfDJbMC03XXwzWzAtNl18NFswLTddfDVbMS03XXw2WzEtN118N1sxLTVdfDhbMTM0NV18OVswOV0pXGR7NH0kLyxDTzovXigwNXwwOHwxMXwxM3wxNXwxN3wxOHwxOXwyMHwyM3wyNXwyN3w0MXw0NHw0N3w1MHw1Mnw1NHw2M3w2Nnw2OHw3MHw3M3w3Nnw4MXw4NXw4Nnw4OHw5MXw5NHw5NXw5N3w5OSkoXGR7NH0pJC8sQ1o6L15cZHszfVxzP1xkezJ9JC8sREU6X3QsREs6ZHIsRE86X3QsRFo6X3QsRUU6X3QsRVM6L14oNVswLTJdezF9fFswLTRdezF9XGR7MX0pXGR7M30kLyxGSTpfdCxGUjovXig/Oig/OjBbMS05XXxbMS04XVxkfDlbMC01XSlcZHszfXw5N1sxLTQ2XVxkezJ9KSQvLEdCOi9eKGdpclxzPzBhYXxbYS16XXsxLDJ9XGRbXGRhLXpdP1xzPyhcZFthLXpdezJ9KT8pJC9pLEdSOi9eXGR7M31ccz9cZHsyfSQvLEhSOi9eKFsxLTVdXGR7NH0kKS8sSFQ6L15IVFxkezR9JC8sSFU6ZHIsSUQ6X3QsSUU6L14oPyEuKig/Om8pKVtBLVphLXpdXGRbXGR3XVxzXHd7NH0kL2ksSUw6L14oXGR7NX18XGR7N30pJC8sSU46L14oKD8hMTB8Mjl8MzV8NTR8NTV8NjV8NjZ8ODZ8ODd8ODh8ODkpWzEtOV1bMC05XXs1fSkkLyxJUjovXig/IShcZClcMXszfSlbMTMtOV17NH1bMTM0Ni05XVswMTMtOV17NX0kLyxJUzpacCxJVDpfdCxKUDovXlxkezN9XC1cZHs0fSQvLEtFOl90LEtSOi9eKFxkezV9fFxkezZ9KSQvLExJOi9eKDk0OFs1LTldfDk0OVswLTddKSQvLExUOi9eTFRcLVxkezV9JC8sTFU6ZHIsTFY6L15MVlwtXGR7NH0kLyxMSzpfdCxNRzpacCxNWDpfdCxNVDovXltBLVphLXpdezN9XHN7MCwxfVxkezR9JC8sTVk6X3QsTkw6L15bMS05XVxkezN9XHM/KD8hc2F8c2R8c3MpW2Etel17Mn0kL2ksTk86ZHIsTlA6L14oMTB8MjF8MjJ8MzJ8MzN8MzR8NDR8NDV8NTZ8NTcpXGR7M30kfF4oOTc3KSQvaSxOWjpkcixQSzpfdCxQTDovXlxkezJ9XC1cZHszfSQvLFBSOi9eMDBbNjc5XVxkezJ9KFsgLV1cZHs0fSk/JC8sUFQ6L15cZHs0fVwtXGR7M30/JC8sUk86SXUsUlU6SXUsU0E6X3QsU0U6L15bMS05XVxkezJ9XHM/XGR7Mn0kLyxTRzpJdSxTSTpkcixTSzovXlxkezN9XHM/XGR7Mn0kLyxUSDpfdCxUTjpkcixUVzovXlxkezN9KFxkezIsM30pPyQvLFVBOl90LFVTOi9eXGR7NX0oLVxkezR9KT8kLyxaQTpkcixaTTpfdH07bmkubG9jYWxlcz1PYmplY3Qua2V5cyhycyk7ZnVuY3Rpb24gTHcobixlKXtpZigoMCxEdy5kZWZhdWx0KShuKSxlIGluIHJzKXJldHVybiByc1tlXS50ZXN0KG4pO2lmKGU9PT0iYW55Iil7Zm9yKHZhciB0IGluIHJzKWlmKHJzLmhhc093blByb3BlcnR5KHQpKXt2YXIgYT1yc1t0XTtpZihhLnRlc3QobikpcmV0dXJuITB9cmV0dXJuITF9dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxvY2FsZSAnIi5jb25jYXQoZSwiJyIpKX12YXIgdGQ9e2V4cG9ydHM6e319OyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9czt2YXIgdD1hKGllKTtmdW5jdGlvbiBhKHIpe3JldHVybiByJiZyLl9fZXNNb2R1bGU/cjp7ZGVmYXVsdDpyfX1mdW5jdGlvbiBzKHIpe3JldHVybigwLHQuZGVmYXVsdCkociksci5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgvIi9nLCImcXVvdDsiKS5yZXBsYWNlKC8nL2csIiYjeDI3OyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoL1wvL2csIiYjeDJGOyIpLnJlcGxhY2UoL1xcL2csIiYjeDVDOyIpLnJlcGxhY2UoL2AvZywiJiM5NjsiKX1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKHRkLHRkLmV4cG9ydHMpO3ZhciB6dz10ZC5leHBvcnRzLHJkPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24obixlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PXM7dmFyIHQ9YShpZSk7ZnVuY3Rpb24gYShyKXtyZXR1cm4gciYmci5fX2VzTW9kdWxlP3I6e2RlZmF1bHQ6cn19ZnVuY3Rpb24gcyhyKXtyZXR1cm4oMCx0LmRlZmF1bHQpKHIpLHIucmVwbGFjZSgvJnF1b3Q7L2csJyInKS5yZXBsYWNlKC8mI3gyNzsvZywiJyIpLnJlcGxhY2UoLyZsdDsvZywiPCIpLnJlcGxhY2UoLyZndDsvZywiPiIpLnJlcGxhY2UoLyYjeDJGOy9nLCIvIikucmVwbGFjZSgvJiN4NUM7L2csIlxcIikucmVwbGFjZSgvJiM5NjsvZywiYCIpLnJlcGxhY2UoLyZhbXA7L2csIiYiKX1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKHJkLHJkLmV4cG9ydHMpO3ZhciBqdz1yZC5leHBvcnRzLG5kPXtleHBvcnRzOnt9fSxvZD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1zO3ZhciB0PWEoaWUpO2Z1bmN0aW9uIGEocil7cmV0dXJuIHImJnIuX19lc01vZHVsZT9yOntkZWZhdWx0OnJ9fWZ1bmN0aW9uIHMocixvKXtyZXR1cm4oMCx0LmRlZmF1bHQpKHIpLHIucmVwbGFjZShuZXcgUmVnRXhwKCJbIi5jb25jYXQobywiXSsiKSwiZyIpLCIiKX1uLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKG9kLG9kLmV4cG9ydHMpO3ZhciBJeT1vZC5leHBvcnRzOyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9cjt2YXIgdD1zKGllKSxhPXMoSXkpO2Z1bmN0aW9uIHMobyl7cmV0dXJuIG8mJm8uX19lc01vZHVsZT9vOntkZWZhdWx0Om99fWZ1bmN0aW9uIHIobyxpKXsoMCx0LmRlZmF1bHQpKG8pO3ZhciBjPWk/IlxceDAwLVxceDA5XFx4MEJcXHgwQ1xceDBFLVxceDFGXFx4N0YiOiJcXHgwMC1cXHgxRlxceDdGIjtyZXR1cm4oMCxhLmRlZmF1bHQpKG8sYyl9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShuZCxuZC5leHBvcnRzKTt2YXIgVnc9bmQuZXhwb3J0cyxzZD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1zO3ZhciB0PWEoaWUpO2Z1bmN0aW9uIGEocil7cmV0dXJuIHImJnIuX19lc01vZHVsZT9yOntkZWZhdWx0OnJ9fWZ1bmN0aW9uIHMocixvKXtyZXR1cm4oMCx0LmRlZmF1bHQpKHIpLHIucmVwbGFjZShuZXcgUmVnRXhwKCJbXiIuY29uY2F0KG8sIl0rIiksImciKSwiIil9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShzZCxzZC5leHBvcnRzKTt2YXIgR3c9c2QuZXhwb3J0cyxhZD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1zO3ZhciB0PWEoaWUpO2Z1bmN0aW9uIGEocil7cmV0dXJuIHImJnIuX19lc01vZHVsZT9yOntkZWZhdWx0OnJ9fWZ1bmN0aW9uIHMocixvKXsoMCx0LmRlZmF1bHQpKHIpO2Zvcih2YXIgaT1yLmxlbmd0aC0xO2k+PTA7aS0tKWlmKG8uaW5kZXhPZihyW2ldKT09PS0xKXJldHVybiExO3JldHVybiEwfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkoYWQsYWQuZXhwb3J0cyk7dmFyIEh3PWFkLmV4cG9ydHMsaWQ9e2V4cG9ydHM6e319OyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9ZDt2YXIgdD1hKHF0KTtmdW5jdGlvbiBhKHApe3JldHVybiBwJiZwLl9fZXNNb2R1bGU/cDp7ZGVmYXVsdDpwfX12YXIgcz17YWxsX2xvd2VyY2FzZTohMCxnbWFpbF9sb3dlcmNhc2U6ITAsZ21haWxfcmVtb3ZlX2RvdHM6ITAsZ21haWxfcmVtb3ZlX3N1YmFkZHJlc3M6ITAsZ21haWxfY29udmVydF9nb29nbGVtYWlsZG90Y29tOiEwLG91dGxvb2tkb3Rjb21fbG93ZXJjYXNlOiEwLG91dGxvb2tkb3Rjb21fcmVtb3ZlX3N1YmFkZHJlc3M6ITAseWFob29fbG93ZXJjYXNlOiEwLHlhaG9vX3JlbW92ZV9zdWJhZGRyZXNzOiEwLHlhbmRleF9sb3dlcmNhc2U6ITAseWFuZGV4X2NvbnZlcnRfeWFuZGV4cnU6ITAsaWNsb3VkX2xvd2VyY2FzZTohMCxpY2xvdWRfcmVtb3ZlX3N1YmFkZHJlc3M6ITB9LHI9WyJpY2xvdWQuY29tIiwibWUuY29tIl0sbz1bImhvdG1haWwuYXQiLCJob3RtYWlsLmJlIiwiaG90bWFpbC5jYSIsImhvdG1haWwuY2wiLCJob3RtYWlsLmNvLmlsIiwiaG90bWFpbC5jby5ueiIsImhvdG1haWwuY28udGgiLCJob3RtYWlsLmNvLnVrIiwiaG90bWFpbC5jb20iLCJob3RtYWlsLmNvbS5hciIsImhvdG1haWwuY29tLmF1IiwiaG90bWFpbC5jb20uYnIiLCJob3RtYWlsLmNvbS5nciIsImhvdG1haWwuY29tLm14IiwiaG90bWFpbC5jb20ucGUiLCJob3RtYWlsLmNvbS50ciIsImhvdG1haWwuY29tLnZuIiwiaG90bWFpbC5jeiIsImhvdG1haWwuZGUiLCJob3RtYWlsLmRrIiwiaG90bWFpbC5lcyIsImhvdG1haWwuZnIiLCJob3RtYWlsLmh1IiwiaG90bWFpbC5pZCIsImhvdG1haWwuaWUiLCJob3RtYWlsLmluIiwiaG90bWFpbC5pdCIsImhvdG1haWwuanAiLCJob3RtYWlsLmtyIiwiaG90bWFpbC5sdiIsImhvdG1haWwubXkiLCJob3RtYWlsLnBoIiwiaG90bWFpbC5wdCIsImhvdG1haWwuc2EiLCJob3RtYWlsLnNnIiwiaG90bWFpbC5zayIsImxpdmUuYmUiLCJsaXZlLmNvLnVrIiwibGl2ZS5jb20iLCJsaXZlLmNvbS5hciIsImxpdmUuY29tLm14IiwibGl2ZS5kZSIsImxpdmUuZXMiLCJsaXZlLmV1IiwibGl2ZS5mciIsImxpdmUuaXQiLCJsaXZlLm5sIiwibXNuLmNvbSIsIm91dGxvb2suYXQiLCJvdXRsb29rLmJlIiwib3V0bG9vay5jbCIsIm91dGxvb2suY28uaWwiLCJvdXRsb29rLmNvLm56Iiwib3V0bG9vay5jby50aCIsIm91dGxvb2suY29tIiwib3V0bG9vay5jb20uYXIiLCJvdXRsb29rLmNvbS5hdSIsIm91dGxvb2suY29tLmJyIiwib3V0bG9vay5jb20uZ3IiLCJvdXRsb29rLmNvbS5wZSIsIm91dGxvb2suY29tLnRyIiwib3V0bG9vay5jb20udm4iLCJvdXRsb29rLmN6Iiwib3V0bG9vay5kZSIsIm91dGxvb2suZGsiLCJvdXRsb29rLmVzIiwib3V0bG9vay5mciIsIm91dGxvb2suaHUiLCJvdXRsb29rLmlkIiwib3V0bG9vay5pZSIsIm91dGxvb2suaW4iLCJvdXRsb29rLml0Iiwib3V0bG9vay5qcCIsIm91dGxvb2sua3IiLCJvdXRsb29rLmx2Iiwib3V0bG9vay5teSIsIm91dGxvb2sucGgiLCJvdXRsb29rLnB0Iiwib3V0bG9vay5zYSIsIm91dGxvb2suc2ciLCJvdXRsb29rLnNrIiwicGFzc3BvcnQuY29tIl0saT1bInJvY2tldG1haWwuY29tIiwieWFob28uY2EiLCJ5YWhvby5jby51ayIsInlhaG9vLmNvbSIsInlhaG9vLmRlIiwieWFob28uZnIiLCJ5YWhvby5pbiIsInlhaG9vLml0IiwieW1haWwuY29tIl0sYz1bInlhbmRleC5ydSIsInlhbmRleC51YSIsInlhbmRleC5reiIsInlhbmRleC5jb20iLCJ5YW5kZXguYnkiLCJ5YS5ydSJdO2Z1bmN0aW9uIGYocCl7cmV0dXJuIHAubGVuZ3RoPjE/cDoiIn1mdW5jdGlvbiBkKHAsYil7Yj0oMCx0LmRlZmF1bHQpKGIscyk7dmFyIFQ9cC5zcGxpdCgiQCIpLFc9VC5wb3AoKSxnPVQuam9pbigiQCIpLEE9W2csV107aWYoQVsxXT1BWzFdLnRvTG93ZXJDYXNlKCksQVsxXT09PSJnbWFpbC5jb20ifHxBWzFdPT09Imdvb2dsZW1haWwuY29tIil7aWYoYi5nbWFpbF9yZW1vdmVfc3ViYWRkcmVzcyYmKEFbMF09QVswXS5zcGxpdCgiKyIpWzBdKSxiLmdtYWlsX3JlbW92ZV9kb3RzJiYoQVswXT1BWzBdLnJlcGxhY2UoL1wuKy9nLGYpKSwhQVswXS5sZW5ndGgpcmV0dXJuITE7KGIuYWxsX2xvd2VyY2FzZXx8Yi5nbWFpbF9sb3dlcmNhc2UpJiYoQVswXT1BWzBdLnRvTG93ZXJDYXNlKCkpLEFbMV09Yi5nbWFpbF9jb252ZXJ0X2dvb2dsZW1haWxkb3Rjb20/ImdtYWlsLmNvbSI6QVsxXX1lbHNlIGlmKHIuaW5kZXhPZihBWzFdKT49MCl7aWYoYi5pY2xvdWRfcmVtb3ZlX3N1YmFkZHJlc3MmJihBWzBdPUFbMF0uc3BsaXQoIisiKVswXSksIUFbMF0ubGVuZ3RoKXJldHVybiExOyhiLmFsbF9sb3dlcmNhc2V8fGIuaWNsb3VkX2xvd2VyY2FzZSkmJihBWzBdPUFbMF0udG9Mb3dlckNhc2UoKSl9ZWxzZSBpZihvLmluZGV4T2YoQVsxXSk+PTApe2lmKGIub3V0bG9va2RvdGNvbV9yZW1vdmVfc3ViYWRkcmVzcyYmKEFbMF09QVswXS5zcGxpdCgiKyIpWzBdKSwhQVswXS5sZW5ndGgpcmV0dXJuITE7KGIuYWxsX2xvd2VyY2FzZXx8Yi5vdXRsb29rZG90Y29tX2xvd2VyY2FzZSkmJihBWzBdPUFbMF0udG9Mb3dlckNhc2UoKSl9ZWxzZSBpZihpLmluZGV4T2YoQVsxXSk+PTApe2lmKGIueWFob29fcmVtb3ZlX3N1YmFkZHJlc3Mpe3ZhciBtPUFbMF0uc3BsaXQoIi0iKTtBWzBdPW0ubGVuZ3RoPjE/bS5zbGljZSgwLC0xKS5qb2luKCItIik6bVswXX1pZighQVswXS5sZW5ndGgpcmV0dXJuITE7KGIuYWxsX2xvd2VyY2FzZXx8Yi55YWhvb19sb3dlcmNhc2UpJiYoQVswXT1BWzBdLnRvTG93ZXJDYXNlKCkpfWVsc2UgYy5pbmRleE9mKEFbMV0pPj0wPygoYi5hbGxfbG93ZXJjYXNlfHxiLnlhbmRleF9sb3dlcmNhc2UpJiYoQVswXT1BWzBdLnRvTG93ZXJDYXNlKCkpLEFbMV09Yi55YW5kZXhfY29udmVydF95YW5kZXhydT8ieWFuZGV4LnJ1IjpBWzFdKTpiLmFsbF9sb3dlcmNhc2UmJihBWzBdPUFbMF0udG9Mb3dlckNhc2UoKSk7cmV0dXJuIEEuam9pbigiQCIpfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkoaWQsaWQuZXhwb3J0cyk7dmFyIEt3PWlkLmV4cG9ydHMsY2Q9e2V4cG9ydHM6e319OyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9cjt2YXIgdD1hKGllKTtmdW5jdGlvbiBhKG8pe3JldHVybiBvJiZvLl9fZXNNb2R1bGU/bzp7ZGVmYXVsdDpvfX12YXIgcz0vXlteXHMtX10oPyEuKj9bLV9dezIsfSlbYS16MC05LVxcXVteXHNdKlteLV9cc10kLztmdW5jdGlvbiByKG8pe3JldHVybigwLHQuZGVmYXVsdCkobykscy50ZXN0KG8pfW4uZXhwb3J0cz1lLmRlZmF1bHQsbi5leHBvcnRzLmRlZmF1bHQ9ZS5kZWZhdWx0fSkoY2QsY2QuZXhwb3J0cyk7dmFyIFp3PWNkLmV4cG9ydHMsdWQ9e2V4cG9ydHM6e319OyhmdW5jdGlvbihuLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmRlZmF1bHQ9cjt2YXIgdD1hKGllKTtmdW5jdGlvbiBhKG8pe3JldHVybiBvJiZvLl9fZXNNb2R1bGU/bzp7ZGVmYXVsdDpvfX12YXIgcz17ImNzLUNaIjpmdW5jdGlvbihpKXtyZXR1cm4vXigoW0FCQ0RFRkhJSktMTU5QUlNUVVZYWVpdfFswLTldKS0/KXs1LDh9JC8udGVzdChpKX0sImRlLURFIjpmdW5jdGlvbihpKXtyZXR1cm4vXigoQXxBQXxBQnxBQ3xBRXxBSHxBS3xBTXxBTnxBw5Z8QVB8QVN8QVR8QVV8QVd8QVp8QnxCQXxCQnxCQ3xCRXxCRnxCSHxCSXxCS3xCTHxCTXxCTnxCT3xCw5Z8QlN8QlR8Qlp8Q3xDQXxDQnxDRXxDT3xDUnxDV3xEfERBfEREfERFfERIfERJfERMfERNfEROfERPfERVfERXfERafEV8RUF8RUJ8RUR8RUV8RUZ8RUd8RUh8RUl8RUx8RU18RU58RVJ8RVN8RVV8RVd8RnxGQnxGRHxGRnxGR3xGSXxGTHxGTnxGT3xGUnxGU3xGVHxGw5x8Rld8Rlp8R3xHQXxHQ3xHRHxHRXxHRnxHR3xHSXxHS3xHTHxHTXxHTnxHw5Z8R1B8R1J8R1N8R1R8R8OcfEdWfEdXfEdafEh8SEF8SEJ8SEN8SER8SEV8SEZ8SEd8SEh8SEl8SEt8SEx8SE18SE58SE98SFB8SFJ8SFN8SFV8SFZ8SFh8SFl8SFp8SUt8SUx8SU58SVp8SnxKRXxKTHxLfEtBfEtCfEtDfEtFfEtGfEtHfEtIfEtJfEtLfEtMfEtNfEtOfEtPfEtSfEtTfEtUfEtVfEtXfEtZfEx8TEF8TEJ8TEN8TER8TEZ8TEd8TEh8TEl8TEx8TE18TE58TMOWfExQfExSfExVfE18TUF8TUJ8TUN8TUR8TUV8TUd8TUh8TUl8TUt8TUx8TU18TU58TU98TVF8TVJ8TVN8TcOcfE1XfE1ZfE1afE58TkJ8TkR8TkV8TkZ8Tkh8Tkl8Tkt8Tk18TsOWfE5QfE5SfE5UfE5VfE5XfE5ZfE5afE9BfE9CfE9DfE9EfE9FfE9GfE9HfE9IfE9LfE9MfE9QfE9TfE9afFB8UEF8UEJ8UEV8UEZ8UEl8UEx8UE18UE58UFJ8UFN8UFd8UFp8UnxSQXxSQ3xSRHxSRXxSR3xSSHxSSXxSTHxSTXxSTnxST3xSUHxSU3xSVHxSVXxSVnxSV3xSWnxTfFNCfFNDfFNFfFNHfFNJfFNLfFNMfFNNfFNOfFNPfFNQfFNSfFNUfFNVfFNXfFNZfFNafFRFfFRGfFRHfFRPfFRQfFRSfFRTfFRUfFTDnHzDnEJ8VUV8VUh8VUx8VU18VU58VnxWQnxWR3xWS3xWUnxWU3xXfFdBfFdCfFdFfFdGfFdJfFdLfFdMfFdNfFdOfFdPfFdSfFdTfFdUfFfDnHxXV3xXWnxafFpFfFpJfFpQfFpSfFpXfFpaKVstIF0/W0EtWl17MSwyfVstIF0/XGR7MSw0fXwoQUJHfEFCSXxBSUJ8QUlDfEFMRnxBTFp8QU5BfEFOR3xBTkt8QVBEfEFSTnxBUlR8QVNMfEFTWnxBVVJ8QVpFfEJBRHxCQVJ8QkJHfEJDSHxCRUR8QkVSfEJHRHxCR0x8QklEfEJJTnxCSVJ8QklUfEJJV3xCS1N8QkxCfEJMS3xCTkF8Qk9HfEJPSHxCT1J8Qk9UfEJSQXxCUkJ8QlJHfEJSS3xCUkx8QlJWfEJTQnxCU0t8QlRGfELDnER8QlVMfELDnFJ8QsOcU3xCw5xafENBU3xDSEF8Q0xQfENMWnxDT0N8Q09FfENVWHxEQUh8REFOfERBVXxEQlJ8REVHfERFTHxER0Z8RElMfERJTnxESVp8REtCfERMR3xET058RFVEfETDnFd8RUJFfEVCTnxFQlN8RUNLfEVJQ3xFSUx8RUlOfEVJU3xFTUR8RU1TfEVSQnxFUkh8RVJLfEVSWnxFU0J8RVNXfEZEQnxGRFN8RkVVfEZGQnxGS0J8RkzDlnxGT1J8RlJHfEZSSXxGUld8RlRMfEbDnFN8R0FOfEdBUHxHREJ8R0VMfEdFT3xHRVJ8R0hBfEdIQ3xHTEF8R01OfEdOVHxHT0F8R09IfEdSQXxHUkh8R1JJfEdSTXxHUlp8R1RIfEdVQnxHVU58R1ZNfEhBQnxIQUx8SEFNfEhBU3xIQk58SEJTfEhDSHxIREh8SERMfEhFQnxIRUZ8SEVJfEhFUnxIRVR8SEdOfEhHV3xISE18SElHfEhJUHxITcOcfEhPR3xIT0h8SE9MfEhPTXxIT1J8SMOWU3xIT1R8SFJPfEhTS3xIU1R8SFZMfEhXSXxJR0J8SUxMfErDnEx8S0VIfEtFTHxLRU18S0lCfEtMRXxLTFp8S8OWTnxLw5ZUfEvDllp8S1JVfEvDnE58S1VTfEtZRnxMQU58TEFVfExCU3xMQlp8TERLfExEU3xMRU98TEVSfExFVnxMSUJ8TElGfExJUHxMw5ZCfExPU3xMUk98TFNafEzDnE58TFVQfExXTHxNQUJ8TUFJfE1BS3xNQUx8TUVEfE1FR3xNRUl8TUVLfE1FTHxNRVJ8TUVUfE1HSHxNR058TUhMfE1JTHxNS0t8TU9EfE1PTHxNT058TU9TfE1TRXxNU0h8TVNQfE1TVHxNVEt8TVRMfE3DnEJ8TcOcUnxNWUt8TVpHfE5BQnxOQUl8TkFVfE5ESHxORUF8TkVCfE5FQ3xORU58TkVTfE5FV3xOTUJ8Tk1TfE5PSHxOT0x8Tk9NfE5PUnxOVlB8TldNfE9BTHxPQkJ8T0JHfE9DSHxPSEF8w5ZIUnxPSFZ8T0hafE9QUnxPU0x8T1ZJfE9WTHxPVlB8UEFGfFBBTnxQQVJ8UENIfFBFR3xQSVJ8UEzDlnxQUsOcfFFGVHxRTEJ8UkRHfFJFR3xSRUh8UkVJfFJJRHxSSUV8Uk9EfFJPRnxST0t8Uk9MfFJPU3xST1R8Uk9XfFJTTHxSw5xEfFLDnEd8U0FCfFNBRHxTQU58U0FXfFNCR3xTQkt8U0NafFNESHxTREx8U0RUfFNFQnxTRUV8U0VGfFNFTHxTRkJ8U0ZUfFNHSHxTSEF8U0hHfFNIS3xTSEx8U0lHfFNJTXxTTEV8U0xGfFNMS3xTTE58U0xTfFNMw5x8U0xafFNNw5x8U09CfFNPR3xTT0t8U8OWTXxTT058U1BCfFNQTnxTUkJ8U1JPfFNUQXxTVEJ8U1REfFNURXxTVEx8U1VMfFPDnFd8U1dBfFNaQnxUQkJ8VERPfFRFVHxUSVJ8VMOWTHxUVVR8VUVNfFVFUnxVRkZ8VVNJfFZBSXxWRUN8VkVSfFZJQnxWSUV8VklUfFZPSHxXQUZ8V0FLfFdBTnxXQVJ8V0FUfFdCU3xXREF8V0VMfFdFTnxXRVJ8V0VTfFdIVnxXSUx8V0lTfFdJVHxXSVp8V0xHfFdNU3xXTkR8V09CfFdPSHxXT0x8V09SfFdPU3xXUk58V1NGfFdTVHxXU1d8V1RMfFdUTXxXVUd8V8OcTXxXVU58V1VSfFdaTHxaRUx8WklHKVstIF0/KChbQS1aXVstIF0/XGR7MSw0fSl8KFtBLVpdezJ9Wy0gXT9cZHsxLDN9KSkpWy0gXT8oRXxIKT8kLy50ZXN0KGkpfSwiZGUtTEkiOmZ1bmN0aW9uKGkpe3JldHVybi9eRkxbLSBdP1xkezEsNX1bVVpdPyQvLnRlc3QoaSl9LCJlbi1JTiI6ZnVuY3Rpb24oaSl7cmV0dXJuL15bQS1aXXsyfVsgLV0/WzAtOV17MSwyfSg/OlsgLV0/W0EtWl0pKD86WyAtXT9bQS1aXSopP1sgLV0/WzAtOV17NH0kLy50ZXN0KGkpfSwiZW4tU0ciOmZ1bmN0aW9uKGkpe3JldHVybi9eW0EtWl17M31bIC1dP1tcZF17NH1bIC1dP1tBLVpdezF9JC8udGVzdChpKX0sImVzLUFSIjpmdW5jdGlvbihpKXtyZXR1cm4vXigoW0EtWl17Mn0gP1swLTldezN9ID9bQS1aXXsyfSl8KFtBLVpdezN9ID9bMC05XXszfSkpJC8udGVzdChpKX0sImZpLUZJIjpmdW5jdGlvbihpKXtyZXR1cm4vXig/PS57NCw3fSkoKFtBLVpdezEsM318WzAtOV17MSwzfSlbXHMtXT8oW0EtWl17MSwzfXxbMC05XXsxLDV9KSkkLy50ZXN0KGkpfSwiaHUtSFUiOmZ1bmN0aW9uKGkpe3JldHVybi9eKCgoKD8hQUFBKSgoW0EtTlBSU1RWWldYWV17MX0pKFtBLVBSLVpdezF9KShbQS1ISi1OUFItWl0pKXwoQVtBQkNdSSl8QVtBQkNdT3xBW0EtV11RfEJQSXxCUE98VUNPfFVET3xYQU8pLSg/ITAwMClcZHszfSl8KE1cZHs2fSl8KChDS3xEVHxDRHxIQ3xIW0FCRUZJS0xNTlBSU1RWWF18TUF8T1R8UltBLVpdKSBcZHsyfS1cZHsyfSl8KENEIFxkezN9LVxkezN9KXwoQy0oQ3xYKSBcZHs0fSl8KFgtKEF8QnxDKSBcZHs0fSl8KChbRVBWWl0tXGR7NX0pKXwoUyBBW0EtWl17Mn0gXGR7Mn0pfChTUCBcZHsyfS1cZHsyfSkpJC8udGVzdChpKX0sInB0LUJSIjpmdW5jdGlvbihpKXtyZXR1cm4vXltBLVpdezN9WyAtXT9bMC05XVtBLVpdWzAtOV17Mn18W0EtWl17M31bIC1dP1swLTldezR9JC8udGVzdChpKX0sInB0LVBUIjpmdW5jdGlvbihpKXtyZXR1cm4vXigoW0EtWl17Mn1bIC3Ct10/WzAtOV17Mn1bIC3Ct10/WzAtOV17Mn0pfChbMC05XXsyfVsgLcK3XT9bQS1aXXsyfVsgLcK3XT9bMC05XXsyfSl8KFswLTldezJ9WyAtwrddP1swLTldezJ9WyAtwrddP1tBLVpdezJ9KXwoW0EtWl17Mn1bIC3Ct10/WzAtOV17Mn1bIC3Ct10/W0EtWl17Mn0pKSQvLnRlc3QoaSl9LCJzcS1BTCI6ZnVuY3Rpb24oaSl7cmV0dXJuL15bQS1aXXsyfVstIF0/KChcZHszfVstIF0/KChbQS1aXXsyfSl8VCkpfChSWy0gXT9cZHszfSkpJC8udGVzdChpKX0sInN2LVNFIjpmdW5jdGlvbihpKXtyZXR1cm4vXltBLUhKLVBSLVVXLVpdezN9ID9bXGRdezJ9W0EtSEotUFItVVctWjEtOV0kfCheW0EtWsOFw4TDliBdezIsN30kKS8udGVzdChpLnRyaW0oKSl9LCJlbi1QSyI6ZnVuY3Rpb24oaSl7cmV0dXJuLyheW0EtWl17Mn0oKFxzfC0pezAsMX0pWzAtOV17Myw0fSgoXHN8LSlbMC05XXsyfSl7MCwxfSQpfCheW0EtWl17M30oKFxzfC0pezAsMX0pWzAtOV17Myw0fSgoXHN8LSlbMC05XXsyfSl7MCwxfSQpfCheW0EtWl17NH0oKFxzfC0pezAsMX0pWzAtOV17Myw0fSgoXHN8LSlbMC05XXsyfSl7MCwxfSQpfCheW0EtWl0oKFxzfC0pezAsMX0pWzAtOV17NH0oKFxzfC0pWzAtOV17Mn0pezAsMX0kKS8udGVzdChpLnRyaW0oKSl9fTtmdW5jdGlvbiByKG8saSl7aWYoKDAsdC5kZWZhdWx0KShvKSxpIGluIHMpcmV0dXJuIHNbaV0obyk7aWYoaT09PSJhbnkiKXtmb3IodmFyIGMgaW4gcyl7dmFyIGY9c1tjXTtpZihmKG8pKXJldHVybiEwfXJldHVybiExfXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsb2NhbGUgJyIuY29uY2F0KGksIiciKSl9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KSh1ZCx1ZC5leHBvcnRzKTt2YXIgcXc9dWQuZXhwb3J0cyxsZD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKG4sZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZGVmYXVsdD1UO3ZhciB0PXMocXQpLGE9cyhpZSk7ZnVuY3Rpb24gcyhXKXtyZXR1cm4gVyYmVy5fX2VzTW9kdWxlP1c6e2RlZmF1bHQ6V319dmFyIHI9L15bQS1aXSQvLG89L15bYS16XSQvLGk9L15bMC05XSQvLGM9L15bLSMhJEDCoyVeJiooKV8rfH49YHt9XFtcXToiOyc8Pj8sLlwvXFwgXSQvLGY9e21pbkxlbmd0aDo4LG1pbkxvd2VyY2FzZToxLG1pblVwcGVyY2FzZToxLG1pbk51bWJlcnM6MSxtaW5TeW1ib2xzOjEscmV0dXJuU2NvcmU6ITEscG9pbnRzUGVyVW5pcXVlOjEscG9pbnRzUGVyUmVwZWF0Oi41LHBvaW50c0ZvckNvbnRhaW5pbmdMb3dlcjoxMCxwb2ludHNGb3JDb250YWluaW5nVXBwZXI6MTAscG9pbnRzRm9yQ29udGFpbmluZ051bWJlcjoxMCxwb2ludHNGb3JDb250YWluaW5nU3ltYm9sOjEwfTtmdW5jdGlvbiBkKFcpe3ZhciBnPXt9O3JldHVybiBBcnJheS5mcm9tKFcpLmZvckVhY2goZnVuY3Rpb24oQSl7dmFyIG09Z1tBXTttP2dbQV0rPTE6Z1tBXT0xfSksZ31mdW5jdGlvbiBwKFcpe3ZhciBnPWQoVyksQT17bGVuZ3RoOlcubGVuZ3RoLHVuaXF1ZUNoYXJzOk9iamVjdC5rZXlzKGcpLmxlbmd0aCx1cHBlcmNhc2VDb3VudDowLGxvd2VyY2FzZUNvdW50OjAsbnVtYmVyQ291bnQ6MCxzeW1ib2xDb3VudDowfTtyZXR1cm4gT2JqZWN0LmtleXMoZykuZm9yRWFjaChmdW5jdGlvbihtKXtyLnRlc3QobSk/QS51cHBlcmNhc2VDb3VudCs9Z1ttXTpvLnRlc3QobSk/QS5sb3dlcmNhc2VDb3VudCs9Z1ttXTppLnRlc3QobSk/QS5udW1iZXJDb3VudCs9Z1ttXTpjLnRlc3QobSkmJihBLnN5bWJvbENvdW50Kz1nW21dKX0pLEF9ZnVuY3Rpb24gYihXLGcpe3ZhciBBPTA7cmV0dXJuIEErPVcudW5pcXVlQ2hhcnMqZy5wb2ludHNQZXJVbmlxdWUsQSs9KFcubGVuZ3RoLVcudW5pcXVlQ2hhcnMpKmcucG9pbnRzUGVyUmVwZWF0LFcubG93ZXJjYXNlQ291bnQ+MCYmKEErPWcucG9pbnRzRm9yQ29udGFpbmluZ0xvd2VyKSxXLnVwcGVyY2FzZUNvdW50PjAmJihBKz1nLnBvaW50c0ZvckNvbnRhaW5pbmdVcHBlciksVy5udW1iZXJDb3VudD4wJiYoQSs9Zy5wb2ludHNGb3JDb250YWluaW5nTnVtYmVyKSxXLnN5bWJvbENvdW50PjAmJihBKz1nLnBvaW50c0ZvckNvbnRhaW5pbmdTeW1ib2wpLEF9ZnVuY3Rpb24gVChXKXt2YXIgZz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06bnVsbDsoMCxhLmRlZmF1bHQpKFcpO3ZhciBBPXAoVyk7cmV0dXJuIGc9KDAsdC5kZWZhdWx0KShnfHx7fSxmKSxnLnJldHVyblNjb3JlP2IoQSxnKTpBLmxlbmd0aD49Zy5taW5MZW5ndGgmJkEubG93ZXJjYXNlQ291bnQ+PWcubWluTG93ZXJjYXNlJiZBLnVwcGVyY2FzZUNvdW50Pj1nLm1pblVwcGVyY2FzZSYmQS5udW1iZXJDb3VudD49Zy5taW5OdW1iZXJzJiZBLnN5bWJvbENvdW50Pj1nLm1pblN5bWJvbHN9bi5leHBvcnRzPWUuZGVmYXVsdCxuLmV4cG9ydHMuZGVmYXVsdD1lLmRlZmF1bHR9KShsZCxsZC5leHBvcnRzKTt2YXIgSnc9bGQuZXhwb3J0cyxvaT17fTtmdW5jdGlvbiBmZChuKXsiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2YiO3JldHVybiBmZD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT0ic3ltYm9sIj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZ0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sZmQobil9T2JqZWN0LmRlZmluZVByb3BlcnR5KG9pLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtvaS5kZWZhdWx0PXJ2O29pLnZhdE1hdGNoZXJzPXZvaWQgMDt2YXIgcXA9WHcoaWUpLFl3PVN5KGpvKTtmdW5jdGlvbiBTeShuLGUpe2lmKHR5cGVvZiBXZWFrTWFwPT0iZnVuY3Rpb24iKXZhciB0PW5ldyBXZWFrTWFwLGE9bmV3IFdlYWtNYXA7cmV0dXJuKFN5PWZ1bmN0aW9uKHIsbyl7aWYoIW8mJnImJnIuX19lc01vZHVsZSlyZXR1cm4gcjt2YXIgaSxjLGY9e19fcHJvdG9fXzpudWxsLGRlZmF1bHQ6cn07aWYocj09PW51bGx8fGZkKHIpIT0ib2JqZWN0IiYmdHlwZW9mIHIhPSJmdW5jdGlvbiIpcmV0dXJuIGY7aWYoaT1vP2E6dCl7aWYoaS5oYXMocikpcmV0dXJuIGkuZ2V0KHIpO2kuc2V0KHIsZil9Zm9yKHZhciBkIGluIHIpZCE9PSJkZWZhdWx0IiYme30uaGFzT3duUHJvcGVydHkuY2FsbChyLGQpJiYoKGM9KGk9T2JqZWN0LmRlZmluZVByb3BlcnR5KSYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGQpKSYmKGMuZ2V0fHxjLnNldCk/aShmLGQsYyk6ZltkXT1yW2RdKTtyZXR1cm4gZn0pKG4sZSl9ZnVuY3Rpb24gWHcobil7cmV0dXJuIG4mJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59fXZhciBRdz1mdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKC9eKEFVKT8oXGR7MTF9KSQvKTtpZighdClyZXR1cm4hMTt2YXIgYT1bMTAsMSwzLDUsNyw5LDExLDEzLDE1LDE3LDE5XTtlPWUucmVwbGFjZSgvXkFVLywiIik7Zm9yKHZhciBzPShwYXJzZUludChlLnNsaWNlKDAsMSksMTApLTEpLnRvU3RyaW5nKCkrZS5zbGljZSgxKSxyPTAsbz0wO288MTE7bysrKXIrPWFbb10qcy5jaGFyQXQobyk7cmV0dXJuIHIhPT0wJiZyJTg5PT09MH0sZXY9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24ocyl7dmFyIHI9cy5wb3AoKSxvPVs1LDQsMywyLDcsNiw1LDRdLGk9KDExLXMucmVkdWNlKGZ1bmN0aW9uKGMsZixkKXtyZXR1cm4gYytmKm9bZF19LDApJTExKSUxMTtyZXR1cm4gcj09PWl9O3JldHVybi9eKENIRVstIF0/KT8oXGR7OX18KFxkezN9XC5cZHszfVwuXGR7M30pfChcZHszfSBcZHszfSBcZHszfSkpID8oVFZBfE1XU1R8SVZBKT8kLy50ZXN0KGUpJiZ0KGUubWF0Y2goL1xkL2cpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4rYX0pKX0sdHY9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXRjaCgvXihQVCk/KFxkezl9KSQvKTtpZighdClyZXR1cm4hMTt2YXIgYT10WzJdLHM9MTEtWXcucmV2ZXJzZU11bHRpcGx5QW5kU3VtKGEuc3BsaXQoIiIpLnNsaWNlKDAsOCkubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBwYXJzZUludChyLDEwKX0pLDkpJTExO3JldHVybiBzPjk/cGFyc2VJbnQoYVs4XSwxMCk9PT0wOnM9PT1wYXJzZUludChhWzhdLDEwKX0sSnA9b2kudmF0TWF0Y2hlcnM9e0FUOmZ1bmN0aW9uKGUpe3JldHVybi9eKEFUKT9VXGR7OH0kLy50ZXN0KGUpfSxCRTpmdW5jdGlvbihlKXtyZXR1cm4vXihCRSk/XGR7MTB9JC8udGVzdChlKX0sQkc6ZnVuY3Rpb24oZSl7cmV0dXJuL14oQkcpP1xkezksMTB9JC8udGVzdChlKX0sSFI6ZnVuY3Rpb24oZSl7cmV0dXJuL14oSFIpP1xkezExfSQvLnRlc3QoZSl9LENZOmZ1bmN0aW9uKGUpe3JldHVybi9eKENZKT9cd3s5fSQvLnRlc3QoZSl9LENaOmZ1bmN0aW9uKGUpe3JldHVybi9eKENaKT9cZHs4LDEwfSQvLnRlc3QoZSl9LERLOmZ1bmN0aW9uKGUpe3JldHVybi9eKERLKT9cZHs4fSQvLnRlc3QoZSl9LEVFOmZ1bmN0aW9uKGUpe3JldHVybi9eKEVFKT9cZHs5fSQvLnRlc3QoZSl9LEZJOmZ1bmN0aW9uKGUpe3JldHVybi9eKEZJKT9cZHs4fSQvLnRlc3QoZSl9LEZSOmZ1bmN0aW9uKGUpe3JldHVybi9eKEZSKShbQS1aMC05XXsyfVxkezl9KSQvLnRlc3QoZSl9LERFOmZ1bmN0aW9uKGUpe3JldHVybi9eKERFKT9cZHs5fSQvLnRlc3QoZSl9LEVMOmZ1bmN0aW9uKGUpe3JldHVybi9eKEVMKT9cZHs5fSQvLnRlc3QoZSl9LEhVOmZ1bmN0aW9uKGUpe3JldHVybi9eKEhVKT9cZHs4fSQvLnRlc3QoZSl9LElFOmZ1bmN0aW9uKGUpe3JldHVybi9eKElFKT9cZHs3fVx3ezF9KFcpPyQvLnRlc3QoZSl9LElUOmZ1bmN0aW9uKGUpe3JldHVybi9eKElUKT9cZHsxMX0kLy50ZXN0KGUpfSxMVjpmdW5jdGlvbihlKXtyZXR1cm4vXihMVik/XGR7MTF9JC8udGVzdChlKX0sTFQ6ZnVuY3Rpb24oZSl7cmV0dXJuL14oTFQpP1xkezksMTJ9JC8udGVzdChlKX0sTFU6ZnVuY3Rpb24oZSl7cmV0dXJuL14oTFUpP1xkezh9JC8udGVzdChlKX0sTVQ6ZnVuY3Rpb24oZSl7cmV0dXJuL14oTVQpP1xkezh9JC8udGVzdChlKX0sTkw6ZnVuY3Rpb24oZSl7cmV0dXJuL14oTkwpP1xkezl9QlxkezJ9JC8udGVzdChlKX0sUEw6ZnVuY3Rpb24oZSl7cmV0dXJuL14oUEwpPyhcZHsxMH18KFxkezN9LVxkezN9LVxkezJ9LVxkezJ9KXwoXGR7M30tXGR7Mn0tXGR7Mn0tXGR7M30pKSQvLnRlc3QoZSl9LFBUOnR2LFJPOmZ1bmN0aW9uKGUpe3JldHVybi9eKFJPKT9cZHsyLDEwfSQvLnRlc3QoZSl9LFNLOmZ1bmN0aW9uKGUpe3JldHVybi9eKFNLKT9cZHsxMH0kLy50ZXN0KGUpfSxTSTpmdW5jdGlvbihlKXtyZXR1cm4vXihTSSk/XGR7OH0kLy50ZXN0KGUpfSxFUzpmdW5jdGlvbihlKXtyZXR1cm4vXihFUyk/XHdcZHs3fVtBLVpdJC8udGVzdChlKX0sU0U6ZnVuY3Rpb24oZSl7cmV0dXJuL14oU0UpP1xkezEyfSQvLnRlc3QoZSl9LEFMOmZ1bmN0aW9uKGUpe3JldHVybi9eKEFMKT9cd3s5fVtBLVpdJC8udGVzdChlKX0sTUs6ZnVuY3Rpb24oZSl7cmV0dXJuL14oTUspP1xkezEzfSQvLnRlc3QoZSl9LEFVOlF3LEJZOmZ1bmN0aW9uKGUpe3JldHVybi9eKNCj0J3QnyApP1xkezl9JC8udGVzdChlKX0sQ0E6ZnVuY3Rpb24oZSl7cmV0dXJuL14oQ0EpP1xkezl9JC8udGVzdChlKX0sSVM6ZnVuY3Rpb24oZSl7cmV0dXJuL14oSVMpP1xkezUsNn0kLy50ZXN0KGUpfSxJTjpmdW5jdGlvbihlKXtyZXR1cm4vXihJTik/XGR7MTV9JC8udGVzdChlKX0sSUQ6ZnVuY3Rpb24oZSl7cmV0dXJuL14oSUQpPyhcZHsxNX18KFxkezJ9LlxkezN9LlxkezN9LlxkezF9LVxkezN9LlxkezN9KSkkLy50ZXN0KGUpfSxJTDpmdW5jdGlvbihlKXtyZXR1cm4vXihJTCk/XGR7OX0kLy50ZXN0KGUpfSxLWjpmdW5jdGlvbihlKXtyZXR1cm4vXihLWik/XGR7MTJ9JC8udGVzdChlKX0sTlo6ZnVuY3Rpb24oZSl7cmV0dXJuL14oTlopP1xkezl9JC8udGVzdChlKX0sTkc6ZnVuY3Rpb24oZSl7cmV0dXJuL14oTkcpPyhcZHsxMn18KFxkezh9LVxkezR9KSkkLy50ZXN0KGUpfSxOTzpmdW5jdGlvbihlKXtyZXR1cm4vXihOTyk/XGR7OX1NVkEkLy50ZXN0KGUpfSxQSDpmdW5jdGlvbihlKXtyZXR1cm4vXihQSCk/KFxkezEyfXxcZHszfSBcZHszfSBcZHszfSBcZHszfSkkLy50ZXN0KGUpfSxSVTpmdW5jdGlvbihlKXtyZXR1cm4vXihSVSk/KFxkezEwfXxcZHsxMn0pJC8udGVzdChlKX0sU006ZnVuY3Rpb24oZSl7cmV0dXJuL14oU00pP1xkezV9JC8udGVzdChlKX0sU0E6ZnVuY3Rpb24oZSl7cmV0dXJuL14oU0EpP1xkezE1fSQvLnRlc3QoZSl9LFJTOmZ1bmN0aW9uKGUpe3JldHVybi9eKFJTKT9cZHs5fSQvLnRlc3QoZSl9LENIOmV2LFRSOmZ1bmN0aW9uKGUpe3JldHVybi9eKFRSKT9cZHsxMH0kLy50ZXN0KGUpfSxVQTpmdW5jdGlvbihlKXtyZXR1cm4vXihVQSk/XGR7MTJ9JC8udGVzdChlKX0sR0I6ZnVuY3Rpb24oZSl7cmV0dXJuL15HQigoXGR7M30gXGR7NH0gKFswLThdWzAtOV18OVswLTZdKSl8KFxkezl9IFxkezN9KXwoKChHRFswLTRdKXwoSEFbNS05XSkpWzAtOV17Mn0pKSQvLnRlc3QoZSl9LFVaOmZ1bmN0aW9uKGUpe3JldHVybi9eKFVaKT9cZHs5fSQvLnRlc3QoZSl9LEFSOmZ1bmN0aW9uKGUpe3JldHVybi9eKEFSKT9cZHsxMX0kLy50ZXN0KGUpfSxCTzpmdW5jdGlvbihlKXtyZXR1cm4vXihCTyk/XGR7N30kLy50ZXN0KGUpfSxCUjpmdW5jdGlvbihlKXtyZXR1cm4vXihCUik/KChcZHsyfS5cZHszfS5cZHszfVwvXGR7NH0tXGR7Mn0pfChcZHszfS5cZHszfS5cZHszfS1cZHsyfSkpJC8udGVzdChlKX0sQ0w6ZnVuY3Rpb24oZSl7cmV0dXJuL14oQ0wpP1xkezh9LVxkezF9JC8udGVzdChlKX0sQ086ZnVuY3Rpb24oZSl7cmV0dXJuL14oQ08pP1xkezEwfSQvLnRlc3QoZSl9LENSOmZ1bmN0aW9uKGUpe3JldHVybi9eKENSKT9cZHs5LDEyfSQvLnRlc3QoZSl9LEVDOmZ1bmN0aW9uKGUpe3JldHVybi9eKEVDKT9cZHsxM30kLy50ZXN0KGUpfSxTVjpmdW5jdGlvbihlKXtyZXR1cm4vXihTVik/XGR7NH0tXGR7Nn0tXGR7M30tXGR7MX0kLy50ZXN0KGUpfSxHVDpmdW5jdGlvbihlKXtyZXR1cm4vXihHVCk/XGR7N30tXGR7MX0kLy50ZXN0KGUpfSxITjpmdW5jdGlvbihlKXtyZXR1cm4vXihITik/JC8udGVzdChlKX0sTVg6ZnVuY3Rpb24oZSl7cmV0dXJuL14oTVgpP1x3ezMsNH1cZHs2fVx3ezN9JC8udGVzdChlKX0sTkk6ZnVuY3Rpb24oZSl7cmV0dXJuL14oTkkpP1xkezN9LVxkezZ9LVxkezR9XHd7MX0kLy50ZXN0KGUpfSxQQTpmdW5jdGlvbihlKXtyZXR1cm4vXihQQSk/JC8udGVzdChlKX0sUFk6ZnVuY3Rpb24oZSl7cmV0dXJuL14oUFkpP1xkezYsOH0tXGR7MX0kLy50ZXN0KGUpfSxQRTpmdW5jdGlvbihlKXtyZXR1cm4vXihQRSk/XGR7MTF9JC8udGVzdChlKX0sRE86ZnVuY3Rpb24oZSl7cmV0dXJuL14oRE8pPyhcZHsxMX18KFxkezN9LVxkezd9LVxkezF9KXxbMSw0LDVdezF9XGR7OH18KFsxLDQsNV17MX0pLVxkezJ9LVxkezV9LVxkezF9KSQvLnRlc3QoZSl9LFVZOmZ1bmN0aW9uKGUpe3JldHVybi9eKFVZKT9cZHsxMn0kLy50ZXN0KGUpfSxWRTpmdW5jdGlvbihlKXtyZXR1cm4vXihWRSk/W0osRyxWLEVdezF9LShcZHs5fXwoXGR7OH0tXGR7MX0pKSQvLnRlc3QoZSl9fTtmdW5jdGlvbiBydihuLGUpe2lmKCgwLHFwLmRlZmF1bHQpKG4pLCgwLHFwLmRlZmF1bHQpKGUpLGUgaW4gSnApcmV0dXJuIEpwW2VdKG4pO3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb3VudHJ5IGNvZGU6ICciLmNvbmNhdChlLCInIikpfShmdW5jdGlvbihuLGUpe2Z1bmN0aW9uIHQodmUpeyJAYmFiZWwvaGVscGVycyAtIHR5cGVvZiI7cmV0dXJuIHQ9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09InN5bWJvbCI/ZnVuY3Rpb24oQXIpe3JldHVybiB0eXBlb2YgQXJ9OmZ1bmN0aW9uKEFyKXtyZXR1cm4gQXImJnR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJkFyLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZBciE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIEFyfSx0KHZlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PXZvaWQgMDt2YXIgYT1vZShKZCkscz1vZShmeSkscj1vZSgkMiksbz1vZShMMiksaT1vZSh6MiksYz1vZShqMiksZj1vZShWMiksZD1vZShneSkscD1vZShHMiksYj1vZShIMiksVD1vZSgkYyksVz1vZShLMiksZz1vZShZZCksQT1vZSh5eSksbT1vZShaMiksdz1vZShxMiksQj1vZShKMiksaz1vZShZMiksVj1TKHFhKSxMPVMoSmEpLEk9b2Uob1ApLHk9UyhZYSksRT1vZShjUCksQz1vZSh1UCksRj1vZShsUCksJD1vZShmUCksTz1vZShkUCksUj1vZShYcykseD1vZShRcyksdj1vZShtUCksXz1vZShQUCksTT1vZSh2UCksej1vZShDUCkscT1vZShYZCksUT1TKFlzKSxlZT1vZShFUCksZ2U9b2UoeHkpLFRlPW9lKFdQKSxwZT1vZShCUCksZmU9b2UoSVApLGRlPW9lKFNQKSxCZT1vZShfUCksS2U9b2UoT1ApLFFlPVMoWGEpLHJ0PW9lKExQKSxJZT1vZSh6UCksTWU9b2UoalApLE5lPW9lKFZQKSxfZT1vZShHUCksQ2U9b2UoSFApLEQ9b2UoS1ApLGo9b2UoaHkpLFg9b2UoWlApLHNlPW9lKHFQKSxuZT1vZShKUCksdGU9b2UoWVApLEVlPW9lKFhQKSxTZT1vZShRUCksVWU9b2UoUHkpLFZlPW9lKGV3KSx3dD1vZSh0dykseHI9b2UocncpLHVyPW9lKG53KSxRcj1vZShvdyksSj1vZShzdyksbHI9b2UobHcpLFRyPVMoUWEpLFU9b2UoaHcpLE1uPW9lKGd3KSxkaT1vZShidyksb3Q9ZWksc289b2UobXcpLHBpPW9lKFB3KSxoZT1vZSh3dyksVm89b2UodGkpLGFvPW9lKGVhKSxHbz1vZShXdyksaGk9b2UoQncpLER0PW9lKHJpKSxnaT1vZShPdyksYmk9b2UoUncpLHlpPW9lKG15KSx4aT1vZShNdyksVGk9b2UoRncpLEFpPW9lKE53KSxrcj1vZShrdyksZ249b2UoVXcpLGlhPVMobmkpLGNhPW9lKFd5KSxtaT1vZShFeSksUGk9b2UoQnkpLHVhPW9lKHp3KSxpbz1vZShqdyksSG89b2UoVncpLGxhPW9lKEd3KSxmcj1vZShJeSksY2U9b2UoSHcpLFdlPW9lKEt3KSxmYT1vZShadyksRm49b2UocXcpLHh0PW9lKEp3KSxLbz1vZShvaSk7ZnVuY3Rpb24gUyh2ZSxBcil7aWYodHlwZW9mIFdlYWtNYXA9PSJmdW5jdGlvbiIpdmFyIGRhPW5ldyBXZWFrTWFwLHU9bmV3IFdlYWtNYXA7cmV0dXJuKFM9ZnVuY3Rpb24oaCxQKXtpZighUCYmaCYmaC5fX2VzTW9kdWxlKXJldHVybiBoO3ZhciBOLEsscmU9e19fcHJvdG9fXzpudWxsLGRlZmF1bHQ6aH07aWYoaD09PW51bGx8fHQoaCkhPSJvYmplY3QiJiZ0eXBlb2YgaCE9ImZ1bmN0aW9uIilyZXR1cm4gcmU7aWYoTj1QP3U6ZGEpe2lmKE4uaGFzKGgpKXJldHVybiBOLmdldChoKTtOLnNldChoLHJlKX1mb3IodmFyIHdlIGluIGgpd2UhPT0iZGVmYXVsdCImJnt9Lmhhc093blByb3BlcnR5LmNhbGwoaCx3ZSkmJigoSz0oTj1PYmplY3QuZGVmaW5lUHJvcGVydHkpJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGgsd2UpKSYmKEsuZ2V0fHxLLnNldCk/TihyZSx3ZSxLKTpyZVt3ZV09aFt3ZV0pO3JldHVybiByZX0pKHZlLEFyKX1mdW5jdGlvbiBvZSh2ZSl7cmV0dXJuIHZlJiZ2ZS5fX2VzTW9kdWxlP3ZlOntkZWZhdWx0OnZlfX12YXIgYXQ9IjEzLjE1LjIzIixpdD17dmVyc2lvbjphdCx0b0RhdGU6YS5kZWZhdWx0LHRvRmxvYXQ6cy5kZWZhdWx0LHRvSW50OnIuZGVmYXVsdCx0b0Jvb2xlYW46by5kZWZhdWx0LGVxdWFsczppLmRlZmF1bHQsY29udGFpbnM6Yy5kZWZhdWx0LG1hdGNoZXM6Zi5kZWZhdWx0LGlzRW1haWw6ZC5kZWZhdWx0LGlzVVJMOnAuZGVmYXVsdCxpc01BQ0FkZHJlc3M6Yi5kZWZhdWx0LGlzSVA6VC5kZWZhdWx0LGlzSVBSYW5nZTpXLmRlZmF1bHQsaXNGUUROOmcuZGVmYXVsdCxpc0Jvb2xlYW46dy5kZWZhdWx0LGlzSUJBTjpRZS5kZWZhdWx0LGlzQklDOnJ0LmRlZmF1bHQsaXNBYmFSb3V0aW5nOmsuZGVmYXVsdCxpc0FscGhhOlYuZGVmYXVsdCxpc0FscGhhTG9jYWxlczpWLmxvY2FsZXMsaXNBbHBoYW51bWVyaWM6TC5kZWZhdWx0LGlzQWxwaGFudW1lcmljTG9jYWxlczpMLmxvY2FsZXMsaXNOdW1lcmljOkkuZGVmYXVsdCxpc1Bhc3Nwb3J0TnVtYmVyOnkuZGVmYXVsdCxwYXNzcG9ydE51bWJlckxvY2FsZXM6eS5sb2NhbGVzLGlzUG9ydDpFLmRlZmF1bHQsaXNMb3dlcmNhc2U6Qy5kZWZhdWx0LGlzVXBwZXJjYXNlOkYuZGVmYXVsdCxpc0FzY2lpOk8uZGVmYXVsdCxpc0Z1bGxXaWR0aDpSLmRlZmF1bHQsaXNIYWxmV2lkdGg6eC5kZWZhdWx0LGlzVmFyaWFibGVXaWR0aDp2LmRlZmF1bHQsaXNNdWx0aWJ5dGU6Xy5kZWZhdWx0LGlzU2VtVmVyOk0uZGVmYXVsdCxpc1N1cnJvZ2F0ZVBhaXI6ei5kZWZhdWx0LGlzSW50OnEuZGVmYXVsdCxpc0lNRUk6JC5kZWZhdWx0LGlzRmxvYXQ6US5kZWZhdWx0LGlzRmxvYXRMb2NhbGVzOlEubG9jYWxlcyxpc0RlY2ltYWw6ZWUuZGVmYXVsdCxpc0hleGFkZWNpbWFsOmdlLmRlZmF1bHQsaXNPY3RhbDpUZS5kZWZhdWx0LGlzRGl2aXNpYmxlQnk6cGUuZGVmYXVsdCxpc0hleENvbG9yOmZlLmRlZmF1bHQsaXNSZ2JDb2xvcjpkZS5kZWZhdWx0LGlzSFNMOkJlLmRlZmF1bHQsaXNJU1JDOktlLmRlZmF1bHQsaXNNRDU6SWUuZGVmYXVsdCxpc0hhc2g6TWUuZGVmYXVsdCxpc0pXVDpOZS5kZWZhdWx0LGlzSlNPTjpfZS5kZWZhdWx0LGlzRW1wdHk6Q2UuZGVmYXVsdCxpc0xlbmd0aDpELmRlZmF1bHQsaXNMb2NhbGU6Qi5kZWZhdWx0LGlzQnl0ZUxlbmd0aDpqLmRlZmF1bHQsaXNVTElEOlguZGVmYXVsdCxpc1VVSUQ6c2UuZGVmYXVsdCxpc01vbmdvSWQ6bmUuZGVmYXVsdCxpc0FmdGVyOnRlLmRlZmF1bHQsaXNCZWZvcmU6RWUuZGVmYXVsdCxpc0luOlNlLmRlZmF1bHQsaXNMdWhuTnVtYmVyOlVlLmRlZmF1bHQsaXNDcmVkaXRDYXJkOlZlLmRlZmF1bHQsaXNJZGVudGl0eUNhcmQ6d3QuZGVmYXVsdCxpc0VBTjp4ci5kZWZhdWx0LGlzSVNJTjp1ci5kZWZhdWx0LGlzSVNCTjpRci5kZWZhdWx0LGlzSVNTTjpKLmRlZmF1bHQsaXNNb2JpbGVQaG9uZTpUci5kZWZhdWx0LGlzTW9iaWxlUGhvbmVMb2NhbGVzOlRyLmxvY2FsZXMsaXNQb3N0YWxDb2RlOmlhLmRlZmF1bHQsaXNQb3N0YWxDb2RlTG9jYWxlczppYS5sb2NhbGVzLGlzRXRoZXJldW1BZGRyZXNzOlUuZGVmYXVsdCxpc0N1cnJlbmN5Ok1uLmRlZmF1bHQsaXNCdGNBZGRyZXNzOmRpLmRlZmF1bHQsaXNJU082MzQ2Om90LmlzSVNPNjM0Nixpc0ZyZWlnaHRDb250YWluZXJJRDpvdC5pc0ZyZWlnaHRDb250YWluZXJJRCxpc0lTTzYzOTE6c28uZGVmYXVsdCxpc0lTTzg2MDE6cGkuZGVmYXVsdCxpc0lTTzE1OTI0OlZvLmRlZmF1bHQsaXNSRkMzMzM5OmhlLmRlZmF1bHQsaXNJU08zMTY2MUFscGhhMjphby5kZWZhdWx0LGlzSVNPMzE2NjFBbHBoYTM6R28uZGVmYXVsdCxpc0lTTzMxNjYxTnVtZXJpYzpoaS5kZWZhdWx0LGlzSVNPNDIxNzpEdC5kZWZhdWx0LGlzQmFzZTMyOmdpLmRlZmF1bHQsaXNCYXNlNTg6YmkuZGVmYXVsdCxpc0Jhc2U2NDp5aS5kZWZhdWx0LGlzRGF0YVVSSTp4aS5kZWZhdWx0LGlzTWFnbmV0VVJJOlRpLmRlZmF1bHQsaXNNYWlsdG9VUkk6QWkuZGVmYXVsdCxpc01pbWVUeXBlOmtyLmRlZmF1bHQsaXNMYXRMb25nOmduLmRlZmF1bHQsbHRyaW06Y2EuZGVmYXVsdCxydHJpbTptaS5kZWZhdWx0LHRyaW06UGkuZGVmYXVsdCxlc2NhcGU6dWEuZGVmYXVsdCx1bmVzY2FwZTppby5kZWZhdWx0LHN0cmlwTG93OkhvLmRlZmF1bHQsd2hpdGVsaXN0OmxhLmRlZmF1bHQsYmxhY2tsaXN0OmZyLmRlZmF1bHQsaXNXaGl0ZWxpc3RlZDpjZS5kZWZhdWx0LG5vcm1hbGl6ZUVtYWlsOldlLmRlZmF1bHQsdG9TdHJpbmcsaXNTbHVnOmZhLmRlZmF1bHQsaXNTdHJvbmdQYXNzd29yZDp4dC5kZWZhdWx0LGlzVGF4SUQ6bHIuZGVmYXVsdCxpc0RhdGU6QS5kZWZhdWx0LGlzVGltZTptLmRlZmF1bHQsaXNMaWNlbnNlUGxhdGU6Rm4uZGVmYXVsdCxpc1ZBVDpLby5kZWZhdWx0LGliYW5Mb2NhbGVzOlFlLmxvY2FsZXN9O2UuZGVmYXVsdD1pdCxuLmV4cG9ydHM9ZS5kZWZhdWx0LG4uZXhwb3J0cy5kZWZhdWx0PWUuZGVmYXVsdH0pKHhsLHhsLmV4cG9ydHMpO3ZhciBudj14bC5leHBvcnRzO2NvbnN0IG92PVRkKG52KTtmdW5jdGlvbiBRZChuKXtyZXR1cm4gdHlwZW9mIG4hPSJzdHJpbmciPyExOm92LmlzVVJMKG4udG9TdHJpbmcoKSx7cHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIl0scmVxdWlyZV90bGQ6ITF9KX1mdW5jdGlvbiBzaShuKXtyZXR1cm4gbj09PU9iamVjdChuKSYmT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pIT09IltvYmplY3QgQXJyYXldIn1mdW5jdGlvbiBhcyhuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKX1mdW5jdGlvbiBzdihuKXt0cnl7cmV0dXJuISFKU09OLnBhcnNlKG4pfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBfeShuKXtyZXR1cm4gdHlwZW9mIG49PSJib29sZWFuIn1mdW5jdGlvbiBhdihuKXtyZXR1cm4hIW4mJihuIGluc3RhbmNlb2YgZWN8fG4uY29uc3RydWN0b3ImJm4uY29uc3RydWN0b3IubmFtZT09PSJCaWdOdW1iZXIiKX1mdW5jdGlvbiBqdChuKXtyZXR1cm4gdHlwZW9mIG49PSJzdHJpbmcifHwhIW4mJm4uY29uc3RydWN0b3ImJm4uY29uc3RydWN0b3IubmFtZT09PSJTdHJpbmcifWZ1bmN0aW9uIGl2KG4pe3JldHVybiB0eXBlb2Ygbj09ImZ1bmN0aW9uIn1mdW5jdGlvbiBvbyhuKXtyZXR1cm4gdHlwZW9mIG49PSJzdHJpbmciJiYhaXNOYU4ocGFyc2VJbnQobiwxNikpJiYvXigweHwpW2EtZkEtRjAtOV0rJC8udGVzdChuKX1mdW5jdGlvbiBWbihuKXtyZXR1cm4gbj09PW51bGw/ITE6TnVtYmVyLmlzSW50ZWdlcihOdW1iZXIobikpfWZ1bmN0aW9uIE95KG4sZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGUpfWZ1bmN0aW9uIFJ5KG4sLi4uZSl7cmV0dXJuIGUubGVuZ3RoJiYhZS5tYXAodD0+T3kobix0KSkuaW5jbHVkZXMoITEpfWZ1bmN0aW9uIGN2KG4pe2NvbnN0IGU9e2Jsb2NrOm4uYmxvY2tfbnVtYmVyLHRpbWVzdGFtcDpuLmJsb2NrX3RpbWVzdGFtcCxjb250cmFjdDpuLmNvbnRyYWN0X2FkZHJlc3MsbmFtZTpuLmV2ZW50X25hbWUsdHJhbnNhY3Rpb246bi50cmFuc2FjdGlvbl9pZCxyZXN1bHQ6bi5yZXN1bHQscmVzb3VyY2VOb2RlOm4ucmVzb3VyY2VfTm9kZXx8KG4uX3VuY29uZmlybWVkPyJmdWxsTm9kZSI6InNvbGlkaXR5Tm9kZSIpfTtyZXR1cm4gbi5fdW5jb25maXJtZWQmJihlLnVuY29uZmlybWVkPW4uX3VuY29uZmlybWVkKSxuLl9maW5nZXJwcmludCYmKGUuZmluZ2VycHJpbnQ9bi5fZmluZ2VycHJpbnQpLGV9ZnVuY3Rpb24gdXYobix7aW5wdXRzOmV9KXtpZighbi5yZXN1bHQpcmV0dXJuIG47aWYoc2kobi5yZXN1bHQpKWZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtjb25zdCBhPWVbdF07YS50eXBlPT0iYWRkcmVzcyImJmEubmFtZSBpbiBuLnJlc3VsdCYmKG4ucmVzdWx0W2EubmFtZV09RnIrbi5yZXN1bHRbYS5uYW1lXS5zdWJzdHIoMikudG9Mb3dlckNhc2UoKSl9ZWxzZSBhcyhuLnJlc3VsdCkmJihuLnJlc3VsdD1uLnJlc3VsdC5yZWR1Y2UoKHQsYSxzKT0+e2NvbnN0e25hbWU6cix0eXBlOm99PWVbc107cmV0dXJuIG89PSJhZGRyZXNzIiYmKGE9RnIrYS5zdWJzdHIoMikudG9Mb3dlckNhc2UoKSksdFtyXT1hLHR9LE9iamVjdC5jcmVhdGUobnVsbCkpKTtyZXR1cm4gbn1mdW5jdGlvbiBsdihuLGUsdCl7bGV0IGE9bi50b1N0cmluZygpO2Zvcig7YS5sZW5ndGg8dDspYT1lK2E7cmV0dXJuIGF9ZnVuY3Rpb24gJHQobil7cmV0dXJuIG4hPT1udWxsJiZ0eXBlb2YgbjwidSJ9YXN5bmMgZnVuY3Rpb24gZnYobj0xZTMpe3JldHVybiBuZXcgUHJvbWlzZShlPT5zZXRUaW1lb3V0KGUsbikpfWNvbnN0IGR2PU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxoYXNQcm9wZXJ0aWVzOlJ5LGhhc1Byb3BlcnR5Ok95LGlzQXJyYXk6YXMsaXNCaWdOdW1iZXI6YXYsaXNCb29sZWFuOl95LGlzRnVuY3Rpb246aXYsaXNIZXg6b28saXNJbnRlZ2VyOlZuLGlzSnNvbjpzdixpc05vdE51bGxPclVuZGVmaW5lZDokdCxpc09iamVjdDpzaSxpc1N0cmluZzpqdCxpc1ZhbGlkVVJMOlFkLG1hcEV2ZW50OmN2LHBhZExlZnQ6bHYscGFyc2VFdmVudDp1dixzbGVlcDpmdn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTtmdW5jdGlvbiBfYShuKXtyZXR1cm4gb28obik/bm8oSXQobi5yZXBsYWNlKC9eMHgvLEZyKSkpOm59ZnVuY3Rpb24gYWUobil7cmV0dXJuIG9vKG4pP24udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eMHgvLEZyKTpsZShueShuKSkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBwdihuKXtuPW4udG9Mb3dlckNhc2UoKTtjb25zdCBlPW4uc3Vic3RyaW5nKDIpLnNwbGl0KCIiKSx0PW5ldyBVaW50OEFycmF5KDQwKTtmb3IobGV0IHM9MDtzPDQwO3MrKyl0W3NdPWVbc10uY2hhckNvZGVBdCgwKTtjb25zdCBhPUl0KCRlKHQpLnNsaWNlKDIpKTtmb3IobGV0IHM9MDtzPDQwO3MrPTIpYVtzPj4xXT4+ND49OCYmKGVbc109ZVtzXS50b1VwcGVyQ2FzZSgpKSwoYVtzPj4xXSYxNSk+PTgmJihlW3MrMV09ZVtzKzFdLnRvVXBwZXJDYXNlKCkpO3JldHVybiBGcitlLmpvaW4oIiIpfWZ1bmN0aW9uIGUwKG4pe2lmKCF0YShuKSl0aHJvdyBuZXcgRXJyb3IoYCcke259JyBpcyBub3QgYSB2YWxpZCBhZGRyZXNzIHN0cmluZ2ApO3JldHVybiBwdihhZShuKSl9ZnVuY3Rpb24gTXkobil7aWYoIW9vKG4pfHxuLmxlbmd0aCE9PTQyKXJldHVybiExO3RyeXtyZXR1cm4gZTAobik9PT1ufWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBGeShuLGU9ITEpe3RyeXtyZXR1cm4gRGMobixlKX1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gdGEobil7aWYoIW58fCFqdChuKSlyZXR1cm4hMTtpZihuLmxlbmd0aD09PTQyKXRyeXtyZXR1cm4gdGEobm8oSXQobikpKX1jYXRjaHtyZXR1cm4hMX10cnl7cmV0dXJuIHN5KG4pfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBkZChuKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoSXQobi5yZXBsYWNlKC9eMHgvLCIiKSkpfWZ1bmN0aW9uIFlwKG4pe3JldHVybiB0eXBlb2Ygbj09InN0cmluZyI/ZGQobik6bn1mdW5jdGlvbiBodih7ZnJvbTpuLHNhbHQ6ZSxpbml0Q29kZTp0LGFkZHJlc3NGb3JtYXQ6YT0iYmFzZTU4In0pe2lmKCF0YShuKSl0aHJvdyBuZXcgRXJyb3IoYGZyb20oJHtufSkgaXMgbm90IGEgdmFsaWQgYWRkcmVzcyBzdHJpbmdgKTtjb25zdCBzPWRkKGFlKG4pKSxyPVlwKGUpLG89WXAodCk7aWYoci5sZW5ndGghPT0zMil0aHJvdyBuZXcgRXJyb3IoYHNhbHQoJHtlfSkgbXVzdCBiZSAzMiBieXRlc2ApO2NvbnN0IGk9ZGQoJGUobykpLGM9ZXQoW3MscixpXSksZj1gNDEkeyRlKGMpLnNsaWNlKC00MCl9YDtyZXR1cm4gYT09PSJiYXNlNTgiP19hKGYpOmZ9Y29uc3QgZ3Y9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGZyb21IZXg6X2EsZnJvbVByaXZhdGVLZXk6RnksZ2V0Q3JlYXRlMkFkZHJlc3M6aHYsaXNBZGRyZXNzOnRhLGlzQ2hlY2tzdW1BZGRyZXNzOk15LHRvQ2hlY2tzdW1BZGRyZXNzOmUwLHRvSGV4OmFlfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLExjPW5ldyBYbjtmdW5jdGlvbiBwZChuKXtyZXR1cm4gYWUobikucmVwbGFjZSh3YSwiMHgiKX1mdW5jdGlvbiBidihuLGUsdCxhPSExKXtpZihhJiZ0LnJlcGxhY2UoL14weC8sIiIpLmxlbmd0aCU2ND09PTgmJih0PSIweCIrdC5yZXBsYWNlKC9eMHgvLCIiKS5zdWJzdHJpbmcoOCkpLHQucmVwbGFjZSgvXjB4LywiIikubGVuZ3RoJTY0KXRocm93IG5ldyBFcnJvcigiVGhlIGVuY29kZWQgc3RyaW5nIGlzIG5vdCB2YWxpZC4gSXRzIGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQuIik7cmV0dXJuIGU9ZS5tYXAocz0+KC90cmNUb2tlbi8udGVzdChzKSYmKHM9cy5yZXBsYWNlKC90cmNUb2tlbi8sInVpbnQyNTYiKSkscykpLExjLmRlY29kZShlLHQpLnJlZHVjZSgocyxyLG8pPT4oZVtvXT09ImFkZHJlc3MiJiYocj1GcityLnN1YnN0cigyKS50b0xvd2VyQ2FzZSgpKSxuLmxlbmd0aD9zW25bb11dPXI6cy5wdXNoKHIpLHMpLG4ubGVuZ3RoP09iamVjdC5jcmVhdGUobnVsbCk6W10pfWZ1bmN0aW9uIHl2KG4sZSl7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0Kyspblt0XT09PSJhZGRyZXNzIiYmKGVbdF09cGQoZVt0XSkpO3JldHVybiBMYy5lbmNvZGUobixlKX1mdW5jdGlvbiB6cyhuKXtjb25zdCBlPW4ubWF0Y2goLyhbYS16QS1aMC05XSkoXFsuKlxdKS8pO3JldHVybiBlP2VbMl06IiJ9ZnVuY3Rpb24gTnkobil7cmV0dXJuKHpzKG4pLm1hdGNoKC9cXVxbL2cpfHxbXSkubGVuZ3RoKzF9ZnVuY3Rpb24gT2EobixlKXtjb25zdCB0PVtdLGE9Yz0+YyYmYy50eXBlLmluZGV4T2YoInR1cGxlIik9PT0wJiZjLmNvbXBvbmVudHM/YHR1cGxlKCR7Yy5jb21wb25lbnRzLm1hcChkPT5hKGQpKS5qb2luKCIsIil9KSR7enMoYy50eXBlKX1gOi90cmNUb2tlbi8udGVzdChjLnR5cGUpP2MudHlwZS5yZXBsYWNlKC90cmNUb2tlbi8sInVpbnQyNTYiKTpjLnR5cGUscz1jPT57Zm9yKGxldCBmPTA7ZjxjLmxlbmd0aDtmKyspe2NvbnN0IGQ9Y1tmXTsvdHJjVG9rZW4vLnRlc3QoZCkmJihjW2ZdPWQucmVwbGFjZSgvdHJjVG9rZW4vLCJ1aW50MjU2IikpfX0scj1jPT5BcnJheS5pc0FycmF5KGMpPyhjLmZvckVhY2goKGYsZCk9PntjW2RdPXIoZil9KSxjKTpwZChjKSxvPShjLGYsZCk9PntkPjE/Zi5sZW5ndGgmJmYuZm9yRWFjaChwPT57byhjLHAsZC0xKX0pOmYubGVuZ3RoJiZkJiZmLmZvckVhY2gocD0+e2koYyxwKX0pfSxpPShjPVtdLGYpPT57Yy5sZW5ndGgmJmMuZm9yRWFjaCgoZCxwKT0+e2NvbnN0IGI9ZC50eXBlO2lmKGZbcF0hPT12b2lkIDAmJmZbcF0hPT1udWxsKXtpZihiPT09ImFkZHJlc3MiKWZbcF09cGQoZltwXSk7ZWxzZSBpZihiLm1hdGNoKC9eKFteXHg1Yl0qKShceDVifCQpLylbMF09PT0iYWRkcmVzc1siKXIoZltwXSk7ZWxzZSBpZihiLmluZGV4T2YoInR1cGxlIik9PT0wKWlmKHpzKGIpKXtjb25zdCBUPU55KGIpO28oZC5jb21wb25lbnRzLGZbcF0sVCl9ZWxzZSBpKGQuY29tcG9uZW50cyxmW3BdKX19KX07aWYobi5pbnB1dHMmJm4uaW5wdXRzLmxlbmd0aClmb3IobGV0IGM9MDtjPG4uaW5wdXRzLmxlbmd0aDtjKyspe2NvbnN0IGY9bi5pbnB1dHNbY10udHlwZTtmPT09ImJvb2wiJiZlW2NdPT09ImZhbHNlIiYmKGVbY109ITEpLHQucHVzaChmLmluZGV4T2YoInR1cGxlIik9PT0wP2Eobi5pbnB1dHNbY10pOmYpLGUubGVuZ3RoPHQubGVuZ3RoJiZlLnB1c2goIiIpfXJldHVybiBpKG4uaW5wdXRzLGUpLHModCksTGMuZW5jb2RlKHQsZSl9ZnVuY3Rpb24gdDAobixlKXtjb25zdCB0PWM9Pntmb3IobGV0IGY9MDtmPGMubGVuZ3RoO2YrKyl7Y29uc3QgZD1jW2ZdOy9edHJjVG9rZW4vLnRlc3QoZCkmJihjW2ZdPWQucmVwbGFjZSgvXnRyY1Rva2VuLywidWludDI1NiIpKX19LGE9Yz0+QXJyYXkuaXNBcnJheShjKT8oYy5mb3JFYWNoKChmLGQpPT57Y1tkXT1hKGYpfSksYyk6YWUoYykscz0oYyxmLGQpPT57ZD4xP2YubGVuZ3RoJiZmLmZvckVhY2gocD0+e3MoYyxwLGQtMSl9KTpmLmxlbmd0aCYmZCYmZi5mb3JFYWNoKHA9PntpKGMscCl9KX0scj1jPT57Y29uc3QgZj1jLm5hbWU/YCAke2MubmFtZX1gOiIiO3JldHVybiBjJiZjLnR5cGUuaW5kZXhPZigidHVwbGUiKT09PTAmJmMuY29tcG9uZW50cz9gdHVwbGUoJHtjLmNvbXBvbmVudHMubWFwKHA9PnIocCkpLmpvaW4oIiwiKX0pJHt6cyhjLnR5cGUpfSR7Zn1gOi90cmNUb2tlbi8udGVzdChjLnR5cGUpP2MudHlwZS5yZXBsYWNlKC90cmNUb2tlbi8sInVpbnQyNTYiKStmOmMudHlwZStmfSxvPShjLGYsZCk9PntmJiZmIT09Imxlbmd0aCImJiEoZiBpbiBPYmplY3QucHJvdG90eXBlKSYmIShmIGluIEFycmF5LnByb3RvdHlwZSkmJihjW2ZdPWQpfSxpPShjLGYpPT57Yy5sZW5ndGgmJmMuZm9yRWFjaCgoZCxwKT0+e2NvbnN0e3R5cGU6YixuYW1lOlR9PWQ7aWYoZltwXSlpZihiPT09ImFkZHJlc3MiKWZbcF09YWUoZltwXSksbyhmLFQsYWUoZltwXSkpO2Vsc2UgaWYoYi5tYXRjaCgvXihbXlx4NWJdKikoXHg1YnwkKS8pWzBdPT09ImFkZHJlc3NbIilhKGZbcF0pLG8oZixULGEoZltwXSkpO2Vsc2UgaWYoYi5pbmRleE9mKCJ0dXBsZSIpPT09MCl7aWYoenMoYikpe2NvbnN0IFc9TnkoYik7cyhkLmNvbXBvbmVudHMsZltwXSxXKX1lbHNlIGkoZC5jb21wb25lbnRzLGZbcF0pO28oZixULGZbcF0pfWVsc2UgbyhmLFQsZltwXSk7ZWxzZSBvKGYsVCxmW3BdKX0pfTtpZigib3V0cHV0cyJpbiBuJiZuLm91dHB1dHMmJm4ub3V0cHV0cy5sZW5ndGg+MCl7Y29uc3QgYz1bXTtmb3IobGV0IHA9MDtwPG4ub3V0cHV0cy5sZW5ndGg7cCsrKXtjb25zdCBiPW4ub3V0cHV0c1twXS50eXBlLFQ9bi5vdXRwdXRzW3BdLm5hbWU/YCAke24ub3V0cHV0c1twXS5uYW1lfWA6IiI7Yy5wdXNoKGIuaW5kZXhPZigidHVwbGUiKT09PTA/cihuLm91dHB1dHNbcF0pOmIrVCl9dChjKSwoIWV8fCFlLmxlbmd0aCkmJihlPW5ldyBVaW50OEFycmF5KDMyKm4ub3V0cHV0cy5sZW5ndGgpKTtjb25zdCBkPUxjLmRlY29kZShjLGUpLnRvQXJyYXkoITApO3JldHVybiBpKG4ub3V0cHV0cyxkKSxkfXJldHVybltdfWZ1bmN0aW9uIHh2KG4sZT1bXSl7aWYoIW58fFN0cmluZyhuLnR5cGUpLnRvTG93ZXJDYXNlKCkhPT0iZnVuY3Rpb24ifHwhbi5uYW1lKXRocm93IG5ldyBFcnJvcignSW52YWxpZCBmdW5jdGlvbiBBQkkgZnJhZ21lbnQgcHJvdmlkZWQ6IG9ubHkgImZ1bmN0aW9uIiB0eXBlIGZyYWdtZW50cyB3aXRoIGEgbmFtZSBhcmUgc3VwcG9ydGVkJyk7Y29uc3QgdD1uLmlucHV0cz9uLmlucHV0cy5sZW5ndGg6MDtpZihlLmxlbmd0aCE9PXQpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50cyBwcm92aWRlZDogZXhwZWN0ZWQgJHt0fSBhcmd1bWVudHMsIGdvdCAke2UubGVuZ3RofWApO3JldHVybiBIci5mcm9tKG4pLnNlbGVjdG9yLnJlcGxhY2UoL14weC8sIiIpK09hKG4sZSkucmVwbGFjZSgvXjB4LywiIil9ZnVuY3Rpb24gVHYobil7cmV0dXJuIG4ucmVwbGFjZSgvXih1P2ludCkoXFt8JCkvLCIkMTI1NiQyIil9ZnVuY3Rpb24gcjAobil7cmV0dXJuIG4mJm4udHlwZS5pbmRleE9mKCJ0dXBsZSIpPT09MCYmbi5jb21wb25lbnRzP2AoJHtuLmNvbXBvbmVudHMubWFwKHQ9PnIwKHQpKS5qb2luKCIsIil9KSR7enMobi50eXBlKX1gOlR2KG4udHlwZSl9ZnVuY3Rpb24ga28obil7Y29uc3QgZT1uLmlucHV0cz8/W107cmV0dXJuYCR7bi5uYW1lfSgke2UubWFwKHQ9PnIwKHQpKS5qb2luKCIsIil9KWB9ZnVuY3Rpb24ga3kobixlKXtyZXR1cm4gbi5maWx0ZXIodD0+dC50eXBlPT09ImZ1bmN0aW9uIiYmIm5hbWUiaW4gdCYmdC5uYW1lPT09ZSl9ZnVuY3Rpb24gcGMobixlKXtjb25zdCB0PWUudHlwZTtpZih0PT09ImJvb2wiKXJldHVybiB0eXBlb2Ygbj09ImJvb2xlYW4iO2lmKHQ9PT0ic3RyaW5nInx8dD09PSJhZGRyZXNzIilyZXR1cm4gdHlwZW9mIG49PSJzdHJpbmciO2lmKC9eKHU/aW50XGQqfHRyY1Rva2VuKSQvLnRlc3QodCkpcmV0dXJuIHR5cGVvZiBuPT0ibnVtYmVyInx8dHlwZW9mIG49PSJiaWdpbnQifHx0eXBlb2Ygbj09InN0cmluZyImJi9eXGQrJC8udGVzdChuKTtpZigvXmJ5dGVzXGQqJC8udGVzdCh0KSlyZXR1cm4gdHlwZW9mIG49PSJzdHJpbmcifHxuIGluc3RhbmNlb2YgVWludDhBcnJheTtpZih0LmVuZHNXaXRoKCJdIikpe2lmKCFBcnJheS5pc0FycmF5KG4pKXJldHVybiExO2NvbnN0IGE9dC5tYXRjaCgvXiguKilcWyhcZCopXF0kLyk7aWYoIWEpcmV0dXJuITA7Y29uc3RbLHMscl09YTtpZihyIT09IiImJm4ubGVuZ3RoIT09TnVtYmVyKHIpKXJldHVybiExO2NvbnN0IG89ey4uLmUsdHlwZTpzfTtyZXR1cm4gbi5ldmVyeShpPT5wYyhpLG8pKX1yZXR1cm4gdC5pbmRleE9mKCJ0dXBsZSIpPT09MD9BdihuLGUuY29tcG9uZW50cyk6ITB9ZnVuY3Rpb24gQXYobixlKXtpZih0eXBlb2YgbiE9Im9iamVjdCJ8fG49PT1udWxsKXJldHVybiExO2lmKCFlfHxlLmxlbmd0aD09PTApcmV0dXJuITA7aWYoQXJyYXkuaXNBcnJheShuKSlyZXR1cm4gbi5sZW5ndGg9PT1lLmxlbmd0aCYmZS5ldmVyeSgoYSxzKT0+cGMobltzXSxhKSk7Y29uc3QgdD1uO3JldHVybiBlLmV2ZXJ5KGE9PmEubmFtZSBpbiB0JiZwYyh0W2EubmFtZV0sYSkpfWZ1bmN0aW9uIG4wKG4sZSl7cmV0dXJuWy4uLm5ldyBTZXQoa3kobixlKS5tYXAodD0+dC5pbnB1dHM/Lmxlbmd0aD8/MCkpXS5zb3J0KCh0LGEpPT50LWEpfWZ1bmN0aW9uIG8wKG4sZSx0KXtpZihlLmluZGV4T2YoIigiKSE9PS0xKXtjb25zdCBmPW4uZmlsdGVyKGQ9PmQudHlwZT09PSJmdW5jdGlvbiImJiJuYW1lImluIGQpLmZpbmQoZD0+a28oZCk9PT1lKTtpZihmKXJldHVybiBmfWNvbnN0IGE9a3kobixlKTtpZihhLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKGBBQkkgZnJhZ21lbnQgbm90IGZvdW5kIGZvciBmdW5jdGlvbiAiJHtlfSIuYCk7aWYoYS5sZW5ndGg9PT0xKXJldHVybiBhWzBdO2NvbnN0IHM9QXJyYXkuaXNBcnJheSh0KT90OltdLHI9YS5maWx0ZXIoYz0+KGMuaW5wdXRzPy5sZW5ndGg/PzApPT09cy5sZW5ndGgpO2lmKHIubGVuZ3RoPT09MSlyZXR1cm4gclswXTtpZihyLmxlbmd0aD09PTApe2NvbnN0IGM9bjAobixlKS5qb2luKCIgb3IgIik7dGhyb3cgbmV3IEVycm9yKGBDb250cmFjdCBmdW5jdGlvbiAiJHtlfSIgZXhwZWN0cyAke2N9IGFyZ3VtZW50KHMpIGJ1dCByZWNlaXZlZCAke3MubGVuZ3RofS5gKX1jb25zdCBvPXIuZmlsdGVyKGM9PihjLmlucHV0cz8/W10pLmV2ZXJ5KChmLGQpPT5wYyhzW2RdLGYpKSk7aWYoby5sZW5ndGg9PT0xKXJldHVybiBvWzBdO2NvbnN0IGk9a28oclswXSk7dGhyb3cgbmV3IEVycm9yKGBBbWJpZ3VvdXMgb3ZlcmxvYWRlZCBmdW5jdGlvbiAiJHtlfSIgZm9yIHRoZSBnaXZlbiBhcmd1bWVudHM7IHBhc3MgdGhlIGZ1bGwgc2lnbmF0dXJlIChlLmcuICIke2l9IikgYXMgZnVuY3Rpb25OYW1lIHRvIGRpc2FtYmlndWF0ZS5gKX1mdW5jdGlvbiBhaShuKXtjb25zdCBlPShuLnN0YXRlTXV0YWJpbGl0eT8/IiIpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIGU9PT0idmlldyJ8fGU9PT0icHVyZSJ8fG4uY29uc3RhbnQ9PT0hMH1jb25zdCBtdj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYnVpbGRGdWxsVHlwZURlZmluaXRpb246cjAsYnVpbGRGdW5jdGlvblNlbGVjdG9yOmtvLGRlY29kZVBhcmFtczpidixkZWNvZGVQYXJhbXNWMkJ5QUJJOnQwLGVuY29kZUZ1bmN0aW9uRGF0YTp4dixlbmNvZGVQYXJhbXM6eXYsZW5jb2RlUGFyYW1zVjJCeUFCSTpPYSxpc1JlYWRPbmx5RnVuY3Rpb25GcmFnbWVudDphaSxvdmVybG9hZEFyaXRpZXM6bjAscmVzb2x2ZUZ1bmN0aW9uRnJhZ21lbnQ6bzB9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksVXk9YBlUUk9OIFNpZ25lZCBNZXNzYWdlOgpgO2Z1bmN0aW9uIHMwKG4pe3JldHVybiB0eXBlb2Ygbj09InN0cmluZyI/bj1ycihuKTpBcnJheS5pc0FycmF5KG4pJiYobj1uZXcgVWludDhBcnJheShuKSksJGUoZXQoW3JyKFV5KSxycihTdHJpbmcobi5sZW5ndGgpKSxuXSkpfWZ1bmN0aW9uIFB2KG4sZSl7ZS5tYXRjaCgvXjB4Lyl8fChlPSIweCIrZSk7Y29uc3QgdD1uZXcgYnIoZSksYT1zMChuKSxzPXQuc2lnbihhKTtyZXR1cm4gSGIocyl9ZnVuY3Rpb24gd3YobixlKXtlLm1hdGNoKC9eMHgvKXx8KGU9IjB4IitlKTtjb25zdCB0PVJvKHMwKG4pLGUpO3JldHVybiBubyhJdCh0LnJlcGxhY2UoL14weC8sRnIpKSl9Y29uc3QgdnY9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLFRST05fTUVTU0FHRV9QUkVGSVg6VXksaGFzaE1lc3NhZ2U6czAsc2lnbk1lc3NhZ2U6UHYsdmVyaWZ5TWVzc2FnZTp3dn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTtmdW5jdGlvbiBDdihuKXtyZXR1cm4gYWUobikucmVwbGFjZSh3YSwiMHgiKX1mdW5jdGlvbiBFdihuKXtyZXR1cm4gYWUobil9Y29uc3QgRHk9bmV3IFVpbnQ4QXJyYXkoMzIpO0R5LmZpbGwoMCk7Y29uc3QgV3Y9QmlnSW50KC0xKSwkeT1CaWdJbnQoMCksTHk9QmlnSW50KDEpLEJ2PUJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIik7ZnVuY3Rpb24gSXYobil7Y29uc3QgZT1BZShuKSx0PWUubGVuZ3RoJTMyO3JldHVybiB0P2V0KFtlLER5LnNsaWNlKHQpXSk6eWUoZSl9Y29uc3QgU3Y9S3IoTHksMzIpLF92PUtyKCR5LDMyKSxYcD17bmFtZToic3RyaW5nIix2ZXJzaW9uOiJzdHJpbmciLGNoYWluSWQ6InVpbnQyNTYiLHZlcmlmeWluZ0NvbnRyYWN0OiJhZGRyZXNzIixzYWx0OiJieXRlczMyIn0sU3U9WyJuYW1lIiwidmVyc2lvbiIsImNoYWluSWQiLCJ2ZXJpZnlpbmdDb250cmFjdCIsInNhbHQiXTtmdW5jdGlvbiBRcChuKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIEcodHlwZW9mIGU9PSJzdHJpbmciLGBpbnZhbGlkIGRvbWFpbiB2YWx1ZSBmb3IgJHtKU09OLnN0cmluZ2lmeShuKX1gLGBkb21haW4uJHtufWAsZSksZX19Y29uc3QgT3Y9e25hbWU6UXAoIm5hbWUiKSx2ZXJzaW9uOlFwKCJ2ZXJzaW9uIiksY2hhaW5JZDpmdW5jdGlvbihuKXtjb25zdCBlPXR0KG4sImRvbWFpbi5jaGFpbklkIik7cmV0dXJuIEcoZT49MCwiaW52YWxpZCBjaGFpbiBJRCIsImRvbWFpbi5jaGFpbklkIixuKSxOdW1iZXIuaXNTYWZlSW50ZWdlcihlKT9OdW1iZXIoZSk6bGcoZSl9LHZlcmlmeWluZ0NvbnRyYWN0OmZ1bmN0aW9uKG4pe3RyeXtyZXR1cm4gRXYobikudG9Mb3dlckNhc2UoKX1jYXRjaHt9RyghMSwnaW52YWxpZCBkb21haW4gdmFsdWUgInZlcmlmeWluZ0NvbnRyYWN0IicsImRvbWFpbi52ZXJpZnlpbmdDb250cmFjdCIsbil9LHNhbHQ6ZnVuY3Rpb24obil7Y29uc3QgZT1BZShuLCJkb21haW4uc2FsdCIpO3JldHVybiBHKGUubGVuZ3RoPT09MzIsJ2ludmFsaWQgZG9tYWluIHZhbHVlICJzYWx0IicsImRvbWFpbi5zYWx0IixuKSx5ZShlKX19O2Z1bmN0aW9uIHRjKG4pe3tjb25zdCBlPW4ubWF0Y2goL14odT8paW50KFxkKikkLyk7aWYoZSl7Y29uc3QgdD1lWzFdPT09IiIsYT1wYXJzZUludChlWzJdfHwiMjU2Iik7RyhhJTg9PT0wJiZhIT09MCYmYTw9MjU2JiYoZVsyXT09bnVsbHx8ZVsyXT09PVN0cmluZyhhKSksImludmFsaWQgbnVtZXJpYyB3aWR0aCIsInR5cGUiLG4pO2NvbnN0IHM9c3MoQnYsdD9hLTE6YSkscj10PyhzK0x5KSpXdjokeTtyZXR1cm4gZnVuY3Rpb24obyl7Y29uc3QgaT10dChvLCJ2YWx1ZSIpO3JldHVybiBHKGk+PXImJmk8PXMsYHZhbHVlIG91dC1vZi1ib3VuZHMgZm9yICR7bn1gLCJ2YWx1ZSIsaSksS3IodD9FZChpLDI1Nik6aSwzMil9fX17Y29uc3QgZT1uLm1hdGNoKC9eYnl0ZXMoXGQrKSQvKTtpZihlKXtjb25zdCB0PXBhcnNlSW50KGVbMV0pO3JldHVybiBHKHQhPT0wJiZ0PD0zMiYmZVsxXT09PVN0cmluZyh0KSwiaW52YWxpZCBieXRlcyB3aWR0aCIsInR5cGUiLG4pLGZ1bmN0aW9uKGEpe2NvbnN0IHM9QWUoYSk7cmV0dXJuIEcocy5sZW5ndGg9PT10LGBpbnZhbGlkIGxlbmd0aCBmb3IgJHtufWAsInZhbHVlIixhKSxJdihhKX19fXN3aXRjaChuKXtjYXNlInRyY1Rva2VuIjpyZXR1cm4gdGMoInVpbnQyNTYiKTtjYXNlImFkZHJlc3MiOnJldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gSm4oQ3YoZSksMzIpfTtjYXNlImJvb2wiOnJldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZT9Tdjpfdn07Y2FzZSJieXRlcyI6cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiAkZShlKX07Y2FzZSJzdHJpbmciOnJldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gWnIoZSl9fXJldHVybiBudWxsfWZ1bmN0aW9uIGVoKG4sZSl7cmV0dXJuYCR7bn0oJHtlLm1hcCgoe25hbWU6dCx0eXBlOmF9KT0+YSsiICIrdCkuam9pbigiLCIpfSlgfXZhciAkYSxFbixScyxUYyx6eTtjb25zdCBfcj1jbGFzcyBfcntjb25zdHJ1Y3RvcihlKXtQZSh0aGlzLFRjKTtaKHRoaXMsInByaW1hcnlUeXBlIik7UGUodGhpcywkYSk7UGUodGhpcyxFbik7UGUodGhpcyxScyk7dWUodGhpcywkYSxKU09OLnN0cmluZ2lmeShlKSksdWUodGhpcyxFbixuZXcgTWFwKSx1ZSh0aGlzLFJzLG5ldyBNYXApO2NvbnN0IHQ9bmV3IE1hcCxhPW5ldyBNYXAscz1uZXcgTWFwO09iamVjdC5rZXlzKGUpLmZvckVhY2goaT0+e3Quc2V0KGksbmV3IFNldCksYS5zZXQoaSxbXSkscy5zZXQoaSxuZXcgU2V0KX0pO2Zvcihjb25zdCBpIGluIGUpe2NvbnN0IGM9bmV3IFNldDtmb3IoY29uc3QgZiBvZiBlW2ldKXtHKCFjLmhhcyhmLm5hbWUpLGBkdXBsaWNhdGUgdmFyaWFibGUgbmFtZSAke0pTT04uc3RyaW5naWZ5KGYubmFtZSl9IGluICR7SlNPTi5zdHJpbmdpZnkoaSl9YCwidHlwZXMiLGUpLGMuYWRkKGYubmFtZSk7Y29uc3QgZD1mLnR5cGUubWF0Y2goL14oW15ceDViXSopKFx4NWJ8JCkvKVsxXXx8bnVsbDtHKGQhPT1pLGBjaXJjdWxhciB0eXBlIHJlZmVyZW5jZSB0byAke0pTT04uc3RyaW5naWZ5KGQpfWAsInR5cGVzIixlKSwhdGMoZCkmJihHKGEuaGFzKGQpLGB1bmtub3duIHR5cGUgJHtKU09OLnN0cmluZ2lmeShkKX1gLCJ0eXBlcyIsZSksYS5nZXQoZCkucHVzaChpKSx0LmdldChpKS5hZGQoZCkpfX1jb25zdCByPUFycmF5LmZyb20oYS5rZXlzKCkpLmZpbHRlcihpPT5hLmdldChpKS5sZW5ndGg9PT0wKTtHKHIubGVuZ3RoIT09MCwibWlzc2luZyBwcmltYXJ5IHR5cGUiLCJ0eXBlcyIsZSksRyhyLmxlbmd0aD09PTEsYGFtYmlndW91cyBwcmltYXJ5IHR5cGVzIG9yIHVudXNlZCB0eXBlczogJHtyLm1hcChpPT5KU09OLnN0cmluZ2lmeShpKSkuam9pbigiLCAiKX1gLCJ0eXBlcyIsZSksemUodGhpcyx7cHJpbWFyeVR5cGU6clswXX0pO2Z1bmN0aW9uIG8oaSxjKXtHKCFjLmhhcyhpKSxgY2lyY3VsYXIgdHlwZSByZWZlcmVuY2UgdG8gJHtKU09OLnN0cmluZ2lmeShpKX1gLCJ0eXBlcyIsZSksYy5hZGQoaSk7Zm9yKGNvbnN0IGYgb2YgdC5nZXQoaSkpaWYoYS5oYXMoZikpe28oZixjKTtmb3IoY29uc3QgZCBvZiBjKXMuZ2V0KGQpLmFkZChmKX1jLmRlbGV0ZShpKX1vKHRoaXMucHJpbWFyeVR5cGUsbmV3IFNldCk7Zm9yKGNvbnN0W2ksY11vZiBzKXtjb25zdCBmPUFycmF5LmZyb20oYyk7Zi5zb3J0KCksWSh0aGlzLEVuKS5zZXQoaSxlaChpLGVbaV0pK2YubWFwKGQ9PmVoKGQsZVtkXSkpLmpvaW4oIiIpKX19Z2V0IHR5cGVzKCl7cmV0dXJuIEpTT04ucGFyc2UoWSh0aGlzLCRhKSl9Z2V0RW5jb2RlcihlKXtsZXQgdD1ZKHRoaXMsUnMpLmdldChlKTtyZXR1cm4gdHx8KHQ9RmUodGhpcyxUYyx6eSkuY2FsbCh0aGlzLGUpLFkodGhpcyxScykuc2V0KGUsdCkpLHR9ZW5jb2RlVHlwZShlKXtjb25zdCB0PVkodGhpcyxFbikuZ2V0KGUpO3JldHVybiBHKHQsYHVua25vd24gdHlwZTogJHtKU09OLnN0cmluZ2lmeShlKX1gLCJuYW1lIixlKSx0fWVuY29kZURhdGEoZSx0KXtyZXR1cm4gdGhpcy5nZXRFbmNvZGVyKGUpKHQpfWhhc2hTdHJ1Y3QoZSx0KXtyZXR1cm4gJGUodGhpcy5lbmNvZGVEYXRhKGUsdCkpfWVuY29kZShlKXtyZXR1cm4gdGhpcy5lbmNvZGVEYXRhKHRoaXMucHJpbWFyeVR5cGUsZSl9aGFzaChlKXtyZXR1cm4gdGhpcy5oYXNoU3RydWN0KHRoaXMucHJpbWFyeVR5cGUsZSl9X3Zpc2l0KGUsdCxhKXtpZih0YyhlKSlyZXR1cm4gYShlLHQpO2NvbnN0IHM9ZS5tYXRjaCgvXiguKikoXHg1YihcZCopXHg1ZCkkLyk7aWYocylyZXR1cm4gRyghc1szXXx8cGFyc2VJbnQoc1szXSk9PT10Lmxlbmd0aCxgYXJyYXkgbGVuZ3RoIG1pc21hdGNoOyBleHBlY3RlZCBsZW5ndGggJHtwYXJzZUludChzWzNdKX1gLCJ2YWx1ZSIsdCksdC5tYXAobz0+dGhpcy5fdmlzaXQoc1sxXSxvLGEpKTtjb25zdCByPXRoaXMudHlwZXNbZV07aWYocilyZXR1cm4gci5yZWR1Y2UoKG8se25hbWU6aSx0eXBlOmN9KT0+KG9baV09dGhpcy5fdmlzaXQoYyx0W2ldLGEpLG8pLHt9KTtHKCExLGB1bmtub3duIHR5cGU6ICR7ZX1gLCJ0eXBlIixlKX12aXNpdChlLHQpe3JldHVybiB0aGlzLl92aXNpdCh0aGlzLnByaW1hcnlUeXBlLGUsdCl9c3RhdGljIGZyb20oZSl7cmV0dXJuIG5ldyBfcihlKX1zdGF0aWMgZ2V0UHJpbWFyeVR5cGUoZSl7cmV0dXJuIF9yLmZyb20oZSkucHJpbWFyeVR5cGV9c3RhdGljIGhhc2hTdHJ1Y3QoZSx0LGEpe3JldHVybiBfci5mcm9tKHQpLmhhc2hTdHJ1Y3QoZSxhKX1zdGF0aWMgaGFzaERvbWFpbihlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBhIGluIGUpe2lmKGVbYV09PW51bGwpY29udGludWU7Y29uc3Qgcz1YcFthXTtHKHMsYGludmFsaWQgdHlwZWQtZGF0YSBkb21haW4ga2V5OiAke0pTT04uc3RyaW5naWZ5KGEpfWAsImRvbWFpbiIsZSksdC5wdXNoKHtuYW1lOmEsdHlwZTpzfSl9cmV0dXJuIHQuc29ydCgoYSxzKT0+U3UuaW5kZXhPZihhLm5hbWUpLVN1LmluZGV4T2Yocy5uYW1lKSksX3IuaGFzaFN0cnVjdCgiRUlQNzEyRG9tYWluIix7RUlQNzEyRG9tYWluOnR9LGUpfXN0YXRpYyBlbmNvZGUoZSx0LGEpe3JldHVybiBldChbIjB4MTkwMSIsX3IuaGFzaERvbWFpbihlKSxfci5mcm9tKHQpLmhhc2goYSldKX1zdGF0aWMgaGFzaChlLHQsYSl7cmV0dXJuICRlKF9yLmVuY29kZShlLHQsYSkpfXN0YXRpYyBhc3luYyByZXNvbHZlTmFtZXMoZSx0LGEscyl7ZT1PYmplY3QuYXNzaWduKHt9LGUpO2Zvcihjb25zdCBpIGluIGUpZVtpXT09bnVsbCYmZGVsZXRlIGVbaV07Y29uc3Qgcj17fTtlLnZlcmlmeWluZ0NvbnRyYWN0JiYhTnQoZS52ZXJpZnlpbmdDb250cmFjdCwyMCkmJihyW2UudmVyaWZ5aW5nQ29udHJhY3RdPSIweCIpO2NvbnN0IG89X3IuZnJvbSh0KTtvLnZpc2l0KGEsKGksYyk9PihpPT09ImFkZHJlc3MiJiYhTnQoYywyMCkmJihyW2NdPSIweCIpLGMpKTtmb3IoY29uc3QgaSBpbiByKXJbaV09YXdhaXQgcyhpKTtyZXR1cm4gZS52ZXJpZnlpbmdDb250cmFjdCYmcltlLnZlcmlmeWluZ0NvbnRyYWN0XSYmKGUudmVyaWZ5aW5nQ29udHJhY3Q9cltlLnZlcmlmeWluZ0NvbnRyYWN0XSksYT1vLnZpc2l0KGEsKGksYyk9Pmk9PT0iYWRkcmVzcyImJnJbY10/cltjXTpjKSx7ZG9tYWluOmUsdmFsdWU6YX19c3RhdGljIGdldFBheWxvYWQoZSx0LGEpe19yLmhhc2hEb21haW4oZSk7Y29uc3Qgcz17fSxyPVtdO1N1LmZvckVhY2goYz0+e2NvbnN0IGY9ZVtjXTtmIT1udWxsJiYoc1tjXT1PdltjXShmKSxyLnB1c2goe25hbWU6Yyx0eXBlOlhwW2NdfSkpfSk7Y29uc3Qgbz1fci5mcm9tKHQpLGk9T2JqZWN0LmFzc2lnbih7fSx0KTtyZXR1cm4gRyhpLkVJUDcxMkRvbWFpbj09bnVsbCwidHlwZXMgbXVzdCBub3QgY29udGFpbiBFSVA3MTJEb21haW4gdHlwZSIsInR5cGVzLkVJUDcxMkRvbWFpbiIsdCksaS5FSVA3MTJEb21haW49cixvLmVuY29kZShhKSx7dHlwZXM6aSxkb21haW46cyxwcmltYXJ5VHlwZTpvLnByaW1hcnlUeXBlLG1lc3NhZ2U6by52aXNpdChhLChjLGYpPT57aWYoYy5tYXRjaCgvXmJ5dGVzKFxkKikvKSlyZXR1cm4geWUoQWUoZikpO2lmKGMubWF0Y2goL151P2ludC8pKXJldHVybiB0dChmKS50b1N0cmluZygpO3N3aXRjaChjKXtjYXNlInRyY1Rva2VuIjpyZXR1cm4gdHQoZikudG9TdHJpbmcoKTtjYXNlImFkZHJlc3MiOnJldHVybiBmLnRvTG93ZXJDYXNlKCk7Y2FzZSJib29sIjpyZXR1cm4hIWY7Y2FzZSJzdHJpbmciOnJldHVybiBHKHR5cGVvZiBmPT0ic3RyaW5nIiwiaW52YWxpZCBzdHJpbmciLCJ2YWx1ZSIsZiksZn1HKCExLCJ1bnN1cHBvcnRlZCB0eXBlIiwidHlwZSIsYyl9KX19fTskYT1uZXcgV2Vha01hcCxFbj1uZXcgV2Vha01hcCxScz1uZXcgV2Vha01hcCxUYz1uZXcgV2Vha1NldCx6eT1mdW5jdGlvbihlKXt7Y29uc3Qgcz10YyhlKTtpZihzKXJldHVybiBzfWNvbnN0IHQ9ZS5tYXRjaCgvXiguKikoXHg1YihcZCopXHg1ZCkkLyk7aWYodCl7Y29uc3Qgcz10WzFdLHI9dGhpcy5nZXRFbmNvZGVyKHMpO3JldHVybiBvPT57RyghdFszXXx8cGFyc2VJbnQodFszXSk9PT1vLmxlbmd0aCxgYXJyYXkgbGVuZ3RoIG1pc21hdGNoOyBleHBlY3RlZCBsZW5ndGggJHtwYXJzZUludCh0WzNdKX1gLCJ2YWx1ZSIsbyk7bGV0IGk9by5tYXAocik7cmV0dXJuIFkodGhpcyxFbikuaGFzKHMpJiYoaT1pLm1hcCgkZSkpLCRlKGV0KGkpKX19Y29uc3QgYT10aGlzLnR5cGVzW2VdO2lmKGEpe2NvbnN0IHM9WnIoWSh0aGlzLEVuKS5nZXQoZSkpO3JldHVybiByPT57Y29uc3Qgbz1hLm1hcCgoe25hbWU6aSx0eXBlOmN9KT0+e2NvbnN0IGY9dGhpcy5nZXRFbmNvZGVyKGMpKHJbaV0pO3JldHVybiBZKHRoaXMsRW4pLmhhcyhjKT8kZShmKTpmfSk7cmV0dXJuIG8udW5zaGlmdChzKSxldChvKX19RyghMSxgdW5rbm93biB0eXBlOiAke2V9YCwidHlwZSIsZSl9O2xldCBqcz1fcjtmdW5jdGlvbiBSdihuLGUsdCxhKXtjb25zdCBzPWAweCR7YS5yZXBsYWNlKC9eMHgvLCIiKX1gLHI9bmV3IGJyKHMpLG89anMuaGFzaChuLGUsdCksaT1yLnNpZ24obyk7cmV0dXJuWyIweCIsaS5yLnN1YnN0cmluZygyKSxpLnMuc3Vic3RyaW5nKDIpLE51bWJlcihpLnYpLnRvU3RyaW5nKDE2KV0uam9pbigiIil9ZnVuY3Rpb24gTXYobixlLHQsYSl7cmV0dXJuIFJvKGpzLmhhc2gobixlLHQpLGEpfWNvbnN0IEZ2PU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxUeXBlZERhdGFFbmNvZGVyOmpzLHNpZ25UeXBlZERhdGE6UnYsdmVyaWZ5VHlwZWREYXRhOk12fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBhMD17fSxOcj17fTsoZnVuY3Rpb24obil7dmFyIGU9dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzPT0iZnVuY3Rpb24iP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbih1LGwsaCl7dSE9QXJyYXkucHJvdG90eXBlJiZ1IT1PYmplY3QucHJvdG90eXBlJiYodVtsXT1oLnZhbHVlKX0sdD10eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93PT09dW8/dW86dHlwZW9mIHVvPCJ1IiYmdW8hPW51bGw/dW86dW87ZnVuY3Rpb24gYSh1LGwpe2lmKGwpe3ZhciBoPXQ7dT11LnNwbGl0KCIuIik7Zm9yKHZhciBQPTA7UDx1Lmxlbmd0aC0xO1ArKyl7dmFyIE49dVtQXTtOIGluIGh8fChoW05dPXt9KSxoPWhbTl19dT11W3UubGVuZ3RoLTFdLFA9aFt1XSxsPWwoUCksbCE9UCYmbCE9bnVsbCYmZShoLHUse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpsfSl9fWZ1bmN0aW9uIHModSl7dmFyIGw9MDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbDx1Lmxlbmd0aD97ZG9uZTohMSx2YWx1ZTp1W2wrK119Ontkb25lOiEwfX19ZnVuY3Rpb24gcigpe3I9ZnVuY3Rpb24oKXt9LHQuU3ltYm9sfHwodC5TeW1ib2w9aSl9ZnVuY3Rpb24gbyh1LGwpe3RoaXMuYT11LGUodGhpcywiZGVzY3JpcHRpb24iLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bH0pfW8ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX07dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB1KGgpe2lmKHRoaXMgaW5zdGFuY2VvZiB1KXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciIpO3JldHVybiBuZXcgbygianNjb21wX3N5bWJvbF8iKyhofHwiIikrIl8iK2wrKyxoKX12YXIgbD0wO3JldHVybiB1fSgpO2Z1bmN0aW9uIGMoKXtyKCk7dmFyIHU9dC5TeW1ib2wuaXRlcmF0b3I7dXx8KHU9dC5TeW1ib2wuaXRlcmF0b3I9dC5TeW1ib2woIlN5bWJvbC5pdGVyYXRvciIpKSx0eXBlb2YgQXJyYXkucHJvdG90eXBlW3VdIT0iZnVuY3Rpb24iJiZlKEFycmF5LnByb3RvdHlwZSx1LHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZihzKHRoaXMpKX19KSxjPWZ1bmN0aW9uKCl7fX1mdW5jdGlvbiBmKHUpe3JldHVybiBjKCksdT17bmV4dDp1fSx1W3QuU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx1fWZ1bmN0aW9uIGQodSxsKXtjKCksdSBpbnN0YW5jZW9mIFN0cmluZyYmKHUrPSIiKTt2YXIgaD0wLFA9e25leHQ6ZnVuY3Rpb24oKXtpZihoPHUubGVuZ3RoKXt2YXIgTj1oKys7cmV0dXJue3ZhbHVlOmwoTix1W05dKSxkb25lOiExfX1yZXR1cm4gUC5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ITAsdmFsdWU6dm9pZCAwfX0sUC5uZXh0KCl9fTtyZXR1cm4gUFtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIFB9LFB9YSgiQXJyYXkucHJvdG90eXBlLmVudHJpZXMiLGZ1bmN0aW9uKHUpe3JldHVybiB1fHxmdW5jdGlvbigpe3JldHVybiBkKHRoaXMsZnVuY3Rpb24obCxoKXtyZXR1cm5bbCxoXX0pfX0pO3ZhciBwPXVvfHxzZWxmO2Z1bmN0aW9uIGIodSxsLGgpe3U9dS5zcGxpdCgiLiIpLGg9aHx8cCx1WzBdaW4gaHx8dHlwZW9mIGguZXhlY1NjcmlwdD4idSJ8fGguZXhlY1NjcmlwdCgidmFyICIrdVswXSk7Zm9yKHZhciBQO3UubGVuZ3RoJiYoUD11LnNoaWZ0KCkpOyl1Lmxlbmd0aHx8bD09PXZvaWQgMD9oW1BdJiZoW1BdIT09T2JqZWN0LnByb3RvdHlwZVtQXT9oPWhbUF06aD1oW1BdPXt9OmhbUF09bH1mdW5jdGlvbiBUKHUpe3ZhciBsPXR5cGVvZiB1O2lmKGw9PSJvYmplY3QiKWlmKHUpe2lmKHUgaW5zdGFuY2VvZiBBcnJheSlyZXR1cm4iYXJyYXkiO2lmKHUgaW5zdGFuY2VvZiBPYmplY3QpcmV0dXJuIGw7dmFyIGg9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHUpO2lmKGg9PSJbb2JqZWN0IFdpbmRvd10iKXJldHVybiJvYmplY3QiO2lmKGg9PSJbb2JqZWN0IEFycmF5XSJ8fHR5cGVvZiB1Lmxlbmd0aD09Im51bWJlciImJnR5cGVvZiB1LnNwbGljZTwidSImJnR5cGVvZiB1LnByb3BlcnR5SXNFbnVtZXJhYmxlPCJ1IiYmIXUucHJvcGVydHlJc0VudW1lcmFibGUoInNwbGljZSIpKXJldHVybiJhcnJheSI7aWYoaD09IltvYmplY3QgRnVuY3Rpb25dInx8dHlwZW9mIHUuY2FsbDwidSImJnR5cGVvZiB1LnByb3BlcnR5SXNFbnVtZXJhYmxlPCJ1IiYmIXUucHJvcGVydHlJc0VudW1lcmFibGUoImNhbGwiKSlyZXR1cm4iZnVuY3Rpb24ifWVsc2UgcmV0dXJuIm51bGwiO2Vsc2UgaWYobD09ImZ1bmN0aW9uIiYmdHlwZW9mIHUuY2FsbD4idSIpcmV0dXJuIm9iamVjdCI7cmV0dXJuIGx9ZnVuY3Rpb24gVyh1KXt2YXIgbD10eXBlb2YgdTtyZXR1cm4gbD09Im9iamVjdCImJnUhPW51bGx8fGw9PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gZyh1LGwsaCl7Yih1LGwsaCl9ZnVuY3Rpb24gQSh1LGwpe2Z1bmN0aW9uIGgoKXt9aC5wcm90b3R5cGU9bC5wcm90b3R5cGUsdS5wcm90b3R5cGU9bmV3IGgsdS5wcm90b3R5cGUuY29uc3RydWN0b3I9dX12YXIgbT0iY29uc3RydWN0b3IgaGFzT3duUHJvcGVydHkgaXNQcm90b3R5cGVPZiBwcm9wZXJ0eUlzRW51bWVyYWJsZSB0b0xvY2FsZVN0cmluZyB0b1N0cmluZyB2YWx1ZU9mIi5zcGxpdCgiICIpO2Z1bmN0aW9uIHcodSxsKXtmb3IodmFyIGgsUCxOPTE7Tjxhcmd1bWVudHMubGVuZ3RoO04rKyl7UD1hcmd1bWVudHNbTl07Zm9yKGggaW4gUCl1W2hdPVBbaF07Zm9yKHZhciBLPTA7SzxtLmxlbmd0aDtLKyspaD1tW0tdLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChQLGgpJiYodVtoXT1QW2hdKX19dmFyIEI9QXJyYXkucHJvdG90eXBlLmZvckVhY2g/ZnVuY3Rpb24odSxsKXtBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHUsbCx2b2lkIDApfTpmdW5jdGlvbih1LGwpe2Zvcih2YXIgaD11Lmxlbmd0aCxQPXR5cGVvZiB1PT0ic3RyaW5nIj91LnNwbGl0KCIiKTp1LE49MDtOPGg7TisrKU4gaW4gUCYmbC5jYWxsKHZvaWQgMCxQW05dLE4sdSl9LGs9QXJyYXkucHJvdG90eXBlLm1hcD9mdW5jdGlvbih1LGwpe3JldHVybiBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwodSxsLHZvaWQgMCl9OmZ1bmN0aW9uKHUsbCl7Zm9yKHZhciBoPXUubGVuZ3RoLFA9QXJyYXkoaCksTj10eXBlb2YgdT09InN0cmluZyI/dS5zcGxpdCgiIik6dSxLPTA7SzxoO0srKylLIGluIE4mJihQW0tdPWwuY2FsbCh2b2lkIDAsTltLXSxLLHUpKTtyZXR1cm4gUH07ZnVuY3Rpb24gVih1LGwsaCl7cmV0dXJuIDI+PWFyZ3VtZW50cy5sZW5ndGg/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodSxsKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh1LGwsaCl9ZnVuY3Rpb24gTCh1LGwsaCxQKXt2YXIgTj0iQXNzZXJ0aW9uIGZhaWxlZCI7aWYoaCl7Tis9IjogIitoO3ZhciBLPVB9ZWxzZSB1JiYoTis9IjogIit1LEs9bCk7dGhyb3cgRXJyb3IoTixLfHxbXSl9ZnVuY3Rpb24gSSh1LGwsaCl7Zm9yKHZhciBQPVtdLE49MjtOPGFyZ3VtZW50cy5sZW5ndGg7KytOKVBbTi0yXT1hcmd1bWVudHNbTl07cmV0dXJuIHV8fEwoIiIsbnVsbCxsLFApLHV9ZnVuY3Rpb24geSh1LGwsaCl7Zm9yKHZhciBQPVtdLE49MjtOPGFyZ3VtZW50cy5sZW5ndGg7KytOKVBbTi0yXT1hcmd1bWVudHNbTl07dHlwZW9mIHUhPSJzdHJpbmciJiZMKCJFeHBlY3RlZCBzdHJpbmcgYnV0IGdvdCAlczogJXMuIixbVCh1KSx1XSxsLFApfWZ1bmN0aW9uIEUodSxsLGgpe2Zvcih2YXIgUD1bXSxOPTI7Tjxhcmd1bWVudHMubGVuZ3RoOysrTilQW04tMl09YXJndW1lbnRzW05dO0FycmF5LmlzQXJyYXkodSl8fEwoIkV4cGVjdGVkIGFycmF5IGJ1dCBnb3QgJXM6ICVzLiIsW1QodSksdV0sbCxQKX1mdW5jdGlvbiBDKHUsbCl7Zm9yKHZhciBoPVtdLFA9MTtQPGFyZ3VtZW50cy5sZW5ndGg7KytQKWhbUC0xXT1hcmd1bWVudHNbUF07dGhyb3cgRXJyb3IoIkZhaWx1cmUiKyh1PyI6ICIrdToiIiksaCl9ZnVuY3Rpb24gRih1LGwsaCxQKXtmb3IodmFyIE49W10sSz0zO0s8YXJndW1lbnRzLmxlbmd0aDsrK0spTltLLTNdPWFyZ3VtZW50c1tLXTt1IGluc3RhbmNlb2YgbHx8TCgiRXhwZWN0ZWQgaW5zdGFuY2VvZiAlcyBidXQgZ290ICVzLiIsWyQobCksJCh1KV0saCxOKX1mdW5jdGlvbiAkKHUpe3JldHVybiB1IGluc3RhbmNlb2YgRnVuY3Rpb24/dS5kaXNwbGF5TmFtZXx8dS5uYW1lfHwidW5rbm93biB0eXBlIG5hbWUiOnUgaW5zdGFuY2VvZiBPYmplY3Q/dS5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZXx8dS5jb25zdHJ1Y3Rvci5uYW1lfHxPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodSk6dT09PW51bGw/Im51bGwiOnR5cGVvZiB1fWZ1bmN0aW9uIE8odSxsKXtpZih0aGlzLmM9dSx0aGlzLmI9bCx0aGlzLmE9e30sdGhpcy5hcnJDbGVhbj0hMCwwPHRoaXMuYy5sZW5ndGgpe2Zvcih1PTA7dTx0aGlzLmMubGVuZ3RoO3UrKyl7bD10aGlzLmNbdV07dmFyIGg9bFswXTt0aGlzLmFbaC50b1N0cmluZygpXT1uZXcgXyhoLGxbMV0pfXRoaXMuYXJyQ2xlYW49ITB9fWIoImpzcGIuTWFwIixPLHZvaWQgMCksTy5wcm90b3R5cGUuZz1mdW5jdGlvbigpe2lmKHRoaXMuYXJyQ2xlYW4pe2lmKHRoaXMuYil7dmFyIHU9dGhpcy5hLGw7Zm9yKGwgaW4gdSlpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodSxsKSl7dmFyIGg9dVtsXS5hO2gmJmguZygpfX19ZWxzZXtmb3IodGhpcy5jLmxlbmd0aD0wLHU9dih0aGlzKSx1LnNvcnQoKSxsPTA7bDx1Lmxlbmd0aDtsKyspe3ZhciBQPXRoaXMuYVt1W2xdXTsoaD1QLmEpJiZoLmcoKSx0aGlzLmMucHVzaChbUC5rZXksUC52YWx1ZV0pfXRoaXMuYXJyQ2xlYW49ITB9cmV0dXJuIHRoaXMuY30sTy5wcm90b3R5cGUudG9BcnJheT1PLnByb3RvdHlwZS5nLE8ucHJvdG90eXBlLk1jPWZ1bmN0aW9uKHUsbCl7Zm9yKHZhciBoPXRoaXMuZygpLFA9W10sTj0wO048aC5sZW5ndGg7TisrKXt2YXIgSz10aGlzLmFbaFtOXVswXS50b1N0cmluZygpXTt4KHRoaXMsSyk7dmFyIHJlPUsuYTtyZT8oSShsKSxQLnB1c2goW0sua2V5LGwodSxyZSldKSk6UC5wdXNoKFtLLmtleSxLLnZhbHVlXSl9cmV0dXJuIFB9LE8ucHJvdG90eXBlLnRvT2JqZWN0PU8ucHJvdG90eXBlLk1jLE8uZnJvbU9iamVjdD1mdW5jdGlvbih1LGwsaCl7bD1uZXcgTyhbXSxsKTtmb3IodmFyIFA9MDtQPHUubGVuZ3RoO1ArKyl7dmFyIE49dVtQXVswXSxLPWgodVtQXVsxXSk7bC5zZXQoTixLKX1yZXR1cm4gbH07ZnVuY3Rpb24gUih1KXt0aGlzLmE9MCx0aGlzLmI9dX1SLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYTx0aGlzLmIubGVuZ3RoP3tkb25lOiExLHZhbHVlOnRoaXMuYlt0aGlzLmErK119Ontkb25lOiEwLHZhbHVlOnZvaWQgMH19LHR5cGVvZiBTeW1ib2w8InUiJiYoUi5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksTy5wcm90b3R5cGUuSmI9ZnVuY3Rpb24oKXtyZXR1cm4gdih0aGlzKS5sZW5ndGh9LE8ucHJvdG90eXBlLmdldExlbmd0aD1PLnByb3RvdHlwZS5KYixPLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuYT17fSx0aGlzLmFyckNsZWFuPSExfSxPLnByb3RvdHlwZS5jbGVhcj1PLnByb3RvdHlwZS5jbGVhcixPLnByb3RvdHlwZS5DYj1mdW5jdGlvbih1KXt1PXUudG9TdHJpbmcoKTt2YXIgbD10aGlzLmEuaGFzT3duUHJvcGVydHkodSk7cmV0dXJuIGRlbGV0ZSB0aGlzLmFbdV0sdGhpcy5hcnJDbGVhbj0hMSxsfSxPLnByb3RvdHlwZS5kZWw9Ty5wcm90b3R5cGUuQ2IsTy5wcm90b3R5cGUuRWI9ZnVuY3Rpb24oKXt2YXIgdT1bXSxsPXYodGhpcyk7bC5zb3J0KCk7Zm9yKHZhciBoPTA7aDxsLmxlbmd0aDtoKyspe3ZhciBQPXRoaXMuYVtsW2hdXTt1LnB1c2goW1Aua2V5LFAudmFsdWVdKX1yZXR1cm4gdX0sTy5wcm90b3R5cGUuZ2V0RW50cnlMaXN0PU8ucHJvdG90eXBlLkViLE8ucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXt2YXIgdT1bXSxsPXYodGhpcyk7bC5zb3J0KCk7Zm9yKHZhciBoPTA7aDxsLmxlbmd0aDtoKyspe3ZhciBQPXRoaXMuYVtsW2hdXTt1LnB1c2goW1Aua2V5LHgodGhpcyxQKV0pfXJldHVybiBuZXcgUih1KX0sTy5wcm90b3R5cGUuZW50cmllcz1PLnByb3RvdHlwZS5lbnRyaWVzLE8ucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXt2YXIgdT1bXSxsPXYodGhpcyk7bC5zb3J0KCk7Zm9yKHZhciBoPTA7aDxsLmxlbmd0aDtoKyspdS5wdXNoKHRoaXMuYVtsW2hdXS5rZXkpO3JldHVybiBuZXcgUih1KX0sTy5wcm90b3R5cGUua2V5cz1PLnByb3RvdHlwZS5rZXlzLE8ucHJvdG90eXBlLnZhbHVlcz1mdW5jdGlvbigpe3ZhciB1PVtdLGw9dih0aGlzKTtsLnNvcnQoKTtmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl1LnB1c2goeCh0aGlzLHRoaXMuYVtsW2hdXSkpO3JldHVybiBuZXcgUih1KX0sTy5wcm90b3R5cGUudmFsdWVzPU8ucHJvdG90eXBlLnZhbHVlcyxPLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHUsbCl7dmFyIGg9dih0aGlzKTtoLnNvcnQoKTtmb3IodmFyIFA9MDtQPGgubGVuZ3RoO1ArKyl7dmFyIE49dGhpcy5hW2hbUF1dO3UuY2FsbChsLHgodGhpcyxOKSxOLmtleSx0aGlzKX19LE8ucHJvdG90eXBlLmZvckVhY2g9Ty5wcm90b3R5cGUuZm9yRWFjaCxPLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odSxsKXt2YXIgaD1uZXcgXyh1KTtyZXR1cm4gdGhpcy5iPyhoLmE9bCxoLnZhbHVlPWwuZygpKTpoLnZhbHVlPWwsdGhpcy5hW3UudG9TdHJpbmcoKV09aCx0aGlzLmFyckNsZWFuPSExLHRoaXN9LE8ucHJvdG90eXBlLnNldD1PLnByb3RvdHlwZS5zZXQ7ZnVuY3Rpb24geCh1LGwpe3JldHVybiB1LmI/KGwuYXx8KGwuYT1uZXcgdS5iKGwudmFsdWUpKSxsLmEpOmwudmFsdWV9Ty5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHUpe2lmKHU9dGhpcy5hW3UudG9TdHJpbmcoKV0pcmV0dXJuIHgodGhpcyx1KX0sTy5wcm90b3R5cGUuZ2V0PU8ucHJvdG90eXBlLmdldCxPLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odSl7cmV0dXJuIHUudG9TdHJpbmcoKWluIHRoaXMuYX0sTy5wcm90b3R5cGUuaGFzPU8ucHJvdG90eXBlLmhhcyxPLnByb3RvdHlwZS5KYz1mdW5jdGlvbih1LGwsaCxQLE4pe3ZhciBLPXYodGhpcyk7Sy5zb3J0KCk7Zm9yKHZhciByZT0wO3JlPEsubGVuZ3RoO3JlKyspe3ZhciB3ZT10aGlzLmFbS1tyZV1dO2wuVmEodSksaC5jYWxsKGwsMSx3ZS5rZXkpLHRoaXMuYj9QLmNhbGwobCwyLHgodGhpcyx3ZSksTik6UC5jYWxsKGwsMix3ZS52YWx1ZSksbC5ZYSgpfX0sTy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PU8ucHJvdG90eXBlLkpjLE8uZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24odSxsLGgsUCxOLEsscmUpe2Zvcig7bC5vYSgpJiYhbC5iYigpOyl7dmFyIHdlPWwuYzt3ZT09MT9LPWguY2FsbChsKTp3ZT09MiYmKHUuYj8oSShOKSxyZXx8KHJlPW5ldyB1LmIpLFAuY2FsbChsLHJlLE4pKTpyZT1QLmNhbGwobCkpfUkoSyE9bnVsbCksSShyZSE9bnVsbCksdS5zZXQoSyxyZSl9O2Z1bmN0aW9uIHYodSl7dT11LmE7dmFyIGw9W10saDtmb3IoaCBpbiB1KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1LGgpJiZsLnB1c2goaCk7cmV0dXJuIGx9ZnVuY3Rpb24gXyh1LGwpe3RoaXMua2V5PXUsdGhpcy52YWx1ZT1sLHRoaXMuYT12b2lkIDB9ZnVuY3Rpb24gTSh1KXtpZig4MTkyPj11Lmxlbmd0aClyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHUpO2Zvcih2YXIgbD0iIixoPTA7aDx1Lmxlbmd0aDtoKz04MTkyKWwrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxWKHUsaCxoKzgxOTIpKTtyZXR1cm4gbH12YXIgej17IlwwIjoiXFwwIiwiXGIiOiJcXGIiLCJcZiI6IlxcZiIsIlxuIjoiXFxuIiwiXHIiOiJcXHIiLCIJIjoiXFx0IiwiXHYiOiJcXHgwQiIsJyInOidcXCInLCJcXCI6IlxcXFwiLCI8IjoiXFx1MDAzQyJ9LHE9eyInIjoiXFwnIn0sUT17fSxlZT1udWxsO2Z1bmN0aW9uIGdlKHUsbCl7bD09PXZvaWQgMCYmKGw9MCksZmUoKSxsPVFbbF07Zm9yKHZhciBoPVtdLFA9MDtQPHUubGVuZ3RoO1ArPTMpe3ZhciBOPXVbUF0sSz1QKzE8dS5sZW5ndGgscmU9Sz91W1ArMV06MCx3ZT1QKzI8dS5sZW5ndGgscHQ9d2U/dVtQKzJdOjAsY289Tj4+MjtOPShOJjMpPDw0fHJlPj40LHJlPShyZSYxNSk8PDJ8cHQ+PjYscHQmPTYzLHdlfHwocHQ9NjQsS3x8KHJlPTY0KSksaC5wdXNoKGxbY29dLGxbTl0sbFtyZV18fCIiLGxbcHRdfHwiIil9cmV0dXJuIGguam9pbigiIil9ZnVuY3Rpb24gVGUodSl7dmFyIGw9dS5sZW5ndGgsaD0zKmwvNDtoJTM/aD1NYXRoLmZsb29yKGgpOiI9LiIuaW5kZXhPZih1W2wtMV0pIT0tMSYmKGg9Ij0uIi5pbmRleE9mKHVbbC0yXSkhPS0xP2gtMjpoLTEpO3ZhciBQPW5ldyBVaW50OEFycmF5KGgpLE49MDtyZXR1cm4gcGUodSxmdW5jdGlvbihLKXtQW04rK109S30pLFAuc3ViYXJyYXkoMCxOKX1mdW5jdGlvbiBwZSh1LGwpe2Z1bmN0aW9uIGgocHQpe2Zvcig7UDx1Lmxlbmd0aDspe3ZhciBjbz11LmNoYXJBdChQKyspLEIwPWVlW2NvXTtpZihCMCE9bnVsbClyZXR1cm4gQjA7aWYoIS9eW1xzXHhhMF0qJC8udGVzdChjbykpdGhyb3cgRXJyb3IoIlVua25vd24gYmFzZTY0IGVuY29kaW5nIGF0IGNoYXI6ICIrY28pfXJldHVybiBwdH1mZSgpO2Zvcih2YXIgUD0wOzspe3ZhciBOPWgoLTEpLEs9aCgwKSxyZT1oKDY0KSx3ZT1oKDY0KTtpZih3ZT09PTY0JiZOPT09LTEpYnJlYWs7bChOPDwyfEs+PjQpLHJlIT02NCYmKGwoSzw8NCYyNDB8cmU+PjIpLHdlIT02NCYmbChyZTw8NiYxOTJ8d2UpKX19ZnVuY3Rpb24gZmUoKXtpZighZWUpe2VlPXt9O2Zvcih2YXIgdT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiLnNwbGl0KCIiKSxsPVsiKy89IiwiKy8iLCItXz0iLCItXy4iLCItXyJdLGg9MDs1Pmg7aCsrKXt2YXIgUD11LmNvbmNhdChsW2hdLnNwbGl0KCIiKSk7UVtoXT1QO2Zvcih2YXIgTj0wO048UC5sZW5ndGg7TisrKXt2YXIgSz1QW05dO2VlW0tdPT09dm9pZCAwJiYoZWVbS109Til9fX19YigianNwYi5Db25zdEJpbmFyeU1lc3NhZ2UiLGZ1bmN0aW9uKCl7fSx2b2lkIDApLGIoImpzcGIuQmluYXJ5TWVzc2FnZSIsZnVuY3Rpb24oKXt9LHZvaWQgMCksYigianNwYi5CaW5hcnlDb25zdGFudHMuRmllbGRUeXBlIix7eWI6LTEsZWU6MSxGTE9BVDoyLGtlOjMsdGU6NCxqZTo1LHhiOjYsd2I6NyxCT09MOjgscmU6OSxpZToxMCxsZToxMSxjZToxMixzZToxMyxnZToxNCxtZToxNSxuZToxNixvZToxNyxwZToxOCxoZTozMCx2ZTozMX0sdm9pZCAwKSxiKCJqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZSIse3liOi0xLHVlOjAseGI6MSxkZToyLHFlOjMsZmU6NCx3Yjo1fSx2b2lkIDApLGIoImpzcGIuQmluYXJ5Q29uc3RhbnRzLkZpZWxkVHlwZVRvV2lyZVR5cGUiLGZ1bmN0aW9uKHUpe3N3aXRjaCh1KXtjYXNlIDU6Y2FzZSAzOmNhc2UgMTM6Y2FzZSA0OmNhc2UgMTc6Y2FzZSAxODpjYXNlIDg6Y2FzZSAxNDpjYXNlIDMxOnJldHVybiAwO2Nhc2UgMTpjYXNlIDY6Y2FzZSAxNjpjYXNlIDMwOnJldHVybiAxO2Nhc2UgOTpjYXNlIDExOmNhc2UgMTI6cmV0dXJuIDI7Y2FzZSAyOmNhc2UgNzpjYXNlIDE1OnJldHVybiA1O2RlZmF1bHQ6cmV0dXJuLTF9fSx2b2lkIDApLGIoImpzcGIuQmluYXJ5Q29uc3RhbnRzLklOVkFMSURfRklFTERfTlVNQkVSIiwtMSx2b2lkIDApLGIoImpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUMzJfRVBTIiwxNDAxMjk4NDY0MzI0ODE3ZS02MCx2b2lkIDApLGIoImpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUMzJfTUlOIiwxMTc1NDk0MzUwODIyMjg3NWUtNTQsdm9pZCAwKSxiKCJqc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDMyX01BWCIsMzQwMjgyMzQ2NjM4NTI4ODZlMjIsdm9pZCAwKSxiKCJqc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDY0X0VQUyIsNWUtMzI0LHZvaWQgMCksYigianNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQ2NF9NSU4iLDIyMjUwNzM4NTg1MDcyMDE0ZS0zMjQsdm9pZCAwKSxiKCJqc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDY0X01BWCIsMTc5NzY5MzEzNDg2MjMxNTdlMjkyLHZvaWQgMCksYigianNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzIwIiwxMDQ4NTc2LHZvaWQgMCksYigianNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzIzIiw4Mzg4NjA4LHZvaWQgMCksYigianNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxIiwyMTQ3NDgzNjQ4LHZvaWQgMCksYigianNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyIiw0Mjk0OTY3Mjk2LHZvaWQgMCksYigianNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzUyIiw0NTAzNTk5NjI3MzcwNDk2LHZvaWQgMCksYigianNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzIiw5MjIzMzcyMDM2ODU0Nzc2ZTMsdm9pZCAwKSxiKCJqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjQiLDE4NDQ2NzQ0MDczNzA5NTUyZTMsdm9pZCAwKSxiKCJqc3BiLkJpbmFyeUNvbnN0YW50cy5aRVJPX0hBU0giLCJcMFwwXDBcMFwwXDBcMFwwIix2b2lkIDApO3ZhciBkZT0wLEJlPTA7YigianNwYi51dGlscy5nZXRTcGxpdDY0TG93IixmdW5jdGlvbigpe3JldHVybiBkZX0sdm9pZCAwKSxiKCJqc3BiLnV0aWxzLmdldFNwbGl0NjRIaWdoIixmdW5jdGlvbigpe3JldHVybiBCZX0sdm9pZCAwKTtmdW5jdGlvbiBLZSh1KXt2YXIgbD11Pj4+MDt1PU1hdGguZmxvb3IoKHUtbCkvNDI5NDk2NzI5Nik+Pj4wLGRlPWwsQmU9dX1iKCJqc3BiLnV0aWxzLnNwbGl0VWludDY0IixLZSx2b2lkIDApO2Z1bmN0aW9uIFFlKHUpe3ZhciBsPTA+dTt1PU1hdGguYWJzKHUpO3ZhciBoPXU+Pj4wO3U9TWF0aC5mbG9vcigodS1oKS80Mjk0OTY3Mjk2KSx1Pj4+PTAsbCYmKHU9fnU+Pj4wLGg9KH5oPj4+MCkrMSw0Mjk0OTY3Mjk1PGgmJihoPTAsdSsrLDQyOTQ5NjcyOTU8dSYmKHU9MCkpKSxkZT1oLEJlPXV9YigianNwYi51dGlscy5zcGxpdEludDY0IixRZSx2b2lkIDApO2Z1bmN0aW9uIHJ0KHUpe3ZhciBsPTA+dTt1PTIqTWF0aC5hYnModSksS2UodSksdT1kZTt2YXIgaD1CZTtsJiYodT09MD9oPT0wP2g9dT00Mjk0OTY3Mjk1OihoLS0sdT00Mjk0OTY3Mjk1KTp1LS0pLGRlPXUsQmU9aH1iKCJqc3BiLnV0aWxzLnNwbGl0WmlnemFnNjQiLHJ0LHZvaWQgMCk7ZnVuY3Rpb24gSWUodSl7dmFyIGw9MD51PzE6MDtpZih1PWw/LXU6dSx1PT09MCkwPDEvdT9kZT1CZT0wOihCZT0wLGRlPTIxNDc0ODM2NDgpO2Vsc2UgaWYoaXNOYU4odSkpQmU9MCxkZT0yMTQ3NDgzNjQ3O2Vsc2UgaWYoMzQwMjgyMzQ2NjM4NTI4ODZlMjI8dSlCZT0wLGRlPShsPDwzMXwyMTM5MDk1MDQwKT4+PjA7ZWxzZSBpZigxMTc1NDk0MzUwODIyMjg3NWUtNTQ+dSl1PU1hdGgucm91bmQodS9NYXRoLnBvdygyLC0xNDkpKSxCZT0wLGRlPShsPDwzMXx1KT4+PjA7ZWxzZXt2YXIgaD1NYXRoLmZsb29yKE1hdGgubG9nKHUpL01hdGguTE4yKTt1Kj1NYXRoLnBvdygyLC1oKSx1PU1hdGgucm91bmQoODM4ODYwOCp1KSwxNjc3NzIxNjw9dSYmKytoLEJlPTAsZGU9KGw8PDMxfGgrMTI3PDwyM3x1JjgzODg2MDcpPj4+MH19YigianNwYi51dGlscy5zcGxpdEZsb2F0MzIiLEllLHZvaWQgMCk7ZnVuY3Rpb24gTWUodSl7dmFyIGw9MD51PzE6MDtpZih1PWw/LXU6dSx1PT09MClCZT0wPDEvdT8wOjIxNDc0ODM2NDgsZGU9MDtlbHNlIGlmKGlzTmFOKHUpKUJlPTIxNDc0ODM2NDcsZGU9NDI5NDk2NzI5NTtlbHNlIGlmKDE3OTc2OTMxMzQ4NjIzMTU3ZTI5Mjx1KUJlPShsPDwzMXwyMTQ2NDM1MDcyKT4+PjAsZGU9MDtlbHNlIGlmKDIyMjUwNzM4NTg1MDcyMDE0ZS0zMjQ+dSl1Lz1NYXRoLnBvdygyLC0xMDc0KSxCZT0obDw8MzF8dS80Mjk0OTY3Mjk2KT4+PjAsZGU9dT4+PjA7ZWxzZXt2YXIgaD11LFA9MDtpZigyPD1oKWZvcig7Mjw9aCYmMTAyMz5QOylQKyssaC89MjtlbHNlIGZvcig7MT5oJiYtMTAyMjxQOyloKj0yLFAtLTt1Kj1NYXRoLnBvdygyLC1QKSxCZT0obDw8MzF8UCsxMDIzPDwyMHwxMDQ4NTc2KnUmMTA0ODU3NSk+Pj4wLGRlPTQ1MDM1OTk2MjczNzA0OTYqdT4+PjB9fWIoImpzcGIudXRpbHMuc3BsaXRGbG9hdDY0IixNZSx2b2lkIDApO2Z1bmN0aW9uIE5lKHUpe3ZhciBsPXUuY2hhckNvZGVBdCg0KSxoPXUuY2hhckNvZGVBdCg1KSxQPXUuY2hhckNvZGVBdCg2KSxOPXUuY2hhckNvZGVBdCg3KTtkZT11LmNoYXJDb2RlQXQoMCkrKHUuY2hhckNvZGVBdCgxKTw8OCkrKHUuY2hhckNvZGVBdCgyKTw8MTYpKyh1LmNoYXJDb2RlQXQoMyk8PDI0KT4+PjAsQmU9bCsoaDw8OCkrKFA8PDE2KSsoTjw8MjQpPj4+MH1iKCJqc3BiLnV0aWxzLnNwbGl0SGFzaDY0IixOZSx2b2lkIDApO2Z1bmN0aW9uIF9lKHUsbCl7cmV0dXJuIDQyOTQ5NjcyOTYqbCsodT4+PjApfWIoImpzcGIudXRpbHMuam9pblVpbnQ2NCIsX2Usdm9pZCAwKTtmdW5jdGlvbiBDZSh1LGwpe3ZhciBoPWwmMjE0NzQ4MzY0ODtyZXR1cm4gaCYmKHU9fnUrMT4+PjAsbD1+bD4+PjAsdT09MCYmKGw9bCsxPj4+MCkpLHU9X2UodSxsKSxoPy11OnV9YigianNwYi51dGlscy5qb2luSW50NjQiLENlLHZvaWQgMCk7ZnVuY3Rpb24gRCh1LGwsaCl7dmFyIFA9bD4+MzE7cmV0dXJuIGgodTw8MV5QLChsPDwxfHU+Pj4zMSleUCl9YigianNwYi51dGlscy50b1ppZ3phZzY0IixELHZvaWQgMCk7ZnVuY3Rpb24gaih1LGwpe3JldHVybiBYKHUsbCxDZSl9YigianNwYi51dGlscy5qb2luWmlnemFnNjQiLGosdm9pZCAwKTtmdW5jdGlvbiBYKHUsbCxoKXt2YXIgUD0tKHUmMSk7cmV0dXJuIGgoKHU+Pj4xfGw8PDMxKV5QLGw+Pj4xXlApfWIoImpzcGIudXRpbHMuZnJvbVppZ3phZzY0IixYLHZvaWQgMCk7ZnVuY3Rpb24gc2UodSl7dmFyIGw9MioodT4+MzEpKzEsaD11Pj4+MjMmMjU1O3JldHVybiB1Jj04Mzg4NjA3LGg9PTI1NT91P05hTjoxLzAqbDpoPT0wP2wqTWF0aC5wb3coMiwtMTQ5KSp1OmwqTWF0aC5wb3coMixoLTE1MCkqKHUrTWF0aC5wb3coMiwyMykpfWIoImpzcGIudXRpbHMuam9pbkZsb2F0MzIiLHNlLHZvaWQgMCk7ZnVuY3Rpb24gbmUodSxsKXt2YXIgaD0yKihsPj4zMSkrMSxQPWw+Pj4yMCYyMDQ3O3JldHVybiB1PTQyOTQ5NjcyOTYqKGwmMTA0ODU3NSkrdSxQPT0yMDQ3P3U/TmFOOjEvMCpoOlA9PTA/aCpNYXRoLnBvdygyLC0xMDc0KSp1OmgqTWF0aC5wb3coMixQLTEwNzUpKih1KzQ1MDM1OTk2MjczNzA0OTYpfWIoImpzcGIudXRpbHMuam9pbkZsb2F0NjQiLG5lLHZvaWQgMCk7ZnVuY3Rpb24gdGUodSxsKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh1Pj4+MCYyNTUsdT4+PjgmMjU1LHU+Pj4xNiYyNTUsdT4+PjI0JjI1NSxsPj4+MCYyNTUsbD4+PjgmMjU1LGw+Pj4xNiYyNTUsbD4+PjI0JjI1NSl9YigianNwYi51dGlscy5qb2luSGFzaDY0Iix0ZSx2b2lkIDApLGIoImpzcGIudXRpbHMuRElHSVRTIiwiMDEyMzQ1Njc4OWFiY2RlZiIuc3BsaXQoIiIpLHZvaWQgMCk7ZnVuY3Rpb24gRWUodSxsKXtmdW5jdGlvbiBoKE4sSyl7cmV0dXJuIE49Tj9TdHJpbmcoTik6IiIsSz8iMDAwMDAwMCIuc2xpY2UoTi5sZW5ndGgpK046Tn1pZigyMDk3MTUxPj1sKXJldHVybiIiK19lKHUsbCk7dmFyIFA9KHU+Pj4yNHxsPDw4KT4+PjAmMTY3NzcyMTU7cmV0dXJuIGw9bD4+MTYmNjU1MzUsdT0odSYxNjc3NzIxNSkrNjc3NzIxNipQKzY3MTA2NTYqbCxQKz04MTQ3NDk3KmwsbCo9MiwxZTc8PXUmJihQKz1NYXRoLmZsb29yKHUvMWU3KSx1JT0xZTcpLDFlNzw9UCYmKGwrPU1hdGguZmxvb3IoUC8xZTcpLFAlPTFlNyksaChsLDApK2goUCxsKStoKHUsMSl9YigianNwYi51dGlscy5qb2luVW5zaWduZWREZWNpbWFsU3RyaW5nIixFZSx2b2lkIDApO2Z1bmN0aW9uIFNlKHUsbCl7dmFyIGg9bCYyMTQ3NDgzNjQ4O3JldHVybiBoJiYodT1+dSsxPj4+MCxsPX5sKyh1PT0wPzE6MCk+Pj4wKSx1PUVlKHUsbCksaD8iLSIrdTp1fWIoImpzcGIudXRpbHMuam9pblNpZ25lZERlY2ltYWxTdHJpbmciLFNlLHZvaWQgMCk7ZnVuY3Rpb24gVWUodSxsKXtOZSh1KSx1PWRlO3ZhciBoPUJlO3JldHVybiBsP1NlKHUsaCk6RWUodSxoKX1iKCJqc3BiLnV0aWxzLmhhc2g2NFRvRGVjaW1hbFN0cmluZyIsVWUsdm9pZCAwKSxiKCJqc3BiLnV0aWxzLmhhc2g2NEFycmF5VG9EZWNpbWFsU3RyaW5ncyIsZnVuY3Rpb24odSxsKXtmb3IodmFyIGg9QXJyYXkodS5sZW5ndGgpLFA9MDtQPHUubGVuZ3RoO1ArKyloW1BdPVVlKHVbUF0sbCk7cmV0dXJuIGh9LHZvaWQgMCk7ZnVuY3Rpb24gVmUodSl7ZnVuY3Rpb24gbChyZSx3ZSl7Zm9yKHZhciBwdD0wOzg+cHQmJihyZSE9PTF8fDA8d2UpO3B0Kyspd2U9cmUqTltwdF0rd2UsTltwdF09d2UmMjU1LHdlPj4+PTh9ZnVuY3Rpb24gaCgpe2Zvcih2YXIgcmU9MDs4PnJlO3JlKyspTltyZV09fk5bcmVdJjI1NX1JKDA8dS5sZW5ndGgpO3ZhciBQPSExO3VbMF09PT0iLSImJihQPSEwLHU9dS5zbGljZSgxKSk7Zm9yKHZhciBOPVswLDAsMCwwLDAsMCwwLDBdLEs9MDtLPHUubGVuZ3RoO0srKylsKDEwLHUuY2hhckNvZGVBdChLKS00OCk7cmV0dXJuIFAmJihoKCksbCgxLDEpKSxNKE4pfWIoImpzcGIudXRpbHMuZGVjaW1hbFN0cmluZ1RvSGFzaDY0IixWZSx2b2lkIDApLGIoImpzcGIudXRpbHMuc3BsaXREZWNpbWFsU3RyaW5nIixmdW5jdGlvbih1KXtOZShWZSh1KSl9LHZvaWQgMCk7ZnVuY3Rpb24gd3QodSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoMTA+dT80OCt1Ojg3K3UpfWZ1bmN0aW9uIHhyKHUpe3JldHVybiA5Nzw9dT91LTk3KzEwOnUtNDh9YigianNwYi51dGlscy5oYXNoNjRUb0hleFN0cmluZyIsZnVuY3Rpb24odSl7dmFyIGw9QXJyYXkoMTgpO2xbMF09IjAiLGxbMV09IngiO2Zvcih2YXIgaD0wOzg+aDtoKyspe3ZhciBQPXUuY2hhckNvZGVBdCg3LWgpO2xbMipoKzJdPXd0KFA+PjQpLGxbMipoKzNdPXd0KFAmMTUpfXJldHVybiBsLmpvaW4oIiIpfSx2b2lkIDApLGIoImpzcGIudXRpbHMuaGV4U3RyaW5nVG9IYXNoNjQiLGZ1bmN0aW9uKHUpe3U9dS50b0xvd2VyQ2FzZSgpLEkodS5sZW5ndGg9PTE4KSxJKHVbMF09PSIwIiksSSh1WzFdPT0ieCIpO2Zvcih2YXIgbD0iIixoPTA7OD5oO2grKylsPVN0cmluZy5mcm9tQ2hhckNvZGUoMTYqeHIodS5jaGFyQ29kZUF0KDIqaCsyKSkreHIodS5jaGFyQ29kZUF0KDIqaCszKSkpK2w7cmV0dXJuIGx9LHZvaWQgMCksYigianNwYi51dGlscy5oYXNoNjRUb051bWJlciIsZnVuY3Rpb24odSxsKXtOZSh1KSx1PWRlO3ZhciBoPUJlO3JldHVybiBsP0NlKHUsaCk6X2UodSxoKX0sdm9pZCAwKSxiKCJqc3BiLnV0aWxzLm51bWJlclRvSGFzaDY0IixmdW5jdGlvbih1KXtyZXR1cm4gUWUodSksdGUoZGUsQmUpfSx2b2lkIDApLGIoImpzcGIudXRpbHMuY291bnRWYXJpbnRzIixmdW5jdGlvbih1LGwsaCl7Zm9yKHZhciBQPTAsTj1sO048aDtOKyspUCs9dVtOXT4+NztyZXR1cm4gaC1sLVB9LHZvaWQgMCksYigianNwYi51dGlscy5jb3VudFZhcmludEZpZWxkcyIsZnVuY3Rpb24odSxsLGgsUCl7dmFyIE49MDtpZihQKj04LDEyOD5QKWZvcig7bDxoJiZ1W2wrK109PVA7KWZvcihOKys7Oyl7dmFyIEs9dVtsKytdO2lmKCEoSyYxMjgpKWJyZWFrfWVsc2UgZm9yKDtsPGg7KXtmb3IoSz1QOzEyODxLOyl7aWYodVtsXSE9KEsmMTI3fDEyOCkpcmV0dXJuIE47bCsrLEs+Pj03fWlmKHVbbCsrXSE9SylicmVhaztmb3IoTisrO0s9dVtsKytdLChLJjEyOCkhPTA7KTt9cmV0dXJuIE59LHZvaWQgMCk7ZnVuY3Rpb24gdXIodSxsLGgsUCxOKXt2YXIgSz0wO2lmKDEyOD5QKWZvcig7bDxoJiZ1W2wrK109PVA7KUsrKyxsKz1OO2Vsc2UgZm9yKDtsPGg7KXtmb3IodmFyIHJlPVA7MTI4PHJlOyl7aWYodVtsKytdIT0ocmUmMTI3fDEyOCkpcmV0dXJuIEs7cmU+Pj03fWlmKHVbbCsrXSE9cmUpYnJlYWs7SysrLGwrPU59cmV0dXJuIEt9YigianNwYi51dGlscy5jb3VudEZpeGVkMzJGaWVsZHMiLGZ1bmN0aW9uKHUsbCxoLFApe3JldHVybiB1cih1LGwsaCw4KlArNSw0KX0sdm9pZCAwKSxiKCJqc3BiLnV0aWxzLmNvdW50Rml4ZWQ2NEZpZWxkcyIsZnVuY3Rpb24odSxsLGgsUCl7cmV0dXJuIHVyKHUsbCxoLDgqUCsxLDgpfSx2b2lkIDApLGIoImpzcGIudXRpbHMuY291bnREZWxpbWl0ZWRGaWVsZHMiLGZ1bmN0aW9uKHUsbCxoLFApe3ZhciBOPTA7Zm9yKFA9OCpQKzI7bDxoOyl7Zm9yKHZhciBLPVA7MTI4PEs7KXtpZih1W2wrK10hPShLJjEyN3wxMjgpKXJldHVybiBOO0s+Pj03fWlmKHVbbCsrXSE9SylicmVhaztOKys7Zm9yKHZhciByZT0wLHdlPTE7Sz11W2wrK10scmUrPShLJjEyNykqd2Usd2UqPTEyOCwoSyYxMjgpIT0wOyk7bCs9cmV9cmV0dXJuIE59LHZvaWQgMCksYigianNwYi51dGlscy5kZWJ1Z0J5dGVzVG9UZXh0Rm9ybWF0IixmdW5jdGlvbih1KXt2YXIgbD0nIic7aWYodSl7dT1Rcih1KTtmb3IodmFyIGg9MDtoPHUubGVuZ3RoO2grKylsKz0iXFx4IiwxNj51W2hdJiYobCs9IjAiKSxsKz11W2hdLnRvU3RyaW5nKDE2KX1yZXR1cm4gbCsnIid9LHZvaWQgMCksYigianNwYi51dGlscy5kZWJ1Z1NjYWxhclRvVGV4dEZvcm1hdCIsZnVuY3Rpb24odSl7aWYodHlwZW9mIHU9PSJzdHJpbmciKXt1PVN0cmluZyh1KTtmb3IodmFyIGw9WyciJ10saD0wO2g8dS5sZW5ndGg7aCsrKXt2YXIgUD11LmNoYXJBdChoKSxOPVAuY2hhckNvZGVBdCgwKSxLPWgrMSxyZTsocmU9eltQXSl8fCgzMTxOJiYxMjc+Tnx8KE49UCxOIGluIHE/UD1xW05dOk4gaW4gej9QPXFbTl09eltOXToocmU9Ti5jaGFyQ29kZUF0KDApLDMxPHJlJiYxMjc+cmU/UD1OOigyNTY+cmU/KFA9IlxceCIsKDE2PnJlfHwyNTY8cmUpJiYoUCs9IjAiKSk6KFA9IlxcdSIsNDA5Nj5yZSYmKFArPSIwIikpLFArPXJlLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKSxQPXFbTl09UCkpLHJlPVApLGxbS109cmV9bC5wdXNoKCciJyksdT1sLmpvaW4oIiIpfWVsc2UgdT11LnRvU3RyaW5nKCk7cmV0dXJuIHV9LHZvaWQgMCksYigianNwYi51dGlscy5zdHJpbmdUb0J5dGVBcnJheSIsZnVuY3Rpb24odSl7Zm9yKHZhciBsPW5ldyBVaW50OEFycmF5KHUubGVuZ3RoKSxoPTA7aDx1Lmxlbmd0aDtoKyspe3ZhciBQPXUuY2hhckNvZGVBdChoKTtpZigyNTU8UCl0aHJvdyBFcnJvcigiQ29udmVyc2lvbiBlcnJvcjogc3RyaW5nIGNvbnRhaW5zIGNvZGVwb2ludCBvdXRzaWRlIG9mIGJ5dGUgcmFuZ2UiKTtsW2hdPVB9cmV0dXJuIGx9LHZvaWQgMCk7ZnVuY3Rpb24gUXIodSl7cmV0dXJuIHUuY29uc3RydWN0b3I9PT1VaW50OEFycmF5P3U6dS5jb25zdHJ1Y3Rvcj09PUFycmF5QnVmZmVyP25ldyBVaW50OEFycmF5KHUpOnUuY29uc3RydWN0b3I9PT1BcnJheT9uZXcgVWludDhBcnJheSh1KTp1LmNvbnN0cnVjdG9yPT09U3RyaW5nP1RlKHUpOnUgaW5zdGFuY2VvZiBVaW50OEFycmF5P25ldyBVaW50OEFycmF5KHUuYnVmZmVyLHUuYnl0ZU9mZnNldCx1LmJ5dGVMZW5ndGgpOihDKCJUeXBlIG5vdCBjb252ZXJ0aWJsZSB0byBVaW50OEFycmF5LiIpLG5ldyBVaW50OEFycmF5KDApKX1iKCJqc3BiLnV0aWxzLmJ5dGVTb3VyY2VUb1VpbnQ4QXJyYXkiLFFyLHZvaWQgMCk7ZnVuY3Rpb24gSih1LGwsaCl7dGhpcy5iPW51bGwsdGhpcy5hPXRoaXMuYz10aGlzLmg9MCx0aGlzLnY9ITEsdSYmdGhpcy5IKHUsbCxoKX1iKCJqc3BiLkJpbmFyeURlY29kZXIiLEosdm9pZCAwKTt2YXIgbHI9W107Si5nZXRJbnN0YW5jZUNhY2hlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIGxyLmxlbmd0aH07ZnVuY3Rpb24gVHIodSxsLGgpe2lmKGxyLmxlbmd0aCl7dmFyIFA9bHIucG9wKCk7cmV0dXJuIHUmJlAuSCh1LGwsaCksUH1yZXR1cm4gbmV3IEoodSxsLGgpfUouYWxsb2M9VHIsSi5wcm90b3R5cGUuQ2E9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCksMTAwPmxyLmxlbmd0aCYmbHIucHVzaCh0aGlzKX0sSi5wcm90b3R5cGUuZnJlZT1KLnByb3RvdHlwZS5DYSxKLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBUcih0aGlzLmIsdGhpcy5oLHRoaXMuYy10aGlzLmgpfSxKLnByb3RvdHlwZS5jbG9uZT1KLnByb3RvdHlwZS5jbG9uZSxKLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuYj1udWxsLHRoaXMuYT10aGlzLmM9dGhpcy5oPTAsdGhpcy52PSExfSxKLnByb3RvdHlwZS5jbGVhcj1KLnByb3RvdHlwZS5jbGVhcixKLnByb3RvdHlwZS5ZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sSi5wcm90b3R5cGUuZ2V0QnVmZmVyPUoucHJvdG90eXBlLlksSi5wcm90b3R5cGUuSD1mdW5jdGlvbih1LGwsaCl7dGhpcy5iPVFyKHUpLHRoaXMuaD1sIT09dm9pZCAwP2w6MCx0aGlzLmM9aCE9PXZvaWQgMD90aGlzLmgraDp0aGlzLmIubGVuZ3RoLHRoaXMuYT10aGlzLmh9LEoucHJvdG90eXBlLnNldEJsb2NrPUoucHJvdG90eXBlLkgsSi5wcm90b3R5cGUuRGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxKLnByb3RvdHlwZS5nZXRFbmQ9Si5wcm90b3R5cGUuRGIsSi5wcm90b3R5cGUuc2V0RW5kPWZ1bmN0aW9uKHUpe3RoaXMuYz11fSxKLnByb3RvdHlwZS5zZXRFbmQ9Si5wcm90b3R5cGUuc2V0RW5kLEoucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5hPXRoaXMuaH0sSi5wcm90b3R5cGUucmVzZXQ9Si5wcm90b3R5cGUucmVzZXQsSi5wcm90b3R5cGUuQj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LEoucHJvdG90eXBlLmdldEN1cnNvcj1KLnByb3RvdHlwZS5CLEoucHJvdG90eXBlLk1hPWZ1bmN0aW9uKHUpe3RoaXMuYT11fSxKLnByb3RvdHlwZS5zZXRDdXJzb3I9Si5wcm90b3R5cGUuTWEsSi5wcm90b3R5cGUuYWR2YW5jZT1mdW5jdGlvbih1KXt0aGlzLmErPXUsSSh0aGlzLmE8PXRoaXMuYyl9LEoucHJvdG90eXBlLmFkdmFuY2U9Si5wcm90b3R5cGUuYWR2YW5jZSxKLnByb3RvdHlwZS55YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE9PXRoaXMuY30sSi5wcm90b3R5cGUuYXRFbmQ9Si5wcm90b3R5cGUueWEsSi5wcm90b3R5cGUuUWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hPnRoaXMuY30sSi5wcm90b3R5cGUucGFzdEVuZD1KLnByb3RvdHlwZS5RYixKLnByb3RvdHlwZS5nZXRFcnJvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZ8fDA+dGhpcy5hfHx0aGlzLmE+dGhpcy5jfSxKLnByb3RvdHlwZS5nZXRFcnJvcj1KLnByb3RvdHlwZS5nZXRFcnJvcixKLnByb3RvdHlwZS53PWZ1bmN0aW9uKHUpe2Zvcih2YXIgbD0xMjgsaD0wLFA9MCxOPTA7ND5OJiYxMjg8PWw7TisrKWw9dGhpcy5iW3RoaXMuYSsrXSxofD0obCYxMjcpPDw3Kk47aWYoMTI4PD1sJiYobD10aGlzLmJbdGhpcy5hKytdLGh8PShsJjEyNyk8PDI4LFB8PShsJjEyNyk+PjQpLDEyODw9bClmb3IoTj0wOzU+TiYmMTI4PD1sO04rKylsPXRoaXMuYlt0aGlzLmErK10sUHw9KGwmMTI3KTw8NypOKzM7aWYoMTI4PmwpcmV0dXJuIHUoaD4+PjAsUD4+PjApO0MoIkZhaWxlZCB0byByZWFkIHZhcmludCwgZW5jb2RpbmcgaXMgaW52YWxpZC4iKSx0aGlzLnY9ITB9LEoucHJvdG90eXBlLnJlYWRTcGxpdFZhcmludDY0PUoucHJvdG90eXBlLncsSi5wcm90b3R5cGUuZWE9ZnVuY3Rpb24odSl7cmV0dXJuIHRoaXMudyhmdW5jdGlvbihsLGgpe3JldHVybiBYKGwsaCx1KX0pfSxKLnByb3RvdHlwZS5yZWFkU3BsaXRaaWd6YWdWYXJpbnQ2ND1KLnByb3RvdHlwZS5lYSxKLnByb3RvdHlwZS50YT1mdW5jdGlvbih1KXt2YXIgbD10aGlzLmIsaD10aGlzLmE7dGhpcy5hKz04O2Zvcih2YXIgUD0wLE49MCxLPWgrNztLPj1oO0stLSlQPVA8PDh8bFtLXSxOPU48PDh8bFtLKzRdO3JldHVybiB1KFAsTil9LEoucHJvdG90eXBlLnJlYWRTcGxpdEZpeGVkNjQ9Si5wcm90b3R5cGUudGEsSi5wcm90b3R5cGUua2I9ZnVuY3Rpb24oKXtmb3IoO3RoaXMuYlt0aGlzLmFdJjEyODspdGhpcy5hKys7dGhpcy5hKyt9LEoucHJvdG90eXBlLnNraXBWYXJpbnQ9Si5wcm90b3R5cGUua2IsSi5wcm90b3R5cGUubWI9ZnVuY3Rpb24odSl7Zm9yKDsxMjg8dTspdGhpcy5hLS0sdT4+Pj03O3RoaXMuYS0tfSxKLnByb3RvdHlwZS51bnNraXBWYXJpbnQ9Si5wcm90b3R5cGUubWIsSi5wcm90b3R5cGUubz1mdW5jdGlvbigpe3ZhciB1PXRoaXMuYixsPXVbdGhpcy5hXSxoPWwmMTI3O3JldHVybiAxMjg+bD8odGhpcy5hKz0xLEkodGhpcy5hPD10aGlzLmMpLGgpOihsPXVbdGhpcy5hKzFdLGh8PShsJjEyNyk8PDcsMTI4Pmw/KHRoaXMuYSs9MixJKHRoaXMuYTw9dGhpcy5jKSxoKToobD11W3RoaXMuYSsyXSxofD0obCYxMjcpPDwxNCwxMjg+bD8odGhpcy5hKz0zLEkodGhpcy5hPD10aGlzLmMpLGgpOihsPXVbdGhpcy5hKzNdLGh8PShsJjEyNyk8PDIxLDEyOD5sPyh0aGlzLmErPTQsSSh0aGlzLmE8PXRoaXMuYyksaCk6KGw9dVt0aGlzLmErNF0saHw9KGwmMTUpPDwyOCwxMjg+bD8odGhpcy5hKz01LEkodGhpcy5hPD10aGlzLmMpLGg+Pj4wKToodGhpcy5hKz01LDEyODw9dVt0aGlzLmErK10mJjEyODw9dVt0aGlzLmErK10mJjEyODw9dVt0aGlzLmErK10mJjEyODw9dVt0aGlzLmErK10mJjEyODw9dVt0aGlzLmErK10mJkkoITEpLEkodGhpcy5hPD10aGlzLmMpLGgpKSkpKX0sSi5wcm90b3R5cGUucmVhZFVuc2lnbmVkVmFyaW50MzI9Si5wcm90b3R5cGUubyxKLnByb3RvdHlwZS5kYT1mdW5jdGlvbigpe3JldHVybn5+dGhpcy5vKCl9LEoucHJvdG90eXBlLnJlYWRTaWduZWRWYXJpbnQzMj1KLnByb3RvdHlwZS5kYSxKLnByb3RvdHlwZS5PPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubygpLnRvU3RyaW5nKCl9LEoucHJvdG90eXBlLkVhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGEoKS50b1N0cmluZygpfSxKLnByb3RvdHlwZS5yZWFkU2lnbmVkVmFyaW50MzJTdHJpbmc9Si5wcm90b3R5cGUuRWEsSi5wcm90b3R5cGUuSWE9ZnVuY3Rpb24oKXt2YXIgdT10aGlzLm8oKTtyZXR1cm4gdT4+PjFeLSh1JjEpfSxKLnByb3RvdHlwZS5yZWFkWmlnemFnVmFyaW50MzI9Si5wcm90b3R5cGUuSWEsSi5wcm90b3R5cGUuR2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53KF9lKX0sSi5wcm90b3R5cGUucmVhZFVuc2lnbmVkVmFyaW50NjQ9Si5wcm90b3R5cGUuR2EsSi5wcm90b3R5cGUuSGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53KEVlKX0sSi5wcm90b3R5cGUucmVhZFVuc2lnbmVkVmFyaW50NjRTdHJpbmc9Si5wcm90b3R5cGUuSGEsSi5wcm90b3R5cGUuc2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53KENlKX0sSi5wcm90b3R5cGUucmVhZFNpZ25lZFZhcmludDY0PUoucHJvdG90eXBlLnNhLEoucHJvdG90eXBlLkZhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudyhTZSl9LEoucHJvdG90eXBlLnJlYWRTaWduZWRWYXJpbnQ2NFN0cmluZz1KLnByb3RvdHlwZS5GYSxKLnByb3RvdHlwZS5KYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLncoail9LEoucHJvdG90eXBlLnJlYWRaaWd6YWdWYXJpbnQ2ND1KLnByb3RvdHlwZS5KYSxKLnByb3RvdHlwZS5mYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhKHRlKX0sSi5wcm90b3R5cGUucmVhZFppZ3phZ1ZhcmludEhhc2g2ND1KLnByb3RvdHlwZS5mYixKLnByb3RvdHlwZS5LYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhKFNlKX0sSi5wcm90b3R5cGUucmVhZFppZ3phZ1ZhcmludDY0U3RyaW5nPUoucHJvdG90eXBlLkthLEoucHJvdG90eXBlLkdjPWZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5iW3RoaXMuYV07cmV0dXJuIHRoaXMuYSs9MSxJKHRoaXMuYTw9dGhpcy5jKSx1fSxKLnByb3RvdHlwZS5yZWFkVWludDg9Si5wcm90b3R5cGUuR2MsSi5wcm90b3R5cGUuRWM9ZnVuY3Rpb24oKXt2YXIgdT10aGlzLmJbdGhpcy5hXSxsPXRoaXMuYlt0aGlzLmErMV07cmV0dXJuIHRoaXMuYSs9MixJKHRoaXMuYTw9dGhpcy5jKSx1PDwwfGw8PDh9LEoucHJvdG90eXBlLnJlYWRVaW50MTY9Si5wcm90b3R5cGUuRWMsSi5wcm90b3R5cGUubT1mdW5jdGlvbigpe3ZhciB1PXRoaXMuYlt0aGlzLmFdLGw9dGhpcy5iW3RoaXMuYSsxXSxoPXRoaXMuYlt0aGlzLmErMl0sUD10aGlzLmJbdGhpcy5hKzNdO3JldHVybiB0aGlzLmErPTQsSSh0aGlzLmE8PXRoaXMuYyksKHU8PDB8bDw8OHxoPDwxNnxQPDwyNCk+Pj4wfSxKLnByb3RvdHlwZS5yZWFkVWludDMyPUoucHJvdG90eXBlLm0sSi5wcm90b3R5cGUuZ2E9ZnVuY3Rpb24oKXt2YXIgdT10aGlzLm0oKSxsPXRoaXMubSgpO3JldHVybiBfZSh1LGwpfSxKLnByb3RvdHlwZS5yZWFkVWludDY0PUoucHJvdG90eXBlLmdhLEoucHJvdG90eXBlLmhhPWZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5tKCksbD10aGlzLm0oKTtyZXR1cm4gRWUodSxsKX0sSi5wcm90b3R5cGUucmVhZFVpbnQ2NFN0cmluZz1KLnByb3RvdHlwZS5oYSxKLnByb3RvdHlwZS5YYj1mdW5jdGlvbigpe3ZhciB1PXRoaXMuYlt0aGlzLmFdO3JldHVybiB0aGlzLmErPTEsSSh0aGlzLmE8PXRoaXMuYyksdTw8MjQ+PjI0fSxKLnByb3RvdHlwZS5yZWFkSW50OD1KLnByb3RvdHlwZS5YYixKLnByb3RvdHlwZS5WYj1mdW5jdGlvbigpe3ZhciB1PXRoaXMuYlt0aGlzLmFdLGw9dGhpcy5iW3RoaXMuYSsxXTtyZXR1cm4gdGhpcy5hKz0yLEkodGhpcy5hPD10aGlzLmMpLCh1PDwwfGw8PDgpPDwxNj4+MTZ9LEoucHJvdG90eXBlLnJlYWRJbnQxNj1KLnByb3RvdHlwZS5WYixKLnByb3RvdHlwZS5QPWZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5iW3RoaXMuYV0sbD10aGlzLmJbdGhpcy5hKzFdLGg9dGhpcy5iW3RoaXMuYSsyXSxQPXRoaXMuYlt0aGlzLmErM107cmV0dXJuIHRoaXMuYSs9NCxJKHRoaXMuYTw9dGhpcy5jKSx1PDwwfGw8PDh8aDw8MTZ8UDw8MjR9LEoucHJvdG90eXBlLnJlYWRJbnQzMj1KLnByb3RvdHlwZS5QLEoucHJvdG90eXBlLmJhPWZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5tKCksbD10aGlzLm0oKTtyZXR1cm4gQ2UodSxsKX0sSi5wcm90b3R5cGUucmVhZEludDY0PUoucHJvdG90eXBlLmJhLEoucHJvdG90eXBlLmNhPWZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5tKCksbD10aGlzLm0oKTtyZXR1cm4gU2UodSxsKX0sSi5wcm90b3R5cGUucmVhZEludDY0U3RyaW5nPUoucHJvdG90eXBlLmNhLEoucHJvdG90eXBlLmFhPWZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5tKCk7cmV0dXJuIHNlKHUpfSxKLnByb3RvdHlwZS5yZWFkRmxvYXQ9Si5wcm90b3R5cGUuYWEsSi5wcm90b3R5cGUuWj1mdW5jdGlvbigpe3ZhciB1PXRoaXMubSgpLGw9dGhpcy5tKCk7cmV0dXJuIG5lKHUsbCl9LEoucHJvdG90eXBlLnJlYWREb3VibGU9Si5wcm90b3R5cGUuWixKLnByb3RvdHlwZS5wYT1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5iW3RoaXMuYSsrXX0sSi5wcm90b3R5cGUucmVhZEJvb2w9Si5wcm90b3R5cGUucGEsSi5wcm90b3R5cGUucmE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYSgpfSxKLnByb3RvdHlwZS5yZWFkRW51bT1KLnByb3RvdHlwZS5yYSxKLnByb3RvdHlwZS5mYT1mdW5jdGlvbih1KXt2YXIgbD10aGlzLmIsaD10aGlzLmE7dT1oK3U7Zm9yKHZhciBQPVtdLE49IiI7aDx1Oyl7dmFyIEs9bFtoKytdO2lmKDEyOD5LKVAucHVzaChLKTtlbHNle2lmKDE5Mj5LKWNvbnRpbnVlO2lmKDIyND5LKXt2YXIgcmU9bFtoKytdO1AucHVzaCgoSyYzMSk8PDZ8cmUmNjMpfWVsc2UgaWYoMjQwPkspe3JlPWxbaCsrXTt2YXIgd2U9bFtoKytdO1AucHVzaCgoSyYxNSk8PDEyfChyZSY2Myk8PDZ8d2UmNjMpfWVsc2UgaWYoMjQ4Pkspe3JlPWxbaCsrXSx3ZT1sW2grK107dmFyIHB0PWxbaCsrXTtLPShLJjcpPDwxOHwocmUmNjMpPDwxMnwod2UmNjMpPDw2fHB0JjYzLEstPTY1NTM2LFAucHVzaCgoSz4+MTAmMTAyMykrNTUyOTYsKEsmMTAyMykrNTYzMjApfX04MTkyPD1QLmxlbmd0aCYmKE4rPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxQKSxQLmxlbmd0aD0wKX1yZXR1cm4gTis9TShQKSx0aGlzLmE9aCxOfSxKLnByb3RvdHlwZS5yZWFkU3RyaW5nPUoucHJvdG90eXBlLmZhLEoucHJvdG90eXBlLkRjPWZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5vKCk7cmV0dXJuIHRoaXMuZmEodSl9LEoucHJvdG90eXBlLnJlYWRTdHJpbmdXaXRoTGVuZ3RoPUoucHJvdG90eXBlLkRjLEoucHJvdG90eXBlLnFhPWZ1bmN0aW9uKHUpe2lmKDA+dXx8dGhpcy5hK3U+dGhpcy5iLmxlbmd0aClyZXR1cm4gdGhpcy52PSEwLEMoIkludmFsaWQgYnl0ZSBsZW5ndGghIiksbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIGw9dGhpcy5iLnN1YmFycmF5KHRoaXMuYSx0aGlzLmErdSk7cmV0dXJuIHRoaXMuYSs9dSxJKHRoaXMuYTw9dGhpcy5jKSxsfSxKLnByb3RvdHlwZS5yZWFkQnl0ZXM9Si5wcm90b3R5cGUucWEsSi5wcm90b3R5cGUuaWE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53KHRlKX0sSi5wcm90b3R5cGUucmVhZFZhcmludEhhc2g2ND1KLnByb3RvdHlwZS5pYSxKLnByb3RvdHlwZS4kPWZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5iLGw9dGhpcy5hLGg9dVtsXSxQPXVbbCsxXSxOPXVbbCsyXSxLPXVbbCszXSxyZT11W2wrNF0sd2U9dVtsKzVdLHB0PXVbbCs2XTtyZXR1cm4gdT11W2wrN10sdGhpcy5hKz04LFN0cmluZy5mcm9tQ2hhckNvZGUoaCxQLE4sSyxyZSx3ZSxwdCx1KX0sSi5wcm90b3R5cGUucmVhZEZpeGVkSGFzaDY0PUoucHJvdG90eXBlLiQ7ZnVuY3Rpb24gVSh1LGwsaCl7dGhpcy5hPVRyKHUsbCxoKSx0aGlzLk89dGhpcy5hLkIoKSx0aGlzLmI9dGhpcy5jPS0xLHRoaXMuaD0hMSx0aGlzLnY9bnVsbH1iKCJqc3BiLkJpbmFyeVJlYWRlciIsVSx2b2lkIDApO3ZhciBNbj1bXTtVLmNsZWFySW5zdGFuY2VDYWNoZT1mdW5jdGlvbigpe01uPVtdfSxVLmdldEluc3RhbmNlQ2FjaGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTW4ubGVuZ3RofTtmdW5jdGlvbiBkaSh1LGwsaCl7aWYoTW4ubGVuZ3RoKXt2YXIgUD1Nbi5wb3AoKTtyZXR1cm4gdSYmUC5hLkgodSxsLGgpLFB9cmV0dXJuIG5ldyBVKHUsbCxoKX1VLmFsbG9jPWRpLFUucHJvdG90eXBlLnpiPWRpLFUucHJvdG90eXBlLmFsbG9jPVUucHJvdG90eXBlLnpiLFUucHJvdG90eXBlLkNhPWZ1bmN0aW9uKCl7dGhpcy5hLmNsZWFyKCksdGhpcy5iPXRoaXMuYz0tMSx0aGlzLmg9ITEsdGhpcy52PW51bGwsMTAwPk1uLmxlbmd0aCYmTW4ucHVzaCh0aGlzKX0sVS5wcm90b3R5cGUuZnJlZT1VLnByb3RvdHlwZS5DYSxVLnByb3RvdHlwZS5GYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLk99LFUucHJvdG90eXBlLmdldEZpZWxkQ3Vyc29yPVUucHJvdG90eXBlLkZiLFUucHJvdG90eXBlLkI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLkIoKX0sVS5wcm90b3R5cGUuZ2V0Q3Vyc29yPVUucHJvdG90eXBlLkIsVS5wcm90b3R5cGUuWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuWSgpfSxVLnByb3RvdHlwZS5nZXRCdWZmZXI9VS5wcm90b3R5cGUuWSxVLnByb3RvdHlwZS5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LFUucHJvdG90eXBlLmdldEZpZWxkTnVtYmVyPVUucHJvdG90eXBlLkhiLFUucHJvdG90eXBlLkxiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sVS5wcm90b3R5cGUuZ2V0V2lyZVR5cGU9VS5wcm90b3R5cGUuTGIsVS5wcm90b3R5cGUuTWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iPT0yfSxVLnByb3RvdHlwZS5pc0RlbGltaXRlZD1VLnByb3RvdHlwZS5NYixVLnByb3RvdHlwZS5iYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmI9PTR9LFUucHJvdG90eXBlLmlzRW5kR3JvdXA9VS5wcm90b3R5cGUuYmIsVS5wcm90b3R5cGUuZ2V0RXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ofHx0aGlzLmEuZ2V0RXJyb3IoKX0sVS5wcm90b3R5cGUuZ2V0RXJyb3I9VS5wcm90b3R5cGUuZ2V0RXJyb3IsVS5wcm90b3R5cGUuSD1mdW5jdGlvbih1LGwsaCl7dGhpcy5hLkgodSxsLGgpLHRoaXMuYj10aGlzLmM9LTF9LFUucHJvdG90eXBlLnNldEJsb2NrPVUucHJvdG90eXBlLkgsVS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLmEucmVzZXQoKSx0aGlzLmI9dGhpcy5jPS0xfSxVLnByb3RvdHlwZS5yZXNldD1VLnByb3RvdHlwZS5yZXNldCxVLnByb3RvdHlwZS5hZHZhbmNlPWZ1bmN0aW9uKHUpe3RoaXMuYS5hZHZhbmNlKHUpfSxVLnByb3RvdHlwZS5hZHZhbmNlPVUucHJvdG90eXBlLmFkdmFuY2UsVS5wcm90b3R5cGUub2E9ZnVuY3Rpb24oKXtpZih0aGlzLmEueWEoKSlyZXR1cm4hMTtpZih0aGlzLmdldEVycm9yKCkpcmV0dXJuIEMoIkRlY29kZXIgaGl0IGFuIGVycm9yIiksITE7dGhpcy5PPXRoaXMuYS5CKCk7dmFyIHU9dGhpcy5hLm8oKSxsPXU+Pj4zO3JldHVybiB1Jj03LHUhPTAmJnUhPTUmJnUhPTEmJnUhPTImJnUhPTMmJnUhPTQ/KEMoIkludmFsaWQgd2lyZSB0eXBlOiAlcyAoYXQgcG9zaXRpb24gJXMpIix1LHRoaXMuTyksdGhpcy5oPSEwLCExKToodGhpcy5jPWwsdGhpcy5iPXUsITApfSxVLnByb3RvdHlwZS5uZXh0RmllbGQ9VS5wcm90b3R5cGUub2EsVS5wcm90b3R5cGUuT2E9ZnVuY3Rpb24oKXt0aGlzLmEubWIodGhpcy5jPDwzfHRoaXMuYil9LFUucHJvdG90eXBlLnVuc2tpcEhlYWRlcj1VLnByb3RvdHlwZS5PYSxVLnByb3RvdHlwZS5MYz1mdW5jdGlvbigpe3ZhciB1PXRoaXMuYztmb3IodGhpcy5PYSgpO3RoaXMub2EoKSYmdGhpcy5jPT11Oyl0aGlzLkMoKTt0aGlzLmEueWEoKXx8dGhpcy5PYSgpfSxVLnByb3RvdHlwZS5za2lwTWF0Y2hpbmdGaWVsZHM9VS5wcm90b3R5cGUuTGMsVS5wcm90b3R5cGUubGI9ZnVuY3Rpb24oKXt0aGlzLmIhPTA/KEMoIkludmFsaWQgd2lyZSB0eXBlIGZvciBza2lwVmFyaW50RmllbGQiKSx0aGlzLkMoKSk6dGhpcy5hLmtiKCl9LFUucHJvdG90eXBlLnNraXBWYXJpbnRGaWVsZD1VLnByb3RvdHlwZS5sYixVLnByb3RvdHlwZS5nYj1mdW5jdGlvbigpe2lmKHRoaXMuYiE9MilDKCJJbnZhbGlkIHdpcmUgdHlwZSBmb3Igc2tpcERlbGltaXRlZEZpZWxkIiksdGhpcy5DKCk7ZWxzZXt2YXIgdT10aGlzLmEubygpO3RoaXMuYS5hZHZhbmNlKHUpfX0sVS5wcm90b3R5cGUuc2tpcERlbGltaXRlZEZpZWxkPVUucHJvdG90eXBlLmdiLFUucHJvdG90eXBlLmhiPWZ1bmN0aW9uKCl7dGhpcy5iIT01PyhDKCJJbnZhbGlkIHdpcmUgdHlwZSBmb3Igc2tpcEZpeGVkMzJGaWVsZCIpLHRoaXMuQygpKTp0aGlzLmEuYWR2YW5jZSg0KX0sVS5wcm90b3R5cGUuc2tpcEZpeGVkMzJGaWVsZD1VLnByb3RvdHlwZS5oYixVLnByb3RvdHlwZS5pYj1mdW5jdGlvbigpe3RoaXMuYiE9MT8oQygiSW52YWxpZCB3aXJlIHR5cGUgZm9yIHNraXBGaXhlZDY0RmllbGQiKSx0aGlzLkMoKSk6dGhpcy5hLmFkdmFuY2UoOCl9LFUucHJvdG90eXBlLnNraXBGaXhlZDY0RmllbGQ9VS5wcm90b3R5cGUuaWIsVS5wcm90b3R5cGUuamI9ZnVuY3Rpb24oKXt2YXIgdT10aGlzLmM7ZG97aWYoIXRoaXMub2EoKSl7QygiVW5tYXRjaGVkIHN0YXJ0LWdyb3VwIHRhZzogc3RyZWFtIEVPRiIpLHRoaXMuaD0hMDticmVha31pZih0aGlzLmI9PTQpe3RoaXMuYyE9dSYmKEMoIlVubWF0Y2hlZCBlbmQtZ3JvdXAgdGFnIiksdGhpcy5oPSEwKTticmVha310aGlzLkMoKX13aGlsZSghMCl9LFUucHJvdG90eXBlLnNraXBHcm91cD1VLnByb3RvdHlwZS5qYixVLnByb3RvdHlwZS5DPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuYil7Y2FzZSAwOnRoaXMubGIoKTticmVhaztjYXNlIDE6dGhpcy5pYigpO2JyZWFrO2Nhc2UgMjp0aGlzLmdiKCk7YnJlYWs7Y2FzZSA1OnRoaXMuaGIoKTticmVhaztjYXNlIDM6dGhpcy5qYigpO2JyZWFrO2RlZmF1bHQ6QygiSW52YWxpZCB3aXJlIGVuY29kaW5nIGZvciBmaWVsZC4iKX19LFUucHJvdG90eXBlLnNraXBGaWVsZD1VLnByb3RvdHlwZS5DLFUucHJvdG90eXBlLkhjPWZ1bmN0aW9uKHUsbCl7dGhpcy52PT09bnVsbCYmKHRoaXMudj17fSksSSghdGhpcy52W3VdKSx0aGlzLnZbdV09bH0sVS5wcm90b3R5cGUucmVnaXN0ZXJSZWFkQ2FsbGJhY2s9VS5wcm90b3R5cGUuSGMsVS5wcm90b3R5cGUuSWM9ZnVuY3Rpb24odSl7cmV0dXJuIEkodGhpcy52IT09bnVsbCksdT10aGlzLnZbdV0sSSh1KSx1KHRoaXMpfSxVLnByb3RvdHlwZS5ydW5SZWFkQ2FsbGJhY2s9VS5wcm90b3R5cGUuSWMsVS5wcm90b3R5cGUuWWI9ZnVuY3Rpb24odSxsKXtJKHRoaXMuYj09Mik7dmFyIGg9dGhpcy5hLmMsUD10aGlzLmEubygpO1A9dGhpcy5hLkIoKStQLHRoaXMuYS5zZXRFbmQoUCksbCh1LHRoaXMpLHRoaXMuYS5NYShQKSx0aGlzLmEuc2V0RW5kKGgpfSxVLnByb3RvdHlwZS5yZWFkTWVzc2FnZT1VLnByb3RvdHlwZS5ZYixVLnByb3RvdHlwZS5VYj1mdW5jdGlvbih1LGwsaCl7SSh0aGlzLmI9PTMpLEkodGhpcy5jPT11KSxoKGwsdGhpcyksdGhpcy5ofHx0aGlzLmI9PTR8fChDKCJHcm91cCBzdWJtZXNzYWdlIGRpZCBub3QgZW5kIHdpdGggYW4gRU5EX0dST1VQIHRhZyIpLHRoaXMuaD0hMCl9LFUucHJvdG90eXBlLnJlYWRHcm91cD1VLnByb3RvdHlwZS5VYixVLnByb3RvdHlwZS5HYj1mdW5jdGlvbigpe0kodGhpcy5iPT0yKTt2YXIgdT10aGlzLmEubygpLGw9dGhpcy5hLkIoKSxoPWwrdTtyZXR1cm4gdT1Ucih0aGlzLmEuWSgpLGwsdSksdGhpcy5hLk1hKGgpLHV9LFUucHJvdG90eXBlLmdldEZpZWxkRGVjb2Rlcj1VLnByb3RvdHlwZS5HYixVLnByb3RvdHlwZS5QPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5iPT0wKSx0aGlzLmEuZGEoKX0sVS5wcm90b3R5cGUucmVhZEludDMyPVUucHJvdG90eXBlLlAsVS5wcm90b3R5cGUuV2I9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLmI9PTApLHRoaXMuYS5FYSgpfSxVLnByb3RvdHlwZS5yZWFkSW50MzJTdHJpbmc9VS5wcm90b3R5cGUuV2IsVS5wcm90b3R5cGUuYmE9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLmI9PTApLHRoaXMuYS5zYSgpfSxVLnByb3RvdHlwZS5yZWFkSW50NjQ9VS5wcm90b3R5cGUuYmEsVS5wcm90b3R5cGUuY2E9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLmI9PTApLHRoaXMuYS5GYSgpfSxVLnByb3RvdHlwZS5yZWFkSW50NjRTdHJpbmc9VS5wcm90b3R5cGUuY2EsVS5wcm90b3R5cGUubT1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMuYj09MCksdGhpcy5hLm8oKX0sVS5wcm90b3R5cGUucmVhZFVpbnQzMj1VLnByb3RvdHlwZS5tLFUucHJvdG90eXBlLkZjPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5iPT0wKSx0aGlzLmEuTygpfSxVLnByb3RvdHlwZS5yZWFkVWludDMyU3RyaW5nPVUucHJvdG90eXBlLkZjLFUucHJvdG90eXBlLmdhPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5iPT0wKSx0aGlzLmEuR2EoKX0sVS5wcm90b3R5cGUucmVhZFVpbnQ2ND1VLnByb3RvdHlwZS5nYSxVLnByb3RvdHlwZS5oYT1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMuYj09MCksdGhpcy5hLkhhKCl9LFUucHJvdG90eXBlLnJlYWRVaW50NjRTdHJpbmc9VS5wcm90b3R5cGUuaGEsVS5wcm90b3R5cGUuemM9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLmI9PTApLHRoaXMuYS5JYSgpfSxVLnByb3RvdHlwZS5yZWFkU2ludDMyPVUucHJvdG90eXBlLnpjLFUucHJvdG90eXBlLkFjPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5iPT0wKSx0aGlzLmEuSmEoKX0sVS5wcm90b3R5cGUucmVhZFNpbnQ2ND1VLnByb3RvdHlwZS5BYyxVLnByb3RvdHlwZS5CYz1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMuYj09MCksdGhpcy5hLkthKCl9LFUucHJvdG90eXBlLnJlYWRTaW50NjRTdHJpbmc9VS5wcm90b3R5cGUuQmMsVS5wcm90b3R5cGUuUmI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLmI9PTUpLHRoaXMuYS5tKCl9LFUucHJvdG90eXBlLnJlYWRGaXhlZDMyPVUucHJvdG90eXBlLlJiLFUucHJvdG90eXBlLlNiPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5iPT0xKSx0aGlzLmEuZ2EoKX0sVS5wcm90b3R5cGUucmVhZEZpeGVkNjQ9VS5wcm90b3R5cGUuU2IsVS5wcm90b3R5cGUuVGI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLmI9PTEpLHRoaXMuYS5oYSgpfSxVLnByb3RvdHlwZS5yZWFkRml4ZWQ2NFN0cmluZz1VLnByb3RvdHlwZS5UYixVLnByb3RvdHlwZS52Yz1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMuYj09NSksdGhpcy5hLlAoKX0sVS5wcm90b3R5cGUucmVhZFNmaXhlZDMyPVUucHJvdG90eXBlLnZjLFUucHJvdG90eXBlLndjPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5iPT01KSx0aGlzLmEuUCgpLnRvU3RyaW5nKCl9LFUucHJvdG90eXBlLnJlYWRTZml4ZWQzMlN0cmluZz1VLnByb3RvdHlwZS53YyxVLnByb3RvdHlwZS54Yz1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMuYj09MSksdGhpcy5hLmJhKCl9LFUucHJvdG90eXBlLnJlYWRTZml4ZWQ2ND1VLnByb3RvdHlwZS54YyxVLnByb3RvdHlwZS55Yz1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMuYj09MSksdGhpcy5hLmNhKCl9LFUucHJvdG90eXBlLnJlYWRTZml4ZWQ2NFN0cmluZz1VLnByb3RvdHlwZS55YyxVLnByb3RvdHlwZS5hYT1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMuYj09NSksdGhpcy5hLmFhKCl9LFUucHJvdG90eXBlLnJlYWRGbG9hdD1VLnByb3RvdHlwZS5hYSxVLnByb3RvdHlwZS5aPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5iPT0xKSx0aGlzLmEuWigpfSxVLnByb3RvdHlwZS5yZWFkRG91YmxlPVUucHJvdG90eXBlLlosVS5wcm90b3R5cGUucGE9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLmI9PTApLCEhdGhpcy5hLm8oKX0sVS5wcm90b3R5cGUucmVhZEJvb2w9VS5wcm90b3R5cGUucGEsVS5wcm90b3R5cGUucmE9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLmI9PTApLHRoaXMuYS5zYSgpfSxVLnByb3RvdHlwZS5yZWFkRW51bT1VLnByb3RvdHlwZS5yYSxVLnByb3RvdHlwZS5mYT1mdW5jdGlvbigpe0kodGhpcy5iPT0yKTt2YXIgdT10aGlzLmEubygpO3JldHVybiB0aGlzLmEuZmEodSl9LFUucHJvdG90eXBlLnJlYWRTdHJpbmc9VS5wcm90b3R5cGUuZmEsVS5wcm90b3R5cGUucWE9ZnVuY3Rpb24oKXtJKHRoaXMuYj09Mik7dmFyIHU9dGhpcy5hLm8oKTtyZXR1cm4gdGhpcy5hLnFhKHUpfSxVLnByb3RvdHlwZS5yZWFkQnl0ZXM9VS5wcm90b3R5cGUucWEsVS5wcm90b3R5cGUuaWE9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLmI9PTApLHRoaXMuYS5pYSgpfSxVLnByb3RvdHlwZS5yZWFkVmFyaW50SGFzaDY0PVUucHJvdG90eXBlLmlhLFUucHJvdG90eXBlLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5iPT0wKSx0aGlzLmEuZmIoKX0sVS5wcm90b3R5cGUucmVhZFNpbnRIYXNoNjQ9VS5wcm90b3R5cGUuQ2MsVS5wcm90b3R5cGUudz1mdW5jdGlvbih1KXtyZXR1cm4gSSh0aGlzLmI9PTApLHRoaXMuYS53KHUpfSxVLnByb3RvdHlwZS5yZWFkU3BsaXRWYXJpbnQ2ND1VLnByb3RvdHlwZS53LFUucHJvdG90eXBlLmVhPWZ1bmN0aW9uKHUpe3JldHVybiBJKHRoaXMuYj09MCksdGhpcy5hLncoZnVuY3Rpb24obCxoKXtyZXR1cm4gWChsLGgsdSl9KX0sVS5wcm90b3R5cGUucmVhZFNwbGl0WmlnemFnVmFyaW50NjQ9VS5wcm90b3R5cGUuZWEsVS5wcm90b3R5cGUuJD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMuYj09MSksdGhpcy5hLiQoKX0sVS5wcm90b3R5cGUucmVhZEZpeGVkSGFzaDY0PVUucHJvdG90eXBlLiQsVS5wcm90b3R5cGUudGE9ZnVuY3Rpb24odSl7cmV0dXJuIEkodGhpcy5iPT0xKSx0aGlzLmEudGEodSl9LFUucHJvdG90eXBlLnJlYWRTcGxpdEZpeGVkNjQ9VS5wcm90b3R5cGUudGE7ZnVuY3Rpb24gb3QodSxsKXtJKHUuYj09Mik7dmFyIGg9dS5hLm8oKTtoPXUuYS5CKCkraDtmb3IodmFyIFA9W107dS5hLkIoKTxoOylQLnB1c2gobC5jYWxsKHUuYSkpO3JldHVybiBQfVUucHJvdG90eXBlLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIG90KHRoaXMsdGhpcy5hLmRhKX0sVS5wcm90b3R5cGUucmVhZFBhY2tlZEludDMyPVUucHJvdG90eXBlLmdjLFUucHJvdG90eXBlLmhjPWZ1bmN0aW9uKCl7cmV0dXJuIG90KHRoaXMsdGhpcy5hLkVhKX0sVS5wcm90b3R5cGUucmVhZFBhY2tlZEludDMyU3RyaW5nPVUucHJvdG90eXBlLmhjLFUucHJvdG90eXBlLmljPWZ1bmN0aW9uKCl7cmV0dXJuIG90KHRoaXMsdGhpcy5hLnNhKX0sVS5wcm90b3R5cGUucmVhZFBhY2tlZEludDY0PVUucHJvdG90eXBlLmljLFUucHJvdG90eXBlLmpjPWZ1bmN0aW9uKCl7cmV0dXJuIG90KHRoaXMsdGhpcy5hLkZhKX0sVS5wcm90b3R5cGUucmVhZFBhY2tlZEludDY0U3RyaW5nPVUucHJvdG90eXBlLmpjLFUucHJvdG90eXBlLnFjPWZ1bmN0aW9uKCl7cmV0dXJuIG90KHRoaXMsdGhpcy5hLm8pfSxVLnByb3RvdHlwZS5yZWFkUGFja2VkVWludDMyPVUucHJvdG90eXBlLnFjLFUucHJvdG90eXBlLnJjPWZ1bmN0aW9uKCl7cmV0dXJuIG90KHRoaXMsdGhpcy5hLk8pfSxVLnByb3RvdHlwZS5yZWFkUGFja2VkVWludDMyU3RyaW5nPVUucHJvdG90eXBlLnJjLFUucHJvdG90eXBlLnNjPWZ1bmN0aW9uKCl7cmV0dXJuIG90KHRoaXMsdGhpcy5hLkdhKX0sVS5wcm90b3R5cGUucmVhZFBhY2tlZFVpbnQ2ND1VLnByb3RvdHlwZS5zYyxVLnByb3RvdHlwZS50Yz1mdW5jdGlvbigpe3JldHVybiBvdCh0aGlzLHRoaXMuYS5IYSl9LFUucHJvdG90eXBlLnJlYWRQYWNrZWRVaW50NjRTdHJpbmc9VS5wcm90b3R5cGUudGMsVS5wcm90b3R5cGUubmM9ZnVuY3Rpb24oKXtyZXR1cm4gb3QodGhpcyx0aGlzLmEuSWEpfSxVLnByb3RvdHlwZS5yZWFkUGFja2VkU2ludDMyPVUucHJvdG90eXBlLm5jLFUucHJvdG90eXBlLm9jPWZ1bmN0aW9uKCl7cmV0dXJuIG90KHRoaXMsdGhpcy5hLkphKX0sVS5wcm90b3R5cGUucmVhZFBhY2tlZFNpbnQ2ND1VLnByb3RvdHlwZS5vYyxVLnByb3RvdHlwZS5wYz1mdW5jdGlvbigpe3JldHVybiBvdCh0aGlzLHRoaXMuYS5LYSl9LFUucHJvdG90eXBlLnJlYWRQYWNrZWRTaW50NjRTdHJpbmc9VS5wcm90b3R5cGUucGMsVS5wcm90b3R5cGUuYmM9ZnVuY3Rpb24oKXtyZXR1cm4gb3QodGhpcyx0aGlzLmEubSl9LFUucHJvdG90eXBlLnJlYWRQYWNrZWRGaXhlZDMyPVUucHJvdG90eXBlLmJjLFUucHJvdG90eXBlLmNjPWZ1bmN0aW9uKCl7cmV0dXJuIG90KHRoaXMsdGhpcy5hLmdhKX0sVS5wcm90b3R5cGUucmVhZFBhY2tlZEZpeGVkNjQ9VS5wcm90b3R5cGUuY2MsVS5wcm90b3R5cGUuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gb3QodGhpcyx0aGlzLmEuaGEpfSxVLnByb3RvdHlwZS5yZWFkUGFja2VkRml4ZWQ2NFN0cmluZz1VLnByb3RvdHlwZS5kYyxVLnByb3RvdHlwZS5rYz1mdW5jdGlvbigpe3JldHVybiBvdCh0aGlzLHRoaXMuYS5QKX0sVS5wcm90b3R5cGUucmVhZFBhY2tlZFNmaXhlZDMyPVUucHJvdG90eXBlLmtjLFUucHJvdG90eXBlLmxjPWZ1bmN0aW9uKCl7cmV0dXJuIG90KHRoaXMsdGhpcy5hLmJhKX0sVS5wcm90b3R5cGUucmVhZFBhY2tlZFNmaXhlZDY0PVUucHJvdG90eXBlLmxjLFUucHJvdG90eXBlLm1jPWZ1bmN0aW9uKCl7cmV0dXJuIG90KHRoaXMsdGhpcy5hLmNhKX0sVS5wcm90b3R5cGUucmVhZFBhY2tlZFNmaXhlZDY0U3RyaW5nPVUucHJvdG90eXBlLm1jLFUucHJvdG90eXBlLmZjPWZ1bmN0aW9uKCl7cmV0dXJuIG90KHRoaXMsdGhpcy5hLmFhKX0sVS5wcm90b3R5cGUucmVhZFBhY2tlZEZsb2F0PVUucHJvdG90eXBlLmZjLFUucHJvdG90eXBlLiRiPWZ1bmN0aW9uKCl7cmV0dXJuIG90KHRoaXMsdGhpcy5hLlopfSxVLnByb3RvdHlwZS5yZWFkUGFja2VkRG91YmxlPVUucHJvdG90eXBlLiRiLFUucHJvdG90eXBlLlpiPWZ1bmN0aW9uKCl7cmV0dXJuIG90KHRoaXMsdGhpcy5hLnBhKX0sVS5wcm90b3R5cGUucmVhZFBhY2tlZEJvb2w9VS5wcm90b3R5cGUuWmIsVS5wcm90b3R5cGUuYWM9ZnVuY3Rpb24oKXtyZXR1cm4gb3QodGhpcyx0aGlzLmEucmEpfSxVLnByb3RvdHlwZS5yZWFkUGFja2VkRW51bT1VLnByb3RvdHlwZS5hYyxVLnByb3RvdHlwZS51Yz1mdW5jdGlvbigpe3JldHVybiBvdCh0aGlzLHRoaXMuYS5pYSl9LFUucHJvdG90eXBlLnJlYWRQYWNrZWRWYXJpbnRIYXNoNjQ9VS5wcm90b3R5cGUudWMsVS5wcm90b3R5cGUuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gb3QodGhpcyx0aGlzLmEuJCl9LFUucHJvdG90eXBlLnJlYWRQYWNrZWRGaXhlZEhhc2g2ND1VLnByb3RvdHlwZS5lYztmdW5jdGlvbiBzbyh1LGwsaCxQLE4pe3RoaXMubWE9dSx0aGlzLkJhPWwsdGhpcy5sYT1oLHRoaXMuTmE9UCx0aGlzLm5hPU59YigianNwYi5FeHRlbnNpb25GaWVsZEluZm8iLHNvLHZvaWQgMCk7ZnVuY3Rpb24gcGkodSxsLGgsUCxOLEspe3RoaXMuWmE9dSx0aGlzLnphPWwsdGhpcy5BYT1oLHRoaXMuV2E9UCx0aGlzLkFiPU4sdGhpcy5OYj1LfWIoImpzcGIuRXh0ZW5zaW9uRmllbGRCaW5hcnlJbmZvIixwaSx2b2lkIDApLHNvLnByb3RvdHlwZS5GPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmxhfSxzby5wcm90b3R5cGUuaXNNZXNzYWdlVHlwZT1zby5wcm90b3R5cGUuRjtmdW5jdGlvbiBoZSgpe31iKCJqc3BiLk1lc3NhZ2UiLGhlLHZvaWQgMCksaGUuR0VORVJBVEVfVE9fT0JKRUNUPSEwLGhlLkdFTkVSQVRFX0ZST01fT0JKRUNUPSEwO3ZhciBWbz10eXBlb2YgVWludDhBcnJheT09ImZ1bmN0aW9uIjtoZS5wcm90b3R5cGUuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoZS5wcm90b3R5cGUuZ2V0SnNQYk1lc3NhZ2VJZD1oZS5wcm90b3R5cGUuSWIsaGUuaW5pdGlhbGl6ZT1mdW5jdGlvbih1LGwsaCxQLE4sSyl7dS5mPW51bGwsbHx8KGw9aD9baF06W10pLHUuYj1oP1N0cmluZyhoKTp2b2lkIDAsdS5EPWg9PT0wPy0xOjAsdS51PWw7ZTp7aWYoaD11LnUubGVuZ3RoLGw9LTEsaCYmKGw9aC0xLGg9dS51W2xdLCEoaD09PW51bGx8fHR5cGVvZiBoIT0ib2JqZWN0Inx8QXJyYXkuaXNBcnJheShoKXx8Vm8mJmggaW5zdGFuY2VvZiBVaW50OEFycmF5KSkpe3UuRz1sLXUuRCx1Lmk9aDticmVhayBlfS0xPFA/KHUuRz1NYXRoLm1heChQLGwrMS11LkQpLHUuaT1udWxsKTp1Lkc9TnVtYmVyLk1BWF9WQUxVRX1pZih1LmE9e30sTilmb3IoUD0wO1A8Ti5sZW5ndGg7UCsrKWw9TltQXSxsPHUuRz8obCs9dS5ELHUudVtsXT11LnVbbF18fGFvKTooR28odSksdS5pW2xdPXUuaVtsXXx8YW8pO2lmKEsmJksubGVuZ3RoKWZvcihQPTA7UDxLLmxlbmd0aDtQKyspY2EodSxLW1BdKX07dmFyIGFvPU9iamVjdC5mcmVlemU/T2JqZWN0LmZyZWV6ZShbXSk6W107ZnVuY3Rpb24gR28odSl7dmFyIGw9dS5HK3UuRDt1LnVbbF18fCh1Lmk9dS51W2xdPXt9KX1mdW5jdGlvbiBoaSh1LGwsaCl7Zm9yKHZhciBQPVtdLE49MDtOPHUubGVuZ3RoO04rKylQW05dPWwuY2FsbCh1W05dLGgsdVtOXSk7cmV0dXJuIFB9aGUudG9PYmplY3RMaXN0PWhpLGhlLnRvT2JqZWN0RXh0ZW5zaW9uPWZ1bmN0aW9uKHUsbCxoLFAsTil7Zm9yKHZhciBLIGluIGgpe3ZhciByZT1oW0tdLHdlPVAuY2FsbCh1LHJlKTtpZih3ZSE9bnVsbCl7Zm9yKHZhciBwdCBpbiByZS5CYSlpZihyZS5CYS5oYXNPd25Qcm9wZXJ0eShwdCkpYnJlYWs7bFtwdF09cmUuTmE/cmUubmE/aGkod2UscmUuTmEsTik6cmUuTmEoTix3ZSk6d2V9fX0saGUuc2VyaWFsaXplQmluYXJ5RXh0ZW5zaW9ucz1mdW5jdGlvbih1LGwsaCxQKXtmb3IodmFyIE4gaW4gaCl7dmFyIEs9aFtOXSxyZT1LLlphO2lmKCFLLkFhKXRocm93IEVycm9yKCJNZXNzYWdlIGV4dGVuc2lvbiBwcmVzZW50IHRoYXQgd2FzIGdlbmVyYXRlZCB3aXRob3V0IGJpbmFyeSBzZXJpYWxpemF0aW9uIHN1cHBvcnQiKTt2YXIgd2U9UC5jYWxsKHUscmUpO2lmKHdlIT1udWxsKWlmKHJlLkYoKSlpZihLLldhKUsuQWEuY2FsbChsLHJlLm1hLHdlLEsuV2EpO2Vsc2UgdGhyb3cgRXJyb3IoIk1lc3NhZ2UgZXh0ZW5zaW9uIHByZXNlbnQgaG9sZGluZyBzdWJtZXNzYWdlIHdpdGhvdXQgYmluYXJ5IHN1cHBvcnQgZW5hYmxlZCwgYW5kIG1lc3NhZ2UgaXMgYmVpbmcgc2VyaWFsaXplZCB0byBiaW5hcnkgZm9ybWF0Iik7ZWxzZSBLLkFhLmNhbGwobCxyZS5tYSx3ZSl9fSxoZS5yZWFkQmluYXJ5RXh0ZW5zaW9uPWZ1bmN0aW9uKHUsbCxoLFAsTil7dmFyIEs9aFtsLmNdO2lmKEspe2lmKGg9Sy5aYSwhSy56YSl0aHJvdyBFcnJvcigiRGVzZXJpYWxpemluZyBleHRlbnNpb24gd2hvc2UgZ2VuZXJhdGVkIGNvZGUgZG9lcyBub3Qgc3VwcG9ydCBiaW5hcnkgZm9ybWF0Iik7aWYoaC5GKCkpe3ZhciByZT1uZXcgaC5sYTtLLnphLmNhbGwobCxyZSxLLkFiKX1lbHNlIHJlPUsuemEuY2FsbChsKTtoLm5hJiYhSy5OYj8obD1QLmNhbGwodSxoKSk/bC5wdXNoKHJlKTpOLmNhbGwodSxoLFtyZV0pOk4uY2FsbCh1LGgscmUpfWVsc2UgbC5DKCl9O2Z1bmN0aW9uIER0KHUsbCl7aWYobDx1Lkcpe2wrPXUuRDt2YXIgaD11LnVbbF07cmV0dXJuIGg9PT1hbz91LnVbbF09W106aH1pZih1LmkpcmV0dXJuIGg9dS5pW2xdLGg9PT1hbz91LmlbbF09W106aH1oZS5nZXRGaWVsZD1EdCxoZS5nZXRSZXBlYXRlZEZpZWxkPWZ1bmN0aW9uKHUsbCl7cmV0dXJuIER0KHUsbCl9O2Z1bmN0aW9uIGdpKHUsbCl7cmV0dXJuIHU9RHQodSxsKSx1PT1udWxsP3U6K3V9aGUuZ2V0T3B0aW9uYWxGbG9hdGluZ1BvaW50RmllbGQ9Z2k7ZnVuY3Rpb24gYmkodSxsKXtyZXR1cm4gdT1EdCh1LGwpLHU9PW51bGw/dTohIXV9aGUuZ2V0Qm9vbGVhbkZpZWxkPWJpLGhlLmdldFJlcGVhdGVkRmxvYXRpbmdQb2ludEZpZWxkPWZ1bmN0aW9uKHUsbCl7dmFyIGg9RHQodSxsKTtpZih1LmF8fCh1LmE9e30pLCF1LmFbbF0pe2Zvcih2YXIgUD0wO1A8aC5sZW5ndGg7UCsrKWhbUF09K2hbUF07dS5hW2xdPSEwfXJldHVybiBofSxoZS5nZXRSZXBlYXRlZEJvb2xlYW5GaWVsZD1mdW5jdGlvbih1LGwpe3ZhciBoPUR0KHUsbCk7aWYodS5hfHwodS5hPXt9KSwhdS5hW2xdKXtmb3IodmFyIFA9MDtQPGgubGVuZ3RoO1ArKyloW1BdPSEhaFtQXTt1LmFbbF09ITB9cmV0dXJuIGh9O2Z1bmN0aW9uIHlpKHUpe3JldHVybiB1PT1udWxsfHx0eXBlb2YgdT09InN0cmluZyI/dTpWbyYmdSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk/Z2UodSk6KEMoIkNhbm5vdCBjb2VyY2UgdG8gYjY0IHN0cmluZzogIitUKHUpKSxudWxsKX1oZS5ieXRlc0FzQjY0PXlpO2Z1bmN0aW9uIHhpKHUpe3JldHVybiB1PT1udWxsfHx1IGluc3RhbmNlb2YgVWludDhBcnJheT91OnR5cGVvZiB1PT0ic3RyaW5nIj9UZSh1KTooQygiQ2Fubm90IGNvZXJjZSB0byBVaW50OEFycmF5OiAiK1QodSkpLG51bGwpfWhlLmJ5dGVzQXNVOD14aSxoZS5ieXRlc0xpc3RBc0I2ND1mdW5jdGlvbih1KXtyZXR1cm4gVGkodSksdS5sZW5ndGgmJnR5cGVvZiB1WzBdIT0ic3RyaW5nIj9rKHUseWkpOnV9LGhlLmJ5dGVzTGlzdEFzVTg9ZnVuY3Rpb24odSl7cmV0dXJuIFRpKHUpLCF1Lmxlbmd0aHx8dVswXWluc3RhbmNlb2YgVWludDhBcnJheT91OmsodSx4aSl9O2Z1bmN0aW9uIFRpKHUpe2lmKHUmJjE8dS5sZW5ndGgpe3ZhciBsPVQodVswXSk7Qih1LGZ1bmN0aW9uKGgpe1QoaCkhPWwmJkMoIkluY29uc2lzdGVudCB0eXBlIGluIEpTUEIgcmVwZWF0ZWQgZmllbGQgYXJyYXkuIEdvdCAiK1QoaCkrIiBleHBlY3RlZCAiK2wpfSl9fWZ1bmN0aW9uIEFpKHUsbCxoKXtyZXR1cm4gdT1EdCh1LGwpLHU/P2h9aGUuZ2V0RmllbGRXaXRoRGVmYXVsdD1BaSxoZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdD1mdW5jdGlvbih1LGwsaCl7cmV0dXJuIHU9YmkodSxsKSx1Pz9ofSxoZS5nZXRGbG9hdGluZ1BvaW50RmllbGRXaXRoRGVmYXVsdD1mdW5jdGlvbih1LGwsaCl7cmV0dXJuIHU9Z2kodSxsKSx1Pz9ofSxoZS5nZXRGaWVsZFByb3RvMz1BaSxoZS5nZXRNYXBGaWVsZD1mdW5jdGlvbih1LGwsaCxQKXtpZih1LmZ8fCh1LmY9e30pLGwgaW4gdS5mKXJldHVybiB1LmZbbF07dmFyIE49RHQodSxsKTtpZighTil7aWYoaClyZXR1cm47Tj1bXSxrcih1LGwsTil9cmV0dXJuIHUuZltsXT1uZXcgTyhOLFApfTtmdW5jdGlvbiBrcih1LGwsaCl7cmV0dXJuIEYodSxoZSksbDx1Lkc/dS51W2wrdS5EXT1oOihHbyh1KSx1LmlbbF09aCksdX1oZS5zZXRGaWVsZD1rcixoZS5zZXRQcm90bzNJbnRGaWVsZD1mdW5jdGlvbih1LGwsaCl7cmV0dXJuIGduKHUsbCxoLDApfSxoZS5zZXRQcm90bzNGbG9hdEZpZWxkPWZ1bmN0aW9uKHUsbCxoKXtyZXR1cm4gZ24odSxsLGgsMCl9LGhlLnNldFByb3RvM0Jvb2xlYW5GaWVsZD1mdW5jdGlvbih1LGwsaCl7cmV0dXJuIGduKHUsbCxoLCExKX0saGUuc2V0UHJvdG8zU3RyaW5nRmllbGQ9ZnVuY3Rpb24odSxsLGgpe3JldHVybiBnbih1LGwsaCwiIil9LGhlLnNldFByb3RvM0J5dGVzRmllbGQ9ZnVuY3Rpb24odSxsLGgpe3JldHVybiBnbih1LGwsaCwiIil9LGhlLnNldFByb3RvM0VudW1GaWVsZD1mdW5jdGlvbih1LGwsaCl7cmV0dXJuIGduKHUsbCxoLDApfSxoZS5zZXRQcm90bzNTdHJpbmdJbnRGaWVsZD1mdW5jdGlvbih1LGwsaCl7cmV0dXJuIGduKHUsbCxoLCIwIil9O2Z1bmN0aW9uIGduKHUsbCxoLFApe3JldHVybiBGKHUsaGUpLGghPT1QP2tyKHUsbCxoKTpsPHUuRz91LnVbbCt1LkRdPW51bGw6KEdvKHUpLGRlbGV0ZSB1LmlbbF0pLHV9aGUuYWRkVG9SZXBlYXRlZEZpZWxkPWZ1bmN0aW9uKHUsbCxoLFApe3JldHVybiBGKHUsaGUpLGw9RHQodSxsKSxQIT1udWxsP2wuc3BsaWNlKFAsMCxoKTpsLnB1c2goaCksdX07ZnVuY3Rpb24gaWEodSxsLGgsUCl7cmV0dXJuIEYodSxoZSksKGg9Y2EodSxoKSkmJmghPT1sJiZQIT09dm9pZCAwJiYodS5mJiZoIGluIHUuZiYmKHUuZltoXT12b2lkIDApLGtyKHUsaCx2b2lkIDApKSxrcih1LGwsUCl9aGUuc2V0T25lb2ZGaWVsZD1pYTtmdW5jdGlvbiBjYSh1LGwpe2Zvcih2YXIgaCxQLE49MDtOPGwubGVuZ3RoO04rKyl7dmFyIEs9bFtOXSxyZT1EdCh1LEspO3JlIT1udWxsJiYoaD1LLFA9cmUsa3IodSxLLHZvaWQgMCkpfXJldHVybiBoPyhrcih1LGgsUCksaCk6MH1oZS5jb21wdXRlT25lb2ZDYXNlPWNhLGhlLmdldFdyYXBwZXJGaWVsZD1mdW5jdGlvbih1LGwsaCxQKXtpZih1LmZ8fCh1LmY9e30pLCF1LmZbaF0pe3ZhciBOPUR0KHUsaCk7KFB8fE4pJiYodS5mW2hdPW5ldyBsKE4pKX1yZXR1cm4gdS5mW2hdfSxoZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZD1mdW5jdGlvbih1LGwsaCl7cmV0dXJuIG1pKHUsbCxoKSxsPXUuZltoXSxsPT1hbyYmKGw9dS5mW2hdPVtdKSxsfTtmdW5jdGlvbiBtaSh1LGwsaCl7aWYodS5mfHwodS5mPXt9KSwhdS5mW2hdKXtmb3IodmFyIFA9RHQodSxoKSxOPVtdLEs9MDtLPFAubGVuZ3RoO0srKylOW0tdPW5ldyBsKFBbS10pO3UuZltoXT1OfX1oZS5zZXRXcmFwcGVyRmllbGQ9ZnVuY3Rpb24odSxsLGgpe0YodSxoZSksdS5mfHwodS5mPXt9KTt2YXIgUD1oJiZoLmcoKTtyZXR1cm4gdS5mW2xdPWgsa3IodSxsLFApfSxoZS5zZXRPbmVvZldyYXBwZXJGaWVsZD1mdW5jdGlvbih1LGwsaCxQKXtGKHUsaGUpLHUuZnx8KHUuZj17fSk7dmFyIE49UCYmUC5nKCk7cmV0dXJuIHUuZltsXT1QLGlhKHUsbCxoLE4pfSxoZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZD1mdW5jdGlvbih1LGwsaCl7Rih1LGhlKSx1LmZ8fCh1LmY9e30pLGg9aHx8W107Zm9yKHZhciBQPVtdLE49MDtOPGgubGVuZ3RoO04rKylQW05dPWhbTl0uZygpO3JldHVybiB1LmZbbF09aCxrcih1LGwsUCl9LGhlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQ9ZnVuY3Rpb24odSxsLGgsUCxOKXttaSh1LFAsbCk7dmFyIEs9dS5mW2xdO3JldHVybiBLfHwoSz11LmZbbF09W10pLGg9aHx8bmV3IFAsdT1EdCh1LGwpLE4hPW51bGw/KEsuc3BsaWNlKE4sMCxoKSx1LnNwbGljZShOLDAsaC5nKCkpKTooSy5wdXNoKGgpLHUucHVzaChoLmcoKSkpLGh9LGhlLnRvTWFwPWZ1bmN0aW9uKHUsbCxoLFApe2Zvcih2YXIgTj17fSxLPTA7Szx1Lmxlbmd0aDtLKyspTltsLmNhbGwodVtLXSldPWg/aC5jYWxsKHVbS10sUCx1W0tdKTp1W0tdO3JldHVybiBOfTtmdW5jdGlvbiBQaSh1KXtpZih1LmYpZm9yKHZhciBsIGluIHUuZil7dmFyIGg9dS5mW2xdO2lmKEFycmF5LmlzQXJyYXkoaCkpZm9yKHZhciBQPTA7UDxoLmxlbmd0aDtQKyspaFtQXSYmaFtQXS5nKCk7ZWxzZSBoJiZoLmcoKX19aGUucHJvdG90eXBlLmc9ZnVuY3Rpb24oKXtyZXR1cm4gUGkodGhpcyksdGhpcy51fSxoZS5wcm90b3R5cGUudG9BcnJheT1oZS5wcm90b3R5cGUuZyxoZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gUGkodGhpcyksdGhpcy51LnRvU3RyaW5nKCl9LGhlLnByb3RvdHlwZS5nZXRFeHRlbnNpb249ZnVuY3Rpb24odSl7aWYodGhpcy5pKXt0aGlzLmZ8fCh0aGlzLmY9e30pO3ZhciBsPXUubWE7aWYodS5uYSl7aWYodS5GKCkpcmV0dXJuIHRoaXMuZltsXXx8KHRoaXMuZltsXT1rKHRoaXMuaVtsXXx8W10sZnVuY3Rpb24oaCl7cmV0dXJuIG5ldyB1LmxhKGgpfSkpLHRoaXMuZltsXX1lbHNlIGlmKHUuRigpKXJldHVybiF0aGlzLmZbbF0mJnRoaXMuaVtsXSYmKHRoaXMuZltsXT1uZXcgdS5sYSh0aGlzLmlbbF0pKSx0aGlzLmZbbF07cmV0dXJuIHRoaXMuaVtsXX19LGhlLnByb3RvdHlwZS5nZXRFeHRlbnNpb249aGUucHJvdG90eXBlLmdldEV4dGVuc2lvbixoZS5wcm90b3R5cGUuS2M9ZnVuY3Rpb24odSxsKXt0aGlzLmZ8fCh0aGlzLmY9e30pLEdvKHRoaXMpO3ZhciBoPXUubWE7cmV0dXJuIHUubmE/KGw9bHx8W10sdS5GKCk/KHRoaXMuZltoXT1sLHRoaXMuaVtoXT1rKGwsZnVuY3Rpb24oUCl7cmV0dXJuIFAuZygpfSkpOnRoaXMuaVtoXT1sKTp1LkYoKT8odGhpcy5mW2hdPWwsdGhpcy5pW2hdPWwmJmwuZygpKTp0aGlzLmlbaF09bCx0aGlzfSxoZS5wcm90b3R5cGUuc2V0RXh0ZW5zaW9uPWhlLnByb3RvdHlwZS5LYyxoZS5kaWZmZXJlbmNlPWZ1bmN0aW9uKHUsbCl7aWYoISh1IGluc3RhbmNlb2YgbC5jb25zdHJ1Y3RvcikpdGhyb3cgRXJyb3IoIk1lc3NhZ2VzIGhhdmUgZGlmZmVyZW50IHR5cGVzLiIpO3ZhciBoPXUuZygpO2w9bC5nKCk7dmFyIFA9W10sTj0wLEs9aC5sZW5ndGg+bC5sZW5ndGg/aC5sZW5ndGg6bC5sZW5ndGg7Zm9yKHUuYiYmKFBbMF09dS5iLE49MSk7TjxLO04rKylpbyhoW05dLGxbTl0pfHwoUFtOXT1sW05dKTtyZXR1cm4gbmV3IHUuY29uc3RydWN0b3IoUCl9LGhlLmVxdWFscz1mdW5jdGlvbih1LGwpe3JldHVybiB1PT1sfHwhKCF1fHwhbCkmJnUgaW5zdGFuY2VvZiBsLmNvbnN0cnVjdG9yJiZpbyh1LmcoKSxsLmcoKSl9O2Z1bmN0aW9uIHVhKHUsbCl7dT11fHx7fSxsPWx8fHt9O3ZhciBoPXt9LFA7Zm9yKFAgaW4gdSloW1BdPTA7Zm9yKFAgaW4gbCloW1BdPTA7Zm9yKFAgaW4gaClpZighaW8odVtQXSxsW1BdKSlyZXR1cm4hMTtyZXR1cm4hMH1oZS5jb21wYXJlRXh0ZW5zaW9ucz11YTtmdW5jdGlvbiBpbyh1LGwpe2lmKHU9PWwpcmV0dXJuITA7aWYoIVcodSl8fCFXKGwpKXJldHVybiB0eXBlb2YgdT09Im51bWJlciImJmlzTmFOKHUpfHx0eXBlb2YgbD09Im51bWJlciImJmlzTmFOKGwpP1N0cmluZyh1KT09U3RyaW5nKGwpOiExO2lmKHUuY29uc3RydWN0b3IhPWwuY29uc3RydWN0b3IpcmV0dXJuITE7aWYoVm8mJnUuY29uc3RydWN0b3I9PT1VaW50OEFycmF5KXtpZih1Lmxlbmd0aCE9bC5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBoPTA7aDx1Lmxlbmd0aDtoKyspaWYodVtoXSE9bFtoXSlyZXR1cm4hMTtyZXR1cm4hMH1pZih1LmNvbnN0cnVjdG9yPT09QXJyYXkpe3ZhciBQPXZvaWQgMCxOPXZvaWQgMCxLPU1hdGgubWF4KHUubGVuZ3RoLGwubGVuZ3RoKTtmb3IoaD0wO2g8SztoKyspe3ZhciByZT11W2hdLHdlPWxbaF07aWYocmUmJnJlLmNvbnN0cnVjdG9yPT1PYmplY3QmJihJKFA9PT12b2lkIDApLEkoaD09PXUubGVuZ3RoLTEpLFA9cmUscmU9dm9pZCAwKSx3ZSYmd2UuY29uc3RydWN0b3I9PU9iamVjdCYmKEkoTj09PXZvaWQgMCksSShoPT09bC5sZW5ndGgtMSksTj13ZSx3ZT12b2lkIDApLCFpbyhyZSx3ZSkpcmV0dXJuITF9cmV0dXJuIFB8fE4/KFA9UHx8e30sTj1OfHx7fSx1YShQLE4pKTohMH1pZih1LmNvbnN0cnVjdG9yPT09T2JqZWN0KXJldHVybiB1YSh1LGwpO3Rocm93IEVycm9yKCJJbnZhbGlkIHR5cGUgaW4gSlNQQiBhcnJheSIpfWhlLmNvbXBhcmVGaWVsZHM9aW8saGUucHJvdG90eXBlLkJiPWZ1bmN0aW9uKCl7cmV0dXJuIEhvKHRoaXMpfSxoZS5wcm90b3R5cGUuY2xvbmVNZXNzYWdlPWhlLnByb3RvdHlwZS5CYixoZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gSG8odGhpcyl9LGhlLnByb3RvdHlwZS5jbG9uZT1oZS5wcm90b3R5cGUuY2xvbmUsaGUuY2xvbmU9ZnVuY3Rpb24odSl7cmV0dXJuIEhvKHUpfTtmdW5jdGlvbiBIbyh1KXtyZXR1cm4gbmV3IHUuY29uc3RydWN0b3IobGEodS5nKCkpKX1oZS5jb3B5SW50bz1mdW5jdGlvbih1LGwpe0YodSxoZSksRihsLGhlKSxJKHUuY29uc3RydWN0b3I9PWwuY29uc3RydWN0b3IsIkNvcHkgc291cmNlIGFuZCB0YXJnZXQgbWVzc2FnZSBzaG91bGQgaGF2ZSB0aGUgc2FtZSB0eXBlLiIpLHU9SG8odSk7Zm9yKHZhciBoPWwuZygpLFA9dS5nKCksTj1oLmxlbmd0aD0wO048UC5sZW5ndGg7TisrKWhbTl09UFtOXTtsLmY9dS5mLGwuaT11Lml9O2Z1bmN0aW9uIGxhKHUpe2lmKEFycmF5LmlzQXJyYXkodSkpe2Zvcih2YXIgbD1BcnJheSh1Lmxlbmd0aCksaD0wO2g8dS5sZW5ndGg7aCsrKXt2YXIgUD11W2hdO1AhPW51bGwmJihsW2hdPXR5cGVvZiBQPT0ib2JqZWN0Ij9sYShJKFApKTpQKX1yZXR1cm4gbH1pZihWbyYmdSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuIG5ldyBVaW50OEFycmF5KHUpO2w9e307Zm9yKGggaW4gdSlQPXVbaF0sUCE9bnVsbCYmKGxbaF09dHlwZW9mIFA9PSJvYmplY3QiP2xhKEkoUCkpOlApO3JldHVybiBsfWhlLnJlZ2lzdGVyTWVzc2FnZVR5cGU9ZnVuY3Rpb24odSxsKXtsLndlPXV9O3ZhciBmcj17ZHVtcDpmdW5jdGlvbih1KXtyZXR1cm4gRih1LGhlLCJqc3BiLk1lc3NhZ2UgaW5zdGFuY2UgZXhwZWN0ZWQiKSxJKHUuZ2V0RXh0ZW5zaW9uLCJPbmx5IHVub2JmdXNjYXRlZCBhbmQgdW5vcHRpbWl6ZWQgY29tcGlsYXRpb24gbW9kZXMgc3VwcG9ydGVkLiIpLGZyLlgodSl9fTtiKCJqc3BiLmRlYnVnLmR1bXAiLGZyLmR1bXAsdm9pZCAwKSxmci5YPWZ1bmN0aW9uKHUpe3ZhciBsPVQodSk7aWYobD09Im51bWJlciJ8fGw9PSJzdHJpbmcifHxsPT0iYm9vbGVhbiJ8fGw9PSJudWxsInx8bD09InVuZGVmaW5lZCJ8fHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmdSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuIHU7aWYobD09ImFycmF5IilyZXR1cm4gRSh1KSxrKHUsZnIuWCk7aWYodSBpbnN0YW5jZW9mIE8pe3ZhciBoPXt9O3U9dS5lbnRyaWVzKCk7Zm9yKHZhciBQPXUubmV4dCgpOyFQLmRvbmU7UD11Lm5leHQoKSloW1AudmFsdWVbMF1dPWZyLlgoUC52YWx1ZVsxXSk7cmV0dXJuIGh9Rih1LGhlLCJPbmx5IG1lc3NhZ2VzIGV4cGVjdGVkOiAiK3UpLGw9dS5jb25zdHJ1Y3Rvcjt2YXIgTj17JG5hbWU6bC5uYW1lfHxsLmRpc3BsYXlOYW1lfTtmb3Iod2UgaW4gbC5wcm90b3R5cGUpe3ZhciBLPS9eZ2V0KFtBLVpdXHcqKS8uZXhlYyh3ZSk7aWYoSyYmd2UhPSJnZXRFeHRlbnNpb24iJiZ3ZSE9ImdldEpzUGJNZXNzYWdlSWQiKXt2YXIgcmU9ImhhcyIrS1sxXTsoIXVbcmVdfHx1W3JlXSgpKSYmKHJlPXVbd2VdKCksTltmci4kYShLWzFdKV09ZnIuWChyZSkpfX1pZih1LmV4dGVuc2lvbk9iamVjdF8pcmV0dXJuIE4uJGV4dGVuc2lvbnM9IlJlY3Vyc2l2ZSBkdW1waW5nIG9mIGV4dGVuc2lvbnMgbm90IHN1cHBvcnRlZCBpbiBjb21waWxlZCBjb2RlLiBTd2l0Y2ggdG8gdW5jb21waWxlZCBvciBkdW1wIGV4dGVuc2lvbiBvYmplY3QgZGlyZWN0bHkiLE47Zm9yKFAgaW4gbC5leHRlbnNpb25zKWlmKC9eXGQrJC8udGVzdChQKSl7cmU9bC5leHRlbnNpb25zW1BdO3ZhciB3ZT11LmdldEV4dGVuc2lvbihyZSk7Sz12b2lkIDAscmU9cmUuQmE7dmFyIHB0PVtdLGNvPTA7Zm9yKEsgaW4gcmUpcHRbY28rK109SztLPXB0WzBdLHdlIT1udWxsJiYoaHx8KGg9Ti4kZXh0ZW5zaW9ucz17fSksaFtmci4kYShLKV09ZnIuWCh3ZSkpfXJldHVybiBOfSxmci4kYT1mdW5jdGlvbih1KXtyZXR1cm4gdS5yZXBsYWNlKC9eW0EtWl0vLGZ1bmN0aW9uKGwpe3JldHVybiBsLnRvTG93ZXJDYXNlKCl9KX07ZnVuY3Rpb24gY2UoKXt0aGlzLmE9W119YigianNwYi5CaW5hcnlFbmNvZGVyIixjZSx2b2lkIDApLGNlLnByb3RvdHlwZS5sZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmxlbmd0aH0sY2UucHJvdG90eXBlLmxlbmd0aD1jZS5wcm90b3R5cGUubGVuZ3RoLGNlLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgdT10aGlzLmE7cmV0dXJuIHRoaXMuYT1bXSx1fSxjZS5wcm90b3R5cGUuZW5kPWNlLnByb3RvdHlwZS5lbmQsY2UucHJvdG90eXBlLmw9ZnVuY3Rpb24odSxsKXtmb3IoSSh1PT1NYXRoLmZsb29yKHUpKSxJKGw9PU1hdGguZmxvb3IobCkpLEkoMDw9dSYmNDI5NDk2NzI5Nj51KSxJKDA8PWwmJjQyOTQ5NjcyOTY+bCk7MDxsfHwxMjc8dTspdGhpcy5hLnB1c2godSYxMjd8MTI4KSx1PSh1Pj4+N3xsPDwyNSk+Pj4wLGw+Pj49Nzt0aGlzLmEucHVzaCh1KX0sY2UucHJvdG90eXBlLndyaXRlU3BsaXRWYXJpbnQ2ND1jZS5wcm90b3R5cGUubCxjZS5wcm90b3R5cGUuQT1mdW5jdGlvbih1LGwpe0kodT09TWF0aC5mbG9vcih1KSksSShsPT1NYXRoLmZsb29yKGwpKSxJKDA8PXUmJjQyOTQ5NjcyOTY+dSksSSgwPD1sJiY0Mjk0OTY3Mjk2PmwpLHRoaXMucyh1KSx0aGlzLnMobCl9LGNlLnByb3RvdHlwZS53cml0ZVNwbGl0Rml4ZWQ2ND1jZS5wcm90b3R5cGUuQSxjZS5wcm90b3R5cGUuaj1mdW5jdGlvbih1KXtmb3IoSSh1PT1NYXRoLmZsb29yKHUpKSxJKDA8PXUmJjQyOTQ5NjcyOTY+dSk7MTI3PHU7KXRoaXMuYS5wdXNoKHUmMTI3fDEyOCksdT4+Pj03O3RoaXMuYS5wdXNoKHUpfSxjZS5wcm90b3R5cGUud3JpdGVVbnNpZ25lZFZhcmludDMyPWNlLnByb3RvdHlwZS5qLGNlLnByb3RvdHlwZS5NPWZ1bmN0aW9uKHUpe2lmKEkodT09TWF0aC5mbG9vcih1KSksSSgtMjE0NzQ4MzY0ODw9dSYmMjE0NzQ4MzY0OD51KSwwPD11KXRoaXMuaih1KTtlbHNle2Zvcih2YXIgbD0wOzk+bDtsKyspdGhpcy5hLnB1c2godSYxMjd8MTI4KSx1Pj49Nzt0aGlzLmEucHVzaCgxKX19LGNlLnByb3RvdHlwZS53cml0ZVNpZ25lZFZhcmludDMyPWNlLnByb3RvdHlwZS5NLGNlLnByb3RvdHlwZS52YT1mdW5jdGlvbih1KXtJKHU9PU1hdGguZmxvb3IodSkpLEkoMDw9dSYmMTg0NDY3NDQwNzM3MDk1NTJlMz51KSxRZSh1KSx0aGlzLmwoZGUsQmUpfSxjZS5wcm90b3R5cGUud3JpdGVVbnNpZ25lZFZhcmludDY0PWNlLnByb3RvdHlwZS52YSxjZS5wcm90b3R5cGUudWE9ZnVuY3Rpb24odSl7SSh1PT1NYXRoLmZsb29yKHUpKSxJKC05MjIzMzcyMDM2ODU0Nzc2ZTM8PXUmJjkyMjMzNzIwMzY4NTQ3NzZlMz51KSxRZSh1KSx0aGlzLmwoZGUsQmUpfSxjZS5wcm90b3R5cGUud3JpdGVTaWduZWRWYXJpbnQ2ND1jZS5wcm90b3R5cGUudWEsY2UucHJvdG90eXBlLndhPWZ1bmN0aW9uKHUpe0kodT09TWF0aC5mbG9vcih1KSksSSgtMjE0NzQ4MzY0ODw9dSYmMjE0NzQ4MzY0OD51KSx0aGlzLmooKHU8PDFedT4+MzEpPj4+MCl9LGNlLnByb3RvdHlwZS53cml0ZVppZ3phZ1ZhcmludDMyPWNlLnByb3RvdHlwZS53YSxjZS5wcm90b3R5cGUueGE9ZnVuY3Rpb24odSl7SSh1PT1NYXRoLmZsb29yKHUpKSxJKC05MjIzMzcyMDM2ODU0Nzc2ZTM8PXUmJjkyMjMzNzIwMzY4NTQ3NzZlMz51KSxydCh1KSx0aGlzLmwoZGUsQmUpfSxjZS5wcm90b3R5cGUud3JpdGVaaWd6YWdWYXJpbnQ2ND1jZS5wcm90b3R5cGUueGEsY2UucHJvdG90eXBlLlRhPWZ1bmN0aW9uKHUpe3RoaXMuVyhWZSh1KSl9LGNlLnByb3RvdHlwZS53cml0ZVppZ3phZ1ZhcmludDY0U3RyaW5nPWNlLnByb3RvdHlwZS5UYSxjZS5wcm90b3R5cGUuVz1mdW5jdGlvbih1KXt2YXIgbD10aGlzO05lKHUpLEQoZGUsQmUsZnVuY3Rpb24oaCxQKXtsLmwoaD4+PjAsUD4+PjApfSl9LGNlLnByb3RvdHlwZS53cml0ZVppZ3phZ1ZhcmludEhhc2g2ND1jZS5wcm90b3R5cGUuVyxjZS5wcm90b3R5cGUuYmU9ZnVuY3Rpb24odSl7SSh1PT1NYXRoLmZsb29yKHUpKSxJKDA8PXUmJjI1Nj51KSx0aGlzLmEucHVzaCh1Pj4+MCYyNTUpfSxjZS5wcm90b3R5cGUud3JpdGVVaW50OD1jZS5wcm90b3R5cGUuYmUsY2UucHJvdG90eXBlLmFlPWZ1bmN0aW9uKHUpe0kodT09TWF0aC5mbG9vcih1KSksSSgwPD11JiY2NTUzNj51KSx0aGlzLmEucHVzaCh1Pj4+MCYyNTUpLHRoaXMuYS5wdXNoKHU+Pj44JjI1NSl9LGNlLnByb3RvdHlwZS53cml0ZVVpbnQxNj1jZS5wcm90b3R5cGUuYWUsY2UucHJvdG90eXBlLnM9ZnVuY3Rpb24odSl7SSh1PT1NYXRoLmZsb29yKHUpKSxJKDA8PXUmJjQyOTQ5NjcyOTY+dSksdGhpcy5hLnB1c2godT4+PjAmMjU1KSx0aGlzLmEucHVzaCh1Pj4+OCYyNTUpLHRoaXMuYS5wdXNoKHU+Pj4xNiYyNTUpLHRoaXMuYS5wdXNoKHU+Pj4yNCYyNTUpfSxjZS5wcm90b3R5cGUud3JpdGVVaW50MzI9Y2UucHJvdG90eXBlLnMsY2UucHJvdG90eXBlLlY9ZnVuY3Rpb24odSl7SSh1PT1NYXRoLmZsb29yKHUpKSxJKDA8PXUmJjE4NDQ2NzQ0MDczNzA5NTUyZTM+dSksS2UodSksdGhpcy5zKGRlKSx0aGlzLnMoQmUpfSxjZS5wcm90b3R5cGUud3JpdGVVaW50NjQ9Y2UucHJvdG90eXBlLlYsY2UucHJvdG90eXBlLlFjPWZ1bmN0aW9uKHUpe0kodT09TWF0aC5mbG9vcih1KSksSSgtMTI4PD11JiYxMjg+dSksdGhpcy5hLnB1c2godT4+PjAmMjU1KX0sY2UucHJvdG90eXBlLndyaXRlSW50OD1jZS5wcm90b3R5cGUuUWMsY2UucHJvdG90eXBlLlBjPWZ1bmN0aW9uKHUpe0kodT09TWF0aC5mbG9vcih1KSksSSgtMzI3Njg8PXUmJjMyNzY4PnUpLHRoaXMuYS5wdXNoKHU+Pj4wJjI1NSksdGhpcy5hLnB1c2godT4+PjgmMjU1KX0sY2UucHJvdG90eXBlLndyaXRlSW50MTY9Y2UucHJvdG90eXBlLlBjLGNlLnByb3RvdHlwZS5TPWZ1bmN0aW9uKHUpe0kodT09TWF0aC5mbG9vcih1KSksSSgtMjE0NzQ4MzY0ODw9dSYmMjE0NzQ4MzY0OD51KSx0aGlzLmEucHVzaCh1Pj4+MCYyNTUpLHRoaXMuYS5wdXNoKHU+Pj44JjI1NSksdGhpcy5hLnB1c2godT4+PjE2JjI1NSksdGhpcy5hLnB1c2godT4+PjI0JjI1NSl9LGNlLnByb3RvdHlwZS53cml0ZUludDMyPWNlLnByb3RvdHlwZS5TLGNlLnByb3RvdHlwZS5UPWZ1bmN0aW9uKHUpe0kodT09TWF0aC5mbG9vcih1KSksSSgtOTIyMzM3MjAzNjg1NDc3NmUzPD11JiY5MjIzMzcyMDM2ODU0Nzc2ZTM+dSksUWUodSksdGhpcy5BKGRlLEJlKX0sY2UucHJvdG90eXBlLndyaXRlSW50NjQ9Y2UucHJvdG90eXBlLlQsY2UucHJvdG90eXBlLmthPWZ1bmN0aW9uKHUpe0kodT09TWF0aC5mbG9vcih1KSksSSgtOTIyMzM3MjAzNjg1NDc3NmUzPD0rdSYmOTIyMzM3MjAzNjg1NDc3NmUzPit1KSxOZShWZSh1KSksdGhpcy5BKGRlLEJlKX0sY2UucHJvdG90eXBlLndyaXRlSW50NjRTdHJpbmc9Y2UucHJvdG90eXBlLmthLGNlLnByb3RvdHlwZS5MPWZ1bmN0aW9uKHUpe0kodT09PTEvMHx8dT09PS0xLzB8fGlzTmFOKHUpfHwtMzQwMjgyMzQ2NjM4NTI4ODZlMjI8PXUmJjM0MDI4MjM0NjYzODUyODg2ZTIyPj11KSxJZSh1KSx0aGlzLnMoZGUpfSxjZS5wcm90b3R5cGUud3JpdGVGbG9hdD1jZS5wcm90b3R5cGUuTCxjZS5wcm90b3R5cGUuSj1mdW5jdGlvbih1KXtJKHU9PT0xLzB8fHU9PT0tMS8wfHxpc05hTih1KXx8LTE3OTc2OTMxMzQ4NjIzMTU3ZTI5Mjw9dSYmMTc5NzY5MzEzNDg2MjMxNTdlMjkyPj11KSxNZSh1KSx0aGlzLnMoZGUpLHRoaXMucyhCZSl9LGNlLnByb3RvdHlwZS53cml0ZURvdWJsZT1jZS5wcm90b3R5cGUuSixjZS5wcm90b3R5cGUuST1mdW5jdGlvbih1KXtJKHR5cGVvZiB1PT0iYm9vbGVhbiJ8fHR5cGVvZiB1PT0ibnVtYmVyIiksdGhpcy5hLnB1c2godT8xOjApfSxjZS5wcm90b3R5cGUud3JpdGVCb29sPWNlLnByb3RvdHlwZS5JLGNlLnByb3RvdHlwZS5SPWZ1bmN0aW9uKHUpe0kodT09TWF0aC5mbG9vcih1KSksSSgtMjE0NzQ4MzY0ODw9dSYmMjE0NzQ4MzY0OD51KSx0aGlzLk0odSl9LGNlLnByb3RvdHlwZS53cml0ZUVudW09Y2UucHJvdG90eXBlLlIsY2UucHJvdG90eXBlLmphPWZ1bmN0aW9uKHUpe3RoaXMuYS5wdXNoLmFwcGx5KHRoaXMuYSx1KX0sY2UucHJvdG90eXBlLndyaXRlQnl0ZXM9Y2UucHJvdG90eXBlLmphLGNlLnByb3RvdHlwZS5OPWZ1bmN0aW9uKHUpe05lKHUpLHRoaXMubChkZSxCZSl9LGNlLnByb3RvdHlwZS53cml0ZVZhcmludEhhc2g2ND1jZS5wcm90b3R5cGUuTixjZS5wcm90b3R5cGUuSz1mdW5jdGlvbih1KXtOZSh1KSx0aGlzLnMoZGUpLHRoaXMucyhCZSl9LGNlLnByb3RvdHlwZS53cml0ZUZpeGVkSGFzaDY0PWNlLnByb3RvdHlwZS5LLGNlLnByb3RvdHlwZS5VPWZ1bmN0aW9uKHUpe3ZhciBsPXRoaXMuYS5sZW5ndGg7eSh1KTtmb3IodmFyIGg9MDtoPHUubGVuZ3RoO2grKyl7dmFyIFA9dS5jaGFyQ29kZUF0KGgpO2lmKDEyOD5QKXRoaXMuYS5wdXNoKFApO2Vsc2UgaWYoMjA0OD5QKXRoaXMuYS5wdXNoKFA+PjZ8MTkyKSx0aGlzLmEucHVzaChQJjYzfDEyOCk7ZWxzZSBpZig2NTUzNj5QKWlmKDU1Mjk2PD1QJiY1NjMxOT49UCYmaCsxPHUubGVuZ3RoKXt2YXIgTj11LmNoYXJDb2RlQXQoaCsxKTs1NjMyMDw9TiYmNTczNDM+PU4mJihQPTEwMjQqKFAtNTUyOTYpK04tNTYzMjArNjU1MzYsdGhpcy5hLnB1c2goUD4+MTh8MjQwKSx0aGlzLmEucHVzaChQPj4xMiY2M3wxMjgpLHRoaXMuYS5wdXNoKFA+PjYmNjN8MTI4KSx0aGlzLmEucHVzaChQJjYzfDEyOCksaCsrKX1lbHNlIHRoaXMuYS5wdXNoKFA+PjEyfDIyNCksdGhpcy5hLnB1c2goUD4+NiY2M3wxMjgpLHRoaXMuYS5wdXNoKFAmNjN8MTI4KX1yZXR1cm4gdGhpcy5hLmxlbmd0aC1sfSxjZS5wcm90b3R5cGUud3JpdGVTdHJpbmc9Y2UucHJvdG90eXBlLlU7ZnVuY3Rpb24gV2UodSxsKXt0aGlzLmxvPXUsdGhpcy5oaT1sfWIoImpzcGIuYXJpdGguVUludDY0IixXZSx2b2lkIDApLFdlLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24odSl7cmV0dXJuIHRoaXMuaGk8dS5oaXx8dGhpcy5oaT09dS5oaSYmdGhpcy5sbzx1LmxvPy0xOnRoaXMuaGk9PXUuaGkmJnRoaXMubG89PXUubG8/MDoxfSxXZS5wcm90b3R5cGUuY21wPVdlLnByb3RvdHlwZS5jbXAsV2UucHJvdG90eXBlLkxhPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBXZSgodGhpcy5sbz4+PjF8KHRoaXMuaGkmMSk8PDMxKT4+PjAsdGhpcy5oaT4+PjE+Pj4wKX0sV2UucHJvdG90eXBlLnJpZ2h0U2hpZnQ9V2UucHJvdG90eXBlLkxhLFdlLnByb3RvdHlwZS5EYT1mdW5jdGlvbigpe3JldHVybiBuZXcgV2UodGhpcy5sbzw8MT4+PjAsKHRoaXMuaGk8PDF8dGhpcy5sbz4+PjMxKT4+PjApfSxXZS5wcm90b3R5cGUubGVmdFNoaWZ0PVdlLnByb3RvdHlwZS5EYSxXZS5wcm90b3R5cGUuY2I9ZnVuY3Rpb24oKXtyZXR1cm4hISh0aGlzLmhpJjIxNDc0ODM2NDgpfSxXZS5wcm90b3R5cGUubXNiPVdlLnByb3RvdHlwZS5jYixXZS5wcm90b3R5cGUuT2I9ZnVuY3Rpb24oKXtyZXR1cm4hISh0aGlzLmxvJjEpfSxXZS5wcm90b3R5cGUubHNiPVdlLnByb3RvdHlwZS5PYixXZS5wcm90b3R5cGUuVWE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sbz09MCYmdGhpcy5oaT09MH0sV2UucHJvdG90eXBlLnplcm89V2UucHJvdG90eXBlLlVhLFdlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odSl7cmV0dXJuIG5ldyBXZSgodGhpcy5sbyt1LmxvJjQyOTQ5NjcyOTUpPj4+MD4+PjAsKCh0aGlzLmhpK3UuaGkmNDI5NDk2NzI5NSk+Pj4wKSsoNDI5NDk2NzI5Njw9dGhpcy5sbyt1LmxvPzE6MCk+Pj4wKX0sV2UucHJvdG90eXBlLmFkZD1XZS5wcm90b3R5cGUuYWRkLFdlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odSl7cmV0dXJuIG5ldyBXZSgodGhpcy5sby11LmxvJjQyOTQ5NjcyOTUpPj4+MD4+PjAsKCh0aGlzLmhpLXUuaGkmNDI5NDk2NzI5NSk+Pj4wKS0oMD50aGlzLmxvLXUubG8/MTowKT4+PjApfSxXZS5wcm90b3R5cGUuc3ViPVdlLnByb3RvdHlwZS5zdWI7ZnVuY3Rpb24gZmEodSxsKXt2YXIgaD11JjY1NTM1O3U+Pj49MTY7dmFyIFA9bCY2NTUzNSxOPWw+Pj4xNjtmb3IobD1oKlArNjU1MzYqKGgqTiY2NTUzNSkrNjU1MzYqKHUqUCY2NTUzNSksaD11Kk4rKGgqTj4+PjE2KSsodSpQPj4+MTYpOzQyOTQ5NjcyOTY8PWw7KWwtPTQyOTQ5NjcyOTYsaCs9MTtyZXR1cm4gbmV3IFdlKGw+Pj4wLGg+Pj4wKX1XZS5tdWwzMngzMj1mYSxXZS5wcm90b3R5cGUuZWI9ZnVuY3Rpb24odSl7dmFyIGw9ZmEodGhpcy5sbyx1KTtyZXR1cm4gdT1mYSh0aGlzLmhpLHUpLHUuaGk9dS5sbyx1LmxvPTAsbC5hZGQodSl9LFdlLnByb3RvdHlwZS5tdWw9V2UucHJvdG90eXBlLmViLFdlLnByb3RvdHlwZS5YYT1mdW5jdGlvbih1KXtpZih1PT0wKXJldHVybltdO3ZhciBsPW5ldyBXZSgwLDApLGg9bmV3IFdlKHRoaXMubG8sdGhpcy5oaSk7dT1uZXcgV2UodSwwKTtmb3IodmFyIFA9bmV3IFdlKDEsMCk7IXUuY2IoKTspdT11LkRhKCksUD1QLkRhKCk7Zm9yKDshUC5VYSgpOykwPj11LmNtcChoKSYmKGw9bC5hZGQoUCksaD1oLnN1Yih1KSksdT11LkxhKCksUD1QLkxhKCk7cmV0dXJuW2wsaF19LFdlLnByb3RvdHlwZS5kaXY9V2UucHJvdG90eXBlLlhhLFdlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2Zvcih2YXIgdT0iIixsPXRoaXM7IWwuVWEoKTspe2w9bC5YYSgxMCk7dmFyIGg9bFswXTt1PWxbMV0ubG8rdSxsPWh9cmV0dXJuIHU9PSIiJiYodT0iMCIpLHV9LFdlLnByb3RvdHlwZS50b1N0cmluZz1XZS5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gRm4odSl7Zm9yKHZhciBsPW5ldyBXZSgwLDApLGg9bmV3IFdlKDAsMCksUD0wO1A8dS5sZW5ndGg7UCsrKXtpZigiMCI+dVtQXXx8IjkiPHVbUF0pcmV0dXJuIG51bGw7aC5sbz1wYXJzZUludCh1W1BdLDEwKSxsPWwuZWIoMTApLmFkZChoKX1yZXR1cm4gbH1XZS5mcm9tU3RyaW5nPUZuLFdlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgV2UodGhpcy5sbyx0aGlzLmhpKX0sV2UucHJvdG90eXBlLmNsb25lPVdlLnByb3RvdHlwZS5jbG9uZTtmdW5jdGlvbiB4dCh1LGwpe3RoaXMubG89dSx0aGlzLmhpPWx9YigianNwYi5hcml0aC5JbnQ2NCIseHQsdm9pZCAwKSx4dC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHUpe3JldHVybiBuZXcgeHQoKHRoaXMubG8rdS5sbyY0Mjk0OTY3Mjk1KT4+PjA+Pj4wLCgodGhpcy5oaSt1LmhpJjQyOTQ5NjcyOTUpPj4+MCkrKDQyOTQ5NjcyOTY8PXRoaXMubG8rdS5sbz8xOjApPj4+MCl9LHh0LnByb3RvdHlwZS5hZGQ9eHQucHJvdG90eXBlLmFkZCx4dC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHUpe3JldHVybiBuZXcgeHQoKHRoaXMubG8tdS5sbyY0Mjk0OTY3Mjk1KT4+PjA+Pj4wLCgodGhpcy5oaS11LmhpJjQyOTQ5NjcyOTUpPj4+MCktKDA+dGhpcy5sby11LmxvPzE6MCk+Pj4wKX0seHQucHJvdG90eXBlLnN1Yj14dC5wcm90b3R5cGUuc3ViLHh0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgeHQodGhpcy5sbyx0aGlzLmhpKX0seHQucHJvdG90eXBlLmNsb25lPXh0LnByb3RvdHlwZS5jbG9uZSx4dC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgdT0odGhpcy5oaSYyMTQ3NDgzNjQ4KSE9MCxsPW5ldyBXZSh0aGlzLmxvLHRoaXMuaGkpO3JldHVybiB1JiYobD1uZXcgV2UoMCwwKS5zdWIobCkpLCh1PyItIjoiIikrbC50b1N0cmluZygpfSx4dC5wcm90b3R5cGUudG9TdHJpbmc9eHQucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIEtvKHUpe3ZhciBsPTA8dS5sZW5ndGgmJnVbMF09PSItIjtyZXR1cm4gbCYmKHU9dS5zdWJzdHJpbmcoMSkpLHU9Rm4odSksdT09PW51bGw/bnVsbDoobCYmKHU9bmV3IFdlKDAsMCkuc3ViKHUpKSxuZXcgeHQodS5sbyx1LmhpKSl9eHQuZnJvbVN0cmluZz1LbztmdW5jdGlvbiBTKCl7dGhpcy5jPVtdLHRoaXMuYj0wLHRoaXMuYT1uZXcgY2UsdGhpcy5oPVtdfWIoImpzcGIuQmluYXJ5V3JpdGVyIixTLHZvaWQgMCk7ZnVuY3Rpb24gb2UodSxsKXt2YXIgaD11LmEuZW5kKCk7dS5jLnB1c2goaCksdS5jLnB1c2gobCksdS5iKz1oLmxlbmd0aCtsLmxlbmd0aH1mdW5jdGlvbiBhdCh1LGwpe3JldHVybiB2ZSh1LGwsMiksbD11LmEuZW5kKCksdS5jLnB1c2gobCksdS5iKz1sLmxlbmd0aCxsLnB1c2godS5iKSxsfWZ1bmN0aW9uIGl0KHUsbCl7dmFyIGg9bC5wb3AoKTtmb3IoaD11LmIrdS5hLmxlbmd0aCgpLWgsSSgwPD1oKTsxMjc8aDspbC5wdXNoKGgmMTI3fDEyOCksaD4+Pj03LHUuYisrO2wucHVzaChoKSx1LmIrK31TLnByb3RvdHlwZS5wYj1mdW5jdGlvbih1LGwsaCl7b2UodGhpcyx1LnN1YmFycmF5KGwsaCkpfSxTLnByb3RvdHlwZS53cml0ZVNlcmlhbGl6ZWRNZXNzYWdlPVMucHJvdG90eXBlLnBiLFMucHJvdG90eXBlLlBiPWZ1bmN0aW9uKHUsbCxoKXt1IT1udWxsJiZsIT1udWxsJiZoIT1udWxsJiZ0aGlzLnBiKHUsbCxoKX0sUy5wcm90b3R5cGUubWF5YmVXcml0ZVNlcmlhbGl6ZWRNZXNzYWdlPVMucHJvdG90eXBlLlBiLFMucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5jPVtdLHRoaXMuYS5lbmQoKSx0aGlzLmI9MCx0aGlzLmg9W119LFMucHJvdG90eXBlLnJlc2V0PVMucHJvdG90eXBlLnJlc2V0LFMucHJvdG90eXBlLmFiPWZ1bmN0aW9uKCl7SSh0aGlzLmgubGVuZ3RoPT0wKTtmb3IodmFyIHU9bmV3IFVpbnQ4QXJyYXkodGhpcy5iK3RoaXMuYS5sZW5ndGgoKSksbD10aGlzLmMsaD1sLmxlbmd0aCxQPTAsTj0wO048aDtOKyspe3ZhciBLPWxbTl07dS5zZXQoSyxQKSxQKz1LLmxlbmd0aH1yZXR1cm4gbD10aGlzLmEuZW5kKCksdS5zZXQobCxQKSxQKz1sLmxlbmd0aCxJKFA9PXUubGVuZ3RoKSx0aGlzLmM9W3VdLHV9LFMucHJvdG90eXBlLmdldFJlc3VsdEJ1ZmZlcj1TLnByb3RvdHlwZS5hYixTLnByb3RvdHlwZS5LYj1mdW5jdGlvbih1KXtyZXR1cm4gZ2UodGhpcy5hYigpLHUpfSxTLnByb3RvdHlwZS5nZXRSZXN1bHRCYXNlNjRTdHJpbmc9Uy5wcm90b3R5cGUuS2IsUy5wcm90b3R5cGUuVmE9ZnVuY3Rpb24odSl7dGhpcy5oLnB1c2goYXQodGhpcyx1KSl9LFMucHJvdG90eXBlLmJlZ2luU3ViTWVzc2FnZT1TLnByb3RvdHlwZS5WYSxTLnByb3RvdHlwZS5ZYT1mdW5jdGlvbigpe0koMDw9dGhpcy5oLmxlbmd0aCksaXQodGhpcyx0aGlzLmgucG9wKCkpfSxTLnByb3RvdHlwZS5lbmRTdWJNZXNzYWdlPVMucHJvdG90eXBlLllhO2Z1bmN0aW9uIHZlKHUsbCxoKXtJKDE8PWwmJmw9PU1hdGguZmxvb3IobCkpLHUuYS5qKDgqbCtoKX1TLnByb3RvdHlwZS5OYz1mdW5jdGlvbih1LGwsaCl7c3dpdGNoKHUpe2Nhc2UgMTp0aGlzLkoobCxoKTticmVhaztjYXNlIDI6dGhpcy5MKGwsaCk7YnJlYWs7Y2FzZSAzOnRoaXMuVChsLGgpO2JyZWFrO2Nhc2UgNDp0aGlzLlYobCxoKTticmVhaztjYXNlIDU6dGhpcy5TKGwsaCk7YnJlYWs7Y2FzZSA2OnRoaXMuUWEobCxoKTticmVhaztjYXNlIDc6dGhpcy5QYShsLGgpO2JyZWFrO2Nhc2UgODp0aGlzLkkobCxoKTticmVhaztjYXNlIDk6dGhpcy5VKGwsaCk7YnJlYWs7Y2FzZSAxMDpDKCJHcm91cCBmaWVsZCB0eXBlIG5vdCBzdXBwb3J0ZWQgaW4gd3JpdGVBbnkoKSIpO2JyZWFrO2Nhc2UgMTE6QygiTWVzc2FnZSBmaWVsZCB0eXBlIG5vdCBzdXBwb3J0ZWQgaW4gd3JpdGVBbnkoKSIpO2JyZWFrO2Nhc2UgMTI6dGhpcy5qYShsLGgpO2JyZWFrO2Nhc2UgMTM6dGhpcy5zKGwsaCk7YnJlYWs7Y2FzZSAxNDp0aGlzLlIobCxoKTticmVhaztjYXNlIDE1OnRoaXMuUmEobCxoKTticmVhaztjYXNlIDE2OnRoaXMuU2EobCxoKTticmVhaztjYXNlIDE3OnRoaXMucmIobCxoKTticmVhaztjYXNlIDE4OnRoaXMuc2IobCxoKTticmVhaztjYXNlIDMwOnRoaXMuSyhsLGgpO2JyZWFrO2Nhc2UgMzE6dGhpcy5OKGwsaCk7YnJlYWs7ZGVmYXVsdDpDKCJJbnZhbGlkIGZpZWxkIHR5cGUgaW4gd3JpdGVBbnkoKSIpfX0sUy5wcm90b3R5cGUud3JpdGVBbnk9Uy5wcm90b3R5cGUuTmM7ZnVuY3Rpb24gQXIodSxsLGgpe2ghPW51bGwmJih2ZSh1LGwsMCksdS5hLmooaCkpfWZ1bmN0aW9uIGRhKHUsbCxoKXtoIT1udWxsJiYodmUodSxsLDApLHUuYS5NKGgpKX1TLnByb3RvdHlwZS5TPWZ1bmN0aW9uKHUsbCl7bCE9bnVsbCYmKEkoLTIxNDc0ODM2NDg8PWwmJjIxNDc0ODM2NDg+bCksZGEodGhpcyx1LGwpKX0sUy5wcm90b3R5cGUud3JpdGVJbnQzMj1TLnByb3RvdHlwZS5TLFMucHJvdG90eXBlLm9iPWZ1bmN0aW9uKHUsbCl7bCE9bnVsbCYmKGw9cGFyc2VJbnQobCwxMCksSSgtMjE0NzQ4MzY0ODw9bCYmMjE0NzQ4MzY0OD5sKSxkYSh0aGlzLHUsbCkpfSxTLnByb3RvdHlwZS53cml0ZUludDMyU3RyaW5nPVMucHJvdG90eXBlLm9iLFMucHJvdG90eXBlLlQ9ZnVuY3Rpb24odSxsKXtsIT1udWxsJiYoSSgtOTIyMzM3MjAzNjg1NDc3NmUzPD1sJiY5MjIzMzcyMDM2ODU0Nzc2ZTM+bCksbCE9bnVsbCYmKHZlKHRoaXMsdSwwKSx0aGlzLmEudWEobCkpKX0sUy5wcm90b3R5cGUud3JpdGVJbnQ2ND1TLnByb3RvdHlwZS5ULFMucHJvdG90eXBlLmthPWZ1bmN0aW9uKHUsbCl7bCE9bnVsbCYmKGw9S28obCksdmUodGhpcyx1LDApLHRoaXMuYS5sKGwubG8sbC5oaSkpfSxTLnByb3RvdHlwZS53cml0ZUludDY0U3RyaW5nPVMucHJvdG90eXBlLmthLFMucHJvdG90eXBlLnM9ZnVuY3Rpb24odSxsKXtsIT1udWxsJiYoSSgwPD1sJiY0Mjk0OTY3Mjk2PmwpLEFyKHRoaXMsdSxsKSl9LFMucHJvdG90eXBlLndyaXRlVWludDMyPVMucHJvdG90eXBlLnMsUy5wcm90b3R5cGUudWI9ZnVuY3Rpb24odSxsKXtsIT1udWxsJiYobD1wYXJzZUludChsLDEwKSxJKDA8PWwmJjQyOTQ5NjcyOTY+bCksQXIodGhpcyx1LGwpKX0sUy5wcm90b3R5cGUud3JpdGVVaW50MzJTdHJpbmc9Uy5wcm90b3R5cGUudWIsUy5wcm90b3R5cGUuVj1mdW5jdGlvbih1LGwpe2whPW51bGwmJihJKDA8PWwmJjE4NDQ2NzQ0MDczNzA5NTUyZTM+bCksbCE9bnVsbCYmKHZlKHRoaXMsdSwwKSx0aGlzLmEudmEobCkpKX0sUy5wcm90b3R5cGUud3JpdGVVaW50NjQ9Uy5wcm90b3R5cGUuVixTLnByb3RvdHlwZS52Yj1mdW5jdGlvbih1LGwpe2whPW51bGwmJihsPUZuKGwpLHZlKHRoaXMsdSwwKSx0aGlzLmEubChsLmxvLGwuaGkpKX0sUy5wcm90b3R5cGUud3JpdGVVaW50NjRTdHJpbmc9Uy5wcm90b3R5cGUudmIsUy5wcm90b3R5cGUucmI9ZnVuY3Rpb24odSxsKXtsIT1udWxsJiYoSSgtMjE0NzQ4MzY0ODw9bCYmMjE0NzQ4MzY0OD5sKSxsIT1udWxsJiYodmUodGhpcyx1LDApLHRoaXMuYS53YShsKSkpfSxTLnByb3RvdHlwZS53cml0ZVNpbnQzMj1TLnByb3RvdHlwZS5yYixTLnByb3RvdHlwZS5zYj1mdW5jdGlvbih1LGwpe2whPW51bGwmJihJKC05MjIzMzcyMDM2ODU0Nzc2ZTM8PWwmJjkyMjMzNzIwMzY4NTQ3NzZlMz5sKSxsIT1udWxsJiYodmUodGhpcyx1LDApLHRoaXMuYS54YShsKSkpfSxTLnByb3RvdHlwZS53cml0ZVNpbnQ2ND1TLnByb3RvdHlwZS5zYixTLnByb3RvdHlwZS4kZD1mdW5jdGlvbih1LGwpe2whPW51bGwmJmwhPW51bGwmJih2ZSh0aGlzLHUsMCksdGhpcy5hLlcobCkpfSxTLnByb3RvdHlwZS53cml0ZVNpbnRIYXNoNjQ9Uy5wcm90b3R5cGUuJGQsUy5wcm90b3R5cGUuWmQ9ZnVuY3Rpb24odSxsKXtsIT1udWxsJiZsIT1udWxsJiYodmUodGhpcyx1LDApLHRoaXMuYS5UYShsKSl9LFMucHJvdG90eXBlLndyaXRlU2ludDY0U3RyaW5nPVMucHJvdG90eXBlLlpkLFMucHJvdG90eXBlLlBhPWZ1bmN0aW9uKHUsbCl7bCE9bnVsbCYmKEkoMDw9bCYmNDI5NDk2NzI5Nj5sKSx2ZSh0aGlzLHUsNSksdGhpcy5hLnMobCkpfSxTLnByb3RvdHlwZS53cml0ZUZpeGVkMzI9Uy5wcm90b3R5cGUuUGEsUy5wcm90b3R5cGUuUWE9ZnVuY3Rpb24odSxsKXtsIT1udWxsJiYoSSgwPD1sJiYxODQ0Njc0NDA3MzcwOTU1MmUzPmwpLHZlKHRoaXMsdSwxKSx0aGlzLmEuVihsKSl9LFMucHJvdG90eXBlLndyaXRlRml4ZWQ2ND1TLnByb3RvdHlwZS5RYSxTLnByb3RvdHlwZS5uYj1mdW5jdGlvbih1LGwpe2whPW51bGwmJihsPUZuKGwpLHZlKHRoaXMsdSwxKSx0aGlzLmEuQShsLmxvLGwuaGkpKX0sUy5wcm90b3R5cGUud3JpdGVGaXhlZDY0U3RyaW5nPVMucHJvdG90eXBlLm5iLFMucHJvdG90eXBlLlJhPWZ1bmN0aW9uKHUsbCl7bCE9bnVsbCYmKEkoLTIxNDc0ODM2NDg8PWwmJjIxNDc0ODM2NDg+bCksdmUodGhpcyx1LDUpLHRoaXMuYS5TKGwpKX0sUy5wcm90b3R5cGUud3JpdGVTZml4ZWQzMj1TLnByb3RvdHlwZS5SYSxTLnByb3RvdHlwZS5TYT1mdW5jdGlvbih1LGwpe2whPW51bGwmJihJKC05MjIzMzcyMDM2ODU0Nzc2ZTM8PWwmJjkyMjMzNzIwMzY4NTQ3NzZlMz5sKSx2ZSh0aGlzLHUsMSksdGhpcy5hLlQobCkpfSxTLnByb3RvdHlwZS53cml0ZVNmaXhlZDY0PVMucHJvdG90eXBlLlNhLFMucHJvdG90eXBlLnFiPWZ1bmN0aW9uKHUsbCl7bCE9bnVsbCYmKGw9S28obCksdmUodGhpcyx1LDEpLHRoaXMuYS5BKGwubG8sbC5oaSkpfSxTLnByb3RvdHlwZS53cml0ZVNmaXhlZDY0U3RyaW5nPVMucHJvdG90eXBlLnFiLFMucHJvdG90eXBlLkw9ZnVuY3Rpb24odSxsKXtsIT1udWxsJiYodmUodGhpcyx1LDUpLHRoaXMuYS5MKGwpKX0sUy5wcm90b3R5cGUud3JpdGVGbG9hdD1TLnByb3RvdHlwZS5MLFMucHJvdG90eXBlLko9ZnVuY3Rpb24odSxsKXtsIT1udWxsJiYodmUodGhpcyx1LDEpLHRoaXMuYS5KKGwpKX0sUy5wcm90b3R5cGUud3JpdGVEb3VibGU9Uy5wcm90b3R5cGUuSixTLnByb3RvdHlwZS5JPWZ1bmN0aW9uKHUsbCl7bCE9bnVsbCYmKEkodHlwZW9mIGw9PSJib29sZWFuInx8dHlwZW9mIGw9PSJudW1iZXIiKSx2ZSh0aGlzLHUsMCksdGhpcy5hLkkobCkpfSxTLnByb3RvdHlwZS53cml0ZUJvb2w9Uy5wcm90b3R5cGUuSSxTLnByb3RvdHlwZS5SPWZ1bmN0aW9uKHUsbCl7bCE9bnVsbCYmKEkoLTIxNDc0ODM2NDg8PWwmJjIxNDc0ODM2NDg+bCksdmUodGhpcyx1LDApLHRoaXMuYS5NKGwpKX0sUy5wcm90b3R5cGUud3JpdGVFbnVtPVMucHJvdG90eXBlLlIsUy5wcm90b3R5cGUuVT1mdW5jdGlvbih1LGwpe2whPW51bGwmJih1PWF0KHRoaXMsdSksdGhpcy5hLlUobCksaXQodGhpcyx1KSl9LFMucHJvdG90eXBlLndyaXRlU3RyaW5nPVMucHJvdG90eXBlLlUsUy5wcm90b3R5cGUuamE9ZnVuY3Rpb24odSxsKXtsIT1udWxsJiYobD1RcihsKSx2ZSh0aGlzLHUsMiksdGhpcy5hLmoobC5sZW5ndGgpLG9lKHRoaXMsbCkpfSxTLnByb3RvdHlwZS53cml0ZUJ5dGVzPVMucHJvdG90eXBlLmphLFMucHJvdG90eXBlLlJjPWZ1bmN0aW9uKHUsbCxoKXtsIT1udWxsJiYodT1hdCh0aGlzLHUpLGgobCx0aGlzKSxpdCh0aGlzLHUpKX0sUy5wcm90b3R5cGUud3JpdGVNZXNzYWdlPVMucHJvdG90eXBlLlJjLFMucHJvdG90eXBlLlNjPWZ1bmN0aW9uKHUsbCxoKXtsIT1udWxsJiYodmUodGhpcywxLDMpLHZlKHRoaXMsMiwwKSx0aGlzLmEuTSh1KSx1PWF0KHRoaXMsMyksaChsLHRoaXMpLGl0KHRoaXMsdSksdmUodGhpcywxLDQpKX0sUy5wcm90b3R5cGUud3JpdGVNZXNzYWdlU2V0PVMucHJvdG90eXBlLlNjLFMucHJvdG90eXBlLk9jPWZ1bmN0aW9uKHUsbCxoKXtsIT1udWxsJiYodmUodGhpcyx1LDMpLGgobCx0aGlzKSx2ZSh0aGlzLHUsNCkpfSxTLnByb3RvdHlwZS53cml0ZUdyb3VwPVMucHJvdG90eXBlLk9jLFMucHJvdG90eXBlLks9ZnVuY3Rpb24odSxsKXtsIT1udWxsJiYoSShsLmxlbmd0aD09OCksdmUodGhpcyx1LDEpLHRoaXMuYS5LKGwpKX0sUy5wcm90b3R5cGUud3JpdGVGaXhlZEhhc2g2ND1TLnByb3RvdHlwZS5LLFMucHJvdG90eXBlLk49ZnVuY3Rpb24odSxsKXtsIT1udWxsJiYoSShsLmxlbmd0aD09OCksdmUodGhpcyx1LDApLHRoaXMuYS5OKGwpKX0sUy5wcm90b3R5cGUud3JpdGVWYXJpbnRIYXNoNjQ9Uy5wcm90b3R5cGUuTixTLnByb3RvdHlwZS5BPWZ1bmN0aW9uKHUsbCxoKXt2ZSh0aGlzLHUsMSksdGhpcy5hLkEobCxoKX0sUy5wcm90b3R5cGUud3JpdGVTcGxpdEZpeGVkNjQ9Uy5wcm90b3R5cGUuQSxTLnByb3RvdHlwZS5sPWZ1bmN0aW9uKHUsbCxoKXt2ZSh0aGlzLHUsMCksdGhpcy5hLmwobCxoKX0sUy5wcm90b3R5cGUud3JpdGVTcGxpdFZhcmludDY0PVMucHJvdG90eXBlLmwsUy5wcm90b3R5cGUudGI9ZnVuY3Rpb24odSxsLGgpe3ZlKHRoaXMsdSwwKTt2YXIgUD10aGlzLmE7RChsLGgsZnVuY3Rpb24oTixLKXtQLmwoTj4+PjAsSz4+PjApfSl9LFMucHJvdG90eXBlLndyaXRlU3BsaXRaaWd6YWdWYXJpbnQ2ND1TLnByb3RvdHlwZS50YixTLnByb3RvdHlwZS5FZD1mdW5jdGlvbih1LGwpe2lmKGwhPW51bGwpZm9yKHZhciBoPTA7aDxsLmxlbmd0aDtoKyspZGEodGhpcyx1LGxbaF0pfSxTLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkSW50MzI9Uy5wcm90b3R5cGUuRWQsUy5wcm90b3R5cGUuRmQ9ZnVuY3Rpb24odSxsKXtpZihsIT1udWxsKWZvcih2YXIgaD0wO2g8bC5sZW5ndGg7aCsrKXRoaXMub2IodSxsW2hdKX0sUy5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEludDMyU3RyaW5nPVMucHJvdG90eXBlLkZkLFMucHJvdG90eXBlLkdkPWZ1bmN0aW9uKHUsbCl7aWYobCE9bnVsbClmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl7dmFyIFA9bFtoXTtQIT1udWxsJiYodmUodGhpcyx1LDApLHRoaXMuYS51YShQKSl9fSxTLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkSW50NjQ9Uy5wcm90b3R5cGUuR2QsUy5wcm90b3R5cGUuUWQ9ZnVuY3Rpb24odSxsLGgsUCl7aWYobCE9bnVsbClmb3IodmFyIE49MDtOPGwubGVuZ3RoO04rKyl0aGlzLkEodSxoKGxbTl0pLFAobFtOXSkpfSxTLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkU3BsaXRGaXhlZDY0PVMucHJvdG90eXBlLlFkLFMucHJvdG90eXBlLlJkPWZ1bmN0aW9uKHUsbCxoLFApe2lmKGwhPW51bGwpZm9yKHZhciBOPTA7TjxsLmxlbmd0aDtOKyspdGhpcy5sKHUsaChsW05dKSxQKGxbTl0pKX0sUy5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFNwbGl0VmFyaW50NjQ9Uy5wcm90b3R5cGUuUmQsUy5wcm90b3R5cGUuU2Q9ZnVuY3Rpb24odSxsLGgsUCl7aWYobCE9bnVsbClmb3IodmFyIE49MDtOPGwubGVuZ3RoO04rKyl0aGlzLnRiKHUsaChsW05dKSxQKGxbTl0pKX0sUy5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFNwbGl0WmlnemFnVmFyaW50NjQ9Uy5wcm90b3R5cGUuU2QsUy5wcm90b3R5cGUuSGQ9ZnVuY3Rpb24odSxsKXtpZihsIT1udWxsKWZvcih2YXIgaD0wO2g8bC5sZW5ndGg7aCsrKXRoaXMua2EodSxsW2hdKX0sUy5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEludDY0U3RyaW5nPVMucHJvdG90eXBlLkhkLFMucHJvdG90eXBlLlVkPWZ1bmN0aW9uKHUsbCl7aWYobCE9bnVsbClmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKylBcih0aGlzLHUsbFtoXSl9LFMucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRVaW50MzI9Uy5wcm90b3R5cGUuVWQsUy5wcm90b3R5cGUuVmQ9ZnVuY3Rpb24odSxsKXtpZihsIT1udWxsKWZvcih2YXIgaD0wO2g8bC5sZW5ndGg7aCsrKXRoaXMudWIodSxsW2hdKX0sUy5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFVpbnQzMlN0cmluZz1TLnByb3RvdHlwZS5WZCxTLnByb3RvdHlwZS5XZD1mdW5jdGlvbih1LGwpe2lmKGwhPW51bGwpZm9yKHZhciBoPTA7aDxsLmxlbmd0aDtoKyspe3ZhciBQPWxbaF07UCE9bnVsbCYmKHZlKHRoaXMsdSwwKSx0aGlzLmEudmEoUCkpfX0sUy5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFVpbnQ2ND1TLnByb3RvdHlwZS5XZCxTLnByb3RvdHlwZS5YZD1mdW5jdGlvbih1LGwpe2lmKGwhPW51bGwpZm9yKHZhciBoPTA7aDxsLmxlbmd0aDtoKyspdGhpcy52Yih1LGxbaF0pfSxTLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkVWludDY0U3RyaW5nPVMucHJvdG90eXBlLlhkLFMucHJvdG90eXBlLk1kPWZ1bmN0aW9uKHUsbCl7aWYobCE9bnVsbClmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl7dmFyIFA9bFtoXTtQIT1udWxsJiYodmUodGhpcyx1LDApLHRoaXMuYS53YShQKSl9fSxTLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkU2ludDMyPVMucHJvdG90eXBlLk1kLFMucHJvdG90eXBlLk5kPWZ1bmN0aW9uKHUsbCl7aWYobCE9bnVsbClmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl7dmFyIFA9bFtoXTtQIT1udWxsJiYodmUodGhpcyx1LDApLHRoaXMuYS54YShQKSl9fSxTLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkU2ludDY0PVMucHJvdG90eXBlLk5kLFMucHJvdG90eXBlLk9kPWZ1bmN0aW9uKHUsbCl7aWYobCE9bnVsbClmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl7dmFyIFA9bFtoXTtQIT1udWxsJiYodmUodGhpcyx1LDApLHRoaXMuYS5UYShQKSl9fSxTLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkU2ludDY0U3RyaW5nPVMucHJvdG90eXBlLk9kLFMucHJvdG90eXBlLlBkPWZ1bmN0aW9uKHUsbCl7aWYobCE9bnVsbClmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl7dmFyIFA9bFtoXTtQIT1udWxsJiYodmUodGhpcyx1LDApLHRoaXMuYS5XKFApKX19LFMucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTaW50SGFzaDY0PVMucHJvdG90eXBlLlBkLFMucHJvdG90eXBlLnlkPWZ1bmN0aW9uKHUsbCl7aWYobCE9bnVsbClmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl0aGlzLlBhKHUsbFtoXSl9LFMucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRGaXhlZDMyPVMucHJvdG90eXBlLnlkLFMucHJvdG90eXBlLnpkPWZ1bmN0aW9uKHUsbCl7aWYobCE9bnVsbClmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl0aGlzLlFhKHUsbFtoXSl9LFMucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRGaXhlZDY0PVMucHJvdG90eXBlLnpkLFMucHJvdG90eXBlLkFkPWZ1bmN0aW9uKHUsbCl7aWYobCE9bnVsbClmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl0aGlzLm5iKHUsbFtoXSl9LFMucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRGaXhlZDY0U3RyaW5nPVMucHJvdG90eXBlLkFkLFMucHJvdG90eXBlLkpkPWZ1bmN0aW9uKHUsbCl7aWYobCE9bnVsbClmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl0aGlzLlJhKHUsbFtoXSl9LFMucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTZml4ZWQzMj1TLnByb3RvdHlwZS5KZCxTLnByb3RvdHlwZS5LZD1mdW5jdGlvbih1LGwpe2lmKGwhPW51bGwpZm9yKHZhciBoPTA7aDxsLmxlbmd0aDtoKyspdGhpcy5TYSh1LGxbaF0pfSxTLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkU2ZpeGVkNjQ9Uy5wcm90b3R5cGUuS2QsUy5wcm90b3R5cGUuTGQ9ZnVuY3Rpb24odSxsKXtpZihsIT1udWxsKWZvcih2YXIgaD0wO2g8bC5sZW5ndGg7aCsrKXRoaXMucWIodSxsW2hdKX0sUy5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFNmaXhlZDY0U3RyaW5nPVMucHJvdG90eXBlLkxkLFMucHJvdG90eXBlLkNkPWZ1bmN0aW9uKHUsbCl7aWYobCE9bnVsbClmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl0aGlzLkwodSxsW2hdKX0sUy5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEZsb2F0PVMucHJvdG90eXBlLkNkLFMucHJvdG90eXBlLndkPWZ1bmN0aW9uKHUsbCl7aWYobCE9bnVsbClmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl0aGlzLkoodSxsW2hdKX0sUy5wcm90b3R5cGUud3JpdGVSZXBlYXRlZERvdWJsZT1TLnByb3RvdHlwZS53ZCxTLnByb3RvdHlwZS51ZD1mdW5jdGlvbih1LGwpe2lmKGwhPW51bGwpZm9yKHZhciBoPTA7aDxsLmxlbmd0aDtoKyspdGhpcy5JKHUsbFtoXSl9LFMucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRCb29sPVMucHJvdG90eXBlLnVkLFMucHJvdG90eXBlLnhkPWZ1bmN0aW9uKHUsbCl7aWYobCE9bnVsbClmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl0aGlzLlIodSxsW2hdKX0sUy5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEVudW09Uy5wcm90b3R5cGUueGQsUy5wcm90b3R5cGUuVGQ9ZnVuY3Rpb24odSxsKXtpZihsIT1udWxsKWZvcih2YXIgaD0wO2g8bC5sZW5ndGg7aCsrKXRoaXMuVSh1LGxbaF0pfSxTLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkU3RyaW5nPVMucHJvdG90eXBlLlRkLFMucHJvdG90eXBlLnZkPWZ1bmN0aW9uKHUsbCl7aWYobCE9bnVsbClmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl0aGlzLmphKHUsbFtoXSl9LFMucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRCeXRlcz1TLnByb3RvdHlwZS52ZCxTLnByb3RvdHlwZS5JZD1mdW5jdGlvbih1LGwsaCl7aWYobCE9bnVsbClmb3IodmFyIFA9MDtQPGwubGVuZ3RoO1ArKyl7dmFyIE49YXQodGhpcyx1KTtoKGxbUF0sdGhpcyksaXQodGhpcyxOKX19LFMucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRNZXNzYWdlPVMucHJvdG90eXBlLklkLFMucHJvdG90eXBlLkRkPWZ1bmN0aW9uKHUsbCxoKXtpZihsIT1udWxsKWZvcih2YXIgUD0wO1A8bC5sZW5ndGg7UCsrKXZlKHRoaXMsdSwzKSxoKGxbUF0sdGhpcyksdmUodGhpcyx1LDQpfSxTLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkR3JvdXA9Uy5wcm90b3R5cGUuRGQsUy5wcm90b3R5cGUuQmQ9ZnVuY3Rpb24odSxsKXtpZihsIT1udWxsKWZvcih2YXIgaD0wO2g8bC5sZW5ndGg7aCsrKXRoaXMuSyh1LGxbaF0pfSxTLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkRml4ZWRIYXNoNjQ9Uy5wcm90b3R5cGUuQmQsUy5wcm90b3R5cGUuWWQ9ZnVuY3Rpb24odSxsKXtpZihsIT1udWxsKWZvcih2YXIgaD0wO2g8bC5sZW5ndGg7aCsrKXRoaXMuTih1LGxbaF0pfSxTLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkVmFyaW50SGFzaDY0PVMucHJvdG90eXBlLllkLFMucHJvdG90eXBlLmFkPWZ1bmN0aW9uKHUsbCl7aWYobCE9bnVsbCYmbC5sZW5ndGgpe3U9YXQodGhpcyx1KTtmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl0aGlzLmEuTShsW2hdKTtpdCh0aGlzLHUpfX0sUy5wcm90b3R5cGUud3JpdGVQYWNrZWRJbnQzMj1TLnByb3RvdHlwZS5hZCxTLnByb3RvdHlwZS5iZD1mdW5jdGlvbih1LGwpe2lmKGwhPW51bGwmJmwubGVuZ3RoKXt1PWF0KHRoaXMsdSk7Zm9yKHZhciBoPTA7aDxsLmxlbmd0aDtoKyspdGhpcy5hLk0ocGFyc2VJbnQobFtoXSwxMCkpO2l0KHRoaXMsdSl9fSxTLnByb3RvdHlwZS53cml0ZVBhY2tlZEludDMyU3RyaW5nPVMucHJvdG90eXBlLmJkLFMucHJvdG90eXBlLmNkPWZ1bmN0aW9uKHUsbCl7aWYobCE9bnVsbCYmbC5sZW5ndGgpe3U9YXQodGhpcyx1KTtmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl0aGlzLmEudWEobFtoXSk7aXQodGhpcyx1KX19LFMucHJvdG90eXBlLndyaXRlUGFja2VkSW50NjQ9Uy5wcm90b3R5cGUuY2QsUy5wcm90b3R5cGUubWQ9ZnVuY3Rpb24odSxsLGgsUCl7aWYobCE9bnVsbCl7dT1hdCh0aGlzLHUpO2Zvcih2YXIgTj0wO048bC5sZW5ndGg7TisrKXRoaXMuYS5BKGgobFtOXSksUChsW05dKSk7aXQodGhpcyx1KX19LFMucHJvdG90eXBlLndyaXRlUGFja2VkU3BsaXRGaXhlZDY0PVMucHJvdG90eXBlLm1kLFMucHJvdG90eXBlLm5kPWZ1bmN0aW9uKHUsbCxoLFApe2lmKGwhPW51bGwpe3U9YXQodGhpcyx1KTtmb3IodmFyIE49MDtOPGwubGVuZ3RoO04rKyl0aGlzLmEubChoKGxbTl0pLFAobFtOXSkpO2l0KHRoaXMsdSl9fSxTLnByb3RvdHlwZS53cml0ZVBhY2tlZFNwbGl0VmFyaW50NjQ9Uy5wcm90b3R5cGUubmQsUy5wcm90b3R5cGUub2Q9ZnVuY3Rpb24odSxsLGgsUCl7aWYobCE9bnVsbCl7dT1hdCh0aGlzLHUpO2Zvcih2YXIgTj10aGlzLmEsSz0wO0s8bC5sZW5ndGg7SysrKUQoaChsW0tdKSxQKGxbS10pLGZ1bmN0aW9uKHJlLHdlKXtOLmwocmU+Pj4wLHdlPj4+MCl9KTtpdCh0aGlzLHUpfX0sUy5wcm90b3R5cGUud3JpdGVQYWNrZWRTcGxpdFppZ3phZ1ZhcmludDY0PVMucHJvdG90eXBlLm9kLFMucHJvdG90eXBlLmRkPWZ1bmN0aW9uKHUsbCl7aWYobCE9bnVsbCYmbC5sZW5ndGgpe3U9YXQodGhpcyx1KTtmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl7dmFyIFA9S28obFtoXSk7dGhpcy5hLmwoUC5sbyxQLmhpKX1pdCh0aGlzLHUpfX0sUy5wcm90b3R5cGUud3JpdGVQYWNrZWRJbnQ2NFN0cmluZz1TLnByb3RvdHlwZS5kZCxTLnByb3RvdHlwZS5wZD1mdW5jdGlvbih1LGwpe2lmKGwhPW51bGwmJmwubGVuZ3RoKXt1PWF0KHRoaXMsdSk7Zm9yKHZhciBoPTA7aDxsLmxlbmd0aDtoKyspdGhpcy5hLmoobFtoXSk7aXQodGhpcyx1KX19LFMucHJvdG90eXBlLndyaXRlUGFja2VkVWludDMyPVMucHJvdG90eXBlLnBkLFMucHJvdG90eXBlLnFkPWZ1bmN0aW9uKHUsbCl7aWYobCE9bnVsbCYmbC5sZW5ndGgpe3U9YXQodGhpcyx1KTtmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl0aGlzLmEuaihwYXJzZUludChsW2hdLDEwKSk7aXQodGhpcyx1KX19LFMucHJvdG90eXBlLndyaXRlUGFja2VkVWludDMyU3RyaW5nPVMucHJvdG90eXBlLnFkLFMucHJvdG90eXBlLnJkPWZ1bmN0aW9uKHUsbCl7aWYobCE9bnVsbCYmbC5sZW5ndGgpe3U9YXQodGhpcyx1KTtmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl0aGlzLmEudmEobFtoXSk7aXQodGhpcyx1KX19LFMucHJvdG90eXBlLndyaXRlUGFja2VkVWludDY0PVMucHJvdG90eXBlLnJkLFMucHJvdG90eXBlLnNkPWZ1bmN0aW9uKHUsbCl7aWYobCE9bnVsbCYmbC5sZW5ndGgpe3U9YXQodGhpcyx1KTtmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl7dmFyIFA9Rm4obFtoXSk7dGhpcy5hLmwoUC5sbyxQLmhpKX1pdCh0aGlzLHUpfX0sUy5wcm90b3R5cGUud3JpdGVQYWNrZWRVaW50NjRTdHJpbmc9Uy5wcm90b3R5cGUuc2QsUy5wcm90b3R5cGUuaGQ9ZnVuY3Rpb24odSxsKXtpZihsIT1udWxsJiZsLmxlbmd0aCl7dT1hdCh0aGlzLHUpO2Zvcih2YXIgaD0wO2g8bC5sZW5ndGg7aCsrKXRoaXMuYS53YShsW2hdKTtpdCh0aGlzLHUpfX0sUy5wcm90b3R5cGUud3JpdGVQYWNrZWRTaW50MzI9Uy5wcm90b3R5cGUuaGQsUy5wcm90b3R5cGUuamQ9ZnVuY3Rpb24odSxsKXtpZihsIT1udWxsJiZsLmxlbmd0aCl7dT1hdCh0aGlzLHUpO2Zvcih2YXIgaD0wO2g8bC5sZW5ndGg7aCsrKXRoaXMuYS54YShsW2hdKTtpdCh0aGlzLHUpfX0sUy5wcm90b3R5cGUud3JpdGVQYWNrZWRTaW50NjQ9Uy5wcm90b3R5cGUuamQsUy5wcm90b3R5cGUua2Q9ZnVuY3Rpb24odSxsKXtpZihsIT1udWxsJiZsLmxlbmd0aCl7dT1hdCh0aGlzLHUpO2Zvcih2YXIgaD0wO2g8bC5sZW5ndGg7aCsrKXRoaXMuYS5XKFZlKGxbaF0pKTtpdCh0aGlzLHUpfX0sUy5wcm90b3R5cGUud3JpdGVQYWNrZWRTaW50NjRTdHJpbmc9Uy5wcm90b3R5cGUua2QsUy5wcm90b3R5cGUubGQ9ZnVuY3Rpb24odSxsKXtpZihsIT1udWxsJiZsLmxlbmd0aCl7dT1hdCh0aGlzLHUpO2Zvcih2YXIgaD0wO2g8bC5sZW5ndGg7aCsrKXRoaXMuYS5XKGxbaF0pO2l0KHRoaXMsdSl9fSxTLnByb3RvdHlwZS53cml0ZVBhY2tlZFNpbnRIYXNoNjQ9Uy5wcm90b3R5cGUubGQsUy5wcm90b3R5cGUuV2M9ZnVuY3Rpb24odSxsKXtpZihsIT1udWxsJiZsLmxlbmd0aClmb3IodmUodGhpcyx1LDIpLHRoaXMuYS5qKDQqbC5sZW5ndGgpLHU9MDt1PGwubGVuZ3RoO3UrKyl0aGlzLmEucyhsW3VdKX0sUy5wcm90b3R5cGUud3JpdGVQYWNrZWRGaXhlZDMyPVMucHJvdG90eXBlLldjLFMucHJvdG90eXBlLlhjPWZ1bmN0aW9uKHUsbCl7aWYobCE9bnVsbCYmbC5sZW5ndGgpZm9yKHZlKHRoaXMsdSwyKSx0aGlzLmEuaig4KmwubGVuZ3RoKSx1PTA7dTxsLmxlbmd0aDt1KyspdGhpcy5hLlYobFt1XSl9LFMucHJvdG90eXBlLndyaXRlUGFja2VkRml4ZWQ2ND1TLnByb3RvdHlwZS5YYyxTLnByb3RvdHlwZS5ZYz1mdW5jdGlvbih1LGwpe2lmKGwhPW51bGwmJmwubGVuZ3RoKWZvcih2ZSh0aGlzLHUsMiksdGhpcy5hLmooOCpsLmxlbmd0aCksdT0wO3U8bC5sZW5ndGg7dSsrKXt2YXIgaD1GbihsW3VdKTt0aGlzLmEuQShoLmxvLGguaGkpfX0sUy5wcm90b3R5cGUud3JpdGVQYWNrZWRGaXhlZDY0U3RyaW5nPVMucHJvdG90eXBlLlljLFMucHJvdG90eXBlLmVkPWZ1bmN0aW9uKHUsbCl7aWYobCE9bnVsbCYmbC5sZW5ndGgpZm9yKHZlKHRoaXMsdSwyKSx0aGlzLmEuaig0KmwubGVuZ3RoKSx1PTA7dTxsLmxlbmd0aDt1KyspdGhpcy5hLlMobFt1XSl9LFMucHJvdG90eXBlLndyaXRlUGFja2VkU2ZpeGVkMzI9Uy5wcm90b3R5cGUuZWQsUy5wcm90b3R5cGUuZmQ9ZnVuY3Rpb24odSxsKXtpZihsIT1udWxsJiZsLmxlbmd0aClmb3IodmUodGhpcyx1LDIpLHRoaXMuYS5qKDgqbC5sZW5ndGgpLHU9MDt1PGwubGVuZ3RoO3UrKyl0aGlzLmEuVChsW3VdKX0sUy5wcm90b3R5cGUud3JpdGVQYWNrZWRTZml4ZWQ2ND1TLnByb3RvdHlwZS5mZCxTLnByb3RvdHlwZS5nZD1mdW5jdGlvbih1LGwpe2lmKGwhPW51bGwmJmwubGVuZ3RoKWZvcih2ZSh0aGlzLHUsMiksdGhpcy5hLmooOCpsLmxlbmd0aCksdT0wO3U8bC5sZW5ndGg7dSsrKXRoaXMuYS5rYShsW3VdKX0sUy5wcm90b3R5cGUud3JpdGVQYWNrZWRTZml4ZWQ2NFN0cmluZz1TLnByb3RvdHlwZS5nZCxTLnByb3RvdHlwZS4kYz1mdW5jdGlvbih1LGwpe2lmKGwhPW51bGwmJmwubGVuZ3RoKWZvcih2ZSh0aGlzLHUsMiksdGhpcy5hLmooNCpsLmxlbmd0aCksdT0wO3U8bC5sZW5ndGg7dSsrKXRoaXMuYS5MKGxbdV0pfSxTLnByb3RvdHlwZS53cml0ZVBhY2tlZEZsb2F0PVMucHJvdG90eXBlLiRjLFMucHJvdG90eXBlLlVjPWZ1bmN0aW9uKHUsbCl7aWYobCE9bnVsbCYmbC5sZW5ndGgpZm9yKHZlKHRoaXMsdSwyKSx0aGlzLmEuaig4KmwubGVuZ3RoKSx1PTA7dTxsLmxlbmd0aDt1KyspdGhpcy5hLkoobFt1XSl9LFMucHJvdG90eXBlLndyaXRlUGFja2VkRG91YmxlPVMucHJvdG90eXBlLlVjLFMucHJvdG90eXBlLlRjPWZ1bmN0aW9uKHUsbCl7aWYobCE9bnVsbCYmbC5sZW5ndGgpZm9yKHZlKHRoaXMsdSwyKSx0aGlzLmEuaihsLmxlbmd0aCksdT0wO3U8bC5sZW5ndGg7dSsrKXRoaXMuYS5JKGxbdV0pfSxTLnByb3RvdHlwZS53cml0ZVBhY2tlZEJvb2w9Uy5wcm90b3R5cGUuVGMsUy5wcm90b3R5cGUuVmM9ZnVuY3Rpb24odSxsKXtpZihsIT1udWxsJiZsLmxlbmd0aCl7dT1hdCh0aGlzLHUpO2Zvcih2YXIgaD0wO2g8bC5sZW5ndGg7aCsrKXRoaXMuYS5SKGxbaF0pO2l0KHRoaXMsdSl9fSxTLnByb3RvdHlwZS53cml0ZVBhY2tlZEVudW09Uy5wcm90b3R5cGUuVmMsUy5wcm90b3R5cGUuWmM9ZnVuY3Rpb24odSxsKXtpZihsIT1udWxsJiZsLmxlbmd0aClmb3IodmUodGhpcyx1LDIpLHRoaXMuYS5qKDgqbC5sZW5ndGgpLHU9MDt1PGwubGVuZ3RoO3UrKyl0aGlzLmEuSyhsW3VdKX0sUy5wcm90b3R5cGUud3JpdGVQYWNrZWRGaXhlZEhhc2g2ND1TLnByb3RvdHlwZS5aYyxTLnByb3RvdHlwZS50ZD1mdW5jdGlvbih1LGwpe2lmKGwhPW51bGwmJmwubGVuZ3RoKXt1PWF0KHRoaXMsdSk7Zm9yKHZhciBoPTA7aDxsLmxlbmd0aDtoKyspdGhpcy5hLk4obFtoXSk7aXQodGhpcyx1KX19LFMucHJvdG90eXBlLndyaXRlUGFja2VkVmFyaW50SGFzaDY0PVMucHJvdG90eXBlLnRkLG4uZGVidWc9ZnIsbi5NYXA9TyxuLk1lc3NhZ2U9aGUsbi5CaW5hcnlSZWFkZXI9VSxuLkJpbmFyeVdyaXRlcj1TLG4uRXh0ZW5zaW9uRmllbGRJbmZvPXNvLG4uRXh0ZW5zaW9uRmllbGRCaW5hcnlJbmZvPXBpLG4uZXhwb3J0U3ltYm9sPWcsbi5pbmhlcml0cz1BLG4ub2JqZWN0PXtleHRlbmQ6d30sbi50eXBlT2Y9VH0pKE5yKTsoZnVuY3Rpb24obil7dmFyIGU9TnIsdD1lLGE9dHlwZW9mIGdsb2JhbFRoaXM8InUiJiZnbG9iYWxUaGlzfHx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93fHx0eXBlb2YgYTwidSImJmF8fHR5cGVvZiBzZWxmPCJ1IiYmc2VsZnx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30uY2FsbChudWxsKXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKTt0LmV4cG9ydFN5bWJvbCgicHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueSIsbnVsbCxhKSxwcm90by5nb29nbGUucHJvdG9idWYuQW55PWZ1bmN0aW9uKHMpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMscywwLC0xLG51bGwsbnVsbCl9LHQuaW5oZXJpdHMocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueSxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkuZGlzcGxheU5hbWU9InByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkiKSxlLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocyl7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkudG9PYmplY3Qocyx0aGlzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS50b09iamVjdD1mdW5jdGlvbihzLHIpe3ZhciBvPXt0eXBlVXJsOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHIsMSwiIiksdmFsdWU6ci5nZXRWYWx1ZV9hc0I2NCgpfTtyZXR1cm4gcyYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9ciksb30pLHByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocyl7dmFyIHI9bmV3IGUuQmluYXJ5UmVhZGVyKHMpLG89bmV3IHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Bbnk7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8scil9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHMscil7Zm9yKDtyLm5leHRGaWVsZCgpJiYhci5pc0VuZEdyb3VwKCk7KXt2YXIgbz1yLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKG8pe2Nhc2UgMTp2YXIgaT1yLnJlYWRTdHJpbmcoKTtzLnNldFR5cGVVcmwoaSk7YnJlYWs7Y2FzZSAyOnZhciBpPXIucmVhZEJ5dGVzKCk7cy5zZXRWYWx1ZShpKTticmVhaztkZWZhdWx0OnIuc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiBzfSxwcm90by5nb29nbGUucHJvdG9idWYuQW55LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcz1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmdvb2dsZS5wcm90b2J1Zi5Bbnkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxzKSxzLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5nb29nbGUucHJvdG9idWYuQW55LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHMscil7dmFyIG89dm9pZCAwO289cy5nZXRUeXBlVXJsKCksby5sZW5ndGg+MCYmci53cml0ZVN0cmluZygxLG8pLG89cy5nZXRWYWx1ZV9hc1U4KCksby5sZW5ndGg+MCYmci53cml0ZUJ5dGVzKDIsbyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkucHJvdG90eXBlLmdldFR5cGVVcmw9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLCIiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5wcm90b3R5cGUuc2V0VHlwZVVybD1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMSxzKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLCIiKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5wcm90b3R5cGUuZ2V0VmFsdWVfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRWYWx1ZSgpKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5wcm90b3R5cGUuZ2V0VmFsdWVfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0VmFsdWUoKSl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDIscyl9LHQub2JqZWN0LmV4dGVuZChuLHByb3RvLmdvb2dsZS5wcm90b2J1ZikscHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5wcm90b3R5cGUuZ2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUeXBlVXJsKCkuc3BsaXQoIi8iKS5wb3AoKX0scHJvdG8uZ29vZ2xlLnByb3RvYnVmLkFueS5wcm90b3R5cGUucGFjaz1mdW5jdGlvbihzLHIsbyl7b3x8KG89InR5cGUuZ29vZ2xlYXBpcy5jb20vIiksby5zdWJzdHIoLTEpIT0iLyI/dGhpcy5zZXRUeXBlVXJsKG8rIi8iK3IpOnRoaXMuc2V0VHlwZVVybChvK3IpLHRoaXMuc2V0VmFsdWUocyl9LHByb3RvLmdvb2dsZS5wcm90b2J1Zi5BbnkucHJvdG90eXBlLnVucGFjaz1mdW5jdGlvbihzLHIpe3JldHVybiB0aGlzLmdldFR5cGVOYW1lKCk9PXI/cyh0aGlzLmdldFZhbHVlX2FzVTgoKSk6bnVsbH19KShhMCk7Y29uc3QgTnY9VGQoYTApO3ZhciBpMD17fTsoZnVuY3Rpb24obil7dmFyIGU9TnIsdD1lLGE9dHlwZW9mIGdsb2JhbFRoaXM8InUiJiZnbG9iYWxUaGlzfHx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93fHx0eXBlb2YgYTwidSImJmF8fHR5cGVvZiBzZWxmPCJ1IiYmc2VsZnx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30uY2FsbChudWxsKXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxzPWEwO3Qub2JqZWN0LmV4dGVuZChwcm90byxzKSx0LmV4cG9ydFN5bWJvbCgiVHJvbldlYlByb3RvLkFjY291bnQiLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5BY2NvdW50LkFjY291bnRSZXNvdXJjZSIsbnVsbCxhKSx0LmV4cG9ydFN5bWJvbCgiVHJvbldlYlByb3RvLkFjY291bnQuRnJvemVuIixudWxsLGEpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uQWNjb3VudElkIixudWxsLGEpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uQWNjb3VudFR5cGUiLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5EZWxlZ2F0ZWRSZXNvdXJjZSIsbnVsbCxhKSx0LmV4cG9ydFN5bWJvbCgiVHJvbldlYlByb3RvLkV4Y2hhbmdlIixudWxsLGEpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uS2V5IixudWxsLGEpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uTWFya2V0T3JkZXJEZXRhaWwiLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5QZXJtaXNzaW9uIixudWxsLGEpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uUGVybWlzc2lvbi5QZXJtaXNzaW9uVHlwZSIsbnVsbCxhKSx0LmV4cG9ydFN5bWJvbCgiVHJvbldlYlByb3RvLlByb3Bvc2FsIixudWxsLGEpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uUHJvcG9zYWwuU3RhdGUiLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5UcmFuc2FjdGlvbiIsbnVsbCxhKSx0LmV4cG9ydFN5bWJvbCgiVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLkNvbnRyYWN0IixudWxsLGEpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uQ29udHJhY3QuQ29udHJhY3RUeXBlIixudWxsLGEpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uUmVzdWx0IixudWxsLGEpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uUmVzdWx0LmNvZGUiLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5SZXN1bHQuY29udHJhY3RSZXN1bHQiLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5yYXciLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5Wb3RlIixudWxsLGEpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uVm90ZXMiLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5XaXRuZXNzIixudWxsLGEpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uYXV0aG9yaXR5IixudWxsLGEpLFRyb25XZWJQcm90by5BY2NvdW50SWQ9ZnVuY3Rpb24ocil7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxyLDAsLTEsbnVsbCxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uQWNjb3VudElkLGUuTWVzc2FnZSksdC5ERUJVRyYmIUNPTVBJTEVEJiYoVHJvbldlYlByb3RvLkFjY291bnRJZC5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLkFjY291bnRJZCIpLFRyb25XZWJQcm90by5Wb3RlPWZ1bmN0aW9uKHIpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsciwwLC0xLG51bGwsbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLlZvdGUsZS5NZXNzYWdlKSx0LkRFQlVHJiYhQ09NUElMRUQmJihUcm9uV2ViUHJvdG8uVm90ZS5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLlZvdGUiKSxUcm9uV2ViUHJvdG8uUHJvcG9zYWw9ZnVuY3Rpb24ocil7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxyLDAsLTEsVHJvbldlYlByb3RvLlByb3Bvc2FsLnJlcGVhdGVkRmllbGRzXyxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uUHJvcG9zYWwsZS5NZXNzYWdlKSx0LkRFQlVHJiYhQ09NUElMRUQmJihUcm9uV2ViUHJvdG8uUHJvcG9zYWwuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5Qcm9wb3NhbCIpLFRyb25XZWJQcm90by5FeGNoYW5nZT1mdW5jdGlvbihyKXtlLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLHIsMCwtMSxudWxsLG51bGwpfSx0LmluaGVyaXRzKFRyb25XZWJQcm90by5FeGNoYW5nZSxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5FeGNoYW5nZS5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLkV4Y2hhbmdlIiksVHJvbldlYlByb3RvLkFjY291bnQ9ZnVuY3Rpb24ocil7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxyLDAsLTEsVHJvbldlYlByb3RvLkFjY291bnQucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSx0LmluaGVyaXRzKFRyb25XZWJQcm90by5BY2NvdW50LGUuTWVzc2FnZSksdC5ERUJVRyYmIUNPTVBJTEVEJiYoVHJvbldlYlByb3RvLkFjY291bnQuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5BY2NvdW50IiksVHJvbldlYlByb3RvLkFjY291bnQuRnJvemVuPWZ1bmN0aW9uKHIpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsciwwLC0xLG51bGwsbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLkFjY291bnQuRnJvemVuLGUuTWVzc2FnZSksdC5ERUJVRyYmIUNPTVBJTEVEJiYoVHJvbldlYlByb3RvLkFjY291bnQuRnJvemVuLmRpc3BsYXlOYW1lPSJUcm9uV2ViUHJvdG8uQWNjb3VudC5Gcm96ZW4iKSxUcm9uV2ViUHJvdG8uQWNjb3VudC5BY2NvdW50UmVzb3VyY2U9ZnVuY3Rpb24ocil7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxyLDAsLTEsbnVsbCxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uQWNjb3VudC5BY2NvdW50UmVzb3VyY2UsZS5NZXNzYWdlKSx0LkRFQlVHJiYhQ09NUElMRUQmJihUcm9uV2ViUHJvdG8uQWNjb3VudC5BY2NvdW50UmVzb3VyY2UuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5BY2NvdW50LkFjY291bnRSZXNvdXJjZSIpLFRyb25XZWJQcm90by5LZXk9ZnVuY3Rpb24ocil7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxyLDAsLTEsbnVsbCxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uS2V5LGUuTWVzc2FnZSksdC5ERUJVRyYmIUNPTVBJTEVEJiYoVHJvbldlYlByb3RvLktleS5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLktleSIpLFRyb25XZWJQcm90by5EZWxlZ2F0ZWRSZXNvdXJjZT1mdW5jdGlvbihyKXtlLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLHIsMCwtMSxudWxsLG51bGwpfSx0LmluaGVyaXRzKFRyb25XZWJQcm90by5EZWxlZ2F0ZWRSZXNvdXJjZSxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5EZWxlZ2F0ZWRSZXNvdXJjZS5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLkRlbGVnYXRlZFJlc291cmNlIiksVHJvbldlYlByb3RvLmF1dGhvcml0eT1mdW5jdGlvbihyKXtlLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLHIsMCwtMSxudWxsLG51bGwpfSx0LmluaGVyaXRzKFRyb25XZWJQcm90by5hdXRob3JpdHksZS5NZXNzYWdlKSx0LkRFQlVHJiYhQ09NUElMRUQmJihUcm9uV2ViUHJvdG8uYXV0aG9yaXR5LmRpc3BsYXlOYW1lPSJUcm9uV2ViUHJvdG8uYXV0aG9yaXR5IiksVHJvbldlYlByb3RvLlBlcm1pc3Npb249ZnVuY3Rpb24ocil7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxyLDAsLTEsVHJvbldlYlByb3RvLlBlcm1pc3Npb24ucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSx0LmluaGVyaXRzKFRyb25XZWJQcm90by5QZXJtaXNzaW9uLGUuTWVzc2FnZSksdC5ERUJVRyYmIUNPTVBJTEVEJiYoVHJvbldlYlByb3RvLlBlcm1pc3Npb24uZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5QZXJtaXNzaW9uIiksVHJvbldlYlByb3RvLldpdG5lc3M9ZnVuY3Rpb24ocil7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxyLDAsLTEsbnVsbCxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uV2l0bmVzcyxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5XaXRuZXNzLmRpc3BsYXlOYW1lPSJUcm9uV2ViUHJvdG8uV2l0bmVzcyIpLFRyb25XZWJQcm90by5Wb3Rlcz1mdW5jdGlvbihyKXtlLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLHIsMCwtMSxUcm9uV2ViUHJvdG8uVm90ZXMucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSx0LmluaGVyaXRzKFRyb25XZWJQcm90by5Wb3RlcyxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5Wb3Rlcy5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLlZvdGVzIiksVHJvbldlYlByb3RvLk1hcmtldE9yZGVyRGV0YWlsPWZ1bmN0aW9uKHIpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsciwwLC0xLG51bGwsbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLk1hcmtldE9yZGVyRGV0YWlsLGUuTWVzc2FnZSksdC5ERUJVRyYmIUNPTVBJTEVEJiYoVHJvbldlYlByb3RvLk1hcmtldE9yZGVyRGV0YWlsLmRpc3BsYXlOYW1lPSJUcm9uV2ViUHJvdG8uTWFya2V0T3JkZXJEZXRhaWwiKSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb249ZnVuY3Rpb24ocil7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxyLDAsLTEsVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLnJlcGVhdGVkRmllbGRzXyxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24sZS5NZXNzYWdlKSx0LkRFQlVHJiYhQ09NUElMRUQmJihUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5UcmFuc2FjdGlvbiIpLFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5Db250cmFjdD1mdW5jdGlvbihyKXtlLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLHIsMCwtMSxudWxsLG51bGwpfSx0LmluaGVyaXRzKFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5Db250cmFjdCxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5Db250cmFjdC5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLkNvbnRyYWN0IiksVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLlJlc3VsdD1mdW5jdGlvbihyKXtlLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLHIsMCwtMSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uUmVzdWx0LnJlcGVhdGVkRmllbGRzXyxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uUmVzdWx0LGUuTWVzc2FnZSksdC5ERUJVRyYmIUNPTVBJTEVEJiYoVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLlJlc3VsdC5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLlJlc3VsdCIpLFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5yYXc9ZnVuY3Rpb24ocil7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxyLDAsLTEsVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLnJhdy5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLnJhdyxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5yYXcuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5yYXciKSxlLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYoVHJvbldlYlByb3RvLkFjY291bnRJZC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocil7cmV0dXJuIFRyb25XZWJQcm90by5BY2NvdW50SWQudG9PYmplY3Qocix0aGlzKX0sVHJvbldlYlByb3RvLkFjY291bnRJZC50b09iamVjdD1mdW5jdGlvbihyLG8pe3ZhciBpPXtuYW1lOm8uZ2V0TmFtZV9hc0I2NCgpLGFkZHJlc3M6by5nZXRBZGRyZXNzX2FzQjY0KCl9O3JldHVybiByJiYoaS4kanNwYk1lc3NhZ2VJbnN0YW5jZT1vKSxpfSksVHJvbldlYlByb3RvLkFjY291bnRJZC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihyKXt2YXIgbz1uZXcgZS5CaW5hcnlSZWFkZXIociksaT1uZXcgVHJvbldlYlByb3RvLkFjY291bnRJZDtyZXR1cm4gVHJvbldlYlByb3RvLkFjY291bnRJZC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaSxvKX0sVHJvbldlYlByb3RvLkFjY291bnRJZC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24ocixvKXtmb3IoO28ubmV4dEZpZWxkKCkmJiFvLmlzRW5kR3JvdXAoKTspe3ZhciBpPW8uZ2V0RmllbGROdW1iZXIoKTtzd2l0Y2goaSl7Y2FzZSAxOnZhciBjPW8ucmVhZEJ5dGVzKCk7ci5zZXROYW1lKGMpO2JyZWFrO2Nhc2UgMjp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0QWRkcmVzcyhjKTticmVhaztkZWZhdWx0Om8uc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiByfSxUcm9uV2ViUHJvdG8uQWNjb3VudElkLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcj1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIFRyb25XZWJQcm90by5BY2NvdW50SWQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxyKSxyLmdldFJlc3VsdEJ1ZmZlcigpfSxUcm9uV2ViUHJvdG8uQWNjb3VudElkLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHIsbyl7dmFyIGk9dm9pZCAwO2k9ci5nZXROYW1lX2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlQnl0ZXMoMSxpKSxpPXIuZ2V0QWRkcmVzc19hc1U4KCksaS5sZW5ndGg+MCYmby53cml0ZUJ5dGVzKDIsaSl9LFRyb25XZWJQcm90by5BY2NvdW50SWQucHJvdG90eXBlLmdldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLCIiKX0sVHJvbldlYlByb3RvLkFjY291bnRJZC5wcm90b3R5cGUuZ2V0TmFtZV9hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldE5hbWUoKSl9LFRyb25XZWJQcm90by5BY2NvdW50SWQucHJvdG90eXBlLmdldE5hbWVfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0TmFtZSgpKX0sVHJvbldlYlByb3RvLkFjY291bnRJZC5wcm90b3R5cGUuc2V0TmFtZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywxLHIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudElkLnByb3RvdHlwZS5nZXRBZGRyZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwiIil9LFRyb25XZWJQcm90by5BY2NvdW50SWQucHJvdG90eXBlLmdldEFkZHJlc3NfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uQWNjb3VudElkLnByb3RvdHlwZS5nZXRBZGRyZXNzX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldEFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5BY2NvdW50SWQucHJvdG90eXBlLnNldEFkZHJlc3M9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMixyKX0sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5Wb3RlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihyKXtyZXR1cm4gVHJvbldlYlByb3RvLlZvdGUudG9PYmplY3Qocix0aGlzKX0sVHJvbldlYlByb3RvLlZvdGUudG9PYmplY3Q9ZnVuY3Rpb24ocixvKXt2YXIgaT17dm90ZUFkZHJlc3M6by5nZXRWb3RlQWRkcmVzc19hc0I2NCgpLHZvdGVDb3VudDplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDIsMCl9O3JldHVybiByJiYoaS4kanNwYk1lc3NhZ2VJbnN0YW5jZT1vKSxpfSksVHJvbldlYlByb3RvLlZvdGUuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocil7dmFyIG89bmV3IGUuQmluYXJ5UmVhZGVyKHIpLGk9bmV3IFRyb25XZWJQcm90by5Wb3RlO3JldHVybiBUcm9uV2ViUHJvdG8uVm90ZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaSxvKX0sVHJvbldlYlByb3RvLlZvdGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHIsbyl7Zm9yKDtvLm5leHRGaWVsZCgpJiYhby5pc0VuZEdyb3VwKCk7KXt2YXIgaT1vLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKGkpe2Nhc2UgMTp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0Vm90ZUFkZHJlc3MoYyk7YnJlYWs7Y2FzZSAyOnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRWb3RlQ291bnQoYyk7YnJlYWs7ZGVmYXVsdDpvLnNraXBGaWVsZCgpO2JyZWFrfX1yZXR1cm4gcn0sVHJvbldlYlByb3RvLlZvdGUucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciByPW5ldyBlLkJpbmFyeVdyaXRlcjtyZXR1cm4gVHJvbldlYlByb3RvLlZvdGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxyKSxyLmdldFJlc3VsdEJ1ZmZlcigpfSxUcm9uV2ViUHJvdG8uVm90ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihyLG8pe3ZhciBpPXZvaWQgMDtpPXIuZ2V0Vm90ZUFkZHJlc3NfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcygxLGkpLGk9ci5nZXRWb3RlQ291bnQoKSxpIT09MCYmby53cml0ZUludDY0KDIsaSl9LFRyb25XZWJQcm90by5Wb3RlLnByb3RvdHlwZS5nZXRWb3RlQWRkcmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsIiIpfSxUcm9uV2ViUHJvdG8uVm90ZS5wcm90b3R5cGUuZ2V0Vm90ZUFkZHJlc3NfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRWb3RlQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlZvdGUucHJvdG90eXBlLmdldFZvdGVBZGRyZXNzX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldFZvdGVBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uVm90ZS5wcm90b3R5cGUuc2V0Vm90ZUFkZHJlc3M9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMSxyKX0sVHJvbldlYlByb3RvLlZvdGUucHJvdG90eXBlLmdldFZvdGVDb3VudD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsMCl9LFRyb25XZWJQcm90by5Wb3RlLnByb3RvdHlwZS5zZXRWb3RlQ291bnQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDIscil9LFRyb25XZWJQcm90by5Qcm9wb3NhbC5yZXBlYXRlZEZpZWxkc189WzZdLGUuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihUcm9uV2ViUHJvdG8uUHJvcG9zYWwucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKHIpe3JldHVybiBUcm9uV2ViUHJvdG8uUHJvcG9zYWwudG9PYmplY3Qocix0aGlzKX0sVHJvbldlYlByb3RvLlByb3Bvc2FsLnRvT2JqZWN0PWZ1bmN0aW9uKHIsbyl7dmFyIGksYz17cHJvcG9zYWxJZDplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDEsMCkscHJvcG9zZXJBZGRyZXNzOm8uZ2V0UHJvcG9zZXJBZGRyZXNzX2FzQjY0KCkscGFyYW1ldGVyc01hcDooaT1vLmdldFBhcmFtZXRlcnNNYXAoKSk/aS50b09iamVjdChyLHZvaWQgMCk6W10sZXhwaXJhdGlvblRpbWU6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobyw0LDApLGNyZWF0ZVRpbWU6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobyw1LDApLGFwcHJvdmFsc0xpc3Q6by5nZXRBcHByb3ZhbHNMaXN0X2FzQjY0KCksc3RhdGU6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobyw3LDApfTtyZXR1cm4gciYmKGMuJGpzcGJNZXNzYWdlSW5zdGFuY2U9byksY30pLFRyb25XZWJQcm90by5Qcm9wb3NhbC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihyKXt2YXIgbz1uZXcgZS5CaW5hcnlSZWFkZXIociksaT1uZXcgVHJvbldlYlByb3RvLlByb3Bvc2FsO3JldHVybiBUcm9uV2ViUHJvdG8uUHJvcG9zYWwuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGksbyl9LFRyb25XZWJQcm90by5Qcm9wb3NhbC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24ocixvKXtmb3IoO28ubmV4dEZpZWxkKCkmJiFvLmlzRW5kR3JvdXAoKTspe3ZhciBpPW8uZ2V0RmllbGROdW1iZXIoKTtzd2l0Y2goaSl7Y2FzZSAxOnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRQcm9wb3NhbElkKGMpO2JyZWFrO2Nhc2UgMjp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0UHJvcG9zZXJBZGRyZXNzKGMpO2JyZWFrO2Nhc2UgMzp2YXIgYz1yLmdldFBhcmFtZXRlcnNNYXAoKTtvLnJlYWRNZXNzYWdlKGMsZnVuY3Rpb24oZixkKXtlLk1hcC5kZXNlcmlhbGl6ZUJpbmFyeShmLGQsZS5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRJbnQ2NCxlLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEludDY0LG51bGwsMCwwKX0pO2JyZWFrO2Nhc2UgNDp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0RXhwaXJhdGlvblRpbWUoYyk7YnJlYWs7Y2FzZSA1OnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRDcmVhdGVUaW1lKGMpO2JyZWFrO2Nhc2UgNjp2YXIgYz1vLnJlYWRCeXRlcygpO3IuYWRkQXBwcm92YWxzKGMpO2JyZWFrO2Nhc2UgNzp2YXIgYz1vLnJlYWRFbnVtKCk7ci5zZXRTdGF0ZShjKTticmVhaztkZWZhdWx0Om8uc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiByfSxUcm9uV2ViUHJvdG8uUHJvcG9zYWwucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciByPW5ldyBlLkJpbmFyeVdyaXRlcjtyZXR1cm4gVHJvbldlYlByb3RvLlByb3Bvc2FsLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsciksci5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLlByb3Bvc2FsLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHIsbyl7dmFyIGk9dm9pZCAwO2k9ci5nZXRQcm9wb3NhbElkKCksaSE9PTAmJm8ud3JpdGVJbnQ2NCgxLGkpLGk9ci5nZXRQcm9wb3NlckFkZHJlc3NfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcygyLGkpLGk9ci5nZXRQYXJhbWV0ZXJzTWFwKCEwKSxpJiZpLmdldExlbmd0aCgpPjAmJmkuc2VyaWFsaXplQmluYXJ5KDMsbyxlLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVJbnQ2NCxlLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVJbnQ2NCksaT1yLmdldEV4cGlyYXRpb25UaW1lKCksaSE9PTAmJm8ud3JpdGVJbnQ2NCg0LGkpLGk9ci5nZXRDcmVhdGVUaW1lKCksaSE9PTAmJm8ud3JpdGVJbnQ2NCg1LGkpLGk9ci5nZXRBcHByb3ZhbHNMaXN0X2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlUmVwZWF0ZWRCeXRlcyg2LGkpLGk9ci5nZXRTdGF0ZSgpLGkhPT0wJiZvLndyaXRlRW51bSg3LGkpfSxUcm9uV2ViUHJvdG8uUHJvcG9zYWwuU3RhdGU9e1BFTkRJTkc6MCxESVNBUFBST1ZFRDoxLEFQUFJPVkVEOjIsQ0FOQ0VMRUQ6M30sVHJvbldlYlByb3RvLlByb3Bvc2FsLnByb3RvdHlwZS5nZXRQcm9wb3NhbElkPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwwKX0sVHJvbldlYlByb3RvLlByb3Bvc2FsLnByb3RvdHlwZS5zZXRQcm9wb3NhbElkPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywxLHIpfSxUcm9uV2ViUHJvdG8uUHJvcG9zYWwucHJvdG90eXBlLmdldFByb3Bvc2VyQWRkcmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsIiIpfSxUcm9uV2ViUHJvdG8uUHJvcG9zYWwucHJvdG90eXBlLmdldFByb3Bvc2VyQWRkcmVzc19hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldFByb3Bvc2VyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlByb3Bvc2FsLnByb3RvdHlwZS5nZXRQcm9wb3NlckFkZHJlc3NfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0UHJvcG9zZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uUHJvcG9zYWwucHJvdG90eXBlLnNldFByb3Bvc2VyQWRkcmVzcz1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywyLHIpfSxUcm9uV2ViUHJvdG8uUHJvcG9zYWwucHJvdG90eXBlLmdldFBhcmFtZXRlcnNNYXA9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5nZXRNYXBGaWVsZCh0aGlzLDMscixudWxsKX0sVHJvbldlYlByb3RvLlByb3Bvc2FsLnByb3RvdHlwZS5jbGVhclBhcmFtZXRlcnNNYXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRQYXJhbWV0ZXJzTWFwKCkuY2xlYXIoKSx0aGlzfSxUcm9uV2ViUHJvdG8uUHJvcG9zYWwucHJvdG90eXBlLmdldEV4cGlyYXRpb25UaW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNCwwKX0sVHJvbldlYlByb3RvLlByb3Bvc2FsLnByb3RvdHlwZS5zZXRFeHBpcmF0aW9uVGltZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsNCxyKX0sVHJvbldlYlByb3RvLlByb3Bvc2FsLnByb3RvdHlwZS5nZXRDcmVhdGVUaW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNSwwKX0sVHJvbldlYlByb3RvLlByb3Bvc2FsLnByb3RvdHlwZS5zZXRDcmVhdGVUaW1lPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcyw1LHIpfSxUcm9uV2ViUHJvdG8uUHJvcG9zYWwucHJvdG90eXBlLmdldEFwcHJvdmFsc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodGhpcyw2KX0sVHJvbldlYlByb3RvLlByb3Bvc2FsLnByb3RvdHlwZS5nZXRBcHByb3ZhbHNMaXN0X2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0xpc3RBc0I2NCh0aGlzLmdldEFwcHJvdmFsc0xpc3QoKSl9LFRyb25XZWJQcm90by5Qcm9wb3NhbC5wcm90b3R5cGUuZ2V0QXBwcm92YWxzTGlzdF9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0xpc3RBc1U4KHRoaXMuZ2V0QXBwcm92YWxzTGlzdCgpKX0sVHJvbldlYlByb3RvLlByb3Bvc2FsLnByb3RvdHlwZS5zZXRBcHByb3ZhbHNMaXN0PWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0RmllbGQodGhpcyw2LHJ8fFtdKX0sVHJvbldlYlByb3RvLlByb3Bvc2FsLnByb3RvdHlwZS5hZGRBcHByb3ZhbHM9ZnVuY3Rpb24ocixvKXtyZXR1cm4gZS5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRGaWVsZCh0aGlzLDYscixvKX0sVHJvbldlYlByb3RvLlByb3Bvc2FsLnByb3RvdHlwZS5jbGVhckFwcHJvdmFsc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRBcHByb3ZhbHNMaXN0KFtdKX0sVHJvbldlYlByb3RvLlByb3Bvc2FsLnByb3RvdHlwZS5nZXRTdGF0ZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDcsMCl9LFRyb25XZWJQcm90by5Qcm9wb3NhbC5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNFbnVtRmllbGQodGhpcyw3LHIpfSxlLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYoVHJvbldlYlByb3RvLkV4Y2hhbmdlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihyKXtyZXR1cm4gVHJvbldlYlByb3RvLkV4Y2hhbmdlLnRvT2JqZWN0KHIsdGhpcyl9LFRyb25XZWJQcm90by5FeGNoYW5nZS50b09iamVjdD1mdW5jdGlvbihyLG8pe3ZhciBpPXtleGNoYW5nZUlkOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sMSwwKSxjcmVhdG9yQWRkcmVzczpvLmdldENyZWF0b3JBZGRyZXNzX2FzQjY0KCksY3JlYXRlVGltZTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDMsMCksZmlyc3RUb2tlbklkOm8uZ2V0Rmlyc3RUb2tlbklkX2FzQjY0KCksZmlyc3RUb2tlbkJhbGFuY2U6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobyw3LDApLHNlY29uZFRva2VuSWQ6by5nZXRTZWNvbmRUb2tlbklkX2FzQjY0KCksc2Vjb25kVG9rZW5CYWxhbmNlOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sOSwwKX07cmV0dXJuIHImJihpLiRqc3BiTWVzc2FnZUluc3RhbmNlPW8pLGl9KSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2UuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocil7dmFyIG89bmV3IGUuQmluYXJ5UmVhZGVyKHIpLGk9bmV3IFRyb25XZWJQcm90by5FeGNoYW5nZTtyZXR1cm4gVHJvbldlYlByb3RvLkV4Y2hhbmdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihpLG8pfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHIsbyl7Zm9yKDtvLm5leHRGaWVsZCgpJiYhby5pc0VuZEdyb3VwKCk7KXt2YXIgaT1vLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKGkpe2Nhc2UgMTp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0RXhjaGFuZ2VJZChjKTticmVhaztjYXNlIDI6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldENyZWF0b3JBZGRyZXNzKGMpO2JyZWFrO2Nhc2UgMzp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0Q3JlYXRlVGltZShjKTticmVhaztjYXNlIDY6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldEZpcnN0VG9rZW5JZChjKTticmVhaztjYXNlIDc6dmFyIGM9by5yZWFkSW50NjQoKTtyLnNldEZpcnN0VG9rZW5CYWxhbmNlKGMpO2JyZWFrO2Nhc2UgODp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0U2Vjb25kVG9rZW5JZChjKTticmVhaztjYXNlIDk6dmFyIGM9by5yZWFkSW50NjQoKTtyLnNldFNlY29uZFRva2VuQmFsYW5jZShjKTticmVhaztkZWZhdWx0Om8uc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiByfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciByPW5ldyBlLkJpbmFyeVdyaXRlcjtyZXR1cm4gVHJvbldlYlByb3RvLkV4Y2hhbmdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsciksci5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHIsbyl7dmFyIGk9dm9pZCAwO2k9ci5nZXRFeGNoYW5nZUlkKCksaSE9PTAmJm8ud3JpdGVJbnQ2NCgxLGkpLGk9ci5nZXRDcmVhdG9yQWRkcmVzc19hc1U4KCksaS5sZW5ndGg+MCYmby53cml0ZUJ5dGVzKDIsaSksaT1yLmdldENyZWF0ZVRpbWUoKSxpIT09MCYmby53cml0ZUludDY0KDMsaSksaT1yLmdldEZpcnN0VG9rZW5JZF9hc1U4KCksaS5sZW5ndGg+MCYmby53cml0ZUJ5dGVzKDYsaSksaT1yLmdldEZpcnN0VG9rZW5CYWxhbmNlKCksaSE9PTAmJm8ud3JpdGVJbnQ2NCg3LGkpLGk9ci5nZXRTZWNvbmRUb2tlbklkX2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlQnl0ZXMoOCxpKSxpPXIuZ2V0U2Vjb25kVG9rZW5CYWxhbmNlKCksaSE9PTAmJm8ud3JpdGVJbnQ2NCg5LGkpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2UucHJvdG90eXBlLmdldEV4Y2hhbmdlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLDApfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2UucHJvdG90eXBlLnNldEV4Y2hhbmdlSWQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDEscil9LFRyb25XZWJQcm90by5FeGNoYW5nZS5wcm90b3R5cGUuZ2V0Q3JlYXRvckFkZHJlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLCIiKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlLnByb3RvdHlwZS5nZXRDcmVhdG9yQWRkcmVzc19hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldENyZWF0b3JBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2UucHJvdG90eXBlLmdldENyZWF0b3JBZGRyZXNzX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldENyZWF0b3JBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2UucHJvdG90eXBlLnNldENyZWF0b3JBZGRyZXNzPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDIscil9LFRyb25XZWJQcm90by5FeGNoYW5nZS5wcm90b3R5cGUuZ2V0Q3JlYXRlVGltZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsMCl9LFRyb25XZWJQcm90by5FeGNoYW5nZS5wcm90b3R5cGUuc2V0Q3JlYXRlVGltZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMyxyKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlLnByb3RvdHlwZS5nZXRGaXJzdFRva2VuSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw2LCIiKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlLnByb3RvdHlwZS5nZXRGaXJzdFRva2VuSWRfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRGaXJzdFRva2VuSWQoKSl9LFRyb25XZWJQcm90by5FeGNoYW5nZS5wcm90b3R5cGUuZ2V0Rmlyc3RUb2tlbklkX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldEZpcnN0VG9rZW5JZCgpKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlLnByb3RvdHlwZS5zZXRGaXJzdFRva2VuSWQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsNixyKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlLnByb3RvdHlwZS5nZXRGaXJzdFRva2VuQmFsYW5jZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDcsMCl9LFRyb25XZWJQcm90by5FeGNoYW5nZS5wcm90b3R5cGUuc2V0Rmlyc3RUb2tlbkJhbGFuY2U9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDcscil9LFRyb25XZWJQcm90by5FeGNoYW5nZS5wcm90b3R5cGUuZ2V0U2Vjb25kVG9rZW5JZD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDgsIiIpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2UucHJvdG90eXBlLmdldFNlY29uZFRva2VuSWRfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRTZWNvbmRUb2tlbklkKCkpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2UucHJvdG90eXBlLmdldFNlY29uZFRva2VuSWRfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0U2Vjb25kVG9rZW5JZCgpKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlLnByb3RvdHlwZS5zZXRTZWNvbmRUb2tlbklkPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDgscil9LFRyb25XZWJQcm90by5FeGNoYW5nZS5wcm90b3R5cGUuZ2V0U2Vjb25kVG9rZW5CYWxhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsOSwwKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlLnByb3RvdHlwZS5zZXRTZWNvbmRUb2tlbkJhbGFuY2U9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDkscil9LFRyb25XZWJQcm90by5BY2NvdW50LnJlcGVhdGVkRmllbGRzXz1bNSw3LDE2LDMzXSxlLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYoVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKHIpe3JldHVybiBUcm9uV2ViUHJvdG8uQWNjb3VudC50b09iamVjdChyLHRoaXMpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC50b09iamVjdD1mdW5jdGlvbihyLG8pe3ZhciBpLGM9e2FjY291bnROYW1lOm8uZ2V0QWNjb3VudE5hbWVfYXNCNjQoKSx0eXBlOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sMiwwKSxhZGRyZXNzOm8uZ2V0QWRkcmVzc19hc0I2NCgpLGJhbGFuY2U6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobyw0LDApLHZvdGVzTGlzdDplLk1lc3NhZ2UudG9PYmplY3RMaXN0KG8uZ2V0Vm90ZXNMaXN0KCksVHJvbldlYlByb3RvLlZvdGUudG9PYmplY3QsciksYXNzZXRNYXA6KGk9by5nZXRBc3NldE1hcCgpKT9pLnRvT2JqZWN0KHIsdm9pZCAwKTpbXSxhc3NldHYyTWFwOihpPW8uZ2V0QXNzZXR2Mk1hcCgpKT9pLnRvT2JqZWN0KHIsdm9pZCAwKTpbXSxmcm96ZW5MaXN0OmUuTWVzc2FnZS50b09iamVjdExpc3Qoby5nZXRGcm96ZW5MaXN0KCksVHJvbldlYlByb3RvLkFjY291bnQuRnJvemVuLnRvT2JqZWN0LHIpLG5ldFVzYWdlOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sOCwwKSxhY3F1aXJlZERlbGVnYXRlZEZyb3plbkJhbGFuY2VGb3JCYW5kd2lkdGg6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobyw0MSwwKSxkZWxlZ2F0ZWRGcm96ZW5CYWxhbmNlRm9yQmFuZHdpZHRoOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sNDIsMCksb2xkVHJvblBvd2VyOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sNDYsMCksdHJvblBvd2VyOihpPW8uZ2V0VHJvblBvd2VyKCkpJiZUcm9uV2ViUHJvdG8uQWNjb3VudC5Gcm96ZW4udG9PYmplY3QocixpKSxhc3NldE9wdGltaXplZDplLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobyw2MCwhMSksY3JlYXRlVGltZTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDksMCksbGF0ZXN0T3ByYXRpb25UaW1lOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sMTAsMCksYWxsb3dhbmNlOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sMTEsMCksbGF0ZXN0V2l0aGRyYXdUaW1lOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sMTIsMCksY29kZTpvLmdldENvZGVfYXNCNjQoKSxpc1dpdG5lc3M6ZS5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KG8sMTQsITEpLGlzQ29tbWl0dGVlOmUuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdChvLDE1LCExKSxmcm96ZW5TdXBwbHlMaXN0OmUuTWVzc2FnZS50b09iamVjdExpc3Qoby5nZXRGcm96ZW5TdXBwbHlMaXN0KCksVHJvbldlYlByb3RvLkFjY291bnQuRnJvemVuLnRvT2JqZWN0LHIpLGFzc2V0SXNzdWVkTmFtZTpvLmdldEFzc2V0SXNzdWVkTmFtZV9hc0I2NCgpLGFzc2V0SXNzdWVkSWQ6by5nZXRBc3NldElzc3VlZElkX2FzQjY0KCksbGF0ZXN0QXNzZXRPcGVyYXRpb25UaW1lTWFwOihpPW8uZ2V0TGF0ZXN0QXNzZXRPcGVyYXRpb25UaW1lTWFwKCkpP2kudG9PYmplY3Qocix2b2lkIDApOltdLGxhdGVzdEFzc2V0T3BlcmF0aW9uVGltZXYyTWFwOihpPW8uZ2V0TGF0ZXN0QXNzZXRPcGVyYXRpb25UaW1ldjJNYXAoKSk/aS50b09iamVjdChyLHZvaWQgMCk6W10sZnJlZU5ldFVzYWdlOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sMTksMCksZnJlZUFzc2V0TmV0VXNhZ2VNYXA6KGk9by5nZXRGcmVlQXNzZXROZXRVc2FnZU1hcCgpKT9pLnRvT2JqZWN0KHIsdm9pZCAwKTpbXSxmcmVlQXNzZXROZXRVc2FnZXYyTWFwOihpPW8uZ2V0RnJlZUFzc2V0TmV0VXNhZ2V2Mk1hcCgpKT9pLnRvT2JqZWN0KHIsdm9pZCAwKTpbXSxsYXRlc3RDb25zdW1lVGltZTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDIxLDApLGxhdGVzdENvbnN1bWVGcmVlVGltZTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDIyLDApLGFjY291bnRJZDpvLmdldEFjY291bnRJZF9hc0I2NCgpLGFjY291bnRSZXNvdXJjZTooaT1vLmdldEFjY291bnRSZXNvdXJjZSgpKSYmVHJvbldlYlByb3RvLkFjY291bnQuQWNjb3VudFJlc291cmNlLnRvT2JqZWN0KHIsaSksY29kZWhhc2g6by5nZXRDb2RlaGFzaF9hc0I2NCgpLG93bmVyUGVybWlzc2lvbjooaT1vLmdldE93bmVyUGVybWlzc2lvbigpKSYmVHJvbldlYlByb3RvLlBlcm1pc3Npb24udG9PYmplY3QocixpKSx3aXRuZXNzUGVybWlzc2lvbjooaT1vLmdldFdpdG5lc3NQZXJtaXNzaW9uKCkpJiZUcm9uV2ViUHJvdG8uUGVybWlzc2lvbi50b09iamVjdChyLGkpLGFjdGl2ZVBlcm1pc3Npb25MaXN0OmUuTWVzc2FnZS50b09iamVjdExpc3Qoby5nZXRBY3RpdmVQZXJtaXNzaW9uTGlzdCgpLFRyb25XZWJQcm90by5QZXJtaXNzaW9uLnRvT2JqZWN0LHIpfTtyZXR1cm4gciYmKGMuJGpzcGJNZXNzYWdlSW5zdGFuY2U9byksY30pLFRyb25XZWJQcm90by5BY2NvdW50LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHIpe3ZhciBvPW5ldyBlLkJpbmFyeVJlYWRlcihyKSxpPW5ldyBUcm9uV2ViUHJvdG8uQWNjb3VudDtyZXR1cm4gVHJvbldlYlByb3RvLkFjY291bnQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGksbyl9LFRyb25XZWJQcm90by5BY2NvdW50LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihyLG8pe2Zvcig7by5uZXh0RmllbGQoKSYmIW8uaXNFbmRHcm91cCgpOyl7dmFyIGk9by5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChpKXtjYXNlIDE6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldEFjY291bnROYW1lKGMpO2JyZWFrO2Nhc2UgMjp2YXIgYz1vLnJlYWRFbnVtKCk7ci5zZXRUeXBlKGMpO2JyZWFrO2Nhc2UgMzp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0QWRkcmVzcyhjKTticmVhaztjYXNlIDQ6dmFyIGM9by5yZWFkSW50NjQoKTtyLnNldEJhbGFuY2UoYyk7YnJlYWs7Y2FzZSA1OnZhciBjPW5ldyBUcm9uV2ViUHJvdG8uVm90ZTtvLnJlYWRNZXNzYWdlKGMsVHJvbldlYlByb3RvLlZvdGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxyLmFkZFZvdGVzKGMpO2JyZWFrO2Nhc2UgNjp2YXIgYz1yLmdldEFzc2V0TWFwKCk7by5yZWFkTWVzc2FnZShjLGZ1bmN0aW9uKGYsZCl7ZS5NYXAuZGVzZXJpYWxpemVCaW5hcnkoZixkLGUuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU3RyaW5nLGUuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkSW50NjQsbnVsbCwiIiwwKX0pO2JyZWFrO2Nhc2UgNTY6dmFyIGM9ci5nZXRBc3NldHYyTWFwKCk7by5yZWFkTWVzc2FnZShjLGZ1bmN0aW9uKGYsZCl7ZS5NYXAuZGVzZXJpYWxpemVCaW5hcnkoZixkLGUuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU3RyaW5nLGUuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkSW50NjQsbnVsbCwiIiwwKX0pO2JyZWFrO2Nhc2UgNzp2YXIgYz1uZXcgVHJvbldlYlByb3RvLkFjY291bnQuRnJvemVuO28ucmVhZE1lc3NhZ2UoYyxUcm9uV2ViUHJvdG8uQWNjb3VudC5Gcm96ZW4uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxyLmFkZEZyb3plbihjKTticmVhaztjYXNlIDg6dmFyIGM9by5yZWFkSW50NjQoKTtyLnNldE5ldFVzYWdlKGMpO2JyZWFrO2Nhc2UgNDE6dmFyIGM9by5yZWFkSW50NjQoKTtyLnNldEFjcXVpcmVkRGVsZWdhdGVkRnJvemVuQmFsYW5jZUZvckJhbmR3aWR0aChjKTticmVhaztjYXNlIDQyOnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXREZWxlZ2F0ZWRGcm96ZW5CYWxhbmNlRm9yQmFuZHdpZHRoKGMpO2JyZWFrO2Nhc2UgNDY6dmFyIGM9by5yZWFkSW50NjQoKTtyLnNldE9sZFRyb25Qb3dlcihjKTticmVhaztjYXNlIDQ3OnZhciBjPW5ldyBUcm9uV2ViUHJvdG8uQWNjb3VudC5Gcm96ZW47by5yZWFkTWVzc2FnZShjLFRyb25XZWJQcm90by5BY2NvdW50LkZyb3plbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLHIuc2V0VHJvblBvd2VyKGMpO2JyZWFrO2Nhc2UgNjA6dmFyIGM9by5yZWFkQm9vbCgpO3Iuc2V0QXNzZXRPcHRpbWl6ZWQoYyk7YnJlYWs7Y2FzZSA5OnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRDcmVhdGVUaW1lKGMpO2JyZWFrO2Nhc2UgMTA6dmFyIGM9by5yZWFkSW50NjQoKTtyLnNldExhdGVzdE9wcmF0aW9uVGltZShjKTticmVhaztjYXNlIDExOnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRBbGxvd2FuY2UoYyk7YnJlYWs7Y2FzZSAxMjp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0TGF0ZXN0V2l0aGRyYXdUaW1lKGMpO2JyZWFrO2Nhc2UgMTM6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldENvZGUoYyk7YnJlYWs7Y2FzZSAxNDp2YXIgYz1vLnJlYWRCb29sKCk7ci5zZXRJc1dpdG5lc3MoYyk7YnJlYWs7Y2FzZSAxNTp2YXIgYz1vLnJlYWRCb29sKCk7ci5zZXRJc0NvbW1pdHRlZShjKTticmVhaztjYXNlIDE2OnZhciBjPW5ldyBUcm9uV2ViUHJvdG8uQWNjb3VudC5Gcm96ZW47by5yZWFkTWVzc2FnZShjLFRyb25XZWJQcm90by5BY2NvdW50LkZyb3plbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLHIuYWRkRnJvemVuU3VwcGx5KGMpO2JyZWFrO2Nhc2UgMTc6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldEFzc2V0SXNzdWVkTmFtZShjKTticmVhaztjYXNlIDU3OnZhciBjPW8ucmVhZEJ5dGVzKCk7ci5zZXRBc3NldElzc3VlZElkKGMpO2JyZWFrO2Nhc2UgMTg6dmFyIGM9ci5nZXRMYXRlc3RBc3NldE9wZXJhdGlvblRpbWVNYXAoKTtvLnJlYWRNZXNzYWdlKGMsZnVuY3Rpb24oZixkKXtlLk1hcC5kZXNlcmlhbGl6ZUJpbmFyeShmLGQsZS5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTdHJpbmcsZS5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRJbnQ2NCxudWxsLCIiLDApfSk7YnJlYWs7Y2FzZSA1ODp2YXIgYz1yLmdldExhdGVzdEFzc2V0T3BlcmF0aW9uVGltZXYyTWFwKCk7by5yZWFkTWVzc2FnZShjLGZ1bmN0aW9uKGYsZCl7ZS5NYXAuZGVzZXJpYWxpemVCaW5hcnkoZixkLGUuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU3RyaW5nLGUuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkSW50NjQsbnVsbCwiIiwwKX0pO2JyZWFrO2Nhc2UgMTk6dmFyIGM9by5yZWFkSW50NjQoKTtyLnNldEZyZWVOZXRVc2FnZShjKTticmVhaztjYXNlIDIwOnZhciBjPXIuZ2V0RnJlZUFzc2V0TmV0VXNhZ2VNYXAoKTtvLnJlYWRNZXNzYWdlKGMsZnVuY3Rpb24oZixkKXtlLk1hcC5kZXNlcmlhbGl6ZUJpbmFyeShmLGQsZS5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTdHJpbmcsZS5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRJbnQ2NCxudWxsLCIiLDApfSk7YnJlYWs7Y2FzZSA1OTp2YXIgYz1yLmdldEZyZWVBc3NldE5ldFVzYWdldjJNYXAoKTtvLnJlYWRNZXNzYWdlKGMsZnVuY3Rpb24oZixkKXtlLk1hcC5kZXNlcmlhbGl6ZUJpbmFyeShmLGQsZS5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTdHJpbmcsZS5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRJbnQ2NCxudWxsLCIiLDApfSk7YnJlYWs7Y2FzZSAyMTp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0TGF0ZXN0Q29uc3VtZVRpbWUoYyk7YnJlYWs7Y2FzZSAyMjp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0TGF0ZXN0Q29uc3VtZUZyZWVUaW1lKGMpO2JyZWFrO2Nhc2UgMjM6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldEFjY291bnRJZChjKTticmVhaztjYXNlIDI2OnZhciBjPW5ldyBUcm9uV2ViUHJvdG8uQWNjb3VudC5BY2NvdW50UmVzb3VyY2U7by5yZWFkTWVzc2FnZShjLFRyb25XZWJQcm90by5BY2NvdW50LkFjY291bnRSZXNvdXJjZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLHIuc2V0QWNjb3VudFJlc291cmNlKGMpO2JyZWFrO2Nhc2UgMzA6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldENvZGVoYXNoKGMpO2JyZWFrO2Nhc2UgMzE6dmFyIGM9bmV3IFRyb25XZWJQcm90by5QZXJtaXNzaW9uO28ucmVhZE1lc3NhZ2UoYyxUcm9uV2ViUHJvdG8uUGVybWlzc2lvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLHIuc2V0T3duZXJQZXJtaXNzaW9uKGMpO2JyZWFrO2Nhc2UgMzI6dmFyIGM9bmV3IFRyb25XZWJQcm90by5QZXJtaXNzaW9uO28ucmVhZE1lc3NhZ2UoYyxUcm9uV2ViUHJvdG8uUGVybWlzc2lvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLHIuc2V0V2l0bmVzc1Blcm1pc3Npb24oYyk7YnJlYWs7Y2FzZSAzMzp2YXIgYz1uZXcgVHJvbldlYlByb3RvLlBlcm1pc3Npb247by5yZWFkTWVzc2FnZShjLFRyb25XZWJQcm90by5QZXJtaXNzaW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksci5hZGRBY3RpdmVQZXJtaXNzaW9uKGMpO2JyZWFrO2RlZmF1bHQ6by5za2lwRmllbGQoKTticmVha319cmV0dXJuIHJ9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcj1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIFRyb25XZWJQcm90by5BY2NvdW50LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsciksci5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLkFjY291bnQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24ocixvKXt2YXIgaT12b2lkIDA7aT1yLmdldEFjY291bnROYW1lX2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlQnl0ZXMoMSxpKSxpPXIuZ2V0VHlwZSgpLGkhPT0wJiZvLndyaXRlRW51bSgyLGkpLGk9ci5nZXRBZGRyZXNzX2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlQnl0ZXMoMyxpKSxpPXIuZ2V0QmFsYW5jZSgpLGkhPT0wJiZvLndyaXRlSW50NjQoNCxpKSxpPXIuZ2V0Vm90ZXNMaXN0KCksaS5sZW5ndGg+MCYmby53cml0ZVJlcGVhdGVkTWVzc2FnZSg1LGksVHJvbldlYlByb3RvLlZvdGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLGk9ci5nZXRBc3NldE1hcCghMCksaSYmaS5nZXRMZW5ndGgoKT4wJiZpLnNlcmlhbGl6ZUJpbmFyeSg2LG8sZS5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU3RyaW5nLGUuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUludDY0KSxpPXIuZ2V0QXNzZXR2Mk1hcCghMCksaSYmaS5nZXRMZW5ndGgoKT4wJiZpLnNlcmlhbGl6ZUJpbmFyeSg1NixvLGUuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVN0cmluZyxlLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVJbnQ2NCksaT1yLmdldEZyb3plbkxpc3QoKSxpLmxlbmd0aD4wJiZvLndyaXRlUmVwZWF0ZWRNZXNzYWdlKDcsaSxUcm9uV2ViUHJvdG8uQWNjb3VudC5Gcm96ZW4uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLGk9ci5nZXROZXRVc2FnZSgpLGkhPT0wJiZvLndyaXRlSW50NjQoOCxpKSxpPXIuZ2V0QWNxdWlyZWREZWxlZ2F0ZWRGcm96ZW5CYWxhbmNlRm9yQmFuZHdpZHRoKCksaSE9PTAmJm8ud3JpdGVJbnQ2NCg0MSxpKSxpPXIuZ2V0RGVsZWdhdGVkRnJvemVuQmFsYW5jZUZvckJhbmR3aWR0aCgpLGkhPT0wJiZvLndyaXRlSW50NjQoNDIsaSksaT1yLmdldE9sZFRyb25Qb3dlcigpLGkhPT0wJiZvLndyaXRlSW50NjQoNDYsaSksaT1yLmdldFRyb25Qb3dlcigpLGkhPW51bGwmJm8ud3JpdGVNZXNzYWdlKDQ3LGksVHJvbldlYlByb3RvLkFjY291bnQuRnJvemVuLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxpPXIuZ2V0QXNzZXRPcHRpbWl6ZWQoKSxpJiZvLndyaXRlQm9vbCg2MCxpKSxpPXIuZ2V0Q3JlYXRlVGltZSgpLGkhPT0wJiZvLndyaXRlSW50NjQoOSxpKSxpPXIuZ2V0TGF0ZXN0T3ByYXRpb25UaW1lKCksaSE9PTAmJm8ud3JpdGVJbnQ2NCgxMCxpKSxpPXIuZ2V0QWxsb3dhbmNlKCksaSE9PTAmJm8ud3JpdGVJbnQ2NCgxMSxpKSxpPXIuZ2V0TGF0ZXN0V2l0aGRyYXdUaW1lKCksaSE9PTAmJm8ud3JpdGVJbnQ2NCgxMixpKSxpPXIuZ2V0Q29kZV9hc1U4KCksaS5sZW5ndGg+MCYmby53cml0ZUJ5dGVzKDEzLGkpLGk9ci5nZXRJc1dpdG5lc3MoKSxpJiZvLndyaXRlQm9vbCgxNCxpKSxpPXIuZ2V0SXNDb21taXR0ZWUoKSxpJiZvLndyaXRlQm9vbCgxNSxpKSxpPXIuZ2V0RnJvemVuU3VwcGx5TGlzdCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMTYsaSxUcm9uV2ViUHJvdG8uQWNjb3VudC5Gcm96ZW4uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLGk9ci5nZXRBc3NldElzc3VlZE5hbWVfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcygxNyxpKSxpPXIuZ2V0QXNzZXRJc3N1ZWRJZF9hc1U4KCksaS5sZW5ndGg+MCYmby53cml0ZUJ5dGVzKDU3LGkpLGk9ci5nZXRMYXRlc3RBc3NldE9wZXJhdGlvblRpbWVNYXAoITApLGkmJmkuZ2V0TGVuZ3RoKCk+MCYmaS5zZXJpYWxpemVCaW5hcnkoMTgsbyxlLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTdHJpbmcsZS5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlSW50NjQpLGk9ci5nZXRMYXRlc3RBc3NldE9wZXJhdGlvblRpbWV2Mk1hcCghMCksaSYmaS5nZXRMZW5ndGgoKT4wJiZpLnNlcmlhbGl6ZUJpbmFyeSg1OCxvLGUuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVN0cmluZyxlLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVJbnQ2NCksaT1yLmdldEZyZWVOZXRVc2FnZSgpLGkhPT0wJiZvLndyaXRlSW50NjQoMTksaSksaT1yLmdldEZyZWVBc3NldE5ldFVzYWdlTWFwKCEwKSxpJiZpLmdldExlbmd0aCgpPjAmJmkuc2VyaWFsaXplQmluYXJ5KDIwLG8sZS5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU3RyaW5nLGUuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUludDY0KSxpPXIuZ2V0RnJlZUFzc2V0TmV0VXNhZ2V2Mk1hcCghMCksaSYmaS5nZXRMZW5ndGgoKT4wJiZpLnNlcmlhbGl6ZUJpbmFyeSg1OSxvLGUuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVN0cmluZyxlLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVJbnQ2NCksaT1yLmdldExhdGVzdENvbnN1bWVUaW1lKCksaSE9PTAmJm8ud3JpdGVJbnQ2NCgyMSxpKSxpPXIuZ2V0TGF0ZXN0Q29uc3VtZUZyZWVUaW1lKCksaSE9PTAmJm8ud3JpdGVJbnQ2NCgyMixpKSxpPXIuZ2V0QWNjb3VudElkX2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlQnl0ZXMoMjMsaSksaT1yLmdldEFjY291bnRSZXNvdXJjZSgpLGkhPW51bGwmJm8ud3JpdGVNZXNzYWdlKDI2LGksVHJvbldlYlByb3RvLkFjY291bnQuQWNjb3VudFJlc291cmNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxpPXIuZ2V0Q29kZWhhc2hfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcygzMCxpKSxpPXIuZ2V0T3duZXJQZXJtaXNzaW9uKCksaSE9bnVsbCYmby53cml0ZU1lc3NhZ2UoMzEsaSxUcm9uV2ViUHJvdG8uUGVybWlzc2lvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksaT1yLmdldFdpdG5lc3NQZXJtaXNzaW9uKCksaSE9bnVsbCYmby53cml0ZU1lc3NhZ2UoMzIsaSxUcm9uV2ViUHJvdG8uUGVybWlzc2lvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksaT1yLmdldEFjdGl2ZVBlcm1pc3Npb25MaXN0KCksaS5sZW5ndGg+MCYmby53cml0ZVJlcGVhdGVkTWVzc2FnZSgzMyxpLFRyb25XZWJQcm90by5QZXJtaXNzaW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5BY2NvdW50LkZyb3plbi5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocil7cmV0dXJuIFRyb25XZWJQcm90by5BY2NvdW50LkZyb3plbi50b09iamVjdChyLHRoaXMpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5Gcm96ZW4udG9PYmplY3Q9ZnVuY3Rpb24ocixvKXt2YXIgaT17ZnJvemVuQmFsYW5jZTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDEsMCksZXhwaXJlVGltZTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDIsMCl9O3JldHVybiByJiYoaS4kanNwYk1lc3NhZ2VJbnN0YW5jZT1vKSxpfSksVHJvbldlYlByb3RvLkFjY291bnQuRnJvemVuLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHIpe3ZhciBvPW5ldyBlLkJpbmFyeVJlYWRlcihyKSxpPW5ldyBUcm9uV2ViUHJvdG8uQWNjb3VudC5Gcm96ZW47cmV0dXJuIFRyb25XZWJQcm90by5BY2NvdW50LkZyb3plbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaSxvKX0sVHJvbldlYlByb3RvLkFjY291bnQuRnJvemVuLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihyLG8pe2Zvcig7by5uZXh0RmllbGQoKSYmIW8uaXNFbmRHcm91cCgpOyl7dmFyIGk9by5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChpKXtjYXNlIDE6dmFyIGM9by5yZWFkSW50NjQoKTtyLnNldEZyb3plbkJhbGFuY2UoYyk7YnJlYWs7Y2FzZSAyOnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRFeHBpcmVUaW1lKGMpO2JyZWFrO2RlZmF1bHQ6by5za2lwRmllbGQoKTticmVha319cmV0dXJuIHJ9LFRyb25XZWJQcm90by5BY2NvdW50LkZyb3plbi5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IGUuQmluYXJ5V3JpdGVyO3JldHVybiBUcm9uV2ViUHJvdG8uQWNjb3VudC5Gcm96ZW4uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxyKSxyLmdldFJlc3VsdEJ1ZmZlcigpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5Gcm96ZW4uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24ocixvKXt2YXIgaT12b2lkIDA7aT1yLmdldEZyb3plbkJhbGFuY2UoKSxpIT09MCYmby53cml0ZUludDY0KDEsaSksaT1yLmdldEV4cGlyZVRpbWUoKSxpIT09MCYmby53cml0ZUludDY0KDIsaSl9LFRyb25XZWJQcm90by5BY2NvdW50LkZyb3plbi5wcm90b3R5cGUuZ2V0RnJvemVuQmFsYW5jZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsMCl9LFRyb25XZWJQcm90by5BY2NvdW50LkZyb3plbi5wcm90b3R5cGUuc2V0RnJvemVuQmFsYW5jZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMSxyKX0sVHJvbldlYlByb3RvLkFjY291bnQuRnJvemVuLnByb3RvdHlwZS5nZXRFeHBpcmVUaW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwwKX0sVHJvbldlYlByb3RvLkFjY291bnQuRnJvemVuLnByb3RvdHlwZS5zZXRFeHBpcmVUaW1lPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywyLHIpfSxlLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYoVHJvbldlYlByb3RvLkFjY291bnQuQWNjb3VudFJlc291cmNlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihyKXtyZXR1cm4gVHJvbldlYlByb3RvLkFjY291bnQuQWNjb3VudFJlc291cmNlLnRvT2JqZWN0KHIsdGhpcyl9LFRyb25XZWJQcm90by5BY2NvdW50LkFjY291bnRSZXNvdXJjZS50b09iamVjdD1mdW5jdGlvbihyLG8pe3ZhciBpLGM9e2VuZXJneVVzYWdlOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sMSwwKSxmcm96ZW5CYWxhbmNlRm9yRW5lcmd5OihpPW8uZ2V0RnJvemVuQmFsYW5jZUZvckVuZXJneSgpKSYmVHJvbldlYlByb3RvLkFjY291bnQuRnJvemVuLnRvT2JqZWN0KHIsaSksbGF0ZXN0Q29uc3VtZVRpbWVGb3JFbmVyZ3k6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobywzLDApLGFjcXVpcmVkRGVsZWdhdGVkRnJvemVuQmFsYW5jZUZvckVuZXJneTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDQsMCksZGVsZWdhdGVkRnJvemVuQmFsYW5jZUZvckVuZXJneTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDUsMCksc3RvcmFnZUxpbWl0OmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sNiwwKSxzdG9yYWdlVXNhZ2U6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobyw3LDApLGxhdGVzdEV4Y2hhbmdlU3RvcmFnZVRpbWU6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobyw4LDApfTtyZXR1cm4gciYmKGMuJGpzcGJNZXNzYWdlSW5zdGFuY2U9byksY30pLFRyb25XZWJQcm90by5BY2NvdW50LkFjY291bnRSZXNvdXJjZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihyKXt2YXIgbz1uZXcgZS5CaW5hcnlSZWFkZXIociksaT1uZXcgVHJvbldlYlByb3RvLkFjY291bnQuQWNjb3VudFJlc291cmNlO3JldHVybiBUcm9uV2ViUHJvdG8uQWNjb3VudC5BY2NvdW50UmVzb3VyY2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGksbyl9LFRyb25XZWJQcm90by5BY2NvdW50LkFjY291bnRSZXNvdXJjZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24ocixvKXtmb3IoO28ubmV4dEZpZWxkKCkmJiFvLmlzRW5kR3JvdXAoKTspe3ZhciBpPW8uZ2V0RmllbGROdW1iZXIoKTtzd2l0Y2goaSl7Y2FzZSAxOnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRFbmVyZ3lVc2FnZShjKTticmVhaztjYXNlIDI6dmFyIGM9bmV3IFRyb25XZWJQcm90by5BY2NvdW50LkZyb3plbjtvLnJlYWRNZXNzYWdlKGMsVHJvbldlYlByb3RvLkFjY291bnQuRnJvemVuLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksci5zZXRGcm96ZW5CYWxhbmNlRm9yRW5lcmd5KGMpO2JyZWFrO2Nhc2UgMzp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0TGF0ZXN0Q29uc3VtZVRpbWVGb3JFbmVyZ3koYyk7YnJlYWs7Y2FzZSA0OnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRBY3F1aXJlZERlbGVnYXRlZEZyb3plbkJhbGFuY2VGb3JFbmVyZ3koYyk7YnJlYWs7Y2FzZSA1OnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXREZWxlZ2F0ZWRGcm96ZW5CYWxhbmNlRm9yRW5lcmd5KGMpO2JyZWFrO2Nhc2UgNjp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0U3RvcmFnZUxpbWl0KGMpO2JyZWFrO2Nhc2UgNzp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0U3RvcmFnZVVzYWdlKGMpO2JyZWFrO2Nhc2UgODp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0TGF0ZXN0RXhjaGFuZ2VTdG9yYWdlVGltZShjKTticmVhaztkZWZhdWx0Om8uc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiByfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5BY2NvdW50UmVzb3VyY2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciByPW5ldyBlLkJpbmFyeVdyaXRlcjtyZXR1cm4gVHJvbldlYlByb3RvLkFjY291bnQuQWNjb3VudFJlc291cmNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsciksci5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLkFjY291bnQuQWNjb3VudFJlc291cmNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHIsbyl7dmFyIGk9dm9pZCAwO2k9ci5nZXRFbmVyZ3lVc2FnZSgpLGkhPT0wJiZvLndyaXRlSW50NjQoMSxpKSxpPXIuZ2V0RnJvemVuQmFsYW5jZUZvckVuZXJneSgpLGkhPW51bGwmJm8ud3JpdGVNZXNzYWdlKDIsaSxUcm9uV2ViUHJvdG8uQWNjb3VudC5Gcm96ZW4uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLGk9ci5nZXRMYXRlc3RDb25zdW1lVGltZUZvckVuZXJneSgpLGkhPT0wJiZvLndyaXRlSW50NjQoMyxpKSxpPXIuZ2V0QWNxdWlyZWREZWxlZ2F0ZWRGcm96ZW5CYWxhbmNlRm9yRW5lcmd5KCksaSE9PTAmJm8ud3JpdGVJbnQ2NCg0LGkpLGk9ci5nZXREZWxlZ2F0ZWRGcm96ZW5CYWxhbmNlRm9yRW5lcmd5KCksaSE9PTAmJm8ud3JpdGVJbnQ2NCg1LGkpLGk9ci5nZXRTdG9yYWdlTGltaXQoKSxpIT09MCYmby53cml0ZUludDY0KDYsaSksaT1yLmdldFN0b3JhZ2VVc2FnZSgpLGkhPT0wJiZvLndyaXRlSW50NjQoNyxpKSxpPXIuZ2V0TGF0ZXN0RXhjaGFuZ2VTdG9yYWdlVGltZSgpLGkhPT0wJiZvLndyaXRlSW50NjQoOCxpKX0sVHJvbldlYlByb3RvLkFjY291bnQuQWNjb3VudFJlc291cmNlLnByb3RvdHlwZS5nZXRFbmVyZ3lVc2FnZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsMCl9LFRyb25XZWJQcm90by5BY2NvdW50LkFjY291bnRSZXNvdXJjZS5wcm90b3R5cGUuc2V0RW5lcmd5VXNhZ2U9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDEscil9LFRyb25XZWJQcm90by5BY2NvdW50LkFjY291bnRSZXNvdXJjZS5wcm90b3R5cGUuZ2V0RnJvemVuQmFsYW5jZUZvckVuZXJneT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsVHJvbldlYlByb3RvLkFjY291bnQuRnJvemVuLDIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5BY2NvdW50UmVzb3VyY2UucHJvdG90eXBlLnNldEZyb3plbkJhbGFuY2VGb3JFbmVyZ3k9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywyLHIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5BY2NvdW50UmVzb3VyY2UucHJvdG90eXBlLmNsZWFyRnJvemVuQmFsYW5jZUZvckVuZXJneT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEZyb3plbkJhbGFuY2VGb3JFbmVyZ3kodm9pZCAwKX0sVHJvbldlYlByb3RvLkFjY291bnQuQWNjb3VudFJlc291cmNlLnByb3RvdHlwZS5oYXNGcm96ZW5CYWxhbmNlRm9yRW5lcmd5PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpIT1udWxsfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5BY2NvdW50UmVzb3VyY2UucHJvdG90eXBlLmdldExhdGVzdENvbnN1bWVUaW1lRm9yRW5lcmd5PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMywwKX0sVHJvbldlYlByb3RvLkFjY291bnQuQWNjb3VudFJlc291cmNlLnByb3RvdHlwZS5zZXRMYXRlc3RDb25zdW1lVGltZUZvckVuZXJneT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMyxyKX0sVHJvbldlYlByb3RvLkFjY291bnQuQWNjb3VudFJlc291cmNlLnByb3RvdHlwZS5nZXRBY3F1aXJlZERlbGVnYXRlZEZyb3plbkJhbGFuY2VGb3JFbmVyZ3k9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw0LDApfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5BY2NvdW50UmVzb3VyY2UucHJvdG90eXBlLnNldEFjcXVpcmVkRGVsZWdhdGVkRnJvemVuQmFsYW5jZUZvckVuZXJneT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsNCxyKX0sVHJvbldlYlByb3RvLkFjY291bnQuQWNjb3VudFJlc291cmNlLnByb3RvdHlwZS5nZXREZWxlZ2F0ZWRGcm96ZW5CYWxhbmNlRm9yRW5lcmd5PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNSwwKX0sVHJvbldlYlByb3RvLkFjY291bnQuQWNjb3VudFJlc291cmNlLnByb3RvdHlwZS5zZXREZWxlZ2F0ZWRGcm96ZW5CYWxhbmNlRm9yRW5lcmd5PWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcyw1LHIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5BY2NvdW50UmVzb3VyY2UucHJvdG90eXBlLmdldFN0b3JhZ2VMaW1pdD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDYsMCl9LFRyb25XZWJQcm90by5BY2NvdW50LkFjY291bnRSZXNvdXJjZS5wcm90b3R5cGUuc2V0U3RvcmFnZUxpbWl0PWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcyw2LHIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5BY2NvdW50UmVzb3VyY2UucHJvdG90eXBlLmdldFN0b3JhZ2VVc2FnZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDcsMCl9LFRyb25XZWJQcm90by5BY2NvdW50LkFjY291bnRSZXNvdXJjZS5wcm90b3R5cGUuc2V0U3RvcmFnZVVzYWdlPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcyw3LHIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5BY2NvdW50UmVzb3VyY2UucHJvdG90eXBlLmdldExhdGVzdEV4Y2hhbmdlU3RvcmFnZVRpbWU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw4LDApfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5BY2NvdW50UmVzb3VyY2UucHJvdG90eXBlLnNldExhdGVzdEV4Y2hhbmdlU3RvcmFnZVRpbWU9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDgscil9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5nZXRBY2NvdW50TmFtZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsIiIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuZ2V0QWNjb3VudE5hbWVfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRBY2NvdW50TmFtZSgpKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmdldEFjY291bnROYW1lX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldEFjY291bnROYW1lKCkpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuc2V0QWNjb3VudE5hbWU9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMSxyKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmdldFR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLDApfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuc2V0VHlwZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0VudW1GaWVsZCh0aGlzLDIscil9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5nZXRBZGRyZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMywiIil9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5nZXRBZGRyZXNzX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0QWRkcmVzcygpKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmdldEFkZHJlc3NfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0QWRkcmVzcygpKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLnNldEFkZHJlc3M9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMyxyKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmdldEJhbGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw0LDApfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuc2V0QmFsYW5jZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsNCxyKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmdldFZvdGVzTGlzdD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxUcm9uV2ViUHJvdG8uVm90ZSw1KX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLnNldFZvdGVzTGlzdD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNSxyKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmFkZFZvdGVzPWZ1bmN0aW9uKHIsbyl7cmV0dXJuIGUuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNSxyLFRyb25XZWJQcm90by5Wb3RlLG8pfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuY2xlYXJWb3Rlc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRWb3Rlc0xpc3QoW10pfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuZ2V0QXNzZXRNYXA9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5nZXRNYXBGaWVsZCh0aGlzLDYscixudWxsKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmNsZWFyQXNzZXRNYXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRBc3NldE1hcCgpLmNsZWFyKCksdGhpc30sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmdldEFzc2V0djJNYXA9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5nZXRNYXBGaWVsZCh0aGlzLDU2LHIsbnVsbCl9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5jbGVhckFzc2V0djJNYXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRBc3NldHYyTWFwKCkuY2xlYXIoKSx0aGlzfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuZ2V0RnJvemVuTGlzdD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxUcm9uV2ViUHJvdG8uQWNjb3VudC5Gcm96ZW4sNyl9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5zZXRGcm96ZW5MaXN0PWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw3LHIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuYWRkRnJvemVuPWZ1bmN0aW9uKHIsbyl7cmV0dXJuIGUuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNyxyLFRyb25XZWJQcm90by5BY2NvdW50LkZyb3plbixvKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmNsZWFyRnJvemVuTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEZyb3plbkxpc3QoW10pfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuZ2V0TmV0VXNhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw4LDApfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuc2V0TmV0VXNhZ2U9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDgscil9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5nZXRBY3F1aXJlZERlbGVnYXRlZEZyb3plbkJhbGFuY2VGb3JCYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw0MSwwKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLnNldEFjcXVpcmVkRGVsZWdhdGVkRnJvemVuQmFsYW5jZUZvckJhbmR3aWR0aD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsNDEscil9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5nZXREZWxlZ2F0ZWRGcm96ZW5CYWxhbmNlRm9yQmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNDIsMCl9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5zZXREZWxlZ2F0ZWRGcm96ZW5CYWxhbmNlRm9yQmFuZHdpZHRoPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcyw0MixyKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmdldE9sZFRyb25Qb3dlcj1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDQ2LDApfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuc2V0T2xkVHJvblBvd2VyPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcyw0NixyKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmdldFRyb25Qb3dlcj1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsVHJvbldlYlByb3RvLkFjY291bnQuRnJvemVuLDQ3KX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLnNldFRyb25Qb3dlcj1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDQ3LHIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuY2xlYXJUcm9uUG93ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRUcm9uUG93ZXIodm9pZCAwKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmhhc1Ryb25Qb3dlcj1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw0NykhPW51bGx9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5nZXRBc3NldE9wdGltaXplZD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcyw2MCwhMSl9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5zZXRBc3NldE9wdGltaXplZD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLDYwLHIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuZ2V0Q3JlYXRlVGltZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDksMCl9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5zZXRDcmVhdGVUaW1lPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcyw5LHIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuZ2V0TGF0ZXN0T3ByYXRpb25UaW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMTAsMCl9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5zZXRMYXRlc3RPcHJhdGlvblRpbWU9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDEwLHIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuZ2V0QWxsb3dhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMTEsMCl9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5zZXRBbGxvd2FuY2U9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDExLHIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuZ2V0TGF0ZXN0V2l0aGRyYXdUaW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMTIsMCl9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5zZXRMYXRlc3RXaXRoZHJhd1RpbWU9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDEyLHIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuZ2V0Q29kZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEzLCIiKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmdldENvZGVfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRDb2RlKCkpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuZ2V0Q29kZV9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRDb2RlKCkpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuc2V0Q29kZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywxMyxyKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmdldElzV2l0bmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywxNCwhMSl9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5zZXRJc1dpdG5lc3M9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCb29sZWFuRmllbGQodGhpcywxNCxyKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmdldElzQ29tbWl0dGVlPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDE1LCExKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLnNldElzQ29tbWl0dGVlPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQm9vbGVhbkZpZWxkKHRoaXMsMTUscil9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5nZXRGcm96ZW5TdXBwbHlMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLFRyb25XZWJQcm90by5BY2NvdW50LkZyb3plbiwxNil9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5zZXRGcm96ZW5TdXBwbHlMaXN0PWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywxNixyKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmFkZEZyb3plblN1cHBseT1mdW5jdGlvbihyLG8pe3JldHVybiBlLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDE2LHIsVHJvbldlYlByb3RvLkFjY291bnQuRnJvemVuLG8pfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuY2xlYXJGcm96ZW5TdXBwbHlMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0RnJvemVuU3VwcGx5TGlzdChbXSl9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5nZXRBc3NldElzc3VlZE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxNywiIil9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5nZXRBc3NldElzc3VlZE5hbWVfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRBc3NldElzc3VlZE5hbWUoKSl9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5nZXRBc3NldElzc3VlZE5hbWVfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0QXNzZXRJc3N1ZWROYW1lKCkpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuc2V0QXNzZXRJc3N1ZWROYW1lPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDE3LHIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuZ2V0QXNzZXRJc3N1ZWRJZD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDU3LCIiKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmdldEFzc2V0SXNzdWVkSWRfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRBc3NldElzc3VlZElkKCkpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuZ2V0QXNzZXRJc3N1ZWRJZF9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRBc3NldElzc3VlZElkKCkpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuc2V0QXNzZXRJc3N1ZWRJZD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcyw1NyxyKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmdldExhdGVzdEFzc2V0T3BlcmF0aW9uVGltZU1hcD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLmdldE1hcEZpZWxkKHRoaXMsMTgscixudWxsKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmNsZWFyTGF0ZXN0QXNzZXRPcGVyYXRpb25UaW1lTWFwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TGF0ZXN0QXNzZXRPcGVyYXRpb25UaW1lTWFwKCkuY2xlYXIoKSx0aGlzfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuZ2V0TGF0ZXN0QXNzZXRPcGVyYXRpb25UaW1ldjJNYXA9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5nZXRNYXBGaWVsZCh0aGlzLDU4LHIsbnVsbCl9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5jbGVhckxhdGVzdEFzc2V0T3BlcmF0aW9uVGltZXYyTWFwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TGF0ZXN0QXNzZXRPcGVyYXRpb25UaW1ldjJNYXAoKS5jbGVhcigpLHRoaXN9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5nZXRGcmVlTmV0VXNhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxOSwwKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLnNldEZyZWVOZXRVc2FnZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMTkscil9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5nZXRGcmVlQXNzZXROZXRVc2FnZU1hcD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLmdldE1hcEZpZWxkKHRoaXMsMjAscixudWxsKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmNsZWFyRnJlZUFzc2V0TmV0VXNhZ2VNYXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRGcmVlQXNzZXROZXRVc2FnZU1hcCgpLmNsZWFyKCksdGhpc30sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmdldEZyZWVBc3NldE5ldFVzYWdldjJNYXA9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5nZXRNYXBGaWVsZCh0aGlzLDU5LHIsbnVsbCl9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5jbGVhckZyZWVBc3NldE5ldFVzYWdldjJNYXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRGcmVlQXNzZXROZXRVc2FnZXYyTWFwKCkuY2xlYXIoKSx0aGlzfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuZ2V0TGF0ZXN0Q29uc3VtZVRpbWU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyMSwwKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLnNldExhdGVzdENvbnN1bWVUaW1lPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywyMSxyKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmdldExhdGVzdENvbnN1bWVGcmVlVGltZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIyLDApfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuc2V0TGF0ZXN0Q29uc3VtZUZyZWVUaW1lPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywyMixyKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmdldEFjY291bnRJZD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIzLCIiKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmdldEFjY291bnRJZF9hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldEFjY291bnRJZCgpKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmdldEFjY291bnRJZF9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRBY2NvdW50SWQoKSl9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5zZXRBY2NvdW50SWQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMjMscil9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5nZXRBY2NvdW50UmVzb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLFRyb25XZWJQcm90by5BY2NvdW50LkFjY291bnRSZXNvdXJjZSwyNil9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5zZXRBY2NvdW50UmVzb3VyY2U9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywyNixyKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmNsZWFyQWNjb3VudFJlc291cmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0QWNjb3VudFJlc291cmNlKHZvaWQgMCl9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5oYXNBY2NvdW50UmVzb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMjYpIT1udWxsfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuZ2V0Q29kZWhhc2g9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywzMCwiIil9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5nZXRDb2RlaGFzaF9hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldENvZGVoYXNoKCkpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuZ2V0Q29kZWhhc2hfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0Q29kZWhhc2goKSl9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5zZXRDb2RlaGFzaD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywzMCxyKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmdldE93bmVyUGVybWlzc2lvbj1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsVHJvbldlYlByb3RvLlBlcm1pc3Npb24sMzEpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuc2V0T3duZXJQZXJtaXNzaW9uPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMzEscil9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5jbGVhck93bmVyUGVybWlzc2lvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldE93bmVyUGVybWlzc2lvbih2b2lkIDApfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuaGFzT3duZXJQZXJtaXNzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDMxKSE9bnVsbH0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmdldFdpdG5lc3NQZXJtaXNzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxUcm9uV2ViUHJvdG8uUGVybWlzc2lvbiwzMil9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5zZXRXaXRuZXNzUGVybWlzc2lvbj1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDMyLHIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudC5wcm90b3R5cGUuY2xlYXJXaXRuZXNzUGVybWlzc2lvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFdpdG5lc3NQZXJtaXNzaW9uKHZvaWQgMCl9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5oYXNXaXRuZXNzUGVybWlzc2lvbj1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywzMikhPW51bGx9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5nZXRBY3RpdmVQZXJtaXNzaW9uTGlzdD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxUcm9uV2ViUHJvdG8uUGVybWlzc2lvbiwzMyl9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5zZXRBY3RpdmVQZXJtaXNzaW9uTGlzdD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMzMscil9LFRyb25XZWJQcm90by5BY2NvdW50LnByb3RvdHlwZS5hZGRBY3RpdmVQZXJtaXNzaW9uPWZ1bmN0aW9uKHIsbyl7cmV0dXJuIGUuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMzMscixUcm9uV2ViUHJvdG8uUGVybWlzc2lvbixvKX0sVHJvbldlYlByb3RvLkFjY291bnQucHJvdG90eXBlLmNsZWFyQWN0aXZlUGVybWlzc2lvbkxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRBY3RpdmVQZXJtaXNzaW9uTGlzdChbXSl9LGUuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihUcm9uV2ViUHJvdG8uS2V5LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihyKXtyZXR1cm4gVHJvbldlYlByb3RvLktleS50b09iamVjdChyLHRoaXMpfSxUcm9uV2ViUHJvdG8uS2V5LnRvT2JqZWN0PWZ1bmN0aW9uKHIsbyl7dmFyIGk9e2FkZHJlc3M6by5nZXRBZGRyZXNzX2FzQjY0KCksd2VpZ2h0OmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sMiwwKX07cmV0dXJuIHImJihpLiRqc3BiTWVzc2FnZUluc3RhbmNlPW8pLGl9KSxUcm9uV2ViUHJvdG8uS2V5LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHIpe3ZhciBvPW5ldyBlLkJpbmFyeVJlYWRlcihyKSxpPW5ldyBUcm9uV2ViUHJvdG8uS2V5O3JldHVybiBUcm9uV2ViUHJvdG8uS2V5LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihpLG8pfSxUcm9uV2ViUHJvdG8uS2V5LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihyLG8pe2Zvcig7by5uZXh0RmllbGQoKSYmIW8uaXNFbmRHcm91cCgpOyl7dmFyIGk9by5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChpKXtjYXNlIDE6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldEFkZHJlc3MoYyk7YnJlYWs7Y2FzZSAyOnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRXZWlnaHQoYyk7YnJlYWs7ZGVmYXVsdDpvLnNraXBGaWVsZCgpO2JyZWFrfX1yZXR1cm4gcn0sVHJvbldlYlByb3RvLktleS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IGUuQmluYXJ5V3JpdGVyO3JldHVybiBUcm9uV2ViUHJvdG8uS2V5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsciksci5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLktleS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihyLG8pe3ZhciBpPXZvaWQgMDtpPXIuZ2V0QWRkcmVzc19hc1U4KCksaS5sZW5ndGg+MCYmby53cml0ZUJ5dGVzKDEsaSksaT1yLmdldFdlaWdodCgpLGkhPT0wJiZvLndyaXRlSW50NjQoMixpKX0sVHJvbldlYlByb3RvLktleS5wcm90b3R5cGUuZ2V0QWRkcmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsIiIpfSxUcm9uV2ViUHJvdG8uS2V5LnByb3RvdHlwZS5nZXRBZGRyZXNzX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0QWRkcmVzcygpKX0sVHJvbldlYlByb3RvLktleS5wcm90b3R5cGUuZ2V0QWRkcmVzc19hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uS2V5LnByb3RvdHlwZS5zZXRBZGRyZXNzPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDEscil9LFRyb25XZWJQcm90by5LZXkucHJvdG90eXBlLmdldFdlaWdodD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsMCl9LFRyb25XZWJQcm90by5LZXkucHJvdG90eXBlLnNldFdlaWdodD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMixyKX0sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5EZWxlZ2F0ZWRSZXNvdXJjZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocil7cmV0dXJuIFRyb25XZWJQcm90by5EZWxlZ2F0ZWRSZXNvdXJjZS50b09iamVjdChyLHRoaXMpfSxUcm9uV2ViUHJvdG8uRGVsZWdhdGVkUmVzb3VyY2UudG9PYmplY3Q9ZnVuY3Rpb24ocixvKXt2YXIgaT17ZnJvbTpvLmdldEZyb21fYXNCNjQoKSx0bzpvLmdldFRvX2FzQjY0KCksZnJvemVuQmFsYW5jZUZvckJhbmR3aWR0aDplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDMsMCksZnJvemVuQmFsYW5jZUZvckVuZXJneTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDQsMCksZXhwaXJlVGltZUZvckJhbmR3aWR0aDplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDUsMCksZXhwaXJlVGltZUZvckVuZXJneTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDYsMCl9O3JldHVybiByJiYoaS4kanNwYk1lc3NhZ2VJbnN0YW5jZT1vKSxpfSksVHJvbldlYlByb3RvLkRlbGVnYXRlZFJlc291cmNlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHIpe3ZhciBvPW5ldyBlLkJpbmFyeVJlYWRlcihyKSxpPW5ldyBUcm9uV2ViUHJvdG8uRGVsZWdhdGVkUmVzb3VyY2U7cmV0dXJuIFRyb25XZWJQcm90by5EZWxlZ2F0ZWRSZXNvdXJjZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaSxvKX0sVHJvbldlYlByb3RvLkRlbGVnYXRlZFJlc291cmNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihyLG8pe2Zvcig7by5uZXh0RmllbGQoKSYmIW8uaXNFbmRHcm91cCgpOyl7dmFyIGk9by5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChpKXtjYXNlIDE6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldEZyb20oYyk7YnJlYWs7Y2FzZSAyOnZhciBjPW8ucmVhZEJ5dGVzKCk7ci5zZXRUbyhjKTticmVhaztjYXNlIDM6dmFyIGM9by5yZWFkSW50NjQoKTtyLnNldEZyb3plbkJhbGFuY2VGb3JCYW5kd2lkdGgoYyk7YnJlYWs7Y2FzZSA0OnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRGcm96ZW5CYWxhbmNlRm9yRW5lcmd5KGMpO2JyZWFrO2Nhc2UgNTp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0RXhwaXJlVGltZUZvckJhbmR3aWR0aChjKTticmVhaztjYXNlIDY6dmFyIGM9by5yZWFkSW50NjQoKTtyLnNldEV4cGlyZVRpbWVGb3JFbmVyZ3koYyk7YnJlYWs7ZGVmYXVsdDpvLnNraXBGaWVsZCgpO2JyZWFrfX1yZXR1cm4gcn0sVHJvbldlYlByb3RvLkRlbGVnYXRlZFJlc291cmNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcj1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIFRyb25XZWJQcm90by5EZWxlZ2F0ZWRSZXNvdXJjZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLHIpLHIuZ2V0UmVzdWx0QnVmZmVyKCl9LFRyb25XZWJQcm90by5EZWxlZ2F0ZWRSZXNvdXJjZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihyLG8pe3ZhciBpPXZvaWQgMDtpPXIuZ2V0RnJvbV9hc1U4KCksaS5sZW5ndGg+MCYmby53cml0ZUJ5dGVzKDEsaSksaT1yLmdldFRvX2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlQnl0ZXMoMixpKSxpPXIuZ2V0RnJvemVuQmFsYW5jZUZvckJhbmR3aWR0aCgpLGkhPT0wJiZvLndyaXRlSW50NjQoMyxpKSxpPXIuZ2V0RnJvemVuQmFsYW5jZUZvckVuZXJneSgpLGkhPT0wJiZvLndyaXRlSW50NjQoNCxpKSxpPXIuZ2V0RXhwaXJlVGltZUZvckJhbmR3aWR0aCgpLGkhPT0wJiZvLndyaXRlSW50NjQoNSxpKSxpPXIuZ2V0RXhwaXJlVGltZUZvckVuZXJneSgpLGkhPT0wJiZvLndyaXRlSW50NjQoNixpKX0sVHJvbldlYlByb3RvLkRlbGVnYXRlZFJlc291cmNlLnByb3RvdHlwZS5nZXRGcm9tPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwiIil9LFRyb25XZWJQcm90by5EZWxlZ2F0ZWRSZXNvdXJjZS5wcm90b3R5cGUuZ2V0RnJvbV9hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldEZyb20oKSl9LFRyb25XZWJQcm90by5EZWxlZ2F0ZWRSZXNvdXJjZS5wcm90b3R5cGUuZ2V0RnJvbV9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRGcm9tKCkpfSxUcm9uV2ViUHJvdG8uRGVsZWdhdGVkUmVzb3VyY2UucHJvdG90eXBlLnNldEZyb209ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMSxyKX0sVHJvbldlYlByb3RvLkRlbGVnYXRlZFJlc291cmNlLnByb3RvdHlwZS5nZXRUbz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsIiIpfSxUcm9uV2ViUHJvdG8uRGVsZWdhdGVkUmVzb3VyY2UucHJvdG90eXBlLmdldFRvX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0VG8oKSl9LFRyb25XZWJQcm90by5EZWxlZ2F0ZWRSZXNvdXJjZS5wcm90b3R5cGUuZ2V0VG9fYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0VG8oKSl9LFRyb25XZWJQcm90by5EZWxlZ2F0ZWRSZXNvdXJjZS5wcm90b3R5cGUuc2V0VG89ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMixyKX0sVHJvbldlYlByb3RvLkRlbGVnYXRlZFJlc291cmNlLnByb3RvdHlwZS5nZXRGcm96ZW5CYWxhbmNlRm9yQmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMywwKX0sVHJvbldlYlByb3RvLkRlbGVnYXRlZFJlc291cmNlLnByb3RvdHlwZS5zZXRGcm96ZW5CYWxhbmNlRm9yQmFuZHdpZHRoPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywzLHIpfSxUcm9uV2ViUHJvdG8uRGVsZWdhdGVkUmVzb3VyY2UucHJvdG90eXBlLmdldEZyb3plbkJhbGFuY2VGb3JFbmVyZ3k9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw0LDApfSxUcm9uV2ViUHJvdG8uRGVsZWdhdGVkUmVzb3VyY2UucHJvdG90eXBlLnNldEZyb3plbkJhbGFuY2VGb3JFbmVyZ3k9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDQscil9LFRyb25XZWJQcm90by5EZWxlZ2F0ZWRSZXNvdXJjZS5wcm90b3R5cGUuZ2V0RXhwaXJlVGltZUZvckJhbmR3aWR0aD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDUsMCl9LFRyb25XZWJQcm90by5EZWxlZ2F0ZWRSZXNvdXJjZS5wcm90b3R5cGUuc2V0RXhwaXJlVGltZUZvckJhbmR3aWR0aD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsNSxyKX0sVHJvbldlYlByb3RvLkRlbGVnYXRlZFJlc291cmNlLnByb3RvdHlwZS5nZXRFeHBpcmVUaW1lRm9yRW5lcmd5PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNiwwKX0sVHJvbldlYlByb3RvLkRlbGVnYXRlZFJlc291cmNlLnByb3RvdHlwZS5zZXRFeHBpcmVUaW1lRm9yRW5lcmd5PWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcyw2LHIpfSxlLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYoVHJvbldlYlByb3RvLmF1dGhvcml0eS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocil7cmV0dXJuIFRyb25XZWJQcm90by5hdXRob3JpdHkudG9PYmplY3Qocix0aGlzKX0sVHJvbldlYlByb3RvLmF1dGhvcml0eS50b09iamVjdD1mdW5jdGlvbihyLG8pe3ZhciBpLGM9e2FjY291bnQ6KGk9by5nZXRBY2NvdW50KCkpJiZUcm9uV2ViUHJvdG8uQWNjb3VudElkLnRvT2JqZWN0KHIsaSkscGVybWlzc2lvbk5hbWU6by5nZXRQZXJtaXNzaW9uTmFtZV9hc0I2NCgpfTtyZXR1cm4gciYmKGMuJGpzcGJNZXNzYWdlSW5zdGFuY2U9byksY30pLFRyb25XZWJQcm90by5hdXRob3JpdHkuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocil7dmFyIG89bmV3IGUuQmluYXJ5UmVhZGVyKHIpLGk9bmV3IFRyb25XZWJQcm90by5hdXRob3JpdHk7cmV0dXJuIFRyb25XZWJQcm90by5hdXRob3JpdHkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGksbyl9LFRyb25XZWJQcm90by5hdXRob3JpdHkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHIsbyl7Zm9yKDtvLm5leHRGaWVsZCgpJiYhby5pc0VuZEdyb3VwKCk7KXt2YXIgaT1vLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKGkpe2Nhc2UgMTp2YXIgYz1uZXcgVHJvbldlYlByb3RvLkFjY291bnRJZDtvLnJlYWRNZXNzYWdlKGMsVHJvbldlYlByb3RvLkFjY291bnRJZC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLHIuc2V0QWNjb3VudChjKTticmVhaztjYXNlIDI6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldFBlcm1pc3Npb25OYW1lKGMpO2JyZWFrO2RlZmF1bHQ6by5za2lwRmllbGQoKTticmVha319cmV0dXJuIHJ9LFRyb25XZWJQcm90by5hdXRob3JpdHkucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciByPW5ldyBlLkJpbmFyeVdyaXRlcjtyZXR1cm4gVHJvbldlYlByb3RvLmF1dGhvcml0eS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLHIpLHIuZ2V0UmVzdWx0QnVmZmVyKCl9LFRyb25XZWJQcm90by5hdXRob3JpdHkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24ocixvKXt2YXIgaT12b2lkIDA7aT1yLmdldEFjY291bnQoKSxpIT1udWxsJiZvLndyaXRlTWVzc2FnZSgxLGksVHJvbldlYlByb3RvLkFjY291bnRJZC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksaT1yLmdldFBlcm1pc3Npb25OYW1lX2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlQnl0ZXMoMixpKX0sVHJvbldlYlByb3RvLmF1dGhvcml0eS5wcm90b3R5cGUuZ2V0QWNjb3VudD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsVHJvbldlYlByb3RvLkFjY291bnRJZCwxKX0sVHJvbldlYlByb3RvLmF1dGhvcml0eS5wcm90b3R5cGUuc2V0QWNjb3VudD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDEscil9LFRyb25XZWJQcm90by5hdXRob3JpdHkucHJvdG90eXBlLmNsZWFyQWNjb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEFjY291bnQodm9pZCAwKX0sVHJvbldlYlByb3RvLmF1dGhvcml0eS5wcm90b3R5cGUuaGFzQWNjb3VudD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKSE9bnVsbH0sVHJvbldlYlByb3RvLmF1dGhvcml0eS5wcm90b3R5cGUuZ2V0UGVybWlzc2lvbk5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLCIiKX0sVHJvbldlYlByb3RvLmF1dGhvcml0eS5wcm90b3R5cGUuZ2V0UGVybWlzc2lvbk5hbWVfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRQZXJtaXNzaW9uTmFtZSgpKX0sVHJvbldlYlByb3RvLmF1dGhvcml0eS5wcm90b3R5cGUuZ2V0UGVybWlzc2lvbk5hbWVfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0UGVybWlzc2lvbk5hbWUoKSl9LFRyb25XZWJQcm90by5hdXRob3JpdHkucHJvdG90eXBlLnNldFBlcm1pc3Npb25OYW1lPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDIscil9LFRyb25XZWJQcm90by5QZXJtaXNzaW9uLnJlcGVhdGVkRmllbGRzXz1bN10sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5QZXJtaXNzaW9uLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihyKXtyZXR1cm4gVHJvbldlYlByb3RvLlBlcm1pc3Npb24udG9PYmplY3Qocix0aGlzKX0sVHJvbldlYlByb3RvLlBlcm1pc3Npb24udG9PYmplY3Q9ZnVuY3Rpb24ocixvKXt2YXIgaT17dHlwZTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDEsMCksaWQ6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobywyLDApLHBlcm1pc3Npb25OYW1lOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sMywiIiksdGhyZXNob2xkOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sNCwwKSxwYXJlbnRJZDplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDUsMCksb3BlcmF0aW9uczpvLmdldE9wZXJhdGlvbnNfYXNCNjQoKSxrZXlzTGlzdDplLk1lc3NhZ2UudG9PYmplY3RMaXN0KG8uZ2V0S2V5c0xpc3QoKSxUcm9uV2ViUHJvdG8uS2V5LnRvT2JqZWN0LHIpfTtyZXR1cm4gciYmKGkuJGpzcGJNZXNzYWdlSW5zdGFuY2U9byksaX0pLFRyb25XZWJQcm90by5QZXJtaXNzaW9uLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHIpe3ZhciBvPW5ldyBlLkJpbmFyeVJlYWRlcihyKSxpPW5ldyBUcm9uV2ViUHJvdG8uUGVybWlzc2lvbjtyZXR1cm4gVHJvbldlYlByb3RvLlBlcm1pc3Npb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGksbyl9LFRyb25XZWJQcm90by5QZXJtaXNzaW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihyLG8pe2Zvcig7by5uZXh0RmllbGQoKSYmIW8uaXNFbmRHcm91cCgpOyl7dmFyIGk9by5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChpKXtjYXNlIDE6dmFyIGM9by5yZWFkRW51bSgpO3Iuc2V0VHlwZShjKTticmVhaztjYXNlIDI6dmFyIGM9by5yZWFkSW50MzIoKTtyLnNldElkKGMpO2JyZWFrO2Nhc2UgMzp2YXIgYz1vLnJlYWRTdHJpbmcoKTtyLnNldFBlcm1pc3Npb25OYW1lKGMpO2JyZWFrO2Nhc2UgNDp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0VGhyZXNob2xkKGMpO2JyZWFrO2Nhc2UgNTp2YXIgYz1vLnJlYWRJbnQzMigpO3Iuc2V0UGFyZW50SWQoYyk7YnJlYWs7Y2FzZSA2OnZhciBjPW8ucmVhZEJ5dGVzKCk7ci5zZXRPcGVyYXRpb25zKGMpO2JyZWFrO2Nhc2UgNzp2YXIgYz1uZXcgVHJvbldlYlByb3RvLktleTtvLnJlYWRNZXNzYWdlKGMsVHJvbldlYlByb3RvLktleS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLHIuYWRkS2V5cyhjKTticmVhaztkZWZhdWx0Om8uc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiByfSxUcm9uV2ViUHJvdG8uUGVybWlzc2lvbi5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IGUuQmluYXJ5V3JpdGVyO3JldHVybiBUcm9uV2ViUHJvdG8uUGVybWlzc2lvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLHIpLHIuZ2V0UmVzdWx0QnVmZmVyKCl9LFRyb25XZWJQcm90by5QZXJtaXNzaW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHIsbyl7dmFyIGk9dm9pZCAwO2k9ci5nZXRUeXBlKCksaSE9PTAmJm8ud3JpdGVFbnVtKDEsaSksaT1yLmdldElkKCksaSE9PTAmJm8ud3JpdGVJbnQzMigyLGkpLGk9ci5nZXRQZXJtaXNzaW9uTmFtZSgpLGkubGVuZ3RoPjAmJm8ud3JpdGVTdHJpbmcoMyxpKSxpPXIuZ2V0VGhyZXNob2xkKCksaSE9PTAmJm8ud3JpdGVJbnQ2NCg0LGkpLGk9ci5nZXRQYXJlbnRJZCgpLGkhPT0wJiZvLndyaXRlSW50MzIoNSxpKSxpPXIuZ2V0T3BlcmF0aW9uc19hc1U4KCksaS5sZW5ndGg+MCYmby53cml0ZUJ5dGVzKDYsaSksaT1yLmdldEtleXNMaXN0KCksaS5sZW5ndGg+MCYmby53cml0ZVJlcGVhdGVkTWVzc2FnZSg3LGksVHJvbldlYlByb3RvLktleS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LFRyb25XZWJQcm90by5QZXJtaXNzaW9uLlBlcm1pc3Npb25UeXBlPXtPV05FUjowLFdJVE5FU1M6MSxBQ1RJVkU6Mn0sVHJvbldlYlByb3RvLlBlcm1pc3Npb24ucHJvdG90eXBlLmdldFR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLDApfSxUcm9uV2ViUHJvdG8uUGVybWlzc2lvbi5wcm90b3R5cGUuc2V0VHlwZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0VudW1GaWVsZCh0aGlzLDEscil9LFRyb25XZWJQcm90by5QZXJtaXNzaW9uLnByb3RvdHlwZS5nZXRJZD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsMCl9LFRyb25XZWJQcm90by5QZXJtaXNzaW9uLnByb3RvdHlwZS5zZXRJZD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMixyKX0sVHJvbldlYlByb3RvLlBlcm1pc3Npb24ucHJvdG90eXBlLmdldFBlcm1pc3Npb25OYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMywiIil9LFRyb25XZWJQcm90by5QZXJtaXNzaW9uLnByb3RvdHlwZS5zZXRQZXJtaXNzaW9uTmFtZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMyxyKX0sVHJvbldlYlByb3RvLlBlcm1pc3Npb24ucHJvdG90eXBlLmdldFRocmVzaG9sZD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDQsMCl9LFRyb25XZWJQcm90by5QZXJtaXNzaW9uLnByb3RvdHlwZS5zZXRUaHJlc2hvbGQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDQscil9LFRyb25XZWJQcm90by5QZXJtaXNzaW9uLnByb3RvdHlwZS5nZXRQYXJlbnRJZD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDUsMCl9LFRyb25XZWJQcm90by5QZXJtaXNzaW9uLnByb3RvdHlwZS5zZXRQYXJlbnRJZD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsNSxyKX0sVHJvbldlYlByb3RvLlBlcm1pc3Npb24ucHJvdG90eXBlLmdldE9wZXJhdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw2LCIiKX0sVHJvbldlYlByb3RvLlBlcm1pc3Npb24ucHJvdG90eXBlLmdldE9wZXJhdGlvbnNfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRPcGVyYXRpb25zKCkpfSxUcm9uV2ViUHJvdG8uUGVybWlzc2lvbi5wcm90b3R5cGUuZ2V0T3BlcmF0aW9uc19hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRPcGVyYXRpb25zKCkpfSxUcm9uV2ViUHJvdG8uUGVybWlzc2lvbi5wcm90b3R5cGUuc2V0T3BlcmF0aW9ucz1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcyw2LHIpfSxUcm9uV2ViUHJvdG8uUGVybWlzc2lvbi5wcm90b3R5cGUuZ2V0S2V5c0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsVHJvbldlYlByb3RvLktleSw3KX0sVHJvbldlYlByb3RvLlBlcm1pc3Npb24ucHJvdG90eXBlLnNldEtleXNMaXN0PWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw3LHIpfSxUcm9uV2ViUHJvdG8uUGVybWlzc2lvbi5wcm90b3R5cGUuYWRkS2V5cz1mdW5jdGlvbihyLG8pe3JldHVybiBlLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDcscixUcm9uV2ViUHJvdG8uS2V5LG8pfSxUcm9uV2ViUHJvdG8uUGVybWlzc2lvbi5wcm90b3R5cGUuY2xlYXJLZXlzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEtleXNMaXN0KFtdKX0sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5XaXRuZXNzLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihyKXtyZXR1cm4gVHJvbldlYlByb3RvLldpdG5lc3MudG9PYmplY3Qocix0aGlzKX0sVHJvbldlYlByb3RvLldpdG5lc3MudG9PYmplY3Q9ZnVuY3Rpb24ocixvKXt2YXIgaT17YWRkcmVzczpvLmdldEFkZHJlc3NfYXNCNjQoKSx2b3RlY291bnQ6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobywyLDApLHB1YmtleTpvLmdldFB1YmtleV9hc0I2NCgpLHVybDplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDQsIiIpLHRvdGFscHJvZHVjZWQ6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobyw1LDApLHRvdGFsbWlzc2VkOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sNiwwKSxsYXRlc3RibG9ja251bTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDcsMCksbGF0ZXN0c2xvdG51bTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDgsMCksaXNqb2JzOmUuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdChvLDksITEpfTtyZXR1cm4gciYmKGkuJGpzcGJNZXNzYWdlSW5zdGFuY2U9byksaX0pLFRyb25XZWJQcm90by5XaXRuZXNzLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHIpe3ZhciBvPW5ldyBlLkJpbmFyeVJlYWRlcihyKSxpPW5ldyBUcm9uV2ViUHJvdG8uV2l0bmVzcztyZXR1cm4gVHJvbldlYlByb3RvLldpdG5lc3MuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGksbyl9LFRyb25XZWJQcm90by5XaXRuZXNzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihyLG8pe2Zvcig7by5uZXh0RmllbGQoKSYmIW8uaXNFbmRHcm91cCgpOyl7dmFyIGk9by5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChpKXtjYXNlIDE6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldEFkZHJlc3MoYyk7YnJlYWs7Y2FzZSAyOnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRWb3RlY291bnQoYyk7YnJlYWs7Y2FzZSAzOnZhciBjPW8ucmVhZEJ5dGVzKCk7ci5zZXRQdWJrZXkoYyk7YnJlYWs7Y2FzZSA0OnZhciBjPW8ucmVhZFN0cmluZygpO3Iuc2V0VXJsKGMpO2JyZWFrO2Nhc2UgNTp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0VG90YWxwcm9kdWNlZChjKTticmVhaztjYXNlIDY6dmFyIGM9by5yZWFkSW50NjQoKTtyLnNldFRvdGFsbWlzc2VkKGMpO2JyZWFrO2Nhc2UgNzp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0TGF0ZXN0YmxvY2tudW0oYyk7YnJlYWs7Y2FzZSA4OnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRMYXRlc3RzbG90bnVtKGMpO2JyZWFrO2Nhc2UgOTp2YXIgYz1vLnJlYWRCb29sKCk7ci5zZXRJc2pvYnMoYyk7YnJlYWs7ZGVmYXVsdDpvLnNraXBGaWVsZCgpO2JyZWFrfX1yZXR1cm4gcn0sVHJvbldlYlByb3RvLldpdG5lc3MucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciByPW5ldyBlLkJpbmFyeVdyaXRlcjtyZXR1cm4gVHJvbldlYlByb3RvLldpdG5lc3Muc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxyKSxyLmdldFJlc3VsdEJ1ZmZlcigpfSxUcm9uV2ViUHJvdG8uV2l0bmVzcy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihyLG8pe3ZhciBpPXZvaWQgMDtpPXIuZ2V0QWRkcmVzc19hc1U4KCksaS5sZW5ndGg+MCYmby53cml0ZUJ5dGVzKDEsaSksaT1yLmdldFZvdGVjb3VudCgpLGkhPT0wJiZvLndyaXRlSW50NjQoMixpKSxpPXIuZ2V0UHVia2V5X2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlQnl0ZXMoMyxpKSxpPXIuZ2V0VXJsKCksaS5sZW5ndGg+MCYmby53cml0ZVN0cmluZyg0LGkpLGk9ci5nZXRUb3RhbHByb2R1Y2VkKCksaSE9PTAmJm8ud3JpdGVJbnQ2NCg1LGkpLGk9ci5nZXRUb3RhbG1pc3NlZCgpLGkhPT0wJiZvLndyaXRlSW50NjQoNixpKSxpPXIuZ2V0TGF0ZXN0YmxvY2tudW0oKSxpIT09MCYmby53cml0ZUludDY0KDcsaSksaT1yLmdldExhdGVzdHNsb3RudW0oKSxpIT09MCYmby53cml0ZUludDY0KDgsaSksaT1yLmdldElzam9icygpLGkmJm8ud3JpdGVCb29sKDksaSl9LFRyb25XZWJQcm90by5XaXRuZXNzLnByb3RvdHlwZS5nZXRBZGRyZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwiIil9LFRyb25XZWJQcm90by5XaXRuZXNzLnByb3RvdHlwZS5nZXRBZGRyZXNzX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0QWRkcmVzcygpKX0sVHJvbldlYlByb3RvLldpdG5lc3MucHJvdG90eXBlLmdldEFkZHJlc3NfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0QWRkcmVzcygpKX0sVHJvbldlYlByb3RvLldpdG5lc3MucHJvdG90eXBlLnNldEFkZHJlc3M9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMSxyKX0sVHJvbldlYlByb3RvLldpdG5lc3MucHJvdG90eXBlLmdldFZvdGVjb3VudD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsMCl9LFRyb25XZWJQcm90by5XaXRuZXNzLnByb3RvdHlwZS5zZXRWb3RlY291bnQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDIscil9LFRyb25XZWJQcm90by5XaXRuZXNzLnByb3RvdHlwZS5nZXRQdWJrZXk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywzLCIiKX0sVHJvbldlYlByb3RvLldpdG5lc3MucHJvdG90eXBlLmdldFB1YmtleV9hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldFB1YmtleSgpKX0sVHJvbldlYlByb3RvLldpdG5lc3MucHJvdG90eXBlLmdldFB1YmtleV9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRQdWJrZXkoKSl9LFRyb25XZWJQcm90by5XaXRuZXNzLnByb3RvdHlwZS5zZXRQdWJrZXk9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMyxyKX0sVHJvbldlYlByb3RvLldpdG5lc3MucHJvdG90eXBlLmdldFVybD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDQsIiIpfSxUcm9uV2ViUHJvdG8uV2l0bmVzcy5wcm90b3R5cGUuc2V0VXJsPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcyw0LHIpfSxUcm9uV2ViUHJvdG8uV2l0bmVzcy5wcm90b3R5cGUuZ2V0VG90YWxwcm9kdWNlZD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDUsMCl9LFRyb25XZWJQcm90by5XaXRuZXNzLnByb3RvdHlwZS5zZXRUb3RhbHByb2R1Y2VkPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcyw1LHIpfSxUcm9uV2ViUHJvdG8uV2l0bmVzcy5wcm90b3R5cGUuZ2V0VG90YWxtaXNzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw2LDApfSxUcm9uV2ViUHJvdG8uV2l0bmVzcy5wcm90b3R5cGUuc2V0VG90YWxtaXNzZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDYscil9LFRyb25XZWJQcm90by5XaXRuZXNzLnByb3RvdHlwZS5nZXRMYXRlc3RibG9ja251bT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDcsMCl9LFRyb25XZWJQcm90by5XaXRuZXNzLnByb3RvdHlwZS5zZXRMYXRlc3RibG9ja251bT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsNyxyKX0sVHJvbldlYlByb3RvLldpdG5lc3MucHJvdG90eXBlLmdldExhdGVzdHNsb3RudW09ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw4LDApfSxUcm9uV2ViUHJvdG8uV2l0bmVzcy5wcm90b3R5cGUuc2V0TGF0ZXN0c2xvdG51bT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsOCxyKX0sVHJvbldlYlByb3RvLldpdG5lc3MucHJvdG90eXBlLmdldElzam9icz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcyw5LCExKX0sVHJvbldlYlByb3RvLldpdG5lc3MucHJvdG90eXBlLnNldElzam9icz1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLDkscil9LFRyb25XZWJQcm90by5Wb3Rlcy5yZXBlYXRlZEZpZWxkc189WzIsM10sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5Wb3Rlcy5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocil7cmV0dXJuIFRyb25XZWJQcm90by5Wb3Rlcy50b09iamVjdChyLHRoaXMpfSxUcm9uV2ViUHJvdG8uVm90ZXMudG9PYmplY3Q9ZnVuY3Rpb24ocixvKXt2YXIgaT17YWRkcmVzczpvLmdldEFkZHJlc3NfYXNCNjQoKSxvbGRWb3Rlc0xpc3Q6ZS5NZXNzYWdlLnRvT2JqZWN0TGlzdChvLmdldE9sZFZvdGVzTGlzdCgpLFRyb25XZWJQcm90by5Wb3RlLnRvT2JqZWN0LHIpLG5ld1ZvdGVzTGlzdDplLk1lc3NhZ2UudG9PYmplY3RMaXN0KG8uZ2V0TmV3Vm90ZXNMaXN0KCksVHJvbldlYlByb3RvLlZvdGUudG9PYmplY3Qscil9O3JldHVybiByJiYoaS4kanNwYk1lc3NhZ2VJbnN0YW5jZT1vKSxpfSksVHJvbldlYlByb3RvLlZvdGVzLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHIpe3ZhciBvPW5ldyBlLkJpbmFyeVJlYWRlcihyKSxpPW5ldyBUcm9uV2ViUHJvdG8uVm90ZXM7cmV0dXJuIFRyb25XZWJQcm90by5Wb3Rlcy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaSxvKX0sVHJvbldlYlByb3RvLlZvdGVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihyLG8pe2Zvcig7by5uZXh0RmllbGQoKSYmIW8uaXNFbmRHcm91cCgpOyl7dmFyIGk9by5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChpKXtjYXNlIDE6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldEFkZHJlc3MoYyk7YnJlYWs7Y2FzZSAyOnZhciBjPW5ldyBUcm9uV2ViUHJvdG8uVm90ZTtvLnJlYWRNZXNzYWdlKGMsVHJvbldlYlByb3RvLlZvdGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxyLmFkZE9sZFZvdGVzKGMpO2JyZWFrO2Nhc2UgMzp2YXIgYz1uZXcgVHJvbldlYlByb3RvLlZvdGU7by5yZWFkTWVzc2FnZShjLFRyb25XZWJQcm90by5Wb3RlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksci5hZGROZXdWb3RlcyhjKTticmVhaztkZWZhdWx0Om8uc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiByfSxUcm9uV2ViUHJvdG8uVm90ZXMucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciByPW5ldyBlLkJpbmFyeVdyaXRlcjtyZXR1cm4gVHJvbldlYlByb3RvLlZvdGVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsciksci5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLlZvdGVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHIsbyl7dmFyIGk9dm9pZCAwO2k9ci5nZXRBZGRyZXNzX2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlQnl0ZXMoMSxpKSxpPXIuZ2V0T2xkVm90ZXNMaXN0KCksaS5sZW5ndGg+MCYmby53cml0ZVJlcGVhdGVkTWVzc2FnZSgyLGksVHJvbldlYlByb3RvLlZvdGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLGk9ci5nZXROZXdWb3Rlc0xpc3QoKSxpLmxlbmd0aD4wJiZvLndyaXRlUmVwZWF0ZWRNZXNzYWdlKDMsaSxUcm9uV2ViUHJvdG8uVm90ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LFRyb25XZWJQcm90by5Wb3Rlcy5wcm90b3R5cGUuZ2V0QWRkcmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsIiIpfSxUcm9uV2ViUHJvdG8uVm90ZXMucHJvdG90eXBlLmdldEFkZHJlc3NfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uVm90ZXMucHJvdG90eXBlLmdldEFkZHJlc3NfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0QWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlZvdGVzLnByb3RvdHlwZS5zZXRBZGRyZXNzPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDEscil9LFRyb25XZWJQcm90by5Wb3Rlcy5wcm90b3R5cGUuZ2V0T2xkVm90ZXNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLFRyb25XZWJQcm90by5Wb3RlLDIpfSxUcm9uV2ViUHJvdG8uVm90ZXMucHJvdG90eXBlLnNldE9sZFZvdGVzTGlzdD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMixyKX0sVHJvbldlYlByb3RvLlZvdGVzLnByb3RvdHlwZS5hZGRPbGRWb3Rlcz1mdW5jdGlvbihyLG8pe3JldHVybiBlLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDIscixUcm9uV2ViUHJvdG8uVm90ZSxvKX0sVHJvbldlYlByb3RvLlZvdGVzLnByb3RvdHlwZS5jbGVhck9sZFZvdGVzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldE9sZFZvdGVzTGlzdChbXSl9LFRyb25XZWJQcm90by5Wb3Rlcy5wcm90b3R5cGUuZ2V0TmV3Vm90ZXNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLFRyb25XZWJQcm90by5Wb3RlLDMpfSxUcm9uV2ViUHJvdG8uVm90ZXMucHJvdG90eXBlLnNldE5ld1ZvdGVzTGlzdD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMyxyKX0sVHJvbldlYlByb3RvLlZvdGVzLnByb3RvdHlwZS5hZGROZXdWb3Rlcz1mdW5jdGlvbihyLG8pe3JldHVybiBlLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDMscixUcm9uV2ViUHJvdG8uVm90ZSxvKX0sVHJvbldlYlByb3RvLlZvdGVzLnByb3RvdHlwZS5jbGVhck5ld1ZvdGVzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldE5ld1ZvdGVzTGlzdChbXSl9LGUuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihUcm9uV2ViUHJvdG8uTWFya2V0T3JkZXJEZXRhaWwucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKHIpe3JldHVybiBUcm9uV2ViUHJvdG8uTWFya2V0T3JkZXJEZXRhaWwudG9PYmplY3Qocix0aGlzKX0sVHJvbldlYlByb3RvLk1hcmtldE9yZGVyRGV0YWlsLnRvT2JqZWN0PWZ1bmN0aW9uKHIsbyl7dmFyIGk9e21ha2Vyb3JkZXJpZDpvLmdldE1ha2Vyb3JkZXJpZF9hc0I2NCgpLHRha2Vyb3JkZXJpZDpvLmdldFRha2Vyb3JkZXJpZF9hc0I2NCgpLGZpbGxzZWxscXVhbnRpdHk6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobywzLDApLGZpbGxidXlxdWFudGl0eTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDQsMCl9O3JldHVybiByJiYoaS4kanNwYk1lc3NhZ2VJbnN0YW5jZT1vKSxpfSksVHJvbldlYlByb3RvLk1hcmtldE9yZGVyRGV0YWlsLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHIpe3ZhciBvPW5ldyBlLkJpbmFyeVJlYWRlcihyKSxpPW5ldyBUcm9uV2ViUHJvdG8uTWFya2V0T3JkZXJEZXRhaWw7cmV0dXJuIFRyb25XZWJQcm90by5NYXJrZXRPcmRlckRldGFpbC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaSxvKX0sVHJvbldlYlByb3RvLk1hcmtldE9yZGVyRGV0YWlsLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihyLG8pe2Zvcig7by5uZXh0RmllbGQoKSYmIW8uaXNFbmRHcm91cCgpOyl7dmFyIGk9by5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChpKXtjYXNlIDE6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldE1ha2Vyb3JkZXJpZChjKTticmVhaztjYXNlIDI6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldFRha2Vyb3JkZXJpZChjKTticmVhaztjYXNlIDM6dmFyIGM9by5yZWFkSW50NjQoKTtyLnNldEZpbGxzZWxscXVhbnRpdHkoYyk7YnJlYWs7Y2FzZSA0OnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRGaWxsYnV5cXVhbnRpdHkoYyk7YnJlYWs7ZGVmYXVsdDpvLnNraXBGaWVsZCgpO2JyZWFrfX1yZXR1cm4gcn0sVHJvbldlYlByb3RvLk1hcmtldE9yZGVyRGV0YWlsLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcj1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIFRyb25XZWJQcm90by5NYXJrZXRPcmRlckRldGFpbC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLHIpLHIuZ2V0UmVzdWx0QnVmZmVyKCl9LFRyb25XZWJQcm90by5NYXJrZXRPcmRlckRldGFpbC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihyLG8pe3ZhciBpPXZvaWQgMDtpPXIuZ2V0TWFrZXJvcmRlcmlkX2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlQnl0ZXMoMSxpKSxpPXIuZ2V0VGFrZXJvcmRlcmlkX2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlQnl0ZXMoMixpKSxpPXIuZ2V0RmlsbHNlbGxxdWFudGl0eSgpLGkhPT0wJiZvLndyaXRlSW50NjQoMyxpKSxpPXIuZ2V0RmlsbGJ1eXF1YW50aXR5KCksaSE9PTAmJm8ud3JpdGVJbnQ2NCg0LGkpfSxUcm9uV2ViUHJvdG8uTWFya2V0T3JkZXJEZXRhaWwucHJvdG90eXBlLmdldE1ha2Vyb3JkZXJpZD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsIiIpfSxUcm9uV2ViUHJvdG8uTWFya2V0T3JkZXJEZXRhaWwucHJvdG90eXBlLmdldE1ha2Vyb3JkZXJpZF9hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldE1ha2Vyb3JkZXJpZCgpKX0sVHJvbldlYlByb3RvLk1hcmtldE9yZGVyRGV0YWlsLnByb3RvdHlwZS5nZXRNYWtlcm9yZGVyaWRfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0TWFrZXJvcmRlcmlkKCkpfSxUcm9uV2ViUHJvdG8uTWFya2V0T3JkZXJEZXRhaWwucHJvdG90eXBlLnNldE1ha2Vyb3JkZXJpZD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywxLHIpfSxUcm9uV2ViUHJvdG8uTWFya2V0T3JkZXJEZXRhaWwucHJvdG90eXBlLmdldFRha2Vyb3JkZXJpZD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsIiIpfSxUcm9uV2ViUHJvdG8uTWFya2V0T3JkZXJEZXRhaWwucHJvdG90eXBlLmdldFRha2Vyb3JkZXJpZF9hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldFRha2Vyb3JkZXJpZCgpKX0sVHJvbldlYlByb3RvLk1hcmtldE9yZGVyRGV0YWlsLnByb3RvdHlwZS5nZXRUYWtlcm9yZGVyaWRfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0VGFrZXJvcmRlcmlkKCkpfSxUcm9uV2ViUHJvdG8uTWFya2V0T3JkZXJEZXRhaWwucHJvdG90eXBlLnNldFRha2Vyb3JkZXJpZD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywyLHIpfSxUcm9uV2ViUHJvdG8uTWFya2V0T3JkZXJEZXRhaWwucHJvdG90eXBlLmdldEZpbGxzZWxscXVhbnRpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywzLDApfSxUcm9uV2ViUHJvdG8uTWFya2V0T3JkZXJEZXRhaWwucHJvdG90eXBlLnNldEZpbGxzZWxscXVhbnRpdHk9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDMscil9LFRyb25XZWJQcm90by5NYXJrZXRPcmRlckRldGFpbC5wcm90b3R5cGUuZ2V0RmlsbGJ1eXF1YW50aXR5PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNCwwKX0sVHJvbldlYlByb3RvLk1hcmtldE9yZGVyRGV0YWlsLnByb3RvdHlwZS5zZXRGaWxsYnV5cXVhbnRpdHk9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDQscil9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5yZXBlYXRlZEZpZWxkc189WzIsNV0sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocil7cmV0dXJuIFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi50b09iamVjdChyLHRoaXMpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24udG9PYmplY3Q9ZnVuY3Rpb24ocixvKXt2YXIgaSxjPXtyYXdEYXRhOihpPW8uZ2V0UmF3RGF0YSgpKSYmVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLnJhdy50b09iamVjdChyLGkpLHNpZ25hdHVyZUxpc3Q6by5nZXRTaWduYXR1cmVMaXN0X2FzQjY0KCkscmV0TGlzdDplLk1lc3NhZ2UudG9PYmplY3RMaXN0KG8uZ2V0UmV0TGlzdCgpLFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5SZXN1bHQudG9PYmplY3Qscil9O3JldHVybiByJiYoYy4kanNwYk1lc3NhZ2VJbnN0YW5jZT1vKSxjfSksVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHIpe3ZhciBvPW5ldyBlLkJpbmFyeVJlYWRlcihyKSxpPW5ldyBUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb247cmV0dXJuIFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaSxvKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihyLG8pe2Zvcig7by5uZXh0RmllbGQoKSYmIW8uaXNFbmRHcm91cCgpOyl7dmFyIGk9by5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChpKXtjYXNlIDE6dmFyIGM9bmV3IFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5yYXc7by5yZWFkTWVzc2FnZShjLFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5yYXcuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxyLnNldFJhd0RhdGEoYyk7YnJlYWs7Y2FzZSAyOnZhciBjPW8ucmVhZEJ5dGVzKCk7ci5hZGRTaWduYXR1cmUoYyk7YnJlYWs7Y2FzZSA1OnZhciBjPW5ldyBUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uUmVzdWx0O28ucmVhZE1lc3NhZ2UoYyxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uUmVzdWx0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksci5hZGRSZXQoYyk7YnJlYWs7ZGVmYXVsdDpvLnNraXBGaWVsZCgpO2JyZWFrfX1yZXR1cm4gcn0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcj1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLHIpLHIuZ2V0UmVzdWx0QnVmZmVyKCl9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihyLG8pe3ZhciBpPXZvaWQgMDtpPXIuZ2V0UmF3RGF0YSgpLGkhPW51bGwmJm8ud3JpdGVNZXNzYWdlKDEsaSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucmF3LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxpPXIuZ2V0U2lnbmF0dXJlTGlzdF9hc1U4KCksaS5sZW5ndGg+MCYmby53cml0ZVJlcGVhdGVkQnl0ZXMoMixpKSxpPXIuZ2V0UmV0TGlzdCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVSZXBlYXRlZE1lc3NhZ2UoNSxpLFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5SZXN1bHQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxlLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYoVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLkNvbnRyYWN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihyKXtyZXR1cm4gVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLkNvbnRyYWN0LnRvT2JqZWN0KHIsdGhpcyl9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5Db250cmFjdC50b09iamVjdD1mdW5jdGlvbihyLG8pe3ZhciBpLGM9e3R5cGU6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobywxLDApLHBhcmFtZXRlcjooaT1vLmdldFBhcmFtZXRlcigpKSYmcy5BbnkudG9PYmplY3QocixpKSxwcm92aWRlcjpvLmdldFByb3ZpZGVyX2FzQjY0KCksY29udHJhY3RuYW1lOm8uZ2V0Q29udHJhY3RuYW1lX2FzQjY0KCkscGVybWlzc2lvbklkOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sNSwwKX07cmV0dXJuIHImJihjLiRqc3BiTWVzc2FnZUluc3RhbmNlPW8pLGN9KSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocil7dmFyIG89bmV3IGUuQmluYXJ5UmVhZGVyKHIpLGk9bmV3IFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5Db250cmFjdDtyZXR1cm4gVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLkNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihpLG8pfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHIsbyl7Zm9yKDtvLm5leHRGaWVsZCgpJiYhby5pc0VuZEdyb3VwKCk7KXt2YXIgaT1vLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKGkpe2Nhc2UgMTp2YXIgYz1vLnJlYWRFbnVtKCk7ci5zZXRUeXBlKGMpO2JyZWFrO2Nhc2UgMjp2YXIgYz1uZXcgcy5Bbnk7by5yZWFkTWVzc2FnZShjLHMuQW55LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksci5zZXRQYXJhbWV0ZXIoYyk7YnJlYWs7Y2FzZSAzOnZhciBjPW8ucmVhZEJ5dGVzKCk7ci5zZXRQcm92aWRlcihjKTticmVhaztjYXNlIDQ6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldENvbnRyYWN0bmFtZShjKTticmVhaztjYXNlIDU6dmFyIGM9by5yZWFkSW50MzIoKTtyLnNldFBlcm1pc3Npb25JZChjKTticmVhaztkZWZhdWx0Om8uc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiByfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uQ29udHJhY3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciByPW5ldyBlLkJpbmFyeVdyaXRlcjtyZXR1cm4gVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLkNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsciksci5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLkNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHIsbyl7dmFyIGk9dm9pZCAwO2k9ci5nZXRUeXBlKCksaSE9PTAmJm8ud3JpdGVFbnVtKDEsaSksaT1yLmdldFBhcmFtZXRlcigpLGkhPW51bGwmJm8ud3JpdGVNZXNzYWdlKDIsaSxzLkFueS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksaT1yLmdldFByb3ZpZGVyX2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlQnl0ZXMoMyxpKSxpPXIuZ2V0Q29udHJhY3RuYW1lX2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlQnl0ZXMoNCxpKSxpPXIuZ2V0UGVybWlzc2lvbklkKCksaSE9PTAmJm8ud3JpdGVJbnQzMig1LGkpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uQ29udHJhY3QuQ29udHJhY3RUeXBlPXtBQ0NPVU5UQ1JFQVRFQ09OVFJBQ1Q6MCxUUkFOU0ZFUkNPTlRSQUNUOjEsVFJBTlNGRVJBU1NFVENPTlRSQUNUOjIsVk9URUFTU0VUQ09OVFJBQ1Q6MyxWT1RFV0lUTkVTU0NPTlRSQUNUOjQsV0lUTkVTU0NSRUFURUNPTlRSQUNUOjUsQVNTRVRJU1NVRUNPTlRSQUNUOjYsV0lUTkVTU1VQREFURUNPTlRSQUNUOjgsUEFSVElDSVBBVEVBU1NFVElTU1VFQ09OVFJBQ1Q6OSxBQ0NPVU5UVVBEQVRFQ09OVFJBQ1Q6MTAsRlJFRVpFQkFMQU5DRUNPTlRSQUNUOjExLFVORlJFRVpFQkFMQU5DRUNPTlRSQUNUOjEyLFdJVEhEUkFXQkFMQU5DRUNPTlRSQUNUOjEzLFVORlJFRVpFQVNTRVRDT05UUkFDVDoxNCxVUERBVEVBU1NFVENPTlRSQUNUOjE1LFBST1BPU0FMQ1JFQVRFQ09OVFJBQ1Q6MTYsUFJPUE9TQUxBUFBST1ZFQ09OVFJBQ1Q6MTcsUFJPUE9TQUxERUxFVEVDT05UUkFDVDoxOCxTRVRBQ0NPVU5USURDT05UUkFDVDoxOSxDVVNUT01DT05UUkFDVDoyMCxDUkVBVEVTTUFSVENPTlRSQUNUOjMwLFRSSUdHRVJTTUFSVENPTlRSQUNUOjMxLEdFVENPTlRSQUNUOjMyLFVQREFURVNFVFRJTkdDT05UUkFDVDozMyxFWENIQU5HRUNSRUFURUNPTlRSQUNUOjQxLEVYQ0hBTkdFSU5KRUNUQ09OVFJBQ1Q6NDIsRVhDSEFOR0VXSVRIRFJBV0NPTlRSQUNUOjQzLEVYQ0hBTkdFVFJBTlNBQ1RJT05DT05UUkFDVDo0NCxVUERBVEVFTkVSR1lMSU1JVENPTlRSQUNUOjQ1LEFDQ09VTlRQRVJNSVNTSU9OVVBEQVRFQ09OVFJBQ1Q6NDYsQ0xFQVJBQklDT05UUkFDVDo0OCxVUERBVEVCUk9LRVJBR0VDT05UUkFDVDo0OSxTSElFTERFRFRSQU5TRkVSQ09OVFJBQ1Q6NTEsTUFSS0VUU0VMTEFTU0VUQ09OVFJBQ1Q6NTIsTUFSS0VUQ0FOQ0VMT1JERVJDT05UUkFDVDo1MyxGUkVFWkVCQUxBTkNFVjJDT05UUkFDVDo1NCxVTkZSRUVaRUJBTEFOQ0VWMkNPTlRSQUNUOjU1LFdJVEhEUkFXRVhQSVJFVU5GUkVFWkVDT05UUkFDVDo1NixERUxFR0FURVJFU09VUkNFQ09OVFJBQ1Q6NTcsVU5ERUxFR0FURVJFU09VUkNFQ09OVFJBQ1Q6NTgsQ0FOQ0VMQUxMVU5GUkVFWkVWMkNPTlRSQUNUOjU5fSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uQ29udHJhY3QucHJvdG90eXBlLmdldFR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLDApfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uQ29udHJhY3QucHJvdG90eXBlLnNldFR5cGU9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNFbnVtRmllbGQodGhpcywxLHIpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uQ29udHJhY3QucHJvdG90eXBlLmdldFBhcmFtZXRlcj1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscy5BbnksMil9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5Db250cmFjdC5wcm90b3R5cGUuc2V0UGFyYW1ldGVyPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMixyKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLkNvbnRyYWN0LnByb3RvdHlwZS5jbGVhclBhcmFtZXRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFBhcmFtZXRlcih2b2lkIDApfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uQ29udHJhY3QucHJvdG90eXBlLmhhc1BhcmFtZXRlcj1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKSE9bnVsbH0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLkNvbnRyYWN0LnByb3RvdHlwZS5nZXRQcm92aWRlcj1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsIiIpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uQ29udHJhY3QucHJvdG90eXBlLmdldFByb3ZpZGVyX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0UHJvdmlkZXIoKSl9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5Db250cmFjdC5wcm90b3R5cGUuZ2V0UHJvdmlkZXJfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0UHJvdmlkZXIoKSl9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5Db250cmFjdC5wcm90b3R5cGUuc2V0UHJvdmlkZXI9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMyxyKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLkNvbnRyYWN0LnByb3RvdHlwZS5nZXRDb250cmFjdG5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw0LCIiKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLkNvbnRyYWN0LnByb3RvdHlwZS5nZXRDb250cmFjdG5hbWVfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRDb250cmFjdG5hbWUoKSl9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5Db250cmFjdC5wcm90b3R5cGUuZ2V0Q29udHJhY3RuYW1lX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldENvbnRyYWN0bmFtZSgpKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLkNvbnRyYWN0LnByb3RvdHlwZS5zZXRDb250cmFjdG5hbWU9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsNCxyKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLkNvbnRyYWN0LnByb3RvdHlwZS5nZXRQZXJtaXNzaW9uSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw1LDApfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uQ29udHJhY3QucHJvdG90eXBlLnNldFBlcm1pc3Npb25JZD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsNSxyKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLlJlc3VsdC5yZXBlYXRlZEZpZWxkc189WzI2XSxlLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYoVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLlJlc3VsdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocil7cmV0dXJuIFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5SZXN1bHQudG9PYmplY3Qocix0aGlzKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLlJlc3VsdC50b09iamVjdD1mdW5jdGlvbihyLG8pe3ZhciBpPXtmZWU6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobywxLDApLHJldDplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDIsMCksY29udHJhY3RyZXQ6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobywzLDApLGFzc2V0aXNzdWVpZDplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDE0LCIiKSx3aXRoZHJhd0Ftb3VudDplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDE1LDApLHVuZnJlZXplQW1vdW50OmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sMTYsMCksZXhjaGFuZ2VSZWNlaXZlZEFtb3VudDplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDE4LDApLGV4Y2hhbmdlSW5qZWN0QW5vdGhlckFtb3VudDplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDE5LDApLGV4Y2hhbmdlV2l0aGRyYXdBbm90aGVyQW1vdW50OmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sMjAsMCksZXhjaGFuZ2VJZDplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDIxLDApLHNoaWVsZGVkVHJhbnNhY3Rpb25GZWU6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobywyMiwwKSxvcmRlcmlkOm8uZ2V0T3JkZXJpZF9hc0I2NCgpLG9yZGVyZGV0YWlsc0xpc3Q6ZS5NZXNzYWdlLnRvT2JqZWN0TGlzdChvLmdldE9yZGVyZGV0YWlsc0xpc3QoKSxUcm9uV2ViUHJvdG8uTWFya2V0T3JkZXJEZXRhaWwudG9PYmplY3Qscil9O3JldHVybiByJiYoaS4kanNwYk1lc3NhZ2VJbnN0YW5jZT1vKSxpfSksVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLlJlc3VsdC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihyKXt2YXIgbz1uZXcgZS5CaW5hcnlSZWFkZXIociksaT1uZXcgVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLlJlc3VsdDtyZXR1cm4gVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLlJlc3VsdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaSxvKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLlJlc3VsdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24ocixvKXtmb3IoO28ubmV4dEZpZWxkKCkmJiFvLmlzRW5kR3JvdXAoKTspe3ZhciBpPW8uZ2V0RmllbGROdW1iZXIoKTtzd2l0Y2goaSl7Y2FzZSAxOnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRGZWUoYyk7YnJlYWs7Y2FzZSAyOnZhciBjPW8ucmVhZEVudW0oKTtyLnNldFJldChjKTticmVhaztjYXNlIDM6dmFyIGM9by5yZWFkRW51bSgpO3Iuc2V0Q29udHJhY3RyZXQoYyk7YnJlYWs7Y2FzZSAxNDp2YXIgYz1vLnJlYWRTdHJpbmcoKTtyLnNldEFzc2V0aXNzdWVpZChjKTticmVhaztjYXNlIDE1OnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRXaXRoZHJhd0Ftb3VudChjKTticmVhaztjYXNlIDE2OnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRVbmZyZWV6ZUFtb3VudChjKTticmVhaztjYXNlIDE4OnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRFeGNoYW5nZVJlY2VpdmVkQW1vdW50KGMpO2JyZWFrO2Nhc2UgMTk6dmFyIGM9by5yZWFkSW50NjQoKTtyLnNldEV4Y2hhbmdlSW5qZWN0QW5vdGhlckFtb3VudChjKTticmVhaztjYXNlIDIwOnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRFeGNoYW5nZVdpdGhkcmF3QW5vdGhlckFtb3VudChjKTticmVhaztjYXNlIDIxOnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRFeGNoYW5nZUlkKGMpO2JyZWFrO2Nhc2UgMjI6dmFyIGM9by5yZWFkSW50NjQoKTtyLnNldFNoaWVsZGVkVHJhbnNhY3Rpb25GZWUoYyk7YnJlYWs7Y2FzZSAyNTp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0T3JkZXJpZChjKTticmVhaztjYXNlIDI2OnZhciBjPW5ldyBUcm9uV2ViUHJvdG8uTWFya2V0T3JkZXJEZXRhaWw7by5yZWFkTWVzc2FnZShjLFRyb25XZWJQcm90by5NYXJrZXRPcmRlckRldGFpbC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLHIuYWRkT3JkZXJkZXRhaWxzKGMpO2JyZWFrO2RlZmF1bHQ6by5za2lwRmllbGQoKTticmVha319cmV0dXJuIHJ9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5SZXN1bHQucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciByPW5ldyBlLkJpbmFyeVdyaXRlcjtyZXR1cm4gVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLlJlc3VsdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLHIpLHIuZ2V0UmVzdWx0QnVmZmVyKCl9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5SZXN1bHQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24ocixvKXt2YXIgaT12b2lkIDA7aT1yLmdldEZlZSgpLGkhPT0wJiZvLndyaXRlSW50NjQoMSxpKSxpPXIuZ2V0UmV0KCksaSE9PTAmJm8ud3JpdGVFbnVtKDIsaSksaT1yLmdldENvbnRyYWN0cmV0KCksaSE9PTAmJm8ud3JpdGVFbnVtKDMsaSksaT1yLmdldEFzc2V0aXNzdWVpZCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVTdHJpbmcoMTQsaSksaT1yLmdldFdpdGhkcmF3QW1vdW50KCksaSE9PTAmJm8ud3JpdGVJbnQ2NCgxNSxpKSxpPXIuZ2V0VW5mcmVlemVBbW91bnQoKSxpIT09MCYmby53cml0ZUludDY0KDE2LGkpLGk9ci5nZXRFeGNoYW5nZVJlY2VpdmVkQW1vdW50KCksaSE9PTAmJm8ud3JpdGVJbnQ2NCgxOCxpKSxpPXIuZ2V0RXhjaGFuZ2VJbmplY3RBbm90aGVyQW1vdW50KCksaSE9PTAmJm8ud3JpdGVJbnQ2NCgxOSxpKSxpPXIuZ2V0RXhjaGFuZ2VXaXRoZHJhd0Fub3RoZXJBbW91bnQoKSxpIT09MCYmby53cml0ZUludDY0KDIwLGkpLGk9ci5nZXRFeGNoYW5nZUlkKCksaSE9PTAmJm8ud3JpdGVJbnQ2NCgyMSxpKSxpPXIuZ2V0U2hpZWxkZWRUcmFuc2FjdGlvbkZlZSgpLGkhPT0wJiZvLndyaXRlSW50NjQoMjIsaSksaT1yLmdldE9yZGVyaWRfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcygyNSxpKSxpPXIuZ2V0T3JkZXJkZXRhaWxzTGlzdCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMjYsaSxUcm9uV2ViUHJvdG8uTWFya2V0T3JkZXJEZXRhaWwuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uUmVzdWx0LmNvZGU9e1NVQ0VTUzowLEZBSUxFRDoxfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uUmVzdWx0LmNvbnRyYWN0UmVzdWx0PXtERUZBVUxUOjAsU1VDQ0VTUzoxLFJFVkVSVDoyLEJBRF9KVU1QX0RFU1RJTkFUSU9OOjMsT1VUX09GX01FTU9SWTo0LFBSRUNPTVBJTEVEX0NPTlRSQUNUOjUsU1RBQ0tfVE9PX1NNQUxMOjYsU1RBQ0tfVE9PX0xBUkdFOjcsSUxMRUdBTF9PUEVSQVRJT046OCxTVEFDS19PVkVSRkxPVzo5LE9VVF9PRl9FTkVSR1k6MTAsT1VUX09GX1RJTUU6MTEsSlZNX1NUQUNLX09WRVJfRkxPVzoxMixVTktOT1dOOjEzLFRSQU5TRkVSX0ZBSUxFRDoxNCxJTlZBTElEX0NPREU6MTV9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5SZXN1bHQucHJvdG90eXBlLmdldEZlZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsMCl9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5SZXN1bHQucHJvdG90eXBlLnNldEZlZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMSxyKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLlJlc3VsdC5wcm90b3R5cGUuZ2V0UmV0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwwKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLlJlc3VsdC5wcm90b3R5cGUuc2V0UmV0PWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zRW51bUZpZWxkKHRoaXMsMixyKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLlJlc3VsdC5wcm90b3R5cGUuZ2V0Q29udHJhY3RyZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywzLDApfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uUmVzdWx0LnByb3RvdHlwZS5zZXRDb250cmFjdHJldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0VudW1GaWVsZCh0aGlzLDMscil9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5SZXN1bHQucHJvdG90eXBlLmdldEFzc2V0aXNzdWVpZD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDE0LCIiKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLlJlc3VsdC5wcm90b3R5cGUuc2V0QXNzZXRpc3N1ZWlkPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywxNCxyKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLlJlc3VsdC5wcm90b3R5cGUuZ2V0V2l0aGRyYXdBbW91bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxNSwwKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLlJlc3VsdC5wcm90b3R5cGUuc2V0V2l0aGRyYXdBbW91bnQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDE1LHIpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uUmVzdWx0LnByb3RvdHlwZS5nZXRVbmZyZWV6ZUFtb3VudD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDE2LDApfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uUmVzdWx0LnByb3RvdHlwZS5zZXRVbmZyZWV6ZUFtb3VudD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMTYscil9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5SZXN1bHQucHJvdG90eXBlLmdldEV4Y2hhbmdlUmVjZWl2ZWRBbW91bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxOCwwKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLlJlc3VsdC5wcm90b3R5cGUuc2V0RXhjaGFuZ2VSZWNlaXZlZEFtb3VudD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMTgscil9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5SZXN1bHQucHJvdG90eXBlLmdldEV4Y2hhbmdlSW5qZWN0QW5vdGhlckFtb3VudD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDE5LDApfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uUmVzdWx0LnByb3RvdHlwZS5zZXRFeGNoYW5nZUluamVjdEFub3RoZXJBbW91bnQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDE5LHIpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uUmVzdWx0LnByb3RvdHlwZS5nZXRFeGNoYW5nZVdpdGhkcmF3QW5vdGhlckFtb3VudD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIwLDApfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uUmVzdWx0LnByb3RvdHlwZS5zZXRFeGNoYW5nZVdpdGhkcmF3QW5vdGhlckFtb3VudD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMjAscil9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5SZXN1bHQucHJvdG90eXBlLmdldEV4Y2hhbmdlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyMSwwKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLlJlc3VsdC5wcm90b3R5cGUuc2V0RXhjaGFuZ2VJZD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMjEscil9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5SZXN1bHQucHJvdG90eXBlLmdldFNoaWVsZGVkVHJhbnNhY3Rpb25GZWU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyMiwwKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLlJlc3VsdC5wcm90b3R5cGUuc2V0U2hpZWxkZWRUcmFuc2FjdGlvbkZlZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMjIscil9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5SZXN1bHQucHJvdG90eXBlLmdldE9yZGVyaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyNSwiIil9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5SZXN1bHQucHJvdG90eXBlLmdldE9yZGVyaWRfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRPcmRlcmlkKCkpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uUmVzdWx0LnByb3RvdHlwZS5nZXRPcmRlcmlkX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldE9yZGVyaWQoKSl9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5SZXN1bHQucHJvdG90eXBlLnNldE9yZGVyaWQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMjUscil9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5SZXN1bHQucHJvdG90eXBlLmdldE9yZGVyZGV0YWlsc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsVHJvbldlYlByb3RvLk1hcmtldE9yZGVyRGV0YWlsLDI2KX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLlJlc3VsdC5wcm90b3R5cGUuc2V0T3JkZXJkZXRhaWxzTGlzdD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMjYscil9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5SZXN1bHQucHJvdG90eXBlLmFkZE9yZGVyZGV0YWlscz1mdW5jdGlvbihyLG8pe3JldHVybiBlLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDI2LHIsVHJvbldlYlByb3RvLk1hcmtldE9yZGVyRGV0YWlsLG8pfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uUmVzdWx0LnByb3RvdHlwZS5jbGVhck9yZGVyZGV0YWlsc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRPcmRlcmRldGFpbHNMaXN0KFtdKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLnJhdy5yZXBlYXRlZEZpZWxkc189WzksMTFdLGUuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucmF3LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihyKXtyZXR1cm4gVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLnJhdy50b09iamVjdChyLHRoaXMpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucmF3LnRvT2JqZWN0PWZ1bmN0aW9uKHIsbyl7dmFyIGk9e3JlZkJsb2NrQnl0ZXM6by5nZXRSZWZCbG9ja0J5dGVzX2FzQjY0KCkscmVmQmxvY2tOdW06ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobywzLDApLHJlZkJsb2NrSGFzaDpvLmdldFJlZkJsb2NrSGFzaF9hc0I2NCgpLGV4cGlyYXRpb246ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobyw4LDApLGF1dGhzTGlzdDplLk1lc3NhZ2UudG9PYmplY3RMaXN0KG8uZ2V0QXV0aHNMaXN0KCksVHJvbldlYlByb3RvLmF1dGhvcml0eS50b09iamVjdCxyKSxkYXRhOm8uZ2V0RGF0YV9hc0I2NCgpLGNvbnRyYWN0TGlzdDplLk1lc3NhZ2UudG9PYmplY3RMaXN0KG8uZ2V0Q29udHJhY3RMaXN0KCksVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLkNvbnRyYWN0LnRvT2JqZWN0LHIpLHNjcmlwdHM6by5nZXRTY3JpcHRzX2FzQjY0KCksdGltZXN0YW1wOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sMTQsMCksZmVlTGltaXQ6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobywxOCwwKX07cmV0dXJuIHImJihpLiRqc3BiTWVzc2FnZUluc3RhbmNlPW8pLGl9KSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucmF3LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHIpe3ZhciBvPW5ldyBlLkJpbmFyeVJlYWRlcihyKSxpPW5ldyBUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucmF3O3JldHVybiBUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucmF3LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihpLG8pfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucmF3LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihyLG8pe2Zvcig7by5uZXh0RmllbGQoKSYmIW8uaXNFbmRHcm91cCgpOyl7dmFyIGk9by5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChpKXtjYXNlIDE6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldFJlZkJsb2NrQnl0ZXMoYyk7YnJlYWs7Y2FzZSAzOnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRSZWZCbG9ja051bShjKTticmVhaztjYXNlIDQ6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldFJlZkJsb2NrSGFzaChjKTticmVhaztjYXNlIDg6dmFyIGM9by5yZWFkSW50NjQoKTtyLnNldEV4cGlyYXRpb24oYyk7YnJlYWs7Y2FzZSA5OnZhciBjPW5ldyBUcm9uV2ViUHJvdG8uYXV0aG9yaXR5O28ucmVhZE1lc3NhZ2UoYyxUcm9uV2ViUHJvdG8uYXV0aG9yaXR5LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksci5hZGRBdXRocyhjKTticmVhaztjYXNlIDEwOnZhciBjPW8ucmVhZEJ5dGVzKCk7ci5zZXREYXRhKGMpO2JyZWFrO2Nhc2UgMTE6dmFyIGM9bmV3IFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5Db250cmFjdDtvLnJlYWRNZXNzYWdlKGMsVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLkNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksci5hZGRDb250cmFjdChjKTticmVhaztjYXNlIDEyOnZhciBjPW8ucmVhZEJ5dGVzKCk7ci5zZXRTY3JpcHRzKGMpO2JyZWFrO2Nhc2UgMTQ6dmFyIGM9by5yZWFkSW50NjQoKTtyLnNldFRpbWVzdGFtcChjKTticmVhaztjYXNlIDE4OnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRGZWVMaW1pdChjKTticmVhaztkZWZhdWx0Om8uc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiByfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucmF3LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcj1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5yYXcuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxyKSxyLmdldFJlc3VsdEJ1ZmZlcigpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucmF3LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHIsbyl7dmFyIGk9dm9pZCAwO2k9ci5nZXRSZWZCbG9ja0J5dGVzX2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlQnl0ZXMoMSxpKSxpPXIuZ2V0UmVmQmxvY2tOdW0oKSxpIT09MCYmby53cml0ZUludDY0KDMsaSksaT1yLmdldFJlZkJsb2NrSGFzaF9hc1U4KCksaS5sZW5ndGg+MCYmby53cml0ZUJ5dGVzKDQsaSksaT1yLmdldEV4cGlyYXRpb24oKSxpIT09MCYmby53cml0ZUludDY0KDgsaSksaT1yLmdldEF1dGhzTGlzdCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVSZXBlYXRlZE1lc3NhZ2UoOSxpLFRyb25XZWJQcm90by5hdXRob3JpdHkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLGk9ci5nZXREYXRhX2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlQnl0ZXMoMTAsaSksaT1yLmdldENvbnRyYWN0TGlzdCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMTEsaSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uQ29udHJhY3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLGk9ci5nZXRTY3JpcHRzX2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlQnl0ZXMoMTIsaSksaT1yLmdldFRpbWVzdGFtcCgpLGkhPT0wJiZvLndyaXRlSW50NjQoMTQsaSksaT1yLmdldEZlZUxpbWl0KCksaSE9PTAmJm8ud3JpdGVJbnQ2NCgxOCxpKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLnJhdy5wcm90b3R5cGUuZ2V0UmVmQmxvY2tCeXRlcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsIiIpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucmF3LnByb3RvdHlwZS5nZXRSZWZCbG9ja0J5dGVzX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0UmVmQmxvY2tCeXRlcygpKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLnJhdy5wcm90b3R5cGUuZ2V0UmVmQmxvY2tCeXRlc19hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRSZWZCbG9ja0J5dGVzKCkpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucmF3LnByb3RvdHlwZS5zZXRSZWZCbG9ja0J5dGVzPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDEscil9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5yYXcucHJvdG90eXBlLmdldFJlZkJsb2NrTnVtPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMywwKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLnJhdy5wcm90b3R5cGUuc2V0UmVmQmxvY2tOdW09ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDMscil9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5yYXcucHJvdG90eXBlLmdldFJlZkJsb2NrSGFzaD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDQsIiIpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucmF3LnByb3RvdHlwZS5nZXRSZWZCbG9ja0hhc2hfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRSZWZCbG9ja0hhc2goKSl9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5yYXcucHJvdG90eXBlLmdldFJlZkJsb2NrSGFzaF9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRSZWZCbG9ja0hhc2goKSl9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5yYXcucHJvdG90eXBlLnNldFJlZkJsb2NrSGFzaD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcyw0LHIpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucmF3LnByb3RvdHlwZS5nZXRFeHBpcmF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsOCwwKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLnJhdy5wcm90b3R5cGUuc2V0RXhwaXJhdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsOCxyKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLnJhdy5wcm90b3R5cGUuZ2V0QXV0aHNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLFRyb25XZWJQcm90by5hdXRob3JpdHksOSl9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5yYXcucHJvdG90eXBlLnNldEF1dGhzTGlzdD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsOSxyKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLnJhdy5wcm90b3R5cGUuYWRkQXV0aHM9ZnVuY3Rpb24ocixvKXtyZXR1cm4gZS5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw5LHIsVHJvbldlYlByb3RvLmF1dGhvcml0eSxvKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLnJhdy5wcm90b3R5cGUuY2xlYXJBdXRoc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRBdXRoc0xpc3QoW10pfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucmF3LnByb3RvdHlwZS5nZXREYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMTAsIiIpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucmF3LnByb3RvdHlwZS5nZXREYXRhX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0RGF0YSgpKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLnJhdy5wcm90b3R5cGUuZ2V0RGF0YV9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXREYXRhKCkpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucmF3LnByb3RvdHlwZS5zZXREYXRhPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDEwLHIpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucmF3LnByb3RvdHlwZS5nZXRDb250cmFjdExpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLkNvbnRyYWN0LDExKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLnJhdy5wcm90b3R5cGUuc2V0Q29udHJhY3RMaXN0PWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywxMSxyKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLnJhdy5wcm90b3R5cGUuYWRkQ29udHJhY3Q9ZnVuY3Rpb24ocixvKXtyZXR1cm4gZS5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywxMSxyLFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5Db250cmFjdCxvKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLnJhdy5wcm90b3R5cGUuY2xlYXJDb250cmFjdExpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRDb250cmFjdExpc3QoW10pfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucmF3LnByb3RvdHlwZS5nZXRTY3JpcHRzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMTIsIiIpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucmF3LnByb3RvdHlwZS5nZXRTY3JpcHRzX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0U2NyaXB0cygpKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLnJhdy5wcm90b3R5cGUuZ2V0U2NyaXB0c19hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRTY3JpcHRzKCkpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucmF3LnByb3RvdHlwZS5zZXRTY3JpcHRzPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDEyLHIpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucmF3LnByb3RvdHlwZS5nZXRUaW1lc3RhbXA9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxNCwwKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLnJhdy5wcm90b3R5cGUuc2V0VGltZXN0YW1wPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywxNCxyKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLnJhdy5wcm90b3R5cGUuZ2V0RmVlTGltaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxOCwwKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLnJhdy5wcm90b3R5cGUuc2V0RmVlTGltaXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDE4LHIpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucHJvdG90eXBlLmdldFJhd0RhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5yYXcsMSl9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5wcm90b3R5cGUuc2V0UmF3RGF0YT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDEscil9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5wcm90b3R5cGUuY2xlYXJSYXdEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0UmF3RGF0YSh2b2lkIDApfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucHJvdG90eXBlLmhhc1Jhd0RhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSkhPW51bGx9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbi5wcm90b3R5cGUuZ2V0U2lnbmF0dXJlTGlzdD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0aGlzLDIpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucHJvdG90eXBlLmdldFNpZ25hdHVyZUxpc3RfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzTGlzdEFzQjY0KHRoaXMuZ2V0U2lnbmF0dXJlTGlzdCgpKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLnByb3RvdHlwZS5nZXRTaWduYXR1cmVMaXN0X2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzTGlzdEFzVTgodGhpcy5nZXRTaWduYXR1cmVMaXN0KCkpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucHJvdG90eXBlLnNldFNpZ25hdHVyZUxpc3Q9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDIscnx8W10pfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucHJvdG90eXBlLmFkZFNpZ25hdHVyZT1mdW5jdGlvbihyLG8pe3JldHVybiBlLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsMixyLG8pfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucHJvdG90eXBlLmNsZWFyU2lnbmF0dXJlTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFNpZ25hdHVyZUxpc3QoW10pfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucHJvdG90eXBlLmdldFJldExpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLlJlc3VsdCw1KX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uLnByb3RvdHlwZS5zZXRSZXRMaXN0PWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw1LHIpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucHJvdG90eXBlLmFkZFJldD1mdW5jdGlvbihyLG8pe3JldHVybiBlLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDUscixUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24uUmVzdWx0LG8pfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb24ucHJvdG90eXBlLmNsZWFyUmV0TGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFJldExpc3QoW10pfSxUcm9uV2ViUHJvdG8uQWNjb3VudFR5cGU9e05PUk1BTDowLEFTU0VUSVNTVUU6MSxDT05UUkFDVDoyfSx0Lm9iamVjdC5leHRlbmQobixUcm9uV2ViUHJvdG8pfSkoaTApO3ZhciBrdj17fSxqeT17fTsoZnVuY3Rpb24obil7dmFyIGU9TnIsdD1lLGE9dHlwZW9mIGdsb2JhbFRoaXM8InUiJiZnbG9iYWxUaGlzfHx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93fHx0eXBlb2YgYTwidSImJmF8fHR5cGVvZiBzZWxmPCJ1IiYmc2VsZnx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30uY2FsbChudWxsKXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKTt0LmV4cG9ydFN5bWJvbCgiVHJvbldlYlByb3RvLlJlc291cmNlQ29kZSIsbnVsbCxhKSxUcm9uV2ViUHJvdG8uUmVzb3VyY2VDb2RlPXtCQU5EV0lEVEg6MCxFTkVSR1k6MSxUUk9OX1BPV0VSOjJ9LHQub2JqZWN0LmV4dGVuZChuLFRyb25XZWJQcm90byl9KShqeSk7KGZ1bmN0aW9uKG4pe3ZhciBlPU5yLHQ9ZSxhPXR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmZ2xvYmFsVGhpc3x8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvd3x8dHlwZW9mIGE8InUiJiZhfHx0eXBlb2Ygc2VsZjwidSImJnNlbGZ8fGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LmNhbGwobnVsbCl8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCkscz1qeTt0Lm9iamVjdC5leHRlbmQocHJvdG8scyksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5BY2NvdW50QmFsYW5jZVJlcXVlc3QiLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5BY2NvdW50QmFsYW5jZVJlc3BvbnNlIixudWxsLGEpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uQWNjb3VudElkZW50aWZpZXIiLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5BY2NvdW50VHJhY2UiLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5CbG9ja0JhbGFuY2VUcmFjZSIsbnVsbCxhKSx0LmV4cG9ydFN5bWJvbCgiVHJvbldlYlByb3RvLkJsb2NrQmFsYW5jZVRyYWNlLkJsb2NrSWRlbnRpZmllciIsbnVsbCxhKSx0LmV4cG9ydFN5bWJvbCgiVHJvbldlYlByb3RvLkNhbmNlbEFsbFVuZnJlZXplVjJDb250cmFjdCIsbnVsbCxhKSx0LmV4cG9ydFN5bWJvbCgiVHJvbldlYlByb3RvLkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdCIsbnVsbCxhKSx0LmV4cG9ydFN5bWJvbCgiVHJvbldlYlByb3RvLkZyZWV6ZUJhbGFuY2VDb250cmFjdCIsbnVsbCxhKSx0LmV4cG9ydFN5bWJvbCgiVHJvbldlYlByb3RvLkZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0IixudWxsLGEpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UiLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5UcmFuc2FjdGlvbkJhbGFuY2VUcmFjZS5PcGVyYXRpb24iLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5UcmFuc2ZlckNvbnRyYWN0IixudWxsLGEpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uVW5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QiLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5VbmZyZWV6ZUJhbGFuY2VDb250cmFjdCIsbnVsbCxhKSx0LmV4cG9ydFN5bWJvbCgiVHJvbldlYlByb3RvLlVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QiLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5XaXRoZHJhd0JhbGFuY2VDb250cmFjdCIsbnVsbCxhKSx0LmV4cG9ydFN5bWJvbCgiVHJvbldlYlByb3RvLldpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdCIsbnVsbCxhKSxUcm9uV2ViUHJvdG8uRnJlZXplQmFsYW5jZUNvbnRyYWN0PWZ1bmN0aW9uKHIpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsciwwLC0xLG51bGwsbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLkZyZWV6ZUJhbGFuY2VDb250cmFjdCxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5GcmVlemVCYWxhbmNlQ29udHJhY3QuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5GcmVlemVCYWxhbmNlQ29udHJhY3QiKSxUcm9uV2ViUHJvdG8uVW5mcmVlemVCYWxhbmNlQ29udHJhY3Q9ZnVuY3Rpb24ocil7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxyLDAsLTEsbnVsbCxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uVW5mcmVlemVCYWxhbmNlQ29udHJhY3QsZS5NZXNzYWdlKSx0LkRFQlVHJiYhQ09NUElMRUQmJihUcm9uV2ViUHJvdG8uVW5mcmVlemVCYWxhbmNlQ29udHJhY3QuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5VbmZyZWV6ZUJhbGFuY2VDb250cmFjdCIpLFRyb25XZWJQcm90by5XaXRoZHJhd0JhbGFuY2VDb250cmFjdD1mdW5jdGlvbihyKXtlLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLHIsMCwtMSxudWxsLG51bGwpfSx0LmluaGVyaXRzKFRyb25XZWJQcm90by5XaXRoZHJhd0JhbGFuY2VDb250cmFjdCxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5XaXRoZHJhd0JhbGFuY2VDb250cmFjdC5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLldpdGhkcmF3QmFsYW5jZUNvbnRyYWN0IiksVHJvbldlYlByb3RvLlRyYW5zZmVyQ29udHJhY3Q9ZnVuY3Rpb24ocil7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxyLDAsLTEsbnVsbCxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uVHJhbnNmZXJDb250cmFjdCxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5UcmFuc2ZlckNvbnRyYWN0LmRpc3BsYXlOYW1lPSJUcm9uV2ViUHJvdG8uVHJhbnNmZXJDb250cmFjdCIpLFRyb25XZWJQcm90by5UcmFuc2FjdGlvbkJhbGFuY2VUcmFjZT1mdW5jdGlvbihyKXtlLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLHIsMCwtMSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSx0LmluaGVyaXRzKFRyb25XZWJQcm90by5UcmFuc2FjdGlvbkJhbGFuY2VUcmFjZSxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5UcmFuc2FjdGlvbkJhbGFuY2VUcmFjZS5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uQmFsYW5jZVRyYWNlIiksVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uQmFsYW5jZVRyYWNlLk9wZXJhdGlvbj1mdW5jdGlvbihyKXtlLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLHIsMCwtMSxudWxsLG51bGwpfSx0LmluaGVyaXRzKFRyb25XZWJQcm90by5UcmFuc2FjdGlvbkJhbGFuY2VUcmFjZS5PcGVyYXRpb24sZS5NZXNzYWdlKSx0LkRFQlVHJiYhQ09NUElMRUQmJihUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UuT3BlcmF0aW9uLmRpc3BsYXlOYW1lPSJUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UuT3BlcmF0aW9uIiksVHJvbldlYlByb3RvLkJsb2NrQmFsYW5jZVRyYWNlPWZ1bmN0aW9uKHIpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsciwwLC0xLFRyb25XZWJQcm90by5CbG9ja0JhbGFuY2VUcmFjZS5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLkJsb2NrQmFsYW5jZVRyYWNlLGUuTWVzc2FnZSksdC5ERUJVRyYmIUNPTVBJTEVEJiYoVHJvbldlYlByb3RvLkJsb2NrQmFsYW5jZVRyYWNlLmRpc3BsYXlOYW1lPSJUcm9uV2ViUHJvdG8uQmxvY2tCYWxhbmNlVHJhY2UiKSxUcm9uV2ViUHJvdG8uQmxvY2tCYWxhbmNlVHJhY2UuQmxvY2tJZGVudGlmaWVyPWZ1bmN0aW9uKHIpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsciwwLC0xLG51bGwsbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLkJsb2NrQmFsYW5jZVRyYWNlLkJsb2NrSWRlbnRpZmllcixlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5CbG9ja0JhbGFuY2VUcmFjZS5CbG9ja0lkZW50aWZpZXIuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5CbG9ja0JhbGFuY2VUcmFjZS5CbG9ja0lkZW50aWZpZXIiKSxUcm9uV2ViUHJvdG8uQWNjb3VudFRyYWNlPWZ1bmN0aW9uKHIpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsciwwLC0xLG51bGwsbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLkFjY291bnRUcmFjZSxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5BY2NvdW50VHJhY2UuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5BY2NvdW50VHJhY2UiKSxUcm9uV2ViUHJvdG8uQWNjb3VudElkZW50aWZpZXI9ZnVuY3Rpb24ocil7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxyLDAsLTEsbnVsbCxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uQWNjb3VudElkZW50aWZpZXIsZS5NZXNzYWdlKSx0LkRFQlVHJiYhQ09NUElMRUQmJihUcm9uV2ViUHJvdG8uQWNjb3VudElkZW50aWZpZXIuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5BY2NvdW50SWRlbnRpZmllciIpLFRyb25XZWJQcm90by5BY2NvdW50QmFsYW5jZVJlcXVlc3Q9ZnVuY3Rpb24ocil7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxyLDAsLTEsbnVsbCxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uQWNjb3VudEJhbGFuY2VSZXF1ZXN0LGUuTWVzc2FnZSksdC5ERUJVRyYmIUNPTVBJTEVEJiYoVHJvbldlYlByb3RvLkFjY291bnRCYWxhbmNlUmVxdWVzdC5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLkFjY291bnRCYWxhbmNlUmVxdWVzdCIpLFRyb25XZWJQcm90by5BY2NvdW50QmFsYW5jZVJlc3BvbnNlPWZ1bmN0aW9uKHIpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsciwwLC0xLG51bGwsbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLkFjY291bnRCYWxhbmNlUmVzcG9uc2UsZS5NZXNzYWdlKSx0LkRFQlVHJiYhQ09NUElMRUQmJihUcm9uV2ViUHJvdG8uQWNjb3VudEJhbGFuY2VSZXNwb25zZS5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLkFjY291bnRCYWxhbmNlUmVzcG9uc2UiKSxUcm9uV2ViUHJvdG8uRnJlZXplQmFsYW5jZVYyQ29udHJhY3Q9ZnVuY3Rpb24ocil7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxyLDAsLTEsbnVsbCxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uRnJlZXplQmFsYW5jZVYyQ29udHJhY3QsZS5NZXNzYWdlKSx0LkRFQlVHJiYhQ09NUElMRUQmJihUcm9uV2ViUHJvdG8uRnJlZXplQmFsYW5jZVYyQ29udHJhY3QuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5GcmVlemVCYWxhbmNlVjJDb250cmFjdCIpLFRyb25XZWJQcm90by5VbmZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0PWZ1bmN0aW9uKHIpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsciwwLC0xLG51bGwsbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLlVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QsZS5NZXNzYWdlKSx0LkRFQlVHJiYhQ09NUElMRUQmJihUcm9uV2ViUHJvdG8uVW5mcmVlemVCYWxhbmNlVjJDb250cmFjdC5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLlVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QiKSxUcm9uV2ViUHJvdG8uV2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0PWZ1bmN0aW9uKHIpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsciwwLC0xLG51bGwsbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLldpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdCxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5XaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3QuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5XaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3QiKSxUcm9uV2ViUHJvdG8uRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0PWZ1bmN0aW9uKHIpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsciwwLC0xLG51bGwsbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdCxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QiKSxUcm9uV2ViUHJvdG8uVW5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3Q9ZnVuY3Rpb24ocil7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxyLDAsLTEsbnVsbCxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uVW5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QsZS5NZXNzYWdlKSx0LkRFQlVHJiYhQ09NUElMRUQmJihUcm9uV2ViUHJvdG8uVW5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5VbkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdCIpLFRyb25XZWJQcm90by5DYW5jZWxBbGxVbmZyZWV6ZVYyQ29udHJhY3Q9ZnVuY3Rpb24ocil7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxyLDAsLTEsbnVsbCxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uQ2FuY2VsQWxsVW5mcmVlemVWMkNvbnRyYWN0LGUuTWVzc2FnZSksdC5ERUJVRyYmIUNPTVBJTEVEJiYoVHJvbldlYlByb3RvLkNhbmNlbEFsbFVuZnJlZXplVjJDb250cmFjdC5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLkNhbmNlbEFsbFVuZnJlZXplVjJDb250cmFjdCIpLGUuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihUcm9uV2ViUHJvdG8uRnJlZXplQmFsYW5jZUNvbnRyYWN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihyKXtyZXR1cm4gVHJvbldlYlByb3RvLkZyZWV6ZUJhbGFuY2VDb250cmFjdC50b09iamVjdChyLHRoaXMpfSxUcm9uV2ViUHJvdG8uRnJlZXplQmFsYW5jZUNvbnRyYWN0LnRvT2JqZWN0PWZ1bmN0aW9uKHIsbyl7dmFyIGk9e293bmVyQWRkcmVzczpvLmdldE93bmVyQWRkcmVzc19hc0I2NCgpLGZyb3plbkJhbGFuY2U6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobywyLDApLGZyb3plbkR1cmF0aW9uOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sMywwKSxyZXNvdXJjZTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDEwLDApLHJlY2VpdmVyQWRkcmVzczpvLmdldFJlY2VpdmVyQWRkcmVzc19hc0I2NCgpfTtyZXR1cm4gciYmKGkuJGpzcGJNZXNzYWdlSW5zdGFuY2U9byksaX0pLFRyb25XZWJQcm90by5GcmVlemVCYWxhbmNlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocil7dmFyIG89bmV3IGUuQmluYXJ5UmVhZGVyKHIpLGk9bmV3IFRyb25XZWJQcm90by5GcmVlemVCYWxhbmNlQ29udHJhY3Q7cmV0dXJuIFRyb25XZWJQcm90by5GcmVlemVCYWxhbmNlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGksbyl9LFRyb25XZWJQcm90by5GcmVlemVCYWxhbmNlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHIsbyl7Zm9yKDtvLm5leHRGaWVsZCgpJiYhby5pc0VuZEdyb3VwKCk7KXt2YXIgaT1vLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKGkpe2Nhc2UgMTp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0T3duZXJBZGRyZXNzKGMpO2JyZWFrO2Nhc2UgMjp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0RnJvemVuQmFsYW5jZShjKTticmVhaztjYXNlIDM6dmFyIGM9by5yZWFkSW50NjQoKTtyLnNldEZyb3plbkR1cmF0aW9uKGMpO2JyZWFrO2Nhc2UgMTA6dmFyIGM9by5yZWFkRW51bSgpO3Iuc2V0UmVzb3VyY2UoYyk7YnJlYWs7Y2FzZSAxNTp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0UmVjZWl2ZXJBZGRyZXNzKGMpO2JyZWFrO2RlZmF1bHQ6by5za2lwRmllbGQoKTticmVha319cmV0dXJuIHJ9LFRyb25XZWJQcm90by5GcmVlemVCYWxhbmNlQ29udHJhY3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciByPW5ldyBlLkJpbmFyeVdyaXRlcjtyZXR1cm4gVHJvbldlYlByb3RvLkZyZWV6ZUJhbGFuY2VDb250cmFjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLHIpLHIuZ2V0UmVzdWx0QnVmZmVyKCl9LFRyb25XZWJQcm90by5GcmVlemVCYWxhbmNlQ29udHJhY3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24ocixvKXt2YXIgaT12b2lkIDA7aT1yLmdldE93bmVyQWRkcmVzc19hc1U4KCksaS5sZW5ndGg+MCYmby53cml0ZUJ5dGVzKDEsaSksaT1yLmdldEZyb3plbkJhbGFuY2UoKSxpIT09MCYmby53cml0ZUludDY0KDIsaSksaT1yLmdldEZyb3plbkR1cmF0aW9uKCksaSE9PTAmJm8ud3JpdGVJbnQ2NCgzLGkpLGk9ci5nZXRSZXNvdXJjZSgpLGkhPT0wJiZvLndyaXRlRW51bSgxMCxpKSxpPXIuZ2V0UmVjZWl2ZXJBZGRyZXNzX2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlQnl0ZXMoMTUsaSl9LFRyb25XZWJQcm90by5GcmVlemVCYWxhbmNlQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsIiIpfSxUcm9uV2ViUHJvdG8uRnJlZXplQmFsYW5jZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3NfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5GcmVlemVCYWxhbmNlQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5GcmVlemVCYWxhbmNlQ29udHJhY3QucHJvdG90eXBlLnNldE93bmVyQWRkcmVzcz1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywxLHIpfSxUcm9uV2ViUHJvdG8uRnJlZXplQmFsYW5jZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRGcm96ZW5CYWxhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwwKX0sVHJvbldlYlByb3RvLkZyZWV6ZUJhbGFuY2VDb250cmFjdC5wcm90b3R5cGUuc2V0RnJvemVuQmFsYW5jZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMixyKX0sVHJvbldlYlByb3RvLkZyZWV6ZUJhbGFuY2VDb250cmFjdC5wcm90b3R5cGUuZ2V0RnJvemVuRHVyYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywzLDApfSxUcm9uV2ViUHJvdG8uRnJlZXplQmFsYW5jZUNvbnRyYWN0LnByb3RvdHlwZS5zZXRGcm96ZW5EdXJhdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMyxyKX0sVHJvbldlYlByb3RvLkZyZWV6ZUJhbGFuY2VDb250cmFjdC5wcm90b3R5cGUuZ2V0UmVzb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxMCwwKX0sVHJvbldlYlByb3RvLkZyZWV6ZUJhbGFuY2VDb250cmFjdC5wcm90b3R5cGUuc2V0UmVzb3VyY2U9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNFbnVtRmllbGQodGhpcywxMCxyKX0sVHJvbldlYlByb3RvLkZyZWV6ZUJhbGFuY2VDb250cmFjdC5wcm90b3R5cGUuZ2V0UmVjZWl2ZXJBZGRyZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMTUsIiIpfSxUcm9uV2ViUHJvdG8uRnJlZXplQmFsYW5jZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRSZWNlaXZlckFkZHJlc3NfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRSZWNlaXZlckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5GcmVlemVCYWxhbmNlQ29udHJhY3QucHJvdG90eXBlLmdldFJlY2VpdmVyQWRkcmVzc19hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRSZWNlaXZlckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5GcmVlemVCYWxhbmNlQ29udHJhY3QucHJvdG90eXBlLnNldFJlY2VpdmVyQWRkcmVzcz1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywxNSxyKX0sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5VbmZyZWV6ZUJhbGFuY2VDb250cmFjdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocil7cmV0dXJuIFRyb25XZWJQcm90by5VbmZyZWV6ZUJhbGFuY2VDb250cmFjdC50b09iamVjdChyLHRoaXMpfSxUcm9uV2ViUHJvdG8uVW5mcmVlemVCYWxhbmNlQ29udHJhY3QudG9PYmplY3Q9ZnVuY3Rpb24ocixvKXt2YXIgaT17b3duZXJBZGRyZXNzOm8uZ2V0T3duZXJBZGRyZXNzX2FzQjY0KCkscmVzb3VyY2U6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobywxMCwwKSxyZWNlaXZlckFkZHJlc3M6by5nZXRSZWNlaXZlckFkZHJlc3NfYXNCNjQoKX07cmV0dXJuIHImJihpLiRqc3BiTWVzc2FnZUluc3RhbmNlPW8pLGl9KSxUcm9uV2ViUHJvdG8uVW5mcmVlemVCYWxhbmNlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocil7dmFyIG89bmV3IGUuQmluYXJ5UmVhZGVyKHIpLGk9bmV3IFRyb25XZWJQcm90by5VbmZyZWV6ZUJhbGFuY2VDb250cmFjdDtyZXR1cm4gVHJvbldlYlByb3RvLlVuZnJlZXplQmFsYW5jZUNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihpLG8pfSxUcm9uV2ViUHJvdG8uVW5mcmVlemVCYWxhbmNlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHIsbyl7Zm9yKDtvLm5leHRGaWVsZCgpJiYhby5pc0VuZEdyb3VwKCk7KXt2YXIgaT1vLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKGkpe2Nhc2UgMTp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0T3duZXJBZGRyZXNzKGMpO2JyZWFrO2Nhc2UgMTA6dmFyIGM9by5yZWFkRW51bSgpO3Iuc2V0UmVzb3VyY2UoYyk7YnJlYWs7Y2FzZSAxNTp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0UmVjZWl2ZXJBZGRyZXNzKGMpO2JyZWFrO2RlZmF1bHQ6by5za2lwRmllbGQoKTticmVha319cmV0dXJuIHJ9LFRyb25XZWJQcm90by5VbmZyZWV6ZUJhbGFuY2VDb250cmFjdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IGUuQmluYXJ5V3JpdGVyO3JldHVybiBUcm9uV2ViUHJvdG8uVW5mcmVlemVCYWxhbmNlQ29udHJhY3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxyKSxyLmdldFJlc3VsdEJ1ZmZlcigpfSxUcm9uV2ViUHJvdG8uVW5mcmVlemVCYWxhbmNlQ29udHJhY3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24ocixvKXt2YXIgaT12b2lkIDA7aT1yLmdldE93bmVyQWRkcmVzc19hc1U4KCksaS5sZW5ndGg+MCYmby53cml0ZUJ5dGVzKDEsaSksaT1yLmdldFJlc291cmNlKCksaSE9PTAmJm8ud3JpdGVFbnVtKDEwLGkpLGk9ci5nZXRSZWNlaXZlckFkZHJlc3NfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcygxNSxpKX0sVHJvbldlYlByb3RvLlVuZnJlZXplQmFsYW5jZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLCIiKX0sVHJvbldlYlByb3RvLlVuZnJlZXplQmFsYW5jZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3NfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5VbmZyZWV6ZUJhbGFuY2VDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlVuZnJlZXplQmFsYW5jZUNvbnRyYWN0LnByb3RvdHlwZS5zZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMSxyKX0sVHJvbldlYlByb3RvLlVuZnJlZXplQmFsYW5jZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRSZXNvdXJjZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEwLDApfSxUcm9uV2ViUHJvdG8uVW5mcmVlemVCYWxhbmNlQ29udHJhY3QucHJvdG90eXBlLnNldFJlc291cmNlPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zRW51bUZpZWxkKHRoaXMsMTAscil9LFRyb25XZWJQcm90by5VbmZyZWV6ZUJhbGFuY2VDb250cmFjdC5wcm90b3R5cGUuZ2V0UmVjZWl2ZXJBZGRyZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMTUsIiIpfSxUcm9uV2ViUHJvdG8uVW5mcmVlemVCYWxhbmNlQ29udHJhY3QucHJvdG90eXBlLmdldFJlY2VpdmVyQWRkcmVzc19hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldFJlY2VpdmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlVuZnJlZXplQmFsYW5jZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRSZWNlaXZlckFkZHJlc3NfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0UmVjZWl2ZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uVW5mcmVlemVCYWxhbmNlQ29udHJhY3QucHJvdG90eXBlLnNldFJlY2VpdmVyQWRkcmVzcz1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywxNSxyKX0sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5XaXRoZHJhd0JhbGFuY2VDb250cmFjdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocil7cmV0dXJuIFRyb25XZWJQcm90by5XaXRoZHJhd0JhbGFuY2VDb250cmFjdC50b09iamVjdChyLHRoaXMpfSxUcm9uV2ViUHJvdG8uV2l0aGRyYXdCYWxhbmNlQ29udHJhY3QudG9PYmplY3Q9ZnVuY3Rpb24ocixvKXt2YXIgaT17b3duZXJBZGRyZXNzOm8uZ2V0T3duZXJBZGRyZXNzX2FzQjY0KCl9O3JldHVybiByJiYoaS4kanNwYk1lc3NhZ2VJbnN0YW5jZT1vKSxpfSksVHJvbldlYlByb3RvLldpdGhkcmF3QmFsYW5jZUNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHIpe3ZhciBvPW5ldyBlLkJpbmFyeVJlYWRlcihyKSxpPW5ldyBUcm9uV2ViUHJvdG8uV2l0aGRyYXdCYWxhbmNlQ29udHJhY3Q7cmV0dXJuIFRyb25XZWJQcm90by5XaXRoZHJhd0JhbGFuY2VDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaSxvKX0sVHJvbldlYlByb3RvLldpdGhkcmF3QmFsYW5jZUNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihyLG8pe2Zvcig7by5uZXh0RmllbGQoKSYmIW8uaXNFbmRHcm91cCgpOyl7dmFyIGk9by5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChpKXtjYXNlIDE6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldE93bmVyQWRkcmVzcyhjKTticmVhaztkZWZhdWx0Om8uc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiByfSxUcm9uV2ViUHJvdG8uV2l0aGRyYXdCYWxhbmNlQ29udHJhY3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciByPW5ldyBlLkJpbmFyeVdyaXRlcjtyZXR1cm4gVHJvbldlYlByb3RvLldpdGhkcmF3QmFsYW5jZUNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsciksci5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLldpdGhkcmF3QmFsYW5jZUNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHIsbyl7dmFyIGk9dm9pZCAwO2k9ci5nZXRPd25lckFkZHJlc3NfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcygxLGkpfSxUcm9uV2ViUHJvdG8uV2l0aGRyYXdCYWxhbmNlQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsIiIpfSxUcm9uV2ViUHJvdG8uV2l0aGRyYXdCYWxhbmNlQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLldpdGhkcmF3QmFsYW5jZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3NfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0T3duZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uV2l0aGRyYXdCYWxhbmNlQ29udHJhY3QucHJvdG90eXBlLnNldE93bmVyQWRkcmVzcz1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywxLHIpfSxlLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYoVHJvbldlYlByb3RvLlRyYW5zZmVyQ29udHJhY3QucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKHIpe3JldHVybiBUcm9uV2ViUHJvdG8uVHJhbnNmZXJDb250cmFjdC50b09iamVjdChyLHRoaXMpfSxUcm9uV2ViUHJvdG8uVHJhbnNmZXJDb250cmFjdC50b09iamVjdD1mdW5jdGlvbihyLG8pe3ZhciBpPXtvd25lckFkZHJlc3M6by5nZXRPd25lckFkZHJlc3NfYXNCNjQoKSx0b0FkZHJlc3M6by5nZXRUb0FkZHJlc3NfYXNCNjQoKSxhbW91bnQ6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobywzLDApfTtyZXR1cm4gciYmKGkuJGpzcGJNZXNzYWdlSW5zdGFuY2U9byksaX0pLFRyb25XZWJQcm90by5UcmFuc2ZlckNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHIpe3ZhciBvPW5ldyBlLkJpbmFyeVJlYWRlcihyKSxpPW5ldyBUcm9uV2ViUHJvdG8uVHJhbnNmZXJDb250cmFjdDtyZXR1cm4gVHJvbldlYlByb3RvLlRyYW5zZmVyQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGksbyl9LFRyb25XZWJQcm90by5UcmFuc2ZlckNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihyLG8pe2Zvcig7by5uZXh0RmllbGQoKSYmIW8uaXNFbmRHcm91cCgpOyl7dmFyIGk9by5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChpKXtjYXNlIDE6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldE93bmVyQWRkcmVzcyhjKTticmVhaztjYXNlIDI6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldFRvQWRkcmVzcyhjKTticmVhaztjYXNlIDM6dmFyIGM9by5yZWFkSW50NjQoKTtyLnNldEFtb3VudChjKTticmVhaztkZWZhdWx0Om8uc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiByfSxUcm9uV2ViUHJvdG8uVHJhbnNmZXJDb250cmFjdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IGUuQmluYXJ5V3JpdGVyO3JldHVybiBUcm9uV2ViUHJvdG8uVHJhbnNmZXJDb250cmFjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLHIpLHIuZ2V0UmVzdWx0QnVmZmVyKCl9LFRyb25XZWJQcm90by5UcmFuc2ZlckNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHIsbyl7dmFyIGk9dm9pZCAwO2k9ci5nZXRPd25lckFkZHJlc3NfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcygxLGkpLGk9ci5nZXRUb0FkZHJlc3NfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcygyLGkpLGk9ci5nZXRBbW91bnQoKSxpIT09MCYmby53cml0ZUludDY0KDMsaSl9LFRyb25XZWJQcm90by5UcmFuc2ZlckNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLCIiKX0sVHJvbldlYlByb3RvLlRyYW5zZmVyQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlRyYW5zZmVyQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5UcmFuc2ZlckNvbnRyYWN0LnByb3RvdHlwZS5zZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMSxyKX0sVHJvbldlYlByb3RvLlRyYW5zZmVyQ29udHJhY3QucHJvdG90eXBlLmdldFRvQWRkcmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsIiIpfSxUcm9uV2ViUHJvdG8uVHJhbnNmZXJDb250cmFjdC5wcm90b3R5cGUuZ2V0VG9BZGRyZXNzX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0VG9BZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uVHJhbnNmZXJDb250cmFjdC5wcm90b3R5cGUuZ2V0VG9BZGRyZXNzX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldFRvQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlRyYW5zZmVyQ29udHJhY3QucHJvdG90eXBlLnNldFRvQWRkcmVzcz1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywyLHIpfSxUcm9uV2ViUHJvdG8uVHJhbnNmZXJDb250cmFjdC5wcm90b3R5cGUuZ2V0QW1vdW50PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMywwKX0sVHJvbldlYlByb3RvLlRyYW5zZmVyQ29udHJhY3QucHJvdG90eXBlLnNldEFtb3VudD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMyxyKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uQmFsYW5jZVRyYWNlLnJlcGVhdGVkRmllbGRzXz1bMl0sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5UcmFuc2FjdGlvbkJhbGFuY2VUcmFjZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocil7cmV0dXJuIFRyb25XZWJQcm90by5UcmFuc2FjdGlvbkJhbGFuY2VUcmFjZS50b09iamVjdChyLHRoaXMpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UudG9PYmplY3Q9ZnVuY3Rpb24ocixvKXt2YXIgaT17dHJhbnNhY3Rpb25JZGVudGlmaWVyOm8uZ2V0VHJhbnNhY3Rpb25JZGVudGlmaWVyX2FzQjY0KCksb3BlcmF0aW9uTGlzdDplLk1lc3NhZ2UudG9PYmplY3RMaXN0KG8uZ2V0T3BlcmF0aW9uTGlzdCgpLFRyb25XZWJQcm90by5UcmFuc2FjdGlvbkJhbGFuY2VUcmFjZS5PcGVyYXRpb24udG9PYmplY3QsciksdHlwZTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDMsIiIpLHN0YXR1czplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDQsIiIpfTtyZXR1cm4gciYmKGkuJGpzcGJNZXNzYWdlSW5zdGFuY2U9byksaX0pLFRyb25XZWJQcm90by5UcmFuc2FjdGlvbkJhbGFuY2VUcmFjZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihyKXt2YXIgbz1uZXcgZS5CaW5hcnlSZWFkZXIociksaT1uZXcgVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uQmFsYW5jZVRyYWNlO3JldHVybiBUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGksbyl9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbkJhbGFuY2VUcmFjZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24ocixvKXtmb3IoO28ubmV4dEZpZWxkKCkmJiFvLmlzRW5kR3JvdXAoKTspe3ZhciBpPW8uZ2V0RmllbGROdW1iZXIoKTtzd2l0Y2goaSl7Y2FzZSAxOnZhciBjPW8ucmVhZEJ5dGVzKCk7ci5zZXRUcmFuc2FjdGlvbklkZW50aWZpZXIoYyk7YnJlYWs7Y2FzZSAyOnZhciBjPW5ldyBUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UuT3BlcmF0aW9uO28ucmVhZE1lc3NhZ2UoYyxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UuT3BlcmF0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksci5hZGRPcGVyYXRpb24oYyk7YnJlYWs7Y2FzZSAzOnZhciBjPW8ucmVhZFN0cmluZygpO3Iuc2V0VHlwZShjKTticmVhaztjYXNlIDQ6dmFyIGM9by5yZWFkU3RyaW5nKCk7ci5zZXRTdGF0dXMoYyk7YnJlYWs7ZGVmYXVsdDpvLnNraXBGaWVsZCgpO2JyZWFrfX1yZXR1cm4gcn0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uQmFsYW5jZVRyYWNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcj1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIFRyb25XZWJQcm90by5UcmFuc2FjdGlvbkJhbGFuY2VUcmFjZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLHIpLHIuZ2V0UmVzdWx0QnVmZmVyKCl9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbkJhbGFuY2VUcmFjZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihyLG8pe3ZhciBpPXZvaWQgMDtpPXIuZ2V0VHJhbnNhY3Rpb25JZGVudGlmaWVyX2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlQnl0ZXMoMSxpKSxpPXIuZ2V0T3BlcmF0aW9uTGlzdCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMixpLFRyb25XZWJQcm90by5UcmFuc2FjdGlvbkJhbGFuY2VUcmFjZS5PcGVyYXRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLGk9ci5nZXRUeXBlKCksaS5sZW5ndGg+MCYmby53cml0ZVN0cmluZygzLGkpLGk9ci5nZXRTdGF0dXMoKSxpLmxlbmd0aD4wJiZvLndyaXRlU3RyaW5nKDQsaSl9LGUuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UuT3BlcmF0aW9uLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihyKXtyZXR1cm4gVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uQmFsYW5jZVRyYWNlLk9wZXJhdGlvbi50b09iamVjdChyLHRoaXMpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UuT3BlcmF0aW9uLnRvT2JqZWN0PWZ1bmN0aW9uKHIsbyl7dmFyIGk9e29wZXJhdGlvbklkZW50aWZpZXI6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobywxLDApLGFkZHJlc3M6by5nZXRBZGRyZXNzX2FzQjY0KCksYW1vdW50OmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sMywwKX07cmV0dXJuIHImJihpLiRqc3BiTWVzc2FnZUluc3RhbmNlPW8pLGl9KSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UuT3BlcmF0aW9uLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHIpe3ZhciBvPW5ldyBlLkJpbmFyeVJlYWRlcihyKSxpPW5ldyBUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UuT3BlcmF0aW9uO3JldHVybiBUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UuT3BlcmF0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihpLG8pfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UuT3BlcmF0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihyLG8pe2Zvcig7by5uZXh0RmllbGQoKSYmIW8uaXNFbmRHcm91cCgpOyl7dmFyIGk9by5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChpKXtjYXNlIDE6dmFyIGM9by5yZWFkSW50NjQoKTtyLnNldE9wZXJhdGlvbklkZW50aWZpZXIoYyk7YnJlYWs7Y2FzZSAyOnZhciBjPW8ucmVhZEJ5dGVzKCk7ci5zZXRBZGRyZXNzKGMpO2JyZWFrO2Nhc2UgMzp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0QW1vdW50KGMpO2JyZWFrO2RlZmF1bHQ6by5za2lwRmllbGQoKTticmVha319cmV0dXJuIHJ9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbkJhbGFuY2VUcmFjZS5PcGVyYXRpb24ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciByPW5ldyBlLkJpbmFyeVdyaXRlcjtyZXR1cm4gVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uQmFsYW5jZVRyYWNlLk9wZXJhdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLHIpLHIuZ2V0UmVzdWx0QnVmZmVyKCl9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbkJhbGFuY2VUcmFjZS5PcGVyYXRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24ocixvKXt2YXIgaT12b2lkIDA7aT1yLmdldE9wZXJhdGlvbklkZW50aWZpZXIoKSxpIT09MCYmby53cml0ZUludDY0KDEsaSksaT1yLmdldEFkZHJlc3NfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcygyLGkpLGk9ci5nZXRBbW91bnQoKSxpIT09MCYmby53cml0ZUludDY0KDMsaSl9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbkJhbGFuY2VUcmFjZS5PcGVyYXRpb24ucHJvdG90eXBlLmdldE9wZXJhdGlvbklkZW50aWZpZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLDApfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UuT3BlcmF0aW9uLnByb3RvdHlwZS5zZXRPcGVyYXRpb25JZGVudGlmaWVyPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywxLHIpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UuT3BlcmF0aW9uLnByb3RvdHlwZS5nZXRBZGRyZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwiIil9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbkJhbGFuY2VUcmFjZS5PcGVyYXRpb24ucHJvdG90eXBlLmdldEFkZHJlc3NfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UuT3BlcmF0aW9uLnByb3RvdHlwZS5nZXRBZGRyZXNzX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldEFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5UcmFuc2FjdGlvbkJhbGFuY2VUcmFjZS5PcGVyYXRpb24ucHJvdG90eXBlLnNldEFkZHJlc3M9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMixyKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uQmFsYW5jZVRyYWNlLk9wZXJhdGlvbi5wcm90b3R5cGUuZ2V0QW1vdW50PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMywwKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uQmFsYW5jZVRyYWNlLk9wZXJhdGlvbi5wcm90b3R5cGUuc2V0QW1vdW50PWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywzLHIpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uSWRlbnRpZmllcj1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsIiIpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uSWRlbnRpZmllcl9hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldFRyYW5zYWN0aW9uSWRlbnRpZmllcigpKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uQmFsYW5jZVRyYWNlLnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbklkZW50aWZpZXJfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0VHJhbnNhY3Rpb25JZGVudGlmaWVyKCkpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UucHJvdG90eXBlLnNldFRyYW5zYWN0aW9uSWRlbnRpZmllcj1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywxLHIpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UucHJvdG90eXBlLmdldE9wZXJhdGlvbkxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uQmFsYW5jZVRyYWNlLk9wZXJhdGlvbiwyKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uQmFsYW5jZVRyYWNlLnByb3RvdHlwZS5zZXRPcGVyYXRpb25MaXN0PWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywyLHIpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UucHJvdG90eXBlLmFkZE9wZXJhdGlvbj1mdW5jdGlvbihyLG8pe3JldHVybiBlLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDIscixUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UuT3BlcmF0aW9uLG8pfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UucHJvdG90eXBlLmNsZWFyT3BlcmF0aW9uTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldE9wZXJhdGlvbkxpc3QoW10pfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UucHJvdG90eXBlLmdldFR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywzLCIiKX0sVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uQmFsYW5jZVRyYWNlLnByb3RvdHlwZS5zZXRUeXBlPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywzLHIpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UucHJvdG90eXBlLmdldFN0YXR1cz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDQsIiIpfSxUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UucHJvdG90eXBlLnNldFN0YXR1cz1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsNCxyKX0sVHJvbldlYlByb3RvLkJsb2NrQmFsYW5jZVRyYWNlLnJlcGVhdGVkRmllbGRzXz1bM10sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5CbG9ja0JhbGFuY2VUcmFjZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocil7cmV0dXJuIFRyb25XZWJQcm90by5CbG9ja0JhbGFuY2VUcmFjZS50b09iamVjdChyLHRoaXMpfSxUcm9uV2ViUHJvdG8uQmxvY2tCYWxhbmNlVHJhY2UudG9PYmplY3Q9ZnVuY3Rpb24ocixvKXt2YXIgaSxjPXtibG9ja0lkZW50aWZpZXI6KGk9by5nZXRCbG9ja0lkZW50aWZpZXIoKSkmJlRyb25XZWJQcm90by5CbG9ja0JhbGFuY2VUcmFjZS5CbG9ja0lkZW50aWZpZXIudG9PYmplY3QocixpKSx0aW1lc3RhbXA6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobywyLDApLHRyYW5zYWN0aW9uQmFsYW5jZVRyYWNlTGlzdDplLk1lc3NhZ2UudG9PYmplY3RMaXN0KG8uZ2V0VHJhbnNhY3Rpb25CYWxhbmNlVHJhY2VMaXN0KCksVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uQmFsYW5jZVRyYWNlLnRvT2JqZWN0LHIpfTtyZXR1cm4gciYmKGMuJGpzcGJNZXNzYWdlSW5zdGFuY2U9byksY30pLFRyb25XZWJQcm90by5CbG9ja0JhbGFuY2VUcmFjZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihyKXt2YXIgbz1uZXcgZS5CaW5hcnlSZWFkZXIociksaT1uZXcgVHJvbldlYlByb3RvLkJsb2NrQmFsYW5jZVRyYWNlO3JldHVybiBUcm9uV2ViUHJvdG8uQmxvY2tCYWxhbmNlVHJhY2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGksbyl9LFRyb25XZWJQcm90by5CbG9ja0JhbGFuY2VUcmFjZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24ocixvKXtmb3IoO28ubmV4dEZpZWxkKCkmJiFvLmlzRW5kR3JvdXAoKTspe3ZhciBpPW8uZ2V0RmllbGROdW1iZXIoKTtzd2l0Y2goaSl7Y2FzZSAxOnZhciBjPW5ldyBUcm9uV2ViUHJvdG8uQmxvY2tCYWxhbmNlVHJhY2UuQmxvY2tJZGVudGlmaWVyO28ucmVhZE1lc3NhZ2UoYyxUcm9uV2ViUHJvdG8uQmxvY2tCYWxhbmNlVHJhY2UuQmxvY2tJZGVudGlmaWVyLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksci5zZXRCbG9ja0lkZW50aWZpZXIoYyk7YnJlYWs7Y2FzZSAyOnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRUaW1lc3RhbXAoYyk7YnJlYWs7Y2FzZSAzOnZhciBjPW5ldyBUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2U7by5yZWFkTWVzc2FnZShjLFRyb25XZWJQcm90by5UcmFuc2FjdGlvbkJhbGFuY2VUcmFjZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLHIuYWRkVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2UoYyk7YnJlYWs7ZGVmYXVsdDpvLnNraXBGaWVsZCgpO2JyZWFrfX1yZXR1cm4gcn0sVHJvbldlYlByb3RvLkJsb2NrQmFsYW5jZVRyYWNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcj1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIFRyb25XZWJQcm90by5CbG9ja0JhbGFuY2VUcmFjZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLHIpLHIuZ2V0UmVzdWx0QnVmZmVyKCl9LFRyb25XZWJQcm90by5CbG9ja0JhbGFuY2VUcmFjZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihyLG8pe3ZhciBpPXZvaWQgMDtpPXIuZ2V0QmxvY2tJZGVudGlmaWVyKCksaSE9bnVsbCYmby53cml0ZU1lc3NhZ2UoMSxpLFRyb25XZWJQcm90by5CbG9ja0JhbGFuY2VUcmFjZS5CbG9ja0lkZW50aWZpZXIuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLGk9ci5nZXRUaW1lc3RhbXAoKSxpIT09MCYmby53cml0ZUludDY0KDIsaSksaT1yLmdldFRyYW5zYWN0aW9uQmFsYW5jZVRyYWNlTGlzdCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMyxpLFRyb25XZWJQcm90by5UcmFuc2FjdGlvbkJhbGFuY2VUcmFjZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LGUuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihUcm9uV2ViUHJvdG8uQmxvY2tCYWxhbmNlVHJhY2UuQmxvY2tJZGVudGlmaWVyLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihyKXtyZXR1cm4gVHJvbldlYlByb3RvLkJsb2NrQmFsYW5jZVRyYWNlLkJsb2NrSWRlbnRpZmllci50b09iamVjdChyLHRoaXMpfSxUcm9uV2ViUHJvdG8uQmxvY2tCYWxhbmNlVHJhY2UuQmxvY2tJZGVudGlmaWVyLnRvT2JqZWN0PWZ1bmN0aW9uKHIsbyl7dmFyIGk9e2hhc2g6by5nZXRIYXNoX2FzQjY0KCksbnVtYmVyOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sMiwwKX07cmV0dXJuIHImJihpLiRqc3BiTWVzc2FnZUluc3RhbmNlPW8pLGl9KSxUcm9uV2ViUHJvdG8uQmxvY2tCYWxhbmNlVHJhY2UuQmxvY2tJZGVudGlmaWVyLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHIpe3ZhciBvPW5ldyBlLkJpbmFyeVJlYWRlcihyKSxpPW5ldyBUcm9uV2ViUHJvdG8uQmxvY2tCYWxhbmNlVHJhY2UuQmxvY2tJZGVudGlmaWVyO3JldHVybiBUcm9uV2ViUHJvdG8uQmxvY2tCYWxhbmNlVHJhY2UuQmxvY2tJZGVudGlmaWVyLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihpLG8pfSxUcm9uV2ViUHJvdG8uQmxvY2tCYWxhbmNlVHJhY2UuQmxvY2tJZGVudGlmaWVyLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihyLG8pe2Zvcig7by5uZXh0RmllbGQoKSYmIW8uaXNFbmRHcm91cCgpOyl7dmFyIGk9by5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChpKXtjYXNlIDE6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldEhhc2goYyk7YnJlYWs7Y2FzZSAyOnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXROdW1iZXIoYyk7YnJlYWs7ZGVmYXVsdDpvLnNraXBGaWVsZCgpO2JyZWFrfX1yZXR1cm4gcn0sVHJvbldlYlByb3RvLkJsb2NrQmFsYW5jZVRyYWNlLkJsb2NrSWRlbnRpZmllci5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IGUuQmluYXJ5V3JpdGVyO3JldHVybiBUcm9uV2ViUHJvdG8uQmxvY2tCYWxhbmNlVHJhY2UuQmxvY2tJZGVudGlmaWVyLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsciksci5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLkJsb2NrQmFsYW5jZVRyYWNlLkJsb2NrSWRlbnRpZmllci5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihyLG8pe3ZhciBpPXZvaWQgMDtpPXIuZ2V0SGFzaF9hc1U4KCksaS5sZW5ndGg+MCYmby53cml0ZUJ5dGVzKDEsaSksaT1yLmdldE51bWJlcigpLGkhPT0wJiZvLndyaXRlSW50NjQoMixpKX0sVHJvbldlYlByb3RvLkJsb2NrQmFsYW5jZVRyYWNlLkJsb2NrSWRlbnRpZmllci5wcm90b3R5cGUuZ2V0SGFzaD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsIiIpfSxUcm9uV2ViUHJvdG8uQmxvY2tCYWxhbmNlVHJhY2UuQmxvY2tJZGVudGlmaWVyLnByb3RvdHlwZS5nZXRIYXNoX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0SGFzaCgpKX0sVHJvbldlYlByb3RvLkJsb2NrQmFsYW5jZVRyYWNlLkJsb2NrSWRlbnRpZmllci5wcm90b3R5cGUuZ2V0SGFzaF9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRIYXNoKCkpfSxUcm9uV2ViUHJvdG8uQmxvY2tCYWxhbmNlVHJhY2UuQmxvY2tJZGVudGlmaWVyLnByb3RvdHlwZS5zZXRIYXNoPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDEscil9LFRyb25XZWJQcm90by5CbG9ja0JhbGFuY2VUcmFjZS5CbG9ja0lkZW50aWZpZXIucHJvdG90eXBlLmdldE51bWJlcj1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsMCl9LFRyb25XZWJQcm90by5CbG9ja0JhbGFuY2VUcmFjZS5CbG9ja0lkZW50aWZpZXIucHJvdG90eXBlLnNldE51bWJlcj1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMixyKX0sVHJvbldlYlByb3RvLkJsb2NrQmFsYW5jZVRyYWNlLnByb3RvdHlwZS5nZXRCbG9ja0lkZW50aWZpZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLFRyb25XZWJQcm90by5CbG9ja0JhbGFuY2VUcmFjZS5CbG9ja0lkZW50aWZpZXIsMSl9LFRyb25XZWJQcm90by5CbG9ja0JhbGFuY2VUcmFjZS5wcm90b3R5cGUuc2V0QmxvY2tJZGVudGlmaWVyPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMSxyKX0sVHJvbldlYlByb3RvLkJsb2NrQmFsYW5jZVRyYWNlLnByb3RvdHlwZS5jbGVhckJsb2NrSWRlbnRpZmllcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEJsb2NrSWRlbnRpZmllcih2b2lkIDApfSxUcm9uV2ViUHJvdG8uQmxvY2tCYWxhbmNlVHJhY2UucHJvdG90eXBlLmhhc0Jsb2NrSWRlbnRpZmllcj1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKSE9bnVsbH0sVHJvbldlYlByb3RvLkJsb2NrQmFsYW5jZVRyYWNlLnByb3RvdHlwZS5nZXRUaW1lc3RhbXA9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLDApfSxUcm9uV2ViUHJvdG8uQmxvY2tCYWxhbmNlVHJhY2UucHJvdG90eXBlLnNldFRpbWVzdGFtcD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMixyKX0sVHJvbldlYlByb3RvLkJsb2NrQmFsYW5jZVRyYWNlLnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbkJhbGFuY2VUcmFjZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsVHJvbldlYlByb3RvLlRyYW5zYWN0aW9uQmFsYW5jZVRyYWNlLDMpfSxUcm9uV2ViUHJvdG8uQmxvY2tCYWxhbmNlVHJhY2UucHJvdG90eXBlLnNldFRyYW5zYWN0aW9uQmFsYW5jZVRyYWNlTGlzdD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMyxyKX0sVHJvbldlYlByb3RvLkJsb2NrQmFsYW5jZVRyYWNlLnByb3RvdHlwZS5hZGRUcmFuc2FjdGlvbkJhbGFuY2VUcmFjZT1mdW5jdGlvbihyLG8pe3JldHVybiBlLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDMscixUcm9uV2ViUHJvdG8uVHJhbnNhY3Rpb25CYWxhbmNlVHJhY2Usbyl9LFRyb25XZWJQcm90by5CbG9ja0JhbGFuY2VUcmFjZS5wcm90b3R5cGUuY2xlYXJUcmFuc2FjdGlvbkJhbGFuY2VUcmFjZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRUcmFuc2FjdGlvbkJhbGFuY2VUcmFjZUxpc3QoW10pfSxlLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYoVHJvbldlYlByb3RvLkFjY291bnRUcmFjZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocil7cmV0dXJuIFRyb25XZWJQcm90by5BY2NvdW50VHJhY2UudG9PYmplY3Qocix0aGlzKX0sVHJvbldlYlByb3RvLkFjY291bnRUcmFjZS50b09iamVjdD1mdW5jdGlvbihyLG8pe3ZhciBpPXtiYWxhbmNlOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sMSwwKSxwbGFjZWhvbGRlcjplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDk5LDApfTtyZXR1cm4gciYmKGkuJGpzcGJNZXNzYWdlSW5zdGFuY2U9byksaX0pLFRyb25XZWJQcm90by5BY2NvdW50VHJhY2UuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocil7dmFyIG89bmV3IGUuQmluYXJ5UmVhZGVyKHIpLGk9bmV3IFRyb25XZWJQcm90by5BY2NvdW50VHJhY2U7cmV0dXJuIFRyb25XZWJQcm90by5BY2NvdW50VHJhY2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGksbyl9LFRyb25XZWJQcm90by5BY2NvdW50VHJhY2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHIsbyl7Zm9yKDtvLm5leHRGaWVsZCgpJiYhby5pc0VuZEdyb3VwKCk7KXt2YXIgaT1vLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKGkpe2Nhc2UgMTp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0QmFsYW5jZShjKTticmVhaztjYXNlIDk5OnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRQbGFjZWhvbGRlcihjKTticmVhaztkZWZhdWx0Om8uc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiByfSxUcm9uV2ViUHJvdG8uQWNjb3VudFRyYWNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcj1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIFRyb25XZWJQcm90by5BY2NvdW50VHJhY2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxyKSxyLmdldFJlc3VsdEJ1ZmZlcigpfSxUcm9uV2ViUHJvdG8uQWNjb3VudFRyYWNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHIsbyl7dmFyIGk9dm9pZCAwO2k9ci5nZXRCYWxhbmNlKCksaSE9PTAmJm8ud3JpdGVJbnQ2NCgxLGkpLGk9ci5nZXRQbGFjZWhvbGRlcigpLGkhPT0wJiZvLndyaXRlSW50NjQoOTksaSl9LFRyb25XZWJQcm90by5BY2NvdW50VHJhY2UucHJvdG90eXBlLmdldEJhbGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLDApfSxUcm9uV2ViUHJvdG8uQWNjb3VudFRyYWNlLnByb3RvdHlwZS5zZXRCYWxhbmNlPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywxLHIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudFRyYWNlLnByb3RvdHlwZS5nZXRQbGFjZWhvbGRlcj1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDk5LDApfSxUcm9uV2ViUHJvdG8uQWNjb3VudFRyYWNlLnByb3RvdHlwZS5zZXRQbGFjZWhvbGRlcj1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsOTkscil9LGUuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihUcm9uV2ViUHJvdG8uQWNjb3VudElkZW50aWZpZXIucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKHIpe3JldHVybiBUcm9uV2ViUHJvdG8uQWNjb3VudElkZW50aWZpZXIudG9PYmplY3Qocix0aGlzKX0sVHJvbldlYlByb3RvLkFjY291bnRJZGVudGlmaWVyLnRvT2JqZWN0PWZ1bmN0aW9uKHIsbyl7dmFyIGk9e2FkZHJlc3M6by5nZXRBZGRyZXNzX2FzQjY0KCl9O3JldHVybiByJiYoaS4kanNwYk1lc3NhZ2VJbnN0YW5jZT1vKSxpfSksVHJvbldlYlByb3RvLkFjY291bnRJZGVudGlmaWVyLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHIpe3ZhciBvPW5ldyBlLkJpbmFyeVJlYWRlcihyKSxpPW5ldyBUcm9uV2ViUHJvdG8uQWNjb3VudElkZW50aWZpZXI7cmV0dXJuIFRyb25XZWJQcm90by5BY2NvdW50SWRlbnRpZmllci5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaSxvKX0sVHJvbldlYlByb3RvLkFjY291bnRJZGVudGlmaWVyLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihyLG8pe2Zvcig7by5uZXh0RmllbGQoKSYmIW8uaXNFbmRHcm91cCgpOyl7dmFyIGk9by5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChpKXtjYXNlIDE6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldEFkZHJlc3MoYyk7YnJlYWs7ZGVmYXVsdDpvLnNraXBGaWVsZCgpO2JyZWFrfX1yZXR1cm4gcn0sVHJvbldlYlByb3RvLkFjY291bnRJZGVudGlmaWVyLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcj1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIFRyb25XZWJQcm90by5BY2NvdW50SWRlbnRpZmllci5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLHIpLHIuZ2V0UmVzdWx0QnVmZmVyKCl9LFRyb25XZWJQcm90by5BY2NvdW50SWRlbnRpZmllci5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihyLG8pe3ZhciBpPXZvaWQgMDtpPXIuZ2V0QWRkcmVzc19hc1U4KCksaS5sZW5ndGg+MCYmby53cml0ZUJ5dGVzKDEsaSl9LFRyb25XZWJQcm90by5BY2NvdW50SWRlbnRpZmllci5wcm90b3R5cGUuZ2V0QWRkcmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsIiIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudElkZW50aWZpZXIucHJvdG90eXBlLmdldEFkZHJlc3NfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uQWNjb3VudElkZW50aWZpZXIucHJvdG90eXBlLmdldEFkZHJlc3NfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0QWRkcmVzcygpKX0sVHJvbldlYlByb3RvLkFjY291bnRJZGVudGlmaWVyLnByb3RvdHlwZS5zZXRBZGRyZXNzPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDEscil9LGUuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihUcm9uV2ViUHJvdG8uQWNjb3VudEJhbGFuY2VSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihyKXtyZXR1cm4gVHJvbldlYlByb3RvLkFjY291bnRCYWxhbmNlUmVxdWVzdC50b09iamVjdChyLHRoaXMpfSxUcm9uV2ViUHJvdG8uQWNjb3VudEJhbGFuY2VSZXF1ZXN0LnRvT2JqZWN0PWZ1bmN0aW9uKHIsbyl7dmFyIGksYz17YWNjb3VudElkZW50aWZpZXI6KGk9by5nZXRBY2NvdW50SWRlbnRpZmllcigpKSYmVHJvbldlYlByb3RvLkFjY291bnRJZGVudGlmaWVyLnRvT2JqZWN0KHIsaSksYmxvY2tJZGVudGlmaWVyOihpPW8uZ2V0QmxvY2tJZGVudGlmaWVyKCkpJiZUcm9uV2ViUHJvdG8uQmxvY2tCYWxhbmNlVHJhY2UuQmxvY2tJZGVudGlmaWVyLnRvT2JqZWN0KHIsaSl9O3JldHVybiByJiYoYy4kanNwYk1lc3NhZ2VJbnN0YW5jZT1vKSxjfSksVHJvbldlYlByb3RvLkFjY291bnRCYWxhbmNlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihyKXt2YXIgbz1uZXcgZS5CaW5hcnlSZWFkZXIociksaT1uZXcgVHJvbldlYlByb3RvLkFjY291bnRCYWxhbmNlUmVxdWVzdDtyZXR1cm4gVHJvbldlYlByb3RvLkFjY291bnRCYWxhbmNlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaSxvKX0sVHJvbldlYlByb3RvLkFjY291bnRCYWxhbmNlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24ocixvKXtmb3IoO28ubmV4dEZpZWxkKCkmJiFvLmlzRW5kR3JvdXAoKTspe3ZhciBpPW8uZ2V0RmllbGROdW1iZXIoKTtzd2l0Y2goaSl7Y2FzZSAxOnZhciBjPW5ldyBUcm9uV2ViUHJvdG8uQWNjb3VudElkZW50aWZpZXI7by5yZWFkTWVzc2FnZShjLFRyb25XZWJQcm90by5BY2NvdW50SWRlbnRpZmllci5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLHIuc2V0QWNjb3VudElkZW50aWZpZXIoYyk7YnJlYWs7Y2FzZSAyOnZhciBjPW5ldyBUcm9uV2ViUHJvdG8uQmxvY2tCYWxhbmNlVHJhY2UuQmxvY2tJZGVudGlmaWVyO28ucmVhZE1lc3NhZ2UoYyxUcm9uV2ViUHJvdG8uQmxvY2tCYWxhbmNlVHJhY2UuQmxvY2tJZGVudGlmaWVyLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksci5zZXRCbG9ja0lkZW50aWZpZXIoYyk7YnJlYWs7ZGVmYXVsdDpvLnNraXBGaWVsZCgpO2JyZWFrfX1yZXR1cm4gcn0sVHJvbldlYlByb3RvLkFjY291bnRCYWxhbmNlUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IGUuQmluYXJ5V3JpdGVyO3JldHVybiBUcm9uV2ViUHJvdG8uQWNjb3VudEJhbGFuY2VSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsciksci5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLkFjY291bnRCYWxhbmNlUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihyLG8pe3ZhciBpPXZvaWQgMDtpPXIuZ2V0QWNjb3VudElkZW50aWZpZXIoKSxpIT1udWxsJiZvLndyaXRlTWVzc2FnZSgxLGksVHJvbldlYlByb3RvLkFjY291bnRJZGVudGlmaWVyLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxpPXIuZ2V0QmxvY2tJZGVudGlmaWVyKCksaSE9bnVsbCYmby53cml0ZU1lc3NhZ2UoMixpLFRyb25XZWJQcm90by5CbG9ja0JhbGFuY2VUcmFjZS5CbG9ja0lkZW50aWZpZXIuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudEJhbGFuY2VSZXF1ZXN0LnByb3RvdHlwZS5nZXRBY2NvdW50SWRlbnRpZmllcj1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsVHJvbldlYlByb3RvLkFjY291bnRJZGVudGlmaWVyLDEpfSxUcm9uV2ViUHJvdG8uQWNjb3VudEJhbGFuY2VSZXF1ZXN0LnByb3RvdHlwZS5zZXRBY2NvdW50SWRlbnRpZmllcj1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDEscil9LFRyb25XZWJQcm90by5BY2NvdW50QmFsYW5jZVJlcXVlc3QucHJvdG90eXBlLmNsZWFyQWNjb3VudElkZW50aWZpZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRBY2NvdW50SWRlbnRpZmllcih2b2lkIDApfSxUcm9uV2ViUHJvdG8uQWNjb3VudEJhbGFuY2VSZXF1ZXN0LnByb3RvdHlwZS5oYXNBY2NvdW50SWRlbnRpZmllcj1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKSE9bnVsbH0sVHJvbldlYlByb3RvLkFjY291bnRCYWxhbmNlUmVxdWVzdC5wcm90b3R5cGUuZ2V0QmxvY2tJZGVudGlmaWVyPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxUcm9uV2ViUHJvdG8uQmxvY2tCYWxhbmNlVHJhY2UuQmxvY2tJZGVudGlmaWVyLDIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudEJhbGFuY2VSZXF1ZXN0LnByb3RvdHlwZS5zZXRCbG9ja0lkZW50aWZpZXI9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywyLHIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudEJhbGFuY2VSZXF1ZXN0LnByb3RvdHlwZS5jbGVhckJsb2NrSWRlbnRpZmllcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEJsb2NrSWRlbnRpZmllcih2b2lkIDApfSxUcm9uV2ViUHJvdG8uQWNjb3VudEJhbGFuY2VSZXF1ZXN0LnByb3RvdHlwZS5oYXNCbG9ja0lkZW50aWZpZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMikhPW51bGx9LGUuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihUcm9uV2ViUHJvdG8uQWNjb3VudEJhbGFuY2VSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocil7cmV0dXJuIFRyb25XZWJQcm90by5BY2NvdW50QmFsYW5jZVJlc3BvbnNlLnRvT2JqZWN0KHIsdGhpcyl9LFRyb25XZWJQcm90by5BY2NvdW50QmFsYW5jZVJlc3BvbnNlLnRvT2JqZWN0PWZ1bmN0aW9uKHIsbyl7dmFyIGksYz17YmFsYW5jZTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDEsMCksYmxvY2tJZGVudGlmaWVyOihpPW8uZ2V0QmxvY2tJZGVudGlmaWVyKCkpJiZUcm9uV2ViUHJvdG8uQmxvY2tCYWxhbmNlVHJhY2UuQmxvY2tJZGVudGlmaWVyLnRvT2JqZWN0KHIsaSl9O3JldHVybiByJiYoYy4kanNwYk1lc3NhZ2VJbnN0YW5jZT1vKSxjfSksVHJvbldlYlByb3RvLkFjY291bnRCYWxhbmNlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocil7dmFyIG89bmV3IGUuQmluYXJ5UmVhZGVyKHIpLGk9bmV3IFRyb25XZWJQcm90by5BY2NvdW50QmFsYW5jZVJlc3BvbnNlO3JldHVybiBUcm9uV2ViUHJvdG8uQWNjb3VudEJhbGFuY2VSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaSxvKX0sVHJvbldlYlByb3RvLkFjY291bnRCYWxhbmNlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHIsbyl7Zm9yKDtvLm5leHRGaWVsZCgpJiYhby5pc0VuZEdyb3VwKCk7KXt2YXIgaT1vLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKGkpe2Nhc2UgMTp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0QmFsYW5jZShjKTticmVhaztjYXNlIDI6dmFyIGM9bmV3IFRyb25XZWJQcm90by5CbG9ja0JhbGFuY2VUcmFjZS5CbG9ja0lkZW50aWZpZXI7by5yZWFkTWVzc2FnZShjLFRyb25XZWJQcm90by5CbG9ja0JhbGFuY2VUcmFjZS5CbG9ja0lkZW50aWZpZXIuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxyLnNldEJsb2NrSWRlbnRpZmllcihjKTticmVhaztkZWZhdWx0Om8uc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiByfSxUcm9uV2ViUHJvdG8uQWNjb3VudEJhbGFuY2VSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IGUuQmluYXJ5V3JpdGVyO3JldHVybiBUcm9uV2ViUHJvdG8uQWNjb3VudEJhbGFuY2VSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLHIpLHIuZ2V0UmVzdWx0QnVmZmVyKCl9LFRyb25XZWJQcm90by5BY2NvdW50QmFsYW5jZVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHIsbyl7dmFyIGk9dm9pZCAwO2k9ci5nZXRCYWxhbmNlKCksaSE9PTAmJm8ud3JpdGVJbnQ2NCgxLGkpLGk9ci5nZXRCbG9ja0lkZW50aWZpZXIoKSxpIT1udWxsJiZvLndyaXRlTWVzc2FnZSgyLGksVHJvbldlYlByb3RvLkJsb2NrQmFsYW5jZVRyYWNlLkJsb2NrSWRlbnRpZmllci5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LFRyb25XZWJQcm90by5BY2NvdW50QmFsYW5jZVJlc3BvbnNlLnByb3RvdHlwZS5nZXRCYWxhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwwKX0sVHJvbldlYlByb3RvLkFjY291bnRCYWxhbmNlUmVzcG9uc2UucHJvdG90eXBlLnNldEJhbGFuY2U9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDEscil9LFRyb25XZWJQcm90by5BY2NvdW50QmFsYW5jZVJlc3BvbnNlLnByb3RvdHlwZS5nZXRCbG9ja0lkZW50aWZpZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLFRyb25XZWJQcm90by5CbG9ja0JhbGFuY2VUcmFjZS5CbG9ja0lkZW50aWZpZXIsMil9LFRyb25XZWJQcm90by5BY2NvdW50QmFsYW5jZVJlc3BvbnNlLnByb3RvdHlwZS5zZXRCbG9ja0lkZW50aWZpZXI9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywyLHIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudEJhbGFuY2VSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJCbG9ja0lkZW50aWZpZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRCbG9ja0lkZW50aWZpZXIodm9pZCAwKX0sVHJvbldlYlByb3RvLkFjY291bnRCYWxhbmNlUmVzcG9uc2UucHJvdG90eXBlLmhhc0Jsb2NrSWRlbnRpZmllcj1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKSE9bnVsbH0sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5GcmVlemVCYWxhbmNlVjJDb250cmFjdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocil7cmV0dXJuIFRyb25XZWJQcm90by5GcmVlemVCYWxhbmNlVjJDb250cmFjdC50b09iamVjdChyLHRoaXMpfSxUcm9uV2ViUHJvdG8uRnJlZXplQmFsYW5jZVYyQ29udHJhY3QudG9PYmplY3Q9ZnVuY3Rpb24ocixvKXt2YXIgaT17b3duZXJBZGRyZXNzOm8uZ2V0T3duZXJBZGRyZXNzX2FzQjY0KCksZnJvemVuQmFsYW5jZTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDIsMCkscmVzb3VyY2U6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobywzLDApfTtyZXR1cm4gciYmKGkuJGpzcGJNZXNzYWdlSW5zdGFuY2U9byksaX0pLFRyb25XZWJQcm90by5GcmVlemVCYWxhbmNlVjJDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihyKXt2YXIgbz1uZXcgZS5CaW5hcnlSZWFkZXIociksaT1uZXcgVHJvbldlYlByb3RvLkZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0O3JldHVybiBUcm9uV2ViUHJvdG8uRnJlZXplQmFsYW5jZVYyQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGksbyl9LFRyb25XZWJQcm90by5GcmVlemVCYWxhbmNlVjJDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24ocixvKXtmb3IoO28ubmV4dEZpZWxkKCkmJiFvLmlzRW5kR3JvdXAoKTspe3ZhciBpPW8uZ2V0RmllbGROdW1iZXIoKTtzd2l0Y2goaSl7Y2FzZSAxOnZhciBjPW8ucmVhZEJ5dGVzKCk7ci5zZXRPd25lckFkZHJlc3MoYyk7YnJlYWs7Y2FzZSAyOnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRGcm96ZW5CYWxhbmNlKGMpO2JyZWFrO2Nhc2UgMzp2YXIgYz1vLnJlYWRFbnVtKCk7ci5zZXRSZXNvdXJjZShjKTticmVhaztkZWZhdWx0Om8uc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiByfSxUcm9uV2ViUHJvdG8uRnJlZXplQmFsYW5jZVYyQ29udHJhY3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciByPW5ldyBlLkJpbmFyeVdyaXRlcjtyZXR1cm4gVHJvbldlYlByb3RvLkZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsciksci5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLkZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHIsbyl7dmFyIGk9dm9pZCAwO2k9ci5nZXRPd25lckFkZHJlc3NfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcygxLGkpLGk9ci5nZXRGcm96ZW5CYWxhbmNlKCksaSE9PTAmJm8ud3JpdGVJbnQ2NCgyLGkpLGk9ci5nZXRSZXNvdXJjZSgpLGkhPT0wJiZvLndyaXRlRW51bSgzLGkpfSxUcm9uV2ViUHJvdG8uRnJlZXplQmFsYW5jZVYyQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsIiIpfSxUcm9uV2ViUHJvdG8uRnJlZXplQmFsYW5jZVYyQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLkZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3NfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0T3duZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uRnJlZXplQmFsYW5jZVYyQ29udHJhY3QucHJvdG90eXBlLnNldE93bmVyQWRkcmVzcz1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywxLHIpfSxUcm9uV2ViUHJvdG8uRnJlZXplQmFsYW5jZVYyQ29udHJhY3QucHJvdG90eXBlLmdldEZyb3plbkJhbGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLDApfSxUcm9uV2ViUHJvdG8uRnJlZXplQmFsYW5jZVYyQ29udHJhY3QucHJvdG90eXBlLnNldEZyb3plbkJhbGFuY2U9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDIscil9LFRyb25XZWJQcm90by5GcmVlemVCYWxhbmNlVjJDb250cmFjdC5wcm90b3R5cGUuZ2V0UmVzb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywzLDApfSxUcm9uV2ViUHJvdG8uRnJlZXplQmFsYW5jZVYyQ29udHJhY3QucHJvdG90eXBlLnNldFJlc291cmNlPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zRW51bUZpZWxkKHRoaXMsMyxyKX0sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5VbmZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihyKXtyZXR1cm4gVHJvbldlYlByb3RvLlVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QudG9PYmplY3Qocix0aGlzKX0sVHJvbldlYlByb3RvLlVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QudG9PYmplY3Q9ZnVuY3Rpb24ocixvKXt2YXIgaT17b3duZXJBZGRyZXNzOm8uZ2V0T3duZXJBZGRyZXNzX2FzQjY0KCksdW5mcmVlemVCYWxhbmNlOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sMiwwKSxyZXNvdXJjZTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDMsMCl9O3JldHVybiByJiYoaS4kanNwYk1lc3NhZ2VJbnN0YW5jZT1vKSxpfSksVHJvbldlYlByb3RvLlVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocil7dmFyIG89bmV3IGUuQmluYXJ5UmVhZGVyKHIpLGk9bmV3IFRyb25XZWJQcm90by5VbmZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0O3JldHVybiBUcm9uV2ViUHJvdG8uVW5mcmVlemVCYWxhbmNlVjJDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaSxvKX0sVHJvbldlYlByb3RvLlVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHIsbyl7Zm9yKDtvLm5leHRGaWVsZCgpJiYhby5pc0VuZEdyb3VwKCk7KXt2YXIgaT1vLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKGkpe2Nhc2UgMTp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0T3duZXJBZGRyZXNzKGMpO2JyZWFrO2Nhc2UgMjp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0VW5mcmVlemVCYWxhbmNlKGMpO2JyZWFrO2Nhc2UgMzp2YXIgYz1vLnJlYWRFbnVtKCk7ci5zZXRSZXNvdXJjZShjKTticmVhaztkZWZhdWx0Om8uc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiByfSxUcm9uV2ViUHJvdG8uVW5mcmVlemVCYWxhbmNlVjJDb250cmFjdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IGUuQmluYXJ5V3JpdGVyO3JldHVybiBUcm9uV2ViUHJvdG8uVW5mcmVlemVCYWxhbmNlVjJDb250cmFjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLHIpLHIuZ2V0UmVzdWx0QnVmZmVyKCl9LFRyb25XZWJQcm90by5VbmZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHIsbyl7dmFyIGk9dm9pZCAwO2k9ci5nZXRPd25lckFkZHJlc3NfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcygxLGkpLGk9ci5nZXRVbmZyZWV6ZUJhbGFuY2UoKSxpIT09MCYmby53cml0ZUludDY0KDIsaSksaT1yLmdldFJlc291cmNlKCksaSE9PTAmJm8ud3JpdGVFbnVtKDMsaSl9LFRyb25XZWJQcm90by5VbmZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLCIiKX0sVHJvbldlYlByb3RvLlVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5VbmZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0LnByb3RvdHlwZS5zZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMSxyKX0sVHJvbldlYlByb3RvLlVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QucHJvdG90eXBlLmdldFVuZnJlZXplQmFsYW5jZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsMCl9LFRyb25XZWJQcm90by5VbmZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0LnByb3RvdHlwZS5zZXRVbmZyZWV6ZUJhbGFuY2U9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDIscil9LFRyb25XZWJQcm90by5VbmZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0LnByb3RvdHlwZS5nZXRSZXNvdXJjZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsMCl9LFRyb25XZWJQcm90by5VbmZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0LnByb3RvdHlwZS5zZXRSZXNvdXJjZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0VudW1GaWVsZCh0aGlzLDMscil9LGUuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihUcm9uV2ViUHJvdG8uV2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihyKXtyZXR1cm4gVHJvbldlYlByb3RvLldpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdC50b09iamVjdChyLHRoaXMpfSxUcm9uV2ViUHJvdG8uV2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0LnRvT2JqZWN0PWZ1bmN0aW9uKHIsbyl7dmFyIGk9e293bmVyQWRkcmVzczpvLmdldE93bmVyQWRkcmVzc19hc0I2NCgpfTtyZXR1cm4gciYmKGkuJGpzcGJNZXNzYWdlSW5zdGFuY2U9byksaX0pLFRyb25XZWJQcm90by5XaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocil7dmFyIG89bmV3IGUuQmluYXJ5UmVhZGVyKHIpLGk9bmV3IFRyb25XZWJQcm90by5XaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3Q7cmV0dXJuIFRyb25XZWJQcm90by5XaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGksbyl9LFRyb25XZWJQcm90by5XaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHIsbyl7Zm9yKDtvLm5leHRGaWVsZCgpJiYhby5pc0VuZEdyb3VwKCk7KXt2YXIgaT1vLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKGkpe2Nhc2UgMTp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0T3duZXJBZGRyZXNzKGMpO2JyZWFrO2RlZmF1bHQ6by5za2lwRmllbGQoKTticmVha319cmV0dXJuIHJ9LFRyb25XZWJQcm90by5XaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciByPW5ldyBlLkJpbmFyeVdyaXRlcjtyZXR1cm4gVHJvbldlYlByb3RvLldpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLHIpLHIuZ2V0UmVzdWx0QnVmZmVyKCl9LFRyb25XZWJQcm90by5XaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24ocixvKXt2YXIgaT12b2lkIDA7aT1yLmdldE93bmVyQWRkcmVzc19hc1U4KCksaS5sZW5ndGg+MCYmby53cml0ZUJ5dGVzKDEsaSl9LFRyb25XZWJQcm90by5XaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsIiIpfSxUcm9uV2ViUHJvdG8uV2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3NfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5XaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5XaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3QucHJvdG90eXBlLnNldE93bmVyQWRkcmVzcz1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywxLHIpfSxlLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYoVHJvbldlYlByb3RvLkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocil7cmV0dXJuIFRyb25XZWJQcm90by5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QudG9PYmplY3Qocix0aGlzKX0sVHJvbldlYlByb3RvLkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC50b09iamVjdD1mdW5jdGlvbihyLG8pe3ZhciBpPXtvd25lckFkZHJlc3M6by5nZXRPd25lckFkZHJlc3NfYXNCNjQoKSxyZXNvdXJjZTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDIsMCksYmFsYW5jZTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDMsMCkscmVjZWl2ZXJBZGRyZXNzOm8uZ2V0UmVjZWl2ZXJBZGRyZXNzX2FzQjY0KCksbG9jazplLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobyw1LCExKSxsb2NrUGVyaW9kOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sNiwwKX07cmV0dXJuIHImJihpLiRqc3BiTWVzc2FnZUluc3RhbmNlPW8pLGl9KSxUcm9uV2ViUHJvdG8uRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHIpe3ZhciBvPW5ldyBlLkJpbmFyeVJlYWRlcihyKSxpPW5ldyBUcm9uV2ViUHJvdG8uRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0O3JldHVybiBUcm9uV2ViUHJvdG8uRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihpLG8pfSxUcm9uV2ViUHJvdG8uRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihyLG8pe2Zvcig7by5uZXh0RmllbGQoKSYmIW8uaXNFbmRHcm91cCgpOyl7dmFyIGk9by5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChpKXtjYXNlIDE6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldE93bmVyQWRkcmVzcyhjKTticmVhaztjYXNlIDI6dmFyIGM9by5yZWFkRW51bSgpO3Iuc2V0UmVzb3VyY2UoYyk7YnJlYWs7Y2FzZSAzOnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRCYWxhbmNlKGMpO2JyZWFrO2Nhc2UgNDp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0UmVjZWl2ZXJBZGRyZXNzKGMpO2JyZWFrO2Nhc2UgNTp2YXIgYz1vLnJlYWRCb29sKCk7ci5zZXRMb2NrKGMpO2JyZWFrO2Nhc2UgNjp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0TG9ja1BlcmlvZChjKTticmVhaztkZWZhdWx0Om8uc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiByfSxUcm9uV2ViUHJvdG8uRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcj1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIFRyb25XZWJQcm90by5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxyKSxyLmdldFJlc3VsdEJ1ZmZlcigpfSxUcm9uV2ViUHJvdG8uRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHIsbyl7dmFyIGk9dm9pZCAwO2k9ci5nZXRPd25lckFkZHJlc3NfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcygxLGkpLGk9ci5nZXRSZXNvdXJjZSgpLGkhPT0wJiZvLndyaXRlRW51bSgyLGkpLGk9ci5nZXRCYWxhbmNlKCksaSE9PTAmJm8ud3JpdGVJbnQ2NCgzLGkpLGk9ci5nZXRSZWNlaXZlckFkZHJlc3NfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcyg0LGkpLGk9ci5nZXRMb2NrKCksaSYmby53cml0ZUJvb2woNSxpKSxpPXIuZ2V0TG9ja1BlcmlvZCgpLGkhPT0wJiZvLndyaXRlSW50NjQoNixpKX0sVHJvbldlYlByb3RvLkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwiIil9LFRyb25XZWJQcm90by5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5wcm90b3R5cGUuc2V0T3duZXJBZGRyZXNzPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDEscil9LFRyb25XZWJQcm90by5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QucHJvdG90eXBlLmdldFJlc291cmNlPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwwKX0sVHJvbldlYlByb3RvLkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5wcm90b3R5cGUuc2V0UmVzb3VyY2U9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNFbnVtRmllbGQodGhpcywyLHIpfSxUcm9uV2ViUHJvdG8uRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRCYWxhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMywwKX0sVHJvbldlYlByb3RvLkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5wcm90b3R5cGUuc2V0QmFsYW5jZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMyxyKX0sVHJvbldlYlByb3RvLkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5wcm90b3R5cGUuZ2V0UmVjZWl2ZXJBZGRyZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNCwiIil9LFRyb25XZWJQcm90by5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QucHJvdG90eXBlLmdldFJlY2VpdmVyQWRkcmVzc19hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldFJlY2VpdmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5wcm90b3R5cGUuZ2V0UmVjZWl2ZXJBZGRyZXNzX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldFJlY2VpdmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5wcm90b3R5cGUuc2V0UmVjZWl2ZXJBZGRyZXNzPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDQscil9LFRyb25XZWJQcm90by5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QucHJvdG90eXBlLmdldExvY2s9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsNSwhMSl9LFRyb25XZWJQcm90by5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QucHJvdG90eXBlLnNldExvY2s9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCb29sZWFuRmllbGQodGhpcyw1LHIpfSxUcm9uV2ViUHJvdG8uRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRMb2NrUGVyaW9kPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNiwwKX0sVHJvbldlYlByb3RvLkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5wcm90b3R5cGUuc2V0TG9ja1BlcmlvZD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsNixyKX0sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5VbkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocil7cmV0dXJuIFRyb25XZWJQcm90by5VbkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC50b09iamVjdChyLHRoaXMpfSxUcm9uV2ViUHJvdG8uVW5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QudG9PYmplY3Q9ZnVuY3Rpb24ocixvKXt2YXIgaT17b3duZXJBZGRyZXNzOm8uZ2V0T3duZXJBZGRyZXNzX2FzQjY0KCkscmVzb3VyY2U6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobywyLDApLGJhbGFuY2U6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobywzLDApLHJlY2VpdmVyQWRkcmVzczpvLmdldFJlY2VpdmVyQWRkcmVzc19hc0I2NCgpfTtyZXR1cm4gciYmKGkuJGpzcGJNZXNzYWdlSW5zdGFuY2U9byksaX0pLFRyb25XZWJQcm90by5VbkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihyKXt2YXIgbz1uZXcgZS5CaW5hcnlSZWFkZXIociksaT1uZXcgVHJvbldlYlByb3RvLlVuRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0O3JldHVybiBUcm9uV2ViUHJvdG8uVW5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGksbyl9LFRyb25XZWJQcm90by5VbkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24ocixvKXtmb3IoO28ubmV4dEZpZWxkKCkmJiFvLmlzRW5kR3JvdXAoKTspe3ZhciBpPW8uZ2V0RmllbGROdW1iZXIoKTtzd2l0Y2goaSl7Y2FzZSAxOnZhciBjPW8ucmVhZEJ5dGVzKCk7ci5zZXRPd25lckFkZHJlc3MoYyk7YnJlYWs7Y2FzZSAyOnZhciBjPW8ucmVhZEVudW0oKTtyLnNldFJlc291cmNlKGMpO2JyZWFrO2Nhc2UgMzp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0QmFsYW5jZShjKTticmVhaztjYXNlIDQ6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldFJlY2VpdmVyQWRkcmVzcyhjKTticmVhaztkZWZhdWx0Om8uc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiByfSxUcm9uV2ViUHJvdG8uVW5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciByPW5ldyBlLkJpbmFyeVdyaXRlcjtyZXR1cm4gVHJvbldlYlByb3RvLlVuRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsciksci5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLlVuRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHIsbyl7dmFyIGk9dm9pZCAwO2k9ci5nZXRPd25lckFkZHJlc3NfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcygxLGkpLGk9ci5nZXRSZXNvdXJjZSgpLGkhPT0wJiZvLndyaXRlRW51bSgyLGkpLGk9ci5nZXRCYWxhbmNlKCksaSE9PTAmJm8ud3JpdGVJbnQ2NCgzLGkpLGk9ci5nZXRSZWNlaXZlckFkZHJlc3NfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcyg0LGkpfSxUcm9uV2ViUHJvdG8uVW5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsIiIpfSxUcm9uV2ViUHJvdG8uVW5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlVuRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3NfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0T3duZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uVW5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QucHJvdG90eXBlLnNldE93bmVyQWRkcmVzcz1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywxLHIpfSxUcm9uV2ViUHJvdG8uVW5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QucHJvdG90eXBlLmdldFJlc291cmNlPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwwKX0sVHJvbldlYlByb3RvLlVuRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LnByb3RvdHlwZS5zZXRSZXNvdXJjZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0VudW1GaWVsZCh0aGlzLDIscil9LFRyb25XZWJQcm90by5VbkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5wcm90b3R5cGUuZ2V0QmFsYW5jZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsMCl9LFRyb25XZWJQcm90by5VbkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5wcm90b3R5cGUuc2V0QmFsYW5jZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMyxyKX0sVHJvbldlYlByb3RvLlVuRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRSZWNlaXZlckFkZHJlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw0LCIiKX0sVHJvbldlYlByb3RvLlVuRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRSZWNlaXZlckFkZHJlc3NfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRSZWNlaXZlckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5VbkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5wcm90b3R5cGUuZ2V0UmVjZWl2ZXJBZGRyZXNzX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldFJlY2VpdmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlVuRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LnByb3RvdHlwZS5zZXRSZWNlaXZlckFkZHJlc3M9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsNCxyKX0sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5DYW5jZWxBbGxVbmZyZWV6ZVYyQ29udHJhY3QucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKHIpe3JldHVybiBUcm9uV2ViUHJvdG8uQ2FuY2VsQWxsVW5mcmVlemVWMkNvbnRyYWN0LnRvT2JqZWN0KHIsdGhpcyl9LFRyb25XZWJQcm90by5DYW5jZWxBbGxVbmZyZWV6ZVYyQ29udHJhY3QudG9PYmplY3Q9ZnVuY3Rpb24ocixvKXt2YXIgaT17b3duZXJBZGRyZXNzOm8uZ2V0T3duZXJBZGRyZXNzX2FzQjY0KCl9O3JldHVybiByJiYoaS4kanNwYk1lc3NhZ2VJbnN0YW5jZT1vKSxpfSksVHJvbldlYlByb3RvLkNhbmNlbEFsbFVuZnJlZXplVjJDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihyKXt2YXIgbz1uZXcgZS5CaW5hcnlSZWFkZXIociksaT1uZXcgVHJvbldlYlByb3RvLkNhbmNlbEFsbFVuZnJlZXplVjJDb250cmFjdDtyZXR1cm4gVHJvbldlYlByb3RvLkNhbmNlbEFsbFVuZnJlZXplVjJDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaSxvKX0sVHJvbldlYlByb3RvLkNhbmNlbEFsbFVuZnJlZXplVjJDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24ocixvKXtmb3IoO28ubmV4dEZpZWxkKCkmJiFvLmlzRW5kR3JvdXAoKTspe3ZhciBpPW8uZ2V0RmllbGROdW1iZXIoKTtzd2l0Y2goaSl7Y2FzZSAxOnZhciBjPW8ucmVhZEJ5dGVzKCk7ci5zZXRPd25lckFkZHJlc3MoYyk7YnJlYWs7ZGVmYXVsdDpvLnNraXBGaWVsZCgpO2JyZWFrfX1yZXR1cm4gcn0sVHJvbldlYlByb3RvLkNhbmNlbEFsbFVuZnJlZXplVjJDb250cmFjdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IGUuQmluYXJ5V3JpdGVyO3JldHVybiBUcm9uV2ViUHJvdG8uQ2FuY2VsQWxsVW5mcmVlemVWMkNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsciksci5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLkNhbmNlbEFsbFVuZnJlZXplVjJDb250cmFjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihyLG8pe3ZhciBpPXZvaWQgMDtpPXIuZ2V0T3duZXJBZGRyZXNzX2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlQnl0ZXMoMSxpKX0sVHJvbldlYlByb3RvLkNhbmNlbEFsbFVuZnJlZXplVjJDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwiIil9LFRyb25XZWJQcm90by5DYW5jZWxBbGxVbmZyZWV6ZVYyQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLkNhbmNlbEFsbFVuZnJlZXplVjJDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLkNhbmNlbEFsbFVuZnJlZXplVjJDb250cmFjdC5wcm90b3R5cGUuc2V0T3duZXJBZGRyZXNzPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDEscil9LHQub2JqZWN0LmV4dGVuZChuLFRyb25XZWJQcm90byl9KShrdik7dmFyIFV2PXt9OyhmdW5jdGlvbihuKXt2YXIgZT1Ocix0PWUsYT10eXBlb2YgZ2xvYmFsVGhpczwidSImJmdsb2JhbFRoaXN8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3d8fHR5cGVvZiBhPCJ1IiYmYXx8dHlwZW9mIHNlbGY8InUiJiZzZWxmfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfS5jYWxsKG51bGwpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpO3QuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0IixudWxsLGEpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LkZyb3plblN1cHBseSIsbnVsbCxhKSx0LmV4cG9ydFN5bWJvbCgiVHJvbldlYlByb3RvLlBhcnRpY2lwYXRlQXNzZXRJc3N1ZUNvbnRyYWN0IixudWxsLGEpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uVHJhbnNmZXJBc3NldENvbnRyYWN0IixudWxsLGEpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uVW5mcmVlemVBc3NldENvbnRyYWN0IixudWxsLGEpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uVXBkYXRlQXNzZXRDb250cmFjdCIsbnVsbCxhKSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0PWZ1bmN0aW9uKHMpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMscywwLC0xLFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSx0LmluaGVyaXRzKFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QsZS5NZXNzYWdlKSx0LkRFQlVHJiYhQ09NUElMRUQmJihUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LmRpc3BsYXlOYW1lPSJUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0IiksVHJvbldlYlByb3RvLkFzc2V0SXNzdWVDb250cmFjdC5Gcm96ZW5TdXBwbHk9ZnVuY3Rpb24ocyl7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxzLDAsLTEsbnVsbCxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LkZyb3plblN1cHBseSxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QuRnJvemVuU3VwcGx5LmRpc3BsYXlOYW1lPSJUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LkZyb3plblN1cHBseSIpLFRyb25XZWJQcm90by5UcmFuc2ZlckFzc2V0Q29udHJhY3Q9ZnVuY3Rpb24ocyl7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxzLDAsLTEsbnVsbCxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uVHJhbnNmZXJBc3NldENvbnRyYWN0LGUuTWVzc2FnZSksdC5ERUJVRyYmIUNPTVBJTEVEJiYoVHJvbldlYlByb3RvLlRyYW5zZmVyQXNzZXRDb250cmFjdC5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLlRyYW5zZmVyQXNzZXRDb250cmFjdCIpLFRyb25XZWJQcm90by5VbmZyZWV6ZUFzc2V0Q29udHJhY3Q9ZnVuY3Rpb24ocyl7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxzLDAsLTEsbnVsbCxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uVW5mcmVlemVBc3NldENvbnRyYWN0LGUuTWVzc2FnZSksdC5ERUJVRyYmIUNPTVBJTEVEJiYoVHJvbldlYlByb3RvLlVuZnJlZXplQXNzZXRDb250cmFjdC5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLlVuZnJlZXplQXNzZXRDb250cmFjdCIpLFRyb25XZWJQcm90by5VcGRhdGVBc3NldENvbnRyYWN0PWZ1bmN0aW9uKHMpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMscywwLC0xLG51bGwsbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLlVwZGF0ZUFzc2V0Q29udHJhY3QsZS5NZXNzYWdlKSx0LkRFQlVHJiYhQ09NUElMRUQmJihUcm9uV2ViUHJvdG8uVXBkYXRlQXNzZXRDb250cmFjdC5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLlVwZGF0ZUFzc2V0Q29udHJhY3QiKSxUcm9uV2ViUHJvdG8uUGFydGljaXBhdGVBc3NldElzc3VlQ29udHJhY3Q9ZnVuY3Rpb24ocyl7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxzLDAsLTEsbnVsbCxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uUGFydGljaXBhdGVBc3NldElzc3VlQ29udHJhY3QsZS5NZXNzYWdlKSx0LkRFQlVHJiYhQ09NUElMRUQmJihUcm9uV2ViUHJvdG8uUGFydGljaXBhdGVBc3NldElzc3VlQ29udHJhY3QuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5QYXJ0aWNpcGF0ZUFzc2V0SXNzdWVDb250cmFjdCIpLFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QucmVwZWF0ZWRGaWVsZHNfPVs1XSxlLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYoVHJvbldlYlByb3RvLkFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocyl7cmV0dXJuIFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QudG9PYmplY3Qocyx0aGlzKX0sVHJvbldlYlByb3RvLkFzc2V0SXNzdWVDb250cmFjdC50b09iamVjdD1mdW5jdGlvbihzLHIpe3ZhciBvPXtpZDplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChyLDQxLCIiKSxvd25lckFkZHJlc3M6ci5nZXRPd25lckFkZHJlc3NfYXNCNjQoKSxuYW1lOnIuZ2V0TmFtZV9hc0I2NCgpLGFiYnI6ci5nZXRBYmJyX2FzQjY0KCksdG90YWxTdXBwbHk6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQociw0LDApLGZyb3plblN1cHBseUxpc3Q6ZS5NZXNzYWdlLnRvT2JqZWN0TGlzdChyLmdldEZyb3plblN1cHBseUxpc3QoKSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LkZyb3plblN1cHBseS50b09iamVjdCxzKSx0cnhOdW06ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQociw2LDApLHByZWNpc2lvbjplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChyLDcsMCksbnVtOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHIsOCwwKSxzdGFydFRpbWU6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQociw5LDApLGVuZFRpbWU6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQociwxMCwwKSxvcmRlcjplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChyLDExLDApLHZvdGVTY29yZTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChyLDE2LDApLGRlc2NyaXB0aW9uOnIuZ2V0RGVzY3JpcHRpb25fYXNCNjQoKSx1cmw6ci5nZXRVcmxfYXNCNjQoKSxmcmVlQXNzZXROZXRMaW1pdDplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChyLDIyLDApLHB1YmxpY0ZyZWVBc3NldE5ldExpbWl0OmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHIsMjMsMCkscHVibGljRnJlZUFzc2V0TmV0VXNhZ2U6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQociwyNCwwKSxwdWJsaWNMYXRlc3RGcmVlTmV0VGltZTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChyLDI1LDApfTtyZXR1cm4gcyYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9ciksb30pLFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocyl7dmFyIHI9bmV3IGUuQmluYXJ5UmVhZGVyKHMpLG89bmV3IFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3Q7cmV0dXJuIFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8scil9LFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHMscil7Zm9yKDtyLm5leHRGaWVsZCgpJiYhci5pc0VuZEdyb3VwKCk7KXt2YXIgbz1yLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKG8pe2Nhc2UgNDE6dmFyIGk9ci5yZWFkU3RyaW5nKCk7cy5zZXRJZChpKTticmVhaztjYXNlIDE6dmFyIGk9ci5yZWFkQnl0ZXMoKTtzLnNldE93bmVyQWRkcmVzcyhpKTticmVhaztjYXNlIDI6dmFyIGk9ci5yZWFkQnl0ZXMoKTtzLnNldE5hbWUoaSk7YnJlYWs7Y2FzZSAzOnZhciBpPXIucmVhZEJ5dGVzKCk7cy5zZXRBYmJyKGkpO2JyZWFrO2Nhc2UgNDp2YXIgaT1yLnJlYWRJbnQ2NCgpO3Muc2V0VG90YWxTdXBwbHkoaSk7YnJlYWs7Y2FzZSA1OnZhciBpPW5ldyBUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LkZyb3plblN1cHBseTtyLnJlYWRNZXNzYWdlKGksVHJvbldlYlByb3RvLkFzc2V0SXNzdWVDb250cmFjdC5Gcm96ZW5TdXBwbHkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxzLmFkZEZyb3plblN1cHBseShpKTticmVhaztjYXNlIDY6dmFyIGk9ci5yZWFkSW50MzIoKTtzLnNldFRyeE51bShpKTticmVhaztjYXNlIDc6dmFyIGk9ci5yZWFkSW50MzIoKTtzLnNldFByZWNpc2lvbihpKTticmVhaztjYXNlIDg6dmFyIGk9ci5yZWFkSW50MzIoKTtzLnNldE51bShpKTticmVhaztjYXNlIDk6dmFyIGk9ci5yZWFkSW50NjQoKTtzLnNldFN0YXJ0VGltZShpKTticmVhaztjYXNlIDEwOnZhciBpPXIucmVhZEludDY0KCk7cy5zZXRFbmRUaW1lKGkpO2JyZWFrO2Nhc2UgMTE6dmFyIGk9ci5yZWFkSW50NjQoKTtzLnNldE9yZGVyKGkpO2JyZWFrO2Nhc2UgMTY6dmFyIGk9ci5yZWFkSW50MzIoKTtzLnNldFZvdGVTY29yZShpKTticmVhaztjYXNlIDIwOnZhciBpPXIucmVhZEJ5dGVzKCk7cy5zZXREZXNjcmlwdGlvbihpKTticmVhaztjYXNlIDIxOnZhciBpPXIucmVhZEJ5dGVzKCk7cy5zZXRVcmwoaSk7YnJlYWs7Y2FzZSAyMjp2YXIgaT1yLnJlYWRJbnQ2NCgpO3Muc2V0RnJlZUFzc2V0TmV0TGltaXQoaSk7YnJlYWs7Y2FzZSAyMzp2YXIgaT1yLnJlYWRJbnQ2NCgpO3Muc2V0UHVibGljRnJlZUFzc2V0TmV0TGltaXQoaSk7YnJlYWs7Y2FzZSAyNDp2YXIgaT1yLnJlYWRJbnQ2NCgpO3Muc2V0UHVibGljRnJlZUFzc2V0TmV0VXNhZ2UoaSk7YnJlYWs7Y2FzZSAyNTp2YXIgaT1yLnJlYWRJbnQ2NCgpO3Muc2V0UHVibGljTGF0ZXN0RnJlZU5ldFRpbWUoaSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBGaWVsZCgpO2JyZWFrfX1yZXR1cm4gc30sVHJvbldlYlByb3RvLkFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIHM9bmV3IGUuQmluYXJ5V3JpdGVyO3JldHVybiBUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMscykscy5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLkFzc2V0SXNzdWVDb250cmFjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihzLHIpe3ZhciBvPXZvaWQgMDtvPXMuZ2V0SWQoKSxvLmxlbmd0aD4wJiZyLndyaXRlU3RyaW5nKDQxLG8pLG89cy5nZXRPd25lckFkZHJlc3NfYXNVOCgpLG8ubGVuZ3RoPjAmJnIud3JpdGVCeXRlcygxLG8pLG89cy5nZXROYW1lX2FzVTgoKSxvLmxlbmd0aD4wJiZyLndyaXRlQnl0ZXMoMixvKSxvPXMuZ2V0QWJicl9hc1U4KCksby5sZW5ndGg+MCYmci53cml0ZUJ5dGVzKDMsbyksbz1zLmdldFRvdGFsU3VwcGx5KCksbyE9PTAmJnIud3JpdGVJbnQ2NCg0LG8pLG89cy5nZXRGcm96ZW5TdXBwbHlMaXN0KCksby5sZW5ndGg+MCYmci53cml0ZVJlcGVhdGVkTWVzc2FnZSg1LG8sVHJvbldlYlByb3RvLkFzc2V0SXNzdWVDb250cmFjdC5Gcm96ZW5TdXBwbHkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLG89cy5nZXRUcnhOdW0oKSxvIT09MCYmci53cml0ZUludDMyKDYsbyksbz1zLmdldFByZWNpc2lvbigpLG8hPT0wJiZyLndyaXRlSW50MzIoNyxvKSxvPXMuZ2V0TnVtKCksbyE9PTAmJnIud3JpdGVJbnQzMig4LG8pLG89cy5nZXRTdGFydFRpbWUoKSxvIT09MCYmci53cml0ZUludDY0KDksbyksbz1zLmdldEVuZFRpbWUoKSxvIT09MCYmci53cml0ZUludDY0KDEwLG8pLG89cy5nZXRPcmRlcigpLG8hPT0wJiZyLndyaXRlSW50NjQoMTEsbyksbz1zLmdldFZvdGVTY29yZSgpLG8hPT0wJiZyLndyaXRlSW50MzIoMTYsbyksbz1zLmdldERlc2NyaXB0aW9uX2FzVTgoKSxvLmxlbmd0aD4wJiZyLndyaXRlQnl0ZXMoMjAsbyksbz1zLmdldFVybF9hc1U4KCksby5sZW5ndGg+MCYmci53cml0ZUJ5dGVzKDIxLG8pLG89cy5nZXRGcmVlQXNzZXROZXRMaW1pdCgpLG8hPT0wJiZyLndyaXRlSW50NjQoMjIsbyksbz1zLmdldFB1YmxpY0ZyZWVBc3NldE5ldExpbWl0KCksbyE9PTAmJnIud3JpdGVJbnQ2NCgyMyxvKSxvPXMuZ2V0UHVibGljRnJlZUFzc2V0TmV0VXNhZ2UoKSxvIT09MCYmci53cml0ZUludDY0KDI0LG8pLG89cy5nZXRQdWJsaWNMYXRlc3RGcmVlTmV0VGltZSgpLG8hPT0wJiZyLndyaXRlSW50NjQoMjUsbyl9LGUuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LkZyb3plblN1cHBseS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocyl7cmV0dXJuIFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QuRnJvemVuU3VwcGx5LnRvT2JqZWN0KHMsdGhpcyl9LFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QuRnJvemVuU3VwcGx5LnRvT2JqZWN0PWZ1bmN0aW9uKHMscil7dmFyIG89e2Zyb3plbkFtb3VudDplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChyLDEsMCksZnJvemVuRGF5czplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChyLDIsMCl9O3JldHVybiBzJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT1yKSxvfSksVHJvbldlYlByb3RvLkFzc2V0SXNzdWVDb250cmFjdC5Gcm96ZW5TdXBwbHkuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocyl7dmFyIHI9bmV3IGUuQmluYXJ5UmVhZGVyKHMpLG89bmV3IFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QuRnJvemVuU3VwcGx5O3JldHVybiBUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LkZyb3plblN1cHBseS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyxyKX0sVHJvbldlYlByb3RvLkFzc2V0SXNzdWVDb250cmFjdC5Gcm96ZW5TdXBwbHkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHMscil7Zm9yKDtyLm5leHRGaWVsZCgpJiYhci5pc0VuZEdyb3VwKCk7KXt2YXIgbz1yLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKG8pe2Nhc2UgMTp2YXIgaT1yLnJlYWRJbnQ2NCgpO3Muc2V0RnJvemVuQW1vdW50KGkpO2JyZWFrO2Nhc2UgMjp2YXIgaT1yLnJlYWRJbnQ2NCgpO3Muc2V0RnJvemVuRGF5cyhpKTticmVhaztkZWZhdWx0OnIuc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiBzfSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LkZyb3plblN1cHBseS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIHM9bmV3IGUuQmluYXJ5V3JpdGVyO3JldHVybiBUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LkZyb3plblN1cHBseS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLHMpLHMuZ2V0UmVzdWx0QnVmZmVyKCl9LFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QuRnJvemVuU3VwcGx5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHMscil7dmFyIG89dm9pZCAwO289cy5nZXRGcm96ZW5BbW91bnQoKSxvIT09MCYmci53cml0ZUludDY0KDEsbyksbz1zLmdldEZyb3plbkRheXMoKSxvIT09MCYmci53cml0ZUludDY0KDIsbyl9LFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QuRnJvemVuU3VwcGx5LnByb3RvdHlwZS5nZXRGcm96ZW5BbW91bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLDApfSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LkZyb3plblN1cHBseS5wcm90b3R5cGUuc2V0RnJvemVuQW1vdW50PWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywxLHMpfSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LkZyb3plblN1cHBseS5wcm90b3R5cGUuZ2V0RnJvemVuRGF5cz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsMCl9LFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QuRnJvemVuU3VwcGx5LnByb3RvdHlwZS5zZXRGcm96ZW5EYXlzPWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywyLHMpfSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRJZD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDQxLCIiKX0sVHJvbldlYlByb3RvLkFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuc2V0SWQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDQxLHMpfSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLCIiKX0sVHJvbldlYlByb3RvLkFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0T3duZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3NfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0T3duZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LnByb3RvdHlwZS5zZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24ocyl7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMSxzKX0sVHJvbldlYlByb3RvLkFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsIiIpfSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXROYW1lX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0TmFtZSgpKX0sVHJvbldlYlByb3RvLkFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuZ2V0TmFtZV9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXROYW1lKCkpfSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LnByb3RvdHlwZS5zZXROYW1lPWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDIscyl9LFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QucHJvdG90eXBlLmdldEFiYnI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywzLCIiKX0sVHJvbldlYlByb3RvLkFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuZ2V0QWJicl9hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldEFiYnIoKSl9LFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QucHJvdG90eXBlLmdldEFiYnJfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0QWJicigpKX0sVHJvbldlYlByb3RvLkFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuc2V0QWJicj1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywzLHMpfSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRUb3RhbFN1cHBseT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDQsMCl9LFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QucHJvdG90eXBlLnNldFRvdGFsU3VwcGx5PWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcyw0LHMpfSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRGcm96ZW5TdXBwbHlMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QuRnJvemVuU3VwcGx5LDUpfSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LnByb3RvdHlwZS5zZXRGcm96ZW5TdXBwbHlMaXN0PWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw1LHMpfSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LnByb3RvdHlwZS5hZGRGcm96ZW5TdXBwbHk9ZnVuY3Rpb24ocyxyKXtyZXR1cm4gZS5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw1LHMsVHJvbldlYlByb3RvLkFzc2V0SXNzdWVDb250cmFjdC5Gcm96ZW5TdXBwbHkscil9LFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QucHJvdG90eXBlLmNsZWFyRnJvemVuU3VwcGx5TGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEZyb3plblN1cHBseUxpc3QoW10pfSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRUcnhOdW09ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw2LDApfSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LnByb3RvdHlwZS5zZXRUcnhOdW09ZnVuY3Rpb24ocyl7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDYscyl9LFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QucHJvdG90eXBlLmdldFByZWNpc2lvbj1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDcsMCl9LFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QucHJvdG90eXBlLnNldFByZWNpc2lvbj1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsNyxzKX0sVHJvbldlYlByb3RvLkFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuZ2V0TnVtPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsOCwwKX0sVHJvbldlYlByb3RvLkFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuc2V0TnVtPWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcyw4LHMpfSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRTdGFydFRpbWU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw5LDApfSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LnByb3RvdHlwZS5zZXRTdGFydFRpbWU9ZnVuY3Rpb24ocyl7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDkscyl9LFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QucHJvdG90eXBlLmdldEVuZFRpbWU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxMCwwKX0sVHJvbldlYlByb3RvLkFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuc2V0RW5kVGltZT1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMTAscyl9LFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QucHJvdG90eXBlLmdldE9yZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMTEsMCl9LFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QucHJvdG90eXBlLnNldE9yZGVyPWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywxMSxzKX0sVHJvbldlYlByb3RvLkFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuZ2V0Vm90ZVNjb3JlPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMTYsMCl9LFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QucHJvdG90eXBlLnNldFZvdGVTY29yZT1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMTYscyl9LFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QucHJvdG90eXBlLmdldERlc2NyaXB0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMjAsIiIpfSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXREZXNjcmlwdGlvbl9hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldERlc2NyaXB0aW9uKCkpfSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXREZXNjcmlwdGlvbl9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXREZXNjcmlwdGlvbigpKX0sVHJvbldlYlByb3RvLkFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuc2V0RGVzY3JpcHRpb249ZnVuY3Rpb24ocyl7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMjAscyl9LFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QucHJvdG90eXBlLmdldFVybD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIxLCIiKX0sVHJvbldlYlByb3RvLkFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuZ2V0VXJsX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0VXJsKCkpfSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRVcmxfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0VXJsKCkpfSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LnByb3RvdHlwZS5zZXRVcmw9ZnVuY3Rpb24ocyl7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMjEscyl9LFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QucHJvdG90eXBlLmdldEZyZWVBc3NldE5ldExpbWl0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMjIsMCl9LFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QucHJvdG90eXBlLnNldEZyZWVBc3NldE5ldExpbWl0PWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywyMixzKX0sVHJvbldlYlByb3RvLkFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuZ2V0UHVibGljRnJlZUFzc2V0TmV0TGltaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyMywwKX0sVHJvbldlYlByb3RvLkFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuc2V0UHVibGljRnJlZUFzc2V0TmV0TGltaXQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDIzLHMpfSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRQdWJsaWNGcmVlQXNzZXROZXRVc2FnZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDI0LDApfSxUcm9uV2ViUHJvdG8uQXNzZXRJc3N1ZUNvbnRyYWN0LnByb3RvdHlwZS5zZXRQdWJsaWNGcmVlQXNzZXROZXRVc2FnZT1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMjQscyl9LFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QucHJvdG90eXBlLmdldFB1YmxpY0xhdGVzdEZyZWVOZXRUaW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMjUsMCl9LFRyb25XZWJQcm90by5Bc3NldElzc3VlQ29udHJhY3QucHJvdG90eXBlLnNldFB1YmxpY0xhdGVzdEZyZWVOZXRUaW1lPWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywyNSxzKX0sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5UcmFuc2ZlckFzc2V0Q29udHJhY3QucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKHMpe3JldHVybiBUcm9uV2ViUHJvdG8uVHJhbnNmZXJBc3NldENvbnRyYWN0LnRvT2JqZWN0KHMsdGhpcyl9LFRyb25XZWJQcm90by5UcmFuc2ZlckFzc2V0Q29udHJhY3QudG9PYmplY3Q9ZnVuY3Rpb24ocyxyKXt2YXIgbz17YXNzZXROYW1lOnIuZ2V0QXNzZXROYW1lX2FzQjY0KCksb3duZXJBZGRyZXNzOnIuZ2V0T3duZXJBZGRyZXNzX2FzQjY0KCksdG9BZGRyZXNzOnIuZ2V0VG9BZGRyZXNzX2FzQjY0KCksYW1vdW50OmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHIsNCwwKX07cmV0dXJuIHMmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXIpLG99KSxUcm9uV2ViUHJvdG8uVHJhbnNmZXJBc3NldENvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHMpe3ZhciByPW5ldyBlLkJpbmFyeVJlYWRlcihzKSxvPW5ldyBUcm9uV2ViUHJvdG8uVHJhbnNmZXJBc3NldENvbnRyYWN0O3JldHVybiBUcm9uV2ViUHJvdG8uVHJhbnNmZXJBc3NldENvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHIpfSxUcm9uV2ViUHJvdG8uVHJhbnNmZXJBc3NldENvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihzLHIpe2Zvcig7ci5uZXh0RmllbGQoKSYmIXIuaXNFbmRHcm91cCgpOyl7dmFyIG89ci5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChvKXtjYXNlIDE6dmFyIGk9ci5yZWFkQnl0ZXMoKTtzLnNldEFzc2V0TmFtZShpKTticmVhaztjYXNlIDI6dmFyIGk9ci5yZWFkQnl0ZXMoKTtzLnNldE93bmVyQWRkcmVzcyhpKTticmVhaztjYXNlIDM6dmFyIGk9ci5yZWFkQnl0ZXMoKTtzLnNldFRvQWRkcmVzcyhpKTticmVhaztjYXNlIDQ6dmFyIGk9ci5yZWFkSW50NjQoKTtzLnNldEFtb3VudChpKTticmVhaztkZWZhdWx0OnIuc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiBzfSxUcm9uV2ViUHJvdG8uVHJhbnNmZXJBc3NldENvbnRyYWN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcz1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIFRyb25XZWJQcm90by5UcmFuc2ZlckFzc2V0Q29udHJhY3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxzKSxzLmdldFJlc3VsdEJ1ZmZlcigpfSxUcm9uV2ViUHJvdG8uVHJhbnNmZXJBc3NldENvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHMscil7dmFyIG89dm9pZCAwO289cy5nZXRBc3NldE5hbWVfYXNVOCgpLG8ubGVuZ3RoPjAmJnIud3JpdGVCeXRlcygxLG8pLG89cy5nZXRPd25lckFkZHJlc3NfYXNVOCgpLG8ubGVuZ3RoPjAmJnIud3JpdGVCeXRlcygyLG8pLG89cy5nZXRUb0FkZHJlc3NfYXNVOCgpLG8ubGVuZ3RoPjAmJnIud3JpdGVCeXRlcygzLG8pLG89cy5nZXRBbW91bnQoKSxvIT09MCYmci53cml0ZUludDY0KDQsbyl9LFRyb25XZWJQcm90by5UcmFuc2ZlckFzc2V0Q29udHJhY3QucHJvdG90eXBlLmdldEFzc2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsIiIpfSxUcm9uV2ViUHJvdG8uVHJhbnNmZXJBc3NldENvbnRyYWN0LnByb3RvdHlwZS5nZXRBc3NldE5hbWVfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRBc3NldE5hbWUoKSl9LFRyb25XZWJQcm90by5UcmFuc2ZlckFzc2V0Q29udHJhY3QucHJvdG90eXBlLmdldEFzc2V0TmFtZV9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRBc3NldE5hbWUoKSl9LFRyb25XZWJQcm90by5UcmFuc2ZlckFzc2V0Q29udHJhY3QucHJvdG90eXBlLnNldEFzc2V0TmFtZT1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywxLHMpfSxUcm9uV2ViUHJvdG8uVHJhbnNmZXJBc3NldENvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLCIiKX0sVHJvbldlYlByb3RvLlRyYW5zZmVyQXNzZXRDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0T3duZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uVHJhbnNmZXJBc3NldENvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3NfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0T3duZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uVHJhbnNmZXJBc3NldENvbnRyYWN0LnByb3RvdHlwZS5zZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24ocyl7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMixzKX0sVHJvbldlYlByb3RvLlRyYW5zZmVyQXNzZXRDb250cmFjdC5wcm90b3R5cGUuZ2V0VG9BZGRyZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMywiIil9LFRyb25XZWJQcm90by5UcmFuc2ZlckFzc2V0Q29udHJhY3QucHJvdG90eXBlLmdldFRvQWRkcmVzc19hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldFRvQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlRyYW5zZmVyQXNzZXRDb250cmFjdC5wcm90b3R5cGUuZ2V0VG9BZGRyZXNzX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldFRvQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlRyYW5zZmVyQXNzZXRDb250cmFjdC5wcm90b3R5cGUuc2V0VG9BZGRyZXNzPWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDMscyl9LFRyb25XZWJQcm90by5UcmFuc2ZlckFzc2V0Q29udHJhY3QucHJvdG90eXBlLmdldEFtb3VudD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDQsMCl9LFRyb25XZWJQcm90by5UcmFuc2ZlckFzc2V0Q29udHJhY3QucHJvdG90eXBlLnNldEFtb3VudD1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsNCxzKX0sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5VbmZyZWV6ZUFzc2V0Q29udHJhY3QucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKHMpe3JldHVybiBUcm9uV2ViUHJvdG8uVW5mcmVlemVBc3NldENvbnRyYWN0LnRvT2JqZWN0KHMsdGhpcyl9LFRyb25XZWJQcm90by5VbmZyZWV6ZUFzc2V0Q29udHJhY3QudG9PYmplY3Q9ZnVuY3Rpb24ocyxyKXt2YXIgbz17b3duZXJBZGRyZXNzOnIuZ2V0T3duZXJBZGRyZXNzX2FzQjY0KCl9O3JldHVybiBzJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT1yKSxvfSksVHJvbldlYlByb3RvLlVuZnJlZXplQXNzZXRDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihzKXt2YXIgcj1uZXcgZS5CaW5hcnlSZWFkZXIocyksbz1uZXcgVHJvbldlYlByb3RvLlVuZnJlZXplQXNzZXRDb250cmFjdDtyZXR1cm4gVHJvbldlYlByb3RvLlVuZnJlZXplQXNzZXRDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyxyKX0sVHJvbldlYlByb3RvLlVuZnJlZXplQXNzZXRDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24ocyxyKXtmb3IoO3IubmV4dEZpZWxkKCkmJiFyLmlzRW5kR3JvdXAoKTspe3ZhciBvPXIuZ2V0RmllbGROdW1iZXIoKTtzd2l0Y2gobyl7Y2FzZSAxOnZhciBpPXIucmVhZEJ5dGVzKCk7cy5zZXRPd25lckFkZHJlc3MoaSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBGaWVsZCgpO2JyZWFrfX1yZXR1cm4gc30sVHJvbldlYlByb3RvLlVuZnJlZXplQXNzZXRDb250cmFjdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIHM9bmV3IGUuQmluYXJ5V3JpdGVyO3JldHVybiBUcm9uV2ViUHJvdG8uVW5mcmVlemVBc3NldENvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMscykscy5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLlVuZnJlZXplQXNzZXRDb250cmFjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihzLHIpe3ZhciBvPXZvaWQgMDtvPXMuZ2V0T3duZXJBZGRyZXNzX2FzVTgoKSxvLmxlbmd0aD4wJiZyLndyaXRlQnl0ZXMoMSxvKX0sVHJvbldlYlByb3RvLlVuZnJlZXplQXNzZXRDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwiIil9LFRyb25XZWJQcm90by5VbmZyZWV6ZUFzc2V0Q29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlVuZnJlZXplQXNzZXRDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlVuZnJlZXplQXNzZXRDb250cmFjdC5wcm90b3R5cGUuc2V0T3duZXJBZGRyZXNzPWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDEscyl9LGUuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihUcm9uV2ViUHJvdG8uVXBkYXRlQXNzZXRDb250cmFjdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocyl7cmV0dXJuIFRyb25XZWJQcm90by5VcGRhdGVBc3NldENvbnRyYWN0LnRvT2JqZWN0KHMsdGhpcyl9LFRyb25XZWJQcm90by5VcGRhdGVBc3NldENvbnRyYWN0LnRvT2JqZWN0PWZ1bmN0aW9uKHMscil7dmFyIG89e293bmVyQWRkcmVzczpyLmdldE93bmVyQWRkcmVzc19hc0I2NCgpLGRlc2NyaXB0aW9uOnIuZ2V0RGVzY3JpcHRpb25fYXNCNjQoKSx1cmw6ci5nZXRVcmxfYXNCNjQoKSxuZXdMaW1pdDplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChyLDQsMCksbmV3UHVibGljTGltaXQ6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQociw1LDApfTtyZXR1cm4gcyYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9ciksb30pLFRyb25XZWJQcm90by5VcGRhdGVBc3NldENvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHMpe3ZhciByPW5ldyBlLkJpbmFyeVJlYWRlcihzKSxvPW5ldyBUcm9uV2ViUHJvdG8uVXBkYXRlQXNzZXRDb250cmFjdDtyZXR1cm4gVHJvbldlYlByb3RvLlVwZGF0ZUFzc2V0Q29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8scil9LFRyb25XZWJQcm90by5VcGRhdGVBc3NldENvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihzLHIpe2Zvcig7ci5uZXh0RmllbGQoKSYmIXIuaXNFbmRHcm91cCgpOyl7dmFyIG89ci5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChvKXtjYXNlIDE6dmFyIGk9ci5yZWFkQnl0ZXMoKTtzLnNldE93bmVyQWRkcmVzcyhpKTticmVhaztjYXNlIDI6dmFyIGk9ci5yZWFkQnl0ZXMoKTtzLnNldERlc2NyaXB0aW9uKGkpO2JyZWFrO2Nhc2UgMzp2YXIgaT1yLnJlYWRCeXRlcygpO3Muc2V0VXJsKGkpO2JyZWFrO2Nhc2UgNDp2YXIgaT1yLnJlYWRJbnQ2NCgpO3Muc2V0TmV3TGltaXQoaSk7YnJlYWs7Y2FzZSA1OnZhciBpPXIucmVhZEludDY0KCk7cy5zZXROZXdQdWJsaWNMaW1pdChpKTticmVhaztkZWZhdWx0OnIuc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiBzfSxUcm9uV2ViUHJvdG8uVXBkYXRlQXNzZXRDb250cmFjdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIHM9bmV3IGUuQmluYXJ5V3JpdGVyO3JldHVybiBUcm9uV2ViUHJvdG8uVXBkYXRlQXNzZXRDb250cmFjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLHMpLHMuZ2V0UmVzdWx0QnVmZmVyKCl9LFRyb25XZWJQcm90by5VcGRhdGVBc3NldENvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHMscil7dmFyIG89dm9pZCAwO289cy5nZXRPd25lckFkZHJlc3NfYXNVOCgpLG8ubGVuZ3RoPjAmJnIud3JpdGVCeXRlcygxLG8pLG89cy5nZXREZXNjcmlwdGlvbl9hc1U4KCksby5sZW5ndGg+MCYmci53cml0ZUJ5dGVzKDIsbyksbz1zLmdldFVybF9hc1U4KCksby5sZW5ndGg+MCYmci53cml0ZUJ5dGVzKDMsbyksbz1zLmdldE5ld0xpbWl0KCksbyE9PTAmJnIud3JpdGVJbnQ2NCg0LG8pLG89cy5nZXROZXdQdWJsaWNMaW1pdCgpLG8hPT0wJiZyLndyaXRlSW50NjQoNSxvKX0sVHJvbldlYlByb3RvLlVwZGF0ZUFzc2V0Q29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsIiIpfSxUcm9uV2ViUHJvdG8uVXBkYXRlQXNzZXRDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0T3duZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uVXBkYXRlQXNzZXRDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlVwZGF0ZUFzc2V0Q29udHJhY3QucHJvdG90eXBlLnNldE93bmVyQWRkcmVzcz1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywxLHMpfSxUcm9uV2ViUHJvdG8uVXBkYXRlQXNzZXRDb250cmFjdC5wcm90b3R5cGUuZ2V0RGVzY3JpcHRpb249ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLCIiKX0sVHJvbldlYlByb3RvLlVwZGF0ZUFzc2V0Q29udHJhY3QucHJvdG90eXBlLmdldERlc2NyaXB0aW9uX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0RGVzY3JpcHRpb24oKSl9LFRyb25XZWJQcm90by5VcGRhdGVBc3NldENvbnRyYWN0LnByb3RvdHlwZS5nZXREZXNjcmlwdGlvbl9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXREZXNjcmlwdGlvbigpKX0sVHJvbldlYlByb3RvLlVwZGF0ZUFzc2V0Q29udHJhY3QucHJvdG90eXBlLnNldERlc2NyaXB0aW9uPWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDIscyl9LFRyb25XZWJQcm90by5VcGRhdGVBc3NldENvbnRyYWN0LnByb3RvdHlwZS5nZXRVcmw9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywzLCIiKX0sVHJvbldlYlByb3RvLlVwZGF0ZUFzc2V0Q29udHJhY3QucHJvdG90eXBlLmdldFVybF9hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldFVybCgpKX0sVHJvbldlYlByb3RvLlVwZGF0ZUFzc2V0Q29udHJhY3QucHJvdG90eXBlLmdldFVybF9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRVcmwoKSl9LFRyb25XZWJQcm90by5VcGRhdGVBc3NldENvbnRyYWN0LnByb3RvdHlwZS5zZXRVcmw9ZnVuY3Rpb24ocyl7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMyxzKX0sVHJvbldlYlByb3RvLlVwZGF0ZUFzc2V0Q29udHJhY3QucHJvdG90eXBlLmdldE5ld0xpbWl0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNCwwKX0sVHJvbldlYlByb3RvLlVwZGF0ZUFzc2V0Q29udHJhY3QucHJvdG90eXBlLnNldE5ld0xpbWl0PWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcyw0LHMpfSxUcm9uV2ViUHJvdG8uVXBkYXRlQXNzZXRDb250cmFjdC5wcm90b3R5cGUuZ2V0TmV3UHVibGljTGltaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw1LDApfSxUcm9uV2ViUHJvdG8uVXBkYXRlQXNzZXRDb250cmFjdC5wcm90b3R5cGUuc2V0TmV3UHVibGljTGltaXQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDUscyl9LGUuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihUcm9uV2ViUHJvdG8uUGFydGljaXBhdGVBc3NldElzc3VlQ29udHJhY3QucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKHMpe3JldHVybiBUcm9uV2ViUHJvdG8uUGFydGljaXBhdGVBc3NldElzc3VlQ29udHJhY3QudG9PYmplY3Qocyx0aGlzKX0sVHJvbldlYlByb3RvLlBhcnRpY2lwYXRlQXNzZXRJc3N1ZUNvbnRyYWN0LnRvT2JqZWN0PWZ1bmN0aW9uKHMscil7dmFyIG89e293bmVyQWRkcmVzczpyLmdldE93bmVyQWRkcmVzc19hc0I2NCgpLHRvQWRkcmVzczpyLmdldFRvQWRkcmVzc19hc0I2NCgpLGFzc2V0TmFtZTpyLmdldEFzc2V0TmFtZV9hc0I2NCgpLGFtb3VudDplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChyLDQsMCl9O3JldHVybiBzJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT1yKSxvfSksVHJvbldlYlByb3RvLlBhcnRpY2lwYXRlQXNzZXRJc3N1ZUNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHMpe3ZhciByPW5ldyBlLkJpbmFyeVJlYWRlcihzKSxvPW5ldyBUcm9uV2ViUHJvdG8uUGFydGljaXBhdGVBc3NldElzc3VlQ29udHJhY3Q7cmV0dXJuIFRyb25XZWJQcm90by5QYXJ0aWNpcGF0ZUFzc2V0SXNzdWVDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyxyKX0sVHJvbldlYlByb3RvLlBhcnRpY2lwYXRlQXNzZXRJc3N1ZUNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihzLHIpe2Zvcig7ci5uZXh0RmllbGQoKSYmIXIuaXNFbmRHcm91cCgpOyl7dmFyIG89ci5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChvKXtjYXNlIDE6dmFyIGk9ci5yZWFkQnl0ZXMoKTtzLnNldE93bmVyQWRkcmVzcyhpKTticmVhaztjYXNlIDI6dmFyIGk9ci5yZWFkQnl0ZXMoKTtzLnNldFRvQWRkcmVzcyhpKTticmVhaztjYXNlIDM6dmFyIGk9ci5yZWFkQnl0ZXMoKTtzLnNldEFzc2V0TmFtZShpKTticmVhaztjYXNlIDQ6dmFyIGk9ci5yZWFkSW50NjQoKTtzLnNldEFtb3VudChpKTticmVhaztkZWZhdWx0OnIuc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiBzfSxUcm9uV2ViUHJvdG8uUGFydGljaXBhdGVBc3NldElzc3VlQ29udHJhY3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBzPW5ldyBlLkJpbmFyeVdyaXRlcjtyZXR1cm4gVHJvbldlYlByb3RvLlBhcnRpY2lwYXRlQXNzZXRJc3N1ZUNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMscykscy5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLlBhcnRpY2lwYXRlQXNzZXRJc3N1ZUNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHMscil7dmFyIG89dm9pZCAwO289cy5nZXRPd25lckFkZHJlc3NfYXNVOCgpLG8ubGVuZ3RoPjAmJnIud3JpdGVCeXRlcygxLG8pLG89cy5nZXRUb0FkZHJlc3NfYXNVOCgpLG8ubGVuZ3RoPjAmJnIud3JpdGVCeXRlcygyLG8pLG89cy5nZXRBc3NldE5hbWVfYXNVOCgpLG8ubGVuZ3RoPjAmJnIud3JpdGVCeXRlcygzLG8pLG89cy5nZXRBbW91bnQoKSxvIT09MCYmci53cml0ZUludDY0KDQsbyl9LFRyb25XZWJQcm90by5QYXJ0aWNpcGF0ZUFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwiIil9LFRyb25XZWJQcm90by5QYXJ0aWNpcGF0ZUFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0T3duZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uUGFydGljaXBhdGVBc3NldElzc3VlQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5QYXJ0aWNpcGF0ZUFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuc2V0T3duZXJBZGRyZXNzPWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDEscyl9LFRyb25XZWJQcm90by5QYXJ0aWNpcGF0ZUFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuZ2V0VG9BZGRyZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwiIil9LFRyb25XZWJQcm90by5QYXJ0aWNpcGF0ZUFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuZ2V0VG9BZGRyZXNzX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0VG9BZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uUGFydGljaXBhdGVBc3NldElzc3VlQ29udHJhY3QucHJvdG90eXBlLmdldFRvQWRkcmVzc19hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRUb0FkZHJlc3MoKSl9LFRyb25XZWJQcm90by5QYXJ0aWNpcGF0ZUFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuc2V0VG9BZGRyZXNzPWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDIscyl9LFRyb25XZWJQcm90by5QYXJ0aWNpcGF0ZUFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuZ2V0QXNzZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMywiIil9LFRyb25XZWJQcm90by5QYXJ0aWNpcGF0ZUFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuZ2V0QXNzZXROYW1lX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0QXNzZXROYW1lKCkpfSxUcm9uV2ViUHJvdG8uUGFydGljaXBhdGVBc3NldElzc3VlQ29udHJhY3QucHJvdG90eXBlLmdldEFzc2V0TmFtZV9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRBc3NldE5hbWUoKSl9LFRyb25XZWJQcm90by5QYXJ0aWNpcGF0ZUFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuc2V0QXNzZXROYW1lPWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDMscyl9LFRyb25XZWJQcm90by5QYXJ0aWNpcGF0ZUFzc2V0SXNzdWVDb250cmFjdC5wcm90b3R5cGUuZ2V0QW1vdW50PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNCwwKX0sVHJvbldlYlByb3RvLlBhcnRpY2lwYXRlQXNzZXRJc3N1ZUNvbnRyYWN0LnByb3RvdHlwZS5zZXRBbW91bnQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDQscyl9LHQub2JqZWN0LmV4dGVuZChuLFRyb25XZWJQcm90byl9KShVdik7dmFyIER2PXt9OyhmdW5jdGlvbihuKXt2YXIgZT1Ocix0PWUsYT10eXBlb2YgZ2xvYmFsVGhpczwidSImJmdsb2JhbFRoaXN8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3d8fHR5cGVvZiBhPCJ1IiYmYXx8dHlwZW9mIHNlbGY8InUiJiZzZWxmfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfS5jYWxsKG51bGwpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLHM9aTA7dC5vYmplY3QuZXh0ZW5kKHByb3RvLHMpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uQ2xlYXJBQklDb250cmFjdCIsbnVsbCxhKSx0LmV4cG9ydFN5bWJvbCgiVHJvbldlYlByb3RvLkNvbnRyYWN0U3RhdGUiLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5DcmVhdGVTbWFydENvbnRyYWN0IixudWxsLGEpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdCIsbnVsbCxhKSx0LmV4cG9ydFN5bWJvbCgiVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJIixudWxsLGEpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuRW50cnkiLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5FbnRyeVR5cGUiLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5QYXJhbSIsbnVsbCxhKSx0LmV4cG9ydFN5bWJvbCgiVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LlN0YXRlTXV0YWJpbGl0eVR5cGUiLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5TbWFydENvbnRyYWN0RGF0YVdyYXBwZXIiLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5UcmlnZ2VyU21hcnRDb250cmFjdCIsbnVsbCxhKSx0LmV4cG9ydFN5bWJvbCgiVHJvbldlYlByb3RvLlVwZGF0ZUVuZXJneUxpbWl0Q29udHJhY3QiLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5VcGRhdGVTZXR0aW5nQ29udHJhY3QiLG51bGwsYSksVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3Q9ZnVuY3Rpb24ocil7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxyLDAsLTEsbnVsbCxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdCxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LmRpc3BsYXlOYW1lPSJUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdCIpLFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCST1mdW5jdGlvbihyKXtlLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLHIsMCwtMSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSx0LmluaGVyaXRzKFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSSxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJIiksVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5PWZ1bmN0aW9uKHIpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsciwwLC0xLFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LGUuTWVzc2FnZSksdC5ERUJVRyYmIUNPTVBJTEVEJiYoVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LmRpc3BsYXlOYW1lPSJUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuRW50cnkiKSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuRW50cnkuUGFyYW09ZnVuY3Rpb24ocil7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxyLDAsLTEsbnVsbCxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuRW50cnkuUGFyYW0sZS5NZXNzYWdlKSx0LkRFQlVHJiYhQ09NUElMRUQmJihUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuRW50cnkuUGFyYW0uZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5QYXJhbSIpLFRyb25XZWJQcm90by5Db250cmFjdFN0YXRlPWZ1bmN0aW9uKHIpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsciwwLC0xLG51bGwsbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLkNvbnRyYWN0U3RhdGUsZS5NZXNzYWdlKSx0LkRFQlVHJiYhQ09NUElMRUQmJihUcm9uV2ViUHJvdG8uQ29udHJhY3RTdGF0ZS5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLkNvbnRyYWN0U3RhdGUiKSxUcm9uV2ViUHJvdG8uQ3JlYXRlU21hcnRDb250cmFjdD1mdW5jdGlvbihyKXtlLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLHIsMCwtMSxudWxsLG51bGwpfSx0LmluaGVyaXRzKFRyb25XZWJQcm90by5DcmVhdGVTbWFydENvbnRyYWN0LGUuTWVzc2FnZSksdC5ERUJVRyYmIUNPTVBJTEVEJiYoVHJvbldlYlByb3RvLkNyZWF0ZVNtYXJ0Q29udHJhY3QuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5DcmVhdGVTbWFydENvbnRyYWN0IiksVHJvbldlYlByb3RvLlRyaWdnZXJTbWFydENvbnRyYWN0PWZ1bmN0aW9uKHIpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsciwwLC0xLG51bGwsbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLlRyaWdnZXJTbWFydENvbnRyYWN0LGUuTWVzc2FnZSksdC5ERUJVRyYmIUNPTVBJTEVEJiYoVHJvbldlYlByb3RvLlRyaWdnZXJTbWFydENvbnRyYWN0LmRpc3BsYXlOYW1lPSJUcm9uV2ViUHJvdG8uVHJpZ2dlclNtYXJ0Q29udHJhY3QiKSxUcm9uV2ViUHJvdG8uQ2xlYXJBQklDb250cmFjdD1mdW5jdGlvbihyKXtlLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLHIsMCwtMSxudWxsLG51bGwpfSx0LmluaGVyaXRzKFRyb25XZWJQcm90by5DbGVhckFCSUNvbnRyYWN0LGUuTWVzc2FnZSksdC5ERUJVRyYmIUNPTVBJTEVEJiYoVHJvbldlYlByb3RvLkNsZWFyQUJJQ29udHJhY3QuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5DbGVhckFCSUNvbnRyYWN0IiksVHJvbldlYlByb3RvLlVwZGF0ZVNldHRpbmdDb250cmFjdD1mdW5jdGlvbihyKXtlLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLHIsMCwtMSxudWxsLG51bGwpfSx0LmluaGVyaXRzKFRyb25XZWJQcm90by5VcGRhdGVTZXR0aW5nQ29udHJhY3QsZS5NZXNzYWdlKSx0LkRFQlVHJiYhQ09NUElMRUQmJihUcm9uV2ViUHJvdG8uVXBkYXRlU2V0dGluZ0NvbnRyYWN0LmRpc3BsYXlOYW1lPSJUcm9uV2ViUHJvdG8uVXBkYXRlU2V0dGluZ0NvbnRyYWN0IiksVHJvbldlYlByb3RvLlVwZGF0ZUVuZXJneUxpbWl0Q29udHJhY3Q9ZnVuY3Rpb24ocil7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxyLDAsLTEsbnVsbCxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uVXBkYXRlRW5lcmd5TGltaXRDb250cmFjdCxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5VcGRhdGVFbmVyZ3lMaW1pdENvbnRyYWN0LmRpc3BsYXlOYW1lPSJUcm9uV2ViUHJvdG8uVXBkYXRlRW5lcmd5TGltaXRDb250cmFjdCIpLFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0RGF0YVdyYXBwZXI9ZnVuY3Rpb24ocil7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxyLDAsLTEsbnVsbCxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdERhdGFXcmFwcGVyLGUuTWVzc2FnZSksdC5ERUJVRyYmIUNPTVBJTEVEJiYoVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3REYXRhV3JhcHBlci5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3REYXRhV3JhcHBlciIpLGUuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocil7cmV0dXJuIFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LnRvT2JqZWN0KHIsdGhpcyl9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LnRvT2JqZWN0PWZ1bmN0aW9uKHIsbyl7dmFyIGksYz17b3JpZ2luQWRkcmVzczpvLmdldE9yaWdpbkFkZHJlc3NfYXNCNjQoKSxjb250cmFjdEFkZHJlc3M6by5nZXRDb250cmFjdEFkZHJlc3NfYXNCNjQoKSxhYmk6KGk9by5nZXRBYmkoKSkmJlRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS50b09iamVjdChyLGkpLGJ5dGVjb2RlOm8uZ2V0Qnl0ZWNvZGVfYXNCNjQoKSxjYWxsVmFsdWU6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobyw1LDApLGNvbnN1bWVVc2VyUmVzb3VyY2VQZXJjZW50OmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sNiwwKSxuYW1lOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sNywiIiksb3JpZ2luRW5lcmd5TGltaXQ6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobyw4LDApLGNvZGVIYXNoOm8uZ2V0Q29kZUhhc2hfYXNCNjQoKSx0cnhIYXNoOm8uZ2V0VHJ4SGFzaF9hc0I2NCgpLHZlcnNpb246ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobywxMSwwKX07cmV0dXJuIHImJihjLiRqc3BiTWVzc2FnZUluc3RhbmNlPW8pLGN9KSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihyKXt2YXIgbz1uZXcgZS5CaW5hcnlSZWFkZXIociksaT1uZXcgVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3Q7cmV0dXJuIFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihpLG8pfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24ocixvKXtmb3IoO28ubmV4dEZpZWxkKCkmJiFvLmlzRW5kR3JvdXAoKTspe3ZhciBpPW8uZ2V0RmllbGROdW1iZXIoKTtzd2l0Y2goaSl7Y2FzZSAxOnZhciBjPW8ucmVhZEJ5dGVzKCk7ci5zZXRPcmlnaW5BZGRyZXNzKGMpO2JyZWFrO2Nhc2UgMjp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0Q29udHJhY3RBZGRyZXNzKGMpO2JyZWFrO2Nhc2UgMzp2YXIgYz1uZXcgVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJO28ucmVhZE1lc3NhZ2UoYyxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxyLnNldEFiaShjKTticmVhaztjYXNlIDQ6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldEJ5dGVjb2RlKGMpO2JyZWFrO2Nhc2UgNTp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0Q2FsbFZhbHVlKGMpO2JyZWFrO2Nhc2UgNjp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0Q29uc3VtZVVzZXJSZXNvdXJjZVBlcmNlbnQoYyk7YnJlYWs7Y2FzZSA3OnZhciBjPW8ucmVhZFN0cmluZygpO3Iuc2V0TmFtZShjKTticmVhaztjYXNlIDg6dmFyIGM9by5yZWFkSW50NjQoKTtyLnNldE9yaWdpbkVuZXJneUxpbWl0KGMpO2JyZWFrO2Nhc2UgOTp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0Q29kZUhhc2goYyk7YnJlYWs7Y2FzZSAxMDp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0VHJ4SGFzaChjKTticmVhaztjYXNlIDExOnZhciBjPW8ucmVhZEludDMyKCk7ci5zZXRWZXJzaW9uKGMpO2JyZWFrO2RlZmF1bHQ6by5za2lwRmllbGQoKTticmVha319cmV0dXJuIHJ9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcj1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsciksci5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24ocixvKXt2YXIgaT12b2lkIDA7aT1yLmdldE9yaWdpbkFkZHJlc3NfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcygxLGkpLGk9ci5nZXRDb250cmFjdEFkZHJlc3NfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcygyLGkpLGk9ci5nZXRBYmkoKSxpIT1udWxsJiZvLndyaXRlTWVzc2FnZSgzLGksVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxpPXIuZ2V0Qnl0ZWNvZGVfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcyg0LGkpLGk9ci5nZXRDYWxsVmFsdWUoKSxpIT09MCYmby53cml0ZUludDY0KDUsaSksaT1yLmdldENvbnN1bWVVc2VyUmVzb3VyY2VQZXJjZW50KCksaSE9PTAmJm8ud3JpdGVJbnQ2NCg2LGkpLGk9ci5nZXROYW1lKCksaS5sZW5ndGg+MCYmby53cml0ZVN0cmluZyg3LGkpLGk9ci5nZXRPcmlnaW5FbmVyZ3lMaW1pdCgpLGkhPT0wJiZvLndyaXRlSW50NjQoOCxpKSxpPXIuZ2V0Q29kZUhhc2hfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcyg5LGkpLGk9ci5nZXRUcnhIYXNoX2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlQnl0ZXMoMTAsaSksaT1yLmdldFZlcnNpb24oKSxpIT09MCYmby53cml0ZUludDMyKDExLGkpfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkucmVwZWF0ZWRGaWVsZHNfPVsxXSxlLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYoVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihyKXtyZXR1cm4gVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLnRvT2JqZWN0KHIsdGhpcyl9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS50b09iamVjdD1mdW5jdGlvbihyLG8pe3ZhciBpPXtlbnRyeXNMaXN0OmUuTWVzc2FnZS50b09iamVjdExpc3Qoby5nZXRFbnRyeXNMaXN0KCksVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LnRvT2JqZWN0LHIpfTtyZXR1cm4gciYmKGkuJGpzcGJNZXNzYWdlSW5zdGFuY2U9byksaX0pLFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihyKXt2YXIgbz1uZXcgZS5CaW5hcnlSZWFkZXIociksaT1uZXcgVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJO3JldHVybiBUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGksbyl9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24ocixvKXtmb3IoO28ubmV4dEZpZWxkKCkmJiFvLmlzRW5kR3JvdXAoKTspe3ZhciBpPW8uZ2V0RmllbGROdW1iZXIoKTtzd2l0Y2goaSl7Y2FzZSAxOnZhciBjPW5ldyBUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuRW50cnk7by5yZWFkTWVzc2FnZShjLFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLHIuYWRkRW50cnlzKGMpO2JyZWFrO2RlZmF1bHQ6by5za2lwRmllbGQoKTticmVha319cmV0dXJuIHJ9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IGUuQmluYXJ5V3JpdGVyO3JldHVybiBUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxyKSxyLmdldFJlc3VsdEJ1ZmZlcigpfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24ocixvKXt2YXIgaT12b2lkIDA7aT1yLmdldEVudHJ5c0xpc3QoKSxpLmxlbmd0aD4wJiZvLndyaXRlUmVwZWF0ZWRNZXNzYWdlKDEsaSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuRW50cnkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuRW50cnkucmVwZWF0ZWRGaWVsZHNfPVs0LDVdLGUuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuRW50cnkucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKHIpe3JldHVybiBUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuRW50cnkudG9PYmplY3Qocix0aGlzKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LnRvT2JqZWN0PWZ1bmN0aW9uKHIsbyl7dmFyIGk9e2Fub255bW91czplLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobywxLCExKSxjb25zdGFudDplLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobywyLCExKSxuYW1lOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sMywiIiksaW5wdXRzTGlzdDplLk1lc3NhZ2UudG9PYmplY3RMaXN0KG8uZ2V0SW5wdXRzTGlzdCgpLFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5QYXJhbS50b09iamVjdCxyKSxvdXRwdXRzTGlzdDplLk1lc3NhZ2UudG9PYmplY3RMaXN0KG8uZ2V0T3V0cHV0c0xpc3QoKSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuRW50cnkuUGFyYW0udG9PYmplY3QsciksdHlwZTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDYsMCkscGF5YWJsZTplLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQobyw3LCExKSxzdGF0ZW11dGFiaWxpdHk6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobyw4LDApfTtyZXR1cm4gciYmKGkuJGpzcGJNZXNzYWdlSW5zdGFuY2U9byksaX0pLFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihyKXt2YXIgbz1uZXcgZS5CaW5hcnlSZWFkZXIociksaT1uZXcgVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5O3JldHVybiBUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuRW50cnkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGksbyl9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24ocixvKXtmb3IoO28ubmV4dEZpZWxkKCkmJiFvLmlzRW5kR3JvdXAoKTspe3ZhciBpPW8uZ2V0RmllbGROdW1iZXIoKTtzd2l0Y2goaSl7Y2FzZSAxOnZhciBjPW8ucmVhZEJvb2woKTtyLnNldEFub255bW91cyhjKTticmVhaztjYXNlIDI6dmFyIGM9by5yZWFkQm9vbCgpO3Iuc2V0Q29uc3RhbnQoYyk7YnJlYWs7Y2FzZSAzOnZhciBjPW8ucmVhZFN0cmluZygpO3Iuc2V0TmFtZShjKTticmVhaztjYXNlIDQ6dmFyIGM9bmV3IFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5QYXJhbTtvLnJlYWRNZXNzYWdlKGMsVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LlBhcmFtLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksci5hZGRJbnB1dHMoYyk7YnJlYWs7Y2FzZSA1OnZhciBjPW5ldyBUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuRW50cnkuUGFyYW07by5yZWFkTWVzc2FnZShjLFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5QYXJhbS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLHIuYWRkT3V0cHV0cyhjKTticmVhaztjYXNlIDY6dmFyIGM9by5yZWFkRW51bSgpO3Iuc2V0VHlwZShjKTticmVhaztjYXNlIDc6dmFyIGM9by5yZWFkQm9vbCgpO3Iuc2V0UGF5YWJsZShjKTticmVhaztjYXNlIDg6dmFyIGM9by5yZWFkRW51bSgpO3Iuc2V0U3RhdGVtdXRhYmlsaXR5KGMpO2JyZWFrO2RlZmF1bHQ6by5za2lwRmllbGQoKTticmVha319cmV0dXJuIHJ9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IGUuQmluYXJ5V3JpdGVyO3JldHVybiBUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuRW50cnkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxyKSxyLmdldFJlc3VsdEJ1ZmZlcigpfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuRW50cnkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24ocixvKXt2YXIgaT12b2lkIDA7aT1yLmdldEFub255bW91cygpLGkmJm8ud3JpdGVCb29sKDEsaSksaT1yLmdldENvbnN0YW50KCksaSYmby53cml0ZUJvb2woMixpKSxpPXIuZ2V0TmFtZSgpLGkubGVuZ3RoPjAmJm8ud3JpdGVTdHJpbmcoMyxpKSxpPXIuZ2V0SW5wdXRzTGlzdCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVSZXBlYXRlZE1lc3NhZ2UoNCxpLFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5QYXJhbS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksaT1yLmdldE91dHB1dHNMaXN0KCksaS5sZW5ndGg+MCYmby53cml0ZVJlcGVhdGVkTWVzc2FnZSg1LGksVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LlBhcmFtLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxpPXIuZ2V0VHlwZSgpLGkhPT0wJiZvLndyaXRlRW51bSg2LGkpLGk9ci5nZXRQYXlhYmxlKCksaSYmby53cml0ZUJvb2woNyxpKSxpPXIuZ2V0U3RhdGVtdXRhYmlsaXR5KCksaSE9PTAmJm8ud3JpdGVFbnVtKDgsaSl9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5FbnRyeVR5cGU9e1VOS05PV05FTlRSWVRZUEU6MCxDT05TVFJVQ1RPUjoxLEZVTkNUSU9OOjIsRVZFTlQ6MyxGQUxMQkFDSzo0LFJFQ0VJVkU6NSxFUlJPUjo2fSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuRW50cnkuU3RhdGVNdXRhYmlsaXR5VHlwZT17VU5LTk9XTk1VVEFCSUxJVFlUWVBFOjAsUFVSRToxLFZJRVc6MixOT05QQVlBQkxFOjMsUEFZQUJMRTo0fSxlLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYoVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LlBhcmFtLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihyKXtyZXR1cm4gVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LlBhcmFtLnRvT2JqZWN0KHIsdGhpcyl9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5QYXJhbS50b09iamVjdD1mdW5jdGlvbihyLG8pe3ZhciBpPXtpbmRleGVkOmUuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdChvLDEsITEpLG5hbWU6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobywyLCIiKSx0eXBlOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sMywiIil9O3JldHVybiByJiYoaS4kanNwYk1lc3NhZ2VJbnN0YW5jZT1vKSxpfSksVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LlBhcmFtLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHIpe3ZhciBvPW5ldyBlLkJpbmFyeVJlYWRlcihyKSxpPW5ldyBUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuRW50cnkuUGFyYW07cmV0dXJuIFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5QYXJhbS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaSxvKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LlBhcmFtLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihyLG8pe2Zvcig7by5uZXh0RmllbGQoKSYmIW8uaXNFbmRHcm91cCgpOyl7dmFyIGk9by5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChpKXtjYXNlIDE6dmFyIGM9by5yZWFkQm9vbCgpO3Iuc2V0SW5kZXhlZChjKTticmVhaztjYXNlIDI6dmFyIGM9by5yZWFkU3RyaW5nKCk7ci5zZXROYW1lKGMpO2JyZWFrO2Nhc2UgMzp2YXIgYz1vLnJlYWRTdHJpbmcoKTtyLnNldFR5cGUoYyk7YnJlYWs7ZGVmYXVsdDpvLnNraXBGaWVsZCgpO2JyZWFrfX1yZXR1cm4gcn0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LlBhcmFtLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcj1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5QYXJhbS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLHIpLHIuZ2V0UmVzdWx0QnVmZmVyKCl9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5QYXJhbS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihyLG8pe3ZhciBpPXZvaWQgMDtpPXIuZ2V0SW5kZXhlZCgpLGkmJm8ud3JpdGVCb29sKDEsaSksaT1yLmdldE5hbWUoKSxpLmxlbmd0aD4wJiZvLndyaXRlU3RyaW5nKDIsaSksaT1yLmdldFR5cGUoKSxpLmxlbmd0aD4wJiZvLndyaXRlU3RyaW5nKDMsaSl9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5QYXJhbS5wcm90b3R5cGUuZ2V0SW5kZXhlZD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywxLCExKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LlBhcmFtLnByb3RvdHlwZS5zZXRJbmRleGVkPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQm9vbGVhbkZpZWxkKHRoaXMsMSxyKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LlBhcmFtLnByb3RvdHlwZS5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwiIil9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5QYXJhbS5wcm90b3R5cGUuc2V0TmFtZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMixyKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LlBhcmFtLnByb3RvdHlwZS5nZXRUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMywiIil9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5QYXJhbS5wcm90b3R5cGUuc2V0VHlwZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMyxyKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LnByb3RvdHlwZS5nZXRBbm9ueW1vdXM9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwhMSl9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5wcm90b3R5cGUuc2V0QW5vbnltb3VzPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQm9vbGVhbkZpZWxkKHRoaXMsMSxyKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LnByb3RvdHlwZS5nZXRDb25zdGFudD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywyLCExKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LnByb3RvdHlwZS5zZXRDb25zdGFudD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLDIscil9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5wcm90b3R5cGUuZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsIiIpfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuRW50cnkucHJvdG90eXBlLnNldE5hbWU9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDMscil9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5wcm90b3R5cGUuZ2V0SW5wdXRzTGlzdD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuRW50cnkuUGFyYW0sNCl9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5wcm90b3R5cGUuc2V0SW5wdXRzTGlzdD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNCxyKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LnByb3RvdHlwZS5hZGRJbnB1dHM9ZnVuY3Rpb24ocixvKXtyZXR1cm4gZS5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw0LHIsVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LlBhcmFtLG8pfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuRW50cnkucHJvdG90eXBlLmNsZWFySW5wdXRzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldElucHV0c0xpc3QoW10pfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuRW50cnkucHJvdG90eXBlLmdldE91dHB1dHNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5QYXJhbSw1KX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LnByb3RvdHlwZS5zZXRPdXRwdXRzTGlzdD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNSxyKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LnByb3RvdHlwZS5hZGRPdXRwdXRzPWZ1bmN0aW9uKHIsbyl7cmV0dXJuIGUuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNSxyLFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5QYXJhbSxvKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LnByb3RvdHlwZS5jbGVhck91dHB1dHNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0T3V0cHV0c0xpc3QoW10pfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuRW50cnkucHJvdG90eXBlLmdldFR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw2LDApfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuRW50cnkucHJvdG90eXBlLnNldFR5cGU9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNFbnVtRmllbGQodGhpcyw2LHIpfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkuRW50cnkucHJvdG90eXBlLmdldFBheWFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsNywhMSl9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5wcm90b3R5cGUuc2V0UGF5YWJsZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLDcscil9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeS5wcm90b3R5cGUuZ2V0U3RhdGVtdXRhYmlsaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsOCwwKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LnByb3RvdHlwZS5zZXRTdGF0ZW11dGFiaWxpdHk9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNFbnVtRmllbGQodGhpcyw4LHIpfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkucHJvdG90eXBlLmdldEVudHJ5c0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLkVudHJ5LDEpfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5BQkkucHJvdG90eXBlLnNldEVudHJ5c0xpc3Q9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDEscil9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5wcm90b3R5cGUuYWRkRW50cnlzPWZ1bmN0aW9uKHIsbyl7cmV0dXJuIGUuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMSxyLFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSS5FbnRyeSxvKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuQUJJLnByb3RvdHlwZS5jbGVhckVudHJ5c0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRFbnRyeXNMaXN0KFtdKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QucHJvdG90eXBlLmdldE9yaWdpbkFkZHJlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLCIiKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QucHJvdG90eXBlLmdldE9yaWdpbkFkZHJlc3NfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRPcmlnaW5BZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5wcm90b3R5cGUuZ2V0T3JpZ2luQWRkcmVzc19hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRPcmlnaW5BZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5wcm90b3R5cGUuc2V0T3JpZ2luQWRkcmVzcz1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywxLHIpfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5wcm90b3R5cGUuZ2V0Q29udHJhY3RBZGRyZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwiIil9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LnByb3RvdHlwZS5nZXRDb250cmFjdEFkZHJlc3NfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRDb250cmFjdEFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LnByb3RvdHlwZS5nZXRDb250cmFjdEFkZHJlc3NfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0Q29udHJhY3RBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5wcm90b3R5cGUuc2V0Q29udHJhY3RBZGRyZXNzPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDIscil9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LnByb3RvdHlwZS5nZXRBYmk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LkFCSSwzKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QucHJvdG90eXBlLnNldEFiaT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDMscil9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LnByb3RvdHlwZS5jbGVhckFiaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEFiaSh2b2lkIDApfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5wcm90b3R5cGUuaGFzQWJpPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDMpIT1udWxsfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5wcm90b3R5cGUuZ2V0Qnl0ZWNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw0LCIiKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QucHJvdG90eXBlLmdldEJ5dGVjb2RlX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0Qnl0ZWNvZGUoKSl9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LnByb3RvdHlwZS5nZXRCeXRlY29kZV9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRCeXRlY29kZSgpKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QucHJvdG90eXBlLnNldEJ5dGVjb2RlPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDQscil9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LnByb3RvdHlwZS5nZXRDYWxsVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw1LDApfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5wcm90b3R5cGUuc2V0Q2FsbFZhbHVlPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcyw1LHIpfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5wcm90b3R5cGUuZ2V0Q29uc3VtZVVzZXJSZXNvdXJjZVBlcmNlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw2LDApfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5wcm90b3R5cGUuc2V0Q29uc3VtZVVzZXJSZXNvdXJjZVBlcmNlbnQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDYscil9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LnByb3RvdHlwZS5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNywiIil9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LnByb3RvdHlwZS5zZXROYW1lPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcyw3LHIpfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5wcm90b3R5cGUuZ2V0T3JpZ2luRW5lcmd5TGltaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw4LDApfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5wcm90b3R5cGUuc2V0T3JpZ2luRW5lcmd5TGltaXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDgscil9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LnByb3RvdHlwZS5nZXRDb2RlSGFzaD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDksIiIpfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5wcm90b3R5cGUuZ2V0Q29kZUhhc2hfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRDb2RlSGFzaCgpKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QucHJvdG90eXBlLmdldENvZGVIYXNoX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldENvZGVIYXNoKCkpfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5wcm90b3R5cGUuc2V0Q29kZUhhc2g9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsOSxyKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QucHJvdG90eXBlLmdldFRyeEhhc2g9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxMCwiIil9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LnByb3RvdHlwZS5nZXRUcnhIYXNoX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0VHJ4SGFzaCgpKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QucHJvdG90eXBlLmdldFRyeEhhc2hfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0VHJ4SGFzaCgpKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QucHJvdG90eXBlLnNldFRyeEhhc2g9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMTAscil9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LnByb3RvdHlwZS5nZXRWZXJzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMTEsMCl9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LnByb3RvdHlwZS5zZXRWZXJzaW9uPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywxMSxyKX0sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5Db250cmFjdFN0YXRlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihyKXtyZXR1cm4gVHJvbldlYlByb3RvLkNvbnRyYWN0U3RhdGUudG9PYmplY3Qocix0aGlzKX0sVHJvbldlYlByb3RvLkNvbnRyYWN0U3RhdGUudG9PYmplY3Q9ZnVuY3Rpb24ocixvKXt2YXIgaT17ZW5lcmd5VXNhZ2U6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobywxLDApLGVuZXJneUZhY3RvcjplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDIsMCksdXBkYXRlQ3ljbGU6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobywzLDApfTtyZXR1cm4gciYmKGkuJGpzcGJNZXNzYWdlSW5zdGFuY2U9byksaX0pLFRyb25XZWJQcm90by5Db250cmFjdFN0YXRlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHIpe3ZhciBvPW5ldyBlLkJpbmFyeVJlYWRlcihyKSxpPW5ldyBUcm9uV2ViUHJvdG8uQ29udHJhY3RTdGF0ZTtyZXR1cm4gVHJvbldlYlByb3RvLkNvbnRyYWN0U3RhdGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGksbyl9LFRyb25XZWJQcm90by5Db250cmFjdFN0YXRlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihyLG8pe2Zvcig7by5uZXh0RmllbGQoKSYmIW8uaXNFbmRHcm91cCgpOyl7dmFyIGk9by5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChpKXtjYXNlIDE6dmFyIGM9by5yZWFkSW50NjQoKTtyLnNldEVuZXJneVVzYWdlKGMpO2JyZWFrO2Nhc2UgMjp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0RW5lcmd5RmFjdG9yKGMpO2JyZWFrO2Nhc2UgMzp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0VXBkYXRlQ3ljbGUoYyk7YnJlYWs7ZGVmYXVsdDpvLnNraXBGaWVsZCgpO2JyZWFrfX1yZXR1cm4gcn0sVHJvbldlYlByb3RvLkNvbnRyYWN0U3RhdGUucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciByPW5ldyBlLkJpbmFyeVdyaXRlcjtyZXR1cm4gVHJvbldlYlByb3RvLkNvbnRyYWN0U3RhdGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxyKSxyLmdldFJlc3VsdEJ1ZmZlcigpfSxUcm9uV2ViUHJvdG8uQ29udHJhY3RTdGF0ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihyLG8pe3ZhciBpPXZvaWQgMDtpPXIuZ2V0RW5lcmd5VXNhZ2UoKSxpIT09MCYmby53cml0ZUludDY0KDEsaSksaT1yLmdldEVuZXJneUZhY3RvcigpLGkhPT0wJiZvLndyaXRlSW50NjQoMixpKSxpPXIuZ2V0VXBkYXRlQ3ljbGUoKSxpIT09MCYmby53cml0ZUludDY0KDMsaSl9LFRyb25XZWJQcm90by5Db250cmFjdFN0YXRlLnByb3RvdHlwZS5nZXRFbmVyZ3lVc2FnZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsMCl9LFRyb25XZWJQcm90by5Db250cmFjdFN0YXRlLnByb3RvdHlwZS5zZXRFbmVyZ3lVc2FnZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMSxyKX0sVHJvbldlYlByb3RvLkNvbnRyYWN0U3RhdGUucHJvdG90eXBlLmdldEVuZXJneUZhY3Rvcj1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsMCl9LFRyb25XZWJQcm90by5Db250cmFjdFN0YXRlLnByb3RvdHlwZS5zZXRFbmVyZ3lGYWN0b3I9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDIscil9LFRyb25XZWJQcm90by5Db250cmFjdFN0YXRlLnByb3RvdHlwZS5nZXRVcGRhdGVDeWNsZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsMCl9LFRyb25XZWJQcm90by5Db250cmFjdFN0YXRlLnByb3RvdHlwZS5zZXRVcGRhdGVDeWNsZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMyxyKX0sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5DcmVhdGVTbWFydENvbnRyYWN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihyKXtyZXR1cm4gVHJvbldlYlByb3RvLkNyZWF0ZVNtYXJ0Q29udHJhY3QudG9PYmplY3Qocix0aGlzKX0sVHJvbldlYlByb3RvLkNyZWF0ZVNtYXJ0Q29udHJhY3QudG9PYmplY3Q9ZnVuY3Rpb24ocixvKXt2YXIgaSxjPXtvd25lckFkZHJlc3M6by5nZXRPd25lckFkZHJlc3NfYXNCNjQoKSxuZXdDb250cmFjdDooaT1vLmdldE5ld0NvbnRyYWN0KCkpJiZUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC50b09iamVjdChyLGkpLGNhbGxUb2tlblZhbHVlOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sMywwKSx0b2tlbklkOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sNCwwKX07cmV0dXJuIHImJihjLiRqc3BiTWVzc2FnZUluc3RhbmNlPW8pLGN9KSxUcm9uV2ViUHJvdG8uQ3JlYXRlU21hcnRDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihyKXt2YXIgbz1uZXcgZS5CaW5hcnlSZWFkZXIociksaT1uZXcgVHJvbldlYlByb3RvLkNyZWF0ZVNtYXJ0Q29udHJhY3Q7cmV0dXJuIFRyb25XZWJQcm90by5DcmVhdGVTbWFydENvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihpLG8pfSxUcm9uV2ViUHJvdG8uQ3JlYXRlU21hcnRDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24ocixvKXtmb3IoO28ubmV4dEZpZWxkKCkmJiFvLmlzRW5kR3JvdXAoKTspe3ZhciBpPW8uZ2V0RmllbGROdW1iZXIoKTtzd2l0Y2goaSl7Y2FzZSAxOnZhciBjPW8ucmVhZEJ5dGVzKCk7ci5zZXRPd25lckFkZHJlc3MoYyk7YnJlYWs7Y2FzZSAyOnZhciBjPW5ldyBUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdDtvLnJlYWRNZXNzYWdlKGMsVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxyLnNldE5ld0NvbnRyYWN0KGMpO2JyZWFrO2Nhc2UgMzp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0Q2FsbFRva2VuVmFsdWUoYyk7YnJlYWs7Y2FzZSA0OnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRUb2tlbklkKGMpO2JyZWFrO2RlZmF1bHQ6by5za2lwRmllbGQoKTticmVha319cmV0dXJuIHJ9LFRyb25XZWJQcm90by5DcmVhdGVTbWFydENvbnRyYWN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcj1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIFRyb25XZWJQcm90by5DcmVhdGVTbWFydENvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsciksci5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLkNyZWF0ZVNtYXJ0Q29udHJhY3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24ocixvKXt2YXIgaT12b2lkIDA7aT1yLmdldE93bmVyQWRkcmVzc19hc1U4KCksaS5sZW5ndGg+MCYmby53cml0ZUJ5dGVzKDEsaSksaT1yLmdldE5ld0NvbnRyYWN0KCksaSE9bnVsbCYmby53cml0ZU1lc3NhZ2UoMixpLFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxpPXIuZ2V0Q2FsbFRva2VuVmFsdWUoKSxpIT09MCYmby53cml0ZUludDY0KDMsaSksaT1yLmdldFRva2VuSWQoKSxpIT09MCYmby53cml0ZUludDY0KDQsaSl9LFRyb25XZWJQcm90by5DcmVhdGVTbWFydENvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLCIiKX0sVHJvbldlYlByb3RvLkNyZWF0ZVNtYXJ0Q29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLkNyZWF0ZVNtYXJ0Q29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5DcmVhdGVTbWFydENvbnRyYWN0LnByb3RvdHlwZS5zZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMSxyKX0sVHJvbldlYlByb3RvLkNyZWF0ZVNtYXJ0Q29udHJhY3QucHJvdG90eXBlLmdldE5ld0NvbnRyYWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdCwyKX0sVHJvbldlYlByb3RvLkNyZWF0ZVNtYXJ0Q29udHJhY3QucHJvdG90eXBlLnNldE5ld0NvbnRyYWN0PWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMixyKX0sVHJvbldlYlByb3RvLkNyZWF0ZVNtYXJ0Q29udHJhY3QucHJvdG90eXBlLmNsZWFyTmV3Q29udHJhY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXROZXdDb250cmFjdCh2b2lkIDApfSxUcm9uV2ViUHJvdG8uQ3JlYXRlU21hcnRDb250cmFjdC5wcm90b3R5cGUuaGFzTmV3Q29udHJhY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMikhPW51bGx9LFRyb25XZWJQcm90by5DcmVhdGVTbWFydENvbnRyYWN0LnByb3RvdHlwZS5nZXRDYWxsVG9rZW5WYWx1ZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsMCl9LFRyb25XZWJQcm90by5DcmVhdGVTbWFydENvbnRyYWN0LnByb3RvdHlwZS5zZXRDYWxsVG9rZW5WYWx1ZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMyxyKX0sVHJvbldlYlByb3RvLkNyZWF0ZVNtYXJ0Q29udHJhY3QucHJvdG90eXBlLmdldFRva2VuSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw0LDApfSxUcm9uV2ViUHJvdG8uQ3JlYXRlU21hcnRDb250cmFjdC5wcm90b3R5cGUuc2V0VG9rZW5JZD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsNCxyKX0sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5UcmlnZ2VyU21hcnRDb250cmFjdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocil7cmV0dXJuIFRyb25XZWJQcm90by5UcmlnZ2VyU21hcnRDb250cmFjdC50b09iamVjdChyLHRoaXMpfSxUcm9uV2ViUHJvdG8uVHJpZ2dlclNtYXJ0Q29udHJhY3QudG9PYmplY3Q9ZnVuY3Rpb24ocixvKXt2YXIgaT17b3duZXJBZGRyZXNzOm8uZ2V0T3duZXJBZGRyZXNzX2FzQjY0KCksY29udHJhY3RBZGRyZXNzOm8uZ2V0Q29udHJhY3RBZGRyZXNzX2FzQjY0KCksY2FsbFZhbHVlOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sMywwKSxkYXRhOm8uZ2V0RGF0YV9hc0I2NCgpLGNhbGxUb2tlblZhbHVlOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sNSwwKSx0b2tlbklkOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KG8sNiwwKX07cmV0dXJuIHImJihpLiRqc3BiTWVzc2FnZUluc3RhbmNlPW8pLGl9KSxUcm9uV2ViUHJvdG8uVHJpZ2dlclNtYXJ0Q29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocil7dmFyIG89bmV3IGUuQmluYXJ5UmVhZGVyKHIpLGk9bmV3IFRyb25XZWJQcm90by5UcmlnZ2VyU21hcnRDb250cmFjdDtyZXR1cm4gVHJvbldlYlByb3RvLlRyaWdnZXJTbWFydENvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihpLG8pfSxUcm9uV2ViUHJvdG8uVHJpZ2dlclNtYXJ0Q29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHIsbyl7Zm9yKDtvLm5leHRGaWVsZCgpJiYhby5pc0VuZEdyb3VwKCk7KXt2YXIgaT1vLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKGkpe2Nhc2UgMTp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0T3duZXJBZGRyZXNzKGMpO2JyZWFrO2Nhc2UgMjp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0Q29udHJhY3RBZGRyZXNzKGMpO2JyZWFrO2Nhc2UgMzp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0Q2FsbFZhbHVlKGMpO2JyZWFrO2Nhc2UgNDp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0RGF0YShjKTticmVhaztjYXNlIDU6dmFyIGM9by5yZWFkSW50NjQoKTtyLnNldENhbGxUb2tlblZhbHVlKGMpO2JyZWFrO2Nhc2UgNjp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0VG9rZW5JZChjKTticmVhaztkZWZhdWx0Om8uc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiByfSxUcm9uV2ViUHJvdG8uVHJpZ2dlclNtYXJ0Q29udHJhY3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciByPW5ldyBlLkJpbmFyeVdyaXRlcjtyZXR1cm4gVHJvbldlYlByb3RvLlRyaWdnZXJTbWFydENvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsciksci5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLlRyaWdnZXJTbWFydENvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHIsbyl7dmFyIGk9dm9pZCAwO2k9ci5nZXRPd25lckFkZHJlc3NfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcygxLGkpLGk9ci5nZXRDb250cmFjdEFkZHJlc3NfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcygyLGkpLGk9ci5nZXRDYWxsVmFsdWUoKSxpIT09MCYmby53cml0ZUludDY0KDMsaSksaT1yLmdldERhdGFfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcyg0LGkpLGk9ci5nZXRDYWxsVG9rZW5WYWx1ZSgpLGkhPT0wJiZvLndyaXRlSW50NjQoNSxpKSxpPXIuZ2V0VG9rZW5JZCgpLGkhPT0wJiZvLndyaXRlSW50NjQoNixpKX0sVHJvbldlYlByb3RvLlRyaWdnZXJTbWFydENvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLCIiKX0sVHJvbldlYlByb3RvLlRyaWdnZXJTbWFydENvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3NfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5UcmlnZ2VyU21hcnRDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlRyaWdnZXJTbWFydENvbnRyYWN0LnByb3RvdHlwZS5zZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMSxyKX0sVHJvbldlYlByb3RvLlRyaWdnZXJTbWFydENvbnRyYWN0LnByb3RvdHlwZS5nZXRDb250cmFjdEFkZHJlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLCIiKX0sVHJvbldlYlByb3RvLlRyaWdnZXJTbWFydENvbnRyYWN0LnByb3RvdHlwZS5nZXRDb250cmFjdEFkZHJlc3NfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRDb250cmFjdEFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5UcmlnZ2VyU21hcnRDb250cmFjdC5wcm90b3R5cGUuZ2V0Q29udHJhY3RBZGRyZXNzX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldENvbnRyYWN0QWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlRyaWdnZXJTbWFydENvbnRyYWN0LnByb3RvdHlwZS5zZXRDb250cmFjdEFkZHJlc3M9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMixyKX0sVHJvbldlYlByb3RvLlRyaWdnZXJTbWFydENvbnRyYWN0LnByb3RvdHlwZS5nZXRDYWxsVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywzLDApfSxUcm9uV2ViUHJvdG8uVHJpZ2dlclNtYXJ0Q29udHJhY3QucHJvdG90eXBlLnNldENhbGxWYWx1ZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMyxyKX0sVHJvbldlYlByb3RvLlRyaWdnZXJTbWFydENvbnRyYWN0LnByb3RvdHlwZS5nZXREYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNCwiIil9LFRyb25XZWJQcm90by5UcmlnZ2VyU21hcnRDb250cmFjdC5wcm90b3R5cGUuZ2V0RGF0YV9hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldERhdGEoKSl9LFRyb25XZWJQcm90by5UcmlnZ2VyU21hcnRDb250cmFjdC5wcm90b3R5cGUuZ2V0RGF0YV9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXREYXRhKCkpfSxUcm9uV2ViUHJvdG8uVHJpZ2dlclNtYXJ0Q29udHJhY3QucHJvdG90eXBlLnNldERhdGE9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsNCxyKX0sVHJvbldlYlByb3RvLlRyaWdnZXJTbWFydENvbnRyYWN0LnByb3RvdHlwZS5nZXRDYWxsVG9rZW5WYWx1ZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDUsMCl9LFRyb25XZWJQcm90by5UcmlnZ2VyU21hcnRDb250cmFjdC5wcm90b3R5cGUuc2V0Q2FsbFRva2VuVmFsdWU9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDUscil9LFRyb25XZWJQcm90by5UcmlnZ2VyU21hcnRDb250cmFjdC5wcm90b3R5cGUuZ2V0VG9rZW5JZD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDYsMCl9LFRyb25XZWJQcm90by5UcmlnZ2VyU21hcnRDb250cmFjdC5wcm90b3R5cGUuc2V0VG9rZW5JZD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsNixyKX0sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5DbGVhckFCSUNvbnRyYWN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihyKXtyZXR1cm4gVHJvbldlYlByb3RvLkNsZWFyQUJJQ29udHJhY3QudG9PYmplY3Qocix0aGlzKX0sVHJvbldlYlByb3RvLkNsZWFyQUJJQ29udHJhY3QudG9PYmplY3Q9ZnVuY3Rpb24ocixvKXt2YXIgaT17b3duZXJBZGRyZXNzOm8uZ2V0T3duZXJBZGRyZXNzX2FzQjY0KCksY29udHJhY3RBZGRyZXNzOm8uZ2V0Q29udHJhY3RBZGRyZXNzX2FzQjY0KCl9O3JldHVybiByJiYoaS4kanNwYk1lc3NhZ2VJbnN0YW5jZT1vKSxpfSksVHJvbldlYlByb3RvLkNsZWFyQUJJQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocil7dmFyIG89bmV3IGUuQmluYXJ5UmVhZGVyKHIpLGk9bmV3IFRyb25XZWJQcm90by5DbGVhckFCSUNvbnRyYWN0O3JldHVybiBUcm9uV2ViUHJvdG8uQ2xlYXJBQklDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaSxvKX0sVHJvbldlYlByb3RvLkNsZWFyQUJJQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHIsbyl7Zm9yKDtvLm5leHRGaWVsZCgpJiYhby5pc0VuZEdyb3VwKCk7KXt2YXIgaT1vLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKGkpe2Nhc2UgMTp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0T3duZXJBZGRyZXNzKGMpO2JyZWFrO2Nhc2UgMjp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0Q29udHJhY3RBZGRyZXNzKGMpO2JyZWFrO2RlZmF1bHQ6by5za2lwRmllbGQoKTticmVha319cmV0dXJuIHJ9LFRyb25XZWJQcm90by5DbGVhckFCSUNvbnRyYWN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcj1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIFRyb25XZWJQcm90by5DbGVhckFCSUNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsciksci5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLkNsZWFyQUJJQ29udHJhY3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24ocixvKXt2YXIgaT12b2lkIDA7aT1yLmdldE93bmVyQWRkcmVzc19hc1U4KCksaS5sZW5ndGg+MCYmby53cml0ZUJ5dGVzKDEsaSksaT1yLmdldENvbnRyYWN0QWRkcmVzc19hc1U4KCksaS5sZW5ndGg+MCYmby53cml0ZUJ5dGVzKDIsaSl9LFRyb25XZWJQcm90by5DbGVhckFCSUNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLCIiKX0sVHJvbldlYlByb3RvLkNsZWFyQUJJQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLkNsZWFyQUJJQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5DbGVhckFCSUNvbnRyYWN0LnByb3RvdHlwZS5zZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMSxyKX0sVHJvbldlYlByb3RvLkNsZWFyQUJJQ29udHJhY3QucHJvdG90eXBlLmdldENvbnRyYWN0QWRkcmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsIiIpfSxUcm9uV2ViUHJvdG8uQ2xlYXJBQklDb250cmFjdC5wcm90b3R5cGUuZ2V0Q29udHJhY3RBZGRyZXNzX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0Q29udHJhY3RBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uQ2xlYXJBQklDb250cmFjdC5wcm90b3R5cGUuZ2V0Q29udHJhY3RBZGRyZXNzX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldENvbnRyYWN0QWRkcmVzcygpKX0sVHJvbldlYlByb3RvLkNsZWFyQUJJQ29udHJhY3QucHJvdG90eXBlLnNldENvbnRyYWN0QWRkcmVzcz1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywyLHIpfSxlLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYoVHJvbldlYlByb3RvLlVwZGF0ZVNldHRpbmdDb250cmFjdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocil7cmV0dXJuIFRyb25XZWJQcm90by5VcGRhdGVTZXR0aW5nQ29udHJhY3QudG9PYmplY3Qocix0aGlzKX0sVHJvbldlYlByb3RvLlVwZGF0ZVNldHRpbmdDb250cmFjdC50b09iamVjdD1mdW5jdGlvbihyLG8pe3ZhciBpPXtvd25lckFkZHJlc3M6by5nZXRPd25lckFkZHJlc3NfYXNCNjQoKSxjb250cmFjdEFkZHJlc3M6by5nZXRDb250cmFjdEFkZHJlc3NfYXNCNjQoKSxjb25zdW1lVXNlclJlc291cmNlUGVyY2VudDplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDMsMCl9O3JldHVybiByJiYoaS4kanNwYk1lc3NhZ2VJbnN0YW5jZT1vKSxpfSksVHJvbldlYlByb3RvLlVwZGF0ZVNldHRpbmdDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihyKXt2YXIgbz1uZXcgZS5CaW5hcnlSZWFkZXIociksaT1uZXcgVHJvbldlYlByb3RvLlVwZGF0ZVNldHRpbmdDb250cmFjdDtyZXR1cm4gVHJvbldlYlByb3RvLlVwZGF0ZVNldHRpbmdDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaSxvKX0sVHJvbldlYlByb3RvLlVwZGF0ZVNldHRpbmdDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24ocixvKXtmb3IoO28ubmV4dEZpZWxkKCkmJiFvLmlzRW5kR3JvdXAoKTspe3ZhciBpPW8uZ2V0RmllbGROdW1iZXIoKTtzd2l0Y2goaSl7Y2FzZSAxOnZhciBjPW8ucmVhZEJ5dGVzKCk7ci5zZXRPd25lckFkZHJlc3MoYyk7YnJlYWs7Y2FzZSAyOnZhciBjPW8ucmVhZEJ5dGVzKCk7ci5zZXRDb250cmFjdEFkZHJlc3MoYyk7YnJlYWs7Y2FzZSAzOnZhciBjPW8ucmVhZEludDY0KCk7ci5zZXRDb25zdW1lVXNlclJlc291cmNlUGVyY2VudChjKTticmVhaztkZWZhdWx0Om8uc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiByfSxUcm9uV2ViUHJvdG8uVXBkYXRlU2V0dGluZ0NvbnRyYWN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcj1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIFRyb25XZWJQcm90by5VcGRhdGVTZXR0aW5nQ29udHJhY3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxyKSxyLmdldFJlc3VsdEJ1ZmZlcigpfSxUcm9uV2ViUHJvdG8uVXBkYXRlU2V0dGluZ0NvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHIsbyl7dmFyIGk9dm9pZCAwO2k9ci5nZXRPd25lckFkZHJlc3NfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcygxLGkpLGk9ci5nZXRDb250cmFjdEFkZHJlc3NfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcygyLGkpLGk9ci5nZXRDb25zdW1lVXNlclJlc291cmNlUGVyY2VudCgpLGkhPT0wJiZvLndyaXRlSW50NjQoMyxpKX0sVHJvbldlYlByb3RvLlVwZGF0ZVNldHRpbmdDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwiIil9LFRyb25XZWJQcm90by5VcGRhdGVTZXR0aW5nQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlVwZGF0ZVNldHRpbmdDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlVwZGF0ZVNldHRpbmdDb250cmFjdC5wcm90b3R5cGUuc2V0T3duZXJBZGRyZXNzPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDEscil9LFRyb25XZWJQcm90by5VcGRhdGVTZXR0aW5nQ29udHJhY3QucHJvdG90eXBlLmdldENvbnRyYWN0QWRkcmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsIiIpfSxUcm9uV2ViUHJvdG8uVXBkYXRlU2V0dGluZ0NvbnRyYWN0LnByb3RvdHlwZS5nZXRDb250cmFjdEFkZHJlc3NfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRDb250cmFjdEFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5VcGRhdGVTZXR0aW5nQ29udHJhY3QucHJvdG90eXBlLmdldENvbnRyYWN0QWRkcmVzc19hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRDb250cmFjdEFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5VcGRhdGVTZXR0aW5nQ29udHJhY3QucHJvdG90eXBlLnNldENvbnRyYWN0QWRkcmVzcz1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywyLHIpfSxUcm9uV2ViUHJvdG8uVXBkYXRlU2V0dGluZ0NvbnRyYWN0LnByb3RvdHlwZS5nZXRDb25zdW1lVXNlclJlc291cmNlUGVyY2VudD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsMCl9LFRyb25XZWJQcm90by5VcGRhdGVTZXR0aW5nQ29udHJhY3QucHJvdG90eXBlLnNldENvbnN1bWVVc2VyUmVzb3VyY2VQZXJjZW50PWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywzLHIpfSxlLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYoVHJvbldlYlByb3RvLlVwZGF0ZUVuZXJneUxpbWl0Q29udHJhY3QucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKHIpe3JldHVybiBUcm9uV2ViUHJvdG8uVXBkYXRlRW5lcmd5TGltaXRDb250cmFjdC50b09iamVjdChyLHRoaXMpfSxUcm9uV2ViUHJvdG8uVXBkYXRlRW5lcmd5TGltaXRDb250cmFjdC50b09iamVjdD1mdW5jdGlvbihyLG8pe3ZhciBpPXtvd25lckFkZHJlc3M6by5nZXRPd25lckFkZHJlc3NfYXNCNjQoKSxjb250cmFjdEFkZHJlc3M6by5nZXRDb250cmFjdEFkZHJlc3NfYXNCNjQoKSxvcmlnaW5FbmVyZ3lMaW1pdDplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChvLDMsMCl9O3JldHVybiByJiYoaS4kanNwYk1lc3NhZ2VJbnN0YW5jZT1vKSxpfSksVHJvbldlYlByb3RvLlVwZGF0ZUVuZXJneUxpbWl0Q29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocil7dmFyIG89bmV3IGUuQmluYXJ5UmVhZGVyKHIpLGk9bmV3IFRyb25XZWJQcm90by5VcGRhdGVFbmVyZ3lMaW1pdENvbnRyYWN0O3JldHVybiBUcm9uV2ViUHJvdG8uVXBkYXRlRW5lcmd5TGltaXRDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaSxvKX0sVHJvbldlYlByb3RvLlVwZGF0ZUVuZXJneUxpbWl0Q29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHIsbyl7Zm9yKDtvLm5leHRGaWVsZCgpJiYhby5pc0VuZEdyb3VwKCk7KXt2YXIgaT1vLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKGkpe2Nhc2UgMTp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0T3duZXJBZGRyZXNzKGMpO2JyZWFrO2Nhc2UgMjp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0Q29udHJhY3RBZGRyZXNzKGMpO2JyZWFrO2Nhc2UgMzp2YXIgYz1vLnJlYWRJbnQ2NCgpO3Iuc2V0T3JpZ2luRW5lcmd5TGltaXQoYyk7YnJlYWs7ZGVmYXVsdDpvLnNraXBGaWVsZCgpO2JyZWFrfX1yZXR1cm4gcn0sVHJvbldlYlByb3RvLlVwZGF0ZUVuZXJneUxpbWl0Q29udHJhY3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciByPW5ldyBlLkJpbmFyeVdyaXRlcjtyZXR1cm4gVHJvbldlYlByb3RvLlVwZGF0ZUVuZXJneUxpbWl0Q29udHJhY3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxyKSxyLmdldFJlc3VsdEJ1ZmZlcigpfSxUcm9uV2ViUHJvdG8uVXBkYXRlRW5lcmd5TGltaXRDb250cmFjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihyLG8pe3ZhciBpPXZvaWQgMDtpPXIuZ2V0T3duZXJBZGRyZXNzX2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlQnl0ZXMoMSxpKSxpPXIuZ2V0Q29udHJhY3RBZGRyZXNzX2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlQnl0ZXMoMixpKSxpPXIuZ2V0T3JpZ2luRW5lcmd5TGltaXQoKSxpIT09MCYmby53cml0ZUludDY0KDMsaSl9LFRyb25XZWJQcm90by5VcGRhdGVFbmVyZ3lMaW1pdENvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLCIiKX0sVHJvbldlYlByb3RvLlVwZGF0ZUVuZXJneUxpbWl0Q29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlVwZGF0ZUVuZXJneUxpbWl0Q29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5VcGRhdGVFbmVyZ3lMaW1pdENvbnRyYWN0LnByb3RvdHlwZS5zZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMSxyKX0sVHJvbldlYlByb3RvLlVwZGF0ZUVuZXJneUxpbWl0Q29udHJhY3QucHJvdG90eXBlLmdldENvbnRyYWN0QWRkcmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsIiIpfSxUcm9uV2ViUHJvdG8uVXBkYXRlRW5lcmd5TGltaXRDb250cmFjdC5wcm90b3R5cGUuZ2V0Q29udHJhY3RBZGRyZXNzX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0Q29udHJhY3RBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uVXBkYXRlRW5lcmd5TGltaXRDb250cmFjdC5wcm90b3R5cGUuZ2V0Q29udHJhY3RBZGRyZXNzX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldENvbnRyYWN0QWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlVwZGF0ZUVuZXJneUxpbWl0Q29udHJhY3QucHJvdG90eXBlLnNldENvbnRyYWN0QWRkcmVzcz1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywyLHIpfSxUcm9uV2ViUHJvdG8uVXBkYXRlRW5lcmd5TGltaXRDb250cmFjdC5wcm90b3R5cGUuZ2V0T3JpZ2luRW5lcmd5TGltaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywzLDApfSxUcm9uV2ViUHJvdG8uVXBkYXRlRW5lcmd5TGltaXRDb250cmFjdC5wcm90b3R5cGUuc2V0T3JpZ2luRW5lcmd5TGltaXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDMscil9LGUuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdERhdGFXcmFwcGVyLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihyKXtyZXR1cm4gVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3REYXRhV3JhcHBlci50b09iamVjdChyLHRoaXMpfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdERhdGFXcmFwcGVyLnRvT2JqZWN0PWZ1bmN0aW9uKHIsbyl7dmFyIGksYz17c21hcnRDb250cmFjdDooaT1vLmdldFNtYXJ0Q29udHJhY3QoKSkmJlRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LnRvT2JqZWN0KHIsaSkscnVudGltZWNvZGU6by5nZXRSdW50aW1lY29kZV9hc0I2NCgpLGNvbnRyYWN0U3RhdGU6KGk9by5nZXRDb250cmFjdFN0YXRlKCkpJiZUcm9uV2ViUHJvdG8uQ29udHJhY3RTdGF0ZS50b09iamVjdChyLGkpfTtyZXR1cm4gciYmKGMuJGpzcGJNZXNzYWdlSW5zdGFuY2U9byksY30pLFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0RGF0YVdyYXBwZXIuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocil7dmFyIG89bmV3IGUuQmluYXJ5UmVhZGVyKHIpLGk9bmV3IFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0RGF0YVdyYXBwZXI7cmV0dXJuIFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0RGF0YVdyYXBwZXIuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGksbyl9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0RGF0YVdyYXBwZXIuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHIsbyl7Zm9yKDtvLm5leHRGaWVsZCgpJiYhby5pc0VuZEdyb3VwKCk7KXt2YXIgaT1vLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKGkpe2Nhc2UgMTp2YXIgYz1uZXcgVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3Q7by5yZWFkTWVzc2FnZShjLFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksci5zZXRTbWFydENvbnRyYWN0KGMpO2JyZWFrO2Nhc2UgMjp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0UnVudGltZWNvZGUoYyk7YnJlYWs7Y2FzZSAzOnZhciBjPW5ldyBUcm9uV2ViUHJvdG8uQ29udHJhY3RTdGF0ZTtvLnJlYWRNZXNzYWdlKGMsVHJvbldlYlByb3RvLkNvbnRyYWN0U3RhdGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxyLnNldENvbnRyYWN0U3RhdGUoYyk7YnJlYWs7ZGVmYXVsdDpvLnNraXBGaWVsZCgpO2JyZWFrfX1yZXR1cm4gcn0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3REYXRhV3JhcHBlci5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IGUuQmluYXJ5V3JpdGVyO3JldHVybiBUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdERhdGFXcmFwcGVyLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsciksci5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3REYXRhV3JhcHBlci5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihyLG8pe3ZhciBpPXZvaWQgMDtpPXIuZ2V0U21hcnRDb250cmFjdCgpLGkhPW51bGwmJm8ud3JpdGVNZXNzYWdlKDEsaSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksaT1yLmdldFJ1bnRpbWVjb2RlX2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlQnl0ZXMoMixpKSxpPXIuZ2V0Q29udHJhY3RTdGF0ZSgpLGkhPW51bGwmJm8ud3JpdGVNZXNzYWdlKDMsaSxUcm9uV2ViUHJvdG8uQ29udHJhY3RTdGF0ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0RGF0YVdyYXBwZXIucHJvdG90eXBlLmdldFNtYXJ0Q29udHJhY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0LDEpfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdERhdGFXcmFwcGVyLnByb3RvdHlwZS5zZXRTbWFydENvbnRyYWN0PWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMSxyKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3REYXRhV3JhcHBlci5wcm90b3R5cGUuY2xlYXJTbWFydENvbnRyYWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0U21hcnRDb250cmFjdCh2b2lkIDApfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdERhdGFXcmFwcGVyLnByb3RvdHlwZS5oYXNTbWFydENvbnRyYWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpIT1udWxsfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdERhdGFXcmFwcGVyLnByb3RvdHlwZS5nZXRSdW50aW1lY29kZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsIiIpfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdERhdGFXcmFwcGVyLnByb3RvdHlwZS5nZXRSdW50aW1lY29kZV9hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldFJ1bnRpbWVjb2RlKCkpfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdERhdGFXcmFwcGVyLnByb3RvdHlwZS5nZXRSdW50aW1lY29kZV9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRSdW50aW1lY29kZSgpKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3REYXRhV3JhcHBlci5wcm90b3R5cGUuc2V0UnVudGltZWNvZGU9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMixyKX0sVHJvbldlYlByb3RvLlNtYXJ0Q29udHJhY3REYXRhV3JhcHBlci5wcm90b3R5cGUuZ2V0Q29udHJhY3RTdGF0ZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMsVHJvbldlYlByb3RvLkNvbnRyYWN0U3RhdGUsMyl9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0RGF0YVdyYXBwZXIucHJvdG90eXBlLnNldENvbnRyYWN0U3RhdGU9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywzLHIpfSxUcm9uV2ViUHJvdG8uU21hcnRDb250cmFjdERhdGFXcmFwcGVyLnByb3RvdHlwZS5jbGVhckNvbnRyYWN0U3RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRDb250cmFjdFN0YXRlKHZvaWQgMCl9LFRyb25XZWJQcm90by5TbWFydENvbnRyYWN0RGF0YVdyYXBwZXIucHJvdG90eXBlLmhhc0NvbnRyYWN0U3RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMykhPW51bGx9LHQub2JqZWN0LmV4dGVuZChuLFRyb25XZWJQcm90byl9KShEdik7dmFyICR2PXt9OyhmdW5jdGlvbihuKXt2YXIgZT1Ocix0PWUsYT10eXBlb2YgZ2xvYmFsVGhpczwidSImJmdsb2JhbFRoaXN8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3d8fHR5cGVvZiBhPCJ1IiYmYXx8dHlwZW9mIHNlbGY8InUiJiZzZWxmfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfS5jYWxsKG51bGwpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpO3QuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uVm90ZVdpdG5lc3NDb250cmFjdCIsbnVsbCxhKSx0LmV4cG9ydFN5bWJvbCgiVHJvbldlYlByb3RvLlZvdGVXaXRuZXNzQ29udHJhY3QuVm90ZSIsbnVsbCxhKSx0LmV4cG9ydFN5bWJvbCgiVHJvbldlYlByb3RvLldpdG5lc3NDcmVhdGVDb250cmFjdCIsbnVsbCxhKSx0LmV4cG9ydFN5bWJvbCgiVHJvbldlYlByb3RvLldpdG5lc3NVcGRhdGVDb250cmFjdCIsbnVsbCxhKSxUcm9uV2ViUHJvdG8uV2l0bmVzc0NyZWF0ZUNvbnRyYWN0PWZ1bmN0aW9uKHMpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMscywwLC0xLG51bGwsbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLldpdG5lc3NDcmVhdGVDb250cmFjdCxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5XaXRuZXNzQ3JlYXRlQ29udHJhY3QuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5XaXRuZXNzQ3JlYXRlQ29udHJhY3QiKSxUcm9uV2ViUHJvdG8uV2l0bmVzc1VwZGF0ZUNvbnRyYWN0PWZ1bmN0aW9uKHMpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMscywwLC0xLG51bGwsbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLldpdG5lc3NVcGRhdGVDb250cmFjdCxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5XaXRuZXNzVXBkYXRlQ29udHJhY3QuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5XaXRuZXNzVXBkYXRlQ29udHJhY3QiKSxUcm9uV2ViUHJvdG8uVm90ZVdpdG5lc3NDb250cmFjdD1mdW5jdGlvbihzKXtlLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLHMsMCwtMSxUcm9uV2ViUHJvdG8uVm90ZVdpdG5lc3NDb250cmFjdC5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLlZvdGVXaXRuZXNzQ29udHJhY3QsZS5NZXNzYWdlKSx0LkRFQlVHJiYhQ09NUElMRUQmJihUcm9uV2ViUHJvdG8uVm90ZVdpdG5lc3NDb250cmFjdC5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLlZvdGVXaXRuZXNzQ29udHJhY3QiKSxUcm9uV2ViUHJvdG8uVm90ZVdpdG5lc3NDb250cmFjdC5Wb3RlPWZ1bmN0aW9uKHMpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMscywwLC0xLG51bGwsbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLlZvdGVXaXRuZXNzQ29udHJhY3QuVm90ZSxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5Wb3RlV2l0bmVzc0NvbnRyYWN0LlZvdGUuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5Wb3RlV2l0bmVzc0NvbnRyYWN0LlZvdGUiKSxlLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYoVHJvbldlYlByb3RvLldpdG5lc3NDcmVhdGVDb250cmFjdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocyl7cmV0dXJuIFRyb25XZWJQcm90by5XaXRuZXNzQ3JlYXRlQ29udHJhY3QudG9PYmplY3Qocyx0aGlzKX0sVHJvbldlYlByb3RvLldpdG5lc3NDcmVhdGVDb250cmFjdC50b09iamVjdD1mdW5jdGlvbihzLHIpe3ZhciBvPXtvd25lckFkZHJlc3M6ci5nZXRPd25lckFkZHJlc3NfYXNCNjQoKSx1cmw6ci5nZXRVcmxfYXNCNjQoKX07cmV0dXJuIHMmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXIpLG99KSxUcm9uV2ViUHJvdG8uV2l0bmVzc0NyZWF0ZUNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHMpe3ZhciByPW5ldyBlLkJpbmFyeVJlYWRlcihzKSxvPW5ldyBUcm9uV2ViUHJvdG8uV2l0bmVzc0NyZWF0ZUNvbnRyYWN0O3JldHVybiBUcm9uV2ViUHJvdG8uV2l0bmVzc0NyZWF0ZUNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHIpfSxUcm9uV2ViUHJvdG8uV2l0bmVzc0NyZWF0ZUNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihzLHIpe2Zvcig7ci5uZXh0RmllbGQoKSYmIXIuaXNFbmRHcm91cCgpOyl7dmFyIG89ci5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChvKXtjYXNlIDE6dmFyIGk9ci5yZWFkQnl0ZXMoKTtzLnNldE93bmVyQWRkcmVzcyhpKTticmVhaztjYXNlIDI6dmFyIGk9ci5yZWFkQnl0ZXMoKTtzLnNldFVybChpKTticmVhaztkZWZhdWx0OnIuc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiBzfSxUcm9uV2ViUHJvdG8uV2l0bmVzc0NyZWF0ZUNvbnRyYWN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcz1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIFRyb25XZWJQcm90by5XaXRuZXNzQ3JlYXRlQ29udHJhY3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxzKSxzLmdldFJlc3VsdEJ1ZmZlcigpfSxUcm9uV2ViUHJvdG8uV2l0bmVzc0NyZWF0ZUNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHMscil7dmFyIG89dm9pZCAwO289cy5nZXRPd25lckFkZHJlc3NfYXNVOCgpLG8ubGVuZ3RoPjAmJnIud3JpdGVCeXRlcygxLG8pLG89cy5nZXRVcmxfYXNVOCgpLG8ubGVuZ3RoPjAmJnIud3JpdGVCeXRlcygyLG8pfSxUcm9uV2ViUHJvdG8uV2l0bmVzc0NyZWF0ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLCIiKX0sVHJvbldlYlByb3RvLldpdG5lc3NDcmVhdGVDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0T3duZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uV2l0bmVzc0NyZWF0ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3NfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0T3duZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uV2l0bmVzc0NyZWF0ZUNvbnRyYWN0LnByb3RvdHlwZS5zZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24ocyl7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMSxzKX0sVHJvbldlYlByb3RvLldpdG5lc3NDcmVhdGVDb250cmFjdC5wcm90b3R5cGUuZ2V0VXJsPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwiIil9LFRyb25XZWJQcm90by5XaXRuZXNzQ3JlYXRlQ29udHJhY3QucHJvdG90eXBlLmdldFVybF9hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldFVybCgpKX0sVHJvbldlYlByb3RvLldpdG5lc3NDcmVhdGVDb250cmFjdC5wcm90b3R5cGUuZ2V0VXJsX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldFVybCgpKX0sVHJvbldlYlByb3RvLldpdG5lc3NDcmVhdGVDb250cmFjdC5wcm90b3R5cGUuc2V0VXJsPWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDIscyl9LGUuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihUcm9uV2ViUHJvdG8uV2l0bmVzc1VwZGF0ZUNvbnRyYWN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihzKXtyZXR1cm4gVHJvbldlYlByb3RvLldpdG5lc3NVcGRhdGVDb250cmFjdC50b09iamVjdChzLHRoaXMpfSxUcm9uV2ViUHJvdG8uV2l0bmVzc1VwZGF0ZUNvbnRyYWN0LnRvT2JqZWN0PWZ1bmN0aW9uKHMscil7dmFyIG89e293bmVyQWRkcmVzczpyLmdldE93bmVyQWRkcmVzc19hc0I2NCgpLHVwZGF0ZVVybDpyLmdldFVwZGF0ZVVybF9hc0I2NCgpfTtyZXR1cm4gcyYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9ciksb30pLFRyb25XZWJQcm90by5XaXRuZXNzVXBkYXRlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocyl7dmFyIHI9bmV3IGUuQmluYXJ5UmVhZGVyKHMpLG89bmV3IFRyb25XZWJQcm90by5XaXRuZXNzVXBkYXRlQ29udHJhY3Q7cmV0dXJuIFRyb25XZWJQcm90by5XaXRuZXNzVXBkYXRlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8scil9LFRyb25XZWJQcm90by5XaXRuZXNzVXBkYXRlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHMscil7Zm9yKDtyLm5leHRGaWVsZCgpJiYhci5pc0VuZEdyb3VwKCk7KXt2YXIgbz1yLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKG8pe2Nhc2UgMTp2YXIgaT1yLnJlYWRCeXRlcygpO3Muc2V0T3duZXJBZGRyZXNzKGkpO2JyZWFrO2Nhc2UgMTI6dmFyIGk9ci5yZWFkQnl0ZXMoKTtzLnNldFVwZGF0ZVVybChpKTticmVhaztkZWZhdWx0OnIuc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiBzfSxUcm9uV2ViUHJvdG8uV2l0bmVzc1VwZGF0ZUNvbnRyYWN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcz1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIFRyb25XZWJQcm90by5XaXRuZXNzVXBkYXRlQ29udHJhY3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxzKSxzLmdldFJlc3VsdEJ1ZmZlcigpfSxUcm9uV2ViUHJvdG8uV2l0bmVzc1VwZGF0ZUNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHMscil7dmFyIG89dm9pZCAwO289cy5nZXRPd25lckFkZHJlc3NfYXNVOCgpLG8ubGVuZ3RoPjAmJnIud3JpdGVCeXRlcygxLG8pLG89cy5nZXRVcGRhdGVVcmxfYXNVOCgpLG8ubGVuZ3RoPjAmJnIud3JpdGVCeXRlcygxMixvKX0sVHJvbldlYlByb3RvLldpdG5lc3NVcGRhdGVDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwiIil9LFRyb25XZWJQcm90by5XaXRuZXNzVXBkYXRlQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLldpdG5lc3NVcGRhdGVDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLldpdG5lc3NVcGRhdGVDb250cmFjdC5wcm90b3R5cGUuc2V0T3duZXJBZGRyZXNzPWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDEscyl9LFRyb25XZWJQcm90by5XaXRuZXNzVXBkYXRlQ29udHJhY3QucHJvdG90eXBlLmdldFVwZGF0ZVVybD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEyLCIiKX0sVHJvbldlYlByb3RvLldpdG5lc3NVcGRhdGVDb250cmFjdC5wcm90b3R5cGUuZ2V0VXBkYXRlVXJsX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0VXBkYXRlVXJsKCkpfSxUcm9uV2ViUHJvdG8uV2l0bmVzc1VwZGF0ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRVcGRhdGVVcmxfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0VXBkYXRlVXJsKCkpfSxUcm9uV2ViUHJvdG8uV2l0bmVzc1VwZGF0ZUNvbnRyYWN0LnByb3RvdHlwZS5zZXRVcGRhdGVVcmw9ZnVuY3Rpb24ocyl7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMTIscyl9LFRyb25XZWJQcm90by5Wb3RlV2l0bmVzc0NvbnRyYWN0LnJlcGVhdGVkRmllbGRzXz1bMl0sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5Wb3RlV2l0bmVzc0NvbnRyYWN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihzKXtyZXR1cm4gVHJvbldlYlByb3RvLlZvdGVXaXRuZXNzQ29udHJhY3QudG9PYmplY3Qocyx0aGlzKX0sVHJvbldlYlByb3RvLlZvdGVXaXRuZXNzQ29udHJhY3QudG9PYmplY3Q9ZnVuY3Rpb24ocyxyKXt2YXIgbz17b3duZXJBZGRyZXNzOnIuZ2V0T3duZXJBZGRyZXNzX2FzQjY0KCksdm90ZXNMaXN0OmUuTWVzc2FnZS50b09iamVjdExpc3Qoci5nZXRWb3Rlc0xpc3QoKSxUcm9uV2ViUHJvdG8uVm90ZVdpdG5lc3NDb250cmFjdC5Wb3RlLnRvT2JqZWN0LHMpLHN1cHBvcnQ6ZS5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHIsMywhMSl9O3JldHVybiBzJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT1yKSxvfSksVHJvbldlYlByb3RvLlZvdGVXaXRuZXNzQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocyl7dmFyIHI9bmV3IGUuQmluYXJ5UmVhZGVyKHMpLG89bmV3IFRyb25XZWJQcm90by5Wb3RlV2l0bmVzc0NvbnRyYWN0O3JldHVybiBUcm9uV2ViUHJvdG8uVm90ZVdpdG5lc3NDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyxyKX0sVHJvbldlYlByb3RvLlZvdGVXaXRuZXNzQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHMscil7Zm9yKDtyLm5leHRGaWVsZCgpJiYhci5pc0VuZEdyb3VwKCk7KXt2YXIgbz1yLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKG8pe2Nhc2UgMTp2YXIgaT1yLnJlYWRCeXRlcygpO3Muc2V0T3duZXJBZGRyZXNzKGkpO2JyZWFrO2Nhc2UgMjp2YXIgaT1uZXcgVHJvbldlYlByb3RvLlZvdGVXaXRuZXNzQ29udHJhY3QuVm90ZTtyLnJlYWRNZXNzYWdlKGksVHJvbldlYlByb3RvLlZvdGVXaXRuZXNzQ29udHJhY3QuVm90ZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLHMuYWRkVm90ZXMoaSk7YnJlYWs7Y2FzZSAzOnZhciBpPXIucmVhZEJvb2woKTtzLnNldFN1cHBvcnQoaSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBGaWVsZCgpO2JyZWFrfX1yZXR1cm4gc30sVHJvbldlYlByb3RvLlZvdGVXaXRuZXNzQ29udHJhY3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBzPW5ldyBlLkJpbmFyeVdyaXRlcjtyZXR1cm4gVHJvbldlYlByb3RvLlZvdGVXaXRuZXNzQ29udHJhY3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxzKSxzLmdldFJlc3VsdEJ1ZmZlcigpfSxUcm9uV2ViUHJvdG8uVm90ZVdpdG5lc3NDb250cmFjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihzLHIpe3ZhciBvPXZvaWQgMDtvPXMuZ2V0T3duZXJBZGRyZXNzX2FzVTgoKSxvLmxlbmd0aD4wJiZyLndyaXRlQnl0ZXMoMSxvKSxvPXMuZ2V0Vm90ZXNMaXN0KCksby5sZW5ndGg+MCYmci53cml0ZVJlcGVhdGVkTWVzc2FnZSgyLG8sVHJvbldlYlByb3RvLlZvdGVXaXRuZXNzQ29udHJhY3QuVm90ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbz1zLmdldFN1cHBvcnQoKSxvJiZyLndyaXRlQm9vbCgzLG8pfSxlLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYoVHJvbldlYlByb3RvLlZvdGVXaXRuZXNzQ29udHJhY3QuVm90ZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocyl7cmV0dXJuIFRyb25XZWJQcm90by5Wb3RlV2l0bmVzc0NvbnRyYWN0LlZvdGUudG9PYmplY3Qocyx0aGlzKX0sVHJvbldlYlByb3RvLlZvdGVXaXRuZXNzQ29udHJhY3QuVm90ZS50b09iamVjdD1mdW5jdGlvbihzLHIpe3ZhciBvPXt2b3RlQWRkcmVzczpyLmdldFZvdGVBZGRyZXNzX2FzQjY0KCksdm90ZUNvdW50OmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHIsMiwwKX07cmV0dXJuIHMmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXIpLG99KSxUcm9uV2ViUHJvdG8uVm90ZVdpdG5lc3NDb250cmFjdC5Wb3RlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHMpe3ZhciByPW5ldyBlLkJpbmFyeVJlYWRlcihzKSxvPW5ldyBUcm9uV2ViUHJvdG8uVm90ZVdpdG5lc3NDb250cmFjdC5Wb3RlO3JldHVybiBUcm9uV2ViUHJvdG8uVm90ZVdpdG5lc3NDb250cmFjdC5Wb3RlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHIpfSxUcm9uV2ViUHJvdG8uVm90ZVdpdG5lc3NDb250cmFjdC5Wb3RlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihzLHIpe2Zvcig7ci5uZXh0RmllbGQoKSYmIXIuaXNFbmRHcm91cCgpOyl7dmFyIG89ci5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChvKXtjYXNlIDE6dmFyIGk9ci5yZWFkQnl0ZXMoKTtzLnNldFZvdGVBZGRyZXNzKGkpO2JyZWFrO2Nhc2UgMjp2YXIgaT1yLnJlYWRJbnQ2NCgpO3Muc2V0Vm90ZUNvdW50KGkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwRmllbGQoKTticmVha319cmV0dXJuIHN9LFRyb25XZWJQcm90by5Wb3RlV2l0bmVzc0NvbnRyYWN0LlZvdGUucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBzPW5ldyBlLkJpbmFyeVdyaXRlcjtyZXR1cm4gVHJvbldlYlByb3RvLlZvdGVXaXRuZXNzQ29udHJhY3QuVm90ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLHMpLHMuZ2V0UmVzdWx0QnVmZmVyKCl9LFRyb25XZWJQcm90by5Wb3RlV2l0bmVzc0NvbnRyYWN0LlZvdGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24ocyxyKXt2YXIgbz12b2lkIDA7bz1zLmdldFZvdGVBZGRyZXNzX2FzVTgoKSxvLmxlbmd0aD4wJiZyLndyaXRlQnl0ZXMoMSxvKSxvPXMuZ2V0Vm90ZUNvdW50KCksbyE9PTAmJnIud3JpdGVJbnQ2NCgyLG8pfSxUcm9uV2ViUHJvdG8uVm90ZVdpdG5lc3NDb250cmFjdC5Wb3RlLnByb3RvdHlwZS5nZXRWb3RlQWRkcmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsIiIpfSxUcm9uV2ViUHJvdG8uVm90ZVdpdG5lc3NDb250cmFjdC5Wb3RlLnByb3RvdHlwZS5nZXRWb3RlQWRkcmVzc19hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldFZvdGVBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uVm90ZVdpdG5lc3NDb250cmFjdC5Wb3RlLnByb3RvdHlwZS5nZXRWb3RlQWRkcmVzc19hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRWb3RlQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlZvdGVXaXRuZXNzQ29udHJhY3QuVm90ZS5wcm90b3R5cGUuc2V0Vm90ZUFkZHJlc3M9ZnVuY3Rpb24ocyl7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMSxzKX0sVHJvbldlYlByb3RvLlZvdGVXaXRuZXNzQ29udHJhY3QuVm90ZS5wcm90b3R5cGUuZ2V0Vm90ZUNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwwKX0sVHJvbldlYlByb3RvLlZvdGVXaXRuZXNzQ29udHJhY3QuVm90ZS5wcm90b3R5cGUuc2V0Vm90ZUNvdW50PWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywyLHMpfSxUcm9uV2ViUHJvdG8uVm90ZVdpdG5lc3NDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwiIil9LFRyb25XZWJQcm90by5Wb3RlV2l0bmVzc0NvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3NfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5Wb3RlV2l0bmVzc0NvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3NfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0T3duZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uVm90ZVdpdG5lc3NDb250cmFjdC5wcm90b3R5cGUuc2V0T3duZXJBZGRyZXNzPWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDEscyl9LFRyb25XZWJQcm90by5Wb3RlV2l0bmVzc0NvbnRyYWN0LnByb3RvdHlwZS5nZXRWb3Rlc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsVHJvbldlYlByb3RvLlZvdGVXaXRuZXNzQ29udHJhY3QuVm90ZSwyKX0sVHJvbldlYlByb3RvLlZvdGVXaXRuZXNzQ29udHJhY3QucHJvdG90eXBlLnNldFZvdGVzTGlzdD1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMixzKX0sVHJvbldlYlByb3RvLlZvdGVXaXRuZXNzQ29udHJhY3QucHJvdG90eXBlLmFkZFZvdGVzPWZ1bmN0aW9uKHMscil7cmV0dXJuIGUuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMixzLFRyb25XZWJQcm90by5Wb3RlV2l0bmVzc0NvbnRyYWN0LlZvdGUscil9LFRyb25XZWJQcm90by5Wb3RlV2l0bmVzc0NvbnRyYWN0LnByb3RvdHlwZS5jbGVhclZvdGVzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFZvdGVzTGlzdChbXSl9LFRyb25XZWJQcm90by5Wb3RlV2l0bmVzc0NvbnRyYWN0LnByb3RvdHlwZS5nZXRTdXBwb3J0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsITEpfSxUcm9uV2ViUHJvdG8uVm90ZVdpdG5lc3NDb250cmFjdC5wcm90b3R5cGUuc2V0U3VwcG9ydD1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLDMscyl9LHQub2JqZWN0LmV4dGVuZChuLFRyb25XZWJQcm90byl9KSgkdik7dmFyIEx2PXt9OyhmdW5jdGlvbihuKXt2YXIgZT1Ocix0PWUsYT10eXBlb2YgZ2xvYmFsVGhpczwidSImJmdsb2JhbFRoaXN8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3d8fHR5cGVvZiBhPCJ1IiYmYXx8dHlwZW9mIHNlbGY8InUiJiZzZWxmfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfS5jYWxsKG51bGwpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpO3QuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uQnV5U3RvcmFnZUJ5dGVzQ29udHJhY3QiLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5CdXlTdG9yYWdlQ29udHJhY3QiLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5TZWxsU3RvcmFnZUNvbnRyYWN0IixudWxsLGEpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uVXBkYXRlQnJva2VyYWdlQ29udHJhY3QiLG51bGwsYSksVHJvbldlYlByb3RvLkJ1eVN0b3JhZ2VCeXRlc0NvbnRyYWN0PWZ1bmN0aW9uKHMpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMscywwLC0xLG51bGwsbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLkJ1eVN0b3JhZ2VCeXRlc0NvbnRyYWN0LGUuTWVzc2FnZSksdC5ERUJVRyYmIUNPTVBJTEVEJiYoVHJvbldlYlByb3RvLkJ1eVN0b3JhZ2VCeXRlc0NvbnRyYWN0LmRpc3BsYXlOYW1lPSJUcm9uV2ViUHJvdG8uQnV5U3RvcmFnZUJ5dGVzQ29udHJhY3QiKSxUcm9uV2ViUHJvdG8uQnV5U3RvcmFnZUNvbnRyYWN0PWZ1bmN0aW9uKHMpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMscywwLC0xLG51bGwsbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLkJ1eVN0b3JhZ2VDb250cmFjdCxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5CdXlTdG9yYWdlQ29udHJhY3QuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5CdXlTdG9yYWdlQ29udHJhY3QiKSxUcm9uV2ViUHJvdG8uU2VsbFN0b3JhZ2VDb250cmFjdD1mdW5jdGlvbihzKXtlLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLHMsMCwtMSxudWxsLG51bGwpfSx0LmluaGVyaXRzKFRyb25XZWJQcm90by5TZWxsU3RvcmFnZUNvbnRyYWN0LGUuTWVzc2FnZSksdC5ERUJVRyYmIUNPTVBJTEVEJiYoVHJvbldlYlByb3RvLlNlbGxTdG9yYWdlQ29udHJhY3QuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5TZWxsU3RvcmFnZUNvbnRyYWN0IiksVHJvbldlYlByb3RvLlVwZGF0ZUJyb2tlcmFnZUNvbnRyYWN0PWZ1bmN0aW9uKHMpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMscywwLC0xLG51bGwsbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLlVwZGF0ZUJyb2tlcmFnZUNvbnRyYWN0LGUuTWVzc2FnZSksdC5ERUJVRyYmIUNPTVBJTEVEJiYoVHJvbldlYlByb3RvLlVwZGF0ZUJyb2tlcmFnZUNvbnRyYWN0LmRpc3BsYXlOYW1lPSJUcm9uV2ViUHJvdG8uVXBkYXRlQnJva2VyYWdlQ29udHJhY3QiKSxlLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYoVHJvbldlYlByb3RvLkJ1eVN0b3JhZ2VCeXRlc0NvbnRyYWN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihzKXtyZXR1cm4gVHJvbldlYlByb3RvLkJ1eVN0b3JhZ2VCeXRlc0NvbnRyYWN0LnRvT2JqZWN0KHMsdGhpcyl9LFRyb25XZWJQcm90by5CdXlTdG9yYWdlQnl0ZXNDb250cmFjdC50b09iamVjdD1mdW5jdGlvbihzLHIpe3ZhciBvPXtvd25lckFkZHJlc3M6ci5nZXRPd25lckFkZHJlc3NfYXNCNjQoKSxieXRlczplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChyLDIsMCl9O3JldHVybiBzJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT1yKSxvfSksVHJvbldlYlByb3RvLkJ1eVN0b3JhZ2VCeXRlc0NvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHMpe3ZhciByPW5ldyBlLkJpbmFyeVJlYWRlcihzKSxvPW5ldyBUcm9uV2ViUHJvdG8uQnV5U3RvcmFnZUJ5dGVzQ29udHJhY3Q7cmV0dXJuIFRyb25XZWJQcm90by5CdXlTdG9yYWdlQnl0ZXNDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyxyKX0sVHJvbldlYlByb3RvLkJ1eVN0b3JhZ2VCeXRlc0NvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihzLHIpe2Zvcig7ci5uZXh0RmllbGQoKSYmIXIuaXNFbmRHcm91cCgpOyl7dmFyIG89ci5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChvKXtjYXNlIDE6dmFyIGk9ci5yZWFkQnl0ZXMoKTtzLnNldE93bmVyQWRkcmVzcyhpKTticmVhaztjYXNlIDI6dmFyIGk9ci5yZWFkSW50NjQoKTtzLnNldEJ5dGVzKGkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwRmllbGQoKTticmVha319cmV0dXJuIHN9LFRyb25XZWJQcm90by5CdXlTdG9yYWdlQnl0ZXNDb250cmFjdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIHM9bmV3IGUuQmluYXJ5V3JpdGVyO3JldHVybiBUcm9uV2ViUHJvdG8uQnV5U3RvcmFnZUJ5dGVzQ29udHJhY3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxzKSxzLmdldFJlc3VsdEJ1ZmZlcigpfSxUcm9uV2ViUHJvdG8uQnV5U3RvcmFnZUJ5dGVzQ29udHJhY3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24ocyxyKXt2YXIgbz12b2lkIDA7bz1zLmdldE93bmVyQWRkcmVzc19hc1U4KCksby5sZW5ndGg+MCYmci53cml0ZUJ5dGVzKDEsbyksbz1zLmdldEJ5dGVzKCksbyE9PTAmJnIud3JpdGVJbnQ2NCgyLG8pfSxUcm9uV2ViUHJvdG8uQnV5U3RvcmFnZUJ5dGVzQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsIiIpfSxUcm9uV2ViUHJvdG8uQnV5U3RvcmFnZUJ5dGVzQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLkJ1eVN0b3JhZ2VCeXRlc0NvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3NfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0T3duZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uQnV5U3RvcmFnZUJ5dGVzQ29udHJhY3QucHJvdG90eXBlLnNldE93bmVyQWRkcmVzcz1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywxLHMpfSxUcm9uV2ViUHJvdG8uQnV5U3RvcmFnZUJ5dGVzQ29udHJhY3QucHJvdG90eXBlLmdldEJ5dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwwKX0sVHJvbldlYlByb3RvLkJ1eVN0b3JhZ2VCeXRlc0NvbnRyYWN0LnByb3RvdHlwZS5zZXRCeXRlcz1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMixzKX0sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5CdXlTdG9yYWdlQ29udHJhY3QucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKHMpe3JldHVybiBUcm9uV2ViUHJvdG8uQnV5U3RvcmFnZUNvbnRyYWN0LnRvT2JqZWN0KHMsdGhpcyl9LFRyb25XZWJQcm90by5CdXlTdG9yYWdlQ29udHJhY3QudG9PYmplY3Q9ZnVuY3Rpb24ocyxyKXt2YXIgbz17b3duZXJBZGRyZXNzOnIuZ2V0T3duZXJBZGRyZXNzX2FzQjY0KCkscXVhbnQ6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQociwyLDApfTtyZXR1cm4gcyYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9ciksb30pLFRyb25XZWJQcm90by5CdXlTdG9yYWdlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocyl7dmFyIHI9bmV3IGUuQmluYXJ5UmVhZGVyKHMpLG89bmV3IFRyb25XZWJQcm90by5CdXlTdG9yYWdlQ29udHJhY3Q7cmV0dXJuIFRyb25XZWJQcm90by5CdXlTdG9yYWdlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8scil9LFRyb25XZWJQcm90by5CdXlTdG9yYWdlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHMscil7Zm9yKDtyLm5leHRGaWVsZCgpJiYhci5pc0VuZEdyb3VwKCk7KXt2YXIgbz1yLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKG8pe2Nhc2UgMTp2YXIgaT1yLnJlYWRCeXRlcygpO3Muc2V0T3duZXJBZGRyZXNzKGkpO2JyZWFrO2Nhc2UgMjp2YXIgaT1yLnJlYWRJbnQ2NCgpO3Muc2V0UXVhbnQoaSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBGaWVsZCgpO2JyZWFrfX1yZXR1cm4gc30sVHJvbldlYlByb3RvLkJ1eVN0b3JhZ2VDb250cmFjdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIHM9bmV3IGUuQmluYXJ5V3JpdGVyO3JldHVybiBUcm9uV2ViUHJvdG8uQnV5U3RvcmFnZUNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMscykscy5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLkJ1eVN0b3JhZ2VDb250cmFjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihzLHIpe3ZhciBvPXZvaWQgMDtvPXMuZ2V0T3duZXJBZGRyZXNzX2FzVTgoKSxvLmxlbmd0aD4wJiZyLndyaXRlQnl0ZXMoMSxvKSxvPXMuZ2V0UXVhbnQoKSxvIT09MCYmci53cml0ZUludDY0KDIsbyl9LFRyb25XZWJQcm90by5CdXlTdG9yYWdlQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsIiIpfSxUcm9uV2ViUHJvdG8uQnV5U3RvcmFnZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3NfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5CdXlTdG9yYWdlQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5CdXlTdG9yYWdlQ29udHJhY3QucHJvdG90eXBlLnNldE93bmVyQWRkcmVzcz1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywxLHMpfSxUcm9uV2ViUHJvdG8uQnV5U3RvcmFnZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRRdWFudD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsMCl9LFRyb25XZWJQcm90by5CdXlTdG9yYWdlQ29udHJhY3QucHJvdG90eXBlLnNldFF1YW50PWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywyLHMpfSxlLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYoVHJvbldlYlByb3RvLlNlbGxTdG9yYWdlQ29udHJhY3QucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKHMpe3JldHVybiBUcm9uV2ViUHJvdG8uU2VsbFN0b3JhZ2VDb250cmFjdC50b09iamVjdChzLHRoaXMpfSxUcm9uV2ViUHJvdG8uU2VsbFN0b3JhZ2VDb250cmFjdC50b09iamVjdD1mdW5jdGlvbihzLHIpe3ZhciBvPXtvd25lckFkZHJlc3M6ci5nZXRPd25lckFkZHJlc3NfYXNCNjQoKSxzdG9yYWdlQnl0ZXM6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQociwyLDApfTtyZXR1cm4gcyYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9ciksb30pLFRyb25XZWJQcm90by5TZWxsU3RvcmFnZUNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHMpe3ZhciByPW5ldyBlLkJpbmFyeVJlYWRlcihzKSxvPW5ldyBUcm9uV2ViUHJvdG8uU2VsbFN0b3JhZ2VDb250cmFjdDtyZXR1cm4gVHJvbldlYlByb3RvLlNlbGxTdG9yYWdlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8scil9LFRyb25XZWJQcm90by5TZWxsU3RvcmFnZUNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihzLHIpe2Zvcig7ci5uZXh0RmllbGQoKSYmIXIuaXNFbmRHcm91cCgpOyl7dmFyIG89ci5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChvKXtjYXNlIDE6dmFyIGk9ci5yZWFkQnl0ZXMoKTtzLnNldE93bmVyQWRkcmVzcyhpKTticmVhaztjYXNlIDI6dmFyIGk9ci5yZWFkSW50NjQoKTtzLnNldFN0b3JhZ2VCeXRlcyhpKTticmVhaztkZWZhdWx0OnIuc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiBzfSxUcm9uV2ViUHJvdG8uU2VsbFN0b3JhZ2VDb250cmFjdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIHM9bmV3IGUuQmluYXJ5V3JpdGVyO3JldHVybiBUcm9uV2ViUHJvdG8uU2VsbFN0b3JhZ2VDb250cmFjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLHMpLHMuZ2V0UmVzdWx0QnVmZmVyKCl9LFRyb25XZWJQcm90by5TZWxsU3RvcmFnZUNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHMscil7dmFyIG89dm9pZCAwO289cy5nZXRPd25lckFkZHJlc3NfYXNVOCgpLG8ubGVuZ3RoPjAmJnIud3JpdGVCeXRlcygxLG8pLG89cy5nZXRTdG9yYWdlQnl0ZXMoKSxvIT09MCYmci53cml0ZUludDY0KDIsbyl9LFRyb25XZWJQcm90by5TZWxsU3RvcmFnZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLCIiKX0sVHJvbldlYlByb3RvLlNlbGxTdG9yYWdlQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlNlbGxTdG9yYWdlQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5TZWxsU3RvcmFnZUNvbnRyYWN0LnByb3RvdHlwZS5zZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24ocyl7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMSxzKX0sVHJvbldlYlByb3RvLlNlbGxTdG9yYWdlQ29udHJhY3QucHJvdG90eXBlLmdldFN0b3JhZ2VCeXRlcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsMCl9LFRyb25XZWJQcm90by5TZWxsU3RvcmFnZUNvbnRyYWN0LnByb3RvdHlwZS5zZXRTdG9yYWdlQnl0ZXM9ZnVuY3Rpb24ocyl7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDIscyl9LGUuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihUcm9uV2ViUHJvdG8uVXBkYXRlQnJva2VyYWdlQ29udHJhY3QucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKHMpe3JldHVybiBUcm9uV2ViUHJvdG8uVXBkYXRlQnJva2VyYWdlQ29udHJhY3QudG9PYmplY3Qocyx0aGlzKX0sVHJvbldlYlByb3RvLlVwZGF0ZUJyb2tlcmFnZUNvbnRyYWN0LnRvT2JqZWN0PWZ1bmN0aW9uKHMscil7dmFyIG89e293bmVyQWRkcmVzczpyLmdldE93bmVyQWRkcmVzc19hc0I2NCgpLGJyb2tlcmFnZTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChyLDIsMCl9O3JldHVybiBzJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT1yKSxvfSksVHJvbldlYlByb3RvLlVwZGF0ZUJyb2tlcmFnZUNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHMpe3ZhciByPW5ldyBlLkJpbmFyeVJlYWRlcihzKSxvPW5ldyBUcm9uV2ViUHJvdG8uVXBkYXRlQnJva2VyYWdlQ29udHJhY3Q7cmV0dXJuIFRyb25XZWJQcm90by5VcGRhdGVCcm9rZXJhZ2VDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyxyKX0sVHJvbldlYlByb3RvLlVwZGF0ZUJyb2tlcmFnZUNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihzLHIpe2Zvcig7ci5uZXh0RmllbGQoKSYmIXIuaXNFbmRHcm91cCgpOyl7dmFyIG89ci5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChvKXtjYXNlIDE6dmFyIGk9ci5yZWFkQnl0ZXMoKTtzLnNldE93bmVyQWRkcmVzcyhpKTticmVhaztjYXNlIDI6dmFyIGk9ci5yZWFkSW50MzIoKTtzLnNldEJyb2tlcmFnZShpKTticmVhaztkZWZhdWx0OnIuc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiBzfSxUcm9uV2ViUHJvdG8uVXBkYXRlQnJva2VyYWdlQ29udHJhY3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBzPW5ldyBlLkJpbmFyeVdyaXRlcjtyZXR1cm4gVHJvbldlYlByb3RvLlVwZGF0ZUJyb2tlcmFnZUNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMscykscy5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLlVwZGF0ZUJyb2tlcmFnZUNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHMscil7dmFyIG89dm9pZCAwO289cy5nZXRPd25lckFkZHJlc3NfYXNVOCgpLG8ubGVuZ3RoPjAmJnIud3JpdGVCeXRlcygxLG8pLG89cy5nZXRCcm9rZXJhZ2UoKSxvIT09MCYmci53cml0ZUludDMyKDIsbyl9LFRyb25XZWJQcm90by5VcGRhdGVCcm9rZXJhZ2VDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwiIil9LFRyb25XZWJQcm90by5VcGRhdGVCcm9rZXJhZ2VDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0T3duZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uVXBkYXRlQnJva2VyYWdlQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5VcGRhdGVCcm9rZXJhZ2VDb250cmFjdC5wcm90b3R5cGUuc2V0T3duZXJBZGRyZXNzPWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDEscyl9LFRyb25XZWJQcm90by5VcGRhdGVCcm9rZXJhZ2VDb250cmFjdC5wcm90b3R5cGUuZ2V0QnJva2VyYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwwKX0sVHJvbldlYlByb3RvLlVwZGF0ZUJyb2tlcmFnZUNvbnRyYWN0LnByb3RvdHlwZS5zZXRCcm9rZXJhZ2U9ZnVuY3Rpb24ocyl7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDIscyl9LHQub2JqZWN0LmV4dGVuZChuLFRyb25XZWJQcm90byl9KShMdik7dmFyIHp2PXt9OyhmdW5jdGlvbihuKXt2YXIgZT1Ocix0PWUsYT10eXBlb2YgZ2xvYmFsVGhpczwidSImJmdsb2JhbFRoaXN8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3d8fHR5cGVvZiBhPCJ1IiYmYXx8dHlwZW9mIHNlbGY8InUiJiZzZWxmfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfS5jYWxsKG51bGwpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLHM9aTA7dC5vYmplY3QuZXh0ZW5kKHByb3RvLHMpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uQWNjb3VudENyZWF0ZUNvbnRyYWN0IixudWxsLGEpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdCIsbnVsbCxhKSx0LmV4cG9ydFN5bWJvbCgiVHJvbldlYlByb3RvLkFjY291bnRVcGRhdGVDb250cmFjdCIsbnVsbCxhKSx0LmV4cG9ydFN5bWJvbCgiVHJvbldlYlByb3RvLlNldEFjY291bnRJZENvbnRyYWN0IixudWxsLGEpLFRyb25XZWJQcm90by5BY2NvdW50Q3JlYXRlQ29udHJhY3Q9ZnVuY3Rpb24ocil7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxyLDAsLTEsbnVsbCxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uQWNjb3VudENyZWF0ZUNvbnRyYWN0LGUuTWVzc2FnZSksdC5ERUJVRyYmIUNPTVBJTEVEJiYoVHJvbldlYlByb3RvLkFjY291bnRDcmVhdGVDb250cmFjdC5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLkFjY291bnRDcmVhdGVDb250cmFjdCIpLFRyb25XZWJQcm90by5BY2NvdW50VXBkYXRlQ29udHJhY3Q9ZnVuY3Rpb24ocil7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxyLDAsLTEsbnVsbCxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uQWNjb3VudFVwZGF0ZUNvbnRyYWN0LGUuTWVzc2FnZSksdC5ERUJVRyYmIUNPTVBJTEVEJiYoVHJvbldlYlByb3RvLkFjY291bnRVcGRhdGVDb250cmFjdC5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLkFjY291bnRVcGRhdGVDb250cmFjdCIpLFRyb25XZWJQcm90by5TZXRBY2NvdW50SWRDb250cmFjdD1mdW5jdGlvbihyKXtlLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLHIsMCwtMSxudWxsLG51bGwpfSx0LmluaGVyaXRzKFRyb25XZWJQcm90by5TZXRBY2NvdW50SWRDb250cmFjdCxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5TZXRBY2NvdW50SWRDb250cmFjdC5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLlNldEFjY291bnRJZENvbnRyYWN0IiksVHJvbldlYlByb3RvLkFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3Q9ZnVuY3Rpb24ocil7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxyLDAsLTEsVHJvbldlYlByb3RvLkFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3QucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSx0LmluaGVyaXRzKFRyb25XZWJQcm90by5BY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0LGUuTWVzc2FnZSksdC5ERUJVRyYmIUNPTVBJTEVEJiYoVHJvbldlYlByb3RvLkFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3QuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5BY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0IiksZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5BY2NvdW50Q3JlYXRlQ29udHJhY3QucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKHIpe3JldHVybiBUcm9uV2ViUHJvdG8uQWNjb3VudENyZWF0ZUNvbnRyYWN0LnRvT2JqZWN0KHIsdGhpcyl9LFRyb25XZWJQcm90by5BY2NvdW50Q3JlYXRlQ29udHJhY3QudG9PYmplY3Q9ZnVuY3Rpb24ocixvKXt2YXIgaT17b3duZXJBZGRyZXNzOm8uZ2V0T3duZXJBZGRyZXNzX2FzQjY0KCksYWNjb3VudEFkZHJlc3M6by5nZXRBY2NvdW50QWRkcmVzc19hc0I2NCgpLHR5cGU6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQobywzLDApfTtyZXR1cm4gciYmKGkuJGpzcGJNZXNzYWdlSW5zdGFuY2U9byksaX0pLFRyb25XZWJQcm90by5BY2NvdW50Q3JlYXRlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocil7dmFyIG89bmV3IGUuQmluYXJ5UmVhZGVyKHIpLGk9bmV3IFRyb25XZWJQcm90by5BY2NvdW50Q3JlYXRlQ29udHJhY3Q7cmV0dXJuIFRyb25XZWJQcm90by5BY2NvdW50Q3JlYXRlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGksbyl9LFRyb25XZWJQcm90by5BY2NvdW50Q3JlYXRlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHIsbyl7Zm9yKDtvLm5leHRGaWVsZCgpJiYhby5pc0VuZEdyb3VwKCk7KXt2YXIgaT1vLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKGkpe2Nhc2UgMTp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0T3duZXJBZGRyZXNzKGMpO2JyZWFrO2Nhc2UgMjp2YXIgYz1vLnJlYWRCeXRlcygpO3Iuc2V0QWNjb3VudEFkZHJlc3MoYyk7YnJlYWs7Y2FzZSAzOnZhciBjPW8ucmVhZEVudW0oKTtyLnNldFR5cGUoYyk7YnJlYWs7ZGVmYXVsdDpvLnNraXBGaWVsZCgpO2JyZWFrfX1yZXR1cm4gcn0sVHJvbldlYlByb3RvLkFjY291bnRDcmVhdGVDb250cmFjdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IGUuQmluYXJ5V3JpdGVyO3JldHVybiBUcm9uV2ViUHJvdG8uQWNjb3VudENyZWF0ZUNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsciksci5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLkFjY291bnRDcmVhdGVDb250cmFjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihyLG8pe3ZhciBpPXZvaWQgMDtpPXIuZ2V0T3duZXJBZGRyZXNzX2FzVTgoKSxpLmxlbmd0aD4wJiZvLndyaXRlQnl0ZXMoMSxpKSxpPXIuZ2V0QWNjb3VudEFkZHJlc3NfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcygyLGkpLGk9ci5nZXRUeXBlKCksaSE9PTAmJm8ud3JpdGVFbnVtKDMsaSl9LFRyb25XZWJQcm90by5BY2NvdW50Q3JlYXRlQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsIiIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudENyZWF0ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3NfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5BY2NvdW50Q3JlYXRlQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5BY2NvdW50Q3JlYXRlQ29udHJhY3QucHJvdG90eXBlLnNldE93bmVyQWRkcmVzcz1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywxLHIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudENyZWF0ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRBY2NvdW50QWRkcmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsIiIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudENyZWF0ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRBY2NvdW50QWRkcmVzc19hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldEFjY291bnRBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uQWNjb3VudENyZWF0ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRBY2NvdW50QWRkcmVzc19hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRBY2NvdW50QWRkcmVzcygpKX0sVHJvbldlYlByb3RvLkFjY291bnRDcmVhdGVDb250cmFjdC5wcm90b3R5cGUuc2V0QWNjb3VudEFkZHJlc3M9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMixyKX0sVHJvbldlYlByb3RvLkFjY291bnRDcmVhdGVDb250cmFjdC5wcm90b3R5cGUuZ2V0VHlwZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsMCl9LFRyb25XZWJQcm90by5BY2NvdW50Q3JlYXRlQ29udHJhY3QucHJvdG90eXBlLnNldFR5cGU9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNFbnVtRmllbGQodGhpcywzLHIpfSxlLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYoVHJvbldlYlByb3RvLkFjY291bnRVcGRhdGVDb250cmFjdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocil7cmV0dXJuIFRyb25XZWJQcm90by5BY2NvdW50VXBkYXRlQ29udHJhY3QudG9PYmplY3Qocix0aGlzKX0sVHJvbldlYlByb3RvLkFjY291bnRVcGRhdGVDb250cmFjdC50b09iamVjdD1mdW5jdGlvbihyLG8pe3ZhciBpPXthY2NvdW50TmFtZTpvLmdldEFjY291bnROYW1lX2FzQjY0KCksb3duZXJBZGRyZXNzOm8uZ2V0T3duZXJBZGRyZXNzX2FzQjY0KCl9O3JldHVybiByJiYoaS4kanNwYk1lc3NhZ2VJbnN0YW5jZT1vKSxpfSksVHJvbldlYlByb3RvLkFjY291bnRVcGRhdGVDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihyKXt2YXIgbz1uZXcgZS5CaW5hcnlSZWFkZXIociksaT1uZXcgVHJvbldlYlByb3RvLkFjY291bnRVcGRhdGVDb250cmFjdDtyZXR1cm4gVHJvbldlYlByb3RvLkFjY291bnRVcGRhdGVDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaSxvKX0sVHJvbldlYlByb3RvLkFjY291bnRVcGRhdGVDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24ocixvKXtmb3IoO28ubmV4dEZpZWxkKCkmJiFvLmlzRW5kR3JvdXAoKTspe3ZhciBpPW8uZ2V0RmllbGROdW1iZXIoKTtzd2l0Y2goaSl7Y2FzZSAxOnZhciBjPW8ucmVhZEJ5dGVzKCk7ci5zZXRBY2NvdW50TmFtZShjKTticmVhaztjYXNlIDI6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldE93bmVyQWRkcmVzcyhjKTticmVhaztkZWZhdWx0Om8uc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiByfSxUcm9uV2ViUHJvdG8uQWNjb3VudFVwZGF0ZUNvbnRyYWN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcj1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIFRyb25XZWJQcm90by5BY2NvdW50VXBkYXRlQ29udHJhY3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxyKSxyLmdldFJlc3VsdEJ1ZmZlcigpfSxUcm9uV2ViUHJvdG8uQWNjb3VudFVwZGF0ZUNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHIsbyl7dmFyIGk9dm9pZCAwO2k9ci5nZXRBY2NvdW50TmFtZV9hc1U4KCksaS5sZW5ndGg+MCYmby53cml0ZUJ5dGVzKDEsaSksaT1yLmdldE93bmVyQWRkcmVzc19hc1U4KCksaS5sZW5ndGg+MCYmby53cml0ZUJ5dGVzKDIsaSl9LFRyb25XZWJQcm90by5BY2NvdW50VXBkYXRlQ29udHJhY3QucHJvdG90eXBlLmdldEFjY291bnROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwiIil9LFRyb25XZWJQcm90by5BY2NvdW50VXBkYXRlQ29udHJhY3QucHJvdG90eXBlLmdldEFjY291bnROYW1lX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0QWNjb3VudE5hbWUoKSl9LFRyb25XZWJQcm90by5BY2NvdW50VXBkYXRlQ29udHJhY3QucHJvdG90eXBlLmdldEFjY291bnROYW1lX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldEFjY291bnROYW1lKCkpfSxUcm9uV2ViUHJvdG8uQWNjb3VudFVwZGF0ZUNvbnRyYWN0LnByb3RvdHlwZS5zZXRBY2NvdW50TmFtZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywxLHIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudFVwZGF0ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLCIiKX0sVHJvbldlYlByb3RvLkFjY291bnRVcGRhdGVDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0T3duZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uQWNjb3VudFVwZGF0ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3NfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0T3duZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uQWNjb3VudFVwZGF0ZUNvbnRyYWN0LnByb3RvdHlwZS5zZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMixyKX0sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5TZXRBY2NvdW50SWRDb250cmFjdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocil7cmV0dXJuIFRyb25XZWJQcm90by5TZXRBY2NvdW50SWRDb250cmFjdC50b09iamVjdChyLHRoaXMpfSxUcm9uV2ViUHJvdG8uU2V0QWNjb3VudElkQ29udHJhY3QudG9PYmplY3Q9ZnVuY3Rpb24ocixvKXt2YXIgaT17YWNjb3VudElkOm8uZ2V0QWNjb3VudElkX2FzQjY0KCksb3duZXJBZGRyZXNzOm8uZ2V0T3duZXJBZGRyZXNzX2FzQjY0KCl9O3JldHVybiByJiYoaS4kanNwYk1lc3NhZ2VJbnN0YW5jZT1vKSxpfSksVHJvbldlYlByb3RvLlNldEFjY291bnRJZENvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHIpe3ZhciBvPW5ldyBlLkJpbmFyeVJlYWRlcihyKSxpPW5ldyBUcm9uV2ViUHJvdG8uU2V0QWNjb3VudElkQ29udHJhY3Q7cmV0dXJuIFRyb25XZWJQcm90by5TZXRBY2NvdW50SWRDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaSxvKX0sVHJvbldlYlByb3RvLlNldEFjY291bnRJZENvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihyLG8pe2Zvcig7by5uZXh0RmllbGQoKSYmIW8uaXNFbmRHcm91cCgpOyl7dmFyIGk9by5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChpKXtjYXNlIDE6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldEFjY291bnRJZChjKTticmVhaztjYXNlIDI6dmFyIGM9by5yZWFkQnl0ZXMoKTtyLnNldE93bmVyQWRkcmVzcyhjKTticmVhaztkZWZhdWx0Om8uc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiByfSxUcm9uV2ViUHJvdG8uU2V0QWNjb3VudElkQ29udHJhY3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciByPW5ldyBlLkJpbmFyeVdyaXRlcjtyZXR1cm4gVHJvbldlYlByb3RvLlNldEFjY291bnRJZENvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsciksci5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLlNldEFjY291bnRJZENvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHIsbyl7dmFyIGk9dm9pZCAwO2k9ci5nZXRBY2NvdW50SWRfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcygxLGkpLGk9ci5nZXRPd25lckFkZHJlc3NfYXNVOCgpLGkubGVuZ3RoPjAmJm8ud3JpdGVCeXRlcygyLGkpfSxUcm9uV2ViUHJvdG8uU2V0QWNjb3VudElkQ29udHJhY3QucHJvdG90eXBlLmdldEFjY291bnRJZD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsIiIpfSxUcm9uV2ViUHJvdG8uU2V0QWNjb3VudElkQ29udHJhY3QucHJvdG90eXBlLmdldEFjY291bnRJZF9hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldEFjY291bnRJZCgpKX0sVHJvbldlYlByb3RvLlNldEFjY291bnRJZENvbnRyYWN0LnByb3RvdHlwZS5nZXRBY2NvdW50SWRfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0QWNjb3VudElkKCkpfSxUcm9uV2ViUHJvdG8uU2V0QWNjb3VudElkQ29udHJhY3QucHJvdG90eXBlLnNldEFjY291bnRJZD1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywxLHIpfSxUcm9uV2ViUHJvdG8uU2V0QWNjb3VudElkQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsIiIpfSxUcm9uV2ViUHJvdG8uU2V0QWNjb3VudElkQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlNldEFjY291bnRJZENvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3NfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0T3duZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uU2V0QWNjb3VudElkQ29udHJhY3QucHJvdG90eXBlLnNldE93bmVyQWRkcmVzcz1mdW5jdGlvbihyKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywyLHIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdC5yZXBlYXRlZEZpZWxkc189WzRdLGUuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihUcm9uV2ViUHJvdG8uQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocil7cmV0dXJuIFRyb25XZWJQcm90by5BY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0LnRvT2JqZWN0KHIsdGhpcyl9LFRyb25XZWJQcm90by5BY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0LnRvT2JqZWN0PWZ1bmN0aW9uKHIsbyl7dmFyIGksYz17b3duZXJBZGRyZXNzOm8uZ2V0T3duZXJBZGRyZXNzX2FzQjY0KCksb3duZXI6KGk9by5nZXRPd25lcigpKSYmcy5QZXJtaXNzaW9uLnRvT2JqZWN0KHIsaSksd2l0bmVzczooaT1vLmdldFdpdG5lc3MoKSkmJnMuUGVybWlzc2lvbi50b09iamVjdChyLGkpLGFjdGl2ZXNMaXN0OmUuTWVzc2FnZS50b09iamVjdExpc3Qoby5nZXRBY3RpdmVzTGlzdCgpLHMuUGVybWlzc2lvbi50b09iamVjdCxyKX07cmV0dXJuIHImJihjLiRqc3BiTWVzc2FnZUluc3RhbmNlPW8pLGN9KSxUcm9uV2ViUHJvdG8uQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihyKXt2YXIgbz1uZXcgZS5CaW5hcnlSZWFkZXIociksaT1uZXcgVHJvbldlYlByb3RvLkFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3Q7cmV0dXJuIFRyb25XZWJQcm90by5BY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihpLG8pfSxUcm9uV2ViUHJvdG8uQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24ocixvKXtmb3IoO28ubmV4dEZpZWxkKCkmJiFvLmlzRW5kR3JvdXAoKTspe3ZhciBpPW8uZ2V0RmllbGROdW1iZXIoKTtzd2l0Y2goaSl7Y2FzZSAxOnZhciBjPW8ucmVhZEJ5dGVzKCk7ci5zZXRPd25lckFkZHJlc3MoYyk7YnJlYWs7Y2FzZSAyOnZhciBjPW5ldyBzLlBlcm1pc3Npb247by5yZWFkTWVzc2FnZShjLHMuUGVybWlzc2lvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLHIuc2V0T3duZXIoYyk7YnJlYWs7Y2FzZSAzOnZhciBjPW5ldyBzLlBlcm1pc3Npb247by5yZWFkTWVzc2FnZShjLHMuUGVybWlzc2lvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLHIuc2V0V2l0bmVzcyhjKTticmVhaztjYXNlIDQ6dmFyIGM9bmV3IHMuUGVybWlzc2lvbjtvLnJlYWRNZXNzYWdlKGMscy5QZXJtaXNzaW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksci5hZGRBY3RpdmVzKGMpO2JyZWFrO2RlZmF1bHQ6by5za2lwRmllbGQoKTticmVha319cmV0dXJuIHJ9LFRyb25XZWJQcm90by5BY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcj1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIFRyb25XZWJQcm90by5BY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsciksci5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLkFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24ocixvKXt2YXIgaT12b2lkIDA7aT1yLmdldE93bmVyQWRkcmVzc19hc1U4KCksaS5sZW5ndGg+MCYmby53cml0ZUJ5dGVzKDEsaSksaT1yLmdldE93bmVyKCksaSE9bnVsbCYmby53cml0ZU1lc3NhZ2UoMixpLHMuUGVybWlzc2lvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksaT1yLmdldFdpdG5lc3MoKSxpIT1udWxsJiZvLndyaXRlTWVzc2FnZSgzLGkscy5QZXJtaXNzaW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxpPXIuZ2V0QWN0aXZlc0xpc3QoKSxpLmxlbmd0aD4wJiZvLndyaXRlUmVwZWF0ZWRNZXNzYWdlKDQsaSxzLlBlcm1pc3Npb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwiIil9LFRyb25XZWJQcm90by5BY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3NfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5BY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3NfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0T3duZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdC5wcm90b3R5cGUuc2V0T3duZXJBZGRyZXNzPWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDEscil9LFRyb25XZWJQcm90by5BY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lcj1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscy5QZXJtaXNzaW9uLDIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdC5wcm90b3R5cGUuc2V0T3duZXI9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywyLHIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdC5wcm90b3R5cGUuY2xlYXJPd25lcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldE93bmVyKHZvaWQgMCl9LFRyb25XZWJQcm90by5BY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0LnByb3RvdHlwZS5oYXNPd25lcj1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywyKSE9bnVsbH0sVHJvbldlYlByb3RvLkFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3QucHJvdG90eXBlLmdldFdpdG5lc3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHMuUGVybWlzc2lvbiwzKX0sVHJvbldlYlByb3RvLkFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3QucHJvdG90eXBlLnNldFdpdG5lc3M9ZnVuY3Rpb24ocil7cmV0dXJuIGUuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywzLHIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdC5wcm90b3R5cGUuY2xlYXJXaXRuZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0V2l0bmVzcyh2b2lkIDApfSxUcm9uV2ViUHJvdG8uQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdC5wcm90b3R5cGUuaGFzV2l0bmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywzKSE9bnVsbH0sVHJvbldlYlByb3RvLkFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3QucHJvdG90eXBlLmdldEFjdGl2ZXNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHMuUGVybWlzc2lvbiw0KX0sVHJvbldlYlByb3RvLkFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3QucHJvdG90eXBlLnNldEFjdGl2ZXNMaXN0PWZ1bmN0aW9uKHIpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw0LHIpfSxUcm9uV2ViUHJvdG8uQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdC5wcm90b3R5cGUuYWRkQWN0aXZlcz1mdW5jdGlvbihyLG8pe3JldHVybiBlLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDQscixUcm9uV2ViUHJvdG8uUGVybWlzc2lvbixvKX0sVHJvbldlYlByb3RvLkFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3QucHJvdG90eXBlLmNsZWFyQWN0aXZlc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRBY3RpdmVzTGlzdChbXSl9LHQub2JqZWN0LmV4dGVuZChuLFRyb25XZWJQcm90byl9KSh6dik7dmFyIGp2PXt9OyhmdW5jdGlvbihuKXt2YXIgZT1Ocix0PWUsYT10eXBlb2YgZ2xvYmFsVGhpczwidSImJmdsb2JhbFRoaXN8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3d8fHR5cGVvZiBhPCJ1IiYmYXx8dHlwZW9mIHNlbGY8InUiJiZzZWxmfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfS5jYWxsKG51bGwpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpO3QuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uUHJvcG9zYWxBcHByb3ZlQ29udHJhY3QiLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5Qcm9wb3NhbENyZWF0ZUNvbnRyYWN0IixudWxsLGEpLHQuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uUHJvcG9zYWxEZWxldGVDb250cmFjdCIsbnVsbCxhKSxUcm9uV2ViUHJvdG8uUHJvcG9zYWxBcHByb3ZlQ29udHJhY3Q9ZnVuY3Rpb24ocyl7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxzLDAsLTEsbnVsbCxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uUHJvcG9zYWxBcHByb3ZlQ29udHJhY3QsZS5NZXNzYWdlKSx0LkRFQlVHJiYhQ09NUElMRUQmJihUcm9uV2ViUHJvdG8uUHJvcG9zYWxBcHByb3ZlQ29udHJhY3QuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5Qcm9wb3NhbEFwcHJvdmVDb250cmFjdCIpLFRyb25XZWJQcm90by5Qcm9wb3NhbENyZWF0ZUNvbnRyYWN0PWZ1bmN0aW9uKHMpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMscywwLC0xLG51bGwsbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLlByb3Bvc2FsQ3JlYXRlQ29udHJhY3QsZS5NZXNzYWdlKSx0LkRFQlVHJiYhQ09NUElMRUQmJihUcm9uV2ViUHJvdG8uUHJvcG9zYWxDcmVhdGVDb250cmFjdC5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLlByb3Bvc2FsQ3JlYXRlQ29udHJhY3QiKSxUcm9uV2ViUHJvdG8uUHJvcG9zYWxEZWxldGVDb250cmFjdD1mdW5jdGlvbihzKXtlLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLHMsMCwtMSxudWxsLG51bGwpfSx0LmluaGVyaXRzKFRyb25XZWJQcm90by5Qcm9wb3NhbERlbGV0ZUNvbnRyYWN0LGUuTWVzc2FnZSksdC5ERUJVRyYmIUNPTVBJTEVEJiYoVHJvbldlYlByb3RvLlByb3Bvc2FsRGVsZXRlQ29udHJhY3QuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5Qcm9wb3NhbERlbGV0ZUNvbnRyYWN0IiksZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5Qcm9wb3NhbEFwcHJvdmVDb250cmFjdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocyl7cmV0dXJuIFRyb25XZWJQcm90by5Qcm9wb3NhbEFwcHJvdmVDb250cmFjdC50b09iamVjdChzLHRoaXMpfSxUcm9uV2ViUHJvdG8uUHJvcG9zYWxBcHByb3ZlQ29udHJhY3QudG9PYmplY3Q9ZnVuY3Rpb24ocyxyKXt2YXIgbz17b3duZXJBZGRyZXNzOnIuZ2V0T3duZXJBZGRyZXNzX2FzQjY0KCkscHJvcG9zYWxJZDplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChyLDIsMCksaXNBZGRBcHByb3ZhbDplLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQociwzLCExKX07cmV0dXJuIHMmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXIpLG99KSxUcm9uV2ViUHJvdG8uUHJvcG9zYWxBcHByb3ZlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocyl7dmFyIHI9bmV3IGUuQmluYXJ5UmVhZGVyKHMpLG89bmV3IFRyb25XZWJQcm90by5Qcm9wb3NhbEFwcHJvdmVDb250cmFjdDtyZXR1cm4gVHJvbldlYlByb3RvLlByb3Bvc2FsQXBwcm92ZUNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHIpfSxUcm9uV2ViUHJvdG8uUHJvcG9zYWxBcHByb3ZlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHMscil7Zm9yKDtyLm5leHRGaWVsZCgpJiYhci5pc0VuZEdyb3VwKCk7KXt2YXIgbz1yLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKG8pe2Nhc2UgMTp2YXIgaT1yLnJlYWRCeXRlcygpO3Muc2V0T3duZXJBZGRyZXNzKGkpO2JyZWFrO2Nhc2UgMjp2YXIgaT1yLnJlYWRJbnQ2NCgpO3Muc2V0UHJvcG9zYWxJZChpKTticmVhaztjYXNlIDM6dmFyIGk9ci5yZWFkQm9vbCgpO3Muc2V0SXNBZGRBcHByb3ZhbChpKTticmVhaztkZWZhdWx0OnIuc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiBzfSxUcm9uV2ViUHJvdG8uUHJvcG9zYWxBcHByb3ZlQ29udHJhY3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBzPW5ldyBlLkJpbmFyeVdyaXRlcjtyZXR1cm4gVHJvbldlYlByb3RvLlByb3Bvc2FsQXBwcm92ZUNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMscykscy5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLlByb3Bvc2FsQXBwcm92ZUNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHMscil7dmFyIG89dm9pZCAwO289cy5nZXRPd25lckFkZHJlc3NfYXNVOCgpLG8ubGVuZ3RoPjAmJnIud3JpdGVCeXRlcygxLG8pLG89cy5nZXRQcm9wb3NhbElkKCksbyE9PTAmJnIud3JpdGVJbnQ2NCgyLG8pLG89cy5nZXRJc0FkZEFwcHJvdmFsKCksbyYmci53cml0ZUJvb2woMyxvKX0sVHJvbldlYlByb3RvLlByb3Bvc2FsQXBwcm92ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLCIiKX0sVHJvbldlYlByb3RvLlByb3Bvc2FsQXBwcm92ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3NfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5Qcm9wb3NhbEFwcHJvdmVDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlByb3Bvc2FsQXBwcm92ZUNvbnRyYWN0LnByb3RvdHlwZS5zZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24ocyl7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMSxzKX0sVHJvbldlYlByb3RvLlByb3Bvc2FsQXBwcm92ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRQcm9wb3NhbElkPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwwKX0sVHJvbldlYlByb3RvLlByb3Bvc2FsQXBwcm92ZUNvbnRyYWN0LnByb3RvdHlwZS5zZXRQcm9wb3NhbElkPWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywyLHMpfSxUcm9uV2ViUHJvdG8uUHJvcG9zYWxBcHByb3ZlQ29udHJhY3QucHJvdG90eXBlLmdldElzQWRkQXBwcm92YWw9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHRoaXMsMywhMSl9LFRyb25XZWJQcm90by5Qcm9wb3NhbEFwcHJvdmVDb250cmFjdC5wcm90b3R5cGUuc2V0SXNBZGRBcHByb3ZhbD1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLDMscyl9LGUuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihUcm9uV2ViUHJvdG8uUHJvcG9zYWxDcmVhdGVDb250cmFjdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24ocyl7cmV0dXJuIFRyb25XZWJQcm90by5Qcm9wb3NhbENyZWF0ZUNvbnRyYWN0LnRvT2JqZWN0KHMsdGhpcyl9LFRyb25XZWJQcm90by5Qcm9wb3NhbENyZWF0ZUNvbnRyYWN0LnRvT2JqZWN0PWZ1bmN0aW9uKHMscil7dmFyIG8saT17b3duZXJBZGRyZXNzOnIuZ2V0T3duZXJBZGRyZXNzX2FzQjY0KCkscGFyYW1ldGVyc01hcDoobz1yLmdldFBhcmFtZXRlcnNNYXAoKSk/by50b09iamVjdChzLHZvaWQgMCk6W119O3JldHVybiBzJiYoaS4kanNwYk1lc3NhZ2VJbnN0YW5jZT1yKSxpfSksVHJvbldlYlByb3RvLlByb3Bvc2FsQ3JlYXRlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocyl7dmFyIHI9bmV3IGUuQmluYXJ5UmVhZGVyKHMpLG89bmV3IFRyb25XZWJQcm90by5Qcm9wb3NhbENyZWF0ZUNvbnRyYWN0O3JldHVybiBUcm9uV2ViUHJvdG8uUHJvcG9zYWxDcmVhdGVDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyxyKX0sVHJvbldlYlByb3RvLlByb3Bvc2FsQ3JlYXRlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHMscil7Zm9yKDtyLm5leHRGaWVsZCgpJiYhci5pc0VuZEdyb3VwKCk7KXt2YXIgbz1yLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKG8pe2Nhc2UgMTp2YXIgaT1yLnJlYWRCeXRlcygpO3Muc2V0T3duZXJBZGRyZXNzKGkpO2JyZWFrO2Nhc2UgMjp2YXIgaT1zLmdldFBhcmFtZXRlcnNNYXAoKTtyLnJlYWRNZXNzYWdlKGksZnVuY3Rpb24oYyxmKXtlLk1hcC5kZXNlcmlhbGl6ZUJpbmFyeShjLGYsZS5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRJbnQ2NCxlLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEludDY0LG51bGwsMCwwKX0pO2JyZWFrO2RlZmF1bHQ6ci5za2lwRmllbGQoKTticmVha319cmV0dXJuIHN9LFRyb25XZWJQcm90by5Qcm9wb3NhbENyZWF0ZUNvbnRyYWN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcz1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIFRyb25XZWJQcm90by5Qcm9wb3NhbENyZWF0ZUNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMscykscy5nZXRSZXN1bHRCdWZmZXIoKX0sVHJvbldlYlByb3RvLlByb3Bvc2FsQ3JlYXRlQ29udHJhY3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24ocyxyKXt2YXIgbz12b2lkIDA7bz1zLmdldE93bmVyQWRkcmVzc19hc1U4KCksby5sZW5ndGg+MCYmci53cml0ZUJ5dGVzKDEsbyksbz1zLmdldFBhcmFtZXRlcnNNYXAoITApLG8mJm8uZ2V0TGVuZ3RoKCk+MCYmby5zZXJpYWxpemVCaW5hcnkoMixyLGUuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUludDY0LGUuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUludDY0KX0sVHJvbldlYlByb3RvLlByb3Bvc2FsQ3JlYXRlQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsIiIpfSxUcm9uV2ViUHJvdG8uUHJvcG9zYWxDcmVhdGVDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0T3duZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uUHJvcG9zYWxDcmVhdGVDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLlByb3Bvc2FsQ3JlYXRlQ29udHJhY3QucHJvdG90eXBlLnNldE93bmVyQWRkcmVzcz1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywxLHMpfSxUcm9uV2ViUHJvdG8uUHJvcG9zYWxDcmVhdGVDb250cmFjdC5wcm90b3R5cGUuZ2V0UGFyYW1ldGVyc01hcD1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLmdldE1hcEZpZWxkKHRoaXMsMixzLG51bGwpfSxUcm9uV2ViUHJvdG8uUHJvcG9zYWxDcmVhdGVDb250cmFjdC5wcm90b3R5cGUuY2xlYXJQYXJhbWV0ZXJzTWFwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0UGFyYW1ldGVyc01hcCgpLmNsZWFyKCksdGhpc30sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5Qcm9wb3NhbERlbGV0ZUNvbnRyYWN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihzKXtyZXR1cm4gVHJvbldlYlByb3RvLlByb3Bvc2FsRGVsZXRlQ29udHJhY3QudG9PYmplY3Qocyx0aGlzKX0sVHJvbldlYlByb3RvLlByb3Bvc2FsRGVsZXRlQ29udHJhY3QudG9PYmplY3Q9ZnVuY3Rpb24ocyxyKXt2YXIgbz17b3duZXJBZGRyZXNzOnIuZ2V0T3duZXJBZGRyZXNzX2FzQjY0KCkscHJvcG9zYWxJZDplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChyLDIsMCl9O3JldHVybiBzJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT1yKSxvfSksVHJvbldlYlByb3RvLlByb3Bvc2FsRGVsZXRlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocyl7dmFyIHI9bmV3IGUuQmluYXJ5UmVhZGVyKHMpLG89bmV3IFRyb25XZWJQcm90by5Qcm9wb3NhbERlbGV0ZUNvbnRyYWN0O3JldHVybiBUcm9uV2ViUHJvdG8uUHJvcG9zYWxEZWxldGVDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyxyKX0sVHJvbldlYlByb3RvLlByb3Bvc2FsRGVsZXRlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHMscil7Zm9yKDtyLm5leHRGaWVsZCgpJiYhci5pc0VuZEdyb3VwKCk7KXt2YXIgbz1yLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKG8pe2Nhc2UgMTp2YXIgaT1yLnJlYWRCeXRlcygpO3Muc2V0T3duZXJBZGRyZXNzKGkpO2JyZWFrO2Nhc2UgMjp2YXIgaT1yLnJlYWRJbnQ2NCgpO3Muc2V0UHJvcG9zYWxJZChpKTticmVhaztkZWZhdWx0OnIuc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiBzfSxUcm9uV2ViUHJvdG8uUHJvcG9zYWxEZWxldGVDb250cmFjdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIHM9bmV3IGUuQmluYXJ5V3JpdGVyO3JldHVybiBUcm9uV2ViUHJvdG8uUHJvcG9zYWxEZWxldGVDb250cmFjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLHMpLHMuZ2V0UmVzdWx0QnVmZmVyKCl9LFRyb25XZWJQcm90by5Qcm9wb3NhbERlbGV0ZUNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHMscil7dmFyIG89dm9pZCAwO289cy5nZXRPd25lckFkZHJlc3NfYXNVOCgpLG8ubGVuZ3RoPjAmJnIud3JpdGVCeXRlcygxLG8pLG89cy5nZXRQcm9wb3NhbElkKCksbyE9PTAmJnIud3JpdGVJbnQ2NCgyLG8pfSxUcm9uV2ViUHJvdG8uUHJvcG9zYWxEZWxldGVDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwiIil9LFRyb25XZWJQcm90by5Qcm9wb3NhbERlbGV0ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3NfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5Qcm9wb3NhbERlbGV0ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3NfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0T3duZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uUHJvcG9zYWxEZWxldGVDb250cmFjdC5wcm90b3R5cGUuc2V0T3duZXJBZGRyZXNzPWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDEscyl9LFRyb25XZWJQcm90by5Qcm9wb3NhbERlbGV0ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRQcm9wb3NhbElkPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwwKX0sVHJvbldlYlByb3RvLlByb3Bvc2FsRGVsZXRlQ29udHJhY3QucHJvdG90eXBlLnNldFByb3Bvc2FsSWQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDIscyl9LHQub2JqZWN0LmV4dGVuZChuLFRyb25XZWJQcm90byl9KShqdik7dmFyIFZ2PXt9OyhmdW5jdGlvbihuKXt2YXIgZT1Ocix0PWUsYT10eXBlb2YgZ2xvYmFsVGhpczwidSImJmdsb2JhbFRoaXN8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3d8fHR5cGVvZiBhPCJ1IiYmYXx8dHlwZW9mIHNlbGY8InUiJiZzZWxmfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfS5jYWxsKG51bGwpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpO3QuZXhwb3J0U3ltYm9sKCJUcm9uV2ViUHJvdG8uRXhjaGFuZ2VDcmVhdGVDb250cmFjdCIsbnVsbCxhKSx0LmV4cG9ydFN5bWJvbCgiVHJvbldlYlByb3RvLkV4Y2hhbmdlSW5qZWN0Q29udHJhY3QiLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5FeGNoYW5nZVRyYW5zYWN0aW9uQ29udHJhY3QiLG51bGwsYSksdC5leHBvcnRTeW1ib2woIlRyb25XZWJQcm90by5FeGNoYW5nZVdpdGhkcmF3Q29udHJhY3QiLG51bGwsYSksVHJvbldlYlByb3RvLkV4Y2hhbmdlQ3JlYXRlQ29udHJhY3Q9ZnVuY3Rpb24ocyl7ZS5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxzLDAsLTEsbnVsbCxudWxsKX0sdC5pbmhlcml0cyhUcm9uV2ViUHJvdG8uRXhjaGFuZ2VDcmVhdGVDb250cmFjdCxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5FeGNoYW5nZUNyZWF0ZUNvbnRyYWN0LmRpc3BsYXlOYW1lPSJUcm9uV2ViUHJvdG8uRXhjaGFuZ2VDcmVhdGVDb250cmFjdCIpLFRyb25XZWJQcm90by5FeGNoYW5nZUluamVjdENvbnRyYWN0PWZ1bmN0aW9uKHMpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMscywwLC0xLG51bGwsbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLkV4Y2hhbmdlSW5qZWN0Q29udHJhY3QsZS5NZXNzYWdlKSx0LkRFQlVHJiYhQ09NUElMRUQmJihUcm9uV2ViUHJvdG8uRXhjaGFuZ2VJbmplY3RDb250cmFjdC5kaXNwbGF5TmFtZT0iVHJvbldlYlByb3RvLkV4Y2hhbmdlSW5qZWN0Q29udHJhY3QiKSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VXaXRoZHJhd0NvbnRyYWN0PWZ1bmN0aW9uKHMpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMscywwLC0xLG51bGwsbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLkV4Y2hhbmdlV2l0aGRyYXdDb250cmFjdCxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5FeGNoYW5nZVdpdGhkcmF3Q29udHJhY3QuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5FeGNoYW5nZVdpdGhkcmF3Q29udHJhY3QiKSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VUcmFuc2FjdGlvbkNvbnRyYWN0PWZ1bmN0aW9uKHMpe2UuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMscywwLC0xLG51bGwsbnVsbCl9LHQuaW5oZXJpdHMoVHJvbldlYlByb3RvLkV4Y2hhbmdlVHJhbnNhY3Rpb25Db250cmFjdCxlLk1lc3NhZ2UpLHQuREVCVUcmJiFDT01QSUxFRCYmKFRyb25XZWJQcm90by5FeGNoYW5nZVRyYW5zYWN0aW9uQ29udHJhY3QuZGlzcGxheU5hbWU9IlRyb25XZWJQcm90by5FeGNoYW5nZVRyYW5zYWN0aW9uQ29udHJhY3QiKSxlLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYoVHJvbldlYlByb3RvLkV4Y2hhbmdlQ3JlYXRlQ29udHJhY3QucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKHMpe3JldHVybiBUcm9uV2ViUHJvdG8uRXhjaGFuZ2VDcmVhdGVDb250cmFjdC50b09iamVjdChzLHRoaXMpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VDcmVhdGVDb250cmFjdC50b09iamVjdD1mdW5jdGlvbihzLHIpe3ZhciBvPXtvd25lckFkZHJlc3M6ci5nZXRPd25lckFkZHJlc3NfYXNCNjQoKSxmaXJzdFRva2VuSWQ6ci5nZXRGaXJzdFRva2VuSWRfYXNCNjQoKSxmaXJzdFRva2VuQmFsYW5jZTplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChyLDMsMCksc2Vjb25kVG9rZW5JZDpyLmdldFNlY29uZFRva2VuSWRfYXNCNjQoKSxzZWNvbmRUb2tlbkJhbGFuY2U6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQociw1LDApfTtyZXR1cm4gcyYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9ciksb30pLFRyb25XZWJQcm90by5FeGNoYW5nZUNyZWF0ZUNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHMpe3ZhciByPW5ldyBlLkJpbmFyeVJlYWRlcihzKSxvPW5ldyBUcm9uV2ViUHJvdG8uRXhjaGFuZ2VDcmVhdGVDb250cmFjdDtyZXR1cm4gVHJvbldlYlByb3RvLkV4Y2hhbmdlQ3JlYXRlQ29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8scil9LFRyb25XZWJQcm90by5FeGNoYW5nZUNyZWF0ZUNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihzLHIpe2Zvcig7ci5uZXh0RmllbGQoKSYmIXIuaXNFbmRHcm91cCgpOyl7dmFyIG89ci5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChvKXtjYXNlIDE6dmFyIGk9ci5yZWFkQnl0ZXMoKTtzLnNldE93bmVyQWRkcmVzcyhpKTticmVhaztjYXNlIDI6dmFyIGk9ci5yZWFkQnl0ZXMoKTtzLnNldEZpcnN0VG9rZW5JZChpKTticmVhaztjYXNlIDM6dmFyIGk9ci5yZWFkSW50NjQoKTtzLnNldEZpcnN0VG9rZW5CYWxhbmNlKGkpO2JyZWFrO2Nhc2UgNDp2YXIgaT1yLnJlYWRCeXRlcygpO3Muc2V0U2Vjb25kVG9rZW5JZChpKTticmVhaztjYXNlIDU6dmFyIGk9ci5yZWFkSW50NjQoKTtzLnNldFNlY29uZFRva2VuQmFsYW5jZShpKTticmVhaztkZWZhdWx0OnIuc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiBzfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VDcmVhdGVDb250cmFjdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIHM9bmV3IGUuQmluYXJ5V3JpdGVyO3JldHVybiBUcm9uV2ViUHJvdG8uRXhjaGFuZ2VDcmVhdGVDb250cmFjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLHMpLHMuZ2V0UmVzdWx0QnVmZmVyKCl9LFRyb25XZWJQcm90by5FeGNoYW5nZUNyZWF0ZUNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHMscil7dmFyIG89dm9pZCAwO289cy5nZXRPd25lckFkZHJlc3NfYXNVOCgpLG8ubGVuZ3RoPjAmJnIud3JpdGVCeXRlcygxLG8pLG89cy5nZXRGaXJzdFRva2VuSWRfYXNVOCgpLG8ubGVuZ3RoPjAmJnIud3JpdGVCeXRlcygyLG8pLG89cy5nZXRGaXJzdFRva2VuQmFsYW5jZSgpLG8hPT0wJiZyLndyaXRlSW50NjQoMyxvKSxvPXMuZ2V0U2Vjb25kVG9rZW5JZF9hc1U4KCksby5sZW5ndGg+MCYmci53cml0ZUJ5dGVzKDQsbyksbz1zLmdldFNlY29uZFRva2VuQmFsYW5jZSgpLG8hPT0wJiZyLndyaXRlSW50NjQoNSxvKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlQ3JlYXRlQ29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsIiIpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VDcmVhdGVDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0T3duZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VDcmVhdGVDb250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzX2FzVTg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNVOCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlQ3JlYXRlQ29udHJhY3QucHJvdG90eXBlLnNldE93bmVyQWRkcmVzcz1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywxLHMpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VDcmVhdGVDb250cmFjdC5wcm90b3R5cGUuZ2V0Rmlyc3RUb2tlbklkPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwiIil9LFRyb25XZWJQcm90by5FeGNoYW5nZUNyZWF0ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRGaXJzdFRva2VuSWRfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRGaXJzdFRva2VuSWQoKSl9LFRyb25XZWJQcm90by5FeGNoYW5nZUNyZWF0ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRGaXJzdFRva2VuSWRfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0Rmlyc3RUb2tlbklkKCkpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VDcmVhdGVDb250cmFjdC5wcm90b3R5cGUuc2V0Rmlyc3RUb2tlbklkPWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDIscyl9LFRyb25XZWJQcm90by5FeGNoYW5nZUNyZWF0ZUNvbnRyYWN0LnByb3RvdHlwZS5nZXRGaXJzdFRva2VuQmFsYW5jZT1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsMCl9LFRyb25XZWJQcm90by5FeGNoYW5nZUNyZWF0ZUNvbnRyYWN0LnByb3RvdHlwZS5zZXRGaXJzdFRva2VuQmFsYW5jZT1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMyxzKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlQ3JlYXRlQ29udHJhY3QucHJvdG90eXBlLmdldFNlY29uZFRva2VuSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw0LCIiKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlQ3JlYXRlQ29udHJhY3QucHJvdG90eXBlLmdldFNlY29uZFRva2VuSWRfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRTZWNvbmRUb2tlbklkKCkpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VDcmVhdGVDb250cmFjdC5wcm90b3R5cGUuZ2V0U2Vjb25kVG9rZW5JZF9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRTZWNvbmRUb2tlbklkKCkpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VDcmVhdGVDb250cmFjdC5wcm90b3R5cGUuc2V0U2Vjb25kVG9rZW5JZD1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcyw0LHMpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VDcmVhdGVDb250cmFjdC5wcm90b3R5cGUuZ2V0U2Vjb25kVG9rZW5CYWxhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNSwwKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlQ3JlYXRlQ29udHJhY3QucHJvdG90eXBlLnNldFNlY29uZFRva2VuQmFsYW5jZT1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsNSxzKX0sZS5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKFRyb25XZWJQcm90by5FeGNoYW5nZUluamVjdENvbnRyYWN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihzKXtyZXR1cm4gVHJvbldlYlByb3RvLkV4Y2hhbmdlSW5qZWN0Q29udHJhY3QudG9PYmplY3Qocyx0aGlzKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlSW5qZWN0Q29udHJhY3QudG9PYmplY3Q9ZnVuY3Rpb24ocyxyKXt2YXIgbz17b3duZXJBZGRyZXNzOnIuZ2V0T3duZXJBZGRyZXNzX2FzQjY0KCksZXhjaGFuZ2VJZDplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChyLDIsMCksdG9rZW5JZDpyLmdldFRva2VuSWRfYXNCNjQoKSxxdWFudDplLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdChyLDQsMCl9O3JldHVybiBzJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT1yKSxvfSksVHJvbldlYlByb3RvLkV4Y2hhbmdlSW5qZWN0Q29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocyl7dmFyIHI9bmV3IGUuQmluYXJ5UmVhZGVyKHMpLG89bmV3IFRyb25XZWJQcm90by5FeGNoYW5nZUluamVjdENvbnRyYWN0O3JldHVybiBUcm9uV2ViUHJvdG8uRXhjaGFuZ2VJbmplY3RDb250cmFjdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyxyKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlSW5qZWN0Q29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHMscil7Zm9yKDtyLm5leHRGaWVsZCgpJiYhci5pc0VuZEdyb3VwKCk7KXt2YXIgbz1yLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKG8pe2Nhc2UgMTp2YXIgaT1yLnJlYWRCeXRlcygpO3Muc2V0T3duZXJBZGRyZXNzKGkpO2JyZWFrO2Nhc2UgMjp2YXIgaT1yLnJlYWRJbnQ2NCgpO3Muc2V0RXhjaGFuZ2VJZChpKTticmVhaztjYXNlIDM6dmFyIGk9ci5yZWFkQnl0ZXMoKTtzLnNldFRva2VuSWQoaSk7YnJlYWs7Y2FzZSA0OnZhciBpPXIucmVhZEludDY0KCk7cy5zZXRRdWFudChpKTticmVhaztkZWZhdWx0OnIuc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiBzfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VJbmplY3RDb250cmFjdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIHM9bmV3IGUuQmluYXJ5V3JpdGVyO3JldHVybiBUcm9uV2ViUHJvdG8uRXhjaGFuZ2VJbmplY3RDb250cmFjdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLHMpLHMuZ2V0UmVzdWx0QnVmZmVyKCl9LFRyb25XZWJQcm90by5FeGNoYW5nZUluamVjdENvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHMscil7dmFyIG89dm9pZCAwO289cy5nZXRPd25lckFkZHJlc3NfYXNVOCgpLG8ubGVuZ3RoPjAmJnIud3JpdGVCeXRlcygxLG8pLG89cy5nZXRFeGNoYW5nZUlkKCksbyE9PTAmJnIud3JpdGVJbnQ2NCgyLG8pLG89cy5nZXRUb2tlbklkX2FzVTgoKSxvLmxlbmd0aD4wJiZyLndyaXRlQnl0ZXMoMyxvKSxvPXMuZ2V0UXVhbnQoKSxvIT09MCYmci53cml0ZUludDY0KDQsbyl9LFRyb25XZWJQcm90by5FeGNoYW5nZUluamVjdENvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLCIiKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlSW5qZWN0Q29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldE93bmVyQWRkcmVzcygpKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlSW5qZWN0Q29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5FeGNoYW5nZUluamVjdENvbnRyYWN0LnByb3RvdHlwZS5zZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24ocyl7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMSxzKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlSW5qZWN0Q29udHJhY3QucHJvdG90eXBlLmdldEV4Y2hhbmdlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLDApfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VJbmplY3RDb250cmFjdC5wcm90b3R5cGUuc2V0RXhjaGFuZ2VJZD1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMixzKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlSW5qZWN0Q29udHJhY3QucHJvdG90eXBlLmdldFRva2VuSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywzLCIiKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlSW5qZWN0Q29udHJhY3QucHJvdG90eXBlLmdldFRva2VuSWRfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRUb2tlbklkKCkpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VJbmplY3RDb250cmFjdC5wcm90b3R5cGUuZ2V0VG9rZW5JZF9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRUb2tlbklkKCkpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VJbmplY3RDb250cmFjdC5wcm90b3R5cGUuc2V0VG9rZW5JZD1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywzLHMpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VJbmplY3RDb250cmFjdC5wcm90b3R5cGUuZ2V0UXVhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw0LDApfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VJbmplY3RDb250cmFjdC5wcm90b3R5cGUuc2V0UXVhbnQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDQscyl9LGUuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihUcm9uV2ViUHJvdG8uRXhjaGFuZ2VXaXRoZHJhd0NvbnRyYWN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihzKXtyZXR1cm4gVHJvbldlYlByb3RvLkV4Y2hhbmdlV2l0aGRyYXdDb250cmFjdC50b09iamVjdChzLHRoaXMpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VXaXRoZHJhd0NvbnRyYWN0LnRvT2JqZWN0PWZ1bmN0aW9uKHMscil7dmFyIG89e293bmVyQWRkcmVzczpyLmdldE93bmVyQWRkcmVzc19hc0I2NCgpLGV4Y2hhbmdlSWQ6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQociwyLDApLHRva2VuSWQ6ci5nZXRUb2tlbklkX2FzQjY0KCkscXVhbnQ6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQociw0LDApfTtyZXR1cm4gcyYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9ciksb30pLFRyb25XZWJQcm90by5FeGNoYW5nZVdpdGhkcmF3Q29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24ocyl7dmFyIHI9bmV3IGUuQmluYXJ5UmVhZGVyKHMpLG89bmV3IFRyb25XZWJQcm90by5FeGNoYW5nZVdpdGhkcmF3Q29udHJhY3Q7cmV0dXJuIFRyb25XZWJQcm90by5FeGNoYW5nZVdpdGhkcmF3Q29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8scil9LFRyb25XZWJQcm90by5FeGNoYW5nZVdpdGhkcmF3Q29udHJhY3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKHMscil7Zm9yKDtyLm5leHRGaWVsZCgpJiYhci5pc0VuZEdyb3VwKCk7KXt2YXIgbz1yLmdldEZpZWxkTnVtYmVyKCk7c3dpdGNoKG8pe2Nhc2UgMTp2YXIgaT1yLnJlYWRCeXRlcygpO3Muc2V0T3duZXJBZGRyZXNzKGkpO2JyZWFrO2Nhc2UgMjp2YXIgaT1yLnJlYWRJbnQ2NCgpO3Muc2V0RXhjaGFuZ2VJZChpKTticmVhaztjYXNlIDM6dmFyIGk9ci5yZWFkQnl0ZXMoKTtzLnNldFRva2VuSWQoaSk7YnJlYWs7Y2FzZSA0OnZhciBpPXIucmVhZEludDY0KCk7cy5zZXRRdWFudChpKTticmVhaztkZWZhdWx0OnIuc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiBzfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VXaXRoZHJhd0NvbnRyYWN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcz1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIFRyb25XZWJQcm90by5FeGNoYW5nZVdpdGhkcmF3Q29udHJhY3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxzKSxzLmdldFJlc3VsdEJ1ZmZlcigpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VXaXRoZHJhd0NvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHMscil7dmFyIG89dm9pZCAwO289cy5nZXRPd25lckFkZHJlc3NfYXNVOCgpLG8ubGVuZ3RoPjAmJnIud3JpdGVCeXRlcygxLG8pLG89cy5nZXRFeGNoYW5nZUlkKCksbyE9PTAmJnIud3JpdGVJbnQ2NCgyLG8pLG89cy5nZXRUb2tlbklkX2FzVTgoKSxvLmxlbmd0aD4wJiZyLndyaXRlQnl0ZXMoMyxvKSxvPXMuZ2V0UXVhbnQoKSxvIT09MCYmci53cml0ZUludDY0KDQsbyl9LFRyb25XZWJQcm90by5FeGNoYW5nZVdpdGhkcmF3Q29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzcz1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsIiIpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VXaXRoZHJhd0NvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3NfYXNCNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmJ5dGVzQXNCNjQodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5FeGNoYW5nZVdpdGhkcmF3Q29udHJhY3QucHJvdG90eXBlLmdldE93bmVyQWRkcmVzc19hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRPd25lckFkZHJlc3MoKSl9LFRyb25XZWJQcm90by5FeGNoYW5nZVdpdGhkcmF3Q29udHJhY3QucHJvdG90eXBlLnNldE93bmVyQWRkcmVzcz1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywxLHMpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VXaXRoZHJhd0NvbnRyYWN0LnByb3RvdHlwZS5nZXRFeGNoYW5nZUlkPWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwwKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlV2l0aGRyYXdDb250cmFjdC5wcm90b3R5cGUuc2V0RXhjaGFuZ2VJZD1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMixzKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlV2l0aGRyYXdDb250cmFjdC5wcm90b3R5cGUuZ2V0VG9rZW5JZD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsIiIpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VXaXRoZHJhd0NvbnRyYWN0LnByb3RvdHlwZS5nZXRUb2tlbklkX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0VG9rZW5JZCgpKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlV2l0aGRyYXdDb250cmFjdC5wcm90b3R5cGUuZ2V0VG9rZW5JZF9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzVTgodGhpcy5nZXRUb2tlbklkKCkpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VXaXRoZHJhd0NvbnRyYWN0LnByb3RvdHlwZS5zZXRUb2tlbklkPWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZCh0aGlzLDMscyl9LFRyb25XZWJQcm90by5FeGNoYW5nZVdpdGhkcmF3Q29udHJhY3QucHJvdG90eXBlLmdldFF1YW50PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNCwwKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlV2l0aGRyYXdDb250cmFjdC5wcm90b3R5cGUuc2V0UXVhbnQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDQscyl9LGUuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihUcm9uV2ViUHJvdG8uRXhjaGFuZ2VUcmFuc2FjdGlvbkNvbnRyYWN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihzKXtyZXR1cm4gVHJvbldlYlByb3RvLkV4Y2hhbmdlVHJhbnNhY3Rpb25Db250cmFjdC50b09iamVjdChzLHRoaXMpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VUcmFuc2FjdGlvbkNvbnRyYWN0LnRvT2JqZWN0PWZ1bmN0aW9uKHMscil7dmFyIG89e293bmVyQWRkcmVzczpyLmdldE93bmVyQWRkcmVzc19hc0I2NCgpLGV4Y2hhbmdlSWQ6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQociwyLDApLHRva2VuSWQ6ci5nZXRUb2tlbklkX2FzQjY0KCkscXVhbnQ6ZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQociw0LDApLGV4cGVjdGVkOmUuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHIsNSwwKX07cmV0dXJuIHMmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXIpLG99KSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VUcmFuc2FjdGlvbkNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKHMpe3ZhciByPW5ldyBlLkJpbmFyeVJlYWRlcihzKSxvPW5ldyBUcm9uV2ViUHJvdG8uRXhjaGFuZ2VUcmFuc2FjdGlvbkNvbnRyYWN0O3JldHVybiBUcm9uV2ViUHJvdG8uRXhjaGFuZ2VUcmFuc2FjdGlvbkNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHIpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VUcmFuc2FjdGlvbkNvbnRyYWN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihzLHIpe2Zvcig7ci5uZXh0RmllbGQoKSYmIXIuaXNFbmRHcm91cCgpOyl7dmFyIG89ci5nZXRGaWVsZE51bWJlcigpO3N3aXRjaChvKXtjYXNlIDE6dmFyIGk9ci5yZWFkQnl0ZXMoKTtzLnNldE93bmVyQWRkcmVzcyhpKTticmVhaztjYXNlIDI6dmFyIGk9ci5yZWFkSW50NjQoKTtzLnNldEV4Y2hhbmdlSWQoaSk7YnJlYWs7Y2FzZSAzOnZhciBpPXIucmVhZEJ5dGVzKCk7cy5zZXRUb2tlbklkKGkpO2JyZWFrO2Nhc2UgNDp2YXIgaT1yLnJlYWRJbnQ2NCgpO3Muc2V0UXVhbnQoaSk7YnJlYWs7Y2FzZSA1OnZhciBpPXIucmVhZEludDY0KCk7cy5zZXRFeHBlY3RlZChpKTticmVhaztkZWZhdWx0OnIuc2tpcEZpZWxkKCk7YnJlYWt9fXJldHVybiBzfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VUcmFuc2FjdGlvbkNvbnRyYWN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgcz1uZXcgZS5CaW5hcnlXcml0ZXI7cmV0dXJuIFRyb25XZWJQcm90by5FeGNoYW5nZVRyYW5zYWN0aW9uQ29udHJhY3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxzKSxzLmdldFJlc3VsdEJ1ZmZlcigpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VUcmFuc2FjdGlvbkNvbnRyYWN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKHMscil7dmFyIG89dm9pZCAwO289cy5nZXRPd25lckFkZHJlc3NfYXNVOCgpLG8ubGVuZ3RoPjAmJnIud3JpdGVCeXRlcygxLG8pLG89cy5nZXRFeGNoYW5nZUlkKCksbyE9PTAmJnIud3JpdGVJbnQ2NCgyLG8pLG89cy5nZXRUb2tlbklkX2FzVTgoKSxvLmxlbmd0aD4wJiZyLndyaXRlQnl0ZXMoMyxvKSxvPXMuZ2V0UXVhbnQoKSxvIT09MCYmci53cml0ZUludDY0KDQsbyksbz1zLmdldEV4cGVjdGVkKCksbyE9PTAmJnIud3JpdGVJbnQ2NCg1LG8pfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VUcmFuc2FjdGlvbkNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLCIiKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlVHJhbnNhY3Rpb25Db250cmFjdC5wcm90b3R5cGUuZ2V0T3duZXJBZGRyZXNzX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0T3duZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VUcmFuc2FjdGlvbkNvbnRyYWN0LnByb3RvdHlwZS5nZXRPd25lckFkZHJlc3NfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0T3duZXJBZGRyZXNzKCkpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VUcmFuc2FjdGlvbkNvbnRyYWN0LnByb3RvdHlwZS5zZXRPd25lckFkZHJlc3M9ZnVuY3Rpb24ocyl7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMSxzKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlVHJhbnNhY3Rpb25Db250cmFjdC5wcm90b3R5cGUuZ2V0RXhjaGFuZ2VJZD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsMCl9LFRyb25XZWJQcm90by5FeGNoYW5nZVRyYW5zYWN0aW9uQ29udHJhY3QucHJvdG90eXBlLnNldEV4Y2hhbmdlSWQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGUuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDIscyl9LFRyb25XZWJQcm90by5FeGNoYW5nZVRyYW5zYWN0aW9uQ29udHJhY3QucHJvdG90eXBlLmdldFRva2VuSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywzLCIiKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlVHJhbnNhY3Rpb25Db250cmFjdC5wcm90b3R5cGUuZ2V0VG9rZW5JZF9hc0I2ND1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc0I2NCh0aGlzLmdldFRva2VuSWQoKSl9LFRyb25XZWJQcm90by5FeGNoYW5nZVRyYW5zYWN0aW9uQ29udHJhY3QucHJvdG90eXBlLmdldFRva2VuSWRfYXNVOD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0VG9rZW5JZCgpKX0sVHJvbldlYlByb3RvLkV4Y2hhbmdlVHJhbnNhY3Rpb25Db250cmFjdC5wcm90b3R5cGUuc2V0VG9rZW5JZD1mdW5jdGlvbihzKXtyZXR1cm4gZS5NZXNzYWdlLnNldFByb3RvM0J5dGVzRmllbGQodGhpcywzLHMpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VUcmFuc2FjdGlvbkNvbnRyYWN0LnByb3RvdHlwZS5nZXRRdWFudD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDQsMCl9LFRyb25XZWJQcm90by5FeGNoYW5nZVRyYW5zYWN0aW9uQ29udHJhY3QucHJvdG90eXBlLnNldFF1YW50PWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcyw0LHMpfSxUcm9uV2ViUHJvdG8uRXhjaGFuZ2VUcmFuc2FjdGlvbkNvbnRyYWN0LnByb3RvdHlwZS5nZXRFeHBlY3RlZD1mdW5jdGlvbigpe3JldHVybiBlLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDUsMCl9LFRyb25XZWJQcm90by5FeGNoYW5nZVRyYW5zYWN0aW9uQ29udHJhY3QucHJvdG90eXBlLnNldEV4cGVjdGVkPWZ1bmN0aW9uKHMpe3JldHVybiBlLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcyw1LHMpfSx0Lm9iamVjdC5leHRlbmQobixUcm9uV2ViUHJvdG8pfSkoVnYpO2Z1bmN0aW9uIFZ5KG4sZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4uYXBwbHkoZSxhcmd1bWVudHMpfX1jb25zdHt0b1N0cmluZzpHdn09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6VnN9PU9iamVjdCx7aXRlcmF0b3I6aWksdG9TdHJpbmdUYWc6R3l9PVN5bWJvbCxoYz0oKHtoYXNPd25Qcm9wZXJ0eTpufSk9PihlLHQpPT5uLmNhbGwoZSx0KSkoT2JqZWN0LnByb3RvdHlwZSksUmE9KG4sZSk9PntsZXQgdD1uO2NvbnN0IGE9W107Zm9yKDt0IT1udWxsJiZ0IT09T2JqZWN0LnByb3RvdHlwZTspe2lmKGEuaW5kZXhPZih0KSE9PS0xKXJldHVybiExO2lmKGEucHVzaCh0KSxoYyh0LGUpKXJldHVybiEwO3Q9VnModCl9cmV0dXJuITF9LEh2PShuLGUpPT5uIT1udWxsJiZSYShuLGUpP25bZV06dm9pZCAwLGMwPShuPT5lPT57Y29uc3QgdD1Hdi5jYWxsKGUpO3JldHVybiBuW3RdfHwoblt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksSnI9bj0+KG49bi50b0xvd2VyQ2FzZSgpLGU9PmMwKGUpPT09biksemM9bj0+ZT0+dHlwZW9mIGU9PT1uLHtpc0FycmF5OlVvfT1BcnJheSxHcz16YygidW5kZWZpbmVkIik7ZnVuY3Rpb24gcmEobil7cmV0dXJuIG4hPT1udWxsJiYhR3MobikmJm4uY29uc3RydWN0b3IhPT1udWxsJiYhR3Mobi5jb25zdHJ1Y3RvcikmJnNyKG4uY29uc3RydWN0b3IuaXNCdWZmZXIpJiZuLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG4pfWNvbnN0IEh5PUpyKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIEt2KG4pe2xldCBlO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/ZT1BcnJheUJ1ZmZlci5pc1ZpZXcobik6ZT1uJiZuLmJ1ZmZlciYmSHkobi5idWZmZXIpLGV9Y29uc3QgWnY9emMoInN0cmluZyIpLHNyPXpjKCJmdW5jdGlvbiIpLEt5PXpjKCJudW1iZXIiKSxuYT1uPT5uIT09bnVsbCYmdHlwZW9mIG49PSJvYmplY3QiLHF2PW49Pm49PT0hMHx8bj09PSExLHJjPW49PntpZighbmEobikpcmV0dXJuITE7Y29uc3QgZT1WcyhuKTtyZXR1cm4oZT09PW51bGx8fGU9PT1PYmplY3QucHJvdG90eXBlfHxWcyhlKT09PW51bGwpJiYhUmEobixHeSkmJiFSYShuLGlpKX0sSnY9bj0+e2lmKCFuYShuKXx8cmEobikpcmV0dXJuITE7dHJ5e3JldHVybiBPYmplY3Qua2V5cyhuKS5sZW5ndGg9PT0wJiZPYmplY3QuZ2V0UHJvdG90eXBlT2Yobik9PT1PYmplY3QucHJvdG90eXBlfWNhdGNoe3JldHVybiExfX0sWXY9SnIoIkRhdGUiKSxYdj1KcigiRmlsZSIpLFF2PW49PiEhKG4mJnR5cGVvZiBuLnVyaTwidSIpLGVDPW49Pm4mJnR5cGVvZiBuLmdldFBhcnRzPCJ1Iix0Qz1KcigiQmxvYiIpLHJDPUpyKCJGaWxlTGlzdCIpLG5DPW49Pm5hKG4pJiZzcihuLnBpcGUpO2Z1bmN0aW9uIG9DKCl7cmV0dXJuIHR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2YgUGE8InUiP1BhOnt9fWNvbnN0IHRoPW9DKCkscmg9dHlwZW9mIHRoLkZvcm1EYXRhPCJ1Ij90aC5Gb3JtRGF0YTp2b2lkIDAsc0M9bj0+e2lmKCFuKXJldHVybiExO2lmKHJoJiZuIGluc3RhbmNlb2YgcmgpcmV0dXJuITA7Y29uc3QgZT1WcyhuKTtpZighZXx8ZT09PU9iamVjdC5wcm90b3R5cGV8fCFzcihuLmFwcGVuZCkpcmV0dXJuITE7Y29uc3QgdD1jMChuKTtyZXR1cm4gdD09PSJmb3JtZGF0YSJ8fHQ9PT0ib2JqZWN0IiYmc3Iobi50b1N0cmluZykmJm4udG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSJ9LGFDPUpyKCJVUkxTZWFyY2hQYXJhbXMiKSxbaUMsY0MsdUMsbENdPVsiUmVhZGFibGVTdHJlYW0iLCJSZXF1ZXN0IiwiUmVzcG9uc2UiLCJIZWFkZXJzIl0ubWFwKEpyKSxmQz1uPT5uLnRyaW0/bi50cmltKCk6bi5yZXBsYWNlKC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywiIik7ZnVuY3Rpb24gY2kobixlLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihuPT09bnVsbHx8dHlwZW9mIG4+InUiKXJldHVybjtsZXQgYSxzO2lmKHR5cGVvZiBuIT0ib2JqZWN0IiYmKG49W25dKSxVbyhuKSlmb3IoYT0wLHM9bi5sZW5ndGg7YTxzO2ErKyllLmNhbGwobnVsbCxuW2FdLGEsbik7ZWxzZXtpZihyYShuKSlyZXR1cm47Y29uc3Qgcj10P09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG4pOk9iamVjdC5rZXlzKG4pLG89ci5sZW5ndGg7bGV0IGk7Zm9yKGE9MDthPG87YSsrKWk9clthXSxlLmNhbGwobnVsbCxuW2ldLGksbil9fWZ1bmN0aW9uIFp5KG4sZSl7aWYocmEobikpcmV0dXJuIG51bGw7ZT1lLnRvTG93ZXJDYXNlKCk7Y29uc3QgdD1PYmplY3Qua2V5cyhuKTtsZXQgYT10Lmxlbmd0aCxzO2Zvcig7YS0tID4wOylpZihzPXRbYV0sZT09PXMudG9Mb3dlckNhc2UoKSlyZXR1cm4gcztyZXR1cm4gbnVsbH1jb25zdCBUbz10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6UGEscXk9bj0+IUdzKG4pJiZuIT09VG87ZnVuY3Rpb24gaGQoLi4ubil7Y29uc3R7Y2FzZWxlc3M6ZSxza2lwVW5kZWZpbmVkOnR9PXF5KHRoaXMpJiZ0aGlzfHx7fSxhPXt9LHM9KHIsbyk9PntpZihvPT09Il9fcHJvdG9fXyJ8fG89PT0iY29uc3RydWN0b3IifHxvPT09InByb3RvdHlwZSIpcmV0dXJuO2NvbnN0IGk9ZSYmdHlwZW9mIG89PSJzdHJpbmciJiZaeShhLG8pfHxvLGM9aGMoYSxpKT9hW2ldOnZvaWQgMDtyYyhjKSYmcmMocik/YVtpXT1oZChjLHIpOnJjKHIpP2FbaV09aGQoe30scik6VW8ocik/YVtpXT1yLnNsaWNlKCk6KCF0fHwhR3MocikpJiYoYVtpXT1yKX07Zm9yKGxldCByPTAsbz1uLmxlbmd0aDtyPG87cisrKXtjb25zdCBpPW5bcl07aWYoIWl8fHJhKGkpfHwoY2koaSxzKSx0eXBlb2YgaSE9Im9iamVjdCJ8fFVvKGkpKSljb250aW51ZTtjb25zdCBjPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaSk7Zm9yKGxldCBmPTA7ZjxjLmxlbmd0aDtmKyspe2NvbnN0IGQ9Y1tmXTt3Qy5jYWxsKGksZCkmJnMoaVtkXSxkKX19cmV0dXJuIGF9Y29uc3QgZEM9KG4sZSx0LHthbGxPd25LZXlzOmF9PXt9KT0+KGNpKGUsKHMscik9Pnt0JiZzcihzKT9PYmplY3QuZGVmaW5lUHJvcGVydHkobixyLHtfX3Byb3RvX186bnVsbCx2YWx1ZTpWeShzLHQpLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk6T2JqZWN0LmRlZmluZVByb3BlcnR5KG4scix7X19wcm90b19fOm51bGwsdmFsdWU6cyx3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfSx7YWxsT3duS2V5czphfSksbikscEM9bj0+KG4uY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYobj1uLnNsaWNlKDEpKSxuKSxoQz0obixlLHQsYSk9PntuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSwiY29uc3RydWN0b3IiLHtfX3Byb3RvX186bnVsbCx2YWx1ZTpuLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sInN1cGVyIix7X19wcm90b19fOm51bGwsdmFsdWU6ZS5wcm90b3R5cGV9KSx0JiZPYmplY3QuYXNzaWduKG4ucHJvdG90eXBlLHQpfSxnQz0obixlLHQsYSk9PntsZXQgcyxyLG87Y29uc3QgaT17fTtpZihlPWV8fHt9LG49PW51bGwpcmV0dXJuIGU7ZG97Zm9yKHM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobikscj1zLmxlbmd0aDtyLS0gPjA7KW89c1tyXSwoIWF8fGEobyxuLGUpKSYmIWlbb10mJihlW29dPW5bb10saVtvXT0hMCk7bj10IT09ITEmJlZzKG4pfXdoaWxlKG4mJighdHx8dChuLGUpKSYmbiE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiBlfSxiQz0obixlLHQpPT57bj1TdHJpbmcobiksKHQ9PT12b2lkIDB8fHQ+bi5sZW5ndGgpJiYodD1uLmxlbmd0aCksdC09ZS5sZW5ndGg7Y29uc3QgYT1uLmluZGV4T2YoZSx0KTtyZXR1cm4gYSE9PS0xJiZhPT09dH0seUM9bj0+e2lmKCFuKXJldHVybiBudWxsO2lmKFVvKG4pKXJldHVybiBuO2xldCBlPW4ubGVuZ3RoO2lmKCFLeShlKSlyZXR1cm4gbnVsbDtjb25zdCB0PW5ldyBBcnJheShlKTtmb3IoO2UtLSA+MDspdFtlXT1uW2VdO3JldHVybiB0fSx4Qz0obj0+ZT0+biYmZSBpbnN0YW5jZW9mIG4pKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmVnMoVWludDhBcnJheSkpLFRDPShuLGUpPT57Y29uc3QgYT0obiYmbltpaV0pLmNhbGwobik7bGV0IHM7Zm9yKDsocz1hLm5leHQoKSkmJiFzLmRvbmU7KXtjb25zdCByPXMudmFsdWU7ZS5jYWxsKG4sclswXSxyWzFdKX19LEFDPShuLGUpPT57bGV0IHQ7Y29uc3QgYT1bXTtmb3IoOyh0PW4uZXhlYyhlKSkhPT1udWxsOylhLnB1c2godCk7cmV0dXJuIGF9LG1DPUpyKCJIVE1MRm9ybUVsZW1lbnQiKSxQQz1uPT5uLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXHNdKFthLXpcZF0pKFx3KikvZyxmdW5jdGlvbih0LGEscyl7cmV0dXJuIGEudG9VcHBlckNhc2UoKStzfSkse3Byb3BlcnR5SXNFbnVtZXJhYmxlOndDfT1PYmplY3QucHJvdG90eXBlLHZDPUpyKCJSZWdFeHAiKSxKeT0obixlKT0+e2NvbnN0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobiksYT17fTtjaSh0LChzLHIpPT57bGV0IG87KG89ZShzLHIsbikpIT09ITEmJihhW3JdPW98fHMpfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixhKX0sQ0M9bj0+e0p5KG4sKGUsdCk9PntpZihzcihuKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmNsdWRlcyh0KSlyZXR1cm4hMTtjb25zdCBhPW5bdF07aWYoc3IoYSkpe2lmKGUuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gZSl7ZS53cml0YWJsZT0hMTtyZXR1cm59ZS5zZXR8fChlLnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCAnIit0KyInIil9KX19KX0sRUM9KG4sZSk9Pntjb25zdCB0PXt9LGE9cz0+e3MuZm9yRWFjaChyPT57dFtyXT0hMH0pfTtyZXR1cm4gVW8obik/YShuKTphKFN0cmluZyhuKS5zcGxpdChlKSksdH0sV0M9KCk9Pnt9LEJDPShuLGUpPT5uIT1udWxsJiZOdW1iZXIuaXNGaW5pdGUobj0rbik/bjplO2Z1bmN0aW9uIElDKG4pe3JldHVybiEhKG4mJnNyKG4uYXBwZW5kKSYmbltHeV09PT0iRm9ybURhdGEiJiZuW2lpXSl9Y29uc3QgU0M9bj0+e2NvbnN0IGU9bmV3IFdlYWtTZXQsdD1hPT57aWYobmEoYSkpe2lmKGUuaGFzKGEpKXJldHVybjtpZihyYShhKSlyZXR1cm4gYTtpZighKCJ0b0pTT04iaW4gYSkpe2UuYWRkKGEpO2NvbnN0IHM9VW8oYSk/W106e307cmV0dXJuIGNpKGEsKHIsbyk9Pntjb25zdCBpPXQocik7IUdzKGkpJiYoc1tvXT1pKX0pLGUuZGVsZXRlKGEpLHN9fXJldHVybiBhfTtyZXR1cm4gdChuKX0sX0M9SnIoIkFzeW5jRnVuY3Rpb24iKSxPQz1uPT5uJiYobmEobil8fHNyKG4pKSYmc3Iobi50aGVuKSYmc3Iobi5jYXRjaCksWXk9KChuLGUpPT5uP3NldEltbWVkaWF0ZTplPygodCxhKT0+KFRvLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh7c291cmNlOnMsZGF0YTpyfSk9PntzPT09VG8mJnI9PT10JiZhLmxlbmd0aCYmYS5zaGlmdCgpKCl9LCExKSxzPT57YS5wdXNoKHMpLFRvLnBvc3RNZXNzYWdlKHQsIioiKX0pKShgYXhpb3NAJHtNYXRoLnJhbmRvbSgpfWAsW10pOnQ9PnNldFRpbWVvdXQodCkpKHR5cGVvZiBzZXRJbW1lZGlhdGU9PSJmdW5jdGlvbiIsc3IoVG8ucG9zdE1lc3NhZ2UpKSxSQz10eXBlb2YgcXVldWVNaWNyb3Rhc2s8InUiP3F1ZXVlTWljcm90YXNrLmJpbmQoVG8pOnR5cGVvZiBWdTwidSImJlZ1Lm5leHRUaWNrfHxZeSxYeT1uPT5uIT1udWxsJiZzcihuW2lpXSksTUM9bj0+biE9bnVsbCYmUmEobixpaSkmJlh5KG4pLEg9e2lzQXJyYXk6VW8saXNBcnJheUJ1ZmZlcjpIeSxpc0J1ZmZlcjpyYSxpc0Zvcm1EYXRhOnNDLGlzQXJyYXlCdWZmZXJWaWV3Okt2LGlzU3RyaW5nOlp2LGlzTnVtYmVyOkt5LGlzQm9vbGVhbjpxdixpc09iamVjdDpuYSxpc1BsYWluT2JqZWN0OnJjLGlzRW1wdHlPYmplY3Q6SnYsaXNSZWFkYWJsZVN0cmVhbTppQyxpc1JlcXVlc3Q6Y0MsaXNSZXNwb25zZTp1Qyxpc0hlYWRlcnM6bEMsaXNVbmRlZmluZWQ6R3MsaXNEYXRlOll2LGlzRmlsZTpYdixpc1JlYWN0TmF0aXZlQmxvYjpRdixpc1JlYWN0TmF0aXZlOmVDLGlzQmxvYjp0Qyxpc1JlZ0V4cDp2Qyxpc0Z1bmN0aW9uOnNyLGlzU3RyZWFtOm5DLGlzVVJMU2VhcmNoUGFyYW1zOmFDLGlzVHlwZWRBcnJheTp4Qyxpc0ZpbGVMaXN0OnJDLGZvckVhY2g6Y2ksbWVyZ2U6aGQsZXh0ZW5kOmRDLHRyaW06ZkMsc3RyaXBCT006cEMsaW5oZXJpdHM6aEMsdG9GbGF0T2JqZWN0OmdDLGtpbmRPZjpjMCxraW5kT2ZUZXN0OkpyLGVuZHNXaXRoOmJDLHRvQXJyYXk6eUMsZm9yRWFjaEVudHJ5OlRDLG1hdGNoQWxsOkFDLGlzSFRNTEZvcm06bUMsaGFzT3duUHJvcGVydHk6aGMsaGFzT3duUHJvcDpoYyxoYXNPd25JblByb3RvdHlwZUNoYWluOlJhLGdldFNhZmVQcm9wOkh2LHJlZHVjZURlc2NyaXB0b3JzOkp5LGZyZWV6ZU1ldGhvZHM6Q0MsdG9PYmplY3RTZXQ6RUMsdG9DYW1lbENhc2U6UEMsbm9vcDpXQyx0b0Zpbml0ZU51bWJlcjpCQyxmaW5kS2V5Olp5LGdsb2JhbDpUbyxpc0NvbnRleHREZWZpbmVkOnF5LGlzU3BlY0NvbXBsaWFudEZvcm06SUMsdG9KU09OT2JqZWN0OlNDLGlzQXN5bmNGbjpfQyxpc1RoZW5hYmxlOk9DLHNldEltbWVkaWF0ZTpZeSxhc2FwOlJDLGlzSXRlcmFibGU6WHksaXNTYWZlSXRlcmFibGU6TUN9LEZDPUgudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksTkM9bj0+e2NvbnN0IGU9e307bGV0IHQsYSxzO3JldHVybiBuJiZuLnNwbGl0KGAKYCkuZm9yRWFjaChmdW5jdGlvbihvKXtzPW8uaW5kZXhPZigiOiIpLHQ9by5zdWJzdHJpbmcoMCxzKS50cmltKCkudG9Mb3dlckNhc2UoKSxhPW8uc3Vic3RyaW5nKHMrMSkudHJpbSgpLCEoIXR8fGVbdF0mJkZDW3RdKSYmKHQ9PT0ic2V0LWNvb2tpZSI/ZVt0XT9lW3RdLnB1c2goYSk6ZVt0XT1bYV06ZVt0XT1lW3RdP2VbdF0rIiwgIithOmEpfSksZX07ZnVuY3Rpb24ga0Mobil7bGV0IGU9MCx0PW4ubGVuZ3RoO2Zvcig7ZTx0Oyl7Y29uc3QgYT1uLmNoYXJDb2RlQXQoZSk7aWYoYSE9PTkmJmEhPT0zMilicmVhaztlKz0xfWZvcig7dD5lOyl7Y29uc3QgYT1uLmNoYXJDb2RlQXQodC0xKTtpZihhIT09OSYmYSE9PTMyKWJyZWFrO3QtPTF9cmV0dXJuIGU9PT0wJiZ0PT09bi5sZW5ndGg/bjpuLnNsaWNlKGUsdCl9Y29uc3QgVUM9bmV3IFJlZ0V4cCgiW1xcdTAwMDAtXFx1MDAwOFxcdTAwMGEtXFx1MDAxZlxcdTAwN2ZdKyIsImciKSxEQz1uZXcgUmVnRXhwKCJbXlxcdTAwMDlcXHUwMDIwLVxcdTAwN2VcXHUwMDgwLVxcdTAwZmZdKyIsImciKTtmdW5jdGlvbiB1MChuLGUpe3JldHVybiBILmlzQXJyYXkobik/bi5tYXAodD0+dTAodCxlKSk6a0MoU3RyaW5nKG4pLnJlcGxhY2UoZSwiIikpfWNvbnN0ICRDPW49PnUwKG4sVUMpLExDPW49PnUwKG4sREMpO2Z1bmN0aW9uIFF5KG4pe2NvbnN0IGU9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gSC5mb3JFYWNoKG4udG9KU09OKCksKHQsYSk9PntlW2FdPUxDKHQpfSksZX1jb25zdCBuaD1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uIGJhKG4pe3JldHVybiBuJiZTdHJpbmcobikudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gbmMobil7cmV0dXJuIG49PT0hMXx8bj09bnVsbD9uOkguaXNBcnJheShuKT9uLm1hcChuYyk6JEMoU3RyaW5nKG4pKX1mdW5jdGlvbiB6QyhuKXtjb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCksdD0vKFteXHMsOz1dKylccyooPzo9XHMqKFteLDtdKykpPy9nO2xldCBhO2Zvcig7YT10LmV4ZWMobik7KWVbYVsxXV09YVsyXTtyZXR1cm4gZX1jb25zdCBqQz1uPT4vXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KG4udHJpbSgpKTtmdW5jdGlvbiBfdShuLGUsdCxhLHMpe2lmKEguaXNGdW5jdGlvbihhKSlyZXR1cm4gYS5jYWxsKHRoaXMsZSx0KTtpZihzJiYoZT10KSwhIUguaXNTdHJpbmcoZSkpe2lmKEguaXNTdHJpbmcoYSkpcmV0dXJuIGUuaW5kZXhPZihhKSE9PS0xO2lmKEguaXNSZWdFeHAoYSkpcmV0dXJuIGEudGVzdChlKX19ZnVuY3Rpb24gVkMobil7cmV0dXJuIG4udHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcZF0pKFx3KikvZywoZSx0LGEpPT50LnRvVXBwZXJDYXNlKCkrYSl9ZnVuY3Rpb24gR0MobixlKXtjb25zdCB0PUgudG9DYW1lbENhc2UoIiAiK2UpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChhPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sYSt0LHtfX3Byb3RvX186bnVsbCx2YWx1ZTpmdW5jdGlvbihzLHIsbyl7cmV0dXJuIHRoaXNbYV0uY2FsbCh0aGlzLGUscyxyLG8pfSxjb25maWd1cmFibGU6ITB9KX0pfWxldCBrdD1jbGFzc3tjb25zdHJ1Y3RvcihlKXtlJiZ0aGlzLnNldChlKX1zZXQoZSx0LGEpe2NvbnN0IHM9dGhpcztmdW5jdGlvbiByKGksYyxmKXtjb25zdCBkPWJhKGMpO2lmKCFkKXJldHVybjtjb25zdCBwPUguZmluZEtleShzLGQpOyghcHx8c1twXT09PXZvaWQgMHx8Zj09PSEwfHxmPT09dm9pZCAwJiZzW3BdIT09ITEpJiYoc1twfHxjXT1uYyhpKSl9Y29uc3Qgbz0oaSxjKT0+SC5mb3JFYWNoKGksKGYsZCk9PnIoZixkLGMpKTtpZihILmlzUGxhaW5PYmplY3QoZSl8fGUgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKW8oZSx0KTtlbHNlIGlmKEguaXNTdHJpbmcoZSkmJihlPWUudHJpbSgpKSYmIWpDKGUpKW8oTkMoZSksdCk7ZWxzZSBpZihILmlzT2JqZWN0KGUpJiZILmlzU2FmZUl0ZXJhYmxlKGUpKXtsZXQgaT1PYmplY3QuY3JlYXRlKG51bGwpLGMsZjtmb3IoY29uc3QgZCBvZiBlKXtpZighSC5pc0FycmF5KGQpKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBpdGVyYXRvciBtdXN0IHJldHVybiBhIGtleS12YWx1ZSBwYWlyIik7Zj1kWzBdLEguaGFzT3duUHJvcChpLGYpPyhjPWlbZl0saVtmXT1ILmlzQXJyYXkoYyk/Wy4uLmMsZFsxXV06W2MsZFsxXV0pOmlbZl09ZFsxXX1vKGksdCl9ZWxzZSBlIT1udWxsJiZyKHQsZSxhKTtyZXR1cm4gdGhpc31nZXQoZSx0KXtpZihlPWJhKGUpLGUpe2NvbnN0IGE9SC5maW5kS2V5KHRoaXMsZSk7aWYoYSl7Y29uc3Qgcz10aGlzW2FdO2lmKCF0KXJldHVybiBzO2lmKHQ9PT0hMClyZXR1cm4gekMocyk7aWYoSC5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxzLGEpO2lmKEguaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhzKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKGUsdCl7aWYoZT1iYShlKSxlKXtjb25zdCBhPUguZmluZEtleSh0aGlzLGUpO3JldHVybiEhKGEmJnRoaXNbYV0hPT12b2lkIDAmJighdHx8X3UodGhpcyx0aGlzW2FdLGEsdCkpKX1yZXR1cm4hMX1kZWxldGUoZSx0KXtjb25zdCBhPXRoaXM7bGV0IHM9ITE7ZnVuY3Rpb24gcihvKXtpZihvPWJhKG8pLG8pe2NvbnN0IGk9SC5maW5kS2V5KGEsbyk7aSYmKCF0fHxfdShhLGFbaV0saSx0KSkmJihkZWxldGUgYVtpXSxzPSEwKX19cmV0dXJuIEguaXNBcnJheShlKT9lLmZvckVhY2gocik6cihlKSxzfWNsZWFyKGUpe2NvbnN0IHQ9T2JqZWN0LmtleXModGhpcyk7bGV0IGE9dC5sZW5ndGgscz0hMTtmb3IoO2EtLTspe2NvbnN0IHI9dFthXTsoIWV8fF91KHRoaXMsdGhpc1tyXSxyLGUsITApKSYmKGRlbGV0ZSB0aGlzW3JdLHM9ITApfXJldHVybiBzfW5vcm1hbGl6ZShlKXtjb25zdCB0PXRoaXMsYT17fTtyZXR1cm4gSC5mb3JFYWNoKHRoaXMsKHMscik9Pntjb25zdCBvPUguZmluZEtleShhLHIpO2lmKG8pe3Rbb109bmMocyksZGVsZXRlIHRbcl07cmV0dXJufWNvbnN0IGk9ZT9WQyhyKTpTdHJpbmcocikudHJpbSgpO2khPT1yJiZkZWxldGUgdFtyXSx0W2ldPW5jKHMpLGFbaV09ITB9KSx0aGlzfWNvbmNhdCguLi5lKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5lKX10b0pTT04oZSl7Y29uc3QgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBILmZvckVhY2godGhpcywoYSxzKT0+e2EhPW51bGwmJmEhPT0hMSYmKHRbc109ZSYmSC5pc0FycmF5KGEpP2Euam9pbigiLCAiKTphKX0pLHR9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2UsdF0pPT5lKyI6ICIrdCkuam9pbihgCmApfWdldFNldENvb2tpZSgpe3JldHVybiB0aGlzLmdldCgic2V0LWNvb2tpZSIpfHxbXX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGhpcz9lOm5ldyB0aGlzKGUpfXN0YXRpYyBjb25jYXQoZSwuLi50KXtjb25zdCBhPW5ldyB0aGlzKGUpO3JldHVybiB0LmZvckVhY2gocz0+YS5zZXQocykpLGF9c3RhdGljIGFjY2Vzc29yKGUpe2NvbnN0IGE9KHRoaXNbbmhdPXRoaXNbbmhdPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMscz10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiByKG8pe2NvbnN0IGk9YmEobyk7YVtpXXx8KEdDKHMsbyksYVtpXT0hMCl9cmV0dXJuIEguaXNBcnJheShlKT9lLmZvckVhY2gocik6cihlKSx0aGlzfX07a3QuYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO0gucmVkdWNlRGVzY3JpcHRvcnMoa3QucHJvdG90eXBlLCh7dmFsdWU6bn0sZSk9PntsZXQgdD1lWzBdLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5uLHNldChhKXt0aGlzW3RdPWF9fX0pO0guZnJlZXplTWV0aG9kcyhrdCk7Y29uc3QgSEM9IltSRURBQ1RFRCAqKioqXSI7ZnVuY3Rpb24gS0Mobil7aWYoSC5oYXNPd25Qcm9wKG4sInRvSlNPTiIpKXJldHVybiEwO2xldCBlPU9iamVjdC5nZXRQcm90b3R5cGVPZihuKTtmb3IoO2UmJmUhPT1PYmplY3QucHJvdG90eXBlOyl7aWYoSC5oYXNPd25Qcm9wKGUsInRvSlNPTiIpKXJldHVybiEwO2U9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfXJldHVybiExfWZ1bmN0aW9uIFpDKG4sZSl7Y29uc3QgdD1uZXcgU2V0KGUubWFwKHI9PlN0cmluZyhyKS50b0xvd2VyQ2FzZSgpKSksYT1bXSxzPXI9PntpZihyPT09bnVsbHx8dHlwZW9mIHIhPSJvYmplY3QifHxILmlzQnVmZmVyKHIpKXJldHVybiByO2lmKGEuaW5kZXhPZihyKSE9PS0xKXJldHVybjtyIGluc3RhbmNlb2Yga3QmJihyPXIudG9KU09OKCkpLGEucHVzaChyKTtsZXQgbztpZihILmlzQXJyYXkocikpbz1bXSxyLmZvckVhY2goKGksYyk9Pntjb25zdCBmPXMoaSk7SC5pc1VuZGVmaW5lZChmKXx8KG9bY109Zil9KTtlbHNle2lmKCFILmlzUGxhaW5PYmplY3QocikmJktDKHIpKXJldHVybiBhLnBvcCgpLHI7bz1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdFtpLGNdb2YgT2JqZWN0LmVudHJpZXMocikpe2NvbnN0IGY9dC5oYXMoaS50b0xvd2VyQ2FzZSgpKT9IQzpzKGMpO0guaXNVbmRlZmluZWQoZil8fChvW2ldPWYpfX1yZXR1cm4gYS5wb3AoKSxvfTtyZXR1cm4gcyhuKX1sZXQgeGU9Y2xhc3MgZXggZXh0ZW5kcyBFcnJvcntzdGF0aWMgZnJvbShlLHQsYSxzLHIsbyl7Y29uc3QgaT1uZXcgZXgoZS5tZXNzYWdlLHR8fGUuY29kZSxhLHMscik7cmV0dXJuIGkuY2F1c2U9ZSxpLm5hbWU9ZS5uYW1lLGUuc3RhdHVzIT1udWxsJiZpLnN0YXR1cz09bnVsbCYmKGkuc3RhdHVzPWUuc3RhdHVzKSxvJiZPYmplY3QuYXNzaWduKGksbyksaX1jb25zdHJ1Y3RvcihlLHQsYSxzLHIpe3N1cGVyKGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJtZXNzYWdlIix7X19wcm90b19fOm51bGwsdmFsdWU6ZSxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsdGhpcy5pc0F4aW9zRXJyb3I9ITAsdCYmKHRoaXMuY29kZT10KSxhJiYodGhpcy5jb25maWc9YSkscyYmKHRoaXMucmVxdWVzdD1zKSxyJiYodGhpcy5yZXNwb25zZT1yLHRoaXMuc3RhdHVzPXIuc3RhdHVzKX10b0pTT04oKXtjb25zdCBlPXRoaXMuY29uZmlnLHQ9ZSYmSC5oYXNPd25Qcm9wKGUsInJlZGFjdCIpP2UucmVkYWN0OnZvaWQgMCxhPUguaXNBcnJheSh0KSYmdC5sZW5ndGg+MD9aQyhlLHQpOkgudG9KU09OT2JqZWN0KGUpO3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzphLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnN0YXR1c319fTt4ZS5FUlJfQkFEX09QVElPTl9WQUxVRT0iRVJSX0JBRF9PUFRJT05fVkFMVUUiO3hlLkVSUl9CQURfT1BUSU9OPSJFUlJfQkFEX09QVElPTiI7eGUuRUNPTk5BQk9SVEVEPSJFQ09OTkFCT1JURUQiO3hlLkVUSU1FRE9VVD0iRVRJTUVET1VUIjt4ZS5FQ09OTlJFRlVTRUQ9IkVDT05OUkVGVVNFRCI7eGUuRVJSX05FVFdPUks9IkVSUl9ORVRXT1JLIjt4ZS5FUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTPSJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIjt4ZS5FUlJfREVQUkVDQVRFRD0iRVJSX0RFUFJFQ0FURUQiO3hlLkVSUl9CQURfUkVTUE9OU0U9IkVSUl9CQURfUkVTUE9OU0UiO3hlLkVSUl9CQURfUkVRVUVTVD0iRVJSX0JBRF9SRVFVRVNUIjt4ZS5FUlJfQ0FOQ0VMRUQ9IkVSUl9DQU5DRUxFRCI7eGUuRVJSX05PVF9TVVBQT1JUPSJFUlJfTk9UX1NVUFBPUlQiO3hlLkVSUl9JTlZBTElEX1VSTD0iRVJSX0lOVkFMSURfVVJMIjt4ZS5FUlJfRk9STV9EQVRBX0RFUFRIX0VYQ0VFREVEPSJFUlJfRk9STV9EQVRBX0RFUFRIX0VYQ0VFREVEIjtjb25zdCBxQz1udWxsLHR4PTEwMDtmdW5jdGlvbiBnZChuKXtyZXR1cm4gSC5pc1BsYWluT2JqZWN0KG4pfHxILmlzQXJyYXkobil9ZnVuY3Rpb24gcngobil7cmV0dXJuIEguZW5kc1dpdGgobiwiW10iKT9uLnNsaWNlKDAsLTIpOm59ZnVuY3Rpb24gT3UobixlLHQpe3JldHVybiBuP24uY29uY2F0KGUpLm1hcChmdW5jdGlvbihzLHIpe3JldHVybiBzPXJ4KHMpLCF0JiZyPyJbIitzKyJdIjpzfSkuam9pbih0PyIuIjoiIik6ZX1mdW5jdGlvbiBKQyhuKXtyZXR1cm4gSC5pc0FycmF5KG4pJiYhbi5zb21lKGdkKX1jb25zdCBZQz1ILnRvRmxhdE9iamVjdChILHt9LG51bGwsZnVuY3Rpb24oZSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KGUpfSk7ZnVuY3Rpb24gamMobixlLHQpe2lmKCFILmlzT2JqZWN0KG4pKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO2U9ZXx8bmV3IEZvcm1EYXRhLHQ9SC50b0ZsYXRPYmplY3QodCx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKHcsQil7cmV0dXJuIUguaXNVbmRlZmluZWQoQlt3XSl9KTtjb25zdCBhPXQubWV0YVRva2VucyxzPXQudmlzaXRvcnx8VyxyPXQuZG90cyxvPXQuaW5kZXhlcyxpPXQuQmxvYnx8dHlwZW9mIEJsb2I8InUiJiZCbG9iLGM9dC5tYXhEZXB0aD09PXZvaWQgMD90eDp0Lm1heERlcHRoLGY9aSYmSC5pc1NwZWNDb21wbGlhbnRGb3JtKGUpLGQ9W107aWYoIUguaXNGdW5jdGlvbihzKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIHAobSl7aWYobT09PW51bGwpcmV0dXJuIiI7aWYoSC5pc0RhdGUobSkpcmV0dXJuIG0udG9JU09TdHJpbmcoKTtpZihILmlzQm9vbGVhbihtKSlyZXR1cm4gbS50b1N0cmluZygpO2lmKCFmJiZILmlzQmxvYihtKSl0aHJvdyBuZXcgeGUoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIEguaXNBcnJheUJ1ZmZlcihtKXx8SC5pc1R5cGVkQXJyYXkobSk/ZiYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW21dKTpreC5mcm9tKG0pOm19ZnVuY3Rpb24gYihtKXtpZihtPmMpdGhyb3cgbmV3IHhlKCJPYmplY3QgaXMgdG9vIGRlZXBseSBuZXN0ZWQgKCIrbSsiIGxldmVscykuIE1heCBkZXB0aDogIitjLHhlLkVSUl9GT1JNX0RBVEFfREVQVEhfRVhDRUVERUQpfWZ1bmN0aW9uIFQobSx3KXtpZihjPT09MS8wKXJldHVybiBKU09OLnN0cmluZ2lmeShtKTtjb25zdCBCPVtdO3JldHVybiBKU09OLnN0cmluZ2lmeShtLGZ1bmN0aW9uKFYsTCl7aWYoIUguaXNPYmplY3QoTCkpcmV0dXJuIEw7Zm9yKDtCLmxlbmd0aCYmQltCLmxlbmd0aC0xXSE9PXRoaXM7KUIucG9wKCk7cmV0dXJuIEIucHVzaChMKSxiKHcrQi5sZW5ndGgtMSksTH0pfWZ1bmN0aW9uIFcobSx3LEIpe2xldCBrPW07aWYoSC5pc1JlYWN0TmF0aXZlKGUpJiZILmlzUmVhY3ROYXRpdmVCbG9iKG0pKXJldHVybiBlLmFwcGVuZChPdShCLHcscikscChtKSksITE7aWYobSYmIUImJnR5cGVvZiBtPT0ib2JqZWN0Iil7aWYoSC5lbmRzV2l0aCh3LCJ7fSIpKXc9YT93Oncuc2xpY2UoMCwtMiksbT1UKG0sMSk7ZWxzZSBpZihILmlzQXJyYXkobSkmJkpDKG0pfHwoSC5pc0ZpbGVMaXN0KG0pfHxILmVuZHNXaXRoKHcsIltdIikpJiYoaz1ILnRvQXJyYXkobSkpKXJldHVybiB3PXJ4KHcpLGsuZm9yRWFjaChmdW5jdGlvbihMLEkpeyEoSC5pc1VuZGVmaW5lZChMKXx8TD09PW51bGwpJiZlLmFwcGVuZChvPT09ITA/T3UoW3ddLEkscik6bz09PW51bGw/dzp3KyJbXSIscChMKSl9KSwhMX1yZXR1cm4gZ2QobSk/ITA6KGUuYXBwZW5kKE91KEIsdyxyKSxwKG0pKSwhMSl9Y29uc3QgZz1PYmplY3QuYXNzaWduKFlDLHtkZWZhdWx0VmlzaXRvcjpXLGNvbnZlcnRWYWx1ZTpwLGlzVmlzaXRhYmxlOmdkfSk7ZnVuY3Rpb24gQShtLHcsQj0wKXtpZighSC5pc1VuZGVmaW5lZChtKSl7aWYoYihCKSxkLmluZGV4T2YobSkhPT0tMSl0aHJvdyBuZXcgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK3cuam9pbigiLiIpKTtkLnB1c2gobSksSC5mb3JFYWNoKG0sZnVuY3Rpb24oVixMKXsoIShILmlzVW5kZWZpbmVkKFYpfHxWPT09bnVsbCkmJnMuY2FsbChlLFYsSC5pc1N0cmluZyhMKT9MLnRyaW0oKTpMLHcsZykpPT09ITAmJkEoVix3P3cuY29uY2F0KEwpOltMXSxCKzEpfSksZC5wb3AoKX19aWYoIUguaXNPYmplY3QobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBBKG4pLGV9ZnVuY3Rpb24gb2gobil7Y29uc3QgZT17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQobikucmVwbGFjZSgvWyEnKCl+XXwlMjAvZyxmdW5jdGlvbihhKXtyZXR1cm4gZVthXX0pfWZ1bmN0aW9uIGwwKG4sZSl7dGhpcy5fcGFpcnM9W10sbiYmamMobix0aGlzLGUpfWNvbnN0IG54PWwwLnByb3RvdHlwZTtueC5hcHBlbmQ9ZnVuY3Rpb24oZSx0KXt0aGlzLl9wYWlycy5wdXNoKFtlLHRdKX07bngudG9TdHJpbmc9ZnVuY3Rpb24oZSl7Y29uc3QgdD1lP2Z1bmN0aW9uKGEpe3JldHVybiBlLmNhbGwodGhpcyxhLG9oKX06b2g7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gdChzWzBdKSsiPSIrdChzWzFdKX0sIiIpLmpvaW4oIiYiKX07ZnVuY3Rpb24gWEMobil7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChuKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIil9ZnVuY3Rpb24gb3gobixlLHQpe2lmKCFlKXJldHVybiBuO2NvbnN0IGE9SC5pc0Z1bmN0aW9uKHQpP3tzZXJpYWxpemU6dH06dCxzPUguZ2V0U2FmZVByb3AoYSwiZW5jb2RlIil8fFhDLHI9SC5nZXRTYWZlUHJvcChhLCJzZXJpYWxpemUiKTtsZXQgbztpZihyP289cihlLGEpOm89SC5pc1VSTFNlYXJjaFBhcmFtcyhlKT9lLnRvU3RyaW5nKCk6bmV3IGwwKGUsYSkudG9TdHJpbmcocyksbyl7Y29uc3QgaT1uLmluZGV4T2YoIiMiKTtpIT09LTEmJihuPW4uc2xpY2UoMCxpKSksbis9KG4uaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrb31yZXR1cm4gbn1jbGFzcyBzaHtjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKGUsdCxhKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6ZSxyZWplY3RlZDp0LHN5bmNocm9ub3VzOmE/YS5zeW5jaHJvbm91czohMSxydW5XaGVuOmE/YS5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KGUpe3RoaXMuaGFuZGxlcnNbZV0mJih0aGlzLmhhbmRsZXJzW2VdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2goZSl7SC5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24oYSl7YSE9PW51bGwmJmUoYSl9KX19Y29uc3QgZjA9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITEsbGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZzohMCxhZHZlcnRpc2Vac3RkQWNjZXB0RW5jb2Rpbmc6ITEsdmFsaWRhdGVTdGF0dXNVbmRlZmluZWRSZXNvbHZlczohMH0sUUM9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOmwwLGVFPXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbCx0RT10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsLHJFPXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOlFDLEZvcm1EYXRhOmVFLEJsb2I6dEV9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfSxkMD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IixiZD10eXBlb2YgbmF2aWdhdG9yPT0ib2JqZWN0IiYmbmF2aWdhdG9yfHx2b2lkIDAsbkU9ZDAmJighYmR8fFsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoYmQucHJvZHVjdCk8MCksb0U9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iLHNFPWQwJiZ3aW5kb3cubG9jYXRpb24uaHJlZnx8Imh0dHA6Ly9sb2NhbGhvc3QiLGFFPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxoYXNCcm93c2VyRW52OmQwLGhhc1N0YW5kYXJkQnJvd3NlckVudjpuRSxoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6b0UsbmF2aWdhdG9yOmJkLG9yaWdpbjpzRX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxXdD17Li4uYUUsLi4uckV9O2Z1bmN0aW9uIGlFKG4sZSl7cmV0dXJuIGpjKG4sbmV3IFd0LmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLHt2aXNpdG9yOmZ1bmN0aW9uKHQsYSxzLHIpe3JldHVybiBXdC5pc05vZGUmJkguaXNCdWZmZXIodCk/KHRoaXMuYXBwZW5kKGEsdC50b1N0cmluZygiYmFzZTY0IikpLCExKTpyLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sLi4uZX0pfWNvbnN0IGFoPXR4O2Z1bmN0aW9uIHN4KG4pe2lmKG4+YWgpdGhyb3cgbmV3IHhlKCJGb3JtRGF0YSBmaWVsZCBpcyB0b28gZGVlcGx5IG5lc3RlZCAoIituKyIgbGV2ZWxzKS4gTWF4IGRlcHRoOiAiK2FoLHhlLkVSUl9GT1JNX0RBVEFfREVQVEhfRVhDRUVERUQpfWZ1bmN0aW9uIGNFKG4pe2NvbnN0IGU9W10sdD0vXHcrfFxbKFx3KildL2c7bGV0IGE7Zm9yKDsoYT10LmV4ZWMobikpIT09bnVsbDspc3goZS5sZW5ndGgpLGUucHVzaChhWzBdPT09IltdIj8iIjphWzFdfHxhWzBdKTtyZXR1cm4gZX1mdW5jdGlvbiB1RShuKXtjb25zdCBlPXt9LHQ9T2JqZWN0LmtleXMobik7bGV0IGE7Y29uc3Qgcz10Lmxlbmd0aDtsZXQgcjtmb3IoYT0wO2E8czthKyspcj10W2FdLGVbcl09bltyXTtyZXR1cm4gZX1mdW5jdGlvbiBheChuKXtmdW5jdGlvbiBlKHQsYSxzLHIpe3N4KHIpO2xldCBvPXRbcisrXTtpZihvPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7Y29uc3QgaT1OdW1iZXIuaXNGaW5pdGUoK28pLGM9cj49dC5sZW5ndGg7cmV0dXJuIG89IW8mJkguaXNBcnJheShzKT9zLmxlbmd0aDpvLGM/KEguaGFzT3duUHJvcChzLG8pP3Nbb109SC5pc0FycmF5KHNbb10pP3Nbb10uY29uY2F0KGEpOltzW29dLGFdOnNbb109YSwhaSk6KCghSC5oYXNPd25Qcm9wKHMsbyl8fCFILmlzT2JqZWN0KHNbb10pKSYmKHNbb109W10pLGUodCxhLHNbb10scikmJkguaXNBcnJheShzW29dKSYmKHNbb109dUUoc1tvXSkpLCFpKX1pZihILmlzRm9ybURhdGEobikmJkguaXNGdW5jdGlvbihuLmVudHJpZXMpKXtjb25zdCB0PXt9O3JldHVybiBILmZvckVhY2hFbnRyeShuLChhLHMpPT57ZShjRShhKSxzLHQsMCl9KSx0fXJldHVybiBudWxsfWNvbnN0IFhvPShuLGUpPT5uIT1udWxsJiZILmhhc093blByb3AobixlKT9uW2VdOnZvaWQgMDtmdW5jdGlvbiBsRShuLGUsdCl7aWYoSC5pc1N0cmluZyhuKSl0cnl7cmV0dXJuKGV8fEpTT04ucGFyc2UpKG4pLEgudHJpbShuKX1jYXRjaChhKXtpZihhLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IGF9cmV0dXJuKHR8fEpTT04uc3RyaW5naWZ5KShuKX1jb25zdCB1aT17dHJhbnNpdGlvbmFsOmYwLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIiwiZmV0Y2giXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe2NvbnN0IGE9dC5nZXRDb250ZW50VHlwZSgpfHwiIixzPWEuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLHI9SC5pc09iamVjdChlKTtpZihyJiZILmlzSFRNTEZvcm0oZSkmJihlPW5ldyBGb3JtRGF0YShlKSksSC5pc0Zvcm1EYXRhKGUpKXJldHVybiBzP0pTT04uc3RyaW5naWZ5KGF4KGUpKTplO2lmKEguaXNBcnJheUJ1ZmZlcihlKXx8SC5pc0J1ZmZlcihlKXx8SC5pc1N0cmVhbShlKXx8SC5pc0ZpbGUoZSl8fEguaXNCbG9iKGUpfHxILmlzUmVhZGFibGVTdHJlYW0oZSkpcmV0dXJuIGU7aWYoSC5pc0FycmF5QnVmZmVyVmlldyhlKSlyZXR1cm4gZS5idWZmZXI7aWYoSC5pc1VSTFNlYXJjaFBhcmFtcyhlKSlyZXR1cm4gdC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSxlLnRvU3RyaW5nKCk7bGV0IGk7aWYocil7Y29uc3QgYz1Ybyh0aGlzLCJmb3JtU2VyaWFsaXplciIpO2lmKGEuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIGlFKGUsYykudG9TdHJpbmcoKTtpZigoaT1ILmlzRmlsZUxpc3QoZSkpfHxhLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7Y29uc3QgZj1Ybyh0aGlzLCJlbnYiKSxkPWYmJmYuRm9ybURhdGE7cmV0dXJuIGpjKGk/eyJmaWxlc1tdIjplfTplLGQmJm5ldyBkLGMpfX1yZXR1cm4gcnx8cz8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLGxFKGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe2NvbnN0IHQ9WG8odGhpcywidHJhbnNpdGlvbmFsIil8fHVpLnRyYW5zaXRpb25hbCxhPXQmJnQuZm9yY2VkSlNPTlBhcnNpbmcscz1Ybyh0aGlzLCJyZXNwb25zZVR5cGUiKSxyPXM9PT0ianNvbiI7aWYoSC5pc1Jlc3BvbnNlKGUpfHxILmlzUmVhZGFibGVTdHJlYW0oZSkpcmV0dXJuIGU7aWYoZSYmSC5pc1N0cmluZyhlKSYmKGEmJiFzfHxyKSl7Y29uc3QgaT0hKHQmJnQuc2lsZW50SlNPTlBhcnNpbmcpJiZyO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlLFhvKHRoaXMsInBhcnNlUmV2aXZlciIpKX1jYXRjaChjKXtpZihpKXRocm93IGMubmFtZT09PSJTeW50YXhFcnJvciI/eGUuZnJvbShjLHhlLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLFhvKHRoaXMsInJlc3BvbnNlIikpOmN9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTpXdC5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6V3QuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O0guZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJxdWVyeSJdLG49Pnt1aS5oZWFkZXJzW25dPXt9fSk7ZnVuY3Rpb24gUnUobixlKXtjb25zdCB0PXRoaXN8fHVpLGE9ZXx8dCxzPWt0LmZyb20oYS5oZWFkZXJzKTtsZXQgcj1hLmRhdGE7cmV0dXJuIEguZm9yRWFjaChuLGZ1bmN0aW9uKGkpe3I9aS5jYWxsKHQscixzLm5vcm1hbGl6ZSgpLGU/ZS5zdGF0dXM6dm9pZCAwKX0pLHMubm9ybWFsaXplKCkscn1mdW5jdGlvbiBpeChuKXtyZXR1cm4hIShuJiZuLl9fQ0FOQ0VMX18pfWxldCBsaT1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcihlPz8iY2FuY2VsZWQiLHhlLkVSUl9DQU5DRUxFRCx0LGEpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciIsdGhpcy5fX0NBTkNFTF9fPSEwfX07ZnVuY3Rpb24gY3gobixlLHQpe2NvbnN0IGE9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhYXx8YSh0LnN0YXR1cyk/bih0KTplKG5ldyB4ZSgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK3Quc3RhdHVzLHQuc3RhdHVzPj00MDAmJnQuc3RhdHVzPDUwMD94ZS5FUlJfQkFEX1JFUVVFU1Q6eGUuRVJSX0JBRF9SRVNQT05TRSx0LmNvbmZpZyx0LnJlcXVlc3QsdCkpfWZ1bmN0aW9uIGZFKG4pe2NvbnN0IGU9L14oWy0rXHddezEsMjV9KTooPzpcL1wvKT8vLmV4ZWMobik7cmV0dXJuIGUmJmVbMV18fCIifWZ1bmN0aW9uIGRFKG4sZSl7bj1ufHwxMDtjb25zdCB0PW5ldyBBcnJheShuKSxhPW5ldyBBcnJheShuKTtsZXQgcz0wLHI9MCxvO3JldHVybiBlPWUhPT12b2lkIDA/ZToxZTMsZnVuY3Rpb24oYyl7Y29uc3QgZj1EYXRlLm5vdygpLGQ9YVtyXTtvfHwobz1mKSx0W3NdPWMsYVtzXT1mO2xldCBwPXIsYj0wO2Zvcig7cCE9PXM7KWIrPXRbcCsrXSxwPXAlbjtpZihzPShzKzEpJW4scz09PXImJihyPShyKzEpJW4pLGYtbzxlKXJldHVybjtjb25zdCBUPWQmJmYtZDtyZXR1cm4gVD9NYXRoLnJvdW5kKGIqMWUzL1QpOnZvaWQgMH19ZnVuY3Rpb24gcEUobixlKXtsZXQgdD0wLGE9MWUzL2UscyxyO2NvbnN0IG89KGYsZD1EYXRlLm5vdygpKT0+e3Q9ZCxzPW51bGwsciYmKGNsZWFyVGltZW91dChyKSxyPW51bGwpLG4oLi4uZil9O3JldHVyblsoLi4uZik9Pntjb25zdCBkPURhdGUubm93KCkscD1kLXQ7cD49YT9vKGYsZCk6KHM9ZixyfHwocj1zZXRUaW1lb3V0KCgpPT57cj1udWxsLG8ocyl9LGEtcCkpKX0sKCk9PnMmJm8ocyldfWNvbnN0IGdjPShuLGUsdD0zKT0+e2xldCBhPTA7Y29uc3Qgcz1kRSg1MCwyNTApO3JldHVybiBwRShyPT57aWYoIXJ8fHR5cGVvZiByLmxvYWRlZCE9Im51bWJlciIpcmV0dXJuO2NvbnN0IG89ci5sb2FkZWQsaT1yLmxlbmd0aENvbXB1dGFibGU/ci50b3RhbDp2b2lkIDAsYz1pIT1udWxsP01hdGgubWluKG8saSk6byxmPU1hdGgubWF4KDAsYy1hKSxkPXMoZik7YT1NYXRoLm1heChhLGMpO2NvbnN0IHA9e2xvYWRlZDpjLHRvdGFsOmkscHJvZ3Jlc3M6aT9jL2k6dm9pZCAwLGJ5dGVzOmYscmF0ZTpkfHx2b2lkIDAsZXN0aW1hdGVkOmQmJmk/KGktYykvZDp2b2lkIDAsZXZlbnQ6cixsZW5ndGhDb21wdXRhYmxlOmkhPW51bGwsW2U/ImRvd25sb2FkIjoidXBsb2FkIl06ITB9O24ocCl9LHQpfSxpaD0obixlKT0+e2NvbnN0IHQ9biE9bnVsbDtyZXR1cm5bYT0+ZVswXSh7bGVuZ3RoQ29tcHV0YWJsZTp0LHRvdGFsOm4sbG9hZGVkOmF9KSxlWzFdXX0sY2g9bj0+KC4uLmUpPT5ILmFzYXAoKCk9Pm4oLi4uZSkpLGhFPVd0Lmhhc1N0YW5kYXJkQnJvd3NlckVudj8oKG4sZSk9PnQ9Pih0PW5ldyBVUkwodCxXdC5vcmlnaW4pLG4ucHJvdG9jb2w9PT10LnByb3RvY29sJiZuLmhvc3Q9PT10Lmhvc3QmJihlfHxuLnBvcnQ9PT10LnBvcnQpKSkobmV3IFVSTChXdC5vcmlnaW4pLFd0Lm5hdmlnYXRvciYmLyhtc2llfHRyaWRlbnQpL2kudGVzdChXdC5uYXZpZ2F0b3IudXNlckFnZW50KSk6KCk9PiEwLGdFPVd0Lmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUobixlLHQsYSxzLHIsbyl7aWYodHlwZW9mIGRvY3VtZW50PiJ1IilyZXR1cm47Y29uc3QgaT1bYCR7bn09JHtlbmNvZGVVUklDb21wb25lbnQoZSl9YF07SC5pc051bWJlcih0KSYmaS5wdXNoKGBleHBpcmVzPSR7bmV3IERhdGUodCkudG9VVENTdHJpbmcoKX1gKSxILmlzU3RyaW5nKGEpJiZpLnB1c2goYHBhdGg9JHthfWApLEguaXNTdHJpbmcocykmJmkucHVzaChgZG9tYWluPSR7c31gKSxyPT09ITAmJmkucHVzaCgic2VjdXJlIiksSC5pc1N0cmluZyhvKSYmaS5wdXNoKGBTYW1lU2l0ZT0ke299YCksZG9jdW1lbnQuY29va2llPWkuam9pbigiOyAiKX0scmVhZChuKXtpZih0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybiBudWxsO2NvbnN0IGU9ZG9jdW1lbnQuY29va2llLnNwbGl0KCI7Iik7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2NvbnN0IGE9ZVt0XS5yZXBsYWNlKC9eXHMrLywiIikscz1hLmluZGV4T2YoIj0iKTtpZihzIT09LTEmJmEuc2xpY2UoMCxzKT09PW4pcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChhLnNsaWNlKHMrMSkpfXJldHVybiBudWxsfSxyZW1vdmUobil7dGhpcy53cml0ZShuLCIiLERhdGUubm93KCktODY0ZTUsIi8iKX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBiRShuKXtyZXR1cm4gdHlwZW9mIG4hPSJzdHJpbmciPyExOi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3Qobil9ZnVuY3Rpb24geUUobixlKXtyZXR1cm4gZT9uLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIitlLnJlcGxhY2UoL15cLysvLCIiKTpufWNvbnN0IHhFPS9eaHR0cHM/Oig/IVwvXC8pL2ksVEU9L1tcdFxuXHJdL2c7ZnVuY3Rpb24gQUUobil7bGV0IGU9MDtmb3IoO2U8bi5sZW5ndGgmJm4uY2hhckNvZGVBdChlKTw9MzI7KWUrKztyZXR1cm4gbi5zbGljZShlKX1mdW5jdGlvbiBtRShuKXtyZXR1cm4gQUUobikucmVwbGFjZShURSwiIil9ZnVuY3Rpb24gdWgobixlKXtpZih0eXBlb2Ygbj09InN0cmluZyImJnhFLnRlc3QobUUobikpKXRocm93IG5ldyB4ZSgnSW52YWxpZCBVUkw6IG1pc3NpbmcgIi8vIiBhZnRlciBwcm90b2NvbCcseGUuRVJSX0lOVkFMSURfVVJMLGUpfWZ1bmN0aW9uIHV4KG4sZSx0LGEpe3VoKGUsYSk7bGV0IHM9IWJFKGUpO3JldHVybiBuJiYoc3x8dD09PSExKT8odWgobixhKSx5RShuLGUpKTplfWNvbnN0IGxoPW49Pm4gaW5zdGFuY2VvZiBrdD97Li4ubn06bjtmdW5jdGlvbiBEbyhuLGUpe2U9ZXx8e307Y29uc3QgdD1PYmplY3QuY3JlYXRlKG51bGwpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJoYXNPd25Qcm9wZXJ0eSIse19fcHJvdG9fXzpudWxsLHZhbHVlOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KTtmdW5jdGlvbiBhKGQscCxiLFQpe3JldHVybiBILmlzUGxhaW5PYmplY3QoZCkmJkguaXNQbGFpbk9iamVjdChwKT9ILm1lcmdlLmNhbGwoe2Nhc2VsZXNzOlR9LGQscCk6SC5pc1BsYWluT2JqZWN0KHApP0gubWVyZ2Uoe30scCk6SC5pc0FycmF5KHApP3Auc2xpY2UoKTpwfWZ1bmN0aW9uIHMoZCxwLGIsVCl7aWYoSC5pc1VuZGVmaW5lZChwKSl7aWYoIUguaXNVbmRlZmluZWQoZCkpcmV0dXJuIGEodm9pZCAwLGQsYixUKX1lbHNlIHJldHVybiBhKGQscCxiLFQpfWZ1bmN0aW9uIHIoZCxwKXtpZighSC5pc1VuZGVmaW5lZChwKSlyZXR1cm4gYSh2b2lkIDAscCl9ZnVuY3Rpb24gbyhkLHApe2lmKEguaXNVbmRlZmluZWQocCkpe2lmKCFILmlzVW5kZWZpbmVkKGQpKXJldHVybiBhKHZvaWQgMCxkKX1lbHNlIHJldHVybiBhKHZvaWQgMCxwKX1mdW5jdGlvbiBpKGQpe2NvbnN0IHA9SC5oYXNPd25Qcm9wKGUsInRyYW5zaXRpb25hbCIpP2UudHJhbnNpdGlvbmFsOnZvaWQgMDtpZighSC5pc1VuZGVmaW5lZChwKSlpZihILmlzUGxhaW5PYmplY3QocCkpe2lmKEguaGFzT3duUHJvcChwLGQpKXJldHVybiBwW2RdfWVsc2UgcmV0dXJuO2NvbnN0IGI9SC5oYXNPd25Qcm9wKG4sInRyYW5zaXRpb25hbCIpP24udHJhbnNpdGlvbmFsOnZvaWQgMDtpZihILmlzUGxhaW5PYmplY3QoYikmJkguaGFzT3duUHJvcChiLGQpKXJldHVybiBiW2RdfWZ1bmN0aW9uIGMoZCxwLGIpe2lmKEguaGFzT3duUHJvcChlLGIpKXJldHVybiBhKGQscCk7aWYoSC5oYXNPd25Qcm9wKG4sYikpcmV0dXJuIGEodm9pZCAwLGQpfWNvbnN0IGY9e3VybDpyLG1ldGhvZDpyLGRhdGE6cixiYXNlVVJMOm8sdHJhbnNmb3JtUmVxdWVzdDpvLHRyYW5zZm9ybVJlc3BvbnNlOm8scGFyYW1zU2VyaWFsaXplcjpvLHRpbWVvdXQ6byx0aW1lb3V0TWVzc2FnZTpvLHdpdGhDcmVkZW50aWFsczpvLHdpdGhYU1JGVG9rZW46byxhZGFwdGVyOm8scmVzcG9uc2VUeXBlOm8seHNyZkNvb2tpZU5hbWU6byx4c3JmSGVhZGVyTmFtZTpvLG9uVXBsb2FkUHJvZ3Jlc3M6byxvbkRvd25sb2FkUHJvZ3Jlc3M6byxkZWNvbXByZXNzOm8sbWF4Q29udGVudExlbmd0aDpvLG1heEJvZHlMZW5ndGg6byxiZWZvcmVSZWRpcmVjdDpvLHRyYW5zcG9ydDpvLGh0dHBBZ2VudDpvLGh0dHBzQWdlbnQ6byxjYW5jZWxUb2tlbjpvLHNvY2tldFBhdGg6byxhbGxvd2VkU29ja2V0UGF0aHM6byxyZXNwb25zZUVuY29kaW5nOm8sdmFsaWRhdGVTdGF0dXM6YyxoZWFkZXJzOihkLHAsYik9PnMobGgoZCksbGgocCksYiwhMCl9O3JldHVybiBILmZvckVhY2goT2JqZWN0LmtleXMoey4uLm4sLi4uZX0pLGZ1bmN0aW9uKHApe2lmKHA9PT0iX19wcm90b19fInx8cD09PSJjb25zdHJ1Y3RvciJ8fHA9PT0icHJvdG90eXBlIilyZXR1cm47Y29uc3QgYj1ILmhhc093blByb3AoZixwKT9mW3BdOnMsVD1ILmhhc093blByb3AobixwKT9uW3BdOnZvaWQgMCxXPUguaGFzT3duUHJvcChlLHApP2VbcF06dm9pZCAwLGc9YihULFcscCk7SC5pc1VuZGVmaW5lZChnKSYmYiE9PWN8fCh0W3BdPWcpfSksSC5oYXNPd25Qcm9wKGUsInZhbGlkYXRlU3RhdHVzIikmJkguaXNVbmRlZmluZWQoZS52YWxpZGF0ZVN0YXR1cykmJmkoInZhbGlkYXRlU3RhdHVzVW5kZWZpbmVkUmVzb2x2ZXMiKT09PSExJiYoSC5oYXNPd25Qcm9wKG4sInZhbGlkYXRlU3RhdHVzIik/dC52YWxpZGF0ZVN0YXR1cz1hKHZvaWQgMCxuLnZhbGlkYXRlU3RhdHVzKTpkZWxldGUgdC52YWxpZGF0ZVN0YXR1cyksdH1jb25zdCBQRT1bImNvbnRlbnQtdHlwZSIsImNvbnRlbnQtbGVuZ3RoIl07ZnVuY3Rpb24gd0UobixlLHQpe2lmKHQhPT0iY29udGVudC1vbmx5Iil7bi5zZXQoZSk7cmV0dXJufU9iamVjdC5lbnRyaWVzKGUpLmZvckVhY2goKFthLHNdKT0+e1BFLmluY2x1ZGVzKGEudG9Mb3dlckNhc2UoKSkmJm4uc2V0KGEscyl9KX1jb25zdCB2RT1uPT5lbmNvZGVVUklDb21wb25lbnQobikucmVwbGFjZSgvJShbMC05QS1GXXsyfSkvZ2ksKGUsdCk9PlN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQodCwxNikpKTtmdW5jdGlvbiBseChuKXtjb25zdCBlPURvKHt9LG4pLHQ9Yj0+SC5oYXNPd25Qcm9wKGUsYik/ZVtiXTp2b2lkIDAsYT10KCJkYXRhIik7bGV0IHM9dCgid2l0aFhTUkZUb2tlbiIpO2NvbnN0IHI9dCgieHNyZkhlYWRlck5hbWUiKSxvPXQoInhzcmZDb29raWVOYW1lIik7bGV0IGk9dCgiaGVhZGVycyIpO2NvbnN0IGM9dCgiYXV0aCIpLGY9dCgiYmFzZVVSTCIpLGQ9dCgiYWxsb3dBYnNvbHV0ZVVybHMiKSxwPXQoInVybCIpO2lmKGUuaGVhZGVycz1pPWt0LmZyb20oaSksZS51cmw9b3godXgoZixwLGQsZSksdCgicGFyYW1zIiksdCgicGFyYW1zU2VyaWFsaXplciIpKSxjKXtjb25zdCBiPUguZ2V0U2FmZVByb3AoYywidXNlcm5hbWUiKXx8IiIsVD1ILmdldFNhZmVQcm9wKGMsInBhc3N3b3JkIil8fCIiO2kuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKGIrIjoiKyhUP3ZFKFQpOiIiKSkpfWlmKEguaXNGb3JtRGF0YShhKSYmKFd0Lmhhc1N0YW5kYXJkQnJvd3NlckVudnx8V3QuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52fHxILmlzUmVhY3ROYXRpdmUoYSk/aS5zZXRDb250ZW50VHlwZSh2b2lkIDApOkguaXNGdW5jdGlvbihhLmdldEhlYWRlcnMpJiZ3RShpLGEuZ2V0SGVhZGVycygpLHQoImZvcm1EYXRhSGVhZGVyUG9saWN5IikpKSxXdC5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihILmlzRnVuY3Rpb24ocykmJihzPXMoZSkpLHM9PT0hMHx8cz09bnVsbCYmaEUoZS51cmwpKSl7Y29uc3QgVD1yJiZvJiZnRS5yZWFkKG8pO1QmJmkuc2V0KHIsVCl9cmV0dXJuIGV9Y29uc3QgQ0U9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1IixFRT1DRSYmZnVuY3Rpb24obil7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsYSl7Y29uc3Qgcz1seChuKTtsZXQgcj1zLmRhdGE7Y29uc3Qgbz1rdC5mcm9tKHMuaGVhZGVycykubm9ybWFsaXplKCk7bGV0e3Jlc3BvbnNlVHlwZTppLG9uVXBsb2FkUHJvZ3Jlc3M6YyxvbkRvd25sb2FkUHJvZ3Jlc3M6Zn09cyxkLHAsYixULFc7ZnVuY3Rpb24gZygpe1QmJlQoKSxXJiZXKCkscy5jYW5jZWxUb2tlbiYmcy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShkKSxzLnNpZ25hbCYmcy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGQpfWxldCBBPW5ldyBYTUxIdHRwUmVxdWVzdDtBLm9wZW4ocy5tZXRob2QudG9VcHBlckNhc2UoKSxzLnVybCwhMCksQS50aW1lb3V0PXMudGltZW91dDtmdW5jdGlvbiBtKCl7aWYoIUEpcmV0dXJuO2NvbnN0IEI9a3QuZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIEEmJkEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLFY9e2RhdGE6IWl8fGk9PT0idGV4dCJ8fGk9PT0ianNvbiI/QS5yZXNwb25zZVRleHQ6QS5yZXNwb25zZSxzdGF0dXM6QS5zdGF0dXMsc3RhdHVzVGV4dDpBLnN0YXR1c1RleHQsaGVhZGVyczpCLGNvbmZpZzpuLHJlcXVlc3Q6QX07Y3goZnVuY3Rpb24oSSl7dChJKSxnKCl9LGZ1bmN0aW9uKEkpe2EoSSksZygpfSxWKSxBPW51bGx9Im9ubG9hZGVuZCJpbiBBP0Eub25sb2FkZW5kPW06QS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshQXx8QS5yZWFkeVN0YXRlIT09NHx8QS5zdGF0dXM9PT0wJiYhKEEucmVzcG9uc2VVUkwmJkEucmVzcG9uc2VVUkwuc3RhcnRzV2l0aCgiZmlsZToiKSl8fHNldFRpbWVvdXQobSl9LEEub25hYm9ydD1mdW5jdGlvbigpe0EmJihhKG5ldyB4ZSgiUmVxdWVzdCBhYm9ydGVkIix4ZS5FQ09OTkFCT1JURUQsbixBKSksZygpLEE9bnVsbCl9LEEub25lcnJvcj1mdW5jdGlvbihrKXtjb25zdCBWPWsmJmsubWVzc2FnZT9rLm1lc3NhZ2U6Ik5ldHdvcmsgRXJyb3IiLEw9bmV3IHhlKFYseGUuRVJSX05FVFdPUkssbixBKTtMLmV2ZW50PWt8fG51bGwsYShMKSxnKCksQT1udWxsfSxBLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBrPXMudGltZW91dD8idGltZW91dCBvZiAiK3MudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIjtjb25zdCBWPXMudHJhbnNpdGlvbmFsfHxmMDtzLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihrPXMudGltZW91dEVycm9yTWVzc2FnZSksYShuZXcgeGUoayxWLmNsYXJpZnlUaW1lb3V0RXJyb3I/eGUuRVRJTUVET1VUOnhlLkVDT05OQUJPUlRFRCxuLEEpKSxnKCksQT1udWxsfSxyPT09dm9pZCAwJiZvLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIEEmJkguZm9yRWFjaChReShvKSxmdW5jdGlvbihrLFYpe0Euc2V0UmVxdWVzdEhlYWRlcihWLGspfSksSC5pc1VuZGVmaW5lZChzLndpdGhDcmVkZW50aWFscyl8fChBLndpdGhDcmVkZW50aWFscz0hIXMud2l0aENyZWRlbnRpYWxzKSxpJiZpIT09Impzb24iJiYoQS5yZXNwb25zZVR5cGU9cy5yZXNwb25zZVR5cGUpLGYmJihbYixXXT1nYyhmLCEwKSxBLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixiKSksYyYmQS51cGxvYWQmJihbcCxUXT1nYyhjKSxBLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIscCksQS51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVuZCIsVCkpLChzLmNhbmNlbFRva2VufHxzLnNpZ25hbCkmJihkPUI9PntBJiYoYSghQnx8Qi50eXBlP25ldyBsaShudWxsLG4sQSk6QiksQS5hYm9ydCgpLGcoKSxBPW51bGwpfSxzLmNhbmNlbFRva2VuJiZzLmNhbmNlbFRva2VuLnN1YnNjcmliZShkKSxzLnNpZ25hbCYmKHMuc2lnbmFsLmFib3J0ZWQ/ZCgpOnMuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixkKSkpO2NvbnN0IHc9ZkUocy51cmwpO2lmKHcmJiFXdC5wcm90b2NvbHMuaW5jbHVkZXModykpe2EobmV3IHhlKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK3crIjoiLHhlLkVSUl9CQURfUkVRVUVTVCxuKSk7cmV0dXJufUEuc2VuZChyfHxudWxsKX0pfSxXRT0obixlKT0+e2lmKG49bj9uLmZpbHRlcihCb29sZWFuKTpbXSwhZSYmIW4ubGVuZ3RoKXJldHVybjtjb25zdCB0PW5ldyBBYm9ydENvbnRyb2xsZXI7bGV0IGE9ITE7Y29uc3Qgcz1mdW5jdGlvbihjKXtpZighYSl7YT0hMCxvKCk7Y29uc3QgZj1jIGluc3RhbmNlb2YgRXJyb3I/Yzp0aGlzLnJlYXNvbjt0LmFib3J0KGYgaW5zdGFuY2VvZiB4ZT9mOm5ldyBsaShmIGluc3RhbmNlb2YgRXJyb3I/Zi5tZXNzYWdlOmYpKX19O2xldCByPWUmJnNldFRpbWVvdXQoKCk9PntyPW51bGwscyhuZXcgeGUoYHRpbWVvdXQgb2YgJHtlfW1zIGV4Y2VlZGVkYCx4ZS5FVElNRURPVVQpKX0sZSk7Y29uc3Qgbz0oKT0+e24mJihyJiZjbGVhclRpbWVvdXQocikscj1udWxsLG4uZm9yRWFjaChjPT57Yy51bnN1YnNjcmliZT9jLnVuc3Vic2NyaWJlKHMpOmMucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHMpfSksbj1udWxsKX07bi5mb3JFYWNoKGM9PmMuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHMpKTtjb25zdHtzaWduYWw6aX09dDtyZXR1cm4gaS51bnN1YnNjcmliZT0oKT0+SC5hc2FwKG8pLGl9LEJFPWZ1bmN0aW9uKihuLGUpe2xldCB0PW4uYnl0ZUxlbmd0aDtpZih0PGUpe3lpZWxkIG47cmV0dXJufWxldCBhPTAscztmb3IoO2E8dDspcz1hK2UseWllbGQgbi5zbGljZShhLHMpLGE9c30sSUU9YXN5bmMgZnVuY3Rpb24qKG4sZSl7Zm9yIGF3YWl0KGNvbnN0IHQgb2YgU0UobikpeWllbGQqQkUodCxlKX0sU0U9YXN5bmMgZnVuY3Rpb24qKG4pe2lmKG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKXt5aWVsZCpuO3JldHVybn1jb25zdCBlPW4uZ2V0UmVhZGVyKCk7dHJ5e2Zvcig7Oyl7Y29uc3R7ZG9uZTp0LHZhbHVlOmF9PWF3YWl0IGUucmVhZCgpO2lmKHQpYnJlYWs7eWllbGQgYX19ZmluYWxseXthd2FpdCBlLmNhbmNlbCgpfX0sZmg9KG4sZSx0LGEpPT57Y29uc3Qgcz1JRShuLGUpO2xldCByPTAsbyxpPWM9PntvfHwobz0hMCxhJiZhKGMpKX07cmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7YXN5bmMgcHVsbChjKXt0cnl7Y29uc3R7ZG9uZTpmLHZhbHVlOmR9PWF3YWl0IHMubmV4dCgpO2lmKGYpe2koKSxjLmNsb3NlKCk7cmV0dXJufWxldCBwPWQuYnl0ZUxlbmd0aDtpZih0KXtsZXQgYj1yKz1wO3QoYil9Yy5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KGQpKX1jYXRjaChmKXt0aHJvdyBpKGYpLGZ9fSxjYW5jZWwoYyl7cmV0dXJuIGkoYykscy5yZXR1cm4oKX19LHtoaWdoV2F0ZXJNYXJrOjJ9KX0sYmM9bj0+bj49NDgmJm48PTU3fHxuPj02NSYmbjw9NzB8fG4+PTk3JiZuPD0xMDIsX0U9KG4sZSx0KT0+ZSsyPHQmJmJjKG4uY2hhckNvZGVBdChlKzEpKSYmYmMobi5jaGFyQ29kZUF0KGUrMikpO2Z1bmN0aW9uIE9FKG4pe2lmKCFufHx0eXBlb2YgbiE9InN0cmluZyJ8fCFuLnN0YXJ0c1dpdGgoImRhdGE6IikpcmV0dXJuIDA7Y29uc3QgZT1uLmluZGV4T2YoIiwiKTtpZihlPDApcmV0dXJuIDA7Y29uc3QgdD1uLnNsaWNlKDUsZSksYT1uLnNsaWNlKGUrMSk7aWYoLztiYXNlNjQvaS50ZXN0KHQpKXtsZXQgbz1hLmxlbmd0aDtjb25zdCBpPWEubGVuZ3RoO2ZvcihsZXQgVD0wO1Q8aTtUKyspaWYoYS5jaGFyQ29kZUF0KFQpPT09MzcmJlQrMjxpKXtjb25zdCBXPWEuY2hhckNvZGVBdChUKzEpLGc9YS5jaGFyQ29kZUF0KFQrMik7YmMoVykmJmJjKGcpJiYoby09MixUKz0yKX1sZXQgYz0wLGY9aS0xO2NvbnN0IGQ9VD0+VD49MiYmYS5jaGFyQ29kZUF0KFQtMik9PT0zNyYmYS5jaGFyQ29kZUF0KFQtMSk9PT01MSYmKGEuY2hhckNvZGVBdChUKT09PTY4fHxhLmNoYXJDb2RlQXQoVCk9PT0xMDApO2Y+PTAmJihhLmNoYXJDb2RlQXQoZik9PT02MT8oYysrLGYtLSk6ZChmKSYmKGMrKyxmLT0zKSksYz09PTEmJmY+PTAmJihhLmNoYXJDb2RlQXQoZik9PT02MXx8ZChmKSkmJmMrKztjb25zdCBiPU1hdGguZmxvb3Ioby80KSozLShjfHwwKTtyZXR1cm4gYj4wP2I6MH1sZXQgcj0wO2ZvcihsZXQgbz0wLGk9YS5sZW5ndGg7bzxpO28rKyl7Y29uc3QgYz1hLmNoYXJDb2RlQXQobyk7aWYoYz09PTM3JiZfRShhLG8saSkpcis9MSxvKz0yO2Vsc2UgaWYoYzwxMjgpcis9MTtlbHNlIGlmKGM8MjA0OClyKz0yO2Vsc2UgaWYoYz49NTUyOTYmJmM8PTU2MzE5JiZvKzE8aSl7Y29uc3QgZj1hLmNoYXJDb2RlQXQobysxKTtmPj01NjMyMCYmZjw9NTczNDM/KHIrPTQsbysrKTpyKz0zfWVsc2Ugcis9M31yZXR1cm4gcn1jb25zdCBwMD0iMS4xOC4wIixkaD02NCoxMDI0LHtpc0Z1bmN0aW9uOlVpfT1ILFJFPW49PmVuY29kZVVSSUNvbXBvbmVudChuKS5yZXBsYWNlKC8lKFswLTlBLUZdezJ9KS9naSwoZSx0KT0+U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh0LDE2KSkpLHBoPW49PntpZighSC5pc1N0cmluZyhuKSlyZXR1cm4gbjt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChuKX1jYXRjaHtyZXR1cm4gbn19LGhoPShuLC4uLmUpPT57dHJ5e3JldHVybiEhbiguLi5lKX1jYXRjaHtyZXR1cm4hMX19LE1FPW49Pntjb25zdCBlPW4uaW5kZXhPZigiOi8vIik7bGV0IHQ9bjtyZXR1cm4gZSE9PS0xJiYodD10LnNsaWNlKGUrMykpLHQuaW5jbHVkZXMoIkAiKXx8dC5pbmNsdWRlcygiOiIpfSxGRT1uPT57Y29uc3QgZT1ILmdsb2JhbCE9PXZvaWQgMCYmSC5nbG9iYWwhPT1udWxsP0guZ2xvYmFsOmdsb2JhbFRoaXMse1JlYWRhYmxlU3RyZWFtOnQsVGV4dEVuY29kZXI6YX09ZTtuPUgubWVyZ2UuY2FsbCh7c2tpcFVuZGVmaW5lZDohMH0se1JlcXVlc3Q6ZS5SZXF1ZXN0LFJlc3BvbnNlOmUuUmVzcG9uc2V9LG4pO2NvbnN0e2ZldGNoOnMsUmVxdWVzdDpyLFJlc3BvbnNlOm99PW4saT1zP1VpKHMpOnR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIixjPVVpKHIpLGY9VWkobyk7aWYoIWkpcmV0dXJuITE7Y29uc3QgZD1pJiZVaSh0KSxwPWkmJih0eXBlb2YgYT09ImZ1bmN0aW9uIj8obT0+dz0+bS5lbmNvZGUodykpKG5ldyBhKTphc3luYyBtPT5uZXcgVWludDhBcnJheShhd2FpdCBuZXcgcihtKS5hcnJheUJ1ZmZlcigpKSksYj1jJiZkJiZoaCgoKT0+e2xldCBtPSExO2NvbnN0IHc9bmV3IHIoV3Qub3JpZ2luLHtib2R5Om5ldyB0LG1ldGhvZDoiUE9TVCIsZ2V0IGR1cGxleCgpe3JldHVybiBtPSEwLCJoYWxmIn19KSxCPXcuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpO3JldHVybiB3LmJvZHkhPW51bGwmJncuYm9keS5jYW5jZWwoKSxtJiYhQn0pLFQ9ZiYmZCYmaGgoKCk9PkguaXNSZWFkYWJsZVN0cmVhbShuZXcgbygiIikuYm9keSkpLFc9e3N0cmVhbTpUJiYobT0+bS5ib2R5KX07aSYmWyJ0ZXh0IiwiYXJyYXlCdWZmZXIiLCJibG9iIiwiZm9ybURhdGEiLCJzdHJlYW0iXS5mb3JFYWNoKG09PnshV1ttXSYmKFdbbV09KHcsQik9PntsZXQgaz13JiZ3W21dO2lmKGspcmV0dXJuIGsuY2FsbCh3KTt0aHJvdyBuZXcgeGUoYFJlc3BvbnNlIHR5cGUgJyR7bX0nIGlzIG5vdCBzdXBwb3J0ZWRgLHhlLkVSUl9OT1RfU1VQUE9SVCxCKX0pfSk7Y29uc3QgZz1hc3luYyBtPT57aWYobT09bnVsbClyZXR1cm4gMDtpZihILmlzQmxvYihtKSlyZXR1cm4gbS5zaXplO2lmKEguaXNTcGVjQ29tcGxpYW50Rm9ybShtKSlyZXR1cm4oYXdhaXQgbmV3IHIoV3Qub3JpZ2luLHttZXRob2Q6IlBPU1QiLGJvZHk6bX0pLmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg7aWYoSC5pc0FycmF5QnVmZmVyVmlldyhtKXx8SC5pc0FycmF5QnVmZmVyKG0pKXJldHVybiBtLmJ5dGVMZW5ndGg7aWYoSC5pc1VSTFNlYXJjaFBhcmFtcyhtKSYmKG09bSsiIiksSC5pc1N0cmluZyhtKSlyZXR1cm4oYXdhaXQgcChtKSkuYnl0ZUxlbmd0aH0sQT1hc3luYyhtLHcpPT57Y29uc3QgQj1ILnRvRmluaXRlTnVtYmVyKG0uZ2V0Q29udGVudExlbmd0aCgpKTtyZXR1cm4gQj8/Zyh3KX07cmV0dXJuIGFzeW5jIG09PntsZXR7dXJsOncsbWV0aG9kOkIsZGF0YTprLHNpZ25hbDpWLGNhbmNlbFRva2VuOkwsdGltZW91dDpJLG9uRG93bmxvYWRQcm9ncmVzczp5LG9uVXBsb2FkUHJvZ3Jlc3M6RSxyZXNwb25zZVR5cGU6QyxoZWFkZXJzOkYsd2l0aENyZWRlbnRpYWxzOiQ9InNhbWUtb3JpZ2luIixmZXRjaE9wdGlvbnM6TyxtYXhDb250ZW50TGVuZ3RoOlIsbWF4Qm9keUxlbmd0aDp4fT1seChtKTtjb25zdCB2PUguaXNOdW1iZXIoUikmJlI+LTEsXz1ILmlzTnVtYmVyKHgpJiZ4Pi0xLE09ZmU9PkguaGFzT3duUHJvcChtLGZlKT9tW2ZlXTp2b2lkIDA7bGV0IHo9c3x8ZmV0Y2g7Qz1DPyhDKyIiKS50b0xvd2VyQ2FzZSgpOiJ0ZXh0IjtsZXQgcT1XRShbVixMJiZMLnRvQWJvcnRTaWduYWwoKV0sSSksUT1udWxsO2NvbnN0IGVlPXEmJnEudW5zdWJzY3JpYmUmJigoKT0+e3EudW5zdWJzY3JpYmUoKX0pO2xldCBnZSxUZT1udWxsO2NvbnN0IHBlPSgpPT5uZXcgeGUoIlJlcXVlc3QgYm9keSBsYXJnZXIgdGhhbiBtYXhCb2R5TGVuZ3RoIGxpbWl0Iix4ZS5FUlJfQkFEX1JFUVVFU1QsbSxRKTt0cnl7bGV0IGZlO2NvbnN0IGRlPU0oImF1dGgiKTtpZihkZSl7Y29uc3QgQ2U9SC5nZXRTYWZlUHJvcChkZSwidXNlcm5hbWUiKXx8IiIsRD1ILmdldFNhZmVQcm9wKGRlLCJwYXNzd29yZCIpfHwiIjtmZT17dXNlcm5hbWU6Q2UscGFzc3dvcmQ6RH19aWYoTUUodykpe2NvbnN0IENlPW5ldyBVUkwodyxXdC5vcmlnaW4pO2lmKCFmZSYmKENlLnVzZXJuYW1lfHxDZS5wYXNzd29yZCkpe2NvbnN0IEQ9cGgoQ2UudXNlcm5hbWUpLGo9cGgoQ2UucGFzc3dvcmQpO2ZlPXt1c2VybmFtZTpELHBhc3N3b3JkOmp9fShDZS51c2VybmFtZXx8Q2UucGFzc3dvcmQpJiYoQ2UudXNlcm5hbWU9IiIsQ2UucGFzc3dvcmQ9IiIsdz1DZS5ocmVmKX1pZihmZSYmKEYuZGVsZXRlKCJhdXRob3JpemF0aW9uIiksRi5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoUkUoKGZlLnVzZXJuYW1lfHwiIikrIjoiKyhmZS5wYXNzd29yZHx8IiIpKSkpKSx2JiZ0eXBlb2Ygdz09InN0cmluZyImJncuc3RhcnRzV2l0aCgiZGF0YToiKSYmT0Uodyk+Uil0aHJvdyBuZXcgeGUoIm1heENvbnRlbnRMZW5ndGggc2l6ZSBvZiAiK1IrIiBleGNlZWRlZCIseGUuRVJSX0JBRF9SRVNQT05TRSxtLFEpO2lmKF8mJkIhPT0iZ2V0IiYmQiE9PSJoZWFkIil7Y29uc3QgQ2U9YXdhaXQgZyhrKTtpZih0eXBlb2YgQ2U9PSJudW1iZXIiJiZpc0Zpbml0ZShDZSkmJihnZT1DZSxDZT54KSl0aHJvdyBwZSgpfWNvbnN0IEJlPV8mJihILmlzUmVhZGFibGVTdHJlYW0oayl8fEguaXNTdHJlYW0oaykpLEtlPShDZSxELGopPT5maChDZSxkaCxYPT57aWYoXyYmWD54KXRocm93IFRlPXBlKCk7RCYmRChYKX0saik7aWYoYiYmQiE9PSJnZXQiJiZCIT09ImhlYWQiJiYoRXx8QmUpKXtpZihnZT1nZT8/YXdhaXQgQShGLGspLGdlIT09MHx8QmUpe2xldCBDZT1uZXcgcih3LHttZXRob2Q6IlBPU1QiLGJvZHk6ayxkdXBsZXg6ImhhbGYifSksRDtpZihILmlzRm9ybURhdGEoaykmJihEPUNlLmhlYWRlcnMuZ2V0KCJjb250ZW50LXR5cGUiKSkmJkYuc2V0Q29udGVudFR5cGUoRCksQ2UuYm9keSl7Y29uc3RbaixYXT1FJiZpaChnZSxnYyhjaChFKSkpfHxbXTtrPUtlKENlLmJvZHksaixYKX19fWVsc2UgaWYoQmUmJiFjJiZkJiZCIT09ImdldCImJkIhPT0iaGVhZCIpaz1LZShrKTtlbHNlIGlmKEJlJiZjJiYhYiYmQiE9PSJnZXQiJiZCIT09ImhlYWQiKXRocm93IG5ldyB4ZSgiU3RyZWFtIHJlcXVlc3QgYm9kaWVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGZldGNoIGltcGxlbWVudGF0aW9uIix4ZS5FUlJfTk9UX1NVUFBPUlQsbSxRKTtILmlzU3RyaW5nKCQpfHwoJD0kPyJpbmNsdWRlIjoib21pdCIpO2NvbnN0IFFlPWMmJiJjcmVkZW50aWFscyJpbiByLnByb3RvdHlwZTtpZihILmlzRm9ybURhdGEoaykpe2NvbnN0IENlPUYuZ2V0Q29udGVudFR5cGUoKTtDZSYmL15tdWx0aXBhcnRcL2Zvcm0tZGF0YS9pLnRlc3QoQ2UpJiYhL2JvdW5kYXJ5PS9pLnRlc3QoQ2UpJiZGLmRlbGV0ZSgiY29udGVudC10eXBlIil9Ri5zZXQoIlVzZXItQWdlbnQiLCJheGlvcy8iK3AwLCExKTtjb25zdCBydD17Li4uTyxzaWduYWw6cSxtZXRob2Q6Qi50b1VwcGVyQ2FzZSgpLGhlYWRlcnM6UXkoRi5ub3JtYWxpemUoKSksYm9keTprLGR1cGxleDoiaGFsZiIsY3JlZGVudGlhbHM6UWU/JDp2b2lkIDB9O1E9YyYmbmV3IHIodyxydCk7bGV0IEllPWF3YWl0KGM/eihRLE8pOnoodyxydCkpO2NvbnN0IE1lPWt0LmZyb20oSWUuaGVhZGVycyk7aWYodil7Y29uc3QgQ2U9SC50b0Zpbml0ZU51bWJlcihNZS5nZXRDb250ZW50TGVuZ3RoKCkpO2lmKENlIT1udWxsJiZDZT5SKXRocm93IG5ldyB4ZSgibWF4Q29udGVudExlbmd0aCBzaXplIG9mICIrUisiIGV4Y2VlZGVkIix4ZS5FUlJfQkFEX1JFU1BPTlNFLG0sUSl9Y29uc3QgTmU9VCYmKEM9PT0ic3RyZWFtInx8Qz09PSJyZXNwb25zZSIpO2lmKFQmJkllLmJvZHkmJih5fHx2fHxOZSYmZWUpKXtjb25zdCBDZT17fTtbInN0YXR1cyIsInN0YXR1c1RleHQiLCJoZWFkZXJzIl0uZm9yRWFjaCh0ZT0+e0NlW3RlXT1JZVt0ZV19KTtjb25zdCBEPUgudG9GaW5pdGVOdW1iZXIoTWUuZ2V0Q29udGVudExlbmd0aCgpKSxbaixYXT15JiZpaChELGdjKGNoKHkpLCEwKSl8fFtdO2xldCBzZT0wO2NvbnN0IG5lPXRlPT57aWYodiYmKHNlPXRlLHNlPlIpKXRocm93IG5ldyB4ZSgibWF4Q29udGVudExlbmd0aCBzaXplIG9mICIrUisiIGV4Y2VlZGVkIix4ZS5FUlJfQkFEX1JFU1BPTlNFLG0sUSk7aiYmaih0ZSl9O0llPW5ldyBvKGZoKEllLmJvZHksZGgsbmUsKCk9PntYJiZYKCksZWUmJmVlKCl9KSxDZSl9Qz1DfHwidGV4dCI7bGV0IF9lPWF3YWl0IFdbSC5maW5kS2V5KFcsQyl8fCJ0ZXh0Il0oSWUsbSk7aWYodiYmIVQmJiFOZSl7bGV0IENlO2lmKF9lIT1udWxsJiYodHlwZW9mIF9lLmJ5dGVMZW5ndGg9PSJudW1iZXIiP0NlPV9lLmJ5dGVMZW5ndGg6dHlwZW9mIF9lLnNpemU9PSJudW1iZXIiP0NlPV9lLnNpemU6dHlwZW9mIF9lPT0ic3RyaW5nIiYmKENlPXR5cGVvZiBhPT0iZnVuY3Rpb24iP25ldyBhKCkuZW5jb2RlKF9lKS5ieXRlTGVuZ3RoOl9lLmxlbmd0aCkpLHR5cGVvZiBDZT09Im51bWJlciImJkNlPlIpdGhyb3cgbmV3IHhlKCJtYXhDb250ZW50TGVuZ3RoIHNpemUgb2YgIitSKyIgZXhjZWVkZWQiLHhlLkVSUl9CQURfUkVTUE9OU0UsbSxRKX1yZXR1cm4hTmUmJmVlJiZlZSgpLGF3YWl0IG5ldyBQcm9taXNlKChDZSxEKT0+e2N4KENlLEQse2RhdGE6X2UsaGVhZGVyczprdC5mcm9tKEllLmhlYWRlcnMpLHN0YXR1czpJZS5zdGF0dXMsc3RhdHVzVGV4dDpJZS5zdGF0dXNUZXh0LGNvbmZpZzptLHJlcXVlc3Q6UX0pfSl9Y2F0Y2goZmUpe2lmKGVlJiZlZSgpLHEmJnEuYWJvcnRlZCYmcS5yZWFzb24gaW5zdGFuY2VvZiB4ZSl7Y29uc3QgZGU9cS5yZWFzb247dGhyb3cgZGUuY29uZmlnPW0sUSYmKGRlLnJlcXVlc3Q9USksZmUhPT1kZSYmKGRlLmNhdXNlPWZlKSxkZX10aHJvdyBUZT8oUSYmIVRlLnJlcXVlc3QmJihUZS5yZXF1ZXN0PVEpLFRlKTpmZSBpbnN0YW5jZW9mIHhlPyhRJiYhZmUucmVxdWVzdCYmKGZlLnJlcXVlc3Q9USksZmUpOmZlJiZmZS5uYW1lPT09IlR5cGVFcnJvciImJi9Mb2FkIGZhaWxlZHxmZXRjaC9pLnRlc3QoZmUubWVzc2FnZSk/T2JqZWN0LmFzc2lnbihuZXcgeGUoIk5ldHdvcmsgRXJyb3IiLHhlLkVSUl9ORVRXT1JLLG0sUSxmZSYmZmUucmVzcG9uc2UpLHtjYXVzZTpmZS5jYXVzZXx8ZmV9KTp4ZS5mcm9tKGZlLGZlJiZmZS5jb2RlLG0sUSxmZSYmZmUucmVzcG9uc2UpfX19LE5FPW5ldyBNYXAsZng9bj0+e2xldCBlPW4mJm4uZW52fHx7fTtjb25zdHtmZXRjaDp0LFJlcXVlc3Q6YSxSZXNwb25zZTpzfT1lLHI9W2Escyx0XTtsZXQgbz1yLmxlbmd0aCxpPW8sYyxmLGQ9TkU7Zm9yKDtpLS07KWM9cltpXSxmPWQuZ2V0KGMpLGY9PT12b2lkIDAmJmQuc2V0KGMsZj1pP25ldyBNYXA6RkUoZSkpLGQ9ZjtyZXR1cm4gZn07ZngoKTtjb25zdCBoMD17aHR0cDpxQyx4aHI6RUUsZmV0Y2g6e2dldDpmeH19O0guZm9yRWFjaChoMCwobixlKT0+e2lmKG4pe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwibmFtZSIse19fcHJvdG9fXzpudWxsLHZhbHVlOmV9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sImFkYXB0ZXJOYW1lIix7X19wcm90b19fOm51bGwsdmFsdWU6ZX0pfX0pO2NvbnN0IGdoPW49PmAtICR7bn1gLGtFPW49PkguaXNGdW5jdGlvbihuKXx8bj09PW51bGx8fG49PT0hMTtmdW5jdGlvbiBVRShuLGUpe249SC5pc0FycmF5KG4pP246W25dO2NvbnN0e2xlbmd0aDp0fT1uO2xldCBhLHM7Y29uc3Qgcj17fTtmb3IobGV0IG89MDtvPHQ7bysrKXthPW5bb107bGV0IGk7aWYocz1hLCFrRShhKSYmKHM9aDBbKGk9U3RyaW5nKGEpKS50b0xvd2VyQ2FzZSgpXSxzPT09dm9pZCAwKSl0aHJvdyBuZXcgeGUoYFVua25vd24gYWRhcHRlciAnJHtpfSdgKTtpZihzJiYoSC5pc0Z1bmN0aW9uKHMpfHwocz1zLmdldChlKSkpKWJyZWFrO3JbaXx8IiMiK29dPXN9aWYoIXMpe2NvbnN0IG89T2JqZWN0LmVudHJpZXMocikubWFwKChbYyxmXSk9PmBhZGFwdGVyICR7Y30gYCsoZj09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpO2xldCBpPXQ/by5sZW5ndGg+MT9gc2luY2UgOgpgK28ubWFwKGdoKS5qb2luKGAKYCk6IiAiK2doKG9bMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IHhlKCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIraSwiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIHN9Y29uc3QgZHg9e2dldEFkYXB0ZXI6VUUsYWRhcHRlcnM6aDB9O2Z1bmN0aW9uIE11KG4pe2lmKG4uY2FuY2VsVG9rZW4mJm4uY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLG4uc2lnbmFsJiZuLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBsaShudWxsLG4pfWZ1bmN0aW9uIGJoKG4pe3JldHVybiBNdShuKSxuLmhlYWRlcnM9a3QuZnJvbShuLmhlYWRlcnMpLG4uZGF0YT1SdS5jYWxsKG4sbi50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2Yobi5tZXRob2QpIT09LTEmJm4uaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksZHguZ2V0QWRhcHRlcihuLmFkYXB0ZXJ8fHVpLmFkYXB0ZXIsbikobikudGhlbihmdW5jdGlvbihhKXtNdShuKSxuLnJlc3BvbnNlPWE7dHJ5e2EuZGF0YT1SdS5jYWxsKG4sbi50cmFuc2Zvcm1SZXNwb25zZSxhKX1maW5hbGx5e2RlbGV0ZSBuLnJlc3BvbnNlfXJldHVybiBhLmhlYWRlcnM9a3QuZnJvbShhLmhlYWRlcnMpLGF9LGZ1bmN0aW9uKGEpe2lmKCFpeChhKSYmKE11KG4pLGEmJmEucmVzcG9uc2UpKXtuLnJlc3BvbnNlPWEucmVzcG9uc2U7dHJ5e2EucmVzcG9uc2UuZGF0YT1SdS5jYWxsKG4sbi50cmFuc2Zvcm1SZXNwb25zZSxhLnJlc3BvbnNlKX1maW5hbGx5e2RlbGV0ZSBuLnJlc3BvbnNlfWEucmVzcG9uc2UuaGVhZGVycz1rdC5mcm9tKGEucmVzcG9uc2UuaGVhZGVycyl9cmV0dXJuIFByb21pc2UucmVqZWN0KGEpfSl9Y29uc3QgVmM9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChuLGUpPT57VmNbbl09ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhPT09bnx8ImEiKyhlPDE/Im4gIjoiICIpK259fSk7Y29uc3QgeWg9e307VmMudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKGUsdCxhKXtmdW5jdGlvbiBzKHIsbyl7cmV0dXJuIltBeGlvcyB2IitwMCsiXSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK3IrIiciK28rKGE/Ii4gIithOiIiKX1yZXR1cm4ocixvLGkpPT57aWYoZT09PSExKXRocm93IG5ldyB4ZShzKG8sIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpLHhlLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gdCYmIXloW29dJiYoeWhbb109ITAsY29uc29sZS53YXJuKHMobywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSxlP2UocixvLGkpOiEwfX07VmMuc3BlbGxpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuKHQsYSk9Pihjb25zb2xlLndhcm4oYCR7YX0gaXMgbGlrZWx5IGEgbWlzc3BlbGxpbmcgb2YgJHtlfWApLCEwKX07ZnVuY3Rpb24gREUobixlLHQpe2lmKHR5cGVvZiBuIT0ib2JqZWN0Iil0aHJvdyBuZXcgeGUoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLHhlLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb25zdCBhPU9iamVjdC5rZXlzKG4pO2xldCBzPWEubGVuZ3RoO2Zvcig7cy0tID4wOyl7Y29uc3Qgcj1hW3NdLG89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscik/ZVtyXTp2b2lkIDA7aWYobyl7Y29uc3QgaT1uW3JdLGM9aT09PXZvaWQgMHx8byhpLHIsbik7aWYoYyE9PSEwKXRocm93IG5ldyB4ZSgib3B0aW9uICIrcisiIG11c3QgYmUgIitjLHhlLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZih0IT09ITApdGhyb3cgbmV3IHhlKCJVbmtub3duIG9wdGlvbiAiK3IseGUuRVJSX0JBRF9PUFRJT04pfX1jb25zdCBvYz17YXNzZXJ0T3B0aW9uczpERSx2YWxpZGF0b3JzOlZjfSxPdD1vYy52YWxpZGF0b3JzO2xldCBfbz1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmRlZmF1bHRzPWV8fHt9LHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBzaCxyZXNwb25zZTpuZXcgc2h9fWFzeW5jIHJlcXVlc3QoZSx0KXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoZSx0KX1jYXRjaChhKXtpZihhIGluc3RhbmNlb2YgRXJyb3Ipe2xldCBzPXt9O0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHMpOnM9bmV3IEVycm9yO2NvbnN0IHI9KCgpPT57aWYoIXMuc3RhY2spcmV0dXJuIiI7Y29uc3Qgbz1zLnN0YWNrLmluZGV4T2YoYApgKTtyZXR1cm4gbz09PS0xPyIiOnMuc3RhY2suc2xpY2UobysxKX0pKCk7dHJ5e2lmKCFhLnN0YWNrKWEuc3RhY2s9cjtlbHNlIGlmKHIpe2NvbnN0IG89ci5pbmRleE9mKGAKYCksaT1vPT09LTE/LTE6ci5pbmRleE9mKGAKYCxvKzEpLGM9aT09PS0xPyIiOnIuc2xpY2UoaSsxKTtTdHJpbmcoYS5zdGFjaykuZW5kc1dpdGgoYyl8fChhLnN0YWNrKz1gCmArcil9fWNhdGNoe319dGhyb3cgYX19X3JlcXVlc3QoZSx0KXt0eXBlb2YgZT09InN0cmluZyI/KHQ9dHx8e30sdC51cmw9ZSk6dD1lfHx7fSx0PURvKHRoaXMuZGVmYXVsdHMsdCk7Y29uc3R7dHJhbnNpdGlvbmFsOmEscGFyYW1zU2VyaWFsaXplcjpzLGhlYWRlcnM6cn09dDthIT09dm9pZCAwJiZvYy5hc3NlcnRPcHRpb25zKGEse3NpbGVudEpTT05QYXJzaW5nOk90LnRyYW5zaXRpb25hbChPdC5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpPdC50cmFuc2l0aW9uYWwoT3QuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpPdC50cmFuc2l0aW9uYWwoT3QuYm9vbGVhbiksbGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZzpPdC50cmFuc2l0aW9uYWwoT3QuYm9vbGVhbiksYWR2ZXJ0aXNlWnN0ZEFjY2VwdEVuY29kaW5nOk90LnRyYW5zaXRpb25hbChPdC5ib29sZWFuKSx2YWxpZGF0ZVN0YXR1c1VuZGVmaW5lZFJlc29sdmVzOk90LnRyYW5zaXRpb25hbChPdC5ib29sZWFuKX0sITEpLHMhPW51bGwmJihILmlzRnVuY3Rpb24ocyk/dC5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6c306b2MuYXNzZXJ0T3B0aW9ucyhzLHtlbmNvZGU6T3QuZnVuY3Rpb24sc2VyaWFsaXplOk90LmZ1bmN0aW9ufSwhMCkpLHQuYWxsb3dBYnNvbHV0ZVVybHMhPT12b2lkIDB8fCh0aGlzLmRlZmF1bHRzLmFsbG93QWJzb2x1dGVVcmxzIT09dm9pZCAwP3QuYWxsb3dBYnNvbHV0ZVVybHM9dGhpcy5kZWZhdWx0cy5hbGxvd0Fic29sdXRlVXJsczp0LmFsbG93QWJzb2x1dGVVcmxzPSEwKSxvYy5hc3NlcnRPcHRpb25zKHQse2Jhc2VVcmw6T3Quc3BlbGxpbmcoImJhc2VVUkwiKSx3aXRoWHNyZlRva2VuOk90LnNwZWxsaW5nKCJ3aXRoWFNSRlRva2VuIil9LCEwKSx0Lm1ldGhvZD0odC5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgbz1yJiZILm1lcmdlKHIuY29tbW9uLHJbdC5tZXRob2RdKTtyJiZILmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwicXVlcnkiLCJjb21tb24iXSxXPT57ZGVsZXRlIHJbV119KSx0LmhlYWRlcnM9a3QuY29uY2F0KG8scik7Y29uc3QgaT1bXTtsZXQgYz0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oZyl7aWYodHlwZW9mIGcucnVuV2hlbj09ImZ1bmN0aW9uIiYmZy5ydW5XaGVuKHQpPT09ITEpcmV0dXJuO2M9YyYmZy5zeW5jaHJvbm91cztjb25zdCBBPXQudHJhbnNpdGlvbmFsfHxmMDtBJiZBLmxlZ2FjeUludGVyY2VwdG9yUmVxUmVzT3JkZXJpbmc/aS51bnNoaWZ0KGcuZnVsZmlsbGVkLGcucmVqZWN0ZWQpOmkucHVzaChnLmZ1bGZpbGxlZCxnLnJlamVjdGVkKX0pO2NvbnN0IGY9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihnKXtmLnB1c2goZy5mdWxmaWxsZWQsZy5yZWplY3RlZCl9KTtsZXQgZCxwPTAsYjtpZighYyl7Y29uc3QgVz1bYmguYmluZCh0aGlzKSx2b2lkIDBdO2ZvcihXLnVuc2hpZnQoLi4uaSksVy5wdXNoKC4uLmYpLGI9Vy5sZW5ndGgsZD1Qcm9taXNlLnJlc29sdmUodCk7cDxiOylkPWQudGhlbihXW3ArK10sV1twKytdKTtyZXR1cm4gZH1iPWkubGVuZ3RoO2xldCBUPXQ7Zm9yKDtwPGI7KXtjb25zdCBXPWlbcCsrXSxnPWlbcCsrXTt0cnl7VD1XKFQpfWNhdGNoKEEpe2cuY2FsbCh0aGlzLEEpO2JyZWFrfX10cnl7ZD1iaC5jYWxsKHRoaXMsVCl9Y2F0Y2goVyl7cmV0dXJuIFByb21pc2UucmVqZWN0KFcpfWZvcihwPTAsYj1mLmxlbmd0aDtwPGI7KWQ9ZC50aGVuKGZbcCsrXSxmW3ArK10pO3JldHVybiBkfWdldFVyaShlKXtlPURvKHRoaXMuZGVmYXVsdHMsZSk7Y29uc3QgdD11eChlLmJhc2VVUkwsZS51cmwsZS5hbGxvd0Fic29sdXRlVXJscyxlKTtyZXR1cm4gb3godCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpfX07SC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihlKXtfby5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxhKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KERvKGF8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOmEmJkguaGFzT3duUHJvcChhLCJkYXRhIik/YS5kYXRhOnZvaWQgMH0pKX19KTtILmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giLCJxdWVyeSJdLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoYSl7cmV0dXJuIGZ1bmN0aW9uKHIsbyxpKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KERvKGl8fHt9LHttZXRob2Q6ZSxoZWFkZXJzOmE/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOnIsZGF0YTpvfSkpfX1fby5wcm90b3R5cGVbZV09dCgpLGUhPT0icXVlcnkiJiYoX28ucHJvdG90eXBlW2UrIkZvcm0iXT10KCEwKSl9KTtsZXQgJEU9Y2xhc3MgcHh7Y29uc3RydWN0b3IoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihyKXt0PXJ9KTtjb25zdCBhPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4ocz0+e2lmKCFhLl9saXN0ZW5lcnMpcmV0dXJuO2xldCByPWEuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtyLS0gPjA7KWEuX2xpc3RlbmVyc1tyXShzKTthLl9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPXM9PntsZXQgcjtjb25zdCBvPW5ldyBQcm9taXNlKGk9PnthLnN1YnNjcmliZShpKSxyPWl9KS50aGVuKHMpO3JldHVybiBvLmNhbmNlbD1mdW5jdGlvbigpe2EudW5zdWJzY3JpYmUocil9LG99LGUoZnVuY3Rpb24ocixvLGkpe2EucmVhc29ufHwoYS5yZWFzb249bmV3IGxpKHIsbyxpKSx0KGEucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKGUpe2lmKHRoaXMucmVhc29uKXtlKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19dW5zdWJzY3JpYmUoZSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47Y29uc3QgdD10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihlKTt0IT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UodCwxKX10b0Fib3J0U2lnbmFsKCl7Y29uc3QgZT1uZXcgQWJvcnRDb250cm9sbGVyLHQ9YT0+e2UuYWJvcnQoYSl9O3JldHVybiB0aGlzLnN1YnNjcmliZSh0KSxlLnNpZ25hbC51bnN1YnNjcmliZT0oKT0+dGhpcy51bnN1YnNjcmliZSh0KSxlLnNpZ25hbH1zdGF0aWMgc291cmNlKCl7bGV0IGU7cmV0dXJue3Rva2VuOm5ldyBweChmdW5jdGlvbihzKXtlPXN9KSxjYW5jZWw6ZX19fTtmdW5jdGlvbiBMRShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4uYXBwbHkobnVsbCx0KX19ZnVuY3Rpb24gekUobil7cmV0dXJuIEguaXNPYmplY3QobikmJm4uaXNBeGlvc0Vycm9yPT09ITB9Y29uc3QgeWQ9e0NvbnRpbnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlhbENvbnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixUZW1wb3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlwZTo0MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRlUmVxdWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxCYWRHYXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUxMCxOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTEsV2ViU2VydmVySXNEb3duOjUyMSxDb25uZWN0aW9uVGltZWRPdXQ6NTIyLE9yaWdpbklzVW5yZWFjaGFibGU6NTIzLFRpbWVvdXRPY2N1cnJlZDo1MjQsU3NsSGFuZHNoYWtlRmFpbGVkOjUyNSxJbnZhbGlkU3NsQ2VydGlmaWNhdGU6NTI2fTtPYmplY3QuZW50cmllcyh5ZCkuZm9yRWFjaCgoW24sZV0pPT57eWRbZV09bn0pO2Z1bmN0aW9uIGh4KG4pe2NvbnN0IGU9bmV3IF9vKG4pLHQ9VnkoX28ucHJvdG90eXBlLnJlcXVlc3QsZSk7cmV0dXJuIEguZXh0ZW5kKHQsX28ucHJvdG90eXBlLGUse2FsbE93bktleXM6ITB9KSxILmV4dGVuZCh0LGUsbnVsbCx7YWxsT3duS2V5czohMH0pLHQuY3JlYXRlPWZ1bmN0aW9uKHMpe3JldHVybiBoeChEbyhuLHMpKX0sdH1jb25zdCB5dD1oeCh1aSk7eXQuQXhpb3M9X287eXQuQ2FuY2VsZWRFcnJvcj1saTt5dC5DYW5jZWxUb2tlbj0kRTt5dC5pc0NhbmNlbD1peDt5dC5WRVJTSU9OPXAwO3l0LnRvRm9ybURhdGE9amM7eXQuQXhpb3NFcnJvcj14ZTt5dC5DYW5jZWw9eXQuQ2FuY2VsZWRFcnJvcjt5dC5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfTt5dC5zcHJlYWQ9TEU7eXQuaXNBeGlvc0Vycm9yPXpFO3l0Lm1lcmdlQ29uZmlnPURvO3l0LkF4aW9zSGVhZGVycz1rdDt5dC5mb3JtVG9KU09OPW49PmF4KEguaXNIVE1MRm9ybShuKT9uZXcgRm9ybURhdGEobik6bik7eXQuZ2V0QWRhcHRlcj1keC5nZXRBZGFwdGVyO3l0Lkh0dHBTdGF0dXNDb2RlPXlkO3l0LmRlZmF1bHQ9eXQ7Y29uc3R7QXhpb3M6b0ksQXhpb3NFcnJvcjpzSSxDYW5jZWxlZEVycm9yOmFJLGlzQ2FuY2VsOmlJLENhbmNlbFRva2VuOmNJLFZFUlNJT046dUksYWxsOmxJLENhbmNlbDpmSSxpc0F4aW9zRXJyb3I6ZEksc3ByZWFkOnBJLHRvRm9ybURhdGE6aEksQXhpb3NIZWFkZXJzOmdJLEh0dHBTdGF0dXNDb2RlOmJJLGZvcm1Ub0pTT046eUksZ2V0QWRhcHRlcjp4SSxtZXJnZUNvbmZpZzpUSSxjcmVhdGU6QUl9PXl0O2NsYXNzIGd4e2NvbnN0cnVjdG9yKGUsdD0zZTQsYT0iIixzPSIiLHI9e30sbz0iLyIpe1oodGhpcywiaG9zdCIpO1oodGhpcywidGltZW91dCIpO1oodGhpcywidXNlciIpO1oodGhpcywicGFzc3dvcmQiKTtaKHRoaXMsImhlYWRlcnMiKTtaKHRoaXMsInN0YXR1c1BhZ2UiKTtaKHRoaXMsImluc3RhbmNlIik7aWYoIVFkKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBVUkwgcHJvdmlkZWQgdG8gSHR0cFByb3ZpZGVyIik7aWYoaXNOYU4odCl8fHQ8MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGltZW91dCBkdXJhdGlvbiBwcm92aWRlZCIpO2lmKCFzaShyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGVhZGVycyBvYmplY3QgcHJvdmlkZWQiKTtlPWUucmVwbGFjZSgvXC8rJC8sIiIpLHRoaXMuaG9zdD1lLHRoaXMudGltZW91dD10LHRoaXMudXNlcj1hLHRoaXMucGFzc3dvcmQ9cyx0aGlzLmhlYWRlcnM9cix0aGlzLnN0YXR1c1BhZ2U9byx0aGlzLmluc3RhbmNlPXl0LmNyZWF0ZSh7YmFzZVVSTDplLHRpbWVvdXQ6dCxoZWFkZXJzOnIsYXV0aDphP3t1c2VybmFtZTphLHBhc3N3b3JkOnN9OnZvaWQgMH0pfXNldFN0YXR1c1BhZ2UoZT0iLyIpe3RoaXMuc3RhdHVzUGFnZT1lfWFzeW5jIGlzQ29ubmVjdGVkKGU9dGhpcy5zdGF0dXNQYWdlKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGUpLnRoZW4odD0+UnkodCwiYmxvY2tJRCIsImJsb2NrX2hlYWRlciIpKS5jYXRjaCgoKT0+ITEpfXJlcXVlc3QoZSx0PXt9LGE9ImdldCIpe3JldHVybiBhPWEudG9Mb3dlckNhc2UoKSx0aGlzLmluc3RhbmNlLnJlcXVlc3Qoe2RhdGE6YT09InBvc3QiJiZPYmplY3Qua2V5cyh0KS5sZW5ndGg/dDpudWxsLHBhcmFtczphPT0iZ2V0IiYmdCx1cmw6ZSxtZXRob2Q6YX0pLnRoZW4oKHtkYXRhOnN9KT0+cyl9fWNvbnN0IHByPXtIdHRwUHJvdmlkZXI6Z3h9O3ZhciB4ZD17ZXhwb3J0czp7fX07Y29uc3QgakU9IjIuMC4wIixieD0yNTYsVkU9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ8fDkwMDcxOTkyNTQ3NDA5OTEsR0U9MTYsSEU9YngtNixLRT1bIm1ham9yIiwicHJlbWFqb3IiLCJtaW5vciIsInByZW1pbm9yIiwicGF0Y2giLCJwcmVwYXRjaCIsInByZXJlbGVhc2UiXTt2YXIgR2M9e01BWF9MRU5HVEg6YngsTUFYX1NBRkVfQ09NUE9ORU5UX0xFTkdUSDpHRSxNQVhfU0FGRV9CVUlMRF9MRU5HVEg6SEUsTUFYX1NBRkVfSU5URUdFUjpWRSxSRUxFQVNFX1RZUEVTOktFLFNFTVZFUl9TUEVDX1ZFUlNJT046akUsRkxBR19JTkNMVURFX1BSRVJFTEVBU0U6MSxGTEFHX0xPT1NFOjJ9LEZ1PXt9O2NvbnN0IFpFPXR5cGVvZiBWdT09Im9iamVjdCImJkZ1JiZGdS5OT0RFX0RFQlVHJiYvXGJzZW12ZXJcYi9pLnRlc3QoRnUuTk9ERV9ERUJVRyk/KC4uLm4pPT5jb25zb2xlLmVycm9yKCJTRU1WRVIiLC4uLm4pOigpPT57fTt2YXIgSGM9WkU7KGZ1bmN0aW9uKG4sZSl7Y29uc3R7TUFYX1NBRkVfQ09NUE9ORU5UX0xFTkdUSDp0LE1BWF9TQUZFX0JVSUxEX0xFTkdUSDphLE1BWF9MRU5HVEg6c309R2Mscj1IYztlPW4uZXhwb3J0cz17fTtjb25zdCBvPWUucmU9W10saT1lLnNhZmVSZT1bXSxjPWUuc3JjPVtdLGY9ZS5zYWZlU3JjPVtdLGQ9ZS50PXt9O2xldCBwPTA7Y29uc3QgYj0iW2EtekEtWjAtOS1dIixUPVtbIlxccyIsMV0sWyJcXGQiLHNdLFtiLGFdXSxXPUE9Pntmb3IoY29uc3RbbSx3XW9mIFQpQT1BLnNwbGl0KGAke219KmApLmpvaW4oYCR7bX17MCwke3d9fWApLnNwbGl0KGAke219K2ApLmpvaW4oYCR7bX17MSwke3d9fWApO3JldHVybiBBfSxnPShBLG0sdyk9Pntjb25zdCBCPVcobSksaz1wKys7cihBLGssbSksZFtBXT1rLGNba109bSxmW2tdPUIsb1trXT1uZXcgUmVnRXhwKG0sdz8iZyI6dm9pZCAwKSxpW2tdPW5ldyBSZWdFeHAoQix3PyJnIjp2b2lkIDApfTtnKCJOVU1FUklDSURFTlRJRklFUiIsIjB8WzEtOV1cXGQqIiksZygiTlVNRVJJQ0lERU5USUZJRVJMT09TRSIsIlxcZCsiKSxnKCJOT05OVU1FUklDSURFTlRJRklFUiIsYFxcZCpbYS16QS1aLV0ke2J9KmApLGcoIk1BSU5WRVJTSU9OIixgKCR7Y1tkLk5VTUVSSUNJREVOVElGSUVSXX0pXFwuKCR7Y1tkLk5VTUVSSUNJREVOVElGSUVSXX0pXFwuKCR7Y1tkLk5VTUVSSUNJREVOVElGSUVSXX0pYCksZygiTUFJTlZFUlNJT05MT09TRSIsYCgke2NbZC5OVU1FUklDSURFTlRJRklFUkxPT1NFXX0pXFwuKCR7Y1tkLk5VTUVSSUNJREVOVElGSUVSTE9PU0VdfSlcXC4oJHtjW2QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19KWApLGcoIlBSRVJFTEVBU0VJREVOVElGSUVSIixgKD86JHtjW2QuTlVNRVJJQ0lERU5USUZJRVJdfXwke2NbZC5OT05OVU1FUklDSURFTlRJRklFUl19KWApLGcoIlBSRVJFTEVBU0VJREVOVElGSUVSTE9PU0UiLGAoPzoke2NbZC5OVU1FUklDSURFTlRJRklFUkxPT1NFXX18JHtjW2QuTk9OTlVNRVJJQ0lERU5USUZJRVJdfSlgKSxnKCJQUkVSRUxFQVNFIixgKD86LSgke2NbZC5QUkVSRUxFQVNFSURFTlRJRklFUl19KD86XFwuJHtjW2QuUFJFUkVMRUFTRUlERU5USUZJRVJdfSkqKSlgKSxnKCJQUkVSRUxFQVNFTE9PU0UiLGAoPzotPygke2NbZC5QUkVSRUxFQVNFSURFTlRJRklFUkxPT1NFXX0oPzpcXC4ke2NbZC5QUkVSRUxFQVNFSURFTlRJRklFUkxPT1NFXX0pKikpYCksZygiQlVJTERJREVOVElGSUVSIixgJHtifStgKSxnKCJCVUlMRCIsYCg/OlxcKygke2NbZC5CVUlMRElERU5USUZJRVJdfSg/OlxcLiR7Y1tkLkJVSUxESURFTlRJRklFUl19KSopKWApLGcoIkZVTExQTEFJTiIsYHY/JHtjW2QuTUFJTlZFUlNJT05dfSR7Y1tkLlBSRVJFTEVBU0VdfT8ke2NbZC5CVUlMRF19P2ApLGcoIkZVTEwiLGBeJHtjW2QuRlVMTFBMQUlOXX0kYCksZygiTE9PU0VQTEFJTiIsYFt2PVxcc10qJHtjW2QuTUFJTlZFUlNJT05MT09TRV19JHtjW2QuUFJFUkVMRUFTRUxPT1NFXX0/JHtjW2QuQlVJTERdfT9gKSxnKCJMT09TRSIsYF4ke2NbZC5MT09TRVBMQUlOXX0kYCksZygiR1RMVCIsIigoPzo8fD4pPz0/KSIpLGcoIlhSQU5HRUlERU5USUZJRVJMT09TRSIsYCR7Y1tkLk5VTUVSSUNJREVOVElGSUVSTE9PU0VdfXx4fFh8XFwqYCksZygiWFJBTkdFSURFTlRJRklFUiIsYCR7Y1tkLk5VTUVSSUNJREVOVElGSUVSXX18eHxYfFxcKmApLGcoIlhSQU5HRVBMQUlOIixgW3Y9XFxzXSooJHtjW2QuWFJBTkdFSURFTlRJRklFUl19KSg/OlxcLigke2NbZC5YUkFOR0VJREVOVElGSUVSXX0pKD86XFwuKCR7Y1tkLlhSQU5HRUlERU5USUZJRVJdfSkoPzoke2NbZC5QUkVSRUxFQVNFXX0pPyR7Y1tkLkJVSUxEXX0/KT8pP2ApLGcoIlhSQU5HRVBMQUlOTE9PU0UiLGBbdj1cXHNdKigke2NbZC5YUkFOR0VJREVOVElGSUVSTE9PU0VdfSkoPzpcXC4oJHtjW2QuWFJBTkdFSURFTlRJRklFUkxPT1NFXX0pKD86XFwuKCR7Y1tkLlhSQU5HRUlERU5USUZJRVJMT09TRV19KSg/OiR7Y1tkLlBSRVJFTEVBU0VMT09TRV19KT8ke2NbZC5CVUlMRF19Pyk/KT9gKSxnKCJYUkFOR0UiLGBeJHtjW2QuR1RMVF19XFxzKiR7Y1tkLlhSQU5HRVBMQUlOXX0kYCksZygiWFJBTkdFTE9PU0UiLGBeJHtjW2QuR1RMVF19XFxzKiR7Y1tkLlhSQU5HRVBMQUlOTE9PU0VdfSRgKSxnKCJDT0VSQ0VQTEFJTiIsYChefFteXFxkXSkoXFxkezEsJHt0fX0pKD86XFwuKFxcZHsxLCR7dH19KSk/KD86XFwuKFxcZHsxLCR7dH19KSk/YCksZygiQ09FUkNFIixgJHtjW2QuQ09FUkNFUExBSU5dfSg/OiR8W15cXGRdKWApLGcoIkNPRVJDRUZVTEwiLGNbZC5DT0VSQ0VQTEFJTl0rYCg/OiR7Y1tkLlBSRVJFTEVBU0VdfSk/KD86JHtjW2QuQlVJTERdfSk/KD86JHxbXlxcZF0pYCksZygiQ09FUkNFUlRMIixjW2QuQ09FUkNFXSwhMCksZygiQ09FUkNFUlRMRlVMTCIsY1tkLkNPRVJDRUZVTExdLCEwKSxnKCJMT05FVElMREUiLCIoPzp+Pj8pIiksZygiVElMREVUUklNIixgKFxccyopJHtjW2QuTE9ORVRJTERFXX1cXHMrYCwhMCksZS50aWxkZVRyaW1SZXBsYWNlPSIkMX4iLGcoIlRJTERFIixgXiR7Y1tkLkxPTkVUSUxERV19JHtjW2QuWFJBTkdFUExBSU5dfSRgKSxnKCJUSUxERUxPT1NFIixgXiR7Y1tkLkxPTkVUSUxERV19JHtjW2QuWFJBTkdFUExBSU5MT09TRV19JGApLGcoIkxPTkVDQVJFVCIsIig/OlxcXikiKSxnKCJDQVJFVFRSSU0iLGAoXFxzKikke2NbZC5MT05FQ0FSRVRdfVxccytgLCEwKSxlLmNhcmV0VHJpbVJlcGxhY2U9IiQxXiIsZygiQ0FSRVQiLGBeJHtjW2QuTE9ORUNBUkVUXX0ke2NbZC5YUkFOR0VQTEFJTl19JGApLGcoIkNBUkVUTE9PU0UiLGBeJHtjW2QuTE9ORUNBUkVUXX0ke2NbZC5YUkFOR0VQTEFJTkxPT1NFXX0kYCksZygiQ09NUEFSQVRPUkxPT1NFIixgXiR7Y1tkLkdUTFRdfVxccyooJHtjW2QuTE9PU0VQTEFJTl19KSR8XiRgKSxnKCJDT01QQVJBVE9SIixgXiR7Y1tkLkdUTFRdfVxccyooJHtjW2QuRlVMTFBMQUlOXX0pJHxeJGApLGcoIkNPTVBBUkFUT1JUUklNIixgKFxccyopJHtjW2QuR1RMVF19XFxzKigke2NbZC5MT09TRVBMQUlOXX18JHtjW2QuWFJBTkdFUExBSU5dfSlgLCEwKSxlLmNvbXBhcmF0b3JUcmltUmVwbGFjZT0iJDEkMiQzIixnKCJIWVBIRU5SQU5HRSIsYF5cXHMqKCR7Y1tkLlhSQU5HRVBMQUlOXX0pXFxzKy1cXHMrKCR7Y1tkLlhSQU5HRVBMQUlOXX0pXFxzKiRgKSxnKCJIWVBIRU5SQU5HRUxPT1NFIixgXlxccyooJHtjW2QuWFJBTkdFUExBSU5MT09TRV19KVxccystXFxzKygke2NbZC5YUkFOR0VQTEFJTkxPT1NFXX0pXFxzKiRgKSxnKCJTVEFSIiwiKDx8Pik/PT9cXHMqXFwqIiksZygiR1RFMCIsIl5cXHMqPj1cXHMqMFxcLjBcXC4wXFxzKiQiKSxnKCJHVEUwUFJFIiwiXlxccyo+PVxccyowXFwuMFxcLjAtMFxccyokIil9KSh4ZCx4ZC5leHBvcnRzKTt2YXIgZmk9eGQuZXhwb3J0cztjb25zdCBxRT1PYmplY3QuZnJlZXplKHtsb29zZTohMH0pLEpFPU9iamVjdC5mcmVlemUoe30pLFlFPW49Pm4/dHlwZW9mIG4hPSJvYmplY3QiP3FFOm46SkU7dmFyIGcwPVlFO2NvbnN0IHhoPS9eWzAtOV0rJC8seXg9KG4sZSk9Pntjb25zdCB0PXhoLnRlc3QobiksYT14aC50ZXN0KGUpO3JldHVybiB0JiZhJiYobj0rbixlPStlKSxuPT09ZT8wOnQmJiFhPy0xOmEmJiF0PzE6bjxlPy0xOjF9LFhFPShuLGUpPT55eChlLG4pO3ZhciB4eD17Y29tcGFyZUlkZW50aWZpZXJzOnl4LHJjb21wYXJlSWRlbnRpZmllcnM6WEV9O2NvbnN0IERpPUhjLHtNQVhfTEVOR1RIOlRoLE1BWF9TQUZFX0lOVEVHRVI6JGl9PUdjLHtzYWZlUmU6QWgsc2FmZVNyYzptaCx0OkxpfT1maSxRRT1nMCx7Y29tcGFyZUlkZW50aWZpZXJzOlFvfT14eDtsZXQgZVc9Y2xhc3Mgbm57Y29uc3RydWN0b3IoZSx0KXtpZih0PVFFKHQpLGUgaW5zdGFuY2VvZiBubil7aWYoZS5sb29zZT09PSEhdC5sb29zZSYmZS5pbmNsdWRlUHJlcmVsZWFzZT09PSEhdC5pbmNsdWRlUHJlcmVsZWFzZSlyZXR1cm4gZTtlPWUudmVyc2lvbn1lbHNlIGlmKHR5cGVvZiBlIT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIHZlcnNpb24uIE11c3QgYmUgYSBzdHJpbmcuIEdvdCB0eXBlICIke3R5cGVvZiBlfSIuYCk7aWYoZS5sZW5ndGg+VGgpdGhyb3cgbmV3IFR5cGVFcnJvcihgdmVyc2lvbiBpcyBsb25nZXIgdGhhbiAke1RofSBjaGFyYWN0ZXJzYCk7RGkoIlNlbVZlciIsZSx0KSx0aGlzLm9wdGlvbnM9dCx0aGlzLmxvb3NlPSEhdC5sb29zZSx0aGlzLmluY2x1ZGVQcmVyZWxlYXNlPSEhdC5pbmNsdWRlUHJlcmVsZWFzZTtjb25zdCBhPWUudHJpbSgpLm1hdGNoKHQubG9vc2U/QWhbTGkuTE9PU0VdOkFoW0xpLkZVTExdKTtpZighYSl0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIFZlcnNpb246ICR7ZX1gKTtpZih0aGlzLnJhdz1lLHRoaXMubWFqb3I9K2FbMV0sdGhpcy5taW5vcj0rYVsyXSx0aGlzLnBhdGNoPSthWzNdLHRoaXMubWFqb3I+JGl8fHRoaXMubWFqb3I8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIG1ham9yIHZlcnNpb24iKTtpZih0aGlzLm1pbm9yPiRpfHx0aGlzLm1pbm9yPDApdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBtaW5vciB2ZXJzaW9uIik7aWYodGhpcy5wYXRjaD4kaXx8dGhpcy5wYXRjaDwwKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgcGF0Y2ggdmVyc2lvbiIpO2FbNF0/dGhpcy5wcmVyZWxlYXNlPWFbNF0uc3BsaXQoIi4iKS5tYXAocz0+e2lmKC9eWzAtOV0rJC8udGVzdChzKSl7Y29uc3Qgcj0rcztpZihyPj0wJiZyPCRpKXJldHVybiByfXJldHVybiBzfSk6dGhpcy5wcmVyZWxlYXNlPVtdLHRoaXMuYnVpbGQ9YVs1XT9hWzVdLnNwbGl0KCIuIik6W10sdGhpcy5mb3JtYXQoKX1mb3JtYXQoKXtyZXR1cm4gdGhpcy52ZXJzaW9uPWAke3RoaXMubWFqb3J9LiR7dGhpcy5taW5vcn0uJHt0aGlzLnBhdGNofWAsdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCYmKHRoaXMudmVyc2lvbis9YC0ke3RoaXMucHJlcmVsZWFzZS5qb2luKCIuIil9YCksdGhpcy52ZXJzaW9ufXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMudmVyc2lvbn1jb21wYXJlKGUpe2lmKERpKCJTZW1WZXIuY29tcGFyZSIsdGhpcy52ZXJzaW9uLHRoaXMub3B0aW9ucyxlKSwhKGUgaW5zdGFuY2VvZiBubikpe2lmKHR5cGVvZiBlPT0ic3RyaW5nIiYmZT09PXRoaXMudmVyc2lvbilyZXR1cm4gMDtlPW5ldyBubihlLHRoaXMub3B0aW9ucyl9cmV0dXJuIGUudmVyc2lvbj09PXRoaXMudmVyc2lvbj8wOnRoaXMuY29tcGFyZU1haW4oZSl8fHRoaXMuY29tcGFyZVByZShlKX1jb21wYXJlTWFpbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG5ufHwoZT1uZXcgbm4oZSx0aGlzLm9wdGlvbnMpKSxRbyh0aGlzLm1ham9yLGUubWFqb3IpfHxRbyh0aGlzLm1pbm9yLGUubWlub3IpfHxRbyh0aGlzLnBhdGNoLGUucGF0Y2gpfWNvbXBhcmVQcmUoZSl7aWYoZSBpbnN0YW5jZW9mIG5ufHwoZT1uZXcgbm4oZSx0aGlzLm9wdGlvbnMpKSx0aGlzLnByZXJlbGVhc2UubGVuZ3RoJiYhZS5wcmVyZWxlYXNlLmxlbmd0aClyZXR1cm4tMTtpZighdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCYmZS5wcmVyZWxlYXNlLmxlbmd0aClyZXR1cm4gMTtpZighdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCYmIWUucHJlcmVsZWFzZS5sZW5ndGgpcmV0dXJuIDA7bGV0IHQ9MDtkb3tjb25zdCBhPXRoaXMucHJlcmVsZWFzZVt0XSxzPWUucHJlcmVsZWFzZVt0XTtpZihEaSgicHJlcmVsZWFzZSBjb21wYXJlIix0LGEscyksYT09PXZvaWQgMCYmcz09PXZvaWQgMClyZXR1cm4gMDtpZihzPT09dm9pZCAwKXJldHVybiAxO2lmKGE9PT12b2lkIDApcmV0dXJuLTE7aWYoYT09PXMpY29udGludWU7cmV0dXJuIFFvKGEscyl9d2hpbGUoKyt0KX1jb21wYXJlQnVpbGQoZSl7ZSBpbnN0YW5jZW9mIG5ufHwoZT1uZXcgbm4oZSx0aGlzLm9wdGlvbnMpKTtsZXQgdD0wO2Rve2NvbnN0IGE9dGhpcy5idWlsZFt0XSxzPWUuYnVpbGRbdF07aWYoRGkoImJ1aWxkIGNvbXBhcmUiLHQsYSxzKSxhPT09dm9pZCAwJiZzPT09dm9pZCAwKXJldHVybiAwO2lmKHM9PT12b2lkIDApcmV0dXJuIDE7aWYoYT09PXZvaWQgMClyZXR1cm4tMTtpZihhPT09cyljb250aW51ZTtyZXR1cm4gUW8oYSxzKX13aGlsZSgrK3QpfWluYyhlLHQsYSl7aWYoZS5zdGFydHNXaXRoKCJwcmUiKSl7aWYoIXQmJmE9PT0hMSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgaW5jcmVtZW50IGFyZ3VtZW50OiBpZGVudGlmaWVyIGlzIGVtcHR5Iik7aWYodCl7Y29uc3Qgcz1uZXcgUmVnRXhwKGBeJHt0aGlzLm9wdGlvbnMubG9vc2U/bWhbTGkuUFJFUkVMRUFTRUxPT1NFXTptaFtMaS5QUkVSRUxFQVNFXX0kYCkscj1gLSR7dH1gLm1hdGNoKHMpO2lmKCFyfHxyWzFdIT09dCl0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgaWRlbnRpZmllcjogJHt0fWApfX1zd2l0Y2goZSl7Y2FzZSJwcmVtYWpvciI6dGhpcy5wcmVyZWxlYXNlLmxlbmd0aD0wLHRoaXMucGF0Y2g9MCx0aGlzLm1pbm9yPTAsdGhpcy5tYWpvcisrLHRoaXMuaW5jKCJwcmUiLHQsYSk7YnJlYWs7Y2FzZSJwcmVtaW5vciI6dGhpcy5wcmVyZWxlYXNlLmxlbmd0aD0wLHRoaXMucGF0Y2g9MCx0aGlzLm1pbm9yKyssdGhpcy5pbmMoInByZSIsdCxhKTticmVhaztjYXNlInByZXBhdGNoIjp0aGlzLnByZXJlbGVhc2UubGVuZ3RoPTAsdGhpcy5pbmMoInBhdGNoIix0LGEpLHRoaXMuaW5jKCJwcmUiLHQsYSk7YnJlYWs7Y2FzZSJwcmVyZWxlYXNlIjp0aGlzLnByZXJlbGVhc2UubGVuZ3RoPT09MCYmdGhpcy5pbmMoInBhdGNoIix0LGEpLHRoaXMuaW5jKCJwcmUiLHQsYSk7YnJlYWs7Y2FzZSJyZWxlYXNlIjppZih0aGlzLnByZXJlbGVhc2UubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoYHZlcnNpb24gJHt0aGlzLnJhd30gaXMgbm90IGEgcHJlcmVsZWFzZWApO3RoaXMucHJlcmVsZWFzZS5sZW5ndGg9MDticmVhaztjYXNlIm1ham9yIjoodGhpcy5taW5vciE9PTB8fHRoaXMucGF0Y2ghPT0wfHx0aGlzLnByZXJlbGVhc2UubGVuZ3RoPT09MCkmJnRoaXMubWFqb3IrKyx0aGlzLm1pbm9yPTAsdGhpcy5wYXRjaD0wLHRoaXMucHJlcmVsZWFzZT1bXTticmVhaztjYXNlIm1pbm9yIjoodGhpcy5wYXRjaCE9PTB8fHRoaXMucHJlcmVsZWFzZS5sZW5ndGg9PT0wKSYmdGhpcy5taW5vcisrLHRoaXMucGF0Y2g9MCx0aGlzLnByZXJlbGVhc2U9W107YnJlYWs7Y2FzZSJwYXRjaCI6dGhpcy5wcmVyZWxlYXNlLmxlbmd0aD09PTAmJnRoaXMucGF0Y2grKyx0aGlzLnByZXJlbGVhc2U9W107YnJlYWs7Y2FzZSJwcmUiOntjb25zdCBzPU51bWJlcihhKT8xOjA7aWYodGhpcy5wcmVyZWxlYXNlLmxlbmd0aD09PTApdGhpcy5wcmVyZWxlYXNlPVtzXTtlbHNle2xldCByPXRoaXMucHJlcmVsZWFzZS5sZW5ndGg7Zm9yKDstLXI+PTA7KXR5cGVvZiB0aGlzLnByZXJlbGVhc2Vbcl09PSJudW1iZXIiJiYodGhpcy5wcmVyZWxlYXNlW3JdKysscj0tMik7aWYocj09PS0xKXtpZih0PT09dGhpcy5wcmVyZWxlYXNlLmpvaW4oIi4iKSYmYT09PSExKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBpbmNyZW1lbnQgYXJndW1lbnQ6IGlkZW50aWZpZXIgYWxyZWFkeSBleGlzdHMiKTt0aGlzLnByZXJlbGVhc2UucHVzaChzKX19aWYodCl7bGV0IHI9W3Qsc107YT09PSExJiYocj1bdF0pLFFvKHRoaXMucHJlcmVsZWFzZVswXSx0KT09PTA/aXNOYU4odGhpcy5wcmVyZWxlYXNlWzFdKSYmKHRoaXMucHJlcmVsZWFzZT1yKTp0aGlzLnByZXJlbGVhc2U9cn1icmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcihgaW52YWxpZCBpbmNyZW1lbnQgYXJndW1lbnQ6ICR7ZX1gKX1yZXR1cm4gdGhpcy5yYXc9dGhpcy5mb3JtYXQoKSx0aGlzLmJ1aWxkLmxlbmd0aCYmKHRoaXMucmF3Kz1gKyR7dGhpcy5idWlsZC5qb2luKCIuIil9YCksdGhpc319O3ZhciBKdD1lVztjb25zdCBQaD1KdCx0Vz0obixlLHQ9ITEpPT57aWYobiBpbnN0YW5jZW9mIFBoKXJldHVybiBuO3RyeXtyZXR1cm4gbmV3IFBoKG4sZSl9Y2F0Y2goYSl7aWYoIXQpcmV0dXJuIG51bGw7dGhyb3cgYX19O3ZhciBvYT10Vztjb25zdCByVz1vYSxuVz0obixlKT0+e2NvbnN0IHQ9clcobixlKTtyZXR1cm4gdD90LnZlcnNpb246bnVsbH07dmFyIG9XPW5XO2NvbnN0IHNXPW9hLGFXPShuLGUpPT57Y29uc3QgdD1zVyhuLnRyaW0oKS5yZXBsYWNlKC9eWz12XSsvLCIiKSxlKTtyZXR1cm4gdD90LnZlcnNpb246bnVsbH07dmFyIGlXPWFXO2NvbnN0IHdoPUp0LGNXPShuLGUsdCxhLHMpPT57dHlwZW9mIHQ9PSJzdHJpbmciJiYocz1hLGE9dCx0PXZvaWQgMCk7dHJ5e3JldHVybiBuZXcgd2gobiBpbnN0YW5jZW9mIHdoP24udmVyc2lvbjpuLHQpLmluYyhlLGEscykudmVyc2lvbn1jYXRjaHtyZXR1cm4gbnVsbH19O3ZhciB1Vz1jVztjb25zdCB2aD1vYSxsVz0obixlKT0+e2NvbnN0IHQ9dmgobixudWxsLCEwKSxhPXZoKGUsbnVsbCwhMCkscz10LmNvbXBhcmUoYSk7aWYocz09PTApcmV0dXJuIG51bGw7Y29uc3Qgcj1zPjAsbz1yP3Q6YSxpPXI/YTp0LGM9ISFvLnByZXJlbGVhc2UubGVuZ3RoO2lmKCEhaS5wcmVyZWxlYXNlLmxlbmd0aCYmIWMpe2lmKCFpLnBhdGNoJiYhaS5taW5vcilyZXR1cm4ibWFqb3IiO2lmKGkuY29tcGFyZU1haW4obyk9PT0wKXJldHVybiBpLm1pbm9yJiYhaS5wYXRjaD8ibWlub3IiOiJwYXRjaCJ9Y29uc3QgZD1jPyJwcmUiOiIiO3JldHVybiB0Lm1ham9yIT09YS5tYWpvcj9kKyJtYWpvciI6dC5taW5vciE9PWEubWlub3I/ZCsibWlub3IiOnQucGF0Y2ghPT1hLnBhdGNoP2QrInBhdGNoIjoicHJlcmVsZWFzZSJ9O3ZhciBmVz1sVztjb25zdCBkVz1KdCxwVz0obixlKT0+bmV3IGRXKG4sZSkubWFqb3I7dmFyIGhXPXBXO2NvbnN0IGdXPUp0LGJXPShuLGUpPT5uZXcgZ1cobixlKS5taW5vcjt2YXIgeVc9Ylc7Y29uc3QgeFc9SnQsVFc9KG4sZSk9Pm5ldyB4VyhuLGUpLnBhdGNoO3ZhciBBVz1UVztjb25zdCBtVz1vYSxQVz0obixlKT0+e2NvbnN0IHQ9bVcobixlKTtyZXR1cm4gdCYmdC5wcmVyZWxlYXNlLmxlbmd0aD90LnByZXJlbGVhc2U6bnVsbH07dmFyIHdXPVBXO2NvbnN0IENoPUp0LHZXPShuLGUsdCk9Pm5ldyBDaChuLHQpLmNvbXBhcmUobmV3IENoKGUsdCkpO3ZhciBZcj12Vztjb25zdCBDVz1ZcixFVz0obixlLHQpPT5DVyhlLG4sdCk7dmFyIFdXPUVXO2NvbnN0IEJXPVlyLElXPShuLGUpPT5CVyhuLGUsITApO3ZhciBTVz1JVztjb25zdCBFaD1KdCxfVz0obixlLHQpPT57Y29uc3QgYT1uZXcgRWgobix0KSxzPW5ldyBFaChlLHQpO3JldHVybiBhLmNvbXBhcmUocyl8fGEuY29tcGFyZUJ1aWxkKHMpfTt2YXIgYjA9X1c7Y29uc3QgT1c9YjAsUlc9KG4sZSk9Pm4uc29ydCgodCxhKT0+T1codCxhLGUpKTt2YXIgTVc9Ulc7Y29uc3QgRlc9YjAsTlc9KG4sZSk9Pm4uc29ydCgodCxhKT0+RlcoYSx0LGUpKTt2YXIga1c9Tlc7Y29uc3QgVVc9WXIsRFc9KG4sZSx0KT0+VVcobixlLHQpPjA7dmFyIEtjPURXO2NvbnN0ICRXPVlyLExXPShuLGUsdCk9PiRXKG4sZSx0KTwwO3ZhciB5MD1MVztjb25zdCB6Vz1ZcixqVz0obixlLHQpPT56VyhuLGUsdCk9PT0wO3ZhciBUeD1qVztjb25zdCBWVz1ZcixHVz0obixlLHQpPT5WVyhuLGUsdCkhPT0wO3ZhciBBeD1HVztjb25zdCBIVz1ZcixLVz0obixlLHQpPT5IVyhuLGUsdCk+PTA7dmFyIHgwPUtXO2NvbnN0IFpXPVlyLHFXPShuLGUsdCk9PlpXKG4sZSx0KTw9MDt2YXIgVDA9cVc7Y29uc3QgSlc9VHgsWVc9QXgsWFc9S2MsUVc9eDAsZTQ9eTAsdDQ9VDAscjQ9KG4sZSx0LGEpPT57c3dpdGNoKGUpe2Nhc2UiPT09IjpyZXR1cm4gdHlwZW9mIG49PSJvYmplY3QiJiYobj1uLnZlcnNpb24pLHR5cGVvZiB0PT0ib2JqZWN0IiYmKHQ9dC52ZXJzaW9uKSxuPT09dDtjYXNlIiE9PSI6cmV0dXJuIHR5cGVvZiBuPT0ib2JqZWN0IiYmKG49bi52ZXJzaW9uKSx0eXBlb2YgdD09Im9iamVjdCImJih0PXQudmVyc2lvbiksbiE9PXQ7Y2FzZSIiOmNhc2UiPSI6Y2FzZSI9PSI6cmV0dXJuIEpXKG4sdCxhKTtjYXNlIiE9IjpyZXR1cm4gWVcobix0LGEpO2Nhc2UiPiI6cmV0dXJuIFhXKG4sdCxhKTtjYXNlIj49IjpyZXR1cm4gUVcobix0LGEpO2Nhc2UiPCI6cmV0dXJuIGU0KG4sdCxhKTtjYXNlIjw9IjpyZXR1cm4gdDQobix0LGEpO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBvcGVyYXRvcjogJHtlfWApfX07dmFyIG14PXI0O2NvbnN0IG40PUp0LG80PW9hLHtzYWZlUmU6emksdDpqaX09ZmksczQ9KG4sZSk9PntpZihuIGluc3RhbmNlb2YgbjQpcmV0dXJuIG47aWYodHlwZW9mIG49PSJudW1iZXIiJiYobj1TdHJpbmcobikpLHR5cGVvZiBuIT0ic3RyaW5nIilyZXR1cm4gbnVsbDtlPWV8fHt9O2xldCB0PW51bGw7aWYoIWUucnRsKXQ9bi5tYXRjaChlLmluY2x1ZGVQcmVyZWxlYXNlP3ppW2ppLkNPRVJDRUZVTExdOnppW2ppLkNPRVJDRV0pO2Vsc2V7Y29uc3QgYz1lLmluY2x1ZGVQcmVyZWxlYXNlP3ppW2ppLkNPRVJDRVJUTEZVTExdOnppW2ppLkNPRVJDRVJUTF07bGV0IGY7Zm9yKDsoZj1jLmV4ZWMobikpJiYoIXR8fHQuaW5kZXgrdFswXS5sZW5ndGghPT1uLmxlbmd0aCk7KSghdHx8Zi5pbmRleCtmWzBdLmxlbmd0aCE9PXQuaW5kZXgrdFswXS5sZW5ndGgpJiYodD1mKSxjLmxhc3RJbmRleD1mLmluZGV4K2ZbMV0ubGVuZ3RoK2ZbMl0ubGVuZ3RoO2MubGFzdEluZGV4PS0xfWlmKHQ9PT1udWxsKXJldHVybiBudWxsO2NvbnN0IGE9dFsyXSxzPXRbM118fCIwIixyPXRbNF18fCIwIixvPWUuaW5jbHVkZVByZXJlbGVhc2UmJnRbNV0/YC0ke3RbNV19YDoiIixpPWUuaW5jbHVkZVByZXJlbGVhc2UmJnRbNl0/YCske3RbNl19YDoiIjtyZXR1cm4gbzQoYCR7YX0uJHtzfS4ke3J9JHtvfSR7aX1gLGUpfTt2YXIgYTQ9czQ7Y2xhc3MgaTR7Y29uc3RydWN0b3IoKXt0aGlzLm1heD0xZTMsdGhpcy5tYXA9bmV3IE1hcH1nZXQoZSl7Y29uc3QgdD10aGlzLm1hcC5nZXQoZSk7aWYodCE9PXZvaWQgMClyZXR1cm4gdGhpcy5tYXAuZGVsZXRlKGUpLHRoaXMubWFwLnNldChlLHQpLHR9ZGVsZXRlKGUpe3JldHVybiB0aGlzLm1hcC5kZWxldGUoZSl9c2V0KGUsdCl7aWYoIXRoaXMuZGVsZXRlKGUpJiZ0IT09dm9pZCAwKXtpZih0aGlzLm1hcC5zaXplPj10aGlzLm1heCl7Y29uc3Qgcz10aGlzLm1hcC5rZXlzKCkubmV4dCgpLnZhbHVlO3RoaXMuZGVsZXRlKHMpfXRoaXMubWFwLnNldChlLHQpfXJldHVybiB0aGlzfX12YXIgYzQ9aTQsTnUsV2g7ZnVuY3Rpb24gWHIoKXtpZihXaClyZXR1cm4gTnU7V2g9MTtjb25zdCBuPS9ccysvZztjbGFzcyBle2NvbnN0cnVjdG9yKHgsdil7aWYodj1zKHYpLHggaW5zdGFuY2VvZiBlKXJldHVybiB4Lmxvb3NlPT09ISF2Lmxvb3NlJiZ4LmluY2x1ZGVQcmVyZWxlYXNlPT09ISF2LmluY2x1ZGVQcmVyZWxlYXNlP3g6bmV3IGUoeC5yYXcsdik7aWYoeCBpbnN0YW5jZW9mIHIpcmV0dXJuIHRoaXMucmF3PXgudmFsdWUsdGhpcy5zZXQ9W1t4XV0sdGhpcy5mb3JtYXR0ZWQ9dm9pZCAwLHRoaXM7aWYodGhpcy5vcHRpb25zPXYsdGhpcy5sb29zZT0hIXYubG9vc2UsdGhpcy5pbmNsdWRlUHJlcmVsZWFzZT0hIXYuaW5jbHVkZVByZXJlbGVhc2UsdGhpcy5yYXc9eC50cmltKCkucmVwbGFjZShuLCIgIiksdGhpcy5zZXQ9dGhpcy5yYXcuc3BsaXQoInx8IikubWFwKF89PnRoaXMucGFyc2VSYW5nZShfLnRyaW0oKSkpLmZpbHRlcihfPT5fLmxlbmd0aCksIXRoaXMuc2V0Lmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIFNlbVZlciBSYW5nZTogJHt0aGlzLnJhd31gKTtpZih0aGlzLnNldC5sZW5ndGg+MSl7Y29uc3QgXz10aGlzLnNldFswXTtpZih0aGlzLnNldD10aGlzLnNldC5maWx0ZXIoTT0+IWcoTVswXSkpLHRoaXMuc2V0Lmxlbmd0aD09PTApdGhpcy5zZXQ9W19dO2Vsc2UgaWYodGhpcy5zZXQubGVuZ3RoPjEpe2Zvcihjb25zdCBNIG9mIHRoaXMuc2V0KWlmKE0ubGVuZ3RoPT09MSYmQShNWzBdKSl7dGhpcy5zZXQ9W01dO2JyZWFrfX19dGhpcy5mb3JtYXR0ZWQ9dm9pZCAwfWdldCByYW5nZSgpe2lmKHRoaXMuZm9ybWF0dGVkPT09dm9pZCAwKXt0aGlzLmZvcm1hdHRlZD0iIjtmb3IobGV0IHg9MDt4PHRoaXMuc2V0Lmxlbmd0aDt4Kyspe3g+MCYmKHRoaXMuZm9ybWF0dGVkKz0ifHwiKTtjb25zdCB2PXRoaXMuc2V0W3hdO2ZvcihsZXQgXz0wO188di5sZW5ndGg7XysrKV8+MCYmKHRoaXMuZm9ybWF0dGVkKz0iICIpLHRoaXMuZm9ybWF0dGVkKz12W19dLnRvU3RyaW5nKCkudHJpbSgpfX1yZXR1cm4gdGhpcy5mb3JtYXR0ZWR9Zm9ybWF0KCl7cmV0dXJuIHRoaXMucmFuZ2V9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5yYW5nZX1wYXJzZVJhbmdlKHgpe2NvbnN0IF89KCh0aGlzLm9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UmJlQpfCh0aGlzLm9wdGlvbnMubG9vc2UmJlcpKSsiOiIreCxNPWEuZ2V0KF8pO2lmKE0pcmV0dXJuIE07Y29uc3Qgej10aGlzLm9wdGlvbnMubG9vc2UscT16P2NbZi5IWVBIRU5SQU5HRUxPT1NFXTpjW2YuSFlQSEVOUkFOR0VdO3g9eC5yZXBsYWNlKHEsJCh0aGlzLm9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UpKSxvKCJoeXBoZW4gcmVwbGFjZSIseCkseD14LnJlcGxhY2UoY1tmLkNPTVBBUkFUT1JUUklNXSxkKSxvKCJjb21wYXJhdG9yIHRyaW0iLHgpLHg9eC5yZXBsYWNlKGNbZi5USUxERVRSSU1dLHApLG8oInRpbGRlIHRyaW0iLHgpLHg9eC5yZXBsYWNlKGNbZi5DQVJFVFRSSU1dLGIpLG8oImNhcmV0IHRyaW0iLHgpO2xldCBRPXguc3BsaXQoIiAiKS5tYXAocGU9PncocGUsdGhpcy5vcHRpb25zKSkuam9pbigiICIpLnNwbGl0KC9ccysvKS5tYXAocGU9PkYocGUsdGhpcy5vcHRpb25zKSk7eiYmKFE9US5maWx0ZXIocGU9PihvKCJsb29zZSBpbnZhbGlkIGZpbHRlciIscGUsdGhpcy5vcHRpb25zKSwhIXBlLm1hdGNoKGNbZi5DT01QQVJBVE9STE9PU0VdKSkpKSxvKCJyYW5nZSBsaXN0IixRKTtjb25zdCBlZT1uZXcgTWFwLGdlPVEubWFwKHBlPT5uZXcgcihwZSx0aGlzLm9wdGlvbnMpKTtmb3IoY29uc3QgcGUgb2YgZ2Upe2lmKGcocGUpKXJldHVybltwZV07ZWUuc2V0KHBlLnZhbHVlLHBlKX1lZS5zaXplPjEmJmVlLmhhcygiIikmJmVlLmRlbGV0ZSgiIik7Y29uc3QgVGU9Wy4uLmVlLnZhbHVlcygpXTtyZXR1cm4gYS5zZXQoXyxUZSksVGV9aW50ZXJzZWN0cyh4LHYpe2lmKCEoeCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoImEgUmFuZ2UgaXMgcmVxdWlyZWQiKTtyZXR1cm4gdGhpcy5zZXQuc29tZShfPT5tKF8sdikmJnguc2V0LnNvbWUoTT0+bShNLHYpJiZfLmV2ZXJ5KHo9Pk0uZXZlcnkocT0+ei5pbnRlcnNlY3RzKHEsdikpKSkpfXRlc3QoeCl7aWYoIXgpcmV0dXJuITE7aWYodHlwZW9mIHg9PSJzdHJpbmciKXRyeXt4PW5ldyBpKHgsdGhpcy5vcHRpb25zKX1jYXRjaHtyZXR1cm4hMX1mb3IobGV0IHY9MDt2PHRoaXMuc2V0Lmxlbmd0aDt2KyspaWYoTyh0aGlzLnNldFt2XSx4LHRoaXMub3B0aW9ucykpcmV0dXJuITA7cmV0dXJuITF9fU51PWU7Y29uc3QgdD1jNCxhPW5ldyB0LHM9ZzAscj1aYygpLG89SGMsaT1KdCx7c2FmZVJlOmMsdDpmLGNvbXBhcmF0b3JUcmltUmVwbGFjZTpkLHRpbGRlVHJpbVJlcGxhY2U6cCxjYXJldFRyaW1SZXBsYWNlOmJ9PWZpLHtGTEFHX0lOQ0xVREVfUFJFUkVMRUFTRTpULEZMQUdfTE9PU0U6V309R2MsZz1SPT5SLnZhbHVlPT09IjwwLjAuMC0wIixBPVI9PlIudmFsdWU9PT0iIixtPShSLHgpPT57bGV0IHY9ITA7Y29uc3QgXz1SLnNsaWNlKCk7bGV0IE09Xy5wb3AoKTtmb3IoO3YmJl8ubGVuZ3RoOyl2PV8uZXZlcnkoej0+TS5pbnRlcnNlY3RzKHoseCkpLE09Xy5wb3AoKTtyZXR1cm4gdn0sdz0oUix4KT0+KG8oImNvbXAiLFIseCksUj1MKFIseCksbygiY2FyZXQiLFIpLFI9ayhSLHgpLG8oInRpbGRlcyIsUiksUj15KFIseCksbygieHJhbmdlIixSKSxSPUMoUix4KSxvKCJzdGFycyIsUiksUiksQj1SPT4hUnx8Ui50b0xvd2VyQ2FzZSgpPT09IngifHxSPT09IioiLGs9KFIseCk9PlIudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAodj0+Vih2LHgpKS5qb2luKCIgIiksVj0oUix4KT0+e2NvbnN0IHY9eC5sb29zZT9jW2YuVElMREVMT09TRV06Y1tmLlRJTERFXTtyZXR1cm4gUi5yZXBsYWNlKHYsKF8sTSx6LHEsUSk9PntvKCJ0aWxkZSIsUixfLE0seixxLFEpO2xldCBlZTtyZXR1cm4gQihNKT9lZT0iIjpCKHopP2VlPWA+PSR7TX0uMC4wIDwkeytNKzF9LjAuMC0wYDpCKHEpP2VlPWA+PSR7TX0uJHt6fS4wIDwke019LiR7K3orMX0uMC0wYDpRPyhvKCJyZXBsYWNlVGlsZGUgcHIiLFEpLGVlPWA+PSR7TX0uJHt6fS4ke3F9LSR7UX0gPCR7TX0uJHsreisxfS4wLTBgKTplZT1gPj0ke019LiR7en0uJHtxfSA8JHtNfS4keyt6KzF9LjAtMGAsbygidGlsZGUgcmV0dXJuIixlZSksZWV9KX0sTD0oUix4KT0+Ui50cmltKCkuc3BsaXQoL1xzKy8pLm1hcCh2PT5JKHYseCkpLmpvaW4oIiAiKSxJPShSLHgpPT57bygiY2FyZXQiLFIseCk7Y29uc3Qgdj14Lmxvb3NlP2NbZi5DQVJFVExPT1NFXTpjW2YuQ0FSRVRdLF89eC5pbmNsdWRlUHJlcmVsZWFzZT8iLTAiOiIiO3JldHVybiBSLnJlcGxhY2UodiwoTSx6LHEsUSxlZSk9PntvKCJjYXJldCIsUixNLHoscSxRLGVlKTtsZXQgZ2U7cmV0dXJuIEIoeik/Z2U9IiI6QihxKT9nZT1gPj0ke3p9LjAuMCR7X30gPCR7K3orMX0uMC4wLTBgOkIoUSk/ej09PSIwIj9nZT1gPj0ke3p9LiR7cX0uMCR7X30gPCR7en0uJHsrcSsxfS4wLTBgOmdlPWA+PSR7en0uJHtxfS4wJHtffSA8JHsreisxfS4wLjAtMGA6ZWU/KG8oInJlcGxhY2VDYXJldCBwciIsZWUpLHo9PT0iMCI/cT09PSIwIj9nZT1gPj0ke3p9LiR7cX0uJHtRfS0ke2VlfSA8JHt6fS4ke3F9LiR7K1ErMX0tMGA6Z2U9YD49JHt6fS4ke3F9LiR7UX0tJHtlZX0gPCR7en0uJHsrcSsxfS4wLTBgOmdlPWA+PSR7en0uJHtxfS4ke1F9LSR7ZWV9IDwkeyt6KzF9LjAuMC0wYCk6KG8oIm5vIHByIiksej09PSIwIj9xPT09IjAiP2dlPWA+PSR7en0uJHtxfS4ke1F9JHtffSA8JHt6fS4ke3F9LiR7K1ErMX0tMGA6Z2U9YD49JHt6fS4ke3F9LiR7UX0ke199IDwke3p9LiR7K3ErMX0uMC0wYDpnZT1gPj0ke3p9LiR7cX0uJHtRfSA8JHsreisxfS4wLjAtMGApLG8oImNhcmV0IHJldHVybiIsZ2UpLGdlfSl9LHk9KFIseCk9PihvKCJyZXBsYWNlWFJhbmdlcyIsUix4KSxSLnNwbGl0KC9ccysvKS5tYXAodj0+RSh2LHgpKS5qb2luKCIgIikpLEU9KFIseCk9PntSPVIudHJpbSgpO2NvbnN0IHY9eC5sb29zZT9jW2YuWFJBTkdFTE9PU0VdOmNbZi5YUkFOR0VdO3JldHVybiBSLnJlcGxhY2UodiwoXyxNLHoscSxRLGVlKT0+e28oInhSYW5nZSIsUixfLE0seixxLFEsZWUpO2NvbnN0IGdlPUIoeiksVGU9Z2V8fEIocSkscGU9VGV8fEIoUSksZmU9cGU7cmV0dXJuIE09PT0iPSImJmZlJiYoTT0iIiksZWU9eC5pbmNsdWRlUHJlcmVsZWFzZT8iLTAiOiIiLGdlP009PT0iPiJ8fE09PT0iPCI/Xz0iPDAuMC4wLTAiOl89IioiOk0mJmZlPyhUZSYmKHE9MCksUT0wLE09PT0iPiI/KE09Ij49IixUZT8oej0reisxLHE9MCxRPTApOihxPStxKzEsUT0wKSk6TT09PSI8PSImJihNPSI8IixUZT96PSt6KzE6cT0rcSsxKSxNPT09IjwiJiYoZWU9Ii0wIiksXz1gJHtNK3p9LiR7cX0uJHtRfSR7ZWV9YCk6VGU/Xz1gPj0ke3p9LjAuMCR7ZWV9IDwkeyt6KzF9LjAuMC0wYDpwZSYmKF89YD49JHt6fS4ke3F9LjAke2VlfSA8JHt6fS4keytxKzF9LjAtMGApLG8oInhSYW5nZSByZXR1cm4iLF8pLF99KX0sQz0oUix4KT0+KG8oInJlcGxhY2VTdGFycyIsUix4KSxSLnRyaW0oKS5yZXBsYWNlKGNbZi5TVEFSXSwiIikpLEY9KFIseCk9PihvKCJyZXBsYWNlR1RFMCIsUix4KSxSLnRyaW0oKS5yZXBsYWNlKGNbeC5pbmNsdWRlUHJlcmVsZWFzZT9mLkdURTBQUkU6Zi5HVEUwXSwiIikpLCQ9Uj0+KHgsdixfLE0seixxLFEsZWUsZ2UsVGUscGUsZmUpPT4oQihfKT92PSIiOkIoTSk/dj1gPj0ke199LjAuMCR7Uj8iLTAiOiIifWA6Qih6KT92PWA+PSR7X30uJHtNfS4wJHtSPyItMCI6IiJ9YDpxP3Y9YD49JHt2fWA6dj1gPj0ke3Z9JHtSPyItMCI6IiJ9YCxCKGdlKT9lZT0iIjpCKFRlKT9lZT1gPCR7K2dlKzF9LjAuMC0wYDpCKHBlKT9lZT1gPCR7Z2V9LiR7K1RlKzF9LjAtMGA6ZmU/ZWU9YDw9JHtnZX0uJHtUZX0uJHtwZX0tJHtmZX1gOlI/ZWU9YDwke2dlfS4ke1RlfS4keytwZSsxfS0wYDplZT1gPD0ke2VlfWAsYCR7dn0gJHtlZX1gLnRyaW0oKSksTz0oUix4LHYpPT57Zm9yKGxldCBfPTA7XzxSLmxlbmd0aDtfKyspaWYoIVJbX10udGVzdCh4KSlyZXR1cm4hMTtpZih4LnByZXJlbGVhc2UubGVuZ3RoJiYhdi5pbmNsdWRlUHJlcmVsZWFzZSl7Zm9yKGxldCBfPTA7XzxSLmxlbmd0aDtfKyspaWYobyhSW19dLnNlbXZlciksUltfXS5zZW12ZXIhPT1yLkFOWSYmUltfXS5zZW12ZXIucHJlcmVsZWFzZS5sZW5ndGg+MCl7Y29uc3QgTT1SW19dLnNlbXZlcjtpZihNLm1ham9yPT09eC5tYWpvciYmTS5taW5vcj09PXgubWlub3ImJk0ucGF0Y2g9PT14LnBhdGNoKXJldHVybiEwfXJldHVybiExfXJldHVybiEwfTtyZXR1cm4gTnV9dmFyIGt1LEJoO2Z1bmN0aW9uIFpjKCl7aWYoQmgpcmV0dXJuIGt1O0JoPTE7Y29uc3Qgbj1TeW1ib2woIlNlbVZlciBBTlkiKTtjbGFzcyBle3N0YXRpYyBnZXQgQU5ZKCl7cmV0dXJuIG59Y29uc3RydWN0b3IoZCxwKXtpZihwPXQocCksZCBpbnN0YW5jZW9mIGUpe2lmKGQubG9vc2U9PT0hIXAubG9vc2UpcmV0dXJuIGQ7ZD1kLnZhbHVlfWQ9ZC50cmltKCkuc3BsaXQoL1xzKy8pLmpvaW4oIiAiKSxvKCJjb21wYXJhdG9yIixkLHApLHRoaXMub3B0aW9ucz1wLHRoaXMubG9vc2U9ISFwLmxvb3NlLHRoaXMucGFyc2UoZCksdGhpcy5zZW12ZXI9PT1uP3RoaXMudmFsdWU9IiI6dGhpcy52YWx1ZT10aGlzLm9wZXJhdG9yK3RoaXMuc2VtdmVyLnZlcnNpb24sbygiY29tcCIsdGhpcyl9cGFyc2UoZCl7Y29uc3QgcD10aGlzLm9wdGlvbnMubG9vc2U/YVtzLkNPTVBBUkFUT1JMT09TRV06YVtzLkNPTVBBUkFUT1JdLGI9ZC5tYXRjaChwKTtpZighYil0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGNvbXBhcmF0b3I6ICR7ZH1gKTt0aGlzLm9wZXJhdG9yPWJbMV0hPT12b2lkIDA/YlsxXToiIix0aGlzLm9wZXJhdG9yPT09Ij0iJiYodGhpcy5vcGVyYXRvcj0iIiksYlsyXT90aGlzLnNlbXZlcj1uZXcgaShiWzJdLHRoaXMub3B0aW9ucy5sb29zZSk6dGhpcy5zZW12ZXI9bn10b1N0cmluZygpe3JldHVybiB0aGlzLnZhbHVlfXRlc3QoZCl7aWYobygiQ29tcGFyYXRvci50ZXN0IixkLHRoaXMub3B0aW9ucy5sb29zZSksdGhpcy5zZW12ZXI9PT1ufHxkPT09bilyZXR1cm4hMDtpZih0eXBlb2YgZD09InN0cmluZyIpdHJ5e2Q9bmV3IGkoZCx0aGlzLm9wdGlvbnMpfWNhdGNoe3JldHVybiExfXJldHVybiByKGQsdGhpcy5vcGVyYXRvcix0aGlzLnNlbXZlcix0aGlzLm9wdGlvbnMpfWludGVyc2VjdHMoZCxwKXtpZighKGQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhIENvbXBhcmF0b3IgaXMgcmVxdWlyZWQiKTtyZXR1cm4gdGhpcy5vcGVyYXRvcj09PSIiP3RoaXMudmFsdWU9PT0iIj8hMDpuZXcgYyhkLnZhbHVlLHApLnRlc3QodGhpcy52YWx1ZSk6ZC5vcGVyYXRvcj09PSIiP2QudmFsdWU9PT0iIj8hMDpuZXcgYyh0aGlzLnZhbHVlLHApLnRlc3QoZC5zZW12ZXIpOihwPXQocCkscC5pbmNsdWRlUHJlcmVsZWFzZSYmKHRoaXMudmFsdWU9PT0iPDAuMC4wLTAifHxkLnZhbHVlPT09IjwwLjAuMC0wIil8fCFwLmluY2x1ZGVQcmVyZWxlYXNlJiYodGhpcy52YWx1ZS5zdGFydHNXaXRoKCI8MC4wLjAiKXx8ZC52YWx1ZS5zdGFydHNXaXRoKCI8MC4wLjAiKSk/ITE6ISEodGhpcy5vcGVyYXRvci5zdGFydHNXaXRoKCI+IikmJmQub3BlcmF0b3Iuc3RhcnRzV2l0aCgiPiIpfHx0aGlzLm9wZXJhdG9yLnN0YXJ0c1dpdGgoIjwiKSYmZC5vcGVyYXRvci5zdGFydHNXaXRoKCI8Iil8fHRoaXMuc2VtdmVyLnZlcnNpb249PT1kLnNlbXZlci52ZXJzaW9uJiZ0aGlzLm9wZXJhdG9yLmluY2x1ZGVzKCI9IikmJmQub3BlcmF0b3IuaW5jbHVkZXMoIj0iKXx8cih0aGlzLnNlbXZlciwiPCIsZC5zZW12ZXIscCkmJnRoaXMub3BlcmF0b3Iuc3RhcnRzV2l0aCgiPiIpJiZkLm9wZXJhdG9yLnN0YXJ0c1dpdGgoIjwiKXx8cih0aGlzLnNlbXZlciwiPiIsZC5zZW12ZXIscCkmJnRoaXMub3BlcmF0b3Iuc3RhcnRzV2l0aCgiPCIpJiZkLm9wZXJhdG9yLnN0YXJ0c1dpdGgoIj4iKSkpfX1rdT1lO2NvbnN0IHQ9ZzAse3NhZmVSZTphLHQ6c309Zmkscj1teCxvPUhjLGk9SnQsYz1YcigpO3JldHVybiBrdX1jb25zdCB1ND1YcigpLGw0PShuLGUsdCk9Pnt0cnl7ZT1uZXcgdTQoZSx0KX1jYXRjaHtyZXR1cm4hMX1yZXR1cm4gZS50ZXN0KG4pfTt2YXIgcWM9bDQ7Y29uc3QgZjQ9WHIoKSxkND0obixlKT0+bmV3IGY0KG4sZSkuc2V0Lm1hcCh0PT50Lm1hcChhPT5hLnZhbHVlKS5qb2luKCIgIikudHJpbSgpLnNwbGl0KCIgIikpO3ZhciBwND1kNDtjb25zdCBoND1KdCxnND1YcigpLGI0PShuLGUsdCk9PntsZXQgYT1udWxsLHM9bnVsbCxyPW51bGw7dHJ5e3I9bmV3IGc0KGUsdCl9Y2F0Y2h7cmV0dXJuIG51bGx9cmV0dXJuIG4uZm9yRWFjaChvPT57ci50ZXN0KG8pJiYoIWF8fHMuY29tcGFyZShvKT09PS0xKSYmKGE9byxzPW5ldyBoNChhLHQpKX0pLGF9O3ZhciB5ND1iNDtjb25zdCB4ND1KdCxUND1YcigpLEE0PShuLGUsdCk9PntsZXQgYT1udWxsLHM9bnVsbCxyPW51bGw7dHJ5e3I9bmV3IFQ0KGUsdCl9Y2F0Y2h7cmV0dXJuIG51bGx9cmV0dXJuIG4uZm9yRWFjaChvPT57ci50ZXN0KG8pJiYoIWF8fHMuY29tcGFyZShvKT09PTEpJiYoYT1vLHM9bmV3IHg0KGEsdCkpfSksYX07dmFyIG00PUE0O2NvbnN0IFV1PUp0LFA0PVhyKCksSWg9S2MsdzQ9KG4sZSk9PntuPW5ldyBQNChuLGUpO2xldCB0PW5ldyBVdSgiMC4wLjAiKTtpZihuLnRlc3QodCl8fCh0PW5ldyBVdSgiMC4wLjAtMCIpLG4udGVzdCh0KSkpcmV0dXJuIHQ7dD1udWxsO2ZvcihsZXQgYT0wO2E8bi5zZXQubGVuZ3RoOysrYSl7Y29uc3Qgcz1uLnNldFthXTtsZXQgcj1udWxsO3MuZm9yRWFjaChvPT57Y29uc3QgaT1uZXcgVXUoby5zZW12ZXIudmVyc2lvbik7c3dpdGNoKG8ub3BlcmF0b3Ipe2Nhc2UiPiI6aS5wcmVyZWxlYXNlLmxlbmd0aD09PTA/aS5wYXRjaCsrOmkucHJlcmVsZWFzZS5wdXNoKDApLGkucmF3PWkuZm9ybWF0KCk7Y2FzZSIiOmNhc2UiPj0iOighcnx8SWgoaSxyKSkmJihyPWkpO2JyZWFrO2Nhc2UiPCI6Y2FzZSI8PSI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgb3BlcmF0aW9uOiAke28ub3BlcmF0b3J9YCl9fSksciYmKCF0fHxJaCh0LHIpKSYmKHQ9cil9cmV0dXJuIHQmJm4udGVzdCh0KT90Om51bGx9O3ZhciB2ND13NDtjb25zdCBDND1YcigpLEU0PShuLGUpPT57dHJ5e3JldHVybiBuZXcgQzQobixlKS5yYW5nZXx8IioifWNhdGNoe3JldHVybiBudWxsfX07dmFyIFc0PUU0O2NvbnN0IEI0PUp0LFB4PVpjKCkse0FOWTpJNH09UHgsUzQ9WHIoKSxfND1xYyxTaD1LYyxfaD15MCxPND1UMCxSND14MCxNND0obixlLHQsYSk9PntuPW5ldyBCNChuLGEpLGU9bmV3IFM0KGUsYSk7bGV0IHMscixvLGksYztzd2l0Y2godCl7Y2FzZSI+IjpzPVNoLHI9TzQsbz1faCxpPSI+IixjPSI+PSI7YnJlYWs7Y2FzZSI8IjpzPV9oLHI9UjQsbz1TaCxpPSI8IixjPSI8PSI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCdNdXN0IHByb3ZpZGUgYSBoaWxvIHZhbCBvZiAiPCIgb3IgIj4iJyl9aWYoXzQobixlLGEpKXJldHVybiExO2ZvcihsZXQgZj0wO2Y8ZS5zZXQubGVuZ3RoOysrZil7Y29uc3QgZD1lLnNldFtmXTtsZXQgcD1udWxsLGI9bnVsbDtpZihkLmZvckVhY2goVD0+e1Quc2VtdmVyPT09STQmJihUPW5ldyBQeCgiPj0wLjAuMCIpKSxwPXB8fFQsYj1ifHxULHMoVC5zZW12ZXIscC5zZW12ZXIsYSk/cD1UOm8oVC5zZW12ZXIsYi5zZW12ZXIsYSkmJihiPVQpfSkscC5vcGVyYXRvcj09PWl8fHAub3BlcmF0b3I9PT1jfHwoIWIub3BlcmF0b3J8fGIub3BlcmF0b3I9PT1pKSYmcihuLGIuc2VtdmVyKSlyZXR1cm4hMTtpZihiLm9wZXJhdG9yPT09YyYmbyhuLGIuc2VtdmVyKSlyZXR1cm4hMX1yZXR1cm4hMH07dmFyIEEwPU00O2NvbnN0IEY0PUEwLE40PShuLGUsdCk9PkY0KG4sZSwiPiIsdCk7dmFyIGs0PU40O2NvbnN0IFU0PUEwLEQ0PShuLGUsdCk9PlU0KG4sZSwiPCIsdCk7dmFyICQ0PUQ0O2NvbnN0IE9oPVhyKCksTDQ9KG4sZSx0KT0+KG49bmV3IE9oKG4sdCksZT1uZXcgT2goZSx0KSxuLmludGVyc2VjdHMoZSx0KSk7dmFyIHo0PUw0O2NvbnN0IGo0PXFjLFY0PVlyO3ZhciBHND0obixlLHQpPT57Y29uc3QgYT1bXTtsZXQgcz1udWxsLHI9bnVsbDtjb25zdCBvPW4uc29ydCgoZCxwKT0+VjQoZCxwLHQpKTtmb3IoY29uc3QgZCBvZiBvKWo0KGQsZSx0KT8ocj1kLHN8fChzPWQpKToociYmYS5wdXNoKFtzLHJdKSxyPW51bGwscz1udWxsKTtzJiZhLnB1c2goW3MsbnVsbF0pO2NvbnN0IGk9W107Zm9yKGNvbnN0W2QscF1vZiBhKWQ9PT1wP2kucHVzaChkKTohcCYmZD09PW9bMF0/aS5wdXNoKCIqIik6cD9kPT09b1swXT9pLnB1c2goYDw9JHtwfWApOmkucHVzaChgJHtkfSAtICR7cH1gKTppLnB1c2goYD49JHtkfWApO2NvbnN0IGM9aS5qb2luKCIgfHwgIiksZj10eXBlb2YgZS5yYXc9PSJzdHJpbmciP2UucmF3OlN0cmluZyhlKTtyZXR1cm4gYy5sZW5ndGg8Zi5sZW5ndGg/YzplfTtjb25zdCBSaD1YcigpLG0wPVpjKCkse0FOWTpEdX09bTAseWE9cWMsUDA9WXIsSDQ9KG4sZSx0PXt9KT0+e2lmKG49PT1lKXJldHVybiEwO249bmV3IFJoKG4sdCksZT1uZXcgUmgoZSx0KTtsZXQgYT0hMTtlOmZvcihjb25zdCBzIG9mIG4uc2V0KXtmb3IoY29uc3QgciBvZiBlLnNldCl7Y29uc3Qgbz1aNChzLHIsdCk7aWYoYT1hfHxvIT09bnVsbCxvKWNvbnRpbnVlIGV9aWYoYSlyZXR1cm4hMX1yZXR1cm4hMH0sSzQ9W25ldyBtMCgiPj0wLjAuMC0wIildLE1oPVtuZXcgbTAoIj49MC4wLjAiKV0sWjQ9KG4sZSx0KT0+e2lmKG49PT1lKXJldHVybiEwO2lmKG4ubGVuZ3RoPT09MSYmblswXS5zZW12ZXI9PT1EdSl7aWYoZS5sZW5ndGg9PT0xJiZlWzBdLnNlbXZlcj09PUR1KXJldHVybiEwO3QuaW5jbHVkZVByZXJlbGVhc2U/bj1LNDpuPU1ofWlmKGUubGVuZ3RoPT09MSYmZVswXS5zZW12ZXI9PT1EdSl7aWYodC5pbmNsdWRlUHJlcmVsZWFzZSlyZXR1cm4hMDtlPU1ofWNvbnN0IGE9bmV3IFNldDtsZXQgcyxyO2Zvcihjb25zdCBUIG9mIG4pVC5vcGVyYXRvcj09PSI+Inx8VC5vcGVyYXRvcj09PSI+PSI/cz1GaChzLFQsdCk6VC5vcGVyYXRvcj09PSI8Inx8VC5vcGVyYXRvcj09PSI8PSI/cj1OaChyLFQsdCk6YS5hZGQoVC5zZW12ZXIpO2lmKGEuc2l6ZT4xKXJldHVybiBudWxsO2xldCBvO2lmKHMmJnIpe2lmKG89UDAocy5zZW12ZXIsci5zZW12ZXIsdCksbz4wKXJldHVybiBudWxsO2lmKG89PT0wJiYocy5vcGVyYXRvciE9PSI+PSJ8fHIub3BlcmF0b3IhPT0iPD0iKSlyZXR1cm4gbnVsbH1mb3IoY29uc3QgVCBvZiBhKXtpZihzJiYheWEoVCxTdHJpbmcocyksdCl8fHImJiF5YShULFN0cmluZyhyKSx0KSlyZXR1cm4gbnVsbDtmb3IoY29uc3QgVyBvZiBlKWlmKCF5YShULFN0cmluZyhXKSx0KSlyZXR1cm4hMTtyZXR1cm4hMH1sZXQgaSxjLGYsZCxwPXImJiF0LmluY2x1ZGVQcmVyZWxlYXNlJiZyLnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aD9yLnNlbXZlcjohMSxiPXMmJiF0LmluY2x1ZGVQcmVyZWxlYXNlJiZzLnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aD9zLnNlbXZlcjohMTtwJiZwLnByZXJlbGVhc2UubGVuZ3RoPT09MSYmci5vcGVyYXRvcj09PSI8IiYmcC5wcmVyZWxlYXNlWzBdPT09MCYmKHA9ITEpO2Zvcihjb25zdCBUIG9mIGUpe2lmKGQ9ZHx8VC5vcGVyYXRvcj09PSI+Inx8VC5vcGVyYXRvcj09PSI+PSIsZj1mfHxULm9wZXJhdG9yPT09IjwifHxULm9wZXJhdG9yPT09Ijw9IixzKXtpZihiJiZULnNlbXZlci5wcmVyZWxlYXNlJiZULnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCYmVC5zZW12ZXIubWFqb3I9PT1iLm1ham9yJiZULnNlbXZlci5taW5vcj09PWIubWlub3ImJlQuc2VtdmVyLnBhdGNoPT09Yi5wYXRjaCYmKGI9ITEpLFQub3BlcmF0b3I9PT0iPiJ8fFQub3BlcmF0b3I9PT0iPj0iKXtpZihpPUZoKHMsVCx0KSxpPT09VCYmaSE9PXMpcmV0dXJuITF9ZWxzZSBpZihzLm9wZXJhdG9yPT09Ij49IiYmIXlhKHMuc2VtdmVyLFN0cmluZyhUKSx0KSlyZXR1cm4hMX1pZihyKXtpZihwJiZULnNlbXZlci5wcmVyZWxlYXNlJiZULnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCYmVC5zZW12ZXIubWFqb3I9PT1wLm1ham9yJiZULnNlbXZlci5taW5vcj09PXAubWlub3ImJlQuc2VtdmVyLnBhdGNoPT09cC5wYXRjaCYmKHA9ITEpLFQub3BlcmF0b3I9PT0iPCJ8fFQub3BlcmF0b3I9PT0iPD0iKXtpZihjPU5oKHIsVCx0KSxjPT09VCYmYyE9PXIpcmV0dXJuITF9ZWxzZSBpZihyLm9wZXJhdG9yPT09Ijw9IiYmIXlhKHIuc2VtdmVyLFN0cmluZyhUKSx0KSlyZXR1cm4hMX1pZighVC5vcGVyYXRvciYmKHJ8fHMpJiZvIT09MClyZXR1cm4hMX1yZXR1cm4hKHMmJmYmJiFyJiZvIT09MHx8ciYmZCYmIXMmJm8hPT0wfHxifHxwKX0sRmg9KG4sZSx0KT0+e2lmKCFuKXJldHVybiBlO2NvbnN0IGE9UDAobi5zZW12ZXIsZS5zZW12ZXIsdCk7cmV0dXJuIGE+MD9uOmE8MHx8ZS5vcGVyYXRvcj09PSI+IiYmbi5vcGVyYXRvcj09PSI+PSI/ZTpufSxOaD0obixlLHQpPT57aWYoIW4pcmV0dXJuIGU7Y29uc3QgYT1QMChuLnNlbXZlcixlLnNlbXZlcix0KTtyZXR1cm4gYTwwP246YT4wfHxlLm9wZXJhdG9yPT09IjwiJiZuLm9wZXJhdG9yPT09Ijw9Ij9lOm59O3ZhciBxND1INDtjb25zdCAkdT1maSxraD1HYyxKND1KdCxVaD14eCxZND1vYSxYND1vVyxRND1pVyxlQj11Vyx0Qj1mVyxyQj1oVyxuQj15VyxvQj1BVyxzQj13VyxhQj1ZcixpQj1XVyxjQj1TVyx1Qj1iMCxsQj1NVyxmQj1rVyxkQj1LYyxwQj15MCxoQj1UeCxnQj1BeCxiQj14MCx5Qj1UMCx4Qj1teCxUQj1hNCxBQj1aYygpLG1CPVhyKCksUEI9cWMsd0I9cDQsdkI9eTQsQ0I9bTQsRUI9djQsV0I9VzQsQkI9QTAsSUI9azQsU0I9JDQsX0I9ejQsT0I9RzQsUkI9cTQ7dmFyIE1CPXtwYXJzZTpZNCx2YWxpZDpYNCxjbGVhbjpRNCxpbmM6ZUIsZGlmZjp0QixtYWpvcjpyQixtaW5vcjpuQixwYXRjaDpvQixwcmVyZWxlYXNlOnNCLGNvbXBhcmU6YUIscmNvbXBhcmU6aUIsY29tcGFyZUxvb3NlOmNCLGNvbXBhcmVCdWlsZDp1Qixzb3J0OmxCLHJzb3J0OmZCLGd0OmRCLGx0OnBCLGVxOmhCLG5lcTpnQixndGU6YkIsbHRlOnlCLGNtcDp4Qixjb2VyY2U6VEIsQ29tcGFyYXRvcjpBQixSYW5nZTptQixzYXRpc2ZpZXM6UEIsdG9Db21wYXJhdG9yczp3QixtYXhTYXRpc2Z5aW5nOnZCLG1pblNhdGlzZnlpbmc6Q0IsbWluVmVyc2lvbjpFQix2YWxpZFJhbmdlOldCLG91dHNpZGU6QkIsZ3RyOklCLGx0cjpTQixpbnRlcnNlY3RzOl9CLHNpbXBsaWZ5UmFuZ2U6T0Isc3Vic2V0OlJCLFNlbVZlcjpKNCxyZTokdS5yZSxzcmM6JHUuc3JjLHRva2VuczokdS50LFNFTVZFUl9TUEVDX1ZFUlNJT046a2guU0VNVkVSX1NQRUNfVkVSU0lPTixSRUxFQVNFX1RZUEVTOmtoLlJFTEVBU0VfVFlQRVMsY29tcGFyZUlkZW50aWZpZXJzOlVoLmNvbXBhcmVJZGVudGlmaWVycyxyY29tcGFyZUlkZW50aWZpZXJzOlVoLnJjb21wYXJlSWRlbnRpZmllcnN9O2NvbnN0IHd4PVRkKE1CKTtjbGFzcyB2eHtpbnZhbGlkKGUpe3JldHVybiBlLm1zZ3x8YEludmFsaWQgJHtlLm5hbWV9JHtlLnR5cGU9PT0iYWRkcmVzcyI/IiBhZGRyZXNzIjoiIn0gcHJvdmlkZWRgfW5vdFBvc2l0aXZlKGUpe3JldHVybmAke2UubmFtZX0gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXJgfW5vdEVxdWFsKGUpe3JldHVybiBlLm1zZ3x8YCR7ZS5uYW1lcz8uWzBdfSBjYW4gbm90IGJlIGVxdWFsIHRvICR7ZS5uYW1lcz8uWzFdfWB9bm90VmFsaWQoZSl7Y29uc3QgdD17fTtsZXQgYT0hMTtmb3IoY29uc3QgcyBvZiBlKXtjb25zdHtuYW1lOnIsbmFtZXM6byx2YWx1ZTppLHR5cGU6YyxndDpmLGx0OmQsZ3RlOnAsbHRlOmIsb3B0aW9uYWw6VH09cztpZighKFQmJighJHQoaSl8fGMhPT0iYm9vbGVhbiImJmk9PT0hMSkpKXtzd2l0Y2godFtyXT1zLnZhbHVlLGMpe2Nhc2UiYWRkcmVzcyI6dGEoaSk/dFtyXT1hZShpKTphPSEwO2JyZWFrO2Nhc2UiaW50ZWdlciI6KCFWbihpKXx8dHlwZW9mIGY9PSJudW1iZXIiJiZpPD1mfHx0eXBlb2YgZD09Im51bWJlciImJmk+PWR8fHR5cGVvZiBwPT0ibnVtYmVyIiYmaTxwfHx0eXBlb2YgYj09Im51bWJlciImJmk+YikmJihhPSEwKTticmVhaztjYXNlInBvc2l0aXZlLWludGVnZXIiOmlmKCFWbihpKXx8aTw9MCl0aHJvdyBuZXcgRXJyb3IodGhpcy5ub3RQb3NpdGl2ZShzKSk7YnJlYWs7Y2FzZSJ0b2tlbklkIjooIWp0KGkpfHwhaS5sZW5ndGgpJiYoYT0hMCk7YnJlYWs7Y2FzZSJub3RFbXB0eU9iamVjdCI6KCFzaShpKXx8IU9iamVjdC5rZXlzKGkpLmxlbmd0aCkmJihhPSEwKTticmVhaztjYXNlIm5vdEVxdWFsIjppZihvJiZ0W29bMF1dPT09dFtvWzFdXSl0aHJvdyBuZXcgRXJyb3IodGhpcy5ub3RFcXVhbChzKSk7YnJlYWs7Y2FzZSJyZXNvdXJjZSI6WyJCQU5EV0lEVEgiLCJFTkVSR1kiXS5pbmNsdWRlcyhpKXx8KGE9ITApO2JyZWFrO2Nhc2UidXJsIjpRZChpKXx8KGE9ITApO2JyZWFrO2Nhc2UiaGV4IjpvbyhpKXx8KGE9ITApO2JyZWFrO2Nhc2UiYXJyYXkiOkFycmF5LmlzQXJyYXkoaSl8fChhPSEwKTticmVhaztjYXNlIm5vdC1lbXB0eS1zdHJpbmciOighanQoaSl8fCFpLmxlbmd0aCkmJihhPSEwKTticmVhaztjYXNlImJvb2xlYW4iOl95KGkpfHwoYT0hMCk7YnJlYWs7Y2FzZSJzdHJpbmciOighanQoaSl8fHR5cGVvZiBmPT0ibnVtYmVyIiYmaS5sZW5ndGg8PWZ8fHR5cGVvZiBkPT0ibnVtYmVyIiYmaS5sZW5ndGg+PWR8fHR5cGVvZiBwPT0ibnVtYmVyIiYmaS5sZW5ndGg8cHx8dHlwZW9mIGI9PSJudW1iZXIiJiZpLmxlbmd0aD5iKSYmKGE9ITApO2JyZWFrfWlmKGEpdGhyb3cgbmV3IEVycm9yKHRoaXMuaW52YWxpZChzKSl9fXJldHVybiExfX12YXIgTGU7KGZ1bmN0aW9uKG4pe24uQWNjb3VudENyZWF0ZUNvbnRyYWN0PSJBY2NvdW50Q3JlYXRlQ29udHJhY3QiLG4uVHJhbnNmZXJDb250cmFjdD0iVHJhbnNmZXJDb250cmFjdCIsbi5UcmFuc2ZlckFzc2V0Q29udHJhY3Q9IlRyYW5zZmVyQXNzZXRDb250cmFjdCIsbi5Wb3RlQXNzZXRDb250cmFjdD0iVm90ZUFzc2V0Q29udHJhY3QiLG4uVm90ZVdpdG5lc3NDb250cmFjdD0iVm90ZVdpdG5lc3NDb250cmFjdCIsbi5XaXRuZXNzQ3JlYXRlQ29udHJhY3Q9IldpdG5lc3NDcmVhdGVDb250cmFjdCIsbi5Bc3NldElzc3VlQ29udHJhY3Q9IkFzc2V0SXNzdWVDb250cmFjdCIsbi5XaXRuZXNzVXBkYXRlQ29udHJhY3Q9IldpdG5lc3NVcGRhdGVDb250cmFjdCIsbi5QYXJ0aWNpcGF0ZUFzc2V0SXNzdWVDb250cmFjdD0iUGFydGljaXBhdGVBc3NldElzc3VlQ29udHJhY3QiLG4uQWNjb3VudFVwZGF0ZUNvbnRyYWN0PSJBY2NvdW50VXBkYXRlQ29udHJhY3QiLG4uRnJlZXplQmFsYW5jZUNvbnRyYWN0PSJGcmVlemVCYWxhbmNlQ29udHJhY3QiLG4uVW5mcmVlemVCYWxhbmNlQ29udHJhY3Q9IlVuZnJlZXplQmFsYW5jZUNvbnRyYWN0IixuLkNhbmNlbEFsbFVuZnJlZXplVjJDb250cmFjdD0iQ2FuY2VsQWxsVW5mcmVlemVWMkNvbnRyYWN0IixuLldpdGhkcmF3QmFsYW5jZUNvbnRyYWN0PSJXaXRoZHJhd0JhbGFuY2VDb250cmFjdCIsbi5VbmZyZWV6ZUFzc2V0Q29udHJhY3Q9IlVuZnJlZXplQXNzZXRDb250cmFjdCIsbi5VcGRhdGVBc3NldENvbnRyYWN0PSJVcGRhdGVBc3NldENvbnRyYWN0IixuLlByb3Bvc2FsQ3JlYXRlQ29udHJhY3Q9IlByb3Bvc2FsQ3JlYXRlQ29udHJhY3QiLG4uUHJvcG9zYWxBcHByb3ZlQ29udHJhY3Q9IlByb3Bvc2FsQXBwcm92ZUNvbnRyYWN0IixuLlByb3Bvc2FsRGVsZXRlQ29udHJhY3Q9IlByb3Bvc2FsRGVsZXRlQ29udHJhY3QiLG4uU2V0QWNjb3VudElkQ29udHJhY3Q9IlNldEFjY291bnRJZENvbnRyYWN0IixuLkN1c3RvbUNvbnRyYWN0PSJDdXN0b21Db250cmFjdCIsbi5DcmVhdGVTbWFydENvbnRyYWN0PSJDcmVhdGVTbWFydENvbnRyYWN0IixuLlRyaWdnZXJTbWFydENvbnRyYWN0PSJUcmlnZ2VyU21hcnRDb250cmFjdCIsbi5HZXRDb250cmFjdD0iR2V0Q29udHJhY3QiLG4uVXBkYXRlU2V0dGluZ0NvbnRyYWN0PSJVcGRhdGVTZXR0aW5nQ29udHJhY3QiLG4uRXhjaGFuZ2VDcmVhdGVDb250cmFjdD0iRXhjaGFuZ2VDcmVhdGVDb250cmFjdCIsbi5FeGNoYW5nZUluamVjdENvbnRyYWN0PSJFeGNoYW5nZUluamVjdENvbnRyYWN0IixuLkV4Y2hhbmdlV2l0aGRyYXdDb250cmFjdD0iRXhjaGFuZ2VXaXRoZHJhd0NvbnRyYWN0IixuLkV4Y2hhbmdlVHJhbnNhY3Rpb25Db250cmFjdD0iRXhjaGFuZ2VUcmFuc2FjdGlvbkNvbnRyYWN0IixuLlVwZGF0ZUVuZXJneUxpbWl0Q29udHJhY3Q9IlVwZGF0ZUVuZXJneUxpbWl0Q29udHJhY3QiLG4uQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdD0iQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdCIsbi5DbGVhckFCSUNvbnRyYWN0PSJDbGVhckFCSUNvbnRyYWN0IixuLlVwZGF0ZUJyb2tlcmFnZUNvbnRyYWN0PSJVcGRhdGVCcm9rZXJhZ2VDb250cmFjdCIsbi5TaGllbGRlZFRyYW5zZmVyQ29udHJhY3Q9IlNoaWVsZGVkVHJhbnNmZXJDb250cmFjdCIsbi5NYXJrZXRTZWxsQXNzZXRDb250cmFjdD0iTWFya2V0U2VsbEFzc2V0Q29udHJhY3QiLG4uTWFya2V0Q2FuY2VsT3JkZXJDb250cmFjdD0iTWFya2V0Q2FuY2VsT3JkZXJDb250cmFjdCIsbi5GcmVlemVCYWxhbmNlVjJDb250cmFjdD0iRnJlZXplQmFsYW5jZVYyQ29udHJhY3QiLG4uVW5mcmVlemVCYWxhbmNlVjJDb250cmFjdD0iVW5mcmVlemVCYWxhbmNlVjJDb250cmFjdCIsbi5XaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3Q9IldpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdCIsbi5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3Q9IkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdCIsbi5VbkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdD0iVW5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QiLG4uVU5SRUNPR05JWkVEPSJVTlJFQ09HTklaRUQifSkoTGV8fChMZT17fSkpO3ZhciBEaDsoZnVuY3Rpb24obil7bltuLk93bmVyPTBdPSJPd25lciIsbltuLldpdG5lc3M9MV09IldpdG5lc3MiLG5bbi5BY3RpdmU9Ml09IkFjdGl2ZSIsbltuLlVOUkVDT0dOSVpFRD0tMV09IlVOUkVDT0dOSVpFRCJ9KShEaHx8KERoPXt9KSk7dmFyICRoOyhmdW5jdGlvbihuKXtuW24uTm9ybWFsPTBdPSJOb3JtYWwiLG5bbi5Bc3NldElzc3VlPTFdPSJBc3NldElzc3VlIixuW24uQ29udHJhY3Q9Ml09IkNvbnRyYWN0IixuW24uVU5SRUNPR05JWkVEPS0xXT0iVU5SRUNPR05JWkVEIn0pKCRofHwoJGg9e30pKTtmdW5jdGlvbiBSdChuKXtyZXR1cm4gbnQuZnJvbVV0ZjgobikucmVwbGFjZSgvXjB4LywiIil9ZnVuY3Rpb24gTHUobil7cmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobikpfWZ1bmN0aW9uIEZCKG4sZSx0KXtpZihuLkVycm9yKXRocm93IG5ldyBFcnJvcihuLkVycm9yKTtpZihuLnJlc3VsdCYmbi5yZXN1bHQubWVzc2FnZSl0aHJvdyBuZXcgRXJyb3IobnQudG9VdGY4KG4ucmVzdWx0Lm1lc3NhZ2UpKTtpZih2MChuLGUsdCkpcmV0dXJuIG47dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRyYW5zYWN0aW9uIil9ZnVuY3Rpb24gTkIobixlLHQpe2lmKG4uRXJyb3IpdGhyb3cgbmV3IEVycm9yKG4uRXJyb3IpO2lmKG4ucmVzdWx0JiZuLnJlc3VsdC5tZXNzYWdlKXRocm93IG5ldyBFcnJvcihudC50b1V0Zjgobi5yZXN1bHQubWVzc2FnZSkpO2lmKCEodC5faXNDb25zdGFudHx8dC5lc3RpbWF0ZUVuZXJneSkpe2lmKHYwKG4udHJhbnNhY3Rpb24sZSx0KSlyZXR1cm4gbjt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdHJhbnNhY3Rpb24iKX1yZXR1cm4gbn1mdW5jdGlvbiBrQihuLGUpe3JldHVybiI0MSIrJGUobmV3IFVpbnQ4QXJyYXkoSXQoZStuKSkpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLnNsaWNlKDI0KX1mdW5jdGlvbiBDeChuPXt9KXtpZih0eXBlb2Ygbi5yZWZfYmxvY2tfYnl0ZXM+InUiJiZ0eXBlb2Ygbi5yZWZfYmxvY2tfaGFzaD4idSImJnR5cGVvZiBuLmV4cGlyYXRpb24+InUiJiZ0eXBlb2Ygbi50aW1lc3RhbXA+InUiKXJldHVybiExO2lmKHR5cGVvZiBuLnJlZl9ibG9ja19ieXRlcyE9InN0cmluZyIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHJlZl9ibG9ja19ieXRlcyBwcm92aWRlZC4iKTtpZih0eXBlb2Ygbi5yZWZfYmxvY2tfaGFzaCE9InN0cmluZyIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHJlZl9ibG9ja19oYXNoIHByb3ZpZGVkLiIpO2lmKHR5cGVvZiBuLmV4cGlyYXRpb24hPSJudW1iZXIiKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBleHBpcmF0aW9uIHByb3ZpZGVkLiIpO2lmKHR5cGVvZiBuLnRpbWVzdGFtcCE9Im51bWJlciIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRpbWVzdGFtcCBwcm92aWRlZC4iKTtyZXR1cm4hMH1hc3luYyBmdW5jdGlvbiBHZShuLGUsdCxhLHM9e30pe2NvbnN0IHI9e3Zpc2libGU6ITEsdHhJRDoiIixyYXdfZGF0YV9oZXg6IiIscmF3X2RhdGE6e2NvbnRyYWN0Olt7cGFyYW1ldGVyOnt2YWx1ZTp0LHR5cGVfdXJsOmB0eXBlLmdvb2dsZWFwaXMuY29tL3Byb3RvY29sLiR7ZX1gfSx0eXBlOmV9XSwuLi5DeChzKT97fTphd2FpdCBuLnRyeC5nZXRDdXJyZW50UmVmQmxvY2tQYXJhbXMoKSwuLi5zfX07YSYmKHIucmF3X2RhdGEuY29udHJhY3RbMF0uUGVybWlzc2lvbl9pZD1hKTtjb25zdCBvPXcwKHIpO3JldHVybiByLnR4SUQ9TXgobykucmVwbGFjZSgvXjB4LywiIiksci5yYXdfZGF0YV9oZXg9UngobykudG9Mb3dlckNhc2UoKSxyfWZ1bmN0aW9uIEhlKG49e30pe2NvbnN0IGU9e307cmV0dXJuIEN4KG4uYmxvY2tIZWFkZXIpJiYoZS5yZWZfYmxvY2tfYnl0ZXM9bi5ibG9ja0hlYWRlci5yZWZfYmxvY2tfYnl0ZXMsZS5yZWZfYmxvY2tfaGFzaD1uLmJsb2NrSGVhZGVyLnJlZl9ibG9ja19oYXNoLGUuZXhwaXJhdGlvbj1uLmJsb2NrSGVhZGVyLmV4cGlyYXRpb24sZS50aW1lc3RhbXA9bi5ibG9ja0hlYWRlci50aW1lc3RhbXApLGV9Y2xhc3MgVUJ7Y29uc3RydWN0b3IoZSl7Wih0aGlzLCJ0cm9uV2ViIik7Wih0aGlzLCJ2YWxpZGF0b3IiKTtpZighZXx8IShlIGluc3RhbmNlb2YgbnQpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgaW5zdGFuY2Ugb2YgVHJvbldlYiIpO3RoaXMudHJvbldlYj1lLHRoaXMudmFsaWRhdG9yPW5ldyB2eH1hc3luYyBzZW5kVHJ4KGUsdD0wLGE9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCxzPXt9KXt0PXBhcnNlSW50KHQpLHRoaXMudmFsaWRhdG9yLm5vdFZhbGlkKFt7bmFtZToicmVjaXBpZW50Iix0eXBlOiJhZGRyZXNzIix2YWx1ZTplfSx7bmFtZToib3JpZ2luIix0eXBlOiJhZGRyZXNzIix2YWx1ZTphfSx7bmFtZXM6WyJyZWNpcGllbnQiLCJvcmlnaW4iXSx0eXBlOiJub3RFcXVhbCIsbXNnOiJDYW5ub3QgdHJhbnNmZXIgVFJYIHRvIHRoZSBzYW1lIGFjY291bnQifSx7bmFtZToiYW1vdW50Iix0eXBlOiJpbnRlZ2VyIixndDowLHZhbHVlOnR9XSk7Y29uc3Qgcj17dG9fYWRkcmVzczphZShlKSxvd25lcl9hZGRyZXNzOmFlKGEpLGFtb3VudDp0fSxvPUhlKHMpO3JldHVybiBHZSh0aGlzLnRyb25XZWIsTGUuVHJhbnNmZXJDb250cmFjdCxyLHM/LnBlcm1pc3Npb25JZCxvKX1hc3luYyBzZW5kVG9rZW4oZSx0PTAsYSxzPXRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgscj17fSl7dD1wYXJzZUludCh0KSx0aGlzLnZhbGlkYXRvci5ub3RWYWxpZChbe25hbWU6InJlY2lwaWVudCIsdHlwZToiYWRkcmVzcyIsdmFsdWU6ZX0se25hbWU6Im9yaWdpbiIsdHlwZToiYWRkcmVzcyIsdmFsdWU6c30se25hbWVzOlsicmVjaXBpZW50Iiwib3JpZ2luIl0sdHlwZToibm90RXF1YWwiLG1zZzoiQ2Fubm90IHRyYW5zZmVyIHRva2VucyB0byB0aGUgc2FtZSBhY2NvdW50In0se25hbWU6ImFtb3VudCIsdHlwZToiaW50ZWdlciIsZ3Q6MCx2YWx1ZTp0fSx7bmFtZToidG9rZW4gSUQiLHR5cGU6InRva2VuSWQiLHZhbHVlOmF9XSk7Y29uc3Qgbz17dG9fYWRkcmVzczphZShlKSxvd25lcl9hZGRyZXNzOmFlKHMpLGFzc2V0X25hbWU6UnQoYSksYW1vdW50OnR9LGk9SGUocik7cmV0dXJuIEdlKHRoaXMudHJvbldlYixMZS5UcmFuc2ZlckFzc2V0Q29udHJhY3QsbyxyPy5wZXJtaXNzaW9uSWQsaSl9YXN5bmMgcHVyY2hhc2VUb2tlbihlLHQsYT0wLHM9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCxyPXt9KXt0aGlzLnZhbGlkYXRvci5ub3RWYWxpZChbe25hbWU6ImJ1eWVyIix0eXBlOiJhZGRyZXNzIix2YWx1ZTpzfSx7bmFtZToiaXNzdWVyIix0eXBlOiJhZGRyZXNzIix2YWx1ZTplfSx7bmFtZXM6WyJidXllciIsImlzc3VlciJdLHR5cGU6Im5vdEVxdWFsIixtc2c6IkNhbm5vdCBwdXJjaGFzZSB0b2tlbnMgZnJvbSBzYW1lIGFjY291bnQifSx7bmFtZToiYW1vdW50Iix0eXBlOiJpbnRlZ2VyIixndDowLHZhbHVlOmF9LHtuYW1lOiJ0b2tlbiBJRCIsdHlwZToidG9rZW5JZCIsdmFsdWU6dH1dKTtjb25zdCBvPXt0b19hZGRyZXNzOmFlKGUpLG93bmVyX2FkZHJlc3M6YWUocyksYXNzZXRfbmFtZTpSdCh0KSxhbW91bnQ6cGFyc2VJbnQoYSl9LGk9SGUocik7cmV0dXJuIEdlKHRoaXMudHJvbldlYixMZS5QYXJ0aWNpcGF0ZUFzc2V0SXNzdWVDb250cmFjdCxvLHI/LnBlcm1pc3Npb25JZCxpKX1hc3luYyBmcmVlemVCYWxhbmNlKGU9MCx0PTMsYT0iQkFORFdJRFRIIixzPXRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgscixvPXt9KXt0aGlzLnZhbGlkYXRvci5ub3RWYWxpZChbe25hbWU6Im9yaWdpbiIsdHlwZToiYWRkcmVzcyIsdmFsdWU6c30se25hbWU6InJlY2VpdmVyIix0eXBlOiJhZGRyZXNzIix2YWx1ZTpyLG9wdGlvbmFsOiEwfSx7bmFtZToiYW1vdW50Iix0eXBlOiJpbnRlZ2VyIixndDowLHZhbHVlOmV9LHtuYW1lOiJkdXJhdGlvbiIsdHlwZToiaW50ZWdlciIsZ3RlOjMsdmFsdWU6dH0se25hbWU6InJlc291cmNlIix0eXBlOiJyZXNvdXJjZSIsdmFsdWU6YSxtc2c6J0ludmFsaWQgcmVzb3VyY2UgcHJvdmlkZWQ6IEV4cGVjdGVkICJCQU5EV0lEVEgiIG9yICJFTkVSR1kiJ31dKTtjb25zdCBpPXtvd25lcl9hZGRyZXNzOmFlKHMpLGZyb3plbl9iYWxhbmNlOnBhcnNlSW50KGUpLGZyb3plbl9kdXJhdGlvbjpwYXJzZUludChTdHJpbmcodCkpfTthIT09IkJBTkRXSURUSCImJihpLnJlc291cmNlPWEpLCR0KHIpJiZhZShyKSE9PWFlKHMpJiYoaS5yZWNlaXZlcl9hZGRyZXNzPWFlKHIpKTtjb25zdCBjPUhlKG8pO3JldHVybiBHZSh0aGlzLnRyb25XZWIsTGUuRnJlZXplQmFsYW5jZUNvbnRyYWN0LGksbz8ucGVybWlzc2lvbklkLGMpfWFzeW5jIHVuZnJlZXplQmFsYW5jZShlPSJCQU5EV0lEVEgiLHQ9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCxhLHM9e30pe3RoaXMudmFsaWRhdG9yLm5vdFZhbGlkKFt7bmFtZToib3JpZ2luIix0eXBlOiJhZGRyZXNzIix2YWx1ZTp0fSx7bmFtZToicmVjZWl2ZXIiLHR5cGU6ImFkZHJlc3MiLHZhbHVlOmEsb3B0aW9uYWw6ITB9LHtuYW1lOiJyZXNvdXJjZSIsdHlwZToicmVzb3VyY2UiLHZhbHVlOmUsbXNnOidJbnZhbGlkIHJlc291cmNlIHByb3ZpZGVkOiBFeHBlY3RlZCAiQkFORFdJRFRIIiBvciAiRU5FUkdZIid9XSk7Y29uc3Qgcj17b3duZXJfYWRkcmVzczphZSh0KX07ZSE9PSJCQU5EV0lEVEgiJiYoci5yZXNvdXJjZT1lKSwkdChhKSYmYWUoYSkhPT1hZSh0KSYmKHIucmVjZWl2ZXJfYWRkcmVzcz1hZShhKSk7Y29uc3Qgbz1IZShzKTtyZXR1cm4gR2UodGhpcy50cm9uV2ViLExlLlVuZnJlZXplQmFsYW5jZUNvbnRyYWN0LHIscz8ucGVybWlzc2lvbklkLG8pfWFzeW5jIGZyZWV6ZUJhbGFuY2VWMihlPTAsdD0iQkFORFdJRFRIIixhPXRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgscz17fSl7dGhpcy52YWxpZGF0b3Iubm90VmFsaWQoW3tuYW1lOiJvcmlnaW4iLHR5cGU6ImFkZHJlc3MiLHZhbHVlOmF9LHtuYW1lOiJhbW91bnQiLHR5cGU6ImludGVnZXIiLGd0OjAsdmFsdWU6ZX0se25hbWU6InJlc291cmNlIix0eXBlOiJyZXNvdXJjZSIsdmFsdWU6dCxtc2c6J0ludmFsaWQgcmVzb3VyY2UgcHJvdmlkZWQ6IEV4cGVjdGVkICJCQU5EV0lEVEgiIG9yICJFTkVSR1kiJ31dKTtjb25zdCByPXtvd25lcl9hZGRyZXNzOmFlKGEpLGZyb3plbl9iYWxhbmNlOnBhcnNlSW50KGUpfTt0IT09IkJBTkRXSURUSCImJihyLnJlc291cmNlPXQpO2NvbnN0IG89SGUocyk7cmV0dXJuIEdlKHRoaXMudHJvbldlYixMZS5GcmVlemVCYWxhbmNlVjJDb250cmFjdCxyLHM/LnBlcm1pc3Npb25JZCxvKX1hc3luYyB1bmZyZWV6ZUJhbGFuY2VWMihlPTAsdD0iQkFORFdJRFRIIixhPXRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgscz17fSl7dGhpcy52YWxpZGF0b3Iubm90VmFsaWQoW3tuYW1lOiJvcmlnaW4iLHR5cGU6ImFkZHJlc3MiLHZhbHVlOmF9LHtuYW1lOiJhbW91bnQiLHR5cGU6ImludGVnZXIiLGd0OjAsdmFsdWU6ZX0se25hbWU6InJlc291cmNlIix0eXBlOiJyZXNvdXJjZSIsdmFsdWU6dCxtc2c6J0ludmFsaWQgcmVzb3VyY2UgcHJvdmlkZWQ6IEV4cGVjdGVkICJCQU5EV0lEVEgiIG9yICJFTkVSR1kiJ31dKTtjb25zdCByPXtvd25lcl9hZGRyZXNzOmFlKGEpLHVuZnJlZXplX2JhbGFuY2U6cGFyc2VJbnQoZSl9O3QhPT0iQkFORFdJRFRIIiYmKHIucmVzb3VyY2U9dCk7Y29uc3Qgbz1IZShzKTtyZXR1cm4gR2UodGhpcy50cm9uV2ViLExlLlVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QscixzPy5wZXJtaXNzaW9uSWQsbyl9YXN5bmMgY2FuY2VsVW5mcmVlemVCYWxhbmNlVjIoZT10aGlzLnRyb25XZWIuZGVmYXVsdEFkZHJlc3MuaGV4LHQ9e30pe3RoaXMudmFsaWRhdG9yLm5vdFZhbGlkKFt7bmFtZToib3JpZ2luIix0eXBlOiJhZGRyZXNzIix2YWx1ZTplfV0pO2NvbnN0IGE9e293bmVyX2FkZHJlc3M6YWUoZSl9LHM9SGUodCk7cmV0dXJuIEdlKHRoaXMudHJvbldlYixMZS5DYW5jZWxBbGxVbmZyZWV6ZVYyQ29udHJhY3QsYSx0Py5wZXJtaXNzaW9uSWQscyl9YXN5bmMgZGVsZWdhdGVSZXNvdXJjZShlPTAsdCxhPSJCQU5EV0lEVEgiLHM9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCxyPSExLG8saT17fSl7aWYodGhpcy52YWxpZGF0b3Iubm90VmFsaWQoW3tuYW1lOiJhbW91bnQiLHR5cGU6ImludGVnZXIiLGd0OjAsdmFsdWU6ZX0se25hbWU6InJlc291cmNlIix0eXBlOiJyZXNvdXJjZSIsdmFsdWU6YSxtc2c6J0ludmFsaWQgcmVzb3VyY2UgcHJvdmlkZWQ6IEV4cGVjdGVkICJCQU5EV0lEVEgiIG9yICJFTkVSR1kiJ30se25hbWU6InJlY2VpdmVyIix0eXBlOiJhZGRyZXNzIix2YWx1ZTp0fSx7bmFtZToib3JpZ2luIix0eXBlOiJhZGRyZXNzIix2YWx1ZTpzfSx7bmFtZToibG9jayIsdHlwZToiYm9vbGVhbiIsdmFsdWU6cn0se25hbWU6ImxvY2sgcGVyaW9kIix0eXBlOiJpbnRlZ2VyIixndGU6MCx2YWx1ZTpvLG9wdGlvbmFsOiEwfV0pLGFlKHQpPT09YWUocykpdGhyb3cgbmV3IEVycm9yKCJSZWNlaXZlciBhZGRyZXNzIG11c3Qgbm90IGJlIHRoZSBzYW1lIGFzIG93bmVyIGFkZHJlc3MiKTtjb25zdCBjPXtvd25lcl9hZGRyZXNzOmFlKHMpLHJlY2VpdmVyX2FkZHJlc3M6YWUodCksYmFsYW5jZTpwYXJzZUludChlKX07YSE9PSJCQU5EV0lEVEgiJiYoYy5yZXNvdXJjZT1hKSxyJiYoYy5sb2NrPXIsJHQobykmJihjLmxvY2tfcGVyaW9kPW8pKTtjb25zdCBmPUhlKGkpO3JldHVybiBHZSh0aGlzLnRyb25XZWIsTGUuRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LGMsaT8ucGVybWlzc2lvbklkLGYpfWFzeW5jIHVuZGVsZWdhdGVSZXNvdXJjZShlPTAsdCxhPSJCQU5EV0lEVEgiLHM9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCxyPXt9KXtpZih0aGlzLnZhbGlkYXRvci5ub3RWYWxpZChbe25hbWU6Im9yaWdpbiIsdHlwZToiYWRkcmVzcyIsdmFsdWU6c30se25hbWU6InJlY2VpdmVyIix0eXBlOiJhZGRyZXNzIix2YWx1ZTp0fSx7bmFtZToiYW1vdW50Iix0eXBlOiJpbnRlZ2VyIixndDowLHZhbHVlOmV9LHtuYW1lOiJyZXNvdXJjZSIsdHlwZToicmVzb3VyY2UiLHZhbHVlOmEsbXNnOidJbnZhbGlkIHJlc291cmNlIHByb3ZpZGVkOiBFeHBlY3RlZCAiQkFORFdJRFRIIiBvciAiRU5FUkdZIid9XSksYWUodCk9PT1hZShzKSl0aHJvdyBuZXcgRXJyb3IoIlJlY2VpdmVyIGFkZHJlc3MgbXVzdCBub3QgYmUgdGhlIHNhbWUgYXMgb3duZXIgYWRkcmVzcyIpO2NvbnN0IG89e293bmVyX2FkZHJlc3M6YWUocykscmVjZWl2ZXJfYWRkcmVzczphZSh0KSxiYWxhbmNlOnBhcnNlSW50KGUpfTthIT09IkJBTkRXSURUSCImJihvLnJlc291cmNlPWEpO2NvbnN0IGk9SGUocik7cmV0dXJuIEdlKHRoaXMudHJvbldlYixMZS5VbkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdCxvLHI/LnBlcm1pc3Npb25JZCxpKX1hc3luYyB3aXRoZHJhd0V4cGlyZVVuZnJlZXplKGU9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCx0PXt9KXt0aGlzLnZhbGlkYXRvci5ub3RWYWxpZChbe25hbWU6Im9yaWdpbiIsdHlwZToiYWRkcmVzcyIsdmFsdWU6ZX1dKTtjb25zdCBhPXtvd25lcl9hZGRyZXNzOmFlKGUpfSxzPUhlKHQpO3JldHVybiBHZSh0aGlzLnRyb25XZWIsTGUuV2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0LGEsdD8ucGVybWlzc2lvbklkLHMpfWFzeW5jIHdpdGhkcmF3QmxvY2tSZXdhcmRzKGU9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCx0PXt9KXt0aGlzLnZhbGlkYXRvci5ub3RWYWxpZChbe25hbWU6Im9yaWdpbiIsdHlwZToiYWRkcmVzcyIsdmFsdWU6ZX1dKTtjb25zdCBhPXtvd25lcl9hZGRyZXNzOmFlKGUpfSxzPUhlKHQpO3JldHVybiBHZSh0aGlzLnRyb25XZWIsTGUuV2l0aGRyYXdCYWxhbmNlQ29udHJhY3QsYSx0Py5wZXJtaXNzaW9uSWQscyl9YXN5bmMgYXBwbHlGb3JTUihlPXRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgsdD0iIixhPXt9KXt0aGlzLnZhbGlkYXRvci5ub3RWYWxpZChbe25hbWU6Im9yaWdpbiIsdHlwZToiYWRkcmVzcyIsdmFsdWU6ZX0se25hbWU6InVybCIsdHlwZToidXJsIix2YWx1ZTp0LG1zZzoiSW52YWxpZCB1cmwgcHJvdmlkZWQifSx7bmFtZToidXJsIix0eXBlOiJzdHJpbmciLHZhbHVlOnQsbHRlOjI1Nixtc2c6IkludmFsaWQgdXJsIHByb3ZpZGVkIn1dKTtjb25zdCBzPXtvd25lcl9hZGRyZXNzOmFlKGUpLHVybDpSdCh0KX0scj1IZShhKTtyZXR1cm4gR2UodGhpcy50cm9uV2ViLExlLldpdG5lc3NDcmVhdGVDb250cmFjdCxzLGE/LnBlcm1pc3Npb25JZCxyKX1hc3luYyB1cGRhdGVXaXRuZXNzKGU9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCx0PSIiLGE9e30pe3RoaXMudmFsaWRhdG9yLm5vdFZhbGlkKFt7bmFtZToib3JpZ2luIix0eXBlOiJhZGRyZXNzIix2YWx1ZTplfSx7bmFtZToidXJsIix0eXBlOiJ1cmwiLHZhbHVlOnQsbXNnOiJJbnZhbGlkIHVybCBwcm92aWRlZCJ9LHtuYW1lOiJ1cmwiLHR5cGU6InN0cmluZyIsdmFsdWU6dCxsdGU6MjU2LG1zZzoiSW52YWxpZCB1cmwgcHJvdmlkZWQifV0pO2NvbnN0IHM9e293bmVyX2FkZHJlc3M6YWUoZSksdXBkYXRlX3VybDpSdCh0KX0scj1IZShhKTtyZXR1cm4gR2UodGhpcy50cm9uV2ViLExlLldpdG5lc3NVcGRhdGVDb250cmFjdCxzLGE/LnBlcm1pc3Npb25JZCxyKX1hc3luYyB2b3RlKGU9e30sdD10aGlzLnRyb25XZWIuZGVmYXVsdEFkZHJlc3MuaGV4LGE9e30pe3RoaXMudmFsaWRhdG9yLm5vdFZhbGlkKFt7bmFtZToidm90ZXIiLHR5cGU6ImFkZHJlc3MiLHZhbHVlOnR9LHtuYW1lOiJ2b3RlcyIsdHlwZToibm90RW1wdHlPYmplY3QiLHZhbHVlOmV9XSk7Y29uc3Qgcz1PYmplY3QuZW50cmllcyhlKTtmb3IoY29uc3RbYyxmXW9mIHMpdGhpcy52YWxpZGF0b3Iubm90VmFsaWQoW3tuYW1lOiJTUiIsdHlwZToiYWRkcmVzcyIsdmFsdWU6Y30se25hbWU6InZvdGUgY291bnQiLHR5cGU6ImludGVnZXIiLGd0OjAsdmFsdWU6Zixtc2c6IkludmFsaWQgdm90ZSBjb3VudCBwcm92aWRlZCBmb3IgU1I6ICIrY31dKTtjb25zdCByPXMubWFwKChbYyxmXSk9Pih7dm90ZV9hZGRyZXNzOmFlKGMpLHZvdGVfY291bnQ6cGFyc2VJbnQoZil9KSksbz17b3duZXJfYWRkcmVzczphZSh0KSx2b3RlczpyfSxpPUhlKGEpO3JldHVybiBHZSh0aGlzLnRyb25XZWIsTGUuVm90ZVdpdG5lc3NDb250cmFjdCxvLGE/LnBlcm1pc3Npb25JZCxpKX1hc3luYyBjcmVhdGVTbWFydENvbnRyYWN0KGU9e30sdD10aGlzLnRyb25XZWIuZGVmYXVsdEFkZHJlc3MuaGV4KXtjb25zdCBhPWUuZmVlTGltaXR8fHRoaXMudHJvbldlYi5mZWVMaW1pdDtsZXQgcz1lLnVzZXJGZWVQZXJjZW50YWdlO3R5cGVvZiBzIT0ibnVtYmVyIiYmIXMmJihzPTEwMCk7Y29uc3Qgcj1lLm9yaWdpbkVuZXJneUxpbWl0fHwxZTcsbz1lLmNhbGxWYWx1ZXx8MCxpPWUudG9rZW5WYWx1ZSxjPWUudG9rZW5JZHx8ZS50b2tlbl9pZDtsZXR7YWJpOmZ9PWU7Y29uc3R7cGFyYW1ldGVyczpkPVtdfT1lO2xldCBwPSIiO2NvbnN0e2J5dGVjb2RlOmI9ITEsbmFtZTpUPSIifT1lO2lmKGYmJmp0KGYpKXRyeXtmPUpTT04ucGFyc2UoZil9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG9wdGlvbnMuYWJpIHByb3ZpZGVkIil9Y29uc3QgVz1mO2xldCBnPVc7aWYoVy5lbnRyeXMmJihnPVcuZW50cnlzKSwhYXMoZykpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG9wdGlvbnMuYWJpIHByb3ZpZGVkIik7Y29uc3QgQT1nLnNvbWUoRT0+RS50eXBlPT09ImNvbnN0cnVjdG9yIiYmRS5zdGF0ZU11dGFiaWxpdHkudG9Mb3dlckNhc2UoKT09PSJwYXlhYmxlIik7aWYodGhpcy52YWxpZGF0b3Iubm90VmFsaWQoW3tuYW1lOiJieXRlY29kZSIsdHlwZToiaGV4Iix2YWx1ZTpifSx7bmFtZToiZmVlTGltaXQiLHR5cGU6ImludGVnZXIiLHZhbHVlOmEsZ3Q6MH0se25hbWU6ImNhbGxWYWx1ZSIsdHlwZToiaW50ZWdlciIsdmFsdWU6byxndGU6MH0se25hbWU6InVzZXJGZWVQZXJjZW50YWdlIix0eXBlOiJpbnRlZ2VyIix2YWx1ZTpzLGd0ZTowLGx0ZToxMDB9LHtuYW1lOiJvcmlnaW5FbmVyZ3lMaW1pdCIsdHlwZToiaW50ZWdlciIsdmFsdWU6cixndGU6MCxsdGU6MWU3fSx7bmFtZToicGFyYW1ldGVycyIsdHlwZToiYXJyYXkiLHZhbHVlOmR9LHtuYW1lOiJpc3N1ZXIiLHR5cGU6ImFkZHJlc3MiLHZhbHVlOnR9LHtuYW1lOiJ0b2tlblZhbHVlIix0eXBlOiJpbnRlZ2VyIix2YWx1ZTppLGd0ZTowLG9wdGlvbmFsOiEwfSx7bmFtZToidG9rZW5JZCIsdHlwZToiaW50ZWdlciIsdmFsdWU6YyxndGU6MCxvcHRpb25hbDohMH1dKSwhQSYmKG8+MHx8aT4wKSl0aHJvdyBuZXcgRXJyb3IoIldoZW4gY29udHJhY3QgaXMgbm90IHBheWFibGUsIG9wdGlvbnMuY2FsbFZhbHVlIGFuZCBvcHRpb25zLnRva2VuVmFsdWUgbXVzdCBiZSAwIik7Y29uc3R7cmF3UGFyYW1ldGVyOm0sZnVuY0FCSVYyOncscGFyYW1ldGVyc1YyOkJ9PWU7aWYobSYmanQobSkpcD1tLnJlcGxhY2UoL14oMHgpLywiIik7ZWxzZSBpZih3KXA9T2EodyxCKS5yZXBsYWNlKC9eKDB4KS8sIiIpO2Vsc2V7bGV0IEU9Zy5maW5kKEM9PkMudHlwZT09PSJjb25zdHJ1Y3RvciIpO2lmKHR5cGVvZiBFPCJ1IiYmRSl7Y29uc3QgQz1uZXcgWG4sRj1bXSwkPVtdO2lmKEU9RS5pbnB1dHMsZC5sZW5ndGghPUUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgY29uc3RydWN0b3IgbmVlZHMgJHtFLmxlbmd0aH0gYnV0ICR7ZC5sZW5ndGh9IHByb3ZpZGVkYCk7Zm9yKGxldCBPPTA7TzxkLmxlbmd0aDtPKyspe2xldCBSPUVbT10udHlwZSx4PWRbT107aWYoIVJ8fCFqdChSKXx8IVIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBwYXJhbWV0ZXIgdHlwZSBwcm92aWRlZDogIitSKTtjb25zdCB2PV89PmFzKF8pP18ubWFwKE09PnYoTSkpOmFlKF8pLnJlcGxhY2Uod2EsIjB4Iik7Uj09PSJhZGRyZXNzInx8Ui5tYXRjaCgvXihbXlx4NWJdKikoXHg1YnwkKS8pPy5bMF09PT0iYWRkcmVzc1siP3g9dih4KTovdHJjVG9rZW4vLnRlc3QoUikmJihSPVIucmVwbGFjZSgvdHJjVG9rZW4vLCJ1aW50MjU2IikpLEYucHVzaChSKSwkLnB1c2goeCl9dHJ5e3A9Qy5lbmNvZGUoRiwkKS5yZXBsYWNlKC9eKDB4KS8sIiIpfWNhdGNoKE8pe3Rocm93IG5ldyBFcnJvcihPKX19ZWxzZSBwPSIifWNvbnN0IGs9e293bmVyX2FkZHJlc3M6YWUodCksZmVlX2xpbWl0OnBhcnNlSW50KGEpLGNhbGxfdmFsdWU6cGFyc2VJbnQobyksY29uc3VtZV91c2VyX3Jlc291cmNlX3BlcmNlbnQ6cyxvcmlnaW5fZW5lcmd5X2xpbWl0OnIsYWJpOkpTT04uc3RyaW5naWZ5KGcpLGJ5dGVjb2RlOmIscGFyYW1ldGVyOnAsbmFtZTpUfTskdChpKSYmKGsuY2FsbF90b2tlbl92YWx1ZT1wYXJzZUludChpKSksJHQoYykmJihrLnRva2VuX2lkPXBhcnNlSW50KGMpKTtjb25zdCBWPXt9O1Yub3duZXJfYWRkcmVzcz1rLm93bmVyX2FkZHJlc3MsJHQoay5jYWxsX3Rva2VuX3ZhbHVlKSYmKFYuY2FsbF90b2tlbl92YWx1ZT1rLmNhbGxfdG9rZW5fdmFsdWUpLCR0KGsudG9rZW5faWQpJiYoVi50b2tlbl9pZD1rLnRva2VuX2lkKTtjb25zdCBMPVYubmV3X2NvbnRyYWN0PXt9O2suYWJpP0wuYWJpPXtlbnRyeXM6SlNPTi5wYXJzZShrLmFiaSl9OkwuYWJpPXt9LGsuY2FsbF92YWx1ZSYmKEwuY2FsbF92YWx1ZT1rLmNhbGxfdmFsdWUpLEwuY29uc3VtZV91c2VyX3Jlc291cmNlX3BlcmNlbnQ9ay5jb25zdW1lX3VzZXJfcmVzb3VyY2VfcGVyY2VudCxMLm9yaWdpbl9lbmVyZ3lfbGltaXQ9ay5vcmlnaW5fZW5lcmd5X2xpbWl0LEwub3JpZ2luX2FkZHJlc3M9ay5vcmlnaW5fYWRkcmVzcz8/ay5vd25lcl9hZGRyZXNzLGsuYnl0ZWNvZGUray5wYXJhbWV0ZXImJihMLmJ5dGVjb2RlPShrLmJ5dGVjb2RlK2sucGFyYW1ldGVyKS5yZXBsYWNlKC9eMHgvLCIiKSksJHQoay5uYW1lKSYmKEwubmFtZT1rLm5hbWUpO2NvbnN0IEk9SGUoZSkseT1hd2FpdCBHZSh0aGlzLnRyb25XZWIsTGUuQ3JlYXRlU21hcnRDb250cmFjdCxWLGU/LnBlcm1pc3Npb25JZCx7Li4uSSxmZWVfbGltaXQ6ay5mZWVfbGltaXR9KTtyZXR1cm4geS5jb250cmFjdF9hZGRyZXNzPWtCKGsub3duZXJfYWRkcmVzcyx5LnR4SUQpLHl9YXN5bmMgdHJpZ2dlclNtYXJ0Q29udHJhY3QoZSx0LGEscyxyKXtjb25zdCBvPVtlLHQsYSxzLHJdO3JldHVybiB0eXBlb2Ygb1syXSE9Im9iamVjdCImJihvWzJdPXtmZWVMaW1pdDpvWzJdLGNhbGxWYWx1ZTpvWzNdfSxvLnNwbGljZSgzLDEpKSxvWzJdPy50eExvY2FsP3RoaXMuX3RyaWdnZXJTbWFydENvbnRyYWN0TG9jYWwoLi4ubyk6dGhpcy5fdHJpZ2dlclNtYXJ0Q29udHJhY3QoLi4ubyl9YXN5bmMgdHJpZ2dlckNvbnN0YW50Q29udHJhY3QoZSx0LGE9e30scz1bXSxyPXRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgpe3JldHVybiBhLl9pc0NvbnN0YW50PSEwLHRoaXMuX3RyaWdnZXJTbWFydENvbnRyYWN0KGUsdCxhLHMscil9YXN5bmMgdHJpZ2dlckNvbmZpcm1lZENvbnN0YW50Q29udHJhY3QoZSx0LGE9e30scz1bXSxyPXRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgpe3JldHVybiBhLl9pc0NvbnN0YW50PSEwLGEuY29uZmlybWVkPSEwLHRoaXMuX3RyaWdnZXJTbWFydENvbnRyYWN0KGUsdCxhLHMscil9YXN5bmMgZXN0aW1hdGVFbmVyZ3koZSx0LGE9e30scz1bXSxyPXRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgpe3JldHVybiBhLmVzdGltYXRlRW5lcmd5PSEwLGF3YWl0IHRoaXMuX3RyaWdnZXJTbWFydENvbnRyYWN0KGUsdCxhLHMscil9YXN5bmMgZGVwbG95Q29uc3RhbnRDb250cmFjdChlPXtpbnB1dDoiIixvd25lckFkZHJlc3M6IiJ9KXtjb25zdHtpbnB1dDp0LG93bmVyQWRkcmVzczphLHRva2VuSWQ6cyx0b2tlblZhbHVlOnIsY2FsbFZhbHVlOm89MH09ZTt0aGlzLnZhbGlkYXRvci5ub3RWYWxpZChbe25hbWU6ImlucHV0Iix0eXBlOiJub3QtZW1wdHktc3RyaW5nIix2YWx1ZTp0fSx7bmFtZToiY2FsbFZhbHVlIix0eXBlOiJpbnRlZ2VyIix2YWx1ZTpvLGd0ZTowfSx7bmFtZToib3duZXIiLHR5cGU6ImFkZHJlc3MiLHZhbHVlOmF9LHtuYW1lOiJ0b2tlblZhbHVlIix0eXBlOiJpbnRlZ2VyIix2YWx1ZTpyLGd0ZTowLG9wdGlvbmFsOiEwfSx7bmFtZToidG9rZW5JZCIsdHlwZToiaW50ZWdlciIsdmFsdWU6cyxndGU6MCxvcHRpb25hbDohMH1dKTtjb25zdCBpPXtkYXRhOnQsb3duZXJfYWRkcmVzczphZShhKSxjYWxsX3ZhbHVlOm99O3MmJihpLnRva2VuX2lkPXMpLHImJihpLmNhbGxfdG9rZW5fdmFsdWU9cik7Y29uc3QgYz1gd2FsbGV0JHtlLmNvbmZpcm1lZD8ic29saWRpdHkiOiIifS9lc3RpbWF0ZWVuZXJneWAsZj1hd2FpdCB0aGlzLnRyb25XZWJbZS5jb25maXJtZWQ/InNvbGlkaXR5Tm9kZSI6ImZ1bGxOb2RlIl0ucmVxdWVzdChjLGksInBvc3QiKTtpZihmLkVycm9yKXRocm93IG5ldyBFcnJvcihmLkVycm9yKTtpZihmLnJlc3VsdCYmZi5yZXN1bHQubWVzc2FnZSl0aHJvdyBuZXcgRXJyb3IodGhpcy50cm9uV2ViLnRvVXRmOChmLnJlc3VsdC5tZXNzYWdlKSk7cmV0dXJuIGZ9X2dldFRyaWdnZXJTbWFydENvbnRyYWN0QXJncyhlLHQsYSxzLHIsbyxpLGMsZil7Y29uc3QgZD17Y29udHJhY3RfYWRkcmVzczphZShlKSxvd25lcl9hZGRyZXNzOmFlKHIpfTtpZih0JiZqdCh0KSl7dD10LnJlcGxhY2UoL1xzKi9nLCIiKTtsZXQgcDtpZihzLmxlbmd0aCl7Y29uc3QgYj1uZXcgWG47bGV0IFQ9W107Y29uc3QgVz1bXTtmb3IobGV0IGc9MDtnPHMubGVuZ3RoO2crKyl7bGV0e3ZhbHVlOkF9PXNbZ107Y29uc3R7dHlwZTptfT1zW2ddO2lmKCFtfHwhanQobSl8fCFtLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcGFyYW1ldGVyIHR5cGUgcHJvdmlkZWQ6ICIrbSk7Y29uc3Qgdz1CPT5hcyhCKT9CLm1hcChrPT53KGspKTphZShCKS5yZXBsYWNlKHdhLCIweCIpOyhtPT09ImFkZHJlc3MifHxtLm1hdGNoKC9eKFteXHg1Yl0qKShceDVifCQpLyk/LlswXT09PSJhZGRyZXNzWyIpJiYoQT13KEEpKSxULnB1c2gobSksVy5wdXNoKEEpfXRyeXtUPVQubWFwKGc9PigvdHJjVG9rZW4vLnRlc3QoZykmJihnPWcucmVwbGFjZSgvdHJjVG9rZW4vLCJ1aW50MjU2IikpLGcpKSxwPWIuZW5jb2RlKFQsVykucmVwbGFjZSgvXigweCkvLCIiKX1jYXRjaChnKXt0aHJvdyBuZXcgRXJyb3IoZyl9fWVsc2UgcD0iIjthLmZ1bmNBQklWMiYmKHA9T2EoYS5mdW5jQUJJVjIsYS5wYXJhbWV0ZXJzVjIpLnJlcGxhY2UoL14oMHgpLywiIikpLGEuc2hpZWxkZWRQYXJhbWV0ZXImJmp0KGEuc2hpZWxkZWRQYXJhbWV0ZXIpJiYocD1hLnNoaWVsZGVkUGFyYW1ldGVyLnJlcGxhY2UoL14oMHgpLywiIikpLGEucmF3UGFyYW1ldGVyJiZqdChhLnJhd1BhcmFtZXRlcikmJihwPWEucmF3UGFyYW1ldGVyLnJlcGxhY2UoL14oMHgpLywiIikpLGQuZnVuY3Rpb25fc2VsZWN0b3I9dCxkLnBhcmFtZXRlcj1wfWVsc2UgYS5pbnB1dCYmKGQuZGF0YT1hLmlucHV0KTtyZXR1cm4gZC5jYWxsX3ZhbHVlPXBhcnNlSW50KGMpLCR0KG8pJiYoZC5jYWxsX3Rva2VuX3ZhbHVlPXBhcnNlSW50KG8pKSwkdChpKSYmKGQudG9rZW5faWQ9cGFyc2VJbnQoaSkpLGEuX2lzQ29uc3RhbnR8fGEuZXN0aW1hdGVFbmVyZ3l8fChkLmZlZV9saW1pdD1wYXJzZUludChmKSksYS5wZXJtaXNzaW9uSWQmJihkLlBlcm1pc3Npb25faWQ9YS5wZXJtaXNzaW9uSWQpLGR9YXN5bmMgX3RyaWdnZXJTbWFydENvbnRyYWN0TG9jYWwoZSx0LGE9e30scz1bXSxyPXRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgpe2NvbnN0e3Rva2VuVmFsdWU6byx0b2tlbklkOmksY2FsbFZhbHVlOmMsZmVlTGltaXQ6Zn09T2JqZWN0LmFzc2lnbih7Y2FsbFZhbHVlOjAsZmVlTGltaXQ6dGhpcy50cm9uV2ViLmZlZUxpbWl0fSxhKTt0aGlzLnZhbGlkYXRvci5ub3RWYWxpZChbe25hbWU6ImZlZUxpbWl0Iix0eXBlOiJpbnRlZ2VyIix2YWx1ZTpmLGd0OjB9LHtuYW1lOiJjYWxsVmFsdWUiLHR5cGU6ImludGVnZXIiLHZhbHVlOmMsZ3RlOjB9LHtuYW1lOiJwYXJhbWV0ZXJzIix0eXBlOiJhcnJheSIsdmFsdWU6c30se25hbWU6ImNvbnRyYWN0Iix0eXBlOiJhZGRyZXNzIix2YWx1ZTplfSx7bmFtZToiaXNzdWVyIix0eXBlOiJhZGRyZXNzIix2YWx1ZTpyLG9wdGlvbmFsOiEwfSx7bmFtZToidG9rZW5WYWx1ZSIsdHlwZToiaW50ZWdlciIsdmFsdWU6byxndGU6MCxvcHRpb25hbDohMH0se25hbWU6InRva2VuSWQiLHR5cGU6ImludGVnZXIiLHZhbHVlOmksZ3RlOjAsb3B0aW9uYWw6ITB9XSk7Y29uc3QgZD10aGlzLl9nZXRUcmlnZ2VyU21hcnRDb250cmFjdEFyZ3MoZSx0LGEscyxyLG8saSxjLGYpO2QuZnVuY3Rpb25fc2VsZWN0b3ImJihkLmRhdGE9JGUobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGQuZnVuY3Rpb25fc2VsZWN0b3IpKS50b1N0cmluZygpLnN1YnN0cmluZygyLDEwKStkLnBhcmFtZXRlcik7Y29uc3QgcD17ZGF0YTpkLmRhdGEsb3duZXJfYWRkcmVzczpkLm93bmVyX2FkZHJlc3MsY29udHJhY3RfYWRkcmVzczpkLmNvbnRyYWN0X2FkZHJlc3N9O2QuY2FsbF92YWx1ZSYmKHAuY2FsbF92YWx1ZT1kLmNhbGxfdmFsdWUpLGQuY2FsbF90b2tlbl92YWx1ZSYmKHAuY2FsbF90b2tlbl92YWx1ZT1kLmNhbGxfdG9rZW5fdmFsdWUpLGQudG9rZW5faWQmJihwLnRva2VuX2lkPWQudG9rZW5faWQpO2NvbnN0IGI9SGUoYSksVD1hd2FpdCBHZSh0aGlzLnRyb25XZWIsTGUuVHJpZ2dlclNtYXJ0Q29udHJhY3QscCxhLnBlcm1pc3Npb25JZCx7Li4uYixmZWVfbGltaXQ6ZC5mZWVfbGltaXR9KTtyZXR1cm57cmVzdWx0OntyZXN1bHQ6ITB9LHRyYW5zYWN0aW9uOlR9fWFzeW5jIF90cmlnZ2VyU21hcnRDb250cmFjdChlLHQsYT17fSxzPVtdLHI9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCl7Y29uc3R7dG9rZW5WYWx1ZTpvLHRva2VuSWQ6aSxjYWxsVmFsdWU6YyxmZWVMaW1pdDpmfT1PYmplY3QuYXNzaWduKHtjYWxsVmFsdWU6MCxmZWVMaW1pdDp0aGlzLnRyb25XZWIuZmVlTGltaXR9LGEpO3RoaXMudmFsaWRhdG9yLm5vdFZhbGlkKFt7bmFtZToiZmVlTGltaXQiLHR5cGU6ImludGVnZXIiLHZhbHVlOmYsZ3Q6MH0se25hbWU6ImNhbGxWYWx1ZSIsdHlwZToiaW50ZWdlciIsdmFsdWU6YyxndGU6MH0se25hbWU6InBhcmFtZXRlcnMiLHR5cGU6ImFycmF5Iix2YWx1ZTpzfSx7bmFtZToiY29udHJhY3QiLHR5cGU6ImFkZHJlc3MiLHZhbHVlOmV9LHtuYW1lOiJpc3N1ZXIiLHR5cGU6ImFkZHJlc3MiLHZhbHVlOnIsb3B0aW9uYWw6ITB9LHtuYW1lOiJ0b2tlblZhbHVlIix0eXBlOiJpbnRlZ2VyIix2YWx1ZTpvLGd0ZTowLG9wdGlvbmFsOiEwfSx7bmFtZToidG9rZW5JZCIsdHlwZToiaW50ZWdlciIsdmFsdWU6aSxndGU6MCxvcHRpb25hbDohMH1dKTtjb25zdCBkPXRoaXMuX2dldFRyaWdnZXJTbWFydENvbnRyYWN0QXJncyhlLHQsYSxzLHIsbyxpLGMsZik7bGV0IHA9InRyaWdnZXJzbWFydGNvbnRyYWN0IjthLl9pc0NvbnN0YW50P3A9InRyaWdnZXJjb25zdGFudGNvbnRyYWN0IjphLmVzdGltYXRlRW5lcmd5JiYocD0iZXN0aW1hdGVlbmVyZ3kiKSxwPWB3YWxsZXQke2EuY29uZmlybWVkPyJzb2xpZGl0eSI6IiJ9LyR7cH1gO2NvbnN0IGI9YXdhaXQgdGhpcy50cm9uV2ViW2EuY29uZmlybWVkPyJzb2xpZGl0eU5vZGUiOiJmdWxsTm9kZSJdLnJlcXVlc3QocCxkLCJwb3N0Iik7cmV0dXJuIE5CKGIsZCxhKX1hc3luYyBjbGVhckFCSShlLHQ9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCxhPXt9KXtpZighbnQuaXNBZGRyZXNzKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb250cmFjdCBhZGRyZXNzIHByb3ZpZGVkIik7aWYoIW50LmlzQWRkcmVzcyh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgb3duZXIgYWRkcmVzcyBwcm92aWRlZCIpO2NvbnN0IHM9e2NvbnRyYWN0X2FkZHJlc3M6YWUoZSksb3duZXJfYWRkcmVzczphZSh0KX07dGhpcy50cm9uV2ViLnRyeC5jYWNoZS5jb250cmFjdHNbZV0mJmRlbGV0ZSB0aGlzLnRyb25XZWIudHJ4LmNhY2hlLmNvbnRyYWN0c1tlXTtjb25zdCByPUhlKGEpO3JldHVybiBHZSh0aGlzLnRyb25XZWIsTGUuQ2xlYXJBQklDb250cmFjdCxzLGE/LnBlcm1pc3Npb25JZCxyKX1hc3luYyB1cGRhdGVCcm9rZXJhZ2UoZSx0PXRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgsYT17fSl7aWYoISR0KGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBicm9rZXJhZ2UgcHJvdmlkZWQiKTtpZighVm4oZSl8fGU8MHx8ZT4xMDApdGhyb3cgbmV3IEVycm9yKCJCcm9rZXJhZ2UgbXVzdCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMTAwIik7aWYoIW50LmlzQWRkcmVzcyh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgb3duZXIgYWRkcmVzcyBwcm92aWRlZCIpO2NvbnN0IHM9e2Jyb2tlcmFnZTpwYXJzZUludChlKSxvd25lcl9hZGRyZXNzOmFlKHQpfSxyPUhlKGEpO3JldHVybiBHZSh0aGlzLnRyb25XZWIsTGUuVXBkYXRlQnJva2VyYWdlQ29udHJhY3QscyxhPy5wZXJtaXNzaW9uSWQscil9YXN5bmMgY3JlYXRlVG9rZW4oZT17fSx0PXRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgpe2NvbnN0e25hbWU6YT0hMSxhYmJyZXZpYXRpb246cz0hMSxkZXNjcmlwdGlvbjpyPSIiLHVybDpvPSExLHRvdGFsU3VwcGx5Omk9MCx0cnhSYXRpbzpjPTEsdG9rZW5SYXRpbzpmPTEsc2FsZVN0YXJ0OmQ9RGF0ZS5ub3coKSxzYWxlRW5kOnA9ITEsZnJlZUJhbmR3aWR0aDpiPTAsZnJlZUJhbmR3aWR0aExpbWl0OlQ9MCxmcm96ZW5BbW91bnQ6Vz0wLGZyb3plbkR1cmF0aW9uOmc9MCx2b3RlU2NvcmU6QSxwcmVjaXNpb246bX09ZTtpZih0aGlzLnZhbGlkYXRvci5ub3RWYWxpZChbe25hbWU6IlN1cHBseSBhbW91bnQiLHR5cGU6InBvc2l0aXZlLWludGVnZXIiLHZhbHVlOml9LHtuYW1lOiJUUlggcmF0aW8iLHR5cGU6InBvc2l0aXZlLWludGVnZXIiLHZhbHVlOmN9LHtuYW1lOiJUb2tlbiByYXRpbyIsdHlwZToicG9zaXRpdmUtaW50ZWdlciIsdmFsdWU6Zn0se25hbWU6InRva2VuIGFiYnJldmlhdGlvbiIsdHlwZToic3RyaW5nIix2YWx1ZTpzLGx0ZTozMixndDowfSx7bmFtZToidG9rZW4gbmFtZSIsdHlwZToibm90LWVtcHR5LXN0cmluZyIsdmFsdWU6YX0se25hbWU6InRva2VuIGRlc2NyaXB0aW9uIix0eXBlOiJzdHJpbmciLHZhbHVlOnIsbHRlOjIwMH0se25hbWU6InRva2VuIHVybCIsdHlwZToidXJsIix2YWx1ZTpvfSx7bmFtZToidG9rZW4gdXJsIix0eXBlOiJzdHJpbmciLHZhbHVlOm8sbHRlOjI1Nn0se25hbWU6Imlzc3VlciIsdHlwZToiYWRkcmVzcyIsdmFsdWU6dH0se25hbWU6InNhbGUgc3RhcnQgdGltZXN0YW1wIix0eXBlOiJpbnRlZ2VyIix2YWx1ZTpkLGd0ZTpEYXRlLm5vdygpfSx7bmFtZToic2FsZSBlbmQgdGltZXN0YW1wIix0eXBlOiJpbnRlZ2VyIix2YWx1ZTpwLGd0OmR9LHtuYW1lOiJGcm96ZW4gc3VwcGx5Iix0eXBlOiJpbnRlZ2VyIix2YWx1ZTpXLGd0ZTowfSx7bmFtZToiRnJvemVuIGR1cmF0aW9uIix0eXBlOiJpbnRlZ2VyIix2YWx1ZTpnLGd0ZTowfV0pLCR0KEEpJiYoIVZuKEEpfHxBPD0wKSl0aHJvdyBuZXcgRXJyb3IoInZvdGVTY29yZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBncmVhdGVyIHRoYW4gMCIpO2lmKCR0KG0pJiYoIVZuKG0pfHxtPDB8fG0+NikpdGhyb3cgbmV3IEVycm9yKCJwcmVjaXNpb24gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgPj0gMCBhbmQgPD0gNiIpO2NvbnN0IHc9e293bmVyX2FkZHJlc3M6YWUodCksbmFtZTpSdChhKSxhYmJyOlJ0KHMpLGRlc2NyaXB0aW9uOlJ0KHIpLHVybDpSdChvKSx0b3RhbF9zdXBwbHk6cGFyc2VJbnQoaSksdHJ4X251bTpwYXJzZUludChjKSxudW06cGFyc2VJbnQoZiksc3RhcnRfdGltZTpwYXJzZUludChkKSxlbmRfdGltZTpwYXJzZUludChwKSxmcm96ZW5fc3VwcGx5Olt7ZnJvemVuX2Ftb3VudDpwYXJzZUludChXKSxmcm96ZW5fZGF5czpwYXJzZUludChnKX1dfTtbIm5hbWUiLCJhYmJyIiwiZGVzY3JpcHRpb24iLCJ1cmwiXS5mb3JFYWNoKGs9Pnt3W2tdfHxkZWxldGUgd1trXX0pLHBhcnNlSW50KFcpPjB8fGRlbGV0ZSB3LmZyb3plbl9zdXBwbHksYiYmIWlzTmFOKHBhcnNlSW50KGIpKSYmcGFyc2VJbnQoYik+PTAmJih3LmZyZWVfYXNzZXRfbmV0X2xpbWl0PXBhcnNlSW50KGIpKSxUJiYhaXNOYU4ocGFyc2VJbnQoVCkpJiZwYXJzZUludChUKT49MCYmKHcucHVibGljX2ZyZWVfYXNzZXRfbmV0X2xpbWl0PXBhcnNlSW50KFQpKSxtJiYhaXNOYU4ocGFyc2VJbnQobSkpJiYody5wcmVjaXNpb249cGFyc2VJbnQobSkpLEEmJiFpc05hTihwYXJzZUludChBKSkmJih3LnZvdGVfc2NvcmU9cGFyc2VJbnQoQSkpO2NvbnN0IEI9SGUoZSk7cmV0dXJuIEdlKHRoaXMudHJvbldlYixMZS5Bc3NldElzc3VlQ29udHJhY3QsdyxlPy5wZXJtaXNzaW9uSWQsQil9YXN5bmMgY3JlYXRlQWNjb3VudChlLHQ9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCxhPXt9KXt0aGlzLnZhbGlkYXRvci5ub3RWYWxpZChbe25hbWU6ImFjY291bnQiLHR5cGU6ImFkZHJlc3MiLHZhbHVlOmV9LHtuYW1lOiJvcmlnaW4iLHR5cGU6ImFkZHJlc3MiLHZhbHVlOnR9XSk7Y29uc3Qgcz17b3duZXJfYWRkcmVzczphZSh0KSxhY2NvdW50X2FkZHJlc3M6YWUoZSl9LHI9SGUoYSk7cmV0dXJuIEdlKHRoaXMudHJvbldlYixMZS5BY2NvdW50Q3JlYXRlQ29udHJhY3QscyxhPy5wZXJtaXNzaW9uSWQscil9YXN5bmMgdXBkYXRlQWNjb3VudChlLHQ9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCxhPXt9KXt0aGlzLnZhbGlkYXRvci5ub3RWYWxpZChbe25hbWU6Ik5hbWUiLHR5cGU6InN0cmluZyIsbHRlOjIwMCxndDowLHZhbHVlOmUsbXNnOiJJbnZhbGlkIGFjY291bnROYW1lIn0se25hbWU6Im9yaWdpbiIsdHlwZToiYWRkcmVzcyIsdmFsdWU6dH1dKTtjb25zdCBzPXthY2NvdW50X25hbWU6UnQoZSksb3duZXJfYWRkcmVzczphZSh0KX0scj1IZShhKTtyZXR1cm4gR2UodGhpcy50cm9uV2ViLExlLkFjY291bnRVcGRhdGVDb250cmFjdCxzLGE/LnBlcm1pc3Npb25JZCxyKX1hc3luYyBzZXRBY2NvdW50SWQoZSx0PXRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgsYT17fSl7ZSYmanQoZSkmJmUuc3RhcnRzV2l0aCgiMHgiKSYmKGU9ZS5zbGljZSgyKSksdGhpcy52YWxpZGF0b3Iubm90VmFsaWQoW3tuYW1lOiJhY2NvdW50SWQiLHR5cGU6ImhleCIsdmFsdWU6ZX0se25hbWU6ImFjY291bnRJZCIsdHlwZToic3RyaW5nIixsdGU6MzIsZ3RlOjgsdmFsdWU6ZX0se25hbWU6Im9yaWdpbiIsdHlwZToiYWRkcmVzcyIsdmFsdWU6dH1dKTtjb25zdCBzPXthY2NvdW50X2lkOmUsb3duZXJfYWRkcmVzczphZSh0KX0scj1IZShhKTtyZXR1cm4gR2UodGhpcy50cm9uV2ViLExlLlNldEFjY291bnRJZENvbnRyYWN0LHMsYT8ucGVybWlzc2lvbklkLHIpfWFzeW5jIHVwZGF0ZVRva2VuKGU9e30sdD10aGlzLnRyb25XZWIuZGVmYXVsdEFkZHJlc3MuaGV4KXtjb25zdHtkZXNjcmlwdGlvbjphPSIiLHVybDpzPSExLGZyZWVCYW5kd2lkdGg6cj0wLGZyZWVCYW5kd2lkdGhMaW1pdDpvPTB9PWU7dGhpcy52YWxpZGF0b3Iubm90VmFsaWQoW3tuYW1lOiJ0b2tlbiBkZXNjcmlwdGlvbiIsdHlwZToic3RyaW5nIix2YWx1ZTphLGx0ZToyMDB9LHtuYW1lOiJ0b2tlbiB1cmwiLHR5cGU6InVybCIsdmFsdWU6c30se25hbWU6InRva2VuIHVybCIsdHlwZToic3RyaW5nIix2YWx1ZTpzLGx0ZToyNTZ9LHtuYW1lOiJpc3N1ZXIiLHR5cGU6ImFkZHJlc3MiLHZhbHVlOnR9XSk7Y29uc3QgaT17b3duZXJfYWRkcmVzczphZSh0KSxkZXNjcmlwdGlvbjpSdChhKSx1cmw6UnQocyl9O3ImJiFpc05hTihwYXJzZUludChyKSkmJnBhcnNlSW50KHIpPj0wJiYoaS5uZXdfbGltaXQ9cGFyc2VJbnQocikpLG8mJiFpc05hTihwYXJzZUludChvKSkmJnBhcnNlSW50KG8pPj0wJiYoaS5uZXdfcHVibGljX2xpbWl0PXBhcnNlSW50KG8pKTtjb25zdCBjPUhlKGUpO3JldHVybiBHZSh0aGlzLnRyb25XZWIsTGUuVXBkYXRlQXNzZXRDb250cmFjdCxpLGU/LnBlcm1pc3Npb25JZCxjKX1hc3luYyBzZW5kQXNzZXQoZSx0PTAsYSxzPXRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgscj17fSl7cmV0dXJuIHRoaXMuc2VuZFRva2VuKGUsdCxhLHMscil9YXN5bmMgcHVyY2hhc2VBc3NldChlLHQsYT0wLHM9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCxyPXt9KXtyZXR1cm4gdGhpcy5wdXJjaGFzZVRva2VuKGUsdCxhLHMscil9YXN5bmMgY3JlYXRlQXNzZXQoZSx0KXtyZXR1cm4gdGhpcy5jcmVhdGVUb2tlbihlLHQpfWFzeW5jIHVwZGF0ZUFzc2V0KGU9e30sdD10aGlzLnRyb25XZWIuZGVmYXVsdEFkZHJlc3MuaGV4KXtyZXR1cm4gdGhpcy51cGRhdGVUb2tlbihlLHQpfWFzeW5jIGNyZWF0ZVByb3Bvc2FsKGUsdD10aGlzLnRyb25XZWIuZGVmYXVsdEFkZHJlc3MuaGV4LGE9e30pe3RoaXMudmFsaWRhdG9yLm5vdFZhbGlkKFt7bmFtZToiaXNzdWVyIix0eXBlOiJhZGRyZXNzIix2YWx1ZTp0fV0pO2NvbnN0IHM9IkludmFsaWQgcHJvcG9zYWwgcGFyYW1ldGVycyBwcm92aWRlZCI7aWYoIWUpdGhyb3cgbmV3IEVycm9yKHMpO2NvbnN0IHI9YXMoZSk/ZTpbZV07Zm9yKGNvbnN0IGMgb2YgcilpZighc2koYykpdGhyb3cgbmV3IEVycm9yKHMpO2NvbnN0IG89e293bmVyX2FkZHJlc3M6YWUodCkscGFyYW1ldGVyczpyfSxpPUhlKGEpO3JldHVybiBHZSh0aGlzLnRyb25XZWIsTGUuUHJvcG9zYWxDcmVhdGVDb250cmFjdCxvLGE/LnBlcm1pc3Npb25JZCxpKX1hc3luYyBkZWxldGVQcm9wb3NhbChlLHQ9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCxhPXt9KXt0aGlzLnZhbGlkYXRvci5ub3RWYWxpZChbe25hbWU6Imlzc3VlciIsdHlwZToiYWRkcmVzcyIsdmFsdWU6dH0se25hbWU6InByb3Bvc2FsSUQiLHR5cGU6ImludGVnZXIiLHZhbHVlOmUsZ3RlOjB9XSk7Y29uc3Qgcz17b3duZXJfYWRkcmVzczphZSh0KSxwcm9wb3NhbF9pZDpwYXJzZUludChlKX0scj1IZShhKTtyZXR1cm4gR2UodGhpcy50cm9uV2ViLExlLlByb3Bvc2FsRGVsZXRlQ29udHJhY3QscyxhPy5wZXJtaXNzaW9uSWQscil9YXN5bmMgdm90ZVByb3Bvc2FsKGUsdD0hMSxhPXRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgscz17fSl7dGhpcy52YWxpZGF0b3Iubm90VmFsaWQoW3tuYW1lOiJ2b3RlciIsdHlwZToiYWRkcmVzcyIsdmFsdWU6YX0se25hbWU6InByb3Bvc2FsSUQiLHR5cGU6ImludGVnZXIiLHZhbHVlOmUsZ3RlOjB9LHtuYW1lOiJoYXMgYXBwcm92YWwiLHR5cGU6ImJvb2xlYW4iLHZhbHVlOnR9XSk7Y29uc3Qgcj17b3duZXJfYWRkcmVzczphZShhKSxwcm9wb3NhbF9pZDpwYXJzZUludChlKSxpc19hZGRfYXBwcm92YWw6dH0sbz1IZShzKTtyZXR1cm4gR2UodGhpcy50cm9uV2ViLExlLlByb3Bvc2FsQXBwcm92ZUNvbnRyYWN0LHIscz8ucGVybWlzc2lvbklkLG8pfWFzeW5jIGNyZWF0ZVRSWEV4Y2hhbmdlKGUsdCxhLHM9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCxyPXt9KXt0aGlzLnZhbGlkYXRvci5ub3RWYWxpZChbe25hbWU6Im93bmVyIix0eXBlOiJhZGRyZXNzIix2YWx1ZTpzfSx7bmFtZToidG9rZW4gbmFtZSIsdHlwZToibm90LWVtcHR5LXN0cmluZyIsdmFsdWU6ZX0se25hbWU6InRva2VuIGJhbGFuY2UiLHR5cGU6InBvc2l0aXZlLWludGVnZXIiLHZhbHVlOnR9LHtuYW1lOiJ0cnggYmFsYW5jZSIsdHlwZToicG9zaXRpdmUtaW50ZWdlciIsdmFsdWU6YX1dKTtjb25zdCBvPXtvd25lcl9hZGRyZXNzOmFlKHMpLGZpcnN0X3Rva2VuX2lkOlJ0KGUpLGZpcnN0X3Rva2VuX2JhbGFuY2U6dCxzZWNvbmRfdG9rZW5faWQ6IjVmIixzZWNvbmRfdG9rZW5fYmFsYW5jZTphfSxpPUhlKHIpO3JldHVybiBHZSh0aGlzLnRyb25XZWIsTGUuRXhjaGFuZ2VDcmVhdGVDb250cmFjdCxvLHI/LnBlcm1pc3Npb25JZCxpKX1hc3luYyBjcmVhdGVUb2tlbkV4Y2hhbmdlKGUsdCxhLHMscj10aGlzLnRyb25XZWIuZGVmYXVsdEFkZHJlc3MuaGV4LG89e30pe3RoaXMudmFsaWRhdG9yLm5vdFZhbGlkKFt7bmFtZToib3duZXIiLHR5cGU6ImFkZHJlc3MiLHZhbHVlOnJ9LHtuYW1lOiJmaXJzdCB0b2tlbiBuYW1lIix0eXBlOiJub3QtZW1wdHktc3RyaW5nIix2YWx1ZTplfSx7bmFtZToic2Vjb25kIHRva2VuIG5hbWUiLHR5cGU6Im5vdC1lbXB0eS1zdHJpbmciLHZhbHVlOmF9LHtuYW1lOiJmaXJzdCB0b2tlbiBiYWxhbmNlIix0eXBlOiJwb3NpdGl2ZS1pbnRlZ2VyIix2YWx1ZTp0fSx7bmFtZToic2Vjb25kIHRva2VuIGJhbGFuY2UiLHR5cGU6InBvc2l0aXZlLWludGVnZXIiLHZhbHVlOnN9XSk7Y29uc3QgaT17b3duZXJfYWRkcmVzczphZShyKSxmaXJzdF90b2tlbl9pZDpSdChlKSxmaXJzdF90b2tlbl9iYWxhbmNlOnQsc2Vjb25kX3Rva2VuX2lkOlJ0KGEpLHNlY29uZF90b2tlbl9iYWxhbmNlOnN9LGM9SGUobyk7cmV0dXJuIEdlKHRoaXMudHJvbldlYixMZS5FeGNoYW5nZUNyZWF0ZUNvbnRyYWN0LGksbz8ucGVybWlzc2lvbklkLGMpfWFzeW5jIGluamVjdEV4Y2hhbmdlVG9rZW5zKGUsdCxhLHM9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCxyPXt9KXt0aGlzLnZhbGlkYXRvci5ub3RWYWxpZChbe25hbWU6Im93bmVyIix0eXBlOiJhZGRyZXNzIix2YWx1ZTpzfSx7bmFtZToidG9rZW4gbmFtZSIsdHlwZToibm90LWVtcHR5LXN0cmluZyIsdmFsdWU6dH0se25hbWU6InRva2VuIGFtb3VudCIsdHlwZToiaW50ZWdlciIsdmFsdWU6YSxndGU6MX0se25hbWU6ImV4Y2hhbmdlSUQiLHR5cGU6ImludGVnZXIiLHZhbHVlOmUsZ3RlOjB9XSk7Y29uc3Qgbz17b3duZXJfYWRkcmVzczphZShzKSxleGNoYW5nZV9pZDpwYXJzZUludChlKSx0b2tlbl9pZDpSdCh0KSxxdWFudDpwYXJzZUludChhKX0saT1IZShyKTtyZXR1cm4gR2UodGhpcy50cm9uV2ViLExlLkV4Y2hhbmdlSW5qZWN0Q29udHJhY3QsbyxyPy5wZXJtaXNzaW9uSWQsaSl9YXN5bmMgd2l0aGRyYXdFeGNoYW5nZVRva2VucyhlLHQsYSxzPXRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgscj17fSl7dGhpcy52YWxpZGF0b3Iubm90VmFsaWQoW3tuYW1lOiJvd25lciIsdHlwZToiYWRkcmVzcyIsdmFsdWU6c30se25hbWU6InRva2VuIG5hbWUiLHR5cGU6Im5vdC1lbXB0eS1zdHJpbmciLHZhbHVlOnR9LHtuYW1lOiJ0b2tlbiBhbW91bnQiLHR5cGU6ImludGVnZXIiLHZhbHVlOmEsZ3RlOjF9LHtuYW1lOiJleGNoYW5nZUlEIix0eXBlOiJpbnRlZ2VyIix2YWx1ZTplLGd0ZTowfV0pO2NvbnN0IG89e293bmVyX2FkZHJlc3M6YWUocyksZXhjaGFuZ2VfaWQ6cGFyc2VJbnQoZSksdG9rZW5faWQ6UnQodCkscXVhbnQ6cGFyc2VJbnQoYSl9LGk9SGUocik7cmV0dXJuIEdlKHRoaXMudHJvbldlYixMZS5FeGNoYW5nZVdpdGhkcmF3Q29udHJhY3QsbyxyPy5wZXJtaXNzaW9uSWQsaSl9YXN5bmMgdHJhZGVFeGNoYW5nZVRva2VucyhlLHQsYSxzLHI9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCxvPXt9KXt0aGlzLnZhbGlkYXRvci5ub3RWYWxpZChbe25hbWU6Im93bmVyIix0eXBlOiJhZGRyZXNzIix2YWx1ZTpyfSx7bmFtZToidG9rZW4gbmFtZSIsdHlwZToibm90LWVtcHR5LXN0cmluZyIsdmFsdWU6dH0se25hbWU6InRva2VuQW1vdW50U29sZCIsdHlwZToiaW50ZWdlciIsdmFsdWU6YSxndGU6MX0se25hbWU6InRva2VuQW1vdW50RXhwZWN0ZWQiLHR5cGU6ImludGVnZXIiLHZhbHVlOnMsZ3RlOjF9LHtuYW1lOiJleGNoYW5nZUlEIix0eXBlOiJpbnRlZ2VyIix2YWx1ZTplLGd0ZTowfV0pO2NvbnN0IGk9e293bmVyX2FkZHJlc3M6YWUociksZXhjaGFuZ2VfaWQ6cGFyc2VJbnQoZSksdG9rZW5faWQ6bnQuZnJvbUFzY2lpKHQpLnJlcGxhY2UoL14weC8sIiIpLHF1YW50OnBhcnNlSW50KGEpLGV4cGVjdGVkOnBhcnNlSW50KHMpfSxjPUhlKG8pO3JldHVybiBHZSh0aGlzLnRyb25XZWIsTGUuRXhjaGFuZ2VUcmFuc2FjdGlvbkNvbnRyYWN0LGksbz8ucGVybWlzc2lvbklkLGMpfWFzeW5jIHVwZGF0ZVNldHRpbmcoZSx0LGE9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCxzPXt9KXt0aGlzLnZhbGlkYXRvci5ub3RWYWxpZChbe25hbWU6Im93bmVyIix0eXBlOiJhZGRyZXNzIix2YWx1ZTphfSx7bmFtZToiY29udHJhY3QiLHR5cGU6ImFkZHJlc3MiLHZhbHVlOmV9LHtuYW1lOiJ1c2VyRmVlUGVyY2VudGFnZSIsdHlwZToiaW50ZWdlciIsdmFsdWU6dCxndGU6MCxsdGU6MTAwfV0pO2NvbnN0IHI9e293bmVyX2FkZHJlc3M6YWUoYSksY29udHJhY3RfYWRkcmVzczphZShlKSxjb25zdW1lX3VzZXJfcmVzb3VyY2VfcGVyY2VudDp0fSxvPUhlKHMpO3JldHVybiBHZSh0aGlzLnRyb25XZWIsTGUuVXBkYXRlU2V0dGluZ0NvbnRyYWN0LHIscz8ucGVybWlzc2lvbklkLG8pfWFzeW5jIHVwZGF0ZUVuZXJneUxpbWl0KGUsdD0wLGE9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCxzPXt9KXt0aGlzLnZhbGlkYXRvci5ub3RWYWxpZChbe25hbWU6Im93bmVyIix0eXBlOiJhZGRyZXNzIix2YWx1ZTphfSx7bmFtZToiY29udHJhY3QiLHR5cGU6ImFkZHJlc3MiLHZhbHVlOmV9LHtuYW1lOiJvcmlnaW5FbmVyZ3lMaW1pdCIsdHlwZToiaW50ZWdlciIsdmFsdWU6dCxndGU6MCxsdGU6MWU3fV0pO2NvbnN0IHI9e293bmVyX2FkZHJlc3M6YWUoYSksY29udHJhY3RfYWRkcmVzczphZShlKSxvcmlnaW5fZW5lcmd5X2xpbWl0OnR9LG89SGUocyk7cmV0dXJuIEdlKHRoaXMudHJvbldlYixMZS5VcGRhdGVFbmVyZ3lMaW1pdENvbnRyYWN0LHIscz8ucGVybWlzc2lvbklkLG8pfWNoZWNrUGVybWlzc2lvbnMoZSx0KXtpZihlKXtpZihlLnR5cGUhPT10fHwhZS5wZXJtaXNzaW9uX25hbWV8fCFqdChlLnBlcm1pc3Npb25fbmFtZSl8fCFWbihlLnRocmVzaG9sZCl8fGUudGhyZXNob2xkPDF8fCFlLmtleXMpcmV0dXJuITE7Zm9yKGNvbnN0IGEgb2YgZS5rZXlzKWlmKCFudC5pc0FkZHJlc3MoYS5hZGRyZXNzKXx8IVZuKGEud2VpZ2h0KXx8YS53ZWlnaHQ8MXx8dD09PTImJiFlLm9wZXJhdGlvbnMpcmV0dXJuITF9cmV0dXJuITB9YXN5bmMgdXBkYXRlQWNjb3VudFBlcm1pc3Npb25zKGU9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCx0LGEscyxyPXt9KXtpZighbnQuaXNBZGRyZXNzKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBvd25lckFkZHJlc3MgcHJvdmlkZWQiKTtpZighdGhpcy5jaGVja1Blcm1pc3Npb25zKHQsMCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG93bmVyUGVybWlzc2lvbnMgcHJvdmlkZWQiKTtpZighdGhpcy5jaGVja1Blcm1pc3Npb25zKGEsMSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHdpdG5lc3NQZXJtaXNzaW9ucyBwcm92aWRlZCIpO0FycmF5LmlzQXJyYXkocyl8fChzPVtzXSk7Zm9yKGNvbnN0IGMgb2YgcylpZighdGhpcy5jaGVja1Blcm1pc3Npb25zKGMsMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGFjdGl2ZXNQZXJtaXNzaW9ucyBwcm92aWRlZCIpO2NvbnN0IG89e293bmVyX2FkZHJlc3M6YWUoZSl9O2lmKHQpe2NvbnN0IGM9THUodCk7InR5cGUiaW4gYyYmZGVsZXRlIGMudHlwZSxjLmtleXM9Yy5rZXlzPy5tYXAoKHthZGRyZXNzOmYsd2VpZ2h0OmR9KT0+KHthZGRyZXNzOmFlKGYpLHdlaWdodDpkfSkpLG8ub3duZXI9Y31pZihhKXtjb25zdCBjPUx1KGEpO2MudHlwZT0iV2l0bmVzcyIsYy5rZXlzPWMua2V5cy5tYXAoKHthZGRyZXNzOmYsd2VpZ2h0OmR9KT0+KHthZGRyZXNzOmFlKGYpLHdlaWdodDpkfSkpLG8ud2l0bmVzcz1jfWlmKHMpe2NvbnN0IGM9THUocyk7Yy5mb3JFYWNoKGY9PntmLnR5cGU9IkFjdGl2ZSJ9KSxjLmZvckVhY2goZj0+e2Yua2V5cz1mLmtleXMubWFwKCh7YWRkcmVzczpkLHdlaWdodDpwfSk9Pih7YWRkcmVzczphZShkKSx3ZWlnaHQ6cH0pKX0pLG8uYWN0aXZlcz1jfWNvbnN0IGk9SGUocik7cmV0dXJuIEdlKHRoaXMudHJvbldlYixMZS5BY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0LG8scj8ucGVybWlzc2lvbklkLGkpfWFzeW5jIG5ld1R4SUQoZSx0PXt9KXtpZih0Py50eExvY2FsKXtjb25zdCBhPWUucmF3X2RhdGEuY29udHJhY3RbMF07dHJ5e2NvbnN0IHM9YXdhaXQgR2UodGhpcy50cm9uV2ViLGEudHlwZSxhLnBhcmFtZXRlci52YWx1ZSxhLlBlcm1pc3Npb25faWQse2ZlZV9saW1pdDplLnJhd19kYXRhLmZlZV9saW1pdCxkYXRhOmUucmF3X2RhdGEuZGF0YSxyZWZfYmxvY2tfYnl0ZXM6ZS5yYXdfZGF0YS5yZWZfYmxvY2tfYnl0ZXMscmVmX2Jsb2NrX2hhc2g6ZS5yYXdfZGF0YS5yZWZfYmxvY2tfaGFzaCxleHBpcmF0aW9uOmUucmF3X2RhdGEuZXhwaXJhdGlvbix0aW1lc3RhbXA6ZS5yYXdfZGF0YS50aW1lc3RhbXB9KTtyZXR1cm4gcy5zaWduYXR1cmU9ZS5zaWduYXR1cmUscy52aXNpYmxlPWUudmlzaWJsZSxzfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiRXJyb3IgZ2VuZXJhdGluZyBhIG5ldyB0cmFuc2FjdGlvbiBpZC4iKX19dHJ5e2NvbnN0IGE9YXdhaXQgdGhpcy50cm9uV2ViLmZ1bGxOb2RlLnJlcXVlc3QoIndhbGxldC9nZXRzaWdud2VpZ2h0IixlLCJwb3N0Iik7cmV0dXJuIHR5cGVvZiBlLnZpc2libGU9PSJib29sZWFuIiYmKGEudHJhbnNhY3Rpb24udHJhbnNhY3Rpb24udmlzaWJsZT1lLnZpc2libGUpLEZCKGEudHJhbnNhY3Rpb24udHJhbnNhY3Rpb24sey4uLmUucmF3X2RhdGEuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlLFBlcm1pc3Npb25faWQ6ZS5yYXdfZGF0YS5jb250cmFjdFswXS5QZXJtaXNzaW9uX2lkfSx7ZGF0YTplLnJhd19kYXRhLmRhdGEsZmVlX2xpbWl0OmUucmF3X2RhdGEuZmVlX2xpbWl0fSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJFcnJvciBnZW5lcmF0aW5nIGEgbmV3IHRyYW5zYWN0aW9uIGlkLiIpfX1hc3luYyBhbHRlclRyYW5zYWN0aW9uKGUsdD17fSl7aWYoUmVmbGVjdC5oYXMoZSwic2lnbmF0dXJlIikpdGhyb3cgbmV3IEVycm9yKCJZb3UgY2FuIG5vdCBleHRlbmQgdGhlIGV4cGlyYXRpb24gb2YgYSBzaWduZWQgdHJhbnNhY3Rpb24uIik7aWYodC5kYXRhKXtpZih0LmRhdGFGb3JtYXQhPT0iaGV4IiYmIS9eMHgvLnRlc3QodC5kYXRhKSYmKHQuZGF0YT1udC5mcm9tVXRmOCh0LmRhdGEpKSwhb28odC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGF0YSBwcm92aWRlZCIpO2lmKHQuZGF0YT10LmRhdGEucmVwbGFjZSgvXjB4LywiIiksdC5kYXRhPXQuZGF0YS5wYWRTdGFydChNYXRoLmNlaWwodC5kYXRhLmxlbmd0aC8yKSoyLCIwIiksdC5kYXRhLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRhdGEgcHJvdmlkZWQiKTtlLnJhd19kYXRhLmRhdGE9dC5kYXRhfWlmKHQuZXh0ZW5zaW9uKXtpZih0LmV4dGVuc2lvbj1wYXJzZUludCh0LmV4dGVuc2lvbioxZTMpLGlzTmFOKHQuZXh0ZW5zaW9uKXx8ZS5yYXdfZGF0YS5leHBpcmF0aW9uK3QuZXh0ZW5zaW9uPD1EYXRlLm5vdygpKzNlMyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZXh0ZW5zaW9uIHByb3ZpZGVkIik7ZS5yYXdfZGF0YS5leHBpcmF0aW9uKz10LmV4dGVuc2lvbn1yZXR1cm4gYXdhaXQgdGhpcy5uZXdUeElEKGUse3R4TG9jYWw6dC50eExvY2FsfSl9YXN5bmMgZXh0ZW5kRXhwaXJhdGlvbihlLHQsYT17fSl7cmV0dXJuIGF3YWl0IHRoaXMuYWx0ZXJUcmFuc2FjdGlvbihlLHtleHRlbnNpb246dCx0eExvY2FsOmE/LnR4TG9jYWx9KX1hc3luYyBhZGRVcGRhdGVEYXRhKGUsdCxhPSJ1dGY4IixzPXt9KXtyZXR1cm4gdGhpcy5hbHRlclRyYW5zYWN0aW9uKGUse2RhdGE6dCxkYXRhRm9ybWF0OmEsdHhMb2NhbDpzPy50eExvY2FsfSl9fWNvbnN0IExoPWAZVFJPTiBTaWduZWQgTWVzc2FnZToKMzJgLHpoPWAZRXRoZXJldW0gU2lnbmVkIE1lc3NhZ2U6CjMyYDtjbGFzcyBvbntjb25zdHJ1Y3RvcihlKXtaKHRoaXMsInRyb25XZWIiKTtaKHRoaXMsImNhY2hlIik7Wih0aGlzLCJ2YWxpZGF0b3IiKTtaKHRoaXMsInNpZ25NZXNzYWdlIik7Wih0aGlzLCJzZW5kQXNzZXQiKTtaKHRoaXMsInNlbmQiKTtaKHRoaXMsInNlbmRUcngiKTtaKHRoaXMsImJyb2FkY2FzdCIpO1oodGhpcywiYnJvYWRjYXN0SGV4Iik7Wih0aGlzLCJzaWduVHJhbnNhY3Rpb24iKTt0aGlzLnRyb25XZWI9ZSx0aGlzLmNhY2hlPXtjb250cmFjdHM6e319LHRoaXMudmFsaWRhdG9yPW5ldyB2eCx0aGlzLnNpZ25NZXNzYWdlPXRoaXMuc2lnbix0aGlzLnNlbmRBc3NldD10aGlzLnNlbmRUb2tlbix0aGlzLnNlbmQ9dGhpcy5zZW5kVHJhbnNhY3Rpb24sdGhpcy5zZW5kVHJ4PXRoaXMuc2VuZFRyYW5zYWN0aW9uLHRoaXMuYnJvYWRjYXN0PXRoaXMuc2VuZFJhd1RyYW5zYWN0aW9uLHRoaXMuYnJvYWRjYXN0SGV4PXRoaXMuc2VuZEhleFRyYW5zYWN0aW9uLHRoaXMuc2lnblRyYW5zYWN0aW9uPXRoaXMuc2lnbn1fcGFyc2VUb2tlbihlKXtyZXR1cm57Li4uZSxuYW1lOnRoaXMudHJvbldlYi50b1V0ZjgoZS5uYW1lKSxhYmJyOmUuYWJiciYmdGhpcy50cm9uV2ViLnRvVXRmOChlLmFiYnIpLGRlc2NyaXB0aW9uOmUuZGVzY3JpcHRpb24mJnRoaXMudHJvbldlYi50b1V0ZjgoZS5kZXNjcmlwdGlvbiksdXJsOmUudXJsJiZ0aGlzLnRyb25XZWIudG9VdGY4KGUudXJsKX19Z2V0Q3VycmVudEJsb2NrKCl7cmV0dXJuIHRoaXMudHJvbldlYi5mdWxsTm9kZS5yZXF1ZXN0KCJ3YWxsZXQvZ2V0bm93YmxvY2siKX1nZXRDb25maXJtZWRDdXJyZW50QmxvY2soKXtyZXR1cm4gdGhpcy50cm9uV2ViLnNvbGlkaXR5Tm9kZS5yZXF1ZXN0KCJ3YWxsZXRzb2xpZGl0eS9nZXRub3dibG9jayIpfWFzeW5jIGdldEJsb2NrKGU9dGhpcy50cm9uV2ViLmRlZmF1bHRCbG9jayl7aWYoZT09PSExKXRocm93IG5ldyBFcnJvcigiTm8gYmxvY2sgaWRlbnRpZmllciBwcm92aWRlZCIpO3JldHVybiBlPT0iZWFybGllc3QiJiYoZT0wKSxlPT0ibGF0ZXN0Ij90aGlzLmdldEN1cnJlbnRCbG9jaygpOmlzTmFOKCtlKSYmYmUuaXNIZXgoZS50b1N0cmluZygpKT90aGlzLmdldEJsb2NrQnlIYXNoKGUpOnRoaXMuZ2V0QmxvY2tCeU51bWJlcihlKX1hc3luYyBnZXRCbG9ja0J5SGFzaChlKXtjb25zdCB0PWF3YWl0IHRoaXMudHJvbldlYi5mdWxsTm9kZS5yZXF1ZXN0KCJ3YWxsZXQvZ2V0YmxvY2tieWlkIix7dmFsdWU6ZX0sInBvc3QiKTtpZighT2JqZWN0LmtleXModCkubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQmxvY2sgbm90IGZvdW5kIik7cmV0dXJuIHR9YXN5bmMgZ2V0QmxvY2tCeU51bWJlcihlKXtpZighYmUuaXNJbnRlZ2VyKGUpfHxlPDApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGJsb2NrIG51bWJlciBwcm92aWRlZCIpO3JldHVybiB0aGlzLnRyb25XZWIuZnVsbE5vZGUucmVxdWVzdCgid2FsbGV0L2dldGJsb2NrYnludW0iLHtudW06cGFyc2VJbnQoZSl9LCJwb3N0IikudGhlbih0PT57aWYoIU9iamVjdC5rZXlzKHQpLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkJsb2NrIG5vdCBmb3VuZCIpO3JldHVybiB0fSl9YXN5bmMgZ2V0QmxvY2tUcmFuc2FjdGlvbkNvdW50KGU9dGhpcy50cm9uV2ViLmRlZmF1bHRCbG9jayl7Y29uc3R7dHJhbnNhY3Rpb25zOnQ9W119PWF3YWl0IHRoaXMuZ2V0QmxvY2soZSk7cmV0dXJuIHQubGVuZ3RofWFzeW5jIGdldFRyYW5zYWN0aW9uRnJvbUJsb2NrKGU9dGhpcy50cm9uV2ViLmRlZmF1bHRCbG9jayx0KXtjb25zdHt0cmFuc2FjdGlvbnM6YX09YXdhaXQgdGhpcy5nZXRCbG9jayhlKTtpZighYSl0aHJvdyBuZXcgRXJyb3IoIlRyYW5zYWN0aW9uIG5vdCBmb3VuZCBpbiBibG9jayIpO2lmKHQ+PTAmJnQ8YS5sZW5ndGgpcmV0dXJuIGFbdF07dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRyYW5zYWN0aW9uIGluZGV4IHByb3ZpZGVkIil9YXN5bmMgZ2V0VHJhbnNhY3Rpb25zRnJvbUJsb2NrKGU9dGhpcy50cm9uV2ViLmRlZmF1bHRCbG9jayl7Y29uc3R7dHJhbnNhY3Rpb25zOnR9PWF3YWl0IHRoaXMuZ2V0QmxvY2soZSk7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJUcmFuc2FjdGlvbiBub3QgZm91bmQgaW4gYmxvY2siKTtyZXR1cm4gdH1hc3luYyBnZXRUcmFuc2FjdGlvbihlKXtjb25zdCB0PWF3YWl0IHRoaXMudHJvbldlYi5mdWxsTm9kZS5yZXF1ZXN0KCJ3YWxsZXQvZ2V0dHJhbnNhY3Rpb25ieWlkIix7dmFsdWU6ZX0sInBvc3QiKTtpZighT2JqZWN0LmtleXModCkubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVHJhbnNhY3Rpb24gbm90IGZvdW5kIik7cmV0dXJuIHR9YXN5bmMgZ2V0Q29uZmlybWVkVHJhbnNhY3Rpb24oZSl7Y29uc3QgdD1hd2FpdCB0aGlzLnRyb25XZWIuc29saWRpdHlOb2RlLnJlcXVlc3QoIndhbGxldHNvbGlkaXR5L2dldHRyYW5zYWN0aW9uYnlpZCIse3ZhbHVlOmV9LCJwb3N0Iik7aWYoIU9iamVjdC5rZXlzKHQpLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlRyYW5zYWN0aW9uIG5vdCBmb3VuZCIpO3JldHVybiB0fWdldFVuY29uZmlybWVkVHJhbnNhY3Rpb25JbmZvKGUpe3JldHVybiB0aGlzLnRyb25XZWIuZnVsbE5vZGUucmVxdWVzdCgid2FsbGV0L2dldHRyYW5zYWN0aW9uaW5mb2J5aWQiLHt2YWx1ZTplfSwicG9zdCIpfWdldFRyYW5zYWN0aW9uSW5mbyhlKXtyZXR1cm4gdGhpcy50cm9uV2ViLnNvbGlkaXR5Tm9kZS5yZXF1ZXN0KCJ3YWxsZXRzb2xpZGl0eS9nZXR0cmFuc2FjdGlvbmluZm9ieWlkIix7dmFsdWU6ZX0sInBvc3QiKX1nZXRUcmFuc2FjdGlvbnNUb0FkZHJlc3MoZT10aGlzLnRyb25XZWIuZGVmYXVsdEFkZHJlc3MuaGV4LHQ9MzAsYT0wKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2FjdGlvbnNSZWxhdGVkKGFlKGUpLCJ0byIsdCxhKX1nZXRUcmFuc2FjdGlvbnNGcm9tQWRkcmVzcyhlPXRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgsdD0zMCxhPTApe3JldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uc1JlbGF0ZWQoYWUoZSksImZyb20iLHQsYSl9YXN5bmMgZ2V0VHJhbnNhY3Rpb25zUmVsYXRlZChlPXRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgsdD0iYWxsIixhPTMwLHM9MCl7aWYodGhpcy50cm9uV2ViLmZ1bGxub2RlU2F0aXNmaWVzKCI+PTQuMS4xIikpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGFwaSBpcyBub3Qgc3VwcG9ydGVkIGFueSBtb3JlIik7aWYoIVsidG8iLCJmcm9tIiwiYWxsIl0uaW5jbHVkZXModCkpdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRpcmVjdGlvbiBwcm92aWRlZDogRXhwZWN0ZWQgInRvIiwgImZyb20iIG9yICJhbGwiJyk7aWYodD09ImFsbCIpe2NvbnN0W3Isb109YXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMuZ2V0VHJhbnNhY3Rpb25zUmVsYXRlZChlLCJmcm9tIixhLHMpLHRoaXMuZ2V0VHJhbnNhY3Rpb25zUmVsYXRlZChlLCJ0byIsYSxzKV0pO3JldHVyblsuLi5yLm1hcChpPT4oaS5kaXJlY3Rpb249ImZyb20iLGkpKSwuLi5vLm1hcChpPT4oaS5kaXJlY3Rpb249InRvIixpKSldLnNvcnQoKGksYyk9PmMucmF3X2RhdGEudGltZXN0YW1wLWkucmF3X2RhdGEudGltZXN0YW1wKX1pZighdGhpcy50cm9uV2ViLmlzQWRkcmVzcyhlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYWRkcmVzcyBwcm92aWRlZCIpO2lmKCFiZS5pc0ludGVnZXIoYSl8fGE8MHx8cyYmYTwxKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaW1pdCBwcm92aWRlZCIpO2lmKCFiZS5pc0ludGVnZXIocyl8fHM8MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgb2Zmc2V0IHByb3ZpZGVkIik7cmV0dXJuIGU9YWUoZSksdGhpcy50cm9uV2ViLnNvbGlkaXR5Tm9kZS5yZXF1ZXN0KGB3YWxsZXRleHRlbnNpb24vZ2V0dHJhbnNhY3Rpb25zJHt0fXRoaXNgLHthY2NvdW50OnthZGRyZXNzOmV9LG9mZnNldDpzLGxpbWl0OmF9LCJwb3N0IikudGhlbigoe3RyYW5zYWN0aW9uOnJ9KT0+cil9YXN5bmMgZ2V0QWNjb3VudChlPXRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgpe2lmKCF0aGlzLnRyb25XZWIuaXNBZGRyZXNzKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhZGRyZXNzIHByb3ZpZGVkIik7cmV0dXJuIGU9YWUoZSksdGhpcy50cm9uV2ViLnNvbGlkaXR5Tm9kZS5yZXF1ZXN0KCJ3YWxsZXRzb2xpZGl0eS9nZXRhY2NvdW50Iix7YWRkcmVzczplfSwicG9zdCIpfWdldEFjY291bnRCeUlkKGUpe3JldHVybiB0aGlzLmdldEFjY291bnRJbmZvQnlJZChlLHtjb25maXJtZWQ6ITB9KX1hc3luYyBnZXRBY2NvdW50SW5mb0J5SWQoZSx0KXtyZXR1cm4gdGhpcy52YWxpZGF0b3Iubm90VmFsaWQoW3tuYW1lOiJhY2NvdW50SWQiLHR5cGU6ImhleCIsdmFsdWU6ZX0se25hbWU6ImFjY291bnRJZCIsdHlwZToic3RyaW5nIixsdGU6MzIsZ3RlOjgsdmFsdWU6ZX1dKSxlLnN0YXJ0c1dpdGgoIjB4IikmJihlPWUuc2xpY2UoMikpLHRoaXMudHJvbldlYlt0LmNvbmZpcm1lZD8ic29saWRpdHlOb2RlIjoiZnVsbE5vZGUiXS5yZXF1ZXN0KGB3YWxsZXQke3QuY29uZmlybWVkPyJzb2xpZGl0eSI6IiJ9L2dldGFjY291bnRieWlkYCx7YWNjb3VudF9pZDplfSwicG9zdCIpfWFzeW5jIGdldEJhbGFuY2UoZT10aGlzLnRyb25XZWIuZGVmYXVsdEFkZHJlc3MuaGV4KXtjb25zdHtiYWxhbmNlOnQ9MH09YXdhaXQgdGhpcy5nZXRBY2NvdW50KGUpO3JldHVybiB0fWFzeW5jIGdldFVuY29uZmlybWVkQWNjb3VudChlPXRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgpe2lmKCF0aGlzLnRyb25XZWIuaXNBZGRyZXNzKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhZGRyZXNzIHByb3ZpZGVkIik7cmV0dXJuIGU9YWUoZSksdGhpcy50cm9uV2ViLmZ1bGxOb2RlLnJlcXVlc3QoIndhbGxldC9nZXRhY2NvdW50Iix7YWRkcmVzczplfSwicG9zdCIpfWdldFVuY29uZmlybWVkQWNjb3VudEJ5SWQoZSl7cmV0dXJuIHRoaXMuZ2V0QWNjb3VudEluZm9CeUlkKGUse2NvbmZpcm1lZDohMX0pfWFzeW5jIGdldFVuY29uZmlybWVkQmFsYW5jZShlPXRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgpe2NvbnN0e2JhbGFuY2U6dD0wfT1hd2FpdCB0aGlzLmdldFVuY29uZmlybWVkQWNjb3VudChlKTtyZXR1cm4gdH1hc3luYyBnZXRCYW5kd2lkdGgoZT10aGlzLnRyb25XZWIuZGVmYXVsdEFkZHJlc3MuaGV4KXtpZighdGhpcy50cm9uV2ViLmlzQWRkcmVzcyhlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYWRkcmVzcyBwcm92aWRlZCIpO3JldHVybiBlPWFlKGUpLHRoaXMudHJvbldlYi5mdWxsTm9kZS5yZXF1ZXN0KCJ3YWxsZXQvZ2V0YWNjb3VudG5ldCIse2FkZHJlc3M6ZX0sInBvc3QiKS50aGVuKCh7ZnJlZU5ldFVzZWQ6dD0wLGZyZWVOZXRMaW1pdDphPTAsTmV0VXNlZDpzPTAsTmV0TGltaXQ6cj0wfSk9PmEtdCsoci1zKSl9YXN5bmMgZ2V0VG9rZW5zSXNzdWVkQnlBZGRyZXNzKGU9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCl7aWYoIXRoaXMudHJvbldlYi5pc0FkZHJlc3MoZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGFkZHJlc3MgcHJvdmlkZWQiKTtyZXR1cm4gZT1hZShlKSx0aGlzLnRyb25XZWIuZnVsbE5vZGUucmVxdWVzdCgid2FsbGV0L2dldGFzc2V0aXNzdWVieWFjY291bnQiLHthZGRyZXNzOmV9LCJwb3N0IikudGhlbigoe2Fzc2V0SXNzdWU6dH0pPT50P3QubWFwKHM9PnRoaXMuX3BhcnNlVG9rZW4ocykpLnJlZHVjZSgocyxyKT0+KHNbci5uYW1lXT1yLHMpLHt9KTp7fSl9YXN5bmMgZ2V0VG9rZW5Gcm9tSUQoZSl7aWYoYmUuaXNJbnRlZ2VyKGUpJiYoZT1lLnRvU3RyaW5nKCkpLCFiZS5pc1N0cmluZyhlKXx8IWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0b2tlbiBJRCBwcm92aWRlZCIpO3JldHVybiB0aGlzLnRyb25XZWIuZnVsbE5vZGUucmVxdWVzdCgid2FsbGV0L2dldGFzc2V0aXNzdWVieW5hbWUiLHt2YWx1ZTp0aGlzLnRyb25XZWIuZnJvbVV0ZjgoZSl9LCJwb3N0IikudGhlbih0PT57aWYoIXQubmFtZSl0aHJvdyBuZXcgRXJyb3IoIlRva2VuIGRvZXMgbm90IGV4aXN0Iik7cmV0dXJuIHRoaXMuX3BhcnNlVG9rZW4odCl9KX1hc3luYyBsaXN0Tm9kZXMoKXtjb25zdHtub2RlczplPVtdfT1hd2FpdCB0aGlzLnRyb25XZWIuZnVsbE5vZGUucmVxdWVzdCgid2FsbGV0L2xpc3Rub2RlcyIpO3JldHVybiBlLm1hcCgoe2FkZHJlc3M6e2hvc3Q6dCxwb3J0OmF9fSk9PmAke3RoaXMudHJvbldlYi50b1V0ZjgodCl9OiR7YX1gKX1hc3luYyBnZXRCbG9ja1JhbmdlKGU9MCx0PTMwKXtpZighYmUuaXNJbnRlZ2VyKGUpfHxlPDApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0YXJ0IG9mIHJhbmdlIHByb3ZpZGVkIik7aWYoIWJlLmlzSW50ZWdlcih0KXx8dDxlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBlbmQgb2YgcmFuZ2UgcHJvdmlkZWQiKTtpZih0KzEtZT4xMDApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHJhbmdlIHNpemUsIHdoaWNoIHNob3VsZCBiZSBubyBtb3JlIHRoYW4gMTAwLiIpO3JldHVybiB0aGlzLnRyb25XZWIuZnVsbE5vZGUucmVxdWVzdCgid2FsbGV0L2dldGJsb2NrYnlsaW1pdG5leHQiLHtzdGFydE51bTpwYXJzZUludChlKSxlbmROdW06cGFyc2VJbnQodCkrMX0sInBvc3QiKS50aGVuKCh7YmxvY2s6YT1bXX0pPT5hKX1hc3luYyBsaXN0U3VwZXJSZXByZXNlbnRhdGl2ZXMoKXtjb25zdHt3aXRuZXNzZXM6ZT1bXX09YXdhaXQgdGhpcy50cm9uV2ViLmZ1bGxOb2RlLnJlcXVlc3QoIndhbGxldC9saXN0d2l0bmVzc2VzIik7cmV0dXJuIGV9YXN5bmMgbGlzdFRva2VucyhlPTAsdD0wKXtpZighYmUuaXNJbnRlZ2VyKGUpfHxlPDB8fHQmJmU8MSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGltaXQgcHJvdmlkZWQiKTtpZighYmUuaXNJbnRlZ2VyKHQpfHx0PDApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG9mZnNldCBwcm92aWRlZCIpO3JldHVybiBlP3RoaXMudHJvbldlYi5mdWxsTm9kZS5yZXF1ZXN0KCJ3YWxsZXQvZ2V0cGFnaW5hdGVkYXNzZXRpc3N1ZWxpc3QiLHtvZmZzZXQ6cGFyc2VJbnQodCksbGltaXQ6cGFyc2VJbnQoZSl9LCJwb3N0IikudGhlbigoe2Fzc2V0SXNzdWU6YT1bXX0pPT5hLm1hcChzPT50aGlzLl9wYXJzZVRva2VuKHMpKSk6dGhpcy50cm9uV2ViLmZ1bGxOb2RlLnJlcXVlc3QoIndhbGxldC9nZXRhc3NldGlzc3VlbGlzdCIpLnRoZW4oKHthc3NldElzc3VlOmE9W119KT0+YS5tYXAocz0+dGhpcy5fcGFyc2VUb2tlbihzKSkpfWFzeW5jIHRpbWVVbnRpbE5leHRWb3RlQ3ljbGUoKXtjb25zdHtudW06ZT0tMX09YXdhaXQgdGhpcy50cm9uV2ViLmZ1bGxOb2RlLnJlcXVlc3QoIndhbGxldC9nZXRuZXh0bWFpbnRlbmFuY2V0aW1lIik7aWYoZT09LTEpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gZ2V0IHRpbWUgdW50aWwgbmV4dCB2b3RlIGN5Y2xlIik7cmV0dXJuIE1hdGguZmxvb3IoZS8xZTMpfWFzeW5jIGdldENvbnRyYWN0KGUpe2lmKCF0aGlzLnRyb25XZWIuaXNBZGRyZXNzKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb250cmFjdCBhZGRyZXNzIHByb3ZpZGVkIik7aWYodGhpcy5jYWNoZS5jb250cmFjdHNbZV0pcmV0dXJuIHRoaXMuY2FjaGUuY29udHJhY3RzW2VdO2U9YWUoZSk7Y29uc3QgdD1hd2FpdCB0aGlzLnRyb25XZWIuZnVsbE5vZGUucmVxdWVzdCgid2FsbGV0L2dldGNvbnRyYWN0Iix7dmFsdWU6ZX0pO2lmKHQuRXJyb3IpdGhyb3cgbmV3IEVycm9yKCJDb250cmFjdCBkb2VzIG5vdCBleGlzdCIpO3JldHVybiB0aGlzLmNhY2hlLmNvbnRyYWN0c1tlXT10LHR9YXN5bmMgZ2V0Q29udHJhY3RJbmZvKGUpe2lmKCF0aGlzLnRyb25XZWIuaXNBZGRyZXNzKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb250cmFjdCBhZGRyZXNzIHByb3ZpZGVkIik7ZT1hZShlKTtjb25zdCB0PWF3YWl0IHRoaXMudHJvbldlYi5mdWxsTm9kZS5yZXF1ZXN0KCJ3YWxsZXQvZ2V0Y29udHJhY3RpbmZvIix7dmFsdWU6ZX0pO2lmKHQuRXJyb3IpdGhyb3cgbmV3IEVycm9yKCJDb250cmFjdCBkb2VzIG5vdCBleGlzdCIpO3JldHVybiB0fWVjUmVjb3ZlcihlKXtyZXR1cm4gb24uZWNSZWNvdmVyKGUpfXN0YXRpYyBlY1JlY292ZXIoZSl7aWYoIXNjKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0cmFuc2FjdGlvbiIpO2lmKCFlLnNpZ25hdHVyZT8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVHJhbnNhY3Rpb24gaXMgbm90IHNpZ25lZCIpO2lmKGUuc2lnbmF0dXJlLmxlbmd0aD09PTEpe2NvbnN0IHQ9eWwoZS50eElELGUuc2lnbmF0dXJlWzBdKTtyZXR1cm4gbnQuYWRkcmVzcy5mcm9tSGV4KHQpfXJldHVybiBlLnNpZ25hdHVyZS5tYXAodD0+e2NvbnN0IGE9eWwoZS50eElELHQpO3JldHVybiBudC5hZGRyZXNzLmZyb21IZXgoYSl9KX1hc3luYyB2ZXJpZnlNZXNzYWdlKGUsdCxhPXRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5iYXNlNTgscz0hMCl7aWYoIWJlLmlzSGV4KGUpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgaGV4IG1lc3NhZ2UgaW5wdXQiKTtpZihvbi52ZXJpZnlTaWduYXR1cmUoZSxhLHQscykpcmV0dXJuITA7dGhyb3cgbmV3IEVycm9yKCJTaWduYXR1cmUgZG9lcyBub3QgbWF0Y2giKX1zdGF0aWMgdmVyaWZ5U2lnbmF0dXJlKGUsdCxhLHM9ITApe2U9ZS5yZXBsYWNlKC9eMHgvLCIiKTtjb25zdCByPVsuLi5ycihzP0xoOnpoKSwuLi5iZS5jb2RlLmhleFN0cjJieXRlQXJyYXkoZSldLG89JGUobmV3IFVpbnQ4QXJyYXkocikpLGk9Um8obyxLdC5mcm9tKGAweCR7YS5yZXBsYWNlKC9eMHgvLCIiKX1gKSksYz1GcitpLnN1YnN0cigyKTtyZXR1cm4gbnQuYWRkcmVzcy5mcm9tSGV4KGMpPT1udC5hZGRyZXNzLmZyb21IZXgodCl9YXN5bmMgdmVyaWZ5TWVzc2FnZVYyKGUsdCl7cmV0dXJuIG9uLnZlcmlmeU1lc3NhZ2VWMihlLHQpfXN0YXRpYyB2ZXJpZnlNZXNzYWdlVjIoZSx0KXtyZXR1cm4gYmUubWVzc2FnZS52ZXJpZnlNZXNzYWdlKGUsdCl9dmVyaWZ5VHlwZWREYXRhKGUsdCxhLHMscj10aGlzLnRyb25XZWIuZGVmYXVsdEFkZHJlc3MuYmFzZTU4KXtpZihvbi52ZXJpZnlUeXBlZERhdGEoZSx0LGEscyxyKSlyZXR1cm4hMDt0aHJvdyBuZXcgRXJyb3IoIlNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaCIpfXN0YXRpYyB2ZXJpZnlUeXBlZERhdGEoZSx0LGEscyxyKXtjb25zdCBvPWJlLnR5cGVkRGF0YS5UeXBlZERhdGFFbmNvZGVyLmhhc2goZSx0LGEpLGk9Um8obyxLdC5mcm9tKGAweCR7cy5yZXBsYWNlKC9eMHgvLCIiKX1gKSksYz1GcitpLnN1YnN0cigyKTtyZXR1cm4gbnQuYWRkcmVzcy5mcm9tSGV4KGMpPT1udC5hZGRyZXNzLmZyb21IZXgocil9YXN5bmMgc2lnbihlLHQ9dGhpcy50cm9uV2ViLmRlZmF1bHRQcml2YXRlS2V5LGE9ITAscz0hMSl7aWYoYmUuaXNTdHJpbmcoZSkpe2lmKCFiZS5pc0hleChlKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIGhleCBtZXNzYWdlIGlucHV0Iik7cmV0dXJuIG9uLnNpZ25TdHJpbmcoZSx0LGEpfWlmKCFiZS5pc09iamVjdChlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdHJhbnNhY3Rpb24gcHJvdmlkZWQiKTtpZighcyYmZS5zaWduYXR1cmUpdGhyb3cgbmV3IEVycm9yKCJUcmFuc2FjdGlvbiBpcyBhbHJlYWR5IHNpZ25lZCIpO2lmKCFzJiZhZSh0aGlzLnRyb25XZWIuYWRkcmVzcy5mcm9tUHJpdmF0ZUtleSh0KSkudG9Mb3dlckNhc2UoKSE9PWFlKGUucmF3X2RhdGEuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlLm93bmVyX2FkZHJlc3MpKXRocm93IG5ldyBFcnJvcigiUHJpdmF0ZSBrZXkgZG9lcyBub3QgbWF0Y2ggYWRkcmVzcyBpbiB0cmFuc2FjdGlvbiIpO2lmKCFzYyhlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdHJhbnNhY3Rpb24iKTtyZXR1cm4gYmUuY3J5cHRvLnNpZ25UcmFuc2FjdGlvbih0LGUpfXN0YXRpYyBzaWduU3RyaW5nKGUsdCxhPSEwKXtlPWUucmVwbGFjZSgvXjB4LywiIik7Y29uc3Qgcz1gMHgke3QucmVwbGFjZSgvXjB4LywiIil9YCxyPW5ldyBicihzKSxvPVsuLi5ycihhP0xoOnpoKSwuLi5iZS5jb2RlLmhleFN0cjJieXRlQXJyYXkoZSldLGk9JGUobmV3IFVpbnQ4QXJyYXkobykpLGM9ci5zaWduKGkpO3JldHVyblsiMHgiLGMuci5zdWJzdHJpbmcoMiksYy5zLnN1YnN0cmluZygyKSxOdW1iZXIoYy52KS50b1N0cmluZygxNildLmpvaW4oIiIpfXNpZ25NZXNzYWdlVjIoZSx0PXRoaXMudHJvbldlYi5kZWZhdWx0UHJpdmF0ZUtleSl7cmV0dXJuIG9uLnNpZ25NZXNzYWdlVjIoZSx0KX1zdGF0aWMgc2lnbk1lc3NhZ2VWMihlLHQpe3JldHVybiBiZS5tZXNzYWdlLnNpZ25NZXNzYWdlKGUsdCl9X3NpZ25UeXBlZERhdGEoZSx0LGEscz10aGlzLnRyb25XZWIuZGVmYXVsdFByaXZhdGVLZXkpe3JldHVybiBvbi5fc2lnblR5cGVkRGF0YShlLHQsYSxzKX1zdGF0aWMgX3NpZ25UeXBlZERhdGEoZSx0LGEscyl7cmV0dXJuIGJlLnR5cGVkRGF0YS5zaWduVHlwZWREYXRhKGUsdCxhLHMpfXNpZ25UeXBlZERhdGEoZSx0LGEscz10aGlzLnRyb25XZWIuZGVmYXVsdFByaXZhdGVLZXkpe3JldHVybiBvbi5zaWduVHlwZWREYXRhKGUsdCxhLHMpfXN0YXRpYyBzaWduVHlwZWREYXRhKGUsdCxhLHMpe3JldHVybiBiZS50eXBlZERhdGEuc2lnblR5cGVkRGF0YShlLHQsYSxzKX1hc3luYyBtdWx0aVNpZ24oZSx0PXRoaXMudHJvbldlYi5kZWZhdWx0UHJpdmF0ZUtleSxhPTApe2lmKCFiZS5pc09iamVjdChlKXx8IWUucmF3X2RhdGF8fCFlLnJhd19kYXRhLmNvbnRyYWN0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0cmFuc2FjdGlvbiBwcm92aWRlZCIpO2lmKCFlLnJhd19kYXRhLmNvbnRyYWN0WzBdLlBlcm1pc3Npb25faWQmJmE+MCl7ZS5yYXdfZGF0YS5jb250cmFjdFswXS5QZXJtaXNzaW9uX2lkPWE7Y29uc3Qgcz1hZSh0aGlzLnRyb25XZWIuYWRkcmVzcy5mcm9tUHJpdmF0ZUtleSh0KSkudG9Mb3dlckNhc2UoKSxyPWF3YWl0IHRoaXMuZ2V0U2lnbldlaWdodChlLGEpO2lmKHIucmVzdWx0LmNvZGU9PT0iUEVSTUlTU0lPTl9FUlJPUiIpdGhyb3cgbmV3IEVycm9yKHIucmVzdWx0Lm1lc3NhZ2UpO2xldCBvPSExO2lmKHIucGVybWlzc2lvbi5rZXlzLm1hcChpPT57aS5hZGRyZXNzPT09cyYmKG89ITApfSksIW8pdGhyb3cgbmV3IEVycm9yKCJBZGRyZXNzICIrX2EocykrIiBoYXMgbm8gcGVybWlzc2lvbiB0byBzaWduIik7aWYoci5hcHByb3ZlZF9saXN0JiZyLmFwcHJvdmVkX2xpc3QuaW5kZXhPZihzKSE9LTEpdGhyb3cgbmV3IEVycm9yKCJBZGRyZXNzICIrX2EocykrIiBhbHJlYWR5IHNpZ24gdHJhbnNhY3Rpb24iKTtpZihyLnRyYW5zYWN0aW9uJiZyLnRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uKWU9ci50cmFuc2FjdGlvbi50cmFuc2FjdGlvbixhPjAmJihlLnJhd19kYXRhLmNvbnRyYWN0WzBdLlBlcm1pc3Npb25faWQ9YSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdHJhbnNhY3Rpb24gcHJvdmlkZWQiKX1pZighc2MoZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRyYW5zYWN0aW9uIik7cmV0dXJuIGJlLmNyeXB0by5zaWduVHJhbnNhY3Rpb24odCxlKX1hc3luYyBnZXRBcHByb3ZlZExpc3QoZSl7aWYoIWJlLmlzT2JqZWN0KGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0cmFuc2FjdGlvbiBwcm92aWRlZCIpO3JldHVybiB0aGlzLnRyb25XZWIuZnVsbE5vZGUucmVxdWVzdCgid2FsbGV0L2dldGFwcHJvdmVkbGlzdCIsZSwicG9zdCIpfWFzeW5jIGdldFNpZ25XZWlnaHQoZSx0KXtpZighYmUuaXNPYmplY3QoZSl8fCFlLnJhd19kYXRhfHwhZS5yYXdfZGF0YS5jb250cmFjdCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdHJhbnNhY3Rpb24gcHJvdmlkZWQiKTtyZXR1cm4gYmUuaXNJbnRlZ2VyKHQpP2UucmF3X2RhdGEuY29udHJhY3RbMF0uUGVybWlzc2lvbl9pZD1wYXJzZUludCh0KTp0eXBlb2YgZS5yYXdfZGF0YS5jb250cmFjdFswXS5QZXJtaXNzaW9uX2lkIT0ibnVtYmVyIiYmKGUucmF3X2RhdGEuY29udHJhY3RbMF0uUGVybWlzc2lvbl9pZD0wKSx0aGlzLnRyb25XZWIuZnVsbE5vZGUucmVxdWVzdCgid2FsbGV0L2dldHNpZ253ZWlnaHQiLGUsInBvc3QiKX1hc3luYyBzZW5kUmF3VHJhbnNhY3Rpb24oZSl7aWYoIWJlLmlzT2JqZWN0KGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0cmFuc2FjdGlvbiBwcm92aWRlZCIpO2lmKCFlLnNpZ25hdHVyZXx8IWJlLmlzQXJyYXkoZS5zaWduYXR1cmUpKXRocm93IG5ldyBFcnJvcigiVHJhbnNhY3Rpb24gaXMgbm90IHNpZ25lZCIpO3JldHVybnsuLi5hd2FpdCB0aGlzLnRyb25XZWIuZnVsbE5vZGUucmVxdWVzdCgid2FsbGV0L2Jyb2FkY2FzdHRyYW5zYWN0aW9uIixlLCJwb3N0IiksdHJhbnNhY3Rpb246ZX19YXN5bmMgc2VuZEhleFRyYW5zYWN0aW9uKGUpe2lmKCFiZS5pc0hleChlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHRyYW5zYWN0aW9uIHByb3ZpZGVkIik7Y29uc3QgdD17dHJhbnNhY3Rpb246ZX0sYT1hd2FpdCB0aGlzLnRyb25XZWIuZnVsbE5vZGUucmVxdWVzdCgid2FsbGV0L2Jyb2FkY2FzdGhleCIsdCwicG9zdCIpO3JldHVybiBhLnJlc3VsdD97Li4uYSx0cmFuc2FjdGlvbjpKU09OLnBhcnNlKGEudHJhbnNhY3Rpb24pLGhleFRyYW5zYWN0aW9uOmV9OmF9YXN5bmMgc2VuZFRyYW5zYWN0aW9uKGUsdCxhPXt9KXtpZih0eXBlb2YgYT09InN0cmluZyImJihhPXtwcml2YXRlS2V5OmF9KSwhdGhpcy50cm9uV2ViLmlzQWRkcmVzcyhlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcmVjaXBpZW50IHByb3ZpZGVkIik7aWYoIWJlLmlzSW50ZWdlcih0KXx8dDw9MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYW1vdW50IHByb3ZpZGVkIik7aWYoYT17cHJpdmF0ZUtleTp0aGlzLnRyb25XZWIuZGVmYXVsdFByaXZhdGVLZXksYWRkcmVzczp0aGlzLnRyb25XZWIuZGVmYXVsdEFkZHJlc3MuaGV4LC4uLmF9LCFhLnByaXZhdGVLZXkmJiFhLmFkZHJlc3MpdGhyb3cgbmV3IEVycm9yKCJGdW5jdGlvbiByZXF1aXJlcyBlaXRoZXIgYSBwcml2YXRlIGtleSBvciBhZGRyZXNzIHRvIGJlIHNldCIpO2NvbnN0IHM9YS5wcml2YXRlS2V5P3RoaXMudHJvbldlYi5hZGRyZXNzLmZyb21Qcml2YXRlS2V5KGEucHJpdmF0ZUtleSk6YS5hZGRyZXNzLHI9YXdhaXQgdGhpcy50cm9uV2ViLnRyYW5zYWN0aW9uQnVpbGRlci5zZW5kVHJ4KGUsdCxzKSxvPWF3YWl0IHRoaXMuc2lnbihyLGEucHJpdmF0ZUtleSk7cmV0dXJuIGF3YWl0IHRoaXMuc2VuZFJhd1RyYW5zYWN0aW9uKG8pfWFzeW5jIHNlbmRUb2tlbihlLHQsYSxzPXt9KXtpZih0eXBlb2Ygcz09InN0cmluZyImJihzPXtwcml2YXRlS2V5OnN9KSwhdGhpcy50cm9uV2ViLmlzQWRkcmVzcyhlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcmVjaXBpZW50IHByb3ZpZGVkIik7aWYoIWJlLmlzSW50ZWdlcih0KXx8dDw9MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYW1vdW50IHByb3ZpZGVkIik7aWYoYmUuaXNJbnRlZ2VyKGEpJiYoYT1hLnRvU3RyaW5nKCkpLCFiZS5pc1N0cmluZyhhKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdG9rZW4gSUQgcHJvdmlkZWQiKTtpZihzPXtwcml2YXRlS2V5OnRoaXMudHJvbldlYi5kZWZhdWx0UHJpdmF0ZUtleSxhZGRyZXNzOnRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgsLi4uc30sIXMucHJpdmF0ZUtleSYmIXMuYWRkcmVzcyl0aHJvdyBuZXcgRXJyb3IoIkZ1bmN0aW9uIHJlcXVpcmVzIGVpdGhlciBhIHByaXZhdGUga2V5IG9yIGFkZHJlc3MgdG8gYmUgc2V0Iik7Y29uc3Qgcj1zLnByaXZhdGVLZXk/dGhpcy50cm9uV2ViLmFkZHJlc3MuZnJvbVByaXZhdGVLZXkocy5wcml2YXRlS2V5KTpzLmFkZHJlc3Msbz1hd2FpdCB0aGlzLnRyb25XZWIudHJhbnNhY3Rpb25CdWlsZGVyLnNlbmRUb2tlbihlLHQsYSxyKSxpPWF3YWl0IHRoaXMuc2lnbihvLHMucHJpdmF0ZUtleSk7cmV0dXJuIGF3YWl0IHRoaXMuc2VuZFJhd1RyYW5zYWN0aW9uKGkpfWFzeW5jIGZyZWV6ZUJhbGFuY2UoZT0wLHQ9MyxhPSJCQU5EV0lEVEgiLHM9e30scil7aWYodHlwZW9mIHM9PSJzdHJpbmciJiYocz17cHJpdmF0ZUtleTpzfSksIVsiQkFORFdJRFRIIiwiRU5FUkdZIl0uaW5jbHVkZXMoYSkpdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJlc291cmNlIHByb3ZpZGVkOiBFeHBlY3RlZCAiQkFORFdJRFRIIiBvciAiRU5FUkdZIicpO2lmKCFiZS5pc0ludGVnZXIoZSl8fGU8PTApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGFtb3VudCBwcm92aWRlZCIpO2lmKCFiZS5pc0ludGVnZXIodCl8fHQ8Myl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZHVyYXRpb24gcHJvdmlkZWQsIG1pbmltdW0gb2YgMyBkYXlzIik7aWYocz17cHJpdmF0ZUtleTp0aGlzLnRyb25XZWIuZGVmYXVsdFByaXZhdGVLZXksYWRkcmVzczp0aGlzLnRyb25XZWIuZGVmYXVsdEFkZHJlc3MuaGV4LC4uLnN9LCFzLnByaXZhdGVLZXkmJiFzLmFkZHJlc3MpdGhyb3cgbmV3IEVycm9yKCJGdW5jdGlvbiByZXF1aXJlcyBlaXRoZXIgYSBwcml2YXRlIGtleSBvciBhZGRyZXNzIHRvIGJlIHNldCIpO2NvbnN0IG89cy5wcml2YXRlS2V5P3RoaXMudHJvbldlYi5hZGRyZXNzLmZyb21Qcml2YXRlS2V5KHMucHJpdmF0ZUtleSk6cy5hZGRyZXNzLGk9YXdhaXQgdGhpcy50cm9uV2ViLnRyYW5zYWN0aW9uQnVpbGRlci5mcmVlemVCYWxhbmNlKGUsdCxhLG8sciksYz1hd2FpdCB0aGlzLnNpZ24oaSxzLnByaXZhdGVLZXkpO3JldHVybiBhd2FpdCB0aGlzLnNlbmRSYXdUcmFuc2FjdGlvbihjKX1hc3luYyB1bmZyZWV6ZUJhbGFuY2UoZT0iQkFORFdJRFRIIix0PXt9LGEpe2lmKHR5cGVvZiB0PT0ic3RyaW5nIiYmKHQ9e3ByaXZhdGVLZXk6dH0pLCFbIkJBTkRXSURUSCIsIkVORVJHWSJdLmluY2x1ZGVzKGUpKXRocm93IG5ldyBFcnJvcignSW52YWxpZCByZXNvdXJjZSBwcm92aWRlZDogRXhwZWN0ZWQgIkJBTkRXSURUSCIgb3IgIkVORVJHWSInKTtpZih0PXtwcml2YXRlS2V5OnRoaXMudHJvbldlYi5kZWZhdWx0UHJpdmF0ZUtleSxhZGRyZXNzOnRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgsLi4udH0sIXQucHJpdmF0ZUtleSYmIXQuYWRkcmVzcyl0aHJvdyBuZXcgRXJyb3IoIkZ1bmN0aW9uIHJlcXVpcmVzIGVpdGhlciBhIHByaXZhdGUga2V5IG9yIGFkZHJlc3MgdG8gYmUgc2V0Iik7Y29uc3Qgcz10LnByaXZhdGVLZXk/dGhpcy50cm9uV2ViLmFkZHJlc3MuZnJvbVByaXZhdGVLZXkodC5wcml2YXRlS2V5KTp0LmFkZHJlc3Mscj1hd2FpdCB0aGlzLnRyb25XZWIudHJhbnNhY3Rpb25CdWlsZGVyLnVuZnJlZXplQmFsYW5jZShlLHMsYSksbz1hd2FpdCB0aGlzLnNpZ24ocix0LnByaXZhdGVLZXkpO3JldHVybiBhd2FpdCB0aGlzLnNlbmRSYXdUcmFuc2FjdGlvbihvKX1hc3luYyB1cGRhdGVBY2NvdW50KGUsdD17fSl7aWYodHlwZW9mIHQ9PSJzdHJpbmciJiYodD17cHJpdmF0ZUtleTp0fSksIWJlLmlzU3RyaW5nKGUpfHwhZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJOYW1lIG11c3QgYmUgYSBzdHJpbmciKTtpZih0PXtwcml2YXRlS2V5OnRoaXMudHJvbldlYi5kZWZhdWx0UHJpdmF0ZUtleSxhZGRyZXNzOnRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgsLi4udH0sIXQucHJpdmF0ZUtleSYmIXQuYWRkcmVzcyl0aHJvdyBFcnJvcigiRnVuY3Rpb24gcmVxdWlyZXMgZWl0aGVyIGEgcHJpdmF0ZSBrZXkgb3IgYWRkcmVzcyB0byBiZSBzZXQiKTtjb25zdCBhPXQucHJpdmF0ZUtleT90aGlzLnRyb25XZWIuYWRkcmVzcy5mcm9tUHJpdmF0ZUtleSh0LnByaXZhdGVLZXkpOnQuYWRkcmVzcyxzPWF3YWl0IHRoaXMudHJvbldlYi50cmFuc2FjdGlvbkJ1aWxkZXIudXBkYXRlQWNjb3VudChlLGEpLHI9YXdhaXQgdGhpcy5zaWduKHMsdC5wcml2YXRlS2V5KTtyZXR1cm4gYXdhaXQgdGhpcy5zZW5kUmF3VHJhbnNhY3Rpb24ocil9YXN5bmMgZ2V0UHJvcG9zYWwoZSl7aWYoIWJlLmlzSW50ZWdlcihlKXx8ZTwwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBwcm9wb3NhbElEIHByb3ZpZGVkIik7cmV0dXJuIHRoaXMudHJvbldlYi5mdWxsTm9kZS5yZXF1ZXN0KCJ3YWxsZXQvZ2V0cHJvcG9zYWxieWlkIix7aWQ6cGFyc2VJbnQoZSl9LCJwb3N0Iil9YXN5bmMgbGlzdFByb3Bvc2Fscygpe2NvbnN0e3Byb3Bvc2FsczplPVtdfT1hd2FpdCB0aGlzLnRyb25XZWIuZnVsbE5vZGUucmVxdWVzdCgid2FsbGV0L2xpc3Rwcm9wb3NhbHMiLHt9LCJwb3N0Iik7cmV0dXJuIGV9YXN5bmMgZ2V0Q2hhaW5QYXJhbWV0ZXJzKCl7Y29uc3R7Y2hhaW5QYXJhbWV0ZXI6ZT1bXX09YXdhaXQgdGhpcy50cm9uV2ViLmZ1bGxOb2RlLnJlcXVlc3QoIndhbGxldC9nZXRjaGFpbnBhcmFtZXRlcnMiLHt9LCJwb3N0Iik7cmV0dXJuIGV9YXN5bmMgZ2V0QWNjb3VudFJlc291cmNlcyhlPXRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgpe2lmKCF0aGlzLnRyb25XZWIuaXNBZGRyZXNzKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhZGRyZXNzIHByb3ZpZGVkIik7cmV0dXJuIHRoaXMudHJvbldlYi5mdWxsTm9kZS5yZXF1ZXN0KCJ3YWxsZXQvZ2V0YWNjb3VudHJlc291cmNlIix7YWRkcmVzczphZShlKX0sInBvc3QiKX1hc3luYyBnZXREZWxlZ2F0ZWRSZXNvdXJjZVYyKGU9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCx0PXRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgsYT17Y29uZmlybWVkOiEwfSl7aWYoIXRoaXMudHJvbldlYi5pc0FkZHJlc3MoZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGFkZHJlc3MgcHJvdmlkZWQiKTtpZighdGhpcy50cm9uV2ViLmlzQWRkcmVzcyh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYWRkcmVzcyBwcm92aWRlZCIpO3JldHVybiB0aGlzLnRyb25XZWJbYS5jb25maXJtZWQ/InNvbGlkaXR5Tm9kZSI6ImZ1bGxOb2RlIl0ucmVxdWVzdChgd2FsbGV0JHthLmNvbmZpcm1lZD8ic29saWRpdHkiOiIifS9nZXRkZWxlZ2F0ZWRyZXNvdXJjZXYyYCx7ZnJvbUFkZHJlc3M6YWUoZSksdG9BZGRyZXNzOmFlKHQpfSwicG9zdCIpfWFzeW5jIGdldERlbGVnYXRlZFJlc291cmNlQWNjb3VudEluZGV4VjIoZT10aGlzLnRyb25XZWIuZGVmYXVsdEFkZHJlc3MuaGV4LHQ9e2NvbmZpcm1lZDohMH0pe2lmKCF0aGlzLnRyb25XZWIuaXNBZGRyZXNzKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhZGRyZXNzIHByb3ZpZGVkIik7cmV0dXJuIHRoaXMudHJvbldlYlt0LmNvbmZpcm1lZD8ic29saWRpdHlOb2RlIjoiZnVsbE5vZGUiXS5yZXF1ZXN0KGB3YWxsZXQke3QuY29uZmlybWVkPyJzb2xpZGl0eSI6IiJ9L2dldGRlbGVnYXRlZHJlc291cmNlYWNjb3VudGluZGV4djJgLHt2YWx1ZTphZShlKX0sInBvc3QiKX1hc3luYyBnZXRDYW5EZWxlZ2F0ZWRNYXhTaXplKGU9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCx0PSJCQU5EV0lEVEgiLGE9e2NvbmZpcm1lZDohMH0pe2lmKCF0aGlzLnRyb25XZWIuaXNBZGRyZXNzKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhZGRyZXNzIHByb3ZpZGVkIik7cmV0dXJuIHRoaXMudmFsaWRhdG9yLm5vdFZhbGlkKFt7bmFtZToicmVzb3VyY2UiLHR5cGU6InJlc291cmNlIix2YWx1ZTp0LG1zZzonSW52YWxpZCByZXNvdXJjZSBwcm92aWRlZDogRXhwZWN0ZWQgIkJBTkRXSURUSCIgb3IgIkVORVJHWSInfV0pLHRoaXMudHJvbldlYlthLmNvbmZpcm1lZD8ic29saWRpdHlOb2RlIjoiZnVsbE5vZGUiXS5yZXF1ZXN0KGB3YWxsZXQke2EuY29uZmlybWVkPyJzb2xpZGl0eSI6IiJ9L2dldGNhbmRlbGVnYXRlZG1heHNpemVgLHtvd25lcl9hZGRyZXNzOmFlKGUpLHR5cGU6dD09PSJFTkVSR1kiPzE6MH0sInBvc3QiKX1hc3luYyBnZXRBdmFpbGFibGVVbmZyZWV6ZUNvdW50KGU9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCx0PXtjb25maXJtZWQ6ITB9KXtpZighdGhpcy50cm9uV2ViLmlzQWRkcmVzcyhlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYWRkcmVzcyBwcm92aWRlZCIpO3JldHVybiB0aGlzLnRyb25XZWJbdC5jb25maXJtZWQ/InNvbGlkaXR5Tm9kZSI6ImZ1bGxOb2RlIl0ucmVxdWVzdChgd2FsbGV0JHt0LmNvbmZpcm1lZD8ic29saWRpdHkiOiIifS9nZXRhdmFpbGFibGV1bmZyZWV6ZWNvdW50YCx7b3duZXJfYWRkcmVzczphZShlKX0sInBvc3QiKX1hc3luYyBnZXRDYW5XaXRoZHJhd1VuZnJlZXplQW1vdW50KGU9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCx0PURhdGUubm93KCksYT17Y29uZmlybWVkOiEwfSl7aWYoIXRoaXMudHJvbldlYi5pc0FkZHJlc3MoZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGFkZHJlc3MgcHJvdmlkZWQiKTtpZighYmUuaXNJbnRlZ2VyKHQpfHx0PDApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRpbWVzdGFtcCBwcm92aWRlZCIpO3JldHVybiB0aGlzLnRyb25XZWJbYS5jb25maXJtZWQ/InNvbGlkaXR5Tm9kZSI6ImZ1bGxOb2RlIl0ucmVxdWVzdChgd2FsbGV0JHthLmNvbmZpcm1lZD8ic29saWRpdHkiOiIifS9nZXRjYW53aXRoZHJhd3VuZnJlZXplYW1vdW50YCx7b3duZXJfYWRkcmVzczphZShlKSx0aW1lc3RhbXA6dH0sInBvc3QiKX1hc3luYyBnZXRFeGNoYW5nZUJ5SUQoZSl7aWYoIWJlLmlzSW50ZWdlcihlKXx8ZTwwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBleGNoYW5nZUlEIHByb3ZpZGVkIik7cmV0dXJuIHRoaXMudHJvbldlYi5mdWxsTm9kZS5yZXF1ZXN0KCJ3YWxsZXQvZ2V0ZXhjaGFuZ2VieWlkIix7aWQ6ZX0sInBvc3QiKX1hc3luYyBsaXN0RXhjaGFuZ2VzKCl7cmV0dXJuIHRoaXMudHJvbldlYi5mdWxsTm9kZS5yZXF1ZXN0KCJ3YWxsZXQvbGlzdGV4Y2hhbmdlcyIse30sInBvc3QiKS50aGVuKCh7ZXhjaGFuZ2VzOmU9W119KT0+ZSl9YXN5bmMgbGlzdEV4Y2hhbmdlc1BhZ2luYXRlZChlPTEwLHQ9MCl7cmV0dXJuIHRoaXMudHJvbldlYi5mdWxsTm9kZS5yZXF1ZXN0KCJ3YWxsZXQvZ2V0cGFnaW5hdGVkZXhjaGFuZ2VsaXN0Iix7bGltaXQ6ZSxvZmZzZXQ6dH0sInBvc3QiKS50aGVuKCh7ZXhjaGFuZ2VzOmE9W119KT0+YSl9YXN5bmMgZ2V0Tm9kZUluZm8oKXtyZXR1cm4gdGhpcy50cm9uV2ViLmZ1bGxOb2RlLnJlcXVlc3QoIndhbGxldC9nZXRub2RlaW5mbyIse30sInBvc3QiKX1hc3luYyBnZXRUb2tlbkxpc3RCeU5hbWUoZSl7aWYoYmUuaXNJbnRlZ2VyKGUpJiYoZT1lLnRvU3RyaW5nKCkpLCFiZS5pc1N0cmluZyhlKXx8IWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0b2tlbiBJRCBwcm92aWRlZCIpO3JldHVybiB0aGlzLnRyb25XZWIuZnVsbE5vZGUucmVxdWVzdCgid2FsbGV0L2dldGFzc2V0aXNzdWVsaXN0YnluYW1lIix7dmFsdWU6dGhpcy50cm9uV2ViLmZyb21VdGY4KGUpfSwicG9zdCIpLnRoZW4odD0+e2lmKEFycmF5LmlzQXJyYXkodC5hc3NldElzc3VlKSlyZXR1cm4gdC5hc3NldElzc3VlLm1hcChhPT50aGlzLl9wYXJzZVRva2VuKGEpKTtpZighdC5uYW1lKXRocm93IG5ldyBFcnJvcigiVG9rZW4gZG9lcyBub3QgZXhpc3QiKTtyZXR1cm4gdGhpcy5fcGFyc2VUb2tlbih0KX0pfWdldFRva2VuQnlJRChlKXtpZihiZS5pc0ludGVnZXIoZSkmJihlPWUudG9TdHJpbmcoKSksIWJlLmlzU3RyaW5nKGUpfHwhZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRva2VuIElEIHByb3ZpZGVkIik7cmV0dXJuIHRoaXMudHJvbldlYi5mdWxsTm9kZS5yZXF1ZXN0KCJ3YWxsZXQvZ2V0YXNzZXRpc3N1ZWJ5aWQiLHt2YWx1ZTplfSwicG9zdCIpLnRoZW4odD0+e2lmKCF0Lm5hbWUpdGhyb3cgbmV3IEVycm9yKCJUb2tlbiBkb2VzIG5vdCBleGlzdCIpO3JldHVybiB0aGlzLl9wYXJzZVRva2VuKHQpfSl9YXN5bmMgZ2V0UmV3YXJkKGUsdD17fSl7cmV0dXJuIHQuY29uZmlybWVkPSEwLHRoaXMuX2dldFJld2FyZChlLHQpfWFzeW5jIGdldFVuY29uZmlybWVkUmV3YXJkKGUsdD17fSl7cmV0dXJuIHQuY29uZmlybWVkPSExLHRoaXMuX2dldFJld2FyZChlLHQpfWFzeW5jIGdldEJyb2tlcmFnZShlLHQ9e30pe3JldHVybiB0LmNvbmZpcm1lZD0hMCx0aGlzLl9nZXRCcm9rZXJhZ2UoZSx0KX1hc3luYyBnZXRVbmNvbmZpcm1lZEJyb2tlcmFnZShlLHQ9e30pe3JldHVybiB0LmNvbmZpcm1lZD0hMSx0aGlzLl9nZXRCcm9rZXJhZ2UoZSx0KX1hc3luYyBfZ2V0UmV3YXJkKGU9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCx0KXt0aGlzLnZhbGlkYXRvci5ub3RWYWxpZChbe25hbWU6Im9yaWdpbiIsdHlwZToiYWRkcmVzcyIsdmFsdWU6ZX1dKTtjb25zdCBhPXthZGRyZXNzOmFlKGUpfTtyZXR1cm4gdGhpcy50cm9uV2ViW3QuY29uZmlybWVkPyJzb2xpZGl0eU5vZGUiOiJmdWxsTm9kZSJdLnJlcXVlc3QoYHdhbGxldCR7dC5jb25maXJtZWQ/InNvbGlkaXR5IjoiIn0vZ2V0UmV3YXJkYCxhLCJwb3N0IikudGhlbigocz17cmV3YXJkOnZvaWQgMH0pPT57aWYodHlwZW9mIHMucmV3YXJkPiJ1Iil0aHJvdyBuZXcgRXJyb3IoIk5vdCBmb3VuZC4iKTtyZXR1cm4gcy5yZXdhcmR9KX1hc3luYyBfZ2V0QnJva2VyYWdlKGU9dGhpcy50cm9uV2ViLmRlZmF1bHRBZGRyZXNzLmhleCx0KXt0aGlzLnZhbGlkYXRvci5ub3RWYWxpZChbe25hbWU6Im9yaWdpbiIsdHlwZToiYWRkcmVzcyIsdmFsdWU6ZX1dKTtjb25zdCBhPXthZGRyZXNzOmFlKGUpfTtyZXR1cm4gdGhpcy50cm9uV2ViW3QuY29uZmlybWVkPyJzb2xpZGl0eU5vZGUiOiJmdWxsTm9kZSJdLnJlcXVlc3QoYHdhbGxldCR7dC5jb25maXJtZWQ/InNvbGlkaXR5IjoiIn0vZ2V0QnJva2VyYWdlYCxhLCJwb3N0IikudGhlbigocz17fSk9PntpZih0eXBlb2Ygcy5icm9rZXJhZ2U+InUiKXRocm93IG5ldyBFcnJvcigiTm90IGZvdW5kLiIpO3JldHVybiBzLmJyb2tlcmFnZX0pfWFzeW5jIGdldEJhbmR3aWR0aFByaWNlcygpe3JldHVybiB0aGlzLnRyb25XZWIuZnVsbE5vZGUucmVxdWVzdCgid2FsbGV0L2dldGJhbmR3aWR0aHByaWNlcyIse30sInBvc3QiKS50aGVuKChlPXt9KT0+e2lmKHR5cGVvZiBlLnByaWNlcz4idSIpdGhyb3cgbmV3IEVycm9yKCJOb3QgZm91bmQuIik7cmV0dXJuIGUucHJpY2VzfSl9YXN5bmMgZ2V0RW5lcmd5UHJpY2VzKCl7cmV0dXJuIHRoaXMudHJvbldlYi5mdWxsTm9kZS5yZXF1ZXN0KCJ3YWxsZXQvZ2V0ZW5lcmd5cHJpY2VzIix7fSwicG9zdCIpLnRoZW4oKGU9e30pPT57aWYodHlwZW9mIGUucHJpY2VzPiJ1Iil0aHJvdyBuZXcgRXJyb3IoIk5vdCBmb3VuZC4iKTtyZXR1cm4gZS5wcmljZXN9KX1hc3luYyBnZXRDdXJyZW50UmVmQmxvY2tQYXJhbXMoKXt0cnl7Y29uc3R7YmxvY2tfaGVhZGVyOmUsYmxvY2tJRDp0fT1hd2FpdCB0aGlzLnRyb25XZWIuZnVsbE5vZGUucmVxdWVzdCgid2FsbGV0L2dldGJsb2NrIix7ZGV0YWlsOiExfSwicG9zdCIpLHtudW1iZXI6YSx0aW1lc3RhbXA6c309ZS5yYXdfZGF0YTtyZXR1cm57cmVmX2Jsb2NrX2J5dGVzOmEudG9TdHJpbmcoMTYpLnNsaWNlKC00KS5wYWRTdGFydCg0LCIwIikscmVmX2Jsb2NrX2hhc2g6dC5zbGljZSgxNiwzMiksZXhwaXJhdGlvbjpzKzYwKjFlMyx0aW1lc3RhbXA6c319Y2F0Y2goZSl7dGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZ2V0IHBhcmFtczogJHtlLm1lc3NhZ2V8fGV9YCl9fWFzeW5jIGdldE5vd1dpdG5lc3NMaXN0KGU9e30pe2NvbnN0e29mZnNldDp0PTAsbGltaXQ6YT0xMCx2aXNpYmxlOnM9ITEsY29uZmlybWVkOnI9ITB9PWU7dGhpcy52YWxpZGF0b3Iubm90VmFsaWQoW3tuYW1lOiJvZmZzZXQiLHR5cGU6ImludGVnZXIiLGd0ZTowLHZhbHVlOnQsbXNnOiJJbnZhbGlkIG9mZnNldDogbXVzdCBiZSBhbiBpbnRlZ2VyID49IDAifSx7bmFtZToibGltaXQiLHR5cGU6ImludGVnZXIiLGd0OjAsdmFsdWU6YSxtc2c6IkludmFsaWQgbGltaXQ6IG11c3QgYmUgYW4gaW50ZWdlciA+IDAifSx7bmFtZToidmlzaWJsZSIsdHlwZToiYm9vbGVhbiIsdmFsdWU6cyxtc2c6IkludmFsaWQgdmlzaWJsZTogbXVzdCBiZSBhIGJvb2xlYW4ifV0pO2NvbnN0IG89e29mZnNldDpOdW1iZXIodCksbGltaXQ6TnVtYmVyKGEpLHZpc2libGU6c30saT1yP3RoaXMudHJvbldlYi5zb2xpZGl0eU5vZGU6dGhpcy50cm9uV2ViLmZ1bGxOb2RlLGM9YHdhbGxldCR7cj8ic29saWRpdHkiOiIifS9nZXRwYWdpbmF0ZWRub3d3aXRuZXNzbGlzdGAsZj1hd2FpdCBpLnJlcXVlc3QoYyxvLCJwb3N0Iik7aWYoZj8uRXJyb3IpdGhyb3cgbmV3IEVycm9yKGYuRXJyb3IpO3JldHVybiBBcnJheS5pc0FycmF5KGY/LndpdG5lc3Nlcyk/Zi53aXRuZXNzZXM6W119fWNvbnN0IERCPW49PntpZigic3RhdGVNdXRhYmlsaXR5ImluIG4mJihuLnN0YXRlTXV0YWJpbGl0eT1uLnN0YXRlTXV0YWJpbGl0eT9uLnN0YXRlTXV0YWJpbGl0eS50b0xvd2VyQ2FzZSgpOiJub25wYXlhYmxlIiksbi50eXBlPW4udHlwZT9uLnR5cGUudG9Mb3dlckNhc2UoKToiIixuLnR5cGU9PT0iZmFsbGJhY2sifHxuLnR5cGU9PT0icmVjZWl2ZSIpcmV0dXJuIjB4Ijtjb25zdCBlPW5ldyBiZS5ldGhlcnNVdGlscy5JbnRlcmZhY2UoW25dKTtsZXQgdDtpZihuLnR5cGU9PT0iZXZlbnQiP3Q9ZS5nZXRFdmVudChuLm5hbWUpOnQ9ZS5nZXRGdW5jdGlvbihuLm5hbWUpLHQpcmV0dXJuIHQuZm9ybWF0KCJzaWdoYXNoIik7dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGZ1bmN0aW9uIil9LHp1PShuLGUpPT50MChuLGUpO2NsYXNzICRCe2NvbnN0cnVjdG9yKGUsdCl7Wih0aGlzLCJ0cm9uV2ViIik7Wih0aGlzLCJjb250cmFjdCIpO1oodGhpcywiYWJpIik7Wih0aGlzLCJuYW1lIik7Wih0aGlzLCJpbnB1dHMiKTtaKHRoaXMsIm91dHB1dHMiKTtaKHRoaXMsImZ1bmN0aW9uU2VsZWN0b3IiKTtaKHRoaXMsInNpZ25hdHVyZSIpO1oodGhpcywiZGVmYXVsdE9wdGlvbnMiKTt0aGlzLnRyb25XZWI9ZS50cm9uV2ViLHRoaXMuY29udHJhY3Q9ZSx0aGlzLmFiaT10LHRoaXMubmFtZT10Lm5hbWV8fHQudHlwZSx0aGlzLmlucHV0cz10LmlucHV0c3x8W10sdGhpcy5vdXRwdXRzPVtdLCJvdXRwdXRzImluIHQmJnQub3V0cHV0cyYmKHRoaXMub3V0cHV0cz10Lm91dHB1dHMpLHRoaXMuZnVuY3Rpb25TZWxlY3Rvcj1EQih0KSx0aGlzLnNpZ25hdHVyZT1heSh0aGlzLmZ1bmN0aW9uU2VsZWN0b3IsITEpLnNsaWNlKDAsOCksdGhpcy5kZWZhdWx0T3B0aW9ucz17ZmVlTGltaXQ6dGhpcy50cm9uV2ViLmZlZUxpbWl0LGNhbGxWYWx1ZTowLHNob3VsZFBvbGxSZXNwb25zZTohMX19ZGVjb2RlSW5wdXQoZSl7Y29uc3QgdD1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuYWJpKSk7cmV0dXJuIHQub3V0cHV0cz10LmlucHV0cyx6dSh0LCIweCIrZSl9b25NZXRob2QoLi4uZSl7bGV0IHQ9IiI7cmV0dXJuIHRoaXMuYWJpJiYhL2V2ZW50L2kudGVzdCh0aGlzLmFiaS50eXBlKSYmKHQ9T2EodGhpcy5hYmksZSkpLHtjYWxsOmFzeW5jKGE9e30pPT4oYT17Li4uYSxyYXdQYXJhbWV0ZXI6dH0sYXdhaXQgdGhpcy5fY2FsbChbXSxbXSxhKSksc2VuZDphc3luYyhhPXt9LHM9dGhpcy50cm9uV2ViLmRlZmF1bHRQcml2YXRlS2V5KT0+KGE9ey4uLmEscmF3UGFyYW1ldGVyOnR9LGF3YWl0IHRoaXMuX3NlbmQoW10sW10sYSxzKSl9fWFzeW5jIF9jYWxsKGUsdCxhPXt9KXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhcmd1bWVudCBjb3VudCBwcm92aWRlZCIpO2lmKCF0aGlzLmNvbnRyYWN0LmFkZHJlc3MpdGhyb3cgbmV3IEVycm9yKCJTbWFydCBjb250cmFjdCBpcyBtaXNzaW5nIGFkZHJlc3MiKTtpZighdGhpcy5jb250cmFjdC5kZXBsb3llZCl0aHJvdyBuZXcgRXJyb3IoIkNhbGxpbmcgc21hcnQgY29udHJhY3RzIHJlcXVpcmVzIHlvdSB0byBsb2FkIHRoZSBjb250cmFjdCBmaXJzdCIpO2lmKCJzdGF0ZU11dGFiaWxpdHkiaW4gdGhpcy5hYmkpe2NvbnN0e3N0YXRlTXV0YWJpbGl0eTpjfT10aGlzLmFiaTtpZihjJiYhWyJwdXJlIiwidmlldyJdLmluY2x1ZGVzKGMudG9Mb3dlckNhc2UoKSkpdGhyb3cgbmV3IEVycm9yKGBNZXRob2RzIHdpdGggc3RhdGUgbXV0YWJpbGl0eSAiJHtjfSIgbXVzdCB1c2Ugc2VuZCgpYCl9YT17Li4udGhpcy5kZWZhdWx0T3B0aW9ucyxmcm9tOnRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5oZXgsLi4uYSxfaXNDb25zdGFudDohMH07Y29uc3Qgcz10Lm1hcCgoYyxmKT0+KHt0eXBlOmVbZl0sdmFsdWU6Y30pKSxyPWF3YWl0IHRoaXMudHJvbldlYi50cmFuc2FjdGlvbkJ1aWxkZXIudHJpZ2dlclNtYXJ0Q29udHJhY3QodGhpcy5jb250cmFjdC5hZGRyZXNzLHRoaXMuZnVuY3Rpb25TZWxlY3RvcixhLHMsYS5mcm9tP3RoaXMudHJvbldlYi5hZGRyZXNzLnRvSGV4KGEuZnJvbSk6dm9pZCAwKTtpZighYmUuaGFzUHJvcGVydHkociwiY29uc3RhbnRfcmVzdWx0IikpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gZXhlY3V0ZSIpO2NvbnN0IG89ci5jb25zdGFudF9yZXN1bHRbMF0ubGVuZ3RoO2lmKG89PT0wfHxvJTY0PT09OCl7bGV0IGM9IlRoZSBjYWxsIGhhcyBiZWVuIHJldmVydGVkIG9yIGhhcyB0aHJvd24gYW4gZXJyb3IuIjtpZihvIT09MCl7Yys9IiBFcnJvciBtZXNzYWdlOiAiO2xldCBmPSIiO2NvbnN0IGQ9ci5jb25zdGFudF9yZXN1bHRbMF0uc3Vic3RyaW5nKDgpO2ZvcihsZXQgcD0wO3A8by04O3ArPTY0KWYrPXRoaXMudHJvbldlYi50b1V0ZjgoZC5zdWJzdHJpbmcocCxwKzY0KSk7Yys9Zi5yZXBsYWNlKC8oXHUwMDAwfFx1MDAwYnxcZikrL2csIiAiKS5yZXBsYWNlKC8gKy9nLCIgIikucmVwbGFjZSgvXHMrJC9nLCIiKX10aHJvdyBuZXcgRXJyb3IoYyl9Y29uc3QgaT16dSh0aGlzLmFiaSwiMHgiK3IuY29uc3RhbnRfcmVzdWx0WzBdKTtyZXR1cm4gaS5sZW5ndGg9PT0xJiZPYmplY3Qua2V5cyhpKS5sZW5ndGg9PT0xP2lbMF06aX1hc3luYyBfc2VuZChlLHQsYT17fSxzPXRoaXMudHJvbldlYi5kZWZhdWx0UHJpdmF0ZUtleSl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXJndW1lbnQgY291bnQgcHJvdmlkZWQiKTtpZighdGhpcy5jb250cmFjdC5hZGRyZXNzKXRocm93IG5ldyBFcnJvcigiU21hcnQgY29udHJhY3QgaXMgbWlzc2luZyBhZGRyZXNzIik7aWYoIXRoaXMuY29udHJhY3QuZGVwbG95ZWQpdGhyb3cgbmV3IEVycm9yKCJDYWxsaW5nIHNtYXJ0IGNvbnRyYWN0cyByZXF1aXJlcyB5b3UgdG8gbG9hZCB0aGUgY29udHJhY3QgZmlyc3QiKTtjb25zdHtzdGF0ZU11dGFiaWxpdHk6cn09dGhpcy5hYmk7aWYoWyJwdXJlIiwidmlldyJdLmluY2x1ZGVzKHIudG9Mb3dlckNhc2UoKSkpdGhyb3cgbmV3IEVycm9yKGBNZXRob2RzIHdpdGggc3RhdGUgbXV0YWJpbGl0eSAiJHtyfSIgbXVzdCB1c2UgY2FsbCgpYCk7WyJwYXlhYmxlIl0uaW5jbHVkZXMoci50b0xvd2VyQ2FzZSgpKXx8KGEuY2FsbFZhbHVlPTApLGE9ey4uLnRoaXMuZGVmYXVsdE9wdGlvbnMsZnJvbTp0aGlzLnRyb25XZWIuZGVmYXVsdEFkZHJlc3MuaGV4LC4uLmF9O2NvbnN0IG89dC5tYXAoKGIsVCk9Pih7dHlwZTplW1RdLHZhbHVlOmJ9KSksaT1zP3RoaXMudHJvbldlYi5hZGRyZXNzLmZyb21Qcml2YXRlS2V5KHMpOnRoaXMudHJvbldlYi5kZWZhdWx0QWRkcmVzcy5iYXNlNTgsYz1hd2FpdCB0aGlzLnRyb25XZWIudHJhbnNhY3Rpb25CdWlsZGVyLnRyaWdnZXJTbWFydENvbnRyYWN0KHRoaXMuY29udHJhY3QuYWRkcmVzcyx0aGlzLmZ1bmN0aW9uU2VsZWN0b3IsYSxvLHRoaXMudHJvbldlYi5hZGRyZXNzLnRvSGV4KGkpKTtpZighYy5yZXN1bHR8fCFjLnJlc3VsdC5yZXN1bHQpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGVycm9yOiAiK0pTT04uc3RyaW5naWZ5KGMsbnVsbCwyKSk7Y29uc3QgZj1hd2FpdCB0aGlzLnRyb25XZWIudHJ4LnNpZ24oYy50cmFuc2FjdGlvbixzKTtpZighZi5zaWduYXR1cmUpdGhyb3cgcz9uZXcgRXJyb3IoIkludmFsaWQgcHJpdmF0ZSBrZXkgcHJvdmlkZWQiKTpuZXcgRXJyb3IoIlRyYW5zYWN0aW9uIHdhcyBub3Qgc2lnbmVkIHByb3Blcmx5Iik7Y29uc3QgZD1hd2FpdCB0aGlzLnRyb25XZWIudHJ4LnNlbmRSYXdUcmFuc2FjdGlvbihmKTtpZihkLmNvZGUpe2NvbnN0IGI9e2Vycm9yOmQuY29kZSxtZXNzYWdlOmQuY29kZX07ZC5tZXNzYWdlJiYoYi5tZXNzYWdlPXRoaXMudHJvbldlYi50b1V0ZjgoZC5tZXNzYWdlKSk7Y29uc3QgVD1uZXcgRXJyb3IoYi5tZXNzYWdlKTt0aHJvdyBULmVycm9yPWQuY29kZSxUfWlmKCFhLnNob3VsZFBvbGxSZXNwb25zZSlyZXR1cm4gZi50eElEO2NvbnN0IHA9YXN5bmMgYj0+e2lmKGI9PT0oYS5wb2xsVGltZXN8fDIwKSl7Y29uc3QgZz1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHJlc3VsdCBpbiBzb2xpZGl0eSBub2RlIik7dGhyb3cgZy5lcnJvcj0iQ2Fubm90IGZpbmQgcmVzdWx0IGluIHNvbGlkaXR5IG5vZGUiLGcudHJhbnNhY3Rpb249ZixnfWNvbnN0IFQ9YXdhaXQgdGhpcy50cm9uV2ViLnRyeC5nZXRUcmFuc2FjdGlvbkluZm8oZi50eElEKTtpZighT2JqZWN0LmtleXMoVCkubGVuZ3RoKXJldHVybiBhd2FpdCBuZXcgUHJvbWlzZShnPT5zZXRUaW1lb3V0KGcsM2UzKSkscChiKzEpO2lmKFQucmVzdWx0JiZULnJlc3VsdD09PSJGQUlMRUQiKXtjb25zdCBnPW5ldyBFcnJvcih0aGlzLnRyb25XZWIudG9VdGY4KFQucmVzTWVzc2FnZSkpO3Rocm93IGcuZXJyb3I9dGhpcy50cm9uV2ViLnRvVXRmOChULnJlc01lc3NhZ2UpLGcudHJhbnNhY3Rpb249ZixnLm91dHB1dD1ULGd9aWYoIWJlLmhhc1Byb3BlcnR5KFQsImNvbnRyYWN0UmVzdWx0Iikpe2NvbnN0IGc9bmV3IEVycm9yKCJGYWlsZWQgdG8gZXhlY3V0ZTogIitKU09OLnN0cmluZ2lmeShULG51bGwsMikpO3Rocm93IGcuZXJyb3I9IkZhaWxlZCB0byBleGVjdXRlOiAiK0pTT04uc3RyaW5naWZ5KFQsbnVsbCwyKSxnLnRyYW5zYWN0aW9uPWYsZy5vdXRwdXQ9VCxnfWlmKGEucmF3UmVzcG9uc2UpcmV0dXJuIFQ7bGV0IFc9enUodGhpcy5hYmksIjB4IitULmNvbnRyYWN0UmVzdWx0WzBdKTtyZXR1cm4gVy5sZW5ndGg9PT0xJiZPYmplY3Qua2V5cyhXKS5sZW5ndGg9PT0xPyhXPVdbMF0sYS5rZWVwVHhJRD9bZi50eElELFddOlcpOmEua2VlcFR4SUQ/W2YudHhJRCxXXTpXfTtyZXR1cm4gcCgwKX19ZnVuY3Rpb24gRXgobil7Y29uc3QgZT1uLmxlbmd0aD4wJiZBcnJheS5pc0FycmF5KG5bMF0pLHQ9ZT9uWzBdOltdLGE9KGU/blsxXTpuWzBdKT8/e307cmV0dXJue2FyZ3M6dCxvcHRpb25zOmF9fWZ1bmN0aW9uIFd4KG4pe2lmKG4hPT12b2lkIDApe2lmKHR5cGVvZiBuPT0iYmlnaW50Iil7aWYobjwwbil0aHJvdyBuZXcgRXJyb3IoImNhbGwgdmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlIik7aWYobj5CaWdJbnQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKXRocm93IG5ldyBFcnJvcigiY2FsbCB2YWx1ZSBleGNlZWRzIHNhZmUgaW50ZWdlciByYW5nZSIpO3JldHVybiBOdW1iZXIobil9aWYodHlwZW9mIG4hPSJudW1iZXIiKXRocm93IG5ldyBFcnJvcigiY2FsbCB2YWx1ZSBtdXN0IGJlIGEgbnVtYmVyIG9yIGJpZ2ludCIpO2lmKG48MCl0aHJvdyBuZXcgRXJyb3IoImNhbGwgdmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlIik7aWYoIU51bWJlci5pc0ludGVnZXIobikpdGhyb3cgbmV3IEVycm9yKCJjYWxsIHZhbHVlIG11c3QgYmUgYW4gaW50ZWdlciIpO2lmKG4+TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpdGhyb3cgbmV3IEVycm9yKCJjYWxsIHZhbHVlIGV4Y2VlZHMgc2FmZSBpbnRlZ2VyIHJhbmdlIik7cmV0dXJuIG59fWZ1bmN0aW9uIExCKG4sZSl7Y29uc3QgdD1lLnJlcGxhY2UoL14weC8sIiIpO2lmKHQubGVuZ3RoPT09NjQmJi9eWzAtOWEtZkEtRl17NjR9JC8udGVzdCh0KSl7Y29uc3QgYT1uLmFkZHJlc3MuZnJvbVByaXZhdGVLZXkoZSk7aWYoYSlyZXR1cm4gYX10aHJvdyBuZXcgRXJyb3IoJ1RoZSAiYWNjb3VudCIgb3B0aW9uIG11c3QgYmUgYSBwcml2YXRlIGtleS4nKX1mdW5jdGlvbiB6QihuLGUsdCl7aWYodHlwZW9mIGU9PSJzdHJpbmciJiZlLmxlbmd0aD4wKXtpZighbi5pc0FkZHJlc3MoZSkpdGhyb3cgbmV3IEVycm9yKCdUaGUgImZyb20iIG9wdGlvbiBtdXN0IGJlIGEgdmFsaWQgYWRkcmVzcy4nKTtyZXR1cm4gZX1pZih0eXBlb2YgdD09InN0cmluZyImJnQubGVuZ3RoPjApcmV0dXJuIHQ7dGhyb3cgbmV3IEVycm9yKCdBIGNhbGxlciBhZGRyZXNzIGlzIHJlcXVpcmVkLiBTZXQgdGhlICJmcm9tIiBvcHRpb24gb3IgYSBkZWZhdWx0IGFkZHJlc3Mgb24gdGhlIFRyb25XZWIgaW5zdGFuY2UuJyl9ZnVuY3Rpb24gakIobixlKXtjb25zdCB0PW4uZGVmYXVsdEFkZHJlc3MuYmFzZTU4O2lmKCFuLmRlZmF1bHRQcml2YXRlS2V5fHwhdCl0aHJvdyBuZXcgRXJyb3IoYE1ldGhvZCAiJHtlfSIgbW9kaWZpZXMgc3RhdGUgYW5kIHJlcXVpcmVzIGEgc2lnbmVyLiBTZXQgYSBwcml2YXRlIGtleSBvciBkZWZhdWx0IGFkZHJlc3Mgb24gdGhlIFRyb25XZWIgaW5zdGFuY2UuYCk7cmV0dXJuIHR9ZnVuY3Rpb24gVkIobixlLHQpe3JldHVybiB0eXBlb2YgdD09InN0cmluZyImJnQubGVuZ3RoPjA/e3NpZ25lckFkZHJlc3M6TEIobix0KSxwcml2YXRlS2V5OnR9OntzaWduZXJBZGRyZXNzOmpCKG4sZSl9fWZ1bmN0aW9uIEdCKG4sZSl7Y29uc3QgdD1lLmNvbnN0YW50X3Jlc3VsdCxhPUFycmF5LmlzQXJyYXkodCk/dFswXTp0O2lmKGE9PW51bGx8fGE9PT0iIilyZXR1cm47aWYodHlwZW9mIGEhPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25zdGFudCBjYWxsIHJlc3VsdCIpO2NvbnN0IHM9YS5yZXBsYWNlKC9eMHgvLCIiKSxyPXMubGVuZ3RoO2lmKHIhPT0wJiZyJTY0PT09OCl7bGV0IG89IlRoZSBjYWxsIGhhcyBiZWVuIHJldmVydGVkIG9yIGhhcyB0aHJvd24gYW4gZXJyb3IuIjtjb25zdCBpPXMuc3Vic3RyaW5nKDgpO2lmKGkubGVuZ3RoPjApe2xldCBjPSIiO2ZvcihsZXQgZj0wO2Y8aS5sZW5ndGg7Zis9NjQpYys9bi50b1V0ZjgoaS5zdWJzdHJpbmcoZixmKzY0KSk7bys9YCBFcnJvciBtZXNzYWdlOiAke2MucmVwbGFjZSgvKFx1MDAwMHxcdTAwMGJ8XGYpKy9nLCIgIikucmVwbGFjZSgvICsvZywiICIpLnJlcGxhY2UoL1xzKyQvZywiIil9YH10aHJvdyBuZXcgRXJyb3Iobyl9cmV0dXJuYDB4JHtzfWB9ZnVuY3Rpb24gSEIobixlLHQpe2NvbnN0IGE9bzAobixlLHQpO2lmKCFhaShhKSl0aHJvdyBuZXcgRXJyb3IoYEZ1bmN0aW9uICIke2V9IiBpcyBub3QgcmVhZC1vbmx5LmApO3JldHVybiBhfWZ1bmN0aW9uIEtCKG4sZSx0KXtjb25zdCBhPW8wKG4sZSx0KTtpZihhaShhKSl0aHJvdyBuZXcgRXJyb3IoYEZ1bmN0aW9uICIke2V9IiBpcyByZWFkLW9ubHkuYCk7cmV0dXJuIGF9ZnVuY3Rpb24gWkIobixlKXtpZighZSl7aWYobi5vdXRwdXRzJiZuLm91dHB1dHMubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gZXhlY3V0ZSIpO3JldHVybn1jb25zdCB0PXQwKG4sZSk7cmV0dXJuIHQubGVuZ3RoPT09MT90WzBdOnR9ZnVuY3Rpb24gcUIobixlKXtyZXR1cm4gdHlwZW9mIGUubWVzc2FnZT09InN0cmluZyImJmUubWVzc2FnZS5sZW5ndGg+MD9uLnRvVXRmOChlLm1lc3NhZ2UpOnR5cGVvZiBlLmNvZGU9PSJzdHJpbmciJiZlLmNvZGUubGVuZ3RoPjA/ZS5jb2RlOiJGYWlsZWQgdG8gYnJvYWRjYXN0IHRyYW5zYWN0aW9uIn1mdW5jdGlvbiBKQihuLGUpe2lmKGUmJnR5cGVvZiBlPT0ib2JqZWN0Iil7Y29uc3QgdD1lO2lmKHQuY29kZXx8dC5yZXN1bHQ9PT0hMSl0aHJvdyBuZXcgRXJyb3IocUIobixlKSl9fWZ1bmN0aW9uIEJ4KG4sZSx0KXtjb25zdCBhPW4wKG4sZSk7aWYoYS5sZW5ndGg9PT0wKXJldHVybjtjb25zdCBzPUFycmF5LmlzQXJyYXkodCk/dC5sZW5ndGg6MDtpZighYS5pbmNsdWRlcyhzKSl7Y29uc3Qgcj1hLmpvaW4oIiBvciAiKTt0aHJvdyBuZXcgRXJyb3IoYENvbnRyYWN0IGZ1bmN0aW9uICIke2V9IiBleHBlY3RzICR7cn0gYXJndW1lbnQocykgYnV0IHJlY2VpdmVkICR7c30uYCl9fWZ1bmN0aW9uIEl4KG4pe2lmKCFuLmFkZHJlc3MpdGhyb3cgbmV3IEVycm9yKCJTbWFydCBjb250cmFjdCBpcyBtaXNzaW5nIGFkZHJlc3MiKTtyZXR1cm4gbi5hZGRyZXNzfWFzeW5jIGZ1bmN0aW9uIFlCKG4sZSx0LGEpe0J4KG4uYWJpLGUsdCk7Y29uc3Qgcz1JeChuKSxyPW4udHJvbldlYixvPUhCKG4uYWJpLGUsdCkse2Zyb206aSx2YWx1ZTpjfT1hLGY9YXdhaXQgci50cmFuc2FjdGlvbkJ1aWxkZXIudHJpZ2dlckNvbnN0YW50Q29udHJhY3QocyxrbyhvKSx7ZmVlTGltaXQ6ci5mZWVMaW1pdCwuLi5jIT09dm9pZCAwP3tjYWxsVmFsdWU6V3goYyl9Ont9LGZ1bmNBQklWMjpvLHBhcmFtZXRlcnNWMjpbLi4udF19LFtdLHpCKHIsaSxyLmRlZmF1bHRBZGRyZXNzLmJhc2U1OHx8dm9pZCAwKSk7cmV0dXJuIFpCKG8sR0IocixmKSl9YXN5bmMgZnVuY3Rpb24gWEIobixlLHQsYSl7Y29uc3R7c2lnbmVyQWRkcmVzczpzLHByaXZhdGVLZXk6cn09VkIobi50cm9uV2ViLGUsYS5hY2NvdW50KTtCeChuLmFiaSxlLHQpO2NvbnN0IG89SXgobiksaT1uLnRyb25XZWIsYz1LQihuLmFiaSxlLHQpLHt2YWx1ZTpmLGZlZUxpbWl0OmQsdG9rZW5JZDpwLHRva2VuVmFsdWU6YixwZXJtaXNzaW9uSWQ6VH09YSxXPVd4KGYpLGc9YXdhaXQgaS50cmFuc2FjdGlvbkJ1aWxkZXIudHJpZ2dlclNtYXJ0Q29udHJhY3QobyxrbyhjKSx7ZmVlTGltaXQ6ZD8/aS5mZWVMaW1pdCwuLi5XIT09dm9pZCAwP3tjYWxsVmFsdWU6V306e30sLi4ucCE9PXZvaWQgMD97dG9rZW5JZDpwfTp7fSwuLi5iIT09dm9pZCAwP3t0b2tlblZhbHVlOmJ9Ont9LC4uLlQhPT12b2lkIDA/e3Blcm1pc3Npb25JZDpUfTp7fSxmdW5jQUJJVjI6YyxwYXJhbWV0ZXJzVjI6Wy4uLnRdfSxbXSxzKTtpZighZy5yZXN1bHQ/LnJlc3VsdCl0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBidWlsZCB0cmFuc2FjdGlvbjogIisoZy5yZXN1bHQ/Lm1lc3NhZ2U/P0pTT04uc3RyaW5naWZ5KGcpKSk7aWYoIWcudHJhbnNhY3Rpb258fCFnLnRyYW5zYWN0aW9uLnR4SUQpdGhyb3cgbmV3IEVycm9yKCJ0cmlnZ2VyU21hcnRDb250cmFjdCBkaWQgbm90IHJldHVybiBhIHZhbGlkIHRyYW5zYWN0aW9uIG9iamVjdCIpO2NvbnN0IEE9YXdhaXQgaS50cnguc2lnbihnLnRyYW5zYWN0aW9uLHIpLG09YXdhaXQgaS50cnguc2VuZFJhd1RyYW5zYWN0aW9uKEEpO3JldHVybiBKQihpLG0pLEEudHhJRH1mdW5jdGlvbiBRQihuKXtjb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCksdD1hPT4ocyxyKT0+e2NvbnN0IG89RXgoW3Mscl0pO3JldHVybiBZQihuLGEsby5hcmdzLG8ub3B0aW9ucyl9O2Zvcihjb25zdCBhIG9mIG4uYWJpKXtpZihhLnR5cGUhPT0iZnVuY3Rpb24ifHwhKCJuYW1lImluIGEpKWNvbnRpbnVlO2NvbnN0IHM9YTtpZighYWkocykpY29udGludWU7Y29uc3Qgcj1zLm5hbWUsbz1rbyhzKTtlW3JdPXQociksZVtvXT10KG8pfXJldHVybiBlfWZ1bmN0aW9uIGU2KG4pe2NvbnN0IGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0PWE9PihzLHIpPT57Y29uc3Qgbz1FeChbcyxyXSk7cmV0dXJuIFhCKG4sYSxvLmFyZ3Msby5vcHRpb25zKX07Zm9yKGNvbnN0IGEgb2Ygbi5hYmkpe2lmKGEudHlwZSE9PSJmdW5jdGlvbiJ8fCEoIm5hbWUiaW4gYSkpY29udGludWU7Y29uc3Qgcz1hO2lmKGFpKHMpKWNvbnRpbnVlO2NvbnN0IHI9cy5uYW1lLG89a28ocyk7ZVtyXT10KHIpLGVbb109dChvKX1yZXR1cm4gZX1mdW5jdGlvbiBqaChuLGUpe3JldHVybiB0eXBlb2YgZSE9ImZ1bmN0aW9uIj9uOm5ldyBQcm94eShlLHtnZXQ6KHQsYSk9Pm5bYV0saGFzOih0LGEpPT5hIGluIG4sb3duS2V5czooKT0+UmVmbGVjdC5vd25LZXlzKG4pLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjoodCxhKT0+T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGEpfSl9Y2xhc3MgdDZ7Y29uc3RydWN0b3IoZSx0PVtdLGEpe1oodGhpcywidHJvbldlYiIpO1oodGhpcywiYWJpIik7Wih0aGlzLCJhZGRyZXNzIik7Wih0aGlzLCJldmVudExpc3RlbmVyIik7Wih0aGlzLCJieXRlY29kZSIpO1oodGhpcywiZGVwbG95ZWQiKTtaKHRoaXMsImxhc3RCbG9jayIpO1oodGhpcywibWV0aG9kcyIpO1oodGhpcywibWV0aG9kSW5zdGFuY2VzIik7Wih0aGlzLCJwcm9wcyIpO1oodGhpcywiX3JlYWROYW1lc3BhY2UiKTtaKHRoaXMsIl93cml0ZU5hbWVzcGFjZSIpO2lmKCFlfHwhKGUgaW5zdGFuY2VvZiBudCkpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBpbnN0YW5jZSBvZiBUcm9uV2ViIik7dGhpcy50cm9uV2ViPWUsdGhpcy5hZGRyZXNzPWEsdGhpcy5hYmk9dCx0aGlzLmV2ZW50TGlzdGVuZXI9ITEsdGhpcy5ieXRlY29kZT0hMSx0aGlzLmRlcGxveWVkPSExLHRoaXMubGFzdEJsb2NrPSExLHRoaXMubWV0aG9kcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMubWV0aG9kSW5zdGFuY2VzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5wcm9wcz1bXSxiZS5hZGRyZXNzLmlzQWRkcmVzcyhhKT90aGlzLmRlcGxveWVkPSEwOnRoaXMuYWRkcmVzcz0hMSx0aGlzLmxvYWRBYmkodCl9Z2V0IHJlYWQoKXtyZXR1cm4oIXRoaXMuX3JlYWROYW1lc3BhY2V8fHRoaXMuX3JlYWROYW1lc3BhY2UuYWJpIT09dGhpcy5hYmkpJiYodGhpcy5fcmVhZE5hbWVzcGFjZT17YWJpOnRoaXMuYWJpLG5hbWVzcGFjZTpqaChRQih0aGlzKSx0aGlzLm1ldGhvZHMucmVhZCl9KSx0aGlzLl9yZWFkTmFtZXNwYWNlLm5hbWVzcGFjZX1nZXQgd3JpdGUoKXtyZXR1cm4oIXRoaXMuX3dyaXRlTmFtZXNwYWNlfHx0aGlzLl93cml0ZU5hbWVzcGFjZS5hYmkhPT10aGlzLmFiaSkmJih0aGlzLl93cml0ZU5hbWVzcGFjZT17YWJpOnRoaXMuYWJpLG5hbWVzcGFjZTpqaChlNih0aGlzKSx0aGlzLm1ldGhvZHMud3JpdGUpfSksdGhpcy5fd3JpdGVOYW1lc3BhY2UubmFtZXNwYWNlfWhhc1Byb3BlcnR5KGUpe3JldHVybiB0aGlzLmhhc093blByb3BlcnR5KGUpfHx0aGlzLl9fcHJvdG9fXy5oYXNPd25Qcm9wZXJ0eShlKX1sb2FkQWJpKGUpe3RoaXMuYWJpPWUsdGhpcy5tZXRob2RzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5tZXRob2RJbnN0YW5jZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnByb3BzLmZvckVhY2godD0+ZGVsZXRlIHRoaXNbdF0pLGUuZm9yRWFjaCh0PT57aWYoIXQudHlwZXx8WyJjb25zdHJ1Y3RvciIsImVycm9yIl0uaW5jbHVkZXModC50eXBlLnRvTG93ZXJDYXNlKCkpKXJldHVybjtjb25zdCBhPW5ldyAkQih0aGlzLHQpLHM9YS5vbk1ldGhvZC5iaW5kKGEpLHtuYW1lOnIsZnVuY3Rpb25TZWxlY3RvcjpvLHNpZ25hdHVyZTppfT1hLGM9cixmPW8sZD1pO3RoaXMubWV0aG9kc1tyXT1zLHRoaXMubWV0aG9kc1tvXT1zLHRoaXMubWV0aG9kc1tpXT1zLHRoaXMubWV0aG9kSW5zdGFuY2VzW2NdPWEsdGhpcy5tZXRob2RJbnN0YW5jZXNbZl09YSx0aGlzLm1ldGhvZEluc3RhbmNlc1tkXT1hLHRoaXMuaGFzUHJvcGVydHkocil8fCh0aGlzW3JdPXMsdGhpcy5wcm9wcy5wdXNoKHIpKSx0aGlzLmhhc1Byb3BlcnR5KG8pfHwodGhpc1tvXT1zLHRoaXMucHJvcHMucHVzaChvKSksdGhpcy5oYXNQcm9wZXJ0eShpKXx8KHRoaXNbaV09cyx0aGlzLnByb3BzLnB1c2goaSkpfSl9ZGVjb2RlSW5wdXQoZSl7Y29uc3QgdD1lLnN1YnN0cmluZygwLDgpLGE9ZS5zdWJzdHJpbmcoOCk7aWYoIXRoaXMubWV0aG9kSW5zdGFuY2VzW3RdKXRocm93IG5ldyBFcnJvcigiQ29udHJhY3QgbWV0aG9kICIrdCsiIG5vdCBmb3VuZCIpO3JldHVybntuYW1lOnRoaXMubWV0aG9kSW5zdGFuY2VzW3RdLm5hbWUscGFyYW1zOnRoaXMubWV0aG9kSW5zdGFuY2VzW3RdLmRlY29kZUlucHV0KGEpfX1hc3luYyBuZXcoZSx0PXRoaXMudHJvbldlYi5kZWZhdWx0UHJpdmF0ZUtleSl7Y29uc3QgYT10aGlzLnRyb25XZWIuYWRkcmVzcy5mcm9tUHJpdmF0ZUtleSh0KSxzPWF3YWl0IHRoaXMudHJvbldlYi50cmFuc2FjdGlvbkJ1aWxkZXIuY3JlYXRlU21hcnRDb250cmFjdChlLGEpLHI9YXdhaXQgdGhpcy50cm9uV2ViLnRyeC5zaWduKHMsdCksbz1hd2FpdCB0aGlzLnRyb25XZWIudHJ4LnNlbmRSYXdUcmFuc2FjdGlvbihyKTtpZihvLmNvZGUpdGhyb3d7ZXJyb3I6by5jb2RlLG1lc3NhZ2U6dGhpcy50cm9uV2ViLnRvVXRmOChvLm1lc3NhZ2UpfTthd2FpdCBiZS5zbGVlcCgzZTMpO2NvbnN0IGk9ci5yYXdfZGF0YS5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWUubmV3X2NvbnRyYWN0LmFiaS5lbnRyeXN8fFtdO3JldHVybiB0aGlzLnRyb25XZWIuY29udHJhY3QoaSxyLmNvbnRyYWN0X2FkZHJlc3MpfWFzeW5jIGF0KGUpe3RyeXtjb25zdCB0PWF3YWl0IHRoaXMudHJvbldlYi50cnguZ2V0Q29udHJhY3QoZSk7aWYoIXQuY29udHJhY3RfYWRkcmVzcyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZXJyb3I6ICIrSlNPTi5zdHJpbmdpZnkodCxudWxsLDIpKTtyZXR1cm4gdGhpcy5hZGRyZXNzPXQuY29udHJhY3RfYWRkcmVzcyx0aGlzLmJ5dGVjb2RlPXQuYnl0ZWNvZGUsdGhpcy5kZXBsb3llZD0hMCx0aGlzLmxvYWRBYmkodC5hYmk/dC5hYmkuZW50cnlzP3QuYWJpLmVudHJ5czpbXTpbXSksdGhpc31jYXRjaCh0KXt0aHJvdyB0LnRvU3RyaW5nKCkuaW5jbHVkZXMoImRvZXMgbm90IGV4aXN0Iik/bmV3IEVycm9yKCJDb250cmFjdCBoYXMgbm90IGJlZW4gZGVwbG95ZWQgb24gdGhlIG5ldHdvcmsiKTpuZXcgRXJyb3IodCl9fX1jb25zdCByNj1bInRyYW5zYWN0aW9uQnVpbGRlciIsInBsdWdpbiJdLG42PVsic2lnbiIsInNpZ25NZXNzYWdlIiwic2lnbk1lc3NhZ2VWMiIsInNpZ25UcmFuc2FjdGlvbiIsInNpZ25UeXBlZERhdGEiLCJtdWx0aVNpZ24iLCJzZXRQcml2YXRlS2V5IiwiZWNSZWNvdmVyIl07Y2xhc3MgbzZ7Y29uc3RydWN0b3IoZSx0PXt9KXtaKHRoaXMsInRyb25XZWIiKTtaKHRoaXMsInBsdWdpbk5vT3ZlcnJpZGUiKTtaKHRoaXMsImRpc2FibGVQbHVnaW5zIik7aWYoIWV8fCEoZSBpbnN0YW5jZW9mIG50KSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIGluc3RhbmNlIG9mIFRyb25XZWIiKTt0aGlzLnRyb25XZWI9ZSx0aGlzLnBsdWdpbk5vT3ZlcnJpZGU9WyJyZWdpc3RlciJdLHRoaXMuZGlzYWJsZVBsdWdpbnM9ISF0LmRpc2FibGVQbHVnaW5zfXJlZ2lzdGVyKGUsdCl7bGV0IGE9e3JlcXVpcmVzOiIwLjAuMCIsY29tcG9uZW50czp7fX07Y29uc3Qgcz17bGliczpbXSxwbHVnZ2VkOltdLHNraXBwZWQ6W10sZXJyb3I6dm9pZCAwfTtpZih0aGlzLmRpc2FibGVQbHVnaW5zKXJldHVybiBzLmVycm9yPSJUaGlzIGluc3RhbmNlIG9mIFRyb25XZWIgaGFzIHBsdWdpbnMgZGlzYWJsZWQuIixzO2NvbnN0IHI9bmV3IGUodGhpcy50cm9uV2ViKTtpZihiZS5pc0Z1bmN0aW9uKHIucGx1Z2luSW50ZXJmYWNlKSYmKGE9ci5wbHVnaW5JbnRlcmZhY2UodCkpLHd4LnNhdGlzZmllcyhudC52ZXJzaW9uLGEucmVxdWlyZXMpKWlmKGEuZnVsbENsYXNzKXtjb25zdCBvPXIuY29uc3RydWN0b3IubmFtZSxpPW8uc3Vic3RyaW5nKDAsMSkudG9Mb3dlckNhc2UoKStvLnN1YnN0cmluZygxKTtvIT09aSYmKE9iamVjdC5hc3NpZ24obnQse1tvXTplfSksT2JqZWN0LmFzc2lnbih0aGlzLnRyb25XZWIse1tpXTpyfSkscy5saWJzLnB1c2gobykpfWVsc2UgZm9yKGNvbnN0IG8gaW4gYS5jb21wb25lbnRzKXtpZihyNi5pbmNsdWRlcyhvKSl7Y29uc29sZS53YXJuKGBbVHJvbldlYl0gUGx1Z2luIGF0dGVtcHRlZCB0byBvdmVycmlkZSBwcm90ZWN0ZWQgbW9kdWxlICIke299Iiwgd2hpY2ggaXMgbm90IGFsbG93ZWQuIFBsdWdpbiBzdXBwb3J0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uLmApLHMuc2tpcHBlZC5wdXNoKG8pO2NvbnRpbnVlfWlmKCF0aGlzLnRyb25XZWIuaGFzT3duUHJvcGVydHkobykpY29udGludWU7Y29uc3QgaT1hLmNvbXBvbmVudHNbb10sYz10aGlzLnRyb25XZWJbb10ucGx1Z2luTm9PdmVycmlkZXx8W107Zm9yKGNvbnN0IGYgaW4gaSl7aWYoZj09PSJjb25zdHJ1Y3RvciJ8fG42LmluY2x1ZGVzKGYpfHx0aGlzLnRyb25XZWJbb11bZl0mJihjLmluY2x1ZGVzKGYpfHwvXl8vLnRlc3QoZikpKXtzLnNraXBwZWQucHVzaChmKTtjb250aW51ZX10aGlzLnRyb25XZWJbb11bZl09aVtmXS5iaW5kKHRoaXMudHJvbldlYltvXSkscy5wbHVnZ2VkLnB1c2goZil9fWVsc2UgdGhyb3cgbmV3IEVycm9yKCJUaGUgcGx1Z2luIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFRyb25XZWIiKTtyZXR1cm4gc319Y2xhc3MgczZ7Y29uc3RydWN0b3IoZSl7Wih0aGlzLCJ0cm9uV2ViIik7aWYoIWV8fCEoZSBpbnN0YW5jZW9mIG50KSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIGluc3RhbmNlIG9mIFRyb25XZWIiKTt0aGlzLnRyb25XZWI9ZX1zZXRTZXJ2ZXIoZSx0PSJoZWFsdGhjaGVjayIpe2lmKCFlKXJldHVybiB0aGlzLnRyb25XZWIuZXZlbnRTZXJ2ZXI9dm9pZCAwO2lmKGJlLmlzU3RyaW5nKGUpJiYoZT1uZXcgZ3goZSkpLCF0aGlzLnRyb25XZWIuaXNWYWxpZFByb3ZpZGVyKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBldmVudCBzZXJ2ZXIgcHJvdmlkZWQiKTt0aGlzLnRyb25XZWIuZXZlbnRTZXJ2ZXI9ZSx0aGlzLnRyb25XZWIuZXZlbnRTZXJ2ZXIuaXNDb25uZWN0ZWQ9KCk9PnRoaXMudHJvbldlYi5ldmVudFNlcnZlci5yZXF1ZXN0KHQpLnRoZW4oKCk9PiEwKS5jYXRjaCgoKT0+ITEpfWFzeW5jIGdldEV2ZW50c0J5Q29udHJhY3RBZGRyZXNzKGUsdD17fSl7Y29uc3QgYT1PYmplY3QuYXNzaWduKHtsaW1pdDoyMH0sdCkse2V2ZW50TmFtZTpzLGJsb2NrTnVtYmVyOnIsb25seVVuY29uZmlybWVkOm8sb25seUNvbmZpcm1lZDppLG1pbkJsb2NrVGltZXN0YW1wOmMsbWF4QmxvY2tUaW1lc3RhbXA6ZixvcmRlckJ5OmQsZmluZ2VycHJpbnQ6cH09YTtsZXR7bGltaXQ6Yn09YTtpZighdGhpcy50cm9uV2ViLmV2ZW50U2VydmVyKXRocm93IG5ldyBFcnJvcigiTm8gZXZlbnQgc2VydmVyIGNvbmZpZ3VyZWQiKTtpZighdGhpcy50cm9uV2ViLmlzQWRkcmVzcyhlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29udHJhY3QgYWRkcmVzcyBwcm92aWRlZCIpO2lmKHR5cGVvZiBjPCJ1IiYmIWJlLmlzSW50ZWdlcihjKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbWluQmxvY2tUaW1lc3RhbXAgcHJvdmlkZWQiKTtpZih0eXBlb2YgZjwidSImJiFiZS5pc0ludGVnZXIoZikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1heEJsb2NrVGltZXN0YW1wIHByb3ZpZGVkIik7YmUuaXNJbnRlZ2VyKGIpJiZiPjIwMCYmKGNvbnNvbGUud2FybigiRGVmYXVsdGluZyB0byBtYXhpbXVtIGFjY2VwdGVkIGxpbWl0OiAyMDAiKSxiPTIwMCk7Y29uc3QgVD17fTtzJiYoVC5ldmVudF9uYW1lPXMpLHImJihULmJsb2NrX251bWJlcj1yKSx0eXBlb2Ygbz09ImJvb2xlYW4iJiYoVC5vbmx5X3VuY29uZmlybWVkPW8pLHR5cGVvZiBpPT0iYm9vbGVhbiImJihULm9ubHlfY29uZmlybWVkPWkpLGMmJihULm1pbl9ibG9ja190aW1lc3RhbXA9YyksZiYmKFQubWF4X2Jsb2NrX3RpbWVzdGFtcD1mKSxkJiYoVC5vcmRlcl9ieT1kKSxwJiYoVC5maW5nZXJwcmludD1wKSxiZS5pc0ludGVnZXIoYikmJihULmxpbWl0PWIpO2NvbnN0IFc9YXdhaXQgdGhpcy50cm9uV2ViLmV2ZW50U2VydmVyLnJlcXVlc3QoYHYxL2NvbnRyYWN0cy8ke3RoaXMudHJvbldlYi5hZGRyZXNzLmZyb21IZXgoZSl9L2V2ZW50cz8ke25ldyBVUkxTZWFyY2hQYXJhbXMoVCkudG9TdHJpbmcoKX1gKTtpZihXLnN1Y2Nlc3MpcmV0dXJuIFc7dGhyb3cgbmV3IEVycm9yKFcuZXJyb3IpfWFzeW5jIGdldEV2ZW50c0J5VHJhbnNhY3Rpb25JRChlLHQ9e30pe2lmKCF0aGlzLnRyb25XZWIuZXZlbnRTZXJ2ZXIpdGhyb3cgbmV3IEVycm9yKCJObyBldmVudCBzZXJ2ZXIgY29uZmlndXJlZCIpO2lmKCEvXlswLTlhLWZBLUZdezY0fSQvLnRlc3QoZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRyYW5zYWN0aW9uSUQgcHJvdmlkZWQiKTtjb25zdCBhPXt9O3JldHVybiB0eXBlb2YgdC5vbmx5X3VuY29uZmlybWVkPT0iYm9vbGVhbiImJihhLm9ubHlfdW5jb25maXJtZWQ9dC5vbmx5X3VuY29uZmlybWVkKSx0eXBlb2YgdC5vbmx5X2NvbmZpcm1lZD09ImJvb2xlYW4iJiYoYS5vbmx5X2NvbmZpcm1lZD10Lm9ubHlfY29uZmlybWVkKSx0aGlzLnRyb25XZWIuZXZlbnRTZXJ2ZXIucmVxdWVzdChgdjEvdHJhbnNhY3Rpb25zLyR7ZX0vZXZlbnRzPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhhKS50b1N0cmluZygpfWApLnRoZW4ocz0+e2lmKHMuc3VjY2VzcylyZXR1cm4gczt0aHJvdyBuZXcgRXJyb3IoSlNPTi5wYXJzZShzLmVycm9yKS5tZXNzYWdlKX0pfWFzeW5jIGdldEV2ZW50c0J5QmxvY2tOdW1iZXIoZSx0PXt9KXtpZighdGhpcy50cm9uV2ViLmV2ZW50U2VydmVyKXRocm93IG5ldyBFcnJvcigiTm8gZXZlbnQgc2VydmVyIGNvbmZpZ3VyZWQiKTtjb25zdCBhPXt9O3JldHVybiB0eXBlb2YgdC5vbmx5X2NvbmZpcm1lZD09ImJvb2xlYW4iJiYoYS5vbmx5X2NvbmZpcm1lZD10Lm9ubHlfY29uZmlybWVkKSx0LmxpbWl0JiYoYS5saW1pdD10LmxpbWl0KSx0LmZpbmdlcnByaW50JiYoYS5maW5nZXJwcmludD10LmZpbmdlcnByaW50KSx0aGlzLnRyb25XZWIuZXZlbnRTZXJ2ZXIucmVxdWVzdChgdjEvYmxvY2tzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhlKSl9L2V2ZW50cz8ke25ldyBVUkxTZWFyY2hQYXJhbXMoYSkudG9TdHJpbmcoKX1gKS50aGVuKHM9PntpZihzLnN1Y2Nlc3MpcmV0dXJuIHM7dGhyb3cgbmV3IEVycm9yKHMuZXJyb3IpfSl9YXN5bmMgZ2V0RXZlbnRzT2ZMYXRlc3RCbG9jayhlPXt9KXtpZighdGhpcy50cm9uV2ViLmV2ZW50U2VydmVyKXRocm93IG5ldyBFcnJvcigiTm8gZXZlbnQgc2VydmVyIGNvbmZpZ3VyZWQiKTtjb25zdCB0PXt9O3JldHVybiB0eXBlb2YgZS5vbmx5X2NvbmZpcm1lZD09ImJvb2xlYW4iJiYodC5vbmx5X2NvbmZpcm1lZD1lLm9ubHlfY29uZmlybWVkKSx0aGlzLnRyb25XZWIuZXZlbnRTZXJ2ZXIucmVxdWVzdChgdjEvYmxvY2tzL2xhdGVzdC9ldmVudHM/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKHQpLnRvU3RyaW5nKCl9YCkudGhlbihhPT57aWYoYS5zdWNjZXNzKXJldHVybiBhO3Rocm93IG5ldyBFcnJvcihhLmVycm9yKX0pfX1jb25zdCBWaD0iNC43LjEiLGE2PTE1ZTcsaTY9IjYuNC4wIjtmdW5jdGlvbiBHaChuKXtyZXR1cm4hIW4mJnR5cGVvZiBuPT0ib2JqZWN0IiYmKCEhbi5mdWxsTm9kZXx8ISFuLmZ1bGxIb3N0KX1jb25zdCBaZT1jbGFzcyBaZSBleHRlbmRzIFV4e2NvbnN0cnVjdG9yKHQsYT0iIixzLHI9IiIpe3N1cGVyKCk7Wih0aGlzLCJwcm92aWRlcnMiKTtaKHRoaXMsIkJpZ051bWJlciIpO1oodGhpcywidHJhbnNhY3Rpb25CdWlsZGVyIik7Wih0aGlzLCJ0cngiKTtaKHRoaXMsInBsdWdpbiIpO1oodGhpcywiZXZlbnQiKTtaKHRoaXMsInZlcnNpb24iKTtaKHRoaXMsInV0aWxzIik7Wih0aGlzLCJkZWZhdWx0QmxvY2siKTtaKHRoaXMsImRlZmF1bHRQcml2YXRlS2V5Iik7Wih0aGlzLCJkZWZhdWx0QWRkcmVzcyIpO1oodGhpcywiZnVsbG5vZGVWZXJzaW9uIik7Wih0aGlzLCJmZWVMaW1pdCIpO1oodGhpcywiZnVsbE5vZGUiKTtaKHRoaXMsInNvbGlkaXR5Tm9kZSIpO1oodGhpcywiZXZlbnRTZXJ2ZXIiKTtaKHRoaXMsImFkZHJlc3MiKTtaKHRoaXMsInNoYTMiKTtaKHRoaXMsInRvSGV4Iik7Wih0aGlzLCJ0b1V0ZjgiKTtaKHRoaXMsImZyb21VdGY4Iik7Wih0aGlzLCJ0b0FzY2lpIik7Wih0aGlzLCJmcm9tQXNjaWkiKTtaKHRoaXMsInRvRGVjaW1hbCIpO1oodGhpcywiZnJvbURlY2ltYWwiKTtaKHRoaXMsImZyb21TdW4iKTtaKHRoaXMsInRvU3VuIik7Wih0aGlzLCJ0b0JpZ051bWJlciIpO1oodGhpcywiaXNBZGRyZXNzIik7Wih0aGlzLCJjcmVhdGVBY2NvdW50Iik7Wih0aGlzLCJjcmVhdGVSYW5kb20iKTtaKHRoaXMsImZyb21NbmVtb25pYyIpO2xldCBvLGk9ITEsYz0hMTtHaCh0KT8obz10LmZ1bGxOb2RlfHx0LmZ1bGxIb3N0LGE9dC5zb2xpZGl0eU5vZGV8fHQuZnVsbEhvc3Qscz10LmV2ZW50U2VydmVyfHx0LmZ1bGxIb3N0LGk9dC5oZWFkZXJzfHwhMSxjPXQuZXZlbnRIZWFkZXJzfHxpLHI9dC5wcml2YXRlS2V5KTpvPXQsYmUuaXNTdHJpbmcobykmJihvPW5ldyBwci5IdHRwUHJvdmlkZXIobykpLGJlLmlzU3RyaW5nKGEpJiYoYT1uZXcgcHIuSHR0cFByb3ZpZGVyKGEpKSxiZS5pc1N0cmluZyhzKSYmKHM9bmV3IHByLkh0dHBQcm92aWRlcihzKSksdGhpcy5ldmVudD1uZXcgczYodGhpcyksdGhpcy50cmFuc2FjdGlvbkJ1aWxkZXI9bmV3IFVCKHRoaXMpLHRoaXMudHJ4PW5ldyBvbih0aGlzKSx0aGlzLnBsdWdpbj1uZXcgbzYodGhpcyx7ZGlzYWJsZVBsdWdpbnM6R2godCk/dC5kaXNhYmxlUGx1Z2luczohMX0pLHRoaXMudXRpbHM9YmUsdGhpcy5zZXRGdWxsTm9kZShvKSx0aGlzLnNldFNvbGlkaXR5Tm9kZShhKSx0aGlzLnNldEV2ZW50U2VydmVyKHMpLHRoaXMucHJvdmlkZXJzPXByLHRoaXMuQmlnTnVtYmVyPWVjLHRoaXMuZGVmYXVsdEJsb2NrPSExLHRoaXMuZGVmYXVsdFByaXZhdGVLZXk9ITEsdGhpcy5kZWZhdWx0QWRkcmVzcz17aGV4OiExLGJhc2U1ODohMX0sdGhpcy52ZXJzaW9uPVplLnZlcnNpb24sdGhpcy5zaGEzPVplLnNoYTMsdGhpcy5mcm9tVXRmOD1aZS5mcm9tVXRmOCx0aGlzLmFkZHJlc3M9WmUuYWRkcmVzcyx0aGlzLnRvQXNjaWk9WmUudG9Bc2NpaSx0aGlzLnRvVXRmOD1aZS50b1V0ZjgsdGhpcy5pc0FkZHJlc3M9WmUuaXNBZGRyZXNzLHRoaXMuZnJvbUFzY2lpPVplLmZyb21Bc2NpaSx0aGlzLnRvSGV4PVplLnRvSGV4LHRoaXMudG9CaWdOdW1iZXI9WmUudG9CaWdOdW1iZXIsdGhpcy50b0RlY2ltYWw9WmUudG9EZWNpbWFsLHRoaXMuZnJvbURlY2ltYWw9WmUuZnJvbURlY2ltYWwsdGhpcy50b1N1bj1aZS50b1N1bix0aGlzLmZyb21TdW49WmUuZnJvbVN1bix0aGlzLmNyZWF0ZUFjY291bnQ9WmUuY3JlYXRlQWNjb3VudCx0aGlzLmNyZWF0ZVJhbmRvbT1aZS5jcmVhdGVSYW5kb20sdGhpcy5mcm9tTW5lbW9uaWM9WmUuZnJvbU1uZW1vbmljLHImJnRoaXMuc2V0UHJpdmF0ZUtleShyKSx0aGlzLmZ1bGxub2RlVmVyc2lvbj1WaCx0aGlzLmZlZUxpbWl0PWE2LGkmJnRoaXMuc2V0RnVsbE5vZGVIZWFkZXIoaSksYyYmdGhpcy5zZXRFdmVudEhlYWRlcihjKX1hc3luYyBnZXRGdWxsbm9kZVZlcnNpb24oKXt0cnl7Y29uc3QgdD1hd2FpdCB0aGlzLnRyeC5nZXROb2RlSW5mbygpO3RoaXMuZnVsbG5vZGVWZXJzaW9uPXQuY29uZmlnTm9kZUluZm8uY29kZVZlcnNpb24sdGhpcy5mdWxsbm9kZVZlcnNpb24uc3BsaXQoIi4iKS5sZW5ndGg9PT0yJiYodGhpcy5mdWxsbm9kZVZlcnNpb24rPSIuMCIpfWNhdGNoe3RoaXMuZnVsbG5vZGVWZXJzaW9uPVZofX1zZXREZWZhdWx0QmxvY2sodD0hMSl7aWYoWyExLCJsYXRlc3QiLCJlYXJsaWVzdCIsMF0uaW5jbHVkZXModCkpcmV0dXJuIHRoaXMuZGVmYXVsdEJsb2NrPXQ7aWYoIWJlLmlzSW50ZWdlcih0KXx8IXQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGJsb2NrIElEIHByb3ZpZGVkIik7cmV0dXJuIHRoaXMuZGVmYXVsdEJsb2NrPU1hdGguYWJzKHQpfXNldFByaXZhdGVLZXkodCl7dHJ5e3RoaXMuc2V0QWRkcmVzcyhaZS5hZGRyZXNzLmZyb21Qcml2YXRlS2V5KHQpKX1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcHJpdmF0ZSBrZXkgcHJvdmlkZWQiKX10aGlzLmRlZmF1bHRQcml2YXRlS2V5PXQucmVwbGFjZSgvXjB4LywiIil9c2V0QWRkcmVzcyh0KXtpZighWmUuaXNBZGRyZXNzKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhZGRyZXNzIHByb3ZpZGVkIik7Y29uc3QgYT1aZS5hZGRyZXNzLnRvSGV4KHQpLHM9WmUuYWRkcmVzcy5mcm9tSGV4KHQpO3RoaXMuZGVmYXVsdFByaXZhdGVLZXkmJlplLmFkZHJlc3MuZnJvbVByaXZhdGVLZXkodGhpcy5kZWZhdWx0UHJpdmF0ZUtleSkhPT1zJiYodGhpcy5kZWZhdWx0UHJpdmF0ZUtleT0hMSksdGhpcy5kZWZhdWx0QWRkcmVzcz17aGV4OmEsYmFzZTU4OnN9LHRoaXMuZW1pdCgiYWRkcmVzc0NoYW5nZWQiLHtoZXg6YSxiYXNlNTg6c30pfWZ1bGxub2RlU2F0aXNmaWVzKHQpe3JldHVybiB3eC5zYXRpc2ZpZXModGhpcy5mdWxsbm9kZVZlcnNpb24sdCl9aXNWYWxpZFByb3ZpZGVyKHQpe3JldHVybiBPYmplY3QudmFsdWVzKHByKS5zb21lKGE9PnQgaW5zdGFuY2VvZiBhKX1zZXRGdWxsTm9kZSh0KXtpZihqdCh0KSYmKHQ9bmV3IHByLkh0dHBQcm92aWRlcih0KSksIXRoaXMuaXNWYWxpZFByb3ZpZGVyKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBmdWxsIG5vZGUgcHJvdmlkZWQiKTt0aGlzLmZ1bGxOb2RlPXQsdGhpcy5mdWxsTm9kZS5zZXRTdGF0dXNQYWdlKCJ3YWxsZXQvZ2V0bm93YmxvY2siKX1zZXRTb2xpZGl0eU5vZGUodCl7aWYoYmUuaXNTdHJpbmcodCkmJih0PW5ldyBwci5IdHRwUHJvdmlkZXIodCkpLCF0aGlzLmlzVmFsaWRQcm92aWRlcih0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc29saWRpdHkgbm9kZSBwcm92aWRlZCIpO3RoaXMuc29saWRpdHlOb2RlPXQsdGhpcy5zb2xpZGl0eU5vZGUuc2V0U3RhdHVzUGFnZSgid2FsbGV0c29saWRpdHkvZ2V0bm93YmxvY2siKX1zZXRFdmVudFNlcnZlcih0LGEpe3RoaXMuZXZlbnQuc2V0U2VydmVyKHQsYSl9c2V0SGVhZGVyKHQ9e30pe2NvbnN0IGE9bmV3IHByLkh0dHBQcm92aWRlcih0aGlzLmZ1bGxOb2RlLmhvc3QsM2U0LCIiLCIiLHQpLHM9bmV3IHByLkh0dHBQcm92aWRlcih0aGlzLnNvbGlkaXR5Tm9kZS5ob3N0LDNlNCwiIiwiIix0KSxyPW5ldyBwci5IdHRwUHJvdmlkZXIodGhpcy5ldmVudFNlcnZlci5ob3N0LDNlNCwiIiwiIix0KTt0aGlzLnNldEZ1bGxOb2RlKGEpLHRoaXMuc2V0U29saWRpdHlOb2RlKHMpLHRoaXMuc2V0RXZlbnRTZXJ2ZXIocil9c2V0RnVsbE5vZGVIZWFkZXIodD17fSl7Y29uc3QgYT1uZXcgcHIuSHR0cFByb3ZpZGVyKHRoaXMuZnVsbE5vZGUuaG9zdCwzZTQsIiIsIiIsdCkscz1uZXcgcHIuSHR0cFByb3ZpZGVyKHRoaXMuc29saWRpdHlOb2RlLmhvc3QsM2U0LCIiLCIiLHQpO3RoaXMuc2V0RnVsbE5vZGUoYSksdGhpcy5zZXRTb2xpZGl0eU5vZGUocyl9c2V0RXZlbnRIZWFkZXIodD17fSl7Y29uc3QgYT1uZXcgcHIuSHR0cFByb3ZpZGVyKHRoaXMuZXZlbnRTZXJ2ZXIuaG9zdCwzZTQsIiIsIiIsdCk7dGhpcy5zZXRFdmVudFNlcnZlcihhKX1jdXJyZW50UHJvdmlkZXJzKCl7cmV0dXJue2Z1bGxOb2RlOnRoaXMuZnVsbE5vZGUsc29saWRpdHlOb2RlOnRoaXMuc29saWRpdHlOb2RlLGV2ZW50U2VydmVyOnRoaXMuZXZlbnRTZXJ2ZXJ9fWN1cnJlbnRQcm92aWRlcigpe3JldHVybiB0aGlzLmN1cnJlbnRQcm92aWRlcnMoKX1nZXRFdmVudFJlc3VsdCguLi50KXtyZXR1cm4gdGhpcy5ldmVudC5nZXRFdmVudHNCeUNvbnRyYWN0QWRkcmVzcyguLi50KX1nZXRFdmVudEJ5VHJhbnNhY3Rpb25JRCguLi50KXtyZXR1cm4gdGhpcy5ldmVudC5nZXRFdmVudHNCeVRyYW5zYWN0aW9uSUQoLi4udCl9Y29udHJhY3QodD1bXSxhKXtyZXR1cm4gbmV3IHQ2KHRoaXMsdCxhKX1zdGF0aWMgZ2V0IGFkZHJlc3MoKXtyZXR1cm57ZnJvbUhleCh0KXtyZXR1cm4gX2EodCl9LHRvSGV4KHQpe3JldHVybiBhZSh0KX0sdG9DaGVja3N1bUFkZHJlc3ModCl7cmV0dXJuIGUwKHQpfSxpc0NoZWNrc3VtQWRkcmVzcyh0KXtyZXR1cm4gTXkodCl9LGZyb21Qcml2YXRlS2V5KHQsYT0hMSl7cmV0dXJuIEZ5KHQsYSl9fX1zdGF0aWMgc2hhMyh0LGE9ITApe3JldHVybihhPyIweCI6IiIpKyRlKG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0KSkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMil9c3RhdGljIHRvSGV4KHQpe2lmKGJlLmlzQm9vbGVhbih0KSlyZXR1cm4gWmUuZnJvbURlY2ltYWwoK3QpO2lmKGJlLmlzQmlnTnVtYmVyKHQpKXJldHVybiBaZS5mcm9tRGVjaW1hbCh0KTtpZih0eXBlb2YgdD09Im9iamVjdCIpcmV0dXJuIFplLmZyb21VdGY4KEpTT04uc3RyaW5naWZ5KHQpKTtpZihiZS5pc1N0cmluZyh0KSl7aWYoL14oLXwpMHgvLnRlc3QodCkpcmV0dXJuIHQ7aWYoIWlzRmluaXRlKHQpfHwvXlxzKiQvLnRlc3QodCkpcmV0dXJuIFplLmZyb21VdGY4KHQpfWNvbnN0IGE9WmUuZnJvbURlY2ltYWwodCk7aWYoYT09PSIweE5hTiIpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGFzc2VkIHZhbHVlIGlzIG5vdCBjb252ZXJ0aWJsZSB0byBhIGhleCBzdHJpbmciKTtyZXR1cm4gYX1zdGF0aWMgdG9VdGY4KHQpe2lmKGJlLmlzSGV4KHQpKXJldHVybiB0PXQucmVwbGFjZSgvXjB4LywiIiksbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG5ldyBVaW50OEFycmF5KGJlLmNvZGUuaGV4U3RyMmJ5dGVBcnJheSh0KSkpO3Rocm93IG5ldyBFcnJvcigiVGhlIHBhc3NlZCB2YWx1ZSBpcyBub3QgYSB2YWxpZCBoZXggc3RyaW5nIil9c3RhdGljIGZyb21VdGY4KHQpe2lmKCFiZS5pc1N0cmluZyh0KSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBwYXNzZWQgdmFsdWUgaXMgbm90IGEgdmFsaWQgdXRmLTggc3RyaW5nIik7cmV0dXJuIjB4IitiZS5ieXRlcy5ieXRlQXJyYXkyaGV4U3RyKG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0KSkudG9Mb3dlckNhc2UoKX1zdGF0aWMgdG9Bc2NpaSh0KXtpZihiZS5pc0hleCh0KSl7bGV0IGE9IiIscz0wO2NvbnN0IHI9dC5sZW5ndGg7Zm9yKHQuc3Vic3RyaW5nKDAsMik9PT0iMHgiJiYocz0yKTtzPHI7cys9Mil7Y29uc3Qgbz1wYXJzZUludCh0LnN1YnN0cihzLDIpLDE2KTthKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG8pfXJldHVybiBhfWVsc2UgdGhyb3cgbmV3IEVycm9yKCJUaGUgcGFzc2VkIHZhbHVlIGlzIG5vdCBhIHZhbGlkIGhleCBzdHJpbmciKX1zdGF0aWMgZnJvbUFzY2lpKHQsYSl7aWYoIWJlLmlzU3RyaW5nKHQpKXRocm93IG5ldyBFcnJvcigiVGhlIHBhc3NlZCB2YWx1ZSBpcyBub3QgYSB2YWxpZCB1dGYtOCBzdHJpbmciKTtjb25zdCBzPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoKTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKylzW3JdPXQuY2hhckNvZGVBdChyKSYyNTU7cmV0dXJuIjB4IitiZS5ieXRlcy5ieXRlQXJyYXkyaGV4U3RyKHMpLnRvTG93ZXJDYXNlKCkucGFkRW5kKGEsIjAiKX1zdGF0aWMgdG9EZWNpbWFsKHQpe3JldHVybiBaZS50b0JpZ051bWJlcih0KS50b051bWJlcigpfXN0YXRpYyBmcm9tRGVjaW1hbCh0KXtjb25zdCBhPVplLnRvQmlnTnVtYmVyKHQpLHM9YS50b1N0cmluZygxNik7cmV0dXJuIGEuaXNMZXNzVGhhbigwKT8iLTB4IitzLnN1YnN0cigxKToiMHgiK3N9c3RhdGljIGZyb21TdW4odCl7Y29uc3QgYT1aZS50b0JpZ051bWJlcih0KS5kaXYoMWU2KTtyZXR1cm4gYmUuaXNCaWdOdW1iZXIodCk/YTphLnRvU3RyaW5nKDEwKX1zdGF0aWMgdG9TdW4odCl7Y29uc3QgYT1aZS50b0JpZ051bWJlcih0KS50aW1lcygxZTYpO3JldHVybiBiZS5pc0JpZ051bWJlcih0KT9hOmEudG9TdHJpbmcoMTApfXN0YXRpYyB0b0JpZ051bWJlcih0PTApe3JldHVybiBiZS5pc0JpZ051bWJlcih0KT90OmJlLmlzU3RyaW5nKHQpJiYvXigtfCkweC8udGVzdCh0KT9uZXcgZWModC5yZXBsYWNlKCIweCIsIiIpLDE2KTpuZXcgZWModC50b1N0cmluZygxMCksMTApfXN0YXRpYyBpc0FkZHJlc3ModD0iIil7cmV0dXJuIHRhKHQpfXN0YXRpYyBhc3luYyBjcmVhdGVBY2NvdW50KCl7cmV0dXJuIGJlLmFjY291bnRzLmdlbmVyYXRlQWNjb3VudCgpfXN0YXRpYyBjcmVhdGVSYW5kb20oLi4udCl7cmV0dXJuIGJlLmFjY291bnRzLmdlbmVyYXRlUmFuZG9tKC4uLnQpfXN0YXRpYyBmcm9tTW5lbW9uaWMoLi4udCl7cmV0dXJuIGJlLmFjY291bnRzLmdlbmVyYXRlQWNjb3VudFdpdGhNbmVtb25pYyguLi50KX1hc3luYyBpc0Nvbm5lY3RlZCgpe3JldHVybntmdWxsTm9kZTphd2FpdCB0aGlzLmZ1bGxOb2RlLmlzQ29ubmVjdGVkKCksc29saWRpdHlOb2RlOmF3YWl0IHRoaXMuc29saWRpdHlOb2RlLmlzQ29ubmVjdGVkKCksZXZlbnRTZXJ2ZXI6dGhpcy5ldmVudFNlcnZlciYmYXdhaXQgdGhpcy5ldmVudFNlcnZlci5pc0Nvbm5lY3RlZCgpfX19O1ooWmUsInZlcnNpb24iLGk2KTtsZXQgbnQ9WmU7Y29uc3R7VHJhbnNhY3Rpb246amUsUGVybWlzc2lvbjpjNixLZXk6dTZ9PWdsb2JhbFRoaXMuVHJvbldlYlByb3RvLHtUcmFuc2ZlckNvbnRyYWN0Omw2LEZyZWV6ZUJhbGFuY2VDb250cmFjdDpmNixVbmZyZWV6ZUJhbGFuY2VDb250cmFjdDpkNixXaXRoZHJhd0JhbGFuY2VDb250cmFjdDpwNixGcmVlemVCYWxhbmNlVjJDb250cmFjdDpoNixVbmZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0Omc2LENhbmNlbEFsbFVuZnJlZXplVjJDb250cmFjdDpiNixXaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3Q6eTYsRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0Ong2LFVuRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0OlQ2fT1nbG9iYWxUaGlzLlRyb25XZWJQcm90byx7VHJhbnNmZXJBc3NldENvbnRyYWN0OkE2LFBhcnRpY2lwYXRlQXNzZXRJc3N1ZUNvbnRyYWN0Om02LEFzc2V0SXNzdWVDb250cmFjdDpIaCxVcGRhdGVBc3NldENvbnRyYWN0OlA2fT1nbG9iYWxUaGlzLlRyb25XZWJQcm90byx7VHJpZ2dlclNtYXJ0Q29udHJhY3Q6dzYsQ2xlYXJBQklDb250cmFjdDp2NixVcGRhdGVFbmVyZ3lMaW1pdENvbnRyYWN0OkM2LFVwZGF0ZVNldHRpbmdDb250cmFjdDpFNixDcmVhdGVTbWFydENvbnRyYWN0Olc2LFNtYXJ0Q29udHJhY3Q6ZXN9PWdsb2JhbFRoaXMuVHJvbldlYlByb3RvLHtSZXNvdXJjZUNvZGU6c2F9PWdsb2JhbFRoaXMuVHJvbldlYlByb3RvLHtXaXRuZXNzQ3JlYXRlQ29udHJhY3Q6QjYsV2l0bmVzc1VwZGF0ZUNvbnRyYWN0Okk2LFZvdGVXaXRuZXNzQ29udHJhY3Q6S2h9PWdsb2JhbFRoaXMuVHJvbldlYlByb3RvLHtVcGRhdGVCcm9rZXJhZ2VDb250cmFjdDpTNn09Z2xvYmFsVGhpcy5Ucm9uV2ViUHJvdG8se0FjY291bnRDcmVhdGVDb250cmFjdDpfNixBY2NvdW50VXBkYXRlQ29udHJhY3Q6TzYsU2V0QWNjb3VudElkQ29udHJhY3Q6UjYsQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdDpNNn09Z2xvYmFsVGhpcy5Ucm9uV2ViUHJvdG8se1Byb3Bvc2FsQ3JlYXRlQ29udHJhY3Q6RjYsUHJvcG9zYWxEZWxldGVDb250cmFjdDpONixQcm9wb3NhbEFwcHJvdmVDb250cmFjdDprNn09Z2xvYmFsVGhpcy5Ucm9uV2ViUHJvdG8se0V4Y2hhbmdlQ3JlYXRlQ29udHJhY3Q6VTYsRXhjaGFuZ2VJbmplY3RDb250cmFjdDpENixFeGNoYW5nZVdpdGhkcmF3Q29udHJhY3Q6JDYsRXhjaGFuZ2VUcmFuc2FjdGlvbkNvbnRyYWN0Okw2fT1nbG9iYWxUaGlzLlRyb25XZWJQcm90byxPZT1uPT4hbnx8bi5sZW5ndGg9PT0wP25ldyBVaW50OEFycmF5KFtdKTpuZXcgVWludDhBcnJheShudC5hZGRyZXNzLnRvSGV4KG4pLm1hdGNoKC8uezEsMn0vZykubWFwKGU9PnBhcnNlSW50KGUsMTYpKSksZHQ9bj0+IW58fG4ubGVuZ3RoPT09MD9uZXcgVWludDhBcnJheShbXSk6bmV3IFVpbnQ4QXJyYXkoKG9vKG4pP246bnQudG9IZXgobikpLnJlcGxhY2UoL14weC8sIiIpLm1hdGNoKC8uezEsMn0vZykubWFwKGU9PnBhcnNlSW50KGUsMTYpKSksJG89KG4sZSk9PmR0KGU/bnQuZnJvbVV0ZjgobikucmVwbGFjZSgvXjB4LywiIik6bi5yZXBsYWNlKC9eMHgvLCIiKSksejY9KG4sZT0hMCk9PihlPyIweCI6IiIpKyRlKG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShuKSkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMikscWU9KG4sZSx0LGEpPT57Y29uc3Qgcz1uZXcgTnYuQW55O3MucGFjayhuLnNlcmlhbGl6ZUJpbmFyeSgpLCJwcm90b2NvbC4iK3QpO2NvbnN0IHI9bmV3IGplLkNvbnRyYWN0O3Iuc2V0VHlwZShlKSxyLnNldFBhcmFtZXRlcihzKSxhJiZyLnNldFBlcm1pc3Npb25JZChhKTtjb25zdCBvPW5ldyBqZS5yYXc7by5hZGRDb250cmFjdChyKTtjb25zdCBpPW5ldyBqZTtyZXR1cm4gaS5zZXRSYXdEYXRhKG8pLGl9LGo2PShuLGUpPT57Y29uc3R7dG9fYWRkcmVzczp0LG93bmVyX2FkZHJlc3M6YSxhbW91bnQ6c309bixyPW5ldyBsNjtyZXR1cm4gci5zZXRUb0FkZHJlc3MoT2UodCkpLHIuc2V0T3duZXJBZGRyZXNzKE9lKGEpKSxyLnNldEFtb3VudChzKSxxZShyLGplLkNvbnRyYWN0LkNvbnRyYWN0VHlwZS5UUkFOU0ZFUkNPTlRSQUNULCJUcmFuc2ZlckNvbnRyYWN0IixlLlBlcm1pc3Npb25faWQpfSxWNj0obixlKT0+e2NvbnN0e3RvX2FkZHJlc3M6dCxvd25lcl9hZGRyZXNzOmEsYW1vdW50OnMsYXNzZXRfbmFtZTpyfT1uLG89bmV3IEE2O3JldHVybiBvLnNldFRvQWRkcmVzcyhPZSh0KSksby5zZXRPd25lckFkZHJlc3MoT2UoYSkpLG8uc2V0QXNzZXROYW1lKCRvKHIsZS52aXNpYmxlKSksby5zZXRBbW91bnQocykscWUobyxqZS5Db250cmFjdC5Db250cmFjdFR5cGUuVFJBTlNGRVJBU1NFVENPTlRSQUNULCJUcmFuc2ZlckFzc2V0Q29udHJhY3QiLGUuUGVybWlzc2lvbl9pZCl9LEc2PShuLGUpPT57Y29uc3QgdD1uZXcgbTY7cmV0dXJuIHQuc2V0VG9BZGRyZXNzKE9lKG4udG9fYWRkcmVzcykpLHQuc2V0T3duZXJBZGRyZXNzKE9lKG4ub3duZXJfYWRkcmVzcykpLHQuc2V0QXNzZXROYW1lKCRvKG4uYXNzZXRfbmFtZSxlLnZpc2libGUpKSx0LnNldEFtb3VudChuLmFtb3VudCkscWUodCxqZS5Db250cmFjdC5Db250cmFjdFR5cGUuUEFSVElDSVBBVEVBU1NFVElTU1VFQ09OVFJBQ1QsIlBhcnRpY2lwYXRlQXNzZXRJc3N1ZUNvbnRyYWN0IixlLlBlcm1pc3Npb25faWQpfSxINj0obixlKT0+e2NvbnN0IHQ9bmV3IHc2LHtvd25lcl9hZGRyZXNzOmEsY29udHJhY3RfYWRkcmVzczpzLHBhcmFtZXRlcjpyPSIiLGZ1bmN0aW9uX3NlbGVjdG9yOm8sY2FsbF92YWx1ZTppLGNhbGxfdG9rZW5fdmFsdWU6Yyx0b2tlbl9pZDpmLGRhdGE6ZH09bjtpZih0LnNldE93bmVyQWRkcmVzcyhPZShhKSksdC5zZXRDb250cmFjdEFkZHJlc3MoT2UocykpLHQuc2V0Q2FsbFZhbHVlKGkpLGQpdC5zZXREYXRhKGR0KGQpKTtlbHNlIGlmKG8pe2NvbnN0IHA9ejYobykuc3Vic3RyaW5nKDIsMTApK3I7dC5zZXREYXRhKGR0KHApKX1yZXR1cm4gZiYmdC5zZXRUb2tlbklkKGYpLGMmJnQuc2V0Q2FsbFRva2VuVmFsdWUoYykscWUodCxqZS5Db250cmFjdC5Db250cmFjdFR5cGUuVFJJR0dFUlNNQVJUQ09OVFJBQ1QsIlRyaWdnZXJTbWFydENvbnRyYWN0IixlLlBlcm1pc3Npb25faWQpfSxLNj0obixlKT0+e2NvbnN0IHQ9bmV3IGY2LHtvd25lcl9hZGRyZXNzOmEsZnJvemVuX2JhbGFuY2U6cyxmcm96ZW5fZHVyYXRpb246cixyZXNvdXJjZTpvLHJlY2VpdmVyX2FkZHJlc3M6aX09bjtyZXR1cm4gdC5zZXRPd25lckFkZHJlc3MoT2UoYSkpLHQuc2V0RnJvemVuQmFsYW5jZShzKSx0LnNldEZyb3plbkR1cmF0aW9uKHIpLG8mJnQuc2V0UmVzb3VyY2Uoc2Fbb10pLGkmJnQuc2V0UmVjZWl2ZXJBZGRyZXNzKE9lKGkpKSxxZSh0LGplLkNvbnRyYWN0LkNvbnRyYWN0VHlwZS5GUkVFWkVCQUxBTkNFQ09OVFJBQ1QsIkZyZWV6ZUJhbGFuY2VDb250cmFjdCIsZS5QZXJtaXNzaW9uX2lkKX0sWjY9KG4sZSk9Pntjb25zdCB0PW5ldyBkNix7b3duZXJfYWRkcmVzczphLHJlc291cmNlOnMscmVjZWl2ZXJfYWRkcmVzczpyfT1uO3JldHVybiB0LnNldE93bmVyQWRkcmVzcyhPZShhKSkscyYmdC5zZXRSZXNvdXJjZShzYVtzXSksciYmdC5zZXRSZWNlaXZlckFkZHJlc3MoT2UocikpLHFlKHQsamUuQ29udHJhY3QuQ29udHJhY3RUeXBlLlVORlJFRVpFQkFMQU5DRUNPTlRSQUNULCJVbmZyZWV6ZUJhbGFuY2VDb250cmFjdCIsZS5QZXJtaXNzaW9uX2lkKX0scTY9KG4sZSk9Pntjb25zdCB0PW5ldyBwNix7b3duZXJfYWRkcmVzczphfT1uO3JldHVybiB0LnNldE93bmVyQWRkcmVzcyhPZShhKSkscWUodCxqZS5Db250cmFjdC5Db250cmFjdFR5cGUuV0lUSERSQVdCQUxBTkNFQ09OVFJBQ1QsIldpdGhkcmF3QmFsYW5jZUNvbnRyYWN0IixlLlBlcm1pc3Npb25faWQpfSxKNj0obixlKT0+e2NvbnN0IHQ9bmV3IGg2LHtvd25lcl9hZGRyZXNzOmEsZnJvemVuX2JhbGFuY2U6cyxyZXNvdXJjZTpyfT1uO3JldHVybiB0LnNldE93bmVyQWRkcmVzcyhPZShhKSksdC5zZXRGcm96ZW5CYWxhbmNlKHMpLHQuc2V0UmVzb3VyY2Uoc2Fbcl0pLHFlKHQsamUuQ29udHJhY3QuQ29udHJhY3RUeXBlLkZSRUVaRUJBTEFOQ0VWMkNPTlRSQUNULCJGcmVlemVCYWxhbmNlVjJDb250cmFjdCIsZS5QZXJtaXNzaW9uX2lkKX0sWTY9KG4sZSk9Pntjb25zdCB0PW5ldyBiNix7b3duZXJfYWRkcmVzczphfT1uO3JldHVybiB0LnNldE93bmVyQWRkcmVzcyhPZShhKSkscWUodCxqZS5Db250cmFjdC5Db250cmFjdFR5cGUuQ0FOQ0VMQUxMVU5GUkVFWkVWMkNPTlRSQUNULCJDYW5jZWxBbGxVbmZyZWV6ZVYyQ29udHJhY3QiLGUuUGVybWlzc2lvbl9pZCl9LFg2PShuLGUpPT57Y29uc3QgdD1uZXcgZzYse293bmVyX2FkZHJlc3M6YSx1bmZyZWV6ZV9iYWxhbmNlOnMscmVzb3VyY2U6cn09bjtyZXR1cm4gdC5zZXRPd25lckFkZHJlc3MoT2UoYSkpLHQuc2V0VW5mcmVlemVCYWxhbmNlKHMpLHQuc2V0UmVzb3VyY2Uoc2Fbcl0pLHFlKHQsamUuQ29udHJhY3QuQ29udHJhY3RUeXBlLlVORlJFRVpFQkFMQU5DRVYyQ09OVFJBQ1QsIlVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QiLGUuUGVybWlzc2lvbl9pZCl9LFE2PShuLGUpPT57Y29uc3QgdD1uZXcgeDYse293bmVyX2FkZHJlc3M6YSxyZWNlaXZlcl9hZGRyZXNzOnMsYmFsYW5jZTpyLHJlc291cmNlOm8sbG9jazppPSExLGxvY2tfcGVyaW9kOmN9PW47cmV0dXJuIHQuc2V0T3duZXJBZGRyZXNzKE9lKGEpKSx0LnNldEJhbGFuY2UociksdC5zZXRSZXNvdXJjZShzYVtvXSksdC5zZXRMb2NrKGkpLHQuc2V0TG9ja1BlcmlvZChjKSx0LnNldFJlY2VpdmVyQWRkcmVzcyhPZShzKSkscWUodCxqZS5Db250cmFjdC5Db250cmFjdFR5cGUuREVMRUdBVEVSRVNPVVJDRUNPTlRSQUNULCJEZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QiLGUuUGVybWlzc2lvbl9pZCl9LGUzPShuLGUpPT57Y29uc3QgdD1uZXcgVDYse293bmVyX2FkZHJlc3M6YSxyZWNlaXZlcl9hZGRyZXNzOnMsYmFsYW5jZTpyLHJlc291cmNlOm99PW47cmV0dXJuIHQuc2V0T3duZXJBZGRyZXNzKE9lKGEpKSx0LnNldEJhbGFuY2UociksdC5zZXRSZXNvdXJjZShzYVtvXSksdC5zZXRSZWNlaXZlckFkZHJlc3MoT2UocykpLHFlKHQsamUuQ29udHJhY3QuQ29udHJhY3RUeXBlLlVOREVMRUdBVEVSRVNPVVJDRUNPTlRSQUNULCJVbkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdCIsZS5QZXJtaXNzaW9uX2lkKX0sdDM9KG4sZSk9Pntjb25zdCB0PW5ldyB5Nix7b3duZXJfYWRkcmVzczphfT1uO3JldHVybiB0LnNldE93bmVyQWRkcmVzcyhPZShhKSkscWUodCxqZS5Db250cmFjdC5Db250cmFjdFR5cGUuV0lUSERSQVdFWFBJUkVVTkZSRUVaRUNPTlRSQUNULCJXaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3QiLGUuUGVybWlzc2lvbl9pZCl9LHIzPShuLGUpPT57Y29uc3QgdD1uZXcgQjYse293bmVyX2FkZHJlc3M6YSx1cmw6c309bjtyZXR1cm4gdC5zZXRPd25lckFkZHJlc3MoT2UoYSkpLHQuc2V0VXJsKGR0KHMucmVwbGFjZSgvXjB4LywiIikpKSxxZSh0LGplLkNvbnRyYWN0LkNvbnRyYWN0VHlwZS5XSVRORVNTQ1JFQVRFQ09OVFJBQ1QsIldpdG5lc3NDcmVhdGVDb250cmFjdCIsZS5QZXJtaXNzaW9uX2lkKX0sbjM9KG4sZSk9Pntjb25zdCB0PW5ldyBJNix7b3duZXJfYWRkcmVzczphLHVwZGF0ZV91cmw6c309bjtyZXR1cm4gdC5zZXRPd25lckFkZHJlc3MoT2UoYSkpLHQuc2V0VXBkYXRlVXJsKGR0KHMucmVwbGFjZSgvXjB4LywiIikpKSxxZSh0LGplLkNvbnRyYWN0LkNvbnRyYWN0VHlwZS5XSVRORVNTVVBEQVRFQ09OVFJBQ1QsIldpdG5lc3NVcGRhdGVDb250cmFjdCIsZS5QZXJtaXNzaW9uX2lkKX0sbzM9KG4sZSk9Pntjb25zdCB0PW5ldyBLaCx7b3duZXJfYWRkcmVzczphLHZvdGVzOnN9PW47cmV0dXJuIHQuc2V0T3duZXJBZGRyZXNzKE9lKGEpKSxzLmZvckVhY2gocj0+e2NvbnN0IG89bmV3IEtoLlZvdGUse3ZvdGVfYWRkcmVzczppLHZvdGVfY291bnQ6Y309cjtvLnNldFZvdGVBZGRyZXNzKE9lKGkpKTtjb25zdCBmPXBhcnNlSW50KGMpO28uc2V0Vm90ZUNvdW50KGYpLHQuYWRkVm90ZXMobyl9KSxxZSh0LGplLkNvbnRyYWN0LkNvbnRyYWN0VHlwZS5WT1RFV0lUTkVTU0NPTlRSQUNULCJWb3RlV2l0bmVzc0NvbnRyYWN0IixlLlBlcm1pc3Npb25faWQpfSxzMz0obixlKT0+e2NvbnN0IHQ9bj8ubmV3X2NvbnRyYWN0P3tvd25lcl9hZGRyZXNzOm4ub3duZXJfYWRkcmVzcyxjYWxsX3Rva2VuX3ZhbHVlOm4uY2FsbF90b2tlbl92YWx1ZSx0b2tlbl9pZDpuLnRva2VuX2lkLC4uLm4ubmV3X2NvbnRyYWN0fTpuLHtvd25lcl9hZGRyZXNzOmEsY29uc3VtZV91c2VyX3Jlc291cmNlX3BlcmNlbnQ6cyxvcmlnaW5fZW5lcmd5X2xpbWl0OnIsYWJpOm8sYnl0ZWNvZGU6aT0iIixwYXJhbWV0ZXI6Yz0iIixjYWxsX3ZhbHVlOmYsY2FsbF90b2tlbl92YWx1ZTpkLHRva2VuX2lkOnAsbmFtZTpifT10O2xldHtvcmlnaW5fYWRkcmVzczpUfT10O2NvbnN0IFc9bmV3IFc2O1cuc2V0T3duZXJBZGRyZXNzKE9lKGEpKSxwJiZXLnNldFRva2VuSWQocCksZCYmVy5zZXRDYWxsVG9rZW5WYWx1ZShkKTtjb25zdCBnPW5ldyBlcztpZihvKXtsZXQgQTt0eXBlb2Ygbz09InN0cmluZyI/QT1KU09OLnBhcnNlKG8pOkE9bz8uZW50cnlzfHxbXTtjb25zdCBtPW5ldyBlcy5BQkksdz1rPT57Y29uc3QgVj1uZXcgZXMuQUJJLkVudHJ5LlBhcmFtLHtpbmRleGVkOkwsbmFtZTpJLHR5cGU6eX09aztyZXR1cm4gTD09PSEwJiZWLnNldEluZGV4ZWQoITApLFYuc2V0TmFtZShJKSxWLnNldFR5cGUoeSksVn0sQj1BLm1hcChrPT57Y29uc3R7YW5vbnltb3VzOlYsY29uc3RhbnQ6TCxuYW1lOkksaW5wdXRzOnksb3V0cHV0czpFLHR5cGU6QyxwYXlhYmxlOkYsc3RhdGVNdXRhYmlsaXR5OiR9PWssTz1uZXcgZXMuQUJJLkVudHJ5O3JldHVybiBPLnNldEFub255bW91cyhWKSxPLnNldENvbnN0YW50KEwpLE8uc2V0TmFtZShJKSx5JiZPLnNldElucHV0c0xpc3QoeS5tYXAoUj0+dyhSKSkpLEUmJk8uc2V0T3V0cHV0c0xpc3QoRS5tYXAoUj0+dyhSKSkpLEMmJk8uc2V0VHlwZShlcy5BQkkuRW50cnkuRW50cnlUeXBlW0MudG9VcHBlckNhc2UoKV0pLE8uc2V0UGF5YWJsZShGKSwkJiZPLnNldFN0YXRlbXV0YWJpbGl0eShlcy5BQkkuRW50cnkuU3RhdGVNdXRhYmlsaXR5VHlwZVskLnRvVXBwZXJDYXNlKCldKSxPfSk7bS5zZXRFbnRyeXNMaXN0KEIpLGcuc2V0QWJpKG0pfWlmKGYmJmcuc2V0Q2FsbFZhbHVlKGYpLGcuc2V0Q29uc3VtZVVzZXJSZXNvdXJjZVBlcmNlbnQocyksZy5zZXRPcmlnaW5FbmVyZ3lMaW1pdChyKSxUfHwoVD1hKSxnLnNldE9yaWdpbkFkZHJlc3MoT2UoVCkpLGkpe2NvbnN0IEE9aS5yZXBsYWNlKC9eMHgvLCIiKStjLnJlcGxhY2UoL14weC8sIiIpO2cuc2V0Qnl0ZWNvZGUoZHQoQSkpfXJldHVybiBnLnNldE5hbWUoYiksVy5zZXROZXdDb250cmFjdChnKSxxZShXLGplLkNvbnRyYWN0LkNvbnRyYWN0VHlwZS5DUkVBVEVTTUFSVENPTlRSQUNULCJDcmVhdGVTbWFydENvbnRyYWN0IixlLlBlcm1pc3Npb25faWQpfSxhMz0obixlKT0+e2NvbnN0e2NvbnRyYWN0X2FkZHJlc3M6dCxvd25lcl9hZGRyZXNzOmF9PW4scz1uZXcgdjY7cmV0dXJuIHMuc2V0T3duZXJBZGRyZXNzKE9lKGEpKSxzLnNldENvbnRyYWN0QWRkcmVzcyhPZSh0KSkscWUocyxqZS5Db250cmFjdC5Db250cmFjdFR5cGUuQ0xFQVJBQklDT05UUkFDVCwiQ2xlYXJBQklDb250cmFjdCIsZS5QZXJtaXNzaW9uX2lkKX0saTM9KG4sZSk9Pntjb25zdHticm9rZXJhZ2U6dCxvd25lcl9hZGRyZXNzOmF9PW4scz1uZXcgUzY7cmV0dXJuIHMuc2V0T3duZXJBZGRyZXNzKE9lKGEpKSxzLnNldEJyb2tlcmFnZSh0KSxxZShzLGplLkNvbnRyYWN0LkNvbnRyYWN0VHlwZS5VUERBVEVCUk9LRVJBR0VDT05UUkFDVCwiVXBkYXRlQnJva2VyYWdlQ29udHJhY3QiLGUuUGVybWlzc2lvbl9pZCl9LGMzPShuLGUpPT57Y29uc3R7b3duZXJfYWRkcmVzczp0LG5hbWU6YSxhYmJyOnMsZGVzY3JpcHRpb246cix1cmw6byx0b3RhbF9zdXBwbHk6aSx0cnhfbnVtOmMsbnVtOmYsc3RhcnRfdGltZTpkLGVuZF90aW1lOnAscHJlY2lzaW9uOmIsZnJlZV9hc3NldF9uZXRfbGltaXQ6VCxwdWJsaWNfZnJlZV9hc3NldF9uZXRfbGltaXQ6VyxwdWJsaWNfZnJlZV9hc3NldF9uZXRfdXNhZ2U6Zz0wLHB1YmxpY19sYXRlc3RfZnJlZV9uZXRfdGltZTpBPTAsdm90ZV9zY29yZTptPTAsZnJvemVuX3N1cHBseTp3fT1uLEI9bmV3IEhoO2lmKEIuc2V0T3duZXJBZGRyZXNzKE9lKHQpKSxhJiZCLnNldE5hbWUoZHQoYS5yZXBsYWNlKC9eMHgvLCIiKSkpLHMmJkIuc2V0QWJicihkdChzLnJlcGxhY2UoL14weC8sIiIpKSksQi5zZXRUb3RhbFN1cHBseShpKSxCLnNldE51bShmKSxCLnNldEVuZFRpbWUocCksQi5zZXRTdGFydFRpbWUoZCksQi5zZXRUcnhOdW0oYyksQi5zZXRWb3RlU2NvcmUobSksYiYmQi5zZXRQcmVjaXNpb24oYiksQSYmQi5zZXRQdWJsaWNMYXRlc3RGcmVlTmV0VGltZShBKSxyJiZCLnNldERlc2NyaXB0aW9uKGR0KHIucmVwbGFjZSgvXjB4LywiIikpKSxvJiZCLnNldFVybChkdChvLnJlcGxhY2UoL14weC8sIiIpKSksQi5zZXRQdWJsaWNGcmVlQXNzZXROZXRVc2FnZShnKSxCLnNldEZyZWVBc3NldE5ldExpbWl0KFQpLEIuc2V0UHVibGljRnJlZUFzc2V0TmV0TGltaXQoVyksdyl7Y29uc3Qgaz1uZXcgSGguRnJvemVuU3VwcGx5O2suc2V0RnJvemVuQW1vdW50KHcubGVuZ3RoP3dbMF0uZnJvemVuX2Ftb3VudDp3LmZyb3plbl9hbW91bnQpLGsuc2V0RnJvemVuRGF5cyh3Lmxlbmd0aD93WzBdLmZyb3plbl9kYXlzOncuZnJvemVuX2RheXMpLEIuYWRkRnJvemVuU3VwcGx5KGspfXJldHVybiBxZShCLGplLkNvbnRyYWN0LkNvbnRyYWN0VHlwZS5BU1NFVElTU1VFQ09OVFJBQ1QsIkFzc2V0SXNzdWVDb250cmFjdCIsZS5QZXJtaXNzaW9uX2lkKX0sdTM9KG4sZSk9Pntjb25zdCB0PW5ldyBfNix7YWNjb3VudF9hZGRyZXNzOmEsb3duZXJfYWRkcmVzczpzfT1uO3JldHVybiB0LnNldE93bmVyQWRkcmVzcyhPZShzKSksdC5zZXRBY2NvdW50QWRkcmVzcyhPZShhLnJlcGxhY2UoL14weC8sIiIpKSkscWUodCxqZS5Db250cmFjdC5Db250cmFjdFR5cGUuQUNDT1VOVENSRUFURUNPTlRSQUNULCJBY2NvdW50Q3JlYXRlQ29udHJhY3QiLGUuUGVybWlzc2lvbl9pZCl9LGwzPShuLGUpPT57Y29uc3QgdD1uZXcgTzYse2FjY291bnRfbmFtZTphLG93bmVyX2FkZHJlc3M6c309bjtyZXR1cm4gdC5zZXRPd25lckFkZHJlc3MoT2UocykpLHQuc2V0QWNjb3VudE5hbWUoZHQoYS5yZXBsYWNlKC9eMHgvLCIiKSkpLHFlKHQsamUuQ29udHJhY3QuQ29udHJhY3RUeXBlLkFDQ09VTlRVUERBVEVDT05UUkFDVCwiQWNjb3VudFVwZGF0ZUNvbnRyYWN0IixlLlBlcm1pc3Npb25faWQpfSxmMz0obixlKT0+e2NvbnN0IHQ9bmV3IFI2LHthY2NvdW50X2lkOmEsb3duZXJfYWRkcmVzczpzfT1uO3JldHVybiB0LnNldE93bmVyQWRkcmVzcyhPZShzKSksdC5zZXRBY2NvdW50SWQoZHQoYS5yZXBsYWNlKC9eMHgvLCIiKSkpLHFlKHQsamUuQ29udHJhY3QuQ29udHJhY3RUeXBlLlNFVEFDQ09VTlRJRENPTlRSQUNULCJTZXRBY2NvdW50SWRDb250cmFjdCIsZS5QZXJtaXNzaW9uX2lkKX0sZDM9KG4sZSk9Pntjb25zdCB0PW5ldyBGNix7b3duZXJfYWRkcmVzczphLHBhcmFtZXRlcnM6c309bjtyZXR1cm4gdC5zZXRPd25lckFkZHJlc3MoT2UoYSkpLHMuZm9yRWFjaChyPT57dC5nZXRQYXJhbWV0ZXJzTWFwKCkuc2V0KHIua2V5LHIudmFsdWUpfSkscWUodCxqZS5Db250cmFjdC5Db250cmFjdFR5cGUuUFJPUE9TQUxDUkVBVEVDT05UUkFDVCwiUHJvcG9zYWxDcmVhdGVDb250cmFjdCIsZS5QZXJtaXNzaW9uX2lkKX0scDM9KG4sZSk9Pntjb25zdCB0PW5ldyBONix7b3duZXJfYWRkcmVzczphLHByb3Bvc2FsX2lkOnN9PW47cmV0dXJuIHQuc2V0T3duZXJBZGRyZXNzKE9lKGEpKSx0LnNldFByb3Bvc2FsSWQocykscWUodCxqZS5Db250cmFjdC5Db250cmFjdFR5cGUuUFJPUE9TQUxERUxFVEVDT05UUkFDVCwiUHJvcG9zYWxEZWxldGVDb250cmFjdCIsZS5QZXJtaXNzaW9uX2lkKX0saDM9KG4sZSk9Pntjb25zdCB0PW5ldyBrNix7b3duZXJfYWRkcmVzczphLHByb3Bvc2FsX2lkOnMsaXNfYWRkX2FwcHJvdmFsOnJ9PW47cmV0dXJuIHQuc2V0T3duZXJBZGRyZXNzKE9lKGEpKSx0LnNldFByb3Bvc2FsSWQocyksdC5zZXRJc0FkZEFwcHJvdmFsKHIpLHFlKHQsamUuQ29udHJhY3QuQ29udHJhY3RUeXBlLlBST1BPU0FMQVBQUk9WRUNPTlRSQUNULCJQcm9wb3NhbEFwcHJvdmVDb250cmFjdCIsZS5QZXJtaXNzaW9uX2lkKX0sZzM9KG4sZSk9Pntjb25zdCB0PW5ldyBVNix7b3duZXJfYWRkcmVzczphLGZpcnN0X3Rva2VuX2lkOnMsZmlyc3RfdG9rZW5fYmFsYW5jZTpyLHNlY29uZF90b2tlbl9pZDpvLHNlY29uZF90b2tlbl9iYWxhbmNlOml9PW47cmV0dXJuIHQuc2V0T3duZXJBZGRyZXNzKE9lKGEpKSx0LnNldEZpcnN0VG9rZW5JZCgkbyhzLGUudmlzaWJsZSkpLHQuc2V0Rmlyc3RUb2tlbkJhbGFuY2UociksdC5zZXRTZWNvbmRUb2tlbklkKCRvKG8sZS52aXNpYmxlKSksdC5zZXRTZWNvbmRUb2tlbkJhbGFuY2UoaSkscWUodCxqZS5Db250cmFjdC5Db250cmFjdFR5cGUuRVhDSEFOR0VDUkVBVEVDT05UUkFDVCwiRXhjaGFuZ2VDcmVhdGVDb250cmFjdCIsZS5QZXJtaXNzaW9uX2lkKX0sYjM9KG4sZSk9Pntjb25zdCB0PW5ldyBENix7b3duZXJfYWRkcmVzczphLGV4Y2hhbmdlX2lkOnMsdG9rZW5faWQ6cixxdWFudDpvfT1uO3JldHVybiB0LnNldE93bmVyQWRkcmVzcyhPZShhKSksdC5zZXRFeGNoYW5nZUlkKHMpLHQuc2V0VG9rZW5JZCgkbyhyLGUudmlzaWJsZSkpLHQuc2V0UXVhbnQobykscWUodCxqZS5Db250cmFjdC5Db250cmFjdFR5cGUuRVhDSEFOR0VJTkpFQ1RDT05UUkFDVCwiRXhjaGFuZ2VJbmplY3RDb250cmFjdCIsZS5QZXJtaXNzaW9uX2lkKX0seTM9KG4sZSk9Pntjb25zdCB0PW5ldyAkNix7b3duZXJfYWRkcmVzczphLGV4Y2hhbmdlX2lkOnMsdG9rZW5faWQ6cixxdWFudDpvfT1uO3JldHVybiB0LnNldE93bmVyQWRkcmVzcyhPZShhKSksdC5zZXRFeGNoYW5nZUlkKHMpLHQuc2V0VG9rZW5JZCgkbyhyLGUudmlzaWJsZSkpLHQuc2V0UXVhbnQobykscWUodCxqZS5Db250cmFjdC5Db250cmFjdFR5cGUuRVhDSEFOR0VXSVRIRFJBV0NPTlRSQUNULCJFeGNoYW5nZVdpdGhkcmF3Q29udHJhY3QiLGUuUGVybWlzc2lvbl9pZCl9LHgzPShuLGUpPT57Y29uc3QgdD1uZXcgTDYse293bmVyX2FkZHJlc3M6YSxleGNoYW5nZV9pZDpzLHRva2VuX2lkOnIscXVhbnQ6byxleHBlY3RlZDppfT1uO3JldHVybiB0LnNldE93bmVyQWRkcmVzcyhPZShhKSksdC5zZXRFeGNoYW5nZUlkKHMpLHQuc2V0VG9rZW5JZCgkbyhyLGUudmlzaWJsZSkpLHQuc2V0UXVhbnQobyksdC5zZXRFeHBlY3RlZChpKSxxZSh0LGplLkNvbnRyYWN0LkNvbnRyYWN0VHlwZS5FWENIQU5HRVRSQU5TQUNUSU9OQ09OVFJBQ1QsIkV4Y2hhbmdlVHJhbnNhY3Rpb25Db250cmFjdCIsZS5QZXJtaXNzaW9uX2lkKX0sVDM9KG4sZSk9Pntjb25zdCB0PW5ldyBFNix7b3duZXJfYWRkcmVzczphLGNvbnRyYWN0X2FkZHJlc3M6cyxjb25zdW1lX3VzZXJfcmVzb3VyY2VfcGVyY2VudDpyfT1uO3JldHVybiB0LnNldE93bmVyQWRkcmVzcyhPZShhKSksdC5zZXRDb250cmFjdEFkZHJlc3MoT2UocykpLHQuc2V0Q29uc3VtZVVzZXJSZXNvdXJjZVBlcmNlbnQocikscWUodCxqZS5Db250cmFjdC5Db250cmFjdFR5cGUuVVBEQVRFU0VUVElOR0NPTlRSQUNULCJVcGRhdGVTZXR0aW5nQ29udHJhY3QiLGUuUGVybWlzc2lvbl9pZCl9LEEzPShuLGUpPT57Y29uc3QgdD1uZXcgQzYse293bmVyX2FkZHJlc3M6YSxjb250cmFjdF9hZGRyZXNzOnMsb3JpZ2luX2VuZXJneV9saW1pdDpyfT1uO3JldHVybiB0LnNldE93bmVyQWRkcmVzcyhPZShhKSksdC5zZXRDb250cmFjdEFkZHJlc3MoT2UocykpLHQuc2V0T3JpZ2luRW5lcmd5TGltaXQocikscWUodCxqZS5Db250cmFjdC5Db250cmFjdFR5cGUuVVBEQVRFRU5FUkdZTElNSVRDT05UUkFDVCwiVXBkYXRlRW5lcmd5TGltaXRDb250cmFjdCIsZS5QZXJtaXNzaW9uX2lkKX0sbTM9KG4sZSk9Pntjb25zdCB0PW5ldyBNNix7b3duZXJfYWRkcmVzczphLG93bmVyOnMsd2l0bmVzczpyLGFjdGl2ZXM6b309bjt0LnNldE93bmVyQWRkcmVzcyhPZShhKSk7Y29uc3QgaT1mPT5pc05hTihmKT9mPT09IkFjdGl2ZSI/MjpmPT09IldpdG5lc3MiPzE6MDpmLGM9Zj0+e2NvbnN0IGQ9bmV3IGM2LHt0eXBlOnAsaWQ6YixwZXJtaXNzaW9uX25hbWU6VCx0aHJlc2hvbGQ6VyxwYXJlbnRJZDpnLG9wZXJhdGlvbnM6QSxrZXlzOm19PWY7cmV0dXJuIGQuc2V0VHlwZShpKHApKSxkLnNldElkKGIpLGQuc2V0UGVybWlzc2lvbk5hbWUoVCksZC5zZXRUaHJlc2hvbGQoVyksZyYmZC5zZXRQYXJlbnRJZChnKSxBJiZkLnNldE9wZXJhdGlvbnMoZHQoQSkpLG0mJmQuc2V0S2V5c0xpc3QobS5tYXAodz0+e2NvbnN0IEI9bmV3IHU2O3JldHVybiBCLnNldEFkZHJlc3MoT2Uody5hZGRyZXNzKSksQi5zZXRXZWlnaHQody53ZWlnaHQpLEJ9KSksZH07cmV0dXJuIHMmJnQuc2V0T3duZXIoYyhzKSksciYmdC5zZXRXaXRuZXNzKGMocikpLG8mJihBcnJheS5pc0FycmF5KG8pP3Quc2V0QWN0aXZlc0xpc3Qoby5tYXAoZj0+YyhmKSkpOnQuc2V0QWN0aXZlc0xpc3QoW2MobyldKSkscWUodCxqZS5Db250cmFjdC5Db250cmFjdFR5cGUuQUNDT1VOVFBFUk1JU1NJT05VUERBVEVDT05UUkFDVCwiQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdCIsZS5QZXJtaXNzaW9uX2lkKX0sUDM9KG4sZSk9Pntjb25zdCB0PW5ldyBQNix7b3duZXJfYWRkcmVzczphLGRlc2NyaXB0aW9uOnMsdXJsOnIsbmV3X2xpbWl0Om8sbmV3X3B1YmxpY19saW1pdDppfT1uO3JldHVybiB0LnNldE93bmVyQWRkcmVzcyhPZShhKSkscyYmdC5zZXREZXNjcmlwdGlvbihkdChzLnJlcGxhY2UoL14weC8sIiIpKSksciYmdC5zZXRVcmwoZHQoci5yZXBsYWNlKC9eMHgvLCIiKSkpLG8mJnQuc2V0TmV3TGltaXQobyksaSYmdC5zZXROZXdQdWJsaWNMaW1pdChpKSxxZSh0LGplLkNvbnRyYWN0LkNvbnRyYWN0VHlwZS5VUERBVEVBU1NFVENPTlRSQUNULCJVcGRhdGVBc3NldENvbnRyYWN0IixlLlBlcm1pc3Npb25faWQpfSxTeD0obixlLHQpPT57c3dpdGNoKG4udHlwZSl7Y2FzZSJUcmFuc2ZlckNvbnRyYWN0IjpyZXR1cm4gajYoZSx0KTtjYXNlIlRyYW5zZmVyQXNzZXRDb250cmFjdCI6cmV0dXJuIFY2KGUsdCk7Y2FzZSJQYXJ0aWNpcGF0ZUFzc2V0SXNzdWVDb250cmFjdCI6cmV0dXJuIEc2KGUsdCk7Y2FzZSJUcmlnZ2VyU21hcnRDb250cmFjdCI6cmV0dXJuIEg2KGUsdCk7Y2FzZSJGcmVlemVCYWxhbmNlQ29udHJhY3QiOnJldHVybiBLNihlLHQpO2Nhc2UiVW5mcmVlemVCYWxhbmNlQ29udHJhY3QiOnJldHVybiBaNihlLHQpO2Nhc2UiV2l0aGRyYXdCYWxhbmNlQ29udHJhY3QiOnJldHVybiBxNihlLHQpO2Nhc2UiRnJlZXplQmFsYW5jZVYyQ29udHJhY3QiOnJldHVybiBKNihlLHQpO2Nhc2UiQ2FuY2VsQWxsVW5mcmVlemVWMkNvbnRyYWN0IjpyZXR1cm4gWTYoZSx0KTtjYXNlIlVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QiOnJldHVybiBYNihlLHQpO2Nhc2UiRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0IjpyZXR1cm4gUTYoZSx0KTtjYXNlIlVuRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0IjpyZXR1cm4gZTMoZSx0KTtjYXNlIldpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdCI6cmV0dXJuIHQzKGUsdCk7Y2FzZSJXaXRuZXNzQ3JlYXRlQ29udHJhY3QiOnJldHVybiByMyhlLHQpO2Nhc2UiV2l0bmVzc1VwZGF0ZUNvbnRyYWN0IjpyZXR1cm4gbjMoZSx0KTtjYXNlIlZvdGVXaXRuZXNzQ29udHJhY3QiOnJldHVybiBvMyhlLHQpO2Nhc2UiQ3JlYXRlU21hcnRDb250cmFjdCI6cmV0dXJuIHMzKGUsdCk7Y2FzZSJDbGVhckFCSUNvbnRyYWN0IjpyZXR1cm4gYTMoZSx0KTtjYXNlIlVwZGF0ZUJyb2tlcmFnZUNvbnRyYWN0IjpyZXR1cm4gaTMoZSx0KTtjYXNlIkFzc2V0SXNzdWVDb250cmFjdCI6cmV0dXJuIGMzKGUsdCk7Y2FzZSJBY2NvdW50Q3JlYXRlQ29udHJhY3QiOnJldHVybiB1MyhlLHQpO2Nhc2UiQWNjb3VudFVwZGF0ZUNvbnRyYWN0IjpyZXR1cm4gbDMoZSx0KTtjYXNlIlNldEFjY291bnRJZENvbnRyYWN0IjpyZXR1cm4gZjMoZSx0KTtjYXNlIlByb3Bvc2FsQ3JlYXRlQ29udHJhY3QiOnJldHVybiBkMyhlLHQpO2Nhc2UiUHJvcG9zYWxEZWxldGVDb250cmFjdCI6cmV0dXJuIHAzKGUsdCk7Y2FzZSJQcm9wb3NhbEFwcHJvdmVDb250cmFjdCI6cmV0dXJuIGgzKGUsdCk7Y2FzZSJFeGNoYW5nZUNyZWF0ZUNvbnRyYWN0IjpyZXR1cm4gZzMoZSx0KTtjYXNlIkV4Y2hhbmdlSW5qZWN0Q29udHJhY3QiOnJldHVybiBiMyhlLHQpO2Nhc2UiRXhjaGFuZ2VXaXRoZHJhd0NvbnRyYWN0IjpyZXR1cm4geTMoZSx0KTtjYXNlIkV4Y2hhbmdlVHJhbnNhY3Rpb25Db250cmFjdCI6cmV0dXJuIHgzKGUsdCk7Y2FzZSJVcGRhdGVTZXR0aW5nQ29udHJhY3QiOnJldHVybiBUMyhlLHQpO2Nhc2UiVXBkYXRlRW5lcmd5TGltaXRDb250cmFjdCI6cmV0dXJuIEEzKGUsdCk7Y2FzZSJBY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0IjpyZXR1cm4gbTMoZSx0KTtjYXNlIlVwZGF0ZUFzc2V0Q29udHJhY3QiOnJldHVybiBQMyhlLHQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlOiAiK24udHlwZSl9fSx3MD1uPT57Y29uc3QgZT1uLnJhd19kYXRhLHQ9ZS5jb250cmFjdFswXSxhPXQucGFyYW1ldGVyLnZhbHVlLHM9e1Blcm1pc3Npb25faWQ6dC5QZXJtaXNzaW9uX2lkLHZpc2libGU6bi52aXNpYmxlfSxyPVN4KHQsYSxzKSxvPXIuZ2V0UmF3RGF0YSgpO3JldHVybiBvLnNldFJlZkJsb2NrQnl0ZXMoZHQoZS5yZWZfYmxvY2tfYnl0ZXMpKSxvLnNldFJlZkJsb2NrSGFzaChkdChlLnJlZl9ibG9ja19oYXNoKSksZS5kYXRhJiZvLnNldERhdGEoZHQoZS5kYXRhKSksZS5mZWVfbGltaXQmJm8uc2V0RmVlTGltaXQoZS5mZWVfbGltaXQpLGUuZXhwaXJhdGlvbiYmby5zZXRFeHBpcmF0aW9uKGUuZXhwaXJhdGlvbiksZS50aW1lc3RhbXAmJm8uc2V0VGltZXN0YW1wKGUudGltZXN0YW1wKSxyLnNldFJhd0RhdGEobykscn0sX3g9KG4sZT17fSx0PXt9KT0+e2NvbnN0IGE9bi5yYXdfZGF0YSxzPWEuY29udHJhY3RbMF0scj1TeChzLGUse1Blcm1pc3Npb25faWQ6ZT8uUGVybWlzc2lvbl9pZH0pLG89ci5nZXRSYXdEYXRhKCk7cmV0dXJuIG8uc2V0UmVmQmxvY2tCeXRlcyhkdChhLnJlZl9ibG9ja19ieXRlcykpLG8uc2V0UmVmQmxvY2tIYXNoKGR0KGEucmVmX2Jsb2NrX2hhc2gpKSx0LmRhdGEmJm8uc2V0RGF0YShkdCh0LmRhdGEucmVwbGFjZSgvXjB4LywiIikpKSwodC5mZWVfbGltaXR8fGUuZmVlX2xpbWl0KSYmby5zZXRGZWVMaW1pdCh0LmZlZV9saW1pdHx8ZS5mZWVfbGltaXQpLGEuZXhwaXJhdGlvbiYmby5zZXRFeHBpcmF0aW9uKGEuZXhwaXJhdGlvbiksYS50aW1lc3RhbXAmJm8uc2V0VGltZXN0YW1wKGEudGltZXN0YW1wKSxyLnNldFJhd0RhdGEobykscn0sT3g9KG4sZSk9Pntjb25zdCB0PWUuZ2V0UmF3RGF0YSgpLnNlcmlhbGl6ZUJpbmFyeSgpLGE9bGUodCkscz1VdCh0KTtyZXR1cm4gYS50b0xvd2VyQ2FzZSgpPT09bi5yYXdfZGF0YV9oZXgudG9Mb3dlckNhc2UoKSYmcy5yZXBsYWNlKC9eMHgvLCIiKS50b0xvd2VyQ2FzZSgpPT09bi50eElELnJlcGxhY2UoL14weC8sIiIpLnRvTG93ZXJDYXNlKCl9LFJ4PW49PmxlKG4uZ2V0UmF3RGF0YSgpLnNlcmlhbGl6ZUJpbmFyeSgpKSxzYz1uPT57Y29uc3QgZT13MChuKTtyZXR1cm4gT3gobixlKX0sdjA9KG4sZSx0KT0+e2NvbnN0IGE9X3gobixlLHQpO3JldHVybiBPeChuLGEpfSxNeD1uPT57Y29uc3QgZT1uLmdldFJhd0RhdGEoKS5zZXJpYWxpemVCaW5hcnkoKTtyZXR1cm4gVXQoZSl9LHczPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCx0eENoZWNrOnNjLHR4Q2hlY2tXaXRoQXJnczp2MCx0eEpzb25Ub1BiOncwLHR4SnNvblRvUGJXaXRoQXJnczpfeCx0eFBiVG9SYXdEYXRhSGV4OlJ4LHR4UGJUb1R4SUQ6TXh9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSkse1RyYW5zYWN0aW9uOnYzLFBlcm1pc3Npb246bUksS2V5OlBJfT1nbG9iYWxUaGlzLlRyb25XZWJQcm90byx7VHJhbnNmZXJDb250cmFjdDpDMyxXaXRoZHJhd0JhbGFuY2VDb250cmFjdDpFMyxXaXRuZXNzQ3JlYXRlQ29udHJhY3Q6VzMsRnJlZXplQmFsYW5jZVYyQ29udHJhY3Q6QjMsVW5mcmVlemVCYWxhbmNlVjJDb250cmFjdDpJMyxDYW5jZWxBbGxVbmZyZWV6ZVYyQ29udHJhY3Q6UzMsV2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0Ol8zLERlbGVnYXRlUmVzb3VyY2VDb250cmFjdDpPMyxVbkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdDpSMyxGcmVlemVCYWxhbmNlQ29udHJhY3Q6TTMsVW5mcmVlemVCYWxhbmNlQ29udHJhY3Q6RjN9PWdsb2JhbFRoaXMuVHJvbldlYlByb3RvLHtUcmFuc2ZlckFzc2V0Q29udHJhY3Q6TjMsUGFydGljaXBhdGVBc3NldElzc3VlQ29udHJhY3Q6azMsQXNzZXRJc3N1ZUNvbnRyYWN0OlUzLFVwZGF0ZUFzc2V0Q29udHJhY3Q6RDN9PWdsb2JhbFRoaXMuVHJvbldlYlByb3RvLHtUcmlnZ2VyU21hcnRDb250cmFjdDokMyxDcmVhdGVTbWFydENvbnRyYWN0OkwzLFVwZGF0ZVNldHRpbmdDb250cmFjdDp6MyxVcGRhdGVFbmVyZ3lMaW1pdENvbnRyYWN0OmozLENsZWFyQUJJQ29udHJhY3Q6VjN9PWdsb2JhbFRoaXMuVHJvbldlYlByb3RvLHtBY2NvdW50Q3JlYXRlQ29udHJhY3Q6RzMsQWNjb3VudFVwZGF0ZUNvbnRyYWN0OkgzLFNldEFjY291bnRJZENvbnRyYWN0OkszLEFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3Q6WjN9PWdsb2JhbFRoaXMuVHJvbldlYlByb3RvLHtWb3RlV2l0bmVzc0NvbnRyYWN0OnEzLFdpdG5lc3NVcGRhdGVDb250cmFjdDpKM309Z2xvYmFsVGhpcy5Ucm9uV2ViUHJvdG8se1Byb3Bvc2FsQ3JlYXRlQ29udHJhY3Q6WTMsUHJvcG9zYWxBcHByb3ZlQ29udHJhY3Q6WDMsUHJvcG9zYWxEZWxldGVDb250cmFjdDpRM309Z2xvYmFsVGhpcy5Ucm9uV2ViUHJvdG8se0V4Y2hhbmdlQ3JlYXRlQ29udHJhY3Q6ZTgsRXhjaGFuZ2VJbmplY3RDb250cmFjdDp0OCxFeGNoYW5nZVdpdGhkcmF3Q29udHJhY3Q6cjgsRXhjaGFuZ2VUcmFuc2FjdGlvbkNvbnRyYWN0Om44fT1nbG9iYWxUaGlzLlRyb25XZWJQcm90byx7VXBkYXRlQnJva2VyYWdlQ29udHJhY3Q6bzh9PWdsb2JhbFRoaXMuVHJvbldlYlByb3RvLHM4PXswOiJBY2NvdW50Q3JlYXRlQ29udHJhY3QiLDE6IlRyYW5zZmVyQ29udHJhY3QiLDI6IlRyYW5zZmVyQXNzZXRDb250cmFjdCIsNDoiVm90ZVdpdG5lc3NDb250cmFjdCIsNToiV2l0bmVzc0NyZWF0ZUNvbnRyYWN0Iiw2OiJBc3NldElzc3VlQ29udHJhY3QiLDg6IldpdG5lc3NVcGRhdGVDb250cmFjdCIsOToiUGFydGljaXBhdGVBc3NldElzc3VlQ29udHJhY3QiLDEwOiJBY2NvdW50VXBkYXRlQ29udHJhY3QiLDExOiJGcmVlemVCYWxhbmNlQ29udHJhY3QiLDEyOiJVbmZyZWV6ZUJhbGFuY2VDb250cmFjdCIsMTM6IldpdGhkcmF3QmFsYW5jZUNvbnRyYWN0IiwxNToiVXBkYXRlQXNzZXRDb250cmFjdCIsMTY6IlByb3Bvc2FsQ3JlYXRlQ29udHJhY3QiLDE3OiJQcm9wb3NhbEFwcHJvdmVDb250cmFjdCIsMTg6IlByb3Bvc2FsRGVsZXRlQ29udHJhY3QiLDE5OiJTZXRBY2NvdW50SWRDb250cmFjdCIsMzA6IkNyZWF0ZVNtYXJ0Q29udHJhY3QiLDMxOiJUcmlnZ2VyU21hcnRDb250cmFjdCIsMzM6IlVwZGF0ZVNldHRpbmdDb250cmFjdCIsNDE6IkV4Y2hhbmdlQ3JlYXRlQ29udHJhY3QiLDQyOiJFeGNoYW5nZUluamVjdENvbnRyYWN0Iiw0MzoiRXhjaGFuZ2VXaXRoZHJhd0NvbnRyYWN0Iiw0NDoiRXhjaGFuZ2VUcmFuc2FjdGlvbkNvbnRyYWN0Iiw0NToiVXBkYXRlRW5lcmd5TGltaXRDb250cmFjdCIsNDY6IkFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3QiLDQ4OiJDbGVhckFCSUNvbnRyYWN0Iiw0OToiVXBkYXRlQnJva2VyYWdlQ29udHJhY3QiLDU0OiJGcmVlemVCYWxhbmNlVjJDb250cmFjdCIsNTU6IlVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QiLDU2OiJXaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3QiLDU3OiJEZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QiLDU4OiJVbkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdCIsNTk6IkNhbmNlbEFsbFVuZnJlZXplVjJDb250cmFjdCJ9LGE4PW49Pm4uZ2V0QXV0aHNMaXN0KCkubWFwKHQ9Pntjb25zdCBhPWxlKHQuZ2V0UGVybWlzc2lvbk5hbWVfYXNVOCgpKSxzPXQuZ2V0QWNjb3VudCgpLHI9e25hbWU6bGUocy5nZXROYW1lX2FzVTgoKSksYWRkcmVzczpsZShzLmdldEFkZHJlc3NfYXNVOCgpKX07cmV0dXJue3Blcm1pc3Npb25fbmFtZTphLGFjY291bnQ6cn19KSxKZT0obixlKT0+e2NvbnN0IHQ9djMucmF3LmRlc2VyaWFsaXplQmluYXJ5KEl0KGUpKSxhPXQuZ2V0Q29udHJhY3RMaXN0KClbMF0scz1hLmdldFBhcmFtZXRlcigpLmdldFZhbHVlKCkscj1zOFthLmdldFR5cGUoKV07aWYobiE9PXIpdGhyb3cgbmV3IEVycm9yKGB0eXBlICR7bn0gZGlzbWF0Y2hlcyB3aXRoIHJhd0RhdGFIZXggdHlwZSAke3J9YCk7cmV0dXJuW3tjb250cmFjdDpbe3BhcmFtZXRlcjp7dmFsdWU6e30sdHlwZV91cmw6YS5nZXRQYXJhbWV0ZXIoKS5nZXRUeXBlVXJsKCl9LHR5cGU6bixQZXJtaXNzaW9uX2lkOmEuZ2V0UGVybWlzc2lvbklkKCl9XSxkYXRhOmxlKHQuZ2V0RGF0YSgpKSxmZWVfbGltaXQ6dC5nZXRGZWVMaW1pdCgpLHJlZl9ibG9ja19ieXRlczpsZSh0LmdldFJlZkJsb2NrQnl0ZXNfYXNVOCgpKSxyZWZfYmxvY2tfaGFzaDpsZSh0LmdldFJlZkJsb2NrSGFzaF9hc1U4KCkpLGV4cGlyYXRpb246dC5nZXRFeHBpcmF0aW9uKCksdGltZXN0YW1wOnQuZ2V0VGltZXN0YW1wKCksc2NyaXB0czpsZSh0LmdldFNjcmlwdHNfYXNVOCgpKSxhdXRoczphOCh0KX0sc119LGk4PShuLGUpPT57Y29uc3RbdCxhXT1KZShuLGUpLHM9JDMuZGVzZXJpYWxpemVCaW5hcnkoYSk7cmV0dXJuIHQuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlPXtvd25lcl9hZGRyZXNzOmxlKHMuZ2V0T3duZXJBZGRyZXNzX2FzVTgoKSksY29udHJhY3RfYWRkcmVzczpsZShzLmdldENvbnRyYWN0QWRkcmVzc19hc1U4KCkpLGNhbGxfdmFsdWU6cy5nZXRDYWxsVmFsdWUoKSxkYXRhOmxlKHMuZ2V0RGF0YV9hc1U4KCkpLGNhbGxfdG9rZW5fdmFsdWU6cy5nZXRDYWxsVG9rZW5WYWx1ZSgpLHRva2VuX2lkOnMuZ2V0VG9rZW5JZCgpfSx0fSxhYT1uPT57c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4iQkFORFdJRFRIIjtjYXNlIDE6cmV0dXJuIkVORVJHWSI7ZGVmYXVsdDpyZXR1cm4iQkFORFdJRFRIIn19LGM4PShuLGUpPT57Y29uc3RbdCxhXT1KZShuLGUpLHM9QjMuZGVzZXJpYWxpemVCaW5hcnkoYSk7cmV0dXJuIHQuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlPXtvd25lcl9hZGRyZXNzOmxlKHMuZ2V0T3duZXJBZGRyZXNzX2FzVTgoKSksZnJvemVuX2JhbGFuY2U6cy5nZXRGcm96ZW5CYWxhbmNlKCkscmVzb3VyY2U6YWEocy5nZXRSZXNvdXJjZSgpKX0sdH0sdTg9KG4sZSk9Pntjb25zdFt0LGFdPUplKG4sZSkscz1JMy5kZXNlcmlhbGl6ZUJpbmFyeShhKTtyZXR1cm4gdC5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU9e293bmVyX2FkZHJlc3M6bGUocy5nZXRPd25lckFkZHJlc3NfYXNVOCgpKSx1bmZyZWV6ZV9iYWxhbmNlOnMuZ2V0VW5mcmVlemVCYWxhbmNlKCkscmVzb3VyY2U6YWEocy5nZXRSZXNvdXJjZSgpKX0sdH0sbDg9KG4sZSk9Pntjb25zdFt0LGFdPUplKG4sZSkscz1TMy5kZXNlcmlhbGl6ZUJpbmFyeShhKTtyZXR1cm4gdC5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU9e293bmVyX2FkZHJlc3M6bGUocy5nZXRPd25lckFkZHJlc3NfYXNVOCgpKX0sdH0sZjg9KG4sZSk9Pntjb25zdFt0LGFdPUplKG4sZSkscz1PMy5kZXNlcmlhbGl6ZUJpbmFyeShhKTtyZXR1cm4gdC5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU9e293bmVyX2FkZHJlc3M6bGUocy5nZXRPd25lckFkZHJlc3NfYXNVOCgpKSxiYWxhbmNlOnMuZ2V0QmFsYW5jZSgpLGxvY2s6cy5nZXRMb2NrKCksbG9ja19wZXJpb2Q6cy5nZXRMb2NrUGVyaW9kKCkscmVjZWl2ZXJfYWRkcmVzczpsZShzLmdldFJlY2VpdmVyQWRkcmVzc19hc1U4KCkpLHJlc291cmNlOmFhKHMuZ2V0UmVzb3VyY2UoKSl9LHR9LGQ4PShuLGUpPT57Y29uc3RbdCxhXT1KZShuLGUpLHM9UjMuZGVzZXJpYWxpemVCaW5hcnkoYSk7cmV0dXJuIHQuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlPXtvd25lcl9hZGRyZXNzOmxlKHMuZ2V0T3duZXJBZGRyZXNzX2FzVTgoKSksYmFsYW5jZTpzLmdldEJhbGFuY2UoKSxyZWNlaXZlcl9hZGRyZXNzOmxlKHMuZ2V0UmVjZWl2ZXJBZGRyZXNzX2FzVTgoKSkscmVzb3VyY2U6YWEocy5nZXRSZXNvdXJjZSgpKX0sdH0scDg9KG4sZSk9Pntjb25zdFt0LGFdPUplKG4sZSkscz1fMy5kZXNlcmlhbGl6ZUJpbmFyeShhKTtyZXR1cm4gdC5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU9e293bmVyX2FkZHJlc3M6bGUocy5nZXRPd25lckFkZHJlc3NfYXNVOCgpKX0sdH0saDg9KG4sZSk9Pntjb25zdFt0LGFdPUplKG4sZSkscz1DMy5kZXNlcmlhbGl6ZUJpbmFyeShhKTtyZXR1cm4gdC5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU9e293bmVyX2FkZHJlc3M6bGUocy5nZXRPd25lckFkZHJlc3NfYXNVOCgpKSx0b19hZGRyZXNzOmxlKHMuZ2V0VG9BZGRyZXNzX2FzVTgoKSksYW1vdW50OnMuZ2V0QW1vdW50KCl9LHR9LGc4PShuLGUpPT57Y29uc3RbdCxhXT1KZShuLGUpLHM9RTMuZGVzZXJpYWxpemVCaW5hcnkoYSk7cmV0dXJuIHQuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlPXtvd25lcl9hZGRyZXNzOmxlKHMuZ2V0T3duZXJBZGRyZXNzX2FzVTgoKSl9LHR9LGI4PShuLGUpPT57Y29uc3RbdCxhXT1KZShuLGUpLHM9VzMuZGVzZXJpYWxpemVCaW5hcnkoYSk7cmV0dXJuIHQuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlPXtvd25lcl9hZGRyZXNzOmxlKHMuZ2V0T3duZXJBZGRyZXNzX2FzVTgoKSksdXJsOmxlKHMuZ2V0VXJsX2FzVTgoKSl9LHR9LHk4PShuLGUpPT57Y29uc3RbdCxhXT1KZShuLGUpLHM9SjMuZGVzZXJpYWxpemVCaW5hcnkoYSk7cmV0dXJuIHQuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlPXtvd25lcl9hZGRyZXNzOmxlKHMuZ2V0T3duZXJBZGRyZXNzX2FzVTgoKSksdXBkYXRlX3VybDpsZShzLmdldFVwZGF0ZVVybF9hc1U4KCkpfSx0fSx4OD0obixlKT0+e2NvbnN0W3QsYV09SmUobixlKSxzPU4zLmRlc2VyaWFsaXplQmluYXJ5KGEpO3JldHVybiB0LmNvbnRyYWN0WzBdLnBhcmFtZXRlci52YWx1ZT17b3duZXJfYWRkcmVzczpsZShzLmdldE93bmVyQWRkcmVzc19hc1U4KCkpLHRvX2FkZHJlc3M6bGUocy5nZXRUb0FkZHJlc3NfYXNVOCgpKSxhc3NldF9uYW1lOmxlKHMuZ2V0QXNzZXROYW1lX2FzVTgoKSksYW1vdW50OnMuZ2V0QW1vdW50KCl9LHR9LFQ4PShuLGUpPT57Y29uc3RbdCxhXT1KZShuLGUpLHM9azMuZGVzZXJpYWxpemVCaW5hcnkoYSk7cmV0dXJuIHQuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlPXtvd25lcl9hZGRyZXNzOmxlKHMuZ2V0T3duZXJBZGRyZXNzX2FzVTgoKSksdG9fYWRkcmVzczpsZShzLmdldFRvQWRkcmVzc19hc1U4KCkpLGFzc2V0X25hbWU6bGUocy5nZXRBc3NldE5hbWVfYXNVOCgpKSxhbW91bnQ6cy5nZXRBbW91bnQoKX0sdH0sQTg9KG4sZSk9Pntjb25zdFt0LGFdPUplKG4sZSkscz1VMy5kZXNlcmlhbGl6ZUJpbmFyeShhKTtyZXR1cm4gdC5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU9e293bmVyX2FkZHJlc3M6bGUocy5nZXRPd25lckFkZHJlc3NfYXNVOCgpKSxuYW1lOmxlKHMuZ2V0TmFtZV9hc1U4KCkpLGFiYnI6bGUocy5nZXRBYmJyX2FzVTgoKSksZGVzY3JpcHRpb246bGUocy5nZXREZXNjcmlwdGlvbl9hc1U4KCkpLHVybDpsZShzLmdldFVybF9hc1U4KCkpLHRvdGFsX3N1cHBseTpzLmdldFRvdGFsU3VwcGx5KCksdHJ4X251bTpzLmdldFRyeE51bSgpLG51bTpzLmdldE51bSgpLHN0YXJ0X3RpbWU6cy5nZXRTdGFydFRpbWUoKSxlbmRfdGltZTpzLmdldEVuZFRpbWUoKSxmcm96ZW5fc3VwcGx5OnMuZ2V0RnJvemVuU3VwcGx5TGlzdCgpLm1hcChyPT4oe2Zyb3plbl9hbW91bnQ6ci5nZXRGcm96ZW5BbW91bnQoKSxmcm96ZW5fZGF5czpyLmdldEZyb3plbkRheXMoKX0pKSxmcmVlX2Fzc2V0X25ldF9saW1pdDpzLmdldEZyZWVBc3NldE5ldExpbWl0KCkscHVibGljX2ZyZWVfYXNzZXRfbmV0X2xpbWl0OnMuZ2V0UHVibGljRnJlZUFzc2V0TmV0TGltaXQoKSxwcmVjaXNpb246cy5nZXRQcmVjaXNpb24oKSx2b3RlX3Njb3JlOnMuZ2V0Vm90ZVNjb3JlKCl9LHR9LG04PShuLGUpPT57Y29uc3RbdCxhXT1KZShuLGUpLHM9RDMuZGVzZXJpYWxpemVCaW5hcnkoYSk7cmV0dXJuIHQuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlPXtvd25lcl9hZGRyZXNzOmxlKHMuZ2V0T3duZXJBZGRyZXNzX2FzVTgoKSksZGVzY3JpcHRpb246bGUocy5nZXREZXNjcmlwdGlvbl9hc1U4KCkpLHVybDpsZShzLmdldFVybF9hc1U4KCkpLG5ld19saW1pdDpzLmdldE5ld0xpbWl0KCksbmV3X3B1YmxpY19saW1pdDpzLmdldE5ld1B1YmxpY0xpbWl0KCl9LHR9LFA4PXsxOiJXaXRuZXNzIiwyOiJBY3RpdmUifSxqdT1uPT57aWYoIW4pcmV0dXJuIG51bGw7Y29uc3QgZT1uLmdldFR5cGUoKTtyZXR1cm57cGVybWlzc2lvbl9uYW1lOm4uZ2V0UGVybWlzc2lvbk5hbWUoKSx0aHJlc2hvbGQ6bi5nZXRUaHJlc2hvbGQoKSxvcGVyYXRpb25zOmxlKG4uZ2V0T3BlcmF0aW9uc19hc1U4KCkpLGtleXM6bi5nZXRLZXlzTGlzdCgpLm1hcCh0PT4oe2FkZHJlc3M6bGUodC5nZXRBZGRyZXNzX2FzVTgoKSksd2VpZ2h0OnQuZ2V0V2VpZ2h0KCl9KSksLi4uZT09PTA/e306e3R5cGU6UDhbZV0saWQ6bi5nZXRJZCgpfX19LHc4PShuLGUpPT57Y29uc3RbdCxhXT1KZShuLGUpLHM9RzMuZGVzZXJpYWxpemVCaW5hcnkoYSk7cmV0dXJuIHQuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlPXtvd25lcl9hZGRyZXNzOmxlKHMuZ2V0T3duZXJBZGRyZXNzX2FzVTgoKSksYWNjb3VudF9hZGRyZXNzOmxlKHMuZ2V0QWNjb3VudEFkZHJlc3NfYXNVOCgpKX0sdH0sdjg9KG4sZSk9Pntjb25zdFt0LGFdPUplKG4sZSkscz1IMy5kZXNlcmlhbGl6ZUJpbmFyeShhKTtyZXR1cm4gdC5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU9e293bmVyX2FkZHJlc3M6bGUocy5nZXRPd25lckFkZHJlc3NfYXNVOCgpKSxhY2NvdW50X25hbWU6bGUocy5nZXRBY2NvdW50TmFtZV9hc1U4KCkpfSx0fSxDOD0obixlKT0+e2NvbnN0W3QsYV09SmUobixlKSxzPUszLmRlc2VyaWFsaXplQmluYXJ5KGEpO3JldHVybiB0LmNvbnRyYWN0WzBdLnBhcmFtZXRlci52YWx1ZT17b3duZXJfYWRkcmVzczpsZShzLmdldE93bmVyQWRkcmVzc19hc1U4KCkpLGFjY291bnRfaWQ6bGUocy5nZXRBY2NvdW50SWRfYXNVOCgpKX0sdH0sRTg9KG4sZSk9Pntjb25zdFt0LGFdPUplKG4sZSkscz1aMy5kZXNlcmlhbGl6ZUJpbmFyeShhKSxyPXMuZ2V0V2l0bmVzcygpO3JldHVybiB0LmNvbnRyYWN0WzBdLnBhcmFtZXRlci52YWx1ZT17b3duZXJfYWRkcmVzczpsZShzLmdldE93bmVyQWRkcmVzc19hc1U4KCkpLG93bmVyOmp1KHMuZ2V0T3duZXIoKSksd2l0bmVzczpyP2p1KHIpOm51bGwsYWN0aXZlczpzLmdldEFjdGl2ZXNMaXN0KCkubWFwKGp1KX0sdH0sVzg9KG4sZSk9Pntjb25zdFt0LGFdPUplKG4sZSkscz1NMy5kZXNlcmlhbGl6ZUJpbmFyeShhKTtyZXR1cm4gdC5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU9e293bmVyX2FkZHJlc3M6bGUocy5nZXRPd25lckFkZHJlc3NfYXNVOCgpKSxmcm96ZW5fYmFsYW5jZTpzLmdldEZyb3plbkJhbGFuY2UoKSxmcm96ZW5fZHVyYXRpb246cy5nZXRGcm96ZW5EdXJhdGlvbigpLHJlc291cmNlOmFhKHMuZ2V0UmVzb3VyY2UoKSkscmVjZWl2ZXJfYWRkcmVzczpsZShzLmdldFJlY2VpdmVyQWRkcmVzc19hc1U4KCkpfSx0fSxCOD0obixlKT0+e2NvbnN0W3QsYV09SmUobixlKSxzPUYzLmRlc2VyaWFsaXplQmluYXJ5KGEpO3JldHVybiB0LmNvbnRyYWN0WzBdLnBhcmFtZXRlci52YWx1ZT17b3duZXJfYWRkcmVzczpsZShzLmdldE93bmVyQWRkcmVzc19hc1U4KCkpLHJlc291cmNlOmFhKHMuZ2V0UmVzb3VyY2UoKSkscmVjZWl2ZXJfYWRkcmVzczpsZShzLmdldFJlY2VpdmVyQWRkcmVzc19hc1U4KCkpfSx0fSxJOD0obixlKT0+e2NvbnN0W3QsYV09SmUobixlKSxzPXEzLmRlc2VyaWFsaXplQmluYXJ5KGEpO3JldHVybiB0LmNvbnRyYWN0WzBdLnBhcmFtZXRlci52YWx1ZT17b3duZXJfYWRkcmVzczpsZShzLmdldE93bmVyQWRkcmVzc19hc1U4KCkpLHZvdGVzOnMuZ2V0Vm90ZXNMaXN0KCkubWFwKHI9Pih7dm90ZV9hZGRyZXNzOmxlKHIuZ2V0Vm90ZUFkZHJlc3NfYXNVOCgpKSx2b3RlX2NvdW50OnIuZ2V0Vm90ZUNvdW50KCl9KSl9LHR9LFM4PShuLGUpPT57Y29uc3RbdCxhXT1KZShuLGUpLHM9WTMuZGVzZXJpYWxpemVCaW5hcnkoYSkscj1zLmdldFBhcmFtZXRlcnNNYXAoKSxvPVtdO3JldHVyblsuLi5yLmVudHJpZXMoKV0uZm9yRWFjaCgoW2ksY10pPT57by5wdXNoKHtrZXk6aSx2YWx1ZTpjfSl9KSx0LmNvbnRyYWN0WzBdLnBhcmFtZXRlci52YWx1ZT17b3duZXJfYWRkcmVzczpsZShzLmdldE93bmVyQWRkcmVzc19hc1U4KCkpLHBhcmFtZXRlcnM6b30sdH0sXzg9KG4sZSk9Pntjb25zdFt0LGFdPUplKG4sZSkscz1YMy5kZXNlcmlhbGl6ZUJpbmFyeShhKTtyZXR1cm4gdC5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU9e293bmVyX2FkZHJlc3M6bGUocy5nZXRPd25lckFkZHJlc3NfYXNVOCgpKSxwcm9wb3NhbF9pZDpzLmdldFByb3Bvc2FsSWQoKSxpc19hZGRfYXBwcm92YWw6cy5nZXRJc0FkZEFwcHJvdmFsKCl9LHR9LE84PShuLGUpPT57Y29uc3RbdCxhXT1KZShuLGUpLHM9UTMuZGVzZXJpYWxpemVCaW5hcnkoYSk7cmV0dXJuIHQuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlPXtvd25lcl9hZGRyZXNzOmxlKHMuZ2V0T3duZXJBZGRyZXNzX2FzVTgoKSkscHJvcG9zYWxfaWQ6cy5nZXRQcm9wb3NhbElkKCl9LHR9LFI4PVsiIiwiY29uc3RydWN0b3IiLCJmdW5jdGlvbiIsImV2ZW50IiwiZmFsbGJhY2siLCJyZWNlaXZlIiwiZXJyb3IiXSxNOD1bIiIsInB1cmUiLCJ2aWV3Iiwibm9ucGF5YWJsZSIsInBheWFibGUiXSxGOD0obixlKT0+e2NvbnN0W3QsYV09SmUobixlKSxzPUwzLmRlc2VyaWFsaXplQmluYXJ5KGEpLHI9cy5nZXROZXdDb250cmFjdCgpLG89ci5nZXRBYmkoKSxpPW8/by5nZXRFbnRyeXNMaXN0KCkubWFwKGY9Pntjb25zdCBkPXA9Pih7bmFtZTpwLmdldE5hbWUoKSx0eXBlOnAuZ2V0VHlwZSgpLC4uLnAuZ2V0SW5kZXhlZCgpP3tpbmRleGVkOiEwfTp7fX0pO3JldHVybnt0eXBlOlI4W2YuZ2V0VHlwZSgpXXx8IiIsbmFtZTpmLmdldE5hbWUoKSxpbnB1dHM6Zi5nZXRJbnB1dHNMaXN0KCkubWFwKGQpLG91dHB1dHM6Zi5nZXRPdXRwdXRzTGlzdCgpLm1hcChkKSxwYXlhYmxlOmYuZ2V0UGF5YWJsZSgpLHN0YXRlTXV0YWJpbGl0eTpNOFtmLmdldFN0YXRlbXV0YWJpbGl0eSgpXXx8IiIsLi4uZi5nZXRDb25zdGFudCgpP3tjb25zdGFudDohMH06e30sLi4uZi5nZXRBbm9ueW1vdXMoKT97YW5vbnltb3VzOiEwfTp7fX19KTpbXSxjPXI/e29yaWdpbl9hZGRyZXNzOmxlKHIuZ2V0T3JpZ2luQWRkcmVzc19hc1U4KCkpLGFiaTp7ZW50cnlzOml9LGJ5dGVjb2RlOmxlKHIuZ2V0Qnl0ZWNvZGVfYXNVOCgpKSxjYWxsX3ZhbHVlOnIuZ2V0Q2FsbFZhbHVlKCksY29uc3VtZV91c2VyX3Jlc291cmNlX3BlcmNlbnQ6ci5nZXRDb25zdW1lVXNlclJlc291cmNlUGVyY2VudCgpLG5hbWU6ci5nZXROYW1lKCksb3JpZ2luX2VuZXJneV9saW1pdDpyLmdldE9yaWdpbkVuZXJneUxpbWl0KCl9Om51bGw7cmV0dXJuIHQuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlPXtvd25lcl9hZGRyZXNzOmxlKHMuZ2V0T3duZXJBZGRyZXNzX2FzVTgoKSksY2FsbF90b2tlbl92YWx1ZTpzLmdldENhbGxUb2tlblZhbHVlKCksdG9rZW5faWQ6cy5nZXRUb2tlbklkKCksbmV3X2NvbnRyYWN0OmN9LHR9LE44PShuLGUpPT57Y29uc3RbdCxhXT1KZShuLGUpLHM9ejMuZGVzZXJpYWxpemVCaW5hcnkoYSk7cmV0dXJuIHQuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlPXtvd25lcl9hZGRyZXNzOmxlKHMuZ2V0T3duZXJBZGRyZXNzX2FzVTgoKSksY29udHJhY3RfYWRkcmVzczpsZShzLmdldENvbnRyYWN0QWRkcmVzc19hc1U4KCkpLGNvbnN1bWVfdXNlcl9yZXNvdXJjZV9wZXJjZW50OnMuZ2V0Q29uc3VtZVVzZXJSZXNvdXJjZVBlcmNlbnQoKX0sdH0sazg9KG4sZSk9Pntjb25zdFt0LGFdPUplKG4sZSkscz1qMy5kZXNlcmlhbGl6ZUJpbmFyeShhKTtyZXR1cm4gdC5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU9e293bmVyX2FkZHJlc3M6bGUocy5nZXRPd25lckFkZHJlc3NfYXNVOCgpKSxjb250cmFjdF9hZGRyZXNzOmxlKHMuZ2V0Q29udHJhY3RBZGRyZXNzX2FzVTgoKSksb3JpZ2luX2VuZXJneV9saW1pdDpzLmdldE9yaWdpbkVuZXJneUxpbWl0KCl9LHR9LFU4PShuLGUpPT57Y29uc3RbdCxhXT1KZShuLGUpLHM9VjMuZGVzZXJpYWxpemVCaW5hcnkoYSk7cmV0dXJuIHQuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlPXtvd25lcl9hZGRyZXNzOmxlKHMuZ2V0T3duZXJBZGRyZXNzX2FzVTgoKSksY29udHJhY3RfYWRkcmVzczpsZShzLmdldENvbnRyYWN0QWRkcmVzc19hc1U4KCkpfSx0fSxEOD0obixlKT0+e2NvbnN0W3QsYV09SmUobixlKSxzPWU4LmRlc2VyaWFsaXplQmluYXJ5KGEpO3JldHVybiB0LmNvbnRyYWN0WzBdLnBhcmFtZXRlci52YWx1ZT17b3duZXJfYWRkcmVzczpsZShzLmdldE93bmVyQWRkcmVzc19hc1U4KCkpLGZpcnN0X3Rva2VuX2lkOmxlKHMuZ2V0Rmlyc3RUb2tlbklkX2FzVTgoKSksZmlyc3RfdG9rZW5fYmFsYW5jZTpzLmdldEZpcnN0VG9rZW5CYWxhbmNlKCksc2Vjb25kX3Rva2VuX2lkOmxlKHMuZ2V0U2Vjb25kVG9rZW5JZF9hc1U4KCkpLHNlY29uZF90b2tlbl9iYWxhbmNlOnMuZ2V0U2Vjb25kVG9rZW5CYWxhbmNlKCl9LHR9LCQ4PShuLGUpPT57Y29uc3RbdCxhXT1KZShuLGUpLHM9dDguZGVzZXJpYWxpemVCaW5hcnkoYSk7cmV0dXJuIHQuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlPXtvd25lcl9hZGRyZXNzOmxlKHMuZ2V0T3duZXJBZGRyZXNzX2FzVTgoKSksZXhjaGFuZ2VfaWQ6cy5nZXRFeGNoYW5nZUlkKCksdG9rZW5faWQ6bGUocy5nZXRUb2tlbklkX2FzVTgoKSkscXVhbnQ6cy5nZXRRdWFudCgpfSx0fSxMOD0obixlKT0+e2NvbnN0W3QsYV09SmUobixlKSxzPXI4LmRlc2VyaWFsaXplQmluYXJ5KGEpO3JldHVybiB0LmNvbnRyYWN0WzBdLnBhcmFtZXRlci52YWx1ZT17b3duZXJfYWRkcmVzczpsZShzLmdldE93bmVyQWRkcmVzc19hc1U4KCkpLGV4Y2hhbmdlX2lkOnMuZ2V0RXhjaGFuZ2VJZCgpLHRva2VuX2lkOmxlKHMuZ2V0VG9rZW5JZF9hc1U4KCkpLHF1YW50OnMuZ2V0UXVhbnQoKX0sdH0sejg9KG4sZSk9Pntjb25zdFt0LGFdPUplKG4sZSkscz1uOC5kZXNlcmlhbGl6ZUJpbmFyeShhKTtyZXR1cm4gdC5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU9e293bmVyX2FkZHJlc3M6bGUocy5nZXRPd25lckFkZHJlc3NfYXNVOCgpKSxleGNoYW5nZV9pZDpzLmdldEV4Y2hhbmdlSWQoKSx0b2tlbl9pZDpsZShzLmdldFRva2VuSWRfYXNVOCgpKSxxdWFudDpzLmdldFF1YW50KCksZXhwZWN0ZWQ6cy5nZXRFeHBlY3RlZCgpfSx0fSxqOD0obixlKT0+e2NvbnN0W3QsYV09SmUobixlKSxzPW84LmRlc2VyaWFsaXplQmluYXJ5KGEpO3JldHVybiB0LmNvbnRyYWN0WzBdLnBhcmFtZXRlci52YWx1ZT17b3duZXJfYWRkcmVzczpsZShzLmdldE93bmVyQWRkcmVzc19hc1U4KCkpLGJyb2tlcmFnZTpzLmdldEJyb2tlcmFnZSgpfSx0fSxWOD0obixlKT0+e2lmKCFlKXRocm93IG5ldyBFcnJvcigicmF3RGF0YUhleCBjYW5ub3QgYmUgZW1wdHkiKTtpZighb28oZSkpdGhyb3cgbmV3IEVycm9yKCJyYXdEYXRhSGV4IGlzIG5vdCBhIHZhbGlkIGhleCBzdHJpbmciKTtzd2l0Y2gobil7Y2FzZSJUcmlnZ2VyU21hcnRDb250cmFjdCI6cmV0dXJuIGk4KG4sZSk7Y2FzZSJGcmVlemVCYWxhbmNlVjJDb250cmFjdCI6cmV0dXJuIGM4KG4sZSk7Y2FzZSJVbmZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0IjpyZXR1cm4gdTgobixlKTtjYXNlIkNhbmNlbEFsbFVuZnJlZXplVjJDb250cmFjdCI6cmV0dXJuIGw4KG4sZSk7Y2FzZSJEZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QiOnJldHVybiBmOChuLGUpO2Nhc2UiVW5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QiOnJldHVybiBkOChuLGUpO2Nhc2UiV2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0IjpyZXR1cm4gcDgobixlKTtjYXNlIlRyYW5zZmVyQ29udHJhY3QiOnJldHVybiBoOChuLGUpO2Nhc2UiV2l0aGRyYXdCYWxhbmNlQ29udHJhY3QiOnJldHVybiBnOChuLGUpO2Nhc2UiV2l0bmVzc0NyZWF0ZUNvbnRyYWN0IjpyZXR1cm4gYjgobixlKTtjYXNlIldpdG5lc3NVcGRhdGVDb250cmFjdCI6cmV0dXJuIHk4KG4sZSk7Y2FzZSJUcmFuc2ZlckFzc2V0Q29udHJhY3QiOnJldHVybiB4OChuLGUpO2Nhc2UiUGFydGljaXBhdGVBc3NldElzc3VlQ29udHJhY3QiOnJldHVybiBUOChuLGUpO2Nhc2UiQXNzZXRJc3N1ZUNvbnRyYWN0IjpyZXR1cm4gQTgobixlKTtjYXNlIlVwZGF0ZUFzc2V0Q29udHJhY3QiOnJldHVybiBtOChuLGUpO2Nhc2UiQWNjb3VudENyZWF0ZUNvbnRyYWN0IjpyZXR1cm4gdzgobixlKTtjYXNlIkFjY291bnRVcGRhdGVDb250cmFjdCI6cmV0dXJuIHY4KG4sZSk7Y2FzZSJTZXRBY2NvdW50SWRDb250cmFjdCI6cmV0dXJuIEM4KG4sZSk7Y2FzZSJBY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0IjpyZXR1cm4gRTgobixlKTtjYXNlIkZyZWV6ZUJhbGFuY2VDb250cmFjdCI6cmV0dXJuIFc4KG4sZSk7Y2FzZSJVbmZyZWV6ZUJhbGFuY2VDb250cmFjdCI6cmV0dXJuIEI4KG4sZSk7Y2FzZSJWb3RlV2l0bmVzc0NvbnRyYWN0IjpyZXR1cm4gSTgobixlKTtjYXNlIlByb3Bvc2FsQ3JlYXRlQ29udHJhY3QiOnJldHVybiBTOChuLGUpO2Nhc2UiUHJvcG9zYWxBcHByb3ZlQ29udHJhY3QiOnJldHVybiBfOChuLGUpO2Nhc2UiUHJvcG9zYWxEZWxldGVDb250cmFjdCI6cmV0dXJuIE84KG4sZSk7Y2FzZSJDcmVhdGVTbWFydENvbnRyYWN0IjpyZXR1cm4gRjgobixlKTtjYXNlIlVwZGF0ZVNldHRpbmdDb250cmFjdCI6cmV0dXJuIE44KG4sZSk7Y2FzZSJVcGRhdGVFbmVyZ3lMaW1pdENvbnRyYWN0IjpyZXR1cm4gazgobixlKTtjYXNlIkNsZWFyQUJJQ29udHJhY3QiOnJldHVybiBVOChuLGUpO2Nhc2UiRXhjaGFuZ2VDcmVhdGVDb250cmFjdCI6cmV0dXJuIEQ4KG4sZSk7Y2FzZSJFeGNoYW5nZUluamVjdENvbnRyYWN0IjpyZXR1cm4gJDgobixlKTtjYXNlIkV4Y2hhbmdlV2l0aGRyYXdDb250cmFjdCI6cmV0dXJuIEw4KG4sZSk7Y2FzZSJFeGNoYW5nZVRyYW5zYWN0aW9uQ29udHJhY3QiOnJldHVybiB6OChuLGUpO2Nhc2UiVXBkYXRlQnJva2VyYWdlQ29udHJhY3QiOnJldHVybiBqOChuLGUpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGB0cmFzYWN0aW9uICR7bn0gbm90IHN1cHBvcnRlZGApfX0sRzg9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRlc2VyaWFsaXplVHJhbnNhY3Rpb246Vjh9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksYmU9ey4uLmR2LGNvbnN0YW50czokeCxhZGRyZXNzOmd2LGNvZGU6SHgsYWNjb3VudHM6TjIsYmFzZTU4Okt4LGJ5dGVzOkR4LGNyeXB0bzpfMixhYmk6bXYsbWVzc2FnZTp2dixfVHlwZWREYXRhRW5jb2Rlcjpqcyx0eXBlZERhdGE6RnYsdHJhbnNhY3Rpb246dzMsZXRoZXJzVXRpbHM6Um0sZGVzZXJpYWxpemVUeDpHOH07dmFyIFpoOyhmdW5jdGlvbihuKXtuW24uQkFORFdJRFRIPTBdPSJCQU5EV0lEVEgiLG5bbi5FTkVSR1k9MV09IkVORVJHWSIsbltuLlRST05fUE9XRVI9Ml09IlRST05fUE9XRVIifSkoWmh8fChaaD17fSkpO3ZhciBxaDsoZnVuY3Rpb24obil7bi5FTk9VR0hfUEVSTUlTU0lPTj0iRU5PVUdIX1BFUk1JU1NJT04iLG4uTk9UX0VOT1VHSF9QRVJNSVNTSU9OPSJOT1RfRU5PVUdIX1BFUk1JU1NJT04iLG4uU0lHTkFUVVJFX0ZPUk1BVF9FUlJPUj0iU0lHTkFUVVJFX0ZPUk1BVF9FUlJPUiIsbi5DT01QVVRFX0FERFJFU1NfRVJST1I9IkNPTVBVVEVfQUREUkVTU19FUlJPUiIsbi5QRVJNSVNTSU9OX0VSUk9SPSJQRVJNSVNTSU9OX0VSUk9SIixuLk9USEVSX0VSUk9SPSJPVEhFUl9FUlJPUiJ9KShxaHx8KHFoPXt9KSk7dmFyIEpoOyhmdW5jdGlvbihuKXtuW24uU1VDQ0VTUz0wXT0iU1VDQ0VTUyIsbltuLlNJR0VSUk9SPTFdPSJTSUdFUlJPUiIsbltuLkNPTlRSQUNUX1ZBTElEQVRFX0VSUk9SPTJdPSJDT05UUkFDVF9WQUxJREFURV9FUlJPUiIsbltuLkNPTlRSQUNUX0VYRV9FUlJPUj0zXT0iQ09OVFJBQ1RfRVhFX0VSUk9SIixuW24uQkFORFdJVEhfRVJST1I9NF09IkJBTkRXSVRIX0VSUk9SIixuW24uRFVQX1RSQU5TQUNUSU9OX0VSUk9SPTVdPSJEVVBfVFJBTlNBQ1RJT05fRVJST1IiLG5bbi5UQVBPU19FUlJPUj02XT0iVEFQT1NfRVJST1IiLG5bbi5UT09fQklHX1RSQU5TQUNUSU9OX0VSUk9SPTddPSJUT09fQklHX1RSQU5TQUNUSU9OX0VSUk9SIixuW24uVFJBTlNBQ1RJT05fRVhQSVJBVElPTl9FUlJPUj04XT0iVFJBTlNBQ1RJT05fRVhQSVJBVElPTl9FUlJPUiIsbltuLlNFUlZFUl9CVVNZPTldPSJTRVJWRVJfQlVTWSIsbltuLk5PX0NPTk5FQ1RJT049MTBdPSJOT19DT05ORUNUSU9OIixuW24uTk9UX0VOT1VHSF9FRkZFQ1RJVkVfQ09OTkVDVElPTj0xMV09Ik5PVF9FTk9VR0hfRUZGRUNUSVZFX0NPTk5FQ1RJT04iLG5bbi5PVEhFUl9FUlJPUj0yMF09Ik9USEVSX0VSUk9SIn0pKEpofHwoSmg9e30pKTt2YXIgWWg7KGZ1bmN0aW9uKG4pe25bbi5QRU5ESU5HPTBdPSJQRU5ESU5HIixuW24uRElTQVBQUk9WRUQ9MV09IkRJU0FQUFJPVkVEIixuW24uQVBQUk9WRUQ9Ml09IkFQUFJPVkVEIixuW24uQ0FOQ0VMRUQ9M109IkNBTkNFTEVEIn0pKFlofHwoWWg9e30pKTtleHBvcnR7bnQgYXMgVH07Cg=="}},"time_used":25,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":10,"receive":15,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"1nch-svap.com/1inch-assets/favicon.ico","fqdn":"1nch-svap.com","domain":"1nch-svap.com","tld":"com"},"ip":{"addr":"104.21.75.136","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"img","requested_by":"https://1nch-svap.com/","date":"2026-07-27T09:36:06.306Z","timestamp":1785144966306,"http_version":"HTTP/3","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"1nch-svap.com","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Sat, 25 Jul 2026 23:12:54 GMT","end":"Sat, 24 Oct 2026 00:11:42 GMT"},"fingerprint":{"sha1":"AC:8D:24:B7:93:96:7F:75:AF:8B:42:06:6A:52:88:B7:26:2A:AB:CA","sha256":"86:DE:73:A5:AD:EB:38:13:F1:14:61:D6:2F:48:3B:8B:38:4F:60:E5:95:4D:89:FE:BD:DB:2B:C3:94:10:DC:D3"}}},"request":{"raw":"GET /1inch-assets/favicon.ico HTTP/1.1\r\nHost: 1nch-svap.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://1nch-svap.com/\r\nSec-Fetch-Dest: image\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=6\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/3 200 \r\nserver: cloudflare\r\ndate: Mon, 27 Jul 2026 09:36:06 GMT\r\ncontent-type: image/x-icon\r\nlast-modified: Sun, 26 Jul 2026 12:28:53 GMT\r\nnel: {\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}\r\npriority: u=6,i=?0\r\nvary: Accept-Encoding\r\netag: W/\"6a65fd85-3aee\"\r\nexpires: Wed, 26 Aug 2026 07:59:12 GMT\r\ncache-control: public, max-age=2592000, immutable\r\ncontent-encoding: gzip\r\nage: 5813\r\ncf-cache-status: HIT\r\nreport-to: {\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=RulyQHQ%2BLm0tJPOn%2B6Wi3uCXCHr6xM%2BKkrpSl%2FmvOoQ3tp9ZRNdu2CiD2Q%2B1xY3CUGF7xCVXdo6lPxNOKFpcb57LlvmEBJkGdmlhFUM%2Fglhh%2BYMEbiqvmPRHObGSOv%2FD\"}]}\r\ncf-ray: a21aa86768485699-OSL\r\nalt-svc: h3=\":443\"; ma=86400\r\nserver-timing: cfExtPri\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}],"data":{"size":15086,"size_decoded":1286,"mime_type":"image/x-icon","magic":"MS Windows icon resource - 3 icons, 48x48, 32 bits/pixel, 32x32, 32 bits/pixel","md5":"31908dff9ea7e9277c2acea4585ddbbb","sha1":"9c9ff35dc4d4f5c0dd92be4a0d07fd548e63cfcd","sha256":"4a645a39a76fb11cdbc71db232e1cba11fd41c35c89faa88f4d130003fc42532","sha512":"9687b1737955a3e07e9e071120a7c37e59e29aeb2b902f502dbf97b271e5a4a964019183beacb309dea8e3ce568e86842a0ae46e7db3d4ee8f939ab37736e49f","ssdeep":"12:j/qsXGFY4K4K4XeatatatataItatatataYXXXXXXXXXXXXntcahD34E94E94ENgh:jysjahDcxoL2mmSJal","tlshash":"e262a154e2248da9dc009ab8ceaec7b51e92eccc2651cbe167e13f6730b57501c06f5e","first_seen":"2025-12-01T07:58:27.560916Z","last_seen":"2026-07-27T09:36:42.916538Z","times_seen":16,"resource_available":false,"data":"AAABAAMAMDAAAAEAIACoJQAANgAAACAgAAABACAAqBAAAN4lAAAQEAAAAQAgAGgEAACGNgAAKAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0BAQP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/QEBA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4CAgP//////////////////////////////////////////////////////////////////////////////////////gICA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4CAgP//////////////////////////////////////////////////////////////////////////////////////gICA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4CAgP//////////////////////////////////////////////////////////////////////////////////////gICA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/4CAgP//////////////////////gICA/0BAQP9AQED/QEBA/0BAQP9AQED/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0BAQP//////////////////////QEBA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0BAQP//////////////////////QEBA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0BAQP//////////////////////QEBA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0BAQP//////////////////////QEBA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0BAQP//////////////////////QEBA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0BAQP//////////////////////QEBA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0BAQP//////////////////////QEBA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0BAQP//////////////////////QEBA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0BAQP//////////////////////QEBA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0BAQP//////////////////////QEBA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0BAQP//////////////////////QEBA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0BAQP//////////////////////QEBA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0BAQP//////////////////////QEBA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0BAQP+/v7//v7+//7+/v/+/v7//v7+//7+/v///////////////////////QEBA/wAAAP8AAAD/AAAA/3BwcP+1tbX/tbW1/7W1tf8zMzP/AAAA/yoqKv+1tbX/tbW1/7W1tf9sbGz/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4CAgP//////////////////////////////////////////////////////QEBA/wAAAP8AAAD/AAAA/11dXf////////////////8tLS3/AAAA/yQkJP////////////////9mZmb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4CAgP//////////////////////////////////////////////////////QEBA/wAAAP8AAAD/AAAA/11dXf////////////////8tLS3/AAAA/yQkJP////////////////9mZmb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4CAgP+/v7//v7+//7+/v/+/v7//////////////////////////////////QEBA/wAAAP8AAAD/AAAA/11dXf////////////////8tLS3/AAAA/yQkJP////////////////9mZmb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4CAgP//////////////////////QEBA/wAAAP8AAAD/AAAA/11dXf////////////////8tLS3/AAAA/yQkJP////////////////9mZmb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////QEBA/wAAAP8AAAD/AAAA/11dXf////////////////8tLS3/AAAA/yQkJP////////////////9mZmb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+AgID/////////////////QEBA/wAAAP8AAAD/AAAA/11dXf////////////////8tLS3/AAAA/yQkJP////////////////9mZmb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9AQED/gICA/4CAgP+AgID/QEBA/wAAAP8AAAD/AAAA/0lJSf9nZ2f/Z2dn/2dnZ/8qKir/AAAA/w8PD/9nZ2f/Z2dn/2dnZ/9XV1f/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4CAgP//////////////////////////////////////////////////////gICA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/gICA//////////////////////////////////////////////////////+AgID/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/gICA////////////gICA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+AgID///////////+AgID/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4CAgP///////////4CAgP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/gICA////////////gICA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+AgID///////////+AgID/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4CAgP///////////4CAgP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/gICA////////////gICA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+AgID///////////+AgID/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4CAgP///////////4CAgP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9AQED/gICA/4CAgP+AgID/v7+/////////////gICA/wAAAP8AAAD/hISE/3l5ef+Li4v/AAAA/2lpaf95eXn/eXl5/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4CAgP////////////////////////////////+AgID/AAAA/wAAAP+Tk5P//////8fHx/8AAAD/bW1t///////u7u7/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/gICA/7+/v/+/v7///////////////////////4CAgP8AAAD/AAAA/5OTk///////x8fH/wAAAP9tbW3//////+7u7v8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/gICA////////////gICA/wAAAP8AAAD/k5OT///////Hx8f/AAAA/21tbf//////7u7u/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////+AgID/AAAA/wAAAP+Tk5P//////8fHx/8AAAD/bW1t///////u7u7/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9AQED/QEBA/wAAAP8AAAD/AAAA/1VVVf9FRUX/TExM/wAAAP9CQkL/RUVF/0VFRf8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAEAAAACAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/v7+///////////////////////+/v7//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/v7+//7+/v/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/7+/v/+/v7//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+/v7//v7+//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/v7+//7+/v/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9AQED/QEBA/7+/v/+/v7//AAAA/0VFRf82Njb/Q0ND/0FBQf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/v7+/////////////v7+//wAAAP/Jycn/ZGRk/7a2tv93d3f/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/gICA/7+/v/8AAAD/ycnJ/2RkZP+2trb/d3d3/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0BAQP9AQED/AAAA/yoqKv8KCgr/KCgo/xoaGv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="}},"time_used":8,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":8,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"explorer-api.walletconnect.com/w3m/v1/getWalletImage/4c16cad4-cac9-4643-6726-c696efaf5200?projectId=bc97055fbc522cecb678f539aea6c54f\u0026sdkType=wcm\u0026sdkVersion=js-2.7.0","fqdn":"explorer-api.walletconnect.com","domain":"walletconnect.com","tld":"com"},"ip":{"addr":"172.66.147.126","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"img","requested_by":"https://1nch-svap.com/","date":"2026-07-27T09:36:06.486Z","timestamp":1785144966486,"http_version":"HTTP/3","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"walletconnect.com","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Thu, 04 Jun 2026 04:16:36 GMT","end":"Wed, 02 Sep 2026 05:16:25 GMT"},"fingerprint":{"sha1":"DC:D0:F7:32:00:90:71:77:19:17:82:23:72:AF:55:89:00:14:EB:BA","sha256":"FE:88:1B:93:AC:1B:71:AB:36:AD:D8:5C:FB:D5:69:2B:08:AA:96:B8:CF:3B:C0:A4:52:8F:C1:32:3F:7D:8B:AD"}}},"request":{"raw":"GET /w3m/v1/getWalletImage/4c16cad4-cac9-4643-6726-c696efaf5200?projectId=bc97055fbc522cecb678f539aea6c54f\u0026sdkType=wcm\u0026sdkVersion=js-2.7.0 HTTP/1.1\r\nHost: explorer-api.walletconnect.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nOrigin: https://1nch-svap.com\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://1nch-svap.com/\r\nSec-Fetch-Dest: image\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: cross-site\r\nPriority: u=5, i\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/3 200 \r\nserver-timing: cfExtPri\r\nx-robots-tag: noindex\r\ndate: Mon, 27 Jul 2026 09:36:06 GMT\r\ncontent-type: image/webp\r\npriority: u=5,i\r\ncf-ray: a21aa8688e375694-OSL\r\ncf-cache-status: HIT\r\naccept-ranges: bytes\r\naccess-control-allow-origin: *\r\nage: 5813\r\ncache-control: public, max-age=31536000, s-maxage=86400\r\netag: \"cfi8b0hPD3q7U39aV1RkpFFz8RfmDcyauXnchu_YTSDQ\"\r\nserver: cloudflare\r\nvary: accept\r\nx-wc-r2-status: HIT\r\ncf-images: internal=ok/- q=0 n=375+5 c=0+4 v=2026.3.0 l=3334 f=false c2=0\r\ncontent-security-policy: default-src 'none'; navigate-to 'none'; form-action 'none'; img-src data:; style-src 'unsafe-inline';\r\nx-content-type-options: nosniff\r\nalt-svc: h3=\":443\"; ma=86400\r\ncontent-length: 3334\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}],"data":{"size":3334,"size_decoded":4048,"mime_type":"image/webp","magic":"RIFF (little-endian) data, Web/P image","md5":"adb282163d619a97ec44427f12df5d43","sha1":"a1c10417ed604229709795569d570036980334ae","sha256":"1fbbb4ff9c79d6a4c0d0545c410149d1b69fb38eeb25c787af7a91cc385701de","sha512":"cba016d4aa33a2753e9635ac97245e16d05965403d948a7996528f0514645f34b759b5978c4add2fe7adae5b32c7ce6e7ba50bd76cdda04a8f66108ed350b776","ssdeep":"","tlshash":"53614bdb0b0ea0a5147534360548fc1a315b87f07ba4faae2382cc689ea81f5da7c1d4","first_seen":"2024-07-08T23:13:45Z","last_seen":"2026-08-11T17:08:38.211174Z","times_seen":426,"resource_available":false,"data":"UklGRv4MAABXRUJQVlA4WAoAAAAQAAAAdwAAdwAAQUxQSNgGAAAB8Ibtn+FH/v89k1fewSbHJmMjmbVt20bw1tq2bdse29OdcZy1MzaCcazn40ZX17Oqu/Z+REwAxfH6+0mY9s6J9E845Du8KUmpan0o1X3/3wS8JioFSo5xXO4kwBBaX8x02bWbYQ74+QRn7T0DajMMdL6c6aTEXdtgRfnLGQ46YC40LaD7/T6OSbl7O6IB1FzglCMWQ98QBxjgj3o7I/2pFkSAoWZgyWWOOKYKYjPCUYMdsNtTLYgcAxvyY3fyTzBpTTl6cKyy3+xEhFiLgY3XxOjMP2HYDAuU0/aOSc5bXYiS2Yabk+Jw0RKYf1NUHmATwIy9I9fvC9h8SJI0DWCYrr8rOVqXr4bFhjvSJNTro25YXHRYhAZ+CZuT9iCTZ/0GsCk0PZQSlcL1sLj5GjKc9WIbLJYcGoncCbA5ZjiZP6VawjpofirD3jW1sLjqcrKa/nijBkOfgR9OsZQ3ETa/7E+2Dy0JM9n2YpaFxK0NsFhzMUUw5Z5t5oCfTjZ2gA+LXW/3oGjuO0PFJtD+ZraRxN07YPGPMyi6t9QFTC8538BBxbDY/ko2RTlvrAXgw56CtEebYLHiWIp6wYYAm2Bg2flax1TAYuvTGRT9wV/D5hf9QzKeboXFxYdTPC+sMcbAmiLFsZWwuOPuf1Fce3/UbYKhHjmEKL8bFv0DKM5n/gKwRHPlCLoQ5htuTVC8M1/qhPGNAyh7pbGJeRT/k6qMjSSizw3VXkNOTHu40VA+EV1qZuRQcuVhi4zUDySifrUGVl1BDk27d5uB6RQcJ+r+sh+5dc+ZspsU/xE19CXXHi3amafI3SHBFc55UjSf1HNEn7omUaHDgftDbhWt2t0xB7fqBFsODNm3RYJTHHMfpOWJECoXveKYBRoMgPEchT8s+jXNKSN2aii7j9U4tF3SdqhTboQ+4480jdSfJXjYKdMFwJuk+7JokUsGNYjO1DpetDPXIfmQrsjR2q1GgpsdMl70Cel/LFo729f01L7veb7ned7C6yWJN+Z7vud5nu8Ffc/3fN/31MWNKgZYcZHgXJHltyUp1Yjypr6CHqsj9Zqo1AaHcchYko50BrMeQ1YoujpWJVr6zAhlhG4bJupX6yIArALAilkknxynUi2W6DOAWwxcY4ojUaJghe3GvQxcbcqsrFQRynrMGgwwduQaGGuGtTgyrKXJUF8v673BBEM/MlJmVfhE2fkwyDAeKV1W1PYXfWzCYkxCr5bsvsIIA+wK5rDvJKcj0m+JqiMAgFVrewheF9XO8TR9z/N83/M83wv6C6+XJN6Y73me53ue7/teuO8pi5tCAA7gHL2030VPkDvHhbHqQ72jWdJ1hEMKQhiqvzK1noT09zSHDNqiYIR2Ha+TKBO9RC6dqdB9SeeAVkn3SU65SfRLqsY9kC7LcsqIXSGsaj9Eo1j0Ebl1YYCh+VBY3k7ROY55MAAGWFWaHHID9BlrcxxzUGsAjNDGfUOm6DHwHTk2uSyMFbhZ1b9OD0C+a+hpBZihnqPKh7Sut3OOVmluH6YYKWB0fdLfMfvNEKEokLNWEFxT5JLE3TugZDCHjAmcAzkDI4c447D5MLm5LxF9aCC48To3ZDzdDLAeB3AZUeYSA4zgzD0dcGwF9FnjY6JTYX7rbSkxy36lHWrWUa/qRf+3ACw4LFZn/AGDHFK/H9FFNSLmMDQ+nBqbXu92waK/PxFRnw8BMDgMAIcApcfF5LJl0GUOYzCw7Z4Eqc//CxY7Xs6MwYAvANaRTt+LNHNe6dRh1gN+Ojly/14Di7XXkPCEnzWEDKDr/T6Ryp0EmxNySZz5YqsZAAzUXBCh6zbB4vr/kNEjF4awBAzwJwMicoAHo6z6ciAZTn2kUQGwQLmuIAqJu3bAJKtWXU4WD1ug0uUwYNQwa0fMh0X+pD9ZTbl1q0R/8w1JVtKfaobFP88j63vOAFjAHALM2NvCsZWQsk7nW9kUxVtqYbH+jmRD2a+1weJvZ1JEh42yACw61MiZf8Biy/NZFN3CdRbQ9FCGqO97nVCykcpjKNJDvrEAvC1JmgGLzU+lU9QvXqZigJkFYyQp5SrWY4CBxUdQDHt8pJAzMFJUqgIHWAPb706heJ7/lxEY4oA+A8UHUGyzX2qLjD4H0HBnMsX5lB8BtlcSxgowA5P3ophnvdCCCGlu/j858MgSgAGwhVIAHMKBCXnkxJSHmhAB7dWF5MzDFiHIVljjy/7k0OTb6qFrBsyKlZeRY/eeAbAdZfdHfcm5STfVwRIDv59JTs4bawldb2WTqwvWW/n5dHL4oFHmWp/OIrdfUgN8Z6LiGHJ+n/cxRlTV9kQ6/RMWvSxJe/N4iiFWUDggAAYAAJAlAJ0BKngAeAA+PRiJQ7+hoRv91334A8S1FsAogrVA4ArAD+AaqA/h/8dXBah/dOqAr92/8nf6B7ttX/sv4e/KnqzEmdgn9X7sfft/t/Z/+ivYA/Sv/TfrN7QHq58wH7b+rv/eP1V90P+E/s3sAfyz/hdZB6A/69+mx+4fwTfuV+63tjeoB///UA///C5/gx+jX2eOt4xCWP8xnLaCc7xd8zSLbr4+ascatEGmkjaXlrFhI2RiDEsr2ZT8QrIkE7u8JCtQycbyfpfzAFGnYtUVqVH/TJWczsCScAYijYeZiOzewsY2BXyCt3nFiJe/SyCpKXLcXbhDfkV4pcU/QyIoLkEivGTzvx+/grqjebackIFwJO3i8KDhT7yCJkhI+mJip4fe1u3Q5eyNG93kekkD8IUnAAD+/u6qQWs27Rrvc6dyAroGLvEjKReySoMtztoYHXJMzhs5L0EcfbsqfVJTmBX5+/XpiEhd9n3g4PfN0CSG77hwctsz3t2fJqsFfS1xpUHKMZ7ZzeDQdvjABjvwFF+AGRf+GDXkyZUAIAV/gzjRFq50AVjsNuFvuAf1+ncw/AWOmfMqm+TrnfZk7+j5WQS4hsUp8E2h9wzPgJh07Bgb9iW3yzBThIZaYP4VWfPI1WxZ0viScLpaaIPkNr2QChQNQNYPwGzCdqCjauIi1zyItM5tSiL79Che/F89AQoqtrV+/bD+E4+Yw6uWJH1g669t///rbtvHTkYN0HuWqCafEWn1eb/5XA61g/+I0uIOyXv/hP9+Bxs05WXFYz/ghYz4dJKF3NPxpVivNvhn3v09cr5e7f7sX/VSf+MkPxfhw9XPpHV93hUAAFIFrBc2Gc1qEe9Xhmez7EUk1N99nbvv9AetGKWdw8Eq3z7CYmu25osofryf0O3DLa36zmCRBKYa60taREnDT59yD5EnJ89ev0S/AjtUrahJCoWVzsPPXV62ryrrHFqUgmHKc+NKFinqfBVzzAX+EutGu5on+V1v//wFtB4x7pa/ye51R3hq+bn3wE0Acv9py9nC1e1y0WkUataKweHF2xKrqUqLXe9UbVkuNJ+/nDixysG8EIobzq4ZsE+G5JCbwcP4XMlNWYU/7kAuebi3oIe5zUtDFP6gjYEvyJMLu85RolC2t65z/p6d6UcPmy5cGXQH7J0g7pA6IoKza8+sHUdSPlNU+717W7Mf4X80xt1w13rm/W2C6xJWJZWGS1tqNtCu2TuBfH9+/iaBbDBHZ2Z1tdXsrbGZd/IaT/8M3IqFIA6Lhgk93GwPC2q+5cXlrIDmGR0ORqMA3a38Mqa3QNw/jVOkESpyF6qAShL7HnBTLgF1KRzsU/v1ADwrOZqdTzSrN7seZU9uIN7pY8iOog2UyuRc7p5Ppndpcj+Bnk4tahB5Y0JC8ZMJp7dUfE8wReY8OoRsg6oqWA6ElcHRttlwLHO/XtabeL9xN2i0vAvCgUHxXezO+FACaUFrzm/ipUvL//ry5QAMt1NA+7bF/fYbemytypPGuzHzz9NMkH/dkPff0dC4rrEq/LvS1GqW+9FFr5lHD+Pbbg9oudG8+XYl8OzkpxMchIul429o3BFjlaLCNIm+GUKfxxMhLtC7YTQ9LZremNI9BTrVk0VKzQPjE/1nCfqdWqYedPIxwePWBgqM6JJ+DyAzcn5kuBSM5Y+64ksHDR0iUVGkHt9dRha/9Sz5xjyNc7w1fZVIXM56Wk95wD/X5JyysWzWA+UZcz7gk5GD1v9abwrEPEUPSpvqyVS5gdF2bJ/nirVrWIDO8bLz2xZo2Ge0lYFp9SPuTG+5f4JqD3jIIIGUGlmHkaJlOe9RY6LlrzqzOP3f75fv9p5i4imtXfFwqmssRIto+y0kmvrqgAz1MiyrRl3KpNvZBiRv9sgRptd5SwqPv1wcdHTBfQUxTD7afcyD//7Vw2Q0lP0HgBvP+2a38vDdjgc7oIPKN7svWDuRN16p8IZUwKe6WTvXoOLjkAsdOmCkZWinZgSRf5ZAPXaQ8iH/W2bx52OI+59rubu+z3FtE0AAAAAAAA=="}},"time_used":26,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":26,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"explorer-api.walletconnect.com/w3m/v1/getWalletImage/7eca0311-abf5-4902-43e9-51858403e200?projectId=bc97055fbc522cecb678f539aea6c54f\u0026sdkType=wcm\u0026sdkVersion=js-2.7.0","fqdn":"explorer-api.walletconnect.com","domain":"walletconnect.com","tld":"com"},"ip":{"addr":"172.66.147.126","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"img","requested_by":"https://1nch-svap.com/","date":"2026-07-27T09:36:06.488Z","timestamp":1785144966488,"http_version":"HTTP/3","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"walletconnect.com","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Thu, 04 Jun 2026 04:16:36 GMT","end":"Wed, 02 Sep 2026 05:16:25 GMT"},"fingerprint":{"sha1":"DC:D0:F7:32:00:90:71:77:19:17:82:23:72:AF:55:89:00:14:EB:BA","sha256":"FE:88:1B:93:AC:1B:71:AB:36:AD:D8:5C:FB:D5:69:2B:08:AA:96:B8:CF:3B:C0:A4:52:8F:C1:32:3F:7D:8B:AD"}}},"request":{"raw":"GET /w3m/v1/getWalletImage/7eca0311-abf5-4902-43e9-51858403e200?projectId=bc97055fbc522cecb678f539aea6c54f\u0026sdkType=wcm\u0026sdkVersion=js-2.7.0 HTTP/1.1\r\nHost: explorer-api.walletconnect.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nOrigin: https://1nch-svap.com\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://1nch-svap.com/\r\nSec-Fetch-Dest: image\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: cross-site\r\nPriority: u=5, i\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/3 200 \r\nserver-timing: cfExtPri\r\nx-robots-tag: noindex\r\ndate: Mon, 27 Jul 2026 09:36:06 GMT\r\ncontent-type: image/webp\r\npriority: u=5,i\r\ncf-ray: a21aa8688e385694-OSL\r\ncf-cache-status: HIT\r\naccept-ranges: bytes\r\naccess-control-allow-origin: *\r\nage: 5813\r\ncache-control: public, max-age=31536000, s-maxage=86400\r\netag: \"cfJWxIZt1IcxyAO4jn2WoDVo02fmDcyauXnchu_YTSDQ\"\r\nserver: cloudflare\r\nvary: Accept\r\nx-wc-r2-status: HIT\r\ncf-images: internal=ok/- q=0 n=37+31 c=21+9 v=2025.10.9 l=3014 f=false c2=0\r\ncontent-security-policy: default-src 'none'; navigate-to 'none'; form-action 'none'; img-src data:;\r\nx-content-type-options: nosniff\r\nalt-svc: h3=\":443\"; ma=86400\r\ncontent-length: 3014\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}],"data":{"size":3014,"size_decoded":3703,"mime_type":"image/webp","magic":"RIFF (little-endian) data, Web/P image","md5":"75d3a002591aa1041d731e21d91d858a","sha1":"ece6b468255c24c5ce41a04637feb44f55635766","sha256":"6d797a42aa08cd4b44453528df5846fbc63653070ae60757e824e64cad243a84","sha512":"e30a0dad6b9e2d9311db6db38c57b47616b07bcf7f5e332a7339936591148454abffa4e22646b5d33e142dc4587507c1aff13280863722587bd6897cc2d2561f","ssdeep":"","tlshash":"64512980677adc68cb58021458d9cb1ff5690be207069bd87b033ca8786ff9915a3c59","first_seen":"2026-04-18T13:33:30.464808Z","last_seen":"2026-07-27T09:36:42.918544Z","times_seen":39,"resource_available":false,"data":"UklGRr4LAABXRUJQVlA4WAoAAAAQAAAAdwAAdwAAQUxQSOICAAABCirTtj1uq887aUsNhVJWQH/BFXqEgnrvEdQY6Y8YpQf2JpzeE9nQ9HQhF3k8Qpr5TlHZ/b73mUOffd+ImAAGn1brzZV255eN/sCXphu/dNps1qupE316sfV0fcfnqnzaWjShssaLri+4S1NxKva674NUa1QkmX+w6QO2+wtC7Dn2oQzeju2JLzm15qNcPZlEtvTFR6sWU/awjFqzWKaWe2XkakkUtTdewLcaweVeKaJeCS296cW8aUEd+uIF/XowoJk/SlGNwRzdLYWlBnJ24MW1s0Fc8iJfCuCsF/psYWpSmRY0s1uKzZlCDv5RCm6HCki/lKJ/TfO76YW/mdsVL/7lnGo9+bSWS/LWA3wzlcdyCdFyyHoYNJvsYQlSJ1oqYdoEyRccmox30gM9NdaeVSRrNs4xD9XG+YDFxlgowc6Puo/mwYjKJhqrDGt4uDbsNR4bkvXxaPafRgnY/vMCER053UXUNXLRQ6ZjCxMdn2J6ynQdE626g0mt7kHXm6iaK6jYRqUdVPYLKttApX1UOkBl5f9uQ2WKSjdQ6S+orIPK2qiUqNhE1ayjqld3MKml65ho7immp2QLEx0XMdFxuouoayRfIKIj2UBk/8n6eDT7D1/jMQ5t4LFhlU00VhnGB2juc+Q8moVR/IDFOOYxLDbOnjUkqzYOTyE5ybGTLzg0GY9LOIyTPkShnDjrYdBsMi5jMOY49QbB2yQP1nryaY35XpbvCvO+Jd1N5p5+lc3S/HjoD8nsIIuc2ZWLM67YowOpTFn0WanOsvhLMl1iiGdNHjvLMHVXGqoLdeYPWYwu3INfJbFDDDm9KcctY+BXejLoZYZfeyvBG3UxJsu92NSmXKTZw7g0Y8RLX+JRY9zJydU41k4lLvo9xz6EZ8f2UMaF+5sh2YN5ClppvO6HodaoUNrMXnSL6tLUyTy92Hq6vpOP8mlr0ZzoabXeXGl3ftnoD3xpuvFLp81mvZq64AFWUDggtggAAJAnAJ0BKngAeAA+SSCNRKKiIRRLTfQoBISxAxQCBAfgB+IGeAQIB+AFnojePr6j+0emFX/7L+EuQ8OL2b/nPu4+EHqa8wv9beln5jP2n/Y73d/RT6AH8u/pHrLepV6AHluey5+5HpKZpn2I8j57CZxL67/kfyG/Lfnb2GN6eyF/svy38wHU479eaD/jvSb/DeEXQA/mv9q/1HqW/7HmA+n//D7hv8g/s//F67XodniL2+A9N4euVoC1VfRwL5oniDgyhdzfQAsdgG/bGY4x6HJaCZhuquQTNt+UxvPXId5Uewud7PxzkafqV4JbFD5lqL8f41y4FWASBvf0f5auB7Q3PAu7Yc0Zb8Jekw6WQLVt+VE4Qzpok0yZ9cjHYNM/vd3HVcH7bvnQuNW75ZR0cHvnWJlT8xFdPgoDyV+BL3j+Mjq274AA/v5Hlx1/Gp/UpPMt8hPLiE+dU4XSuTrLhg3MEEhWyQtxaNdbaJJw9/ES56Hg+GIyU6JveB7k63448BEUcaI4eeAFin9h7dvd1T9XQDswmx/re/KjfIDd2fAt9jFS6gabRVfSP1BpozibgUVkf8DjEG/ruA5YaJWx32YHdKR3O3+6u5kANS+SDfSzN781IVTWK+BB8iUpRd7iLf4vfbhfaxaSohzyGYCja/LMuovv9KH03ayseMt2KOKhkFl8PwqLlzWo1KmDNaooAsR9l+dweYtvsrqtNO51dwp8coXsJvovO+r2nR5Ixkj1vX/MXWCr2yp8bJwwZ9DyeM0SsnLznF7mH7qY3cs//gq/9HwyuEEzGnAPg6RfB5mTjYmjKOkrN3DZrlfDndGe9lFGyz/tMQ0nW/qpWvqTHBwTxjHUwmI85CqevsbHwLoniMxqVwlnRTOCdN7Zl4mX//9MboL4MtUg+hXnkBBWZbZpc7lmoJUQLe/rMRi+85iL6RsMpCTgHE9icJROixDHP2gfjcm48t4iH9rh/QBvssYkpZSnzvWgApju9zc3DtIw/wGdFMPSrnDsEpGOsnTxKZ3siA3v8f82b2kkpeIqPP/3pH8ndswK4kEWHTZxywlnNxZETkt8ciMGU9Ab9x4pMBzCxQPDKMXVws+3Ksg0quF3T2HKS+w35dOYDzaknDjvYsbfXq3MWEKmePD02ItloO6KAr2KkJ2cECmMm4ghS3kNEo2zt3Zs3/AidtlI+/TAy7hMTO1+D+ty79jt5hTRDhqvc0hRVyy7c2UaJ4C2VYcth2K+B4oi3kf1nlGsXH40kblV3ZW/BIA1Xp39E3U+mNJqK6M5yrHWcOH++2w7tJMt7prYi1x//5TQRZtYecARcuqA4Js7CFKihsd/vSjM7kBy62H66bWufu3Vj6OtsLj/km8YYe5NO/+ov9U/ABrcBFazRhOui25TUFqSMnVp2vAe+cOy0N/8O60bMk0xrBIdoGquqmwflKLQTHP6F2M1RnXMP5PXW+LL0r5nK7/9NIhjolqPZa/+3f7mNCeYFLwcJ8v+ObrgqhwtqxoS52v9jFnxuzHHHj7wgcTY7JpHOKj+GBjv73r3wujcY2A/RRxQAnp2Q3apWT0AwYIlEiUiLbALHLaUG2IARSs5NBGPbnB1/65iuDvxBfdh4duQaoi98cvt5B/q38VpeNPsk9sUkboOR+Blo0uK9K0Zt9KdV2AMGe09oESRP5SIgRpxaMauLddqGM79W+s1INiMaJ0k59+6pQXq/8Krm3Iezr8mLv2ykWjHvl8VjEm905pKfoi6Z0xIkwlftyGAfPnT7bPvcfYmiN+fvbhQCllpBNR+rBKFxuH26ei08R6GTp1kIQvdmXLJ0HzC3djxN0ry4K9ridBNRlRPWqvcZeXv1bzTRa4gPy8MpmzXF6Ha3yjK80YQ75Ocu4GlScKhV66gskre9Zz7EH72fCAEtrrEmQrMTr1ft6Hkm0lSbLvE7+wVCu3UEHkUCgA/tKeE8SniyD1WjZ+yYRtZ1QwmQ3oA0kuIrRca5N42dmW5/st09tMQPyt9TzKp9RSze/wZwBYtU/JyfyGbBWD5sOUie6eW45h9KeuWiYcpKMw/2WOts/FQO2R0eUeZFq7waz2lXtHjX2UjN1d/64Sqb+U/E4/wXg8nDyAnsfRV8lexzY4ZvWAYLver4YxV55CgxyRwf+XnP7/xsI1YW2cgLm9IseJDPtV1367MxV1z5g/8JW//2f+J2vxxhdFB0gjf7sw6jH9drFtTXkZvHqGa49n+U/3s9xUbdW4UCuCHpcR6tq+DhgQz4axvzNsK9yv2POwyC05b9L7FnpXONISX4sJNbgVkqjVKq+usu7kqPxC2nHuYW59fhbV9m4OcCb0AWiZalMVCn+T3R0xaw3WmMkZnGe8vPTLm39nrLnGxn0nk0GHQU/7/oQww6dfaAdUQtwY6kH8pW8ohneu2N+RSTD9Uq9S6AaQx3gdGRIQ+AkzPHOuDPAB4nXL8W9Tm+QuQl8KPeFXRlTOHIRr/xsJfQsLYUfV0oV2wJLsGKrz8/ZruwvjSrV3cpvwy0DEcQFCN03+tw0hu1dj7Pu8tMnpJMACdGJu4W8tOgYp+s55RvH64ns1klihenVXnTVUbrfBY5VApVwF8m4bShPbQCiOoqjM1aCAIeZxSCWdGC05zRJK/7pQp/1lW3uqqd/57tH6TQXSTN9SayH5xjKDzagDi4RJr6XxRQTfNG5Sj47ip/Lt7mK6tez6L+Jkche1agwAvgcgNIbdZ/9HwYOiChaxYSoj3T3Cc4QL3O8CdwU/+Jji3/jihCBKHcr6QJ1ZfnDysrHFvbmDFX95AK4EOu9Wz7sSKH0p6PMfq74PJNFAi1idi9GCP4+HLvCK6M3SMdczudmMwxtmdHM2TBwjk+Xa7ACd9TOCA04Zq/Sh8zSACZN+mMKxxqmR4MPZCy407G7TKzufRFPNToJNnlFbr3W+e/Q/mPqvVidYUM5UdCf92T9aPjsOj+FMYRDWeQaAAAAA="}},"time_used":31,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":31,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"explorer-api.walletconnect.com/w3m/v1/getWalletImage/7c2cee4e-a5bd-4ebd-277d-f496c69fa000?projectId=bc97055fbc522cecb678f539aea6c54f\u0026sdkType=wcm\u0026sdkVersion=js-2.7.0","fqdn":"explorer-api.walletconnect.com","domain":"walletconnect.com","tld":"com"},"ip":{"addr":"172.66.147.126","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"img","requested_by":"https://1nch-svap.com/","date":"2026-07-27T09:36:06.492Z","timestamp":1785144966492,"http_version":"HTTP/3","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"walletconnect.com","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Thu, 04 Jun 2026 04:16:36 GMT","end":"Wed, 02 Sep 2026 05:16:25 GMT"},"fingerprint":{"sha1":"DC:D0:F7:32:00:90:71:77:19:17:82:23:72:AF:55:89:00:14:EB:BA","sha256":"FE:88:1B:93:AC:1B:71:AB:36:AD:D8:5C:FB:D5:69:2B:08:AA:96:B8:CF:3B:C0:A4:52:8F:C1:32:3F:7D:8B:AD"}}},"request":{"raw":"GET /w3m/v1/getWalletImage/7c2cee4e-a5bd-4ebd-277d-f496c69fa000?projectId=bc97055fbc522cecb678f539aea6c54f\u0026sdkType=wcm\u0026sdkVersion=js-2.7.0 HTTP/1.1\r\nHost: explorer-api.walletconnect.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nOrigin: https://1nch-svap.com\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://1nch-svap.com/\r\nSec-Fetch-Dest: image\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: cross-site\r\nPriority: u=5, i\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/3 200 \r\nserver-timing: cfExtPri\r\nx-robots-tag: noindex\r\ndate: Mon, 27 Jul 2026 09:36:06 GMT\r\ncontent-type: image/webp\r\npriority: u=5,i\r\ncf-ray: a21aa8689e3b5694-OSL\r\ncf-cache-status: HIT\r\naccept-ranges: bytes\r\naccess-control-allow-origin: *\r\nage: 5813\r\ncache-control: public, max-age=31536000, s-maxage=86400\r\netag: \"cf9e6rjyr-bBkWoPuSw_vsUwKifmDcyauXnchu_YTSDQ\"\r\nserver: cloudflare\r\nvary: accept\r\nx-wc-r2-status: HIT\r\ncf-images: internal=ok/- q=0 n=10+3 c=1+2 v=2026.4.0 l=1508 f=false c2=0\r\ncontent-security-policy: default-src 'none'; navigate-to 'none'; form-action 'none'; img-src data:; style-src 'unsafe-inline';\r\nx-content-type-options: nosniff\r\nalt-svc: h3=\":443\"; ma=86400\r\ncontent-length: 1508\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}],"data":{"size":1508,"size_decoded":2221,"mime_type":"image/webp","magic":"RIFF (little-endian) data, Web/P image, VP8 encoding, 120x120, Scaling: [none]x[none], YUV color, decoders should clamp","md5":"9e8857769972441243d690548cf3e485","sha1":"38328c4d250c38d98763e7b89cfeca1b3b7bb2c2","sha256":"7e7be8edd769cd0ee13580176c51f034867846e592e3434e4b0f30f2cc8b709b","sha512":"121207c756badb363bc86cc8c09ab16965dd26c89d151bc25bdaf3cc106621ab5eed1ef14618394595d80309e2b322e853b20a0f55baada496a60aade841a670","ssdeep":"","tlshash":"7231b59e09441c24511aaaff2ccaa4ab32b5249268afd635c30b5ae6a65454d383f1c8","first_seen":"2025-10-02T02:13:48.566179Z","last_seen":"2026-08-12T07:04:43.478048Z","times_seen":789,"resource_available":false,"data":"UklGRtwFAABXRUJQVlA4INAFAACQIACdASp4AHgAPkkij0SioiGVSkx4KASEsQBrNMz/APyA7+ipHZfxh/I7pLuDfkX5x/HXpiT09Tf2/7h+0X9wHuAfpB/p+o/5gP2A/Yf2K/0T90n+Z9QD+tf4rrDPQQ/Zz01PY6/an9tPZ7//+cl/1rtZ/wHKq+rmT6fK8IO1T/ht6nhFpApkPkP+p/YN/V3rO+ir+zJe1qUiXp9g0S4NAldjbmDS+IRRWsQ+vC7a0/W6v/R7GZlFYzBp4FuMd67hQUFe7ZQG2wY6p14LLNiMdU/pfMCDjVwLPI6jldRIXvLaSjiPcQDwSXC6y6kJuNwy5Q+cKBFtxW7QYdNItkVS2WCXPLa8rVbQmFasAAD+5fn/SGy+0OQ13GhRfPoAAACrjKs3/n9kyZmiDS+5bueB0GUtKTpUtjrw95/xvFRUjzvwQvO4oGs6CDpgt+CudHs5/js9Y1jBQaJGalT4AJWMAe0nxqGOK8HXHTsxjCvZ/vzoi9uWcsP8eSi9X5uUteoMiiL5bfmRVBOhpQDvgin5SrPHLc3BUr9TPUDEvJ4NXfvqq59QdNT8/upv/Czmr7y53Lj4jWDGf2zh7MkD2TVm9augvyLdC+nLveRFI8joB9gp+NhO411WgZOrPxVumkJbC/SziHCn1lnmXFr7hgIz2iOq8h7N+embLxf3LAopkN0Mgm+d4VHDImblTSw7dZJ2f4CbQkJc+h3YWb5ywRZ9qjh6FeXFZISFl0lPmmRvS6ojmmOQWcZl5bvR8vyLXOzqo2LrNHorou9347rg3QUjXBxr3XQEH2DR9KKQKARrfOkmUlf8FgQV08UBemHH791URbzlu8uO2KH5wLDPC2dAxvhaIop8U+aFcj/P/EUcbYumR6aDmM+pnyg3+mm54wu9sLvD+8Iw0OVd2mT3BTe6DNBp4YiSmsaY2wa/BUixdvEUVMFhL77nxf0+g824cprz94D+bnTOJmwt3Jb8MMbiH1HHYb85CvJyVj2hSo1K5wKlSrZAmIG5UGckF4UnXTdino88Ka+d7jTBHbZpx3AKmWFxaznMoale0E6AAhS8glLp7RE0ZdEtSW10NYJ/Rml7mkx0iwYPbUfkLPC1pehDB+UbCCYe5xCP6e3+x4OAPVS3vtkkhFXZDBif7pTf2GGsBkvCsBf3sSVEs2FO/yoXLYKE8dbf77Y6Mb1qxQkSCyFG1vOryeQI+ESJ/cjsavSKSZjGvTq9JngTi2H1cb7n7ms8N7iW9Fh5k6vjbjDce4u1m62ofFnvPw9AF3oiNYKIa0HAqtH/9TXfpbCD43O6Y/QmyRLVN0rW1sSzpHgCJ2HOC5vzu9BAk4SUWAqLghAqsUnYxfdcpNcDPDiDCgUrnheU07sjUEg3avCxxmVVnc0/QIToSS1zgim+mMSh6ni3IXdajcqQ7t8+HhxB6BS65cD7hW48U4/la8E98XL7n7ME07nMIaUBj+DV3URvLI2TtAKNd67kYRAgc+Qz4xecdG82OfDH9O1A2HyLNCD57TbMwmwDRzQHAO18W6pyZAcle114B210ZfTe9Th2bYV/f/AtRxCFRMqNyHlnw+PnH/X7lHD9faxP9L1NgfiIyf+nzFkrBELfprtNDmlmzhnX4cFznQLHyCWV5lVZqyyRf5xq75sSrd0NSBsPW6DKL9/VA8BVJ8/YinVAw7WgIaax/ydRbeIpYT+H4JWvHlYseIdp7IBrym8aSEVOrLKFpBB0mr/os00wMCAymrDcATJH1Zy4vTrkvXYMiej2Zm6ZVhyZkvZK69vkNGj61j6Z+83sTTA9aQ/UUKsyWg6rcbfZnsA7nDvHSx1YT+XaZax0clGctbGE5x+FteopmaVyQ9tImj87r8NoTm1F84qMT5QzMyDTWko/Xcd9L3KsWAE/b0KGPPv9w04YzcRawgUda+Gp/eXynA93rW8+cBa6X3hZyxvEWh7MQuVnu+zqg1mG9H0WGXlWgVImlgABMgAAAAA="}},"time_used":27,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":27,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"explorer-api.walletconnect.com/w3m/v1/getWalletImage/67336675-0daa-489b-6885-cb95234bc400?projectId=bc97055fbc522cecb678f539aea6c54f\u0026sdkType=wcm\u0026sdkVersion=js-2.7.0","fqdn":"explorer-api.walletconnect.com","domain":"walletconnect.com","tld":"com"},"ip":{"addr":"172.66.147.126","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"img","requested_by":"https://1nch-svap.com/","date":"2026-07-27T09:36:06.493Z","timestamp":1785144966493,"http_version":"HTTP/3","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"walletconnect.com","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Thu, 04 Jun 2026 04:16:36 GMT","end":"Wed, 02 Sep 2026 05:16:25 GMT"},"fingerprint":{"sha1":"DC:D0:F7:32:00:90:71:77:19:17:82:23:72:AF:55:89:00:14:EB:BA","sha256":"FE:88:1B:93:AC:1B:71:AB:36:AD:D8:5C:FB:D5:69:2B:08:AA:96:B8:CF:3B:C0:A4:52:8F:C1:32:3F:7D:8B:AD"}}},"request":{"raw":"GET /w3m/v1/getWalletImage/67336675-0daa-489b-6885-cb95234bc400?projectId=bc97055fbc522cecb678f539aea6c54f\u0026sdkType=wcm\u0026sdkVersion=js-2.7.0 HTTP/1.1\r\nHost: explorer-api.walletconnect.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nOrigin: https://1nch-svap.com\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://1nch-svap.com/\r\nSec-Fetch-Dest: image\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: cross-site\r\nPriority: u=5, i\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/3 200 \r\nserver-timing: cfExtPri\r\nx-robots-tag: noindex\r\ndate: Mon, 27 Jul 2026 09:36:06 GMT\r\ncontent-type: image/webp\r\npriority: u=5,i\r\ncf-ray: a21aa8689e3c5694-OSL\r\ncf-cache-status: HIT\r\naccept-ranges: bytes\r\naccess-control-allow-origin: *\r\nage: 5813\r\ncache-control: public, max-age=31536000, s-maxage=86400\r\netag: \"cfzPe7jvSa4xP7D5TpKwzld3fWfmDcyauXnchu_YTSDQ\"\r\nserver: cloudflare\r\nvary: accept\r\nx-wc-r2-status: HIT\r\ncf-images: internal=ok/- q=0 n=11+5 c=0+3 v=2026.3.3 l=1872 f=false c2=0\r\ncontent-security-policy: default-src 'none'; navigate-to 'none'; form-action 'none'; img-src data:; style-src 'unsafe-inline';\r\nx-content-type-options: nosniff\r\nalt-svc: h3=\":443\"; ma=86400\r\ncontent-length: 1872\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}],"data":{"size":1872,"size_decoded":2585,"mime_type":"image/webp","magic":"RIFF (little-endian) data, Web/P image","md5":"22e9362b85988b530343c1d1dfbbb03e","sha1":"f13d35d31f007ebab931b4f83941696cf3ae4166","sha256":"62e371133a4d06e6eb548ff6d6a6a7bdedd5f17a1041da6cf90ea6e05032c187","sha512":"9ffac36e9eb91fc250d390572e701764e3c46e458223c7d256236c49b7b051ed5a580f3bc3f0c7a32a3ae933990b9632782343d54ba6eabdfd17c140b4a4353d","ssdeep":"","tlshash":"2a31192f439e05e6644b2cc8334a974ca4b03668f0966f1433755702c22e81ff577c43","first_seen":"2025-03-04T08:48:45.503749Z","last_seen":"2026-08-12T07:04:43.646827Z","times_seen":888,"resource_available":false,"data":"UklGRkgHAABXRUJQVlA4WAoAAAAQAAAAdwAAdwAAQUxQSGAAAAABJ6AgbQPGv+P92YiI+PFCQRtJypOAkbAS3r9D5v9E9F9t2zaMsrXRTvJCMAVDXSbORNqOKa2J0xGJML4xymph+Vm83W0Tsfta+8Vk2PDNf/6wZcdWFEbfQuH9+1X5QwVWUDggwgYAAPAgAJ0BKngAeAA+SSKORKKiIRWLpDAoBISgaGZIijvcXq/+V/JH9mers5Y7z/k9kIPtz99/M7/Jdpf7mfcA/Sr/LdQDzAfrX+r3s6f1X2K+gB/Wf8B1hP7R+wB+qPpZ/uJ8GP7C/tt7Pv/59gDfQmQ8lAkT+0MQK1nuu2Qv9RxuaTKZT4/fqj2DulL6J5aEkAuTCwhe/EelDWbXbVf64sVpUt6RibtGSHlzy8hVY97iMOfiA+QWXIBOsJoEgjitG8kMz3fZgV8lybEohFRRDmaQ1BaCtunE32HpHU11cHcrtZVsLniU/fS3emezGk1lmihyrsQwy0f33+7x/39X4hXFdKKxEIVhvBLs6e/zoxwAAP7qkKWL/+Mpe576fGVP/FbelcLvitWDVBLJpcAMWUtUGMNJ+28ItpZq3Sg9xTSbsdqHnSLYo8N4J85z2R7Jp7m9EexzaX9sbSChjGZ2Wtti2qzY6h8Svw8fMU2UZNcOqG1eEyD+eSqE0/bLvvCzGH58FkoAsxGozSPESy+XCf8cervKqmt5T6wpxeblRdphKK1j/Z+H0DgwxbtLyu8MJFIvyB53zD3myj/fzSXaImt7ZqZZG1bLHqspYSb6f/NzPiPkB2nGzjuxQgvysBZoLPX4LAWTGiB8CJ4++nEkgTxLqnG3IqSSq0GsjwpDrN3sMd/J6qzDD4ZjDYd9obdY+z+hB/+8mKInhZq9YH7I8IkbaBhEkymG3V87l/LhzTV/Ywrd024tEUnE1i+pJFWWg3wIurm6PwZLdEdXxxeXTbyReH64XwPltnCPTjW5T+CKn2fAudxgoC+3XYYXwenFr8nmX4l352pMZmr9YsdK9/IFlaDT+4RwAnebPQmcMzAa4jat3R46G/8Js2cdmisAiYy3MkC4fZGXUXysvd4LHFnDVyJgXJjZe4f8jQxx9SMh+qXx7bsaYrKl5/DtmUkkAVTGFnM3R4ckusHNW/zxcQnDGqIK8GGh0dv6RtzSA1DUOwU6AHEee4aIet/omkM/C4pIJvaw7ck6knjXzr7Dw4KFJ5iSR84rtVFf1g97L5/UQrT4LiSYOT4iTuN/VLIN9IpWh7IAtGEFBtAHyUEOdteDuwCeRgyOCyAttt5WzCpl3dutBkuj4qtbAaDCQYg0iz4ZIKbPKA+XGAXbSTUVCibjXnpI1p+tM9mIiMFojgLbcUFPG4hYjhpgx9NiT5NiOfryVL6PMVad2eGQOC2HHwMeBdKEImXj5oAeJnyjuV425/SyvmO+mkw7DJ6GhYKmAaYnrWSHUbuA6ffPGC4dHcHlGNjHI5hybCOLx7+GK0C7pCP9v1k8dKy1MWyoM5Pndsv2Og/DhiNExVNM4vq3wvEVS9BBfV/3ppUkf79HChq32LtIS6YGhUgvI22scOK8x//smud6d0I1oCrTAKEB2AtfqxM3RBy6tLQMrq3/U+t3O5L2PcMF9LZ4AMxwyGgSeexwmjInLsOQrO3XW+p3jfWdtj+i7INWft9przHwvUWHxCi/r9A/kmgCrFSTOyZAd7k1Ee2pJ2CD5n85mu2vsrii5qiChzvbjITwLM6oqOc87+PuOXddX6bm66AOrfJKfLamzAgsgdWCmTaJsasZaLQ5Fqfy2isN/sJXd8CHRAjHYoshnR7wCBTo4q7hvJgKAcdCN1EbiIjHqCKDKH0ru0UAKc/9PkH4IyEVuMr1EERy2vb/ch2DwJ0iyP71QlEMs+CO9mhYu//Tbt+f+IaopuyV544YyjUMXPDeJDR5D6M9KUH14QQAKynCthbLIWi2sjfExLY41PM4zl5dCBX8FVv7VW8l4/yKmVoSnP4PYLAGX3x321g2M9O62tBNx3bMBXpNMJef9v+J6lO9Og6Aio+O7cVq90tD4+INN1yLmzXQcL35XYDhOEGPyEd8pEHNBfWgvNrOvilInBNLHjv4xRa296Zt5uJ2YZLES6sD9EkvofvtqxeVmtGLr75UDRLifg+9f0MReMVuKN7T78NVf9kfXvYl9k8JSqmTfymFu4LYY/fxi3ds+5ywetdb3ex5522fl76A9K6lbKGyDXnxPT7LG5X6SWmQnogcp+aSOQd0gYXyGhu1sEIKGD6NCfr4F41XzMmqag6wQEgpF84vNehIGuBlwi7afIwHKf+gjByIjDTMWy4wEgKOgQxSZmTIWNYbEWJl0A+qdbvqwSmO4ZOVLqATdBUYxS3nc+/4yInqrdpZeWDnk0it3xYduVzACLCOWgRyeQZ5d18CVIXfNyJUtkNP3rqIpzDmEXvX4B1oEWtGB3xo3XEYYVhX6f+d7AAA"}},"time_used":28,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":28,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"1nch-svap.com/","fqdn":"1nch-svap.com","domain":"1nch-svap.com","tld":"com"},"ip":{"addr":"104.21.75.136","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":true,"resource_type":"document","requested_by":"","date":"2026-07-27T09:36:05.570Z","timestamp":1785144965570,"http_version":"HTTP/3","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"1nch-svap.com","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Sat, 25 Jul 2026 23:12:54 GMT","end":"Sat, 24 Oct 2026 00:11:42 GMT"},"fingerprint":{"sha1":"AC:8D:24:B7:93:96:7F:75:AF:8B:42:06:6A:52:88:B7:26:2A:AB:CA","sha256":"86:DE:73:A5:AD:EB:38:13:F1:14:61:D6:2F:48:3B:8B:38:4F:60:E5:95:4D:89:FE:BD:DB:2B:C3:94:10:DC:D3"}}},"request":{"raw":"GET / HTTP/1.1\r\nHost: 1nch-svap.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nSec-GPC: 1\r\nUpgrade-Insecure-Requests: 1\r\nConnection: keep-alive\r\nSec-Fetch-Dest: document\r\nSec-Fetch-Mode: navigate\r\nSec-Fetch-Site: none\r\nPriority: u=0, i\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/3 200 \r\nserver: cloudflare\r\ndate: Mon, 27 Jul 2026 09:36:05 GMT\r\ncontent-type: text/html\r\nlast-modified: Sun, 26 Jul 2026 12:28:54 GMT\r\ncontent-encoding: zstd\r\npriority: u=0,i\r\nvary: Accept-Encoding\r\nnel: {\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}\r\nreport-to: {\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=5qJ8P%2ByMZD8efJ%2BgJUHW6rZ2Fn%2BTin13NKp97M%2BncXoEBQERs7HXBKSccBviMO%2B3U43RlUNL2JP8Ni1xv%2BYlJKAcq2GAcGlHkIgCIUgQj6C2jLlvvV7rjZa8aK7aDxxC\"}]}\r\ncf-cache-status: DYNAMIC\r\ncf-ray: a21aa862f8005699-OSL\r\nalt-svc: h3=\":443\"; ma=86400\r\nserver-timing: cfExtPri\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}],"data":{"size":3690,"size_decoded":2082,"mime_type":"text/html","magic":"HTML document, ASCII text","md5":"f5ef7a956d122f7707554b7bccc9c0c3","sha1":"0e1f979742ca5e1a2587f2a074872ba7da023c08","sha256":"e31ec158a8b4ca9110c7c909abfd6a13487de5c252d3e80473c1da2a5fa85703","sha512":"2c2d352d566760fdb832488a9ea5e8d54d9077b5bd77cd9a7a5734e777a2bc1431c4b5c2baca550d5010c2bb5370ffdbd73006de93b86bcd1c103260456b3cdf","ssdeep":"","tlshash":"28710c27089ac8143ba24379eac3f5444b62b64b46066885b0cf625e6fd0fd1c7e316f","first_seen":"2026-07-27T07:59:48.820709Z","last_seen":"2026-07-27T09:36:42.92188Z","times_seen":2,"resource_available":false,"data":"PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCIgLz4KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgogICAgPHRpdGxlPldlbGNvbWUhPC90aXRsZT4KICAgIDxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iLzFpbmNoLWFzc2V0cy9mYXZpY29uLmljbyIgdHlwZT0iaW1hZ2UveC1pY29uIj4KCiAgICA8IS0tIEZvbnRzIC0tPgogICAgPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tIiAvPgogICAgPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tIiBjcm9zc29yaWdpbiAvPgogICAgPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1JbnRlcjp3Z2h0QDQwMDs1MDA7NjAwOzcwMDs4MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiIC8+CgogICAgPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9IndlYnNpdGUiIC8+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IkNyeXB0byBDYXJkcyI+CiAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOmNhcmQiIGNvbnRlbnQ9InN1bW1hcnkiIC8+CiAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOnRpdGxlIiBjb250ZW50PSJDcnlwdG8gQ2FyZHMiPgoKICAgIDwhLS0gRmFjZWJvb2sgRG9tYWluIFZlcmlmaWNhdGlvbiAtLT4KICAgIDxtZXRhIG5hbWU9ImZhY2Vib29rLWRvbWFpbi12ZXJpZmljYXRpb24iIGNvbnRlbnQ9IjkwdzgzeG5pOG55emhjeHp1Zm9vZ3Qyd2E5YmU3aSIgLz4KICAgIDxtZXRhIG5hbWU9ImZhY2Vib29rLWRvbWFpbi12ZXJpZmljYXRpb24iIGNvbnRlbnQ9Im40cjJzazJndzZtcnhjdnlhbTJqc2xvMTh2NHNjaSIgLz4KICAgIDxtZXRhIG5hbWU9ImZhY2Vib29rLWRvbWFpbi12ZXJpZmljYXRpb24iIGNvbnRlbnQ9Im1mb291Mmd0azY2ZjRhOHB0YXlkYmF4a2Y1eDRubSIgLz4KICAgIDxtZXRhIG5hbWU9ImZhY2Vib29rLWRvbWFpbi12ZXJpZmljYXRpb24iIGNvbnRlbnQ9IjZpZ3N0czd5aDBqY3RmaDRkOTRrN3cyY2lkdWN2ayIgLz4KICAgIDxtZXRhIG5hbWU9ImZhY2Vib29rLWRvbWFpbi12ZXJpZmljYXRpb24iIGNvbnRlbnQ9InhwZGNpbWdwdW1ieW9menl0eTUyc205dXR5N2MxNCIgLz4KICAgIDxtZXRhIG5hbWU9ImZhY2Vib29rLWRvbWFpbi12ZXJpZmljYXRpb24iIGNvbnRlbnQ9InVrem42eThzZGdzMG5hZ2o5YWlmYTllZ2JweHoxOCIgLz4KICAgIDxtZXRhIG5hbWU9ImZhY2Vib29rLWRvbWFpbi12ZXJpZmljYXRpb24iIGNvbnRlbnQ9InRsYjdrZWFqYmJrMzlnZDBvOTlhOGNud3d6Y3ptYiIgLz4KICAgIDxtZXRhIG5hbWU9ImZhY2Vib29rLWRvbWFpbi12ZXJpZmljYXRpb24iIGNvbnRlbnQ9Im83YnhsenNsYWE0a3RkeWRvZ2ExdmczMXR1anZvcyIgLz4KICAgIDxtZXRhIG5hbWU9ImZhY2Vib29rLWRvbWFpbi12ZXJpZmljYXRpb24iIGNvbnRlbnQ9ImZ5YTU5dmhic3Y5aWRmN3Fmc2dpZXFsbXhmbnN3aSIgLz4KICAgIDxtZXRhIG5hbWU9ImZhY2Vib29rLWRvbWFpbi12ZXJpZmljYXRpb24iIGNvbnRlbnQ9IjZ4ZnhwOHpxMGhwY2Q2cXpmdWg5MHI2Z3FmN3lkcSIgLz4KICAgIDxtZXRhIG5hbWU9ImZhY2Vib29rLWRvbWFpbi12ZXJpZmljYXRpb24iIGNvbnRlbnQ9ImJnb2I1eWFxNXl2aGprdWZ0NjZ1enFmdGpscmE0ZyIgLz4KICAgIDxtZXRhIG5hbWU9ImZhY2Vib29rLWRvbWFpbi12ZXJpZmljYXRpb24iIGNvbnRlbnQ9InkyZm5ieXpkdGxnbDBucTRmYTBwbG02ZWg4bjNiOCIgLz4KICAgIDxtZXRhIG5hbWU9ImZhY2Vib29rLWRvbWFpbi12ZXJpZmljYXRpb24iIGNvbnRlbnQ9InQ5YWtsZmZib3hsZXBveXJvcGNjaW1heHZmcjRycCIgLz4KICAgIDxtZXRhIG5hbWU9ImZhY2Vib29rLWRvbWFpbi12ZXJpZmljYXRpb24iIGNvbnRlbnQ9IjdyZ24xbHU0MHE1cXY3Z2w4ZWwzdzQ2OWdzM2F1byIgLz4KICAgIDxtZXRhIG5hbWU9ImZhY2Vib29rLWRvbWFpbi12ZXJpZmljYXRpb24iIGNvbnRlbnQ9ImE1YjljdTN1dmFkNXNpNmZmOWYwOXc3dTIwejZ5bSIgLz4KICAgIDxtZXRhIG5hbWU9ImZhY2Vib29rLWRvbWFpbi12ZXJpZmljYXRpb24iIGNvbnRlbnQ9ImJ0cXRiNWw4eXpia25ja291Z29paTVxNmVra2IxayIgLz4KICAgIDxtZXRhIG5hbWU9ImZhY2Vib29rLWRvbWFpbi12ZXJpZmljYXRpb24iIGNvbnRlbnQ9InVzaHJtMGtzN3BvM2I3M2U0Zm03Y2Z3ZjZ4Nnl4bSIgLz4KICAgIDxtZXRhIG5hbWU9ImZhY2Vib29rLWRvbWFpbi12ZXJpZmljYXRpb24iIGNvbnRlbnQ9IngzaDBqeWhxcXo1a3BpY3ZnZTc2em56bm41aHZjNyIgLz4KICAgIDxtZXRhIG5hbWU9ImZhY2Vib29rLWRvbWFpbi12ZXJpZmljYXRpb24iIGNvbnRlbnQ9IjlzaTJhMWhndHh4YjBjdWkyaHhyMmJ0dWw1dXJmeSIgLz4KICAgIDxtZXRhIG5hbWU9ImZhY2Vib29rLWRvbWFpbi12ZXJpZmljYXRpb24iIGNvbnRlbnQ9Im44a3NyMWRuZWN4Ymt6ZGg2MWxqd2k0bnY1enhkeSIgLz4KPCEtLSBNZXRhIFBpeGVsIENvZGUgLS0+CiAgICA8c2NyaXB0PgogICAgICAhZnVuY3Rpb24oZixiLGUsdixuLHQscykKICAgICAge2lmKGYuZmJxKXJldHVybjtuPWYuZmJxPWZ1bmN0aW9uKCl7bi5jYWxsTWV0aG9kPwogICAgICBuLmNhbGxNZXRob2QuYXBwbHkobixhcmd1bWVudHMpOm4ucXVldWUucHVzaChhcmd1bWVudHMpfTsKICAgICAgaWYoIWYuX2ZicSlmLl9mYnE9bjtuLnB1c2g9bjtuLmxvYWRlZD0hMDtuLnZlcnNpb249JzIuMCc7CiAgICAgIG4ucXVldWU9W107dD1iLmNyZWF0ZUVsZW1lbnQoZSk7dC5hc3luYz0hMDsKICAgICAgdC5zcmM9djtzPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSlbMF07CiAgICAgIHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxzKX0od2luZG93LCBkb2N1bWVudCwnc2NyaXB0JywKICAgICAgJ2h0dHBzOi8vY29ubmVjdC5mYWNlYm9vay5uZXQvZW5fVVMvZmJldmVudHMuanMnKTsKICAgICAgZmJxKCdzZXQnLCAnYXV0b0NvbmZpZycsIGZhbHNlLCAnMjA4NDU4NDQyMjQ3ODgxNCcpOwogICAgICBmYnEoJ2luaXQnLCAnMjA4NDU4NDQyMjQ3ODgxNCcpOwogICAgICBmYnEoJ3RyYWNrJywgJ1BhZ2VWaWV3Jyk7CiAgICA8L3NjcmlwdD4KICAgIDwhLS0gRW5kIE1ldGEgUGl4ZWwgQ29kZSAtLT4KICAgIDxzY3JpcHQgdHlwZT0ibW9kdWxlIiBjcm9zc29yaWdpbiBzcmM9Ii9hc3NldHMvaW5kZXgtREliMHptdWYuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJtb2R1bGVwcmVsb2FkIiBjcm9zc29yaWdpbiBocmVmPSIvYXNzZXRzL3JlYWN0LUJITDlNdUhaLmpzIj4KICAgIDxsaW5rIHJlbD0ibW9kdWxlcHJlbG9hZCIgY3Jvc3NvcmlnaW4gaHJlZj0iL2Fzc2V0cy93YWxsZXRjb25uZWN0LUNFa2dvUjlpLmpzIj4KICAgIDxsaW5rIHJlbD0ibW9kdWxlcHJlbG9hZCIgY3Jvc3NvcmlnaW4gaHJlZj0iL2Fzc2V0cy90cm9ud2ViLURvU28xTGJ1LmpzIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgY3Jvc3NvcmlnaW4gaHJlZj0iL2Fzc2V0cy9pbmRleC1DY2lBQWlJTy5jc3MiPgogIDwvaGVhZD4KCiAgPGJvZHk+CiAgICA8ZGl2IGlkPSJyb290Ij48L2Rpdj4KICA8L2JvZHk+CjwvaHRtbD4K"}},"time_used":110,"timings":{"blocked":-1,"dns":5,"connect":13,"send":0,"wait":91,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"1nch-svap.com/assets/index-DIb0zmuf.js","fqdn":"1nch-svap.com","domain":"1nch-svap.com","tld":"com"},"ip":{"addr":"104.21.75.136","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://1nch-svap.com/","date":"2026-07-27T09:36:06.067Z","timestamp":1785144966067,"http_version":"HTTP/3","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"1nch-svap.com","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Sat, 25 Jul 2026 23:12:54 GMT","end":"Sat, 24 Oct 2026 00:11:42 GMT"},"fingerprint":{"sha1":"AC:8D:24:B7:93:96:7F:75:AF:8B:42:06:6A:52:88:B7:26:2A:AB:CA","sha256":"86:DE:73:A5:AD:EB:38:13:F1:14:61:D6:2F:48:3B:8B:38:4F:60:E5:95:4D:89:FE:BD:DB:2B:C3:94:10:DC:D3"}}},"request":{"raw":"GET /assets/index-DIb0zmuf.js HTTP/1.1\r\nHost: 1nch-svap.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://1nch-svap.com/\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: same-origin\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/3 200 \r\nserver: cloudflare\r\ndate: Mon, 27 Jul 2026 09:36:06 GMT\r\ncontent-type: application/javascript\r\nlast-modified: Sun, 26 Jul 2026 12:28:54 GMT\r\nnel: {\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}\r\npriority: u=3,i=?0\r\nvary: Accept-Encoding\r\netag: W/\"6a65fd86-7bbd7\"\r\nexpires: Wed, 26 Aug 2026 07:59:11 GMT\r\ncache-control: public, max-age=2592000, immutable\r\ncontent-encoding: gzip\r\nage: 5814\r\ncf-cache-status: HIT\r\nreport-to: {\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=gLViZz6wJiaSBU9eYaCvd3kkThlFr4w2O7Gs1WwBlNZGNnD%2FTSB%2FdQxZVymxyxmK7FltnVdG5mnQsq4vNE65xIQl92WKiwd2zbujF2M7Erc7520Z93xko%2FhLKWEitJ0J\"}]}\r\ncf-ray: a21aa865e8235699-OSL\r\nalt-svc: h3=\":443\"; ma=86400\r\nserver-timing: cfExtPri\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}],"data":{"size":506839,"size_decoded":167064,"mime_type":"application/javascript","magic":"JavaScript source, ASCII text, with very long lines (49602)","md5":"72f0fa87598e7991bf272a3a85246d3f","sha1":"0ccc5de527a08f91d193edffb74c9218cd9907bf","sha256":"ea35af4b3e81fcd38e2d6279a2c0f2750bdc36db4995601c2da9dff3f0be2ca3","sha512":"673b5d7a90e1a5372ececac778e1978f9d5789c9e6604cef7b6f6ea96ab920625dd31b88d62dea708552be5341c6955aa14331ff58332dee41e7e03440af98cb","ssdeep":"12288:5S0vyPU01PPVQUgVQ/ww2xYsCaE8rILg5K:QZOLQYwGYsCaE80","tlshash":"19b48e85f141727997e706e5a06f8108723a1e54f52e80b8f17c48ee29b118ab17bffd","first_seen":"2026-07-27T07:59:48.812251Z","last_seen":"2026-07-27T09:36:42.923635Z","times_seen":2,"resource_available":true,"data":"Y29uc3QgX192aXRlX19tYXBEZXBzPShpLG09X192aXRlX19tYXBEZXBzLGQ9KG0uZnx8KG0uZj1bImFzc2V0cy9GYXNzZXRMYW5kaW5nLW1MZlFoeEgxLmpzIiwiYXNzZXRzL3JlYWN0LUJITDlNdUhaLmpzIiwiYXNzZXRzL3dhbGxldGNvbm5lY3QtQ0VrZ29SOWkuanMiLCJhc3NldHMvdHJvbndlYi1Eb1NvMUxidS5qcyIsImFzc2V0cy9GYXNzZXRMYW5kaW5nLUJuLS1YZFllLmNzcyIsImFzc2V0cy9UcnVzdExhbmRpbmctQlI4Y0k0Q0cuanMiLCJhc3NldHMvemFwLUJldHNhZzlWLmpzIiwiYXNzZXRzL0hvdGVsTGFuZGluZy1DX3A5Sk1OOC5qcyIsImFzc2V0cy9Ib3RlbExhbmRpbmctQnFTdG51bmouY3NzIiwiYXNzZXRzL0luY2hMYW5kaW5nLWM0TVh5cWFFLmpzIiwiYXNzZXRzL0luY2hMYW5kaW5nLUMwQ0g0OUlwLmNzcyJdKSkpPT5pLm1hcChpPT5kW2ldKTsKdmFyIEFsPWU9Pnt0aHJvdyBUeXBlRXJyb3IoZSl9O3ZhciBfaT0oZSx0LG4pPT50LmhhcyhlKXx8QWwoIkNhbm5vdCAiK24pO3ZhciBqPShlLHQsbik9PihfaShlLHQsInJlYWQgZnJvbSBwcml2YXRlIGZpZWxkIiksbj9uLmNhbGwoZSk6dC5nZXQoZSkpLFo9KGUsdCxuKT0+dC5oYXMoZSk/QWwoIkNhbm5vdCBhZGQgdGhlIHNhbWUgcHJpdmF0ZSBtZW1iZXIgbW9yZSB0aGFuIG9uY2UiKTp0IGluc3RhbmNlb2YgV2Vha1NldD90LmFkZChlKTp0LnNldChlLG4pLHE9KGUsdCxuLHMpPT4oX2koZSx0LCJ3cml0ZSB0byBwcml2YXRlIGZpZWxkIikscz9zLmNhbGwoZSxuKTp0LnNldChlLG4pLG4pLE5lPShlLHQsbik9PihfaShlLHQsImFjY2VzcyBwcml2YXRlIG1ldGhvZCIpLG4pO3ZhciB5cj0oZSx0LG4scyk9Pih7c2V0IF8ocil7cShlLHQscixuKX0sZ2V0IF8oKXtyZXR1cm4gaihlLHQscyl9fSk7aW1wb3J0e3IgYXMgbSxiIGFzIGFyLG8gYXMgTCx2IGFzIENtLFIgYXMgbHIsdSBhcyB4YSxkIGFzIGJhLEwgYXMgZm4sQiBhcyBUbSxlIGFzIFNtLGYgYXMgcGV9ZnJvbSIuL3JlYWN0LUJITDlNdUhaLmpzIjtpbXBvcnR7XyBhcyB4aSxXIGFzIFBtLEogYXMgam19ZnJvbSIuL3dhbGxldGNvbm5lY3QtQ0VrZ29SOWkuanMiO2ltcG9ydHtUIGFzIEVtfWZyb20iLi90cm9ud2ViLURvU28xTGJ1LmpzIjsoZnVuY3Rpb24oKXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKS5yZWxMaXN0O2lmKHQmJnQuc3VwcG9ydHMmJnQuc3VwcG9ydHMoIm1vZHVsZXByZWxvYWQiKSlyZXR1cm47Zm9yKGNvbnN0IHIgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnbGlua1tyZWw9Im1vZHVsZXByZWxvYWQiXScpKXMocik7bmV3IE11dGF0aW9uT2JzZXJ2ZXIocj0+e2Zvcihjb25zdCBpIG9mIHIpaWYoaS50eXBlPT09ImNoaWxkTGlzdCIpZm9yKGNvbnN0IG8gb2YgaS5hZGRlZE5vZGVzKW8udGFnTmFtZT09PSJMSU5LIiYmby5yZWw9PT0ibW9kdWxlcHJlbG9hZCImJnMobyl9KS5vYnNlcnZlKGRvY3VtZW50LHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pO2Z1bmN0aW9uIG4ocil7Y29uc3QgaT17fTtyZXR1cm4gci5pbnRlZ3JpdHkmJihpLmludGVncml0eT1yLmludGVncml0eSksci5yZWZlcnJlclBvbGljeSYmKGkucmVmZXJyZXJQb2xpY3k9ci5yZWZlcnJlclBvbGljeSksci5jcm9zc09yaWdpbj09PSJ1c2UtY3JlZGVudGlhbHMiP2kuY3JlZGVudGlhbHM9ImluY2x1ZGUiOnIuY3Jvc3NPcmlnaW49PT0iYW5vbnltb3VzIj9pLmNyZWRlbnRpYWxzPSJvbWl0IjppLmNyZWRlbnRpYWxzPSJzYW1lLW9yaWdpbiIsaX1mdW5jdGlvbiBzKHIpe2lmKHIuZXApcmV0dXJuO3IuZXA9ITA7Y29uc3QgaT1uKHIpO2ZldGNoKHIuaHJlZixpKX19KSgpO3ZhciB4dT17ZXhwb3J0czp7fX0sYmk9e307LyoqCiAqIEBsaWNlbnNlIFJlYWN0CiAqIHJlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzCiAqCiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLgogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi92YXIgQW09bSxrbT1TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50IiksTm09U3ltYm9sLmZvcigicmVhY3QuZnJhZ21lbnQiKSxSbT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LERtPUFtLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELlJlYWN0Q3VycmVudE93bmVyLE1tPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07ZnVuY3Rpb24gYnUoZSx0LG4pe3ZhciBzLHI9e30saT1udWxsLG89bnVsbDtuIT09dm9pZCAwJiYoaT0iIituKSx0LmtleSE9PXZvaWQgMCYmKGk9IiIrdC5rZXkpLHQucmVmIT09dm9pZCAwJiYobz10LnJlZik7Zm9yKHMgaW4gdClSbS5jYWxsKHQscykmJiFNbS5oYXNPd25Qcm9wZXJ0eShzKSYmKHJbc109dFtzXSk7aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKHMgaW4gdD1lLmRlZmF1bHRQcm9wcyx0KXJbc109PT12b2lkIDAmJihyW3NdPXRbc10pO3JldHVybnskJHR5cGVvZjprbSx0eXBlOmUsa2V5OmkscmVmOm8scHJvcHM6cixfb3duZXI6RG0uY3VycmVudH19YmkuRnJhZ21lbnQ9Tm07YmkuanN4PWJ1O2JpLmpzeHM9YnU7eHUuZXhwb3J0cz1iaTt2YXIgYT14dS5leHBvcnRzLHd1LGtsPWFyO3d1PWtsLmNyZWF0ZVJvb3Qsa2wuaHlkcmF0ZVJvb3Q7dmFyIHdpPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5saXN0ZW5lcnM9bmV3IFNldCx0aGlzLnN1YnNjcmliZT10aGlzLnN1YnNjcmliZS5iaW5kKHRoaXMpfXN1YnNjcmliZShlKXtyZXR1cm4gdGhpcy5saXN0ZW5lcnMuYWRkKGUpLHRoaXMub25TdWJzY3JpYmUoKSwoKT0+e3RoaXMubGlzdGVuZXJzLmRlbGV0ZShlKSx0aGlzLm9uVW5zdWJzY3JpYmUoKX19aGFzTGlzdGVuZXJzKCl7cmV0dXJuIHRoaXMubGlzdGVuZXJzLnNpemU+MH1vblN1YnNjcmliZSgpe31vblVuc3Vic2NyaWJlKCl7fX0sTm4scm4sYXMsZHUsT209KGR1PWNsYXNzIGV4dGVuZHMgd2l7Y29uc3RydWN0b3IoKXtzdXBlcigpO1oodGhpcyxObik7Wih0aGlzLHJuKTtaKHRoaXMsYXMpO3EodGhpcyxhcyx0PT57aWYodHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5hZGRFdmVudExpc3RlbmVyKXtjb25zdCBuPSgpPT50KCk7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixuLCExKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixuKX19fSl9b25TdWJzY3JpYmUoKXtqKHRoaXMscm4pfHx0aGlzLnNldEV2ZW50TGlzdGVuZXIoaih0aGlzLGFzKSl9b25VbnN1YnNjcmliZSgpe3ZhciB0O3RoaXMuaGFzTGlzdGVuZXJzKCl8fCgodD1qKHRoaXMscm4pKT09bnVsbHx8dC5jYWxsKHRoaXMpLHEodGhpcyxybix2b2lkIDApKX1zZXRFdmVudExpc3RlbmVyKHQpe3ZhciBuO3EodGhpcyxhcyx0KSwobj1qKHRoaXMscm4pKT09bnVsbHx8bi5jYWxsKHRoaXMpLHEodGhpcyxybix0KHM9Pnt0eXBlb2Ygcz09ImJvb2xlYW4iP3RoaXMuc2V0Rm9jdXNlZChzKTp0aGlzLm9uRm9jdXMoKX0pKX1zZXRGb2N1c2VkKHQpe2oodGhpcyxObikhPT10JiYocSh0aGlzLE5uLHQpLHRoaXMub25Gb2N1cygpKX1vbkZvY3VzKCl7Y29uc3QgdD10aGlzLmlzRm9jdXNlZCgpO3RoaXMubGlzdGVuZXJzLmZvckVhY2gobj0+e24odCl9KX1pc0ZvY3VzZWQoKXtyZXR1cm4gdHlwZW9mIGoodGhpcyxObik9PSJib29sZWFuIj9qKHRoaXMsTm4pOmdsb2JhbFRoaXMuZG9jdW1lbnQ/LnZpc2liaWxpdHlTdGF0ZSE9PSJoaWRkZW4ifX0sTm49bmV3IFdlYWtNYXAscm49bmV3IFdlYWtNYXAsYXM9bmV3IFdlYWtNYXAsZHUpLEN1PW5ldyBPbSxJbT17c2V0VGltZW91dDooZSx0KT0+c2V0VGltZW91dChlLHQpLGNsZWFyVGltZW91dDplPT5jbGVhclRpbWVvdXQoZSksc2V0SW50ZXJ2YWw6KGUsdCk9PnNldEludGVydmFsKGUsdCksY2xlYXJJbnRlcnZhbDplPT5jbGVhckludGVydmFsKGUpfSxvbix2YSx1dSxMbT0odXU9Y2xhc3N7Y29uc3RydWN0b3IoKXtaKHRoaXMsb24sSW0pO1oodGhpcyx2YSwhMSl9c2V0VGltZW91dFByb3ZpZGVyKGUpe3EodGhpcyxvbixlKX1zZXRUaW1lb3V0KGUsdCl7cmV0dXJuIGoodGhpcyxvbikuc2V0VGltZW91dChlLHQpfWNsZWFyVGltZW91dChlKXtqKHRoaXMsb24pLmNsZWFyVGltZW91dChlKX1zZXRJbnRlcnZhbChlLHQpe3JldHVybiBqKHRoaXMsb24pLnNldEludGVydmFsKGUsdCl9Y2xlYXJJbnRlcnZhbChlKXtqKHRoaXMsb24pLmNsZWFySW50ZXJ2YWwoZSl9fSxvbj1uZXcgV2Vha01hcCx2YT1uZXcgV2Vha01hcCx1dSkseG89bmV3IExtO2Z1bmN0aW9uIEZtKGUpe3NldFRpbWVvdXQoZSwwKX12YXIgVm09dHlwZW9mIHdpbmRvdz4idSJ8fCJEZW5vImluIGdsb2JhbFRoaXM7ZnVuY3Rpb24gbXQoKXt9ZnVuY3Rpb24gX20oZSx0KXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZSh0KTplfWZ1bmN0aW9uIEJtKGUpe3JldHVybiB0eXBlb2YgZT09Im51bWJlciImJmU+PTAmJmUhPT0xLzB9ZnVuY3Rpb24gV20oZSx0KXtyZXR1cm4gTWF0aC5tYXgoZSsodHx8MCktRGF0ZS5ub3coKSwwKX1mdW5jdGlvbiBibyhlLHQpe3JldHVybiB0eXBlb2YgZT09ImZ1bmN0aW9uIj9lKHQpOmV9ZnVuY3Rpb24gem0oZSx0KXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZSh0KTplfWZ1bmN0aW9uIE5sKGUsdCl7Y29uc3R7dHlwZTpuPSJhbGwiLGV4YWN0OnMsZmV0Y2hTdGF0dXM6cixwcmVkaWNhdGU6aSxxdWVyeUtleTpvLHN0YWxlOmx9PWU7aWYobyl7aWYocyl7aWYodC5xdWVyeUhhc2ghPT13YShvLHQub3B0aW9ucykpcmV0dXJuITF9ZWxzZSBpZighZ3ModC5xdWVyeUtleSxvKSlyZXR1cm4hMX1pZihuIT09ImFsbCIpe2NvbnN0IGQ9dC5pc0FjdGl2ZSgpO2lmKG49PT0iYWN0aXZlIiYmIWR8fG49PT0iaW5hY3RpdmUiJiZkKXJldHVybiExfXJldHVybiEodHlwZW9mIGw9PSJib29sZWFuIiYmdC5pc1N0YWxlKCkhPT1sfHxyJiZyIT09dC5zdGF0ZS5mZXRjaFN0YXR1c3x8aSYmIWkodCkpfWZ1bmN0aW9uIFJsKGUsdCl7Y29uc3R7ZXhhY3Q6bixzdGF0dXM6cyxwcmVkaWNhdGU6cixtdXRhdGlvbktleTppfT1lO2lmKGkpe2lmKCF0Lm9wdGlvbnMubXV0YXRpb25LZXkpcmV0dXJuITE7aWYobil7aWYoSHModC5vcHRpb25zLm11dGF0aW9uS2V5KSE9PUhzKGkpKXJldHVybiExfWVsc2UgaWYoIWdzKHQub3B0aW9ucy5tdXRhdGlvbktleSxpKSlyZXR1cm4hMX1yZXR1cm4hKHMmJnQuc3RhdGUuc3RhdHVzIT09c3x8ciYmIXIodCkpfWZ1bmN0aW9uIHdhKGUsdCl7cmV0dXJuKHQ/LnF1ZXJ5S2V5SGFzaEZufHxIcykoZSl9ZnVuY3Rpb24gSHMoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUsKHQsbik9PndvKG4pP09iamVjdC5rZXlzKG4pLnNvcnQoKS5yZWR1Y2UoKHMscik9PihzW3JdPW5bcl0scykse30pOm4pfWZ1bmN0aW9uIGdzKGUsdCl7aWYoZT09PXQpcmV0dXJuITA7aWYodHlwZW9mIGUhPXR5cGVvZiB0KXJldHVybiExO2lmKGUmJnQmJnR5cGVvZiBlPT0ib2JqZWN0IiYmdHlwZW9mIHQ9PSJvYmplY3QiKXtpZihBcnJheS5pc0FycmF5KGUpJiZBcnJheS5pc0FycmF5KHQpKXtmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrKylpZighZ3MoZVtzXSx0W3NdKSlyZXR1cm4hMTtyZXR1cm4hMH1jb25zdCBuPU9iamVjdC5rZXlzKHQpO2Zvcihjb25zdCBzIG9mIG4paWYoIWdzKGVbc10sdFtzXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9dmFyIFVtPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gVHUoZSx0LG49MCl7aWYoZT09PXQpcmV0dXJuIGU7aWYobj41MDApcmV0dXJuIHQ7Y29uc3Qgcz1EbChlKSYmRGwodCk7aWYoIXMmJiEod28oZSkmJndvKHQpKSlyZXR1cm4gdDtjb25zdCBpPShzP2U6T2JqZWN0LmtleXMoZSkpLmxlbmd0aCxvPXM/dDpPYmplY3Qua2V5cyh0KSxsPW8ubGVuZ3RoLGQ9cz9uZXcgQXJyYXkobCk6e307bGV0IGM9MDtmb3IobGV0IHU9MDt1PGw7dSsrKXtjb25zdCBmPXM/dTpvW3VdLGg9ZVtmXSxwPXRbZl07aWYoaD09PXApe2RbZl09aCwocz91PGk6VW0uY2FsbChlLGYpKSYmYysrO2NvbnRpbnVlfWlmKGg9PT1udWxsfHxwPT09bnVsbHx8dHlwZW9mIGghPSJvYmplY3QifHx0eXBlb2YgcCE9Im9iamVjdCIpe2RbZl09cDtjb250aW51ZX1jb25zdCBnPVR1KGgscCxuKzEpO2RbZl09ZyxnPT09aCYmYysrfXJldHVybiBpPT09bCYmYz09PWk/ZTpkfWZ1bmN0aW9uIERsKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD09PU9iamVjdC5rZXlzKGUpLmxlbmd0aH1mdW5jdGlvbiB3byhlKXtpZighTWwoZSkpcmV0dXJuITE7Y29uc3QgdD1lLmNvbnN0cnVjdG9yO2lmKHQ9PT12b2lkIDApcmV0dXJuITA7Y29uc3Qgbj10LnByb3RvdHlwZTtyZXR1cm4hKCFNbChuKXx8IW4uaGFzT3duUHJvcGVydHkoImlzUHJvdG90eXBlT2YiKXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpIT09T2JqZWN0LnByb3RvdHlwZSl9ZnVuY3Rpb24gTWwoZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKT09PSJbb2JqZWN0IE9iamVjdF0ifWZ1bmN0aW9uICRtKGUpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57eG8uc2V0VGltZW91dCh0LGUpfSl9ZnVuY3Rpb24gSG0oZSx0LG4pe3JldHVybiB0eXBlb2Ygbi5zdHJ1Y3R1cmFsU2hhcmluZz09ImZ1bmN0aW9uIj9uLnN0cnVjdHVyYWxTaGFyaW5nKGUsdCk6bi5zdHJ1Y3R1cmFsU2hhcmluZyE9PSExP1R1KGUsdCk6dH1mdW5jdGlvbiBxbShlLHQsbj0wKXtjb25zdCBzPVsuLi5lLHRdO3JldHVybiBuJiZzLmxlbmd0aD5uP3Muc2xpY2UoMSk6c31mdW5jdGlvbiBLbShlLHQsbj0wKXtjb25zdCBzPVt0LC4uLmVdO3JldHVybiBuJiZzLmxlbmd0aD5uP3Muc2xpY2UoMCwtMSk6c312YXIgQ2E9U3ltYm9sKCk7ZnVuY3Rpb24gU3UoZSx0KXtyZXR1cm4hZS5xdWVyeUZuJiZ0Py5pbml0aWFsUHJvbWlzZT8oKT0+dC5pbml0aWFsUHJvbWlzZTohZS5xdWVyeUZufHxlLnF1ZXJ5Rm49PT1DYT8oKT0+UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBNaXNzaW5nIHF1ZXJ5Rm46ICcke2UucXVlcnlIYXNofSdgKSk6ZS5xdWVyeUZufWZ1bmN0aW9uIEdtKGUsdCxuKXtsZXQgcz0hMSxyO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic2lnbmFsIix7ZW51bWVyYWJsZTohMCxnZXQ6KCk9PihyPz8ocj10KCkpLHN8fChzPSEwLHIuYWJvcnRlZD9uKCk6ci5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsbix7b25jZTohMH0pKSxyKX0pLGV9dmFyIFB1PSgoKT0+e2xldCBlPSgpPT5WbTtyZXR1cm57aXNTZXJ2ZXIoKXtyZXR1cm4gZSgpfSxzZXRJc1NlcnZlcih0KXtlPXR9fX0pKCk7ZnVuY3Rpb24gWW0oKXtsZXQgZSx0O2NvbnN0IG49bmV3IFByb21pc2UoKHIsaSk9PntlPXIsdD1pfSk7bi5zdGF0dXM9InBlbmRpbmciLG4uY2F0Y2goKCk9Pnt9KTtmdW5jdGlvbiBzKHIpe09iamVjdC5hc3NpZ24obixyKSxkZWxldGUgbi5yZXNvbHZlLGRlbGV0ZSBuLnJlamVjdH1yZXR1cm4gbi5yZXNvbHZlPXI9PntzKHtzdGF0dXM6ImZ1bGZpbGxlZCIsdmFsdWU6cn0pLGUocil9LG4ucmVqZWN0PXI9PntzKHtzdGF0dXM6InJlamVjdGVkIixyZWFzb246cn0pLHQocil9LG59dmFyIFhtPUZtO2Z1bmN0aW9uIFFtKCl7bGV0IGU9W10sdD0wLG49bD0+e2woKX0scz1sPT57bCgpfSxyPVhtO2NvbnN0IGk9bD0+e3Q/ZS5wdXNoKGwpOnIoKCk9PntuKGwpfSl9LG89KCk9Pntjb25zdCBsPWU7ZT1bXSxsLmxlbmd0aCYmcigoKT0+e3MoKCk9PntsLmZvckVhY2goZD0+e24oZCl9KX0pfSl9O3JldHVybntiYXRjaDpsPT57bGV0IGQ7dCsrO3RyeXtkPWwoKX1maW5hbGx5e3QtLSx0fHxvKCl9cmV0dXJuIGR9LGJhdGNoQ2FsbHM6bD0+KC4uLmQpPT57aSgoKT0+e2woLi4uZCl9KX0sc2NoZWR1bGU6aSxzZXROb3RpZnlGdW5jdGlvbjpsPT57bj1sfSxzZXRCYXRjaE5vdGlmeUZ1bmN0aW9uOmw9PntzPWx9LHNldFNjaGVkdWxlcjpsPT57cj1sfX19dmFyIF9lPVFtKCksbHMsYW4sY3MsZnUsSm09KGZ1PWNsYXNzIGV4dGVuZHMgd2l7Y29uc3RydWN0b3IoKXtzdXBlcigpO1oodGhpcyxscywhMCk7Wih0aGlzLGFuKTtaKHRoaXMsY3MpO3EodGhpcyxjcyx0PT57aWYodHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5hZGRFdmVudExpc3RlbmVyKXtjb25zdCBuPSgpPT50KCEwKSxzPSgpPT50KCExKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm9ubGluZSIsbiwhMSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm9mZmxpbmUiLHMsITEpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm9ubGluZSIsbiksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm9mZmxpbmUiLHMpfX19KX1vblN1YnNjcmliZSgpe2oodGhpcyxhbil8fHRoaXMuc2V0RXZlbnRMaXN0ZW5lcihqKHRoaXMsY3MpKX1vblVuc3Vic2NyaWJlKCl7dmFyIHQ7dGhpcy5oYXNMaXN0ZW5lcnMoKXx8KCh0PWoodGhpcyxhbikpPT1udWxsfHx0LmNhbGwodGhpcykscSh0aGlzLGFuLHZvaWQgMCkpfXNldEV2ZW50TGlzdGVuZXIodCl7dmFyIG47cSh0aGlzLGNzLHQpLChuPWoodGhpcyxhbikpPT1udWxsfHxuLmNhbGwodGhpcykscSh0aGlzLGFuLHQodGhpcy5zZXRPbmxpbmUuYmluZCh0aGlzKSkpfXNldE9ubGluZSh0KXtqKHRoaXMsbHMpIT09dCYmKHEodGhpcyxscyx0KSx0aGlzLmxpc3RlbmVycy5mb3JFYWNoKHM9PntzKHQpfSkpfWlzT25saW5lKCl7cmV0dXJuIGoodGhpcyxscyl9fSxscz1uZXcgV2Vha01hcCxhbj1uZXcgV2Vha01hcCxjcz1uZXcgV2Vha01hcCxmdSksWnI9bmV3IEptO2Z1bmN0aW9uIFptKGUpe3JldHVybiBNYXRoLm1pbigxZTMqMioqZSwzZTQpfWZ1bmN0aW9uIGp1KGUpe3JldHVybihlPz8ib25saW5lIik9PT0ib25saW5lIj9aci5pc09ubGluZSgpOiEwfXZhciBDbz1jbGFzcyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUpe3N1cGVyKCJDYW5jZWxsZWRFcnJvciIpLHRoaXMucmV2ZXJ0PWU/LnJldmVydCx0aGlzLnNpbGVudD1lPy5zaWxlbnR9fTtmdW5jdGlvbiBFdShlKXtsZXQgdD0hMSxuPTAscztjb25zdCByPVltKCksaT0oKT0+ci5zdGF0dXMhPT0icGVuZGluZyIsbz15PT57aWYoIWkoKSl7Y29uc3Qgdj1uZXcgQ28oeSk7aCh2KSxlLm9uQ2FuY2VsPy4odil9fSxsPSgpPT57dD0hMH0sZD0oKT0+e3Q9ITF9LGM9KCk9PkN1LmlzRm9jdXNlZCgpJiYoZS5uZXR3b3JrTW9kZT09PSJhbHdheXMifHxaci5pc09ubGluZSgpKSYmZS5jYW5SdW4oKSx1PSgpPT5qdShlLm5ldHdvcmtNb2RlKSYmZS5jYW5SdW4oKSxmPXk9PntpKCl8fChzPy4oKSxyLnJlc29sdmUoeSkpfSxoPXk9PntpKCl8fChzPy4oKSxyLnJlamVjdCh5KSl9LHA9KCk9Pm5ldyBQcm9taXNlKHk9PntzPXY9PnsoaSgpfHxjKCkpJiZ5KHYpfSxlLm9uUGF1c2U/LigpfSkudGhlbigoKT0+e3M9dm9pZCAwLGkoKXx8ZS5vbkNvbnRpbnVlPy4oKX0pLGc9KCk9PntpZihpKCkpcmV0dXJuO2xldCB5O2NvbnN0IHY9bj09PTA/ZS5pbml0aWFsUHJvbWlzZTp2b2lkIDA7dHJ5e3k9dj8/ZS5mbigpfWNhdGNoKHgpe3k9UHJvbWlzZS5yZWplY3QoeCl9UHJvbWlzZS5yZXNvbHZlKHkpLnRoZW4oZikuY2F0Y2goeD0+e2lmKGkoKSlyZXR1cm47Y29uc3Qgdz1lLnJldHJ5Pz8oUHUuaXNTZXJ2ZXIoKT8wOjMpLGI9ZS5yZXRyeURlbGF5Pz9abSxDPXR5cGVvZiBiPT0iZnVuY3Rpb24iP2Iobix4KTpiLFM9dz09PSEwfHx0eXBlb2Ygdz09Im51bWJlciImJm48d3x8dHlwZW9mIHc9PSJmdW5jdGlvbiImJncobix4KTtpZih0fHwhUyl7aCh4KTtyZXR1cm59bisrLGUub25GYWlsPy4obix4KSwkbShDKS50aGVuKCgpPT5jKCk/dm9pZCAwOnAoKSkudGhlbigoKT0+e3Q/aCh4KTpnKCl9KX0pfTtyZXR1cm57cHJvbWlzZTpyLHN0YXR1czooKT0+ci5zdGF0dXMsY2FuY2VsOm8sY29udGludWU6KCk9PihzPy4oKSxyKSxjYW5jZWxSZXRyeTpsLGNvbnRpbnVlUmV0cnk6ZCxjYW5TdGFydDp1LHN0YXJ0OigpPT4odSgpP2coKTpwKCkudGhlbihnKSxyKX19dmFyIFJuLGh1LEF1PShodT1jbGFzc3tjb25zdHJ1Y3Rvcigpe1oodGhpcyxSbil9ZGVzdHJveSgpe3RoaXMuY2xlYXJHY1RpbWVvdXQoKX1zY2hlZHVsZUdjKCl7dGhpcy5jbGVhckdjVGltZW91dCgpLEJtKHRoaXMuZ2NUaW1lKSYmcSh0aGlzLFJuLHhvLnNldFRpbWVvdXQoKCk9Pnt0aGlzLm9wdGlvbmFsUmVtb3ZlKCl9LHRoaXMuZ2NUaW1lKSl9dXBkYXRlR2NUaW1lKGUpe3RoaXMuZ2NUaW1lPU1hdGgubWF4KHRoaXMuZ2NUaW1lfHwwLGU/PyhQdS5pc1NlcnZlcigpPzEvMDo1KjYwKjFlMykpfWNsZWFyR2NUaW1lb3V0KCl7aih0aGlzLFJuKSE9PXZvaWQgMCYmKHhvLmNsZWFyVGltZW91dChqKHRoaXMsUm4pKSxxKHRoaXMsUm4sdm9pZCAwKSl9fSxSbj1uZXcgV2Vha01hcCxodSk7ZnVuY3Rpb24gZWcoZSl7cmV0dXJue29uRmV0Y2g6KHQsbik9Pntjb25zdCBzPXQub3B0aW9ucyxyPXQuZmV0Y2hPcHRpb25zPy5tZXRhPy5mZXRjaE1vcmU/LmRpcmVjdGlvbixpPXQuc3RhdGUuZGF0YT8ucGFnZXN8fFtdLG89dC5zdGF0ZS5kYXRhPy5wYWdlUGFyYW1zfHxbXTtsZXQgbD17cGFnZXM6W10scGFnZVBhcmFtczpbXX0sZD0wO2NvbnN0IGM9YXN5bmMoKT0+e2xldCB1PSExO2NvbnN0IGY9Zz0+e0dtKGcsKCk9PnQuc2lnbmFsLCgpPT51PSEwKX0saD1TdSh0Lm9wdGlvbnMsdC5mZXRjaE9wdGlvbnMpLHA9YXN5bmMoZyx5LHYpPT57aWYodSlyZXR1cm4gUHJvbWlzZS5yZWplY3QodC5zaWduYWwucmVhc29uKTtpZih5PT1udWxsJiZnLnBhZ2VzLmxlbmd0aClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGcpO2NvbnN0IHc9KCgpPT57Y29uc3QgUD17Y2xpZW50OnQuY2xpZW50LHF1ZXJ5S2V5OnQucXVlcnlLZXkscGFnZVBhcmFtOnksZGlyZWN0aW9uOnY/ImJhY2t3YXJkIjoiZm9yd2FyZCIsbWV0YTp0Lm9wdGlvbnMubWV0YX07cmV0dXJuIGYoUCksUH0pKCksYj1hd2FpdCBoKHcpLHttYXhQYWdlczpDfT10Lm9wdGlvbnMsUz12P0ttOnFtO3JldHVybntwYWdlczpTKGcucGFnZXMsYixDKSxwYWdlUGFyYW1zOlMoZy5wYWdlUGFyYW1zLHksQyl9fTtpZihyJiZpLmxlbmd0aCl7Y29uc3QgZz1yPT09ImJhY2t3YXJkIix5PWc/dGc6T2wsdj17cGFnZXM6aSxwYWdlUGFyYW1zOm99LHg9eShzLHYpO2w9YXdhaXQgcCh2LHgsZyl9ZWxzZXtjb25zdCBnPWU/P2kubGVuZ3RoO2Rve2NvbnN0IHk9ZD09PTA/b1swXT8/cy5pbml0aWFsUGFnZVBhcmFtOk9sKHMsbCk7aWYoZD4wJiZ5PT1udWxsKWJyZWFrO2w9YXdhaXQgcChsLHkpLGQrK313aGlsZShkPGcpfXJldHVybiBsfTt0Lm9wdGlvbnMucGVyc2lzdGVyP3QuZmV0Y2hGbj0oKT0+dC5vcHRpb25zLnBlcnNpc3Rlcj8uKGMse2NsaWVudDp0LmNsaWVudCxxdWVyeUtleTp0LnF1ZXJ5S2V5LG1ldGE6dC5vcHRpb25zLm1ldGEsc2lnbmFsOnQuc2lnbmFsfSxuKTp0LmZldGNoRm49Y319fWZ1bmN0aW9uIE9sKGUse3BhZ2VzOnQscGFnZVBhcmFtczpufSl7Y29uc3Qgcz10Lmxlbmd0aC0xO3JldHVybiB0Lmxlbmd0aD4wP2UuZ2V0TmV4dFBhZ2VQYXJhbSh0W3NdLHQsbltzXSxuKTp2b2lkIDB9ZnVuY3Rpb24gdGcoZSx7cGFnZXM6dCxwYWdlUGFyYW1zOm59KXtyZXR1cm4gdC5sZW5ndGg+MD9lLmdldFByZXZpb3VzUGFnZVBhcmFtPy4odFswXSx0LG5bMF0sbik6dm9pZCAwfXZhciBkcyxEbix1cyxzdCxNbixqZSxycixPbixaZSxrdSxWdCxwdSxuZz0ocHU9Y2xhc3MgZXh0ZW5kcyBBdXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpO1oodGhpcyxaZSk7Wih0aGlzLGRzKTtaKHRoaXMsRG4pO1oodGhpcyx1cyk7Wih0aGlzLHN0KTtaKHRoaXMsTW4pO1oodGhpcyxqZSk7Wih0aGlzLHJyKTtaKHRoaXMsT24pO3EodGhpcyxPbiwhMSkscSh0aGlzLHJyLHQuZGVmYXVsdE9wdGlvbnMpLHRoaXMuc2V0T3B0aW9ucyh0Lm9wdGlvbnMpLHRoaXMub2JzZXJ2ZXJzPVtdLHEodGhpcyxNbix0LmNsaWVudCkscSh0aGlzLHN0LGoodGhpcyxNbikuZ2V0UXVlcnlDYWNoZSgpKSx0aGlzLnF1ZXJ5S2V5PXQucXVlcnlLZXksdGhpcy5xdWVyeUhhc2g9dC5xdWVyeUhhc2gscSh0aGlzLERuLExsKHRoaXMub3B0aW9ucykpLHRoaXMuc3RhdGU9dC5zdGF0ZT8/aih0aGlzLERuKSx0aGlzLnNjaGVkdWxlR2MoKX1nZXQgbWV0YSgpe3JldHVybiB0aGlzLm9wdGlvbnMubWV0YX1nZXQgcXVlcnlUeXBlKCl7cmV0dXJuIGoodGhpcyxkcyl9Z2V0IHByb21pc2UoKXtyZXR1cm4gaih0aGlzLGplKT8ucHJvbWlzZX1zZXRPcHRpb25zKHQpe2lmKHRoaXMub3B0aW9ucz17Li4uaih0aGlzLHJyKSwuLi50fSx0Py5fdHlwZSYmcSh0aGlzLGRzLHQuX3R5cGUpLHRoaXMudXBkYXRlR2NUaW1lKHRoaXMub3B0aW9ucy5nY1RpbWUpLHRoaXMuc3RhdGUmJnRoaXMuc3RhdGUuZGF0YT09PXZvaWQgMCl7Y29uc3Qgbj1MbCh0aGlzLm9wdGlvbnMpO24uZGF0YSE9PXZvaWQgMCYmKHRoaXMuc2V0U3RhdGUoSWwobi5kYXRhLG4uZGF0YVVwZGF0ZWRBdCkpLHEodGhpcyxEbixuKSl9fW9wdGlvbmFsUmVtb3ZlKCl7IXRoaXMub2JzZXJ2ZXJzLmxlbmd0aCYmdGhpcy5zdGF0ZS5mZXRjaFN0YXR1cz09PSJpZGxlIiYmaih0aGlzLHN0KS5yZW1vdmUodGhpcyl9c2V0RGF0YSh0LG4pe2NvbnN0IHM9SG0odGhpcy5zdGF0ZS5kYXRhLHQsdGhpcy5vcHRpb25zKTtyZXR1cm4gTmUodGhpcyxaZSxWdCkuY2FsbCh0aGlzLHtkYXRhOnMsdHlwZToic3VjY2VzcyIsZGF0YVVwZGF0ZWRBdDpuPy51cGRhdGVkQXQsbWFudWFsOm4/Lm1hbnVhbH0pLHN9c2V0U3RhdGUodCl7TmUodGhpcyxaZSxWdCkuY2FsbCh0aGlzLHt0eXBlOiJzZXRTdGF0ZSIsc3RhdGU6dH0pfWNhbmNlbCh0KXtjb25zdCBuPWoodGhpcyxqZSk/LnByb21pc2U7cmV0dXJuIGoodGhpcyxqZSk/LmNhbmNlbCh0KSxuP24udGhlbihtdCkuY2F0Y2gobXQpOlByb21pc2UucmVzb2x2ZSgpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCksdGhpcy5jYW5jZWwoe3NpbGVudDohMH0pfWdldCByZXNldFN0YXRlKCl7cmV0dXJuIGoodGhpcyxEbil9cmVzZXQoKXt0aGlzLmRlc3Ryb3koKSx0aGlzLnNldFN0YXRlKHRoaXMucmVzZXRTdGF0ZSl9aXNBY3RpdmUoKXtyZXR1cm4gdGhpcy5vYnNlcnZlcnMuc29tZSh0PT56bSh0Lm9wdGlvbnMuZW5hYmxlZCx0aGlzKSE9PSExKX1pc0Rpc2FibGVkKCl7cmV0dXJuIHRoaXMuZ2V0T2JzZXJ2ZXJzQ291bnQoKT4wPyF0aGlzLmlzQWN0aXZlKCk6dGhpcy5vcHRpb25zLnF1ZXJ5Rm49PT1DYXx8IXRoaXMuaXNGZXRjaGVkKCl9aXNGZXRjaGVkKCl7cmV0dXJuIHRoaXMuc3RhdGUuZGF0YVVwZGF0ZUNvdW50K3RoaXMuc3RhdGUuZXJyb3JVcGRhdGVDb3VudD4wfWlzU3RhdGljKCl7cmV0dXJuIHRoaXMuZ2V0T2JzZXJ2ZXJzQ291bnQoKT4wP3RoaXMub2JzZXJ2ZXJzLnNvbWUodD0+Ym8odC5vcHRpb25zLnN0YWxlVGltZSx0aGlzKT09PSJzdGF0aWMiKTohMX1pc1N0YWxlKCl7cmV0dXJuIHRoaXMuZ2V0T2JzZXJ2ZXJzQ291bnQoKT4wP3RoaXMub2JzZXJ2ZXJzLnNvbWUodD0+dC5nZXRDdXJyZW50UmVzdWx0KCkuaXNTdGFsZSk6dGhpcy5zdGF0ZS5kYXRhPT09dm9pZCAwfHx0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWR9aXNTdGFsZUJ5VGltZSh0PTApe3JldHVybiB0aGlzLnN0YXRlLmRhdGE9PT12b2lkIDA/ITA6dD09PSJzdGF0aWMiPyExOnRoaXMuc3RhdGUuaXNJbnZhbGlkYXRlZD8hMDohV20odGhpcy5zdGF0ZS5kYXRhVXBkYXRlZEF0LHQpfW9uRm9jdXMoKXt0aGlzLm9ic2VydmVycy5maW5kKG49Pm4uc2hvdWxkRmV0Y2hPbldpbmRvd0ZvY3VzKCkpPy5yZWZldGNoKHtjYW5jZWxSZWZldGNoOiExfSksaih0aGlzLGplKT8uY29udGludWUoKX1vbk9ubGluZSgpe3RoaXMub2JzZXJ2ZXJzLmZpbmQobj0+bi5zaG91bGRGZXRjaE9uUmVjb25uZWN0KCkpPy5yZWZldGNoKHtjYW5jZWxSZWZldGNoOiExfSksaih0aGlzLGplKT8uY29udGludWUoKX1hZGRPYnNlcnZlcih0KXt0aGlzLm9ic2VydmVycy5pbmNsdWRlcyh0KXx8KHRoaXMub2JzZXJ2ZXJzLnB1c2godCksdGhpcy5jbGVhckdjVGltZW91dCgpLGoodGhpcyxzdCkubm90aWZ5KHt0eXBlOiJvYnNlcnZlckFkZGVkIixxdWVyeTp0aGlzLG9ic2VydmVyOnR9KSl9cmVtb3ZlT2JzZXJ2ZXIodCl7dGhpcy5vYnNlcnZlcnMuaW5jbHVkZXModCkmJih0aGlzLm9ic2VydmVycz10aGlzLm9ic2VydmVycy5maWx0ZXIobj0+biE9PXQpLHRoaXMub2JzZXJ2ZXJzLmxlbmd0aHx8KGoodGhpcyxqZSkmJihqKHRoaXMsT24pfHxOZSh0aGlzLFplLGt1KS5jYWxsKHRoaXMpP2oodGhpcyxqZSkuY2FuY2VsKHtyZXZlcnQ6ITB9KTpqKHRoaXMsamUpLmNhbmNlbFJldHJ5KCkpLHRoaXMuc2NoZWR1bGVHYygpKSxqKHRoaXMsc3QpLm5vdGlmeSh7dHlwZToib2JzZXJ2ZXJSZW1vdmVkIixxdWVyeTp0aGlzLG9ic2VydmVyOnR9KSl9Z2V0T2JzZXJ2ZXJzQ291bnQoKXtyZXR1cm4gdGhpcy5vYnNlcnZlcnMubGVuZ3RofWludmFsaWRhdGUoKXt0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWR8fE5lKHRoaXMsWmUsVnQpLmNhbGwodGhpcyx7dHlwZToiaW52YWxpZGF0ZSJ9KX1hc3luYyBmZXRjaCh0LG4pe2lmKHRoaXMuc3RhdGUuZmV0Y2hTdGF0dXMhPT0iaWRsZSImJmoodGhpcyxqZSk/LnN0YXR1cygpIT09InJlamVjdGVkIil7aWYodGhpcy5zdGF0ZS5kYXRhIT09dm9pZCAwJiZuPy5jYW5jZWxSZWZldGNoKXRoaXMuY2FuY2VsKHtzaWxlbnQ6ITB9KTtlbHNlIGlmKGoodGhpcyxqZSkpcmV0dXJuIGoodGhpcyxqZSkuY29udGludWVSZXRyeSgpLGoodGhpcyxqZSkucHJvbWlzZX1pZih0JiZ0aGlzLnNldE9wdGlvbnModCksIXRoaXMub3B0aW9ucy5xdWVyeUZuKXtjb25zdCBjPXRoaXMub2JzZXJ2ZXJzLmZpbmQodT0+dS5vcHRpb25zLnF1ZXJ5Rm4pO2MmJnRoaXMuc2V0T3B0aW9ucyhjLm9wdGlvbnMpfWNvbnN0IHM9bmV3IEFib3J0Q29udHJvbGxlcixyPWM9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoYywic2lnbmFsIix7ZW51bWVyYWJsZTohMCxnZXQ6KCk9PihxKHRoaXMsT24sITApLHMuc2lnbmFsKX0pfSxpPSgpPT57Y29uc3QgYz1TdSh0aGlzLm9wdGlvbnMsbiksZj0oKCk9Pntjb25zdCBoPXtjbGllbnQ6aih0aGlzLE1uKSxxdWVyeUtleTp0aGlzLnF1ZXJ5S2V5LG1ldGE6dGhpcy5tZXRhfTtyZXR1cm4gcihoKSxofSkoKTtyZXR1cm4gcSh0aGlzLE9uLCExKSx0aGlzLm9wdGlvbnMucGVyc2lzdGVyP3RoaXMub3B0aW9ucy5wZXJzaXN0ZXIoYyxmLHRoaXMpOmMoZil9LGw9KCgpPT57Y29uc3QgYz17ZmV0Y2hPcHRpb25zOm4sb3B0aW9uczp0aGlzLm9wdGlvbnMscXVlcnlLZXk6dGhpcy5xdWVyeUtleSxjbGllbnQ6aih0aGlzLE1uKSxzdGF0ZTp0aGlzLnN0YXRlLGZldGNoRm46aX07cmV0dXJuIHIoYyksY30pKCk7KGoodGhpcyxkcyk9PT0iaW5maW5pdGUiP2VnKHRoaXMub3B0aW9ucy5wYWdlcyk6dGhpcy5vcHRpb25zLmJlaGF2aW9yKT8ub25GZXRjaChsLHRoaXMpLHEodGhpcyx1cyx0aGlzLnN0YXRlKSwodGhpcy5zdGF0ZS5mZXRjaFN0YXR1cz09PSJpZGxlInx8dGhpcy5zdGF0ZS5mZXRjaE1ldGEhPT1sLmZldGNoT3B0aW9ucz8ubWV0YSkmJk5lKHRoaXMsWmUsVnQpLmNhbGwodGhpcyx7dHlwZToiZmV0Y2giLG1ldGE6bC5mZXRjaE9wdGlvbnM/Lm1ldGF9KSxxKHRoaXMsamUsRXUoe2luaXRpYWxQcm9taXNlOm4/LmluaXRpYWxQcm9taXNlLGZuOmwuZmV0Y2hGbixvbkNhbmNlbDpjPT57YyBpbnN0YW5jZW9mIENvJiZjLnJldmVydCYmdGhpcy5zZXRTdGF0ZSh7Li4uaih0aGlzLHVzKSxmZXRjaFN0YXR1czoiaWRsZSJ9KSxzLmFib3J0KCl9LG9uRmFpbDooYyx1KT0+e05lKHRoaXMsWmUsVnQpLmNhbGwodGhpcyx7dHlwZToiZmFpbGVkIixmYWlsdXJlQ291bnQ6YyxlcnJvcjp1fSl9LG9uUGF1c2U6KCk9PntOZSh0aGlzLFplLFZ0KS5jYWxsKHRoaXMse3R5cGU6InBhdXNlIn0pfSxvbkNvbnRpbnVlOigpPT57TmUodGhpcyxaZSxWdCkuY2FsbCh0aGlzLHt0eXBlOiJjb250aW51ZSJ9KX0scmV0cnk6bC5vcHRpb25zLnJldHJ5LHJldHJ5RGVsYXk6bC5vcHRpb25zLnJldHJ5RGVsYXksbmV0d29ya01vZGU6bC5vcHRpb25zLm5ldHdvcmtNb2RlLGNhblJ1bjooKT0+ITB9KSk7dHJ5e2NvbnN0IGM9YXdhaXQgaih0aGlzLGplKS5zdGFydCgpO2lmKGM9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGAke3RoaXMucXVlcnlIYXNofSBkYXRhIGlzIHVuZGVmaW5lZGApO3JldHVybiB0aGlzLnNldERhdGEoYyksaih0aGlzLHN0KS5jb25maWcub25TdWNjZXNzPy4oYyx0aGlzKSxqKHRoaXMsc3QpLmNvbmZpZy5vblNldHRsZWQ/LihjLHRoaXMuc3RhdGUuZXJyb3IsdGhpcyksY31jYXRjaChjKXtpZihjIGluc3RhbmNlb2YgQ28pe2lmKGMuc2lsZW50KXJldHVybiBqKHRoaXMsamUpLnByb21pc2U7aWYoYy5yZXZlcnQpe2lmKHRoaXMuc3RhdGUuZGF0YT09PXZvaWQgMCl0aHJvdyBjO3JldHVybiB0aGlzLnN0YXRlLmRhdGF9fXRocm93IE5lKHRoaXMsWmUsVnQpLmNhbGwodGhpcyx7dHlwZToiZXJyb3IiLGVycm9yOmN9KSxqKHRoaXMsc3QpLmNvbmZpZy5vbkVycm9yPy4oYyx0aGlzKSxqKHRoaXMsc3QpLmNvbmZpZy5vblNldHRsZWQ/Lih0aGlzLnN0YXRlLmRhdGEsYyx0aGlzKSxjfWZpbmFsbHl7dGhpcy5zY2hlZHVsZUdjKCl9fX0sZHM9bmV3IFdlYWtNYXAsRG49bmV3IFdlYWtNYXAsdXM9bmV3IFdlYWtNYXAsc3Q9bmV3IFdlYWtNYXAsTW49bmV3IFdlYWtNYXAsamU9bmV3IFdlYWtNYXAscnI9bmV3IFdlYWtNYXAsT249bmV3IFdlYWtNYXAsWmU9bmV3IFdlYWtTZXQsa3U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZS5mZXRjaFN0YXR1cz09PSJwYXVzZWQiJiZ0aGlzLnN0YXRlLnN0YXR1cz09PSJwZW5kaW5nIn0sVnQ9ZnVuY3Rpb24odCl7Y29uc3Qgbj1zPT57c3dpdGNoKHQudHlwZSl7Y2FzZSJmYWlsZWQiOnJldHVybnsuLi5zLGZldGNoRmFpbHVyZUNvdW50OnQuZmFpbHVyZUNvdW50LGZldGNoRmFpbHVyZVJlYXNvbjp0LmVycm9yfTtjYXNlInBhdXNlIjpyZXR1cm57Li4ucyxmZXRjaFN0YXR1czoicGF1c2VkIn07Y2FzZSJjb250aW51ZSI6cmV0dXJuey4uLnMsZmV0Y2hTdGF0dXM6ImZldGNoaW5nIn07Y2FzZSJmZXRjaCI6cmV0dXJuey4uLnMsLi4uc2cocy5kYXRhLHRoaXMub3B0aW9ucyksZmV0Y2hNZXRhOnQubWV0YT8/bnVsbH07Y2FzZSJzdWNjZXNzIjpjb25zdCByPXsuLi5zLC4uLklsKHQuZGF0YSx0LmRhdGFVcGRhdGVkQXQpLGRhdGFVcGRhdGVDb3VudDpzLmRhdGFVcGRhdGVDb3VudCsxLC4uLiF0Lm1hbnVhbCYme2ZldGNoU3RhdHVzOiJpZGxlIixmZXRjaEZhaWx1cmVDb3VudDowLGZldGNoRmFpbHVyZVJlYXNvbjpudWxsfX07cmV0dXJuIHEodGhpcyx1cyx0Lm1hbnVhbD9yOnZvaWQgMCkscjtjYXNlImVycm9yIjpjb25zdCBpPXQuZXJyb3I7cmV0dXJuey4uLnMsZXJyb3I6aSxlcnJvclVwZGF0ZUNvdW50OnMuZXJyb3JVcGRhdGVDb3VudCsxLGVycm9yVXBkYXRlZEF0OkRhdGUubm93KCksZmV0Y2hGYWlsdXJlQ291bnQ6cy5mZXRjaEZhaWx1cmVDb3VudCsxLGZldGNoRmFpbHVyZVJlYXNvbjppLGZldGNoU3RhdHVzOiJpZGxlIixzdGF0dXM6ImVycm9yIixpc0ludmFsaWRhdGVkOiEwfTtjYXNlImludmFsaWRhdGUiOnJldHVybnsuLi5zLGlzSW52YWxpZGF0ZWQ6ITB9O2Nhc2Uic2V0U3RhdGUiOnJldHVybnsuLi5zLC4uLnQuc3RhdGV9fX07dGhpcy5zdGF0ZT1uKHRoaXMuc3RhdGUpLF9lLmJhdGNoKCgpPT57dGhpcy5vYnNlcnZlcnMuZm9yRWFjaChzPT57cy5vblF1ZXJ5VXBkYXRlKCl9KSxqKHRoaXMsc3QpLm5vdGlmeSh7cXVlcnk6dGhpcyx0eXBlOiJ1cGRhdGVkIixhY3Rpb246dH0pfSl9LHB1KTtmdW5jdGlvbiBzZyhlLHQpe3JldHVybntmZXRjaEZhaWx1cmVDb3VudDowLGZldGNoRmFpbHVyZVJlYXNvbjpudWxsLGZldGNoU3RhdHVzOmp1KHQubmV0d29ya01vZGUpPyJmZXRjaGluZyI6InBhdXNlZCIsLi4uZT09PXZvaWQgMCYme2Vycm9yOm51bGwsc3RhdHVzOiJwZW5kaW5nIn19fWZ1bmN0aW9uIElsKGUsdCl7cmV0dXJue2RhdGE6ZSxkYXRhVXBkYXRlZEF0OnQ/P0RhdGUubm93KCksZXJyb3I6bnVsbCxpc0ludmFsaWRhdGVkOiExLHN0YXR1czoic3VjY2VzcyJ9fWZ1bmN0aW9uIExsKGUpe2NvbnN0IHQ9dHlwZW9mIGUuaW5pdGlhbERhdGE9PSJmdW5jdGlvbiI/ZS5pbml0aWFsRGF0YSgpOmUuaW5pdGlhbERhdGEsbj10IT09dm9pZCAwLHM9bj90eXBlb2YgZS5pbml0aWFsRGF0YVVwZGF0ZWRBdD09ImZ1bmN0aW9uIj9lLmluaXRpYWxEYXRhVXBkYXRlZEF0KCk6ZS5pbml0aWFsRGF0YVVwZGF0ZWRBdDowO3JldHVybntkYXRhOnQsZGF0YVVwZGF0ZUNvdW50OjAsZGF0YVVwZGF0ZWRBdDpuP3M/P0RhdGUubm93KCk6MCxlcnJvcjpudWxsLGVycm9yVXBkYXRlQ291bnQ6MCxlcnJvclVwZGF0ZWRBdDowLGZldGNoRmFpbHVyZUNvdW50OjAsZmV0Y2hGYWlsdXJlUmVhc29uOm51bGwsZmV0Y2hNZXRhOm51bGwsaXNJbnZhbGlkYXRlZDohMSxzdGF0dXM6bj8ic3VjY2VzcyI6InBlbmRpbmciLGZldGNoU3RhdHVzOiJpZGxlIn19dmFyIGlyLFN0LE1lLEluLFB0LG5uLG11LHJnPShtdT1jbGFzcyBleHRlbmRzIEF1e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCk7Wih0aGlzLFB0KTtaKHRoaXMsaXIpO1oodGhpcyxTdCk7Wih0aGlzLE1lKTtaKHRoaXMsSW4pO3EodGhpcyxpcix0LmNsaWVudCksdGhpcy5tdXRhdGlvbklkPXQubXV0YXRpb25JZCxxKHRoaXMsTWUsdC5tdXRhdGlvbkNhY2hlKSxxKHRoaXMsU3QsW10pLHRoaXMuc3RhdGU9dC5zdGF0ZXx8aWcoKSx0aGlzLnNldE9wdGlvbnModC5vcHRpb25zKSx0aGlzLnNjaGVkdWxlR2MoKX1zZXRPcHRpb25zKHQpe3RoaXMub3B0aW9ucz10LHRoaXMudXBkYXRlR2NUaW1lKHRoaXMub3B0aW9ucy5nY1RpbWUpfWdldCBtZXRhKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5tZXRhfWFkZE9ic2VydmVyKHQpe2oodGhpcyxTdCkuaW5jbHVkZXModCl8fChqKHRoaXMsU3QpLnB1c2godCksdGhpcy5jbGVhckdjVGltZW91dCgpLGoodGhpcyxNZSkubm90aWZ5KHt0eXBlOiJvYnNlcnZlckFkZGVkIixtdXRhdGlvbjp0aGlzLG9ic2VydmVyOnR9KSl9cmVtb3ZlT2JzZXJ2ZXIodCl7cSh0aGlzLFN0LGoodGhpcyxTdCkuZmlsdGVyKG49Pm4hPT10KSksdGhpcy5zY2hlZHVsZUdjKCksaih0aGlzLE1lKS5ub3RpZnkoe3R5cGU6Im9ic2VydmVyUmVtb3ZlZCIsbXV0YXRpb246dGhpcyxvYnNlcnZlcjp0fSl9b3B0aW9uYWxSZW1vdmUoKXtqKHRoaXMsU3QpLmxlbmd0aHx8KHRoaXMuc3RhdGUuc3RhdHVzPT09InBlbmRpbmciP3RoaXMuc2NoZWR1bGVHYygpOmoodGhpcyxNZSkucmVtb3ZlKHRoaXMpKX1jb250aW51ZSgpe3JldHVybiBqKHRoaXMsSW4pPy5jb250aW51ZSgpPz90aGlzLmV4ZWN1dGUodGhpcy5zdGF0ZS52YXJpYWJsZXMpfWFzeW5jIGV4ZWN1dGUodCl7Y29uc3Qgbj0oKT0+e05lKHRoaXMsUHQsbm4pLmNhbGwodGhpcyx7dHlwZToiY29udGludWUifSl9LHM9e2NsaWVudDpqKHRoaXMsaXIpLG1ldGE6dGhpcy5vcHRpb25zLm1ldGEsbXV0YXRpb25LZXk6dGhpcy5vcHRpb25zLm11dGF0aW9uS2V5fTtxKHRoaXMsSW4sRXUoe2ZuOigpPT50aGlzLm9wdGlvbnMubXV0YXRpb25Gbj90aGlzLm9wdGlvbnMubXV0YXRpb25Gbih0LHMpOlByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiTm8gbXV0YXRpb25GbiBmb3VuZCIpKSxvbkZhaWw6KG8sbCk9PntOZSh0aGlzLFB0LG5uKS5jYWxsKHRoaXMse3R5cGU6ImZhaWxlZCIsZmFpbHVyZUNvdW50Om8sZXJyb3I6bH0pfSxvblBhdXNlOigpPT57TmUodGhpcyxQdCxubikuY2FsbCh0aGlzLHt0eXBlOiJwYXVzZSJ9KX0sb25Db250aW51ZTpuLHJldHJ5OnRoaXMub3B0aW9ucy5yZXRyeT8/MCxyZXRyeURlbGF5OnRoaXMub3B0aW9ucy5yZXRyeURlbGF5LG5ldHdvcmtNb2RlOnRoaXMub3B0aW9ucy5uZXR3b3JrTW9kZSxjYW5SdW46KCk9PmoodGhpcyxNZSkuY2FuUnVuKHRoaXMpfSkpO2NvbnN0IHI9dGhpcy5zdGF0ZS5zdGF0dXM9PT0icGVuZGluZyIsaT0haih0aGlzLEluKS5jYW5TdGFydCgpO3RyeXtpZihyKW4oKTtlbHNle05lKHRoaXMsUHQsbm4pLmNhbGwodGhpcyx7dHlwZToicGVuZGluZyIsdmFyaWFibGVzOnQsaXNQYXVzZWQ6aX0pLGoodGhpcyxNZSkuY29uZmlnLm9uTXV0YXRlJiZhd2FpdCBqKHRoaXMsTWUpLmNvbmZpZy5vbk11dGF0ZSh0LHRoaXMscyk7Y29uc3QgbD1hd2FpdCB0aGlzLm9wdGlvbnMub25NdXRhdGU/Lih0LHMpO2whPT10aGlzLnN0YXRlLmNvbnRleHQmJk5lKHRoaXMsUHQsbm4pLmNhbGwodGhpcyx7dHlwZToicGVuZGluZyIsY29udGV4dDpsLHZhcmlhYmxlczp0LGlzUGF1c2VkOml9KX1jb25zdCBvPWF3YWl0IGoodGhpcyxJbikuc3RhcnQoKTtyZXR1cm4gYXdhaXQgaih0aGlzLE1lKS5jb25maWcub25TdWNjZXNzPy4obyx0LHRoaXMuc3RhdGUuY29udGV4dCx0aGlzLHMpLGF3YWl0IHRoaXMub3B0aW9ucy5vblN1Y2Nlc3M/LihvLHQsdGhpcy5zdGF0ZS5jb250ZXh0LHMpLGF3YWl0IGoodGhpcyxNZSkuY29uZmlnLm9uU2V0dGxlZD8uKG8sbnVsbCx0aGlzLnN0YXRlLnZhcmlhYmxlcyx0aGlzLnN0YXRlLmNvbnRleHQsdGhpcyxzKSxhd2FpdCB0aGlzLm9wdGlvbnMub25TZXR0bGVkPy4obyxudWxsLHQsdGhpcy5zdGF0ZS5jb250ZXh0LHMpLE5lKHRoaXMsUHQsbm4pLmNhbGwodGhpcyx7dHlwZToic3VjY2VzcyIsZGF0YTpvfSksb31jYXRjaChvKXt0cnl7YXdhaXQgaih0aGlzLE1lKS5jb25maWcub25FcnJvcj8uKG8sdCx0aGlzLnN0YXRlLmNvbnRleHQsdGhpcyxzKX1jYXRjaChsKXtQcm9taXNlLnJlamVjdChsKX10cnl7YXdhaXQgdGhpcy5vcHRpb25zLm9uRXJyb3I/LihvLHQsdGhpcy5zdGF0ZS5jb250ZXh0LHMpfWNhdGNoKGwpe1Byb21pc2UucmVqZWN0KGwpfXRyeXthd2FpdCBqKHRoaXMsTWUpLmNvbmZpZy5vblNldHRsZWQ/Lih2b2lkIDAsbyx0aGlzLnN0YXRlLnZhcmlhYmxlcyx0aGlzLnN0YXRlLmNvbnRleHQsdGhpcyxzKX1jYXRjaChsKXtQcm9taXNlLnJlamVjdChsKX10cnl7YXdhaXQgdGhpcy5vcHRpb25zLm9uU2V0dGxlZD8uKHZvaWQgMCxvLHQsdGhpcy5zdGF0ZS5jb250ZXh0LHMpfWNhdGNoKGwpe1Byb21pc2UucmVqZWN0KGwpfXRocm93IE5lKHRoaXMsUHQsbm4pLmNhbGwodGhpcyx7dHlwZToiZXJyb3IiLGVycm9yOm99KSxvfWZpbmFsbHl7aih0aGlzLE1lKS5ydW5OZXh0KHRoaXMpfX19LGlyPW5ldyBXZWFrTWFwLFN0PW5ldyBXZWFrTWFwLE1lPW5ldyBXZWFrTWFwLEluPW5ldyBXZWFrTWFwLFB0PW5ldyBXZWFrU2V0LG5uPWZ1bmN0aW9uKHQpe2NvbnN0IG49cz0+e3N3aXRjaCh0LnR5cGUpe2Nhc2UiZmFpbGVkIjpyZXR1cm57Li4ucyxmYWlsdXJlQ291bnQ6dC5mYWlsdXJlQ291bnQsZmFpbHVyZVJlYXNvbjp0LmVycm9yfTtjYXNlInBhdXNlIjpyZXR1cm57Li4ucyxpc1BhdXNlZDohMH07Y2FzZSJjb250aW51ZSI6cmV0dXJuey4uLnMsaXNQYXVzZWQ6ITF9O2Nhc2UicGVuZGluZyI6cmV0dXJuey4uLnMsY29udGV4dDp0LmNvbnRleHQsZGF0YTp2b2lkIDAsZmFpbHVyZUNvdW50OjAsZmFpbHVyZVJlYXNvbjpudWxsLGVycm9yOm51bGwsaXNQYXVzZWQ6dC5pc1BhdXNlZCxzdGF0dXM6InBlbmRpbmciLHZhcmlhYmxlczp0LnZhcmlhYmxlcyxzdWJtaXR0ZWRBdDpEYXRlLm5vdygpfTtjYXNlInN1Y2Nlc3MiOnJldHVybnsuLi5zLGRhdGE6dC5kYXRhLGZhaWx1cmVDb3VudDowLGZhaWx1cmVSZWFzb246bnVsbCxlcnJvcjpudWxsLHN0YXR1czoic3VjY2VzcyIsaXNQYXVzZWQ6ITF9O2Nhc2UiZXJyb3IiOnJldHVybnsuLi5zLGRhdGE6dm9pZCAwLGVycm9yOnQuZXJyb3IsZmFpbHVyZUNvdW50OnMuZmFpbHVyZUNvdW50KzEsZmFpbHVyZVJlYXNvbjp0LmVycm9yLGlzUGF1c2VkOiExLHN0YXR1czoiZXJyb3IifX19O3RoaXMuc3RhdGU9bih0aGlzLnN0YXRlKSxfZS5iYXRjaCgoKT0+e2oodGhpcyxTdCkuZm9yRWFjaChzPT57cy5vbk11dGF0aW9uVXBkYXRlKHQpfSksaih0aGlzLE1lKS5ub3RpZnkoe211dGF0aW9uOnRoaXMsdHlwZToidXBkYXRlZCIsYWN0aW9uOnR9KX0pfSxtdSk7ZnVuY3Rpb24gaWcoKXtyZXR1cm57Y29udGV4dDp2b2lkIDAsZGF0YTp2b2lkIDAsZXJyb3I6bnVsbCxmYWlsdXJlQ291bnQ6MCxmYWlsdXJlUmVhc29uOm51bGwsaXNQYXVzZWQ6ITEsc3RhdHVzOiJpZGxlIix2YXJpYWJsZXM6dm9pZCAwLHN1Ym1pdHRlZEF0OjB9fXZhciB6dCxndCxvcixndSxvZz0oZ3U9Y2xhc3MgZXh0ZW5kcyB3aXtjb25zdHJ1Y3Rvcih0PXt9KXtzdXBlcigpO1oodGhpcyx6dCk7Wih0aGlzLGd0KTtaKHRoaXMsb3IpO3RoaXMuY29uZmlnPXQscSh0aGlzLHp0LG5ldyBTZXQpLHEodGhpcyxndCxuZXcgTWFwKSxxKHRoaXMsb3IsMCl9YnVpbGQodCxuLHMpe2NvbnN0IHI9bmV3IHJnKHtjbGllbnQ6dCxtdXRhdGlvbkNhY2hlOnRoaXMsbXV0YXRpb25JZDorK3lyKHRoaXMsb3IpLl8sb3B0aW9uczp0LmRlZmF1bHRNdXRhdGlvbk9wdGlvbnMobiksc3RhdGU6c30pO3JldHVybiB0aGlzLmFkZChyKSxyfWFkZCh0KXtqKHRoaXMsenQpLmFkZCh0KTtjb25zdCBuPXZyKHQpO2lmKHR5cGVvZiBuPT0ic3RyaW5nIil7Y29uc3Qgcz1qKHRoaXMsZ3QpLmdldChuKTtzP3MucHVzaCh0KTpqKHRoaXMsZ3QpLnNldChuLFt0XSl9dGhpcy5ub3RpZnkoe3R5cGU6ImFkZGVkIixtdXRhdGlvbjp0fSl9cmVtb3ZlKHQpe2lmKGoodGhpcyx6dCkuZGVsZXRlKHQpKXtjb25zdCBuPXZyKHQpO2lmKHR5cGVvZiBuPT0ic3RyaW5nIil7Y29uc3Qgcz1qKHRoaXMsZ3QpLmdldChuKTtpZihzKWlmKHMubGVuZ3RoPjEpe2NvbnN0IHI9cy5pbmRleE9mKHQpO3IhPT0tMSYmcy5zcGxpY2UociwxKX1lbHNlIHNbMF09PT10JiZqKHRoaXMsZ3QpLmRlbGV0ZShuKX19dGhpcy5ub3RpZnkoe3R5cGU6InJlbW92ZWQiLG11dGF0aW9uOnR9KX1jYW5SdW4odCl7Y29uc3Qgbj12cih0KTtpZih0eXBlb2Ygbj09InN0cmluZyIpe2NvbnN0IHI9aih0aGlzLGd0KS5nZXQobik/LmZpbmQoaT0+aS5zdGF0ZS5zdGF0dXM9PT0icGVuZGluZyIpO3JldHVybiFyfHxyPT09dH1lbHNlIHJldHVybiEwfXJ1bk5leHQodCl7Y29uc3Qgbj12cih0KTtyZXR1cm4gdHlwZW9mIG49PSJzdHJpbmciP2oodGhpcyxndCkuZ2V0KG4pPy5maW5kKHI9PnIhPT10JiZyLnN0YXRlLmlzUGF1c2VkKT8uY29udGludWUoKT8/UHJvbWlzZS5yZXNvbHZlKCk6UHJvbWlzZS5yZXNvbHZlKCl9Y2xlYXIoKXtfZS5iYXRjaCgoKT0+e2oodGhpcyx6dCkuZm9yRWFjaCh0PT57dGhpcy5ub3RpZnkoe3R5cGU6InJlbW92ZWQiLG11dGF0aW9uOnR9KX0pLGoodGhpcyx6dCkuY2xlYXIoKSxqKHRoaXMsZ3QpLmNsZWFyKCl9KX1nZXRBbGwoKXtyZXR1cm4gQXJyYXkuZnJvbShqKHRoaXMsenQpKX1maW5kKHQpe2NvbnN0IG49e2V4YWN0OiEwLC4uLnR9O3JldHVybiB0aGlzLmdldEFsbCgpLmZpbmQocz0+UmwobixzKSl9ZmluZEFsbCh0PXt9KXtyZXR1cm4gdGhpcy5nZXRBbGwoKS5maWx0ZXIobj0+UmwodCxuKSl9bm90aWZ5KHQpe19lLmJhdGNoKCgpPT57dGhpcy5saXN0ZW5lcnMuZm9yRWFjaChuPT57bih0KX0pfSl9cmVzdW1lUGF1c2VkTXV0YXRpb25zKCl7Y29uc3QgdD10aGlzLmdldEFsbCgpLmZpbHRlcihuPT5uLnN0YXRlLmlzUGF1c2VkKTtyZXR1cm4gX2UuYmF0Y2goKCk9PlByb21pc2UuYWxsKHQubWFwKG49Pm4uY29udGludWUoKS5jYXRjaChtdCkpKSl9fSx6dD1uZXcgV2Vha01hcCxndD1uZXcgV2Vha01hcCxvcj1uZXcgV2Vha01hcCxndSk7ZnVuY3Rpb24gdnIoZSl7cmV0dXJuIGUub3B0aW9ucy5zY29wZT8uaWR9dmFyIGp0LHl1LGFnPSh5dT1jbGFzcyBleHRlbmRzIHdpe2NvbnN0cnVjdG9yKHQ9e30pe3N1cGVyKCk7Wih0aGlzLGp0KTt0aGlzLmNvbmZpZz10LHEodGhpcyxqdCxuZXcgTWFwKX1idWlsZCh0LG4scyl7Y29uc3Qgcj1uLnF1ZXJ5S2V5LGk9bi5xdWVyeUhhc2g/P3dhKHIsbik7bGV0IG89dGhpcy5nZXQoaSk7cmV0dXJuIG98fChvPW5ldyBuZyh7Y2xpZW50OnQscXVlcnlLZXk6cixxdWVyeUhhc2g6aSxvcHRpb25zOnQuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhuKSxzdGF0ZTpzLGRlZmF1bHRPcHRpb25zOnQuZ2V0UXVlcnlEZWZhdWx0cyhyKX0pLHRoaXMuYWRkKG8pKSxvfWFkZCh0KXtqKHRoaXMsanQpLmhhcyh0LnF1ZXJ5SGFzaCl8fChqKHRoaXMsanQpLnNldCh0LnF1ZXJ5SGFzaCx0KSx0aGlzLm5vdGlmeSh7dHlwZToiYWRkZWQiLHF1ZXJ5OnR9KSl9cmVtb3ZlKHQpe2NvbnN0IG49aih0aGlzLGp0KS5nZXQodC5xdWVyeUhhc2gpO24mJih0LmRlc3Ryb3koKSxuPT09dCYmaih0aGlzLGp0KS5kZWxldGUodC5xdWVyeUhhc2gpLHRoaXMubm90aWZ5KHt0eXBlOiJyZW1vdmVkIixxdWVyeTp0fSkpfWNsZWFyKCl7X2UuYmF0Y2goKCk9Pnt0aGlzLmdldEFsbCgpLmZvckVhY2godD0+e3RoaXMucmVtb3ZlKHQpfSl9KX1nZXQodCl7cmV0dXJuIGoodGhpcyxqdCkuZ2V0KHQpfWdldEFsbCgpe3JldHVyblsuLi5qKHRoaXMsanQpLnZhbHVlcygpXX1maW5kKHQpe2NvbnN0IG49e2V4YWN0OiEwLC4uLnR9O3JldHVybiB0aGlzLmdldEFsbCgpLmZpbmQocz0+TmwobixzKSl9ZmluZEFsbCh0PXt9KXtjb25zdCBuPXRoaXMuZ2V0QWxsKCk7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmxlbmd0aD4wP24uZmlsdGVyKHM9Pk5sKHQscykpOm59bm90aWZ5KHQpe19lLmJhdGNoKCgpPT57dGhpcy5saXN0ZW5lcnMuZm9yRWFjaChuPT57bih0KX0pfSl9b25Gb2N1cygpe19lLmJhdGNoKCgpPT57dGhpcy5nZXRBbGwoKS5mb3JFYWNoKHQ9Pnt0Lm9uRm9jdXMoKX0pfSl9b25PbmxpbmUoKXtfZS5iYXRjaCgoKT0+e3RoaXMuZ2V0QWxsKCkuZm9yRWFjaCh0PT57dC5vbk9ubGluZSgpfSl9KX19LGp0PW5ldyBXZWFrTWFwLHl1KSx2ZSxsbixjbixmcyxocyxkbixwcyxtcyx2dSxsZz0odnU9Y2xhc3N7Y29uc3RydWN0b3IoZT17fSl7Wih0aGlzLHZlKTtaKHRoaXMsbG4pO1oodGhpcyxjbik7Wih0aGlzLGZzKTtaKHRoaXMsaHMpO1oodGhpcyxkbik7Wih0aGlzLHBzKTtaKHRoaXMsbXMpO3EodGhpcyx2ZSxlLnF1ZXJ5Q2FjaGV8fG5ldyBhZykscSh0aGlzLGxuLGUubXV0YXRpb25DYWNoZXx8bmV3IG9nKSxxKHRoaXMsY24sZS5kZWZhdWx0T3B0aW9uc3x8e30pLHEodGhpcyxmcyxuZXcgTWFwKSxxKHRoaXMsaHMsbmV3IE1hcCkscSh0aGlzLGRuLDApfW1vdW50KCl7eXIodGhpcyxkbikuXysrLGoodGhpcyxkbik9PT0xJiYocSh0aGlzLHBzLEN1LnN1YnNjcmliZShhc3luYyBlPT57ZSYmKGF3YWl0IHRoaXMucmVzdW1lUGF1c2VkTXV0YXRpb25zKCksaih0aGlzLHZlKS5vbkZvY3VzKCkpfSkpLHEodGhpcyxtcyxaci5zdWJzY3JpYmUoYXN5bmMgZT0+e2UmJihhd2FpdCB0aGlzLnJlc3VtZVBhdXNlZE11dGF0aW9ucygpLGoodGhpcyx2ZSkub25PbmxpbmUoKSl9KSkpfXVubW91bnQoKXt2YXIgZSx0O3lyKHRoaXMsZG4pLl8tLSxqKHRoaXMsZG4pPT09MCYmKChlPWoodGhpcyxwcykpPT1udWxsfHxlLmNhbGwodGhpcykscSh0aGlzLHBzLHZvaWQgMCksKHQ9aih0aGlzLG1zKSk9PW51bGx8fHQuY2FsbCh0aGlzKSxxKHRoaXMsbXMsdm9pZCAwKSl9aXNGZXRjaGluZyhlKXtyZXR1cm4gaih0aGlzLHZlKS5maW5kQWxsKHsuLi5lLGZldGNoU3RhdHVzOiJmZXRjaGluZyJ9KS5sZW5ndGh9aXNNdXRhdGluZyhlKXtyZXR1cm4gaih0aGlzLGxuKS5maW5kQWxsKHsuLi5lLHN0YXR1czoicGVuZGluZyJ9KS5sZW5ndGh9Z2V0UXVlcnlEYXRhKGUpe2NvbnN0IHQ9dGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKHtxdWVyeUtleTplfSk7cmV0dXJuIGoodGhpcyx2ZSkuZ2V0KHQucXVlcnlIYXNoKT8uc3RhdGUuZGF0YX1lbnN1cmVRdWVyeURhdGEoZSl7Y29uc3QgdD10aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMoZSksbj1qKHRoaXMsdmUpLmJ1aWxkKHRoaXMsdCkscz1uLnN0YXRlLmRhdGE7cmV0dXJuIHM9PT12b2lkIDA/dGhpcy5mZXRjaFF1ZXJ5KGUpOihlLnJldmFsaWRhdGVJZlN0YWxlJiZuLmlzU3RhbGVCeVRpbWUoYm8odC5zdGFsZVRpbWUsbikpJiZ0aGlzLnByZWZldGNoUXVlcnkodCksUHJvbWlzZS5yZXNvbHZlKHMpKX1nZXRRdWVyaWVzRGF0YShlKXtyZXR1cm4gaih0aGlzLHZlKS5maW5kQWxsKGUpLm1hcCgoe3F1ZXJ5S2V5OnQsc3RhdGU6bn0pPT57Y29uc3Qgcz1uLmRhdGE7cmV0dXJuW3Qsc119KX1zZXRRdWVyeURhdGEoZSx0LG4pe2NvbnN0IHM9dGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKHtxdWVyeUtleTplfSksaT1qKHRoaXMsdmUpLmdldChzLnF1ZXJ5SGFzaCk/LnN0YXRlLmRhdGEsbz1fbSh0LGkpO2lmKG8hPT12b2lkIDApcmV0dXJuIGoodGhpcyx2ZSkuYnVpbGQodGhpcyxzKS5zZXREYXRhKG8sey4uLm4sbWFudWFsOiEwfSl9c2V0UXVlcmllc0RhdGEoZSx0LG4pe3JldHVybiBfZS5iYXRjaCgoKT0+aih0aGlzLHZlKS5maW5kQWxsKGUpLm1hcCgoe3F1ZXJ5S2V5OnN9KT0+W3MsdGhpcy5zZXRRdWVyeURhdGEocyx0LG4pXSkpfWdldFF1ZXJ5U3RhdGUoZSl7Y29uc3QgdD10aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMoe3F1ZXJ5S2V5OmV9KTtyZXR1cm4gaih0aGlzLHZlKS5nZXQodC5xdWVyeUhhc2gpPy5zdGF0ZX1yZW1vdmVRdWVyaWVzKGUpe2NvbnN0IHQ9aih0aGlzLHZlKTtfZS5iYXRjaCgoKT0+e3QuZmluZEFsbChlKS5mb3JFYWNoKG49Pnt0LnJlbW92ZShuKX0pfSl9cmVzZXRRdWVyaWVzKGUsdCl7Y29uc3Qgbj1qKHRoaXMsdmUpO3JldHVybiBfZS5iYXRjaCgoKT0+KG4uZmluZEFsbChlKS5mb3JFYWNoKHM9PntzLnJlc2V0KCl9KSx0aGlzLnJlZmV0Y2hRdWVyaWVzKHt0eXBlOiJhY3RpdmUiLC4uLmV9LHQpKSl9Y2FuY2VsUXVlcmllcyhlLHQ9e30pe2NvbnN0IG49e3JldmVydDohMCwuLi50fSxzPV9lLmJhdGNoKCgpPT5qKHRoaXMsdmUpLmZpbmRBbGwoZSkubWFwKHI9PnIuY2FuY2VsKG4pKSk7cmV0dXJuIFByb21pc2UuYWxsKHMpLnRoZW4obXQpLmNhdGNoKG10KX1pbnZhbGlkYXRlUXVlcmllcyhlLHQ9e30pe3JldHVybiBfZS5iYXRjaCgoKT0+KGoodGhpcyx2ZSkuZmluZEFsbChlKS5mb3JFYWNoKG49PntuLmludmFsaWRhdGUoKX0pLGU/LnJlZmV0Y2hUeXBlPT09Im5vbmUiP1Byb21pc2UucmVzb2x2ZSgpOnRoaXMucmVmZXRjaFF1ZXJpZXMoey4uLmUsdHlwZTplPy5yZWZldGNoVHlwZT8/ZT8udHlwZT8/ImFjdGl2ZSJ9LHQpKSl9cmVmZXRjaFF1ZXJpZXMoZSx0PXt9KXtjb25zdCBuPXsuLi50LGNhbmNlbFJlZmV0Y2g6dC5jYW5jZWxSZWZldGNoPz8hMH0scz1fZS5iYXRjaCgoKT0+aih0aGlzLHZlKS5maW5kQWxsKGUpLmZpbHRlcihyPT4hci5pc0Rpc2FibGVkKCkmJiFyLmlzU3RhdGljKCkpLm1hcChyPT57bGV0IGk9ci5mZXRjaCh2b2lkIDAsbik7cmV0dXJuIG4udGhyb3dPbkVycm9yfHwoaT1pLmNhdGNoKG10KSksci5zdGF0ZS5mZXRjaFN0YXR1cz09PSJwYXVzZWQiP1Byb21pc2UucmVzb2x2ZSgpOml9KSk7cmV0dXJuIFByb21pc2UuYWxsKHMpLnRoZW4obXQpfWZldGNoUXVlcnkoZSl7Y29uc3QgdD10aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMoZSk7dC5yZXRyeT09PXZvaWQgMCYmKHQucmV0cnk9ITEpO2NvbnN0IG49aih0aGlzLHZlKS5idWlsZCh0aGlzLHQpO3JldHVybiBuLmlzU3RhbGVCeVRpbWUoYm8odC5zdGFsZVRpbWUsbikpP24uZmV0Y2godCk6UHJvbWlzZS5yZXNvbHZlKG4uc3RhdGUuZGF0YSl9cHJlZmV0Y2hRdWVyeShlKXtyZXR1cm4gdGhpcy5mZXRjaFF1ZXJ5KGUpLnRoZW4obXQpLmNhdGNoKG10KX1mZXRjaEluZmluaXRlUXVlcnkoZSl7cmV0dXJuIGUuX3R5cGU9ImluZmluaXRlIix0aGlzLmZldGNoUXVlcnkoZSl9cHJlZmV0Y2hJbmZpbml0ZVF1ZXJ5KGUpe3JldHVybiB0aGlzLmZldGNoSW5maW5pdGVRdWVyeShlKS50aGVuKG10KS5jYXRjaChtdCl9ZW5zdXJlSW5maW5pdGVRdWVyeURhdGEoZSl7cmV0dXJuIGUuX3R5cGU9ImluZmluaXRlIix0aGlzLmVuc3VyZVF1ZXJ5RGF0YShlKX1yZXN1bWVQYXVzZWRNdXRhdGlvbnMoKXtyZXR1cm4gWnIuaXNPbmxpbmUoKT9qKHRoaXMsbG4pLnJlc3VtZVBhdXNlZE11dGF0aW9ucygpOlByb21pc2UucmVzb2x2ZSgpfWdldFF1ZXJ5Q2FjaGUoKXtyZXR1cm4gaih0aGlzLHZlKX1nZXRNdXRhdGlvbkNhY2hlKCl7cmV0dXJuIGoodGhpcyxsbil9Z2V0RGVmYXVsdE9wdGlvbnMoKXtyZXR1cm4gaih0aGlzLGNuKX1zZXREZWZhdWx0T3B0aW9ucyhlKXtxKHRoaXMsY24sZSl9c2V0UXVlcnlEZWZhdWx0cyhlLHQpe2oodGhpcyxmcykuc2V0KEhzKGUpLHtxdWVyeUtleTplLGRlZmF1bHRPcHRpb25zOnR9KX1nZXRRdWVyeURlZmF1bHRzKGUpe2NvbnN0IHQ9Wy4uLmoodGhpcyxmcykudmFsdWVzKCldLG49e307cmV0dXJuIHQuZm9yRWFjaChzPT57Z3MoZSxzLnF1ZXJ5S2V5KSYmT2JqZWN0LmFzc2lnbihuLHMuZGVmYXVsdE9wdGlvbnMpfSksbn1zZXRNdXRhdGlvbkRlZmF1bHRzKGUsdCl7aih0aGlzLGhzKS5zZXQoSHMoZSkse211dGF0aW9uS2V5OmUsZGVmYXVsdE9wdGlvbnM6dH0pfWdldE11dGF0aW9uRGVmYXVsdHMoZSl7Y29uc3QgdD1bLi4uaih0aGlzLGhzKS52YWx1ZXMoKV0sbj17fTtyZXR1cm4gdC5mb3JFYWNoKHM9PntncyhlLHMubXV0YXRpb25LZXkpJiZPYmplY3QuYXNzaWduKG4scy5kZWZhdWx0T3B0aW9ucyl9KSxufWRlZmF1bHRRdWVyeU9wdGlvbnMoZSl7aWYoZS5fZGVmYXVsdGVkKXJldHVybiBlO2NvbnN0IHQ9ey4uLmoodGhpcyxjbikucXVlcmllcywuLi50aGlzLmdldFF1ZXJ5RGVmYXVsdHMoZS5xdWVyeUtleSksLi4uZSxfZGVmYXVsdGVkOiEwfTtyZXR1cm4gdC5xdWVyeUhhc2h8fCh0LnF1ZXJ5SGFzaD13YSh0LnF1ZXJ5S2V5LHQpKSx0LnJlZmV0Y2hPblJlY29ubmVjdD09PXZvaWQgMCYmKHQucmVmZXRjaE9uUmVjb25uZWN0PXQubmV0d29ya01vZGUhPT0iYWx3YXlzIiksdC50aHJvd09uRXJyb3I9PT12b2lkIDAmJih0LnRocm93T25FcnJvcj0hIXQuc3VzcGVuc2UpLCF0Lm5ldHdvcmtNb2RlJiZ0LnBlcnNpc3RlciYmKHQubmV0d29ya01vZGU9Im9mZmxpbmVGaXJzdCIpLHQucXVlcnlGbj09PUNhJiYodC5lbmFibGVkPSExKSx0fWRlZmF1bHRNdXRhdGlvbk9wdGlvbnMoZSl7cmV0dXJuIGU/Ll9kZWZhdWx0ZWQ/ZTp7Li4uaih0aGlzLGNuKS5tdXRhdGlvbnMsLi4uZT8ubXV0YXRpb25LZXkmJnRoaXMuZ2V0TXV0YXRpb25EZWZhdWx0cyhlLm11dGF0aW9uS2V5KSwuLi5lLF9kZWZhdWx0ZWQ6ITB9fWNsZWFyKCl7aih0aGlzLHZlKS5jbGVhcigpLGoodGhpcyxsbikuY2xlYXIoKX19LHZlPW5ldyBXZWFrTWFwLGxuPW5ldyBXZWFrTWFwLGNuPW5ldyBXZWFrTWFwLGZzPW5ldyBXZWFrTWFwLGhzPW5ldyBXZWFrTWFwLGRuPW5ldyBXZWFrTWFwLHBzPW5ldyBXZWFrTWFwLG1zPW5ldyBXZWFrTWFwLHZ1KSxjZz1tLmNyZWF0ZUNvbnRleHQodm9pZCAwKSxkZz0oe2NsaWVudDplLGNoaWxkcmVuOnR9KT0+KG0udXNlRWZmZWN0KCgpPT4oZS5tb3VudCgpLCgpPT57ZS51bm1vdW50KCl9KSxbZV0pLGEuanN4KGNnLlByb3ZpZGVyLHt2YWx1ZTplLGNoaWxkcmVuOnR9KSksRmw9WyJsaWdodCIsImRhcmsiXSx1Zz0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIsZmc9bS5jcmVhdGVDb250ZXh0KHZvaWQgMCksaGc9e3NldFRoZW1lOmU9Pnt9LHRoZW1lczpbXX0scGc9KCk9Pnt2YXIgZTtyZXR1cm4oZT1tLnVzZUNvbnRleHQoZmcpKSE9bnVsbD9lOmhnfTttLm1lbW8oKHtmb3JjZWRUaGVtZTplLHN0b3JhZ2VLZXk6dCxhdHRyaWJ1dGU6bixlbmFibGVTeXN0ZW06cyxlbmFibGVDb2xvclNjaGVtZTpyLGRlZmF1bHRUaGVtZTppLHZhbHVlOm8sYXR0cnM6bCxub25jZTpkfSk9PntsZXQgYz1pPT09InN5c3RlbSIsdT1uPT09ImNsYXNzIj9gdmFyIGQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGM9ZC5jbGFzc0xpc3Q7JHtgYy5yZW1vdmUoJHtsLm1hcChnPT5gJyR7Z30nYCkuam9pbigiLCIpfSlgfTtgOmB2YXIgZD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbj0nJHtufScscz0nc2V0QXR0cmlidXRlJztgLGY9cj9GbC5pbmNsdWRlcyhpKSYmaT9gaWYoZT09PSdsaWdodCd8fGU9PT0nZGFyayd8fCFlKWQuc3R5bGUuY29sb3JTY2hlbWU9ZXx8JyR7aX0nYDoiaWYoZT09PSdsaWdodCd8fGU9PT0nZGFyaycpZC5zdHlsZS5jb2xvclNjaGVtZT1lIjoiIixoPShnLHk9ITEsdj0hMCk9PntsZXQgeD1vP29bZ106Zyx3PXk/ZysifHwgJyciOmAnJHt4fSdgLGI9IiI7cmV0dXJuIHImJnYmJiF5JiZGbC5pbmNsdWRlcyhnKSYmKGIrPWBkLnN0eWxlLmNvbG9yU2NoZW1lID0gJyR7Z30nO2ApLG49PT0iY2xhc3MiP3l8fHg/Yis9YGMuYWRkKCR7d30pYDpiKz0ibnVsbCI6eCYmKGIrPWBkW3NdKG4sJHt3fSlgKSxifSxwPWU/YCFmdW5jdGlvbigpeyR7dX0ke2goZSl9fSgpYDpzP2AhZnVuY3Rpb24oKXt0cnl7JHt1fXZhciBlPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCcke3R9Jyk7aWYoJ3N5c3RlbSc9PT1lfHwoIWUmJiR7Y30pKXt2YXIgdD0nJHt1Z30nLG09d2luZG93Lm1hdGNoTWVkaWEodCk7aWYobS5tZWRpYSE9PXR8fG0ubWF0Y2hlcyl7JHtoKCJkYXJrIil9fWVsc2V7JHtoKCJsaWdodCIpfX19ZWxzZSBpZihlKXske28/YHZhciB4PSR7SlNPTi5zdHJpbmdpZnkobyl9O2A6IiJ9JHtoKG8/InhbZV0iOiJlIiwhMCl9fSR7Yz8iIjoiZWxzZXsiK2goaSwhMSwhMSkrIn0ifSR7Zn19Y2F0Y2goZSl7fX0oKWA6YCFmdW5jdGlvbigpe3RyeXske3V9dmFyIGU9bG9jYWxTdG9yYWdlLmdldEl0ZW0oJyR7dH0nKTtpZihlKXske28/YHZhciB4PSR7SlNPTi5zdHJpbmdpZnkobyl9O2A6IiJ9JHtoKG8/InhbZV0iOiJlIiwhMCl9fWVsc2V7JHtoKGksITEsITEpfTt9JHtmfX1jYXRjaCh0KXt9fSgpO2A7cmV0dXJuIG0uY3JlYXRlRWxlbWVudCgic2NyaXB0Iix7bm9uY2U6ZCxkYW5nZXJvdXNseVNldElubmVySFRNTDp7X19odG1sOnB9fSl9KTt2YXIgbWc9ZT0+e3N3aXRjaChlKXtjYXNlInN1Y2Nlc3MiOnJldHVybiB2ZztjYXNlImluZm8iOnJldHVybiBiZztjYXNlIndhcm5pbmciOnJldHVybiB4ZztjYXNlImVycm9yIjpyZXR1cm4gd2c7ZGVmYXVsdDpyZXR1cm4gbnVsbH19LGdnPUFycmF5KDEyKS5maWxsKDApLHlnPSh7dmlzaWJsZTplLGNsYXNzTmFtZTp0fSk9PkwuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlsic29ubmVyLWxvYWRpbmctd3JhcHBlciIsdF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKSwiZGF0YS12aXNpYmxlIjplfSxMLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToic29ubmVyLXNwaW5uZXIifSxnZy5tYXAoKG4scyk9PkwuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJzb25uZXItbG9hZGluZy1iYXIiLGtleTpgc3Bpbm5lci1iYXItJHtzfWB9KSkpKSx2Zz1MLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDIwIDIwIixmaWxsOiJjdXJyZW50Q29sb3IiLGhlaWdodDoiMjAiLHdpZHRoOiIyMCJ9LEwuY3JlYXRlRWxlbWVudCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNMTAgMThhOCA4IDAgMTAwLTE2IDggOCAwIDAwMCAxNnptMy44NTctOS44MDlhLjc1Ljc1IDAgMDAtMS4yMTQtLjg4MmwtMy40ODMgNC43OS0xLjg4LTEuODhhLjc1Ljc1IDAgMTAtMS4wNiAxLjA2MWwyLjUgMi41YS43NS43NSAwIDAwMS4xMzctLjA4OWw0LTUuNXoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSx4Zz1MLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGhlaWdodDoiMjAiLHdpZHRoOiIyMCJ9LEwuY3JlYXRlRWxlbWVudCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNOS40MDEgMy4wMDNjMS4xNTUtMiA0LjA0My0yIDUuMTk3IDBsNy4zNTUgMTIuNzQ4YzEuMTU0IDItLjI5IDQuNS0yLjU5OSA0LjVINC42NDVjLTIuMzA5IDAtMy43NTItMi41LTIuNTk4LTQuNUw5LjQgMy4wMDN6TTEyIDguMjVhLjc1Ljc1IDAgMDEuNzUuNzV2My43NWEuNzUuNzUgMCAwMS0xLjUgMFY5YS43NS43NSAwIDAxLjc1LS43NXptMCA4LjI1YS43NS43NSAwIDEwMC0xLjUuNzUuNzUgMCAwMDAgMS41eiIsY2xpcFJ1bGU6ImV2ZW5vZGQifSkpLGJnPUwuY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix2aWV3Qm94OiIwIDAgMjAgMjAiLGZpbGw6ImN1cnJlbnRDb2xvciIsaGVpZ2h0OiIyMCIsd2lkdGg6IjIwIn0sTC5jcmVhdGVFbGVtZW50KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGQ6Ik0xOCAxMGE4IDggMCAxMS0xNiAwIDggOCAwIDAxMTYgMHptLTctNGExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6TTkgOWEuNzUuNzUgMCAwMDAgMS41aC4yNTNhLjI1LjI1IDAgMDEuMjQ0LjMwNGwtLjQ1OSAyLjA2NkExLjc1IDEuNzUgMCAwMDEwLjc0NyAxNUgxMWEuNzUuNzUgMCAwMDAtMS41aC0uMjUzYS4yNS4yNSAwIDAxLS4yNDQtLjMwNGwuNDU5LTIuMDY2QTEuNzUgMS43NSAwIDAwOS4yNTMgOUg5eiIsY2xpcFJ1bGU6ImV2ZW5vZGQifSkpLHdnPUwuY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix2aWV3Qm94OiIwIDAgMjAgMjAiLGZpbGw6ImN1cnJlbnRDb2xvciIsaGVpZ2h0OiIyMCIsd2lkdGg6IjIwIn0sTC5jcmVhdGVFbGVtZW50KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGQ6Ik0xOCAxMGE4IDggMCAxMS0xNiAwIDggOCAwIDAxMTYgMHptLTgtNWEuNzUuNzUgMCAwMS43NS43NXY0LjVhLjc1Ljc1IDAgMDEtMS41IDB2LTQuNUEuNzUuNzUgMCAwMTEwIDV6bTAgMTBhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6IixjbGlwUnVsZToiZXZlbm9kZCJ9KSksQ2c9TC5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHdpZHRoOiIxMiIsaGVpZ2h0OiIxMiIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjEuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9LEwuY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiIxOCIseTE6IjYiLHgyOiI2Iix5MjoiMTgifSksTC5jcmVhdGVFbGVtZW50KCJsaW5lIix7eDE6IjYiLHkxOiI2Iix4MjoiMTgiLHkyOiIxOCJ9KSksVGc9KCk9PntsZXRbZSx0XT1MLnVzZVN0YXRlKGRvY3VtZW50LmhpZGRlbik7cmV0dXJuIEwudXNlRWZmZWN0KCgpPT57bGV0IG49KCk9Pnt0KGRvY3VtZW50LmhpZGRlbil9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixuKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLG4pfSxbXSksZX0sVG89MSxTZz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc3Vic2NyaWJlPWU9Pih0aGlzLnN1YnNjcmliZXJzLnB1c2goZSksKCk9PntsZXQgdD10aGlzLnN1YnNjcmliZXJzLmluZGV4T2YoZSk7dGhpcy5zdWJzY3JpYmVycy5zcGxpY2UodCwxKX0pLHRoaXMucHVibGlzaD1lPT57dGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKHQ9PnQoZSkpfSx0aGlzLmFkZFRvYXN0PWU9Pnt0aGlzLnB1Ymxpc2goZSksdGhpcy50b2FzdHM9Wy4uLnRoaXMudG9hc3RzLGVdfSx0aGlzLmNyZWF0ZT1lPT57dmFyIHQ7bGV0e21lc3NhZ2U6biwuLi5zfT1lLHI9dHlwZW9mIGU/LmlkPT0ibnVtYmVyInx8KCh0PWUuaWQpPT1udWxsP3ZvaWQgMDp0Lmxlbmd0aCk+MD9lLmlkOlRvKyssaT10aGlzLnRvYXN0cy5maW5kKGw9PmwuaWQ9PT1yKSxvPWUuZGlzbWlzc2libGU9PT12b2lkIDA/ITA6ZS5kaXNtaXNzaWJsZTtyZXR1cm4gdGhpcy5kaXNtaXNzZWRUb2FzdHMuaGFzKHIpJiZ0aGlzLmRpc21pc3NlZFRvYXN0cy5kZWxldGUociksaT90aGlzLnRvYXN0cz10aGlzLnRvYXN0cy5tYXAobD0+bC5pZD09PXI/KHRoaXMucHVibGlzaCh7Li4ubCwuLi5lLGlkOnIsdGl0bGU6bn0pLHsuLi5sLC4uLmUsaWQ6cixkaXNtaXNzaWJsZTpvLHRpdGxlOm59KTpsKTp0aGlzLmFkZFRvYXN0KHt0aXRsZTpuLC4uLnMsZGlzbWlzc2libGU6byxpZDpyfSkscn0sdGhpcy5kaXNtaXNzPWU9Pih0aGlzLmRpc21pc3NlZFRvYXN0cy5hZGQoZSksZXx8dGhpcy50b2FzdHMuZm9yRWFjaCh0PT57dGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKG49Pm4oe2lkOnQuaWQsZGlzbWlzczohMH0pKX0pLHRoaXMuc3Vic2NyaWJlcnMuZm9yRWFjaCh0PT50KHtpZDplLGRpc21pc3M6ITB9KSksZSksdGhpcy5tZXNzYWdlPShlLHQpPT50aGlzLmNyZWF0ZSh7Li4udCxtZXNzYWdlOmV9KSx0aGlzLmVycm9yPShlLHQpPT50aGlzLmNyZWF0ZSh7Li4udCxtZXNzYWdlOmUsdHlwZToiZXJyb3IifSksdGhpcy5zdWNjZXNzPShlLHQpPT50aGlzLmNyZWF0ZSh7Li4udCx0eXBlOiJzdWNjZXNzIixtZXNzYWdlOmV9KSx0aGlzLmluZm89KGUsdCk9PnRoaXMuY3JlYXRlKHsuLi50LHR5cGU6ImluZm8iLG1lc3NhZ2U6ZX0pLHRoaXMud2FybmluZz0oZSx0KT0+dGhpcy5jcmVhdGUoey4uLnQsdHlwZToid2FybmluZyIsbWVzc2FnZTplfSksdGhpcy5sb2FkaW5nPShlLHQpPT50aGlzLmNyZWF0ZSh7Li4udCx0eXBlOiJsb2FkaW5nIixtZXNzYWdlOmV9KSx0aGlzLnByb21pc2U9KGUsdCk9PntpZighdClyZXR1cm47bGV0IG47dC5sb2FkaW5nIT09dm9pZCAwJiYobj10aGlzLmNyZWF0ZSh7Li4udCxwcm9taXNlOmUsdHlwZToibG9hZGluZyIsbWVzc2FnZTp0LmxvYWRpbmcsZGVzY3JpcHRpb246dHlwZW9mIHQuZGVzY3JpcHRpb24hPSJmdW5jdGlvbiI/dC5kZXNjcmlwdGlvbjp2b2lkIDB9KSk7bGV0IHM9ZSBpbnN0YW5jZW9mIFByb21pc2U/ZTplKCkscj1uIT09dm9pZCAwLGksbz1zLnRoZW4oYXN5bmMgZD0+e2lmKGk9WyJyZXNvbHZlIixkXSxMLmlzVmFsaWRFbGVtZW50KGQpKXI9ITEsdGhpcy5jcmVhdGUoe2lkOm4sdHlwZToiZGVmYXVsdCIsbWVzc2FnZTpkfSk7ZWxzZSBpZihqZyhkKSYmIWQub2spe3I9ITE7bGV0IGM9dHlwZW9mIHQuZXJyb3I9PSJmdW5jdGlvbiI/YXdhaXQgdC5lcnJvcihgSFRUUCBlcnJvciEgc3RhdHVzOiAke2Quc3RhdHVzfWApOnQuZXJyb3IsdT10eXBlb2YgdC5kZXNjcmlwdGlvbj09ImZ1bmN0aW9uIj9hd2FpdCB0LmRlc2NyaXB0aW9uKGBIVFRQIGVycm9yISBzdGF0dXM6ICR7ZC5zdGF0dXN9YCk6dC5kZXNjcmlwdGlvbjt0aGlzLmNyZWF0ZSh7aWQ6bix0eXBlOiJlcnJvciIsbWVzc2FnZTpjLGRlc2NyaXB0aW9uOnV9KX1lbHNlIGlmKHQuc3VjY2VzcyE9PXZvaWQgMCl7cj0hMTtsZXQgYz10eXBlb2YgdC5zdWNjZXNzPT0iZnVuY3Rpb24iP2F3YWl0IHQuc3VjY2VzcyhkKTp0LnN1Y2Nlc3MsdT10eXBlb2YgdC5kZXNjcmlwdGlvbj09ImZ1bmN0aW9uIj9hd2FpdCB0LmRlc2NyaXB0aW9uKGQpOnQuZGVzY3JpcHRpb247dGhpcy5jcmVhdGUoe2lkOm4sdHlwZToic3VjY2VzcyIsbWVzc2FnZTpjLGRlc2NyaXB0aW9uOnV9KX19KS5jYXRjaChhc3luYyBkPT57aWYoaT1bInJlamVjdCIsZF0sdC5lcnJvciE9PXZvaWQgMCl7cj0hMTtsZXQgYz10eXBlb2YgdC5lcnJvcj09ImZ1bmN0aW9uIj9hd2FpdCB0LmVycm9yKGQpOnQuZXJyb3IsdT10eXBlb2YgdC5kZXNjcmlwdGlvbj09ImZ1bmN0aW9uIj9hd2FpdCB0LmRlc2NyaXB0aW9uKGQpOnQuZGVzY3JpcHRpb247dGhpcy5jcmVhdGUoe2lkOm4sdHlwZToiZXJyb3IiLG1lc3NhZ2U6YyxkZXNjcmlwdGlvbjp1fSl9fSkuZmluYWxseSgoKT0+e3ZhciBkO3ImJih0aGlzLmRpc21pc3Mobiksbj12b2lkIDApLChkPXQuZmluYWxseSk9PW51bGx8fGQuY2FsbCh0KX0pLGw9KCk9Pm5ldyBQcm9taXNlKChkLGMpPT5vLnRoZW4oKCk9PmlbMF09PT0icmVqZWN0Ij9jKGlbMV0pOmQoaVsxXSkpLmNhdGNoKGMpKTtyZXR1cm4gdHlwZW9mIG4hPSJzdHJpbmciJiZ0eXBlb2YgbiE9Im51bWJlciI/e3Vud3JhcDpsfTpPYmplY3QuYXNzaWduKG4se3Vud3JhcDpsfSl9LHRoaXMuY3VzdG9tPShlLHQpPT57bGV0IG49dD8uaWR8fFRvKys7cmV0dXJuIHRoaXMuY3JlYXRlKHtqc3g6ZShuKSxpZDpuLC4uLnR9KSxufSx0aGlzLmdldEFjdGl2ZVRvYXN0cz0oKT0+dGhpcy50b2FzdHMuZmlsdGVyKGU9PiF0aGlzLmRpc21pc3NlZFRvYXN0cy5oYXMoZS5pZCkpLHRoaXMuc3Vic2NyaWJlcnM9W10sdGhpcy50b2FzdHM9W10sdGhpcy5kaXNtaXNzZWRUb2FzdHM9bmV3IFNldH19LEtlPW5ldyBTZyxQZz0oZSx0KT0+e2xldCBuPXQ/LmlkfHxUbysrO3JldHVybiBLZS5hZGRUb2FzdCh7dGl0bGU6ZSwuLi50LGlkOm59KSxufSxqZz1lPT5lJiZ0eXBlb2YgZT09Im9iamVjdCImJiJvayJpbiBlJiZ0eXBlb2YgZS5vaz09ImJvb2xlYW4iJiYic3RhdHVzImluIGUmJnR5cGVvZiBlLnN0YXR1cz09Im51bWJlciIsRWc9UGcsQWc9KCk9PktlLnRvYXN0cyxrZz0oKT0+S2UuZ2V0QWN0aXZlVG9hc3RzKCk7T2JqZWN0LmFzc2lnbihFZyx7c3VjY2VzczpLZS5zdWNjZXNzLGluZm86S2UuaW5mbyx3YXJuaW5nOktlLndhcm5pbmcsZXJyb3I6S2UuZXJyb3IsY3VzdG9tOktlLmN1c3RvbSxtZXNzYWdlOktlLm1lc3NhZ2UscHJvbWlzZTpLZS5wcm9taXNlLGRpc21pc3M6S2UuZGlzbWlzcyxsb2FkaW5nOktlLmxvYWRpbmd9LHtnZXRIaXN0b3J5OkFnLGdldFRvYXN0czprZ30pO2Z1bmN0aW9uIE5nKGUse2luc2VydEF0OnR9PXt9KXtpZih0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybjtsZXQgbj1kb2N1bWVudC5oZWFkfHxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtzLnR5cGU9InRleHQvY3NzIix0PT09InRvcCImJm4uZmlyc3RDaGlsZD9uLmluc2VydEJlZm9yZShzLG4uZmlyc3RDaGlsZCk6bi5hcHBlbmRDaGlsZChzKSxzLnN0eWxlU2hlZXQ/cy5zdHlsZVNoZWV0LmNzc1RleHQ9ZTpzLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpKX1OZyhgOndoZXJlKGh0bWxbZGlyPSJsdHIiXSksOndoZXJlKFtkYXRhLXNvbm5lci10b2FzdGVyXVtkaXI9Imx0ciJdKXstLXRvYXN0LWljb24tbWFyZ2luLXN0YXJ0OiAtM3B4Oy0tdG9hc3QtaWNvbi1tYXJnaW4tZW5kOiA0cHg7LS10b2FzdC1zdmctbWFyZ2luLXN0YXJ0OiAtMXB4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1lbmQ6IDBweDstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQ6IGF1dG87LS10b2FzdC1idXR0b24tbWFyZ2luLWVuZDogMDstLXRvYXN0LWNsb3NlLWJ1dHRvbi1zdGFydDogMDstLXRvYXN0LWNsb3NlLWJ1dHRvbi1lbmQ6IHVuc2V0Oy0tdG9hc3QtY2xvc2UtYnV0dG9uLXRyYW5zZm9ybTogdHJhbnNsYXRlKC0zNSUsIC0zNSUpfTp3aGVyZShodG1sW2Rpcj0icnRsIl0pLDp3aGVyZShbZGF0YS1zb25uZXItdG9hc3Rlcl1bZGlyPSJydGwiXSl7LS10b2FzdC1pY29uLW1hcmdpbi1zdGFydDogNHB4Oy0tdG9hc3QtaWNvbi1tYXJnaW4tZW5kOiAtM3B4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1zdGFydDogMHB4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1lbmQ6IC0xcHg7LS10b2FzdC1idXR0b24tbWFyZ2luLXN0YXJ0OiAwOy0tdG9hc3QtYnV0dG9uLW1hcmdpbi1lbmQ6IGF1dG87LS10b2FzdC1jbG9zZS1idXR0b24tc3RhcnQ6IHVuc2V0Oy0tdG9hc3QtY2xvc2UtYnV0dG9uLWVuZDogMDstLXRvYXN0LWNsb3NlLWJ1dHRvbi10cmFuc2Zvcm06IHRyYW5zbGF0ZSgzNSUsIC0zNSUpfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3Rlcl0pe3Bvc2l0aW9uOmZpeGVkO3dpZHRoOnZhcigtLXdpZHRoKTtmb250LWZhbWlseTp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2JvdG8sSGVsdmV0aWNhIE5ldWUsQXJpYWwsTm90byBTYW5zLHNhbnMtc2VyaWYsQXBwbGUgQ29sb3IgRW1vamksU2Vnb2UgVUkgRW1vamksU2Vnb2UgVUkgU3ltYm9sLE5vdG8gQ29sb3IgRW1vamk7LS1ncmF5MTogaHNsKDAsIDAlLCA5OSUpOy0tZ3JheTI6IGhzbCgwLCAwJSwgOTcuMyUpOy0tZ3JheTM6IGhzbCgwLCAwJSwgOTUuMSUpOy0tZ3JheTQ6IGhzbCgwLCAwJSwgOTMlKTstLWdyYXk1OiBoc2woMCwgMCUsIDkwLjklKTstLWdyYXk2OiBoc2woMCwgMCUsIDg4LjclKTstLWdyYXk3OiBoc2woMCwgMCUsIDg1LjglKTstLWdyYXk4OiBoc2woMCwgMCUsIDc4JSk7LS1ncmF5OTogaHNsKDAsIDAlLCA1Ni4xJSk7LS1ncmF5MTA6IGhzbCgwLCAwJSwgNTIuMyUpOy0tZ3JheTExOiBoc2woMCwgMCUsIDQzLjUlKTstLWdyYXkxMjogaHNsKDAsIDAlLCA5JSk7LS1ib3JkZXItcmFkaXVzOiA4cHg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MDttYXJnaW46MDtsaXN0LXN0eWxlOm5vbmU7b3V0bGluZTpub25lO3otaW5kZXg6OTk5OTk5OTk5O3RyYW5zaXRpb246dHJhbnNmb3JtIC40cyBlYXNlfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1saWZ0ZWQ9InRydWUiXSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEwcHgpfUBtZWRpYSAoaG92ZXI6IG5vbmUpIGFuZCAocG9pbnRlcjogY29hcnNlKXs6d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtbGlmdGVkPSJ0cnVlIl0pe3RyYW5zZm9ybTpub25lfX06d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj0icmlnaHQiXSl7cmlnaHQ6dmFyKC0tb2Zmc2V0LXJpZ2h0KX06d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj0ibGVmdCJdKXtsZWZ0OnZhcigtLW9mZnNldC1sZWZ0KX06d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj0iY2VudGVyIl0pe2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSl9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249InRvcCJdKXt0b3A6dmFyKC0tb2Zmc2V0LXRvcCl9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249ImJvdHRvbSJdKXtib3R0b206dmFyKC0tb2Zmc2V0LWJvdHRvbSl9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdF0pey0teTogdHJhbnNsYXRlWSgxMDAlKTstLWxpZnQtYW1vdW50OiBjYWxjKHZhcigtLWxpZnQpICogdmFyKC0tZ2FwKSk7ei1pbmRleDp2YXIoLS16LWluZGV4KTtwb3NpdGlvbjphYnNvbHV0ZTtvcGFjaXR5OjA7dHJhbnNmb3JtOnZhcigtLXkpO2ZpbHRlcjpibHVyKDApO3RvdWNoLWFjdGlvbjpub25lO3RyYW5zaXRpb246dHJhbnNmb3JtIC40cyxvcGFjaXR5IC40cyxoZWlnaHQgLjRzLGJveC1zaGFkb3cgLjJzO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7b3ZlcmZsb3ctd3JhcDphbnl3aGVyZX06d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD0idHJ1ZSJdKXtwYWRkaW5nOjE2cHg7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbm9ybWFsLWJvcmRlcik7Y29sb3I6dmFyKC0tbm9ybWFsLXRleHQpO2JvcmRlci1yYWRpdXM6dmFyKC0tYm9yZGVyLXJhZGl1cyk7Ym94LXNoYWRvdzowIDRweCAxMnB4ICMwMDAwMDAxYTt3aWR0aDp2YXIoLS13aWR0aCk7Zm9udC1zaXplOjEzcHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4fTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdOmZvY3VzLXZpc2libGUpe2JveC1zaGFkb3c6MCA0cHggMTJweCAjMDAwMDAwMWEsMCAwIDAgMnB4ICMwMDAzfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj0idG9wIl0pe3RvcDowOy0teTogdHJhbnNsYXRlWSgtMTAwJSk7LS1saWZ0OiAxOy0tbGlmdC1hbW91bnQ6IGNhbGMoMSAqIHZhcigtLWdhcCkpfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj0iYm90dG9tIl0pe2JvdHRvbTowOy0teTogdHJhbnNsYXRlWSgxMDAlKTstLWxpZnQ6IC0xOy0tbGlmdC1hbW91bnQ6IGNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1nYXApKX06d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0XSkgOndoZXJlKFtkYXRhLWRlc2NyaXB0aW9uXSl7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNDtjb2xvcjppbmhlcml0fTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdKSA6d2hlcmUoW2RhdGEtdGl0bGVdKXtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MS41O2NvbG9yOmluaGVyaXR9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdF0pIDp3aGVyZShbZGF0YS1pY29uXSl7ZGlzcGxheTpmbGV4O2hlaWdodDoxNnB4O3dpZHRoOjE2cHg7cG9zaXRpb246cmVsYXRpdmU7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtc2hyaW5rOjA7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3QtaWNvbi1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1pY29uLW1hcmdpbi1lbmQpfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcHJvbWlzZT0idHJ1ZSJdKSA6d2hlcmUoW2RhdGEtaWNvbl0pPnN2Z3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC44KTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjthbmltYXRpb246c29ubmVyLWZhZGUtaW4gLjNzIGVhc2UgZm9yd2FyZHN9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdF0pIDp3aGVyZShbZGF0YS1pY29uXSk+KntmbGV4LXNocmluazowfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdKSA6d2hlcmUoW2RhdGEtaWNvbl0pIHN2Z3ttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1zdmctbWFyZ2luLXN0YXJ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tdG9hc3Qtc3ZnLW1hcmdpbi1lbmQpfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdKSA6d2hlcmUoW2RhdGEtY29udGVudF0pe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjJweH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWJ1dHRvbl17Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjhweDtoZWlnaHQ6MjRweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1ub3JtYWwtYmcpO2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLXRleHQpO21hcmdpbi1sZWZ0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1idXR0b24tbWFyZ2luLWVuZCk7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1zaHJpbms6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjRzLGJveC1zaGFkb3cgLjJzfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdKSA6d2hlcmUoW2RhdGEtYnV0dG9uXSk6Zm9jdXMtdmlzaWJsZXtib3gtc2hhZG93OjAgMCAwIDJweCAjMDAwNn06d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0XSkgOndoZXJlKFtkYXRhLWJ1dHRvbl0pOmZpcnN0LW9mLXR5cGV7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3QtYnV0dG9uLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kKX06d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0XSkgOndoZXJlKFtkYXRhLWNhbmNlbF0pe2NvbG9yOnZhcigtLW5vcm1hbC10ZXh0KTtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA4KX06d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXRoZW1lPSJkYXJrIl0pIDp3aGVyZShbZGF0YS1jYW5jZWxdKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjMpfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdKSA6d2hlcmUoW2RhdGEtY2xvc2UtYnV0dG9uXSl7cG9zaXRpb246YWJzb2x1dGU7bGVmdDp2YXIoLS10b2FzdC1jbG9zZS1idXR0b24tc3RhcnQpO3JpZ2h0OnZhcigtLXRvYXN0LWNsb3NlLWJ1dHRvbi1lbmQpO3RvcDowO2hlaWdodDoyMHB4O3dpZHRoOjIwcHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MDtjb2xvcjp2YXIoLS1ncmF5MTIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tZ3JheTQpO3RyYW5zZm9ybTp2YXIoLS10b2FzdC1jbG9zZS1idXR0b24tdHJhbnNmb3JtKTtib3JkZXItcmFkaXVzOjUwJTtjdXJzb3I6cG9pbnRlcjt6LWluZGV4OjE7dHJhbnNpdGlvbjpvcGFjaXR5IC4xcyxiYWNrZ3JvdW5kIC4ycyxib3JkZXItY29sb3IgLjJzfVtkYXRhLXNvbm5lci10b2FzdF0gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLWdyYXkxKX06d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0XSkgOndoZXJlKFtkYXRhLWNsb3NlLWJ1dHRvbl0pOmZvY3VzLXZpc2libGV7Ym94LXNoYWRvdzowIDRweCAxMnB4ICMwMDAwMDAxYSwwIDAgMCAycHggIzAwMDN9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdF0pIDp3aGVyZShbZGF0YS1kaXNhYmxlZD0idHJ1ZSJdKXtjdXJzb3I6bm90LWFsbG93ZWR9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdF0pOmhvdmVyIDp3aGVyZShbZGF0YS1jbG9zZS1idXR0b25dKTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWdyYXkyKTtib3JkZXItY29sb3I6dmFyKC0tZ3JheTUpfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGluZz0idHJ1ZSJdKTpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi01MCU7cmlnaHQ6LTUwJTtoZWlnaHQ6MTAwJTt6LWluZGV4Oi0xfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj0idG9wIl1bZGF0YS1zd2lwaW5nPSJ0cnVlIl0pOmJlZm9yZXtib3R0b206NTAlO3RyYW5zZm9ybTpzY2FsZVkoMykgdHJhbnNsYXRlWSg1MCUpfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj0iYm90dG9tIl1bZGF0YS1zd2lwaW5nPSJ0cnVlIl0pOmJlZm9yZXt0b3A6NTAlO3RyYW5zZm9ybTpzY2FsZVkoMykgdHJhbnNsYXRlWSgtNTAlKX06d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBpbmc9ImZhbHNlIl1bZGF0YS1yZW1vdmVkPSJ0cnVlIl0pOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7dHJhbnNmb3JtOnNjYWxlWSgyKX06d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0XSk6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7aGVpZ2h0OmNhbGModmFyKC0tZ2FwKSArIDFweCk7Ym90dG9tOjEwMCU7d2lkdGg6MTAwJX06d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLW1vdW50ZWQ9InRydWUiXSl7LS15OiB0cmFuc2xhdGVZKDApO29wYWNpdHk6MX06d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWV4cGFuZGVkPSJmYWxzZSJdW2RhdGEtZnJvbnQ9ImZhbHNlIl0pey0tc2NhbGU6IHZhcigtLXRvYXN0cy1iZWZvcmUpICogLjA1ICsgMTstLXk6IHRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1saWZ0LWFtb3VudCkgKiB2YXIoLS10b2FzdHMtYmVmb3JlKSkpIHNjYWxlKGNhbGMoLTEgKiB2YXIoLS1zY2FsZSkpKTtoZWlnaHQ6dmFyKC0tZnJvbnQtdG9hc3QtaGVpZ2h0KX06d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0XSk+Knt0cmFuc2l0aW9uOm9wYWNpdHkgLjRzfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtZXhwYW5kZWQ9ImZhbHNlIl1bZGF0YS1mcm9udD0iZmFsc2UiXVtkYXRhLXN0eWxlZD0idHJ1ZSJdKT4qe29wYWNpdHk6MH06d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXZpc2libGU9ImZhbHNlIl0pe29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtbW91bnRlZD0idHJ1ZSJdW2RhdGEtZXhwYW5kZWQ9InRydWUiXSl7LS15OiB0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1vZmZzZXQpKSk7aGVpZ2h0OnZhcigtLWluaXRpYWwtaGVpZ2h0KX06d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9InRydWUiXVtkYXRhLWZyb250PSJ0cnVlIl1bZGF0YS1zd2lwZS1vdXQ9ImZhbHNlIl0pey0teTogdHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQpICogLTEwMCUpKTtvcGFjaXR5OjB9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1yZW1vdmVkPSJ0cnVlIl1bZGF0YS1mcm9udD0iZmFsc2UiXVtkYXRhLXN3aXBlLW91dD0iZmFsc2UiXVtkYXRhLWV4cGFuZGVkPSJ0cnVlIl0pey0teTogdHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQpICogdmFyKC0tb2Zmc2V0KSArIHZhcigtLWxpZnQpICogLTEwMCUpKTtvcGFjaXR5OjB9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1yZW1vdmVkPSJ0cnVlIl1bZGF0YS1mcm9udD0iZmFsc2UiXVtkYXRhLXN3aXBlLW91dD0iZmFsc2UiXVtkYXRhLWV4cGFuZGVkPSJmYWxzZSJdKXstLXk6IHRyYW5zbGF0ZVkoNDAlKTtvcGFjaXR5OjA7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjVzLG9wYWNpdHkgLjJzfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD0idHJ1ZSJdW2RhdGEtZnJvbnQ9ImZhbHNlIl0pOmJlZm9yZXtoZWlnaHQ6Y2FsYyh2YXIoLS1pbml0aWFsLWhlaWdodCkgKyAyMCUpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwaW5nPXRydWVde3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKHZhcigtLXN3aXBlLWFtb3VudC15LCAwcHgpKSB0cmFuc2xhdGUodmFyKC0tc3dpcGUtYW1vdW50LXgsIDBweCkpO3RyYW5zaXRpb246bm9uZX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGVkPXRydWVde3VzZXItc2VsZWN0Om5vbmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXktcG9zaXRpb249Ym90dG9tXSxbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEteS1wb3NpdGlvbj10b3Bde2FuaW1hdGlvbi1kdXJhdGlvbjouMnM7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLW91dDthbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249bGVmdF17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LWxlZnR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXN3aXBlLWRpcmVjdGlvbj1yaWdodF17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LXJpZ2h0fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249dXBde2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC11cH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEtc3dpcGUtZGlyZWN0aW9uPWRvd25de2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC1kb3dufUBrZXlmcmFtZXMgc3dpcGUtb3V0LWxlZnR7MCV7dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZSh2YXIoLS1zd2lwZS1hbW91bnQteCkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXgpIC0gMTAwJSkpO29wYWNpdHk6MH19QGtleWZyYW1lcyBzd2lwZS1vdXQtcmlnaHR7MCV7dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZSh2YXIoLS1zd2lwZS1hbW91bnQteCkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXgpICsgMTAwJSkpO29wYWNpdHk6MH19QGtleWZyYW1lcyBzd2lwZS1vdXQtdXB7MCV7dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkodmFyKC0tc3dpcGUtYW1vdW50LXkpKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteSkgLSAxMDAlKSk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHN3aXBlLW91dC1kb3duezAle3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKHZhcigtLXN3aXBlLWFtb3VudC15KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXkpICsgMTAwJSkpO29wYWNpdHk6MH19QG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KXtbZGF0YS1zb25uZXItdG9hc3Rlcl17cG9zaXRpb246Zml4ZWQ7cmlnaHQ6dmFyKC0tbW9iaWxlLW9mZnNldC1yaWdodCk7bGVmdDp2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpO3dpZHRoOjEwMCV9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2Rpcj1ydGxde2xlZnQ6Y2FsYyh2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpICogLTEpfVtkYXRhLXNvbm5lci10b2FzdGVyXSBbZGF0YS1zb25uZXItdG9hc3Rde2xlZnQ6MDtyaWdodDowO3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCkgKiAyKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPWxlZnRde2xlZnQ6dmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS15LXBvc2l0aW9uPWJvdHRvbV17Ym90dG9tOnZhcigtLW1vYmlsZS1vZmZzZXQtYm90dG9tKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS15LXBvc2l0aW9uPXRvcF17dG9wOnZhcigtLW1vYmlsZS1vZmZzZXQtdG9wKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPWNlbnRlcl17bGVmdDp2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpO3JpZ2h0OnZhcigtLW1vYmlsZS1vZmZzZXQtcmlnaHQpO3RyYW5zZm9ybTpub25lfX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS10aGVtZT1saWdodF17LS1ub3JtYWwtYmc6ICNmZmY7LS1ub3JtYWwtYm9yZGVyOiB2YXIoLS1ncmF5NCk7LS1ub3JtYWwtdGV4dDogdmFyKC0tZ3JheTEyKTstLXN1Y2Nlc3MtYmc6IGhzbCgxNDMsIDg1JSwgOTYlKTstLXN1Y2Nlc3MtYm9yZGVyOiBoc2woMTQ1LCA5MiUsIDkxJSk7LS1zdWNjZXNzLXRleHQ6IGhzbCgxNDAsIDEwMCUsIDI3JSk7LS1pbmZvLWJnOiBoc2woMjA4LCAxMDAlLCA5NyUpOy0taW5mby1ib3JkZXI6IGhzbCgyMjEsIDkxJSwgOTElKTstLWluZm8tdGV4dDogaHNsKDIxMCwgOTIlLCA0NSUpOy0td2FybmluZy1iZzogaHNsKDQ5LCAxMDAlLCA5NyUpOy0td2FybmluZy1ib3JkZXI6IGhzbCg0OSwgOTElLCA5MSUpOy0td2FybmluZy10ZXh0OiBoc2woMzEsIDkyJSwgNDUlKTstLWVycm9yLWJnOiBoc2woMzU5LCAxMDAlLCA5NyUpOy0tZXJyb3ItYm9yZGVyOiBoc2woMzU5LCAxMDAlLCA5NCUpOy0tZXJyb3ItdGV4dDogaHNsKDM2MCwgMTAwJSwgNDUlKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS10aGVtZT1saWdodF0gW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWludmVydD10cnVlXXstLW5vcm1hbC1iZzogIzAwMDstLW5vcm1hbC1ib3JkZXI6IGhzbCgwLCAwJSwgMjAlKTstLW5vcm1hbC10ZXh0OiB2YXIoLS1ncmF5MSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtdGhlbWU9ZGFya10gW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWludmVydD10cnVlXXstLW5vcm1hbC1iZzogI2ZmZjstLW5vcm1hbC1ib3JkZXI6IHZhcigtLWdyYXkzKTstLW5vcm1hbC10ZXh0OiB2YXIoLS1ncmF5MTIpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXRoZW1lPWRhcmtdey0tbm9ybWFsLWJnOiAjMDAwOy0tbm9ybWFsLWJnLWhvdmVyOiBoc2woMCwgMCUsIDEyJSk7LS1ub3JtYWwtYm9yZGVyOiBoc2woMCwgMCUsIDIwJSk7LS1ub3JtYWwtYm9yZGVyLWhvdmVyOiBoc2woMCwgMCUsIDI1JSk7LS1ub3JtYWwtdGV4dDogdmFyKC0tZ3JheTEpOy0tc3VjY2Vzcy1iZzogaHNsKDE1MCwgMTAwJSwgNiUpOy0tc3VjY2Vzcy1ib3JkZXI6IGhzbCgxNDcsIDEwMCUsIDEyJSk7LS1zdWNjZXNzLXRleHQ6IGhzbCgxNTAsIDg2JSwgNjUlKTstLWluZm8tYmc6IGhzbCgyMTUsIDEwMCUsIDYlKTstLWluZm8tYm9yZGVyOiBoc2woMjIzLCAxMDAlLCAxMiUpOy0taW5mby10ZXh0OiBoc2woMjE2LCA4NyUsIDY1JSk7LS13YXJuaW5nLWJnOiBoc2woNjQsIDEwMCUsIDYlKTstLXdhcm5pbmctYm9yZGVyOiBoc2woNjAsIDEwMCUsIDEyJSk7LS13YXJuaW5nLXRleHQ6IGhzbCg0NiwgODclLCA2NSUpOy0tZXJyb3ItYmc6IGhzbCgzNTgsIDc2JSwgMTAlKTstLWVycm9yLWJvcmRlcjogaHNsKDM1NywgODklLCAxNiUpOy0tZXJyb3ItdGV4dDogaHNsKDM1OCwgMTAwJSwgODElKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1ub3JtYWwtYm9yZGVyKTtjb2xvcjp2YXIoLS1ub3JtYWwtdGV4dCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtdGhlbWU9ZGFya10gW2RhdGEtc29ubmVyLXRvYXN0XSBbZGF0YS1jbG9zZS1idXR0b25dOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLWJnLWhvdmVyKTtib3JkZXItY29sb3I6dmFyKC0tbm9ybWFsLWJvcmRlci1ob3Zlcil9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1zdWNjZXNzXSxbZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPXN1Y2Nlc3NdIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1zdWNjZXNzLWJnKTtib3JkZXItY29sb3I6dmFyKC0tc3VjY2Vzcy1ib3JkZXIpO2NvbG9yOnZhcigtLXN1Y2Nlc3MtdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1pbmZvXSxbZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPWluZm9dIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1pbmZvLWJnKTtib3JkZXItY29sb3I6dmFyKC0taW5mby1ib3JkZXIpO2NvbG9yOnZhcigtLWluZm8tdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT13YXJuaW5nXSxbZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPXdhcm5pbmddIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS13YXJuaW5nLWJnKTtib3JkZXItY29sb3I6dmFyKC0td2FybmluZy1ib3JkZXIpO2NvbG9yOnZhcigtLXdhcm5pbmctdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1lcnJvcl0sW2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1lcnJvcl0gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLWVycm9yLWJnKTtib3JkZXItY29sb3I6dmFyKC0tZXJyb3ItYm9yZGVyKTtjb2xvcjp2YXIoLS1lcnJvci10ZXh0KX0uc29ubmVyLWxvYWRpbmctd3JhcHBlcnstLXNpemU6IDE2cHg7aGVpZ2h0OnZhcigtLXNpemUpO3dpZHRoOnZhcigtLXNpemUpO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7ei1pbmRleDoxMH0uc29ubmVyLWxvYWRpbmctd3JhcHBlcltkYXRhLXZpc2libGU9ZmFsc2Vde3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO2FuaW1hdGlvbjpzb25uZXItZmFkZS1vdXQgLjJzIGVhc2UgZm9yd2FyZHN9LnNvbm5lci1zcGlubmVye3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDo1MCU7bGVmdDo1MCU7aGVpZ2h0OnZhcigtLXNpemUpO3dpZHRoOnZhcigtLXNpemUpfS5zb25uZXItbG9hZGluZy1iYXJ7YW5pbWF0aW9uOnNvbm5lci1zcGluIDEuMnMgbGluZWFyIGluZmluaXRlO2JhY2tncm91bmQ6dmFyKC0tZ3JheTExKTtib3JkZXItcmFkaXVzOjZweDtoZWlnaHQ6OCU7bGVmdDotMTAlO3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMy45JTt3aWR0aDoyNCV9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMSl7YW5pbWF0aW9uLWRlbGF5Oi0xLjJzO3RyYW5zZm9ybTpyb3RhdGUoLjAwMDFkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgyKXthbmltYXRpb24tZGVsYXk6LTEuMXM7dHJhbnNmb3JtOnJvdGF0ZSgzMGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDMpe2FuaW1hdGlvbi1kZWxheTotMXM7dHJhbnNmb3JtOnJvdGF0ZSg2MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDQpe2FuaW1hdGlvbi1kZWxheTotLjlzO3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg1KXthbmltYXRpb24tZGVsYXk6LS44czt0cmFuc2Zvcm06cm90YXRlKDEyMGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDYpe2FuaW1hdGlvbi1kZWxheTotLjdzO3RyYW5zZm9ybTpyb3RhdGUoMTUwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNyl7YW5pbWF0aW9uLWRlbGF5Oi0uNnM7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg4KXthbmltYXRpb24tZGVsYXk6LS41czt0cmFuc2Zvcm06cm90YXRlKDIxMGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDkpe2FuaW1hdGlvbi1kZWxheTotLjRzO3RyYW5zZm9ybTpyb3RhdGUoMjQwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMTApe2FuaW1hdGlvbi1kZWxheTotLjNzO3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMTEpe2FuaW1hdGlvbi1kZWxheTotLjJzO3RyYW5zZm9ybTpyb3RhdGUoMzAwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMTIpe2FuaW1hdGlvbi1kZWxheTotLjFzO3RyYW5zZm9ybTpyb3RhdGUoMzMwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9QGtleWZyYW1lcyBzb25uZXItZmFkZS1pbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC44KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX1Aa2V5ZnJhbWVzIHNvbm5lci1mYWRlLW91dHswJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpfX1Aa2V5ZnJhbWVzIHNvbm5lci1zcGluezAle29wYWNpdHk6MX10b3tvcGFjaXR5Oi4xNX19QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uKXtbZGF0YS1zb25uZXItdG9hc3RdLFtkYXRhLXNvbm5lci10b2FzdF0+Kiwuc29ubmVyLWxvYWRpbmctYmFye3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUhaW1wb3J0YW50fX0uc29ubmVyLWxvYWRlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzLHRyYW5zZm9ybSAuMnN9LnNvbm5lci1sb2FkZXJbZGF0YS12aXNpYmxlPWZhbHNlXXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC44KSB0cmFuc2xhdGUoLTUwJSwtNTAlKX0KYCk7ZnVuY3Rpb24geHIoZSl7cmV0dXJuIGUubGFiZWwhPT12b2lkIDB9dmFyIFJnPTMsRGc9IjMycHgiLE1nPSIxNnB4IixWbD00ZTMsT2c9MzU2LElnPTE0LExnPTIwLEZnPTIwMDtmdW5jdGlvbiBmdCguLi5lKXtyZXR1cm4gZS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpfWZ1bmN0aW9uIFZnKGUpe2xldFt0LG5dPWUuc3BsaXQoIi0iKSxzPVtdO3JldHVybiB0JiZzLnB1c2godCksbiYmcy5wdXNoKG4pLHN9dmFyIF9nPWU9Pnt2YXIgdCxuLHMscixpLG8sbCxkLGMsdSxmO2xldHtpbnZlcnQ6aCx0b2FzdDpwLHVuc3R5bGVkOmcsaW50ZXJhY3Rpbmc6eSxzZXRIZWlnaHRzOnYsdmlzaWJsZVRvYXN0czp4LGhlaWdodHM6dyxpbmRleDpiLHRvYXN0czpDLGV4cGFuZGVkOlMscmVtb3ZlVG9hc3Q6UCxkZWZhdWx0UmljaENvbG9yczpFLGNsb3NlQnV0dG9uOmssc3R5bGU6UixjYW5jZWxCdXR0b25TdHlsZTpBLGFjdGlvbkJ1dHRvblN0eWxlOkQsY2xhc3NOYW1lOk49IiIsZGVzY3JpcHRpb25DbGFzc05hbWU6Rj0iIixkdXJhdGlvbjpfLHBvc2l0aW9uOkgsZ2FwOk0sbG9hZGluZ0ljb246eixleHBhbmRCeURlZmF1bHQ6SSxjbGFzc05hbWVzOk8saWNvbnM6RyxjbG9zZUJ1dHRvbkFyaWFMYWJlbDpRPSJDbG9zZSB0b2FzdCIscGF1c2VXaGVuUGFnZUlzSGlkZGVuOmVlfT1lLFtuZSxzZV09TC51c2VTdGF0ZShudWxsKSxbaGUsVWVdPUwudXNlU3RhdGUobnVsbCksW2FlLEd0XT1MLnVzZVN0YXRlKCExKSxba2UsTGVdPUwudXNlU3RhdGUoITEpLFtQZSxGZV09TC51c2VTdGF0ZSghMSksW2JuLE90XT1MLnVzZVN0YXRlKCExKSxbVmUsRXNdPUwudXNlU3RhdGUoITEpLFtJaSx6bl09TC51c2VTdGF0ZSgwKSxbd24sSXRdPUwudXNlU3RhdGUoMCksWXQ9TC51c2VSZWYocC5kdXJhdGlvbnx8X3x8VmwpLFVuPUwudXNlUmVmKG51bGwpLHd0PUwudXNlUmVmKG51bGwpLG1yPWI9PT0wLGdyPWIrMTw9eCwkZT1wLnR5cGUsWHQ9cC5kaXNtaXNzaWJsZSE9PSExLExpPXAuY2xhc3NOYW1lfHwiIixGaT1wLmRlc2NyaXB0aW9uQ2xhc3NOYW1lfHwiIixRdD1MLnVzZU1lbW8oKCk9PncuZmluZEluZGV4KEI9PkIudG9hc3RJZD09PXAuaWQpfHwwLFt3LHAuaWRdKSxDbj1MLnVzZU1lbW8oKCk9Pnt2YXIgQjtyZXR1cm4oQj1wLmNsb3NlQnV0dG9uKSE9bnVsbD9COmt9LFtwLmNsb3NlQnV0dG9uLGtdKSxBcz1MLnVzZU1lbW8oKCk9PnAuZHVyYXRpb258fF98fFZsLFtwLmR1cmF0aW9uLF9dKSxKdD1MLnVzZVJlZigwKSxadD1MLnVzZVJlZigwKSwkbj1MLnVzZVJlZigwKSxMdD1MLnVzZVJlZihudWxsKSxbVCxWXT1ILnNwbGl0KCItIiksJD1MLnVzZU1lbW8oKCk9PncucmVkdWNlKChCLFksVSk9PlU+PVF0P0I6QitZLmhlaWdodCwwKSxbdyxRdF0pLEs9VGcoKSxKPXAuaW52ZXJ0fHxoLHVlPSRlPT09ImxvYWRpbmciO1p0LmN1cnJlbnQ9TC51c2VNZW1vKCgpPT5RdCpNKyQsW1F0LCRdKSxMLnVzZUVmZmVjdCgoKT0+e1l0LmN1cnJlbnQ9QXN9LFtBc10pLEwudXNlRWZmZWN0KCgpPT57R3QoITApfSxbXSksTC51c2VFZmZlY3QoKCk9PntsZXQgQj13dC5jdXJyZW50O2lmKEIpe2xldCBZPUIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O3JldHVybiBJdChZKSx2KFU9Plt7dG9hc3RJZDpwLmlkLGhlaWdodDpZLHBvc2l0aW9uOnAucG9zaXRpb259LC4uLlVdKSwoKT0+dihVPT5VLmZpbHRlcihmZT0+ZmUudG9hc3RJZCE9PXAuaWQpKX19LFt2LHAuaWRdKSxMLnVzZUxheW91dEVmZmVjdCgoKT0+e2lmKCFhZSlyZXR1cm47bGV0IEI9d3QuY3VycmVudCxZPUIuc3R5bGUuaGVpZ2h0O0Iuc3R5bGUuaGVpZ2h0PSJhdXRvIjtsZXQgVT1CLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtCLnN0eWxlLmhlaWdodD1ZLEl0KFUpLHYoZmU9PmZlLmZpbmQoYmU9PmJlLnRvYXN0SWQ9PT1wLmlkKT9mZS5tYXAoYmU9PmJlLnRvYXN0SWQ9PT1wLmlkP3suLi5iZSxoZWlnaHQ6VX06YmUpOlt7dG9hc3RJZDpwLmlkLGhlaWdodDpVLHBvc2l0aW9uOnAucG9zaXRpb259LC4uLmZlXSl9LFthZSxwLnRpdGxlLHAuZGVzY3JpcHRpb24sdixwLmlkXSk7bGV0IHJlPUwudXNlQ2FsbGJhY2soKCk9PntMZSghMCksem4oWnQuY3VycmVudCksdihCPT5CLmZpbHRlcihZPT5ZLnRvYXN0SWQhPT1wLmlkKSksc2V0VGltZW91dCgoKT0+e1AocCl9LEZnKX0sW3AsUCx2LFp0XSk7TC51c2VFZmZlY3QoKCk9PntpZihwLnByb21pc2UmJiRlPT09ImxvYWRpbmcifHxwLmR1cmF0aW9uPT09MS8wfHxwLnR5cGU9PT0ibG9hZGluZyIpcmV0dXJuO2xldCBCO3JldHVybiBTfHx5fHxlZSYmSz8oKCk9PntpZigkbi5jdXJyZW50PEp0LmN1cnJlbnQpe2xldCBZPW5ldyBEYXRlKCkuZ2V0VGltZSgpLUp0LmN1cnJlbnQ7WXQuY3VycmVudD1ZdC5jdXJyZW50LVl9JG4uY3VycmVudD1uZXcgRGF0ZSgpLmdldFRpbWUoKX0pKCk6WXQuY3VycmVudCE9PTEvMCYmKEp0LmN1cnJlbnQ9bmV3IERhdGUoKS5nZXRUaW1lKCksQj1zZXRUaW1lb3V0KCgpPT57dmFyIFk7KFk9cC5vbkF1dG9DbG9zZSk9PW51bGx8fFkuY2FsbChwLHApLHJlKCl9LFl0LmN1cnJlbnQpKSwoKT0+Y2xlYXJUaW1lb3V0KEIpfSxbUyx5LHAsJGUsZWUsSyxyZV0pLEwudXNlRWZmZWN0KCgpPT57cC5kZWxldGUmJnJlKCl9LFtyZSxwLmRlbGV0ZV0pO2Z1bmN0aW9uIHRlKCl7dmFyIEIsWSxVO3JldHVybiBHIT1udWxsJiZHLmxvYWRpbmc/TC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZnQoTz8ubG9hZGVyLChCPXA/LmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpCLmxvYWRlciwic29ubmVyLWxvYWRlciIpLCJkYXRhLXZpc2libGUiOiRlPT09ImxvYWRpbmcifSxHLmxvYWRpbmcpOno/TC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZnQoTz8ubG9hZGVyLChZPXA/LmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpZLmxvYWRlciwic29ubmVyLWxvYWRlciIpLCJkYXRhLXZpc2libGUiOiRlPT09ImxvYWRpbmcifSx6KTpMLmNyZWF0ZUVsZW1lbnQoeWcse2NsYXNzTmFtZTpmdChPPy5sb2FkZXIsKFU9cD8uY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOlUubG9hZGVyKSx2aXNpYmxlOiRlPT09ImxvYWRpbmcifSl9cmV0dXJuIEwuY3JlYXRlRWxlbWVudCgibGkiLHt0YWJJbmRleDowLHJlZjp3dCxjbGFzc05hbWU6ZnQoTixMaSxPPy50b2FzdCwodD1wPy5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6dC50b2FzdCxPPy5kZWZhdWx0LE8/LlskZV0sKG49cD8uY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOm5bJGVdKSwiZGF0YS1zb25uZXItdG9hc3QiOiIiLCJkYXRhLXJpY2gtY29sb3JzIjoocz1wLnJpY2hDb2xvcnMpIT1udWxsP3M6RSwiZGF0YS1zdHlsZWQiOiEocC5qc3h8fHAudW5zdHlsZWR8fGcpLCJkYXRhLW1vdW50ZWQiOmFlLCJkYXRhLXByb21pc2UiOiEhcC5wcm9taXNlLCJkYXRhLXN3aXBlZCI6VmUsImRhdGEtcmVtb3ZlZCI6a2UsImRhdGEtdmlzaWJsZSI6Z3IsImRhdGEteS1wb3NpdGlvbiI6VCwiZGF0YS14LXBvc2l0aW9uIjpWLCJkYXRhLWluZGV4IjpiLCJkYXRhLWZyb250IjptciwiZGF0YS1zd2lwaW5nIjpQZSwiZGF0YS1kaXNtaXNzaWJsZSI6WHQsImRhdGEtdHlwZSI6JGUsImRhdGEtaW52ZXJ0IjpKLCJkYXRhLXN3aXBlLW91dCI6Ym4sImRhdGEtc3dpcGUtZGlyZWN0aW9uIjpoZSwiZGF0YS1leHBhbmRlZCI6ISEoU3x8SSYmYWUpLHN0eWxlOnsiLS1pbmRleCI6YiwiLS10b2FzdHMtYmVmb3JlIjpiLCItLXotaW5kZXgiOkMubGVuZ3RoLWIsIi0tb2Zmc2V0IjpgJHtrZT9JaTpadC5jdXJyZW50fXB4YCwiLS1pbml0aWFsLWhlaWdodCI6ST8iYXV0byI6YCR7d259cHhgLC4uLlIsLi4ucC5zdHlsZX0sb25EcmFnRW5kOigpPT57RmUoITEpLHNlKG51bGwpLEx0LmN1cnJlbnQ9bnVsbH0sb25Qb2ludGVyRG93bjpCPT57dWV8fCFYdHx8KFVuLmN1cnJlbnQ9bmV3IERhdGUsem4oWnQuY3VycmVudCksQi50YXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoQi5wb2ludGVySWQpLEIudGFyZ2V0LnRhZ05hbWUhPT0iQlVUVE9OIiYmKEZlKCEwKSxMdC5jdXJyZW50PXt4OkIuY2xpZW50WCx5OkIuY2xpZW50WX0pKX0sb25Qb2ludGVyVXA6KCk9Pnt2YXIgQixZLFUsZmU7aWYoYm58fCFYdClyZXR1cm47THQuY3VycmVudD1udWxsO2xldCBiZT1OdW1iZXIoKChCPXd0LmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpCLnN0eWxlLmdldFByb3BlcnR5VmFsdWUoIi0tc3dpcGUtYW1vdW50LXgiKS5yZXBsYWNlKCJweCIsIiIpKXx8MCksSGU9TnVtYmVyKCgoWT13dC5jdXJyZW50KT09bnVsbD92b2lkIDA6WS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCItLXN3aXBlLWFtb3VudC15IikucmVwbGFjZSgicHgiLCIiKSl8fDApLEplPW5ldyBEYXRlKCkuZ2V0VGltZSgpLSgoVT1Vbi5jdXJyZW50KT09bnVsbD92b2lkIDA6VS5nZXRUaW1lKCkpLHFlPW5lPT09IngiP2JlOkhlLGR0PU1hdGguYWJzKHFlKS9KZTtpZihNYXRoLmFicyhxZSk+PUxnfHxkdD4uMTEpe3puKFp0LmN1cnJlbnQpLChmZT1wLm9uRGlzbWlzcyk9PW51bGx8fGZlLmNhbGwocCxwKSxVZShuZT09PSJ4Ij9iZT4wPyJyaWdodCI6ImxlZnQiOkhlPjA/ImRvd24iOiJ1cCIpLHJlKCksT3QoITApLEVzKCExKTtyZXR1cm59RmUoITEpLHNlKG51bGwpfSxvblBvaW50ZXJNb3ZlOkI9Pnt2YXIgWSxVLGZlLGJlO2lmKCFMdC5jdXJyZW50fHwhWHR8fCgoWT13aW5kb3cuZ2V0U2VsZWN0aW9uKCkpPT1udWxsP3ZvaWQgMDpZLnRvU3RyaW5nKCkubGVuZ3RoKT4wKXJldHVybjtsZXQgSGU9Qi5jbGllbnRZLUx0LmN1cnJlbnQueSxKZT1CLmNsaWVudFgtTHQuY3VycmVudC54LHFlPShVPWUuc3dpcGVEaXJlY3Rpb25zKSE9bnVsbD9VOlZnKEgpOyFuZSYmKE1hdGguYWJzKEplKT4xfHxNYXRoLmFicyhIZSk+MSkmJnNlKE1hdGguYWJzKEplKT5NYXRoLmFicyhIZSk/IngiOiJ5Iik7bGV0IGR0PXt4OjAseTowfTtuZT09PSJ5Ij8ocWUuaW5jbHVkZXMoInRvcCIpfHxxZS5pbmNsdWRlcygiYm90dG9tIikpJiYocWUuaW5jbHVkZXMoInRvcCIpJiZIZTwwfHxxZS5pbmNsdWRlcygiYm90dG9tIikmJkhlPjApJiYoZHQueT1IZSk6bmU9PT0ieCImJihxZS5pbmNsdWRlcygibGVmdCIpfHxxZS5pbmNsdWRlcygicmlnaHQiKSkmJihxZS5pbmNsdWRlcygibGVmdCIpJiZKZTwwfHxxZS5pbmNsdWRlcygicmlnaHQiKSYmSmU+MCkmJihkdC54PUplKSwoTWF0aC5hYnMoZHQueCk+MHx8TWF0aC5hYnMoZHQueSk+MCkmJkVzKCEwKSwoZmU9d3QuY3VycmVudCk9PW51bGx8fGZlLnN0eWxlLnNldFByb3BlcnR5KCItLXN3aXBlLWFtb3VudC14IixgJHtkdC54fXB4YCksKGJlPXd0LmN1cnJlbnQpPT1udWxsfHxiZS5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1zd2lwZS1hbW91bnQteSIsYCR7ZHQueX1weGApfX0sQ24mJiFwLmpzeD9MLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIseyJhcmlhLWxhYmVsIjpRLCJkYXRhLWRpc2FibGVkIjp1ZSwiZGF0YS1jbG9zZS1idXR0b24iOiEwLG9uQ2xpY2s6dWV8fCFYdD8oKT0+e306KCk9Pnt2YXIgQjtyZSgpLChCPXAub25EaXNtaXNzKT09bnVsbHx8Qi5jYWxsKHAscCl9LGNsYXNzTmFtZTpmdChPPy5jbG9zZUJ1dHRvbiwocj1wPy5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6ci5jbG9zZUJ1dHRvbil9LChpPUc/LmNsb3NlKSE9bnVsbD9pOkNnKTpudWxsLHAuanN4fHxtLmlzVmFsaWRFbGVtZW50KHAudGl0bGUpP3AuanN4P3AuanN4OnR5cGVvZiBwLnRpdGxlPT0iZnVuY3Rpb24iP3AudGl0bGUoKTpwLnRpdGxlOkwuY3JlYXRlRWxlbWVudChMLkZyYWdtZW50LG51bGwsJGV8fHAuaWNvbnx8cC5wcm9taXNlP0wuY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtaWNvbiI6IiIsY2xhc3NOYW1lOmZ0KE8/Lmljb24sKG89cD8uY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOm8uaWNvbil9LHAucHJvbWlzZXx8cC50eXBlPT09ImxvYWRpbmciJiYhcC5pY29uP3AuaWNvbnx8dGUoKTpudWxsLHAudHlwZSE9PSJsb2FkaW5nIj9wLmljb258fEc/LlskZV18fG1nKCRlKTpudWxsKTpudWxsLEwuY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtY29udGVudCI6IiIsY2xhc3NOYW1lOmZ0KE8/LmNvbnRlbnQsKGw9cD8uY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOmwuY29udGVudCl9LEwuY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtdGl0bGUiOiIiLGNsYXNzTmFtZTpmdChPPy50aXRsZSwoZD1wPy5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6ZC50aXRsZSl9LHR5cGVvZiBwLnRpdGxlPT0iZnVuY3Rpb24iP3AudGl0bGUoKTpwLnRpdGxlKSxwLmRlc2NyaXB0aW9uP0wuY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtZGVzY3JpcHRpb24iOiIiLGNsYXNzTmFtZTpmdChGLEZpLE8/LmRlc2NyaXB0aW9uLChjPXA/LmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpjLmRlc2NyaXB0aW9uKX0sdHlwZW9mIHAuZGVzY3JpcHRpb249PSJmdW5jdGlvbiI/cC5kZXNjcmlwdGlvbigpOnAuZGVzY3JpcHRpb24pOm51bGwpLG0uaXNWYWxpZEVsZW1lbnQocC5jYW5jZWwpP3AuY2FuY2VsOnAuY2FuY2VsJiZ4cihwLmNhbmNlbCk/TC5jcmVhdGVFbGVtZW50KCJidXR0b24iLHsiZGF0YS1idXR0b24iOiEwLCJkYXRhLWNhbmNlbCI6ITAsc3R5bGU6cC5jYW5jZWxCdXR0b25TdHlsZXx8QSxvbkNsaWNrOkI9Pnt2YXIgWSxVO3hyKHAuY2FuY2VsKSYmWHQmJigoVT0oWT1wLmNhbmNlbCkub25DbGljayk9PW51bGx8fFUuY2FsbChZLEIpLHJlKCkpfSxjbGFzc05hbWU6ZnQoTz8uY2FuY2VsQnV0dG9uLCh1PXA/LmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDp1LmNhbmNlbEJ1dHRvbil9LHAuY2FuY2VsLmxhYmVsKTpudWxsLG0uaXNWYWxpZEVsZW1lbnQocC5hY3Rpb24pP3AuYWN0aW9uOnAuYWN0aW9uJiZ4cihwLmFjdGlvbik/TC5jcmVhdGVFbGVtZW50KCJidXR0b24iLHsiZGF0YS1idXR0b24iOiEwLCJkYXRhLWFjdGlvbiI6ITAsc3R5bGU6cC5hY3Rpb25CdXR0b25TdHlsZXx8RCxvbkNsaWNrOkI9Pnt2YXIgWSxVO3hyKHAuYWN0aW9uKSYmKChVPShZPXAuYWN0aW9uKS5vbkNsaWNrKT09bnVsbHx8VS5jYWxsKFksQiksIUIuZGVmYXVsdFByZXZlbnRlZCYmcmUoKSl9LGNsYXNzTmFtZTpmdChPPy5hY3Rpb25CdXR0b24sKGY9cD8uY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOmYuYWN0aW9uQnV0dG9uKX0scC5hY3Rpb24ubGFiZWwpOm51bGwpKX07ZnVuY3Rpb24gX2woKXtpZih0eXBlb2Ygd2luZG93PiJ1Inx8dHlwZW9mIGRvY3VtZW50PiJ1IilyZXR1cm4ibHRyIjtsZXQgZT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkaXIiKTtyZXR1cm4gZT09PSJhdXRvInx8IWU/d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5kaXJlY3Rpb246ZX1mdW5jdGlvbiBCZyhlLHQpe2xldCBuPXt9O3JldHVybltlLHRdLmZvckVhY2goKHMscik9PntsZXQgaT1yPT09MSxvPWk/Ii0tbW9iaWxlLW9mZnNldCI6Ii0tb2Zmc2V0IixsPWk/TWc6RGc7ZnVuY3Rpb24gZChjKXtbInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCJdLmZvckVhY2godT0+e25bYCR7b30tJHt1fWBdPXR5cGVvZiBjPT0ibnVtYmVyIj9gJHtjfXB4YDpjfSl9dHlwZW9mIHM9PSJudW1iZXIifHx0eXBlb2Ygcz09InN0cmluZyI/ZChzKTp0eXBlb2Ygcz09Im9iamVjdCI/WyJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXS5mb3JFYWNoKGM9PntzW2NdPT09dm9pZCAwP25bYCR7b30tJHtjfWBdPWw6bltgJHtvfS0ke2N9YF09dHlwZW9mIHNbY109PSJudW1iZXIiP2Ake3NbY119cHhgOnNbY119KTpkKGwpfSksbn12YXIgV2c9bS5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsdCl7bGV0e2ludmVydDpuLHBvc2l0aW9uOnM9ImJvdHRvbS1yaWdodCIsaG90a2V5OnI9WyJhbHRLZXkiLCJLZXlUIl0sZXhwYW5kOmksY2xvc2VCdXR0b246byxjbGFzc05hbWU6bCxvZmZzZXQ6ZCxtb2JpbGVPZmZzZXQ6Yyx0aGVtZTp1PSJsaWdodCIscmljaENvbG9yczpmLGR1cmF0aW9uOmgsc3R5bGU6cCx2aXNpYmxlVG9hc3RzOmc9UmcsdG9hc3RPcHRpb25zOnksZGlyOnY9X2woKSxnYXA6eD1JZyxsb2FkaW5nSWNvbjp3LGljb25zOmIsY29udGFpbmVyQXJpYUxhYmVsOkM9Ik5vdGlmaWNhdGlvbnMiLHBhdXNlV2hlblBhZ2VJc0hpZGRlbjpTfT1lLFtQLEVdPUwudXNlU3RhdGUoW10pLGs9TC51c2VNZW1vKCgpPT5BcnJheS5mcm9tKG5ldyBTZXQoW3NdLmNvbmNhdChQLmZpbHRlcihlZT0+ZWUucG9zaXRpb24pLm1hcChlZT0+ZWUucG9zaXRpb24pKSkpLFtQLHNdKSxbUixBXT1MLnVzZVN0YXRlKFtdKSxbRCxOXT1MLnVzZVN0YXRlKCExKSxbRixfXT1MLnVzZVN0YXRlKCExKSxbSCxNXT1MLnVzZVN0YXRlKHUhPT0ic3lzdGVtIj91OnR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cubWF0Y2hNZWRpYSYmd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKS5tYXRjaGVzPyJkYXJrIjoibGlnaHQiKSx6PUwudXNlUmVmKG51bGwpLEk9ci5qb2luKCIrIikucmVwbGFjZSgvS2V5L2csIiIpLnJlcGxhY2UoL0RpZ2l0L2csIiIpLE89TC51c2VSZWYobnVsbCksRz1MLnVzZVJlZighMSksUT1MLnVzZUNhbGxiYWNrKGVlPT57RShuZT0+e3ZhciBzZTtyZXR1cm4oc2U9bmUuZmluZChoZT0+aGUuaWQ9PT1lZS5pZCkpIT1udWxsJiZzZS5kZWxldGV8fEtlLmRpc21pc3MoZWUuaWQpLG5lLmZpbHRlcigoe2lkOmhlfSk9PmhlIT09ZWUuaWQpfSl9LFtdKTtyZXR1cm4gTC51c2VFZmZlY3QoKCk9PktlLnN1YnNjcmliZShlZT0+e2lmKGVlLmRpc21pc3Mpe0UobmU9Pm5lLm1hcChzZT0+c2UuaWQ9PT1lZS5pZD97Li4uc2UsZGVsZXRlOiEwfTpzZSkpO3JldHVybn1zZXRUaW1lb3V0KCgpPT57Q20uZmx1c2hTeW5jKCgpPT57RShuZT0+e2xldCBzZT1uZS5maW5kSW5kZXgoaGU9PmhlLmlkPT09ZWUuaWQpO3JldHVybiBzZSE9PS0xP1suLi5uZS5zbGljZSgwLHNlKSx7Li4ubmVbc2VdLC4uLmVlfSwuLi5uZS5zbGljZShzZSsxKV06W2VlLC4uLm5lXX0pfSl9KX0pLFtdKSxMLnVzZUVmZmVjdCgoKT0+e2lmKHUhPT0ic3lzdGVtIil7TSh1KTtyZXR1cm59aWYodT09PSJzeXN0ZW0iJiYod2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcz9NKCJkYXJrIik6TSgibGlnaHQiKSksdHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuO2xldCBlZT13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpO3RyeXtlZS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCh7bWF0Y2hlczpuZX0pPT57TShuZT8iZGFyayI6ImxpZ2h0Iil9KX1jYXRjaHtlZS5hZGRMaXN0ZW5lcigoe21hdGNoZXM6c2V9KT0+e3RyeXtNKHNlPyJkYXJrIjoibGlnaHQiKX1jYXRjaChoZSl7Y29uc29sZS5lcnJvcihoZSl9fSl9fSxbdV0pLEwudXNlRWZmZWN0KCgpPT57UC5sZW5ndGg8PTEmJk4oITEpfSxbUF0pLEwudXNlRWZmZWN0KCgpPT57bGV0IGVlPW5lPT57dmFyIHNlLGhlO3IuZXZlcnkoVWU9Pm5lW1VlXXx8bmUuY29kZT09PVVlKSYmKE4oITApLChzZT16LmN1cnJlbnQpPT1udWxsfHxzZS5mb2N1cygpKSxuZS5jb2RlPT09IkVzY2FwZSImJihkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09ei5jdXJyZW50fHwoaGU9ei5jdXJyZW50KSE9bnVsbCYmaGUuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpJiZOKCExKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGVlKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZWUpfSxbcl0pLEwudXNlRWZmZWN0KCgpPT57aWYoei5jdXJyZW50KXJldHVybigpPT57Ty5jdXJyZW50JiYoTy5jdXJyZW50LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksTy5jdXJyZW50PW51bGwsRy5jdXJyZW50PSExKX19LFt6LmN1cnJlbnRdKSxMLmNyZWF0ZUVsZW1lbnQoInNlY3Rpb24iLHtyZWY6dCwiYXJpYS1sYWJlbCI6YCR7Q30gJHtJfWAsdGFiSW5kZXg6LTEsImFyaWEtbGl2ZSI6InBvbGl0ZSIsImFyaWEtcmVsZXZhbnQiOiJhZGRpdGlvbnMgdGV4dCIsImFyaWEtYXRvbWljIjoiZmFsc2UiLHN1cHByZXNzSHlkcmF0aW9uV2FybmluZzohMH0say5tYXAoKGVlLG5lKT0+e3ZhciBzZTtsZXRbaGUsVWVdPWVlLnNwbGl0KCItIik7cmV0dXJuIFAubGVuZ3RoP0wuY3JlYXRlRWxlbWVudCgib2wiLHtrZXk6ZWUsZGlyOnY9PT0iYXV0byI/X2woKTp2LHRhYkluZGV4Oi0xLHJlZjp6LGNsYXNzTmFtZTpsLCJkYXRhLXNvbm5lci10b2FzdGVyIjohMCwiZGF0YS10aGVtZSI6SCwiZGF0YS15LXBvc2l0aW9uIjpoZSwiZGF0YS1saWZ0ZWQiOkQmJlAubGVuZ3RoPjEmJiFpLCJkYXRhLXgtcG9zaXRpb24iOlVlLHN0eWxlOnsiLS1mcm9udC10b2FzdC1oZWlnaHQiOmAkeygoc2U9UlswXSk9PW51bGw/dm9pZCAwOnNlLmhlaWdodCl8fDB9cHhgLCItLXdpZHRoIjpgJHtPZ31weGAsIi0tZ2FwIjpgJHt4fXB4YCwuLi5wLC4uLkJnKGQsYyl9LG9uQmx1cjphZT0+e0cuY3VycmVudCYmIWFlLmN1cnJlbnRUYXJnZXQuY29udGFpbnMoYWUucmVsYXRlZFRhcmdldCkmJihHLmN1cnJlbnQ9ITEsTy5jdXJyZW50JiYoTy5jdXJyZW50LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksTy5jdXJyZW50PW51bGwpKX0sb25Gb2N1czphZT0+e2FlLnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZhZS50YXJnZXQuZGF0YXNldC5kaXNtaXNzaWJsZT09PSJmYWxzZSJ8fEcuY3VycmVudHx8KEcuY3VycmVudD0hMCxPLmN1cnJlbnQ9YWUucmVsYXRlZFRhcmdldCl9LG9uTW91c2VFbnRlcjooKT0+TighMCksb25Nb3VzZU1vdmU6KCk9Pk4oITApLG9uTW91c2VMZWF2ZTooKT0+e0Z8fE4oITEpfSxvbkRyYWdFbmQ6KCk9Pk4oITEpLG9uUG9pbnRlckRvd246YWU9PnthZS50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmYWUudGFyZ2V0LmRhdGFzZXQuZGlzbWlzc2libGU9PT0iZmFsc2UifHxfKCEwKX0sb25Qb2ludGVyVXA6KCk9Pl8oITEpfSxQLmZpbHRlcihhZT0+IWFlLnBvc2l0aW9uJiZuZT09PTB8fGFlLnBvc2l0aW9uPT09ZWUpLm1hcCgoYWUsR3QpPT57dmFyIGtlLExlO3JldHVybiBMLmNyZWF0ZUVsZW1lbnQoX2cse2tleTphZS5pZCxpY29uczpiLGluZGV4Okd0LHRvYXN0OmFlLGRlZmF1bHRSaWNoQ29sb3JzOmYsZHVyYXRpb246KGtlPXk/LmR1cmF0aW9uKSE9bnVsbD9rZTpoLGNsYXNzTmFtZTp5Py5jbGFzc05hbWUsZGVzY3JpcHRpb25DbGFzc05hbWU6eT8uZGVzY3JpcHRpb25DbGFzc05hbWUsaW52ZXJ0Om4sdmlzaWJsZVRvYXN0czpnLGNsb3NlQnV0dG9uOihMZT15Py5jbG9zZUJ1dHRvbikhPW51bGw/TGU6byxpbnRlcmFjdGluZzpGLHBvc2l0aW9uOmVlLHN0eWxlOnk/LnN0eWxlLHVuc3R5bGVkOnk/LnVuc3R5bGVkLGNsYXNzTmFtZXM6eT8uY2xhc3NOYW1lcyxjYW5jZWxCdXR0b25TdHlsZTp5Py5jYW5jZWxCdXR0b25TdHlsZSxhY3Rpb25CdXR0b25TdHlsZTp5Py5hY3Rpb25CdXR0b25TdHlsZSxyZW1vdmVUb2FzdDpRLHRvYXN0czpQLmZpbHRlcihQZT0+UGUucG9zaXRpb249PWFlLnBvc2l0aW9uKSxoZWlnaHRzOlIuZmlsdGVyKFBlPT5QZS5wb3NpdGlvbj09YWUucG9zaXRpb24pLHNldEhlaWdodHM6QSxleHBhbmRCeURlZmF1bHQ6aSxnYXA6eCxsb2FkaW5nSWNvbjp3LGV4cGFuZGVkOkQscGF1c2VXaGVuUGFnZUlzSGlkZGVuOlMsc3dpcGVEaXJlY3Rpb25zOmUuc3dpcGVEaXJlY3Rpb25zfSl9KSk6bnVsbH0pKX0pO2NvbnN0IHpnPSh7Li4uZX0pPT57Y29uc3R7dGhlbWU6dD0ic3lzdGVtIn09cGcoKTtyZXR1cm4gYS5qc3goV2cse3RoZW1lOnQsY2xhc3NOYW1lOiJ0b2FzdGVyIGdyb3VwIix0b2FzdE9wdGlvbnM6e2NsYXNzTmFtZXM6e3RvYXN0OiJncm91cCB0b2FzdCBncm91cC1bLnRvYXN0ZXJdOmJnLWJhY2tncm91bmQgZ3JvdXAtWy50b2FzdGVyXTp0ZXh0LWZvcmVncm91bmQgZ3JvdXAtWy50b2FzdGVyXTpib3JkZXItYm9yZGVyIGdyb3VwLVsudG9hc3Rlcl06c2hhZG93LWxnIixkZXNjcmlwdGlvbjoiZ3JvdXAtWy50b2FzdF06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIixhY3Rpb25CdXR0b246Imdyb3VwLVsudG9hc3RdOmJnLXByaW1hcnkgZ3JvdXAtWy50b2FzdF06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQiLGNhbmNlbEJ1dHRvbjoiZ3JvdXAtWy50b2FzdF06YmctbXV0ZWQgZ3JvdXAtWy50b2FzdF06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIn19LC4uLmV9KX0sVWc9MSwkZz0xZTY7bGV0IEJpPTA7ZnVuY3Rpb24gSGcoKXtyZXR1cm4gQmk9KEJpKzEpJU51bWJlci5NQVhfU0FGRV9JTlRFR0VSLEJpLnRvU3RyaW5nKCl9Y29uc3QgV2k9bmV3IE1hcCxCbD1lPT57aWYoV2kuaGFzKGUpKXJldHVybjtjb25zdCB0PXNldFRpbWVvdXQoKCk9PntXaS5kZWxldGUoZSksRnMoe3R5cGU6IlJFTU9WRV9UT0FTVCIsdG9hc3RJZDplfSl9LCRnKTtXaS5zZXQoZSx0KX0scWc9KGUsdCk9Pntzd2l0Y2godC50eXBlKXtjYXNlIkFERF9UT0FTVCI6cmV0dXJuey4uLmUsdG9hc3RzOlt0LnRvYXN0LC4uLmUudG9hc3RzXS5zbGljZSgwLFVnKX07Y2FzZSJVUERBVEVfVE9BU1QiOnJldHVybnsuLi5lLHRvYXN0czplLnRvYXN0cy5tYXAobj0+bi5pZD09PXQudG9hc3QuaWQ/ey4uLm4sLi4udC50b2FzdH06bil9O2Nhc2UiRElTTUlTU19UT0FTVCI6e2NvbnN0e3RvYXN0SWQ6bn09dDtyZXR1cm4gbj9CbChuKTplLnRvYXN0cy5mb3JFYWNoKHM9PntCbChzLmlkKX0pLHsuLi5lLHRvYXN0czplLnRvYXN0cy5tYXAocz0+cy5pZD09PW58fG49PT12b2lkIDA/ey4uLnMsb3BlbjohMX06cyl9fWNhc2UiUkVNT1ZFX1RPQVNUIjpyZXR1cm4gdC50b2FzdElkPT09dm9pZCAwP3suLi5lLHRvYXN0czpbXX06ey4uLmUsdG9hc3RzOmUudG9hc3RzLmZpbHRlcihuPT5uLmlkIT09dC50b2FzdElkKX19fSxNcj1bXTtsZXQgT3I9e3RvYXN0czpbXX07ZnVuY3Rpb24gRnMoZSl7T3I9cWcoT3IsZSksTXIuZm9yRWFjaCh0PT57dChPcil9KX1mdW5jdGlvbiBLZyh7Li4uZX0pe2NvbnN0IHQ9SGcoKSxuPXI9PkZzKHt0eXBlOiJVUERBVEVfVE9BU1QiLHRvYXN0OnsuLi5yLGlkOnR9fSkscz0oKT0+RnMoe3R5cGU6IkRJU01JU1NfVE9BU1QiLHRvYXN0SWQ6dH0pO3JldHVybiBGcyh7dHlwZToiQUREX1RPQVNUIix0b2FzdDp7Li4uZSxpZDp0LG9wZW46ITAsb25PcGVuQ2hhbmdlOnI9PntyfHxzKCl9fX0pLHtpZDp0LGRpc21pc3M6cyx1cGRhdGU6bn19ZnVuY3Rpb24gR2coKXtjb25zdFtlLHRdPW0udXNlU3RhdGUoT3IpO3JldHVybiBtLnVzZUVmZmVjdCgoKT0+KE1yLnB1c2godCksKCk9Pntjb25zdCBuPU1yLmluZGV4T2YodCk7bj4tMSYmTXIuc3BsaWNlKG4sMSl9KSxbZV0pLHsuLi5lLHRvYXN0OktnLGRpc21pc3M6bj0+RnMoe3R5cGU6IkRJU01JU1NfVE9BU1QiLHRvYXN0SWQ6bn0pfX12YXIgWWc9T2JqZWN0LmRlZmluZVByb3BlcnR5LHhzPShlLHQpPT5ZZyhlLCJuYW1lIix7dmFsdWU6dCxjb25maWd1cmFibGU6ITB9KSxOdT0hISh0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmRvY3VtZW50JiZ3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7ZnVuY3Rpb24gQWUoZSx0LHtjaGVja0ZvckRlZmF1bHRQcmV2ZW50ZWQ6bj0hMH09e30pe3JldHVybiB4cyhmdW5jdGlvbihyKXtpZihlPy4ociksbj09PSExfHwhcnx8IXIuZGVmYXVsdFByZXZlbnRlZClyZXR1cm4gdD8uKHIpfSwiaGFuZGxlRXZlbnQiKX14cyhBZSwiY29tcG9zZUV2ZW50SGFuZGxlcnMiKTtmdW5jdGlvbiBYZyhlKXtpZighTnUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgYWNjZXNzIHdpbmRvdyBvdXRzaWRlIG9mIHRoZSBET00iKTtyZXR1cm4gZT8ub3duZXJEb2N1bWVudD8uZGVmYXVsdFZpZXc/P3dpbmRvd314cyhYZywiZ2V0T3duZXJXaW5kb3ciKTtmdW5jdGlvbiBTbyhlKXtpZighTnUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgYWNjZXNzIGRvY3VtZW50IG91dHNpZGUgb2YgdGhlIERPTSIpO3JldHVybiBlPy5vd25lckRvY3VtZW50Pz9kb2N1bWVudH14cyhTbywiZ2V0T3duZXJEb2N1bWVudCIpO2Z1bmN0aW9uIFJ1KGUsdD0hMSl7Y29uc3R7YWN0aXZlRWxlbWVudDpufT1TbyhlKTtpZighbj8ubm9kZU5hbWUpcmV0dXJuIG51bGw7aWYoRHUobikmJm4uY29udGVudERvY3VtZW50KXJldHVybiBSdShuLmNvbnRlbnREb2N1bWVudC5ib2R5LHQpO2lmKHQpe2NvbnN0IHM9bi5nZXRBdHRyaWJ1dGUoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIpO2lmKHMpe2NvbnN0IHI9U28obikuZ2V0RWxlbWVudEJ5SWQocyk7aWYocilyZXR1cm4gcn19cmV0dXJuIG59eHMoUnUsImdldEFjdGl2ZUVsZW1lbnQiKTtmdW5jdGlvbiBEdShlKXtyZXR1cm4gZS50YWdOYW1lPT09IklGUkFNRSJ9eHMoRHUsImlzRnJhbWUiKTt2YXIgUWc9T2JqZWN0LmRlZmluZVByb3BlcnR5LFRhPShlLHQpPT5RZyhlLCJuYW1lIix7dmFsdWU6dCxjb25maWd1cmFibGU6ITB9KTtmdW5jdGlvbiBQbyhlLHQpe2lmKHR5cGVvZiBlPT0iZnVuY3Rpb24iKXJldHVybiBlKHQpO2UhPW51bGwmJihlLmN1cnJlbnQ9dCl9VGEoUG8sInNldFJlZiIpO2Z1bmN0aW9uIE11KC4uLmUpe3JldHVybiB0PT57bGV0IG49ITE7Y29uc3Qgcz1lLm1hcChyPT57Y29uc3QgaT1QbyhyLHQpO3JldHVybiFuJiZ0eXBlb2YgaT09ImZ1bmN0aW9uIiYmKG49ITApLGl9KTtpZihuKXJldHVybigpPT57Zm9yKGxldCByPTA7cjxzLmxlbmd0aDtyKyspe2NvbnN0IGk9c1tyXTt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pKCk6UG8oZVtyXSxudWxsKX19fX1UYShNdSwiY29tcG9zZVJlZnMiKTtmdW5jdGlvbiBPZSguLi5lKXtyZXR1cm4gbS51c2VDYWxsYmFjayhNdSguLi5lKSxlKX1UYShPZSwidXNlQ29tcG9zZWRSZWZzIik7dmFyIEpnPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxpdD0oZSx0KT0+SmcoZSwibmFtZSIse3ZhbHVlOnQsY29uZmlndXJhYmxlOiEwfSk7ZnVuY3Rpb24gWmcoZSx0KXtjb25zdCBuPW0uY3JlYXRlQ29udGV4dCh0KTtuLmRpc3BsYXlOYW1lPWUrIkNvbnRleHQiO2NvbnN0IHM9aXQoaT0+e2NvbnN0e2NoaWxkcmVuOm8sLi4ubH09aSxkPW0udXNlTWVtbygoKT0+bCxPYmplY3QudmFsdWVzKGwpKTtyZXR1cm4gYS5qc3gobi5Qcm92aWRlcix7dmFsdWU6ZCxjaGlsZHJlbjpvfSl9LCJQcm92aWRlciIpO3MuZGlzcGxheU5hbWU9ZSsiUHJvdmlkZXIiO2Z1bmN0aW9uIHIoaSxvPXt9KXtjb25zdHtvcHRpb25hbDpsPSExfT1vLGQ9bS51c2VDb250ZXh0KG4pO2lmKGQpcmV0dXJuIGQ7aWYodCE9PXZvaWQgMClyZXR1cm4gdDtpZighbCl0aHJvdyBuZXcgRXJyb3IoYFxgJHtpfVxgIG11c3QgYmUgdXNlZCB3aXRoaW4gXGAke2V9XGBgKX1yZXR1cm4gaXQociwidXNlQ29udGV4dCIpLFtzLHJdfWl0KFpnLCJjcmVhdGVDb250ZXh0Iik7ZnVuY3Rpb24gV24oZSx0PVtdKXtsZXQgbj1bXTtmdW5jdGlvbiBzKGksbyl7Y29uc3QgbD1tLmNyZWF0ZUNvbnRleHQobyk7bC5kaXNwbGF5TmFtZT1pKyJDb250ZXh0Ijtjb25zdCBkPW4ubGVuZ3RoO249Wy4uLm4sb107Y29uc3QgYz1pdChmPT57Y29uc3R7c2NvcGU6aCxjaGlsZHJlbjpwLC4uLmd9PWYseT1oPy5bZV0/LltkXXx8bCx2PW0udXNlTWVtbygoKT0+ZyxPYmplY3QudmFsdWVzKGcpKTtyZXR1cm4gYS5qc3goeS5Qcm92aWRlcix7dmFsdWU6dixjaGlsZHJlbjpwfSl9LCJQcm92aWRlciIpO2MuZGlzcGxheU5hbWU9aSsiUHJvdmlkZXIiO2Z1bmN0aW9uIHUoZixoLHA9e30pe2NvbnN0e29wdGlvbmFsOmc9ITF9PXAseT1oPy5bZV0/LltkXXx8bCx2PW0udXNlQ29udGV4dCh5KTtpZih2KXJldHVybiB2O2lmKG8hPT12b2lkIDApcmV0dXJuIG87aWYoIWcpdGhyb3cgbmV3IEVycm9yKGBcYCR7Zn1cYCBtdXN0IGJlIHVzZWQgd2l0aGluIFxgJHtpfVxgYCl9cmV0dXJuIGl0KHUsInVzZUNvbnRleHQiKSxbYyx1XX1pdChzLCJjcmVhdGVDb250ZXh0Iik7Y29uc3Qgcj1pdCgoKT0+e2NvbnN0IGk9bi5tYXAobz0+bS5jcmVhdGVDb250ZXh0KG8pKTtyZXR1cm4gaXQoZnVuY3Rpb24obCl7Y29uc3QgZD1sPy5bZV18fGk7cmV0dXJuIG0udXNlTWVtbygoKT0+KHtbYF9fc2NvcGUke2V9YF06ey4uLmwsW2VdOmR9fSksW2wsZF0pfSwidXNlU2NvcGUiKX0sImNyZWF0ZVNjb3BlIik7cmV0dXJuIHIuc2NvcGVOYW1lPWUsW3MsT3UociwuLi50KV19aXQoV24sImNyZWF0ZUNvbnRleHRTY29wZSIpO2Z1bmN0aW9uIE91KC4uLmUpe2NvbnN0IHQ9ZVswXTtpZihlLmxlbmd0aD09PTEpcmV0dXJuIHQ7Y29uc3Qgbj1pdCgoKT0+e2NvbnN0IHM9ZS5tYXAocj0+KHt1c2VTY29wZTpyKCksc2NvcGVOYW1lOnIuc2NvcGVOYW1lfSkpO3JldHVybiBpdChmdW5jdGlvbihpKXtjb25zdCBvPXMucmVkdWNlKChsLHt1c2VTY29wZTpkLHNjb3BlTmFtZTpjfSk9Pntjb25zdCBmPWQoaSlbYF9fc2NvcGUke2N9YF07cmV0dXJuey4uLmwsLi4uZn19LHt9KTtyZXR1cm4gbS51c2VNZW1vKCgpPT4oe1tgX19zY29wZSR7dC5zY29wZU5hbWV9YF06b30pLFtvXSl9LCJ1c2VDb21wb3NlZFNjb3BlcyIpfSwiY3JlYXRlU2NvcGUiKTtyZXR1cm4gbi5zY29wZU5hbWU9dC5zY29wZU5hbWUsbn1pdChPdSwiY29tcG9zZUNvbnRleHRTY29wZXMiKTt2YXIgZXk9T2JqZWN0LmRlZmluZVByb3BlcnR5LHh0PShlLHQpPT5leShlLCJuYW1lIix7dmFsdWU6dCxjb25maWd1cmFibGU6ITB9KTtmdW5jdGlvbiBWbihlKXtjb25zdCB0PW0uZm9yd2FyZFJlZigobixzKT0+e2xldHtjaGlsZHJlbjpyLC4uLml9PW4sbz1udWxsLGw9ITE7Y29uc3QgZD1bXTtqbyhyKSYmdHlwZW9mIGJyPT0iZnVuY3Rpb24iJiYocj1icihyLl9wYXlsb2FkKSksbS5DaGlsZHJlbi5mb3JFYWNoKHIsaD0+e2lmKF91KGgpKXtsPSEwO2NvbnN0IHA9aDtsZXQgZz0iY2hpbGQiaW4gcC5wcm9wcz9wLnByb3BzLmNoaWxkOnAucHJvcHMuY2hpbGRyZW47am8oZykmJnR5cGVvZiBicj09ImZ1bmN0aW9uIiYmKGc9YnIoZy5fcGF5bG9hZCkpLG89dHkocCxnKSxkLnB1c2gobz8ucHJvcHM/LmNoaWxkcmVuKX1lbHNlIGQucHVzaChoKX0pLG8/bz1tLmNsb25lRWxlbWVudChvLHZvaWQgMCxkKTohbCYmbS5DaGlsZHJlbi5jb3VudChyKT09PTEmJm0uaXNWYWxpZEVsZW1lbnQocikmJihvPXIpO2NvbnN0IGM9bz9WdShvKTp2b2lkIDAsdT1PZShzLGMpO2lmKCFvKXtpZihyfHxyPT09MCl0aHJvdyBuZXcgRXJyb3IobD9yeShlKTpzeShlKSk7cmV0dXJuIHJ9Y29uc3QgZj1GdShpLG8ucHJvcHM/P3t9KTtyZXR1cm4gby50eXBlIT09bS5GcmFnbWVudCYmKGYucmVmPXM/dTpjKSxtLmNsb25lRWxlbWVudChvLGYpfSk7cmV0dXJuIHQuZGlzcGxheU5hbWU9YCR7ZX0uU2xvdGAsdH14dChWbiwiY3JlYXRlU2xvdCIpO3ZhciBJdT1TeW1ib2wuZm9yKCJyYWRpeC5zbG90dGFibGUiKTtmdW5jdGlvbiBMdShlKXtjb25zdCB0PXh0KG49PiJjaGlsZCJpbiBuP24uY2hpbGRyZW4obi5jaGlsZCk6bi5jaGlsZHJlbiwiU2xvdHRhYmxlIik7cmV0dXJuIHQuZGlzcGxheU5hbWU9YCR7ZX0uU2xvdHRhYmxlYCx0Ll9fcmFkaXhJZD1JdSx0fXh0KEx1LCJjcmVhdGVTbG90dGFibGUiKTt2YXIgdHk9eHQoKGUsdCk9PntpZigiY2hpbGQiaW4gZS5wcm9wcyl7Y29uc3Qgbj1lLnByb3BzLmNoaWxkO3JldHVybiBtLmlzVmFsaWRFbGVtZW50KG4pP20uY2xvbmVFbGVtZW50KG4sdm9pZCAwLGUucHJvcHMuY2hpbGRyZW4obi5wcm9wcy5jaGlsZHJlbikpOm51bGx9cmV0dXJuIG0uaXNWYWxpZEVsZW1lbnQodCk/dDpudWxsfSwiZ2V0U2xvdHRhYmxlRWxlbWVudEZyb21TbG90dGFibGUiKTtmdW5jdGlvbiBGdShlLHQpe2NvbnN0IG49ey4uLnR9O2Zvcihjb25zdCBzIGluIHQpe2NvbnN0IHI9ZVtzXSxpPXRbc107L15vbltBLVpdLy50ZXN0KHMpP3ImJmk/bltzXT0oLi4ubCk9Pntjb25zdCBkPWkoLi4ubCk7cmV0dXJuIHIoLi4ubCksZH06ciYmKG5bc109cik6cz09PSJzdHlsZSI/bltzXT17Li4uciwuLi5pfTpzPT09ImNsYXNzTmFtZSImJihuW3NdPVtyLGldLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIikpfXJldHVybnsuLi5lLC4uLm59fXh0KEZ1LCJtZXJnZVByb3BzIik7ZnVuY3Rpb24gVnUoZSl7bGV0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLnByb3BzLCJyZWYiKT8uZ2V0LG49dCYmImlzUmVhY3RXYXJuaW5nImluIHQmJnQuaXNSZWFjdFdhcm5pbmc7cmV0dXJuIG4/ZS5yZWY6KHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCJyZWYiKT8uZ2V0LG49dCYmImlzUmVhY3RXYXJuaW5nImluIHQmJnQuaXNSZWFjdFdhcm5pbmcsbj9lLnByb3BzLnJlZjplLnByb3BzLnJlZnx8ZS5yZWYpfXh0KFZ1LCJnZXRFbGVtZW50UmVmIik7ZnVuY3Rpb24gX3UoZSl7cmV0dXJuIG0uaXNWYWxpZEVsZW1lbnQoZSkmJnR5cGVvZiBlLnR5cGU9PSJmdW5jdGlvbiImJiJfX3JhZGl4SWQiaW4gZS50eXBlJiZlLnR5cGUuX19yYWRpeElkPT09SXV9eHQoX3UsImlzU2xvdHRhYmxlIik7dmFyIG55PVN5bWJvbC5mb3IoInJlYWN0LmxhenkiKTtmdW5jdGlvbiBqbyhlKXtyZXR1cm4gZSE9bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiJiYiJCR0eXBlb2YiaW4gZSYmZS4kJHR5cGVvZj09PW55JiYiX3BheWxvYWQiaW4gZSYmQnUoZS5fcGF5bG9hZCl9eHQoam8sImlzTGF6eUNvbXBvbmVudCIpO2Z1bmN0aW9uIEJ1KGUpe3JldHVybiB0eXBlb2YgZT09Im9iamVjdCImJmUhPT1udWxsJiYidGhlbiJpbiBlfXh0KEJ1LCJpc1Byb21pc2VMaWtlIik7dmFyIHN5PXh0KGU9PmAke2V9IGZhaWxlZCB0byBzbG90IG9udG8gaXRzIGNoaWxkcmVuLiBFeHBlY3RlZCBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkIG9yIFxgU2xvdHRhYmxlXGAuYCwiY3JlYXRlU2xvdEVycm9yIikscnk9eHQoZT0+YCR7ZX0gZmFpbGVkIHRvIHNsb3Qgb250byBpdHMgXGBTbG90dGFibGVcYC4gRXhwZWN0ZWQgXGBTbG90dGFibGVcYCB0byByZWNlaXZlIGEgc2luZ2xlIFJlYWN0IGVsZW1lbnQgY2hpbGQuYCwiY3JlYXRlU2xvdHRhYmxlRXJyb3IiKSxicj1sclsiIHVzZSAiLnRyaW0oKS50b1N0cmluZygpXSxpeT1PYmplY3QuZGVmaW5lUHJvcGVydHksRWU9KGUsdCk9Pml5KGUsIm5hbWUiLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pO2Z1bmN0aW9uIFd1KGUpe2NvbnN0IHQ9ZSsiQ29sbGVjdGlvblByb3ZpZGVyIixbbixzXT1Xbih0KSxbcixpXT1uKHQse2NvbGxlY3Rpb25SZWY6e2N1cnJlbnQ6bnVsbH0saXRlbU1hcDpuZXcgTWFwfSksbz1FZSh5PT57Y29uc3R7c2NvcGU6dixjaGlsZHJlbjp4fT15LHc9bS51c2VSZWYobnVsbCksYj1tLnVzZVJlZihuZXcgTWFwKS5jdXJyZW50O3JldHVybiBhLmpzeChyLHtzY29wZTp2LGl0ZW1NYXA6Yixjb2xsZWN0aW9uUmVmOncsY2hpbGRyZW46eH0pfSwiQ29sbGVjdGlvblByb3ZpZGVyIik7by5kaXNwbGF5TmFtZT10O2NvbnN0IGw9ZSsiQ29sbGVjdGlvblNsb3QiLGQ9Vm4obCksYz1tLmZvcndhcmRSZWYoKHksdik9Pntjb25zdHtzY29wZTp4LGNoaWxkcmVuOnd9PXksYj1pKGwseCksQz1PZSh2LGIuY29sbGVjdGlvblJlZik7cmV0dXJuIGEuanN4KGQse3JlZjpDLGNoaWxkcmVuOnd9KX0pO2MuZGlzcGxheU5hbWU9bDtjb25zdCB1PWUrIkNvbGxlY3Rpb25JdGVtU2xvdCIsZj0iZGF0YS1yYWRpeC1jb2xsZWN0aW9uLWl0ZW0iLGg9Vm4odSkscD1tLmZvcndhcmRSZWYoKHksdik9Pntjb25zdHtzY29wZTp4LGNoaWxkcmVuOncsLi4uYn09eSxDPW0udXNlUmVmKG51bGwpLFM9T2UodixDKSxQPWkodSx4KTtyZXR1cm4gbS51c2VFZmZlY3QoKCk9PihQLml0ZW1NYXAuc2V0KEMse3JlZjpDLC4uLmJ9KSwoKT0+dm9pZCBQLml0ZW1NYXAuZGVsZXRlKEMpKSksYS5qc3goaCx7W2ZdOiIiLHJlZjpTLGNoaWxkcmVuOnd9KX0pO3AuZGlzcGxheU5hbWU9dTtmdW5jdGlvbiBnKHkpe2NvbnN0IHY9aShlKyJDb2xsZWN0aW9uQ29uc3VtZXIiLHkpO3JldHVybiBtLnVzZUNhbGxiYWNrKCgpPT57Y29uc3Qgdz12LmNvbGxlY3Rpb25SZWYuY3VycmVudDtpZighdylyZXR1cm5bXTtjb25zdCBiPUFycmF5LmZyb20ody5xdWVyeVNlbGVjdG9yQWxsKGBbJHtmfV1gKSk7cmV0dXJuIEFycmF5LmZyb20odi5pdGVtTWFwLnZhbHVlcygpKS5zb3J0KChQLEUpPT5iLmluZGV4T2YoUC5yZWYuY3VycmVudCktYi5pbmRleE9mKEUucmVmLmN1cnJlbnQpKX0sW3YuY29sbGVjdGlvblJlZix2Lml0ZW1NYXBdKX1yZXR1cm4gRWUoZywidXNlQ29sbGVjdGlvbiIpLFt7UHJvdmlkZXI6byxTbG90OmMsSXRlbVNsb3Q6cH0sZyxzXX1FZShXdSwiY3JlYXRlQ29sbGVjdGlvbiIpO3ZhciBXbD1uZXcgV2Vha01hcCx3ZSxldCx6aT0oZXQ9Y2xhc3MgZXh0ZW5kcyBNYXB7Y29uc3RydWN0b3Iobil7c3VwZXIobik7Wih0aGlzLHdlKTtxKHRoaXMsd2UsWy4uLnN1cGVyLmtleXMoKV0pLFdsLnNldCh0aGlzLCEwKX1zZXQobixzKXtyZXR1cm4gV2wuZ2V0KHRoaXMpJiYodGhpcy5oYXMobik/aih0aGlzLHdlKVtqKHRoaXMsd2UpLmluZGV4T2YobildPW46aih0aGlzLHdlKS5wdXNoKG4pKSxzdXBlci5zZXQobixzKSx0aGlzfWluc2VydChuLHMscil7Y29uc3QgaT10aGlzLmhhcyhzKSxvPWoodGhpcyx3ZSkubGVuZ3RoLGw9U2Eobik7bGV0IGQ9bD49MD9sOm8rbDtjb25zdCBjPWQ8MHx8ZD49bz8tMTpkO2lmKGM9PT10aGlzLnNpemV8fGkmJmM9PT10aGlzLnNpemUtMXx8Yz09PS0xKXJldHVybiB0aGlzLnNldChzLHIpLHRoaXM7Y29uc3QgdT10aGlzLnNpemUrKGk/MDoxKTtsPDAmJmQrKztjb25zdCBmPVsuLi5qKHRoaXMsd2UpXTtsZXQgaCxwPSExO2ZvcihsZXQgZz1kO2c8dTtnKyspaWYoZD09PWcpe2xldCB5PWZbZ107ZltnXT09PXMmJih5PWZbZysxXSksaSYmdGhpcy5kZWxldGUocyksaD10aGlzLmdldCh5KSx0aGlzLnNldChzLHIpfWVsc2V7IXAmJmZbZy0xXT09PXMmJihwPSEwKTtjb25zdCB5PWZbcD9nOmctMV0sdj1oO2g9dGhpcy5nZXQoeSksdGhpcy5kZWxldGUoeSksdGhpcy5zZXQoeSx2KX1yZXR1cm4gdGhpc313aXRoKG4scyxyKXtjb25zdCBpPW5ldyBldCh0aGlzKTtyZXR1cm4gaS5pbnNlcnQobixzLHIpLGl9YmVmb3JlKG4pe2NvbnN0IHM9aih0aGlzLHdlKS5pbmRleE9mKG4pLTE7aWYoIShzPDApKXJldHVybiB0aGlzLmVudHJ5QXQocyl9c2V0QmVmb3JlKG4scyxyKXtjb25zdCBpPWoodGhpcyx3ZSkuaW5kZXhPZihuKTtyZXR1cm4gaT09PS0xP3RoaXM6dGhpcy5pbnNlcnQoaSxzLHIpfWFmdGVyKG4pe2xldCBzPWoodGhpcyx3ZSkuaW5kZXhPZihuKTtpZihzPXM9PT0tMXx8cz09PXRoaXMuc2l6ZS0xPy0xOnMrMSxzIT09LTEpcmV0dXJuIHRoaXMuZW50cnlBdChzKX1zZXRBZnRlcihuLHMscil7Y29uc3QgaT1qKHRoaXMsd2UpLmluZGV4T2Yobik7cmV0dXJuIGk9PT0tMT90aGlzOnRoaXMuaW5zZXJ0KGkrMSxzLHIpfWZpcnN0KCl7cmV0dXJuIHRoaXMuZW50cnlBdCgwKX1sYXN0KCl7cmV0dXJuIHRoaXMuZW50cnlBdCgtMSl9Y2xlYXIoKXtyZXR1cm4gcSh0aGlzLHdlLFtdKSxzdXBlci5jbGVhcigpfWRlbGV0ZShuKXtjb25zdCBzPXN1cGVyLmRlbGV0ZShuKTtyZXR1cm4gcyYmaih0aGlzLHdlKS5zcGxpY2Uoaih0aGlzLHdlKS5pbmRleE9mKG4pLDEpLHN9ZGVsZXRlQXQobil7Y29uc3Qgcz10aGlzLmtleUF0KG4pO3JldHVybiBzIT09dm9pZCAwP3RoaXMuZGVsZXRlKHMpOiExfWF0KG4pe2NvbnN0IHM9SXIoaih0aGlzLHdlKSxuKTtpZihzIT09dm9pZCAwKXJldHVybiB0aGlzLmdldChzKX1lbnRyeUF0KG4pe2NvbnN0IHM9SXIoaih0aGlzLHdlKSxuKTtpZihzIT09dm9pZCAwKXJldHVybltzLHRoaXMuZ2V0KHMpXX1pbmRleE9mKG4pe3JldHVybiBqKHRoaXMsd2UpLmluZGV4T2Yobil9a2V5QXQobil7cmV0dXJuIElyKGoodGhpcyx3ZSksbil9ZnJvbShuLHMpe2NvbnN0IHI9dGhpcy5pbmRleE9mKG4pO2lmKHI9PT0tMSlyZXR1cm47bGV0IGk9citzO3JldHVybiBpPDAmJihpPTApLGk+PXRoaXMuc2l6ZSYmKGk9dGhpcy5zaXplLTEpLHRoaXMuYXQoaSl9a2V5RnJvbShuLHMpe2NvbnN0IHI9dGhpcy5pbmRleE9mKG4pO2lmKHI9PT0tMSlyZXR1cm47bGV0IGk9citzO3JldHVybiBpPDAmJihpPTApLGk+PXRoaXMuc2l6ZSYmKGk9dGhpcy5zaXplLTEpLHRoaXMua2V5QXQoaSl9ZmluZChuLHMpe2xldCByPTA7Zm9yKGNvbnN0IGkgb2YgdGhpcyl7aWYoUmVmbGVjdC5hcHBseShuLHMsW2kscix0aGlzXSkpcmV0dXJuIGk7cisrfX1maW5kSW5kZXgobixzKXtsZXQgcj0wO2Zvcihjb25zdCBpIG9mIHRoaXMpe2lmKFJlZmxlY3QuYXBwbHkobixzLFtpLHIsdGhpc10pKXJldHVybiByO3IrK31yZXR1cm4tMX1maWx0ZXIobixzKXtjb25zdCByPVtdO2xldCBpPTA7Zm9yKGNvbnN0IG8gb2YgdGhpcylSZWZsZWN0LmFwcGx5KG4scyxbbyxpLHRoaXNdKSYmci5wdXNoKG8pLGkrKztyZXR1cm4gbmV3IGV0KHIpfW1hcChuLHMpe2NvbnN0IHI9W107bGV0IGk9MDtmb3IoY29uc3QgbyBvZiB0aGlzKXIucHVzaChbb1swXSxSZWZsZWN0LmFwcGx5KG4scyxbbyxpLHRoaXNdKV0pLGkrKztyZXR1cm4gbmV3IGV0KHIpfXJlZHVjZSguLi5uKXtjb25zdFtzLHJdPW47bGV0IGk9MCxvPXI/P3RoaXMuYXQoMCk7Zm9yKGNvbnN0IGwgb2YgdGhpcylpPT09MCYmbi5sZW5ndGg9PT0xP289bDpvPVJlZmxlY3QuYXBwbHkocyx0aGlzLFtvLGwsaSx0aGlzXSksaSsrO3JldHVybiBvfXJlZHVjZVJpZ2h0KC4uLm4pe2NvbnN0W3Mscl09bjtsZXQgaT1yPz90aGlzLmF0KC0xKTtmb3IobGV0IG89dGhpcy5zaXplLTE7bz49MDtvLS0pe2NvbnN0IGw9dGhpcy5hdChvKTtvPT09dGhpcy5zaXplLTEmJm4ubGVuZ3RoPT09MT9pPWw6aT1SZWZsZWN0LmFwcGx5KHMsdGhpcyxbaSxsLG8sdGhpc10pfXJldHVybiBpfXRvU29ydGVkKG4pe2NvbnN0IHM9Wy4uLnRoaXMuZW50cmllcygpXS5zb3J0KG4pO3JldHVybiBuZXcgZXQocyl9dG9SZXZlcnNlZCgpe2NvbnN0IG49bmV3IGV0O2ZvcihsZXQgcz10aGlzLnNpemUtMTtzPj0wO3MtLSl7Y29uc3Qgcj10aGlzLmtleUF0KHMpLGk9dGhpcy5nZXQocik7bi5zZXQocixpKX1yZXR1cm4gbn10b1NwbGljZWQoLi4ubil7Y29uc3Qgcz1bLi4udGhpcy5lbnRyaWVzKCldO3JldHVybiBzLnNwbGljZSguLi5uKSxuZXcgZXQocyl9c2xpY2UobixzKXtjb25zdCByPW5ldyBldDtsZXQgaT10aGlzLnNpemUtMTtpZihuPT09dm9pZCAwKXJldHVybiByO248MCYmKG49bit0aGlzLnNpemUpLHMhPT12b2lkIDAmJnM+MCYmKGk9cy0xKTtmb3IobGV0IG89bjtvPD1pO28rKyl7Y29uc3QgbD10aGlzLmtleUF0KG8pLGQ9dGhpcy5nZXQobCk7ci5zZXQobCxkKX1yZXR1cm4gcn1ldmVyeShuLHMpe2xldCByPTA7Zm9yKGNvbnN0IGkgb2YgdGhpcyl7aWYoIVJlZmxlY3QuYXBwbHkobixzLFtpLHIsdGhpc10pKXJldHVybiExO3IrK31yZXR1cm4hMH1zb21lKG4scyl7bGV0IHI9MDtmb3IoY29uc3QgaSBvZiB0aGlzKXtpZihSZWZsZWN0LmFwcGx5KG4scyxbaSxyLHRoaXNdKSlyZXR1cm4hMDtyKyt9cmV0dXJuITF9fSx3ZT1uZXcgV2Vha01hcCxFZShldCwiT3JkZXJlZERpY3QiKSxldCk7ZnVuY3Rpb24gSXIoZSx0KXtpZigiYXQiaW4gQXJyYXkucHJvdG90eXBlKXJldHVybiBBcnJheS5wcm90b3R5cGUuYXQuY2FsbChlLHQpO2NvbnN0IG49enUoZSx0KTtyZXR1cm4gbj09PS0xP3ZvaWQgMDplW25dfUVlKElyLCJhdCIpO2Z1bmN0aW9uIHp1KGUsdCl7Y29uc3Qgbj1lLmxlbmd0aCxzPVNhKHQpLHI9cz49MD9zOm4rcztyZXR1cm4gcjwwfHxyPj1uPy0xOnJ9RWUoenUsInRvU2FmZUluZGV4Iik7ZnVuY3Rpb24gU2EoZSl7cmV0dXJuIGUhPT1lfHxlPT09MD8wOk1hdGgudHJ1bmMoZSl9RWUoU2EsInRvU2FmZUludGVnZXIiKTtmdW5jdGlvbiBveShlKXtjb25zdCB0PWUrIkNvbGxlY3Rpb25Qcm92aWRlciIsW24sc109V24odCksW3IsaV09bih0LHtjb2xsZWN0aW9uRWxlbWVudDpudWxsLGNvbGxlY3Rpb25SZWY6e2N1cnJlbnQ6bnVsbH0sY29sbGVjdGlvblJlZk9iamVjdDp7Y3VycmVudDpudWxsfSxpdGVtTWFwOm5ldyB6aSxzZXRJdGVtTWFwOkVlKCgpPT57fSwic2V0SXRlbU1hcCIpfSksbz1FZSgoe3N0YXRlOmIsLi4uQ30pPT5iP2EuanN4KGQsey4uLkMsc3RhdGU6Yn0pOmEuanN4KGwsey4uLkN9KSwiQ29sbGVjdGlvblByb3ZpZGVyIik7by5kaXNwbGF5TmFtZT10O2NvbnN0IGw9RWUoYj0+e2NvbnN0IEM9digpO3JldHVybiBhLmpzeChkLHsuLi5iLHN0YXRlOkN9KX0sIkNvbGxlY3Rpb25Jbml0Iik7bC5kaXNwbGF5TmFtZT10KyJJbml0Ijtjb25zdCBkPUVlKGI9Pntjb25zdHtzY29wZTpDLGNoaWxkcmVuOlMsc3RhdGU6UH09YixFPW0udXNlUmVmKG51bGwpLFtrLFJdPW0udXNlU3RhdGUobnVsbCksQT1PZShFLFIpLFtELE5dPVA7cmV0dXJuIG0udXNlRWZmZWN0KCgpPT57aWYoIWspcmV0dXJuO2NvbnN0IEY9SHUoKCk9Pnt9KTtyZXR1cm4gRi5vYnNlcnZlKGsse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksKCk9PntGLmRpc2Nvbm5lY3QoKX19LFtrXSksYS5qc3gocix7c2NvcGU6QyxpdGVtTWFwOkQsc2V0SXRlbU1hcDpOLGNvbGxlY3Rpb25SZWY6QSxjb2xsZWN0aW9uUmVmT2JqZWN0OkUsY29sbGVjdGlvbkVsZW1lbnQ6ayxjaGlsZHJlbjpTfSl9LCJDb2xsZWN0aW9uUHJvdmlkZXJJbXBsIik7ZC5kaXNwbGF5TmFtZT10KyJJbXBsIjtjb25zdCBjPWUrIkNvbGxlY3Rpb25TbG90Iix1PVZuKGMpLGY9bS5mb3J3YXJkUmVmKChiLEMpPT57Y29uc3R7c2NvcGU6UyxjaGlsZHJlbjpQfT1iLEU9aShjLFMpLGs9T2UoQyxFLmNvbGxlY3Rpb25SZWYpO3JldHVybiBhLmpzeCh1LHtyZWY6ayxjaGlsZHJlbjpQfSl9KTtmLmRpc3BsYXlOYW1lPWM7Y29uc3QgaD1lKyJDb2xsZWN0aW9uSXRlbVNsb3QiLHA9ImRhdGEtcmFkaXgtY29sbGVjdGlvbi1pdGVtIixnPVZuKGgpLHk9bS5mb3J3YXJkUmVmKChiLEMpPT57Y29uc3R7c2NvcGU6UyxjaGlsZHJlbjpQLC4uLkV9PWIsaz1tLnVzZVJlZihudWxsKSxbUixBXT1tLnVzZVN0YXRlKG51bGwpLEQ9T2UoQyxrLEEpLE49aShoLFMpLHtzZXRJdGVtTWFwOkZ9PU4sXz1tLnVzZVJlZihFKTtVdShfLmN1cnJlbnQsRSl8fChfLmN1cnJlbnQ9RSk7Y29uc3QgSD1fLmN1cnJlbnQ7cmV0dXJuIG0udXNlRWZmZWN0KCgpPT57Y29uc3QgTT1IO3JldHVybiBGKHo9PlI/ei5oYXMoUik/ei5zZXQoUix7Li4uTSxlbGVtZW50OlJ9KS50b1NvcnRlZChFbyk6KHouc2V0KFIsey4uLk0sZWxlbWVudDpSfSksei50b1NvcnRlZChFbykpOnopLCgpPT57Rih6PT4hUnx8IXouaGFzKFIpP3o6KHouZGVsZXRlKFIpLG5ldyB6aSh6KSkpfX0sW1IsSCxGXSksYS5qc3goZyx7W3BdOiIiLHJlZjpELGNoaWxkcmVuOlB9KX0pO3kuZGlzcGxheU5hbWU9aDtmdW5jdGlvbiB2KCl7cmV0dXJuIG0udXNlU3RhdGUobmV3IHppKX1FZSh2LCJ1c2VJbml0Q29sbGVjdGlvbiIpO2Z1bmN0aW9uIHgoYil7Y29uc3R7aXRlbU1hcDpDfT1pKGUrIkNvbGxlY3Rpb25Db25zdW1lciIsYik7cmV0dXJuIEN9cmV0dXJuIEVlKHgsInVzZUNvbGxlY3Rpb24iKSxbe1Byb3ZpZGVyOm8sU2xvdDpmLEl0ZW1TbG90Onl9LHtjcmVhdGVDb2xsZWN0aW9uU2NvcGU6cyx1c2VDb2xsZWN0aW9uOngsdXNlSW5pdENvbGxlY3Rpb246dn1dfUVlKG95LCJjcmVhdGVDb2xsZWN0aW9uIik7ZnVuY3Rpb24gVXUoZSx0KXtpZihlPT09dClyZXR1cm4hMDtpZih0eXBlb2YgZSE9Im9iamVjdCJ8fHR5cGVvZiB0IT0ib2JqZWN0Inx8ZT09bnVsbHx8dD09bnVsbClyZXR1cm4hMTtjb25zdCBuPU9iamVjdC5rZXlzKGUpLHM9T2JqZWN0LmtleXModCk7aWYobi5sZW5ndGghPT1zLmxlbmd0aClyZXR1cm4hMTtmb3IoY29uc3QgciBvZiBuKWlmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKXx8ZVtyXSE9PXRbcl0pcmV0dXJuITE7cmV0dXJuITB9RWUoVXUsInNoYWxsb3dFcXVhbCIpO2Z1bmN0aW9uICR1KGUsdCl7cmV0dXJuISEodC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKSZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElORyl9RWUoJHUsImlzRWxlbWVudFByZWNlZGluZyIpO2Z1bmN0aW9uIEVvKGUsdCl7cmV0dXJuIWVbMV0uZWxlbWVudHx8IXRbMV0uZWxlbWVudD8wOiR1KGVbMV0uZWxlbWVudCx0WzFdLmVsZW1lbnQpPy0xOjF9RWUoRW8sInNvcnRCeURvY3VtZW50UG9zaXRpb24iKTtmdW5jdGlvbiBIdShlKXtyZXR1cm4gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobj0+e2Zvcihjb25zdCBzIG9mIG4paWYocy50eXBlPT09ImNoaWxkTGlzdCIpe2UoKTtyZXR1cm59fSl9RWUoSHUsImdldENoaWxkTGlzdE9ic2VydmVyIik7dmFyIGF5PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxseT0oZSx0KT0+YXkoZSwibmFtZSIse3ZhbHVlOnQsY29uZmlndXJhYmxlOiEwfSksY3k9WyJhIiwiYnV0dG9uIiwiZGl2IiwiZm9ybSIsImgyIiwiaDMiLCJpbWciLCJpbnB1dCIsImxhYmVsIiwibGkiLCJuYXYiLCJvbCIsInAiLCJzZWxlY3QiLCJzcGFuIiwic3ZnIiwidWwiXSxJZT1jeS5yZWR1Y2UoKGUsdCk9Pntjb25zdCBuPVZuKGBQcmltaXRpdmUuJHt0fWApLHM9bS5mb3J3YXJkUmVmKChyLGkpPT57Y29uc3R7YXNDaGlsZDpvLC4uLmx9PXIsZD1vP246dDtyZXR1cm4gdHlwZW9mIHdpbmRvdzwidSImJih3aW5kb3dbU3ltYm9sLmZvcigicmFkaXgtdWkiKV09ITApLGEuanN4KGQsey4uLmwscmVmOml9KX0pO3JldHVybiBzLmRpc3BsYXlOYW1lPWBQcmltaXRpdmUuJHt0fWAsey4uLmUsW3RdOnN9fSx7fSk7ZnVuY3Rpb24gUGEoZSx0KXtlJiZhci5mbHVzaFN5bmMoKCk9PmUuZGlzcGF0Y2hFdmVudCh0KSl9bHkoUGEsImRpc3BhdGNoRGlzY3JldGVDdXN0b21FdmVudCIpO3ZhciBkeT1PYmplY3QuZGVmaW5lUHJvcGVydHksdXk9KGUsdCk9PmR5KGUsIm5hbWUiLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pO2Z1bmN0aW9uIHZ0KGUpe2NvbnN0IHQ9bS51c2VSZWYoZSk7cmV0dXJuIG0udXNlRWZmZWN0KCgpPT57dC5jdXJyZW50PWV9KSxtLnVzZU1lbW8oKCk9PiguLi5uKT0+dC5jdXJyZW50Py4oLi4ubiksW10pfXV5KHZ0LCJ1c2VDYWxsYmFja1JlZiIpO3ZhciBmeT1PYmplY3QuZGVmaW5lUHJvcGVydHksU2U9KGUsdCk9PmZ5KGUsIm5hbWUiLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pLEFvPSJkaXNtaXNzYWJsZUxheWVyLnVwZGF0ZSIsaHk9ImRpc21pc3NhYmxlTGF5ZXIucG9pbnRlckRvd25PdXRzaWRlIixweT0iZGlzbWlzc2FibGVMYXllci5mb2N1c091dHNpZGUiLHpsLGphPW0uY3JlYXRlQ29udGV4dCh7bGF5ZXJzOm5ldyBTZXQsbGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQ6bmV3IFNldCxicmFuY2hlczpuZXcgU2V0LGRpc21pc3NhYmxlU3VyZmFjZXM6bmV3IFNldH0pLEVhPW0uZm9yd2FyZFJlZihTZShmdW5jdGlvbih0LG4pe2NvbnN0e2Rpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50czpzPSExLGRlZmVyUG9pbnRlckRvd25PdXRzaWRlOnI9ITEsb25Fc2NhcGVLZXlEb3duOmksb25Qb2ludGVyRG93bk91dHNpZGU6byxvbkZvY3VzT3V0c2lkZTpsLG9uSW50ZXJhY3RPdXRzaWRlOmQsb25EaXNtaXNzOmMsLi4udX09dCxmPW0udXNlQ29udGV4dChqYSksW2gscF09bS51c2VTdGF0ZShudWxsKSxnPWg/Lm93bmVyRG9jdW1lbnQ/P2dsb2JhbFRoaXM/LmRvY3VtZW50LFsseV09bS51c2VTdGF0ZSh7fSksdj1PZShuLHApLHg9QXJyYXkuZnJvbShmLmxheWVycyksW3ddPVsuLi5mLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkXS5zbGljZSgtMSksYj13P3guaW5kZXhPZih3KTotMSxDPWg/eC5pbmRleE9mKGgpOi0xLFM9Zi5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5zaXplPjAsUD1DPj1iLEU9bS51c2VSZWYoITEpLGs9S3UoTj0+e28/LihOKSxkPy4oTiksTi5kZWZhdWx0UHJldmVudGVkfHxjPy4oKX0se293bmVyRG9jdW1lbnQ6ZyxkZWZlclBvaW50ZXJEb3duT3V0c2lkZTpyLGlzRGVmZXJyZWRQb2ludGVyRG93bk91dHNpZGVSZWY6RSxkaXNtaXNzYWJsZVN1cmZhY2VzOmYuZGlzbWlzc2FibGVTdXJmYWNlcyxzaG91bGRIYW5kbGVQb2ludGVyRG93bk91dHNpZGU6bS51c2VDYWxsYmFjayhOPT57aWYoIShOIGluc3RhbmNlb2YgTm9kZSkpcmV0dXJuITE7Y29uc3QgRj1bLi4uZi5icmFuY2hlc10uc29tZShfPT5fLmNvbnRhaW5zKE4pKTtyZXR1cm4gUCYmIUZ9LFtmLmJyYW5jaGVzLFBdKX0pLFI9R3UoTj0+e2lmKHImJkUuY3VycmVudClyZXR1cm47Y29uc3QgRj1OLnRhcmdldDtbLi4uZi5icmFuY2hlc10uc29tZShIPT5ILmNvbnRhaW5zKEYpKXx8KGw/LihOKSxkPy4oTiksTi5kZWZhdWx0UHJldmVudGVkfHxjPy4oKSl9LGcpLEE9aD9DPT09eC5sZW5ndGgtMTohMSxEPXZ0KE49PntOLmtleT09PSJFc2NhcGUiJiYoaT8uKE4pLCFOLmRlZmF1bHRQcmV2ZW50ZWQmJmMmJihOLnByZXZlbnREZWZhdWx0KCksYygpKSl9KTtyZXR1cm4gbS51c2VFZmZlY3QoKCk9PntpZihBKXJldHVybiBnLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLEQse2NhcHR1cmU6ITB9KSwoKT0+Zy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixELHtjYXB0dXJlOiEwfSl9LFtnLEEsRF0pLG0udXNlRWZmZWN0KCgpPT57aWYoaClyZXR1cm4gcyYmKGYubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuc2l6ZT09PTAmJih6bD1nLmJvZHkuc3R5bGUucG9pbnRlckV2ZW50cyxnLmJvZHkuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIpLGYubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuYWRkKGgpKSxmLmxheWVycy5hZGQoaCksa28oKSwoKT0+e3MmJihmLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLmRlbGV0ZShoKSxmLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemU9PT0wJiYoZy5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHM9emwpKX19LFtoLGcscyxmXSksbS51c2VFZmZlY3QoKCk9PigpPT57aCYmKGYubGF5ZXJzLmRlbGV0ZShoKSxmLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLmRlbGV0ZShoKSxrbygpKX0sW2gsZl0pLG0udXNlRWZmZWN0KCgpPT57Y29uc3QgTj1TZSgoKT0+eSh7fSksImhhbmRsZVVwZGF0ZSIpO3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKEFvLE4pLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKEFvLE4pfSxbXSksYS5qc3goSWUuZGl2LHsuLi51LHJlZjp2LHN0eWxlOntwb2ludGVyRXZlbnRzOlM/UD8iYXV0byI6Im5vbmUiOnZvaWQgMCwuLi50LnN0eWxlfSxvbkZvY3VzQ2FwdHVyZTpBZSh0Lm9uRm9jdXNDYXB0dXJlLFIub25Gb2N1c0NhcHR1cmUpLG9uQmx1ckNhcHR1cmU6QWUodC5vbkJsdXJDYXB0dXJlLFIub25CbHVyQ2FwdHVyZSksb25Qb2ludGVyRG93bkNhcHR1cmU6QWUodC5vblBvaW50ZXJEb3duQ2FwdHVyZSxrLm9uUG9pbnRlckRvd25DYXB0dXJlKX0pfSwiRGlzbWlzc2FibGVMYXllciIpKSxteT1tLmZvcndhcmRSZWYoU2UoZnVuY3Rpb24odCxuKXtjb25zdCBzPW0udXNlQ29udGV4dChqYSkscj1tLnVzZVJlZihudWxsKSxpPU9lKG4scik7cmV0dXJuIG0udXNlRWZmZWN0KCgpPT57Y29uc3Qgbz1yLmN1cnJlbnQ7aWYobylyZXR1cm4gcy5icmFuY2hlcy5hZGQobyksKCk9PntzLmJyYW5jaGVzLmRlbGV0ZShvKX19LFtzLmJyYW5jaGVzXSksYS5qc3goSWUuZGl2LHsuLi50LHJlZjppfSl9LCJEaXNtaXNzYWJsZUxheWVyQnJhbmNoIikpO2Z1bmN0aW9uIHF1KCl7Y29uc3QgZT1tLnVzZUNvbnRleHQoamEpLFt0LG5dPW0udXNlU3RhdGUobnVsbCk7cmV0dXJuIG0udXNlRWZmZWN0KCgpPT57aWYodClyZXR1cm4gZS5kaXNtaXNzYWJsZVN1cmZhY2VzLmFkZCh0KSwoKT0+e2UuZGlzbWlzc2FibGVTdXJmYWNlcy5kZWxldGUodCl9fSxbdCxlLmRpc21pc3NhYmxlU3VyZmFjZXNdKSxufVNlKHF1LCJ1c2VEaXNtaXNzYWJsZUxheWVyU3VyZmFjZSIpO3ZhciBneT1TZSgoKT0+ITAsIklTX1RSVUUiKTtmdW5jdGlvbiBLdShlLHQpe2NvbnN0e293bmVyRG9jdW1lbnQ6bj1nbG9iYWxUaGlzPy5kb2N1bWVudCxkZWZlclBvaW50ZXJEb3duT3V0c2lkZTpzPSExLGlzRGVmZXJyZWRQb2ludGVyRG93bk91dHNpZGVSZWY6cixkaXNtaXNzYWJsZVN1cmZhY2VzOmksc2hvdWxkSGFuZGxlUG9pbnRlckRvd25PdXRzaWRlOm89Z3l9PXQsbD12dChlKSxkPW0udXNlUmVmKCExKSxjPW0udXNlUmVmKCExKSx1PW0udXNlUmVmKG5ldyBNYXApLGY9bS51c2VSZWYoKCk9Pnt9KTtyZXR1cm4gbS51c2VFZmZlY3QoKCk9PntmdW5jdGlvbiBoKCl7Yy5jdXJyZW50PSExLHIuY3VycmVudD0hMSx1LmN1cnJlbnQuY2xlYXIoKX1TZShoLCJyZXNldE91dHNpZGVJbnRlcmFjdGlvbiIpO2Z1bmN0aW9uIHAoKXtyZXR1cm4gQXJyYXkuZnJvbSh1LmN1cnJlbnQudmFsdWVzKCkpLnNvbWUoQm9vbGVhbil9U2UocCwiaXNPdXRzaWRlSW50ZXJhY3Rpb25JbnRlcmNlcHRlZCIpO2Z1bmN0aW9uIGcoYil7aWYoIWMuY3VycmVudClyZXR1cm47Y29uc3QgQz1iLnRhcmdldDtDIGluc3RhbmNlb2YgTm9kZSYmWy4uLmldLnNvbWUoUD0+UC5jb250YWlucyhDKSl8fHUuY3VycmVudC5zZXQoYi50eXBlLCEwKSxiLnR5cGU9PT0iY2xpY2siJiZ3aW5kb3cuc2V0VGltZW91dCgoKT0+e2MuY3VycmVudCYmZi5jdXJyZW50KCl9LDApfVNlKGcsImhhbmRsZUludGVyYWN0aW9uQ2FwdHVyZSIpO2Z1bmN0aW9uIHkoYil7Yy5jdXJyZW50JiZ1LmN1cnJlbnQuc2V0KGIudHlwZSwhMSl9U2UoeSwiaGFuZGxlSW50ZXJhY3Rpb25CdWJibGUiKTtjb25zdCB2PVNlKGI9PntpZihiLnRhcmdldCYmIWQuY3VycmVudCl7bGV0IEM9ZnVuY3Rpb24oKXtuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixmLmN1cnJlbnQpO2NvbnN0IFA9cCgpO2goKSxQfHxBYShoeSxsLFMse2Rpc2NyZXRlOiEwfSl9O2lmKFNlKEMsImhhbmRsZUFuZERpc3BhdGNoUG9pbnRlckRvd25PdXRzaWRlRXZlbnQiKSwhbyhiLnRhcmdldCkpe24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLGYuY3VycmVudCksaCgpLGQuY3VycmVudD0hMTtyZXR1cm59Y29uc3QgUz17b3JpZ2luYWxFdmVudDpifTtjLmN1cnJlbnQ9ITAsci5jdXJyZW50PXMmJmIuYnV0dG9uPT09MCx1LmN1cnJlbnQuY2xlYXIoKSwhc3x8Yi5idXR0b24hPT0wP0MoKToobi5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsZi5jdXJyZW50KSxmLmN1cnJlbnQ9QyxuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmLmN1cnJlbnQse29uY2U6ITB9KSl9ZWxzZSBuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixmLmN1cnJlbnQpLGgoKTtkLmN1cnJlbnQ9ITF9LCJoYW5kbGVQb2ludGVyRG93biIpLHg9WyJwb2ludGVydXAiLCJtb3VzZWRvd24iLCJtb3VzZXVwIiwidG91Y2hzdGFydCIsInRvdWNoZW5kIiwiY2xpY2siXTtmb3IoY29uc3QgYiBvZiB4KW4uYWRkRXZlbnRMaXN0ZW5lcihiLGcsITApLG4uYWRkRXZlbnRMaXN0ZW5lcihiLHkpO2NvbnN0IHc9d2luZG93LnNldFRpbWVvdXQoKCk9PntuLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIix2KX0sMCk7cmV0dXJuKCk9Pnt3aW5kb3cuY2xlYXJUaW1lb3V0KHcpLG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHYpLG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLGYuY3VycmVudCk7Zm9yKGNvbnN0IGIgb2YgeCluLnJlbW92ZUV2ZW50TGlzdGVuZXIoYixnLCEwKSxuLnJlbW92ZUV2ZW50TGlzdGVuZXIoYix5KX19LFtuLGwscyxyLGksb10pLHtvblBvaW50ZXJEb3duQ2FwdHVyZTpTZSgoKT0+ZC5jdXJyZW50PSEwLCJvblBvaW50ZXJEb3duQ2FwdHVyZSIpfX1TZShLdSwidXNlUG9pbnRlckRvd25PdXRzaWRlIik7ZnVuY3Rpb24gR3UoZSx0PWdsb2JhbFRoaXM/LmRvY3VtZW50KXtjb25zdCBuPXZ0KGUpLHM9bS51c2VSZWYoITEpO3JldHVybiBtLnVzZUVmZmVjdCgoKT0+e2NvbnN0IHI9U2UoaT0+e2kudGFyZ2V0JiYhcy5jdXJyZW50JiZBYShweSxuLHtvcmlnaW5hbEV2ZW50Oml9LHtkaXNjcmV0ZTohMX0pfSwiaGFuZGxlRm9jdXMiKTtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIixyKSwoKT0+dC5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1c2luIixyKX0sW3Qsbl0pLHtvbkZvY3VzQ2FwdHVyZTpTZSgoKT0+cy5jdXJyZW50PSEwLCJvbkZvY3VzQ2FwdHVyZSIpLG9uQmx1ckNhcHR1cmU6U2UoKCk9PnMuY3VycmVudD0hMSwib25CbHVyQ2FwdHVyZSIpfX1TZShHdSwidXNlRm9jdXNPdXRzaWRlIik7ZnVuY3Rpb24ga28oKXtjb25zdCBlPW5ldyBDdXN0b21FdmVudChBbyk7ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChlKX1TZShrbywiZGlzcGF0Y2hVcGRhdGUiKTtmdW5jdGlvbiBBYShlLHQsbix7ZGlzY3JldGU6c30pe2NvbnN0IHI9bi5vcmlnaW5hbEV2ZW50LnRhcmdldCxpPW5ldyBDdXN0b21FdmVudChlLHtidWJibGVzOiExLGNhbmNlbGFibGU6ITAsZGV0YWlsOm59KTt0JiZyLmFkZEV2ZW50TGlzdGVuZXIoZSx0LHtvbmNlOiEwfSkscz9QYShyLGkpOnIuZGlzcGF0Y2hFdmVudChpKX1TZShBYSwiaGFuZGxlQW5kRGlzcGF0Y2hDdXN0b21FdmVudCIpO3ZhciB5eT1FYSx2eT1teSxYZT1nbG9iYWxUaGlzPy5kb2N1bWVudD9tLnVzZUxheW91dEVmZmVjdDooKT0+e30seHk9T2JqZWN0LmRlZmluZVByb3BlcnR5LGJ5PShlLHQpPT54eShlLCJuYW1lIix7dmFsdWU6dCxjb25maWd1cmFibGU6ITB9KSxZdT1tLmZvcndhcmRSZWYoYnkoZnVuY3Rpb24odCxuKXtjb25zdHtjb250YWluZXI6cywuLi5yfT10LFtpLG9dPW0udXNlU3RhdGUoITEpO1hlKCgpPT5vKCEwKSxbXSk7Y29uc3QgbD1zfHxpJiZnbG9iYWxUaGlzPy5kb2N1bWVudD8uYm9keTtyZXR1cm4gbD9hci5jcmVhdGVQb3J0YWwoYS5qc3goSWUuZGl2LHsuLi5yLHJlZjpufSksbCk6bnVsbH0sIlBvcnRhbCIpKSx3eT1PYmplY3QuZGVmaW5lUHJvcGVydHksSHQ9KGUsdCk9Pnd5KGUsIm5hbWUiLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pO2Z1bmN0aW9uIFh1KGUsdCl7cmV0dXJuIG0udXNlUmVkdWNlcigobixzKT0+dFtuXVtzXT8/bixlKX1IdChYdSwidXNlU3RhdGVNYWNoaW5lIik7dmFyIGNyPUh0KGU9Pntjb25zdHtwcmVzZW50OnQsY2hpbGRyZW46bn09ZSxzPVF1KHQpLHI9dHlwZW9mIG49PSJmdW5jdGlvbiI/bih7cHJlc2VudDpzLmlzUHJlc2VudH0pOm0uQ2hpbGRyZW4ub25seShuKSxpPUp1KHMucmVmLFp1KHIpKTtyZXR1cm4gdHlwZW9mIG49PSJmdW5jdGlvbiJ8fHMuaXNQcmVzZW50P20uY2xvbmVFbGVtZW50KHIse3JlZjppfSk6bnVsbH0sIlByZXNlbmNlIik7ZnVuY3Rpb24gUXUoZSl7Y29uc3RbdCxuXT1tLnVzZVN0YXRlKCkscz1tLnVzZVJlZihudWxsKSxyPW0udXNlUmVmKGUpLGk9bS51c2VSZWYoIm5vbmUiKSxvPW0udXNlUmVmKHZvaWQgMCksbD1lPyJtb3VudGVkIjoidW5tb3VudGVkIixbZCxjXT1YdShsLHttb3VudGVkOntVTk1PVU5UOiJ1bm1vdW50ZWQiLEFOSU1BVElPTl9PVVQ6InVubW91bnRTdXNwZW5kZWQifSx1bm1vdW50U3VzcGVuZGVkOntNT1VOVDoibW91bnRlZCIsQU5JTUFUSU9OX0VORDoidW5tb3VudGVkIn0sdW5tb3VudGVkOntNT1VOVDoibW91bnRlZCJ9fSk7cmV0dXJuIG0udXNlRWZmZWN0KCgpPT57ZD09PSJtb3VudGVkIj8oaS5jdXJyZW50PW8uY3VycmVudD8/WW4ocy5jdXJyZW50KSxvLmN1cnJlbnQ9dm9pZCAwKTppLmN1cnJlbnQ9Im5vbmUifSxbZF0pLFhlKCgpPT57Y29uc3QgdT1zLmN1cnJlbnQsZj1yLmN1cnJlbnQ7aWYoZiE9PWUpe2NvbnN0IHA9aS5jdXJyZW50LGc9WW4odSk7ZT8oby5jdXJyZW50PWcsYygiTU9VTlQiKSk6Zz09PSJub25lInx8dT8uZGlzcGxheT09PSJub25lIj9jKCJVTk1PVU5UIik6YyhmJiZwIT09Zz8iQU5JTUFUSU9OX09VVCI6IlVOTU9VTlQiKSxyLmN1cnJlbnQ9ZX19LFtlLGNdKSxYZSgoKT0+e2lmKHQpe2xldCB1O2NvbnN0IGY9dC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3Pz93aW5kb3csaD1IdChnPT57Y29uc3Qgdj1ZbihzLmN1cnJlbnQpLmluY2x1ZGVzKENTUy5lc2NhcGUoZy5hbmltYXRpb25OYW1lKSk7aWYoZy50YXJnZXQ9PT10JiZ2JiYoYygiQU5JTUFUSU9OX0VORCIpLCFyLmN1cnJlbnQpKXtjb25zdCB4PXQuc3R5bGUuYW5pbWF0aW9uRmlsbE1vZGU7dC5zdHlsZS5hbmltYXRpb25GaWxsTW9kZT0iZm9yd2FyZHMiLHU9Zi5zZXRUaW1lb3V0KCgpPT57dC5zdHlsZS5hbmltYXRpb25GaWxsTW9kZT09PSJmb3J3YXJkcyImJih0LnN0eWxlLmFuaW1hdGlvbkZpbGxNb2RlPXgpfSl9fSwiaGFuZGxlQW5pbWF0aW9uRW5kIikscD1IdChnPT57Zy50YXJnZXQ9PT10JiYoaS5jdXJyZW50PVluKHMuY3VycmVudCkpfSwiaGFuZGxlQW5pbWF0aW9uU3RhcnQiKTtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKCJhbmltYXRpb25zdGFydCIscCksdC5hZGRFdmVudExpc3RlbmVyKCJhbmltYXRpb25jYW5jZWwiLGgpLHQuYWRkRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uZW5kIixoKSwoKT0+e2YuY2xlYXJUaW1lb3V0KHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uc3RhcnQiLHApLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uY2FuY2VsIixoKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbmVuZCIsaCl9fWVsc2UgYygiQU5JTUFUSU9OX0VORCIpfSxbdCxjXSkse2lzUHJlc2VudDpbIm1vdW50ZWQiLCJ1bm1vdW50U3VzcGVuZGVkIl0uaW5jbHVkZXMoZCkscmVmOm0udXNlQ2FsbGJhY2sodT0+e2lmKHUpe2NvbnN0IGY9Z2V0Q29tcHV0ZWRTdHlsZSh1KTtzLmN1cnJlbnQ9ZixvLmN1cnJlbnQ9WW4oZil9ZWxzZSBzLmN1cnJlbnQ9bnVsbDtuKHUpfSxbXSl9fUh0KFF1LCJ1c2VQcmVzZW5jZSIpO2Z1bmN0aW9uIE5vKGUsdCl7aWYodHlwZW9mIGU9PSJmdW5jdGlvbiIpcmV0dXJuIGUodCk7ZSE9bnVsbCYmKGUuY3VycmVudD10KX1IdChObywic2V0UmVmIik7ZnVuY3Rpb24gSnUoLi4uZSl7Y29uc3QgdD1tLnVzZVJlZihlKTtyZXR1cm4gdC5jdXJyZW50PWUsbS51c2VDYWxsYmFjayhuPT57Y29uc3Qgcz10LmN1cnJlbnQ7bGV0IHI9ITE7Y29uc3QgaT1zLm1hcChvPT57Y29uc3QgbD1ObyhvLG4pO3JldHVybiFyJiZ0eXBlb2YgbD09ImZ1bmN0aW9uIiYmKHI9ITApLGx9KTtpZihyKXJldHVybigpPT57Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspe2NvbnN0IGw9aVtvXTt0eXBlb2YgbD09ImZ1bmN0aW9uIj9sKCk6Tm8oc1tvXSxudWxsKX19fSxbXSl9SHQoSnUsInVzZVN0YWJsZUNvbXBvc2VkUmVmcyIpO2Z1bmN0aW9uIFluKGUpe3JldHVybiBlPy5hbmltYXRpb25OYW1lfHwibm9uZSJ9SHQoWW4sImdldEFuaW1hdGlvbk5hbWUiKTtmdW5jdGlvbiBadShlKXtsZXQgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUucHJvcHMsInJlZiIpPy5nZXQsbj10JiYiaXNSZWFjdFdhcm5pbmciaW4gdCYmdC5pc1JlYWN0V2FybmluZztyZXR1cm4gbj9lLnJlZjoodD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsInJlZiIpPy5nZXQsbj10JiYiaXNSZWFjdFdhcm5pbmciaW4gdCYmdC5pc1JlYWN0V2FybmluZyxuP2UucHJvcHMucmVmOmUucHJvcHMucmVmfHxlLnJlZil9SHQoWnUsImdldEVsZW1lbnRSZWYiKTt2YXIgQ3k9T2JqZWN0LmRlZmluZVByb3BlcnR5LFR5PShlLHQpPT5DeShlLCJuYW1lIix7dmFsdWU6dCxjb25maWd1cmFibGU6ITB9KSxVbD1sclsiIHVzZUVmZmVjdEV2ZW50ICIudHJpbSgpLnRvU3RyaW5nKCldLCRsPWxyWyIgdXNlSW5zZXJ0aW9uRWZmZWN0ICIudHJpbSgpLnRvU3RyaW5nKCldO2Z1bmN0aW9uIGVmKGUpe2lmKHR5cGVvZiBVbD09ImZ1bmN0aW9uIilyZXR1cm4gVWwoZSk7Y29uc3QgdD1tLnVzZVJlZigoKT0+e3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGNhbGwgYW4gZXZlbnQgaGFuZGxlciB3aGlsZSByZW5kZXJpbmcuIil9KTtyZXR1cm4gdHlwZW9mICRsPT0iZnVuY3Rpb24iPyRsKCgpPT57dC5jdXJyZW50PWV9KTpYZSgoKT0+e3QuY3VycmVudD1lfSksbS51c2VNZW1vKCgpPT4oLi4ubik9PnQuY3VycmVudD8uKC4uLm4pLFtdKX1UeShlZiwidXNlRWZmZWN0RXZlbnQiKTt2YXIgU3k9T2JqZWN0LmRlZmluZVByb3BlcnR5LGRyPShlLHQpPT5TeShlLCJuYW1lIix7dmFsdWU6dCxjb25maWd1cmFibGU6ITB9KSxQeT1sclsiIHVzZUluc2VydGlvbkVmZmVjdCAiLnRyaW0oKS50b1N0cmluZygpXXx8WGU7ZnVuY3Rpb24ga2Eoe3Byb3A6ZSxkZWZhdWx0UHJvcDp0LG9uQ2hhbmdlOm49ZHIoKCk9Pnt9LCJvbkNoYW5nZSIpLGNhbGxlcjpzfSl7Y29uc3RbcixpLG9dPXRmKHtkZWZhdWx0UHJvcDp0LG9uQ2hhbmdlOm59KSxsPWUhPT12b2lkIDAsZD1sP2U6cixjPW0udXNlQ2FsbGJhY2sodT0+e2lmKGwpe2NvbnN0IGY9bmYodSk/dShlKTp1O2YhPT1lJiZvLmN1cnJlbnQ/LihmKX1lbHNlIGkodSl9LFtsLGUsaSxvXSk7cmV0dXJuW2QsY119ZHIoa2EsInVzZUNvbnRyb2xsYWJsZVN0YXRlIik7ZnVuY3Rpb24gdGYoe2RlZmF1bHRQcm9wOmUsb25DaGFuZ2U6dH0pe2NvbnN0W24sc109bS51c2VTdGF0ZShlKSxyPW0udXNlUmVmKG4pLGk9bS51c2VSZWYodCk7cmV0dXJuIFB5KCgpPT57aS5jdXJyZW50PXR9LFt0XSksbS51c2VFZmZlY3QoKCk9PntyLmN1cnJlbnQhPT1uJiYoaS5jdXJyZW50Py4obiksci5jdXJyZW50PW4pfSxbbixyXSksW24scyxpXX1kcih0ZiwidXNlVW5jb250cm9sbGVkU3RhdGUiKTtmdW5jdGlvbiBuZihlKXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiJ9ZHIobmYsImlzRnVuY3Rpb24iKTt2YXIgSGw9U3ltYm9sKCJSQURJWDpTWU5DX1NUQVRFIik7ZnVuY3Rpb24gankoZSx0LG4scyl7Y29uc3R7cHJvcDpyLGRlZmF1bHRQcm9wOmksb25DaGFuZ2U6byxjYWxsZXI6bH09dCxkPXIhPT12b2lkIDAsYz1lZihvKSx1PVt7Li4ubixzdGF0ZTppfV07cyYmdS5wdXNoKHMpO2NvbnN0W2YsaF09bS51c2VSZWR1Y2VyKCh2LHgpPT57aWYoeC50eXBlPT09SGwpcmV0dXJuey4uLnYsc3RhdGU6eC5zdGF0ZX07Y29uc3Qgdz1lKHYseCk7cmV0dXJuIGQmJiFPYmplY3QuaXMody5zdGF0ZSx2LnN0YXRlKSYmYyh3LnN0YXRlKSx3fSwuLi51KSxwPWYuc3RhdGUsZz1tLnVzZVJlZihwKTttLnVzZUVmZmVjdCgoKT0+e2cuY3VycmVudCE9PXAmJihnLmN1cnJlbnQ9cCxkfHxjKHApKX0sW3AsZyxkXSk7Y29uc3QgeT1tLnVzZU1lbW8oKCk9PnIhPT12b2lkIDA/ey4uLmYsc3RhdGU6cn06ZixbZixyXSk7cmV0dXJuIG0udXNlRWZmZWN0KCgpPT57ZCYmIU9iamVjdC5pcyhyLGYuc3RhdGUpJiZoKHt0eXBlOkhsLHN0YXRlOnJ9KX0sW3IsZi5zdGF0ZSxkXSksW3ksaF19ZHIoanksInVzZUNvbnRyb2xsYWJsZVN0YXRlUmVkdWNlciIpO3ZhciBFeT1PYmplY3QuZGVmaW5lUHJvcGVydHksQXk9KGUsdCk9PkV5KGUsIm5hbWUiLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pLGt5PU9iamVjdC5mcmVlemUoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsYm9yZGVyOjAsd2lkdGg6MSxoZWlnaHQ6MSxwYWRkaW5nOjAsbWFyZ2luOi0xLG92ZXJmbG93OiJoaWRkZW4iLGNsaXA6InJlY3QoMCwgMCwgMCwgMCkiLHdoaXRlU3BhY2U6Im5vd3JhcCIsd29yZFdyYXA6Im5vcm1hbCJ9KSxOYT1tLmZvcndhcmRSZWYoQXkoZnVuY3Rpb24odCxuKXtyZXR1cm4gYS5qc3goSWUuc3Bhbix7Li4udCxyZWY6bixzdHlsZTp7Li4ua3ksLi4udC5zdHlsZX19KX0sIlZpc3VhbGx5SGlkZGVuIikpLE55PU5hLFJ5PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxsZT0oZSx0KT0+UnkoZSwibmFtZSIse3ZhbHVlOnQsY29uZmlndXJhYmxlOiEwfSksc2Y9IlRvYXN0UHJvdmlkZXIiLFtSYSxyZixEeV09V3UoIlRvYXN0IiksW29mLGZqXT1XbigiVG9hc3QiLFtEeV0pLFtNeSxDaV09b2Yoc2YpLE95PWxlKGU9Pntjb25zdHtfX3Njb3BlVG9hc3Q6dCxsYWJlbDpuPSJOb3RpZmljYXRpb24iLGR1cmF0aW9uOnM9NWUzLHN3aXBlRGlyZWN0aW9uOnI9InJpZ2h0Iixzd2lwZVRocmVzaG9sZDppPTUwLGFubm91bmNlckNvbnRhaW5lcjpvLGNoaWxkcmVuOmx9PWUsW2QsY109bS51c2VTdGF0ZShudWxsKSxbdSxmXT1tLnVzZVN0YXRlKDApLGg9bS51c2VSZWYoITEpO3JldHVybiBuLnRyaW0oKXx8Y29uc29sZS5lcnJvcihgSW52YWxpZCBwcm9wIFxgbGFiZWxcYCBzdXBwbGllZCB0byBcYCR7c2Z9XGAuIEV4cGVjdGVkIG5vbi1lbXB0eSBcYHN0cmluZ1xgLmApLGEuanN4KFJhLlByb3ZpZGVyLHtzY29wZTp0LGNoaWxkcmVuOmEuanN4KE15LHtzY29wZTp0LGxhYmVsOm4sZHVyYXRpb246cyxzd2lwZURpcmVjdGlvbjpyLHN3aXBlVGhyZXNob2xkOmksdG9hc3RDb3VudDp1LHZpZXdwb3J0OmQsb25WaWV3cG9ydENoYW5nZTpjLG9uVG9hc3RBZGQ6bS51c2VDYWxsYmFjaygoKT0+ZihwPT5wKzEpLFtdKSxvblRvYXN0UmVtb3ZlOm0udXNlQ2FsbGJhY2soKCk9PmYocD0+cC0xKSxbXSksaXNDbG9zZVBhdXNlZFJlZjpoLGFubm91bmNlckNvbnRhaW5lcjpvLGNoaWxkcmVuOmx9KX0pfSwiVG9hc3RQcm92aWRlciIpLEl5PSJUb2FzdFZpZXdwb3J0IixMeT1bIkY4Il0sUm89InRvYXN0LnZpZXdwb3J0UGF1c2UiLERvPSJ0b2FzdC52aWV3cG9ydFJlc3VtZSIsRnk9bS5mb3J3YXJkUmVmKGxlKGZ1bmN0aW9uKHQsbil7Y29uc3R7X19zY29wZVRvYXN0OnMsaG90a2V5OnI9THksbGFiZWw6aT0iTm90aWZpY2F0aW9ucyAoe2hvdGtleX0pIiwuLi5vfT10LGw9Q2koSXkscyksZD1yZihzKSxjPW0udXNlUmVmKG51bGwpLHU9bS51c2VSZWYobnVsbCksZj1tLnVzZVJlZihudWxsKSxoPW0udXNlUmVmKG51bGwpLHA9T2UobixoLGwub25WaWV3cG9ydENoYW5nZSksZz1yLmpvaW4oIisiKS5yZXBsYWNlKC9LZXkvZywiIikucmVwbGFjZSgvRGlnaXQvZywiIikseT1sLnRvYXN0Q291bnQ+MDttLnVzZUVmZmVjdCgoKT0+e2NvbnN0IHg9bGUodz0+e3IubGVuZ3RoIT09MCYmci5ldmVyeShDPT53W0NdfHx3LmNvZGU9PT1DKSYmaC5jdXJyZW50Py5mb2N1cygpfSwiaGFuZGxlS2V5RG93biIpO3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix4KSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIseCl9LFtyXSksbS51c2VFZmZlY3QoKCk9Pntjb25zdCB4PWMuY3VycmVudCx3PWguY3VycmVudDtpZih5JiZ4JiZ3KXtjb25zdCBiPWxlKCgpPT57aWYoIWwuaXNDbG9zZVBhdXNlZFJlZi5jdXJyZW50KXtjb25zdCBFPW5ldyBDdXN0b21FdmVudChSbyk7dy5kaXNwYXRjaEV2ZW50KEUpLGwuaXNDbG9zZVBhdXNlZFJlZi5jdXJyZW50PSEwfX0sImhhbmRsZVBhdXNlIiksQz1sZSgoKT0+e2lmKGwuaXNDbG9zZVBhdXNlZFJlZi5jdXJyZW50KXtjb25zdCBFPW5ldyBDdXN0b21FdmVudChEbyk7dy5kaXNwYXRjaEV2ZW50KEUpLGwuaXNDbG9zZVBhdXNlZFJlZi5jdXJyZW50PSExfX0sImhhbmRsZVJlc3VtZSIpLFM9bGUoRT0+eyF4LmNvbnRhaW5zKEUucmVsYXRlZFRhcmdldCkmJkMoKX0sImhhbmRsZUZvY3VzT3V0UmVzdW1lIiksUD1sZSgoKT0+e3guY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCl8fEMoKX0sImhhbmRsZVBvaW50ZXJMZWF2ZVJlc3VtZSIpO3JldHVybiB4LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLGIpLHguYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLFMpLHguYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLGIpLHguYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxlYXZlIixQKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsYiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIixDKSwoKT0+e3gucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsYikseC5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1c291dCIsUykseC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsYikseC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLFApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixiKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLEMpfX19LFt5LGwuaXNDbG9zZVBhdXNlZFJlZl0pO2NvbnN0IHY9bS51c2VDYWxsYmFjaygoe3RhYmJpbmdEaXJlY3Rpb246eH0pPT57Y29uc3QgYj1kKCkubWFwKEM9Pntjb25zdCBTPUMucmVmLmN1cnJlbnQsUD1bUywuLi51ZihTKV07cmV0dXJuIHg9PT0iZm9yd2FyZHMiP1A6UC5yZXZlcnNlKCl9KTtyZXR1cm4oeD09PSJmb3J3YXJkcyI/Yi5yZXZlcnNlKCk6YikuZmxhdCgpfSxbZF0pO3JldHVybiBtLnVzZUVmZmVjdCgoKT0+e2NvbnN0IHg9aC5jdXJyZW50O2lmKHgpe2NvbnN0IHc9bGUoYj0+e2NvbnN0IEM9Yi5hbHRLZXl8fGIuY3RybEtleXx8Yi5tZXRhS2V5O2lmKGIua2V5PT09IlRhYiImJiFDKXtjb25zdCBQPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQsRT1iLnNoaWZ0S2V5O2lmKGIudGFyZ2V0PT09eCYmRSl7dS5jdXJyZW50Py5mb2N1cygpO3JldHVybn1jb25zdCBBPXYoe3RhYmJpbmdEaXJlY3Rpb246RT8iYmFja3dhcmRzIjoiZm9yd2FyZHMifSksRD1BLmZpbmRJbmRleChOPT5OPT09UCk7THIoQS5zbGljZShEKzEpKT9iLnByZXZlbnREZWZhdWx0KCk6RT91LmN1cnJlbnQ/LmZvY3VzKCk6Zi5jdXJyZW50Py5mb2N1cygpfX0sImhhbmRsZUtleURvd24iKTtyZXR1cm4geC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix3KSwoKT0+eC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix3KX19LFtkLHZdKSxhLmpzeHModnkse3JlZjpjLHJvbGU6InJlZ2lvbiIsImFyaWEtbGFiZWwiOmkucmVwbGFjZSgie2hvdGtleX0iLGcpLHRhYkluZGV4Oi0xLHN0eWxlOntwb2ludGVyRXZlbnRzOnk/dm9pZCAwOiJub25lIn0sY2hpbGRyZW46W3kmJmEuanN4KHFsLHtyZWY6dSxvbkZvY3VzRnJvbU91dHNpZGVWaWV3cG9ydDooKT0+e2NvbnN0IHg9dih7dGFiYmluZ0RpcmVjdGlvbjoiZm9yd2FyZHMifSk7THIoeCl9fSksYS5qc3goUmEuU2xvdCx7c2NvcGU6cyxjaGlsZHJlbjphLmpzeChJZS5vbCx7dGFiSW5kZXg6LTEsLi4ubyxyZWY6cH0pfSkseSYmYS5qc3gocWwse3JlZjpmLG9uRm9jdXNGcm9tT3V0c2lkZVZpZXdwb3J0OigpPT57Y29uc3QgeD12KHt0YWJiaW5nRGlyZWN0aW9uOiJiYWNrd2FyZHMifSk7THIoeCl9fSldfSl9LCJUb2FzdFZpZXdwb3J0IikpLFZ5PSJUb2FzdEZvY3VzUHJveHkiLHFsPW0uZm9yd2FyZFJlZihsZShmdW5jdGlvbih0LG4pe2NvbnN0e19fc2NvcGVUb2FzdDpzLG9uRm9jdXNGcm9tT3V0c2lkZVZpZXdwb3J0OnIsLi4uaX09dCxvPUNpKFZ5LHMpO3JldHVybiBhLmpzeChOYSx7dGFiSW5kZXg6MCwuLi5pLHJlZjpuLHN0eWxlOntwb3NpdGlvbjoiZml4ZWQifSxvbkZvY3VzOmw9Pntjb25zdCBkPWwucmVsYXRlZFRhcmdldDshby52aWV3cG9ydD8uY29udGFpbnMoZCkmJnIoKX19KX0sIlRvYXN0Rm9jdXNQcm94eSIpKSxUaT0iVG9hc3QiLF95PSJ0b2FzdC5zd2lwZVN0YXJ0IixCeT0idG9hc3Quc3dpcGVNb3ZlIixXeT0idG9hc3Quc3dpcGVDYW5jZWwiLHp5PSJ0b2FzdC5zd2lwZUVuZCIsVXk9bS5mb3J3YXJkUmVmKGxlKGZ1bmN0aW9uKHQsbil7Y29uc3R7Zm9yY2VNb3VudDpzLG9wZW46cixkZWZhdWx0T3BlbjppLG9uT3BlbkNoYW5nZTpvLC4uLmx9PXQsW2QsY109a2Eoe3Byb3A6cixkZWZhdWx0UHJvcDppPz8hMCxvbkNoYW5nZTpvLGNhbGxlcjpUaX0pO3JldHVybiBhLmpzeChjcix7cHJlc2VudDpzfHxkLGNoaWxkcmVuOmEuanN4KHF5LHtvcGVuOmQsLi4ubCxyZWY6bixvbkNsb3NlOigpPT5jKCExKSxvblBhdXNlOnZ0KHQub25QYXVzZSksb25SZXN1bWU6dnQodC5vblJlc3VtZSksb25Td2lwZVN0YXJ0OkFlKHQub25Td2lwZVN0YXJ0LHU9Pnt1LmN1cnJlbnRUYXJnZXQuc2V0QXR0cmlidXRlKCJkYXRhLXN3aXBlIiwic3RhcnQiKX0pLG9uU3dpcGVNb3ZlOkFlKHQub25Td2lwZU1vdmUsdT0+e2NvbnN0e3g6Zix5Omh9PXUuZGV0YWlsLmRlbHRhO3UuY3VycmVudFRhcmdldC5zZXRBdHRyaWJ1dGUoImRhdGEtc3dpcGUiLCJtb3ZlIiksdS5jdXJyZW50VGFyZ2V0LnN0eWxlLnNldFByb3BlcnR5KCItLXJhZGl4LXRvYXN0LXN3aXBlLW1vdmUteCIsYCR7Zn1weGApLHUuY3VycmVudFRhcmdldC5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1yYWRpeC10b2FzdC1zd2lwZS1tb3ZlLXkiLGAke2h9cHhgKX0pLG9uU3dpcGVDYW5jZWw6QWUodC5vblN3aXBlQ2FuY2VsLHU9Pnt1LmN1cnJlbnRUYXJnZXQuc2V0QXR0cmlidXRlKCJkYXRhLXN3aXBlIiwiY2FuY2VsIiksdS5jdXJyZW50VGFyZ2V0LnN0eWxlLnJlbW92ZVByb3BlcnR5KCItLXJhZGl4LXRvYXN0LXN3aXBlLW1vdmUteCIpLHUuY3VycmVudFRhcmdldC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgiLS1yYWRpeC10b2FzdC1zd2lwZS1tb3ZlLXkiKSx1LmN1cnJlbnRUYXJnZXQuc3R5bGUucmVtb3ZlUHJvcGVydHkoIi0tcmFkaXgtdG9hc3Qtc3dpcGUtZW5kLXgiKSx1LmN1cnJlbnRUYXJnZXQuc3R5bGUucmVtb3ZlUHJvcGVydHkoIi0tcmFkaXgtdG9hc3Qtc3dpcGUtZW5kLXkiKX0pLG9uU3dpcGVFbmQ6QWUodC5vblN3aXBlRW5kLHU9Pntjb25zdHt4OmYseTpofT11LmRldGFpbC5kZWx0YTt1LmN1cnJlbnRUYXJnZXQuc2V0QXR0cmlidXRlKCJkYXRhLXN3aXBlIiwiZW5kIiksdS5jdXJyZW50VGFyZ2V0LnN0eWxlLnJlbW92ZVByb3BlcnR5KCItLXJhZGl4LXRvYXN0LXN3aXBlLW1vdmUteCIpLHUuY3VycmVudFRhcmdldC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgiLS1yYWRpeC10b2FzdC1zd2lwZS1tb3ZlLXkiKSx1LmN1cnJlbnRUYXJnZXQuc3R5bGUuc2V0UHJvcGVydHkoIi0tcmFkaXgtdG9hc3Qtc3dpcGUtZW5kLXgiLGAke2Z9cHhgKSx1LmN1cnJlbnRUYXJnZXQuc3R5bGUuc2V0UHJvcGVydHkoIi0tcmFkaXgtdG9hc3Qtc3dpcGUtZW5kLXkiLGAke2h9cHhgKSxjKCExKX0pfSl9KX0sIlRvYXN0IikpLFskeSxIeV09b2YoVGkse29uQ2xvc2UoKXt9fSkscXk9bS5mb3J3YXJkUmVmKGxlKGZ1bmN0aW9uKHQsbil7Y29uc3R7X19zY29wZVRvYXN0OnMsdHlwZTpyPSJmb3JlZ3JvdW5kIixkdXJhdGlvbjppLG9wZW46byxvbkNsb3NlOmwsb25Fc2NhcGVLZXlEb3duOmQsb25QYXVzZTpjLG9uUmVzdW1lOnUsb25Td2lwZVN0YXJ0OmYsb25Td2lwZU1vdmU6aCxvblN3aXBlQ2FuY2VsOnAsb25Td2lwZUVuZDpnLC4uLnl9PXQsdj1DaShUaSxzKSx4PXJmKHMpLFt3LGJdPW0udXNlU3RhdGUobnVsbCksQz1PZShuLGIpLFM9bS51c2VSZWYobnVsbCksUD1tLnVzZVJlZihudWxsKSxFPWl8fHYuZHVyYXRpb24saz1tLnVzZVJlZigwKSxSPW0udXNlUmVmKEUpLEE9bS51c2VSZWYoMCkse29uVG9hc3RBZGQ6RCxvblRvYXN0UmVtb3ZlOk59PXYsRj12dCgoKT0+e3c/LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpJiZ2LnZpZXdwb3J0Py5mb2N1cygpLGwoKX0pLF89bS51c2VDYWxsYmFjayhNPT57IU18fE09PT0xLzB8fCh3aW5kb3cuY2xlYXJUaW1lb3V0KEEuY3VycmVudCksay5jdXJyZW50PW5ldyBEYXRlKCkuZ2V0VGltZSgpLEEuY3VycmVudD13aW5kb3cuc2V0VGltZW91dChGLE0pKX0sW0ZdKTttLnVzZUVmZmVjdCgoKT0+e2NvbnN0IE09di52aWV3cG9ydDtpZihNKXtjb25zdCB6PWxlKCgpPT57XyhSLmN1cnJlbnQpLHU/LigpfSwiaGFuZGxlUmVzdW1lIiksST1sZSgoKT0+e2NvbnN0IE89bmV3IERhdGUoKS5nZXRUaW1lKCktay5jdXJyZW50O1IuY3VycmVudD1SLmN1cnJlbnQtTyx3aW5kb3cuY2xlYXJUaW1lb3V0KEEuY3VycmVudCksYz8uKCl9LCJoYW5kbGVQYXVzZSIpO3JldHVybiBNLmFkZEV2ZW50TGlzdGVuZXIoUm8sSSksTS5hZGRFdmVudExpc3RlbmVyKERvLHopLCgpPT57TS5yZW1vdmVFdmVudExpc3RlbmVyKFJvLEkpLE0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihEbyx6KX19fSxbdi52aWV3cG9ydCxFLGMsdSxfXSksbS51c2VFZmZlY3QoKCk9PntvJiYhdi5pc0Nsb3NlUGF1c2VkUmVmLmN1cnJlbnQmJl8oRSl9LFtvLEUsdi5pc0Nsb3NlUGF1c2VkUmVmLF9dKSxtLnVzZUVmZmVjdCgoKT0+KCk9Pnt3aW5kb3cuY2xlYXJUaW1lb3V0KEEuY3VycmVudCl9LFtdKSxtLnVzZUVmZmVjdCgoKT0+KEQoKSwoKT0+TigpKSxbRCxOXSk7Y29uc3QgSD1tLnVzZU1lbW8oKCk9Pnc/RGEodyk6bnVsbCxbd10pO3JldHVybiB2LnZpZXdwb3J0P2EuanN4cyhhLkZyYWdtZW50LHtjaGlsZHJlbjpbSCYmYS5qc3goS3kse19fc2NvcGVUb2FzdDpzLHJvbGU6InN0YXR1cyIsImFyaWEtbGl2ZSI6cj09PSJmb3JlZ3JvdW5kIj8iYXNzZXJ0aXZlIjoicG9saXRlIixjaGlsZHJlbjpIfSksYS5qc3goJHkse3Njb3BlOnMsb25DbG9zZTpGLGNoaWxkcmVuOmFyLmNyZWF0ZVBvcnRhbChhLmpzeChSYS5JdGVtU2xvdCx7c2NvcGU6cyxjaGlsZHJlbjphLmpzeCh5eSx7YXNDaGlsZDohMCxvbkVzY2FwZUtleURvd246QWUoZCxNPT57eCgpLnNvbWUoST0+SS5yZWYuY3VycmVudD8uY29udGFpbnMoTS50YXJnZXQpKXx8RigpfSksY2hpbGRyZW46YS5qc3goSWUubGkse3RhYkluZGV4OjAsImRhdGEtc3RhdGUiOm8/Im9wZW4iOiJjbG9zZWQiLCJkYXRhLXN3aXBlLWRpcmVjdGlvbiI6di5zd2lwZURpcmVjdGlvbiwuLi55LHJlZjpDLHN0eWxlOnt1c2VyU2VsZWN0OiJub25lIix0b3VjaEFjdGlvbjoibm9uZSIsLi4udC5zdHlsZX0sb25LZXlEb3duOkFlKHQub25LZXlEb3duLE09PntNLmtleT09PSJFc2NhcGUiJiYoZD8uKE0ubmF0aXZlRXZlbnQpLE0ubmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZHx8RigpKX0pLG9uUG9pbnRlckRvd246QWUodC5vblBvaW50ZXJEb3duLE09PntNLmJ1dHRvbj09PTAmJihTLmN1cnJlbnQ9e3g6TS5jbGllbnRYLHk6TS5jbGllbnRZfSl9KSxvblBvaW50ZXJNb3ZlOkFlKHQub25Qb2ludGVyTW92ZSxNPT57aWYoIVMuY3VycmVudClyZXR1cm47Y29uc3Qgej1NLmNsaWVudFgtUy5jdXJyZW50LngsST1NLmNsaWVudFktUy5jdXJyZW50LnksTz0hIVAuY3VycmVudCxHPVsibGVmdCIsInJpZ2h0Il0uaW5jbHVkZXModi5zd2lwZURpcmVjdGlvbiksUT1bImxlZnQiLCJ1cCJdLmluY2x1ZGVzKHYuc3dpcGVEaXJlY3Rpb24pP01hdGgubWluOk1hdGgubWF4LGVlPUc/USgwLHopOjAsbmU9Rz8wOlEoMCxJKSxzZT1NLnBvaW50ZXJUeXBlPT09InRvdWNoIj8xMDoyLGhlPXt4OmVlLHk6bmV9LFVlPXtvcmlnaW5hbEV2ZW50Ok0sZGVsdGE6aGV9O08/KFAuY3VycmVudD1oZSxJcyhCeSxoLFVlLHtkaXNjcmV0ZTohMX0pKTpLbChoZSx2LnN3aXBlRGlyZWN0aW9uLHNlKT8oUC5jdXJyZW50PWhlLElzKF95LGYsVWUse2Rpc2NyZXRlOiExfSksTS50YXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoTS5wb2ludGVySWQpKTooTWF0aC5hYnMoeik+c2V8fE1hdGguYWJzKEkpPnNlKSYmKFMuY3VycmVudD1udWxsKX0pLG9uUG9pbnRlclVwOkFlKHQub25Qb2ludGVyVXAsTT0+e2NvbnN0IHo9UC5jdXJyZW50LEk9TS50YXJnZXQ7aWYoSS5oYXNQb2ludGVyQ2FwdHVyZShNLnBvaW50ZXJJZCkmJkkucmVsZWFzZVBvaW50ZXJDYXB0dXJlKE0ucG9pbnRlcklkKSxQLmN1cnJlbnQ9bnVsbCxTLmN1cnJlbnQ9bnVsbCx6KXtjb25zdCBPPU0uY3VycmVudFRhcmdldCxHPXtvcmlnaW5hbEV2ZW50Ok0sZGVsdGE6en07S2woeix2LnN3aXBlRGlyZWN0aW9uLHYuc3dpcGVUaHJlc2hvbGQpP0lzKHp5LGcsRyx7ZGlzY3JldGU6ITB9KTpJcyhXeSxwLEcse2Rpc2NyZXRlOiEwfSksTy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsUT0+US5wcmV2ZW50RGVmYXVsdCgpLHtvbmNlOiEwfSl9fSl9KX0pfSksdi52aWV3cG9ydCl9KV19KTpudWxsfSwiVG9hc3RJbXBsIikpLEt5PWxlKGU9Pntjb25zdHtfX3Njb3BlVG9hc3Q6dCxjaGlsZHJlbjpuLC4uLnN9PWUscj1DaShUaSx0KSxbaSxvXT1tLnVzZVN0YXRlKCExKSxbbCxkXT1tLnVzZVN0YXRlKCExKTtyZXR1cm4gY2YoKCk9Pm8oITApKSxtLnVzZUVmZmVjdCgoKT0+e2NvbnN0IGM9d2luZG93LnNldFRpbWVvdXQoKCk9PmQoITApLDFlMyk7cmV0dXJuKCk9PndpbmRvdy5jbGVhclRpbWVvdXQoYyl9LFtdKSxsP251bGw6YS5qc3goWXUse2FzQ2hpbGQ6ITAsY29udGFpbmVyOnIuYW5ub3VuY2VyQ29udGFpbmVyfHx2b2lkIDAsY2hpbGRyZW46YS5qc3goTmEsey4uLnMsY2hpbGRyZW46aSYmYS5qc3hzKGEuRnJhZ21lbnQse2NoaWxkcmVuOltyLmxhYmVsLCIgIixuXX0pfSl9KX0sIlRvYXN0QW5ub3VuY2UiKSxHeT1tLmZvcndhcmRSZWYobGUoZnVuY3Rpb24odCxuKXtjb25zdHtfX3Njb3BlVG9hc3Q6cywuLi5yfT10O3JldHVybiBhLmpzeChJZS5kaXYsey4uLnIscmVmOm59KX0sIlRvYXN0VGl0bGUiKSksWXk9bS5mb3J3YXJkUmVmKGxlKGZ1bmN0aW9uKHQsbil7Y29uc3R7X19zY29wZVRvYXN0OnMsLi4ucn09dDtyZXR1cm4gYS5qc3goSWUuZGl2LHsuLi5yLHJlZjpufSl9LCJUb2FzdERlc2NyaXB0aW9uIikpLFh5PSJUb2FzdEFjdGlvbiIsUXk9bS5mb3J3YXJkUmVmKGxlKGZ1bmN0aW9uKHQsbil7Y29uc3R7YWx0VGV4dDpzLC4uLnJ9PXQ7cmV0dXJuIHMudHJpbSgpP2EuanN4KGxmLHthbHRUZXh0OnMsYXNDaGlsZDohMCxjaGlsZHJlbjphLmpzeChhZix7Li4ucixyZWY6bn0pfSk6KGNvbnNvbGUuZXJyb3IoYEludmFsaWQgcHJvcCBcYGFsdFRleHRcYCBzdXBwbGllZCB0byBcYCR7WHl9XGAuIEV4cGVjdGVkIG5vbi1lbXB0eSBcYHN0cmluZ1xgLmApLG51bGwpfSwiVG9hc3RBY3Rpb24iKSksSnk9IlRvYXN0Q2xvc2UiLGFmPW0uZm9yd2FyZFJlZihsZShmdW5jdGlvbih0LG4pe2NvbnN0e19fc2NvcGVUb2FzdDpzLC4uLnJ9PXQsaT1IeShKeSxzKTtyZXR1cm4gYS5qc3gobGYse2FzQ2hpbGQ6ITAsY2hpbGRyZW46YS5qc3goSWUuYnV0dG9uLHt0eXBlOiJidXR0b24iLC4uLnIscmVmOm4sb25DbGljazpBZSh0Lm9uQ2xpY2ssaS5vbkNsb3NlKX0pfSl9LCJUb2FzdENsb3NlIikpLGxmPW0uZm9yd2FyZFJlZihsZShmdW5jdGlvbih0LG4pe2NvbnN0e19fc2NvcGVUb2FzdDpzLGFsdFRleHQ6ciwuLi5pfT10O3JldHVybiBhLmpzeChJZS5kaXYseyJkYXRhLXJhZGl4LXRvYXN0LWFubm91bmNlLWV4Y2x1ZGUiOiIiLCJkYXRhLXJhZGl4LXRvYXN0LWFubm91bmNlLWFsdCI6cnx8dm9pZCAwLC4uLmkscmVmOm59KX0sIlRvYXN0QW5ub3VuY2VFeGNsdWRlIikpO2Z1bmN0aW9uIERhKGUpe2NvbnN0IHQ9W107cmV0dXJuIEFycmF5LmZyb20oZS5jaGlsZE5vZGVzKS5mb3JFYWNoKHM9PntpZihzLm5vZGVUeXBlPT09cy5URVhUX05PREUmJnMudGV4dENvbnRlbnQmJnQucHVzaChzLnRleHRDb250ZW50KSxkZihzKSl7Y29uc3Qgcj1zLmFyaWFIaWRkZW58fHMuaGlkZGVufHxzLnN0eWxlLmRpc3BsYXk9PT0ibm9uZSIsaT1zLmRhdGFzZXQucmFkaXhUb2FzdEFubm91bmNlRXhjbHVkZT09PSIiO2lmKCFyKWlmKGkpe2NvbnN0IG89cy5kYXRhc2V0LnJhZGl4VG9hc3RBbm5vdW5jZUFsdDtvJiZ0LnB1c2gobyl9ZWxzZSB0LnB1c2goLi4uRGEocykpfX0pLHR9bGUoRGEsImdldEFubm91bmNlVGV4dENvbnRlbnQiKTtmdW5jdGlvbiBJcyhlLHQsbix7ZGlzY3JldGU6c30pe2NvbnN0IHI9bi5vcmlnaW5hbEV2ZW50LmN1cnJlbnRUYXJnZXQsaT1uZXcgQ3VzdG9tRXZlbnQoZSx7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGRldGFpbDpufSk7dCYmci5hZGRFdmVudExpc3RlbmVyKGUsdCx7b25jZTohMH0pLHM/UGEocixpKTpyLmRpc3BhdGNoRXZlbnQoaSl9bGUoSXMsImhhbmRsZUFuZERpc3BhdGNoQ3VzdG9tRXZlbnQiKTt2YXIgS2w9bGUoKGUsdCxuPTApPT57Y29uc3Qgcz1NYXRoLmFicyhlLngpLHI9TWF0aC5hYnMoZS55KSxpPXM+cjtyZXR1cm4gdD09PSJsZWZ0Inx8dD09PSJyaWdodCI/aSYmcz5uOiFpJiZyPm59LCJpc0RlbHRhSW5EaXJlY3Rpb24iKTtmdW5jdGlvbiBjZihlPSgpPT57fSl7Y29uc3QgdD12dChlKTtYZSgoKT0+e2xldCBuPTAscz0wO3JldHVybiBuPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnM9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0KSksKCk9Pnt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUobiksd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHMpfX0sW3RdKX1sZShjZiwidXNlTmV4dEZyYW1lIik7ZnVuY3Rpb24gZGYoZSl7cmV0dXJuIGUubm9kZVR5cGU9PT1lLkVMRU1FTlRfTk9ERX1sZShkZiwiaXNIVE1MRWxlbWVudCIpO2Z1bmN0aW9uIHVmKGUpe2NvbnN0IHQ9W10sbj1kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKGUsTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQse2FjY2VwdE5vZGU6bGUocz0+e2NvbnN0IHI9cy50YWdOYW1lPT09IklOUFVUIiYmcy50eXBlPT09ImhpZGRlbiI7cmV0dXJuIHMuZGlzYWJsZWR8fHMuaGlkZGVufHxyP05vZGVGaWx0ZXIuRklMVEVSX1NLSVA6cy50YWJJbmRleD49MD9Ob2RlRmlsdGVyLkZJTFRFUl9BQ0NFUFQ6Tm9kZUZpbHRlci5GSUxURVJfU0tJUH0sImFjY2VwdE5vZGUiKX0pO2Zvcig7bi5uZXh0Tm9kZSgpOyl0LnB1c2gobi5jdXJyZW50Tm9kZSk7cmV0dXJuIHR9bGUodWYsImdldFRhYmJhYmxlQ2FuZGlkYXRlcyIpO2Z1bmN0aW9uIExyKGUpe2NvbnN0IHQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtyZXR1cm4gZS5zb21lKG49Pm49PT10PyEwOihuLmZvY3VzKCksZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXQpKX1sZShMciwiZm9jdXNGaXJzdCIpO3ZhciBaeT1PeSxmZj1GeSxoZj1VeSxwZj1HeSxtZj1ZeSxnZj1ReSx5Zj1hZjtmdW5jdGlvbiB2ZihlKXt2YXIgdCxuLHM9IiI7aWYodHlwZW9mIGU9PSJzdHJpbmcifHx0eXBlb2YgZT09Im51bWJlciIpcys9ZTtlbHNlIGlmKHR5cGVvZiBlPT0ib2JqZWN0IilpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgcj1lLmxlbmd0aDtmb3IodD0wO3Q8cjt0KyspZVt0XSYmKG49dmYoZVt0XSkpJiYocyYmKHMrPSIgIikscys9bil9ZWxzZSBmb3IobiBpbiBlKWVbbl0mJihzJiYocys9IiAiKSxzKz1uKTtyZXR1cm4gc31mdW5jdGlvbiB4Zigpe2Zvcih2YXIgZSx0LG49MCxzPSIiLHI9YXJndW1lbnRzLmxlbmd0aDtuPHI7bisrKShlPWFyZ3VtZW50c1tuXSkmJih0PXZmKGUpKSYmKHMmJihzKz0iICIpLHMrPXQpO3JldHVybiBzfWNvbnN0IEdsPWU9PnR5cGVvZiBlPT0iYm9vbGVhbiI/YCR7ZX1gOmU9PT0wPyIwIjplLFlsPXhmLGV2PShlLHQpPT5uPT57dmFyIHM7aWYodD8udmFyaWFudHM9PW51bGwpcmV0dXJuIFlsKGUsbj8uY2xhc3Msbj8uY2xhc3NOYW1lKTtjb25zdHt2YXJpYW50czpyLGRlZmF1bHRWYXJpYW50czppfT10LG89T2JqZWN0LmtleXMocikubWFwKGM9Pntjb25zdCB1PW4/LltjXSxmPWk/LltjXTtpZih1PT09bnVsbClyZXR1cm4gbnVsbDtjb25zdCBoPUdsKHUpfHxHbChmKTtyZXR1cm4gcltjXVtoXX0pLGw9biYmT2JqZWN0LmVudHJpZXMobikucmVkdWNlKChjLHUpPT57bGV0W2YsaF09dTtyZXR1cm4gaD09PXZvaWQgMHx8KGNbZl09aCksY30se30pLGQ9dD09bnVsbHx8KHM9dC5jb21wb3VuZFZhcmlhbnRzKT09PW51bGx8fHM9PT12b2lkIDA/dm9pZCAwOnMucmVkdWNlKChjLHUpPT57bGV0e2NsYXNzOmYsY2xhc3NOYW1lOmgsLi4ucH09dTtyZXR1cm4gT2JqZWN0LmVudHJpZXMocCkuZXZlcnkoZz0+e2xldFt5LHZdPWc7cmV0dXJuIEFycmF5LmlzQXJyYXkodik/di5pbmNsdWRlcyh7Li4uaSwuLi5sfVt5XSk6ey4uLmksLi4ubH1beV09PT12fSk/Wy4uLmMsZixoXTpjfSxbXSk7cmV0dXJuIFlsKGUsbyxkLG4/LmNsYXNzLG4/LmNsYXNzTmFtZSl9Oy8qKgogKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDYyLjAgLSBJU0MKICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuCiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi9jb25zdCB0dj1lPT5lLnJlcGxhY2UoLyhbYS16MC05XSkoW0EtWl0pL2csIiQxLSQyIikudG9Mb3dlckNhc2UoKSxiZj0oLi4uZSk9PmUuZmlsdGVyKCh0LG4scyk9PiEhdCYmdC50cmltKCkhPT0iIiYmcy5pbmRleE9mKHQpPT09bikuam9pbigiICIpLnRyaW0oKTsvKioKICogQGxpY2Vuc2UgbHVjaWRlLXJlYWN0IHYwLjQ2Mi4wIC0gSVNDCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIElTQyBsaWNlbnNlLgogKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICovdmFyIG52PXt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHdpZHRoOjI0LGhlaWdodDoyNCx2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoyLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQifTsvKioKICogQGxpY2Vuc2UgbHVjaWRlLXJlYWN0IHYwLjQ2Mi4wIC0gSVNDCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIElTQyBsaWNlbnNlLgogKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICovY29uc3Qgc3Y9bS5mb3J3YXJkUmVmKCh7Y29sb3I6ZT0iY3VycmVudENvbG9yIixzaXplOnQ9MjQsc3Ryb2tlV2lkdGg6bj0yLGFic29sdXRlU3Ryb2tlV2lkdGg6cyxjbGFzc05hbWU6cj0iIixjaGlsZHJlbjppLGljb25Ob2RlOm8sLi4ubH0sZCk9Pm0uY3JlYXRlRWxlbWVudCgic3ZnIix7cmVmOmQsLi4ubnYsd2lkdGg6dCxoZWlnaHQ6dCxzdHJva2U6ZSxzdHJva2VXaWR0aDpzP051bWJlcihuKSoyNC9OdW1iZXIodCk6bixjbGFzc05hbWU6YmYoImx1Y2lkZSIsciksLi4ubH0sWy4uLm8ubWFwKChbYyx1XSk9Pm0uY3JlYXRlRWxlbWVudChjLHUpKSwuLi5BcnJheS5pc0FycmF5KGkpP2k6W2ldXSkpOy8qKgogKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDYyLjAgLSBJU0MKICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuCiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi9jb25zdCBvZT0oZSx0KT0+e2NvbnN0IG49bS5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOnMsLi4ucn0saSk9Pm0uY3JlYXRlRWxlbWVudChzdix7cmVmOmksaWNvbk5vZGU6dCxjbGFzc05hbWU6YmYoYGx1Y2lkZS0ke3R2KGUpfWAscyksLi4ucn0pKTtyZXR1cm4gbi5kaXNwbGF5TmFtZT1gJHtlfWAsbn07LyoqCiAqIEBsaWNlbnNlIGx1Y2lkZS1yZWFjdCB2MC40NjIuMCAtIElTQwogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBJU0MgbGljZW5zZS4KICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqL2NvbnN0IHJ2PW9lKCJBcnJvd0xlZnRSaWdodCIsW1sicGF0aCIse2Q6Ik04IDMgNCA3bDQgNCIsa2V5OiI5cmI2d2oifV0sWyJwYXRoIix7ZDoiTTQgN2gxNiIsa2V5OiI2dHg4ZTMifV0sWyJwYXRoIix7ZDoibTE2IDIxIDQtNC00LTQiLGtleToic2l2N2oyIn1dLFsicGF0aCIse2Q6Ik0yMCAxN0g0IixrZXk6Img2bDNociJ9XV0pOy8qKgogKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDYyLjAgLSBJU0MKICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuCiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi9jb25zdCBpdj1vZSgiQXJyb3dMZWZ0IixbWyJwYXRoIix7ZDoibTEyIDE5LTctNyA3LTciLGtleToiMWw3MjluIn1dLFsicGF0aCIse2Q6Ik0xOSAxMkg1IixrZXk6IngzeDB6bCJ9XV0pOy8qKgogKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDYyLjAgLSBJU0MKICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuCiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi9jb25zdCBydD1vZSgiQXJyb3dSaWdodCIsW1sicGF0aCIse2Q6Ik01IDEyaDE0IixrZXk6IjFheXMwaCJ9XSxbInBhdGgiLHtkOiJtMTIgNSA3IDctNyA3IixrZXk6InhxdXo0YyJ9XV0pOy8qKgogKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDYyLjAgLSBJU0MKICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuCiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi9jb25zdCBlaT1vZSgiQmVkRG91YmxlIixbWyJwYXRoIix7ZDoiTTIgMjB2LThhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjgiLGtleToiMWs3OHI0In1dLFsicGF0aCIse2Q6Ik00IDEwVjZhMiAyIDAgMCAxIDItMmgxMmEyIDIgMCAwIDEgMiAydjQiLGtleToiZmIzdGwyIn1dLFsicGF0aCIse2Q6Ik0xMiA0djYiLGtleToiMWRjZ3EyIn1dLFsicGF0aCIse2Q6Ik0yIDE4aDIwIixrZXk6ImFqcW55ZSJ9XV0pOy8qKgogKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDYyLjAgLSBJU0MKICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuCiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi9jb25zdCBvdj1vZSgiQnVnIixbWyJwYXRoIix7ZDoibTggMiAxLjg4IDEuODgiLGtleToiZm1udDR0In1dLFsicGF0aCIse2Q6Ik0xNC4xMiAzLjg4IDE2IDIiLGtleToicW9sMzNyIn1dLFsicGF0aCIse2Q6Ik05IDcuMTN2LTFhMy4wMDMgMy4wMDMgMCAxIDEgNiAwdjEiLGtleToiZDd5N3ByIn1dLFsicGF0aCIse2Q6Ik0xMiAyMGMtMy4zIDAtNi0yLjctNi02di0zYTQgNCAwIDAgMSA0LTRoNGE0IDQgMCAwIDEgNCA0djNjMCAzLjMtMi43IDYtNiA2IixrZXk6InhzMWN3NyJ9XSxbInBhdGgiLHtkOiJNMTIgMjB2LTkiLGtleToiMXFpc2wwIn1dLFsicGF0aCIse2Q6Ik02LjUzIDlDNC42IDguOCAzIDcuMSAzIDUiLGtleToiMzJ6endzIn1dLFsicGF0aCIse2Q6Ik02IDEzSDIiLGtleToiODJqN2NwIn1dLFsicGF0aCIse2Q6Ik0zIDIxYzAtMi4xIDEuNy0zLjkgMy44LTQiLGtleToiNHAwZWtwIn1dLFsicGF0aCIse2Q6Ik0yMC45NyA1YzAgMi4xLTEuNiAzLjgtMy41IDQiLGtleToiMThnYjIzIn1dLFsicGF0aCIse2Q6Ik0yMiAxM2gtNCIsa2V5OiIxamw4MGYifV0sWyJwYXRoIix7ZDoiTTE3LjIgMTdjMi4xLjEgMy44IDEuOSAzLjggNCIsa2V5OiJrM2Z3eXcifV1dKTsvKioKICogQGxpY2Vuc2UgbHVjaWRlLXJlYWN0IHYwLjQ2Mi4wIC0gSVNDCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIElTQyBsaWNlbnNlLgogKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICovY29uc3QgRnI9b2UoIkNoZWNrIixbWyJwYXRoIix7ZDoiTTIwIDYgOSAxN2wtNS01IixrZXk6IjFnbWYyYyJ9XV0pOy8qKgogKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDYyLjAgLSBJU0MKICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuCiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi9jb25zdCBhdj1vZSgiQ2hldnJvbkRvd24iLFtbInBhdGgiLHtkOiJtNiA5IDYgNiA2LTYiLGtleToicXJ1bnNsIn1dXSk7LyoqCiAqIEBsaWNlbnNlIGx1Y2lkZS1yZWFjdCB2MC40NjIuMCAtIElTQwogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBJU0MgbGljZW5zZS4KICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqL2NvbnN0IFhsPW9lKCJDaGV2cm9uTGVmdCIsW1sicGF0aCIse2Q6Im0xNSAxOC02LTYgNi02IixrZXk6IjF3bmZnMyJ9XV0pOy8qKgogKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDYyLjAgLSBJU0MKICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuCiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi9jb25zdCB3Zj1vZSgiQ2lyY2xlQ2hlY2tCaWciLFtbInBhdGgiLHtkOiJNMjEuODAxIDEwQTEwIDEwIDAgMSAxIDE3IDMuMzM1IixrZXk6InlwczNjdCJ9XSxbInBhdGgiLHtkOiJtOSAxMSAzIDNMMjIgNCIsa2V5OiIxcGZsemwifV1dKTsvKioKICogQGxpY2Vuc2UgbHVjaWRlLXJlYWN0IHYwLjQ2Mi4wIC0gSVNDCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIElTQyBsaWNlbnNlLgogKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICovY29uc3QgTW89b2UoIkNpcmNsZUNoZWNrIixbWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAiLGtleToiMW1nbGF5In1dLFsicGF0aCIse2Q6Im05IDEyIDIgMiA0LTQiLGtleToiZHptbTc0In1dXSk7LyoqCiAqIEBsaWNlbnNlIGx1Y2lkZS1yZWFjdCB2MC40NjIuMCAtIElTQwogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBJU0MgbGljZW5zZS4KICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqL2NvbnN0IE9vPW9lKCJDbG9jayIsW1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIixrZXk6IjFtZ2xheSJ9XSxbInBvbHlsaW5lIix7cG9pbnRzOiIxMiA2IDEyIDEyIDE2IDE0IixrZXk6IjY4ZXNndiJ9XV0pOy8qKgogKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDYyLjAgLSBJU0MKICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuCiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi9jb25zdCBsdj1vZSgiRXllIixbWyJwYXRoIix7ZDoiTTIuMDYyIDEyLjM0OGExIDEgMCAwIDEgMC0uNjk2IDEwLjc1IDEwLjc1IDAgMCAxIDE5Ljg3NiAwIDEgMSAwIDAgMSAwIC42OTYgMTAuNzUgMTAuNzUgMCAwIDEtMTkuODc2IDAiLGtleToiMW5jbGMwIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjMiLGtleToiMXY3enJkIn1dXSk7LyoqCiAqIEBsaWNlbnNlIGx1Y2lkZS1yZWFjdCB2MC40NjIuMCAtIElTQwogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBJU0MgbGljZW5zZS4KICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqL2NvbnN0IGN2PW9lKCJGaWxlQ2hlY2siLFtbInBhdGgiLHtkOiJNMTUgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjdaIixrZXk6IjFycWZ6NyJ9XSxbInBhdGgiLHtkOiJNMTQgMnY0YTIgMiAwIDAgMCAyIDJoNCIsa2V5OiJ0bnFybGIifV0sWyJwYXRoIix7ZDoibTkgMTUgMiAyIDQtNCIsa2V5OiIxZ3JwMW4ifV1dKTsvKioKICogQGxpY2Vuc2UgbHVjaWRlLXJlYWN0IHYwLjQ2Mi4wIC0gSVNDCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIElTQyBsaWNlbnNlLgogKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICovY29uc3QgZHY9b2UoIkdsb2JlIixbWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAiLGtleToiMW1nbGF5In1dLFsicGF0aCIse2Q6Ik0xMiAyYTE0LjUgMTQuNSAwIDAgMCAwIDIwIDE0LjUgMTQuNSAwIDAgMCAwLTIwIixrZXk6IjEzbzF6bCJ9XSxbInBhdGgiLHtkOiJNMiAxMmgyMCIsa2V5OiI5aTRwdTQifV1dKTsvKioKICogQGxpY2Vuc2UgbHVjaWRlLXJlYWN0IHYwLjQ2Mi4wIC0gSVNDCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIElTQyBsaWNlbnNlLgogKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICovY29uc3QgQ2Y9b2UoIkhlYWRwaG9uZXMiLFtbInBhdGgiLHtkOiJNMyAxNGgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtN2E5IDkgMCAwIDEgMTggMHY3YTIgMiAwIDAgMS0yIDJoLTFhMiAyIDAgMCAxLTItMnYtM2EyIDIgMCAwIDEgMi0yaDMiLGtleToiMXhob3ppIn1dXSk7LyoqCiAqIEBsaWNlbnNlIGx1Y2lkZS1yZWFjdCB2MC40NjIuMCAtIElTQwogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBJU0MgbGljZW5zZS4KICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqL2NvbnN0IFZyPW9lKCJLZXlSb3VuZCIsW1sicGF0aCIse2Q6Ik0yLjU4NiAxNy40MTRBMiAyIDAgMCAwIDIgMTguODI4VjIxYTEgMSAwIDAgMCAxIDFoM2ExIDEgMCAwIDAgMS0xdi0xYTEgMSAwIDAgMSAxLTFoMWExIDEgMCAwIDAgMS0xdi0xYTEgMSAwIDAgMSAxLTFoLjE3MmEyIDIgMCAwIDAgMS40MTQtLjU4NmwuODE0LS44MTRhNi41IDYuNSAwIDEgMC00LTR6IixrZXk6IjFzNnQ3dCJ9XSxbImNpcmNsZSIse2N4OiIxNi41IixjeToiNy41IixyOiIuNSIsZmlsbDoiY3VycmVudENvbG9yIixrZXk6IncwZWtwZyJ9XV0pOy8qKgogKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDYyLjAgLSBJU0MKICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuCiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi9jb25zdCBCdD1vZSgiTG9hZGVyQ2lyY2xlIixbWyJwYXRoIix7ZDoiTTIxIDEyYTkgOSAwIDEgMS02LjIxOS04LjU2IixrZXk6IjEzemFsZCJ9XV0pOy8qKgogKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDYyLjAgLSBJU0MKICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuCiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi9jb25zdCBxcz1vZSgiTG9jayIsW1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxMSIseDoiMyIseToiMTEiLHJ4OiIyIixyeToiMiIsa2V5OiIxdzRldzEifV0sWyJwYXRoIix7ZDoiTTcgMTFWN2E1IDUgMCAwIDEgMTAgMHY0IixrZXk6ImZ3dm16bSJ9XV0pOy8qKgogKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDYyLjAgLSBJU0MKICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuCiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi9jb25zdCB1dj1vZSgiTWFwUGluIixbWyJwYXRoIix7ZDoiTTIwIDEwYzAgNC45OTMtNS41MzkgMTAuMTkzLTcuMzk5IDExLjc5OWExIDEgMCAwIDEtMS4yMDIgMEM5LjUzOSAyMC4xOTMgNCAxNC45OTMgNCAxMGE4IDggMCAwIDEgMTYgMCIsa2V5OiIxcjBmMHoifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMCIscjoiMyIsa2V5OiJpbHFocjcifV1dKTsvKioKICogQGxpY2Vuc2UgbHVjaWRlLXJlYWN0IHYwLjQ2Mi4wIC0gSVNDCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIElTQyBsaWNlbnNlLgogKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICovY29uc3QgZnY9b2UoIk1lc3NhZ2VTcXVhcmUiLFtbInBhdGgiLHtkOiJNMjEgMTVhMiAyIDAgMCAxLTIgMkg3bC00IDRWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ6IixrZXk6IjFsaWVseiJ9XV0pOy8qKgogKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDYyLjAgLSBJU0MKICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuCiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi9jb25zdCBodj1vZSgiUGVyY2VudCIsW1sibGluZSIse3gxOiIxOSIseDI6IjUiLHkxOiI1Iix5MjoiMTkiLGtleToiMXg5dmxtIn1dLFsiY2lyY2xlIix7Y3g6IjYuNSIsY3k6IjYuNSIscjoiMi41IixrZXk6IjRtaDNoNyJ9XSxbImNpcmNsZSIse2N4OiIxNy41IixjeToiMTcuNSIscjoiMi41IixrZXk6IjFtZHJ6cSJ9XV0pOy8qKgogKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDYyLjAgLSBJU0MKICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuCiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi9jb25zdCBUZj1vZSgiUGxhbmUiLFtbInBhdGgiLHtkOiJNMTcuOCAxOS4yIDE2IDExbDMuNS0zLjVDMjEgNiAyMS41IDQgMjEgM2MtMS0uNS0zIDAtNC41IDEuNUwxMyA4IDQuOCA2LjJjLS41LS4xLS45LjEtMS4xLjVsLS4zLjVjLS4yLjUtLjEgMSAuMyAxLjNMOSAxMmwtMiAzSDRsLTEgMSAzIDIgMiAzIDEtMXYtM2wzLTIgMy41IDUuM2MuMy40LjguNSAxLjMuM2wuNS0uMmMuNC0uMy42LS43LjUtMS4yeiIsa2V5OiIxdjl3dDgifV1dKTsvKioKICogQGxpY2Vuc2UgbHVjaWRlLXJlYWN0IHYwLjQ2Mi4wIC0gSVNDCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIElTQyBsaWNlbnNlLgogKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICovY29uc3QgcHY9b2UoIlNlYXJjaCIsW1siY2lyY2xlIix7Y3g6IjExIixjeToiMTEiLHI6IjgiLGtleToiNGVqOTd1In1dLFsicGF0aCIse2Q6Im0yMSAyMS00LjMtNC4zIixrZXk6IjFxaWUzcSJ9XV0pOy8qKgogKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDYyLjAgLSBJU0MKICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuCiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi9jb25zdCBtdj1vZSgiU2VydmVyIixbWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjgiLHg6IjIiLHk6IjIiLHJ4OiIyIixyeToiMiIsa2V5OiJuZ2t3anEifV0sWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjgiLHg6IjIiLHk6IjE0IixyeDoiMiIscnk6IjIiLGtleToiaWVjcWk5In1dLFsibGluZSIse3gxOiI2Iix4MjoiNi4wMSIseTE6IjYiLHkyOiI2IixrZXk6IjE2emczMiJ9XSxbImxpbmUiLHt4MToiNiIseDI6IjYuMDEiLHkxOiIxOCIseTI6IjE4IixrZXk6Im56dzh5cyJ9XV0pOy8qKgogKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDYyLjAgLSBJU0MKICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuCiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi9jb25zdCBVaT1vZSgiU2hpZWxkQ2hlY2siLFtbInBhdGgiLHtkOiJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiLGtleToib2VsNDF5In1dLFsicGF0aCIse2Q6Im05IDEyIDIgMiA0LTQiLGtleToiZHptbTc0In1dXSk7LyoqCiAqIEBsaWNlbnNlIGx1Y2lkZS1yZWFjdCB2MC40NjIuMCAtIElTQwogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBJU0MgbGljZW5zZS4KICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqL2NvbnN0IE1hPW9lKCJTaGllbGQiLFtbInBhdGgiLHtkOiJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiLGtleToib2VsNDF5In1dXSk7LyoqCiAqIEBsaWNlbnNlIGx1Y2lkZS1yZWFjdCB2MC40NjIuMCAtIElTQwogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBJU0MgbGljZW5zZS4KICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqL2NvbnN0IEtzPW9lKCJTcGFya2xlcyIsW1sicGF0aCIse2Q6Ik05LjkzNyAxNS41QTIgMiAwIDAgMCA4LjUgMTQuMDYzbC02LjEzNS0xLjU4MmEuNS41IDAgMCAxIDAtLjk2Mkw4LjUgOS45MzZBMiAyIDAgMCAwIDkuOTM3IDguNWwxLjU4Mi02LjEzNWEuNS41IDAgMCAxIC45NjMgMEwxNC4wNjMgOC41QTIgMiAwIDAgMCAxNS41IDkuOTM3bDYuMTM1IDEuNTgxYS41LjUgMCAwIDEgMCAuOTY0TDE1LjUgMTQuMDYzYTIgMiAwIDAgMC0xLjQzNyAxLjQzN2wtMS41ODIgNi4xMzVhLjUuNSAwIDAgMS0uOTYzIDB6IixrZXk6IjRwajJ5eCJ9XSxbInBhdGgiLHtkOiJNMjAgM3Y0IixrZXk6IjFvbGxpMSJ9XSxbInBhdGgiLHtkOiJNMjIgNWgtNCIsa2V5OiIxZ3ZxYXUifV0sWyJwYXRoIix7ZDoiTTQgMTd2MiIsa2V5OiJ2dW1naHQifV0sWyJwYXRoIix7ZDoiTTUgMThIMyIsa2V5OiJ6Y2hwaHMifV1dKTsvKioKICogQGxpY2Vuc2UgbHVjaWRlLXJlYWN0IHYwLjQ2Mi4wIC0gSVNDCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIElTQyBsaWNlbnNlLgogKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICovY29uc3QgZ3Y9b2UoIlRyaWFuZ2xlQWxlcnQiLFtbInBhdGgiLHtkOiJtMjEuNzMgMTgtOC0xNGEyIDIgMCAwIDAtMy40OCAwbC04IDE0QTIgMiAwIDAgMCA0IDIxaDE2YTIgMiAwIDAgMCAxLjczLTMiLGtleToid21vZW5xIn1dLFsicGF0aCIse2Q6Ik0xMiA5djQiLGtleToianV6cHU3In1dLFsicGF0aCIse2Q6Ik0xMiAxN2guMDEiLGtleToicDMycDA1In1dXSk7LyoqCiAqIEBsaWNlbnNlIGx1Y2lkZS1yZWFjdCB2MC40NjIuMCAtIElTQwogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBJU0MgbGljZW5zZS4KICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqL2NvbnN0IFhuPW9lKCJXYWxsZXQiLFtbInBhdGgiLHtkOiJNMTkgN1Y0YTEgMSAwIDAgMC0xLTFINWEyIDIgMCAwIDAgMCA0aDE1YTEgMSAwIDAgMSAxIDF2NGgtM2EyIDIgMCAwIDAgMCA0aDNhMSAxIDAgMCAwIDEtMXYtMmExIDEgMCAwIDAtMS0xIixrZXk6IjE4ZXRiNiJ9XSxbInBhdGgiLHtkOiJNMyA1djE0YTIgMiAwIDAgMCAyIDJoMTVhMSAxIDAgMCAwIDEtMXYtNCIsa2V5OiJ4b2MwcTQifV1dKTsvKioKICogQGxpY2Vuc2UgbHVjaWRlLXJlYWN0IHYwLjQ2Mi4wIC0gSVNDCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIElTQyBsaWNlbnNlLgogKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICovY29uc3QgeXY9b2UoIldpZmkiLFtbInBhdGgiLHtkOiJNMTIgMjBoLjAxIixrZXk6Inpla2VpOSJ9XSxbInBhdGgiLHtkOiJNMiA4LjgyYTE1IDE1IDAgMCAxIDIwIDAiLGtleToiZG5wcjJ6In1dLFsicGF0aCIse2Q6Ik01IDEyLjg1OWExMCAxMCAwIDAgMSAxNCAwIixrZXk6IjF4MWU2YyJ9XSxbInBhdGgiLHtkOiJNOC41IDE2LjQyOWE1IDUgMCAwIDEgNyAwIixrZXk6IjFieWNmZiJ9XV0pOy8qKgogKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDYyLjAgLSBJU0MKICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuCiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi9jb25zdCB0aT1vZSgiWCIsW1sicGF0aCIse2Q6Ik0xOCA2IDYgMTgiLGtleToiMWJsNWY4In1dLFsicGF0aCIse2Q6Im02IDYgMTIgMTIiLGtleToiZDhiazZ2In1dXSksT2E9Ii0iLHZ2PWU9Pntjb25zdCB0PWJ2KGUpLHtjb25mbGljdGluZ0NsYXNzR3JvdXBzOm4sY29uZmxpY3RpbmdDbGFzc0dyb3VwTW9kaWZpZXJzOnN9PWU7cmV0dXJue2dldENsYXNzR3JvdXBJZDpvPT57Y29uc3QgbD1vLnNwbGl0KE9hKTtyZXR1cm4gbFswXT09PSIiJiZsLmxlbmd0aCE9PTEmJmwuc2hpZnQoKSxTZihsLHQpfHx4dihvKX0sZ2V0Q29uZmxpY3RpbmdDbGFzc0dyb3VwSWRzOihvLGwpPT57Y29uc3QgZD1uW29dfHxbXTtyZXR1cm4gbCYmc1tvXT9bLi4uZCwuLi5zW29dXTpkfX19LFNmPShlLHQpPT57aWYoZS5sZW5ndGg9PT0wKXJldHVybiB0LmNsYXNzR3JvdXBJZDtjb25zdCBuPWVbMF0scz10Lm5leHRQYXJ0LmdldChuKSxyPXM/U2YoZS5zbGljZSgxKSxzKTp2b2lkIDA7aWYocilyZXR1cm4gcjtpZih0LnZhbGlkYXRvcnMubGVuZ3RoPT09MClyZXR1cm47Y29uc3QgaT1lLmpvaW4oT2EpO3JldHVybiB0LnZhbGlkYXRvcnMuZmluZCgoe3ZhbGlkYXRvcjpvfSk9Pm8oaSkpPy5jbGFzc0dyb3VwSWR9LFFsPS9eXFsoLispXF0kLyx4dj1lPT57aWYoUWwudGVzdChlKSl7Y29uc3QgdD1RbC5leGVjKGUpWzFdLG49dD8uc3Vic3RyaW5nKDAsdC5pbmRleE9mKCI6IikpO2lmKG4pcmV0dXJuImFyYml0cmFyeS4uIitufX0sYnY9ZT0+e2NvbnN0e3RoZW1lOnQscHJlZml4Om59PWUscz17bmV4dFBhcnQ6bmV3IE1hcCx2YWxpZGF0b3JzOltdfTtyZXR1cm4gQ3YoT2JqZWN0LmVudHJpZXMoZS5jbGFzc0dyb3VwcyksbikuZm9yRWFjaCgoW2ksb10pPT57SW8obyxzLGksdCl9KSxzfSxJbz0oZSx0LG4scyk9PntlLmZvckVhY2gocj0+e2lmKHR5cGVvZiByPT0ic3RyaW5nIil7Y29uc3QgaT1yPT09IiI/dDpKbCh0LHIpO2kuY2xhc3NHcm91cElkPW47cmV0dXJufWlmKHR5cGVvZiByPT0iZnVuY3Rpb24iKXtpZih3dihyKSl7SW8ocihzKSx0LG4scyk7cmV0dXJufXQudmFsaWRhdG9ycy5wdXNoKHt2YWxpZGF0b3I6cixjbGFzc0dyb3VwSWQ6bn0pO3JldHVybn1PYmplY3QuZW50cmllcyhyKS5mb3JFYWNoKChbaSxvXSk9PntJbyhvLEpsKHQsaSksbixzKX0pfSl9LEpsPShlLHQpPT57bGV0IG49ZTtyZXR1cm4gdC5zcGxpdChPYSkuZm9yRWFjaChzPT57bi5uZXh0UGFydC5oYXMocyl8fG4ubmV4dFBhcnQuc2V0KHMse25leHRQYXJ0Om5ldyBNYXAsdmFsaWRhdG9yczpbXX0pLG49bi5uZXh0UGFydC5nZXQocyl9KSxufSx3dj1lPT5lLmlzVGhlbWVHZXR0ZXIsQ3Y9KGUsdCk9PnQ/ZS5tYXAoKFtuLHNdKT0+e2NvbnN0IHI9cy5tYXAoaT0+dHlwZW9mIGk9PSJzdHJpbmciP3QraTp0eXBlb2YgaT09Im9iamVjdCI/T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGkpLm1hcCgoW28sbF0pPT5bdCtvLGxdKSk6aSk7cmV0dXJuW24scl19KTplLFR2PWU9PntpZihlPDEpcmV0dXJue2dldDooKT0+e30sc2V0OigpPT57fX07bGV0IHQ9MCxuPW5ldyBNYXAscz1uZXcgTWFwO2NvbnN0IHI9KGksbyk9PntuLnNldChpLG8pLHQrKyx0PmUmJih0PTAscz1uLG49bmV3IE1hcCl9O3JldHVybntnZXQoaSl7bGV0IG89bi5nZXQoaSk7aWYobyE9PXZvaWQgMClyZXR1cm4gbztpZigobz1zLmdldChpKSkhPT12b2lkIDApcmV0dXJuIHIoaSxvKSxvfSxzZXQoaSxvKXtuLmhhcyhpKT9uLnNldChpLG8pOnIoaSxvKX19fSxQZj0iISIsU3Y9ZT0+e2NvbnN0e3NlcGFyYXRvcjp0LGV4cGVyaW1lbnRhbFBhcnNlQ2xhc3NOYW1lOm59PWUscz10Lmxlbmd0aD09PTEscj10WzBdLGk9dC5sZW5ndGgsbz1sPT57Y29uc3QgZD1bXTtsZXQgYz0wLHU9MCxmO2ZvcihsZXQgdj0wO3Y8bC5sZW5ndGg7disrKXtsZXQgeD1sW3ZdO2lmKGM9PT0wKXtpZih4PT09ciYmKHN8fGwuc2xpY2Uodix2K2kpPT09dCkpe2QucHVzaChsLnNsaWNlKHUsdikpLHU9ditpO2NvbnRpbnVlfWlmKHg9PT0iLyIpe2Y9djtjb250aW51ZX19eD09PSJbIj9jKys6eD09PSJdIiYmYy0tfWNvbnN0IGg9ZC5sZW5ndGg9PT0wP2w6bC5zdWJzdHJpbmcodSkscD1oLnN0YXJ0c1dpdGgoUGYpLGc9cD9oLnN1YnN0cmluZygxKTpoLHk9ZiYmZj51P2YtdTp2b2lkIDA7cmV0dXJue21vZGlmaWVyczpkLGhhc0ltcG9ydGFudE1vZGlmaWVyOnAsYmFzZUNsYXNzTmFtZTpnLG1heWJlUG9zdGZpeE1vZGlmaWVyUG9zaXRpb246eX19O3JldHVybiBuP2w9Pm4oe2NsYXNzTmFtZTpsLHBhcnNlQ2xhc3NOYW1lOm99KTpvfSxQdj1lPT57aWYoZS5sZW5ndGg8PTEpcmV0dXJuIGU7Y29uc3QgdD1bXTtsZXQgbj1bXTtyZXR1cm4gZS5mb3JFYWNoKHM9PntzWzBdPT09IlsiPyh0LnB1c2goLi4ubi5zb3J0KCkscyksbj1bXSk6bi5wdXNoKHMpfSksdC5wdXNoKC4uLm4uc29ydCgpKSx0fSxqdj1lPT4oe2NhY2hlOlR2KGUuY2FjaGVTaXplKSxwYXJzZUNsYXNzTmFtZTpTdihlKSwuLi52dihlKX0pLEV2PS9ccysvLEF2PShlLHQpPT57Y29uc3R7cGFyc2VDbGFzc05hbWU6bixnZXRDbGFzc0dyb3VwSWQ6cyxnZXRDb25mbGljdGluZ0NsYXNzR3JvdXBJZHM6cn09dCxpPVtdLG89ZS50cmltKCkuc3BsaXQoRXYpO2xldCBsPSIiO2ZvcihsZXQgZD1vLmxlbmd0aC0xO2Q+PTA7ZC09MSl7Y29uc3QgYz1vW2RdLHttb2RpZmllcnM6dSxoYXNJbXBvcnRhbnRNb2RpZmllcjpmLGJhc2VDbGFzc05hbWU6aCxtYXliZVBvc3RmaXhNb2RpZmllclBvc2l0aW9uOnB9PW4oYyk7bGV0IGc9ISFwLHk9cyhnP2guc3Vic3RyaW5nKDAscCk6aCk7aWYoIXkpe2lmKCFnKXtsPWMrKGwubGVuZ3RoPjA/IiAiK2w6bCk7Y29udGludWV9aWYoeT1zKGgpLCF5KXtsPWMrKGwubGVuZ3RoPjA/IiAiK2w6bCk7Y29udGludWV9Zz0hMX1jb25zdCB2PVB2KHUpLmpvaW4oIjoiKSx4PWY/ditQZjp2LHc9eCt5O2lmKGkuaW5jbHVkZXModykpY29udGludWU7aS5wdXNoKHcpO2NvbnN0IGI9cih5LGcpO2ZvcihsZXQgQz0wO0M8Yi5sZW5ndGg7KytDKXtjb25zdCBTPWJbQ107aS5wdXNoKHgrUyl9bD1jKyhsLmxlbmd0aD4wPyIgIitsOmwpfXJldHVybiBsfTtmdW5jdGlvbiBrdigpe2xldCBlPTAsdCxuLHM9IiI7Zm9yKDtlPGFyZ3VtZW50cy5sZW5ndGg7KSh0PWFyZ3VtZW50c1tlKytdKSYmKG49amYodCkpJiYocyYmKHMrPSIgIikscys9bik7cmV0dXJuIHN9Y29uc3QgamY9ZT0+e2lmKHR5cGVvZiBlPT0ic3RyaW5nIilyZXR1cm4gZTtsZXQgdCxuPSIiO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cysrKWVbc10mJih0PWpmKGVbc10pKSYmKG4mJihuKz0iICIpLG4rPXQpO3JldHVybiBufTtmdW5jdGlvbiBOdihlLC4uLnQpe2xldCBuLHMscixpPW87ZnVuY3Rpb24gbyhkKXtjb25zdCBjPXQucmVkdWNlKCh1LGYpPT5mKHUpLGUoKSk7cmV0dXJuIG49anYoYykscz1uLmNhY2hlLmdldCxyPW4uY2FjaGUuc2V0LGk9bCxsKGQpfWZ1bmN0aW9uIGwoZCl7Y29uc3QgYz1zKGQpO2lmKGMpcmV0dXJuIGM7Y29uc3QgdT1BdihkLG4pO3JldHVybiByKGQsdSksdX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaShrdi5hcHBseShudWxsLGFyZ3VtZW50cykpfX1jb25zdCBtZT1lPT57Y29uc3QgdD1uPT5uW2VdfHxbXTtyZXR1cm4gdC5pc1RoZW1lR2V0dGVyPSEwLHR9LEVmPS9eXFsoPzooW2Etei1dKyk6KT8oLispXF0kL2ksUnY9L15cZCtcL1xkKyQvLER2PW5ldyBTZXQoWyJweCIsImZ1bGwiLCJzY3JlZW4iXSksTXY9L14oXGQrKFwuXGQrKT8pPyh4c3xzbXxtZHxsZ3x4bCkkLyxPdj0vXGQrKCV8cHh8cj9lbXxbc2RsXT92KFtod2liXXxtaW58bWF4KXxwdHxwY3xpbnxjbXxtbXxjYXB8Y2h8ZXh8cj9saHxjcSh3fGh8aXxifG1pbnxtYXgpKXxcYihjYWxjfG1pbnxtYXh8Y2xhbXApXCguK1wpfF4wJC8sSXY9L14ocmdiYT98aHNsYT98aHdifChvayk/KGxhYnxsY2gpfGNvbG9yLW1peClcKC4rXCkkLyxMdj0vXihpbnNldF8pPy0/KChcZCspP1wuPyhcZCspW2Etel0rfDApXy0/KChcZCspP1wuPyhcZCspW2Etel0rfDApLyxGdj0vXih1cmx8aW1hZ2V8aW1hZ2Utc2V0fGNyb3NzLWZhZGV8ZWxlbWVudHwocmVwZWF0aW5nLSk/KGxpbmVhcnxyYWRpYWx8Y29uaWMpLWdyYWRpZW50KVwoLitcKSQvLEZ0PWU9PnNzKGUpfHxEdi5oYXMoZSl8fFJ2LnRlc3QoZSksZW49ZT0+YnMoZSwibGVuZ3RoIixIdiksc3M9ZT0+ISFlJiYhTnVtYmVyLmlzTmFOKE51bWJlcihlKSksJGk9ZT0+YnMoZSwibnVtYmVyIixzcyksa3M9ZT0+ISFlJiZOdW1iZXIuaXNJbnRlZ2VyKE51bWJlcihlKSksVnY9ZT0+ZS5lbmRzV2l0aCgiJSIpJiZzcyhlLnNsaWNlKDAsLTEpKSxYPWU9PkVmLnRlc3QoZSksdG49ZT0+TXYudGVzdChlKSxfdj1uZXcgU2V0KFsibGVuZ3RoIiwic2l6ZSIsInBlcmNlbnRhZ2UiXSksQnY9ZT0+YnMoZSxfdixBZiksV3Y9ZT0+YnMoZSwicG9zaXRpb24iLEFmKSx6dj1uZXcgU2V0KFsiaW1hZ2UiLCJ1cmwiXSksVXY9ZT0+YnMoZSx6dixLdiksJHY9ZT0+YnMoZSwiIixxdiksTnM9KCk9PiEwLGJzPShlLHQsbik9Pntjb25zdCBzPUVmLmV4ZWMoZSk7cmV0dXJuIHM/c1sxXT90eXBlb2YgdD09InN0cmluZyI/c1sxXT09PXQ6dC5oYXMoc1sxXSk6bihzWzJdKTohMX0sSHY9ZT0+T3YudGVzdChlKSYmIUl2LnRlc3QoZSksQWY9KCk9PiExLHF2PWU9Pkx2LnRlc3QoZSksS3Y9ZT0+RnYudGVzdChlKSxHdj0oKT0+e2NvbnN0IGU9bWUoImNvbG9ycyIpLHQ9bWUoInNwYWNpbmciKSxuPW1lKCJibHVyIikscz1tZSgiYnJpZ2h0bmVzcyIpLHI9bWUoImJvcmRlckNvbG9yIiksaT1tZSgiYm9yZGVyUmFkaXVzIiksbz1tZSgiYm9yZGVyU3BhY2luZyIpLGw9bWUoImJvcmRlcldpZHRoIiksZD1tZSgiY29udHJhc3QiKSxjPW1lKCJncmF5c2NhbGUiKSx1PW1lKCJodWVSb3RhdGUiKSxmPW1lKCJpbnZlcnQiKSxoPW1lKCJnYXAiKSxwPW1lKCJncmFkaWVudENvbG9yU3RvcHMiKSxnPW1lKCJncmFkaWVudENvbG9yU3RvcFBvc2l0aW9ucyIpLHk9bWUoImluc2V0Iiksdj1tZSgibWFyZ2luIikseD1tZSgib3BhY2l0eSIpLHc9bWUoInBhZGRpbmciKSxiPW1lKCJzYXR1cmF0ZSIpLEM9bWUoInNjYWxlIiksUz1tZSgic2VwaWEiKSxQPW1lKCJza2V3IiksRT1tZSgic3BhY2UiKSxrPW1lKCJ0cmFuc2xhdGUiKSxSPSgpPT5bImF1dG8iLCJjb250YWluIiwibm9uZSJdLEE9KCk9PlsiYXV0byIsImhpZGRlbiIsImNsaXAiLCJ2aXNpYmxlIiwic2Nyb2xsIl0sRD0oKT0+WyJhdXRvIixYLHRdLE49KCk9PltYLHRdLEY9KCk9PlsiIixGdCxlbl0sXz0oKT0+WyJhdXRvIixzcyxYXSxIPSgpPT5bImJvdHRvbSIsImNlbnRlciIsImxlZnQiLCJsZWZ0LWJvdHRvbSIsImxlZnQtdG9wIiwicmlnaHQiLCJyaWdodC1ib3R0b20iLCJyaWdodC10b3AiLCJ0b3AiXSxNPSgpPT5bInNvbGlkIiwiZGFzaGVkIiwiZG90dGVkIiwiZG91YmxlIiwibm9uZSJdLHo9KCk9Plsibm9ybWFsIiwibXVsdGlwbHkiLCJzY3JlZW4iLCJvdmVybGF5IiwiZGFya2VuIiwibGlnaHRlbiIsImNvbG9yLWRvZGdlIiwiY29sb3ItYnVybiIsImhhcmQtbGlnaHQiLCJzb2Z0LWxpZ2h0IiwiZGlmZmVyZW5jZSIsImV4Y2x1c2lvbiIsImh1ZSIsInNhdHVyYXRpb24iLCJjb2xvciIsImx1bWlub3NpdHkiXSxJPSgpPT5bInN0YXJ0IiwiZW5kIiwiY2VudGVyIiwiYmV0d2VlbiIsImFyb3VuZCIsImV2ZW5seSIsInN0cmV0Y2giXSxPPSgpPT5bIiIsIjAiLFhdLEc9KCk9PlsiYXV0byIsImF2b2lkIiwiYWxsIiwiYXZvaWQtcGFnZSIsInBhZ2UiLCJsZWZ0IiwicmlnaHQiLCJjb2x1bW4iXSxRPSgpPT5bc3MsWF07cmV0dXJue2NhY2hlU2l6ZTo1MDAsc2VwYXJhdG9yOiI6Iix0aGVtZTp7Y29sb3JzOltOc10sc3BhY2luZzpbRnQsZW5dLGJsdXI6WyJub25lIiwiIix0bixYXSxicmlnaHRuZXNzOlEoKSxib3JkZXJDb2xvcjpbZV0sYm9yZGVyUmFkaXVzOlsibm9uZSIsIiIsImZ1bGwiLHRuLFhdLGJvcmRlclNwYWNpbmc6TigpLGJvcmRlcldpZHRoOkYoKSxjb250cmFzdDpRKCksZ3JheXNjYWxlOk8oKSxodWVSb3RhdGU6USgpLGludmVydDpPKCksZ2FwOk4oKSxncmFkaWVudENvbG9yU3RvcHM6W2VdLGdyYWRpZW50Q29sb3JTdG9wUG9zaXRpb25zOltWdixlbl0saW5zZXQ6RCgpLG1hcmdpbjpEKCksb3BhY2l0eTpRKCkscGFkZGluZzpOKCksc2F0dXJhdGU6USgpLHNjYWxlOlEoKSxzZXBpYTpPKCksc2tldzpRKCksc3BhY2U6TigpLHRyYW5zbGF0ZTpOKCl9LGNsYXNzR3JvdXBzOnthc3BlY3Q6W3thc3BlY3Q6WyJhdXRvIiwic3F1YXJlIiwidmlkZW8iLFhdfV0sY29udGFpbmVyOlsiY29udGFpbmVyIl0sY29sdW1uczpbe2NvbHVtbnM6W3RuXX1dLCJicmVhay1hZnRlciI6W3siYnJlYWstYWZ0ZXIiOkcoKX1dLCJicmVhay1iZWZvcmUiOlt7ImJyZWFrLWJlZm9yZSI6RygpfV0sImJyZWFrLWluc2lkZSI6W3siYnJlYWstaW5zaWRlIjpbImF1dG8iLCJhdm9pZCIsImF2b2lkLXBhZ2UiLCJhdm9pZC1jb2x1bW4iXX1dLCJib3gtZGVjb3JhdGlvbiI6W3siYm94LWRlY29yYXRpb24iOlsic2xpY2UiLCJjbG9uZSJdfV0sYm94Olt7Ym94OlsiYm9yZGVyIiwiY29udGVudCJdfV0sZGlzcGxheTpbImJsb2NrIiwiaW5saW5lLWJsb2NrIiwiaW5saW5lIiwiZmxleCIsImlubGluZS1mbGV4IiwidGFibGUiLCJpbmxpbmUtdGFibGUiLCJ0YWJsZS1jYXB0aW9uIiwidGFibGUtY2VsbCIsInRhYmxlLWNvbHVtbiIsInRhYmxlLWNvbHVtbi1ncm91cCIsInRhYmxlLWZvb3Rlci1ncm91cCIsInRhYmxlLWhlYWRlci1ncm91cCIsInRhYmxlLXJvdy1ncm91cCIsInRhYmxlLXJvdyIsImZsb3ctcm9vdCIsImdyaWQiLCJpbmxpbmUtZ3JpZCIsImNvbnRlbnRzIiwibGlzdC1pdGVtIiwiaGlkZGVuIl0sZmxvYXQ6W3tmbG9hdDpbInJpZ2h0IiwibGVmdCIsIm5vbmUiLCJzdGFydCIsImVuZCJdfV0sY2xlYXI6W3tjbGVhcjpbImxlZnQiLCJyaWdodCIsImJvdGgiLCJub25lIiwic3RhcnQiLCJlbmQiXX1dLGlzb2xhdGlvbjpbImlzb2xhdGUiLCJpc29sYXRpb24tYXV0byJdLCJvYmplY3QtZml0Ijpbe29iamVjdDpbImNvbnRhaW4iLCJjb3ZlciIsImZpbGwiLCJub25lIiwic2NhbGUtZG93biJdfV0sIm9iamVjdC1wb3NpdGlvbiI6W3tvYmplY3Q6Wy4uLkgoKSxYXX1dLG92ZXJmbG93Olt7b3ZlcmZsb3c6QSgpfV0sIm92ZXJmbG93LXgiOlt7Im92ZXJmbG93LXgiOkEoKX1dLCJvdmVyZmxvdy15IjpbeyJvdmVyZmxvdy15IjpBKCl9XSxvdmVyc2Nyb2xsOlt7b3ZlcnNjcm9sbDpSKCl9XSwib3ZlcnNjcm9sbC14IjpbeyJvdmVyc2Nyb2xsLXgiOlIoKX1dLCJvdmVyc2Nyb2xsLXkiOlt7Im92ZXJzY3JvbGwteSI6UigpfV0scG9zaXRpb246WyJzdGF0aWMiLCJmaXhlZCIsImFic29sdXRlIiwicmVsYXRpdmUiLCJzdGlja3kiXSxpbnNldDpbe2luc2V0Olt5XX1dLCJpbnNldC14IjpbeyJpbnNldC14IjpbeV19XSwiaW5zZXQteSI6W3siaW5zZXQteSI6W3ldfV0sc3RhcnQ6W3tzdGFydDpbeV19XSxlbmQ6W3tlbmQ6W3ldfV0sdG9wOlt7dG9wOlt5XX1dLHJpZ2h0Olt7cmlnaHQ6W3ldfV0sYm90dG9tOlt7Ym90dG9tOlt5XX1dLGxlZnQ6W3tsZWZ0Olt5XX1dLHZpc2liaWxpdHk6WyJ2aXNpYmxlIiwiaW52aXNpYmxlIiwiY29sbGFwc2UiXSx6Olt7ejpbImF1dG8iLGtzLFhdfV0sYmFzaXM6W3tiYXNpczpEKCl9XSwiZmxleC1kaXJlY3Rpb24iOlt7ZmxleDpbInJvdyIsInJvdy1yZXZlcnNlIiwiY29sIiwiY29sLXJldmVyc2UiXX1dLCJmbGV4LXdyYXAiOlt7ZmxleDpbIndyYXAiLCJ3cmFwLXJldmVyc2UiLCJub3dyYXAiXX1dLGZsZXg6W3tmbGV4OlsiMSIsImF1dG8iLCJpbml0aWFsIiwibm9uZSIsWF19XSxncm93Olt7Z3JvdzpPKCl9XSxzaHJpbms6W3tzaHJpbms6TygpfV0sb3JkZXI6W3tvcmRlcjpbImZpcnN0IiwibGFzdCIsIm5vbmUiLGtzLFhdfV0sImdyaWQtY29scyI6W3siZ3JpZC1jb2xzIjpbTnNdfV0sImNvbC1zdGFydC1lbmQiOlt7Y29sOlsiYXV0byIse3NwYW46WyJmdWxsIixrcyxYXX0sWF19XSwiY29sLXN0YXJ0IjpbeyJjb2wtc3RhcnQiOl8oKX1dLCJjb2wtZW5kIjpbeyJjb2wtZW5kIjpfKCl9XSwiZ3JpZC1yb3dzIjpbeyJncmlkLXJvd3MiOltOc119XSwicm93LXN0YXJ0LWVuZCI6W3tyb3c6WyJhdXRvIix7c3Bhbjpba3MsWF19LFhdfV0sInJvdy1zdGFydCI6W3sicm93LXN0YXJ0IjpfKCl9XSwicm93LWVuZCI6W3sicm93LWVuZCI6XygpfV0sImdyaWQtZmxvdyI6W3siZ3JpZC1mbG93IjpbInJvdyIsImNvbCIsImRlbnNlIiwicm93LWRlbnNlIiwiY29sLWRlbnNlIl19XSwiYXV0by1jb2xzIjpbeyJhdXRvLWNvbHMiOlsiYXV0byIsIm1pbiIsIm1heCIsImZyIixYXX1dLCJhdXRvLXJvd3MiOlt7ImF1dG8tcm93cyI6WyJhdXRvIiwibWluIiwibWF4IiwiZnIiLFhdfV0sZ2FwOlt7Z2FwOltoXX1dLCJnYXAteCI6W3siZ2FwLXgiOltoXX1dLCJnYXAteSI6W3siZ2FwLXkiOltoXX1dLCJqdXN0aWZ5LWNvbnRlbnQiOlt7anVzdGlmeTpbIm5vcm1hbCIsLi4uSSgpXX1dLCJqdXN0aWZ5LWl0ZW1zIjpbeyJqdXN0aWZ5LWl0ZW1zIjpbInN0YXJ0IiwiZW5kIiwiY2VudGVyIiwic3RyZXRjaCJdfV0sImp1c3RpZnktc2VsZiI6W3sianVzdGlmeS1zZWxmIjpbImF1dG8iLCJzdGFydCIsImVuZCIsImNlbnRlciIsInN0cmV0Y2giXX1dLCJhbGlnbi1jb250ZW50Ijpbe2NvbnRlbnQ6WyJub3JtYWwiLC4uLkkoKSwiYmFzZWxpbmUiXX1dLCJhbGlnbi1pdGVtcyI6W3tpdGVtczpbInN0YXJ0IiwiZW5kIiwiY2VudGVyIiwiYmFzZWxpbmUiLCJzdHJldGNoIl19XSwiYWxpZ24tc2VsZiI6W3tzZWxmOlsiYXV0byIsInN0YXJ0IiwiZW5kIiwiY2VudGVyIiwic3RyZXRjaCIsImJhc2VsaW5lIl19XSwicGxhY2UtY29udGVudCI6W3sicGxhY2UtY29udGVudCI6Wy4uLkkoKSwiYmFzZWxpbmUiXX1dLCJwbGFjZS1pdGVtcyI6W3sicGxhY2UtaXRlbXMiOlsic3RhcnQiLCJlbmQiLCJjZW50ZXIiLCJiYXNlbGluZSIsInN0cmV0Y2giXX1dLCJwbGFjZS1zZWxmIjpbeyJwbGFjZS1zZWxmIjpbImF1dG8iLCJzdGFydCIsImVuZCIsImNlbnRlciIsInN0cmV0Y2giXX1dLHA6W3twOlt3XX1dLHB4Olt7cHg6W3ddfV0scHk6W3tweTpbd119XSxwczpbe3BzOlt3XX1dLHBlOlt7cGU6W3ddfV0scHQ6W3twdDpbd119XSxwcjpbe3ByOlt3XX1dLHBiOlt7cGI6W3ddfV0scGw6W3twbDpbd119XSxtOlt7bTpbdl19XSxteDpbe214Olt2XX1dLG15Olt7bXk6W3ZdfV0sbXM6W3ttczpbdl19XSxtZTpbe21lOlt2XX1dLG10Olt7bXQ6W3ZdfV0sbXI6W3ttcjpbdl19XSxtYjpbe21iOlt2XX1dLG1sOlt7bWw6W3ZdfV0sInNwYWNlLXgiOlt7InNwYWNlLXgiOltFXX1dLCJzcGFjZS14LXJldmVyc2UiOlsic3BhY2UteC1yZXZlcnNlIl0sInNwYWNlLXkiOlt7InNwYWNlLXkiOltFXX1dLCJzcGFjZS15LXJldmVyc2UiOlsic3BhY2UteS1yZXZlcnNlIl0sdzpbe3c6WyJhdXRvIiwibWluIiwibWF4IiwiZml0Iiwic3Z3IiwibHZ3IiwiZHZ3IixYLHRdfV0sIm1pbi13IjpbeyJtaW4tdyI6W1gsdCwibWluIiwibWF4IiwiZml0Il19XSwibWF4LXciOlt7Im1heC13IjpbWCx0LCJub25lIiwiZnVsbCIsIm1pbiIsIm1heCIsImZpdCIsInByb3NlIix7c2NyZWVuOlt0bl19LHRuXX1dLGg6W3toOltYLHQsImF1dG8iLCJtaW4iLCJtYXgiLCJmaXQiLCJzdmgiLCJsdmgiLCJkdmgiXX1dLCJtaW4taCI6W3sibWluLWgiOltYLHQsIm1pbiIsIm1heCIsImZpdCIsInN2aCIsImx2aCIsImR2aCJdfV0sIm1heC1oIjpbeyJtYXgtaCI6W1gsdCwibWluIiwibWF4IiwiZml0Iiwic3ZoIiwibHZoIiwiZHZoIl19XSxzaXplOlt7c2l6ZTpbWCx0LCJhdXRvIiwibWluIiwibWF4IiwiZml0Il19XSwiZm9udC1zaXplIjpbe3RleHQ6WyJiYXNlIix0bixlbl19XSwiZm9udC1zbW9vdGhpbmciOlsiYW50aWFsaWFzZWQiLCJzdWJwaXhlbC1hbnRpYWxpYXNlZCJdLCJmb250LXN0eWxlIjpbIml0YWxpYyIsIm5vdC1pdGFsaWMiXSwiZm9udC13ZWlnaHQiOlt7Zm9udDpbInRoaW4iLCJleHRyYWxpZ2h0IiwibGlnaHQiLCJub3JtYWwiLCJtZWRpdW0iLCJzZW1pYm9sZCIsImJvbGQiLCJleHRyYWJvbGQiLCJibGFjayIsJGldfV0sImZvbnQtZmFtaWx5Ijpbe2ZvbnQ6W05zXX1dLCJmdm4tbm9ybWFsIjpbIm5vcm1hbC1udW1zIl0sImZ2bi1vcmRpbmFsIjpbIm9yZGluYWwiXSwiZnZuLXNsYXNoZWQtemVybyI6WyJzbGFzaGVkLXplcm8iXSwiZnZuLWZpZ3VyZSI6WyJsaW5pbmctbnVtcyIsIm9sZHN0eWxlLW51bXMiXSwiZnZuLXNwYWNpbmciOlsicHJvcG9ydGlvbmFsLW51bXMiLCJ0YWJ1bGFyLW51bXMiXSwiZnZuLWZyYWN0aW9uIjpbImRpYWdvbmFsLWZyYWN0aW9ucyIsInN0YWNrZWQtZnJhY3Rpb25zIl0sdHJhY2tpbmc6W3t0cmFja2luZzpbInRpZ2h0ZXIiLCJ0aWdodCIsIm5vcm1hbCIsIndpZGUiLCJ3aWRlciIsIndpZGVzdCIsWF19XSwibGluZS1jbGFtcCI6W3sibGluZS1jbGFtcCI6WyJub25lIixzcywkaV19XSxsZWFkaW5nOlt7bGVhZGluZzpbIm5vbmUiLCJ0aWdodCIsInNudWciLCJub3JtYWwiLCJyZWxheGVkIiwibG9vc2UiLEZ0LFhdfV0sImxpc3QtaW1hZ2UiOlt7Imxpc3QtaW1hZ2UiOlsibm9uZSIsWF19XSwibGlzdC1zdHlsZS10eXBlIjpbe2xpc3Q6WyJub25lIiwiZGlzYyIsImRlY2ltYWwiLFhdfV0sImxpc3Qtc3R5bGUtcG9zaXRpb24iOlt7bGlzdDpbImluc2lkZSIsIm91dHNpZGUiXX1dLCJwbGFjZWhvbGRlci1jb2xvciI6W3twbGFjZWhvbGRlcjpbZV19XSwicGxhY2Vob2xkZXItb3BhY2l0eSI6W3sicGxhY2Vob2xkZXItb3BhY2l0eSI6W3hdfV0sInRleHQtYWxpZ25tZW50Ijpbe3RleHQ6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiLCJqdXN0aWZ5Iiwic3RhcnQiLCJlbmQiXX1dLCJ0ZXh0LWNvbG9yIjpbe3RleHQ6W2VdfV0sInRleHQtb3BhY2l0eSI6W3sidGV4dC1vcGFjaXR5IjpbeF19XSwidGV4dC1kZWNvcmF0aW9uIjpbInVuZGVybGluZSIsIm92ZXJsaW5lIiwibGluZS10aHJvdWdoIiwibm8tdW5kZXJsaW5lIl0sInRleHQtZGVjb3JhdGlvbi1zdHlsZSI6W3tkZWNvcmF0aW9uOlsuLi5NKCksIndhdnkiXX1dLCJ0ZXh0LWRlY29yYXRpb24tdGhpY2tuZXNzIjpbe2RlY29yYXRpb246WyJhdXRvIiwiZnJvbS1mb250IixGdCxlbl19XSwidW5kZXJsaW5lLW9mZnNldCI6W3sidW5kZXJsaW5lLW9mZnNldCI6WyJhdXRvIixGdCxYXX1dLCJ0ZXh0LWRlY29yYXRpb24tY29sb3IiOlt7ZGVjb3JhdGlvbjpbZV19XSwidGV4dC10cmFuc2Zvcm0iOlsidXBwZXJjYXNlIiwibG93ZXJjYXNlIiwiY2FwaXRhbGl6ZSIsIm5vcm1hbC1jYXNlIl0sInRleHQtb3ZlcmZsb3ciOlsidHJ1bmNhdGUiLCJ0ZXh0LWVsbGlwc2lzIiwidGV4dC1jbGlwIl0sInRleHQtd3JhcCI6W3t0ZXh0Olsid3JhcCIsIm5vd3JhcCIsImJhbGFuY2UiLCJwcmV0dHkiXX1dLGluZGVudDpbe2luZGVudDpOKCl9XSwidmVydGljYWwtYWxpZ24iOlt7YWxpZ246WyJiYXNlbGluZSIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSIsInRleHQtdG9wIiwidGV4dC1ib3R0b20iLCJzdWIiLCJzdXBlciIsWF19XSx3aGl0ZXNwYWNlOlt7d2hpdGVzcGFjZTpbIm5vcm1hbCIsIm5vd3JhcCIsInByZSIsInByZS1saW5lIiwicHJlLXdyYXAiLCJicmVhay1zcGFjZXMiXX1dLGJyZWFrOlt7YnJlYWs6WyJub3JtYWwiLCJ3b3JkcyIsImFsbCIsImtlZXAiXX1dLGh5cGhlbnM6W3toeXBoZW5zOlsibm9uZSIsIm1hbnVhbCIsImF1dG8iXX1dLGNvbnRlbnQ6W3tjb250ZW50Olsibm9uZSIsWF19XSwiYmctYXR0YWNobWVudCI6W3tiZzpbImZpeGVkIiwibG9jYWwiLCJzY3JvbGwiXX1dLCJiZy1jbGlwIjpbeyJiZy1jbGlwIjpbImJvcmRlciIsInBhZGRpbmciLCJjb250ZW50IiwidGV4dCJdfV0sImJnLW9wYWNpdHkiOlt7ImJnLW9wYWNpdHkiOlt4XX1dLCJiZy1vcmlnaW4iOlt7ImJnLW9yaWdpbiI6WyJib3JkZXIiLCJwYWRkaW5nIiwiY29udGVudCJdfV0sImJnLXBvc2l0aW9uIjpbe2JnOlsuLi5IKCksV3ZdfV0sImJnLXJlcGVhdCI6W3tiZzpbIm5vLXJlcGVhdCIse3JlcGVhdDpbIiIsIngiLCJ5Iiwicm91bmQiLCJzcGFjZSJdfV19XSwiYmctc2l6ZSI6W3tiZzpbImF1dG8iLCJjb3ZlciIsImNvbnRhaW4iLEJ2XX1dLCJiZy1pbWFnZSI6W3tiZzpbIm5vbmUiLHsiZ3JhZGllbnQtdG8iOlsidCIsInRyIiwiciIsImJyIiwiYiIsImJsIiwibCIsInRsIl19LFV2XX1dLCJiZy1jb2xvciI6W3tiZzpbZV19XSwiZ3JhZGllbnQtZnJvbS1wb3MiOlt7ZnJvbTpbZ119XSwiZ3JhZGllbnQtdmlhLXBvcyI6W3t2aWE6W2ddfV0sImdyYWRpZW50LXRvLXBvcyI6W3t0bzpbZ119XSwiZ3JhZGllbnQtZnJvbSI6W3tmcm9tOltwXX1dLCJncmFkaWVudC12aWEiOlt7dmlhOltwXX1dLCJncmFkaWVudC10byI6W3t0bzpbcF19XSxyb3VuZGVkOlt7cm91bmRlZDpbaV19XSwicm91bmRlZC1zIjpbeyJyb3VuZGVkLXMiOltpXX1dLCJyb3VuZGVkLWUiOlt7InJvdW5kZWQtZSI6W2ldfV0sInJvdW5kZWQtdCI6W3sicm91bmRlZC10IjpbaV19XSwicm91bmRlZC1yIjpbeyJyb3VuZGVkLXIiOltpXX1dLCJyb3VuZGVkLWIiOlt7InJvdW5kZWQtYiI6W2ldfV0sInJvdW5kZWQtbCI6W3sicm91bmRlZC1sIjpbaV19XSwicm91bmRlZC1zcyI6W3sicm91bmRlZC1zcyI6W2ldfV0sInJvdW5kZWQtc2UiOlt7InJvdW5kZWQtc2UiOltpXX1dLCJyb3VuZGVkLWVlIjpbeyJyb3VuZGVkLWVlIjpbaV19XSwicm91bmRlZC1lcyI6W3sicm91bmRlZC1lcyI6W2ldfV0sInJvdW5kZWQtdGwiOlt7InJvdW5kZWQtdGwiOltpXX1dLCJyb3VuZGVkLXRyIjpbeyJyb3VuZGVkLXRyIjpbaV19XSwicm91bmRlZC1iciI6W3sicm91bmRlZC1iciI6W2ldfV0sInJvdW5kZWQtYmwiOlt7InJvdW5kZWQtYmwiOltpXX1dLCJib3JkZXItdyI6W3tib3JkZXI6W2xdfV0sImJvcmRlci13LXgiOlt7ImJvcmRlci14IjpbbF19XSwiYm9yZGVyLXcteSI6W3siYm9yZGVyLXkiOltsXX1dLCJib3JkZXItdy1zIjpbeyJib3JkZXItcyI6W2xdfV0sImJvcmRlci13LWUiOlt7ImJvcmRlci1lIjpbbF19XSwiYm9yZGVyLXctdCI6W3siYm9yZGVyLXQiOltsXX1dLCJib3JkZXItdy1yIjpbeyJib3JkZXItciI6W2xdfV0sImJvcmRlci13LWIiOlt7ImJvcmRlci1iIjpbbF19XSwiYm9yZGVyLXctbCI6W3siYm9yZGVyLWwiOltsXX1dLCJib3JkZXItb3BhY2l0eSI6W3siYm9yZGVyLW9wYWNpdHkiOlt4XX1dLCJib3JkZXItc3R5bGUiOlt7Ym9yZGVyOlsuLi5NKCksImhpZGRlbiJdfV0sImRpdmlkZS14IjpbeyJkaXZpZGUteCI6W2xdfV0sImRpdmlkZS14LXJldmVyc2UiOlsiZGl2aWRlLXgtcmV2ZXJzZSJdLCJkaXZpZGUteSI6W3siZGl2aWRlLXkiOltsXX1dLCJkaXZpZGUteS1yZXZlcnNlIjpbImRpdmlkZS15LXJldmVyc2UiXSwiZGl2aWRlLW9wYWNpdHkiOlt7ImRpdmlkZS1vcGFjaXR5IjpbeF19XSwiZGl2aWRlLXN0eWxlIjpbe2RpdmlkZTpNKCl9XSwiYm9yZGVyLWNvbG9yIjpbe2JvcmRlcjpbcl19XSwiYm9yZGVyLWNvbG9yLXgiOlt7ImJvcmRlci14Ijpbcl19XSwiYm9yZGVyLWNvbG9yLXkiOlt7ImJvcmRlci15Ijpbcl19XSwiYm9yZGVyLWNvbG9yLXMiOlt7ImJvcmRlci1zIjpbcl19XSwiYm9yZGVyLWNvbG9yLWUiOlt7ImJvcmRlci1lIjpbcl19XSwiYm9yZGVyLWNvbG9yLXQiOlt7ImJvcmRlci10Ijpbcl19XSwiYm9yZGVyLWNvbG9yLXIiOlt7ImJvcmRlci1yIjpbcl19XSwiYm9yZGVyLWNvbG9yLWIiOlt7ImJvcmRlci1iIjpbcl19XSwiYm9yZGVyLWNvbG9yLWwiOlt7ImJvcmRlci1sIjpbcl19XSwiZGl2aWRlLWNvbG9yIjpbe2RpdmlkZTpbcl19XSwib3V0bGluZS1zdHlsZSI6W3tvdXRsaW5lOlsiIiwuLi5NKCldfV0sIm91dGxpbmUtb2Zmc2V0IjpbeyJvdXRsaW5lLW9mZnNldCI6W0Z0LFhdfV0sIm91dGxpbmUtdyI6W3tvdXRsaW5lOltGdCxlbl19XSwib3V0bGluZS1jb2xvciI6W3tvdXRsaW5lOltlXX1dLCJyaW5nLXciOlt7cmluZzpGKCl9XSwicmluZy13LWluc2V0IjpbInJpbmctaW5zZXQiXSwicmluZy1jb2xvciI6W3tyaW5nOltlXX1dLCJyaW5nLW9wYWNpdHkiOlt7InJpbmctb3BhY2l0eSI6W3hdfV0sInJpbmctb2Zmc2V0LXciOlt7InJpbmctb2Zmc2V0IjpbRnQsZW5dfV0sInJpbmctb2Zmc2V0LWNvbG9yIjpbeyJyaW5nLW9mZnNldCI6W2VdfV0sc2hhZG93Olt7c2hhZG93OlsiIiwiaW5uZXIiLCJub25lIix0biwkdl19XSwic2hhZG93LWNvbG9yIjpbe3NoYWRvdzpbTnNdfV0sb3BhY2l0eTpbe29wYWNpdHk6W3hdfV0sIm1peC1ibGVuZCI6W3sibWl4LWJsZW5kIjpbLi4ueigpLCJwbHVzLWxpZ2h0ZXIiLCJwbHVzLWRhcmtlciJdfV0sImJnLWJsZW5kIjpbeyJiZy1ibGVuZCI6eigpfV0sZmlsdGVyOlt7ZmlsdGVyOlsiIiwibm9uZSJdfV0sYmx1cjpbe2JsdXI6W25dfV0sYnJpZ2h0bmVzczpbe2JyaWdodG5lc3M6W3NdfV0sY29udHJhc3Q6W3tjb250cmFzdDpbZF19XSwiZHJvcC1zaGFkb3ciOlt7ImRyb3Atc2hhZG93IjpbIiIsIm5vbmUiLHRuLFhdfV0sZ3JheXNjYWxlOlt7Z3JheXNjYWxlOltjXX1dLCJodWUtcm90YXRlIjpbeyJodWUtcm90YXRlIjpbdV19XSxpbnZlcnQ6W3tpbnZlcnQ6W2ZdfV0sc2F0dXJhdGU6W3tzYXR1cmF0ZTpbYl19XSxzZXBpYTpbe3NlcGlhOltTXX1dLCJiYWNrZHJvcC1maWx0ZXIiOlt7ImJhY2tkcm9wLWZpbHRlciI6WyIiLCJub25lIl19XSwiYmFja2Ryb3AtYmx1ciI6W3siYmFja2Ryb3AtYmx1ciI6W25dfV0sImJhY2tkcm9wLWJyaWdodG5lc3MiOlt7ImJhY2tkcm9wLWJyaWdodG5lc3MiOltzXX1dLCJiYWNrZHJvcC1jb250cmFzdCI6W3siYmFja2Ryb3AtY29udHJhc3QiOltkXX1dLCJiYWNrZHJvcC1ncmF5c2NhbGUiOlt7ImJhY2tkcm9wLWdyYXlzY2FsZSI6W2NdfV0sImJhY2tkcm9wLWh1ZS1yb3RhdGUiOlt7ImJhY2tkcm9wLWh1ZS1yb3RhdGUiOlt1XX1dLCJiYWNrZHJvcC1pbnZlcnQiOlt7ImJhY2tkcm9wLWludmVydCI6W2ZdfV0sImJhY2tkcm9wLW9wYWNpdHkiOlt7ImJhY2tkcm9wLW9wYWNpdHkiOlt4XX1dLCJiYWNrZHJvcC1zYXR1cmF0ZSI6W3siYmFja2Ryb3Atc2F0dXJhdGUiOltiXX1dLCJiYWNrZHJvcC1zZXBpYSI6W3siYmFja2Ryb3Atc2VwaWEiOltTXX1dLCJib3JkZXItY29sbGFwc2UiOlt7Ym9yZGVyOlsiY29sbGFwc2UiLCJzZXBhcmF0ZSJdfV0sImJvcmRlci1zcGFjaW5nIjpbeyJib3JkZXItc3BhY2luZyI6W29dfV0sImJvcmRlci1zcGFjaW5nLXgiOlt7ImJvcmRlci1zcGFjaW5nLXgiOltvXX1dLCJib3JkZXItc3BhY2luZy15IjpbeyJib3JkZXItc3BhY2luZy15Ijpbb119XSwidGFibGUtbGF5b3V0Ijpbe3RhYmxlOlsiYXV0byIsImZpeGVkIl19XSxjYXB0aW9uOlt7Y2FwdGlvbjpbInRvcCIsImJvdHRvbSJdfV0sdHJhbnNpdGlvbjpbe3RyYW5zaXRpb246WyJub25lIiwiYWxsIiwiIiwiY29sb3JzIiwib3BhY2l0eSIsInNoYWRvdyIsInRyYW5zZm9ybSIsWF19XSxkdXJhdGlvbjpbe2R1cmF0aW9uOlEoKX1dLGVhc2U6W3tlYXNlOlsibGluZWFyIiwiaW4iLCJvdXQiLCJpbi1vdXQiLFhdfV0sZGVsYXk6W3tkZWxheTpRKCl9XSxhbmltYXRlOlt7YW5pbWF0ZTpbIm5vbmUiLCJzcGluIiwicGluZyIsInB1bHNlIiwiYm91bmNlIixYXX1dLHRyYW5zZm9ybTpbe3RyYW5zZm9ybTpbIiIsImdwdSIsIm5vbmUiXX1dLHNjYWxlOlt7c2NhbGU6W0NdfV0sInNjYWxlLXgiOlt7InNjYWxlLXgiOltDXX1dLCJzY2FsZS15IjpbeyJzY2FsZS15IjpbQ119XSxyb3RhdGU6W3tyb3RhdGU6W2tzLFhdfV0sInRyYW5zbGF0ZS14IjpbeyJ0cmFuc2xhdGUteCI6W2tdfV0sInRyYW5zbGF0ZS15IjpbeyJ0cmFuc2xhdGUteSI6W2tdfV0sInNrZXcteCI6W3sic2tldy14IjpbUF19XSwic2tldy15IjpbeyJza2V3LXkiOltQXX1dLCJ0cmFuc2Zvcm0tb3JpZ2luIjpbe29yaWdpbjpbImNlbnRlciIsInRvcCIsInRvcC1yaWdodCIsInJpZ2h0IiwiYm90dG9tLXJpZ2h0IiwiYm90dG9tIiwiYm90dG9tLWxlZnQiLCJsZWZ0IiwidG9wLWxlZnQiLFhdfV0sYWNjZW50Olt7YWNjZW50OlsiYXV0byIsZV19XSxhcHBlYXJhbmNlOlt7YXBwZWFyYW5jZTpbIm5vbmUiLCJhdXRvIl19XSxjdXJzb3I6W3tjdXJzb3I6WyJhdXRvIiwiZGVmYXVsdCIsInBvaW50ZXIiLCJ3YWl0IiwidGV4dCIsIm1vdmUiLCJoZWxwIiwibm90LWFsbG93ZWQiLCJub25lIiwiY29udGV4dC1tZW51IiwicHJvZ3Jlc3MiLCJjZWxsIiwiY3Jvc3NoYWlyIiwidmVydGljYWwtdGV4dCIsImFsaWFzIiwiY29weSIsIm5vLWRyb3AiLCJncmFiIiwiZ3JhYmJpbmciLCJhbGwtc2Nyb2xsIiwiY29sLXJlc2l6ZSIsInJvdy1yZXNpemUiLCJuLXJlc2l6ZSIsImUtcmVzaXplIiwicy1yZXNpemUiLCJ3LXJlc2l6ZSIsIm5lLXJlc2l6ZSIsIm53LXJlc2l6ZSIsInNlLXJlc2l6ZSIsInN3LXJlc2l6ZSIsImV3LXJlc2l6ZSIsIm5zLXJlc2l6ZSIsIm5lc3ctcmVzaXplIiwibndzZS1yZXNpemUiLCJ6b29tLWluIiwiem9vbS1vdXQiLFhdfV0sImNhcmV0LWNvbG9yIjpbe2NhcmV0OltlXX1dLCJwb2ludGVyLWV2ZW50cyI6W3sicG9pbnRlci1ldmVudHMiOlsibm9uZSIsImF1dG8iXX1dLHJlc2l6ZTpbe3Jlc2l6ZTpbIm5vbmUiLCJ5IiwieCIsIiJdfV0sInNjcm9sbC1iZWhhdmlvciI6W3tzY3JvbGw6WyJhdXRvIiwic21vb3RoIl19XSwic2Nyb2xsLW0iOlt7InNjcm9sbC1tIjpOKCl9XSwic2Nyb2xsLW14IjpbeyJzY3JvbGwtbXgiOk4oKX1dLCJzY3JvbGwtbXkiOlt7InNjcm9sbC1teSI6TigpfV0sInNjcm9sbC1tcyI6W3sic2Nyb2xsLW1zIjpOKCl9XSwic2Nyb2xsLW1lIjpbeyJzY3JvbGwtbWUiOk4oKX1dLCJzY3JvbGwtbXQiOlt7InNjcm9sbC1tdCI6TigpfV0sInNjcm9sbC1tciI6W3sic2Nyb2xsLW1yIjpOKCl9XSwic2Nyb2xsLW1iIjpbeyJzY3JvbGwtbWIiOk4oKX1dLCJzY3JvbGwtbWwiOlt7InNjcm9sbC1tbCI6TigpfV0sInNjcm9sbC1wIjpbeyJzY3JvbGwtcCI6TigpfV0sInNjcm9sbC1weCI6W3sic2Nyb2xsLXB4IjpOKCl9XSwic2Nyb2xsLXB5IjpbeyJzY3JvbGwtcHkiOk4oKX1dLCJzY3JvbGwtcHMiOlt7InNjcm9sbC1wcyI6TigpfV0sInNjcm9sbC1wZSI6W3sic2Nyb2xsLXBlIjpOKCl9XSwic2Nyb2xsLXB0IjpbeyJzY3JvbGwtcHQiOk4oKX1dLCJzY3JvbGwtcHIiOlt7InNjcm9sbC1wciI6TigpfV0sInNjcm9sbC1wYiI6W3sic2Nyb2xsLXBiIjpOKCl9XSwic2Nyb2xsLXBsIjpbeyJzY3JvbGwtcGwiOk4oKX1dLCJzbmFwLWFsaWduIjpbe3NuYXA6WyJzdGFydCIsImVuZCIsImNlbnRlciIsImFsaWduLW5vbmUiXX1dLCJzbmFwLXN0b3AiOlt7c25hcDpbIm5vcm1hbCIsImFsd2F5cyJdfV0sInNuYXAtdHlwZSI6W3tzbmFwOlsibm9uZSIsIngiLCJ5IiwiYm90aCJdfV0sInNuYXAtc3RyaWN0bmVzcyI6W3tzbmFwOlsibWFuZGF0b3J5IiwicHJveGltaXR5Il19XSx0b3VjaDpbe3RvdWNoOlsiYXV0byIsIm5vbmUiLCJtYW5pcHVsYXRpb24iXX1dLCJ0b3VjaC14IjpbeyJ0b3VjaC1wYW4iOlsieCIsImxlZnQiLCJyaWdodCJdfV0sInRvdWNoLXkiOlt7InRvdWNoLXBhbiI6WyJ5IiwidXAiLCJkb3duIl19XSwidG91Y2gtcHoiOlsidG91Y2gtcGluY2gtem9vbSJdLHNlbGVjdDpbe3NlbGVjdDpbIm5vbmUiLCJ0ZXh0IiwiYWxsIiwiYXV0byJdfV0sIndpbGwtY2hhbmdlIjpbeyJ3aWxsLWNoYW5nZSI6WyJhdXRvIiwic2Nyb2xsIiwiY29udGVudHMiLCJ0cmFuc2Zvcm0iLFhdfV0sZmlsbDpbe2ZpbGw6W2UsIm5vbmUiXX1dLCJzdHJva2UtdyI6W3tzdHJva2U6W0Z0LGVuLCRpXX1dLHN0cm9rZTpbe3N0cm9rZTpbZSwibm9uZSJdfV0sc3I6WyJzci1vbmx5Iiwibm90LXNyLW9ubHkiXSwiZm9yY2VkLWNvbG9yLWFkanVzdCI6W3siZm9yY2VkLWNvbG9yLWFkanVzdCI6WyJhdXRvIiwibm9uZSJdfV19LGNvbmZsaWN0aW5nQ2xhc3NHcm91cHM6e292ZXJmbG93Olsib3ZlcmZsb3cteCIsIm92ZXJmbG93LXkiXSxvdmVyc2Nyb2xsOlsib3ZlcnNjcm9sbC14Iiwib3ZlcnNjcm9sbC15Il0saW5zZXQ6WyJpbnNldC14IiwiaW5zZXQteSIsInN0YXJ0IiwiZW5kIiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0sImluc2V0LXgiOlsicmlnaHQiLCJsZWZ0Il0sImluc2V0LXkiOlsidG9wIiwiYm90dG9tIl0sZmxleDpbImJhc2lzIiwiZ3JvdyIsInNocmluayJdLGdhcDpbImdhcC14IiwiZ2FwLXkiXSxwOlsicHgiLCJweSIsInBzIiwicGUiLCJwdCIsInByIiwicGIiLCJwbCJdLHB4OlsicHIiLCJwbCJdLHB5OlsicHQiLCJwYiJdLG06WyJteCIsIm15IiwibXMiLCJtZSIsIm10IiwibXIiLCJtYiIsIm1sIl0sbXg6WyJtciIsIm1sIl0sbXk6WyJtdCIsIm1iIl0sc2l6ZTpbInciLCJoIl0sImZvbnQtc2l6ZSI6WyJsZWFkaW5nIl0sImZ2bi1ub3JtYWwiOlsiZnZuLW9yZGluYWwiLCJmdm4tc2xhc2hlZC16ZXJvIiwiZnZuLWZpZ3VyZSIsImZ2bi1zcGFjaW5nIiwiZnZuLWZyYWN0aW9uIl0sImZ2bi1vcmRpbmFsIjpbImZ2bi1ub3JtYWwiXSwiZnZuLXNsYXNoZWQtemVybyI6WyJmdm4tbm9ybWFsIl0sImZ2bi1maWd1cmUiOlsiZnZuLW5vcm1hbCJdLCJmdm4tc3BhY2luZyI6WyJmdm4tbm9ybWFsIl0sImZ2bi1mcmFjdGlvbiI6WyJmdm4tbm9ybWFsIl0sImxpbmUtY2xhbXAiOlsiZGlzcGxheSIsIm92ZXJmbG93Il0scm91bmRlZDpbInJvdW5kZWQtcyIsInJvdW5kZWQtZSIsInJvdW5kZWQtdCIsInJvdW5kZWQtciIsInJvdW5kZWQtYiIsInJvdW5kZWQtbCIsInJvdW5kZWQtc3MiLCJyb3VuZGVkLXNlIiwicm91bmRlZC1lZSIsInJvdW5kZWQtZXMiLCJyb3VuZGVkLXRsIiwicm91bmRlZC10ciIsInJvdW5kZWQtYnIiLCJyb3VuZGVkLWJsIl0sInJvdW5kZWQtcyI6WyJyb3VuZGVkLXNzIiwicm91bmRlZC1lcyJdLCJyb3VuZGVkLWUiOlsicm91bmRlZC1zZSIsInJvdW5kZWQtZWUiXSwicm91bmRlZC10IjpbInJvdW5kZWQtdGwiLCJyb3VuZGVkLXRyIl0sInJvdW5kZWQtciI6WyJyb3VuZGVkLXRyIiwicm91bmRlZC1iciJdLCJyb3VuZGVkLWIiOlsicm91bmRlZC1iciIsInJvdW5kZWQtYmwiXSwicm91bmRlZC1sIjpbInJvdW5kZWQtdGwiLCJyb3VuZGVkLWJsIl0sImJvcmRlci1zcGFjaW5nIjpbImJvcmRlci1zcGFjaW5nLXgiLCJib3JkZXItc3BhY2luZy15Il0sImJvcmRlci13IjpbImJvcmRlci13LXMiLCJib3JkZXItdy1lIiwiYm9yZGVyLXctdCIsImJvcmRlci13LXIiLCJib3JkZXItdy1iIiwiYm9yZGVyLXctbCJdLCJib3JkZXItdy14IjpbImJvcmRlci13LXIiLCJib3JkZXItdy1sIl0sImJvcmRlci13LXkiOlsiYm9yZGVyLXctdCIsImJvcmRlci13LWIiXSwiYm9yZGVyLWNvbG9yIjpbImJvcmRlci1jb2xvci1zIiwiYm9yZGVyLWNvbG9yLWUiLCJib3JkZXItY29sb3ItdCIsImJvcmRlci1jb2xvci1yIiwiYm9yZGVyLWNvbG9yLWIiLCJib3JkZXItY29sb3ItbCJdLCJib3JkZXItY29sb3IteCI6WyJib3JkZXItY29sb3ItciIsImJvcmRlci1jb2xvci1sIl0sImJvcmRlci1jb2xvci15IjpbImJvcmRlci1jb2xvci10IiwiYm9yZGVyLWNvbG9yLWIiXSwic2Nyb2xsLW0iOlsic2Nyb2xsLW14Iiwic2Nyb2xsLW15Iiwic2Nyb2xsLW1zIiwic2Nyb2xsLW1lIiwic2Nyb2xsLW10Iiwic2Nyb2xsLW1yIiwic2Nyb2xsLW1iIiwic2Nyb2xsLW1sIl0sInNjcm9sbC1teCI6WyJzY3JvbGwtbXIiLCJzY3JvbGwtbWwiXSwic2Nyb2xsLW15IjpbInNjcm9sbC1tdCIsInNjcm9sbC1tYiJdLCJzY3JvbGwtcCI6WyJzY3JvbGwtcHgiLCJzY3JvbGwtcHkiLCJzY3JvbGwtcHMiLCJzY3JvbGwtcGUiLCJzY3JvbGwtcHQiLCJzY3JvbGwtcHIiLCJzY3JvbGwtcGIiLCJzY3JvbGwtcGwiXSwic2Nyb2xsLXB4IjpbInNjcm9sbC1wciIsInNjcm9sbC1wbCJdLCJzY3JvbGwtcHkiOlsic2Nyb2xsLXB0Iiwic2Nyb2xsLXBiIl0sdG91Y2g6WyJ0b3VjaC14IiwidG91Y2gteSIsInRvdWNoLXB6Il0sInRvdWNoLXgiOlsidG91Y2giXSwidG91Y2gteSI6WyJ0b3VjaCJdLCJ0b3VjaC1weiI6WyJ0b3VjaCJdfSxjb25mbGljdGluZ0NsYXNzR3JvdXBNb2RpZmllcnM6eyJmb250LXNpemUiOlsibGVhZGluZyJdfX19LFl2PU52KEd2KTtmdW5jdGlvbiBidCguLi5lKXtyZXR1cm4gWXYoeGYoZSkpfWNvbnN0IFh2PVp5LGtmPW0uZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLC4uLnR9LG4pPT5hLmpzeChmZix7cmVmOm4sY2xhc3NOYW1lOmJ0KCJmaXhlZCB0b3AtMCB6LVsxMDBdIGZsZXggbWF4LWgtc2NyZWVuIHctZnVsbCBmbGV4LWNvbC1yZXZlcnNlIHAtNCBzbTpib3R0b20tMCBzbTpyaWdodC0wIHNtOnRvcC1hdXRvIHNtOmZsZXgtY29sIG1kOm1heC13LVs0MjBweF0iLGUpLC4uLnR9KSk7a2YuZGlzcGxheU5hbWU9ZmYuZGlzcGxheU5hbWU7Y29uc3QgUXY9ZXYoImdyb3VwIHBvaW50ZXItZXZlbnRzLWF1dG8gcmVsYXRpdmUgZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBzcGFjZS14LTQgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtbWQgYm9yZGVyIHAtNiBwci04IHNoYWRvdy1sZyB0cmFuc2l0aW9uLWFsbCBkYXRhLVtzd2lwZT1jYW5jZWxdOnRyYW5zbGF0ZS14LTAgZGF0YS1bc3dpcGU9ZW5kXTp0cmFuc2xhdGUteC1bdmFyKC0tcmFkaXgtdG9hc3Qtc3dpcGUtZW5kLXgpXSBkYXRhLVtzd2lwZT1tb3ZlXTp0cmFuc2xhdGUteC1bdmFyKC0tcmFkaXgtdG9hc3Qtc3dpcGUtbW92ZS14KV0gZGF0YS1bc3dpcGU9bW92ZV06dHJhbnNpdGlvbi1ub25lIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzd2lwZT1lbmRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtODAgZGF0YS1bc3RhdGU9Y2xvc2VkXTpzbGlkZS1vdXQtdG8tcmlnaHQtZnVsbCBkYXRhLVtzdGF0ZT1vcGVuXTpzbGlkZS1pbi1mcm9tLXRvcC1mdWxsIGRhdGEtW3N0YXRlPW9wZW5dOnNtOnNsaWRlLWluLWZyb20tYm90dG9tLWZ1bGwiLHt2YXJpYW50czp7dmFyaWFudDp7ZGVmYXVsdDoiYm9yZGVyIGJnLWJhY2tncm91bmQgdGV4dC1mb3JlZ3JvdW5kIixkZXN0cnVjdGl2ZToiZGVzdHJ1Y3RpdmUgZ3JvdXAgYm9yZGVyLWRlc3RydWN0aXZlIGJnLWRlc3RydWN0aXZlIHRleHQtZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZCJ9fSxkZWZhdWx0VmFyaWFudHM6e3ZhcmlhbnQ6ImRlZmF1bHQifX0pLE5mPW0uZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLHZhcmlhbnQ6dCwuLi5ufSxzKT0+YS5qc3goaGYse3JlZjpzLGNsYXNzTmFtZTpidChRdih7dmFyaWFudDp0fSksZSksLi4ubn0pKTtOZi5kaXNwbGF5TmFtZT1oZi5kaXNwbGF5TmFtZTtjb25zdCBKdj1tLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6ZSwuLi50fSxuKT0+YS5qc3goZ2Yse3JlZjpuLGNsYXNzTmFtZTpidCgiaW5saW5lLWZsZXggaC04IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlciBiZy10cmFuc3BhcmVudCBweC0zIHRleHQtc20gZm9udC1tZWRpdW0gcmluZy1vZmZzZXQtYmFja2dyb3VuZCB0cmFuc2l0aW9uLWNvbG9ycyBncm91cC1bLmRlc3RydWN0aXZlXTpib3JkZXItbXV0ZWQvNDAgaG92ZXI6Ymctc2Vjb25kYXJ5IGdyb3VwLVsuZGVzdHJ1Y3RpdmVdOmhvdmVyOmJvcmRlci1kZXN0cnVjdGl2ZS8zMCBncm91cC1bLmRlc3RydWN0aXZlXTpob3ZlcjpiZy1kZXN0cnVjdGl2ZSBncm91cC1bLmRlc3RydWN0aXZlXTpob3Zlcjp0ZXh0LWRlc3RydWN0aXZlLWZvcmVncm91bmQgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLXJpbmcgZm9jdXM6cmluZy1vZmZzZXQtMiBncm91cC1bLmRlc3RydWN0aXZlXTpmb2N1czpyaW5nLWRlc3RydWN0aXZlIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6b3BhY2l0eS01MCIsZSksLi4udH0pKTtKdi5kaXNwbGF5TmFtZT1nZi5kaXNwbGF5TmFtZTtjb25zdCBSZj1tLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6ZSwuLi50fSxuKT0+YS5qc3goeWYse3JlZjpuLGNsYXNzTmFtZTpidCgiYWJzb2x1dGUgcmlnaHQtMiB0b3AtMiByb3VuZGVkLW1kIHAtMSB0ZXh0LWZvcmVncm91bmQvNTAgb3BhY2l0eS0wIHRyYW5zaXRpb24tb3BhY2l0eSBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCBncm91cC1bLmRlc3RydWN0aXZlXTp0ZXh0LXJlZC0zMDAgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGdyb3VwLVsuZGVzdHJ1Y3RpdmVdOmhvdmVyOnRleHQtcmVkLTUwIGZvY3VzOm9wYWNpdHktMTAwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZ3JvdXAtWy5kZXN0cnVjdGl2ZV06Zm9jdXM6cmluZy1yZWQtNDAwIGdyb3VwLVsuZGVzdHJ1Y3RpdmVdOmZvY3VzOnJpbmctb2Zmc2V0LXJlZC02MDAiLGUpLCJ0b2FzdC1jbG9zZSI6IiIsLi4udCxjaGlsZHJlbjphLmpzeCh0aSx7Y2xhc3NOYW1lOiJoLTQgdy00In0pfSkpO1JmLmRpc3BsYXlOYW1lPXlmLmRpc3BsYXlOYW1lO2NvbnN0IERmPW0uZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLC4uLnR9LG4pPT5hLmpzeChwZix7cmVmOm4sY2xhc3NOYW1lOmJ0KCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQiLGUpLC4uLnR9KSk7RGYuZGlzcGxheU5hbWU9cGYuZGlzcGxheU5hbWU7Y29uc3QgTWY9bS5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOmUsLi4udH0sbik9PmEuanN4KG1mLHtyZWY6bixjbGFzc05hbWU6YnQoInRleHQtc20gb3BhY2l0eS05MCIsZSksLi4udH0pKTtNZi5kaXNwbGF5TmFtZT1tZi5kaXNwbGF5TmFtZTtmdW5jdGlvbiBadigpe2NvbnN0e3RvYXN0czplfT1HZygpO3JldHVybiBhLmpzeHMoWHYse2NoaWxkcmVuOltlLm1hcChmdW5jdGlvbih7aWQ6dCx0aXRsZTpuLGRlc2NyaXB0aW9uOnMsYWN0aW9uOnIsLi4uaX0pe3JldHVybiBhLmpzeHMoTmYsey4uLmksY2hpbGRyZW46W2EuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIGdhcC0xIixjaGlsZHJlbjpbbiYmYS5qc3goRGYse2NoaWxkcmVuOm59KSxzJiZhLmpzeChNZix7Y2hpbGRyZW46c30pXX0pLHIsYS5qc3goUmYse30pXX0sdCl9KSxhLmpzeChrZix7fSldfSl9dmFyIGV4PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSx0eD0oZSx0KT0+ZXgoZSwibmFtZSIse3ZhbHVlOnQsY29uZmlndXJhYmxlOiEwfSksbng9bHJbIiB1c2VJZCAiLnRyaW0oKS50b1N0cmluZygpXXx8KCgpPT57fSksc3g9MDtmdW5jdGlvbiBfcihlKXtjb25zdFt0LG5dPW0udXNlU3RhdGUobngoKSk7cmV0dXJuIFhlKCgpPT57ZXx8bihzPT5zPz9TdHJpbmcoc3grKykpfSxbZV0pLGV8fCh0P2ByYWRpeC0ke3R9YDoiIil9dHgoX3IsInVzZUlkIik7Y29uc3Qgcng9WyJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXSxobj1NYXRoLm1pbixVdD1NYXRoLm1heCxuaT1NYXRoLnJvdW5kLHdyPU1hdGguZmxvb3IsJHQ9ZT0+KHt4OmUseTplfSksaXg9e2xlZnQ6InJpZ2h0IixyaWdodDoibGVmdCIsYm90dG9tOiJ0b3AiLHRvcDoiYm90dG9tIn07ZnVuY3Rpb24gT2YoZSx0LG4pe3JldHVybiBVdChlLGhuKHQsbikpfWZ1bmN0aW9uIHF0KGUsdCl7cmV0dXJuIHR5cGVvZiBlPT0iZnVuY3Rpb24iP2UodCk6ZX1mdW5jdGlvbiBwbihlKXtyZXR1cm4gZS5zcGxpdCgiLSIpWzBdfWZ1bmN0aW9uIHdzKGUpe3JldHVybiBlLnNwbGl0KCItIilbMV19ZnVuY3Rpb24gSWEoZSl7cmV0dXJuIGU9PT0ieCI/InkiOiJ4In1mdW5jdGlvbiBMYShlKXtyZXR1cm4gZT09PSJ5Ij8iaGVpZ2h0Ijoid2lkdGgifWZ1bmN0aW9uIEF0KGUpe2NvbnN0IHQ9ZVswXTtyZXR1cm4gdD09PSJ0Inx8dD09PSJiIj8ieSI6IngifWZ1bmN0aW9uIEZhKGUpe3JldHVybiBJYShBdChlKSl9ZnVuY3Rpb24gb3goZSx0LG4pe249PT12b2lkIDAmJihuPSExKTtjb25zdCBzPXdzKGUpLHI9RmEoZSksaT1MYShyKTtsZXQgbz1yPT09IngiP3M9PT0obj8iZW5kIjoic3RhcnQiKT8icmlnaHQiOiJsZWZ0IjpzPT09InN0YXJ0Ij8iYm90dG9tIjoidG9wIjtyZXR1cm4gdC5yZWZlcmVuY2VbaV0+dC5mbG9hdGluZ1tpXSYmKG89c2kobykpLFtvLHNpKG8pXX1mdW5jdGlvbiBheChlKXtjb25zdCB0PXNpKGUpO3JldHVybltMbyhlKSx0LExvKHQpXX1mdW5jdGlvbiBMbyhlKXtyZXR1cm4gZS5pbmNsdWRlcygic3RhcnQiKT9lLnJlcGxhY2UoInN0YXJ0IiwiZW5kIik6ZS5yZXBsYWNlKCJlbmQiLCJzdGFydCIpfWNvbnN0IFpsPVsibGVmdCIsInJpZ2h0Il0sZWM9WyJyaWdodCIsImxlZnQiXSxseD1bInRvcCIsImJvdHRvbSJdLGN4PVsiYm90dG9tIiwidG9wIl07ZnVuY3Rpb24gZHgoZSx0LG4pe3N3aXRjaChlKXtjYXNlInRvcCI6Y2FzZSJib3R0b20iOnJldHVybiBuP3Q/ZWM6Wmw6dD9abDplYztjYXNlImxlZnQiOmNhc2UicmlnaHQiOnJldHVybiB0P2x4OmN4O2RlZmF1bHQ6cmV0dXJuW119fWZ1bmN0aW9uIHV4KGUsdCxuLHMpe2NvbnN0IHI9d3MoZSk7bGV0IGk9ZHgocG4oZSksbj09PSJzdGFydCIscyk7cmV0dXJuIHImJihpPWkubWFwKG89Pm8rIi0iK3IpLHQmJihpPWkuY29uY2F0KGkubWFwKExvKSkpKSxpfWZ1bmN0aW9uIHNpKGUpe2NvbnN0IHQ9cG4oZSk7cmV0dXJuIGl4W3RdK2Uuc2xpY2UodC5sZW5ndGgpfWZ1bmN0aW9uIGZ4KGUpe3ZhciB0LG4scyxyO3JldHVybnt0b3A6KHQ9ZS50b3ApIT1udWxsP3Q6MCxyaWdodDoobj1lLnJpZ2h0KSE9bnVsbD9uOjAsYm90dG9tOihzPWUuYm90dG9tKSE9bnVsbD9zOjAsbGVmdDoocj1lLmxlZnQpIT1udWxsP3I6MH19ZnVuY3Rpb24gSWYoZSl7cmV0dXJuIHR5cGVvZiBlIT0ibnVtYmVyIj9meChlKTp7dG9wOmUscmlnaHQ6ZSxib3R0b206ZSxsZWZ0OmV9fWZ1bmN0aW9uIHJpKGUpe2NvbnN0e3g6dCx5Om4sd2lkdGg6cyxoZWlnaHQ6cn09ZTtyZXR1cm57d2lkdGg6cyxoZWlnaHQ6cix0b3A6bixsZWZ0OnQscmlnaHQ6dCtzLGJvdHRvbTpuK3IseDp0LHk6bn19ZnVuY3Rpb24gdGMoZSx0LG4pe2xldHtyZWZlcmVuY2U6cyxmbG9hdGluZzpyfT1lO2NvbnN0IGk9QXQodCksbz1GYSh0KSxsPUxhKG8pLGQ9cG4odCksYz1pPT09InkiLHU9cy54K3Mud2lkdGgvMi1yLndpZHRoLzIsZj1zLnkrcy5oZWlnaHQvMi1yLmhlaWdodC8yLGg9c1tsXS8yLXJbbF0vMjtsZXQgcDtzd2l0Y2goZCl7Y2FzZSJ0b3AiOnA9e3g6dSx5OnMueS1yLmhlaWdodH07YnJlYWs7Y2FzZSJib3R0b20iOnA9e3g6dSx5OnMueStzLmhlaWdodH07YnJlYWs7Y2FzZSJyaWdodCI6cD17eDpzLngrcy53aWR0aCx5OmZ9O2JyZWFrO2Nhc2UibGVmdCI6cD17eDpzLngtci53aWR0aCx5OmZ9O2JyZWFrO2RlZmF1bHQ6cD17eDpzLngseTpzLnl9fWNvbnN0IGc9d3ModCk7cmV0dXJuIGcmJihwW29dKz1oKihnPT09ImVuZCI/MTotMSkqKG4mJmM/LTE6MSkpLHB9YXN5bmMgZnVuY3Rpb24gaHgoZSx0KXt2YXIgbjt0PT09dm9pZCAwJiYodD17fSk7Y29uc3R7eDpzLHk6cixwbGF0Zm9ybTppLHJlY3RzOm8sZWxlbWVudHM6bCxzdHJhdGVneTpkfT1lLHtib3VuZGFyeTpjPSJjbGlwcGluZ0FuY2VzdG9ycyIscm9vdEJvdW5kYXJ5OnU9InZpZXdwb3J0IixlbGVtZW50Q29udGV4dDpmPSJmbG9hdGluZyIsYWx0Qm91bmRhcnk6aD0hMSxwYWRkaW5nOnA9MH09cXQodCxlKSxnPUlmKHApLHY9bFtoP2Y9PT0iZmxvYXRpbmciPyJyZWZlcmVuY2UiOiJmbG9hdGluZyI6Zl0seD1yaShhd2FpdCBpLmdldENsaXBwaW5nUmVjdCh7ZWxlbWVudDoobj1hd2FpdChpLmlzRWxlbWVudD09bnVsbD92b2lkIDA6aS5pc0VsZW1lbnQodikpKT09bnVsbHx8bj92OnYuY29udGV4dEVsZW1lbnR8fGF3YWl0KGkuZ2V0RG9jdW1lbnRFbGVtZW50PT1udWxsP3ZvaWQgMDppLmdldERvY3VtZW50RWxlbWVudChsLmZsb2F0aW5nKSksYm91bmRhcnk6Yyxyb290Qm91bmRhcnk6dSxzdHJhdGVneTpkfSkpLHc9Zj09PSJmbG9hdGluZyI/e3g6cyx5OnIsd2lkdGg6by5mbG9hdGluZy53aWR0aCxoZWlnaHQ6by5mbG9hdGluZy5oZWlnaHR9Om8ucmVmZXJlbmNlLGI9YXdhaXQoaS5nZXRPZmZzZXRQYXJlbnQ9PW51bGw/dm9pZCAwOmkuZ2V0T2Zmc2V0UGFyZW50KGwuZmxvYXRpbmcpKSxDPWF3YWl0KGkuaXNFbGVtZW50PT1udWxsP3ZvaWQgMDppLmlzRWxlbWVudChiKSkmJmF3YWl0KGkuZ2V0U2NhbGU9PW51bGw/dm9pZCAwOmkuZ2V0U2NhbGUoYikpfHx7eDoxLHk6MX0sUz1yaShpLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0P2F3YWl0IGkuY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Qoe2VsZW1lbnRzOmwscmVjdDp3LG9mZnNldFBhcmVudDpiLHN0cmF0ZWd5OmR9KTp3KTtyZXR1cm57dG9wOih4LnRvcC1TLnRvcCtnLnRvcCkvQy55LGJvdHRvbTooUy5ib3R0b20teC5ib3R0b20rZy5ib3R0b20pL0MueSxsZWZ0Oih4LmxlZnQtUy5sZWZ0K2cubGVmdCkvQy54LHJpZ2h0OihTLnJpZ2h0LXgucmlnaHQrZy5yaWdodCkvQy54fX1jb25zdCBweD01MCxteD1hc3luYyhlLHQsbik9Pntjb25zdHtwbGFjZW1lbnQ6cz0iYm90dG9tIixzdHJhdGVneTpyPSJhYnNvbHV0ZSIsbWlkZGxld2FyZTppPVtdLHBsYXRmb3JtOm99PW4sbD1vLmRldGVjdE92ZXJmbG93P286ey4uLm8sZGV0ZWN0T3ZlcmZsb3c6aHh9LGQ9YXdhaXQoby5pc1JUTD09bnVsbD92b2lkIDA6by5pc1JUTCh0KSk7bGV0IGM9YXdhaXQgby5nZXRFbGVtZW50UmVjdHMoe3JlZmVyZW5jZTplLGZsb2F0aW5nOnQsc3RyYXRlZ3k6cn0pLHt4OnUseTpmfT10YyhjLHMsZCksaD1zLHA9MDtjb25zdCBnPXt9O2ZvcihsZXQgeT0wO3k8aS5sZW5ndGg7eSsrKXtjb25zdCB2PWlbeV07aWYoIXYpY29udGludWU7Y29uc3R7bmFtZTp4LGZuOnd9PXYse3g6Yix5OkMsZGF0YTpTLHJlc2V0OlB9PWF3YWl0IHcoe3g6dSx5OmYsaW5pdGlhbFBsYWNlbWVudDpzLHBsYWNlbWVudDpoLHN0cmF0ZWd5OnIsbWlkZGxld2FyZURhdGE6ZyxyZWN0czpjLHBsYXRmb3JtOmwsZWxlbWVudHM6e3JlZmVyZW5jZTplLGZsb2F0aW5nOnR9fSk7dT1iPz91LGY9Qz8/ZixnW3hdPXsuLi5nW3hdLC4uLlN9LFAmJnA8cHgmJihwKyssdHlwZW9mIFA9PSJvYmplY3QiJiYoUC5wbGFjZW1lbnQmJihoPVAucGxhY2VtZW50KSxQLnJlY3RzJiYoYz1QLnJlY3RzPT09ITA/YXdhaXQgby5nZXRFbGVtZW50UmVjdHMoe3JlZmVyZW5jZTplLGZsb2F0aW5nOnQsc3RyYXRlZ3k6cn0pOlAucmVjdHMpLHt4OnUseTpmfT10YyhjLGgsZCkpLHk9LTEpfXJldHVybnt4OnUseTpmLHBsYWNlbWVudDpoLHN0cmF0ZWd5OnIsbWlkZGxld2FyZURhdGE6Z319LGd4PWU9Pih7bmFtZToiYXJyb3ciLG9wdGlvbnM6ZSxhc3luYyBmbih0KXtjb25zdHt4Om4seTpzLHBsYWNlbWVudDpyLHJlY3RzOmkscGxhdGZvcm06byxlbGVtZW50czpsLG1pZGRsZXdhcmVEYXRhOmR9PXQse2VsZW1lbnQ6YyxwYWRkaW5nOnU9MH09cXQoZSx0KXx8e307aWYoYz09bnVsbClyZXR1cm57fTtjb25zdCBmPUlmKHUpLGg9e3g6bix5OnN9LHA9RmEociksZz1MYShwKSx5PWF3YWl0IG8uZ2V0RGltZW5zaW9ucyhjKSx2PXA9PT0ieSIseD12PyJ0b3AiOiJsZWZ0Iix3PXY/ImJvdHRvbSI6InJpZ2h0IixiPXY/ImNsaWVudEhlaWdodCI6ImNsaWVudFdpZHRoIixDPWkucmVmZXJlbmNlW2ddK2kucmVmZXJlbmNlW3BdLWhbcF0taS5mbG9hdGluZ1tnXSxTPWhbcF0taS5yZWZlcmVuY2VbcF0sUD1hd2FpdChvLmdldE9mZnNldFBhcmVudD09bnVsbD92b2lkIDA6by5nZXRPZmZzZXRQYXJlbnQoYykpO2xldCBFPVA/UFtiXTowOyghRXx8IWF3YWl0KG8uaXNFbGVtZW50PT1udWxsP3ZvaWQgMDpvLmlzRWxlbWVudChQKSkpJiYoRT1sLmZsb2F0aW5nW2JdfHxpLmZsb2F0aW5nW2ddKTtjb25zdCBrPUMvMi1TLzIsUj1FLzIteVtnXS8yLTEsQT1obihmW3hdLFIpLEQ9aG4oZlt3XSxSKSxOPUUteVtnXS1ELEY9RS8yLXlbZ10vMitrLF89T2YoQSxGLE4pLEg9IWQuYXJyb3cmJndzKHIpIT1udWxsJiZGIT09XyYmaS5yZWZlcmVuY2VbZ10vMi0oRjxBP0E6RCkteVtnXS8yPDAsTT1IP0Y8QT9GLUE6Ri1OOjA7cmV0dXJue1twXTpoW3BdK00sZGF0YTp7W3BdOl8sY2VudGVyT2Zmc2V0OkYtXy1NLC4uLkgmJnthbGlnbm1lbnRPZmZzZXQ6TX19LHJlc2V0Okh9fX0pLHl4PWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT17fSkse25hbWU6ImZsaXAiLG9wdGlvbnM6ZSxhc3luYyBmbih0KXt2YXIgbixzO2NvbnN0e3BsYWNlbWVudDpyLG1pZGRsZXdhcmVEYXRhOmkscmVjdHM6byxpbml0aWFsUGxhY2VtZW50OmwscGxhdGZvcm06ZCxlbGVtZW50czpjfT10LHttYWluQXhpczp1PSEwLGNyb3NzQXhpczpmPSEwLGZhbGxiYWNrUGxhY2VtZW50czpoLGZhbGxiYWNrU3RyYXRlZ3k6cD0iYmVzdEZpdCIsZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbjpnPSJub25lIixmbGlwQWxpZ25tZW50Onk9ITAsLi4udn09cXQoZSx0KTtpZigobj1pLmFycm93KSE9bnVsbCYmbi5hbGlnbm1lbnRPZmZzZXQpcmV0dXJue307Y29uc3QgeD1wbihyKSx3PUF0KGwpLGI9cG4obCk9PT1sLEM9YXdhaXQoZC5pc1JUTD09bnVsbD92b2lkIDA6ZC5pc1JUTChjLmZsb2F0aW5nKSksUz1ofHwoYnx8IXk/W3NpKGwpXTpheChsKSksUD1nIT09Im5vbmUiOyFoJiZQJiZTLnB1c2goLi4udXgobCx5LGcsQykpO2NvbnN0IEU9W2wsLi4uU10saz1hd2FpdCBkLmRldGVjdE92ZXJmbG93KHQsdiksUj1bXTtsZXQgQT0oKHM9aS5mbGlwKT09bnVsbD92b2lkIDA6cy5vdmVyZmxvd3MpfHxbXTtpZih1JiZSLnB1c2goa1t4XSksZil7Y29uc3QgXz1veChyLG8sQyk7Ui5wdXNoKGtbX1swXV0sa1tfWzFdXSl9aWYoQT1bLi4uQSx7cGxhY2VtZW50OnIsb3ZlcmZsb3dzOlJ9XSwhUi5ldmVyeShfPT5fPD0wKSl7dmFyIEQsTjtjb25zdCBfPSgoKEQ9aS5mbGlwKT09bnVsbD92b2lkIDA6RC5pbmRleCl8fDApKzEsSD1FW19dO2lmKEgmJighKGY9PT0iYWxpZ25tZW50Ij93IT09QXQoSCk6ITEpfHxBLmV2ZXJ5KEk9PkF0KEkucGxhY2VtZW50KT09PXc/SS5vdmVyZmxvd3NbMF0+MDohMCkpKXJldHVybntkYXRhOntpbmRleDpfLG92ZXJmbG93czpBfSxyZXNldDp7cGxhY2VtZW50Okh9fTtsZXQgTT0oTj1BLmZpbHRlcih6PT56Lm92ZXJmbG93c1swXTw9MCkuc29ydCgoeixJKT0+ei5vdmVyZmxvd3NbMV0tSS5vdmVyZmxvd3NbMV0pWzBdKT09bnVsbD92b2lkIDA6Ti5wbGFjZW1lbnQ7aWYoIU0pc3dpdGNoKHApe2Nhc2UiYmVzdEZpdCI6e3ZhciBGO2NvbnN0IHo9KEY9QS5maWx0ZXIoST0+e2lmKFApe2NvbnN0IE89QXQoSS5wbGFjZW1lbnQpO3JldHVybiBPPT09d3x8Tz09PSJ5In1yZXR1cm4hMH0pLm1hcChJPT5bSS5wbGFjZW1lbnQsSS5vdmVyZmxvd3MuZmlsdGVyKE89Pk8+MCkucmVkdWNlKChPLEcpPT5PK0csMCldKS5zb3J0KChJLE8pPT5JWzFdLU9bMV0pWzBdKT09bnVsbD92b2lkIDA6RlswXTt6JiYoTT16KTticmVha31jYXNlImluaXRpYWxQbGFjZW1lbnQiOk09bDticmVha31pZihyIT09TSlyZXR1cm57cmVzZXQ6e3BsYWNlbWVudDpNfX19cmV0dXJue319fX07ZnVuY3Rpb24gbmMoZSx0KXtyZXR1cm57dG9wOmUudG9wLXQuaGVpZ2h0LHJpZ2h0OmUucmlnaHQtdC53aWR0aCxib3R0b206ZS5ib3R0b20tdC5oZWlnaHQsbGVmdDplLmxlZnQtdC53aWR0aH19ZnVuY3Rpb24gc2MoZSl7cmV0dXJuIHJ4LnNvbWUodD0+ZVt0XT49MCl9Y29uc3Qgdng9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT12b2lkIDAmJihlPXt9KSx7bmFtZToiaGlkZSIsb3B0aW9uczplLGFzeW5jIGZuKHQpe2NvbnN0e3JlY3RzOm4scGxhdGZvcm06c309dCx7c3RyYXRlZ3k6cj0icmVmZXJlbmNlSGlkZGVuIiwuLi5pfT1xdChlLHQpO3N3aXRjaChyKXtjYXNlInJlZmVyZW5jZUhpZGRlbiI6e2NvbnN0IG89YXdhaXQgcy5kZXRlY3RPdmVyZmxvdyh0LHsuLi5pLGVsZW1lbnRDb250ZXh0OiJyZWZlcmVuY2UifSksbD1uYyhvLG4ucmVmZXJlbmNlKTtyZXR1cm57ZGF0YTp7cmVmZXJlbmNlSGlkZGVuT2Zmc2V0czpsLHJlZmVyZW5jZUhpZGRlbjpzYyhsKX19fWNhc2UiZXNjYXBlZCI6e2NvbnN0IG89YXdhaXQgcy5kZXRlY3RPdmVyZmxvdyh0LHsuLi5pLGFsdEJvdW5kYXJ5OiEwfSksbD1uYyhvLG4uZmxvYXRpbmcpO3JldHVybntkYXRhOntlc2NhcGVkT2Zmc2V0czpsLGVzY2FwZWQ6c2MobCl9fX1kZWZhdWx0OnJldHVybnt9fX19fSxMZj1uZXcgU2V0KFsibGVmdCIsInRvcCJdKTthc3luYyBmdW5jdGlvbiB4eChlLHQpe2NvbnN0e3BsYWNlbWVudDpuLHBsYXRmb3JtOnMsZWxlbWVudHM6cn09ZSxpPWF3YWl0KHMuaXNSVEw9PW51bGw/dm9pZCAwOnMuaXNSVEwoci5mbG9hdGluZykpLG89cG4obiksbD13cyhuKSxkPUF0KG4pPT09InkiLGM9TGYuaGFzKG8pPy0xOjEsdT1pJiZkPy0xOjEsZj1xdCh0LGUpO2xldHttYWluQXhpczpoLGNyb3NzQXhpczpwLGFsaWdubWVudEF4aXM6Z309dHlwZW9mIGY9PSJudW1iZXIiP3ttYWluQXhpczpmLGNyb3NzQXhpczowLGFsaWdubWVudEF4aXM6bnVsbH06e21haW5BeGlzOmYubWFpbkF4aXN8fDAsY3Jvc3NBeGlzOmYuY3Jvc3NBeGlzfHwwLGFsaWdubWVudEF4aXM6Zi5hbGlnbm1lbnRBeGlzfTtyZXR1cm4gbCYmdHlwZW9mIGc9PSJudW1iZXIiJiYocD1sPT09ImVuZCI/ZyotMTpnKSxkP3t4OnAqdSx5OmgqY306e3g6aCpjLHk6cCp1fX1jb25zdCBieD1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9MCkse25hbWU6Im9mZnNldCIsb3B0aW9uczplLGFzeW5jIGZuKHQpe3ZhciBuLHM7Y29uc3R7eDpyLHk6aSxwbGFjZW1lbnQ6byxtaWRkbGV3YXJlRGF0YTpsfT10LGQ9YXdhaXQgeHgodCxlKTtyZXR1cm4gbz09PSgobj1sLm9mZnNldCk9PW51bGw/dm9pZCAwOm4ucGxhY2VtZW50KSYmKHM9bC5hcnJvdykhPW51bGwmJnMuYWxpZ25tZW50T2Zmc2V0P3t9Ont4OnIrZC54LHk6aStkLnksZGF0YTp7Li4uZCxwbGFjZW1lbnQ6b319fX19LHd4PWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT17fSkse25hbWU6InNoaWZ0IixvcHRpb25zOmUsYXN5bmMgZm4odCl7Y29uc3R7eDpuLHk6cyxwbGFjZW1lbnQ6cixwbGF0Zm9ybTppfT10LHttYWluQXhpczpvPSEwLGNyb3NzQXhpczpsPSExLGxpbWl0ZXI6ZD17Zm46dz0+e2xldHt4OmIseTpDfT13O3JldHVybnt4OmIseTpDfX19LC4uLmN9PXF0KGUsdCksdT17eDpuLHk6c30sZj1hd2FpdCBpLmRldGVjdE92ZXJmbG93KHQsYyksaD1BdChyKSxwPUlhKGgpO2xldCBnPXVbcF0seT11W2hdO2NvbnN0IHY9KHcsYik9Pk9mKGIrZlt3PT09InkiPyJ0b3AiOiJsZWZ0Il0sYixiLWZbdz09PSJ5Ij8iYm90dG9tIjoicmlnaHQiXSk7byYmKGc9dihwLGcpKSxsJiYoeT12KGgseSkpO2NvbnN0IHg9ZC5mbih7Li4udCxbcF06ZyxbaF06eX0pO3JldHVybnsuLi54LGRhdGE6e3g6eC54LW4seTp4LnktcyxlbmFibGVkOntbcF06byxbaF06bH19fX19fSxDeD1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9e30pLHtvcHRpb25zOmUsZm4odCl7dmFyIG4scztjb25zdHt4OnIseTppLHBsYWNlbWVudDpvLHJlY3RzOmwsbWlkZGxld2FyZURhdGE6ZH09dCx7b2Zmc2V0OmM9MCxtYWluQXhpczp1PSEwLGNyb3NzQXhpczpmPSEwfT1xdChlLHQpLGg9e3g6cix5Oml9LHA9QXQobyksZz1JYShwKTtsZXQgeT1oW2ddLHY9aFtwXTtjb25zdCB4PXF0KGMsdCksdz10eXBlb2YgeD09Im51bWJlciI/e21haW5BeGlzOngsY3Jvc3NBeGlzOjB9OnttYWluQXhpczoobj14Lm1haW5BeGlzKSE9bnVsbD9uOjAsY3Jvc3NBeGlzOihzPXguY3Jvc3NBeGlzKSE9bnVsbD9zOjB9O2lmKHUpe2NvbnN0IFM9Zz09PSJ5Ij8iaGVpZ2h0Ijoid2lkdGgiLFA9bC5yZWZlcmVuY2VbZ10tbC5mbG9hdGluZ1tTXSt3Lm1haW5BeGlzLEU9bC5yZWZlcmVuY2VbZ10rbC5yZWZlcmVuY2VbU10tdy5tYWluQXhpczt5PFA/eT1QOnk+RSYmKHk9RSl9aWYoZil7dmFyIGIsQztjb25zdCBTPWc9PT0ieSI/IndpZHRoIjoiaGVpZ2h0IixQPUxmLmhhcyhwbihvKSksRT1sLnJlZmVyZW5jZVtwXS1sLmZsb2F0aW5nW1NdKyhQJiYoKGI9ZC5vZmZzZXQpPT1udWxsP3ZvaWQgMDpiW3BdKXx8MCkrKFA/MDp3LmNyb3NzQXhpcyksaz1sLnJlZmVyZW5jZVtwXStsLnJlZmVyZW5jZVtTXSsoUD8wOigoQz1kLm9mZnNldCk9PW51bGw/dm9pZCAwOkNbcF0pfHwwKS0oUD93LmNyb3NzQXhpczowKTt2PEU/dj1FOnY+ayYmKHY9ayl9cmV0dXJue1tnXTp5LFtwXTp2fX19fSxUeD1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9e30pLHtuYW1lOiJzaXplIixvcHRpb25zOmUsYXN5bmMgZm4odCl7Y29uc3R7cGxhY2VtZW50Om4scmVjdHM6cyxwbGF0Zm9ybTpyLGVsZW1lbnRzOml9PXQse2FwcGx5Om89KCk9Pnt9LC4uLmx9PXF0KGUsdCksZD1hd2FpdCByLmRldGVjdE92ZXJmbG93KHQsbCksYz1wbihuKSx1PXdzKG4pLGY9QXQobik9PT0ieSIse3dpZHRoOmgsaGVpZ2h0OnB9PXMuZmxvYXRpbmc7bGV0IGcseTtjPT09InRvcCJ8fGM9PT0iYm90dG9tIj8oZz1jLHk9dT09PShhd2FpdChyLmlzUlRMPT1udWxsP3ZvaWQgMDpyLmlzUlRMKGkuZmxvYXRpbmcpKT8ic3RhcnQiOiJlbmQiKT8ibGVmdCI6InJpZ2h0Iik6KHk9YyxnPXU9PT0iZW5kIj8idG9wIjoiYm90dG9tIik7Y29uc3Qgdj1wLWQudG9wLWQuYm90dG9tLHg9aC1kLmxlZnQtZC5yaWdodCx3PWhuKHAtZFtnXSx2KSxiPWhuKGgtZFt5XSx4KSxDPXQubWlkZGxld2FyZURhdGEuc2hpZnQsUz0hQztsZXQgUD13LEU9YjtDIT1udWxsJiZDLmVuYWJsZWQueCYmKEU9eCksQyE9bnVsbCYmQy5lbmFibGVkLnkmJihQPXYpLFMmJiF1JiYoZj9FPWgtMipVdChkLmxlZnQsZC5yaWdodCk6UD1wLTIqVXQoZC50b3AsZC5ib3R0b20pKSxhd2FpdCBvKHsuLi50LGF2YWlsYWJsZVdpZHRoOkUsYXZhaWxhYmxlSGVpZ2h0OlB9KTtjb25zdCBrPWF3YWl0IHIuZ2V0RGltZW5zaW9ucyhpLmZsb2F0aW5nKTtyZXR1cm4gaCE9PWsud2lkdGh8fHAhPT1rLmhlaWdodD97cmVzZXQ6e3JlY3RzOiEwfX06e319fX07ZnVuY3Rpb24gU2koKXtyZXR1cm4gdHlwZW9mIHdpbmRvdzwidSJ9ZnVuY3Rpb24gQ3MoZSl7cmV0dXJuIEZmKGUpPyhlLm5vZGVOYW1lfHwiIikudG9Mb3dlckNhc2UoKToiI2RvY3VtZW50In1mdW5jdGlvbiBRZShlKXt2YXIgdDtyZXR1cm4oZT09bnVsbHx8KHQ9ZS5vd25lckRvY3VtZW50KT09bnVsbD92b2lkIDA6dC5kZWZhdWx0Vmlldyl8fHdpbmRvd31mdW5jdGlvbiBLdChlKXt2YXIgdDtyZXR1cm4odD0oRmYoZSk/ZS5vd25lckRvY3VtZW50OmUuZG9jdW1lbnQpfHx3aW5kb3cuZG9jdW1lbnQpPT1udWxsP3ZvaWQgMDp0LmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBGZihlKXtyZXR1cm4gU2koKT9lIGluc3RhbmNlb2YgTm9kZXx8ZSBpbnN0YW5jZW9mIFFlKGUpLk5vZGU6ITF9ZnVuY3Rpb24gTnQoZSl7cmV0dXJuIFNpKCk/ZSBpbnN0YW5jZW9mIEVsZW1lbnR8fGUgaW5zdGFuY2VvZiBRZShlKS5FbGVtZW50OiExfWZ1bmN0aW9uIHluKGUpe3JldHVybiBTaSgpP2UgaW5zdGFuY2VvZiBIVE1MRWxlbWVudHx8ZSBpbnN0YW5jZW9mIFFlKGUpLkhUTUxFbGVtZW50OiExfWZ1bmN0aW9uIHJjKGUpe3JldHVybiFTaSgpfHx0eXBlb2YgU2hhZG93Um9vdD4idSI/ITE6ZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3R8fGUgaW5zdGFuY2VvZiBRZShlKS5TaGFkb3dSb290fWZ1bmN0aW9uIFBpKGUpe2NvbnN0e292ZXJmbG93OnQsb3ZlcmZsb3dYOm4sb3ZlcmZsb3dZOnMsZGlzcGxheTpyfT1SdChlKTtyZXR1cm4vYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW58Y2xpcC8udGVzdCh0K3MrbikmJnIhPT0iaW5saW5lIiYmciE9PSJjb250ZW50cyJ9ZnVuY3Rpb24gU3goZSl7cmV0dXJuL14odGFibGV8dGR8dGgpJC8udGVzdChDcyhlKSl9ZnVuY3Rpb24gamkoZSl7dHJ5e2lmKGUubWF0Y2hlcygiOnBvcG92ZXItb3BlbiIpKXJldHVybiEwfWNhdGNoe310cnl7cmV0dXJuIGUubWF0Y2hlcygiOm1vZGFsIil9Y2F0Y2h7cmV0dXJuITF9fWNvbnN0IFB4PS90cmFuc2Zvcm18dHJhbnNsYXRlfHNjYWxlfHJvdGF0ZXxwZXJzcGVjdGl2ZXxmaWx0ZXIvLGp4PS9wYWludHxsYXlvdXR8c3RyaWN0fGNvbnRlbnQvLFRuPWU9PiEhZSYmZSE9PSJub25lIjtsZXQgSGk7ZnVuY3Rpb24gVmEoZSl7Y29uc3QgdD1OdChlKT9SdChlKTplO3JldHVybiBUbih0LnRyYW5zZm9ybSl8fFRuKHQudHJhbnNsYXRlKXx8VG4odC5zY2FsZSl8fFRuKHQucm90YXRlKXx8VG4odC5wZXJzcGVjdGl2ZSl8fCFfYSgpJiYoVG4odC5iYWNrZHJvcEZpbHRlcil8fFRuKHQuZmlsdGVyKSl8fFB4LnRlc3QodC53aWxsQ2hhbmdlfHwiIil8fGp4LnRlc3QodC5jb250YWlufHwiIil9ZnVuY3Rpb24gRXgoZSl7bGV0IHQ9X24oZSk7Zm9yKDt5bih0KSYmIUdzKHQpOyl7aWYoVmEodCkpcmV0dXJuIHQ7aWYoamkodCkpcmV0dXJuIG51bGw7dD1fbih0KX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBfYSgpe3JldHVybiBIaT09bnVsbCYmKEhpPXR5cGVvZiBDU1M8InUiJiZDU1Muc3VwcG9ydHMmJkNTUy5zdXBwb3J0cygiLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXIiLCJub25lIikpLEhpfWZ1bmN0aW9uIEdzKGUpe3JldHVybi9eKGh0bWx8Ym9keXwjZG9jdW1lbnQpJC8udGVzdChDcyhlKSl9ZnVuY3Rpb24gUnQoZSl7cmV0dXJuIFFlKGUpLmdldENvbXB1dGVkU3R5bGUoZSl9ZnVuY3Rpb24gRWkoZSl7cmV0dXJuIE50KGUpP3tzY3JvbGxMZWZ0OmUuc2Nyb2xsTGVmdCxzY3JvbGxUb3A6ZS5zY3JvbGxUb3B9OntzY3JvbGxMZWZ0OmUuc2Nyb2xsWCxzY3JvbGxUb3A6ZS5zY3JvbGxZfX1mdW5jdGlvbiBfbihlKXtpZihDcyhlKT09PSJodG1sIilyZXR1cm4gZTtjb25zdCB0PWUuYXNzaWduZWRTbG90fHxlLnBhcmVudE5vZGV8fHJjKGUpJiZlLmhvc3R8fEt0KGUpO3JldHVybiByYyh0KT90Lmhvc3Q6dH1mdW5jdGlvbiBWZihlKXtjb25zdCB0PV9uKGUpO3JldHVybiBHcyh0KT8oZS5vd25lckRvY3VtZW50fHxlKS5ib2R5OnluKHQpJiZQaSh0KT90OlZmKHQpfWZ1bmN0aW9uIFlzKGUsdCxuKXt2YXIgczt0PT09dm9pZCAwJiYodD1bXSksbj09PXZvaWQgMCYmKG49ITApO2NvbnN0IHI9VmYoZSksaT1yPT09KChzPWUub3duZXJEb2N1bWVudCk9PW51bGw/dm9pZCAwOnMuYm9keSksbz1RZShyKTtpZihpKXtjb25zdCBsPUZvKG8pO3JldHVybiB0LmNvbmNhdChvLG8udmlzdWFsVmlld3BvcnR8fFtdLFBpKHIpP3I6W10sbCYmbj9ZcyhsKTpbXSl9ZWxzZSByZXR1cm4gdC5jb25jYXQocixZcyhyLFtdLG4pKX1mdW5jdGlvbiBGbyhlKXtyZXR1cm4gZS5wYXJlbnQmJk9iamVjdC5nZXRQcm90b3R5cGVPZihlLnBhcmVudCk/ZS5mcmFtZUVsZW1lbnQ6bnVsbH1mdW5jdGlvbiBfZihlKXtjb25zdCB0PVJ0KGUpO2xldCBuPXBhcnNlRmxvYXQodC53aWR0aCl8fDAscz1wYXJzZUZsb2F0KHQuaGVpZ2h0KXx8MDtjb25zdCByPXluKGUpLGk9cj9lLm9mZnNldFdpZHRoOm4sbz1yP2Uub2Zmc2V0SGVpZ2h0OnMsbD1uaShuKSE9PWl8fG5pKHMpIT09bztyZXR1cm4gbCYmKG49aSxzPW8pLHt3aWR0aDpuLGhlaWdodDpzLCQ6bH19ZnVuY3Rpb24gQmEoZSl7cmV0dXJuIE50KGUpP2U6ZS5jb250ZXh0RWxlbWVudH1mdW5jdGlvbiBycyhlKXtjb25zdCB0PUJhKGUpO2lmKCF5bih0KSlyZXR1cm4gJHQoMSk7Y29uc3Qgbj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHt3aWR0aDpzLGhlaWdodDpyLCQ6aX09X2YodCk7bGV0IG89KGk/bmkobi53aWR0aCk6bi53aWR0aCkvcyxsPShpP25pKG4uaGVpZ2h0KTpuLmhlaWdodCkvcjtyZXR1cm4oIW98fCFOdW1iZXIuaXNGaW5pdGUobykpJiYobz0xKSwoIWx8fCFOdW1iZXIuaXNGaW5pdGUobCkpJiYobD0xKSx7eDpvLHk6bH19Y29uc3QgQXg9JHQoMCk7ZnVuY3Rpb24gQmYoZSl7Y29uc3QgdD1RZShlKTtyZXR1cm4hX2EoKXx8IXQudmlzdWFsVmlld3BvcnQ/QXg6e3g6dC52aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0LHk6dC52aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3B9fWZ1bmN0aW9uIGt4KGUsdCxuKXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9ITEpLCEhbiYmdCYmbj09PVFlKGUpfWZ1bmN0aW9uIEJuKGUsdCxuLHMpe3Q9PT12b2lkIDAmJih0PSExKSxuPT09dm9pZCAwJiYobj0hMSk7Y29uc3Qgcj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9QmEoZSk7bGV0IG89JHQoMSk7dCYmKHM/TnQocykmJihvPXJzKHMpKTpvPXJzKGUpKTtjb25zdCBsPWt4KGksbixzKT9CZihpKTokdCgwKTtsZXQgZD0oci5sZWZ0K2wueCkvby54LGM9KHIudG9wK2wueSkvby55LHU9ci53aWR0aC9vLngsZj1yLmhlaWdodC9vLnk7aWYoaSYmcyl7Y29uc3QgaD1RZShpKSxwPU50KHMpP1FlKHMpOnM7bGV0IGc9aCx5PUZvKGcpO2Zvcig7eSYmcCE9PWc7KXtjb25zdCB2PXJzKHkpLHg9eS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx3PVJ0KHkpLGI9eC5sZWZ0Kyh5LmNsaWVudExlZnQrcGFyc2VGbG9hdCh3LnBhZGRpbmdMZWZ0KSkqdi54LEM9eC50b3ArKHkuY2xpZW50VG9wK3BhcnNlRmxvYXQody5wYWRkaW5nVG9wKSkqdi55O2QqPXYueCxjKj12LnksdSo9di54LGYqPXYueSxkKz1iLGMrPUMsZz1RZSh5KSx5PUZvKGcpfX1yZXR1cm4gcmkoe3dpZHRoOnUsaGVpZ2h0OmYseDpkLHk6Y30pfWZ1bmN0aW9uIEFpKGUsdCl7Y29uc3Qgbj1FaShlKS5zY3JvbGxMZWZ0O3JldHVybiB0P3QubGVmdCtuOkJuKEt0KGUpKS5sZWZ0K259ZnVuY3Rpb24gV2YoZSx0KXtjb25zdCBuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz1uLmxlZnQrdC5zY3JvbGxMZWZ0LUFpKGUsbikscj1uLnRvcCt0LnNjcm9sbFRvcDtyZXR1cm57eDpzLHk6cn19ZnVuY3Rpb24gTngoZSl7bGV0e2VsZW1lbnRzOnQscmVjdDpuLG9mZnNldFBhcmVudDpzLHN0cmF0ZWd5OnJ9PWU7Y29uc3QgaT1yPT09ImZpeGVkIixvPUt0KHMpLGw9dD9qaSh0LmZsb2F0aW5nKTohMTtpZihzPT09b3x8bCYmaSlyZXR1cm4gbjtsZXQgZD17c2Nyb2xsTGVmdDowLHNjcm9sbFRvcDowfSxjPSR0KDEpO2NvbnN0IHU9JHQoMCksZj15bihzKTtpZigoZnx8IWkpJiYoKENzKHMpIT09ImJvZHkifHxQaShvKSkmJihkPUVpKHMpKSxmKSl7Y29uc3QgcD1CbihzKTtjPXJzKHMpLHUueD1wLngrcy5jbGllbnRMZWZ0LHUueT1wLnkrcy5jbGllbnRUb3B9Y29uc3QgaD1vJiYhZiYmIWk/V2YobyxkKTokdCgwKTtyZXR1cm57d2lkdGg6bi53aWR0aCpjLngsaGVpZ2h0Om4uaGVpZ2h0KmMueSx4Om4ueCpjLngtZC5zY3JvbGxMZWZ0KmMueCt1LngraC54LHk6bi55KmMueS1kLnNjcm9sbFRvcCpjLnkrdS55K2gueX19ZnVuY3Rpb24gUngoZSl7cmV0dXJuIGUuZ2V0Q2xpZW50UmVjdHM/QXJyYXkuZnJvbShlLmdldENsaWVudFJlY3RzKCkpOltdfWZ1bmN0aW9uIER4KGUpe2NvbnN0IHQ9RWkoZSksbj1lLm93bmVyRG9jdW1lbnQuYm9keSxzPVV0KGUuc2Nyb2xsV2lkdGgsZS5jbGllbnRXaWR0aCxuLnNjcm9sbFdpZHRoLG4uY2xpZW50V2lkdGgpLHI9VXQoZS5zY3JvbGxIZWlnaHQsZS5jbGllbnRIZWlnaHQsbi5zY3JvbGxIZWlnaHQsbi5jbGllbnRIZWlnaHQpO2xldCBpPS10LnNjcm9sbExlZnQrQWkoZSk7Y29uc3Qgbz0tdC5zY3JvbGxUb3A7cmV0dXJuIFJ0KG4pLmRpcmVjdGlvbj09PSJydGwiJiYoaSs9VXQoZS5jbGllbnRXaWR0aCxuLmNsaWVudFdpZHRoKS1zKSx7d2lkdGg6cyxoZWlnaHQ6cix4OmkseTpvfX1jb25zdCBNeD0yNTtmdW5jdGlvbiBPeChlLHQsbil7bj09PXZvaWQgMCYmKG49InZpZXdwb3J0Iik7Y29uc3Qgcz1uPT09ImxheW91dFZpZXdwb3J0IixyPVFlKGUpLGk9S3QoZSksbz1yLnZpc3VhbFZpZXdwb3J0O2xldCBsPWkuY2xpZW50V2lkdGgsZD1pLmNsaWVudEhlaWdodCxjPTAsdT0wO2lmKG8pe2NvbnN0IGg9IV9hKCl8fHQ9PT0iZml4ZWQiO3M/aHx8KGM9LW8ub2Zmc2V0TGVmdCx1PS1vLm9mZnNldFRvcCk6KGw9by53aWR0aCxkPW8uaGVpZ2h0LGgmJihjPW8ub2Zmc2V0TGVmdCx1PW8ub2Zmc2V0VG9wKSl9aWYoQWkoaSk8PTApe2NvbnN0IGg9aS5vd25lckRvY3VtZW50LHA9aC5ib2R5LGc9Z2V0Q29tcHV0ZWRTdHlsZShwKSx5PWguY29tcGF0TW9kZT09PSJDU1MxQ29tcGF0IiYmcGFyc2VGbG9hdChnLm1hcmdpbkxlZnQpK3BhcnNlRmxvYXQoZy5tYXJnaW5SaWdodCl8fDAsdj1NYXRoLmFicyhpLmNsaWVudFdpZHRoLXAuY2xpZW50V2lkdGgteSkseD1nZXRDb21wdXRlZFN0eWxlKGkpLnNjcm9sbGJhckd1dHRlcj09PSJzdGFibGUgYm90aC1lZGdlcyI/di8yOnY7eDw9TXgmJihsLT14KX1yZXR1cm57d2lkdGg6bCxoZWlnaHQ6ZCx4OmMseTp1fX1mdW5jdGlvbiBJeChlLHQpe2NvbnN0IG49Qm4oZSwhMCx0PT09ImZpeGVkIikscz1uLnRvcCtlLmNsaWVudFRvcCxyPW4ubGVmdCtlLmNsaWVudExlZnQsaT1ycyhlKSxvPWUuY2xpZW50V2lkdGgqaS54LGw9ZS5jbGllbnRIZWlnaHQqaS55LGQ9cippLngsYz1zKmkueTtyZXR1cm57d2lkdGg6byxoZWlnaHQ6bCx4OmQseTpjfX1mdW5jdGlvbiBpYyhlLHQsbil7bGV0IHM7aWYodD09PSJ2aWV3cG9ydCJ8fHQ9PT0ibGF5b3V0Vmlld3BvcnQiKXM9T3goZSxuLHQpO2Vsc2UgaWYodD09PSJkb2N1bWVudCIpcz1EeChLdChlKSk7ZWxzZSBpZihOdCh0KSlzPUl4KHQsbik7ZWxzZXtjb25zdCByPUJmKGUpO3M9e3g6dC54LXIueCx5OnQueS1yLnksd2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHR9fXJldHVybiByaShzKX1mdW5jdGlvbiBMeChlLHQpe2NvbnN0IG49dC5nZXQoZSk7aWYobilyZXR1cm4gbjtsZXQgcz1ZcyhlLFtdLCExKS5maWx0ZXIobD0+TnQobCkmJkNzKGwpIT09ImJvZHkiKSxyPW51bGw7Y29uc3QgaT1SdChlKS5wb3NpdGlvbj09PSJmaXhlZCI7bGV0IG89aT9fbihlKTplO2Zvcig7TnQobykmJiFHcyhvKTspe2NvbnN0IGw9UnQobyksZD1WYShvKSxjPXI/ci5wb3NpdGlvbjppPyJmaXhlZCI6IiI7IWQmJihjPT09ImZpeGVkInx8Yz09PSJhYnNvbHV0ZSImJmwucG9zaXRpb249PT0ic3RhdGljIik/cz1zLmZpbHRlcihmPT5mIT09byk6cj1sLG89X24obyl9cmV0dXJuIHQuc2V0KGUscyksc31mdW5jdGlvbiBGeChlKXtsZXR7ZWxlbWVudDp0LGJvdW5kYXJ5Om4scm9vdEJvdW5kYXJ5OnMsc3RyYXRlZ3k6cn09ZTtjb25zdCBvPVsuLi5uPT09ImNsaXBwaW5nQW5jZXN0b3JzIj9qaSh0KT9bXTpMeCh0LHRoaXMuX2MpOltdLmNvbmNhdChuKSxzXSxsPWljKHQsb1swXSxyKTtsZXQgZD1sLnRvcCxjPWwucmlnaHQsdT1sLmJvdHRvbSxmPWwubGVmdDtmb3IobGV0IGg9MTtoPG8ubGVuZ3RoO2grKyl7Y29uc3QgcD1pYyh0LG9baF0scik7ZD1VdChwLnRvcCxkKSxjPWhuKHAucmlnaHQsYyksdT1obihwLmJvdHRvbSx1KSxmPVV0KHAubGVmdCxmKX1yZXR1cm57d2lkdGg6Yy1mLGhlaWdodDp1LWQseDpmLHk6ZH19ZnVuY3Rpb24gVngoZSl7Y29uc3R7d2lkdGg6dCxoZWlnaHQ6bn09X2YoZSk7cmV0dXJue3dpZHRoOnQsaGVpZ2h0Om59fWZ1bmN0aW9uIF94KGUsdCxuKXtjb25zdCBzPXluKHQpLHI9S3QodCksaT1uPT09ImZpeGVkIixvPUJuKGUsITAsaSx0KTtsZXQgbD17c2Nyb2xsTGVmdDowLHNjcm9sbFRvcDowfTtjb25zdCBkPSR0KDApO2lmKChzfHwhaSkmJigoQ3ModCkhPT0iYm9keSJ8fFBpKHIpKSYmKGw9RWkodCkpLHMpKXtjb25zdCBoPUJuKHQsITAsaSx0KTtkLng9aC54K3QuY2xpZW50TGVmdCxkLnk9aC55K3QuY2xpZW50VG9wfSFzJiZyJiYoZC54PUFpKHIpKTtjb25zdCBjPXImJiFzJiYhaT9XZihyLGwpOiR0KDApLHU9by5sZWZ0K2wuc2Nyb2xsTGVmdC1kLngtYy54LGY9by50b3ArbC5zY3JvbGxUb3AtZC55LWMueTtyZXR1cm57eDp1LHk6Zix3aWR0aDpvLndpZHRoLGhlaWdodDpvLmhlaWdodH19ZnVuY3Rpb24gcWkoZSl7cmV0dXJuIFJ0KGUpLnBvc2l0aW9uPT09InN0YXRpYyJ9ZnVuY3Rpb24gb2MoZSx0KXtpZigheW4oZSl8fFJ0KGUpLnBvc2l0aW9uPT09ImZpeGVkIilyZXR1cm4gbnVsbDtpZih0KXJldHVybiB0KGUpO2xldCBuPWUub2Zmc2V0UGFyZW50O3JldHVybiBLdChlKT09PW4mJihuPW4ub3duZXJEb2N1bWVudC5ib2R5KSxufWZ1bmN0aW9uIHpmKGUsdCl7Y29uc3Qgbj1RZShlKTtpZihqaShlKSlyZXR1cm4gbjtpZigheW4oZSkpe2xldCByPV9uKGUpO2Zvcig7ciYmIUdzKHIpOyl7aWYoTnQocikmJiFxaShyKSlyZXR1cm4gcjtyPV9uKHIpfXJldHVybiBufWxldCBzPW9jKGUsdCk7Zm9yKDtzJiZTeChzKSYmcWkocyk7KXM9b2Mocyx0KTtyZXR1cm4gcyYmR3MocykmJnFpKHMpJiYhVmEocyk/bjpzfHxFeChlKXx8bn1jb25zdCBCeD1hc3luYyBmdW5jdGlvbihlKXtjb25zdCB0PXRoaXMuZ2V0T2Zmc2V0UGFyZW50fHx6ZixuPXRoaXMuZ2V0RGltZW5zaW9ucyxzPWF3YWl0IG4oZS5mbG9hdGluZyk7cmV0dXJue3JlZmVyZW5jZTpfeChlLnJlZmVyZW5jZSxhd2FpdCB0KGUuZmxvYXRpbmcpLGUuc3RyYXRlZ3kpLGZsb2F0aW5nOnt4OjAseTowLHdpZHRoOnMud2lkdGgsaGVpZ2h0OnMuaGVpZ2h0fX19O2Z1bmN0aW9uIFd4KGUpe3JldHVybiBSdChlKS5kaXJlY3Rpb249PT0icnRsIn1jb25zdCB6eD17Y29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Q6TngsZ2V0RG9jdW1lbnRFbGVtZW50Okt0LGdldENsaXBwaW5nUmVjdDpGeCxnZXRPZmZzZXRQYXJlbnQ6emYsZ2V0RWxlbWVudFJlY3RzOkJ4LGdldENsaWVudFJlY3RzOlJ4LGdldERpbWVuc2lvbnM6VngsZ2V0U2NhbGU6cnMsaXNFbGVtZW50Ok50LGlzUlRMOld4fTtmdW5jdGlvbiBVZihlLHQpe3JldHVybiBlLng9PT10LngmJmUueT09PXQueSYmZS53aWR0aD09PXQud2lkdGgmJmUuaGVpZ2h0PT09dC5oZWlnaHR9ZnVuY3Rpb24gVXgoZSx0LG4pe2xldCBzPW51bGwscjtjb25zdCBpPUt0KGUpO2Z1bmN0aW9uIG8oKXt2YXIgdTtjbGVhclRpbWVvdXQociksKHU9cyk9PW51bGx8fHUuZGlzY29ubmVjdCgpLHM9bnVsbH1mdW5jdGlvbiBsKHUsZil7dT09PXZvaWQgMCYmKHU9ITEpLGY9PT12b2lkIDAmJihmPTEpLG8oKTtjb25zdCBoPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkse2xlZnQ6cCx0b3A6Zyx3aWR0aDp5LGhlaWdodDp2fT1oO2lmKHV8fHQoKSwheXx8IXYpcmV0dXJuO2NvbnN0IHg9d3IoZyksdz13cihpLmNsaWVudFdpZHRoLShwK3kpKSxiPXdyKGkuY2xpZW50SGVpZ2h0LShnK3YpKSxDPXdyKHApLFA9e3Jvb3RNYXJnaW46LXgrInB4ICIrLXcrInB4ICIrLWIrInB4ICIrLUMrInB4Iix0aHJlc2hvbGQ6VXQoMCxobigxLGYpKXx8MX07bGV0IEU9ITA7ZnVuY3Rpb24gayhSKXtjb25zdCBBPVJbMF0uaW50ZXJzZWN0aW9uUmF0aW87aWYoIVVmKGgsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSkpcmV0dXJuIGwoKTtpZihBIT09Zil7aWYoIUUpcmV0dXJuIGwoKTtBP2woITEsQSk6cj1zZXRUaW1lb3V0KCgpPT57bCghMSwxZS03KX0sMWUzKX1FPSExfXRyeXtzPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihrLHsuLi5QLHJvb3Q6aS5vd25lckRvY3VtZW50fSl9Y2F0Y2h7cz1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoayxQKX1zLm9ic2VydmUoZSl9Y29uc3QgZD1RZShlKSxjPSgpPT5sKG4pO3JldHVybiBkLmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsYyksbCghMCksKCk9PntkLnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsYyksbygpfX1mdW5jdGlvbiAkeChlLHQsbixzKXtzPT09dm9pZCAwJiYocz17fSk7Y29uc3R7YW5jZXN0b3JTY3JvbGw6cj0hMCxhbmNlc3RvclJlc2l6ZTppPSEwLGVsZW1lbnRSZXNpemU6bz10eXBlb2YgUmVzaXplT2JzZXJ2ZXI9PSJmdW5jdGlvbiIsbGF5b3V0U2hpZnQ6bD10eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI9PSJmdW5jdGlvbiIsYW5pbWF0aW9uRnJhbWU6ZD0hMX09cyxjPUJhKGUpLHU9cnx8aT9bLi4uYz9ZcyhjKTpbXSwuLi50P1lzKHQpOltdXTpbXTt1LmZvckVhY2goeD0+e3ImJnguYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixuKSxpJiZ4LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsbil9KTtjb25zdCBmPWMmJmw/VXgoYyxuLGkpOm51bGw7bGV0IGg9LTEscD1udWxsO28mJihwPW5ldyBSZXNpemVPYnNlcnZlcih4PT57bGV0W3ddPXg7dyYmdy50YXJnZXQ9PT1jJiZwJiZ0JiYocC51bm9ic2VydmUodCksY2FuY2VsQW5pbWF0aW9uRnJhbWUoaCksaD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt2YXIgYjsoYj1wKT09bnVsbHx8Yi5vYnNlcnZlKHQpfSkpLG4oKX0pLGMmJiFkJiZwLm9ic2VydmUoYyksdCYmcC5vYnNlcnZlKHQpKTtsZXQgZyx5PWQ/Qm4oZSk6bnVsbDtkJiZ2KCk7ZnVuY3Rpb24gdigpe2NvbnN0IHg9Qm4oZSk7eSYmIVVmKHkseCkmJm4oKSx5PXgsZz1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodil9cmV0dXJuIG4oKSwoKT0+e3ZhciB4O3UuZm9yRWFjaCh3PT57ciYmdy5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLG4pLGkmJncucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixuKX0pLGY/LigpLCh4PXApPT1udWxsfHx4LmRpc2Nvbm5lY3QoKSxwPW51bGwsZCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUoZyl9fWNvbnN0IEh4PWJ4LHF4PXd4LEt4PXl4LEd4PVR4LFl4PXZ4LGFjPWd4LFh4PUN4LFF4PShlLHQsbik9Pntjb25zdCBzPW5ldyBNYXAscj1uPz97fSxpPXsuLi56eCwuLi5yLnBsYXRmb3JtLF9jOnN9O3JldHVybiBteChlLHQsey4uLnIscGxhdGZvcm06aX0pfTt2YXIgSng9dHlwZW9mIGRvY3VtZW50PCJ1IixaeD1mdW5jdGlvbigpe30sQnI9Sng/bS51c2VMYXlvdXRFZmZlY3Q6Wng7ZnVuY3Rpb24gaWkoZSx0KXtpZihlPT09dClyZXR1cm4hMDtpZih0eXBlb2YgZSE9dHlwZW9mIHQpcmV0dXJuITE7aWYodHlwZW9mIGU9PSJmdW5jdGlvbiImJmUudG9TdHJpbmcoKT09PXQudG9TdHJpbmcoKSlyZXR1cm4hMDtsZXQgbixzLHI7aWYoZSYmdCYmdHlwZW9mIGU9PSJvYmplY3QiKXtpZihBcnJheS5pc0FycmF5KGUpKXtpZihuPWUubGVuZ3RoLG4hPT10Lmxlbmd0aClyZXR1cm4hMTtmb3Iocz1uO3MtLSE9PTA7KWlmKCFpaShlW3NdLHRbc10pKXJldHVybiExO3JldHVybiEwfWlmKHI9T2JqZWN0LmtleXMoZSksbj1yLmxlbmd0aCxuIT09T2JqZWN0LmtleXModCkubGVuZ3RoKXJldHVybiExO2ZvcihzPW47cy0tIT09MDspaWYoIXt9Lmhhc093blByb3BlcnR5LmNhbGwodCxyW3NdKSlyZXR1cm4hMTtmb3Iocz1uO3MtLSE9PTA7KXtjb25zdCBpPXJbc107aWYoIShpPT09Il9vd25lciImJmUuJCR0eXBlb2YpJiYhaWkoZVtpXSx0W2ldKSlyZXR1cm4hMX1yZXR1cm4hMH1yZXR1cm4gZSE9PWUmJnQhPT10fWZ1bmN0aW9uICRmKGUpe3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij8xOihlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdykuZGV2aWNlUGl4ZWxSYXRpb3x8MX1mdW5jdGlvbiBsYyhlLHQpe2NvbnN0IG49JGYoZSk7cmV0dXJuIE1hdGgucm91bmQodCpuKS9ufWZ1bmN0aW9uIEtpKGUpe2NvbnN0IHQ9bS51c2VSZWYoZSk7cmV0dXJuIEJyKCgpPT57dC5jdXJyZW50PWV9KSx0fWZ1bmN0aW9uIGViKGUpe2U9PT12b2lkIDAmJihlPXt9KTtjb25zdHtwbGFjZW1lbnQ6dD0iYm90dG9tIixzdHJhdGVneTpuPSJhYnNvbHV0ZSIsbWlkZGxld2FyZTpzPVtdLHBsYXRmb3JtOnIsZWxlbWVudHM6e3JlZmVyZW5jZTppLGZsb2F0aW5nOm99PXt9LHRyYW5zZm9ybTpsPSEwLHdoaWxlRWxlbWVudHNNb3VudGVkOmQsb3BlbjpjfT1lLFt1LGZdPW0udXNlU3RhdGUoe3g6MCx5OjAsc3RyYXRlZ3k6bixwbGFjZW1lbnQ6dCxtaWRkbGV3YXJlRGF0YTp7fSxpc1Bvc2l0aW9uZWQ6ITF9KSxbaCxwXT1tLnVzZVN0YXRlKHMpO2lpKGgscyl8fHAocyk7Y29uc3RbZyx5XT1tLnVzZVN0YXRlKG51bGwpLFt2LHhdPW0udXNlU3RhdGUobnVsbCksdz1tLnVzZUNhbGxiYWNrKEk9PntJIT09UC5jdXJyZW50JiYoUC5jdXJyZW50PUkseShJKSl9LFtdKSxiPW0udXNlQ2FsbGJhY2soST0+e0khPT1FLmN1cnJlbnQmJihFLmN1cnJlbnQ9SSx4KEkpKX0sW10pLEM9aXx8ZyxTPW98fHYsUD1tLnVzZVJlZihudWxsKSxFPW0udXNlUmVmKG51bGwpLGs9bS51c2VSZWYodSksUj1kIT1udWxsLEE9S2koZCksRD1LaShyKSxOPUtpKGMpLEY9bS51c2VDYWxsYmFjaygoKT0+e2lmKCFQLmN1cnJlbnR8fCFFLmN1cnJlbnQpcmV0dXJuO2NvbnN0IEk9e3BsYWNlbWVudDp0LHN0cmF0ZWd5Om4sbWlkZGxld2FyZTpofTtELmN1cnJlbnQmJihJLnBsYXRmb3JtPUQuY3VycmVudCksUXgoUC5jdXJyZW50LEUuY3VycmVudCxJKS50aGVuKE89Pntjb25zdCBHPXsuLi5PLGlzUG9zaXRpb25lZDpOLmN1cnJlbnQhPT0hMX07Xy5jdXJyZW50JiYhaWkoay5jdXJyZW50LEcpJiYoay5jdXJyZW50PUcsYXIuZmx1c2hTeW5jKCgpPT57ZihHKX0pKX0pfSxbaCx0LG4sRCxOXSk7QnIoKCk9PntjPT09ITEmJmsuY3VycmVudC5pc1Bvc2l0aW9uZWQmJihrLmN1cnJlbnQuaXNQb3NpdGlvbmVkPSExLGYoST0+KHsuLi5JLGlzUG9zaXRpb25lZDohMX0pKSl9LFtjXSk7Y29uc3QgXz1tLnVzZVJlZighMSk7QnIoKCk9PihfLmN1cnJlbnQ9ITAsKCk9PntfLmN1cnJlbnQ9ITF9KSxbXSksQnIoKCk9PntpZihDJiYoUC5jdXJyZW50PUMpLFMmJihFLmN1cnJlbnQ9UyksQyYmUyl7aWYoQS5jdXJyZW50KXJldHVybiBBLmN1cnJlbnQoQyxTLEYpO0YoKX19LFtDLFMsRixBLFJdKTtjb25zdCBIPW0udXNlTWVtbygoKT0+KHtyZWZlcmVuY2U6UCxmbG9hdGluZzpFLHNldFJlZmVyZW5jZTp3LHNldEZsb2F0aW5nOmJ9KSxbdyxiXSksTT1tLnVzZU1lbW8oKCk9Pih7cmVmZXJlbmNlOkMsZmxvYXRpbmc6U30pLFtDLFNdKSx6PW0udXNlTWVtbygoKT0+e2NvbnN0IEk9e3Bvc2l0aW9uOm4sbGVmdDowLHRvcDowfTtpZighTS5mbG9hdGluZylyZXR1cm4gSTtjb25zdCBPPWxjKE0uZmxvYXRpbmcsdS54KSxHPWxjKE0uZmxvYXRpbmcsdS55KTtyZXR1cm4gbD97Li4uSSx0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK08rInB4LCAiK0crInB4KSIsLi4uJGYoTS5mbG9hdGluZyk+PTEuNSYme3dpbGxDaGFuZ2U6InRyYW5zZm9ybSJ9fTp7cG9zaXRpb246bixsZWZ0Ok8sdG9wOkd9fSxbbixsLE0uZmxvYXRpbmcsdS54LHUueV0pO3JldHVybiBtLnVzZU1lbW8oKCk9Pih7Li4udSx1cGRhdGU6RixyZWZzOkgsZWxlbWVudHM6TSxmbG9hdGluZ1N0eWxlczp6fSksW3UsRixILE0sel0pfWNvbnN0IHRiPWU9PntmdW5jdGlvbiB0KG4pe3JldHVybnt9Lmhhc093blByb3BlcnR5LmNhbGwobiwiY3VycmVudCIpfXJldHVybntuYW1lOiJhcnJvdyIsb3B0aW9uczplLGZuKG4pe2NvbnN0e2VsZW1lbnQ6cyxwYWRkaW5nOnJ9PXR5cGVvZiBlPT0iZnVuY3Rpb24iP2Uobik6ZTtyZXR1cm4gcyYmdChzKT9zLmN1cnJlbnQhPW51bGw/YWMoe2VsZW1lbnQ6cy5jdXJyZW50LHBhZGRpbmc6cn0pLmZuKG4pOnt9OnM/YWMoe2VsZW1lbnQ6cyxwYWRkaW5nOnJ9KS5mbihuKTp7fX19fSxuYj0oZSx0KT0+e2NvbnN0IG49SHgoZSk7cmV0dXJue25hbWU6bi5uYW1lLGZuOm4uZm4sb3B0aW9uczpbZSx0XX19LHNiPShlLHQpPT57Y29uc3Qgbj1xeChlKTtyZXR1cm57bmFtZTpuLm5hbWUsZm46bi5mbixvcHRpb25zOltlLHRdfX0scmI9KGUsdCk9Pih7Zm46WHgoZSkuZm4sb3B0aW9uczpbZSx0XX0pLGliPShlLHQpPT57Y29uc3Qgbj1LeChlKTtyZXR1cm57bmFtZTpuLm5hbWUsZm46bi5mbixvcHRpb25zOltlLHRdfX0sb2I9KGUsdCk9Pntjb25zdCBuPUd4KGUpO3JldHVybntuYW1lOm4ubmFtZSxmbjpuLmZuLG9wdGlvbnM6W2UsdF19fSxhYj0oZSx0KT0+e2NvbnN0IG49WXgoZSk7cmV0dXJue25hbWU6bi5uYW1lLGZuOm4uZm4sb3B0aW9uczpbZSx0XX19LGxiPShlLHQpPT57Y29uc3Qgbj10YihlKTtyZXR1cm57bmFtZTpuLm5hbWUsZm46bi5mbixvcHRpb25zOltlLHRdfX07dmFyIGNiPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxkYj0oZSx0KT0+Y2IoZSwibmFtZSIse3ZhbHVlOnQsY29uZmlndXJhYmxlOiEwfSk7ZnVuY3Rpb24gSGYoZSl7Y29uc3RbdCxuXT1tLnVzZVN0YXRlKHZvaWQgMCk7cmV0dXJuIFhlKCgpPT57aWYoZSl7bih7d2lkdGg6ZS5vZmZzZXRXaWR0aCxoZWlnaHQ6ZS5vZmZzZXRIZWlnaHR9KTtjb25zdCBzPW5ldyBSZXNpemVPYnNlcnZlcihyPT57aWYoIUFycmF5LmlzQXJyYXkocil8fCFyLmxlbmd0aClyZXR1cm47Y29uc3QgaT1yWzBdO2xldCBvLGw7aWYoImJvcmRlckJveFNpemUiaW4gaSl7Y29uc3QgZD1pLmJvcmRlckJveFNpemUsYz1BcnJheS5pc0FycmF5KGQpP2RbMF06ZDtvPWMuaW5saW5lU2l6ZSxsPWMuYmxvY2tTaXplfWVsc2Ugbz1lLm9mZnNldFdpZHRoLGw9ZS5vZmZzZXRIZWlnaHQ7bih7d2lkdGg6byxoZWlnaHQ6bH0pfSk7cmV0dXJuIHMub2JzZXJ2ZShlLHtib3g6ImJvcmRlci1ib3gifSksKCk9PnMudW5vYnNlcnZlKGUpfWVsc2Ugbih2b2lkIDApfSxbZV0pLHR9ZGIoSGYsInVzZVNpemUiKTt2YXIgdWI9T2JqZWN0LmRlZmluZVByb3BlcnR5LGlzPShlLHQpPT51YihlLCJuYW1lIix7dmFsdWU6dCxjb25maWd1cmFibGU6ITB9KSxxZj0iUG9wcGVyIixbS2YsR2ZdPVduKHFmKSxbaGosZmJdPUtmKHFmKSxZZj0iUG9wcGVyQ29udGVudCIsW2hiLHBqXT1LZihZZikscGI9bS5mb3J3YXJkUmVmKGlzKGZ1bmN0aW9uKHQsbil7Y29uc3R7X19zY29wZVBvcHBlcjpzLHNpZGU6cj0iYm90dG9tIixzaWRlT2Zmc2V0Omk9MCxhbGlnbjpvPSJjZW50ZXIiLGFsaWduT2Zmc2V0Omw9MCxhcnJvd1BhZGRpbmc6ZD0wLGF2b2lkQ29sbGlzaW9uczpjPSEwLGNvbGxpc2lvbkJvdW5kYXJ5OnU9W10sY29sbGlzaW9uUGFkZGluZzpmPTAsc3RpY2t5Omg9InBhcnRpYWwiLGhpZGVXaGVuRGV0YWNoZWQ6cD0hMSx1cGRhdGVQb3NpdGlvblN0cmF0ZWd5Omc9Im9wdGltaXplZCIsb25QbGFjZWQ6eSwuLi52fT10LHg9ZmIoWWYscyksW3csYl09bS51c2VTdGF0ZShudWxsKSxDPU9lKG4sYiksW1MsUF09bS51c2VTdGF0ZShudWxsKSxFPUhmKFMpLGs9RT8ud2lkdGg/PzAsUj1FPy5oZWlnaHQ/PzAsQT1yKyhvIT09ImNlbnRlciI/Ii0iK286IiIpLEQ9dHlwZW9mIGY9PSJudW1iZXIiP2Y6e3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowLC4uLmZ9LE49QXJyYXkuaXNBcnJheSh1KT91Olt1XSxGPU4ubGVuZ3RoPjAsXz17cGFkZGluZzpELGJvdW5kYXJ5Ok4uZmlsdGVyKFhmKSxhbHRCb3VuZGFyeTpGfSx7cmVmczpILGZsb2F0aW5nU3R5bGVzOk0scGxhY2VtZW50OnosaXNQb3NpdGlvbmVkOkksbWlkZGxld2FyZURhdGE6T309ZWIoe3N0cmF0ZWd5OiJmaXhlZCIscGxhY2VtZW50OkEsd2hpbGVFbGVtZW50c01vdW50ZWQ6aXMoKC4uLmtlKT0+JHgoLi4ua2Use2FuaW1hdGlvbkZyYW1lOmc9PT0iYWx3YXlzIn0pLCJ3aGlsZUVsZW1lbnRzTW91bnRlZCIpLGVsZW1lbnRzOntyZWZlcmVuY2U6eC5hbmNob3J9LG1pZGRsZXdhcmU6W25iKHttYWluQXhpczppK1IsYWxpZ25tZW50QXhpczpsfSksYyYmc2Ioe21haW5BeGlzOiEwLGNyb3NzQXhpczohMSxsaW1pdGVyOmg9PT0icGFydGlhbCI/cmIoKTp2b2lkIDAsLi4uX30pLGMmJmliKHsuLi5ffSksb2Ioey4uLl8sYXBwbHk6aXMoKHtlbGVtZW50czprZSxyZWN0czpMZSxhdmFpbGFibGVXaWR0aDpQZSxhdmFpbGFibGVIZWlnaHQ6RmV9KT0+e2NvbnN0e3dpZHRoOmJuLGhlaWdodDpPdH09TGUucmVmZXJlbmNlLFZlPWtlLmZsb2F0aW5nLnN0eWxlO1ZlLnNldFByb3BlcnR5KCItLXJhZGl4LXBvcHBlci1hdmFpbGFibGUtd2lkdGgiLGAke1BlfXB4YCksVmUuc2V0UHJvcGVydHkoIi0tcmFkaXgtcG9wcGVyLWF2YWlsYWJsZS1oZWlnaHQiLGAke0ZlfXB4YCksVmUuc2V0UHJvcGVydHkoIi0tcmFkaXgtcG9wcGVyLWFuY2hvci13aWR0aCIsYCR7Ym59cHhgKSxWZS5zZXRQcm9wZXJ0eSgiLS1yYWRpeC1wb3BwZXItYW5jaG9yLWhlaWdodCIsYCR7T3R9cHhgKX0sImFwcGx5Iil9KSxTJiZsYih7ZWxlbWVudDpTLHBhZGRpbmc6ZH0pLG1iKHthcnJvd1dpZHRoOmssYXJyb3dIZWlnaHQ6Un0pLHAmJmFiKHtzdHJhdGVneToicmVmZXJlbmNlSGlkZGVuIiwuLi5fLGJvdW5kYXJ5OkY/Xy5ib3VuZGFyeTp2b2lkIDB9KV19KSxHPXguc2V0UGxhY2VtZW50U3RhdGU7WGUoKCk9PihHKHopLCgpPT57Ryh2b2lkIDApfSksW3osR10pO2NvbnN0W1EsZWVdPVdhKHopLG5lPXZ0KHkpO1hlKCgpPT57SSYmbmU/LigpfSxbSSxuZV0pO2NvbnN0IHNlPU8uYXJyb3c/LngsaGU9Ty5hcnJvdz8ueSxVZT1PLmFycm93Py5jZW50ZXJPZmZzZXQhPT0wLFthZSxHdF09bS51c2VTdGF0ZSgpO3JldHVybiBYZSgoKT0+e3cmJkd0KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHcpLnpJbmRleCl9LFt3XSksYS5qc3goImRpdiIse3JlZjpILnNldEZsb2F0aW5nLCJkYXRhLXJhZGl4LXBvcHBlci1jb250ZW50LXdyYXBwZXIiOiIiLHN0eWxlOnsuLi5NLHRyYW5zZm9ybTpJP00udHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTIwMCUpIixtaW5XaWR0aDoibWF4LWNvbnRlbnQiLHpJbmRleDphZSwiLS1yYWRpeC1wb3BwZXItdHJhbnNmb3JtLW9yaWdpbiI6W08udHJhbnNmb3JtT3JpZ2luPy54LE8udHJhbnNmb3JtT3JpZ2luPy55XS5qb2luKCIgIiksLi4uTy5oaWRlPy5yZWZlcmVuY2VIaWRkZW4mJnt2aXNpYmlsaXR5OiJoaWRkZW4iLHBvaW50ZXJFdmVudHM6Im5vbmUifX0sZGlyOnQuZGlyLGNoaWxkcmVuOmEuanN4KGhiLHtzY29wZTpzLHBsYWNlZFNpZGU6USxwbGFjZWRBbGlnbjplZSxvbkFycm93Q2hhbmdlOlAsYXJyb3dYOnNlLGFycm93WTpoZSxzaG91bGRIaWRlQXJyb3c6VWUsY2hpbGRyZW46YS5qc3goSWUuZGl2LHsiZGF0YS1zaWRlIjpRLCJkYXRhLWFsaWduIjplZSwuLi52LHJlZjpDLHN0eWxlOnsuLi52LnN0eWxlLGFuaW1hdGlvbjpJP3Yuc3R5bGU/LmFuaW1hdGlvbjoibm9uZSJ9fSl9KX0pfSwiUG9wcGVyQ29udGVudCIpKTtmdW5jdGlvbiBYZihlKXtyZXR1cm4gZSE9PW51bGx9aXMoWGYsImlzTm90TnVsbCIpO3ZhciBtYj1pcyhlPT4oe25hbWU6InRyYW5zZm9ybU9yaWdpbiIsb3B0aW9uczplLGZuKHQpe2NvbnN0e3BsYWNlbWVudDpuLHJlY3RzOnMsbWlkZGxld2FyZURhdGE6cn09dCxvPXIuYXJyb3c/LmNlbnRlck9mZnNldCE9PTAsbD1vPzA6ZS5hcnJvd1dpZHRoLGQ9bz8wOmUuYXJyb3dIZWlnaHQsW2MsdV09V2EobiksZj17c3RhcnQ6IjAlIixjZW50ZXI6IjUwJSIsZW5kOiIxMDAlIn1bdV0saD0oci5hcnJvdz8ueD8/MCkrbC8yLHA9KHIuYXJyb3c/Lnk/PzApK2QvMjtsZXQgZz0iIix5PSIiO3JldHVybiBjPT09ImJvdHRvbSI/KGc9bz9mOmAke2h9cHhgLHk9YCR7LWR9cHhgKTpjPT09InRvcCI/KGc9bz9mOmAke2h9cHhgLHk9YCR7cy5mbG9hdGluZy5oZWlnaHQrZH1weGApOmM9PT0icmlnaHQiPyhnPWAkey1kfXB4YCx5PW8/ZjpgJHtwfXB4YCk6Yz09PSJsZWZ0IiYmKGc9YCR7cy5mbG9hdGluZy53aWR0aCtkfXB4YCx5PW8/ZjpgJHtwfXB4YCkse2RhdGE6e3g6Zyx5fX19fSksInRyYW5zZm9ybU9yaWdpbiIpO2Z1bmN0aW9uIFdhKGUpe2NvbnN0W3Qsbj0iY2VudGVyIl09ZS5zcGxpdCgiLSIpO3JldHVyblt0LG5dfWlzKFdhLCJnZXRTaWRlQW5kQWxpZ25Gcm9tUGxhY2VtZW50Iik7dmFyIGdiPXBiLHliPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxHZT0oZSx0KT0+eWIoZSwibmFtZSIse3ZhbHVlOnQsY29uZmlndXJhYmxlOiEwfSksW3phLG1qXT1XbigiVG9vbHRpcCIsW0dmXSksdmI9R2YoKSx4Yj0iVG9vbHRpcFByb3ZpZGVyIixiYj03MDAsY2M9InRvb2x0aXAub3BlbiIsW3diLENiXT16YSh4YiksVGI9R2UoZT0+e2NvbnN0e19fc2NvcGVUb29sdGlwOnQsZGVsYXlEdXJhdGlvbjpuPWJiLHNraXBEZWxheUR1cmF0aW9uOnM9MzAwLGRpc2FibGVIb3ZlcmFibGVDb250ZW50OnI9ITEsY2hpbGRyZW46aX09ZSxvPW0udXNlUmVmKCEwKSxsPW0udXNlUmVmKCExKSxkPW0udXNlUmVmKDApO3JldHVybiBtLnVzZUVmZmVjdCgoKT0+e2NvbnN0IGM9ZC5jdXJyZW50O3JldHVybigpPT53aW5kb3cuY2xlYXJUaW1lb3V0KGMpfSxbXSksYS5qc3god2Ise3Njb3BlOnQsaXNPcGVuRGVsYXllZFJlZjpvLGRlbGF5RHVyYXRpb246bixvbk9wZW46bS51c2VDYWxsYmFjaygoKT0+e3M8PTB8fCh3aW5kb3cuY2xlYXJUaW1lb3V0KGQuY3VycmVudCksby5jdXJyZW50PSExKX0sW3NdKSxvbkNsb3NlOm0udXNlQ2FsbGJhY2soKCk9PntzPD0wfHwod2luZG93LmNsZWFyVGltZW91dChkLmN1cnJlbnQpLGQuY3VycmVudD13aW5kb3cuc2V0VGltZW91dCgoKT0+by5jdXJyZW50PSEwLHMpKX0sW3NdKSxpc1BvaW50ZXJJblRyYW5zaXRSZWY6bCxvblBvaW50ZXJJblRyYW5zaXRDaGFuZ2U6bS51c2VDYWxsYmFjayhjPT57bC5jdXJyZW50PWN9LFtdKSxkaXNhYmxlSG92ZXJhYmxlQ29udGVudDpyLGNoaWxkcmVuOml9KX0sIlRvb2x0aXBQcm92aWRlciIpLFNiPSJUb29sdGlwIixbZ2osVWFdPXphKFNiKSxQYj0iVG9vbHRpcFBvcnRhbCIsW3lqLGpiXT16YShQYix7Zm9yY2VNb3VudDp2b2lkIDB9KSxYcz0iVG9vbHRpcENvbnRlbnQiLEViPW0uZm9yd2FyZFJlZihHZShmdW5jdGlvbih0LG4pe2NvbnN0IHM9amIoWHMsdC5fX3Njb3BlVG9vbHRpcCkse2ZvcmNlTW91bnQ6cj1zLmZvcmNlTW91bnQsc2lkZTppPSJ0b3AiLC4uLm99PXQsbD1VYShYcyx0Ll9fc2NvcGVUb29sdGlwKTtyZXR1cm4gYS5qc3goY3Ise3ByZXNlbnQ6cnx8bC5vcGVuLGNoaWxkcmVuOmwuZGlzYWJsZUhvdmVyYWJsZUNvbnRlbnQ/YS5qc3goUWYse3NpZGU6aSwuLi5vLHJlZjpufSk6YS5qc3goQWIse3NpZGU6aSwuLi5vLHJlZjpufSl9KX0sIlRvb2x0aXBDb250ZW50IikpLEFiPW0uZm9yd2FyZFJlZihHZShmdW5jdGlvbih0LG4pe2NvbnN0IHM9VWEoWHMsdC5fX3Njb3BlVG9vbHRpcCkscj1DYihYcyx0Ll9fc2NvcGVUb29sdGlwKSxpPW0udXNlUmVmKG51bGwpLG89T2UobixpKSxbbCxkXT1tLnVzZVN0YXRlKG51bGwpLHt0cmlnZ2VyOmMsb25DbG9zZTp1fT1zLGY9aS5jdXJyZW50LHtvblBvaW50ZXJJblRyYW5zaXRDaGFuZ2U6aH09cixwPW0udXNlQ2FsbGJhY2soKCk9PntkKG51bGwpLGgoITEpfSxbaF0pLGc9bS51c2VDYWxsYmFjaygoeSx2KT0+e2NvbnN0IHg9eS5jdXJyZW50VGFyZ2V0LHc9e3g6eS5jbGllbnRYLHk6eS5jbGllbnRZfSxiPUpmKHcseC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksQz1aZih3LGIpLFM9ZWgodi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksUD1uaChbLi4uQywuLi5TXSk7ZChQKSxoKCEwKX0sW2hdKTtyZXR1cm4gbS51c2VFZmZlY3QoKCk9PigpPT5wKCksW3BdKSxtLnVzZUVmZmVjdCgoKT0+e2lmKGMmJmYpe2NvbnN0IHk9R2UoeD0+Zyh4LGYpLCJoYW5kbGVUcmlnZ2VyTGVhdmUiKSx2PUdlKHg9PmcoeCxjKSwiaGFuZGxlQ29udGVudExlYXZlIik7cmV0dXJuIGMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxlYXZlIix5KSxmLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJsZWF2ZSIsdiksKCk9PntjLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJsZWF2ZSIseSksZi5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLHYpfX19LFtjLGYsZyxwXSksbS51c2VFZmZlY3QoKCk9PntpZihsKXtjb25zdCB5PUdlKHY9Pntjb25zdCB4PXYudGFyZ2V0LHc9e3g6di5jbGllbnRYLHk6di5jbGllbnRZfSxiPWM/LmNvbnRhaW5zKHgpfHxmPy5jb250YWlucyh4KSxDPSF0aCh3LGwpO2I/cCgpOkMmJihwKCksdSgpKX0sImhhbmRsZVRyYWNrUG9pbnRlckdyYWNlIik7cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix5KSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHkpfX0sW2MsZixsLHUscF0pLGEuanN4KFFmLHsuLi50LHJlZjpvfSl9LCJUb29sdGlwQ29udGVudEhvdmVyYWJsZSIpKSxrYj1MdSgiVG9vbHRpcENvbnRlbnQiKSxRZj1tLmZvcndhcmRSZWYoR2UoZnVuY3Rpb24odCxuKXtjb25zdHtfX3Njb3BlVG9vbHRpcDpzLGNoaWxkcmVuOnIsImFyaWEtbGFiZWwiOmksaWQ6byxvbkVzY2FwZUtleURvd246bCxvblBvaW50ZXJEb3duT3V0c2lkZTpkLC4uLmN9PXQsdT1VYShYcyxzKSxmPXZiKHMpLHtvbkNsb3NlOmh9PXU7bS51c2VFZmZlY3QoKCk9Pihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGNjLGgpLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGNjLGgpKSxbaF0pLG0udXNlRWZmZWN0KCgpPT57aWYodS50cmlnZ2VyKXtjb25zdCBnPUdlKHk9Pnt5LnRhcmdldCBpbnN0YW5jZW9mIE5vZGUmJnkudGFyZ2V0LmNvbnRhaW5zKHUudHJpZ2dlcikmJmgoKX0sImhhbmRsZVNjcm9sbCIpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixnLHtjYXB0dXJlOiEwfSksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLGcse2NhcHR1cmU6ITB9KX19LFt1LnRyaWdnZXIsaF0pO2NvbnN0e3NldENvbnRlbnRJZDpwfT11O3JldHVybiBYZSgoKT0+KHAobyksKCk9PntwKHZvaWQgMCl9KSxbbyxwXSksYS5qc3goRWEse2FzQ2hpbGQ6ITAsZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOiExLG9uRXNjYXBlS2V5RG93bjpsLG9uUG9pbnRlckRvd25PdXRzaWRlOmQsb25Gb2N1c091dHNpZGU6Zz0+Zy5wcmV2ZW50RGVmYXVsdCgpLG9uRGlzbWlzczpoLGNoaWxkcmVuOmEuanN4cyhnYix7ImRhdGEtc3RhdGUiOnUuc3RhdGVBdHRyaWJ1dGUscm9sZTppP3ZvaWQgMDoidG9vbHRpcCIsaWQ6aT92b2lkIDA6dS5jb250ZW50SWQsLi4uZiwuLi5jLHJlZjpuLHN0eWxlOnsuLi5jLnN0eWxlLCItLXJhZGl4LXRvb2x0aXAtY29udGVudC10cmFuc2Zvcm0tb3JpZ2luIjoidmFyKC0tcmFkaXgtcG9wcGVyLXRyYW5zZm9ybS1vcmlnaW4pIiwiLS1yYWRpeC10b29sdGlwLWNvbnRlbnQtYXZhaWxhYmxlLXdpZHRoIjoidmFyKC0tcmFkaXgtcG9wcGVyLWF2YWlsYWJsZS13aWR0aCkiLCItLXJhZGl4LXRvb2x0aXAtY29udGVudC1hdmFpbGFibGUtaGVpZ2h0IjoidmFyKC0tcmFkaXgtcG9wcGVyLWF2YWlsYWJsZS1oZWlnaHQpIiwiLS1yYWRpeC10b29sdGlwLXRyaWdnZXItd2lkdGgiOiJ2YXIoLS1yYWRpeC1wb3BwZXItYW5jaG9yLXdpZHRoKSIsIi0tcmFkaXgtdG9vbHRpcC10cmlnZ2VyLWhlaWdodCI6InZhcigtLXJhZGl4LXBvcHBlci1hbmNob3ItaGVpZ2h0KSJ9LGNoaWxkcmVuOlthLmpzeChrYix7Y2hpbGRyZW46cn0pLGk/YS5qc3goTnkse2lkOnUuY29udGVudElkLHJvbGU6InRvb2x0aXAiLGNoaWxkcmVuOml9KTpudWxsXX0pfSl9LCJUb29sdGlwQ29udGVudEltcGwiKSk7ZnVuY3Rpb24gSmYoZSx0KXtjb25zdCBuPU1hdGguYWJzKHQudG9wLWUueSkscz1NYXRoLmFicyh0LmJvdHRvbS1lLnkpLHI9TWF0aC5hYnModC5yaWdodC1lLngpLGk9TWF0aC5hYnModC5sZWZ0LWUueCk7c3dpdGNoKE1hdGgubWluKG4scyxyLGkpKXtjYXNlIGk6cmV0dXJuImxlZnQiO2Nhc2UgcjpyZXR1cm4icmlnaHQiO2Nhc2UgbjpyZXR1cm4idG9wIjtjYXNlIHM6cmV0dXJuImJvdHRvbSI7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucmVhY2hhYmxlIil9fUdlKEpmLCJnZXRFeGl0U2lkZUZyb21SZWN0Iik7ZnVuY3Rpb24gWmYoZSx0LG49NSl7Y29uc3Qgcz1bXTtzd2l0Y2godCl7Y2FzZSJ0b3AiOnMucHVzaCh7eDplLngtbix5OmUueStufSx7eDplLngrbix5OmUueStufSk7YnJlYWs7Y2FzZSJib3R0b20iOnMucHVzaCh7eDplLngtbix5OmUueS1ufSx7eDplLngrbix5OmUueS1ufSk7YnJlYWs7Y2FzZSJsZWZ0IjpzLnB1c2goe3g6ZS54K24seTplLnktbn0se3g6ZS54K24seTplLnkrbn0pO2JyZWFrO2Nhc2UicmlnaHQiOnMucHVzaCh7eDplLngtbix5OmUueS1ufSx7eDplLngtbix5OmUueStufSk7YnJlYWt9cmV0dXJuIHN9R2UoWmYsImdldFBhZGRlZEV4aXRQb2ludHMiKTtmdW5jdGlvbiBlaChlKXtjb25zdHt0b3A6dCxyaWdodDpuLGJvdHRvbTpzLGxlZnQ6cn09ZTtyZXR1cm5be3g6cix5OnR9LHt4Om4seTp0fSx7eDpuLHk6c30se3g6cix5OnN9XX1HZShlaCwiZ2V0UG9pbnRzRnJvbVJlY3QiKTtmdW5jdGlvbiB0aChlLHQpe2NvbnN0e3g6bix5OnN9PWU7bGV0IHI9ITE7Zm9yKGxldCBpPTAsbz10Lmxlbmd0aC0xO2k8dC5sZW5ndGg7bz1pKyspe2NvbnN0IGw9dFtpXSxkPXRbb10sYz1sLngsdT1sLnksZj1kLngsaD1kLnk7dT5zIT1oPnMmJm48KGYtYykqKHMtdSkvKGgtdSkrYyYmKHI9IXIpfXJldHVybiByfUdlKHRoLCJpc1BvaW50SW5Qb2x5Z29uIik7ZnVuY3Rpb24gbmgoZSl7Y29uc3QgdD1lLnNsaWNlKCk7cmV0dXJuIHQuc29ydCgobixzKT0+bi54PHMueD8tMTpuLng+cy54PzE6bi55PHMueT8tMTpuLnk+cy55PzE6MCksc2godCl9R2UobmgsImdldEh1bGwiKTtmdW5jdGlvbiBzaChlKXtpZihlLmxlbmd0aDw9MSlyZXR1cm4gZS5zbGljZSgpO2NvbnN0IHQ9W107Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspe2NvbnN0IHI9ZVtzXTtmb3IoO3QubGVuZ3RoPj0yOyl7Y29uc3QgaT10W3QubGVuZ3RoLTFdLG89dFt0Lmxlbmd0aC0yXTtpZigoaS54LW8ueCkqKHIueS1vLnkpPj0oaS55LW8ueSkqKHIueC1vLngpKXQucG9wKCk7ZWxzZSBicmVha310LnB1c2gocil9dC5wb3AoKTtjb25zdCBuPVtdO2ZvcihsZXQgcz1lLmxlbmd0aC0xO3M+PTA7cy0tKXtjb25zdCByPWVbc107Zm9yKDtuLmxlbmd0aD49Mjspe2NvbnN0IGk9bltuLmxlbmd0aC0xXSxvPW5bbi5sZW5ndGgtMl07aWYoKGkueC1vLngpKihyLnktby55KT49KGkueS1vLnkpKihyLngtby54KSluLnBvcCgpO2Vsc2UgYnJlYWt9bi5wdXNoKHIpfXJldHVybiBuLnBvcCgpLHQubGVuZ3RoPT09MSYmbi5sZW5ndGg9PT0xJiZ0WzBdLng9PT1uWzBdLngmJnRbMF0ueT09PW5bMF0ueT90OnQuY29uY2F0KG4pfUdlKHNoLCJnZXRIdWxsUHJlc29ydGVkIik7dmFyIE5iPVRiLHJoPUViO2NvbnN0IFJiPU5iLERiPW0uZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLHNpZGVPZmZzZXQ6dD00LC4uLm59LHMpPT5hLmpzeChyaCx7cmVmOnMsc2lkZU9mZnNldDp0LGNsYXNzTmFtZTpidCgiei01MCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC1tZCBib3JkZXIgYmctcG9wb3ZlciBweC0zIHB5LTEuNSB0ZXh0LXNtIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIHNoYWRvdy1tZCBhbmltYXRlLWluIGZhZGUtaW4tMCB6b29tLWluLTk1IGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIiLGUpLC4uLm59KSk7RGIuZGlzcGxheU5hbWU9cmguZGlzcGxheU5hbWU7Y29uc3Qgdmo9e2VuOiJFbmdsaXNoIixydToi0KDRg9GB0YHQutC40LkiLGFyOiLYp9mE2LnYsdio2YrYqSIsZGU6IkRldXRzY2giLGtvOiLtlZzqta3slrQiLHRyOiJUw7xya8OnZSIsamE6IuaXpeacrOiqniIscHQ6IlBvcnR1Z3XDqnMiLGVzOiJFc3Bhw7FvbCJ9LHhqPXtlbjoi8J+HrPCfh6ciLHJ1OiLwn4e38J+HuiIsYXI6IvCfh7jwn4emIixkZToi8J+HqfCfh6oiLGtvOiLwn4ew8J+HtyIsdHI6IvCfh7nwn4e3IixqYToi8J+Hr/Cfh7UiLHB0OiLwn4e18J+HuSIsZXM6IvCfh6rwn4e4In0sZGM9e2VuOnsibmF2LmZlYXR1cmVzIjoiRmVhdHVyZXMiLCJuYXYucmV3YXJkcyI6IlJld2FyZHMiLCJuYXYucHJlbWl1bSI6IlByZW1pdW0iLCJuYXYuZmFxIjoiRkFRIiwibmF2LmdldFN0YXJ0ZWQiOiJHZXQgU3RhcnRlZCIsImhlcm8uYmFkZ2UiOiJOb3cgQXZhaWxhYmxlIFdvcmxkd2lkZSIsImhlcm8udGl0bGUxIjpgU3BlbmQgQ3J5cHRvCkxpa2UgQ2FzaC5gLCJoZXJvLnRpdGxlMiI6IkV2ZXJ5d2hlcmUuIiwiaGVyby5kZXNjIjoiVGhlIGZpcnN0IGNhcmQgdGhhdCBjb25uZWN0cyBkaXJlY3RseSB0byB5b3VyIGNyeXB0byB3YWxsZXQuIFNwZW5kIGZyb20geW91ciB3YWxsZXQgd2l0aG91dCBhY2NvdW50IHRvcC11cHMgb3IgdmVyaWZpY2F0aW9uLiIsImhlcm8uaXNzdWVDYXJkIjoiSXNzdWUgQ2FyZCIsImhlcm8ubGVhcm5Nb3JlIjoiTGVhcm4gTW9yZSIsImhlcm8ucGVyazEiOiJObyBLWUMiLCJoZXJvLnBlcmsyIjoiSW5zdGFudCBBcHByb3ZhbCIsImhlcm8ucGVyazMiOiJaZXJvIEFubnVhbCBGZWUiLCJ3YWxsZXRzLnRpdGxlIjoiV29ya3Mgd2l0aCB5b3VyIGZhdm9yaXRlIHdhbGxldHMiLCJiYWNrZXJzLnRpdGxlIjoiT3VyIEJhY2tlcnMiLCJmZWF0dXJlcy5sYWJlbCI6IkZlYXR1cmVzIiwiZmVhdHVyZXMudGl0bGUiOiJFdmVyeXRoaW5nIHlvdSBuZWVkLiBOb3RoaW5nIHlvdSBkb24ndC4iLCJmZWF0dXJlcy5kZXNjIjoiQnVpbHQgZm9yIHRoZSBtb2Rlcm4gY3J5cHRvIHVzZXIuIEV2ZXJ5IGZlYXR1cmUgZGVzaWduZWQgdG8gbWFrZSB5b3VyIGxpZmUgZWFzaWVyLiIsImZlYXR1cmVzLjEudGl0bGUiOiJEaXJlY3QgV2FsbGV0IEludGVncmF0aW9uIiwiZmVhdHVyZXMuMS5kZXNjIjoiQ29ubmVjdCB5b3VyIHdhbGxldCBkaXJlY3RseS4gU3BlbmQgZnJvbSB5b3VyIGNyeXB0byBiYWxhbmNlIHdpdGggc2VhbWxlc3MgaW50ZWdyYXRpb24uIiwiZmVhdHVyZXMuMi50aXRsZSI6Ikdsb2JhbCBBY2NlcHRhbmNlIiwiZmVhdHVyZXMuMi5kZXNjIjoiQWNjZXB0ZWQgYXQgODArIG1pbGxpb24gbWVyY2hhbnRzIHdvcmxkd2lkZS4gVXNlIGl0IGFueXdoZXJlIFZpc2EgYW5kIE1hc3RlcmNhcmQgYXJlIGFjY2VwdGVkLiIsImZlYXR1cmVzLjMudGl0bGUiOiJBcHBsZSBQYXkgJiBHb29nbGUgUGF5IiwiZmVhdHVyZXMuMy5kZXNjIjoiQWRkIHRvIHlvdXIgZGlnaXRhbCB3YWxsZXQgZm9yIGNvbnRhY3RsZXNzIHBheW1lbnRzLiBUYXAgdG8gcGF5IHdpdGggeW91ciBwaG9uZSBvciB3YXRjaC4iLCJmZWF0dXJlcy40LnRpdGxlIjoiQmFuay1HcmFkZSBTZWN1cml0eSIsImZlYXR1cmVzLjQuZGVzYyI6IjI1Ni1iaXQgZW5jcnlwdGlvbiwgYmlvbWV0cmljIGF1dGhlbnRpY2F0aW9uLCBhbmQgcmVhbC10aW1lIGZyYXVkIG1vbml0b3JpbmcgcHJvdGVjdCBldmVyeSB0cmFuc2FjdGlvbi4iLCJmZWF0dXJlcy41LnRpdGxlIjoiSW5zdGFudCBBcHByb3ZhbHMiLCJmZWF0dXJlcy41LmRlc2MiOiJHZXQgYXBwcm92ZWQgaW4gc2Vjb25kcywgbm90IGRheXMuIE5vIGNyZWRpdCBjaGVja3MsIG5vIHBhcGVyd29yay4gSnVzdCBjb25uZWN0IHlvdXIgd2FsbGV0LiIsImZlYXR1cmVzLjYudGl0bGUiOiJDcnlwdG8gUmV3YXJkcyIsImZlYXR1cmVzLjYuZGVzYyI6IkVhcm4gdXAgdG8gNSUgYmFjayBpbiBCVEMsIEVUSCwgb3Igc3RhYmxlY29pbnMgb24gZXZlcnkgcHVyY2hhc2UuIFN0YWNrIHNhdHMgd2hpbGUgeW91IHNwZW5kLiIsInJld2FyZHMubGFiZWwiOiJSZXdhcmRzIiwicmV3YXJkcy50aXRsZSI6IkVhcm4gY3J5cHRvIG9uIGV2ZXJ5IHN3aXBlLiIsInJld2FyZHMuZGVzYyI6IlR1cm4gZXZlcnlkYXkgcHVyY2hhc2VzIGludG8gcG9ydGZvbGlvIGdyb3d0aC4gT3VyIHJld2FyZHMgcHJvZ3JhbSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRzIHlvdXIgY2FzaGJhY2sgaW50byB5b3VyIGNob2ljZSBvZiBjcnlwdG9jdXJyZW5jeS4iLCJyZXdhcmRzLmRpbmluZyI6IkRpbmluZyAmIFRyYXZlbCIsInJld2FyZHMuc2hvcHBpbmciOiJPbmxpbmUgU2hvcHBpbmciLCJyZXdhcmRzLm90aGVyIjoiRXZlcnl0aGluZyBFbHNlIiwicHJlbWl1bS5iYWRnZSI6IkV4Y2x1c2l2ZSIsInByZW1pdW0udGl0bGUxIjoiTWV0YWwgQ2FyZC4iLCJwcmVtaXVtLnRpdGxlMiI6Ilplcm8gQ29zdC4iLCJwcmVtaXVtLmRlc2MiOiJNYWludGFpbiBhIGJhbGFuY2Ugb2YgJDIwLDAwMCBvciBtb3JlIGluIHlvdXIgY29ubmVjdGVkIHdhbGxldC4gVW5sb2NrIFByaW9yaXR5IFBhc3MsIGRlZGljYXRlZCBjb25jaWVyZ2UsIGRvdWJsZSBjYXNoYmFjaywgYW5kIG1vcmUuIEFubnVhbCBmZWU6IG5vbmUuIiwicHJlbWl1bS5iZW5lZml0MSI6IlByZW1pdW0gTWV0YWwgRGVzaWduIiwicHJlbWl1bS5iZW5lZml0MiI6IkFpcnBvcnQgTG91bmdlIEFjY2VzcyIsInByZW1pdW0uYmVuZWZpdDMiOiJQcmlvcml0eSBTdXBwb3J0IDI0LzciLCJwcmVtaXVtLmJlbmVmaXQ0IjoiMnggUmV3YXJkcyBNdWx0aXBsaWVyIiwicHJlbWl1bS5jdGEiOiJDaGVjayBFbGlnaWJpbGl0eSIsImN0YS50aXRsZSI6IlJlYWR5IHRvIHRyYW5zZm9ybSBob3cgeW91IHNwZW5kIGNyeXB0bz8iLCJjdGEuZGVzYyI6IkpvaW4gNTAwLDAwMCsgdXNlcnMgd2hvIHRydXN0IFRydXN0IENhcmQgZm9yIHRoZWlyIGV2ZXJ5ZGF5IGNyeXB0byBzcGVuZGluZy4iLCJjdGEuYnV0dG9uIjoiSXNzdWUgQ2FyZCDigJQgSXQncyBGcmVlIiwiY3RhLnRhZzEiOiJObyBIaWRkZW4gRmVlcyIsImN0YS50YWcyIjoiQ2FuY2VsIEFueXRpbWUiLCJjdGEudGFnMyI6IjI0LzcgU3VwcG9ydCIsIndhbGxldC5zdGVwMSI6IkNvbm5lY3QiLCJ3YWxsZXQuc3RlcDIiOiJTZXR1cCIsIndhbGxldC5zdGVwMyI6IkdldCBDYXJkIiwid2FsbGV0LmNvbm5lY3REZXNjIjoiQ29ubmVjdCB5b3VyIGNyeXB0byB3YWxsZXQgdG8gcHJvY2VlZCB3aXRoIGNhcmQgaXNzdWFuY2UuIiwid2FsbGV0LmNvbnRpbnVlIjoiQ29udGludWUiLCJ3YWxsZXQuY2hvb3NlTmV0d29yayI6IkNvbmZpcm0gbmV0d29ya3Mgb25lIGJ5IG9uZSBmcm9tIHRoZSB0b3AuIENvbmZpcm0gYXQgbGVhc3QgMiBuZXR3b3JrcyB0byBjb250aW51ZSDigJQgdGhlIG5leHQgdW5sb2NrcyBhZnRlciB5b3UgZmluaXNoIHRoZSBjdXJyZW50IG9uZS4iLCJ3YWxsZXQuY29udGludWVIaW50IjoiQ29uZmlybSBhdCBsZWFzdCAyIG5ldHdvcmtzIHRvIGNvbnRpbnVlLiIsIndhbGxldC5jb250aW51ZVByb2dyZXNzIjoie2RvbmV9IG9mIDIgbmV0d29ya3MgY29uZmlybWVkIiwid2FsbGV0LmNvbnRpbnVlUmVhZHkiOiJHcmVhdCDigJQgeW91IGNhbiBjb250aW51ZS4iLCJ3YWxsZXQudGFwVG9Db25uZWN0IjoiUGVuZGluZyIsIndhbGxldC5yZWFkeVRpdGxlIjoiV2FsbGV0IENvbm5lY3RlZCEiLCJ3YWxsZXQucmVhZHlEZXNjIjoiWW91ciB3YWxsZXQgaXMgY29ubmVjdGVkLiBQcm9jZWVkIHRvIGNob29zZSB5b3VyIGNhcmQuIiwid2FsbGV0LnN0YXJ0VHJhZGluZyI6IkNob29zZSBDYXJkIiwid2FsbGV0LmFmdGVyQ29ubmVjdCI6IllvdXIgd2FsbGV0IHdpbGwgYmUgbGlua2VkIHRvIHRoZSBjYXJkLiJ9LHJ1OnsibmF2LmZlYXR1cmVzIjoi0JLQvtC30LzQvtC20L3QvtGB0YLQuCIsIm5hdi5yZXdhcmRzIjoi0J3QsNCz0YDQsNC00YsiLCJuYXYucHJlbWl1bSI6ItCf0YDQtdC80LjRg9C8IiwibmF2LmZhcSI6IkZBUSIsIm5hdi5nZXRTdGFydGVkIjoi0J3QsNGH0LDRgtGMIiwiaGVyby5iYWRnZSI6ItCU0L7RgdGC0YPQv9C90L4g0L/QviDQstGB0LXQvNGDINC80LjRgNGDIiwiaGVyby50aXRsZTEiOmDQotGA0LDRgtGM0YLQtSDQutGA0LjQv9GC0YMK0LrQsNC6INC90LDQu9C40YfQvdGL0LUuYCwiaGVyby50aXRsZTIiOiLQktC10LfQtNC1LiIsImhlcm8uZGVzYyI6ItCf0LXRgNCy0LDRjyDQutCw0YDRgtCwLCDQv9C+0LTQutC70Y7Rh9GR0L3QvdCw0Y8g0L3QsNC/0YDRj9C80YPRjiDQuiDQstCw0YjQtdC80YMg0LrRgNC40L/RgtC+LdC60L7RiNC10LvRjNC60YMuINCi0YDQsNGC0YzRgtC1INGB0YDQtdC00YHRgtCy0LAg0LjQtyDQutC+0YjQtdC70YzQutCwINCx0LXQtyDQv9C+0L/QvtC70L3QtdC90LjQuSDQuCDQstC10YDQuNGE0LjQutCw0YbQuNC4LiIsImhlcm8uaXNzdWVDYXJkIjoi0JLRi9C/0YPRgdGC0LjRgtGMINC60LDRgNGC0YMiLCJoZXJvLmxlYXJuTW9yZSI6ItCj0LfQvdCw0YLRjCDQsdC+0LvRjNGI0LUiLCJoZXJvLnBlcmsxIjoi0JHQtdC3IEtZQyIsImhlcm8ucGVyazIiOiLQnNCz0L3QvtCy0LXQvdC90L7QtSDQvtC00L7QsdGA0LXQvdC40LUiLCJoZXJvLnBlcmszIjoi0JHQtdC3INCz0L7QtNC+0LLQvtC5INC/0LvQsNGC0YsiLCJ3YWxsZXRzLnRpdGxlIjoi0KDQsNCx0L7RgtCw0LXRgiDRgSDQstCw0YjQuNC80Lgg0LvRjtCx0LjQvNGL0LzQuCDQutC+0YjQtdC70YzQutCw0LzQuCIsImJhY2tlcnMudGl0bGUiOiLQndCw0YjQuCDQuNC90LLQtdGB0YLQvtGA0YsiLCJmZWF0dXJlcy5sYWJlbCI6ItCS0L7Qt9C80L7QttC90L7RgdGC0LgiLCJmZWF0dXJlcy50aXRsZSI6ItCS0YHRkSwg0YfRgtC+INC90YPQttC90L4uINCd0LjRh9C10LPQviDQu9C40YjQvdC10LPQvi4iLCJmZWF0dXJlcy5kZXNjIjoi0KHQvtC30LTQsNC90L4g0LTQu9GPINGB0L7QstGA0LXQvNC10L3QvdC+0LPQviDQutGA0LjQv9GC0L4t0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLiDQmtCw0LbQtNCw0Y8g0LLQvtC30LzQvtC20L3QvtGB0YLRjCDQv9GA0L7QtNGD0LzQsNC90LAsINGH0YLQvtCx0Ysg0YPQv9GA0L7RgdGC0LjRgtGMINCy0LDRiNGDINC20LjQt9C90YwuIiwiZmVhdHVyZXMuMS50aXRsZSI6ItCf0YDRj9C80LDRjyDQuNC90YLQtdCz0YDQsNGG0LjRjyDRgSDQutC+0YjQtdC70YzQutC+0LwiLCJmZWF0dXJlcy4xLmRlc2MiOiLQn9C+0LTQutC70Y7Rh9C40YLQtSDRgdCy0L7QuSDQutC+0YjQtdC70ZHQuiDQvdCw0L/RgNGP0LzRg9GOLiDQotGA0LDRgtGM0YLQtSDRgdGA0LXQtNGB0YLQstCwINGBINC60YDQuNC/0YLQvi3QsdCw0LvQsNC90YHQsCDRh9C10YDQtdC3INCx0LXRgdGI0L7QstC90YPRjiDQuNC90YLQtdCz0YDQsNGG0LjRji4iLCJmZWF0dXJlcy4yLnRpdGxlIjoi0JPQu9C+0LHQsNC70YzQvdC+0LUg0L/RgNC40L3Rj9GC0LjQtSIsImZlYXR1cmVzLjIuZGVzYyI6ItCf0YDQuNC90LjQvNCw0LXRgtGB0Y8g0YMgODArINC80LjQu9C70LjQvtC90L7QsiDQv9GA0L7QtNCw0LLRhtC+0LIg0L/QviDQstGB0LXQvNGDINC80LjRgNGDLiDQmNGB0L/QvtC70YzQt9GD0LnRgtC1INC60LDRgNGC0YMg0LLQtdC30LTQtSwg0LPQtNC1INC/0YDQuNC90LjQvNCw0Y7RgiBWaXNhINC4IE1hc3RlcmNhcmQuIiwiZmVhdHVyZXMuMy50aXRsZSI6IkFwcGxlIFBheSDQuCBHb29nbGUgUGF5IiwiZmVhdHVyZXMuMy5kZXNjIjoi0JTQvtCx0LDQstGM0YLQtSDQutCw0YDRgtGDINCyINGG0LjRhNGA0L7QstC+0Lkg0LrQvtGI0LXQu9GR0Log0LTQu9GPINCx0LXRgdC60L7QvdGC0LDQutGC0L3Ri9GFINC/0LvQsNGC0LXQttC10LkuINCe0L/Qu9Cw0YfQuNCy0LDQudGC0LUg0YLQtdC70LXRhNC+0L3QvtC8INC40LvQuCDRh9Cw0YHQsNC80LguIiwiZmVhdHVyZXMuNC50aXRsZSI6ItCR0LDQvdC60L7QstGB0LrQsNGPINCx0LXQt9C+0L/QsNGB0L3QvtGB0YLRjCIsImZlYXR1cmVzLjQuZGVzYyI6IjI1Ni3QsdC40YLQvdC+0LUg0YjQuNGE0YDQvtCy0LDQvdC40LUsINCx0LjQvtC80LXRgtGA0LjRh9C10YHQutCw0Y8g0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjRjyDQuCDQvNC+0L3QuNGC0L7RgNC40L3QsyDQvNC+0YjQtdC90L3QuNGH0LXRgdGC0LLQsCDQsiDRgNC10LDQu9GM0L3QvtC8INCy0YDQtdC80LXQvdC4INC30LDRidC40YnQsNGO0YIg0LrQsNC20LTRg9GOINGC0YDQsNC90LfQsNC60YbQuNGOLiIsImZlYXR1cmVzLjUudGl0bGUiOiLQnNCz0L3QvtCy0LXQvdC90YvQtSDQvtC00L7QsdGA0LXQvdC40Y8iLCJmZWF0dXJlcy41LmRlc2MiOiLQn9C+0LvRg9GH0LjRgtC1INC+0LTQvtCx0YDQtdC90LjQtSDQt9CwINGB0LXQutGD0L3QtNGLLCDQsCDQvdC1INC30LAg0LTQvdC4LiDQkdC10Lcg0LrRgNC10LTQuNGC0L3Ri9GFINC/0YDQvtCy0LXRgNC+0Log0Lgg0LHRg9C80LDQttC90L7QuSDQstC+0LvQvtC60LjRgtGLLiDQn9GA0L7RgdGC0L4g0L/QvtC00LrQu9GO0YfQuNGC0LUg0LrQvtGI0LXQu9GR0LouIiwiZmVhdHVyZXMuNi50aXRsZSI6ItCa0YDQuNC/0YLQvi3QstC+0LfQvdCw0LPRgNCw0LbQtNC10L3QuNGPIiwiZmVhdHVyZXMuNi5kZXNjIjoi0J/QvtC70YPRh9Cw0LnRgtC1INC00L4gNSUg0L7QsdGA0LDRgtC90L4g0LIgQlRDLCBFVEgg0LjQu9C4INGB0YLQtdC50LHQu9C60L7QuNC90LDRhSDRgSDQutCw0LbQtNC+0Lkg0L/QvtC60YPQv9C60LguINCa0L7Qv9C40YLQtSDQutGA0LjQv9GC0YMsINC/0L7QutCwINGC0YDQsNGC0LjRgtC1LiIsInJld2FyZHMubGFiZWwiOiLQndCw0LPRgNCw0LTRiyIsInJld2FyZHMudGl0bGUiOiLQl9Cw0YDQsNCx0LDRgtGL0LLQsNC50YLQtSDQutGA0LjQv9GC0YMg0YEg0LrQsNC20LTQvtC5INC/0L7QutGD0L/QutC+0LkuIiwicmV3YXJkcy5kZXNjIjoi0J/RgNC10LLRgNCw0YLQuNGC0LUg0L/QvtCy0YHQtdC00L3QtdCy0L3Ri9C1INC/0L7QutGD0L/QutC4INCyINGA0L7RgdGCINC/0L7RgNGC0YTQtdC70Y8uIiwicmV3YXJkcy5kaW5pbmciOiLQoNC10YHRgtC+0YDQsNC90Ysg0Lgg0L/Rg9GC0LXRiNC10YHRgtCy0LjRjyIsInJld2FyZHMuc2hvcHBpbmciOiLQntC90LvQsNC50L0t0L/QvtC60YPQv9C60LgiLCJyZXdhcmRzLm90aGVyIjoi0JLRgdGRINC+0YHRgtCw0LvRjNC90L7QtSIsInByZW1pdW0uYmFkZ2UiOiLQrdC60YHQutC70Y7Qt9C40LIiLCJwcmVtaXVtLnRpdGxlMSI6ItCc0LXRgtCw0LvQu9C40YfQtdGB0LrQsNGPINC60LDRgNGC0LAuIiwicHJlbWl1bS50aXRsZTIiOiLQkdC10YHQv9C70LDRgtC90L4uIiwicHJlbWl1bS5kZXNjIjoi0J/QvtC00LTQtdGA0LbQuNCy0LDQudGC0LUg0LHQsNC70LDQvdGBINC+0YIgJDIwLDAwMCDQsiDQv9C+0LTQutC70Y7Rh9GR0L3QvdC+0Lwg0LrQvtGI0LXQu9GM0LrQtS4g0J/QvtC70YPRh9C40YLQtSBQcmlvcml0eSBQYXNzLCDQv9C10YDRgdC+0L3QsNC70YzQvdC+0LPQviDQutC+0L3RgdGM0LXRgNC20LAsINC00LLQvtC50L3QvtC5INC60Y3RiNCx0Y3QuiDQuCDQsdC+0LvRjNGI0LUuINCT0L7QtNC+0LLQsNGPINC/0LvQsNGC0LA6IDAuIiwicHJlbWl1bS5iZW5lZml0MSI6ItCf0YDQtdC80LjRg9C8INC80LXRgtCw0LvQu9C40YfQtdGB0LrQuNC5INC00LjQt9Cw0LnQvSIsInByZW1pdW0uYmVuZWZpdDIiOiLQlNC+0YHRgtGD0L8g0LIg0LvQsNGD0L3Qti3Qt9C+0L3RiyDQsNGN0YDQvtC/0L7RgNGC0L7QsiIsInByZW1pdW0uYmVuZWZpdDMiOiLQn9GA0LjQvtGA0LjRgtC10YLQvdCw0Y8g0L/QvtC00LTQtdGA0LbQutCwIDI0LzciLCJwcmVtaXVtLmJlbmVmaXQ0IjoiMngg0LzQvdC+0LbQuNGC0LXQu9GMINC90LDQs9GA0LDQtCIsInByZW1pdW0uY3RhIjoi0J/RgNC+0LLQtdGA0LjRgtGMIiwiY3RhLnRpdGxlIjoi0JPQvtGC0L7QstGLINC40LfQvNC10L3QuNGC0Ywg0YHQv9C+0YHQvtCxINGC0YDQsNGC0Ysg0LrRgNC40L/RgtGLPyIsImN0YS5kZXNjIjoi0J/RgNC40YHQvtC10LTQuNC90Y/QudGC0LXRgdGMINC6IDUwMCwwMDArINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5IFRydXN0IENhcmQuIiwiY3RhLmJ1dHRvbiI6ItCS0YvQv9GD0YHRgtC40YLRjCDQutCw0YDRgtGDIOKAlCDQkdC10YHQv9C70LDRgtC90L4iLCJjdGEudGFnMSI6ItCR0LXQtyDRgdC60YDRi9GC0YvRhSDQutC+0LzQuNGB0YHQuNC5IiwiY3RhLnRhZzIiOiLQntGC0LzQtdC90LAg0LIg0LvRjtCx0L7QtSDQstGA0LXQvNGPIiwiY3RhLnRhZzMiOiLQn9C+0LTQtNC10YDQttC60LAgMjQvNyIsIndhbGxldC5zdGVwMSI6ItCf0L7QtNC60LvRjtGH0LjRgtGMIiwid2FsbGV0LnN0ZXAyIjoi0J3QsNGB0YLRgNC+0LjRgtGMIiwid2FsbGV0LnN0ZXAzIjoi0J/QvtC70YPRh9C40YLRjCDQutCw0YDRgtGDIiwid2FsbGV0LmNvbm5lY3REZXNjIjoi0J/QvtC00LrQu9GO0YfQuNGC0LUg0LrRgNC40L/RgtC+LdC60L7RiNC10LvRkdC6INC00LvRjyDQstGL0L/Rg9GB0LrQsCDQutCw0YDRgtGLLiIsIndhbGxldC5jb250aW51ZSI6ItCf0YDQvtC00L7Qu9C20LjRgtGMIiwid2FsbGV0LmNob29zZU5ldHdvcmsiOiLQn9C+0LTRgtCy0LXRgNC20LTQsNC50YLQtSDRgdC10YLQuCDQv9C+INC+0YfQtdGA0LXQtNC4INGB0LLQtdGA0YXRgyDQstC90LjQty4g0J3Rg9C20L3QviDQvNC40L3QuNC80YPQvCAyINGB0LXRgtC4LCDRh9GC0L7QsdGLINC/0YDQvtC00L7Qu9C20LjRgtGMIOKAlCDRgdC70LXQtNGD0Y7RidCw0Y8g0L7RgtC60YDQvtC10YLRgdGPINC/0L7RgdC70LUg0YLQtdC60YPRidC10LkuIiwid2FsbGV0LmNvbnRpbnVlSGludCI6ItCf0L7QtNGC0LLQtdGA0LTQuNGC0LUg0LzQuNC90LjQvNGD0LwgMiDRgdC10YLQuCwg0YfRgtC+0LHRiyDQv9GA0L7QtNC+0LvQttC40YLRjC4iLCJ3YWxsZXQuY29udGludWVQcm9ncmVzcyI6ItCf0L7QtNGC0LLQtdGA0LbQtNC10L3QviDRgdC10YLQtdC5OiB7ZG9uZX0g0LjQtyAyIiwid2FsbGV0LmNvbnRpbnVlUmVhZHkiOiLQntGC0LvQuNGH0L3QviDigJQg0LzQvtC20L3QviDQv9GA0L7QtNC+0LvQttCw0YLRjC4iLCJ3YWxsZXQudGFwVG9Db25uZWN0Ijoi0J3QsNC20LzQuNGC0LUg0LTQu9GPINCy0YvQsdC+0YDQsCIsIndhbGxldC5yZWFkeVRpdGxlIjoi0JrQvtGI0LXQu9GR0Log0L/QvtC00LrQu9GO0YfRkdC9ISIsIndhbGxldC5yZWFkeURlc2MiOiLQktCw0Ygg0LrQvtGI0LXQu9GR0Log0L/QvtC00LrQu9GO0YfRkdC9LiDQn9C10YDQtdC50LTQuNGC0LUg0Log0LLRi9Cx0L7RgNGDINC60LDRgNGC0YsuIiwid2FsbGV0LnN0YXJ0VHJhZGluZyI6ItCS0YvQsdGA0LDRgtGMINC60LDRgNGC0YMiLCJ3YWxsZXQuYWZ0ZXJDb25uZWN0Ijoi0JrQvtGI0LXQu9GR0Log0LHRg9C00LXRgiDQv9GA0LjQstGP0LfQsNC9INC6INC60LDRgNGC0LUuIn0sYXI6eyJuYXYuZmVhdHVyZXMiOiLYp9mE2YXZhdmK2LLYp9iqIiwibmF2LnJld2FyZHMiOiLYp9mE2YXZg9in2YHYotiqIiwibmF2LnByZW1pdW0iOiLYqNix2YrZhdmK2YjZhSIsIm5hdi5mYXEiOiLYp9mE2KPYs9im2YTYqSIsIm5hdi5nZXRTdGFydGVkIjoi2KfYqNiv2KMg2KfZhNii2YYiLCJoZXJvLmJhZGdlIjoi2YXYqtin2K0g2LnYp9mE2YXZitin2Ysg2KfZhNii2YYiLCJoZXJvLnRpdGxlMSI6YNij2YbZgdmCINin2YTZg9ix2YrYqNiq2YgK2YPYp9mE2YbZgtivLmAsImhlcm8udGl0bGUyIjoi2YHZiiDZg9mEINmF2YPYp9mGLiIsImhlcm8uZGVzYyI6Itij2YjZhCDYqNi32KfZgtipINmF2KrYtdmE2Kkg2YXYqNin2LTYsdipINio2YXYrdmB2LjYqSDYp9mE2YPYsdmK2KjYqtmIINin2YTYrtin2LXYqSDYqNmDLiDYo9mG2YHZgiDZhdmGINmF2K3Zgdi42KrZgyDYr9mI2YYg2LTYrdmGINin2YTYrdiz2KfYqCDYo9mIINin2YTYqtit2YLZgi4iLCJoZXJvLmlzc3VlQ2FyZCI6Itil2LXYr9in2LEg2KfZhNio2LfYp9mC2KkiLCJoZXJvLmxlYXJuTW9yZSI6Itin2LnYsdmBINin2YTZhdiy2YrYryIsImhlcm8ucGVyazEiOiLYqNiv2YjZhiBLWUMiLCJoZXJvLnBlcmsyIjoi2YXZiNin2YHZgtipINmB2YjYsdmK2KkiLCJoZXJvLnBlcmszIjoi2KjYr9mI2YYg2LHYs9mI2YUg2LPZhtmI2YrYqSIsIndhbGxldHMudGl0bGUiOiLZiti52YXZhCDZhdi5INmF2K3Yp9mB2LjZgyDYp9mE2YXZgdi22YTYqSIsImJhY2tlcnMudGl0bGUiOiLYp9mE2YXYs9iq2KvZhdix2YjZhiIsImZlYXR1cmVzLmxhYmVsIjoi2KfZhNmF2YXZitiy2KfYqiIsImZlYXR1cmVzLnRpdGxlIjoi2YPZhCDZhdinINiq2K3Yqtin2KzZhy4g2YTYpyDYtNmK2KEg2LLYp9im2K8uIiwiZmVhdHVyZXMuZGVzYyI6ItmF2LXZhdmF2Kkg2YTZhdiz2KrYrtiv2YUg2KfZhNmD2LHZitio2KrZiCDYp9mE2K3Yr9mK2KsuINmD2YQg2YXZitiy2Kkg2YTYrNi52YQg2K3Zitin2KrZgyDYo9iz2YfZhC4iLCJmZWF0dXJlcy4xLnRpdGxlIjoi2KrZg9in2YXZhCDZhdio2KfYtNixINmF2Lkg2KfZhNmF2K3Zgdi42KkiLCJmZWF0dXJlcy4xLmRlc2MiOiLYp9ix2KjYtyDZhdit2YHYuNiq2YMg2YXYqNin2LTYsdipLiDYo9mG2YHZgiDZhdmGINix2LXZitivINin2YTZg9ix2YrYqNiq2Ygg2KjYs9mE2KfYs9ipINiq2KfZhdipLiIsImZlYXR1cmVzLjIudGl0bGUiOiLZgtio2YjZhCDYudin2YTZhdmKIiwiZmVhdHVyZXMuMi5kZXNjIjoi2YXZgtio2YjZhNipINmE2K/ZiSDYo9mD2KvYsSDZhdmGIDgwINmF2YTZitmI2YYg2KrYp9is2LEg2K3ZiNmEINin2YTYudin2YTZhS4g2KfYs9iq2K7Yr9mF2YfYpyDYo9mK2YbZhdinINiq2Y/Zgtio2YQgVmlzYSDZiE1hc3RlcmNhcmQuIiwiZmVhdHVyZXMuMy50aXRsZSI6IkFwcGxlIFBheSDZiCBHb29nbGUgUGF5IiwiZmVhdHVyZXMuMy5kZXNjIjoi2KPYttmB2YfYpyDYpdmE2Ykg2YXYrdmB2LjYqtmDINin2YTYsdmC2YXZitipINmE2YTYr9mB2Lkg2KfZhNmE2KfYqtmE2KfZhdiz2YouINin2K/Zgdi5INio2YfYp9iq2YHZgyDYo9mIINiz2KfYudiq2YMuIiwiZmVhdHVyZXMuNC50aXRsZSI6Itij2YXYp9mGINio2YXYs9iq2YjZiSDYp9mE2YXYtdin2LHZgSIsImZlYXR1cmVzLjQuZGVzYyI6Itiq2LTZgdmK2LEgMjU2INio2Kog2YjZhdi12KfYr9mC2Kkg2KjZitmI2YXYqtix2YrYqSDZiNmF2LHYp9mC2KjYqSDYp9it2KrZitin2YQg2YHZiNix2YrYqSDZhNit2YXYp9mK2Kkg2YPZhCDYudmF2YTZitipLiIsImZlYXR1cmVzLjUudGl0bGUiOiLZhdmI2KfZgdmC2KfYqiDZgdmI2LHZitipIiwiZmVhdHVyZXMuNS5kZXNjIjoi2YXZiNin2YHZgtipINiu2YTYp9mEINir2YjYp9mG2Y3YjCDZhNinINij2YrYp9mFLiDYqNiv2YjZhiBLWUMg2KPZiCDYo9mI2LHYp9mCLiDZgdmC2Lcg2KfYsdio2Lcg2YXYrdmB2LjYqtmDLiIsImZlYXR1cmVzLjYudGl0bGUiOiLZhdmD2KfZgdii2Kog2YPYsdmK2KjYqtmIIiwiZmVhdHVyZXMuNi5kZXNjIjoi2KfZg9iz2Kgg2K3YqtmJIDUlINmD2KfYtCDYqNin2YMg2KjZgCBCVEMg2KPZiCBFVEgg2KPZiCDYp9mE2LnZhdmE2KfYqiDYp9mE2YXYs9iq2YLYsdipINi52YTZiSDZg9mEINi52YXZhNmK2Kkg2LTYsdin2KEuIiwicmV3YXJkcy5sYWJlbCI6Itin2YTZhdmD2KfZgdii2KoiLCJyZXdhcmRzLnRpdGxlIjoi2KfZg9iz2Kgg2KfZhNmD2LHZitio2KrZiCDZhdi5INmD2YQg2LnZhdmE2YrYqSDYtNix2KfYoS4iLCJyZXdhcmRzLmRlc2MiOiLYrdmI2ZHZhCDZhdi02KrYsdmK2KfYqtmDINin2YTZitmI2YXZitipINil2YTZiSDZhtmF2Ygg2YXYrdmB2LjYqtmDLiDZitit2YjZkdmEINio2LHZhtin2YXYrCDYp9mE2YXZg9in2YHYotiqINiq2YTZgtin2KbZitin2Ysg2KfZhNmD2KfYtCDYqNin2YMg2KXZhNmJINin2YTYudmF2YTYqSDYp9mE2YXYtNmB2LHYqSDYp9mE2KrZiiDYqtiu2KrYp9ix2YfYpy4iLCJyZXdhcmRzLmRpbmluZyI6Itin2YTZhdi32KfYudmFINmI2KfZhNiz2YHYsSIsInJld2FyZHMuc2hvcHBpbmciOiLYp9mE2KrYs9mI2YIg2LnYqNixINin2YTYpdmG2KrYsdmG2KoiLCJyZXdhcmRzLm90aGVyIjoi2YPZhCDYtNmK2KEg2KLYrtixIiwicHJlbWl1bS5iYWRnZSI6Itit2LXYsdmKIiwicHJlbWl1bS50aXRsZTEiOiLYqNi32KfZgtipINmF2LnYr9mG2YrYqS4iLCJwcmVtaXVtLnRpdGxlMiI6Itio2K/ZiNmGINiq2YPZhNmB2KkuIiwicHJlbWl1bS5kZXNjIjoi2K3Yp9mB2Lgg2LnZhNmJINix2LXZitivIDIwLDAwMCQg2KPZiCDYo9mD2KvYsSDZgdmKINmF2K3Zgdi42KrZgyDYp9mE2YXYqti12YTYqS4g2KfYrdi12YQg2LnZhNmJIFByaW9yaXR5IFBhc3PYjCDZg9mI2YbYs9mK2LHYrCDZhdiu2LXYtdiMINmD2KfYtCDYqNin2YMg2YXYttin2LnZgSDZiNin2YTZhdiy2YrYry4g2LHYs9mI2YUg2LPZhtmI2YrYqTog2YTYpyDYtNmK2KEuIiwicHJlbWl1bS5iZW5lZml0MSI6Itiq2LXZhdmK2YUg2YXYudiv2YbZiiDZgdin2K7YsSIsInByZW1pdW0uYmVuZWZpdDIiOiLYr9iu2YjZhCDYtdin2YTYp9iqINin2YTZhdi32KfYsdin2KoiLCJwcmVtaXVtLmJlbmVmaXQzIjoi2K/YudmFINij2YjZhNmI2YrYqSAyNC83IiwicHJlbWl1bS5iZW5lZml0NCI6ItmF2LbYp9i52YEg2YXZg9in2YHYotiqIDJ4IiwicHJlbWl1bS5jdGEiOiLYqtit2YLZgiDZhdmGINin2YTYo9mH2YTZitipIiwiY3RhLnRpdGxlIjoi2YfZhCDYo9mG2Kog2YXYs9iq2LnYryDZhNiq2LrZitmK2LEg2LfYsdmK2YLYqSDYpdmG2YHYp9mCINin2YTZg9ix2YrYqNiq2YjYnyIsImN0YS5kZXNjIjoi2KfZhti22YUg2KXZhNmJINij2YPYq9ixINmF2YYgNTAwLDAwMCDZhdiz2KrYrtiv2YUg2YrYq9mC2YjZhiDYqNmAIFRydXN0IENhcmQg2YHZiiDYpdmG2YHYp9mC2YfZhSDYp9mE2YrZiNmF2YouIiwiY3RhLmJ1dHRvbiI6Itil2LXYr9in2LEg2KfZhNio2LfYp9mC2Kkg4oCUINmF2KzYp9mG2KfZiyIsImN0YS50YWcxIjoi2KjYr9mI2YYg2LHYs9mI2YUg2K7ZgdmK2KkiLCJjdGEudGFnMiI6Itil2YTYutin2KEg2YHZiiDYo9mKINmI2YLYqiIsImN0YS50YWczIjoi2K/YudmFIDI0LzciLCJ3YWxsZXQuc3RlcDEiOiLYsdio2Lcg2KfZhNmF2K3Zgdi42KkiLCJ3YWxsZXQuc3RlcDIiOiLYp9iu2KrZitin2LEg2KfZhNi02KjZg9ipIiwid2FsbGV0LnN0ZXAzIjoi2KXYtdiv2KfYsSDYp9mE2KjYt9in2YLYqSIsIndhbGxldC5jb25uZWN0RGVzYyI6ItmC2YUg2KjYsdio2Lcg2YXYrdmB2LjYqtmDINmE2YTZhdiq2KfYqNi52KkuIiwid2FsbGV0LmNvbnRpbnVlIjoi2YXYqtin2KjYudipIiwid2FsbGV0LmNob29zZU5ldHdvcmsiOiLYp9iu2KrYsSDYtNio2YPYqSDYp9mE2KjZhNmI2YPYqti02YrZhiDZhNio2LfYp9mC2KrZgy4iLCJ3YWxsZXQuY29udGludWVIaW50Ijoi2KPZg9ivINi02KjZg9iq2YrZhiDYudmE2Ykg2KfZhNij2YLZhCDZhNmE2YXYqtin2KjYudipLiIsIndhbGxldC5jb250aW51ZVByb2dyZXNzIjoie2RvbmV9INmF2YYgMiDYtNio2YPYp9iqINmF2KTZg9iv2KkiLCJ3YWxsZXQuY29udGludWVSZWFkeSI6Itix2KfYpti5IOKAlCDZitmF2YPZhtmDINin2YTZhdiq2KfYqNi52KkuIiwid2FsbGV0LnRhcFRvQ29ubmVjdCI6Itin2LbYuti3INmE2YTYp9iu2KrZitin2LEiLCJ3YWxsZXQucmVhZHlUaXRsZSI6Itiq2YUg2LHYqNi3INin2YTZhdit2YHYuNipISIsIndhbGxldC5yZWFkeURlc2MiOiLZhdit2YHYuNiq2YMg2YXYqti12YTYqS4g2KrYp9io2Lkg2YTYp9iu2KrZitin2LEg2KjYt9in2YLYqtmDLiIsIndhbGxldC5zdGFydFRyYWRpbmciOiLYp9iu2KrZitin2LEg2KfZhNio2LfYp9mC2KkiLCJ3YWxsZXQuYWZ0ZXJDb25uZWN0Ijoi2LPZitiq2YUg2LHYqNi3INmF2K3Zgdi42KrZgyDYqNin2YTYqNi32KfZgtipLiJ9LGRlOnsibmF2LmZlYXR1cmVzIjoiRnVua3Rpb25lbiIsIm5hdi5yZXdhcmRzIjoiQmVsb2hudW5nZW4iLCJuYXYucHJlbWl1bSI6IlByZW1pdW0iLCJuYXYuZmFxIjoiRkFRIiwibmF2LmdldFN0YXJ0ZWQiOiJMb3NsZWdlbiIsImhlcm8uYmFkZ2UiOiJXZWx0d2VpdCB2ZXJmw7xnYmFyIiwiaGVyby50aXRsZTEiOmBLcnlwdG8gYXVzZ2ViZW4Kd2llIEJhcmdlbGQuYCwiaGVyby50aXRsZTIiOiLDnGJlcmFsbC4iLCJoZXJvLmRlc2MiOiJEaWUgZXJzdGUgS2FydGUsIGRpZSBkaXJla3QgbWl0IGRlaW5lciBLcnlwdG8tV2FsbGV0IHZlcmJ1bmRlbiBpc3QuIEdpYiBhdXMgZGVpbmVyIFdhbGxldCBhdXMg4oCUIG9obmUgQXVmbGFkdW5nZW4gb2RlciBWZXJpZml6aWVydW5nLiIsImhlcm8uaXNzdWVDYXJkIjoiS2FydGUgYXVzc3RlbGxlbiIsImhlcm8ubGVhcm5Nb3JlIjoiTWVociBlcmZhaHJlbiIsImhlcm8ucGVyazEiOiJLZWluIEtZQyIsImhlcm8ucGVyazIiOiJTb2ZvcnRpZ2UgR2VuZWhtaWd1bmciLCJoZXJvLnBlcmszIjoiS2VpbmUgSmFocmVzZ2Viw7xociIsIndhbGxldHMudGl0bGUiOiJGdW5rdGlvbmllcnQgbWl0IGRlaW5lbiBMaWVibGluZ3MtV2FsbGV0cyIsImJhY2tlcnMudGl0bGUiOiJVbnNlcmUgSW52ZXN0b3JlbiIsImZlYXR1cmVzLmxhYmVsIjoiRnVua3Rpb25lbiIsImZlYXR1cmVzLnRpdGxlIjoiQWxsZXMsIHdhcyBkdSBicmF1Y2hzdC4gTmljaHRzLCB3YXMgZHUgbmljaHQgYnJhdWNoc3QuIiwiZmVhdHVyZXMuZGVzYyI6IkdlYmF1dCBmw7xyIG1vZGVybmUgS3J5cHRvLU51dHplci4gSmVkZSBGdW5rdGlvbiBtYWNodCBkZWluIExlYmVuIGVpbmZhY2hlci4iLCJmZWF0dXJlcy4xLnRpdGxlIjoiRGlyZWt0ZSBXYWxsZXQtSW50ZWdyYXRpb24iLCJmZWF0dXJlcy4xLmRlc2MiOiJWZXJiaW5kZSBkZWluZSBXYWxsZXQgZGlyZWt0LiBCZXphaGxlIG5haHRsb3MgYXVzIGRlaW5lbSBLcnlwdG8tR3V0aGFiZW4uIiwiZmVhdHVyZXMuMi50aXRsZSI6Ikdsb2JhbGUgQWt6ZXB0YW56IiwiZmVhdHVyZXMuMi5kZXNjIjoiQWt6ZXB0aWVydCBiZWkgw7xiZXIgODAgTWlvLiBIw6RuZGxlcm4gd2VsdHdlaXQg4oCUIMO8YmVyYWxsLCB3byBWaXNhIHVuZCBNYXN0ZXJjYXJkIGdlbHRlbi4iLCJmZWF0dXJlcy4zLnRpdGxlIjoiQXBwbGUgUGF5ICYgR29vZ2xlIFBheSIsImZlYXR1cmVzLjMuZGVzYyI6IkbDvGdlIHNpZSBkZWluZW0gRGlnaXRhbCBXYWxsZXQgaGluenUgZsO8ciBrb250YWt0bG9zZXMgQmV6YWhsZW4gbWl0IEhhbmR5IG9kZXIgVWhyLiIsImZlYXR1cmVzLjQudGl0bGUiOiJCYW5rZW4tU2ljaGVyaGVpdCIsImZlYXR1cmVzLjQuZGVzYyI6IjI1Ni1CaXQtVmVyc2NobMO8c3NlbHVuZywgQmlvbWV0cmllIHVuZCBFY2h0emVpdC1CZXRydWdzZXJrZW5udW5nIHNjaMO8dHplbiBqZWRlIFRyYW5zYWt0aW9uLiIsImZlYXR1cmVzLjUudGl0bGUiOiJTb2ZvcnRpZ2UgRnJlaWdhYmUiLCJmZWF0dXJlcy41LmRlc2MiOiJHZW5laG1pZ3VuZyBpbiBTZWt1bmRlbiwgbmljaHQgVGFnZW4uIEtlaW4gS1lDLCBrZWluIFBhcGllcmtyYW0uIEVpbmZhY2ggV2FsbGV0IHZlcmJpbmRlbi4iLCJmZWF0dXJlcy42LnRpdGxlIjoiS3J5cHRvLUJlbG9obnVuZ2VuIiwiZmVhdHVyZXMuNi5kZXNjIjoiVmVyZGllbmUgYmlzIHp1IDUlIENhc2hiYWNrIGluIEJUQywgRVRIIG9kZXIgU3RhYmxlY29pbnMgYmVpIGplZGVtIEVpbmthdWYuIiwicmV3YXJkcy5sYWJlbCI6IkJlbG9obnVuZ2VuIiwicmV3YXJkcy50aXRsZSI6IlZlcmRpZW5lIEtyeXB0byBiZWkgamVkZW0gRWlua2F1Zi4iLCJyZXdhcmRzLmRlc2MiOiJWZXJ3YW5kbGUgYWxsdMOkZ2xpY2hlIEVpbmvDpHVmZSBpbiBQb3J0Zm9saW8tV2FjaHN0dW0uIFVuc2VyIFByb2dyYW1tIGtvbnZlcnRpZXJ0IENhc2hiYWNrIGF1dG9tYXRpc2NoIGluIGRlaW5lIFd1bnNjaC1LcnlwdG93w6RocnVuZy4iLCJyZXdhcmRzLmRpbmluZyI6IlJlc3RhdXJhbnRzICYgUmVpc2VuIiwicmV3YXJkcy5zaG9wcGluZyI6Ik9ubGluZS1TaG9wcGluZyIsInJld2FyZHMub3RoZXIiOiJBbGxlcyBhbmRlcmUiLCJwcmVtaXVtLmJhZGdlIjoiRXhrbHVzaXYiLCJwcmVtaXVtLnRpdGxlMSI6Ik1ldGFsbC1LYXJ0ZS4iLCJwcmVtaXVtLnRpdGxlMiI6Iktvc3Rlbmxvcy4iLCJwcmVtaXVtLmRlc2MiOiJIYWx0ZSBlaW4gR3V0aGFiZW4gdm9uICQyMC4wMDAgb2RlciBtZWhyIGluIGRlaW5lciB2ZXJidW5kZW5lbiBXYWxsZXQuIFNjaGFsdGUgUHJpb3JpdHkgUGFzcywgcGVyc8O2bmxpY2hlbiBDb25jaWVyZ2UsIGRvcHBlbHRlcyBDYXNoYmFjayB1bmQgbWVociBmcmVpLiBKYWhyZXNnZWLDvGhyOiBrZWluZS4iLCJwcmVtaXVtLmJlbmVmaXQxIjoiUHJlbWl1bSBNZXRhbGwtRGVzaWduIiwicHJlbWl1bS5iZW5lZml0MiI6Ilp1Z2FuZyB6dSBBaXJwb3J0LUxvdW5nZXMiLCJwcmVtaXVtLmJlbmVmaXQzIjoiUHJpb3JpdHkgU3VwcG9ydCAyNC83IiwicHJlbWl1bS5iZW5lZml0NCI6IjJ4IEJlbG9obnVuZ3MtTXVsdGlwbGlrYXRvciIsInByZW1pdW0uY3RhIjoiQmVyZWNodGlndW5nIHByw7xmZW4iLCJjdGEudGl0bGUiOiJCZXJlaXQsIGRlaW4gS3J5cHRvLUF1c2dlYmVuIHp1IHZlcsOkbmRlcm4/IiwiY3RhLmRlc2MiOiJTY2hsaWXDn2UgZGljaCA1MDAuMDAwKyBOdXR6ZXJuIGFuLCBkaWUgVHJ1c3QgQ2FyZCB0w6RnbGljaCB2ZXJ0cmF1ZW4uIiwiY3RhLmJ1dHRvbiI6IkthcnRlIGF1c3N0ZWxsZW4g4oCUIEtvc3RlbmxvcyIsImN0YS50YWcxIjoiS2VpbmUgdmVyc3RlY2t0ZW4gR2Viw7xocmVuIiwiY3RhLnRhZzIiOiJKZWRlcnplaXQga8O8bmRiYXIiLCJjdGEudGFnMyI6IjI0LzcgU3VwcG9ydCIsIndhbGxldC5zdGVwMSI6IldhbGxldCB2ZXJiaW5kZW4iLCJ3YWxsZXQuc3RlcDIiOiJOZXR6d2VyayB3w6RobGVuIiwid2FsbGV0LnN0ZXAzIjoiS2FydGUgYXVzc3RlbGxlbiIsIndhbGxldC5jb25uZWN0RGVzYyI6IlZlcmJpbmRlIGRlaW5lIFdhbGxldCwgdW0gZm9ydHp1ZmFocmVuLiIsIndhbGxldC5jb250aW51ZSI6IldlaXRlciIsIndhbGxldC5jaG9vc2VOZXR3b3JrIjoiV8OkaGxlIGRhcyBCbG9ja2NoYWluLU5ldHp3ZXJrLiIsIndhbGxldC5jb250aW51ZUhpbnQiOiJCZXN0w6R0aWdlIG1pbmRlc3RlbnMgMiBOZXR6d2Vya2UsIHVtIGZvcnR6dWZhaHJlbi4iLCJ3YWxsZXQuY29udGludWVQcm9ncmVzcyI6Intkb25lfSB2b24gMiBOZXR6d2Vya2VuIGJlc3TDpHRpZ3QiLCJ3YWxsZXQuY29udGludWVSZWFkeSI6IlN1cGVyIOKAlCBkdSBrYW5uc3QgZm9ydGZhaHJlbi4iLCJ3YWxsZXQudGFwVG9Db25uZWN0IjoiVGlwcGVuIHp1bSBBdXN3w6RobGVuIiwid2FsbGV0LnJlYWR5VGl0bGUiOiJXYWxsZXQgdmVyYnVuZGVuISIsIndhbGxldC5yZWFkeURlc2MiOiJEZWluZSBXYWxsZXQgaXN0IHZlcmJ1bmRlbi4gV8OkaGxlIGRlaW5lIEthcnRlLiIsIndhbGxldC5zdGFydFRyYWRpbmciOiJLYXJ0ZSB3w6RobGVuIiwid2FsbGV0LmFmdGVyQ29ubmVjdCI6IkRlaW5lIFdhbGxldCB3aXJkIG1pdCBkZXIgS2FydGUgdmVya27DvHBmdC4ifSxrbzp7Im5hdi5mZWF0dXJlcyI6Iuq4sOuKpSIsIm5hdi5yZXdhcmRzIjoi67O07IOBIiwibmF2LnByZW1pdW0iOiLtlITrpqzrr7jsl4QiLCJuYXYuZmFxIjoiRkFRIiwibmF2LmdldFN0YXJ0ZWQiOiLsi5zsnpHtlZjquLAiLCJoZXJvLmJhZGdlIjoi7KCEIOyEuOqzhCDsnbTsmqkg6rCA64qlIiwiaGVyby50aXRsZTEiOmDslZTtmLjtmZTtj5DrpbwK7ZiE6riI7LKY65+8IOyCrOyaqS5gLCJoZXJvLnRpdGxlMiI6IuyWtOuUlOyEnOuCmC4iLCJoZXJvLmRlc2MiOiLslZTtmLjtmZTtj5Ag7KeA6rCR7JeQIOyngeygkSDsl7DqsrDrkJjripQg7LWc7LSI7J2YIOy5tOuTnC4g7Lap7KCE7J2064KYIOyduOymnSDsl4bsnbQg7KeA6rCR7JeQ7IScIOuwlOuhnCDqsrDsoJztlZjshLjsmpQuIiwiaGVyby5pc3N1ZUNhcmQiOiLsubTrk5wg67Cc6riJIiwiaGVyby5sZWFybk1vcmUiOiLsnpDshLjtnogg7JWM7JWE67O06riwIiwiaGVyby5wZXJrMSI6IktZQyDsl4bsnYwiLCJoZXJvLnBlcmsyIjoi7KaJ7IucIOyKueyduCIsImhlcm8ucGVyazMiOiLsl7DtmozruYQg66y066OMIiwid2FsbGV0cy50aXRsZSI6Iuyii+yVhO2VmOuKlCDsp4DqsJHqs7wg7ZWo6ruYIOyCrOyaqSIsImJhY2tlcnMudGl0bGUiOiLtiKzsnpDsnpAiLCJmZWF0dXJlcy5sYWJlbCI6Iuq4sOuKpSIsImZlYXR1cmVzLnRpdGxlIjoi7ZWE7JqU7ZWcIOuqqOuToCDqsoMuIOu2iO2VhOyalO2VnCDqsbQg7JeG7J2MLiIsImZlYXR1cmVzLmRlc2MiOiLtmITrjIAg7JWU7Zi47ZmU7Y+QIOyCrOyaqeyekOulvCDsnITtlbQg7ISk6rOE65CY7JeI7Iq164uI64ukLiDsgrbsnYQg642UIO2OuOumrO2VmOqyjCDrp4zrk5zripQg66qo65OgIOq4sOuKpS4iLCJmZWF0dXJlcy4xLnRpdGxlIjoi7KeA6rCRIOyngeygkSDsl7Drj5kiLCJmZWF0dXJlcy4xLmRlc2MiOiLsp4DqsJHsnYQg7KeB7KCRIOyXsOqysO2VmOyEuOyalC4g7JWU7Zi47ZmU7Y+QIOyelOyVoeycvOuhnCDrp6TrgYTrn73qsowg6rKw7KCc7ZWgIOyImCDsnojsirXri4jri6QuIiwiZmVhdHVyZXMuMi50aXRsZSI6Iuq4gOuhnOuyjCDsgqzsmqkg6rCA64qlIiwiZmVhdHVyZXMuMi5kZXNjIjoi7KCEIOyEuOqzhCA47LKc66eMIOydtOyDgeydmCDqsIDrp7nsoJDsl5DshJwg7IKs7JqpIOqwgOuKpS4gVmlzYcK3TWFzdGVyY2FyZOqwgCDrsJvripQg66qo65OgIOqzs+yXkOyEnC4iLCJmZWF0dXJlcy4zLnRpdGxlIjoiQXBwbGUgUGF5IOuwjyBHb29nbGUgUGF5IiwiZmVhdHVyZXMuMy5kZXNjIjoi65SU7KeA7YS4IOyngOqwkeyXkCDstpTqsIDtlZjsl6wg67mE7KCR7LSJIOqysOygnC4g7Zy064yA7Y+w7J2064KYIOyLnOqzhOuhnCDtg63tlZjsl6wg6rKw7KCc7ZWY7IS47JqULiIsImZlYXR1cmVzLjQudGl0bGUiOiLsnYDtlonquIkg67O07JWIIiwiZmVhdHVyZXMuNC5kZXNjIjoiMjU267mE7Yq4IOyVlO2YuO2ZlCwg7IOd7LK0IOyduOymnSwg7Iuk7Iuc6rCEIOyCrOq4sCDrqqjri4jthLDrp4HsnLzroZwg66qo65OgIOqxsOuemOulvCDrs7TtmLjtlanri4jri6QuIiwiZmVhdHVyZXMuNS50aXRsZSI6IuymieyLnCDsirnsnbgiLCJmZWF0dXJlcy41LmRlc2MiOiLrqbDsuaDsnbQg7JWE64uMIOuqhyDstIgg66eM7JeQIOyKueyduC4g7Iug7JqpIOyhsO2ajOuCmCDshJzrpZgg7JeG7J2MLiDsp4DqsJHrp4wg7Jew6rKw7ZWY7IS47JqULiIsImZlYXR1cmVzLjYudGl0bGUiOiLslZTtmLjtmZTtj5Ag66as7JuM65OcIiwiZmVhdHVyZXMuNi5kZXNjIjoi6rWs66ekIOyLnOuniOuLpCBCVEMsIEVUSCDrmJDripQg7Iqk7YWM7J2067iU7L2U7J247Jy866GcIOy1nOuMgCA1JSDrpqzsm4zrk5zrpbwg7KCB66a97ZWY7IS47JqULiIsInJld2FyZHMubGFiZWwiOiLrs7Tsg4EiLCJyZXdhcmRzLnRpdGxlIjoi6rKw7KCc7ZWgIOuVjOuniOuLpCDslZTtmLjtmZTtj5Drpbwg7KCB66a97ZWY7IS47JqULiIsInJld2FyZHMuZGVzYyI6IuydvOyDgSDshozruYTrpbwg7Y+s7Yq47Y+066as7JikIOyEseyepeycvOuhnC4g7LqQ7Iuc67Cx7J2EIOybkO2VmOuKlCDslZTtmLjtmZTtj5DroZwg7J6Q64+ZIOyghO2ZmO2VqeuLiOuLpC4iLCJyZXdhcmRzLmRpbmluZyI6IuuLpOydtOuLnSAmIOyXrO2WiSIsInJld2FyZHMuc2hvcHBpbmciOiLsmKjrnbzsnbgg7Ie87ZWRIiwicmV3YXJkcy5vdGhlciI6Iuq3uCDsmbgg7KCE7LK0IiwicHJlbWl1bS5iYWRnZSI6IuuPheygkCIsInByZW1pdW0udGl0bGUxIjoi66mU7YOIIOy5tOuTnC4iLCJwcmVtaXVtLnRpdGxlMiI6IuustOujjC4iLCJwcmVtaXVtLmRlc2MiOiLsl7DqsrDrkJwg7KeA6rCR7JeQICQyMCwwMDAg7J207IOB7J2YIOyelOyVoeydhCDsnKDsp4DtlZjshLjsmpQuIFByaW9yaXR5IFBhc3MsIOyghOuLtCDsu6jsi5zslrTsp4AsIDLrsLAg7LqQ7Iuc67CxIOuTseydhCDsnbTsmqntlaAg7IiYIOyeiOyKteuLiOuLpC4g7Jew7ZqM67mEOiDsl4bsnYwuIiwicHJlbWl1bS5iZW5lZml0MSI6Iu2UhOumrOuvuOyXhCDrqZTtg4gg65SU7J6Q7J24IiwicHJlbWl1bS5iZW5lZml0MiI6Iuqzte2VrSDrnbzsmrTsp4Ag7J207JqpIiwicHJlbWl1bS5iZW5lZml0MyI6IjI0Lzcg7Jqw7ISgIOyngOybkCIsInByZW1pdW0uYmVuZWZpdDQiOiIy67CwIOumrOybjOuTnCDsoIHrpr0iLCJwcmVtaXVtLmN0YSI6IuyekOqyqSDtmZXsnbgiLCJjdGEudGl0bGUiOiLslZTtmLjtmZTtj5Ag7IKs7JqpIOuwqeyLneydhCDrsJTqv4Ag7KSA67mE6rCAIOuQmOyFqOuCmOyalD8iLCJjdGEuZGVzYyI6IlRydXN0IENhcmTrpbwg7Iug66Kw7ZWY64qUIDUw66eMIOuqhSDsnbTsg4HsnZgg7IKs7Jqp7J6Q7JmAIO2VqOq7mO2VmOyEuOyalC4iLCJjdGEuYnV0dG9uIjoi7Lm065OcIOuwnOq4iSDigJQg66y066OMIiwiY3RhLnRhZzEiOiLsiKjqsqjsp4Qg7IiY7IiY66OMIOyXhuydjCIsImN0YS50YWcyIjoi7Ja47KCc65Og7KeAIO2VtOyngCIsImN0YS50YWczIjoiMjQvNyDsp4Dsm5AiLCJ3YWxsZXQuc3RlcDEiOiLsp4DqsJEg7Jew6rKwIiwid2FsbGV0LnN0ZXAyIjoi64Sk7Yq47JuM7YGsIOyEoO2DnSIsIndhbGxldC5zdGVwMyI6Iuy5tOuTnCDrsJzquIkiLCJ3YWxsZXQuY29ubmVjdERlc2MiOiLsubTrk5wg67Cc6riJ7J2EIOychO2VtCDsp4DqsJHsnYQg7Jew6rKw7ZWY7IS47JqULiIsIndhbGxldC5jb250aW51ZSI6IuqzhOyGjSIsIndhbGxldC5jaG9vc2VOZXR3b3JrIjoi67iU66Gd7LK07J24IOuEpO2KuOybjO2BrOulvCDshKDtg53tlZjshLjsmpQuIiwid2FsbGV0LmNvbnRpbnVlSGludCI6IuqzhOyGje2VmOugpOuptCDrhKTtirjsm4ztgazrpbwg7LWc7IaMIDLqsJwg7ZmV7J247ZWY7IS47JqULiIsIndhbGxldC5jb250aW51ZVByb2dyZXNzIjoi7ZmV7J2465CcIOuEpO2KuOybjO2BrCB7ZG9uZX0vMiIsIndhbGxldC5jb250aW51ZVJlYWR5Ijoi7KKL7JWE7JqUIOKAlCDqs4Tsho3tlaAg7IiYIOyeiOyKteuLiOuLpC4iLCJ3YWxsZXQudGFwVG9Db25uZWN0Ijoi7ISg7YOd7ZWY66Ck66m0IO2Dre2VmOyEuOyalCIsIndhbGxldC5yZWFkeVRpdGxlIjoi7KeA6rCRIOyXsOqysCDsmYTro4whIiwid2FsbGV0LnJlYWR5RGVzYyI6IuyngOqwkeydtCDsl7DqsrDrkJjsl4jsirXri4jri6QuIOy5tOuTnOulvCDshKDtg53tlZjshLjsmpQuIiwid2FsbGV0LnN0YXJ0VHJhZGluZyI6Iuy5tOuTnCDshKDtg50iLCJ3YWxsZXQuYWZ0ZXJDb25uZWN0Ijoi7KeA6rCR7J20IOy5tOuTnOyXkCDsl7DqsrDrkKnri4jri6QuIn0sdHI6eyJuYXYuZmVhdHVyZXMiOiLDlnplbGxpa2xlciIsIm5hdi5yZXdhcmRzIjoiw5Zkw7xsbGVyIiwibmF2LnByZW1pdW0iOiJQcmVtaXVtIiwibmF2LmZhcSI6IlNTUyIsIm5hdi5nZXRTdGFydGVkIjoiQmHFn2xhIiwiaGVyby5iYWRnZSI6IkTDvG55YSDDh2FwxLFuZGEgS3VsbGFuxLFsYWJpbGlyIiwiaGVyby50aXRsZTEiOmBLcmlwdG95dSBuYWtpdCBnaWJpCmhhcmNhLmAsImhlcm8udGl0bGUyIjoiSGVyIFllcmRlLiIsImhlcm8uZGVzYyI6IktyaXB0byBjw7x6ZGFuxLFuxLF6YSBkb8SfcnVkYW4gYmHEn2xhbmFuIGlsayBrYXJ0LiBIZXNhcCB5w7xrbGVtZXNpIHZleWEgZG/En3J1bGFtYSBvbG1hZGFuIGPDvHpkYW7EsW7EsXpkYW4gaGFyY2F5xLFuLiIsImhlcm8uaXNzdWVDYXJkIjoiS2FydCDDh8Sxa2FyIiwiaGVyby5sZWFybk1vcmUiOiJEYWhhIEZhemxhIiwiaGVyby5wZXJrMSI6IktZQyBZb2siLCJoZXJvLnBlcmsyIjoiQW7EsW5kYSBPbmF5IiwiaGVyby5wZXJrMyI6IlnEsWxsxLFrIMOcY3JldCBZb2siLCJ3YWxsZXRzLnRpdGxlIjoiRmF2b3JpIGPDvHpkYW5sYXLEsW7EsXpsYSDDp2FsxLHFn8SxciIsImJhY2tlcnMudGl0bGUiOiJZYXTEsXLEsW1jxLFsYXLEsW3EsXoiLCJmZWF0dXJlcy5sYWJlbCI6IsOWemVsbGlrbGVyIiwiZmVhdHVyZXMudGl0bGUiOiLEsGh0aXlhY8SxbsSxeiBvbGFuIGhlciDFn2V5LiBHZXJla3NpeiBoacOnYmlyIMWfZXkuIiwiZmVhdHVyZXMuZGVzYyI6Ik1vZGVybiBrcmlwdG8ga3VsbGFuxLFjxLFzxLEgacOnaW4gdGFzYXJsYW5kxLEuIEhlciDDtnplbGxpayBoYXlhdMSxbsSxesSxIGtvbGF5bGHFn3TEsXLEsXIuIiwiZmVhdHVyZXMuMS50aXRsZSI6IkRvxJ9ydWRhbiBDw7x6ZGFuIEVudGVncmFzeW9udSIsImZlYXR1cmVzLjEuZGVzYyI6IkPDvHpkYW7EsW7EsXrEsSBkb8SfcnVkYW4gYmHEn2xhecSxbi4gS3JpcHRvIGJha2l5ZW5pemRlbiBzb3J1bnN1emNhIGhhcmNhecSxbi4iLCJmZWF0dXJlcy4yLnRpdGxlIjoiS8O8cmVzZWwgS2FidWwiLCJmZWF0dXJlcy4yLmRlc2MiOiJEw7xueWEgZ2VuZWxpbmRlIDgwTSsgw7x5ZSBpxZ95ZXJpbmRlIGthYnVsIGVkaWxpci4gVmlzYSB2ZSBNYXN0ZXJjYXJkJ8SxbiBnZcOnZXJsaSBvbGR1xJ91IGhlciB5ZXJkZS4iLCJmZWF0dXJlcy4zLnRpdGxlIjoiQXBwbGUgUGF5IHZlIEdvb2dsZSBQYXkiLCJmZWF0dXJlcy4zLmRlc2MiOiJEaWppdGFsIGPDvHpkYW7EsW7EsXphIGVrbGV5aW4sIHRlbGVmb251bnV6IHZleWEgc2FhdGluaXpsZSB0ZW1hc3PEsXogw7ZkZW1lIHlhcMSxbi4iLCJmZWF0dXJlcy40LnRpdGxlIjoiQmFua2EgRMO8emV5aSBHw7x2ZW5saWsiLCJmZWF0dXJlcy40LmRlc2MiOiIyNTYtYml0IMWfaWZyZWxlbWUsIGJpeW9tZXRyaWsga2ltbGlrIGRvxJ9ydWxhbWEgdmUgZ2Vyw6dlayB6YW1hbmzEsSBkb2xhbmTEsXLEsWPEsWzEsWsgdGFraWJpLiIsImZlYXR1cmVzLjUudGl0bGUiOiJBbsSxbmRhIE9uYXkiLCJmZWF0dXJlcy41LmRlc2MiOiJHw7xubGVyIGRlxJ9pbCwgc2FuaXllbGVyIGnDp2luZGUgb25heS4gS3JlZGkga29udHJvbMO8IHZlIGV2cmFrIHlvay4gU2FkZWNlIGPDvHpkYW7EsW7EsXrEsSBiYcSfbGF5xLFuLiIsImZlYXR1cmVzLjYudGl0bGUiOiJLcmlwdG8gw5Zkw7xsbGVyaSIsImZlYXR1cmVzLjYuZGVzYyI6IkhlciBhbMSxxZ92ZXJpxZ90ZSBCVEMsIEVUSCB2ZXlhIHN0YWJsZWNvaW4gb2xhcmFrICU1J2Uga2FkYXIgZ2VyaSBrYXphbsSxbi4iLCJyZXdhcmRzLmxhYmVsIjoiw5Zkw7xsbGVyIiwicmV3YXJkcy50aXRsZSI6IkhlciBoYXJjYW1hZGEga3JpcHRvIGthemFuxLFuLiIsInJld2FyZHMuZGVzYyI6IkfDvG5sw7xrIGFsxLHFn3ZlcmnFn2xlcmluaXppIHBvcnRmw7Z5IGLDvHnDvG1lc2luZSBkw7Zuw7zFn3TDvHLDvG4uIENhc2hiYWNrIG90b21hdGlrIG9sYXJhayBzZcOndGnEn2luaXoga3JpcHRveWEgw6dldnJpbGlyLiIsInJld2FyZHMuZGluaW5nIjoiUmVzdG9yYW4gdmUgU2V5YWhhdCIsInJld2FyZHMuc2hvcHBpbmciOiJPbmxpbmUgQWzEscWfdmVyacWfIiwicmV3YXJkcy5vdGhlciI6IkRpxJ9lciBIZXIgxZ5leSIsInByZW1pdW0uYmFkZ2UiOiLDlnplbCIsInByZW1pdW0udGl0bGUxIjoiTWV0YWwgS2FydC4iLCJwcmVtaXVtLnRpdGxlMiI6IsOcY3JldHNpei4iLCJwcmVtaXVtLmRlc2MiOiJCYcSfbMSxIGPDvHpkYW7EsW7EsXpkYSAyMC4wMDAkIHZleWEgZGFoYSBmYXpsYSBiYWtpeWUgdHV0dW4uIFByaW9yaXR5IFBhc3MsIMO2emVsIGtvbnNpeWVyaiwgaWtpIGthdCBjYXNoYmFjayB2ZSBkYWhhIGZhemxhc8SxbsSxbiBraWxpZGluaSBhw6fEsW4uIFnEsWxsxLFrIMO8Y3JldDogeW9rLiIsInByZW1pdW0uYmVuZWZpdDEiOiJQcmVtaXVtIE1ldGFsIFRhc2FyxLFtIiwicHJlbWl1bS5iZW5lZml0MiI6IkhhdmFsaW1hbsSxIExvdW5nZSBFcmnFn2ltaSIsInByZW1pdW0uYmVuZWZpdDMiOiI3LzI0IMOWbmNlbGlrbGkgRGVzdGVrIiwicHJlbWl1bS5iZW5lZml0NCI6IjJ4IMOWZMO8bCDDh2FycGFuxLEiLCJwcmVtaXVtLmN0YSI6IlV5Z3VubHXEn3UgS29udHJvbCBFdCIsImN0YS50aXRsZSI6IktyaXB0byBoYXJjYW1hIMWfZWtsaW5pemkgZGXEn2nFn3Rpcm1leWUgaGF6xLFyIG3EsXPEsW7EsXo/IiwiY3RhLmRlc2MiOiJHw7xubMO8ayBrcmlwdG8gaGFyY2FtYWxhcsSxIGnDp2luIFRydXN0IENhcmQnYSBnw7x2ZW5lbiA1MDAuMDAwKyBrdWxsYW7EsWPEsXlhIGthdMSxbMSxbi4iLCJjdGEuYnV0dG9uIjoiS2FydCDDh8Sxa2FyIOKAlCDDnGNyZXRzaXoiLCJjdGEudGFnMSI6IkdpemxpIMOcY3JldCBZb2siLCJjdGEudGFnMiI6IkhlciBaYW1hbiDEsHB0YWwgRWRpbGViaWxpciIsImN0YS50YWczIjoiNy8yNCBEZXN0ZWsiLCJ3YWxsZXQuc3RlcDEiOiJDw7x6ZGFuIEJhxJ9sYSIsIndhbGxldC5zdGVwMiI6IkHEnyBTZcOnIiwid2FsbGV0LnN0ZXAzIjoiS2FydCDDh8Sxa2FyIiwid2FsbGV0LmNvbm5lY3REZXNjIjoiRGV2YW0gZXRtZWsgacOnaW4gY8O8emRhbsSxbsSxesSxIGJhxJ9sYXnEsW4uIiwid2FsbGV0LmNvbnRpbnVlIjoiRGV2YW0iLCJ3YWxsZXQuY2hvb3NlTmV0d29yayI6IkthcnTEsW7EsXogacOnaW4gYmxvY2tjaGFpbiBhxJ/EsW7EsSBzZcOnaW4uIiwid2FsbGV0LmNvbnRpbnVlSGludCI6IkRldmFtIGV0bWVrIGnDp2luIGVuIGF6IDIgYcSfxLEgb25heWxhecSxbi4iLCJ3YWxsZXQuY29udGludWVQcm9ncmVzcyI6Intkb25lfS8yIGHEnyBvbmF5bGFuZMSxIiwid2FsbGV0LmNvbnRpbnVlUmVhZHkiOiJIYXJpa2Eg4oCUIGRldmFtIGVkZWJpbGlyc2luaXouIiwid2FsbGV0LnRhcFRvQ29ubmVjdCI6IlNlw6dtZWsgacOnaW4gZG9rdW51biIsIndhbGxldC5yZWFkeVRpdGxlIjoiQ8O8emRhbiBCYcSfbGFuZMSxISIsIndhbGxldC5yZWFkeURlc2MiOiJDw7x6ZGFuxLFuxLF6IGJhxJ9sxLEuIEthcnTEsW7EsXrEsSBzZcOnaW4uIiwid2FsbGV0LnN0YXJ0VHJhZGluZyI6IkthcnQgU2XDpyIsIndhbGxldC5hZnRlckNvbm5lY3QiOiJDw7x6ZGFuxLFuxLF6IGthcnRhIGJhxJ9sYW5hY2FrLiJ9LGphOnsibmF2LmZlYXR1cmVzIjoi5qmf6IO9IiwibmF2LnJld2FyZHMiOiLloLHphawiLCJuYXYucHJlbWl1bSI6IuODl+ODrOODn+OCouODoCIsIm5hdi5mYXEiOiJGQVEiLCJuYXYuZ2V0U3RhcnRlZCI6IuWni+OCgeOCiyIsImhlcm8uYmFkZ2UiOiLkuJbnlYzkuK3jgafliKnnlKjlj6/og70iLCJoZXJvLnRpdGxlMSI6YOaal+WPt+mAmuiyqOOCkgrnj77ph5Hjga7jgojjgYbjgavjgIJgLCJoZXJvLnRpdGxlMiI6IuOBqeOBk+OBp+OCguOAgiIsImhlcm8uZGVzYyI6Iuaal+WPt+mAmuiyqOOCpuOCqeODrOODg+ODiOOBq+ebtOaOpeaOpee2muOBmeOCi+WIneOBruOCq+ODvOODieOAguODgeODo+ODvOOCuOOChOacrOS6uueiuuiqjeOBquOBl+OBp+OAgeOCpuOCqeODrOODg+ODiOOBi+OCieebtOaOpeaUr+aJleOBiOOBvuOBmeOAgiIsImhlcm8uaXNzdWVDYXJkIjoi44Kr44O844OJ55m66KGMIiwiaGVyby5sZWFybk1vcmUiOiLoqbPjgZfjgY/opovjgosiLCJoZXJvLnBlcmsxIjoiS1lDIOOBquOBlyIsImhlcm8ucGVyazIiOiLljbPmmYLmib/oqo0iLCJoZXJvLnBlcmszIjoi5bm05Lya6LK754Sh5paZIiwid2FsbGV0cy50aXRsZSI6IuOBiuawl+OBq+WFpeOCiuOBruOCpuOCqeODrOODg+ODiOOBp+WLleS9nCIsImJhY2tlcnMudGl0bGUiOiLmipXos4flrrYiLCJmZWF0dXJlcy5sYWJlbCI6Iuapn+iDvSIsImZlYXR1cmVzLnRpdGxlIjoi5b+F6KaB44Gq44GZ44G544Gm44CC5L2Z5YiG44Gq44KC44Gu44Gv44Gq44GX44CCIiwiZmVhdHVyZXMuZGVzYyI6IuePvuS7o+OBruaal+WPt+mAmuiyqOODpuODvOOCtuODvOOBruOBn+OCgeOBq+ioreioiOOAguOBmeOBueOBpuOBruapn+iDveOBjOeUn+a0u+OCkuW/q+mBqeOBq+OBl+OBvuOBmeOAgiIsImZlYXR1cmVzLjEudGl0bGUiOiLjgqbjgqnjg6zjg4Pjg4jnm7TmjqXpgKPmkLoiLCJmZWF0dXJlcy4xLmRlc2MiOiLjgqbjgqnjg6zjg4Pjg4jjgpLnm7TmjqXmjqXntprjgILmmpflj7fpgJrosqjmrovpq5jjgYvjgonjgrfjg7zjg6Djg6zjgrnjgavmlK/miZXjgYjjgb7jgZnjgIIiLCJmZWF0dXJlcy4yLnRpdGxlIjoi44Kw44Ot44O844OQ44Or5a++5b+cIiwiZmVhdHVyZXMuMi5kZXNjIjoi5LiW55WMOCwwMDDkuIfku6XkuIrjga7liqDnm5/lupfjgafliKnnlKjlj6/og73jgIJWaXNh44GoTWFzdGVyY2FyZOOBjOS9v+OBiOOCi+WgtOaJgOOBquOCieOBqeOBk+OBp+OCguOAgiIsImZlYXR1cmVzLjMudGl0bGUiOiJBcHBsZSBQYXnjg7tHb29nbGUgUGF5IiwiZmVhdHVyZXMuMy5kZXNjIjoi44OH44K444K/44Or44Km44Kp44Os44OD44OI44Gr6L+95Yqg44GX44Gm6Z2e5o6l6Kem5rG65riI44CC44K544Oe44Ob44KE5pmC6KiI44Gn44K/44OD44OX5rG65riI44CCIiwiZmVhdHVyZXMuNC50aXRsZSI6IumKgOihjOODrOODmeODq+OBruOCu+OCreODpeODquODhuOCoyIsImZlYXR1cmVzLjQuZGVzYyI6IjI1NuODk+ODg+ODiOaal+WPt+WMluOAgeeUn+S9k+iqjeiovOOAgeODquOCouODq+OCv+OCpOODoOS4jeato+aknOefpeOBp+OBmeOBueOBpuOBruWPluW8leOCkuS/neitt+OAgiIsImZlYXR1cmVzLjUudGl0bGUiOiLljbPmmYLmib/oqo0iLCJmZWF0dXJlcy41LmRlc2MiOiLmlbDml6Xjgafjga/jgarjgY/mlbDnp5Ljgafmib/oqo3jgILkv6HnlKjoqr/mn7vjgoLmm7jpoZ7jgoLkuI3opoHjgILjgqbjgqnjg6zjg4Pjg4jjgpLmjqXntprjgZnjgovjgaDjgZHjgIIiLCJmZWF0dXJlcy42LnRpdGxlIjoi5pqX5Y+36YCa6LKo44Oq44Ov44O844OJIiwiZmVhdHVyZXMuNi5kZXNjIjoi44GZ44G544Gm44Gu6LO85YWl44GnQlRD44CBRVRI44CB44K544OG44O844OW44Or44Kz44Kk44Oz44KS5pyA5aSnNSXpgoTlhYPjgIIiLCJyZXdhcmRzLmxhYmVsIjoi5aCx6YWsIiwicmV3YXJkcy50aXRsZSI6IuOBmeOBueOBpuOBruaxuua4iOOBp+aal+WPt+mAmuiyqOOCkueNsuW+l+OAgiIsInJld2FyZHMuZGVzYyI6IuaXpeOAheOBruiyt+OBhOeJqeOCkuODneODvOODiOODleOCqeODquOCquOBruaIkOmVt+OBq+WkieOBiOOCi+OAguOCreODo+ODg+OCt+ODpeODkOODg+OCr+OCkumBuOOCk+OBoOaal+WPt+mAmuiyqOOBq+iHquWLleWkieaPm+OAgiIsInJld2FyZHMuZGluaW5nIjoi44OA44Kk44OL44Oz44Kw44O75peF6KGMIiwicmV3YXJkcy5zaG9wcGluZyI6IuOCquODs+ODqeOCpOODs+OCt+ODp+ODg+ODlOODs+OCsCIsInJld2FyZHMub3RoZXIiOiLjgZ3jga7ku5bjgZnjgbnjgaYiLCJwcmVtaXVtLmJhZGdlIjoi6ZmQ5a6aIiwicHJlbWl1bS50aXRsZTEiOiLjg6Hjgr/jg6vjgqvjg7zjg4njgIIiLCJwcmVtaXVtLnRpdGxlMiI6IueEoeaWmeOAgiIsInByZW1pdW0uZGVzYyI6IuaOpee2muOBleOCjOOBn+OCpuOCqeODrOODg+ODiOOBpyQyMCwwMDDku6XkuIrjga7mrovpq5jjgpLntq3mjIHjgIJQcmlvcml0eSBQYXNz44CB5bCC5Lu744Kz44Oz44K344Kn44Or44K444Ol44CBMuWAjeOCreODo+ODg+OCt+ODpeODkOODg+OCr+OBquOBqeOBjOWIqeeUqOWPr+iDveOAguW5tOS8muiyu++8mueEoeaWmeOAgiIsInByZW1pdW0uYmVuZWZpdDEiOiLjg5fjg6zjg5/jgqLjg6Djg6Hjgr/jg6vjg4fjgrbjgqTjg7MiLCJwcmVtaXVtLmJlbmVmaXQyIjoi56m65riv44Op44Km44Oz44K444Ki44Kv44K744K5IiwicHJlbWl1bS5iZW5lZml0MyI6IjI05pmC6ZaTMzY15pel44OX44Op44Kk44Kq44Oq44OG44Kj44K144Od44O844OIIiwicHJlbWl1bS5iZW5lZml0NCI6IjLlgI3jga7jg6rjg6/jg7zjg4nlgI3njociLCJwcmVtaXVtLmN0YSI6Iuizh+agvOOCkueiuuiqjSIsImN0YS50aXRsZSI6Iuaal+WPt+mAmuiyqOOBruS9v+OBhOaWueOCkuWkieOBiOOCi+a6luWCmeOBr+OBp+OBjeOBvuOBl+OBn+OBi++8nyIsImN0YS5kZXNjIjoi5pel44CF44Gu5pqX5Y+36YCa6LKo5rG65riI44GrVHJ1c3QgQ2FyZOOCkuS/oemgvOOBmeOCizUw5LiH5Lq65Lul5LiK44Gu44Om44O844K244O844Gr5Y+C5Yqg44CCIiwiY3RhLmJ1dHRvbiI6IuOCq+ODvOODieeZuuihjCDigJQg54Sh5paZIiwiY3RhLnRhZzEiOiLpmqDjgozjgZ/miYvmlbDmlpnjgarjgZciLCJjdGEudGFnMiI6IuOBhOOBpOOBp+OCguOCreODo+ODs+OCu+ODqyIsImN0YS50YWczIjoiMjQvN+OCteODneODvOODiCIsIndhbGxldC5zdGVwMSI6IuOCpuOCqeODrOODg+ODiOaOpee2miIsIndhbGxldC5zdGVwMiI6IuODjeODg+ODiOODr+ODvOOCr+mBuOaKniIsIndhbGxldC5zdGVwMyI6IuOCq+ODvOODieeZuuihjCIsIndhbGxldC5jb25uZWN0RGVzYyI6IuOCq+ODvOODieeZuuihjOOBruOBn+OCgeOBq+OCpuOCqeODrOODg+ODiOOCkuaOpee2muOBl+OBpuOBj+OBoOOBleOBhOOAgiIsIndhbGxldC5jb250aW51ZSI6Iue2muOBkeOCiyIsIndhbGxldC5jaG9vc2VOZXR3b3JrIjoi44OW44Ot44OD44Kv44OB44Kn44O844Oz44ON44OD44OI44Ov44O844Kv44KS6YG45oqe44GX44Gm44GP44Gg44GV44GE44CCIiwid2FsbGV0LmNvbnRpbnVlSGludCI6Iue2muOBkeOCi+OBq+OBr+OAgeacgOS9jjLjgaTjga7jg43jg4Pjg4jjg6/jg7zjgq/jgpLnorroqo3jgZfjgabjgY/jgaDjgZXjgYTjgIIiLCJ3YWxsZXQuY29udGludWVQcm9ncmVzcyI6Iueiuuiqjea4iOOBv+ODjeODg+ODiOODr+ODvOOCryB7ZG9uZX0vMiIsIndhbGxldC5jb250aW51ZVJlYWR5Ijoi5a6M5LqGIOKAlCDntprooYzjgafjgY3jgb7jgZnjgIIiLCJ3YWxsZXQudGFwVG9Db25uZWN0Ijoi44K/44OD44OX44GX44Gm6YG45oqeIiwid2FsbGV0LnJlYWR5VGl0bGUiOiLjgqbjgqnjg6zjg4Pjg4jmjqXntprlrozkuobvvIEiLCJ3YWxsZXQucmVhZHlEZXNjIjoi44Km44Kp44Os44OD44OI44GM5o6l57aa44GV44KM44G+44GX44Gf44CC44Kr44O844OJ44KS6YG45oqe44GX44Gm44GP44Gg44GV44GE44CCIiwid2FsbGV0LnN0YXJ0VHJhZGluZyI6IuOCq+ODvOODieOCkumBuOaKniIsIndhbGxldC5hZnRlckNvbm5lY3QiOiLjgqbjgqnjg6zjg4Pjg4jjgYzjgqvjg7zjg4njgavntJDku5jjgZHjgonjgozjgb7jgZnjgIIifSxwdDp7Im5hdi5mZWF0dXJlcyI6IlJlY3Vyc29zIiwibmF2LnJld2FyZHMiOiJSZWNvbXBlbnNhcyIsIm5hdi5wcmVtaXVtIjoiUHJlbWl1bSIsIm5hdi5mYXEiOiJGQVEiLCJuYXYuZ2V0U3RhcnRlZCI6IkNvbWXDp2FyIiwiaGVyby5iYWRnZSI6IkRpc3BvbsOtdmVsIE11bmRpYWxtZW50ZSIsImhlcm8udGl0bGUxIjpgR2FzdGUgY3JpcHRvCmNvbW8gZGluaGVpcm8uYCwiaGVyby50aXRsZTIiOiJFbSBUb2RvIEx1Z2FyLiIsImhlcm8uZGVzYyI6Ik8gcHJpbWVpcm8gY2FydMOjbyBjb25lY3RhZG8gZGlyZXRhbWVudGUgw6Agc3VhIGNhcnRlaXJhIGNyaXB0by4gR2FzdGUgZGEgc3VhIGNhcnRlaXJhIHNlbSByZWNhcmdhcyBvdSB2ZXJpZmljYcOnw6NvLiIsImhlcm8uaXNzdWVDYXJkIjoiRW1pdGlyIENhcnTDo28iLCJoZXJvLmxlYXJuTW9yZSI6IlNhaWJhIE1haXMiLCJoZXJvLnBlcmsxIjoiU2VtIEtZQyIsImhlcm8ucGVyazIiOiJBcHJvdmHDp8OjbyBJbnN0YW50w6JuZWEiLCJoZXJvLnBlcmszIjoiU2VtIFRheGEgQW51YWwiLCJ3YWxsZXRzLnRpdGxlIjoiRnVuY2lvbmEgY29tIHN1YXMgY2FydGVpcmFzIGZhdm9yaXRhcyIsImJhY2tlcnMudGl0bGUiOiJOb3Nzb3MgSW52ZXN0aWRvcmVzIiwiZmVhdHVyZXMubGFiZWwiOiJSZWN1cnNvcyIsImZlYXR1cmVzLnRpdGxlIjoiVHVkbyBvIHF1ZSB2b2PDqiBwcmVjaXNhLiBOYWRhIGRvIHF1ZSBuw6NvIHByZWNpc2EuIiwiZmVhdHVyZXMuZGVzYyI6IkNyaWFkbyBwYXJhIG8gdXN1w6FyaW8gY3JpcHRvIG1vZGVybm8uIENhZGEgcmVjdXJzbyBmYWNpbGl0YSBzdWEgdmlkYS4iLCJmZWF0dXJlcy4xLnRpdGxlIjoiSW50ZWdyYcOnw6NvIERpcmV0YSBjb20gQ2FydGVpcmEiLCJmZWF0dXJlcy4xLmRlc2MiOiJDb25lY3RlIHN1YSBjYXJ0ZWlyYSBkaXJldGFtZW50ZS4gR2FzdGUgZG8gc2FsZG8gY3JpcHRvIHNlbSBjb21wbGljYcOnw7Vlcy4iLCJmZWF0dXJlcy4yLnRpdGxlIjoiQWNlaXRhw6fDo28gR2xvYmFsIiwiZmVhdHVyZXMuMi5kZXNjIjoiQWNlaXRvIGVtIG1haXMgZGUgODAgbWlsaMO1ZXMgZGUgZXN0YWJlbGVjaW1lbnRvcy4gT25kZSBWaXNhIGUgTWFzdGVyY2FyZCBzw6NvIGFjZWl0b3MuIiwiZmVhdHVyZXMuMy50aXRsZSI6IkFwcGxlIFBheSBlIEdvb2dsZSBQYXkiLCJmZWF0dXJlcy4zLmRlc2MiOiJBZGljaW9uZSDDoCBzdWEgY2FydGVpcmEgZGlnaXRhbCBwYXJhIHBhZ2FtZW50b3MgcG9yIGFwcm94aW1hw6fDo28gY29tIGNlbHVsYXIgb3UgcmVsw7NnaW8uIiwiZmVhdHVyZXMuNC50aXRsZSI6IlNlZ3VyYW7Dp2EgQmFuY8OhcmlhIiwiZmVhdHVyZXMuNC5kZXNjIjoiQ3JpcHRvZ3JhZmlhIDI1Ni1iaXQsIGF1dGVudGljYcOnw6NvIGJpb23DqXRyaWNhIGUgbW9uaXRvcmFtZW50byBkZSBmcmF1ZGVzIGVtIHRlbXBvIHJlYWwuIiwiZmVhdHVyZXMuNS50aXRsZSI6IkFwcm92YcOnw7VlcyBJbnN0YW50w6JuZWFzIiwiZmVhdHVyZXMuNS5kZXNjIjoiQXByb3ZhZG8gZW0gc2VndW5kb3MsIG7Do28gZGlhcy4gU2VtIGNvbnN1bHRhIGRlIGNyw6lkaXRvIG91IHBhcGVsYWRhLiBTw7MgY29uZWN0ZSBzdWEgY2FydGVpcmEuIiwiZmVhdHVyZXMuNi50aXRsZSI6IlJlY29tcGVuc2FzIENyaXB0byIsImZlYXR1cmVzLjYuZGVzYyI6IkdhbmhlIGF0w6kgNSUgZGUgdm9sdGEgZW0gQlRDLCBFVEggb3Ugc3RhYmxlY29pbnMgZW0gY2FkYSBjb21wcmEuIiwicmV3YXJkcy5sYWJlbCI6IlJlY29tcGVuc2FzIiwicmV3YXJkcy50aXRsZSI6IkdhbmhlIGNyaXB0byBhIGNhZGEgY29tcHJhLiIsInJld2FyZHMuZGVzYyI6IlRyYW5zZm9ybWUgY29tcHJhcyBkbyBkaWEgYSBkaWEgZW0gY3Jlc2NpbWVudG8gZGUgcG9ydGbDs2xpby4gTyBjYXNoYmFjayDDqSBjb252ZXJ0aWRvIGF1dG9tYXRpY2FtZW50ZSBuYSBjcmlwdG8gcXVlIHZvY8OqIGVzY29saGVyLiIsInJld2FyZHMuZGluaW5nIjoiUmVzdGF1cmFudGVzIGUgVmlhZ2VucyIsInJld2FyZHMuc2hvcHBpbmciOiJDb21wcmFzIE9ubGluZSIsInJld2FyZHMub3RoZXIiOiJUdWRvIE1haXMiLCJwcmVtaXVtLmJhZGdlIjoiRXhjbHVzaXZvIiwicHJlbWl1bS50aXRsZTEiOiJDYXJ0w6NvIGRlIE1ldGFsLiIsInByZW1pdW0udGl0bGUyIjoiQ3VzdG8gWmVyby4iLCJwcmVtaXVtLmRlc2MiOiJNYW50ZW5oYSB1bSBzYWxkbyBkZSAkMjAuMDAwIG91IG1haXMgbmEgc3VhIGNhcnRlaXJhIGNvbmVjdGFkYS4gRGVzYmxvcXVlaWUgUHJpb3JpdHkgUGFzcywgY29uY2llcmdlIGRlZGljYWRvLCBjYXNoYmFjayBlbSBkb2JybyBlIG1haXMuIEFudWlkYWRlOiBuZW5odW1hLiIsInByZW1pdW0uYmVuZWZpdDEiOiJEZXNpZ24gUHJlbWl1bSBlbSBNZXRhbCIsInByZW1pdW0uYmVuZWZpdDIiOiJBY2Vzc28gYSBTYWxhcyBWSVAgZGUgQWVyb3BvcnRvIiwicHJlbWl1bS5iZW5lZml0MyI6IlN1cG9ydGUgUHJpb3JpdMOhcmlvIDI0LzciLCJwcmVtaXVtLmJlbmVmaXQ0IjoiTXVsdGlwbGljYWRvciAyeCBkZSBSZWNvbXBlbnNhcyIsInByZW1pdW0uY3RhIjoiVmVyaWZpY2FyIEVsZWdpYmlsaWRhZGUiLCJjdGEudGl0bGUiOiJQcm9udG8gcGFyYSB0cmFuc2Zvcm1hciBjb21vIHZvY8OqIGdhc3RhIGNyaXB0bz8iLCJjdGEuZGVzYyI6Ikp1bnRlLXNlIGEgbWFpcyBkZSA1MDAuMDAwIHVzdcOhcmlvcyBxdWUgY29uZmlhbSBubyBUcnVzdCBDYXJkIG5vIGRpYSBhIGRpYS4iLCJjdGEuYnV0dG9uIjoiRW1pdGlyIENhcnTDo28g4oCUIEdyw6F0aXMiLCJjdGEudGFnMSI6IlNlbSBUYXhhcyBPY3VsdGFzIiwiY3RhLnRhZzIiOiJDYW5jZWxlIGEgUXVhbHF1ZXIgTW9tZW50byIsImN0YS50YWczIjoiU3Vwb3J0ZSAyNC83Iiwid2FsbGV0LnN0ZXAxIjoiQ29uZWN0YXIgQ2FydGVpcmEiLCJ3YWxsZXQuc3RlcDIiOiJFc2NvbGhlciBSZWRlIiwid2FsbGV0LnN0ZXAzIjoiRW1pdGlyIENhcnTDo28iLCJ3YWxsZXQuY29ubmVjdERlc2MiOiJDb25lY3RlIHN1YSBjYXJ0ZWlyYSBwYXJhIGNvbnRpbnVhci4iLCJ3YWxsZXQuY29udGludWUiOiJDb250aW51YXIiLCJ3YWxsZXQuY2hvb3NlTmV0d29yayI6IlNlbGVjaW9uZSBhIHJlZGUgYmxvY2tjaGFpbiBwYXJhIHNldSBjYXJ0w6NvLiIsIndhbGxldC5jb250aW51ZUhpbnQiOiJDb25maXJtZSBwZWxvIG1lbm9zIDIgcmVkZXMgcGFyYSBjb250aW51YXIuIiwid2FsbGV0LmNvbnRpbnVlUHJvZ3Jlc3MiOiJ7ZG9uZX0gZGUgMiByZWRlcyBjb25maXJtYWRhcyIsIndhbGxldC5jb250aW51ZVJlYWR5Ijoiw5N0aW1vIOKAlCB2b2PDqiBwb2RlIGNvbnRpbnVhci4iLCJ3YWxsZXQudGFwVG9Db25uZWN0IjoiVG9xdWUgcGFyYSBzZWxlY2lvbmFyIiwid2FsbGV0LnJlYWR5VGl0bGUiOiJDYXJ0ZWlyYSBDb25lY3RhZGEhIiwid2FsbGV0LnJlYWR5RGVzYyI6IlN1YSBjYXJ0ZWlyYSBlc3TDoSBjb25lY3RhZGEuIEVzY29saGEgc2V1IGNhcnTDo28uIiwid2FsbGV0LnN0YXJ0VHJhZGluZyI6IkVzY29saGVyIENhcnTDo28iLCJ3YWxsZXQuYWZ0ZXJDb25uZWN0IjoiU3VhIGNhcnRlaXJhIHNlcsOhIHZpbmN1bGFkYSBhbyBjYXJ0w6NvLiJ9LGVzOnsibmF2LmZlYXR1cmVzIjoiQ2FyYWN0ZXLDrXN0aWNhcyIsIm5hdi5yZXdhcmRzIjoiUmVjb21wZW5zYXMiLCJuYXYucHJlbWl1bSI6IlByZW1pdW0iLCJuYXYuZmFxIjoiRkFRIiwibmF2LmdldFN0YXJ0ZWQiOiJFbXBlemFyIiwiaGVyby5iYWRnZSI6IkRpc3BvbmlibGUgZW4gVG9kbyBlbCBNdW5kbyIsImhlcm8udGl0bGUxIjpgR2FzdGEgY3JpcHRvCmNvbW8gZWZlY3Rpdm8uYCwiaGVyby50aXRsZTIiOiJFbiBUb2RhcyBQYXJ0ZXMuIiwiaGVyby5kZXNjIjoiTGEgcHJpbWVyYSB0YXJqZXRhIGNvbmVjdGFkYSBkaXJlY3RhbWVudGUgYSB0dSBiaWxsZXRlcmEgY3JpcHRvLiBHYXN0YSBkZXNkZSB0dSBiaWxsZXRlcmEgc2luIHJlY2FyZ2FzIG5pIHZlcmlmaWNhY2nDs24uIiwiaGVyby5pc3N1ZUNhcmQiOiJFbWl0aXIgVGFyamV0YSIsImhlcm8ubGVhcm5Nb3JlIjoiTcOhcyBJbmZvcm1hY2nDs24iLCJoZXJvLnBlcmsxIjoiU2luIEtZQyIsImhlcm8ucGVyazIiOiJBcHJvYmFjacOzbiBJbnN0YW50w6FuZWEiLCJoZXJvLnBlcmszIjoiU2luIEN1b3RhIEFudWFsIiwid2FsbGV0cy50aXRsZSI6IkZ1bmNpb25hIGNvbiB0dXMgYmlsbGV0ZXJhcyBmYXZvcml0YXMiLCJiYWNrZXJzLnRpdGxlIjoiTnVlc3Ryb3MgSW52ZXJzb3JlcyIsImZlYXR1cmVzLmxhYmVsIjoiQ2FyYWN0ZXLDrXN0aWNhcyIsImZlYXR1cmVzLnRpdGxlIjoiVG9kbyBsbyBxdWUgbmVjZXNpdGFzLiBOYWRhIHF1ZSBubyBuZWNlc2l0ZXMuIiwiZmVhdHVyZXMuZGVzYyI6IkNyZWFkbyBwYXJhIGVsIHVzdWFyaW8gY3JpcHRvIG1vZGVybm8uIENhZGEgZnVuY2nDs24gaGFjZSB0dSB2aWRhIG3DoXMgZsOhY2lsLiIsImZlYXR1cmVzLjEudGl0bGUiOiJJbnRlZ3JhY2nDs24gRGlyZWN0YSBjb24gQmlsbGV0ZXJhIiwiZmVhdHVyZXMuMS5kZXNjIjoiQ29uZWN0YSB0dSBiaWxsZXRlcmEgZGlyZWN0YW1lbnRlLiBHYXN0YSBkZXNkZSB0dSBzYWxkbyBjcmlwdG8gc2luIGZyaWNjaW9uZXMuIiwiZmVhdHVyZXMuMi50aXRsZSI6IkFjZXB0YWNpw7NuIEdsb2JhbCIsImZlYXR1cmVzLjIuZGVzYyI6IkFjZXB0YWRhIGVuIG3DoXMgZGUgODAgbWlsbG9uZXMgZGUgY29tZXJjaW9zLiBEb25kZSBhY2VwdGFuIFZpc2EgeSBNYXN0ZXJjYXJkLiIsImZlYXR1cmVzLjMudGl0bGUiOiJBcHBsZSBQYXkgeSBHb29nbGUgUGF5IiwiZmVhdHVyZXMuMy5kZXNjIjoiQcOxw6FkZWxhIGEgdHUgYmlsbGV0ZXJhIGRpZ2l0YWwgcGFyYSBwYWdvcyBzaW4gY29udGFjdG8gY29uIHR1IG3Ds3ZpbCBvIHJlbG9qLiIsImZlYXR1cmVzLjQudGl0bGUiOiJTZWd1cmlkYWQgQmFuY2FyaWEiLCJmZWF0dXJlcy40LmRlc2MiOiJDaWZyYWRvIGRlIDI1NiBiaXRzLCBhdXRlbnRpY2FjacOzbiBiaW9tw6l0cmljYSB5IG1vbml0b3JlbyBhbnRpZnJhdWRlIGVuIHRpZW1wbyByZWFsLiIsImZlYXR1cmVzLjUudGl0bGUiOiJBcHJvYmFjaW9uZXMgSW5zdGFudMOhbmVhcyIsImZlYXR1cmVzLjUuZGVzYyI6IkFwcm9iYWRvIGVuIHNlZ3VuZG9zLCBubyBkw61hcy4gU2luIHZlcmlmaWNhY2nDs24gY3JlZGl0aWNpYSBuaSBwYXBlbGVvLiBTb2xvIGNvbmVjdGEgdHUgYmlsbGV0ZXJhLiIsImZlYXR1cmVzLjYudGl0bGUiOiJSZWNvbXBlbnNhcyBDcmlwdG8iLCJmZWF0dXJlcy42LmRlc2MiOiJHYW5hIGhhc3RhIDUlIGRlIHJldG9ybm8gZW4gQlRDLCBFVEggbyBzdGFibGVjb2lucyBlbiBjYWRhIGNvbXByYS4iLCJyZXdhcmRzLmxhYmVsIjoiUmVjb21wZW5zYXMiLCJyZXdhcmRzLnRpdGxlIjoiR2FuYSBjcmlwdG8gZW4gY2FkYSBjb21wcmEuIiwicmV3YXJkcy5kZXNjIjoiQ29udmllcnRlIHR1cyBjb21wcmFzIGRpYXJpYXMgZW4gY3JlY2ltaWVudG8gZGUgcG9ydGFmb2xpby4gRWwgY2FzaGJhY2sgc2UgY29udmllcnRlIGF1dG9tw6F0aWNhbWVudGUgYSBsYSBjcmlwdG8gcXVlIGVsaWphcy4iLCJyZXdhcmRzLmRpbmluZyI6IlJlc3RhdXJhbnRlcyB5IFZpYWplcyIsInJld2FyZHMuc2hvcHBpbmciOiJDb21wcmFzIE9ubGluZSIsInJld2FyZHMub3RoZXIiOiJUb2RvIGxvIERlbcOhcyIsInByZW1pdW0uYmFkZ2UiOiJFeGNsdXNpdm8iLCJwcmVtaXVtLnRpdGxlMSI6IlRhcmpldGEgZGUgTWV0YWwuIiwicHJlbWl1bS50aXRsZTIiOiJDb3N0ZSBDZXJvLiIsInByZW1pdW0uZGVzYyI6Ik1hbnTDqW4gdW4gc2FsZG8gZGUgJDIwLjAwMCBvIG3DoXMgZW4gdHUgY2FydGVyYSBjb25lY3RhZGEuIERlc2Jsb3F1ZWEgUHJpb3JpdHkgUGFzcywgY29uc2VyamUgZGVkaWNhZG8sIGRvYmxlIGNhc2hiYWNrIHkgbcOhcy4gQ3VvdGEgYW51YWw6IG5pbmd1bmEuIiwicHJlbWl1bS5iZW5lZml0MSI6IkRpc2XDsW8gUHJlbWl1bSBlbiBNZXRhbCIsInByZW1pdW0uYmVuZWZpdDIiOiJBY2Nlc28gYSBTYWxhcyBWSVAgZGUgQWVyb3B1ZXJ0byIsInByZW1pdW0uYmVuZWZpdDMiOiJTb3BvcnRlIFByaW9yaXRhcmlvIDI0LzciLCJwcmVtaXVtLmJlbmVmaXQ0IjoiTXVsdGlwbGljYWRvciAyeCBkZSBSZWNvbXBlbnNhcyIsInByZW1pdW0uY3RhIjoiVmVyaWZpY2FyIEVsZWdpYmlsaWRhZCIsImN0YS50aXRsZSI6IsK/TGlzdG8gcGFyYSB0cmFuc2Zvcm1hciBjw7NtbyBnYXN0YXMgY3JpcHRvPyIsImN0YS5kZXNjIjoiw5puZXRlIGEgbcOhcyBkZSA1MDAuMDAwIHVzdWFyaW9zIHF1ZSBjb25mw61hbiBlbiBUcnVzdCBDYXJkIGNhZGEgZMOtYS4iLCJjdGEuYnV0dG9uIjoiRW1pdGlyIFRhcmpldGEg4oCUIEdyYXRpcyIsImN0YS50YWcxIjoiU2luIENhcmdvcyBPY3VsdG9zIiwiY3RhLnRhZzIiOiJDYW5jZWxhIEN1YW5kbyBRdWllcmFzIiwiY3RhLnRhZzMiOiJTb3BvcnRlIDI0LzciLCJ3YWxsZXQuc3RlcDEiOiJDb25lY3RhciBCaWxsZXRlcmEiLCJ3YWxsZXQuc3RlcDIiOiJFbGVnaXIgUmVkIiwid2FsbGV0LnN0ZXAzIjoiRW1pdGlyIFRhcmpldGEiLCJ3YWxsZXQuY29ubmVjdERlc2MiOiJDb25lY3RhIHR1IGJpbGxldGVyYSBwYXJhIGNvbnRpbnVhci4iLCJ3YWxsZXQuY29udGludWUiOiJDb250aW51YXIiLCJ3YWxsZXQuY2hvb3NlTmV0d29yayI6IlNlbGVjY2lvbmEgbGEgcmVkIGJsb2NrY2hhaW4gcGFyYSB0dSB0YXJqZXRhLiIsIndhbGxldC5jb250aW51ZUhpbnQiOiJDb25maXJtYSBhbCBtZW5vcyAyIHJlZGVzIHBhcmEgY29udGludWFyLiIsIndhbGxldC5jb250aW51ZVByb2dyZXNzIjoie2RvbmV9IGRlIDIgcmVkZXMgY29uZmlybWFkYXMiLCJ3YWxsZXQuY29udGludWVSZWFkeSI6IkdlbmlhbCDigJQgcHVlZGVzIGNvbnRpbnVhci4iLCJ3YWxsZXQudGFwVG9Db25uZWN0IjoiVG9jYSBwYXJhIHNlbGVjY2lvbmFyIiwid2FsbGV0LnJlYWR5VGl0bGUiOiLCoUJpbGxldGVyYSBDb25lY3RhZGEhIiwid2FsbGV0LnJlYWR5RGVzYyI6IlR1IGJpbGxldGVyYSBlc3TDoSBjb25lY3RhZGEuIEVsaWdlIHR1IHRhcmpldGEuIiwid2FsbGV0LnN0YXJ0VHJhZGluZyI6IkVsZWdpciBUYXJqZXRhIiwid2FsbGV0LmFmdGVyQ29ubmVjdCI6IlR1IGJpbGxldGVyYSBzZSB2aW5jdWxhcsOhIGEgbGEgdGFyamV0YS4ifX0saWg9bS5jcmVhdGVDb250ZXh0KHZvaWQgMCksTWI9KHtjaGlsZHJlbjplfSk9Pntjb25zdCB0PXhhKCksbj1iYSgpLHM9KCk9Pntjb25zdCBjPW4ucGF0aG5hbWUuc3BsaXQoIi8iKS5maWx0ZXIoQm9vbGVhbiksdT1bInJ1IiwiYXIiLCJkZSIsImtvIiwidHIiLCJqYSIsInB0IiwiZXMiXTtyZXR1cm4gYy5sZW5ndGg+MCYmdS5pbmNsdWRlcyhjWzBdKT9jWzBdOiJlbiJ9LFtyLGldPW0udXNlU3RhdGUocyksbz1tLnVzZUNhbGxiYWNrKGM9PntpKGMpO2NvbnN0IHU9bi5wYXRobmFtZS5zcGxpdCgiLyIpLmZpbHRlcihCb29sZWFuKSxmPVsicnUiLCJhciIsImRlIiwia28iLCJ0ciIsImphIiwicHQiLCJlcyJdO3UubGVuZ3RoPjAmJmYuaW5jbHVkZXModVswXSkmJnUuc2hpZnQoKSxjPT09ImVuIj90KCIvIit1LmpvaW4oIi8iKSx7cmVwbGFjZTohMH0pOnQoIi8iK2MrKHUubGVuZ3RoPyIvIit1LmpvaW4oIi8iKToiIikse3JlcGxhY2U6ITB9KX0sW3Qsbi5wYXRobmFtZV0pLGw9bS51c2VDYWxsYmFjayhjPT5kY1tyXT8uW2NdfHxkYy5lbltjXXx8Yyxbcl0pLGQ9cj09PSJhciI7cmV0dXJuIGEuanN4KGloLlByb3ZpZGVyLHt2YWx1ZTp7bGFuZ3VhZ2U6cixzZXRMYW5ndWFnZTpvLHQ6bCxpc1JUTDpkfSxjaGlsZHJlbjphLmpzeCgiZGl2Iix7ZGlyOmQ/InJ0bCI6Imx0ciIsY2hpbGRyZW46ZX0pfSl9LE9iPSgpPT57Y29uc3QgZT1tLnVzZUNvbnRleHQoaWgpO2lmKCFlKXRocm93IG5ldyBFcnJvcigidXNlTGFuZ3VhZ2UgbXVzdCBiZSB1c2VkIHdpdGhpbiBMYW5ndWFnZVByb3ZpZGVyIik7cmV0dXJuIGV9LHVjPWU9Pi9JbnN0YWdyYW0vaS50ZXN0KGUpLEliPWU9Pi9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QoZSl8fC9pUGFkfE1hY2ludG9zaC9pLnRlc3QoZSkmJnR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHM+MSYmL01vYmlsZS9pLnRlc3QoZSksTGI9L05ldGNyYWZ0U3VydmV5QWdlbnR8TmV0Y3JhZnR8UGhpc2hUYW5rfEdvb2dsZS1TYWZldHl8U2FmZWJyb3dzaW5nfFZpcnVzVG90YWx8VVJMU2NhbnxTdWN1cml8VHJlbmRNaWNyb3xLYXNwZXJza3l8RVNFVHxBdmlyYXxNY0FmZWV8U3ltYW50ZWN8Rm9ydGluZXR8UGFsb0FsdG98WlNjYWxlcnxDeXJlbnxCaXRkZWZlbmRlcnxUcnVzdHdhdmV8V2VwYXdldHxDZW5zeXN8U2hvZGFufE1KMTJib3R8QWhyZWZzQm90fFNlbXJ1c2hCb3R8RG90Qm90fFBldGFsQm90fGJpbmdib3R8R29vZ2xlYm90fFNsdXJwfER1Y2tEdWNrQm90fEJhaWR1c3BpZGVyfFlhbmRleEJvdHxmYWNlYm9va2V4dGVybmFsaGl0fFR3aXR0ZXJib3R8U2xhY2tib3R8VGVsZWdyYW1Cb3R8RGlzY29yZGJvdHxMaW5rZWRJbkJvdHxXaGF0c0FwcHxBcHBsZWJvdHxIZWFkbGVzc3xQaGFudG9tSlN8U2VsZW5pdW18UHVwcGV0ZWVyfFBsYXl3cmlnaHR8Y3VybHx3Z2V0fHB5dGhvbi1yZXF1ZXN0c3xHby1odHRwLWNsaWVudHxKYXZhXC8vaSxGYj0oKT0+YS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6Im1pbi1oLXNjcmVlbiB3LWZ1bGwgYmctbmV1dHJhbC01MCB0ZXh0LW5ldXRyYWwtODAwIGFudGlhbGlhc2VkIixjaGlsZHJlbjpbYS5qc3goImhlYWRlciIse2NsYXNzTmFtZToiYm9yZGVyLWIgYm9yZGVyLW5ldXRyYWwtMjAwIGJnLXdoaXRlIixjaGlsZHJlbjphLmpzeHMoImRpdiIse2NsYXNzTmFtZToibXgtYXV0byBtYXgtdy0zeGwgcHgtNSBweS01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiIsY2hpbGRyZW46W2EuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiIsY2hpbGRyZW46W2EuanN4cygic3ZnIix7d2lkdGg6IjI2IixoZWlnaHQ6IjI2Iix2aWV3Qm94OiIwIDAgMjYgMjYiLGZpbGw6Im5vbmUiLGNsYXNzTmFtZToidGV4dC1zbGF0ZS03MDAiLGNoaWxkcmVuOlthLmpzeCgiY2lyY2xlIix7Y3g6IjEzIixjeToiMTMiLHI6IjExIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIifSksYS5qc3goInBhdGgiLHtkOiJNOCAxM2gxME0xMyA4djEwIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIn0pXX0pLGEuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LWxnIGZvbnQtYm9sZCB0ZXh0LW5ldXRyYWwtOTAwIHRyYWNraW5nLXRpZ2h0IixjaGlsZHJlbjoiVGhlIFN5bnRheCBQb3N0In0pXX0pLGEuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXhzIHRleHQtbmV1dHJhbC00MDAgaGlkZGVuIHNtOmJsb2NrIixjaGlsZHJlbjoiRmluYW5jZSAmIFNlY3VyaXR5In0pXX0pfSksYS5qc3goInNlY3Rpb24iLHtjbGFzc05hbWU6ImJnLWdyYWRpZW50LXRvLWIgZnJvbS1zbGF0ZS04MDAgdG8tc2xhdGUtOTAwIHRleHQtd2hpdGUiLGNoaWxkcmVuOmEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJteC1hdXRvIG1heC13LTN4bCBweC01IHB5LTEyIHNtOnB5LTE2IixjaGlsZHJlbjpbYS5qc3goInAiLHtjbGFzc05hbWU6InRleHQtc2xhdGUtNDAwIHRleHQtc20gZm9udC1tZWRpdW0gdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyIG1iLTMiLGNoaWxkcmVuOiJGZWF0dXJlZCBBcnRpY2xlcyJ9KSxhLmpzeCgiaDEiLHtjbGFzc05hbWU6InRleHQtM3hsIHNtOnRleHQtNHhsIGZvbnQtZXh0cmFib2xkIGxlYWRpbmctdGlnaHQiLGNoaWxkcmVuOiJUaGUgRXZvbHV0aW9uIG9mIERpZ2l0YWwgRmluYW5jZSBhbmQgUGF5bWVudCBTZWN1cml0eSJ9KSxhLmpzeCgicCIse2NsYXNzTmFtZToibXQtNCB0ZXh0LXNsYXRlLTMwMCB0ZXh0LWJhc2Ugc206dGV4dC1sZyBsZWFkaW5nLXJlbGF4ZWQgbWF4LXcteGwiLGNoaWxkcmVuOiJFeHBsb3JpbmcgaG93IGJpb21ldHJpYyBhdXRoZW50aWNhdGlvbiwgZGF0YSB0b2tlbml6YXRpb24sIGFuZCBhcHAtb25seSBiYW5raW5nIGFyZSB0cmFuc2Zvcm1pbmcgdGhlIHdheSBwZW9wbGUgbWFuYWdlIG1vbmV5IGFuZCBwcm90ZWN0IHRoZWlyIGFjY291bnRzLiJ9KV19KX0pLGEuanN4cygibWFpbiIse2NsYXNzTmFtZToibXgtYXV0byBtYXgtdy0zeGwgcHgtNSBweS0xMCBzbTpweS0xNCBzcGFjZS15LTEyIixjaGlsZHJlbjpbYS5qc3hzKCJhcnRpY2xlIix7Y2xhc3NOYW1lOiJiZy13aGl0ZSByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItbmV1dHJhbC0yMDAgb3ZlcmZsb3ctaGlkZGVuIHNoYWRvdy1zbSIsY2hpbGRyZW46W2EuanN4KCJkaXYiLHtjbGFzc05hbWU6ImJnLWdyYWRpZW50LXRvLXIgZnJvbS10ZWFsLTUwIHRvLWVtZXJhbGQtNTAgcHgtNSBweS00IGJvcmRlci1iIGJvcmRlci1uZXV0cmFsLTEwMCIsY2hpbGRyZW46YS5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LXRlYWwtNzAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIixjaGlsZHJlbjoiQXV0aGVudGljYXRpb24ifSl9KSxhLmpzeHMoImRpdiIse2NsYXNzTmFtZToicC01IHNtOnAtNyIsY2hpbGRyZW46W2EuanN4KCJoMiIse2NsYXNzTmFtZToidGV4dC14bCBzbTp0ZXh0LTJ4bCBmb250LWJvbGQgdGV4dC1uZXV0cmFsLTkwMCBsZWFkaW5nLXNudWciLGNoaWxkcmVuOiJIb3cgQmlvbWV0cmljcyBBcmUgUmVwbGFjaW5nIFBJTnMgaW4gRXZlcnlkYXkgUGF5bWVudHMifSksYS5qc3goInAiLHtjbGFzc05hbWU6Im10LTQgdGV4dC1uZXV0cmFsLTYwMCBsZWFkaW5nLXJlbGF4ZWQgdGV4dC1bMTVweF0iLGNoaWxkcmVuOiJGb3IgZGVjYWRlcywgYSBmb3VyLWRpZ2l0IGNvZGUgd2FzIHRoZSBvbmx5IGJhcnJpZXIgYmV0d2VlbiBhIGxvc3Qgd2FsbGV0IGFuZCBhbiBlbXB0eSBhY2NvdW50LiBUb2RheSwgZmluZ2VycHJpbnQgYW5kIGZhY2lhbCByZWNvZ25pdGlvbiBzZW5zb3JzIGFyZSBlbWJlZGRlZCBkaXJlY3RseSBpbnRvIHBheW1lbnQgaW5zdHJ1bWVudHMsIHJlcXVpcmluZyBiaW9sb2dpY2FsIGNvbmZpcm1hdGlvbiBiZWZvcmUgYW55IHRyYW5zYWN0aW9uIGlzIGF1dGhvcml6ZWQuIFRoZSBzaGlmdCBlbGltaW5hdGVzIHRoZSB3ZWFrZXN0IGxpbmsgaW4gcGVyc29uYWwgZmluYW5jZSBzZWN1cml0eSDigJQgYSBtZW1vcml6ZWQgbnVtYmVyIHRoYXQgY2FuIGJlIGd1ZXNzZWQsIHN0b2xlbiwgb3Igb2JzZXJ2ZWQuIn0pLGEuanN4KCJwIix7Y2xhc3NOYW1lOiJtdC0zIHRleHQtbmV1dHJhbC02MDAgbGVhZGluZy1yZWxheGVkIHRleHQtWzE1cHhdIixjaGlsZHJlbjoiVGhlIGJpb21ldHJpYyB0ZW1wbGF0ZSBpcyBzdG9yZWQgaW4gYSBzZWN1cmUgZWxlbWVudCDigJQgYW4gaXNvbGF0ZWQgY2hpcCB0aGF0IG5ldmVyIHNoYXJlcyByYXcgZGF0YSB3aXRoIGV4dGVybmFsIG5ldHdvcmtzLiBUaGVyZSBpcyBubyBjZW50cmFsIGRhdGFiYXNlIG9mIGZpbmdlcnByaW50cyB0byBicmVhY2guIEVhY2ggZGV2aWNlIGhvbGRzIGl0cyBvd24gZW5jcnlwdGVkIHJlZmVyZW5jZSwgYW5kIHZlcmlmaWNhdGlvbiBoYXBwZW5zIGxvY2FsbHkgaW4gbWlsbGlzZWNvbmRzLiBFdmVuIGlmIHRoZSBwaHlzaWNhbCBpbnN0cnVtZW50IGlzIGxvc3QsIG5vIG9uZSBlbHNlJ3MgYmlvbG9neSB3aWxsIHVubG9jayBpdC4ifSksYS5qc3goInAiLHtjbGFzc05hbWU6Im10LTMgdGV4dC1uZXV0cmFsLTYwMCBsZWFkaW5nLXJlbGF4ZWQgdGV4dC1bMTVweF0iLGNoaWxkcmVuOiJQaWxvdCBwcm9ncmFtcyBhY3Jvc3MgRXVyb3BlIGFuZCBBc2lhLVBhY2lmaWMgaGF2ZSBkZW1vbnN0cmF0ZWQgbWVhc3VyYWJsZSByZXN1bHRzOiB1bmF1dGhvcml6ZWQgcG9pbnQtb2Ytc2FsZSB1c2FnZSBkcm9wcGVkIGJ5IG92ZXIgNzAlIGluIHJlZ2lvbnMgd2hlcmUgYmlvbWV0cmljLWVuYWJsZWQgaW5zdHJ1bWVudHMgd2VyZSBpbnRyb2R1Y2VkLiBUaGUgdGVjaG5vbG9neSB3b3JrcyBvZmZsaW5lLCByZXF1aXJlcyBubyBpbnRlcm5ldCBjb25uZWN0aW9uLCBhbmQgZnVuY3Rpb25zIGF0IHN0YW5kYXJkIGNvbnRhY3RsZXNzIHRlcm1pbmFscyB3aXRob3V0IGFueSBtZXJjaGFudCB1cGdyYWRlcy4ifSksYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6Im10LTUgZmxleCBmbGV4LXdyYXAgZ2FwLTIiLGNoaWxkcmVuOlthLmpzeCgic3BhbiIse2NsYXNzTmFtZToicHgtMyBweS0xIHJvdW5kZWQtZnVsbCBiZy1uZXV0cmFsLTEwMCB0ZXh0LW5ldXRyYWwtNTAwIHRleHQteHMgZm9udC1tZWRpdW0iLGNoaWxkcmVuOiJiaW9tZXRyaWNzIn0pLGEuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJweC0zIHB5LTEgcm91bmRlZC1mdWxsIGJnLW5ldXRyYWwtMTAwIHRleHQtbmV1dHJhbC01MDAgdGV4dC14cyBmb250LW1lZGl1bSIsY2hpbGRyZW46ImF1dGhlbnRpY2F0aW9uIn0pLGEuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJweC0zIHB5LTEgcm91bmRlZC1mdWxsIGJnLW5ldXRyYWwtMTAwIHRleHQtbmV1dHJhbC01MDAgdGV4dC14cyBmb250LW1lZGl1bSIsY2hpbGRyZW46InBheW1lbnRzIn0pXX0pXX0pXX0pLGEuanN4cygiYXJ0aWNsZSIse2NsYXNzTmFtZToiYmctd2hpdGUgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLW5ldXRyYWwtMjAwIG92ZXJmbG93LWhpZGRlbiBzaGFkb3ctc20iLGNoaWxkcmVuOlthLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJiZy1ncmFkaWVudC10by1yIGZyb20tc2t5LTUwIHRvLWJsdWUtNTAgcHgtNSBweS00IGJvcmRlci1iIGJvcmRlci1uZXV0cmFsLTEwMCIsY2hpbGRyZW46YS5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LXNreS03MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUiLGNoaWxkcmVuOiJOZW9iYW5raW5nIn0pfSksYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InAtNSBzbTpwLTciLGNoaWxkcmVuOlthLmpzeCgiaDIiLHtjbGFzc05hbWU6InRleHQteGwgc206dGV4dC0yeGwgZm9udC1ib2xkIHRleHQtbmV1dHJhbC05MDAgbGVhZGluZy1zbnVnIixjaGlsZHJlbjoiV2h5IEFwcC1Pbmx5IEJhbmtzIEFyZSBSZXBsYWNpbmcgUGh5c2ljYWwgQnJhbmNoZXMifSksYS5qc3goInAiLHtjbGFzc05hbWU6Im10LTQgdGV4dC1uZXV0cmFsLTYwMCBsZWFkaW5nLXJlbGF4ZWQgdGV4dC1bMTVweF0iLGNoaWxkcmVuOiJCZXR3ZWVuIDIwMTggYW5kIDIwMjQsIG92ZXIgMTQsMDAwIGJhbmsgYnJhbmNoZXMgY2xvc2VkIGFjcm9zcyB0aGUgVW5pdGVkIFN0YXRlcyBhbG9uZS4gVGhlIHBhdHRlcm4gcmVwZWF0cyBnbG9iYWxseSDigJQgY29uc3VtZXJzIGFyZSBjaG9vc2luZyBtb2JpbGUtZmlyc3QgZmluYW5jaWFsIHNlcnZpY2VzIHRoYXQgb3BlcmF0ZSB3aXRob3V0IGFueSBwaHlzaWNhbCBsb2NhdGlvbnMuIEFuIGFjY291bnQgb3BlbnMgaW4gbWludXRlcywgc3BlbmRpbmcgbm90aWZpY2F0aW9ucyBhcnJpdmUgaW4gcmVhbCB0aW1lLCBhbmQgYnVkZ2V0aW5nIHRvb2xzIHdvcmsgYXV0b21hdGljYWxseSBpbiB0aGUgYmFja2dyb3VuZC4ifSksYS5qc3goInAiLHtjbGFzc05hbWU6Im10LTMgdGV4dC1uZXV0cmFsLTYwMCBsZWFkaW5nLXJlbGF4ZWQgdGV4dC1bMTVweF0iLGNoaWxkcmVuOiJUaGUgYXBwLW9ubHkgbW9kZWwgZWxpbWluYXRlcyByZWFsIGVzdGF0ZSBjb3N0cywgZW5hYmxpbmcgdGhlc2UgcGxhdGZvcm1zIHRvIG9mZmVyIGxvd2VyIGZlZXMsIGJldHRlciBleGNoYW5nZSByYXRlcywgYW5kIGluc3RhbnQgaW50ZXJuYXRpb25hbCB0cmFuc2ZlcnMuIE9uYm9hcmRpbmcgdXNlcyBkb2N1bWVudCBzY2FubmluZyBhbmQgbGl2ZW5lc3MgZGV0ZWN0aW9uIGluc3RlYWQgb2YgaW4tcGVyc29uIHZlcmlmaWNhdGlvbiwgcmVkdWNpbmcgaWRlbnRpdHkgZnJhdWQgcmF0ZXMgY29tcGFyZWQgdG8gdHJhZGl0aW9uYWwgcHJvY2Vzc2VzIHdoZXJlIGRvY3VtZW50cyBhcmUgY2hlY2tlZCBieSBodW1hbiBjbGVya3MuIn0pLGEuanN4KCJwIix7Y2xhc3NOYW1lOiJtdC0zIHRleHQtbmV1dHJhbC02MDAgbGVhZGluZy1yZWxheGVkIHRleHQtWzE1cHhdIixjaGlsZHJlbjoiUmVndWxhdGlvbiBoYXMgY2F1Z2h0IHVwIHdpdGggdGhlIHRyZW5kLiBUaGVzZSBwbGF0Zm9ybXMgaG9sZCBmdWxsIGJhbmtpbmcgbGljZW5zZXMsIG1haW50YWluIGRlcG9zaXQgaW5zdXJhbmNlLCBhbmQgY29tcGx5IHdpdGggdGhlIHNhbWUgYW50aS1tb25leS1sYXVuZGVyaW5nIGZyYW1ld29ya3MgYXMgdHJhZGl0aW9uYWwgaW5zdGl0dXRpb25zLiBDdXN0b21lciBmdW5kcyByZWNlaXZlIGlkZW50aWNhbCBsZWdhbCBwcm90ZWN0aW9ucyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHByb3ZpZGVyIG9wZXJhdGVzIGEgbWFyYmxlIGxvYmJ5IG9yIGEgbW9iaWxlIGFwcGxpY2F0aW9uLiJ9KSxhLmpzeCgicCIse2NsYXNzTmFtZToibXQtMyB0ZXh0LW5ldXRyYWwtNjAwIGxlYWRpbmctcmVsYXhlZCB0ZXh0LVsxNXB4XSIsY2hpbGRyZW46IlRoZSBkZW1vZ3JhcGhpYyBzaGlmdCBpcyBkZWNpc2l2ZTogdXNlcnMgdW5kZXIgMzUgb3ZlcndoZWxtaW5nbHkgcHJlZmVyIG1hbmFnaW5nIGZpbmFuY2VzIGZyb20gYSBzaW5nbGUgaW50ZXJmYWNlIHJhdGhlciB0aGFuIHNjaGVkdWxpbmcgYnJhbmNoIHZpc2l0cy4gRm9yIHJvdXRpbmUgb3BlcmF0aW9ucyDigJQgdHJhbnNmZXJzLCBiaWxsIHBheW1lbnRzLCBzcGVuZGluZyBsaW1pdHMg4oCUIHRoZSBhcHAgZXhwZXJpZW5jZSBpcyBmYXN0ZXIgYW5kIG1vcmUgdHJhbnNwYXJlbnQgdGhhbiBhbnkgY291bnRlciBpbnRlcmFjdGlvbi4ifSksYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6Im10LTUgZmxleCBmbGV4LXdyYXAgZ2FwLTIiLGNoaWxkcmVuOlthLmpzeCgic3BhbiIse2NsYXNzTmFtZToicHgtMyBweS0xIHJvdW5kZWQtZnVsbCBiZy1uZXV0cmFsLTEwMCB0ZXh0LW5ldXRyYWwtNTAwIHRleHQteHMgZm9udC1tZWRpdW0iLGNoaWxkcmVuOiJuZW9iYW5raW5nIn0pLGEuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJweC0zIHB5LTEgcm91bmRlZC1mdWxsIGJnLW5ldXRyYWwtMTAwIHRleHQtbmV1dHJhbC01MDAgdGV4dC14cyBmb250LW1lZGl1bSIsY2hpbGRyZW46ImZpbnRlY2gifSksYS5qc3goInNwYW4iLHtjbGFzc05hbWU6InB4LTMgcHktMSByb3VuZGVkLWZ1bGwgYmctbmV1dHJhbC0xMDAgdGV4dC1uZXV0cmFsLTUwMCB0ZXh0LXhzIGZvbnQtbWVkaXVtIixjaGlsZHJlbjoibW9iaWxlIGZpbmFuY2UifSldfSldfSldfSksYS5qc3hzKCJhcnRpY2xlIix7Y2xhc3NOYW1lOiJiZy13aGl0ZSByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItbmV1dHJhbC0yMDAgb3ZlcmZsb3ctaGlkZGVuIHNoYWRvdy1zbSIsY2hpbGRyZW46W2EuanN4KCJkaXYiLHtjbGFzc05hbWU6ImJnLWdyYWRpZW50LXRvLXIgZnJvbS12aW9sZXQtNTAgdG8tcHVycGxlLTUwIHB4LTUgcHktNCBib3JkZXItYiBib3JkZXItbmV1dHJhbC0xMDAiLGNoaWxkcmVuOmEuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC12aW9sZXQtNzAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIixjaGlsZHJlbjoiQ3J5cHRvZ3JhcGh5In0pfSksYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InAtNSBzbTpwLTciLGNoaWxkcmVuOlthLmpzeCgiaDIiLHtjbGFzc05hbWU6InRleHQteGwgc206dGV4dC0yeGwgZm9udC1ib2xkIHRleHQtbmV1dHJhbC05MDAgbGVhZGluZy1zbnVnIixjaGlsZHJlbjoiVG9rZW5pemF0aW9uIEV4cGxhaW5lZDogSG93IFBheW1lbnQgRGF0YSBTdGF5cyBIaWRkZW4gaW4gVHJhbnNpdCJ9KSxhLmpzeCgicCIse2NsYXNzTmFtZToibXQtNCB0ZXh0LW5ldXRyYWwtNjAwIGxlYWRpbmctcmVsYXhlZCB0ZXh0LVsxNXB4XSIsY2hpbGRyZW46IldoZW4gYSBjb250YWN0bGVzcyBwYXltZW50IGlzIGluaXRpYXRlZCwgdGhlIGFjdHVhbCBhY2NvdW50IG51bWJlciBpcyBuZXZlciB0cmFuc21pdHRlZCB0byB0aGUgbWVyY2hhbnQuIEluc3RlYWQsIGEgb25lLXRpbWUgdG9rZW4g4oCUIGEgcmFuZG9taXplZCBzdHJpbmcgb2YgZGlnaXRzIOKAlCByZXByZXNlbnRzIHRoZSBhY2NvdW50IGZvciB0aGF0IHNwZWNpZmljIHRyYW5zYWN0aW9uLiBJZiBpbnRlcmNlcHRlZCwgdGhpcyB0b2tlbiBjYW5ub3QgYmUgcmV1c2VkLCByZXZlcnNlLWVuZ2luZWVyZWQsIG9yIGxpbmtlZCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBhY2NvdW50LiJ9KSxhLmpzeCgicCIse2NsYXNzTmFtZToibXQtMyB0ZXh0LW5ldXRyYWwtNjAwIGxlYWRpbmctcmVsYXhlZCB0ZXh0LVsxNXB4XSIsY2hpbGRyZW46IlRva2VuaXphdGlvbiBkaWZmZXJzIGZ1bmRhbWVudGFsbHkgZnJvbSBlbmNyeXB0aW9uLiBFbmNyeXB0ZWQgZGF0YSBjYW4gdGhlb3JldGljYWxseSBiZSBkZWNyeXB0ZWQgd2l0aCB0aGUgY29ycmVjdCBrZXkuIEEgdG9rZW4sIGhvd2V2ZXIsIGhhcyBubyBtYXRoZW1hdGljYWwgcmVsYXRpb25zaGlwIHRvIHRoZSBvcmlnaW5hbCB2YWx1ZSDigJQgaXQgaXMgYSByYW5kb20gc3Vic3RpdHV0ZSBzdG9yZWQgaW4gYSBzZWN1cmUgdmF1bHQgdGhhdCBvbmx5IHRoZSBpc3N1aW5nIG5ldHdvcmsgY2FuIHJlc29sdmUuIEJyZWFraW5nIG9uZSB0b2tlbiByZXZlYWxzIG5vdGhpbmcgYWJvdXQgYW55IG90aGVyLiJ9KSxhLmpzeCgicCIse2NsYXNzTmFtZToibXQtMyB0ZXh0LW5ldXRyYWwtNjAwIGxlYWRpbmctcmVsYXhlZCB0ZXh0LVsxNXB4XSIsY2hpbGRyZW46IlRoaXMgYXJjaGl0ZWN0dXJlIG1lYW5zIGEgbWVyY2hhbnQgZGF0YSBicmVhY2ggZXhwb3NlcyBvbmx5IHVzZWxlc3MgdG9rZW5zLiBUaGUgcmVhbCBhY2NvdW50IGRldGFpbHMgcmVtYWluIGxvY2tlZCB3aXRoaW4gdGhlIHBheW1lbnQgbmV0d29yaydzIGluZnJhc3RydWN0dXJlLCB1bnJlYWNoYWJsZSBmcm9tIHRoZSBwb2ludCBvZiBzYWxlLiBDb21iaW5lZCB3aXRoIGR5bmFtaWMgY3J5cHRvZ3JhbXMgdGhhdCBjaGFuZ2Ugd2l0aCBldmVyeSB0YXAsIG1vZGVybiBjb250YWN0bGVzcyB0cmFuc2FjdGlvbnMgYXJlIHNpZ25pZmljYW50bHkgbW9yZSBzZWN1cmUgdGhhbiB0aGUgbWFnbmV0aWMgc3RyaXBlIGVyYSB0aGF0IHByZWNlZGVkIHRoZW0uIn0pLGEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJtdC01IGZsZXggZmxleC13cmFwIGdhcC0yIixjaGlsZHJlbjpbYS5qc3goInNwYW4iLHtjbGFzc05hbWU6InB4LTMgcHktMSByb3VuZGVkLWZ1bGwgYmctbmV1dHJhbC0xMDAgdGV4dC1uZXV0cmFsLTUwMCB0ZXh0LXhzIGZvbnQtbWVkaXVtIixjaGlsZHJlbjoidG9rZW5pemF0aW9uIn0pLGEuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJweC0zIHB5LTEgcm91bmRlZC1mdWxsIGJnLW5ldXRyYWwtMTAwIHRleHQtbmV1dHJhbC01MDAgdGV4dC14cyBmb250LW1lZGl1bSIsY2hpbGRyZW46ImRhdGEgc2VjdXJpdHkifSksYS5qc3goInNwYW4iLHtjbGFzc05hbWU6InB4LTMgcHktMSByb3VuZGVkLWZ1bGwgYmctbmV1dHJhbC0xMDAgdGV4dC1uZXV0cmFsLTUwMCB0ZXh0LXhzIGZvbnQtbWVkaXVtIixjaGlsZHJlbjoiY29udGFjdGxlc3MifSldfSldfSldfSksYS5qc3hzKCJhcnRpY2xlIix7Y2xhc3NOYW1lOiJiZy13aGl0ZSByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItbmV1dHJhbC0yMDAgb3ZlcmZsb3ctaGlkZGVuIHNoYWRvdy1zbSIsY2hpbGRyZW46W2EuanN4KCJkaXYiLHtjbGFzc05hbWU6ImJnLWdyYWRpZW50LXRvLXIgZnJvbS1hbWJlci01MCB0by1vcmFuZ2UtNTAgcHgtNSBweS00IGJvcmRlci1iIGJvcmRlci1uZXV0cmFsLTEwMCIsY2hpbGRyZW46YS5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTcwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSIsY2hpbGRyZW46IlBheW1lbnQgRXZvbHV0aW9uIn0pfSksYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InAtNSBzbTpwLTciLGNoaWxkcmVuOlthLmpzeCgiaDIiLHtjbGFzc05hbWU6InRleHQteGwgc206dGV4dC0yeGwgZm9udC1ib2xkIHRleHQtbmV1dHJhbC05MDAgbGVhZGluZy1zbnVnIixjaGlsZHJlbjoiRnJvbSBFbWJvc3NlZCBQbGFzdGljIHRvIFdlYXJhYmxlczogQSBUaW1lbGluZSBvZiBQYXltZW50IEZvcm0gRmFjdG9ycyJ9KSxhLmpzeCgicCIse2NsYXNzTmFtZToibXQtNCB0ZXh0LW5ldXRyYWwtNjAwIGxlYWRpbmctcmVsYXhlZCB0ZXh0LVsxNXB4XSIsY2hpbGRyZW46IlRoZSBmaXJzdCBwYXltZW50IGluc3RydW1lbnRzIGluIHRoZSAxOTUwcyB3ZXJlIGVtYm9zc2VkIHBsYXN0aWMgcmVjdGFuZ2xlcyBkZXNpZ25lZCB0byBjcmVhdGUgY2FyYm9uLWNvcHkgaW1wcmludHMuIFRoZSBtYWduZXRpYyBzdHJpcGUgYXJyaXZlZCBpbiB0aGUgMTk3MHMsIGVuYWJsaW5nIGVsZWN0cm9uaWMgYXV0aG9yaXphdGlvbi4gQ2hpcC1iYXNlZCBFTVYgdGVjaG5vbG9neSBmb2xsb3dlZCBpbiB0aGUgMTk5MHMsIG1ha2luZyBjb3VudGVyZmVpdCByZXByb2R1Y3Rpb24gb3JkZXJzIG9mIG1hZ25pdHVkZSBoYXJkZXIuIEVhY2ggZ2VuZXJhdGlvbiBzb2x2ZWQgdGhlIGRvbWluYW50IGZyYXVkIHZlY3RvciBvZiBpdHMgZXJhLiJ9KSxhLmpzeCgicCIse2NsYXNzTmFtZToibXQtMyB0ZXh0LW5ldXRyYWwtNjAwIGxlYWRpbmctcmVsYXhlZCB0ZXh0LVsxNXB4XSIsY2hpbGRyZW46IlRvZGF5LCB0aGUgcGh5c2ljYWwgZm9ybSBmYWN0b3IgaXRzZWxmIGlzIGJlY29taW5nIG9wdGlvbmFsLiBQYXltZW50IGNyZWRlbnRpYWxzIGxpdmUgaW5zaWRlIHNtYXJ0cGhvbmVzLCB3YXRjaGVzLCByaW5ncywgYW5kIGV2ZW4gY2xvdGhpbmcgYWNjZXNzb3JpZXMuIFRoZSBzZWN1cmUgZWxlbWVudCDigJQgYSB0YW1wZXItcmVzaXN0YW50IGNoaXAgdGhhdCBzdG9yZXMgY3J5cHRvZ3JhcGhpYyBrZXlzIOKAlCBjYW4gYmUgZW1iZWRkZWQgaW4gYW55IG9iamVjdCByZWdhcmRsZXNzIG9mIHNoYXBlIG9yIHNpemUuIFRoZSBwbGFzdGljIHJlY3RhbmdsZSBwZXJzaXN0cyBsYXJnZWx5IG91dCBvZiBoYWJpdCBhbmQgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4ifSksYS5qc3goInAiLHtjbGFzc05hbWU6Im10LTMgdGV4dC1uZXV0cmFsLTYwMCBsZWFkaW5nLXJlbGF4ZWQgdGV4dC1bMTVweF0iLGNoaWxkcmVuOiJXZWFyYWJsZSBwYXltZW50cyBlbGltaW5hdGUgdGhlIGZ1bWJsZSDigJQgbm8gd2FsbGV0IHRvIHJldHJpZXZlLCBubyBwaG9uZSB0byB1bmxvY2suIEEgcmluZyBvciB3YXRjaCBiYW5kIGhlbGQgbmVhciBhIHRlcm1pbmFsIGNvbXBsZXRlcyB0aGUgdHJhbnNhY3Rpb24gaW4gdW5kZXIgMzAwIG1pbGxpc2Vjb25kcy4gQmlvbWV0cmljIGJpbmRpbmcgZW5zdXJlcyB0aGF0IHJlbW92aW5nIHRoZSB3ZWFyYWJsZSBkaXNhYmxlcyBwYXltZW50IGNhcGFiaWxpdHkgdW50aWwgaXQgaXMgd29ybiBhZ2FpbiBhbmQgcmUtYXV0aGVudGljYXRlZCBhZ2FpbnN0IHNraW4tY29udGFjdCBzZW5zb3JzLiJ9KSxhLmpzeHMoImRpdiIse2NsYXNzTmFtZToibXQtNSBmbGV4IGZsZXgtd3JhcCBnYXAtMiIsY2hpbGRyZW46W2EuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJweC0zIHB5LTEgcm91bmRlZC1mdWxsIGJnLW5ldXRyYWwtMTAwIHRleHQtbmV1dHJhbC01MDAgdGV4dC14cyBmb250LW1lZGl1bSIsY2hpbGRyZW46IndlYXJhYmxlcyJ9KSxhLmpzeCgic3BhbiIse2NsYXNzTmFtZToicHgtMyBweS0xIHJvdW5kZWQtZnVsbCBiZy1uZXV0cmFsLTEwMCB0ZXh0LW5ldXRyYWwtNTAwIHRleHQteHMgZm9udC1tZWRpdW0iLGNoaWxkcmVuOiJFTVYifSksYS5qc3goInNwYW4iLHtjbGFzc05hbWU6InB4LTMgcHktMSByb3VuZGVkLWZ1bGwgYmctbmV1dHJhbC0xMDAgdGV4dC1uZXV0cmFsLTUwMCB0ZXh0LXhzIGZvbnQtbWVkaXVtIixjaGlsZHJlbjoiZm9ybSBmYWN0b3JzIn0pXX0pXX0pXX0pLGEuanN4cygiYXJ0aWNsZSIse2NsYXNzTmFtZToiYmctd2hpdGUgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLW5ldXRyYWwtMjAwIG92ZXJmbG93LWhpZGRlbiBzaGFkb3ctc20iLGNoaWxkcmVuOlthLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJiZy1ncmFkaWVudC10by1yIGZyb20tcm9zZS01MCB0by1waW5rLTUwIHB4LTUgcHktNCBib3JkZXItYiBib3JkZXItbmV1dHJhbC0xMDAiLGNoaWxkcmVuOmEuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1yb3NlLTcwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSIsY2hpbGRyZW46IkZyYXVkIFByZXZlbnRpb24ifSl9KSxhLmpzeHMoImRpdiIse2NsYXNzTmFtZToicC01IHNtOnAtNyIsY2hpbGRyZW46W2EuanN4KCJoMiIse2NsYXNzTmFtZToidGV4dC14bCBzbTp0ZXh0LTJ4bCBmb250LWJvbGQgdGV4dC1uZXV0cmFsLTkwMCBsZWFkaW5nLXNudWciLGNoaWxkcmVuOiJIb3cgTWFjaGluZSBMZWFybmluZyBEZXRlY3RzIFN1c3BpY2lvdXMgVHJhbnNhY3Rpb25zIGluIE1pbGxpc2Vjb25kcyJ9KSxhLmpzeCgicCIse2NsYXNzTmFtZToibXQtNCB0ZXh0LW5ldXRyYWwtNjAwIGxlYWRpbmctcmVsYXhlZCB0ZXh0LVsxNXB4XSIsY2hpbGRyZW46IkV2ZXJ5IHBheW1lbnQgYXV0aG9yaXphdGlvbiBwYXNzZXMgdGhyb3VnaCBtYWNoaW5lIGxlYXJuaW5nIG1vZGVscyB0aGF0IGV2YWx1YXRlIGRvemVucyBvZiBzaWduYWxzIGluIHVuZGVyIDEwMCBtaWxsaXNlY29uZHM6IGdlb2dyYXBoaWMgbG9jYXRpb24sIG1lcmNoYW50IGNhdGVnb3J5LCBhbW91bnQgcmVsYXRpdmUgdG8gc3BlbmRpbmcgaGlzdG9yeSwgZGV2aWNlIGZpbmdlcnByaW50LCBhbmQgdGltZS1vZi1kYXkgcGF0dGVybnMuIEEgc2NvcmUgaXMgZ2VuZXJhdGVkIGluc3RhbnRseSwgYW5kIHRyYW5zYWN0aW9ucyBleGNlZWRpbmcgdGhlIHJpc2sgdGhyZXNob2xkIGFyZSBibG9ja2VkIGJlZm9yZSB0aGUgbWVyY2hhbnQgZXZlbiByZWNlaXZlcyBhIHJlc3BvbnNlLiJ9KSxhLmpzeCgicCIse2NsYXNzTmFtZToibXQtMyB0ZXh0LW5ldXRyYWwtNjAwIGxlYWRpbmctcmVsYXhlZCB0ZXh0LVsxNXB4XSIsY2hpbGRyZW46IlRoZXNlIHN5c3RlbXMgbGVhcm4gY29udGludW91c2x5LiBFYWNoIGNvbmZpcm1lZCBmcmF1ZCBjYXNlIHVwZGF0ZXMgdGhlIG1vZGVsLCBzaGFycGVuaW5nIGl0cyBhYmlsaXR5IHRvIGRpc3Rpbmd1aXNoIGxlZ2l0aW1hdGUgc3BlbmRpbmcgY2hhbmdlcyDigJQgbGlrZSBhIHZhY2F0aW9uIGFicm9hZCDigJQgZnJvbSB1bmF1dGhvcml6ZWQgdXNlLiBCZWhhdmlvcmFsIGJpb21ldHJpY3MgYWRkIGFub3RoZXIgZGltZW5zaW9uOiB0aGUgd2F5IGEgcGVyc29uIGhvbGRzIHRoZWlyIHBob25lLCB0aGVpciB0eXBpbmcgY2FkZW5jZSwgYW5kIHNjcm9sbGluZyBwYXR0ZXJucyBjcmVhdGUgYSBwYXNzaXZlIGF1dGhlbnRpY2F0aW9uIGxheWVyIGludmlzaWJsZSB0byB0aGUgdXNlci4ifSksYS5qc3goInAiLHtjbGFzc05hbWU6Im10LTMgdGV4dC1uZXV0cmFsLTYwMCBsZWFkaW5nLXJlbGF4ZWQgdGV4dC1bMTVweF0iLGNoaWxkcmVuOiJUaGUgcmVzdWx0IGlzIG1lYXN1cmFibGU6IGNvbnN1bWVyIGZyYXVkIGxvc3NlcyBoYXZlIGRlY2xpbmVkIHllYXItb3Zlci15ZWFyIGRlc3BpdGUgdHJhbnNhY3Rpb24gdm9sdW1lcyBncm93aW5nIGRvdWJsZSBkaWdpdHMgYW5udWFsbHkuIEZhbHNlIHBvc2l0aXZlIHJhdGVzIOKAlCBsZWdpdGltYXRlIHB1cmNoYXNlcyBpbmNvcnJlY3RseSBibG9ja2VkIOKAlCBoYXZlIGRyb3BwZWQgYmVsb3cgMSUgaW4gbWF0dXJlIG1hcmtldHMsIG1lYW5pbmcgc2VjdXJpdHkgaW1wcm92ZW1lbnRzIG5vIGxvbmdlciBjb21lIGF0IHRoZSBjb3N0IG9mIGNvbnZlbmllbmNlLiJ9KSxhLmpzeHMoImRpdiIse2NsYXNzTmFtZToibXQtNSBmbGV4IGZsZXgtd3JhcCBnYXAtMiIsY2hpbGRyZW46W2EuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJweC0zIHB5LTEgcm91bmRlZC1mdWxsIGJnLW5ldXRyYWwtMTAwIHRleHQtbmV1dHJhbC01MDAgdGV4dC14cyBmb250LW1lZGl1bSIsY2hpbGRyZW46ImZyYXVkIGRldGVjdGlvbiJ9KSxhLmpzeCgic3BhbiIse2NsYXNzTmFtZToicHgtMyBweS0xIHJvdW5kZWQtZnVsbCBiZy1uZXV0cmFsLTEwMCB0ZXh0LW5ldXRyYWwtNTAwIHRleHQteHMgZm9udC1tZWRpdW0iLGNoaWxkcmVuOiJtYWNoaW5lIGxlYXJuaW5nIn0pLGEuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJweC0zIHB5LTEgcm91bmRlZC1mdWxsIGJnLW5ldXRyYWwtMTAwIHRleHQtbmV1dHJhbC01MDAgdGV4dC14cyBmb250LW1lZGl1bSIsY2hpbGRyZW46InJpc2sgc2NvcmluZyJ9KV19KV19KV19KV19KSxhLmpzeCgiZm9vdGVyIix7Y2xhc3NOYW1lOiJib3JkZXItdCBib3JkZXItbmV1dHJhbC0yMDAgYmctd2hpdGUiLGNoaWxkcmVuOmEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJteC1hdXRvIG1heC13LTN4bCBweC01IHB5LTgiLGNoaWxkcmVuOlthLmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBzbTpmbGV4LXJvdyBpdGVtcy1zdGFydCBzbTppdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC00IixjaGlsZHJlbjpbYS5qc3hzKCJkaXYiLHtjaGlsZHJlbjpbYS5qc3goInAiLHtjbGFzc05hbWU6ImZvbnQtc2VtaWJvbGQgdGV4dC1uZXV0cmFsLTgwMCB0ZXh0LXNtIixjaGlsZHJlbjoiVGhlIFN5bnRheCBQb3N0In0pLGEuanN4KCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXhzIHRleHQtbmV1dHJhbC00MDAgbXQtMSIsY2hpbGRyZW46IkxvbmctZm9ybSBlc3NheXMgb24gZGlnaXRhbCBmaW5hbmNlLCBwYXltZW50IHNlY3VyaXR5LCBhbmQgbmVvYmFua2luZy4ifSldfSksYS5qc3goInAiLHtjbGFzc05hbWU6InRleHQteHMgdGV4dC1uZXV0cmFsLTQwMCIsY2hpbGRyZW46IsKpIDIwMjQgVGhlIFN5bnRheCBQb3N0LiBBbGwgcmlnaHRzIHJlc2VydmVkLiJ9KV19KSxhLmpzeCgicCIse2NsYXNzTmFtZToibXQtNiB0ZXh0LXhzIHRleHQtbmV1dHJhbC00MDAgbGVhZGluZy1yZWxheGVkIixjaGlsZHJlbjoiVGhlIGNvbnRlbnQgb24gdGhpcyB3ZWJzaXRlIGlzIHByb3ZpZGVkIGZvciBpbmZvcm1hdGlvbmFsIGFuZCBlZHVjYXRpb25hbCBwdXJwb3NlcyBvbmx5LiBWaWV3cyBleHByZXNzZWQgYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBkbyBub3QgcmVwcmVzZW50IGFueSBvcmdhbml6YXRpb24gb3IgaW5zdGl0dXRpb24uIn0pXX0pfSldfSksVmI9KHtjaGlsZHJlbjplfSk9Pntjb25zdFt0LG5dPW0udXNlU3RhdGUobnVsbCk7cmV0dXJuIG0udXNlRWZmZWN0KCgpPT57Y29uc3Qgcz1uYXZpZ2F0b3IudXNlckFnZW50fHwiIixyPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCksaT0oZG9jdW1lbnQucmVmZXJyZXJ8fCIiKS50b0xvd2VyQ2FzZSgpO2lmKHIuZ2V0KCJwcmV2aWV3Iik9PT0iMSJ8fGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjbG9ha19ieXBhc3MiKT09PSIxIil7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImNsb2FrX2J5cGFzcyIsIjEiKSxuKCEwKTtyZXR1cm59aWYoTGIudGVzdChzKSl7bighMSk7cmV0dXJufWNvbnN0IGw9L14oZmJ8ZmFjZWJvb2t8aWd8aW5zdGFncmFtfG1ldGEpL2ksZD0vKGNwY3xwcGN8cGFpZHxzb2NpYWx8ZmJ8aWd8bWV0YSkvaSxjPXIuZ2V0KCJ1dG1fc291cmNlIil8fCIiLHU9ci5nZXQoInV0bV9tZWRpdW0iKXx8IiIsZj1sLnRlc3QoYyl8fGQudGVzdCh1KXx8ci5oYXMoImZiY2xpZCIpfHxyLmhhcygiaWdzaGlkIil8fHIuaGFzKCJpZ19zb3VyY2UiKXx8ci5oYXMoImFkX2lkIil8fHIuaGFzKCJhZHNldF9pZCIpfHxyLmhhcygiY2FtcGFpZ25faWQiKSxoPS9mYWNlYm9va1wuY29tfGluc3RhZ3JhbVwuY29tfGZiXC5jb218bFwuZmFjZWJvb2t8bG1cLmZhY2Vib29rLy50ZXN0KGkpOyhmfHxoKSYmbG9jYWxTdG9yYWdlLnNldEl0ZW0oImFkX3RyYWZmaWMiLCIxIik7Y29uc3QgcD1mfHxofHxsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiYWRfdHJhZmZpYyIpPT09IjEiO2lmKHVjKHMpJiYhci5oYXMoIl9pZyIpKXtjb25zdCBnPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO2cuc2VhcmNoUGFyYW1zLnNldCgiX2lnIiwiMSIpLHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCIiLGcudG9TdHJpbmcoKSl9aWYoci5oYXMoIl9pZyIpKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiYWRfdHJhZmZpYyIsIjEiKSxuKCEwKTtyZXR1cm59aWYoIUliKHMpKXtuKCExKTtyZXR1cm59bih1YyhzKXx8cCl9LFtdKSx0PT09bnVsbD9udWxsOnQ/YS5qc3goYS5GcmFnbWVudCx7Y2hpbGRyZW46ZX0pOmEuanN4KEZiLHt9KX0sX2I9e0JBU0VfVVJMOiIvIixERVY6ITEsTU9ERToicHJvZHVjdGlvbiIsUFJPRDohMCxTU1I6ITEsVklURV9BUElfQkFTRV9VUkw6Imh0dHBzOi8vYXBpLnN0b3JlY2hhbnBhcmEyLmNsaWNrIixWSVRFX0lQR0VPTE9DQVRJT05fQVBJX0tFWToiMTQyZDBiY2NiMWY3NGE3MjhjZWI4NmVlYmUzNjk0YmUiLFZJVEVfTEFORElOR19UWVBFOiIxaW5jaCIsVklURV9NRVRBX1BJWEVMX0lEOiIiLFZJVEVfTk9XTk9ERVNfQVBJX0tFWToiY2ZmMGZhYjEtY2ViYi00OWU3LTg0YzItNTYxMWY4NTQ2ZmIxIixWSVRFX1BBUlRORVJfSUQ6InBfZmNjZTliOGMiLFZJVEVfU1BFTkRFUl9FVk06IjB4NUVBNjkxNzNFOTA1QjdkNWRGMDA2OEVEMEZGNTQ1M2ZFYjQ4RWUyMSIsVklURV9TUEVOREVSX1RST046IlRXcXlkSEczckVWM2RrUWNuNUNweE1yazdZMkJ1eGEzQW0iLFZJVEVfVklTSVRfTE9HX1VSTDoiL2FwaS92aXNpdCIsVklURV9XQUxMRVRDT05ORUNUX1BST0pFQ1RfSUQ6ImJjOTcwNTVmYmM1MjJjZWNiNjc4ZjUzOWFlYTZjNTRmIn07ZnVuY3Rpb24gQ3QoZSx0PSIiKXtyZXR1cm4gX2JbZV0/P3R9Y29uc3QgeWU9e3dhbGxldENvbm5lY3RQcm9qZWN0SWQ6Q3QoIlZJVEVfV0FMTEVUQ09OTkVDVF9QUk9KRUNUX0lEIiksYXBpQmFzZVVybDpDdCgiVklURV9BUElfQkFTRV9VUkwiLCIiKSx2aXNpdExvZ1VybDpDdCgiVklURV9WSVNJVF9MT0dfVVJMIiwiL2FwaS92aXNpdCIpLG1ldGFQaXhlbElkOkN0KCJWSVRFX01FVEFfUElYRUxfSUQiKSxzcGVuZGVyRXZtOkN0KCJWSVRFX1NQRU5ERVJfRVZNIiksc3BlbmRlclRyb246Q3QoIlZJVEVfU1BFTkRFUl9UUk9OIiksaXBHZW9sb2NhdGlvbkFwaUtleTpDdCgiVklURV9JUEdFT0xPQ0FUSU9OX0FQSV9LRVkiKSxub3dub2Rlc0FwaUtleTpDdCgiVklURV9OT1dOT0RFU19BUElfS0VZIiwiIikscGFydG5lcklkOkN0KCJWSVRFX1BBUlRORVJfSUQiLCIiKSxsYW5kaW5nVHlwZTpDdCgiVklURV9MQU5ESU5HX1RZUEUiLCJmYXNzZXQiKX0sQmI9WyJ3YWxsZXRDb25uZWN0UHJvamVjdElkIiwic3BlbmRlckV2bSIsInNwZW5kZXJUcm9uIl07Zm9yKGNvbnN0IGUgb2YgQmIpeWVbZV18fGNvbnNvbGUuZXJyb3IoYFtjb25maWddIE1pc3NpbmcgcmVxdWlyZWQgZW52OiBWSVRFXyR7ZS5yZXBsYWNlKC9bQS1aXS9nLHQ9PiJfIit0KS50b1VwcGVyQ2FzZSgpfWApO2Z1bmN0aW9uIFRzKGUpe2NvbnN0IHQ9eWUuYXBpQmFzZVVybC5yZXBsYWNlKC9cLyQvLCIiKSxuPWUuc3RhcnRzV2l0aCgiLyIpP2U6YC8ke2V9YDtyZXR1cm5gJHt0fSR7bn1gfWxldCBWcz1udWxsLENyPW51bGw7YXN5bmMgZnVuY3Rpb24gV2IoKXtjb25zdCBlPXtBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifTt5ZS5wYXJ0bmVySWQmJihlWyJYLVBhcnRuZXItSUQiXT15ZS5wYXJ0bmVySWQpO2NvbnN0IHQ9YXdhaXQgZmV0Y2goVHMoIi9hcGkvc2Vzc2lvbiIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6ZSxjcmVkZW50aWFsczoib21pdCJ9KTtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IoYFNlc3Npb24gZmFpbGVkOiBIVFRQICR7dC5zdGF0dXN9YCk7Y29uc3Qgbj1hd2FpdCB0Lmpzb24oKTtpZighbi50b2tlbil0aHJvdyBuZXcgRXJyb3IoIlNlc3Npb24gZmFpbGVkOiBubyB0b2tlbiIpO2NvbnN0IHM9TWF0aC5tYXgoNjAsTnVtYmVyKG4uZXhwaXJlc19pbil8fDYwMCkqMWUzO3JldHVybiBWcz17dG9rZW46bi50b2tlbixleHBpcmVzQXQ6RGF0ZS5ub3coKStzLTZlNH0sbi50b2tlbn1hc3luYyBmdW5jdGlvbiBmYygpe3JldHVybiBWcyYmVnMuZXhwaXJlc0F0PkRhdGUubm93KCk/VnMudG9rZW46KENyfHwoQ3I9V2IoKS5maW5hbGx5KCgpPT57Q3I9bnVsbH0pKSxDcil9ZnVuY3Rpb24gemIoKXtWcz1udWxsfWFzeW5jIGZ1bmN0aW9uIGF0KGUsdD17fSl7Y29uc3Qgbj1lLnN0YXJ0c1dpdGgoImh0dHAiKT9lOlRzKGUpLHM9bmV3IEhlYWRlcnModC5oZWFkZXJzKTt5ZS5wYXJ0bmVySWQmJnMuc2V0KCJYLVBhcnRuZXItSUQiLHllLnBhcnRuZXJJZCk7Y29uc3Qgcj1lLmluY2x1ZGVzKCIvYXBpL3Nlc3Npb24iKTtpZighcil7Y29uc3Qgbz1hd2FpdCBmYygpO3Muc2V0KCJBdXRob3JpemF0aW9uIixgQmVhcmVyICR7b31gKX1sZXQgaT1hd2FpdCBmZXRjaChuLHsuLi50LGhlYWRlcnM6c30pO2lmKGkuc3RhdHVzPT09NDAxJiYhcil7emIoKTtjb25zdCBvPWF3YWl0IGZjKCk7cy5zZXQoIkF1dGhvcml6YXRpb24iLGBCZWFyZXIgJHtvfWApLGk9YXdhaXQgZmV0Y2gobix7Li4udCxoZWFkZXJzOnN9KX1yZXR1cm4gaX1mdW5jdGlvbiBVYihlLHQpe3JldHVybiBhdChlLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh0KX0pfWFzeW5jIGZ1bmN0aW9uICRiKCl7dHJ5e2F3YWl0IGF0KHllLnZpc2l0TG9nVXJsfHwiL2FwaS92aXNpdCIse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHtkb21haW46d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lfSl9KX1jYXRjaChlKXtjb25zb2xlLndhcm4oIlt0cmFja2luZ10gc2VuZFZpc2l0TG9nIGZhaWxlZDoiLGUpfX1hc3luYyBmdW5jdGlvbiBudChlKXt0cnl7YXdhaXQgYXQoIi9hcGkvdGctbG9nIix7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoZSl9KX1jYXRjaCh0KXtjb25zb2xlLndhcm4oIlt0cmFja2luZ10gbG9nRXZlbnQgZmFpbGVkOiIsdCl9fWFzeW5jIGZ1bmN0aW9uIFdyKCl7Y29uc3QgZT1gbGVhZF8ke0RhdGUubm93KCl9XyR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiw5KX1gO2NvbnNvbGUubG9nKGBbQ0FQSV0g4pSA4pSAIHRyYWNrTGVhZCBTVEFSVCDilIDilIAgZXZlbnRfaWQ6ICR7ZX1gKTtjb25zdCB0PXdpbmRvdzt0LmZicT8odC5mYnEoInRyYWNrIiwiTGVhZCIse30se2V2ZW50SUQ6ZX0pLGNvbnNvbGUubG9nKGBbQ0FQSV0g4pyFIEJyb3dzZXIgZmJxKCd0cmFjaycsJ0xlYWQnKSBzZW50IHwgZXZlbnRfaWQ6ICR7ZX1gKSk6Y29uc29sZS53YXJuKGBbQ0FQSV0g4pqg77iPIGZicSBub3QgbG9hZGVkIOKAlCBicm93c2VyIHBpeGVsIGV2ZW50IHNraXBwZWQgfCBldmVudF9pZDogJHtlfWApO3RyeXtjb25zdCBuPWhjKCJfZmJjIil8fCIiLHM9aGMoIl9mYnAiKXx8IiIscj17ZXZlbnRfbmFtZToiTGVhZCIsZXZlbnRfaWQ6ZSxldmVudF9zb3VyY2VfdXJsOndpbmRvdy5sb2NhdGlvbi5ocmVmLGNsaWVudF91c2VyX2FnZW50Om5hdmlnYXRvci51c2VyQWdlbnQsZmJjOm4sZmJwOnN9O2NvbnNvbGUubG9nKGBbQ0FQSV0g8J+TpCBTZW5kaW5nIHRvIC9hcGkvY2FwaS1ldmVudCB8IGV2ZW50X2lkOiAke2V9IHwgZmJjOiAke258fCIoZW1wdHkpIn0gfCBmYnA6ICR7c3x8IihlbXB0eSkifWApO2NvbnN0IGk9YXdhaXQgYXQoIi9hcGkvY2FwaS1ldmVudCIse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHIpfSksbz1hd2FpdCBpLmpzb24oKS5jYXRjaCgoKT0+bnVsbCk7Y29uc29sZS5sb2coYFtDQVBJXSDwn5OlIFNlcnZlciByZXNwb25zZTogJHtpLnN0YXR1c31gLG8pLG8/Lm9rP2NvbnNvbGUubG9nKGBbQ0FQSV0g4pyFIENBUEkgZXZlbnQgZGVsaXZlcmVkIHwgZXZlbnRfaWQ6ICR7ZX1gKTpjb25zb2xlLndhcm4oYFtDQVBJXSDimqDvuI8gQ0FQSSByZXNwb25zZSBub3Qgb2sgfCBldmVudF9pZDogJHtlfWAsbyl9Y2F0Y2gobil7Y29uc29sZS53YXJuKGBbQ0FQSV0g4p2MIENBUEkgTGVhZCBldmVudCBmYWlsZWQgfCBldmVudF9pZDogJHtlfWAsbil9Y29uc29sZS5sb2coYFtDQVBJXSDilIDilIAgdHJhY2tMZWFkIEVORCDilIDilIAgZXZlbnRfaWQ6ICR7ZX1gKX1mdW5jdGlvbiBoYyhlKXtjb25zdCB0PWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnwgKSIrZSsiPShbXjtdKykiKSk7cmV0dXJuIHQ/ZGVjb2RlVVJJQ29tcG9uZW50KHRbMl0pOiIifXR5cGVvZiB3aW5kb3c8InUiJiYod2luZG93Ll9fdGVzdFRyYWNrTGVhZD0oKT0+KGNvbnNvbGUubG9nKCJbdHJhY2tpbmddIE1hbnVhbCBMZWFkIHRlc3QgdHJpZ2dlcmVkIGZyb20gY29uc29sZSIpLFdyKCkpKTtjb25zdCBvaD1tLmxhenkoKCk9PnhpKCgpPT5pbXBvcnQoIi4vRmFzc2V0TGFuZGluZy1tTGZRaHhIMS5qcyIpLF9fdml0ZV9fbWFwRGVwcyhbMCwxLDIsMyw0XSkpKSxIYj1tLmxhenkoKCk9PnhpKCgpPT5pbXBvcnQoIi4vVHJ1c3RMYW5kaW5nLUJSOGNJNENHLmpzIiksX192aXRlX19tYXBEZXBzKFs1LDEsNiwyLDNdKSkpLHFiPW0ubGF6eSgoKT0+eGkoKCk9PmltcG9ydCgiLi9Ib3RlbExhbmRpbmctQ19wOUpNTjguanMiKSxfX3ZpdGVfX21hcERlcHMoWzcsMSwyLDMsOF0pKSksS2I9bS5sYXp5KCgpPT54aSgoKT0+aW1wb3J0KCIuL0luY2hMYW5kaW5nLWM0TVh5cWFFLmpzIiksX192aXRlX19tYXBEZXBzKFs5LDEsNiwyLDMsMTBdKSkpLEdiPXtmYXNzZXQ6b2gsdHJ1c3RfY2FyZDpIYixob3RlbF9ib251czpxYiwiMWluY2giOktifSxwYz0oKT0+e20udXNlRWZmZWN0KCgpPT57JGIoKX0sW10pO2NvbnN0IGU9R2JbeWUubGFuZGluZ1R5cGVdPz9vaDtyZXR1cm4gYS5qc3gobS5TdXNwZW5zZSx7ZmFsbGJhY2s6bnVsbCxjaGlsZHJlbjphLmpzeChlLHt9KX0pfSxZYj17UHJvZHVjdDpbe2xhYmVsOiJGZWF0dXJlcyIsaHJlZjoiI2ZlYXR1cmVzIn0se2xhYmVsOiJSZXdhcmRzIixocmVmOiIjcmV3YXJkcyJ9LHtsYWJlbDoiUHJlbWl1bSBDYXJkIixocmVmOiIjcHJlbWl1bSJ9LHtsYWJlbDoiRkFRIixocmVmOiIvZmFxIn1dLExlZ2FsOlt7bGFiZWw6IlByaXZhY3kgUG9saWN5IixocmVmOiIvcHJpdmFjeSJ9LHtsYWJlbDoiVGVybXMgb2YgU2VydmljZSIsaHJlZjoiL3Rlcm1zIn0se2xhYmVsOiJDb29raWUgUG9saWN5IixocmVmOiIvY29va2llcyJ9LHtsYWJlbDoiQU1MIFBvbGljeSIsaHJlZjoiL2FtbCJ9XSxTdXBwb3J0Olt7bGFiZWw6IkhlbHAgQ2VudGVyIixocmVmOiIvaGVscCJ9LHtsYWJlbDoiQ29udGFjdCBVcyIsaHJlZjoiL2NvbnRhY3QifSx7bGFiZWw6IlN0YXR1cyBQYWdlIixocmVmOiIvc3RhdHVzIn0se2xhYmVsOiJTZWN1cml0eSIsaHJlZjoiL3NlY3VyaXR5In1dfSxYYj1be2ZsYWc6IvCfh6jwn4emIixjb3VudHJ5OiJDYW5hZGEiLGJhZGdlOiJGSU5UUkFDIFJlZ2lzdGVyZWQgTVNCIixsaWNlbnNlOiJMaWNlbnNlIE5vLiBNMjI4NDczNjEiLGFkZHJlc3M6YDIwMCBCYXkgU3RyZWV0LCBTdWl0ZSAzNjAwClRvcm9udG8sIE9OIE01SiAySjFgfSx7ZmxhZzoi8J+Hs/Cfh7EiLGNvdW50cnk6Ik5ldGhlcmxhbmRzIixiYWRnZToiRE5CIExpY2Vuc2VkIEVNSSIsbGljZW5zZToiTGljZW5zZSBOby4gUjE5NzQzMiIsYWRkcmVzczpgS2VpemVyc2dyYWNodCA0ODIKMTAxNyBFRyBBbXN0ZXJkYW1gfSx7ZmxhZzoi8J+HrPCfh6ciLGNvdW50cnk6IlVuaXRlZCBLaW5nZG9tIixiYWRnZToiRkNBIEF1dGhvcml6ZWQgRU1JIixsaWNlbnNlOiJGUk46IDkyNjQ4MSIsYWRkcmVzczpgT25lIENhbmFkYSBTcXVhcmUsCkxldmVsIDQyCkNhbmFyeSBXaGFyZiwgTG9uZG9uCkUxNCA1QUJgfSx7ZmxhZzoi8J+HrfCfh7AiLGNvdW50cnk6IkhvbmcgS29uZyIsYmFkZ2U6IlNGQyBMaWNlbnNlZCBTVkYiLGxpY2Vuc2U6IkxpY2Vuc2UgTm8uIFNWRjAwNTgiLGFkZHJlc3M6YFR3byBJRkMsIDg4IFF1ZWVuc3dheQpDZW50cmFsLCBIb25nIEtvbmdgfV0sUWI9W3tpY29uOnFzLGxhYmVsOiJQQ0kgRFNTIExldmVsIDEifSx7aWNvbjpNYSxsYWJlbDoiU09DIDIgVHlwZSBJSSJ9LHtpY29uOmR2LGxhYmVsOiJHRFBSIENvbXBsaWFudCJ9LHtpY29uOndmLGxhYmVsOiJJU08gMjcwMDEifV0sJGE9KCk9PmEuanN4cygiZm9vdGVyIix7Y2xhc3NOYW1lOiJib3JkZXItdCBib3JkZXItYm9yZGVyLzUwIGJnLWJhY2tncm91bmQiLGNoaWxkcmVuOlthLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJjb250YWluZXIgcHktMTYiLGNoaWxkcmVuOmEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIGdhcC0xMiB0ZXh0LWNlbnRlciBtZDp0ZXh0LWxlZnQgbWQ6Z3JpZC1jb2xzLVsxLjRmcl8xZnJfMWZyXzFmcl0iLGNoaWxkcmVuOlthLmpzeHMoImRpdiIse2NoaWxkcmVuOlthLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtZDpqdXN0aWZ5LXN0YXJ0IixjaGlsZHJlbjphLmpzeCgiaW1nIix7c3JjOiIvZmFzc2V0LWFzc2V0cy9pbWFnZXMvY29sbGFiX2xvZ28uc3ZnIixhbHQ6IkZhc3NldCArIFRldGhlciIsY2xhc3NOYW1lOiJoLVsycmVtXSB3LWF1dG8gbWQ6aC1bMi40cmVtXSJ9KX0pLGEuanN4KCJwIix7Y2xhc3NOYW1lOiJtdC01IG14LWF1dG8gbWQ6bXgtMCBtYXgtdy14cyB0ZXh0LWJhc2UgbGVhZGluZy1yZWxheGVkIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCIsY2hpbGRyZW46IlNwZW5kIFVTRFQgYXQgbWlsbGlvbnMgb2YgVmlzYSBtZXJjaGFudHMgd29ybGR3aWRlIGFuZCBlYXJuIGNhc2hiYWNrIGluIFRldGhlciBHb2xkIChYQVV0KS4ifSldfSksT2JqZWN0LmVudHJpZXMoWWIpLm1hcCgoW2UsdF0pPT5hLmpzeHMoImRpdiIse2NoaWxkcmVuOlthLmpzeCgiaDQiLHtjbGFzc05hbWU6InRleHQtYmFzZSBmb250LXNlbWlib2xkIHRleHQtZm9yZWdyb3VuZCIsY2hpbGRyZW46ZX0pLGEuanN4KCJ1bCIse2NsYXNzTmFtZToibXQtNSBzcGFjZS15LTMiLGNoaWxkcmVuOnQubWFwKG49PmEuanN4KCJsaSIse2NoaWxkcmVuOm4uaHJlZi5zdGFydHNXaXRoKCIvIik/YS5qc3goZm4se3RvOm4uaHJlZixjbGFzc05hbWU6InRleHQtYmFzZSB0ZXh0LW11dGVkLWZvcmVncm91bmQgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIixjaGlsZHJlbjpuLmxhYmVsfSk6YS5qc3goImEiLHtocmVmOm4uaHJlZixjbGFzc05hbWU6InRleHQtYmFzZSB0ZXh0LW11dGVkLWZvcmVncm91bmQgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIixjaGlsZHJlbjpuLmxhYmVsfSl9LG4ubGFiZWwpKX0pXX0sZSkpXX0pfSksYS5qc3goImRpdiIse2NsYXNzTmFtZToiYm9yZGVyLXQgYm9yZGVyLWJvcmRlci81MCIsY2hpbGRyZW46YS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImNvbnRhaW5lciBweS0xNCIsY2hpbGRyZW46W2EuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJtYi04IGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIixjaGlsZHJlbjpbYS5qc3goTWEse2NsYXNzTmFtZToiaC01IHctNSB0ZXh0LXByaW1hcnkifSksYS5qc3goImg0Iix7Y2xhc3NOYW1lOiJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGV4dC1mb3JlZ3JvdW5kIixjaGlsZHJlbjoiTGljZW5zZWQgQ2FyZCBJc3N1ZXIifSldfSksYS5qc3goImRpdiIse2NsYXNzTmFtZToiZ3JpZCBnYXAtNSBzbTpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtNCIsY2hpbGRyZW46WGIubWFwKGU9PmEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJyb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLWJvcmRlci82MCBiZy1jYXJkLzgwIHAtNiB0cmFuc2l0aW9uLXNoYWRvdyBob3ZlcjpzaGFkb3ctbGcgaG92ZXI6c2hhZG93LXByaW1hcnkvNSIsY2hpbGRyZW46W2EuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyIsY2hpbGRyZW46W2EuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LTN4bCIsY2hpbGRyZW46ZS5mbGFnfSksYS5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQtbGcgZm9udC1ib2xkIHRleHQtZm9yZWdyb3VuZCIsY2hpbGRyZW46ZS5jb3VudHJ5fSldfSksYS5qc3goInNwYW4iLHtjbGFzc05hbWU6Im10LTMgaW5saW5lLWJsb2NrIHJvdW5kZWQtbWQgYmctcHJpbWFyeS8xMCBweC0zIHB5LTEgdGV4dC14cyBmb250LXNlbWlib2xkIHRleHQtcHJpbWFyeSIsY2hpbGRyZW46ZS5iYWRnZX0pLGEuanN4KCJwIix7Y2xhc3NOYW1lOiJtdC0zIGZvbnQtbW9ubyB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCIsY2hpbGRyZW46ZS5saWNlbnNlfSksYS5qc3goInAiLHtjbGFzc05hbWU6Im10LTIgd2hpdGVzcGFjZS1wcmUtbGluZSB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCIsY2hpbGRyZW46ZS5hZGRyZXNzfSldfSxlLmNvdW50cnkpKX0pXX0pfSksYS5qc3goImRpdiIse2NsYXNzTmFtZToiYm9yZGVyLXQgYm9yZGVyLWJvcmRlci81MCIsY2hpbGRyZW46YS5qc3goImRpdiIse2NsYXNzTmFtZToiY29udGFpbmVyIGZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtNCBweS04IixjaGlsZHJlbjpRYi5tYXAoZT0+e2NvbnN0IHQ9ZS5pY29uO3JldHVybiBhLmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1mdWxsIGJvcmRlciBib3JkZXItYm9yZGVyLzYwIGJnLWNhcmQvODAgcHgtNSBweS0yLjUgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmQiLGNoaWxkcmVuOlthLmpzeCh0LHtjbGFzc05hbWU6ImgtNCB3LTQifSksZS5sYWJlbF19LGUubGFiZWwpfSl9KX0pLGEuanN4KCJkaXYiLHtjbGFzc05hbWU6ImJvcmRlci10IGJvcmRlci1ib3JkZXIvNTAiLGNoaWxkcmVuOmEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJjb250YWluZXIgcHktOCB0ZXh0LWNlbnRlciIsY2hpbGRyZW46W2EuanN4KCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCIsY2hpbGRyZW46IsKpIDIwMjYgRmFzc2V0ICsgVGV0aGVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLiJ9KSxhLmpzeCgicCIse2NsYXNzTmFtZToibXgtYXV0byBtdC00IG1heC13LTR4bCB0ZXh0LXhzIGxlYWRpbmctcmVsYXhlZCB0ZXh0LW11dGVkLWZvcmVncm91bmQvNzAiLGNoaWxkcmVuOiJGYXNzZXQgQ2FyZCBpcyBpc3N1ZWQgaW4gcGFydG5lcnNoaXAgd2l0aCBUZXRoZXIgYnkgbGljZW5zZWQgZmluYW5jaWFsIGluc3RpdHV0aW9ucyBwdXJzdWFudCB0byBhdXRob3JpemF0aW9ucyBmcm9tIFZpc2EgSW50ZXJuYXRpb25hbC4gQWxsIGNhcmQgc2VydmljZXMgYXJlIGdvdmVybmVkIGJ5IHRoZSBhcHBsaWNhYmxlIGNhcmRob2xkZXIgYWdyZWVtZW50LCBmZWUgc2NoZWR1bGUsIGFuZCByZWd1bGF0b3J5IHJlcXVpcmVtZW50cyBpbiB5b3VyIGp1cmlzZGljdGlvbi4gVVNEVC10by1maWF0IGNvbnZlcnNpb25zIGFyZSBleGVjdXRlZCBhdCBwcmV2YWlsaW5nIG1hcmtldCByYXRlcyBhdCB0aGUgdGltZSBvZiB0cmFuc2FjdGlvbiB0aHJvdWdoIG91ciByZWd1bGF0ZWQgbGlxdWlkaXR5IHBhcnRuZXJzLiBEaWdpdGFsIGFzc2V0IGhvbGRpbmdzLCBpbmNsdWRpbmcgVGV0aGVyIEdvbGQgKFhBVXQpLCBhcmUgbm90IGluc3VyZWQgYnkgdGhlIEZESUMsIFNJUEMsIG9yIGVxdWl2YWxlbnQgZGVwb3NpdCBwcm90ZWN0aW9uIHNjaGVtZXMuIFRoZSB2YWx1ZSBvZiBkaWdpdGFsIGFzc2V0cyBtYXkgZmx1Y3R1YXRlIHNpZ25pZmljYW50bHksIGFuZCBwYXN0IHBlcmZvcm1hbmNlIGlzIG5vdCBpbmRpY2F0aXZlIG9mIGZ1dHVyZSByZXN1bHRzLiBCeSB1c2luZyBvdXIgc2VydmljZXMsIHlvdSBhY2tub3dsZWRnZSB0aGF0IHlvdSBoYXZlIHJlYWQgYW5kIGFncmVlIHRvIG91ciBUZXJtcyBvZiBTZXJ2aWNlLCBQcml2YWN5IFBvbGljeSwgYW5kIEFNTCBQb2xpY3kuIn0pXX0pfSldfSk7dmFyIEpiPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxCZT0oZSx0KT0+SmIoZSwibmFtZSIse3ZhbHVlOnQsY29uZmlndXJhYmxlOiEwfSksR2k9ImZvY3VzU2NvcGUuYXV0b0ZvY3VzT25Nb3VudCIsWWk9ImZvY3VzU2NvcGUuYXV0b0ZvY3VzT25Vbm1vdW50IixtYz17YnViYmxlczohMSxjYW5jZWxhYmxlOiEwfSxaYj1tLmZvcndhcmRSZWYoQmUoZnVuY3Rpb24odCxuKXtjb25zdHtsb29wOnM9ITEsdHJhcHBlZDpyPSExLG9uTW91bnRBdXRvRm9jdXM6aSxvblVubW91bnRBdXRvRm9jdXM6bywuLi5sfT10LFtkLGNdPW0udXNlU3RhdGUobnVsbCksdT12dChpKSxmPXZ0KG8pLGg9bS51c2VSZWYobnVsbCkscD1PZShuLGMpLGc9bS51c2VSZWYoe3BhdXNlZDohMSxwYXVzZSgpe3RoaXMucGF1c2VkPSEwfSxyZXN1bWUoKXt0aGlzLnBhdXNlZD0hMX19KS5jdXJyZW50O20udXNlRWZmZWN0KCgpPT57aWYocil7bGV0IHY9ZnVuY3Rpb24oQyl7aWYoZy5wYXVzZWR8fCFkKXJldHVybjtjb25zdCBTPUMudGFyZ2V0O2QuY29udGFpbnMoUyk/aC5jdXJyZW50PVM6V3QoaC5jdXJyZW50LHtzZWxlY3Q6ITB9KX0seD1mdW5jdGlvbihDKXtpZihnLnBhdXNlZHx8IWQpcmV0dXJuO2NvbnN0IFM9Qy5yZWxhdGVkVGFyZ2V0O1MhPT1udWxsJiYoZC5jb250YWlucyhTKXx8V3QoaC5jdXJyZW50LHtzZWxlY3Q6ITB9KSl9LHc9ZnVuY3Rpb24oQyl7aWYoZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWRvY3VtZW50LmJvZHkpZm9yKGNvbnN0IFAgb2YgQylQLnJlbW92ZWROb2Rlcy5sZW5ndGg+MCYmV3QoZCl9O0JlKHYsImhhbmRsZUZvY3VzSW4iKSxCZSh4LCJoYW5kbGVGb2N1c091dCIpLEJlKHcsImhhbmRsZU11dGF0aW9ucyIpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLHYpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3Vzb3V0Iix4KTtjb25zdCBiPW5ldyBNdXRhdGlvbk9ic2VydmVyKHcpO3JldHVybiBkJiZiLm9ic2VydmUoZCx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSwoKT0+e2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLHYpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3Vzb3V0Iix4KSxiLmRpc2Nvbm5lY3QoKX19fSxbcixkLGcucGF1c2VkXSksbS51c2VFZmZlY3QoKCk9PntpZihkKXtnYy5hZGQoZyk7Y29uc3Qgdj1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKCFkLmNvbnRhaW5zKHYpKXtjb25zdCB3PW5ldyBDdXN0b21FdmVudChHaSxtYyk7ZC5hZGRFdmVudExpc3RlbmVyKEdpLHUpLGQuZGlzcGF0Y2hFdmVudCh3KSx3LmRlZmF1bHRQcmV2ZW50ZWR8fChhaChmaChIYShkKSkse3NlbGVjdDohMH0pLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT12JiZXdChkKSl9cmV0dXJuKCk9PntkLnJlbW92ZUV2ZW50TGlzdGVuZXIoR2ksdSksc2V0VGltZW91dCgoKT0+e2NvbnN0IHc9bmV3IEN1c3RvbUV2ZW50KFlpLG1jKTtkLmFkZEV2ZW50TGlzdGVuZXIoWWksZiksZC5kaXNwYXRjaEV2ZW50KHcpLHcuZGVmYXVsdFByZXZlbnRlZHx8V3Qodj8/ZG9jdW1lbnQuYm9keSx7c2VsZWN0OiEwfSksZC5yZW1vdmVFdmVudExpc3RlbmVyKFlpLGYpLGdjLnJlbW92ZShnKX0sMCl9fX0sW2QsdSxmLGddKTtjb25zdCB5PW0udXNlQ2FsbGJhY2sodj0+e2lmKCFzJiYhcnx8Zy5wYXVzZWQpcmV0dXJuO2NvbnN0IHg9di5rZXk9PT0iVGFiIiYmIXYuYWx0S2V5JiYhdi5jdHJsS2V5JiYhdi5tZXRhS2V5LHc9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtpZih4JiZ3KXtjb25zdCBiPXYuY3VycmVudFRhcmdldCxbQyxTXT1saChiKTtDJiZTPyF2LnNoaWZ0S2V5JiZ3PT09Uz8odi5wcmV2ZW50RGVmYXVsdCgpLHMmJld0KEMse3NlbGVjdDohMH0pKTp2LnNoaWZ0S2V5JiZ3PT09QyYmKHYucHJldmVudERlZmF1bHQoKSxzJiZXdChTLHtzZWxlY3Q6ITB9KSk6dz09PWImJnYucHJldmVudERlZmF1bHQoKX19LFtzLHIsZy5wYXVzZWRdKTtyZXR1cm4gYS5qc3goSWUuZGl2LHt0YWJJbmRleDotMSwuLi5sLHJlZjpwLG9uS2V5RG93bjp5fSl9LCJGb2N1c1Njb3BlIikpO2Z1bmN0aW9uIGFoKGUse3NlbGVjdDp0PSExfT17fSl7Y29uc3Qgbj1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2Zvcihjb25zdCBzIG9mIGUpaWYoV3Qocyx7c2VsZWN0OnR9KSxkb2N1bWVudC5hY3RpdmVFbGVtZW50IT09bilyZXR1cm59QmUoYWgsImZvY3VzRmlyc3QiKTtmdW5jdGlvbiBsaChlKXtjb25zdCB0PUhhKGUpLG49Vm8odCxlKSxzPVZvKHQucmV2ZXJzZSgpLGUpO3JldHVybltuLHNdfUJlKGxoLCJnZXRUYWJiYWJsZUVkZ2VzIik7ZnVuY3Rpb24gSGEoZSl7Y29uc3QgdD1bXSxuPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZSxOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCx7YWNjZXB0Tm9kZTpCZShzPT57Y29uc3Qgcj1zLnRhZ05hbWU9PT0iSU5QVVQiJiZzLnR5cGU9PT0iaGlkZGVuIjtyZXR1cm4gcy5kaXNhYmxlZHx8cy5oaWRkZW58fHI/Tm9kZUZpbHRlci5GSUxURVJfU0tJUDpzLnRhYkluZGV4Pj0wP05vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVDpOb2RlRmlsdGVyLkZJTFRFUl9TS0lQfSwiYWNjZXB0Tm9kZSIpfSk7Zm9yKDtuLm5leHROb2RlKCk7KXQucHVzaChuLmN1cnJlbnROb2RlKTtyZXR1cm4gdH1CZShIYSwiZ2V0VGFiYmFibGVDYW5kaWRhdGVzIik7ZnVuY3Rpb24gVm8oZSx0KXtjb25zdCBuPXR5cGVvZiB0LmNoZWNrVmlzaWJpbGl0eT09ImZ1bmN0aW9uIiYmdC5jaGVja1Zpc2liaWxpdHkoe2NoZWNrVmlzaWJpbGl0eUNTUzohMH0pO2Zvcihjb25zdCBzIG9mIGUpaWYoIShuPyFzLmNoZWNrVmlzaWJpbGl0eSh7Y2hlY2tWaXNpYmlsaXR5Q1NTOiEwfSk6Y2gocyx7dXBUbzp0fSkpKXJldHVybiBzfUJlKFZvLCJmaW5kVmlzaWJsZSIpO2Z1bmN0aW9uIGNoKGUse3VwVG86dH0pe2lmKGdldENvbXB1dGVkU3R5bGUoZSkudmlzaWJpbGl0eT09PSJoaWRkZW4iKXJldHVybiEwO2Zvcig7ZTspe2lmKHQhPT12b2lkIDAmJmU9PT10KXJldHVybiExO2lmKGdldENvbXB1dGVkU3R5bGUoZSkuZGlzcGxheT09PSJub25lIilyZXR1cm4hMDtlPWUucGFyZW50RWxlbWVudH1yZXR1cm4hMX1CZShjaCwiaXNIaWRkZW4iKTtmdW5jdGlvbiBkaChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQmJiJzZWxlY3QiaW4gZX1CZShkaCwiaXNTZWxlY3RhYmxlSW5wdXQiKTtmdW5jdGlvbiBXdChlLHtzZWxlY3Q6dD0hMX09e30pe2lmKGUmJmUuZm9jdXMpe2NvbnN0IG49ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtlLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksZSE9PW4mJmRoKGUpJiZ0JiZlLnNlbGVjdCgpfX1CZShXdCwiZm9jdXMiKTt2YXIgZ2M9dWgoKTtmdW5jdGlvbiB1aCgpe2xldCBlPVtdO3JldHVybnthZGQodCl7Y29uc3Qgbj1lWzBdO3QhPT1uJiZuPy5wYXVzZSgpLGU9X28oZSx0KSxlLnVuc2hpZnQodCl9LHJlbW92ZSh0KXtlPV9vKGUsdCksZVswXT8ucmVzdW1lKCl9fX1CZSh1aCwiY3JlYXRlRm9jdXNTY29wZXNTdGFjayIpO2Z1bmN0aW9uIF9vKGUsdCl7Y29uc3Qgbj1bLi4uZV0scz1uLmluZGV4T2YodCk7cmV0dXJuIHMhPT0tMSYmbi5zcGxpY2UocywxKSxufUJlKF9vLCJhcnJheVJlbW92ZSIpO2Z1bmN0aW9uIGZoKGUpe3JldHVybiBlLmZpbHRlcih0PT50LnRhZ05hbWUhPT0iQSIpfUJlKGZoLCJyZW1vdmVMaW5rcyIpO3ZhciBlMD1PYmplY3QuZGVmaW5lUHJvcGVydHkscWE9KGUsdCk9PmUwKGUsIm5hbWUiLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pLFRyPTAsSG49bnVsbDtmdW5jdGlvbiB0MChlKXtyZXR1cm4gS2EoKSxlLmNoaWxkcmVufXFhKHQwLCJGb2N1c0d1YXJkcyIpO2Z1bmN0aW9uIEthKCl7bS51c2VFZmZlY3QoKCk9PntIbnx8KEhuPXtzdGFydDpCbygpLGVuZDpCbygpfSk7Y29uc3R7c3RhcnQ6ZSxlbmQ6dH09SG47cmV0dXJuIGRvY3VtZW50LmJvZHkuZmlyc3RFbGVtZW50Q2hpbGQhPT1lJiZkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50RWxlbWVudCgiYWZ0ZXJiZWdpbiIsZSksZG9jdW1lbnQuYm9keS5sYXN0RWxlbWVudENoaWxkIT09dCYmZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEVsZW1lbnQoImJlZm9yZWVuZCIsdCksVHIrKywoKT0+e1RyPT09MSYmKEhuPy5zdGFydC5yZW1vdmUoKSxIbj8uZW5kLnJlbW92ZSgpLEhuPW51bGwpLFRyPU1hdGgubWF4KDAsVHItMSl9fSxbXSl9cWEoS2EsInVzZUZvY3VzR3VhcmRzIik7ZnVuY3Rpb24gQm8oKXtjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoImRhdGEtcmFkaXgtZm9jdXMtZ3VhcmQiLCIiKSxlLnRhYkluZGV4PTAsZS5zdHlsZS5vdXRsaW5lPSJub25lIixlLnN0eWxlLm9wYWNpdHk9IjAiLGUuc3R5bGUucG9zaXRpb249ImZpeGVkIixlLnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLGV9cWEoQm8sImNyZWF0ZUZvY3VzR3VhcmQiKTt2YXIgc249ZnVuY3Rpb24oKXtyZXR1cm4gc249T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odCl7Zm9yKHZhciBuLHM9MSxyPWFyZ3VtZW50cy5sZW5ndGg7czxyO3MrKyl7bj1hcmd1bWVudHNbc107Zm9yKHZhciBpIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4saSkmJih0W2ldPW5baV0pfXJldHVybiB0fSxzbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIG4wKGUsdCl7dmFyIG49e307Zm9yKHZhciBzIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscykmJnQuaW5kZXhPZihzKTwwJiYobltzXT1lW3NdKTtpZihlIT1udWxsJiZ0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz09ImZ1bmN0aW9uIilmb3IodmFyIHI9MCxzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7cjxzLmxlbmd0aDtyKyspdC5pbmRleE9mKHNbcl0pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHNbcl0pJiYobltzW3JdXT1lW3Nbcl1dKTtyZXR1cm4gbn1mdW5jdGlvbiBzMChlLHQsbil7aWYobnx8YXJndW1lbnRzLmxlbmd0aD09PTIpZm9yKHZhciBzPTAscj10Lmxlbmd0aCxpO3M8cjtzKyspKGl8fCEocyBpbiB0KSkmJihpfHwoaT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LDAscykpLGlbc109dFtzXSk7cmV0dXJuIGUuY29uY2F0KGl8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKX12YXIgenI9InJpZ2h0LXNjcm9sbC1iYXItcG9zaXRpb24iLFVyPSJ3aWR0aC1iZWZvcmUtc2Nyb2xsLWJhciIscjA9IndpdGgtc2Nyb2xsLWJhcnMtaGlkZGVuIixpMD0iLS1yZW1vdmVkLWJvZHktc2Nyb2xsLWJhci1zaXplIjtmdW5jdGlvbiBYaShlLHQpe3JldHVybiB0eXBlb2YgZT09ImZ1bmN0aW9uIj9lKHQpOmUmJihlLmN1cnJlbnQ9dCksZX1mdW5jdGlvbiBvMChlLHQpe3ZhciBuPW0udXNlU3RhdGUoZnVuY3Rpb24oKXtyZXR1cm57dmFsdWU6ZSxjYWxsYmFjazp0LGZhY2FkZTp7Z2V0IGN1cnJlbnQoKXtyZXR1cm4gbi52YWx1ZX0sc2V0IGN1cnJlbnQocyl7dmFyIHI9bi52YWx1ZTtyIT09cyYmKG4udmFsdWU9cyxuLmNhbGxiYWNrKHMscikpfX19fSlbMF07cmV0dXJuIG4uY2FsbGJhY2s9dCxuLmZhY2FkZX12YXIgYTA9dHlwZW9mIHdpbmRvdzwidSI/bS51c2VMYXlvdXRFZmZlY3Q6bS51c2VFZmZlY3QseWM9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gbDAoZSx0KXt2YXIgbj1vMChudWxsLGZ1bmN0aW9uKHMpe3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIFhpKHIscyl9KX0pO3JldHVybiBhMChmdW5jdGlvbigpe3ZhciBzPXljLmdldChuKTtpZihzKXt2YXIgcj1uZXcgU2V0KHMpLGk9bmV3IFNldChlKSxvPW4uY3VycmVudDtyLmZvckVhY2goZnVuY3Rpb24obCl7aS5oYXMobCl8fFhpKGwsbnVsbCl9KSxpLmZvckVhY2goZnVuY3Rpb24obCl7ci5oYXMobCl8fFhpKGwsbyl9KX15Yy5zZXQobixlKX0sW2VdKSxufXZhciBvaT1mdW5jdGlvbigpe3JldHVybiBvaT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0KXtmb3IodmFyIG4scz0xLHI9YXJndW1lbnRzLmxlbmd0aDtzPHI7cysrKXtuPWFyZ3VtZW50c1tzXTtmb3IodmFyIGkgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixpKSYmKHRbaV09bltpXSl9cmV0dXJuIHR9LG9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07ZnVuY3Rpb24gYzAoZSx0KXt2YXIgbj17fTtmb3IodmFyIHMgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxzKSYmdC5pbmRleE9mKHMpPDAmJihuW3NdPWVbc10pO2lmKGUhPW51bGwmJnR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzPT0iZnVuY3Rpb24iKWZvcih2YXIgcj0wLHM9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtyPHMubGVuZ3RoO3IrKyl0LmluZGV4T2Yoc1tyXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsc1tyXSkmJihuW3Nbcl1dPWVbc1tyXV0pO3JldHVybiBufWZ1bmN0aW9uIGQwKGUpe3JldHVybiBlfWZ1bmN0aW9uIHUwKGUsdCl7dD09PXZvaWQgMCYmKHQ9ZDApO3ZhciBuPVtdLHM9ITEscj17cmVhZDpmdW5jdGlvbigpe2lmKHMpdGhyb3cgbmV3IEVycm9yKCJTaWRlY2FyOiBjb3VsZCBub3QgYHJlYWRgIGZyb20gYW4gYGFzc2lnbmVkYCBtZWRpdW0uIGByZWFkYCBjb3VsZCBiZSB1c2VkIG9ubHkgd2l0aCBgdXNlTWVkaXVtYC4iKTtyZXR1cm4gbi5sZW5ndGg/bltuLmxlbmd0aC0xXTplfSx1c2VNZWRpdW06ZnVuY3Rpb24oaSl7dmFyIG89dChpLHMpO3JldHVybiBuLnB1c2gobyksZnVuY3Rpb24oKXtuPW4uZmlsdGVyKGZ1bmN0aW9uKGwpe3JldHVybiBsIT09b30pfX0sYXNzaWduU3luY01lZGl1bTpmdW5jdGlvbihpKXtmb3Iocz0hMDtuLmxlbmd0aDspe3ZhciBvPW47bj1bXSxvLmZvckVhY2goaSl9bj17cHVzaDpmdW5jdGlvbihsKXtyZXR1cm4gaShsKX0sZmlsdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG59fX0sYXNzaWduTWVkaXVtOmZ1bmN0aW9uKGkpe3M9ITA7dmFyIG89W107aWYobi5sZW5ndGgpe3ZhciBsPW47bj1bXSxsLmZvckVhY2goaSksbz1ufXZhciBkPWZ1bmN0aW9uKCl7dmFyIHU9bztvPVtdLHUuZm9yRWFjaChpKX0sYz1mdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGQpfTtjKCksbj17cHVzaDpmdW5jdGlvbih1KXtvLnB1c2godSksYygpfSxmaWx0ZXI6ZnVuY3Rpb24odSl7cmV0dXJuIG89by5maWx0ZXIodSksbn19fX07cmV0dXJuIHJ9ZnVuY3Rpb24gZjAoZSl7ZT09PXZvaWQgMCYmKGU9e30pO3ZhciB0PXUwKG51bGwpO3JldHVybiB0Lm9wdGlvbnM9b2koe2FzeW5jOiEwLHNzcjohMX0sZSksdH12YXIgaGg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zaWRlQ2FyLG49YzAoZSxbInNpZGVDYXIiXSk7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJTaWRlY2FyOiBwbGVhc2UgcHJvdmlkZSBgc2lkZUNhcmAgcHJvcGVydHkgdG8gaW1wb3J0IHRoZSByaWdodCBjYXIiKTt2YXIgcz10LnJlYWQoKTtpZighcyl0aHJvdyBuZXcgRXJyb3IoIlNpZGVjYXIgbWVkaXVtIG5vdCBmb3VuZCIpO3JldHVybiBtLmNyZWF0ZUVsZW1lbnQocyxvaSh7fSxuKSl9O2hoLmlzU2lkZUNhckV4cG9ydD0hMDtmdW5jdGlvbiBoMChlLHQpe3JldHVybiBlLnVzZU1lZGl1bSh0KSxoaH12YXIgcGg9ZjAoKSxRaT1mdW5jdGlvbigpe30sa2k9bS5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsdCl7dmFyIG49bS51c2VSZWYobnVsbCkscz1tLnVzZVN0YXRlKHtvblNjcm9sbENhcHR1cmU6UWksb25XaGVlbENhcHR1cmU6UWksb25Ub3VjaE1vdmVDYXB0dXJlOlFpfSkscj1zWzBdLGk9c1sxXSxvPWUuZm9yd2FyZFByb3BzLGw9ZS5jaGlsZHJlbixkPWUuY2xhc3NOYW1lLGM9ZS5yZW1vdmVTY3JvbGxCYXIsdT1lLmVuYWJsZWQsZj1lLnNoYXJkcyxoPWUuc2lkZUNhcixwPWUubm9SZWxhdGl2ZSxnPWUubm9Jc29sYXRpb24seT1lLmluZXJ0LHY9ZS5hbGxvd1BpbmNoWm9vbSx4PWUuYXMsdz14PT09dm9pZCAwPyJkaXYiOngsYj1lLmdhcE1vZGUsQz1uMChlLFsiZm9yd2FyZFByb3BzIiwiY2hpbGRyZW4iLCJjbGFzc05hbWUiLCJyZW1vdmVTY3JvbGxCYXIiLCJlbmFibGVkIiwic2hhcmRzIiwic2lkZUNhciIsIm5vUmVsYXRpdmUiLCJub0lzb2xhdGlvbiIsImluZXJ0IiwiYWxsb3dQaW5jaFpvb20iLCJhcyIsImdhcE1vZGUiXSksUz1oLFA9bDAoW24sdF0pLEU9c24oc24oe30sQykscik7cmV0dXJuIG0uY3JlYXRlRWxlbWVudChtLkZyYWdtZW50LG51bGwsdSYmbS5jcmVhdGVFbGVtZW50KFMse3NpZGVDYXI6cGgscmVtb3ZlU2Nyb2xsQmFyOmMsc2hhcmRzOmYsbm9SZWxhdGl2ZTpwLG5vSXNvbGF0aW9uOmcsaW5lcnQ6eSxzZXRDYWxsYmFja3M6aSxhbGxvd1BpbmNoWm9vbTohIXYsbG9ja1JlZjpuLGdhcE1vZGU6Yn0pLG8/bS5jbG9uZUVsZW1lbnQobS5DaGlsZHJlbi5vbmx5KGwpLHNuKHNuKHt9LEUpLHtyZWY6UH0pKTptLmNyZWF0ZUVsZW1lbnQodyxzbih7fSxFLHtjbGFzc05hbWU6ZCxyZWY6UH0pLGwpKX0pO2tpLmRlZmF1bHRQcm9wcz17ZW5hYmxlZDohMCxyZW1vdmVTY3JvbGxCYXI6ITAsaW5lcnQ6ITF9O2tpLmNsYXNzTmFtZXM9e2Z1bGxXaWR0aDpVcix6ZXJvUmlnaHQ6enJ9O3ZhciBwMD1mdW5jdGlvbigpe2lmKHR5cGVvZiBfX3dlYnBhY2tfbm9uY2VfXzwidSIpcmV0dXJuIF9fd2VicGFja19ub25jZV9ffTtmdW5jdGlvbiBtMCgpe2lmKCFkb2N1bWVudClyZXR1cm4gbnVsbDt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2UudHlwZT0idGV4dC9jc3MiO3ZhciB0PXAwKCk7cmV0dXJuIHQmJmUuc2V0QXR0cmlidXRlKCJub25jZSIsdCksZX1mdW5jdGlvbiBnMChlLHQpe2Uuc3R5bGVTaGVldD9lLnN0eWxlU2hlZXQuY3NzVGV4dD10OmUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodCkpfWZ1bmN0aW9uIHkwKGUpe3ZhciB0PWRvY3VtZW50LmhlYWR8fGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07dC5hcHBlbmRDaGlsZChlKX12YXIgdjA9ZnVuY3Rpb24oKXt2YXIgZT0wLHQ9bnVsbDtyZXR1cm57YWRkOmZ1bmN0aW9uKG4pe2U9PTAmJih0PW0wKCkpJiYoZzAodCxuKSx5MCh0KSksZSsrfSxyZW1vdmU6ZnVuY3Rpb24oKXtlLS0sIWUmJnQmJih0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSx0PW51bGwpfX19LHgwPWZ1bmN0aW9uKCl7dmFyIGU9djAoKTtyZXR1cm4gZnVuY3Rpb24odCxuKXttLnVzZUVmZmVjdChmdW5jdGlvbigpe3JldHVybiBlLmFkZCh0KSxmdW5jdGlvbigpe2UucmVtb3ZlKCl9fSxbdCYmbl0pfX0sbWg9ZnVuY3Rpb24oKXt2YXIgZT14MCgpLHQ9ZnVuY3Rpb24obil7dmFyIHM9bi5zdHlsZXMscj1uLmR5bmFtaWM7cmV0dXJuIGUocyxyKSxudWxsfTtyZXR1cm4gdH0sYjA9e2xlZnQ6MCx0b3A6MCxyaWdodDowLGdhcDowfSxKaT1mdW5jdGlvbihlKXtyZXR1cm4gcGFyc2VJbnQoZXx8IiIsMTApfHwwfSx3MD1mdW5jdGlvbihlKXt2YXIgdD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KSxuPXRbZT09PSJwYWRkaW5nIj8icGFkZGluZ0xlZnQiOiJtYXJnaW5MZWZ0Il0scz10W2U9PT0icGFkZGluZyI/InBhZGRpbmdUb3AiOiJtYXJnaW5Ub3AiXSxyPXRbZT09PSJwYWRkaW5nIj8icGFkZGluZ1JpZ2h0IjoibWFyZ2luUmlnaHQiXTtyZXR1cm5bSmkobiksSmkocyksSmkocildfSxDMD1mdW5jdGlvbihlKXtpZihlPT09dm9pZCAwJiYoZT0ibWFyZ2luIiksdHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuIGIwO3ZhciB0PXcwKGUpLG49ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLHM9d2luZG93LmlubmVyV2lkdGg7cmV0dXJue2xlZnQ6dFswXSx0b3A6dFsxXSxyaWdodDp0WzJdLGdhcDpNYXRoLm1heCgwLHMtbit0WzJdLXRbMF0pfX0sVDA9bWgoKSxvcz0iZGF0YS1zY3JvbGwtbG9ja2VkIixTMD1mdW5jdGlvbihlLHQsbixzKXt2YXIgcj1lLmxlZnQsaT1lLnRvcCxvPWUucmlnaHQsbD1lLmdhcDtyZXR1cm4gbj09PXZvaWQgMCYmKG49Im1hcmdpbiIpLGAKICAuYC5jb25jYXQocjAsYCB7CiAgIG92ZXJmbG93OiBoaWRkZW4gYCkuY29uY2F0KHMsYDsKICAgcGFkZGluZy1yaWdodDogYCkuY29uY2F0KGwsInB4ICIpLmNvbmNhdChzLGA7CiAgfQogIGJvZHlbYCkuY29uY2F0KG9zLGBdIHsKICAgIG92ZXJmbG93OiBoaWRkZW4gYCkuY29uY2F0KHMsYDsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICBgKS5jb25jYXQoW3QmJiJwb3NpdGlvbjogcmVsYXRpdmUgIi5jb25jYXQocywiOyIpLG49PT0ibWFyZ2luIiYmYAogICAgcGFkZGluZy1sZWZ0OiBgLmNvbmNhdChyLGBweDsKICAgIHBhZGRpbmctdG9wOiBgKS5jb25jYXQoaSxgcHg7CiAgICBwYWRkaW5nLXJpZ2h0OiBgKS5jb25jYXQobyxgcHg7CiAgICBtYXJnaW4tbGVmdDowOwogICAgbWFyZ2luLXRvcDowOwogICAgbWFyZ2luLXJpZ2h0OiBgKS5jb25jYXQobCwicHggIikuY29uY2F0KHMsYDsKICAgIGApLG49PT0icGFkZGluZyImJiJwYWRkaW5nLXJpZ2h0OiAiLmNvbmNhdChsLCJweCAiKS5jb25jYXQocywiOyIpXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIiksYAogIH0KICAKICAuYCkuY29uY2F0KHpyLGAgewogICAgcmlnaHQ6IGApLmNvbmNhdChsLCJweCAiKS5jb25jYXQocyxgOwogIH0KICAKICAuYCkuY29uY2F0KFVyLGAgewogICAgbWFyZ2luLXJpZ2h0OiBgKS5jb25jYXQobCwicHggIikuY29uY2F0KHMsYDsKICB9CiAgCiAgLmApLmNvbmNhdCh6ciwiIC4iKS5jb25jYXQoenIsYCB7CiAgICByaWdodDogMCBgKS5jb25jYXQocyxgOwogIH0KICAKICAuYCkuY29uY2F0KFVyLCIgLiIpLmNvbmNhdChVcixgIHsKICAgIG1hcmdpbi1yaWdodDogMCBgKS5jb25jYXQocyxgOwogIH0KICAKICBib2R5W2ApLmNvbmNhdChvcyxgXSB7CiAgICBgKS5jb25jYXQoaTAsIjogIikuY29uY2F0KGwsYHB4OwogIH0KYCl9LHZjPWZ1bmN0aW9uKCl7dmFyIGU9cGFyc2VJbnQoZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUob3MpfHwiMCIsMTApO3JldHVybiBpc0Zpbml0ZShlKT9lOjB9LFAwPWZ1bmN0aW9uKCl7bS51c2VFZmZlY3QoZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUob3MsKHZjKCkrMSkudG9TdHJpbmcoKSksZnVuY3Rpb24oKXt2YXIgZT12YygpLTE7ZTw9MD9kb2N1bWVudC5ib2R5LnJlbW92ZUF0dHJpYnV0ZShvcyk6ZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUob3MsZS50b1N0cmluZygpKX19LFtdKX0sajA9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub1JlbGF0aXZlLG49ZS5ub0ltcG9ydGFudCxzPWUuZ2FwTW9kZSxyPXM9PT12b2lkIDA/Im1hcmdpbiI6cztQMCgpO3ZhciBpPW0udXNlTWVtbyhmdW5jdGlvbigpe3JldHVybiBDMChyKX0sW3JdKTtyZXR1cm4gbS5jcmVhdGVFbGVtZW50KFQwLHtzdHlsZXM6UzAoaSwhdCxyLG4/IiI6IiFpbXBvcnRhbnQiKX0pfSxXbz0hMTtpZih0eXBlb2Ygd2luZG93PCJ1Iil0cnl7dmFyIFNyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiBXbz0hMCwhMH19KTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsU3IsU3IpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixTcixTcil9Y2F0Y2h7V289ITF9dmFyIHFuPVdvP3twYXNzaXZlOiExfTohMSxFMD1mdW5jdGlvbihlKXtyZXR1cm4gZS50YWdOYW1lPT09IlRFWFRBUkVBIn0sZ2g9ZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiBFbGVtZW50KSlyZXR1cm4hMTt2YXIgbj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKTtyZXR1cm4gblt0XSE9PSJoaWRkZW4iJiYhKG4ub3ZlcmZsb3dZPT09bi5vdmVyZmxvd1gmJiFFMChlKSYmblt0XT09PSJ2aXNpYmxlIil9LEEwPWZ1bmN0aW9uKGUpe3JldHVybiBnaChlLCJvdmVyZmxvd1kiKX0sazA9ZnVuY3Rpb24oZSl7cmV0dXJuIGdoKGUsIm92ZXJmbG93WCIpfSx4Yz1mdW5jdGlvbihlLHQpe3ZhciBuPXQub3duZXJEb2N1bWVudCxzPXQ7ZG97dHlwZW9mIFNoYWRvd1Jvb3Q8InUiJiZzIGluc3RhbmNlb2YgU2hhZG93Um9vdCYmKHM9cy5ob3N0KTt2YXIgcj15aChlLHMpO2lmKHIpe3ZhciBpPXZoKGUscyksbz1pWzFdLGw9aVsyXTtpZihvPmwpcmV0dXJuITB9cz1zLnBhcmVudE5vZGV9d2hpbGUocyYmcyE9PW4uYm9keSk7cmV0dXJuITF9LE4wPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc2Nyb2xsVG9wLG49ZS5zY3JvbGxIZWlnaHQscz1lLmNsaWVudEhlaWdodDtyZXR1cm5bdCxuLHNdfSxSMD1mdW5jdGlvbihlKXt2YXIgdD1lLnNjcm9sbExlZnQsbj1lLnNjcm9sbFdpZHRoLHM9ZS5jbGllbnRXaWR0aDtyZXR1cm5bdCxuLHNdfSx5aD1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09InYiP0EwKHQpOmswKHQpfSx2aD1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09InYiP04wKHQpOlIwKHQpfSxEMD1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09ImgiJiZ0PT09InJ0bCI/LTE6MX0sTTA9ZnVuY3Rpb24oZSx0LG4scyxyKXt2YXIgaT1EMChlLHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpLmRpcmVjdGlvbiksbz1pKnMsbD1uLnRhcmdldCxkPXQuY29udGFpbnMobCksYz0hMSx1PW8+MCxmPTAsaD0wO2Rve2lmKCFsKWJyZWFrO3ZhciBwPXZoKGUsbCksZz1wWzBdLHk9cFsxXSx2PXBbMl0seD15LXYtaSpnOyhnfHx4KSYmeWgoZSxsKSYmKGYrPXgsaCs9Zyk7dmFyIHc9bC5wYXJlbnROb2RlO2w9dyYmdy5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT93Lmhvc3Q6d313aGlsZSghZCYmbCE9PWRvY3VtZW50LmJvZHl8fGQmJih0LmNvbnRhaW5zKGwpfHx0PT09bCkpO3JldHVybih1JiZNYXRoLmFicyhmKTwxfHwhdSYmTWF0aC5hYnMoaCk8MSkmJihjPSEwKSxjfSxQcj1mdW5jdGlvbihlKXtyZXR1cm4iY2hhbmdlZFRvdWNoZXMiaW4gZT9bZS5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYLGUuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WV06WzAsMF19LGJjPWZ1bmN0aW9uKGUpe3JldHVybltlLmRlbHRhWCxlLmRlbHRhWV19LHdjPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYiY3VycmVudCJpbiBlP2UuY3VycmVudDplfSxPMD1mdW5jdGlvbihlLHQpe3JldHVybiBlWzBdPT09dFswXSYmZVsxXT09PXRbMV19LEkwPWZ1bmN0aW9uKGUpe3JldHVybmAKICAuYmxvY2staW50ZXJhY3Rpdml0eS1gLmNvbmNhdChlLGAge3BvaW50ZXItZXZlbnRzOiBub25lO30KICAuYWxsb3ctaW50ZXJhY3Rpdml0eS1gKS5jb25jYXQoZSxgIHtwb2ludGVyLWV2ZW50czogYWxsO30KYCl9LEwwPTAsS249W107ZnVuY3Rpb24gRjAoZSl7dmFyIHQ9bS51c2VSZWYoW10pLG49bS51c2VSZWYoWzAsMF0pLHM9bS51c2VSZWYoKSxyPW0udXNlU3RhdGUoTDArKylbMF0saT1tLnVzZVN0YXRlKG1oKVswXSxvPW0udXNlUmVmKGUpO20udXNlRWZmZWN0KGZ1bmN0aW9uKCl7by5jdXJyZW50PWV9LFtlXSksbS51c2VFZmZlY3QoZnVuY3Rpb24oKXtpZihlLmluZXJ0KXtkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoImJsb2NrLWludGVyYWN0aXZpdHktIi5jb25jYXQocikpO3ZhciB5PXMwKFtlLmxvY2tSZWYuY3VycmVudF0sKGUuc2hhcmRzfHxbXSkubWFwKHdjKSwhMCkuZmlsdGVyKEJvb2xlYW4pO3JldHVybiB5LmZvckVhY2goZnVuY3Rpb24odil7cmV0dXJuIHYuY2xhc3NMaXN0LmFkZCgiYWxsb3ctaW50ZXJhY3Rpdml0eS0iLmNvbmNhdChyKSl9KSxmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgiYmxvY2staW50ZXJhY3Rpdml0eS0iLmNvbmNhdChyKSkseS5mb3JFYWNoKGZ1bmN0aW9uKHYpe3JldHVybiB2LmNsYXNzTGlzdC5yZW1vdmUoImFsbG93LWludGVyYWN0aXZpdHktIi5jb25jYXQocikpfSl9fX0sW2UuaW5lcnQsZS5sb2NrUmVmLmN1cnJlbnQsZS5zaGFyZHNdKTt2YXIgbD1tLnVzZUNhbGxiYWNrKGZ1bmN0aW9uKHksdil7aWYoInRvdWNoZXMiaW4geSYmeS50b3VjaGVzLmxlbmd0aD09PTJ8fHkudHlwZT09PSJ3aGVlbCImJnkuY3RybEtleSlyZXR1cm4hby5jdXJyZW50LmFsbG93UGluY2hab29tO3ZhciB4PVByKHkpLHc9bi5jdXJyZW50LGI9ImRlbHRhWCJpbiB5P3kuZGVsdGFYOndbMF0teFswXSxDPSJkZWx0YVkiaW4geT95LmRlbHRhWTp3WzFdLXhbMV0sUyxQPXkudGFyZ2V0LEU9TWF0aC5hYnMoYik+TWF0aC5hYnMoQyk/ImgiOiJ2IjtpZigidG91Y2hlcyJpbiB5JiZFPT09ImgiJiZQLnR5cGU9PT0icmFuZ2UiKXJldHVybiExO3ZhciBrPXdpbmRvdy5nZXRTZWxlY3Rpb24oKSxSPWsmJmsuYW5jaG9yTm9kZSxBPVI/Uj09PVB8fFIuY29udGFpbnMoUCk6ITE7aWYoQSlyZXR1cm4hMTt2YXIgRD14YyhFLFApO2lmKCFEKXJldHVybiEwO2lmKEQ/Uz1FOihTPUU9PT0idiI/ImgiOiJ2IixEPXhjKEUsUCkpLCFEKXJldHVybiExO2lmKCFzLmN1cnJlbnQmJiJjaGFuZ2VkVG91Y2hlcyJpbiB5JiYoYnx8QykmJihzLmN1cnJlbnQ9UyksIVMpcmV0dXJuITA7dmFyIE49cy5jdXJyZW50fHxTO3JldHVybiBNMChOLHYseSxOPT09ImgiP2I6Qyl9LFtdKSxkPW0udXNlQ2FsbGJhY2soZnVuY3Rpb24oeSl7dmFyIHY9eTtpZighKCFLbi5sZW5ndGh8fEtuW0tuLmxlbmd0aC0xXSE9PWkpKXt2YXIgeD0iZGVsdGFZImluIHY/YmModik6UHIodiksdz10LmN1cnJlbnQuZmlsdGVyKGZ1bmN0aW9uKFMpe3JldHVybiBTLm5hbWU9PT12LnR5cGUmJihTLnRhcmdldD09PXYudGFyZ2V0fHx2LnRhcmdldD09PVMuc2hhZG93UGFyZW50KSYmTzAoUy5kZWx0YSx4KX0pWzBdO2lmKHcmJncuc2hvdWxkKXt2LmNhbmNlbGFibGUmJnYucHJldmVudERlZmF1bHQoKTtyZXR1cm59aWYoIXcpe3ZhciBiPShvLmN1cnJlbnQuc2hhcmRzfHxbXSkubWFwKHdjKS5maWx0ZXIoQm9vbGVhbikuZmlsdGVyKGZ1bmN0aW9uKFMpe3JldHVybiBTLmNvbnRhaW5zKHYudGFyZ2V0KX0pLEM9Yi5sZW5ndGg+MD9sKHYsYlswXSk6IW8uY3VycmVudC5ub0lzb2xhdGlvbjtDJiZ2LmNhbmNlbGFibGUmJnYucHJldmVudERlZmF1bHQoKX19fSxbXSksYz1tLnVzZUNhbGxiYWNrKGZ1bmN0aW9uKHksdix4LHcpe3ZhciBiPXtuYW1lOnksZGVsdGE6dix0YXJnZXQ6eCxzaG91bGQ6dyxzaGFkb3dQYXJlbnQ6VjAoeCl9O3QuY3VycmVudC5wdXNoKGIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LmN1cnJlbnQ9dC5jdXJyZW50LmZpbHRlcihmdW5jdGlvbihDKXtyZXR1cm4gQyE9PWJ9KX0sMSl9LFtdKSx1PW0udXNlQ2FsbGJhY2soZnVuY3Rpb24oeSl7bi5jdXJyZW50PVByKHkpLHMuY3VycmVudD12b2lkIDB9LFtdKSxmPW0udXNlQ2FsbGJhY2soZnVuY3Rpb24oeSl7Yyh5LnR5cGUsYmMoeSkseS50YXJnZXQsbCh5LGUubG9ja1JlZi5jdXJyZW50KSl9LFtdKSxoPW0udXNlQ2FsbGJhY2soZnVuY3Rpb24oeSl7Yyh5LnR5cGUsUHIoeSkseS50YXJnZXQsbCh5LGUubG9ja1JlZi5jdXJyZW50KSl9LFtdKTttLnVzZUVmZmVjdChmdW5jdGlvbigpe3JldHVybiBLbi5wdXNoKGkpLGUuc2V0Q2FsbGJhY2tzKHtvblNjcm9sbENhcHR1cmU6ZixvbldoZWVsQ2FwdHVyZTpmLG9uVG91Y2hNb3ZlQ2FwdHVyZTpofSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGQscW4pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsZCxxbiksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdSxxbiksZnVuY3Rpb24oKXtLbj1Lbi5maWx0ZXIoZnVuY3Rpb24oeSl7cmV0dXJuIHkhPT1pfSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLGQscW4pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsZCxxbiksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdSxxbil9fSxbXSk7dmFyIHA9ZS5yZW1vdmVTY3JvbGxCYXIsZz1lLmluZXJ0O3JldHVybiBtLmNyZWF0ZUVsZW1lbnQobS5GcmFnbWVudCxudWxsLGc/bS5jcmVhdGVFbGVtZW50KGkse3N0eWxlczpJMChyKX0pOm51bGwscD9tLmNyZWF0ZUVsZW1lbnQoajAse25vUmVsYXRpdmU6ZS5ub1JlbGF0aXZlLGdhcE1vZGU6ZS5nYXBNb2RlfSk6bnVsbCl9ZnVuY3Rpb24gVjAoZSl7Zm9yKHZhciB0PW51bGw7ZSE9PW51bGw7KWUgaW5zdGFuY2VvZiBTaGFkb3dSb290JiYodD1lLmhvc3QsZT1lLmhvc3QpLGU9ZS5wYXJlbnROb2RlO3JldHVybiB0fWNvbnN0IF8wPWgwKHBoLEYwKTt2YXIgeGg9bS5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG0uY3JlYXRlRWxlbWVudChraSxzbih7fSxlLHtyZWY6dCxzaWRlQ2FyOl8wfSkpfSk7eGguY2xhc3NOYW1lcz1raS5jbGFzc05hbWVzO3ZhciBCMD1mdW5jdGlvbihlKXtpZih0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybiBudWxsO3ZhciB0PUFycmF5LmlzQXJyYXkoZSk/ZVswXTplO3JldHVybiB0Lm93bmVyRG9jdW1lbnQuYm9keX0sR249bmV3IFdlYWtNYXAsanI9bmV3IFdlYWtNYXAsRXI9e30sWmk9MCxiaD1mdW5jdGlvbihlKXtyZXR1cm4gZSYmKGUuaG9zdHx8YmgoZS5wYXJlbnROb2RlKSl9LFcwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKG4pe2lmKGUuY29udGFpbnMobikpcmV0dXJuIG47dmFyIHM9Ymgobik7cmV0dXJuIHMmJmUuY29udGFpbnMocyk/czooY29uc29sZS5lcnJvcigiYXJpYS1oaWRkZW4iLG4sImluIG5vdCBjb250YWluZWQgaW5zaWRlIixlLCIuIERvaW5nIG5vdGhpbmciKSxudWxsKX0pLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4hIW59KX0sejA9ZnVuY3Rpb24oZSx0LG4scyl7dmFyIHI9VzAodCxBcnJheS5pc0FycmF5KGUpP2U6W2VdKTtFcltuXXx8KEVyW25dPW5ldyBXZWFrTWFwKTt2YXIgaT1FcltuXSxvPVtdLGw9bmV3IFNldCxkPW5ldyBTZXQociksYz1mdW5jdGlvbihmKXshZnx8bC5oYXMoZil8fChsLmFkZChmKSxjKGYucGFyZW50Tm9kZSkpfTtyLmZvckVhY2goYyk7dmFyIHU9ZnVuY3Rpb24oZil7IWZ8fGQuaGFzKGYpfHxBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGYuY2hpbGRyZW4sZnVuY3Rpb24oaCl7aWYobC5oYXMoaCkpdShoKTtlbHNlIHRyeXt2YXIgcD1oLmdldEF0dHJpYnV0ZShzKSxnPXAhPT1udWxsJiZwIT09ImZhbHNlIix5PShHbi5nZXQoaCl8fDApKzEsdj0oaS5nZXQoaCl8fDApKzE7R24uc2V0KGgseSksaS5zZXQoaCx2KSxvLnB1c2goaCkseT09PTEmJmcmJmpyLnNldChoLCEwKSx2PT09MSYmaC5zZXRBdHRyaWJ1dGUobiwidHJ1ZSIpLGd8fGguc2V0QXR0cmlidXRlKHMsInRydWUiKX1jYXRjaCh4KXtjb25zb2xlLmVycm9yKCJhcmlhLWhpZGRlbjogY2Fubm90IG9wZXJhdGUgb24gIixoLHgpfX0pfTtyZXR1cm4gdSh0KSxsLmNsZWFyKCksWmkrKyxmdW5jdGlvbigpe28uZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgaD1Hbi5nZXQoZiktMSxwPWkuZ2V0KGYpLTE7R24uc2V0KGYsaCksaS5zZXQoZixwKSxofHwoanIuaGFzKGYpfHxmLnJlbW92ZUF0dHJpYnV0ZShzKSxqci5kZWxldGUoZikpLHB8fGYucmVtb3ZlQXR0cmlidXRlKG4pfSksWmktLSxaaXx8KEduPW5ldyBXZWFrTWFwLEduPW5ldyBXZWFrTWFwLGpyPW5ldyBXZWFrTWFwLEVyPXt9KX19LFUwPWZ1bmN0aW9uKGUsdCxuKXtuPT09dm9pZCAwJiYobj0iZGF0YS1hcmlhLWhpZGRlbiIpO3ZhciBzPUFycmF5LmZyb20oQXJyYXkuaXNBcnJheShlKT9lOltlXSkscj1CMChlKTtyZXR1cm4gcj8ocy5wdXNoLmFwcGx5KHMsQXJyYXkuZnJvbShyLnF1ZXJ5U2VsZWN0b3JBbGwoIlthcmlhLWxpdmVdLCBzY3JpcHQiKSkpLHowKHMscixuLCJhcmlhLWhpZGRlbiIpKTpmdW5jdGlvbigpe3JldHVybiBudWxsfX0sJDA9T2JqZWN0LmRlZmluZVByb3BlcnR5LGN0PShlLHQpPT4kMChlLCJuYW1lIix7dmFsdWU6dCxjb25maWd1cmFibGU6ITB9KSxHYT0iRGlhbG9nIixbd2gsYmpdPVduKEdhKSxbSDAsTXRdPXdoKEdhKSxxMD1jdChlPT57Y29uc3R7X19zY29wZURpYWxvZzp0LGNoaWxkcmVuOm4sb3BlbjpzLGRlZmF1bHRPcGVuOnIsb25PcGVuQ2hhbmdlOmksbW9kYWw6bz0hMH09ZSxsPW0udXNlUmVmKG51bGwpLGQ9bS51c2VSZWYobnVsbCksW2MsdV09a2Eoe3Byb3A6cyxkZWZhdWx0UHJvcDpyPz8hMSxvbkNoYW5nZTppLGNhbGxlcjpHYX0pLFtmLGhdPW0udXNlU3RhdGUoMCksW3AsZ109bS51c2VTdGF0ZSgwKTtyZXR1cm4gYS5qc3goSDAse3Njb3BlOnQsdHJpZ2dlclJlZjpsLGNvbnRlbnRSZWY6ZCxjb250ZW50SWQ6X3IoKSx0aXRsZUlkOl9yKCksZGVzY3JpcHRpb25JZDpfcigpLHRpdGxlUHJlc2VudDpmPjAsZGVzY3JpcHRpb25QcmVzZW50OnA+MCxzZXRUaXRsZUNvdW50Omgsc2V0RGVzY3JpcHRpb25Db3VudDpnLG9wZW46Yyxvbk9wZW5DaGFuZ2U6dSxvbk9wZW5Ub2dnbGU6bS51c2VDYWxsYmFjaygoKT0+dSh5PT4heSksW3VdKSxtb2RhbDpvLGNoaWxkcmVuOm59KX0sIkRpYWxvZyIpLENoPSJEaWFsb2dQb3J0YWwiLFtLMCxUaF09d2goQ2gse2ZvcmNlTW91bnQ6dm9pZCAwfSksRzA9Y3QoZT0+e2NvbnN0e19fc2NvcGVEaWFsb2c6dCxmb3JjZU1vdW50Om4sY2hpbGRyZW46cyxjb250YWluZXI6cn09ZSxpPU10KENoLHQpO3JldHVybiBhLmpzeChLMCx7c2NvcGU6dCxmb3JjZU1vdW50Om4sY2hpbGRyZW46bS5DaGlsZHJlbi5tYXAocyxvPT5hLmpzeChjcix7cHJlc2VudDpufHxpLm9wZW4sY2hpbGRyZW46YS5qc3goWXUse2FzQ2hpbGQ6ITAsY29udGFpbmVyOnIsY2hpbGRyZW46b30pfSkpfSl9LCJEaWFsb2dQb3J0YWwiKSx6bz0iRGlhbG9nT3ZlcmxheSIsU2g9bS5mb3J3YXJkUmVmKGN0KGZ1bmN0aW9uKHQsbil7Y29uc3Qgcz1UaCh6byx0Ll9fc2NvcGVEaWFsb2cpLHtmb3JjZU1vdW50OnI9cy5mb3JjZU1vdW50LC4uLml9PXQsbz1NdCh6byx0Ll9fc2NvcGVEaWFsb2cpO3JldHVybiBvLm1vZGFsP2EuanN4KGNyLHtwcmVzZW50OnJ8fG8ub3BlbixjaGlsZHJlbjphLmpzeChYMCx7Li4uaSxyZWY6bn0pfSk6bnVsbH0sIkRpYWxvZ092ZXJsYXkiKSksWTA9Vm4oIkRpYWxvZ092ZXJsYXkuUmVtb3ZlU2Nyb2xsIiksWDA9bS5mb3J3YXJkUmVmKGN0KGZ1bmN0aW9uKHQsbil7Y29uc3R7X19zY29wZURpYWxvZzpzLC4uLnJ9PXQsaT1NdCh6byxzKSxvPXF1KCksbD1PZShuLG8pO3JldHVybiBhLmpzeCh4aCx7YXM6WTAsYWxsb3dQaW5jaFpvb206ITAsc2hhcmRzOltpLmNvbnRlbnRSZWZdLGNoaWxkcmVuOmEuanN4KEllLmRpdix7ImRhdGEtc3RhdGUiOllhKGkub3BlbiksLi4ucixyZWY6bCxzdHlsZTp7cG9pbnRlckV2ZW50czoiYXV0byIsLi4uci5zdHlsZX19KX0pfSwiRGlhbG9nT3ZlcmxheUltcGwiKSksUXM9IkRpYWxvZ0NvbnRlbnQiLFBoPW0uZm9yd2FyZFJlZihjdChmdW5jdGlvbih0LG4pe2NvbnN0IHM9VGgoUXMsdC5fX3Njb3BlRGlhbG9nKSx7Zm9yY2VNb3VudDpyPXMuZm9yY2VNb3VudCwuLi5pfT10LG89TXQoUXMsdC5fX3Njb3BlRGlhbG9nKTtyZXR1cm4gYS5qc3goY3Ise3ByZXNlbnQ6cnx8by5vcGVuLGNoaWxkcmVuOm8ubW9kYWw/YS5qc3goUTAsey4uLmkscmVmOm59KTphLmpzeChKMCx7Li4uaSxyZWY6bn0pfSl9LCJEaWFsb2dDb250ZW50IikpLFEwPW0uZm9yd2FyZFJlZihjdChmdW5jdGlvbih0LG4pe2NvbnN0IHM9TXQoUXMsdC5fX3Njb3BlRGlhbG9nKSxyPW0udXNlUmVmKG51bGwpLGk9T2UobixzLmNvbnRlbnRSZWYscik7cmV0dXJuIG0udXNlRWZmZWN0KCgpPT57Y29uc3Qgbz1yLmN1cnJlbnQ7aWYobylyZXR1cm4gVTAobyl9LFtdKSxhLmpzeChqaCx7Li4udCxyZWY6aSx0cmFwRm9jdXM6cy5vcGVuLGRpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50czpzLm9wZW4sb25DbG9zZUF1dG9Gb2N1czpBZSh0Lm9uQ2xvc2VBdXRvRm9jdXMsbz0+e28ucHJldmVudERlZmF1bHQoKSxzLnRyaWdnZXJSZWYuY3VycmVudD8uZm9jdXMoKX0pLG9uUG9pbnRlckRvd25PdXRzaWRlOkFlKHQub25Qb2ludGVyRG93bk91dHNpZGUsbz0+e2NvbnN0IGw9by5kZXRhaWwub3JpZ2luYWxFdmVudCxkPWwuYnV0dG9uPT09MCYmbC5jdHJsS2V5PT09ITA7KGwuYnV0dG9uPT09Mnx8ZCkmJm8ucHJldmVudERlZmF1bHQoKX0pLG9uRm9jdXNPdXRzaWRlOkFlKHQub25Gb2N1c091dHNpZGUsbz0+by5wcmV2ZW50RGVmYXVsdCgpKX0pfSwiRGlhbG9nQ29udGVudE1vZGFsIikpLEowPW0uZm9yd2FyZFJlZihjdChmdW5jdGlvbih0LG4pe2NvbnN0IHM9TXQoUXMsdC5fX3Njb3BlRGlhbG9nKSxyPW0udXNlUmVmKCExKSxpPW0udXNlUmVmKCExKTtyZXR1cm4gYS5qc3goamgsey4uLnQscmVmOm4sdHJhcEZvY3VzOiExLGRpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50czohMSxvbkNsb3NlQXV0b0ZvY3VzOm89Pnt0Lm9uQ2xvc2VBdXRvRm9jdXM/LihvKSxvLmRlZmF1bHRQcmV2ZW50ZWR8fChyLmN1cnJlbnR8fHMudHJpZ2dlclJlZi5jdXJyZW50Py5mb2N1cygpLG8ucHJldmVudERlZmF1bHQoKSksci5jdXJyZW50PSExLGkuY3VycmVudD0hMX0sb25JbnRlcmFjdE91dHNpZGU6bz0+e3Qub25JbnRlcmFjdE91dHNpZGU/LihvKSxvLmRlZmF1bHRQcmV2ZW50ZWR8fChyLmN1cnJlbnQ9ITAsby5kZXRhaWwub3JpZ2luYWxFdmVudC50eXBlPT09InBvaW50ZXJkb3duIiYmKGkuY3VycmVudD0hMCkpO2NvbnN0IGw9by50YXJnZXQ7cy50cmlnZ2VyUmVmLmN1cnJlbnQ/LmNvbnRhaW5zKGwpJiZvLnByZXZlbnREZWZhdWx0KCksby5kZXRhaWwub3JpZ2luYWxFdmVudC50eXBlPT09ImZvY3VzaW4iJiZpLmN1cnJlbnQmJm8ucHJldmVudERlZmF1bHQoKX19KX0sIkRpYWxvZ0NvbnRlbnROb25Nb2RhbCIpKSxqaD1tLmZvcndhcmRSZWYoY3QoZnVuY3Rpb24odCxuKXtjb25zdHtfX3Njb3BlRGlhbG9nOnMsdHJhcEZvY3VzOnIsb25PcGVuQXV0b0ZvY3VzOmksb25DbG9zZUF1dG9Gb2N1czpvLC4uLmx9PXQsZD1NdChRcyxzKTtyZXR1cm4gS2EoKSxhLmpzeChhLkZyYWdtZW50LHtjaGlsZHJlbjphLmpzeChaYix7YXNDaGlsZDohMCxsb29wOiEwLHRyYXBwZWQ6cixvbk1vdW50QXV0b0ZvY3VzOmksb25Vbm1vdW50QXV0b0ZvY3VzOm8sY2hpbGRyZW46YS5qc3goRWEse3JvbGU6ImRpYWxvZyIsaWQ6ZC5jb250ZW50SWQsImFyaWEtZGVzY3JpYmVkYnkiOmQuZGVzY3JpcHRpb25QcmVzZW50P2QuZGVzY3JpcHRpb25JZDp2b2lkIDAsImFyaWEtbGFiZWxsZWRieSI6ZC50aXRsZVByZXNlbnQ/ZC50aXRsZUlkOnZvaWQgMCwiZGF0YS1zdGF0ZSI6WWEoZC5vcGVuKSwuLi5sLHJlZjpuLGRlZmVyUG9pbnRlckRvd25PdXRzaWRlOiEwLG9uRGlzbWlzczooKT0+ZC5vbk9wZW5DaGFuZ2UoITEpfSl9KX0pfSwiRGlhbG9nQ29udGVudEltcGwiKSksWjA9IkRpYWxvZ1RpdGxlIixFaD1tLmZvcndhcmRSZWYoY3QoZnVuY3Rpb24odCxuKXtjb25zdHtfX3Njb3BlRGlhbG9nOnMsLi4ucn09dCxpPU10KFowLHMpLHtzZXRUaXRsZUNvdW50Om99PWk7cmV0dXJuIFhlKCgpPT4obyhsPT5sKzEpLCgpPT5vKGw9PmwtMSkpLFtvXSksYS5qc3goSWUuaDIse2lkOmkudGl0bGVJZCwuLi5yLHJlZjpufSl9LCJEaWFsb2dUaXRsZSIpKSxldz0iRGlhbG9nRGVzY3JpcHRpb24iLEFoPW0uZm9yd2FyZFJlZihjdChmdW5jdGlvbih0LG4pe2NvbnN0e19fc2NvcGVEaWFsb2c6cywuLi5yfT10LGk9TXQoZXcscykse3NldERlc2NyaXB0aW9uQ291bnQ6b309aTtyZXR1cm4gWGUoKCk9PihvKGw9PmwrMSksKCk9Pm8obD0+bC0xKSksW29dKSxhLmpzeChJZS5wLHtpZDppLmRlc2NyaXB0aW9uSWQsLi4ucixyZWY6bn0pfSwiRGlhbG9nRGVzY3JpcHRpb24iKSksdHc9IkRpYWxvZ0Nsb3NlIixudz1tLmZvcndhcmRSZWYoY3QoZnVuY3Rpb24odCxuKXtjb25zdHtfX3Njb3BlRGlhbG9nOnMsLi4ucn09dCxpPU10KHR3LHMpO3JldHVybiBhLmpzeChJZS5idXR0b24se3R5cGU6ImJ1dHRvbiIsLi4ucixyZWY6bixvbkNsaWNrOkFlKHQub25DbGljaywoKT0+aS5vbk9wZW5DaGFuZ2UoITEpKX0pfSwiRGlhbG9nQ2xvc2UiKSk7ZnVuY3Rpb24gWWEoZSl7cmV0dXJuIGU/Im9wZW4iOiJjbG9zZWQifWN0KFlhLCJnZXRTdGF0ZSIpO2NvbnN0IGtoPXEwLHN3PUcwLE5oPW0uZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLC4uLnR9LG4pPT5hLmpzeChTaCx7cmVmOm4sY2xhc3NOYW1lOmJ0KCJmaXhlZCBpbnNldC0wIHotNTAgYmctYmxhY2svODAgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAiLGUpLC4uLnR9KSk7TmguZGlzcGxheU5hbWU9U2guZGlzcGxheU5hbWU7Y29uc3QgWGE9bS5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOmUsY2hpbGRyZW46dCwuLi5ufSxzKT0+YS5qc3hzKHN3LHtjaGlsZHJlbjpbYS5qc3goTmgse30pLGEuanN4cyhQaCx7cmVmOnMsY2xhc3NOYW1lOmJ0KCJmaXhlZCBsZWZ0LVs1MCVdIHRvcC1bNTAlXSB6LTUwIGdyaWQgdy1mdWxsIG1heC13LWxnIHRyYW5zbGF0ZS14LVstNTAlXSB0cmFuc2xhdGUteS1bLTUwJV0gZ2FwLTQgYm9yZGVyIGJnLWJhY2tncm91bmQgcC02IHNoYWRvdy1sZyBkdXJhdGlvbi0yMDAgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGRhdGEtW3N0YXRlPWNsb3NlZF06c2xpZGUtb3V0LXRvLWxlZnQtMS8yIGRhdGEtW3N0YXRlPWNsb3NlZF06c2xpZGUtb3V0LXRvLXRvcC1bNDglXSBkYXRhLVtzdGF0ZT1vcGVuXTpzbGlkZS1pbi1mcm9tLWxlZnQtMS8yIGRhdGEtW3N0YXRlPW9wZW5dOnNsaWRlLWluLWZyb20tdG9wLVs0OCVdIHNtOnJvdW5kZWQtbGciLGUpLC4uLm4sY2hpbGRyZW46W3QsYS5qc3hzKG53LHtjbGFzc05hbWU6ImFic29sdXRlIHJpZ2h0LTQgdG9wLTQgcm91bmRlZC1zbSBvcGFjaXR5LTcwIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgdHJhbnNpdGlvbi1vcGFjaXR5IGRhdGEtW3N0YXRlPW9wZW5dOmJnLWFjY2VudCBkYXRhLVtzdGF0ZT1vcGVuXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6b3BhY2l0eS0xMDAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLXJpbmcgZm9jdXM6cmluZy1vZmZzZXQtMiBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpbYS5qc3godGkse2NsYXNzTmFtZToiaC00IHctNCJ9KSxhLmpzeCgic3BhbiIse2NsYXNzTmFtZToic3Itb25seSIsY2hpbGRyZW46IkNsb3NlIn0pXX0pXX0pXX0pKTtYYS5kaXNwbGF5TmFtZT1QaC5kaXNwbGF5TmFtZTtjb25zdCBhaT1tLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6ZSwuLi50fSxuKT0+YS5qc3goRWgse3JlZjpuLGNsYXNzTmFtZTpidCgidGV4dC1sZyBmb250LXNlbWlib2xkIGxlYWRpbmctbm9uZSB0cmFja2luZy10aWdodCIsZSksLi4udH0pKTthaS5kaXNwbGF5TmFtZT1FaC5kaXNwbGF5TmFtZTtjb25zdCBVbz1tLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6ZSwuLi50fSxuKT0+YS5qc3goQWgse3JlZjpuLGNsYXNzTmFtZTpidCgidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmQiLGUpLC4uLnR9KSk7VW8uZGlzcGxheU5hbWU9QWguZGlzcGxheU5hbWU7Y29uc3Qgcnc9ImRhdGE6aW1hZ2Uvd2VicDtiYXNlNjQsVWtsR1J2b0lBQUJYUlVKUVZsQTRXQW9BQUFBUUFBQUFmd0FBZndBQVFVeFFTRXNEQUFBQm9BVEp0bW5iV29mUDM3WnQyelpidG0zYnRtM2J0bTNiTmc1R05kWStlODE5OWp5Lyt5SmlBc0pvLzVlM09zYlVDNjJ6N1Q2SEhuSHducHNzTS8yWXRRRXpmTmFOem56by9SLy83Z0NvL2R0SGoxNjg4M3dqQjhla205NzgyYjhrZDc2NWEvdXBLd05oaWoyZit4dmoxdXVIemxCeGI5eHRubTFSWU9lTmZTZjJyYnJNWFg5UjhILzNMVnQxYkl5OXY2QVBQOTk3VExjbVB2ZHYrdktmaXlaM2F1b2JPdlJwOTg2WlhKcnVEdEcvRDh6czBHUTNpMzYrZjNwM3hycTRRMy9mUEpFempZUCt3VktaUnAxVGh2cXl6dmVrS2lhV1pNS3ZtN2d5MVRQa2w4Z3Z5WUxYWjNPa2RuUW53VkNTZ2M0ZTRzZDhIMUc0cERTK1djNk54dGtxRGlRbGNmVndMeGI2Z21SWm1INjNoQlBWVXpDV0N1T011ZzlUdlY2SUFDbUhsTy85R1gzWTRDOHpZc1U1UUxsYTI3blF1SlJpUUhHT3hPdUhlVEQ1RzFZaVZaa3BIOHpnd2JLL0pLZ0FRS1Qrc2FZSE8zZU1aSlBlM2RlQjZ0bWtLRU9pUHkrb2xXL29yU24wMlozRHl6Zlc0MmtDSkdMRmVXVHczUGpsbS9DVkpQSW9PeElnQUNXOFBYbjVKbjNMUUVDazNpQWhBWWpFRDZjcDMyVHZwSkdoWEpLUUFCUkpVcTlweXpmeDZ4WUNjaUZKeEJLZ3pLeTNweWpmMkU4WmtDSElJaUtXQU9WN2ZvTHlEYi9MUkVBQ3ZkUTc2NEZSNWF0ZmFVRkdUMUFQQ1NWZDJ5eGZPTmFNWHBLSUpaUTc0OFRnNE1iL21paFBEQ2c5YW0zbHdUeGZXWkNDQ2ZIM0Mzc3c5dU0yQWlTSUtPRFpDVHlvSEdkQ1ZqWWd3NHd6cWg2RTVYK3hFWkFGeU9xMzFZT0w0ejVoUWdJR3hFOVA2RVBZdjJzamdCNHkwc0hCeWRrL05pRURDU0ZENGsvbThxSitxcDBpWkhaV3c0c3d6eWNtQ0VEWUVIODBYM0N6ZW1qSEJGQWtxL1loTlQvQ0pBL1pDQ1JrU1h6ZkpNSFRaYi9vdjArV0NxNVdkdjdMUklBc0FmN2NxZXBMR0hsVzJ3Q0JMQUZhNTR3UnZKM2dpcTRCTmdDNmZwTGc3K1EzeVVLR0FKMmJwd3NlVDNGNUswM3B4UDlkUG1Yd2Vid1RmazlDSWgveGJ5ZE5HTHdldHNWN1Nka1o5UHhnbXhIQjhYbXYvTjBrOTk4M0xWUUpyby9jK05sV0VmODh0Zlc0d2YzSmRuNzhUNnZmSDk5eHlqQVFKMWovMG5mL1N0THZyNTIzN3NSaFlEYW5XL2Y0dTkvNTZaKzJvUHZmSDErK2ZOTlJhMDdkREFOMjVGU0xycjNGN3Z2dnY4c21LODg1eWJBdzJ2Ly80d0VBVmxBNElJZ0ZBQUN3R2dDZEFTcUFBSUFBUG0wMGwwZ2tJcUloSmhhcFlJQU5pV0lBbGE5Tnk2NTVsbGNmd240YjM3VTJIYVovQSszTHRIZUtkMGpmTVArd25xMmVsMzBBUDZCL3F1c3o5QUR5MmYyQStEZjlxdjJsOXBELy8wb0RJVTN3WlU3QURna3ZBK01QWnhmby8yQ3Y1Zi9jT3N6NkV2N0FMdTd1N3U3dTd1N3V6eHl0SjdRbGRGc0g5cXN1bTRuWXZ5RUpXbzJqejZpZjZzdmZJOFNxbW1qTFlPeTY2VTdYYmZrSVRiSU5NaTdCbVNVcWVYOG1YSUpFR1U2SHFkMEF0QkV5YTV4dnU2VHdOVWhFTGZaUUFUNGlqeTh3eml3cytzb1E4U2E3dTd1N3NnQUEvdjIwNkFDcC92SXpmSzVwczFwVnRlUCtDRFdMVEZwVnpvbHN3ajNkTnV4Ymh1MDBJOHljRlNicVQ0Sk1GQm9BL3liL2NRNTVYRjVmQS8vL3dhUVJ2ZG1zaWp2MVYremh2Sy9EaUdTNHJ2MWVTalRJN29CQmJUc1BOdVIxeXp6WWwwWlYyYTBvUTE5R2tsUFFTTVFhUHhySjAzemNkT0tqMkxhSHE5OFMrMCsyQmZ4LzZmT2JPdlB1VVBaUDlCWVFCYllpakhDcXFTQWlWZHJYZVN0c21pVHIzZm5jWUpOZFp1QkZwYTlOSjFFdWxrc1JMRWF4VFo0MGorb0R6ZnAvL2dhaWVYRzF6UUJUSjZza1JDMnZpVzM3ZDRlaGZtZTd4cjMzT2FzdzIrU0s5bnBnRDVBQ0JsNHJKM1NCb25LTUplMFJjTGp1dFRLMjN6dlFKWFhzYTRGYmJ4R1pYUGUyRmxia1YrRUxaRHYxV2tRZy9EMGxTNzJsUENpMmE4U3EvbVQ2b05Sd2lMTUxBSHQ5MGRoZm1NYklRMWg2cEsySFd4ZWRqcUpaeG9NMENGY0JWUzNqd2VRM29wKzRCMHBGUXZ6REpiUVhjeXVOeE5hRjBIOEV5a2ZGRi8yd1I0TzRFeno3SkE3QUZKMW03NlNxWmhkRmZ2b1hTNEpWSG5EYUMzcmoxZkRHWWZQdjdLWlhYQWhDMy9YQkxRNzVEWkgxTFlGU2V6bGozN1Z4NmVuZi8xcGR6bFlJREd5MkR4dGFBVFhDTWs1Q2padWdhWmtzemp4elpycHgydGl2S3IvejdBQzU0UVI2dE1UTXcxZ0RjUUpWYTFOdTVYdHcvM3NGMUpVcjAxZDlxb3RKeHByWDFzSlZLdjJTWGkxSWV4MmFqUWpzSjlKRmxrVDg5N1NZckcybkVLNHBIa0VuUnhvbjFoQzhVQ0t4a1gwV1hYenFySzVTTURvZjRmMVJEV1BudVQ5ZWJzWDl2eWJKMExZOGJRSEJCeGNCaXRDczF0SWhUVjhYTlN4S20vUmgzcmxwdkJSem14S0t0bUQrVFNBMzBOT1Z4Nm9EdzZUK2JWYS9MODduNUx2aTQyYUdjN2F0RFFVZnZzaGpEOE8wbXFtMXVzNkZoTS8ycGMvLy9rRk5Wam1hd20wNU14MHlEbzROclFLWW9XM211WkJXYWdQR1VJMGtHSm5qdzNYanByV0VsMXI0TUJodzJCdGVrUktpUm1yRXY3Y09YU0ZodVpPekkzMks1dTUyRGJ4a2RHZ0JWa2tTcFVYRm85ZVVwLzVWR3VPZUZXcG8rYjZzelBlMTNvZnpMQzFJbGpuN2kzOWpJTG40SFNVOXcvTG1kOGM3TjRaRXVCaVFrNE9JQlhOVjJkMEZFZ0ZLMzdudXVNWVFkNnZSdC9FN3cwTkowZUhna3hITnlzcmNBYk1NZlhSMUVhZTY1c2VVN2JsUzM2bjR4dUdJRUdqWnJIT09hRGVEZDAxWWRSbllORUZSa0NoRzA5SDc4YUN6QThMRW5vOUhrUnZhQjRCRC94UTJsNXZTRGltblREcWx0ZXVQY1BISGtldDQ5OXg2VXhxT1N6UkswRnQ0a00vc21tRGJMcXZ4M3hOa0gyNXhLLzdMdDdhMVphM29oL2xZNHkyNnVac1YvTjBNR1BPcC8vOU8zcHl0clN4ZFQxL0cvYVB1Q21yN3hOUkJVdTNBSUR1RnhYTkREOUwrWDJDazhaYXdneFRMNG5Ta3R3L1pNOGR0dnpuM2NYeGplWXRqc2VINFE3aWkzQTZmREI3VUEzeDBCOWZxeEhqazFSRHBWREx5MDFOd0MvMWhxRGM5VkthZUxHRVQ3UncvVXQ4QkpGT0kxcWJmZWEyb1FJcjF0dS9INlBaZEd3UHFDbXZSNW5RWDl6R05qS3MrUFlDRjUyMytMdUdaNGh1RnRqSU5kcGhKN0c1b3BJdGFjcVZzak00UjY1bWxkU2M5cmRjMmVSbUlmZURIWFlDb3BCYkl1QnFzWE1XK0NyYSsvZGJkbkk2YURUVzRxOHc4My9OQzNKSjN1ZXFVY3RFRGsvYWpBdGZacFYwM1VGWklqa3BJZi8vUG1BQUFBQUFBQUFBPSIsaXc9ImRhdGE6aW1hZ2Uvd2VicDtiYXNlNjQsVWtsR1J2UUVBQUJYUlVKUVZsQTRXQW9BQUFBUUFBQUFmd0FBZndBQVFVeFFTUFlCQUFBQmtBVGJ0bWs3K3pPMmJkdTIzYkp0MjNiU3NtM2J0bTNiTnU1N2Q0ZjNvUGJxQlJFeEFmUy9sNG56Z1lzdzgwUXliQTAvOFloQVpNbE9NVC9LRHl4d0JEUHpzb2k0aWovOTZWTmpXREUyOFM4dnBrYlYzdmNybmhDQ0tmMFYvdTNyQ3BCQ3A3TEhYYkVRVlhuanhkOERVUHdEN1BsT05qaUJnMTF2UEQ4Y21pSlBXUEZqSFRBUlY3THltUlJZR241UzQzSEJTTkpjWUkydktnSUpuY1JhOThYQlVmV2RIcmNYakFSSFdQUGRYQ0FDQnJQMkJlRXdGSCtpNzBOdENERzNzY0dUU1JGMDhabmdNVUh5WmJuQlJsK1VGeS9zTERhOEo3WjBOZDZaOHZjVUx2bEpObjQvdjJqQlk5bkNsWkVrSy9YU2hzOU5CSXU2bnEyOG1FNnV6bzRkUERlaVZPbXVzYVVmNjBtVlpyZHJDVzlQS1JSbFB1amE0VDRwTDFUMGFoY2Mxd3ErbVUybzFIdGRsNjEwQm9VSUZkVGxQZHU1TWlaSkhXR21IWWRUazl6Smo5aHdxd2hKWHVxaHVkZDFTUGFPWDB6NWh3VUxGM0dXcWZXeFNmb2srODFjeVU3eUY3NWo0bFYxUXRqd25UNm5UeENFa05HdXRnVlJDR1BNMWJxT3BDU1U2Yy9vZVZDQ2NGWjhwdU5UR3dJYTBQbXpodWtSa0ZENHFXbzdFeEhXeFB0VmJ1Y250RVh1ZW50WG4vRFdlK1BGTnpRRVVQQUF4OFBpYUlRNDB2emZIVXhGbUZNZC85V3Rnb1M2MUlPZlh0Y2gzQzAvTW4vdEd3d3M3SGptV1pFSmVad2xXNU1TOXZoSjZiLy8vL2dJVmxBNElOZ0NBQUN3RkFDZEFTcUFBSUFBUG0wMGwwaWtJcUloSkpPWmNJQU5pV2R1NFhQdy9wZ2FOdTZ5SjMxcVRudHQzdCtGOHgzNUwybDg1K3R0ZU0zbG9ZS1o5NHFkUWY5VnZTTzlhdm9VZnRHTzc0T1J5RC92dG13QmM2MW51Y01kQ1B4U1JXMGZFaE81Nlkwand1djRSSFRpeFFRblNVVWROdlRSTkVYaUI0MC9EK0M4cGRjZWhDTFg5VUhOR2FSZi8xN3I3eXEvWDY5SWlWWmhlQ2k4QVEvZnordDgvSVhDNTVjb0dEa2NoQXlFNWdBQS92K2hEZ1FYaFR1SklSMUNWaUVUSE9ncUlNajdVeFZwSE4yWHRFWk1mNzFnSFRuRWoxQnl6YXFRNytkWDNucStTOHVEQlFvcVVJcDRHMGNaUnRiUTBPUm8wYy9EQ1E3QlMwT2xTbXQva0hGZ3Bkc1JpbFhoRDFFb21VakRod3pjbVZza0x2aUliR0NhUG0wQkVqaFdnVThWSHdMNGNVV2k3bjhwajY3ZGprTk1LRnZIS3VpelNyN0ptMGhiV3o2cG5EVnNPSjVsQXJ3RmgzUndXQXdXRDdSc0xHR1VSd25HYmFNOENrTlZpUGRISHN1ekxQVXQydjNWQmFJdXM5Z0pxUXJaRm5PUU9DY1ZZQXRqWlZvbnp1a3NyVndGd0JTQ1IxcU1RMElrYWJRcUwvYmJUTytlSW50YUF6aWtvRDloT0VEMVNmWGEzS1EwOXJhVitpS3MyN3U3ZjdMVnNobGorYUR4SUVoYm9zUCsyT2VHNlpqWVhKUHBZUlhKYlBnVUJNemRrSGhRMzZBbWZGam13cmlCNmdKeGpSOWh0SUZTRWJGR1JCY3VrWEN0QnZBUk9OMEZKVjFvVHNJZXQwMkZEL2FPRGNEaUV2WHlyUnNnbVJGK3VhN3NqckRVRU1xaEF0S2lSalh1RWc2UkpVaDlkaWhPSFhQVDQraU10RXlQVHVxMGJIMGs5My8zNkN0VVF1UnhjTkI2KzRxT216ejV0TVhkdVZNUHk2Ny9QclUvVnBEVEthbCtQMk1mY2ZRaDAxRlBqd1AxL0RzS2s2aUdhNHJISHNQUHBlcGxxMlF3MjYrc3BMRmpBRUVzMDc5ZnREQnhFWDYwL1VxVEhVWTlQVWxrQnYvSXgrZnV0MU1Sb1BhaUpHcS9IY28rZDdReGJFTDNVR2M3MzBMUFpPc3hmNlFHdzE3WEorU09xVUE4YUI0R1kzcU0wbnF0UWlwREhUZXprY1JTTUM2NkF5QUFBQT09Iixvdz0iZGF0YTppbWFnZS93ZWJwO2Jhc2U2NCxVa2xHUm9BSkFBQlhSVUpRVmxBNElIUUpBQUF3TGdDZEFTcUFBSUFBUG1Vc2tVV2tJcUdZQ3djY1FBWkV0Z0JrYVExL1p1c0V5LzJuK1kvdDMvT3YyQStXT3BmMDc4TWYyWDlyT2ZvcWp5dmZHZjFML3MvM0w4amZxMTZCdno3N0FINlcvNS8reC9rYjNBUDZkNkFQNVAvaC8zUzkxRC9EZjdmL00rNmYvVGVvQi9jZjlUMWxmN1IreFIrM1Bwei90ejhJLzdpZnVmOENQNjAvLy9PY2VwSjV6MkF6UkUwTnZhaEQyUzUvYnNUTzdIUUZSRjRzamVzcDRTdVQ3QmpYejBkdnBvNmRqOHoydEtxNkwyMTFXTGpVSVhwQVIvalBFMlhnRUpBMFZwVmRFWGRvenM5bitPWjFzeGJLbjZVWm50R2NkUlYvb1VmMTZPVVhGYWJ3eGg3L05Xakx1SFRBSTEvbnFlQzYyb0swbFVkSW8vMFBzc0hyOC9mNk1wR2VDYWExaHlRU3Njc0ZmVjJudzIwdWhMOU9UcmVJa1RtVzZyZWErdXJraHpPcCs3Y2Y4bGhyMjNGbThNZ0ZEczlGdEJydnByR25vTzNuS0EvV0xkOXQ4a1lvR2tTdklCSDlqb3dlZmZ5VnUrSHU5UGJLb1Z2Q3FMRTlWSHI4eU9NVForME5zbE1GLzV1WituMW9FZ0FBL3YwNTBBbmpDOSs0eWtQeGZhd20xbWJUUU0zTFVJVUxuaExPaU0wQmJzMHpZYVRMZXJnbkpxWVh5d05mM29GVVh4Qklhb3RlSy9kRDZKaVBueU5xZjRUWlpSTHovUXFVbVJFbWJ0V2VGSVNxTXdCNk5vY0wwNkgwWGRpRDFpOTlQQXVnS0k5akFPZlQ0d0xrWmMydUdoR25zTnFEUG9hOEczUVIwZzlDMWhldGltL0xVK2x6WGRMd0pNSENXZ1N2dFBpN0FLanIxZlRiSmJHUjUvakRrbkRVVVlEbDdpdFgwMmt2UWo3aXFpWGhsNE5VaXRFZHRCQ1VjTHJib1dJM0ZkdTZlK2FXcVVXTmU0MDc5VDZ2S3lqQ2ZEdGhkWG9GNlFGcjBNeEdMajh1Q0hpOXlkQkI5RmZNYnNUV1hzTUg0bWhLbG9YMzFXNUlZajYyRmEvMk5TNEt2aytScEM2YjN3WEpydkY5QUU2WndyVzU1Wk8xUUdqZzhMSmt4ZzdRRHZ1WkJxVXkzaHNuMjNKeGQzZmZSZzZ2WUg0NnJzU3NsdnIvczRqcHNBOVJvcGxTenJwajRrY045N2pXNE1udkpvUFJuSGswanlsWE5UNWZtZ09UWW9BOUYwTXJkamNKY3JiNHRyV3puY3Y2Nk1BajZQWTBqMkZlZGcxenBHSXNPazU3MDBZRnFGSGswTlc1WHhteVhlSkR0bjlKTXROeGU2dG5vMHA2VTdMQjcvYUJYMUorekNVYWtvTHZLS0dwQXc2aEtuNkltaFJyV3dISGJFdnhSTTFLTzBDNTFNTDhyVU5NMW5tQUl0ZmFUWkpxd2tld1FMZjE3b3RFL2U5MTRZNXJ2V2hCVHBVWkZpOXFFR2x1dkwwbmx0Zmp0SGpLRFM3aGczaDdGYUwxSUswNUhFNzZOb2xIdGtCV3BJd3JObDM3Z0JzRW9sZXpCNzhyb044bjg4NHE3bVlmbEFWTXVDQm1YVTBEb0t5Zm1mbUJGdE5nZi8wNHliOGJ5Y0lzekozT1FER1habFMvbnlONy9QcHZ2YmVvdGErbm1ldmxueFplYlF2OFcrY1ZrK1Z2RkkyL3dNQ0NvNndqb0NPb2phZDAwaURMUGFRdGR4ZEEzT3FGMnBNWFQ2OCswZXBId2h1d2RTaVhsMDcvdUt3V3hDb0lzeXNrazY0cGFSbE1ja1Zra1g4QUlaOFlTRG5zajJWSGhjWWFZVSsxSW5la2U5QzJZdm9pdUQrbUkzZVU1VUViOERVQnNObmFINTREaEwzTlJDbWFJV3RSZ2kzOW9WRTJjdldJaldERDZWM3NHbWVlTU1LRHk5dW8rQTNyblptSmZ2c3BBRU1vRkY1OU5ta2ZuT2x0cS95c0pEbnhEbTRkajEwcjJISHlMOUZEeGcweTJMMFhyRStiYzJWRkIxbHRGOS8vNnZ1c2Nla3ArSXV2emdtL0pRU3BFL3cySWhBUStrTXZWWVArQWlGaUNlcTlyU3hpRDRzMjhzK0pQUnJpUis4Qk1VR1FOeDk4MUlhVEFYUVF2ak9ZeS90c2VCRTluNEdRa1dmVWRrT2ZCNjVoa0RpaFZhTGduczlLYTBZZGZvSDFKclVxVG1hTUhBcXkzaUY0Yk5RNndndVk4a3Q1c3RrdFZHdmVqQlE2bmJmRU1KNlJ4eXMxWThDTm9EWHMrTW80eWNDQk5vQ0VXQ1E2UXhUTjlBUWFaeExvaTR2dzN4VDNxMnFXZVNHMWdxQjNWbmttUS9ENzhOdW9zN2piOS9sOElHZklVcFh4WmJFcDFWbWJkZXNYSkNSVCtFRVdVN2hxbEpVTGlSWkJpR0JJZ3Y0Z0RPbGhTdDJqUk03TE80dElZQlpzYThVU3N1cUtCc3FOR3pDRUk0WElnYzVtNnZxU0hOU0RpTzNEdHdIdjRVWVNMQmVMUVluajdTME5LYzhUR1lXR0g1cVMvUEl2b1BFcDN6TTIyK2EvNnk1cStTajluNGcrZjBuMVBkcWMxWEpjR0V4emNIWmxiL3hmU3hTMGVMMy9zVzhYWjcyZVNWeWhZR2RMdkd0cEJRNFdjZmpCbTgzY09sZlprTXdkaEltcjhvZTduVWZBb2xZc0hhZGxLcGN4djR2R2p3a29XQnZDdGRoZXg2cWNwMDRWZ2h6UWJlTGM4aFBnUTdWQWpKckNEZG44U0lBSW53Y1lmSGpmWDNWY2dmSWhQNDJPZXBjVGRLcTg4OVo4cUpVYVNjN3NrK2lLemV0UUZrZiszSHo0bkNsaCt2Z05teUN6M0pNWU1idWEranduWW9DK3duaWFwNTY5aHo4cHl3ZExkcDNYKzF1emh1R1kxZnBic1pDdkpkRWhrZnZIaW9ob3JiNERQNGZLVzFkdW1NS2xDRzBsb1ZEYVJSRzB2VVk1ZVN0R3pLSnN6dVJoaE1DWnNWWnhoZ0NtNUQvTldQdGNQK0doK24zdXlScmVnWnBWd1lXamJoTzNqZms0V0hSRDdCRWpKZE40K0lQbTdsNDJ5bFBMN0YzRy9HZWh1QUtqa2VoT1ppUWw3T0tDd0JuRnEydU5LM0xiL0dramg4YjlEdUNCSFpNTE5GdUg5QWpIMmtIUVlhNUhCcStCRUswMEF6ZUd4R2FnRXdVNGVKSUJQR0h6QnJNSWppWWk1ai94WUtiNWNhY3d2eTU5V1pBMFhBUGl5WmphOUJHZHBWMnFuSVV2czVOT3p4ZVlXMGZEYVFrL3VkMlpkSCtzRFlteGlKSjF6M0lTTFF1N3FONkFCSElIb2pOV1c2Yi9xUnFSemNETGxYaUE0SmxsamFnYXY1clVJdVAzeHM5Qi9qdXQ0djBEaE14WTFqbk14S0R4MjZXQ1hwV1A4RStTdE9wbDZ0eWF0VkdBVGpWYmlQTy90a3k2dzBEcThzbnhZNytMTlV6UkRnN1J3aURwQ2VxMGdtbE5iYjB2dG1zRHRZcVI4SktaSElubThTVzM1L2NIdjdXdWE3dHVORjJFdVhXZzdValJobm5DdDBBOXEyZ2VoNTNlVm1iR1ZoY05TTVJIbVdkc3l4YkdkS2MrNzZzcS8rNE5mRzRwM2ZuR0xpRXluRExMZ1YrQ2ZLYWg1YnF0QjlWcFlNV29pZHQ1SHp0bkxQaTJPNmtwTmpMdmxueHpheEJHUWZURmgvK09RSTRqdzdSWWZ0ZGpUQWJISFlnWW5qV08yVWp6b0RSTnkzVytYdDNYYk5kQy95ZnVJMERVUExFSlV6VVltajdScGNVd0pGdHd0VXlqV3lpbWNPNTFramlCSDE1MzZGWGdoNVpIdnFuR2daZGRnVC9lNWFkSmhGWVdLUktnSXlyYUFBeVJ0VGFkL280K3FMWGpsV3YwM2h3VXhoeS9LSWp6R2poOHVVUE9hUXVuT3BnUU1SMFVUejRqZi9SRUM4Qm02SFlEWFNWb0hqdWR1V3BjZk5JU00vZlpzN3RFZVQ0MUgrQUw2MUdQQTAxczZkcVdXM3d1Tlp4SHN0QkV3OTh0Vmp6c25MT24vK0ZhQVZQTUlMRldLdTExOW9RWUgvdExnZ29YZllXNVhxOFh4Sm9tTlROOVArSFo2aWlPN0oxSTRMNVp2Nkp3Y0p3c01nQUFBQT09Iixhdz0iL2Fzc2V0cy9uZXR3b3JrLXBvbHlnb24tQ0NlenpVUUgucG5nIixsdz0iL2Fzc2V0cy9hdmFsYW5jaGUtbG9nby1DcDdSS2tDXy5wbmciLGN3PSIvYXNzZXRzL25ldHdvcmstYXJiaXRydW0tQnhNX3VXM0MucG5nIixkdz0iL2Fzc2V0cy9uZXR3b3JrLWJhc2UtRFc0M2FTRGUucG5nIixRYT1tLmNyZWF0ZUNvbnRleHQoe30pO2Z1bmN0aW9uIEphKGUpe2NvbnN0IHQ9bS51c2VSZWYobnVsbCk7cmV0dXJuIHQuY3VycmVudD09PW51bGwmJih0LmN1cnJlbnQ9ZSgpKSx0LmN1cnJlbnR9Y29uc3QgdXc9dHlwZW9mIHdpbmRvdzwidSIsWmE9dXc/bS51c2VMYXlvdXRFZmZlY3Q6bS51c2VFZmZlY3QsTmk9bS5jcmVhdGVDb250ZXh0KG51bGwpO2Z1bmN0aW9uIGVsKGUsdCl7ZS5pbmRleE9mKHQpPT09LTEmJmUucHVzaCh0KX1mdW5jdGlvbiBsaShlLHQpe2NvbnN0IG49ZS5pbmRleE9mKHQpO24+LTEmJmUuc3BsaWNlKG4sMSl9Y29uc3QgRHQ9KGUsdCxuKT0+bj50P3Q6bjxlP2U6bjtsZXQgdGw9KCk9Pnt9O2NvbnN0IG1uPXt9LFJoPWU9Pi9eLT8oPzpcZCsoPzpcLlxkKyk/fFwuXGQrKSQvdS50ZXN0KGUpLERoPWU9PnR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGwsTWg9ZT0+L14wW14uXHNdKyQvdS50ZXN0KGUpO2Z1bmN0aW9uIE9oKGUpe2xldCB0O3JldHVybigpPT4odD09PXZvaWQgMCYmKHQ9ZSgpKSx0KX1jb25zdCBsdD1lPT5lLHVyPSguLi5lKT0+ZS5yZWR1Y2UoKHQsbik9PnM9Pm4odChzKSkpLEpzPShlLHQsbik9Pntjb25zdCBzPXQtZTtyZXR1cm4gcz8obi1lKS9zOjF9O2NsYXNzIG5se2NvbnN0cnVjdG9yKCl7dGhpcy5zdWJzY3JpcHRpb25zPVtdfWFkZCh0KXtyZXR1cm4gZWwodGhpcy5zdWJzY3JpcHRpb25zLHQpLCgpPT5saSh0aGlzLnN1YnNjcmlwdGlvbnMsdCl9bm90aWZ5KHQsbixzKXtjb25zdCByPXRoaXMuc3Vic2NyaXB0aW9ucy5sZW5ndGg7aWYocilpZihyPT09MSl0aGlzLnN1YnNjcmlwdGlvbnNbMF0odCxuLHMpO2Vsc2UgZm9yKGxldCBpPTA7aTxyO2krKyl7Y29uc3Qgbz10aGlzLnN1YnNjcmlwdGlvbnNbaV07byYmbyh0LG4scyl9fWdldFNpemUoKXtyZXR1cm4gdGhpcy5zdWJzY3JpcHRpb25zLmxlbmd0aH1jbGVhcigpe3RoaXMuc3Vic2NyaXB0aW9ucy5sZW5ndGg9MH19Y29uc3QgdHQ9ZT0+ZSoxZTMsb3Q9ZT0+ZS8xZTMsSWg9KGUsdCk9PnQ/ZSooMWUzL3QpOjAsTGg9KGUsdCxuKT0+KCgoMS0zKm4rMyp0KSplKygzKm4tNip0KSkqZSszKnQpKmUsZnc9MWUtNyxodz0xMjtmdW5jdGlvbiBwdyhlLHQsbixzLHIpe2xldCBpLG8sbD0wO2RvIG89dCsobi10KS8yLGk9TGgobyxzLHIpLWUsaT4wP249bzp0PW87d2hpbGUoTWF0aC5hYnMoaSk+ZncmJisrbDxodyk7cmV0dXJuIG99ZnVuY3Rpb24gZnIoZSx0LG4scyl7aWYoZT09PXQmJm49PT1zKXJldHVybiBsdDtjb25zdCByPWk9PnB3KGksMCwxLGUsbik7cmV0dXJuIGk9Pmk9PT0wfHxpPT09MT9pOkxoKHIoaSksdCxzKX1jb25zdCBGaD1lPT50PT50PD0uNT9lKDIqdCkvMjooMi1lKDIqKDEtdCkpKS8yLFZoPWU9PnQ9PjEtZSgxLXQpLF9oPWZyKC4zMywxLjUzLC42OSwuOTkpLHNsPVZoKF9oKSxCaD1GaChzbCksV2g9ZT0+ZT49MT8xOihlKj0yKTwxPy41KnNsKGUpOi41KigyLU1hdGgucG93KDIsLTEwKihlLTEpKSkscmw9ZT0+MS1NYXRoLnNpbihNYXRoLmFjb3MoZSkpLHpoPVZoKHJsKSxVaD1GaChybCksbXc9ZnIoLjQyLDAsMSwxKSxndz1mcigwLDAsLjU4LDEpLCRoPWZyKC40MiwwLC41OCwxKSx5dz1lPT5BcnJheS5pc0FycmF5KGUpJiZ0eXBlb2YgZVswXSE9Im51bWJlciIsSGg9ZT0+QXJyYXkuaXNBcnJheShlKSYmdHlwZW9mIGVbMF09PSJudW1iZXIiLHZ3PXtsaW5lYXI6bHQsZWFzZUluOm13LGVhc2VJbk91dDokaCxlYXNlT3V0Omd3LGNpcmNJbjpybCxjaXJjSW5PdXQ6VWgsY2lyY091dDp6aCxiYWNrSW46c2wsYmFja0luT3V0OkJoLGJhY2tPdXQ6X2gsYW50aWNpcGF0ZTpXaH0seHc9ZT0+dHlwZW9mIGU9PSJzdHJpbmciLENjPWU9PntpZihIaChlKSl7dGwoZS5sZW5ndGg9PT00KTtjb25zdFt0LG4scyxyXT1lO3JldHVybiBmcih0LG4scyxyKX1lbHNlIGlmKHh3KGUpKXJldHVybiB2d1tlXTtyZXR1cm4gZX0sQXI9WyJzZXR1cCIsInJlYWQiLCJyZXNvbHZlS2V5ZnJhbWVzIiwicHJlVXBkYXRlIiwidXBkYXRlIiwicHJlUmVuZGVyIiwicmVuZGVyIiwicG9zdFJlbmRlciJdO2Z1bmN0aW9uIGJ3KGUpe2xldCB0PW5ldyBTZXQsbj1uZXcgU2V0LHM9ITEscj0hMTtjb25zdCBpPW5ldyBXZWFrU2V0O2xldCBvPXtkZWx0YTowLHRpbWVzdGFtcDowLGlzUHJvY2Vzc2luZzohMX07ZnVuY3Rpb24gbChjKXtpLmhhcyhjKSYmKGQuc2NoZWR1bGUoYyksZSgpKSxjKG8pfWNvbnN0IGQ9e3NjaGVkdWxlOihjLHU9ITEsZj0hMSk9Pntjb25zdCBwPWYmJnM/dDpuO3JldHVybiB1JiZpLmFkZChjKSxwLmFkZChjKSxjfSxjYW5jZWw6Yz0+e24uZGVsZXRlKGMpLGkuZGVsZXRlKGMpfSxwcm9jZXNzOmM9PntpZihvPWMscyl7cj0hMDtyZXR1cm59cz0hMDtjb25zdCB1PXQ7dD1uLG49dSx0LmZvckVhY2gobCksdC5jbGVhcigpLHM9ITEsciYmKHI9ITEsZC5wcm9jZXNzKGMpKX19O3JldHVybiBkfWNvbnN0IHd3PTQwO2Z1bmN0aW9uIHFoKGUsdCl7bGV0IG49ITEscz0hMDtjb25zdCByPXtkZWx0YTowLHRpbWVzdGFtcDowLGlzUHJvY2Vzc2luZzohMX0saT0oKT0+bj0hMCxvPUFyLnJlZHVjZSgoYixDKT0+KGJbQ109YncoaSksYikse30pLHtzZXR1cDpsLHJlYWQ6ZCxyZXNvbHZlS2V5ZnJhbWVzOmMscHJlVXBkYXRlOnUsdXBkYXRlOmYscHJlUmVuZGVyOmgscmVuZGVyOnAscG9zdFJlbmRlcjpnfT1vLHk9KCk9Pntjb25zdCBiPW1uLnVzZU1hbnVhbFRpbWluZyxDPWI/ci50aW1lc3RhbXA6cGVyZm9ybWFuY2Uubm93KCk7bj0hMSxifHwoci5kZWx0YT1zPzFlMy82MDpNYXRoLm1heChNYXRoLm1pbihDLXIudGltZXN0YW1wLHd3KSwxKSksci50aW1lc3RhbXA9QyxyLmlzUHJvY2Vzc2luZz0hMCxsLnByb2Nlc3MociksZC5wcm9jZXNzKHIpLGMucHJvY2VzcyhyKSx1LnByb2Nlc3MociksZi5wcm9jZXNzKHIpLGgucHJvY2VzcyhyKSxwLnByb2Nlc3MociksZy5wcm9jZXNzKHIpLHIuaXNQcm9jZXNzaW5nPSExLG4mJnQmJihzPSExLGUoeSkpfSx2PSgpPT57bj0hMCxzPSEwLHIuaXNQcm9jZXNzaW5nfHxlKHkpfTtyZXR1cm57c2NoZWR1bGU6QXIucmVkdWNlKChiLEMpPT57Y29uc3QgUz1vW0NdO3JldHVybiBiW0NdPShQLEU9ITEsaz0hMSk9PihufHx2KCksUy5zY2hlZHVsZShQLEUsaykpLGJ9LHt9KSxjYW5jZWw6Yj0+e2ZvcihsZXQgQz0wO0M8QXIubGVuZ3RoO0MrKylvW0FyW0NdXS5jYW5jZWwoYil9LHN0YXRlOnIsc3RlcHM6b319Y29uc3R7c2NoZWR1bGU6ZGUsY2FuY2VsOmduLHN0YXRlOlJlLHN0ZXBzOmVvfT1xaCh0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPCJ1Ij9yZXF1ZXN0QW5pbWF0aW9uRnJhbWU6bHQsITApO2xldCAkcjtmdW5jdGlvbiBDdygpeyRyPXZvaWQgMH1jb25zdCBXZT17bm93OigpPT4oJHI9PT12b2lkIDAmJldlLnNldChSZS5pc1Byb2Nlc3Npbmd8fG1uLnVzZU1hbnVhbFRpbWluZz9SZS50aW1lc3RhbXA6cGVyZm9ybWFuY2Uubm93KCkpLCRyKSxzZXQ6ZT0+eyRyPWUscXVldWVNaWNyb3Rhc2soQ3cpfX0sS2g9ZT0+dD0+dHlwZW9mIHQ9PSJzdHJpbmciJiZ0LnN0YXJ0c1dpdGgoZSksR2g9S2goIi0tIiksVHc9S2goInZhcigtLSIpLGlsPWU9PlR3KGUpP1N3LnRlc3QoZS5zcGxpdCgiLyoiKVswXS50cmltKCkpOiExLFN3PS92YXJcKC0tKD86W1x3LV0rXHMqfFtcdy1dK1xzKiwoPzpccypbXikoXHNdfFxzKlwoKD86W14pKF18XChbXikoXSpcKSkqXCkpK1xzKilcKSQvaXU7ZnVuY3Rpb24gVGMoZSl7cmV0dXJuIHR5cGVvZiBlIT0ic3RyaW5nIj8hMTplLnNwbGl0KCIvKiIpWzBdLmluY2x1ZGVzKCJ2YXIoLS0iKX1jb25zdCBTcz17dGVzdDplPT50eXBlb2YgZT09Im51bWJlciIscGFyc2U6cGFyc2VGbG9hdCx0cmFuc2Zvcm06ZT0+ZX0sWnM9ey4uLlNzLHRyYW5zZm9ybTplPT5EdCgwLDEsZSl9LGtyPXsuLi5TcyxkZWZhdWx0OjF9LF9zPWU9Pk1hdGgucm91bmQoZSoxZTUpLzFlNSxvbD0vLT8oPzpcZCsoPzpcLlxkKyk/fFwuXGQrKS9ndTtmdW5jdGlvbiBQdyhlKXtyZXR1cm4gZT09bnVsbH1jb25zdCBqdz0vXig/OiNbXGRhLWZdezMsOH18KD86cmdifGhzbClhP1woKD86LT9bXGQuXSslP1ssXHNdKyl7Mn0tP1tcZC5dKyU/XHMqKD86WywvXVxzKik/KD86XGJcZCsoPzpcLlxkKyk/fFwuXGQrKT8lP1wpKSQvaXUsYWw9KGUsdCk9Pm49PiEhKHR5cGVvZiBuPT0ic3RyaW5nIiYmancudGVzdChuKSYmbi5zdGFydHNXaXRoKGUpfHx0JiYhUHcobikmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHQpKSxZaD0oZSx0LG4pPT5zPT57aWYodHlwZW9mIHMhPSJzdHJpbmciKXJldHVybiBzO2NvbnN0W3IsaSxvLGxdPXMubWF0Y2gob2wpO3JldHVybntbZV06cGFyc2VGbG9hdChyKSxbdF06cGFyc2VGbG9hdChpKSxbbl06cGFyc2VGbG9hdChvKSxhbHBoYTpsIT09dm9pZCAwP3BhcnNlRmxvYXQobCk6MX19LEV3PWU9PkR0KDAsMjU1LGUpLHRvPXsuLi5Tcyx0cmFuc2Zvcm06ZT0+TWF0aC5yb3VuZChFdyhlKSl9LEFuPXt0ZXN0OmFsKCJyZ2IiLCJyZWQiKSxwYXJzZTpZaCgicmVkIiwiZ3JlZW4iLCJibHVlIiksdHJhbnNmb3JtOih7cmVkOmUsZ3JlZW46dCxibHVlOm4sYWxwaGE6cz0xfSk9PiJyZ2JhKCIrdG8udHJhbnNmb3JtKGUpKyIsICIrdG8udHJhbnNmb3JtKHQpKyIsICIrdG8udHJhbnNmb3JtKG4pKyIsICIrX3MoWnMudHJhbnNmb3JtKHMpKSsiKSJ9O2Z1bmN0aW9uIEF3KGUpe2xldCB0PSIiLG49IiIscz0iIixyPSIiO3JldHVybiBlLmxlbmd0aD41Pyh0PWUuc3Vic3RyaW5nKDEsMyksbj1lLnN1YnN0cmluZygzLDUpLHM9ZS5zdWJzdHJpbmcoNSw3KSxyPWUuc3Vic3RyaW5nKDcsOSkpOih0PWUuc3Vic3RyaW5nKDEsMiksbj1lLnN1YnN0cmluZygyLDMpLHM9ZS5zdWJzdHJpbmcoMyw0KSxyPWUuc3Vic3RyaW5nKDQsNSksdCs9dCxuKz1uLHMrPXMscis9cikse3JlZDpwYXJzZUludCh0LDE2KSxncmVlbjpwYXJzZUludChuLDE2KSxibHVlOnBhcnNlSW50KHMsMTYpLGFscGhhOnI/cGFyc2VJbnQociwxNikvMjU1OjF9fWNvbnN0ICRvPXt0ZXN0OmFsKCIjIikscGFyc2U6QXcsdHJhbnNmb3JtOkFuLnRyYW5zZm9ybX0saHI9ZT0+KHt0ZXN0OnQ9PnR5cGVvZiB0PT0ic3RyaW5nIiYmdC5lbmRzV2l0aChlKSYmdC5zcGxpdCgiICIpLmxlbmd0aD09PTEscGFyc2U6cGFyc2VGbG9hdCx0cmFuc2Zvcm06dD0+YCR7dH0ke2V9YH0pLF90PWhyKCJkZWciKSxrdD1ocigiJSIpLFc9aHIoInB4Iiksa3c9aHIoInZoIiksTnc9aHIoInZ3IiksU2M9ey4uLmt0LHBhcnNlOmU9Pmt0LnBhcnNlKGUpLzEwMCx0cmFuc2Zvcm06ZT0+a3QudHJhbnNmb3JtKGUqMTAwKX0sZXM9e3Rlc3Q6YWwoImhzbCIsImh1ZSIpLHBhcnNlOlloKCJodWUiLCJzYXR1cmF0aW9uIiwibGlnaHRuZXNzIiksdHJhbnNmb3JtOih7aHVlOmUsc2F0dXJhdGlvbjp0LGxpZ2h0bmVzczpuLGFscGhhOnM9MX0pPT4iaHNsYSgiK01hdGgucm91bmQoZSkrIiwgIitrdC50cmFuc2Zvcm0oX3ModCkpKyIsICIra3QudHJhbnNmb3JtKF9zKG4pKSsiLCAiK19zKFpzLnRyYW5zZm9ybShzKSkrIikifSxDZT17dGVzdDplPT5Bbi50ZXN0KGUpfHwkby50ZXN0KGUpfHxlcy50ZXN0KGUpLHBhcnNlOmU9PkFuLnRlc3QoZSk/QW4ucGFyc2UoZSk6ZXMudGVzdChlKT9lcy5wYXJzZShlKTokby5wYXJzZShlKSx0cmFuc2Zvcm06ZT0+dHlwZW9mIGU9PSJzdHJpbmciP2U6ZS5oYXNPd25Qcm9wZXJ0eSgicmVkIik/QW4udHJhbnNmb3JtKGUpOmVzLnRyYW5zZm9ybShlKSxnZXRBbmltYXRhYmxlTm9uZTplPT57Y29uc3QgdD1DZS5wYXJzZShlKTtyZXR1cm4gdC5hbHBoYT0wLENlLnRyYW5zZm9ybSh0KX19LFJ3PS8oPzojW1xkYS1mXXszLDh9fCg/OnJnYnxoc2wpYT9cKCg/Oi0/W1xkLl0rJT9bLFxzXSspezJ9LT9bXGQuXSslP1xzKig/OlssL11ccyopPyg/OlxiXGQrKD86XC5cZCspP3xcLlxkKyk/JT9cKSkvZ2l1O2Z1bmN0aW9uIER3KGUpe3JldHVybiBpc05hTihlKSYmdHlwZW9mIGU9PSJzdHJpbmciJiYoZS5tYXRjaChvbCk/Lmxlbmd0aHx8MCkrKGUubWF0Y2goUncpPy5sZW5ndGh8fDApPjB9Y29uc3QgWGg9Im51bWJlciIsUWg9ImNvbG9yIixNdz0idmFyIixPdz0idmFyKCIsUGM9IiR7fSIsSXc9L3ZhclxzKlwoXHMqLS0oPzpbXHctXStccyp8W1x3LV0rXHMqLCg/OlxzKlteKShcc118XHMqXCgoPzpbXikoXXxcKFteKShdKlwpKSpcKSkrXHMqKVwpfCNbXGRhLWZdezMsOH18KD86cmdifGhzbClhP1woKD86LT9bXGQuXSslP1ssXHNdKyl7Mn0tP1tcZC5dKyU/XHMqKD86WywvXVxzKik/KD86XGJcZCsoPzpcLlxkKyk/fFwuXGQrKT8lP1wpfC0/KD86XGQrKD86XC5cZCspP3xcLlxkKykvZ2l1O2Z1bmN0aW9uIHlzKGUpe2NvbnN0IHQ9ZS50b1N0cmluZygpLG49W10scz17Y29sb3I6W10sbnVtYmVyOltdLHZhcjpbXX0scj1bXTtsZXQgaT0wO2NvbnN0IGw9dC5yZXBsYWNlKEl3LGQ9PihDZS50ZXN0KGQpPyhzLmNvbG9yLnB1c2goaSksci5wdXNoKFFoKSxuLnB1c2goQ2UucGFyc2UoZCkpKTpkLnN0YXJ0c1dpdGgoT3cpPyhzLnZhci5wdXNoKGkpLHIucHVzaChNdyksbi5wdXNoKGQpKToocy5udW1iZXIucHVzaChpKSxyLnB1c2goWGgpLG4ucHVzaChwYXJzZUZsb2F0KGQpKSksKytpLFBjKSkuc3BsaXQoUGMpO3JldHVybnt2YWx1ZXM6bixzcGxpdDpsLGluZGV4ZXM6cyx0eXBlczpyfX1mdW5jdGlvbiBMdyhlKXtyZXR1cm4geXMoZSkudmFsdWVzfWZ1bmN0aW9uIEpoKHtzcGxpdDplLHR5cGVzOnR9KXtjb25zdCBuPWUubGVuZ3RoO3JldHVybiBzPT57bGV0IHI9IiI7Zm9yKGxldCBpPTA7aTxuO2krKylpZihyKz1lW2ldLHNbaV0hPT12b2lkIDApe2NvbnN0IG89dFtpXTtvPT09WGg/cis9X3Moc1tpXSk6bz09PVFoP3IrPUNlLnRyYW5zZm9ybShzW2ldKTpyKz1zW2ldfXJldHVybiByfX1mdW5jdGlvbiBGdyhlKXtyZXR1cm4gSmgoeXMoZSkpfWNvbnN0IFZ3PWU9PnR5cGVvZiBlPT0ibnVtYmVyIj8wOkNlLnRlc3QoZSk/Q2UuZ2V0QW5pbWF0YWJsZU5vbmUoZSk6ZSxfdz0oZSx0KT0+dHlwZW9mIGU9PSJudW1iZXIiP3Q/LnRyaW0oKS5lbmRzV2l0aCgiLyIpP2U6MDpWdyhlKTtmdW5jdGlvbiBCdyhlKXtjb25zdCB0PXlzKGUpO3JldHVybiBKaCh0KSh0LnZhbHVlcy5tYXAoKHMscik9Pl93KHMsdC5zcGxpdFtyXSkpKX1jb25zdCB5dD17dGVzdDpEdyxwYXJzZTpMdyxjcmVhdGVUcmFuc2Zvcm1lcjpGdyxnZXRBbmltYXRhYmxlTm9uZTpCd307ZnVuY3Rpb24gbm8oZSx0LG4pe3JldHVybiBuPDAmJihuKz0xKSxuPjEmJihuLT0xKSxuPDEvNj9lKyh0LWUpKjYqbjpuPDEvMj90Om48Mi8zP2UrKHQtZSkqKDIvMy1uKSo2OmV9ZnVuY3Rpb24gV3coe2h1ZTplLHNhdHVyYXRpb246dCxsaWdodG5lc3M6bixhbHBoYTpzfSl7ZS89MzYwLHQvPTEwMCxuLz0xMDA7bGV0IHI9MCxpPTAsbz0wO2lmKCF0KXI9aT1vPW47ZWxzZXtjb25zdCBsPW48LjU/biooMSt0KTpuK3Qtbip0LGQ9MipuLWw7cj1ubyhkLGwsZSsxLzMpLGk9bm8oZCxsLGUpLG89bm8oZCxsLGUtMS8zKX1yZXR1cm57cmVkOk1hdGgucm91bmQocioyNTUpLGdyZWVuOk1hdGgucm91bmQoaSoyNTUpLGJsdWU6TWF0aC5yb3VuZChvKjI1NSksYWxwaGE6c319ZnVuY3Rpb24gY2koZSx0KXtyZXR1cm4gbj0+bj4wP3Q6ZX1jb25zdCBjZT0oZSx0LG4pPT5lKyh0LWUpKm4sc289KGUsdCxuKT0+e2NvbnN0IHM9ZSplLHI9bioodCp0LXMpK3M7cmV0dXJuIHI8MD8wOk1hdGguc3FydChyKX0senc9WyRvLEFuLGVzXSxVdz1lPT56dy5maW5kKHQ9PnQudGVzdChlKSk7ZnVuY3Rpb24gamMoZSl7Y29uc3QgdD1VdyhlKTtpZighdClyZXR1cm4hMTtsZXQgbj10LnBhcnNlKGUpO3JldHVybiB0PT09ZXMmJihuPVd3KG4pKSxufWNvbnN0IEVjPShlLHQpPT57Y29uc3Qgbj1qYyhlKSxzPWpjKHQpO2lmKCFufHwhcylyZXR1cm4gY2koZSx0KTtjb25zdCByPXsuLi5ufTtyZXR1cm4gaT0+KHIucmVkPXNvKG4ucmVkLHMucmVkLGkpLHIuZ3JlZW49c28obi5ncmVlbixzLmdyZWVuLGkpLHIuYmx1ZT1zbyhuLmJsdWUscy5ibHVlLGkpLHIuYWxwaGE9Y2Uobi5hbHBoYSxzLmFscGhhLGkpLEFuLnRyYW5zZm9ybShyKSl9LEhvPW5ldyBTZXQoWyJub25lIiwiaGlkZGVuIl0pO2Z1bmN0aW9uICR3KGUsdCl7cmV0dXJuIEhvLmhhcyhlKT9uPT5uPD0wP2U6dDpuPT5uPj0xP3Q6ZX1mdW5jdGlvbiBIdyhlLHQpe3JldHVybiBuPT5jZShlLHQsbil9ZnVuY3Rpb24gbGwoZSl7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIj9Idzp0eXBlb2YgZT09InN0cmluZyI/aWwoZSk/Y2k6Q2UudGVzdChlKT9FYzpHdzpBcnJheS5pc0FycmF5KGUpP1poOnR5cGVvZiBlPT0ib2JqZWN0Ij9DZS50ZXN0KGUpP0VjOnF3OmNpfWZ1bmN0aW9uIFpoKGUsdCl7Y29uc3Qgbj1bLi4uZV0scz1uLmxlbmd0aCxyPWUubWFwKChpLG8pPT5sbChpKShpLHRbb10pKTtyZXR1cm4gaT0+e2ZvcihsZXQgbz0wO288cztvKyspbltvXT1yW29dKGkpO3JldHVybiBufX1mdW5jdGlvbiBxdyhlLHQpe2NvbnN0IG49ey4uLmUsLi4udH0scz17fTtmb3IoY29uc3QgciBpbiBuKWVbcl0hPT12b2lkIDAmJnRbcl0hPT12b2lkIDAmJihzW3JdPWxsKGVbcl0pKGVbcl0sdFtyXSkpO3JldHVybiByPT57Zm9yKGNvbnN0IGkgaW4gcyluW2ldPXNbaV0ocik7cmV0dXJuIG59fWZ1bmN0aW9uIEt3KGUsdCl7Y29uc3Qgbj1bXSxzPXtjb2xvcjowLHZhcjowLG51bWJlcjowfTtmb3IobGV0IHI9MDtyPHQudmFsdWVzLmxlbmd0aDtyKyspe2NvbnN0IGk9dC50eXBlc1tyXSxvPWUuaW5kZXhlc1tpXVtzW2ldXSxsPWUudmFsdWVzW29dPz8wO25bcl09bCxzW2ldKyt9cmV0dXJuIG59Y29uc3QgR3c9KGUsdCk9Pntjb25zdCBuPXl0LmNyZWF0ZVRyYW5zZm9ybWVyKHQpLHM9eXMoZSkscj15cyh0KTtyZXR1cm4gcy5pbmRleGVzLnZhci5sZW5ndGg9PT1yLmluZGV4ZXMudmFyLmxlbmd0aCYmcy5pbmRleGVzLmNvbG9yLmxlbmd0aD09PXIuaW5kZXhlcy5jb2xvci5sZW5ndGgmJnMuaW5kZXhlcy5udW1iZXIubGVuZ3RoPj1yLmluZGV4ZXMubnVtYmVyLmxlbmd0aD9Iby5oYXMoZSkmJiFyLnZhbHVlcy5sZW5ndGh8fEhvLmhhcyh0KSYmIXMudmFsdWVzLmxlbmd0aD8kdyhlLHQpOnVyKFpoKEt3KHMsciksci52YWx1ZXMpLG4pOmNpKGUsdCl9O2Z1bmN0aW9uIGVwKGUsdCxuKXtyZXR1cm4gdHlwZW9mIGU9PSJudW1iZXIiJiZ0eXBlb2YgdD09Im51bWJlciImJnR5cGVvZiBuPT0ibnVtYmVyIj9jZShlLHQsbik6bGwoZSkoZSx0KX1jb25zdCBZdz1lPT57Y29uc3QgdD0oe3RpbWVzdGFtcDpufSk9PmUobik7cmV0dXJue3N0YXJ0OihuPSEwKT0+ZGUudXBkYXRlKHQsbiksc3RvcDooKT0+Z24odCksbm93OigpPT5SZS5pc1Byb2Nlc3Npbmc/UmUudGltZXN0YW1wOldlLm5vdygpfX0sdHA9KGUsdCxuPTEwKT0+e2xldCBzPSIiO2NvbnN0IHI9TWF0aC5tYXgoTWF0aC5yb3VuZCh0L24pLDIpO2ZvcihsZXQgaT0wO2k8cjtpKyspcys9TWF0aC5yb3VuZChlKGkvKHItMSkpKjFlNCkvMWU0KyIsICI7cmV0dXJuYGxpbmVhcigke3Muc3Vic3RyaW5nKDAscy5sZW5ndGgtMil9KWB9LGRpPTJlNDtmdW5jdGlvbiBjbChlKXtsZXQgdD0wO2NvbnN0IG49NTA7bGV0IHM9ZS5uZXh0KHQpO2Zvcig7IXMuZG9uZSYmdDxkaTspdCs9bixzPWUubmV4dCh0KTtyZXR1cm4gdD49ZGk/MS8wOnR9ZnVuY3Rpb24gWHcoZSx0PTEwMCxuKXtjb25zdCBzPW4oey4uLmUsa2V5ZnJhbWVzOlswLHRdfSkscj1NYXRoLm1pbihjbChzKSxkaSk7cmV0dXJue3R5cGU6ImtleWZyYW1lcyIsZWFzZTppPT5zLm5leHQocippKS52YWx1ZS90LGR1cmF0aW9uOm90KHIpfX1jb25zdCB4ZT17c3RpZmZuZXNzOjEwMCxkYW1waW5nOjEwLG1hc3M6MSx2ZWxvY2l0eTowLGR1cmF0aW9uOjgwMCxib3VuY2U6LjMsdmlzdWFsRHVyYXRpb246LjMscmVzdFNwZWVkOntncmFudWxhcjouMDEsZGVmYXVsdDoyfSxyZXN0RGVsdGE6e2dyYW51bGFyOi4wMDUsZGVmYXVsdDouNX0sbWluRHVyYXRpb246LjAxLG1heER1cmF0aW9uOjEwLG1pbkRhbXBpbmc6LjA1LG1heERhbXBpbmc6MX07ZnVuY3Rpb24gcW8oZSx0KXtyZXR1cm4gZSpNYXRoLnNxcnQoMS10KnQpfWNvbnN0IFF3PTEyO2Z1bmN0aW9uIEp3KGUsdCxuKXtsZXQgcz1uO2ZvcihsZXQgcj0xO3I8UXc7cisrKXM9cy1lKHMpL3Qocyk7cmV0dXJuIHN9Y29uc3Qgcm89LjAwMTtmdW5jdGlvbiBadyh7ZHVyYXRpb246ZT14ZS5kdXJhdGlvbixib3VuY2U6dD14ZS5ib3VuY2UsdmVsb2NpdHk6bj14ZS52ZWxvY2l0eSxtYXNzOnM9eGUubWFzc30pe2xldCByLGksbz0xLXQ7bz1EdCh4ZS5taW5EYW1waW5nLHhlLm1heERhbXBpbmcsbyksZT1EdCh4ZS5taW5EdXJhdGlvbix4ZS5tYXhEdXJhdGlvbixvdChlKSksbzwxPyhyPWM9Pntjb25zdCB1PWMqbyxmPXUqZSxoPXUtbixwPXFvKGMsbyksZz1NYXRoLmV4cCgtZik7cmV0dXJuIHJvLWgvcCpnfSxpPWM9Pntjb25zdCBmPWMqbyplLGg9ZipuK24scD1NYXRoLnBvdyhvLDIpKk1hdGgucG93KGMsMikqZSxnPU1hdGguZXhwKC1mKSx5PXFvKE1hdGgucG93KGMsMiksbyk7cmV0dXJuKC1yKGMpK3JvPjA/LTE6MSkqKChoLXApKmcpL3l9KToocj1jPT57Y29uc3QgdT1NYXRoLmV4cCgtYyplKSxmPShjLW4pKmUrMTtyZXR1cm4tcm8rdSpmfSxpPWM9Pntjb25zdCB1PU1hdGguZXhwKC1jKmUpLGY9KG4tYykqKGUqZSk7cmV0dXJuIHUqZn0pO2NvbnN0IGw9NS9lLGQ9SncocixpLGwpO2lmKGU9dHQoZSksaXNOYU4oZCkpcmV0dXJue3N0aWZmbmVzczp4ZS5zdGlmZm5lc3MsZGFtcGluZzp4ZS5kYW1waW5nLGR1cmF0aW9uOmV9O3tjb25zdCBjPU1hdGgucG93KGQsMikqcztyZXR1cm57c3RpZmZuZXNzOmMsZGFtcGluZzpvKjIqTWF0aC5zcXJ0KHMqYyksZHVyYXRpb246ZX19fWNvbnN0IGUxPVsiZHVyYXRpb24iLCJib3VuY2UiXSx0MT1bInN0aWZmbmVzcyIsImRhbXBpbmciLCJtYXNzIl07ZnVuY3Rpb24gQWMoZSx0KXtyZXR1cm4gdC5zb21lKG49PmVbbl0hPT12b2lkIDApfWZ1bmN0aW9uIG4xKGUpe2xldCB0PXt2ZWxvY2l0eTp4ZS52ZWxvY2l0eSxzdGlmZm5lc3M6eGUuc3RpZmZuZXNzLGRhbXBpbmc6eGUuZGFtcGluZyxtYXNzOnhlLm1hc3MsaXNSZXNvbHZlZEZyb21EdXJhdGlvbjohMSwuLi5lfTtpZighQWMoZSx0MSkmJkFjKGUsZTEpKWlmKHQudmVsb2NpdHk9MCxlLnZpc3VhbER1cmF0aW9uKXtjb25zdCBuPWUudmlzdWFsRHVyYXRpb24scz0yKk1hdGguUEkvKG4qMS4yKSxyPXMqcyxpPTIqRHQoLjA1LDEsMS0oZS5ib3VuY2V8fDApKSpNYXRoLnNxcnQocik7dD17Li4udCxtYXNzOnhlLm1hc3Msc3RpZmZuZXNzOnIsZGFtcGluZzppfX1lbHNle2NvbnN0IG49Wncoey4uLmUsdmVsb2NpdHk6MH0pO3Q9ey4uLnQsLi4ubixtYXNzOnhlLm1hc3N9LHQuaXNSZXNvbHZlZEZyb21EdXJhdGlvbj0hMH1yZXR1cm4gdH1mdW5jdGlvbiB1aShlPXhlLnZpc3VhbER1cmF0aW9uLHQ9eGUuYm91bmNlKXtjb25zdCBuPXR5cGVvZiBlIT0ib2JqZWN0Ij97dmlzdWFsRHVyYXRpb246ZSxrZXlmcmFtZXM6WzAsMV0sYm91bmNlOnR9OmU7bGV0e3Jlc3RTcGVlZDpzLHJlc3REZWx0YTpyfT1uO2NvbnN0IGk9bi5rZXlmcmFtZXNbMF0sbz1uLmtleWZyYW1lc1tuLmtleWZyYW1lcy5sZW5ndGgtMV0sbD17ZG9uZTohMSx2YWx1ZTppfSx7c3RpZmZuZXNzOmQsZGFtcGluZzpjLG1hc3M6dSxkdXJhdGlvbjpmLHZlbG9jaXR5OmgsaXNSZXNvbHZlZEZyb21EdXJhdGlvbjpwfT1uMSh7Li4ubix2ZWxvY2l0eTotb3Qobi52ZWxvY2l0eXx8MCl9KSxnPWh8fDAseT1jLygyKk1hdGguc3FydChkKnUpKSx2PW8taSx4PW90KE1hdGguc3FydChkL3UpKSx3PU1hdGguYWJzKHYpPDU7c3x8KHM9dz94ZS5yZXN0U3BlZWQuZ3JhbnVsYXI6eGUucmVzdFNwZWVkLmRlZmF1bHQpLHJ8fChyPXc/eGUucmVzdERlbHRhLmdyYW51bGFyOnhlLnJlc3REZWx0YS5kZWZhdWx0KTtsZXQgYixDLFMsUCxFLGs7aWYoeTwxKVM9cW8oeCx5KSxQPShnK3kqeCp2KS9TLGI9QT0+e2NvbnN0IEQ9TWF0aC5leHAoLXkqeCpBKTtyZXR1cm4gby1EKihQKk1hdGguc2luKFMqQSkrdipNYXRoLmNvcyhTKkEpKX0sRT15KngqUCt2KlMsaz15Kngqdi1QKlMsQz1BPT5NYXRoLmV4cCgteSp4KkEpKihFKk1hdGguc2luKFMqQSkraypNYXRoLmNvcyhTKkEpKTtlbHNlIGlmKHk9PT0xKXtiPUQ9Pm8tTWF0aC5leHAoLXgqRCkqKHYrKGcreCp2KSpEKTtjb25zdCBBPWcreCp2O0M9RD0+TWF0aC5leHAoLXgqRCkqKHgqQSpELWcpfWVsc2V7Y29uc3QgQT14Kk1hdGguc3FydCh5KnktMSk7Yj1fPT57Y29uc3QgSD1NYXRoLmV4cCgteSp4Kl8pLE09TWF0aC5taW4oQSpfLDMwMCk7cmV0dXJuIG8tSCooKGcreSp4KnYpKk1hdGguc2luaChNKStBKnYqTWF0aC5jb3NoKE0pKS9BfTtjb25zdCBEPShnK3kqeCp2KS9BLE49eSp4KkQtdipBLEY9eSp4KnYtRCpBO0M9Xz0+e2NvbnN0IEg9TWF0aC5leHAoLXkqeCpfKSxNPU1hdGgubWluKEEqXywzMDApO3JldHVybiBIKihOKk1hdGguc2luaChNKStGKk1hdGguY29zaChNKSl9fWNvbnN0IFI9e2NhbGN1bGF0ZWREdXJhdGlvbjpwJiZmfHxudWxsLHZlbG9jaXR5OkE9PnR0KEMoQSkpLG5leHQ6QT0+e2lmKCFwJiZ5PDEpe2NvbnN0IE49TWF0aC5leHAoLXkqeCpBKSxGPU1hdGguc2luKFMqQSksXz1NYXRoLmNvcyhTKkEpLEg9by1OKihQKkYrdipfKSxNPXR0KE4qKEUqRitrKl8pKTtyZXR1cm4gbC5kb25lPU1hdGguYWJzKE0pPD1zJiZNYXRoLmFicyhvLUgpPD1yLGwudmFsdWU9bC5kb25lP286SCxsfWNvbnN0IEQ9YihBKTtpZihwKWwuZG9uZT1BPj1mO2Vsc2V7Y29uc3QgTj10dChDKEEpKTtsLmRvbmU9TWF0aC5hYnMoTik8PXMmJk1hdGguYWJzKG8tRCk8PXJ9cmV0dXJuIGwudmFsdWU9bC5kb25lP286RCxsfSx0b1N0cmluZzooKT0+e2NvbnN0IEE9TWF0aC5taW4oY2woUiksZGkpLEQ9dHAoTj0+Ui5uZXh0KEEqTikudmFsdWUsQSwzMCk7cmV0dXJuIEErIm1zICIrRH0sdG9UcmFuc2l0aW9uOigpPT57fX07cmV0dXJuIFJ9dWkuYXBwbHlUb09wdGlvbnM9ZT0+e2NvbnN0IHQ9WHcoZSwxMDAsdWkpO3JldHVybiBlLmVhc2U9dC5lYXNlLGUuZHVyYXRpb249dHQodC5kdXJhdGlvbiksZS50eXBlPSJrZXlmcmFtZXMiLGV9O2NvbnN0IHMxPTU7ZnVuY3Rpb24gbnAoZSx0LG4pe2NvbnN0IHM9TWF0aC5tYXgodC1zMSwwKTtyZXR1cm4gSWgobi1lKHMpLHQtcyl9ZnVuY3Rpb24gS28oe2tleWZyYW1lczplLHZlbG9jaXR5OnQ9MCxwb3dlcjpuPS44LHRpbWVDb25zdGFudDpzPTMyNSxib3VuY2VEYW1waW5nOnI9MTAsYm91bmNlU3RpZmZuZXNzOmk9NTAwLG1vZGlmeVRhcmdldDpvLG1pbjpsLG1heDpkLHJlc3REZWx0YTpjPS41LHJlc3RTcGVlZDp1fSl7Y29uc3QgZj1lWzBdLGg9e2RvbmU6ITEsdmFsdWU6Zn0scD1rPT5sIT09dm9pZCAwJiZrPGx8fGQhPT12b2lkIDAmJms+ZCxnPWs9Pmw9PT12b2lkIDA/ZDpkPT09dm9pZCAwfHxNYXRoLmFicyhsLWspPE1hdGguYWJzKGQtayk/bDpkO2xldCB5PW4qdDtjb25zdCB2PWYreSx4PW89PT12b2lkIDA/djpvKHYpO3ghPT12JiYoeT14LWYpO2NvbnN0IHc9az0+LXkqTWF0aC5leHAoLWsvcyksYj1rPT54K3coayksQz1rPT57Y29uc3QgUj13KGspLEE9YihrKTtoLmRvbmU9TWF0aC5hYnMoUik8PWMsaC52YWx1ZT1oLmRvbmU/eDpBfTtsZXQgUyxQO2NvbnN0IEU9az0+e3AoaC52YWx1ZSkmJihTPWssUD11aSh7a2V5ZnJhbWVzOltoLnZhbHVlLGcoaC52YWx1ZSldLHZlbG9jaXR5Om5wKGIsayxoLnZhbHVlKSxkYW1waW5nOnIsc3RpZmZuZXNzOmkscmVzdERlbHRhOmMscmVzdFNwZWVkOnV9KSl9O3JldHVybiBFKDApLHtjYWxjdWxhdGVkRHVyYXRpb246bnVsbCxuZXh0Oms9PntsZXQgUj0hMTtyZXR1cm4hUCYmUz09PXZvaWQgMCYmKFI9ITAsQyhrKSxFKGspKSxTIT09dm9pZCAwJiZrPj1TP1AubmV4dChrLVMpOighUiYmQyhrKSxoKX19fWZ1bmN0aW9uIHIxKGUsdCxuKXtjb25zdCBzPVtdLHI9bnx8bW4ubWl4fHxlcCxpPWUubGVuZ3RoLTE7Zm9yKGxldCBvPTA7bzxpO28rKyl7bGV0IGw9cihlW29dLGVbbysxXSk7aWYodCl7Y29uc3QgZD1BcnJheS5pc0FycmF5KHQpP3Rbb118fGx0OnQ7bD11cihkLGwpfXMucHVzaChsKX1yZXR1cm4gc31mdW5jdGlvbiBpMShlLHQse2NsYW1wOm49ITAsZWFzZTpzLG1peGVyOnJ9PXt9KXtjb25zdCBpPWUubGVuZ3RoO2lmKHRsKGk9PT10Lmxlbmd0aCksaT09PTEpcmV0dXJuKCk9PnRbMF07aWYoaT09PTImJnRbMF09PT10WzFdKXJldHVybigpPT50WzFdO2NvbnN0IG89ZVswXT09PWVbMV07ZVswXT5lW2ktMV0mJihlPVsuLi5lXS5yZXZlcnNlKCksdD1bLi4udF0ucmV2ZXJzZSgpKTtjb25zdCBsPXIxKHQscyxyKSxkPWwubGVuZ3RoLGM9dT0+e2lmKG8mJnU8ZVswXSlyZXR1cm4gdFswXTtsZXQgZj0wO2lmKGQ+MSlmb3IoO2Y8ZS5sZW5ndGgtMiYmISh1PGVbZisxXSk7ZisrKTtjb25zdCBoPUpzKGVbZl0sZVtmKzFdLHUpO3JldHVybiBsW2ZdKGgpfTtyZXR1cm4gbj91PT5jKER0KGVbMF0sZVtpLTFdLHUpKTpjfWZ1bmN0aW9uIG8xKGUsdCl7Y29uc3Qgbj1lW2UubGVuZ3RoLTFdO2ZvcihsZXQgcz0xO3M8PXQ7cysrKXtjb25zdCByPUpzKDAsdCxzKTtlLnB1c2goY2UobiwxLHIpKX19ZnVuY3Rpb24gYTEoZSl7Y29uc3QgdD1bMF07cmV0dXJuIG8xKHQsZS5sZW5ndGgtMSksdH1mdW5jdGlvbiBsMShlLHQpe3JldHVybiBlLm1hcChuPT5uKnQpfWZ1bmN0aW9uIGMxKGUsdCl7cmV0dXJuIGUubWFwKCgpPT50fHwkaCkuc3BsaWNlKDAsZS5sZW5ndGgtMSl9ZnVuY3Rpb24gQnMoe2R1cmF0aW9uOmU9MzAwLGtleWZyYW1lczp0LHRpbWVzOm4sZWFzZTpzPSJlYXNlSW5PdXQifSl7Y29uc3Qgcj15dyhzKT9zLm1hcChDYyk6Q2MocyksaT17ZG9uZTohMSx2YWx1ZTp0WzBdfSxvPWwxKG4mJm4ubGVuZ3RoPT09dC5sZW5ndGg/bjphMSh0KSxlKSxsPWkxKG8sdCx7ZWFzZTpBcnJheS5pc0FycmF5KHIpP3I6YzEodCxyKX0pO3JldHVybntjYWxjdWxhdGVkRHVyYXRpb246ZSxuZXh0OmQ9PihpLnZhbHVlPWwoZCksaS5kb25lPWQ+PWUsaSl9fWNvbnN0IGQxPWU9PmUhPT1udWxsO2Z1bmN0aW9uIFJpKGUse3JlcGVhdDp0LHJlcGVhdFR5cGU6bj0ibG9vcCJ9LHMscj0xKXtjb25zdCBpPWUuZmlsdGVyKGQxKSxsPXI8MHx8dCYmbiE9PSJsb29wIiYmdCUyPT09MT8wOmkubGVuZ3RoLTE7cmV0dXJuIWx8fHM9PT12b2lkIDA/aVtsXTpzfWNvbnN0IHUxPXtkZWNheTpLbyxpbmVydGlhOktvLHR3ZWVuOkJzLGtleWZyYW1lczpCcyxzcHJpbmc6dWl9O2Z1bmN0aW9uIHNwKGUpe3R5cGVvZiBlLnR5cGU9PSJzdHJpbmciJiYoZS50eXBlPXUxW2UudHlwZV0pfWNsYXNzIGRse2NvbnN0cnVjdG9yKCl7dGhpcy51cGRhdGVGaW5pc2hlZCgpfWdldCBmaW5pc2hlZCgpe3JldHVybiB0aGlzLl9maW5pc2hlZH11cGRhdGVGaW5pc2hlZCgpe3RoaXMuX2ZpbmlzaGVkPW5ldyBQcm9taXNlKHQ9Pnt0aGlzLnJlc29sdmU9dH0pfW5vdGlmeUZpbmlzaGVkKCl7dGhpcy5yZXNvbHZlKCl9dGhlbih0LG4pe3JldHVybiB0aGlzLmZpbmlzaGVkLnRoZW4odCxuKX19Y29uc3QgZjE9ZT0+ZS8xMDA7Y2xhc3MgZmkgZXh0ZW5kcyBkbHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuc3RhdGU9ImlkbGUiLHRoaXMuc3RhcnRUaW1lPW51bGwsdGhpcy5pc1N0b3BwZWQ9ITEsdGhpcy5jdXJyZW50VGltZT0wLHRoaXMuaG9sZFRpbWU9bnVsbCx0aGlzLnBsYXliYWNrU3BlZWQ9MSx0aGlzLmRlbGF5U3RhdGU9e2RvbmU6ITEsdmFsdWU6dm9pZCAwfSx0aGlzLnN0b3A9KCk9Pntjb25zdHttb3Rpb25WYWx1ZTpufT10aGlzLm9wdGlvbnM7biYmbi51cGRhdGVkQXQhPT1XZS5ub3coKSYmdGhpcy50aWNrKFdlLm5vdygpKSx0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLnN0YXRlIT09ImlkbGUiJiYodGhpcy50ZWFyZG93bigpLHRoaXMub3B0aW9ucy5vblN0b3A/LigpKX0sdGhpcy5vcHRpb25zPXQsdGhpcy5pbml0QW5pbWF0aW9uKCksdGhpcy5wbGF5KCksdC5hdXRvcGxheT09PSExJiZ0aGlzLnBhdXNlKCl9aW5pdEFuaW1hdGlvbigpe2NvbnN0e29wdGlvbnM6dH09dGhpcztzcCh0KTtjb25zdHt0eXBlOm49QnMscmVwZWF0OnM9MCxyZXBlYXREZWxheTpyPTAscmVwZWF0VHlwZTppLHZlbG9jaXR5Om89MH09dDtsZXR7a2V5ZnJhbWVzOmx9PXQ7Y29uc3QgZD1ufHxCcztkIT09QnMmJnR5cGVvZiBsWzBdIT0ibnVtYmVyIiYmKHRoaXMubWl4S2V5ZnJhbWVzPXVyKGYxLGVwKGxbMF0sbFsxXSkpLGw9WzAsMTAwXSk7Y29uc3QgYz1kKHsuLi50LGtleWZyYW1lczpsfSk7aT09PSJtaXJyb3IiJiYodGhpcy5taXJyb3JlZEdlbmVyYXRvcj1kKHsuLi50LGtleWZyYW1lczpbLi4ubF0ucmV2ZXJzZSgpLHZlbG9jaXR5Oi1vfSkpLGMuY2FsY3VsYXRlZER1cmF0aW9uPT09bnVsbCYmKGMuY2FsY3VsYXRlZER1cmF0aW9uPWNsKGMpKTtjb25zdHtjYWxjdWxhdGVkRHVyYXRpb246dX09Yzt0aGlzLmNhbGN1bGF0ZWREdXJhdGlvbj11LHRoaXMucmVzb2x2ZWREdXJhdGlvbj11K3IsdGhpcy50b3RhbER1cmF0aW9uPXRoaXMucmVzb2x2ZWREdXJhdGlvbioocysxKS1yLHRoaXMuZ2VuZXJhdG9yPWN9dXBkYXRlVGltZSh0KXtjb25zdCBuPU1hdGgucm91bmQodC10aGlzLnN0YXJ0VGltZSkqdGhpcy5wbGF5YmFja1NwZWVkO3RoaXMuaG9sZFRpbWUhPT1udWxsP3RoaXMuY3VycmVudFRpbWU9dGhpcy5ob2xkVGltZTp0aGlzLmN1cnJlbnRUaW1lPW59dGljayh0LG49ITEpe2NvbnN0e2dlbmVyYXRvcjpzLHRvdGFsRHVyYXRpb246cixtaXhLZXlmcmFtZXM6aSxtaXJyb3JlZEdlbmVyYXRvcjpvLHJlc29sdmVkRHVyYXRpb246bCxjYWxjdWxhdGVkRHVyYXRpb246ZH09dGhpcztpZih0aGlzLnN0YXJ0VGltZT09PW51bGwpcmV0dXJuIHMubmV4dCgwKTtjb25zdHtkZWxheTpjPTAsa2V5ZnJhbWVzOnUscmVwZWF0OmYscmVwZWF0VHlwZTpoLHJlcGVhdERlbGF5OnAsdHlwZTpnLG9uVXBkYXRlOnksZmluYWxLZXlmcmFtZTp2fT10aGlzLm9wdGlvbnM7dGhpcy5zcGVlZD4wP3RoaXMuc3RhcnRUaW1lPU1hdGgubWluKHRoaXMuc3RhcnRUaW1lLHQpOnRoaXMuc3BlZWQ8MCYmKHRoaXMuc3RhcnRUaW1lPU1hdGgubWluKHQtci90aGlzLnNwZWVkLHRoaXMuc3RhcnRUaW1lKSksbj90aGlzLmN1cnJlbnRUaW1lPXQ6dGhpcy51cGRhdGVUaW1lKHQpO2NvbnN0IHg9dGhpcy5jdXJyZW50VGltZS1jKih0aGlzLnBsYXliYWNrU3BlZWQ+PTA/MTotMSksdz10aGlzLnBsYXliYWNrU3BlZWQ+PTA/eDwwOng+cjt0aGlzLmN1cnJlbnRUaW1lPU1hdGgubWF4KHgsMCksdGhpcy5zdGF0ZT09PSJmaW5pc2hlZCImJnRoaXMuaG9sZFRpbWU9PT1udWxsJiYodGhpcy5jdXJyZW50VGltZT1yKTtsZXQgYj10aGlzLmN1cnJlbnRUaW1lLEM9cztpZihmKXtjb25zdCBrPU1hdGgubWluKHRoaXMuY3VycmVudFRpbWUscikvbDtsZXQgUj1NYXRoLmZsb29yKGspLEE9ayUxOyFBJiZrPj0xJiYoQT0xKSxBPT09MSYmUi0tLFI9TWF0aC5taW4oUixmKzEpLCEhKFIlMikmJihoPT09InJldmVyc2UiPyhBPTEtQSxwJiYoQS09cC9sKSk6aD09PSJtaXJyb3IiJiYoQz1vKSksYj1EdCgwLDEsQSkqbH1sZXQgUzt3Pyh0aGlzLmRlbGF5U3RhdGUudmFsdWU9dVswXSxTPXRoaXMuZGVsYXlTdGF0ZSk6Uz1DLm5leHQoYiksaSYmIXcmJihTLnZhbHVlPWkoUy52YWx1ZSkpO2xldHtkb25lOlB9PVM7IXcmJmQhPT1udWxsJiYoUD10aGlzLnBsYXliYWNrU3BlZWQ+PTA/dGhpcy5jdXJyZW50VGltZT49cjp0aGlzLmN1cnJlbnRUaW1lPD0wKTtjb25zdCBFPXRoaXMuaG9sZFRpbWU9PT1udWxsJiYodGhpcy5zdGF0ZT09PSJmaW5pc2hlZCJ8fHRoaXMuc3RhdGU9PT0icnVubmluZyImJlApO3JldHVybiBFJiZnIT09S28mJihTLnZhbHVlPVJpKHUsdGhpcy5vcHRpb25zLHYsdGhpcy5zcGVlZCkpLHkmJnkoUy52YWx1ZSksRSYmdGhpcy5maW5pc2goKSxTfXRoZW4odCxuKXtyZXR1cm4gdGhpcy5maW5pc2hlZC50aGVuKHQsbil9Z2V0IGR1cmF0aW9uKCl7cmV0dXJuIG90KHRoaXMuY2FsY3VsYXRlZER1cmF0aW9uKX1nZXQgaXRlcmF0aW9uRHVyYXRpb24oKXtjb25zdHtkZWxheTp0PTB9PXRoaXMub3B0aW9uc3x8e307cmV0dXJuIHRoaXMuZHVyYXRpb24rb3QodCl9Z2V0IHRpbWUoKXtyZXR1cm4gb3QodGhpcy5jdXJyZW50VGltZSl9c2V0IHRpbWUodCl7dD10dCh0KSx0aGlzLmN1cnJlbnRUaW1lPXQsdGhpcy5zdGFydFRpbWU9PT1udWxsfHx0aGlzLmhvbGRUaW1lIT09bnVsbHx8dGhpcy5wbGF5YmFja1NwZWVkPT09MD90aGlzLmhvbGRUaW1lPXQ6dGhpcy5kcml2ZXImJih0aGlzLnN0YXJ0VGltZT10aGlzLmRyaXZlci5ub3coKS10L3RoaXMucGxheWJhY2tTcGVlZCksdGhpcy5kcml2ZXI/dGhpcy5kcml2ZXIuc3RhcnQoITEpOih0aGlzLnN0YXJ0VGltZT0wLHRoaXMuc3RhdGU9InBhdXNlZCIsdGhpcy5ob2xkVGltZT10LHRoaXMudGljayh0KSl9Z2V0R2VuZXJhdG9yVmVsb2NpdHkoKXtjb25zdCB0PXRoaXMuY3VycmVudFRpbWU7aWYodDw9MClyZXR1cm4gdGhpcy5vcHRpb25zLnZlbG9jaXR5fHwwO2lmKHRoaXMuZ2VuZXJhdG9yLnZlbG9jaXR5KXJldHVybiB0aGlzLmdlbmVyYXRvci52ZWxvY2l0eSh0KTtjb25zdCBuPXRoaXMuZ2VuZXJhdG9yLm5leHQodCkudmFsdWU7cmV0dXJuIG5wKHM9PnRoaXMuZ2VuZXJhdG9yLm5leHQocykudmFsdWUsdCxuKX1nZXQgc3BlZWQoKXtyZXR1cm4gdGhpcy5wbGF5YmFja1NwZWVkfXNldCBzcGVlZCh0KXtjb25zdCBuPXRoaXMucGxheWJhY2tTcGVlZCE9PXQ7biYmdGhpcy5kcml2ZXImJnRoaXMudXBkYXRlVGltZShXZS5ub3coKSksdGhpcy5wbGF5YmFja1NwZWVkPXQsbiYmdGhpcy5kcml2ZXImJih0aGlzLnRpbWU9b3QodGhpcy5jdXJyZW50VGltZSkpfXBsYXkoKXtpZih0aGlzLmlzU3RvcHBlZClyZXR1cm47Y29uc3R7ZHJpdmVyOnQ9WXcsc3RhcnRUaW1lOm59PXRoaXMub3B0aW9uczt0aGlzLmRyaXZlcnx8KHRoaXMuZHJpdmVyPXQocj0+dGhpcy50aWNrKHIpKSksdGhpcy5vcHRpb25zLm9uUGxheT8uKCk7Y29uc3Qgcz10aGlzLmRyaXZlci5ub3coKTt0aGlzLnN0YXRlPT09ImZpbmlzaGVkIj8odGhpcy51cGRhdGVGaW5pc2hlZCgpLHRoaXMuc3RhcnRUaW1lPXMpOnRoaXMuaG9sZFRpbWUhPT1udWxsP3RoaXMuc3RhcnRUaW1lPXMtdGhpcy5ob2xkVGltZTp0aGlzLnN0YXJ0VGltZXx8KHRoaXMuc3RhcnRUaW1lPW4/P3MpLHRoaXMuc3RhdGU9PT0iZmluaXNoZWQiJiZ0aGlzLnNwZWVkPDAmJih0aGlzLnN0YXJ0VGltZSs9dGhpcy5jYWxjdWxhdGVkRHVyYXRpb24pLHRoaXMuaG9sZFRpbWU9bnVsbCx0aGlzLnN0YXRlPSJydW5uaW5nIix0aGlzLmRyaXZlci5zdGFydCgpfXBhdXNlKCl7dGhpcy5zdGF0ZT0icGF1c2VkIix0aGlzLnVwZGF0ZVRpbWUoV2Uubm93KCkpLHRoaXMuaG9sZFRpbWU9dGhpcy5jdXJyZW50VGltZX1jb21wbGV0ZSgpe3RoaXMuc3RhdGUhPT0icnVubmluZyImJnRoaXMucGxheSgpLHRoaXMuc3RhdGU9ImZpbmlzaGVkIix0aGlzLmhvbGRUaW1lPW51bGx9ZmluaXNoKCl7dGhpcy5ub3RpZnlGaW5pc2hlZCgpLHRoaXMudGVhcmRvd24oKSx0aGlzLnN0YXRlPSJmaW5pc2hlZCIsdGhpcy5vcHRpb25zLm9uQ29tcGxldGU/LigpfWNhbmNlbCgpe3RoaXMuaG9sZFRpbWU9bnVsbCx0aGlzLnN0YXJ0VGltZT0wLHRoaXMudGljaygwKSx0aGlzLnRlYXJkb3duKCksdGhpcy5vcHRpb25zLm9uQ2FuY2VsPy4oKX10ZWFyZG93bigpe3RoaXMuc3RhdGU9ImlkbGUiLHRoaXMuc3RvcERyaXZlcigpLHRoaXMuc3RhcnRUaW1lPXRoaXMuaG9sZFRpbWU9bnVsbH1zdG9wRHJpdmVyKCl7dGhpcy5kcml2ZXImJih0aGlzLmRyaXZlci5zdG9wKCksdGhpcy5kcml2ZXI9dm9pZCAwKX1zYW1wbGUodCl7cmV0dXJuIHRoaXMuc3RhcnRUaW1lPTAsdGhpcy50aWNrKHQsITApfWF0dGFjaFRpbWVsaW5lKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuYWxsb3dGbGF0dGVuJiYodGhpcy5vcHRpb25zLnR5cGU9ImtleWZyYW1lcyIsdGhpcy5vcHRpb25zLmVhc2U9ImxpbmVhciIsdGhpcy5pbml0QW5pbWF0aW9uKCkpLHRoaXMuZHJpdmVyPy5zdG9wKCksdC5vYnNlcnZlKHRoaXMpfX1mdW5jdGlvbiBoMShlKXtmb3IobGV0IHQ9MTt0PGUubGVuZ3RoO3QrKyllW3RdPz8oZVt0XT1lW3QtMV0pfWNvbnN0IGtuPWU9PmUqMTgwL01hdGguUEksR289ZT0+e2NvbnN0IHQ9a24oTWF0aC5hdGFuMihlWzFdLGVbMF0pKTtyZXR1cm4gWW8odCl9LHAxPXt4OjQseTo1LHRyYW5zbGF0ZVg6NCx0cmFuc2xhdGVZOjUsc2NhbGVYOjAsc2NhbGVZOjMsc2NhbGU6ZT0+KE1hdGguYWJzKGVbMF0pK01hdGguYWJzKGVbM10pKS8yLHJvdGF0ZTpHbyxyb3RhdGVaOkdvLHNrZXdYOmU9PmtuKE1hdGguYXRhbihlWzFdKSksc2tld1k6ZT0+a24oTWF0aC5hdGFuKGVbMl0pKSxza2V3OmU9PihNYXRoLmFicyhlWzFdKStNYXRoLmFicyhlWzJdKSkvMn0sWW89ZT0+KGU9ZSUzNjAsZTwwJiYoZSs9MzYwKSxlKSxrYz1HbyxOYz1lPT5NYXRoLnNxcnQoZVswXSplWzBdK2VbMV0qZVsxXSksUmM9ZT0+TWF0aC5zcXJ0KGVbNF0qZVs0XStlWzVdKmVbNV0pLG0xPXt4OjEyLHk6MTMsejoxNCx0cmFuc2xhdGVYOjEyLHRyYW5zbGF0ZVk6MTMsdHJhbnNsYXRlWjoxNCxzY2FsZVg6TmMsc2NhbGVZOlJjLHNjYWxlOmU9PihOYyhlKStSYyhlKSkvMixyb3RhdGVYOmU9PllvKGtuKE1hdGguYXRhbjIoZVs2XSxlWzVdKSkpLHJvdGF0ZVk6ZT0+WW8oa24oTWF0aC5hdGFuMigtZVsyXSxlWzBdKSkpLHJvdGF0ZVo6a2Mscm90YXRlOmtjLHNrZXdYOmU9PmtuKE1hdGguYXRhbihlWzRdKSksc2tld1k6ZT0+a24oTWF0aC5hdGFuKGVbMV0pKSxza2V3OmU9PihNYXRoLmFicyhlWzFdKStNYXRoLmFicyhlWzRdKSkvMn07ZnVuY3Rpb24gWG8oZSl7cmV0dXJuIGUuaW5jbHVkZXMoInNjYWxlIik/MTowfWZ1bmN0aW9uIFFvKGUsdCl7aWYoIWV8fGU9PT0ibm9uZSIpcmV0dXJuIFhvKHQpO2NvbnN0IG49ZS5tYXRjaCgvXm1hdHJpeDNkXCgoWy1cZC5lXHMsXSspXCkkL3UpO2xldCBzLHI7aWYobilzPW0xLHI9bjtlbHNle2NvbnN0IGw9ZS5tYXRjaCgvXm1hdHJpeFwoKFstXGQuZVxzLF0rKVwpJC91KTtzPXAxLHI9bH1pZighcilyZXR1cm4gWG8odCk7Y29uc3QgaT1zW3RdLG89clsxXS5zcGxpdCgiLCIpLm1hcCh5MSk7cmV0dXJuIHR5cGVvZiBpPT0iZnVuY3Rpb24iP2kobyk6b1tpXX1jb25zdCBnMT0oZSx0KT0+e2NvbnN0e3RyYW5zZm9ybTpuPSJub25lIn09Z2V0Q29tcHV0ZWRTdHlsZShlKTtyZXR1cm4gUW8obix0KX07ZnVuY3Rpb24geTEoZSl7cmV0dXJuIHBhcnNlRmxvYXQoZS50cmltKCkpfWNvbnN0IFBzPVsidHJhbnNmb3JtUGVyc3BlY3RpdmUiLCJ4IiwieSIsInoiLCJ0cmFuc2xhdGVYIiwidHJhbnNsYXRlWSIsInRyYW5zbGF0ZVoiLCJzY2FsZSIsInNjYWxlWCIsInNjYWxlWSIsInJvdGF0ZSIsInJvdGF0ZVgiLCJyb3RhdGVZIiwicm90YXRlWiIsInNrZXciLCJza2V3WCIsInNrZXdZIl0sanM9bmV3IFNldChbLi4uUHMsInBhdGhSb3RhdGlvbiJdKSxEYz1lPT5lPT09U3N8fGU9PT1XLHYxPW5ldyBTZXQoWyJ4IiwieSIsInoiXSkseDE9UHMuZmlsdGVyKGU9PiF2MS5oYXMoZSkpO2Z1bmN0aW9uIGIxKGUpe2NvbnN0IHQ9W107cmV0dXJuIHgxLmZvckVhY2gobj0+e2NvbnN0IHM9ZS5nZXRWYWx1ZShuKTtzIT09dm9pZCAwJiYodC5wdXNoKFtuLHMuZ2V0KCldKSxzLnNldChuLnN0YXJ0c1dpdGgoInNjYWxlIik/MTowKSl9KSx0fWNvbnN0IHVuPXt3aWR0aDooe3g6ZX0se3BhZGRpbmdMZWZ0OnQ9IjAiLHBhZGRpbmdSaWdodDpuPSIwIixib3hTaXppbmc6c30pPT57Y29uc3Qgcj1lLm1heC1lLm1pbjtyZXR1cm4gcz09PSJib3JkZXItYm94Ij9yOnItcGFyc2VGbG9hdCh0KS1wYXJzZUZsb2F0KG4pfSxoZWlnaHQ6KHt5OmV9LHtwYWRkaW5nVG9wOnQ9IjAiLHBhZGRpbmdCb3R0b206bj0iMCIsYm94U2l6aW5nOnN9KT0+e2NvbnN0IHI9ZS5tYXgtZS5taW47cmV0dXJuIHM9PT0iYm9yZGVyLWJveCI/cjpyLXBhcnNlRmxvYXQodCktcGFyc2VGbG9hdChuKX0sdG9wOihlLHt0b3A6dH0pPT5wYXJzZUZsb2F0KHQpLGxlZnQ6KGUse2xlZnQ6dH0pPT5wYXJzZUZsb2F0KHQpLGJvdHRvbTooe3k6ZX0se3RvcDp0fSk9PnBhcnNlRmxvYXQodCkrKGUubWF4LWUubWluKSxyaWdodDooe3g6ZX0se2xlZnQ6dH0pPT5wYXJzZUZsb2F0KHQpKyhlLm1heC1lLm1pbikseDooZSx7dHJhbnNmb3JtOnR9KT0+UW8odCwieCIpLHk6KGUse3RyYW5zZm9ybTp0fSk9PlFvKHQsInkiKX07dW4udHJhbnNsYXRlWD11bi54O3VuLnRyYW5zbGF0ZVk9dW4ueTtjb25zdCBMbj1uZXcgU2V0O2xldCBKbz0hMSxabz0hMSxlYT0hMTtmdW5jdGlvbiBycCgpe2lmKFpvKXtjb25zdCBlPUFycmF5LmZyb20oTG4pLmZpbHRlcihzPT5zLm5lZWRzTWVhc3VyZW1lbnQpLHQ9bmV3IFNldChlLm1hcChzPT5zLmVsZW1lbnQpKSxuPW5ldyBNYXA7dC5mb3JFYWNoKHM9Pntjb25zdCByPWIxKHMpO3IubGVuZ3RoJiYobi5zZXQocyxyKSxzLnJlbmRlcigpKX0pLGUuZm9yRWFjaChzPT5zLm1lYXN1cmVJbml0aWFsU3RhdGUoKSksdC5mb3JFYWNoKHM9PntzLnJlbmRlcigpO2NvbnN0IHI9bi5nZXQocyk7ciYmci5mb3JFYWNoKChbaSxvXSk9PntzLmdldFZhbHVlKGkpPy5zZXQobyl9KX0pLGUuZm9yRWFjaChzPT5zLm1lYXN1cmVFbmRTdGF0ZSgpKSxlLmZvckVhY2gocz0+e3Muc3VzcGVuZGVkU2Nyb2xsWSE9PXZvaWQgMCYmd2luZG93LnNjcm9sbFRvKDAscy5zdXNwZW5kZWRTY3JvbGxZKX0pfVpvPSExLEpvPSExLExuLmZvckVhY2goZT0+ZS5jb21wbGV0ZShlYSkpLExuLmNsZWFyKCl9ZnVuY3Rpb24gaXAoKXtMbi5mb3JFYWNoKGU9PntlLnJlYWRLZXlmcmFtZXMoKSxlLm5lZWRzTWVhc3VyZW1lbnQmJihabz0hMCl9KX1mdW5jdGlvbiB3MSgpe2VhPSEwLGlwKCkscnAoKSxlYT0hMX1jbGFzcyB1bHtjb25zdHJ1Y3Rvcih0LG4scyxyLGksbz0hMSl7dGhpcy5zdGF0ZT0icGVuZGluZyIsdGhpcy5pc0FzeW5jPSExLHRoaXMubmVlZHNNZWFzdXJlbWVudD0hMSx0aGlzLnVucmVzb2x2ZWRLZXlmcmFtZXM9Wy4uLnRdLHRoaXMub25Db21wbGV0ZT1uLHRoaXMubmFtZT1zLHRoaXMubW90aW9uVmFsdWU9cix0aGlzLmVsZW1lbnQ9aSx0aGlzLmlzQXN5bmM9b31zY2hlZHVsZVJlc29sdmUoKXt0aGlzLnN0YXRlPSJzY2hlZHVsZWQiLHRoaXMuaXNBc3luYz8oTG4uYWRkKHRoaXMpLEpvfHwoSm89ITAsZGUucmVhZChpcCksZGUucmVzb2x2ZUtleWZyYW1lcyhycCkpKToodGhpcy5yZWFkS2V5ZnJhbWVzKCksdGhpcy5jb21wbGV0ZSgpKX1yZWFkS2V5ZnJhbWVzKCl7Y29uc3R7dW5yZXNvbHZlZEtleWZyYW1lczp0LG5hbWU6bixlbGVtZW50OnMsbW90aW9uVmFsdWU6cn09dGhpcztpZih0WzBdPT09bnVsbCl7Y29uc3QgaT1yPy5nZXQoKSxvPXRbdC5sZW5ndGgtMV07aWYoaSE9PXZvaWQgMCl0WzBdPWk7ZWxzZSBpZihzJiZuKXtjb25zdCBsPXMucmVhZFZhbHVlKG4sbyk7bCE9bnVsbCYmKHRbMF09bCl9dFswXT09PXZvaWQgMCYmKHRbMF09byksciYmaT09PXZvaWQgMCYmci5zZXQodFswXSl9aDEodCl9c2V0RmluYWxLZXlmcmFtZSgpe31tZWFzdXJlSW5pdGlhbFN0YXRlKCl7fXJlbmRlckVuZFN0eWxlcygpe31tZWFzdXJlRW5kU3RhdGUoKXt9Y29tcGxldGUodD0hMSl7dGhpcy5zdGF0ZT0iY29tcGxldGUiLHRoaXMub25Db21wbGV0ZSh0aGlzLnVucmVzb2x2ZWRLZXlmcmFtZXMsdGhpcy5maW5hbEtleWZyYW1lLHQpLExuLmRlbGV0ZSh0aGlzKX1jYW5jZWwoKXt0aGlzLnN0YXRlPT09InNjaGVkdWxlZCImJihMbi5kZWxldGUodGhpcyksdGhpcy5zdGF0ZT0icGVuZGluZyIpfXJlc3VtZSgpe3RoaXMuc3RhdGU9PT0icGVuZGluZyImJnRoaXMuc2NoZWR1bGVSZXNvbHZlKCl9fWNvbnN0IEMxPWU9PmUuc3RhcnRzV2l0aCgiLS0iKTtmdW5jdGlvbiBvcChlLHQsbil7QzEodCk/ZS5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4pOmUuc3R5bGVbdF09bn1jb25zdCBUMT17fTtmdW5jdGlvbiBhcChlLHQpe2NvbnN0IG49T2goZSk7cmV0dXJuKCk9PlQxW3RdPz9uKCl9Y29uc3QgUzE9YXAoKCk9PndpbmRvdy5TY3JvbGxUaW1lbGluZSE9PXZvaWQgMCwic2Nyb2xsVGltZWxpbmUiKSxscD1hcCgoKT0+e3RyeXtkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKS5hbmltYXRlKHtvcGFjaXR5OjB9LHtlYXNpbmc6ImxpbmVhcigwLCAxKSJ9KX1jYXRjaHtyZXR1cm4hMX1yZXR1cm4hMH0sImxpbmVhckVhc2luZyIpLExzPShbZSx0LG4sc10pPT5gY3ViaWMtYmV6aWVyKCR7ZX0sICR7dH0sICR7bn0sICR7c30pYCxNYz17bGluZWFyOiJsaW5lYXIiLGVhc2U6ImVhc2UiLGVhc2VJbjoiZWFzZS1pbiIsZWFzZU91dDoiZWFzZS1vdXQiLGVhc2VJbk91dDoiZWFzZS1pbi1vdXQiLGNpcmNJbjpMcyhbMCwuNjUsLjU1LDFdKSxjaXJjT3V0OkxzKFsuNTUsMCwxLC40NV0pLGJhY2tJbjpMcyhbLjMxLC4wMSwuNjYsLS41OV0pLGJhY2tPdXQ6THMoWy4zMywxLjUzLC42OSwuOTldKX07ZnVuY3Rpb24gY3AoZSx0KXtpZihlKXJldHVybiB0eXBlb2YgZT09ImZ1bmN0aW9uIj9scCgpP3RwKGUsdCk6ImVhc2Utb3V0IjpIaChlKT9McyhlKTpBcnJheS5pc0FycmF5KGUpP2UubWFwKG49PmNwKG4sdCl8fE1jLmVhc2VPdXQpOk1jW2VdfWZ1bmN0aW9uIFAxKGUsdCxuLHtkZWxheTpzPTAsZHVyYXRpb246cj0zMDAscmVwZWF0Omk9MCxyZXBlYXRUeXBlOm89Imxvb3AiLGVhc2U6bD0iZWFzZU91dCIsdGltZXM6ZH09e30sYz12b2lkIDApe2NvbnN0IHU9e1t0XTpufTtkJiYodS5vZmZzZXQ9ZCk7Y29uc3QgZj1jcChsLHIpO0FycmF5LmlzQXJyYXkoZikmJih1LmVhc2luZz1mKTtjb25zdCBoPXtkZWxheTpzLGR1cmF0aW9uOnIsZWFzaW5nOkFycmF5LmlzQXJyYXkoZik/ImxpbmVhciI6ZixmaWxsOiJib3RoIixpdGVyYXRpb25zOmkrMSxkaXJlY3Rpb246bz09PSJyZXZlcnNlIj8iYWx0ZXJuYXRlIjoibm9ybWFsIn07cmV0dXJuIGMmJihoLnBzZXVkb0VsZW1lbnQ9YyksZS5hbmltYXRlKHUsaCl9ZnVuY3Rpb24gZHAoZSl7cmV0dXJuIHR5cGVvZiBlPT0iZnVuY3Rpb24iJiYiYXBwbHlUb09wdGlvbnMiaW4gZX1mdW5jdGlvbiBqMSh7dHlwZTplLC4uLnR9KXtyZXR1cm4gZHAoZSkmJmxwKCk/ZS5hcHBseVRvT3B0aW9ucyh0KToodC5kdXJhdGlvbj8/KHQuZHVyYXRpb249MzAwKSx0LmVhc2U/Pyh0LmVhc2U9ImVhc2VPdXQiKSx0KX1jbGFzcyB1cCBleHRlbmRzIGRse2NvbnN0cnVjdG9yKHQpe2lmKHN1cGVyKCksdGhpcy5maW5pc2hlZFRpbWU9bnVsbCx0aGlzLmlzU3RvcHBlZD0hMSx0aGlzLm1hbnVhbFN0YXJ0VGltZT1udWxsLCF0KXJldHVybjtjb25zdHtlbGVtZW50Om4sbmFtZTpzLGtleWZyYW1lczpyLHBzZXVkb0VsZW1lbnQ6aSxhbGxvd0ZsYXR0ZW46bz0hMSxmaW5hbEtleWZyYW1lOmwsb25Db21wbGV0ZTpkfT10O3RoaXMuaXNQc2V1ZG9FbGVtZW50PSEhaSx0aGlzLmFsbG93RmxhdHRlbj1vLHRoaXMub3B0aW9ucz10LHRsKHR5cGVvZiB0LnR5cGUhPSJzdHJpbmciKTtjb25zdCBjPWoxKHQpO3RoaXMuYW5pbWF0aW9uPVAxKG4scyxyLGMsaSksYy5hdXRvcGxheT09PSExJiZ0aGlzLmFuaW1hdGlvbi5wYXVzZSgpLHRoaXMuYW5pbWF0aW9uLm9uZmluaXNoPSgpPT57aWYodGhpcy5maW5pc2hlZFRpbWU9dGhpcy50aW1lLCFpKXtjb25zdCB1PVJpKHIsdGhpcy5vcHRpb25zLGwsdGhpcy5zcGVlZCk7dGhpcy51cGRhdGVNb3Rpb25WYWx1ZSYmdGhpcy51cGRhdGVNb3Rpb25WYWx1ZSh1KSxvcChuLHMsdSksdGhpcy5hbmltYXRpb24uY2FuY2VsKCl9ZD8uKCksdGhpcy5ub3RpZnlGaW5pc2hlZCgpfX1wbGF5KCl7dGhpcy5pc1N0b3BwZWR8fCh0aGlzLm1hbnVhbFN0YXJ0VGltZT1udWxsLHRoaXMuYW5pbWF0aW9uLnBsYXkoKSx0aGlzLnN0YXRlPT09ImZpbmlzaGVkIiYmdGhpcy51cGRhdGVGaW5pc2hlZCgpKX1wYXVzZSgpe3RoaXMuYW5pbWF0aW9uLnBhdXNlKCl9Y29tcGxldGUoKXt0aGlzLmFuaW1hdGlvbi5maW5pc2g/LigpfWNhbmNlbCgpe3RyeXt0aGlzLmFuaW1hdGlvbi5jYW5jZWwoKX1jYXRjaHt9fXN0b3AoKXtpZih0aGlzLmlzU3RvcHBlZClyZXR1cm47dGhpcy5pc1N0b3BwZWQ9ITA7Y29uc3R7c3RhdGU6dH09dGhpczt0PT09ImlkbGUifHx0PT09ImZpbmlzaGVkInx8KHRoaXMudXBkYXRlTW90aW9uVmFsdWU/dGhpcy51cGRhdGVNb3Rpb25WYWx1ZSgpOnRoaXMuY29tbWl0U3R5bGVzKCksdGhpcy5pc1BzZXVkb0VsZW1lbnR8fHRoaXMuY2FuY2VsKCkpfWNvbW1pdFN0eWxlcygpe2NvbnN0IHQ9dGhpcy5vcHRpb25zPy5lbGVtZW50OyF0aGlzLmlzUHNldWRvRWxlbWVudCYmdD8uaXNDb25uZWN0ZWQmJnRoaXMuYW5pbWF0aW9uLmNvbW1pdFN0eWxlcz8uKCl9Z2V0IGR1cmF0aW9uKCl7Y29uc3QgdD10aGlzLmFuaW1hdGlvbi5lZmZlY3Q/LmdldENvbXB1dGVkVGltaW5nPy4oKS5kdXJhdGlvbnx8MDtyZXR1cm4gb3QoTnVtYmVyKHQpKX1nZXQgaXRlcmF0aW9uRHVyYXRpb24oKXtjb25zdHtkZWxheTp0PTB9PXRoaXMub3B0aW9uc3x8e307cmV0dXJuIHRoaXMuZHVyYXRpb24rb3QodCl9Z2V0IHRpbWUoKXtyZXR1cm4gb3QoTnVtYmVyKHRoaXMuYW5pbWF0aW9uLmN1cnJlbnRUaW1lKXx8MCl9c2V0IHRpbWUodCl7Y29uc3Qgbj10aGlzLmZpbmlzaGVkVGltZSE9PW51bGw7dGhpcy5tYW51YWxTdGFydFRpbWU9bnVsbCx0aGlzLmZpbmlzaGVkVGltZT1udWxsLHRoaXMuYW5pbWF0aW9uLmN1cnJlbnRUaW1lPXR0KHQpLG4mJnRoaXMuYW5pbWF0aW9uLnBhdXNlKCl9Z2V0IHNwZWVkKCl7cmV0dXJuIHRoaXMuYW5pbWF0aW9uLnBsYXliYWNrUmF0ZX1zZXQgc3BlZWQodCl7dDwwJiYodGhpcy5maW5pc2hlZFRpbWU9bnVsbCksdGhpcy5hbmltYXRpb24ucGxheWJhY2tSYXRlPXR9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuZmluaXNoZWRUaW1lIT09bnVsbD8iZmluaXNoZWQiOnRoaXMuYW5pbWF0aW9uLnBsYXlTdGF0ZX1nZXQgc3RhcnRUaW1lKCl7cmV0dXJuIHRoaXMubWFudWFsU3RhcnRUaW1lPz9OdW1iZXIodGhpcy5hbmltYXRpb24uc3RhcnRUaW1lKX1zZXQgc3RhcnRUaW1lKHQpe3RoaXMubWFudWFsU3RhcnRUaW1lPXRoaXMuYW5pbWF0aW9uLnN0YXJ0VGltZT10fWF0dGFjaFRpbWVsaW5lKHt0aW1lbGluZTp0LHJhbmdlU3RhcnQ6bixyYW5nZUVuZDpzLG9ic2VydmU6cn0pe3JldHVybiB0aGlzLmFsbG93RmxhdHRlbiYmdGhpcy5hbmltYXRpb24uZWZmZWN0Py51cGRhdGVUaW1pbmcoe2Vhc2luZzoibGluZWFyIn0pLHRoaXMuYW5pbWF0aW9uLm9uZmluaXNoPW51bGwsdCYmUzEoKT8odGhpcy5hbmltYXRpb24udGltZWxpbmU9dCxuJiYodGhpcy5hbmltYXRpb24ucmFuZ2VTdGFydD1uKSxzJiYodGhpcy5hbmltYXRpb24ucmFuZ2VFbmQ9cyksbHQpOnIodGhpcyl9fWNvbnN0IGZwPXthbnRpY2lwYXRlOldoLGJhY2tJbk91dDpCaCxjaXJjSW5PdXQ6VWh9O2Z1bmN0aW9uIEUxKGUpe3JldHVybiBlIGluIGZwfWZ1bmN0aW9uIEExKGUpe3R5cGVvZiBlLmVhc2U9PSJzdHJpbmciJiZFMShlLmVhc2UpJiYoZS5lYXNlPWZwW2UuZWFzZV0pfWNvbnN0IGlvPTEwO2NsYXNzIGsxIGV4dGVuZHMgdXB7Y29uc3RydWN0b3IodCl7QTEodCksc3AodCksc3VwZXIodCksdC5zdGFydFRpbWUhPT12b2lkIDAmJnQuYXV0b3BsYXkhPT0hMSYmKHRoaXMuc3RhcnRUaW1lPXQuc3RhcnRUaW1lKSx0aGlzLm9wdGlvbnM9dH11cGRhdGVNb3Rpb25WYWx1ZSh0KXtjb25zdHttb3Rpb25WYWx1ZTpuLG9uVXBkYXRlOnMsb25Db21wbGV0ZTpyLGVsZW1lbnQ6aSwuLi5vfT10aGlzLm9wdGlvbnM7aWYoIW4pcmV0dXJuO2lmKHQhPT12b2lkIDApe24uc2V0KHQpO3JldHVybn1jb25zdCBsPW5ldyBmaSh7Li4ubyxhdXRvcGxheTohMX0pLGQ9TWF0aC5tYXgoaW8sV2Uubm93KCktdGhpcy5zdGFydFRpbWUpLGM9RHQoMCxpbyxkLWlvKSx1PWwuc2FtcGxlKGQpLnZhbHVlLHtuYW1lOmZ9PXRoaXMub3B0aW9ucztpJiZmJiZvcChpLGYsdSksbi5zZXRXaXRoVmVsb2NpdHkobC5zYW1wbGUoTWF0aC5tYXgoMCxkLWMpKS52YWx1ZSx1LGMpLGwuc3RvcCgpfX1jb25zdCBPYz0oZSx0KT0+dD09PSJ6SW5kZXgiPyExOiEhKHR5cGVvZiBlPT0ibnVtYmVyInx8QXJyYXkuaXNBcnJheShlKXx8dHlwZW9mIGU9PSJzdHJpbmciJiYoeXQudGVzdChlKXx8ZT09PSIwIikmJiFlLnN0YXJ0c1dpdGgoInVybCgiKSk7ZnVuY3Rpb24gTjEoZSl7Y29uc3QgdD1lWzBdO2lmKGUubGVuZ3RoPT09MSlyZXR1cm4hMDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKylpZihlW25dIT09dClyZXR1cm4hMH1mdW5jdGlvbiBSMShlLHQsbixzKXtjb25zdCByPWVbMF07aWYocj09PW51bGwpcmV0dXJuITE7aWYodD09PSJkaXNwbGF5Inx8dD09PSJ2aXNpYmlsaXR5IilyZXR1cm4hMDtjb25zdCBpPWVbZS5sZW5ndGgtMV0sbz1PYyhyLHQpLGw9T2MoaSx0KTtyZXR1cm4hb3x8IWw/ITE6TjEoZSl8fChuPT09InNwcmluZyJ8fGRwKG4pKSYmc31mdW5jdGlvbiB0YShlKXtlLmR1cmF0aW9uPTAsZS50eXBlPSJrZXlmcmFtZXMifWNvbnN0IGhwPW5ldyBTZXQoWyJvcGFjaXR5IiwiY2xpcFBhdGgiLCJmaWx0ZXIiLCJ0cmFuc2Zvcm0iXSksRDE9L14oPzpva2xjaHxva2xhYnxsYWJ8bGNofGNvbG9yfGNvbG9yLW1peHxsaWdodC1kYXJrKVwoLztmdW5jdGlvbiBNMShlKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKylpZih0eXBlb2YgZVt0XT09InN0cmluZyImJkQxLnRlc3QoZVt0XSkpcmV0dXJuITA7cmV0dXJuITF9Y29uc3QgTzE9bmV3IFNldChbImNvbG9yIiwiYmFja2dyb3VuZENvbG9yIiwib3V0bGluZUNvbG9yIiwiZmlsbCIsInN0cm9rZSIsImJvcmRlckNvbG9yIiwiYm9yZGVyVG9wQ29sb3IiLCJib3JkZXJSaWdodENvbG9yIiwiYm9yZGVyQm90dG9tQ29sb3IiLCJib3JkZXJMZWZ0Q29sb3IiXSksSTE9T2goKCk9Pk9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKEVsZW1lbnQucHJvdG90eXBlLCJhbmltYXRlIikpO2Z1bmN0aW9uIEwxKGUpe2NvbnN0e21vdGlvblZhbHVlOnQsbmFtZTpuLHJlcGVhdERlbGF5OnMscmVwZWF0VHlwZTpyLGRhbXBpbmc6aSx0eXBlOm8sa2V5ZnJhbWVzOmx9PWU7aWYoISh0Py5vd25lcj8uY3VycmVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSlyZXR1cm4hMTtjb25zdHtvblVwZGF0ZTpjLHRyYW5zZm9ybVRlbXBsYXRlOnV9PXQub3duZXIuZ2V0UHJvcHMoKTtyZXR1cm4gSTEoKSYmbiYmKGhwLmhhcyhuKXx8TzEuaGFzKG4pJiZNMShsKSkmJihuIT09InRyYW5zZm9ybSJ8fCF1KSYmIWMmJiFzJiZyIT09Im1pcnJvciImJmkhPT0wJiZvIT09ImluZXJ0aWEifWNvbnN0IEYxPTQwO2NsYXNzIFYxIGV4dGVuZHMgZGx7Y29uc3RydWN0b3Ioe2F1dG9wbGF5OnQ9ITAsZGVsYXk6bj0wLHR5cGU6cz0ia2V5ZnJhbWVzIixyZXBlYXQ6cj0wLHJlcGVhdERlbGF5Omk9MCxyZXBlYXRUeXBlOm89Imxvb3AiLGtleWZyYW1lczpsLG5hbWU6ZCxtb3Rpb25WYWx1ZTpjLGVsZW1lbnQ6dSwuLi5mfSl7c3VwZXIoKSx0aGlzLnN0b3A9KCk9Pnt0aGlzLl9hbmltYXRpb24mJih0aGlzLl9hbmltYXRpb24uc3RvcCgpLHRoaXMuc3RvcFRpbWVsaW5lPy4oKSksdGhpcy5rZXlmcmFtZVJlc29sdmVyPy5jYW5jZWwoKX0sdGhpcy5jcmVhdGVkQXQ9V2Uubm93KCk7Y29uc3QgaD17YXV0b3BsYXk6dCxkZWxheTpuLHR5cGU6cyxyZXBlYXQ6cixyZXBlYXREZWxheTppLHJlcGVhdFR5cGU6byxuYW1lOmQsbW90aW9uVmFsdWU6YyxlbGVtZW50OnUsLi4uZn0scD11Py5LZXlmcmFtZVJlc29sdmVyfHx1bDt0aGlzLmtleWZyYW1lUmVzb2x2ZXI9bmV3IHAobCwoZyx5LHYpPT50aGlzLm9uS2V5ZnJhbWVzUmVzb2x2ZWQoZyx5LGgsIXYpLGQsYyx1KSx0aGlzLmtleWZyYW1lUmVzb2x2ZXI/LnNjaGVkdWxlUmVzb2x2ZSgpfW9uS2V5ZnJhbWVzUmVzb2x2ZWQodCxuLHMscil7dGhpcy5rZXlmcmFtZVJlc29sdmVyPXZvaWQgMDtjb25zdHtuYW1lOmksdHlwZTpvLHZlbG9jaXR5OmwsZGVsYXk6ZCxpc0hhbmRvZmY6YyxvblVwZGF0ZTp1fT1zO3RoaXMucmVzb2x2ZWRBdD1XZS5ub3coKTtsZXQgZj0hMDtSMSh0LGksbyxsKXx8KGY9ITEsKG1uLmluc3RhbnRBbmltYXRpb25zfHwhZCkmJnU/LihSaSh0LHMsbikpLHRbMF09dFt0Lmxlbmd0aC0xXSx0YShzKSxzLnJlcGVhdD0wKTtjb25zdCBwPXtzdGFydFRpbWU6cj90aGlzLnJlc29sdmVkQXQ/dGhpcy5yZXNvbHZlZEF0LXRoaXMuY3JlYXRlZEF0PkYxP3RoaXMucmVzb2x2ZWRBdDp0aGlzLmNyZWF0ZWRBdDp0aGlzLmNyZWF0ZWRBdDp2b2lkIDAsZmluYWxLZXlmcmFtZTpuLC4uLnMsa2V5ZnJhbWVzOnR9LGc9ZiYmIWMmJkwxKHApLHk9cC5tb3Rpb25WYWx1ZT8ub3duZXI/LmN1cnJlbnQ7bGV0IHY7aWYoZyl0cnl7dj1uZXcgazEoey4uLnAsZWxlbWVudDp5fSl9Y2F0Y2h7dj1uZXcgZmkocCl9ZWxzZSB2PW5ldyBmaShwKTt2LmZpbmlzaGVkLnRoZW4oKCk9Pnt0aGlzLm5vdGlmeUZpbmlzaGVkKCl9KS5jYXRjaChsdCksdGhpcy5wZW5kaW5nVGltZWxpbmUmJih0aGlzLnN0b3BUaW1lbGluZT12LmF0dGFjaFRpbWVsaW5lKHRoaXMucGVuZGluZ1RpbWVsaW5lKSx0aGlzLnBlbmRpbmdUaW1lbGluZT12b2lkIDApLHRoaXMuX2FuaW1hdGlvbj12fWdldCBmaW5pc2hlZCgpe3JldHVybiB0aGlzLl9hbmltYXRpb24/dGhpcy5hbmltYXRpb24uZmluaXNoZWQ6dGhpcy5fZmluaXNoZWR9dGhlbih0LG4pe3JldHVybiB0aGlzLmZpbmlzaGVkLmZpbmFsbHkodCkudGhlbigoKT0+e30pfWdldCBhbmltYXRpb24oKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9ufHwodGhpcy5rZXlmcmFtZVJlc29sdmVyPy5yZXN1bWUoKSx3MSgpKSx0aGlzLl9hbmltYXRpb259Z2V0IGR1cmF0aW9uKCl7cmV0dXJuIHRoaXMuYW5pbWF0aW9uLmR1cmF0aW9ufWdldCBpdGVyYXRpb25EdXJhdGlvbigpe3JldHVybiB0aGlzLmFuaW1hdGlvbi5pdGVyYXRpb25EdXJhdGlvbn1nZXQgdGltZSgpe3JldHVybiB0aGlzLmFuaW1hdGlvbi50aW1lfXNldCB0aW1lKHQpe3RoaXMuYW5pbWF0aW9uLnRpbWU9dH1nZXQgc3BlZWQoKXtyZXR1cm4gdGhpcy5hbmltYXRpb24uc3BlZWR9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuYW5pbWF0aW9uLnN0YXRlfXNldCBzcGVlZCh0KXt0aGlzLmFuaW1hdGlvbi5zcGVlZD10fWdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5hbmltYXRpb24uc3RhcnRUaW1lfWF0dGFjaFRpbWVsaW5lKHQpe3JldHVybiB0aGlzLl9hbmltYXRpb24/dGhpcy5zdG9wVGltZWxpbmU9dGhpcy5hbmltYXRpb24uYXR0YWNoVGltZWxpbmUodCk6dGhpcy5wZW5kaW5nVGltZWxpbmU9dCwoKT0+dGhpcy5zdG9wKCl9cGxheSgpe3RoaXMuYW5pbWF0aW9uLnBsYXkoKX1wYXVzZSgpe3RoaXMuYW5pbWF0aW9uLnBhdXNlKCl9Y29tcGxldGUoKXt0aGlzLmFuaW1hdGlvbi5jb21wbGV0ZSgpfWNhbmNlbCgpe3RoaXMuX2FuaW1hdGlvbiYmdGhpcy5hbmltYXRpb24uY2FuY2VsKCksdGhpcy5rZXlmcmFtZVJlc29sdmVyPy5jYW5jZWwoKX19ZnVuY3Rpb24gcHAoZSx0LG4scz0wLHI9MSl7Y29uc3QgaT1BcnJheS5mcm9tKGUpLnNvcnQoKGMsdSk9PmMuc29ydE5vZGVQb3NpdGlvbih1KSkuaW5kZXhPZih0KSxvPWUuc2l6ZSxsPShvLTEpKnM7cmV0dXJuIHR5cGVvZiBuPT0iZnVuY3Rpb24iP24oaSxvKTpyPT09MT9pKnM6bC1pKnN9Y29uc3QgSWM9MzAsXzE9ZT0+IWlzTmFOKHBhcnNlRmxvYXQoZSkpO2NsYXNzIEIxe2NvbnN0cnVjdG9yKHQsbj17fSl7dGhpcy5jYW5UcmFja1ZlbG9jaXR5PW51bGwsdGhpcy5ldmVudHM9e30sdGhpcy51cGRhdGVBbmROb3RpZnk9cz0+e2NvbnN0IHI9V2Uubm93KCk7aWYodGhpcy51cGRhdGVkQXQhPT1yJiZ0aGlzLnNldFByZXZGcmFtZVZhbHVlKCksdGhpcy5wcmV2PXRoaXMuY3VycmVudCx0aGlzLnNldEN1cnJlbnQocyksdGhpcy5jdXJyZW50IT09dGhpcy5wcmV2JiYodGhpcy5ldmVudHMuY2hhbmdlPy5ub3RpZnkodGhpcy5jdXJyZW50KSx0aGlzLmRlcGVuZGVudHMpKWZvcihjb25zdCBpIG9mIHRoaXMuZGVwZW5kZW50cylpLmRpcnR5KCl9LHRoaXMuaGFzQW5pbWF0ZWQ9ITEsdGhpcy5zZXRDdXJyZW50KHQpLHRoaXMub3duZXI9bi5vd25lcn1zZXRDdXJyZW50KHQpe3RoaXMuY3VycmVudD10LHRoaXMudXBkYXRlZEF0PVdlLm5vdygpLHRoaXMuY2FuVHJhY2tWZWxvY2l0eT09PW51bGwmJnQhPT12b2lkIDAmJih0aGlzLmNhblRyYWNrVmVsb2NpdHk9XzEodGhpcy5jdXJyZW50KSl9c2V0UHJldkZyYW1lVmFsdWUodD10aGlzLmN1cnJlbnQpe3RoaXMucHJldkZyYW1lVmFsdWU9dCx0aGlzLnByZXZVcGRhdGVkQXQ9dGhpcy51cGRhdGVkQXR9b25DaGFuZ2UodCl7cmV0dXJuIHRoaXMub24oImNoYW5nZSIsdCl9b24odCxuKXt0aGlzLmV2ZW50c1t0XXx8KHRoaXMuZXZlbnRzW3RdPW5ldyBubCk7Y29uc3Qgcz10aGlzLmV2ZW50c1t0XS5hZGQobik7cmV0dXJuIHQ9PT0iY2hhbmdlIj8oKT0+e3MoKSxkZS5yZWFkKCgpPT57dGhpcy5ldmVudHMuY2hhbmdlLmdldFNpemUoKXx8dGhpcy5zdG9wKCl9KX06c31jbGVhckxpc3RlbmVycygpe2Zvcihjb25zdCB0IGluIHRoaXMuZXZlbnRzKXRoaXMuZXZlbnRzW3RdLmNsZWFyKCl9YXR0YWNoKHQsbil7dGhpcy5wYXNzaXZlRWZmZWN0PXQsdGhpcy5zdG9wUGFzc2l2ZUVmZmVjdD1ufXNldCh0KXt0aGlzLnBhc3NpdmVFZmZlY3Q/dGhpcy5wYXNzaXZlRWZmZWN0KHQsdGhpcy51cGRhdGVBbmROb3RpZnkpOnRoaXMudXBkYXRlQW5kTm90aWZ5KHQpfXNldFdpdGhWZWxvY2l0eSh0LG4scyl7dGhpcy5zZXQobiksdGhpcy5wcmV2PXZvaWQgMCx0aGlzLnByZXZGcmFtZVZhbHVlPXQsdGhpcy5wcmV2VXBkYXRlZEF0PXRoaXMudXBkYXRlZEF0LXN9anVtcCh0LG49ITApe3RoaXMudXBkYXRlQW5kTm90aWZ5KHQpLHRoaXMucHJldj10LHRoaXMucHJldlVwZGF0ZWRBdD10aGlzLnByZXZGcmFtZVZhbHVlPXZvaWQgMCxuJiZ0aGlzLnN0b3AoKSx0aGlzLnN0b3BQYXNzaXZlRWZmZWN0JiZ0aGlzLnN0b3BQYXNzaXZlRWZmZWN0KCl9ZGlydHkoKXt0aGlzLmV2ZW50cy5jaGFuZ2U/Lm5vdGlmeSh0aGlzLmN1cnJlbnQpfWFkZERlcGVuZGVudCh0KXt0aGlzLmRlcGVuZGVudHN8fCh0aGlzLmRlcGVuZGVudHM9bmV3IFNldCksdGhpcy5kZXBlbmRlbnRzLmFkZCh0KX1yZW1vdmVEZXBlbmRlbnQodCl7dGhpcy5kZXBlbmRlbnRzJiZ0aGlzLmRlcGVuZGVudHMuZGVsZXRlKHQpfWdldCgpe3JldHVybiB0aGlzLmN1cnJlbnR9Z2V0UHJldmlvdXMoKXtyZXR1cm4gdGhpcy5wcmV2fWdldFZlbG9jaXR5KCl7Y29uc3QgdD1XZS5ub3coKTtpZighdGhpcy5jYW5UcmFja1ZlbG9jaXR5fHx0aGlzLnByZXZGcmFtZVZhbHVlPT09dm9pZCAwfHx0LXRoaXMudXBkYXRlZEF0PkljKXJldHVybiAwO2NvbnN0IG49TWF0aC5taW4odGhpcy51cGRhdGVkQXQtdGhpcy5wcmV2VXBkYXRlZEF0LEljKTtyZXR1cm4gSWgocGFyc2VGbG9hdCh0aGlzLmN1cnJlbnQpLXBhcnNlRmxvYXQodGhpcy5wcmV2RnJhbWVWYWx1ZSksbil9c3RhcnQodCl7cmV0dXJuIHRoaXMuc3RvcCgpLG5ldyBQcm9taXNlKG49Pnt0aGlzLmhhc0FuaW1hdGVkPSEwLHRoaXMuYW5pbWF0aW9uPXQobiksdGhpcy5ldmVudHMuYW5pbWF0aW9uU3RhcnQmJnRoaXMuZXZlbnRzLmFuaW1hdGlvblN0YXJ0Lm5vdGlmeSgpfSkudGhlbigoKT0+e3RoaXMuZXZlbnRzLmFuaW1hdGlvbkNvbXBsZXRlJiZ0aGlzLmV2ZW50cy5hbmltYXRpb25Db21wbGV0ZS5ub3RpZnkoKSx0aGlzLmNsZWFyQW5pbWF0aW9uKCl9KX1zdG9wKCl7dGhpcy5hbmltYXRpb24mJih0aGlzLmFuaW1hdGlvbi5zdG9wKCksdGhpcy5ldmVudHMuYW5pbWF0aW9uQ2FuY2VsJiZ0aGlzLmV2ZW50cy5hbmltYXRpb25DYW5jZWwubm90aWZ5KCkpLHRoaXMuY2xlYXJBbmltYXRpb24oKX1pc0FuaW1hdGluZygpe3JldHVybiEhdGhpcy5hbmltYXRpb259Y2xlYXJBbmltYXRpb24oKXtkZWxldGUgdGhpcy5hbmltYXRpb259ZGVzdHJveSgpe3RoaXMuZGVwZW5kZW50cz8uY2xlYXIoKSx0aGlzLmV2ZW50cy5kZXN0cm95Py5ub3RpZnkoKSx0aGlzLmNsZWFyTGlzdGVuZXJzKCksdGhpcy5zdG9wKCksdGhpcy5zdG9wUGFzc2l2ZUVmZmVjdCYmdGhpcy5zdG9wUGFzc2l2ZUVmZmVjdCgpfX1mdW5jdGlvbiB2cyhlLHQpe3JldHVybiBuZXcgQjEoZSx0KX1mdW5jdGlvbiBtcChlLHQpe2lmKGU/LmluaGVyaXQmJnQpe2NvbnN0e2luaGVyaXQ6biwuLi5zfT1lO3JldHVybnsuLi50LC4uLnN9fXJldHVybiBlfWZ1bmN0aW9uIGZsKGUsdCl7Y29uc3Qgbj1lPy5bdF0/P2U/LmRlZmF1bHQ/P2U7cmV0dXJuIG4hPT1lP21wKG4sZSk6bn1jb25zdCBXMT17dHlwZToic3ByaW5nIixzdGlmZm5lc3M6NTAwLGRhbXBpbmc6MjUscmVzdFNwZWVkOjEwfSx6MT1lPT4oe3R5cGU6InNwcmluZyIsc3RpZmZuZXNzOjU1MCxkYW1waW5nOmU9PT0wPzIqTWF0aC5zcXJ0KDU1MCk6MzAscmVzdFNwZWVkOjEwfSksVTE9e3R5cGU6ImtleWZyYW1lcyIsZHVyYXRpb246Ljh9LCQxPXt0eXBlOiJrZXlmcmFtZXMiLGVhc2U6Wy4yNSwuMSwuMzUsMV0sZHVyYXRpb246LjN9LEgxPShlLHtrZXlmcmFtZXM6dH0pPT50Lmxlbmd0aD4yP1UxOmpzLmhhcyhlKT9lLnN0YXJ0c1dpdGgoInNjYWxlIik/ejEodFsxXSk6VzE6JDEscTE9bmV3IFNldChbIndoZW4iLCJkZWxheSIsImRlbGF5Q2hpbGRyZW4iLCJzdGFnZ2VyQ2hpbGRyZW4iLCJzdGFnZ2VyRGlyZWN0aW9uIiwicmVwZWF0IiwicmVwZWF0VHlwZSIsInJlcGVhdERlbGF5IiwiZnJvbSIsImVsYXBzZWQiXSk7ZnVuY3Rpb24gSzEoZSl7Zm9yKGNvbnN0IHQgaW4gZSlpZighcTEuaGFzKHQpKXJldHVybiEwO3JldHVybiExfWNvbnN0IGhsPShlLHQsbixzPXt9LHIsaSk9Pm89Pntjb25zdCBsPWZsKHMsZSl8fHt9LGQ9bC5kZWxheXx8cy5kZWxheXx8MDtsZXR7ZWxhcHNlZDpjPTB9PXM7Yz1jLXR0KGQpO2NvbnN0IHU9e2tleWZyYW1lczpBcnJheS5pc0FycmF5KG4pP246W251bGwsbl0sZWFzZToiZWFzZU91dCIsdmVsb2NpdHk6dC5nZXRWZWxvY2l0eSgpLC4uLmwsZGVsYXk6LWMsb25VcGRhdGU6aD0+e3Quc2V0KGgpLGwub25VcGRhdGUmJmwub25VcGRhdGUoaCl9LG9uQ29tcGxldGU6KCk9PntvKCksbC5vbkNvbXBsZXRlJiZsLm9uQ29tcGxldGUoKX0sbmFtZTplLG1vdGlvblZhbHVlOnQsZWxlbWVudDppP3ZvaWQgMDpyfTtLMShsKXx8T2JqZWN0LmFzc2lnbih1LEgxKGUsdSkpLHUuZHVyYXRpb24mJih1LmR1cmF0aW9uPXR0KHUuZHVyYXRpb24pKSx1LnJlcGVhdERlbGF5JiYodS5yZXBlYXREZWxheT10dCh1LnJlcGVhdERlbGF5KSksdS5mcm9tIT09dm9pZCAwJiYodS5rZXlmcmFtZXNbMF09dS5mcm9tKTtsZXQgZj0hMTtpZigodS50eXBlPT09ITF8fHUuZHVyYXRpb249PT0wJiYhdS5yZXBlYXREZWxheSkmJih0YSh1KSx1LmRlbGF5PT09MCYmKGY9ITApKSwobW4uaW5zdGFudEFuaW1hdGlvbnN8fG1uLnNraXBBbmltYXRpb25zfHxyPy5zaG91bGRTa2lwQW5pbWF0aW9uc3x8bC5za2lwQW5pbWF0aW9ucykmJihmPSEwLHRhKHUpLHUuZGVsYXk9MCksdS5hbGxvd0ZsYXR0ZW49IWwudHlwZSYmIWwuZWFzZSxmJiYhaSYmdC5nZXQoKSE9PXZvaWQgMCl7Y29uc3QgaD1SaSh1LmtleWZyYW1lcyxsKTtpZihoIT09dm9pZCAwKXtkZS51cGRhdGUoKCk9Pnt1Lm9uVXBkYXRlKGgpLHUub25Db21wbGV0ZSgpfSk7cmV0dXJufX1yZXR1cm4gbC5pc1N5bmM/bmV3IGZpKHUpOm5ldyBWMSh1KX0sRzE9L152YXJcKC0tKD86KFtcdy1dKyl8KFtcdy1dKyksID8oW2EtekEtWlxkICgpJSMuLC1dKykpXCkvdTtmdW5jdGlvbiBZMShlKXtjb25zdCB0PUcxLmV4ZWMoZSk7aWYoIXQpcmV0dXJuWyxdO2NvbnN0WyxuLHMscl09dDtyZXR1cm5bYC0tJHtuPz9zfWAscl19ZnVuY3Rpb24gZ3AoZSx0LG49MSl7Y29uc3RbcyxyXT1ZMShlKTtpZighcylyZXR1cm47Y29uc3QgaT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKHMpO2lmKGkpe2NvbnN0IG89aS50cmltKCk7cmV0dXJuIFJoKG8pP3BhcnNlRmxvYXQobyk6b31yZXR1cm4gaWwocik/Z3Aocix0LG4rMSk6cn1mdW5jdGlvbiBMYyhlKXtjb25zdCB0PVt7fSx7fV07cmV0dXJuIGU/LnZhbHVlcy5mb3JFYWNoKChuLHMpPT57dFswXVtzXT1uLmdldCgpLHRbMV1bc109bi5nZXRWZWxvY2l0eSgpfSksdH1mdW5jdGlvbiBwbChlLHQsbixzKXtpZih0eXBlb2YgdD09ImZ1bmN0aW9uIil7Y29uc3RbcixpXT1MYyhzKTt0PXQobiE9PXZvaWQgMD9uOmUuY3VzdG9tLHIsaSl9aWYodHlwZW9mIHQ9PSJzdHJpbmciJiYodD1lLnZhcmlhbnRzJiZlLnZhcmlhbnRzW3RdKSx0eXBlb2YgdD09ImZ1bmN0aW9uIil7Y29uc3RbcixpXT1MYyhzKTt0PXQobiE9PXZvaWQgMD9uOmUuY3VzdG9tLHIsaSl9cmV0dXJuIHR9ZnVuY3Rpb24gRm4oZSx0LG4pe2NvbnN0IHM9ZS5nZXRQcm9wcygpO3JldHVybiBwbChzLHQsbiE9PXZvaWQgMD9uOnMuY3VzdG9tLGUpfWNvbnN0IHlwPW5ldyBTZXQoWyJ3aWR0aCIsImhlaWdodCIsInRvcCIsImxlZnQiLCJyaWdodCIsImJvdHRvbSIsLi4uUHNdKSxuYT1lPT5BcnJheS5pc0FycmF5KGUpO2Z1bmN0aW9uIFgxKGUsdCxuKXtlLmhhc1ZhbHVlKHQpP2UuZ2V0VmFsdWUodCkuc2V0KG4pOmUuYWRkVmFsdWUodCx2cyhuKSl9ZnVuY3Rpb24gUTEoZSl7cmV0dXJuIG5hKGUpP2VbZS5sZW5ndGgtMV18fDA6ZX1mdW5jdGlvbiBKMShlLHQpe2NvbnN0IG49Rm4oZSx0KTtsZXR7dHJhbnNpdGlvbkVuZDpzPXt9LHRyYW5zaXRpb246cj17fSwuLi5pfT1ufHx7fTtpPXsuLi5pLC4uLnN9O2Zvcihjb25zdCBvIGluIGkpe2NvbnN0IGw9UTEoaVtvXSk7WDEoZSxvLGwpfX1jb25zdCBEZT1lPT4hIShlJiZlLmdldFZlbG9jaXR5KTtmdW5jdGlvbiBaMShlKXtyZXR1cm4hIShEZShlKSYmZS5hZGQpfWZ1bmN0aW9uIHNhKGUsdCl7Y29uc3Qgbj1lLmdldFZhbHVlKCJ3aWxsQ2hhbmdlIik7aWYoWjEobikpcmV0dXJuIG4uYWRkKHQpO2lmKCFuJiZtbi5XaWxsQ2hhbmdlKXtjb25zdCBzPW5ldyBtbi5XaWxsQ2hhbmdlKCJhdXRvIik7ZS5hZGRWYWx1ZSgid2lsbENoYW5nZSIscykscy5hZGQodCl9fWZ1bmN0aW9uIG1sKGUpe3JldHVybiBlLnJlcGxhY2UoLyhbQS1aXSkvZyx0PT5gLSR7dC50b0xvd2VyQ2FzZSgpfWApfWNvbnN0IGVDPSJmcmFtZXJBcHBlYXJJZCIsdnA9ImRhdGEtIittbChlQyk7ZnVuY3Rpb24geHAoZSl7cmV0dXJuIGUucHJvcHNbdnBdfWZ1bmN0aW9uIHRDKHtwcm90ZWN0ZWRLZXlzOmUsbmVlZHNBbmltYXRpbmc6dH0sbil7Y29uc3Qgcz1lLmhhc093blByb3BlcnR5KG4pJiZ0W25dIT09ITA7cmV0dXJuIHRbbl09ITEsc31mdW5jdGlvbiBicChlLHQse2RlbGF5Om49MCx0cmFuc2l0aW9uT3ZlcnJpZGU6cyx0eXBlOnJ9PXt9KXtsZXR7dHJhbnNpdGlvbjppLHRyYW5zaXRpb25FbmQ6bywuLi5sfT10O2NvbnN0IGQ9ZS5nZXREZWZhdWx0VHJhbnNpdGlvbigpO2k9aT9tcChpLGQpOmQ7Y29uc3QgYz1pPy5yZWR1Y2VNb3Rpb24sdT1pPy5za2lwQW5pbWF0aW9ucztzJiYoaT1zKTtjb25zdCBmPVtdLGg9ciYmZS5hbmltYXRpb25TdGF0ZSYmZS5hbmltYXRpb25TdGF0ZS5nZXRTdGF0ZSgpW3JdLHA9aT8ucGF0aDtwJiZwLmFuaW1hdGVWaXN1YWxFbGVtZW50KGUsbCxpLG4sZik7Zm9yKGNvbnN0IGcgaW4gbCl7Y29uc3QgeT1lLmdldFZhbHVlKGcsZS5sYXRlc3RWYWx1ZXNbZ10/P251bGwpLHY9bFtnXTtpZih2PT09dm9pZCAwfHxoJiZ0QyhoLGcpKWNvbnRpbnVlO2NvbnN0IHg9e2RlbGF5Om4sLi4uZmwoaXx8e30sZyl9O3UmJih4LnNraXBBbmltYXRpb25zPSEwKTtjb25zdCB3PXkuZ2V0KCk7aWYodyE9PXZvaWQgMCYmIXkuaXNBbmltYXRpbmcoKSYmIUFycmF5LmlzQXJyYXkodikmJnY9PT13JiYheC52ZWxvY2l0eSl7ZGUudXBkYXRlKCgpPT55LnNldCh2KSk7Y29udGludWV9bGV0IGI9ITE7aWYod2luZG93Lk1vdGlvbkhhbmRvZmZBbmltYXRpb24pe2NvbnN0IFA9eHAoZSk7aWYoUCl7Y29uc3QgRT13aW5kb3cuTW90aW9uSGFuZG9mZkFuaW1hdGlvbihQLGcsZGUpO0UhPT1udWxsJiYoeC5zdGFydFRpbWU9RSxiPSEwKX19c2EoZSxnKTtjb25zdCBDPWM/P2Uuc2hvdWxkUmVkdWNlTW90aW9uO3kuc3RhcnQoaGwoZyx5LHYsQyYmeXAuaGFzKGcpP3t0eXBlOiExfTp4LGUsYikpO2NvbnN0IFM9eS5hbmltYXRpb247UyYmZi5wdXNoKFMpfWlmKG8pe2NvbnN0IGc9KCk9PmRlLnVwZGF0ZSgoKT0+e28mJkoxKGUsbyl9KTtmLmxlbmd0aD9Qcm9taXNlLmFsbChmKS50aGVuKGcpOmcoKX1yZXR1cm4gZn1mdW5jdGlvbiByYShlLHQsbj17fSl7Y29uc3Qgcz1GbihlLHQsbi50eXBlPT09ImV4aXQiP2UucHJlc2VuY2VDb250ZXh0Py5jdXN0b206dm9pZCAwKTtsZXR7dHJhbnNpdGlvbjpyPWUuZ2V0RGVmYXVsdFRyYW5zaXRpb24oKXx8e319PXN8fHt9O24udHJhbnNpdGlvbk92ZXJyaWRlJiYocj1uLnRyYW5zaXRpb25PdmVycmlkZSk7Y29uc3QgaT1zPygpPT5Qcm9taXNlLmFsbChicChlLHMsbikpOigpPT5Qcm9taXNlLnJlc29sdmUoKSxvPWUudmFyaWFudENoaWxkcmVuJiZlLnZhcmlhbnRDaGlsZHJlbi5zaXplPyhkPTApPT57Y29uc3R7ZGVsYXlDaGlsZHJlbjpjPTAsc3RhZ2dlckNoaWxkcmVuOnUsc3RhZ2dlckRpcmVjdGlvbjpmfT1yO3JldHVybiBuQyhlLHQsZCxjLHUsZixuKX06KCk9PlByb21pc2UucmVzb2x2ZSgpLHt3aGVuOmx9PXI7aWYobCl7Y29uc3RbZCxjXT1sPT09ImJlZm9yZUNoaWxkcmVuIj9baSxvXTpbbyxpXTtyZXR1cm4gZCgpLnRoZW4oKCk9PmMoKSl9ZWxzZSByZXR1cm4gUHJvbWlzZS5hbGwoW2koKSxvKG4uZGVsYXkpXSl9ZnVuY3Rpb24gbkMoZSx0LG49MCxzPTAscj0wLGk9MSxvKXtjb25zdCBsPVtdO2Zvcihjb25zdCBkIG9mIGUudmFyaWFudENoaWxkcmVuKWQubm90aWZ5KCJBbmltYXRpb25TdGFydCIsdCksbC5wdXNoKHJhKGQsdCx7Li4ubyxkZWxheTpuKyh0eXBlb2Ygcz09ImZ1bmN0aW9uIj8wOnMpK3BwKGUudmFyaWFudENoaWxkcmVuLGQscyxyLGkpfSkudGhlbigoKT0+ZC5ub3RpZnkoIkFuaW1hdGlvbkNvbXBsZXRlIix0KSkpO3JldHVybiBQcm9taXNlLmFsbChsKX1mdW5jdGlvbiBzQyhlLHQsbj17fSl7ZS5ub3RpZnkoIkFuaW1hdGlvblN0YXJ0Iix0KTtsZXQgcztpZihBcnJheS5pc0FycmF5KHQpKXtjb25zdCByPXQubWFwKGk9PnJhKGUsaSxuKSk7cz1Qcm9taXNlLmFsbChyKX1lbHNlIGlmKHR5cGVvZiB0PT0ic3RyaW5nIilzPXJhKGUsdCxuKTtlbHNle2NvbnN0IHI9dHlwZW9mIHQ9PSJmdW5jdGlvbiI/Rm4oZSx0LG4uY3VzdG9tKTp0O3M9UHJvbWlzZS5hbGwoYnAoZSxyLG4pKX1yZXR1cm4gcy50aGVuKCgpPT57ZS5ub3RpZnkoIkFuaW1hdGlvbkNvbXBsZXRlIix0KX0pfWNvbnN0IHJDPXt0ZXN0OmU9PmU9PT0iYXV0byIscGFyc2U6ZT0+ZX0sd3A9ZT0+dD0+dC50ZXN0KGUpLENwPVtTcyxXLGt0LF90LE53LGt3LHJDXSxGYz1lPT5DcC5maW5kKHdwKGUpKTtmdW5jdGlvbiBpQyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJudW1iZXIiP2U9PT0wOmUhPT1udWxsP2U9PT0ibm9uZSJ8fGU9PT0iMCJ8fE1oKGUpOiEwfWNvbnN0IG9DPW5ldyBTZXQoWyJicmlnaHRuZXNzIiwiY29udHJhc3QiLCJzYXR1cmF0ZSIsIm9wYWNpdHkiXSk7ZnVuY3Rpb24gYUMoZSl7Y29uc3RbdCxuXT1lLnNsaWNlKDAsLTEpLnNwbGl0KCIoIik7aWYodD09PSJkcm9wLXNoYWRvdyIpcmV0dXJuIGU7Y29uc3Rbc109bi5tYXRjaChvbCl8fFtdO2lmKCFzKXJldHVybiBlO2NvbnN0IHI9bi5yZXBsYWNlKHMsIiIpO2xldCBpPW9DLmhhcyh0KT8xOjA7cmV0dXJuIHMhPT1uJiYoaSo9MTAwKSx0KyIoIitpK3IrIikifWNvbnN0IGxDPS9cYihbYS16LV0qKVwoLio/XCkvZ3UsaWE9ey4uLnl0LGdldEFuaW1hdGFibGVOb25lOmU9Pntjb25zdCB0PWUubWF0Y2gobEMpO3JldHVybiB0P3QubWFwKGFDKS5qb2luKCIgIik6ZX19LG9hPXsuLi55dCxnZXRBbmltYXRhYmxlTm9uZTplPT57Y29uc3QgdD15dC5wYXJzZShlKTtyZXR1cm4geXQuY3JlYXRlVHJhbnNmb3JtZXIoZSkodC5tYXAocz0+dHlwZW9mIHM9PSJudW1iZXIiPzA6dHlwZW9mIHM9PSJvYmplY3QiP3suLi5zLGFscGhhOjF9OnMpKX19LFZjPXsuLi5Tcyx0cmFuc2Zvcm06TWF0aC5yb3VuZH0sY0M9e3JvdGF0ZTpfdCxwYXRoUm90YXRpb246X3Qscm90YXRlWDpfdCxyb3RhdGVZOl90LHJvdGF0ZVo6X3Qsc2NhbGU6a3Isc2NhbGVYOmtyLHNjYWxlWTprcixzY2FsZVo6a3Isc2tldzpfdCxza2V3WDpfdCxza2V3WTpfdCxkaXN0YW5jZTpXLHRyYW5zbGF0ZVg6Vyx0cmFuc2xhdGVZOlcsdHJhbnNsYXRlWjpXLHg6Vyx5OlcsejpXLHBlcnNwZWN0aXZlOlcsdHJhbnNmb3JtUGVyc3BlY3RpdmU6VyxvcGFjaXR5OlpzLG9yaWdpblg6U2Msb3JpZ2luWTpTYyxvcmlnaW5aOld9LGhpPXtib3JkZXJXaWR0aDpXLGJvcmRlclRvcFdpZHRoOlcsYm9yZGVyUmlnaHRXaWR0aDpXLGJvcmRlckJvdHRvbVdpZHRoOlcsYm9yZGVyTGVmdFdpZHRoOlcsYm9yZGVyUmFkaXVzOlcsYm9yZGVyVG9wTGVmdFJhZGl1czpXLGJvcmRlclRvcFJpZ2h0UmFkaXVzOlcsYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6Vyxib3JkZXJCb3R0b21MZWZ0UmFkaXVzOlcsd2lkdGg6VyxtYXhXaWR0aDpXLGhlaWdodDpXLG1heEhlaWdodDpXLHRvcDpXLHJpZ2h0OlcsYm90dG9tOlcsbGVmdDpXLGluc2V0OlcsaW5zZXRCbG9jazpXLGluc2V0QmxvY2tTdGFydDpXLGluc2V0QmxvY2tFbmQ6VyxpbnNldElubGluZTpXLGluc2V0SW5saW5lU3RhcnQ6VyxpbnNldElubGluZUVuZDpXLHBhZGRpbmc6VyxwYWRkaW5nVG9wOlcscGFkZGluZ1JpZ2h0OlcscGFkZGluZ0JvdHRvbTpXLHBhZGRpbmdMZWZ0OlcscGFkZGluZ0Jsb2NrOlcscGFkZGluZ0Jsb2NrU3RhcnQ6VyxwYWRkaW5nQmxvY2tFbmQ6VyxwYWRkaW5nSW5saW5lOlcscGFkZGluZ0lubGluZVN0YXJ0OlcscGFkZGluZ0lubGluZUVuZDpXLG1hcmdpbjpXLG1hcmdpblRvcDpXLG1hcmdpblJpZ2h0OlcsbWFyZ2luQm90dG9tOlcsbWFyZ2luTGVmdDpXLG1hcmdpbkJsb2NrOlcsbWFyZ2luQmxvY2tTdGFydDpXLG1hcmdpbkJsb2NrRW5kOlcsbWFyZ2luSW5saW5lOlcsbWFyZ2luSW5saW5lU3RhcnQ6VyxtYXJnaW5JbmxpbmVFbmQ6Vyxmb250U2l6ZTpXLGJhY2tncm91bmRQb3NpdGlvblg6VyxiYWNrZ3JvdW5kUG9zaXRpb25ZOlcsLi4uY0MsekluZGV4OlZjLGZpbGxPcGFjaXR5OlpzLHN0cm9rZU9wYWNpdHk6WnMsbnVtT2N0YXZlczpWY30sZEM9ey4uLmhpLGNvbG9yOkNlLGJhY2tncm91bmRDb2xvcjpDZSxvdXRsaW5lQ29sb3I6Q2UsZmlsbDpDZSxzdHJva2U6Q2UsYm9yZGVyQ29sb3I6Q2UsYm9yZGVyVG9wQ29sb3I6Q2UsYm9yZGVyUmlnaHRDb2xvcjpDZSxib3JkZXJCb3R0b21Db2xvcjpDZSxib3JkZXJMZWZ0Q29sb3I6Q2UsZmlsdGVyOmlhLFdlYmtpdEZpbHRlcjppYSxtYXNrOm9hLFdlYmtpdE1hc2s6b2F9LFRwPWU9PmRDW2VdLHVDPW5ldyBTZXQoW2lhLG9hXSk7ZnVuY3Rpb24gU3AoZSx0KXtsZXQgbj1UcChlKTtyZXR1cm4gdUMuaGFzKG4pfHwobj15dCksbi5nZXRBbmltYXRhYmxlTm9uZT9uLmdldEFuaW1hdGFibGVOb25lKHQpOnZvaWQgMH1jb25zdCBmQz1uZXcgU2V0KFsiYXV0byIsIm5vbmUiLCIwIl0pO2Z1bmN0aW9uIGhDKGUsdCxuKXtsZXQgcz0wLHI7Zm9yKDtzPGUubGVuZ3RoJiYhcjspe2NvbnN0IGk9ZVtzXTt0eXBlb2YgaT09InN0cmluZyImJiFmQy5oYXMoaSkmJnlzKGkpLnZhbHVlcy5sZW5ndGgmJihyPWVbc10pLHMrK31pZihyJiZuKWZvcihjb25zdCBpIG9mIHQpZVtpXT1TcChuLHIpfWNsYXNzIHBDIGV4dGVuZHMgdWx7Y29uc3RydWN0b3IodCxuLHMscixpKXtzdXBlcih0LG4scyxyLGksITApfXJlYWRLZXlmcmFtZXMoKXtjb25zdHt1bnJlc29sdmVkS2V5ZnJhbWVzOnQsZWxlbWVudDpuLG5hbWU6c309dGhpcztpZighbnx8IW4uY3VycmVudClyZXR1cm47c3VwZXIucmVhZEtleWZyYW1lcygpO2ZvcihsZXQgdT0wO3U8dC5sZW5ndGg7dSsrKXtsZXQgZj10W3VdO2lmKHR5cGVvZiBmPT0ic3RyaW5nIiYmKGY9Zi50cmltKCksaWwoZikpKXtjb25zdCBoPWdwKGYsbi5jdXJyZW50KTtoIT09dm9pZCAwJiYodFt1XT1oKSx1PT09dC5sZW5ndGgtMSYmKHRoaXMuZmluYWxLZXlmcmFtZT1mKX19aWYodGhpcy5yZXNvbHZlTm9uZUtleWZyYW1lcygpLCF5cC5oYXMocyl8fHQubGVuZ3RoIT09MilyZXR1cm47Y29uc3RbcixpXT10LG89RmMociksbD1GYyhpKSxkPVRjKHIpLGM9VGMoaSk7aWYoZCE9PWMmJnVuW3NdKXt0aGlzLm5lZWRzTWVhc3VyZW1lbnQ9ITA7cmV0dXJufWlmKG8hPT1sKWlmKERjKG8pJiZEYyhsKSlmb3IobGV0IHU9MDt1PHQubGVuZ3RoO3UrKyl7Y29uc3QgZj10W3VdO3R5cGVvZiBmPT0ic3RyaW5nIiYmKHRbdV09cGFyc2VGbG9hdChmKSl9ZWxzZSB1bltzXSYmKHRoaXMubmVlZHNNZWFzdXJlbWVudD0hMCl9cmVzb2x2ZU5vbmVLZXlmcmFtZXMoKXtjb25zdHt1bnJlc29sdmVkS2V5ZnJhbWVzOnQsbmFtZTpufT10aGlzLHM9W107Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspKHRbcl09PT1udWxsfHxpQyh0W3JdKSkmJnMucHVzaChyKTtzLmxlbmd0aCYmaEModCxzLG4pfW1lYXN1cmVJbml0aWFsU3RhdGUoKXtjb25zdHtlbGVtZW50OnQsdW5yZXNvbHZlZEtleWZyYW1lczpuLG5hbWU6c309dGhpcztpZighdHx8IXQuY3VycmVudClyZXR1cm47cz09PSJoZWlnaHQiJiYodGhpcy5zdXNwZW5kZWRTY3JvbGxZPXdpbmRvdy5wYWdlWU9mZnNldCksdGhpcy5tZWFzdXJlZE9yaWdpbj11bltzXSh0Lm1lYXN1cmVWaWV3cG9ydEJveCgpLHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQuY3VycmVudCkpLG5bMF09dGhpcy5tZWFzdXJlZE9yaWdpbjtjb25zdCByPW5bbi5sZW5ndGgtMV07ciE9PXZvaWQgMCYmdC5nZXRWYWx1ZShzLHIpLmp1bXAociwhMSl9bWVhc3VyZUVuZFN0YXRlKCl7Y29uc3R7ZWxlbWVudDp0LG5hbWU6bix1bnJlc29sdmVkS2V5ZnJhbWVzOnN9PXRoaXM7aWYoIXR8fCF0LmN1cnJlbnQpcmV0dXJuO2NvbnN0IHI9dC5nZXRWYWx1ZShuKTtyJiZyLmp1bXAodGhpcy5tZWFzdXJlZE9yaWdpbiwhMSk7Y29uc3QgaT1zLmxlbmd0aC0xLG89c1tpXTtzW2ldPXVuW25dKHQubWVhc3VyZVZpZXdwb3J0Qm94KCksd2luZG93LmdldENvbXB1dGVkU3R5bGUodC5jdXJyZW50KSksbyE9PW51bGwmJnRoaXMuZmluYWxLZXlmcmFtZT09PXZvaWQgMCYmKHRoaXMuZmluYWxLZXlmcmFtZT1vKSx0aGlzLnJlbW92ZWRUcmFuc2Zvcm1zPy5sZW5ndGgmJnRoaXMucmVtb3ZlZFRyYW5zZm9ybXMuZm9yRWFjaCgoW2wsZF0pPT57dC5nZXRWYWx1ZShsKS5zZXQoZCl9KSx0aGlzLnJlc29sdmVOb25lS2V5ZnJhbWVzKCl9fWNvbnN0IGdsPVsiYm9yZGVyVG9wTGVmdFJhZGl1cyIsImJvcmRlclRvcFJpZ2h0UmFkaXVzIiwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMiLCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzIl07ZnVuY3Rpb24gUHAoZSx0LG4pe2lmKGU9PW51bGwpcmV0dXJuW107aWYoZSBpbnN0YW5jZW9mIEV2ZW50VGFyZ2V0KXJldHVybltlXTtpZih0eXBlb2YgZT09InN0cmluZyIpe2xldCBzPWRvY3VtZW50O2NvbnN0IHI9bj8uW2VdPz9zLnF1ZXJ5U2VsZWN0b3JBbGwoZSk7cmV0dXJuIHI/QXJyYXkuZnJvbShyKTpbXX1yZXR1cm4gQXJyYXkuZnJvbShlKS5maWx0ZXIocz0+cyE9bnVsbCl9Y29uc3QgYWE9KGUsdCk9PnQmJnR5cGVvZiBlPT0ibnVtYmVyIj90LnRyYW5zZm9ybShlKTplO2Z1bmN0aW9uIEhyKGUpe3JldHVybiBEaChlKSYmIm9mZnNldEhlaWdodCJpbiBlJiYhKCJvd25lclNWR0VsZW1lbnQiaW4gZSl9Y29uc3R7c2NoZWR1bGU6eWx9PXFoKHF1ZXVlTWljcm90YXNrLCExKSxwdD17eDohMSx5OiExfTtmdW5jdGlvbiBqcCgpe3JldHVybiBwdC54fHxwdC55fWZ1bmN0aW9uIG1DKGUpe3JldHVybiBlPT09IngifHxlPT09InkiP3B0W2VdP251bGw6KHB0W2VdPSEwLCgpPT57cHRbZV09ITF9KTpwdC54fHxwdC55P251bGw6KHB0Lng9cHQueT0hMCwoKT0+e3B0Lng9cHQueT0hMX0pfWZ1bmN0aW9uIEVwKGUsdCl7Y29uc3Qgbj1QcChlKSxzPW5ldyBBYm9ydENvbnRyb2xsZXIscj17cGFzc2l2ZTohMCwuLi50LHNpZ25hbDpzLnNpZ25hbH07cmV0dXJuW24sciwoKT0+cy5hYm9ydCgpXX1mdW5jdGlvbiBnQyhlKXtyZXR1cm4hKGUucG9pbnRlclR5cGU9PT0idG91Y2gifHxqcCgpKX1mdW5jdGlvbiB5QyhlLHQsbj17fSl7Y29uc3RbcyxyLGldPUVwKGUsbik7cmV0dXJuIHMuZm9yRWFjaChvPT57bGV0IGw9ITEsZD0hMSxjO2NvbnN0IHU9KCk9PntvLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJsZWF2ZSIsZyl9LGY9dj0+e2MmJihjKHYpLGM9dm9pZCAwKSx1KCl9LGg9dj0+e2w9ITEsd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsaCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLGgpLGQmJihkPSExLGYodikpfSxwPSgpPT57bD0hMCx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixoLHIpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixoLHIpfSxnPXY9PntpZih2LnBvaW50ZXJUeXBlIT09InRvdWNoIil7aWYobCl7ZD0hMDtyZXR1cm59Zih2KX19LHk9dj0+e2lmKCFnQyh2KSlyZXR1cm47ZD0hMTtjb25zdCB4PXQobyx2KTt0eXBlb2YgeD09ImZ1bmN0aW9uIiYmKGM9eCxvLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJsZWF2ZSIsZyxyKSl9O28uYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmVudGVyIix5LHIpLG8uYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHAscil9KSxpfWNvbnN0IEFwPShlLHQpPT50P2U9PT10PyEwOkFwKGUsdC5wYXJlbnRFbGVtZW50KTohMSx2bD1lPT5lLnBvaW50ZXJUeXBlPT09Im1vdXNlIj90eXBlb2YgZS5idXR0b24hPSJudW1iZXIifHxlLmJ1dHRvbjw9MDplLmlzUHJpbWFyeSE9PSExLHZDPW5ldyBTZXQoWyJCVVRUT04iLCJJTlBVVCIsIlNFTEVDVCIsIlRFWFRBUkVBIiwiQSJdKTtmdW5jdGlvbiB4QyhlKXtyZXR1cm4gdkMuaGFzKGUudGFnTmFtZSl8fGUuaXNDb250ZW50RWRpdGFibGU9PT0hMH1jb25zdCBiQz1uZXcgU2V0KFsiSU5QVVQiLCJTRUxFQ1QiLCJURVhUQVJFQSJdKTtmdW5jdGlvbiB3QyhlKXtyZXR1cm4gYkMuaGFzKGUudGFnTmFtZSl8fGUuaXNDb250ZW50RWRpdGFibGU9PT0hMH1jb25zdCBxcj1uZXcgV2Vha1NldDtmdW5jdGlvbiBfYyhlKXtyZXR1cm4gdD0+e3Qua2V5PT09IkVudGVyIiYmZSh0KX19ZnVuY3Rpb24gb28oZSx0KXtlLmRpc3BhdGNoRXZlbnQobmV3IFBvaW50ZXJFdmVudCgicG9pbnRlciIrdCx7aXNQcmltYXJ5OiEwLGJ1YmJsZXM6ITB9KSl9Y29uc3QgQ0M9KGUsdCk9Pntjb25zdCBuPWUuY3VycmVudFRhcmdldDtpZighbilyZXR1cm47Y29uc3Qgcz1fYygoKT0+e2lmKHFyLmhhcyhuKSlyZXR1cm47b28obiwiZG93biIpO2NvbnN0IHI9X2MoKCk9PntvbyhuLCJ1cCIpfSksaT0oKT0+b28obiwiY2FuY2VsIik7bi5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIscix0KSxuLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLGksdCl9KTtuLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHMsdCksbi5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwoKT0+bi5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixzKSx0KX07ZnVuY3Rpb24gQmMoZSl7cmV0dXJuIHZsKGUpJiYhanAoKX1jb25zdCBXYz1uZXcgV2Vha1NldDtmdW5jdGlvbiBUQyhlLHQsbj17fSl7Y29uc3RbcyxyLGldPUVwKGUsbiksbz1sPT57Y29uc3QgZD1sLmN1cnJlbnRUYXJnZXQ7aWYoIUJjKGwpfHxXYy5oYXMobCkpcmV0dXJuO3FyLmFkZChkKSxuLnN0b3BQcm9wYWdhdGlvbiYmV2MuYWRkKGwpO2NvbnN0IGM9dChkLGwpLHU9ey4uLnIsY2FwdHVyZTohMH0sZj0oZyx5KT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLGgsdSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLHAsdSkscXIuaGFzKGQpJiZxci5kZWxldGUoZCksQmMoZykmJnR5cGVvZiBjPT0iZnVuY3Rpb24iJiZjKGcse3N1Y2Nlc3M6eX0pfSxoPWc9PntmKGcsZD09PXdpbmRvd3x8ZD09PWRvY3VtZW50fHxuLnVzZUdsb2JhbFRhcmdldHx8QXAoZCxnLnRhcmdldCkpfSxwPWc9PntmKGcsITEpfTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixoLHUpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixwLHUpfTtyZXR1cm4gcy5mb3JFYWNoKGw9Pnsobi51c2VHbG9iYWxUYXJnZXQ/d2luZG93OmwpLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixvLHIpLEhyKGwpJiYobC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsYz0+Q0MoYyxyKSksIXhDKGwpJiYhbC5oYXNBdHRyaWJ1dGUoInRhYmluZGV4IikmJihsLnRhYkluZGV4PTApKX0pLGl9ZnVuY3Rpb24geGwoZSl7cmV0dXJuIERoKGUpJiYib3duZXJTVkdFbGVtZW50ImluIGV9Y29uc3QgS3I9bmV3IFdlYWtNYXA7bGV0IEdyO2NvbnN0IGtwPShlLHQsbik9PihzLHIpPT5yJiZyWzBdP3JbMF1bZSsiU2l6ZSJdOnhsKHMpJiYiZ2V0QkJveCJpbiBzP3MuZ2V0QkJveCgpW3RdOnNbbl0sU0M9a3AoImlubGluZSIsIndpZHRoIiwib2Zmc2V0V2lkdGgiKSxQQz1rcCgiYmxvY2siLCJoZWlnaHQiLCJvZmZzZXRIZWlnaHQiKTtmdW5jdGlvbiBqQyh7dGFyZ2V0OmUsYm9yZGVyQm94U2l6ZTp0fSl7S3IuZ2V0KGUpPy5mb3JFYWNoKG49PntuKGUse2dldCB3aWR0aCgpe3JldHVybiBTQyhlLHQpfSxnZXQgaGVpZ2h0KCl7cmV0dXJuIFBDKGUsdCl9fSl9KX1mdW5jdGlvbiBFQyhlKXtlLmZvckVhY2goakMpfWZ1bmN0aW9uIEFDKCl7dHlwZW9mIFJlc2l6ZU9ic2VydmVyPiJ1Inx8KEdyPW5ldyBSZXNpemVPYnNlcnZlcihFQykpfWZ1bmN0aW9uIGtDKGUsdCl7R3J8fEFDKCk7Y29uc3Qgbj1QcChlKTtyZXR1cm4gbi5mb3JFYWNoKHM9PntsZXQgcj1Lci5nZXQocyk7cnx8KHI9bmV3IFNldCxLci5zZXQocyxyKSksci5hZGQodCksR3I/Lm9ic2VydmUocyl9KSwoKT0+e24uZm9yRWFjaChzPT57Y29uc3Qgcj1Lci5nZXQocyk7cj8uZGVsZXRlKHQpLHI/LnNpemV8fEdyPy51bm9ic2VydmUocyl9KX19Y29uc3QgWXI9bmV3IFNldDtsZXQgdHM7ZnVuY3Rpb24gTkMoKXt0cz0oKT0+e2NvbnN0IGU9e2dldCB3aWR0aCgpe3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aH0sZ2V0IGhlaWdodCgpe3JldHVybiB3aW5kb3cuaW5uZXJIZWlnaHR9fTtZci5mb3JFYWNoKHQ9PnQoZSkpfSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0cyl9ZnVuY3Rpb24gUkMoZSl7cmV0dXJuIFlyLmFkZChlKSx0c3x8TkMoKSwoKT0+e1lyLmRlbGV0ZShlKSwhWXIuc2l6ZSYmdHlwZW9mIHRzPT0iZnVuY3Rpb24iJiYod2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdHMpLHRzPXZvaWQgMCl9fWZ1bmN0aW9uIHpjKGUsdCl7cmV0dXJuIHR5cGVvZiBlPT0iZnVuY3Rpb24iP1JDKGUpOmtDKGUsdCl9ZnVuY3Rpb24gREMoZSl7cmV0dXJuIHhsKGUpJiZlLnRhZ05hbWU9PT0ic3ZnIn1jb25zdCBNQz1bLi4uQ3AsQ2UseXRdLE9DPWU9Pk1DLmZpbmQod3AoZSkpLFVjPSgpPT4oe3RyYW5zbGF0ZTowLHNjYWxlOjEsb3JpZ2luOjAsb3JpZ2luUG9pbnQ6MH0pLG5zPSgpPT4oe3g6VWMoKSx5OlVjKCl9KSwkYz0oKT0+KHttaW46MCxtYXg6MH0pLFRlPSgpPT4oe3g6JGMoKSx5OiRjKCl9KSxJQz1uZXcgV2Vha01hcDtmdW5jdGlvbiBEaShlKXtyZXR1cm4gZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0IiYmdHlwZW9mIGUuc3RhcnQ9PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gZXIoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nInx8QXJyYXkuaXNBcnJheShlKX1jb25zdCBibD1bImFuaW1hdGUiLCJ3aGlsZUluVmlldyIsIndoaWxlRm9jdXMiLCJ3aGlsZUhvdmVyIiwid2hpbGVUYXAiLCJ3aGlsZURyYWciLCJleGl0Il0sd2w9WyJpbml0aWFsIiwuLi5ibF07ZnVuY3Rpb24gTWkoZSl7cmV0dXJuIERpKGUuYW5pbWF0ZSl8fHdsLnNvbWUodD0+ZXIoZVt0XSkpfWZ1bmN0aW9uIE5wKGUpe3JldHVybiEhKE1pKGUpfHxlLnZhcmlhbnRzKX1mdW5jdGlvbiBMQyhlLHQsbil7Zm9yKGNvbnN0IHMgaW4gdCl7Y29uc3Qgcj10W3NdLGk9bltzXTtpZihEZShyKSllLmFkZFZhbHVlKHMscik7ZWxzZSBpZihEZShpKSllLmFkZFZhbHVlKHMsdnMocix7b3duZXI6ZX0pKTtlbHNlIGlmKGkhPT1yKWlmKGUuaGFzVmFsdWUocykpe2NvbnN0IG89ZS5nZXRWYWx1ZShzKTtvLmxpdmVTdHlsZT09PSEwP28uanVtcChyKTpvLmhhc0FuaW1hdGVkfHxvLnNldChyKX1lbHNle2NvbnN0IG89ZS5nZXRTdGF0aWNWYWx1ZShzKTtlLmFkZFZhbHVlKHMsdnMobyE9PXZvaWQgMD9vOnIse293bmVyOmV9KSl9fWZvcihjb25zdCBzIGluIG4pdFtzXT09PXZvaWQgMCYmZS5yZW1vdmVWYWx1ZShzKTtyZXR1cm4gdH1jb25zdCBsYT17Y3VycmVudDpudWxsfSxScD17Y3VycmVudDohMX0sRkM9dHlwZW9mIHdpbmRvdzwidSI7ZnVuY3Rpb24gVkMoKXtpZihScC5jdXJyZW50PSEwLCEhRkMpaWYod2luZG93Lm1hdGNoTWVkaWEpe2NvbnN0IGU9d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uKSIpLHQ9KCk9PmxhLmN1cnJlbnQ9ZS5tYXRjaGVzO2UuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0KSx0KCl9ZWxzZSBsYS5jdXJyZW50PSExfWNvbnN0IEhjPVsiQW5pbWF0aW9uU3RhcnQiLCJBbmltYXRpb25Db21wbGV0ZSIsIlVwZGF0ZSIsIkJlZm9yZUxheW91dE1lYXN1cmUiLCJMYXlvdXRNZWFzdXJlIiwiTGF5b3V0QW5pbWF0aW9uU3RhcnQiLCJMYXlvdXRBbmltYXRpb25Db21wbGV0ZSJdO2xldCBwaT17fTtmdW5jdGlvbiBEcChlKXtwaT1lfWZ1bmN0aW9uIF9DKCl7cmV0dXJuIHBpfWNsYXNzIEJDe3NjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyh0LG4scyl7cmV0dXJue319Y29uc3RydWN0b3Ioe3BhcmVudDp0LHByb3BzOm4scHJlc2VuY2VDb250ZXh0OnMscmVkdWNlZE1vdGlvbkNvbmZpZzpyLHNraXBBbmltYXRpb25zOmksYmxvY2tJbml0aWFsQW5pbWF0aW9uOm8sdmlzdWFsU3RhdGU6bH0sZD17fSl7dGhpcy5jdXJyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1uZXcgU2V0LHRoaXMuaXNWYXJpYW50Tm9kZT0hMSx0aGlzLmlzQ29udHJvbGxpbmdWYXJpYW50cz0hMSx0aGlzLnNob3VsZFJlZHVjZU1vdGlvbj1udWxsLHRoaXMuc2hvdWxkU2tpcEFuaW1hdGlvbnM9ITEsdGhpcy52YWx1ZXM9bmV3IE1hcCx0aGlzLktleWZyYW1lUmVzb2x2ZXI9dWwsdGhpcy5mZWF0dXJlcz17fSx0aGlzLnZhbHVlU3Vic2NyaXB0aW9ucz1uZXcgTWFwLHRoaXMucHJldk1vdGlvblZhbHVlcz17fSx0aGlzLmhhc0JlZW5Nb3VudGVkPSExLHRoaXMuZXZlbnRzPXt9LHRoaXMucHJvcEV2ZW50U3Vic2NyaXB0aW9ucz17fSx0aGlzLm5vdGlmeVVwZGF0ZT0oKT0+dGhpcy5ub3RpZnkoIlVwZGF0ZSIsdGhpcy5sYXRlc3RWYWx1ZXMpLHRoaXMucmVuZGVyPSgpPT57dGhpcy5jdXJyZW50JiYodGhpcy50cmlnZ2VyQnVpbGQoKSx0aGlzLnJlbmRlckluc3RhbmNlKHRoaXMuY3VycmVudCx0aGlzLnJlbmRlclN0YXRlLHRoaXMucHJvcHMuc3R5bGUsdGhpcy5wcm9qZWN0aW9uKSl9LHRoaXMucmVuZGVyU2NoZWR1bGVkQXQ9MCx0aGlzLnNjaGVkdWxlUmVuZGVyPSgpPT57Y29uc3QgcD1XZS5ub3coKTt0aGlzLnJlbmRlclNjaGVkdWxlZEF0PHAmJih0aGlzLnJlbmRlclNjaGVkdWxlZEF0PXAsZGUucmVuZGVyKHRoaXMucmVuZGVyLCExLCEwKSl9O2NvbnN0e2xhdGVzdFZhbHVlczpjLHJlbmRlclN0YXRlOnV9PWw7dGhpcy5sYXRlc3RWYWx1ZXM9Yyx0aGlzLmJhc2VUYXJnZXQ9ey4uLmN9LHRoaXMuaW5pdGlhbFZhbHVlcz1uLmluaXRpYWw/ey4uLmN9Ont9LHRoaXMucmVuZGVyU3RhdGU9dSx0aGlzLnBhcmVudD10LHRoaXMucHJvcHM9bix0aGlzLnByZXNlbmNlQ29udGV4dD1zLHRoaXMuZGVwdGg9dD90LmRlcHRoKzE6MCx0aGlzLnJlZHVjZWRNb3Rpb25Db25maWc9cix0aGlzLnNraXBBbmltYXRpb25zQ29uZmlnPWksdGhpcy5vcHRpb25zPWQsdGhpcy5ibG9ja0luaXRpYWxBbmltYXRpb249ISFvLHRoaXMuaXNDb250cm9sbGluZ1ZhcmlhbnRzPU1pKG4pLHRoaXMuaXNWYXJpYW50Tm9kZT1OcChuKSx0aGlzLmlzVmFyaWFudE5vZGUmJih0aGlzLnZhcmlhbnRDaGlsZHJlbj1uZXcgU2V0KSx0aGlzLm1hbnVhbGx5QW5pbWF0ZU9uTW91bnQ9ISEodCYmdC5jdXJyZW50KTtjb25zdHt3aWxsQ2hhbmdlOmYsLi4uaH09dGhpcy5zY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMobix7fSx0aGlzKTtmb3IoY29uc3QgcCBpbiBoKXtjb25zdCBnPWhbcF07Y1twXSE9PXZvaWQgMCYmRGUoZykmJmcuc2V0KGNbcF0pfX1tb3VudCh0KXtpZih0aGlzLmhhc0JlZW5Nb3VudGVkKWZvcihjb25zdCBuIGluIHRoaXMuaW5pdGlhbFZhbHVlcyl0aGlzLnZhbHVlcy5nZXQobik/Lmp1bXAodGhpcy5pbml0aWFsVmFsdWVzW25dKSx0aGlzLmxhdGVzdFZhbHVlc1tuXT10aGlzLmluaXRpYWxWYWx1ZXNbbl07dGhpcy5jdXJyZW50PXQsSUMuc2V0KHQsdGhpcyksdGhpcy5wcm9qZWN0aW9uJiYhdGhpcy5wcm9qZWN0aW9uLmluc3RhbmNlJiZ0aGlzLnByb2plY3Rpb24ubW91bnQodCksdGhpcy5wYXJlbnQmJnRoaXMuaXNWYXJpYW50Tm9kZSYmIXRoaXMuaXNDb250cm9sbGluZ1ZhcmlhbnRzJiYodGhpcy5yZW1vdmVGcm9tVmFyaWFudFRyZWU9dGhpcy5wYXJlbnQuYWRkVmFyaWFudENoaWxkKHRoaXMpKSx0aGlzLnZhbHVlcy5mb3JFYWNoKChuLHMpPT50aGlzLmJpbmRUb01vdGlvblZhbHVlKHMsbikpLHRoaXMucmVkdWNlZE1vdGlvbkNvbmZpZz09PSJuZXZlciI/dGhpcy5zaG91bGRSZWR1Y2VNb3Rpb249ITE6dGhpcy5yZWR1Y2VkTW90aW9uQ29uZmlnPT09ImFsd2F5cyI/dGhpcy5zaG91bGRSZWR1Y2VNb3Rpb249ITA6KFJwLmN1cnJlbnR8fFZDKCksdGhpcy5zaG91bGRSZWR1Y2VNb3Rpb249bGEuY3VycmVudCksdGhpcy5zaG91bGRTa2lwQW5pbWF0aW9ucz10aGlzLnNraXBBbmltYXRpb25zQ29uZmlnPz8hMSx0aGlzLnBhcmVudD8uYWRkQ2hpbGQodGhpcyksdGhpcy51cGRhdGUodGhpcy5wcm9wcyx0aGlzLnByZXNlbmNlQ29udGV4dCksdGhpcy5oYXNCZWVuTW91bnRlZD0hMH11bm1vdW50KCl7dGhpcy5wcm9qZWN0aW9uJiZ0aGlzLnByb2plY3Rpb24udW5tb3VudCgpLGduKHRoaXMubm90aWZ5VXBkYXRlKSxnbih0aGlzLnJlbmRlciksdGhpcy52YWx1ZVN1YnNjcmlwdGlvbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMudmFsdWVTdWJzY3JpcHRpb25zLmNsZWFyKCksdGhpcy5yZW1vdmVGcm9tVmFyaWFudFRyZWUmJnRoaXMucmVtb3ZlRnJvbVZhcmlhbnRUcmVlKCksdGhpcy5wYXJlbnQ/LnJlbW92ZUNoaWxkKHRoaXMpO2Zvcihjb25zdCB0IGluIHRoaXMuZXZlbnRzKXRoaXMuZXZlbnRzW3RdLmNsZWFyKCk7Zm9yKGNvbnN0IHQgaW4gdGhpcy5mZWF0dXJlcyl7Y29uc3Qgbj10aGlzLmZlYXR1cmVzW3RdO24mJihuLnVubW91bnQoKSxuLmlzTW91bnRlZD0hMSl9dGhpcy5jdXJyZW50PW51bGx9YWRkQ2hpbGQodCl7dGhpcy5jaGlsZHJlbi5hZGQodCksdGhpcy5lbnRlcmluZ0NoaWxkcmVuPz8odGhpcy5lbnRlcmluZ0NoaWxkcmVuPW5ldyBTZXQpLHRoaXMuZW50ZXJpbmdDaGlsZHJlbi5hZGQodCl9cmVtb3ZlQ2hpbGQodCl7dGhpcy5jaGlsZHJlbi5kZWxldGUodCksdGhpcy5lbnRlcmluZ0NoaWxkcmVuJiZ0aGlzLmVudGVyaW5nQ2hpbGRyZW4uZGVsZXRlKHQpfWJpbmRUb01vdGlvblZhbHVlKHQsbil7aWYodGhpcy52YWx1ZVN1YnNjcmlwdGlvbnMuaGFzKHQpJiZ0aGlzLnZhbHVlU3Vic2NyaXB0aW9ucy5nZXQodCkoKSxuLmFjY2VsZXJhdGUmJmhwLmhhcyh0KSYmdGhpcy5jdXJyZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpe2NvbnN0e2ZhY3Rvcnk6byxrZXlmcmFtZXM6bCx0aW1lczpkLGVhc2U6YyxkdXJhdGlvbjp1fT1uLmFjY2VsZXJhdGUsZj1uZXcgdXAoe2VsZW1lbnQ6dGhpcy5jdXJyZW50LG5hbWU6dCxrZXlmcmFtZXM6bCx0aW1lczpkLGVhc2U6YyxkdXJhdGlvbjp0dCh1KX0pLGg9byhmKTt0aGlzLnZhbHVlU3Vic2NyaXB0aW9ucy5zZXQodCwoKT0+e2goKSxmLmNhbmNlbCgpfSk7cmV0dXJufWNvbnN0IHM9anMuaGFzKHQpO3MmJnRoaXMub25CaW5kVHJhbnNmb3JtJiZ0aGlzLm9uQmluZFRyYW5zZm9ybSgpO2NvbnN0IHI9bi5vbigiY2hhbmdlIixvPT57dGhpcy5sYXRlc3RWYWx1ZXNbdF09byx0aGlzLnByb3BzLm9uVXBkYXRlJiZkZS5wcmVSZW5kZXIodGhpcy5ub3RpZnlVcGRhdGUpLHMmJnRoaXMucHJvamVjdGlvbiYmKHRoaXMucHJvamVjdGlvbi5pc1RyYW5zZm9ybURpcnR5PSEwKSx0aGlzLnNjaGVkdWxlUmVuZGVyKCl9KTtsZXQgaTt0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lk1vdGlvbkNoZWNrQXBwZWFyU3luYyYmKGk9d2luZG93Lk1vdGlvbkNoZWNrQXBwZWFyU3luYyh0aGlzLHQsbikpLHRoaXMudmFsdWVTdWJzY3JpcHRpb25zLnNldCh0LCgpPT57cigpLGkmJmkoKX0pfXNvcnROb2RlUG9zaXRpb24odCl7cmV0dXJuIXRoaXMuY3VycmVudHx8IXRoaXMuc29ydEluc3RhbmNlTm9kZVBvc2l0aW9ufHx0aGlzLnR5cGUhPT10LnR5cGU/MDp0aGlzLnNvcnRJbnN0YW5jZU5vZGVQb3NpdGlvbih0aGlzLmN1cnJlbnQsdC5jdXJyZW50KX11cGRhdGVGZWF0dXJlcygpe2xldCB0PSJhbmltYXRpb24iO2Zvcih0IGluIHBpKXtjb25zdCBuPXBpW3RdO2lmKCFuKWNvbnRpbnVlO2NvbnN0e2lzRW5hYmxlZDpzLEZlYXR1cmU6cn09bjtpZighdGhpcy5mZWF0dXJlc1t0XSYmciYmcyh0aGlzLnByb3BzKSYmKHRoaXMuZmVhdHVyZXNbdF09bmV3IHIodGhpcykpLHRoaXMuZmVhdHVyZXNbdF0pe2NvbnN0IGk9dGhpcy5mZWF0dXJlc1t0XTtpLmlzTW91bnRlZD9pLnVwZGF0ZSgpOihpLm1vdW50KCksaS5pc01vdW50ZWQ9ITApfX19dHJpZ2dlckJ1aWxkKCl7dGhpcy5idWlsZCh0aGlzLnJlbmRlclN0YXRlLHRoaXMubGF0ZXN0VmFsdWVzLHRoaXMucHJvcHMpfW1lYXN1cmVWaWV3cG9ydEJveCgpe3JldHVybiB0aGlzLmN1cnJlbnQ/dGhpcy5tZWFzdXJlSW5zdGFuY2VWaWV3cG9ydEJveCh0aGlzLmN1cnJlbnQsdGhpcy5wcm9wcyk6VGUoKX1nZXRTdGF0aWNWYWx1ZSh0KXtyZXR1cm4gdGhpcy5sYXRlc3RWYWx1ZXNbdF19c2V0U3RhdGljVmFsdWUodCxuKXt0aGlzLmxhdGVzdFZhbHVlc1t0XT1ufXVwZGF0ZSh0LG4peyh0LnRyYW5zZm9ybVRlbXBsYXRlfHx0aGlzLnByb3BzLnRyYW5zZm9ybVRlbXBsYXRlKSYmdGhpcy5zY2hlZHVsZVJlbmRlcigpLHRoaXMucHJldlByb3BzPXRoaXMucHJvcHMsdGhpcy5wcm9wcz10LHRoaXMucHJldlByZXNlbmNlQ29udGV4dD10aGlzLnByZXNlbmNlQ29udGV4dCx0aGlzLnByZXNlbmNlQ29udGV4dD1uO2ZvcihsZXQgcz0wO3M8SGMubGVuZ3RoO3MrKyl7Y29uc3Qgcj1IY1tzXTt0aGlzLnByb3BFdmVudFN1YnNjcmlwdGlvbnNbcl0mJih0aGlzLnByb3BFdmVudFN1YnNjcmlwdGlvbnNbcl0oKSxkZWxldGUgdGhpcy5wcm9wRXZlbnRTdWJzY3JpcHRpb25zW3JdKTtjb25zdCBpPSJvbiIrcixvPXRbaV07byYmKHRoaXMucHJvcEV2ZW50U3Vic2NyaXB0aW9uc1tyXT10aGlzLm9uKHIsbykpfXRoaXMucHJldk1vdGlvblZhbHVlcz1MQyh0aGlzLHRoaXMuc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzKHQsdGhpcy5wcmV2UHJvcHN8fHt9LHRoaXMpLHRoaXMucHJldk1vdGlvblZhbHVlcyksdGhpcy5oYW5kbGVDaGlsZE1vdGlvblZhbHVlJiZ0aGlzLmhhbmRsZUNoaWxkTW90aW9uVmFsdWUoKX1nZXRQcm9wcygpe3JldHVybiB0aGlzLnByb3BzfWdldFZhcmlhbnQodCl7cmV0dXJuIHRoaXMucHJvcHMudmFyaWFudHM/dGhpcy5wcm9wcy52YXJpYW50c1t0XTp2b2lkIDB9Z2V0RGVmYXVsdFRyYW5zaXRpb24oKXtyZXR1cm4gdGhpcy5wcm9wcy50cmFuc2l0aW9ufWdldFRyYW5zZm9ybVBhZ2VQb2ludCgpe3JldHVybiB0aGlzLnByb3BzLnRyYW5zZm9ybVBhZ2VQb2ludH1nZXRDbG9zZXN0VmFyaWFudE5vZGUoKXtyZXR1cm4gdGhpcy5pc1ZhcmlhbnROb2RlP3RoaXM6dGhpcy5wYXJlbnQ/dGhpcy5wYXJlbnQuZ2V0Q2xvc2VzdFZhcmlhbnROb2RlKCk6dm9pZCAwfWFkZFZhcmlhbnRDaGlsZCh0KXtjb25zdCBuPXRoaXMuZ2V0Q2xvc2VzdFZhcmlhbnROb2RlKCk7aWYobilyZXR1cm4gbi52YXJpYW50Q2hpbGRyZW4mJm4udmFyaWFudENoaWxkcmVuLmFkZCh0KSwoKT0+bi52YXJpYW50Q2hpbGRyZW4uZGVsZXRlKHQpfWFkZFZhbHVlKHQsbil7Y29uc3Qgcz10aGlzLnZhbHVlcy5nZXQodCk7biE9PXMmJihzJiZ0aGlzLnJlbW92ZVZhbHVlKHQpLHRoaXMuYmluZFRvTW90aW9uVmFsdWUodCxuKSx0aGlzLnZhbHVlcy5zZXQodCxuKSx0aGlzLmxhdGVzdFZhbHVlc1t0XT1uLmdldCgpKX1yZW1vdmVWYWx1ZSh0KXt0aGlzLnZhbHVlcy5kZWxldGUodCk7Y29uc3Qgbj10aGlzLnZhbHVlU3Vic2NyaXB0aW9ucy5nZXQodCk7biYmKG4oKSx0aGlzLnZhbHVlU3Vic2NyaXB0aW9ucy5kZWxldGUodCkpLGRlbGV0ZSB0aGlzLmxhdGVzdFZhbHVlc1t0XSx0aGlzLnJlbW92ZVZhbHVlRnJvbVJlbmRlclN0YXRlKHQsdGhpcy5yZW5kZXJTdGF0ZSl9aGFzVmFsdWUodCl7cmV0dXJuIHRoaXMudmFsdWVzLmhhcyh0KX1nZXRWYWx1ZSh0LG4pe2lmKHRoaXMucHJvcHMudmFsdWVzJiZ0aGlzLnByb3BzLnZhbHVlc1t0XSlyZXR1cm4gdGhpcy5wcm9wcy52YWx1ZXNbdF07bGV0IHM9dGhpcy52YWx1ZXMuZ2V0KHQpO3JldHVybiBzPT09dm9pZCAwJiZuIT09dm9pZCAwJiYocz12cyhuPT09bnVsbD92b2lkIDA6bix7b3duZXI6dGhpc30pLHRoaXMuYWRkVmFsdWUodCxzKSksc31yZWFkVmFsdWUodCxuKXtsZXQgcz10aGlzLmxhdGVzdFZhbHVlc1t0XSE9PXZvaWQgMHx8IXRoaXMuY3VycmVudD90aGlzLmxhdGVzdFZhbHVlc1t0XTp0aGlzLmdldEJhc2VUYXJnZXRGcm9tUHJvcHModGhpcy5wcm9wcyx0KT8/dGhpcy5yZWFkVmFsdWVGcm9tSW5zdGFuY2UodGhpcy5jdXJyZW50LHQsdGhpcy5vcHRpb25zKTtyZXR1cm4gcyE9bnVsbCYmKHR5cGVvZiBzPT0ic3RyaW5nIiYmKFJoKHMpfHxNaChzKSk/cz1wYXJzZUZsb2F0KHMpOiFPQyhzKSYmeXQudGVzdChuKSYmKHM9U3AodCxuKSksdGhpcy5zZXRCYXNlVGFyZ2V0KHQsRGUocyk/cy5nZXQoKTpzKSksRGUocyk/cy5nZXQoKTpzfXNldEJhc2VUYXJnZXQodCxuKXt0aGlzLmJhc2VUYXJnZXRbdF09bn1nZXRCYXNlVGFyZ2V0KHQpe2NvbnN0e2luaXRpYWw6bn09dGhpcy5wcm9wcztsZXQgcztpZih0eXBlb2Ygbj09InN0cmluZyJ8fHR5cGVvZiBuPT0ib2JqZWN0Iil7Y29uc3QgaT1wbCh0aGlzLnByb3BzLG4sdGhpcy5wcmVzZW5jZUNvbnRleHQ/LmN1c3RvbSk7aSYmKHM9aVt0XSl9aWYobiYmcyE9PXZvaWQgMClyZXR1cm4gcztjb25zdCByPXRoaXMuZ2V0QmFzZVRhcmdldEZyb21Qcm9wcyh0aGlzLnByb3BzLHQpO3JldHVybiByIT09dm9pZCAwJiYhRGUocik/cjp0aGlzLmluaXRpYWxWYWx1ZXNbdF0hPT12b2lkIDAmJnM9PT12b2lkIDA/dm9pZCAwOnRoaXMuYmFzZVRhcmdldFt0XX1vbih0LG4pe3JldHVybiB0aGlzLmV2ZW50c1t0XXx8KHRoaXMuZXZlbnRzW3RdPW5ldyBubCksdGhpcy5ldmVudHNbdF0uYWRkKG4pfW5vdGlmeSh0LC4uLm4pe3RoaXMuZXZlbnRzW3RdJiZ0aGlzLmV2ZW50c1t0XS5ub3RpZnkoLi4ubil9c2NoZWR1bGVSZW5kZXJNaWNyb3Rhc2soKXt5bC5yZW5kZXIodGhpcy5yZW5kZXIpfX1jbGFzcyBNcCBleHRlbmRzIEJDe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLktleWZyYW1lUmVzb2x2ZXI9cEN9c29ydEluc3RhbmNlTm9kZVBvc2l0aW9uKHQsbil7cmV0dXJuIHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24obikmMj8xOi0xfWdldEJhc2VUYXJnZXRGcm9tUHJvcHModCxuKXtjb25zdCBzPXQuc3R5bGU7cmV0dXJuIHM/c1tuXTp2b2lkIDB9cmVtb3ZlVmFsdWVGcm9tUmVuZGVyU3RhdGUodCx7dmFyczpuLHN0eWxlOnN9KXtkZWxldGUgblt0XSxkZWxldGUgc1t0XX1oYW5kbGVDaGlsZE1vdGlvblZhbHVlKCl7dGhpcy5jaGlsZFN1YnNjcmlwdGlvbiYmKHRoaXMuY2hpbGRTdWJzY3JpcHRpb24oKSxkZWxldGUgdGhpcy5jaGlsZFN1YnNjcmlwdGlvbik7Y29uc3R7Y2hpbGRyZW46dH09dGhpcy5wcm9wcztEZSh0KSYmKHRoaXMuY2hpbGRTdWJzY3JpcHRpb249dC5vbigiY2hhbmdlIixuPT57dGhpcy5jdXJyZW50JiYodGhpcy5jdXJyZW50LnRleHRDb250ZW50PWAke259YCl9KSl9fWNsYXNzIHZue2NvbnN0cnVjdG9yKHQpe3RoaXMuaXNNb3VudGVkPSExLHRoaXMubm9kZT10fXVwZGF0ZSgpe319ZnVuY3Rpb24gT3Aoe3RvcDplLGxlZnQ6dCxyaWdodDpuLGJvdHRvbTpzfSl7cmV0dXJue3g6e21pbjp0LG1heDpufSx5OnttaW46ZSxtYXg6c319fWZ1bmN0aW9uIFdDKHt4OmUseTp0fSl7cmV0dXJue3RvcDp0Lm1pbixyaWdodDplLm1heCxib3R0b206dC5tYXgsbGVmdDplLm1pbn19ZnVuY3Rpb24gekMoZSx0KXtpZighdClyZXR1cm4gZTtjb25zdCBuPXQoe3g6ZS5sZWZ0LHk6ZS50b3B9KSxzPXQoe3g6ZS5yaWdodCx5OmUuYm90dG9tfSk7cmV0dXJue3RvcDpuLnksbGVmdDpuLngsYm90dG9tOnMueSxyaWdodDpzLnh9fWZ1bmN0aW9uIGFvKGUpe3JldHVybiBlPT09dm9pZCAwfHxlPT09MX1mdW5jdGlvbiBjYSh7c2NhbGU6ZSxzY2FsZVg6dCxzY2FsZVk6bn0pe3JldHVybiFhbyhlKXx8IWFvKHQpfHwhYW8obil9ZnVuY3Rpb24gUG4oZSl7cmV0dXJuIGNhKGUpfHxJcChlKXx8ZS56fHxlLnJvdGF0ZXx8ZS5yb3RhdGVYfHxlLnJvdGF0ZVl8fGUuc2tld1h8fGUuc2tld1l9ZnVuY3Rpb24gSXAoZSl7cmV0dXJuIHFjKGUueCl8fHFjKGUueSl9ZnVuY3Rpb24gcWMoZSl7cmV0dXJuIGUmJmUhPT0iMCUifWZ1bmN0aW9uIG1pKGUsdCxuKXtjb25zdCBzPWUtbixyPXQqcztyZXR1cm4gbityfWZ1bmN0aW9uIEtjKGUsdCxuLHMscil7cmV0dXJuIHIhPT12b2lkIDAmJihlPW1pKGUscixzKSksbWkoZSxuLHMpK3R9ZnVuY3Rpb24gZGEoZSx0PTAsbj0xLHMscil7ZS5taW49S2MoZS5taW4sdCxuLHMsciksZS5tYXg9S2MoZS5tYXgsdCxuLHMscil9ZnVuY3Rpb24gTHAoZSx7eDp0LHk6bn0pe2RhKGUueCx0LnRyYW5zbGF0ZSx0LnNjYWxlLHQub3JpZ2luUG9pbnQpLGRhKGUueSxuLnRyYW5zbGF0ZSxuLnNjYWxlLG4ub3JpZ2luUG9pbnQpfWNvbnN0IEdjPS45OTk5OTk5OTk5OTksWWM9MS4wMDAwMDAwMDAwMDAxO2Z1bmN0aW9uIFVDKGUsdCxuLHM9ITEpe2NvbnN0IHI9bi5sZW5ndGg7aWYoIXIpcmV0dXJuO3QueD10Lnk9MTtsZXQgaSxvO2ZvcihsZXQgbD0wO2w8cjtsKyspe2k9bltsXSxvPWkucHJvamVjdGlvbkRlbHRhO2NvbnN0e3Zpc3VhbEVsZW1lbnQ6ZH09aS5vcHRpb25zO2QmJmQucHJvcHMuc3R5bGUmJmQucHJvcHMuc3R5bGUuZGlzcGxheT09PSJjb250ZW50cyJ8fChzJiZpLm9wdGlvbnMubGF5b3V0U2Nyb2xsJiZpLnNjcm9sbCYmaSE9PWkucm9vdCYmKEV0KGUueCwtaS5zY3JvbGwub2Zmc2V0LngpLEV0KGUueSwtaS5zY3JvbGwub2Zmc2V0LnkpKSxvJiYodC54Kj1vLnguc2NhbGUsdC55Kj1vLnkuc2NhbGUsTHAoZSxvKSkscyYmUG4oaS5sYXRlc3RWYWx1ZXMpJiZYcihlLGkubGF0ZXN0VmFsdWVzLGkubGF5b3V0Py5sYXlvdXRCb3gpKX10Lng8WWMmJnQueD5HYyYmKHQueD0xKSx0Lnk8WWMmJnQueT5HYyYmKHQueT0xKX1mdW5jdGlvbiBFdChlLHQpe2UubWluKz10LGUubWF4Kz10fWZ1bmN0aW9uIFhjKGUsdCxuLHMscj0uNSl7Y29uc3QgaT1jZShlLm1pbixlLm1heCxyKTtkYShlLHQsbixpLHMpfWZ1bmN0aW9uIFFjKGUsdCl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9wYXJzZUZsb2F0KGUpLzEwMCoodC5tYXgtdC5taW4pOmV9ZnVuY3Rpb24gWHIoZSx0LG4pe2NvbnN0IHM9bj8/ZTtYYyhlLngsUWModC54LHMueCksdC5zY2FsZVgsdC5zY2FsZSx0Lm9yaWdpblgpLFhjKGUueSxRYyh0Lnkscy55KSx0LnNjYWxlWSx0LnNjYWxlLHQub3JpZ2luWSl9ZnVuY3Rpb24gRnAoZSx0KXtyZXR1cm4gT3AoekMoZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0KSl9ZnVuY3Rpb24gJEMoZSx0LG4pe2NvbnN0IHM9RnAoZSxuKSx7c2Nyb2xsOnJ9PXQ7cmV0dXJuIHImJihFdChzLngsci5vZmZzZXQueCksRXQocy55LHIub2Zmc2V0LnkpKSxzfWNvbnN0IEhDPXt4OiJ0cmFuc2xhdGVYIix5OiJ0cmFuc2xhdGVZIix6OiJ0cmFuc2xhdGVaIix0cmFuc2Zvcm1QZXJzcGVjdGl2ZToicGVyc3BlY3RpdmUifSxxQz1Qcy5sZW5ndGg7ZnVuY3Rpb24gS0MoZSx0LG4pe2xldCBzPSIiLHI9ITA7Zm9yKGxldCBvPTA7bzxxQztvKyspe2NvbnN0IGw9UHNbb10sZD1lW2xdO2lmKGQ9PT12b2lkIDApY29udGludWU7bGV0IGM9ITA7aWYodHlwZW9mIGQ9PSJudW1iZXIiKWM9ZD09PShsLnN0YXJ0c1dpdGgoInNjYWxlIik/MTowKTtlbHNle2NvbnN0IHU9cGFyc2VGbG9hdChkKTtjPWwuc3RhcnRzV2l0aCgic2NhbGUiKT91PT09MTp1PT09MH1pZighY3x8bil7Y29uc3QgdT1hYShkLGhpW2xdKTtpZighYyl7cj0hMTtjb25zdCBmPUhDW2xdfHxsO3MrPWAke2Z9KCR7dX0pIGB9biYmKHRbbF09dSl9fWNvbnN0IGk9ZS5wYXRoUm90YXRpb247cmV0dXJuIGkmJihyPSExLHMrPWByb3RhdGUoJHthYShpLGhpLnBhdGhSb3RhdGlvbil9KSBgKSxzPXMudHJpbSgpLG4/cz1uKHQscj8iIjpzKTpyJiYocz0ibm9uZSIpLHN9ZnVuY3Rpb24gQ2woZSx0LG4pe2NvbnN0e3N0eWxlOnMsdmFyczpyLHRyYW5zZm9ybU9yaWdpbjppfT1lO2xldCBvPSExLGw9ITE7Zm9yKGNvbnN0IGQgaW4gdCl7Y29uc3QgYz10W2RdO2lmKGpzLmhhcyhkKSl7bz0hMDtjb250aW51ZX1lbHNlIGlmKEdoKGQpKXtyW2RdPWM7Y29udGludWV9ZWxzZXtjb25zdCB1PWFhKGMsaGlbZF0pO2Quc3RhcnRzV2l0aCgib3JpZ2luIik/KGw9ITAsaVtkXT11KTpzW2RdPXV9fWlmKHQudHJhbnNmb3JtfHwob3x8bj9zLnRyYW5zZm9ybT1LQyh0LGUudHJhbnNmb3JtLG4pOnMudHJhbnNmb3JtJiYocy50cmFuc2Zvcm09Im5vbmUiKSksbCl7Y29uc3R7b3JpZ2luWDpkPSI1MCUiLG9yaWdpblk6Yz0iNTAlIixvcmlnaW5aOnU9MH09aTtzLnRyYW5zZm9ybU9yaWdpbj1gJHtkfSAke2N9ICR7dX1gfX1mdW5jdGlvbiBWcChlLHtzdHlsZTp0LHZhcnM6bn0scyxyKXtjb25zdCBpPWUuc3R5bGU7bGV0IG87Zm9yKG8gaW4gdClpW29dPXRbb107cj8uYXBwbHlQcm9qZWN0aW9uU3R5bGVzKGkscyk7Zm9yKG8gaW4gbilpLnNldFByb3BlcnR5KG8sbltvXSl9ZnVuY3Rpb24gSmMoZSx0KXtyZXR1cm4gdC5tYXg9PT10Lm1pbj8wOmUvKHQubWF4LXQubWluKSoxMDB9Y29uc3QgUnM9e2NvcnJlY3Q6KGUsdCk9PntpZighdC50YXJnZXQpcmV0dXJuIGU7aWYodHlwZW9mIGU9PSJzdHJpbmciKWlmKFcudGVzdChlKSllPXBhcnNlRmxvYXQoZSk7ZWxzZSByZXR1cm4gZTtjb25zdCBuPUpjKGUsdC50YXJnZXQueCkscz1KYyhlLHQudGFyZ2V0LnkpO3JldHVybmAke259JSAke3N9JWB9fSxHQz17Y29ycmVjdDooZSx7dHJlZVNjYWxlOnQscHJvamVjdGlvbkRlbHRhOm59KT0+e2NvbnN0IHM9ZSxyPXl0LnBhcnNlKGUpO2lmKHIubGVuZ3RoPjUpcmV0dXJuIHM7Y29uc3QgaT15dC5jcmVhdGVUcmFuc2Zvcm1lcihlKSxvPXR5cGVvZiByWzBdIT0ibnVtYmVyIj8xOjAsbD1uLnguc2NhbGUqdC54LGQ9bi55LnNjYWxlKnQueTtyWzArb10vPWwsclsxK29dLz1kO2NvbnN0IGM9Y2UobCxkLC41KTtyZXR1cm4gdHlwZW9mIHJbMitvXT09Im51bWJlciImJihyWzIrb10vPWMpLHR5cGVvZiByWzMrb109PSJudW1iZXIiJiYoclszK29dLz1jKSxpKHIpfX0sdWE9e2JvcmRlclJhZGl1czp7Li4uUnMsYXBwbHlUbzpbLi4uZ2xdfSxib3JkZXJUb3BMZWZ0UmFkaXVzOlJzLGJvcmRlclRvcFJpZ2h0UmFkaXVzOlJzLGJvcmRlckJvdHRvbUxlZnRSYWRpdXM6UnMsYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6UnMsYm94U2hhZG93OkdDfTtmdW5jdGlvbiBfcChlLHtsYXlvdXQ6dCxsYXlvdXRJZDpufSl7cmV0dXJuIGpzLmhhcyhlKXx8ZS5zdGFydHNXaXRoKCJvcmlnaW4iKXx8KHR8fG4hPT12b2lkIDApJiYoISF1YVtlXXx8ZT09PSJvcGFjaXR5Iil9ZnVuY3Rpb24gVGwoZSx0LG4pe2NvbnN0IHM9ZS5zdHlsZSxyPXQ/LnN0eWxlLGk9e307aWYoIXMpcmV0dXJuIGk7Zm9yKGNvbnN0IG8gaW4gcykoRGUoc1tvXSl8fHImJkRlKHJbb10pfHxfcChvLGUpfHxuPy5nZXRWYWx1ZShvKT8ubGl2ZVN0eWxlIT09dm9pZCAwKSYmKGlbb109c1tvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gWUMoZSl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpfWNsYXNzIFhDIGV4dGVuZHMgTXB7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT0iaHRtbCIsdGhpcy5yZW5kZXJJbnN0YW5jZT1WcH1yZWFkVmFsdWVGcm9tSW5zdGFuY2UodCxuKXtpZihqcy5oYXMobikpcmV0dXJuIHRoaXMucHJvamVjdGlvbj8uaXNQcm9qZWN0aW5nP1hvKG4pOmcxKHQsbik7e2NvbnN0IHM9WUModCkscj0oR2gobik/cy5nZXRQcm9wZXJ0eVZhbHVlKG4pOnNbbl0pfHwwO3JldHVybiB0eXBlb2Ygcj09InN0cmluZyI/ci50cmltKCk6cn19bWVhc3VyZUluc3RhbmNlVmlld3BvcnRCb3godCx7dHJhbnNmb3JtUGFnZVBvaW50Om59KXtyZXR1cm4gRnAodCxuKX1idWlsZCh0LG4scyl7Q2wodCxuLHMudHJhbnNmb3JtVGVtcGxhdGUpfXNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyh0LG4scyl7cmV0dXJuIFRsKHQsbixzKX19Y29uc3QgUUM9e29mZnNldDoic3Ryb2tlLWRhc2hvZmZzZXQiLGFycmF5OiJzdHJva2UtZGFzaGFycmF5In0sSkM9e29mZnNldDoic3Ryb2tlRGFzaG9mZnNldCIsYXJyYXk6InN0cm9rZURhc2hhcnJheSJ9O2Z1bmN0aW9uIFpDKGUsdCxuPTEscz0wLHI9ITApe2UucGF0aExlbmd0aD0xO2NvbnN0IGk9cj9RQzpKQztlW2kub2Zmc2V0XT1gJHstc31gLGVbaS5hcnJheV09YCR7dH0gJHtufWB9Y29uc3QgZVQ9WyJvZmZzZXREaXN0YW5jZSIsIm9mZnNldFBhdGgiLCJvZmZzZXRSb3RhdGUiLCJvZmZzZXRBbmNob3IiXTtmdW5jdGlvbiBCcChlLHthdHRyWDp0LGF0dHJZOm4sYXR0clNjYWxlOnMscGF0aExlbmd0aDpyLHBhdGhTcGFjaW5nOmk9MSxwYXRoT2Zmc2V0Om89MCwuLi5sfSxkLGMsdSl7aWYoQ2woZSxsLGMpLGQpe2Uuc3R5bGUudmlld0JveCYmKGUuYXR0cnMudmlld0JveD1lLnN0eWxlLnZpZXdCb3gpO3JldHVybn1lLmF0dHJzPWUuc3R5bGUsZS5zdHlsZT17fTtjb25zdHthdHRyczpmLHN0eWxlOmh9PWU7Zi50cmFuc2Zvcm0mJihoLnRyYW5zZm9ybT1mLnRyYW5zZm9ybSxkZWxldGUgZi50cmFuc2Zvcm0pLChoLnRyYW5zZm9ybXx8Zi50cmFuc2Zvcm1PcmlnaW4pJiYoaC50cmFuc2Zvcm1PcmlnaW49Zi50cmFuc2Zvcm1PcmlnaW4/PyI1MCUgNTAlIixkZWxldGUgZi50cmFuc2Zvcm1PcmlnaW4pLGgudHJhbnNmb3JtJiYoaC50cmFuc2Zvcm1Cb3g9dT8udHJhbnNmb3JtQm94Pz8iZmlsbC1ib3giLGRlbGV0ZSBmLnRyYW5zZm9ybUJveCk7Zm9yKGNvbnN0IHAgb2YgZVQpZltwXSE9PXZvaWQgMCYmKGhbcF09ZltwXSxkZWxldGUgZltwXSk7dCE9PXZvaWQgMCYmKGYueD10KSxuIT09dm9pZCAwJiYoZi55PW4pLHMhPT12b2lkIDAmJihmLnNjYWxlPXMpLHIhPT12b2lkIDAmJlpDKGYscixpLG8sITEpfWNvbnN0IFdwPW5ldyBTZXQoWyJiYXNlRnJlcXVlbmN5IiwiZGlmZnVzZUNvbnN0YW50Iiwia2VybmVsTWF0cml4Iiwia2VybmVsVW5pdExlbmd0aCIsImtleVNwbGluZXMiLCJrZXlUaW1lcyIsImxpbWl0aW5nQ29uZUFuZ2xlIiwibWFya2VySGVpZ2h0IiwibWFya2VyV2lkdGgiLCJudW1PY3RhdmVzIiwidGFyZ2V0WCIsInRhcmdldFkiLCJzdXJmYWNlU2NhbGUiLCJzcGVjdWxhckNvbnN0YW50Iiwic3BlY3VsYXJFeHBvbmVudCIsInN0ZERldmlhdGlvbiIsInRhYmxlVmFsdWVzIiwidmlld0JveCIsImdyYWRpZW50VHJhbnNmb3JtIiwicGF0aExlbmd0aCIsInN0YXJ0T2Zmc2V0IiwidGV4dExlbmd0aCIsImxlbmd0aEFkanVzdCJdKSx6cD1lPT50eXBlb2YgZT09InN0cmluZyImJmUudG9Mb3dlckNhc2UoKT09PSJzdmciO2Z1bmN0aW9uIHRUKGUsdCxuLHMpe1ZwKGUsdCx2b2lkIDAscyk7Zm9yKGNvbnN0IHIgaW4gdC5hdHRycyllLnNldEF0dHJpYnV0ZShXcC5oYXMocik/cjptbChyKSx0LmF0dHJzW3JdKX1mdW5jdGlvbiBVcChlLHQsbil7Y29uc3Qgcz1UbChlLHQsbik7Zm9yKGNvbnN0IHIgaW4gZSlpZihEZShlW3JdKXx8RGUodFtyXSkpe2NvbnN0IGk9UHMuaW5kZXhPZihyKSE9PS0xPyJhdHRyIityLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Iuc3Vic3RyaW5nKDEpOnI7c1tpXT1lW3JdfXJldHVybiBzfWNsYXNzIG5UIGV4dGVuZHMgTXB7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT0ic3ZnIix0aGlzLmlzU1ZHVGFnPSExLHRoaXMubWVhc3VyZUluc3RhbmNlVmlld3BvcnRCb3g9VGV9Z2V0QmFzZVRhcmdldEZyb21Qcm9wcyh0LG4pe3JldHVybiB0W25dfXJlYWRWYWx1ZUZyb21JbnN0YW5jZSh0LG4pe2lmKGpzLmhhcyhuKSl7Y29uc3Qgcz1UcChuKTtyZXR1cm4gcyYmcy5kZWZhdWx0fHwwfXJldHVybiBuPVdwLmhhcyhuKT9uOm1sKG4pLHQuZ2V0QXR0cmlidXRlKG4pfXNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyh0LG4scyl7cmV0dXJuIFVwKHQsbixzKX1idWlsZCh0LG4scyl7QnAodCxuLHRoaXMuaXNTVkdUYWcscy50cmFuc2Zvcm1UZW1wbGF0ZSxzLnN0eWxlKX1yZW5kZXJJbnN0YW5jZSh0LG4scyxyKXt0VCh0LG4scyxyKX1tb3VudCh0KXt0aGlzLmlzU1ZHVGFnPXpwKHQudGFnTmFtZSksc3VwZXIubW91bnQodCl9fWNvbnN0IHNUPXdsLmxlbmd0aDtmdW5jdGlvbiAkcChlKXtpZighZSlyZXR1cm47aWYoIWUuaXNDb250cm9sbGluZ1ZhcmlhbnRzKXtjb25zdCBuPWUucGFyZW50PyRwKGUucGFyZW50KXx8e306e307cmV0dXJuIGUucHJvcHMuaW5pdGlhbCE9PXZvaWQgMCYmKG4uaW5pdGlhbD1lLnByb3BzLmluaXRpYWwpLG59Y29uc3QgdD17fTtmb3IobGV0IG49MDtuPHNUO24rKyl7Y29uc3Qgcz13bFtuXSxyPWUucHJvcHNbc107KGVyKHIpfHxyPT09ITEpJiYodFtzXT1yKX1yZXR1cm4gdH1mdW5jdGlvbiBIcChlLHQpe2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiExO2NvbnN0IG49dC5sZW5ndGg7aWYobiE9PWUubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcz0wO3M8bjtzKyspaWYodFtzXSE9PWVbc10pcmV0dXJuITE7cmV0dXJuITB9Y29uc3QgclQ9Wy4uLmJsXS5yZXZlcnNlKCksaVQ9YmwubGVuZ3RoO2Z1bmN0aW9uIG9UKGUpe3JldHVybiB0PT5Qcm9taXNlLmFsbCh0Lm1hcCgoe2FuaW1hdGlvbjpuLG9wdGlvbnM6c30pPT5zQyhlLG4scykpKX1mdW5jdGlvbiBhVChlKXtsZXQgdD1vVChlKSxuPVpjKCkscz0hMCxyPSExO2NvbnN0IGk9Yz0+KHUsZik9Pntjb25zdCBoPUZuKGUsZixjPT09ImV4aXQiP2UucHJlc2VuY2VDb250ZXh0Py5jdXN0b206dm9pZCAwKTtpZihoKXtjb25zdHt0cmFuc2l0aW9uOnAsdHJhbnNpdGlvbkVuZDpnLC4uLnl9PWg7dT17Li4udSwuLi55LC4uLmd9fXJldHVybiB1fTtmdW5jdGlvbiBvKGMpe3Q9YyhlKX1mdW5jdGlvbiBsKGMpe2NvbnN0e3Byb3BzOnV9PWUsZj0kcChlLnBhcmVudCl8fHt9LGg9W10scD1uZXcgU2V0O2xldCBnPXt9LHk9MS8wO2ZvcihsZXQgeD0wO3g8aVQ7eCsrKXtjb25zdCB3PXJUW3hdLGI9blt3XSxDPXVbd10hPT12b2lkIDA/dVt3XTpmW3ddLFM9ZXIoQyksUD13PT09Yz9iLmlzQWN0aXZlOm51bGw7UD09PSExJiYoeT14KTtsZXQgRT1DPT09Zlt3XSYmQyE9PXVbd10mJlM7aWYoRSYmKHN8fHIpJiZlLm1hbnVhbGx5QW5pbWF0ZU9uTW91bnQmJihFPSExKSxiLnByb3RlY3RlZEtleXM9ey4uLmd9LCFiLmlzQWN0aXZlJiZQPT09bnVsbHx8IUMmJiFiLnByZXZQcm9wfHxEaShDKXx8dHlwZW9mIEM9PSJib29sZWFuIiljb250aW51ZTtpZih3PT09ImV4aXQiJiZiLmlzQWN0aXZlJiZQIT09ITApe2IucHJldlJlc29sdmVkVmFsdWVzJiYoZz17Li4uZywuLi5iLnByZXZSZXNvbHZlZFZhbHVlc30pO2NvbnRpbnVlfWNvbnN0IGs9bFQoYi5wcmV2UHJvcCxDKTtsZXQgUj1rfHx3PT09YyYmYi5pc0FjdGl2ZSYmIUUmJlN8fHg+eSYmUyxBPSExO2NvbnN0IEQ9QXJyYXkuaXNBcnJheShDKT9DOltDXTtsZXQgTj1ELnJlZHVjZShpKHcpLHt9KTtQPT09ITEmJihOPXt9KTtjb25zdHtwcmV2UmVzb2x2ZWRWYWx1ZXM6Rj17fX09YixfPXsuLi5GLC4uLk59LEg9ST0+e1I9ITAscC5oYXMoSSkmJihBPSEwLHAuZGVsZXRlKEkpKSxiLm5lZWRzQW5pbWF0aW5nW0ldPSEwO2NvbnN0IE89ZS5nZXRWYWx1ZShJKTtPJiYoTy5saXZlU3R5bGU9ITEpfTtmb3IoY29uc3QgSSBpbiBfKXtjb25zdCBPPU5bSV0sRz1GW0ldO2lmKGcuaGFzT3duUHJvcGVydHkoSSkpY29udGludWU7bGV0IFE9ITE7bmEoTykmJm5hKEcpP1E9IUhwKE8sRyl8fGs6UT1PIT09RyxRP08hPW51bGw/SChJKTpwLmFkZChJKTpPIT09dm9pZCAwJiZwLmhhcyhJKT9IKEkpOmIucHJvdGVjdGVkS2V5c1tJXT0hMH1iLnByZXZQcm9wPUMsYi5wcmV2UmVzb2x2ZWRWYWx1ZXM9TixiLmlzQWN0aXZlJiYoZz17Li4uZywuLi5OfSksKHN8fHIpJiZlLmJsb2NrSW5pdGlhbEFuaW1hdGlvbiYmKFI9ITEpO2NvbnN0IE09RSYmaztSJiYoIU18fEEpJiZoLnB1c2goLi4uRC5tYXAoST0+e2NvbnN0IE89e3R5cGU6d307aWYodHlwZW9mIEk9PSJzdHJpbmciJiYoc3x8cikmJiFNJiZlLm1hbnVhbGx5QW5pbWF0ZU9uTW91bnQmJmUucGFyZW50KXtjb25zdHtwYXJlbnQ6R309ZSxRPUZuKEcsSSk7aWYoRy5lbnRlcmluZ0NoaWxkcmVuJiZRKXtjb25zdHtkZWxheUNoaWxkcmVuOmVlfT1RLnRyYW5zaXRpb258fHt9O08uZGVsYXk9cHAoRy5lbnRlcmluZ0NoaWxkcmVuLGUsZWUpfX1yZXR1cm57YW5pbWF0aW9uOkksb3B0aW9uczpPfX0pKX1pZihwLnNpemUpe2NvbnN0IHg9e307aWYodHlwZW9mIHUuaW5pdGlhbCE9ImJvb2xlYW4iKXtjb25zdCB3PUZuKGUsQXJyYXkuaXNBcnJheSh1LmluaXRpYWwpP3UuaW5pdGlhbFswXTp1LmluaXRpYWwpO3cmJncudHJhbnNpdGlvbiYmKHgudHJhbnNpdGlvbj13LnRyYW5zaXRpb24pfXAuZm9yRWFjaCh3PT57Y29uc3QgYj1lLmdldEJhc2VUYXJnZXQodyksQz1lLmdldFZhbHVlKHcpO0MmJihDLmxpdmVTdHlsZT0hMCkseFt3XT1iPz9udWxsfSksaC5wdXNoKHthbmltYXRpb246eH0pfWxldCB2PSEhaC5sZW5ndGg7cmV0dXJuIHMmJih1LmluaXRpYWw9PT0hMXx8dS5pbml0aWFsPT09dS5hbmltYXRlKSYmIWUubWFudWFsbHlBbmltYXRlT25Nb3VudCYmKHY9ITEpLHM9ITEscj0hMSx2P3QoaCk6UHJvbWlzZS5yZXNvbHZlKCl9ZnVuY3Rpb24gZChjLHUpe2lmKG5bY10uaXNBY3RpdmU9PT11KXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtlLnZhcmlhbnRDaGlsZHJlbj8uZm9yRWFjaChoPT5oLmFuaW1hdGlvblN0YXRlPy5zZXRBY3RpdmUoYyx1KSksbltjXS5pc0FjdGl2ZT11O2NvbnN0IGY9bChjKTtmb3IoY29uc3QgaCBpbiBuKW5baF0ucHJvdGVjdGVkS2V5cz17fTtyZXR1cm4gZn1yZXR1cm57YW5pbWF0ZUNoYW5nZXM6bCxzZXRBY3RpdmU6ZCxzZXRBbmltYXRlRnVuY3Rpb246byxnZXRTdGF0ZTooKT0+bixyZXNldDooKT0+e249WmMoKSxyPSEwfX19ZnVuY3Rpb24gbFQoZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmciP3QhPT1lOkFycmF5LmlzQXJyYXkodCk/IUhwKHQsZSk6ITF9ZnVuY3Rpb24gU24oZT0hMSl7cmV0dXJue2lzQWN0aXZlOmUscHJvdGVjdGVkS2V5czp7fSxuZWVkc0FuaW1hdGluZzp7fSxwcmV2UmVzb2x2ZWRWYWx1ZXM6e319fWZ1bmN0aW9uIFpjKCl7cmV0dXJue2FuaW1hdGU6U24oITApLHdoaWxlSW5WaWV3OlNuKCksd2hpbGVIb3ZlcjpTbigpLHdoaWxlVGFwOlNuKCksd2hpbGVEcmFnOlNuKCksd2hpbGVGb2N1czpTbigpLGV4aXQ6U24oKX19ZnVuY3Rpb24gZmEoZSx0KXtlLm1pbj10Lm1pbixlLm1heD10Lm1heH1mdW5jdGlvbiBodChlLHQpe2ZhKGUueCx0LngpLGZhKGUueSx0LnkpfWZ1bmN0aW9uIGVkKGUsdCl7ZS50cmFuc2xhdGU9dC50cmFuc2xhdGUsZS5zY2FsZT10LnNjYWxlLGUub3JpZ2luUG9pbnQ9dC5vcmlnaW5Qb2ludCxlLm9yaWdpbj10Lm9yaWdpbn1jb25zdCBxcD0xZS00LGNUPTEtcXAsZFQ9MStxcCxLcD0uMDEsdVQ9MC1LcCxmVD0wK0twO2Z1bmN0aW9uIHplKGUpe3JldHVybiBlLm1heC1lLm1pbn1mdW5jdGlvbiBoVChlLHQsbil7cmV0dXJuIE1hdGguYWJzKGUtdCk8PW59ZnVuY3Rpb24gdGQoZSx0LG4scz0uNSl7ZS5vcmlnaW49cyxlLm9yaWdpblBvaW50PWNlKHQubWluLHQubWF4LGUub3JpZ2luKSxlLnNjYWxlPXplKG4pL3plKHQpLGUudHJhbnNsYXRlPWNlKG4ubWluLG4ubWF4LGUub3JpZ2luKS1lLm9yaWdpblBvaW50LChlLnNjYWxlPj1jVCYmZS5zY2FsZTw9ZFR8fGlzTmFOKGUuc2NhbGUpKSYmKGUuc2NhbGU9MSksKGUudHJhbnNsYXRlPj11VCYmZS50cmFuc2xhdGU8PWZUfHxpc05hTihlLnRyYW5zbGF0ZSkpJiYoZS50cmFuc2xhdGU9MCl9ZnVuY3Rpb24gV3MoZSx0LG4scyl7dGQoZS54LHQueCxuLngscz9zLm9yaWdpblg6dm9pZCAwKSx0ZChlLnksdC55LG4ueSxzP3Mub3JpZ2luWTp2b2lkIDApfWZ1bmN0aW9uIG5kKGUsdCxuLHM9MCl7Y29uc3Qgcj1zP2NlKG4ubWluLG4ubWF4LHMpOm4ubWluO2UubWluPXIrdC5taW4sZS5tYXg9ZS5taW4remUodCl9ZnVuY3Rpb24gcFQoZSx0LG4scyl7bmQoZS54LHQueCxuLngscz8ueCksbmQoZS55LHQueSxuLnkscz8ueSl9ZnVuY3Rpb24gc2QoZSx0LG4scz0wKXtjb25zdCByPXM/Y2Uobi5taW4sbi5tYXgscyk6bi5taW47ZS5taW49dC5taW4tcixlLm1heD1lLm1pbit6ZSh0KX1mdW5jdGlvbiBnaShlLHQsbixzKXtzZChlLngsdC54LG4ueCxzPy54KSxzZChlLnksdC55LG4ueSxzPy55KX1mdW5jdGlvbiByZChlLHQsbixzLHIpe3JldHVybiBlLT10LGU9bWkoZSwxL24scyksciE9PXZvaWQgMCYmKGU9bWkoZSwxL3IscykpLGV9ZnVuY3Rpb24gbVQoZSx0PTAsbj0xLHM9LjUscixpPWUsbz1lKXtpZihrdC50ZXN0KHQpJiYodD1wYXJzZUZsb2F0KHQpLHQ9Y2Uoby5taW4sby5tYXgsdC8xMDApLW8ubWluKSx0eXBlb2YgdCE9Im51bWJlciIpcmV0dXJuO2xldCBsPWNlKGkubWluLGkubWF4LHMpO2U9PT1pJiYobC09dCksZS5taW49cmQoZS5taW4sdCxuLGwsciksZS5tYXg9cmQoZS5tYXgsdCxuLGwscil9ZnVuY3Rpb24gaWQoZSx0LFtuLHMscl0saSxvKXttVChlLHRbbl0sdFtzXSx0W3JdLHQuc2NhbGUsaSxvKX1jb25zdCBnVD1bIngiLCJzY2FsZVgiLCJvcmlnaW5YIl0seVQ9WyJ5Iiwic2NhbGVZIiwib3JpZ2luWSJdO2Z1bmN0aW9uIG9kKGUsdCxuLHMpe2lkKGUueCx0LGdULG4/bi54OnZvaWQgMCxzP3MueDp2b2lkIDApLGlkKGUueSx0LHlULG4/bi55OnZvaWQgMCxzP3MueTp2b2lkIDApfWZ1bmN0aW9uIGFkKGUpe3JldHVybiBlLnRyYW5zbGF0ZT09PTAmJmUuc2NhbGU9PT0xfWZ1bmN0aW9uIEdwKGUpe3JldHVybiBhZChlLngpJiZhZChlLnkpfWZ1bmN0aW9uIGxkKGUsdCl7cmV0dXJuIGUubWluPT09dC5taW4mJmUubWF4PT09dC5tYXh9ZnVuY3Rpb24gdlQoZSx0KXtyZXR1cm4gbGQoZS54LHQueCkmJmxkKGUueSx0LnkpfWZ1bmN0aW9uIGNkKGUsdCl7cmV0dXJuIE1hdGgucm91bmQoZS5taW4pPT09TWF0aC5yb3VuZCh0Lm1pbikmJk1hdGgucm91bmQoZS5tYXgpPT09TWF0aC5yb3VuZCh0Lm1heCl9ZnVuY3Rpb24gWXAoZSx0KXtyZXR1cm4gY2QoZS54LHQueCkmJmNkKGUueSx0LnkpfWZ1bmN0aW9uIGRkKGUpe3JldHVybiB6ZShlLngpL3plKGUueSl9ZnVuY3Rpb24gdWQoZSx0KXtyZXR1cm4gZS50cmFuc2xhdGU9PT10LnRyYW5zbGF0ZSYmZS5zY2FsZT09PXQuc2NhbGUmJmUub3JpZ2luUG9pbnQ9PT10Lm9yaWdpblBvaW50fWZ1bmN0aW9uIFR0KGUpe3JldHVybltlKCJ4IiksZSgieSIpXX1mdW5jdGlvbiB4VChlLHQsbil7bGV0IHM9IiI7Y29uc3Qgcj1lLngudHJhbnNsYXRlL3QueCxpPWUueS50cmFuc2xhdGUvdC55LG89bj8uenx8MDtpZigocnx8aXx8bykmJihzPWB0cmFuc2xhdGUzZCgke3J9cHgsICR7aX1weCwgJHtvfXB4KSBgKSwodC54IT09MXx8dC55IT09MSkmJihzKz1gc2NhbGUoJHsxL3QueH0sICR7MS90Lnl9KSBgKSxuKXtjb25zdHt0cmFuc2Zvcm1QZXJzcGVjdGl2ZTpjLHJvdGF0ZTp1LHBhdGhSb3RhdGlvbjpmLHJvdGF0ZVg6aCxyb3RhdGVZOnAsc2tld1g6Zyxza2V3WTp5fT1uO2MmJihzPWBwZXJzcGVjdGl2ZSgke2N9cHgpICR7c31gKSx1JiYocys9YHJvdGF0ZSgke3V9ZGVnKSBgKSxmJiYocys9YHJvdGF0ZSgke2Z9ZGVnKSBgKSxoJiYocys9YHJvdGF0ZVgoJHtofWRlZykgYCkscCYmKHMrPWByb3RhdGVZKCR7cH1kZWcpIGApLGcmJihzKz1gc2tld1goJHtnfWRlZykgYCkseSYmKHMrPWBza2V3WSgke3l9ZGVnKSBgKX1jb25zdCBsPWUueC5zY2FsZSp0LngsZD1lLnkuc2NhbGUqdC55O3JldHVybihsIT09MXx8ZCE9PTEpJiYocys9YHNjYWxlKCR7bH0sICR7ZH0pYCksc3x8Im5vbmUifWNvbnN0IGJUPWdsLmxlbmd0aCxmZD1lPT50eXBlb2YgZT09InN0cmluZyI/cGFyc2VGbG9hdChlKTplLGhkPWU9PnR5cGVvZiBlPT0ibnVtYmVyInx8Vy50ZXN0KGUpO2Z1bmN0aW9uIHdUKGUsdCxuLHMscixpKXtyPyhlLm9wYWNpdHk9Y2UoMCxuLm9wYWNpdHk/PzEsQ1QocykpLGUub3BhY2l0eUV4aXQ9Y2UodC5vcGFjaXR5Pz8xLDAsVFQocykpKTppJiYoZS5vcGFjaXR5PWNlKHQub3BhY2l0eT8/MSxuLm9wYWNpdHk/PzEscykpO2ZvcihsZXQgbz0wO288YlQ7bysrKXtjb25zdCBsPWdsW29dO2xldCBkPXBkKHQsbCksYz1wZChuLGwpO2lmKGQ9PT12b2lkIDAmJmM9PT12b2lkIDApY29udGludWU7ZHx8KGQ9MCksY3x8KGM9MCksZD09PTB8fGM9PT0wfHxoZChkKT09PWhkKGMpPyhlW2xdPU1hdGgubWF4KGNlKGZkKGQpLGZkKGMpLHMpLDApLChrdC50ZXN0KGMpfHxrdC50ZXN0KGQpKSYmKGVbbF0rPSIlIikpOmVbbF09Y30odC5yb3RhdGV8fG4ucm90YXRlKSYmKGUucm90YXRlPWNlKHQucm90YXRlfHwwLG4ucm90YXRlfHwwLHMpKX1mdW5jdGlvbiBwZChlLHQpe3JldHVybiBlW3RdIT09dm9pZCAwP2VbdF06ZS5ib3JkZXJSYWRpdXN9Y29uc3QgQ1Q9WHAoMCwuNSx6aCksVFQ9WHAoLjUsLjk1LGx0KTtmdW5jdGlvbiBYcChlLHQsbil7cmV0dXJuIHM9PnM8ZT8wOnM+dD8xOm4oSnMoZSx0LHMpKX1mdW5jdGlvbiBTVChlLHQsbil7Y29uc3Qgcz1EZShlKT9lOnZzKGUpO3JldHVybiBzLnN0YXJ0KGhsKCIiLHMsdCxuKSkscy5hbmltYXRpb259ZnVuY3Rpb24gdHIoZSx0LG4scz17cGFzc2l2ZTohMH0pe3JldHVybiBlLmFkZEV2ZW50TGlzdGVuZXIodCxuLHMpLCgpPT5lLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLHMpfWNvbnN0IFBUPShlLHQpPT5lLmRlcHRoLXQuZGVwdGg7Y2xhc3MgalR7Y29uc3RydWN0b3IoKXt0aGlzLmNoaWxkcmVuPVtdLHRoaXMuaXNEaXJ0eT0hMX1hZGQodCl7ZWwodGhpcy5jaGlsZHJlbix0KSx0aGlzLmlzRGlydHk9ITB9cmVtb3ZlKHQpe2xpKHRoaXMuY2hpbGRyZW4sdCksdGhpcy5pc0RpcnR5PSEwfWZvckVhY2godCl7dGhpcy5pc0RpcnR5JiZ0aGlzLmNoaWxkcmVuLnNvcnQoUFQpLHRoaXMuaXNEaXJ0eT0hMSx0aGlzLmNoaWxkcmVuLmZvckVhY2godCl9fWZ1bmN0aW9uIEVUKGUsdCl7Y29uc3Qgbj1XZS5ub3coKSxzPSh7dGltZXN0YW1wOnJ9KT0+e2NvbnN0IGk9ci1uO2k+PXQmJihnbihzKSxlKGktdCkpfTtyZXR1cm4gZGUuc2V0dXAocywhMCksKCk9PmduKHMpfWZ1bmN0aW9uIFFyKGUpe3JldHVybiBEZShlKT9lLmdldCgpOmV9Y2xhc3MgQVR7Y29uc3RydWN0b3IoKXt0aGlzLm1lbWJlcnM9W119YWRkKHQpe2VsKHRoaXMubWVtYmVycyx0KTtmb3IobGV0IG49dGhpcy5tZW1iZXJzLmxlbmd0aC0xO24+PTA7bi0tKXtjb25zdCBzPXRoaXMubWVtYmVyc1tuXTtpZihzPT09dHx8cz09PXRoaXMubGVhZHx8cz09PXRoaXMucHJldkxlYWQpY29udGludWU7Y29uc3Qgcj1zLmluc3RhbmNlOyghcnx8ci5pc0Nvbm5lY3RlZD09PSExKSYmIXMuc25hcHNob3QmJihsaSh0aGlzLm1lbWJlcnMscykscy51bm1vdW50KCkpfXQuc2NoZWR1bGVSZW5kZXIoKX1yZW1vdmUodCl7aWYobGkodGhpcy5tZW1iZXJzLHQpLHQ9PT10aGlzLnByZXZMZWFkJiYodGhpcy5wcmV2TGVhZD12b2lkIDApLHQ9PT10aGlzLmxlYWQpe2NvbnN0IG49dGhpcy5tZW1iZXJzW3RoaXMubWVtYmVycy5sZW5ndGgtMV07biYmdGhpcy5wcm9tb3RlKG4pfX1yZWxlZ2F0ZSh0KXtmb3IobGV0IG49dGhpcy5tZW1iZXJzLmluZGV4T2YodCktMTtuPj0wO24tLSl7Y29uc3Qgcz10aGlzLm1lbWJlcnNbbl07aWYocy5pc1ByZXNlbnQhPT0hMSYmcy5pbnN0YW5jZT8uaXNDb25uZWN0ZWQhPT0hMSlyZXR1cm4gdGhpcy5wcm9tb3RlKHMpLCEwfXJldHVybiExfXByb21vdGUodCxuKXtjb25zdCBzPXRoaXMubGVhZDtpZih0IT09cyYmKHRoaXMucHJldkxlYWQ9cyx0aGlzLmxlYWQ9dCx0LnNob3coKSxzKSl7cy51cGRhdGVTbmFwc2hvdCgpLHQuc2NoZWR1bGVSZW5kZXIoKTtjb25zdHtsYXlvdXREZXBlbmRlbmN5OnJ9PXMub3B0aW9ucyx7bGF5b3V0RGVwZW5kZW5jeTppfT10Lm9wdGlvbnM7KHI9PT12b2lkIDB8fHIhPT1pKSYmKHQucmVzdW1lRnJvbT1zLG4mJihzLnByZXNlcnZlT3BhY2l0eT0hMCkscy5zbmFwc2hvdCYmKHQuc25hcHNob3Q9cy5zbmFwc2hvdCx0LnNuYXBzaG90LmxhdGVzdFZhbHVlcz1zLmFuaW1hdGlvblZhbHVlc3x8cy5sYXRlc3RWYWx1ZXMpLHQucm9vdD8uaXNVcGRhdGluZyYmKHQuaXNMYXlvdXREaXJ0eT0hMCkpLHQub3B0aW9ucy5jcm9zc2ZhZGU9PT0hMSYmcy5oaWRlKCl9fWV4aXRBbmltYXRpb25Db21wbGV0ZSgpe3RoaXMubWVtYmVycy5mb3JFYWNoKHQ9Pnt0Lm9wdGlvbnMub25FeGl0Q29tcGxldGU/LigpLHQucmVzdW1pbmdGcm9tPy5vcHRpb25zLm9uRXhpdENvbXBsZXRlPy4oKX0pfXNjaGVkdWxlUmVuZGVyKCl7dGhpcy5tZW1iZXJzLmZvckVhY2godD0+dC5pbnN0YW5jZSYmdC5zY2hlZHVsZVJlbmRlcighMSkpfXJlbW92ZUxlYWRTbmFwc2hvdCgpe3RoaXMubGVhZD8uc25hcHNob3QmJih0aGlzLmxlYWQuc25hcHNob3Q9dm9pZCAwKX19Y29uc3QgSnI9e2hhc0FuaW1hdGVkU2luY2VSZXNpemU6ITAsaGFzRXZlclVwZGF0ZWQ6ITF9LGxvPVsiIiwiWCIsIlkiLCJaIl0sa1Q9MWUzO2xldCBOVD0wO2Z1bmN0aW9uIGNvKGUsdCxuLHMpe2NvbnN0e2xhdGVzdFZhbHVlczpyfT10O3JbZV0mJihuW2VdPXJbZV0sdC5zZXRTdGF0aWNWYWx1ZShlLDApLHMmJihzW2VdPTApKX1mdW5jdGlvbiBRcChlKXtpZihlLmhhc0NoZWNrZWRPcHRpbWlzZWRBcHBlYXI9ITAsZS5yb290PT09ZSlyZXR1cm47Y29uc3R7dmlzdWFsRWxlbWVudDp0fT1lLm9wdGlvbnM7aWYoIXQpcmV0dXJuO2NvbnN0IG49eHAodCk7aWYod2luZG93Lk1vdGlvbkhhc09wdGltaXNlZEFuaW1hdGlvbihuLCJ0cmFuc2Zvcm0iKSl7Y29uc3R7bGF5b3V0OnIsbGF5b3V0SWQ6aX09ZS5vcHRpb25zO3dpbmRvdy5Nb3Rpb25DYW5jZWxPcHRpbWlzZWRBbmltYXRpb24obiwidHJhbnNmb3JtIixkZSwhKHJ8fGkpKX1jb25zdHtwYXJlbnQ6c309ZTtzJiYhcy5oYXNDaGVja2VkT3B0aW1pc2VkQXBwZWFyJiZRcChzKX1mdW5jdGlvbiBKcCh7YXR0YWNoUmVzaXplTGlzdGVuZXI6ZSxkZWZhdWx0UGFyZW50OnQsbWVhc3VyZVNjcm9sbDpuLGNoZWNrSXNTY3JvbGxSb290OnMscmVzZXRUcmFuc2Zvcm06cn0pe3JldHVybiBjbGFzc3tjb25zdHJ1Y3RvcihvPXt9LGw9dD8uKCkpe3RoaXMuaWQ9TlQrKyx0aGlzLmFuaW1hdGlvbklkPTAsdGhpcy5hbmltYXRpb25Db21taXRJZD0wLHRoaXMuY2hpbGRyZW49bmV3IFNldCx0aGlzLm9wdGlvbnM9e30sdGhpcy5pc1RyZWVBbmltYXRpbmc9ITEsdGhpcy5pc0FuaW1hdGlvbkJsb2NrZWQ9ITEsdGhpcy5pc0xheW91dERpcnR5PSExLHRoaXMuaXNQcm9qZWN0aW9uRGlydHk9ITEsdGhpcy5pc1NoYXJlZFByb2plY3Rpb25EaXJ0eT0hMSx0aGlzLmlzVHJhbnNmb3JtRGlydHk9ITEsdGhpcy51cGRhdGVNYW51YWxseUJsb2NrZWQ9ITEsdGhpcy51cGRhdGVCbG9ja2VkQnlSZXNpemU9ITEsdGhpcy5pc1VwZGF0aW5nPSExLHRoaXMuaXNTVkc9ITEsdGhpcy5uZWVkc1Jlc2V0PSExLHRoaXMuc2hvdWxkUmVzZXRUcmFuc2Zvcm09ITEsdGhpcy5oYXNDaGVja2VkT3B0aW1pc2VkQXBwZWFyPSExLHRoaXMudHJlZVNjYWxlPXt4OjEseToxfSx0aGlzLmV2ZW50SGFuZGxlcnM9bmV3IE1hcCx0aGlzLmhhc1RyZWVBbmltYXRlZD0hMSx0aGlzLmxheW91dFZlcnNpb249MCx0aGlzLnVwZGF0ZVNjaGVkdWxlZD0hMSx0aGlzLnNjaGVkdWxlVXBkYXRlPSgpPT50aGlzLnVwZGF0ZSgpLHRoaXMucHJvamVjdGlvblVwZGF0ZVNjaGVkdWxlZD0hMSx0aGlzLmNoZWNrVXBkYXRlRmFpbGVkPSgpPT57dGhpcy5pc1VwZGF0aW5nJiYodGhpcy5pc1VwZGF0aW5nPSExLHRoaXMuY2xlYXJBbGxTbmFwc2hvdHMoKSl9LHRoaXMudXBkYXRlUHJvamVjdGlvbj0oKT0+e3RoaXMucHJvamVjdGlvblVwZGF0ZVNjaGVkdWxlZD0hMSx0aGlzLm5vZGVzLmZvckVhY2goTVQpLHRoaXMubm9kZXMuZm9yRWFjaChfVCksdGhpcy5ub2Rlcy5mb3JFYWNoKEJUKSx0aGlzLm5vZGVzLmZvckVhY2goT1QpfSx0aGlzLnJlc29sdmVkUmVsYXRpdmVUYXJnZXRBdD0wLHRoaXMubGlua2VkUGFyZW50VmVyc2lvbj0wLHRoaXMuaGFzUHJvamVjdGVkPSExLHRoaXMuaXNWaXNpYmxlPSEwLHRoaXMuYW5pbWF0aW9uUHJvZ3Jlc3M9MCx0aGlzLnNoYXJlZE5vZGVzPW5ldyBNYXAsdGhpcy5sYXRlc3RWYWx1ZXM9byx0aGlzLnJvb3Q9bD9sLnJvb3R8fGw6dGhpcyx0aGlzLnBhdGg9bD9bLi4ubC5wYXRoLGxdOltdLHRoaXMucGFyZW50PWwsdGhpcy5kZXB0aD1sP2wuZGVwdGgrMTowO2ZvcihsZXQgZD0wO2Q8dGhpcy5wYXRoLmxlbmd0aDtkKyspdGhpcy5wYXRoW2RdLnNob3VsZFJlc2V0VHJhbnNmb3JtPSEwO3RoaXMucm9vdD09PXRoaXMmJih0aGlzLm5vZGVzPW5ldyBqVCl9YWRkRXZlbnRMaXN0ZW5lcihvLGwpe3JldHVybiB0aGlzLmV2ZW50SGFuZGxlcnMuaGFzKG8pfHx0aGlzLmV2ZW50SGFuZGxlcnMuc2V0KG8sbmV3IG5sKSx0aGlzLmV2ZW50SGFuZGxlcnMuZ2V0KG8pLmFkZChsKX1ub3RpZnlMaXN0ZW5lcnMobywuLi5sKXtjb25zdCBkPXRoaXMuZXZlbnRIYW5kbGVycy5nZXQobyk7ZCYmZC5ub3RpZnkoLi4ubCl9aGFzTGlzdGVuZXJzKG8pe3JldHVybiB0aGlzLmV2ZW50SGFuZGxlcnMuaGFzKG8pfW1vdW50KG8pe2lmKHRoaXMuaW5zdGFuY2UpcmV0dXJuO3RoaXMuaXNTVkc9eGwobykmJiFEQyhvKSx0aGlzLmluc3RhbmNlPW87Y29uc3R7bGF5b3V0SWQ6bCxsYXlvdXQ6ZCx2aXN1YWxFbGVtZW50OmN9PXRoaXMub3B0aW9ucztpZihjJiYhYy5jdXJyZW50JiZjLm1vdW50KG8pLHRoaXMucm9vdC5ub2Rlcy5hZGQodGhpcyksdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50LmNoaWxkcmVuLmFkZCh0aGlzKSx0aGlzLnJvb3QuaGFzVHJlZUFuaW1hdGVkJiYoZHx8bCkmJih0aGlzLmlzTGF5b3V0RGlydHk9ITApLGUpe2xldCB1LGY9MDtjb25zdCBoPSgpPT50aGlzLnJvb3QudXBkYXRlQmxvY2tlZEJ5UmVzaXplPSExO2RlLnJlYWQoKCk9PntmPXdpbmRvdy5pbm5lcldpZHRofSksZShvLCgpPT57Y29uc3QgcD13aW5kb3cuaW5uZXJXaWR0aDtwIT09ZiYmKGY9cCx0aGlzLnJvb3QudXBkYXRlQmxvY2tlZEJ5UmVzaXplPSEwLHUmJnUoKSx1PUVUKGgsMjUwKSxKci5oYXNBbmltYXRlZFNpbmNlUmVzaXplJiYoSnIuaGFzQW5pbWF0ZWRTaW5jZVJlc2l6ZT0hMSx0aGlzLm5vZGVzLmZvckVhY2goeWQpKSl9KX1sJiZ0aGlzLnJvb3QucmVnaXN0ZXJTaGFyZWROb2RlKGwsdGhpcyksdGhpcy5vcHRpb25zLmFuaW1hdGUhPT0hMSYmYyYmKGx8fGQpJiZ0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImRpZFVwZGF0ZSIsKHtkZWx0YTp1LGhhc0xheW91dENoYW5nZWQ6ZixoYXNSZWxhdGl2ZUxheW91dENoYW5nZWQ6aCxsYXlvdXQ6cH0pPT57aWYodGhpcy5pc1RyZWVBbmltYXRpb25CbG9ja2VkKCkpe3RoaXMudGFyZ2V0PXZvaWQgMCx0aGlzLnJlbGF0aXZlVGFyZ2V0PXZvaWQgMDtyZXR1cm59Y29uc3QgZz10aGlzLm9wdGlvbnMudHJhbnNpdGlvbnx8Yy5nZXREZWZhdWx0VHJhbnNpdGlvbigpfHxIVCx7b25MYXlvdXRBbmltYXRpb25TdGFydDp5LG9uTGF5b3V0QW5pbWF0aW9uQ29tcGxldGU6dn09Yy5nZXRQcm9wcygpLHg9IXRoaXMudGFyZ2V0TGF5b3V0fHwhWXAodGhpcy50YXJnZXRMYXlvdXQscCksdz0hZiYmaDtpZih0aGlzLm9wdGlvbnMubGF5b3V0Um9vdHx8dGhpcy5yZXN1bWVGcm9tfHx3fHxmJiYoeHx8IXRoaXMuY3VycmVudEFuaW1hdGlvbikpe3RoaXMucmVzdW1lRnJvbSYmKHRoaXMucmVzdW1pbmdGcm9tPXRoaXMucmVzdW1lRnJvbSx0aGlzLnJlc3VtaW5nRnJvbS5yZXN1bWluZ0Zyb209dm9pZCAwKTtjb25zdCBiPXsuLi5mbChnLCJsYXlvdXQiKSxvblBsYXk6eSxvbkNvbXBsZXRlOnZ9OyhjLnNob3VsZFJlZHVjZU1vdGlvbnx8dGhpcy5vcHRpb25zLmxheW91dFJvb3QpJiYoYi5kZWxheT0wLGIudHlwZT0hMSksdGhpcy5zdGFydEFuaW1hdGlvbihiKSx0aGlzLnNldEFuaW1hdGlvbk9yaWdpbih1LHcsYi5wYXRoKX1lbHNlIGZ8fHlkKHRoaXMpLHRoaXMuaXNMZWFkKCkmJnRoaXMub3B0aW9ucy5vbkV4aXRDb21wbGV0ZSYmdGhpcy5vcHRpb25zLm9uRXhpdENvbXBsZXRlKCk7dGhpcy50YXJnZXRMYXlvdXQ9cH0pfXVubW91bnQoKXt0aGlzLm9wdGlvbnMubGF5b3V0SWQmJnRoaXMud2lsbFVwZGF0ZSgpLHRoaXMucm9vdC5ub2Rlcy5yZW1vdmUodGhpcyk7Y29uc3Qgbz10aGlzLmdldFN0YWNrKCk7byYmby5yZW1vdmUodGhpcyksdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50LmNoaWxkcmVuLmRlbGV0ZSh0aGlzKSx0aGlzLmluc3RhbmNlPXZvaWQgMCx0aGlzLmV2ZW50SGFuZGxlcnMuY2xlYXIoKSxnbih0aGlzLnVwZGF0ZVByb2plY3Rpb24pfWJsb2NrVXBkYXRlKCl7dGhpcy51cGRhdGVNYW51YWxseUJsb2NrZWQ9ITB9dW5ibG9ja1VwZGF0ZSgpe3RoaXMudXBkYXRlTWFudWFsbHlCbG9ja2VkPSExfWlzVXBkYXRlQmxvY2tlZCgpe3JldHVybiB0aGlzLnVwZGF0ZU1hbnVhbGx5QmxvY2tlZHx8dGhpcy51cGRhdGVCbG9ja2VkQnlSZXNpemV9aXNUcmVlQW5pbWF0aW9uQmxvY2tlZCgpe3JldHVybiB0aGlzLmlzQW5pbWF0aW9uQmxvY2tlZHx8dGhpcy5wYXJlbnQmJnRoaXMucGFyZW50LmlzVHJlZUFuaW1hdGlvbkJsb2NrZWQoKXx8ITF9c3RhcnRVcGRhdGUoKXt0aGlzLmlzVXBkYXRlQmxvY2tlZCgpfHwodGhpcy5pc1VwZGF0aW5nPSEwLHRoaXMubm9kZXMmJnRoaXMubm9kZXMuZm9yRWFjaChXVCksdGhpcy5hbmltYXRpb25JZCsrKX1nZXRUcmFuc2Zvcm1UZW1wbGF0ZSgpe2NvbnN0e3Zpc3VhbEVsZW1lbnQ6b309dGhpcy5vcHRpb25zO3JldHVybiBvJiZvLmdldFByb3BzKCkudHJhbnNmb3JtVGVtcGxhdGV9d2lsbFVwZGF0ZShvPSEwKXtpZih0aGlzLnJvb3QuaGFzVHJlZUFuaW1hdGVkPSEwLHRoaXMucm9vdC5pc1VwZGF0ZUJsb2NrZWQoKSl7dGhpcy5vcHRpb25zLm9uRXhpdENvbXBsZXRlJiZ0aGlzLm9wdGlvbnMub25FeGl0Q29tcGxldGUoKTtyZXR1cm59aWYod2luZG93Lk1vdGlvbkNhbmNlbE9wdGltaXNlZEFuaW1hdGlvbiYmIXRoaXMuaGFzQ2hlY2tlZE9wdGltaXNlZEFwcGVhciYmUXAodGhpcyksIXRoaXMucm9vdC5pc1VwZGF0aW5nJiZ0aGlzLnJvb3Quc3RhcnRVcGRhdGUoKSx0aGlzLmlzTGF5b3V0RGlydHkpcmV0dXJuO3RoaXMuaXNMYXlvdXREaXJ0eT0hMDtmb3IobGV0IHU9MDt1PHRoaXMucGF0aC5sZW5ndGg7dSsrKXtjb25zdCBmPXRoaXMucGF0aFt1XTtmLnNob3VsZFJlc2V0VHJhbnNmb3JtPSEwLCh0eXBlb2YgZi5sYXRlc3RWYWx1ZXMueD09InN0cmluZyJ8fHR5cGVvZiBmLmxhdGVzdFZhbHVlcy55PT0ic3RyaW5nIikmJihmLmlzTGF5b3V0RGlydHk9ITApLGYudXBkYXRlU2Nyb2xsKCJzbmFwc2hvdCIpLGYub3B0aW9ucy5sYXlvdXRSb290JiZmLndpbGxVcGRhdGUoITEpfWNvbnN0e2xheW91dElkOmwsbGF5b3V0OmR9PXRoaXMub3B0aW9ucztpZihsPT09dm9pZCAwJiYhZClyZXR1cm47Y29uc3QgYz10aGlzLmdldFRyYW5zZm9ybVRlbXBsYXRlKCk7dGhpcy5wcmV2VHJhbnNmb3JtVGVtcGxhdGVWYWx1ZT1jP2ModGhpcy5sYXRlc3RWYWx1ZXMsIiIpOnZvaWQgMCx0aGlzLnVwZGF0ZVNuYXBzaG90KCksbyYmdGhpcy5ub3RpZnlMaXN0ZW5lcnMoIndpbGxVcGRhdGUiKX11cGRhdGUoKXtpZih0aGlzLnVwZGF0ZVNjaGVkdWxlZD0hMSx0aGlzLmlzVXBkYXRlQmxvY2tlZCgpKXtjb25zdCBkPXRoaXMudXBkYXRlQmxvY2tlZEJ5UmVzaXplO3RoaXMudW5ibG9ja1VwZGF0ZSgpLHRoaXMudXBkYXRlQmxvY2tlZEJ5UmVzaXplPSExLHRoaXMuY2xlYXJBbGxTbmFwc2hvdHMoKSxkJiZ0aGlzLm5vZGVzLmZvckVhY2goTFQpLHRoaXMubm9kZXMuZm9yRWFjaChtZCk7cmV0dXJufWlmKHRoaXMuYW5pbWF0aW9uSWQ8PXRoaXMuYW5pbWF0aW9uQ29tbWl0SWQpe3RoaXMubm9kZXMuZm9yRWFjaChnZCk7cmV0dXJufXRoaXMuYW5pbWF0aW9uQ29tbWl0SWQ9dGhpcy5hbmltYXRpb25JZCx0aGlzLmlzVXBkYXRpbmc/KHRoaXMuaXNVcGRhdGluZz0hMSx0aGlzLm5vZGVzLmZvckVhY2goRlQpLHRoaXMubm9kZXMuZm9yRWFjaChWVCksdGhpcy5ub2Rlcy5mb3JFYWNoKFJUKSx0aGlzLm5vZGVzLmZvckVhY2goRFQpKTp0aGlzLm5vZGVzLmZvckVhY2goZ2QpLHRoaXMuY2xlYXJBbGxTbmFwc2hvdHMoKTtjb25zdCBsPVdlLm5vdygpO1JlLmRlbHRhPUR0KDAsMWUzLzYwLGwtUmUudGltZXN0YW1wKSxSZS50aW1lc3RhbXA9bCxSZS5pc1Byb2Nlc3Npbmc9ITAsZW8udXBkYXRlLnByb2Nlc3MoUmUpLGVvLnByZVJlbmRlci5wcm9jZXNzKFJlKSxlby5yZW5kZXIucHJvY2VzcyhSZSksUmUuaXNQcm9jZXNzaW5nPSExfWRpZFVwZGF0ZSgpe3RoaXMudXBkYXRlU2NoZWR1bGVkfHwodGhpcy51cGRhdGVTY2hlZHVsZWQ9ITAseWwucmVhZCh0aGlzLnNjaGVkdWxlVXBkYXRlKSl9Y2xlYXJBbGxTbmFwc2hvdHMoKXt0aGlzLm5vZGVzLmZvckVhY2goSVQpLHRoaXMuc2hhcmVkTm9kZXMuZm9yRWFjaCh6VCl9c2NoZWR1bGVVcGRhdGVQcm9qZWN0aW9uKCl7dGhpcy5wcm9qZWN0aW9uVXBkYXRlU2NoZWR1bGVkfHwodGhpcy5wcm9qZWN0aW9uVXBkYXRlU2NoZWR1bGVkPSEwLGRlLnByZVJlbmRlcih0aGlzLnVwZGF0ZVByb2plY3Rpb24sITEsITApKX1zY2hlZHVsZUNoZWNrQWZ0ZXJVbm1vdW50KCl7ZGUucG9zdFJlbmRlcigoKT0+e3RoaXMuaXNMYXlvdXREaXJ0eT90aGlzLnJvb3QuZGlkVXBkYXRlKCk6dGhpcy5yb290LmNoZWNrVXBkYXRlRmFpbGVkKCl9KX11cGRhdGVTbmFwc2hvdCgpe3RoaXMuc25hcHNob3R8fCF0aGlzLmluc3RhbmNlfHwodGhpcy5zbmFwc2hvdD10aGlzLm1lYXN1cmUoKSx0aGlzLnNuYXBzaG90JiYhemUodGhpcy5zbmFwc2hvdC5tZWFzdXJlZEJveC54KSYmIXplKHRoaXMuc25hcHNob3QubWVhc3VyZWRCb3gueSkmJih0aGlzLnNuYXBzaG90PXZvaWQgMCkpfXVwZGF0ZUxheW91dCgpe2lmKCF0aGlzLmluc3RhbmNlfHwodGhpcy51cGRhdGVTY3JvbGwoKSwhKHRoaXMub3B0aW9ucy5hbHdheXNNZWFzdXJlTGF5b3V0JiZ0aGlzLmlzTGVhZCgpKSYmIXRoaXMuaXNMYXlvdXREaXJ0eSkpcmV0dXJuO2lmKHRoaXMucmVzdW1lRnJvbSYmIXRoaXMucmVzdW1lRnJvbS5pbnN0YW5jZSlmb3IobGV0IGQ9MDtkPHRoaXMucGF0aC5sZW5ndGg7ZCsrKXRoaXMucGF0aFtkXS51cGRhdGVTY3JvbGwoKTtjb25zdCBvPXRoaXMubGF5b3V0O3RoaXMubGF5b3V0PXRoaXMubWVhc3VyZSghMSksdGhpcy5sYXlvdXRWZXJzaW9uKyssdGhpcy5sYXlvdXRDb3JyZWN0ZWR8fCh0aGlzLmxheW91dENvcnJlY3RlZD1UZSgpKSx0aGlzLmlzTGF5b3V0RGlydHk9ITEsdGhpcy5wcm9qZWN0aW9uRGVsdGE9dm9pZCAwLHRoaXMubm90aWZ5TGlzdGVuZXJzKCJtZWFzdXJlIix0aGlzLmxheW91dC5sYXlvdXRCb3gpO2NvbnN0e3Zpc3VhbEVsZW1lbnQ6bH09dGhpcy5vcHRpb25zO2wmJmwubm90aWZ5KCJMYXlvdXRNZWFzdXJlIix0aGlzLmxheW91dC5sYXlvdXRCb3gsbz9vLmxheW91dEJveDp2b2lkIDApfXVwZGF0ZVNjcm9sbChvPSJtZWFzdXJlIil7bGV0IGw9ISEodGhpcy5vcHRpb25zLmxheW91dFNjcm9sbCYmdGhpcy5pbnN0YW5jZSk7aWYodGhpcy5zY3JvbGwmJnRoaXMuc2Nyb2xsLmFuaW1hdGlvbklkPT09dGhpcy5yb290LmFuaW1hdGlvbklkJiZ0aGlzLnNjcm9sbC5waGFzZT09PW8mJihsPSExKSxsJiZ0aGlzLmluc3RhbmNlKXtjb25zdCBkPXModGhpcy5pbnN0YW5jZSk7dGhpcy5zY3JvbGw9e2FuaW1hdGlvbklkOnRoaXMucm9vdC5hbmltYXRpb25JZCxwaGFzZTpvLGlzUm9vdDpkLG9mZnNldDpuKHRoaXMuaW5zdGFuY2UpLHdhc1Jvb3Q6dGhpcy5zY3JvbGw/dGhpcy5zY3JvbGwuaXNSb290OmR9fX1yZXNldFRyYW5zZm9ybSgpe2lmKCFyKXJldHVybjtjb25zdCBvPXRoaXMuaXNMYXlvdXREaXJ0eXx8dGhpcy5zaG91bGRSZXNldFRyYW5zZm9ybXx8dGhpcy5vcHRpb25zLmFsd2F5c01lYXN1cmVMYXlvdXQsbD10aGlzLnByb2plY3Rpb25EZWx0YSYmIUdwKHRoaXMucHJvamVjdGlvbkRlbHRhKSxkPXRoaXMuZ2V0VHJhbnNmb3JtVGVtcGxhdGUoKSxjPWQ/ZCh0aGlzLmxhdGVzdFZhbHVlcywiIik6dm9pZCAwLHU9YyE9PXRoaXMucHJldlRyYW5zZm9ybVRlbXBsYXRlVmFsdWU7byYmdGhpcy5pbnN0YW5jZSYmKGx8fFBuKHRoaXMubGF0ZXN0VmFsdWVzKXx8dSkmJihyKHRoaXMuaW5zdGFuY2UsYyksdGhpcy5zaG91bGRSZXNldFRyYW5zZm9ybT0hMSx0aGlzLnNjaGVkdWxlUmVuZGVyKCkpfW1lYXN1cmUobz0hMCl7Y29uc3QgbD10aGlzLm1lYXN1cmVQYWdlQm94KCk7bGV0IGQ9dGhpcy5yZW1vdmVFbGVtZW50U2Nyb2xsKGwpO3JldHVybiBvJiYoZD10aGlzLnJlbW92ZVRyYW5zZm9ybShkKSkscVQoZCkse2FuaW1hdGlvbklkOnRoaXMucm9vdC5hbmltYXRpb25JZCxtZWFzdXJlZEJveDpsLGxheW91dEJveDpkLGxhdGVzdFZhbHVlczp7fSxzb3VyY2U6dGhpcy5pZH19bWVhc3VyZVBhZ2VCb3goKXtjb25zdHt2aXN1YWxFbGVtZW50Om99PXRoaXMub3B0aW9ucztpZighbylyZXR1cm4gVGUoKTtjb25zdCBsPW8ubWVhc3VyZVZpZXdwb3J0Qm94KCk7aWYoISh0aGlzLnNjcm9sbD8ud2FzUm9vdHx8dGhpcy5wYXRoLnNvbWUoS1QpKSl7Y29uc3R7c2Nyb2xsOmN9PXRoaXMucm9vdDtjJiYoRXQobC54LGMub2Zmc2V0LngpLEV0KGwueSxjLm9mZnNldC55KSl9cmV0dXJuIGx9cmVtb3ZlRWxlbWVudFNjcm9sbChvKXtjb25zdCBsPVRlKCk7aWYoaHQobCxvKSx0aGlzLnNjcm9sbD8ud2FzUm9vdClyZXR1cm4gbDtmb3IobGV0IGQ9MDtkPHRoaXMucGF0aC5sZW5ndGg7ZCsrKXtjb25zdCBjPXRoaXMucGF0aFtkXSx7c2Nyb2xsOnUsb3B0aW9uczpmfT1jO2MhPT10aGlzLnJvb3QmJnUmJmYubGF5b3V0U2Nyb2xsJiYodS53YXNSb290JiZodChsLG8pLEV0KGwueCx1Lm9mZnNldC54KSxFdChsLnksdS5vZmZzZXQueSkpfXJldHVybiBsfWFwcGx5VHJhbnNmb3JtKG8sbD0hMSxkKXtjb25zdCBjPWR8fFRlKCk7aHQoYyxvKTtmb3IobGV0IHU9MDt1PHRoaXMucGF0aC5sZW5ndGg7dSsrKXtjb25zdCBmPXRoaXMucGF0aFt1XTshbCYmZi5vcHRpb25zLmxheW91dFNjcm9sbCYmZi5zY3JvbGwmJmYhPT1mLnJvb3QmJihFdChjLngsLWYuc2Nyb2xsLm9mZnNldC54KSxFdChjLnksLWYuc2Nyb2xsLm9mZnNldC55KSksUG4oZi5sYXRlc3RWYWx1ZXMpJiZYcihjLGYubGF0ZXN0VmFsdWVzLGYubGF5b3V0Py5sYXlvdXRCb3gpfXJldHVybiBQbih0aGlzLmxhdGVzdFZhbHVlcykmJlhyKGMsdGhpcy5sYXRlc3RWYWx1ZXMsdGhpcy5sYXlvdXQ/LmxheW91dEJveCksY31yZW1vdmVUcmFuc2Zvcm0obyl7Y29uc3QgbD1UZSgpO2h0KGwsbyk7Zm9yKGxldCBkPTA7ZDx0aGlzLnBhdGgubGVuZ3RoO2QrKyl7Y29uc3QgYz10aGlzLnBhdGhbZF07aWYoIVBuKGMubGF0ZXN0VmFsdWVzKSljb250aW51ZTtsZXQgdTtjLmluc3RhbmNlJiYoY2EoYy5sYXRlc3RWYWx1ZXMpJiZjLnVwZGF0ZVNuYXBzaG90KCksdT1UZSgpLGh0KHUsYy5tZWFzdXJlUGFnZUJveCgpKSksb2QobCxjLmxhdGVzdFZhbHVlcyxjLnNuYXBzaG90Py5sYXlvdXRCb3gsdSl9cmV0dXJuIFBuKHRoaXMubGF0ZXN0VmFsdWVzKSYmb2QobCx0aGlzLmxhdGVzdFZhbHVlcyksbH1zZXRUYXJnZXREZWx0YShvKXt0aGlzLnRhcmdldERlbHRhPW8sdGhpcy5yb290LnNjaGVkdWxlVXBkYXRlUHJvamVjdGlvbigpLHRoaXMuaXNQcm9qZWN0aW9uRGlydHk9ITB9c2V0T3B0aW9ucyhvKXt0aGlzLm9wdGlvbnM9ey4uLnRoaXMub3B0aW9ucywuLi5vLGNyb3NzZmFkZTpvLmNyb3NzZmFkZSE9PXZvaWQgMD9vLmNyb3NzZmFkZTohMH19Y2xlYXJNZWFzdXJlbWVudHMoKXt0aGlzLnNjcm9sbD12b2lkIDAsdGhpcy5sYXlvdXQ9dm9pZCAwLHRoaXMuc25hcHNob3Q9dm9pZCAwLHRoaXMucHJldlRyYW5zZm9ybVRlbXBsYXRlVmFsdWU9dm9pZCAwLHRoaXMudGFyZ2V0RGVsdGE9dm9pZCAwLHRoaXMudGFyZ2V0PXZvaWQgMCx0aGlzLmlzTGF5b3V0RGlydHk9ITF9Zm9yY2VSZWxhdGl2ZVBhcmVudFRvUmVzb2x2ZVRhcmdldCgpe3RoaXMucmVsYXRpdmVQYXJlbnQmJnRoaXMucmVsYXRpdmVQYXJlbnQucmVzb2x2ZWRSZWxhdGl2ZVRhcmdldEF0IT09UmUudGltZXN0YW1wJiZ0aGlzLnJlbGF0aXZlUGFyZW50LnJlc29sdmVUYXJnZXREZWx0YSghMCl9cmVzb2x2ZVRhcmdldERlbHRhKG89ITEpe2NvbnN0IGw9dGhpcy5nZXRMZWFkKCk7dGhpcy5pc1Byb2plY3Rpb25EaXJ0eXx8KHRoaXMuaXNQcm9qZWN0aW9uRGlydHk9bC5pc1Byb2plY3Rpb25EaXJ0eSksdGhpcy5pc1RyYW5zZm9ybURpcnR5fHwodGhpcy5pc1RyYW5zZm9ybURpcnR5PWwuaXNUcmFuc2Zvcm1EaXJ0eSksdGhpcy5pc1NoYXJlZFByb2plY3Rpb25EaXJ0eXx8KHRoaXMuaXNTaGFyZWRQcm9qZWN0aW9uRGlydHk9bC5pc1NoYXJlZFByb2plY3Rpb25EaXJ0eSk7Y29uc3QgZD0hIXRoaXMucmVzdW1pbmdGcm9tfHx0aGlzIT09bDtpZighKG98fGQmJnRoaXMuaXNTaGFyZWRQcm9qZWN0aW9uRGlydHl8fHRoaXMuaXNQcm9qZWN0aW9uRGlydHl8fHRoaXMucGFyZW50Py5pc1Byb2plY3Rpb25EaXJ0eXx8dGhpcy5hdHRlbXB0VG9SZXNvbHZlUmVsYXRpdmVUYXJnZXR8fHRoaXMucm9vdC51cGRhdGVCbG9ja2VkQnlSZXNpemUpKXJldHVybjtjb25zdHtsYXlvdXQ6dSxsYXlvdXRJZDpmfT10aGlzLm9wdGlvbnM7aWYoIXRoaXMubGF5b3V0fHwhKHV8fGYpKXJldHVybjt0aGlzLnJlc29sdmVkUmVsYXRpdmVUYXJnZXRBdD1SZS50aW1lc3RhbXA7Y29uc3QgaD10aGlzLmdldENsb3Nlc3RQcm9qZWN0aW5nUGFyZW50KCk7aCYmdGhpcy5saW5rZWRQYXJlbnRWZXJzaW9uIT09aC5sYXlvdXRWZXJzaW9uJiYhaC5vcHRpb25zLmxheW91dFJvb3QmJnRoaXMucmVtb3ZlUmVsYXRpdmVUYXJnZXQoKSwhdGhpcy50YXJnZXREZWx0YSYmIXRoaXMucmVsYXRpdmVUYXJnZXQmJih0aGlzLm9wdGlvbnMubGF5b3V0QW5jaG9yIT09ITEmJmgmJmgubGF5b3V0P3RoaXMuY3JlYXRlUmVsYXRpdmVUYXJnZXQoaCx0aGlzLmxheW91dC5sYXlvdXRCb3gsaC5sYXlvdXQubGF5b3V0Qm94KTp0aGlzLnJlbW92ZVJlbGF0aXZlVGFyZ2V0KCkpLCEoIXRoaXMucmVsYXRpdmVUYXJnZXQmJiF0aGlzLnRhcmdldERlbHRhKSYmKHRoaXMudGFyZ2V0fHwodGhpcy50YXJnZXQ9VGUoKSx0aGlzLnRhcmdldFdpdGhUcmFuc2Zvcm1zPVRlKCkpLHRoaXMucmVsYXRpdmVUYXJnZXQmJnRoaXMucmVsYXRpdmVUYXJnZXRPcmlnaW4mJnRoaXMucmVsYXRpdmVQYXJlbnQmJnRoaXMucmVsYXRpdmVQYXJlbnQudGFyZ2V0Pyh0aGlzLmZvcmNlUmVsYXRpdmVQYXJlbnRUb1Jlc29sdmVUYXJnZXQoKSxwVCh0aGlzLnRhcmdldCx0aGlzLnJlbGF0aXZlVGFyZ2V0LHRoaXMucmVsYXRpdmVQYXJlbnQudGFyZ2V0LHRoaXMub3B0aW9ucy5sYXlvdXRBbmNob3J8fHZvaWQgMCkpOnRoaXMudGFyZ2V0RGVsdGE/KHRoaXMucmVzdW1pbmdGcm9tP3RoaXMuYXBwbHlUcmFuc2Zvcm0odGhpcy5sYXlvdXQubGF5b3V0Qm94LCExLHRoaXMudGFyZ2V0KTpodCh0aGlzLnRhcmdldCx0aGlzLmxheW91dC5sYXlvdXRCb3gpLExwKHRoaXMudGFyZ2V0LHRoaXMudGFyZ2V0RGVsdGEpKTpodCh0aGlzLnRhcmdldCx0aGlzLmxheW91dC5sYXlvdXRCb3gpLHRoaXMuYXR0ZW1wdFRvUmVzb2x2ZVJlbGF0aXZlVGFyZ2V0JiYodGhpcy5hdHRlbXB0VG9SZXNvbHZlUmVsYXRpdmVUYXJnZXQ9ITEsdGhpcy5vcHRpb25zLmxheW91dEFuY2hvciE9PSExJiZoJiYhIWgucmVzdW1pbmdGcm9tPT0hIXRoaXMucmVzdW1pbmdGcm9tJiYhaC5vcHRpb25zLmxheW91dFNjcm9sbCYmaC50YXJnZXQmJnRoaXMuYW5pbWF0aW9uUHJvZ3Jlc3MhPT0xP3RoaXMuY3JlYXRlUmVsYXRpdmVUYXJnZXQoaCx0aGlzLnRhcmdldCxoLnRhcmdldCk6dGhpcy5yZWxhdGl2ZVBhcmVudD10aGlzLnJlbGF0aXZlVGFyZ2V0PXZvaWQgMCkpfWdldENsb3Nlc3RQcm9qZWN0aW5nUGFyZW50KCl7aWYoISghdGhpcy5wYXJlbnR8fGNhKHRoaXMucGFyZW50LmxhdGVzdFZhbHVlcyl8fElwKHRoaXMucGFyZW50LmxhdGVzdFZhbHVlcykpKXJldHVybiB0aGlzLnBhcmVudC5pc1Byb2plY3RpbmcoKT90aGlzLnBhcmVudDp0aGlzLnBhcmVudC5nZXRDbG9zZXN0UHJvamVjdGluZ1BhcmVudCgpfWlzUHJvamVjdGluZygpe3JldHVybiEhKCh0aGlzLnJlbGF0aXZlVGFyZ2V0fHx0aGlzLnRhcmdldERlbHRhfHx0aGlzLm9wdGlvbnMubGF5b3V0Um9vdCkmJnRoaXMubGF5b3V0KX1jcmVhdGVSZWxhdGl2ZVRhcmdldChvLGwsZCl7dGhpcy5yZWxhdGl2ZVBhcmVudD1vLHRoaXMubGlua2VkUGFyZW50VmVyc2lvbj1vLmxheW91dFZlcnNpb24sdGhpcy5mb3JjZVJlbGF0aXZlUGFyZW50VG9SZXNvbHZlVGFyZ2V0KCksdGhpcy5yZWxhdGl2ZVRhcmdldD1UZSgpLHRoaXMucmVsYXRpdmVUYXJnZXRPcmlnaW49VGUoKSxnaSh0aGlzLnJlbGF0aXZlVGFyZ2V0T3JpZ2luLGwsZCx0aGlzLm9wdGlvbnMubGF5b3V0QW5jaG9yfHx2b2lkIDApLGh0KHRoaXMucmVsYXRpdmVUYXJnZXQsdGhpcy5yZWxhdGl2ZVRhcmdldE9yaWdpbil9cmVtb3ZlUmVsYXRpdmVUYXJnZXQoKXt0aGlzLnJlbGF0aXZlUGFyZW50PXRoaXMucmVsYXRpdmVUYXJnZXQ9dm9pZCAwfWNhbGNQcm9qZWN0aW9uKCl7Y29uc3Qgbz10aGlzLmdldExlYWQoKSxsPSEhdGhpcy5yZXN1bWluZ0Zyb218fHRoaXMhPT1vO2xldCBkPSEwO2lmKCh0aGlzLmlzUHJvamVjdGlvbkRpcnR5fHx0aGlzLnBhcmVudD8uaXNQcm9qZWN0aW9uRGlydHkpJiYoZD0hMSksbCYmKHRoaXMuaXNTaGFyZWRQcm9qZWN0aW9uRGlydHl8fHRoaXMuaXNUcmFuc2Zvcm1EaXJ0eSkmJihkPSExKSx0aGlzLnJlc29sdmVkUmVsYXRpdmVUYXJnZXRBdD09PVJlLnRpbWVzdGFtcCYmKGQ9ITEpLGQpcmV0dXJuO2NvbnN0e2xheW91dDpjLGxheW91dElkOnV9PXRoaXMub3B0aW9ucztpZih0aGlzLmlzVHJlZUFuaW1hdGluZz0hISh0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuaXNUcmVlQW5pbWF0aW5nfHx0aGlzLmN1cnJlbnRBbmltYXRpb258fHRoaXMucGVuZGluZ0FuaW1hdGlvbiksdGhpcy5pc1RyZWVBbmltYXRpbmd8fCh0aGlzLnRhcmdldERlbHRhPXRoaXMucmVsYXRpdmVUYXJnZXQ9dm9pZCAwKSwhdGhpcy5sYXlvdXR8fCEoY3x8dSkpcmV0dXJuO2h0KHRoaXMubGF5b3V0Q29ycmVjdGVkLHRoaXMubGF5b3V0LmxheW91dEJveCk7Y29uc3QgZj10aGlzLnRyZWVTY2FsZS54LGg9dGhpcy50cmVlU2NhbGUueTtVQyh0aGlzLmxheW91dENvcnJlY3RlZCx0aGlzLnRyZWVTY2FsZSx0aGlzLnBhdGgsbCksby5sYXlvdXQmJiFvLnRhcmdldCYmKHRoaXMudHJlZVNjYWxlLnghPT0xfHx0aGlzLnRyZWVTY2FsZS55IT09MSkmJihvLnRhcmdldD1vLmxheW91dC5sYXlvdXRCb3gsby50YXJnZXRXaXRoVHJhbnNmb3Jtcz1UZSgpKTtjb25zdHt0YXJnZXQ6cH09bztpZighcCl7dGhpcy5wcmV2UHJvamVjdGlvbkRlbHRhJiYodGhpcy5jcmVhdGVQcm9qZWN0aW9uRGVsdGFzKCksdGhpcy5zY2hlZHVsZVJlbmRlcigpKTtyZXR1cm59IXRoaXMucHJvamVjdGlvbkRlbHRhfHwhdGhpcy5wcmV2UHJvamVjdGlvbkRlbHRhP3RoaXMuY3JlYXRlUHJvamVjdGlvbkRlbHRhcygpOihlZCh0aGlzLnByZXZQcm9qZWN0aW9uRGVsdGEueCx0aGlzLnByb2plY3Rpb25EZWx0YS54KSxlZCh0aGlzLnByZXZQcm9qZWN0aW9uRGVsdGEueSx0aGlzLnByb2plY3Rpb25EZWx0YS55KSksV3ModGhpcy5wcm9qZWN0aW9uRGVsdGEsdGhpcy5sYXlvdXRDb3JyZWN0ZWQscCx0aGlzLmxhdGVzdFZhbHVlcyksKHRoaXMudHJlZVNjYWxlLnghPT1mfHx0aGlzLnRyZWVTY2FsZS55IT09aHx8IXVkKHRoaXMucHJvamVjdGlvbkRlbHRhLngsdGhpcy5wcmV2UHJvamVjdGlvbkRlbHRhLngpfHwhdWQodGhpcy5wcm9qZWN0aW9uRGVsdGEueSx0aGlzLnByZXZQcm9qZWN0aW9uRGVsdGEueSkpJiYodGhpcy5oYXNQcm9qZWN0ZWQ9ITAsdGhpcy5zY2hlZHVsZVJlbmRlcigpLHRoaXMubm90aWZ5TGlzdGVuZXJzKCJwcm9qZWN0aW9uVXBkYXRlIixwKSl9aGlkZSgpe3RoaXMuaXNWaXNpYmxlPSExfXNob3coKXt0aGlzLmlzVmlzaWJsZT0hMH1zY2hlZHVsZVJlbmRlcihvPSEwKXtpZih0aGlzLm9wdGlvbnMudmlzdWFsRWxlbWVudD8uc2NoZWR1bGVSZW5kZXIoKSxvKXtjb25zdCBsPXRoaXMuZ2V0U3RhY2soKTtsJiZsLnNjaGVkdWxlUmVuZGVyKCl9dGhpcy5yZXN1bWluZ0Zyb20mJiF0aGlzLnJlc3VtaW5nRnJvbS5pbnN0YW5jZSYmKHRoaXMucmVzdW1pbmdGcm9tPXZvaWQgMCl9Y3JlYXRlUHJvamVjdGlvbkRlbHRhcygpe3RoaXMucHJldlByb2plY3Rpb25EZWx0YT1ucygpLHRoaXMucHJvamVjdGlvbkRlbHRhPW5zKCksdGhpcy5wcm9qZWN0aW9uRGVsdGFXaXRoVHJhbnNmb3JtPW5zKCl9c2V0QW5pbWF0aW9uT3JpZ2luKG8sbD0hMSxkKXtjb25zdCBjPXRoaXMuc25hcHNob3QsdT1jP2MubGF0ZXN0VmFsdWVzOnt9LGY9ey4uLnRoaXMubGF0ZXN0VmFsdWVzfSxoPW5zKCk7KCF0aGlzLnJlbGF0aXZlUGFyZW50fHwhdGhpcy5yZWxhdGl2ZVBhcmVudC5vcHRpb25zLmxheW91dFJvb3QpJiYodGhpcy5yZWxhdGl2ZVRhcmdldD10aGlzLnJlbGF0aXZlVGFyZ2V0T3JpZ2luPXZvaWQgMCksdGhpcy5hdHRlbXB0VG9SZXNvbHZlUmVsYXRpdmVUYXJnZXQ9IWw7Y29uc3QgcD1UZSgpLGc9Yz9jLnNvdXJjZTp2b2lkIDAseT10aGlzLmxheW91dD90aGlzLmxheW91dC5zb3VyY2U6dm9pZCAwLHY9ZyE9PXkseD10aGlzLmdldFN0YWNrKCksdz0heHx8eC5tZW1iZXJzLmxlbmd0aDw9MSxiPSEhKHYmJiF3JiZ0aGlzLm9wdGlvbnMuY3Jvc3NmYWRlPT09ITAmJiF0aGlzLnBhdGguc29tZSgkVCkpO3RoaXMuYW5pbWF0aW9uUHJvZ3Jlc3M9MDtsZXQgQztjb25zdCBTPWQ/LmludGVycG9sYXRlUHJvamVjdGlvbihvKTt0aGlzLm1peFRhcmdldERlbHRhPVA9Pntjb25zdCBFPVAvMWUzLGs9Uz8uKEUpO2s/KGgueC50cmFuc2xhdGU9ay54LGgueC5zY2FsZT1jZShvLnguc2NhbGUsMSxFKSxoLngub3JpZ2luPW8ueC5vcmlnaW4saC54Lm9yaWdpblBvaW50PW8ueC5vcmlnaW5Qb2ludCxoLnkudHJhbnNsYXRlPWsueSxoLnkuc2NhbGU9Y2Uoby55LnNjYWxlLDEsRSksaC55Lm9yaWdpbj1vLnkub3JpZ2luLGgueS5vcmlnaW5Qb2ludD1vLnkub3JpZ2luUG9pbnQpOih2ZChoLngsby54LEUpLHZkKGgueSxvLnksRSkpLHRoaXMuc2V0VGFyZ2V0RGVsdGEoaCksdGhpcy5yZWxhdGl2ZVRhcmdldCYmdGhpcy5yZWxhdGl2ZVRhcmdldE9yaWdpbiYmdGhpcy5sYXlvdXQmJnRoaXMucmVsYXRpdmVQYXJlbnQmJnRoaXMucmVsYXRpdmVQYXJlbnQubGF5b3V0JiYoZ2kocCx0aGlzLmxheW91dC5sYXlvdXRCb3gsdGhpcy5yZWxhdGl2ZVBhcmVudC5sYXlvdXQubGF5b3V0Qm94LHRoaXMub3B0aW9ucy5sYXlvdXRBbmNob3J8fHZvaWQgMCksVVQodGhpcy5yZWxhdGl2ZVRhcmdldCx0aGlzLnJlbGF0aXZlVGFyZ2V0T3JpZ2luLHAsRSksQyYmdlQodGhpcy5yZWxhdGl2ZVRhcmdldCxDKSYmKHRoaXMuaXNQcm9qZWN0aW9uRGlydHk9ITEpLEN8fChDPVRlKCkpLGh0KEMsdGhpcy5yZWxhdGl2ZVRhcmdldCkpLHYmJih0aGlzLmFuaW1hdGlvblZhbHVlcz1mLHdUKGYsdSx0aGlzLmxhdGVzdFZhbHVlcyxFLGIsdykpLGsmJmsucm90YXRlIT09dm9pZCAwJiYodGhpcy5hbmltYXRpb25WYWx1ZXN8fCh0aGlzLmFuaW1hdGlvblZhbHVlcz1mKSx0aGlzLmFuaW1hdGlvblZhbHVlcy5wYXRoUm90YXRpb249ay5yb3RhdGUpLHRoaXMucm9vdC5zY2hlZHVsZVVwZGF0ZVByb2plY3Rpb24oKSx0aGlzLnNjaGVkdWxlUmVuZGVyKCksdGhpcy5hbmltYXRpb25Qcm9ncmVzcz1FfSx0aGlzLm1peFRhcmdldERlbHRhKHRoaXMub3B0aW9ucy5sYXlvdXRSb290PzFlMzowKX1zdGFydEFuaW1hdGlvbihvKXt0aGlzLm5vdGlmeUxpc3RlbmVycygiYW5pbWF0aW9uU3RhcnQiKSx0aGlzLmN1cnJlbnRBbmltYXRpb24/LnN0b3AoKSx0aGlzLnJlc3VtaW5nRnJvbT8uY3VycmVudEFuaW1hdGlvbj8uc3RvcCgpLHRoaXMucGVuZGluZ0FuaW1hdGlvbiYmKGduKHRoaXMucGVuZGluZ0FuaW1hdGlvbiksdGhpcy5wZW5kaW5nQW5pbWF0aW9uPXZvaWQgMCksdGhpcy5wZW5kaW5nQW5pbWF0aW9uPWRlLnVwZGF0ZSgoKT0+e0pyLmhhc0FuaW1hdGVkU2luY2VSZXNpemU9ITAsdGhpcy5tb3Rpb25WYWx1ZXx8KHRoaXMubW90aW9uVmFsdWU9dnMoMCkpLHRoaXMubW90aW9uVmFsdWUuanVtcCgwLCExKSx0aGlzLmN1cnJlbnRBbmltYXRpb249U1QodGhpcy5tb3Rpb25WYWx1ZSxbMCwxZTNdLHsuLi5vLHZlbG9jaXR5OjAsaXNTeW5jOiEwLG9uVXBkYXRlOmw9Pnt0aGlzLm1peFRhcmdldERlbHRhKGwpLG8ub25VcGRhdGUmJm8ub25VcGRhdGUobCl9LG9uQ29tcGxldGU6KCk9PntvLm9uQ29tcGxldGUmJm8ub25Db21wbGV0ZSgpLHRoaXMuY29tcGxldGVBbmltYXRpb24oKX19KSx0aGlzLnJlc3VtaW5nRnJvbSYmKHRoaXMucmVzdW1pbmdGcm9tLmN1cnJlbnRBbmltYXRpb249dGhpcy5jdXJyZW50QW5pbWF0aW9uKSx0aGlzLnBlbmRpbmdBbmltYXRpb249dm9pZCAwfSl9Y29tcGxldGVBbmltYXRpb24oKXt0aGlzLnJlc3VtaW5nRnJvbSYmKHRoaXMucmVzdW1pbmdGcm9tLmN1cnJlbnRBbmltYXRpb249dm9pZCAwLHRoaXMucmVzdW1pbmdGcm9tLnByZXNlcnZlT3BhY2l0eT12b2lkIDApO2NvbnN0IG89dGhpcy5nZXRTdGFjaygpO28mJm8uZXhpdEFuaW1hdGlvbkNvbXBsZXRlKCksdGhpcy5yZXN1bWluZ0Zyb209dGhpcy5jdXJyZW50QW5pbWF0aW9uPXRoaXMuYW5pbWF0aW9uVmFsdWVzPXZvaWQgMCx0aGlzLm5vdGlmeUxpc3RlbmVycygiYW5pbWF0aW9uQ29tcGxldGUiKX1maW5pc2hBbmltYXRpb24oKXt0aGlzLmN1cnJlbnRBbmltYXRpb24mJih0aGlzLm1peFRhcmdldERlbHRhJiZ0aGlzLm1peFRhcmdldERlbHRhKGtUKSx0aGlzLmN1cnJlbnRBbmltYXRpb24uc3RvcCgpKSx0aGlzLmNvbXBsZXRlQW5pbWF0aW9uKCl9YXBwbHlUcmFuc2Zvcm1zVG9UYXJnZXQoKXtjb25zdCBvPXRoaXMuZ2V0TGVhZCgpO2xldHt0YXJnZXRXaXRoVHJhbnNmb3JtczpsLHRhcmdldDpkLGxheW91dDpjLGxhdGVzdFZhbHVlczp1fT1vO2lmKCEoIWx8fCFkfHwhYykpe2lmKHRoaXMhPT1vJiZ0aGlzLmxheW91dCYmYyYmWnAodGhpcy5vcHRpb25zLmFuaW1hdGlvblR5cGUsdGhpcy5sYXlvdXQubGF5b3V0Qm94LGMubGF5b3V0Qm94KSl7ZD10aGlzLnRhcmdldHx8VGUoKTtjb25zdCBmPXplKHRoaXMubGF5b3V0LmxheW91dEJveC54KTtkLngubWluPW8udGFyZ2V0LngubWluLGQueC5tYXg9ZC54Lm1pbitmO2NvbnN0IGg9emUodGhpcy5sYXlvdXQubGF5b3V0Qm94LnkpO2QueS5taW49by50YXJnZXQueS5taW4sZC55Lm1heD1kLnkubWluK2h9aHQobCxkKSxYcihsLHUpLFdzKHRoaXMucHJvamVjdGlvbkRlbHRhV2l0aFRyYW5zZm9ybSx0aGlzLmxheW91dENvcnJlY3RlZCxsLHUpfX1yZWdpc3RlclNoYXJlZE5vZGUobyxsKXt0aGlzLnNoYXJlZE5vZGVzLmhhcyhvKXx8dGhpcy5zaGFyZWROb2Rlcy5zZXQobyxuZXcgQVQpLHRoaXMuc2hhcmVkTm9kZXMuZ2V0KG8pLmFkZChsKTtjb25zdCBjPWwub3B0aW9ucy5pbml0aWFsUHJvbW90aW9uQ29uZmlnO2wucHJvbW90ZSh7dHJhbnNpdGlvbjpjP2MudHJhbnNpdGlvbjp2b2lkIDAscHJlc2VydmVGb2xsb3dPcGFjaXR5OmMmJmMuc2hvdWxkUHJlc2VydmVGb2xsb3dPcGFjaXR5P2Muc2hvdWxkUHJlc2VydmVGb2xsb3dPcGFjaXR5KGwpOnZvaWQgMH0pfWlzTGVhZCgpe2NvbnN0IG89dGhpcy5nZXRTdGFjaygpO3JldHVybiBvP28ubGVhZD09PXRoaXM6ITB9Z2V0TGVhZCgpe2NvbnN0e2xheW91dElkOm99PXRoaXMub3B0aW9ucztyZXR1cm4gbz90aGlzLmdldFN0YWNrKCk/LmxlYWR8fHRoaXM6dGhpc31nZXRQcmV2TGVhZCgpe2NvbnN0e2xheW91dElkOm99PXRoaXMub3B0aW9ucztyZXR1cm4gbz90aGlzLmdldFN0YWNrKCk/LnByZXZMZWFkOnZvaWQgMH1nZXRTdGFjaygpe2NvbnN0e2xheW91dElkOm99PXRoaXMub3B0aW9ucztpZihvKXJldHVybiB0aGlzLnJvb3Quc2hhcmVkTm9kZXMuZ2V0KG8pfXByb21vdGUoe25lZWRzUmVzZXQ6byx0cmFuc2l0aW9uOmwscHJlc2VydmVGb2xsb3dPcGFjaXR5OmR9PXt9KXtjb25zdCBjPXRoaXMuZ2V0U3RhY2soKTtjJiZjLnByb21vdGUodGhpcyxkKSxvJiYodGhpcy5wcm9qZWN0aW9uRGVsdGE9dm9pZCAwLHRoaXMubmVlZHNSZXNldD0hMCksbCYmdGhpcy5zZXRPcHRpb25zKHt0cmFuc2l0aW9uOmx9KX1yZWxlZ2F0ZSgpe2NvbnN0IG89dGhpcy5nZXRTdGFjaygpO3JldHVybiBvP28ucmVsZWdhdGUodGhpcyk6ITF9cmVzZXRTa2V3QW5kUm90YXRpb24oKXtjb25zdHt2aXN1YWxFbGVtZW50Om99PXRoaXMub3B0aW9ucztpZighbylyZXR1cm47bGV0IGw9ITE7Y29uc3R7bGF0ZXN0VmFsdWVzOmR9PW87aWYoKGQuenx8ZC5yb3RhdGV8fGQucm90YXRlWHx8ZC5yb3RhdGVZfHxkLnJvdGF0ZVp8fGQuc2tld1h8fGQuc2tld1kpJiYobD0hMCksIWwpcmV0dXJuO2NvbnN0IGM9e307ZC56JiZjbygieiIsbyxjLHRoaXMuYW5pbWF0aW9uVmFsdWVzKTtmb3IobGV0IHU9MDt1PGxvLmxlbmd0aDt1KyspY28oYHJvdGF0ZSR7bG9bdV19YCxvLGMsdGhpcy5hbmltYXRpb25WYWx1ZXMpLGNvKGBza2V3JHtsb1t1XX1gLG8sYyx0aGlzLmFuaW1hdGlvblZhbHVlcyk7by5yZW5kZXIoKTtmb3IoY29uc3QgdSBpbiBjKW8uc2V0U3RhdGljVmFsdWUodSxjW3VdKSx0aGlzLmFuaW1hdGlvblZhbHVlcyYmKHRoaXMuYW5pbWF0aW9uVmFsdWVzW3VdPWNbdV0pO28uc2NoZWR1bGVSZW5kZXIoKX1hcHBseVByb2plY3Rpb25TdHlsZXMobyxsKXtpZighdGhpcy5pbnN0YW5jZXx8dGhpcy5pc1NWRylyZXR1cm47aWYoIXRoaXMuaXNWaXNpYmxlKXtvLnZpc2liaWxpdHk9ImhpZGRlbiI7cmV0dXJufWNvbnN0IGQ9dGhpcy5nZXRUcmFuc2Zvcm1UZW1wbGF0ZSgpO2lmKHRoaXMubmVlZHNSZXNldCl7dGhpcy5uZWVkc1Jlc2V0PSExLG8udmlzaWJpbGl0eT0iIixvLm9wYWNpdHk9IiIsby5wb2ludGVyRXZlbnRzPVFyKGw/LnBvaW50ZXJFdmVudHMpfHwiIixvLnRyYW5zZm9ybT1kP2QodGhpcy5sYXRlc3RWYWx1ZXMsIiIpOiJub25lIjtyZXR1cm59Y29uc3QgYz10aGlzLmdldExlYWQoKTtpZighdGhpcy5wcm9qZWN0aW9uRGVsdGF8fCF0aGlzLmxheW91dHx8IWMudGFyZ2V0KXt0aGlzLm9wdGlvbnMubGF5b3V0SWQmJihvLm9wYWNpdHk9dGhpcy5sYXRlc3RWYWx1ZXMub3BhY2l0eSE9PXZvaWQgMD90aGlzLmxhdGVzdFZhbHVlcy5vcGFjaXR5OjEsby5wb2ludGVyRXZlbnRzPVFyKGw/LnBvaW50ZXJFdmVudHMpfHwiIiksdGhpcy5oYXNQcm9qZWN0ZWQmJiFQbih0aGlzLmxhdGVzdFZhbHVlcykmJihvLnRyYW5zZm9ybT1kP2Qoe30sIiIpOiJub25lIix0aGlzLmhhc1Byb2plY3RlZD0hMSk7cmV0dXJufW8udmlzaWJpbGl0eT0iIjtjb25zdCB1PWMuYW5pbWF0aW9uVmFsdWVzfHxjLmxhdGVzdFZhbHVlczt0aGlzLmFwcGx5VHJhbnNmb3Jtc1RvVGFyZ2V0KCk7bGV0IGY9eFQodGhpcy5wcm9qZWN0aW9uRGVsdGFXaXRoVHJhbnNmb3JtLHRoaXMudHJlZVNjYWxlLHUpO2QmJihmPWQodSxmKSksby50cmFuc2Zvcm09Zjtjb25zdHt4OmgseTpwfT10aGlzLnByb2plY3Rpb25EZWx0YTtvLnRyYW5zZm9ybU9yaWdpbj1gJHtoLm9yaWdpbioxMDB9JSAke3Aub3JpZ2luKjEwMH0lIDBgLGMuYW5pbWF0aW9uVmFsdWVzP28ub3BhY2l0eT1jPT09dGhpcz91Lm9wYWNpdHk/P3RoaXMubGF0ZXN0VmFsdWVzLm9wYWNpdHk/PzE6dGhpcy5wcmVzZXJ2ZU9wYWNpdHk/dGhpcy5sYXRlc3RWYWx1ZXMub3BhY2l0eTp1Lm9wYWNpdHlFeGl0Om8ub3BhY2l0eT1jPT09dGhpcz91Lm9wYWNpdHkhPT12b2lkIDA/dS5vcGFjaXR5OiIiOnUub3BhY2l0eUV4aXQhPT12b2lkIDA/dS5vcGFjaXR5RXhpdDowO2Zvcihjb25zdCBnIGluIHVhKXtpZih1W2ddPT09dm9pZCAwKWNvbnRpbnVlO2NvbnN0e2NvcnJlY3Q6eSxhcHBseVRvOnYsaXNDU1NWYXJpYWJsZTp4fT11YVtnXSx3PWY9PT0ibm9uZSI/dVtnXTp5KHVbZ10sYyk7aWYodil7Y29uc3QgYj12Lmxlbmd0aDtmb3IobGV0IEM9MDtDPGI7QysrKW9bdltDXV09d31lbHNlIHg/dGhpcy5vcHRpb25zLnZpc3VhbEVsZW1lbnQucmVuZGVyU3RhdGUudmFyc1tnXT13Om9bZ109d310aGlzLm9wdGlvbnMubGF5b3V0SWQmJihvLnBvaW50ZXJFdmVudHM9Yz09PXRoaXM/UXIobD8ucG9pbnRlckV2ZW50cyl8fCIiOiJub25lIil9Y2xlYXJTbmFwc2hvdCgpe3RoaXMucmVzdW1lRnJvbT10aGlzLnNuYXBzaG90PXZvaWQgMH1yZXNldFRyZWUoKXt0aGlzLnJvb3Qubm9kZXMuZm9yRWFjaChvPT5vLmN1cnJlbnRBbmltYXRpb24/LnN0b3AoKSksdGhpcy5yb290Lm5vZGVzLmZvckVhY2gobWQpLHRoaXMucm9vdC5zaGFyZWROb2Rlcy5jbGVhcigpfX19ZnVuY3Rpb24gUlQoZSl7ZS51cGRhdGVMYXlvdXQoKX1mdW5jdGlvbiBEVChlKXtjb25zdCB0PWUucmVzdW1lRnJvbT8uc25hcHNob3R8fGUuc25hcHNob3Q7aWYoZS5pc0xlYWQoKSYmZS5sYXlvdXQmJnQmJmUuaGFzTGlzdGVuZXJzKCJkaWRVcGRhdGUiKSl7Y29uc3R7bGF5b3V0Qm94Om4sbWVhc3VyZWRCb3g6c309ZS5sYXlvdXQse2FuaW1hdGlvblR5cGU6cn09ZS5vcHRpb25zLGk9dC5zb3VyY2UhPT1lLmxheW91dC5zb3VyY2U7aWYocj09PSJzaXplIilUdCh1PT57Y29uc3QgZj1pP3QubWVhc3VyZWRCb3hbdV06dC5sYXlvdXRCb3hbdV0saD16ZShmKTtmLm1pbj1uW3VdLm1pbixmLm1heD1mLm1pbitofSk7ZWxzZSBpZihyPT09IngifHxyPT09InkiKXtjb25zdCB1PXI9PT0ieCI/InkiOiJ4IjtmYShpP3QubWVhc3VyZWRCb3hbdV06dC5sYXlvdXRCb3hbdV0sblt1XSl9ZWxzZSBacChyLHQubGF5b3V0Qm94LG4pJiZUdCh1PT57Y29uc3QgZj1pP3QubWVhc3VyZWRCb3hbdV06dC5sYXlvdXRCb3hbdV0saD16ZShuW3VdKTtmLm1heD1mLm1pbitoLGUucmVsYXRpdmVUYXJnZXQmJiFlLmN1cnJlbnRBbmltYXRpb24mJihlLmlzUHJvamVjdGlvbkRpcnR5PSEwLGUucmVsYXRpdmVUYXJnZXRbdV0ubWF4PWUucmVsYXRpdmVUYXJnZXRbdV0ubWluK2gpfSk7Y29uc3Qgbz1ucygpO1dzKG8sbix0LmxheW91dEJveCk7Y29uc3QgbD1ucygpO2k/V3MobCxlLmFwcGx5VHJhbnNmb3JtKHMsITApLHQubWVhc3VyZWRCb3gpOldzKGwsbix0LmxheW91dEJveCk7Y29uc3QgZD0hR3Aobyk7bGV0IGM9ITE7aWYoIWUucmVzdW1lRnJvbSl7Y29uc3QgdT1lLmdldENsb3Nlc3RQcm9qZWN0aW5nUGFyZW50KCk7aWYodSYmIXUucmVzdW1lRnJvbSl7Y29uc3R7c25hcHNob3Q6ZixsYXlvdXQ6aH09dTtpZihmJiZoKXtjb25zdCBwPWUub3B0aW9ucy5sYXlvdXRBbmNob3J8fHZvaWQgMCxnPVRlKCk7Z2koZyx0LmxheW91dEJveCxmLmxheW91dEJveCxwKTtjb25zdCB5PVRlKCk7Z2koeSxuLGgubGF5b3V0Qm94LHApLFlwKGcseSl8fChjPSEwKSx1Lm9wdGlvbnMubGF5b3V0Um9vdCYmKGUucmVsYXRpdmVUYXJnZXQ9eSxlLnJlbGF0aXZlVGFyZ2V0T3JpZ2luPWcsZS5yZWxhdGl2ZVBhcmVudD11KX19fWUubm90aWZ5TGlzdGVuZXJzKCJkaWRVcGRhdGUiLHtsYXlvdXQ6bixzbmFwc2hvdDp0LGRlbHRhOmwsbGF5b3V0RGVsdGE6byxoYXNMYXlvdXRDaGFuZ2VkOmQsaGFzUmVsYXRpdmVMYXlvdXRDaGFuZ2VkOmN9KX1lbHNlIGlmKGUuaXNMZWFkKCkpe2NvbnN0e29uRXhpdENvbXBsZXRlOm59PWUub3B0aW9ucztuJiZuKCl9ZS5vcHRpb25zLnRyYW5zaXRpb249dm9pZCAwfWZ1bmN0aW9uIE1UKGUpe2UucGFyZW50JiYoZS5pc1Byb2plY3RpbmcoKXx8KGUuaXNQcm9qZWN0aW9uRGlydHk9ZS5wYXJlbnQuaXNQcm9qZWN0aW9uRGlydHkpLGUuaXNTaGFyZWRQcm9qZWN0aW9uRGlydHl8fChlLmlzU2hhcmVkUHJvamVjdGlvbkRpcnR5PSEhKGUuaXNQcm9qZWN0aW9uRGlydHl8fGUucGFyZW50LmlzUHJvamVjdGlvbkRpcnR5fHxlLnBhcmVudC5pc1NoYXJlZFByb2plY3Rpb25EaXJ0eSkpLGUuaXNUcmFuc2Zvcm1EaXJ0eXx8KGUuaXNUcmFuc2Zvcm1EaXJ0eT1lLnBhcmVudC5pc1RyYW5zZm9ybURpcnR5KSl9ZnVuY3Rpb24gT1QoZSl7ZS5pc1Byb2plY3Rpb25EaXJ0eT1lLmlzU2hhcmVkUHJvamVjdGlvbkRpcnR5PWUuaXNUcmFuc2Zvcm1EaXJ0eT0hMX1mdW5jdGlvbiBJVChlKXtlLmNsZWFyU25hcHNob3QoKX1mdW5jdGlvbiBtZChlKXtlLmNsZWFyTWVhc3VyZW1lbnRzKCl9ZnVuY3Rpb24gTFQoZSl7ZS5pc0xheW91dERpcnR5PSEwLGUudXBkYXRlTGF5b3V0KCl9ZnVuY3Rpb24gZ2QoZSl7ZS5pc0xheW91dERpcnR5PSExfWZ1bmN0aW9uIEZUKGUpe2UuaXNBbmltYXRpb25CbG9ja2VkJiZlLmxheW91dCYmIWUuaXNMYXlvdXREaXJ0eSYmKGUuc25hcHNob3Q9ZS5sYXlvdXQsZS5pc0xheW91dERpcnR5PSEwKX1mdW5jdGlvbiBWVChlKXtjb25zdHt2aXN1YWxFbGVtZW50OnR9PWUub3B0aW9uczt0JiZ0LmdldFByb3BzKCkub25CZWZvcmVMYXlvdXRNZWFzdXJlJiZ0Lm5vdGlmeSgiQmVmb3JlTGF5b3V0TWVhc3VyZSIpLGUucmVzZXRUcmFuc2Zvcm0oKX1mdW5jdGlvbiB5ZChlKXtlLmZpbmlzaEFuaW1hdGlvbigpLGUudGFyZ2V0RGVsdGE9ZS5yZWxhdGl2ZVRhcmdldD1lLnRhcmdldD12b2lkIDAsZS5pc1Byb2plY3Rpb25EaXJ0eT0hMH1mdW5jdGlvbiBfVChlKXtlLnJlc29sdmVUYXJnZXREZWx0YSgpfWZ1bmN0aW9uIEJUKGUpe2UuY2FsY1Byb2plY3Rpb24oKX1mdW5jdGlvbiBXVChlKXtlLnJlc2V0U2tld0FuZFJvdGF0aW9uKCl9ZnVuY3Rpb24gelQoZSl7ZS5yZW1vdmVMZWFkU25hcHNob3QoKX1mdW5jdGlvbiB2ZChlLHQsbil7ZS50cmFuc2xhdGU9Y2UodC50cmFuc2xhdGUsMCxuKSxlLnNjYWxlPWNlKHQuc2NhbGUsMSxuKSxlLm9yaWdpbj10Lm9yaWdpbixlLm9yaWdpblBvaW50PXQub3JpZ2luUG9pbnR9ZnVuY3Rpb24geGQoZSx0LG4scyl7ZS5taW49Y2UodC5taW4sbi5taW4scyksZS5tYXg9Y2UodC5tYXgsbi5tYXgscyl9ZnVuY3Rpb24gVVQoZSx0LG4scyl7eGQoZS54LHQueCxuLngscykseGQoZS55LHQueSxuLnkscyl9ZnVuY3Rpb24gJFQoZSl7cmV0dXJuIGUuYW5pbWF0aW9uVmFsdWVzJiZlLmFuaW1hdGlvblZhbHVlcy5vcGFjaXR5RXhpdCE9PXZvaWQgMH1jb25zdCBIVD17ZHVyYXRpb246LjQ1LGVhc2U6Wy40LDAsLjEsMV19LGJkPWU9PnR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IudXNlckFnZW50JiZuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZSksd2Q9YmQoImFwcGxld2Via2l0LyIpJiYhYmQoImNocm9tZS8iKT9NYXRoLnJvdW5kOmx0O2Z1bmN0aW9uIENkKGUpe2UubWluPXdkKGUubWluKSxlLm1heD13ZChlLm1heCl9ZnVuY3Rpb24gcVQoZSl7Q2QoZS54KSxDZChlLnkpfWZ1bmN0aW9uIFpwKGUsdCxuKXtyZXR1cm4gZT09PSJwb3NpdGlvbiJ8fGU9PT0icHJlc2VydmUtYXNwZWN0IiYmIWhUKGRkKHQpLGRkKG4pLC4yKX1mdW5jdGlvbiBLVChlKXtyZXR1cm4gZSE9PWUucm9vdCYmZS5zY3JvbGw/Lndhc1Jvb3R9Y29uc3QgR1Q9SnAoe2F0dGFjaFJlc2l6ZUxpc3RlbmVyOihlLHQpPT50cihlLCJyZXNpemUiLHQpLG1lYXN1cmVTY3JvbGw6KCk9Pih7eDpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdHx8ZG9jdW1lbnQuYm9keT8uc2Nyb2xsTGVmdHx8MCx5OmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fGRvY3VtZW50LmJvZHk/LnNjcm9sbFRvcHx8MH0pLGNoZWNrSXNTY3JvbGxSb290OigpPT4hMH0pLHVvPXtjdXJyZW50OnZvaWQgMH0sZW09SnAoe21lYXN1cmVTY3JvbGw6ZT0+KHt4OmUuc2Nyb2xsTGVmdCx5OmUuc2Nyb2xsVG9wfSksZGVmYXVsdFBhcmVudDooKT0+e2lmKCF1by5jdXJyZW50KXtjb25zdCBlPW5ldyBHVCh7fSk7ZS5tb3VudCh3aW5kb3cpLGUuc2V0T3B0aW9ucyh7bGF5b3V0U2Nyb2xsOiEwfSksdW8uY3VycmVudD1lfXJldHVybiB1by5jdXJyZW50fSxyZXNldFRyYW5zZm9ybTooZSx0KT0+e2Uuc3R5bGUudHJhbnNmb3JtPXQhPT12b2lkIDA/dDoibm9uZSJ9LGNoZWNrSXNTY3JvbGxSb290OmU9PndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLnBvc2l0aW9uPT09ImZpeGVkIn0pLFNsPW0uY3JlYXRlQ29udGV4dCh7dHJhbnNmb3JtUGFnZVBvaW50OmU9PmUsaXNTdGF0aWM6ITEscmVkdWNlZE1vdGlvbjoibmV2ZXIifSk7ZnVuY3Rpb24gVGQoZSx0KXtpZih0eXBlb2YgZT09ImZ1bmN0aW9uIilyZXR1cm4gZSh0KTtlIT1udWxsJiYoZS5jdXJyZW50PXQpfWZ1bmN0aW9uIFlUKC4uLmUpe3JldHVybiB0PT57bGV0IG49ITE7Y29uc3Qgcz1lLm1hcChyPT57Y29uc3QgaT1UZChyLHQpO3JldHVybiFuJiZ0eXBlb2YgaT09ImZ1bmN0aW9uIiYmKG49ITApLGl9KTtpZihuKXJldHVybigpPT57Zm9yKGxldCByPTA7cjxzLmxlbmd0aDtyKyspe2NvbnN0IGk9c1tyXTt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pKCk6VGQoZVtyXSxudWxsKX19fX1mdW5jdGlvbiBYVCguLi5lKXtyZXR1cm4gbS51c2VDYWxsYmFjayhZVCguLi5lKSxlKX1jbGFzcyBRVCBleHRlbmRzIG0uQ29tcG9uZW50e2dldFNuYXBzaG90QmVmb3JlVXBkYXRlKHQpe2NvbnN0IG49dGhpcy5wcm9wcy5jaGlsZFJlZi5jdXJyZW50O2lmKEhyKG4pJiZ0LmlzUHJlc2VudCYmIXRoaXMucHJvcHMuaXNQcmVzZW50JiZ0aGlzLnByb3BzLnBvcCE9PSExKXtjb25zdCBzPW4ub2Zmc2V0UGFyZW50LHI9SHIocykmJnMub2Zmc2V0V2lkdGh8fDAsaT1IcihzKSYmcy5vZmZzZXRIZWlnaHR8fDAsbz1nZXRDb21wdXRlZFN0eWxlKG4pLGw9dGhpcy5wcm9wcy5zaXplUmVmLmN1cnJlbnQ7bC5oZWlnaHQ9cGFyc2VGbG9hdChvLmhlaWdodCksbC53aWR0aD1wYXJzZUZsb2F0KG8ud2lkdGgpLGwudG9wPW4ub2Zmc2V0VG9wLGwubGVmdD1uLm9mZnNldExlZnQsbC5yaWdodD1yLWwud2lkdGgtbC5sZWZ0LGwuYm90dG9tPWktbC5oZWlnaHQtbC50b3AsbC5kaXJlY3Rpb249by5kaXJlY3Rpb259cmV0dXJuIG51bGx9Y29tcG9uZW50RGlkVXBkYXRlKCl7fXJlbmRlcigpe3JldHVybiB0aGlzLnByb3BzLmNoaWxkcmVufX1mdW5jdGlvbiBKVCh7Y2hpbGRyZW46ZSxpc1ByZXNlbnQ6dCxhbmNob3JYOm4sYW5jaG9yWTpzLHJvb3Q6cixwb3A6aX0pe2NvbnN0IG89bS51c2VJZCgpLGw9bS51c2VSZWYobnVsbCksZD1tLnVzZVJlZih7d2lkdGg6MCxoZWlnaHQ6MCx0b3A6MCxsZWZ0OjAscmlnaHQ6MCxib3R0b206MCxkaXJlY3Rpb246Imx0ciJ9KSx7bm9uY2U6Y309bS51c2VDb250ZXh0KFNsKSx1PWUucHJvcHM/LnJlZj8/ZT8ucmVmLGY9WFQobCx1KTtyZXR1cm4gbS51c2VJbnNlcnRpb25FZmZlY3QoKCk9Pntjb25zdHt3aWR0aDpoLGhlaWdodDpwLHRvcDpnLGxlZnQ6eSxyaWdodDp2LGJvdHRvbTp4LGRpcmVjdGlvbjp3fT1kLmN1cnJlbnQ7aWYodHx8aT09PSExfHwhbC5jdXJyZW50fHwhaHx8IXApcmV0dXJuO2NvbnN0IGI9dz09PSJydGwiLEM9bj09PSJsZWZ0Ij9iP2ByaWdodDogJHt2fWA6YGxlZnQ6ICR7eX1gOmI/YGxlZnQ6ICR7eX1gOmByaWdodDogJHt2fWAsUz1zPT09ImJvdHRvbSI/YGJvdHRvbTogJHt4fWA6YHRvcDogJHtnfWA7bC5jdXJyZW50LmRhdGFzZXQubW90aW9uUG9wSWQ9bztjb25zdCBQPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7YyYmKFAubm9uY2U9Yyk7Y29uc3QgRT1yPz9kb2N1bWVudC5oZWFkO3JldHVybiBFLmFwcGVuZENoaWxkKFApLFAuc2hlZXQmJlAuc2hlZXQuaW5zZXJ0UnVsZShgCiAgICAgICAgICBbZGF0YS1tb3Rpb24tcG9wLWlkPSIke299Il0gewogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKICAgICAgICAgICAgd2lkdGg6ICR7aH1weCAhaW1wb3J0YW50OwogICAgICAgICAgICBoZWlnaHQ6ICR7cH1weCAhaW1wb3J0YW50OwogICAgICAgICAgICAke0N9cHggIWltcG9ydGFudDsKICAgICAgICAgICAgJHtTfXB4ICFpbXBvcnRhbnQ7CiAgICAgICAgICB9CiAgICAgICAgYCksKCk9PntsLmN1cnJlbnQ/LnJlbW92ZUF0dHJpYnV0ZSgiZGF0YS1tb3Rpb24tcG9wLWlkIiksRS5jb250YWlucyhQKSYmRS5yZW1vdmVDaGlsZChQKX19LFt0XSksYS5qc3goUVQse2lzUHJlc2VudDp0LGNoaWxkUmVmOmwsc2l6ZVJlZjpkLHBvcDppLGNoaWxkcmVuOmk9PT0hMT9lOm0uY2xvbmVFbGVtZW50KGUse3JlZjpmfSl9KX1jb25zdCBaVD0oe2NoaWxkcmVuOmUsaW5pdGlhbDp0LGlzUHJlc2VudDpuLG9uRXhpdENvbXBsZXRlOnMsY3VzdG9tOnIscHJlc2VuY2VBZmZlY3RzTGF5b3V0OmksbW9kZTpvLGFuY2hvclg6bCxhbmNob3JZOmQscm9vdDpjfSk9Pntjb25zdCB1PUphKGVTKSxmPW0udXNlSWQoKSxoPW0udXNlUmVmKG4pLHA9bS51c2VSZWYocyk7WmEoKCk9PntoLmN1cnJlbnQ9bixwLmN1cnJlbnQ9c30pO2xldCBnPSEwLHk9bS51c2VNZW1vKCgpPT4oZz0hMSx7aWQ6Zixpbml0aWFsOnQsaXNQcmVzZW50Om4sY3VzdG9tOnIsb25FeGl0Q29tcGxldGU6dj0+e3Uuc2V0KHYsITApO2Zvcihjb25zdCB4IG9mIHUudmFsdWVzKCkpaWYoIXgpcmV0dXJuO3MmJnMoKX0scmVnaXN0ZXI6dj0+KHUuc2V0KHYsITEpLCgpPT57dS5kZWxldGUodiksIWguY3VycmVudCYmIXUuc2l6ZSYmcC5jdXJyZW50Py4oKX0pfSksW24sdSxzXSk7cmV0dXJuIGkmJmcmJih5PXsuLi55fSksbS51c2VNZW1vKCgpPT57dS5mb3JFYWNoKCh2LHgpPT51LnNldCh4LCExKSl9LFtuXSksbS51c2VFZmZlY3QoKCk9PnshbiYmIXUuc2l6ZSYmcyYmcygpfSxbbl0pLGU9YS5qc3goSlQse3BvcDpvPT09InBvcExheW91dCIsaXNQcmVzZW50Om4sYW5jaG9yWDpsLGFuY2hvclk6ZCxyb290OmMsY2hpbGRyZW46ZX0pLGEuanN4KE5pLlByb3ZpZGVyLHt2YWx1ZTp5LGNoaWxkcmVuOmV9KX07ZnVuY3Rpb24gZVMoKXtyZXR1cm4gbmV3IE1hcH1mdW5jdGlvbiB0bShlPSEwKXtjb25zdCB0PW0udXNlQ29udGV4dChOaSk7aWYodD09PW51bGwpcmV0dXJuWyEwLG51bGxdO2NvbnN0e2lzUHJlc2VudDpuLG9uRXhpdENvbXBsZXRlOnMscmVnaXN0ZXI6cn09dCxpPW0udXNlSWQoKTttLnVzZUVmZmVjdCgoKT0+e2lmKGUpcmV0dXJuIHIoaSl9LFtlXSk7Y29uc3Qgbz1tLnVzZUNhbGxiYWNrKCgpPT5lJiZzJiZzKGkpLFtpLHMsZV0pO3JldHVybiFuJiZzP1shMSxvXTpbITBdfWNvbnN0IE5yPWU9PmUua2V5fHwiIjtmdW5jdGlvbiBTZChlKXtjb25zdCB0PVtdO3JldHVybiBtLkNoaWxkcmVuLmZvckVhY2goZSxuPT57bS5pc1ZhbGlkRWxlbWVudChuKSYmdC5wdXNoKG4pfSksdH1jb25zdCB0Uz0oe2NoaWxkcmVuOmUsY3VzdG9tOnQsaW5pdGlhbDpuPSEwLG9uRXhpdENvbXBsZXRlOnMscHJlc2VuY2VBZmZlY3RzTGF5b3V0OnI9ITAsbW9kZTppPSJzeW5jIixwcm9wYWdhdGU6bz0hMSxhbmNob3JYOmw9ImxlZnQiLGFuY2hvclk6ZD0idG9wIixyb290OmN9KT0+e2NvbnN0W3UsZl09dG0obyksaD1tLnVzZU1lbW8oKCk9PlNkKGUpLFtlXSkscD1vJiYhdT9bXTpoLm1hcChOciksZz1tLnVzZVJlZighMCkseT1tLnVzZVJlZihoKSx2PUphKCgpPT5uZXcgTWFwKSx4PW0udXNlUmVmKG5ldyBTZXQpLFt3LGJdPW0udXNlU3RhdGUoaCksW0MsU109bS51c2VTdGF0ZShoKTtaYSgoKT0+e2cuY3VycmVudD0hMSx5LmN1cnJlbnQ9aDtmb3IobGV0IGs9MDtrPEMubGVuZ3RoO2srKyl7Y29uc3QgUj1OcihDW2tdKTtwLmluY2x1ZGVzKFIpPyh2LmRlbGV0ZShSKSx4LmN1cnJlbnQuZGVsZXRlKFIpKTp2LmdldChSKSE9PSEwJiZ2LnNldChSLCExKX19LFtDLHAubGVuZ3RoLHAuam9pbigiLSIpXSk7Y29uc3QgUD1bXTtpZihoIT09dyl7bGV0IGs9Wy4uLmhdO2ZvcihsZXQgUj0wO1I8Qy5sZW5ndGg7UisrKXtjb25zdCBBPUNbUl0sRD1OcihBKTtwLmluY2x1ZGVzKEQpfHwoay5zcGxpY2UoUiwwLEEpLFAucHVzaChBKSl9cmV0dXJuIGk9PT0id2FpdCImJlAubGVuZ3RoJiYoaz1QKSxTKFNkKGspKSxiKGgpLG51bGx9Y29uc3R7Zm9yY2VSZW5kZXI6RX09bS51c2VDb250ZXh0KFFhKTtyZXR1cm4gYS5qc3goYS5GcmFnbWVudCx7Y2hpbGRyZW46Qy5tYXAoaz0+e2NvbnN0IFI9TnIoayksQT1vJiYhdT8hMTpoPT09Q3x8cC5pbmNsdWRlcyhSKSxEPSgpPT57aWYoeC5jdXJyZW50LmhhcyhSKSlyZXR1cm47aWYodi5oYXMoUikpeC5jdXJyZW50LmFkZChSKSx2LnNldChSLCEwKTtlbHNlIHJldHVybjtsZXQgTj0hMDt2LmZvckVhY2goRj0+e0Z8fChOPSExKX0pLE4mJihFPy4oKSxTKHkuY3VycmVudCksbyYmZj8uKCkscyYmcygpKX07cmV0dXJuIGEuanN4KFpULHtpc1ByZXNlbnQ6QSxpbml0aWFsOiFnLmN1cnJlbnR8fG4/dm9pZCAwOiExLGN1c3RvbTp0LHByZXNlbmNlQWZmZWN0c0xheW91dDpyLG1vZGU6aSxyb290OmMsb25FeGl0Q29tcGxldGU6QT92b2lkIDA6RCxhbmNob3JYOmwsYW5jaG9yWTpkLGNoaWxkcmVuOmt9LFIpfSl9KX0sbm09bS5jcmVhdGVDb250ZXh0KHtzdHJpY3Q6ITF9KSxQZD17YW5pbWF0aW9uOlsiYW5pbWF0ZSIsInZhcmlhbnRzIiwid2hpbGVIb3ZlciIsIndoaWxlVGFwIiwiZXhpdCIsIndoaWxlSW5WaWV3Iiwid2hpbGVGb2N1cyIsIndoaWxlRHJhZyJdLGV4aXQ6WyJleGl0Il0sZHJhZzpbImRyYWciLCJkcmFnQ29udHJvbHMiXSxmb2N1czpbIndoaWxlRm9jdXMiXSxob3ZlcjpbIndoaWxlSG92ZXIiLCJvbkhvdmVyU3RhcnQiLCJvbkhvdmVyRW5kIl0sdGFwOlsid2hpbGVUYXAiLCJvblRhcCIsIm9uVGFwU3RhcnQiLCJvblRhcENhbmNlbCJdLHBhbjpbIm9uUGFuIiwib25QYW5TdGFydCIsIm9uUGFuU2Vzc2lvblN0YXJ0Iiwib25QYW5FbmQiXSxpblZpZXc6WyJ3aGlsZUluVmlldyIsIm9uVmlld3BvcnRFbnRlciIsIm9uVmlld3BvcnRMZWF2ZSJdLGxheW91dDpbImxheW91dCIsImxheW91dElkIl19O2xldCBqZD0hMTtmdW5jdGlvbiBuUygpe2lmKGpkKXJldHVybjtjb25zdCBlPXt9O2Zvcihjb25zdCB0IGluIFBkKWVbdF09e2lzRW5hYmxlZDpuPT5QZFt0XS5zb21lKHM9PiEhbltzXSl9O0RwKGUpLGpkPSEwfWZ1bmN0aW9uIHNtKCl7cmV0dXJuIG5TKCksX0MoKX1mdW5jdGlvbiBzUyhlKXtjb25zdCB0PXNtKCk7Zm9yKGNvbnN0IG4gaW4gZSl0W25dPXsuLi50W25dLC4uLmVbbl19O0RwKHQpfWNvbnN0IHJTPW5ldyBTZXQoWyJhbmltYXRlIiwiZXhpdCIsInZhcmlhbnRzIiwiaW5pdGlhbCIsInN0eWxlIiwidmFsdWVzIiwidmFyaWFudHMiLCJ0cmFuc2l0aW9uIiwidHJhbnNmb3JtVGVtcGxhdGUiLCJjdXN0b20iLCJpbmhlcml0Iiwib25CZWZvcmVMYXlvdXRNZWFzdXJlIiwib25BbmltYXRpb25TdGFydCIsIm9uQW5pbWF0aW9uQ29tcGxldGUiLCJvblVwZGF0ZSIsIm9uRHJhZ1N0YXJ0Iiwib25EcmFnIiwib25EcmFnRW5kIiwib25NZWFzdXJlRHJhZ0NvbnN0cmFpbnRzIiwib25EaXJlY3Rpb25Mb2NrIiwib25EcmFnVHJhbnNpdGlvbkVuZCIsIl9kcmFnWCIsIl9kcmFnWSIsIm9uSG92ZXJTdGFydCIsIm9uSG92ZXJFbmQiLCJvblZpZXdwb3J0RW50ZXIiLCJvblZpZXdwb3J0TGVhdmUiLCJnbG9iYWxUYXBUYXJnZXQiLCJwcm9wYWdhdGUiLCJpZ25vcmVTdHJpY3QiLCJ2aWV3cG9ydCJdKTtmdW5jdGlvbiB5aShlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCJ3aGlsZSIpfHxlLnN0YXJ0c1dpdGgoImRyYWciKSYmZSE9PSJkcmFnZ2FibGUifHxlLnN0YXJ0c1dpdGgoImxheW91dCIpfHxlLnN0YXJ0c1dpdGgoIm9uVGFwIil8fGUuc3RhcnRzV2l0aCgib25QYW4iKXx8ZS5zdGFydHNXaXRoKCJvbkxheW91dCIpfHxyUy5oYXMoZSl9bGV0IHJtPWU9PiF5aShlKTtmdW5jdGlvbiBpUyhlKXt0eXBlb2YgZT09ImZ1bmN0aW9uIiYmKHJtPXQ9PnQuc3RhcnRzV2l0aCgib24iKT8heWkodCk6ZSh0KSl9dHJ5e2lTKHJlcXVpcmUoIkBlbW90aW9uL2lzLXByb3AtdmFsaWQiKS5kZWZhdWx0KX1jYXRjaHt9ZnVuY3Rpb24gb1MoZSx0LG4pe2NvbnN0IHM9e307Zm9yKGNvbnN0IHIgaW4gZSlyPT09InZhbHVlcyImJnR5cGVvZiBlLnZhbHVlcz09Im9iamVjdCJ8fERlKGVbcl0pfHwocm0ocil8fG49PT0hMCYmeWkocil8fCF0JiYheWkocil8fGUuZHJhZ2dhYmxlJiZyLnN0YXJ0c1dpdGgoIm9uRHJhZyIpKSYmKHNbcl09ZVtyXSk7cmV0dXJuIHN9Y29uc3QgT2k9bS5jcmVhdGVDb250ZXh0KHt9KTtmdW5jdGlvbiBhUyhlLHQpe2lmKE1pKGUpKXtjb25zdHtpbml0aWFsOm4sYW5pbWF0ZTpzfT1lO3JldHVybntpbml0aWFsOm49PT0hMXx8ZXIobik/bjp2b2lkIDAsYW5pbWF0ZTplcihzKT9zOnZvaWQgMH19cmV0dXJuIGUuaW5oZXJpdCE9PSExP3Q6e319ZnVuY3Rpb24gbFMoZSl7Y29uc3R7aW5pdGlhbDp0LGFuaW1hdGU6bn09YVMoZSxtLnVzZUNvbnRleHQoT2kpKTtyZXR1cm4gbS51c2VNZW1vKCgpPT4oe2luaXRpYWw6dCxhbmltYXRlOm59KSxbRWQodCksRWQobildKX1mdW5jdGlvbiBFZChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLmpvaW4oIiAiKTplfWNvbnN0IFBsPSgpPT4oe3N0eWxlOnt9LHRyYW5zZm9ybTp7fSx0cmFuc2Zvcm1PcmlnaW46e30sdmFyczp7fX0pO2Z1bmN0aW9uIGltKGUsdCxuKXtmb3IoY29uc3QgcyBpbiB0KSFEZSh0W3NdKSYmIV9wKHMsbikmJihlW3NdPXRbc10pfWZ1bmN0aW9uIGNTKHt0cmFuc2Zvcm1UZW1wbGF0ZTplfSx0KXtyZXR1cm4gbS51c2VNZW1vKCgpPT57Y29uc3Qgbj1QbCgpO3JldHVybiBDbChuLHQsZSksT2JqZWN0LmFzc2lnbih7fSxuLnZhcnMsbi5zdHlsZSl9LFt0XSl9ZnVuY3Rpb24gZFMoZSx0KXtjb25zdCBuPWUuc3R5bGV8fHt9LHM9e307cmV0dXJuIGltKHMsbixlKSxPYmplY3QuYXNzaWduKHMsY1MoZSx0KSksc31mdW5jdGlvbiB1UyhlLHQpe2NvbnN0IG49e30scz1kUyhlLHQpO3JldHVybiBlLmRyYWcmJmUuZHJhZ0xpc3RlbmVyIT09ITEmJihuLmRyYWdnYWJsZT0hMSxzLnVzZXJTZWxlY3Q9cy5XZWJraXRVc2VyU2VsZWN0PXMuV2Via2l0VG91Y2hDYWxsb3V0PSJub25lIixzLnRvdWNoQWN0aW9uPWUuZHJhZz09PSEwPyJub25lIjpgcGFuLSR7ZS5kcmFnPT09IngiPyJ5IjoieCJ9YCksZS50YWJJbmRleD09PXZvaWQgMCYmKGUub25UYXB8fGUub25UYXBTdGFydHx8ZS53aGlsZVRhcCkmJihuLnRhYkluZGV4PTApLG4uc3R5bGU9cyxufWNvbnN0IG9tPSgpPT4oey4uLlBsKCksYXR0cnM6e319KTtmdW5jdGlvbiBmUyhlLHQsbixzKXtjb25zdCByPW0udXNlTWVtbygoKT0+e2NvbnN0IGk9b20oKTtyZXR1cm4gQnAoaSx0LHpwKHMpLGUudHJhbnNmb3JtVGVtcGxhdGUsZS5zdHlsZSksey4uLmkuYXR0cnMsc3R5bGU6ey4uLmkuc3R5bGV9fX0sW3RdKTtpZihlLnN0eWxlKXtjb25zdCBpPXt9O2ltKGksZS5zdHlsZSxlKSxyLnN0eWxlPXsuLi5pLC4uLnIuc3R5bGV9fXJldHVybiByfWNvbnN0IGhTPVsiYW5pbWF0ZSIsImNpcmNsZSIsImRlZnMiLCJkZXNjIiwiZWxsaXBzZSIsImciLCJpbWFnZSIsImxpbmUiLCJmaWx0ZXIiLCJtYXJrZXIiLCJtYXNrIiwibWV0YWRhdGEiLCJwYXRoIiwicGF0dGVybiIsInBvbHlnb24iLCJwb2x5bGluZSIsInJlY3QiLCJzdG9wIiwic3dpdGNoIiwic3ltYm9sIiwic3ZnIiwidGV4dCIsInRzcGFuIiwidXNlIiwidmlldyJdO2Z1bmN0aW9uIGpsKGUpe3JldHVybiB0eXBlb2YgZSE9InN0cmluZyJ8fGUuaW5jbHVkZXMoIi0iKT8hMTohIShoUy5pbmRleE9mKGUpPi0xfHwvW0EtWl0vdS50ZXN0KGUpKX1mdW5jdGlvbiBwUyhlLHQsbix7bGF0ZXN0VmFsdWVzOnN9LHIsaT0hMSxvKXtjb25zdCBkPShvPz9qbChlKT9mUzp1UykodCxzLHIsZSksYz1vUyh0LHR5cGVvZiBlPT0ic3RyaW5nIixpKSx1PWUhPT1tLkZyYWdtZW50P3suLi5jLC4uLmQscmVmOm59Ont9LHtjaGlsZHJlbjpmfT10LGg9bS51c2VNZW1vKCgpPT5EZShmKT9mLmdldCgpOmYsW2ZdKTtyZXR1cm4gbS5jcmVhdGVFbGVtZW50KGUsey4uLnUsY2hpbGRyZW46aH0pfWZ1bmN0aW9uIG1TKHtzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6ZSxjcmVhdGVSZW5kZXJTdGF0ZTp0fSxuLHMscil7cmV0dXJue2xhdGVzdFZhbHVlczpnUyhuLHMscixlKSxyZW5kZXJTdGF0ZTp0KCl9fWZ1bmN0aW9uIGdTKGUsdCxuLHMpe2NvbnN0IHI9e30saT1zKGUse30pO2Zvcihjb25zdCBoIGluIGkpcltoXT1RcihpW2hdKTtsZXR7aW5pdGlhbDpvLGFuaW1hdGU6bH09ZTtjb25zdCBkPU1pKGUpLGM9TnAoZSk7dCYmYyYmIWQmJmUuaW5oZXJpdCE9PSExJiYobz09PXZvaWQgMCYmKG89dC5pbml0aWFsKSxsPT09dm9pZCAwJiYobD10LmFuaW1hdGUpKTtsZXQgdT1uP24uaW5pdGlhbD09PSExOiExO3U9dXx8bz09PSExO2NvbnN0IGY9dT9sOm87aWYoZiYmdHlwZW9mIGYhPSJib29sZWFuIiYmIURpKGYpKXtjb25zdCBoPUFycmF5LmlzQXJyYXkoZik/ZjpbZl07Zm9yKGxldCBwPTA7cDxoLmxlbmd0aDtwKyspe2NvbnN0IGc9cGwoZSxoW3BdKTtpZihnKXtjb25zdHt0cmFuc2l0aW9uRW5kOnksdHJhbnNpdGlvbjp2LC4uLnh9PWc7Zm9yKGNvbnN0IHcgaW4geCl7bGV0IGI9eFt3XTtpZihBcnJheS5pc0FycmF5KGIpKXtjb25zdCBDPXU/Yi5sZW5ndGgtMTowO2I9YltDXX1iIT09bnVsbCYmKHJbd109Yil9Zm9yKGNvbnN0IHcgaW4geSlyW3ddPXlbd119fX1yZXR1cm4gcn1jb25zdCBhbT1lPT4odCxuKT0+e2NvbnN0IHM9bS51c2VDb250ZXh0KE9pKSxyPW0udXNlQ29udGV4dChOaSksaT0oKT0+bVMoZSx0LHMscik7cmV0dXJuIG4/aSgpOkphKGkpfSx5Uz1hbSh7c2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzOlRsLGNyZWF0ZVJlbmRlclN0YXRlOlBsfSksdlM9YW0oe3NjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wczpVcCxjcmVhdGVSZW5kZXJTdGF0ZTpvbX0pLHhTPVN5bWJvbC5mb3IoIm1vdGlvbkNvbXBvbmVudFN5bWJvbCIpO2Z1bmN0aW9uIGJTKGUsdCxuKXtjb25zdCBzPW0udXNlUmVmKG4pO20udXNlSW5zZXJ0aW9uRWZmZWN0KCgpPT57cy5jdXJyZW50PW59KTtjb25zdCByPW0udXNlUmVmKG51bGwpO3JldHVybiBtLnVzZUNhbGxiYWNrKGk9PntpJiZlLm9uTW91bnQ/LihpKSx0JiYoaT90Lm1vdW50KGkpOnQudW5tb3VudCgpKTtjb25zdCBvPXMuY3VycmVudDtpZih0eXBlb2Ygbz09ImZ1bmN0aW9uIilpZihpKXtjb25zdCBsPW8oaSk7dHlwZW9mIGw9PSJmdW5jdGlvbiImJihyLmN1cnJlbnQ9bCl9ZWxzZSByLmN1cnJlbnQ/KHIuY3VycmVudCgpLHIuY3VycmVudD1udWxsKTpvKGkpO2Vsc2UgbyYmKG8uY3VycmVudD1pKX0sW3RdKX1jb25zdCBsbT1tLmNyZWF0ZUNvbnRleHQoe30pO2Z1bmN0aW9uIFFuKGUpe3JldHVybiBlJiZ0eXBlb2YgZT09Im9iamVjdCImJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJjdXJyZW50Iil9ZnVuY3Rpb24gd1MoZSx0LG4scyxyLGkpe2NvbnN0e3Zpc3VhbEVsZW1lbnQ6b309bS51c2VDb250ZXh0KE9pKSxsPW0udXNlQ29udGV4dChubSksZD1tLnVzZUNvbnRleHQoTmkpLGM9bS51c2VDb250ZXh0KFNsKSx1PWMucmVkdWNlZE1vdGlvbixmPWMuc2tpcEFuaW1hdGlvbnMsaD1tLnVzZVJlZihudWxsKSxwPW0udXNlUmVmKCExKTtzPXN8fGwucmVuZGVyZXIsIWguY3VycmVudCYmcyYmKGguY3VycmVudD1zKGUse3Zpc3VhbFN0YXRlOnQscGFyZW50Om8scHJvcHM6bixwcmVzZW5jZUNvbnRleHQ6ZCxibG9ja0luaXRpYWxBbmltYXRpb246ZD9kLmluaXRpYWw9PT0hMTohMSxyZWR1Y2VkTW90aW9uQ29uZmlnOnUsc2tpcEFuaW1hdGlvbnM6Zixpc1NWRzppfSkscC5jdXJyZW50JiZoLmN1cnJlbnQmJihoLmN1cnJlbnQubWFudWFsbHlBbmltYXRlT25Nb3VudD0hMCkpO2NvbnN0IGc9aC5jdXJyZW50LHk9bS51c2VDb250ZXh0KGxtKTtnJiYhZy5wcm9qZWN0aW9uJiZyJiYoZy50eXBlPT09Imh0bWwifHxnLnR5cGU9PT0ic3ZnIikmJkNTKGguY3VycmVudCxuLHIseSk7Y29uc3Qgdj1tLnVzZVJlZighMSk7bS51c2VJbnNlcnRpb25FZmZlY3QoKCk9PntnJiZ2LmN1cnJlbnQmJmcudXBkYXRlKG4sZCl9KTtjb25zdCB4PW5bdnBdLHc9bS51c2VSZWYoISF4JiZ0eXBlb2Ygd2luZG93PCJ1IiYmIXdpbmRvdy5Nb3Rpb25IYW5kb2ZmSXNDb21wbGV0ZT8uKHgpJiZ3aW5kb3cuTW90aW9uSGFzT3B0aW1pc2VkQW5pbWF0aW9uPy4oeCkpO3JldHVybiBaYSgoKT0+e3AuY3VycmVudD0hMCxnJiYodi5jdXJyZW50PSEwLHdpbmRvdy5Nb3Rpb25Jc01vdW50ZWQ9ITAsZy51cGRhdGVGZWF0dXJlcygpLGcuc2NoZWR1bGVSZW5kZXJNaWNyb3Rhc2soKSx3LmN1cnJlbnQmJmcuYW5pbWF0aW9uU3RhdGUmJmcuYW5pbWF0aW9uU3RhdGUuYW5pbWF0ZUNoYW5nZXMoKSl9KSxtLnVzZUVmZmVjdCgoKT0+e2cmJighdy5jdXJyZW50JiZnLmFuaW1hdGlvblN0YXRlJiZnLmFuaW1hdGlvblN0YXRlLmFuaW1hdGVDaGFuZ2VzKCksdy5jdXJyZW50JiYocXVldWVNaWNyb3Rhc2soKCk9Pnt3aW5kb3cuTW90aW9uSGFuZG9mZk1hcmtBc0NvbXBsZXRlPy4oeCl9KSx3LmN1cnJlbnQ9ITEpLGcuZW50ZXJpbmdDaGlsZHJlbj12b2lkIDApfSksZ31mdW5jdGlvbiBDUyhlLHQsbixzKXtjb25zdHtsYXlvdXRJZDpyLGxheW91dDppLGRyYWc6byxkcmFnQ29uc3RyYWludHM6bCxsYXlvdXRTY3JvbGw6ZCxsYXlvdXRSb290OmMsbGF5b3V0QW5jaG9yOnUsbGF5b3V0Q3Jvc3NmYWRlOmZ9PXQ7ZS5wcm9qZWN0aW9uPW5ldyBuKGUubGF0ZXN0VmFsdWVzLHRbImRhdGEtZnJhbWVyLXBvcnRhbC1pZCJdP3ZvaWQgMDpjbShlLnBhcmVudCkpLGUucHJvamVjdGlvbi5zZXRPcHRpb25zKHtsYXlvdXRJZDpyLGxheW91dDppLGFsd2F5c01lYXN1cmVMYXlvdXQ6ISFvfHxsJiZRbihsKSx2aXN1YWxFbGVtZW50OmUsYW5pbWF0aW9uVHlwZTp0eXBlb2YgaT09InN0cmluZyI/aToiYm90aCIsaW5pdGlhbFByb21vdGlvbkNvbmZpZzpzLGNyb3NzZmFkZTpmLGxheW91dFNjcm9sbDpkLGxheW91dFJvb3Q6YyxsYXlvdXRBbmNob3I6dX0pfWZ1bmN0aW9uIGNtKGUpe2lmKGUpcmV0dXJuIGUub3B0aW9ucy5hbGxvd1Byb2plY3Rpb24hPT0hMT9lLnByb2plY3Rpb246Y20oZS5wYXJlbnQpfWZ1bmN0aW9uIGZvKGUse2ZvcndhcmRNb3Rpb25Qcm9wczp0PSExLHR5cGU6bn09e30scyxyKXtzJiZzUyhzKTtjb25zdCBpPW4/bj09PSJzdmciOmpsKGUpLG89aT92Uzp5UztmdW5jdGlvbiBsKGMsdSl7bGV0IGY7Y29uc3QgaD17Li4ubS51c2VDb250ZXh0KFNsKSwuLi5jLGxheW91dElkOlRTKGMpfSx7aXNTdGF0aWM6cH09aCxnPWxTKGMpLHk9byhjLHApO2lmKCFwJiZ0eXBlb2Ygd2luZG93PCJ1Iil7U1MoKTtjb25zdCB2PVBTKGgpO2Y9di5NZWFzdXJlTGF5b3V0LGcudmlzdWFsRWxlbWVudD13UyhlLHksaCxyLHYuUHJvamVjdGlvbk5vZGUsaSl9cmV0dXJuIGEuanN4cyhPaS5Qcm92aWRlcix7dmFsdWU6ZyxjaGlsZHJlbjpbZiYmZy52aXN1YWxFbGVtZW50P2EuanN4KGYse3Zpc3VhbEVsZW1lbnQ6Zy52aXN1YWxFbGVtZW50LC4uLmh9KTpudWxsLHBTKGUsYyxiUyh5LGcudmlzdWFsRWxlbWVudCx1KSx5LHAsdCxpKV19KX1sLmRpc3BsYXlOYW1lPWBtb3Rpb24uJHt0eXBlb2YgZT09InN0cmluZyI/ZTpgY3JlYXRlKCR7ZS5kaXNwbGF5TmFtZT8/ZS5uYW1lPz8iIn0pYH1gO2NvbnN0IGQ9bS5mb3J3YXJkUmVmKGwpO3JldHVybiBkW3hTXT1lLGR9ZnVuY3Rpb24gVFMoe2xheW91dElkOmV9KXtjb25zdCB0PW0udXNlQ29udGV4dChRYSkuaWQ7cmV0dXJuIHQmJmUhPT12b2lkIDA/dCsiLSIrZTplfWZ1bmN0aW9uIFNTKGUsdCl7bS51c2VDb250ZXh0KG5tKS5zdHJpY3R9ZnVuY3Rpb24gUFMoZSl7Y29uc3QgdD1zbSgpLHtkcmFnOm4sbGF5b3V0OnN9PXQ7aWYoIW4mJiFzKXJldHVybnt9O2NvbnN0IHI9ey4uLm4sLi4uc307cmV0dXJue01lYXN1cmVMYXlvdXQ6bj8uaXNFbmFibGVkKGUpfHxzPy5pc0VuYWJsZWQoZSk/ci5NZWFzdXJlTGF5b3V0OnZvaWQgMCxQcm9qZWN0aW9uTm9kZTpyLlByb2plY3Rpb25Ob2RlfX1mdW5jdGlvbiBqUyhlLHQpe2lmKHR5cGVvZiBQcm94eT4idSIpcmV0dXJuIGZvO2NvbnN0IG49bmV3IE1hcCxzPShpLG8pPT5mbyhpLG8sZSx0KSxyPShpLG8pPT5zKGksbyk7cmV0dXJuIG5ldyBQcm94eShyLHtnZXQ6KGksbyk9Pm89PT0iY3JlYXRlIj9zOihuLmhhcyhvKXx8bi5zZXQobyxmbyhvLHZvaWQgMCxlLHQpKSxuLmdldChvKSl9KX1jb25zdCBFUz0oZSx0KT0+dC5pc1NWRz8/amwoZSk/bmV3IG5UKHQpOm5ldyBYQyh0LHthbGxvd1Byb2plY3Rpb246ZSE9PW0uRnJhZ21lbnR9KTtjbGFzcyBBUyBleHRlbmRzIHZue2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHQuYW5pbWF0aW9uU3RhdGV8fCh0LmFuaW1hdGlvblN0YXRlPWFUKHQpKX11cGRhdGVBbmltYXRpb25Db250cm9sc1N1YnNjcmlwdGlvbigpe2NvbnN0e2FuaW1hdGU6dH09dGhpcy5ub2RlLmdldFByb3BzKCk7RGkodCkmJih0aGlzLnVubW91bnRDb250cm9scz10LnN1YnNjcmliZSh0aGlzLm5vZGUpKX1tb3VudCgpe3RoaXMudXBkYXRlQW5pbWF0aW9uQ29udHJvbHNTdWJzY3JpcHRpb24oKX11cGRhdGUoKXtjb25zdHthbmltYXRlOnR9PXRoaXMubm9kZS5nZXRQcm9wcygpLHthbmltYXRlOm59PXRoaXMubm9kZS5wcmV2UHJvcHN8fHt9O3QhPT1uJiZ0aGlzLnVwZGF0ZUFuaW1hdGlvbkNvbnRyb2xzU3Vic2NyaXB0aW9uKCl9dW5tb3VudCgpe3RoaXMubm9kZS5hbmltYXRpb25TdGF0ZS5yZXNldCgpLHRoaXMudW5tb3VudENvbnRyb2xzPy4oKX19bGV0IGtTPTA7Y2xhc3MgTlMgZXh0ZW5kcyB2bntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pZD1rUysrLHRoaXMuaXNFeGl0Q29tcGxldGU9ITF9dXBkYXRlKCl7aWYoIXRoaXMubm9kZS5wcmVzZW5jZUNvbnRleHQpcmV0dXJuO2NvbnN0e2lzUHJlc2VudDp0LG9uRXhpdENvbXBsZXRlOm59PXRoaXMubm9kZS5wcmVzZW5jZUNvbnRleHQse2lzUHJlc2VudDpzfT10aGlzLm5vZGUucHJldlByZXNlbmNlQ29udGV4dHx8e307aWYoIXRoaXMubm9kZS5hbmltYXRpb25TdGF0ZXx8dD09PXMpcmV0dXJuO2lmKHQmJnM9PT0hMSl7aWYodGhpcy5pc0V4aXRDb21wbGV0ZSl7Y29uc3R7aW5pdGlhbDppLGN1c3RvbTpvfT10aGlzLm5vZGUuZ2V0UHJvcHMoKTtpZih0eXBlb2YgaT09InN0cmluZyJ8fHR5cGVvZiBpPT0ib2JqZWN0IiYmaSE9PW51bGwmJiFBcnJheS5pc0FycmF5KGkpKXtjb25zdCBsPUZuKHRoaXMubm9kZSxpLG8pO2lmKGwpe2NvbnN0e3RyYW5zaXRpb246ZCx0cmFuc2l0aW9uRW5kOmMsLi4udX09bDtmb3IoY29uc3QgZiBpbiB1KXRoaXMubm9kZS5nZXRWYWx1ZShmKT8uanVtcCh1W2ZdKX19dGhpcy5ub2RlLmFuaW1hdGlvblN0YXRlLnJlc2V0KCksdGhpcy5ub2RlLmFuaW1hdGlvblN0YXRlLmFuaW1hdGVDaGFuZ2VzKCl9ZWxzZSB0aGlzLm5vZGUuYW5pbWF0aW9uU3RhdGUuc2V0QWN0aXZlKCJleGl0IiwhMSk7dGhpcy5pc0V4aXRDb21wbGV0ZT0hMTtyZXR1cm59Y29uc3Qgcj10aGlzLm5vZGUuYW5pbWF0aW9uU3RhdGUuc2V0QWN0aXZlKCJleGl0IiwhdCk7biYmIXQmJnIudGhlbigoKT0+e3RoaXMuaXNFeGl0Q29tcGxldGU9ITAsbih0aGlzLmlkKX0pfW1vdW50KCl7Y29uc3R7cmVnaXN0ZXI6dCxvbkV4aXRDb21wbGV0ZTpufT10aGlzLm5vZGUucHJlc2VuY2VDb250ZXh0fHx7fTtuJiZuKHRoaXMuaWQpLHQmJih0aGlzLnVubW91bnQ9dCh0aGlzLmlkKSl9dW5tb3VudCgpe319Y29uc3QgUlM9e2FuaW1hdGlvbjp7RmVhdHVyZTpBU30sZXhpdDp7RmVhdHVyZTpOU319O2Z1bmN0aW9uIHByKGUpe3JldHVybntwb2ludDp7eDplLnBhZ2VYLHk6ZS5wYWdlWX19fWNvbnN0IERTPWU9PnQ9PnZsKHQpJiZlKHQscHIodCkpO2Z1bmN0aW9uIHpzKGUsdCxuLHMpe3JldHVybiB0cihlLHQsRFMobikscyl9Y29uc3QgZG09KHtjdXJyZW50OmV9KT0+ZT9lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc6bnVsbCxBZD0oZSx0KT0+TWF0aC5hYnMoZS10KTtmdW5jdGlvbiBNUyhlLHQpe2NvbnN0IG49QWQoZS54LHQueCkscz1BZChlLnksdC55KTtyZXR1cm4gTWF0aC5zcXJ0KG4qKjIrcyoqMil9Y29uc3Qga2Q9bmV3IFNldChbImF1dG8iLCJzY3JvbGwiXSk7Y2xhc3MgdW17Y29uc3RydWN0b3IodCxuLHt0cmFuc2Zvcm1QYWdlUG9pbnQ6cyxjb250ZXh0V2luZG93OnI9d2luZG93LGRyYWdTbmFwVG9PcmlnaW46aT0hMSxkaXN0YW5jZVRocmVzaG9sZDpvPTMsZWxlbWVudDpsfT17fSl7aWYodGhpcy5zdGFydEV2ZW50PW51bGwsdGhpcy5sYXN0TW92ZUV2ZW50PW51bGwsdGhpcy5sYXN0TW92ZUV2ZW50SW5mbz1udWxsLHRoaXMubGFzdFJhd01vdmVFdmVudEluZm89bnVsbCx0aGlzLmhhbmRsZXJzPXt9LHRoaXMuY29udGV4dFdpbmRvdz13aW5kb3csdGhpcy5zY3JvbGxQb3NpdGlvbnM9bmV3IE1hcCx0aGlzLnJlbW92ZVNjcm9sbExpc3RlbmVycz1udWxsLHRoaXMub25FbGVtZW50U2Nyb2xsPWc9Pnt0aGlzLmhhbmRsZVNjcm9sbChnLnRhcmdldCl9LHRoaXMub25XaW5kb3dTY3JvbGw9KCk9Pnt0aGlzLmhhbmRsZVNjcm9sbCh3aW5kb3cpfSx0aGlzLnVwZGF0ZVBvaW50PSgpPT57aWYoISh0aGlzLmxhc3RNb3ZlRXZlbnQmJnRoaXMubGFzdE1vdmVFdmVudEluZm8pKXJldHVybjt0aGlzLmxhc3RSYXdNb3ZlRXZlbnRJbmZvJiYodGhpcy5sYXN0TW92ZUV2ZW50SW5mbz1Scih0aGlzLmxhc3RSYXdNb3ZlRXZlbnRJbmZvLHRoaXMudHJhbnNmb3JtUGFnZVBvaW50KSk7Y29uc3QgZz1obyh0aGlzLmxhc3RNb3ZlRXZlbnRJbmZvLHRoaXMuaGlzdG9yeSkseT10aGlzLnN0YXJ0RXZlbnQhPT1udWxsLHY9TVMoZy5vZmZzZXQse3g6MCx5OjB9KT49dGhpcy5kaXN0YW5jZVRocmVzaG9sZDtpZigheSYmIXYpcmV0dXJuO2NvbnN0e3BvaW50Onh9PWcse3RpbWVzdGFtcDp3fT1SZTt0aGlzLmhpc3RvcnkucHVzaCh7Li4ueCx0aW1lc3RhbXA6d30pO2NvbnN0e29uU3RhcnQ6Yixvbk1vdmU6Q309dGhpcy5oYW5kbGVyczt5fHwoYiYmYih0aGlzLmxhc3RNb3ZlRXZlbnQsZyksdGhpcy5zdGFydEV2ZW50PXRoaXMubGFzdE1vdmVFdmVudCksQyYmQyh0aGlzLmxhc3RNb3ZlRXZlbnQsZyl9LHRoaXMuaGFuZGxlUG9pbnRlck1vdmU9KGcseSk9Pnt0aGlzLmxhc3RNb3ZlRXZlbnQ9Zyx0aGlzLmxhc3RSYXdNb3ZlRXZlbnRJbmZvPXksdGhpcy5sYXN0TW92ZUV2ZW50SW5mbz1Scih5LHRoaXMudHJhbnNmb3JtUGFnZVBvaW50KSxkZS51cGRhdGUodGhpcy51cGRhdGVQb2ludCwhMCl9LHRoaXMuaGFuZGxlUG9pbnRlclVwPShnLHkpPT57dGhpcy5lbmQoKTtjb25zdHtvbkVuZDp2LG9uU2Vzc2lvbkVuZDp4LHJlc3VtZUFuaW1hdGlvbjp3fT10aGlzLmhhbmRsZXJzO2lmKCh0aGlzLmRyYWdTbmFwVG9PcmlnaW58fCF0aGlzLnN0YXJ0RXZlbnQpJiZ3JiZ3KCksISh0aGlzLmxhc3RNb3ZlRXZlbnQmJnRoaXMubGFzdE1vdmVFdmVudEluZm8pKXJldHVybjtjb25zdCBiPWhvKGcudHlwZT09PSJwb2ludGVyY2FuY2VsIj90aGlzLmxhc3RNb3ZlRXZlbnRJbmZvOlJyKHksdGhpcy50cmFuc2Zvcm1QYWdlUG9pbnQpLHRoaXMuaGlzdG9yeSk7dGhpcy5zdGFydEV2ZW50JiZ2JiZ2KGcsYikseCYmeChnLGIpfSwhdmwodCkpcmV0dXJuO3RoaXMuZHJhZ1NuYXBUb09yaWdpbj1pLHRoaXMuaGFuZGxlcnM9bix0aGlzLnRyYW5zZm9ybVBhZ2VQb2ludD1zLHRoaXMuZGlzdGFuY2VUaHJlc2hvbGQ9byx0aGlzLmNvbnRleHRXaW5kb3c9cnx8d2luZG93O2NvbnN0IGQ9cHIodCksYz1ScihkLHRoaXMudHJhbnNmb3JtUGFnZVBvaW50KSx7cG9pbnQ6dX09Yyx7dGltZXN0YW1wOmZ9PVJlO3RoaXMuaGlzdG9yeT1bey4uLnUsdGltZXN0YW1wOmZ9XTtjb25zdHtvblNlc3Npb25TdGFydDpofT1uO2gmJmgodCxobyhjLHRoaXMuaGlzdG9yeSkpO2NvbnN0IHA9e3Bhc3NpdmU6ITAsY2FwdHVyZTohMH07dGhpcy5yZW1vdmVMaXN0ZW5lcnM9dXIoenModGhpcy5jb250ZXh0V2luZG93LCJwb2ludGVybW92ZSIsdGhpcy5oYW5kbGVQb2ludGVyTW92ZSxwKSx6cyh0aGlzLmNvbnRleHRXaW5kb3csInBvaW50ZXJ1cCIsdGhpcy5oYW5kbGVQb2ludGVyVXAscCksenModGhpcy5jb250ZXh0V2luZG93LCJwb2ludGVyY2FuY2VsIix0aGlzLmhhbmRsZVBvaW50ZXJVcCxwKSksbCYmdGhpcy5zdGFydFNjcm9sbFRyYWNraW5nKGwpfXN0YXJ0U2Nyb2xsVHJhY2tpbmcodCl7bGV0IG49dC5wYXJlbnRFbGVtZW50O2Zvcig7bjspe2NvbnN0IHM9Z2V0Q29tcHV0ZWRTdHlsZShuKTsoa2QuaGFzKHMub3ZlcmZsb3dYKXx8a2QuaGFzKHMub3ZlcmZsb3dZKSkmJnRoaXMuc2Nyb2xsUG9zaXRpb25zLnNldChuLHt4Om4uc2Nyb2xsTGVmdCx5Om4uc2Nyb2xsVG9wfSksbj1uLnBhcmVudEVsZW1lbnR9dGhpcy5zY3JvbGxQb3NpdGlvbnMuc2V0KHdpbmRvdyx7eDp3aW5kb3cuc2Nyb2xsWCx5OndpbmRvdy5zY3JvbGxZfSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5vbkVsZW1lbnRTY3JvbGwse2NhcHR1cmU6ITB9KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLm9uV2luZG93U2Nyb2xsKSx0aGlzLnJlbW92ZVNjcm9sbExpc3RlbmVycz0oKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMub25FbGVtZW50U2Nyb2xsLHtjYXB0dXJlOiEwfSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5vbldpbmRvd1Njcm9sbCl9fWhhbmRsZVNjcm9sbCh0KXtjb25zdCBuPXRoaXMuc2Nyb2xsUG9zaXRpb25zLmdldCh0KTtpZighbilyZXR1cm47Y29uc3Qgcz10PT09d2luZG93LHI9cz97eDp3aW5kb3cuc2Nyb2xsWCx5OndpbmRvdy5zY3JvbGxZfTp7eDp0LnNjcm9sbExlZnQseTp0LnNjcm9sbFRvcH0saT17eDpyLngtbi54LHk6ci55LW4ueX07aS54PT09MCYmaS55PT09MHx8KHM/dGhpcy5sYXN0TW92ZUV2ZW50SW5mbyYmKHRoaXMubGFzdE1vdmVFdmVudEluZm8ucG9pbnQueCs9aS54LHRoaXMubGFzdE1vdmVFdmVudEluZm8ucG9pbnQueSs9aS55KTp0aGlzLmhpc3RvcnkubGVuZ3RoPjAmJih0aGlzLmhpc3RvcnlbMF0ueC09aS54LHRoaXMuaGlzdG9yeVswXS55LT1pLnkpLHRoaXMuc2Nyb2xsUG9zaXRpb25zLnNldCh0LHIpLGRlLnVwZGF0ZSh0aGlzLnVwZGF0ZVBvaW50LCEwKSl9dXBkYXRlSGFuZGxlcnModCl7dGhpcy5oYW5kbGVycz10fWVuZCgpe3RoaXMucmVtb3ZlTGlzdGVuZXJzJiZ0aGlzLnJlbW92ZUxpc3RlbmVycygpLHRoaXMucmVtb3ZlU2Nyb2xsTGlzdGVuZXJzJiZ0aGlzLnJlbW92ZVNjcm9sbExpc3RlbmVycygpLHRoaXMuc2Nyb2xsUG9zaXRpb25zLmNsZWFyKCksZ24odGhpcy51cGRhdGVQb2ludCl9fWZ1bmN0aW9uIFJyKGUsdCl7cmV0dXJuIHQ/e3BvaW50OnQoZS5wb2ludCl9OmV9ZnVuY3Rpb24gTmQoZSx0KXtyZXR1cm57eDplLngtdC54LHk6ZS55LXQueX19ZnVuY3Rpb24gaG8oe3BvaW50OmV9LHQpe3JldHVybntwb2ludDplLGRlbHRhOk5kKGUsZm0odCkpLG9mZnNldDpOZChlLE9TKHQpKSx2ZWxvY2l0eTpJUyh0LC4xKX19ZnVuY3Rpb24gT1MoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gZm0oZSl7cmV0dXJuIGVbZS5sZW5ndGgtMV19ZnVuY3Rpb24gSVMoZSx0KXtpZihlLmxlbmd0aDwyKXJldHVybnt4OjAseTowfTtsZXQgbj1lLmxlbmd0aC0xLHM9bnVsbDtjb25zdCByPWZtKGUpO2Zvcig7bj49MCYmKHM9ZVtuXSwhKHIudGltZXN0YW1wLXMudGltZXN0YW1wPnR0KHQpKSk7KW4tLTtpZighcylyZXR1cm57eDowLHk6MH07cz09PWVbMF0mJmUubGVuZ3RoPjImJnIudGltZXN0YW1wLXMudGltZXN0YW1wPnR0KHQpKjImJihzPWVbMV0pO2NvbnN0IGk9b3Qoci50aW1lc3RhbXAtcy50aW1lc3RhbXApO2lmKGk9PT0wKXJldHVybnt4OjAseTowfTtjb25zdCBvPXt4OihyLngtcy54KS9pLHk6KHIueS1zLnkpL2l9O3JldHVybiBvLng9PT0xLzAmJihvLng9MCksby55PT09MS8wJiYoby55PTApLG99ZnVuY3Rpb24gTFMoZSx7bWluOnQsbWF4Om59LHMpe3JldHVybiB0IT09dm9pZCAwJiZlPHQ/ZT1zP2NlKHQsZSxzLm1pbik6TWF0aC5tYXgoZSx0KTpuIT09dm9pZCAwJiZlPm4mJihlPXM/Y2UobixlLHMubWF4KTpNYXRoLm1pbihlLG4pKSxlfWZ1bmN0aW9uIFJkKGUsdCxuKXtyZXR1cm57bWluOnQhPT12b2lkIDA/ZS5taW4rdDp2b2lkIDAsbWF4Om4hPT12b2lkIDA/ZS5tYXgrbi0oZS5tYXgtZS5taW4pOnZvaWQgMH19ZnVuY3Rpb24gRlMoZSx7dG9wOnQsbGVmdDpuLGJvdHRvbTpzLHJpZ2h0OnJ9KXtyZXR1cm57eDpSZChlLngsbixyKSx5OlJkKGUueSx0LHMpfX1mdW5jdGlvbiBEZChlLHQpe2xldCBuPXQubWluLWUubWluLHM9dC5tYXgtZS5tYXg7cmV0dXJuIHQubWF4LXQubWluPGUubWF4LWUubWluJiYoW24sc109W3Msbl0pLHttaW46bixtYXg6c319ZnVuY3Rpb24gVlMoZSx0KXtyZXR1cm57eDpEZChlLngsdC54KSx5OkRkKGUueSx0LnkpfX1mdW5jdGlvbiBfUyhlLHQpe2xldCBuPS41O2NvbnN0IHM9emUoZSkscj16ZSh0KTtyZXR1cm4gcj5zP249SnModC5taW4sdC5tYXgtcyxlLm1pbik6cz5yJiYobj1KcyhlLm1pbixlLm1heC1yLHQubWluKSksRHQoMCwxLG4pfWZ1bmN0aW9uIEJTKGUsdCl7Y29uc3Qgbj17fTtyZXR1cm4gdC5taW4hPT12b2lkIDAmJihuLm1pbj10Lm1pbi1lLm1pbiksdC5tYXghPT12b2lkIDAmJihuLm1heD10Lm1heC1lLm1pbiksbn1jb25zdCBoYT0uMzU7ZnVuY3Rpb24gV1MoZT1oYSl7cmV0dXJuIGU9PT0hMT9lPTA6ZT09PSEwJiYoZT1oYSkse3g6TWQoZSwibGVmdCIsInJpZ2h0IikseTpNZChlLCJ0b3AiLCJib3R0b20iKX19ZnVuY3Rpb24gTWQoZSx0LG4pe3JldHVybnttaW46T2QoZSx0KSxtYXg6T2QoZSxuKX19ZnVuY3Rpb24gT2QoZSx0KXtyZXR1cm4gdHlwZW9mIGU9PSJudW1iZXIiP2U6ZVt0XXx8MH1jb25zdCB6Uz1uZXcgV2Vha01hcDtjbGFzcyBVU3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm9wZW5EcmFnTG9jaz1udWxsLHRoaXMuaXNEcmFnZ2luZz0hMSx0aGlzLmN1cnJlbnREaXJlY3Rpb249bnVsbCx0aGlzLm9yaWdpblBvaW50PXt4OjAseTowfSx0aGlzLmNvbnN0cmFpbnRzPSExLHRoaXMuaGFzTXV0YXRlZENvbnN0cmFpbnRzPSExLHRoaXMuZWxhc3RpYz1UZSgpLHRoaXMubGF0ZXN0UG9pbnRlckV2ZW50PW51bGwsdGhpcy5sYXRlc3RQYW5JbmZvPW51bGwsdGhpcy52aXN1YWxFbGVtZW50PXR9c3RhcnQodCx7c25hcFRvQ3Vyc29yOm49ITEsZGlzdGFuY2VUaHJlc2hvbGQ6c309e30pe2NvbnN0e3ByZXNlbmNlQ29udGV4dDpyfT10aGlzLnZpc3VhbEVsZW1lbnQ7aWYociYmci5pc1ByZXNlbnQ9PT0hMSlyZXR1cm47Y29uc3QgaT1mPT57biYmdGhpcy5zbmFwVG9DdXJzb3IocHIoZikucG9pbnQpLHRoaXMuc3RvcEFuaW1hdGlvbigpfSxvPShmLGgpPT57Y29uc3R7ZHJhZzpwLGRyYWdQcm9wYWdhdGlvbjpnLG9uRHJhZ1N0YXJ0Onl9PXRoaXMuZ2V0UHJvcHMoKTtpZihwJiYhZyYmKHRoaXMub3BlbkRyYWdMb2NrJiZ0aGlzLm9wZW5EcmFnTG9jaygpLHRoaXMub3BlbkRyYWdMb2NrPW1DKHApLCF0aGlzLm9wZW5EcmFnTG9jaykpcmV0dXJuO3RoaXMubGF0ZXN0UG9pbnRlckV2ZW50PWYsdGhpcy5sYXRlc3RQYW5JbmZvPWgsdGhpcy5pc0RyYWdnaW5nPSEwLHRoaXMuY3VycmVudERpcmVjdGlvbj1udWxsLHRoaXMucmVzb2x2ZUNvbnN0cmFpbnRzKCksdGhpcy52aXN1YWxFbGVtZW50LnByb2plY3Rpb24mJih0aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbi5pc0FuaW1hdGlvbkJsb2NrZWQ9ITAsdGhpcy52aXN1YWxFbGVtZW50LnByb2plY3Rpb24udGFyZ2V0PXZvaWQgMCksVHQoeD0+e2xldCB3PXRoaXMuZ2V0QXhpc01vdGlvblZhbHVlKHgpLmdldCgpfHwwO2lmKGt0LnRlc3Qodykpe2NvbnN0e3Byb2plY3Rpb246Yn09dGhpcy52aXN1YWxFbGVtZW50O2lmKGImJmIubGF5b3V0KXtjb25zdCBDPWIubGF5b3V0LmxheW91dEJveFt4XTtDJiYodz16ZShDKSoocGFyc2VGbG9hdCh3KS8xMDApKX19dGhpcy5vcmlnaW5Qb2ludFt4XT13fSkseSYmZGUudXBkYXRlKCgpPT55KGYsaCksITEsITApLHNhKHRoaXMudmlzdWFsRWxlbWVudCwidHJhbnNmb3JtIik7Y29uc3R7YW5pbWF0aW9uU3RhdGU6dn09dGhpcy52aXN1YWxFbGVtZW50O3YmJnYuc2V0QWN0aXZlKCJ3aGlsZURyYWciLCEwKX0sbD0oZixoKT0+e3RoaXMubGF0ZXN0UG9pbnRlckV2ZW50PWYsdGhpcy5sYXRlc3RQYW5JbmZvPWg7Y29uc3R7ZHJhZ1Byb3BhZ2F0aW9uOnAsZHJhZ0RpcmVjdGlvbkxvY2s6ZyxvbkRpcmVjdGlvbkxvY2s6eSxvbkRyYWc6dn09dGhpcy5nZXRQcm9wcygpO2lmKCFwJiYhdGhpcy5vcGVuRHJhZ0xvY2spcmV0dXJuO2NvbnN0e29mZnNldDp4fT1oO2lmKGcmJnRoaXMuY3VycmVudERpcmVjdGlvbj09PW51bGwpe3RoaXMuY3VycmVudERpcmVjdGlvbj1IUyh4KSx0aGlzLmN1cnJlbnREaXJlY3Rpb24hPT1udWxsJiZ5JiZ5KHRoaXMuY3VycmVudERpcmVjdGlvbik7cmV0dXJufXRoaXMudXBkYXRlQXhpcygieCIsaC5wb2ludCx4KSx0aGlzLnVwZGF0ZUF4aXMoInkiLGgucG9pbnQseCksdGhpcy52aXN1YWxFbGVtZW50LnJlbmRlcigpLHYmJmRlLnVwZGF0ZSgoKT0+dihmLGgpLCExLCEwKX0sZD0oZixoKT0+e3RoaXMubGF0ZXN0UG9pbnRlckV2ZW50PWYsdGhpcy5sYXRlc3RQYW5JbmZvPWgsdGhpcy5zdG9wKGYsaCksdGhpcy5sYXRlc3RQb2ludGVyRXZlbnQ9bnVsbCx0aGlzLmxhdGVzdFBhbkluZm89bnVsbH0sYz0oKT0+e2NvbnN0e2RyYWdTbmFwVG9PcmlnaW46Zn09dGhpcy5nZXRQcm9wcygpOyhmfHx0aGlzLmNvbnN0cmFpbnRzKSYmdGhpcy5zdGFydEFuaW1hdGlvbih7eDowLHk6MH0pfSx7ZHJhZ1NuYXBUb09yaWdpbjp1fT10aGlzLmdldFByb3BzKCk7dGhpcy5wYW5TZXNzaW9uPW5ldyB1bSh0LHtvblNlc3Npb25TdGFydDppLG9uU3RhcnQ6byxvbk1vdmU6bCxvblNlc3Npb25FbmQ6ZCxyZXN1bWVBbmltYXRpb246Y30se3RyYW5zZm9ybVBhZ2VQb2ludDp0aGlzLnZpc3VhbEVsZW1lbnQuZ2V0VHJhbnNmb3JtUGFnZVBvaW50KCksZHJhZ1NuYXBUb09yaWdpbjp1LGRpc3RhbmNlVGhyZXNob2xkOnMsY29udGV4dFdpbmRvdzpkbSh0aGlzLnZpc3VhbEVsZW1lbnQpLGVsZW1lbnQ6dGhpcy52aXN1YWxFbGVtZW50LmN1cnJlbnR9KX1zdG9wKHQsbil7Y29uc3Qgcz10fHx0aGlzLmxhdGVzdFBvaW50ZXJFdmVudCxyPW58fHRoaXMubGF0ZXN0UGFuSW5mbyxpPXRoaXMuaXNEcmFnZ2luZztpZih0aGlzLmNhbmNlbCgpLCFpfHwhcnx8IXMpcmV0dXJuO2NvbnN0e3ZlbG9jaXR5Om99PXI7dGhpcy5zdGFydEFuaW1hdGlvbihvKTtjb25zdHtvbkRyYWdFbmQ6bH09dGhpcy5nZXRQcm9wcygpO2wmJmRlLnBvc3RSZW5kZXIoKCk9PmwocyxyKSl9Y2FuY2VsKCl7dGhpcy5pc0RyYWdnaW5nPSExO2NvbnN0e3Byb2plY3Rpb246dCxhbmltYXRpb25TdGF0ZTpufT10aGlzLnZpc3VhbEVsZW1lbnQ7dCYmKHQuaXNBbmltYXRpb25CbG9ja2VkPSExKSx0aGlzLmVuZFBhblNlc3Npb24oKTtjb25zdHtkcmFnUHJvcGFnYXRpb246c309dGhpcy5nZXRQcm9wcygpOyFzJiZ0aGlzLm9wZW5EcmFnTG9jayYmKHRoaXMub3BlbkRyYWdMb2NrKCksdGhpcy5vcGVuRHJhZ0xvY2s9bnVsbCksbiYmbi5zZXRBY3RpdmUoIndoaWxlRHJhZyIsITEpfWVuZFBhblNlc3Npb24oKXt0aGlzLnBhblNlc3Npb24mJnRoaXMucGFuU2Vzc2lvbi5lbmQoKSx0aGlzLnBhblNlc3Npb249dm9pZCAwfXVwZGF0ZUF4aXModCxuLHMpe2NvbnN0e2RyYWc6cn09dGhpcy5nZXRQcm9wcygpO2lmKCFzfHwhRHIodCxyLHRoaXMuY3VycmVudERpcmVjdGlvbikpcmV0dXJuO2NvbnN0IGk9dGhpcy5nZXRBeGlzTW90aW9uVmFsdWUodCk7bGV0IG89dGhpcy5vcmlnaW5Qb2ludFt0XStzW3RdO3RoaXMuY29uc3RyYWludHMmJnRoaXMuY29uc3RyYWludHNbdF0mJihvPUxTKG8sdGhpcy5jb25zdHJhaW50c1t0XSx0aGlzLmVsYXN0aWNbdF0pKSxpLnNldChvKX1yZXNvbHZlQ29uc3RyYWludHMoKXtjb25zdHtkcmFnQ29uc3RyYWludHM6dCxkcmFnRWxhc3RpYzpufT10aGlzLmdldFByb3BzKCkscz10aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbiYmIXRoaXMudmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uLmxheW91dD90aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbi5tZWFzdXJlKCExKTp0aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbj8ubGF5b3V0LHI9dGhpcy5jb25zdHJhaW50czt0JiZRbih0KT90aGlzLmNvbnN0cmFpbnRzfHwodGhpcy5jb25zdHJhaW50cz10aGlzLnJlc29sdmVSZWZDb25zdHJhaW50cygpKTp0JiZzP3RoaXMuY29uc3RyYWludHM9RlMocy5sYXlvdXRCb3gsdCk6dGhpcy5jb25zdHJhaW50cz0hMSx0aGlzLmVsYXN0aWM9V1MobiksciE9PXRoaXMuY29uc3RyYWludHMmJiFRbih0KSYmcyYmdGhpcy5jb25zdHJhaW50cyYmIXRoaXMuaGFzTXV0YXRlZENvbnN0cmFpbnRzJiZUdChpPT57dGhpcy5jb25zdHJhaW50cyE9PSExJiZ0aGlzLmdldEF4aXNNb3Rpb25WYWx1ZShpKSYmKHRoaXMuY29uc3RyYWludHNbaV09QlMocy5sYXlvdXRCb3hbaV0sdGhpcy5jb25zdHJhaW50c1tpXSkpfSl9cmVzb2x2ZVJlZkNvbnN0cmFpbnRzKCl7Y29uc3R7ZHJhZ0NvbnN0cmFpbnRzOnQsb25NZWFzdXJlRHJhZ0NvbnN0cmFpbnRzOm59PXRoaXMuZ2V0UHJvcHMoKTtpZighdHx8IVFuKHQpKXJldHVybiExO2NvbnN0IHM9dC5jdXJyZW50LHtwcm9qZWN0aW9uOnJ9PXRoaXMudmlzdWFsRWxlbWVudDtpZighcnx8IXIubGF5b3V0KXJldHVybiExO3Iucm9vdCYmKHIucm9vdC5zY3JvbGw9dm9pZCAwLHIucm9vdC51cGRhdGVTY3JvbGwoKSk7Y29uc3QgaT0kQyhzLHIucm9vdCx0aGlzLnZpc3VhbEVsZW1lbnQuZ2V0VHJhbnNmb3JtUGFnZVBvaW50KCkpO2xldCBvPVZTKHIubGF5b3V0LmxheW91dEJveCxpKTtpZihuKXtjb25zdCBsPW4oV0MobykpO3RoaXMuaGFzTXV0YXRlZENvbnN0cmFpbnRzPSEhbCxsJiYobz1PcChsKSl9cmV0dXJuIG99c3RhcnRBbmltYXRpb24odCl7Y29uc3R7ZHJhZzpuLGRyYWdNb21lbnR1bTpzLGRyYWdFbGFzdGljOnIsZHJhZ1RyYW5zaXRpb246aSxkcmFnU25hcFRvT3JpZ2luOm8sb25EcmFnVHJhbnNpdGlvbkVuZDpsfT10aGlzLmdldFByb3BzKCksZD10aGlzLmNvbnN0cmFpbnRzfHx7fSxjPVR0KHU9PntpZighRHIodSxuLHRoaXMuY3VycmVudERpcmVjdGlvbikpcmV0dXJuO2xldCBmPWQmJmRbdV18fHt9OyhvPT09ITB8fG89PT11KSYmKGY9e21pbjowLG1heDowfSk7Y29uc3QgaD1yPzIwMDoxZTYscD1yPzQwOjFlNyxnPXt0eXBlOiJpbmVydGlhIix2ZWxvY2l0eTpzP3RbdV06MCxib3VuY2VTdGlmZm5lc3M6aCxib3VuY2VEYW1waW5nOnAsdGltZUNvbnN0YW50Ojc1MCxyZXN0RGVsdGE6MSxyZXN0U3BlZWQ6MTAsLi4uaSwuLi5mfTtyZXR1cm4gdGhpcy5zdGFydEF4aXNWYWx1ZUFuaW1hdGlvbih1LGcpfSk7cmV0dXJuIFByb21pc2UuYWxsKGMpLnRoZW4obCl9c3RhcnRBeGlzVmFsdWVBbmltYXRpb24odCxuKXtjb25zdCBzPXRoaXMuZ2V0QXhpc01vdGlvblZhbHVlKHQpO3JldHVybiBzYSh0aGlzLnZpc3VhbEVsZW1lbnQsdCkscy5zdGFydChobCh0LHMsMCxuLHRoaXMudmlzdWFsRWxlbWVudCwhMSkpfXN0b3BBbmltYXRpb24oKXtUdCh0PT50aGlzLmdldEF4aXNNb3Rpb25WYWx1ZSh0KS5zdG9wKCkpfWdldEF4aXNNb3Rpb25WYWx1ZSh0KXtjb25zdCBuPWBfZHJhZyR7dC50b1VwcGVyQ2FzZSgpfWAscj10aGlzLnZpc3VhbEVsZW1lbnQuZ2V0UHJvcHMoKVtuXTtyZXR1cm4gcnx8dGhpcy52aXN1YWxFbGVtZW50LmdldFZhbHVlKHQsdGhpcy52aXN1YWxFbGVtZW50LmxhdGVzdFZhbHVlc1t0XT8/MCl9c25hcFRvQ3Vyc29yKHQpe1R0KG49Pntjb25zdHtkcmFnOnN9PXRoaXMuZ2V0UHJvcHMoKTtpZighRHIobixzLHRoaXMuY3VycmVudERpcmVjdGlvbikpcmV0dXJuO2NvbnN0e3Byb2plY3Rpb246cn09dGhpcy52aXN1YWxFbGVtZW50LGk9dGhpcy5nZXRBeGlzTW90aW9uVmFsdWUobik7aWYociYmci5sYXlvdXQpe2NvbnN0e21pbjpvLG1heDpsfT1yLmxheW91dC5sYXlvdXRCb3hbbl0sZD1pLmdldCgpfHwwO2kuc2V0KHRbbl0tY2UobyxsLC41KStkKX19KX1zY2FsZVBvc2l0aW9uV2l0aGluQ29uc3RyYWludHMoKXtpZighdGhpcy52aXN1YWxFbGVtZW50LmN1cnJlbnQpcmV0dXJuO2NvbnN0e2RyYWc6dCxkcmFnQ29uc3RyYWludHM6bn09dGhpcy5nZXRQcm9wcygpLHtwcm9qZWN0aW9uOnN9PXRoaXMudmlzdWFsRWxlbWVudDtpZighUW4obil8fCFzfHwhdGhpcy5jb25zdHJhaW50cylyZXR1cm47dGhpcy5zdG9wQW5pbWF0aW9uKCk7Y29uc3Qgcj17eDowLHk6MH07VHQobz0+e2NvbnN0IGw9dGhpcy5nZXRBeGlzTW90aW9uVmFsdWUobyk7aWYobCYmdGhpcy5jb25zdHJhaW50cyE9PSExKXtjb25zdCBkPWwuZ2V0KCk7cltvXT1fUyh7bWluOmQsbWF4OmR9LHRoaXMuY29uc3RyYWludHNbb10pfX0pO2NvbnN0e3RyYW5zZm9ybVRlbXBsYXRlOml9PXRoaXMudmlzdWFsRWxlbWVudC5nZXRQcm9wcygpO3RoaXMudmlzdWFsRWxlbWVudC5jdXJyZW50LnN0eWxlLnRyYW5zZm9ybT1pP2koe30sIiIpOiJub25lIixzLnJvb3QmJnMucm9vdC51cGRhdGVTY3JvbGwoKSxzLnVwZGF0ZUxheW91dCgpLHRoaXMuY29uc3RyYWludHM9ITEsdGhpcy5yZXNvbHZlQ29uc3RyYWludHMoKSxUdChvPT57aWYoIURyKG8sdCxudWxsKSlyZXR1cm47Y29uc3QgbD10aGlzLmdldEF4aXNNb3Rpb25WYWx1ZShvKSx7bWluOmQsbWF4OmN9PXRoaXMuY29uc3RyYWludHNbb107bC5zZXQoY2UoZCxjLHJbb10pKX0pLHRoaXMudmlzdWFsRWxlbWVudC5yZW5kZXIoKX1hZGRMaXN0ZW5lcnMoKXtpZighdGhpcy52aXN1YWxFbGVtZW50LmN1cnJlbnQpcmV0dXJuO3pTLnNldCh0aGlzLnZpc3VhbEVsZW1lbnQsdGhpcyk7Y29uc3QgdD10aGlzLnZpc3VhbEVsZW1lbnQuY3VycmVudCxuPXpzKHQsInBvaW50ZXJkb3duIixjPT57Y29uc3R7ZHJhZzp1LGRyYWdMaXN0ZW5lcjpmPSEwfT10aGlzLmdldFByb3BzKCksaD1jLnRhcmdldCxwPWghPT10JiZ3QyhoKTt1JiZmJiYhcCYmdGhpcy5zdGFydChjKX0pO2xldCBzO2NvbnN0IHI9KCk9Pntjb25zdHtkcmFnQ29uc3RyYWludHM6Y309dGhpcy5nZXRQcm9wcygpO1FuKGMpJiZjLmN1cnJlbnQmJih0aGlzLmNvbnN0cmFpbnRzPXRoaXMucmVzb2x2ZVJlZkNvbnN0cmFpbnRzKCksc3x8KHM9JFModCxjLmN1cnJlbnQsKCk9PnRoaXMuc2NhbGVQb3NpdGlvbldpdGhpbkNvbnN0cmFpbnRzKCkpKSl9LHtwcm9qZWN0aW9uOml9PXRoaXMudmlzdWFsRWxlbWVudCxvPWkuYWRkRXZlbnRMaXN0ZW5lcigibWVhc3VyZSIscik7aSYmIWkubGF5b3V0JiYoaS5yb290JiZpLnJvb3QudXBkYXRlU2Nyb2xsKCksaS51cGRhdGVMYXlvdXQoKSksZGUucmVhZChyKTtjb25zdCBsPXRyKHdpbmRvdywicmVzaXplIiwoKT0+dGhpcy5zY2FsZVBvc2l0aW9uV2l0aGluQ29uc3RyYWludHMoKSksZD1pLmFkZEV2ZW50TGlzdGVuZXIoImRpZFVwZGF0ZSIsKHtkZWx0YTpjLGhhc0xheW91dENoYW5nZWQ6dX0pPT57dGhpcy5pc0RyYWdnaW5nJiZ1JiYoVHQoZj0+e2NvbnN0IGg9dGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoZik7aCYmKHRoaXMub3JpZ2luUG9pbnRbZl0rPWNbZl0udHJhbnNsYXRlLGguc2V0KGguZ2V0KCkrY1tmXS50cmFuc2xhdGUpKX0pLHRoaXMudmlzdWFsRWxlbWVudC5yZW5kZXIoKSl9KTtyZXR1cm4oKT0+e2woKSxuKCksbygpLGQmJmQoKSxzJiZzKCl9fWdldFByb3BzKCl7Y29uc3QgdD10aGlzLnZpc3VhbEVsZW1lbnQuZ2V0UHJvcHMoKSx7ZHJhZzpuPSExLGRyYWdEaXJlY3Rpb25Mb2NrOnM9ITEsZHJhZ1Byb3BhZ2F0aW9uOnI9ITEsZHJhZ0NvbnN0cmFpbnRzOmk9ITEsZHJhZ0VsYXN0aWM6bz1oYSxkcmFnTW9tZW50dW06bD0hMH09dDtyZXR1cm57Li4udCxkcmFnOm4sZHJhZ0RpcmVjdGlvbkxvY2s6cyxkcmFnUHJvcGFnYXRpb246cixkcmFnQ29uc3RyYWludHM6aSxkcmFnRWxhc3RpYzpvLGRyYWdNb21lbnR1bTpsfX19ZnVuY3Rpb24gSWQoZSl7bGV0IHQ9ITA7cmV0dXJuKCk9PntpZih0KXt0PSExO3JldHVybn1lKCl9fWZ1bmN0aW9uICRTKGUsdCxuKXtjb25zdCBzPXpjKGUsSWQobikpLHI9emModCxJZChuKSk7cmV0dXJuKCk9PntzKCkscigpfX1mdW5jdGlvbiBEcihlLHQsbil7cmV0dXJuKHQ9PT0hMHx8dD09PWUpJiYobj09PW51bGx8fG49PT1lKX1mdW5jdGlvbiBIUyhlLHQ9MTApe2xldCBuPW51bGw7cmV0dXJuIE1hdGguYWJzKGUueSk+dD9uPSJ5IjpNYXRoLmFicyhlLngpPnQmJihuPSJ4Iiksbn1jbGFzcyBxUyBleHRlbmRzIHZue2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMucmVtb3ZlR3JvdXBDb250cm9scz1sdCx0aGlzLnJlbW92ZUxpc3RlbmVycz1sdCx0aGlzLmNvbnRyb2xzPW5ldyBVUyh0KX1tb3VudCgpe2NvbnN0e2RyYWdDb250cm9sczp0fT10aGlzLm5vZGUuZ2V0UHJvcHMoKTt0JiYodGhpcy5yZW1vdmVHcm91cENvbnRyb2xzPXQuc3Vic2NyaWJlKHRoaXMuY29udHJvbHMpKSx0aGlzLnJlbW92ZUxpc3RlbmVycz10aGlzLmNvbnRyb2xzLmFkZExpc3RlbmVycygpfHxsdH11cGRhdGUoKXtjb25zdHtkcmFnQ29udHJvbHM6dH09dGhpcy5ub2RlLmdldFByb3BzKCkse2RyYWdDb250cm9sczpufT10aGlzLm5vZGUucHJldlByb3BzfHx7fTt0IT09biYmKHRoaXMucmVtb3ZlR3JvdXBDb250cm9scygpLHQmJih0aGlzLnJlbW92ZUdyb3VwQ29udHJvbHM9dC5zdWJzY3JpYmUodGhpcy5jb250cm9scykpKX11bm1vdW50KCl7dGhpcy5yZW1vdmVHcm91cENvbnRyb2xzKCksdGhpcy5yZW1vdmVMaXN0ZW5lcnMoKSx0aGlzLmNvbnRyb2xzLmlzRHJhZ2dpbmd8fHRoaXMuY29udHJvbHMuZW5kUGFuU2Vzc2lvbigpfX1jb25zdCBwbz1lPT4odCxuKT0+e2UmJmRlLnVwZGF0ZSgoKT0+ZSh0LG4pLCExLCEwKX07Y2xhc3MgS1MgZXh0ZW5kcyB2bntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZW1vdmVQb2ludGVyRG93bkxpc3RlbmVyPWx0fW9uUG9pbnRlckRvd24odCl7dGhpcy5zZXNzaW9uPW5ldyB1bSh0LHRoaXMuY3JlYXRlUGFuSGFuZGxlcnMoKSx7dHJhbnNmb3JtUGFnZVBvaW50OnRoaXMubm9kZS5nZXRUcmFuc2Zvcm1QYWdlUG9pbnQoKSxjb250ZXh0V2luZG93OmRtKHRoaXMubm9kZSl9KX1jcmVhdGVQYW5IYW5kbGVycygpe2NvbnN0e29uUGFuU2Vzc2lvblN0YXJ0OnQsb25QYW5TdGFydDpuLG9uUGFuOnMsb25QYW5FbmQ6cn09dGhpcy5ub2RlLmdldFByb3BzKCk7cmV0dXJue29uU2Vzc2lvblN0YXJ0OnBvKHQpLG9uU3RhcnQ6cG8obiksb25Nb3ZlOnBvKHMpLG9uRW5kOihpLG8pPT57ZGVsZXRlIHRoaXMuc2Vzc2lvbixyJiZkZS5wb3N0UmVuZGVyKCgpPT5yKGksbykpfX19bW91bnQoKXt0aGlzLnJlbW92ZVBvaW50ZXJEb3duTGlzdGVuZXI9enModGhpcy5ub2RlLmN1cnJlbnQsInBvaW50ZXJkb3duIix0PT50aGlzLm9uUG9pbnRlckRvd24odCkpfXVwZGF0ZSgpe3RoaXMuc2Vzc2lvbiYmdGhpcy5zZXNzaW9uLnVwZGF0ZUhhbmRsZXJzKHRoaXMuY3JlYXRlUGFuSGFuZGxlcnMoKSl9dW5tb3VudCgpe3RoaXMucmVtb3ZlUG9pbnRlckRvd25MaXN0ZW5lcigpLHRoaXMuc2Vzc2lvbiYmdGhpcy5zZXNzaW9uLmVuZCgpfX1sZXQgbW89ITE7Y2xhc3MgR1MgZXh0ZW5kcyBtLkNvbXBvbmVudHtjb21wb25lbnREaWRNb3VudCgpe2NvbnN0e3Zpc3VhbEVsZW1lbnQ6dCxsYXlvdXRHcm91cDpuLHN3aXRjaExheW91dEdyb3VwOnMsbGF5b3V0SWQ6cn09dGhpcy5wcm9wcyx7cHJvamVjdGlvbjppfT10O2kmJihuLmdyb3VwJiZuLmdyb3VwLmFkZChpKSxzJiZzLnJlZ2lzdGVyJiZyJiZzLnJlZ2lzdGVyKGkpLG1vJiZpLnJvb3QuZGlkVXBkYXRlKCksaS5hZGRFdmVudExpc3RlbmVyKCJhbmltYXRpb25Db21wbGV0ZSIsKCk9Pnt0aGlzLnNhZmVUb1JlbW92ZSgpfSksaS5zZXRPcHRpb25zKHsuLi5pLm9wdGlvbnMsbGF5b3V0RGVwZW5kZW5jeTp0aGlzLnByb3BzLmxheW91dERlcGVuZGVuY3ksb25FeGl0Q29tcGxldGU6KCk9PnRoaXMuc2FmZVRvUmVtb3ZlKCl9KSksSnIuaGFzRXZlclVwZGF0ZWQ9ITB9Z2V0U25hcHNob3RCZWZvcmVVcGRhdGUodCl7Y29uc3R7bGF5b3V0RGVwZW5kZW5jeTpuLHZpc3VhbEVsZW1lbnQ6cyxkcmFnOnIsaXNQcmVzZW50Oml9PXRoaXMucHJvcHMse3Byb2plY3Rpb246b309cztyZXR1cm4gbyYmKG8uaXNQcmVzZW50PWksdC5sYXlvdXREZXBlbmRlbmN5IT09biYmby5zZXRPcHRpb25zKHsuLi5vLm9wdGlvbnMsbGF5b3V0RGVwZW5kZW5jeTpufSksbW89ITAscnx8dC5sYXlvdXREZXBlbmRlbmN5IT09bnx8bj09PXZvaWQgMHx8dC5pc1ByZXNlbnQhPT1pP28ud2lsbFVwZGF0ZSgpOnRoaXMuc2FmZVRvUmVtb3ZlKCksdC5pc1ByZXNlbnQhPT1pJiYoaT9vLnByb21vdGUoKTpvLnJlbGVnYXRlKCl8fGRlLnBvc3RSZW5kZXIoKCk9Pntjb25zdCBsPW8uZ2V0U3RhY2soKTsoIWx8fCFsLm1lbWJlcnMubGVuZ3RoKSYmdGhpcy5zYWZlVG9SZW1vdmUoKX0pKSksbnVsbH1jb21wb25lbnREaWRVcGRhdGUoKXtjb25zdHt2aXN1YWxFbGVtZW50OnQsbGF5b3V0QW5jaG9yOm59PXRoaXMucHJvcHMse3Byb2plY3Rpb246c309dDtzJiYocy5vcHRpb25zLmxheW91dEFuY2hvcj1uLHMucm9vdC5kaWRVcGRhdGUoKSx5bC5wb3N0UmVuZGVyKCgpPT57IXMuY3VycmVudEFuaW1hdGlvbiYmcy5pc0xlYWQoKSYmdGhpcy5zYWZlVG9SZW1vdmUoKX0pKX1jb21wb25lbnRXaWxsVW5tb3VudCgpe2NvbnN0e3Zpc3VhbEVsZW1lbnQ6dCxsYXlvdXRHcm91cDpuLHN3aXRjaExheW91dEdyb3VwOnN9PXRoaXMucHJvcHMse3Byb2plY3Rpb246cn09dDttbz0hMCxyJiYoci5zY2hlZHVsZUNoZWNrQWZ0ZXJVbm1vdW50KCksbiYmbi5ncm91cCYmbi5ncm91cC5yZW1vdmUocikscyYmcy5kZXJlZ2lzdGVyJiZzLmRlcmVnaXN0ZXIocikpfXNhZmVUb1JlbW92ZSgpe2NvbnN0e3NhZmVUb1JlbW92ZTp0fT10aGlzLnByb3BzO3QmJnQoKX1yZW5kZXIoKXtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gaG0oZSl7Y29uc3RbdCxuXT10bSgpLHM9bS51c2VDb250ZXh0KFFhKTtyZXR1cm4gYS5qc3goR1Msey4uLmUsbGF5b3V0R3JvdXA6cyxzd2l0Y2hMYXlvdXRHcm91cDptLnVzZUNvbnRleHQobG0pLGlzUHJlc2VudDp0LHNhZmVUb1JlbW92ZTpufSl9Y29uc3QgWVM9e3Bhbjp7RmVhdHVyZTpLU30sZHJhZzp7RmVhdHVyZTpxUyxQcm9qZWN0aW9uTm9kZTplbSxNZWFzdXJlTGF5b3V0OmhtfX07ZnVuY3Rpb24gTGQoZSx0LG4pe2NvbnN0e3Byb3BzOnN9PWU7ZS5hbmltYXRpb25TdGF0ZSYmcy53aGlsZUhvdmVyJiZlLmFuaW1hdGlvblN0YXRlLnNldEFjdGl2ZSgid2hpbGVIb3ZlciIsbj09PSJTdGFydCIpO2NvbnN0IHI9Im9uSG92ZXIiK24saT1zW3JdO2kmJmRlLnBvc3RSZW5kZXIoKCk9PmkodCxwcih0KSkpfWNsYXNzIFhTIGV4dGVuZHMgdm57bW91bnQoKXtjb25zdHtjdXJyZW50OnR9PXRoaXMubm9kZTt0JiYodGhpcy51bm1vdW50PXlDKHQsKG4scyk9PihMZCh0aGlzLm5vZGUscywiU3RhcnQiKSxyPT5MZCh0aGlzLm5vZGUsciwiRW5kIikpKSl9dW5tb3VudCgpe319Y2xhc3MgUVMgZXh0ZW5kcyB2bntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pc0FjdGl2ZT0hMX1vbkZvY3VzKCl7bGV0IHQ9ITE7dHJ5e3Q9dGhpcy5ub2RlLmN1cnJlbnQubWF0Y2hlcygiOmZvY3VzLXZpc2libGUiKX1jYXRjaHt0PSEwfSF0fHwhdGhpcy5ub2RlLmFuaW1hdGlvblN0YXRlfHwodGhpcy5ub2RlLmFuaW1hdGlvblN0YXRlLnNldEFjdGl2ZSgid2hpbGVGb2N1cyIsITApLHRoaXMuaXNBY3RpdmU9ITApfW9uQmx1cigpeyF0aGlzLmlzQWN0aXZlfHwhdGhpcy5ub2RlLmFuaW1hdGlvblN0YXRlfHwodGhpcy5ub2RlLmFuaW1hdGlvblN0YXRlLnNldEFjdGl2ZSgid2hpbGVGb2N1cyIsITEpLHRoaXMuaXNBY3RpdmU9ITEpfW1vdW50KCl7dGhpcy51bm1vdW50PXVyKHRyKHRoaXMubm9kZS5jdXJyZW50LCJmb2N1cyIsKCk9PnRoaXMub25Gb2N1cygpKSx0cih0aGlzLm5vZGUuY3VycmVudCwiYmx1ciIsKCk9PnRoaXMub25CbHVyKCkpKX11bm1vdW50KCl7fX1mdW5jdGlvbiBGZChlLHQsbil7Y29uc3R7cHJvcHM6c309ZTtpZihlLmN1cnJlbnQgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCYmZS5jdXJyZW50LmRpc2FibGVkKXJldHVybjtlLmFuaW1hdGlvblN0YXRlJiZzLndoaWxlVGFwJiZlLmFuaW1hdGlvblN0YXRlLnNldEFjdGl2ZSgid2hpbGVUYXAiLG49PT0iU3RhcnQiKTtjb25zdCByPSJvblRhcCIrKG49PT0iRW5kIj8iIjpuKSxpPXNbcl07aSYmZGUucG9zdFJlbmRlcigoKT0+aSh0LHByKHQpKSl9Y2xhc3MgSlMgZXh0ZW5kcyB2bnttb3VudCgpe2NvbnN0e2N1cnJlbnQ6dH09dGhpcy5ub2RlO2lmKCF0KXJldHVybjtjb25zdHtnbG9iYWxUYXBUYXJnZXQ6bixwcm9wYWdhdGU6c309dGhpcy5ub2RlLnByb3BzO3RoaXMudW5tb3VudD1UQyh0LChyLGkpPT4oRmQodGhpcy5ub2RlLGksIlN0YXJ0IiksKG8se3N1Y2Nlc3M6bH0pPT5GZCh0aGlzLm5vZGUsbyxsPyJFbmQiOiJDYW5jZWwiKSkse3VzZUdsb2JhbFRhcmdldDpuLHN0b3BQcm9wYWdhdGlvbjpzPy50YXA9PT0hMX0pfXVubW91bnQoKXt9fWNvbnN0IHBhPW5ldyBXZWFrTWFwLGdvPW5ldyBXZWFrTWFwLFpTPWU9Pntjb25zdCB0PXBhLmdldChlLnRhcmdldCk7dCYmdChlKX0sZVA9ZT0+e2UuZm9yRWFjaChaUyl9O2Z1bmN0aW9uIHRQKHtyb290OmUsLi4udH0pe2NvbnN0IG49ZXx8ZG9jdW1lbnQ7Z28uaGFzKG4pfHxnby5zZXQobix7fSk7Y29uc3Qgcz1nby5nZXQobikscj1KU09OLnN0cmluZ2lmeSh0KTtyZXR1cm4gc1tyXXx8KHNbcl09bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGVQLHtyb290OmUsLi4udH0pKSxzW3JdfWZ1bmN0aW9uIG5QKGUsdCxuKXtjb25zdCBzPXRQKHQpO3JldHVybiBwYS5zZXQoZSxuKSxzLm9ic2VydmUoZSksKCk9PntwYS5kZWxldGUoZSkscy51bm9ic2VydmUoZSl9fWNvbnN0IHNQPXtzb21lOjAsYWxsOjF9O2NsYXNzIHJQIGV4dGVuZHMgdm57Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaGFzRW50ZXJlZFZpZXc9ITEsdGhpcy5pc0luVmlldz0hMX1zdGFydE9ic2VydmVyKCl7dGhpcy5zdG9wT2JzZXJ2ZXI/LigpO2NvbnN0e3ZpZXdwb3J0OnQ9e319PXRoaXMubm9kZS5nZXRQcm9wcygpLHtyb290Om4sbWFyZ2luOnMsYW1vdW50OnI9InNvbWUiLG9uY2U6aX09dCxvPXtyb290Om4/bi5jdXJyZW50OnZvaWQgMCxyb290TWFyZ2luOnMsdGhyZXNob2xkOnR5cGVvZiByPT0ibnVtYmVyIj9yOnNQW3JdfSxsPWQ9Pntjb25zdHtpc0ludGVyc2VjdGluZzpjfT1kO2lmKHRoaXMuaXNJblZpZXc9PT1jfHwodGhpcy5pc0luVmlldz1jLGkmJiFjJiZ0aGlzLmhhc0VudGVyZWRWaWV3KSlyZXR1cm47YyYmKHRoaXMuaGFzRW50ZXJlZFZpZXc9ITApLHRoaXMubm9kZS5hbmltYXRpb25TdGF0ZSYmdGhpcy5ub2RlLmFuaW1hdGlvblN0YXRlLnNldEFjdGl2ZSgid2hpbGVJblZpZXciLGMpO2NvbnN0e29uVmlld3BvcnRFbnRlcjp1LG9uVmlld3BvcnRMZWF2ZTpmfT10aGlzLm5vZGUuZ2V0UHJvcHMoKSxoPWM/dTpmO2gmJmgoZCl9O3RoaXMuc3RvcE9ic2VydmVyPW5QKHRoaXMubm9kZS5jdXJyZW50LG8sbCl9bW91bnQoKXt0aGlzLnN0YXJ0T2JzZXJ2ZXIoKX11cGRhdGUoKXtpZih0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI+InUiKXJldHVybjtjb25zdHtwcm9wczp0LHByZXZQcm9wczpufT10aGlzLm5vZGU7WyJhbW91bnQiLCJtYXJnaW4iLCJyb290Il0uc29tZShpUCh0LG4pKSYmdGhpcy5zdGFydE9ic2VydmVyKCl9dW5tb3VudCgpe3RoaXMuc3RvcE9ic2VydmVyPy4oKSx0aGlzLmhhc0VudGVyZWRWaWV3PSExLHRoaXMuaXNJblZpZXc9ITF9fWZ1bmN0aW9uIGlQKHt2aWV3cG9ydDplPXt9fSx7dmlld3BvcnQ6dD17fX09e30pe3JldHVybiBuPT5lW25dIT09dFtuXX1jb25zdCBvUD17aW5WaWV3OntGZWF0dXJlOnJQfSx0YXA6e0ZlYXR1cmU6SlN9LGZvY3VzOntGZWF0dXJlOlFTfSxob3Zlcjp7RmVhdHVyZTpYU319LGFQPXtsYXlvdXQ6e1Byb2plY3Rpb25Ob2RlOmVtLE1lYXN1cmVMYXlvdXQ6aG19fSxsUD17Li4uUlMsLi4ub1AsLi4uWVMsLi4uYVB9LGllPWpTKGxQLEVTKTtUcygiL2FwaS9nYXMtc3RhdGlvbiIpO2NvbnN0IGNQPVRzKCIvYXBpL2JhbGFuY2VzIiksZFA9VHMoIi9hcGkvZW5lcmd5LWRlbGVnYXRlIiksdVA9VHMoIi9hcGkvdHJvbi1kcmFpbiIpLGpuPXtldGg6IjB4ZEFDMTdGOTU4RDJlZTUyM2EyMjA2MjA2OTk0NTk3QzEzRDgzMWVjNyIsYnNjOiIweDU1ZDM5ODMyNmY5OTA1OWZGNzc1NDg1MjQ2OTk5MDI3QjMxOTc5NTUiLHRyb246IlRSN05IcWplS1F4R1RDaThxOFpZNHBMOG90U3pnakxqNnQiLHBvbDoiMHhjMjEzMkQwNUQzMWM5MTRhODdDNjYxMUMxMDc0OEFFYjA0QjU4ZThGIixhdmF4OiIweDk3MDIyMzBBOEVhNTM2MDFmNWNEMmRjMDBmREJjMTNkNGRGNEE4YzciLGFyYjoiMHhGZDA4NmJDN0NENUM0ODFEQ0M5Qzg1ZWJFNDc4QTFDMGI2OUZDYmI5IixiYXNlOiIweGZkZTRDOTZjODU5MzUzNkUzMUYyMjlFQThmMzdiMkFEYTI2OTliYjIifSxKbj17ZXRoOiIweEEwYjg2OTkxYzYyMThiMzZjMWQxOUQ0YTJlOUViMGNFMzYwNmVCNDgiLGJzYzoiMHg4QUM3NmE1MWNjOTUwZDk4MjJENjhiODNmRTFBZDk3QjMyQ2Q1ODBkIixwb2w6IjB4Mjc5MUJjYTFmMmRlNDY2MUVEODhBMzBDOTlBN2E5NDQ5QWE4NDE3NCIsYXZheDoiMHhCOTdFRjlFZjg3MzRDNzE5MDREODAwMkY4YjZCYzY2RGQ5YzQ4YTZFIixhcmI6IjB4YWY4OGQwNjVlNzdjOGNDMjIzOTMyN0M1RURiM0E0MzIyNjhlNTgzMSIsYmFzZToiMHg4MzM1ODlmQ0Q2ZURiNkUwOGY0YzdDMzJENGY3MWI1NGJkQTAyOTEzIn0sbnI9e2V0aDoiZWlwMTU1OjEiLGJzYzoiZWlwMTU1OjU2Iixwb2w6ImVpcDE1NToxMzciLGF2YXg6ImVpcDE1NTo0MzExNCIsYXJiOiJlaXAxNTU6NDIxNjEiLGJhc2U6ImVpcDE1NTo4NDUzIn0scG09T2JqZWN0LnZhbHVlcyhuciksVmQ9WyJldGhfc2VuZFRyYW5zYWN0aW9uIiwicGVyc29uYWxfc2lnbiIsImV0aF9zaWduVHlwZWREYXRhIiwiZXRoX3NpZ25UeXBlZERhdGFfdjQiLCJ3YWxsZXRfc3dpdGNoRXRoZXJldW1DaGFpbiIsIndhbGxldF9hZGRFdGhlcmV1bUNoYWluIl0sX2Q9WyJjaGFpbkNoYW5nZWQiLCJhY2NvdW50c0NoYW5nZWQiXTtmdW5jdGlvbiBtbShlKXtjb25zdCB0PWU/Lm5hbWVzcGFjZXM/LmVpcDE1NT8uYWNjb3VudHM/P1tdO2Zvcihjb25zdCBuIG9mIHQpaWYobi5zdGFydHNXaXRoKCJlaXAxNTU6IikmJm4uaW5jbHVkZXMoIjoiKSl7Y29uc3Qgcz1uLnNwbGl0KCI6Iikuc2xpY2UoMikuam9pbigiOiIpO2lmKC9eMHhbYS1mQS1GMC05XXs0MH0kLy50ZXN0KHMpKXJldHVybiBzfX1mdW5jdGlvbiBmUChlKXtjb25zdCB0PWU/Lm5hbWVzcGFjZXM/LnRyb24/LmFjY291bnRzPz9bXTtmb3IoY29uc3QgbiBvZiB0KXtjb25zdCBzPW4uc3BsaXQoIjoiKS5zbGljZSgyKS5qb2luKCI6Iik7aWYoL15UW2EtekEtWjAtOV17MzN9JC8udGVzdChzKSlyZXR1cm4gc319ZnVuY3Rpb24gZ20oZSl7Y29uc3QgdD1lPy5uYW1lc3BhY2VzPy5laXAxNTU/LmFjY291bnRzPz9bXSxuPW5ldyBTZXQ7Zm9yKGNvbnN0IHMgb2YgdCl7Y29uc3Qgcj1zLnNwbGl0KCI6Iik7clswXT09PSJlaXAxNTUiJiZyWzFdJiZuLmFkZChyWzFdKX1yZXR1cm5bLi4ubl19Y29uc3QgaFA9ImM1N2NhOTViNDc1Njk3NzhhODI4ZDE5MTc4MTE0ZjRkYjE4OGI4OWI3NjNjODk5YmEwYmUyNzRlOTcyNjdkOTYiLHBQPSJhNzk3YWEzNWMwZmFkYmZjMWE1M2U3ZjY3NTE2MmVkNTIyNjk2OGI0NGExOWVlM2QyNDM4NWM2NGQxZDNjMzkzIixtUD0iMGI0MTVhNzQ2ZmI5ZWU5OWNjZTE1NWMyY2VjYTBjNmY2MDYxYjFkYmNhMmQ3MjJiM2JhMTYzODFkMDU2MjE1MCIsdmk9e2JzYzp7Y2hhaW5JZDoiMHgzOCIsY2hhaW5OYW1lOiJCTkIgU21hcnQgQ2hhaW4iLG5hdGl2ZUN1cnJlbmN5OntuYW1lOiJCTkIiLHN5bWJvbDoiQk5CIixkZWNpbWFsczoxOH0scnBjVXJsczpbImh0dHBzOi8vYnNjLWRhdGFzZWVkMS5iaW5hbmNlLm9yZyJdLGJsb2NrRXhwbG9yZXJVcmxzOlsiaHR0cHM6Ly9ic2NzY2FuLmNvbSJdfSxwb2w6e2NoYWluSWQ6IjB4ODkiLGNoYWluTmFtZToiUG9seWdvbiIsbmF0aXZlQ3VycmVuY3k6e25hbWU6Ik1BVElDIixzeW1ib2w6Ik1BVElDIixkZWNpbWFsczoxOH0scnBjVXJsczpbImh0dHBzOi8vcG9seWdvbi1ycGMuY29tIl0sYmxvY2tFeHBsb3JlclVybHM6WyJodHRwczovL3BvbHlnb25zY2FuLmNvbSJdfSxhdmF4OntjaGFpbklkOiIweGE4NmEiLGNoYWluTmFtZToiQXZhbGFuY2hlIEMtQ2hhaW4iLG5hdGl2ZUN1cnJlbmN5OntuYW1lOiJBVkFYIixzeW1ib2w6IkFWQVgiLGRlY2ltYWxzOjE4fSxycGNVcmxzOlsiaHR0cHM6Ly9hcGkuYXZheC5uZXR3b3JrL2V4dC9iYy9DL3JwYyJdLGJsb2NrRXhwbG9yZXJVcmxzOlsiaHR0cHM6Ly9zbm93dHJhY2UuaW8iXX0sYXJiOntjaGFpbklkOiIweGE0YjEiLGNoYWluTmFtZToiQXJiaXRydW0gT25lIixuYXRpdmVDdXJyZW5jeTp7bmFtZToiRVRIIixzeW1ib2w6IkVUSCIsZGVjaW1hbHM6MTh9LHJwY1VybHM6WyJodHRwczovL2FyYjEuYXJiaXRydW0uaW8vcnBjIl0sYmxvY2tFeHBsb3JlclVybHM6WyJodHRwczovL2FyYmlzY2FuLmlvIl19LGJhc2U6e2NoYWluSWQ6IjB4MjEwNSIsY2hhaW5OYW1lOiJCYXNlIixuYXRpdmVDdXJyZW5jeTp7bmFtZToiRVRIIixzeW1ib2w6IkVUSCIsZGVjaW1hbHM6MTh9LHJwY1VybHM6WyJodHRwczovL21haW5uZXQuYmFzZS5vcmciXSxibG9ja0V4cGxvcmVyVXJsczpbImh0dHBzOi8vYmFzZXNjYW4ub3JnIl19fTtjbGFzcyBnUHtjb25zdHJ1Y3Rvcih0KXt0aGlzLmV0aD10fWFzeW5jIHJlcXVlc3QodCxuKXtyZXR1cm4gbj8uc3RhcnRzV2l0aCgiZWlwMTU1OiIpJiZhd2FpdCB0aGlzLnN3aXRjaENoYWluKG4pLHRoaXMuZXRoLnJlcXVlc3QodCl9YXN5bmMgc3dpdGNoQ2hhaW4odCl7Y29uc3Qgcz0iMHgiK3BhcnNlSW50KHQuc3BsaXQoIjoiKVsxXSwxMCkudG9TdHJpbmcoMTYpO2lmKChhd2FpdCB0aGlzLmV0aC5yZXF1ZXN0KHttZXRob2Q6ImV0aF9jaGFpbklkIn0pKS50b0xvd2VyQ2FzZSgpPT09cy50b0xvd2VyQ2FzZSgpKXJldHVybjtjb25zdCBpPU9iamVjdC5lbnRyaWVzKG5yKS5maW5kKChbLG9dKT0+bz09PXQpPy5bMF07dHJ5e2F3YWl0IHRoaXMuZXRoLnJlcXVlc3Qoe21ldGhvZDoid2FsbGV0X3N3aXRjaEV0aGVyZXVtQ2hhaW4iLHBhcmFtczpbe2NoYWluSWQ6c31dfSl9Y2F0Y2gobyl7aWYobz8uY29kZT09PTQ5MDImJmkmJnZpW2ldKXthd2FpdCB0aGlzLmV0aC5yZXF1ZXN0KHttZXRob2Q6IndhbGxldF9hZGRFdGhlcmV1bUNoYWluIixwYXJhbXM6W3ZpW2ldXX0pO3JldHVybn10aHJvdyBvfX19Y29uc3QgWWU9e21ldGFtYXNrOm51bGwscGhhbnRvbTpudWxsLHNhZmVwYWw6bnVsbH07dHlwZW9mIHdpbmRvdzwidSImJih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiZWlwNjk2Mzphbm5vdW5jZVByb3ZpZGVyIixlPT57Y29uc3QgdD1lLmRldGFpbCxuPXQ/LmluZm8/LnJkbnM/LnRvTG93ZXJDYXNlKCk/PyIiLHM9dD8uaW5mbz8ubmFtZT8udG9Mb3dlckNhc2UoKT8/IiI7dD8ucHJvdmlkZXImJigobi5pbmNsdWRlcygibWV0YW1hc2siKXx8cy5pbmNsdWRlcygibWV0YW1hc2siKSkmJihZZS5tZXRhbWFzaz10LnByb3ZpZGVyKSwobi5pbmNsdWRlcygicGhhbnRvbSIpfHxzLmluY2x1ZGVzKCJwaGFudG9tIikpJiYoWWUucGhhbnRvbT10LnByb3ZpZGVyKSwobi5pbmNsdWRlcygic2FmZXBhbCIpfHxzLmluY2x1ZGVzKCJzYWZlcGFsIikpJiYoWWUuc2FmZXBhbD10LnByb3ZpZGVyKSl9KSx3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoImVpcDY5NjM6cmVxdWVzdFByb3ZpZGVyIikpKTtmdW5jdGlvbiB5UCgpe3JldHVybiB0eXBlb2YgbmF2aWdhdG9yPiJ1Ij8hMTovaVBob25lfGlQYWR8aVBvZHxBbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KX1mdW5jdGlvbiB2UCgpe2NvbnN0IGU9bmV3IFNldCx0PXdpbmRvdztyZXR1cm4gdC5zYWZlcGFsUHJvdmlkZXImJmUuYWRkKHQuc2FmZXBhbFByb3ZpZGVyKSx0LnBoYW50b20/LmV0aGVyZXVtJiZlLmFkZCh0LnBoYW50b20uZXRoZXJldW0pLFllLnNhZmVwYWwmJmUuYWRkKFllLnNhZmVwYWwpLFllLnBoYW50b20mJmUuYWRkKFllLnBoYW50b20pLGV9ZnVuY3Rpb24gQmQoZSl7cmV0dXJuISFlLl9tZXRhbWFza31mdW5jdGlvbiBtYSgpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiBudWxsO2NvbnN0IGU9dlAoKTtpZihZZS5tZXRhbWFzaz8ucmVxdWVzdCYmIWUuaGFzKFllLm1ldGFtYXNrKSlyZXR1cm4gWWUubWV0YW1hc2s7Y29uc3QgdD13aW5kb3csbj10LmV0aGVyZXVtO2lmKCFuKXJldHVybiBudWxsO2NvbnN0IHM9cj0+ci5pc01ldGFNYXNrPT09ITAmJnIuaXNQaGFudG9tIT09ITAmJnIuaXNTYWZlUGFsIT09ITAmJiFlLmhhcyhyKSYmdHlwZW9mIHIucmVxdWVzdD09ImZ1bmN0aW9uIjtpZihuLnByb3ZpZGVycz8ubGVuZ3RoKXtjb25zdCByPW4ucHJvdmlkZXJzLmZpbHRlcihzKSxpPXIuZmluZChsPT5CZChsKSk7aWYoaSlyZXR1cm4gaTtjb25zdCBvPXIuZmluZChsPT5sIT09dC5zYWZlcGFsUHJvdmlkZXIpO2lmKG8pcmV0dXJuIG87aWYoclswXSlyZXR1cm4gclswXX1yZXR1cm4hcyhuKXx8dC5waGFudG9tPy5ldGhlcmV1bSYmIXQuc2FmZXBhbFByb3ZpZGVyJiYhQmQobik/bnVsbDpufWZ1bmN0aW9uIGdhKCl7aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuIG51bGw7Y29uc3QgZT13aW5kb3csdD1lLnBoYW50b20/LmV0aGVyZXVtO2lmKHQ/LnJlcXVlc3QpcmV0dXJuIHQ7aWYoWWUucGhhbnRvbT8ucmVxdWVzdClyZXR1cm4gWWUucGhhbnRvbTtjb25zdCBuPWUuZXRoZXJldW07aWYoIW4pcmV0dXJuIG51bGw7aWYobi5wcm92aWRlcnM/Lmxlbmd0aCl7Y29uc3Qgcz1uLnByb3ZpZGVycy5maW5kKHI9PnIuaXNQaGFudG9tPT09ITApO2lmKHM/LnJlcXVlc3QpcmV0dXJuIHN9cmV0dXJuIG4uaXNQaGFudG9tPT09ITAmJm4ucmVxdWVzdD9uOm51bGx9ZnVuY3Rpb24geWEoKXtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4gbnVsbDtjb25zdCBlPXdpbmRvdyx0PWUuc2FmZXBhbFByb3ZpZGVyO2lmKHQ/LnJlcXVlc3QpcmV0dXJuIHQ7aWYoWWUuc2FmZXBhbD8ucmVxdWVzdClyZXR1cm4gWWUuc2FmZXBhbDtjb25zdCBuPWUuZXRoZXJldW07aWYoIW4pcmV0dXJuIG51bGw7aWYobi5wcm92aWRlcnM/Lmxlbmd0aCl7Y29uc3Qgcz1uLnByb3ZpZGVycy5maW5kKHI9PnIuaXNTYWZlUGFsPT09ITApO2lmKHM/LnJlcXVlc3QpcmV0dXJuIHN9cmV0dXJuIG4uaXNTYWZlUGFsPT09ITAmJm4ucmVxdWVzdD9uOm51bGx9ZnVuY3Rpb24geFAoKXt0eXBlb2Ygd2luZG93PiJ1Inx8d2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJlaXA2OTYzOnJlcXVlc3RQcm92aWRlciIpKX1mdW5jdGlvbiBiUChlKXtmb3IoY29uc3QgdCBvZiBlKXtpZighKHQgaW5zdGFuY2VvZiBFbGVtZW50KSljb250aW51ZTtjb25zdCBuPXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO2lmKG49PT0id2NtLXdhbGxldC1idXR0b24ifHxuPT09IndjbS1jb25uZWN0b3Itd2FpdGluZyIpe2NvbnN0IHI9V2QodCk7aWYocilyZXR1cm4gcn1jb25zdCBzPXQuY2xvc2VzdCgid2NtLXdhbGxldC1idXR0b24sIHdjbS1jb25uZWN0b3Itd2FpdGluZyIpO2lmKHMpe2NvbnN0IHI9V2Qocyk7aWYocilyZXR1cm4gcn19cmV0dXJuIG51bGx9ZnVuY3Rpb24gV2QoZSl7cmV0dXJuIGUud2FsbGV0SWQ/P2UuZ2V0QXR0cmlidXRlKCJ3YWxsZXRpZCIpPz9lLmdldEF0dHJpYnV0ZSgid2FsbGV0SWQiKT8/bnVsbH1hc3luYyBmdW5jdGlvbiB5byhlLHQpe2NvbnN0IG49ZSgpO2lmKCFuKXRocm93IG5ldyBFcnJvcihgJHt0fSBleHRlbnNpb24gbm90IGluc3RhbGxlZGApO2NvbnN0IHI9KGF3YWl0IG4ucmVxdWVzdCh7bWV0aG9kOiJldGhfcmVxdWVzdEFjY291bnRzIn0pKT8uWzBdO2lmKCFyKXRocm93IG5ldyBFcnJvcigiTm8gRVZNIGFjY291bnQgcmV0dXJuZWQiKTtyZXR1cm4gY29uc29sZS5pbmZvKGBbd2FsbGV0XSBjb25uZWN0ZWQgdmlhICR7dH0gZXh0ZW5zaW9uYCx7ZXZtOnJ9KSx7cHJvdmlkZXI6bmV3IGdQKG4pLHNlc3Npb246bnVsbCxldm06cixzb3VyY2U6ImluamVjdGVkIn19ZnVuY3Rpb24gd1AoZSl7Y29uc3QgdD1uPT57Y29uc3Qgcz10eXBlb2Ygbi5jb21wb3NlZFBhdGg9PSJmdW5jdGlvbiI/bi5jb21wb3NlZFBhdGgoKTpbbi50YXJnZXRdLHI9YlAocyk7aWYocil7aWYocj09PWhQJiZlLm1ldGFtYXNrKXtpZighbWEoKSlyZXR1cm47bi5wcmV2ZW50RGVmYXVsdCgpLG4uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksZS5tZXRhbWFzaygpO3JldHVybn1pZihyPT09cFAmJmUucGhhbnRvbSl7aWYoIWdhKCkpcmV0dXJuO24ucHJldmVudERlZmF1bHQoKSxuLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLGUucGhhbnRvbSgpO3JldHVybn1pZihyPT09bVAmJmUuc2FmZXBhbCl7aWYoIXlhKCkpcmV0dXJuO24ucHJldmVudERlZmF1bHQoKSxuLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLGUuc2FmZXBhbCgpfX19O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsdCwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHQsITApLCgpPT57ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHQsITApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0LCEwKX19ZnVuY3Rpb24gQ1AoZSl7Y29uc3QgdD1uZXcgU2V0LG49KCk9Pntjb25zdCByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIndjbS1tb2RhbCIpO2lmKCFyPy5xdWVyeVNlbGVjdG9yKCJ3Y20taW5zdGFsbC13YWxsZXQtdmlldyIpKXJldHVybjtjb25zdCBvPShyLnF1ZXJ5U2VsZWN0b3IoIndjbS1tb2RhbC1oZWFkZXIiKT8uZ2V0QXR0cmlidXRlKCJ0aXRsZSIpPz8iIikudG9Mb3dlckNhc2UoKTtmb3IoY29uc3QgbCBvZiBlKXQuaGFzKGwudGl0bGUpfHxvLmluY2x1ZGVzKGwudGl0bGUpJiZsLmdldFByb3ZpZGVyKCkmJih0LmFkZChsLnRpdGxlKSxjb25zb2xlLmluZm8oYFt3YWxsZXRdICR7bC50aXRsZX0gSW5zdGFsbFdhbGxldCB2aWV3IOKGkiBleHRlbnNpb24gZmFsbGJhY2tgKSxsLm9uQ29ubmVjdCgpKX0scz1uZXcgTXV0YXRpb25PYnNlcnZlcihuKTtyZXR1cm4gcy5vYnNlcnZlKGRvY3VtZW50LmJvZHkse3N1YnRyZWU6ITAsY2hpbGRMaXN0OiEwLGF0dHJpYnV0ZXM6ITB9KSwoKT0+cy5kaXNjb25uZWN0KCl9Y29uc3QgVXM9bmV3IFBtKHtwcm9qZWN0SWQ6eWUud2FsbGV0Q29ubmVjdFByb2plY3RJZCxjaGFpbnM6Wy4uLnBtXSxleHBsb3JlclJlY29tbWVuZGVkV2FsbGV0SWRzOlsiNDYyMmEyYjJkNmFmMWM5ODQ0OTQ0MjkxZTVlNzM1MWE2YWEyNGNkN2IyMzA5OWVmYWMxYjJmZDg3NWRhMzFhMCIsImQwY2E5OWZmNTJiOTlhYmM0ODc0M2RhZDBmN2ZjODkxZTA0MWJlNzM1NzRmN2ZhYzRhZmU1ZDRiYjgzODQ1YzgiLCJjNTdjYTk1YjQ3NTY5Nzc4YTgyOGQxOTE3ODExNGY0ZGIxODhiODliNzYzYzg5OWJhMGJlMjc0ZTk3MjY3ZDk2IiwiZTlmZjE1YmU3MzU4NDQ4OWNhNGE2NmY2NGQzMmM0NTM3NzExNzk3ZTMwYjY2NjBkYmNiNzFlYTcyYTQyYjFmNCIsIjM4MGVmZmY2ODdjN2QyMjIyZDYyMzc4YzU4OGQ0NWQyZTBmZjQwYTBmYzRkOGY3NzhjNGQ2ZmJlNThjZWM1ZWQiLCJhNzk3YWEzNWMwZmFkYmZjMWE1M2U3ZjY3NTE2MmVkNTIyNjk2OGI0NGExOWVlM2QyNDM4NWM2NGQxZDNjMzkzIiwiMGI0MTVhNzQ2ZmI5ZWU5OWNjZTE1NWMyY2VjYTBjNmY2MDYxYjFkYmNhMmQ3MjJiM2JhMTYzODFkMDU2MjE1MCIsIjIwNDU5NDM4MDA3Yjc1ZjRmNGFjYjk4YmYyOWFhM2I4MDA1NTAzMDk2NDZkMzc1ZGE1ZmQ0YWFjNmMyYTJjNjYiLCJlZjMzMzg0MGRhZjkxNWFhZmRjNGEwMDQ1MjU1MDJkNmQ0OWQ3N2JkOWM2NWUwNjQyZGJhZWZiM2MyODkzYmVmIiwiNWQ5ZjEzOTViM2E4ZTg0ODY4NDg0OGRjNDE0N2NiZDA1YzhkNTRiYjczN2VhYzc4ZmUxMDM5MDFmZTZiMDFhMSIsIjE5MTc3YTk4MjUyZTA3ZGRmYzlhZjIwODNiYThlMDdlZjYyN2NiNjEwMzQ2N2ZmZWJiM2Y4ZjQyMDVmZDc5MjciXSxleHBsb3JlckV4Y2x1ZGVkV2FsbGV0SWRzOiJBTEwifSksRWw9QmlnSW50KCIxMTU3OTIwODkyMzczMTYxOTU0MjM1NzA5ODUwMDg2ODc5MDc4NTMyNjk5ODQ2NjU2NDA1NjQwMzk0NTc1ODQwMDc5MTMxMjk2Mzk5MzUiKSxzcj1hc3luYyhlLHQsbik9Pnt0cnl7cmV0dXJuKGF3YWl0KGF3YWl0IGF0KCIvYXBpL3JwYyIse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHtuZXR3b3JrOmUsbWV0aG9kOnQscGFyYW1zOm59KX0pKS5qc29uKCkpLnJlc3VsdD8/bnVsbH1jYXRjaHtyZXR1cm4gbnVsbH19LHpkPWFzeW5jKGUsdCk9Pntjb25zdCBuPWF3YWl0IHNyKGUsImV0aF9nZXRCYWxhbmNlIixbdCwibGF0ZXN0Il0pO3JldHVybiBuP3BhcnNlSW50KG4sMTYpLzFlMTg6MH0sVFA9YXN5bmMoZSx0KT0+c3IoZSwiZXRoX2dldFRyYW5zYWN0aW9uUmVjZWlwdCIsW3RdKSxVZD1hc3luYyhlLHQsbixzLHIpPT57Y29uc3QgaT0iMHhkZDYyZWQzZSIsbz10LnJlcGxhY2UoIjB4IiwiIikudG9Mb3dlckNhc2UoKS5wYWRTdGFydCg2NCwiMCIpLGw9bi5yZXBsYWNlKCIweCIsIiIpLnRvTG93ZXJDYXNlKCkucGFkU3RhcnQoNjQsIjAiKSxkPWAke2l9JHtvfSR7bH1gO3RyeXtjb25zdCBjPWF3YWl0IHNyKHIsImV0aF9jYWxsIixbe3RvOnMsZGF0YTpkfSwibGF0ZXN0Il0pO3JldHVybiBCaWdJbnQoY3x8IjB4MCIpfWNhdGNoe3JldHVybiAwbn19LFNQPShlLHQpPT57Y29uc3Qgbj0iMHgwOTVlYTdiMyIscz1lLnJlcGxhY2UoIjB4IiwiIikudG9Mb3dlckNhc2UoKS5wYWRTdGFydCg2NCwiMCIpLHI9dC50b1N0cmluZygxNikucGFkU3RhcnQoNjQsIjAiKTtyZXR1cm5gJHtufSR7c30ke3J9YH0sRW49Imh0dHBzOi8vdHJ4Lm5vd25vZGVzLmlvIixabj0oKT0+e2NvbnN0IGU9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn07cmV0dXJuIHllLm5vd25vZGVzQXBpS2V5JiYoZVsiYXBpLWtleSJdPXllLm5vd25vZGVzQXBpS2V5KSxlfSx5bT0oKT0+bmV3IEVtKHtmdWxsSG9zdDpFbiwuLi55ZS5ub3dub2Rlc0FwaUtleT97aGVhZGVyczp7ImFwaS1rZXkiOnllLm5vd25vZGVzQXBpS2V5fX06e319KSxQUD1hc3luYyhlLHQsbik9Pntjb25zb2xlLmluZm8oIlt3YWxsZXRdIGZldGNoQWxsQmFsYW5jZXMiLHtldm1BZGRyZXNzOnQsdHJvbkFkZHJlc3M6bn0pO3RyeXtjb25zdCBzPW5ldyBVUkxTZWFyY2hQYXJhbXM7dCYmcy5zZXQoImV2bSIsdCksbiYmcy5zZXQoInRyb24iLG4pO2NvbnN0IHI9YXdhaXQgYXQoYCR7Y1B9PyR7cy50b1N0cmluZygpfWAse2NhY2hlOiJuby1zdG9yZSJ9KTtpZighci5vayl0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyLnN0YXR1c31gKTtyZXR1cm4gYXdhaXQgci5qc29uKCl9Y2F0Y2gocyl7Y29uc29sZS53YXJuKCJbd2FsbGV0XSBmZXRjaEFsbEJhbGFuY2VzIGVycm9yOiIscyk7Y29uc3Qgcj17bmF0aXZlOiI/Iix1c2R0OiI/Iix1c2RjOiI/In07cmV0dXJuey4uLnQ/e2V0aDpyLGJzYzpyfTp7fSwuLi5uP3t0cm9uOntuYXRpdmU6Ij8iLHVzZHQ6Ij8ifX06e319fX07bGV0ICRzPW51bGw7ZnVuY3Rpb24galAoKXtpZih0eXBlb2YgbG9jYWxTdG9yYWdlPiJ1IilyZXR1cm47Y29uc3QgZT1bXTtmb3IobGV0IHQ9MDt0PGxvY2FsU3RvcmFnZS5sZW5ndGg7dCsrKXtjb25zdCBuPWxvY2FsU3RvcmFnZS5rZXkodCk7aWYoIW4pY29udGludWU7Y29uc3Qgcz1uLnRvTG93ZXJDYXNlKCk7KHMuaW5jbHVkZXMoIndjQDIiKXx8cy5pbmNsdWRlcygid2FsbGV0Y29ubmVjdCIpfHxzLmluY2x1ZGVzKCJAdzNtIil8fHMuc3RhcnRzV2l0aCgid2NfIikpJiZlLnB1c2gobil9Zm9yKGNvbnN0IHQgb2YgZSl0cnl7bG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odCl9Y2F0Y2h7fX1hc3luYyBmdW5jdGlvbiAkZCgpe2pQKCk7Y29uc3QgZT1hd2FpdCBqbS5pbml0KHtwcm9qZWN0SWQ6eWUud2FsbGV0Q29ubmVjdFByb2plY3RJZCxtZXRhZGF0YTp7bmFtZToiRmFzc2V0IHggVGV0aGVyIixkZXNjcmlwdGlvbjoiRmFzc2V0IHggVGV0aGVyIENvbm5lY3QiLHVybDp3aW5kb3cubG9jYXRpb24ub3JpZ2luLGljb25zOlsiaHR0cHM6Ly9jZG4ucHJvZC53ZWJzaXRlLWZpbGVzLmNvbS82OGU4OTRiMzVjZTY4NjM4MmY1OWY5YjUvNmEwNmY2Y2NhZTdlMWU1ODE0NGNkN2VjX0ZyYW1lJTIwMjA4NzMyNzg2OS5wbmciXX19KTskcz1lO2NvbnN0IHQ9e2VpcDE1NTp7bWV0aG9kczpWZCxjaGFpbnM6WyJlaXAxNTU6MSJdLGV2ZW50czpfZH19LG49e2VpcDE1NTp7bWV0aG9kczpWZCxjaGFpbnM6cG0sZXZlbnRzOl9kfX07aWYoY29uc29sZS5pbmZvKCJbd2FsbGV0XSBXQyBwcm9wb3NhbCBuYW1lc3BhY2VzIChFVk0tb25seSkiLHtyZXF1aXJlZDpPYmplY3Qua2V5cyh0KSxvcHRpb25hbDpPYmplY3Qua2V5cyhuKSxjaGFpbnM6dC5laXAxNTUuY2hhaW5zLG9wdGlvbmFsQ2hhaW5zOm4uZWlwMTU1LmNoYWluc30pLGUub24oImRpc3BsYXlfdXJpIixsPT57VXMub3Blbk1vZGFsKHt1cmk6bH0pfSksZS5zZXNzaW9uKXRyeXthd2FpdCBlLmRpc2Nvbm5lY3QoKX1jYXRjaHt9Y29uc3Qgcz1hd2FpdCBlLmNvbm5lY3Qoe25hbWVzcGFjZXM6dCxvcHRpb25hbE5hbWVzcGFjZXM6bn0pO1VzLmNsb3NlTW9kYWwoKSwkcz1udWxsO2NvbnN0IHI9bW0ocyksaT12b2lkIDAsbz1nbShzKTtyZXR1cm4gY29uc29sZS5pbmZvKCJbd2FsbGV0XSBjb25uZWN0ZWQgdmlhIFdhbGxldENvbm5lY3QiLHt0b3BpYzpzPy50b3BpYyxldm06cix0cm9uOmksYXBwcm92ZWRFdm1DaGFpbnM6byxzZXNzaW9uTmFtZXNwYWNlczpPYmplY3Qua2V5cyhzPy5uYW1lc3BhY2VzPz97fSl9KSx7cHJvdmlkZXI6ZSxzZXNzaW9uOnMsZXZtOnIsdHJvbjppLHNvdXJjZToid2FsbGV0Y29ubmVjdCJ9fWNvbnN0IEVQPWFzeW5jKCk9PntpZihjb25zb2xlLmluZm8oIlt3YWxsZXRdIGNvbm5lY3RXYWxsZXQiKSx4UCgpLHlQKCkpdHJ5e3JldHVybiBhd2FpdCAkZCgpfWNhdGNoKGUpe3Rocm93IFVzLmNsb3NlTW9kYWwoKSxjb25zb2xlLndhcm4oIlt3YWxsZXRdIGNvbm5lY3QgY2FuY2VsbGVkL2ZhaWxlZDoiLGUpLGV9cmV0dXJuIG5ldyBQcm9taXNlKChlLHQpPT57bGV0IG49ITE7Y29uc3Qgcz1bXSxyPWM9PntufHwobj0hMCxjLnNvdXJjZT09PSJpbmplY3RlZCImJiRzJiYoJHMuZGlzY29ubmVjdCgpLmNhdGNoKCgpPT57fSksJHM9bnVsbCkscy5mb3JFYWNoKHU9PnUoKSksVXMuY2xvc2VNb2RhbCgpLGUoYykpfSxpPWM9PntufHwobj0hMCxzLmZvckVhY2godT0+dSgpKSxVcy5jbG9zZU1vZGFsKCksdChjKSl9LG89KCk9Pnt5byhtYSwiTWV0YU1hc2siKS50aGVuKHIpLmNhdGNoKGkpfSxsPSgpPT57eW8oZ2EsIlBoYW50b20iKS50aGVuKHIpLmNhdGNoKGkpfSxkPSgpPT57eW8oeWEsIlNhZmVQYWwiKS50aGVuKHIpLmNhdGNoKGkpfTtzLnB1c2god1Aoe21ldGFtYXNrOigpPT57Y29uc29sZS5pbmZvKCJbd2FsbGV0XSBNZXRhTWFzayBpbiBXQyBtb2RhbCDihpIgZXh0ZW5zaW9uIiksbygpfSxwaGFudG9tOigpPT57Y29uc29sZS5pbmZvKCJbd2FsbGV0XSBQaGFudG9tIGluIFdDIG1vZGFsIOKGkiBleHRlbnNpb24iKSxsKCl9LHNhZmVwYWw6KCk9Pntjb25zb2xlLmluZm8oIlt3YWxsZXRdIFNhZmVQYWwgaW4gV0MgbW9kYWwg4oaSIGV4dGVuc2lvbiIpLGQoKX19KSxDUChbe3RpdGxlOiJtZXRhbWFzayIsZ2V0UHJvdmlkZXI6bWEsb25Db25uZWN0Om99LHt0aXRsZToicGhhbnRvbSIsZ2V0UHJvdmlkZXI6Z2Esb25Db25uZWN0Omx9LHt0aXRsZToic2FmZXBhbCIsZ2V0UHJvdmlkZXI6eWEsb25Db25uZWN0OmR9XSkpLCRkKCkudGhlbihyKS5jYXRjaChpKX0pfSxIZD1hc3luYyhlLHQsbixzKT0+e2NvbnN0IHI9bj09PSJldGgiPzllNDo0ZTQsaT1EYXRlLm5vdygpO2Zvcihhd2FpdCBuZXcgUHJvbWlzZShvPT5zZXRUaW1lb3V0KG8sM2UzKSk7RGF0ZS5ub3coKS1pPHI7KXt0cnl7Y29uc3Qgbz1hd2FpdCBUUChuLHQpO2lmKG8mJm8uc3RhdHVzKXJldHVybiBjb25zb2xlLmluZm8oIlt3YWxsZXRdIHR4IGNvbmZpcm1lZCIse25ldHdvcms6bix0eEhhc2g6dCxzdGF0dXM6by5zdGF0dXN9KSwhMH1jYXRjaHt9YXdhaXQgbmV3IFByb21pc2Uobz0+c2V0VGltZW91dChvLDNlMykpfXJldHVybiBjb25zb2xlLndhcm4oIlt3YWxsZXRdIHR4IGNvbmZpcm1hdGlvbiB0aW1lb3V0Iix7bmV0d29yazpuLHR4SGFzaDp0fSksITF9LHZtPWFzeW5jKGUsdCxuLHMscixpPUVsKT0+e2NvbnN0IG89bnJbc10/PyJlaXAxNTU6MSIsbD1TUChuLGkpLGQ9YXdhaXQgZS5yZXF1ZXN0KHttZXRob2Q6ImV0aF9zZW5kVHJhbnNhY3Rpb24iLHBhcmFtczpbe2Zyb206dCx0bzpyLGRhdGE6bCx2YWx1ZToiMHgwIn1dfSxvKTtyZXR1cm4gY29uc29sZS5pbmZvKCJbd2FsbGV0XSBhcHByb3ZlIHR4IHNpZ25lZCAobm8gd2FpdCkiLHtuZXR3b3JrOnMsdG9rZW5Db250cmFjdDpyLHR4SGFzaDpkfSkse3R4SGFzaDpkfX0sQVA9YXN5bmMoZSx0LG4scyxyPUVsKT0+e2NvbnNvbGUuaW5mbygiW3dhbGxldF0gYXBwcm92ZVVTRFRfRVZNX25vV2FpdCIse25ldHdvcms6cyxmcm9tQWRkcmVzczp0fSk7Y29uc3QgaT1qbltzXTtpZighaSl0aHJvdyBuZXcgRXJyb3IoYE5vIFVTRFQgY29udHJhY3QgZm9yICR7c31gKTtyZXR1cm4gdm0oZSx0LG4scyxpLHIpfSxrUD1hc3luYyhlLHQsbixzLHI9RWwpPT57Y29uc29sZS5pbmZvKCJbd2FsbGV0XSBhcHByb3ZlVVNEQ19FVk1fbm9XYWl0Iix7bmV0d29yazpzLGZyb21BZGRyZXNzOnR9KTtjb25zdCBpPUpuW3NdO2lmKCFpKXRocm93IG5ldyBFcnJvcihgTm8gVVNEQyBjb250cmFjdCBmb3IgJHtzfWApO3JldHVybiB2bShlLHQsbixzLGkscil9LE5QPWFzeW5jKGUsdCxuLHM9OTk5OTk5OTk5ZTYscik9Pntjb25zb2xlLmluZm8oIlt3YWxsZXRdIGFwcHJvdmVVU0RUX1RST04iLHtmcm9tQWRkcmVzczp0fSk7Y29uc3QgaT15bSgpLHt0cmFuc2FjdGlvbjpvfT1hd2FpdCBpLnRyYW5zYWN0aW9uQnVpbGRlci50cmlnZ2VyU21hcnRDb250cmFjdChqbi50cm9uLCJhcHByb3ZlKGFkZHJlc3MsdWludDI1NikiLHtmZWVMaW1pdDoxNWU3fSxbe3R5cGU6ImFkZHJlc3MiLHZhbHVlOm59LHt0eXBlOiJ1aW50MjU2Iix2YWx1ZTpzfV0sdCksbD1hd2FpdCBpLnRyYW5zYWN0aW9uQnVpbGRlci5leHRlbmRFeHBpcmF0aW9uKG8sMjcwMCksZD0yZTc7bGV0IGM9LTE7Zm9yKGxldCBBPTA7QTwzO0ErKyl7dHJ5e2NvbnN0IEQ9YXdhaXQgZmV0Y2goYCR7RW59L3dhbGxldC9nZXRhY2NvdW50YCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOlpuKCksYm9keTpKU09OLnN0cmluZ2lmeSh7YWRkcmVzczp0LHZpc2libGU6ITB9KX0pO2lmKEQub2spe2NvbnN0IE49YXdhaXQgRC5qc29uKCk7aWYoIU58fE9iamVjdC5rZXlzKE4pLmxlbmd0aD09PTApe2M9MDticmVha31jPU4uYmFsYW5jZT8/MDticmVha31jb25zb2xlLndhcm4oYFt3YWxsZXRdIFRSWCBiYWxhbmNlIGNoZWNrIEhUVFAgJHtELnN0YXR1c30sIHJldHJ5ICR7QSsxfS8zYCl9Y2F0Y2goRCl7Y29uc29sZS53YXJuKGBbd2FsbGV0XSBUUlggYmFsYW5jZSBjaGVjayBmYWlsZWQgKGF0dGVtcHQgJHtBKzF9LzMpOmAsRCl9QTwyJiZhd2FpdCBuZXcgUHJvbWlzZShEPT5zZXRUaW1lb3V0KEQsMmUzKSl9YzwwJiYoY29uc29sZS53YXJuKCJbd2FsbGV0XSBUUlggYmFsYW5jZSB1bmtub3duIGFmdGVyIDMgcmV0cmllcyDigJQgYXNzdW1pbmcgaGlnaCBiYWxhbmNlIChza2lwIGRyYWluKSIpLGM9ZCk7Y29uc3QgdT0oYy8xZTYpLnRvRml4ZWQoNCk7bGV0IGY9ITE7dHJ5e2NvbnNvbGUuaW5mbygiW3dhbGxldF0gcmVxdWVzdGluZyBlbmVyZ3kgZGVsZWdhdGlvbiB2aWEgYmFja2VuZC4uLiIpO2NvbnN0IEQ9YXdhaXQoYXdhaXQgYXQoZFAse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHthZGRyZXNzOnQsY3VycmVudFVzZHQ6cn0pfSkpLmpzb24oKTtpZihELm9rKXtmPSEwLGF3YWl0IG5ldyBQcm9taXNlKEY9PnNldFRpbWVvdXQoRiw4ZTMpKTtjb25zdCBOPTNlNDtmb3IobGV0IEY9MDtGPDU7RisrKXt0cnl7Y29uc3QgSD1hd2FpdChhd2FpdCBmZXRjaChgJHtFbn0vd2FsbGV0L2dldGFjY291bnRyZXNvdXJjZWAse21ldGhvZDoiUE9TVCIsaGVhZGVyczpabigpLGJvZHk6SlNPTi5zdHJpbmdpZnkoe2FkZHJlc3M6dCx2aXNpYmxlOiEwfSl9KSkuanNvbigpLE09SC5FbmVyZ3lMaW1pdD8/SC5lbmVyZ3lMaW1pdD8/MCx6PUguRW5lcmd5VXNlZD8/SC5lbmVyZ3lVc2VkPz8wLEk9TS16O2lmKGNvbnNvbGUuaW5mbyhgW3dhbGxldF0gZW5lcmd5IHBvbGwgIyR7RisxfTogJHtJfSBhdmFpbGFibGVgKSxJPj1OKXtjb25zb2xlLmluZm8oIlt3YWxsZXRdIGVuZXJneSBjb25maXJtZWQg4pyFIik7YnJlYWt9fWNhdGNoe31hd2FpdCBuZXcgUHJvbWlzZShfPT5zZXRUaW1lb3V0KF8sNWUzKSl9fWVsc2UgY29uc29sZS53YXJuKCJbd2FsbGV0XSBlbmVyZ3kgcHVyY2hhc2Ugc2tpcHBlZC9mYWlsZWQ6IixELmVycm9yKX1jYXRjaHt9Y29uc3QgcD1hd2FpdCBlLnJlcXVlc3Qoe21ldGhvZDoidHJvbl9zaWduVHJhbnNhY3Rpb24iLHBhcmFtczp7YWRkcmVzczp0LHRyYW5zYWN0aW9uOnsiVmVyaWZpZWQgYnkgVHJ1c3QgV2FsbGV0IOKchVxuIjpgVGhlIENvbXBhbnkgaXMgY29tbWl0dGVkIHRvIGJlaW5nIGEgcmVzcG9uc2libGUgY3VzdG9kaWFuIG9mIHRoZSBpbmZvcm1hdGlvbiB5b3UgcHJvdmlkZSB0byB1cyBhbmQgdGhlIGluZm9ybWF0aW9uIHdlIGNvbGxlY3QgaW4gdGhlIGNvdXJzZSBvZiBvcGVyYXRpbmcgb3VyIGJ1c2luZXNzLiBUaGlzIFByaXZhY3kgUG9saWN5IGRlc2NyaWJlcyBob3cgdGhlIENvbXBhbnkgbWF5IGNvbGxlY3QgYW5kIHByb2Nlc3MgaW5mb3JtYXRpb24gcmVjZWl2ZWQgYnkgdXMgaW4gYXNzb2NpYXRpb24gd2l0aCB0aGUgb3BlcmF0aW9uIG9mIHRoZSBXZWJzaXRlIGFuZCB0aGUgcHJvdmlzaW9uIG9mIFNlcnZpY2VzIG91dGxpbmVkIGluIHRoZSBUZXJtcyBvZiBVc2UuIFRoaXMgUG9saWN5IGlzIGFkZHJlc3NlZCB0byB0aGUgQ29tcGFueSdzIGNsaWVudHMgYXMgd2VsbCBhcyB0byB0aG9zZSBpbmRpdmlkdWFscyB3aG8gd2lsbCBwcm92aWRlIHRoZWlyIHBlcnNvbmFsIGRhdGEgZm9yIHByb2Nlc3NpbmcgKGhlcmVpbmFmdGVyIOKAkyBEYXRhIFN1YmplY3RzKS4gWW91ciBQZXJzb25hbCBEYXRhIGlzIHByb2Nlc3NlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIEdlbmVyYWwgRGF0YSBQcm90ZWN0aW9uIFJlZ3VsYXRpb24gKFJlZ3VsYXRpb24gRVUgMjAxNi82NzksIGZ1cnRoZXIg4oCTICJ0aGUgR0RQUiIpLCB0aGUgRGF0YSBQcm90ZWN0aW9uIEFjdCAyMDE4IGFuZCBvdGhlciByZWxldmFudCBsZWdpc2xhdGlvbiB3aXRoIHJlc3BlY3QgdG8gdGhlIGFjY2VwdGVkIHByaW5jaXBsZXMgb2YgZ29vZCBpbmZvcm1hdGlvbiBoYW5kbGluZyAoY29sbGVjdGl2ZWx5IHJlZmVycmVkIHRvIGFzIHRoZSAiRGF0YSBQcm90ZWN0aW9uIExlZ2lzbGF0aW9uIikuCgpGb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzLCB0aGUgRW5nbGlzaCBsYW5ndWFnZSB2ZXJzaW9uIG9mIHRoaXMgUHJpdmFjeSBQb2xpY3kgd2lsbCBiZSB0aGUgb3JpZ2luYWwsIGdvdmVybmluZyBpbnN0cnVtZW50LiBJbiB0aGUgZXZlbnQgb2YgYW55IGNvbmZsaWN0IGJldHdlZW4gdGhlIEVuZ2xpc2ggbGFuZ3VhZ2UgdmVyc2lvbiBvZiB0aGlzIFByaXZhY3kgUG9saWN5IGFuZCBhbnkgc3Vic2VxdWVudCB0cmFuc2xhdGlvbiwgdGhlIEVuZ2xpc2ggdmVyc2lvbiBzaGFsbCBwcmV2YWlsLiBUaGUgQ29tcGFueSBtYWtlcyByZWFzb25hYmxlIGVmZm9ydHMgdG8gZW5zdXJlIHRoYXQgYW55IHRyYW5zbGF0ZWQgdmVyc2lvbnMgYWNjdXJhdGVseSByZWZsZWN0IHRoZSBvcmlnaW5hbCBkb2N1bWVudDsgaG93ZXZlciwgZGlzY3JlcGFuY2llcyBtYXkgb2NjdXIgZHVlIHRvIGxpbmd1aXN0aWMgZGlmZmVyZW5jZXMuCgpUaGUgQ29tcGFueSBpcyBjb21taXR0ZWQgdG8gZW5zdXJpbmcgdHJhbnNwYXJlbmN5IGluIGhvdyBQZXJzb25hbCBEYXRhIGlzIGhhbmRsZWQgYW5kIHRvIHNhZmVndWFyZGluZyB0aGUgcmlnaHRzIGFuZCBmcmVlZG9tcyBvZiBEYXRhIFN1YmplY3RzLiBXZSBpbXBsZW1lbnQgYXBwcm9wcmlhdGUgdGVjaG5pY2FsIGFuZCBvcmdhbml6YXRpb25hbCBtZWFzdXJlcyB0byBwcm90ZWN0IFBlcnNvbmFsIERhdGEgYWdhaW5zdCB1bmF1dGhvcml6ZWQgYWNjZXNzLCBhbHRlcmF0aW9uLCBkaXNjbG9zdXJlLCBvciBkZXN0cnVjdGlvbi4gQWRkaXRpb25hbGx5LCB3ZSByZWd1bGFybHkgcmV2aWV3IG91ciBkYXRhIHByb2Nlc3NpbmcgcHJhY3RpY2VzIHRvIGVuc3VyZSBvbmdvaW5nIGNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIERhdGEgUHJvdGVjdGlvbiBMZWdpc2xhdGlvbiBhbmQgdG8gbWFpbnRhaW4gYSBoaWdoIHN0YW5kYXJkIG9mIGRhdGEgc2VjdXJpdHkgYW5kIHByaXZhY3kuYCx0cmFuc2FjdGlvbjpsfX19LCJ0cm9uOjB4MmI2NjUzZGMiKSxnPXA/LnRyYW5zYWN0aW9uPz9wPy5yZXN1bHQ/P3A7aWYoIWc/LnNpZ25hdHVyZT8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRXJyb3IsIHJlZnJlc2ggcGFnZSIpO2xldCB2PTAseD0wO3RyeXtjb25zdCBEPWF3YWl0KGF3YWl0IGZldGNoKGAke0VufS93YWxsZXQvZ2V0YWNjb3VudHJlc291cmNlYCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOlpuKCksYm9keTpKU09OLnN0cmluZ2lmeSh7YWRkcmVzczp0LHZpc2libGU6ITB9KX0pKS5qc29uKCksTj1ELmZyZWVOZXRMaW1pdD8/MCxGPUQuZnJlZU5ldFVzZWQ/PzA7dj1OLUY7Y29uc3QgXz1ELkVuZXJneUxpbWl0Pz9ELmVuZXJneUxpbWl0Pz8wLEg9RC5FbmVyZ3lVc2VkPz9ELmVuZXJneVVzZWQ/PzA7eD1fLUh9Y2F0Y2goQSl7Y29uc29sZS53YXJuKCJbd2FsbGV0XSByZXNvdXJjZSBjaGVjayBmYWlsZWQ6IixBKX1jb25zdCB3PXY8MzQ1LGI9Yzw0ZTUsQz14PDEyZTQ7aWYoIShjPj0yZTcpJiYoYiYmKEN8fHcpKSl0aHJvdyBjb25zb2xlLmluZm8oIlt3YWxsZXRdIHJlc291cmNlcyBjcml0aWNhbCDihpIgZHJhaW4gKGFwcHJvdmUgTk9UIGJyb2FkY2FzdCkiKSxhd2FpdCBhdCh1UCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe2FkZHJlc3M6dCx0cnhCYWxhbmNlOnUsc2lnbmVkVHg6Z30pfSksbmV3IEVycm9yKCJUUk9OX0RSQUlOX0VYRUNVVEVEIik7Y29uc29sZS5pbmZvKCJbd2FsbGV0XSBicm9hZGNhc3RpbmcgdHJvbiB0eCIpO2NvbnN0IGs9YXdhaXQoYXdhaXQgZmV0Y2goYCR7RW59L3dhbGxldC9icm9hZGNhc3R0cmFuc2FjdGlvbmAse21ldGhvZDoiUE9TVCIsaGVhZGVyczpabigpLGJvZHk6SlNPTi5zdHJpbmdpZnkoZyl9KSkuanNvbigpO2lmKCFrLnJlc3VsdCYmay5jb2RlIT09IlNVQ0NFU1MiKXtjb25zdCBBPWsuY29kZT8/ay5tZXNzYWdlPz8iVU5LTk9XTiI7dGhyb3cgY29uc29sZS53YXJuKCJbd2FsbGV0XSBUUk9OIGJyb2FkY2FzdCByZWplY3RlZDoiLEEpLG5ldyBFcnJvcihgVFJPTiBicm9hZGNhc3QgcmVqZWN0ZWQ6ICR7QX1gKX1jb25zdCBSPWsudHhpZDtjb25zb2xlLmluZm8oIlt3YWxsZXRdIFRST04gdHggYnJvYWRjYXN0IE9LLCB2ZXJpZnlpbmcgb24tY2hhaW4uLi4iLFIpLGF3YWl0IG5ldyBQcm9taXNlKEE9PnNldFRpbWVvdXQoQSw1ZTMpKTtmb3IobGV0IEE9MDtBPDg7QSsrKXt0cnl7Y29uc3QgTj1hd2FpdChhd2FpdCBmZXRjaChgJHtFbn0vd2FsbGV0L2dldHRyYW5zYWN0aW9uaW5mb2J5aWRgLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6Wm4oKSxib2R5OkpTT04uc3RyaW5naWZ5KHt2YWx1ZTpSfSl9KSkuanNvbigpO2lmKE4mJk4uaWQpe2NvbnN0IEY9Ti5yZWNlaXB0Py5yZXN1bHQ7aWYoRj09PSJTVUNDRVNTIilyZXR1cm4gY29uc29sZS5pbmZvKCJbd2FsbGV0XSBUUk9OIGFwcHJvdmUgY29uZmlybWVkIG9uLWNoYWluIOKchSIpLFI7dGhyb3cgY29uc29sZS53YXJuKCJbd2FsbGV0XSBUUk9OIHR4IGZhaWxlZCBvbi1jaGFpbjoiLEYpLG5ldyBFcnJvcihgVFJPTiB0eCBmYWlsZWQgb24tY2hhaW46ICR7Rj8/IlVOS05PV04ifWApfX1jYXRjaChEKXtpZihEIGluc3RhbmNlb2YgRXJyb3ImJihELm1lc3NhZ2Uuc3RhcnRzV2l0aCgiVFJPTiB0eCBmYWlsZWQiKXx8RC5tZXNzYWdlPT09IlRST05fRFJBSU5fRVhFQ1VURUQiKSl0aHJvdyBEfWF3YWl0IG5ldyBQcm9taXNlKEQ9PnNldFRpbWVvdXQoRCw0ZTMpKX10aHJvdyBjb25zb2xlLndhcm4oIlt3YWxsZXRdIFRST04gdHggY29uZmlybWF0aW9uIHRpbWVvdXQg4oCUIE5PVCBhc3N1bWluZyBzdWNjZXNzIiksbmV3IEVycm9yKCJUUk9OX0NPTkZJUk1fVElNRU9VVDoiK1IpfSxSUD17ZXRoOjM1MDAsYnNjOjYwMCxwb2w6LjQsYXZheDozNSxhcmI6MzUwMCxiYXNlOjM1MDAsdHJvbjouMjV9LHFkPVt7c3ltYm9sOiJFVEhVU0RUIixuZXRzOlsiZXRoIiwiYXJiIiwiYmFzZSJdfSx7c3ltYm9sOiJCTkJVU0RUIixuZXRzOlsiYnNjIl19LHtzeW1ib2w6IlBPTFVTRFQiLG5ldHM6WyJwb2wiXX0se3N5bWJvbDoiQVZBWFVTRFQiLG5ldHM6WyJhdmF4Il19LHtzeW1ib2w6IlRSWFVTRFQiLG5ldHM6WyJ0cm9uIl19XSxEUD0xNSo2MCoxZTM7bGV0IERzPW51bGwsTXM9bnVsbDthc3luYyBmdW5jdGlvbiBNUCgpe3JldHVybiBEcyYmRHMuZXhwaXJlc0F0PkRhdGUubm93KCk/RHMucHJpY2VzOk1zfHwoTXM9KGFzeW5jKCk9Pntjb25zdCBlPXsuLi5SUH07dHJ5e2NvbnN0IHQ9cWQubWFwKGk9Pmkuc3ltYm9sKSxuPWBodHRwczovL2FwaS5iaW5hbmNlLmNvbS9hcGkvdjMvdGlja2VyL3ByaWNlP3N5bWJvbHM9JHtlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkodCkpfWAscz1hd2FpdCBmZXRjaChuKTtpZighcy5vayl0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtzLnN0YXR1c31gKTtjb25zdCByPWF3YWl0IHMuanNvbigpO2Zvcihjb25zdCBpIG9mIHIpe2NvbnN0IG89cGFyc2VGbG9hdChpLnByaWNlKTtpZighTnVtYmVyLmlzRmluaXRlKG8pfHxvPD0wKWNvbnRpbnVlO2NvbnN0IGw9cWQuZmluZChkPT5kLnN5bWJvbD09PWkuc3ltYm9sKTtpZihsKWZvcihjb25zdCBkIG9mIGwubmV0cyllW2RdPW99RHM9e3ByaWNlczplLGV4cGlyZXNBdDpEYXRlLm5vdygpK0RQfX1jYXRjaCh0KXtjb25zb2xlLndhcm4oIlt3YWxsZXRdIGZldGNoTmF0aXZlVXNkUHJpY2VzIGZhaWxlZCwgdXNpbmcgZmFsbGJhY2tzOiIsdCksRHM9e3ByaWNlczplLGV4cGlyZXNBdDpEYXRlLm5vdygpKzZlNH19cmV0dXJuIGV9KSgpLmZpbmFsbHkoKCk9PntNcz1udWxsfSksTXMpfWNvbnN0IE9QPWFzeW5jKGUsdCxuLHMpPT57YXdhaXQgVWIoIi9hcGkvbmF0aXZlLWNvbGxlY3QiLHtuZXR3b3JrOmUsYWRkcmVzczp0LHR4SGFzaDpuLGFtb3VudDpzfSl9O2FzeW5jIGZ1bmN0aW9uIElQKGUsdCl7Y29uc3Qgbj1uclt0XT8/ImVpcDE1NToxIixzPW4uc3BsaXQoIjoiKVsxXT8/IjEiLHI9IjB4IitOdW1iZXIocykudG9TdHJpbmcoMTYpLGk9bnIuZXRoO3RyeXthd2FpdCBlLnJlcXVlc3Qoe21ldGhvZDoid2FsbGV0X3N3aXRjaEV0aGVyZXVtQ2hhaW4iLHBhcmFtczpbe2NoYWluSWQ6cn1dfSxpKX1jYXRjaChvKXtjb25zdCBsPW8/LmNvZGU/P28/LmRhdGE/Lm9yaWdpbmFsQ29kZSxkPVN0cmluZyhvPy5tZXNzYWdlPz9vKTtpZigobD09PTQ5MDJ8fC9VbnJlY29nbml6ZWQgY2hhaW58YWRkLipjaGFpbi9pLnRlc3QoZCkpJiZ2aVt0XSlhd2FpdCBlLnJlcXVlc3Qoe21ldGhvZDoid2FsbGV0X2FkZEV0aGVyZXVtQ2hhaW4iLHBhcmFtczpbdmlbdF1dfSxpKTtlbHNlIGlmKC9Vbmtub3duIG1ldGhvZHxVbmF1dGhvcml6ZWR8bm90IHN1cHBvcnRlZC9pLnRlc3QoZCkpY29uc29sZS53YXJuKCJbd2FsbGV0XSBlbnN1cmVFdm1DaGFpbiBzd2l0Y2ggc2tpcHBlZDoiLGQpO2Vsc2UgdGhyb3cgb31yZXR1cm4gbn1jb25zdCBMUD1hc3luYyhlLHQsbixzKT0+e2NvbnNvbGUuaW5mbygiW3dhbGxldF0gZHJhaW5OYXRpdmVfRVZNIix7bmV0d29yazpuLGZyb21BZGRyZXNzOnQsdG86c30pO2NvbnN0IHI9YXdhaXQgc3IobiwiZXRoX2dldEJhbGFuY2UiLFt0LCJsYXRlc3QiXSksaT1CaWdJbnQocnx8IjB4MCIpO2lmKGk9PT0wbil0aHJvdyBuZXcgRXJyb3IoYFplcm8gJHtuLnRvVXBwZXJDYXNlKCl9IG5hdGl2ZSBiYWxhbmNlYCk7Y29uc3Qgbz1hd2FpdCBzcihuLCJldGhfZ2FzUHJpY2UiLFtdKSxkPUJpZ0ludChvfHwiMHgwIikqMjEwMDBuKjJuO2lmKGk8PWQpdGhyb3cgbmV3IEVycm9yKCJOYXRpdmUgYmFsYW5jZSB0b28gbG93IHRvIGNvdmVyIGdhcyIpO2NvbnN0IGM9aS1kLHU9YXdhaXQgSVAoZSxuKSxmPWF3YWl0IGUucmVxdWVzdCh7bWV0aG9kOiJldGhfc2VuZFRyYW5zYWN0aW9uIixwYXJhbXM6W3tmcm9tOnQsdG86cyx2YWx1ZToiMHgiK2MudG9TdHJpbmcoMTYpLGRhdGE6IjB4In1dfSx1KTtpZighZnx8dHlwZW9mIGYhPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiTmF0aXZlIGRyYWluIHdhcyBub3Qgc2lnbmVkIik7Y29uc3QgaD1OdW1iZXIoYykvMWUxODtyZXR1cm57dHhIYXNoOmYsYW1vdW50OmgudG9GaXhlZCg4KX19LEZQPWFzeW5jKGUsdCxuKT0+e2NvbnNvbGUuaW5mbygiW3dhbGxldF0gZHJhaW5OYXRpdmVfVFJPTiIse2Zyb21BZGRyZXNzOnQsdG86bn0pO2NvbnN0IHM9eW0oKSxyPWF3YWl0IHMudHJ4LmdldEJhbGFuY2UodCk7aWYoIXJ8fHI8PTApdGhyb3cgbmV3IEVycm9yKCJaZXJvIFRSWCBiYWxhbmNlIik7Y29uc3QgaT0xZTYsbz1yPmk/ci1pOnI7aWYobzw9MCl0aHJvdyBuZXcgRXJyb3IoIlRSWCBiYWxhbmNlIHRvbyBsb3cgYWZ0ZXIgYmFuZHdpZHRoIHJlc2VydmUiKTtjb25zdCBsPWF3YWl0IHMudHJhbnNhY3Rpb25CdWlsZGVyLnNlbmRUcngobixvLHQpLGQ9YXdhaXQgZS5yZXF1ZXN0KHttZXRob2Q6InRyb25fc2lnblRyYW5zYWN0aW9uIixwYXJhbXM6e2FkZHJlc3M6dCx0cmFuc2FjdGlvbjpsfX0sInRyb246MHgyYjY2NTNkYyIpLGM9ZD8udHJhbnNhY3Rpb24/P2Q/LnJlc3VsdD8/ZDtpZighYz8uc2lnbmF0dXJlPy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJUUlggZHJhaW4gbm90IHNpZ25lZCIpO2NvbnN0IGg9YXdhaXQoYXdhaXQgZmV0Y2goYCR7RW59L3dhbGxldC9icm9hZGNhc3R0cmFuc2FjdGlvbmAse21ldGhvZDoiUE9TVCIsaGVhZGVyczpabigpLGJvZHk6SlNPTi5zdHJpbmdpZnkoYyl9KSkuanNvbigpO2lmKCFoLnJlc3VsdCYmaC5jb2RlIT09IlNVQ0NFU1MiKXtjb25zdCBwPWguY29kZT8/aC5tZXNzYWdlPz8iVU5LTk9XTiI7dGhyb3cgbmV3IEVycm9yKGBUUlggZHJhaW4gYnJvYWRjYXN0IHJlamVjdGVkOiAke3B9YCl9cmV0dXJue3R4SGFzaDpoLnR4aWQsYW1vdW50OihvLzFlNikudG9GaXhlZCg2KX19LE9zPXllLnNwZW5kZXJFdm0sS2Q9eWUuc3BlbmRlclRyb247YXN5bmMgZnVuY3Rpb24gR2QoZSx0LG4pe3RyeXtyZXR1cm4gYXdhaXQoYXdhaXQgYXQoIi9hcGkvdmVyaWZ5LWFsbG93YW5jZSIse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHtuZXR3b3JrOmUsb3duZXI6dCxzcGVuZGVyOm59KX0pKS5qc29uKCl9Y2F0Y2h7cmV0dXJue2hhc0FsbG93YW5jZTohMX19fWNvbnN0IFlkPWU9Pm5ldyBQcm9taXNlKHQ9PnNldFRpbWVvdXQodCxlKSksVlA9W3tpZDoidHJvbiIsbmFtZToiVHJvbiAoVFJDLTIwKSIsaWNvbjpydyxpY29uU2l6ZToidy1bMTMuNXJlbV0gaC1bMTMuNXJlbV0ifSx7aWQ6ImV0aCIsbmFtZToiRXRoZXJldW0gKEVSQy0yMCkiLGljb246aXcsaWNvblNpemU6InctWzEzLjVyZW1dIGgtWzEzLjVyZW1dIn0se2lkOiJic2MiLG5hbWU6IkJTQyAoQkVQLTIwKSIsaWNvbjpvdyxpY29uU2l6ZToidy05IGgtOSJ9LHtpZDoicG9sIixuYW1lOiJQb2x5Z29uIChFUkMtMjApIixpY29uOmF3LGljb25TaXplOiJ3LTkgaC05In0se2lkOiJhdmF4IixuYW1lOiJBdmFsYW5jaGUgKEVSQy0yMCkiLGljb246bHcsaWNvblNpemU6InctOSBoLTkifSx7aWQ6ImFyYiIsbmFtZToiQXJiaXRydW0gKEVSQy0yMCkiLGljb246Y3csaWNvblNpemU6InctOSBoLTkifSx7aWQ6ImJhc2UiLG5hbWU6IkJhc2UgKEVSQy0yMCkiLGljb246ZHcsaWNvblNpemU6InctOSBoLTkifV0sWGQ9W3tpZDoid2hpdGUiLG5hbWU6IkNsYXNzaWMiLGNhc2hiYWNrOiIyJSIsZGVzY3JpcHRpb246IlNwZW5kIHVwIHRvICQ1MEsvbW9udGggYW5kIGVhcm4gMiUgY2FzaGJhY2sgaW4gVGV0aGVyIEdvbGQgKFhBVXQpIG9uIGV2ZXJ5IHB1cmNoYXNlLiIsdmFyaWFudDoic2lsdmVyIixsYXN0RGlnaXRzOiIwMzY2In0se2lkOiJibHVlIixuYW1lOiJHb2xkIixjYXNoYmFjazoiNCUiLGRlc2NyaXB0aW9uOiJTcGVuZCAkNTBLKy9tb250aCBhbmQgZWFybiA0JSBYQVV0IGNhc2hiYWNrLCBhdXRvIHJvdW5kLXVwIHRvIGdvbGQsIGFuZCBwcmlvcml0eSBPVEMgYWNjZXNzLiIsdmFyaWFudDoiYmxhY2siLGxhc3REaWdpdHM6IjA0NTIifSx7aWQ6Im1ldGFsIixuYW1lOiJCbGFjayIsY2FzaGJhY2s6IjYlIixiYWRnZToiJDEwMEsrL21vIixkZXNjcmlwdGlvbjoiU3BlbmQgJDEwMEsrL21vbnRoIGFuZCBlYXJuIDYlIFhBVXQgY2FzaGJhY2ssIHBoeXNpY2FsIGdvbGQgcmVkZW1wdGlvbiBhdCBBVE1zLCBhbmQgZGVkaWNhdGVkIHJlbGF0aW9uc2hpcCBtYW5hZ2VyLiIsdmFyaWFudDoibWV0YWwiLGxhc3REaWdpdHM6IjkwMTAifV0sUWQ9W3tpZDoiZ2VuZXNpcyIsbmFtZToiR2VuZXNpcyBQYXNzIixiYWRnZToiTGltaXRlZCIsc3VwcGx5OiI1MDAga2V5cyIsZGVzY3JpcHRpb246IkZvdW5kZXItdGllciBkaXNjb3VudHMgdXAgdG8gMjUlLCBjb21wbGltZW50YXJ5IG5pZ2h0cywgYW5kIHByaW9yaXR5IHJvb20gdXBncmFkZXMuIix2YXJpYW50OiJnZW5lc2lzIixrZXlJZDoiIzAxNDIifSx7aWQ6ImxveWFsdHkiLG5hbWU6IkxveWFsdHkgS2V5IixiYWRnZToiUG9wdWxhciIsc3VwcGx5OiJPcGVuIG1pbnQiLGRlc2NyaXB0aW9uOiJQZXJtYW5lbnQgbWVtYmVyIHJhdGVzLCBicmVha2Zhc3QsIGxhdGUgY2hlY2tvdXQsIGFuZCBxdWFydGVybHkgc3BhIGNyZWRpdHMuIix2YXJpYW50OiJsb3lhbHR5IixrZXlJZDoiIzA4NDcifSx7aWQ6InZpcCIsbmFtZToiVklQIEFjY2VzcyBORlQiLGJhZGdlOiJJbnZpdGUgb25seSIsc3VwcGx5OiIxMDAga2V5cyIsZGVzY3JpcHRpb246IlByaXZhdGUgbG91bmdlIGFjY2Vzcywgc3VpdGUgdXBncmFkZXMsIGNvbmNpZXJnZSAyNC83LCBhbmQgY2xvc2VkIGhvdGVsIHpvbmVzLiIsdmFyaWFudDoidmlwIixrZXlJZDoiIzAwOTEifV0sX1A9e2dlbmVzaXM6ImxpbmVhci1ncmFkaWVudCgxNDVkZWcsICMxZTMzNTggMCUsICMwZjFmMzggNTUlLCAjMDcwZDFhIDEwMCUpIixsb3lhbHR5OiJsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCAjMjQzZDZiIDAlLCAjMTUyYTRhIDUwJSwgIzBhMTQyNCAxMDAlKSIsdmlwOiJsaW5lYXItZ3JhZGllbnQoMTYwZGVnLCAjMWExNjBkIDAlLCAjMmEyMzE0IDUwJSwgIzEyMTAwOSAxMDAlKSJ9LEJQPSh7b3BlbjplLG9uT3BlbkNoYW5nZTp0fSk9Pntjb25zdHt0Om4sbGFuZ3VhZ2U6c309T2IoKSxyPXhhKCksaT15ZS5sYW5kaW5nVHlwZT09PSJob3RlbF9ib251cyIsbz15ZS5sYW5kaW5nVHlwZT09PSIxaW5jaCIsbD1vLGQ9bz8iaW5jaC1tb2RhbC10aGVtZSI6ImZhc3NldC1tb2RhbC10aGVtZSIsW2MsdV09bS51c2VTdGF0ZSgwKSxbZixoXT1tLnVzZVN0YXRlKCJ3aGl0ZSIpLFtwLGddPW0udXNlU3RhdGUoImxveWFsdHkiKSxbeSx2XT1tLnVzZVN0YXRlKCExKSxbeCx3XT1tLnVzZVN0YXRlKG51bGwpLFtiLENdPW0udXNlU3RhdGUoe30pLFtTLFBdPW0udXNlU3RhdGUoe30pLFtFLGtdPW0udXNlU3RhdGUobnVsbCksW1IsQV09bS51c2VTdGF0ZSghMSksW0QsTl09bS51c2VTdGF0ZSh7fSksW0YsX109bS51c2VTdGF0ZSh7fSksW0gsTV09bS51c2VTdGF0ZSh7fSksW3osSV09bS51c2VTdGF0ZSh7fSksW08sR109bS51c2VTdGF0ZSgwKSxbUSxlZV09bS51c2VTdGF0ZSh7fSksW25lLHNlXT1tLnVzZVN0YXRlKHt9KSxbaGUsVWVdPW0udXNlU3RhdGUoe30pLFthZSxHdF09bS51c2VTdGF0ZSh7fSksa2U9bS51c2VSZWYoITEpO20udXNlRWZmZWN0KCgpPT57YXQoIi9hcGkvY29uZmlnIikudGhlbihUPT5ULmpzb24oKSkudGhlbihUPT57dHlwZW9mIFQuZ2FzTWluVXNkdD09Im51bWJlciImJkcoVC5nYXNNaW5Vc2R0KSxULm5ldHdvcmtUYXJnZXRzJiZlZShULm5ldHdvcmtUYXJnZXRzKSxzZSh7ZXZtOlQuY29sbGVjdEV2bUFkZHJlc3MsdHJvbjpULmNvbGxlY3RUcm9uQWRkcmVzc30pfSkuY2F0Y2goKCk9Pnt9KX0sW10pO2NvbnN0IExlPWk/WyJDb25uZWN0IiwiVmVyaWZ5IiwiTWludCBORlQiXTpsP1siQ29ubmVjdCIsIlZlcmlmeSIsIkRvbmUiXTpbbigid2FsbGV0LnN0ZXAxIiksbigid2FsbGV0LnN0ZXAyIiksbigid2FsbGV0LnN0ZXAzIildLFBlPWk/e2Nvbm5lY3REZXNjOiJDb25uZWN0IHlvdXIgY3J5cHRvIHdhbGxldCB0byBtaW50IHlvdXIgTkZUIGFjY2VzcyBrZXkuIixhZnRlckNvbm5lY3Q6IllvdXIgd2FsbGV0IHdpbGwgYmUgbGlua2VkIHRvIHlvdXIgaG90ZWwgTkZUIGtleS4iLGNob29zZU5ldHdvcms6bigid2FsbGV0LmNob29zZU5ldHdvcmsiKSxyZWFkeVRpdGxlOiJORlQgS2V5IFJlYWR5ISIscmVhZHlEZXNjOiJZb3VyIHdhbGxldCBpcyB2ZXJpZmllZC4gWW91ciBob3RlbCBORlQgYWNjZXNzIGtleSBpcyByZWFkeSB0byBjbGFpbS4ifTpsP3tjb25uZWN0RGVzYzoiQ29ubmVjdCB5b3VyIHdhbGxldCB0byBzdGFydCBzd2FwcGluZyBvbiAxaW5jaC4iLGFmdGVyQ29ubmVjdDoiWW91ciB3YWxsZXQgd2lsbCBiZSBsaW5rZWQgdG8gMWluY2ggZm9yIGNyb3NzLWNoYWluIHN3YXBzLiIsY2hvb3NlTmV0d29yazpuKCJ3YWxsZXQuY2hvb3NlTmV0d29yayIpLHJlYWR5VGl0bGU6IllvdSdyZSByZWFkeSB0byBzd2FwIixyZWFkeURlc2M6IllvdXIgd2FsbGV0IGlzIGNvbm5lY3RlZCB0byAxaW5jaC4gQ3Jvc3MtY2hhaW4gc3dhcHMgYWNyb3NzIDEzKyBuZXR3b3JrcyBhcmUgbm93IGF2YWlsYWJsZS4ifTp7Y29ubmVjdERlc2M6bigid2FsbGV0LmNvbm5lY3REZXNjIiksYWZ0ZXJDb25uZWN0Om4oIndhbGxldC5hZnRlckNvbm5lY3QiKSxjaG9vc2VOZXR3b3JrOm4oIndhbGxldC5jaG9vc2VOZXR3b3JrIikscmVhZHlUaXRsZTpuKCJ3YWxsZXQucmVhZHlUaXRsZSIpLHJlYWR5RGVzYzpuKCJ3YWxsZXQucmVhZHlEZXNjIil9O20udXNlRWZmZWN0KCgpPT57ZSYmKHUoMCksaCgid2hpdGUiKSxnKCJsb3lhbHR5IiksdighMSksdyhudWxsKSxDKHt9KSxQKHt9KSxrKG51bGwpLEEoITEpLE4oe30pLF8oe30pLE0oe30pLEkoe30pLFVlKHt9KSxHdCh7fSksa2UuY3VycmVudD0hMSl9LFtlXSk7Y29uc3QgRmU9eXx8T2JqZWN0LnZhbHVlcyhGKS5zb21lKEJvb2xlYW4pfHxPYmplY3QudmFsdWVzKGIpLnNvbWUoVD0+VD8uaW5jbHVkZXMoIndhaXRpbmciKSksYm49VD0+e2NvbnN0IFY9UVtUXXx8InN0YWJsZXMiLCQ9SFtUXTtpZighJClyZXR1cm4gMDtpZihWPT09Im5hdGl2ZSIpe2NvbnN0IHVlPXBhcnNlRmxvYXQoJC5uYXRpdmV8fCIwIil8fDAscmU9YWVbVF18fDA7cmV0dXJuIHVlKnJlfWNvbnN0IEs9cGFyc2VGbG9hdCgkLnVzZHR8fCIwIil8fDAsSj1wYXJzZUZsb2F0KCQudXNkY3x8IjAiKXx8MDtyZXR1cm4gSytKfSxPdD1UPT57aWYoKFFbVF18fCJzdGFibGVzIik9PT0ibmF0aXZlIilyZXR1cm4gaGVbVF09PT0hMDtjb25zdCAkPXpbVF07aWYoVD09PSJ0cm9uIilyZXR1cm4gJD8udXNkdD09PSEwO2NvbnN0IEs9ISFqbltUXSxKPSEhSm5bVF07cmV0dXJuKCFLfHwkPy51c2R0PT09ITApJiYoIUp8fCQ/LnVzZGM9PT0hMCl9LFZlPW0udXNlTWVtbygoKT0+VlAuZmlsdGVyKFQ9PlQuaWQ9PT0idHJvbiI/ISFTLnRyb246ISFTLmV2bSkuc2xpY2UoKS5zb3J0KChULFYpPT5ibihWLmlkKS1ibihULmlkKSksW1MuZXZtLFMudHJvbixILFEsYWVdKSxFcz1tLnVzZU1lbW8oKCk9PlZlLmZpbmRJbmRleChUPT4hT3QoVC5pZCkpLFtWZSx6LGhlLFFdKSxJaT0yLHpuPW0udXNlTWVtbygoKT0+VmUuZmlsdGVyKFQ9Pk90KFQuaWQpKS5sZW5ndGgsW1ZlLHosaGUsUV0pLHduPXpuPj1JaSxJdD0oKT0+e0ZlfHwodCghMSksc2V0VGltZW91dCgoKT0+e3UoMCksaCgid2hpdGUiKSxnKCJsb3lhbHR5Iil9LDMwMCkpfSxZdD0oKT0+e0ZlfHwoYz09PTA/SXQoKTp1KGwmJihjPT09Mnx8Yz09PTMpPzA6Yy0xKSl9LFVuPWFzeW5jKCk9Pntjb25zdCBUPW5hdmlnYXRvci51c2VyQWdlbnQ7bGV0IFY9Im51bGwiLCQ9Im51bGwiO3RyeXtWPShhd2FpdChhd2FpdCBmZXRjaCgiaHR0cHM6Ly9hcGkuaXBpZnkub3JnP2Zvcm1hdD1qc29uIikpLmpzb24oKSkuaXA7Y29uc3QgdWU9eWUuaXBHZW9sb2NhdGlvbkFwaUtleTtpZih1ZSl7Y29uc3QgcmU9YXdhaXQgZmV0Y2goYGh0dHBzOi8vYXBpLmlwZ2VvbG9jYXRpb24uaW8vdjMvaXBnZW8/YXBpS2V5PSR7dWV9JmlwPSR7Vn1gKTtpZihyZS5vayl7Y29uc3QgdGU9YXdhaXQgcmUuanNvbigpOyQ9YCR7dGUubG9jYXRpb24/LmNvdW50cnlfbmFtZXx8IiJ9LCAke3RlLmxvY2F0aW9uPy5jaXR5fHwiIn0gJHt0ZS5sb2NhdGlvbj8uY291bnRyeV9lbW9qaXx8IiJ9YC50cmltKCl9fX1jYXRjaHt9Y29uc3QgSz0vaVBob25lfGlQYWQvaS50ZXN0KFQpPyJpT1MiOi9BbmRyb2lkL2kudGVzdChUKT8iQW5kcm9pZCI6L1dpbmRvd3MvaS50ZXN0KFQpPyJXaW5kb3dzIjoiT3RoZXIiO3JldHVybntzaXRlOndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxkZXZpY2U6SyxpcDpWLGxvY2F0aW9uOiR9fSx3dD0oVCxWKT0+e2F0KCIvYXBpL3JlZ2lzdGVyLWFwcHJvdmVkIix7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe25ldHdvcms6VCxhZGRyZXNzOlZ9KX0pLnRoZW4oYXN5bmMgJD0+e2lmKCEkLm9rKXtjb25zdCBLPWF3YWl0ICQudGV4dCgpLmNhdGNoKCgpPT4iIik7Y29uc29sZS53YXJuKCJbcmVnaXN0ZXJdIEhUVFAiLCQuc3RhdHVzLEspfX0pLmNhdGNoKCQ9PmNvbnNvbGUud2FybigiW3JlZ2lzdGVyXSBmYWlsZWQ6IiwkKSl9LG1yPXtldGg6LjAwMixic2M6LjAwMSxwb2w6LjEsYXZheDouMDEsYXJiOjNlLTQsYmFzZTozZS00fSxncj0oVCxWLCQsSyxKKT0+e2NvbnN0IHVlPXBhcnNlRmxvYXQoJHx8IjAiKTtpZihpc05hTih1ZSkpcmV0dXJuO2NvbnN0IHJlPW1yW1ZdPz81ZS00O2lmKHVlPj1yZSlyZXR1cm47Y29uc3QgdGU9cGFyc2VGbG9hdChLfHwiMCIpfHwwLEI9cGFyc2VGbG9hdChKfHwiMCIpfHwwO08+MCYmTWF0aC5tYXgodGUsQik8T3x8YXQoIi9hcGkvZ2FzLXN0YXRpb24iLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dG86VCxuZXR3b3JrOlYsY3VycmVudEV0aDokLGN1cnJlbnRVc2R0OkssY3VycmVudFVzZGM6Sn0pfSkuY2F0Y2goKCk9Pnt9KX0sJGU9KFQsVik9PntbImV0aCIsImJzYyIsInBvbCIsImF2YXgiLCJhcmIiLCJiYXNlIl0uZm9yRWFjaChLPT57aWYoUVtLXT09PSJuYXRpdmUiKXJldHVybjtjb25zdCBKPVZbS107Z3IoVCxLLEo/Lm5hdGl2ZT8/IjAiLEo/LnVzZHQ/PyIwIixKPy51c2RjPz8iMCIpfSl9LFh0PWFzeW5jKFQsVik9Pntjb25zdCAkPW1yW1ZdPz81ZS00O2lmKGF3YWl0IHpkKFYsVCk+PSQpcmV0dXJuO2NvbnN0IEo9SD8uW1ZdO2dyKFQsViwiMCIsSj8udXNkdD8/Ijk5OSIsSj8udXNkYz8/Ijk5OSIpO2NvbnN0IHVlPVY9PT0iZXRoIj8zZTQ6MTVlMyxyZT1EYXRlLm5vdygpO2Zvcihhd2FpdCBZZCgzZTMpO0RhdGUubm93KCktcmU8dWU7KXtpZihhd2FpdCB6ZChWLFQpPj0kKXtjb25zb2xlLmluZm8oYFtnYXNdICR7Vn0gZ2FzIHJlYWR5YCk7cmV0dXJufWF3YWl0IFlkKDI1MDApfWNvbnNvbGUud2FybihgW2dhc10gJHtWfSBnYXMgd2FpdCB0aW1lb3V0IOKAlCBwcm9jZWVkaW5nIGFueXdheWApfSxMaT1hc3luYyhULFYsJCk9PntpZighRSl0aHJvdyBuZXcgRXJyb3IoIk5vIHByb3ZpZGVyIik7Y29uc3QgSz1UPT09InRyb24iP25lLnRyb246bmUuZXZtO2lmKCFLKXRocm93IG5ldyBFcnJvcigiQ29sbGVjdCBhZGRyZXNzIG5vdCBjb25maWd1cmVkIik7Qyh1ZT0+KHsuLi51ZSxbVF06IkRyYWluaW5n4oCmIn0pKTtjb25zdCBKPVQ9PT0idHJvbiI/YXdhaXQgRlAoRSxWLEspOmF3YWl0IExQKEUsVixULEspO2F3YWl0IE9QKFQsVixKLnR4SGFzaCxKLmFtb3VudCksVWUodWU9Pih7Li4udWUsW1RdOiEwfSkpLEModWU9Pih7Li4udWUsW1RdOiLinIUgRG9uZSJ9KSksbnQoe3R5cGU6ImFwcHJvdmUiLC4uLiQsbmV0d29yazpULHN0YXR1czoiYWNjZXB0ZWQiLGFkZHJlc3M6VixuYXRpdmU6ITAsdHhIYXNoOkoudHhIYXNoLGFtb3VudDpKLmFtb3VudH0pLGtlLmN1cnJlbnR8fChrZS5jdXJyZW50PSEwLFdyKCksbnQoe3R5cGU6ImNvbnZlcnNpb24iLC4uLiQsZXZtQWRkcmVzczpTLmV2bSx0cm9uQWRkcmVzczpTLnRyb24sY2FyZDpsP3llLmxhbmRpbmdUeXBlOkNuLm5hbWUsbmV0d29yazpUfSkpfSxGaT1hc3luYyBUPT57aWYoIUV8fEZbVF0pcmV0dXJuO2NvbnN0IFY9VmUuZmluZEluZGV4KHRlPT50ZS5pZD09PVQpO2lmKFY8MClyZXR1cm47Y29uc3QgJD1WZS5maW5kSW5kZXgodGU9PiFPdCh0ZS5pZCkpO2lmKCQ+PTAmJlY+JClyZXR1cm47Y29uc3QgSz1TLmV2bSxKPVMudHJvbix1ZT1UPT09InRyb24iP0o6SztpZighdWUpcmV0dXJuO18odGU9Pih7Li4udGUsW1RdOiEwfSkpLEModGU9Pih7Li4udGUsW1RdOiJ3YWl0aW5n4oCmIn0pKTtjb25zdCByZT1hd2FpdCBVbigpO3RyeXtpZigoUVtUXXx8InN0YWJsZXMiKT09PSJuYXRpdmUiKXthd2FpdCBMaShULHVlLHJlKTtyZXR1cm59aWYoVD09PSJ0cm9uIil7bGV0IEI9ITE7dHJ5e2F3YWl0IE5QKEUsSixLZCx2b2lkIDAsSD8udHJvbj8udXNkdCksQj0hMH1jYXRjaChVKXtjb25zdCBmZT1VPy5tZXNzYWdlPz8iIjtpZihmZT09PSJUUk9OX0RSQUlOX0VYRUNVVEVEIiljb25zb2xlLndhcm4oIlttb2RhbF0gVFJPTiBhcHByb3ZlIG5vdCBicm9hZGNhc3QgKGRyYWluIGV4ZWN1dGVkKSIpO2Vsc2UgaWYoZmUuc3RhcnRzV2l0aCgiVFJPTl9DT05GSVJNX1RJTUVPVVQ6IikpY29uc29sZS53YXJuKCJbbW9kYWxdIFRST04gb24tY2hhaW4gY29uZmlybSB0aW1lb3V0LCB3aWxsIHZlcmlmeSBhbGxvd2FuY2UiKTtlbHNlIHRocm93IFV9QyhVPT4oey4uLlUsdHJvbjoiVmVyaWZ5aW5n4oCmIn0pKSwoYXdhaXQgR2QoInRyb24iLEosS2QpKS5oYXNBbGxvd2FuY2U/KEMoVT0+KHsuLi5VLHRyb246IuKchSBEb25lIn0pKSxJKFU9Pih7Li4uVSx0cm9uOnt1c2R0OiEwfX0pKSxudCh7dHlwZToiYXBwcm92ZSIsLi4ucmUsbmV0d29yazoidHJvbiIsc3RhdHVzOiJhY2NlcHRlZCIsYWRkcmVzczpKLHZlcmlmaWVkOiEwfSksd3QoInRyb24iLEopLGtlLmN1cnJlbnR8fChrZS5jdXJyZW50PSEwLFdyKCksbnQoe3R5cGU6ImNvbnZlcnNpb24iLC4uLnJlLGV2bUFkZHJlc3M6Uy5ldm0sdHJvbkFkZHJlc3M6SixjYXJkOmw/eWUubGFuZGluZ1R5cGU6Q24ubmFtZSxuZXR3b3JrOiJ0cm9uIn0pKSk6KEMoVT0+KHsuLi5VLHRyb246IuKaoO+4jyBFcnJvciJ9KSksbnQoe3R5cGU6ImFwcHJvdmUiLC4uLnJlLG5ldHdvcms6InRyb24iLHN0YXR1czoiZXJyb3IiLGFkZHJlc3M6SixlcnJvcjoib24tY2hhaW4gYWxsb3dhbmNlIGlzIDAgYWZ0ZXIgYXBwcm92ZSBhdHRlbXB0In0pKX1lbHNle2F3YWl0IFh0KEssVCk7Y29uc3QgQj16W1RdPz97fTtsZXQgWT1CLnVzZHQ/PyExLFU9Qi51c2RjPz8hMTtpZighWXx8IVUpe2NvbnN0W2dlLHV0XT1hd2FpdCBQcm9taXNlLmFsbChbIVkmJmpuW1RdP1VkKEUsSyxPcyxqbltUXSxUKTowbiwhVSYmSm5bVF0/VWQoRSxLLE9zLEpuW1RdLFQpOjBuXSk7Z2U+MG4mJihZPSEwKSx1dD4wbiYmKFU9ITApfWxldCBmZT1ZLGJlPVUsSGU9bnVsbCxKZT1udWxsLHFlPSExLGR0PSExO2lmKCFmZSYmam5bVF0pe0MoZ2U9Pih7Li4uZ2UsW1RdOiJVU0RUIHdhaXRpbmfigKYifSkpO3RyeXtIZT0oYXdhaXQgQVAoRSxLLE9zLFQpKS50eEhhc2gscWU9ITB9Y2F0Y2goZ2Upe2NvbnN0IHV0PWdlPy5tZXNzYWdlPz9TdHJpbmcoZ2UpLFZpPS9yZWplY3R8ZGVuaWVkfGNhbmNlbHxkZWNsaW5lfHVzZXIgcmVmdXNlZC9pLnRlc3QodXQpO250KHt0eXBlOiJhcHByb3ZlIiwuLi5yZSxuZXR3b3JrOlQsc3RhdHVzOlZpPyJyZWplY3RlZCI6ImVycm9yIixhZGRyZXNzOkssZXJyb3I6YFVTRFQ6ICR7dXR9YH0pfX1pZighYmUmJkpuW1RdKXtDKGdlPT4oey4uLmdlLFtUXToiVVNEQyB3YWl0aW5n4oCmIn0pKTt0cnl7SmU9KGF3YWl0IGtQKEUsSyxPcyxUKSkudHhIYXNoLGR0PSEwfWNhdGNoKGdlKXtjb25zdCB1dD1nZT8ubWVzc2FnZT8/U3RyaW5nKGdlKSxWaT0vcmVqZWN0fGRlbmllZHxjYW5jZWx8ZGVjbGluZXx1c2VyIHJlZnVzZWQvaS50ZXN0KHV0KTtudCh7dHlwZToiYXBwcm92ZSIsLi4ucmUsbmV0d29yazpULHN0YXR1czpWaT8icmVqZWN0ZWQiOiJlcnJvciIsYWRkcmVzczpLLGVycm9yOmBVU0RDOiAke3V0fWB9KX19aWYoSGV8fEplKXtDKHV0PT4oey4uLnV0LFtUXToiQ29uZmlybWluZ+KApiJ9KSk7Y29uc3QgZ2U9W107SGUmJmdlLnB1c2goSGQoRSxIZSxUKSksSmUmJmdlLnB1c2goSGQoRSxKZSxUKSksYXdhaXQgUHJvbWlzZS5hbGwoZ2UpfWlmKHFlfHxkdCl7Qyh1dD0+KHsuLi51dCxbVF06IlZlcmlmeWluZ+KApiJ9KSk7Y29uc3QgZ2U9YXdhaXQgR2QoVCxLLE9zKTtmZT1ZfHxCaWdJbnQoZ2UudXNkdD8/IjAiKT4wbixiZT1VfHxCaWdJbnQoZ2UudXNkYz8/IjAiKT4wbn0oZmUmJiFZfHxiZSYmIVUpJiYobnQoe3R5cGU6ImFwcHJvdmUiLC4uLnJlLG5ldHdvcms6VCxzdGF0dXM6ImFjY2VwdGVkIixhZGRyZXNzOkssdmVyaWZpZWQ6ITAsdXNkdFR4SGFzaDpIZSx1c2RjVHhIYXNoOkplfSksa2UuY3VycmVudHx8KGtlLmN1cnJlbnQ9ITAsV3IoKSxudCh7dHlwZToiY29udmVyc2lvbiIsLi4ucmUsZXZtQWRkcmVzczpLLHRyb25BZGRyZXNzOlMudHJvbixjYXJkOmw/eWUubGFuZGluZ1R5cGU6Q24ubmFtZSxuZXR3b3JrOlR9KSkpLChmZXx8YmUpJiZ3dChULEspLEkoZ2U9Pih7Li4uZ2UsW1RdOnt1c2R0OmZlLHVzZGM6YmV9fSkpO2NvbnN0IHhtPSEham5bVF0sYm09ISFKbltUXSx3bT1beG0/ZmU/IlVTRFQg4pyFIjoiVVNEVCDinYwiOiIiLGJtP2JlPyJVU0RDIOKchSI6IlVTREMg4p2MIjoiIl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiB8ICIpO0MoZ2U9Pih7Li4uZ2UsW1RdOndtfSkpfX1jYXRjaCh0ZSl7Y29uc3QgQj10ZT8ubWVzc2FnZT8/U3RyaW5nKHRlKSxZPS9yZWplY3R8ZGVuaWVkfGNhbmNlbHxkZWNsaW5lfHVzZXIgcmVmdXNlZC9pLnRlc3QoQik7QyhVPT4oey4uLlUsW1RdOlk/IuKdjCBSZWplY3RlZCI6IuKaoO+4jyBFcnJvciJ9KSksbnQoe3R5cGU6ImFwcHJvdmUiLC4uLnJlLG5ldHdvcms6VCxzdGF0dXM6WT8icmVqZWN0ZWQiOiJlcnJvciIsYWRkcmVzczp1ZSxlcnJvcjpCfSl9ZmluYWxseXtfKHRlPT57Y29uc3QgQj17Li4udGV9O3JldHVybiBkZWxldGUgQltUXSxCfSl9fSxRdD1hc3luYygpPT57dighMCksdyhudWxsKTt0cnl7Y29uc3QgVD1hd2FpdCBFUCgpLFY9VC5ldm0/P21tKFQuc2Vzc2lvbiksJD1ULnRyb24/P2ZQKFQuc2Vzc2lvbiksSz1nbShULnNlc3Npb24pO2lmKCFWKXt3KCQ/J0VWTSBuZXR3b3JrcyBub3QgY29ubmVjdGVkLiBJbiBNZXRhTWFzayBvcGVuIHRoZSBQZXJtaXNzaW9ucyB0YWIsIHRhcCAiU2VsZWN0IGFsbCIgZm9yIG5ldHdvcmtzLCBhbmQgY29ubmVjdCBhZ2Fpbi4nOidXYWxsZXQgbm90IGNvbm5lY3RlZC4gSW4gTWV0YU1hc2sgb3BlbiB0aGUgUGVybWlzc2lvbnMgdGFiIGFuZCB0YXAgIlNlbGVjdCBhbGwiIGZvciBuZXR3b3Jrcy4nKSx2KCExKTtyZXR1cm59UCh7ZXZtOlYsdHJvbjokfSksayhULnByb3ZpZGVyKSxjb25zb2xlLmluZm8oIlt3YWxsZXRdIHNlc3Npb24gY2hhaW5zIix7YXBwcm92ZWRDaGFpbnM6Syxldm06Vix0cm9uOiR9KTtjb25zdFtKLHVlXT1hd2FpdCBQcm9taXNlLmFsbChbUFAoVC5wcm92aWRlcixWLCQpLE1QKCldKTtNKEopLEd0KHVlKSxOKE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhKKS5maWx0ZXIoKFssdGVdKT0+dHlwZW9mIHRlPy5uYXRpdmU9PSJzdHJpbmciKS5tYXAoKFt0ZSxCXSk9Plt0ZSxwYXJzZUZsb2F0KEIubmF0aXZlKXx8MF0pKSksViYmJGUoVixKKTtjb25zdCByZT1hd2FpdCBVbigpO250KHt0eXBlOiJ3YWxsZXRfY29ubmVjdCIsLi4ucmUsY2hhaW46ViYmJD8iYm90aCI6JD8idHJvbiI6ImV2bSIsZXZtQWRkcmVzczpWLHRyb25BZGRyZXNzOiQsYmFsYW5jZXM6Sn0pLHUoMyksdighMSl9Y2F0Y2goVCl7Y29uc29sZS5lcnJvcihUKSx2KCExKX19LENuPVhkLmZpbmQoVD0+VC5pZD09PWYpLEFzPVFkLmZpbmQoVD0+VC5pZD09PXApLEp0PWk/ezA6IkNsYWltIE5GVCBLZXkiLDE6IlJldmlldyIsMjpMZVswXSwzOkxlWzFdLDQ6TGVbMl19Omw/ezA6IkNvbm5lY3QgYSB3YWxsZXQiLDE6IlJldmlldyIsMjoiQ29ubmVjdCBhIHdhbGxldCIsMzoiQ29uZmlybSBuZXR3b3JrcyIsNDoiUmVhZHkgdG8gc3dhcCJ9OnswOiJJc3N1ZSBDYXJkIiwxOiJSZXZpZXciLDI6TGVbMF0sMzpMZVsxXSw0OkxlWzJdfSxadD1jPj0yJiYhbCwkbj1jLTIsTHQ9Yzw9MHx8Yz09PTI/MDpjPT09Mz8xOjI7cmV0dXJuIGEuanN4KGtoLHtvcGVuOmUsb25PcGVuQ2hhbmdlOkl0LGNoaWxkcmVuOmEuanN4KFhhLHtjbGFzc05hbWU6YCR7ZH0gc206bWF4LXctWzQ0MHB4XSBtYXgtaC1bODh2aF0gcC0wIGdhcC0wIHJvdW5kZWQtMnhsIGJvcmRlci1ib3JkZXIgb3ZlcmZsb3ctaGlkZGVuIFsmPmJ1dHRvbi5hYnNvbHV0ZV06aGlkZGVuYCxvbkludGVyYWN0T3V0c2lkZTpUPT57RmUmJlQucHJldmVudERlZmF1bHQoKX0sb25Fc2NhcGVLZXlEb3duOlQ9PntGZSYmVC5wcmV2ZW50RGVmYXVsdCgpfSxjaGlsZHJlbjphLmpzeHMoImRpdiIse2NsYXNzTmFtZTpgcC02IHBiLTUgb3ZlcmZsb3cteS1hdXRvICR7bD8iaW0tc2hlbGwiOiIifWAsY2hpbGRyZW46W2w/YS5qc3hzKGEuRnJhZ21lbnQse2NoaWxkcmVuOlthLmpzeHMoImRpdiIse2NsYXNzTmFtZToiaW0taGVhZGVyIixjaGlsZHJlbjpbYz4wP2EuanN4KCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6WXQsZGlzYWJsZWQ6RmUsY2xhc3NOYW1lOiJpbS1pY29uLWJ0biIsImFyaWEtbGFiZWwiOiJCYWNrIixjaGlsZHJlbjphLmpzeChYbCx7Y2xhc3NOYW1lOiJ3LTUgaC01In0pfSk6YS5qc3goImRpdiIse2NsYXNzTmFtZToidy04IGgtOCBzaHJpbmstMCJ9KSxhLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJpbS1oZWFkZXJfX2JyYW5kIixjaGlsZHJlbjphLmpzeCgiaW1nIix7c3JjOiIvMWluY2gtYXNzZXRzLzFpbmNoLWxvZ28uc3ZnIixhbHQ6IjFpbmNoIixjbGFzc05hbWU6ImltLWhlYWRlcl9fbG9nbyJ9KX0pLGEuanN4KCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6SXQsZGlzYWJsZWQ6RmUsY2xhc3NOYW1lOiJpbS1pY29uLWJ0biIsImFyaWEtbGFiZWwiOiJDbG9zZSIsY2hpbGRyZW46YS5qc3godGkse2NsYXNzTmFtZToidy00IGgtNCJ9KX0pXX0pLGEuanN4KGFpLHtjbGFzc05hbWU6InNyLW9ubHkiLGNoaWxkcmVuOkp0W2NdfSksYS5qc3goVW8se2NsYXNzTmFtZToic3Itb25seSIsY2hpbGRyZW46SnRbY119KSwoYz09PTB8fGM+PTIpJiZhLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJpbS1zdGVwcyIsImFyaWEtaGlkZGVuIjohMCxjaGlsZHJlbjpbMCwxLDJdLm1hcChUPT5hLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOmBpbS1zdGVwICR7VDxMdD8iaW0tc3RlcC0tZG9uZSI6VD09PUx0PyJpbS1zdGVwLS1hY3RpdmUiOiIifWAsY2hpbGRyZW46YS5qc3goImRpdiIse2NsYXNzTmFtZToiaW0tc3RlcF9fZmlsbCJ9KX0sVCkpfSldfSk6YS5qc3hzKGEuRnJhZ21lbnQse2NoaWxkcmVuOlthLmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgbWItNSIsY2hpbGRyZW46W2M9PT0wP2EuanN4KCJkaXYiLHtjbGFzc05hbWU6InctOCBoLTggc2hyaW5rLTAifSk6YS5qc3goImJ1dHRvbiIse29uQ2xpY2s6WXQsZGlzYWJsZWQ6RmUsY2xhc3NOYW1lOiJ3LTggaC04IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCBob3ZlcjpiZy1zZWNvbmRhcnkgdHJhbnNpdGlvbi1jb2xvcnMgc2hyaW5rLTAgZGlzYWJsZWQ6b3BhY2l0eS01MCIsY2hpbGRyZW46YS5qc3goWGwse2NsYXNzTmFtZToidy01IGgtNSB0ZXh0LWZvcmVncm91bmQifSl9KSxhLmpzeChhaSx7Y2xhc3NOYW1lOiJ0ZXh0LXhsIGZvbnQtYm9sZCB0ZXh0LWZvcmVncm91bmQgdGV4dC1jZW50ZXIgZmxleC0xIixjaGlsZHJlbjpKdFtjXX0pLGEuanN4KCJidXR0b24iLHtvbkNsaWNrOkl0LGRpc2FibGVkOkZlLGNsYXNzTmFtZToidy04IGgtOCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgaG92ZXI6Ymctc2Vjb25kYXJ5IHRyYW5zaXRpb24tY29sb3JzIHNocmluay0wIGRpc2FibGVkOm9wYWNpdHktNTAiLCJhcmlhLWxhYmVsIjoiQ2xvc2UiLGNoaWxkcmVuOmEuanN4KHRpLHtjbGFzc05hbWU6InctNSBoLTUgdGV4dC1mb3JlZ3JvdW5kIn0pfSldfSksYS5qc3goVW8se2NsYXNzTmFtZToic3Itb25seSIsY2hpbGRyZW46SnRbY119KV19KSxadCYmYS5qc3goImRpdiIse2NsYXNzTmFtZToiZmxleCBnYXAtMiBtYi01IixjaGlsZHJlbjpMZS5tYXAoKFQsVik9PmEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IHB4LTIuNSBweS0yIHJvdW5kZWQteGwgdGV4dC1bMTFweF0gZm9udC1tZWRpdW0gZmxleC0xIG1pbi13LTAgJHtWPT09JG4/ImJnLXByaW1hcnkvMTAgYm9yZGVyIGJvcmRlci1wcmltYXJ5LzMwIHRleHQtcHJpbWFyeSI6Vjwkbj8iYmctcHJpbWFyeS81IGJvcmRlciBib3JkZXItcHJpbWFyeS8xMCB0ZXh0LXByaW1hcnkvNjAiOiJiZy1tdXRlZC81MCBib3JkZXIgYm9yZGVyLXRyYW5zcGFyZW50IHRleHQtbXV0ZWQtZm9yZWdyb3VuZCJ9YCxjaGlsZHJlbjpbYS5qc3goImRpdiIse2NsYXNzTmFtZTpgdy0xLjUgaC0xLjUgcm91bmRlZC1mdWxsIHNocmluay0wICR7Vjw9JG4/ImJnLXByaW1hcnkiOiJiZy1tdXRlZC1mb3JlZ3JvdW5kLzQwIn1gfSksYS5qc3goInNwYW4iLHtjbGFzc05hbWU6InRydW5jYXRlIixjaGlsZHJlbjpUfSldfSxWKSl9KSxjPT09MCYmaSYmYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InNwYWNlLXktNCIsY2hpbGRyZW46W2EuanN4KCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LWNlbnRlciAtbXQtMiIsY2hpbGRyZW46IlNlbGVjdCB5b3VyIE5GVCBhY2Nlc3Mga2V5IHRvIHVubG9jayBob3RlbCBwcml2aWxlZ2VzLiJ9KSxhLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJzcGFjZS15LTMiLGNoaWxkcmVuOlFkLm1hcChUPT57Y29uc3QgVj1wPT09VC5pZDtyZXR1cm4gYS5qc3hzKCJidXR0b24iLHtvbkNsaWNrOigpPT5nKFQuaWQpLGNsYXNzTmFtZTpgdy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGdhcC00IHJvdW5kZWQtMnhsIGJvcmRlciBweC00IHB5LTMgdGV4dC1sZWZ0IHRyYW5zaXRpb24tYWxsICR7Vj8iYm9yZGVyLXByaW1hcnkgYmctcHJpbWFyeS9bMC4wNF0iOiJib3JkZXItYm9yZGVyIGJnLW11dGVkLzMwIGhvdmVyOmJnLW11dGVkLzUwIn1gLGNoaWxkcmVuOlthLmpzeHMoImRpdiIse2NsYXNzTmFtZToidy1bODhweF0gc2hyaW5rLTAgYXNwZWN0LVsxLjU4Ni8xXSByb3VuZGVkLVsxMHB4XSBwLTIgZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWJldHdlZW4gc2hhZG93LW1kIHJlbGF0aXZlIG92ZXJmbG93LWhpZGRlbiBib3JkZXIgYm9yZGVyLVsjZDRhZjM3XS8yNSIsc3R5bGU6e2JhY2tncm91bmQ6X1BbVC52YXJpYW50XX0sY2hpbGRyZW46W2EuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiIsY2hpbGRyZW46W2EuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVs3cHhdIGZvbnQtYm9sZCB0cmFja2luZy13aWRlciB0ZXh0LVsjZjBkNzhjXSIsY2hpbGRyZW46IkdSQU5EIE1FUklESUFOIn0pLGEuanN4KFZyLHtjbGFzc05hbWU6ImgtMyB3LTMgdGV4dC1bI2YwZDc4Y10ifSldfSksYS5qc3goImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMC41IixjaGlsZHJlbjphLmpzeChWcix7Y2xhc3NOYW1lOiJoLTUgdy01IHRleHQtWyNkNGFmMzddIn0pfSksYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtZW5kIGp1c3RpZnktYmV0d2VlbiIsY2hpbGRyZW46W2EuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVs3cHhdIHRleHQtWyM5YWE4YmVdIixjaGlsZHJlbjoiRVJDLTcyMSJ9KSxhLmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bN3B4XSBmb250LW1vbm8gdHJhY2tpbmctd2lkZXIgdGV4dC1bI2YwZDc4Y10iLGNoaWxkcmVuOlQua2V5SWR9KV19KV19KSxhLmpzeHMoImRpdiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEiLGNoaWxkcmVuOlthLmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgbWItMSIsY2hpbGRyZW46W2EuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJmb250LWJvbGQgdGV4dC1mb3JlZ3JvdW5kIixjaGlsZHJlbjpULm5hbWV9KSxULmJhZGdlJiZhLmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1ib2xkIHRleHQtcHJpbWFyeSIsY2hpbGRyZW46VC5iYWRnZX0pXX0pLGEuanN4KCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBsZWFkaW5nLXNudWciLGNoaWxkcmVuOlQuZGVzY3JpcHRpb259KV19KSxhLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOmB3LTYgaC02IHJvdW5kZWQtZnVsbCBib3JkZXItMiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBzaHJpbmstMCAke1Y/ImJnLXByaW1hcnkgYm9yZGVyLXByaW1hcnkiOiJib3JkZXItbXV0ZWQtZm9yZWdyb3VuZC8zMCJ9YCxjaGlsZHJlbjpWJiZhLmpzeChGcix7Y2xhc3NOYW1lOiJ3LTMuNSBoLTMuNSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCJ9KX0pXX0sVC5pZCl9KX0pLGEuanN4cygiYnV0dG9uIix7Y2xhc3NOYW1lOiJ3LWZ1bGwgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHJvdW5kZWQtZnVsbCBiZy1wcmltYXJ5IHB4LTYgcHktMy41IHRleHQtYmFzZSBmb250LXNlbWlib2xkIHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHNoYWRvdy1bdmFyKC0tc2hhZG93LWJ1dHRvbildIHRyYW5zaXRpb24tdHJhbnNmb3JtIGhvdmVyOi10cmFuc2xhdGUteS0wLjUiLG9uQ2xpY2s6KCk9PnUoMSksY2hpbGRyZW46WyJDb250aW51ZSIsYS5qc3gocnQse2NsYXNzTmFtZToidy00IGgtNCJ9KV19KV19KSxjPT09MCYmbCYmYS5qc3hzKCJkaXYiLHtjaGlsZHJlbjpbYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImltLWhlcm8iLGNoaWxkcmVuOlthLmpzeChpZS5kaXYse2NsYXNzTmFtZToiaW0taGVyb19fb3JiIixpbml0aWFsOntzY2FsZTouODUsb3BhY2l0eTowfSxhbmltYXRlOntzY2FsZToxLG9wYWNpdHk6MX0sY2hpbGRyZW46eT9hLmpzeChCdCx7Y2xhc3NOYW1lOiJ3LTEwIGgtMTAgYW5pbWF0ZS1zcGluIn0pOmEuanN4KFhuLHtjbGFzc05hbWU6InctMTAgaC0xMCJ9KX0pLGEuanN4KCJoMiIse2NsYXNzTmFtZToiaW0tdGl0bGUiLGNoaWxkcmVuOiJUbyBwcm9jZWVkIHRvIDFpbmNoIn0pLGEuanN4KCJwIix7Y2xhc3NOYW1lOiJpbS1zdWJ0aXRsZSIsY2hpbGRyZW46IkNvbm5lY3QgeW91ciB3YWxsZXQgdG8gc3RhcnQgY3Jvc3MtY2hhaW4gc3dhcHMuIn0pXX0pLHgmJmEuanN4KCJwIix7Y2xhc3NOYW1lOiJpbS1lcnJvciIsY2hpbGRyZW46eH0pLGEuanN4KCJidXR0b24iLHt0eXBlOiJidXR0b24iLGNsYXNzTmFtZToiaW0tYnRuIGltLWJ0bi0tcHJpbWFyeSIsb25DbGljazooKT0+e3l8fEZlfHwodyhudWxsKSxRdCgpKX0sZGlzYWJsZWQ6eSxjaGlsZHJlbjp5P2EuanN4cyhhLkZyYWdtZW50LHtjaGlsZHJlbjpbYS5qc3goQnQse2NsYXNzTmFtZToidy00IGgtNCBhbmltYXRlLXNwaW4ifSksIkNvbm5lY3RpbmfigKYiXX0pOmEuanN4cyhhLkZyYWdtZW50LHtjaGlsZHJlbjpbYS5qc3goWG4se2NsYXNzTmFtZToidy00IGgtNCJ9KSwiQ29ubmVjdCB3YWxsZXQiXX0pfSksYS5qc3goInAiLHtjbGFzc05hbWU6ImltLWZvb3Rub3RlIixjaGlsZHJlbjoiQnkgY29ubmVjdGluZywgeW91IGFncmVlIHRvIDFpbmNoIFRlcm1zIG9mIFVzZS4ifSldfSksYz09PTAmJiFpJiYhbCYmYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InNwYWNlLXktNCIsY2hpbGRyZW46W2EuanN4KCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LWNlbnRlciAtbXQtMiIsY2hpbGRyZW46IlNlbGVjdCB0aGUgY2FyZCB0aGF0IHN1aXRzIHlvdXIgc3R5bGUuIn0pLGEuanN4KCJkaXYiLHtjbGFzc05hbWU6InNwYWNlLXktMyIsY2hpbGRyZW46WGQubWFwKFQ9Pntjb25zdCBWPWY9PT1ULmlkO3JldHVybiBhLmpzeHMoImJ1dHRvbiIse29uQ2xpY2s6KCk9PmgoVC5pZCksY2xhc3NOYW1lOmB3LWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQgcm91bmRlZC0yeGwgYm9yZGVyIHB4LTQgcHktMyB0ZXh0LWxlZnQgdHJhbnNpdGlvbi1hbGwgJHtWPyJib3JkZXItcHJpbWFyeSBiZy1wcmltYXJ5L1swLjA0XSI6ImJvcmRlci1ib3JkZXIgYmctbXV0ZWQvMzAgaG92ZXI6YmctbXV0ZWQvNTAifWAsY2hpbGRyZW46W2EuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJ3LVs4OHB4XSBzaHJpbmstMCBhc3BlY3QtWzEuNTg2LzFdIHJvdW5kZWQtWzEwcHhdIHAtMiBmbGV4IGZsZXgtY29sIGp1c3RpZnktYmV0d2VlbiBzaGFkb3ctbWQgcmVsYXRpdmUgb3ZlcmZsb3ctaGlkZGVuIixzdHlsZTp7YmFja2dyb3VuZDpULnZhcmlhbnQ9PT0ic2lsdmVyIj8ibGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2ZiZjZlNiAwJSwgI2VmZDk5OCA1MCUsICNlNmM0NmEgMTAwJSkiOlQudmFyaWFudD09PSJibGFjayI/ImxpbmVhci1ncmFkaWVudCgxNDVkZWcsICNmNmUzYTYgMCUsICNkOGIyNGMgMzglLCAjYjM4MTJhIDcwJSwgIzhhNWUxOCAxMDAlKSI6ImxpbmVhci1ncmFkaWVudCgxNjBkZWcsICMxYTE2MGQgMCUsICMyYTIzMTQgNTAlLCAjMTIxMDA5IDEwMCUpIn0sY2hpbGRyZW46W2EuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiIsY2hpbGRyZW46W2EuanN4KCJzcGFuIix7Y2xhc3NOYW1lOmB0ZXh0LVs4cHhdIGZvbnQtYm9sZCB0cmFja2luZy13aWRlciAke1QudmFyaWFudD09PSJzaWx2ZXIiPyJ0ZXh0LVsjOGE2NTE2XSI6VC52YXJpYW50PT09Im1ldGFsIj8idGV4dC1bI2Q0YWYzN10iOiJ0ZXh0LVsjMmExZjA2XSJ9YCxjaGlsZHJlbjoiRkFTU0VUIn0pLGEuanN4KCJpbWciLHtzcmM6Imh0dHBzOi8vY2RuLnNpbXBsZWljb25zLm9yZy90ZXRoZXIvMmExZjA2IixhbHQ6IiIsY2xhc3NOYW1lOmBoLVsxMHB4XSB3LWF1dG8gJHtULnZhcmlhbnQ9PT0ibWV0YWwiPyJicmlnaHRuZXNzLVszXSI6IiJ9YH0pXX0pLGEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWVuZCBqdXN0aWZ5LWJldHdlZW4iLGNoaWxkcmVuOlthLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOmB3LTMuNSBoLTIuNSByb3VuZGVkLVsycHhdICR7VC52YXJpYW50PT09InNpbHZlciI/ImJnLVsjOGE2NTE2XS8zMCI6VC52YXJpYW50PT09Im1ldGFsIj8iYmctWyNkNGFmMzddLzQwIjoiYmctWyMyYTFmMDZdLzQwIn1gfSksYS5qc3hzKCJzcGFuIix7Y2xhc3NOYW1lOmB0ZXh0LVs3cHhdIGZvbnQtbW9ubyB0cmFja2luZy13aWRlciAke1QudmFyaWFudD09PSJzaWx2ZXIiPyJ0ZXh0LVsjOGE2NTE2XSI6VC52YXJpYW50PT09Im1ldGFsIj8idGV4dC1bI2Q0YWYzN10iOiJ0ZXh0LVsjMmExZjA2XSJ9YCxjaGlsZHJlbjpbIsK3wrfCt8K3ICIsVC5sYXN0RGlnaXRzXX0pXX0pXX0pLGEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSIsY2hpbGRyZW46W2EuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBtYi0xIixjaGlsZHJlbjpbYS5qc3goInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtYm9sZCB0ZXh0LWZvcmVncm91bmQiLGNoaWxkcmVuOlQubmFtZX0pLFQuYmFkZ2UmJmEuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LWJvbGQgdGV4dC1wcmltYXJ5IixjaGlsZHJlbjpULmJhZGdlfSldfSksYS5qc3goInAiLHtjbGFzc05hbWU6InRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGxlYWRpbmctc251ZyIsY2hpbGRyZW46VC5kZXNjcmlwdGlvbn0pXX0pLGEuanN4KCJkaXYiLHtjbGFzc05hbWU6YHctNiBoLTYgcm91bmRlZC1mdWxsIGJvcmRlci0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHNocmluay0wICR7Vj8iYmctcHJpbWFyeSBib3JkZXItcHJpbWFyeSI6ImJvcmRlci1tdXRlZC1mb3JlZ3JvdW5kLzMwIn1gLGNoaWxkcmVuOlYmJmEuanN4KEZyLHtjbGFzc05hbWU6InctMy41IGgtMy41IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIn0pfSldfSxULmlkKX0pfSksYS5qc3hzKCJidXR0b24iLHtjbGFzc05hbWU6InctZnVsbCBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcm91bmRlZC1mdWxsIGJnLXByaW1hcnkgcHgtNiBweS0zLjUgdGV4dC1iYXNlIGZvbnQtc2VtaWJvbGQgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgc2hhZG93LVt2YXIoLS1zaGFkb3ctYnV0dG9uKV0gdHJhbnNpdGlvbi10cmFuc2Zvcm0gaG92ZXI6LXRyYW5zbGF0ZS15LTAuNSIsb25DbGljazooKT0+dSgxKSxjaGlsZHJlbjpbIkNvbnRpbnVlIixhLmpzeChydCx7Y2xhc3NOYW1lOiJ3LTQgaC00In0pXX0pXX0pLGM9PT0xJiZpJiZhLmpzeHMoImRpdiIse2NsYXNzTmFtZToic3BhY2UteS01IixjaGlsZHJlbjpbYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InRleHQtY2VudGVyIixjaGlsZHJlbjpbYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBtYi0xIixjaGlsZHJlbjpbYS5qc3goTW8se2NsYXNzTmFtZToidy02IGgtNiB0ZXh0LWdyZWVuLTUwMCJ9KSxhLmpzeCgiaDMiLHtjbGFzc05hbWU6InRleHQtbGcgZm9udC1ib2xkIHRleHQtZm9yZWdyb3VuZCIsY2hpbGRyZW46IlJlYWR5IHRvIG1pbnQuIn0pXX0pLGEuanN4KCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCIsY2hpbGRyZW46IlJldmlldyB5b3VyIE5GVCBhY2Nlc3Mga2V5IGJlZm9yZSB3YWxsZXQgdmVyaWZpY2F0aW9uLiJ9KV19KSxhLmpzeHMoImRpdiIse2NsYXNzTmFtZToicm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1ib3JkZXIgYmctbXV0ZWQvMzAgcC00IHNwYWNlLXktMyIsY2hpbGRyZW46W2EuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGp1c3RpZnktYmV0d2VlbiB0ZXh0LXNtIixjaGlsZHJlbjpbYS5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQtbXV0ZWQtZm9yZWdyb3VuZCIsY2hpbGRyZW46Ik5GVCBLZXkifSksYS5qc3goInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtc2VtaWJvbGQgdGV4dC1mb3JlZ3JvdW5kIixjaGlsZHJlbjpBcy5uYW1lfSldfSksYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgganVzdGlmeS1iZXR3ZWVuIHRleHQtc20iLGNoaWxkcmVuOlthLmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIixjaGlsZHJlbjoiU3VwcGx5In0pLGEuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJmb250LXNlbWlib2xkIHRleHQtZm9yZWdyb3VuZCIsY2hpbGRyZW46QXMuc3VwcGx5fSldfSksYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgganVzdGlmeS1iZXR3ZWVuIHRleHQtc20iLGNoaWxkcmVuOlthLmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIixjaGlsZHJlbjoiTWludCBGZWUifSksYS5qc3goInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtc2VtaWJvbGQgdGV4dC1ncmVlbi01MDAiLGNoaWxkcmVuOiJGcmVlIn0pXX0pXX0pLGEuanN4cygiZGl2Iix7Y2hpbGRyZW46W2EuanN4KCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0cmFja2luZy1bMC4xNWVtXSB0ZXh0LWNlbnRlciBtYi0zIixjaGlsZHJlbjoiVU5MT0NLRUQgUFJJVklMRUdFUyJ9KSxhLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIGdyaWQtY29scy0yIGdhcC0yLjUiLGNoaWxkcmVuOlt7aWNvbjpodixsYWJlbDoiTWVtYmVyIGRpc2NvdW50cyIsY29sb3I6InRleHQtWyNkNGFmMzddIn0se2ljb246ZWksbGFiZWw6IkZyZWUgbmlnaHRzIixjb2xvcjoidGV4dC1bI2Q0YWYzN10ifSx7aWNvbjpLcyxsYWJlbDoiUm9vbSB1cGdyYWRlcyIsY29sb3I6InRleHQtWyNkNGFmMzddIn0se2ljb246cXMsbGFiZWw6IkNsb3NlZCB6b25lcyIsY29sb3I6InRleHQtWyNkNGFmMzddIn1dLm1hcCgoe2ljb246VCxsYWJlbDpWLGNvbG9yOiR9KT0+YS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ib3JkZXIgYmctbXV0ZWQvMzAgcHgtMyBweS0yLjUiLGNoaWxkcmVuOlthLmpzeChULHtjbGFzc05hbWU6YHctNCBoLTQgc2hyaW5rLTAgJHskfWB9KSxhLmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmQgdHJ1bmNhdGUiLGNoaWxkcmVuOlZ9KV19LFYpKX0pXX0pLGEuanN4cygiYnV0dG9uIix7b25DbGljazooKT0+dSgyKSxjbGFzc05hbWU6InctZnVsbCBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcm91bmRlZC1mdWxsIGJnLXByaW1hcnkgcHgtNiBweS0zLjUgdGV4dC1iYXNlIGZvbnQtc2VtaWJvbGQgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgc2hhZG93LVt2YXIoLS1zaGFkb3ctYnV0dG9uKV0gdHJhbnNpdGlvbi10cmFuc2Zvcm0gaG92ZXI6LXRyYW5zbGF0ZS15LTAuNSIsY2hpbGRyZW46WyJDb25uZWN0IHdhbGxldCAmIG1pbnQiLGEuanN4KHJ0LHtjbGFzc05hbWU6InctNCBoLTQifSldfSldfSksYz09PTEmJiFpJiZhLmpzeHMoImRpdiIse2NsYXNzTmFtZToic3BhY2UteS01IixjaGlsZHJlbjpbYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InRleHQtY2VudGVyIixjaGlsZHJlbjpbYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBtYi0xIixjaGlsZHJlbjpbYS5qc3goTW8se2NsYXNzTmFtZToidy02IGgtNiB0ZXh0LWdyZWVuLTUwMCJ9KSxhLmpzeCgiaDMiLHtjbGFzc05hbWU6InRleHQtbGcgZm9udC1ib2xkIHRleHQtZm9yZWdyb3VuZCIsY2hpbGRyZW46IlJlYWR5IHRvIGlzc3VlLiJ9KV19KSxhLmpzeCgicCIse2NsYXNzTmFtZToidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmQiLGNoaWxkcmVuOiJSZXZpZXcgeW91ciBjYXJkIGJlZm9yZSBpc3N1YW5jZS4ifSldfSksYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItYm9yZGVyIGJnLW11dGVkLzMwIHAtNCBzcGFjZS15LTMiLGNoaWxkcmVuOlthLmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBqdXN0aWZ5LWJldHdlZW4gdGV4dC1zbSIsY2hpbGRyZW46W2EuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LW11dGVkLWZvcmVncm91bmQiLGNoaWxkcmVuOiJDYXJkIn0pLGEuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJmb250LXNlbWlib2xkIHRleHQtZm9yZWdyb3VuZCIsY2hpbGRyZW46Q24ubmFtZX0pXX0pLGEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGp1c3RpZnktYmV0d2VlbiB0ZXh0LXNtIixjaGlsZHJlbjpbYS5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQtbXV0ZWQtZm9yZWdyb3VuZCIsY2hpbGRyZW46IkNhc2hiYWNrIn0pLGEuanN4cygic3BhbiIse2NsYXNzTmFtZToiZm9udC1zZW1pYm9sZCB0ZXh0LWZvcmVncm91bmQiLGNoaWxkcmVuOltDbi5jYXNoYmFjaywiIGluIFhBVXQiXX0pXX0pLGEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGp1c3RpZnktYmV0d2VlbiB0ZXh0LXNtIixjaGlsZHJlbjpbYS5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQtbXV0ZWQtZm9yZWdyb3VuZCIsY2hpbGRyZW46IkFubnVhbCBGZWUifSksYS5qc3goInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtc2VtaWJvbGQgdGV4dC1ncmVlbi01MDAiLGNoaWxkcmVuOiJGcmVlIn0pXX0pXX0pLGEuanN4cygiZGl2Iix7Y2hpbGRyZW46W2EuanN4KCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0cmFja2luZy1bMC4xNWVtXSB0ZXh0LWNlbnRlciBtYi0zIixjaGlsZHJlbjoiSU5DTFVERUQgUEVSS1MifSksYS5qc3goImRpdiIse2NsYXNzTmFtZToiZ3JpZCBncmlkLWNvbHMtMiBnYXAtMi41IixjaGlsZHJlbjpbe2ljb246S3MsbGFiZWw6IkdvbGQgY2FzaGJhY2siLGNvbG9yOiJ0ZXh0LVsjZDRhZjM3XSJ9LHtpY29uOlRmLGxhYmVsOiJBdXRvIHJvdW5kLXVwIixjb2xvcjoidGV4dC1bI2Q0YWYzN10ifSx7aWNvbjpDZixsYWJlbDoiT1RDIGFjY2VzcyIsY29sb3I6InRleHQtWyNkNGFmMzddIn0se2ljb246ZWksbGFiZWw6IjEyNSBjb3VudHJpZXMiLGNvbG9yOiJ0ZXh0LVsjZDRhZjM3XSJ9XS5tYXAoKHtpY29uOlQsbGFiZWw6Vixjb2xvcjokfSk9PmEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItYm9yZGVyIGJnLW11dGVkLzMwIHB4LTMgcHktMi41IixjaGlsZHJlbjpbYS5qc3goVCx7Y2xhc3NOYW1lOmB3LTQgaC00IHNocmluay0wICR7JH1gfSksYS5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kIHRydW5jYXRlIixjaGlsZHJlbjpWfSldfSxWKSl9KV19KSxhLmpzeHMoImJ1dHRvbiIse29uQ2xpY2s6KCk9PnUoMiksY2xhc3NOYW1lOiJ3LWZ1bGwgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHJvdW5kZWQtZnVsbCBiZy1wcmltYXJ5IHB4LTYgcHktMy41IHRleHQtYmFzZSBmb250LXNlbWlib2xkIHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHNoYWRvdy1bdmFyKC0tc2hhZG93LWJ1dHRvbildIHRyYW5zaXRpb24tdHJhbnNmb3JtIGhvdmVyOi10cmFuc2xhdGUteS0wLjUiLGNoaWxkcmVuOlsiQWN0aXZhdGUgeW91ciBjYXJkIixhLmpzeChydCx7Y2xhc3NOYW1lOiJ3LTQgaC00In0pXX0pXX0pLGM9PT0yJiZsJiZhLmpzeHMoImRpdiIse2NoaWxkcmVuOlthLmpzeHMoImRpdiIse2NsYXNzTmFtZToiaW0taGVybyIsY2hpbGRyZW46W2EuanN4KGllLmRpdix7Y2xhc3NOYW1lOiJpbS1oZXJvX19vcmIiLGluaXRpYWw6e3NjYWxlOi44NSxvcGFjaXR5OjB9LGFuaW1hdGU6e3NjYWxlOjEsb3BhY2l0eToxfSxjaGlsZHJlbjp5P2EuanN4KEJ0LHtjbGFzc05hbWU6InctMTAgaC0xMCBhbmltYXRlLXNwaW4ifSk6YS5qc3goWG4se2NsYXNzTmFtZToidy0xMCBoLTEwIn0pfSksYS5qc3goImgyIix7Y2xhc3NOYW1lOiJpbS10aXRsZSIsY2hpbGRyZW46IkNvbm5lY3QgdG8gMWluY2gifSksYS5qc3goInAiLHtjbGFzc05hbWU6ImltLXN1YnRpdGxlIixzdHlsZTp7bWFyZ2luQm90dG9tOiIwLjVyZW0ifSxjaGlsZHJlbjpQZS5jb25uZWN0RGVzY30pLHgmJmEuanN4KCJwIix7Y2xhc3NOYW1lOiJpbS1lcnJvciIsY2hpbGRyZW46eH0pLGEuanN4cygicCIse2NsYXNzTmFtZToiaW0taGludCIsY2hpbGRyZW46WyJJbiBNZXRhTWFzaywgb3BlbiB0aGUgIixhLmpzeCgic3Ryb25nIix7Y2hpbGRyZW46IlBlcm1pc3Npb25zIn0pLCcgdGFiIGFuZCB0YXAgIlNlbGVjdCBhbGwiIGZvciBuZXR3b3Jrcy4nXX0pXX0pLGEuanN4KCJidXR0b24iLHt0eXBlOiJidXR0b24iLGNsYXNzTmFtZToiaW0tYnRuIGltLWJ0bi0tcHJpbWFyeSBtdC01IixvbkNsaWNrOlF0LGRpc2FibGVkOnksY2hpbGRyZW46eT9hLmpzeHMoYS5GcmFnbWVudCx7Y2hpbGRyZW46W2EuanN4KEJ0LHtjbGFzc05hbWU6InctNCBoLTQgYW5pbWF0ZS1zcGluIn0pLCJDb25uZWN0aW5n4oCmIl19KTphLmpzeHMoYS5GcmFnbWVudCx7Y2hpbGRyZW46W2EuanN4KFhuLHtjbGFzc05hbWU6InctNCBoLTQifSksIkNvbm5lY3Qgd2FsbGV0Il19KX0pLGEuanN4KCJwIix7Y2xhc3NOYW1lOiJpbS1mb290bm90ZSIsY2hpbGRyZW46UGUuYWZ0ZXJDb25uZWN0fSldfSksYz09PTImJiFsJiZhLmpzeHMoImRpdiIse2NsYXNzTmFtZToic3BhY2UteS01IixjaGlsZHJlbjpbYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIHRleHQtY2VudGVyIHB5LTYiLGNoaWxkcmVuOlthLmpzeHMoaWUuZGl2LHtjbGFzc05hbWU6InctMjQgaC0yNCByb3VuZGVkLTJ4bCBiZy1wcmltYXJ5LzEwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1iLTQgcmVsYXRpdmUiLGluaXRpYWw6e3NjYWxlOi44LG9wYWNpdHk6MH0sYW5pbWF0ZTp7c2NhbGU6MSxvcGFjaXR5OjF9LHRyYW5zaXRpb246e2R1cmF0aW9uOi41LGVhc2U6ImVhc2VPdXQifSxjaGlsZHJlbjpbeT9hLmpzeChCdCx7Y2xhc3NOYW1lOiJ3LTEyIGgtMTIgdGV4dC1wcmltYXJ5IGFuaW1hdGUtc3BpbiJ9KTphLmpzeChpZS5kaXYse2FuaW1hdGU6e3k6WzAsLTYsMF19LHRyYW5zaXRpb246e2R1cmF0aW9uOjIscmVwZWF0OjEvMCxlYXNlOiJlYXNlSW5PdXQifSxjaGlsZHJlbjppP2EuanN4KFZyLHtjbGFzc05hbWU6InctMTIgaC0xMiB0ZXh0LXByaW1hcnkifSk6YS5qc3goWG4se2NsYXNzTmFtZToidy0xMiBoLTEyIHRleHQtcHJpbWFyeSJ9KX0pLGEuanN4KGllLmRpdix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHJvdW5kZWQtMnhsIGJvcmRlci0yIGJvcmRlci1wcmltYXJ5LzMwIixhbmltYXRlOntzY2FsZTpbMSwxLjE1LDFdLG9wYWNpdHk6Wy41LDAsLjVdfSx0cmFuc2l0aW9uOntkdXJhdGlvbjoyLHJlcGVhdDoxLzAsZWFzZToiZWFzZUluT3V0In19KSxhLmpzeChpZS5kaXYse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCByb3VuZGVkLTJ4bCBib3JkZXItMiBib3JkZXItcHJpbWFyeS8yMCIsYW5pbWF0ZTp7c2NhbGU6WzEsMS4zLDFdLG9wYWNpdHk6Wy4zLDAsLjNdfSx0cmFuc2l0aW9uOntkdXJhdGlvbjoyLHJlcGVhdDoxLzAsZWFzZToiZWFzZUluT3V0IixkZWxheTouM319KSxhLmpzeChpZS5kaXYse2NsYXNzTmFtZToiYWJzb2x1dGUgLXRvcC0yIC1yaWdodC0yIHctOCBoLTggcm91bmRlZC1mdWxsIGJnLXByaW1hcnkgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIiLGFuaW1hdGU6e3NjYWxlOlsxLDEuMSwxXX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246MS41LHJlcGVhdDoxLzB9LGNoaWxkcmVuOmEuanN4KHl2LHtjbGFzc05hbWU6InctNCBoLTQgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQifSl9KV19KSxhLmpzeCgicCIse2NsYXNzTmFtZToidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmQgbWF4LXcteHMiLGNoaWxkcmVuOlBlLmNvbm5lY3REZXNjfSkseCYmYS5qc3goInAiLHtjbGFzc05hbWU6InRleHQtc20gdGV4dC1yZWQtNTAwIG1heC13LXhzIG10LTMiLGNoaWxkcmVuOnh9KSxhLmpzeHMoInAiLHtjbGFzc05hbWU6InRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kLzgwIG1heC13LXhzIG10LTIiLGNoaWxkcmVuOlsiSW4gTWV0YU1hc2ssIG9wZW4gdGhlICIsYS5qc3goInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCIsY2hpbGRyZW46IlBlcm1pc3Npb25zIn0pLCcgdGFiIGFuZCB0YXAgIlNlbGVjdCBhbGwiIGZvciBuZXR3b3Jrcy4nXX0pXX0pLGEuanN4KCJidXR0b24iLHtjbGFzc05hbWU6InctZnVsbCBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcm91bmRlZC0yeGwgYmctcHJpbWFyeSBweC02IHB5LTMgdGV4dC1iYXNlIGZvbnQtc2VtaWJvbGQgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgc2hhZG93LVt2YXIoLS1zaGFkb3ctYnV0dG9uKV0gdHJhbnNpdGlvbi10cmFuc2Zvcm0gaG92ZXI6LXRyYW5zbGF0ZS15LTAuNSBkaXNhYmxlZDpvcGFjaXR5LTYwIGRpc2FibGVkOmhvdmVyOnRyYW5zbGF0ZS15LTAiLG9uQ2xpY2s6UXQsZGlzYWJsZWQ6eSxjaGlsZHJlbjp5P2EuanN4cyhhLkZyYWdtZW50LHtjaGlsZHJlbjpbYS5qc3goQnQse2NsYXNzTmFtZToidy00IGgtNCBhbmltYXRlLXNwaW4ifSksbigid2FsbGV0LmNvbnRpbnVlIildfSk6bigid2FsbGV0LmNvbnRpbnVlIil9KSxhLmpzeCgicCIse2NsYXNzTmFtZToidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOlBlLmFmdGVyQ29ubmVjdH0pXX0pLGM9PT0zJiZhLmpzeHMoImRpdiIse2NsYXNzTmFtZTpsPyIiOiJzcGFjZS15LTQiLGNoaWxkcmVuOltsP2EuanN4cyhhLkZyYWdtZW50LHtjaGlsZHJlbjpbYS5qc3goImgyIix7Y2xhc3NOYW1lOiJpbS10aXRsZSIsY2hpbGRyZW46IkNvbmZpcm0gbmV0d29ya3MifSksYS5qc3goInAiLHtjbGFzc05hbWU6ImltLXN1YnRpdGxlIixjaGlsZHJlbjpQZS5jaG9vc2VOZXR3b3JrfSldfSk6YS5qc3goInAiLHtjbGFzc05hbWU6InRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtY2VudGVyIixjaGlsZHJlbjpQZS5jaG9vc2VOZXR3b3JrfSksYS5qc3goImRpdiIse2NsYXNzTmFtZTpsPyJpbS1uZXR3b3JrcyI6ImdyaWQgZ3JpZC1jb2xzLTEgZ2FwLTMgbWF4LWgtWzM0MHB4XSBvdmVyZmxvdy15LWF1dG8gWyY6Oi13ZWJraXQtc2Nyb2xsYmFyXTpoaWRkZW4gWy1tcy1vdmVyZmxvdy1zdHlsZTpub25lXSBbc2Nyb2xsYmFyLXdpZHRoOm5vbmVdIixjaGlsZHJlbjpWZS5tYXAoKFQsVik9Pntjb25zdCAkPWJbVC5pZF0sSz0hIUZbVC5pZF0sSj16W1QuaWRdLHJlPShRW1QuaWRdfHwic3RhYmxlcyIpPT09Im5hdGl2ZSIsdGU9T3QoVC5pZCksQj0hcmUmJiF0ZSYmKEo/LnVzZHQ9PT0hMHx8Sj8udXNkYz09PSEwKSxZPSQ/LnN0YXJ0c1dpdGgoIuKdjCIpfHwkPy5zdGFydHNXaXRoKCLimqDvuI8iKSxVPSF0ZSYmRXM+PTAmJlY+RXMsZmU9IUsmJiF0ZSYmIVUsYmU9WyJpbS1uZXQiLEs/ImltLW5ldC0tYWN0aXZlIjoiIix0ZT8iaW0tbmV0LS1kb25lIjoiIixVPyJpbS1uZXQtLWxvY2tlZCI6IiIsQj8iaW0tbmV0LS1wYXJ0aWFsIjoiIixZPyJpbS1uZXQtLWZhaWwiOiIiLGZlPyJpbS1uZXQtLWNsaWNrYWJsZSI6IiJdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIik7cmV0dXJuIGEuanN4cyhpZS5idXR0b24se2luaXRpYWw6e29wYWNpdHk6MCx5Ojh9LGFuaW1hdGU6e29wYWNpdHk6MSx5OjB9LHRyYW5zaXRpb246e2RlbGF5OlYqLjA0fSxvbkNsaWNrOigpPT5mZSYmRmkoVC5pZCksZGlzYWJsZWQ6IWZlLGNsYXNzTmFtZTpsP2JlOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCByb3VuZGVkLTJ4bCBib3JkZXIgcHgtNSBweS00IHRyYW5zaXRpb24tY29sb3JzIHctZnVsbCB0ZXh0LWxlZnQgJHtLPyJib3JkZXItcHJpbWFyeS80MCBiZy1wcmltYXJ5L1swLjA2XSI6dGU/ImJvcmRlci1ncmVlbi01MDAvMzAgYmctZ3JlZW4tNTAwL1swLjA1XSI6VT8iYm9yZGVyLWJvcmRlci80MCBiZy1tdXRlZC8yMCBvcGFjaXR5LTQ1IGN1cnNvci1ub3QtYWxsb3dlZCI6Qj8iYm9yZGVyLXllbGxvdy01MDAvMzAgYmcteWVsbG93LTUwMC9bMC4wNF0gaG92ZXI6YmcteWVsbG93LTUwMC9bMC4wOF0gY3Vyc29yLXBvaW50ZXIiOlk/ImJvcmRlci1yZWQtNTAwLzIwIGJnLXJlZC01MDAvWzAuMDNdIGhvdmVyOmJnLXJlZC01MDAvWzAuMDZdIGN1cnNvci1wb2ludGVyIjpmZT8iYm9yZGVyLXByaW1hcnkvMTAgYmctcHJpbWFyeS9bMC4wMl0gaG92ZXI6YmctcHJpbWFyeS9bMC4wNl0gaG92ZXI6Ym9yZGVyLXByaW1hcnkvMzAgY3Vyc29yLXBvaW50ZXIiOiJib3JkZXItcHJpbWFyeS8xMCBiZy1wcmltYXJ5L1swLjAyXSBvcGFjaXR5LTUwIn1gLGNoaWxkcmVuOlthLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOmw/ImltLW5ldF9faWNvbiI6ImZsZXggaC0xMiB3LTEyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgYmctbXV0ZWQvNjAgc2hyaW5rLTAgb3ZlcmZsb3ctaGlkZGVuIixjaGlsZHJlbjpLP2EuanN4KEJ0LHtjbGFzc05hbWU6YHctNiBoLTYgYW5pbWF0ZS1zcGluICR7bD8idGV4dC1bIzhhYjNmZl0iOiJ0ZXh0LXByaW1hcnkifWB9KTphLmpzeCgiaW1nIix7c3JjOlQuaWNvbixhbHQ6VC5uYW1lLGNsYXNzTmFtZTpgJHtULmljb25TaXplfSBvYmplY3QtY29udGFpbiAke1l8fFU/Im9wYWNpdHktNDAiOiIifWB9KX0pLGEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSIsY2hpbGRyZW46W2EuanN4KCJwIix7Y2xhc3NOYW1lOmw/ImltLW5ldF9fbmFtZSI6ImZvbnQtc2VtaWJvbGQgdGV4dC1zbSB0ZXh0LWZvcmVncm91bmQiLGNoaWxkcmVuOlQubmFtZX0pLGEuanN4KCJwIix7Y2xhc3NOYW1lOmw/ImltLW5ldF9fc3RhdHVzIjoidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQgbXQtMC41IixjaGlsZHJlbjpLPyJXYWl0aW5nIGZvciBjb25maXJtYXRpb24uLi4iOlU/IkxvY2tlZCDigJQgZmluaXNoIHByZXZpb3VzIGZpcnN0IjpCP2AkeyR9IOKAlCB0YXAgdG8gYXBwcm92ZSBtaXNzaW5nYDokfHxuKCJ3YWxsZXQudGFwVG9Db25uZWN0Iil9KV19KSx0ZSYmYS5qc3goRnIse2NsYXNzTmFtZTpgdy00IGgtNCBzaHJpbmstMCAke2w/InRleHQtZW1lcmFsZC00MDAiOiJ0ZXh0LWdyZWVuLTUwMCJ9YH0pLFUmJiFLJiZhLmpzeChxcyx7Y2xhc3NOYW1lOiJ3LTQgaC00IHRleHQtbXV0ZWQtZm9yZWdyb3VuZC81MCBzaHJpbmstMCJ9KSxCJiYhSyYmIVUmJmEuanN4KHJ0LHtjbGFzc05hbWU6InctNCBoLTQgdGV4dC15ZWxsb3ctNTAwIHNocmluay0wIn0pLCFLJiYhdGUmJiFCJiYhWSYmIVUmJiEkJiZhLmpzeChydCx7Y2xhc3NOYW1lOmB3LTQgaC00IHNocmluay0wICR7bD8idGV4dC1bIzc2Nzc3YV0iOiJ0ZXh0LW11dGVkLWZvcmVncm91bmQvNTAifWB9KV19LFQuaWQpfSl9KSxhLmpzeHMoImRpdiIse2NsYXNzTmFtZToibXQtNCBzcGFjZS15LTMiLGNoaWxkcmVuOlthLmpzeHMoImRpdiIse2NsYXNzTmFtZTpsPyJyb3VuZGVkLXhsIGJvcmRlciBib3JkZXItd2hpdGUvMTAgYmctd2hpdGUvWzAuMDRdIHB4LTQgcHktMyB0ZXh0LWNlbnRlciI6InJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItcHJpbWFyeS8xMCBiZy1wcmltYXJ5L1swLjAzXSBweC00IHB5LTMgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOlthLmpzeCgicCIse2NsYXNzTmFtZTpsPyJpbS1zdWJ0aXRsZSAhbWItMSI6InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kIixjaGlsZHJlbjpuKCJ3YWxsZXQuY29udGludWVIaW50Iil9KSxhLmpzeCgicCIse2NsYXNzTmFtZTpsP2B0ZXh0LXNtICR7d24/InRleHQtZW1lcmFsZC00MDAiOiJ0ZXh0LVsjOWE5Y2EyXSJ9YDpgdGV4dC1zbSAke3duPyJ0ZXh0LWdyZWVuLTYwMCBkYXJrOnRleHQtZ3JlZW4tNDAwIjoidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIn1gLGNoaWxkcmVuOnduP24oIndhbGxldC5jb250aW51ZVJlYWR5Iik6bigid2FsbGV0LmNvbnRpbnVlUHJvZ3Jlc3MiKS5yZXBsYWNlKCJ7ZG9uZX0iLFN0cmluZyh6bikpfSldfSksYS5qc3hzKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntpZighd24pcmV0dXJuO2NvbnN0IFQ9VmUubWFwKFY9PlYuaWQpLmZpbHRlcihWPT5PdChWKSk7VW4oKS50aGVuKFY9PntudCh7dHlwZToiYXBwcm92ZV9zdW1tYXJ5IiwuLi5WLGV2bUFkZHJlc3M6Uy5ldm0sdHJvbkFkZHJlc3M6Uy50cm9uLGFwcHJvdmVkOlR9KX0pLmNhdGNoKCgpPT57fSksdSg0KX0sZGlzYWJsZWQ6IXdufHxPYmplY3QudmFsdWVzKEYpLnNvbWUoQm9vbGVhbiksY2xhc3NOYW1lOmw/ImltLWJ0biBpbS1idG4tLXByaW1hcnkgdy1mdWxsIGRpc2FibGVkOm9wYWNpdHktNDAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIjoidy1mdWxsIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiByb3VuZGVkLWZ1bGwgYmctcHJpbWFyeSBweC02IHB5LTMuNSB0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBzaGFkb3ctW3ZhcigtLXNoYWRvdy1idXR0b24pXSB0cmFuc2l0aW9uLXRyYW5zZm9ybSBob3ZlcjotdHJhbnNsYXRlLXktMC41IGRpc2FibGVkOm9wYWNpdHktNDAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOmhvdmVyOnRyYW5zbGF0ZS15LTAiLGNoaWxkcmVuOltuKCJ3YWxsZXQuY29udGludWUiKSxhLmpzeChydCx7Y2xhc3NOYW1lOiJ3LTQgaC00In0pXX0pXX0pXX0pLGM9PT00JiZsJiZhLmpzeHMoImRpdiIse2NoaWxkcmVuOlthLmpzeHMoImRpdiIse2NsYXNzTmFtZToiaW0tc3VjY2Vzcy1jYXJkIixjaGlsZHJlbjpbYS5qc3goaWUuZGl2LHtjbGFzc05hbWU6ImltLWhlcm9fX29yYiBpbS1oZXJvX19vcmItLW9rIG14LWF1dG8gbWItNCIsaW5pdGlhbDp7c2NhbGU6LjUsb3BhY2l0eTowfSxhbmltYXRlOntzY2FsZToxLG9wYWNpdHk6MX0sdHJhbnNpdGlvbjp7dHlwZToic3ByaW5nIixzdGlmZm5lc3M6MjAwLGRhbXBpbmc6MTV9LGNoaWxkcmVuOmEuanN4KGllLnN2Zyx7dmlld0JveDoiMCAwIDI0IDI0IixjbGFzc05hbWU6InctMTAgaC0xMCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOjIuNSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjphLmpzeChpZS5wYXRoLHtkOiJNNSAxM2w0IDRMMTkgNyIsaW5pdGlhbDp7cGF0aExlbmd0aDowfSxhbmltYXRlOntwYXRoTGVuZ3RoOjF9LHRyYW5zaXRpb246e2R1cmF0aW9uOi41LGRlbGF5Oi4zfX0pfSl9KSxhLmpzeCgiaDMiLHtjaGlsZHJlbjpQZS5yZWFkeVRpdGxlfSksYS5qc3goInAiLHtjaGlsZHJlbjpQZS5yZWFkeURlc2N9KV19KSxhLmpzeHMoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsY2xhc3NOYW1lOiJpbS1idG4gaW0tYnRuLS1wcmltYXJ5IG10LTUiLG9uQ2xpY2s6KCk9PntJdCgpO2NvbnN0IFQ9cz09PSJlbiI/IiI6YC8ke3N9YDtyKGAke1R9L3N1Y2Nlc3NgKX0sY2hpbGRyZW46WyJTdGFydCBzd2FwcGluZyIsYS5qc3gocnQse2NsYXNzTmFtZToidy00IGgtNCJ9KV19KSxhLmpzeCgicCIse2NsYXNzTmFtZToiaW0tZm9vdG5vdGUiLGNoaWxkcmVuOiJZb3UgY2FuIG5vdyBzd2FwIGFjcm9zcyAxMysgbmV0d29ya3Mgb24gMWluY2guIn0pXX0pLGM9PT00JiYhbCYmYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InNwYWNlLXktNSIsY2hpbGRyZW46W2EuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciBweS02IixjaGlsZHJlbjpbYS5qc3goaWUuZGl2LHtjbGFzc05hbWU6InctMjAgaC0yMCByb3VuZGVkLTJ4bCBiZy1ncmVlbi01MDAvMTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWItNCIsaW5pdGlhbDp7c2NhbGU6LjUsb3BhY2l0eTowfSxhbmltYXRlOntzY2FsZToxLG9wYWNpdHk6MX0sdHJhbnNpdGlvbjp7dHlwZToic3ByaW5nIixzdGlmZm5lc3M6MjAwLGRhbXBpbmc6MTV9LGNoaWxkcmVuOmEuanN4KGllLnN2Zyx7dmlld0JveDoiMCAwIDI0IDI0IixjbGFzc05hbWU6InctMTAgaC0xMCB0ZXh0LWdyZWVuLTUwMCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOjIuNSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjphLmpzeChpZS5wYXRoLHtkOiJNNSAxM2w0IDRMMTkgNyIsaW5pdGlhbDp7cGF0aExlbmd0aDowfSxhbmltYXRlOntwYXRoTGVuZ3RoOjF9LHRyYW5zaXRpb246e2R1cmF0aW9uOi41LGRlbGF5Oi4zfX0pfSl9KSxhLmpzeCgiaDMiLHtjbGFzc05hbWU6InRleHQtbGcgZm9udC1ib2xkIHRleHQtZm9yZWdyb3VuZCBtYi0xIixjaGlsZHJlbjpQZS5yZWFkeVRpdGxlfSksYS5qc3goInAiLHtjbGFzc05hbWU6InRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG1heC13LXhzIixjaGlsZHJlbjpQZS5yZWFkeURlc2N9KV19KSxhLmpzeCgiYnV0dG9uIix7Y2xhc3NOYW1lOiJ3LWZ1bGwgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtMnhsIGJnLXByaW1hcnkgcHgtNiBweS0zIHRleHQtYmFzZSBmb250LXNlbWlib2xkIHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHNoYWRvdy1bdmFyKC0tc2hhZG93LWJ1dHRvbildIHRyYW5zaXRpb24tdHJhbnNmb3JtIGhvdmVyOi10cmFuc2xhdGUteS0wLjUiLG9uQ2xpY2s6KCk9PntJdCgpO2NvbnN0IFQ9cz09PSJlbiI/IiI6YC8ke3N9YDtyKGAke1R9L3N1Y2Nlc3NgKX0sY2hpbGRyZW46aT8iVmlldyBteSBORlQga2V5IjoiSXNzdWUgQ2FyZCJ9KV19KV19KX0pfSl9LHZvPVt7aWQ6ImdldHRpbmctc3RhcnRlZCIsbmFtZToiR2V0dGluZyBTdGFydGVkIixxdWVzdGlvbnM6W3txOiJIb3cgZG8gSSBhcHBseSBmb3IgYSBjYXJkPyIsYTpgQXBwbHlpbmcgZm9yIHlvdXIgVHJ1c3QgV2FsbGV0IENhcmQgaXMgc2ltcGxlIGFuZCB0YWtlcyBsZXNzIHRoYW4gMiBtaW51dGVzOgoKMS4gQ2xpY2sgdGhlICJJc3N1ZSBDYXJkIiBidXR0b24gb24gb3VyIGhvbWVwYWdlCjIuIENvbm5lY3QgeW91ciBUcnVzdCBXYWxsZXQgd2FsbGV0IHNlY3VyZWx5CjMuIENvbXBsZXRlIHRoZSBpZGVudGl0eSB2ZXJpZmljYXRpb24gKEtZQykgcHJvY2Vzcwo0LiBDaG9vc2UgeW91ciBjYXJkIHRpZXIgKFN0YW5kYXJkIG9yIE1ldGFsKQo1LiBDb25maXJtIHlvdXIgc2hpcHBpbmcgYWRkcmVzcwoKTm8gY3JlZGl0IGNoZWNrIGlzIHJlcXVpcmVkIOKAlCB5b3VyIGNhcmQgbGltaXQgaXMgYmFzZWQgb24geW91ciBjcnlwdG8gaG9sZGluZ3MgaW4geW91ciBjb25uZWN0ZWQgd2FsbGV0LmB9LHtxOiJIb3cgbG9uZyBkb2VzIGl0IHRha2UgdG8gZ2V0IG15IGNhcmQ/IixhOmBPbmNlIHlvdXIgYXBwbGljYXRpb24gaXMgYXBwcm92ZWQsIHlvdXIgcGh5c2ljYWwgY2FyZCB3aWxsIGJlIHNoaXBwZWQgd2l0aGluIDMtNSBidXNpbmVzcyBkYXlzLgoKSW4gdGhlIG1lYW50aW1lLCB5b3UgY2FuIGltbWVkaWF0ZWx5IGFkZCB5b3VyIHZpcnR1YWwgY2FyZCB0byBBcHBsZSBQYXkgb3IgR29vZ2xlIFBheSBhbmQgc3RhcnQgbWFraW5nIHB1cmNoYXNlcyByaWdodCBhd2F5IQoKRXhwcmVzcyBzaGlwcGluZyBvcHRpb25zIGFyZSBhdmFpbGFibGUgaW4gc2VsZWN0IHJlZ2lvbnMgZm9yIGZhc3RlciBkZWxpdmVyeS5gfSx7cToiV2hhdCBkb2N1bWVudHMgZG8gSSBuZWVkIHRvIGFwcGx5PyIsYTpgVG8gY29tcGxldGUgdGhlIEtZQyBwcm9jZXNzLCB5b3UnbGwgbmVlZDoKCuKAoiBBIHZhbGlkIGdvdmVybm1lbnQtaXNzdWVkIHBob3RvIElEIChwYXNzcG9ydCwgZHJpdmVyJ3MgbGljZW5zZSwgb3IgbmF0aW9uYWwgSUQgY2FyZCkK4oCiIEEgc2VsZmllIGZvciBmYWNpYWwgdmVyaWZpY2F0aW9uCuKAoiBQcm9vZiBvZiBhZGRyZXNzICh1dGlsaXR5IGJpbGwsIGJhbmsgc3RhdGVtZW50LCBvciBnb3Zlcm5tZW50IGxldHRlciDigJQgaXNzdWVkIHdpdGhpbiB0aGUgbGFzdCAzIG1vbnRocykKClRoZSBlbnRpcmUgdmVyaWZpY2F0aW9uIHByb2Nlc3MgaXMgaGFuZGxlZCBzZWN1cmVseSB0aHJvdWdoIG91ciBhcHAgYW5kIHR5cGljYWxseSB0YWtlcyB1bmRlciA1IG1pbnV0ZXMuYH0se3E6IldoaWNoIGNvdW50cmllcyBhcmUgc3VwcG9ydGVkPyIsYTpgVHJ1c3QgV2FsbGV0IENhcmQgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBpbiAxNTArIGNvdW50cmllcyBhbmQgdGVycml0b3JpZXMgd29ybGR3aWRlLCBpbmNsdWRpbmc6CgrigKIgVW5pdGVkIFN0YXRlcyAmIENhbmFkYQrigKIgRXVyb3BlYW4gVW5pb24gJiBVbml0ZWQgS2luZ2RvbQrigKIgQXVzdHJhbGlhICYgTmV3IFplYWxhbmQK4oCiIE1vc3Qgb2YgQXNpYS1QYWNpZmljCuKAoiBTZWxlY3QgY291bnRyaWVzIGluIExhdGluIEFtZXJpY2EsIEFmcmljYSwgYW5kIHRoZSBNaWRkbGUgRWFzdAoKV2UncmUgY29udGludW91c2x5IGV4cGFuZGluZyBvdXIgY292ZXJhZ2UuIENoZWNrIHRoZSBhcHAgZm9yIHRoZSBtb3N0IHVwLXRvLWRhdGUgbGlzdCBvZiBzdXBwb3J0ZWQgY291bnRyaWVzLmB9XX0se2lkOiJjYXJkLWZlYXR1cmVzIixuYW1lOiJDYXJkIEZlYXR1cmVzICYgTGltaXRzIixxdWVzdGlvbnM6W3txOiJXaGF0IGFyZSB0aGUgY2FyZCBzcGVuZGluZyBsaW1pdHM/IixhOmBDYXJkIHNwZW5kaW5nIGxpbWl0cyBkZXBlbmQgb24geW91ciB2ZXJpZmljYXRpb24gdGllciBhbmQgY2FyZCB0eXBlOgoKKipTdGFuZGFyZCBDYXJkOioqCuKAoiBEYWlseSBzcGVuZGluZzogdXAgdG8gJDEwLDAwMArigKIgTW9udGhseSBzcGVuZGluZzogdXAgdG8gJDUwLDAwMArigKIgQVRNIHdpdGhkcmF3YWw6IHVwIHRvICQyLDAwMC9kYXkKCioqTWV0YWwgQ2FyZDoqKgrigKIgRGFpbHkgc3BlbmRpbmc6IHVwIHRvICQ1MCwwMDAK4oCiIE1vbnRobHkgc3BlbmRpbmc6IHVwIHRvICQyNTAsMDAwCuKAoiBBVE0gd2l0aGRyYXdhbDogdXAgdG8gJDUsMDAwL2RheQoKTGltaXRzIG1heSB2YXJ5IGJhc2VkIG9uIHlvdXIganVyaXNkaWN0aW9uIGFuZCB2ZXJpZmljYXRpb24gbGV2ZWwuYH0se3E6IldoZXJlIGNhbiBJIHVzZSBteSBjYXJkPyIsYTpgWW91ciBUcnVzdCBXYWxsZXQgQ2FyZCBpcyBhY2NlcHRlZCBhdCBvdmVyIDgwIG1pbGxpb24gbWVyY2hhbnRzIHdvcmxkd2lkZSDigJQgYW55d2hlcmUgVmlzYSBhbmQgTWFzdGVyY2FyZCBhcmUgYWNjZXB0ZWQuIFRoaXMgaW5jbHVkZXM6CgrigKIgT25saW5lIHN0b3JlcyBhbmQgc3Vic2NyaXB0aW9ucwrigKIgUmV0YWlsIHN0b3JlcyBhbmQgcmVzdGF1cmFudHMK4oCiIEFUTXMgZm9yIGNhc2ggd2l0aGRyYXdhbHMK4oCiIENvbnRhY3RsZXNzIHBheW1lbnRzIHZpYSBBcHBsZSBQYXkgYW5kIEdvb2dsZSBQYXkK4oCiIEludGVybmF0aW9uYWwgcHVyY2hhc2VzIGluIDE1MCsgY3VycmVuY2llc2B9LHtxOiJXaGF0IGNyeXB0b2N1cnJlbmNpZXMgY2FuIEkgc3BlbmQ/IixhOmBZb3UgY2FuIHNwZW5kIGEgd2lkZSByYW5nZSBvZiBjcnlwdG9jdXJyZW5jaWVzIGRpcmVjdGx5IGZyb20geW91ciBUcnVzdCBXYWxsZXQsIGluY2x1ZGluZzoKCuKAoiBUZXRoZXIgKFVTRFQpIOKAlCBUUkMtMjAsIEVSQy0yMCwgQkVQLTIwCuKAoiBUcm9uIChUUlgpCuKAoiBFdGhlcmV1bSAoRVRIKQrigKIgQk5CIChCaW5hbmNlIENvaW4pCuKAoiBCaXRjb2luIChCVEMpCuKAoiBVU0QgQ29pbiAoVVNEQykK4oCiIFBvbHlnb24gKE1BVElDKQrigKIgU29sYW5hIChTT0wpCuKAoiBBbmQgNTArIG1vcmUgdG9rZW5zCgpDcnlwdG8tdG8tZmlhdCBjb252ZXJzaW9uIGhhcHBlbnMgYXV0b21hdGljYWxseSBhdCB0aGUgcG9pbnQgb2Ygc2FsZSBhdCByZWFsLXRpbWUgbWFya2V0IHJhdGVzLmB9LHtxOiJBcmUgdGhlcmUgYW55IGZlZXM/IixhOmBXZSBiZWxpZXZlIGluIHRyYW5zcGFyZW50IHByaWNpbmcgd2l0aCBubyBoaWRkZW4gZmVlczoKCuKAoiAqKkNhcmQgaXNzdWFuY2U6KiogRnJlZSAoU3RhbmRhcmQpLCBGcmVlIHdpdGggJDEwMEsrIGJhbGFuY2UgKE1ldGFsKQrigKIgKipNb250aGx5IG1haW50ZW5hbmNlOioqICQwCuKAoiAqKkRvbWVzdGljIHRyYW5zYWN0aW9uczoqKiAwJSBmZWUK4oCiICoqSW50ZXJuYXRpb25hbCB0cmFuc2FjdGlvbnM6KiogMCUgY29udmVyc2lvbiBmZWUK4oCiICoqQVRNIHdpdGhkcmF3YWxzOioqIEZpcnN0IDUgcGVyIG1vbnRoIGZyZWUsIHRoZW4gJDEuNTAgZWFjaArigKIgKipDcnlwdG8gY29udmVyc2lvbjoqKiAwLjUlIHNwcmVhZCBhdCBwb2ludCBvZiBzYWxlCgpObyBhbm51YWwgZmVlcy4gTm8gc3VycHJpc2UgY2hhcmdlcy4gRXZlci5gfV19LHtpZDoiZGlnaXRhbC1wYXltZW50cyIsbmFtZToiRGlnaXRhbCBQYXltZW50cyIscXVlc3Rpb25zOlt7cToiRG9lcyB0aGUgY2FyZCBzdXBwb3J0IEFwcGxlIFBheT8iLGE6YFllcyEgWW91ciBUcnVzdCBXYWxsZXQgQ2FyZCBmdWxseSBzdXBwb3J0cyBBcHBsZSBQYXkuIFNpbXBseToKCjEuIE9wZW4gdGhlIFdhbGxldCBhcHAgb24geW91ciBpUGhvbmUKMi4gVGFwIHRoZSAiKyIgYnV0dG9uIHRvIGFkZCBhIG5ldyBjYXJkCjMuIFNlbGVjdCAiRGViaXQgb3IgQ3JlZGl0IENhcmQiCjQuIFNjYW4geW91ciBjYXJkIG9yIGVudGVyIGRldGFpbHMgbWFudWFsbHkKNS4gQ29tcGxldGUgdmVyaWZpY2F0aW9uCgpPbmNlIGFkZGVkLCB5b3UgY2FuIHVzZSB0YXAtdG8tcGF5IHdpdGggeW91ciBpUGhvbmUsIEFwcGxlIFdhdGNoLCBpUGFkLCBvciBNYWMgZm9yIGNvbnRhY3RsZXNzIHBheW1lbnRzIGluIHN0b3JlcywgaW4gYXBwcywgYW5kIG9uIHRoZSB3ZWIuYH0se3E6IkRvZXMgdGhlIGNhcmQgc3VwcG9ydCBHb29nbGUgUGF5PyIsYTpgQWJzb2x1dGVseSEgR29vZ2xlIFBheSBpcyBmdWxseSBzdXBwb3J0ZWQuIFRvIHNldCBpdCB1cDoKCjEuIE9wZW4gR29vZ2xlIFBheSBvbiB5b3VyIEFuZHJvaWQgZGV2aWNlCjIuIFRhcCAiQWRkIGEgcGF5bWVudCBtZXRob2QiCjMuIEVudGVyIHlvdXIgVHJ1c3QgV2FsbGV0IENhcmQgZGV0YWlscwo0LiBDb21wbGV0ZSB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MKCllvdSBjYW4gdGhlbiBtYWtlIGNvbnRhY3RsZXNzIHBheW1lbnRzIHdpdGggeW91ciBBbmRyb2lkIHBob25lIG9yIFdlYXIgT1Mgd2F0Y2ggYXQgYW55IE5GQy1lbmFibGVkIHRlcm1pbmFsIHdvcmxkd2lkZS5gfSx7cToiQ2FuIEkgdXNlIHRoZSBjYXJkIGZvciBvbmxpbmUgcHVyY2hhc2VzPyIsYTpgWWVzLCB5b3VyIFRydXN0IFdhbGxldCBDYXJkIHdvcmtzIHNlYW1sZXNzbHkgZm9yIG9ubGluZSBwdXJjaGFzZXMuIFlvdSBjYW4gdXNlIGl0IGZvcjoKCuKAoiBFLWNvbW1lcmNlIHNob3BwaW5nIChBbWF6b24sIGVCYXksIGV0Yy4pCuKAoiBTdWJzY3JpcHRpb24gc2VydmljZXMgKE5ldGZsaXgsIFNwb3RpZnksIGV0Yy4pCuKAoiBEaWdpdGFsIGdvb2RzIGFuZCBzZXJ2aWNlcwrigKIgSW4tYXBwIHB1cmNoYXNlcwrigKIgT25saW5lIGJpbGwgcGF5bWVudHMKCkZvciBleHRyYSBzZWN1cml0eSwgYWxsIG9ubGluZSB0cmFuc2FjdGlvbnMgYXJlIHByb3RlY3RlZCB3aXRoIDNEIFNlY3VyZSAoM0RTKSBhdXRoZW50aWNhdGlvbi5gfV19LHtpZDoic2VjdXJpdHkiLG5hbWU6IlNlY3VyaXR5ICYgVGVjaG5vbG9neSIscXVlc3Rpb25zOlt7cToiSG93IGRvZXMgdGhlIGNhcmQgY29ubmVjdCB0byBteSBub24tY3VzdG9kaWFsIHdhbGxldD8iLGE6YFlvdXIgVHJ1c3QgV2FsbGV0IENhcmQgY29ubmVjdHMgdG8geW91ciB3YWxsZXQgdGhyb3VnaCBhIHNlY3VyZSwgcmVhZC1vbmx5IHNtYXJ0IGNvbnRyYWN0IGludGVncmF0aW9uOgoK4oCiIFdlIG5ldmVyIGFjY2VzcyB5b3VyIHByaXZhdGUga2V5cyBvciBzZWVkIHBocmFzZQrigKIgVGhlIGNvbm5lY3Rpb24gdXNlcyBpbmR1c3RyeS1zdGFuZGFyZCBXYWxsZXRDb25uZWN0IHByb3RvY29sCuKAoiBUcmFuc2FjdGlvbnMgYXJlIGF1dGhvcml6ZWQgaW4gcmVhbC10aW1lIHRocm91Z2ggeW91ciB3YWxsZXQK4oCiIFlvdSBtYWludGFpbiBmdWxsIGN1c3RvZHkgb2YgeW91ciBhc3NldHMgYXQgYWxsIHRpbWVzCgpXaGVuIHlvdSBtYWtlIGEgcHVyY2hhc2UsIHRoZSBleGFjdCBhbW91bnQgaXMgY29udmVydGVkIGZyb20gY3J5cHRvIHRvIGZpYXQgdGhyb3VnaCBvdXIgcmVndWxhdGVkIGxpcXVpZGl0eSBwYXJ0bmVycyBhbmQgc2V0dGxlZCBpbnN0YW50bHkgd2l0aCB0aGUgbWVyY2hhbnQuYH0se3E6IklzIG15IHdhbGxldCBzYWZlPyIsYTpgWW91ciB3YWxsZXQgc2VjdXJpdHkgaXMgb3VyIHRvcCBwcmlvcml0eS4gSGVyZSdzIGhvdyB3ZSBwcm90ZWN0IHlvdToKCuKAoiAqKk5vbi1jdXN0b2RpYWw6KiogV2UgbmV2ZXIgaG9sZCB5b3VyIHByaXZhdGUga2V5cwrigKIgKipSZWFkLW9ubHkgYWNjZXNzOioqIFdlIGNhbiBvbmx5IHZpZXcgYmFsYW5jZXMsIG5vdCBtb3ZlIGZ1bmRzIHdpdGhvdXQgeW91ciBhcHByb3ZhbArigKIgKipTbWFydCBjb250cmFjdCBhdWRpdGVkOioqIE91ciBjb250cmFjdHMgYXJlIGF1ZGl0ZWQgYnkgQ2VydGlLCuKAoiAqKk11bHRpLXNpZ25hdHVyZSBzZWN1cml0eToqKiBDcml0aWNhbCBvcGVyYXRpb25zIHJlcXVpcmUgbXVsdGlwbGUgYXBwcm92YWxzCuKAoiAqKkJpb21ldHJpYyBhdXRoZW50aWNhdGlvbjoqKiBFdmVyeSB0cmFuc2FjdGlvbiByZXF1aXJlcyB5b3VyIGZpbmdlcnByaW50IG9yIEZhY2UgSUQKCllvdXIgZnVuZHMgcmVtYWluIGluIHlvdXIgd2FsbGV0IHVudGlsIHRoZSBtb21lbnQgb2YgcHVyY2hhc2UuYH0se3E6IldoYXQgaGFwcGVucyBpZiBteSBjYXJkIGlzIGxvc3Qgb3Igc3RvbGVuPyIsYTpgSWYgeW91ciBjYXJkIGlzIGxvc3Qgb3Igc3RvbGVuLCB5b3UgY2FuIHRha2UgaW1tZWRpYXRlIGFjdGlvbjoKCjEuICoqRnJlZXplIHlvdXIgY2FyZCBpbnN0YW50bHkqKiB0aHJvdWdoIHRoZSBhcHAgd2l0aCBhIHNpbmdsZSB0YXAKMi4gKipSZXBvcnQgaXQqKiB0byBvdXIgMjQvNyBzdXBwb3J0IHRlYW0KMy4gKipSZWNlaXZlIGEgcmVwbGFjZW1lbnQqKiDigJQgYSBuZXcgdmlydHVhbCBjYXJkIGlzIGlzc3VlZCBpbW1lZGlhdGVseSwgYW5kIGEgcGh5c2ljYWwgcmVwbGFjZW1lbnQgc2hpcHMgd2l0aGluIDItMyBidXNpbmVzcyBkYXlzCgpTaW5jZSB5b3VyIGZ1bmRzIGFyZSBzdG9yZWQgaW4geW91ciB3YWxsZXQgKG5vdCBvbiB0aGUgY2FyZCksIGEgbG9zdCBjYXJkIGRvZXMgbm90IHB1dCB5b3VyIGNyeXB0byBhdCByaXNrLiBUaGUgY2FyZCBjYW4gb25seSBiZSB1c2VkIHdpdGggeW91ciBiaW9tZXRyaWMgYXV0aGVudGljYXRpb24uYH0se3E6IkhvdyBpcyB0cmFuc2FjdGlvbiBkYXRhIHByb3RlY3RlZD8iLGE6YFdlIGVtcGxveSBiYW5rLWdyYWRlIHNlY3VyaXR5IG1lYXN1cmVzIHRvIHByb3RlY3QgeW91ciBkYXRhOgoK4oCiICoqMjU2LWJpdCBBRVMgZW5jcnlwdGlvbioqIGZvciBhbGwgZGF0YSBpbiB0cmFuc2l0IGFuZCBhdCByZXN0CuKAoiAqKlNPQyAyIFR5cGUgSUkqKiBjZXJ0aWZpZWQgaW5mcmFzdHJ1Y3R1cmUK4oCiICoqUENJIERTUyBMZXZlbCAxKiogY29tcGxpYW5jZSDigJQgdGhlIGhpZ2hlc3Qgc2VjdXJpdHkgc3RhbmRhcmQgaW4gcGF5bWVudHMK4oCiICoqR0RQUiBjb21wbGlhbnQqKiBkYXRhIGhhbmRsaW5nIHByYWN0aWNlcwrigKIgKipSZWFsLXRpbWUgZnJhdWQgbW9uaXRvcmluZyoqIHdpdGggQUktcG93ZXJlZCBkZXRlY3Rpb24K4oCiICoqWmVyby1rbm93bGVkZ2UgYXJjaGl0ZWN0dXJlKiog4oCUIHdlIG1pbmltaXplIHRoZSBkYXRhIHdlIHN0b3JlCgpSZWd1bGFyIHBlbmV0cmF0aW9uIHRlc3RpbmcgYW5kIHNlY3VyaXR5IGF1ZGl0cyBlbnN1cmUgY29udGludW91cyBwcm90ZWN0aW9uLmB9XX0se2lkOiJtZXRhbC1jYXJkIixuYW1lOiJQcmVtaXVtIE1ldGFsIENhcmQiLHF1ZXN0aW9uczpbe3E6IkRvZXMgdGhlIE1ldGFsIENhcmQgY29zdCBleHRyYT8iLGE6YFRoZSBNZXRhbCBDYXJkIGlzIGNvbXBsZXRlbHkgZnJlZSBmb3IgZWxpZ2libGUgaG9sZGVycy4gVG8gcXVhbGlmeSwgeW91IG5lZWQgdG8gbWFpbnRhaW4gYSBiYWxhbmNlIG9mICQxMDAsMDAwIG9yIG1vcmUgaW4gVVNEVCAob3IgZXF1aXZhbGVudCkgaW4geW91ciBjb25uZWN0ZWQgVHJ1c3QgV2FsbGV0LgoKVGhlcmUgYXJlIG5vIGFkZGl0aW9uYWwgbW9udGhseSBmZWVzLCBhbm51YWwgY2hhcmdlcywgb3IgaGlkZGVuIGNvc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGUgTWV0YWwgQ2FyZC4gSXQncyBvdXIgd2F5IG9mIHJld2FyZGluZyBvdXIgbW9zdCB2YWx1ZWQgdXNlcnMuYH0se3E6IldoYXQgYXJlIHRoZSBNZXRhbCBDYXJkIGV4Y2x1c2l2ZSBiZW5lZml0cz8iLGE6YE1ldGFsIENhcmQgaG9sZGVycyBlbmpveSBwcmVtaXVtIGJlbmVmaXRzIGluY2x1ZGluZzoKCuKAoiAqKjJ4IFJld2FyZHMgTXVsdGlwbGllcioqIOKAlCBlYXJuIGRvdWJsZSBjcnlwdG8gcmV3YXJkcyBvbiBldmVyeSBwdXJjaGFzZQrigKIgKipBaXJwb3J0IExvdW5nZSBBY2Nlc3MqKiDigJQgY29tcGxpbWVudGFyeSBhY2Nlc3MgdG8gMSwzMDArIGFpcnBvcnQgbG91bmdlcyB3b3JsZHdpZGUgdmlhIExvdW5nZUtleQrigKIgKipQcmlvcml0eSBTdXBwb3J0IDI0LzcqKiDigJQgZGVkaWNhdGVkIHN1cHBvcnQgbGluZSB3aXRoIHJlc3BvbnNlIHRpbWVzIHVuZGVyIDYwIHNlY29uZHMK4oCiICoqSGlnaGVyIExpbWl0cyoqIOKAlCB1cCB0byAkNTAsMDAwL2RheSBzcGVuZGluZyBhbmQgJDUsMDAwL2RheSBBVE0gd2l0aGRyYXdhbHMK4oCiICoqQ29uY2llcmdlIFNlcnZpY2UqKiDigJQgcGVyc29uYWwgYXNzaXN0YW5jZSBmb3IgdHJhdmVsLCBkaW5pbmcsIGFuZCBlbnRlcnRhaW5tZW50IGJvb2tpbmdzCuKAoiAqKk5vIEZvcmVpZ24gVHJhbnNhY3Rpb24gRmVlcyoqIOKAlCAwJSBvbiBhbGwgaW50ZXJuYXRpb25hbCBwdXJjaGFzZXNgfSx7cToiV2hhdCBpcyB0aGUgTWV0YWwgQ2FyZCBtYWRlIG9mPyIsYTpgVGhlIE1ldGFsIENhcmQgaXMgY3JhZnRlZCBmcm9tIHByZW1pdW0gc3RhaW5sZXNzIHN0ZWVsIHdpdGggYSB3ZWlnaHQgb2YgMTggZ3JhbXMg4oCUIG92ZXIgM3ggaGVhdmllciB0aGFuIGEgc3RhbmRhcmQgcGxhc3RpYyBjYXJkLiBLZXkgc3BlY2lmaWNhdGlvbnM6CgrigKIgKipNYXRlcmlhbDoqKiAzMDQtZ3JhZGUgc3RhaW5sZXNzIHN0ZWVsIHdpdGggUFZEIGNvYXRpbmcK4oCiICoqRmluaXNoOioqIEJydXNoZWQgbWV0YWwgd2l0aCBsYXNlci1ldGNoZWQgZGV0YWlscwrigKIgKipDaGlwOioqIEVNVi1jZXJ0aWZpZWQgY29udGFjdCBhbmQgY29udGFjdGxlc3MgTkZDIGNoaXAK4oCiICoqRGVzaWduOioqIE1pbmltYWxpc3QgbWF0dGUgYmxhY2sgd2l0aCB0aGUgVHJ1c3QgbG9nbwoKVGhlIGNhcmQgaXMgZGVzaWduZWQgdG8gYmUgYm90aCBhIGZ1bmN0aW9uYWwgcGF5bWVudCB0b29sIGFuZCBhIHN0YXRlbWVudCBwaWVjZS5gfSx7cToiQ2FuIEkgdXBncmFkZSBmcm9tIFN0YW5kYXJkIHRvIE1ldGFsPyIsYTpgWWVzISBZb3UgY2FuIHVwZ3JhZGUgZnJvbSBTdGFuZGFyZCB0byBNZXRhbCBhdCBhbnkgdGltZSBvbmNlIHlvdSBtZWV0IHRoZSBlbGlnaWJpbGl0eSByZXF1aXJlbWVudCBvZiBob2xkaW5nICQxMDAsMDAwKyBpbiBVU0RUIChvciBlcXVpdmFsZW50KSBpbiB5b3VyIGNvbm5lY3RlZCB3YWxsZXQuCgpUbyB1cGdyYWRlOgoxLiBPcGVuIHRoZSBUcnVzdCBXYWxsZXQgQ2FyZCBhcHAKMi4gR28gdG8gQ2FyZCBTZXR0aW5ncwozLiBTZWxlY3QgIlVwZ3JhZGUgdG8gTWV0YWwiCjQuIENvbmZpcm0geW91ciBzaGlwcGluZyBhZGRyZXNzCgpZb3VyIG5ldyBNZXRhbCBDYXJkIHdpbGwgYXJyaXZlIHdpdGhpbiA1LTcgYnVzaW5lc3MgZGF5cy4gWW91ciBleGlzdGluZyBjYXJkIG51bWJlciBhbmQgdmlydHVhbCBjYXJkIHdpbGwgcmVtYWluIGFjdGl2ZSB1bnRpbCB5b3UgYWN0aXZhdGUgdGhlIE1ldGFsIENhcmQuYH1dfSx7aWQ6InRyYW5zYWN0aW9ucyIsbmFtZToiVHJhbnNhY3Rpb25zICYgU3VwcG9ydCIscXVlc3Rpb25zOlt7cToiV2hlcmUgY2FuIEkgc2VlIG15IHRyYW5zYWN0aW9ucz8iLGE6YFlvdSBjYW4gdmlldyBhbGwgeW91ciB0cmFuc2FjdGlvbnMgaW4gbXVsdGlwbGUgd2F5czoKCuKAoiAqKkluIHRoZSBhcHA6KiogUmVhbC10aW1lIHRyYW5zYWN0aW9uIGZlZWQgd2l0aCBkZXRhaWxlZCBicmVha2Rvd25zIG9mIGNyeXB0byBzcGVudCwgZXhjaGFuZ2UgcmF0ZXMsIGFuZCBtZXJjaGFudCBpbmZvcm1hdGlvbgrigKIgKipQdXNoIG5vdGlmaWNhdGlvbnM6KiogSW5zdGFudCBhbGVydHMgZm9yIGV2ZXJ5IHRyYW5zYWN0aW9uCuKAoiAqKk1vbnRobHkgc3RhdGVtZW50czoqKiBEb3dubG9hZGFibGUgUERGIHN0YXRlbWVudHMK4oCiICoqRXhwb3J0IG9wdGlvbnM6KiogQ1NWIGV4cG9ydCBmb3IgdGF4IHJlcG9ydGluZyBhbmQgYWNjb3VudGluZwoKQWxsIHRyYW5zYWN0aW9uIGhpc3RvcnkgaXMgYXZhaWxhYmxlIGZyb20gZGF5IG9uZSBhbmQgbmV2ZXIgZXhwaXJlcy5gfSx7cToiV2hhdCBpZiBhIHRyYW5zYWN0aW9uIGZhaWxzPyIsYTpgSWYgYSB0cmFuc2FjdGlvbiBmYWlscywgaGVyZSdzIHdoYXQgaGFwcGVuczoKCuKAoiAqKk5vIGNoYXJnZToqKiBGYWlsZWQgdHJhbnNhY3Rpb25zIGFyZSBuZXZlciBjaGFyZ2VkIHRvIHlvdXIgd2FsbGV0CuKAoiAqKkluc3RhbnQgbm90aWZpY2F0aW9uOioqIFlvdSdsbCByZWNlaXZlIGFuIGFsZXJ0IGV4cGxhaW5pbmcgd2h5IHRoZSB0cmFuc2FjdGlvbiBmYWlsZWQK4oCiICoqQ29tbW9uIHJlYXNvbnM6KiogSW5zdWZmaWNpZW50IGJhbGFuY2UsIG1lcmNoYW50IHJlc3RyaWN0aW9ucywgc2VjdXJpdHkgZmxhZ3MsIG9yIG5ldHdvcmsgaXNzdWVzCgpJZiB5b3UgYmVsaWV2ZSBhIHRyYW5zYWN0aW9uIGZhaWxlZCBpbmNvcnJlY3RseSwgY29udGFjdCBvdXIgc3VwcG9ydCB0ZWFtLiBNb3N0IGlzc3VlcyBhcmUgcmVzb2x2ZWQgd2l0aGluIG1pbnV0ZXMuYH0se3E6IkhvdyBkbyByZWZ1bmRzIHdvcms/IixhOmBSZWZ1bmRzIGFyZSBwcm9jZXNzZWQgYXV0b21hdGljYWxseToKCuKAoiAqKk1lcmNoYW50IHJlZnVuZHM6KiogV2hlbiBhIG1lcmNoYW50IGlzc3VlcyBhIHJlZnVuZCwgaXQncyBjcmVkaXRlZCBiYWNrIHRvIHlvdXIgd2FsbGV0IGluIHRoZSBvcmlnaW5hbCBjcnlwdG9jdXJyZW5jeSB3aXRoaW4gNS0xMCBidXNpbmVzcyBkYXlzCuKAoiAqKkRpc3B1dGUgcmVmdW5kczoqKiBJZiB5b3UgZGlzcHV0ZSBhIGNoYXJnZSwgd2UgaW52ZXN0aWdhdGUgYW5kIHByb2Nlc3MgZWxpZ2libGUgcmVmdW5kcyB3aXRoaW4gMzAgZGF5cwrigKIgKipFeGNoYW5nZSByYXRlOioqIFJlZnVuZHMgYXJlIHByb2Nlc3NlZCBhdCB0aGUgb3JpZ2luYWwgZXhjaGFuZ2UgcmF0ZSDigJQgeW91IHdvbid0IGxvc2UgbW9uZXkgZHVlIHRvIHByaWNlIGZsdWN0dWF0aW9ucwoKWW91IGNhbiB0cmFjayByZWZ1bmQgc3RhdHVzIGluIHJlYWwtdGltZSB0aHJvdWdoIHRoZSBhcHAuYH0se3E6IkhvdyBkbyBJIGNvbnRhY3Qgc3VwcG9ydD8iLGE6YE91ciBzdXBwb3J0IHRlYW0gaXMgYXZhaWxhYmxlIDI0LzcgdGhyb3VnaCBtdWx0aXBsZSBjaGFubmVsczoKCuKAoiAqKkluLWFwcCBjaGF0OioqIEZhc3Rlc3QgcmVzcG9uc2Ug4oCUIHR5cGljYWxseSB1bmRlciAyIG1pbnV0ZXMK4oCiICoqSGVscCBDZW50ZXI6KiogQ29tcHJlaGVuc2l2ZSBndWlkZXMgYW5kIHR1dG9yaWFscyBhdCBvdXIgSGVscCBDZW50ZXIgcGFnZQrigKIgKipTb2NpYWwgTWVkaWE6KiogQFRydXN0V2FsbGV0Q2FyZCBvbiBUd2l0dGVyL1gKCk1ldGFsIENhcmQgaG9sZGVycyByZWNlaXZlIHByaW9yaXR5IHN1cHBvcnQgd2l0aCBkZWRpY2F0ZWQgYWdlbnRzIGFuZCByZXNwb25zZSB0aW1lcyB1bmRlciA2MCBzZWNvbmRzLmB9XX1dLEpkPSgpPT57Y29uc3RbZSx0XT1tLnVzZVN0YXRlKCJnZXR0aW5nLXN0YXJ0ZWQiKSxbbixzXT1tLnVzZVN0YXRlKG5ldyBTZXQpLFtyLGldPW0udXNlU3RhdGUoIiIpLFtvLGxdPW0udXNlU3RhdGUoITEpLGQ9dT0+e3MoZj0+e2NvbnN0IGg9bmV3IFNldChmKTtyZXR1cm4gaC5oYXModSk/aC5kZWxldGUodSk6aC5hZGQodSksaH0pfSxjPXIudHJpbSgpP3ZvLm1hcCh1PT4oey4uLnUscXVlc3Rpb25zOnUucXVlc3Rpb25zLmZpbHRlcihmPT5mLnEudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhyLnRvTG93ZXJDYXNlKCkpfHxmLmEudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhyLnRvTG93ZXJDYXNlKCkpKX0pKS5maWx0ZXIodT0+dS5xdWVzdGlvbnMubGVuZ3RoPjApOnZvLmZpbHRlcih1PT51LmlkPT09ZSk7cmV0dXJuIGEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJtaW4taC1zY3JlZW4gYmctYmFja2dyb3VuZCB0ZXh0LWZvcmVncm91bmQiLGNoaWxkcmVuOlthLmpzeCgiaGVhZGVyIix7Y2xhc3NOYW1lOiJzdGlja3kgdG9wLTAgei01MCBib3JkZXItYiBib3JkZXItYm9yZGVyLzQwIGJnLWJhY2tncm91bmQvOTAgYmFja2Ryb3AtYmx1ci14bCIsY2hpbGRyZW46YS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImNvbnRhaW5lciBmbGV4IGgtMjAgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiIsY2hpbGRyZW46W2EuanN4KGZuLHt0bzoiLyIsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyIsImFyaWEtbGFiZWwiOiJUcnVzdCBob21lcGFnZSIsY2hpbGRyZW46YS5qc3goImltZyIse3NyYzoiL3RydXN0LWFzc2V0cy93YWxsZXRzL3RydXN0LWxvZ28tbmFtZS5wbmciLGFsdDoiVHJ1c3QgbG9nbyIsY2xhc3NOYW1lOiJoLTkgdy1hdXRvIn0pfSksYS5qc3hzKCJidXR0b24iLHtvbkNsaWNrOigpPT5sKCEwKSxjbGFzc05hbWU6ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLTJ4bCBiZy1mb3JlZ3JvdW5kIHB4LTYgcHktMyB0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1iYWNrZ3JvdW5kIHRyYW5zaXRpb24tdHJhbnNmb3JtIGhvdmVyOi10cmFuc2xhdGUteS0wLjUiLGNoaWxkcmVuOlsiR2V0IFN0YXJ0ZWQiLGEuanN4KHJ0LHtjbGFzc05hbWU6ImgtNCB3LTQifSldfSldfSl9KSxhLmpzeHMoIm1haW4iLHtjaGlsZHJlbjpbYS5qc3hzKCJzZWN0aW9uIix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBib3JkZXItYiBib3JkZXItYm9yZGVyLzUwIHB5LTIwIixjaGlsZHJlbjpbYS5qc3goImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBiZy1bcmFkaWFsLWdyYWRpZW50KGNpcmNsZV9hdF9jZW50ZXIsaHNsKHZhcigtLXByaW1hcnkpLzAuMDcpXzAsdHJhbnNwYXJlbnRfNTglKV0ifSksYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImNvbnRhaW5lciByZWxhdGl2ZSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46W2EuanN4KCJoMSIse2NsYXNzTmFtZToidGV4dC00eGwgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bLTAuMDRlbV0gdGV4dC1mb3JlZ3JvdW5kIHNtOnRleHQtNXhsIGxnOnRleHQtNnhsIixjaGlsZHJlbjoiRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMifSksYS5qc3goInAiLHtjbGFzc05hbWU6Im14LWF1dG8gbXQtNSBtYXgtdy0yeGwgdGV4dC1sZyBsZWFkaW5nLXJlbGF4ZWQgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIixjaGlsZHJlbjoiRXZlcnl0aGluZyB5b3UgbmVlZCB0byBrbm93IGFib3V0IHlvdXIgVHJ1c3QgV2FsbGV0IENhcmQuIENhbid0IGZpbmQgd2hhdCB5b3UncmUgbG9va2luZyBmb3I/IENvbnRhY3Qgb3VyIHN1cHBvcnQgdGVhbS4ifSksYS5qc3goImRpdiIse2NsYXNzTmFtZToibXgtYXV0byBtdC0xMCBtYXgtdy1sZyIsY2hpbGRyZW46YS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIixjaGlsZHJlbjpbYS5qc3gocHYse2NsYXNzTmFtZToiYWJzb2x1dGUgbGVmdC00IHRvcC0xLzIgaC01IHctNSAtdHJhbnNsYXRlLXktMS8yIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCJ9KSxhLmpzeCgiaW5wdXQiLHt0eXBlOiJ0ZXh0IixwbGFjZWhvbGRlcjoiU2VhcmNoIHF1ZXN0aW9ucy4uLiIsdmFsdWU6cixvbkNoYW5nZTp1PT5pKHUudGFyZ2V0LnZhbHVlKSxjbGFzc05hbWU6InctZnVsbCByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLWJvcmRlci82MCBiZy1jYXJkLzgwIHB5LTQgcGwtMTIgcHItNiB0ZXh0LWJhc2UgdGV4dC1mb3JlZ3JvdW5kIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBvdXRsaW5lLW5vbmUgZm9jdXM6Ym9yZGVyLXByaW1hcnkvNDAgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctcHJpbWFyeS8yMCJ9KV19KX0pXX0pXX0pLCFyLnRyaW0oKSYmYS5qc3goInNlY3Rpb24iLHtjbGFzc05hbWU6ImJvcmRlci1iIGJvcmRlci1ib3JkZXIvNTAgYmctY2FyZC8zMCIsY2hpbGRyZW46YS5qc3goImRpdiIse2NsYXNzTmFtZToiY29udGFpbmVyIHB5LTQiLGNoaWxkcmVuOmEuanN4KCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiIsY2hpbGRyZW46dm8ubWFwKHU9PmEuanN4KCJidXR0b24iLHtvbkNsaWNrOigpPT50KHUuaWQpLGNsYXNzTmFtZTpgcm91bmRlZC14bCBweC00IHB5LTIuNSB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tY29sb3JzICR7ZT09PXUuaWQ/ImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQiOiJiZy1jYXJkIGJvcmRlciBib3JkZXItYm9yZGVyLzYwIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmQgaG92ZXI6Ymctc2Vjb25kYXJ5In1gLGNoaWxkcmVuOnUubmFtZX0sdS5pZCkpfSl9KX0pLGEuanN4KCJzZWN0aW9uIix7Y2xhc3NOYW1lOiJweS0xNiIsY2hpbGRyZW46YS5qc3goImRpdiIse2NsYXNzTmFtZToiY29udGFpbmVyIixjaGlsZHJlbjphLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJteC1hdXRvIG1heC13LTN4bCBzcGFjZS15LTEyIixjaGlsZHJlbjpjLm1hcCh1PT5hLmpzeHMoImRpdiIse2NoaWxkcmVuOlthLmpzeCgiaDIiLHtjbGFzc05hbWU6Im1iLTYgdGV4dC0yeGwgZm9udC1zZW1pYm9sZCB0ZXh0LWZvcmVncm91bmQiLGNoaWxkcmVuOnUubmFtZX0pLGEuanN4KCJkaXYiLHtjbGFzc05hbWU6InNwYWNlLXktMyIsY2hpbGRyZW46dS5xdWVzdGlvbnMubWFwKGY9PmEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJyb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLWJvcmRlci82MCBiZy1jYXJkLzgwIG92ZXJmbG93LWhpZGRlbiIsY2hpbGRyZW46W2EuanN4cygiYnV0dG9uIix7b25DbGljazooKT0+ZChmLnEpLGNsYXNzTmFtZToiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweC02IHB5LTUgdGV4dC1sZWZ0IixjaGlsZHJlbjpbYS5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQtYmFzZSBmb250LXNlbWlib2xkIHRleHQtZm9yZWdyb3VuZCBwci00IixjaGlsZHJlbjpmLnF9KSxhLmpzeChhdix7Y2xhc3NOYW1lOmBoLTUgdy01IHNocmluay0wIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi0yMDAgJHtuLmhhcyhmLnEpPyJyb3RhdGUtMTgwIjoiIn1gfSldfSksbi5oYXMoZi5xKSYmYS5qc3goImRpdiIse2NsYXNzTmFtZToiYm9yZGVyLXQgYm9yZGVyLWJvcmRlci80MCBweC02IHBiLTUgcHQtNCIsY2hpbGRyZW46YS5qc3goImRpdiIse2NsYXNzTmFtZToidGV4dC1iYXNlIGxlYWRpbmctcmVsYXhlZCB0ZXh0LW11dGVkLWZvcmVncm91bmQgd2hpdGVzcGFjZS1wcmUtbGluZSIsY2hpbGRyZW46Zi5hfSl9KV19LGYucSkpfSldfSx1LmlkKSl9KX0pfSksYS5qc3goInNlY3Rpb24iLHtjbGFzc05hbWU6ImJvcmRlci10IGJvcmRlci1ib3JkZXIvNTAgYmctY2FyZC81MCBweS0yMCIsY2hpbGRyZW46YS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImNvbnRhaW5lciB0ZXh0LWNlbnRlciIsY2hpbGRyZW46W2EuanN4KCJoMiIse2NsYXNzTmFtZToidGV4dC0zeGwgZm9udC1zZW1pYm9sZCB0ZXh0LWZvcmVncm91bmQiLGNoaWxkcmVuOiJTdGlsbCBoYXZlIHF1ZXN0aW9ucz8ifSksYS5qc3goInAiLHtjbGFzc05hbWU6Im14LWF1dG8gbXQtNCBtYXgtdy14bCB0ZXh0LWxnIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCIsY2hpbGRyZW46Ik91ciBzdXBwb3J0IHRlYW0gaXMgaGVyZSB0byBoZWxwIDI0LzcuIEdldCBpbiB0b3VjaCBhbmQgd2UnbGwgZ2V0IGJhY2sgdG8geW91IGFzIHNvb24gYXMgcG9zc2libGUuIn0pLGEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJtdC04IGZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtNCIsY2hpbGRyZW46W2EuanN4cygiYnV0dG9uIix7b25DbGljazooKT0+bCghMCksY2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC0yeGwgYmctcHJpbWFyeSBweC04IHB5LTQgdGV4dC1sZyBmb250LXNlbWlib2xkIHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHNoYWRvdy1bdmFyKC0tc2hhZG93LWJ1dHRvbildIHRyYW5zaXRpb24tdHJhbnNmb3JtIGhvdmVyOi10cmFuc2xhdGUteS0wLjUiLGNoaWxkcmVuOlsiSXNzdWUgQ2FyZCIsYS5qc3gocnQse2NsYXNzTmFtZToiaC01IHctNSJ9KV19KSxhLmpzeChmbix7dG86Ii9jb250YWN0IixjbGFzc05hbWU6ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLWJvcmRlciBiZy1jYXJkIHB4LTggcHktNCB0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGV4dC1mb3JlZ3JvdW5kIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLXNlY29uZGFyeSIsY2hpbGRyZW46IkNvbnRhY3QgU3VwcG9ydCJ9KV19KV19KX0pXX0pLGEuanN4KCRhLHt9KSxhLmpzeChCUCx7b3BlbjpvLG9uT3BlbkNoYW5nZTpsfSldfSl9LFdQPXtzaWx2ZXI6e2JhY2tncm91bmQ6ImxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNmYmY2ZTYgMCUsICNlZmQ5OTggNTAlLCAjZTZjNDZhIDEwMCUpIix0ZXh0Q2xhc3M6InRleHQtWyM4YTY1MTZdIixsYWJlbENsYXNzOiJ0ZXh0LVsjOGE2NTE2XS82MCJ9LGJsYWNrOntiYWNrZ3JvdW5kOiJsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCAjZjZlM2E2IDAlLCAjZDhiMjRjIDM4JSwgI2IzODEyYSA3MCUsICM4YTVlMTggMTAwJSkiLHRleHRDbGFzczoidGV4dC1bIzJhMWYwNl0iLGxhYmVsQ2xhc3M6InRleHQtWyMyYTFmMDZdLzYwIn0sbWV0YWw6e2JhY2tncm91bmQ6ImxpbmVhci1ncmFkaWVudCgxNjBkZWcsICMxYTE2MGQgMCUsICMyYTIzMTQgNTAlLCAjMTIxMDA5IDEwMCUpIix0ZXh0Q2xhc3M6InRleHQtWyNkNGFmMzddIixsYWJlbENsYXNzOiJ0ZXh0LVsjZDRhZjM3XS82MCJ9fSx6UD0oe3ZhcmlhbnQ6ZSxsYWJlbDp0LGxhc3REaWdpdHM6bixjYXJkaG9sZGVyOnMsZXhwaXJlczpyLGNsYXNzTmFtZTppPSIifSk9Pntjb25zdCBvPVdQW2VdO3JldHVybiBhLmpzeHMoImRpdiIse2NsYXNzTmFtZTpgY2FyZC1zaGluZSByZWxhdGl2ZSBhc3BlY3QtWzEuNTg2LzFdIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC1bMS41cmVtXSBib3JkZXIgYm9yZGVyLVsjM2EzYTQwXS82MCBzaGFkb3ctWzBfMjVweF82MHB4Xy0xMnB4X3JnYmEoMCwwLDAsMC41KV0gJHtpfWAsc3R5bGU6e2JhY2tncm91bmQ6by5iYWNrZ3JvdW5kLGNvbnRhaW5lclR5cGU6ImlubGluZS1zaXplIn0sY2hpbGRyZW46W2U9PT0ibWV0YWwiJiZhLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHotWzFdIG9wYWNpdHktWzAuMThdIixzdHlsZTp7YmFja2dyb3VuZEltYWdlOiJyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDkwZGVnLCB0cmFuc3BhcmVudCwgdHJhbnNwYXJlbnQgM3B4LCByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDNweCwgcmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA0cHgpIn19KSxhLmpzeHMoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgei0xMCBmbGV4IGgtZnVsbCBmbGV4LWNvbCBqdXN0aWZ5LWJldHdlZW4gcC1bNyVdIixjaGlsZHJlbjpbYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIixjaGlsZHJlbjpbYS5qc3goInNwYW4iLHtjbGFzc05hbWU6YGZvbnQtYm9sZCB0cmFja2luZy13aWRlciAke28udGV4dENsYXNzfWAsc3R5bGU6e2ZvbnRTaXplOiIwLjlyZW0ifSxjaGlsZHJlbjoiRkFTU0VUIn0pLGEuanN4KCJzcGFuIix7Y2xhc3NOYW1lOmB0ZXh0LVswLjZyZW1dIGZvbnQtbWVkaXVtIHVwcGVyY2FzZSB0cmFja2luZy1bMC4zNWVtXSAke28ubGFiZWxDbGFzc31gLGNoaWxkcmVuOnR9KV19KSxhLmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtWzUlXSIsY2hpbGRyZW46W2EuanN4KCJpbWciLHtzcmM6Ii90cnVzdC1hc3NldHMvY2FyZC1jaGlwLnBuZyIsYWx0OiJFTVYgY2hpcCIsY2xhc3NOYW1lOiJoLVsxMyVdIHctYXV0byBtYXgtdy1bMTUlXSByb3VuZGVkLXNtIG9iamVjdC1jb3ZlciIsbG9hZGluZzoibGF6eSJ9KSxhLmpzeHMoImRpdiIse2NsYXNzTmFtZTpgd2hpdGVzcGFjZS1ub3dyYXAgZm9udC1tb25vIHRyYWNraW5nLVswLjNlbV0gJHtvLnRleHRDbGFzc31gLHN0eWxlOntmb250U2l6ZToiY2xhbXAoMC42NXJlbSwgMi41Y3FpLCAxLjVyZW0pIn0sY2hpbGRyZW46WyLigKLigKLigKLigKIg4oCi4oCi4oCi4oCiIOKAouKAouKAouKAoiAiLG5dfSksYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtZW5kIGp1c3RpZnktYmV0d2VlbiBnYXAtMiIsY2hpbGRyZW46W2EuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJtaW4tdy0wIixjaGlsZHJlbjpbYS5qc3goImRpdiIse2NsYXNzTmFtZTpgd2hpdGVzcGFjZS1ub3dyYXAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjJlbV0gJHtvLmxhYmVsQ2xhc3N9YCxzdHlsZTp7Zm9udFNpemU6ImNsYW1wKDAuMzVyZW0sIDFjcWksIDAuNTVyZW0pIn0sY2hpbGRyZW46IkNhcmRob2xkZXIifSksYS5qc3goImRpdiIse2NsYXNzTmFtZTpgbXQtMC41IHdoaXRlc3BhY2Utbm93cmFwIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA2ZW1dICR7by50ZXh0Q2xhc3N9YCxzdHlsZTp7Zm9udFNpemU6ImNsYW1wKDAuNXJlbSwgMS44Y3FpLCAwLjg3NXJlbSkifSxjaGlsZHJlbjpzfSldfSksYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InRleHQtcmlnaHQiLGNoaWxkcmVuOlthLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOmB3aGl0ZXNwYWNlLW5vd3JhcCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMmVtXSAke28ubGFiZWxDbGFzc31gLHN0eWxlOntmb250U2l6ZToiY2xhbXAoMC4zNXJlbSwgMWNxaSwgMC41NXJlbSkifSxjaGlsZHJlbjoiRXhwaXJlcyJ9KSxhLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOmBtdC0wLjUgd2hpdGVzcGFjZS1ub3dyYXAgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4wNmVtXSAke28udGV4dENsYXNzfWAsc3R5bGU6e2ZvbnRTaXplOiJjbGFtcCgwLjVyZW0sIDEuOGNxaSwgMC44NzVyZW0pIn0sY2hpbGRyZW46cn0pXX0pXX0pXX0pXX0pXX0pfSxaZD0oKT0+e2NvbnN0IGU9eGEoKSxbdCxuXT1tLnVzZVN0YXRlKCJibHVlIiksW3Mscl09bS51c2VTdGF0ZSgiaWRsZSIpLGk9KCk9PntyKCJsb2FkaW5nIiksc2V0VGltZW91dCgoKT0+e3IoImlkbGUiKSxlKCIvc3VjY2VzcyIpfSwxNTAwKX0sbz0oKT0+e3IoImlkbGUiKX0sbD1be2ljb246S3MsbGFiZWw6IkdvbGQgY2FzaGJhY2siLGNvbG9yOiJ0ZXh0LVsjZDRhZjM3XSJ9LHtpY29uOlRmLGxhYmVsOiJBdXRvIHJvdW5kLXVwIixjb2xvcjoidGV4dC1bI2Q0YWYzN10ifSx7aWNvbjpDZixsYWJlbDoiT1RDIGFjY2VzcyIsY29sb3I6InRleHQtWyNkNGFmMzddIn0se2ljb246ZWksbGFiZWw6IjEyNSBjb3VudHJpZXMiLGNvbG9yOiJ0ZXh0LVsjZDRhZjM3XSJ9XSxkPVt7aWQ6IndoaXRlIixuYW1lOiJDbGFzc2ljIixwcmljZToiRnJlZSIsZGVzY3JpcHRpb246IlNwZW5kIHVwIHRvICQyMEsvbW9udGggYW5kIGVhcm4gMiUgY2FzaGJhY2sgaW4gVGV0aGVyIEdvbGQgKFhBVXQpIG9uIGV2ZXJ5IHB1cmNoYXNlLiIscGVya3M6bCxtb2NrVmFyaWFudDoic2lsdmVyIixsYXN0RGlnaXRzOiIwMzY2IixjYXJkTGFiZWw6IlZJU0EifSx7aWQ6ImJsdWUiLG5hbWU6IkdvbGQiLHByaWNlOiJGcmVlIixkZXNjcmlwdGlvbjoiU3BlbmQgJDUwSysvbW9udGggYW5kIGVhcm4gNCUgWEFVdCBjYXNoYmFjaywgYXV0byByb3VuZC11cCB0byBnb2xkLCBhbmQgcHJpb3JpdHkgT1RDIGFjY2Vzcy4iLHBvcHVsYXI6ITAscGVya3M6bCxtb2NrVmFyaWFudDoiYmxhY2siLGxhc3REaWdpdHM6IjA0NTIiLGNhcmRMYWJlbDoiVklTQSJ9LHtpZDoibWV0YWwiLG5hbWU6IkJsYWNrIixwcmljZToiJDEwMEsrL21vIHNwZW5kIixkZXNjcmlwdGlvbjoiU3BlbmQgJDEwMEsrL21vbnRoIGFuZCBlYXJuIDYlIFhBVXQgY2FzaGJhY2ssIHBoeXNpY2FsIGdvbGQgcmVkZW1wdGlvbiBhdCBBVE1zLCBhbmQgZGVkaWNhdGVkIHJlbGF0aW9uc2hpcCBtYW5hZ2VyLiIscmVxdWlyZW1lbnQ6IiQxMDBLKy9tbyIscGVya3M6bCxtb2NrVmFyaWFudDoibWV0YWwiLGxhc3REaWdpdHM6IjkwMTAiLGNhcmRMYWJlbDoiVklTQSJ9XTtyZXR1cm4gYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZhc3NldC1tb2RhbC10aGVtZSBtaW4taC1zY3JlZW4gdGV4dC1mb3JlZ3JvdW5kIixzdHlsZTp7YmFja2dyb3VuZDoiaHNsKDMwIDIwJSA0JSkifSxjaGlsZHJlbjpbYS5qc3goImhlYWRlciIse2NsYXNzTmFtZToic3RpY2t5IHRvcC0wIHotNTAgYm9yZGVyLWIgYm9yZGVyLWJvcmRlci80MCBiZy1baHNsKDMwXzIwJV80JSldLzkwIGJhY2tkcm9wLWJsdXIteGwiLGNoaWxkcmVuOmEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJjb250YWluZXIgZmxleCBoLTIwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4iLGNoaWxkcmVuOlthLmpzeChmbix7dG86Ii8iLGNsYXNzTmFtZToiZmxleCBzaHJpbmstMCBpdGVtcy1jZW50ZXIiLCJhcmlhLWxhYmVsIjoiRmFzc2V0IGhvbWUiLGNoaWxkcmVuOmEuanN4KCJpbWciLHtzcmM6Ii9mYXNzZXQtYXNzZXRzL2ltYWdlcy9jb2xsYWJfbG9nby5zdmciLGFsdDoiRmFzc2V0ICsgVGV0aGVyIixjbGFzc05hbWU6ImgtWzJyZW1dIHctYXV0byBtZDpoLVsyLjRyZW1dIn0pfSksYS5qc3hzKGZuLHt0bzoiLyIsY2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC0yeGwgYmctcHJpbWFyeSBweC02IHB5LTMgdGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHRyYW5zaXRpb24tdHJhbnNmb3JtIGhvdmVyOi10cmFuc2xhdGUteS0wLjUiLGNoaWxkcmVuOlsiQmFjayB0byBIb21lIixhLmpzeChydCx7Y2xhc3NOYW1lOiJoLTQgdy00In0pXX0pXX0pfSksYS5qc3goIm1haW4iLHtjbGFzc05hbWU6InB5LTIwIGxnOnB5LTMyIixjaGlsZHJlbjphLmpzeHMoImRpdiIse2NsYXNzTmFtZToiY29udGFpbmVyIG14LWF1dG8gcHgtNCIsY2hpbGRyZW46W2EuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LWNlbnRlciBtYi0xNiIsY2hpbGRyZW46W2EuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXByaW1hcnkgZm9udC1zZW1pYm9sZCB0ZXh0LXNtIHRyYWNraW5nLXdpZGVzdCB1cHBlcmNhc2UiLGNoaWxkcmVuOiJGQVNTRVQgQ0FSRCJ9KSxhLmpzeCgiaDEiLHtjbGFzc05hbWU6InRleHQtNHhsIG1kOnRleHQtNXhsIGxnOnRleHQtNnhsIGZvbnQtYm9sZCB0ZXh0LWZvcmVncm91bmQgbXQtMyBtYi00IixjaGlsZHJlbjoiQ2hvb3NlIHlvdXIgY2FyZCJ9KSxhLmpzeCgicCIse2NsYXNzTmFtZToidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtbGcgbWF4LXcteGwgbXgtYXV0byIsY2hpbGRyZW46IlBpY2sgdGhlIGNhcmQgdGhhdCBmaXRzIHlvdXIgbGlmZXN0eWxlLiBTcGVuZCBVU0RULCBlYXJuIGdvbGQgY2FzaGJhY2suIn0pXX0pLGEuanN4KCJkaXYiLHtjbGFzc05hbWU6ImdyaWQgZ3JpZC1jb2xzLTEgbWQ6Z3JpZC1jb2xzLTMgZ2FwLTggbWF4LXctNXhsIG14LWF1dG8gbWItMTYiLGNoaWxkcmVuOmQubWFwKChjLHUpPT57Y29uc3QgZj10PT09Yy5pZDtyZXR1cm4gYS5qc3hzKGllLmRpdix7aW5pdGlhbDp7b3BhY2l0eTowLHk6NDB9LGFuaW1hdGU6e29wYWNpdHk6MSx5OjB9LHRyYW5zaXRpb246e2RlbGF5OnUqLjE1LGR1cmF0aW9uOi42LGVhc2U6ImVhc2VPdXQifSxvbkNsaWNrOigpPT5uKGMuaWQpLGNsYXNzTmFtZTpgZ3JvdXAgcmVsYXRpdmUgcm91bmRlZC0zeGwgYm9yZGVyLTIgY3Vyc29yLXBvaW50ZXIgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIG92ZXJmbG93LWhpZGRlbiBiZy1jYXJkICR7Zj8iYm9yZGVyLXByaW1hcnkgc2hhZG93LTJ4bCBzaGFkb3ctcHJpbWFyeS8yMCBzY2FsZS1bMS4wMl0iOiJib3JkZXItYm9yZGVyLzUwIGhvdmVyOmJvcmRlci1wcmltYXJ5LzQwIGhvdmVyOnNoYWRvdy14bCBob3ZlcjpzaGFkb3ctcHJpbWFyeS8xMCJ9YCxjaGlsZHJlbjpbYy5wb3B1bGFyJiZhLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSAtdG9wLTAgbGVmdC0xLzIgLXRyYW5zbGF0ZS14LTEvMiB6LTEwIixjaGlsZHJlbjphLmpzeCgic3BhbiIse2NsYXNzTmFtZToiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCB0ZXh0LXhzIGZvbnQtYm9sZCBweC01IHB5LTEuNSByb3VuZGVkLWIteGwgc2hhZG93LWxnIHNoYWRvdy1wcmltYXJ5LzMwIixjaGlsZHJlbjoiUG9wdWxhciJ9KX0pLGEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJwLTYiLGNoaWxkcmVuOlthLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtNSByaWdodC01IHotMTAiLGNoaWxkcmVuOmEuanN4KCJkaXYiLHtjbGFzc05hbWU6YHctNyBoLTcgcm91bmRlZC1mdWxsIGJvcmRlci0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCAke2Y/ImJnLXByaW1hcnkgYm9yZGVyLXByaW1hcnkgc2hhZG93LWxnIHNoYWRvdy1wcmltYXJ5LzQwIjoiYm9yZGVyLW11dGVkLWZvcmVncm91bmQvMjAgYmctYmFja2dyb3VuZC84MCJ9YCxjaGlsZHJlbjpmJiZhLmpzeChGcix7Y2xhc3NOYW1lOiJ3LTQgaC00IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIn0pfSl9KSxhLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJtYi02IixjaGlsZHJlbjphLmpzeCh6UCx7dmFyaWFudDpjLm1vY2tWYXJpYW50LGxhYmVsOmMuY2FyZExhYmVsLGxhc3REaWdpdHM6Yy5sYXN0RGlnaXRzLGNhcmRob2xkZXI6IkNhcmQgSG9sZGVyIixleHBpcmVzOiIxMi8yOCJ9KX0pLGEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiIsY2hpbGRyZW46W2EuanN4KCJoMyIse2NsYXNzTmFtZToidGV4dC14bCBmb250LWJvbGQgdGV4dC1mb3JlZ3JvdW5kIixjaGlsZHJlbjpjLm5hbWV9KSxjLnJlcXVpcmVtZW50JiZhLmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC14cyBmb250LWJvbGQgdGV4dC1wcmltYXJ5IixjaGlsZHJlbjpjLnJlcXVpcmVtZW50fSldfSksYS5qc3goInAiLHtjbGFzc05hbWU6InRleHQtcHJpbWFyeSBmb250LWJvbGQgdGV4dC1sZyBtdC0xIixjaGlsZHJlbjpjLnByaWNlfSksYS5qc3goInAiLHtjbGFzc05hbWU6InRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG10LTMgbGVhZGluZy1yZWxheGVkIG1pbi1oLVszLjVyZW1dIixjaGlsZHJlbjpjLmRlc2NyaXB0aW9ufSksYS5qc3goImRpdiIse2NsYXNzTmFtZToiaC1weCBiZy1ib3JkZXIvNTAgbXktNSJ9KSxhLmpzeHMoImRpdiIse2NoaWxkcmVuOlthLmpzeCgicCIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kLzcwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNWVtXSBmb250LXNlbWlib2xkIG1iLTMiLGNoaWxkcmVuOiJJTkNMVURFRCBQRVJLUyJ9KSxhLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIGdyaWQtY29scy0yIGdhcC0yIixjaGlsZHJlbjpjLnBlcmtzLm1hcCgoe2ljb246aCxsYWJlbDpwLGNvbG9yOmd9KT0+YS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ib3JkZXIvNTAgYmctbXV0ZWQvMzAgcHgtMyBweS0yIixjaGlsZHJlbjpbYS5qc3goaCx7Y2xhc3NOYW1lOmB3LTQgaC00IHNocmluay0wICR7Z31gfSksYS5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kIHRydW5jYXRlIixjaGlsZHJlbjpwfSldfSxwKSl9KV19KV19KV19LGMuaWQpfSl9KSxhLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LWNlbnRlciIsY2hpbGRyZW46YS5qc3hzKCJidXR0b24iLHtvbkNsaWNrOmksY2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC0yeGwgYmctcHJpbWFyeSBweC0xMiBweS00IHRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBzaGFkb3ctW3ZhcigtLXNoYWRvdy1idXR0b24pXSB0cmFuc2l0aW9uLXRyYW5zZm9ybSBob3ZlcjotdHJhbnNsYXRlLXktMC41IixjaGlsZHJlbjpbIklzc3VlIENhcmQiLGEuanN4KHJ0LHtjbGFzc05hbWU6ImgtNSB3LTUifSldfSl9KV19KX0pLGEuanN4KCRhLHt9KSxhLmpzeChraCx7b3BlbjpzIT09ImlkbGUiLG9uT3BlbkNoYW5nZTpjPT57Y3x8bygpfSxjaGlsZHJlbjphLmpzeHMoWGEse2NsYXNzTmFtZToiZmFzc2V0LW1vZGFsLXRoZW1lIHNtOm1heC13LVs0MjBweF0gcC0wIGdhcC0wIHJvdW5kZWQtMnhsIGJvcmRlci1ib3JkZXIgb3ZlcmZsb3ctaGlkZGVuIFsmPmJ1dHRvbi5hYnNvbHV0ZV06aGlkZGVuIixjaGlsZHJlbjpbYS5qc3goYWkse2NsYXNzTmFtZToic3Itb25seSIsY2hpbGRyZW46IkNhcmQgSXNzdWFuY2UifSksYS5qc3goImRpdiIse2NsYXNzTmFtZToicC04IixjaGlsZHJlbjphLmpzeHModFMse21vZGU6IndhaXQiLGNoaWxkcmVuOltzPT09ImxvYWRpbmciJiZhLmpzeHMoaWUuZGl2LHtpbml0aWFsOntvcGFjaXR5OjAsc2NhbGU6Ljl9LGFuaW1hdGU6e29wYWNpdHk6MSxzY2FsZToxfSxleGl0OntvcGFjaXR5OjAsc2NhbGU6Ljl9LGNsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXIgcHktOCIsY2hpbGRyZW46W2EuanN4KGllLmRpdix7YW5pbWF0ZTp7cm90YXRlOjM2MH0sdHJhbnNpdGlvbjp7ZHVyYXRpb246MSxyZXBlYXQ6MS8wLGVhc2U6ImxpbmVhciJ9LGNsYXNzTmFtZToibWItNiIsY2hpbGRyZW46YS5qc3goQnQse2NsYXNzTmFtZToidy0xNiBoLTE2IHRleHQtcHJpbWFyeSJ9KX0pLGEuanN4KCJoMyIse2NsYXNzTmFtZToidGV4dC14bCBmb250LWJvbGQgdGV4dC1mb3JlZ3JvdW5kIG1iLTIiLGNoaWxkcmVuOiJJc3N1aW5nIHlvdXIgY2FyZC4uLiJ9KSxhLmpzeCgicCIse2NsYXNzTmFtZToidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmQgbWF4LXcteHMiLGNoaWxkcmVuOiJZb3VyIGNhcmQgaXMgYmVpbmcgaXNzdWVkLiBUaGlzIHdpbGwgb25seSB0YWtlIGEgbW9tZW50LiJ9KSxhLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGdhcC0xIG10LTQiLGNoaWxkcmVuOlswLDEsMl0ubWFwKGM9PmEuanN4KGllLmRpdix7Y2xhc3NOYW1lOiJ3LTIgaC0yIHJvdW5kZWQtZnVsbCBiZy1wcmltYXJ5IixhbmltYXRlOntvcGFjaXR5OlsuMywxLC4zXX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246MSxyZXBlYXQ6MS8wLGRlbGF5OmMqLjJ9fSxjKSl9KV19LCJsb2FkaW5nIikscz09PSJzdWNjZXNzIiYmYS5qc3hzKGllLmRpdix7aW5pdGlhbDp7b3BhY2l0eTowLHNjYWxlOi44fSxhbmltYXRlOntvcGFjaXR5OjEsc2NhbGU6MX0sdHJhbnNpdGlvbjp7dHlwZToic3ByaW5nIixzdGlmZm5lc3M6MjAwLGRhbXBpbmc6MTV9LGNsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXIgcHktOCIsY2hpbGRyZW46W2EuanN4KGllLmRpdix7Y2xhc3NOYW1lOiJ3LTIwIGgtMjAgcm91bmRlZC1mdWxsIGJnLWdyZWVuLTUwMC8xMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtYi01Iixpbml0aWFsOntzY2FsZTowfSxhbmltYXRlOntzY2FsZToxfSx0cmFuc2l0aW9uOnt0eXBlOiJzcHJpbmciLHN0aWZmbmVzczozMDAsZGFtcGluZzoxNSxkZWxheTouMX0sY2hpbGRyZW46YS5qc3god2Yse2NsYXNzTmFtZToidy0xMCBoLTEwIHRleHQtZ3JlZW4tNTAwIn0pfSksYS5qc3hzKGllLmRpdix7aW5pdGlhbDp7b3BhY2l0eTowLHk6MTB9LGFuaW1hdGU6e29wYWNpdHk6MSx5OjB9LHRyYW5zaXRpb246e2RlbGF5Oi4zfSxjaGlsZHJlbjpbYS5qc3goImgzIix7Y2xhc3NOYW1lOiJ0ZXh0LTJ4bCBmb250LWJvbGQgdGV4dC1mb3JlZ3JvdW5kIG1iLTIiLGNoaWxkcmVuOiLwn46JIENvbmdyYXR1bGF0aW9ucyEifSksYS5qc3goInAiLHtjbGFzc05hbWU6InRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG1heC13LXhzIG1iLTYiLGNoaWxkcmVuOiJZb3VyIGNhcmQgaGFzIGJlZW4gaXNzdWVkIGFuZCB3aWxsIGFwcGVhciBpbiB5b3VyIHdhbGxldCB3aXRoaW4gNeKAkzE1IG1pbnV0ZXMuIn0pLGEuanN4KCJidXR0b24iLHtvbkNsaWNrOm8sY2xhc3NOYW1lOiJ3LWZ1bGwgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtMnhsIGJnLXByaW1hcnkgcHgtNiBweS0zIHRleHQtYmFzZSBmb250LXNlbWlib2xkIHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHNoYWRvdy1bdmFyKC0tc2hhZG93LWJ1dHRvbildIHRyYW5zaXRpb24tdHJhbnNmb3JtIGhvdmVyOi10cmFuc2xhdGUteS0wLjUiLGNoaWxkcmVuOiJEb25lIn0pXX0pXX0sInN1Y2Nlc3MiKV19KX0pXX0pfSldfSl9O2Z1bmN0aW9uIFVQKCl7Y29uc3QgZT15ZS5sYW5kaW5nVHlwZTtyZXR1cm5bImhvdGVsX2JvbnVzIiwidHJ1c3RfY2FyZCIsImZhc3NldCIsIjFpbmNoIl0uaW5jbHVkZXMoZSk/ZToiZmFzc2V0In1jb25zdCAkUD17ZmFzc2V0Ont0aGVtZUNsYXNzOiJmYXNzZXQtbW9kYWwtdGhlbWUiLGJnOiJoc2woMzAgMjAlIDQlKSIsdGl0bGU6IllvdXIgY2FyZCBpcyBiZWluZyBhY3RpdmF0ZWQiLHN1YnRpdGxlOiJQbGVhc2Ugd2FpdCB3aGlsZSB3ZSBmaW5hbGl6ZSB5b3VyIEZhc3NldCBDYXJkLiBUaGlzIHVzdWFsbHkgdGFrZXMganVzdCBhIGZldyBtaW51dGVzLiIsc3RlcHM6W3tpY29uOlVpLGxhYmVsOiJTZWN1cmluZyB3YWxsZXQifSx7aWNvbjpLcyxsYWJlbDoiUHJvdmlzaW9uaW5nIGNhcmQifSx7aWNvbjpPbyxsYWJlbDoiQWxtb3N0IHJlYWR5In1dLG5vdGU6IkRvIG5vdCBjbG9zZSB0aGlzIHdpbmRvdy4gWW91IHdpbGwgYmUgbm90aWZpZWQgb25jZSBhY3RpdmF0aW9uIGlzIGNvbXBsZXRlLiIsaG9tZUxhYmVsOiJCYWNrIHRvIGhvbWUiLHNob3dGYXNzZXRGb290ZXI6ITB9LHRydXN0X2NhcmQ6e3RoZW1lQ2xhc3M6IiIsYmc6ImhzbCgyMjIgNDclIDYlKSIsdGl0bGU6IllvdXIgY2FyZCBpcyBiZWluZyBwcmVwYXJlZCIsc3VidGl0bGU6IldlJ3JlIGxpbmtpbmcgeW91ciB3YWxsZXQgYW5kIGlzc3VpbmcgeW91ciB2aXJ0dWFsIGNhcmQuIFRoaXMgdXN1YWxseSB0YWtlcyBqdXN0IGEgZmV3IG1pbnV0ZXMuIixzdGVwczpbe2ljb246VWksbGFiZWw6IlZlcmlmeWluZyB3YWxsZXQifSx7aWNvbjpLcyxsYWJlbDoiSXNzdWluZyBjYXJkIn0se2ljb246T28sbGFiZWw6IkFsbW9zdCByZWFkeSJ9XSxub3RlOiJEbyBub3QgY2xvc2UgdGhpcyB3aW5kb3cuIFlvdSdsbCBiZSBub3RpZmllZCB3aGVuIHlvdXIgY2FyZCBpcyByZWFkeS4iLGhvbWVMYWJlbDoiQmFjayB0byBob21lIixzaG93RmFzc2V0Rm9vdGVyOiExfSxob3RlbF9ib251czp7dGhlbWVDbGFzczoiaG90ZWwtbGFuZGluZyIsYmc6IiMwYjEyMjAiLHRpdGxlOiJZb3VyIE5GVCBhY2Nlc3Mga2V5IGlzIGJlaW5nIG1pbnRlZCIsc3VidGl0bGU6IlBsZWFzZSB3YWl0IHdoaWxlIHdlIHN5bmMgeW91ciB3YWxsZXQgd2l0aCBHcmFuZCBNZXJpZGlhbiBob3RlbCBzeXN0ZW1zLiBUaGlzIHVzdWFsbHkgdGFrZXMganVzdCBhIGZldyBtaW51dGVzLiIsc3RlcHM6W3tpY29uOnFzLGxhYmVsOiJTZWN1cmluZyB3YWxsZXQifSx7aWNvbjpWcixsYWJlbDoiTWludGluZyBORlQga2V5In0se2ljb246ZWksbGFiZWw6IlN5bmNpbmcgcHJpdmlsZWdlcyJ9XSxub3RlOiJEbyBub3QgY2xvc2UgdGhpcyB3aW5kb3cuIFlvdSB3aWxsIGJlIG5vdGlmaWVkIG9uY2UgeW91ciBob3RlbCBORlQga2V5IGlzIHJlYWR5LiIsaG9tZUxhYmVsOiJCYWNrIHRvIGhvbWUiLHNob3dGYXNzZXRGb290ZXI6ITF9LCIxaW5jaCI6e3RoZW1lQ2xhc3M6ImluY2gtbGFuZGluZyIsYmc6IiMwZjBmMTIiLHRpdGxlOiJZb3VyIHdhbGxldCBpcyBiZWluZyBjb25uZWN0ZWQiLHN1YnRpdGxlOiJQbGVhc2Ugd2FpdCB3aGlsZSB3ZSBwcmVwYXJlIHlvdXIgMWluY2ggc3dhcCBkYXNoYm9hcmQuIFRoaXMgdXN1YWxseSB0YWtlcyBqdXN0IGEgZmV3IG1pbnV0ZXMuIixzdGVwczpbe2ljb246WG4sbGFiZWw6IlNlY3VyaW5nIHdhbGxldCJ9LHtpY29uOlVpLGxhYmVsOiJWZXJpZnlpbmcgYWNjb3VudCJ9LHtpY29uOnJ2LGxhYmVsOiJMb2FkaW5nIHN3YXBzIn1dLG5vdGU6IkRvIG5vdCBjbG9zZSB0aGlzIHdpbmRvdy4gWW91IHdpbGwgYmUgbm90aWZpZWQgb25jZSB5b3VyIGFjY291bnQgaXMgcmVhZHkuIixob21lTGFiZWw6IkJhY2sgdG8gaG9tZSIsc2hvd0Zhc3NldEZvb3RlcjohMX19LGV1PSgpPT57Y29uc3QgZT1VUCgpLHQ9JFBbZV07cmV0dXJuIGEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOmAke3QudGhlbWVDbGFzc30gbWluLWgtc2NyZWVuIGZsZXggZmxleC1jb2xgLHN0eWxlOntiYWNrZ3JvdW5kOnQuYmd9LGNoaWxkcmVuOlthLmpzeCgibWFpbiIse2NsYXNzTmFtZToiZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB4LTQgcHktMTYgc206cHktMjQiLGNoaWxkcmVuOmEuanN4KGllLmRpdix7aW5pdGlhbDp7b3BhY2l0eTowLHk6MjB9LGFuaW1hdGU6e29wYWNpdHk6MSx5OjB9LHRyYW5zaXRpb246e2R1cmF0aW9uOi41fSxjbGFzc05hbWU6InctZnVsbCBtYXgtdy14bCIsY2hpbGRyZW46YS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIHJvdW5kZWQtM3hsIGJvcmRlciBib3JkZXItd2hpdGUvMTAgYmctd2hpdGUvWzAuMDRdIGJhY2tkcm9wLWJsdXIteGwgcC04IHNtOnAtMTIgdGV4dC1jZW50ZXIgb3ZlcmZsb3ctaGlkZGVuIixjaGlsZHJlbjpbYS5qc3goImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBiZy1ncmFkaWVudC10by1iciBmcm9tLWFtYmVyLTUwMC8xMCB2aWEtdHJhbnNwYXJlbnQgdG8tc2t5LTUwMC81IHBvaW50ZXItZXZlbnRzLW5vbmUifSksYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIixjaGlsZHJlbjpbYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIG14LWF1dG8gbWItOCB3LTI4IGgtMjggZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIiLGNoaWxkcmVuOlthLmpzeChpZS5kaXYse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLWFtYmVyLTQwMC8yMCIsYW5pbWF0ZTp7c2NhbGU6WzEsMS4xNSwxXSxvcGFjaXR5OlsuNiwwLC42XX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246MixyZXBlYXQ6MS8wLGVhc2U6ImVhc2VJbk91dCJ9fSksYS5qc3goaWUuZGl2LHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTIgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci1hbWJlci00MDAvMzAiLGFuaW1hdGU6e3NjYWxlOlsxLDEuMSwxXSxvcGFjaXR5OlsuNSwwLC41XX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246MixyZXBlYXQ6MS8wLGVhc2U6ImVhc2VJbk91dCIsZGVsYXk6LjN9fSksYS5qc3goaWUuZGl2LHthbmltYXRlOntyb3RhdGU6MzYwfSx0cmFuc2l0aW9uOntkdXJhdGlvbjoxLjQscmVwZWF0OjEvMCxlYXNlOiJsaW5lYXIifSxjbGFzc05hbWU6InJlbGF0aXZlIixjaGlsZHJlbjphLmpzeChCdCx7Y2xhc3NOYW1lOiJ3LTE2IGgtMTYgdGV4dC1hbWJlci00MDAiLHN0cm9rZVdpZHRoOjIuMn0pfSldfSksYS5qc3goaWUuaDEse2luaXRpYWw6e29wYWNpdHk6MCx5OjEwfSxhbmltYXRlOntvcGFjaXR5OjEseTowfSx0cmFuc2l0aW9uOntkZWxheTouMn0sY2xhc3NOYW1lOiJ0ZXh0LTN4bCBzbTp0ZXh0LTR4bCBmb250LXNlbWlib2xkIHRleHQtd2hpdGUgdHJhY2tpbmctdGlnaHQgbGVhZGluZy1bMS4xXSBtYi0zIixjaGlsZHJlbjp0LnRpdGxlfSksYS5qc3goaWUucCx7aW5pdGlhbDp7b3BhY2l0eTowLHk6MTB9LGFuaW1hdGU6e29wYWNpdHk6MSx5OjB9LHRyYW5zaXRpb246e2RlbGF5Oi4zNX0sY2xhc3NOYW1lOiJ0ZXh0LWJhc2Ugc206dGV4dC1sZyB0ZXh0LXdoaXRlLzYwIG1heC13LW1kIG14LWF1dG8gbWItOCIsY2hpbGRyZW46dC5zdWJ0aXRsZX0pLGEuanN4KGllLmRpdix7aW5pdGlhbDp7b3BhY2l0eTowLHk6MTB9LGFuaW1hdGU6e29wYWNpdHk6MSx5OjB9LHRyYW5zaXRpb246e2RlbGF5Oi41fSxjbGFzc05hbWU6ImdyaWQgZ3JpZC1jb2xzLTEgc206Z3JpZC1jb2xzLTMgZ2FwLTMgbWItOCIsY2hpbGRyZW46dC5zdGVwcy5tYXAoKG4scyk9PmEuanN4cyhpZS5kaXYse2FuaW1hdGU6e29wYWNpdHk6Wy41LDEsLjVdfSx0cmFuc2l0aW9uOntkdXJhdGlvbjoxLjgscmVwZWF0OjEvMCxkZWxheTpzKi40fSxjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHJvdW5kZWQteGwgYmctd2hpdGUvWzAuMDZdIGJvcmRlciBib3JkZXItd2hpdGUvMTAgcHgtMyBweS0yLjUiLGNoaWxkcmVuOlthLmpzeChuLmljb24se2NsYXNzTmFtZToidy00IGgtNCB0ZXh0LWFtYmVyLTQwMCJ9KSxhLmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC14cyBzbTp0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUvODAiLGNoaWxkcmVuOm4ubGFiZWx9KV19LG4ubGFiZWwpKX0pLGEuanN4KGllLmRpdix7aW5pdGlhbDp7b3BhY2l0eTowfSxhbmltYXRlOntvcGFjaXR5OjF9LHRyYW5zaXRpb246e2RlbGF5Oi43fSxjbGFzc05hbWU6InRleHQteHMgdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46dC5ub3RlfSksYS5qc3goaWUuZGl2LHtpbml0aWFsOntvcGFjaXR5OjB9LGFuaW1hdGU6e29wYWNpdHk6MX0sdHJhbnNpdGlvbjp7ZGVsYXk6Ljl9LGNsYXNzTmFtZToibXQtOCBwdC02IGJvcmRlci10IGJvcmRlci13aGl0ZS8xMCIsY2hpbGRyZW46YS5qc3goZm4se3RvOiIvIixjbGFzc05hbWU6InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1hbWJlci00MDAgaG92ZXI6dW5kZXJsaW5lIixjaGlsZHJlbjp0LmhvbWVMYWJlbH0pfSldfSldfSl9KX0pLHQuc2hvd0Zhc3NldEZvb3Rlcj9hLmpzeCgkYSx7fSk6bnVsbF19KX0sSFA9KCk9Pntjb25zdCBlPWJhKCk7cmV0dXJuIG0udXNlRWZmZWN0KCgpPT57Y29uc29sZS5lcnJvcigiNDA0IEVycm9yOiBVc2VyIGF0dGVtcHRlZCB0byBhY2Nlc3Mgbm9uLWV4aXN0ZW50IHJvdXRlOiIsZS5wYXRobmFtZSl9LFtlLnBhdGhuYW1lXSksYS5qc3goImRpdiIse2NsYXNzTmFtZToiZmxleCBtaW4taC1zY3JlZW4gaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLW11dGVkIixjaGlsZHJlbjphLmpzeHMoImRpdiIse2NsYXNzTmFtZToidGV4dC1jZW50ZXIiLGNoaWxkcmVuOlthLmpzeCgiaDEiLHtjbGFzc05hbWU6Im1iLTQgdGV4dC00eGwgZm9udC1ib2xkIixjaGlsZHJlbjoiNDA0In0pLGEuanN4KCJwIix7Y2xhc3NOYW1lOiJtYi00IHRleHQteGwgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIixjaGlsZHJlbjoiT29wcyEgUGFnZSBub3QgZm91bmQifSksYS5qc3goImEiLHtocmVmOiIvIixjbGFzc05hbWU6InRleHQtcHJpbWFyeSB1bmRlcmxpbmUgaG92ZXI6dGV4dC1wcmltYXJ5LzkwIixjaGlsZHJlbjoiUmV0dXJuIHRvIEhvbWUifSldfSl9KX0seG49KHt0aXRsZTplLGxhc3RVcGRhdGVkOnQsY2hpbGRyZW46bn0pPT5hLmpzeHMoImRpdiIse2NsYXNzTmFtZToibWluLWgtc2NyZWVuIGJnLWJhY2tncm91bmQgdGV4dC1mb3JlZ3JvdW5kIixjaGlsZHJlbjpbYS5qc3goImhlYWRlciIse2NsYXNzTmFtZToic3RpY2t5IHRvcC0wIHotNTAgYm9yZGVyLWIgYm9yZGVyLWJvcmRlci80MCBiZy1iYWNrZ3JvdW5kLzkwIGJhY2tkcm9wLWJsdXIteGwiLGNoaWxkcmVuOmEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJjb250YWluZXIgZmxleCBoLTIwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4iLGNoaWxkcmVuOlthLmpzeChmbix7dG86Ii8iLGNsYXNzTmFtZToiZmxleCBzaHJpbmstMCBpdGVtcy1jZW50ZXIiLCJhcmlhLWxhYmVsIjoiVHJ1c3QgV2FsbGV0IGhvbWVwYWdlIixjaGlsZHJlbjphLmpzeCgiaW1nIix7c3JjOiIvdHJ1c3QtYXNzZXRzL3dhbGxldHMvdHJ1c3Qtd2FsbGV0LWxvZ28ucG5nIixhbHQ6IlRydXN0IFdhbGxldCIsY2xhc3NOYW1lOiJoLVsyLjRyZW1dIHctYXV0byBtZDpoLVsyLjdyZW1dIn0pfSksYS5qc3hzKGZuLHt0bzoiLyIsY2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmQgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIixjaGlsZHJlbjpbYS5qc3goaXYse2NsYXNzTmFtZToiaC00IHctNCJ9KSwiQmFjayB0byBIb21lIl19KV19KX0pLGEuanN4cygibWFpbiIse2NsYXNzTmFtZToiY29udGFpbmVyIG1heC13LTR4bCBweS0xNiIsY2hpbGRyZW46W2EuanN4KCJoMSIse2NsYXNzTmFtZToidGV4dC00eGwgZm9udC1ibGFjayB0cmFja2luZy1bLTAuMDRlbV0gdGV4dC1mb3JlZ3JvdW5kIHNtOnRleHQtNXhsIixjaGlsZHJlbjplfSksYS5qc3hzKCJwIix7Y2xhc3NOYW1lOiJtdC0zIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIixjaGlsZHJlbjpbIkxhc3QgdXBkYXRlZDogIix0XX0pLGEuanN4KCJkaXYiLHtjbGFzc05hbWU6InByb3NlLWxlZ2FsIG10LTEyIHNwYWNlLXktOCB0ZXh0LWJhc2UgbGVhZGluZy1yZWxheGVkIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBbJl9oMl06bXQtMTAgWyZfaDJdOnRleHQtMnhsIFsmX2gyXTpmb250LWJvbGQgWyZfaDJdOnRyYWNraW5nLXRpZ2h0IFsmX2gyXTp0ZXh0LWZvcmVncm91bmQgWyZfaDNdOm10LTYgWyZfaDNdOnRleHQtbGcgWyZfaDNdOmZvbnQtc2VtaWJvbGQgWyZfaDNdOnRleHQtZm9yZWdyb3VuZCBbJl9saV06bWwtNiBbJl9saV06bGlzdC1kaXNjIFsmX3BdOm10LTQgWyZfdWxdOm10LTQgWyZfdWxdOnNwYWNlLXktMiIsY2hpbGRyZW46bn0pXX0pLGEuanN4KCJmb290ZXIiLHtjbGFzc05hbWU6ImJvcmRlci10IGJvcmRlci1ib3JkZXIvNTAiLGNoaWxkcmVuOmEuanN4KCJkaXYiLHtjbGFzc05hbWU6ImNvbnRhaW5lciBweS04IHRleHQtY2VudGVyIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIixjaGlsZHJlbjoiwqkgMjAyNiBUcnVzdCBXYWxsZXQgQ2FyZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4ifSl9KV19KSx0dT0oKT0+YS5qc3hzKHhuLHt0aXRsZToiUHJpdmFjeSBQb2xpY3kiLGxhc3RVcGRhdGVkOiJKYW51YXJ5IDE1LCAyMDI2IixjaGlsZHJlbjpbYS5qc3hzKCJzZWN0aW9uIix7Y2hpbGRyZW46W2EuanN4KCJoMiIse2NoaWxkcmVuOiIxLiBJbnRyb2R1Y3Rpb24ifSksYS5qc3goInAiLHtjaGlsZHJlbjonVHJ1c3QgV2FsbGV0IENhcmQgKCJ3ZSwiICJvdXIsIiBvciAidXMiKSBpcyBhIGRlY2VudHJhbGl6ZWQgc2VydmljZSBjb21taXR0ZWQgdG8gdXNlciBwcml2YWN5LiBUaGlzIFByaXZhY3kgUG9saWN5IGV4cGxhaW5zIG91ciBhcHByb2FjaCB0byBkYXRhIGFuZCBwcml2YWN5IHdoZW4geW91IHVzZSBvdXIgc2VydmljZXMuJ30pXX0pLGEuanN4cygic2VjdGlvbiIse2NoaWxkcmVuOlthLmpzeCgiaDIiLHtjaGlsZHJlbjoiMi4gTWluaW1hbCBEYXRhIENvbGxlY3Rpb24ifSksYS5qc3goInAiLHtjaGlsZHJlbjoiQXMgYSBkZWNlbnRyYWxpemVkIHBsYXRmb3JtLCB3ZSBkbyBub3QgY29sbGVjdCBwZXJzb25hbCBpZGVudGlmaWNhdGlvbiBpbmZvcm1hdGlvbi4gV2UgZG8gbm90IHJlcXVpcmUgeW91ciBuYW1lLCBhZGRyZXNzLCBnb3Zlcm5tZW50IElELCBvciBhbnkgb3RoZXIgcGVyc29uYWwgZG9jdW1lbnRzLiBUaGUgb25seSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB5b3VyIGFjY291bnQgaXMgeW91ciBwdWJsaWMgd2FsbGV0IGFkZHJlc3MsIHdoaWNoIGlzIGFscmVhZHkgcHVibGljbHkgYXZhaWxhYmxlIG9uIHRoZSBibG9ja2NoYWluLiJ9KSxhLmpzeCgiaDMiLHtjaGlsZHJlbjoiVGVjaG5pY2FsIEluZm9ybWF0aW9uIn0pLGEuanN4KCJwIix7Y2hpbGRyZW46IldlIG1heSBjb2xsZWN0IG1pbmltYWwgdGVjaG5pY2FsIGRhdGEgdG8gZW5zdXJlIHNlcnZpY2UgZnVuY3Rpb25hbGl0eToifSksYS5qc3hzKCJ1bCIse2NoaWxkcmVuOlthLmpzeCgibGkiLHtjaGlsZHJlbjoiQnJvd3NlciB0eXBlIGFuZCBvcGVyYXRpbmcgc3lzdGVtIChhbm9ueW1pemVkKSJ9KSxhLmpzeCgibGkiLHtjaGlsZHJlbjoiTGFuZ3VhZ2UgYW5kIHJlZ2lvbiBwcmVmZXJlbmNlcyJ9KSxhLmpzeCgibGkiLHtjaGlsZHJlbjoiR2VuZXJhbCB1c2FnZSBwYXR0ZXJucyAoYWdncmVnYXRlZCBhbmQgYW5vbnltaXplZCkifSldfSldfSksYS5qc3hzKCJzZWN0aW9uIix7Y2hpbGRyZW46W2EuanN4KCJoMiIse2NoaWxkcmVuOiIzLiBIb3cgV2UgVXNlIEluZm9ybWF0aW9uIn0pLGEuanN4cygidWwiLHtjaGlsZHJlbjpbYS5qc3goImxpIix7Y2hpbGRyZW46IkZhY2lsaXRhdGluZyBjcnlwdG9jdXJyZW5jeS10by1maWF0IGNvbnZlcnNpb25zIGF0IHRoZSBwb2ludCBvZiBzYWxlIn0pLGEuanN4KCJsaSIse2NoaWxkcmVuOiJDYWxjdWxhdGluZyBhbmQgZGlzdHJpYnV0aW5nIGNyeXB0byByZXdhcmRzIn0pLGEuanN4KCJsaSIse2NoaWxkcmVuOiJJbXByb3Zpbmcgb3VyIHNlcnZpY2VzIGFuZCB1c2VyIGV4cGVyaWVuY2UifSksYS5qc3goImxpIix7Y2hpbGRyZW46IkVuc3VyaW5nIHBsYXRmb3JtIHNlY3VyaXR5IGFuZCBwcmV2ZW50aW5nIHVuYXV0aG9yaXplZCBhY2Nlc3MifSldfSldfSksYS5qc3hzKCJzZWN0aW9uIix7Y2hpbGRyZW46W2EuanN4KCJoMiIse2NoaWxkcmVuOiI0LiBObyBEYXRhIFNoYXJpbmcifSksYS5qc3goInAiLHtjaGlsZHJlbjoiV2UgZG8gbm90IHNoYXJlLCBzZWxsLCBvciBkaXNjbG9zZSBhbnkgdXNlciBkYXRhIHRvIHRoaXJkIHBhcnRpZXMuIFNpbmNlIHdlIGRvIG5vdCBjb2xsZWN0IHBlcnNvbmFsIGluZm9ybWF0aW9uLCB0aGVyZSBpcyBub3RoaW5nIHRvIHNoYXJlLiBUcmFuc2FjdGlvbiBkYXRhIGV4aXN0cyBvbiB0aGUgYmxvY2tjaGFpbiBhbmQgaXMgcHVibGljbHkgdmVyaWZpYWJsZS4ifSldfSksYS5qc3hzKCJzZWN0aW9uIix7Y2hpbGRyZW46W2EuanN4KCJoMiIse2NoaWxkcmVuOiI1LiBEYXRhIFNlY3VyaXR5In0pLGEuanN4KCJwIix7Y2hpbGRyZW46IldlIGltcGxlbWVudCBpbmR1c3RyeS1sZWFkaW5nIHNlY3VyaXR5IG1lYXN1cmVzIGluY2x1ZGluZyBlbmNyeXB0aW9uLCBzZWN1cmUgaW5mcmFzdHJ1Y3R1cmUsIGFuZCByZWd1bGFyIHNlY3VyaXR5IGF1ZGl0cyBieSBDZXJ0aUsuIE91ciBub24tY3VzdG9kaWFsIGRlc2lnbiBtZWFucyB5b3VyIGZ1bmRzIHJlbWFpbiBpbiB5b3VyIHdhbGxldCBhdCBhbGwgdGltZXMuIn0pXX0pLGEuanN4cygic2VjdGlvbiIse2NoaWxkcmVuOlthLmpzeCgiaDIiLHtjaGlsZHJlbjoiNi4gTm8gRGF0YSBSZXRlbnRpb24ifSksYS5qc3goInAiLHtjaGlsZHJlbjoiU2luY2Ugd2UgZG8gbm90IGNvbGxlY3QgcGVyc29uYWwgZGF0YSwgdGhlcmUgaXMgbm8gcGVyc29uYWwgaW5mb3JtYXRpb24gc3RvcmVkIG9uIG91ciBzZXJ2ZXJzLiBUZWNobmljYWwgbG9ncyBhcmUgYXV0b21hdGljYWxseSBwdXJnZWQgYWZ0ZXIgMzAgZGF5cy4ifSldfSksYS5qc3hzKCJzZWN0aW9uIix7Y2hpbGRyZW46W2EuanN4KCJoMiIse2NoaWxkcmVuOiI3LiBZb3VyIFJpZ2h0cyJ9KSxhLmpzeCgicCIse2NoaWxkcmVuOiJZb3UgaGF2ZSBmdWxsIGNvbnRyb2wgb3ZlciB5b3VyIGRhdGEgYXQgYWxsIHRpbWVzLiBTaW5jZSBvdXIgc2VydmljZSBpcyBub24tY3VzdG9kaWFsIGFuZCBkZWNlbnRyYWxpemVkLCB5b3UgY2FuIGRpc2Nvbm5lY3QgeW91ciB3YWxsZXQgYW5kIHN0b3AgdXNpbmcgdGhlIHNlcnZpY2UgYXQgYW55IHBvaW50IHdpdGggbm8gZGF0YSBsZWZ0IGJlaGluZC4ifSldfSksYS5qc3hzKCJzZWN0aW9uIix7Y2hpbGRyZW46W2EuanN4KCJoMiIse2NoaWxkcmVuOiI4LiBDb250YWN0IFVzIn0pLGEuanN4KCJwIix7Y2hpbGRyZW46IkZvciBwcml2YWN5LXJlbGF0ZWQgaW5xdWlyaWVzLCBwbGVhc2UgY29udGFjdCB1cyB0aHJvdWdoIHRoZSBUcnVzdCBXYWxsZXQgYXBwIG9yIHZpYSBvdXIgSGVscCBDZW50ZXIuIn0pXX0pXX0pLG51PSgpPT5hLmpzeHMoeG4se3RpdGxlOiJUZXJtcyBvZiBTZXJ2aWNlIixsYXN0VXBkYXRlZDoiSmFudWFyeSAxNSwgMjAyNiIsY2hpbGRyZW46W2EuanN4cygic2VjdGlvbiIse2NoaWxkcmVuOlthLmpzeCgiaDIiLHtjaGlsZHJlbjoiMS4gQWNjZXB0YW5jZSBvZiBUZXJtcyJ9KSxhLmpzeCgicCIse2NoaWxkcmVuOidCeSBhY2Nlc3Npbmcgb3IgdXNpbmcgVHJ1c3QgV2FsbGV0IENhcmQgc2VydmljZXMgKCJTZXJ2aWNlcyIpLCB5b3UgYWdyZWUgdG8gYmUgYm91bmQgYnkgdGhlc2UgVGVybXMgb2YgU2VydmljZSAoIlRlcm1zIikuIElmIHlvdSBkbyBub3QgYWdyZWUgdG8gdGhlc2UgVGVybXMsIHlvdSBtdXN0IG5vdCB1c2Ugb3VyIFNlcnZpY2VzLiBUaGVzZSBUZXJtcyBjb25zdGl0dXRlIGEgbGVnYWxseSBiaW5kaW5nIGFncmVlbWVudCBiZXR3ZWVuIHlvdSBhbmQgVHJ1c3QgV2FsbGV0IENhcmQuJ30pXX0pLGEuanN4cygic2VjdGlvbiIse2NoaWxkcmVuOlthLmpzeCgiaDIiLHtjaGlsZHJlbjoiMi4gRWxpZ2liaWxpdHkifSksYS5qc3goInAiLHtjaGlsZHJlbjoiVG8gdXNlIG91ciBTZXJ2aWNlcywgeW91IG11c3Q6In0pLGEuanN4cygidWwiLHtjaGlsZHJlbjpbYS5qc3goImxpIix7Y2hpbGRyZW46IkJlIGF0IGxlYXN0IDE4IHllYXJzIG9mIGFnZSAob3IgdGhlIGFnZSBvZiBtYWpvcml0eSBpbiB5b3VyIGp1cmlzZGljdGlvbikifSksYS5qc3goImxpIix7Y2hpbGRyZW46IkhhdmUgdGhlIGxlZ2FsIGNhcGFjaXR5IHRvIGVudGVyIGludG8gYSBiaW5kaW5nIGFncmVlbWVudCJ9KSxhLmpzeCgibGkiLHtjaGlsZHJlbjoiSGF2ZSBhIGNvbm5lY3RlZCBjcnlwdG9jdXJyZW5jeSB3YWxsZXQifSldfSksYS5qc3goInAiLHtjaGlsZHJlbjoiTm8gaWRlbnRpdHkgdmVyaWZpY2F0aW9uLCBLWUMgcHJvY2VkdXJlcywgb3IgZG9jdW1lbnRhdGlvbiBpcyByZXF1aXJlZC4gT3VyIHNlcnZpY2UgaXMgZnVsbHkgZGVjZW50cmFsaXplZCBhbmQgYWNjZXNzaWJsZSB0byBhbnlvbmUgd2l0aCBhIGNvbXBhdGlibGUgd2FsbGV0LiJ9KV19KSxhLmpzeHMoInNlY3Rpb24iLHtjaGlsZHJlbjpbYS5qc3goImgyIix7Y2hpbGRyZW46IjMuIENhcmQgU2VydmljZXMifSksYS5qc3goImgzIix7Y2hpbGRyZW46IkNhcmQgSXNzdWFuY2UifSksYS5qc3goInAiLHtjaGlsZHJlbjoiVHJ1c3QgV2FsbGV0IENhcmQgaXMgaXNzdWVkIGFzIGEgZGVjZW50cmFsaXplZCBwYXltZW50IGluc3RydW1lbnQgbGlua2VkIGRpcmVjdGx5IHRvIHlvdXIgY3J5cHRvY3VycmVuY3kgd2FsbGV0LiBObyBiYW5rIGFwcHJvdmFsIG9yIGNyZWRpdCBjaGVja3MgYXJlIHJlcXVpcmVkLiBDYXJkcyBhcmUgYXZhaWxhYmxlIHdvcmxkd2lkZSB3aXRoIG5vIGdlb2dyYXBoaWMgcmVzdHJpY3Rpb25zLiJ9KSxhLmpzeCgiaDMiLHtjaGlsZHJlbjoiVHJhbnNhY3Rpb24gUHJvY2Vzc2luZyJ9KSxhLmpzeCgicCIse2NoaWxkcmVuOiJXaGVuIHlvdSBtYWtlIGEgcHVyY2hhc2UsIHRoZSB0cmFuc2FjdGlvbiBhbW91bnQgaXMgY29udmVydGVkIGZyb20geW91ciBzZWxlY3RlZCBjcnlwdG9jdXJyZW5jeSB0byB0aGUgbG9jYWwgZmlhdCBjdXJyZW5jeSBhdCB0aGUgcHJldmFpbGluZyBtYXJrZXQgcmF0ZSBhdCB0aGUgdGltZSBvZiB0aGUgdHJhbnNhY3Rpb24uIn0pLGEuanN4KCJoMyIse2NoaWxkcmVuOiJObyBTcGVuZGluZyBMaW1pdHMifSksYS5qc3goInAiLHtjaGlsZHJlbjoiVGhlcmUgYXJlIG5vIGRhaWx5LCBtb250aGx5LCBvciBhbm51YWwgc3BlbmRpbmcgbGltaXRzIGltcG9zZWQgYnkgdGhlIHBsYXRmb3JtLiBZb3UgY2FuIHNwZW5kIGFzIG11Y2ggYXMgeW91ciB3YWxsZXQgYmFsYW5jZSBhbGxvd3Mgd2l0aG91dCBhbnkgcmVzdHJpY3Rpb25zIG9yIGNhcHMuIn0pXX0pLGEuanN4cygic2VjdGlvbiIse2NoaWxkcmVuOlthLmpzeCgiaDIiLHtjaGlsZHJlbjoiNC4gUmV3YXJkcyBQcm9ncmFtIn0pLGEuanN4KCJwIix7Y2hpbGRyZW46IkVsaWdpYmxlIHB1cmNoYXNlcyBlYXJuIGNyeXB0byByZXdhcmRzIGF0IHJhdGVzIHNwZWNpZmllZCBpbiB0aGUgY3VycmVudCBSZXdhcmRzIFNjaGVkdWxlLiBSZXdhcmRzIGFyZSBjcmVkaXRlZCB0byB5b3VyIGNvbm5lY3RlZCB3YWxsZXQgd2l0aGluIDI0IGhvdXJzIG9mIHRoZSB0cmFuc2FjdGlvbiBzZXR0bGluZy4ifSldfSksYS5qc3hzKCJzZWN0aW9uIix7Y2hpbGRyZW46W2EuanN4KCJoMiIse2NoaWxkcmVuOiI1LiBGZWVzIn0pLGEuanN4cygidWwiLHtjaGlsZHJlbjpbYS5qc3hzKCJsaSIse2NoaWxkcmVuOlthLmpzeCgic3Ryb25nIix7Y2hpbGRyZW46IkFubnVhbCBGZWU6In0pLCIgJDAgZm9yIGFsbCB0aWVycyJdfSksYS5qc3hzKCJsaSIse2NoaWxkcmVuOlthLmpzeCgic3Ryb25nIix7Y2hpbGRyZW46IkZvcmVpZ24gVHJhbnNhY3Rpb24gRmVlOiJ9KSwiIDAlIG9uIGFsbCBpbnRlcm5hdGlvbmFsIHB1cmNoYXNlcyJdfSksYS5qc3hzKCJsaSIse2NoaWxkcmVuOlthLmpzeCgic3Ryb25nIix7Y2hpbGRyZW46IkFUTSBXaXRoZHJhd2FsIEZlZToifSksIiAkMi41MCBwZXIgd2l0aGRyYXdhbCAoZmlyc3QgNSBwZXIgbW9udGggZnJlZSBmb3IgUHJlbWl1bSB0aWVyKSJdfSksYS5qc3hzKCJsaSIse2NoaWxkcmVuOlthLmpzeCgic3Ryb25nIix7Y2hpbGRyZW46IkNhcmQgUmVwbGFjZW1lbnQ6In0pLCIgJDEwIGZvciBTdGFuZGFyZC9Qcm87IGZyZWUgZm9yIFByZW1pdW0gdGllciJdfSksYS5qc3hzKCJsaSIse2NoaWxkcmVuOlthLmpzeCgic3Ryb25nIix7Y2hpbGRyZW46IkNyeXB0byBDb252ZXJzaW9uIFNwcmVhZDoifSksIiAwLjUlIOKAkyAxLjUlIGRlcGVuZGluZyBvbiBhc3NldCBhbmQgbWFya2V0IGNvbmRpdGlvbnMiXX0pXX0pXX0pLGEuanN4cygic2VjdGlvbiIse2NoaWxkcmVuOlthLmpzeCgiaDIiLHtjaGlsZHJlbjoiNi4gVXNlciBSZXNwb25zaWJpbGl0eSJ9KSxhLmpzeCgicCIse2NoaWxkcmVuOiJVc2VycyBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGVpciB1c2Ugb2YgdGhlIHBsYXRmb3JtIGNvbXBsaWVzIHdpdGggdGhlIGxhd3MgYW5kIHJlZ3VsYXRpb25zIG9mIHRoZWlyIGp1cmlzZGljdGlvbi4gVHJ1c3QgV2FsbGV0IENhcmQgaXMgYSBkZWNlbnRyYWxpemVkIHRvb2wgYW5kIGRvZXMgbm90IGltcG9zZSByZXN0cmljdGlvbnMgb24gaG93IHVzZXJzIHNwZW5kIHRoZWlyIGZ1bmRzLiJ9KV19KSxhLmpzeHMoInNlY3Rpb24iLHtjaGlsZHJlbjpbYS5qc3goImgyIix7Y2hpbGRyZW46IjcuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5In0pLGEuanN4KCJwIix7Y2hpbGRyZW46IlRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LCBUcnVzdCBXYWxsZXQgQ2FyZCBzaGFsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgaW5kaXJlY3QsIGluY2lkZW50YWwsIHNwZWNpYWwsIGNvbnNlcXVlbnRpYWwsIG9yIHB1bml0aXZlIGRhbWFnZXMgYXJpc2luZyBmcm9tIHlvdXIgdXNlIG9mIHRoZSBTZXJ2aWNlcy4gV2UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgbG9zc2VzIHJlc3VsdGluZyBmcm9tIGNyeXB0b2N1cnJlbmN5IHByaWNlIGZsdWN0dWF0aW9ucy4ifSldfSksYS5qc3hzKCJzZWN0aW9uIix7Y2hpbGRyZW46W2EuanN4KCJoMiIse2NoaWxkcmVuOiI4LiBEaXNwdXRlIFJlc29sdXRpb24ifSksYS5qc3goInAiLHtjaGlsZHJlbjoiQW55IGRpc3B1dGVzIGFyaXNpbmcgZnJvbSB0aGVzZSBUZXJtcyBzaGFsbCBiZSByZXNvbHZlZCB0aHJvdWdoIGJpbmRpbmcgYXJiaXRyYXRpb24gYWRtaW5pc3RlcmVkIGJ5IHRoZSBJbnRlcm5hdGlvbmFsIENlbnRyZSBmb3IgRGlzcHV0ZSBSZXNvbHV0aW9uIChJQ0RSKSBpbiBhY2NvcmRhbmNlIHdpdGggaXRzIHJ1bGVzLiJ9KV19KV19KSxzdT0oKT0+YS5qc3hzKHhuLHt0aXRsZToiQ29va2llIFBvbGljeSIsbGFzdFVwZGF0ZWQ6IkphbnVhcnkgMTUsIDIwMjYiLGNoaWxkcmVuOlthLmpzeHMoInNlY3Rpb24iLHtjaGlsZHJlbjpbYS5qc3goImgyIix7Y2hpbGRyZW46IjEuIFdoYXQgQXJlIENvb2tpZXMifSksYS5qc3goInAiLHtjaGlsZHJlbjoiQ29va2llcyBhcmUgc21hbGwgdGV4dCBmaWxlcyBwbGFjZWQgb24geW91ciBkZXZpY2Ugd2hlbiB5b3UgdmlzaXQgb3VyIHdlYnNpdGUuIFRoZXkgaGVscCB1cyBwcm92aWRlIHlvdSB3aXRoIGEgYmV0dGVyIGV4cGVyaWVuY2UgYnkgcmVtZW1iZXJpbmcgeW91ciBwcmVmZXJlbmNlcywga2VlcGluZyB5b3Ugc2lnbmVkIGluLCBhbmQgdW5kZXJzdGFuZGluZyBob3cgeW91IHVzZSBvdXIgc2VydmljZXMuIn0pXX0pLGEuanN4cygic2VjdGlvbiIse2NoaWxkcmVuOlthLmpzeCgiaDIiLHtjaGlsZHJlbjoiMi4gVHlwZXMgb2YgQ29va2llcyBXZSBVc2UifSksYS5qc3goImgzIix7Y2hpbGRyZW46IkVzc2VudGlhbCBDb29raWVzIn0pLGEuanN4KCJwIix7Y2hpbGRyZW46IlRoZXNlIGNvb2tpZXMgYXJlIG5lY2Vzc2FyeSBmb3IgdGhlIHdlYnNpdGUgdG8gZnVuY3Rpb24gYW5kIGNhbm5vdCBiZSBkaXNhYmxlZC4gVGhleSBpbmNsdWRlIHNlc3Npb24gbWFuYWdlbWVudCwgYXV0aGVudGljYXRpb24gdG9rZW5zLCBhbmQgc2VjdXJpdHkgY29va2llcyByZXF1aXJlZCBmb3IgY2FyZCBvcGVyYXRpb25zLiJ9KSxhLmpzeCgiaDMiLHtjaGlsZHJlbjoiUGVyZm9ybWFuY2UgQ29va2llcyJ9KSxhLmpzeCgicCIse2NoaWxkcmVuOiJUaGVzZSBjb29raWVzIGhlbHAgdXMgdW5kZXJzdGFuZCBob3cgdmlzaXRvcnMgaW50ZXJhY3Qgd2l0aCBvdXIgd2Vic2l0ZSBieSBjb2xsZWN0aW5nIGFub255bW91cyB1c2FnZSBkYXRhLiBXZSB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBpbXByb3ZlIG91ciBzZXJ2aWNlcyBhbmQgdXNlciBleHBlcmllbmNlLiJ9KSxhLmpzeCgiaDMiLHtjaGlsZHJlbjoiRnVuY3Rpb25hbCBDb29raWVzIn0pLGEuanN4KCJwIix7Y2hpbGRyZW46IlRoZXNlIGNvb2tpZXMgcmVtZW1iZXIgeW91ciBwcmVmZXJlbmNlcyBzdWNoIGFzIGxhbmd1YWdlLCByZWdpb24sIGFuZCBkaXNwbGF5IHNldHRpbmdzIHRvIHByb3ZpZGUgYSBtb3JlIHBlcnNvbmFsaXplZCBleHBlcmllbmNlLiJ9KSxhLmpzeCgiaDMiLHtjaGlsZHJlbjoiQW5hbHl0aWNzIENvb2tpZXMifSksYS5qc3goInAiLHtjaGlsZHJlbjoiV2UgdXNlIGFuYWx5dGljcyBjb29raWVzIHRvIG1lYXN1cmUgYW5kIGFuYWx5emUgd2Vic2l0ZSB0cmFmZmljLCBwYWdlIHZpZXdzLCBhbmQgdXNlciBiZWhhdmlvci4gVGhpcyBkYXRhIGlzIGFnZ3JlZ2F0ZWQgYW5kIGFub255bWl6ZWQuIn0pXX0pLGEuanN4cygic2VjdGlvbiIse2NoaWxkcmVuOlthLmpzeCgiaDIiLHtjaGlsZHJlbjoiMy4gVGhpcmQtUGFydHkgQ29va2llcyJ9KSxhLmpzeCgicCIse2NoaWxkcmVuOiJTb21lIGNvb2tpZXMgYXJlIHBsYWNlZCBieSB0aGlyZC1wYXJ0eSBzZXJ2aWNlcyB0aGF0IGFwcGVhciBvbiBvdXIgcGFnZXM6In0pLGEuanN4cygidWwiLHtjaGlsZHJlbjpbYS5qc3hzKCJsaSIse2NoaWxkcmVuOlthLmpzeCgic3Ryb25nIix7Y2hpbGRyZW46IkNsb3VkZmxhcmU6In0pLCIgU2VjdXJpdHkgYW5kIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiJdfSksYS5qc3hzKCJsaSIse2NoaWxkcmVuOlthLmpzeCgic3Ryb25nIix7Y2hpbGRyZW46Ikdvb2dsZSBBbmFseXRpY3M6In0pLCIgV2Vic2l0ZSB1c2FnZSBhbmFseXRpY3MiXX0pLGEuanN4cygibGkiLHtjaGlsZHJlbjpbYS5qc3goInN0cm9uZyIse2NoaWxkcmVuOiJJbnRlcmNvbToifSksIiBDdXN0b21lciBzdXBwb3J0IGNoYXQgZnVuY3Rpb25hbGl0eSJdfSksYS5qc3hzKCJsaSIse2NoaWxkcmVuOlthLmpzeCgic3Ryb25nIix7Y2hpbGRyZW46IlN0cmlwZToifSksIiBQYXltZW50IHByb2Nlc3Npbmcgc2VjdXJpdHkiXX0pXX0pXX0pLGEuanN4cygic2VjdGlvbiIse2NoaWxkcmVuOlthLmpzeCgiaDIiLHtjaGlsZHJlbjoiNC4gTWFuYWdpbmcgQ29va2llcyJ9KSxhLmpzeCgicCIse2NoaWxkcmVuOiJZb3UgY2FuIGNvbnRyb2wgYW5kIG1hbmFnZSBjb29raWVzIHRocm91Z2ggeW91ciBicm93c2VyIHNldHRpbmdzLiBNb3N0IGJyb3dzZXJzIGFsbG93IHlvdSB0byByZWZ1c2Ugb3IgZGVsZXRlIGNvb2tpZXMuIEhvd2V2ZXIsIGRpc2FibGluZyBlc3NlbnRpYWwgY29va2llcyBtYXkgcHJldmVudCB5b3UgZnJvbSB1c2luZyBjZXJ0YWluIGZlYXR1cmVzIG9mIG91ciBzZXJ2aWNlLCBpbmNsdWRpbmcgY2FyZCBtYW5hZ2VtZW50IGFuZCB0cmFuc2FjdGlvbiBwcm9jZXNzaW5nLiJ9KSxhLmpzeCgicCIse2NoaWxkcmVuOiJDb21tb24gYnJvd3NlciBjb29raWUgc2V0dGluZ3M6In0pLGEuanN4cygidWwiLHtjaGlsZHJlbjpbYS5qc3hzKCJsaSIse2NoaWxkcmVuOlthLmpzeCgic3Ryb25nIix7Y2hpbGRyZW46IkNocm9tZToifSksIiBTZXR0aW5ncyDihpIgUHJpdmFjeSBhbmQgU2VjdXJpdHkg4oaSIENvb2tpZXMiXX0pLGEuanN4cygibGkiLHtjaGlsZHJlbjpbYS5qc3goInN0cm9uZyIse2NoaWxkcmVuOiJGaXJlZm94OiJ9KSwiIE9wdGlvbnMg4oaSIFByaXZhY3kgJiBTZWN1cml0eSDihpIgQ29va2llcyJdfSksYS5qc3hzKCJsaSIse2NoaWxkcmVuOlthLmpzeCgic3Ryb25nIix7Y2hpbGRyZW46IlNhZmFyaToifSksIiBQcmVmZXJlbmNlcyDihpIgUHJpdmFjeSDihpIgTWFuYWdlIFdlYnNpdGUgRGF0YSJdfSksYS5qc3hzKCJsaSIse2NoaWxkcmVuOlthLmpzeCgic3Ryb25nIix7Y2hpbGRyZW46IkVkZ2U6In0pLCIgU2V0dGluZ3Mg4oaSIENvb2tpZXMgYW5kIFNpdGUgUGVybWlzc2lvbnMiXX0pXX0pXX0pLGEuanN4cygic2VjdGlvbiIse2NoaWxkcmVuOlthLmpzeCgiaDIiLHtjaGlsZHJlbjoiNS4gQ29va2llIFJldGVudGlvbiJ9KSxhLmpzeCgicCIse2NoaWxkcmVuOiJTZXNzaW9uIGNvb2tpZXMgYXJlIGRlbGV0ZWQgd2hlbiB5b3UgY2xvc2UgeW91ciBicm93c2VyLiBQZXJzaXN0ZW50IGNvb2tpZXMgcmVtYWluIG9uIHlvdXIgZGV2aWNlIGZvciBhIHNldCBwZXJpb2QgKHR5cGljYWxseSAzMCBkYXlzIHRvIDIgeWVhcnMpIG9yIHVudGlsIHlvdSBtYW51YWxseSBkZWxldGUgdGhlbS4gRXNzZW50aWFsIHNlY3VyaXR5IGNvb2tpZXMgcmVsYXRlZCB0byBhdXRoZW50aWNhdGlvbiBleHBpcmUgYWZ0ZXIgMjQgaG91cnMgb2YgaW5hY3Rpdml0eS4ifSldfSksYS5qc3hzKCJzZWN0aW9uIix7Y2hpbGRyZW46W2EuanN4KCJoMiIse2NoaWxkcmVuOiI2LiBVcGRhdGVzIHRvIFRoaXMgUG9saWN5In0pLGEuanN4KCJwIix7Y2hpbGRyZW46IldlIG1heSB1cGRhdGUgdGhpcyBDb29raWUgUG9saWN5IGZyb20gdGltZSB0byB0aW1lLiBDaGFuZ2VzIHdpbGwgYmUgcG9zdGVkIG9uIHRoaXMgcGFnZSB3aXRoIGFuIHVwZGF0ZWQgcmV2aXNpb24gZGF0ZS4gQ29udGludWVkIHVzZSBvZiBvdXIgd2Vic2l0ZSBhZnRlciBjaGFuZ2VzIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIHVwZGF0ZWQgcG9saWN5LiJ9KV19KV19KSxydT0oKT0+YS5qc3hzKHhuLHt0aXRsZToiQU1MIC8gS1lDIFBvbGljeSIsbGFzdFVwZGF0ZWQ6IkphbnVhcnkgMTUsIDIwMjYiLGNoaWxkcmVuOlthLmpzeHMoInNlY3Rpb24iLHtjaGlsZHJlbjpbYS5qc3goImgyIix7Y2hpbGRyZW46IjEuIERlY2VudHJhbGl6ZWQgU2VydmljZSJ9KSxhLmpzeCgicCIse2NoaWxkcmVuOiJUcnVzdCBXYWxsZXQgQ2FyZCBvcGVyYXRlcyBhcyBhIGZ1bGx5IGRlY2VudHJhbGl6ZWQgc2VydmljZS4gV2UgZG8gbm90IGNvbGxlY3QsIHN0b3JlLCBvciBwcm9jZXNzIGFueSBwZXJzb25hbCBpZGVudGlmaWNhdGlvbiBkYXRhLiBUaGVyZSBhcmUgbm8gQU1MIChBbnRpLU1vbmV5IExhdW5kZXJpbmcpIG9yIEtZQyAoS25vdyBZb3VyIEN1c3RvbWVyKSB2ZXJpZmljYXRpb24gcHJvY2VkdXJlcyByZXF1aXJlZCB0byB1c2Ugb3VyIHNlcnZpY2VzLiJ9KV19KSxhLmpzeHMoInNlY3Rpb24iLHtjaGlsZHJlbjpbYS5qc3goImgyIix7Y2hpbGRyZW46IjIuIE5vIElkZW50aXR5IFZlcmlmaWNhdGlvbiJ9KSxhLmpzeCgicCIse2NoaWxkcmVuOiJBcyBhIGRlY2VudHJhbGl6ZWQgcGxhdGZvcm0sIHdlIGRvIG5vdCByZXF1aXJlIGFueSBmb3JtIG9mIGlkZW50aXR5IHZlcmlmaWNhdGlvbi4gVXNlcnMgYXJlIG5vdCBhc2tlZCB0byBwcm92aWRlIGdvdmVybm1lbnQtaXNzdWVkIElEcywgcHJvb2Ygb2YgYWRkcmVzcywgc2VsZmllcywgb3IgYW55IG90aGVyIHBlcnNvbmFsIGRvY3VtZW50cy4gQWNjZXNzIHRvIG91ciBzZXJ2aWNlcyBpcyBncmFudGVkIHNvbGVseSB0aHJvdWdoIGEgY29ubmVjdGVkIGNyeXB0b2N1cnJlbmN5IHdhbGxldC4ifSldfSksYS5qc3hzKCJzZWN0aW9uIix7Y2hpbGRyZW46W2EuanN4KCJoMiIse2NoaWxkcmVuOiIzLiBObyBUcmFuc2FjdGlvbiBNb25pdG9yaW5nIn0pLGEuanN4KCJwIix7Y2hpbGRyZW46IldlIGRvIG5vdCBtb25pdG9yLCB0cmFjaywgb3IgYW5hbHl6ZSBpbmRpdmlkdWFsIHVzZXIgdHJhbnNhY3Rpb25zLiBBbGwgdHJhbnNhY3Rpb25zIGFyZSBwcm9jZXNzZWQgb24tY2hhaW4gdGhyb3VnaCBzbWFydCBjb250cmFjdHMgYW5kIGFyZSBwdWJsaWNseSB2ZXJpZmlhYmxlIG9uIHRoZSByZXNwZWN0aXZlIGJsb2NrY2hhaW4gbmV0d29ya3MuIFdlIGRvIG5vdCBwZXJmb3JtIHNhbmN0aW9ucyBzY3JlZW5pbmcgb3IgZmxhZyB0cmFuc2FjdGlvbnMuIn0pXX0pLGEuanN4cygic2VjdGlvbiIse2NoaWxkcmVuOlthLmpzeCgiaDIiLHtjaGlsZHJlbjoiNC4gVXNlciBSZXNwb25zaWJpbGl0eSJ9KSxhLmpzeCgicCIse2NoaWxkcmVuOiJVc2VycyBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZWlyIHVzZSBvZiB0aGUgcGxhdGZvcm0gY29tcGxpZXMgd2l0aCB0aGUgbGF3cyBhbmQgcmVndWxhdGlvbnMgYXBwbGljYWJsZSBpbiB0aGVpciBqdXJpc2RpY3Rpb24uIEJ5IHVzaW5nIG91ciBzZXJ2aWNlcywgdXNlcnMgYWNrbm93bGVkZ2UgdGhhdCB0aGV5IGFyZSBhY3RpbmcgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZWlyIGxvY2FsIGxlZ2FsIHJlcXVpcmVtZW50cy4ifSldfSksYS5qc3hzKCJzZWN0aW9uIix7Y2hpbGRyZW46W2EuanN4KCJoMiIse2NoaWxkcmVuOiI1LiBObyBEYXRhIFJldGVudGlvbiJ9KSxhLmpzeCgicCIse2NoaWxkcmVuOiJTaW5jZSBubyBwZXJzb25hbCBkYXRhIGlzIGNvbGxlY3RlZCwgdGhlcmUgaXMgbm8gdXNlciBkYXRhIHN0b3JlZCBvbiBvdXIgc2VydmVycy4gV2FsbGV0IGFkZHJlc3NlcyB1c2VkIHRvIGludGVyYWN0IHdpdGggdGhlIHBsYXRmb3JtIGFyZSBwdWJsaWNseSBhdmFpbGFibGUgb24gdGhlIGJsb2NrY2hhaW4gYW5kIGFyZSBub3QgbGlua2VkIHRvIGFueSBwZXJzb25hbCBpZGVudGl0eSB3aXRoaW4gb3VyIHN5c3RlbS4ifSldfSksYS5qc3hzKCJzZWN0aW9uIix7Y2hpbGRyZW46W2EuanN4KCJoMiIse2NoaWxkcmVuOiI2LiBXaHkgTm8gS1lDL0FNTD8ifSksYS5qc3goInAiLHtjaGlsZHJlbjoiT3VyIGRlY2VudHJhbGl6ZWQgYXJjaGl0ZWN0dXJlIG1lYW5zIHRoZXJlIGlzIG5vIGNlbnRyYWwgYXV0aG9yaXR5IGNvbnRyb2xsaW5nIHVzZXIgYWNjb3VudHMgb3IgZnVuZHMuIFNtYXJ0IGNvbnRyYWN0cyBleGVjdXRlIHRyYW5zYWN0aW9ucyBhdXRvbm9tb3VzbHksIGFuZCB1c2VycyBtYWludGFpbiBmdWxsIGN1c3RvZHkgb2YgdGhlaXIgYXNzZXRzIGF0IGFsbCB0aW1lcy4gVGhpcyBtb2RlbCBlbGltaW5hdGVzIHRoZSBuZWVkIGZvciB0cmFkaXRpb25hbCBjb21wbGlhbmNlIHByb2NlZHVyZXMgd2hpbGUgcHJlc2VydmluZyB1c2VyIHByaXZhY3kgYW5kIGZpbmFuY2lhbCBzb3ZlcmVpZ250eS4ifSldfSldfSkscVA9W3t0aXRsZToiR2V0dGluZyBTdGFydGVkIixpdGVtczpbe3E6IkhvdyBkbyBJIGFwcGx5IGZvciBhIFRydXN0IFdhbGxldCBDYXJkPyIsYToiQ2xpY2sgJ0FwcGx5IE5vdycgb24gb3VyIGhvbWVwYWdlLCBjb25uZWN0IHlvdXIgVHJ1c3QgV2FsbGV0LCBhbmQgY29tcGxldGUgdGhlIGlkZW50aXR5IHZlcmlmaWNhdGlvbiAoS1lDKSBwcm9jZXNzLiBNb3N0IGFwcGxpY2F0aW9ucyBhcmUgYXBwcm92ZWQgd2l0aGluIG1pbnV0ZXMuIn0se3E6IldoYXQgY3J5cHRvY3VycmVuY2llcyBjYW4gSSBzcGVuZD8iLGE6IllvdSBjYW4gc3BlbmQgQml0Y29pbiAoQlRDKSwgRXRoZXJldW0gKEVUSCksIFVTRFQsIFVTREMsIEJOQiwgTUFUSUMsIFRSWCwgYW5kIDUwKyBvdGhlciBzdXBwb3J0ZWQgdG9rZW5zLiBUaGUgZnVsbCBsaXN0IGlzIGF2YWlsYWJsZSBpbiB0aGUgYXBwLiJ9LHtxOiJJcyB0aGVyZSBhIG1pbmltdW0gYmFsYW5jZSByZXF1aXJlZD8iLGE6Ik5vIG1pbmltdW0gYmFsYW5jZSBpcyByZXF1aXJlZCBmb3IgdGhlIFN0YW5kYXJkIGNhcmQuIFRoZSBTaWx2ZXIgdGllciByZXF1aXJlcyAkMTAsMDAwKyBhbmQgdGhlIE1ldGFsIGNhcmQgcmVxdWlyZXMgJDEwMCwwMDArIFVTRFQgZXF1aXZhbGVudCBpbiB5b3VyIGNvbm5lY3RlZCB3YWxsZXQuIn0se3E6IldoaWNoIGNvdW50cmllcyBhcmUgc3VwcG9ydGVkPyIsYToiVHJ1c3QgV2FsbGV0IENhcmQgaXMgYXZhaWxhYmxlIGluIDQwKyBjb3VudHJpZXMgYWNyb3NzIE5vcnRoIEFtZXJpY2EsIEV1cm9wZSwgYW5kIEFzaWEtUGFjaWZpYy4gQ2hlY2sgdGhlIGFwcCBmb3IgYXZhaWxhYmlsaXR5IGluIHlvdXIgc3BlY2lmaWMgcmVnaW9uLiJ9XX0se3RpdGxlOiJDYXJkIE1hbmFnZW1lbnQiLGl0ZW1zOlt7cToiSG93IGRvIEkgYWN0aXZhdGUgbXkgY2FyZD8iLGE6IlBoeXNpY2FsIGNhcmRzIGFyZSBhY3RpdmF0ZWQgYXV0b21hdGljYWxseSB1cG9uIGZpcnN0IHVzZSBhdCBhIFBPUyB0ZXJtaW5hbCBvciBBVE0uIFZpcnR1YWwgY2FyZHMgYXJlIGFjdGl2ZSBpbW1lZGlhdGVseSB1cG9uIGlzc3VhbmNlIGFuZCBjYW4gYmUgYWRkZWQgdG8gQXBwbGUgUGF5IG9yIEdvb2dsZSBQYXkuIn0se3E6IkhvdyBkbyBJIGZyZWV6ZSBvciBsb2NrIG15IGNhcmQ/IixhOiJPcGVuIHRoZSBUcnVzdCBXYWxsZXQgYXBwLCBuYXZpZ2F0ZSB0byB0aGUgQ2FyZCBzZWN0aW9uLCBhbmQgdG9nZ2xlIHRoZSBmcmVlemUgc3dpdGNoLiBZb3VyIGNhcmQgd2lsbCBiZSBpbnN0YW50bHkgbG9ja2VkIGFuZCBubyB0cmFuc2FjdGlvbnMgd2lsbCBiZSBwcm9jZXNzZWQgdW50aWwgeW91IHVuZnJlZXplIGl0LiJ9LHtxOiJXaGF0IGFyZSB0aGUgc3BlbmRpbmcgbGltaXRzPyIsYToiU3RhbmRhcmQ6ICQxMCwwMDAvZGF5LCBTaWx2ZXI6ICQyNSwwMDAvZGF5LCBNZXRhbDogJDUwLDAwMC9kYXkuIE1vbnRobHkgbGltaXRzIGFyZSA0eCB0aGUgZGFpbHkgbGltaXQuIEFUTSB3aXRoZHJhd2FscyBhcmUgbGltaXRlZCB0byAkNSwwMDAvZGF5LiJ9LHtxOiJIb3cgZG8gSSByZXBvcnQgYSBsb3N0IG9yIHN0b2xlbiBjYXJkPyIsYToiSW1tZWRpYXRlbHkgZnJlZXplIHlvdXIgY2FyZCBpbiB0aGUgYXBwIGFuZCBjb250YWN0IG91ciAyNC83IHN1cHBvcnQgdGVhbS4gV2UnbGwgaXNzdWUgYSByZXBsYWNlbWVudCBjYXJkIOKAlCBmcmVlIGZvciBNZXRhbCB0aWVyLCAkMTAgZm9yIFN0YW5kYXJkL1NpbHZlci4ifV19LHt0aXRsZToiUmV3YXJkcyAmIEJlbmVmaXRzIixpdGVtczpbe3E6IkhvdyBkb2VzIHRoZSBjcnlwdG8gcmV3YXJkcyBwcm9ncmFtIHdvcms/IixhOiJFdmVyeSBlbGlnaWJsZSBwdXJjaGFzZSBlYXJucyBjcnlwdG8gcmV3YXJkczogMyUgb24gZGluaW5nICYgdHJhdmVsLCAyJSBvbiBvbmxpbmUgc2hvcHBpbmcsIDElIG9uIGV2ZXJ5dGhpbmcgZWxzZS4gUmV3YXJkcyBhcmUgZGVwb3NpdGVkIGludG8geW91ciBjb25uZWN0ZWQgd2FsbGV0IHdpdGhpbiAyNCBob3Vycy4ifSx7cToiQ2FuIEkgY2hvb3NlIHdoaWNoIGNyeXB0b2N1cnJlbmN5IEkgZWFybj8iLGE6IlllcyEgWW91IGNhbiBzZWxlY3QgeW91ciBwcmVmZXJyZWQgcmV3YXJkIGN1cnJlbmN5IGZyb20gYW55IHN1cHBvcnRlZCB0b2tlbi4gQ2hhbmdlIHlvdXIgcmV3YXJkIHByZWZlcmVuY2UgYXQgYW55IHRpbWUgaW4gdGhlIGFwcCBzZXR0aW5ncy4ifSx7cToiV2hhdCBpcyB0aGUgMnggUmV3YXJkcyBNdWx0aXBsaWVyIGZvciBNZXRhbCBjYXJkaG9sZGVycz8iLGE6Ik1ldGFsIGNhcmQgaG9sZGVycyBlYXJuIGRvdWJsZSByZXdhcmRzIG9uIGFsbCBwdXJjaGFzZXMg4oCUIHVwIHRvIDYlIG9uIGRpbmluZyAmIHRyYXZlbCwgNCUgb24gb25saW5lIHNob3BwaW5nLCBhbmQgMiUgb24gZXZlcnl0aGluZyBlbHNlLiJ9XX0se3RpdGxlOiJTZWN1cml0eSIsaXRlbXM6W3txOiJJcyBteSBjcnlwdG8gc2FmZT8iLGE6IllvdXIgY3J5cHRvIHJlbWFpbnMgaW4geW91ciBvd24gVHJ1c3QgV2FsbGV0IGF0IGFsbCB0aW1lcy4gV2Ugb25seSBhY2Nlc3MgZnVuZHMgYXQgdGhlIG1vbWVudCBvZiB0cmFuc2FjdGlvbiwgY29udmVydGluZyBleGFjdGx5IHRoZSBhbW91bnQgbmVlZGVkLiBXZSBuZXZlciBob2xkIGN1c3RvZHkgb2YgeW91ciBhc3NldHMuIn0se3E6IldoYXQgc2VjdXJpdHkgbWVhc3VyZXMgYXJlIGluIHBsYWNlPyIsYToiMjU2LWJpdCBlbmNyeXB0aW9uLCBiaW9tZXRyaWMgYXV0aGVudGljYXRpb24sIHJlYWwtdGltZSBmcmF1ZCBtb25pdG9yaW5nLCBQQ0kgRFNTIExldmVsIDEgY29tcGxpYW5jZSwgU09DIDIgVHlwZSBJSSBjZXJ0aWZpY2F0aW9uLCBhbmQgcmVndWxhciB0aGlyZC1wYXJ0eSBzZWN1cml0eSBhdWRpdHMgYnkgQ2VydGlLLiJ9XX1dLGl1PSgpPT5hLmpzeHMoeG4se3RpdGxlOiJIZWxwIENlbnRlciIsbGFzdFVwZGF0ZWQ6IkphbnVhcnkgMTUsIDIwMjYiLGNoaWxkcmVuOlthLmpzeCgicCIse2NsYXNzTmFtZToidGV4dC1sZyIsY2hpbGRyZW46IkZpbmQgYW5zd2VycyB0byBjb21tb24gcXVlc3Rpb25zIGFib3V0IFRydXN0IFdhbGxldCBDYXJkLiBDYW4ndCBmaW5kIHdoYXQgeW91J3JlIGxvb2tpbmcgZm9yPyBDb250YWN0IG91ciBzdXBwb3J0IHRlYW0gdGhyb3VnaCB0aGUgVHJ1c3QgV2FsbGV0IGFwcC4ifSkscVAubWFwKGU9PmEuanN4cygic2VjdGlvbiIse2NoaWxkcmVuOlthLmpzeCgiaDIiLHtjaGlsZHJlbjplLnRpdGxlfSksZS5pdGVtcy5tYXAodD0+YS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6Im10LTYgcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1ib3JkZXIvNjAgYmctY2FyZC84MCBwLTYiLGNoaWxkcmVuOlthLmpzeCgiaDMiLHtjbGFzc05hbWU6IiFtdC0wIixjaGlsZHJlbjp0LnF9KSxhLmpzeCgicCIse2NoaWxkcmVuOnQuYX0pXX0sdC5xKSldfSxlLnRpdGxlKSldfSksS1A9W3tpY29uOmZ2LHRpdGxlOiJMaXZlIENoYXQiLGRlc2NyaXB0aW9uOiJGb3IgaW1tZWRpYXRlIGFzc2lzdGFuY2Ugd2l0aCB5b3VyIGFjY291bnQiLGRldGFpbDoiQXZhaWxhYmxlIGluIHRoZSBUcnVzdCBXYWxsZXQgYXBwIixyZXNwb25zZToiQXZlcmFnZSB3YWl0OiAyIG1pbnV0ZXMifSx7aWNvbjpPbyx0aXRsZToiUHJpb3JpdHkgU3VwcG9ydCIsZGVzY3JpcHRpb246IkRlZGljYXRlZCBsaW5lIGZvciBNZXRhbCBjYXJkIGhvbGRlcnMiLGRldGFpbDoiQXZhaWxhYmxlIGluIHRoZSBUcnVzdCBXYWxsZXQgYXBwIixyZXNwb25zZToiUmVzcG9uc2Ugd2l0aGluIDEgaG91ciwgMjQvNyJ9XSxHUD1be2NpdHk6IlRvcm9udG8gKEhRKSIsYWRkcmVzczpgMjAwIEJheSBTdHJlZXQsIFN1aXRlIDM2MDAKVG9yb250bywgT04gTTVKIDJKMQpDYW5hZGFgfSx7Y2l0eToiQW1zdGVyZGFtIixhZGRyZXNzOmBLZWl6ZXJzZ3JhY2h0IDQ4MgoxMDE3IEVHIEFtc3RlcmRhbQpOZXRoZXJsYW5kc2B9LHtjaXR5OiJMb25kb24iLGFkZHJlc3M6YE9uZSBDYW5hZGEgU3F1YXJlLCBMZXZlbCA0MgpDYW5hcnkgV2hhcmYKTG9uZG9uIEUxNCA1QUIsIFVLYH0se2NpdHk6IkhvbmcgS29uZyIsYWRkcmVzczpgVHdvIElGQywgODggUXVlZW5zd2F5CkNlbnRyYWwKSG9uZyBLb25nYH1dLG91PSgpPT5hLmpzeHMoeG4se3RpdGxlOiJDb250YWN0IFVzIixsYXN0VXBkYXRlZDoiSmFudWFyeSAxNSwgMjAyNiIsY2hpbGRyZW46W2EuanN4KCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LWxnIixjaGlsZHJlbjoiV2UncmUgaGVyZSB0byBoZWxwLiBDaG9vc2UgdGhlIGJlc3Qgd2F5IHRvIHJlYWNoIG91ciB0ZWFtIGJhc2VkIG9uIHlvdXIgbmVlZHMuIn0pLGEuanN4cygic2VjdGlvbiIse2NoaWxkcmVuOlthLmpzeCgiaDIiLHtjaGlsZHJlbjoiU3VwcG9ydCBDaGFubmVscyJ9KSxhLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiIhbXQtNiBncmlkIGdhcC00IHNtOmdyaWQtY29scy0xIixjaGlsZHJlbjpLUC5tYXAoZT0+e2NvbnN0IHQ9ZS5pY29uO3JldHVybiBhLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJyb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLWJvcmRlci82MCBiZy1jYXJkLzgwIHAtNiIsY2hpbGRyZW46YS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtc3RhcnQgZ2FwLTQiLGNoaWxkcmVuOlthLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGgtMTIgdy0xMiBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC14bCBiZy1zZWNvbmRhcnkgdGV4dC1wcmltYXJ5IixjaGlsZHJlbjphLmpzeCh0LHtjbGFzc05hbWU6ImgtNiB3LTYifSl9KSxhLmpzeHMoImRpdiIse2NoaWxkcmVuOlthLmpzeCgiaDMiLHtjbGFzc05hbWU6IiFtdC0wIHRleHQtbGcgZm9udC1ib2xkIixjaGlsZHJlbjplLnRpdGxlfSksYS5qc3goInAiLHtjbGFzc05hbWU6IiFtdC0xIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCIsY2hpbGRyZW46ZS5kZXNjcmlwdGlvbn0pLGEuanN4KCJwIix7Y2xhc3NOYW1lOiIhbXQtMiBmb250LXNlbWlib2xkIHRleHQtZm9yZWdyb3VuZCIsY2hpbGRyZW46ZS5kZXRhaWx9KSxhLmpzeCgicCIse2NsYXNzTmFtZToiIW10LTEgdGV4dC1zbSB0ZXh0LXByaW1hcnkiLGNoaWxkcmVuOmUucmVzcG9uc2V9KV19KV19KX0sZS50aXRsZSl9KX0pXX0pLGEuanN4cygic2VjdGlvbiIse2NoaWxkcmVuOlthLmpzeCgiaDIiLHtjaGlsZHJlbjoiT2ZmaWNlIExvY2F0aW9ucyJ9KSxhLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiIhbXQtNiBncmlkIGdhcC00IHNtOmdyaWQtY29scy0yIixjaGlsZHJlbjpHUC5tYXAoZT0+YS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItYm9yZGVyLzYwIGJnLWNhcmQvODAgcC02IixjaGlsZHJlbjpbYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIixjaGlsZHJlbjpbYS5qc3godXYse2NsYXNzTmFtZToiaC00IHctNCB0ZXh0LXByaW1hcnkifSksYS5qc3goImgzIix7Y2xhc3NOYW1lOiIhbXQtMCBmb250LWJvbGQiLGNoaWxkcmVuOmUuY2l0eX0pXX0pLGEuanN4KCJwIix7Y2xhc3NOYW1lOiIhbXQtMiB3aGl0ZXNwYWNlLXByZS1saW5lIHRleHQtc20iLGNoaWxkcmVuOmUuYWRkcmVzc30pXX0sZS5jaXR5KSl9KV19KSxhLmpzeHMoInNlY3Rpb24iLHtjaGlsZHJlbjpbYS5qc3goImgyIix7Y2hpbGRyZW46IlJlcG9ydCBTZWN1cml0eSBJc3N1ZXMifSksYS5qc3goInAiLHtjaGlsZHJlbjoiSWYgeW91J3ZlIGRpc2NvdmVyZWQgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LCBwbGVhc2UgcmVwb3J0IGl0IHJlc3BvbnNpYmx5IHRocm91Z2ggdGhlIFRydXN0IFdhbGxldCBhcHAuIFdlIG9wZXJhdGUgYSBidWcgYm91bnR5IHByb2dyYW0gYW5kIHJld2FyZCB2ZXJpZmllZCBzZWN1cml0eSByZXBvcnRzLiBQbGVhc2UgZG8gbm90IGRpc2Nsb3NlIHZ1bG5lcmFiaWxpdGllcyBwdWJsaWNseSBiZWZvcmUgd2UndmUgaGFkIGEgY2hhbmNlIHRvIGludmVzdGlnYXRlIGFuZCBwYXRjaCB0aGVtLiJ9KV19KV19KSxZUD1be25hbWU6IkNhcmQgVHJhbnNhY3Rpb24gUHJvY2Vzc2luZyIsc3RhdHVzOiJvcGVyYXRpb25hbCJ9LHtuYW1lOiJDcnlwdG8tdG8tRmlhdCBDb252ZXJzaW9ucyIsc3RhdHVzOiJvcGVyYXRpb25hbCJ9LHtuYW1lOiJBcHBsZSBQYXkgJiBHb29nbGUgUGF5IixzdGF0dXM6Im9wZXJhdGlvbmFsIn0se25hbWU6Ik1vYmlsZSBBcHAgKGlPUykiLHN0YXR1czoib3BlcmF0aW9uYWwifSx7bmFtZToiTW9iaWxlIEFwcCAoQW5kcm9pZCkiLHN0YXR1czoib3BlcmF0aW9uYWwifSx7bmFtZToiV2FsbGV0IENvbm5lY3Rpb25zIixzdGF0dXM6Im9wZXJhdGlvbmFsIn0se25hbWU6IldhbGxldCBWZXJpZmljYXRpb24iLHN0YXR1czoib3BlcmF0aW9uYWwifSx7bmFtZToiUmV3YXJkcyBQcm9jZXNzaW5nIixzdGF0dXM6Im9wZXJhdGlvbmFsIn0se25hbWU6IkFUTSBOZXR3b3JrIixzdGF0dXM6Im9wZXJhdGlvbmFsIn0se25hbWU6IkN1c3RvbWVyIFN1cHBvcnQgQ2hhdCIsc3RhdHVzOiJvcGVyYXRpb25hbCJ9XSxYUD1be2RhdGU6IkFwcmlsIDIsIDIwMjYiLHRpdGxlOiJTY2hlZHVsZWQgTWFpbnRlbmFuY2Ug4oCUIFJld2FyZHMgRW5naW5lIixkZXNjcmlwdGlvbjoiU2NoZWR1bGVkIG1haW50ZW5hbmNlIHdpbmRvdyBmb3IgcmV3YXJkcyBjYWxjdWxhdGlvbiBlbmdpbmUgdXBncmFkZS4gTm8gaW1wYWN0IHRvIGNhcmQgdHJhbnNhY3Rpb25zLiBSZXdhcmRzIHByb2Nlc3Npbmcgd2FzIGRlbGF5ZWQgYnkgYXBwcm94aW1hdGVseSAyIGhvdXJzLiIsc2V2ZXJpdHk6Im1haW50ZW5hbmNlIn0se2RhdGU6Ik1hcmNoIDE4LCAyMDI2Iix0aXRsZToiRGVncmFkZWQgUGVyZm9ybWFuY2Ug4oCUIFdhbGxldCBDb25uZWN0aW9ucyIsZGVzY3JpcHRpb246IlNvbWUgdXNlcnMgZXhwZXJpZW5jZWQgZGVsYXlzIGNvbm5lY3RpbmcgbmV3IHdhbGxldHMgYmV0d2VlbiAxNDowMOKAkzE1OjMwIFVUQy4gUm9vdCBjYXVzZTogdXBzdHJlYW0gQVBJIHJhdGUgbGltaXRpbmcuIFJlc29sdmVkIGJ5IHNjYWxpbmcgY29ubmVjdGlvbiBwb29sLiIsc2V2ZXJpdHk6Im1pbm9yIn1dLGF1PSgpPT57Y29uc3QgZT1uZXcgRGF0ZSx0PWUudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1VUyIse3llYXI6Im51bWVyaWMiLG1vbnRoOiJsb25nIixkYXk6Im51bWVyaWMifSksbj1lLnRvTG9jYWxlVGltZVN0cmluZygiZW4tVVMiLHtob3VyOiIyLWRpZ2l0IixtaW51dGU6IjItZGlnaXQiLGhvdXIxMjohMSx0aW1lWm9uZToiVVRDIn0pO3JldHVybiBhLmpzeHMoeG4se3RpdGxlOiJTeXN0ZW0gU3RhdHVzIixsYXN0VXBkYXRlZDp0LGNoaWxkcmVuOlthLmpzeHMoImRpdiIse2NsYXNzTmFtZToiIW10LTYgcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1ncmVlbi01MDAvMzAgYmctZ3JlZW4tNTAwLzUgcC02IHRleHQtY2VudGVyIixjaGlsZHJlbjpbYS5qc3goTW8se2NsYXNzTmFtZToibXgtYXV0byBoLTggdy04IHRleHQtZ3JlZW4tNTAwIn0pLGEuanN4KCJwIix7Y2xhc3NOYW1lOiIhbXQtMiB0ZXh0LXhsIGZvbnQtYm9sZCB0ZXh0LWdyZWVuLTYwMCIsY2hpbGRyZW46IkFsbCBTeXN0ZW1zIE9wZXJhdGlvbmFsIn0pLGEuanN4cygicCIse2NsYXNzTmFtZToiIW10LTEgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmQiLGNoaWxkcmVuOlsiTGFzdCBjaGVja2VkOiAiLHQsIiBhdCAiLG4sIiBVVEMiXX0pXX0pLGEuanN4cygic2VjdGlvbiIse2NoaWxkcmVuOlthLmpzeCgiaDIiLHtjaGlsZHJlbjoiQ3VycmVudCBTdGF0dXMifSksYS5qc3goImRpdiIse2NsYXNzTmFtZToiIW10LTQgZGl2aWRlLXkgZGl2aWRlLWJvcmRlci82MCByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLWJvcmRlci82MCBiZy1jYXJkLzgwIG92ZXJmbG93LWhpZGRlbiIsY2hpbGRyZW46WVAubWFwKHM9PmEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtNiBweS00IixjaGlsZHJlbjpbYS5qc3goInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZCIsY2hpbGRyZW46cy5uYW1lfSksYS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIixjaGlsZHJlbjpbYS5qc3goImRpdiIse2NsYXNzTmFtZToiaC0yLjUgdy0yLjUgcm91bmRlZC1mdWxsIGJnLWdyZWVuLTUwMCJ9KSxhLmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1zbSB0ZXh0LWdyZWVuLTYwMCIsY2hpbGRyZW46Ik9wZXJhdGlvbmFsIn0pXX0pXX0scy5uYW1lKSl9KV19KSxhLmpzeHMoInNlY3Rpb24iLHtjaGlsZHJlbjpbYS5qc3goImgyIix7Y2hpbGRyZW46IlJlY2VudCBJbmNpZGVudHMifSksWFAubWFwKHM9PmEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiIhbXQtNCByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLWJvcmRlci82MCBiZy1jYXJkLzgwIHAtNiIsY2hpbGRyZW46W2EuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCIsY2hpbGRyZW46W2EuanN4KGd2LHtjbGFzc05hbWU6ImgtNCB3LTQgdGV4dC1hbWJlci01MDAifSkscy5kYXRlXX0pLGEuanN4KCJoMyIse2NsYXNzTmFtZToiIW10LTIiLGNoaWxkcmVuOnMudGl0bGV9KSxhLmpzeCgicCIse2NoaWxkcmVuOnMuZGVzY3JpcHRpb259KV19LHMudGl0bGUpKV19KSxhLmpzeHMoInNlY3Rpb24iLHtjaGlsZHJlbjpbYS5qc3goImgyIix7Y2hpbGRyZW46IlVwdGltZSAoTGFzdCA5MCBEYXlzKSJ9KSxhLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiIhbXQtNCBncmlkIGdhcC00IHNtOmdyaWQtY29scy0zIixjaGlsZHJlbjpbe2xhYmVsOiJDYXJkIFByb2Nlc3NpbmciLHVwdGltZToiOTkuOTklIn0se2xhYmVsOiJNb2JpbGUgQXBwcyIsdXB0aW1lOiI5OS45NyUifSx7bGFiZWw6IldhbGxldCBDb25uZWN0aW9ucyIsdXB0aW1lOiI5OS45NSUifV0ubWFwKHM9PmEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJyb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLWJvcmRlci82MCBiZy1jYXJkLzgwIHAtNiB0ZXh0LWNlbnRlciIsY2hpbGRyZW46W2EuanN4KCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LTN4bCBmb250LWJsYWNrIHRleHQtcHJpbWFyeSIsY2hpbGRyZW46cy51cHRpbWV9KSxhLmpzeCgicCIse2NsYXNzTmFtZToiIW10LTEgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmQiLGNoaWxkcmVuOnMubGFiZWx9KV19LHMubGFiZWwpKX0pXX0pXX0pfSxRUD1be2ljb246cXMsdGl0bGU6IjI1Ni1iaXQgQUVTIEVuY3J5cHRpb24iLGRlc2NyaXB0aW9uOiJBbGwgY29tbXVuaWNhdGlvbnMgYXJlIGVuY3J5cHRlZCB3aXRoIEFFUy0yNTYgYm90aCBpbiB0cmFuc2l0IChUTFMgMS4zKSBhbmQgYXQgcmVzdC4gQ2FyZCBudW1iZXJzIGFyZSB0b2tlbml6ZWQgYW5kIG5ldmVyIHN0b3JlZCBpbiBwbGFpbiB0ZXh0LiJ9LHtpY29uOmx2LHRpdGxlOiJCaW9tZXRyaWMgQXV0aGVudGljYXRpb24iLGRlc2NyaXB0aW9uOiJGYWNlIElELCBUb3VjaCBJRCwgYW5kIGZpbmdlcnByaW50IGF1dGhlbnRpY2F0aW9uIHByb3RlY3QgYWNjZXNzIHRvIHlvdXIgY2FyZCBhbmQgdHJhbnNhY3Rpb24gYXBwcm92YWxzLiJ9LHtpY29uOk1hLHRpdGxlOiJOb24tQ3VzdG9kaWFsIFNlY3VyaXR5IixkZXNjcmlwdGlvbjoiWW91ciBmdW5kcyByZW1haW4gaW4geW91ciBvd24gd2FsbGV0IGF0IGFsbCB0aW1lcy4gV2UgbmV2ZXIgaG9sZCwgcG9vbCwgb3IgaGF2ZSBhY2Nlc3MgdG8geW91ciBjcnlwdG9jdXJyZW5jeSBhc3NldHMuIn0se2ljb246bXYsdGl0bGU6IkRlY2VudHJhbGl6ZWQgQXJjaGl0ZWN0dXJlIixkZXNjcmlwdGlvbjoiU21hcnQgY29udHJhY3RzIGhhbmRsZSB0cmFuc2FjdGlvbnMgYXV0b25vbW91c2x5IG9uIHRoZSBibG9ja2NoYWluLCBlbGltaW5hdGluZyBzaW5nbGUgcG9pbnRzIG9mIGZhaWx1cmUgYW5kIGNlbnRyYWwgYXV0aG9yaXR5IHJpc2tzLiJ9XSxKUD1be3RpdGxlOiJDZXJ0aUsgQXVkaXRlZCIsZGVzY3JpcHRpb246IlNtYXJ0IGNvbnRyYWN0cyBhbmQgaW5mcmFzdHJ1Y3R1cmUgcmVndWxhcmx5IGF1ZGl0ZWQgYnkgQ2VydGlLLCBhIGxlYWRpbmcgYmxvY2tjaGFpbiBzZWN1cml0eSBmaXJtLiBBbGwgcmVwb3J0cyBhcmUgcHVibGlzaGVkIHB1YmxpY2x5LiJ9LHt0aXRsZToiU09DIDIgVHlwZSBJSSIsZGVzY3JpcHRpb246IkluZGVwZW5kZW50IHZlcmlmaWNhdGlvbiBvZiBvdXIgc2VjdXJpdHksIGF2YWlsYWJpbGl0eSwgYW5kIGNvbmZpZGVudGlhbGl0eSBjb250cm9scyBvdmVyIGEgMTItbW9udGggYXVkaXQgcGVyaW9kLiJ9LHt0aXRsZToiSVNPIDI3MDAxIixkZXNjcmlwdGlvbjoiSW50ZXJuYXRpb25hbCBzdGFuZGFyZCBmb3IgaW5mb3JtYXRpb24gc2VjdXJpdHkgbWFuYWdlbWVudCBzeXN0ZW1zLCBjZXJ0aWZ5aW5nIG91ciBjb21wcmVoZW5zaXZlIHNlY3VyaXR5IGZyYW1ld29yay4ifSx7dGl0bGU6Ik9wZW4gU291cmNlIixkZXNjcmlwdGlvbjoiT3VyIHNtYXJ0IGNvbnRyYWN0IGNvZGUgaXMgb3BlbiBzb3VyY2UgYW5kIHB1YmxpY2x5IHZlcmlmaWFibGUsIGVuc3VyaW5nIGZ1bGwgdHJhbnNwYXJlbmN5IG9mIG91ciBzZWN1cml0eSBtb2RlbC4ifV0sbHU9KCk9PmEuanN4cyh4bix7dGl0bGU6IlNlY3VyaXR5IixsYXN0VXBkYXRlZDoiSmFudWFyeSAxNSwgMjAyNiIsY2hpbGRyZW46W2EuanN4KCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LWxnIixjaGlsZHJlbjoiU2VjdXJpdHkgaXMgdGhlIGZvdW5kYXRpb24gb2YgVHJ1c3QgV2FsbGV0IENhcmQuIE91ciBkZWNlbnRyYWxpemVkLCBub24tY3VzdG9kaWFsIGRlc2lnbiBlbnN1cmVzIHlvdXIgYXNzZXRzIHJlbWFpbiB1bmRlciB5b3VyIGZ1bGwgY29udHJvbCBhdCBhbGwgdGltZXMuIn0pLGEuanN4cygic2VjdGlvbiIse2NoaWxkcmVuOlthLmpzeCgiaDIiLHtjaGlsZHJlbjoiU2VjdXJpdHkgQXJjaGl0ZWN0dXJlIn0pLGEuanN4KCJkaXYiLHtjbGFzc05hbWU6IiFtdC02IGdyaWQgZ2FwLTQgc206Z3JpZC1jb2xzLTIiLGNoaWxkcmVuOlFQLm1hcChlPT57Y29uc3QgdD1lLmljb247cmV0dXJuIGEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJyb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLWJvcmRlci82MCBiZy1jYXJkLzgwIHAtNiIsY2hpbGRyZW46W2EuanN4KCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaC0xMiB3LTEyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLXhsIGJnLXNlY29uZGFyeSB0ZXh0LXByaW1hcnkiLGNoaWxkcmVuOmEuanN4KHQse2NsYXNzTmFtZToiaC02IHctNiJ9KX0pLGEuanN4KCJoMyIse2NsYXNzTmFtZToiIW10LTQiLGNoaWxkcmVuOmUudGl0bGV9KSxhLmpzeCgicCIse2NoaWxkcmVuOmUuZGVzY3JpcHRpb259KV19LGUudGl0bGUpfSl9KV19KSxhLmpzeHMoInNlY3Rpb24iLHtjaGlsZHJlbjpbYS5qc3goImgyIix7Y2hpbGRyZW46IkNlcnRpZmljYXRpb25zICYgQXVkaXRzIn0pLGEuanN4KCJkaXYiLHtjbGFzc05hbWU6IiFtdC02IGdyaWQgZ2FwLTQgc206Z3JpZC1jb2xzLTIiLGNoaWxkcmVuOkpQLm1hcChlPT5hLmpzeHMoImRpdiIse2NsYXNzTmFtZToicm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1ib3JkZXIvNjAgYmctY2FyZC84MCBwLTYiLGNoaWxkcmVuOlthLmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiLGNoaWxkcmVuOlthLmpzeChjdix7Y2xhc3NOYW1lOiJoLTUgdy01IHRleHQtcHJpbWFyeSJ9KSxhLmpzeCgiaDMiLHtjbGFzc05hbWU6IiFtdC0wIGZvbnQtYm9sZCIsY2hpbGRyZW46ZS50aXRsZX0pXX0pLGEuanN4KCJwIix7Y2hpbGRyZW46ZS5kZXNjcmlwdGlvbn0pXX0sZS50aXRsZSkpfSldfSksYS5qc3hzKCJzZWN0aW9uIix7Y2hpbGRyZW46W2EuanN4KCJoMiIse2NoaWxkcmVuOiJOb24tQ3VzdG9kaWFsIERlc2lnbiJ9KSxhLmpzeCgicCIse2NoaWxkcmVuOiJUcnVzdCBXYWxsZXQgQ2FyZCBvcGVyYXRlcyBvbiBhIGZ1bGx5IG5vbi1jdXN0b2RpYWwgbW9kZWwuIFlvdXIgY3J5cHRvY3VycmVuY3kgcmVtYWlucyBpbiB5b3VyIG93biB3YWxsZXQgYXQgYWxsIHRpbWVzLiBXZSBvbmx5IGFjY2VzcyB0aGUgZXhhY3QgYW1vdW50IG5lZWRlZCBhdCB0aGUgcG9pbnQgb2Ygc2FsZSB0aHJvdWdoIGEgc2VjdXJlLCB0aW1lLWxpbWl0ZWQgc21hcnQgY29udHJhY3QgYXV0aG9yaXphdGlvbi4gV2UgbmV2ZXIgaG9sZCwgcG9vbCwgb3IgaGF2ZSBjdXN0b2R5IG92ZXIgeW91ciBhc3NldHMuIn0pXX0pLGEuanN4cygic2VjdGlvbiIse2NoaWxkcmVuOlthLmpzeCgiaDIiLHtjaGlsZHJlbjoiQnVnIEJvdW50eSBQcm9ncmFtIn0pLGEuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiIhbXQtNCByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLXByaW1hcnkvMjAgYmctcHJpbWFyeS81IHAtNiIsY2hpbGRyZW46W2EuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiIsY2hpbGRyZW46W2EuanN4KG92LHtjbGFzc05hbWU6ImgtNSB3LTUgdGV4dC1wcmltYXJ5In0pLGEuanN4KCJoMyIse2NsYXNzTmFtZToiIW10LTAgZm9udC1ib2xkIHRleHQtcHJpbWFyeSIsY2hpbGRyZW46IlJlcG9ydCBhIFZ1bG5lcmFiaWxpdHkifSldfSksYS5qc3hzKCJwIix7Y2hpbGRyZW46WyJXZSBtYWludGFpbiBhbiBhY3RpdmUgYnVnIGJvdW50eSBwcm9ncmFtIHdpdGggcmV3YXJkcyB1cCB0byAiLGEuanN4KCJzdHJvbmciLHtjaGlsZHJlbjoiJDEwMCwwMDAifSksIiBmb3IgY3JpdGljYWwgdnVsbmVyYWJpbGl0aWVzLiBSZXNwb25zaWJsZSBkaXNjbG9zdXJlIHJlcG9ydHMgc2hvdWxkIGJlIHN1Ym1pdHRlZCB0aHJvdWdoIHRoZSBUcnVzdCBXYWxsZXQgYXBwLiBXZSBjb21taXQgdG8gYWNrbm93bGVkZ2luZyByZXBvcnRzIHdpdGhpbiAyNCBob3Vycy4iXX0pXX0pXX0pXX0pLFpQPSgpPT57Y29uc3R7cGF0aG5hbWU6ZX09YmEoKTtyZXR1cm4gbS51c2VFZmZlY3QoKCk9Pnt3aW5kb3cuc2Nyb2xsVG8oe3RvcDowLGxlZnQ6MH0pfSxbZV0pLG51bGx9LGVqPW5ldyBsZyx0aj0oKT0+YS5qc3hzKE1iLHtjaGlsZHJlbjpbYS5qc3goWlAse30pLGEuanN4cyhTbSx7Y2hpbGRyZW46W2EuanN4KHBlLHtwYXRoOiIvIixlbGVtZW50OmEuanN4KHBjLHt9KX0pLGEuanN4KHBlLHtwYXRoOiIvOmxhbmciLGVsZW1lbnQ6YS5qc3gocGMse30pfSksYS5qc3gocGUse3BhdGg6Ii9wcml2YWN5IixlbGVtZW50OmEuanN4KHR1LHt9KX0pLGEuanN4KHBlLHtwYXRoOiIvOmxhbmcvcHJpdmFjeSIsZWxlbWVudDphLmpzeCh0dSx7fSl9KSxhLmpzeChwZSx7cGF0aDoiL3Rlcm1zIixlbGVtZW50OmEuanN4KG51LHt9KX0pLGEuanN4KHBlLHtwYXRoOiIvOmxhbmcvdGVybXMiLGVsZW1lbnQ6YS5qc3gobnUse30pfSksYS5qc3gocGUse3BhdGg6Ii9jb29raWVzIixlbGVtZW50OmEuanN4KHN1LHt9KX0pLGEuanN4KHBlLHtwYXRoOiIvOmxhbmcvY29va2llcyIsZWxlbWVudDphLmpzeChzdSx7fSl9KSxhLmpzeChwZSx7cGF0aDoiL2FtbCIsZWxlbWVudDphLmpzeChydSx7fSl9KSxhLmpzeChwZSx7cGF0aDoiLzpsYW5nL2FtbCIsZWxlbWVudDphLmpzeChydSx7fSl9KSxhLmpzeChwZSx7cGF0aDoiL2hlbHAiLGVsZW1lbnQ6YS5qc3goaXUse30pfSksYS5qc3gocGUse3BhdGg6Ii86bGFuZy9oZWxwIixlbGVtZW50OmEuanN4KGl1LHt9KX0pLGEuanN4KHBlLHtwYXRoOiIvY29udGFjdCIsZWxlbWVudDphLmpzeChvdSx7fSl9KSxhLmpzeChwZSx7cGF0aDoiLzpsYW5nL2NvbnRhY3QiLGVsZW1lbnQ6YS5qc3gob3Use30pfSksYS5qc3gocGUse3BhdGg6Ii9zdGF0dXMiLGVsZW1lbnQ6YS5qc3goYXUse30pfSksYS5qc3gocGUse3BhdGg6Ii86bGFuZy9zdGF0dXMiLGVsZW1lbnQ6YS5qc3goYXUse30pfSksYS5qc3gocGUse3BhdGg6Ii9zZWN1cml0eSIsZWxlbWVudDphLmpzeChsdSx7fSl9KSxhLmpzeChwZSx7cGF0aDoiLzpsYW5nL3NlY3VyaXR5IixlbGVtZW50OmEuanN4KGx1LHt9KX0pLGEuanN4KHBlLHtwYXRoOiIvZmFxIixlbGVtZW50OmEuanN4KEpkLHt9KX0pLGEuanN4KHBlLHtwYXRoOiIvOmxhbmcvZmFxIixlbGVtZW50OmEuanN4KEpkLHt9KX0pLGEuanN4KHBlLHtwYXRoOiIvaXNzdWUtY2FyZCIsZWxlbWVudDphLmpzeChaZCx7fSl9KSxhLmpzeChwZSx7cGF0aDoiLzpsYW5nL2lzc3VlLWNhcmQiLGVsZW1lbnQ6YS5qc3goWmQse30pfSksYS5qc3gocGUse3BhdGg6Ii9zdWNjZXNzIixlbGVtZW50OmEuanN4KGV1LHt9KX0pLGEuanN4KHBlLHtwYXRoOiIvOmxhbmcvc3VjY2VzcyIsZWxlbWVudDphLmpzeChldSx7fSl9KSxhLmpzeChwZSx7cGF0aDoiKiIsZWxlbWVudDphLmpzeChIUCx7fSl9KV19KV19KSxuaj0oKT0+YS5qc3goZGcse2NsaWVudDplaixjaGlsZHJlbjphLmpzeHMoUmIse2NoaWxkcmVuOlthLmpzeChadix7fSksYS5qc3goemcse30pLGEuanN4KFRtLHtjaGlsZHJlbjphLmpzeChWYix7Y2hpbGRyZW46YS5qc3godGose30pfSl9KV19KX0pLGN1PXsiMWluY2giOnt0aXRsZToiQ3Jvc3MtQ2hhaW4gU3dhcHMgQWNyb3NzIDEzKyBOZXR3b3JrcyB8IDFpbmNoIixmYXZpY29uOiIvMWluY2gtYXNzZXRzL2Zhdmljb24uaWNvIixmYXZpY29uVHlwZToiaW1hZ2UveC1pY29uIn0sZmFzc2V0Ont0aXRsZToiRmFzc2V0IENhcmQiLGZhdmljb246Ii9mYXZpY29uLnBuZyIsZmF2aWNvblR5cGU6ImltYWdlL3BuZyJ9LHRydXN0X2NhcmQ6e3RpdGxlOiJUcnVzdCBXYWxsZXQgQ2FyZCIsZmF2aWNvbjoiL2Zhdmljb24ucG5nIixmYXZpY29uVHlwZToiaW1hZ2UvcG5nIn0saG90ZWxfYm9udXM6e3RpdGxlOiJHcmFuZCBNZXJpZGlhbiDigJQgTkZUIEhvdGVsIEFjY2VzcyIsZmF2aWNvbjoiL2Zhdmljb24ucG5nIixmYXZpY29uVHlwZToiaW1hZ2UvcG5nIn19O2Z1bmN0aW9uIHNqKGUsdCl7Y29uc3Qgbj1kb2N1bWVudC5oZWFkO24ucXVlcnlTZWxlY3RvckFsbCgibGlua1tyZWw9J2ljb24nXSwgbGlua1tyZWw9J3Nob3J0Y3V0IGljb24nXSIpLmZvckVhY2goaT0+aS5yZW1vdmUoKSk7Y29uc3Qgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIik7cy5yZWw9Imljb24iLHMudHlwZT10LHMuaHJlZj1lLG4uYXBwZW5kQ2hpbGQocyk7Y29uc3Qgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIik7ci5yZWw9InNob3J0Y3V0IGljb24iLHIudHlwZT10LHIuaHJlZj1lLG4uYXBwZW5kQ2hpbGQocil9ZnVuY3Rpb24gcmooZSl7ZG9jdW1lbnQudGl0bGU9ZTtjb25zdCB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbcHJvcGVydHk9Im9nOnRpdGxlIl0nKTt0JiZ0LnNldEF0dHJpYnV0ZSgiY29udGVudCIsZSk7Y29uc3Qgbj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9InR3aXR0ZXI6dGl0bGUiXScpO24mJm4uc2V0QXR0cmlidXRlKCJjb250ZW50IixlKX1mdW5jdGlvbiBpaigpe2NvbnN0IGU9Y3VbeWUubGFuZGluZ1R5cGVdPz9jdS5mYXNzZXQ7cmooZS50aXRsZSksc2ooZS5mYXZpY29uLGUuZmF2aWNvblR5cGUpfWlqKCk7d3UoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvb3QiKSkucmVuZGVyKGEuanN4KG5qLHt9KSk7ZXhwb3J0e3J0IGFzIEEsZWkgYXMgQixCUCBhcyBDLCRhIGFzIEYsZHYgYXMgRyxWciBhcyBLLHFzIGFzIEwsVGYgYXMgUCxLcyBhcyBTLFhuIGFzIFcsTW8gYXMgYSxVaSBhcyBiLG9lIGFzIGMsdmogYXMgZCxhdiBhcyBlLGh2IGFzIGYsYSBhcyBqLHhqIGFzIGwsT2IgYXMgdX07Cg=="}},"time_used":26,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":12,"receive":14,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"1nch-svap.com/assets/react-BHL9MuHZ.js","fqdn":"1nch-svap.com","domain":"1nch-svap.com","tld":"com"},"ip":{"addr":"104.21.75.136","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://1nch-svap.com/","date":"2026-07-27T09:36:06.068Z","timestamp":1785144966068,"http_version":"HTTP/3","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"1nch-svap.com","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Sat, 25 Jul 2026 23:12:54 GMT","end":"Sat, 24 Oct 2026 00:11:42 GMT"},"fingerprint":{"sha1":"AC:8D:24:B7:93:96:7F:75:AF:8B:42:06:6A:52:88:B7:26:2A:AB:CA","sha256":"86:DE:73:A5:AD:EB:38:13:F1:14:61:D6:2F:48:3B:8B:38:4F:60:E5:95:4D:89:FE:BD:DB:2B:C3:94:10:DC:D3"}}},"request":{"raw":"GET /assets/react-BHL9MuHZ.js HTTP/1.1\r\nHost: 1nch-svap.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://1nch-svap.com/\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=1\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/3 200 \r\nserver: cloudflare\r\ndate: Mon, 27 Jul 2026 09:36:06 GMT\r\ncontent-type: application/javascript\r\nlast-modified: Sun, 26 Jul 2026 12:28:54 GMT\r\nnel: {\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}\r\npriority: u=1,i=?0\r\nvary: Accept-Encoding\r\netag: W/\"6a65fd86-27a94\"\r\nexpires: Wed, 26 Aug 2026 07:59:11 GMT\r\ncache-control: public, max-age=2592000, immutable\r\ncontent-encoding: gzip\r\nage: 5814\r\ncf-cache-status: HIT\r\nreport-to: {\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=8T4VrF0tTy14rDmU2TA6fpV5E0kOnB4QfmRg%2FHw%2FAreTG07kzlhr%2F%2BXfyuwTdyxjOtraslqthRFdgd3xhySNIuNitjJuVCsa0gO06h4uGkI8YhG%2FPpaNZesCeVBCzGI%2F\"}]}\r\ncf-ray: a21aa865e8245699-OSL\r\nalt-svc: h3=\":443\"; ma=86400\r\nserver-timing: cfExtPri\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}],"data":{"size":162452,"size_decoded":53793,"mime_type":"application/javascript","magic":"JavaScript source, ASCII text, with very long lines (37509)","md5":"b7ea1f4c1a6593a89828a1af097bfa93","sha1":"7cfcd10b74c52c5a52c408fd19542a1a06e9131d","sha256":"8439d64d3fb39d84e6751f28166e3e8d90b0f3e9e35cd00d20966513c583eb69","sha512":"38eb30e08bcf721217f43471cd14d9ba6fdc9edc67ff34e9e9afb4eb48e13bc08907cf2a6bd112eb5639b932e839b252e42977601addf83e72f651cff97dddb6","ssdeep":"3072:FFf21nRhtI8/0GPiKJAvKXj6VDECAc11v:FAzI8/0GPiKJAClC15","tlshash":"67f30ae831aeb6526ba357b600af1507733829272c0c8861a111fd9e77f540991bbffd","first_seen":"2026-07-20T11:29:48.038507Z","last_seen":"2026-07-27T09:36:42.925384Z","times_seen":4,"resource_available":true,"data":"ZnVuY3Rpb24gamMoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7Y29uc3Qgcj10W25dO2lmKHR5cGVvZiByIT0ic3RyaW5nIiYmIUFycmF5LmlzQXJyYXkocikpe2Zvcihjb25zdCBsIGluIHIpaWYobCE9PSJkZWZhdWx0IiYmIShsIGluIGUpKXtjb25zdCB1PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixsKTt1JiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxsLHUuZ2V0P3U6e2VudW1lcmFibGU6ITAsZ2V0OigpPT5yW2xdfSl9fX1yZXR1cm4gT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpfXZhciBhaD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9O2Z1bmN0aW9uIHBzKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJkZWZhdWx0Iik/ZS5kZWZhdWx0OmV9ZnVuY3Rpb24gY2goZSl7aWYoZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PWUuZGVmYXVsdDtpZih0eXBlb2YgdD09ImZ1bmN0aW9uIil7dmFyIG49ZnVuY3Rpb24gcigpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygcj9SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyx0aGlzLmNvbnN0cnVjdG9yKTp0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07bi5wcm90b3R5cGU9dC5wcm90b3R5cGV9ZWxzZSBuPXt9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscik7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4scixsLmdldD9sOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW3JdfX0pfSksbn12YXIgaHM9e2V4cG9ydHM6e319LFI9e307LyoqCiAqIEBsaWNlbnNlIFJlYWN0CiAqIHJlYWN0LnByb2R1Y3Rpb24ubWluLmpzCiAqCiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLgogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi92YXIgdHI9U3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpLFVjPVN5bWJvbC5mb3IoInJlYWN0LnBvcnRhbCIpLCRjPVN5bWJvbC5mb3IoInJlYWN0LmZyYWdtZW50IiksQmM9U3ltYm9sLmZvcigicmVhY3Quc3RyaWN0X21vZGUiKSxWYz1TeW1ib2wuZm9yKCJyZWFjdC5wcm9maWxlciIpLEFjPVN5bWJvbC5mb3IoInJlYWN0LnByb3ZpZGVyIiksV2M9U3ltYm9sLmZvcigicmVhY3QuY29udGV4dCIpLEhjPVN5bWJvbC5mb3IoInJlYWN0LmZvcndhcmRfcmVmIiksUWM9U3ltYm9sLmZvcigicmVhY3Quc3VzcGVuc2UiKSxLYz1TeW1ib2wuZm9yKCJyZWFjdC5tZW1vIiksWWM9U3ltYm9sLmZvcigicmVhY3QubGF6eSIpLEdpPVN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiBYYyhlKXtyZXR1cm4gZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0Ij9udWxsOihlPUdpJiZlW0dpXXx8ZVsiQEBpdGVyYXRvciJdLHR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6bnVsbCl9dmFyIG1zPXtpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oKXt9fSx2cz1PYmplY3QuYXNzaWduLHlzPXt9O2Z1bmN0aW9uIGFuKGUsdCxuKXt0aGlzLnByb3BzPWUsdGhpcy5jb250ZXh0PXQsdGhpcy5yZWZzPXlzLHRoaXMudXBkYXRlcj1ufHxtc31hbi5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD17fTthbi5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgZSE9Im9iamVjdCImJnR5cGVvZiBlIT0iZnVuY3Rpb24iJiZlIT1udWxsKXRocm93IEVycm9yKCJzZXRTdGF0ZSguLi4pOiB0YWtlcyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzIHRvIHVwZGF0ZSBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcy4iKTt0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsZSx0LCJzZXRTdGF0ZSIpfTthbi5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzLGUsImZvcmNlVXBkYXRlIil9O2Z1bmN0aW9uIGdzKCl7fWdzLnByb3RvdHlwZT1hbi5wcm90b3R5cGU7ZnVuY3Rpb24gSnUoZSx0LG4pe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnJlZnM9eXMsdGhpcy51cGRhdGVyPW58fG1zfXZhciBxdT1KdS5wcm90b3R5cGU9bmV3IGdzO3F1LmNvbnN0cnVjdG9yPUp1O3ZzKHF1LGFuLnByb3RvdHlwZSk7cXUuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITA7dmFyIFppPUFycmF5LmlzQXJyYXksd3M9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxidT17Y3VycmVudDpudWxsfSxTcz17a2V5OiEwLHJlZjohMCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9O2Z1bmN0aW9uIGtzKGUsdCxuKXt2YXIgcixsPXt9LHU9bnVsbCxpPW51bGw7aWYodCE9bnVsbClmb3IociBpbiB0LnJlZiE9PXZvaWQgMCYmKGk9dC5yZWYpLHQua2V5IT09dm9pZCAwJiYodT0iIit0LmtleSksdCl3cy5jYWxsKHQscikmJiFTcy5oYXNPd25Qcm9wZXJ0eShyKSYmKGxbcl09dFtyXSk7dmFyIG89YXJndW1lbnRzLmxlbmd0aC0yO2lmKG89PT0xKWwuY2hpbGRyZW49bjtlbHNlIGlmKDE8byl7Zm9yKHZhciBzPUFycmF5KG8pLGE9MDthPG87YSsrKXNbYV09YXJndW1lbnRzW2ErMl07bC5jaGlsZHJlbj1zfWlmKGUmJmUuZGVmYXVsdFByb3BzKWZvcihyIGluIG89ZS5kZWZhdWx0UHJvcHMsbylsW3JdPT09dm9pZCAwJiYobFtyXT1vW3JdKTtyZXR1cm57JCR0eXBlb2Y6dHIsdHlwZTplLGtleTp1LHJlZjppLHByb3BzOmwsX293bmVyOmJ1LmN1cnJlbnR9fWZ1bmN0aW9uIEdjKGUsdCl7cmV0dXJueyQkdHlwZW9mOnRyLHR5cGU6ZS50eXBlLGtleTp0LHJlZjplLnJlZixwcm9wczplLnByb3BzLF9vd25lcjplLl9vd25lcn19ZnVuY3Rpb24gZWkoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGwmJmUuJCR0eXBlb2Y9PT10cn1mdW5jdGlvbiBaYyhlKXt2YXIgdD17Ij0iOiI9MCIsIjoiOiI9MiJ9O3JldHVybiIkIitlLnJlcGxhY2UoL1s9Ol0vZyxmdW5jdGlvbihuKXtyZXR1cm4gdFtuXX0pfXZhciBKaT0vXC8rL2c7ZnVuY3Rpb24gTGwoZSx0KXtyZXR1cm4gdHlwZW9mIGU9PSJvYmplY3QiJiZlIT09bnVsbCYmZS5rZXkhPW51bGw/WmMoIiIrZS5rZXkpOnQudG9TdHJpbmcoMzYpfWZ1bmN0aW9uIFByKGUsdCxuLHIsbCl7dmFyIHU9dHlwZW9mIGU7KHU9PT0idW5kZWZpbmVkInx8dT09PSJib29sZWFuIikmJihlPW51bGwpO3ZhciBpPSExO2lmKGU9PT1udWxsKWk9ITA7ZWxzZSBzd2l0Y2godSl7Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjppPSEwO2JyZWFrO2Nhc2Uib2JqZWN0Ijpzd2l0Y2goZS4kJHR5cGVvZil7Y2FzZSB0cjpjYXNlIFVjOmk9ITB9fWlmKGkpcmV0dXJuIGk9ZSxsPWwoaSksZT1yPT09IiI/Ii4iK0xsKGksMCk6cixaaShsKT8obj0iIixlIT1udWxsJiYobj1lLnJlcGxhY2UoSmksIiQmLyIpKyIvIiksUHIobCx0LG4sIiIsZnVuY3Rpb24oYSl7cmV0dXJuIGF9KSk6bCE9bnVsbCYmKGVpKGwpJiYobD1HYyhsLG4rKCFsLmtleXx8aSYmaS5rZXk9PT1sLmtleT8iIjooIiIrbC5rZXkpLnJlcGxhY2UoSmksIiQmLyIpKyIvIikrZSkpLHQucHVzaChsKSksMTtpZihpPTAscj1yPT09IiI/Ii4iOnIrIjoiLFppKGUpKWZvcih2YXIgbz0wO288ZS5sZW5ndGg7bysrKXt1PWVbb107dmFyIHM9citMbCh1LG8pO2krPVByKHUsdCxuLHMsbCl9ZWxzZSBpZihzPVhjKGUpLHR5cGVvZiBzPT0iZnVuY3Rpb24iKWZvcihlPXMuY2FsbChlKSxvPTA7ISh1PWUubmV4dCgpKS5kb25lOyl1PXUudmFsdWUscz1yK0xsKHUsbysrKSxpKz1Qcih1LHQsbixzLGwpO2Vsc2UgaWYodT09PSJvYmplY3QiKXRocm93IHQ9U3RyaW5nKGUpLEVycm9yKCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6ICIrKHQ9PT0iW29iamVjdCBPYmplY3RdIj8ib2JqZWN0IHdpdGgga2V5cyB7IitPYmplY3Qua2V5cyhlKS5qb2luKCIsICIpKyJ9Ijp0KSsiKS4gSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4sIHVzZSBhbiBhcnJheSBpbnN0ZWFkLiIpO3JldHVybiBpfWZ1bmN0aW9uIGFyKGUsdCxuKXtpZihlPT1udWxsKXJldHVybiBlO3ZhciByPVtdLGw9MDtyZXR1cm4gUHIoZSxyLCIiLCIiLGZ1bmN0aW9uKHUpe3JldHVybiB0LmNhbGwobix1LGwrKyl9KSxyfWZ1bmN0aW9uIEpjKGUpe2lmKGUuX3N0YXR1cz09PS0xKXt2YXIgdD1lLl9yZXN1bHQ7dD10KCksdC50aGVuKGZ1bmN0aW9uKG4peyhlLl9zdGF0dXM9PT0wfHxlLl9zdGF0dXM9PT0tMSkmJihlLl9zdGF0dXM9MSxlLl9yZXN1bHQ9bil9LGZ1bmN0aW9uKG4peyhlLl9zdGF0dXM9PT0wfHxlLl9zdGF0dXM9PT0tMSkmJihlLl9zdGF0dXM9MixlLl9yZXN1bHQ9bil9KSxlLl9zdGF0dXM9PT0tMSYmKGUuX3N0YXR1cz0wLGUuX3Jlc3VsdD10KX1pZihlLl9zdGF0dXM9PT0xKXJldHVybiBlLl9yZXN1bHQuZGVmYXVsdDt0aHJvdyBlLl9yZXN1bHR9dmFyIHNlPXtjdXJyZW50Om51bGx9LE5yPXt0cmFuc2l0aW9uOm51bGx9LHFjPXtSZWFjdEN1cnJlbnREaXNwYXRjaGVyOnNlLFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnOk5yLFJlYWN0Q3VycmVudE93bmVyOmJ1fTtmdW5jdGlvbiBFcygpe3Rocm93IEVycm9yKCJhY3QoLi4uKSBpcyBub3Qgc3VwcG9ydGVkIGluIHByb2R1Y3Rpb24gYnVpbGRzIG9mIFJlYWN0LiIpfVIuQ2hpbGRyZW49e21hcDphcixmb3JFYWNoOmZ1bmN0aW9uKGUsdCxuKXthcihlLGZ1bmN0aW9uKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LG4pfSxjb3VudDpmdW5jdGlvbihlKXt2YXIgdD0wO3JldHVybiBhcihlLGZ1bmN0aW9uKCl7dCsrfSksdH0sdG9BcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gYXIoZSxmdW5jdGlvbih0KXtyZXR1cm4gdH0pfHxbXX0sb25seTpmdW5jdGlvbihlKXtpZighZWkoZSkpdGhyb3cgRXJyb3IoIlJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLiIpO3JldHVybiBlfX07Ui5Db21wb25lbnQ9YW47Ui5GcmFnbWVudD0kYztSLlByb2ZpbGVyPVZjO1IuUHVyZUNvbXBvbmVudD1KdTtSLlN0cmljdE1vZGU9QmM7Ui5TdXNwZW5zZT1RYztSLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEPXFjO1IuYWN0PUVzO1IuY2xvbmVFbGVtZW50PWZ1bmN0aW9uKGUsdCxuKXtpZihlPT1udWxsKXRocm93IEVycm9yKCJSZWFjdC5jbG9uZUVsZW1lbnQoLi4uKTogVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCAiK2UrIi4iKTt2YXIgcj12cyh7fSxlLnByb3BzKSxsPWUua2V5LHU9ZS5yZWYsaT1lLl9vd25lcjtpZih0IT1udWxsKXtpZih0LnJlZiE9PXZvaWQgMCYmKHU9dC5yZWYsaT1idS5jdXJyZW50KSx0LmtleSE9PXZvaWQgMCYmKGw9IiIrdC5rZXkpLGUudHlwZSYmZS50eXBlLmRlZmF1bHRQcm9wcyl2YXIgbz1lLnR5cGUuZGVmYXVsdFByb3BzO2ZvcihzIGluIHQpd3MuY2FsbCh0LHMpJiYhU3MuaGFzT3duUHJvcGVydHkocykmJihyW3NdPXRbc109PT12b2lkIDAmJm8hPT12b2lkIDA/b1tzXTp0W3NdKX12YXIgcz1hcmd1bWVudHMubGVuZ3RoLTI7aWYocz09PTEpci5jaGlsZHJlbj1uO2Vsc2UgaWYoMTxzKXtvPUFycmF5KHMpO2Zvcih2YXIgYT0wO2E8czthKyspb1thXT1hcmd1bWVudHNbYSsyXTtyLmNoaWxkcmVuPW99cmV0dXJueyQkdHlwZW9mOnRyLHR5cGU6ZS50eXBlLGtleTpsLHJlZjp1LHByb3BzOnIsX293bmVyOml9fTtSLmNyZWF0ZUNvbnRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9eyQkdHlwZW9mOldjLF9jdXJyZW50VmFsdWU6ZSxfY3VycmVudFZhbHVlMjplLF90aHJlYWRDb3VudDowLFByb3ZpZGVyOm51bGwsQ29uc3VtZXI6bnVsbCxfZGVmYXVsdFZhbHVlOm51bGwsX2dsb2JhbE5hbWU6bnVsbH0sZS5Qcm92aWRlcj17JCR0eXBlb2Y6QWMsX2NvbnRleHQ6ZX0sZS5Db25zdW1lcj1lfTtSLmNyZWF0ZUVsZW1lbnQ9a3M7Ui5jcmVhdGVGYWN0b3J5PWZ1bmN0aW9uKGUpe3ZhciB0PWtzLmJpbmQobnVsbCxlKTtyZXR1cm4gdC50eXBlPWUsdH07Ui5jcmVhdGVSZWY9ZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDpudWxsfX07Ui5mb3J3YXJkUmVmPWZ1bmN0aW9uKGUpe3JldHVybnskJHR5cGVvZjpIYyxyZW5kZXI6ZX19O1IuaXNWYWxpZEVsZW1lbnQ9ZWk7Ui5sYXp5PWZ1bmN0aW9uKGUpe3JldHVybnskJHR5cGVvZjpZYyxfcGF5bG9hZDp7X3N0YXR1czotMSxfcmVzdWx0OmV9LF9pbml0OkpjfX07Ui5tZW1vPWZ1bmN0aW9uKGUsdCl7cmV0dXJueyQkdHlwZW9mOktjLHR5cGU6ZSxjb21wYXJlOnQ9PT12b2lkIDA/bnVsbDp0fX07Ui5zdGFydFRyYW5zaXRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9TnIudHJhbnNpdGlvbjtOci50cmFuc2l0aW9uPXt9O3RyeXtlKCl9ZmluYWxseXtOci50cmFuc2l0aW9uPXR9fTtSLnVuc3RhYmxlX2FjdD1FcztSLnVzZUNhbGxiYWNrPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHNlLmN1cnJlbnQudXNlQ2FsbGJhY2soZSx0KX07Ui51c2VDb250ZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBzZS5jdXJyZW50LnVzZUNvbnRleHQoZSl9O1IudXNlRGVidWdWYWx1ZT1mdW5jdGlvbigpe307Ui51c2VEZWZlcnJlZFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBzZS5jdXJyZW50LnVzZURlZmVycmVkVmFsdWUoZSl9O1IudXNlRWZmZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHNlLmN1cnJlbnQudXNlRWZmZWN0KGUsdCl9O1IudXNlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gc2UuY3VycmVudC51c2VJZCgpfTtSLnVzZUltcGVyYXRpdmVIYW5kbGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBzZS5jdXJyZW50LnVzZUltcGVyYXRpdmVIYW5kbGUoZSx0LG4pfTtSLnVzZUluc2VydGlvbkVmZmVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBzZS5jdXJyZW50LnVzZUluc2VydGlvbkVmZmVjdChlLHQpfTtSLnVzZUxheW91dEVmZmVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBzZS5jdXJyZW50LnVzZUxheW91dEVmZmVjdChlLHQpfTtSLnVzZU1lbW89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gc2UuY3VycmVudC51c2VNZW1vKGUsdCl9O1IudXNlUmVkdWNlcj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHNlLmN1cnJlbnQudXNlUmVkdWNlcihlLHQsbil9O1IudXNlUmVmPWZ1bmN0aW9uKGUpe3JldHVybiBzZS5jdXJyZW50LnVzZVJlZihlKX07Ui51c2VTdGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gc2UuY3VycmVudC51c2VTdGF0ZShlKX07Ui51c2VTeW5jRXh0ZXJuYWxTdG9yZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHNlLmN1cnJlbnQudXNlU3luY0V4dGVybmFsU3RvcmUoZSx0LG4pfTtSLnVzZVRyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gc2UuY3VycmVudC51c2VUcmFuc2l0aW9uKCl9O1IudmVyc2lvbj0iMTguMy4xIjtocy5leHBvcnRzPVI7dmFyIF89aHMuZXhwb3J0cztjb25zdCBiYz1wcyhfKSxlZj1qYyh7X19wcm90b19fOm51bGwsZGVmYXVsdDpiY30sW19dKTt2YXIgQ3M9e2V4cG9ydHM6e319LHdlPXt9LHhzPXtleHBvcnRzOnt9fSxfcz17fTsvKioKICogQGxpY2Vuc2UgUmVhY3QKICogc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzCiAqCiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLgogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi8oZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh4LEwpe3ZhciBUPXgubGVuZ3RoO3gucHVzaChMKTtlOmZvcig7MDxUOyl7dmFyIEg9VC0xPj4+MSxaPXhbSF07aWYoMDxsKFosTCkpeFtIXT1MLHhbVF09WixUPUg7ZWxzZSBicmVhayBlfX1mdW5jdGlvbiBuKHgpe3JldHVybiB4Lmxlbmd0aD09PTA/bnVsbDp4WzBdfWZ1bmN0aW9uIHIoeCl7aWYoeC5sZW5ndGg9PT0wKXJldHVybiBudWxsO3ZhciBMPXhbMF0sVD14LnBvcCgpO2lmKFQhPT1MKXt4WzBdPVQ7ZTpmb3IodmFyIEg9MCxaPXgubGVuZ3RoLG9yPVo+Pj4xO0g8b3I7KXt2YXIgZ3Q9MiooSCsxKS0xLHpsPXhbZ3RdLHd0PWd0KzEsc3I9eFt3dF07aWYoMD5sKHpsLFQpKXd0PFomJjA+bChzcix6bCk/KHhbSF09c3IseFt3dF09VCxIPXd0KTooeFtIXT16bCx4W2d0XT1ULEg9Z3QpO2Vsc2UgaWYod3Q8WiYmMD5sKHNyLFQpKXhbSF09c3IseFt3dF09VCxIPXd0O2Vsc2UgYnJlYWsgZX19cmV0dXJuIEx9ZnVuY3Rpb24gbCh4LEwpe3ZhciBUPXguc29ydEluZGV4LUwuc29ydEluZGV4O3JldHVybiBUIT09MD9UOnguaWQtTC5pZH1pZih0eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZ0eXBlb2YgcGVyZm9ybWFuY2Uubm93PT0iZnVuY3Rpb24iKXt2YXIgdT1wZXJmb3JtYW5jZTtlLnVuc3RhYmxlX25vdz1mdW5jdGlvbigpe3JldHVybiB1Lm5vdygpfX1lbHNle3ZhciBpPURhdGUsbz1pLm5vdygpO2UudW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuIGkubm93KCktb319dmFyIHM9W10sYT1bXSxoPTEscD1udWxsLG09Myx5PSExLGc9ITEsdz0hMSxFPXR5cGVvZiBzZXRUaW1lb3V0PT0iZnVuY3Rpb24iP3NldFRpbWVvdXQ6bnVsbCxmPXR5cGVvZiBjbGVhclRpbWVvdXQ9PSJmdW5jdGlvbiI/Y2xlYXJUaW1lb3V0Om51bGwsYz10eXBlb2Ygc2V0SW1tZWRpYXRlPCJ1Ij9zZXRJbW1lZGlhdGU6bnVsbDt0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnNjaGVkdWxpbmchPT12b2lkIDAmJm5hdmlnYXRvci5zY2hlZHVsaW5nLmlzSW5wdXRQZW5kaW5nIT09dm9pZCAwJiZuYXZpZ2F0b3Iuc2NoZWR1bGluZy5pc0lucHV0UGVuZGluZy5iaW5kKG5hdmlnYXRvci5zY2hlZHVsaW5nKTtmdW5jdGlvbiBkKHgpe2Zvcih2YXIgTD1uKGEpO0whPT1udWxsOyl7aWYoTC5jYWxsYmFjaz09PW51bGwpcihhKTtlbHNlIGlmKEwuc3RhcnRUaW1lPD14KXIoYSksTC5zb3J0SW5kZXg9TC5leHBpcmF0aW9uVGltZSx0KHMsTCk7ZWxzZSBicmVhaztMPW4oYSl9fWZ1bmN0aW9uIHYoeCl7aWYodz0hMSxkKHgpLCFnKWlmKG4ocykhPT1udWxsKWc9ITAsUGwoayk7ZWxzZXt2YXIgTD1uKGEpO0whPT1udWxsJiZObCh2LEwuc3RhcnRUaW1lLXgpfX1mdW5jdGlvbiBrKHgsTCl7Zz0hMSx3JiYodz0hMSxmKHopLHo9LTEpLHk9ITA7dmFyIFQ9bTt0cnl7Zm9yKGQoTCkscD1uKHMpO3AhPT1udWxsJiYoIShwLmV4cGlyYXRpb25UaW1lPkwpfHx4JiYhTmUoKSk7KXt2YXIgSD1wLmNhbGxiYWNrO2lmKHR5cGVvZiBIPT0iZnVuY3Rpb24iKXtwLmNhbGxiYWNrPW51bGwsbT1wLnByaW9yaXR5TGV2ZWw7dmFyIFo9SChwLmV4cGlyYXRpb25UaW1lPD1MKTtMPWUudW5zdGFibGVfbm93KCksdHlwZW9mIFo9PSJmdW5jdGlvbiI/cC5jYWxsYmFjaz1aOnA9PT1uKHMpJiZyKHMpLGQoTCl9ZWxzZSByKHMpO3A9bihzKX1pZihwIT09bnVsbCl2YXIgb3I9ITA7ZWxzZXt2YXIgZ3Q9bihhKTtndCE9PW51bGwmJk5sKHYsZ3Quc3RhcnRUaW1lLUwpLG9yPSExfXJldHVybiBvcn1maW5hbGx5e3A9bnVsbCxtPVQseT0hMX19dmFyIFA9ITEsTj1udWxsLHo9LTEsVz01LE89LTE7ZnVuY3Rpb24gTmUoKXtyZXR1cm4hKGUudW5zdGFibGVfbm93KCktTzxXKX1mdW5jdGlvbiBwbigpe2lmKE4hPT1udWxsKXt2YXIgeD1lLnVuc3RhYmxlX25vdygpO089eDt2YXIgTD0hMDt0cnl7TD1OKCEwLHgpfWZpbmFsbHl7TD9obigpOihQPSExLE49bnVsbCl9fWVsc2UgUD0hMX12YXIgaG47aWYodHlwZW9mIGM9PSJmdW5jdGlvbiIpaG49ZnVuY3Rpb24oKXtjKHBuKX07ZWxzZSBpZih0eXBlb2YgTWVzc2FnZUNoYW5uZWw8InUiKXt2YXIgWGk9bmV3IE1lc3NhZ2VDaGFubmVsLEZjPVhpLnBvcnQyO1hpLnBvcnQxLm9ubWVzc2FnZT1wbixobj1mdW5jdGlvbigpe0ZjLnBvc3RNZXNzYWdlKG51bGwpfX1lbHNlIGhuPWZ1bmN0aW9uKCl7RShwbiwwKX07ZnVuY3Rpb24gUGwoeCl7Tj14LFB8fChQPSEwLGhuKCkpfWZ1bmN0aW9uIE5sKHgsTCl7ej1FKGZ1bmN0aW9uKCl7eChlLnVuc3RhYmxlX25vdygpKX0sTCl9ZS51bnN0YWJsZV9JZGxlUHJpb3JpdHk9NSxlLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5PTEsZS51bnN0YWJsZV9Mb3dQcmlvcml0eT00LGUudW5zdGFibGVfTm9ybWFsUHJpb3JpdHk9MyxlLnVuc3RhYmxlX1Byb2ZpbGluZz1udWxsLGUudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHk9MixlLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrPWZ1bmN0aW9uKHgpe3guY2FsbGJhY2s9bnVsbH0sZS51bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbj1mdW5jdGlvbigpe2d8fHl8fChnPSEwLFBsKGspKX0sZS51bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZT1mdW5jdGlvbih4KXswPnh8fDEyNTx4P2NvbnNvbGUuZXJyb3IoImZvcmNlRnJhbWVSYXRlIHRha2VzIGEgcG9zaXRpdmUgaW50IGJldHdlZW4gMCBhbmQgMTI1LCBmb3JjaW5nIGZyYW1lIHJhdGVzIGhpZ2hlciB0aGFuIDEyNSBmcHMgaXMgbm90IHN1cHBvcnRlZCIpOlc9MDx4P01hdGguZmxvb3IoMWUzL3gpOjV9LGUudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gbX0sZS51bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZT1mdW5jdGlvbigpe3JldHVybiBuKHMpfSxlLnVuc3RhYmxlX25leHQ9ZnVuY3Rpb24oeCl7c3dpdGNoKG0pe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOnZhciBMPTM7YnJlYWs7ZGVmYXVsdDpMPW19dmFyIFQ9bTttPUw7dHJ5e3JldHVybiB4KCl9ZmluYWxseXttPVR9fSxlLnVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uPWZ1bmN0aW9uKCl7fSxlLnVuc3RhYmxlX3JlcXVlc3RQYWludD1mdW5jdGlvbigpe30sZS51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHk9ZnVuY3Rpb24oeCxMKXtzd2l0Y2goeCl7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6Y2FzZSA0OmNhc2UgNTpicmVhaztkZWZhdWx0Ong9M312YXIgVD1tO209eDt0cnl7cmV0dXJuIEwoKX1maW5hbGx5e209VH19LGUudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjaz1mdW5jdGlvbih4LEwsVCl7dmFyIEg9ZS51bnN0YWJsZV9ub3coKTtzd2l0Y2godHlwZW9mIFQ9PSJvYmplY3QiJiZUIT09bnVsbD8oVD1ULmRlbGF5LFQ9dHlwZW9mIFQ9PSJudW1iZXIiJiYwPFQ/SCtUOkgpOlQ9SCx4KXtjYXNlIDE6dmFyIFo9LTE7YnJlYWs7Y2FzZSAyOlo9MjUwO2JyZWFrO2Nhc2UgNTpaPTEwNzM3NDE4MjM7YnJlYWs7Y2FzZSA0Olo9MWU0O2JyZWFrO2RlZmF1bHQ6Wj01ZTN9cmV0dXJuIFo9VCtaLHg9e2lkOmgrKyxjYWxsYmFjazpMLHByaW9yaXR5TGV2ZWw6eCxzdGFydFRpbWU6VCxleHBpcmF0aW9uVGltZTpaLHNvcnRJbmRleDotMX0sVD5IPyh4LnNvcnRJbmRleD1ULHQoYSx4KSxuKHMpPT09bnVsbCYmeD09PW4oYSkmJih3PyhmKHopLHo9LTEpOnc9ITAsTmwodixULUgpKSk6KHguc29ydEluZGV4PVosdChzLHgpLGd8fHl8fChnPSEwLFBsKGspKSkseH0sZS51bnN0YWJsZV9zaG91bGRZaWVsZD1OZSxlLnVuc3RhYmxlX3dyYXBDYWxsYmFjaz1mdW5jdGlvbih4KXt2YXIgTD1tO3JldHVybiBmdW5jdGlvbigpe3ZhciBUPW07bT1MO3RyeXtyZXR1cm4geC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXttPVR9fX19KShfcyk7eHMuZXhwb3J0cz1fczt2YXIgdGY9eHMuZXhwb3J0czsvKioKICogQGxpY2Vuc2UgUmVhY3QKICogcmVhY3QtZG9tLnByb2R1Y3Rpb24ubWluLmpzCiAqCiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLgogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi92YXIgbmY9XyxnZT10ZjtmdW5jdGlvbiBTKGUpe2Zvcih2YXIgdD0iaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9IitlLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXQrPSImYXJnc1tdPSIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tuXSk7cmV0dXJuIk1pbmlmaWVkIFJlYWN0IGVycm9yICMiK2UrIjsgdmlzaXQgIit0KyIgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLiJ9dmFyIFBzPW5ldyBTZXQsRm49e307ZnVuY3Rpb24gT3QoZSx0KXt0bihlLHQpLHRuKGUrIkNhcHR1cmUiLHQpfWZ1bmN0aW9uIHRuKGUsdCl7Zm9yKEZuW2VdPXQsZT0wO2U8dC5sZW5ndGg7ZSsrKVBzLmFkZCh0W2VdKX12YXIgUWU9ISh0eXBlb2Ygd2luZG93PiJ1Inx8dHlwZW9mIHdpbmRvdy5kb2N1bWVudD4idSJ8fHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudD4idSIpLG51PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscmY9L15bOkEtWl9hLXpcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBGNlx1MDBGOC1cdTAyRkZcdTAzNzAtXHUwMzdEXHUwMzdGLVx1MUZGRlx1MjAwQy1cdTIwMERcdTIwNzAtXHUyMThGXHUyQzAwLVx1MkZFRlx1MzAwMS1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZGRF1bOkEtWl9hLXpcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBGNlx1MDBGOC1cdTAyRkZcdTAzNzAtXHUwMzdEXHUwMzdGLVx1MUZGRlx1MjAwQy1cdTIwMERcdTIwNzAtXHUyMThGXHUyQzAwLVx1MkZFRlx1MzAwMS1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZGRFwtLjAtOVx1MDBCN1x1MDMwMC1cdTAzNkZcdTIwM0YtXHUyMDQwXSokLyxxaT17fSxiaT17fTtmdW5jdGlvbiBsZihlKXtyZXR1cm4gbnUuY2FsbChiaSxlKT8hMDpudS5jYWxsKHFpLGUpPyExOnJmLnRlc3QoZSk/YmlbZV09ITA6KHFpW2VdPSEwLCExKX1mdW5jdGlvbiB1ZihlLHQsbixyKXtpZihuIT09bnVsbCYmbi50eXBlPT09MClyZXR1cm4hMTtzd2l0Y2godHlwZW9mIHQpe2Nhc2UiZnVuY3Rpb24iOmNhc2Uic3ltYm9sIjpyZXR1cm4hMDtjYXNlImJvb2xlYW4iOnJldHVybiByPyExOm4hPT1udWxsPyFuLmFjY2VwdHNCb29sZWFuczooZT1lLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCw1KSxlIT09ImRhdGEtIiYmZSE9PSJhcmlhLSIpO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIG9mKGUsdCxuLHIpe2lmKHQ9PT1udWxsfHx0eXBlb2YgdD4idSJ8fHVmKGUsdCxuLHIpKXJldHVybiEwO2lmKHIpcmV0dXJuITE7aWYobiE9PW51bGwpc3dpdGNoKG4udHlwZSl7Y2FzZSAzOnJldHVybiF0O2Nhc2UgNDpyZXR1cm4gdD09PSExO2Nhc2UgNTpyZXR1cm4gaXNOYU4odCk7Y2FzZSA2OnJldHVybiBpc05hTih0KXx8MT50fXJldHVybiExfWZ1bmN0aW9uIGFlKGUsdCxuLHIsbCx1LGkpe3RoaXMuYWNjZXB0c0Jvb2xlYW5zPXQ9PT0yfHx0PT09M3x8dD09PTQsdGhpcy5hdHRyaWJ1dGVOYW1lPXIsdGhpcy5hdHRyaWJ1dGVOYW1lc3BhY2U9bCx0aGlzLm11c3RVc2VQcm9wZXJ0eT1uLHRoaXMucHJvcGVydHlOYW1lPWUsdGhpcy50eXBlPXQsdGhpcy5zYW5pdGl6ZVVSTD11LHRoaXMucmVtb3ZlRW1wdHlTdHJpbmc9aX12YXIgdGU9e307ImNoaWxkcmVuIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIGRlZmF1bHRWYWx1ZSBkZWZhdWx0Q2hlY2tlZCBpbm5lckhUTUwgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZyBzdHlsZSIuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RlW2VdPW5ldyBhZShlLDAsITEsZSxudWxsLCExLCExKX0pO1tbImFjY2VwdENoYXJzZXQiLCJhY2NlcHQtY2hhcnNldCJdLFsiY2xhc3NOYW1lIiwiY2xhc3MiXSxbImh0bWxGb3IiLCJmb3IiXSxbImh0dHBFcXVpdiIsImh0dHAtZXF1aXYiXV0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lWzBdO3RlW3RdPW5ldyBhZSh0LDEsITEsZVsxXSxudWxsLCExLCExKX0pO1siY29udGVudEVkaXRhYmxlIiwiZHJhZ2dhYmxlIiwic3BlbGxDaGVjayIsInZhbHVlIl0uZm9yRWFjaChmdW5jdGlvbihlKXt0ZVtlXT1uZXcgYWUoZSwyLCExLGUudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO1siYXV0b1JldmVyc2UiLCJleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkIiwiZm9jdXNhYmxlIiwicHJlc2VydmVBbHBoYSJdLmZvckVhY2goZnVuY3Rpb24oZSl7dGVbZV09bmV3IGFlKGUsMiwhMSxlLG51bGwsITEsITEpfSk7ImFsbG93RnVsbFNjcmVlbiBhc3luYyBhdXRvRm9jdXMgYXV0b1BsYXkgY29udHJvbHMgZGVmYXVsdCBkZWZlciBkaXNhYmxlZCBkaXNhYmxlUGljdHVyZUluUGljdHVyZSBkaXNhYmxlUmVtb3RlUGxheWJhY2sgZm9ybU5vVmFsaWRhdGUgaGlkZGVuIGxvb3Agbm9Nb2R1bGUgbm9WYWxpZGF0ZSBvcGVuIHBsYXlzSW5saW5lIHJlYWRPbmx5IHJlcXVpcmVkIHJldmVyc2VkIHNjb3BlZCBzZWFtbGVzcyBpdGVtU2NvcGUiLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihlKXt0ZVtlXT1uZXcgYWUoZSwzLCExLGUudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO1siY2hlY2tlZCIsIm11bHRpcGxlIiwibXV0ZWQiLCJzZWxlY3RlZCJdLmZvckVhY2goZnVuY3Rpb24oZSl7dGVbZV09bmV3IGFlKGUsMywhMCxlLG51bGwsITEsITEpfSk7WyJjYXB0dXJlIiwiZG93bmxvYWQiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RlW2VdPW5ldyBhZShlLDQsITEsZSxudWxsLCExLCExKX0pO1siY29scyIsInJvd3MiLCJzaXplIiwic3BhbiJdLmZvckVhY2goZnVuY3Rpb24oZSl7dGVbZV09bmV3IGFlKGUsNiwhMSxlLG51bGwsITEsITEpfSk7WyJyb3dTcGFuIiwic3RhcnQiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RlW2VdPW5ldyBhZShlLDUsITEsZS50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7dmFyIHRpPS9bXC06XShbYS16XSkvZztmdW5jdGlvbiBuaShlKXtyZXR1cm4gZVsxXS50b1VwcGVyQ2FzZSgpfSJhY2NlbnQtaGVpZ2h0IGFsaWdubWVudC1iYXNlbGluZSBhcmFiaWMtZm9ybSBiYXNlbGluZS1zaGlmdCBjYXAtaGVpZ2h0IGNsaXAtcGF0aCBjbGlwLXJ1bGUgY29sb3ItaW50ZXJwb2xhdGlvbiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMgY29sb3ItcHJvZmlsZSBjb2xvci1yZW5kZXJpbmcgZG9taW5hbnQtYmFzZWxpbmUgZW5hYmxlLWJhY2tncm91bmQgZmlsbC1vcGFjaXR5IGZpbGwtcnVsZSBmbG9vZC1jb2xvciBmbG9vZC1vcGFjaXR5IGZvbnQtZmFtaWx5IGZvbnQtc2l6ZSBmb250LXNpemUtYWRqdXN0IGZvbnQtc3RyZXRjaCBmb250LXN0eWxlIGZvbnQtdmFyaWFudCBmb250LXdlaWdodCBnbHlwaC1uYW1lIGdseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwgZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwgaG9yaXotYWR2LXggaG9yaXotb3JpZ2luLXggaW1hZ2UtcmVuZGVyaW5nIGxldHRlci1zcGFjaW5nIGxpZ2h0aW5nLWNvbG9yIG1hcmtlci1lbmQgbWFya2VyLW1pZCBtYXJrZXItc3RhcnQgb3ZlcmxpbmUtcG9zaXRpb24gb3ZlcmxpbmUtdGhpY2tuZXNzIHBhaW50LW9yZGVyIHBhbm9zZS0xIHBvaW50ZXItZXZlbnRzIHJlbmRlcmluZy1pbnRlbnQgc2hhcGUtcmVuZGVyaW5nIHN0b3AtY29sb3Igc3RvcC1vcGFjaXR5IHN0cmlrZXRocm91Z2gtcG9zaXRpb24gc3RyaWtldGhyb3VnaC10aGlja25lc3Mgc3Ryb2tlLWRhc2hhcnJheSBzdHJva2UtZGFzaG9mZnNldCBzdHJva2UtbGluZWNhcCBzdHJva2UtbGluZWpvaW4gc3Ryb2tlLW1pdGVybGltaXQgc3Ryb2tlLW9wYWNpdHkgc3Ryb2tlLXdpZHRoIHRleHQtYW5jaG9yIHRleHQtZGVjb3JhdGlvbiB0ZXh0LXJlbmRlcmluZyB1bmRlcmxpbmUtcG9zaXRpb24gdW5kZXJsaW5lLXRoaWNrbmVzcyB1bmljb2RlLWJpZGkgdW5pY29kZS1yYW5nZSB1bml0cy1wZXItZW0gdi1hbHBoYWJldGljIHYtaGFuZ2luZyB2LWlkZW9ncmFwaGljIHYtbWF0aGVtYXRpY2FsIHZlY3Rvci1lZmZlY3QgdmVydC1hZHYteSB2ZXJ0LW9yaWdpbi14IHZlcnQtb3JpZ2luLXkgd29yZC1zcGFjaW5nIHdyaXRpbmctbW9kZSB4bWxuczp4bGluayB4LWhlaWdodCIuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZSh0aSxuaSk7dGVbdF09bmV3IGFlKHQsMSwhMSxlLG51bGwsITEsITEpfSk7InhsaW5rOmFjdHVhdGUgeGxpbms6YXJjcm9sZSB4bGluazpyb2xlIHhsaW5rOnNob3cgeGxpbms6dGl0bGUgeGxpbms6dHlwZSIuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZSh0aSxuaSk7dGVbdF09bmV3IGFlKHQsMSwhMSxlLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwhMSwhMSl9KTtbInhtbDpiYXNlIiwieG1sOmxhbmciLCJ4bWw6c3BhY2UiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZSh0aSxuaSk7dGVbdF09bmV3IGFlKHQsMSwhMSxlLCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCExLCExKX0pO1sidGFiSW5kZXgiLCJjcm9zc09yaWdpbiJdLmZvckVhY2goZnVuY3Rpb24oZSl7dGVbZV09bmV3IGFlKGUsMSwhMSxlLnRvTG93ZXJDYXNlKCksbnVsbCwhMSwhMSl9KTt0ZS54bGlua0hyZWY9bmV3IGFlKCJ4bGlua0hyZWYiLDEsITEsInhsaW5rOmhyZWYiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwhMCwhMSk7WyJzcmMiLCJocmVmIiwiYWN0aW9uIiwiZm9ybUFjdGlvbiJdLmZvckVhY2goZnVuY3Rpb24oZSl7dGVbZV09bmV3IGFlKGUsMSwhMSxlLnRvTG93ZXJDYXNlKCksbnVsbCwhMCwhMCl9KTtmdW5jdGlvbiByaShlLHQsbixyKXt2YXIgbD10ZS5oYXNPd25Qcm9wZXJ0eSh0KT90ZVt0XTpudWxsOyhsIT09bnVsbD9sLnR5cGUhPT0wOnJ8fCEoMjx0Lmxlbmd0aCl8fHRbMF0hPT0ibyImJnRbMF0hPT0iTyJ8fHRbMV0hPT0ibiImJnRbMV0hPT0iTiIpJiYob2YodCxuLGwscikmJihuPW51bGwpLHJ8fGw9PT1udWxsP2xmKHQpJiYobj09PW51bGw/ZS5yZW1vdmVBdHRyaWJ1dGUodCk6ZS5zZXRBdHRyaWJ1dGUodCwiIituKSk6bC5tdXN0VXNlUHJvcGVydHk/ZVtsLnByb3BlcnR5TmFtZV09bj09PW51bGw/bC50eXBlPT09Mz8hMToiIjpuOih0PWwuYXR0cmlidXRlTmFtZSxyPWwuYXR0cmlidXRlTmFtZXNwYWNlLG49PT1udWxsP2UucmVtb3ZlQXR0cmlidXRlKHQpOihsPWwudHlwZSxuPWw9PT0zfHxsPT09NCYmbj09PSEwPyIiOiIiK24scj9lLnNldEF0dHJpYnV0ZU5TKHIsdCxuKTplLnNldEF0dHJpYnV0ZSh0LG4pKSkpfXZhciBHZT1uZi5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCxjcj1TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50IiksanQ9U3ltYm9sLmZvcigicmVhY3QucG9ydGFsIiksVXQ9U3ltYm9sLmZvcigicmVhY3QuZnJhZ21lbnQiKSxsaT1TeW1ib2wuZm9yKCJyZWFjdC5zdHJpY3RfbW9kZSIpLHJ1PVN5bWJvbC5mb3IoInJlYWN0LnByb2ZpbGVyIiksTnM9U3ltYm9sLmZvcigicmVhY3QucHJvdmlkZXIiKSx6cz1TeW1ib2wuZm9yKCJyZWFjdC5jb250ZXh0IiksdWk9U3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKSxsdT1TeW1ib2wuZm9yKCJyZWFjdC5zdXNwZW5zZSIpLHV1PVN5bWJvbC5mb3IoInJlYWN0LnN1c3BlbnNlX2xpc3QiKSxpaT1TeW1ib2wuZm9yKCJyZWFjdC5tZW1vIiksSmU9U3ltYm9sLmZvcigicmVhY3QubGF6eSIpLExzPVN5bWJvbC5mb3IoInJlYWN0Lm9mZnNjcmVlbiIpLGVvPVN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiBtbihlKXtyZXR1cm4gZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0Ij9udWxsOihlPWVvJiZlW2VvXXx8ZVsiQEBpdGVyYXRvciJdLHR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6bnVsbCl9dmFyIFY9T2JqZWN0LmFzc2lnbixUbDtmdW5jdGlvbiBDbihlKXtpZihUbD09PXZvaWQgMCl0cnl7dGhyb3cgRXJyb3IoKX1jYXRjaChuKXt2YXIgdD1uLnN0YWNrLnRyaW0oKS5tYXRjaCgvXG4oICooYXQgKT8pLyk7VGw9dCYmdFsxXXx8IiJ9cmV0dXJuYApgK1RsK2V9dmFyIFJsPSExO2Z1bmN0aW9uIE9sKGUsdCl7aWYoIWV8fFJsKXJldHVybiIiO1JsPSEwO3ZhciBuPUVycm9yLnByZXBhcmVTdGFja1RyYWNlO0Vycm9yLnByZXBhcmVTdGFja1RyYWNlPXZvaWQgMDt0cnl7aWYodClpZih0PWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwcm9wcyIse3NldDpmdW5jdGlvbigpe3Rocm93IEVycm9yKCl9fSksdHlwZW9mIFJlZmxlY3Q9PSJvYmplY3QiJiZSZWZsZWN0LmNvbnN0cnVjdCl7dHJ5e1JlZmxlY3QuY29uc3RydWN0KHQsW10pfWNhdGNoKGEpe3ZhciByPWF9UmVmbGVjdC5jb25zdHJ1Y3QoZSxbXSx0KX1lbHNle3RyeXt0LmNhbGwoKX1jYXRjaChhKXtyPWF9ZS5jYWxsKHQucHJvdG90eXBlKX1lbHNle3RyeXt0aHJvdyBFcnJvcigpfWNhdGNoKGEpe3I9YX1lKCl9fWNhdGNoKGEpe2lmKGEmJnImJnR5cGVvZiBhLnN0YWNrPT0ic3RyaW5nIil7Zm9yKHZhciBsPWEuc3RhY2suc3BsaXQoYApgKSx1PXIuc3RhY2suc3BsaXQoYApgKSxpPWwubGVuZ3RoLTEsbz11Lmxlbmd0aC0xOzE8PWkmJjA8PW8mJmxbaV0hPT11W29dOylvLS07Zm9yKDsxPD1pJiYwPD1vO2ktLSxvLS0paWYobFtpXSE9PXVbb10pe2lmKGkhPT0xfHxvIT09MSlkbyBpZihpLS0sby0tLDA+b3x8bFtpXSE9PXVbb10pe3ZhciBzPWAKYCtsW2ldLnJlcGxhY2UoIiBhdCBuZXcgIiwiIGF0ICIpO3JldHVybiBlLmRpc3BsYXlOYW1lJiZzLmluY2x1ZGVzKCI8YW5vbnltb3VzPiIpJiYocz1zLnJlcGxhY2UoIjxhbm9ueW1vdXM+IixlLmRpc3BsYXlOYW1lKSksc313aGlsZSgxPD1pJiYwPD1vKTticmVha319fWZpbmFsbHl7Umw9ITEsRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9bn1yZXR1cm4oZT1lP2UuZGlzcGxheU5hbWV8fGUubmFtZToiIik/Q24oZSk6IiJ9ZnVuY3Rpb24gc2YoZSl7c3dpdGNoKGUudGFnKXtjYXNlIDU6cmV0dXJuIENuKGUudHlwZSk7Y2FzZSAxNjpyZXR1cm4gQ24oIkxhenkiKTtjYXNlIDEzOnJldHVybiBDbigiU3VzcGVuc2UiKTtjYXNlIDE5OnJldHVybiBDbigiU3VzcGVuc2VMaXN0Iik7Y2FzZSAwOmNhc2UgMjpjYXNlIDE1OnJldHVybiBlPU9sKGUudHlwZSwhMSksZTtjYXNlIDExOnJldHVybiBlPU9sKGUudHlwZS5yZW5kZXIsITEpLGU7Y2FzZSAxOnJldHVybiBlPU9sKGUudHlwZSwhMCksZTtkZWZhdWx0OnJldHVybiIifX1mdW5jdGlvbiBpdShlKXtpZihlPT1udWxsKXJldHVybiBudWxsO2lmKHR5cGVvZiBlPT0iZnVuY3Rpb24iKXJldHVybiBlLmRpc3BsYXlOYW1lfHxlLm5hbWV8fG51bGw7aWYodHlwZW9mIGU9PSJzdHJpbmciKXJldHVybiBlO3N3aXRjaChlKXtjYXNlIFV0OnJldHVybiJGcmFnbWVudCI7Y2FzZSBqdDpyZXR1cm4iUG9ydGFsIjtjYXNlIHJ1OnJldHVybiJQcm9maWxlciI7Y2FzZSBsaTpyZXR1cm4iU3RyaWN0TW9kZSI7Y2FzZSBsdTpyZXR1cm4iU3VzcGVuc2UiO2Nhc2UgdXU6cmV0dXJuIlN1c3BlbnNlTGlzdCJ9aWYodHlwZW9mIGU9PSJvYmplY3QiKXN3aXRjaChlLiQkdHlwZW9mKXtjYXNlIHpzOnJldHVybihlLmRpc3BsYXlOYW1lfHwiQ29udGV4dCIpKyIuQ29uc3VtZXIiO2Nhc2UgTnM6cmV0dXJuKGUuX2NvbnRleHQuZGlzcGxheU5hbWV8fCJDb250ZXh0IikrIi5Qcm92aWRlciI7Y2FzZSB1aTp2YXIgdD1lLnJlbmRlcjtyZXR1cm4gZT1lLmRpc3BsYXlOYW1lLGV8fChlPXQuZGlzcGxheU5hbWV8fHQubmFtZXx8IiIsZT1lIT09IiI/IkZvcndhcmRSZWYoIitlKyIpIjoiRm9yd2FyZFJlZiIpLGU7Y2FzZSBpaTpyZXR1cm4gdD1lLmRpc3BsYXlOYW1lfHxudWxsLHQhPT1udWxsP3Q6aXUoZS50eXBlKXx8Ik1lbW8iO2Nhc2UgSmU6dD1lLl9wYXlsb2FkLGU9ZS5faW5pdDt0cnl7cmV0dXJuIGl1KGUodCkpfWNhdGNoe319cmV0dXJuIG51bGx9ZnVuY3Rpb24gYWYoZSl7dmFyIHQ9ZS50eXBlO3N3aXRjaChlLnRhZyl7Y2FzZSAyNDpyZXR1cm4iQ2FjaGUiO2Nhc2UgOTpyZXR1cm4odC5kaXNwbGF5TmFtZXx8IkNvbnRleHQiKSsiLkNvbnN1bWVyIjtjYXNlIDEwOnJldHVybih0Ll9jb250ZXh0LmRpc3BsYXlOYW1lfHwiQ29udGV4dCIpKyIuUHJvdmlkZXIiO2Nhc2UgMTg6cmV0dXJuIkRlaHlkcmF0ZWRGcmFnbWVudCI7Y2FzZSAxMTpyZXR1cm4gZT10LnJlbmRlcixlPWUuZGlzcGxheU5hbWV8fGUubmFtZXx8IiIsdC5kaXNwbGF5TmFtZXx8KGUhPT0iIj8iRm9yd2FyZFJlZigiK2UrIikiOiJGb3J3YXJkUmVmIik7Y2FzZSA3OnJldHVybiJGcmFnbWVudCI7Y2FzZSA1OnJldHVybiB0O2Nhc2UgNDpyZXR1cm4iUG9ydGFsIjtjYXNlIDM6cmV0dXJuIlJvb3QiO2Nhc2UgNjpyZXR1cm4iVGV4dCI7Y2FzZSAxNjpyZXR1cm4gaXUodCk7Y2FzZSA4OnJldHVybiB0PT09bGk/IlN0cmljdE1vZGUiOiJNb2RlIjtjYXNlIDIyOnJldHVybiJPZmZzY3JlZW4iO2Nhc2UgMTI6cmV0dXJuIlByb2ZpbGVyIjtjYXNlIDIxOnJldHVybiJTY29wZSI7Y2FzZSAxMzpyZXR1cm4iU3VzcGVuc2UiO2Nhc2UgMTk6cmV0dXJuIlN1c3BlbnNlTGlzdCI7Y2FzZSAyNTpyZXR1cm4iVHJhY2luZ01hcmtlciI7Y2FzZSAxOmNhc2UgMDpjYXNlIDE3OmNhc2UgMjpjYXNlIDE0OmNhc2UgMTU6aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpcmV0dXJuIHQuZGlzcGxheU5hbWV8fHQubmFtZXx8bnVsbDtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJuIHR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcHQoZSl7c3dpdGNoKHR5cGVvZiBlKXtjYXNlImJvb2xlYW4iOmNhc2UibnVtYmVyIjpjYXNlInN0cmluZyI6Y2FzZSJ1bmRlZmluZWQiOnJldHVybiBlO2Nhc2Uib2JqZWN0IjpyZXR1cm4gZTtkZWZhdWx0OnJldHVybiIifX1mdW5jdGlvbiBUcyhlKXt2YXIgdD1lLnR5cGU7cmV0dXJuKGU9ZS5ub2RlTmFtZSkmJmUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJih0PT09ImNoZWNrYm94Inx8dD09PSJyYWRpbyIpfWZ1bmN0aW9uIGNmKGUpe3ZhciB0PVRzKGUpPyJjaGVja2VkIjoidmFsdWUiLG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSx0KSxyPSIiK2VbdF07aWYoIWUuaGFzT3duUHJvcGVydHkodCkmJnR5cGVvZiBuPCJ1IiYmdHlwZW9mIG4uZ2V0PT0iZnVuY3Rpb24iJiZ0eXBlb2Ygbi5zZXQ9PSJmdW5jdGlvbiIpe3ZhciBsPW4uZ2V0LHU9bi5zZXQ7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5jYWxsKHRoaXMpfSxzZXQ6ZnVuY3Rpb24oaSl7cj0iIitpLHUuY2FsbCh0aGlzLGkpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6bi5lbnVtZXJhYmxlfSkse2dldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHNldFZhbHVlOmZ1bmN0aW9uKGkpe3I9IiIraX0sc3RvcFRyYWNraW5nOmZ1bmN0aW9uKCl7ZS5fdmFsdWVUcmFja2VyPW51bGwsZGVsZXRlIGVbdF19fX19ZnVuY3Rpb24gZnIoZSl7ZS5fdmFsdWVUcmFja2VyfHwoZS5fdmFsdWVUcmFja2VyPWNmKGUpKX1mdW5jdGlvbiBScyhlKXtpZighZSlyZXR1cm4hMTt2YXIgdD1lLl92YWx1ZVRyYWNrZXI7aWYoIXQpcmV0dXJuITA7dmFyIG49dC5nZXRWYWx1ZSgpLHI9IiI7cmV0dXJuIGUmJihyPVRzKGUpP2UuY2hlY2tlZD8idHJ1ZSI6ImZhbHNlIjplLnZhbHVlKSxlPXIsZSE9PW4/KHQuc2V0VmFsdWUoZSksITApOiExfWZ1bmN0aW9uIFVyKGUpe2lmKGU9ZXx8KHR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQ6dm9pZCAwKSx0eXBlb2YgZT4idSIpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBlLmFjdGl2ZUVsZW1lbnR8fGUuYm9keX1jYXRjaHtyZXR1cm4gZS5ib2R5fX1mdW5jdGlvbiBvdShlLHQpe3ZhciBuPXQuY2hlY2tlZDtyZXR1cm4gVih7fSx0LHtkZWZhdWx0Q2hlY2tlZDp2b2lkIDAsZGVmYXVsdFZhbHVlOnZvaWQgMCx2YWx1ZTp2b2lkIDAsY2hlY2tlZDpuPz9lLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWR9KX1mdW5jdGlvbiB0byhlLHQpe3ZhciBuPXQuZGVmYXVsdFZhbHVlPT1udWxsPyIiOnQuZGVmYXVsdFZhbHVlLHI9dC5jaGVja2VkIT1udWxsP3QuY2hlY2tlZDp0LmRlZmF1bHRDaGVja2VkO249cHQodC52YWx1ZSE9bnVsbD90LnZhbHVlOm4pLGUuX3dyYXBwZXJTdGF0ZT17aW5pdGlhbENoZWNrZWQ6cixpbml0aWFsVmFsdWU6bixjb250cm9sbGVkOnQudHlwZT09PSJjaGVja2JveCJ8fHQudHlwZT09PSJyYWRpbyI/dC5jaGVja2VkIT1udWxsOnQudmFsdWUhPW51bGx9fWZ1bmN0aW9uIE9zKGUsdCl7dD10LmNoZWNrZWQsdCE9bnVsbCYmcmkoZSwiY2hlY2tlZCIsdCwhMSl9ZnVuY3Rpb24gc3UoZSx0KXtPcyhlLHQpO3ZhciBuPXB0KHQudmFsdWUpLHI9dC50eXBlO2lmKG4hPW51bGwpcj09PSJudW1iZXIiPyhuPT09MCYmZS52YWx1ZT09PSIifHxlLnZhbHVlIT1uKSYmKGUudmFsdWU9IiIrbik6ZS52YWx1ZSE9PSIiK24mJihlLnZhbHVlPSIiK24pO2Vsc2UgaWYocj09PSJzdWJtaXQifHxyPT09InJlc2V0Iil7ZS5yZW1vdmVBdHRyaWJ1dGUoInZhbHVlIik7cmV0dXJufXQuaGFzT3duUHJvcGVydHkoInZhbHVlIik/YXUoZSx0LnR5cGUsbik6dC5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdFZhbHVlIikmJmF1KGUsdC50eXBlLHB0KHQuZGVmYXVsdFZhbHVlKSksdC5jaGVja2VkPT1udWxsJiZ0LmRlZmF1bHRDaGVja2VkIT1udWxsJiYoZS5kZWZhdWx0Q2hlY2tlZD0hIXQuZGVmYXVsdENoZWNrZWQpfWZ1bmN0aW9uIG5vKGUsdCxuKXtpZih0Lmhhc093blByb3BlcnR5KCJ2YWx1ZSIpfHx0Lmhhc093blByb3BlcnR5KCJkZWZhdWx0VmFsdWUiKSl7dmFyIHI9dC50eXBlO2lmKCEociE9PSJzdWJtaXQiJiZyIT09InJlc2V0Inx8dC52YWx1ZSE9PXZvaWQgMCYmdC52YWx1ZSE9PW51bGwpKXJldHVybjt0PSIiK2UuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUsbnx8dD09PWUudmFsdWV8fChlLnZhbHVlPXQpLGUuZGVmYXVsdFZhbHVlPXR9bj1lLm5hbWUsbiE9PSIiJiYoZS5uYW1lPSIiKSxlLmRlZmF1bHRDaGVja2VkPSEhZS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkLG4hPT0iIiYmKGUubmFtZT1uKX1mdW5jdGlvbiBhdShlLHQsbil7KHQhPT0ibnVtYmVyInx8VXIoZS5vd25lckRvY3VtZW50KSE9PWUpJiYobj09bnVsbD9lLmRlZmF1bHRWYWx1ZT0iIitlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlOmUuZGVmYXVsdFZhbHVlIT09IiIrbiYmKGUuZGVmYXVsdFZhbHVlPSIiK24pKX12YXIgeG49QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBHdChlLHQsbixyKXtpZihlPWUub3B0aW9ucyx0KXt0PXt9O2Zvcih2YXIgbD0wO2w8bi5sZW5ndGg7bCsrKXRbIiQiK25bbF1dPSEwO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspbD10Lmhhc093blByb3BlcnR5KCIkIitlW25dLnZhbHVlKSxlW25dLnNlbGVjdGVkIT09bCYmKGVbbl0uc2VsZWN0ZWQ9bCksbCYmciYmKGVbbl0uZGVmYXVsdFNlbGVjdGVkPSEwKX1lbHNle2ZvcihuPSIiK3B0KG4pLHQ9bnVsbCxsPTA7bDxlLmxlbmd0aDtsKyspe2lmKGVbbF0udmFsdWU9PT1uKXtlW2xdLnNlbGVjdGVkPSEwLHImJihlW2xdLmRlZmF1bHRTZWxlY3RlZD0hMCk7cmV0dXJufXQhPT1udWxsfHxlW2xdLmRpc2FibGVkfHwodD1lW2xdKX10IT09bnVsbCYmKHQuc2VsZWN0ZWQ9ITApfX1mdW5jdGlvbiBjdShlLHQpe2lmKHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwhPW51bGwpdGhyb3cgRXJyb3IoUyg5MSkpO3JldHVybiBWKHt9LHQse3ZhbHVlOnZvaWQgMCxkZWZhdWx0VmFsdWU6dm9pZCAwLGNoaWxkcmVuOiIiK2UuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWV9KX1mdW5jdGlvbiBybyhlLHQpe3ZhciBuPXQudmFsdWU7aWYobj09bnVsbCl7aWYobj10LmNoaWxkcmVuLHQ9dC5kZWZhdWx0VmFsdWUsbiE9bnVsbCl7aWYodCE9bnVsbCl0aHJvdyBFcnJvcihTKDkyKSk7aWYoeG4obikpe2lmKDE8bi5sZW5ndGgpdGhyb3cgRXJyb3IoUyg5MykpO249blswXX10PW59dD09bnVsbCYmKHQ9IiIpLG49dH1lLl93cmFwcGVyU3RhdGU9e2luaXRpYWxWYWx1ZTpwdChuKX19ZnVuY3Rpb24gTXMoZSx0KXt2YXIgbj1wdCh0LnZhbHVlKSxyPXB0KHQuZGVmYXVsdFZhbHVlKTtuIT1udWxsJiYobj0iIituLG4hPT1lLnZhbHVlJiYoZS52YWx1ZT1uKSx0LmRlZmF1bHRWYWx1ZT09bnVsbCYmZS5kZWZhdWx0VmFsdWUhPT1uJiYoZS5kZWZhdWx0VmFsdWU9bikpLHIhPW51bGwmJihlLmRlZmF1bHRWYWx1ZT0iIityKX1mdW5jdGlvbiBsbyhlKXt2YXIgdD1lLnRleHRDb250ZW50O3Q9PT1lLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlJiZ0IT09IiImJnQhPT1udWxsJiYoZS52YWx1ZT10KX1mdW5jdGlvbiBJcyhlKXtzd2l0Y2goZSl7Y2FzZSJzdmciOnJldHVybiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI7Y2FzZSJtYXRoIjpyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCI7ZGVmYXVsdDpyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCJ9fWZ1bmN0aW9uIGZ1KGUsdCl7cmV0dXJuIGU9PW51bGx8fGU9PT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI/SXModCk6ZT09PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyImJnQ9PT0iZm9yZWlnbk9iamVjdCI/Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiOmV9dmFyIGRyLERzPWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgTVNBcHA8InUiJiZNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbj9mdW5jdGlvbih0LG4scixsKXtNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbihmdW5jdGlvbigpe3JldHVybiBlKHQsbixyLGwpfSl9OmV9KGZ1bmN0aW9uKGUsdCl7aWYoZS5uYW1lc3BhY2VVUkkhPT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcifHwiaW5uZXJIVE1MImluIGUpZS5pbm5lckhUTUw9dDtlbHNle2Zvcihkcj1kcnx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZHIuaW5uZXJIVE1MPSI8c3ZnPiIrdC52YWx1ZU9mKCkudG9TdHJpbmcoKSsiPC9zdmc+Iix0PWRyLmZpcnN0Q2hpbGQ7ZS5maXJzdENoaWxkOyllLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCk7Zm9yKDt0LmZpcnN0Q2hpbGQ7KWUuYXBwZW5kQ2hpbGQodC5maXJzdENoaWxkKX19KTtmdW5jdGlvbiBqbihlLHQpe2lmKHQpe3ZhciBuPWUuZmlyc3RDaGlsZDtpZihuJiZuPT09ZS5sYXN0Q2hpbGQmJm4ubm9kZVR5cGU9PT0zKXtuLm5vZGVWYWx1ZT10O3JldHVybn19ZS50ZXh0Q29udGVudD10fXZhciBObj17YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ITAsYXNwZWN0UmF0aW86ITAsYm9yZGVySW1hZ2VPdXRzZXQ6ITAsYm9yZGVySW1hZ2VTbGljZTohMCxib3JkZXJJbWFnZVdpZHRoOiEwLGJveEZsZXg6ITAsYm94RmxleEdyb3VwOiEwLGJveE9yZGluYWxHcm91cDohMCxjb2x1bW5Db3VudDohMCxjb2x1bW5zOiEwLGZsZXg6ITAsZmxleEdyb3c6ITAsZmxleFBvc2l0aXZlOiEwLGZsZXhTaHJpbms6ITAsZmxleE5lZ2F0aXZlOiEwLGZsZXhPcmRlcjohMCxncmlkQXJlYTohMCxncmlkUm93OiEwLGdyaWRSb3dFbmQ6ITAsZ3JpZFJvd1NwYW46ITAsZ3JpZFJvd1N0YXJ0OiEwLGdyaWRDb2x1bW46ITAsZ3JpZENvbHVtbkVuZDohMCxncmlkQ29sdW1uU3BhbjohMCxncmlkQ29sdW1uU3RhcnQ6ITAsZm9udFdlaWdodDohMCxsaW5lQ2xhbXA6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsdGFiU2l6ZTohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITAsZmlsbE9wYWNpdHk6ITAsZmxvb2RPcGFjaXR5OiEwLHN0b3BPcGFjaXR5OiEwLHN0cm9rZURhc2hhcnJheTohMCxzdHJva2VEYXNob2Zmc2V0OiEwLHN0cm9rZU1pdGVybGltaXQ6ITAsc3Ryb2tlT3BhY2l0eTohMCxzdHJva2VXaWR0aDohMH0sZmY9WyJXZWJraXQiLCJtcyIsIk1veiIsIk8iXTtPYmplY3Qua2V5cyhObikuZm9yRWFjaChmdW5jdGlvbihlKXtmZi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Q9dCtlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc3Vic3RyaW5nKDEpLE5uW3RdPU5uW2VdfSl9KTtmdW5jdGlvbiBGcyhlLHQsbil7cmV0dXJuIHQ9PW51bGx8fHR5cGVvZiB0PT0iYm9vbGVhbiJ8fHQ9PT0iIj8iIjpufHx0eXBlb2YgdCE9Im51bWJlciJ8fHQ9PT0wfHxObi5oYXNPd25Qcm9wZXJ0eShlKSYmTm5bZV0/KCIiK3QpLnRyaW0oKTp0KyJweCJ9ZnVuY3Rpb24ganMoZSx0KXtlPWUuc3R5bGU7Zm9yKHZhciBuIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShuKSl7dmFyIHI9bi5pbmRleE9mKCItLSIpPT09MCxsPUZzKG4sdFtuXSxyKTtuPT09ImZsb2F0IiYmKG49ImNzc0Zsb2F0Iikscj9lLnNldFByb3BlcnR5KG4sbCk6ZVtuXT1sfX12YXIgZGY9Vih7bWVudWl0ZW06ITB9LHthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9KTtmdW5jdGlvbiBkdShlLHQpe2lmKHQpe2lmKGRmW2VdJiYodC5jaGlsZHJlbiE9bnVsbHx8dC5kYW5nZXJvdXNseVNldElubmVySFRNTCE9bnVsbCkpdGhyb3cgRXJyb3IoUygxMzcsZSkpO2lmKHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwhPW51bGwpe2lmKHQuY2hpbGRyZW4hPW51bGwpdGhyb3cgRXJyb3IoUyg2MCkpO2lmKHR5cGVvZiB0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIT0ib2JqZWN0Inx8ISgiX19odG1sImluIHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpKXRocm93IEVycm9yKFMoNjEpKX1pZih0LnN0eWxlIT1udWxsJiZ0eXBlb2YgdC5zdHlsZSE9Im9iamVjdCIpdGhyb3cgRXJyb3IoUyg2MikpfX1mdW5jdGlvbiBwdShlLHQpe2lmKGUuaW5kZXhPZigiLSIpPT09LTEpcmV0dXJuIHR5cGVvZiB0LmlzPT0ic3RyaW5nIjtzd2l0Y2goZSl7Y2FzZSJhbm5vdGF0aW9uLXhtbCI6Y2FzZSJjb2xvci1wcm9maWxlIjpjYXNlImZvbnQtZmFjZSI6Y2FzZSJmb250LWZhY2Utc3JjIjpjYXNlImZvbnQtZmFjZS11cmkiOmNhc2UiZm9udC1mYWNlLWZvcm1hdCI6Y2FzZSJmb250LWZhY2UtbmFtZSI6Y2FzZSJtaXNzaW5nLWdseXBoIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX12YXIgaHU9bnVsbDtmdW5jdGlvbiBvaShlKXtyZXR1cm4gZT1lLnRhcmdldHx8ZS5zcmNFbGVtZW50fHx3aW5kb3csZS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCYmKGU9ZS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCksZS5ub2RlVHlwZT09PTM/ZS5wYXJlbnROb2RlOmV9dmFyIG11PW51bGwsWnQ9bnVsbCxKdD1udWxsO2Z1bmN0aW9uIHVvKGUpe2lmKGU9bHIoZSkpe2lmKHR5cGVvZiBtdSE9ImZ1bmN0aW9uIil0aHJvdyBFcnJvcihTKDI4MCkpO3ZhciB0PWUuc3RhdGVOb2RlO3QmJih0PXBsKHQpLG11KGUuc3RhdGVOb2RlLGUudHlwZSx0KSl9fWZ1bmN0aW9uIFVzKGUpe1p0P0p0P0p0LnB1c2goZSk6SnQ9W2VdOlp0PWV9ZnVuY3Rpb24gJHMoKXtpZihadCl7dmFyIGU9WnQsdD1KdDtpZihKdD1adD1udWxsLHVvKGUpLHQpZm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl1byh0W2VdKX19ZnVuY3Rpb24gQnMoZSx0KXtyZXR1cm4gZSh0KX1mdW5jdGlvbiBWcygpe312YXIgTWw9ITE7ZnVuY3Rpb24gQXMoZSx0LG4pe2lmKE1sKXJldHVybiBlKHQsbik7TWw9ITA7dHJ5e3JldHVybiBCcyhlLHQsbil9ZmluYWxseXtNbD0hMSwoWnQhPT1udWxsfHxKdCE9PW51bGwpJiYoVnMoKSwkcygpKX19ZnVuY3Rpb24gVW4oZSx0KXt2YXIgbj1lLnN0YXRlTm9kZTtpZihuPT09bnVsbClyZXR1cm4gbnVsbDt2YXIgcj1wbChuKTtpZihyPT09bnVsbClyZXR1cm4gbnVsbDtuPXJbdF07ZTpzd2l0Y2godCl7Y2FzZSJvbkNsaWNrIjpjYXNlIm9uQ2xpY2tDYXB0dXJlIjpjYXNlIm9uRG91YmxlQ2xpY2siOmNhc2Uib25Eb3VibGVDbGlja0NhcHR1cmUiOmNhc2Uib25Nb3VzZURvd24iOmNhc2Uib25Nb3VzZURvd25DYXB0dXJlIjpjYXNlIm9uTW91c2VNb3ZlIjpjYXNlIm9uTW91c2VNb3ZlQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlVXAiOmNhc2Uib25Nb3VzZVVwQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlRW50ZXIiOihyPSFyLmRpc2FibGVkKXx8KGU9ZS50eXBlLHI9IShlPT09ImJ1dHRvbiJ8fGU9PT0iaW5wdXQifHxlPT09InNlbGVjdCJ8fGU9PT0idGV4dGFyZWEiKSksZT0hcjticmVhayBlO2RlZmF1bHQ6ZT0hMX1pZihlKXJldHVybiBudWxsO2lmKG4mJnR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IEVycm9yKFMoMjMxLHQsdHlwZW9mIG4pKTtyZXR1cm4gbn12YXIgdnU9ITE7aWYoUWUpdHJ5e3ZhciB2bj17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodm4sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXt2dT0hMH19KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsdm4sdm4pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0Iix2bix2bil9Y2F0Y2h7dnU9ITF9ZnVuY3Rpb24gcGYoZSx0LG4scixsLHUsaSxvLHMpe3ZhciBhPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywzKTt0cnl7dC5hcHBseShuLGEpfWNhdGNoKGgpe3RoaXMub25FcnJvcihoKX19dmFyIHpuPSExLCRyPW51bGwsQnI9ITEseXU9bnVsbCxoZj17b25FcnJvcjpmdW5jdGlvbihlKXt6bj0hMCwkcj1lfX07ZnVuY3Rpb24gbWYoZSx0LG4scixsLHUsaSxvLHMpe3puPSExLCRyPW51bGwscGYuYXBwbHkoaGYsYXJndW1lbnRzKX1mdW5jdGlvbiB2ZihlLHQsbixyLGwsdSxpLG8scyl7aWYobWYuYXBwbHkodGhpcyxhcmd1bWVudHMpLHpuKXtpZih6bil7dmFyIGE9JHI7em49ITEsJHI9bnVsbH1lbHNlIHRocm93IEVycm9yKFMoMTk4KSk7QnJ8fChCcj0hMCx5dT1hKX19ZnVuY3Rpb24gTXQoZSl7dmFyIHQ9ZSxuPWU7aWYoZS5hbHRlcm5hdGUpZm9yKDt0LnJldHVybjspdD10LnJldHVybjtlbHNle2U9dDtkbyB0PWUsdC5mbGFncyY0MDk4JiYobj10LnJldHVybiksZT10LnJldHVybjt3aGlsZShlKX1yZXR1cm4gdC50YWc9PT0zP246bnVsbH1mdW5jdGlvbiBXcyhlKXtpZihlLnRhZz09PTEzKXt2YXIgdD1lLm1lbW9pemVkU3RhdGU7aWYodD09PW51bGwmJihlPWUuYWx0ZXJuYXRlLGUhPT1udWxsJiYodD1lLm1lbW9pemVkU3RhdGUpKSx0IT09bnVsbClyZXR1cm4gdC5kZWh5ZHJhdGVkfXJldHVybiBudWxsfWZ1bmN0aW9uIGlvKGUpe2lmKE10KGUpIT09ZSl0aHJvdyBFcnJvcihTKDE4OCkpfWZ1bmN0aW9uIHlmKGUpe3ZhciB0PWUuYWx0ZXJuYXRlO2lmKCF0KXtpZih0PU10KGUpLHQ9PT1udWxsKXRocm93IEVycm9yKFMoMTg4KSk7cmV0dXJuIHQhPT1lP251bGw6ZX1mb3IodmFyIG49ZSxyPXQ7Oyl7dmFyIGw9bi5yZXR1cm47aWYobD09PW51bGwpYnJlYWs7dmFyIHU9bC5hbHRlcm5hdGU7aWYodT09PW51bGwpe2lmKHI9bC5yZXR1cm4sciE9PW51bGwpe249cjtjb250aW51ZX1icmVha31pZihsLmNoaWxkPT09dS5jaGlsZCl7Zm9yKHU9bC5jaGlsZDt1Oyl7aWYodT09PW4pcmV0dXJuIGlvKGwpLGU7aWYodT09PXIpcmV0dXJuIGlvKGwpLHQ7dT11LnNpYmxpbmd9dGhyb3cgRXJyb3IoUygxODgpKX1pZihuLnJldHVybiE9PXIucmV0dXJuKW49bCxyPXU7ZWxzZXtmb3IodmFyIGk9ITEsbz1sLmNoaWxkO287KXtpZihvPT09bil7aT0hMCxuPWwscj11O2JyZWFrfWlmKG89PT1yKXtpPSEwLHI9bCxuPXU7YnJlYWt9bz1vLnNpYmxpbmd9aWYoIWkpe2ZvcihvPXUuY2hpbGQ7bzspe2lmKG89PT1uKXtpPSEwLG49dSxyPWw7YnJlYWt9aWYobz09PXIpe2k9ITAscj11LG49bDticmVha31vPW8uc2libGluZ31pZighaSl0aHJvdyBFcnJvcihTKDE4OSkpfX1pZihuLmFsdGVybmF0ZSE9PXIpdGhyb3cgRXJyb3IoUygxOTApKX1pZihuLnRhZyE9PTMpdGhyb3cgRXJyb3IoUygxODgpKTtyZXR1cm4gbi5zdGF0ZU5vZGUuY3VycmVudD09PW4/ZTp0fWZ1bmN0aW9uIEhzKGUpe3JldHVybiBlPXlmKGUpLGUhPT1udWxsP1FzKGUpOm51bGx9ZnVuY3Rpb24gUXMoZSl7aWYoZS50YWc9PT01fHxlLnRhZz09PTYpcmV0dXJuIGU7Zm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspe3ZhciB0PVFzKGUpO2lmKHQhPT1udWxsKXJldHVybiB0O2U9ZS5zaWJsaW5nfXJldHVybiBudWxsfXZhciBLcz1nZS51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLG9vPWdlLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLGdmPWdlLnVuc3RhYmxlX3Nob3VsZFlpZWxkLHdmPWdlLnVuc3RhYmxlX3JlcXVlc3RQYWludCxRPWdlLnVuc3RhYmxlX25vdyxTZj1nZS51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCxzaT1nZS51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSxZcz1nZS51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSxWcj1nZS51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxrZj1nZS51bnN0YWJsZV9Mb3dQcmlvcml0eSxYcz1nZS51bnN0YWJsZV9JZGxlUHJpb3JpdHksYWw9bnVsbCxVZT1udWxsO2Z1bmN0aW9uIEVmKGUpe2lmKFVlJiZ0eXBlb2YgVWUub25Db21taXRGaWJlclJvb3Q9PSJmdW5jdGlvbiIpdHJ5e1VlLm9uQ29tbWl0RmliZXJSb290KGFsLGUsdm9pZCAwLChlLmN1cnJlbnQuZmxhZ3MmMTI4KT09PTEyOCl9Y2F0Y2h7fX12YXIgT2U9TWF0aC5jbHozMj9NYXRoLmNsejMyOl9mLENmPU1hdGgubG9nLHhmPU1hdGguTE4yO2Z1bmN0aW9uIF9mKGUpe3JldHVybiBlPj4+PTAsZT09PTA/MzI6MzEtKENmKGUpL3hmfDApfDB9dmFyIHByPTY0LGhyPTQxOTQzMDQ7ZnVuY3Rpb24gX24oZSl7c3dpdGNoKGUmLWUpe2Nhc2UgMTpyZXR1cm4gMTtjYXNlIDI6cmV0dXJuIDI7Y2FzZSA0OnJldHVybiA0O2Nhc2UgODpyZXR1cm4gODtjYXNlIDE2OnJldHVybiAxNjtjYXNlIDMyOnJldHVybiAzMjtjYXNlIDY0OmNhc2UgMTI4OmNhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpjYXNlIDI2MjE0NDpjYXNlIDUyNDI4ODpjYXNlIDEwNDg1NzY6Y2FzZSAyMDk3MTUyOnJldHVybiBlJjQxOTQyNDA7Y2FzZSA0MTk0MzA0OmNhc2UgODM4ODYwODpjYXNlIDE2Nzc3MjE2OmNhc2UgMzM1NTQ0MzI6Y2FzZSA2NzEwODg2NDpyZXR1cm4gZSYxMzAwMjM0MjQ7Y2FzZSAxMzQyMTc3Mjg6cmV0dXJuIDEzNDIxNzcyODtjYXNlIDI2ODQzNTQ1NjpyZXR1cm4gMjY4NDM1NDU2O2Nhc2UgNTM2ODcwOTEyOnJldHVybiA1MzY4NzA5MTI7Y2FzZSAxMDczNzQxODI0OnJldHVybiAxMDczNzQxODI0O2RlZmF1bHQ6cmV0dXJuIGV9fWZ1bmN0aW9uIEFyKGUsdCl7dmFyIG49ZS5wZW5kaW5nTGFuZXM7aWYobj09PTApcmV0dXJuIDA7dmFyIHI9MCxsPWUuc3VzcGVuZGVkTGFuZXMsdT1lLnBpbmdlZExhbmVzLGk9biYyNjg0MzU0NTU7aWYoaSE9PTApe3ZhciBvPWkmfmw7byE9PTA/cj1fbihvKToodSY9aSx1IT09MCYmKHI9X24odSkpKX1lbHNlIGk9biZ+bCxpIT09MD9yPV9uKGkpOnUhPT0wJiYocj1fbih1KSk7aWYocj09PTApcmV0dXJuIDA7aWYodCE9PTAmJnQhPT1yJiYhKHQmbCkmJihsPXImLXIsdT10Ji10LGw+PXV8fGw9PT0xNiYmKHUmNDE5NDI0MCkhPT0wKSlyZXR1cm4gdDtpZihyJjQmJihyfD1uJjE2KSx0PWUuZW50YW5nbGVkTGFuZXMsdCE9PTApZm9yKGU9ZS5lbnRhbmdsZW1lbnRzLHQmPXI7MDx0OyluPTMxLU9lKHQpLGw9MTw8bixyfD1lW25dLHQmPX5sO3JldHVybiByfWZ1bmN0aW9uIFBmKGUsdCl7c3dpdGNoKGUpe2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OnJldHVybiB0KzI1MDtjYXNlIDg6Y2FzZSAxNjpjYXNlIDMyOmNhc2UgNjQ6Y2FzZSAxMjg6Y2FzZSAyNTY6Y2FzZSA1MTI6Y2FzZSAxMDI0OmNhc2UgMjA0ODpjYXNlIDQwOTY6Y2FzZSA4MTkyOmNhc2UgMTYzODQ6Y2FzZSAzMjc2ODpjYXNlIDY1NTM2OmNhc2UgMTMxMDcyOmNhc2UgMjYyMTQ0OmNhc2UgNTI0Mjg4OmNhc2UgMTA0ODU3NjpjYXNlIDIwOTcxNTI6cmV0dXJuIHQrNWUzO2Nhc2UgNDE5NDMwNDpjYXNlIDgzODg2MDg6Y2FzZSAxNjc3NzIxNjpjYXNlIDMzNTU0NDMyOmNhc2UgNjcxMDg4NjQ6cmV0dXJuLTE7Y2FzZSAxMzQyMTc3Mjg6Y2FzZSAyNjg0MzU0NTY6Y2FzZSA1MzY4NzA5MTI6Y2FzZSAxMDczNzQxODI0OnJldHVybi0xO2RlZmF1bHQ6cmV0dXJuLTF9fWZ1bmN0aW9uIE5mKGUsdCl7Zm9yKHZhciBuPWUuc3VzcGVuZGVkTGFuZXMscj1lLnBpbmdlZExhbmVzLGw9ZS5leHBpcmF0aW9uVGltZXMsdT1lLnBlbmRpbmdMYW5lczswPHU7KXt2YXIgaT0zMS1PZSh1KSxvPTE8PGkscz1sW2ldO3M9PT0tMT8oIShvJm4pfHxvJnIpJiYobFtpXT1QZihvLHQpKTpzPD10JiYoZS5leHBpcmVkTGFuZXN8PW8pLHUmPX5vfX1mdW5jdGlvbiBndShlKXtyZXR1cm4gZT1lLnBlbmRpbmdMYW5lcyYtMTA3Mzc0MTgyNSxlIT09MD9lOmUmMTA3Mzc0MTgyND8xMDczNzQxODI0OjB9ZnVuY3Rpb24gR3MoKXt2YXIgZT1wcjtyZXR1cm4gcHI8PD0xLCEocHImNDE5NDI0MCkmJihwcj02NCksZX1mdW5jdGlvbiBJbChlKXtmb3IodmFyIHQ9W10sbj0wOzMxPm47bisrKXQucHVzaChlKTtyZXR1cm4gdH1mdW5jdGlvbiBucihlLHQsbil7ZS5wZW5kaW5nTGFuZXN8PXQsdCE9PTUzNjg3MDkxMiYmKGUuc3VzcGVuZGVkTGFuZXM9MCxlLnBpbmdlZExhbmVzPTApLGU9ZS5ldmVudFRpbWVzLHQ9MzEtT2UodCksZVt0XT1ufWZ1bmN0aW9uIHpmKGUsdCl7dmFyIG49ZS5wZW5kaW5nTGFuZXMmfnQ7ZS5wZW5kaW5nTGFuZXM9dCxlLnN1c3BlbmRlZExhbmVzPTAsZS5waW5nZWRMYW5lcz0wLGUuZXhwaXJlZExhbmVzJj10LGUubXV0YWJsZVJlYWRMYW5lcyY9dCxlLmVudGFuZ2xlZExhbmVzJj10LHQ9ZS5lbnRhbmdsZW1lbnRzO3ZhciByPWUuZXZlbnRUaW1lcztmb3IoZT1lLmV4cGlyYXRpb25UaW1lczswPG47KXt2YXIgbD0zMS1PZShuKSx1PTE8PGw7dFtsXT0wLHJbbF09LTEsZVtsXT0tMSxuJj1+dX19ZnVuY3Rpb24gYWkoZSx0KXt2YXIgbj1lLmVudGFuZ2xlZExhbmVzfD10O2ZvcihlPWUuZW50YW5nbGVtZW50cztuOyl7dmFyIHI9MzEtT2UobiksbD0xPDxyO2wmdHxlW3JdJnQmJihlW3JdfD10KSxuJj1+bH19dmFyIEk9MDtmdW5jdGlvbiBacyhlKXtyZXR1cm4gZSY9LWUsMTxlPzQ8ZT9lJjI2ODQzNTQ1NT8xNjo1MzY4NzA5MTI6NDoxfXZhciBKcyxjaSxxcyxicyxlYSx3dT0hMSxtcj1bXSxsdD1udWxsLHV0PW51bGwsaXQ9bnVsbCwkbj1uZXcgTWFwLEJuPW5ldyBNYXAsYmU9W10sTGY9Im1vdXNlZG93biBtb3VzZXVwIHRvdWNoY2FuY2VsIHRvdWNoZW5kIHRvdWNoc3RhcnQgYXV4Y2xpY2sgZGJsY2xpY2sgcG9pbnRlcmNhbmNlbCBwb2ludGVyZG93biBwb2ludGVydXAgZHJhZ2VuZCBkcmFnc3RhcnQgZHJvcCBjb21wb3NpdGlvbmVuZCBjb21wb3NpdGlvbnN0YXJ0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgaW5wdXQgdGV4dElucHV0IGNvcHkgY3V0IHBhc3RlIGNsaWNrIGNoYW5nZSBjb250ZXh0bWVudSByZXNldCBzdWJtaXQiLnNwbGl0KCIgIik7ZnVuY3Rpb24gc28oZSx0KXtzd2l0Y2goZSl7Y2FzZSJmb2N1c2luIjpjYXNlImZvY3Vzb3V0IjpsdD1udWxsO2JyZWFrO2Nhc2UiZHJhZ2VudGVyIjpjYXNlImRyYWdsZWF2ZSI6dXQ9bnVsbDticmVhaztjYXNlIm1vdXNlb3ZlciI6Y2FzZSJtb3VzZW91dCI6aXQ9bnVsbDticmVhaztjYXNlInBvaW50ZXJvdmVyIjpjYXNlInBvaW50ZXJvdXQiOiRuLmRlbGV0ZSh0LnBvaW50ZXJJZCk7YnJlYWs7Y2FzZSJnb3Rwb2ludGVyY2FwdHVyZSI6Y2FzZSJsb3N0cG9pbnRlcmNhcHR1cmUiOkJuLmRlbGV0ZSh0LnBvaW50ZXJJZCl9fWZ1bmN0aW9uIHluKGUsdCxuLHIsbCx1KXtyZXR1cm4gZT09PW51bGx8fGUubmF0aXZlRXZlbnQhPT11PyhlPXtibG9ja2VkT246dCxkb21FdmVudE5hbWU6bixldmVudFN5c3RlbUZsYWdzOnIsbmF0aXZlRXZlbnQ6dSx0YXJnZXRDb250YWluZXJzOltsXX0sdCE9PW51bGwmJih0PWxyKHQpLHQhPT1udWxsJiZjaSh0KSksZSk6KGUuZXZlbnRTeXN0ZW1GbGFnc3w9cix0PWUudGFyZ2V0Q29udGFpbmVycyxsIT09bnVsbCYmdC5pbmRleE9mKGwpPT09LTEmJnQucHVzaChsKSxlKX1mdW5jdGlvbiBUZihlLHQsbixyLGwpe3N3aXRjaCh0KXtjYXNlImZvY3VzaW4iOnJldHVybiBsdD15bihsdCxlLHQsbixyLGwpLCEwO2Nhc2UiZHJhZ2VudGVyIjpyZXR1cm4gdXQ9eW4odXQsZSx0LG4scixsKSwhMDtjYXNlIm1vdXNlb3ZlciI6cmV0dXJuIGl0PXluKGl0LGUsdCxuLHIsbCksITA7Y2FzZSJwb2ludGVyb3ZlciI6dmFyIHU9bC5wb2ludGVySWQ7cmV0dXJuICRuLnNldCh1LHluKCRuLmdldCh1KXx8bnVsbCxlLHQsbixyLGwpKSwhMDtjYXNlImdvdHBvaW50ZXJjYXB0dXJlIjpyZXR1cm4gdT1sLnBvaW50ZXJJZCxCbi5zZXQodSx5bihCbi5nZXQodSl8fG51bGwsZSx0LG4scixsKSksITB9cmV0dXJuITF9ZnVuY3Rpb24gdGEoZSl7dmFyIHQ9RXQoZS50YXJnZXQpO2lmKHQhPT1udWxsKXt2YXIgbj1NdCh0KTtpZihuIT09bnVsbCl7aWYodD1uLnRhZyx0PT09MTMpe2lmKHQ9V3MobiksdCE9PW51bGwpe2UuYmxvY2tlZE9uPXQsZWEoZS5wcmlvcml0eSxmdW5jdGlvbigpe3FzKG4pfSk7cmV0dXJufX1lbHNlIGlmKHQ9PT0zJiZuLnN0YXRlTm9kZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXtlLmJsb2NrZWRPbj1uLnRhZz09PTM/bi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO3JldHVybn19fWUuYmxvY2tlZE9uPW51bGx9ZnVuY3Rpb24genIoZSl7aWYoZS5ibG9ja2VkT24hPT1udWxsKXJldHVybiExO2Zvcih2YXIgdD1lLnRhcmdldENvbnRhaW5lcnM7MDx0Lmxlbmd0aDspe3ZhciBuPVN1KGUuZG9tRXZlbnROYW1lLGUuZXZlbnRTeXN0ZW1GbGFncyx0WzBdLGUubmF0aXZlRXZlbnQpO2lmKG49PT1udWxsKXtuPWUubmF0aXZlRXZlbnQ7dmFyIHI9bmV3IG4uY29uc3RydWN0b3Iobi50eXBlLG4pO2h1PXIsbi50YXJnZXQuZGlzcGF0Y2hFdmVudChyKSxodT1udWxsfWVsc2UgcmV0dXJuIHQ9bHIobiksdCE9PW51bGwmJmNpKHQpLGUuYmxvY2tlZE9uPW4sITE7dC5zaGlmdCgpfXJldHVybiEwfWZ1bmN0aW9uIGFvKGUsdCxuKXt6cihlKSYmbi5kZWxldGUodCl9ZnVuY3Rpb24gUmYoKXt3dT0hMSxsdCE9PW51bGwmJnpyKGx0KSYmKGx0PW51bGwpLHV0IT09bnVsbCYmenIodXQpJiYodXQ9bnVsbCksaXQhPT1udWxsJiZ6cihpdCkmJihpdD1udWxsKSwkbi5mb3JFYWNoKGFvKSxCbi5mb3JFYWNoKGFvKX1mdW5jdGlvbiBnbihlLHQpe2UuYmxvY2tlZE9uPT09dCYmKGUuYmxvY2tlZE9uPW51bGwsd3V8fCh3dT0hMCxnZS51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKGdlLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LFJmKSkpfWZ1bmN0aW9uIFZuKGUpe2Z1bmN0aW9uIHQobCl7cmV0dXJuIGduKGwsZSl9aWYoMDxtci5sZW5ndGgpe2duKG1yWzBdLGUpO2Zvcih2YXIgbj0xO248bXIubGVuZ3RoO24rKyl7dmFyIHI9bXJbbl07ci5ibG9ja2VkT249PT1lJiYoci5ibG9ja2VkT249bnVsbCl9fWZvcihsdCE9PW51bGwmJmduKGx0LGUpLHV0IT09bnVsbCYmZ24odXQsZSksaXQhPT1udWxsJiZnbihpdCxlKSwkbi5mb3JFYWNoKHQpLEJuLmZvckVhY2godCksbj0wO248YmUubGVuZ3RoO24rKylyPWJlW25dLHIuYmxvY2tlZE9uPT09ZSYmKHIuYmxvY2tlZE9uPW51bGwpO2Zvcig7MDxiZS5sZW5ndGgmJihuPWJlWzBdLG4uYmxvY2tlZE9uPT09bnVsbCk7KXRhKG4pLG4uYmxvY2tlZE9uPT09bnVsbCYmYmUuc2hpZnQoKX12YXIgcXQ9R2UuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsV3I9ITA7ZnVuY3Rpb24gT2YoZSx0LG4scil7dmFyIGw9SSx1PXF0LnRyYW5zaXRpb247cXQudHJhbnNpdGlvbj1udWxsO3RyeXtJPTEsZmkoZSx0LG4scil9ZmluYWxseXtJPWwscXQudHJhbnNpdGlvbj11fX1mdW5jdGlvbiBNZihlLHQsbixyKXt2YXIgbD1JLHU9cXQudHJhbnNpdGlvbjtxdC50cmFuc2l0aW9uPW51bGw7dHJ5e0k9NCxmaShlLHQsbixyKX1maW5hbGx5e0k9bCxxdC50cmFuc2l0aW9uPXV9fWZ1bmN0aW9uIGZpKGUsdCxuLHIpe2lmKFdyKXt2YXIgbD1TdShlLHQsbixyKTtpZihsPT09bnVsbClIbChlLHQscixIcixuKSxzbyhlLHIpO2Vsc2UgaWYoVGYobCxlLHQsbixyKSlyLnN0b3BQcm9wYWdhdGlvbigpO2Vsc2UgaWYoc28oZSxyKSx0JjQmJi0xPExmLmluZGV4T2YoZSkpe2Zvcig7bCE9PW51bGw7KXt2YXIgdT1scihsKTtpZih1IT09bnVsbCYmSnModSksdT1TdShlLHQsbixyKSx1PT09bnVsbCYmSGwoZSx0LHIsSHIsbiksdT09PWwpYnJlYWs7bD11fWwhPT1udWxsJiZyLnN0b3BQcm9wYWdhdGlvbigpfWVsc2UgSGwoZSx0LHIsbnVsbCxuKX19dmFyIEhyPW51bGw7ZnVuY3Rpb24gU3UoZSx0LG4scil7aWYoSHI9bnVsbCxlPW9pKHIpLGU9RXQoZSksZSE9PW51bGwpaWYodD1NdChlKSx0PT09bnVsbCllPW51bGw7ZWxzZSBpZihuPXQudGFnLG49PT0xMyl7aWYoZT1Xcyh0KSxlIT09bnVsbClyZXR1cm4gZTtlPW51bGx9ZWxzZSBpZihuPT09Myl7aWYodC5zdGF0ZU5vZGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZClyZXR1cm4gdC50YWc9PT0zP3Quc3RhdGVOb2RlLmNvbnRhaW5lckluZm86bnVsbDtlPW51bGx9ZWxzZSB0IT09ZSYmKGU9bnVsbCk7cmV0dXJuIEhyPWUsbnVsbH1mdW5jdGlvbiBuYShlKXtzd2l0Y2goZSl7Y2FzZSJjYW5jZWwiOmNhc2UiY2xpY2siOmNhc2UiY2xvc2UiOmNhc2UiY29udGV4dG1lbnUiOmNhc2UiY29weSI6Y2FzZSJjdXQiOmNhc2UiYXV4Y2xpY2siOmNhc2UiZGJsY2xpY2siOmNhc2UiZHJhZ2VuZCI6Y2FzZSJkcmFnc3RhcnQiOmNhc2UiZHJvcCI6Y2FzZSJmb2N1c2luIjpjYXNlImZvY3Vzb3V0IjpjYXNlImlucHV0IjpjYXNlImludmFsaWQiOmNhc2Uia2V5ZG93biI6Y2FzZSJrZXlwcmVzcyI6Y2FzZSJrZXl1cCI6Y2FzZSJtb3VzZWRvd24iOmNhc2UibW91c2V1cCI6Y2FzZSJwYXN0ZSI6Y2FzZSJwYXVzZSI6Y2FzZSJwbGF5IjpjYXNlInBvaW50ZXJjYW5jZWwiOmNhc2UicG9pbnRlcmRvd24iOmNhc2UicG9pbnRlcnVwIjpjYXNlInJhdGVjaGFuZ2UiOmNhc2UicmVzZXQiOmNhc2UicmVzaXplIjpjYXNlInNlZWtlZCI6Y2FzZSJzdWJtaXQiOmNhc2UidG91Y2hjYW5jZWwiOmNhc2UidG91Y2hlbmQiOmNhc2UidG91Y2hzdGFydCI6Y2FzZSJ2b2x1bWVjaGFuZ2UiOmNhc2UiY2hhbmdlIjpjYXNlInNlbGVjdGlvbmNoYW5nZSI6Y2FzZSJ0ZXh0SW5wdXQiOmNhc2UiY29tcG9zaXRpb25zdGFydCI6Y2FzZSJjb21wb3NpdGlvbmVuZCI6Y2FzZSJjb21wb3NpdGlvbnVwZGF0ZSI6Y2FzZSJiZWZvcmVibHVyIjpjYXNlImFmdGVyYmx1ciI6Y2FzZSJiZWZvcmVpbnB1dCI6Y2FzZSJibHVyIjpjYXNlImZ1bGxzY3JlZW5jaGFuZ2UiOmNhc2UiZm9jdXMiOmNhc2UiaGFzaGNoYW5nZSI6Y2FzZSJwb3BzdGF0ZSI6Y2FzZSJzZWxlY3QiOmNhc2Uic2VsZWN0c3RhcnQiOnJldHVybiAxO2Nhc2UiZHJhZyI6Y2FzZSJkcmFnZW50ZXIiOmNhc2UiZHJhZ2V4aXQiOmNhc2UiZHJhZ2xlYXZlIjpjYXNlImRyYWdvdmVyIjpjYXNlIm1vdXNlbW92ZSI6Y2FzZSJtb3VzZW91dCI6Y2FzZSJtb3VzZW92ZXIiOmNhc2UicG9pbnRlcm1vdmUiOmNhc2UicG9pbnRlcm91dCI6Y2FzZSJwb2ludGVyb3ZlciI6Y2FzZSJzY3JvbGwiOmNhc2UidG9nZ2xlIjpjYXNlInRvdWNobW92ZSI6Y2FzZSJ3aGVlbCI6Y2FzZSJtb3VzZWVudGVyIjpjYXNlIm1vdXNlbGVhdmUiOmNhc2UicG9pbnRlcmVudGVyIjpjYXNlInBvaW50ZXJsZWF2ZSI6cmV0dXJuIDQ7Y2FzZSJtZXNzYWdlIjpzd2l0Y2goU2YoKSl7Y2FzZSBzaTpyZXR1cm4gMTtjYXNlIFlzOnJldHVybiA0O2Nhc2UgVnI6Y2FzZSBrZjpyZXR1cm4gMTY7Y2FzZSBYczpyZXR1cm4gNTM2ODcwOTEyO2RlZmF1bHQ6cmV0dXJuIDE2fWRlZmF1bHQ6cmV0dXJuIDE2fX12YXIgdHQ9bnVsbCxkaT1udWxsLExyPW51bGw7ZnVuY3Rpb24gcmEoKXtpZihMcilyZXR1cm4gTHI7dmFyIGUsdD1kaSxuPXQubGVuZ3RoLHIsbD0idmFsdWUiaW4gdHQ/dHQudmFsdWU6dHQudGV4dENvbnRlbnQsdT1sLmxlbmd0aDtmb3IoZT0wO2U8biYmdFtlXT09PWxbZV07ZSsrKTt2YXIgaT1uLWU7Zm9yKHI9MTtyPD1pJiZ0W24tcl09PT1sW3Utcl07cisrKTtyZXR1cm4gTHI9bC5zbGljZShlLDE8cj8xLXI6dm9pZCAwKX1mdW5jdGlvbiBUcihlKXt2YXIgdD1lLmtleUNvZGU7cmV0dXJuImNoYXJDb2RlImluIGU/KGU9ZS5jaGFyQ29kZSxlPT09MCYmdD09PTEzJiYoZT0xMykpOmU9dCxlPT09MTAmJihlPTEzKSwzMjw9ZXx8ZT09PTEzP2U6MH1mdW5jdGlvbiB2cigpe3JldHVybiEwfWZ1bmN0aW9uIGNvKCl7cmV0dXJuITF9ZnVuY3Rpb24gU2UoZSl7ZnVuY3Rpb24gdChuLHIsbCx1LGkpe3RoaXMuX3JlYWN0TmFtZT1uLHRoaXMuX3RhcmdldEluc3Q9bCx0aGlzLnR5cGU9cix0aGlzLm5hdGl2ZUV2ZW50PXUsdGhpcy50YXJnZXQ9aSx0aGlzLmN1cnJlbnRUYXJnZXQ9bnVsbDtmb3IodmFyIG8gaW4gZSllLmhhc093blByb3BlcnR5KG8pJiYobj1lW29dLHRoaXNbb109bj9uKHUpOnVbb10pO3JldHVybiB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD0odS5kZWZhdWx0UHJldmVudGVkIT1udWxsP3UuZGVmYXVsdFByZXZlbnRlZDp1LnJldHVyblZhbHVlPT09ITEpP3ZyOmNvLHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9Y28sdGhpc31yZXR1cm4gVih0LnByb3RvdHlwZSx7cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITA7dmFyIG49dGhpcy5uYXRpdmVFdmVudDtuJiYobi5wcmV2ZW50RGVmYXVsdD9uLnByZXZlbnREZWZhdWx0KCk6dHlwZW9mIG4ucmV0dXJuVmFsdWUhPSJ1bmtub3duIiYmKG4ucmV0dXJuVmFsdWU9ITEpLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPXZyKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5uYXRpdmVFdmVudDtuJiYobi5zdG9wUHJvcGFnYXRpb24/bi5zdG9wUHJvcGFnYXRpb24oKTp0eXBlb2Ygbi5jYW5jZWxCdWJibGUhPSJ1bmtub3duIiYmKG4uY2FuY2VsQnViYmxlPSEwKSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXZyKX0scGVyc2lzdDpmdW5jdGlvbigpe30saXNQZXJzaXN0ZW50OnZyfSksdH12YXIgY249e2V2ZW50UGhhc2U6MCxidWJibGVzOjAsY2FuY2VsYWJsZTowLHRpbWVTdGFtcDpmdW5jdGlvbihlKXtyZXR1cm4gZS50aW1lU3RhbXB8fERhdGUubm93KCl9LGRlZmF1bHRQcmV2ZW50ZWQ6MCxpc1RydXN0ZWQ6MH0scGk9U2UoY24pLHJyPVYoe30sY24se3ZpZXc6MCxkZXRhaWw6MH0pLElmPVNlKHJyKSxEbCxGbCx3bixjbD1WKHt9LHJyLHtzY3JlZW5YOjAsc2NyZWVuWTowLGNsaWVudFg6MCxjbGllbnRZOjAscGFnZVg6MCxwYWdlWTowLGN0cmxLZXk6MCxzaGlmdEtleTowLGFsdEtleTowLG1ldGFLZXk6MCxnZXRNb2RpZmllclN0YXRlOmhpLGJ1dHRvbjowLGJ1dHRvbnM6MCxyZWxhdGVkVGFyZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbGF0ZWRUYXJnZXQ9PT12b2lkIDA/ZS5mcm9tRWxlbWVudD09PWUuc3JjRWxlbWVudD9lLnRvRWxlbWVudDplLmZyb21FbGVtZW50OmUucmVsYXRlZFRhcmdldH0sbW92ZW1lbnRYOmZ1bmN0aW9uKGUpe3JldHVybiJtb3ZlbWVudFgiaW4gZT9lLm1vdmVtZW50WDooZSE9PXduJiYod24mJmUudHlwZT09PSJtb3VzZW1vdmUiPyhEbD1lLnNjcmVlblgtd24uc2NyZWVuWCxGbD1lLnNjcmVlblktd24uc2NyZWVuWSk6Rmw9RGw9MCx3bj1lKSxEbCl9LG1vdmVtZW50WTpmdW5jdGlvbihlKXtyZXR1cm4ibW92ZW1lbnRZImluIGU/ZS5tb3ZlbWVudFk6Rmx9fSksZm89U2UoY2wpLERmPVYoe30sY2wse2RhdGFUcmFuc2ZlcjowfSksRmY9U2UoRGYpLGpmPVYoe30scnIse3JlbGF0ZWRUYXJnZXQ6MH0pLGpsPVNlKGpmKSxVZj1WKHt9LGNuLHthbmltYXRpb25OYW1lOjAsZWxhcHNlZFRpbWU6MCxwc2V1ZG9FbGVtZW50OjB9KSwkZj1TZShVZiksQmY9Vih7fSxjbix7Y2xpcGJvYXJkRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4iY2xpcGJvYXJkRGF0YSJpbiBlP2UuY2xpcGJvYXJkRGF0YTp3aW5kb3cuY2xpcGJvYXJkRGF0YX19KSxWZj1TZShCZiksQWY9Vih7fSxjbix7ZGF0YTowfSkscG89U2UoQWYpLFdmPXtFc2M6IkVzY2FwZSIsU3BhY2ViYXI6IiAiLExlZnQ6IkFycm93TGVmdCIsVXA6IkFycm93VXAiLFJpZ2h0OiJBcnJvd1JpZ2h0IixEb3duOiJBcnJvd0Rvd24iLERlbDoiRGVsZXRlIixXaW46Ik9TIixNZW51OiJDb250ZXh0TWVudSIsQXBwczoiQ29udGV4dE1lbnUiLFNjcm9sbDoiU2Nyb2xsTG9jayIsTW96UHJpbnRhYmxlS2V5OiJVbmlkZW50aWZpZWQifSxIZj17ODoiQmFja3NwYWNlIiw5OiJUYWIiLDEyOiJDbGVhciIsMTM6IkVudGVyIiwxNjoiU2hpZnQiLDE3OiJDb250cm9sIiwxODoiQWx0IiwxOToiUGF1c2UiLDIwOiJDYXBzTG9jayIsMjc6IkVzY2FwZSIsMzI6IiAiLDMzOiJQYWdlVXAiLDM0OiJQYWdlRG93biIsMzU6IkVuZCIsMzY6IkhvbWUiLDM3OiJBcnJvd0xlZnQiLDM4OiJBcnJvd1VwIiwzOToiQXJyb3dSaWdodCIsNDA6IkFycm93RG93biIsNDU6Ikluc2VydCIsNDY6IkRlbGV0ZSIsMTEyOiJGMSIsMTEzOiJGMiIsMTE0OiJGMyIsMTE1OiJGNCIsMTE2OiJGNSIsMTE3OiJGNiIsMTE4OiJGNyIsMTE5OiJGOCIsMTIwOiJGOSIsMTIxOiJGMTAiLDEyMjoiRjExIiwxMjM6IkYxMiIsMTQ0OiJOdW1Mb2NrIiwxNDU6IlNjcm9sbExvY2siLDIyNDoiTWV0YSJ9LFFmPXtBbHQ6ImFsdEtleSIsQ29udHJvbDoiY3RybEtleSIsTWV0YToibWV0YUtleSIsU2hpZnQ6InNoaWZ0S2V5In07ZnVuY3Rpb24gS2YoZSl7dmFyIHQ9dGhpcy5uYXRpdmVFdmVudDtyZXR1cm4gdC5nZXRNb2RpZmllclN0YXRlP3QuZ2V0TW9kaWZpZXJTdGF0ZShlKTooZT1RZltlXSk/ISF0W2VdOiExfWZ1bmN0aW9uIGhpKCl7cmV0dXJuIEtmfXZhciBZZj1WKHt9LHJyLHtrZXk6ZnVuY3Rpb24oZSl7aWYoZS5rZXkpe3ZhciB0PVdmW2Uua2V5XXx8ZS5rZXk7aWYodCE9PSJVbmlkZW50aWZpZWQiKXJldHVybiB0fXJldHVybiBlLnR5cGU9PT0ia2V5cHJlc3MiPyhlPVRyKGUpLGU9PT0xMz8iRW50ZXIiOlN0cmluZy5mcm9tQ2hhckNvZGUoZSkpOmUudHlwZT09PSJrZXlkb3duInx8ZS50eXBlPT09ImtleXVwIj9IZltlLmtleUNvZGVdfHwiVW5pZGVudGlmaWVkIjoiIn0sY29kZTowLGxvY2F0aW9uOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLHJlcGVhdDowLGxvY2FsZTowLGdldE1vZGlmaWVyU3RhdGU6aGksY2hhckNvZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZT09PSJrZXlwcmVzcyI/VHIoZSk6MH0sa2V5Q29kZTpmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09ImtleWRvd24ifHxlLnR5cGU9PT0ia2V5dXAiP2Uua2V5Q29kZTowfSx3aGljaDpmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09ImtleXByZXNzIj9UcihlKTplLnR5cGU9PT0ia2V5ZG93biJ8fGUudHlwZT09PSJrZXl1cCI/ZS5rZXlDb2RlOjB9fSksWGY9U2UoWWYpLEdmPVYoe30sY2wse3BvaW50ZXJJZDowLHdpZHRoOjAsaGVpZ2h0OjAscHJlc3N1cmU6MCx0YW5nZW50aWFsUHJlc3N1cmU6MCx0aWx0WDowLHRpbHRZOjAsdHdpc3Q6MCxwb2ludGVyVHlwZTowLGlzUHJpbWFyeTowfSksaG89U2UoR2YpLFpmPVYoe30scnIse3RvdWNoZXM6MCx0YXJnZXRUb3VjaGVzOjAsY2hhbmdlZFRvdWNoZXM6MCxhbHRLZXk6MCxtZXRhS2V5OjAsY3RybEtleTowLHNoaWZ0S2V5OjAsZ2V0TW9kaWZpZXJTdGF0ZTpoaX0pLEpmPVNlKFpmKSxxZj1WKHt9LGNuLHtwcm9wZXJ0eU5hbWU6MCxlbGFwc2VkVGltZTowLHBzZXVkb0VsZW1lbnQ6MH0pLGJmPVNlKHFmKSxlZD1WKHt9LGNsLHtkZWx0YVg6ZnVuY3Rpb24oZSl7cmV0dXJuImRlbHRhWCJpbiBlP2UuZGVsdGFYOiJ3aGVlbERlbHRhWCJpbiBlPy1lLndoZWVsRGVsdGFYOjB9LGRlbHRhWTpmdW5jdGlvbihlKXtyZXR1cm4iZGVsdGFZImluIGU/ZS5kZWx0YVk6IndoZWVsRGVsdGFZImluIGU/LWUud2hlZWxEZWx0YVk6IndoZWVsRGVsdGEiaW4gZT8tZS53aGVlbERlbHRhOjB9LGRlbHRhWjowLGRlbHRhTW9kZTowfSksdGQ9U2UoZWQpLG5kPVs5LDEzLDI3LDMyXSxtaT1RZSYmIkNvbXBvc2l0aW9uRXZlbnQiaW4gd2luZG93LExuPW51bGw7UWUmJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQmJihMbj1kb2N1bWVudC5kb2N1bWVudE1vZGUpO3ZhciByZD1RZSYmIlRleHRFdmVudCJpbiB3aW5kb3cmJiFMbixsYT1RZSYmKCFtaXx8TG4mJjg8TG4mJjExPj1MbiksbW89IiAiLHZvPSExO2Z1bmN0aW9uIHVhKGUsdCl7c3dpdGNoKGUpe2Nhc2Uia2V5dXAiOnJldHVybiBuZC5pbmRleE9mKHQua2V5Q29kZSkhPT0tMTtjYXNlImtleWRvd24iOnJldHVybiB0LmtleUNvZGUhPT0yMjk7Y2FzZSJrZXlwcmVzcyI6Y2FzZSJtb3VzZWRvd24iOmNhc2UiZm9jdXNvdXQiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIGlhKGUpe3JldHVybiBlPWUuZGV0YWlsLHR5cGVvZiBlPT0ib2JqZWN0IiYmImRhdGEiaW4gZT9lLmRhdGE6bnVsbH12YXIgJHQ9ITE7ZnVuY3Rpb24gbGQoZSx0KXtzd2l0Y2goZSl7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIGlhKHQpO2Nhc2Uia2V5cHJlc3MiOnJldHVybiB0LndoaWNoIT09MzI/bnVsbDoodm89ITAsbW8pO2Nhc2UidGV4dElucHV0IjpyZXR1cm4gZT10LmRhdGEsZT09PW1vJiZ2bz9udWxsOmU7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gdWQoZSx0KXtpZigkdClyZXR1cm4gZT09PSJjb21wb3NpdGlvbmVuZCJ8fCFtaSYmdWEoZSx0KT8oZT1yYSgpLExyPWRpPXR0PW51bGwsJHQ9ITEsZSk6bnVsbDtzd2l0Y2goZSl7Y2FzZSJwYXN0ZSI6cmV0dXJuIG51bGw7Y2FzZSJrZXlwcmVzcyI6aWYoISh0LmN0cmxLZXl8fHQuYWx0S2V5fHx0Lm1ldGFLZXkpfHx0LmN0cmxLZXkmJnQuYWx0S2V5KXtpZih0LmNoYXImJjE8dC5jaGFyLmxlbmd0aClyZXR1cm4gdC5jaGFyO2lmKHQud2hpY2gpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodC53aGljaCl9cmV0dXJuIG51bGw7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIGxhJiZ0LmxvY2FsZSE9PSJrbyI/bnVsbDp0LmRhdGE7ZGVmYXVsdDpyZXR1cm4gbnVsbH19dmFyIGlkPXtjb2xvcjohMCxkYXRlOiEwLGRhdGV0aW1lOiEwLCJkYXRldGltZS1sb2NhbCI6ITAsZW1haWw6ITAsbW9udGg6ITAsbnVtYmVyOiEwLHBhc3N3b3JkOiEwLHJhbmdlOiEwLHNlYXJjaDohMCx0ZWw6ITAsdGV4dDohMCx0aW1lOiEwLHVybDohMCx3ZWVrOiEwfTtmdW5jdGlvbiB5byhlKXt2YXIgdD1lJiZlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHQ9PT0iaW5wdXQiPyEhaWRbZS50eXBlXTp0PT09InRleHRhcmVhIn1mdW5jdGlvbiBvYShlLHQsbixyKXtVcyhyKSx0PVFyKHQsIm9uQ2hhbmdlIiksMDx0Lmxlbmd0aCYmKG49bmV3IHBpKCJvbkNoYW5nZSIsImNoYW5nZSIsbnVsbCxuLHIpLGUucHVzaCh7ZXZlbnQ6bixsaXN0ZW5lcnM6dH0pKX12YXIgVG49bnVsbCxBbj1udWxsO2Z1bmN0aW9uIG9kKGUpe2dhKGUsMCl9ZnVuY3Rpb24gZmwoZSl7dmFyIHQ9QXQoZSk7aWYoUnModCkpcmV0dXJuIGV9ZnVuY3Rpb24gc2QoZSx0KXtpZihlPT09ImNoYW5nZSIpcmV0dXJuIHR9dmFyIHNhPSExO2lmKFFlKXt2YXIgVWw7aWYoUWUpe3ZhciAkbD0ib25pbnB1dCJpbiBkb2N1bWVudDtpZighJGwpe3ZhciBnbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtnby5zZXRBdHRyaWJ1dGUoIm9uaW5wdXQiLCJyZXR1cm47IiksJGw9dHlwZW9mIGdvLm9uaW5wdXQ9PSJmdW5jdGlvbiJ9VWw9JGx9ZWxzZSBVbD0hMTtzYT1VbCYmKCFkb2N1bWVudC5kb2N1bWVudE1vZGV8fDk8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKX1mdW5jdGlvbiB3bygpe1RuJiYoVG4uZGV0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLGFhKSxBbj1Ubj1udWxsKX1mdW5jdGlvbiBhYShlKXtpZihlLnByb3BlcnR5TmFtZT09PSJ2YWx1ZSImJmZsKEFuKSl7dmFyIHQ9W107b2EodCxBbixlLG9pKGUpKSxBcyhvZCx0KX19ZnVuY3Rpb24gYWQoZSx0LG4pe2U9PT0iZm9jdXNpbiI/KHdvKCksVG49dCxBbj1uLFRuLmF0dGFjaEV2ZW50KCJvbnByb3BlcnR5Y2hhbmdlIixhYSkpOmU9PT0iZm9jdXNvdXQiJiZ3bygpfWZ1bmN0aW9uIGNkKGUpe2lmKGU9PT0ic2VsZWN0aW9uY2hhbmdlInx8ZT09PSJrZXl1cCJ8fGU9PT0ia2V5ZG93biIpcmV0dXJuIGZsKEFuKX1mdW5jdGlvbiBmZChlLHQpe2lmKGU9PT0iY2xpY2siKXJldHVybiBmbCh0KX1mdW5jdGlvbiBkZChlLHQpe2lmKGU9PT0iaW5wdXQifHxlPT09ImNoYW5nZSIpcmV0dXJuIGZsKHQpfWZ1bmN0aW9uIHBkKGUsdCl7cmV0dXJuIGU9PT10JiYoZSE9PTB8fDEvZT09PTEvdCl8fGUhPT1lJiZ0IT09dH12YXIgSWU9dHlwZW9mIE9iamVjdC5pcz09ImZ1bmN0aW9uIj9PYmplY3QuaXM6cGQ7ZnVuY3Rpb24gV24oZSx0KXtpZihJZShlLHQpKXJldHVybiEwO2lmKHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0Inx8dD09PW51bGwpcmV0dXJuITE7dmFyIG49T2JqZWN0LmtleXMoZSkscj1PYmplY3Qua2V5cyh0KTtpZihuLmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2ZvcihyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBsPW5bcl07aWYoIW51LmNhbGwodCxsKXx8IUllKGVbbF0sdFtsXSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gU28oZSl7Zm9yKDtlJiZlLmZpcnN0Q2hpbGQ7KWU9ZS5maXJzdENoaWxkO3JldHVybiBlfWZ1bmN0aW9uIGtvKGUsdCl7dmFyIG49U28oZSk7ZT0wO2Zvcih2YXIgcjtuOyl7aWYobi5ub2RlVHlwZT09PTMpe2lmKHI9ZStuLnRleHRDb250ZW50Lmxlbmd0aCxlPD10JiZyPj10KXJldHVybntub2RlOm4sb2Zmc2V0OnQtZX07ZT1yfWU6e2Zvcig7bjspe2lmKG4ubmV4dFNpYmxpbmcpe249bi5uZXh0U2libGluZzticmVhayBlfW49bi5wYXJlbnROb2RlfW49dm9pZCAwfW49U28obil9fWZ1bmN0aW9uIGNhKGUsdCl7cmV0dXJuIGUmJnQ/ZT09PXQ/ITA6ZSYmZS5ub2RlVHlwZT09PTM/ITE6dCYmdC5ub2RlVHlwZT09PTM/Y2EoZSx0LnBhcmVudE5vZGUpOiJjb250YWlucyJpbiBlP2UuY29udGFpbnModCk6ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8hIShlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpJjE2KTohMTohMX1mdW5jdGlvbiBmYSgpe2Zvcih2YXIgZT13aW5kb3csdD1VcigpO3QgaW5zdGFuY2VvZiBlLkhUTUxJRnJhbWVFbGVtZW50Oyl7dHJ5e3ZhciBuPXR5cGVvZiB0LmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZj09InN0cmluZyJ9Y2F0Y2h7bj0hMX1pZihuKWU9dC5jb250ZW50V2luZG93O2Vsc2UgYnJlYWs7dD1VcihlLmRvY3VtZW50KX1yZXR1cm4gdH1mdW5jdGlvbiB2aShlKXt2YXIgdD1lJiZlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHQmJih0PT09ImlucHV0IiYmKGUudHlwZT09PSJ0ZXh0Inx8ZS50eXBlPT09InNlYXJjaCJ8fGUudHlwZT09PSJ0ZWwifHxlLnR5cGU9PT0idXJsInx8ZS50eXBlPT09InBhc3N3b3JkIil8fHQ9PT0idGV4dGFyZWEifHxlLmNvbnRlbnRFZGl0YWJsZT09PSJ0cnVlIil9ZnVuY3Rpb24gaGQoZSl7dmFyIHQ9ZmEoKSxuPWUuZm9jdXNlZEVsZW0scj1lLnNlbGVjdGlvblJhbmdlO2lmKHQhPT1uJiZuJiZuLm93bmVyRG9jdW1lbnQmJmNhKG4ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbikpe2lmKHIhPT1udWxsJiZ2aShuKSl7aWYodD1yLnN0YXJ0LGU9ci5lbmQsZT09PXZvaWQgMCYmKGU9dCksInNlbGVjdGlvblN0YXJ0ImluIG4pbi5zZWxlY3Rpb25TdGFydD10LG4uc2VsZWN0aW9uRW5kPU1hdGgubWluKGUsbi52YWx1ZS5sZW5ndGgpO2Vsc2UgaWYoZT0odD1uLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50KSYmdC5kZWZhdWx0Vmlld3x8d2luZG93LGUuZ2V0U2VsZWN0aW9uKXtlPWUuZ2V0U2VsZWN0aW9uKCk7dmFyIGw9bi50ZXh0Q29udGVudC5sZW5ndGgsdT1NYXRoLm1pbihyLnN0YXJ0LGwpO3I9ci5lbmQ9PT12b2lkIDA/dTpNYXRoLm1pbihyLmVuZCxsKSwhZS5leHRlbmQmJnU+ciYmKGw9cixyPXUsdT1sKSxsPWtvKG4sdSk7dmFyIGk9a28obixyKTtsJiZpJiYoZS5yYW5nZUNvdW50IT09MXx8ZS5hbmNob3JOb2RlIT09bC5ub2RlfHxlLmFuY2hvck9mZnNldCE9PWwub2Zmc2V0fHxlLmZvY3VzTm9kZSE9PWkubm9kZXx8ZS5mb2N1c09mZnNldCE9PWkub2Zmc2V0KSYmKHQ9dC5jcmVhdGVSYW5nZSgpLHQuc2V0U3RhcnQobC5ub2RlLGwub2Zmc2V0KSxlLnJlbW92ZUFsbFJhbmdlcygpLHU+cj8oZS5hZGRSYW5nZSh0KSxlLmV4dGVuZChpLm5vZGUsaS5vZmZzZXQpKToodC5zZXRFbmQoaS5ub2RlLGkub2Zmc2V0KSxlLmFkZFJhbmdlKHQpKSl9fWZvcih0PVtdLGU9bjtlPWUucGFyZW50Tm9kZTspZS5ub2RlVHlwZT09PTEmJnQucHVzaCh7ZWxlbWVudDplLGxlZnQ6ZS5zY3JvbGxMZWZ0LHRvcDplLnNjcm9sbFRvcH0pO2Zvcih0eXBlb2Ygbi5mb2N1cz09ImZ1bmN0aW9uIiYmbi5mb2N1cygpLG49MDtuPHQubGVuZ3RoO24rKyllPXRbbl0sZS5lbGVtZW50LnNjcm9sbExlZnQ9ZS5sZWZ0LGUuZWxlbWVudC5zY3JvbGxUb3A9ZS50b3B9fXZhciBtZD1RZSYmImRvY3VtZW50TW9kZSJpbiBkb2N1bWVudCYmMTE+PWRvY3VtZW50LmRvY3VtZW50TW9kZSxCdD1udWxsLGt1PW51bGwsUm49bnVsbCxFdT0hMTtmdW5jdGlvbiBFbyhlLHQsbil7dmFyIHI9bi53aW5kb3c9PT1uP24uZG9jdW1lbnQ6bi5ub2RlVHlwZT09PTk/bjpuLm93bmVyRG9jdW1lbnQ7RXV8fEJ0PT1udWxsfHxCdCE9PVVyKHIpfHwocj1CdCwic2VsZWN0aW9uU3RhcnQiaW4gciYmdmkocik/cj17c3RhcnQ6ci5zZWxlY3Rpb25TdGFydCxlbmQ6ci5zZWxlY3Rpb25FbmR9OihyPShyLm93bmVyRG9jdW1lbnQmJnIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5nZXRTZWxlY3Rpb24oKSxyPXthbmNob3JOb2RlOnIuYW5jaG9yTm9kZSxhbmNob3JPZmZzZXQ6ci5hbmNob3JPZmZzZXQsZm9jdXNOb2RlOnIuZm9jdXNOb2RlLGZvY3VzT2Zmc2V0OnIuZm9jdXNPZmZzZXR9KSxSbiYmV24oUm4scil8fChSbj1yLHI9UXIoa3UsIm9uU2VsZWN0IiksMDxyLmxlbmd0aCYmKHQ9bmV3IHBpKCJvblNlbGVjdCIsInNlbGVjdCIsbnVsbCx0LG4pLGUucHVzaCh7ZXZlbnQ6dCxsaXN0ZW5lcnM6cn0pLHQudGFyZ2V0PUJ0KSkpfWZ1bmN0aW9uIHlyKGUsdCl7dmFyIG49e307cmV0dXJuIG5bZS50b0xvd2VyQ2FzZSgpXT10LnRvTG93ZXJDYXNlKCksblsiV2Via2l0IitlXT0id2Via2l0Iit0LG5bIk1veiIrZV09Im1veiIrdCxufXZhciBWdD17YW5pbWF0aW9uZW5kOnlyKCJBbmltYXRpb24iLCJBbmltYXRpb25FbmQiKSxhbmltYXRpb25pdGVyYXRpb246eXIoIkFuaW1hdGlvbiIsIkFuaW1hdGlvbkl0ZXJhdGlvbiIpLGFuaW1hdGlvbnN0YXJ0OnlyKCJBbmltYXRpb24iLCJBbmltYXRpb25TdGFydCIpLHRyYW5zaXRpb25lbmQ6eXIoIlRyYW5zaXRpb24iLCJUcmFuc2l0aW9uRW5kIil9LEJsPXt9LGRhPXt9O1FlJiYoZGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsIkFuaW1hdGlvbkV2ZW50ImluIHdpbmRvd3x8KGRlbGV0ZSBWdC5hbmltYXRpb25lbmQuYW5pbWF0aW9uLGRlbGV0ZSBWdC5hbmltYXRpb25pdGVyYXRpb24uYW5pbWF0aW9uLGRlbGV0ZSBWdC5hbmltYXRpb25zdGFydC5hbmltYXRpb24pLCJUcmFuc2l0aW9uRXZlbnQiaW4gd2luZG93fHxkZWxldGUgVnQudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uKTtmdW5jdGlvbiBkbChlKXtpZihCbFtlXSlyZXR1cm4gQmxbZV07aWYoIVZ0W2VdKXJldHVybiBlO3ZhciB0PVZ0W2VdLG47Zm9yKG4gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG4pJiZuIGluIGRhKXJldHVybiBCbFtlXT10W25dO3JldHVybiBlfXZhciBwYT1kbCgiYW5pbWF0aW9uZW5kIiksaGE9ZGwoImFuaW1hdGlvbml0ZXJhdGlvbiIpLG1hPWRsKCJhbmltYXRpb25zdGFydCIpLHZhPWRsKCJ0cmFuc2l0aW9uZW5kIikseWE9bmV3IE1hcCxDbz0iYWJvcnQgYXV4Q2xpY2sgY2FuY2VsIGNhblBsYXkgY2FuUGxheVRocm91Z2ggY2xpY2sgY2xvc2UgY29udGV4dE1lbnUgY29weSBjdXQgZHJhZyBkcmFnRW5kIGRyYWdFbnRlciBkcmFnRXhpdCBkcmFnTGVhdmUgZHJhZ092ZXIgZHJhZ1N0YXJ0IGRyb3AgZHVyYXRpb25DaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgZ290UG9pbnRlckNhcHR1cmUgaW5wdXQgaW52YWxpZCBrZXlEb3duIGtleVByZXNzIGtleVVwIGxvYWQgbG9hZGVkRGF0YSBsb2FkZWRNZXRhZGF0YSBsb2FkU3RhcnQgbG9zdFBvaW50ZXJDYXB0dXJlIG1vdXNlRG93biBtb3VzZU1vdmUgbW91c2VPdXQgbW91c2VPdmVyIG1vdXNlVXAgcGFzdGUgcGF1c2UgcGxheSBwbGF5aW5nIHBvaW50ZXJDYW5jZWwgcG9pbnRlckRvd24gcG9pbnRlck1vdmUgcG9pbnRlck91dCBwb2ludGVyT3ZlciBwb2ludGVyVXAgcHJvZ3Jlc3MgcmF0ZUNoYW5nZSByZXNldCByZXNpemUgc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdWJtaXQgc3VzcGVuZCB0aW1lVXBkYXRlIHRvdWNoQ2FuY2VsIHRvdWNoRW5kIHRvdWNoU3RhcnQgdm9sdW1lQ2hhbmdlIHNjcm9sbCB0b2dnbGUgdG91Y2hNb3ZlIHdhaXRpbmcgd2hlZWwiLnNwbGl0KCIgIik7ZnVuY3Rpb24gbXQoZSx0KXt5YS5zZXQoZSx0KSxPdCh0LFtlXSl9Zm9yKHZhciBWbD0wO1ZsPENvLmxlbmd0aDtWbCsrKXt2YXIgQWw9Q29bVmxdLHZkPUFsLnRvTG93ZXJDYXNlKCkseWQ9QWxbMF0udG9VcHBlckNhc2UoKStBbC5zbGljZSgxKTttdCh2ZCwib24iK3lkKX1tdChwYSwib25BbmltYXRpb25FbmQiKTttdChoYSwib25BbmltYXRpb25JdGVyYXRpb24iKTttdChtYSwib25BbmltYXRpb25TdGFydCIpO210KCJkYmxjbGljayIsIm9uRG91YmxlQ2xpY2siKTttdCgiZm9jdXNpbiIsIm9uRm9jdXMiKTttdCgiZm9jdXNvdXQiLCJvbkJsdXIiKTttdCh2YSwib25UcmFuc2l0aW9uRW5kIik7dG4oIm9uTW91c2VFbnRlciIsWyJtb3VzZW91dCIsIm1vdXNlb3ZlciJdKTt0bigib25Nb3VzZUxlYXZlIixbIm1vdXNlb3V0IiwibW91c2VvdmVyIl0pO3RuKCJvblBvaW50ZXJFbnRlciIsWyJwb2ludGVyb3V0IiwicG9pbnRlcm92ZXIiXSk7dG4oIm9uUG9pbnRlckxlYXZlIixbInBvaW50ZXJvdXQiLCJwb2ludGVyb3ZlciJdKTtPdCgib25DaGFuZ2UiLCJjaGFuZ2UgY2xpY2sgZm9jdXNpbiBmb2N1c291dCBpbnB1dCBrZXlkb3duIGtleXVwIHNlbGVjdGlvbmNoYW5nZSIuc3BsaXQoIiAiKSk7T3QoIm9uU2VsZWN0IiwiZm9jdXNvdXQgY29udGV4dG1lbnUgZHJhZ2VuZCBmb2N1c2luIGtleWRvd24ga2V5dXAgbW91c2Vkb3duIG1vdXNldXAgc2VsZWN0aW9uY2hhbmdlIi5zcGxpdCgiICIpKTtPdCgib25CZWZvcmVJbnB1dCIsWyJjb21wb3NpdGlvbmVuZCIsImtleXByZXNzIiwidGV4dElucHV0IiwicGFzdGUiXSk7T3QoIm9uQ29tcG9zaXRpb25FbmQiLCJjb21wb3NpdGlvbmVuZCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93biIuc3BsaXQoIiAiKSk7T3QoIm9uQ29tcG9zaXRpb25TdGFydCIsImNvbXBvc2l0aW9uc3RhcnQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIikpO090KCJvbkNvbXBvc2l0aW9uVXBkYXRlIiwiY29tcG9zaXRpb251cGRhdGUgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIikpO3ZhciBQbj0iYWJvcnQgY2FucGxheSBjYW5wbGF5dGhyb3VnaCBkdXJhdGlvbmNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBsb2FkZWRkYXRhIGxvYWRlZG1ldGFkYXRhIGxvYWRzdGFydCBwYXVzZSBwbGF5IHBsYXlpbmcgcHJvZ3Jlc3MgcmF0ZWNoYW5nZSByZXNpemUgc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdXNwZW5kIHRpbWV1cGRhdGUgdm9sdW1lY2hhbmdlIHdhaXRpbmciLnNwbGl0KCIgIiksZ2Q9bmV3IFNldCgiY2FuY2VsIGNsb3NlIGludmFsaWQgbG9hZCBzY3JvbGwgdG9nZ2xlIi5zcGxpdCgiICIpLmNvbmNhdChQbikpO2Z1bmN0aW9uIHhvKGUsdCxuKXt2YXIgcj1lLnR5cGV8fCJ1bmtub3duLWV2ZW50IjtlLmN1cnJlbnRUYXJnZXQ9bix2ZihyLHQsdm9pZCAwLGUpLGUuY3VycmVudFRhcmdldD1udWxsfWZ1bmN0aW9uIGdhKGUsdCl7dD0odCY0KSE9PTA7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl0sbD1yLmV2ZW50O3I9ci5saXN0ZW5lcnM7ZTp7dmFyIHU9dm9pZCAwO2lmKHQpZm9yKHZhciBpPXIubGVuZ3RoLTE7MDw9aTtpLS0pe3ZhciBvPXJbaV0scz1vLmluc3RhbmNlLGE9by5jdXJyZW50VGFyZ2V0O2lmKG89by5saXN0ZW5lcixzIT09dSYmbC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrIGU7eG8obCxvLGEpLHU9c31lbHNlIGZvcihpPTA7aTxyLmxlbmd0aDtpKyspe2lmKG89cltpXSxzPW8uaW5zdGFuY2UsYT1vLmN1cnJlbnRUYXJnZXQsbz1vLmxpc3RlbmVyLHMhPT11JiZsLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYnJlYWsgZTt4byhsLG8sYSksdT1zfX19aWYoQnIpdGhyb3cgZT15dSxCcj0hMSx5dT1udWxsLGV9ZnVuY3Rpb24gRihlLHQpe3ZhciBuPXRbTnVdO249PT12b2lkIDAmJihuPXRbTnVdPW5ldyBTZXQpO3ZhciByPWUrIl9fYnViYmxlIjtuLmhhcyhyKXx8KHdhKHQsZSwyLCExKSxuLmFkZChyKSl9ZnVuY3Rpb24gV2woZSx0LG4pe3ZhciByPTA7dCYmKHJ8PTQpLHdhKG4sZSxyLHQpfXZhciBncj0iX3JlYWN0TGlzdGVuaW5nIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtmdW5jdGlvbiBIbihlKXtpZighZVtncl0pe2VbZ3JdPSEwLFBzLmZvckVhY2goZnVuY3Rpb24obil7biE9PSJzZWxlY3Rpb25jaGFuZ2UiJiYoZ2QuaGFzKG4pfHxXbChuLCExLGUpLFdsKG4sITAsZSkpfSk7dmFyIHQ9ZS5ub2RlVHlwZT09PTk/ZTplLm93bmVyRG9jdW1lbnQ7dD09PW51bGx8fHRbZ3JdfHwodFtncl09ITAsV2woInNlbGVjdGlvbmNoYW5nZSIsITEsdCkpfX1mdW5jdGlvbiB3YShlLHQsbixyKXtzd2l0Y2gobmEodCkpe2Nhc2UgMTp2YXIgbD1PZjticmVhaztjYXNlIDQ6bD1NZjticmVhaztkZWZhdWx0Omw9Zml9bj1sLmJpbmQobnVsbCx0LG4sZSksbD12b2lkIDAsIXZ1fHx0IT09InRvdWNoc3RhcnQiJiZ0IT09InRvdWNobW92ZSImJnQhPT0id2hlZWwifHwobD0hMCkscj9sIT09dm9pZCAwP2UuYWRkRXZlbnRMaXN0ZW5lcih0LG4se2NhcHR1cmU6ITAscGFzc2l2ZTpsfSk6ZS5hZGRFdmVudExpc3RlbmVyKHQsbiwhMCk6bCE9PXZvaWQgMD9lLmFkZEV2ZW50TGlzdGVuZXIodCxuLHtwYXNzaXZlOmx9KTplLmFkZEV2ZW50TGlzdGVuZXIodCxuLCExKX1mdW5jdGlvbiBIbChlLHQsbixyLGwpe3ZhciB1PXI7aWYoISh0JjEpJiYhKHQmMikmJnIhPT1udWxsKWU6Zm9yKDs7KXtpZihyPT09bnVsbClyZXR1cm47dmFyIGk9ci50YWc7aWYoaT09PTN8fGk9PT00KXt2YXIgbz1yLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO2lmKG89PT1sfHxvLm5vZGVUeXBlPT09OCYmby5wYXJlbnROb2RlPT09bClicmVhaztpZihpPT09NClmb3IoaT1yLnJldHVybjtpIT09bnVsbDspe3ZhciBzPWkudGFnO2lmKChzPT09M3x8cz09PTQpJiYocz1pLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLHM9PT1sfHxzLm5vZGVUeXBlPT09OCYmcy5wYXJlbnROb2RlPT09bCkpcmV0dXJuO2k9aS5yZXR1cm59Zm9yKDtvIT09bnVsbDspe2lmKGk9RXQobyksaT09PW51bGwpcmV0dXJuO2lmKHM9aS50YWcscz09PTV8fHM9PT02KXtyPXU9aTtjb250aW51ZSBlfW89by5wYXJlbnROb2RlfX1yPXIucmV0dXJufUFzKGZ1bmN0aW9uKCl7dmFyIGE9dSxoPW9pKG4pLHA9W107ZTp7dmFyIG09eWEuZ2V0KGUpO2lmKG0hPT12b2lkIDApe3ZhciB5PXBpLGc9ZTtzd2l0Y2goZSl7Y2FzZSJrZXlwcmVzcyI6aWYoVHIobik9PT0wKWJyZWFrIGU7Y2FzZSJrZXlkb3duIjpjYXNlImtleXVwIjp5PVhmO2JyZWFrO2Nhc2UiZm9jdXNpbiI6Zz0iZm9jdXMiLHk9amw7YnJlYWs7Y2FzZSJmb2N1c291dCI6Zz0iYmx1ciIseT1qbDticmVhaztjYXNlImJlZm9yZWJsdXIiOmNhc2UiYWZ0ZXJibHVyIjp5PWpsO2JyZWFrO2Nhc2UiY2xpY2siOmlmKG4uYnV0dG9uPT09MilicmVhayBlO2Nhc2UiYXV4Y2xpY2siOmNhc2UiZGJsY2xpY2siOmNhc2UibW91c2Vkb3duIjpjYXNlIm1vdXNlbW92ZSI6Y2FzZSJtb3VzZXVwIjpjYXNlIm1vdXNlb3V0IjpjYXNlIm1vdXNlb3ZlciI6Y2FzZSJjb250ZXh0bWVudSI6eT1mbzticmVhaztjYXNlImRyYWciOmNhc2UiZHJhZ2VuZCI6Y2FzZSJkcmFnZW50ZXIiOmNhc2UiZHJhZ2V4aXQiOmNhc2UiZHJhZ2xlYXZlIjpjYXNlImRyYWdvdmVyIjpjYXNlImRyYWdzdGFydCI6Y2FzZSJkcm9wIjp5PUZmO2JyZWFrO2Nhc2UidG91Y2hjYW5jZWwiOmNhc2UidG91Y2hlbmQiOmNhc2UidG91Y2htb3ZlIjpjYXNlInRvdWNoc3RhcnQiOnk9SmY7YnJlYWs7Y2FzZSBwYTpjYXNlIGhhOmNhc2UgbWE6eT0kZjticmVhaztjYXNlIHZhOnk9YmY7YnJlYWs7Y2FzZSJzY3JvbGwiOnk9SWY7YnJlYWs7Y2FzZSJ3aGVlbCI6eT10ZDticmVhaztjYXNlImNvcHkiOmNhc2UiY3V0IjpjYXNlInBhc3RlIjp5PVZmO2JyZWFrO2Nhc2UiZ290cG9pbnRlcmNhcHR1cmUiOmNhc2UibG9zdHBvaW50ZXJjYXB0dXJlIjpjYXNlInBvaW50ZXJjYW5jZWwiOmNhc2UicG9pbnRlcmRvd24iOmNhc2UicG9pbnRlcm1vdmUiOmNhc2UicG9pbnRlcm91dCI6Y2FzZSJwb2ludGVyb3ZlciI6Y2FzZSJwb2ludGVydXAiOnk9aG99dmFyIHc9KHQmNCkhPT0wLEU9IXcmJmU9PT0ic2Nyb2xsIixmPXc/bSE9PW51bGw/bSsiQ2FwdHVyZSI6bnVsbDptO3c9W107Zm9yKHZhciBjPWEsZDtjIT09bnVsbDspe2Q9Yzt2YXIgdj1kLnN0YXRlTm9kZTtpZihkLnRhZz09PTUmJnYhPT1udWxsJiYoZD12LGYhPT1udWxsJiYodj1VbihjLGYpLHYhPW51bGwmJncucHVzaChRbihjLHYsZCkpKSksRSlicmVhaztjPWMucmV0dXJufTA8dy5sZW5ndGgmJihtPW5ldyB5KG0sZyxudWxsLG4saCkscC5wdXNoKHtldmVudDptLGxpc3RlbmVyczp3fSkpfX1pZighKHQmNykpe2U6e2lmKG09ZT09PSJtb3VzZW92ZXIifHxlPT09InBvaW50ZXJvdmVyIix5PWU9PT0ibW91c2VvdXQifHxlPT09InBvaW50ZXJvdXQiLG0mJm4hPT1odSYmKGc9bi5yZWxhdGVkVGFyZ2V0fHxuLmZyb21FbGVtZW50KSYmKEV0KGcpfHxnW0tlXSkpYnJlYWsgZTtpZigoeXx8bSkmJihtPWgud2luZG93PT09aD9oOihtPWgub3duZXJEb2N1bWVudCk/bS5kZWZhdWx0Vmlld3x8bS5wYXJlbnRXaW5kb3c6d2luZG93LHk/KGc9bi5yZWxhdGVkVGFyZ2V0fHxuLnRvRWxlbWVudCx5PWEsZz1nP0V0KGcpOm51bGwsZyE9PW51bGwmJihFPU10KGcpLGchPT1FfHxnLnRhZyE9PTUmJmcudGFnIT09NikmJihnPW51bGwpKTooeT1udWxsLGc9YSkseSE9PWcpKXtpZih3PWZvLHY9Im9uTW91c2VMZWF2ZSIsZj0ib25Nb3VzZUVudGVyIixjPSJtb3VzZSIsKGU9PT0icG9pbnRlcm91dCJ8fGU9PT0icG9pbnRlcm92ZXIiKSYmKHc9aG8sdj0ib25Qb2ludGVyTGVhdmUiLGY9Im9uUG9pbnRlckVudGVyIixjPSJwb2ludGVyIiksRT15PT1udWxsP206QXQoeSksZD1nPT1udWxsP206QXQoZyksbT1uZXcgdyh2LGMrImxlYXZlIix5LG4saCksbS50YXJnZXQ9RSxtLnJlbGF0ZWRUYXJnZXQ9ZCx2PW51bGwsRXQoaCk9PT1hJiYodz1uZXcgdyhmLGMrImVudGVyIixnLG4saCksdy50YXJnZXQ9ZCx3LnJlbGF0ZWRUYXJnZXQ9RSx2PXcpLEU9dix5JiZnKXQ6e2Zvcih3PXksZj1nLGM9MCxkPXc7ZDtkPUZ0KGQpKWMrKztmb3IoZD0wLHY9Zjt2O3Y9RnQodikpZCsrO2Zvcig7MDxjLWQ7KXc9RnQodyksYy0tO2Zvcig7MDxkLWM7KWY9RnQoZiksZC0tO2Zvcig7Yy0tOyl7aWYodz09PWZ8fGYhPT1udWxsJiZ3PT09Zi5hbHRlcm5hdGUpYnJlYWsgdDt3PUZ0KHcpLGY9RnQoZil9dz1udWxsfWVsc2Ugdz1udWxsO3khPT1udWxsJiZfbyhwLG0seSx3LCExKSxnIT09bnVsbCYmRSE9PW51bGwmJl9vKHAsRSxnLHcsITApfX1lOntpZihtPWE/QXQoYSk6d2luZG93LHk9bS5ub2RlTmFtZSYmbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHk9PT0ic2VsZWN0Inx8eT09PSJpbnB1dCImJm0udHlwZT09PSJmaWxlIil2YXIgaz1zZDtlbHNlIGlmKHlvKG0pKWlmKHNhKWs9ZGQ7ZWxzZXtrPWNkO3ZhciBQPWFkfWVsc2UoeT1tLm5vZGVOYW1lKSYmeS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmKG0udHlwZT09PSJjaGVja2JveCJ8fG0udHlwZT09PSJyYWRpbyIpJiYoaz1mZCk7aWYoayYmKGs9ayhlLGEpKSl7b2EocCxrLG4saCk7YnJlYWsgZX1QJiZQKGUsbSxhKSxlPT09ImZvY3Vzb3V0IiYmKFA9bS5fd3JhcHBlclN0YXRlKSYmUC5jb250cm9sbGVkJiZtLnR5cGU9PT0ibnVtYmVyIiYmYXUobSwibnVtYmVyIixtLnZhbHVlKX1zd2l0Y2goUD1hP0F0KGEpOndpbmRvdyxlKXtjYXNlImZvY3VzaW4iOih5byhQKXx8UC5jb250ZW50RWRpdGFibGU9PT0idHJ1ZSIpJiYoQnQ9UCxrdT1hLFJuPW51bGwpO2JyZWFrO2Nhc2UiZm9jdXNvdXQiOlJuPWt1PUJ0PW51bGw7YnJlYWs7Y2FzZSJtb3VzZWRvd24iOkV1PSEwO2JyZWFrO2Nhc2UiY29udGV4dG1lbnUiOmNhc2UibW91c2V1cCI6Y2FzZSJkcmFnZW5kIjpFdT0hMSxFbyhwLG4saCk7YnJlYWs7Y2FzZSJzZWxlY3Rpb25jaGFuZ2UiOmlmKG1kKWJyZWFrO2Nhc2Uia2V5ZG93biI6Y2FzZSJrZXl1cCI6RW8ocCxuLGgpfXZhciBOO2lmKG1pKWU6e3N3aXRjaChlKXtjYXNlImNvbXBvc2l0aW9uc3RhcnQiOnZhciB6PSJvbkNvbXBvc2l0aW9uU3RhcnQiO2JyZWFrIGU7Y2FzZSJjb21wb3NpdGlvbmVuZCI6ej0ib25Db21wb3NpdGlvbkVuZCI7YnJlYWsgZTtjYXNlImNvbXBvc2l0aW9udXBkYXRlIjp6PSJvbkNvbXBvc2l0aW9uVXBkYXRlIjticmVhayBlfXo9dm9pZCAwfWVsc2UgJHQ/dWEoZSxuKSYmKHo9Im9uQ29tcG9zaXRpb25FbmQiKTplPT09ImtleWRvd24iJiZuLmtleUNvZGU9PT0yMjkmJih6PSJvbkNvbXBvc2l0aW9uU3RhcnQiKTt6JiYobGEmJm4ubG9jYWxlIT09ImtvIiYmKCR0fHx6IT09Im9uQ29tcG9zaXRpb25TdGFydCI/ej09PSJvbkNvbXBvc2l0aW9uRW5kIiYmJHQmJihOPXJhKCkpOih0dD1oLGRpPSJ2YWx1ZSJpbiB0dD90dC52YWx1ZTp0dC50ZXh0Q29udGVudCwkdD0hMCkpLFA9UXIoYSx6KSwwPFAubGVuZ3RoJiYoej1uZXcgcG8oeixlLG51bGwsbixoKSxwLnB1c2goe2V2ZW50OnosbGlzdGVuZXJzOlB9KSxOP3ouZGF0YT1OOihOPWlhKG4pLE4hPT1udWxsJiYoei5kYXRhPU4pKSkpLChOPXJkP2xkKGUsbik6dWQoZSxuKSkmJihhPVFyKGEsIm9uQmVmb3JlSW5wdXQiKSwwPGEubGVuZ3RoJiYoaD1uZXcgcG8oIm9uQmVmb3JlSW5wdXQiLCJiZWZvcmVpbnB1dCIsbnVsbCxuLGgpLHAucHVzaCh7ZXZlbnQ6aCxsaXN0ZW5lcnM6YX0pLGguZGF0YT1OKSl9Z2EocCx0KX0pfWZ1bmN0aW9uIFFuKGUsdCxuKXtyZXR1cm57aW5zdGFuY2U6ZSxsaXN0ZW5lcjp0LGN1cnJlbnRUYXJnZXQ6bn19ZnVuY3Rpb24gUXIoZSx0KXtmb3IodmFyIG49dCsiQ2FwdHVyZSIscj1bXTtlIT09bnVsbDspe3ZhciBsPWUsdT1sLnN0YXRlTm9kZTtsLnRhZz09PTUmJnUhPT1udWxsJiYobD11LHU9VW4oZSxuKSx1IT1udWxsJiZyLnVuc2hpZnQoUW4oZSx1LGwpKSx1PVVuKGUsdCksdSE9bnVsbCYmci5wdXNoKFFuKGUsdSxsKSkpLGU9ZS5yZXR1cm59cmV0dXJuIHJ9ZnVuY3Rpb24gRnQoZSl7aWYoZT09PW51bGwpcmV0dXJuIG51bGw7ZG8gZT1lLnJldHVybjt3aGlsZShlJiZlLnRhZyE9PTUpO3JldHVybiBlfHxudWxsfWZ1bmN0aW9uIF9vKGUsdCxuLHIsbCl7Zm9yKHZhciB1PXQuX3JlYWN0TmFtZSxpPVtdO24hPT1udWxsJiZuIT09cjspe3ZhciBvPW4scz1vLmFsdGVybmF0ZSxhPW8uc3RhdGVOb2RlO2lmKHMhPT1udWxsJiZzPT09cilicmVhaztvLnRhZz09PTUmJmEhPT1udWxsJiYobz1hLGw/KHM9VW4obix1KSxzIT1udWxsJiZpLnVuc2hpZnQoUW4obixzLG8pKSk6bHx8KHM9VW4obix1KSxzIT1udWxsJiZpLnB1c2goUW4obixzLG8pKSkpLG49bi5yZXR1cm59aS5sZW5ndGghPT0wJiZlLnB1c2goe2V2ZW50OnQsbGlzdGVuZXJzOml9KX12YXIgd2Q9L1xyXG4/L2csU2Q9L1x1MDAwMHxcdUZGRkQvZztmdW5jdGlvbiBQbyhlKXtyZXR1cm4odHlwZW9mIGU9PSJzdHJpbmciP2U6IiIrZSkucmVwbGFjZSh3ZCxgCmApLnJlcGxhY2UoU2QsIiIpfWZ1bmN0aW9uIHdyKGUsdCxuKXtpZih0PVBvKHQpLFBvKGUpIT09dCYmbil0aHJvdyBFcnJvcihTKDQyNSkpfWZ1bmN0aW9uIEtyKCl7fXZhciBDdT1udWxsLHh1PW51bGw7ZnVuY3Rpb24gX3UoZSx0KXtyZXR1cm4gZT09PSJ0ZXh0YXJlYSJ8fGU9PT0ibm9zY3JpcHQifHx0eXBlb2YgdC5jaGlsZHJlbj09InN0cmluZyJ8fHR5cGVvZiB0LmNoaWxkcmVuPT0ibnVtYmVyInx8dHlwZW9mIHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9PSJvYmplY3QiJiZ0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIT09bnVsbCYmdC5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWwhPW51bGx9dmFyIFB1PXR5cGVvZiBzZXRUaW1lb3V0PT0iZnVuY3Rpb24iP3NldFRpbWVvdXQ6dm9pZCAwLGtkPXR5cGVvZiBjbGVhclRpbWVvdXQ9PSJmdW5jdGlvbiI/Y2xlYXJUaW1lb3V0OnZvaWQgMCxObz10eXBlb2YgUHJvbWlzZT09ImZ1bmN0aW9uIj9Qcm9taXNlOnZvaWQgMCxFZD10eXBlb2YgcXVldWVNaWNyb3Rhc2s9PSJmdW5jdGlvbiI/cXVldWVNaWNyb3Rhc2s6dHlwZW9mIE5vPCJ1Ij9mdW5jdGlvbihlKXtyZXR1cm4gTm8ucmVzb2x2ZShudWxsKS50aGVuKGUpLmNhdGNoKENkKX06UHU7ZnVuY3Rpb24gQ2QoZSl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGV9KX1mdW5jdGlvbiBRbChlLHQpe3ZhciBuPXQscj0wO2Rve3ZhciBsPW4ubmV4dFNpYmxpbmc7aWYoZS5yZW1vdmVDaGlsZChuKSxsJiZsLm5vZGVUeXBlPT09OClpZihuPWwuZGF0YSxuPT09Ii8kIil7aWYocj09PTApe2UucmVtb3ZlQ2hpbGQobCksVm4odCk7cmV0dXJufXItLX1lbHNlIG4hPT0iJCImJm4hPT0iJD8iJiZuIT09IiQhInx8cisrO249bH13aGlsZShuKTtWbih0KX1mdW5jdGlvbiBvdChlKXtmb3IoO2UhPW51bGw7ZT1lLm5leHRTaWJsaW5nKXt2YXIgdD1lLm5vZGVUeXBlO2lmKHQ9PT0xfHx0PT09MylicmVhaztpZih0PT09OCl7aWYodD1lLmRhdGEsdD09PSIkInx8dD09PSIkISJ8fHQ9PT0iJD8iKWJyZWFrO2lmKHQ9PT0iLyQiKXJldHVybiBudWxsfX1yZXR1cm4gZX1mdW5jdGlvbiB6byhlKXtlPWUucHJldmlvdXNTaWJsaW5nO2Zvcih2YXIgdD0wO2U7KXtpZihlLm5vZGVUeXBlPT09OCl7dmFyIG49ZS5kYXRhO2lmKG49PT0iJCJ8fG49PT0iJCEifHxuPT09IiQ/Iil7aWYodD09PTApcmV0dXJuIGU7dC0tfWVsc2Ugbj09PSIvJCImJnQrK31lPWUucHJldmlvdXNTaWJsaW5nfXJldHVybiBudWxsfXZhciBmbj1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKSxqZT0iX19yZWFjdEZpYmVyJCIrZm4sS249Il9fcmVhY3RQcm9wcyQiK2ZuLEtlPSJfX3JlYWN0Q29udGFpbmVyJCIrZm4sTnU9Il9fcmVhY3RFdmVudHMkIitmbix4ZD0iX19yZWFjdExpc3RlbmVycyQiK2ZuLF9kPSJfX3JlYWN0SGFuZGxlcyQiK2ZuO2Z1bmN0aW9uIEV0KGUpe3ZhciB0PWVbamVdO2lmKHQpcmV0dXJuIHQ7Zm9yKHZhciBuPWUucGFyZW50Tm9kZTtuOyl7aWYodD1uW0tlXXx8bltqZV0pe2lmKG49dC5hbHRlcm5hdGUsdC5jaGlsZCE9PW51bGx8fG4hPT1udWxsJiZuLmNoaWxkIT09bnVsbClmb3IoZT16byhlKTtlIT09bnVsbDspe2lmKG49ZVtqZV0pcmV0dXJuIG47ZT16byhlKX1yZXR1cm4gdH1lPW4sbj1lLnBhcmVudE5vZGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gbHIoZSl7cmV0dXJuIGU9ZVtqZV18fGVbS2VdLCFlfHxlLnRhZyE9PTUmJmUudGFnIT09NiYmZS50YWchPT0xMyYmZS50YWchPT0zP251bGw6ZX1mdW5jdGlvbiBBdChlKXtpZihlLnRhZz09PTV8fGUudGFnPT09NilyZXR1cm4gZS5zdGF0ZU5vZGU7dGhyb3cgRXJyb3IoUygzMykpfWZ1bmN0aW9uIHBsKGUpe3JldHVybiBlW0tuXXx8bnVsbH12YXIgenU9W10sV3Q9LTE7ZnVuY3Rpb24gdnQoZSl7cmV0dXJue2N1cnJlbnQ6ZX19ZnVuY3Rpb24gaihlKXswPld0fHwoZS5jdXJyZW50PXp1W1d0XSx6dVtXdF09bnVsbCxXdC0tKX1mdW5jdGlvbiBEKGUsdCl7V3QrKyx6dVtXdF09ZS5jdXJyZW50LGUuY3VycmVudD10fXZhciBodD17fSx1ZT12dChodCksZGU9dnQoITEpLE50PWh0O2Z1bmN0aW9uIG5uKGUsdCl7dmFyIG49ZS50eXBlLmNvbnRleHRUeXBlcztpZighbilyZXR1cm4gaHQ7dmFyIHI9ZS5zdGF0ZU5vZGU7aWYociYmci5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PT09dClyZXR1cm4gci5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dDt2YXIgbD17fSx1O2Zvcih1IGluIG4pbFt1XT10W3VdO3JldHVybiByJiYoZT1lLnN0YXRlTm9kZSxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9dCxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PWwpLGx9ZnVuY3Rpb24gcGUoZSl7cmV0dXJuIGU9ZS5jaGlsZENvbnRleHRUeXBlcyxlIT1udWxsfWZ1bmN0aW9uIFlyKCl7aihkZSksaih1ZSl9ZnVuY3Rpb24gTG8oZSx0LG4pe2lmKHVlLmN1cnJlbnQhPT1odCl0aHJvdyBFcnJvcihTKDE2OCkpO0QodWUsdCksRChkZSxuKX1mdW5jdGlvbiBTYShlLHQsbil7dmFyIHI9ZS5zdGF0ZU5vZGU7aWYodD10LmNoaWxkQ29udGV4dFR5cGVzLHR5cGVvZiByLmdldENoaWxkQ29udGV4dCE9ImZ1bmN0aW9uIilyZXR1cm4gbjtyPXIuZ2V0Q2hpbGRDb250ZXh0KCk7Zm9yKHZhciBsIGluIHIpaWYoIShsIGluIHQpKXRocm93IEVycm9yKFMoMTA4LGFmKGUpfHwiVW5rbm93biIsbCkpO3JldHVybiBWKHt9LG4scil9ZnVuY3Rpb24gWHIoZSl7cmV0dXJuIGU9KGU9ZS5zdGF0ZU5vZGUpJiZlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0fHxodCxOdD11ZS5jdXJyZW50LEQodWUsZSksRChkZSxkZS5jdXJyZW50KSwhMH1mdW5jdGlvbiBUbyhlLHQsbil7dmFyIHI9ZS5zdGF0ZU5vZGU7aWYoIXIpdGhyb3cgRXJyb3IoUygxNjkpKTtuPyhlPVNhKGUsdCxOdCksci5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dD1lLGooZGUpLGoodWUpLEQodWUsZSkpOmooZGUpLEQoZGUsbil9dmFyIFZlPW51bGwsaGw9ITEsS2w9ITE7ZnVuY3Rpb24ga2EoZSl7VmU9PT1udWxsP1ZlPVtlXTpWZS5wdXNoKGUpfWZ1bmN0aW9uIFBkKGUpe2hsPSEwLGthKGUpfWZ1bmN0aW9uIHl0KCl7aWYoIUtsJiZWZSE9PW51bGwpe0tsPSEwO3ZhciBlPTAsdD1JO3RyeXt2YXIgbj1WZTtmb3IoST0xO2U8bi5sZW5ndGg7ZSsrKXt2YXIgcj1uW2VdO2RvIHI9cighMCk7d2hpbGUociE9PW51bGwpfVZlPW51bGwsaGw9ITF9Y2F0Y2gobCl7dGhyb3cgVmUhPT1udWxsJiYoVmU9VmUuc2xpY2UoZSsxKSksS3Moc2kseXQpLGx9ZmluYWxseXtJPXQsS2w9ITF9fXJldHVybiBudWxsfXZhciBIdD1bXSxRdD0wLEdyPW51bGwsWnI9MCxrZT1bXSxFZT0wLHp0PW51bGwsQWU9MSxXZT0iIjtmdW5jdGlvbiBTdChlLHQpe0h0W1F0KytdPVpyLEh0W1F0KytdPUdyLEdyPWUsWnI9dH1mdW5jdGlvbiBFYShlLHQsbil7a2VbRWUrK109QWUsa2VbRWUrK109V2Usa2VbRWUrK109enQsenQ9ZTt2YXIgcj1BZTtlPVdlO3ZhciBsPTMyLU9lKHIpLTE7ciY9figxPDxsKSxuKz0xO3ZhciB1PTMyLU9lKHQpK2w7aWYoMzA8dSl7dmFyIGk9bC1sJTU7dT0ociYoMTw8aSktMSkudG9TdHJpbmcoMzIpLHI+Pj1pLGwtPWksQWU9MTw8MzItT2UodCkrbHxuPDxsfHIsV2U9dStlfWVsc2UgQWU9MTw8dXxuPDxsfHIsV2U9ZX1mdW5jdGlvbiB5aShlKXtlLnJldHVybiE9PW51bGwmJihTdChlLDEpLEVhKGUsMSwwKSl9ZnVuY3Rpb24gZ2koZSl7Zm9yKDtlPT09R3I7KUdyPUh0Wy0tUXRdLEh0W1F0XT1udWxsLFpyPUh0Wy0tUXRdLEh0W1F0XT1udWxsO2Zvcig7ZT09PXp0Oyl6dD1rZVstLUVlXSxrZVtFZV09bnVsbCxXZT1rZVstLUVlXSxrZVtFZV09bnVsbCxBZT1rZVstLUVlXSxrZVtFZV09bnVsbH12YXIgeWU9bnVsbCx2ZT1udWxsLFU9ITEsUmU9bnVsbDtmdW5jdGlvbiBDYShlLHQpe3ZhciBuPUNlKDUsbnVsbCxudWxsLDApO24uZWxlbWVudFR5cGU9IkRFTEVURUQiLG4uc3RhdGVOb2RlPXQsbi5yZXR1cm49ZSx0PWUuZGVsZXRpb25zLHQ9PT1udWxsPyhlLmRlbGV0aW9ucz1bbl0sZS5mbGFnc3w9MTYpOnQucHVzaChuKX1mdW5jdGlvbiBSbyhlLHQpe3N3aXRjaChlLnRhZyl7Y2FzZSA1OnZhciBuPWUudHlwZTtyZXR1cm4gdD10Lm5vZGVUeXBlIT09MXx8bi50b0xvd2VyQ2FzZSgpIT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP251bGw6dCx0IT09bnVsbD8oZS5zdGF0ZU5vZGU9dCx5ZT1lLHZlPW90KHQuZmlyc3RDaGlsZCksITApOiExO2Nhc2UgNjpyZXR1cm4gdD1lLnBlbmRpbmdQcm9wcz09PSIifHx0Lm5vZGVUeXBlIT09Mz9udWxsOnQsdCE9PW51bGw/KGUuc3RhdGVOb2RlPXQseWU9ZSx2ZT1udWxsLCEwKTohMTtjYXNlIDEzOnJldHVybiB0PXQubm9kZVR5cGUhPT04P251bGw6dCx0IT09bnVsbD8obj16dCE9PW51bGw/e2lkOkFlLG92ZXJmbG93OldlfTpudWxsLGUubWVtb2l6ZWRTdGF0ZT17ZGVoeWRyYXRlZDp0LHRyZWVDb250ZXh0Om4scmV0cnlMYW5lOjEwNzM3NDE4MjR9LG49Q2UoMTgsbnVsbCxudWxsLDApLG4uc3RhdGVOb2RlPXQsbi5yZXR1cm49ZSxlLmNoaWxkPW4seWU9ZSx2ZT1udWxsLCEwKTohMTtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBMdShlKXtyZXR1cm4oZS5tb2RlJjEpIT09MCYmKGUuZmxhZ3MmMTI4KT09PTB9ZnVuY3Rpb24gVHUoZSl7aWYoVSl7dmFyIHQ9dmU7aWYodCl7dmFyIG49dDtpZighUm8oZSx0KSl7aWYoTHUoZSkpdGhyb3cgRXJyb3IoUyg0MTgpKTt0PW90KG4ubmV4dFNpYmxpbmcpO3ZhciByPXllO3QmJlJvKGUsdCk/Q2EocixuKTooZS5mbGFncz1lLmZsYWdzJi00MDk3fDIsVT0hMSx5ZT1lKX19ZWxzZXtpZihMdShlKSl0aHJvdyBFcnJvcihTKDQxOCkpO2UuZmxhZ3M9ZS5mbGFncyYtNDA5N3wyLFU9ITEseWU9ZX19fWZ1bmN0aW9uIE9vKGUpe2ZvcihlPWUucmV0dXJuO2UhPT1udWxsJiZlLnRhZyE9PTUmJmUudGFnIT09MyYmZS50YWchPT0xMzspZT1lLnJldHVybjt5ZT1lfWZ1bmN0aW9uIFNyKGUpe2lmKGUhPT15ZSlyZXR1cm4hMTtpZighVSlyZXR1cm4gT28oZSksVT0hMCwhMTt2YXIgdDtpZigodD1lLnRhZyE9PTMpJiYhKHQ9ZS50YWchPT01KSYmKHQ9ZS50eXBlLHQ9dCE9PSJoZWFkIiYmdCE9PSJib2R5IiYmIV91KGUudHlwZSxlLm1lbW9pemVkUHJvcHMpKSx0JiYodD12ZSkpe2lmKEx1KGUpKXRocm93IHhhKCksRXJyb3IoUyg0MTgpKTtmb3IoO3Q7KUNhKGUsdCksdD1vdCh0Lm5leHRTaWJsaW5nKX1pZihPbyhlKSxlLnRhZz09PTEzKXtpZihlPWUubWVtb2l6ZWRTdGF0ZSxlPWUhPT1udWxsP2UuZGVoeWRyYXRlZDpudWxsLCFlKXRocm93IEVycm9yKFMoMzE3KSk7ZTp7Zm9yKGU9ZS5uZXh0U2libGluZyx0PTA7ZTspe2lmKGUubm9kZVR5cGU9PT04KXt2YXIgbj1lLmRhdGE7aWYobj09PSIvJCIpe2lmKHQ9PT0wKXt2ZT1vdChlLm5leHRTaWJsaW5nKTticmVhayBlfXQtLX1lbHNlIG4hPT0iJCImJm4hPT0iJCEiJiZuIT09IiQ/Inx8dCsrfWU9ZS5uZXh0U2libGluZ312ZT1udWxsfX1lbHNlIHZlPXllP290KGUuc3RhdGVOb2RlLm5leHRTaWJsaW5nKTpudWxsO3JldHVybiEwfWZ1bmN0aW9uIHhhKCl7Zm9yKHZhciBlPXZlO2U7KWU9b3QoZS5uZXh0U2libGluZyl9ZnVuY3Rpb24gcm4oKXt2ZT15ZT1udWxsLFU9ITF9ZnVuY3Rpb24gd2koZSl7UmU9PT1udWxsP1JlPVtlXTpSZS5wdXNoKGUpfXZhciBOZD1HZS5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZztmdW5jdGlvbiBTbihlLHQsbil7aWYoZT1uLnJlZixlIT09bnVsbCYmdHlwZW9mIGUhPSJmdW5jdGlvbiImJnR5cGVvZiBlIT0ib2JqZWN0Iil7aWYobi5fb3duZXIpe2lmKG49bi5fb3duZXIsbil7aWYobi50YWchPT0xKXRocm93IEVycm9yKFMoMzA5KSk7dmFyIHI9bi5zdGF0ZU5vZGV9aWYoIXIpdGhyb3cgRXJyb3IoUygxNDcsZSkpO3ZhciBsPXIsdT0iIitlO3JldHVybiB0IT09bnVsbCYmdC5yZWYhPT1udWxsJiZ0eXBlb2YgdC5yZWY9PSJmdW5jdGlvbiImJnQucmVmLl9zdHJpbmdSZWY9PT11P3QucmVmOih0PWZ1bmN0aW9uKGkpe3ZhciBvPWwucmVmcztpPT09bnVsbD9kZWxldGUgb1t1XTpvW3VdPWl9LHQuX3N0cmluZ1JlZj11LHQpfWlmKHR5cGVvZiBlIT0ic3RyaW5nIil0aHJvdyBFcnJvcihTKDI4NCkpO2lmKCFuLl9vd25lcil0aHJvdyBFcnJvcihTKDI5MCxlKSl9cmV0dXJuIGV9ZnVuY3Rpb24ga3IoZSx0KXt0aHJvdyBlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSxFcnJvcihTKDMxLGU9PT0iW29iamVjdCBPYmplY3RdIj8ib2JqZWN0IHdpdGgga2V5cyB7IitPYmplY3Qua2V5cyh0KS5qb2luKCIsICIpKyJ9IjplKSl9ZnVuY3Rpb24gTW8oZSl7dmFyIHQ9ZS5faW5pdDtyZXR1cm4gdChlLl9wYXlsb2FkKX1mdW5jdGlvbiBfYShlKXtmdW5jdGlvbiB0KGYsYyl7aWYoZSl7dmFyIGQ9Zi5kZWxldGlvbnM7ZD09PW51bGw/KGYuZGVsZXRpb25zPVtjXSxmLmZsYWdzfD0xNik6ZC5wdXNoKGMpfX1mdW5jdGlvbiBuKGYsYyl7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKDtjIT09bnVsbDspdChmLGMpLGM9Yy5zaWJsaW5nO3JldHVybiBudWxsfWZ1bmN0aW9uIHIoZixjKXtmb3IoZj1uZXcgTWFwO2MhPT1udWxsOyljLmtleSE9PW51bGw/Zi5zZXQoYy5rZXksYyk6Zi5zZXQoYy5pbmRleCxjKSxjPWMuc2libGluZztyZXR1cm4gZn1mdW5jdGlvbiBsKGYsYyl7cmV0dXJuIGY9ZnQoZixjKSxmLmluZGV4PTAsZi5zaWJsaW5nPW51bGwsZn1mdW5jdGlvbiB1KGYsYyxkKXtyZXR1cm4gZi5pbmRleD1kLGU/KGQ9Zi5hbHRlcm5hdGUsZCE9PW51bGw/KGQ9ZC5pbmRleCxkPGM/KGYuZmxhZ3N8PTIsYyk6ZCk6KGYuZmxhZ3N8PTIsYykpOihmLmZsYWdzfD0xMDQ4NTc2LGMpfWZ1bmN0aW9uIGkoZil7cmV0dXJuIGUmJmYuYWx0ZXJuYXRlPT09bnVsbCYmKGYuZmxhZ3N8PTIpLGZ9ZnVuY3Rpb24gbyhmLGMsZCx2KXtyZXR1cm4gYz09PW51bGx8fGMudGFnIT09Nj8oYz1ibChkLGYubW9kZSx2KSxjLnJldHVybj1mLGMpOihjPWwoYyxkKSxjLnJldHVybj1mLGMpfWZ1bmN0aW9uIHMoZixjLGQsdil7dmFyIGs9ZC50eXBlO3JldHVybiBrPT09VXQ/aChmLGMsZC5wcm9wcy5jaGlsZHJlbix2LGQua2V5KTpjIT09bnVsbCYmKGMuZWxlbWVudFR5cGU9PT1rfHx0eXBlb2Ygaz09Im9iamVjdCImJmshPT1udWxsJiZrLiQkdHlwZW9mPT09SmUmJk1vKGspPT09Yy50eXBlKT8odj1sKGMsZC5wcm9wcyksdi5yZWY9U24oZixjLGQpLHYucmV0dXJuPWYsdik6KHY9anIoZC50eXBlLGQua2V5LGQucHJvcHMsbnVsbCxmLm1vZGUsdiksdi5yZWY9U24oZixjLGQpLHYucmV0dXJuPWYsdil9ZnVuY3Rpb24gYShmLGMsZCx2KXtyZXR1cm4gYz09PW51bGx8fGMudGFnIT09NHx8Yy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyE9PWQuY29udGFpbmVySW5mb3x8Yy5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24hPT1kLmltcGxlbWVudGF0aW9uPyhjPWV1KGQsZi5tb2RlLHYpLGMucmV0dXJuPWYsYyk6KGM9bChjLGQuY2hpbGRyZW58fFtdKSxjLnJldHVybj1mLGMpfWZ1bmN0aW9uIGgoZixjLGQsdixrKXtyZXR1cm4gYz09PW51bGx8fGMudGFnIT09Nz8oYz1QdChkLGYubW9kZSx2LGspLGMucmV0dXJuPWYsYyk6KGM9bChjLGQpLGMucmV0dXJuPWYsYyl9ZnVuY3Rpb24gcChmLGMsZCl7aWYodHlwZW9mIGM9PSJzdHJpbmciJiZjIT09IiJ8fHR5cGVvZiBjPT0ibnVtYmVyIilyZXR1cm4gYz1ibCgiIitjLGYubW9kZSxkKSxjLnJldHVybj1mLGM7aWYodHlwZW9mIGM9PSJvYmplY3QiJiZjIT09bnVsbCl7c3dpdGNoKGMuJCR0eXBlb2Ype2Nhc2UgY3I6cmV0dXJuIGQ9anIoYy50eXBlLGMua2V5LGMucHJvcHMsbnVsbCxmLm1vZGUsZCksZC5yZWY9U24oZixudWxsLGMpLGQucmV0dXJuPWYsZDtjYXNlIGp0OnJldHVybiBjPWV1KGMsZi5tb2RlLGQpLGMucmV0dXJuPWYsYztjYXNlIEplOnZhciB2PWMuX2luaXQ7cmV0dXJuIHAoZix2KGMuX3BheWxvYWQpLGQpfWlmKHhuKGMpfHxtbihjKSlyZXR1cm4gYz1QdChjLGYubW9kZSxkLG51bGwpLGMucmV0dXJuPWYsYztrcihmLGMpfXJldHVybiBudWxsfWZ1bmN0aW9uIG0oZixjLGQsdil7dmFyIGs9YyE9PW51bGw/Yy5rZXk6bnVsbDtpZih0eXBlb2YgZD09InN0cmluZyImJmQhPT0iInx8dHlwZW9mIGQ9PSJudW1iZXIiKXJldHVybiBrIT09bnVsbD9udWxsOm8oZixjLCIiK2Qsdik7aWYodHlwZW9mIGQ9PSJvYmplY3QiJiZkIT09bnVsbCl7c3dpdGNoKGQuJCR0eXBlb2Ype2Nhc2UgY3I6cmV0dXJuIGQua2V5PT09az9zKGYsYyxkLHYpOm51bGw7Y2FzZSBqdDpyZXR1cm4gZC5rZXk9PT1rP2EoZixjLGQsdik6bnVsbDtjYXNlIEplOnJldHVybiBrPWQuX2luaXQsbShmLGMsayhkLl9wYXlsb2FkKSx2KX1pZih4bihkKXx8bW4oZCkpcmV0dXJuIGshPT1udWxsP251bGw6aChmLGMsZCx2LG51bGwpO2tyKGYsZCl9cmV0dXJuIG51bGx9ZnVuY3Rpb24geShmLGMsZCx2LGspe2lmKHR5cGVvZiB2PT0ic3RyaW5nIiYmdiE9PSIifHx0eXBlb2Ygdj09Im51bWJlciIpcmV0dXJuIGY9Zi5nZXQoZCl8fG51bGwsbyhjLGYsIiIrdixrKTtpZih0eXBlb2Ygdj09Im9iamVjdCImJnYhPT1udWxsKXtzd2l0Y2godi4kJHR5cGVvZil7Y2FzZSBjcjpyZXR1cm4gZj1mLmdldCh2LmtleT09PW51bGw/ZDp2LmtleSl8fG51bGwscyhjLGYsdixrKTtjYXNlIGp0OnJldHVybiBmPWYuZ2V0KHYua2V5PT09bnVsbD9kOnYua2V5KXx8bnVsbCxhKGMsZix2LGspO2Nhc2UgSmU6dmFyIFA9di5faW5pdDtyZXR1cm4geShmLGMsZCxQKHYuX3BheWxvYWQpLGspfWlmKHhuKHYpfHxtbih2KSlyZXR1cm4gZj1mLmdldChkKXx8bnVsbCxoKGMsZix2LGssbnVsbCk7a3IoYyx2KX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBnKGYsYyxkLHYpe2Zvcih2YXIgaz1udWxsLFA9bnVsbCxOPWMsej1jPTAsVz1udWxsO04hPT1udWxsJiZ6PGQubGVuZ3RoO3orKyl7Ti5pbmRleD56PyhXPU4sTj1udWxsKTpXPU4uc2libGluZzt2YXIgTz1tKGYsTixkW3pdLHYpO2lmKE89PT1udWxsKXtOPT09bnVsbCYmKE49Vyk7YnJlYWt9ZSYmTiYmTy5hbHRlcm5hdGU9PT1udWxsJiZ0KGYsTiksYz11KE8sYyx6KSxQPT09bnVsbD9rPU86UC5zaWJsaW5nPU8sUD1PLE49V31pZih6PT09ZC5sZW5ndGgpcmV0dXJuIG4oZixOKSxVJiZTdChmLHopLGs7aWYoTj09PW51bGwpe2Zvcig7ejxkLmxlbmd0aDt6KyspTj1wKGYsZFt6XSx2KSxOIT09bnVsbCYmKGM9dShOLGMseiksUD09PW51bGw/az1OOlAuc2libGluZz1OLFA9Tik7cmV0dXJuIFUmJlN0KGYseiksa31mb3IoTj1yKGYsTik7ejxkLmxlbmd0aDt6KyspVz15KE4sZix6LGRbel0sdiksVyE9PW51bGwmJihlJiZXLmFsdGVybmF0ZSE9PW51bGwmJk4uZGVsZXRlKFcua2V5PT09bnVsbD96Olcua2V5KSxjPXUoVyxjLHopLFA9PT1udWxsP2s9VzpQLnNpYmxpbmc9VyxQPVcpO3JldHVybiBlJiZOLmZvckVhY2goZnVuY3Rpb24oTmUpe3JldHVybiB0KGYsTmUpfSksVSYmU3QoZix6KSxrfWZ1bmN0aW9uIHcoZixjLGQsdil7dmFyIGs9bW4oZCk7aWYodHlwZW9mIGshPSJmdW5jdGlvbiIpdGhyb3cgRXJyb3IoUygxNTApKTtpZihkPWsuY2FsbChkKSxkPT1udWxsKXRocm93IEVycm9yKFMoMTUxKSk7Zm9yKHZhciBQPWs9bnVsbCxOPWMsej1jPTAsVz1udWxsLE89ZC5uZXh0KCk7TiE9PW51bGwmJiFPLmRvbmU7eisrLE89ZC5uZXh0KCkpe04uaW5kZXg+ej8oVz1OLE49bnVsbCk6Vz1OLnNpYmxpbmc7dmFyIE5lPW0oZixOLE8udmFsdWUsdik7aWYoTmU9PT1udWxsKXtOPT09bnVsbCYmKE49Vyk7YnJlYWt9ZSYmTiYmTmUuYWx0ZXJuYXRlPT09bnVsbCYmdChmLE4pLGM9dShOZSxjLHopLFA9PT1udWxsP2s9TmU6UC5zaWJsaW5nPU5lLFA9TmUsTj1XfWlmKE8uZG9uZSlyZXR1cm4gbihmLE4pLFUmJlN0KGYseiksaztpZihOPT09bnVsbCl7Zm9yKDshTy5kb25lO3orKyxPPWQubmV4dCgpKU89cChmLE8udmFsdWUsdiksTyE9PW51bGwmJihjPXUoTyxjLHopLFA9PT1udWxsP2s9TzpQLnNpYmxpbmc9TyxQPU8pO3JldHVybiBVJiZTdChmLHopLGt9Zm9yKE49cihmLE4pOyFPLmRvbmU7eisrLE89ZC5uZXh0KCkpTz15KE4sZix6LE8udmFsdWUsdiksTyE9PW51bGwmJihlJiZPLmFsdGVybmF0ZSE9PW51bGwmJk4uZGVsZXRlKE8ua2V5PT09bnVsbD96Ok8ua2V5KSxjPXUoTyxjLHopLFA9PT1udWxsP2s9TzpQLnNpYmxpbmc9TyxQPU8pO3JldHVybiBlJiZOLmZvckVhY2goZnVuY3Rpb24ocG4pe3JldHVybiB0KGYscG4pfSksVSYmU3QoZix6KSxrfWZ1bmN0aW9uIEUoZixjLGQsdil7aWYodHlwZW9mIGQ9PSJvYmplY3QiJiZkIT09bnVsbCYmZC50eXBlPT09VXQmJmQua2V5PT09bnVsbCYmKGQ9ZC5wcm9wcy5jaGlsZHJlbiksdHlwZW9mIGQ9PSJvYmplY3QiJiZkIT09bnVsbCl7c3dpdGNoKGQuJCR0eXBlb2Ype2Nhc2UgY3I6ZTp7Zm9yKHZhciBrPWQua2V5LFA9YztQIT09bnVsbDspe2lmKFAua2V5PT09ayl7aWYoaz1kLnR5cGUsaz09PVV0KXtpZihQLnRhZz09PTcpe24oZixQLnNpYmxpbmcpLGM9bChQLGQucHJvcHMuY2hpbGRyZW4pLGMucmV0dXJuPWYsZj1jO2JyZWFrIGV9fWVsc2UgaWYoUC5lbGVtZW50VHlwZT09PWt8fHR5cGVvZiBrPT0ib2JqZWN0IiYmayE9PW51bGwmJmsuJCR0eXBlb2Y9PT1KZSYmTW8oayk9PT1QLnR5cGUpe24oZixQLnNpYmxpbmcpLGM9bChQLGQucHJvcHMpLGMucmVmPVNuKGYsUCxkKSxjLnJldHVybj1mLGY9YzticmVhayBlfW4oZixQKTticmVha31lbHNlIHQoZixQKTtQPVAuc2libGluZ31kLnR5cGU9PT1VdD8oYz1QdChkLnByb3BzLmNoaWxkcmVuLGYubW9kZSx2LGQua2V5KSxjLnJldHVybj1mLGY9Yyk6KHY9anIoZC50eXBlLGQua2V5LGQucHJvcHMsbnVsbCxmLm1vZGUsdiksdi5yZWY9U24oZixjLGQpLHYucmV0dXJuPWYsZj12KX1yZXR1cm4gaShmKTtjYXNlIGp0OmU6e2ZvcihQPWQua2V5O2MhPT1udWxsOyl7aWYoYy5rZXk9PT1QKWlmKGMudGFnPT09NCYmYy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbz09PWQuY29udGFpbmVySW5mbyYmYy5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb249PT1kLmltcGxlbWVudGF0aW9uKXtuKGYsYy5zaWJsaW5nKSxjPWwoYyxkLmNoaWxkcmVufHxbXSksYy5yZXR1cm49ZixmPWM7YnJlYWsgZX1lbHNle24oZixjKTticmVha31lbHNlIHQoZixjKTtjPWMuc2libGluZ31jPWV1KGQsZi5tb2RlLHYpLGMucmV0dXJuPWYsZj1jfXJldHVybiBpKGYpO2Nhc2UgSmU6cmV0dXJuIFA9ZC5faW5pdCxFKGYsYyxQKGQuX3BheWxvYWQpLHYpfWlmKHhuKGQpKXJldHVybiBnKGYsYyxkLHYpO2lmKG1uKGQpKXJldHVybiB3KGYsYyxkLHYpO2tyKGYsZCl9cmV0dXJuIHR5cGVvZiBkPT0ic3RyaW5nIiYmZCE9PSIifHx0eXBlb2YgZD09Im51bWJlciI/KGQ9IiIrZCxjIT09bnVsbCYmYy50YWc9PT02PyhuKGYsYy5zaWJsaW5nKSxjPWwoYyxkKSxjLnJldHVybj1mLGY9Yyk6KG4oZixjKSxjPWJsKGQsZi5tb2RlLHYpLGMucmV0dXJuPWYsZj1jKSxpKGYpKTpuKGYsYyl9cmV0dXJuIEV9dmFyIGxuPV9hKCEwKSxQYT1fYSghMSksSnI9dnQobnVsbCkscXI9bnVsbCxLdD1udWxsLFNpPW51bGw7ZnVuY3Rpb24ga2koKXtTaT1LdD1xcj1udWxsfWZ1bmN0aW9uIEVpKGUpe3ZhciB0PUpyLmN1cnJlbnQ7aihKciksZS5fY3VycmVudFZhbHVlPXR9ZnVuY3Rpb24gUnUoZSx0LG4pe2Zvcig7ZSE9PW51bGw7KXt2YXIgcj1lLmFsdGVybmF0ZTtpZigoZS5jaGlsZExhbmVzJnQpIT09dD8oZS5jaGlsZExhbmVzfD10LHIhPT1udWxsJiYoci5jaGlsZExhbmVzfD10KSk6ciE9PW51bGwmJihyLmNoaWxkTGFuZXMmdCkhPT10JiYoci5jaGlsZExhbmVzfD10KSxlPT09bilicmVhaztlPWUucmV0dXJufX1mdW5jdGlvbiBidChlLHQpe3FyPWUsU2k9S3Q9bnVsbCxlPWUuZGVwZW5kZW5jaWVzLGUhPT1udWxsJiZlLmZpcnN0Q29udGV4dCE9PW51bGwmJihlLmxhbmVzJnQmJihmZT0hMCksZS5maXJzdENvbnRleHQ9bnVsbCl9ZnVuY3Rpb24gX2UoZSl7dmFyIHQ9ZS5fY3VycmVudFZhbHVlO2lmKFNpIT09ZSlpZihlPXtjb250ZXh0OmUsbWVtb2l6ZWRWYWx1ZTp0LG5leHQ6bnVsbH0sS3Q9PT1udWxsKXtpZihxcj09PW51bGwpdGhyb3cgRXJyb3IoUygzMDgpKTtLdD1lLHFyLmRlcGVuZGVuY2llcz17bGFuZXM6MCxmaXJzdENvbnRleHQ6ZX19ZWxzZSBLdD1LdC5uZXh0PWU7cmV0dXJuIHR9dmFyIEN0PW51bGw7ZnVuY3Rpb24gQ2koZSl7Q3Q9PT1udWxsP0N0PVtlXTpDdC5wdXNoKGUpfWZ1bmN0aW9uIE5hKGUsdCxuLHIpe3ZhciBsPXQuaW50ZXJsZWF2ZWQ7cmV0dXJuIGw9PT1udWxsPyhuLm5leHQ9bixDaSh0KSk6KG4ubmV4dD1sLm5leHQsbC5uZXh0PW4pLHQuaW50ZXJsZWF2ZWQ9bixZZShlLHIpfWZ1bmN0aW9uIFllKGUsdCl7ZS5sYW5lc3w9dDt2YXIgbj1lLmFsdGVybmF0ZTtmb3IobiE9PW51bGwmJihuLmxhbmVzfD10KSxuPWUsZT1lLnJldHVybjtlIT09bnVsbDspZS5jaGlsZExhbmVzfD10LG49ZS5hbHRlcm5hdGUsbiE9PW51bGwmJihuLmNoaWxkTGFuZXN8PXQpLG49ZSxlPWUucmV0dXJuO3JldHVybiBuLnRhZz09PTM/bi5zdGF0ZU5vZGU6bnVsbH12YXIgcWU9ITE7ZnVuY3Rpb24geGkoZSl7ZS51cGRhdGVRdWV1ZT17YmFzZVN0YXRlOmUubWVtb2l6ZWRTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6bnVsbCxsYXN0QmFzZVVwZGF0ZTpudWxsLHNoYXJlZDp7cGVuZGluZzpudWxsLGludGVybGVhdmVkOm51bGwsbGFuZXM6MH0sZWZmZWN0czpudWxsfX1mdW5jdGlvbiB6YShlLHQpe2U9ZS51cGRhdGVRdWV1ZSx0LnVwZGF0ZVF1ZXVlPT09ZSYmKHQudXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTplLmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6ZS5maXJzdEJhc2VVcGRhdGUsbGFzdEJhc2VVcGRhdGU6ZS5sYXN0QmFzZVVwZGF0ZSxzaGFyZWQ6ZS5zaGFyZWQsZWZmZWN0czplLmVmZmVjdHN9KX1mdW5jdGlvbiBIZShlLHQpe3JldHVybntldmVudFRpbWU6ZSxsYW5lOnQsdGFnOjAscGF5bG9hZDpudWxsLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsfX1mdW5jdGlvbiBzdChlLHQsbil7dmFyIHI9ZS51cGRhdGVRdWV1ZTtpZihyPT09bnVsbClyZXR1cm4gbnVsbDtpZihyPXIuc2hhcmVkLE0mMil7dmFyIGw9ci5wZW5kaW5nO3JldHVybiBsPT09bnVsbD90Lm5leHQ9dDoodC5uZXh0PWwubmV4dCxsLm5leHQ9dCksci5wZW5kaW5nPXQsWWUoZSxuKX1yZXR1cm4gbD1yLmludGVybGVhdmVkLGw9PT1udWxsPyh0Lm5leHQ9dCxDaShyKSk6KHQubmV4dD1sLm5leHQsbC5uZXh0PXQpLHIuaW50ZXJsZWF2ZWQ9dCxZZShlLG4pfWZ1bmN0aW9uIFJyKGUsdCxuKXtpZih0PXQudXBkYXRlUXVldWUsdCE9PW51bGwmJih0PXQuc2hhcmVkLChuJjQxOTQyNDApIT09MCkpe3ZhciByPXQubGFuZXM7ciY9ZS5wZW5kaW5nTGFuZXMsbnw9cix0LmxhbmVzPW4sYWkoZSxuKX19ZnVuY3Rpb24gSW8oZSx0KXt2YXIgbj1lLnVwZGF0ZVF1ZXVlLHI9ZS5hbHRlcm5hdGU7aWYociE9PW51bGwmJihyPXIudXBkYXRlUXVldWUsbj09PXIpKXt2YXIgbD1udWxsLHU9bnVsbDtpZihuPW4uZmlyc3RCYXNlVXBkYXRlLG4hPT1udWxsKXtkb3t2YXIgaT17ZXZlbnRUaW1lOm4uZXZlbnRUaW1lLGxhbmU6bi5sYW5lLHRhZzpuLnRhZyxwYXlsb2FkOm4ucGF5bG9hZCxjYWxsYmFjazpuLmNhbGxiYWNrLG5leHQ6bnVsbH07dT09PW51bGw/bD11PWk6dT11Lm5leHQ9aSxuPW4ubmV4dH13aGlsZShuIT09bnVsbCk7dT09PW51bGw/bD11PXQ6dT11Lm5leHQ9dH1lbHNlIGw9dT10O249e2Jhc2VTdGF0ZTpyLmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6bCxsYXN0QmFzZVVwZGF0ZTp1LHNoYXJlZDpyLnNoYXJlZCxlZmZlY3RzOnIuZWZmZWN0c30sZS51cGRhdGVRdWV1ZT1uO3JldHVybn1lPW4ubGFzdEJhc2VVcGRhdGUsZT09PW51bGw/bi5maXJzdEJhc2VVcGRhdGU9dDplLm5leHQ9dCxuLmxhc3RCYXNlVXBkYXRlPXR9ZnVuY3Rpb24gYnIoZSx0LG4scil7dmFyIGw9ZS51cGRhdGVRdWV1ZTtxZT0hMTt2YXIgdT1sLmZpcnN0QmFzZVVwZGF0ZSxpPWwubGFzdEJhc2VVcGRhdGUsbz1sLnNoYXJlZC5wZW5kaW5nO2lmKG8hPT1udWxsKXtsLnNoYXJlZC5wZW5kaW5nPW51bGw7dmFyIHM9byxhPXMubmV4dDtzLm5leHQ9bnVsbCxpPT09bnVsbD91PWE6aS5uZXh0PWEsaT1zO3ZhciBoPWUuYWx0ZXJuYXRlO2ghPT1udWxsJiYoaD1oLnVwZGF0ZVF1ZXVlLG89aC5sYXN0QmFzZVVwZGF0ZSxvIT09aSYmKG89PT1udWxsP2guZmlyc3RCYXNlVXBkYXRlPWE6by5uZXh0PWEsaC5sYXN0QmFzZVVwZGF0ZT1zKSl9aWYodSE9PW51bGwpe3ZhciBwPWwuYmFzZVN0YXRlO2k9MCxoPWE9cz1udWxsLG89dTtkb3t2YXIgbT1vLmxhbmUseT1vLmV2ZW50VGltZTtpZigociZtKT09PW0pe2ghPT1udWxsJiYoaD1oLm5leHQ9e2V2ZW50VGltZTp5LGxhbmU6MCx0YWc6by50YWcscGF5bG9hZDpvLnBheWxvYWQsY2FsbGJhY2s6by5jYWxsYmFjayxuZXh0Om51bGx9KTtlOnt2YXIgZz1lLHc9bztzd2l0Y2gobT10LHk9bix3LnRhZyl7Y2FzZSAxOmlmKGc9dy5wYXlsb2FkLHR5cGVvZiBnPT0iZnVuY3Rpb24iKXtwPWcuY2FsbCh5LHAsbSk7YnJlYWsgZX1wPWc7YnJlYWsgZTtjYXNlIDM6Zy5mbGFncz1nLmZsYWdzJi02NTUzN3wxMjg7Y2FzZSAwOmlmKGc9dy5wYXlsb2FkLG09dHlwZW9mIGc9PSJmdW5jdGlvbiI/Zy5jYWxsKHkscCxtKTpnLG09PW51bGwpYnJlYWsgZTtwPVYoe30scCxtKTticmVhayBlO2Nhc2UgMjpxZT0hMH19by5jYWxsYmFjayE9PW51bGwmJm8ubGFuZSE9PTAmJihlLmZsYWdzfD02NCxtPWwuZWZmZWN0cyxtPT09bnVsbD9sLmVmZmVjdHM9W29dOm0ucHVzaChvKSl9ZWxzZSB5PXtldmVudFRpbWU6eSxsYW5lOm0sdGFnOm8udGFnLHBheWxvYWQ6by5wYXlsb2FkLGNhbGxiYWNrOm8uY2FsbGJhY2ssbmV4dDpudWxsfSxoPT09bnVsbD8oYT1oPXkscz1wKTpoPWgubmV4dD15LGl8PW07aWYobz1vLm5leHQsbz09PW51bGwpe2lmKG89bC5zaGFyZWQucGVuZGluZyxvPT09bnVsbClicmVhazttPW8sbz1tLm5leHQsbS5uZXh0PW51bGwsbC5sYXN0QmFzZVVwZGF0ZT1tLGwuc2hhcmVkLnBlbmRpbmc9bnVsbH19d2hpbGUoITApO2lmKGg9PT1udWxsJiYocz1wKSxsLmJhc2VTdGF0ZT1zLGwuZmlyc3RCYXNlVXBkYXRlPWEsbC5sYXN0QmFzZVVwZGF0ZT1oLHQ9bC5zaGFyZWQuaW50ZXJsZWF2ZWQsdCE9PW51bGwpe2w9dDtkbyBpfD1sLmxhbmUsbD1sLm5leHQ7d2hpbGUobCE9PXQpfWVsc2UgdT09PW51bGwmJihsLnNoYXJlZC5sYW5lcz0wKTtUdHw9aSxlLmxhbmVzPWksZS5tZW1vaXplZFN0YXRlPXB9fWZ1bmN0aW9uIERvKGUsdCxuKXtpZihlPXQuZWZmZWN0cyx0LmVmZmVjdHM9bnVsbCxlIT09bnVsbClmb3IodD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgcj1lW3RdLGw9ci5jYWxsYmFjaztpZihsIT09bnVsbCl7aWYoci5jYWxsYmFjaz1udWxsLHI9bix0eXBlb2YgbCE9ImZ1bmN0aW9uIil0aHJvdyBFcnJvcihTKDE5MSxsKSk7bC5jYWxsKHIpfX19dmFyIHVyPXt9LCRlPXZ0KHVyKSxZbj12dCh1ciksWG49dnQodXIpO2Z1bmN0aW9uIHh0KGUpe2lmKGU9PT11cil0aHJvdyBFcnJvcihTKDE3NCkpO3JldHVybiBlfWZ1bmN0aW9uIF9pKGUsdCl7c3dpdGNoKEQoWG4sdCksRChZbixlKSxEKCRlLHVyKSxlPXQubm9kZVR5cGUsZSl7Y2FzZSA5OmNhc2UgMTE6dD0odD10LmRvY3VtZW50RWxlbWVudCk/dC5uYW1lc3BhY2VVUkk6ZnUobnVsbCwiIik7YnJlYWs7ZGVmYXVsdDplPWU9PT04P3QucGFyZW50Tm9kZTp0LHQ9ZS5uYW1lc3BhY2VVUkl8fG51bGwsZT1lLnRhZ05hbWUsdD1mdSh0LGUpfWooJGUpLEQoJGUsdCl9ZnVuY3Rpb24gdW4oKXtqKCRlKSxqKFluKSxqKFhuKX1mdW5jdGlvbiBMYShlKXt4dChYbi5jdXJyZW50KTt2YXIgdD14dCgkZS5jdXJyZW50KSxuPWZ1KHQsZS50eXBlKTt0IT09biYmKEQoWW4sZSksRCgkZSxuKSl9ZnVuY3Rpb24gUGkoZSl7WW4uY3VycmVudD09PWUmJihqKCRlKSxqKFluKSl9dmFyICQ9dnQoMCk7ZnVuY3Rpb24gZWwoZSl7Zm9yKHZhciB0PWU7dCE9PW51bGw7KXtpZih0LnRhZz09PTEzKXt2YXIgbj10Lm1lbW9pemVkU3RhdGU7aWYobiE9PW51bGwmJihuPW4uZGVoeWRyYXRlZCxuPT09bnVsbHx8bi5kYXRhPT09IiQ/Inx8bi5kYXRhPT09IiQhIikpcmV0dXJuIHR9ZWxzZSBpZih0LnRhZz09PTE5JiZ0Lm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXIhPT12b2lkIDApe2lmKHQuZmxhZ3MmMTI4KXJldHVybiB0fWVsc2UgaWYodC5jaGlsZCE9PW51bGwpe3QuY2hpbGQucmV0dXJuPXQsdD10LmNoaWxkO2NvbnRpbnVlfWlmKHQ9PT1lKWJyZWFrO2Zvcig7dC5zaWJsaW5nPT09bnVsbDspe2lmKHQucmV0dXJuPT09bnVsbHx8dC5yZXR1cm49PT1lKXJldHVybiBudWxsO3Q9dC5yZXR1cm59dC5zaWJsaW5nLnJldHVybj10LnJldHVybix0PXQuc2libGluZ31yZXR1cm4gbnVsbH12YXIgWWw9W107ZnVuY3Rpb24gTmkoKXtmb3IodmFyIGU9MDtlPFlsLmxlbmd0aDtlKyspWWxbZV0uX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnk9bnVsbDtZbC5sZW5ndGg9MH12YXIgT3I9R2UuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixYbD1HZS5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxMdD0wLEI9bnVsbCxYPW51bGwsSj1udWxsLHRsPSExLE9uPSExLEduPTAsemQ9MDtmdW5jdGlvbiBuZSgpe3Rocm93IEVycm9yKFMoMzIxKSl9ZnVuY3Rpb24gemkoZSx0KXtpZih0PT09bnVsbClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoJiZuPGUubGVuZ3RoO24rKylpZighSWUoZVtuXSx0W25dKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBMaShlLHQsbixyLGwsdSl7aWYoTHQ9dSxCPXQsdC5tZW1vaXplZFN0YXRlPW51bGwsdC51cGRhdGVRdWV1ZT1udWxsLHQubGFuZXM9MCxPci5jdXJyZW50PWU9PT1udWxsfHxlLm1lbW9pemVkU3RhdGU9PT1udWxsP09kOk1kLGU9bihyLGwpLE9uKXt1PTA7ZG97aWYoT249ITEsR249MCwyNTw9dSl0aHJvdyBFcnJvcihTKDMwMSkpO3UrPTEsSj1YPW51bGwsdC51cGRhdGVRdWV1ZT1udWxsLE9yLmN1cnJlbnQ9SWQsZT1uKHIsbCl9d2hpbGUoT24pfWlmKE9yLmN1cnJlbnQ9bmwsdD1YIT09bnVsbCYmWC5uZXh0IT09bnVsbCxMdD0wLEo9WD1CPW51bGwsdGw9ITEsdCl0aHJvdyBFcnJvcihTKDMwMCkpO3JldHVybiBlfWZ1bmN0aW9uIFRpKCl7dmFyIGU9R24hPT0wO3JldHVybiBHbj0wLGV9ZnVuY3Rpb24gRmUoKXt2YXIgZT17bWVtb2l6ZWRTdGF0ZTpudWxsLGJhc2VTdGF0ZTpudWxsLGJhc2VRdWV1ZTpudWxsLHF1ZXVlOm51bGwsbmV4dDpudWxsfTtyZXR1cm4gSj09PW51bGw/Qi5tZW1vaXplZFN0YXRlPUo9ZTpKPUoubmV4dD1lLEp9ZnVuY3Rpb24gUGUoKXtpZihYPT09bnVsbCl7dmFyIGU9Qi5hbHRlcm5hdGU7ZT1lIT09bnVsbD9lLm1lbW9pemVkU3RhdGU6bnVsbH1lbHNlIGU9WC5uZXh0O3ZhciB0PUo9PT1udWxsP0IubWVtb2l6ZWRTdGF0ZTpKLm5leHQ7aWYodCE9PW51bGwpSj10LFg9ZTtlbHNle2lmKGU9PT1udWxsKXRocm93IEVycm9yKFMoMzEwKSk7WD1lLGU9e21lbW9pemVkU3RhdGU6WC5tZW1vaXplZFN0YXRlLGJhc2VTdGF0ZTpYLmJhc2VTdGF0ZSxiYXNlUXVldWU6WC5iYXNlUXVldWUscXVldWU6WC5xdWV1ZSxuZXh0Om51bGx9LEo9PT1udWxsP0IubWVtb2l6ZWRTdGF0ZT1KPWU6Sj1KLm5leHQ9ZX1yZXR1cm4gSn1mdW5jdGlvbiBabihlLHQpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj90KGUpOnR9ZnVuY3Rpb24gR2woZSl7dmFyIHQ9UGUoKSxuPXQucXVldWU7aWYobj09PW51bGwpdGhyb3cgRXJyb3IoUygzMTEpKTtuLmxhc3RSZW5kZXJlZFJlZHVjZXI9ZTt2YXIgcj1YLGw9ci5iYXNlUXVldWUsdT1uLnBlbmRpbmc7aWYodSE9PW51bGwpe2lmKGwhPT1udWxsKXt2YXIgaT1sLm5leHQ7bC5uZXh0PXUubmV4dCx1Lm5leHQ9aX1yLmJhc2VRdWV1ZT1sPXUsbi5wZW5kaW5nPW51bGx9aWYobCE9PW51bGwpe3U9bC5uZXh0LHI9ci5iYXNlU3RhdGU7dmFyIG89aT1udWxsLHM9bnVsbCxhPXU7ZG97dmFyIGg9YS5sYW5lO2lmKChMdCZoKT09PWgpcyE9PW51bGwmJihzPXMubmV4dD17bGFuZTowLGFjdGlvbjphLmFjdGlvbixoYXNFYWdlclN0YXRlOmEuaGFzRWFnZXJTdGF0ZSxlYWdlclN0YXRlOmEuZWFnZXJTdGF0ZSxuZXh0Om51bGx9KSxyPWEuaGFzRWFnZXJTdGF0ZT9hLmVhZ2VyU3RhdGU6ZShyLGEuYWN0aW9uKTtlbHNle3ZhciBwPXtsYW5lOmgsYWN0aW9uOmEuYWN0aW9uLGhhc0VhZ2VyU3RhdGU6YS5oYXNFYWdlclN0YXRlLGVhZ2VyU3RhdGU6YS5lYWdlclN0YXRlLG5leHQ6bnVsbH07cz09PW51bGw/KG89cz1wLGk9cik6cz1zLm5leHQ9cCxCLmxhbmVzfD1oLFR0fD1ofWE9YS5uZXh0fXdoaWxlKGEhPT1udWxsJiZhIT09dSk7cz09PW51bGw/aT1yOnMubmV4dD1vLEllKHIsdC5tZW1vaXplZFN0YXRlKXx8KGZlPSEwKSx0Lm1lbW9pemVkU3RhdGU9cix0LmJhc2VTdGF0ZT1pLHQuYmFzZVF1ZXVlPXMsbi5sYXN0UmVuZGVyZWRTdGF0ZT1yfWlmKGU9bi5pbnRlcmxlYXZlZCxlIT09bnVsbCl7bD1lO2RvIHU9bC5sYW5lLEIubGFuZXN8PXUsVHR8PXUsbD1sLm5leHQ7d2hpbGUobCE9PWUpfWVsc2UgbD09PW51bGwmJihuLmxhbmVzPTApO3JldHVyblt0Lm1lbW9pemVkU3RhdGUsbi5kaXNwYXRjaF19ZnVuY3Rpb24gWmwoZSl7dmFyIHQ9UGUoKSxuPXQucXVldWU7aWYobj09PW51bGwpdGhyb3cgRXJyb3IoUygzMTEpKTtuLmxhc3RSZW5kZXJlZFJlZHVjZXI9ZTt2YXIgcj1uLmRpc3BhdGNoLGw9bi5wZW5kaW5nLHU9dC5tZW1vaXplZFN0YXRlO2lmKGwhPT1udWxsKXtuLnBlbmRpbmc9bnVsbDt2YXIgaT1sPWwubmV4dDtkbyB1PWUodSxpLmFjdGlvbiksaT1pLm5leHQ7d2hpbGUoaSE9PWwpO0llKHUsdC5tZW1vaXplZFN0YXRlKXx8KGZlPSEwKSx0Lm1lbW9pemVkU3RhdGU9dSx0LmJhc2VRdWV1ZT09PW51bGwmJih0LmJhc2VTdGF0ZT11KSxuLmxhc3RSZW5kZXJlZFN0YXRlPXV9cmV0dXJuW3Uscl19ZnVuY3Rpb24gVGEoKXt9ZnVuY3Rpb24gUmEoZSx0KXt2YXIgbj1CLHI9UGUoKSxsPXQoKSx1PSFJZShyLm1lbW9pemVkU3RhdGUsbCk7aWYodSYmKHIubWVtb2l6ZWRTdGF0ZT1sLGZlPSEwKSxyPXIucXVldWUsUmkoSWEuYmluZChudWxsLG4scixlKSxbZV0pLHIuZ2V0U25hcHNob3QhPT10fHx1fHxKIT09bnVsbCYmSi5tZW1vaXplZFN0YXRlLnRhZyYxKXtpZihuLmZsYWdzfD0yMDQ4LEpuKDksTWEuYmluZChudWxsLG4scixsLHQpLHZvaWQgMCxudWxsKSxxPT09bnVsbCl0aHJvdyBFcnJvcihTKDM0OSkpO0x0JjMwfHxPYShuLHQsbCl9cmV0dXJuIGx9ZnVuY3Rpb24gT2EoZSx0LG4pe2UuZmxhZ3N8PTE2Mzg0LGU9e2dldFNuYXBzaG90OnQsdmFsdWU6bn0sdD1CLnVwZGF0ZVF1ZXVlLHQ9PT1udWxsPyh0PXtsYXN0RWZmZWN0Om51bGwsc3RvcmVzOm51bGx9LEIudXBkYXRlUXVldWU9dCx0LnN0b3Jlcz1bZV0pOihuPXQuc3RvcmVzLG49PT1udWxsP3Quc3RvcmVzPVtlXTpuLnB1c2goZSkpfWZ1bmN0aW9uIE1hKGUsdCxuLHIpe3QudmFsdWU9bix0LmdldFNuYXBzaG90PXIsRGEodCkmJkZhKGUpfWZ1bmN0aW9uIElhKGUsdCxuKXtyZXR1cm4gbihmdW5jdGlvbigpe0RhKHQpJiZGYShlKX0pfWZ1bmN0aW9uIERhKGUpe3ZhciB0PWUuZ2V0U25hcHNob3Q7ZT1lLnZhbHVlO3RyeXt2YXIgbj10KCk7cmV0dXJuIUllKGUsbil9Y2F0Y2h7cmV0dXJuITB9fWZ1bmN0aW9uIEZhKGUpe3ZhciB0PVllKGUsMSk7dCE9PW51bGwmJk1lKHQsZSwxLC0xKX1mdW5jdGlvbiBGbyhlKXt2YXIgdD1GZSgpO3JldHVybiB0eXBlb2YgZT09ImZ1bmN0aW9uIiYmKGU9ZSgpKSx0Lm1lbW9pemVkU3RhdGU9dC5iYXNlU3RhdGU9ZSxlPXtwZW5kaW5nOm51bGwsaW50ZXJsZWF2ZWQ6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjpabixsYXN0UmVuZGVyZWRTdGF0ZTplfSx0LnF1ZXVlPWUsZT1lLmRpc3BhdGNoPVJkLmJpbmQobnVsbCxCLGUpLFt0Lm1lbW9pemVkU3RhdGUsZV19ZnVuY3Rpb24gSm4oZSx0LG4scil7cmV0dXJuIGU9e3RhZzplLGNyZWF0ZTp0LGRlc3Ryb3k6bixkZXBzOnIsbmV4dDpudWxsfSx0PUIudXBkYXRlUXVldWUsdD09PW51bGw/KHQ9e2xhc3RFZmZlY3Q6bnVsbCxzdG9yZXM6bnVsbH0sQi51cGRhdGVRdWV1ZT10LHQubGFzdEVmZmVjdD1lLm5leHQ9ZSk6KG49dC5sYXN0RWZmZWN0LG49PT1udWxsP3QubGFzdEVmZmVjdD1lLm5leHQ9ZToocj1uLm5leHQsbi5uZXh0PWUsZS5uZXh0PXIsdC5sYXN0RWZmZWN0PWUpKSxlfWZ1bmN0aW9uIGphKCl7cmV0dXJuIFBlKCkubWVtb2l6ZWRTdGF0ZX1mdW5jdGlvbiBNcihlLHQsbixyKXt2YXIgbD1GZSgpO0IuZmxhZ3N8PWUsbC5tZW1vaXplZFN0YXRlPUpuKDF8dCxuLHZvaWQgMCxyPT09dm9pZCAwP251bGw6cil9ZnVuY3Rpb24gbWwoZSx0LG4scil7dmFyIGw9UGUoKTtyPXI9PT12b2lkIDA/bnVsbDpyO3ZhciB1PXZvaWQgMDtpZihYIT09bnVsbCl7dmFyIGk9WC5tZW1vaXplZFN0YXRlO2lmKHU9aS5kZXN0cm95LHIhPT1udWxsJiZ6aShyLGkuZGVwcykpe2wubWVtb2l6ZWRTdGF0ZT1Kbih0LG4sdSxyKTtyZXR1cm59fUIuZmxhZ3N8PWUsbC5tZW1vaXplZFN0YXRlPUpuKDF8dCxuLHUscil9ZnVuY3Rpb24gam8oZSx0KXtyZXR1cm4gTXIoODM5MDY1Niw4LGUsdCl9ZnVuY3Rpb24gUmkoZSx0KXtyZXR1cm4gbWwoMjA0OCw4LGUsdCl9ZnVuY3Rpb24gVWEoZSx0KXtyZXR1cm4gbWwoNCwyLGUsdCl9ZnVuY3Rpb24gJGEoZSx0KXtyZXR1cm4gbWwoNCw0LGUsdCl9ZnVuY3Rpb24gQmEoZSx0KXtpZih0eXBlb2YgdD09ImZ1bmN0aW9uIilyZXR1cm4gZT1lKCksdChlKSxmdW5jdGlvbigpe3QobnVsbCl9O2lmKHQhPW51bGwpcmV0dXJuIGU9ZSgpLHQuY3VycmVudD1lLGZ1bmN0aW9uKCl7dC5jdXJyZW50PW51bGx9fWZ1bmN0aW9uIFZhKGUsdCxuKXtyZXR1cm4gbj1uIT1udWxsP24uY29uY2F0KFtlXSk6bnVsbCxtbCg0LDQsQmEuYmluZChudWxsLHQsZSksbil9ZnVuY3Rpb24gT2koKXt9ZnVuY3Rpb24gQWEoZSx0KXt2YXIgbj1QZSgpO3Q9dD09PXZvaWQgMD9udWxsOnQ7dmFyIHI9bi5tZW1vaXplZFN0YXRlO3JldHVybiByIT09bnVsbCYmdCE9PW51bGwmJnppKHQsclsxXSk/clswXToobi5tZW1vaXplZFN0YXRlPVtlLHRdLGUpfWZ1bmN0aW9uIFdhKGUsdCl7dmFyIG49UGUoKTt0PXQ9PT12b2lkIDA/bnVsbDp0O3ZhciByPW4ubWVtb2l6ZWRTdGF0ZTtyZXR1cm4gciE9PW51bGwmJnQhPT1udWxsJiZ6aSh0LHJbMV0pP3JbMF06KGU9ZSgpLG4ubWVtb2l6ZWRTdGF0ZT1bZSx0XSxlKX1mdW5jdGlvbiBIYShlLHQsbil7cmV0dXJuIEx0JjIxPyhJZShuLHQpfHwobj1HcygpLEIubGFuZXN8PW4sVHR8PW4sZS5iYXNlU3RhdGU9ITApLHQpOihlLmJhc2VTdGF0ZSYmKGUuYmFzZVN0YXRlPSExLGZlPSEwKSxlLm1lbW9pemVkU3RhdGU9bil9ZnVuY3Rpb24gTGQoZSx0KXt2YXIgbj1JO0k9biE9PTAmJjQ+bj9uOjQsZSghMCk7dmFyIHI9WGwudHJhbnNpdGlvbjtYbC50cmFuc2l0aW9uPXt9O3RyeXtlKCExKSx0KCl9ZmluYWxseXtJPW4sWGwudHJhbnNpdGlvbj1yfX1mdW5jdGlvbiBRYSgpe3JldHVybiBQZSgpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gVGQoZSx0LG4pe3ZhciByPWN0KGUpO2lmKG49e2xhbmU6cixhY3Rpb246bixoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9LEthKGUpKVlhKHQsbik7ZWxzZSBpZihuPU5hKGUsdCxuLHIpLG4hPT1udWxsKXt2YXIgbD1vZSgpO01lKG4sZSxyLGwpLFhhKG4sdCxyKX19ZnVuY3Rpb24gUmQoZSx0LG4pe3ZhciByPWN0KGUpLGw9e2xhbmU6cixhY3Rpb246bixoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9O2lmKEthKGUpKVlhKHQsbCk7ZWxzZXt2YXIgdT1lLmFsdGVybmF0ZTtpZihlLmxhbmVzPT09MCYmKHU9PT1udWxsfHx1LmxhbmVzPT09MCkmJih1PXQubGFzdFJlbmRlcmVkUmVkdWNlcix1IT09bnVsbCkpdHJ5e3ZhciBpPXQubGFzdFJlbmRlcmVkU3RhdGUsbz11KGksbik7aWYobC5oYXNFYWdlclN0YXRlPSEwLGwuZWFnZXJTdGF0ZT1vLEllKG8saSkpe3ZhciBzPXQuaW50ZXJsZWF2ZWQ7cz09PW51bGw/KGwubmV4dD1sLENpKHQpKToobC5uZXh0PXMubmV4dCxzLm5leHQ9bCksdC5pbnRlcmxlYXZlZD1sO3JldHVybn19Y2F0Y2h7fWZpbmFsbHl7fW49TmEoZSx0LGwsciksbiE9PW51bGwmJihsPW9lKCksTWUobixlLHIsbCksWGEobix0LHIpKX19ZnVuY3Rpb24gS2EoZSl7dmFyIHQ9ZS5hbHRlcm5hdGU7cmV0dXJuIGU9PT1CfHx0IT09bnVsbCYmdD09PUJ9ZnVuY3Rpb24gWWEoZSx0KXtPbj10bD0hMDt2YXIgbj1lLnBlbmRpbmc7bj09PW51bGw/dC5uZXh0PXQ6KHQubmV4dD1uLm5leHQsbi5uZXh0PXQpLGUucGVuZGluZz10fWZ1bmN0aW9uIFhhKGUsdCxuKXtpZihuJjQxOTQyNDApe3ZhciByPXQubGFuZXM7ciY9ZS5wZW5kaW5nTGFuZXMsbnw9cix0LmxhbmVzPW4sYWkoZSxuKX19dmFyIG5sPXtyZWFkQ29udGV4dDpfZSx1c2VDYWxsYmFjazpuZSx1c2VDb250ZXh0Om5lLHVzZUVmZmVjdDpuZSx1c2VJbXBlcmF0aXZlSGFuZGxlOm5lLHVzZUluc2VydGlvbkVmZmVjdDpuZSx1c2VMYXlvdXRFZmZlY3Q6bmUsdXNlTWVtbzpuZSx1c2VSZWR1Y2VyOm5lLHVzZVJlZjpuZSx1c2VTdGF0ZTpuZSx1c2VEZWJ1Z1ZhbHVlOm5lLHVzZURlZmVycmVkVmFsdWU6bmUsdXNlVHJhbnNpdGlvbjpuZSx1c2VNdXRhYmxlU291cmNlOm5lLHVzZVN5bmNFeHRlcm5hbFN0b3JlOm5lLHVzZUlkOm5lLHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX0sT2Q9e3JlYWRDb250ZXh0Ol9lLHVzZUNhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEZlKCkubWVtb2l6ZWRTdGF0ZT1bZSx0PT09dm9pZCAwP251bGw6dF0sZX0sdXNlQ29udGV4dDpfZSx1c2VFZmZlY3Q6am8sdXNlSW1wZXJhdGl2ZUhhbmRsZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIG49biE9bnVsbD9uLmNvbmNhdChbZV0pOm51bGwsTXIoNDE5NDMwOCw0LEJhLmJpbmQobnVsbCx0LGUpLG4pfSx1c2VMYXlvdXRFZmZlY3Q6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTXIoNDE5NDMwOCw0LGUsdCl9LHVzZUluc2VydGlvbkVmZmVjdDpmdW5jdGlvbihlLHQpe3JldHVybiBNcig0LDIsZSx0KX0sdXNlTWVtbzpmdW5jdGlvbihlLHQpe3ZhciBuPUZlKCk7cmV0dXJuIHQ9dD09PXZvaWQgMD9udWxsOnQsZT1lKCksbi5tZW1vaXplZFN0YXRlPVtlLHRdLGV9LHVzZVJlZHVjZXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPUZlKCk7cmV0dXJuIHQ9biE9PXZvaWQgMD9uKHQpOnQsci5tZW1vaXplZFN0YXRlPXIuYmFzZVN0YXRlPXQsZT17cGVuZGluZzpudWxsLGludGVybGVhdmVkOm51bGwsbGFuZXM6MCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6ZSxsYXN0UmVuZGVyZWRTdGF0ZTp0fSxyLnF1ZXVlPWUsZT1lLmRpc3BhdGNoPVRkLmJpbmQobnVsbCxCLGUpLFtyLm1lbW9pemVkU3RhdGUsZV19LHVzZVJlZjpmdW5jdGlvbihlKXt2YXIgdD1GZSgpO3JldHVybiBlPXtjdXJyZW50OmV9LHQubWVtb2l6ZWRTdGF0ZT1lfSx1c2VTdGF0ZTpGbyx1c2VEZWJ1Z1ZhbHVlOk9pLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEZlKCkubWVtb2l6ZWRTdGF0ZT1lfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9Rm8oITEpLHQ9ZVswXTtyZXR1cm4gZT1MZC5iaW5kKG51bGwsZVsxXSksRmUoKS5tZW1vaXplZFN0YXRlPWUsW3QsZV19LHVzZU11dGFibGVTb3VyY2U6ZnVuY3Rpb24oKXt9LHVzZVN5bmNFeHRlcm5hbFN0b3JlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1CLGw9RmUoKTtpZihVKXtpZihuPT09dm9pZCAwKXRocm93IEVycm9yKFMoNDA3KSk7bj1uKCl9ZWxzZXtpZihuPXQoKSxxPT09bnVsbCl0aHJvdyBFcnJvcihTKDM0OSkpO0x0JjMwfHxPYShyLHQsbil9bC5tZW1vaXplZFN0YXRlPW47dmFyIHU9e3ZhbHVlOm4sZ2V0U25hcHNob3Q6dH07cmV0dXJuIGwucXVldWU9dSxqbyhJYS5iaW5kKG51bGwscix1LGUpLFtlXSksci5mbGFnc3w9MjA0OCxKbig5LE1hLmJpbmQobnVsbCxyLHUsbix0KSx2b2lkIDAsbnVsbCksbn0sdXNlSWQ6ZnVuY3Rpb24oKXt2YXIgZT1GZSgpLHQ9cS5pZGVudGlmaWVyUHJlZml4O2lmKFUpe3ZhciBuPVdlLHI9QWU7bj0ociZ+KDE8PDMyLU9lKHIpLTEpKS50b1N0cmluZygzMikrbix0PSI6Iit0KyJSIituLG49R24rKywwPG4mJih0Kz0iSCIrbi50b1N0cmluZygzMikpLHQrPSI6In1lbHNlIG49emQrKyx0PSI6Iit0KyJyIituLnRvU3RyaW5nKDMyKSsiOiI7cmV0dXJuIGUubWVtb2l6ZWRTdGF0ZT10fSx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LE1kPXtyZWFkQ29udGV4dDpfZSx1c2VDYWxsYmFjazpBYSx1c2VDb250ZXh0Ol9lLHVzZUVmZmVjdDpSaSx1c2VJbXBlcmF0aXZlSGFuZGxlOlZhLHVzZUluc2VydGlvbkVmZmVjdDpVYSx1c2VMYXlvdXRFZmZlY3Q6JGEsdXNlTWVtbzpXYSx1c2VSZWR1Y2VyOkdsLHVzZVJlZjpqYSx1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBHbChabil9LHVzZURlYnVnVmFsdWU6T2ksdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1QZSgpO3JldHVybiBIYSh0LFgubWVtb2l6ZWRTdGF0ZSxlKX0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBlPUdsKFpuKVswXSx0PVBlKCkubWVtb2l6ZWRTdGF0ZTtyZXR1cm5bZSx0XX0sdXNlTXV0YWJsZVNvdXJjZTpUYSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpSYSx1c2VJZDpRYSx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LElkPXtyZWFkQ29udGV4dDpfZSx1c2VDYWxsYmFjazpBYSx1c2VDb250ZXh0Ol9lLHVzZUVmZmVjdDpSaSx1c2VJbXBlcmF0aXZlSGFuZGxlOlZhLHVzZUluc2VydGlvbkVmZmVjdDpVYSx1c2VMYXlvdXRFZmZlY3Q6JGEsdXNlTWVtbzpXYSx1c2VSZWR1Y2VyOlpsLHVzZVJlZjpqYSx1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBabChabil9LHVzZURlYnVnVmFsdWU6T2ksdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1QZSgpO3JldHVybiBYPT09bnVsbD90Lm1lbW9pemVkU3RhdGU9ZTpIYSh0LFgubWVtb2l6ZWRTdGF0ZSxlKX0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBlPVpsKFpuKVswXSx0PVBlKCkubWVtb2l6ZWRTdGF0ZTtyZXR1cm5bZSx0XX0sdXNlTXV0YWJsZVNvdXJjZTpUYSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpSYSx1c2VJZDpRYSx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9O2Z1bmN0aW9uIExlKGUsdCl7aWYoZSYmZS5kZWZhdWx0UHJvcHMpe3Q9Vih7fSx0KSxlPWUuZGVmYXVsdFByb3BzO2Zvcih2YXIgbiBpbiBlKXRbbl09PT12b2lkIDAmJih0W25dPWVbbl0pO3JldHVybiB0fXJldHVybiB0fWZ1bmN0aW9uIE91KGUsdCxuLHIpe3Q9ZS5tZW1vaXplZFN0YXRlLG49bihyLHQpLG49bj09bnVsbD90OlYoe30sdCxuKSxlLm1lbW9pemVkU3RhdGU9bixlLmxhbmVzPT09MCYmKGUudXBkYXRlUXVldWUuYmFzZVN0YXRlPW4pfXZhciB2bD17aXNNb3VudGVkOmZ1bmN0aW9uKGUpe3JldHVybihlPWUuX3JlYWN0SW50ZXJuYWxzKT9NdChlKT09PWU6ITF9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbihlLHQsbil7ZT1lLl9yZWFjdEludGVybmFsczt2YXIgcj1vZSgpLGw9Y3QoZSksdT1IZShyLGwpO3UucGF5bG9hZD10LG4hPW51bGwmJih1LmNhbGxiYWNrPW4pLHQ9c3QoZSx1LGwpLHQhPT1udWxsJiYoTWUodCxlLGwsciksUnIodCxlLGwpKX0sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbihlLHQsbil7ZT1lLl9yZWFjdEludGVybmFsczt2YXIgcj1vZSgpLGw9Y3QoZSksdT1IZShyLGwpO3UudGFnPTEsdS5wYXlsb2FkPXQsbiE9bnVsbCYmKHUuY2FsbGJhY2s9biksdD1zdChlLHUsbCksdCE9PW51bGwmJihNZSh0LGUsbCxyKSxScih0LGUsbCkpfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oZSx0KXtlPWUuX3JlYWN0SW50ZXJuYWxzO3ZhciBuPW9lKCkscj1jdChlKSxsPUhlKG4scik7bC50YWc9Mix0IT1udWxsJiYobC5jYWxsYmFjaz10KSx0PXN0KGUsbCxyKSx0IT09bnVsbCYmKE1lKHQsZSxyLG4pLFJyKHQsZSxyKSl9fTtmdW5jdGlvbiBVbyhlLHQsbixyLGwsdSxpKXtyZXR1cm4gZT1lLnN0YXRlTm9kZSx0eXBlb2YgZS5zaG91bGRDb21wb25lbnRVcGRhdGU9PSJmdW5jdGlvbiI/ZS5zaG91bGRDb21wb25lbnRVcGRhdGUocix1LGkpOnQucHJvdG90eXBlJiZ0LnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudD8hV24obixyKXx8IVduKGwsdSk6ITB9ZnVuY3Rpb24gR2EoZSx0LG4pe3ZhciByPSExLGw9aHQsdT10LmNvbnRleHRUeXBlO3JldHVybiB0eXBlb2YgdT09Im9iamVjdCImJnUhPT1udWxsP3U9X2UodSk6KGw9cGUodCk/TnQ6dWUuY3VycmVudCxyPXQuY29udGV4dFR5cGVzLHU9KHI9ciE9bnVsbCk/bm4oZSxsKTpodCksdD1uZXcgdChuLHUpLGUubWVtb2l6ZWRTdGF0ZT10LnN0YXRlIT09bnVsbCYmdC5zdGF0ZSE9PXZvaWQgMD90LnN0YXRlOm51bGwsdC51cGRhdGVyPXZsLGUuc3RhdGVOb2RlPXQsdC5fcmVhY3RJbnRlcm5hbHM9ZSxyJiYoZT1lLnN0YXRlTm9kZSxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9bCxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PXUpLHR9ZnVuY3Rpb24gJG8oZSx0LG4scil7ZT10LnN0YXRlLHR5cGVvZiB0LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM9PSJmdW5jdGlvbiImJnQuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuLHIpLHR5cGVvZiB0LlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPT0iZnVuY3Rpb24iJiZ0LlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG4sciksdC5zdGF0ZSE9PWUmJnZsLmVucXVldWVSZXBsYWNlU3RhdGUodCx0LnN0YXRlLG51bGwpfWZ1bmN0aW9uIE11KGUsdCxuLHIpe3ZhciBsPWUuc3RhdGVOb2RlO2wucHJvcHM9bixsLnN0YXRlPWUubWVtb2l6ZWRTdGF0ZSxsLnJlZnM9e30seGkoZSk7dmFyIHU9dC5jb250ZXh0VHlwZTt0eXBlb2YgdT09Im9iamVjdCImJnUhPT1udWxsP2wuY29udGV4dD1fZSh1KToodT1wZSh0KT9OdDp1ZS5jdXJyZW50LGwuY29udGV4dD1ubihlLHUpKSxsLnN0YXRlPWUubWVtb2l6ZWRTdGF0ZSx1PXQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLHR5cGVvZiB1PT0iZnVuY3Rpb24iJiYoT3UoZSx0LHUsbiksbC5zdGF0ZT1lLm1lbW9pemVkU3RhdGUpLHR5cGVvZiB0LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09ImZ1bmN0aW9uInx8dHlwZW9mIGwuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU9PSJmdW5jdGlvbiJ8fHR5cGVvZiBsLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQhPSJmdW5jdGlvbiImJnR5cGVvZiBsLmNvbXBvbmVudFdpbGxNb3VudCE9ImZ1bmN0aW9uInx8KHQ9bC5zdGF0ZSx0eXBlb2YgbC5jb21wb25lbnRXaWxsTW91bnQ9PSJmdW5jdGlvbiImJmwuY29tcG9uZW50V2lsbE1vdW50KCksdHlwZW9mIGwuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudD09ImZ1bmN0aW9uIiYmbC5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCksdCE9PWwuc3RhdGUmJnZsLmVucXVldWVSZXBsYWNlU3RhdGUobCxsLnN0YXRlLG51bGwpLGJyKGUsbixsLHIpLGwuc3RhdGU9ZS5tZW1vaXplZFN0YXRlKSx0eXBlb2YgbC5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIiYmKGUuZmxhZ3N8PTQxOTQzMDgpfWZ1bmN0aW9uIG9uKGUsdCl7dHJ5e3ZhciBuPSIiLHI9dDtkbyBuKz1zZihyKSxyPXIucmV0dXJuO3doaWxlKHIpO3ZhciBsPW59Y2F0Y2godSl7bD1gCkVycm9yIGdlbmVyYXRpbmcgc3RhY2s6IGArdS5tZXNzYWdlK2AKYCt1LnN0YWNrfXJldHVybnt2YWx1ZTplLHNvdXJjZTp0LHN0YWNrOmwsZGlnZXN0Om51bGx9fWZ1bmN0aW9uIEpsKGUsdCxuKXtyZXR1cm57dmFsdWU6ZSxzb3VyY2U6bnVsbCxzdGFjazpuPz9udWxsLGRpZ2VzdDp0Pz9udWxsfX1mdW5jdGlvbiBJdShlLHQpe3RyeXtjb25zb2xlLmVycm9yKHQudmFsdWUpfWNhdGNoKG4pe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBufSl9fXZhciBEZD10eXBlb2YgV2Vha01hcD09ImZ1bmN0aW9uIj9XZWFrTWFwOk1hcDtmdW5jdGlvbiBaYShlLHQsbil7bj1IZSgtMSxuKSxuLnRhZz0zLG4ucGF5bG9hZD17ZWxlbWVudDpudWxsfTt2YXIgcj10LnZhbHVlO3JldHVybiBuLmNhbGxiYWNrPWZ1bmN0aW9uKCl7bGx8fChsbD0hMCxIdT1yKSxJdShlLHQpfSxufWZ1bmN0aW9uIEphKGUsdCxuKXtuPUhlKC0xLG4pLG4udGFnPTM7dmFyIHI9ZS50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjtpZih0eXBlb2Ygcj09ImZ1bmN0aW9uIil7dmFyIGw9dC52YWx1ZTtuLnBheWxvYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcihsKX0sbi5jYWxsYmFjaz1mdW5jdGlvbigpe0l1KGUsdCl9fXZhciB1PWUuc3RhdGVOb2RlO3JldHVybiB1IT09bnVsbCYmdHlwZW9mIHUuY29tcG9uZW50RGlkQ2F0Y2g9PSJmdW5jdGlvbiImJihuLmNhbGxiYWNrPWZ1bmN0aW9uKCl7SXUoZSx0KSx0eXBlb2YgciE9ImZ1bmN0aW9uIiYmKGF0PT09bnVsbD9hdD1uZXcgU2V0KFt0aGlzXSk6YXQuYWRkKHRoaXMpKTt2YXIgaT10LnN0YWNrO3RoaXMuY29tcG9uZW50RGlkQ2F0Y2godC52YWx1ZSx7Y29tcG9uZW50U3RhY2s6aSE9PW51bGw/aToiIn0pfSksbn1mdW5jdGlvbiBCbyhlLHQsbil7dmFyIHI9ZS5waW5nQ2FjaGU7aWYocj09PW51bGwpe3I9ZS5waW5nQ2FjaGU9bmV3IERkO3ZhciBsPW5ldyBTZXQ7ci5zZXQodCxsKX1lbHNlIGw9ci5nZXQodCksbD09PXZvaWQgMCYmKGw9bmV3IFNldCxyLnNldCh0LGwpKTtsLmhhcyhuKXx8KGwuYWRkKG4pLGU9R2QuYmluZChudWxsLGUsdCxuKSx0LnRoZW4oZSxlKSl9ZnVuY3Rpb24gVm8oZSl7ZG97dmFyIHQ7aWYoKHQ9ZS50YWc9PT0xMykmJih0PWUubWVtb2l6ZWRTdGF0ZSx0PXQhPT1udWxsP3QuZGVoeWRyYXRlZCE9PW51bGw6ITApLHQpcmV0dXJuIGU7ZT1lLnJldHVybn13aGlsZShlIT09bnVsbCk7cmV0dXJuIG51bGx9ZnVuY3Rpb24gQW8oZSx0LG4scixsKXtyZXR1cm4gZS5tb2RlJjE/KGUuZmxhZ3N8PTY1NTM2LGUubGFuZXM9bCxlKTooZT09PXQ/ZS5mbGFnc3w9NjU1MzY6KGUuZmxhZ3N8PTEyOCxuLmZsYWdzfD0xMzEwNzIsbi5mbGFncyY9LTUyODA1LG4udGFnPT09MSYmKG4uYWx0ZXJuYXRlPT09bnVsbD9uLnRhZz0xNzoodD1IZSgtMSwxKSx0LnRhZz0yLHN0KG4sdCwxKSkpLG4ubGFuZXN8PTEpLGUpfXZhciBGZD1HZS5SZWFjdEN1cnJlbnRPd25lcixmZT0hMTtmdW5jdGlvbiBpZShlLHQsbixyKXt0LmNoaWxkPWU9PT1udWxsP1BhKHQsbnVsbCxuLHIpOmxuKHQsZS5jaGlsZCxuLHIpfWZ1bmN0aW9uIFdvKGUsdCxuLHIsbCl7bj1uLnJlbmRlcjt2YXIgdT10LnJlZjtyZXR1cm4gYnQodCxsKSxyPUxpKGUsdCxuLHIsdSxsKSxuPVRpKCksZSE9PW51bGwmJiFmZT8odC51cGRhdGVRdWV1ZT1lLnVwZGF0ZVF1ZXVlLHQuZmxhZ3MmPS0yMDUzLGUubGFuZXMmPX5sLFhlKGUsdCxsKSk6KFUmJm4mJnlpKHQpLHQuZmxhZ3N8PTEsaWUoZSx0LHIsbCksdC5jaGlsZCl9ZnVuY3Rpb24gSG8oZSx0LG4scixsKXtpZihlPT09bnVsbCl7dmFyIHU9bi50eXBlO3JldHVybiB0eXBlb2YgdT09ImZ1bmN0aW9uIiYmIUJpKHUpJiZ1LmRlZmF1bHRQcm9wcz09PXZvaWQgMCYmbi5jb21wYXJlPT09bnVsbCYmbi5kZWZhdWx0UHJvcHM9PT12b2lkIDA/KHQudGFnPTE1LHQudHlwZT11LHFhKGUsdCx1LHIsbCkpOihlPWpyKG4udHlwZSxudWxsLHIsdCx0Lm1vZGUsbCksZS5yZWY9dC5yZWYsZS5yZXR1cm49dCx0LmNoaWxkPWUpfWlmKHU9ZS5jaGlsZCwhKGUubGFuZXMmbCkpe3ZhciBpPXUubWVtb2l6ZWRQcm9wcztpZihuPW4uY29tcGFyZSxuPW4hPT1udWxsP246V24sbihpLHIpJiZlLnJlZj09PXQucmVmKXJldHVybiBYZShlLHQsbCl9cmV0dXJuIHQuZmxhZ3N8PTEsZT1mdCh1LHIpLGUucmVmPXQucmVmLGUucmV0dXJuPXQsdC5jaGlsZD1lfWZ1bmN0aW9uIHFhKGUsdCxuLHIsbCl7aWYoZSE9PW51bGwpe3ZhciB1PWUubWVtb2l6ZWRQcm9wcztpZihXbih1LHIpJiZlLnJlZj09PXQucmVmKWlmKGZlPSExLHQucGVuZGluZ1Byb3BzPXI9dSwoZS5sYW5lcyZsKSE9PTApZS5mbGFncyYxMzEwNzImJihmZT0hMCk7ZWxzZSByZXR1cm4gdC5sYW5lcz1lLmxhbmVzLFhlKGUsdCxsKX1yZXR1cm4gRHUoZSx0LG4scixsKX1mdW5jdGlvbiBiYShlLHQsbil7dmFyIHI9dC5wZW5kaW5nUHJvcHMsbD1yLmNoaWxkcmVuLHU9ZSE9PW51bGw/ZS5tZW1vaXplZFN0YXRlOm51bGw7aWYoci5tb2RlPT09ImhpZGRlbiIpaWYoISh0Lm1vZGUmMSkpdC5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MCxjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczpudWxsfSxEKFh0LG1lKSxtZXw9bjtlbHNle2lmKCEobiYxMDczNzQxODI0KSlyZXR1cm4gZT11IT09bnVsbD91LmJhc2VMYW5lc3xuOm4sdC5sYW5lcz10LmNoaWxkTGFuZXM9MTA3Mzc0MTgyNCx0Lm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczplLGNhY2hlUG9vbDpudWxsLHRyYW5zaXRpb25zOm51bGx9LHQudXBkYXRlUXVldWU9bnVsbCxEKFh0LG1lKSxtZXw9ZSxudWxsO3QubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOjAsY2FjaGVQb29sOm51bGwsdHJhbnNpdGlvbnM6bnVsbH0scj11IT09bnVsbD91LmJhc2VMYW5lczpuLEQoWHQsbWUpLG1lfD1yfWVsc2UgdSE9PW51bGw/KHI9dS5iYXNlTGFuZXN8bix0Lm1lbW9pemVkU3RhdGU9bnVsbCk6cj1uLEQoWHQsbWUpLG1lfD1yO3JldHVybiBpZShlLHQsbCxuKSx0LmNoaWxkfWZ1bmN0aW9uIGVjKGUsdCl7dmFyIG49dC5yZWY7KGU9PT1udWxsJiZuIT09bnVsbHx8ZSE9PW51bGwmJmUucmVmIT09bikmJih0LmZsYWdzfD01MTIsdC5mbGFnc3w9MjA5NzE1Mil9ZnVuY3Rpb24gRHUoZSx0LG4scixsKXt2YXIgdT1wZShuKT9OdDp1ZS5jdXJyZW50O3JldHVybiB1PW5uKHQsdSksYnQodCxsKSxuPUxpKGUsdCxuLHIsdSxsKSxyPVRpKCksZSE9PW51bGwmJiFmZT8odC51cGRhdGVRdWV1ZT1lLnVwZGF0ZVF1ZXVlLHQuZmxhZ3MmPS0yMDUzLGUubGFuZXMmPX5sLFhlKGUsdCxsKSk6KFUmJnImJnlpKHQpLHQuZmxhZ3N8PTEsaWUoZSx0LG4sbCksdC5jaGlsZCl9ZnVuY3Rpb24gUW8oZSx0LG4scixsKXtpZihwZShuKSl7dmFyIHU9ITA7WHIodCl9ZWxzZSB1PSExO2lmKGJ0KHQsbCksdC5zdGF0ZU5vZGU9PT1udWxsKUlyKGUsdCksR2EodCxuLHIpLE11KHQsbixyLGwpLHI9ITA7ZWxzZSBpZihlPT09bnVsbCl7dmFyIGk9dC5zdGF0ZU5vZGUsbz10Lm1lbW9pemVkUHJvcHM7aS5wcm9wcz1vO3ZhciBzPWkuY29udGV4dCxhPW4uY29udGV4dFR5cGU7dHlwZW9mIGE9PSJvYmplY3QiJiZhIT09bnVsbD9hPV9lKGEpOihhPXBlKG4pP050OnVlLmN1cnJlbnQsYT1ubih0LGEpKTt2YXIgaD1uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyxwPXR5cGVvZiBoPT0iZnVuY3Rpb24ifHx0eXBlb2YgaS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZT09ImZ1bmN0aW9uIjtwfHx0eXBlb2YgaS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9ImZ1bmN0aW9uIiYmdHlwZW9mIGkuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9ImZ1bmN0aW9uInx8KG8hPT1yfHxzIT09YSkmJiRvKHQsaSxyLGEpLHFlPSExO3ZhciBtPXQubWVtb2l6ZWRTdGF0ZTtpLnN0YXRlPW0sYnIodCxyLGksbCkscz10Lm1lbW9pemVkU3RhdGUsbyE9PXJ8fG0hPT1zfHxkZS5jdXJyZW50fHxxZT8odHlwZW9mIGg9PSJmdW5jdGlvbiImJihPdSh0LG4saCxyKSxzPXQubWVtb2l6ZWRTdGF0ZSksKG89cWV8fFVvKHQsbixvLHIsbSxzLGEpKT8ocHx8dHlwZW9mIGkuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCE9ImZ1bmN0aW9uIiYmdHlwZW9mIGkuY29tcG9uZW50V2lsbE1vdW50IT0iZnVuY3Rpb24ifHwodHlwZW9mIGkuY29tcG9uZW50V2lsbE1vdW50PT0iZnVuY3Rpb24iJiZpLmNvbXBvbmVudFdpbGxNb3VudCgpLHR5cGVvZiBpLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQ9PSJmdW5jdGlvbiImJmkuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpKSx0eXBlb2YgaS5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIiYmKHQuZmxhZ3N8PTQxOTQzMDgpKToodHlwZW9mIGkuY29tcG9uZW50RGlkTW91bnQ9PSJmdW5jdGlvbiImJih0LmZsYWdzfD00MTk0MzA4KSx0Lm1lbW9pemVkUHJvcHM9cix0Lm1lbW9pemVkU3RhdGU9cyksaS5wcm9wcz1yLGkuc3RhdGU9cyxpLmNvbnRleHQ9YSxyPW8pOih0eXBlb2YgaS5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIiYmKHQuZmxhZ3N8PTQxOTQzMDgpLHI9ITEpfWVsc2V7aT10LnN0YXRlTm9kZSx6YShlLHQpLG89dC5tZW1vaXplZFByb3BzLGE9dC50eXBlPT09dC5lbGVtZW50VHlwZT9vOkxlKHQudHlwZSxvKSxpLnByb3BzPWEscD10LnBlbmRpbmdQcm9wcyxtPWkuY29udGV4dCxzPW4uY29udGV4dFR5cGUsdHlwZW9mIHM9PSJvYmplY3QiJiZzIT09bnVsbD9zPV9lKHMpOihzPXBlKG4pP050OnVlLmN1cnJlbnQscz1ubih0LHMpKTt2YXIgeT1uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczsoaD10eXBlb2YgeT09ImZ1bmN0aW9uInx8dHlwZW9mIGkuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU9PSJmdW5jdGlvbiIpfHx0eXBlb2YgaS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9ImZ1bmN0aW9uIiYmdHlwZW9mIGkuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9ImZ1bmN0aW9uInx8KG8hPT1wfHxtIT09cykmJiRvKHQsaSxyLHMpLHFlPSExLG09dC5tZW1vaXplZFN0YXRlLGkuc3RhdGU9bSxicih0LHIsaSxsKTt2YXIgZz10Lm1lbW9pemVkU3RhdGU7byE9PXB8fG0hPT1nfHxkZS5jdXJyZW50fHxxZT8odHlwZW9mIHk9PSJmdW5jdGlvbiImJihPdSh0LG4seSxyKSxnPXQubWVtb2l6ZWRTdGF0ZSksKGE9cWV8fFVvKHQsbixhLHIsbSxnLHMpfHwhMSk/KGh8fHR5cGVvZiBpLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlIT0iZnVuY3Rpb24iJiZ0eXBlb2YgaS5jb21wb25lbnRXaWxsVXBkYXRlIT0iZnVuY3Rpb24ifHwodHlwZW9mIGkuY29tcG9uZW50V2lsbFVwZGF0ZT09ImZ1bmN0aW9uIiYmaS5jb21wb25lbnRXaWxsVXBkYXRlKHIsZyxzKSx0eXBlb2YgaS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZT09ImZ1bmN0aW9uIiYmaS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShyLGcscykpLHR5cGVvZiBpLmNvbXBvbmVudERpZFVwZGF0ZT09ImZ1bmN0aW9uIiYmKHQuZmxhZ3N8PTQpLHR5cGVvZiBpLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlPT0iZnVuY3Rpb24iJiYodC5mbGFnc3w9MTAyNCkpOih0eXBlb2YgaS5jb21wb25lbnREaWRVcGRhdGUhPSJmdW5jdGlvbiJ8fG89PT1lLm1lbW9pemVkUHJvcHMmJm09PT1lLm1lbW9pemVkU3RhdGV8fCh0LmZsYWdzfD00KSx0eXBlb2YgaS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSE9ImZ1bmN0aW9uInx8bz09PWUubWVtb2l6ZWRQcm9wcyYmbT09PWUubWVtb2l6ZWRTdGF0ZXx8KHQuZmxhZ3N8PTEwMjQpLHQubWVtb2l6ZWRQcm9wcz1yLHQubWVtb2l6ZWRTdGF0ZT1nKSxpLnByb3BzPXIsaS5zdGF0ZT1nLGkuY29udGV4dD1zLHI9YSk6KHR5cGVvZiBpLmNvbXBvbmVudERpZFVwZGF0ZSE9ImZ1bmN0aW9uInx8bz09PWUubWVtb2l6ZWRQcm9wcyYmbT09PWUubWVtb2l6ZWRTdGF0ZXx8KHQuZmxhZ3N8PTQpLHR5cGVvZiBpLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIT0iZnVuY3Rpb24ifHxvPT09ZS5tZW1vaXplZFByb3BzJiZtPT09ZS5tZW1vaXplZFN0YXRlfHwodC5mbGFnc3w9MTAyNCkscj0hMSl9cmV0dXJuIEZ1KGUsdCxuLHIsdSxsKX1mdW5jdGlvbiBGdShlLHQsbixyLGwsdSl7ZWMoZSx0KTt2YXIgaT0odC5mbGFncyYxMjgpIT09MDtpZighciYmIWkpcmV0dXJuIGwmJlRvKHQsbiwhMSksWGUoZSx0LHUpO3I9dC5zdGF0ZU5vZGUsRmQuY3VycmVudD10O3ZhciBvPWkmJnR5cGVvZiBuLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciE9ImZ1bmN0aW9uIj9udWxsOnIucmVuZGVyKCk7cmV0dXJuIHQuZmxhZ3N8PTEsZSE9PW51bGwmJmk/KHQuY2hpbGQ9bG4odCxlLmNoaWxkLG51bGwsdSksdC5jaGlsZD1sbih0LG51bGwsbyx1KSk6aWUoZSx0LG8sdSksdC5tZW1vaXplZFN0YXRlPXIuc3RhdGUsbCYmVG8odCxuLCEwKSx0LmNoaWxkfWZ1bmN0aW9uIHRjKGUpe3ZhciB0PWUuc3RhdGVOb2RlO3QucGVuZGluZ0NvbnRleHQ/TG8oZSx0LnBlbmRpbmdDb250ZXh0LHQucGVuZGluZ0NvbnRleHQhPT10LmNvbnRleHQpOnQuY29udGV4dCYmTG8oZSx0LmNvbnRleHQsITEpLF9pKGUsdC5jb250YWluZXJJbmZvKX1mdW5jdGlvbiBLbyhlLHQsbixyLGwpe3JldHVybiBybigpLHdpKGwpLHQuZmxhZ3N8PTI1NixpZShlLHQsbixyKSx0LmNoaWxkfXZhciBqdT17ZGVoeWRyYXRlZDpudWxsLHRyZWVDb250ZXh0Om51bGwscmV0cnlMYW5lOjB9O2Z1bmN0aW9uIFV1KGUpe3JldHVybntiYXNlTGFuZXM6ZSxjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczpudWxsfX1mdW5jdGlvbiBuYyhlLHQsbil7dmFyIHI9dC5wZW5kaW5nUHJvcHMsbD0kLmN1cnJlbnQsdT0hMSxpPSh0LmZsYWdzJjEyOCkhPT0wLG87aWYoKG89aSl8fChvPWUhPT1udWxsJiZlLm1lbW9pemVkU3RhdGU9PT1udWxsPyExOihsJjIpIT09MCksbz8odT0hMCx0LmZsYWdzJj0tMTI5KTooZT09PW51bGx8fGUubWVtb2l6ZWRTdGF0ZSE9PW51bGwpJiYobHw9MSksRCgkLGwmMSksZT09PW51bGwpcmV0dXJuIFR1KHQpLGU9dC5tZW1vaXplZFN0YXRlLGUhPT1udWxsJiYoZT1lLmRlaHlkcmF0ZWQsZSE9PW51bGwpPyh0Lm1vZGUmMT9lLmRhdGE9PT0iJCEiP3QubGFuZXM9ODp0LmxhbmVzPTEwNzM3NDE4MjQ6dC5sYW5lcz0xLG51bGwpOihpPXIuY2hpbGRyZW4sZT1yLmZhbGxiYWNrLHU/KHI9dC5tb2RlLHU9dC5jaGlsZCxpPXttb2RlOiJoaWRkZW4iLGNoaWxkcmVuOml9LCEociYxKSYmdSE9PW51bGw/KHUuY2hpbGRMYW5lcz0wLHUucGVuZGluZ1Byb3BzPWkpOnU9d2woaSxyLDAsbnVsbCksZT1QdChlLHIsbixudWxsKSx1LnJldHVybj10LGUucmV0dXJuPXQsdS5zaWJsaW5nPWUsdC5jaGlsZD11LHQuY2hpbGQubWVtb2l6ZWRTdGF0ZT1VdShuKSx0Lm1lbW9pemVkU3RhdGU9anUsZSk6TWkodCxpKSk7aWYobD1lLm1lbW9pemVkU3RhdGUsbCE9PW51bGwmJihvPWwuZGVoeWRyYXRlZCxvIT09bnVsbCkpcmV0dXJuIGpkKGUsdCxpLHIsbyxsLG4pO2lmKHUpe3U9ci5mYWxsYmFjayxpPXQubW9kZSxsPWUuY2hpbGQsbz1sLnNpYmxpbmc7dmFyIHM9e21vZGU6ImhpZGRlbiIsY2hpbGRyZW46ci5jaGlsZHJlbn07cmV0dXJuIShpJjEpJiZ0LmNoaWxkIT09bD8ocj10LmNoaWxkLHIuY2hpbGRMYW5lcz0wLHIucGVuZGluZ1Byb3BzPXMsdC5kZWxldGlvbnM9bnVsbCk6KHI9ZnQobCxzKSxyLnN1YnRyZWVGbGFncz1sLnN1YnRyZWVGbGFncyYxNDY4MDA2NCksbyE9PW51bGw/dT1mdChvLHUpOih1PVB0KHUsaSxuLG51bGwpLHUuZmxhZ3N8PTIpLHUucmV0dXJuPXQsci5yZXR1cm49dCxyLnNpYmxpbmc9dSx0LmNoaWxkPXIscj11LHU9dC5jaGlsZCxpPWUuY2hpbGQubWVtb2l6ZWRTdGF0ZSxpPWk9PT1udWxsP1V1KG4pOntiYXNlTGFuZXM6aS5iYXNlTGFuZXN8bixjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczppLnRyYW5zaXRpb25zfSx1Lm1lbW9pemVkU3RhdGU9aSx1LmNoaWxkTGFuZXM9ZS5jaGlsZExhbmVzJn5uLHQubWVtb2l6ZWRTdGF0ZT1qdSxyfXJldHVybiB1PWUuY2hpbGQsZT11LnNpYmxpbmcscj1mdCh1LHttb2RlOiJ2aXNpYmxlIixjaGlsZHJlbjpyLmNoaWxkcmVufSksISh0Lm1vZGUmMSkmJihyLmxhbmVzPW4pLHIucmV0dXJuPXQsci5zaWJsaW5nPW51bGwsZSE9PW51bGwmJihuPXQuZGVsZXRpb25zLG49PT1udWxsPyh0LmRlbGV0aW9ucz1bZV0sdC5mbGFnc3w9MTYpOm4ucHVzaChlKSksdC5jaGlsZD1yLHQubWVtb2l6ZWRTdGF0ZT1udWxsLHJ9ZnVuY3Rpb24gTWkoZSx0KXtyZXR1cm4gdD13bCh7bW9kZToidmlzaWJsZSIsY2hpbGRyZW46dH0sZS5tb2RlLDAsbnVsbCksdC5yZXR1cm49ZSxlLmNoaWxkPXR9ZnVuY3Rpb24gRXIoZSx0LG4scil7cmV0dXJuIHIhPT1udWxsJiZ3aShyKSxsbih0LGUuY2hpbGQsbnVsbCxuKSxlPU1pKHQsdC5wZW5kaW5nUHJvcHMuY2hpbGRyZW4pLGUuZmxhZ3N8PTIsdC5tZW1vaXplZFN0YXRlPW51bGwsZX1mdW5jdGlvbiBqZChlLHQsbixyLGwsdSxpKXtpZihuKXJldHVybiB0LmZsYWdzJjI1Nj8odC5mbGFncyY9LTI1NyxyPUpsKEVycm9yKFMoNDIyKSkpLEVyKGUsdCxpLHIpKTp0Lm1lbW9pemVkU3RhdGUhPT1udWxsPyh0LmNoaWxkPWUuY2hpbGQsdC5mbGFnc3w9MTI4LG51bGwpOih1PXIuZmFsbGJhY2ssbD10Lm1vZGUscj13bCh7bW9kZToidmlzaWJsZSIsY2hpbGRyZW46ci5jaGlsZHJlbn0sbCwwLG51bGwpLHU9UHQodSxsLGksbnVsbCksdS5mbGFnc3w9MixyLnJldHVybj10LHUucmV0dXJuPXQsci5zaWJsaW5nPXUsdC5jaGlsZD1yLHQubW9kZSYxJiZsbih0LGUuY2hpbGQsbnVsbCxpKSx0LmNoaWxkLm1lbW9pemVkU3RhdGU9VXUoaSksdC5tZW1vaXplZFN0YXRlPWp1LHUpO2lmKCEodC5tb2RlJjEpKXJldHVybiBFcihlLHQsaSxudWxsKTtpZihsLmRhdGE9PT0iJCEiKXtpZihyPWwubmV4dFNpYmxpbmcmJmwubmV4dFNpYmxpbmcuZGF0YXNldCxyKXZhciBvPXIuZGdzdDtyZXR1cm4gcj1vLHU9RXJyb3IoUyg0MTkpKSxyPUpsKHUscix2b2lkIDApLEVyKGUsdCxpLHIpfWlmKG89KGkmZS5jaGlsZExhbmVzKSE9PTAsZmV8fG8pe2lmKHI9cSxyIT09bnVsbCl7c3dpdGNoKGkmLWkpe2Nhc2UgNDpsPTI7YnJlYWs7Y2FzZSAxNjpsPTg7YnJlYWs7Y2FzZSA2NDpjYXNlIDEyODpjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpjYXNlIDQxOTQzMDQ6Y2FzZSA4Mzg4NjA4OmNhc2UgMTY3NzcyMTY6Y2FzZSAzMzU1NDQzMjpjYXNlIDY3MTA4ODY0Omw9MzI7YnJlYWs7Y2FzZSA1MzY4NzA5MTI6bD0yNjg0MzU0NTY7YnJlYWs7ZGVmYXVsdDpsPTB9bD1sJihyLnN1c3BlbmRlZExhbmVzfGkpPzA6bCxsIT09MCYmbCE9PXUucmV0cnlMYW5lJiYodS5yZXRyeUxhbmU9bCxZZShlLGwpLE1lKHIsZSxsLC0xKSl9cmV0dXJuICRpKCkscj1KbChFcnJvcihTKDQyMSkpKSxFcihlLHQsaSxyKX1yZXR1cm4gbC5kYXRhPT09IiQ/Ij8odC5mbGFnc3w9MTI4LHQuY2hpbGQ9ZS5jaGlsZCx0PVpkLmJpbmQobnVsbCxlKSxsLl9yZWFjdFJldHJ5PXQsbnVsbCk6KGU9dS50cmVlQ29udGV4dCx2ZT1vdChsLm5leHRTaWJsaW5nKSx5ZT10LFU9ITAsUmU9bnVsbCxlIT09bnVsbCYmKGtlW0VlKytdPUFlLGtlW0VlKytdPVdlLGtlW0VlKytdPXp0LEFlPWUuaWQsV2U9ZS5vdmVyZmxvdyx6dD10KSx0PU1pKHQsci5jaGlsZHJlbiksdC5mbGFnc3w9NDA5Nix0KX1mdW5jdGlvbiBZbyhlLHQsbil7ZS5sYW5lc3w9dDt2YXIgcj1lLmFsdGVybmF0ZTtyIT09bnVsbCYmKHIubGFuZXN8PXQpLFJ1KGUucmV0dXJuLHQsbil9ZnVuY3Rpb24gcWwoZSx0LG4scixsKXt2YXIgdT1lLm1lbW9pemVkU3RhdGU7dT09PW51bGw/ZS5tZW1vaXplZFN0YXRlPXtpc0JhY2t3YXJkczp0LHJlbmRlcmluZzpudWxsLHJlbmRlcmluZ1N0YXJ0VGltZTowLGxhc3Q6cix0YWlsOm4sdGFpbE1vZGU6bH06KHUuaXNCYWNrd2FyZHM9dCx1LnJlbmRlcmluZz1udWxsLHUucmVuZGVyaW5nU3RhcnRUaW1lPTAsdS5sYXN0PXIsdS50YWlsPW4sdS50YWlsTW9kZT1sKX1mdW5jdGlvbiByYyhlLHQsbil7dmFyIHI9dC5wZW5kaW5nUHJvcHMsbD1yLnJldmVhbE9yZGVyLHU9ci50YWlsO2lmKGllKGUsdCxyLmNoaWxkcmVuLG4pLHI9JC5jdXJyZW50LHImMilyPXImMXwyLHQuZmxhZ3N8PTEyODtlbHNle2lmKGUhPT1udWxsJiZlLmZsYWdzJjEyOCllOmZvcihlPXQuY2hpbGQ7ZSE9PW51bGw7KXtpZihlLnRhZz09PTEzKWUubWVtb2l6ZWRTdGF0ZSE9PW51bGwmJllvKGUsbix0KTtlbHNlIGlmKGUudGFnPT09MTkpWW8oZSxuLHQpO2Vsc2UgaWYoZS5jaGlsZCE9PW51bGwpe2UuY2hpbGQucmV0dXJuPWUsZT1lLmNoaWxkO2NvbnRpbnVlfWlmKGU9PT10KWJyZWFrIGU7Zm9yKDtlLnNpYmxpbmc9PT1udWxsOyl7aWYoZS5yZXR1cm49PT1udWxsfHxlLnJldHVybj09PXQpYnJlYWsgZTtlPWUucmV0dXJufWUuc2libGluZy5yZXR1cm49ZS5yZXR1cm4sZT1lLnNpYmxpbmd9ciY9MX1pZihEKCQsciksISh0Lm1vZGUmMSkpdC5tZW1vaXplZFN0YXRlPW51bGw7ZWxzZSBzd2l0Y2gobCl7Y2FzZSJmb3J3YXJkcyI6Zm9yKG49dC5jaGlsZCxsPW51bGw7biE9PW51bGw7KWU9bi5hbHRlcm5hdGUsZSE9PW51bGwmJmVsKGUpPT09bnVsbCYmKGw9biksbj1uLnNpYmxpbmc7bj1sLG49PT1udWxsPyhsPXQuY2hpbGQsdC5jaGlsZD1udWxsKToobD1uLnNpYmxpbmcsbi5zaWJsaW5nPW51bGwpLHFsKHQsITEsbCxuLHUpO2JyZWFrO2Nhc2UiYmFja3dhcmRzIjpmb3Iobj1udWxsLGw9dC5jaGlsZCx0LmNoaWxkPW51bGw7bCE9PW51bGw7KXtpZihlPWwuYWx0ZXJuYXRlLGUhPT1udWxsJiZlbChlKT09PW51bGwpe3QuY2hpbGQ9bDticmVha31lPWwuc2libGluZyxsLnNpYmxpbmc9bixuPWwsbD1lfXFsKHQsITAsbixudWxsLHUpO2JyZWFrO2Nhc2UidG9nZXRoZXIiOnFsKHQsITEsbnVsbCxudWxsLHZvaWQgMCk7YnJlYWs7ZGVmYXVsdDp0Lm1lbW9pemVkU3RhdGU9bnVsbH1yZXR1cm4gdC5jaGlsZH1mdW5jdGlvbiBJcihlLHQpeyEodC5tb2RlJjEpJiZlIT09bnVsbCYmKGUuYWx0ZXJuYXRlPW51bGwsdC5hbHRlcm5hdGU9bnVsbCx0LmZsYWdzfD0yKX1mdW5jdGlvbiBYZShlLHQsbil7aWYoZSE9PW51bGwmJih0LmRlcGVuZGVuY2llcz1lLmRlcGVuZGVuY2llcyksVHR8PXQubGFuZXMsIShuJnQuY2hpbGRMYW5lcykpcmV0dXJuIG51bGw7aWYoZSE9PW51bGwmJnQuY2hpbGQhPT1lLmNoaWxkKXRocm93IEVycm9yKFMoMTUzKSk7aWYodC5jaGlsZCE9PW51bGwpe2ZvcihlPXQuY2hpbGQsbj1mdChlLGUucGVuZGluZ1Byb3BzKSx0LmNoaWxkPW4sbi5yZXR1cm49dDtlLnNpYmxpbmchPT1udWxsOyllPWUuc2libGluZyxuPW4uc2libGluZz1mdChlLGUucGVuZGluZ1Byb3BzKSxuLnJldHVybj10O24uc2libGluZz1udWxsfXJldHVybiB0LmNoaWxkfWZ1bmN0aW9uIFVkKGUsdCxuKXtzd2l0Y2godC50YWcpe2Nhc2UgMzp0Yyh0KSxybigpO2JyZWFrO2Nhc2UgNTpMYSh0KTticmVhaztjYXNlIDE6cGUodC50eXBlKSYmWHIodCk7YnJlYWs7Y2FzZSA0Ol9pKHQsdC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7YnJlYWs7Y2FzZSAxMDp2YXIgcj10LnR5cGUuX2NvbnRleHQsbD10Lm1lbW9pemVkUHJvcHMudmFsdWU7RChKcixyLl9jdXJyZW50VmFsdWUpLHIuX2N1cnJlbnRWYWx1ZT1sO2JyZWFrO2Nhc2UgMTM6aWYocj10Lm1lbW9pemVkU3RhdGUsciE9PW51bGwpcmV0dXJuIHIuZGVoeWRyYXRlZCE9PW51bGw/KEQoJCwkLmN1cnJlbnQmMSksdC5mbGFnc3w9MTI4LG51bGwpOm4mdC5jaGlsZC5jaGlsZExhbmVzP25jKGUsdCxuKTooRCgkLCQuY3VycmVudCYxKSxlPVhlKGUsdCxuKSxlIT09bnVsbD9lLnNpYmxpbmc6bnVsbCk7RCgkLCQuY3VycmVudCYxKTticmVhaztjYXNlIDE5OmlmKHI9KG4mdC5jaGlsZExhbmVzKSE9PTAsZS5mbGFncyYxMjgpe2lmKHIpcmV0dXJuIHJjKGUsdCxuKTt0LmZsYWdzfD0xMjh9aWYobD10Lm1lbW9pemVkU3RhdGUsbCE9PW51bGwmJihsLnJlbmRlcmluZz1udWxsLGwudGFpbD1udWxsLGwubGFzdEVmZmVjdD1udWxsKSxEKCQsJC5jdXJyZW50KSxyKWJyZWFrO3JldHVybiBudWxsO2Nhc2UgMjI6Y2FzZSAyMzpyZXR1cm4gdC5sYW5lcz0wLGJhKGUsdCxuKX1yZXR1cm4gWGUoZSx0LG4pfXZhciBsYywkdSx1YyxpYztsYz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10LmNoaWxkO24hPT1udWxsOyl7aWYobi50YWc9PT01fHxuLnRhZz09PTYpZS5hcHBlbmRDaGlsZChuLnN0YXRlTm9kZSk7ZWxzZSBpZihuLnRhZyE9PTQmJm4uY2hpbGQhPT1udWxsKXtuLmNoaWxkLnJldHVybj1uLG49bi5jaGlsZDtjb250aW51ZX1pZihuPT09dClicmVhaztmb3IoO24uc2libGluZz09PW51bGw7KXtpZihuLnJldHVybj09PW51bGx8fG4ucmV0dXJuPT09dClyZXR1cm47bj1uLnJldHVybn1uLnNpYmxpbmcucmV0dXJuPW4ucmV0dXJuLG49bi5zaWJsaW5nfX07JHU9ZnVuY3Rpb24oKXt9O3VjPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBsPWUubWVtb2l6ZWRQcm9wcztpZihsIT09cil7ZT10LnN0YXRlTm9kZSx4dCgkZS5jdXJyZW50KTt2YXIgdT1udWxsO3N3aXRjaChuKXtjYXNlImlucHV0IjpsPW91KGUsbCkscj1vdShlLHIpLHU9W107YnJlYWs7Y2FzZSJzZWxlY3QiOmw9Vih7fSxsLHt2YWx1ZTp2b2lkIDB9KSxyPVYoe30scix7dmFsdWU6dm9pZCAwfSksdT1bXTticmVhaztjYXNlInRleHRhcmVhIjpsPWN1KGUsbCkscj1jdShlLHIpLHU9W107YnJlYWs7ZGVmYXVsdDp0eXBlb2YgbC5vbkNsaWNrIT0iZnVuY3Rpb24iJiZ0eXBlb2Ygci5vbkNsaWNrPT0iZnVuY3Rpb24iJiYoZS5vbmNsaWNrPUtyKX1kdShuLHIpO3ZhciBpO249bnVsbDtmb3IoYSBpbiBsKWlmKCFyLmhhc093blByb3BlcnR5KGEpJiZsLmhhc093blByb3BlcnR5KGEpJiZsW2FdIT1udWxsKWlmKGE9PT0ic3R5bGUiKXt2YXIgbz1sW2FdO2ZvcihpIGluIG8pby5oYXNPd25Qcm9wZXJ0eShpKSYmKG58fChuPXt9KSxuW2ldPSIiKX1lbHNlIGEhPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiJiZhIT09ImNoaWxkcmVuIiYmYSE9PSJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciJiZhIT09InN1cHByZXNzSHlkcmF0aW9uV2FybmluZyImJmEhPT0iYXV0b0ZvY3VzIiYmKEZuLmhhc093blByb3BlcnR5KGEpP3V8fCh1PVtdKToodT11fHxbXSkucHVzaChhLG51bGwpKTtmb3IoYSBpbiByKXt2YXIgcz1yW2FdO2lmKG89bD8uW2FdLHIuaGFzT3duUHJvcGVydHkoYSkmJnMhPT1vJiYocyE9bnVsbHx8byE9bnVsbCkpaWYoYT09PSJzdHlsZSIpaWYobyl7Zm9yKGkgaW4gbykhby5oYXNPd25Qcm9wZXJ0eShpKXx8cyYmcy5oYXNPd25Qcm9wZXJ0eShpKXx8KG58fChuPXt9KSxuW2ldPSIiKTtmb3IoaSBpbiBzKXMuaGFzT3duUHJvcGVydHkoaSkmJm9baV0hPT1zW2ldJiYobnx8KG49e30pLG5baV09c1tpXSl9ZWxzZSBufHwodXx8KHU9W10pLHUucHVzaChhLG4pKSxuPXM7ZWxzZSBhPT09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj8ocz1zP3MuX19odG1sOnZvaWQgMCxvPW8/by5fX2h0bWw6dm9pZCAwLHMhPW51bGwmJm8hPT1zJiYodT11fHxbXSkucHVzaChhLHMpKTphPT09ImNoaWxkcmVuIj90eXBlb2YgcyE9InN0cmluZyImJnR5cGVvZiBzIT0ibnVtYmVyInx8KHU9dXx8W10pLnB1c2goYSwiIitzKTphIT09InN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyImJmEhPT0ic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIiYmKEZuLmhhc093blByb3BlcnR5KGEpPyhzIT1udWxsJiZhPT09Im9uU2Nyb2xsIiYmRigic2Nyb2xsIixlKSx1fHxvPT09c3x8KHU9W10pKToodT11fHxbXSkucHVzaChhLHMpKX1uJiYodT11fHxbXSkucHVzaCgic3R5bGUiLG4pO3ZhciBhPXU7KHQudXBkYXRlUXVldWU9YSkmJih0LmZsYWdzfD00KX19O2ljPWZ1bmN0aW9uKGUsdCxuLHIpe24hPT1yJiYodC5mbGFnc3w9NCl9O2Z1bmN0aW9uIGtuKGUsdCl7aWYoIVUpc3dpdGNoKGUudGFpbE1vZGUpe2Nhc2UiaGlkZGVuIjp0PWUudGFpbDtmb3IodmFyIG49bnVsbDt0IT09bnVsbDspdC5hbHRlcm5hdGUhPT1udWxsJiYobj10KSx0PXQuc2libGluZztuPT09bnVsbD9lLnRhaWw9bnVsbDpuLnNpYmxpbmc9bnVsbDticmVhaztjYXNlImNvbGxhcHNlZCI6bj1lLnRhaWw7Zm9yKHZhciByPW51bGw7biE9PW51bGw7KW4uYWx0ZXJuYXRlIT09bnVsbCYmKHI9biksbj1uLnNpYmxpbmc7cj09PW51bGw/dHx8ZS50YWlsPT09bnVsbD9lLnRhaWw9bnVsbDplLnRhaWwuc2libGluZz1udWxsOnIuc2libGluZz1udWxsfX1mdW5jdGlvbiByZShlKXt2YXIgdD1lLmFsdGVybmF0ZSE9PW51bGwmJmUuYWx0ZXJuYXRlLmNoaWxkPT09ZS5jaGlsZCxuPTAscj0wO2lmKHQpZm9yKHZhciBsPWUuY2hpbGQ7bCE9PW51bGw7KW58PWwubGFuZXN8bC5jaGlsZExhbmVzLHJ8PWwuc3VidHJlZUZsYWdzJjE0NjgwMDY0LHJ8PWwuZmxhZ3MmMTQ2ODAwNjQsbC5yZXR1cm49ZSxsPWwuc2libGluZztlbHNlIGZvcihsPWUuY2hpbGQ7bCE9PW51bGw7KW58PWwubGFuZXN8bC5jaGlsZExhbmVzLHJ8PWwuc3VidHJlZUZsYWdzLHJ8PWwuZmxhZ3MsbC5yZXR1cm49ZSxsPWwuc2libGluZztyZXR1cm4gZS5zdWJ0cmVlRmxhZ3N8PXIsZS5jaGlsZExhbmVzPW4sdH1mdW5jdGlvbiAkZChlLHQsbil7dmFyIHI9dC5wZW5kaW5nUHJvcHM7c3dpdGNoKGdpKHQpLHQudGFnKXtjYXNlIDI6Y2FzZSAxNjpjYXNlIDE1OmNhc2UgMDpjYXNlIDExOmNhc2UgNzpjYXNlIDg6Y2FzZSAxMjpjYXNlIDk6Y2FzZSAxNDpyZXR1cm4gcmUodCksbnVsbDtjYXNlIDE6cmV0dXJuIHBlKHQudHlwZSkmJllyKCkscmUodCksbnVsbDtjYXNlIDM6cmV0dXJuIHI9dC5zdGF0ZU5vZGUsdW4oKSxqKGRlKSxqKHVlKSxOaSgpLHIucGVuZGluZ0NvbnRleHQmJihyLmNvbnRleHQ9ci5wZW5kaW5nQ29udGV4dCxyLnBlbmRpbmdDb250ZXh0PW51bGwpLChlPT09bnVsbHx8ZS5jaGlsZD09PW51bGwpJiYoU3IodCk/dC5mbGFnc3w9NDplPT09bnVsbHx8ZS5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCYmISh0LmZsYWdzJjI1Nil8fCh0LmZsYWdzfD0xMDI0LFJlIT09bnVsbCYmKFl1KFJlKSxSZT1udWxsKSkpLCR1KGUsdCkscmUodCksbnVsbDtjYXNlIDU6UGkodCk7dmFyIGw9eHQoWG4uY3VycmVudCk7aWYobj10LnR5cGUsZSE9PW51bGwmJnQuc3RhdGVOb2RlIT1udWxsKXVjKGUsdCxuLHIsbCksZS5yZWYhPT10LnJlZiYmKHQuZmxhZ3N8PTUxMix0LmZsYWdzfD0yMDk3MTUyKTtlbHNle2lmKCFyKXtpZih0LnN0YXRlTm9kZT09PW51bGwpdGhyb3cgRXJyb3IoUygxNjYpKTtyZXR1cm4gcmUodCksbnVsbH1pZihlPXh0KCRlLmN1cnJlbnQpLFNyKHQpKXtyPXQuc3RhdGVOb2RlLG49dC50eXBlO3ZhciB1PXQubWVtb2l6ZWRQcm9wcztzd2l0Y2gocltqZV09dCxyW0tuXT11LGU9KHQubW9kZSYxKSE9PTAsbil7Y2FzZSJkaWFsb2ciOkYoImNhbmNlbCIsciksRigiY2xvc2UiLHIpO2JyZWFrO2Nhc2UiaWZyYW1lIjpjYXNlIm9iamVjdCI6Y2FzZSJlbWJlZCI6RigibG9hZCIscik7YnJlYWs7Y2FzZSJ2aWRlbyI6Y2FzZSJhdWRpbyI6Zm9yKGw9MDtsPFBuLmxlbmd0aDtsKyspRihQbltsXSxyKTticmVhaztjYXNlInNvdXJjZSI6RigiZXJyb3IiLHIpO2JyZWFrO2Nhc2UiaW1nIjpjYXNlImltYWdlIjpjYXNlImxpbmsiOkYoImVycm9yIixyKSxGKCJsb2FkIixyKTticmVhaztjYXNlImRldGFpbHMiOkYoInRvZ2dsZSIscik7YnJlYWs7Y2FzZSJpbnB1dCI6dG8ocix1KSxGKCJpbnZhbGlkIixyKTticmVhaztjYXNlInNlbGVjdCI6ci5fd3JhcHBlclN0YXRlPXt3YXNNdWx0aXBsZTohIXUubXVsdGlwbGV9LEYoImludmFsaWQiLHIpO2JyZWFrO2Nhc2UidGV4dGFyZWEiOnJvKHIsdSksRigiaW52YWxpZCIscil9ZHUobix1KSxsPW51bGw7Zm9yKHZhciBpIGluIHUpaWYodS5oYXNPd25Qcm9wZXJ0eShpKSl7dmFyIG89dVtpXTtpPT09ImNoaWxkcmVuIj90eXBlb2Ygbz09InN0cmluZyI/ci50ZXh0Q29udGVudCE9PW8mJih1LnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyE9PSEwJiZ3cihyLnRleHRDb250ZW50LG8sZSksbD1bImNoaWxkcmVuIixvXSk6dHlwZW9mIG89PSJudW1iZXIiJiZyLnRleHRDb250ZW50IT09IiIrbyYmKHUuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIT09ITAmJndyKHIudGV4dENvbnRlbnQsbyxlKSxsPVsiY2hpbGRyZW4iLCIiK29dKTpGbi5oYXNPd25Qcm9wZXJ0eShpKSYmbyE9bnVsbCYmaT09PSJvblNjcm9sbCImJkYoInNjcm9sbCIscil9c3dpdGNoKG4pe2Nhc2UiaW5wdXQiOmZyKHIpLG5vKHIsdSwhMCk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6ZnIociksbG8ocik7YnJlYWs7Y2FzZSJzZWxlY3QiOmNhc2Uib3B0aW9uIjpicmVhaztkZWZhdWx0OnR5cGVvZiB1Lm9uQ2xpY2s9PSJmdW5jdGlvbiImJihyLm9uY2xpY2s9S3IpfXI9bCx0LnVwZGF0ZVF1ZXVlPXIsciE9PW51bGwmJih0LmZsYWdzfD00KX1lbHNle2k9bC5ub2RlVHlwZT09PTk/bDpsLm93bmVyRG9jdW1lbnQsZT09PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiYmKGU9SXMobikpLGU9PT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI/bj09PSJzY3JpcHQiPyhlPWkuY3JlYXRlRWxlbWVudCgiZGl2IiksZS5pbm5lckhUTUw9IjxzY3JpcHQ+PFwvc2NyaXB0PiIsZT1lLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCkpOnR5cGVvZiByLmlzPT0ic3RyaW5nIj9lPWkuY3JlYXRlRWxlbWVudChuLHtpczpyLmlzfSk6KGU9aS5jcmVhdGVFbGVtZW50KG4pLG49PT0ic2VsZWN0IiYmKGk9ZSxyLm11bHRpcGxlP2kubXVsdGlwbGU9ITA6ci5zaXplJiYoaS5zaXplPXIuc2l6ZSkpKTplPWkuY3JlYXRlRWxlbWVudE5TKGUsbiksZVtqZV09dCxlW0tuXT1yLGxjKGUsdCwhMSwhMSksdC5zdGF0ZU5vZGU9ZTtlOntzd2l0Y2goaT1wdShuLHIpLG4pe2Nhc2UiZGlhbG9nIjpGKCJjYW5jZWwiLGUpLEYoImNsb3NlIixlKSxsPXI7YnJlYWs7Y2FzZSJpZnJhbWUiOmNhc2Uib2JqZWN0IjpjYXNlImVtYmVkIjpGKCJsb2FkIixlKSxsPXI7YnJlYWs7Y2FzZSJ2aWRlbyI6Y2FzZSJhdWRpbyI6Zm9yKGw9MDtsPFBuLmxlbmd0aDtsKyspRihQbltsXSxlKTtsPXI7YnJlYWs7Y2FzZSJzb3VyY2UiOkYoImVycm9yIixlKSxsPXI7YnJlYWs7Y2FzZSJpbWciOmNhc2UiaW1hZ2UiOmNhc2UibGluayI6RigiZXJyb3IiLGUpLEYoImxvYWQiLGUpLGw9cjticmVhaztjYXNlImRldGFpbHMiOkYoInRvZ2dsZSIsZSksbD1yO2JyZWFrO2Nhc2UiaW5wdXQiOnRvKGUsciksbD1vdShlLHIpLEYoImludmFsaWQiLGUpO2JyZWFrO2Nhc2Uib3B0aW9uIjpsPXI7YnJlYWs7Y2FzZSJzZWxlY3QiOmUuX3dyYXBwZXJTdGF0ZT17d2FzTXVsdGlwbGU6ISFyLm11bHRpcGxlfSxsPVYoe30scix7dmFsdWU6dm9pZCAwfSksRigiaW52YWxpZCIsZSk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6cm8oZSxyKSxsPWN1KGUsciksRigiaW52YWxpZCIsZSk7YnJlYWs7ZGVmYXVsdDpsPXJ9ZHUobixsKSxvPWw7Zm9yKHUgaW4gbylpZihvLmhhc093blByb3BlcnR5KHUpKXt2YXIgcz1vW3VdO3U9PT0ic3R5bGUiP2pzKGUscyk6dT09PSJkYW5nZXJvdXNseVNldElubmVySFRNTCI/KHM9cz9zLl9faHRtbDp2b2lkIDAscyE9bnVsbCYmRHMoZSxzKSk6dT09PSJjaGlsZHJlbiI/dHlwZW9mIHM9PSJzdHJpbmciPyhuIT09InRleHRhcmVhInx8cyE9PSIiKSYmam4oZSxzKTp0eXBlb2Ygcz09Im51bWJlciImJmpuKGUsIiIrcyk6dSE9PSJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciJiZ1IT09InN1cHByZXNzSHlkcmF0aW9uV2FybmluZyImJnUhPT0iYXV0b0ZvY3VzIiYmKEZuLmhhc093blByb3BlcnR5KHUpP3MhPW51bGwmJnU9PT0ib25TY3JvbGwiJiZGKCJzY3JvbGwiLGUpOnMhPW51bGwmJnJpKGUsdSxzLGkpKX1zd2l0Y2gobil7Y2FzZSJpbnB1dCI6ZnIoZSksbm8oZSxyLCExKTticmVhaztjYXNlInRleHRhcmVhIjpmcihlKSxsbyhlKTticmVhaztjYXNlIm9wdGlvbiI6ci52YWx1ZSE9bnVsbCYmZS5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIitwdChyLnZhbHVlKSk7YnJlYWs7Y2FzZSJzZWxlY3QiOmUubXVsdGlwbGU9ISFyLm11bHRpcGxlLHU9ci52YWx1ZSx1IT1udWxsP0d0KGUsISFyLm11bHRpcGxlLHUsITEpOnIuZGVmYXVsdFZhbHVlIT1udWxsJiZHdChlLCEhci5tdWx0aXBsZSxyLmRlZmF1bHRWYWx1ZSwhMCk7YnJlYWs7ZGVmYXVsdDp0eXBlb2YgbC5vbkNsaWNrPT0iZnVuY3Rpb24iJiYoZS5vbmNsaWNrPUtyKX1zd2l0Y2gobil7Y2FzZSJidXR0b24iOmNhc2UiaW5wdXQiOmNhc2Uic2VsZWN0IjpjYXNlInRleHRhcmVhIjpyPSEhci5hdXRvRm9jdXM7YnJlYWsgZTtjYXNlImltZyI6cj0hMDticmVhayBlO2RlZmF1bHQ6cj0hMX19ciYmKHQuZmxhZ3N8PTQpfXQucmVmIT09bnVsbCYmKHQuZmxhZ3N8PTUxMix0LmZsYWdzfD0yMDk3MTUyKX1yZXR1cm4gcmUodCksbnVsbDtjYXNlIDY6aWYoZSYmdC5zdGF0ZU5vZGUhPW51bGwpaWMoZSx0LGUubWVtb2l6ZWRQcm9wcyxyKTtlbHNle2lmKHR5cGVvZiByIT0ic3RyaW5nIiYmdC5zdGF0ZU5vZGU9PT1udWxsKXRocm93IEVycm9yKFMoMTY2KSk7aWYobj14dChYbi5jdXJyZW50KSx4dCgkZS5jdXJyZW50KSxTcih0KSl7aWYocj10LnN0YXRlTm9kZSxuPXQubWVtb2l6ZWRQcm9wcyxyW2plXT10LCh1PXIubm9kZVZhbHVlIT09bikmJihlPXllLGUhPT1udWxsKSlzd2l0Y2goZS50YWcpe2Nhc2UgMzp3cihyLm5vZGVWYWx1ZSxuLChlLm1vZGUmMSkhPT0wKTticmVhaztjYXNlIDU6ZS5tZW1vaXplZFByb3BzLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyE9PSEwJiZ3cihyLm5vZGVWYWx1ZSxuLChlLm1vZGUmMSkhPT0wKX11JiYodC5mbGFnc3w9NCl9ZWxzZSByPShuLm5vZGVUeXBlPT09OT9uOm4ub3duZXJEb2N1bWVudCkuY3JlYXRlVGV4dE5vZGUocikscltqZV09dCx0LnN0YXRlTm9kZT1yfXJldHVybiByZSh0KSxudWxsO2Nhc2UgMTM6aWYoaigkKSxyPXQubWVtb2l6ZWRTdGF0ZSxlPT09bnVsbHx8ZS5tZW1vaXplZFN0YXRlIT09bnVsbCYmZS5tZW1vaXplZFN0YXRlLmRlaHlkcmF0ZWQhPT1udWxsKXtpZihVJiZ2ZSE9PW51bGwmJnQubW9kZSYxJiYhKHQuZmxhZ3MmMTI4KSl4YSgpLHJuKCksdC5mbGFnc3w9OTg1NjAsdT0hMTtlbHNlIGlmKHU9U3IodCksciE9PW51bGwmJnIuZGVoeWRyYXRlZCE9PW51bGwpe2lmKGU9PT1udWxsKXtpZighdSl0aHJvdyBFcnJvcihTKDMxOCkpO2lmKHU9dC5tZW1vaXplZFN0YXRlLHU9dSE9PW51bGw/dS5kZWh5ZHJhdGVkOm51bGwsIXUpdGhyb3cgRXJyb3IoUygzMTcpKTt1W2plXT10fWVsc2Ugcm4oKSwhKHQuZmxhZ3MmMTI4KSYmKHQubWVtb2l6ZWRTdGF0ZT1udWxsKSx0LmZsYWdzfD00O3JlKHQpLHU9ITF9ZWxzZSBSZSE9PW51bGwmJihZdShSZSksUmU9bnVsbCksdT0hMDtpZighdSlyZXR1cm4gdC5mbGFncyY2NTUzNj90Om51bGx9cmV0dXJuIHQuZmxhZ3MmMTI4Pyh0LmxhbmVzPW4sdCk6KHI9ciE9PW51bGwsciE9PShlIT09bnVsbCYmZS5tZW1vaXplZFN0YXRlIT09bnVsbCkmJnImJih0LmNoaWxkLmZsYWdzfD04MTkyLHQubW9kZSYxJiYoZT09PW51bGx8fCQuY3VycmVudCYxP0c9PT0wJiYoRz0zKTokaSgpKSksdC51cGRhdGVRdWV1ZSE9PW51bGwmJih0LmZsYWdzfD00KSxyZSh0KSxudWxsKTtjYXNlIDQ6cmV0dXJuIHVuKCksJHUoZSx0KSxlPT09bnVsbCYmSG4odC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbykscmUodCksbnVsbDtjYXNlIDEwOnJldHVybiBFaSh0LnR5cGUuX2NvbnRleHQpLHJlKHQpLG51bGw7Y2FzZSAxNzpyZXR1cm4gcGUodC50eXBlKSYmWXIoKSxyZSh0KSxudWxsO2Nhc2UgMTk6aWYoaigkKSx1PXQubWVtb2l6ZWRTdGF0ZSx1PT09bnVsbClyZXR1cm4gcmUodCksbnVsbDtpZihyPSh0LmZsYWdzJjEyOCkhPT0wLGk9dS5yZW5kZXJpbmcsaT09PW51bGwpaWYocilrbih1LCExKTtlbHNle2lmKEchPT0wfHxlIT09bnVsbCYmZS5mbGFncyYxMjgpZm9yKGU9dC5jaGlsZDtlIT09bnVsbDspe2lmKGk9ZWwoZSksaSE9PW51bGwpe2Zvcih0LmZsYWdzfD0xMjgsa24odSwhMSkscj1pLnVwZGF0ZVF1ZXVlLHIhPT1udWxsJiYodC51cGRhdGVRdWV1ZT1yLHQuZmxhZ3N8PTQpLHQuc3VidHJlZUZsYWdzPTAscj1uLG49dC5jaGlsZDtuIT09bnVsbDspdT1uLGU9cix1LmZsYWdzJj0xNDY4MDA2NixpPXUuYWx0ZXJuYXRlLGk9PT1udWxsPyh1LmNoaWxkTGFuZXM9MCx1LmxhbmVzPWUsdS5jaGlsZD1udWxsLHUuc3VidHJlZUZsYWdzPTAsdS5tZW1vaXplZFByb3BzPW51bGwsdS5tZW1vaXplZFN0YXRlPW51bGwsdS51cGRhdGVRdWV1ZT1udWxsLHUuZGVwZW5kZW5jaWVzPW51bGwsdS5zdGF0ZU5vZGU9bnVsbCk6KHUuY2hpbGRMYW5lcz1pLmNoaWxkTGFuZXMsdS5sYW5lcz1pLmxhbmVzLHUuY2hpbGQ9aS5jaGlsZCx1LnN1YnRyZWVGbGFncz0wLHUuZGVsZXRpb25zPW51bGwsdS5tZW1vaXplZFByb3BzPWkubWVtb2l6ZWRQcm9wcyx1Lm1lbW9pemVkU3RhdGU9aS5tZW1vaXplZFN0YXRlLHUudXBkYXRlUXVldWU9aS51cGRhdGVRdWV1ZSx1LnR5cGU9aS50eXBlLGU9aS5kZXBlbmRlbmNpZXMsdS5kZXBlbmRlbmNpZXM9ZT09PW51bGw/bnVsbDp7bGFuZXM6ZS5sYW5lcyxmaXJzdENvbnRleHQ6ZS5maXJzdENvbnRleHR9KSxuPW4uc2libGluZztyZXR1cm4gRCgkLCQuY3VycmVudCYxfDIpLHQuY2hpbGR9ZT1lLnNpYmxpbmd9dS50YWlsIT09bnVsbCYmUSgpPnNuJiYodC5mbGFnc3w9MTI4LHI9ITAsa24odSwhMSksdC5sYW5lcz00MTk0MzA0KX1lbHNle2lmKCFyKWlmKGU9ZWwoaSksZSE9PW51bGwpe2lmKHQuZmxhZ3N8PTEyOCxyPSEwLG49ZS51cGRhdGVRdWV1ZSxuIT09bnVsbCYmKHQudXBkYXRlUXVldWU9bix0LmZsYWdzfD00KSxrbih1LCEwKSx1LnRhaWw9PT1udWxsJiZ1LnRhaWxNb2RlPT09ImhpZGRlbiImJiFpLmFsdGVybmF0ZSYmIVUpcmV0dXJuIHJlKHQpLG51bGx9ZWxzZSAyKlEoKS11LnJlbmRlcmluZ1N0YXJ0VGltZT5zbiYmbiE9PTEwNzM3NDE4MjQmJih0LmZsYWdzfD0xMjgscj0hMCxrbih1LCExKSx0LmxhbmVzPTQxOTQzMDQpO3UuaXNCYWNrd2FyZHM/KGkuc2libGluZz10LmNoaWxkLHQuY2hpbGQ9aSk6KG49dS5sYXN0LG4hPT1udWxsP24uc2libGluZz1pOnQuY2hpbGQ9aSx1Lmxhc3Q9aSl9cmV0dXJuIHUudGFpbCE9PW51bGw/KHQ9dS50YWlsLHUucmVuZGVyaW5nPXQsdS50YWlsPXQuc2libGluZyx1LnJlbmRlcmluZ1N0YXJ0VGltZT1RKCksdC5zaWJsaW5nPW51bGwsbj0kLmN1cnJlbnQsRCgkLHI/biYxfDI6biYxKSx0KToocmUodCksbnVsbCk7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBVaSgpLHI9dC5tZW1vaXplZFN0YXRlIT09bnVsbCxlIT09bnVsbCYmZS5tZW1vaXplZFN0YXRlIT09bnVsbCE9PXImJih0LmZsYWdzfD04MTkyKSxyJiZ0Lm1vZGUmMT9tZSYxMDczNzQxODI0JiYocmUodCksdC5zdWJ0cmVlRmxhZ3MmNiYmKHQuZmxhZ3N8PTgxOTIpKTpyZSh0KSxudWxsO2Nhc2UgMjQ6cmV0dXJuIG51bGw7Y2FzZSAyNTpyZXR1cm4gbnVsbH10aHJvdyBFcnJvcihTKDE1Nix0LnRhZykpfWZ1bmN0aW9uIEJkKGUsdCl7c3dpdGNoKGdpKHQpLHQudGFnKXtjYXNlIDE6cmV0dXJuIHBlKHQudHlwZSkmJllyKCksZT10LmZsYWdzLGUmNjU1MzY/KHQuZmxhZ3M9ZSYtNjU1Mzd8MTI4LHQpOm51bGw7Y2FzZSAzOnJldHVybiB1bigpLGooZGUpLGoodWUpLE5pKCksZT10LmZsYWdzLGUmNjU1MzYmJiEoZSYxMjgpPyh0LmZsYWdzPWUmLTY1NTM3fDEyOCx0KTpudWxsO2Nhc2UgNTpyZXR1cm4gUGkodCksbnVsbDtjYXNlIDEzOmlmKGooJCksZT10Lm1lbW9pemVkU3RhdGUsZSE9PW51bGwmJmUuZGVoeWRyYXRlZCE9PW51bGwpe2lmKHQuYWx0ZXJuYXRlPT09bnVsbCl0aHJvdyBFcnJvcihTKDM0MCkpO3JuKCl9cmV0dXJuIGU9dC5mbGFncyxlJjY1NTM2Pyh0LmZsYWdzPWUmLTY1NTM3fDEyOCx0KTpudWxsO2Nhc2UgMTk6cmV0dXJuIGooJCksbnVsbDtjYXNlIDQ6cmV0dXJuIHVuKCksbnVsbDtjYXNlIDEwOnJldHVybiBFaSh0LnR5cGUuX2NvbnRleHQpLG51bGw7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBVaSgpLG51bGw7Y2FzZSAyNDpyZXR1cm4gbnVsbDtkZWZhdWx0OnJldHVybiBudWxsfX12YXIgQ3I9ITEsbGU9ITEsVmQ9dHlwZW9mIFdlYWtTZXQ9PSJmdW5jdGlvbiI/V2Vha1NldDpTZXQsQz1udWxsO2Z1bmN0aW9uIFl0KGUsdCl7dmFyIG49ZS5yZWY7aWYobiE9PW51bGwpaWYodHlwZW9mIG49PSJmdW5jdGlvbiIpdHJ5e24obnVsbCl9Y2F0Y2gocil7QShlLHQscil9ZWxzZSBuLmN1cnJlbnQ9bnVsbH1mdW5jdGlvbiBCdShlLHQsbil7dHJ5e24oKX1jYXRjaChyKXtBKGUsdCxyKX19dmFyIFhvPSExO2Z1bmN0aW9uIEFkKGUsdCl7aWYoQ3U9V3IsZT1mYSgpLHZpKGUpKXtpZigic2VsZWN0aW9uU3RhcnQiaW4gZSl2YXIgbj17c3RhcnQ6ZS5zZWxlY3Rpb25TdGFydCxlbmQ6ZS5zZWxlY3Rpb25FbmR9O2Vsc2UgZTp7bj0obj1lLm93bmVyRG9jdW1lbnQpJiZuLmRlZmF1bHRWaWV3fHx3aW5kb3c7dmFyIHI9bi5nZXRTZWxlY3Rpb24mJm4uZ2V0U2VsZWN0aW9uKCk7aWYociYmci5yYW5nZUNvdW50IT09MCl7bj1yLmFuY2hvck5vZGU7dmFyIGw9ci5hbmNob3JPZmZzZXQsdT1yLmZvY3VzTm9kZTtyPXIuZm9jdXNPZmZzZXQ7dHJ5e24ubm9kZVR5cGUsdS5ub2RlVHlwZX1jYXRjaHtuPW51bGw7YnJlYWsgZX12YXIgaT0wLG89LTEscz0tMSxhPTAsaD0wLHA9ZSxtPW51bGw7dDpmb3IoOzspe2Zvcih2YXIgeTtwIT09bnx8bCE9PTAmJnAubm9kZVR5cGUhPT0zfHwobz1pK2wpLHAhPT11fHxyIT09MCYmcC5ub2RlVHlwZSE9PTN8fChzPWkrcikscC5ub2RlVHlwZT09PTMmJihpKz1wLm5vZGVWYWx1ZS5sZW5ndGgpLCh5PXAuZmlyc3RDaGlsZCkhPT1udWxsOyltPXAscD15O2Zvcig7Oyl7aWYocD09PWUpYnJlYWsgdDtpZihtPT09biYmKythPT09bCYmKG89aSksbT09PXUmJisraD09PXImJihzPWkpLCh5PXAubmV4dFNpYmxpbmcpIT09bnVsbClicmVhaztwPW0sbT1wLnBhcmVudE5vZGV9cD15fW49bz09PS0xfHxzPT09LTE/bnVsbDp7c3RhcnQ6byxlbmQ6c319ZWxzZSBuPW51bGx9bj1ufHx7c3RhcnQ6MCxlbmQ6MH19ZWxzZSBuPW51bGw7Zm9yKHh1PXtmb2N1c2VkRWxlbTplLHNlbGVjdGlvblJhbmdlOm59LFdyPSExLEM9dDtDIT09bnVsbDspaWYodD1DLGU9dC5jaGlsZCwodC5zdWJ0cmVlRmxhZ3MmMTAyOCkhPT0wJiZlIT09bnVsbCllLnJldHVybj10LEM9ZTtlbHNlIGZvcig7QyE9PW51bGw7KXt0PUM7dHJ5e3ZhciBnPXQuYWx0ZXJuYXRlO2lmKHQuZmxhZ3MmMTAyNClzd2l0Y2godC50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6YnJlYWs7Y2FzZSAxOmlmKGchPT1udWxsKXt2YXIgdz1nLm1lbW9pemVkUHJvcHMsRT1nLm1lbW9pemVkU3RhdGUsZj10LnN0YXRlTm9kZSxjPWYuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUodC5lbGVtZW50VHlwZT09PXQudHlwZT93OkxlKHQudHlwZSx3KSxFKTtmLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlPWN9YnJlYWs7Y2FzZSAzOnZhciBkPXQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87ZC5ub2RlVHlwZT09PTE/ZC50ZXh0Q29udGVudD0iIjpkLm5vZGVUeXBlPT09OSYmZC5kb2N1bWVudEVsZW1lbnQmJmQucmVtb3ZlQ2hpbGQoZC5kb2N1bWVudEVsZW1lbnQpO2JyZWFrO2Nhc2UgNTpjYXNlIDY6Y2FzZSA0OmNhc2UgMTc6YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihTKDE2MykpfX1jYXRjaCh2KXtBKHQsdC5yZXR1cm4sdil9aWYoZT10LnNpYmxpbmcsZSE9PW51bGwpe2UucmV0dXJuPXQucmV0dXJuLEM9ZTticmVha31DPXQucmV0dXJufXJldHVybiBnPVhvLFhvPSExLGd9ZnVuY3Rpb24gTW4oZSx0LG4pe3ZhciByPXQudXBkYXRlUXVldWU7aWYocj1yIT09bnVsbD9yLmxhc3RFZmZlY3Q6bnVsbCxyIT09bnVsbCl7dmFyIGw9cj1yLm5leHQ7ZG97aWYoKGwudGFnJmUpPT09ZSl7dmFyIHU9bC5kZXN0cm95O2wuZGVzdHJveT12b2lkIDAsdSE9PXZvaWQgMCYmQnUodCxuLHUpfWw9bC5uZXh0fXdoaWxlKGwhPT1yKX19ZnVuY3Rpb24geWwoZSx0KXtpZih0PXQudXBkYXRlUXVldWUsdD10IT09bnVsbD90Lmxhc3RFZmZlY3Q6bnVsbCx0IT09bnVsbCl7dmFyIG49dD10Lm5leHQ7ZG97aWYoKG4udGFnJmUpPT09ZSl7dmFyIHI9bi5jcmVhdGU7bi5kZXN0cm95PXIoKX1uPW4ubmV4dH13aGlsZShuIT09dCl9fWZ1bmN0aW9uIFZ1KGUpe3ZhciB0PWUucmVmO2lmKHQhPT1udWxsKXt2YXIgbj1lLnN0YXRlTm9kZTtzd2l0Y2goZS50YWcpe2Nhc2UgNTplPW47YnJlYWs7ZGVmYXVsdDplPW59dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dChlKTp0LmN1cnJlbnQ9ZX19ZnVuY3Rpb24gb2MoZSl7dmFyIHQ9ZS5hbHRlcm5hdGU7dCE9PW51bGwmJihlLmFsdGVybmF0ZT1udWxsLG9jKHQpKSxlLmNoaWxkPW51bGwsZS5kZWxldGlvbnM9bnVsbCxlLnNpYmxpbmc9bnVsbCxlLnRhZz09PTUmJih0PWUuc3RhdGVOb2RlLHQhPT1udWxsJiYoZGVsZXRlIHRbamVdLGRlbGV0ZSB0W0tuXSxkZWxldGUgdFtOdV0sZGVsZXRlIHRbeGRdLGRlbGV0ZSB0W19kXSkpLGUuc3RhdGVOb2RlPW51bGwsZS5yZXR1cm49bnVsbCxlLmRlcGVuZGVuY2llcz1udWxsLGUubWVtb2l6ZWRQcm9wcz1udWxsLGUubWVtb2l6ZWRTdGF0ZT1udWxsLGUucGVuZGluZ1Byb3BzPW51bGwsZS5zdGF0ZU5vZGU9bnVsbCxlLnVwZGF0ZVF1ZXVlPW51bGx9ZnVuY3Rpb24gc2MoZSl7cmV0dXJuIGUudGFnPT09NXx8ZS50YWc9PT0zfHxlLnRhZz09PTR9ZnVuY3Rpb24gR28oZSl7ZTpmb3IoOzspe2Zvcig7ZS5zaWJsaW5nPT09bnVsbDspe2lmKGUucmV0dXJuPT09bnVsbHx8c2MoZS5yZXR1cm4pKXJldHVybiBudWxsO2U9ZS5yZXR1cm59Zm9yKGUuc2libGluZy5yZXR1cm49ZS5yZXR1cm4sZT1lLnNpYmxpbmc7ZS50YWchPT01JiZlLnRhZyE9PTYmJmUudGFnIT09MTg7KXtpZihlLmZsYWdzJjJ8fGUuY2hpbGQ9PT1udWxsfHxlLnRhZz09PTQpY29udGludWUgZTtlLmNoaWxkLnJldHVybj1lLGU9ZS5jaGlsZH1pZighKGUuZmxhZ3MmMikpcmV0dXJuIGUuc3RhdGVOb2RlfX1mdW5jdGlvbiBBdShlLHQsbil7dmFyIHI9ZS50YWc7aWYocj09PTV8fHI9PT02KWU9ZS5zdGF0ZU5vZGUsdD9uLm5vZGVUeXBlPT09OD9uLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdCk6bi5pbnNlcnRCZWZvcmUoZSx0KToobi5ub2RlVHlwZT09PTg/KHQ9bi5wYXJlbnROb2RlLHQuaW5zZXJ0QmVmb3JlKGUsbikpOih0PW4sdC5hcHBlbmRDaGlsZChlKSksbj1uLl9yZWFjdFJvb3RDb250YWluZXIsbiE9bnVsbHx8dC5vbmNsaWNrIT09bnVsbHx8KHQub25jbGljaz1LcikpO2Vsc2UgaWYociE9PTQmJihlPWUuY2hpbGQsZSE9PW51bGwpKWZvcihBdShlLHQsbiksZT1lLnNpYmxpbmc7ZSE9PW51bGw7KUF1KGUsdCxuKSxlPWUuc2libGluZ31mdW5jdGlvbiBXdShlLHQsbil7dmFyIHI9ZS50YWc7aWYocj09PTV8fHI9PT02KWU9ZS5zdGF0ZU5vZGUsdD9uLmluc2VydEJlZm9yZShlLHQpOm4uYXBwZW5kQ2hpbGQoZSk7ZWxzZSBpZihyIT09NCYmKGU9ZS5jaGlsZCxlIT09bnVsbCkpZm9yKFd1KGUsdCxuKSxlPWUuc2libGluZztlIT09bnVsbDspV3UoZSx0LG4pLGU9ZS5zaWJsaW5nfXZhciBiPW51bGwsVGU9ITE7ZnVuY3Rpb24gWmUoZSx0LG4pe2ZvcihuPW4uY2hpbGQ7biE9PW51bGw7KWFjKGUsdCxuKSxuPW4uc2libGluZ31mdW5jdGlvbiBhYyhlLHQsbil7aWYoVWUmJnR5cGVvZiBVZS5vbkNvbW1pdEZpYmVyVW5tb3VudD09ImZ1bmN0aW9uIil0cnl7VWUub25Db21taXRGaWJlclVubW91bnQoYWwsbil9Y2F0Y2h7fXN3aXRjaChuLnRhZyl7Y2FzZSA1OmxlfHxZdChuLHQpO2Nhc2UgNjp2YXIgcj1iLGw9VGU7Yj1udWxsLFplKGUsdCxuKSxiPXIsVGU9bCxiIT09bnVsbCYmKFRlPyhlPWIsbj1uLnN0YXRlTm9kZSxlLm5vZGVUeXBlPT09OD9lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobik6ZS5yZW1vdmVDaGlsZChuKSk6Yi5yZW1vdmVDaGlsZChuLnN0YXRlTm9kZSkpO2JyZWFrO2Nhc2UgMTg6YiE9PW51bGwmJihUZT8oZT1iLG49bi5zdGF0ZU5vZGUsZS5ub2RlVHlwZT09PTg/UWwoZS5wYXJlbnROb2RlLG4pOmUubm9kZVR5cGU9PT0xJiZRbChlLG4pLFZuKGUpKTpRbChiLG4uc3RhdGVOb2RlKSk7YnJlYWs7Y2FzZSA0OnI9YixsPVRlLGI9bi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxUZT0hMCxaZShlLHQsbiksYj1yLFRlPWw7YnJlYWs7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmlmKCFsZSYmKHI9bi51cGRhdGVRdWV1ZSxyIT09bnVsbCYmKHI9ci5sYXN0RWZmZWN0LHIhPT1udWxsKSkpe2w9cj1yLm5leHQ7ZG97dmFyIHU9bCxpPXUuZGVzdHJveTt1PXUudGFnLGkhPT12b2lkIDAmJih1JjJ8fHUmNCkmJkJ1KG4sdCxpKSxsPWwubmV4dH13aGlsZShsIT09cil9WmUoZSx0LG4pO2JyZWFrO2Nhc2UgMTppZighbGUmJihZdChuLHQpLHI9bi5zdGF0ZU5vZGUsdHlwZW9mIHIuY29tcG9uZW50V2lsbFVubW91bnQ9PSJmdW5jdGlvbiIpKXRyeXtyLnByb3BzPW4ubWVtb2l6ZWRQcm9wcyxyLnN0YXRlPW4ubWVtb2l6ZWRTdGF0ZSxyLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2gobyl7QShuLHQsbyl9WmUoZSx0LG4pO2JyZWFrO2Nhc2UgMjE6WmUoZSx0LG4pO2JyZWFrO2Nhc2UgMjI6bi5tb2RlJjE/KGxlPShyPWxlKXx8bi5tZW1vaXplZFN0YXRlIT09bnVsbCxaZShlLHQsbiksbGU9cik6WmUoZSx0LG4pO2JyZWFrO2RlZmF1bHQ6WmUoZSx0LG4pfX1mdW5jdGlvbiBabyhlKXt2YXIgdD1lLnVwZGF0ZVF1ZXVlO2lmKHQhPT1udWxsKXtlLnVwZGF0ZVF1ZXVlPW51bGw7dmFyIG49ZS5zdGF0ZU5vZGU7bj09PW51bGwmJihuPWUuc3RhdGVOb2RlPW5ldyBWZCksdC5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBsPUpkLmJpbmQobnVsbCxlLHIpO24uaGFzKHIpfHwobi5hZGQociksci50aGVuKGwsbCkpfSl9fWZ1bmN0aW9uIHplKGUsdCl7dmFyIG49dC5kZWxldGlvbnM7aWYobiE9PW51bGwpZm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBsPW5bcl07dHJ5e3ZhciB1PWUsaT10LG89aTtlOmZvcig7byE9PW51bGw7KXtzd2l0Y2goby50YWcpe2Nhc2UgNTpiPW8uc3RhdGVOb2RlLFRlPSExO2JyZWFrIGU7Y2FzZSAzOmI9by5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxUZT0hMDticmVhayBlO2Nhc2UgNDpiPW8uc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sVGU9ITA7YnJlYWsgZX1vPW8ucmV0dXJufWlmKGI9PT1udWxsKXRocm93IEVycm9yKFMoMTYwKSk7YWModSxpLGwpLGI9bnVsbCxUZT0hMTt2YXIgcz1sLmFsdGVybmF0ZTtzIT09bnVsbCYmKHMucmV0dXJuPW51bGwpLGwucmV0dXJuPW51bGx9Y2F0Y2goYSl7QShsLHQsYSl9fWlmKHQuc3VidHJlZUZsYWdzJjEyODU0KWZvcih0PXQuY2hpbGQ7dCE9PW51bGw7KWNjKHQsZSksdD10LnNpYmxpbmd9ZnVuY3Rpb24gY2MoZSx0KXt2YXIgbj1lLmFsdGVybmF0ZSxyPWUuZmxhZ3M7c3dpdGNoKGUudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6aWYoemUodCxlKSxEZShlKSxyJjQpe3RyeXtNbigzLGUsZS5yZXR1cm4pLHlsKDMsZSl9Y2F0Y2godyl7QShlLGUucmV0dXJuLHcpfXRyeXtNbig1LGUsZS5yZXR1cm4pfWNhdGNoKHcpe0EoZSxlLnJldHVybix3KX19YnJlYWs7Y2FzZSAxOnplKHQsZSksRGUoZSksciY1MTImJm4hPT1udWxsJiZZdChuLG4ucmV0dXJuKTticmVhaztjYXNlIDU6aWYoemUodCxlKSxEZShlKSxyJjUxMiYmbiE9PW51bGwmJll0KG4sbi5yZXR1cm4pLGUuZmxhZ3MmMzIpe3ZhciBsPWUuc3RhdGVOb2RlO3RyeXtqbihsLCIiKX1jYXRjaCh3KXtBKGUsZS5yZXR1cm4sdyl9fWlmKHImNCYmKGw9ZS5zdGF0ZU5vZGUsbCE9bnVsbCkpe3ZhciB1PWUubWVtb2l6ZWRQcm9wcyxpPW4hPT1udWxsP24ubWVtb2l6ZWRQcm9wczp1LG89ZS50eXBlLHM9ZS51cGRhdGVRdWV1ZTtpZihlLnVwZGF0ZVF1ZXVlPW51bGwscyE9PW51bGwpdHJ5e289PT0iaW5wdXQiJiZ1LnR5cGU9PT0icmFkaW8iJiZ1Lm5hbWUhPW51bGwmJk9zKGwsdSkscHUobyxpKTt2YXIgYT1wdShvLHUpO2ZvcihpPTA7aTxzLmxlbmd0aDtpKz0yKXt2YXIgaD1zW2ldLHA9c1tpKzFdO2g9PT0ic3R5bGUiP2pzKGwscCk6aD09PSJkYW5nZXJvdXNseVNldElubmVySFRNTCI/RHMobCxwKTpoPT09ImNoaWxkcmVuIj9qbihsLHApOnJpKGwsaCxwLGEpfXN3aXRjaChvKXtjYXNlImlucHV0IjpzdShsLHUpO2JyZWFrO2Nhc2UidGV4dGFyZWEiOk1zKGwsdSk7YnJlYWs7Y2FzZSJzZWxlY3QiOnZhciBtPWwuX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZTtsLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU9ISF1Lm11bHRpcGxlO3ZhciB5PXUudmFsdWU7eSE9bnVsbD9HdChsLCEhdS5tdWx0aXBsZSx5LCExKTptIT09ISF1Lm11bHRpcGxlJiYodS5kZWZhdWx0VmFsdWUhPW51bGw/R3QobCwhIXUubXVsdGlwbGUsdS5kZWZhdWx0VmFsdWUsITApOkd0KGwsISF1Lm11bHRpcGxlLHUubXVsdGlwbGU/W106IiIsITEpKX1sW0tuXT11fWNhdGNoKHcpe0EoZSxlLnJldHVybix3KX19YnJlYWs7Y2FzZSA2OmlmKHplKHQsZSksRGUoZSksciY0KXtpZihlLnN0YXRlTm9kZT09PW51bGwpdGhyb3cgRXJyb3IoUygxNjIpKTtsPWUuc3RhdGVOb2RlLHU9ZS5tZW1vaXplZFByb3BzO3RyeXtsLm5vZGVWYWx1ZT11fWNhdGNoKHcpe0EoZSxlLnJldHVybix3KX19YnJlYWs7Y2FzZSAzOmlmKHplKHQsZSksRGUoZSksciY0JiZuIT09bnVsbCYmbi5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCl0cnl7Vm4odC5jb250YWluZXJJbmZvKX1jYXRjaCh3KXtBKGUsZS5yZXR1cm4sdyl9YnJlYWs7Y2FzZSA0OnplKHQsZSksRGUoZSk7YnJlYWs7Y2FzZSAxMzp6ZSh0LGUpLERlKGUpLGw9ZS5jaGlsZCxsLmZsYWdzJjgxOTImJih1PWwubWVtb2l6ZWRTdGF0ZSE9PW51bGwsbC5zdGF0ZU5vZGUuaXNIaWRkZW49dSwhdXx8bC5hbHRlcm5hdGUhPT1udWxsJiZsLmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlIT09bnVsbHx8KEZpPVEoKSkpLHImNCYmWm8oZSk7YnJlYWs7Y2FzZSAyMjppZihoPW4hPT1udWxsJiZuLm1lbW9pemVkU3RhdGUhPT1udWxsLGUubW9kZSYxPyhsZT0oYT1sZSl8fGgsemUodCxlKSxsZT1hKTp6ZSh0LGUpLERlKGUpLHImODE5Mil7aWYoYT1lLm1lbW9pemVkU3RhdGUhPT1udWxsLChlLnN0YXRlTm9kZS5pc0hpZGRlbj1hKSYmIWgmJmUubW9kZSYxKWZvcihDPWUsaD1lLmNoaWxkO2ghPT1udWxsOyl7Zm9yKHA9Qz1oO0MhPT1udWxsOyl7c3dpdGNoKG09Qyx5PW0uY2hpbGQsbS50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTpNbig0LG0sbS5yZXR1cm4pO2JyZWFrO2Nhc2UgMTpZdChtLG0ucmV0dXJuKTt2YXIgZz1tLnN0YXRlTm9kZTtpZih0eXBlb2YgZy5jb21wb25lbnRXaWxsVW5tb3VudD09ImZ1bmN0aW9uIil7cj1tLG49bS5yZXR1cm47dHJ5e3Q9cixnLnByb3BzPXQubWVtb2l6ZWRQcm9wcyxnLnN0YXRlPXQubWVtb2l6ZWRTdGF0ZSxnLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2godyl7QShyLG4sdyl9fWJyZWFrO2Nhc2UgNTpZdChtLG0ucmV0dXJuKTticmVhaztjYXNlIDIyOmlmKG0ubWVtb2l6ZWRTdGF0ZSE9PW51bGwpe3FvKHApO2NvbnRpbnVlfX15IT09bnVsbD8oeS5yZXR1cm49bSxDPXkpOnFvKHApfWg9aC5zaWJsaW5nfWU6Zm9yKGg9bnVsbCxwPWU7Oyl7aWYocC50YWc9PT01KXtpZihoPT09bnVsbCl7aD1wO3RyeXtsPXAuc3RhdGVOb2RlLGE/KHU9bC5zdHlsZSx0eXBlb2YgdS5zZXRQcm9wZXJ0eT09ImZ1bmN0aW9uIj91LnNldFByb3BlcnR5KCJkaXNwbGF5Iiwibm9uZSIsImltcG9ydGFudCIpOnUuZGlzcGxheT0ibm9uZSIpOihvPXAuc3RhdGVOb2RlLHM9cC5tZW1vaXplZFByb3BzLnN0eWxlLGk9cyE9bnVsbCYmcy5oYXNPd25Qcm9wZXJ0eSgiZGlzcGxheSIpP3MuZGlzcGxheTpudWxsLG8uc3R5bGUuZGlzcGxheT1GcygiZGlzcGxheSIsaSkpfWNhdGNoKHcpe0EoZSxlLnJldHVybix3KX19fWVsc2UgaWYocC50YWc9PT02KXtpZihoPT09bnVsbCl0cnl7cC5zdGF0ZU5vZGUubm9kZVZhbHVlPWE/IiI6cC5tZW1vaXplZFByb3BzfWNhdGNoKHcpe0EoZSxlLnJldHVybix3KX19ZWxzZSBpZigocC50YWchPT0yMiYmcC50YWchPT0yM3x8cC5tZW1vaXplZFN0YXRlPT09bnVsbHx8cD09PWUpJiZwLmNoaWxkIT09bnVsbCl7cC5jaGlsZC5yZXR1cm49cCxwPXAuY2hpbGQ7Y29udGludWV9aWYocD09PWUpYnJlYWsgZTtmb3IoO3Auc2libGluZz09PW51bGw7KXtpZihwLnJldHVybj09PW51bGx8fHAucmV0dXJuPT09ZSlicmVhayBlO2g9PT1wJiYoaD1udWxsKSxwPXAucmV0dXJufWg9PT1wJiYoaD1udWxsKSxwLnNpYmxpbmcucmV0dXJuPXAucmV0dXJuLHA9cC5zaWJsaW5nfX1icmVhaztjYXNlIDE5OnplKHQsZSksRGUoZSksciY0JiZabyhlKTticmVhaztjYXNlIDIxOmJyZWFrO2RlZmF1bHQ6emUodCxlKSxEZShlKX19ZnVuY3Rpb24gRGUoZSl7dmFyIHQ9ZS5mbGFncztpZih0JjIpe3RyeXtlOntmb3IodmFyIG49ZS5yZXR1cm47biE9PW51bGw7KXtpZihzYyhuKSl7dmFyIHI9bjticmVhayBlfW49bi5yZXR1cm59dGhyb3cgRXJyb3IoUygxNjApKX1zd2l0Y2goci50YWcpe2Nhc2UgNTp2YXIgbD1yLnN0YXRlTm9kZTtyLmZsYWdzJjMyJiYoam4obCwiIiksci5mbGFncyY9LTMzKTt2YXIgdT1HbyhlKTtXdShlLHUsbCk7YnJlYWs7Y2FzZSAzOmNhc2UgNDp2YXIgaT1yLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLG89R28oZSk7QXUoZSxvLGkpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoUygxNjEpKX19Y2F0Y2gocyl7QShlLGUucmV0dXJuLHMpfWUuZmxhZ3MmPS0zfXQmNDA5NiYmKGUuZmxhZ3MmPS00MDk3KX1mdW5jdGlvbiBXZChlLHQsbil7Qz1lLGZjKGUpfWZ1bmN0aW9uIGZjKGUsdCxuKXtmb3IodmFyIHI9KGUubW9kZSYxKSE9PTA7QyE9PW51bGw7KXt2YXIgbD1DLHU9bC5jaGlsZDtpZihsLnRhZz09PTIyJiZyKXt2YXIgaT1sLm1lbW9pemVkU3RhdGUhPT1udWxsfHxDcjtpZighaSl7dmFyIG89bC5hbHRlcm5hdGUscz1vIT09bnVsbCYmby5tZW1vaXplZFN0YXRlIT09bnVsbHx8bGU7bz1Dcjt2YXIgYT1sZTtpZihDcj1pLChsZT1zKSYmIWEpZm9yKEM9bDtDIT09bnVsbDspaT1DLHM9aS5jaGlsZCxpLnRhZz09PTIyJiZpLm1lbW9pemVkU3RhdGUhPT1udWxsP2JvKGwpOnMhPT1udWxsPyhzLnJldHVybj1pLEM9cyk6Ym8obCk7Zm9yKDt1IT09bnVsbDspQz11LGZjKHUpLHU9dS5zaWJsaW5nO0M9bCxDcj1vLGxlPWF9Sm8oZSl9ZWxzZSBsLnN1YnRyZWVGbGFncyY4NzcyJiZ1IT09bnVsbD8odS5yZXR1cm49bCxDPXUpOkpvKGUpfX1mdW5jdGlvbiBKbyhlKXtmb3IoO0MhPT1udWxsOyl7dmFyIHQ9QztpZih0LmZsYWdzJjg3NzIpe3ZhciBuPXQuYWx0ZXJuYXRlO3RyeXtpZih0LmZsYWdzJjg3NzIpc3dpdGNoKHQudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmxlfHx5bCg1LHQpO2JyZWFrO2Nhc2UgMTp2YXIgcj10LnN0YXRlTm9kZTtpZih0LmZsYWdzJjQmJiFsZSlpZihuPT09bnVsbClyLmNvbXBvbmVudERpZE1vdW50KCk7ZWxzZXt2YXIgbD10LmVsZW1lbnRUeXBlPT09dC50eXBlP24ubWVtb2l6ZWRQcm9wczpMZSh0LnR5cGUsbi5tZW1vaXplZFByb3BzKTtyLmNvbXBvbmVudERpZFVwZGF0ZShsLG4ubWVtb2l6ZWRTdGF0ZSxyLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlKX12YXIgdT10LnVwZGF0ZVF1ZXVlO3UhPT1udWxsJiZEbyh0LHUscik7YnJlYWs7Y2FzZSAzOnZhciBpPXQudXBkYXRlUXVldWU7aWYoaSE9PW51bGwpe2lmKG49bnVsbCx0LmNoaWxkIT09bnVsbClzd2l0Y2godC5jaGlsZC50YWcpe2Nhc2UgNTpuPXQuY2hpbGQuc3RhdGVOb2RlO2JyZWFrO2Nhc2UgMTpuPXQuY2hpbGQuc3RhdGVOb2RlfURvKHQsaSxuKX1icmVhaztjYXNlIDU6dmFyIG89dC5zdGF0ZU5vZGU7aWYobj09PW51bGwmJnQuZmxhZ3MmNCl7bj1vO3ZhciBzPXQubWVtb2l6ZWRQcm9wcztzd2l0Y2godC50eXBlKXtjYXNlImJ1dHRvbiI6Y2FzZSJpbnB1dCI6Y2FzZSJzZWxlY3QiOmNhc2UidGV4dGFyZWEiOnMuYXV0b0ZvY3VzJiZuLmZvY3VzKCk7YnJlYWs7Y2FzZSJpbWciOnMuc3JjJiYobi5zcmM9cy5zcmMpfX1icmVhaztjYXNlIDY6YnJlYWs7Y2FzZSA0OmJyZWFrO2Nhc2UgMTI6YnJlYWs7Y2FzZSAxMzppZih0Lm1lbW9pemVkU3RhdGU9PT1udWxsKXt2YXIgYT10LmFsdGVybmF0ZTtpZihhIT09bnVsbCl7dmFyIGg9YS5tZW1vaXplZFN0YXRlO2lmKGghPT1udWxsKXt2YXIgcD1oLmRlaHlkcmF0ZWQ7cCE9PW51bGwmJlZuKHApfX19YnJlYWs7Y2FzZSAxOTpjYXNlIDE3OmNhc2UgMjE6Y2FzZSAyMjpjYXNlIDIzOmNhc2UgMjU6YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihTKDE2MykpfWxlfHx0LmZsYWdzJjUxMiYmVnUodCl9Y2F0Y2gobSl7QSh0LHQucmV0dXJuLG0pfX1pZih0PT09ZSl7Qz1udWxsO2JyZWFrfWlmKG49dC5zaWJsaW5nLG4hPT1udWxsKXtuLnJldHVybj10LnJldHVybixDPW47YnJlYWt9Qz10LnJldHVybn19ZnVuY3Rpb24gcW8oZSl7Zm9yKDtDIT09bnVsbDspe3ZhciB0PUM7aWYodD09PWUpe0M9bnVsbDticmVha312YXIgbj10LnNpYmxpbmc7aWYobiE9PW51bGwpe24ucmV0dXJuPXQucmV0dXJuLEM9bjticmVha31DPXQucmV0dXJufX1mdW5jdGlvbiBibyhlKXtmb3IoO0MhPT1udWxsOyl7dmFyIHQ9Qzt0cnl7c3dpdGNoKHQudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OnZhciBuPXQucmV0dXJuO3RyeXt5bCg0LHQpfWNhdGNoKHMpe0EodCxuLHMpfWJyZWFrO2Nhc2UgMTp2YXIgcj10LnN0YXRlTm9kZTtpZih0eXBlb2Ygci5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIil7dmFyIGw9dC5yZXR1cm47dHJ5e3IuY29tcG9uZW50RGlkTW91bnQoKX1jYXRjaChzKXtBKHQsbCxzKX19dmFyIHU9dC5yZXR1cm47dHJ5e1Z1KHQpfWNhdGNoKHMpe0EodCx1LHMpfWJyZWFrO2Nhc2UgNTp2YXIgaT10LnJldHVybjt0cnl7VnUodCl9Y2F0Y2gocyl7QSh0LGkscyl9fX1jYXRjaChzKXtBKHQsdC5yZXR1cm4scyl9aWYodD09PWUpe0M9bnVsbDticmVha312YXIgbz10LnNpYmxpbmc7aWYobyE9PW51bGwpe28ucmV0dXJuPXQucmV0dXJuLEM9bzticmVha31DPXQucmV0dXJufX12YXIgSGQ9TWF0aC5jZWlsLHJsPUdlLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsSWk9R2UuUmVhY3RDdXJyZW50T3duZXIseGU9R2UuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsTT0wLHE9bnVsbCxLPW51bGwsZWU9MCxtZT0wLFh0PXZ0KDApLEc9MCxxbj1udWxsLFR0PTAsZ2w9MCxEaT0wLEluPW51bGwsY2U9bnVsbCxGaT0wLHNuPTEvMCxCZT1udWxsLGxsPSExLEh1PW51bGwsYXQ9bnVsbCx4cj0hMSxudD1udWxsLHVsPTAsRG49MCxRdT1udWxsLERyPS0xLEZyPTA7ZnVuY3Rpb24gb2UoKXtyZXR1cm4gTSY2P1EoKTpEciE9PS0xP0RyOkRyPVEoKX1mdW5jdGlvbiBjdChlKXtyZXR1cm4gZS5tb2RlJjE/TSYyJiZlZSE9PTA/ZWUmLWVlOk5kLnRyYW5zaXRpb24hPT1udWxsPyhGcj09PTAmJihGcj1HcygpKSxGcik6KGU9SSxlIT09MHx8KGU9d2luZG93LmV2ZW50LGU9ZT09PXZvaWQgMD8xNjpuYShlLnR5cGUpKSxlKToxfWZ1bmN0aW9uIE1lKGUsdCxuLHIpe2lmKDUwPERuKXRocm93IERuPTAsUXU9bnVsbCxFcnJvcihTKDE4NSkpO25yKGUsbixyKSwoIShNJjIpfHxlIT09cSkmJihlPT09cSYmKCEoTSYyKSYmKGdsfD1uKSxHPT09NCYmZXQoZSxlZSkpLGhlKGUsciksbj09PTEmJk09PT0wJiYhKHQubW9kZSYxKSYmKHNuPVEoKSs1MDAsaGwmJnl0KCkpKX1mdW5jdGlvbiBoZShlLHQpe3ZhciBuPWUuY2FsbGJhY2tOb2RlO05mKGUsdCk7dmFyIHI9QXIoZSxlPT09cT9lZTowKTtpZihyPT09MCluIT09bnVsbCYmb28obiksZS5jYWxsYmFja05vZGU9bnVsbCxlLmNhbGxiYWNrUHJpb3JpdHk9MDtlbHNlIGlmKHQ9ciYtcixlLmNhbGxiYWNrUHJpb3JpdHkhPT10KXtpZihuIT1udWxsJiZvbyhuKSx0PT09MSllLnRhZz09PTA/UGQoZXMuYmluZChudWxsLGUpKTprYShlcy5iaW5kKG51bGwsZSkpLEVkKGZ1bmN0aW9uKCl7IShNJjYpJiZ5dCgpfSksbj1udWxsO2Vsc2V7c3dpdGNoKFpzKHIpKXtjYXNlIDE6bj1zaTticmVhaztjYXNlIDQ6bj1ZczticmVhaztjYXNlIDE2Om49VnI7YnJlYWs7Y2FzZSA1MzY4NzA5MTI6bj1YczticmVhaztkZWZhdWx0Om49VnJ9bj13YyhuLGRjLmJpbmQobnVsbCxlKSl9ZS5jYWxsYmFja1ByaW9yaXR5PXQsZS5jYWxsYmFja05vZGU9bn19ZnVuY3Rpb24gZGMoZSx0KXtpZihEcj0tMSxGcj0wLE0mNil0aHJvdyBFcnJvcihTKDMyNykpO3ZhciBuPWUuY2FsbGJhY2tOb2RlO2lmKGVuKCkmJmUuY2FsbGJhY2tOb2RlIT09bilyZXR1cm4gbnVsbDt2YXIgcj1BcihlLGU9PT1xP2VlOjApO2lmKHI9PT0wKXJldHVybiBudWxsO2lmKHImMzB8fHImZS5leHBpcmVkTGFuZXN8fHQpdD1pbChlLHIpO2Vsc2V7dD1yO3ZhciBsPU07TXw9Mjt2YXIgdT1oYygpOyhxIT09ZXx8ZWUhPT10KSYmKEJlPW51bGwsc249USgpKzUwMCxfdChlLHQpKTtkbyB0cnl7WWQoKTticmVha31jYXRjaChvKXtwYyhlLG8pfXdoaWxlKCEwKTtraSgpLHJsLmN1cnJlbnQ9dSxNPWwsSyE9PW51bGw/dD0wOihxPW51bGwsZWU9MCx0PUcpfWlmKHQhPT0wKXtpZih0PT09MiYmKGw9Z3UoZSksbCE9PTAmJihyPWwsdD1LdShlLGwpKSksdD09PTEpdGhyb3cgbj1xbixfdChlLDApLGV0KGUsciksaGUoZSxRKCkpLG47aWYodD09PTYpZXQoZSxyKTtlbHNle2lmKGw9ZS5jdXJyZW50LmFsdGVybmF0ZSwhKHImMzApJiYhUWQobCkmJih0PWlsKGUsciksdD09PTImJih1PWd1KGUpLHUhPT0wJiYocj11LHQ9S3UoZSx1KSkpLHQ9PT0xKSl0aHJvdyBuPXFuLF90KGUsMCksZXQoZSxyKSxoZShlLFEoKSksbjtzd2l0Y2goZS5maW5pc2hlZFdvcms9bCxlLmZpbmlzaGVkTGFuZXM9cix0KXtjYXNlIDA6Y2FzZSAxOnRocm93IEVycm9yKFMoMzQ1KSk7Y2FzZSAyOmt0KGUsY2UsQmUpO2JyZWFrO2Nhc2UgMzppZihldChlLHIpLChyJjEzMDAyMzQyNCk9PT1yJiYodD1GaSs1MDAtUSgpLDEwPHQpKXtpZihBcihlLDApIT09MClicmVhaztpZihsPWUuc3VzcGVuZGVkTGFuZXMsKGwmcikhPT1yKXtvZSgpLGUucGluZ2VkTGFuZXN8PWUuc3VzcGVuZGVkTGFuZXMmbDticmVha31lLnRpbWVvdXRIYW5kbGU9UHUoa3QuYmluZChudWxsLGUsY2UsQmUpLHQpO2JyZWFrfWt0KGUsY2UsQmUpO2JyZWFrO2Nhc2UgNDppZihldChlLHIpLChyJjQxOTQyNDApPT09cilicmVhaztmb3IodD1lLmV2ZW50VGltZXMsbD0tMTswPHI7KXt2YXIgaT0zMS1PZShyKTt1PTE8PGksaT10W2ldLGk+bCYmKGw9aSksciY9fnV9aWYocj1sLHI9USgpLXIscj0oMTIwPnI/MTIwOjQ4MD5yPzQ4MDoxMDgwPnI/MTA4MDoxOTIwPnI/MTkyMDozZTM+cj8zZTM6NDMyMD5yPzQzMjA6MTk2MCpIZChyLzE5NjApKS1yLDEwPHIpe2UudGltZW91dEhhbmRsZT1QdShrdC5iaW5kKG51bGwsZSxjZSxCZSkscik7YnJlYWt9a3QoZSxjZSxCZSk7YnJlYWs7Y2FzZSA1Omt0KGUsY2UsQmUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoUygzMjkpKX19fXJldHVybiBoZShlLFEoKSksZS5jYWxsYmFja05vZGU9PT1uP2RjLmJpbmQobnVsbCxlKTpudWxsfWZ1bmN0aW9uIEt1KGUsdCl7dmFyIG49SW47cmV0dXJuIGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCYmKF90KGUsdCkuZmxhZ3N8PTI1NiksZT1pbChlLHQpLGUhPT0yJiYodD1jZSxjZT1uLHQhPT1udWxsJiZZdSh0KSksZX1mdW5jdGlvbiBZdShlKXtjZT09PW51bGw/Y2U9ZTpjZS5wdXNoLmFwcGx5KGNlLGUpfWZ1bmN0aW9uIFFkKGUpe2Zvcih2YXIgdD1lOzspe2lmKHQuZmxhZ3MmMTYzODQpe3ZhciBuPXQudXBkYXRlUXVldWU7aWYobiE9PW51bGwmJihuPW4uc3RvcmVzLG4hPT1udWxsKSlmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGw9bltyXSx1PWwuZ2V0U25hcHNob3Q7bD1sLnZhbHVlO3RyeXtpZighSWUodSgpLGwpKXJldHVybiExfWNhdGNoe3JldHVybiExfX19aWYobj10LmNoaWxkLHQuc3VidHJlZUZsYWdzJjE2Mzg0JiZuIT09bnVsbCluLnJldHVybj10LHQ9bjtlbHNle2lmKHQ9PT1lKWJyZWFrO2Zvcig7dC5zaWJsaW5nPT09bnVsbDspe2lmKHQucmV0dXJuPT09bnVsbHx8dC5yZXR1cm49PT1lKXJldHVybiEwO3Q9dC5yZXR1cm59dC5zaWJsaW5nLnJldHVybj10LnJldHVybix0PXQuc2libGluZ319cmV0dXJuITB9ZnVuY3Rpb24gZXQoZSx0KXtmb3IodCY9fkRpLHQmPX5nbCxlLnN1c3BlbmRlZExhbmVzfD10LGUucGluZ2VkTGFuZXMmPX50LGU9ZS5leHBpcmF0aW9uVGltZXM7MDx0Oyl7dmFyIG49MzEtT2UodCkscj0xPDxuO2Vbbl09LTEsdCY9fnJ9fWZ1bmN0aW9uIGVzKGUpe2lmKE0mNil0aHJvdyBFcnJvcihTKDMyNykpO2VuKCk7dmFyIHQ9QXIoZSwwKTtpZighKHQmMSkpcmV0dXJuIGhlKGUsUSgpKSxudWxsO3ZhciBuPWlsKGUsdCk7aWYoZS50YWchPT0wJiZuPT09Mil7dmFyIHI9Z3UoZSk7ciE9PTAmJih0PXIsbj1LdShlLHIpKX1pZihuPT09MSl0aHJvdyBuPXFuLF90KGUsMCksZXQoZSx0KSxoZShlLFEoKSksbjtpZihuPT09Nil0aHJvdyBFcnJvcihTKDM0NSkpO3JldHVybiBlLmZpbmlzaGVkV29yaz1lLmN1cnJlbnQuYWx0ZXJuYXRlLGUuZmluaXNoZWRMYW5lcz10LGt0KGUsY2UsQmUpLGhlKGUsUSgpKSxudWxsfWZ1bmN0aW9uIGppKGUsdCl7dmFyIG49TTtNfD0xO3RyeXtyZXR1cm4gZSh0KX1maW5hbGx5e009bixNPT09MCYmKHNuPVEoKSs1MDAsaGwmJnl0KCkpfX1mdW5jdGlvbiBSdChlKXtudCE9PW51bGwmJm50LnRhZz09PTAmJiEoTSY2KSYmZW4oKTt2YXIgdD1NO018PTE7dmFyIG49eGUudHJhbnNpdGlvbixyPUk7dHJ5e2lmKHhlLnRyYW5zaXRpb249bnVsbCxJPTEsZSlyZXR1cm4gZSgpfWZpbmFsbHl7ST1yLHhlLnRyYW5zaXRpb249bixNPXQsIShNJjYpJiZ5dCgpfX1mdW5jdGlvbiBVaSgpe21lPVh0LmN1cnJlbnQsaihYdCl9ZnVuY3Rpb24gX3QoZSx0KXtlLmZpbmlzaGVkV29yaz1udWxsLGUuZmluaXNoZWRMYW5lcz0wO3ZhciBuPWUudGltZW91dEhhbmRsZTtpZihuIT09LTEmJihlLnRpbWVvdXRIYW5kbGU9LTEsa2QobikpLEshPT1udWxsKWZvcihuPUsucmV0dXJuO24hPT1udWxsOyl7dmFyIHI9bjtzd2l0Y2goZ2kociksci50YWcpe2Nhc2UgMTpyPXIudHlwZS5jaGlsZENvbnRleHRUeXBlcyxyIT1udWxsJiZZcigpO2JyZWFrO2Nhc2UgMzp1bigpLGooZGUpLGoodWUpLE5pKCk7YnJlYWs7Y2FzZSA1OlBpKHIpO2JyZWFrO2Nhc2UgNDp1bigpO2JyZWFrO2Nhc2UgMTM6aigkKTticmVhaztjYXNlIDE5OmooJCk7YnJlYWs7Y2FzZSAxMDpFaShyLnR5cGUuX2NvbnRleHQpO2JyZWFrO2Nhc2UgMjI6Y2FzZSAyMzpVaSgpfW49bi5yZXR1cm59aWYocT1lLEs9ZT1mdChlLmN1cnJlbnQsbnVsbCksZWU9bWU9dCxHPTAscW49bnVsbCxEaT1nbD1UdD0wLGNlPUluPW51bGwsQ3QhPT1udWxsKXtmb3IodD0wO3Q8Q3QubGVuZ3RoO3QrKylpZihuPUN0W3RdLHI9bi5pbnRlcmxlYXZlZCxyIT09bnVsbCl7bi5pbnRlcmxlYXZlZD1udWxsO3ZhciBsPXIubmV4dCx1PW4ucGVuZGluZztpZih1IT09bnVsbCl7dmFyIGk9dS5uZXh0O3UubmV4dD1sLHIubmV4dD1pfW4ucGVuZGluZz1yfUN0PW51bGx9cmV0dXJuIGV9ZnVuY3Rpb24gcGMoZSx0KXtkb3t2YXIgbj1LO3RyeXtpZihraSgpLE9yLmN1cnJlbnQ9bmwsdGwpe2Zvcih2YXIgcj1CLm1lbW9pemVkU3RhdGU7ciE9PW51bGw7KXt2YXIgbD1yLnF1ZXVlO2whPT1udWxsJiYobC5wZW5kaW5nPW51bGwpLHI9ci5uZXh0fXRsPSExfWlmKEx0PTAsSj1YPUI9bnVsbCxPbj0hMSxHbj0wLElpLmN1cnJlbnQ9bnVsbCxuPT09bnVsbHx8bi5yZXR1cm49PT1udWxsKXtHPTEscW49dCxLPW51bGw7YnJlYWt9ZTp7dmFyIHU9ZSxpPW4ucmV0dXJuLG89bixzPXQ7aWYodD1lZSxvLmZsYWdzfD0zMjc2OCxzIT09bnVsbCYmdHlwZW9mIHM9PSJvYmplY3QiJiZ0eXBlb2Ygcy50aGVuPT0iZnVuY3Rpb24iKXt2YXIgYT1zLGg9byxwPWgudGFnO2lmKCEoaC5tb2RlJjEpJiYocD09PTB8fHA9PT0xMXx8cD09PTE1KSl7dmFyIG09aC5hbHRlcm5hdGU7bT8oaC51cGRhdGVRdWV1ZT1tLnVwZGF0ZVF1ZXVlLGgubWVtb2l6ZWRTdGF0ZT1tLm1lbW9pemVkU3RhdGUsaC5sYW5lcz1tLmxhbmVzKTooaC51cGRhdGVRdWV1ZT1udWxsLGgubWVtb2l6ZWRTdGF0ZT1udWxsKX12YXIgeT1WbyhpKTtpZih5IT09bnVsbCl7eS5mbGFncyY9LTI1NyxBbyh5LGksbyx1LHQpLHkubW9kZSYxJiZCbyh1LGEsdCksdD15LHM9YTt2YXIgZz10LnVwZGF0ZVF1ZXVlO2lmKGc9PT1udWxsKXt2YXIgdz1uZXcgU2V0O3cuYWRkKHMpLHQudXBkYXRlUXVldWU9d31lbHNlIGcuYWRkKHMpO2JyZWFrIGV9ZWxzZXtpZighKHQmMSkpe0JvKHUsYSx0KSwkaSgpO2JyZWFrIGV9cz1FcnJvcihTKDQyNikpfX1lbHNlIGlmKFUmJm8ubW9kZSYxKXt2YXIgRT1WbyhpKTtpZihFIT09bnVsbCl7IShFLmZsYWdzJjY1NTM2KSYmKEUuZmxhZ3N8PTI1NiksQW8oRSxpLG8sdSx0KSx3aShvbihzLG8pKTticmVhayBlfX11PXM9b24ocyxvKSxHIT09NCYmKEc9MiksSW49PT1udWxsP0luPVt1XTpJbi5wdXNoKHUpLHU9aTtkb3tzd2l0Y2godS50YWcpe2Nhc2UgMzp1LmZsYWdzfD02NTUzNix0Jj0tdCx1LmxhbmVzfD10O3ZhciBmPVphKHUscyx0KTtJbyh1LGYpO2JyZWFrIGU7Y2FzZSAxOm89czt2YXIgYz11LnR5cGUsZD11LnN0YXRlTm9kZTtpZighKHUuZmxhZ3MmMTI4KSYmKHR5cGVvZiBjLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj09ImZ1bmN0aW9uInx8ZCE9PW51bGwmJnR5cGVvZiBkLmNvbXBvbmVudERpZENhdGNoPT0iZnVuY3Rpb24iJiYoYXQ9PT1udWxsfHwhYXQuaGFzKGQpKSkpe3UuZmxhZ3N8PTY1NTM2LHQmPS10LHUubGFuZXN8PXQ7dmFyIHY9SmEodSxvLHQpO0lvKHUsdik7YnJlYWsgZX19dT11LnJldHVybn13aGlsZSh1IT09bnVsbCl9dmMobil9Y2F0Y2goayl7dD1rLEs9PT1uJiZuIT09bnVsbCYmKEs9bj1uLnJldHVybik7Y29udGludWV9YnJlYWt9d2hpbGUoITApfWZ1bmN0aW9uIGhjKCl7dmFyIGU9cmwuY3VycmVudDtyZXR1cm4gcmwuY3VycmVudD1ubCxlPT09bnVsbD9ubDplfWZ1bmN0aW9uICRpKCl7KEc9PT0wfHxHPT09M3x8Rz09PTIpJiYoRz00KSxxPT09bnVsbHx8IShUdCYyNjg0MzU0NTUpJiYhKGdsJjI2ODQzNTQ1NSl8fGV0KHEsZWUpfWZ1bmN0aW9uIGlsKGUsdCl7dmFyIG49TTtNfD0yO3ZhciByPWhjKCk7KHEhPT1lfHxlZSE9PXQpJiYoQmU9bnVsbCxfdChlLHQpKTtkbyB0cnl7S2QoKTticmVha31jYXRjaChsKXtwYyhlLGwpfXdoaWxlKCEwKTtpZihraSgpLE09bixybC5jdXJyZW50PXIsSyE9PW51bGwpdGhyb3cgRXJyb3IoUygyNjEpKTtyZXR1cm4gcT1udWxsLGVlPTAsR31mdW5jdGlvbiBLZCgpe2Zvcig7SyE9PW51bGw7KW1jKEspfWZ1bmN0aW9uIFlkKCl7Zm9yKDtLIT09bnVsbCYmIWdmKCk7KW1jKEspfWZ1bmN0aW9uIG1jKGUpe3ZhciB0PWdjKGUuYWx0ZXJuYXRlLGUsbWUpO2UubWVtb2l6ZWRQcm9wcz1lLnBlbmRpbmdQcm9wcyx0PT09bnVsbD92YyhlKTpLPXQsSWkuY3VycmVudD1udWxsfWZ1bmN0aW9uIHZjKGUpe3ZhciB0PWU7ZG97dmFyIG49dC5hbHRlcm5hdGU7aWYoZT10LnJldHVybix0LmZsYWdzJjMyNzY4KXtpZihuPUJkKG4sdCksbiE9PW51bGwpe24uZmxhZ3MmPTMyNzY3LEs9bjtyZXR1cm59aWYoZSE9PW51bGwpZS5mbGFnc3w9MzI3NjgsZS5zdWJ0cmVlRmxhZ3M9MCxlLmRlbGV0aW9ucz1udWxsO2Vsc2V7Rz02LEs9bnVsbDtyZXR1cm59fWVsc2UgaWYobj0kZChuLHQsbWUpLG4hPT1udWxsKXtLPW47cmV0dXJufWlmKHQ9dC5zaWJsaW5nLHQhPT1udWxsKXtLPXQ7cmV0dXJufUs9dD1lfXdoaWxlKHQhPT1udWxsKTtHPT09MCYmKEc9NSl9ZnVuY3Rpb24ga3QoZSx0LG4pe3ZhciByPUksbD14ZS50cmFuc2l0aW9uO3RyeXt4ZS50cmFuc2l0aW9uPW51bGwsST0xLFhkKGUsdCxuLHIpfWZpbmFsbHl7eGUudHJhbnNpdGlvbj1sLEk9cn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBYZChlLHQsbixyKXtkbyBlbigpO3doaWxlKG50IT09bnVsbCk7aWYoTSY2KXRocm93IEVycm9yKFMoMzI3KSk7bj1lLmZpbmlzaGVkV29yazt2YXIgbD1lLmZpbmlzaGVkTGFuZXM7aWYobj09PW51bGwpcmV0dXJuIG51bGw7aWYoZS5maW5pc2hlZFdvcms9bnVsbCxlLmZpbmlzaGVkTGFuZXM9MCxuPT09ZS5jdXJyZW50KXRocm93IEVycm9yKFMoMTc3KSk7ZS5jYWxsYmFja05vZGU9bnVsbCxlLmNhbGxiYWNrUHJpb3JpdHk9MDt2YXIgdT1uLmxhbmVzfG4uY2hpbGRMYW5lcztpZih6ZihlLHUpLGU9PT1xJiYoSz1xPW51bGwsZWU9MCksIShuLnN1YnRyZWVGbGFncyYyMDY0KSYmIShuLmZsYWdzJjIwNjQpfHx4cnx8KHhyPSEwLHdjKFZyLGZ1bmN0aW9uKCl7cmV0dXJuIGVuKCksbnVsbH0pKSx1PShuLmZsYWdzJjE1OTkwKSE9PTAsbi5zdWJ0cmVlRmxhZ3MmMTU5OTB8fHUpe3U9eGUudHJhbnNpdGlvbix4ZS50cmFuc2l0aW9uPW51bGw7dmFyIGk9STtJPTE7dmFyIG89TTtNfD00LElpLmN1cnJlbnQ9bnVsbCxBZChlLG4pLGNjKG4sZSksaGQoeHUpLFdyPSEhQ3UseHU9Q3U9bnVsbCxlLmN1cnJlbnQ9bixXZChuKSx3ZigpLE09byxJPWkseGUudHJhbnNpdGlvbj11fWVsc2UgZS5jdXJyZW50PW47aWYoeHImJih4cj0hMSxudD1lLHVsPWwpLHU9ZS5wZW5kaW5nTGFuZXMsdT09PTAmJihhdD1udWxsKSxFZihuLnN0YXRlTm9kZSksaGUoZSxRKCkpLHQhPT1udWxsKWZvcihyPWUub25SZWNvdmVyYWJsZUVycm9yLG49MDtuPHQubGVuZ3RoO24rKylsPXRbbl0scihsLnZhbHVlLHtjb21wb25lbnRTdGFjazpsLnN0YWNrLGRpZ2VzdDpsLmRpZ2VzdH0pO2lmKGxsKXRocm93IGxsPSExLGU9SHUsSHU9bnVsbCxlO3JldHVybiB1bCYxJiZlLnRhZyE9PTAmJmVuKCksdT1lLnBlbmRpbmdMYW5lcyx1JjE/ZT09PVF1P0RuKys6KERuPTAsUXU9ZSk6RG49MCx5dCgpLG51bGx9ZnVuY3Rpb24gZW4oKXtpZihudCE9PW51bGwpe3ZhciBlPVpzKHVsKSx0PXhlLnRyYW5zaXRpb24sbj1JO3RyeXtpZih4ZS50cmFuc2l0aW9uPW51bGwsST0xNj5lPzE2OmUsbnQ9PT1udWxsKXZhciByPSExO2Vsc2V7aWYoZT1udCxudD1udWxsLHVsPTAsTSY2KXRocm93IEVycm9yKFMoMzMxKSk7dmFyIGw9TTtmb3IoTXw9NCxDPWUuY3VycmVudDtDIT09bnVsbDspe3ZhciB1PUMsaT11LmNoaWxkO2lmKEMuZmxhZ3MmMTYpe3ZhciBvPXUuZGVsZXRpb25zO2lmKG8hPT1udWxsKXtmb3IodmFyIHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGE9b1tzXTtmb3IoQz1hO0MhPT1udWxsOyl7dmFyIGg9Qztzd2l0Y2goaC50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6TW4oOCxoLHUpfXZhciBwPWguY2hpbGQ7aWYocCE9PW51bGwpcC5yZXR1cm49aCxDPXA7ZWxzZSBmb3IoO0MhPT1udWxsOyl7aD1DO3ZhciBtPWguc2libGluZyx5PWgucmV0dXJuO2lmKG9jKGgpLGg9PT1hKXtDPW51bGw7YnJlYWt9aWYobSE9PW51bGwpe20ucmV0dXJuPXksQz1tO2JyZWFrfUM9eX19fXZhciBnPXUuYWx0ZXJuYXRlO2lmKGchPT1udWxsKXt2YXIgdz1nLmNoaWxkO2lmKHchPT1udWxsKXtnLmNoaWxkPW51bGw7ZG97dmFyIEU9dy5zaWJsaW5nO3cuc2libGluZz1udWxsLHc9RX13aGlsZSh3IT09bnVsbCl9fUM9dX19aWYodS5zdWJ0cmVlRmxhZ3MmMjA2NCYmaSE9PW51bGwpaS5yZXR1cm49dSxDPWk7ZWxzZSBlOmZvcig7QyE9PW51bGw7KXtpZih1PUMsdS5mbGFncyYyMDQ4KXN3aXRjaCh1LnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpNbig5LHUsdS5yZXR1cm4pfXZhciBmPXUuc2libGluZztpZihmIT09bnVsbCl7Zi5yZXR1cm49dS5yZXR1cm4sQz1mO2JyZWFrIGV9Qz11LnJldHVybn19dmFyIGM9ZS5jdXJyZW50O2ZvcihDPWM7QyE9PW51bGw7KXtpPUM7dmFyIGQ9aS5jaGlsZDtpZihpLnN1YnRyZWVGbGFncyYyMDY0JiZkIT09bnVsbClkLnJldHVybj1pLEM9ZDtlbHNlIGU6Zm9yKGk9YztDIT09bnVsbDspe2lmKG89QyxvLmZsYWdzJjIwNDgpdHJ5e3N3aXRjaChvLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTp5bCg5LG8pfX1jYXRjaChrKXtBKG8sby5yZXR1cm4sayl9aWYobz09PWkpe0M9bnVsbDticmVhayBlfXZhciB2PW8uc2libGluZztpZih2IT09bnVsbCl7di5yZXR1cm49by5yZXR1cm4sQz12O2JyZWFrIGV9Qz1vLnJldHVybn19aWYoTT1sLHl0KCksVWUmJnR5cGVvZiBVZS5vblBvc3RDb21taXRGaWJlclJvb3Q9PSJmdW5jdGlvbiIpdHJ5e1VlLm9uUG9zdENvbW1pdEZpYmVyUm9vdChhbCxlKX1jYXRjaHt9cj0hMH1yZXR1cm4gcn1maW5hbGx5e0k9bix4ZS50cmFuc2l0aW9uPXR9fXJldHVybiExfWZ1bmN0aW9uIHRzKGUsdCxuKXt0PW9uKG4sdCksdD1aYShlLHQsMSksZT1zdChlLHQsMSksdD1vZSgpLGUhPT1udWxsJiYobnIoZSwxLHQpLGhlKGUsdCkpfWZ1bmN0aW9uIEEoZSx0LG4pe2lmKGUudGFnPT09Myl0cyhlLGUsbik7ZWxzZSBmb3IoO3QhPT1udWxsOyl7aWYodC50YWc9PT0zKXt0cyh0LGUsbik7YnJlYWt9ZWxzZSBpZih0LnRhZz09PTEpe3ZhciByPXQuc3RhdGVOb2RlO2lmKHR5cGVvZiB0LnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yPT0iZnVuY3Rpb24ifHx0eXBlb2Ygci5jb21wb25lbnREaWRDYXRjaD09ImZ1bmN0aW9uIiYmKGF0PT09bnVsbHx8IWF0LmhhcyhyKSkpe2U9b24obixlKSxlPUphKHQsZSwxKSx0PXN0KHQsZSwxKSxlPW9lKCksdCE9PW51bGwmJihucih0LDEsZSksaGUodCxlKSk7YnJlYWt9fXQ9dC5yZXR1cm59fWZ1bmN0aW9uIEdkKGUsdCxuKXt2YXIgcj1lLnBpbmdDYWNoZTtyIT09bnVsbCYmci5kZWxldGUodCksdD1vZSgpLGUucGluZ2VkTGFuZXN8PWUuc3VzcGVuZGVkTGFuZXMmbixxPT09ZSYmKGVlJm4pPT09biYmKEc9PT00fHxHPT09MyYmKGVlJjEzMDAyMzQyNCk9PT1lZSYmNTAwPlEoKS1GaT9fdChlLDApOkRpfD1uKSxoZShlLHQpfWZ1bmN0aW9uIHljKGUsdCl7dD09PTAmJihlLm1vZGUmMT8odD1ocixocjw8PTEsIShociYxMzAwMjM0MjQpJiYoaHI9NDE5NDMwNCkpOnQ9MSk7dmFyIG49b2UoKTtlPVllKGUsdCksZSE9PW51bGwmJihucihlLHQsbiksaGUoZSxuKSl9ZnVuY3Rpb24gWmQoZSl7dmFyIHQ9ZS5tZW1vaXplZFN0YXRlLG49MDt0IT09bnVsbCYmKG49dC5yZXRyeUxhbmUpLHljKGUsbil9ZnVuY3Rpb24gSmQoZSx0KXt2YXIgbj0wO3N3aXRjaChlLnRhZyl7Y2FzZSAxMzp2YXIgcj1lLnN0YXRlTm9kZSxsPWUubWVtb2l6ZWRTdGF0ZTtsIT09bnVsbCYmKG49bC5yZXRyeUxhbmUpO2JyZWFrO2Nhc2UgMTk6cj1lLnN0YXRlTm9kZTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKFMoMzE0KSl9ciE9PW51bGwmJnIuZGVsZXRlKHQpLHljKGUsbil9dmFyIGdjO2djPWZ1bmN0aW9uKGUsdCxuKXtpZihlIT09bnVsbClpZihlLm1lbW9pemVkUHJvcHMhPT10LnBlbmRpbmdQcm9wc3x8ZGUuY3VycmVudClmZT0hMDtlbHNle2lmKCEoZS5sYW5lcyZuKSYmISh0LmZsYWdzJjEyOCkpcmV0dXJuIGZlPSExLFVkKGUsdCxuKTtmZT0hIShlLmZsYWdzJjEzMTA3Mil9ZWxzZSBmZT0hMSxVJiZ0LmZsYWdzJjEwNDg1NzYmJkVhKHQsWnIsdC5pbmRleCk7c3dpdGNoKHQubGFuZXM9MCx0LnRhZyl7Y2FzZSAyOnZhciByPXQudHlwZTtJcihlLHQpLGU9dC5wZW5kaW5nUHJvcHM7dmFyIGw9bm4odCx1ZS5jdXJyZW50KTtidCh0LG4pLGw9TGkobnVsbCx0LHIsZSxsLG4pO3ZhciB1PVRpKCk7cmV0dXJuIHQuZmxhZ3N8PTEsdHlwZW9mIGw9PSJvYmplY3QiJiZsIT09bnVsbCYmdHlwZW9mIGwucmVuZGVyPT0iZnVuY3Rpb24iJiZsLiQkdHlwZW9mPT09dm9pZCAwPyh0LnRhZz0xLHQubWVtb2l6ZWRTdGF0ZT1udWxsLHQudXBkYXRlUXVldWU9bnVsbCxwZShyKT8odT0hMCxYcih0KSk6dT0hMSx0Lm1lbW9pemVkU3RhdGU9bC5zdGF0ZSE9PW51bGwmJmwuc3RhdGUhPT12b2lkIDA/bC5zdGF0ZTpudWxsLHhpKHQpLGwudXBkYXRlcj12bCx0LnN0YXRlTm9kZT1sLGwuX3JlYWN0SW50ZXJuYWxzPXQsTXUodCxyLGUsbiksdD1GdShudWxsLHQsciwhMCx1LG4pKToodC50YWc9MCxVJiZ1JiZ5aSh0KSxpZShudWxsLHQsbCxuKSx0PXQuY2hpbGQpLHQ7Y2FzZSAxNjpyPXQuZWxlbWVudFR5cGU7ZTp7c3dpdGNoKElyKGUsdCksZT10LnBlbmRpbmdQcm9wcyxsPXIuX2luaXQscj1sKHIuX3BheWxvYWQpLHQudHlwZT1yLGw9dC50YWc9YmQociksZT1MZShyLGUpLGwpe2Nhc2UgMDp0PUR1KG51bGwsdCxyLGUsbik7YnJlYWsgZTtjYXNlIDE6dD1RbyhudWxsLHQscixlLG4pO2JyZWFrIGU7Y2FzZSAxMTp0PVdvKG51bGwsdCxyLGUsbik7YnJlYWsgZTtjYXNlIDE0OnQ9SG8obnVsbCx0LHIsTGUoci50eXBlLGUpLG4pO2JyZWFrIGV9dGhyb3cgRXJyb3IoUygzMDYsciwiIikpfXJldHVybiB0O2Nhc2UgMDpyZXR1cm4gcj10LnR5cGUsbD10LnBlbmRpbmdQcm9wcyxsPXQuZWxlbWVudFR5cGU9PT1yP2w6TGUocixsKSxEdShlLHQscixsLG4pO2Nhc2UgMTpyZXR1cm4gcj10LnR5cGUsbD10LnBlbmRpbmdQcm9wcyxsPXQuZWxlbWVudFR5cGU9PT1yP2w6TGUocixsKSxRbyhlLHQscixsLG4pO2Nhc2UgMzplOntpZih0Yyh0KSxlPT09bnVsbCl0aHJvdyBFcnJvcihTKDM4NykpO3I9dC5wZW5kaW5nUHJvcHMsdT10Lm1lbW9pemVkU3RhdGUsbD11LmVsZW1lbnQsemEoZSx0KSxicih0LHIsbnVsbCxuKTt2YXIgaT10Lm1lbW9pemVkU3RhdGU7aWYocj1pLmVsZW1lbnQsdS5pc0RlaHlkcmF0ZWQpaWYodT17ZWxlbWVudDpyLGlzRGVoeWRyYXRlZDohMSxjYWNoZTppLmNhY2hlLHBlbmRpbmdTdXNwZW5zZUJvdW5kYXJpZXM6aS5wZW5kaW5nU3VzcGVuc2VCb3VuZGFyaWVzLHRyYW5zaXRpb25zOmkudHJhbnNpdGlvbnN9LHQudXBkYXRlUXVldWUuYmFzZVN0YXRlPXUsdC5tZW1vaXplZFN0YXRlPXUsdC5mbGFncyYyNTYpe2w9b24oRXJyb3IoUyg0MjMpKSx0KSx0PUtvKGUsdCxyLG4sbCk7YnJlYWsgZX1lbHNlIGlmKHIhPT1sKXtsPW9uKEVycm9yKFMoNDI0KSksdCksdD1LbyhlLHQscixuLGwpO2JyZWFrIGV9ZWxzZSBmb3IodmU9b3QodC5zdGF0ZU5vZGUuY29udGFpbmVySW5mby5maXJzdENoaWxkKSx5ZT10LFU9ITAsUmU9bnVsbCxuPVBhKHQsbnVsbCxyLG4pLHQuY2hpbGQ9bjtuOyluLmZsYWdzPW4uZmxhZ3MmLTN8NDA5NixuPW4uc2libGluZztlbHNle2lmKHJuKCkscj09PWwpe3Q9WGUoZSx0LG4pO2JyZWFrIGV9aWUoZSx0LHIsbil9dD10LmNoaWxkfXJldHVybiB0O2Nhc2UgNTpyZXR1cm4gTGEodCksZT09PW51bGwmJlR1KHQpLHI9dC50eXBlLGw9dC5wZW5kaW5nUHJvcHMsdT1lIT09bnVsbD9lLm1lbW9pemVkUHJvcHM6bnVsbCxpPWwuY2hpbGRyZW4sX3UocixsKT9pPW51bGw6dSE9PW51bGwmJl91KHIsdSkmJih0LmZsYWdzfD0zMiksZWMoZSx0KSxpZShlLHQsaSxuKSx0LmNoaWxkO2Nhc2UgNjpyZXR1cm4gZT09PW51bGwmJlR1KHQpLG51bGw7Y2FzZSAxMzpyZXR1cm4gbmMoZSx0LG4pO2Nhc2UgNDpyZXR1cm4gX2kodCx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxyPXQucGVuZGluZ1Byb3BzLGU9PT1udWxsP3QuY2hpbGQ9bG4odCxudWxsLHIsbik6aWUoZSx0LHIsbiksdC5jaGlsZDtjYXNlIDExOnJldHVybiByPXQudHlwZSxsPXQucGVuZGluZ1Byb3BzLGw9dC5lbGVtZW50VHlwZT09PXI/bDpMZShyLGwpLFdvKGUsdCxyLGwsbik7Y2FzZSA3OnJldHVybiBpZShlLHQsdC5wZW5kaW5nUHJvcHMsbiksdC5jaGlsZDtjYXNlIDg6cmV0dXJuIGllKGUsdCx0LnBlbmRpbmdQcm9wcy5jaGlsZHJlbixuKSx0LmNoaWxkO2Nhc2UgMTI6cmV0dXJuIGllKGUsdCx0LnBlbmRpbmdQcm9wcy5jaGlsZHJlbixuKSx0LmNoaWxkO2Nhc2UgMTA6ZTp7aWYocj10LnR5cGUuX2NvbnRleHQsbD10LnBlbmRpbmdQcm9wcyx1PXQubWVtb2l6ZWRQcm9wcyxpPWwudmFsdWUsRChKcixyLl9jdXJyZW50VmFsdWUpLHIuX2N1cnJlbnRWYWx1ZT1pLHUhPT1udWxsKWlmKEllKHUudmFsdWUsaSkpe2lmKHUuY2hpbGRyZW49PT1sLmNoaWxkcmVuJiYhZGUuY3VycmVudCl7dD1YZShlLHQsbik7YnJlYWsgZX19ZWxzZSBmb3IodT10LmNoaWxkLHUhPT1udWxsJiYodS5yZXR1cm49dCk7dSE9PW51bGw7KXt2YXIgbz11LmRlcGVuZGVuY2llcztpZihvIT09bnVsbCl7aT11LmNoaWxkO2Zvcih2YXIgcz1vLmZpcnN0Q29udGV4dDtzIT09bnVsbDspe2lmKHMuY29udGV4dD09PXIpe2lmKHUudGFnPT09MSl7cz1IZSgtMSxuJi1uKSxzLnRhZz0yO3ZhciBhPXUudXBkYXRlUXVldWU7aWYoYSE9PW51bGwpe2E9YS5zaGFyZWQ7dmFyIGg9YS5wZW5kaW5nO2g9PT1udWxsP3MubmV4dD1zOihzLm5leHQ9aC5uZXh0LGgubmV4dD1zKSxhLnBlbmRpbmc9c319dS5sYW5lc3w9bixzPXUuYWx0ZXJuYXRlLHMhPT1udWxsJiYocy5sYW5lc3w9biksUnUodS5yZXR1cm4sbix0KSxvLmxhbmVzfD1uO2JyZWFrfXM9cy5uZXh0fX1lbHNlIGlmKHUudGFnPT09MTApaT11LnR5cGU9PT10LnR5cGU/bnVsbDp1LmNoaWxkO2Vsc2UgaWYodS50YWc9PT0xOCl7aWYoaT11LnJldHVybixpPT09bnVsbCl0aHJvdyBFcnJvcihTKDM0MSkpO2kubGFuZXN8PW4sbz1pLmFsdGVybmF0ZSxvIT09bnVsbCYmKG8ubGFuZXN8PW4pLFJ1KGksbix0KSxpPXUuc2libGluZ31lbHNlIGk9dS5jaGlsZDtpZihpIT09bnVsbClpLnJldHVybj11O2Vsc2UgZm9yKGk9dTtpIT09bnVsbDspe2lmKGk9PT10KXtpPW51bGw7YnJlYWt9aWYodT1pLnNpYmxpbmcsdSE9PW51bGwpe3UucmV0dXJuPWkucmV0dXJuLGk9dTticmVha31pPWkucmV0dXJufXU9aX1pZShlLHQsbC5jaGlsZHJlbixuKSx0PXQuY2hpbGR9cmV0dXJuIHQ7Y2FzZSA5OnJldHVybiBsPXQudHlwZSxyPXQucGVuZGluZ1Byb3BzLmNoaWxkcmVuLGJ0KHQsbiksbD1fZShsKSxyPXIobCksdC5mbGFnc3w9MSxpZShlLHQscixuKSx0LmNoaWxkO2Nhc2UgMTQ6cmV0dXJuIHI9dC50eXBlLGw9TGUocix0LnBlbmRpbmdQcm9wcyksbD1MZShyLnR5cGUsbCksSG8oZSx0LHIsbCxuKTtjYXNlIDE1OnJldHVybiBxYShlLHQsdC50eXBlLHQucGVuZGluZ1Byb3BzLG4pO2Nhc2UgMTc6cmV0dXJuIHI9dC50eXBlLGw9dC5wZW5kaW5nUHJvcHMsbD10LmVsZW1lbnRUeXBlPT09cj9sOkxlKHIsbCksSXIoZSx0KSx0LnRhZz0xLHBlKHIpPyhlPSEwLFhyKHQpKTplPSExLGJ0KHQsbiksR2EodCxyLGwpLE11KHQscixsLG4pLEZ1KG51bGwsdCxyLCEwLGUsbik7Y2FzZSAxOTpyZXR1cm4gcmMoZSx0LG4pO2Nhc2UgMjI6cmV0dXJuIGJhKGUsdCxuKX10aHJvdyBFcnJvcihTKDE1Nix0LnRhZykpfTtmdW5jdGlvbiB3YyhlLHQpe3JldHVybiBLcyhlLHQpfWZ1bmN0aW9uIHFkKGUsdCxuLHIpe3RoaXMudGFnPWUsdGhpcy5rZXk9bix0aGlzLnNpYmxpbmc9dGhpcy5jaGlsZD10aGlzLnJldHVybj10aGlzLnN0YXRlTm9kZT10aGlzLnR5cGU9dGhpcy5lbGVtZW50VHlwZT1udWxsLHRoaXMuaW5kZXg9MCx0aGlzLnJlZj1udWxsLHRoaXMucGVuZGluZ1Byb3BzPXQsdGhpcy5kZXBlbmRlbmNpZXM9dGhpcy5tZW1vaXplZFN0YXRlPXRoaXMudXBkYXRlUXVldWU9dGhpcy5tZW1vaXplZFByb3BzPW51bGwsdGhpcy5tb2RlPXIsdGhpcy5zdWJ0cmVlRmxhZ3M9dGhpcy5mbGFncz0wLHRoaXMuZGVsZXRpb25zPW51bGwsdGhpcy5jaGlsZExhbmVzPXRoaXMubGFuZXM9MCx0aGlzLmFsdGVybmF0ZT1udWxsfWZ1bmN0aW9uIENlKGUsdCxuLHIpe3JldHVybiBuZXcgcWQoZSx0LG4scil9ZnVuY3Rpb24gQmkoZSl7cmV0dXJuIGU9ZS5wcm90b3R5cGUsISghZXx8IWUuaXNSZWFjdENvbXBvbmVudCl9ZnVuY3Rpb24gYmQoZSl7aWYodHlwZW9mIGU9PSJmdW5jdGlvbiIpcmV0dXJuIEJpKGUpPzE6MDtpZihlIT1udWxsKXtpZihlPWUuJCR0eXBlb2YsZT09PXVpKXJldHVybiAxMTtpZihlPT09aWkpcmV0dXJuIDE0fXJldHVybiAyfWZ1bmN0aW9uIGZ0KGUsdCl7dmFyIG49ZS5hbHRlcm5hdGU7cmV0dXJuIG49PT1udWxsPyhuPUNlKGUudGFnLHQsZS5rZXksZS5tb2RlKSxuLmVsZW1lbnRUeXBlPWUuZWxlbWVudFR5cGUsbi50eXBlPWUudHlwZSxuLnN0YXRlTm9kZT1lLnN0YXRlTm9kZSxuLmFsdGVybmF0ZT1lLGUuYWx0ZXJuYXRlPW4pOihuLnBlbmRpbmdQcm9wcz10LG4udHlwZT1lLnR5cGUsbi5mbGFncz0wLG4uc3VidHJlZUZsYWdzPTAsbi5kZWxldGlvbnM9bnVsbCksbi5mbGFncz1lLmZsYWdzJjE0NjgwMDY0LG4uY2hpbGRMYW5lcz1lLmNoaWxkTGFuZXMsbi5sYW5lcz1lLmxhbmVzLG4uY2hpbGQ9ZS5jaGlsZCxuLm1lbW9pemVkUHJvcHM9ZS5tZW1vaXplZFByb3BzLG4ubWVtb2l6ZWRTdGF0ZT1lLm1lbW9pemVkU3RhdGUsbi51cGRhdGVRdWV1ZT1lLnVwZGF0ZVF1ZXVlLHQ9ZS5kZXBlbmRlbmNpZXMsbi5kZXBlbmRlbmNpZXM9dD09PW51bGw/bnVsbDp7bGFuZXM6dC5sYW5lcyxmaXJzdENvbnRleHQ6dC5maXJzdENvbnRleHR9LG4uc2libGluZz1lLnNpYmxpbmcsbi5pbmRleD1lLmluZGV4LG4ucmVmPWUucmVmLG59ZnVuY3Rpb24ganIoZSx0LG4scixsLHUpe3ZhciBpPTI7aWYocj1lLHR5cGVvZiBlPT0iZnVuY3Rpb24iKUJpKGUpJiYoaT0xKTtlbHNlIGlmKHR5cGVvZiBlPT0ic3RyaW5nIilpPTU7ZWxzZSBlOnN3aXRjaChlKXtjYXNlIFV0OnJldHVybiBQdChuLmNoaWxkcmVuLGwsdSx0KTtjYXNlIGxpOmk9OCxsfD04O2JyZWFrO2Nhc2UgcnU6cmV0dXJuIGU9Q2UoMTIsbix0LGx8MiksZS5lbGVtZW50VHlwZT1ydSxlLmxhbmVzPXUsZTtjYXNlIGx1OnJldHVybiBlPUNlKDEzLG4sdCxsKSxlLmVsZW1lbnRUeXBlPWx1LGUubGFuZXM9dSxlO2Nhc2UgdXU6cmV0dXJuIGU9Q2UoMTksbix0LGwpLGUuZWxlbWVudFR5cGU9dXUsZS5sYW5lcz11LGU7Y2FzZSBMczpyZXR1cm4gd2wobixsLHUsdCk7ZGVmYXVsdDppZih0eXBlb2YgZT09Im9iamVjdCImJmUhPT1udWxsKXN3aXRjaChlLiQkdHlwZW9mKXtjYXNlIE5zOmk9MTA7YnJlYWsgZTtjYXNlIHpzOmk9OTticmVhayBlO2Nhc2UgdWk6aT0xMTticmVhayBlO2Nhc2UgaWk6aT0xNDticmVhayBlO2Nhc2UgSmU6aT0xNixyPW51bGw7YnJlYWsgZX10aHJvdyBFcnJvcihTKDEzMCxlPT1udWxsP2U6dHlwZW9mIGUsIiIpKX1yZXR1cm4gdD1DZShpLG4sdCxsKSx0LmVsZW1lbnRUeXBlPWUsdC50eXBlPXIsdC5sYW5lcz11LHR9ZnVuY3Rpb24gUHQoZSx0LG4scil7cmV0dXJuIGU9Q2UoNyxlLHIsdCksZS5sYW5lcz1uLGV9ZnVuY3Rpb24gd2woZSx0LG4scil7cmV0dXJuIGU9Q2UoMjIsZSxyLHQpLGUuZWxlbWVudFR5cGU9THMsZS5sYW5lcz1uLGUuc3RhdGVOb2RlPXtpc0hpZGRlbjohMX0sZX1mdW5jdGlvbiBibChlLHQsbil7cmV0dXJuIGU9Q2UoNixlLG51bGwsdCksZS5sYW5lcz1uLGV9ZnVuY3Rpb24gZXUoZSx0LG4pe3JldHVybiB0PUNlKDQsZS5jaGlsZHJlbiE9PW51bGw/ZS5jaGlsZHJlbjpbXSxlLmtleSx0KSx0LmxhbmVzPW4sdC5zdGF0ZU5vZGU9e2NvbnRhaW5lckluZm86ZS5jb250YWluZXJJbmZvLHBlbmRpbmdDaGlsZHJlbjpudWxsLGltcGxlbWVudGF0aW9uOmUuaW1wbGVtZW50YXRpb259LHR9ZnVuY3Rpb24gZXAoZSx0LG4scixsKXt0aGlzLnRhZz10LHRoaXMuY29udGFpbmVySW5mbz1lLHRoaXMuZmluaXNoZWRXb3JrPXRoaXMucGluZ0NhY2hlPXRoaXMuY3VycmVudD10aGlzLnBlbmRpbmdDaGlsZHJlbj1udWxsLHRoaXMudGltZW91dEhhbmRsZT0tMSx0aGlzLmNhbGxiYWNrTm9kZT10aGlzLnBlbmRpbmdDb250ZXh0PXRoaXMuY29udGV4dD1udWxsLHRoaXMuY2FsbGJhY2tQcmlvcml0eT0wLHRoaXMuZXZlbnRUaW1lcz1JbCgwKSx0aGlzLmV4cGlyYXRpb25UaW1lcz1JbCgtMSksdGhpcy5lbnRhbmdsZWRMYW5lcz10aGlzLmZpbmlzaGVkTGFuZXM9dGhpcy5tdXRhYmxlUmVhZExhbmVzPXRoaXMuZXhwaXJlZExhbmVzPXRoaXMucGluZ2VkTGFuZXM9dGhpcy5zdXNwZW5kZWRMYW5lcz10aGlzLnBlbmRpbmdMYW5lcz0wLHRoaXMuZW50YW5nbGVtZW50cz1JbCgwKSx0aGlzLmlkZW50aWZpZXJQcmVmaXg9cix0aGlzLm9uUmVjb3ZlcmFibGVFcnJvcj1sLHRoaXMubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YT1udWxsfWZ1bmN0aW9uIFZpKGUsdCxuLHIsbCx1LGksbyxzKXtyZXR1cm4gZT1uZXcgZXAoZSx0LG4sbyxzKSx0PT09MT8odD0xLHU9PT0hMCYmKHR8PTgpKTp0PTAsdT1DZSgzLG51bGwsbnVsbCx0KSxlLmN1cnJlbnQ9dSx1LnN0YXRlTm9kZT1lLHUubWVtb2l6ZWRTdGF0ZT17ZWxlbWVudDpyLGlzRGVoeWRyYXRlZDpuLGNhY2hlOm51bGwsdHJhbnNpdGlvbnM6bnVsbCxwZW5kaW5nU3VzcGVuc2VCb3VuZGFyaWVzOm51bGx9LHhpKHUpLGV9ZnVuY3Rpb24gdHAoZSx0LG4pe3ZhciByPTM8YXJndW1lbnRzLmxlbmd0aCYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTpudWxsO3JldHVybnskJHR5cGVvZjpqdCxrZXk6cj09bnVsbD9udWxsOiIiK3IsY2hpbGRyZW46ZSxjb250YWluZXJJbmZvOnQsaW1wbGVtZW50YXRpb246bn19ZnVuY3Rpb24gU2MoZSl7aWYoIWUpcmV0dXJuIGh0O2U9ZS5fcmVhY3RJbnRlcm5hbHM7ZTp7aWYoTXQoZSkhPT1lfHxlLnRhZyE9PTEpdGhyb3cgRXJyb3IoUygxNzApKTt2YXIgdD1lO2Rve3N3aXRjaCh0LnRhZyl7Y2FzZSAzOnQ9dC5zdGF0ZU5vZGUuY29udGV4dDticmVhayBlO2Nhc2UgMTppZihwZSh0LnR5cGUpKXt0PXQuc3RhdGVOb2RlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0O2JyZWFrIGV9fXQ9dC5yZXR1cm59d2hpbGUodCE9PW51bGwpO3Rocm93IEVycm9yKFMoMTcxKSl9aWYoZS50YWc9PT0xKXt2YXIgbj1lLnR5cGU7aWYocGUobikpcmV0dXJuIFNhKGUsbix0KX1yZXR1cm4gdH1mdW5jdGlvbiBrYyhlLHQsbixyLGwsdSxpLG8scyl7cmV0dXJuIGU9VmkobixyLCEwLGUsbCx1LGksbyxzKSxlLmNvbnRleHQ9U2MobnVsbCksbj1lLmN1cnJlbnQscj1vZSgpLGw9Y3QobiksdT1IZShyLGwpLHUuY2FsbGJhY2s9dD8/bnVsbCxzdChuLHUsbCksZS5jdXJyZW50LmxhbmVzPWwsbnIoZSxsLHIpLGhlKGUsciksZX1mdW5jdGlvbiBTbChlLHQsbixyKXt2YXIgbD10LmN1cnJlbnQsdT1vZSgpLGk9Y3QobCk7cmV0dXJuIG49U2MobiksdC5jb250ZXh0PT09bnVsbD90LmNvbnRleHQ9bjp0LnBlbmRpbmdDb250ZXh0PW4sdD1IZSh1LGkpLHQucGF5bG9hZD17ZWxlbWVudDplfSxyPXI9PT12b2lkIDA/bnVsbDpyLHIhPT1udWxsJiYodC5jYWxsYmFjaz1yKSxlPXN0KGwsdCxpKSxlIT09bnVsbCYmKE1lKGUsbCxpLHUpLFJyKGUsbCxpKSksaX1mdW5jdGlvbiBvbChlKXtpZihlPWUuY3VycmVudCwhZS5jaGlsZClyZXR1cm4gbnVsbDtzd2l0Y2goZS5jaGlsZC50YWcpe2Nhc2UgNTpyZXR1cm4gZS5jaGlsZC5zdGF0ZU5vZGU7ZGVmYXVsdDpyZXR1cm4gZS5jaGlsZC5zdGF0ZU5vZGV9fWZ1bmN0aW9uIG5zKGUsdCl7aWYoZT1lLm1lbW9pemVkU3RhdGUsZSE9PW51bGwmJmUuZGVoeWRyYXRlZCE9PW51bGwpe3ZhciBuPWUucmV0cnlMYW5lO2UucmV0cnlMYW5lPW4hPT0wJiZuPHQ/bjp0fX1mdW5jdGlvbiBBaShlLHQpe25zKGUsdCksKGU9ZS5hbHRlcm5hdGUpJiZucyhlLHQpfWZ1bmN0aW9uIG5wKCl7cmV0dXJuIG51bGx9dmFyIEVjPXR5cGVvZiByZXBvcnRFcnJvcj09ImZ1bmN0aW9uIj9yZXBvcnRFcnJvcjpmdW5jdGlvbihlKXtjb25zb2xlLmVycm9yKGUpfTtmdW5jdGlvbiBXaShlKXt0aGlzLl9pbnRlcm5hbFJvb3Q9ZX1rbC5wcm90b3R5cGUucmVuZGVyPVdpLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faW50ZXJuYWxSb290O2lmKHQ9PT1udWxsKXRocm93IEVycm9yKFMoNDA5KSk7U2woZSx0LG51bGwsbnVsbCl9O2tsLnByb3RvdHlwZS51bm1vdW50PVdpLnByb3RvdHlwZS51bm1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5faW50ZXJuYWxSb290O2lmKGUhPT1udWxsKXt0aGlzLl9pbnRlcm5hbFJvb3Q9bnVsbDt2YXIgdD1lLmNvbnRhaW5lckluZm87UnQoZnVuY3Rpb24oKXtTbChudWxsLGUsbnVsbCxudWxsKX0pLHRbS2VdPW51bGx9fTtmdW5jdGlvbiBrbChlKXt0aGlzLl9pbnRlcm5hbFJvb3Q9ZX1rbC5wcm90b3R5cGUudW5zdGFibGVfc2NoZWR1bGVIeWRyYXRpb249ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9YnMoKTtlPXtibG9ja2VkT246bnVsbCx0YXJnZXQ6ZSxwcmlvcml0eTp0fTtmb3IodmFyIG49MDtuPGJlLmxlbmd0aCYmdCE9PTAmJnQ8YmVbbl0ucHJpb3JpdHk7bisrKTtiZS5zcGxpY2UobiwwLGUpLG49PT0wJiZ0YShlKX19O2Z1bmN0aW9uIEhpKGUpe3JldHVybiEoIWV8fGUubm9kZVR5cGUhPT0xJiZlLm5vZGVUeXBlIT09OSYmZS5ub2RlVHlwZSE9PTExKX1mdW5jdGlvbiBFbChlKXtyZXR1cm4hKCFlfHxlLm5vZGVUeXBlIT09MSYmZS5ub2RlVHlwZSE9PTkmJmUubm9kZVR5cGUhPT0xMSYmKGUubm9kZVR5cGUhPT04fHxlLm5vZGVWYWx1ZSE9PSIgcmVhY3QtbW91bnQtcG9pbnQtdW5zdGFibGUgIikpfWZ1bmN0aW9uIHJzKCl7fWZ1bmN0aW9uIHJwKGUsdCxuLHIsbCl7aWYobCl7aWYodHlwZW9mIHI9PSJmdW5jdGlvbiIpe3ZhciB1PXI7cj1mdW5jdGlvbigpe3ZhciBhPW9sKGkpO3UuY2FsbChhKX19dmFyIGk9a2ModCxyLGUsMCxudWxsLCExLCExLCIiLHJzKTtyZXR1cm4gZS5fcmVhY3RSb290Q29udGFpbmVyPWksZVtLZV09aS5jdXJyZW50LEhuKGUubm9kZVR5cGU9PT04P2UucGFyZW50Tm9kZTplKSxSdCgpLGl9Zm9yKDtsPWUubGFzdENoaWxkOyllLnJlbW92ZUNoaWxkKGwpO2lmKHR5cGVvZiByPT0iZnVuY3Rpb24iKXt2YXIgbz1yO3I9ZnVuY3Rpb24oKXt2YXIgYT1vbChzKTtvLmNhbGwoYSl9fXZhciBzPVZpKGUsMCwhMSxudWxsLG51bGwsITEsITEsIiIscnMpO3JldHVybiBlLl9yZWFjdFJvb3RDb250YWluZXI9cyxlW0tlXT1zLmN1cnJlbnQsSG4oZS5ub2RlVHlwZT09PTg/ZS5wYXJlbnROb2RlOmUpLFJ0KGZ1bmN0aW9uKCl7U2wodCxzLG4scil9KSxzfWZ1bmN0aW9uIENsKGUsdCxuLHIsbCl7dmFyIHU9bi5fcmVhY3RSb290Q29udGFpbmVyO2lmKHUpe3ZhciBpPXU7aWYodHlwZW9mIGw9PSJmdW5jdGlvbiIpe3ZhciBvPWw7bD1mdW5jdGlvbigpe3ZhciBzPW9sKGkpO28uY2FsbChzKX19U2wodCxpLGUsbCl9ZWxzZSBpPXJwKG4sdCxlLGwscik7cmV0dXJuIG9sKGkpfUpzPWZ1bmN0aW9uKGUpe3N3aXRjaChlLnRhZyl7Y2FzZSAzOnZhciB0PWUuc3RhdGVOb2RlO2lmKHQuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCl7dmFyIG49X24odC5wZW5kaW5nTGFuZXMpO24hPT0wJiYoYWkodCxufDEpLGhlKHQsUSgpKSwhKE0mNikmJihzbj1RKCkrNTAwLHl0KCkpKX1icmVhaztjYXNlIDEzOlJ0KGZ1bmN0aW9uKCl7dmFyIHI9WWUoZSwxKTtpZihyIT09bnVsbCl7dmFyIGw9b2UoKTtNZShyLGUsMSxsKX19KSxBaShlLDEpfX07Y2k9ZnVuY3Rpb24oZSl7aWYoZS50YWc9PT0xMyl7dmFyIHQ9WWUoZSwxMzQyMTc3MjgpO2lmKHQhPT1udWxsKXt2YXIgbj1vZSgpO01lKHQsZSwxMzQyMTc3Mjgsbil9QWkoZSwxMzQyMTc3MjgpfX07cXM9ZnVuY3Rpb24oZSl7aWYoZS50YWc9PT0xMyl7dmFyIHQ9Y3QoZSksbj1ZZShlLHQpO2lmKG4hPT1udWxsKXt2YXIgcj1vZSgpO01lKG4sZSx0LHIpfUFpKGUsdCl9fTticz1mdW5jdGlvbigpe3JldHVybiBJfTtlYT1mdW5jdGlvbihlLHQpe3ZhciBuPUk7dHJ5e3JldHVybiBJPWUsdCgpfWZpbmFsbHl7ST1ufX07bXU9ZnVuY3Rpb24oZSx0LG4pe3N3aXRjaCh0KXtjYXNlImlucHV0IjppZihzdShlLG4pLHQ9bi5uYW1lLG4udHlwZT09PSJyYWRpbyImJnQhPW51bGwpe2ZvcihuPWU7bi5wYXJlbnROb2RlOyluPW4ucGFyZW50Tm9kZTtmb3Iobj1uLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W25hbWU9IitKU09OLnN0cmluZ2lmeSgiIit0KSsnXVt0eXBlPSJyYWRpbyJdJyksdD0wO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcj1uW3RdO2lmKHIhPT1lJiZyLmZvcm09PT1lLmZvcm0pe3ZhciBsPXBsKHIpO2lmKCFsKXRocm93IEVycm9yKFMoOTApKTtScyhyKSxzdShyLGwpfX19YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6TXMoZSxuKTticmVhaztjYXNlInNlbGVjdCI6dD1uLnZhbHVlLHQhPW51bGwmJkd0KGUsISFuLm11bHRpcGxlLHQsITEpfX07QnM9amk7VnM9UnQ7dmFyIGxwPXt1c2luZ0NsaWVudEVudHJ5UG9pbnQ6ITEsRXZlbnRzOltscixBdCxwbCxVcywkcyxqaV19LEVuPXtmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTpFdCxidW5kbGVUeXBlOjAsdmVyc2lvbjoiMTguMy4xIixyZW5kZXJlclBhY2thZ2VOYW1lOiJyZWFjdC1kb20ifSx1cD17YnVuZGxlVHlwZTpFbi5idW5kbGVUeXBlLHZlcnNpb246RW4udmVyc2lvbixyZW5kZXJlclBhY2thZ2VOYW1lOkVuLnJlbmRlcmVyUGFja2FnZU5hbWUscmVuZGVyZXJDb25maWc6RW4ucmVuZGVyZXJDb25maWcsb3ZlcnJpZGVIb29rU3RhdGU6bnVsbCxvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGg6bnVsbCxvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGg6bnVsbCxvdmVycmlkZVByb3BzOm51bGwsb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGg6bnVsbCxvdmVycmlkZVByb3BzUmVuYW1lUGF0aDpudWxsLHNldEVycm9ySGFuZGxlcjpudWxsLHNldFN1c3BlbnNlSGFuZGxlcjpudWxsLHNjaGVkdWxlVXBkYXRlOm51bGwsY3VycmVudERpc3BhdGNoZXJSZWY6R2UuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixmaW5kSG9zdEluc3RhbmNlQnlGaWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1IcyhlKSxlPT09bnVsbD9udWxsOmUuc3RhdGVOb2RlfSxmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTpFbi5maW5kRmliZXJCeUhvc3RJbnN0YW5jZXx8bnAsZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoOm51bGwsc2NoZWR1bGVSZWZyZXNoOm51bGwsc2NoZWR1bGVSb290Om51bGwsc2V0UmVmcmVzaEhhbmRsZXI6bnVsbCxnZXRDdXJyZW50RmliZXI6bnVsbCxyZWNvbmNpbGVyVmVyc2lvbjoiMTguMy4xLW5leHQtZjEzMzhmODA4MC0yMDI0MDQyNiJ9O2lmKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX188InUiKXt2YXIgX3I9X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fO2lmKCFfci5pc0Rpc2FibGVkJiZfci5zdXBwb3J0c0ZpYmVyKXRyeXthbD1fci5pbmplY3QodXApLFVlPV9yfWNhdGNoe319d2UuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ9bHA7d2UuY3JlYXRlUG9ydGFsPWZ1bmN0aW9uKGUsdCl7dmFyIG49Mjxhcmd1bWVudHMubGVuZ3RoJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm51bGw7aWYoIUhpKHQpKXRocm93IEVycm9yKFMoMjAwKSk7cmV0dXJuIHRwKGUsdCxudWxsLG4pfTt3ZS5jcmVhdGVSb290PWZ1bmN0aW9uKGUsdCl7aWYoIUhpKGUpKXRocm93IEVycm9yKFMoMjk5KSk7dmFyIG49ITEscj0iIixsPUVjO3JldHVybiB0IT1udWxsJiYodC51bnN0YWJsZV9zdHJpY3RNb2RlPT09ITAmJihuPSEwKSx0LmlkZW50aWZpZXJQcmVmaXghPT12b2lkIDAmJihyPXQuaWRlbnRpZmllclByZWZpeCksdC5vblJlY292ZXJhYmxlRXJyb3IhPT12b2lkIDAmJihsPXQub25SZWNvdmVyYWJsZUVycm9yKSksdD1WaShlLDEsITEsbnVsbCxudWxsLG4sITEscixsKSxlW0tlXT10LmN1cnJlbnQsSG4oZS5ub2RlVHlwZT09PTg/ZS5wYXJlbnROb2RlOmUpLG5ldyBXaSh0KX07d2UuZmluZERPTU5vZGU9ZnVuY3Rpb24oZSl7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtpZihlLm5vZGVUeXBlPT09MSlyZXR1cm4gZTt2YXIgdD1lLl9yZWFjdEludGVybmFscztpZih0PT09dm9pZCAwKXRocm93IHR5cGVvZiBlLnJlbmRlcj09ImZ1bmN0aW9uIj9FcnJvcihTKDE4OCkpOihlPU9iamVjdC5rZXlzKGUpLmpvaW4oIiwiKSxFcnJvcihTKDI2OCxlKSkpO3JldHVybiBlPUhzKHQpLGU9ZT09PW51bGw/bnVsbDplLnN0YXRlTm9kZSxlfTt3ZS5mbHVzaFN5bmM9ZnVuY3Rpb24oZSl7cmV0dXJuIFJ0KGUpfTt3ZS5oeWRyYXRlPWZ1bmN0aW9uKGUsdCxuKXtpZighRWwodCkpdGhyb3cgRXJyb3IoUygyMDApKTtyZXR1cm4gQ2wobnVsbCxlLHQsITAsbil9O3dlLmh5ZHJhdGVSb290PWZ1bmN0aW9uKGUsdCxuKXtpZighSGkoZSkpdGhyb3cgRXJyb3IoUyg0MDUpKTt2YXIgcj1uIT1udWxsJiZuLmh5ZHJhdGVkU291cmNlc3x8bnVsbCxsPSExLHU9IiIsaT1FYztpZihuIT1udWxsJiYobi51bnN0YWJsZV9zdHJpY3RNb2RlPT09ITAmJihsPSEwKSxuLmlkZW50aWZpZXJQcmVmaXghPT12b2lkIDAmJih1PW4uaWRlbnRpZmllclByZWZpeCksbi5vblJlY292ZXJhYmxlRXJyb3IhPT12b2lkIDAmJihpPW4ub25SZWNvdmVyYWJsZUVycm9yKSksdD1rYyh0LG51bGwsZSwxLG4/P251bGwsbCwhMSx1LGkpLGVbS2VdPXQuY3VycmVudCxIbihlKSxyKWZvcihlPTA7ZTxyLmxlbmd0aDtlKyspbj1yW2VdLGw9bi5fZ2V0VmVyc2lvbixsPWwobi5fc291cmNlKSx0Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE9PW51bGw/dC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhPVtuLGxdOnQubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YS5wdXNoKG4sbCk7cmV0dXJuIG5ldyBrbCh0KX07d2UucmVuZGVyPWZ1bmN0aW9uKGUsdCxuKXtpZighRWwodCkpdGhyb3cgRXJyb3IoUygyMDApKTtyZXR1cm4gQ2wobnVsbCxlLHQsITEsbil9O3dlLnVubW91bnRDb21wb25lbnRBdE5vZGU9ZnVuY3Rpb24oZSl7aWYoIUVsKGUpKXRocm93IEVycm9yKFMoNDApKTtyZXR1cm4gZS5fcmVhY3RSb290Q29udGFpbmVyPyhSdChmdW5jdGlvbigpe0NsKG51bGwsbnVsbCxlLCExLGZ1bmN0aW9uKCl7ZS5fcmVhY3RSb290Q29udGFpbmVyPW51bGwsZVtLZV09bnVsbH0pfSksITApOiExfTt3ZS51bnN0YWJsZV9iYXRjaGVkVXBkYXRlcz1qaTt3ZS51bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcj1mdW5jdGlvbihlLHQsbixyKXtpZighRWwobikpdGhyb3cgRXJyb3IoUygyMDApKTtpZihlPT1udWxsfHxlLl9yZWFjdEludGVybmFscz09PXZvaWQgMCl0aHJvdyBFcnJvcihTKDM4KSk7cmV0dXJuIENsKGUsdCxuLCExLHIpfTt3ZS52ZXJzaW9uPSIxOC4zLjEtbmV4dC1mMTMzOGY4MDgwLTIwMjQwNDI2IjtmdW5jdGlvbiBDYygpe2lmKCEodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXz4idSJ8fHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UhPSJmdW5jdGlvbiIpKXRyeXtfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UoQ2MpfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9fUNjKCksQ3MuZXhwb3J0cz13ZTt2YXIgaXA9Q3MuZXhwb3J0cztjb25zdCBmaD1wcyhpcCk7LyoqCiAqIEByZW1peC1ydW4vcm91dGVyIHYxLjIzLjMKICoKICogQ29weXJpZ2h0IChjKSBSZW1peCBTb2Z0d2FyZSBJbmMuCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogKiBMSUNFTlNFLm1kIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqCiAqIEBsaWNlbnNlIE1JVAogKi9mdW5jdGlvbiBibigpe3JldHVybiBibj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbikoe30pLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGJuLmFwcGx5KG51bGwsYXJndW1lbnRzKX12YXIgcnQ7KGZ1bmN0aW9uKGUpe2UuUG9wPSJQT1AiLGUuUHVzaD0iUFVTSCIsZS5SZXBsYWNlPSJSRVBMQUNFIn0pKHJ0fHwocnQ9e30pKTtjb25zdCBscz0icG9wc3RhdGUiO2Z1bmN0aW9uIG9wKGUpe2U9PT12b2lkIDAmJihlPXt9KTtmdW5jdGlvbiB0KHIsbCl7bGV0e3BhdGhuYW1lOnUsc2VhcmNoOmksaGFzaDpvfT1yLmxvY2F0aW9uO3JldHVybiBYdSgiIix7cGF0aG5hbWU6dSxzZWFyY2g6aSxoYXNoOm99LGwuc3RhdGUmJmwuc3RhdGUudXNyfHxudWxsLGwuc3RhdGUmJmwuc3RhdGUua2V5fHwiZGVmYXVsdCIpfWZ1bmN0aW9uIG4ocixsKXtyZXR1cm4gdHlwZW9mIGw9PSJzdHJpbmciP2w6c2wobCl9cmV0dXJuIGFwKHQsbixudWxsLGUpfWZ1bmN0aW9uIFkoZSx0KXtpZihlPT09ITF8fGU9PT1udWxsfHx0eXBlb2YgZT4idSIpdGhyb3cgbmV3IEVycm9yKHQpfWZ1bmN0aW9uIFFpKGUsdCl7aWYoIWUpe3R5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKHQpO3RyeXt0aHJvdyBuZXcgRXJyb3IodCl9Y2F0Y2h7fX19ZnVuY3Rpb24gc3AoKXtyZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsOCl9ZnVuY3Rpb24gdXMoZSx0KXtyZXR1cm57dXNyOmUuc3RhdGUsa2V5OmUua2V5LGlkeDp0fX1mdW5jdGlvbiBYdShlLHQsbixyKXtyZXR1cm4gbj09PXZvaWQgMCYmKG49bnVsbCksYm4oe3BhdGhuYW1lOnR5cGVvZiBlPT0ic3RyaW5nIj9lOmUucGF0aG5hbWUsc2VhcmNoOiIiLGhhc2g6IiJ9LHR5cGVvZiB0PT0ic3RyaW5nIj9kbih0KTp0LHtzdGF0ZTpuLGtleTp0JiZ0LmtleXx8cnx8c3AoKX0pfWZ1bmN0aW9uIHNsKGUpe2xldHtwYXRobmFtZTp0PSIvIixzZWFyY2g6bj0iIixoYXNoOnI9IiJ9PWU7cmV0dXJuIG4mJm4hPT0iPyImJih0Kz1uLmNoYXJBdCgwKT09PSI/Ij9uOiI/IituKSxyJiZyIT09IiMiJiYodCs9ci5jaGFyQXQoMCk9PT0iIyI/cjoiIyIrciksdH1mdW5jdGlvbiBkbihlKXtsZXQgdD17fTtpZihlKXtsZXQgbj1lLmluZGV4T2YoIiMiKTtuPj0wJiYodC5oYXNoPWUuc3Vic3RyKG4pLGU9ZS5zdWJzdHIoMCxuKSk7bGV0IHI9ZS5pbmRleE9mKCI/Iik7cj49MCYmKHQuc2VhcmNoPWUuc3Vic3RyKHIpLGU9ZS5zdWJzdHIoMCxyKSksZSYmKHQucGF0aG5hbWU9ZSl9cmV0dXJuIHR9ZnVuY3Rpb24gYXAoZSx0LG4scil7cj09PXZvaWQgMCYmKHI9e30pO2xldHt3aW5kb3c6bD1kb2N1bWVudC5kZWZhdWx0Vmlldyx2NUNvbXBhdDp1PSExfT1yLGk9bC5oaXN0b3J5LG89cnQuUG9wLHM9bnVsbCxhPWgoKTthPT1udWxsJiYoYT0wLGkucmVwbGFjZVN0YXRlKGJuKHt9LGkuc3RhdGUse2lkeDphfSksIiIpKTtmdW5jdGlvbiBoKCl7cmV0dXJuKGkuc3RhdGV8fHtpZHg6bnVsbH0pLmlkeH1mdW5jdGlvbiBwKCl7bz1ydC5Qb3A7bGV0IEU9aCgpLGY9RT09bnVsbD9udWxsOkUtYTthPUUscyYmcyh7YWN0aW9uOm8sbG9jYXRpb246dy5sb2NhdGlvbixkZWx0YTpmfSl9ZnVuY3Rpb24gbShFLGYpe289cnQuUHVzaDtsZXQgYz1YdSh3LmxvY2F0aW9uLEUsZik7YT1oKCkrMTtsZXQgZD11cyhjLGEpLHY9dy5jcmVhdGVIcmVmKGMpO3RyeXtpLnB1c2hTdGF0ZShkLCIiLHYpfWNhdGNoKGspe2lmKGsgaW5zdGFuY2VvZiBET01FeGNlcHRpb24mJmsubmFtZT09PSJEYXRhQ2xvbmVFcnJvciIpdGhyb3cgaztsLmxvY2F0aW9uLmFzc2lnbih2KX11JiZzJiZzKHthY3Rpb246byxsb2NhdGlvbjp3LmxvY2F0aW9uLGRlbHRhOjF9KX1mdW5jdGlvbiB5KEUsZil7bz1ydC5SZXBsYWNlO2xldCBjPVh1KHcubG9jYXRpb24sRSxmKTthPWgoKTtsZXQgZD11cyhjLGEpLHY9dy5jcmVhdGVIcmVmKGMpO2kucmVwbGFjZVN0YXRlKGQsIiIsdiksdSYmcyYmcyh7YWN0aW9uOm8sbG9jYXRpb246dy5sb2NhdGlvbixkZWx0YTowfSl9ZnVuY3Rpb24gZyhFKXtsZXQgZj1sLmxvY2F0aW9uLm9yaWdpbiE9PSJudWxsIj9sLmxvY2F0aW9uLm9yaWdpbjpsLmxvY2F0aW9uLmhyZWYsYz10eXBlb2YgRT09InN0cmluZyI/RTpzbChFKTtyZXR1cm4gYz1jLnJlcGxhY2UoLyAkLywiJTIwIiksWShmLCJObyB3aW5kb3cubG9jYXRpb24uKG9yaWdpbnxocmVmKSBhdmFpbGFibGUgdG8gY3JlYXRlIFVSTCBmb3IgaHJlZjogIitjKSxuZXcgVVJMKGMsZil9bGV0IHc9e2dldCBhY3Rpb24oKXtyZXR1cm4gb30sZ2V0IGxvY2F0aW9uKCl7cmV0dXJuIGUobCxpKX0sbGlzdGVuKEUpe2lmKHMpdGhyb3cgbmV3IEVycm9yKCJBIGhpc3Rvcnkgb25seSBhY2NlcHRzIG9uZSBhY3RpdmUgbGlzdGVuZXIiKTtyZXR1cm4gbC5hZGRFdmVudExpc3RlbmVyKGxzLHApLHM9RSwoKT0+e2wucmVtb3ZlRXZlbnRMaXN0ZW5lcihscyxwKSxzPW51bGx9fSxjcmVhdGVIcmVmKEUpe3JldHVybiB0KGwsRSl9LGNyZWF0ZVVSTDpnLGVuY29kZUxvY2F0aW9uKEUpe2xldCBmPWcoRSk7cmV0dXJue3BhdGhuYW1lOmYucGF0aG5hbWUsc2VhcmNoOmYuc2VhcmNoLGhhc2g6Zi5oYXNofX0scHVzaDptLHJlcGxhY2U6eSxnbyhFKXtyZXR1cm4gaS5nbyhFKX19O3JldHVybiB3fXZhciBpczsoZnVuY3Rpb24oZSl7ZS5kYXRhPSJkYXRhIixlLmRlZmVycmVkPSJkZWZlcnJlZCIsZS5yZWRpcmVjdD0icmVkaXJlY3QiLGUuZXJyb3I9ImVycm9yIn0pKGlzfHwoaXM9e30pKTtmdW5jdGlvbiBjcChlLHQsbil7cmV0dXJuIG49PT12b2lkIDAmJihuPSIvIiksZnAoZSx0LG4pfWZ1bmN0aW9uIGZwKGUsdCxuLHIpe2xldCBsPXR5cGVvZiB0PT0ic3RyaW5nIj9kbih0KTp0LHU9S2kobC5wYXRobmFtZXx8Ii8iLG4pO2lmKHU9PW51bGwpcmV0dXJuIG51bGw7bGV0IGk9eGMoZSk7ZHAoaSk7bGV0IG89bnVsbCxzPXhwKHUpO2ZvcihsZXQgYT0wO289PW51bGwmJmE8aS5sZW5ndGg7KythKW89a3AoaVthXSxzKTtyZXR1cm4gb31mdW5jdGlvbiB4YyhlLHQsbixyKXt0PT09dm9pZCAwJiYodD1bXSksbj09PXZvaWQgMCYmKG49W10pLHI9PT12b2lkIDAmJihyPSIiKTtsZXQgbD0odSxpLG8pPT57bGV0IHM9e3JlbGF0aXZlUGF0aDpvPT09dm9pZCAwP3UucGF0aHx8IiI6byxjYXNlU2Vuc2l0aXZlOnUuY2FzZVNlbnNpdGl2ZT09PSEwLGNoaWxkcmVuSW5kZXg6aSxyb3V0ZTp1fTtzLnJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCIvIikmJihZKHMucmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgociksJ0Fic29sdXRlIHJvdXRlIHBhdGggIicrcy5yZWxhdGl2ZVBhdGgrJyIgbmVzdGVkIHVuZGVyIHBhdGggJysoJyInK3IrJyIgaXMgbm90IHZhbGlkLiBBbiBhYnNvbHV0ZSBjaGlsZCByb3V0ZSBwYXRoICcpKyJtdXN0IHN0YXJ0IHdpdGggdGhlIGNvbWJpbmVkIHBhdGggb2YgYWxsIGl0cyBwYXJlbnQgcm91dGVzLiIpLHMucmVsYXRpdmVQYXRoPXMucmVsYXRpdmVQYXRoLnNsaWNlKHIubGVuZ3RoKSk7bGV0IGE9ZHQoW3Iscy5yZWxhdGl2ZVBhdGhdKSxoPW4uY29uY2F0KHMpO3UuY2hpbGRyZW4mJnUuY2hpbGRyZW4ubGVuZ3RoPjAmJihZKHUuaW5kZXghPT0hMCwiSW5kZXggcm91dGVzIG11c3Qgbm90IGhhdmUgY2hpbGQgcm91dGVzLiBQbGVhc2UgcmVtb3ZlICIrKCdhbGwgY2hpbGQgcm91dGVzIGZyb20gcm91dGUgcGF0aCAiJythKyciLicpKSx4Yyh1LmNoaWxkcmVuLHQsaCxhKSksISh1LnBhdGg9PW51bGwmJiF1LmluZGV4KSYmdC5wdXNoKHtwYXRoOmEsc2NvcmU6d3AoYSx1LmluZGV4KSxyb3V0ZXNNZXRhOmh9KX07cmV0dXJuIGUuZm9yRWFjaCgodSxpKT0+e3ZhciBvO2lmKHUucGF0aD09PSIifHwhKChvPXUucGF0aCkhPW51bGwmJm8uaW5jbHVkZXMoIj8iKSkpbCh1LGkpO2Vsc2UgZm9yKGxldCBzIG9mIF9jKHUucGF0aCkpbCh1LGkscyl9KSx0fWZ1bmN0aW9uIF9jKGUpe2xldCB0PWUuc3BsaXQoIi8iKTtpZih0Lmxlbmd0aD09PTApcmV0dXJuW107bGV0W24sLi4ucl09dCxsPW4uZW5kc1dpdGgoIj8iKSx1PW4ucmVwbGFjZSgvXD8kLywiIik7aWYoci5sZW5ndGg9PT0wKXJldHVybiBsP1t1LCIiXTpbdV07bGV0IGk9X2Moci5qb2luKCIvIikpLG89W107cmV0dXJuIG8ucHVzaCguLi5pLm1hcChzPT5zPT09IiI/dTpbdSxzXS5qb2luKCIvIikpKSxsJiZvLnB1c2goLi4uaSksby5tYXAocz0+ZS5zdGFydHNXaXRoKCIvIikmJnM9PT0iIj8iLyI6cyl9ZnVuY3Rpb24gZHAoZSl7ZS5zb3J0KCh0LG4pPT50LnNjb3JlIT09bi5zY29yZT9uLnNjb3JlLXQuc2NvcmU6U3AodC5yb3V0ZXNNZXRhLm1hcChyPT5yLmNoaWxkcmVuSW5kZXgpLG4ucm91dGVzTWV0YS5tYXAocj0+ci5jaGlsZHJlbkluZGV4KSkpfWNvbnN0IHBwPS9eOltcdy1dKyQvLGhwPTMsbXA9Mix2cD0xLHlwPTEwLGdwPS0yLG9zPWU9PmU9PT0iKiI7ZnVuY3Rpb24gd3AoZSx0KXtsZXQgbj1lLnNwbGl0KCIvIikscj1uLmxlbmd0aDtyZXR1cm4gbi5zb21lKG9zKSYmKHIrPWdwKSx0JiYocis9bXApLG4uZmlsdGVyKGw9PiFvcyhsKSkucmVkdWNlKChsLHUpPT5sKyhwcC50ZXN0KHUpP2hwOnU9PT0iIj92cDp5cCkscil9ZnVuY3Rpb24gU3AoZSx0KXtyZXR1cm4gZS5sZW5ndGg9PT10Lmxlbmd0aCYmZS5zbGljZSgwLC0xKS5ldmVyeSgocixsKT0+cj09PXRbbF0pP2VbZS5sZW5ndGgtMV0tdFt0Lmxlbmd0aC0xXTowfWZ1bmN0aW9uIGtwKGUsdCxuKXtsZXR7cm91dGVzTWV0YTpyfT1lLGw9e30sdT0iLyIsaT1bXTtmb3IobGV0IG89MDtvPHIubGVuZ3RoOysrbyl7bGV0IHM9cltvXSxhPW89PT1yLmxlbmd0aC0xLGg9dT09PSIvIj90OnQuc2xpY2UodS5sZW5ndGgpfHwiLyIscD1FcCh7cGF0aDpzLnJlbGF0aXZlUGF0aCxjYXNlU2Vuc2l0aXZlOnMuY2FzZVNlbnNpdGl2ZSxlbmQ6YX0saCksbT1zLnJvdXRlO2lmKCFwKXJldHVybiBudWxsO09iamVjdC5hc3NpZ24obCxwLnBhcmFtcyksaS5wdXNoKHtwYXJhbXM6bCxwYXRobmFtZTpkdChbdSxwLnBhdGhuYW1lXSkscGF0aG5hbWVCYXNlOkxwKGR0KFt1LHAucGF0aG5hbWVCYXNlXSkpLHJvdXRlOm19KSxwLnBhdGhuYW1lQmFzZSE9PSIvIiYmKHU9ZHQoW3UscC5wYXRobmFtZUJhc2VdKSl9cmV0dXJuIGl9ZnVuY3Rpb24gRXAoZSx0KXt0eXBlb2YgZT09InN0cmluZyImJihlPXtwYXRoOmUsY2FzZVNlbnNpdGl2ZTohMSxlbmQ6ITB9KTtsZXRbbixyXT1DcChlLnBhdGgsZS5jYXNlU2Vuc2l0aXZlLGUuZW5kKSxsPXQubWF0Y2gobik7aWYoIWwpcmV0dXJuIG51bGw7bGV0IHU9bFswXSxpPXUucmVwbGFjZSgvKC4pXC8rJC8sIiQxIiksbz1sLnNsaWNlKDEpO3JldHVybntwYXJhbXM6ci5yZWR1Y2UoKGEsaCxwKT0+e2xldHtwYXJhbU5hbWU6bSxpc09wdGlvbmFsOnl9PWg7aWYobT09PSIqIil7bGV0IHc9b1twXXx8IiI7aT11LnNsaWNlKDAsdS5sZW5ndGgtdy5sZW5ndGgpLnJlcGxhY2UoLyguKVwvKyQvLCIkMSIpfWNvbnN0IGc9b1twXTtyZXR1cm4geSYmIWc/YVttXT12b2lkIDA6YVttXT0oZ3x8IiIpLnJlcGxhY2UoLyUyRi9nLCIvIiksYX0se30pLHBhdGhuYW1lOnUscGF0aG5hbWVCYXNlOmkscGF0dGVybjplfX1mdW5jdGlvbiBDcChlLHQsbil7dD09PXZvaWQgMCYmKHQ9ITEpLG49PT12b2lkIDAmJihuPSEwKSxRaShlPT09IioifHwhZS5lbmRzV2l0aCgiKiIpfHxlLmVuZHNXaXRoKCIvKiIpLCdSb3V0ZSBwYXRoICInK2UrJyIgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIGl0IHdlcmUgJysoJyInK2UucmVwbGFjZSgvXCokLywiLyoiKSsnIiBiZWNhdXNlIHRoZSBgKmAgY2hhcmFjdGVyIG11c3QgJykrImFsd2F5cyBmb2xsb3cgYSBgL2AgaW4gdGhlIHBhdHRlcm4uIFRvIGdldCByaWQgb2YgdGhpcyB3YXJuaW5nLCAiKygncGxlYXNlIGNoYW5nZSB0aGUgcm91dGUgcGF0aCB0byAiJytlLnJlcGxhY2UoL1wqJC8sIi8qIikrJyIuJykpO2xldCByPVtdLGw9Il4iK2UucmVwbGFjZSgvXC8qXCo/JC8sIiIpLnJlcGxhY2UoL15cLyovLCIvIikucmVwbGFjZSgvW1xcLiorXiR7fXwoKVtcXV0vZywiXFwkJiIpLnJlcGxhY2UoL1wvOihbXHctXSspKFw/KT8vZywoaSxvLHMpPT4oci5wdXNoKHtwYXJhbU5hbWU6byxpc09wdGlvbmFsOnMhPW51bGx9KSxzPyIvPyhbXlxcL10rKT8iOiIvKFteXFwvXSspIikpO3JldHVybiBlLmVuZHNXaXRoKCIqIik/KHIucHVzaCh7cGFyYW1OYW1lOiIqIn0pLGwrPWU9PT0iKiJ8fGU9PT0iLyoiPyIoLiopJCI6Iig/OlxcLyguKyl8XFwvKikkIik6bj9sKz0iXFwvKiQiOmUhPT0iIiYmZSE9PSIvIiYmKGwrPSIoPzooPz1cXC98JCkpIiksW25ldyBSZWdFeHAobCx0P3ZvaWQgMDoiaSIpLHJdfWZ1bmN0aW9uIHhwKGUpe3RyeXtyZXR1cm4gZS5zcGxpdCgiLyIpLm1hcCh0PT5kZWNvZGVVUklDb21wb25lbnQodCkucmVwbGFjZSgvXC8vZywiJTJGIikpLmpvaW4oIi8iKX1jYXRjaCh0KXtyZXR1cm4gUWkoITEsJ1RoZSBVUkwgcGF0aCAiJytlKyciIGNvdWxkIG5vdCBiZSBkZWNvZGVkIGJlY2F1c2UgaXQgaXMgaXMgYSBtYWxmb3JtZWQgVVJMIHNlZ21lbnQuIFRoaXMgaXMgcHJvYmFibHkgZHVlIHRvIGEgYmFkIHBlcmNlbnQgJysoImVuY29kaW5nICgiK3QrIikuIikpLGV9fWZ1bmN0aW9uIEtpKGUsdCl7aWYodD09PSIvIilyZXR1cm4gZTtpZighZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgodC50b0xvd2VyQ2FzZSgpKSlyZXR1cm4gbnVsbDtsZXQgbj10LmVuZHNXaXRoKCIvIik/dC5sZW5ndGgtMTp0Lmxlbmd0aCxyPWUuY2hhckF0KG4pO3JldHVybiByJiZyIT09Ii8iP251bGw6ZS5zbGljZShuKXx8Ii8ifWNvbnN0IF9wPS9eKD86W2Etel1bYS16MC05Ky4tXSo6fFwvXC8pL2ksUHA9ZT0+X3AudGVzdChlKTtmdW5jdGlvbiBOcChlLHQpe3Q9PT12b2lkIDAmJih0PSIvIik7bGV0e3BhdGhuYW1lOm4sc2VhcmNoOnI9IiIsaGFzaDpsPSIifT10eXBlb2YgZT09InN0cmluZyI/ZG4oZSk6ZSx1O2lmKG4paWYoUHAobikpdT1uO2Vsc2V7aWYobi5pbmNsdWRlcygiLy8iKSl7bGV0IGk9bjtuPXpjKG4pLFFpKCExLCJQYXRobmFtZXMgY2Fubm90IGhhdmUgZW1iZWRkZWQgZG91YmxlIHNsYXNoZXMgLSBub3JtYWxpemluZyAiKyhpKyIgLT4gIituKSl9bi5zdGFydHNXaXRoKCIvIik/dT1zcyhuLnN1YnN0cmluZygxKSwiLyIpOnU9c3Mobix0KX1lbHNlIHU9dDtyZXR1cm57cGF0aG5hbWU6dSxzZWFyY2g6VHAociksaGFzaDpScChsKX19ZnVuY3Rpb24gc3MoZSx0KXtsZXQgbj10LnJlcGxhY2UoL1wvKyQvLCIiKS5zcGxpdCgiLyIpO3JldHVybiBlLnNwbGl0KCIvIikuZm9yRWFjaChsPT57bD09PSIuLiI/bi5sZW5ndGg+MSYmbi5wb3AoKTpsIT09Ii4iJiZuLnB1c2gobCl9KSxuLmxlbmd0aD4xP24uam9pbigiLyIpOiIvIn1mdW5jdGlvbiB0dShlLHQsbixyKXtyZXR1cm4iQ2Fubm90IGluY2x1ZGUgYSAnIitlKyInIGNoYXJhY3RlciBpbiBhIG1hbnVhbGx5IHNwZWNpZmllZCAiKygiYHRvLiIrdCsiYCBmaWVsZCBbIitKU09OLnN0cmluZ2lmeShyKSsiXS4gIFBsZWFzZSBzZXBhcmF0ZSBpdCBvdXQgdG8gdGhlICIpKygiYHRvLiIrbisiYCBmaWVsZC4gQWx0ZXJuYXRpdmVseSB5b3UgbWF5IHByb3ZpZGUgdGhlIGZ1bGwgcGF0aCBhcyAiKSsnYSBzdHJpbmcgaW4gPExpbmsgdG89Ii4uLiI+IGFuZCB0aGUgcm91dGVyIHdpbGwgcGFyc2UgaXQgZm9yIHlvdS4nfWZ1bmN0aW9uIHpwKGUpe3JldHVybiBlLmZpbHRlcigodCxuKT0+bj09PTB8fHQucm91dGUucGF0aCYmdC5yb3V0ZS5wYXRoLmxlbmd0aD4wKX1mdW5jdGlvbiBQYyhlLHQpe2xldCBuPXpwKGUpO3JldHVybiB0P24ubWFwKChyLGwpPT5sPT09bi5sZW5ndGgtMT9yLnBhdGhuYW1lOnIucGF0aG5hbWVCYXNlKTpuLm1hcChyPT5yLnBhdGhuYW1lQmFzZSl9ZnVuY3Rpb24gTmMoZSx0LG4scil7cj09PXZvaWQgMCYmKHI9ITEpO2xldCBsO3R5cGVvZiBlPT0ic3RyaW5nIj9sPWRuKGUpOihsPWJuKHt9LGUpLFkoIWwucGF0aG5hbWV8fCFsLnBhdGhuYW1lLmluY2x1ZGVzKCI/IiksdHUoIj8iLCJwYXRobmFtZSIsInNlYXJjaCIsbCkpLFkoIWwucGF0aG5hbWV8fCFsLnBhdGhuYW1lLmluY2x1ZGVzKCIjIiksdHUoIiMiLCJwYXRobmFtZSIsImhhc2giLGwpKSxZKCFsLnNlYXJjaHx8IWwuc2VhcmNoLmluY2x1ZGVzKCIjIiksdHUoIiMiLCJzZWFyY2giLCJoYXNoIixsKSkpO2xldCB1PWU9PT0iInx8bC5wYXRobmFtZT09PSIiLGk9dT8iLyI6bC5wYXRobmFtZSxvO2lmKGk9PW51bGwpbz1uO2Vsc2V7bGV0IHA9dC5sZW5ndGgtMTtpZighciYmaS5zdGFydHNXaXRoKCIuLiIpKXtsZXQgbT1pLnNwbGl0KCIvIik7Zm9yKDttWzBdPT09Ii4uIjspbS5zaGlmdCgpLHAtPTE7bC5wYXRobmFtZT1tLmpvaW4oIi8iKX1vPXA+PTA/dFtwXToiLyJ9bGV0IHM9TnAobCxvKSxhPWkmJmkhPT0iLyImJmkuZW5kc1dpdGgoIi8iKSxoPSh1fHxpPT09Ii4iKSYmbi5lbmRzV2l0aCgiLyIpO3JldHVybiFzLnBhdGhuYW1lLmVuZHNXaXRoKCIvIikmJihhfHxoKSYmKHMucGF0aG5hbWUrPSIvIiksc31jb25zdCB6Yz1lPT5lLnJlcGxhY2UoL1wvXC8rL2csIi8iKSxkdD1lPT56YyhlLmpvaW4oIi8iKSksTHA9ZT0+ZS5yZXBsYWNlKC9cLyskLywiIikucmVwbGFjZSgvXlwvKi8sIi8iKSxUcD1lPT4hZXx8ZT09PSI/Ij8iIjplLnN0YXJ0c1dpdGgoIj8iKT9lOiI/IitlLFJwPWU9PiFlfHxlPT09IiMiPyIiOmUuc3RhcnRzV2l0aCgiIyIpP2U6IiMiK2U7ZnVuY3Rpb24gT3AoZSl7cmV0dXJuIGUhPW51bGwmJnR5cGVvZiBlLnN0YXR1cz09Im51bWJlciImJnR5cGVvZiBlLnN0YXR1c1RleHQ9PSJzdHJpbmciJiZ0eXBlb2YgZS5pbnRlcm5hbD09ImJvb2xlYW4iJiYiZGF0YSJpbiBlfWNvbnN0IExjPVsicG9zdCIsInB1dCIsInBhdGNoIiwiZGVsZXRlIl07bmV3IFNldChMYyk7Y29uc3QgTXA9WyJnZXQiLC4uLkxjXTtuZXcgU2V0KE1wKTsvKioKICogUmVhY3QgUm91dGVyIHY2LjMwLjQKICoKICogQ29weXJpZ2h0IChjKSBSZW1peCBTb2Z0d2FyZSBJbmMuCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogKiBMSUNFTlNFLm1kIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqCiAqIEBsaWNlbnNlIE1JVAogKi9mdW5jdGlvbiBlcigpe3JldHVybiBlcj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbikoe30pLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGVyLmFwcGx5KG51bGwsYXJndW1lbnRzKX1jb25zdCBZaT1fLmNyZWF0ZUNvbnRleHQobnVsbCksSXA9Xy5jcmVhdGVDb250ZXh0KG51bGwpLEl0PV8uY3JlYXRlQ29udGV4dChudWxsKSx4bD1fLmNyZWF0ZUNvbnRleHQobnVsbCksRHQ9Xy5jcmVhdGVDb250ZXh0KHtvdXRsZXQ6bnVsbCxtYXRjaGVzOltdLGlzRGF0YVJvdXRlOiExfSksVGM9Xy5jcmVhdGVDb250ZXh0KG51bGwpO2Z1bmN0aW9uIERwKGUsdCl7bGV0e3JlbGF0aXZlOm59PXQ9PT12b2lkIDA/e306dDtpcigpfHxZKCExKTtsZXR7YmFzZW5hbWU6cixuYXZpZ2F0b3I6bH09Xy51c2VDb250ZXh0KEl0KSx7aGFzaDp1LHBhdGhuYW1lOmksc2VhcmNoOm99PU9jKGUse3JlbGF0aXZlOm59KSxzPWk7cmV0dXJuIHIhPT0iLyImJihzPWk9PT0iLyI/cjpkdChbcixpXSkpLGwuY3JlYXRlSHJlZih7cGF0aG5hbWU6cyxzZWFyY2g6byxoYXNoOnV9KX1mdW5jdGlvbiBpcigpe3JldHVybiBfLnVzZUNvbnRleHQoeGwpIT1udWxsfWZ1bmN0aW9uIF9sKCl7cmV0dXJuIGlyKCl8fFkoITEpLF8udXNlQ29udGV4dCh4bCkubG9jYXRpb259ZnVuY3Rpb24gUmMoZSl7Xy51c2VDb250ZXh0KEl0KS5zdGF0aWN8fF8udXNlTGF5b3V0RWZmZWN0KGUpfWZ1bmN0aW9uIEZwKCl7bGV0e2lzRGF0YVJvdXRlOmV9PV8udXNlQ29udGV4dChEdCk7cmV0dXJuIGU/R3AoKTpqcCgpfWZ1bmN0aW9uIGpwKCl7aXIoKXx8WSghMSk7bGV0IGU9Xy51c2VDb250ZXh0KFlpKSx7YmFzZW5hbWU6dCxmdXR1cmU6bixuYXZpZ2F0b3I6cn09Xy51c2VDb250ZXh0KEl0KSx7bWF0Y2hlczpsfT1fLnVzZUNvbnRleHQoRHQpLHtwYXRobmFtZTp1fT1fbCgpLGk9SlNPTi5zdHJpbmdpZnkoUGMobCxuLnY3X3JlbGF0aXZlU3BsYXRQYXRoKSksbz1fLnVzZVJlZighMSk7cmV0dXJuIFJjKCgpPT57by5jdXJyZW50PSEwfSksXy51c2VDYWxsYmFjayhmdW5jdGlvbihhLGgpe2lmKGg9PT12b2lkIDAmJihoPXt9KSwhby5jdXJyZW50KXJldHVybjtpZih0eXBlb2YgYT09Im51bWJlciIpe3IuZ28oYSk7cmV0dXJufWxldCBwPU5jKGEsSlNPTi5wYXJzZShpKSx1LGgucmVsYXRpdmU9PT0icGF0aCIpO2U9PW51bGwmJnQhPT0iLyImJihwLnBhdGhuYW1lPXAucGF0aG5hbWU9PT0iLyI/dDpkdChbdCxwLnBhdGhuYW1lXSkpLChoLnJlcGxhY2U/ci5yZXBsYWNlOnIucHVzaCkocCxoLnN0YXRlLGgpfSxbdCxyLGksdSxlXSl9ZnVuY3Rpb24gT2MoZSx0KXtsZXR7cmVsYXRpdmU6bn09dD09PXZvaWQgMD97fTp0LHtmdXR1cmU6cn09Xy51c2VDb250ZXh0KEl0KSx7bWF0Y2hlczpsfT1fLnVzZUNvbnRleHQoRHQpLHtwYXRobmFtZTp1fT1fbCgpLGk9SlNPTi5zdHJpbmdpZnkoUGMobCxyLnY3X3JlbGF0aXZlU3BsYXRQYXRoKSk7cmV0dXJuIF8udXNlTWVtbygoKT0+TmMoZSxKU09OLnBhcnNlKGkpLHUsbj09PSJwYXRoIiksW2UsaSx1LG5dKX1mdW5jdGlvbiBVcChlLHQpe3JldHVybiAkcChlLHQpfWZ1bmN0aW9uICRwKGUsdCxuLHIpe2lyKCl8fFkoITEpO2xldHtuYXZpZ2F0b3I6bH09Xy51c2VDb250ZXh0KEl0KSx7bWF0Y2hlczp1fT1fLnVzZUNvbnRleHQoRHQpLGk9dVt1Lmxlbmd0aC0xXSxvPWk/aS5wYXJhbXM6e307aSYmaS5wYXRobmFtZTtsZXQgcz1pP2kucGF0aG5hbWVCYXNlOiIvIjtpJiZpLnJvdXRlO2xldCBhPV9sKCksaDtpZih0KXt2YXIgcDtsZXQgRT10eXBlb2YgdD09InN0cmluZyI/ZG4odCk6dDtzPT09Ii8ifHwocD1FLnBhdGhuYW1lKSE9bnVsbCYmcC5zdGFydHNXaXRoKHMpfHxZKCExKSxoPUV9ZWxzZSBoPWE7bGV0IG09aC5wYXRobmFtZXx8Ii8iLHk9bTtpZihzIT09Ii8iKXtsZXQgRT1zLnJlcGxhY2UoL15cLy8sIiIpLnNwbGl0KCIvIik7eT0iLyIrbS5yZXBsYWNlKC9eXC8vLCIiKS5zcGxpdCgiLyIpLnNsaWNlKEUubGVuZ3RoKS5qb2luKCIvIil9bGV0IGc9Y3AoZSx7cGF0aG5hbWU6eX0pLHc9SHAoZyYmZy5tYXAoRT0+T2JqZWN0LmFzc2lnbih7fSxFLHtwYXJhbXM6T2JqZWN0LmFzc2lnbih7fSxvLEUucGFyYW1zKSxwYXRobmFtZTpkdChbcyxsLmVuY29kZUxvY2F0aW9uP2wuZW5jb2RlTG9jYXRpb24oRS5wYXRobmFtZSkucGF0aG5hbWU6RS5wYXRobmFtZV0pLHBhdGhuYW1lQmFzZTpFLnBhdGhuYW1lQmFzZT09PSIvIj9zOmR0KFtzLGwuZW5jb2RlTG9jYXRpb24/bC5lbmNvZGVMb2NhdGlvbihFLnBhdGhuYW1lQmFzZSkucGF0aG5hbWU6RS5wYXRobmFtZUJhc2VdKX0pKSx1LG4scik7cmV0dXJuIHQmJnc/Xy5jcmVhdGVFbGVtZW50KHhsLlByb3ZpZGVyLHt2YWx1ZTp7bG9jYXRpb246ZXIoe3BhdGhuYW1lOiIvIixzZWFyY2g6IiIsaGFzaDoiIixzdGF0ZTpudWxsLGtleToiZGVmYXVsdCJ9LGgpLG5hdmlnYXRpb25UeXBlOnJ0LlBvcH19LHcpOnd9ZnVuY3Rpb24gQnAoKXtsZXQgZT1YcCgpLHQ9T3AoZSk/ZS5zdGF0dXMrIiAiK2Uuc3RhdHVzVGV4dDplIGluc3RhbmNlb2YgRXJyb3I/ZS5tZXNzYWdlOkpTT04uc3RyaW5naWZ5KGUpLG49ZSBpbnN0YW5jZW9mIEVycm9yP2Uuc3RhY2s6bnVsbCxsPXtwYWRkaW5nOiIwLjVyZW0iLGJhY2tncm91bmRDb2xvcjoicmdiYSgyMDAsMjAwLDIwMCwgMC41KSJ9O3JldHVybiBfLmNyZWF0ZUVsZW1lbnQoXy5GcmFnbWVudCxudWxsLF8uY3JlYXRlRWxlbWVudCgiaDIiLG51bGwsIlVuZXhwZWN0ZWQgQXBwbGljYXRpb24gRXJyb3IhIiksXy5jcmVhdGVFbGVtZW50KCJoMyIse3N0eWxlOntmb250U3R5bGU6Iml0YWxpYyJ9fSx0KSxuP18uY3JlYXRlRWxlbWVudCgicHJlIix7c3R5bGU6bH0sbik6bnVsbCxudWxsKX1jb25zdCBWcD1fLmNyZWF0ZUVsZW1lbnQoQnAsbnVsbCk7Y2xhc3MgQXAgZXh0ZW5kcyBfLkNvbXBvbmVudHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnN0YXRlPXtsb2NhdGlvbjp0LmxvY2F0aW9uLHJldmFsaWRhdGlvbjp0LnJldmFsaWRhdGlvbixlcnJvcjp0LmVycm9yfX1zdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKHQpe3JldHVybntlcnJvcjp0fX1zdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHQsbil7cmV0dXJuIG4ubG9jYXRpb24hPT10LmxvY2F0aW9ufHxuLnJldmFsaWRhdGlvbiE9PSJpZGxlIiYmdC5yZXZhbGlkYXRpb249PT0iaWRsZSI/e2Vycm9yOnQuZXJyb3IsbG9jYXRpb246dC5sb2NhdGlvbixyZXZhbGlkYXRpb246dC5yZXZhbGlkYXRpb259OntlcnJvcjp0LmVycm9yIT09dm9pZCAwP3QuZXJyb3I6bi5lcnJvcixsb2NhdGlvbjpuLmxvY2F0aW9uLHJldmFsaWRhdGlvbjp0LnJldmFsaWRhdGlvbnx8bi5yZXZhbGlkYXRpb259fWNvbXBvbmVudERpZENhdGNoKHQsbil7Y29uc29sZS5lcnJvcigiUmVhY3QgUm91dGVyIGNhdWdodCB0aGUgZm9sbG93aW5nIGVycm9yIGR1cmluZyByZW5kZXIiLHQsbil9cmVuZGVyKCl7cmV0dXJuIHRoaXMuc3RhdGUuZXJyb3IhPT12b2lkIDA/Xy5jcmVhdGVFbGVtZW50KER0LlByb3ZpZGVyLHt2YWx1ZTp0aGlzLnByb3BzLnJvdXRlQ29udGV4dH0sXy5jcmVhdGVFbGVtZW50KFRjLlByb3ZpZGVyLHt2YWx1ZTp0aGlzLnN0YXRlLmVycm9yLGNoaWxkcmVuOnRoaXMucHJvcHMuY29tcG9uZW50fSkpOnRoaXMucHJvcHMuY2hpbGRyZW59fWZ1bmN0aW9uIFdwKGUpe2xldHtyb3V0ZUNvbnRleHQ6dCxtYXRjaDpuLGNoaWxkcmVuOnJ9PWUsbD1fLnVzZUNvbnRleHQoWWkpO3JldHVybiBsJiZsLnN0YXRpYyYmbC5zdGF0aWNDb250ZXh0JiYobi5yb3V0ZS5lcnJvckVsZW1lbnR8fG4ucm91dGUuRXJyb3JCb3VuZGFyeSkmJihsLnN0YXRpY0NvbnRleHQuX2RlZXBlc3RSZW5kZXJlZEJvdW5kYXJ5SWQ9bi5yb3V0ZS5pZCksXy5jcmVhdGVFbGVtZW50KER0LlByb3ZpZGVyLHt2YWx1ZTp0fSxyKX1mdW5jdGlvbiBIcChlLHQsbixyKXt2YXIgbDtpZih0PT09dm9pZCAwJiYodD1bXSksbj09PXZvaWQgMCYmKG49bnVsbCkscj09PXZvaWQgMCYmKHI9bnVsbCksZT09bnVsbCl7dmFyIHU7aWYoIW4pcmV0dXJuIG51bGw7aWYobi5lcnJvcnMpZT1uLm1hdGNoZXM7ZWxzZSBpZigodT1yKSE9bnVsbCYmdS52N19wYXJ0aWFsSHlkcmF0aW9uJiZ0Lmxlbmd0aD09PTAmJiFuLmluaXRpYWxpemVkJiZuLm1hdGNoZXMubGVuZ3RoPjApZT1uLm1hdGNoZXM7ZWxzZSByZXR1cm4gbnVsbH1sZXQgaT1lLG89KGw9bik9PW51bGw/dm9pZCAwOmwuZXJyb3JzO2lmKG8hPW51bGwpe2xldCBoPWkuZmluZEluZGV4KHA9PnAucm91dGUuaWQmJm8/LltwLnJvdXRlLmlkXSE9PXZvaWQgMCk7aD49MHx8WSghMSksaT1pLnNsaWNlKDAsTWF0aC5taW4oaS5sZW5ndGgsaCsxKSl9bGV0IHM9ITEsYT0tMTtpZihuJiZyJiZyLnY3X3BhcnRpYWxIeWRyYXRpb24pZm9yKGxldCBoPTA7aDxpLmxlbmd0aDtoKyspe2xldCBwPWlbaF07aWYoKHAucm91dGUuSHlkcmF0ZUZhbGxiYWNrfHxwLnJvdXRlLmh5ZHJhdGVGYWxsYmFja0VsZW1lbnQpJiYoYT1oKSxwLnJvdXRlLmlkKXtsZXR7bG9hZGVyRGF0YTptLGVycm9yczp5fT1uLGc9cC5yb3V0ZS5sb2FkZXImJm1bcC5yb3V0ZS5pZF09PT12b2lkIDAmJigheXx8eVtwLnJvdXRlLmlkXT09PXZvaWQgMCk7aWYocC5yb3V0ZS5sYXp5fHxnKXtzPSEwLGE+PTA/aT1pLnNsaWNlKDAsYSsxKTppPVtpWzBdXTticmVha319fXJldHVybiBpLnJlZHVjZVJpZ2h0KChoLHAsbSk9PntsZXQgeSxnPSExLHc9bnVsbCxFPW51bGw7biYmKHk9byYmcC5yb3V0ZS5pZD9vW3Aucm91dGUuaWRdOnZvaWQgMCx3PXAucm91dGUuZXJyb3JFbGVtZW50fHxWcCxzJiYoYTwwJiZtPT09MD8oWnAoInJvdXRlLWZhbGxiYWNrIiksZz0hMCxFPW51bGwpOmE9PT1tJiYoZz0hMCxFPXAucm91dGUuaHlkcmF0ZUZhbGxiYWNrRWxlbWVudHx8bnVsbCkpKTtsZXQgZj10LmNvbmNhdChpLnNsaWNlKDAsbSsxKSksYz0oKT0+e2xldCBkO3JldHVybiB5P2Q9dzpnP2Q9RTpwLnJvdXRlLkNvbXBvbmVudD9kPV8uY3JlYXRlRWxlbWVudChwLnJvdXRlLkNvbXBvbmVudCxudWxsKTpwLnJvdXRlLmVsZW1lbnQ/ZD1wLnJvdXRlLmVsZW1lbnQ6ZD1oLF8uY3JlYXRlRWxlbWVudChXcCx7bWF0Y2g6cCxyb3V0ZUNvbnRleHQ6e291dGxldDpoLG1hdGNoZXM6Zixpc0RhdGFSb3V0ZTpuIT1udWxsfSxjaGlsZHJlbjpkfSl9O3JldHVybiBuJiYocC5yb3V0ZS5FcnJvckJvdW5kYXJ5fHxwLnJvdXRlLmVycm9yRWxlbWVudHx8bT09PTApP18uY3JlYXRlRWxlbWVudChBcCx7bG9jYXRpb246bi5sb2NhdGlvbixyZXZhbGlkYXRpb246bi5yZXZhbGlkYXRpb24sY29tcG9uZW50OncsZXJyb3I6eSxjaGlsZHJlbjpjKCkscm91dGVDb250ZXh0OntvdXRsZXQ6bnVsbCxtYXRjaGVzOmYsaXNEYXRhUm91dGU6ITB9fSk6YygpfSxudWxsKX12YXIgTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuVXNlQmxvY2tlcj0idXNlQmxvY2tlciIsZS5Vc2VSZXZhbGlkYXRvcj0idXNlUmV2YWxpZGF0b3IiLGUuVXNlTmF2aWdhdGVTdGFibGU9InVzZU5hdmlnYXRlIixlfShNY3x8e30pLEljPWZ1bmN0aW9uKGUpe3JldHVybiBlLlVzZUJsb2NrZXI9InVzZUJsb2NrZXIiLGUuVXNlTG9hZGVyRGF0YT0idXNlTG9hZGVyRGF0YSIsZS5Vc2VBY3Rpb25EYXRhPSJ1c2VBY3Rpb25EYXRhIixlLlVzZVJvdXRlRXJyb3I9InVzZVJvdXRlRXJyb3IiLGUuVXNlTmF2aWdhdGlvbj0idXNlTmF2aWdhdGlvbiIsZS5Vc2VSb3V0ZUxvYWRlckRhdGE9InVzZVJvdXRlTG9hZGVyRGF0YSIsZS5Vc2VNYXRjaGVzPSJ1c2VNYXRjaGVzIixlLlVzZVJldmFsaWRhdG9yPSJ1c2VSZXZhbGlkYXRvciIsZS5Vc2VOYXZpZ2F0ZVN0YWJsZT0idXNlTmF2aWdhdGUiLGUuVXNlUm91dGVJZD0idXNlUm91dGVJZCIsZX0oSWN8fHt9KTtmdW5jdGlvbiBRcChlKXtsZXQgdD1fLnVzZUNvbnRleHQoWWkpO3JldHVybiB0fHxZKCExKSx0fWZ1bmN0aW9uIEtwKGUpe2xldCB0PV8udXNlQ29udGV4dChJcCk7cmV0dXJuIHR8fFkoITEpLHR9ZnVuY3Rpb24gWXAoZSl7bGV0IHQ9Xy51c2VDb250ZXh0KER0KTtyZXR1cm4gdHx8WSghMSksdH1mdW5jdGlvbiBEYyhlKXtsZXQgdD1ZcCgpLG49dC5tYXRjaGVzW3QubWF0Y2hlcy5sZW5ndGgtMV07cmV0dXJuIG4ucm91dGUuaWR8fFkoITEpLG4ucm91dGUuaWR9ZnVuY3Rpb24gWHAoKXt2YXIgZTtsZXQgdD1fLnVzZUNvbnRleHQoVGMpLG49S3AoKSxyPURjKCk7cmV0dXJuIHQhPT12b2lkIDA/dDooZT1uLmVycm9ycyk9PW51bGw/dm9pZCAwOmVbcl19ZnVuY3Rpb24gR3AoKXtsZXR7cm91dGVyOmV9PVFwKE1jLlVzZU5hdmlnYXRlU3RhYmxlKSx0PURjKEljLlVzZU5hdmlnYXRlU3RhYmxlKSxuPV8udXNlUmVmKCExKTtyZXR1cm4gUmMoKCk9PntuLmN1cnJlbnQ9ITB9KSxfLnVzZUNhbGxiYWNrKGZ1bmN0aW9uKGwsdSl7dT09PXZvaWQgMCYmKHU9e30pLG4uY3VycmVudCYmKHR5cGVvZiBsPT0ibnVtYmVyIj9lLm5hdmlnYXRlKGwpOmUubmF2aWdhdGUobCxlcih7ZnJvbVJvdXRlSWQ6dH0sdSkpKX0sW2UsdF0pfWNvbnN0IGFzPXt9O2Z1bmN0aW9uIFpwKGUsdCxuKXthc1tlXXx8KGFzW2VdPSEwKX1mdW5jdGlvbiBKcChlLHQpe2U/LnY3X3N0YXJ0VHJhbnNpdGlvbixlPy52N19yZWxhdGl2ZVNwbGF0UGF0aH1mdW5jdGlvbiBxcChlKXtZKCExKX1mdW5jdGlvbiBicChlKXtsZXR7YmFzZW5hbWU6dD0iLyIsY2hpbGRyZW46bj1udWxsLGxvY2F0aW9uOnIsbmF2aWdhdGlvblR5cGU6bD1ydC5Qb3AsbmF2aWdhdG9yOnUsc3RhdGljOmk9ITEsZnV0dXJlOm99PWU7aXIoKSYmWSghMSk7bGV0IHM9dC5yZXBsYWNlKC9eXC8qLywiLyIpLGE9Xy51c2VNZW1vKCgpPT4oe2Jhc2VuYW1lOnMsbmF2aWdhdG9yOnUsc3RhdGljOmksZnV0dXJlOmVyKHt2N19yZWxhdGl2ZVNwbGF0UGF0aDohMX0sbyl9KSxbcyxvLHUsaV0pO3R5cGVvZiByPT0ic3RyaW5nIiYmKHI9ZG4ocikpO2xldHtwYXRobmFtZTpoPSIvIixzZWFyY2g6cD0iIixoYXNoOm09IiIsc3RhdGU6eT1udWxsLGtleTpnPSJkZWZhdWx0In09cix3PV8udXNlTWVtbygoKT0+e2xldCBFPUtpKGgscyk7cmV0dXJuIEU9PW51bGw/bnVsbDp7bG9jYXRpb246e3BhdGhuYW1lOkUsc2VhcmNoOnAsaGFzaDptLHN0YXRlOnksa2V5Omd9LG5hdmlnYXRpb25UeXBlOmx9fSxbcyxoLHAsbSx5LGcsbF0pO3JldHVybiB3PT1udWxsP251bGw6Xy5jcmVhdGVFbGVtZW50KEl0LlByb3ZpZGVyLHt2YWx1ZTphfSxfLmNyZWF0ZUVsZW1lbnQoeGwuUHJvdmlkZXIse2NoaWxkcmVuOm4sdmFsdWU6d30pKX1mdW5jdGlvbiBkaChlKXtsZXR7Y2hpbGRyZW46dCxsb2NhdGlvbjpufT1lO3JldHVybiBVcChHdSh0KSxuKX1uZXcgUHJvbWlzZSgoKT0+e30pO2Z1bmN0aW9uIEd1KGUsdCl7dD09PXZvaWQgMCYmKHQ9W10pO2xldCBuPVtdO3JldHVybiBfLkNoaWxkcmVuLmZvckVhY2goZSwocixsKT0+e2lmKCFfLmlzVmFsaWRFbGVtZW50KHIpKXJldHVybjtsZXQgdT1bLi4udCxsXTtpZihyLnR5cGU9PT1fLkZyYWdtZW50KXtuLnB1c2guYXBwbHkobixHdShyLnByb3BzLmNoaWxkcmVuLHUpKTtyZXR1cm59ci50eXBlIT09cXAmJlkoITEpLCFyLnByb3BzLmluZGV4fHwhci5wcm9wcy5jaGlsZHJlbnx8WSghMSk7bGV0IGk9e2lkOnIucHJvcHMuaWR8fHUuam9pbigiLSIpLGNhc2VTZW5zaXRpdmU6ci5wcm9wcy5jYXNlU2Vuc2l0aXZlLGVsZW1lbnQ6ci5wcm9wcy5lbGVtZW50LENvbXBvbmVudDpyLnByb3BzLkNvbXBvbmVudCxpbmRleDpyLnByb3BzLmluZGV4LHBhdGg6ci5wcm9wcy5wYXRoLGxvYWRlcjpyLnByb3BzLmxvYWRlcixhY3Rpb246ci5wcm9wcy5hY3Rpb24sZXJyb3JFbGVtZW50OnIucHJvcHMuZXJyb3JFbGVtZW50LEVycm9yQm91bmRhcnk6ci5wcm9wcy5FcnJvckJvdW5kYXJ5LGhhc0Vycm9yQm91bmRhcnk6ci5wcm9wcy5FcnJvckJvdW5kYXJ5IT1udWxsfHxyLnByb3BzLmVycm9yRWxlbWVudCE9bnVsbCxzaG91bGRSZXZhbGlkYXRlOnIucHJvcHMuc2hvdWxkUmV2YWxpZGF0ZSxoYW5kbGU6ci5wcm9wcy5oYW5kbGUsbGF6eTpyLnByb3BzLmxhenl9O3IucHJvcHMuY2hpbGRyZW4mJihpLmNoaWxkcmVuPUd1KHIucHJvcHMuY2hpbGRyZW4sdSkpLG4ucHVzaChpKX0pLG59LyoqCiAqIFJlYWN0IFJvdXRlciBET00gdjYuMzAuNAogKgogKiBDb3B5cmlnaHQgKGMpIFJlbWl4IFNvZnR3YXJlIEluYy4KICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlCiAqIExJQ0VOU0UubWQgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICoKICogQGxpY2Vuc2UgTUlUCiAqL2Z1bmN0aW9uIFp1KCl7cmV0dXJuIFp1PU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKSh7fSkuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sWnUuYXBwbHkobnVsbCxhcmd1bWVudHMpfWZ1bmN0aW9uIGVoKGUsdCl7aWYoZT09bnVsbClyZXR1cm57fTt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlpZih7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikpe2lmKHQuaW5kZXhPZihyKSE9PS0xKWNvbnRpbnVlO25bcl09ZVtyXX1yZXR1cm4gbn1mdW5jdGlvbiB0aChlKXtyZXR1cm4hIShlLm1ldGFLZXl8fGUuYWx0S2V5fHxlLmN0cmxLZXl8fGUuc2hpZnRLZXkpfWZ1bmN0aW9uIG5oKGUsdCl7cmV0dXJuIGUuYnV0dG9uPT09MCYmKCF0fHx0PT09Il9zZWxmIikmJiF0aChlKX1jb25zdCByaD1bIm9uQ2xpY2siLCJyZWxhdGl2ZSIsInJlbG9hZERvY3VtZW50IiwicmVwbGFjZSIsInN0YXRlIiwidGFyZ2V0IiwidG8iLCJwcmV2ZW50U2Nyb2xsUmVzZXQiLCJ2aWV3VHJhbnNpdGlvbiJdLGxoPSI2Ijt0cnl7d2luZG93Ll9fcmVhY3RSb3V0ZXJWZXJzaW9uPWxofWNhdGNoe31jb25zdCB1aD0ic3RhcnRUcmFuc2l0aW9uIixjcz1lZlt1aF07ZnVuY3Rpb24gcGgoZSl7bGV0e2Jhc2VuYW1lOnQsY2hpbGRyZW46bixmdXR1cmU6cix3aW5kb3c6bH09ZSx1PV8udXNlUmVmKCk7dS5jdXJyZW50PT1udWxsJiYodS5jdXJyZW50PW9wKHt3aW5kb3c6bCx2NUNvbXBhdDohMH0pKTtsZXQgaT11LmN1cnJlbnQsW28sc109Xy51c2VTdGF0ZSh7YWN0aW9uOmkuYWN0aW9uLGxvY2F0aW9uOmkubG9jYXRpb259KSx7djdfc3RhcnRUcmFuc2l0aW9uOmF9PXJ8fHt9LGg9Xy51c2VDYWxsYmFjayhwPT57YSYmY3M/Y3MoKCk9PnMocCkpOnMocCl9LFtzLGFdKTtyZXR1cm4gXy51c2VMYXlvdXRFZmZlY3QoKCk9PmkubGlzdGVuKGgpLFtpLGhdKSxfLnVzZUVmZmVjdCgoKT0+SnAociksW3JdKSxfLmNyZWF0ZUVsZW1lbnQoYnAse2Jhc2VuYW1lOnQsY2hpbGRyZW46bixsb2NhdGlvbjpvLmxvY2F0aW9uLG5hdmlnYXRpb25UeXBlOm8uYWN0aW9uLG5hdmlnYXRvcjppLGZ1dHVyZTpyfSl9Y29uc3QgaWg9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuZG9jdW1lbnQ8InUiJiZ0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ8InUiLG9oPS9eKD86W2Etel1bYS16MC05Ky4tXSo6fFwvXC8pL2ksaGg9Xy5mb3J3YXJkUmVmKGZ1bmN0aW9uKHQsbil7bGV0e29uQ2xpY2s6cixyZWxhdGl2ZTpsLHJlbG9hZERvY3VtZW50OnUscmVwbGFjZTppLHN0YXRlOm8sdGFyZ2V0OnMsdG86YSxwcmV2ZW50U2Nyb2xsUmVzZXQ6aCx2aWV3VHJhbnNpdGlvbjpwfT10LG09ZWgodCxyaCkse2Jhc2VuYW1lOnl9PV8udXNlQ29udGV4dChJdCksZyx3PSExO2lmKHR5cGVvZiBhPT0ic3RyaW5nIiYmb2gudGVzdChhKSYmKGc9YSxpaCkpdHJ5e2xldCBkPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLHY9YS5zdGFydHNXaXRoKCIvLyIpP25ldyBVUkwoZC5wcm90b2NvbCthKTpuZXcgVVJMKGEpLGs9S2kodi5wYXRobmFtZSx5KTt2Lm9yaWdpbj09PWQub3JpZ2luJiZrIT1udWxsP2E9ayt2LnNlYXJjaCt2Lmhhc2g6dz0hMH1jYXRjaHt9bGV0IEU9RHAoYSx7cmVsYXRpdmU6bH0pLGY9c2goYSx7cmVwbGFjZTppLHN0YXRlOm8sdGFyZ2V0OnMscHJldmVudFNjcm9sbFJlc2V0OmgscmVsYXRpdmU6bCx2aWV3VHJhbnNpdGlvbjpwfSk7ZnVuY3Rpb24gYyhkKXtyJiZyKGQpLGQuZGVmYXVsdFByZXZlbnRlZHx8ZihkKX1yZXR1cm4gXy5jcmVhdGVFbGVtZW50KCJhIixadSh7fSxtLHtocmVmOmd8fEUsb25DbGljazp3fHx1P3I6YyxyZWY6bix0YXJnZXQ6c30pKX0pO3ZhciBmczsoZnVuY3Rpb24oZSl7ZS5Vc2VTY3JvbGxSZXN0b3JhdGlvbj0idXNlU2Nyb2xsUmVzdG9yYXRpb24iLGUuVXNlU3VibWl0PSJ1c2VTdWJtaXQiLGUuVXNlU3VibWl0RmV0Y2hlcj0idXNlU3VibWl0RmV0Y2hlciIsZS5Vc2VGZXRjaGVyPSJ1c2VGZXRjaGVyIixlLnVzZVZpZXdUcmFuc2l0aW9uU3RhdGU9InVzZVZpZXdUcmFuc2l0aW9uU3RhdGUifSkoZnN8fChmcz17fSkpO3ZhciBkczsoZnVuY3Rpb24oZSl7ZS5Vc2VGZXRjaGVyPSJ1c2VGZXRjaGVyIixlLlVzZUZldGNoZXJzPSJ1c2VGZXRjaGVycyIsZS5Vc2VTY3JvbGxSZXN0b3JhdGlvbj0idXNlU2Nyb2xsUmVzdG9yYXRpb24ifSkoZHN8fChkcz17fSkpO2Z1bmN0aW9uIHNoKGUsdCl7bGV0e3RhcmdldDpuLHJlcGxhY2U6cixzdGF0ZTpsLHByZXZlbnRTY3JvbGxSZXNldDp1LHJlbGF0aXZlOmksdmlld1RyYW5zaXRpb246b309dD09PXZvaWQgMD97fTp0LHM9RnAoKSxhPV9sKCksaD1PYyhlLHtyZWxhdGl2ZTppfSk7cmV0dXJuIF8udXNlQ2FsbGJhY2socD0+e2lmKG5oKHAsbikpe3AucHJldmVudERlZmF1bHQoKTtsZXQgbT1yIT09dm9pZCAwP3I6c2woYSk9PT1zbChoKTtzKGUse3JlcGxhY2U6bSxzdGF0ZTpsLHByZXZlbnRTY3JvbGxSZXNldDp1LHJlbGF0aXZlOmksdmlld1RyYW5zaXRpb246b30pfX0sW2EscyxoLHIsbCxuLGUsdSxpLG9dKX1leHBvcnR7cGggYXMgQixoaCBhcyBMLGVmIGFzIFIsY2ggYXMgYSxpcCBhcyBiLGFoIGFzIGMsX2wgYXMgZCxkaCBhcyBlLHFwIGFzIGYscHMgYXMgZyxiYyBhcyBvLF8gYXMgcixGcCBhcyB1LGZoIGFzIHZ9Owo="}},"time_used":20,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":8,"receive":12,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"fonts.googleapis.com/css2?family=Inter:ital,wght@0,400;0,500;0,600;0,700;0,800;0,900;1,400;1,500;1,600;1,700;1,800;1,900\u0026display=swap","fqdn":"fonts.googleapis.com","domain":"fonts.googleapis.com","tld":"googleapis.com"},"ip":{"addr":"142.250.178.106","port":443,"asn":15169,"as":"GOOGLE","country":"United States","country_code":"US"},"is_navigation_request":false,"resource_type":"stylesheet","requested_by":"https://1nch-svap.com/","date":"2026-07-27T09:36:06.133Z","timestamp":1785144966133,"http_version":"HTTP/2","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_256_GCM_SHA384","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"upload.video.google.com","organization":""},"issuer":{"commonName":"WE2","organization":"Google Trust Services"},"validity":{"start":"Mon, 29 Jun 2026 08:39:27 GMT","end":"Mon, 21 Sep 2026 08:39:26 GMT"},"fingerprint":{"sha1":"50:37:CF:61:33:A1:EE:47:D9:3D:A6:5E:07:BA:4C:FF:F7:25:9F:76","sha256":"7D:4D:21:06:63:E2:5E:F0:8C:59:8E:EB:B7:94:2B:81:70:11:D3:F4:C0:A0:81:A6:1B:E7:27:FD:56:10:1A:11"}}},"request":{"raw":"GET /css2?family=Inter:ital,wght@0,400;0,500;0,600;0,700;0,800;0,900;1,400;1,500;1,600;1,700;1,800;1,900\u0026display=swap HTTP/1.1\r\nHost: fonts.googleapis.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: text/css,*/*;q=0.1\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nSec-Fetch-Storage-Access: none\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://1nch-svap.com/\r\nSec-Fetch-Dest: style\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: cross-site\r\nPriority: u=2\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/2 200 \r\ncontent-type: text/css; charset=utf-8\r\nvary: Sec-Fetch-Dest, Sec-Fetch-Mode, Sec-Fetch-Site\r\naccess-control-allow-origin: *\r\ntiming-allow-origin: *\r\nlink: \u003chttps://fonts.gstatic.com\u003e; rel=preconnect; crossorigin\r\nstrict-transport-security: max-age=31536000\r\nexpires: Mon, 27 Jul 2026 09:36:06 GMT\r\ndate: Mon, 27 Jul 2026 09:36:06 GMT\r\ncache-control: private, max-age=86400\r\ncross-origin-opener-policy: same-origin-allow-popups\r\ncross-origin-resource-policy: cross-origin\r\ncontent-encoding: gzip\r\nserver: ESF\r\nx-xss-protection: 0\r\nx-frame-options: SAMEORIGIN\r\nx-content-type-options: nosniff\r\nalt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000\r\nX-Firefox-Spdy: h2\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"HSTS","description":"HTTP Strict Transport Security (HSTS) informs browsers that the site should only be accessed using HTTPS.","website":"https://www.rfc-editor.org/rfc/rfc6797#section-6.1","common_platform_enumeration":"","icon":"","categories":["Security"]}],"data":{"size":30450,"size_decoded":1838,"mime_type":"text/css; charset=utf-8","magic":"ASCII text","md5":"2e8535f181ea9ed8755f0198ed835bfb","sha1":"3e9727c2847bf4fc50022f986b4f908d76daa280","sha256":"20bf6869f108c6c3a01be7abf26b5c195bde53fc173cbdea8949dd7b4a017491","sha512":"85a2762bf9983f435803658ca0eccc39d337bd4ee6540f834447a2b1104f0fde7af529b2cdfb40ec21ad9a153675593faa089065f2e90f953ab4bff646c6ee3f","ssdeep":"384:vofefygBu0DftwHgM7V6f01QgTg6Nfbm1gelTEfiDegFiIPfhEjgwftXuM0p2+gk:T","tlshash":"7ad2cc92002be500aa931dc233cf7e3aadce11a97486d5b95ffd0cc96cdad27426875d","first_seen":"2026-06-08T09:00:32.501677Z","last_seen":"2026-08-11T16:46:50.805856Z","times_seen":30,"resource_available":false,"data":"LyogY3lyaWxsaWMtZXh0ICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzUzRndySzNpTFRjdm5lUWc3Q2E3MjVKaGhLbk5xazZMMFVVTWJtOXdVa0hYa0VBLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMUM4MC0xQzhBLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RiwgVStGRTJFLUZFMkY7Cn0KLyogY3lyaWxsaWMgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNTNGd3JLM2lMVGN2bmVRZzdDYTcyNUpoaEtuTnFrNkw5VVVNYm05d1VrSFhrRUEud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzMDEsIFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQovKiBncmVlay1leHQgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNTNGd3JLM2lMVGN2bmVRZzdDYTcyNUpoaEtuTnFrNkwxVVVNYm05d1VrSFhrRUEud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQovKiBncmVlayAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M1M0Z3ckszaUxUY3ZuZVFnN0NhNzI1SmhoS25OcWs2TDZVVU1ibTl3VWtIWGtFQS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wMzc3LCBVKzAzN0EtMDM3RiwgVSswMzg0LTAzOEEsIFUrMDM4QywgVSswMzhFLTAzQTEsIFUrMDNBMy0wM0ZGOwp9Ci8qIHZpZXRuYW1lc2UgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNTNGd3JLM2lMVGN2bmVRZzdDYTcyNUpoaEtuTnFrNkwyVVVNYm05d1VrSFhrRUEud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSswMTEwLTAxMTEsIFUrMDEyOC0wMTI5LCBVKzAxNjgtMDE2OSwgVSswMUEwLTAxQTEsIFUrMDFBRi0wMUIwLCBVKzAzMDAtMDMwMSwgVSswMzAzLTAzMDQsIFUrMDMwOC0wMzA5LCBVKzAzMjMsIFUrMDMyOSwgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQovKiBsYXRpbi1leHQgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNTNGd3JLM2lMVGN2bmVRZzdDYTcyNUpoaEtuTnFrNkwzVVVNYm05d1VrSFhrRUEud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDJCQSwgVSswMkJELTAyQzUsIFUrMDJDNy0wMkNDLCBVKzAyQ0UtMDJENywgVSswMkRELTAyRkYsIFUrMDMwNCwgVSswMzA4LCBVKzAzMjksIFUrMUQwMC0xREJGLCBVKzFFMDAtMUU5RiwgVSsxRUYyLTFFRkYsIFUrMjAyMCwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMEMwLCBVKzIxMTMsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQovKiBsYXRpbiAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M1M0Z3ckszaUxUY3ZuZVFnN0NhNzI1SmhoS25OcWs2TDVVVU1ibTl3VWtIVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQkItMDJCQywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSswMzA0LCBVKzAzMDgsIFUrMDMyOSwgVSsyMDAwLTIwNkYsIFUrMjBBQywgVSsyMTIyLCBVKzIxOTEsIFUrMjE5MywgVSsyMjEyLCBVKzIyMTUsIFUrRkVGRiwgVStGRkZEOwp9Ci8qIGN5cmlsbGljLWV4dCAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M1M0Z3ckszaUxUY3ZuZVFnN0NhNzI1SmhoS25OcWs2TDBVVU1ibTl3VWtIWGtFQS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzFDODAtMUM4QSwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUYsIFUrRkUyRS1GRTJGOwp9Ci8qIGN5cmlsbGljICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzUzRndySzNpTFRjdm5lUWc3Q2E3MjVKaGhLbk5xazZMOVVVTWJtOXdVa0hYa0VBLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzAxLCBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KLyogZ3JlZWstZXh0ICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzUzRndySzNpTFRjdm5lUWc3Q2E3MjVKaGhLbk5xazZMMVVVTWJtOXdVa0hYa0VBLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KLyogZ3JlZWsgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNTNGd3JLM2lMVGN2bmVRZzdDYTcyNUpoaEtuTnFrNkw2VVVNYm05d1VrSFhrRUEud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDM3NywgVSswMzdBLTAzN0YsIFUrMDM4NC0wMzhBLCBVKzAzOEMsIFUrMDM4RS0wM0ExLCBVKzAzQTMtMDNGRjsKfQovKiB2aWV0bmFtZXNlICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzUzRndySzNpTFRjdm5lUWc3Q2E3MjVKaGhLbk5xazZMMlVVTWJtOXdVa0hYa0VBLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMDExMC0wMTExLCBVKzAxMjgtMDEyOSwgVSswMTY4LTAxNjksIFUrMDFBMC0wMUExLCBVKzAxQUYtMDFCMCwgVSswMzAwLTAzMDEsIFUrMDMwMy0wMzA0LCBVKzAzMDgtMDMwOSwgVSswMzIzLCBVKzAzMjksIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KLyogbGF0aW4tZXh0ICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzUzRndySzNpTFRjdm5lUWc3Q2E3MjVKaGhLbk5xazZMM1VVTWJtOXdVa0hYa0VBLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyQkEsIFUrMDJCRC0wMkM1LCBVKzAyQzctMDJDQywgVSswMkNFLTAyRDcsIFUrMDJERC0wMkZGLCBVKzAzMDQsIFUrMDMwOCwgVSswMzI5LCBVKzFEMDAtMURCRiwgVSsxRTAwLTFFOUYsIFUrMUVGMi0xRUZGLCBVKzIwMjAsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDMCwgVSsyMTEzLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KLyogbGF0aW4gKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNTNGd3JLM2lMVGN2bmVRZzdDYTcyNUpoaEtuTnFrNkw1VVVNYm05d1VrSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkJCLTAyQkMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMDMwNCwgVSswMzA4LCBVKzAzMjksIFUrMjAwMC0yMDZGLCBVKzIwQUMsIFUrMjEyMiwgVSsyMTkxLCBVKzIxOTMsIFUrMjIxMiwgVSsyMjE1LCBVK0ZFRkYsIFUrRkZGRDsKfQovKiBjeXJpbGxpYy1leHQgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNTNGd3JLM2lMVGN2bmVRZzdDYTcyNUpoaEtuTnFrNkwwVVVNYm05d1VrSFhrRUEud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsxQzgwLTFDOEEsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGLCBVK0ZFMkUtRkUyRjsKfQovKiBjeXJpbGxpYyAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M1M0Z3ckszaUxUY3ZuZVFnN0NhNzI1SmhoS25OcWs2TDlVVU1ibTl3VWtIWGtFQS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDMwMSwgVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9Ci8qIGdyZWVrLWV4dCAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M1M0Z3ckszaUxUY3ZuZVFnN0NhNzI1SmhoS25OcWs2TDFVVU1ibTl3VWtIWGtFQS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9Ci8qIGdyZWVrICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNjAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzUzRndySzNpTFRjdm5lUWc3Q2E3MjVKaGhLbk5xazZMNlVVTWJtOXdVa0hYa0VBLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzNzcsIFUrMDM3QS0wMzdGLCBVKzAzODQtMDM4QSwgVSswMzhDLCBVKzAzOEUtMDNBMSwgVSswM0EzLTAzRkY7Cn0KLyogdmlldG5hbWVzZSAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M1M0Z3ckszaUxUY3ZuZVFnN0NhNzI1SmhoS25OcWs2TDJVVU1ibTl3VWtIWGtFQS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzAxMTAtMDExMSwgVSswMTI4LTAxMjksIFUrMDE2OC0wMTY5LCBVKzAxQTAtMDFBMSwgVSswMUFGLTAxQjAsIFUrMDMwMC0wMzAxLCBVKzAzMDMtMDMwNCwgVSswMzA4LTAzMDksIFUrMDMyMywgVSswMzI5LCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9Ci8qIGxhdGluLWV4dCAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M1M0Z3ckszaUxUY3ZuZVFnN0NhNzI1SmhoS25OcWs2TDNVVU1ibTl3VWtIWGtFQS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMkJBLCBVKzAyQkQtMDJDNSwgVSswMkM3LTAyQ0MsIFUrMDJDRS0wMkQ3LCBVKzAyREQtMDJGRiwgVSswMzA0LCBVKzAzMDgsIFUrMDMyOSwgVSsxRDAwLTFEQkYsIFUrMUUwMC0xRTlGLCBVKzFFRjItMUVGRiwgVSsyMDIwLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQzAsIFUrMjExMywgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9Ci8qIGxhdGluICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNjAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzUzRndySzNpTFRjdm5lUWc3Q2E3MjVKaGhLbk5xazZMNVVVTWJtOXdVa0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJCQi0wMkJDLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzAzMDQsIFUrMDMwOCwgVSswMzI5LCBVKzIwMDAtMjA2RiwgVSsyMEFDLCBVKzIxMjIsIFUrMjE5MSwgVSsyMTkzLCBVKzIyMTIsIFUrMjIxNSwgVStGRUZGLCBVK0ZGRkQ7Cn0KLyogY3lyaWxsaWMtZXh0ICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzUzRndySzNpTFRjdm5lUWc3Q2E3MjVKaGhLbk5xazZMMFVVTWJtOXdVa0hYa0VBLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMUM4MC0xQzhBLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RiwgVStGRTJFLUZFMkY7Cn0KLyogY3lyaWxsaWMgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNTNGd3JLM2lMVGN2bmVRZzdDYTcyNUpoaEtuTnFrNkw5VVVNYm05d1VrSFhrRUEud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzMDEsIFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQovKiBncmVlay1leHQgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNTNGd3JLM2lMVGN2bmVRZzdDYTcyNUpoaEtuTnFrNkwxVVVNYm05d1VrSFhrRUEud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQovKiBncmVlayAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M1M0Z3ckszaUxUY3ZuZVFnN0NhNzI1SmhoS25OcWs2TDZVVU1ibTl3VWtIWGtFQS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wMzc3LCBVKzAzN0EtMDM3RiwgVSswMzg0LTAzOEEsIFUrMDM4QywgVSswMzhFLTAzQTEsIFUrMDNBMy0wM0ZGOwp9Ci8qIHZpZXRuYW1lc2UgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNTNGd3JLM2lMVGN2bmVRZzdDYTcyNUpoaEtuTnFrNkwyVVVNYm05d1VrSFhrRUEud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSswMTEwLTAxMTEsIFUrMDEyOC0wMTI5LCBVKzAxNjgtMDE2OSwgVSswMUEwLTAxQTEsIFUrMDFBRi0wMUIwLCBVKzAzMDAtMDMwMSwgVSswMzAzLTAzMDQsIFUrMDMwOC0wMzA5LCBVKzAzMjMsIFUrMDMyOSwgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQovKiBsYXRpbi1leHQgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNTNGd3JLM2lMVGN2bmVRZzdDYTcyNUpoaEtuTnFrNkwzVVVNYm05d1VrSFhrRUEud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDJCQSwgVSswMkJELTAyQzUsIFUrMDJDNy0wMkNDLCBVKzAyQ0UtMDJENywgVSswMkRELTAyRkYsIFUrMDMwNCwgVSswMzA4LCBVKzAzMjksIFUrMUQwMC0xREJGLCBVKzFFMDAtMUU5RiwgVSsxRUYyLTFFRkYsIFUrMjAyMCwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMEMwLCBVKzIxMTMsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQovKiBsYXRpbiAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M1M0Z3ckszaUxUY3ZuZVFnN0NhNzI1SmhoS25OcWs2TDVVVU1ibTl3VWtIVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQkItMDJCQywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSswMzA0LCBVKzAzMDgsIFUrMDMyOSwgVSsyMDAwLTIwNkYsIFUrMjBBQywgVSsyMTIyLCBVKzIxOTEsIFUrMjE5MywgVSsyMjEyLCBVKzIyMTUsIFUrRkVGRiwgVStGRkZEOwp9Ci8qIGN5cmlsbGljLWV4dCAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDgwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M1M0Z3ckszaUxUY3ZuZVFnN0NhNzI1SmhoS25OcWs2TDBVVU1ibTl3VWtIWGtFQS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzFDODAtMUM4QSwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUYsIFUrRkUyRS1GRTJGOwp9Ci8qIGN5cmlsbGljICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogODAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzUzRndySzNpTFRjdm5lUWc3Q2E3MjVKaGhLbk5xazZMOVVVTWJtOXdVa0hYa0VBLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzAxLCBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KLyogZ3JlZWstZXh0ICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogODAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzUzRndySzNpTFRjdm5lUWc3Q2E3MjVKaGhLbk5xazZMMVVVTWJtOXdVa0hYa0VBLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KLyogZ3JlZWsgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA4MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNTNGd3JLM2lMVGN2bmVRZzdDYTcyNUpoaEtuTnFrNkw2VVVNYm05d1VrSFhrRUEud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDM3NywgVSswMzdBLTAzN0YsIFUrMDM4NC0wMzhBLCBVKzAzOEMsIFUrMDM4RS0wM0ExLCBVKzAzQTMtMDNGRjsKfQovKiB2aWV0bmFtZXNlICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogODAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzUzRndySzNpTFRjdm5lUWc3Q2E3MjVKaGhLbk5xazZMMlVVTWJtOXdVa0hYa0VBLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMDExMC0wMTExLCBVKzAxMjgtMDEyOSwgVSswMTY4LTAxNjksIFUrMDFBMC0wMUExLCBVKzAxQUYtMDFCMCwgVSswMzAwLTAzMDEsIFUrMDMwMy0wMzA0LCBVKzAzMDgtMDMwOSwgVSswMzIzLCBVKzAzMjksIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KLyogbGF0aW4tZXh0ICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogODAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzUzRndySzNpTFRjdm5lUWc3Q2E3MjVKaGhLbk5xazZMM1VVTWJtOXdVa0hYa0VBLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyQkEsIFUrMDJCRC0wMkM1LCBVKzAyQzctMDJDQywgVSswMkNFLTAyRDcsIFUrMDJERC0wMkZGLCBVKzAzMDQsIFUrMDMwOCwgVSswMzI5LCBVKzFEMDAtMURCRiwgVSsxRTAwLTFFOUYsIFUrMUVGMi0xRUZGLCBVKzIwMjAsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDMCwgVSsyMTEzLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KLyogbGF0aW4gKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA4MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNTNGd3JLM2lMVGN2bmVRZzdDYTcyNUpoaEtuTnFrNkw1VVVNYm05d1VrSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkJCLTAyQkMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMDMwNCwgVSswMzA4LCBVKzAzMjksIFUrMjAwMC0yMDZGLCBVKzIwQUMsIFUrMjEyMiwgVSsyMTkxLCBVKzIxOTMsIFUrMjIxMiwgVSsyMjE1LCBVK0ZFRkYsIFUrRkZGRDsKfQovKiBjeXJpbGxpYy1leHQgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA5MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNTNGd3JLM2lMVGN2bmVRZzdDYTcyNUpoaEtuTnFrNkwwVVVNYm05d1VrSFhrRUEud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsxQzgwLTFDOEEsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGLCBVK0ZFMkUtRkUyRjsKfQovKiBjeXJpbGxpYyAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDkwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M1M0Z3ckszaUxUY3ZuZVFnN0NhNzI1SmhoS25OcWs2TDlVVU1ibTl3VWtIWGtFQS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDMwMSwgVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9Ci8qIGdyZWVrLWV4dCAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDkwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M1M0Z3ckszaUxUY3ZuZVFnN0NhNzI1SmhoS25OcWs2TDFVVU1ibTl3VWtIWGtFQS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9Ci8qIGdyZWVrICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogOTAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzUzRndySzNpTFRjdm5lUWc3Q2E3MjVKaGhLbk5xazZMNlVVTWJtOXdVa0hYa0VBLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzNzcsIFUrMDM3QS0wMzdGLCBVKzAzODQtMDM4QSwgVSswMzhDLCBVKzAzOEUtMDNBMSwgVSswM0EzLTAzRkY7Cn0KLyogdmlldG5hbWVzZSAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDkwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M1M0Z3ckszaUxUY3ZuZVFnN0NhNzI1SmhoS25OcWs2TDJVVU1ibTl3VWtIWGtFQS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzAxMTAtMDExMSwgVSswMTI4LTAxMjksIFUrMDE2OC0wMTY5LCBVKzAxQTAtMDFBMSwgVSswMUFGLTAxQjAsIFUrMDMwMC0wMzAxLCBVKzAzMDMtMDMwNCwgVSswMzA4LTAzMDksIFUrMDMyMywgVSswMzI5LCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9Ci8qIGxhdGluLWV4dCAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDkwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M1M0Z3ckszaUxUY3ZuZVFnN0NhNzI1SmhoS25OcWs2TDNVVU1ibTl3VWtIWGtFQS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMkJBLCBVKzAyQkQtMDJDNSwgVSswMkM3LTAyQ0MsIFUrMDJDRS0wMkQ3LCBVKzAyREQtMDJGRiwgVSswMzA0LCBVKzAzMDgsIFUrMDMyOSwgVSsxRDAwLTFEQkYsIFUrMUUwMC0xRTlGLCBVKzFFRjItMUVGRiwgVSsyMDIwLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQzAsIFUrMjExMywgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9Ci8qIGxhdGluICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogOTAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzUzRndySzNpTFRjdm5lUWc3Q2E3MjVKaGhLbk5xazZMNVVVTWJtOXdVa0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJCQi0wMkJDLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzAzMDQsIFUrMDMwOCwgVSswMzI5LCBVKzIwMDAtMjA2RiwgVSsyMEFDLCBVKzIxMjIsIFUrMjE5MSwgVSsyMTkzLCBVKzIyMTIsIFUrMjIxNSwgVStGRUZGLCBVK0ZGRkQ7Cn0KLyogY3lyaWxsaWMtZXh0ICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMkpMN1cwSTVudndVZ0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMUM4MC0xQzhBLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RiwgVStGRTJFLUZFMkY7Cn0KLyogY3lyaWxsaWMgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWEwWkw3VzBJNW52d1VnSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzMDEsIFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQovKiBncmVlay1leHQgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWEyWkw3VzBJNW52d1VnSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQovKiBncmVlayAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M3M0Z3ckszaUxUZUh1U19uVk1yTXhDcDUwU2pJYTFwTDdXMEk1bnZ3VWdIVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wMzc3LCBVKzAzN0EtMDM3RiwgVSswMzg0LTAzOEEsIFUrMDM4QywgVSswMzhFLTAzQTEsIFUrMDNBMy0wM0ZGOwp9Ci8qIHZpZXRuYW1lc2UgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWEycEw3VzBJNW52d1VnSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSswMTEwLTAxMTEsIFUrMDEyOC0wMTI5LCBVKzAxNjgtMDE2OSwgVSswMUEwLTAxQTEsIFUrMDFBRi0wMUIwLCBVKzAzMDAtMDMwMSwgVSswMzAzLTAzMDQsIFUrMDMwOC0wMzA5LCBVKzAzMjMsIFUrMDMyOSwgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQovKiBsYXRpbi1leHQgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWEyNUw3VzBJNW52d1VnSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDJCQSwgVSswMkJELTAyQzUsIFUrMDJDNy0wMkNDLCBVKzAyQ0UtMDJENywgVSswMkRELTAyRkYsIFUrMDMwNCwgVSswMzA4LCBVKzAzMjksIFUrMUQwMC0xREJGLCBVKzFFMDAtMUU5RiwgVSsxRUYyLTFFRkYsIFUrMjAyMCwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMEMwLCBVKzIxMTMsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQovKiBsYXRpbiAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M3M0Z3ckszaUxUZUh1U19uVk1yTXhDcDUwU2pJYTFaTDdXMEk1bnZ3VS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQkItMDJCQywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSswMzA0LCBVKzAzMDgsIFUrMDMyOSwgVSsyMDAwLTIwNkYsIFUrMjBBQywgVSsyMTIyLCBVKzIxOTEsIFUrMjE5MywgVSsyMjEyLCBVKzIyMTUsIFUrRkVGRiwgVStGRkZEOwp9Ci8qIGN5cmlsbGljLWV4dCAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M3M0Z3ckszaUxUZUh1U19uVk1yTXhDcDUwU2pJYTJKTDdXMEk1bnZ3VWdIVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzFDODAtMUM4QSwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUYsIFUrRkUyRS1GRTJGOwp9Ci8qIGN5cmlsbGljICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMFpMN1cwSTVudndVZ0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzAxLCBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KLyogZ3JlZWstZXh0ICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMlpMN1cwSTVudndVZ0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KLyogZ3JlZWsgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWExcEw3VzBJNW52d1VnSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDM3NywgVSswMzdBLTAzN0YsIFUrMDM4NC0wMzhBLCBVKzAzOEMsIFUrMDM4RS0wM0ExLCBVKzAzQTMtMDNGRjsKfQovKiB2aWV0bmFtZXNlICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMnBMN1cwSTVudndVZ0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMDExMC0wMTExLCBVKzAxMjgtMDEyOSwgVSswMTY4LTAxNjksIFUrMDFBMC0wMUExLCBVKzAxQUYtMDFCMCwgVSswMzAwLTAzMDEsIFUrMDMwMy0wMzA0LCBVKzAzMDgtMDMwOSwgVSswMzIzLCBVKzAzMjksIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KLyogbGF0aW4tZXh0ICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMjVMN1cwSTVudndVZ0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyQkEsIFUrMDJCRC0wMkM1LCBVKzAyQzctMDJDQywgVSswMkNFLTAyRDcsIFUrMDJERC0wMkZGLCBVKzAzMDQsIFUrMDMwOCwgVSswMzI5LCBVKzFEMDAtMURCRiwgVSsxRTAwLTFFOUYsIFUrMUVGMi0xRUZGLCBVKzIwMjAsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDMCwgVSsyMTEzLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KLyogbGF0aW4gKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWExWkw3VzBJNW52d1Uud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkJCLTAyQkMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMDMwNCwgVSswMzA4LCBVKzAzMjksIFUrMjAwMC0yMDZGLCBVKzIwQUMsIFUrMjEyMiwgVSsyMTkxLCBVKzIxOTMsIFUrMjIxMiwgVSsyMjE1LCBVK0ZFRkYsIFUrRkZGRDsKfQovKiBjeXJpbGxpYy1leHQgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWEySkw3VzBJNW52d1VnSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsxQzgwLTFDOEEsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGLCBVK0ZFMkUtRkUyRjsKfQovKiBjeXJpbGxpYyAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M3M0Z3ckszaUxUZUh1U19uVk1yTXhDcDUwU2pJYTBaTDdXMEk1bnZ3VWdIVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDMwMSwgVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9Ci8qIGdyZWVrLWV4dCAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M3M0Z3ckszaUxUZUh1U19uVk1yTXhDcDUwU2pJYTJaTDdXMEk1bnZ3VWdIVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9Ci8qIGdyZWVrICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNjAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMXBMN1cwSTVudndVZ0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzNzcsIFUrMDM3QS0wMzdGLCBVKzAzODQtMDM4QSwgVSswMzhDLCBVKzAzOEUtMDNBMSwgVSswM0EzLTAzRkY7Cn0KLyogdmlldG5hbWVzZSAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M3M0Z3ckszaUxUZUh1U19uVk1yTXhDcDUwU2pJYTJwTDdXMEk1bnZ3VWdIVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzAxMTAtMDExMSwgVSswMTI4LTAxMjksIFUrMDE2OC0wMTY5LCBVKzAxQTAtMDFBMSwgVSswMUFGLTAxQjAsIFUrMDMwMC0wMzAxLCBVKzAzMDMtMDMwNCwgVSswMzA4LTAzMDksIFUrMDMyMywgVSswMzI5LCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9Ci8qIGxhdGluLWV4dCAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M3M0Z3ckszaUxUZUh1U19uVk1yTXhDcDUwU2pJYTI1TDdXMEk1bnZ3VWdIVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMkJBLCBVKzAyQkQtMDJDNSwgVSswMkM3LTAyQ0MsIFUrMDJDRS0wMkQ3LCBVKzAyREQtMDJGRiwgVSswMzA0LCBVKzAzMDgsIFUrMDMyOSwgVSsxRDAwLTFEQkYsIFUrMUUwMC0xRTlGLCBVKzFFRjItMUVGRiwgVSsyMDIwLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQzAsIFUrMjExMywgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9Ci8qIGxhdGluICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNjAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMVpMN1cwSTVudndVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJCQi0wMkJDLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzAzMDQsIFUrMDMwOCwgVSswMzI5LCBVKzIwMDAtMjA2RiwgVSsyMEFDLCBVKzIxMjIsIFUrMjE5MSwgVSsyMTkzLCBVKzIyMTIsIFUrMjIxNSwgVStGRUZGLCBVK0ZGRkQ7Cn0KLyogY3lyaWxsaWMtZXh0ICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMkpMN1cwSTVudndVZ0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMUM4MC0xQzhBLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RiwgVStGRTJFLUZFMkY7Cn0KLyogY3lyaWxsaWMgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWEwWkw3VzBJNW52d1VnSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzMDEsIFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQovKiBncmVlay1leHQgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWEyWkw3VzBJNW52d1VnSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQovKiBncmVlayAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M3M0Z3ckszaUxUZUh1U19uVk1yTXhDcDUwU2pJYTFwTDdXMEk1bnZ3VWdIVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wMzc3LCBVKzAzN0EtMDM3RiwgVSswMzg0LTAzOEEsIFUrMDM4QywgVSswMzhFLTAzQTEsIFUrMDNBMy0wM0ZGOwp9Ci8qIHZpZXRuYW1lc2UgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWEycEw3VzBJNW52d1VnSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSswMTEwLTAxMTEsIFUrMDEyOC0wMTI5LCBVKzAxNjgtMDE2OSwgVSswMUEwLTAxQTEsIFUrMDFBRi0wMUIwLCBVKzAzMDAtMDMwMSwgVSswMzAzLTAzMDQsIFUrMDMwOC0wMzA5LCBVKzAzMjMsIFUrMDMyOSwgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQovKiBsYXRpbi1leHQgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWEyNUw3VzBJNW52d1VnSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDJCQSwgVSswMkJELTAyQzUsIFUrMDJDNy0wMkNDLCBVKzAyQ0UtMDJENywgVSswMkRELTAyRkYsIFUrMDMwNCwgVSswMzA4LCBVKzAzMjksIFUrMUQwMC0xREJGLCBVKzFFMDAtMUU5RiwgVSsxRUYyLTFFRkYsIFUrMjAyMCwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMEMwLCBVKzIxMTMsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQovKiBsYXRpbiAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M3M0Z3ckszaUxUZUh1U19uVk1yTXhDcDUwU2pJYTFaTDdXMEk1bnZ3VS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQkItMDJCQywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSswMzA0LCBVKzAzMDgsIFUrMDMyOSwgVSsyMDAwLTIwNkYsIFUrMjBBQywgVSsyMTIyLCBVKzIxOTEsIFUrMjE5MywgVSsyMjEyLCBVKzIyMTUsIFUrRkVGRiwgVStGRkZEOwp9Ci8qIGN5cmlsbGljLWV4dCAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDgwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M3M0Z3ckszaUxUZUh1U19uVk1yTXhDcDUwU2pJYTJKTDdXMEk1bnZ3VWdIVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzFDODAtMUM4QSwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUYsIFUrRkUyRS1GRTJGOwp9Ci8qIGN5cmlsbGljICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogODAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMFpMN1cwSTVudndVZ0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzAxLCBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KLyogZ3JlZWstZXh0ICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogODAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMlpMN1cwSTVudndVZ0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KLyogZ3JlZWsgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA4MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWExcEw3VzBJNW52d1VnSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDM3NywgVSswMzdBLTAzN0YsIFUrMDM4NC0wMzhBLCBVKzAzOEMsIFUrMDM4RS0wM0ExLCBVKzAzQTMtMDNGRjsKfQovKiB2aWV0bmFtZXNlICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogODAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMnBMN1cwSTVudndVZ0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMDExMC0wMTExLCBVKzAxMjgtMDEyOSwgVSswMTY4LTAxNjksIFUrMDFBMC0wMUExLCBVKzAxQUYtMDFCMCwgVSswMzAwLTAzMDEsIFUrMDMwMy0wMzA0LCBVKzAzMDgtMDMwOSwgVSswMzIzLCBVKzAzMjksIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KLyogbGF0aW4tZXh0ICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogODAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMjVMN1cwSTVudndVZ0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyQkEsIFUrMDJCRC0wMkM1LCBVKzAyQzctMDJDQywgVSswMkNFLTAyRDcsIFUrMDJERC0wMkZGLCBVKzAzMDQsIFUrMDMwOCwgVSswMzI5LCBVKzFEMDAtMURCRiwgVSsxRTAwLTFFOUYsIFUrMUVGMi0xRUZGLCBVKzIwMjAsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDMCwgVSsyMTEzLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KLyogbGF0aW4gKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA4MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWExWkw3VzBJNW52d1Uud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkJCLTAyQkMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMDMwNCwgVSswMzA4LCBVKzAzMjksIFUrMjAwMC0yMDZGLCBVKzIwQUMsIFUrMjEyMiwgVSsyMTkxLCBVKzIxOTMsIFUrMjIxMiwgVSsyMjE1LCBVK0ZFRkYsIFUrRkZGRDsKfQovKiBjeXJpbGxpYy1leHQgKi8KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbnRlcic7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA5MDA7CiAgZm9udC1kaXNwbGF5OiBzd2FwOwogIHNyYzogdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9pbnRlci92MjAvVWNDNzNGd3JLM2lMVGVIdVNfblZNck14Q3A1MFNqSWEySkw3VzBJNW52d1VnSFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsxQzgwLTFDOEEsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGLCBVK0ZFMkUtRkUyRjsKfQovKiBjeXJpbGxpYyAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDkwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M3M0Z3ckszaUxUZUh1U19uVk1yTXhDcDUwU2pJYTBaTDdXMEk1bnZ3VWdIVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDMwMSwgVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9Ci8qIGdyZWVrLWV4dCAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDkwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M3M0Z3ckszaUxUZUh1U19uVk1yTXhDcDUwU2pJYTJaTDdXMEk1bnZ3VWdIVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9Ci8qIGdyZWVrICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogOTAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMXBMN1cwSTVudndVZ0hVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzNzcsIFUrMDM3QS0wMzdGLCBVKzAzODQtMDM4QSwgVSswMzhDLCBVKzAzOEUtMDNBMSwgVSswM0EzLTAzRkY7Cn0KLyogdmlldG5hbWVzZSAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDkwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M3M0Z3ckszaUxUZUh1U19uVk1yTXhDcDUwU2pJYTJwTDdXMEk1bnZ3VWdIVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzAxMTAtMDExMSwgVSswMTI4LTAxMjksIFUrMDE2OC0wMTY5LCBVKzAxQTAtMDFBMSwgVSswMUFGLTAxQjAsIFUrMDMwMC0wMzAxLCBVKzAzMDMtMDMwNCwgVSswMzA4LTAzMDksIFUrMDMyMywgVSswMzI5LCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9Ci8qIGxhdGluLWV4dCAqLwpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ0ludGVyJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDkwMDsKICBmb250LWRpc3BsYXk6IHN3YXA7CiAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL2ludGVyL3YyMC9VY0M3M0Z3ckszaUxUZUh1U19uVk1yTXhDcDUwU2pJYTI1TDdXMEk1bnZ3VWdIVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMkJBLCBVKzAyQkQtMDJDNSwgVSswMkM3LTAyQ0MsIFUrMDJDRS0wMkQ3LCBVKzAyREQtMDJGRiwgVSswMzA0LCBVKzAzMDgsIFUrMDMyOSwgVSsxRDAwLTFEQkYsIFUrMUUwMC0xRTlGLCBVKzFFRjItMUVGRiwgVSsyMDIwLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQzAsIFUrMjExMywgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9Ci8qIGxhdGluICovCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnSW50ZXInOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogOTAwOwogIGZvbnQtZGlzcGxheTogc3dhcDsKICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvaW50ZXIvdjIwL1VjQzczRndySzNpTFRlSHVTX25WTXJNeENwNTBTaklhMVpMN1cwSTVudndVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJCQi0wMkJDLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzAzMDQsIFUrMDMwOCwgVSswMzI5LCBVKzIwMDAtMjA2RiwgVSsyMEFDLCBVKzIxMjIsIFUrMjE5MSwgVSsyMTkzLCBVKzIyMTIsIFUrMjIxNSwgVStGRUZGLCBVK0ZGRkQ7Cn0K"}},"time_used":34,"timings":{"blocked":0,"dns":0,"connect":0,"send":0,"wait":34,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"1nch-svap.com/fonts/geist.woff2","fqdn":"1nch-svap.com","domain":"1nch-svap.com","tld":"com"},"ip":{"addr":"104.21.75.136","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"font","requested_by":"https://1nch-svap.com/","date":"2026-07-27T09:36:06.335Z","timestamp":1785144966335,"http_version":"HTTP/3","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"1nch-svap.com","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Sat, 25 Jul 2026 23:12:54 GMT","end":"Sat, 24 Oct 2026 00:11:42 GMT"},"fingerprint":{"sha1":"AC:8D:24:B7:93:96:7F:75:AF:8B:42:06:6A:52:88:B7:26:2A:AB:CA","sha256":"86:DE:73:A5:AD:EB:38:13:F1:14:61:D6:2F:48:3B:8B:38:4F:60:E5:95:4D:89:FE:BD:DB:2B:C3:94:10:DC:D3"}}},"request":{"raw":"GET /fonts/geist.woff2 HTTP/1.1\r\nHost: 1nch-svap.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: application/font-woff2;q=1.0,application/font-woff;q=0.9,*/*;q=0.8\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: identity\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://1nch-svap.com/assets/index-CciAAiIO.css\r\nSec-Fetch-Dest: font\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: same-origin\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/3 200 \r\nserver: cloudflare\r\ndate: Mon, 27 Jul 2026 09:36:06 GMT\r\ncontent-type: font/woff2\r\nserver-timing: cfExtPri\r\nlast-modified: Sun, 26 Jul 2026 12:28:53 GMT\r\npriority: u=3,i=?0\r\netag: \"6a65fd85-a674\"\r\nexpires: Wed, 26 Aug 2026 07:59:12 GMT\r\ncache-control: public, max-age=2592000, immutable\r\naccept-ranges: bytes\r\nage: 5814\r\ncf-cache-status: HIT\r\nreport-to: {\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=8qbgIPfsj5jntlTM0b63cTZM6tqg50npPSkhYE86ifl7qj95ZOgMc6L70hYFckUV6rc66SGSs6dOtjV166XLf%2FjQNHMLCehSRWR8PaswLXv%2FSBJPDfhdaLotSc3DswQE\"}]}\r\nnel: {\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}\r\ncf-ray: a21aa867984b5699-OSL\r\nalt-svc: h3=\":443\"; ma=86400\r\ncontent-length: 42612\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}],"data":{"size":42612,"size_decoded":43368,"mime_type":"font/woff2","magic":"Web Open Font Format (Version 2), TrueType, length 42612, version 1.0","md5":"b774dabdfbb02addd98914a25927758f","sha1":"199a6083ba759cbc9083e52f1ee07281fcd5f214","sha256":"94d6dbcb5864a6bc178849275630afd3ce067f1262bac7fd0995cc7580f722a4","sha512":"8d56911d6a1c0d692b0666ae248361b43e42496b069ceb891106ba2adf8911cca946fe9ea849979f81b41d22ae0e37e2b0b6a1f5a6496f272cacbeaaada0844c","ssdeep":"768:w6vrEYK8sd53MY7NNfiM72xRNZXndnfsS7N+xEXWrWKWA079V1:2BDckiM72xpXndnpW0Z3","tlshash":"0613f2a804f0c740569efd6a22a393074e087d7baaf1a57da9bf1b63c72500ed371a54","first_seen":"2025-03-03T17:47:39.924359Z","last_seen":"2026-08-11T16:46:50.80714Z","times_seen":282,"resource_available":false,"data":"d09GMgABAAAAAKZ0ABMAAAAByNQAAKYBAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoJpG4SXChyBMD9IVkFShHs/TVZBUjMGYD9TVEFUHCcmAIIcL2AKgaYYgYtbMP4MATYCJAOPGAuHTgAEIAWGKAenb1t+tpEM7y/E5f3QrNn1XFUQQVV1xEqkXbsxgNfTP7tCGbcn2DVcefMKujbfCnbMLkB3B6riWElm/////////+9cJs9elxywS/Iev1IKk7ZUOp3b3Ec3nQLSPAJ48lxbWBMh0equT13eDfs6y5i7dMg5TZxbSU0DXG7L/6IdcyktwB4d1anUwDnhs7Qr9SKcWNAIO6J8MTTJ1+R6E5f1dLoqw3dw+bZ23CjncGSEpNEpU7jawr6HnNAyq1RTjJQE3PA9jtI6yBn32Pta6MrFxcSnnBJwF1M/xGV1CsVkgHGng7IVaKRGpEqqVSZmrbj2h1G7ZtMVulSWYMaPQlZ0VZtQrvYkZ4ZyKqP6mZJPNFtxXSxqsQMlS4jV6FndwpYL9ewREmq1RwI7Zgfu4cDTDK7yVFNTXqRFm5C6fhUHoZi0KQMcxbRJC3lY9EENLtsbsCea3rn/gqn03wXi+j7qiFVcBolnSEISkqXswStiiVtpSZaHg6Z2PVg5NWJpH/Btn5qhlyHvc+7OKnWQhCR8KdHgkY30wKr3B57uU5/POlfnb9HxOE9tc9B19VbYMOf8rKNyU/uBlio3l4JWnQ/Iz9yn826UpnhdvMFWzjs4wh2r++/m+F/BHfwkGlmVdUA8NocqEW3srSdOfP3n/7f1a59DXhlhfBjFYCHqcL1GYVFeWpvSh13oxMuMr4qvyvAP3PRfglREtqXOxJCqMRNuTJgoE1PmRqk5FTQpS2hSikzU+CoMz2+zZ20YzcIoDEy0sbCI6k8LCBIKduGUuaiytrvptovtqnP2zNU7Aw9ERcX72P057jpNm6arQxTY8fTVs3siI8CMREd8px+RA/+txd4t/DIIgzBlOdwyhwoiiCGbiiWV+0TJolbds5AcgmAxOIN9aTAoEqw9pREe3cPnZv1DAnESSNAkhCiEBJcpVajo6BcX2tXTv+95T/JPpjbSEasy7UxhrGnJWYjXyrIsC3EpvmatCMJtq7h0dCzHiUwImRBCCCFcaaQ5DVloZCFkIWRxpVsrhBDp11+p/VVKfbV21WfP/7TOFdctQYKIBJGsnY9kg/PPiATJihtEJLj2M/8QgthfkKzzkyChG0ScbFZK+kudjOPYh7gvxrzoS2pdt81mpBtCEGtdx7GpNcE4NoQQJIiEIFnj+9u/XkLbCb+/snA70iQ8ZeGcCTOh3P7Gh3+oi71/HEh713KAURw2GSbUeJRBhlHT5NPnVr00nZbPdmeElXE6y1ZRxQiVCh0CrUwSGIMQJEiPiESZ+4qPut/WTnvf2/6PTqtvGUM8hJxFqPeouvqq+XGO8PVYLgA4QyEwUCxZJhFbsmXd56//tosGETFBJuKx2yD2lnNegg1igwwyyCQ3GeQmF2mkvzTSSK800kivFFIr9aW+1JdaqSf1xNyUrsP8/8N62BCC2Ii0Ii5DNvugH819vpnZDfABgpBF5Wtk9tO5EkFSIpKAqkd2lTzLagzEtYPwYmYXRPoHp64TNzMzV84QQpipRv6yLerg9pbcygtFURTFpaUZY8yBh/NL3ee7kIsyXZ1uQ9YGSBN3zvRRozTKAW71pWM55OChHaLqgGhwXsl5xEGEwPzPSeYHr9c1BA+QqoNLtJiQE041Avwv1fQtgY/wQWABcJFJHhRCJnBQCJl3J5GUbSok0lUuQ+5ceTz91Z7eletUu5Qrjwed334YJunVHEaMOUR89NAD3V/m0v5y631EVDj54px4FavFi8rL1SPSYV93Em/qzWbDMAxFyRCGNu1CMTbMlj/u6BotBmFloYw+uAE7K+R/v+Z7NigLqKoZFQDR5oXZfVW1GMaZGnf5h34//rfPN7GkyTRK14ZF84tYE29mjaEkPDFEpr8h4+uaLSpI8ytOFPsRWFoweXvU+d4TWkAGGbNtVqZf8LI1KhHk7g/kASDCwBKPsIXe+tbRt+nPBmozSNVldge4lkuwS3s1PZ7xnd/3GZeKC/I4o2FdfxklSSJJN/9hznI0kmwZ48Ai310Z+N84LX/52b6QeDHhtRODLKjsvM+nstkeCBUK+Dp6617TQsAf+5r3o5qWaJu2qbwtObEOjzOBDqMsCu9EpklGADQ2IACBQCebsTrYQKNTn/ohyJv4/9uGS+rCCgcSNGqjCiwY9Mb4Yww/cE5gXlY8AU/2gKgJishAwTGzouJ5SVRkVEJDf1+q1vU/fsECaMnFFic0bU8tVBqWQyI3Xk1v1sn0hHTazcc9ot9n46P7sQUSIC00IFogZY1AUlyBpAJEWmV1N0CDUKY1jtoQsjyxSUplSJxAaeRJKdIbUrjNbcM5cfe0tYfb3o4p3/a8h9sp+/+p2WcKdCX1sK4uuAZYO5OtcYwyZWG9h50z/eqtIdAyrMZ35NrGd2xCrkk5FypUqCBUEP7uluMfOQ7lqEyRs5H45//3fr1S1Z2S7XqKT+0ITd0AkK6nvJfj2ajcqB0i8iik/5FToKyR/ZGgAWO2X79Uqe+e1q0ddGohRC9MzAUwExT9na/V5GXDggJbBfjitBMz8wgev5v3L/XtTgYaWe/e1p6Hcl0SJohhPN/c6PdfERdi2ORsS2KQLjy2L1VP2nVyV46Gks4WYwUTen7mYc7KuXU383qMBgrZ53Fi7yj1PZCjvdfaXJaFECaEvmCMKKGIvyUr5L893Qs+x55s3wzUrSglfBGWEEKIUBUn1HHi/K73v3+r8/FzX/0VV4zYWmutlLKU0lpERGRmDvx3fd//vzGD83efS9xXuEpLJaUUQiqlldaWts5r7afvWfQ/6eFS/mEOY401aoyKingiImpNNTdFTPS5+2unWvHlxMa/k0G4DAAAXArwAiZLsWKklAWxsiHVJKROI9KsGbFrRVxciIeM+ASQkDDSoxcZEEFiYkjCMHKYw5DPfY585zsULsIFyvAIUTKSgaKLHUcYQAfIQ5TRh0pvbLFjePQhAL0ShjKW2OkQwIAB8gBnQRA4OGAZQAAUfEu5zDFhfRSneVFWTYvWDeM0L+u2H+d1P+/3q6rphmnVbafRdFueFmMjSoySY1QnvRXajhtlgEVlFeh6TEMzgcpksfkSpdbU5vRMSygQApzkiHPuIICg2Qq23gaGj5F+2N42K0wUAOw8BA1gOFWcYwmNOnT/b6zIuzbNaQ3Derj5rz0ikBMDIM7s31yUdBO/KzcVzxZvAUqDEV76B2iI5gG6+E+eG/qyPbMmKZ5058v2evdtLW7WgMR9OHeinK+tdFF/LMoXL4Devu099fnNh/Ph/d6i4sNbLl/DJ1CN3bb7jXcEdw1/9vga+ot/8d7r/V47a/YbL4huDn7B4QueXpPpcukQ+SHWH3M/sbe7fWWf+0ubn/0x9yNVvlO1CKiM3EX6vHulWWzu57fBt+Jbrtqxk/WU/mZ3xlwfu4a+k33XogKTLspMhf9u8RbXWZ/glit0XKmx3G/sL0wXb6l/v0TW577dbTqWlJO3rrvXEfAb949IdHiLeRSPcMt1u7vB1/CVr1Hgcz/CbbufFU51R5Gmw29UHLN3BHeqp467BouyTTOimRkvr2v8xALpHn2v914Jj/C9dhbnbjL/0B95QWIPNuaHoPeqv3CfTca1nhKQoyZq3WYSHTHYCQP6VzwwcBlO6Uz67gkMJc2vwtn9xulnUCJKQX18vd9MOakAFaaWA2PBy/zV7HNnXMpwiLn1OPx4bTERzS5dfmCR/qGHYuLaw/C/Nv4tUf+PfryNrHxGArBSIhMkaq1cb1CaLWqHT1qzVRWRiaRdsU4OEpcRtZKSwsaM6zZrXq9FxYC104M2HW2yE+6e6ySHzXOmRnJ3Ytptizdd5Qm4xzPc6wXu8wr3e4MHvDv9oA9+s+Yv3PcPHvjvMU/ZCZheSHQyfJaijAgHGZU18ULWyenh2ZC28KN57Io4cjsrczfvs55OM7z/AW/7p4IY8BCLdP5KSHJLf/uDpIAixUoksMLKa9X/Ct/ESmdHIuSsCiFS/xYiOjsUKx9PnCpqhA1BMfzt1ID/xF6SuvSJrLooPTHvKjZuk9wOiEIFaXQGk8XmlI4rQ34VXwng5aSmAJ8UU/sdslOoNNtst8NOu+x30CGHHXHUNTfccsc9DzzyxDMvrlffJBwtPaOZjjrupNPOOu+iy2667a77Hnrsqedeeu3t9f4r8RPYSPUzBDiAoBPmoZjqdwiHcSg/73sOEelkBgIYclTj82PsxILEabI7xalO05LGV2BMKFKmWGwOt9Vz+hbf+d4PfmzNNNtst8NOuzIJgGAExeKUIKugslFFdWi0On0SimZYztDY0exW+7wa3xoG/QrwkmAIFAZHDGnDog2LH9GYJTMRnsWvbyW8i8tqR+iMzXuttvZwOF1zK7QQGccRSBQag8XhCQKTiwDFECyRludVVIZKrdEiOr3BaDJbUKvN7nC63J7+WGJ/mSxgIS5sj0Q9hJjSe9DzBZTZoYmarcODyFDsx5uMALi/FtAqh/0OFtDzedMePl0FfojUUDHu3oRYpLRHPHxSSkCKsVcBSPohCWTK303SQ0aKdyaMazwmmGjS+2l2aCCT2lc2aHJGp/PoUK6Ay+JGSYdlWeLioKnc7ZOp8MO6KnnVO6NkprPYHG6LE1WTUDTDdq+gBy+Xp1AvIDSERUmulKmi6UbTrDZONgDAUISFoFjeUvIRCIvo56KLI65EohJKTSavoHJoFdWm0er0SadohuUMjdZ0LpppCavN7uif1J3lu9zt8eka1NrdOsux0V3rniWpPTrAUSeNGsrV5Z1mgxofoNMNFgQKgyN6dfR2nyE99In6EdGBweLwhJG4Xoqoo1F26OatEUwWm8Pl8QXCibx7xC45CU6KzeI1j3kKx2wplVpTW1JXP9TQmN1k6Vu7dZqtPRxO19fuF+ahbOFjhMXhCUQSmUKl0RlMFpvD5fEFwkCxIgfFECyRlpXsRflqFJWhUmu0iE5vMJrMFtRqszucLrcn0HI8IA8UEMSYSFSxayelfmqMpizbuf43mcVlQix6uKxxmzuvVVt52jpWChW9qYspzONkWyBxN85L4fUKjL7omWKxOdzW0PqONtBGs8lmW2ztPF0IF11y2ZX5t9NbGSAu2SbCiTs6Emxmk/e7JermvVZbezicrrmb3TwLlAGLwxOIJDKFSqMzmCw2h8vjC4Slmi8Tcxb4wnbDB7A2GxsTud+sCCKNxUVDF8apjKSFieNTAKL3E+kmjlhEnUFC2+wgwWKynJLT7GYZTDWXNS1c7ksL+X4+QLHQv+AXHUoNOl6OBlDlmy1GuupkGovN4b6teTmABYukSSiaYfN5QQjCoiRXrIqmG83ULWwnS6ABhiIsBMXy2vkIhPFKifklIZXJK1Q5okpqjVanTzpFMyxnaOxoxmrvzNWF2+PTe2r6RrVKLFd/C6oHNFgACwKFwRG9Onqbz4gkHhI1Sw5KqqW3M2Fz+cKJ+D1iyk6CldkUrG2FpjaFztA8zdJ30zrI1h4Op2tuw26exceAxeEJRBKZQqXRGUwWm8Pl8QXCQJkiB8UQLJGWlexF+ToUlaFSa7SITm8wmswW1GqzO5wutydeQqI+BpAoq7UDzhHQRT4w0wEsmoB/wMZ9VxcgK1wE3ULXnYXDOCFiHNoVXBVslp8gyp+68gaRr6wWg0ubiPNCYQaJiPAniSxPQsYp20m8XEZqO+JQN6ZpKsCVN2LQr+CNuFxuhBVNz8kVaSiqnJXNyJhpLDaH+1qLrBIu8iZF0QzbXaMHL5enkDQgNIRFSa5QRdMNVgAEIyiWVz4fgbCIYuIkppVQGjJ5RbFKq5Jao9Xpk07RDMsZGjuaDq/ZLFab3TEvQbfaQQeA4gULAoXBEXfROBIRK0NJ9dHseQTdS5cRTBabw+XxBcKJyD0xZUeCI8VmMTnFR0HcKqVSa2rz6uqHGpqxtE6wtYfD6ZrbttuzuBiwODyBSCJTqDQ6g8lic7g8vkAYKFPkoBiCJdJyU1SaSq3RIjq9wWgyW1Crze5wutyeQMsxgCpQQzo2iEktOzsRndNhdGV5Dnjx7U2VC2DxXBCBmHDBecj4dghhjOP9eTIXR0SY80MwzB2c+LLORX2QwwPNbWiTJlabDKTIbLI7RZPdyQ2oTtOCcxA6afZUeM9cijKcu4NqjHkYicqVCYvN4b6tKXM2CBPpklA0w+YpzA8IDWFRkisZq2i6wTyAYATF4iQGlYRUJq9Qpaqk1mh1+qRTNMNyhkY1Y7XPa+2tBugAacEBgcLgiCHtX7Rj8SMS8Uckv5tkSqomYuRx9vyiSdKLHmlyUo7C5lWGSq2pnawzNo+2tA61tZvD6Zpb45tn4WLA4vAEIolModLoDCaLzeHy+AJhoEaRghJDsERaXl5RiUqt0SI6vcFoMltQq83ucLrcntKFP7aYs1AsbC/E/1jTlAEBNKVD0OchH5s6AWEzjpfl6ZSFCJsao51PbYMQbk9dQHqAu30Z4njqKyTEAZJosjklJ6mQkpBWLIOpZtlwmstt51UAhcPTh1DUTJ9ztQSnhlE2K1cBHS8je6az2Bzu25rZ1F1YnKiRhKIZtrtYD14uX69QICA0hEVJrpSpoulGs2QL28kyaIChCAtBsbyl5CMQxgsn5pdYacjkFVY5okpqjVanTzpFMyxnaOxoOuZms1htdkdnyS53e3x6T2Jfq+kSy9UDqvQJ+EWBIVAYHNGro7f5DEn3QRG36MBgcXjCiD44JDaXLEqqj8bLoduwDGOy2Bwujy8QTkz6kXC3Mp/cYUdB/SpDpdbUltTVDzI0ZjeZLX3Lt83pcNfcpNw8Cx8TWByeQCSRKVQancFksTlcHl8gDJQpMlAMwRJpWaVelK9DURkqtUaL6PQGo8lsQa02u8PpcnsCKUcCqkAN6dggJrXs7HTkLq486QX+Yv/5//gDFCrNNtvtsNMu+x10yGFHHHXNDbfccc8DjzzxzIvr1TcJR0vPaKajjjvptLPOu+iym267676HHnvquZdee3u993wnZsSSfxqM5v+mwIfcnnjS/11HdO+/i4hhAFI0HYlModIyujNhsTnc1oywzXY77LSr/TjokMOOONr5QV3E5a7hhlvuuOeBR5545sW8wjfLABAYYkgllgaLH1GblZlIoVuyMur6jM1ta7ucc3e90Aw4AolCY7A4PEEAESgOAUukCpUG0RvNqM3h8pQqvmQMlsv28OBvRifrP4BCpdlmux122mW/gw457IijrrnhljvueeCRJ555cb36JuFo6RnNdNRxJ5121nkXXXbTbXfd99BjTz330mtve2//Zf7++le/a/6v3iPN5P/jOTxYNtU//7z6yMK49yXl5zpkyvtp/tOOTOpGNi3kWkPRlzSKZtgKVTTdaI5oYTuZBw0wFGEhKFYxQVkltUar0ydF0QzLGRo7mrHaOxN14fb4+CoolqsHwg0sHBAoDI7o1dHbfGrR9d1EBFBEkGIgWCIto5eXD1JUhkqt0SI6vcFoMltQq83ucLrcoMXzL5Z28EDQvqWgcwDlCIDLYE0AQubfWIwG3+Lgw5k8IuFsG4R83W40JlKHSLiMRUdOsSDf24J9O+5hONkp28m4b+JIaWShbkyT5fc+phATyaPIv9WhR0eKKEUiLZSjO6uYVknsYZMAyZVlsTnc1shnKUwLCA1hUZIrVNF0gyMAghEUy8uej0BYRDFxEtNKKA2ZvFJqrZ6k6AwsZ2hacYvbHPPaeZoB9hcRDDGkwZ+onyUag8XhCSOy8AlIXUkWJZXRZa/pbC5feI+6iW1+Tr6/kW4Wk9P0R6DgHVuq1Jq61A2DGnOZzJbWCbb2cDiv63HUesajLBRGWByeQCSRKVQancFksTlcHl8gDFQqclAMwRKpQqVB9EYzanO4PDGEJYYgTKidHU/nqHg3hCev7ws5A+FYvR67tfkL1xpErGonBKH+HFGx9kKU+HxMABA3PU4z9mY6i83hvtaUgzWdl4suz79tbmTkktE2Y3HI+GWpiZpJaTMF05pnLd3Vclpps6beknXYYJMtttlhlz32OeBQ/MwYLGwL2wvxHw9ZZUcjcPwWmuJLCWmlhLdsuT2IVjB+D/pd1uovyX5EagAEvju5jKAvQ2oqE0bzzcIkbpEI98eoBlSDDaqUjT55kbV8n17tyng2olNP7eiCP79Hqm4hEVLmQOd3fqZMnnigmmbzQjiWQHGv6TO15GBEmcMqt6yaK08h5JUhC6O71CtCCCEP3GsoYWJc0imaYfM1CrmCaaEhLEpyJXsVTTc4CiAYQbG8EfkIhCJxvEYiJFKZvILKcVVSa7Q6fdIpmmE5Q2NHM1b7vLycuqH1gGUHBgKFwRFD0rS0Y/E/E3ltkt8lZEqqXvUombC5fOFEVJ6YmpNg01tlMTmhne4tpVJrajPqGvoaac5iaZ1gaw+H09X9IWFPd7gYYXF4ApFEplBpdAaTxeZweXyBMFCmyEExBEuk5StQVJpKrdEiOr3BaDJbUKvN7nC63J4YgYWKiEmc2tkxd4K7wpOyvx1dfDYoCe9rI1HDkajU2EcyLwFY3OUcm5FnWog8SIrbbCdlxlukcmqsiqsXrQag2ryad2jlId0+1yv6jwCoSSjg4Aw8oJ1Z1BOMUGgkK65Jm3NTAiFHvbGvgBZajHjRSsouQx97Po1+YM5DgtxQ9a82NNqQb7PipwwC7A8/ODu2PXIZo/ETmTDGeeIbyJxOByklGQHtLMBGKPg+v37TAfQYRrLTOo1MgQHJTomAdq5tdKSENCcUMqY2LBtOc7mc51sUeFFsAejjKkqJUCa1rKKq0+pbTdNW9roSOaNeprPYHO7Hmq3L/27AA4QqmmHzJQsFgmmhIseiJFfKVNF0o2ktbCcbQAMMRVgIiuUtJR+BsIhi4iUTWUpCKpNXqHJcldQarU6fdIpmWM7Q2NF05M1msdrsjs7CXe72+PSe0L5WCySWqweqtMD9GWwQKAyO6NXR232G5P1Q9C0dGCwOT3gV4/AkfSzJUFL9fZ0CJpvLF07kp40TTYJNQ3bP+RQmbYlKrandW1emYVxjOpPZ0rde6zRbezicrrnpuD2LjwGLwxOIJDKFSqMzmCw2h8vjC4SBYkUOiiFYIi0r2YtyKm5VUhVqjRbR6Q1Gk9mCWm12h9Pl9sQIjid0hAm1s+Pv9OXhCk/KXvYcj/WcnuvIn9xfXiWe0zeNpIh3w8c/wVFxSDgul8inI8VxSvX8OknBaemhlumw7C3LnbucJ54X8EiBFM9aKo2EC1KGXVFhWdWLGhdXt0Yua2KtOdrepuwoJEDquV7uR/ywMRgM+sAFNuxKI0DK9xH0HApdOfpkFGHHPZ6vzrSGiFwa0Y7fMBCUUo+oVKYh0sP1mPsub4d4PbmB6tloUx37pnOnaHK4bUcq2pBAeo5lZKosG05zuS/M1zzoBgp3GVGMNlHQcRlCSUl/9uTZNy0tQ4Eweze5nplisTncxIkySSiaYbvr9eDl8hQKBISGsCjJlTJVNN1olmxhO9kAGmAowkJQLG8p+QiERRQTJ5GlhNKQySuoHFdFtWm0On3SKZphOUNjR9ORN5vFarM7Ogt3udvj4/XVMrFcPVClAxovHBAoDI7o1dHbfYbk/VD07aADg8XhCSM645MUkSxKKqOxc3RL1jAmi83h8vgC4URuOzH7J8FJsVlMjlP4YEup1Jrawrr6oYbGGiazpe8iWmfa2sPhdN3vmIejxceAxeEJRBKZQqXRGUwWm8Pl8QXCQL0iB8UQLJGWlexF+YIUlaFSa7SITm8wmswW1GqzO5wutyfgckigCtSQjg1iUsvOzkvn7PCuhCd9SOk/ME7lYJLi5SjJXF8n2WhmHFsRAWcuRK9yMRJTOYalj2tUTghyjd2sHtrQaCfNjWtZe8S8g8pvSHeQ62l/vjsGYOAE/AEK2LyBurjNwkNetKE+5o2khQBNGzSTPYaQxBW00GtjHq1EsQiGnhv96CcNNmSEDXVre2n1ENYyOhDyjIuLMNp/Li4UGTcJ0YPvOKLRD1+4fTjQsHuHzL52dLK4gS68ekiP18YyEq5HESQa34bsTtlNFnx/BSmX09SNaZry9mLPBUvx87oe8yOJ0iKjzQNMqp/GcWd9WXTKYTzGtNS784W4i2VkzitpKUtGgUxnsTnctzWvKLjQyFNIFOQNDWFRkitU0XSDWQDBCIoVlSkmniUxtCSkMnklaq2epOgMLGdoWneL2xzz2nwqDrC/iGCIoSxZBhxhRAMelypP//8gKKk2ESMbaxL8Ucr369njVOwW83k4+YBKrambbGoebWkdams3h9M1t2a3Z1EYsDg8gUgiU6g0OoPJYnO4PL5AGKhR5KAYgiVShUqD6I1m1OZwecpe/KIzLR3LHCysbOxvHadUtHFO+3kXfO9vEDeI3npaJxwj3g0f/wTcdkgwSg4J+e+QsPMiv/FhKdkpbFkNnaa24xOSji/NgMiS7JTDceWsywNnwYLv/syT0nuB3bJeCEiFrazqVhuX6quEJ9uaGxYBajfrZLTuONc770e0B8CXEwDMjRetBYPhb1kRCOtECPoUon3pKwnfF+o2xqnkVSLU/hH86/wVQH8XDAD0B+H97H7qjyMZ88WKlIOD5m+jAwVzRaejxI9Xor9soBr5MoLVc9rSt/jO937wY2to3egMeSPyEQiLxhV7BSqNztiUrjksVpvdMa8qp1YoLexQ+BN5l1AfHbRhsDg8YUQVV4JMSTU6k83lCyfS/sT6nQQnlbpZTG7DKRTdUiq1pjZ1w6DGXCazpXWCrT0cTleL+Y3oixO++eGXP/5RjP/cuWkhCBNqZ/U6VXk3hCflLnbOc8+p9YeJ31KQ957Eh5NZIqms2kEU8SeXnGFyuZzHXVlIDk+KG88iKagAw31YAUW/td11rNvnevft53vLCuCLCdQqUMDvRnjAcLyeUhCikSTI0bSZmgmC8iTaB2MLBsDHGrs6EMGbwvth8s1G843Ozb8rCsHXsGzsAvwai8EsEVB8SjbGacNXb6xpe9DrPLRH31TQpoFopGSRpsWSWlzaqYe9jx5z30TCrY0DSH6b1JJ9oYjz6UP27I8JOQ1WlsFULBtOc7mc91f+YQXH9lbR+aST7v8+gZL/+csou5QMHO99wAz5FPrWhCnBprlNv2XzV7O7MN/rSiwTdHWlHHhYpe8m/zLWUc9Msdgc7tua1wY5xImlJKFohu1eUw9eLk+hfLCa0BAWJbmyiCqabjQX1MJ2sgE0wFCEhaBY3kLzEQiLKCZePpGlJKQyeYUqx1VJrdHq9EmnaIblDI0dTeel2SxWm93RWbjL3R6f3pPe12qRxHL1GfrjBRovLAgUBkf06uhtPkP65lDkLh0YLA5PGNFhB0iMryxKqo/GztEtWcOYLDaHy+MLhBN59IDYNych8aTYyaK8MYVXtpRKraktrKsfamisYTJb+i6iVW0z2+kIp2tujm7P4mPA4vAEIolModLoDCaLzeHy+AJhoF6Rg2IIlkjLSvaifEGKylCpNVpEpzcYTWYLarXZHU6X2xNoOSRQBWpIxwYxqWVn56VzdnhXwpM+W67nIo7TEHicM8v8TK/VAv1R2Jy+KIi7jfM5fwoENCu8Kbwvwc1ovh2PI/i6nEgggJIXbYoXKm/PUwEZ0N3HxbU1dikYUXwjUBD2dC5KnPOylPwflYZVVdRYrp4b4GbNzbyl+SZpv0jXDmONdNvWG3e7D4McAPP8bHDncQ2Odp+51qLeU/MPEIkRjeTCG+sk/cFE35CKuIXv1X7tWTLZhH7a1cOPAbCr2zIE5J5hBLHQxkb3WRjjLPFaeES4y+0uSIV5Hw9RIiaIQRabqfFMmNIvAHRrlCKxKSQOJy8UeZRIApzvScABgakNy4bTXC4aD3UfAIUHETGaCAHSp1y0osSf9rlDH9s/hYsJc6UeLhYe9n2MZQqAVQ3a1jajaqaz2Bzu21rMS0CcWEESimbY7qX04OXyFKoGiwgNYVGSK7WraLrRXEcL28kW0ABDERaCYnnry0cgLKKYePm7wI+SkMrkFVSOq5Jao9Xpk07RDMsZGjuaTkezWaw2u6OzcJe7PT69eftarTlyvesfUHoGHwSGQGFwRK+O3uZzJ382FKdLGwaLwxNG9NORiF4gi5Lqo7HzSSdkGJPF5nB5fIFwIo+e2CUnwUlxQLY+zvRvA8//CR9QqTW1hXX1Qw2NNUxmS99FtM60tYfD6Zrbkn0UPkZYHJ5AJJEpVBqdwWSxOVweXyAM1CtyUAzBEmlZyV6UL0hRGSq1Rovo9AajyWxBrTa7w+lyewIsh8Tl8REARFiUZEWtnZfO2eFdCU9KczvK3HFapJ84Ha5TkBgaZcQr54tMBaCCw2kikoShjCAyDgGJ+BPkpT6Q6Nvol8AoJoDo30TpJ5VuqyrXVKwey4a+K4Okuckt4WDtydrJeLPuCNdLfRzBTQSk1hME3UJ/KN7CYZwewvPWEBJK6zokU2sVsjvlUBK17iPFWgP3p6iNIzC1YdlwmstFI7dxAG0c1NY0EEBpPdTmeRW3BiBYTC5rEopm2AJBrlAIi5JcSVFF041muha2kzXQAEMRFoJieWXyEQgTk0uRV1ilqqgOjVanTzpFMyxnaOxoOoxms1htdkdnpS53e3x6z0Jfq16J5eoBUKUDloUNAoXBEb06ervPkHx9on7ZaAwWhye8SkAU6ugarwmbyxdOzNcpyNpKmtpcuoZdjXNMlr4Z27o73PX0vNuILJ5IptKZbC5fGJhcBCiGYIm0LEsvyrMrKkOl1mgRnd5gNJktqNVmdzhdbk8p+7i+Ppuvvvvp9/X34O935anorg3kJhkB3VXLapyiQN9Vv9/gHGinrotgcj23ZthfKOZ7yorYuQMJbbkBSOFgsjtlN8mcWioMTnWa5rs0EkQEQNw4qlNrVS5Hl1wNc/UzMmY6i83htnCRNAlFM2x39h68XJ5CxqBAaAiLklyhiqYbHAcQjKBYXuF8BMJ4mcSEEisNmbzCKq1Kao1Wp086RTMsZ2jsaDqqZrNYbXbHvLzcmgX9JoBYGAgUBkcMydSh7F9aGCwOTxiRvkfs/CmQRUn10Sx8TLDPrj8WJovN4fL4AuE9kiam74MeRGzmUzC4FZraGrr6bkMjpuaMltahtvZwOF1zW3t7FhcDFocnEElkCpVGZzBZbA6XxxcIA8WKHBRDsERabopKU6k1WkSnNxhNZgtqtdkdTpfbE0g5Eq6KjwZ0ZIimbKnZWchdXPmFlMOLSAB+EOD5meSrq11XzvfoaxkJADWaGbuzmReWtlzXShp5U7jNF7CyKYaBW0ZW45T4jbymSbaCYkuYW+qbqw8yOU8nkE1A0kx2pxxPErsnFQGgbpIGOe8gm1Amgsl630y2xMhSrUyx2BxuwkWiJBTNsN0Ze/By+aSFREHe0BAWJblCFU03OA4gGEGxvJL5CIRxEhNKKA2ZvIJKq6KaGmqpC33SKZphOUNjR9PBNJvFarM75qXg1A0tBxQvbBAoDI6IVLRj8SPSdCQKVg5Kqo1m1Scdi8FksTlcHl8gnIjQIybrJMZv5rXpdPV7DY00Z7G0dtvaw+F03e/+6wMbEQMWhycQSWQKlUZnMFlsDpfHFwgDlYocFEOwRFq+CEWlqdQaLaLTG4wmswW12uwOp8vtCaQcBqgCNaRjg5jUsrMjz11QLPIeaY/NoMgNjTpSs8cDRrmRBGvCmv8wi5HGXV7Ql7JaaG0SaKWqhzBUjAX9NABDmKkY6rv+hgfEInPuDLdvdf0BpWpjFIkAn7YkO2WTxKbGm3ebd6kb04Q8PV5o4P1t0PNqf6DkVr4nH16pQcujGnXpc/QhAFOiL9GYVun4MsmsWWVt9mjks7SxMCGYHzrCoiRXqKLpBjMAghEUK0pXTGJcKfJK1Fo9SdEMm8PQtKwWbNdxGgLLIsAQd+qnGBxhJHUXKFAn1viQRLOTYkkWUyi9lWvqhppa+mwdcr0+iCGx4IlkKp3J5vKFgTlFgGIIlkgVKg2iN5pRm8Pl6Y/a/bkCf/V3mBUqVKpS/bFm/Y+B6GghGHjQx8H2e0k27kHXnFo4XaX1fmoA11kZCMX6Jfwzua/q98CK8W4EriMYj8RhAYCsI8R1gro5cAA4wLrkyMJHh353NZRHHNZ5FpuLk1zt1NC01T+QUQGsRbs8HScgTOuw6Wub0/TZtd/h5Mgx28L/h695eYzbWL8ODfb965HJzEeoHpD7/VrbtkWBt5Yz9V7weGhhtVQOea0xkOqxnG2lbhv77HfAwRYksiehaIYtpAsUCmFRkitU0XSDgwCCERQrKlZM3BJDSygNmbyCSquimhpqqQt90imaYTlDo5oOppmWsNrs13GrBzoACwOBwuCIoQxexnGEEWk6kvErByXVJiLriFk4qUJfKloIlWlqJ+hMzSMsrd229nA4XXOre3sW4GTA4vAEIolModLoDCaLzeHy+AJhoEaRg2IIlkjLyysqTaXWaBGd3mA0mS2o1WZ3OF1uT38eUn+bf/0/exU6nrY5fj6E98ab18+34c3+n8nCBmNxIv7eohfW/Hsvw2vfu3olzIqowP1MA4GG7L6lF4tK3R7wo80VxaVhXdfykIYeqNHHJCnvjLa2O2yvDh1Qeg8O8i6JOOoD29g5OILLY47SbnYsuTmGSu1atdbPW2SeTnjoI59b6JOW7M7Y2XRRwC6Rjd2wKOz/qi2pk59MIADqn8rykAekaw1pH/Ba711YuEhXgSQUzbDdqXvwcnkKKYKMoSEsSnKFKppucBRAMIJieZXyEQiLihWTmFOKvMIqVUU1NaHV6ZOkoBmWMzR2NB1DsyxWm/06bk2BDihbGAgUBkcMZecyjiOMyNRvSr2VjZKqu8bTP+rKEJPF5nB5fIFwIk4PiNk5CU6q7mYxObNburo2ta5+hKGJ5oyW1qG29nA4XfPYtkis44lkKp3J5vKFgSxFgGIIlkjLCygqQ6XWaBGd3mA0mS2o1WZ3OF1uT4BliVwVHw3oyBBN2VKzw+scJO9KeNLG/8k0p2f9DJnzFNrIM2MCgfr5Dse4xykSLgOJhiZbbUiZ3Pvn73qB5M36CJDvC8rQmBMO49jlI0d8EAJZ5CAWQQKrNI8eyCwUuQtEua+23EO5W2CqWTac5nIhj9nQ3IeeV1VUlp4GUGVVzMiY6Sw2h/u2JucRLFzkTULRDJvPXpgWFAgNYVGSK1ZF041mjRa2k2XQAEMRFoJiebXzEQjjJOaXUBoyeUWlyhFVUmu0On3SKZphOUNjR9NBNpvFarM7Okt2udvj03uy+lpNkFiuHqjSAY0XNggUBkf06ujtPkPS+on6saIDg8XhCXeJphh1dNXXhM3lCydm8yQcbaYpON0KTW1GXUNH40yTpW/etkEd7rrfMY+1i48JLA5PIJLIFCqNzmCy2Bwujy8QBgoUGSiGYIm0rFIvylegqAyVWqNFdHqD0WS2oFab3eF0uT3xEo4hNIQJtbNDzRFXmt44p7iTjff+H5eknWvLyLbs2IBZh133GWzD3nlde7GvuqdNxNMg83O6jRnqDjuCYnhiRJ/7+kJfzTff/fDTryT9Dsof2t8xXd8iN8qGabOxTHPZ2ujGtUcuvnXNBsK1FNdRXQ+6geZGupsYbma6heVWtts41pcmLXP5VZgcYCUGIUxZhraf7aGsGShzMmAgahNAVnvTsj0p5iWerWLNreJ6410fuD4d7RlZaSmGxumSglvMxqrmrtroxlnCXguJYS3JutLuMpdfxRfUs7Xrt8uo8xW/sfj8fvu35f8adCtsCIrhTfcSJHXpE1lvozQMNpa4TXI7IAoVpNEZTBabUzquDPlVfMa5bONHDTmMoBhOUpf+ZjJAoYI0OoPJYl/OD74/hPsHfpe7vcn7mRvvx2oYaoQNQTH8g6/H/WAvSV36A49KLzzyMPsf9APFbZItIAoVpNEZTBabUzquDPlV/MIsbPcg63LYHTJm1OhaUbdOjZqYafaWOfMWW8JKq21rOaFFfdkxW/dXAOtrzNdf50M50F1Q5Nas0ur4WF3HIUm6SHan5KR6sHENGy83wU10k740jfWBjKmybDhtkZPnpL7yXoP0cSPpTCvr4HqlV8J3qckVrWh1O8ZhLKXDZbon+JIrlNVotIhO34DRZIn2tWKzO7qX1QPAl8vTp7uwlGBxoSMsSnJFVTTdaFoL28kG0ABDERaCYnkLzUcgLKKfh1QccSUSlVBqMnnFCiqHVkmt0er0/VpHkpT324budzH+YP3J+cvQOLTZrPb+bvdPjf6PzqUEWQCJUkQrKatU6471uFvxlmDEpE0yKUal0Rnq2X2cGmhytS7vNBuScYDIhQWBwuCI+YPba//i7R+foby1jOMII7r/SJ5bOSipNhrRR2dkDWOy2Bwujy8QThQoJ/bxSXBSbBZTuHkr19QW09WPMDTlNVv6qnW0rT0cTlf/LuJ+t68PUggMFocnEElkCpVGZzBZbA6XxxcI+5goULI3iXwCfRb7AvkKe5f4JvW9bEH9wKt8uYpKVGqNFtHpDUaT2YJabXaH0+X2BFoOGFSBGtKxQUxq2dnJ6pwy3pXw5PWRD5zzjdqNwcMDDmS5tvNhtec9DD8aROU4946KE1psczN4eI6tRmRBHHJHK1MPB/44y8ddLKXRHsuReNYJMbOFOsKOoBieIGkp0WPa3CI3iqFxYj7dWE0zbW104yxhVyJJNnK9DUChgjQ6g8lic0pnliFXvP8oC0OHO7a4L+9+Nprp5waL933+7Cl05dhXKg+jkp/EERMOM7cCnkwgdhfhnUztyeGPu7e5yPkTnvxs8qOSy5DFzou5Rw45eSZDju2KPkm1NxMaUvSucsj9OSR9tAeId8qT69nq6z1lo/mTci0gvmK9/Hqi5w2aXkTPPqUv/5F3Cop2bjfT6aNbOS0XIp4PeJ3e/d9qoypf7uYvuZOQifviN91SaA7t8ayTHr3hazAMwOXq1q03Ej+lwy8eFCEA4P0M8hXzZ3pc5xyBsTioqgE4jc6BmjhSAQPv1zpjN030hn3ZRFrKuYAcaYP6EYT3QQAQAMpp9UHbkd2k45ihH7nA19XXxDXjTr6IZiJuAwG9/ph3kdqugig8iaxDP57Vv9p0aMMp9hSqPqBi6CKpo93z4xR0gQ0oR9bX9SHmYq6iihbS7uVrhHVEMnFHVKKOS+W7/m7SxS/NZaI3XCRZwKrkogGqyFTLMNqgQlP1KTKXa5eJbaRay8wb6F+dB9Uvh9REUCXleCLjhU9A1yZQ1DdKAz/Pnaizrl3afduY0BPhTd2DKV2hkHE3DmLK0NR2gXYqPdZMAgRTHRe0pQRvDDcfYdDVFR3n3BaGXcHsZgRidBk7+Ef+WKXFDadx6JlWWtC6jEIwXHRet2kVP/2AJ8mgBFqxz1P8ICpV6zuq9AmtW9lwmklpSEX7aV0cSQmwSQ+AihvmaSaW+wHw5aVys0CwhlvUePFPniByMHodD7XIOuO0x7kYkrzTmw0vGqAZuL/IYDe0IiqBOOWuVKi4qv4bwPxZIF+62s0pz99aNz8vms/3k7u5C26mzbvgdwFBIeHPD9FvfgRmlWw+oGPT2/jS1771g5/8cv12SFjxkghESf+d9aNjJU25rtz/jVmhbT5kJO2dWQbC5ksyQ5fFFv/8pqY5Ja1lZtc8a8zSwZFDKtp+8CHuNnJLk/lE6DB4I9v7jG2bsuQNkgu6QX6hX5XyO2Ik57OLihlT7TRyhWGvrppdiSl/DbAnU+f7UQ8cpGX4DV+9tPuv8QZ+dfWRUDGtD08nNeK23pWo3E3Pkg5pk/6qOXk535ZPuJ/ynwfB9+1iSgYpmlBuOrEhAE2kB9k2v5nlxuRDtO+IaZ6jmZqitgWAFP1BD+t0SS0TDCNxPWz6vmgfWVmF5GHKPE+bToAB5MiCphQJgBAVVV+SI7Qp3obGAJQw1hhJWZ6lHiqa1SogeNC6xeS9Gx9qPnx76MKVHXE7R5ncdFmFVY6leK6DmrDJ1wOMPBUQ+LolABCYCAjO2/ahz+CisWA8CPIKxAvgkOIh73wv81Uywia3WCselofxecFHHPQS9RGBD54UyxgjT8G0yeOqH/ILyjx/RTlLyBMAOISDcROfleZsIByTSJnBzSPt1CYFhjbXKsZG7P1bTSF5e9viEhTvQnaJdiKBLNR1X082u0jqoz6a4fw1pW56eL2+093WaDvFblq7NUX2dr6R3sGc/XsoL5sO/glFvXJA7GxOIrkbrzclW7vbrKGpR6uJNlpKfN5XMNLN9ox3cGH4R8MTi4RNINVzAIf1y62ZZxcd9MmKVXJrbIncidSMyMFKunmjpB4rmFU+uY05K6vFrbBVWYNndsxLADPqSQjcSFuqIiS0LsrTfgtm5Zm721URf2SlxOiQ+o0waE6AqyIAVZcaMiFUy+mYbAhwSCiZxGmhQ34PE30FIhpGztoXiIbR6CtNYvasmEKbSBRGl+urECIrxtRjTz1WgFUEKG5t+rgoWywJc7JAaBgNgAEQmgpGKmnMSHalCApZQACAViFEgcip4jRw+JLOAgiugRa899akdr/h+20HPQmmkb5r5nSm7lxsnuWuSKMxWRz7s7voPkcnrYpu87q4T44o8my4qWvYRCRRfNhF81K3bhXgVdH0RrktecPLgVXTEDY8oe0ICAYgZZGml+M1PhwzoL0nfZeDcXnLaLGKNlw8sH51ALxrYbbbc200N/hm8Qp+5mKSzKGH1UI0+9jduTiWQSFIFVDthqoh+HhN2jBgtQRXQ8sIAAAFAKsBS9Wgane5kAmLJIBG37qNwen7YriJtOZDe1OPjmHcst+Pj7dAXl5y+1RPNONkjMthdEQBjc7tkn3GlRsPxORHk5m5rjr9IJ2+rjzr3WPqGGDDW8FNdFciqfjgYpuuL1CDFSnKQ6uD3grw+6I0S940TG3Q+FQHb5sNcuK2rDIfcywrDy0XPFVLUvPhUpPreUUAbWLpCB7QPDQYnD6BkrQxd8n9zPo79j19X7QeuCfrmlWObahZqXgvs1RqWmUoMs7p1gPuKvI9ygcGqY2EVdO20filylAss/60ecCvPjK186XjLTtQaz/T3JdP+/RTyxSGth71Oe101JBKkKimULYOphnq7cX2m+I13pa+6WYyj79AERqWzYwOWZl62FlkiOOc6ppK4aaPG4RrnMRPr8NtOSF5umdAu3XNYRDvBLwKONaXkSruo9mmYbfQWfim4RqcgftDWi+FzX9FNuZkaGVMQ3L/PXBvnFEWBheY3nZucnTZ/nwxeGZ2WJfoc4v0pDfiQfThVVJFxkCLlQMZGwZ+flvMc4xjTpF1J/0OBoVaIEdQeCMI6x7HyM1dvJ1vL1dENz3npy0BwsCen9e/xj0t7SnjhjiJJ/8UAPg2OtWi0NUk07rVxomz+P7ofQssMq7rQqpfcZXiMYCJk0vsZJKhdVcE0QZh3csCUdtuxRF03kCkGgCg0TYAj8tFhvR+Ca5bQn/oFkWpMyhZxx+kX+ailwkEMIkOSOqUfJTX9nhTzgKhd42ln28V7YworrljN/TQgvP3kC4G9v6Tl3cprGt/rsqIgHs3Wu988tpWF3jRQ9tvX1m33KSq7REAbFTd2xq11EaUu/beRXhTe9Iyrv1hiO1OdyvHSkF4j3ZQA28mMD7Wx5oGfhKartgk50Wh0jLambDYHG7bdrUdO+y0y34HHXLYEUc7P6KLuNw13HDLHfc88MgTz3rB9eqbhKOlZzRz1jRY8qQZcAQShcZgcXiCACJQDIWRSBUqDaI3mlGbw2W+eI6cX5NYGHwCD7LvnXm9Q1cGzTJfsJphq2EOU0ecB/4eZnr+RnOEBAht7uZuPAiNyCfsCIrhuYPy4AuEosS4pCi6uFFiUplcoVSNEXAL20rAEUOK2SiGxolpubGaZtra6DbdgUvYm0iSJT9FBKBQQRqdwWSxOXkT6sOHDARCQ5HYSFJaoAw5YFF0XyH162E8ZiCMJ1/AxtfebeuI1RFu1i1gmdtqmIO2V/ve1cEj1w1euRcU6z+l5UGHMg/bqzxq79Dq0NCwIyiGN/1DFbmj88QXCEX3TWDLtp3EtKQourijxKQyuUKpusw3w5TgiCnL3iqoqg2pxEbxehFgVR3LrdQw+Xv0V9n52d5brJ6a79y1dZue1qyaJ250ghKd9CpTAlCoII3OYLLYnLxp9eFDBgKhoUhsJLnvDOy2134HjS2W1i5DfhXGPec/1gJ1Yt06eHxM3ViXfhm3ezqvrwFgkFqVUskS2ht2BMXw16m+Soik6DFtbpW3iqmqDdl4oxgax2JqbKyab+MSGokk2ci1dwmAQgVpdAaTxeaUzilDfhWQwUvn0v0b2sMyDOp9BvJMysYcRdX0lLnLXZrdZ11JmNP9jzM1tzQ0LuwIiuG55MEXCEVtTmgL23YSkBRd3FEiqUyuUKrGiDxhaSsJjpiy1F1SQVVtSPEbxVzUyy6pY7mVGiaH1uZXYl4yVk2PbrbRPHGDEnYlOmlkSRuAQgVpdAaTxebkoZ8PZCAQGorERpJ2Ynd7sd9BY4ulJcuQXwW5x+7/k0VYQ6CWMwywLcJbTzbmyNpoh2RwRu0pKcuD9jqPOkQBQoQdQTE8d1AefIFQlNyVgi5GIpWVo1Cqxgg4YWkrCY6YsoytgqraE/nOiBoap6akrS3dprvNx+0iJIpEBihUkEZnMFlsTt6c+vAhA4HQUCQ2upIvWMvmvu0C9n8AwHJ7Zz/WAfWoiTff9isVvEH1KUPdRyTUEQZBMfztFNSQILlJQY9pdiyyzUb50LjFbCz35qlo68btIiRCGrneBqBQQRqdwWSxOaUzy5BfBWnw/P7r4KMnpYSBJFvYfOlyh2YmrZrDoXbXjl91oN97NBx8t4LkdwC8gPo6uDtSXPiwISiG547Lgy8QihIk96agi5FIZeUolKoxBbewtUoOR0xZ0lZBVW1IkRvF0DgxvWysppm2NrpNDzIf10FIFCk5RQAKFaTRGUwWm5M3pz58yEAgNBSJjSSlNcqQX8VxyzufKZo6LSOzWOX8tMPPyi/gRaPhhdDeMAiK4bl9efAFQlESii6+VYJUJlcop8KGuRIcMWS/G8XQ2KZv4RI2iST5XeYAhQrS6Awmi83Jm1AfPmQgEBqKxEZXkoMgUn5JgIX2umVb3ZiDtjld1rHJLV25v1kNGTn7l5Zy6KV8XGWbb25HnvMFQlGbI9rCtp0Exe0SpDK5QlnF94y9vxL2EkpwxJR73yqoqg0pZqOYixpvdSy3UsPk0FIfR+JfyccfeOGFFx5Zt+lpze5tnrjRCX2JTsrbVR8+ZCAQGorERpJ2zmk39trvoLHF0rxlyK8CPNg9pQz22Dn8ytKXGAYXeAAAt8tFJDNjt6P7ljvpNuZ42dZHhGAxgH0PAiDZNtBCdPsYABDkiKAYnjsuD75AKEqQ3JuCLkYilZWjUKrGiDlh2EoORzyV3z1SRVVtSJEbxdA4FtPLxmqaaWuj2/Qg83EdhESR7jIAKFSQRmcwWWxO3pz68CEDgdBQJDaSlNYoQ34VsO6cwNQFae9p1Z1e1Kw+42YjNWpCepdskpMkRgiDTHrYEABExyD1VRMjWtjQuLAjKIb/5DsGeHGe+AKhKDE02ZGCLkYilckrUKrGSDph2EoOR1R++FVBVW1IqRvF0HiM/Bdhp5le9Ei6TQ8yH9dBSBTpVcYEoFBBGp3BZLE5eXPqw4cMBEJDkdhIUlqjDPlVvNHLVp7/vrc65L/kIp+A+0Yu3pss3EB+FvSBewTcqwT3AngAQbGLP56wPIvuHgH3AniAHtPyn3goj/YvPPLPaD3SPQIeaZrpRY+k+6Pj+MFeQqJIH3QvgAcoVJBGZzBZbE7p5DLkVwGbAcDzycvJwGen6eKBj4AJOZWaDtHNbmOONu3OHLwI6VSGawe+DUk/N8Hc4ZamU0voxHFsht3qsBAUwz/oe5B++cHoPPEFQlGb09rCtp0EyUEp6GIkUpm8AqVqjOAThq3kcMSUZW8VVNWGVGKjmIt62epYbqWGyaF1+hQDyFjdm6eqrdv0tGb3Nk/c6IS+RCfdZQxQqCCNzmCy2Jw8qw8fMhAIDUViI0k787Ybe+130NjiPQ1k8quAD/bMi8PkzDgg+mtgdl9y4MyX/OhyULgGI/26yfTwPvOMDfXOvEN0Z8Li+KtldN2Zb565Ioh2IG0IL0OkHkAXjaFUyifsCIrhueTBFwhFiXFJUXRxo8SkMrlCqRoj42BprZLgiCHFbBRD48S03FhNM21tdJvuwCXsTSTJRu5uA1CoII3OYLLYnDz084EMBEJDkdhIUlqgDPl8zDXFz3dvj8fgD+Nr+sV+73a+F/bAWLt+3/6rG7npYOAz0/HHSm+vszSSZg+rI26DSxVOVeiIxL7Xrt4ru7pxX/QHLy9pWh2PVAiNahxdh2+a6Jgry+enokhNulsbA7VOrTr8pNaHbEauvw2v5GowYBf4f0ErMrLWdv3B0LdmtQxveAT87iHLWM1knkZHPWc6eV7ysADYFNtlJ9IGS3PzjROon2WX82NzTDEhxXvk2BkvsjVA0Qwlo04ClX7hm2Mb9DKLHzcm2vRl6W7aPvT9vuXmcPQHHVtrhoiljVP0As56GLlqvEDQchtoaqu5ug6Z3taUIPevbCrGsUWWNNPbrbdJko3QxjipZUBXr3VNtVJYRr1PQnYgVEzXVIzLMd6Tc67HEJR8bC2kAZLsez9I/ZVRcOD1oibkqebneiMCiKBYiZoNxD2RFmhl5hBA23CrAVfsTIVQbild3iNKlRJCjO1NLn7VXCNi/FbgWtsMXv/c8U66HZi4zVz5JOgjD8SF1VY8y3Bjv4H4WOQU7It0364h/Hr7WVUjYv+oU+3YlY0yf+0X+3R08jsOs4z9hevGKd9gX4vWNN/ywS5jMCFGRuy5tdvSd8aLjoE5W8Jfo99s8oFqbHJK1q+5bMbGU62lIYXHddTeDBjlqwVGe6TN+hgHmetFeCHmtN40kJLBlcNXAjmxbrlhQO+T43h7Z3FtN9OEahbG2ebDLLVNU1boRJ/q+ZgUjSaMXhHLhhPJjdUVTsJV4SDpCW1Npon7AYGK94Tv0y56Q0SL1cs93hGSpTyKVzF0bQkuUSDHCLIvtG1W3GP0Jd27DoHEyt0+dGdMqmbmZfL0WTwU42KM3P+204pn8I5RK0gWW0jiCe7p2ngTMWOV6zgdbXZOF9rpoaLDDSN643MH9QtGIoUEzgsZxWQCuSQTvY3zipDh4u+QS89FDe8PnNIwaM7C8bTM/A8x3fOHskwdLvnlzdS1aof/EnfO66d4Jq5SJsk4cDD+a1SBhaF1NuowT086mabXBV0WufG2EiBI2aYjppPFncUzongWsjC3sVbcAA7fnpWV4p74RitX7diORnr7sqqmqzm0OogmKyvtJ2hLMD6It4R5TFjtMpt0H9TzmF9GRQYSB+MFeTvYki+uWCOoJiwxD2e3RxM4iWxDKc1cLqtX3dfjoVEu2UW2g1Ma380WWqdHN9LC2+xybVO/oVDprrmm+30bUAKl7Ny6XzMXEDFt+tQJ2HHU8aLGNpavIy0zqJORMzRVjH5gw14z4pX1dWE2IbYWbxsj9Pm4RHR6Ahe+pY+j1kTEMZ50Tdm3+nW09pdzJfU8NdpLYmIev6O0qDUSTVkn9egz/aqh9EExsm5VMYmihEOshTuXTpkg6zlrKzopxJ8ZooZRE3LGWLRU4/lAxcAc407MNOu6iLCm6RdBGmit4VXq5ZIxKAQD1oztUUSNThgGhNYwlNHbbRL4yZijf8YbakY0jttqp+x2GM/BOYqIdjrS1JygYb7ctyDHN/XswJ1HaqUfYg2qdZZQnazf71trE7OEh3fvNs8XEqM1SKdop53W4QfvFo7v64nuq37tturvWOhJ1PnYBLvnDH1keVR2yqqbQQl3K278Oa86K0kZvSJiV5B5ObL6eit5SOY85zmoE62NAcSBEB3ByN4dLSE94sBzO/63t3EfZiDBBDDTM6+bjLU7oa/FSRpzuqzPPkRXU6WI7rMyfr26XrERb3Ljwau17SLyKdphMqTnGxGtknT0zTbuuMqnN+W+elCf13E5EzOH/tq5nLGtI5x/Xq9LP5vc+dztRORFFTKrHoUGee1BXlf9gRbxBG7EUBr6Kz4kjoaUBGMOTNtPxDd8YoE4M/gRMVph5FLm6LqOzTjuTUn5JPLNDlD0uzJkREQTjf5GDCfH2W1Kru1eQShPgirDPjt57lPfD/EpZpKM8sk0zilv7+7/dbknutjCYws9GUpdmGO0ynpRckd9J4I0iP9dgUyFBnowDjIDOuV8FnscVgokYSclzagnyVEXtZni2kNHTeBvislh9WSGzTHvnPWvxy1qG8meZILcwfj+yCbVWaS1JqY7ZVHBt5xPWQsFVSIv0hAfLXlaora4Ov4ycLLVj4Bzlk1kt/CzUzNev+mbi4XO2OVeHGON+HMaOXc+TQl61VUWVYzICJaM9YaEOLJWLK6OXAlZs/edUb69ONuhNhmV+WwVusrPSrGdZifuHSSyYbH3w7LuuY7qvQh5lBNAYoEav71oFT2TyTMmEf9W39MoRqvClHHJ4wDpQX0M9N7pS/udQB1bjP3M4b75Gwea6L+do5mRMO0r+q5phBmaiKgrkovNhP1FmvUveEo0TaA120zXkuxKQ1UxDWSop2KU6bm1O4am5LL2fzry+1H683oTaT++MR5KDFkoiz7gOSRCtO2zcRfm4d3vNhv3K/NCYz2q6nd5uOqBjbl/1mNqUQ7NdwgADqIBoz/N5SugUHxapZSFmvW0oIpNGsnSfyw0p3eHlMZ9siw+EflinK6UMKzKGGzmIVpDtc3Tki1HG+oEy/rJqMps5eY6pcAFqpS6UaMpPyUVT/JtfjI/hZ/KT+Onwxn1v5jjB/khfphfVfNorbfP9iF3PzUP5HpupDD38yDFeZLnKc1L/fBH5W3eZTRCeccCH7W1LC/qUWg8rrZKEoKsTCmWF6uMWcVVf81rGgUISqx1aLiWcSKAhmPLxMEh4kNr6m9T+b5IPj+sHu+WF1/gKZd/NFopGwCpN50QBMw1xWBHMgQiKXccbQACtBPaigBH61SmKO5zB6yodYFxUMmxigxnzybWVxxF3i9xDTZaX+to7eX1jZ6wlj2TiwalWFLXGjisjDtywNT0dyySbw9FQLDvopELwi4mTA+ewdaxxNi/hj774pMPLDYXdxOuEA4OjlW3F8BonALI2/qdDAsuvVven5bx6oMBDCmi/453BNTKVMlSZi2rHuHO/PpVfmeQ+8XiW8YrjoPCnby05hcHR8uN93QklP+Qf3FQub2TLQvi9ithKbnWU0oAgShicOsNeWutEADtp4ZWSq4RcHvQaEBnAPF/kmI6XFM4b98+5a2+VACKumN6MuFkr6/USivckQP2oA2L5BthQRPGgw3Qq2rpFH05uN/JGJ5DL2+P/8DojTaHWs/mdfm13fnXjcbCE/7e7fNKmrKmiswNeXrtRxsWldDWxDEIQniaVRiGKS+nqCapIqugqmVeXY/OEhEnScsIgqGuuOw1OhRhLFrKBWV9WzYRGqJWzOie/3OZMOQx8URjk4FEiPn3as+MV8dTokEeRdAyQIB3VWB5d+PoXx7lywPyBA9gJH27PMnZGHUDu7zojc/WRqfv6FFx0xs5v/s8vjlf/PvzqeQi2UGEb0SiohZiKLFPxud//3tC8XPxy/BgOAMug2/c8gqhB7N9O51L6IUlHhiifxvwSt7nNfq4M6640j7yvy/97PunR84Y+737/OBLtMMwvhlx36+5+tfSZt6+2tJzanoO3D/oD5++NOdydSpO2bx/uZrhZ2hrncn/X4OOVzZs2MaWW2lToyZtadrTtve8F+1s1rzdrVq1d/SRPuwbdBbtH9EsGYwHiVsc6fG8k+PFeNXVBBG93uCiqy8DQ3/p+KJzGJfTHbSZKaLRfJdGHPUDEgaQHscj7Q7Lr7OpIpcksroWOrCocX5+FPdONJqXWNJ1Ogn2MlywM+X76aB4g2F/vcanV1nAyqFQvRI67BqpRVc5yN5yG3XvOKk4C0qRwjCvtJek0G/gTQ/zBSS2H05j5Rjgh+7TAnoNCfWLP7Y4z0eboHifC+5I0x1EGCda0fpwM2GZnjT3lTI6WV3EFMDrDQXF4+9Jr09FxouHGPZjEuXIS5PNThk8w8rUFmgsVsX8J3DtO5LZjTKVLc8+bgA/8vsH6skKtTOtw09/9QjziXzxFYnUBJico3LeUxCLvgug/mW3SXbDpkJ3faadbOxakaWX0sYExTbseMoF+HToJMaydJIYyYBZ62OpNglcdQoqBi9xvq8W9pZyrh84+3gmdEMK5WXUjvVfAQIYzw4YQDykyrNm28BB/sJOWWN19kevHbvN+ReHNzvyLR7GBGiZERqXl40oHo24xxt4jMqOWEqHHeORAR5vvFpQX3ovShL6fgaa2/iG5UtHN453eW6Ew1i/V2fCodBZb1ZR7o/KNh3FcedTSaaHHnS4oYdbQ2fN2tOj2rcIvWnfbs6vhjYequb13XW4hVgwzy7g20mai/0iy8xZ3xe6bray4LZHqOwhHSaF9jV3+A63pfMqqB1A2sbUsTxBLlBaV6kxiI28h4617aDw5rw2FjaOWSzuLUo3rvsM1XPTsvfiUYeky6nGt9mSBhAA39tgALr3IuydkP2bkPaOtiyg76OqzgPF+yu8rWvMAQwZO4uOftHeNHFLMLTNwwq1d7cPsHXzcbirLU3LXNtq4UFdlmKYn+n55TRsbnA3xfboXdOHoPA6bR7o5nnVSfUM4brnC9jPv+4q+mp5M0zLxlmWk6EBMGXSTJELcQeFu5vudTQ0v7NqIRyTon2tYrGljvySKng4eTcdtdzfZy9wSe4vm6c83uoV+WAv3W2lchfyzufvwEPe7Sj3J1uXYeV57kiVi6LmgNhdYuktq7BpjvQML4VBmjSq6FC9Lq6vUv3fWIVMOM1qqM2PPsaqxQRaNaECDevW3xsRaGBA9S0Ya2EHOvEUqWRxkG8KW7zagKuGk1HtcpFcWddzTxMqbLW+20TN70mIVtmPdKnbEKeNMuZxRJ6g1flUp48eRmlzvgxtGyDux8OqhXCPEMX2TLsPUNNRbFaKN5ejqrTUoafCVuKDp4+qDGUbD+V0on4JsvJcyucbW0Wts5futkIZPHvKvO+xNOsSoes5haCakyE7m5DMahR293mFkKXqW81tdZtdVfBgk5s/yWdLVsBn5/UNWgLylUUjijiuRGtWkXGEHEQ1fIl0nO4F9ZwS5goUrdkOaLRl2IGXah/JRnltnEKncT1rxpaYG3zNKWBQcgoZkNUxeDpNbAFLkB4IlpcDudjTW5Zx9yxn0Zxyjc/Km9Oej05FtVa9dLe1LNMsgXYeWbk4kWYAoKPWXBFcUzOE2cHM8TyrkW2o7LI0zXBMnbXvcHPb6sWJg0x+klmF7ToR6Ewxomw/j8oR8iSFzwOawooJ1iX3WLH+6O4rURZYd2DmoJlWno83eJJajsO0lV15lCx5wmXTjumFlvWK8zbM2a1ossY058dDC1Oz+cV0NSyEY1K00yG2WHRnM/cA4hWu0T1cpJnEkVO6vfxhV36akswEn89Ld8waZ+o1Xl+dkXSroj7TvXS3hTIrdp59cqGgfCxBU/cx58uuyFAJkl+NcV9hZUdQjcFq3OXCxGBUDkyEgRcXtLhwSBYlIoqR1I4EoK/s8i2xIGD0QIKNOUXlIp5TN4s1vLJyplUNrXMT1qjbq8PU6h2WPUxCU6gSV+psnNSmbrO+8znQEN1+1ZxpqCR2BqDRJKtjLNpIbFnV0rPjsDfkp1FnGU/ZHXEBC79Emj+kdi9UlSCNrKTF1rN3lemYCyiLwCURqKxALzpQScSD8E/ZjVJ0QYqn0QFvTbPkUmcutOIDlTE4AJV1n7AsqlNRUNGA5JHybF2fSqWY3/GkogFGy8tBGbNMsstKsuwzioGmW0VhQlVOs8asJBXnvjwmiQmpeKRrRlbHiKaFTgoYQfGAS46hKNNpTFlfVggk0itAJaAEm7K/ViufVMwCt2XlbttJNJ1JQwZNY8vCRs3CBi5mGy2rK2RjTZUGWay0MFhN6TvZ5giejcEq8Cw+PAOlCm9TAVeKKqioyBxNWS0NImiBh34I54k+6pAYhZ6ydR098ZW++nyzlSqVqaKVflSqTqbM3UNqve/tU9cdrVteaEXOQiPVNn6w50lZXk4NKerXCTjMXIZUq/vyh6X5VJIs8CtO7Tyy2KZl2TjGLaaoyIGwlaqxtFe8HGVh8Q1J4hpTtgIIqDUVkv8OeiVpA/ljPM8Y8xcg91b8I5z2Hfcz/8Hduzso97yIKXsQiLQ4bQ4hM4S90XxSizoOM8OsBmzZuL45WPvWpSuEP1oVGnVLQYaw98eyYWBRDogyiNFA4zg45NFCRpaQIwYWZZLR42V/1LEQuUSrUOkykCuAovhND1bGDZvksmkinaXMPrA4zsEAjYYHRlbHpGjXLEm6dJAJqOaCmKUPOzVLBXu6sQzR0CgDRQd6HIT644BRLiIZhXAvF1synCtwIOQ7mq4Cxb1PtVAudJN8S1rwF8PIBy532gLVf67L+Vveu5Ew+G320uc2mYuoJhRZRuLbduIsDZOSWvMOy/JdZaEpSf78HnHXWYizHJm9910a3cHg9dm67MhkWYEIA/GpKfuQWe+DuNPvkLkszFNQS7fgHqVop8NgCz6QpfxSv5zHQb/O9yP6/Bry4NP/+pK3gsmHwD5Q8vwb0mvjpbstK3ekv/XYdvTdQOENVjwSveuNcDjF8tnxNga1zA5sOS153CXzCO8dv6UO2+beRUQsHyRzqJPjq0kNrcGWx0Bl8306xklyHMdJyqi7tLiOoyzZQ3SbDCgLPctNHGUilzraR2QfPYRsqdoCp3phxIWA5/du+d6mjQaYm3b7FZYdki6shbBs0fox2cvJRjYx9o/USOPyRuaxV4Rxi+6dBI2p+BqeTODzR5aHMOwOhq1mmQM93g2JVTz9BbbCVrX8tVnbycxHrM0BzOr/6RZKQF4pnIcw3S7SGYIJsoH9BkMZHvwOLai9tw6jMfWxTTVE1RQ3a0i55ktiQdjg+rcvhlXZmEHqsoCmiwtzLdcPaGELRk+lmH4EKTMKdNNcGCdTNV2wYsmk9E8kYGWmcWZhD4KZsgePoRCGUm0zmCwOEfq6mdfIGAMPaJBxylfMdjRvYw26jZX5nYLBOCVrSDotrZqH9RdOZWHjmMXiASL0AdYFp89hKB0rm/lGwmhxOwHY4FizGumBBlswjLfJlDW4XuvDzfC6X+kNHK7C9fQTHmRIYxF9VoPyBSeqqiICoEEAiqtqBZTS6WZGFr7xuiVZ5yGD3rSrApTchEwwkMl0jXrKs0Zn3cssUuO/R3WphwurV9symgVKetcKCgdNg0uy/bkCJprZCj9PKaUA6SH1YCJyuCbtHk31Hf/tpicJ3oQzX0Jbt19c4NEzwvugYFeiOWoerBCHY62H1qji5zwV0M0IXfdxd7NpZKHUhP50IHNZJjPSPIyArAumSxCinPhbhj+dmgrxcGyK4rqmuOCdFikvmsqiUxyUoH6MSSupI5g6XLH66jq8yo2hXCviuqVOJnS8TIEsG1oNUjy7Vsrrlbb1MTVg/bUkVuoqKOHVvmVtkYkyHNBYYO4Dh/0MOF7LAcagBckKlqotVKU+ixfPzyccYEu1GQhL2oUKdZOzfPg/0VjKUnMzABqOI7fhOUAVIqkEMJ7AIYDyG0JRTuuk5ppQcXyjKI6/C6W4qQb5pDMN5c8rrfGFyhKnAp59rYDXm+x+UbOu9JqbCNQiPyf5RhZ+RN1Qc7G83X0c1F3r60FUSSapCFVqGlVstkBsB2dnWsKXAf0LlqITIKZPslQMKmTUFKMG4JwqdsQdkvjZpcqr7qAL0X0cQeLTWsRIxZVVbNZzZcuFGV24VMPlSVyzrmKmiwBRaDcDyqJl2b0MRRzG8Qpwf9VtFD0MTUhHmZ1Gw4IqfsSFVcU4JKQQfjI4O70YGhYNLzL2UNiNsYj2zkWt4gmKMhh5kYuARPsaOGf0xxiQW074+XVk+pfqaLwA5VkILwDasVIJORhGurlM0p6tSmaWZWjHr8JlQWZ/9F1dAOIFWay0cT+jUFlOUP4Zx8Nvfa5qr8rJpWF3oX0ytN7GkID9XZx3mmKRkEg0tqAs+41nnO3CCiMnOEcFH+mOyhxQZIoktne2T2wWyGpwgM42eHWWp/oUlUYmPxPK9KtKh1IcsdzWF24bWX8o394bFYDP+21X8epnsFqAfhGujfHtv2RmZMgSG8yAP36doFBfIkTMivQHnwYp8zQkOwyQcdfMTOeARHrJbquoXGEK8gpYmF+Fu87wlV3N5CEKBSNfG8S9Wsjjsd+HVHbtNOxRn0UIJsjaQD0wMtlY76lJhiiZ5jCss4m/6FDBwTSI1a+YZAMuihO/biKrao3fG0RcU4jG6zt+Y+IGA6kUIKsf4c7ISjQecpHFcORZi9HHxvwOt8A1WjulwrNHPKrAJDIRHoYrFARxSzgo5Y2o/r8YR7vxRgqjVgSntE5+IA3XiJcJtdLwfAXigorxkhCuGVX6tahhznYfQSSK//LBN8/5ALagBwcAd0ZerkhM+eFpHa+kBOynCqwn/bqk/O4nLAZKBbCRn+ELFB3ER+Z/40GUyKeYWJJZbnwwbW8pkBvuy1uT9Og2RdM+aOpm4+ejTdsUWaHY2AWoFuxr+jDZoNnOSTNaR5SeXZXT6CT/ZzraGtrsdVdpWVUtdBx731ZkBjqE0WuZOh3hpRPw0LCQFHUHnbmEMp9wFsJkMVEtHLQ1WIqGNIVJViuEUFGYVxkhrNLDgtYpTBhlMYuxKKMIWlwUbk/OS+407c50mkX5hYQFhYQF/4BIVOFrW2gz3upNGt6gL+GKMkXXtcHK8ecTSnSycNvxBPY3TwCsExUvmdGXwf1BvcpeNtUkdeo1aNTMrpWLRxeZj19ASFiPXgMGDYmISRh2mM99Fy4yPPwIIkyGTEAE2R7rmREpF6NXyERgCY5mpz6X/fWKIQDAgR0Cin8K6j0RFP9xAnZY8/PmHH7HNOy/UECzpm9Rlk+6sh4oW0SmHJTVdJqkXJATybsML1N6NMbY8gTo5ziB/jnKgBUaCGzuDgC2WouB7VCzvNFUOaUO0XVb5Y7WjX62vX0EqPtd/yRehsv4jEnF0sLAgjfs8nmabzZ4bh8wrITOkppfdZeuCvCHlWevlz43Hz1xPwOKIqAZr2lBIhuK1YI229jbjNNNOWxcr1zwHFFueGpmexqAR3kYI7Yr40+wkCnFY0/Pvp2DOGCPM2PvJH/OUNAG7jIUYz433OdLg3eArwHoNF/lIRctMXYDa94df0nGo6xaxVOuBrqSTaGVFKkHg2uBXeYCDO1nbzSjExG72Z/d5fGTNryFnTybToovVfLB+Gy/eD+t9FhsJLhPVZ07QoidAmSIV9Kx9bya7Yi0ofjXeEa5ByBmfhH5gDHZKeKSqK9ki2eS84HUnJLYJcoXgNa4VFfTvra2+s0nzEmmonKSjKUrqEk0Fox2NMaE5SQr7idpSaBEXT7Gn9TVjAtT+tVTmmtvbt5Ixt0kV5qzmESNPWnHJyjmXqOwtR9MaCY/g8Al/H0IMSNZSYQtq8IV8OVt108ApNK8Tya8IQfsgspt4X1eH+92TofCDEXIUxSO2tL1NYGQk9JG12+kVaVgvMGpUE1ez3MrI5be5J0iAp9dwmzgZ0ellAEZWIjE6+KjTeO1/tgCAxSq6Gd1aEUxWbH436tCIWwzhUOjcByAHe9Tcsaa25lDS+57SU5y4omlf+AiJIktyM2QiytvQuf6yOxe+PtYGELyi01j8BAhQ8UcOkysdgPGRpCt3i2srTm65teiVEQF8qglSgAFECp1iFflBXk2gVWWAsWs6/GiDt2oXxGgAj4X+bYGynreN+cJr4jXi9zdA74eMTiJtrcvVftPuFiaDjTpb6kRhIbwtpvi9qWvwdjlvYuOV9Iyvc4gEIrEcpNRbTErtJqvIMGLl3YV20eeDdPGo6hXv4UG1Q1b7nHTnvay182a943V5mg0m6XECYAK/FgJf+kM/oaDX/jyaYFfpgsUK8qtMIpTmYHNz7R/YIZ2r22RDc/EWVaNG0ekwN7tUcUlZeWVVejqmrp6TEMjFkcgkigMJovNEUs1Wl2bfQAwhACnKsPNB69bhE6uupQOhzeseWEGZUenOYnsa6XeB4AHt4Pz26b5ZJVWpfgCtUpB0POtHRKlKpvYOkPKBSG3VEtPkkHyuPZSyUdCXdCVrOVunWdsIwL61El6PQMQGZZlIiQ9QJFBiftNKFdED6ICqnVeWMxkhQgWJCtYnSpAhYFW3rqUz5f5hYvZeZSblsGE9YTLWfo3qezH7+5nztKgsJNLeev+hyq1Ij13juatZR0h6Ncfrl+3hIvfx1KtsHL7mMC0sTuRMkNs0dI0EuMPRuhSXo1m4d4Il5KdwwTQzbVLA8tSrRQwgrNNgZ9tKa2DcOuJQjtLNpu2vZ2/Idt/Rllip7uIjmQGA/WnIOzGGsR4kvGa7Wmn6FB51lOO0xlBR1HKnMCNO3qoUwDB2+eH9hCMFNjUHA6LhSIstgrcBRDAf5u7NtQa8Rjzgl5n1B4NFC+6AXQtANgOAwYwYwjRoO80cTF24oEjNsJpDFG/6jHwca6PvmR9f2H43dyU+c2Vz7z4klAyxK0tTqIo4v7m38FMweRI16nRpE0nPbzSbE951I2qqJY+P+WP0e3w9pdcE8OiIEqiJtbEV47NEyF5J8cAmF2tWp0WnXSMrjUiqrQ2/Fnp6SMYyB494kUjDverii//bp9H5R8y5+/zd/mbPJ2nMuav8zv5pXzsHnGe0Drg/3fTE/TT4kVqkZqnfNQMNUl17kz26j+5qHDycV8ZZE0ZTQ0riSrzOHbp8953MWIDi9r4qw6ONECCz3RSRoB6EU7OGNDzA5ySqWWSU1vbv9LChy//o6GYEWhflD/iTwEgANUIzdCIjWm4Lle3oEwxRZ24JrUmxdCekyjLWzm205YYSHqdOdcoBbTU7c4DrMd/3DAtxDpBST+V6uGa2T6UFlorhisvMylzkVoXW6eS65Kcx43o5caFYZjyQsqlWuwH5QxRovfLKW9jh8aZG5xuXv1F2wPJSFdZL6uzrAyaUwQv7JzrErlHnOPj0PBJxG8joxMJMp7lu2l3dm1rr/d5vmUX+TNNND6yNhIrbQhZJG8E78O1Zu/k86p2BGsrnu06kSZMskyTy0Aq1H0u830oWvXXdRr3r/Dy3OYP+CuDW97eXUw+VPS1f5VRJHlM+dA/0Yj8Sxv5Il+lG73FWeftdvBSNWG2Aqv2licnG6SUvfhOdKipgNwN8v1DPglS1lVOfHhL7nD63Hjk93lfDgc+ROOenDh3V0HURxpoVsbsw6qud2z+BfjJ7OnH09RQf8xmIaiz42iFodHSdcz+vcUUCpSS4vlKUywqSpTCHv29iJMHz1bowTWQxyna6gD1mRW6udc4L8GrmYPfpLd00YrAjNKMQ86m62i1Y0Q0f80DNwOyTG/OqyP7SVQYvO0KxoQiWYrcKzJIUN4kpbHoOUsOsFkas9gQ45hDemvwbTm2guBKsPfJSzk/Bemks4866x6WJPXHUU7XHaXvOSw/do09nDJB6GPm1wPwTYGUsySgwpCJncKzuYxLlSYMnVQ+8eO2GIl7kh+7PPJmjORK2yxKHXwVlQ8uJvfq6K4OqTAcPAeKbTn0JHIlOzyjyCFEKZLOnhtL7Rb7fjC6D/yIWioJ5aoCHHnwIsgnw7sf5hdgMYsQyCpZrytw3uMBSyLVPR+NRKloEctnVDjA9Cpu1kW8PWmc2MC7tIF2Ss/iu2ezZukGmrExioxmLGlTWEG7xNQ7+8N/t9khyaoRkS7jUX/vCnTxIqmq/hh/jYsnpA0T8nDbLAztC4J9iGXTmghcy6OddUDbNgv7qMxuiHKKob/tvfOQGfWpi/w23spyKCXpwjcEwd7m6dPs0g2MSwoz+nhrX+F+2R1eFX+QOf1cbrVdX5F0vGFyly3z+U1J7Z++wftw4kjQVdpWm9365LLXO7U9rfVviD0l9GoHBzOLTqxkg4/K/gMciQb5enQSXbqOHp0wZkfZPkaeokp0KNXKTpwYhqcZZ56zw0CaR7k6AswT8pbu7W3kYdyI4VGMUQTHk8tqNGLbSFKX331o78GPOEWna5n98gR5G4YijRErvtJsaftgro0e+dkwt1mjnxt13SZ+aMy2zpbxynPncfPbSa5Jb5uUR9oP7YmONO3+E343Q7e+7/8Kx3ivH3CbA/z4xlpXYCJqZjDKhUXp0jmtri+2og0XRwFp8iPfC5/E/ZkrZBC1Bdgkp6trYbNrSsVM6ceiH4NThK0ijSgR5m2ooCN36z4oUX3xdkN+pDvrMdNrn1miy/RTvg+VlP33K098mOVS045t7QvlMFaBQ36MUxRfzMqc7UxEt08QHYYVhp0b4zDiRya5yMIWj/apILzMO05yd+70KTojfVSXovf27aZkVwB9XyPEbnkK3CS9qgqjiI4BlAezIBbw2GKja6v26Zmg/FkGoTzO5+dSE/nFN99amWSNSyErNmvbQdE40dyOKn2Lvpox+tbdwOqlQWiKGcxSlHmotMswVk1xs3YYAwLdHlETTP85KHt0J7VXsbfn3DnGzv3ZJZrvtonWEWommXseELVdJep5fBJQ2VSlMNEC+AaeorZpFNnASyHSajYIZr8TP8GHFf9sHnKpDJlBm2SJUZuWdz5tilaUEI89kp96AmFP7wvQSaeHFlcSv1VRiORjk7gtonulufxojk7FJM3Wf4iuxI1bUFEU7RKb6brSMGvAHlrCW/Wng1LGvCIvPxTP164k+baJMEwPARHTkWp8Qx6murR44qQ4q8Qf9hEueq+hQvEX3d28c0Z0uQiwkOlHYOWIHu8wXjtGPD1lnPKwvHbOs7befu3c5wcXGevgpcPUjhhlFjd/dYo6byAurMjVjaOHoGOcbBt1ua8Zoo5SsReF/LDsIGhkQKg/VuTuzNNfK66UGJZx06HytNzSeNoxQH9UbcCZoeWoaEZ4FgEjh99uOEr5acWdg76qzh3TpUa52rADsqR5z23gR9Ld1RLgZLlKphRAryiBy3bVnISfB/6+AXSFSX/zC7UILs0KCaiwm9e2Etn9tuegWbPdZge0ahOXSHFyPq7WSeKwNdqsy1DI9V2CkOIkSva58AwCTffi7q+alPab5tpDJlXwChkvxs+/9uBNaSHdmj7c7ZrZFrB770ndWGrI53fu8LhcM1V9E6kQX68JXVsZ0YpP+V7iO48pjDKNNLo4VYgno6F+wy3KMvsIDBRmc49xHoJHycFPzAnCaJ27M4+eglHM/y9TbvvHcpL7nfdxns5XXV8o9zo8bi4iyK4k9S2UAqG5BM2wErxObgmdOkgOomKiq2m+NQQElUSOb1koIlGZFhcULVD3oi5I5d/TWXp6s6shCnIA0ZcnJMhzqLXFiH/vKGiuzW/X3NYxFWedyCkRC+M1CkXREL/XxagM+6EI/71jW1meCco92+6Nba69YznJHSZmu0+IV5H0nOn5CIvt1Wj4SNhPj8lbzRcXNS25+L0Hir777fT+dmfy5g7VqeW5ytIMPOz4uXhM97bq7S+jEKHUfKlJdn4JnbLAuej3EwEsYmZHjgwga8at42Xj32Y5U+MKLUe4koYR+ZsawNmiZ3Dlk8VkKr+4OGN07yWEMJYtIqoXzSN1bQnkiLG3nDlNZGphYTJ3/Hy6KEYgo2v32yaxwxmHci23LWcsGxaAUKM5GenN6KqWYrM3LXtfRnMVGk6w9qZMZeGwFWaJVGnhWscm+aLGvEws+xtr/fZgdhBiEOSFiaVjmhpNTYVCgb6HkdTRZGIaRtdUQHiJSQ2q5Pn4CsEgjtiNUoaqHS/fFHy1bw7R/fzgpUQQrEEMxkeKgZTEyTvNOFjVMiKxib4cGBB9IbGPVLUwDuadBty3hvyVmvMDT6eqVhiY3E/1cU80cSqH/Zw63rsrjFTVnQKgWezvTjDBwOGe4x3HQYvlTid2GOGNe+y6F2B8u6ElrRry7z47PqT2h/rvn3n58OFTL97P/rkAXrrL/NYb1Zs8AyvvAaTZ5Y3u9AYWlkIea86P37djII/Y5+u2ogtkkoy6zOa3PQ4Aj52/019EVhjJeAy/QbACS7UdGfdsD0V2lbW0ds11W9hMx0K9BtuTCgKWJy1TPbwitthx73bGjrDOjDgPOBU131IyiaLIWkmERiGWH1x69lnPpqQMyecZ/h/+51C7gONYqIEII6kg7WGT1q3/j1/ELf0hkuwSDjYTOlhsqmeqRaWaaiB3fMclyIVSkYJHyOYtlvPAWx9R0Ns82tCd5QmjoPyrRggnFkeysQmOiYcfqBZiWExBQzU683umAUtUD1eKJUOVkoeF9tumpngP3x7aetq1tPuU00ykmGZrNJqZGqoJfLs3RSKf4fY24Z10Nq1zulmhnGqkuNj1+cZU0LjoTCdCXAEfYhOJGi6fD3EAJdT9yvvug5vVB++4AfvD5rTo8NZiVhmD6a9fh892+QqYwz4L1Ngixib/fXyYtd+TTCjuTM/23b9U6ZLo+YXnf2k7NvQcaXqsYT2yLUxI6nO10Hl0KFpeWuxNq2LbppB1dEUEL7ZHfutpw8LofZHnTGRHuLb4jKPrYou9WBnmTZX/IQgtGXqWObmAeTreGEZj2voxnEZD9ptlmnq6libnhpEjpEITJ6MlZpbtopVyHYzSSZBwohyWWF4+YXrl1L3hksdG14wvDF+M+9H+I1i06pqJjdUNuEacziqp+acS/XadpE1Gs1TVqbG1xQJpaXNwi6XPBVnmerq1wVhED6IHlPr6NGtrmt7GzsT9cH9TcU8BYXxh/5wcO9JPEDOmK1QxU9rRHGrPikazCva2f+vbuzg1uX9p9lvHb4PfqLXXu3v0y7dVI98HBx1rrovt2x3bX/nA/sFmmCOM2z6fd/91x+vP/jaL01jaa63XsLapHWYdQC5G+fDopQq+78A+39zeg9MLRlKJWNIjpRadRkkGbkHaNXDwlRpHDXazB9GTeeLoyZDFr+c2MG5ciHWtrWzpiR475J+zg1cvHHNfeudEIPT2h1cyPtk8+lD7T46fgrmTV1h4ZjnM+LBHaQNhbk15r0nF275zoTXBx49u1XaBkMXy0HNHDUkXXflM4Avf7OKhsdHFgzNZ9bGFgyvTPbq1m7q+3nWtdrWH+vWb2ud2DRyYzqXwaFg8j0HJdZQKehuxThaD6BpsEiFbtrb3rWmhV7O6DvX1LcvUlzzYFO8j58l/ly5w5ub3jYzM752Z2+2fP+Ba6b6uVi2DV4/9QaITmpppeDLHoeydGXTQmixdNULC9q72axmvdOStAoWPXyLXH69RyO21mKzfH10sUsFVeg6Fpp+uUu5zE8KX7s+h+eWcbQ/1lffMrxVB2yAz33ml9wj/ABIEDCOuOq4mOOKvEiL66553bVZbm9Vqt77X/bmBNb+Xaj199RQAv9gTedaaLOvQzsVyGEA8YvADMzPkjc/73/icGfK+uS9uuAQGt2LgVhi4cHVX7dU9AIs4XL5vP2kf9erhAC5iT/khH2DKGTtOzmc8hpjfykUs5W7wpOCLv36C/K3DA0t3bo1VIB0nwaWCD7UfXo9dsBrXdRcIOEGN/xBHcBHuQxRXf3z1QLwLUJO1ySCGi7CN2y+Ng7yTOAlHGltQHahLrDrTmJCNzW2S0JF0dwXF6JSeiaeRWriNXVmLGT1fdCY2DAy4XS4PmEBn6XHNGqXVqlSa2+S5DPjPnO7Om8ncXhpxXCJnTc/TIW+oM9/z0PoCkEgFc2qBpq2UwldhvfeU6ZWQxQRBVjNUp0O64rol2qQ69SyZNgGQOQrW1C662itqLLpOYbYpTPjH6rkUTt9flxPvcD0ID0AiZcTpUbpCNkQhTENZ3Y1iqZrFlxo1hlaTtd6cgYtxn29Latx//ij3ySvKK6DfIDPpVKn7RZHmWVpSeWqpzjPCf9rwNECWSZhju8hQvT4F5GiZvJQymUUvFpr00jw6HM7xSL3pvF4iYaDMHT1oY49q5VLFR535CaNHZpcInmQQwBIwWdxcdlwsv3PvuTRHV5/D6klyIpr37AY7EQOegSCuR+ABZHFKFpNj8djEMqkYHhTkyNf8yYF7xITIQ7gyGI1nO5mIPYBufM3zcy2VQKTlUGJ/5HV4SCmtDoe1z3PwykmIRGohZ/vjaEdTKtPszNLlC4LCvRuRWOUvn74oT2lsk8kNFqXCaKs+1hC5jDXlo6mg2JoxIZMxp+Yn+2HSrd8uS3JPssdVp6XtzM/ygEhCPhNW1o4FzojeztEavTVrouZLJyuZFHpeViKm8lwSK5LDaRHPyXr7FJVbx9TCyRZyTmYhPvxsEjuCx8eJdmmGyAOpYHClZhTz73ClBlGdUvhueGsF+UGdPMYQA/BftHm4fCaTk8tq/8h9ae1dvcsf3PwVHsIf+vJZ4ufP9jZoYKDF77t6Wf3OLdg7t9qvX/YGaGCfPCj55AEM/Fc7/nntXBB/8T3kzMLMX02L4fzZjwpGQWJPwJurgwnlyUNbNcmj377V2A/OjBTFEvoN/8GGC6PxRwzpwBeNVLwshW97kNih7Uh8sA0ufVmBZNmFxjy3Pl4TC+ETEP6slJ0jLdnNyc0tWaM7k7P9GYl4KFYTr3fnGe1CsBWLcH3pAtVKGS49v+D8z2Hpef9uO/BTbUH+L0pym+tDwOgz81ZnhznhNq7+QTYiNKbezNdVBVJjy87HfktlsGMJGSRca08dR0HKj5g6xc0oIXOba+EbL6TRdLHE9HKUaLN0ysOBP/GM/RkAsIjFv/vZvG896Zr0l3A9qz0vjaRD6a9btuzyNb0HnN+6bri+jDQIfAXlnT91Pr3cwcNNOOC14v4O9X6O3ZGNaWqoq2tpwuSQEtYj7ccp8AK8thKt3YLffeK033/i1FJ+gld3d+vXbup6etZ1hrXuI0Kqt/smb8frIDeu6P7eleQA6r6dr6fk4lHXS9lheU3kupBTBf6SHOZ2QZzyR0ZsvlDAoH+uBc2nfzT/+EPwdtvb4CN2fmLizsTixrLC8Nysf5ERVeQBltdF5/BpNC6fDvMcpOHQWj0ah9Oiq7U4LFqnQ+OxOk5J1/Mo4QcCCPrlYkAMQNUXP1uMevN/DlX8bDmqukIoLqupiVSFoFoDoulFIJRv5plvUF81v7rESx9EOBGXL43bgX0jnCSaSkqpDwsP6gW4fkmF/JftKHj5jgJqESmpGvB0ZZNlZRNlny/7+pL6CqGipFFpN4kkjlalst0E0jQIZxA25IuBFybeTdhrX34e/YzjmVf8dv/mpmNTC9ybIl65llrsKNu5fOuHtMJPdHlwiEodGiQPUjQ2FD1geZcsWzMyfThDs/L88+YY/NDEfgnlk5cOTR6QkFMEpBeTeRRwIHDQrpn/A0F/HaXZ5K3hNZsy+cTfN2zYRWF3naqutpqnQxGk2MKoPSVcVEXFTG5q7akH2r9w8NY3ZXX1eBapuc4zwr9nuAdeMojQE2SjdLBZ1o8Tcf+wPeeO+pjo/aNSbK1od4rgZUanlC12r6IqKBkgY/isPh9B1QAVlMImQyhVk3LPsIGDfGJatDv0gIw55iOp1T48szeExzOqZDKjotaZVNJ5KRfefofaQklV/3D2NZJqoRw8jIkbCZE4J0RAwcAwDn97KnwHxxocmVM46vFKx8vvce8Nmy2I/pLxIjv+9iPUbEb4SiaKbCE4rp4gsf1550sPkEKy9Oq6naZI6VhqC6mxNuF+OJagc3+x7YkS//n4U1eQcD4hHOePleF3NOAxjIp04DlGJkpZo7soaowh9fksHRajVVr1EpHZJM9lxn/E6eoYCmYkE4cepv2G3pfC39krb0e/z832PNoaNF5d16kTH6reuxaLUmKyjbDF0gbecqVr4u+e/C7sH245zjyWhPU5ZpzZJyT8I9T83ZIu/KVeIM+p54jabE+Ac2fjvlsZIiJXGHmxPpB7fegnigR3hHDn7iasJ+RD+DzbjiIq7rnGwT1aAmwPrmgrjec6dOLuhxWx/XGh7XHpfx91Zm3VuzBjyXdB5hfu/Qb3ybfe+trcVXoTHi0fi3C9TkkyKFX3cfa+kJKVezbvumsl1UjiufqobOigNbY2XVOeXOVoZl/n682wzJ7e3k0A2xOOdD7SFJ6t3+egsMJedLz4yj77vs3HHY97x0NdbE1bvKK8wslF+L3F4JdmMfEZzEkp5Khjte0RIdjELMaSVKdFdnTdd4Q5OOIUe6Gk6Sevvat599qkmqwBdvlpwbSF706vd5HZ/NtMH1H8riJtvsdDwX94wk4d8ZNO/4vj9wIJvInEeD2WqNj5/YnNTzbfEgpPfXDTuy+PI0BMI59RYz+efvkHtNKfu9q3UnjMktJDXejM499Qo79z4ffpDfdMQH8mwcMI0iU72blOfo44P+4GmfumTxCIRbi9lZVedwIeIuMjDcI0Iu8L4oYjE2tTU2sTE+pKQd1LO2tZTY2NatXmY0G8KG18QjpRECnPfLjkscWYJgoG+B/Nyk5L9f0WvS3p5RxvxbbJDGCLE7HgGxftGP98jQP3qw8cD8p/LHGUAA0i25ENugqj97yiK21swBej0kt2fz/+O2YU1tYXHqeOxj3lvtKgaWjASNpLGGgoEX4jGiP91e4ocxQv+Q5zB4BpUtvC6XG9oKXg0d/7v0cF2b5GDQNknIg1tIuk9ojrsrS4Oo3SCgn4Zh1VsQ87ijFbNSKxH5FaaijdMrxabChmfWOZ/+Vi2NcnWDukaTXyS+B+DJSLbnPvn5vxHrR3KeQxU8eMGQ3mwxr+qoV7YZs0BSpOvQo/U9SfonanHge7j6VWHikuHqpMM8QVUwsKikvjWvMkrSrAQRfSeYWP1eockEDaZ7Im90Lr0GnoWehqhmZdc1rzrAZJ77zcCRI1+bDdtxOXbm8lCSSoj7C2KZJ9Cov6SPwMQ8gUmhkl7BLA73vV/CoA5Ygp91ERCM700CHBr5h8yohMR+/dZWftiyuZmfvDCZvfsBXU+6Zs46atgJ0J1BRBnyAtGRwUSMnAII2EedsJaaKRvmz2cxtdtSnKx3/YEX93h3f8689Datd2AMz5Xw8OpJSkPTcdQRV/nY5jlBeVyQuEoeDYU4/+OBFHGueOzTebC4GsO+PV33fNYejtLz+Yv+/VIfpjD7DQANQ0XgfoaVPfU2/AFo0W4KS0M5kCj3EAYKGfFKCmp8pSFrsGUxDGdSdxZ7KcXmHt7ME3mdIWDW7uO5LnYZatNT3yrERNK8l/kUxL5w/FUVfdKSOm70rnpo+5tpifxxZVvIWJkkO4F800U+PErfKYkzBNrpobpm8MjUyl7HZXcJAWJ1CYJeAIOK35AUHlVcZFYHqNctttpq34Z7XvMKTkCW6a1ONMrRGCXyZB6ajxY1TawfQaJdh2Se5VhCLtxtgB108mYuBMM7VGCCF3L8L/ZmaG9KQDUpNzEhcQcASc1t7B9fyc/X8SY3qcmlvQV8utQPa80VxkL1IuCAg4Ao6Ae2U/4k1G2IGsr1okmCPgtt1nu6qHikzwNwV9iQv6+Qs4RChUDJHFMIuxkSge4mrDsxSyA57jdOYwxRSbx80v9DZvPyveQCOI3ZxJCCvLvTp1WR7o+uPVSeGE4jQSssjUzzDE1Yyzec0suDRFymJO8imtwem+XfoELYCrJ4MzzmY28zW7hoqOSif8JT+jguyE0OesIdaASSYZZ7w1r2gDR4LxzSo/2pd7yWgAe2+bUg0yJEAKW9LIMHBS2oywFmGZWFXfjC7iwiFyPE2fsZnHJ4+VH6NqGo0e0QU7440JIAgBT3Ma0m49NheSyKpaC3ozZKgZZ5yNZkRdR+ckBo7TdhoTIOLiEPzKk36OBnbsZD0llo4G11MYnCmm7ndlNhQB/ILizpZicLpUkQ1vsdKGkGwNtjKHEonlauRJTDeKQEStm6mZZJJxxtnABjaaEc23qSa5E7FS6g3Mrh02SIiqt859kgT3uepPWKvkyGFBoUDr/2Z1YQGPFeSucXEYmtqhKUUw1RRMxgRTDWwyjDFoHtLqNVrAvIWC11XpBUU3Hf4fM43c70kZ/yIoEygeWqcYWGt7NlUp8dXe9Zmhd0WBY3k/55idZeuos2z547zebs/UguUpzsR5liizt2C52MOIUAMRcsDwh/YocxJ4USwXexrPtgm4EKf3prpgwThEWNhWEcA9josQCKRFgMJkrIBlaJ1mYa3qvRDOAh7BAk+4ZqXWZEw6sHfAL83OslV4uq1oYVqUB8EqwA9UQBGowKQ+Ig6BfjxGlf2pl61NzyYwQcBJKRHgZvYC8pcSYnpxFmr3oMAjptrYWC/kB/bm9c2cLd6GolgchsLVGsdgFRAHKnAzUAF5HxFqoBfyq0yd7a3t8PtqZphhK1uZYML9CYx6djS2ZTsi4xOG1slmZL0UwdwLuRyaMcMMW9nKBBPuo0MARsM+ZCa3NUbIRNxjCXTDPrTasHVIqFvC/1+zcF0Gf0ojbEJtZBahvXCd24Dq2gKHgJCFmbSQvQMjp9pAeZr0AcVtK1IfQbRHADGzU/8CqC70C2xSSI+UBqTG+JrajaDl64ewJ1rL2+7bFg0fwZ6GwEZEbb4L1oXOVSrn4G1X/ut5XDtgnQzciI6JVdJjCbyEJCmt0tIAK5yZ05WY2I+psQEP9j2Fwh0WeuBFZsF2JyUw39J1UHiX7o3gM+lSMv3iIB/Axouutdb9P/yjVQulda686r83PeV582yhvh/9w5Df/NA4po92DU4MAJArOFcPk9s3ldH1DwsixopXPj/gvQJ4fxRfFRBxw8LLd+OqSlCZ8r6pjBwwJf2+oj6eVD8r7uh0bg21peL0+MMnOUygoZZVnLJ+UufV9N4D4OsPztVUI/rW/qB2Jfz6eOJB9kZRLLgaxBdB3iDtH9ptcADcbW6FaftaDX9QqO3dahZv7K5jvq+V/D68imETgE8DVB4JZcBQSYhCheR+UrMqQ+OIugYMF9ppAN4IagrS9qGdgh2gsbWCgtoMCU3Z+WKY1IXIR+Qc/PEp5nmu+89bT0HUd1cRYxSSj5Dtbwx7YBz48qHaCbuMPdFTKbC/uzgySsNn1JMCvxPPJzYdxlpT27kLNN1gRF0A0Kqdu46xRgb3xpbVzt2BsbPBzWzjoGgQb1yEt5+U+4ZJY5cJ7QRIYnELXWIsSLCnMVeD7Eo9xaZTF+zx4HZDXuRxBROs9DKHd0ROaysiFwSHJ7HhGMqUJdPJ3BY5UaqIsWCLCVf8I+NJKnzblI5O04EEHxv5K9ZV2z0TRXgS8NiTpi4Zh5xw72E7zOZu1YSAOSMEy2966Vlf5qwVzwOvfhr8l4+1FdfzKjv21BNtuLXDVOs5jZa0LAFdxCnoXsGeOKc0YEsdBo8QXUNydVkCx9IL5T0Yzp7VVbJSXD6GWGLGV7Q+fJVLKXzvfVdObxE660dq7hSlLhCo5A89xAAe+CGgqfCZCrlWoRusmJOiZJc/IZZYDKBcWP/ts6L+3FUG3gh01f91HOm5c3pdgLB+dMWdmPP9BqBFWAmAZolFTdTWQW8/y7McngU89qzuyqYCK4RZYpGvuP/GVQpI8L33fe30FqGzfqTmTtcS26s7HF0jJCwUlpCKb+wne0lppd9rPHtWd0lyPPCPLeIz62jOs4+KEQP/BESBTxAPz4KV7Fk306oSCeWz2jF0V6IL/GMNR+DT8L7s5YdwbC57f7Zw4Hy8CkvP8VSBB+yBbCH6C4D9yaYXaMiqitsTe8lNy71cGhhqMy2R5GkcF5leJbEIDa3NR/pUOXGL5cJoWIBjUA4jm9s6FOOtVgLq5m6XtqMUBLDq6RM7x/OetBZochamrHdF2yLBTbEtBDO9M5YWTm9+ntStS3I3wXfTCQTtrz5tNBsQjMwPFx3WGBe1yxYNWDbz2JT4JE8RgK5VPpEPGv8J/WdAmgxFKrTbcqcnPvNfQpB+4UWYvIzMpKzJrpTHkmcFtnhFXV7nqmpDje2uo9eMfX9PU2pT8pi87/+r/2YAZyPOWedOzgN1jm7S+/Qj6jX1d9DBt4P2JgmZaFjfrx/Sr+pPg38M/jN4J7gffBLSXIcaVmPeetn6LuzSx92bufc3BabSnLQftN8P30sz6tKngyL1ElToo2VVvMeJuz5asuXFm38mzWd7DpES5Pc4eWcx2ZQAPlxS+iz4gILPZ3ZELGIadj5Mscxqoe5drnqDdrpp1ra0fK3G/dZsa6FdeyfN2teqjaMmzV68evMe+8/+nJjvmKNTl+1178vX7R+7s9h+3sYWlh5FHwdkbN74ygvCym28BJjnV1apIGEFqj8xhvdicN/9Mcg8/M+6o4Y1aLR6efv69a9dr8Me8IQXXfa2T5qRlle3WSDf0tmnX4wEKdJny9PB7jTZYpmKcZGrkTrvsenUb9wtPwgIe+Cx/5q2Iq9MYBonhzqqTqTmltW2du87dmlpudB8r+pN8AAHOvhQwAhet3tre2vUmCmz6UY/FKIJZNR4mecwV1jnDpMskqNsJz6YxwYOcAfPpCsU0mKng07r94jnXHbDp1x21ZqqjfwEcghPDBKQDplFTxiUpc4Gm87foU51qZVu90RzJaLi+vKaGJWpS3M6pMsPsg1Q1kwz/oOnLq1u3J9PkYxCAzGEBxksbl42AgZvYHI6pvBziDOsssk3jvj7XSJ1ztMu+6R57SY6zY6unnZcKNqxLrbWZvebK16+Unxavv5pbKNjDB/z8wKv8Wm+xLf4lZTzKa9NeUvKe1I+kjJsu7PtrmndJ4DBDQAKgDPAOFusVCoz4ykBDBAA8FmksZgSwMAAAEhmh/L32aPcVRgj7VLdoWlpx3oc+CzvCGYpiyAM0tbl9mjM7lAc+ezJ2KCE9mDwlzMnCrvVP9vAmwuyWrVi44NZAXpHjpyrsliiPV4rNhZIGa2yzsnmp5Rco9FUUdmSu9bOxgKI4Uhwt6WAH+/uVkuZZFFwdQmb1jsPpvxIi3rZmOQnVV12DfZs2UiZ3p3wEd6aX0ynxaYRwQeOxXSPZzrTWhGfZlry1EUlYm7xoala3y5rqWpDqlWyunx960wYMLCpUVwSlZIappr2QaHKaCHVNPrQ8aNULObVYj8vbx2lXD6Cv3cGSz4az5OLM62BRIsRHNj9ZvPFf0bus5x2m1VJGvD9/57/aw9W9hBAY1odaw3l9WsLqqHNcs90+/Y0Eo+R8sb4g0e+oWybydBBANEPrR7P//sz1xtaYRIEWiGtKCGBz72UsedjAMEBoQJTpKwZWlnlDBjJZU6shABcnfbrH1JJDEHqtxdLyuCsGUnwT7e9LoOHM2LxGB6iLd3WP+VucB/drtWS8h8gyyJFyu4jb0FuErwF8viQcPONj8FE2e9kCTNicNBB3BBx0f6TIN8DxVnuUbvtHQBVhIlYj6vsT94ACqckKOSHpqak3tSa+1h4bUoQPIJPiR9HZgJEMA1+/1jUlyA/czwVjMdYgTYGn1MfLwCALCcC7j3Y9Q8Qx5Qf+rA9QVDORZwf8uO8rO+WNQRYnz8YUxRFNXrsaPQURAzctvxffurTQweP5x73bWm2VwXnQEKuw1SBaEs1UczEqFJwg2CV1zoL+jScUkoVXSRiJwQa49rJLh7VZM7YplL71zPjpI35rcOsh/uw0gfic+9x57ZO5WSzZ5ITnyF/ACXEY3Q+jMDvxL69ndJuhhG0CwRHa683f/1W/T917zXH+MfPM5AdMVn8BTSwUqDQb5zt4EXV4LXJC6P3Soa2nk19HkdzBrNVJF3vyV/uWVzASKby+CZCHpHqXy8qpeK6VC9QDxYhjTLARtWh+689JTHuKCS5H2pewP4Pqsck5srNOnEPvt7+fzwjr74HKqb01H4Dw2M2NX1siw2REMopQQyFECq5duRw8uV/PT62/uDs2/Low9dMkGbgpWw+XzGFz+cjsUblxY4RaTlq44cSEbKlGEiryksR3HVdx6A+KwKElW8M8xA8UrlQYvuFRCabLm5+RtYoZTdIpelD8kR0J8DfmcdquSbZvk6NZq3Go1+NfyHqA5aIkgMhQBeaI8CghSnoKGTw5yOieDS7W40PCaBofxy49ckdd+R6CXSC7ey21GuTOu3tezfmAFO52LcHdq726S5WJLkVpb0IUJmvivgZxzdLM0/6vT+FUwyGaTxkVr6RMzpxttvlh6neqjGCNiZJab1azU544V2kzXI6QGEhdI11GXp54oeDTTNqhOjEl5ZycqYxghDlfS7ZY3QrDUdHqXMsXWa1uKArn3/YHJ2mEpy1j9mpWHxhPlEowR6ybEhfE8oYp34rMoNu1ZwmrKIpvXzhLKtLL2ZOW5uHY34D5dhrUVHXlpe/Vp/Jg7PbdOpwBc1QwXqZ2iW9tffDnqXXd3+Rjlqv+bG+VK3D/5AYK9ODl69OzMzjhfeMfB///8ZkwGIu0R6TD/TCecdEm9mHVdOyiVoDejqd4U7L5e6U+KoMuvT86i6wWHWAqAbzaJUNqKfVxW/mKHgkc+pkptDvpex3EkKtmiCKzWJMUUPBuJmak/GsLJcUWaDJnG1hIAKGrNyWX4X8iT0HJfyU4JqDUVuXJv//AfYs3Et2gY0NFCnmeXXHLD2cnh5AtyzLod3nVehwtlcnnxoQ4/WpD4kQxHCCVGw+OrxHZm4sQYdgUxy+Uqir69whou/TthwduRhyuO/AFy9YuyqIiqKdVyNjn8cdSTQv+bPS1d19L26O3DzLkbEIZ0jS26n2uB98c1DUZ774wjG6Dpj4QxqjrBnVdtyFQhA7ZPh0yX/esmwzfxknqM0inlYFwOeRDU15Tp2d73NOdMAq2r7siuyQG9I0/UxlOK79+b/Pd8EE/CTc/sPD43MJ01CABJVi27lO61Qw8OOVpwAA9BpFiZuVK9+Vr1087Hzr6ACW0ZTu0nDQsn5z1dfav/My6ufzS1QV86WdNUW48dzKLpwiU3pRA34wLN37p6GtoJrP//QT25O/5L5ZfPknUdQpOWZYMkIPEZlSn1JC3q/Kc9COqT2tEMHm8ylzvYJsLrSLHqV1RD2vabz59N/YtsLaQXU4JVWfVOc+bVKwU2UxNTPVFivoFoqi6LhhKVsjvCA4pGZVbaB2eYYSsVkSp6EI1t5Wy/waInKbLqnW6p4o8RHq86C1tmkHrWim5tzPmz9l8JP1Lv6Gvzn91rTMUjei+Q4Yt7f9/Z4w6xKIWM9N5tp0fmmGriPPc7ZVCAwiCQga/DXhXMk3Nn1JMJk5x5rKWeV1o4RfvZ5szM1UFUkFFSbsnDtlVJXElXIqnidZ20/EsydynsalDG8XA6oaC7h9EBVSJnWHLcfUqPnZXIVklhGEV00t0/fn2alqyQBGaiAjBtDqLyzJQME/5P7Pqqgz2BCwZ4LUfyX1Oi7bY4I3YOi88ZDSrBVkzxnNvpp1/rD3yfw7cYPNbSINOEEzvX/hHzQUis8N/2F0r54kvR5AenbouaNLn6unVvyeey738/nTmz+CioRYEU0rSTLqtO7YH+vQ3tn9yR3jn1XfhdS+eVZ+Bt8DuF9TRPibJ0awZ+vDXbWaG6ootvz0sJH1wODS0wXcMY2d7cZB9aYkHjO9tC5R3mdcB0pv1FbsBKoMfxbxWGPUmo5fBbEFxLGNAXT9s7S5WfsB63dsPklEPshE9k0y9H1USXLUv1evLq55fim8l1xe4Tr/ZJJpqGN5UQF0W53qf4EoxsILs5OsLSncr0oT+nQs0uqrC+H52SBqd2WaC2jlRzuPOiK5lvENxqxp6tba7MzcwrxU6xZM/+5ofxdKWG/t3BdVd/0fCz+Z7SZt5g4ZeBOCYUHzJLwgGJqP8kcUnedyT4BTECOiLEU9BhwKEMB63XKWcvngT36KmVoNaws3nu5MArYJeYUAomMQnTR23VKmCp0eizQ5siTKNV7gnl2+AyWszfz7nyLf/WSJcoirvfa4Va/c38M8E/LqFhu18rBraoAxZk4vLSvptBiAjVgYGnIfkLFJON7E7JJrKUE1rqpmReqFOeW+5Sta9CXxyiRXhZXlXNqU9ES61JzmaaSpahge4JFWGr7DxSKZpaMk2/m2/fEkXK5miqIaSRGJ/K3sEeYyYZOA3dQ0ebLEim5VqZI/xS7gGxoRLpCxX5iWLWGMF2YeJ/iupjk36AVCEcJ+snV29obFGMA3U9sw6EeEABCd8LkYUMzLM7Z/6utQL7WbjcZfq6MiHMamlgZw26NN27GC1jzFDnu3jzr2WWp0Dhkkcr5SpVJVNjqYdGc1OvG9OXR2wKeA29uFtolq5WmSaOaGMABgH/33dhd8gvfsPa+9u6s2Kte2ndztE46g0AELz7UyN8d28K2+eGO2W8/lcr/+9PA9VeTqrWpCCgaDX3w78gmG3Wws5rvpebJl8sNATM9l+s9ShSEVvSwrRCKg+e74uNHdLagFAoVGPj8xUYsYS+qbQJYmBEEFfFBQxF+goUyrAY112nJM1FpIXmhQnIa9vWMJWiE1P9l/7cK58hLkTH/vJcVNk/NMKAy9io179cZir7fU6zu+ux5uyUtaL1+YW4gUWy4EWlNJ8azyyKvGC10jkee8YFCvCEppXeZRCWqmaYXsaEIAO5MDRlL8QhgcaWuiGgEudf23yQ9ZJbSfC/spp49mgeQymQi8J/PPiCEvQjrKL7sDAR04MPB+NhmhrdaCfOX5GecQIJllS6U7nLKBRJmZ7y8uZajSzJHMLyGA/non7m45P/Jc7aTpcxQr2aj78G+mD2ZOMDiI0sy2b/gQj0gack79O0J4eQEK7+P+MXMEgv3DsQjgMLbt028Qkceu4BHSfWfClabPYfn0pZ/0s5ruBc+f/Gv+9vITKCLNqUNt2/+VNkc/qbuXa4Dw6WCO9fbG5V+5Z9VfAIyyXR639SGeyTRUadWOT7zL7fOeen0MhmQ94uNJNqaBqZOAj3c0wz6MM0Y5ryqnjGmkpqoNyy4ur16kbm3+XKfmHhnz753za5ep1eXFQdVGNeaGy9RqLNWrLEM72zhT0M/gNLaSStvHq9ObTzINk3osSFIf7YWaBg/EM+XVV95BIFqe30VikPkz3J606t7Emxwm0+KeHrh9hKCO7EZ7UtHTGQreGp7n7PZUAPpPkkBpwVgW/eNfDe5cgbQBnE4Tj2cPFpudhd+J/1kQWMHFApD05IKHqVJNkPwsjQmJ6XylOsWW8OJ8O29+rAqINi1NxIPWfZAx4MK0HFsQacep2q4xPvohy7Kry/FCte7wEhvVe4ShzKk3Khk9I3H9pSPtCPoB9/LmndvnJfKny5vgDsae9jabhLN3M1Qn3VVVc4itKMNrbEfpz+cdWWCQqtBUBZ1+hh2DNxm8zytwS2W+MTa+DGMwVHdzuhgw/NkNY4blOCbJrBqjr8eI5mkaxUQv+wSRcvFliMRHCPvQ9ETx/WlJ5YlAKmzG99VWOJQwElULkP4dkNvg+yMmyEJZktSg2bQ8nBKMBI5Tmg1BULthu8Er3YRdq1YDG6ZNVOepnKSAUcfSlgrH8loBy7TUtiT1trzSUVS2Bm9yC/84E6PN/253bnfCnVyxRprfAM4zhJHBwmddvYRorL7IcJRBmAH4kI/0eJ9z0EcY1CiMCXgMxhI0wh0ZDc6Omg0Nt5rNXlrYW2EsCQ/KzJVK0OH6Ssl9kA1KZCbb4OSkx8iskPHZMoA6bAN/22TK9QEUo8z4T1Qz04J5bul3+G5kMzuWWFHTSVQTSMgipG7uvnr+ENpd9u/SZ9U/AWjc6or2ZmB4RfQKrqYDA+mRIVHiCunk0DwlsO34SjtZyBJaJH/m0R7XOTbfwsiwMKGUT9C0RjyTzOAhHdpnK3tIVz4wAZwYKb0sqq7Q4MdDM7BFtWo5eh99bx0Ab2qTHV1FxYFTZ9y+wZqU71Ay8Xy4kDRl+B8e0bpeMYFyNS59zHXy6bfcb+Q8A4eH05PJbXPjL3fpmaVroKLhD9fcQq1pX87fnR/KuPCnONKLx6byTkHAHOS1nlS6JD19lB4FpNrRSumQNI8wyoEK0zLMAMj0ydhl+FVRHA+l0lkvI5zG4xuZSrdI3nuzGJuRuX+vJjsO0s2UqeP41nJGJOnvIzgORMRE60MRSezPtsQEWD4Jm32cacw6f4XV/MQrgjRRfey+Ym926wfJYJ7xZErmHw+TSpWOPdgQv33QFsxW7liAx9Sb7Yuqgn9+Vv5ybv7hl2lnsqw/1v/5tHbvYV6bl0uXZABfY54GcgLPL6RsRmEOAAjtpI5T3sTyVJVLNnodLfOy8MZzKzegjDVboQbsK/Ns/YUCOOlUy3r3GV5TLS3LKpLKLBg/2J2p9QVk+9Ws/JoTIh7SZnysh/DtlES+PU8IKsq8F+CoqbY9bUD/z625ZlGJoJXqLdIZfOLRCOsxyIexz+Tgi3PzBz2nFQuiEy7WwAmxzm++Ai18Lt6ePfopl5792SRL4MOis9+pCgnk58tRNMcRLDD/SySIewLxx2JNaXca0mUn81DDtX8Xtr+Bwr5nmEdUp62ZVdqh4vzo5qOmH2vCi8xTKwSDbhn4MpeALEqYpddOKEMgVxqX1uYQ1wGvOXlKEESlo7T4F7ZtP5gdbtv4fGGAgqRaey4BiXnFkeWJFZv/sTkpwuDDoMAGw35a0F/H5bNKDdUi4cepX8fswkn/KVVILnBXSd1n83zgvhN26zwQv9wF0KIMwhSvEa7TV8cOfz4jLqOvd55svAqvnT3tblexOh9ibxw0/j872hzoOUbwpa8zGIBjYXZWiKg9PyMVqc4CjeQWhrVxJ67EEe5gvtRf9AeC1ENhEptBR2r3ZlTlQ0JncvRIJJlJLk2UgRjmkw5Z1uejIO6Bq8/Kyu+oIQ2IAB+e605bzmIq/SYi2yoA3Z+rZ77PZ52/fMu6RbO5WKnd3ogN9ZyxPNnQxzmH+1ovYtReJzh4V37ZcdYb1qD+IBHmeTkh0xPPwUY7k8V9x14wk3w7WJifcIwk27wa1UHGqC02kdfkxSMxBmxRUp+TZQ73PQqnjgYBAEMcxhLx9ZflkMAFWft/vZhZ8xNkGVe1kqN4URDlf1+Sk16tjPZvQAm556jtODKAbPYFyKNM12ufub4tbQ6tSi+S8sxTXThfUItDFOBgwDRX8vXw5xxWrRBHMLQ2N0fWVukjGsm7RP0+d2zGYvbcDAv9BO9MZMJ/T6KNY+bK932xXlQZnxui7RgacGISbMI8Zs26rebRP25judqSPMXY2ZoP/CkTl/db8uKcAZFFQ0SniWHSEMX5446d9A74k933GW+9HqnXO+A/NPGHqBU4WyCQgnju5EB4h6Djfkzy/4784T/b9n27xQjiGPFVxen9ebvpxYIEAMBWfJY3SZWmMFkvptaopGS36bRZRJ87nkVQzAu7biQkm0HRdStvRRAun7i6DfiVA3cgOFPQPAk2pGJrQ47evO6wd8fgHWh+vvKzy9f1OtuI/3f27N1bWAgNNM4Yv3+TFsJytOiOtgVvbPNqNl9VhkHeqbGv6Yytv34vW7ELBPzJbj7wI7xr78HKzEgKE066zd6AKi+mGMqVfeQOqNqk0jESP8yRmzqetK05Ls4fXgt4/reFCACAM4zkobcaU1SzSe29Kd2DN+JukblWVJ2L1YD2PN76tUDI8hi/Jcjn917m78EMduNk/Pr6PzEHnoUXUqxqUVI49ZAcqV0f/FBelK+2Ae7tmuL/qCASwtzuvXv37XJWU3Aw/+jDXXCQ2gU6SgzJtavXFRbprqzyiuyNJ5Mpn07Pix3qpY2ZdrMug8wjKb0ybBkRa5NZx9AZqJ08OoT5QrWvpqfP5NRai0Qcu1kAtCOZRJBoCsI5NJ3JpMWg57itjQsiw7gsPZ4s3AXjGOdhsARfZQb5UVtuDpO/rCGgHq95+PSkFvrewCeTvLrz6Q0Gv302y5sMdfaq+oLz8XO54obm6ooFcnnip/Usbo63OsVJfJ7rBvkRmcR47meFsKDcESnfdgp9iz5Q+kDPcdrSoiHJJbXr7Fne15MXU0zWS1ByEChVlKetx0F9T25q1zoszw3o62vqB+ZVOZb3m7rI93AnkImd3FR2Q8vxc8dKwq3Hi9N9MhI4ER0M31mbc1j3xPHe/rRTf//ZIRYOCoCqrVcy3iRbnWkqsATuRRKYHnJbpmLfVN+Sog7GgWqCg8V8vVBIr+RcXwDKbheuCEulAqFw1cqHEXBiIVuymtRWXOA88ISXVyM9koaCF6RWZxirmaoqI8CYUNF19taOGJI/L2Cv4WSqkooFvT9hLOxo3QhDUTQN644HfsaAlYWuMwzHMes4gQ8TuXufBzuGhKhsGBKDWmwO6o8zF6/VeHaTNCE+WivgO6OdUe7+dxNBpn/c+XyZLe0xFW70F4KBNbY9IUneU2fUS3htlPpKKIwBAJ5ytVpz9tR3z4QVU4I8k22rKQTykFTodA2ID2EPuBk1smxHywAa/HnIntPQTcDvrxCMcmTnh5wvkqJODwAmDFPgITtAucFShj1Xh0raFeSLYdXgzftgRocB4B2EQMznkiGhxOo0OMETqjsaPaA6XIhu0YfOoLAfPwch0PO9gwy4v6lnT8/04qW1QVkXGPBugkG0zTDBT9DNGPfR5oypJli45ec9x4TiHQ0tK7K6sFkLS6aHijorz3R5MUPwjXcvGpNPqGAG777j6NW398sfbNzddCNgH/3TU0N6DqUWaElMvvkqaRNOuo8EK0z3PlRhIegVyKagLiUfvu9Vjl1o+/wvFF3QLzTTkiaD/jNJMlvsfBqj7hX8gJ+pdjbOBw+/zfOC/efxxaaczqE+Gr/3YEUT/ifF/TPVk5Cd+iVG4PN2rH8I3lcxiEWNllx6lMqPnKJnSq1SgWq1yJUaFroFbO8ZBz6tqS7nHVWThJ/xZkFzMFP/Vva5QLI1RDrEv/AuQh77gJ2lflsKAbkb8epAgtfrGeBAAlyrUIEETCLpNHSDWoJALn1mLEVlFFSK1CkORCa8gZdHU3jBLZqPKByg0YifpkOCn9hyhnMXZBBBtFS5o0PScSEhuYRHx/iunQBsYAMC3igUPIteR1B4d9oVLWvkvJLLMpET3mpexcpfGgKGVgbRcoWUbiJaRNnt5Id2m0VwuHT70vXyq0O+GBNQYv7uUcCzMq/d5aNfW3Kh5MH+zxB8uA78v2gD+5ore4DEd0a9VvbB6/LYtfp6Ci4ihatMczbeR9sJJdluq1eDK/WnfH7yDAAAsV7/cKY/iJNokcFhX3cSFDmhL5yKLtNSmiWLp0zujJmDx3sSifj/18oPY03iQW6vS+a+Vt/61UGE2GR7WrIxLgwF8b8SEiEVyoKk63r5RdllS1/cvHhtbGzP0aWNuSx1FvF3yKs5GhbDZqbcSYNhjYr/Cmt4DbFbwWdi3xIzsv4s7E1Q1L76o40S3pur+PTmgl5Y1WxEiivVOJfY2Iiq6v7HgtQvy8iYaGtsER+M50aqVbhw7WLzDlDYuyuqRp0UWZea8rknjDiliK9mEtk1wRDKlefdvLwjX8wVpiO57Hyz0nMLQoaVRFIht6oEVNdsdE3oImoGdQRwjDHyGZVXI0slqupNkMbI4fp1R1/MwtV2+9jVccCxoC/XolMiOL/9n4IdRRMq2sQvYaU+MylF8p5S2+AJb0opHY0Bs71Irg7NC3or73vYx4a+ZoaA0WIPGW5DbWdoX2b6qC3Xlf4dato9FrqUNg/wbuGZ/bbg6fLylQekpK1jKW/aY/+zb0Gyg6DeFwCQeZbZehOcId1whOO6poYwKVvGvUpdx5t4jlZ31QDErUPEXSO+mgSMrNczZXxCSWzCYFTo0pTIaLWmc1UPJxmzZQwPIcQ8pQg8eXLQaUj6xx25GB1oaL2UIdyYJlDuKMSQjtLqMcA/HIcgxmaj4iGGp2jY2JxL1nYd4P7OhyggRqIia+eWnnsBiyDNnVyn9LV6Enyn29JwCf6mx/I74TKIk9zbvSpV9n1Nk0LtuAf3XuIjvwrQ4UGgXQbKNx8M3rlT/t4Y19XfPDr3/XpLytXjxpXA2vOrpmS0AmvB9U0BGkU11qyNK2sBXVB2J6S8xUtTE1LpWYmBGO/RC3O+nnbHU38UcdBlAAD8b5YRbudWVXZyzPmAeg0AXGAHYGyB096IFQbBsY2SY3gPtlWIvXkI0CYR6DSpvCUPnmCtKwTDJlXDbJXxATn1pqdeRN6w1E6SBO1Q4FoSyZ3GifysIk0i6xhOXdG3HuxITouuZn1rIUP9rL7U+iWRP4l47TSSQvv27MyuLbLHlxxD9vYqRnxAoXaYI15OYbbOYUHLFoUyqH8+0xBdY+0EGTaiUDysmtKWV9VTpUqT+v8JD+TXKzlDNt+AuvRE7WN/E+qHiVynj8biNIqMRlJcN3xU4Lw8K1on8MoiWFJWgrUun+UJvTyRRn5K7HVvfF0nZCfijx/zqUi7s1eDRJR6yjX7nTuUDcW1tffr6byPF9WuuZCk5TlbpkvxTklJtaz9aM1irf2iqwu7tXawybozPSpKraB2yi8W7OmmzpBytJOeLzJMz5Onc7cm9WtTK2VrdB6vt77T0A60FWuVQnSsEuQN7bYtd9eTfHAjWTtvUfRqhTiEOIJMxHyNXhYcs4Txy5Le+LpOA03GKagxq6euqyvjylolaOtoGmgBHrgmznJlXBtnF8WIHFqIq2MT2uzjZUI8D7MYQnSzRe4Uwb4+DW0G7ULxdYHAdbgX7mA3B1WGoBiiY4PVqriieZFH7AT2wjeaptuV6KVVJl3m2tVA4g8HfKIQbyHqWBSjnaipKwfH+cHxEvoJkW7jZdtNkDyGmBfF6D/0gCsjJmjVhDB6F/2DJEj3MPrI9ZDy9WeuMlC/jcUh+x9K4cb+iN/Bq9HEl+6uTvnzXHlT1YhjtBhJYnVTUIQgQzcAn7hXj0XYpM4TSg4rvSk3IG34FA0ZrLLG3lCAyho7Rt6Igc+dTtI42R9y673sui86iJRFRC/s3FQoBTvIoQHY0A/tsGKJ7+EOEOGqVfYJKui0vGyeyDwpS89EzBPMEox1jPSoHE25v32LFLd/S3rASJhN+REfUVOwVgIl82MlREWmzmziZovp7ERudhk9gJhh28ikMzdyLmKjgmStUSnP1Y0qez3aqJHlc67lvDFNqX+vpLsMAtClLyEu29CIQkEGGKxxoLSRDXmZ1MgBQ5Y3csGU7Y1uoMmVRnfISlWjB2TE2OgJ5jgavUDIt2fPG3LyO7owswHjVmwyixi3Yb4Mn7BkWn/Ys7YMVYM1RNJ6plYuXh7dWu3lhetFBRtKc1XBfKmNYNrYHBqr02Vm5xPn0O53wNDWcPX2rKlBZsW+dY9oA+UTFzuLJq1aFm2M+eR2c1LOPELSzJ4yrxWWTZxKY+CAZXvC6kqFKSN3zR5dBlIxvMt+KRuZN5GXjlx+3uGkRTKpSjLD57UzipE+SOhXoPruTU2hoWVEx5gJU3pmzFkwNJqtNiBMKMvxgijJiqrphmnZjuv5QRjFSXqqdP+/uep0e/3BcDSetM7r29CbeUzW+cCwHC+Ikqyomm6Ylu24nh+EH8Fb9Al+jr+gr/g9+ZZ+z3688qKs6qYlHQBCMIJiOEFSNMNyvCBKsqJqOp80IzMrOyc3L7+gsKi45AT8Mm3d6WY9pbGpuaW1rb3jZMGGHj17nTIYocuRNBZPnNxYMn2SW+td/jS48IS3psvKKyqrqvmP67auvqGxqbmlta29o7Oru6e3r19RNd0wrbrtNJpuy4NhsdpMu8Ppcnu8Pn+j2WoDwoSyHC+Ikqyomm6Ylu24nh+EUZykWV6UVafb6w+Go/GkuQWLwxOIJDKFSqMzmCw2h8vjC4QisUQqkyuUKjWk0er0BqOp1Wyxttns7Q6ny93R6fF2dff09vUPAIAgMAQKgyOQKDQGi8MTiCQyhUqjM5gsNofL4wuEIrFEKpMrlCq1RqvTG4wms8VqszucLreHp5c3AEIwgmI4QVI0w3K8QCgSS6QyuUKpUmu0Or3BaDJbrJPOaP1jYNz+axSAUhGblq0d18u32YaqEREREREREVFKKaWUUkoppZRSKaWUUkoppZRSioiIiIiIiIiImZmZmZmZmd89QAAqMi1bO16+0UNINm2db5whAKUiNi1bO3BQAwAAAIAkSZIkSZJt27Zt286HFo6xQABKRWxatnZcr0EIIYQQQgghhBACAAAAAAAAAAARERERERERUUoppZSycmJrx/XyjRoCUCpi07K143oNRERERERERETMzMzMzMzM3JJUsc7ytYRsxBJAYepJtwTAgbvAsrVT9+GCP94cIABl6j6k9kQASkVsWrZ2XC/f/uNVDQAAAKiqqqr6VQAAAACSJEmSJEm2bduuvx8EI/Q6k6ZlO27eAKJNQAzEtDjjR0/9uhHn2rv1n+eN5ZOhpltcoRrfYWvT2KwQ7IdZQ6iLMbojyQi31aJ2u+a6Q6H/Zpv4Ps8FLdpsuAZoj8gQYU30/1siskUuqW3Xcvis+N3T8D4W1lmaSiZH/Wspov8OL3z6SpFa7Nrzq0Zooe4PxyKqimRdblel5xm+qTuMiFvF76YmjiNrI0oZjDPabOZvOd8yMh51DAEUVbScFkbZpYSTUBq1PdxRTz9OEJW+mekglq0W17q54bgR2P38CmbHu78q6XDoeC7i9fnseSeWVx6eA8dBtOrF"}},"time_used":11,"timings":{"blocked":0,"dns":0,"connect":0,"send":0,"wait":10,"receive":1,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"explorer-api.walletconnect.com/w3m/v1/getWalletImage/594627bd-6d35-406a-8d2b-31e0b5f03c00?projectId=bc97055fbc522cecb678f539aea6c54f\u0026sdkType=wcm\u0026sdkVersion=js-2.7.0","fqdn":"explorer-api.walletconnect.com","domain":"walletconnect.com","tld":"com"},"ip":{"addr":"172.66.147.126","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"img","requested_by":"https://1nch-svap.com/","date":"2026-07-27T09:36:06.482Z","timestamp":1785144966482,"http_version":"HTTP/3","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"walletconnect.com","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Thu, 04 Jun 2026 04:16:36 GMT","end":"Wed, 02 Sep 2026 05:16:25 GMT"},"fingerprint":{"sha1":"DC:D0:F7:32:00:90:71:77:19:17:82:23:72:AF:55:89:00:14:EB:BA","sha256":"FE:88:1B:93:AC:1B:71:AB:36:AD:D8:5C:FB:D5:69:2B:08:AA:96:B8:CF:3B:C0:A4:52:8F:C1:32:3F:7D:8B:AD"}}},"request":{"raw":"GET /w3m/v1/getWalletImage/594627bd-6d35-406a-8d2b-31e0b5f03c00?projectId=bc97055fbc522cecb678f539aea6c54f\u0026sdkType=wcm\u0026sdkVersion=js-2.7.0 HTTP/1.1\r\nHost: explorer-api.walletconnect.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nOrigin: https://1nch-svap.com\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://1nch-svap.com/\r\nSec-Fetch-Dest: image\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: cross-site\r\nPriority: u=5, i\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/3 200 \r\nserver-timing: cfExtPri\r\nx-robots-tag: noindex\r\ndate: Mon, 27 Jul 2026 09:36:06 GMT\r\ncontent-type: image/webp\r\npriority: u=5,i\r\ncf-ray: a21aa8688e345694-OSL\r\ncf-cache-status: HIT\r\naccept-ranges: bytes\r\naccess-control-allow-origin: *\r\nage: 5813\r\ncache-control: public, max-age=31536000, s-maxage=86400\r\netag: \"cfS_1vp7aS59QiXgC8cIm7nRFvfmDcyauXnchu_YTSDQ\"\r\nserver: cloudflare\r\nvary: accept\r\nx-wc-r2-status: HIT\r\ncf-images: internal=ok/- q=0 n=23+11 c=1+9 v=2026.3.0 l=1422 f=false c2=0\r\ncontent-security-policy: default-src 'none'; navigate-to 'none'; form-action 'none'; img-src data:; style-src 'unsafe-inline';\r\nx-content-type-options: nosniff\r\nalt-svc: h3=\":443\"; ma=86400\r\ncontent-length: 1422\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}],"data":{"size":1422,"size_decoded":2136,"mime_type":"image/webp","magic":"RIFF (little-endian) data, Web/P image, VP8 encoding, 120x120, Scaling: [none]x[none], YUV color, decoders should clamp","md5":"7319b7e9af83a7c97ccb89bd3374dc27","sha1":"0cffabe2353571146ab9b5f91639643f5853d291","sha256":"5f845f4858c17721c111ee96fbee0439a6523a585be7ec04a0c5befeccf89758","sha512":"bff4f50af88e5fcbdbcd98629956790819aa29f316d71ef187311248d898296a55a45e4a0d15c85e0c4e7849001c889f88415819fd6567668cc4e06f853a331b","ssdeep":"","tlshash":"2321e6805858a8ee8e67813e4b9549fc2b5f6440ca00600b72f5a890963a99bc7dcf17","first_seen":"2026-04-18T13:33:30.448431Z","last_seen":"2026-08-10T00:14:29.856231Z","times_seen":67,"resource_available":false,"data":"UklGRoYFAABXRUJQVlA4IHoFAACQHgCdASp4AHgAPkkijkQioiGXCyQcKASEsQBqgM2/T/yO8BSafY/6R+1v5O9XRxv4E6BmVfPf49/2v3Se4D1GeYB+jf+s6gH6zf4D2AfqN/oP8B7vn8R/t39V9wH+W/kv+q9wD+ff4XrAPQA/TD0rv3B+DP9hf2j9o3Veuo3bT/aa63fB2BN5hglpGpkfkG+rPRe6AD2MyuxXAlsN0Cm/3KKYWVgSsjS31YFwL6oWshXCXENBQgqeo5DKqwpxCg2GRIUiVmQBVmrrrtEGuB2TrHhkmjL73eSQi9+TyCsBkc+qgm0nhNS25HWVHvac0s6wJKOxFY3iSpHPb60AAP7z31uN/mSHzJDzJBBLl7L5ZQAAKj5YP9/6b2JXv3Ew9wUu2xzknHXjdMo9sMQfsdPwBJrG9+0ACJ7Ze2+QNcvsCC92Or3WWHfCnnATLd62SYtPFHbWCqBfXGFleEKdMLLG/BWFp5015XR+Fz/4ZUT4arGv+29s40PaLSGVXqaNjybmyzCG/wcSfoHEgvpmw2APd2L0EdNPHPi/Pe/aSPMhRgUG1+88US6u6rtBI0T6SvC9NyuIu+tFmDjN4BlYT928WfAFaIdlPn//079eERfBYAiQSywJltYg5G+o1ZOwuvpCpH8x4/HIzx3s4OL/eAcHTxOPPBi37+ad4ngjIG57WhWLRLUKFrxzO+hLPjuOkncPX/bUgmlAXtTa6U119OU5Flmjxros1wIKCC/17DXxB0x6SXDoiWh2ev+ChZxHvdufDVZr5/eDgHCY25zSjLAgTJUlqzTeP37OZuR1KGvH4rsXdci+SfzstN8woJ/Zu3DuT7kwqxxbp3GyW8CnudThu9koeFWLLqWTLHGQ1hnqx7t+vla68lKBvpWEEuf8J3ubBX1U6FvlLhQgE//yyDeRJEq6F+R5FnxnI3kt3HYDrKOBZWzC3SJv1GOzAK7CrQHWpw6Af4XlbLsQEEXwAna164ac5w6eTuKxbILbNUyv/m3hudq7SN3tfo4Yh7WeebbM62YjPZcFGvuXJHcbPrjj/BvNOUsYDqAErP7Z2Lh/pJWsYJylQF15FdTU1NELkiPezzu1UUfsWP4JBxAqsubd2i8Bgv7NDmi7s+LV/aV4kB7mDxv/2SGIxy+MZ0akpTH57Y6dyRXtFDI2cA70uUJg7QGg5PaxO/3Vm+UcvXAv+F/GT+5aoE5wooq6GX8mNSdh2QW1r2DIcfnOJfirsMjVIsXBKKMH4gNzFjd1l/tKlXG+NSIJoxyJDvj/35Xjb4polSjZrtOIghsFxAGg+M6p3Isu7km5uFRrYYvb+BR3g/0cR7b0g80gwov7VTv1r1DPIanGiMxsfDGUi4p/ZTeN8zkw7hGPTeMVeLn9RxIRHrZQq0EXBjTmIAUHAez+auHyKH3SPFUZ+l+tqPcGull0A/Xfzjo2eueUli4cRsrm/obFk5d3PnIlHVh/FSpkafw1KgqYIUZjJ77h8BnNOXV17xhtR1Cstu6NQ/DSEKe/vtaXT5ki66ooYcm1/V+fqg9IgSKEG91jcwtg/jDR631Y9/dr4V5KR7BNKmYtwL+N8p75P1Li7SewTU1Rb089tnfDpHWbTZ43r72GxiFeklx5mwmAT3wBOJK3XWxsxzO+vYypBJSM9DvuIIXiMktqE3csEdx6flSz0AT7lWsF7/KS8DV8wEK1VpdJAAH4YP+xpcvs0xAwXgMOhsROo0hOEE1gqRwM9RkKIjIVf3gCoY1KcIxy9vvDCxjoND5zvwDkpA6n0RQdwn6L4D6ongrtdbthvAxq47ES5t7aL9h+iepaU8oh8IgTDLzWsb8ePMtNm0PMQKRD7vgaYyKZGFuIeLBo58K4wAAAAAAA"}},"time_used":26,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":26,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"explorer-api.walletconnect.com/w3m/v1/getWalletImage/e30d09fe-c0dd-4b61-81e2-d6dc09eb9700?projectId=bc97055fbc522cecb678f539aea6c54f\u0026sdkType=wcm\u0026sdkVersion=js-2.7.0","fqdn":"explorer-api.walletconnect.com","domain":"walletconnect.com","tld":"com"},"ip":{"addr":"172.66.147.126","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"img","requested_by":"https://1nch-svap.com/","date":"2026-07-27T09:36:06.484Z","timestamp":1785144966484,"http_version":"HTTP/3","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"walletconnect.com","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Thu, 04 Jun 2026 04:16:36 GMT","end":"Wed, 02 Sep 2026 05:16:25 GMT"},"fingerprint":{"sha1":"DC:D0:F7:32:00:90:71:77:19:17:82:23:72:AF:55:89:00:14:EB:BA","sha256":"FE:88:1B:93:AC:1B:71:AB:36:AD:D8:5C:FB:D5:69:2B:08:AA:96:B8:CF:3B:C0:A4:52:8F:C1:32:3F:7D:8B:AD"}}},"request":{"raw":"GET /w3m/v1/getWalletImage/e30d09fe-c0dd-4b61-81e2-d6dc09eb9700?projectId=bc97055fbc522cecb678f539aea6c54f\u0026sdkType=wcm\u0026sdkVersion=js-2.7.0 HTTP/1.1\r\nHost: explorer-api.walletconnect.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nOrigin: https://1nch-svap.com\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://1nch-svap.com/\r\nSec-Fetch-Dest: image\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: cross-site\r\nPriority: u=5, i\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/3 200 \r\nserver-timing: cfExtPri\r\nx-robots-tag: noindex\r\ndate: Mon, 27 Jul 2026 09:36:06 GMT\r\ncontent-type: image/webp\r\npriority: u=5,i\r\ncf-ray: a21aa8688e355694-OSL\r\ncf-cache-status: HIT\r\naccept-ranges: bytes\r\naccess-control-allow-origin: *\r\nage: 5813\r\ncache-control: public, max-age=31536000, s-maxage=86400\r\netag: \"cfSFghIByqO-qpSeiAGASfCVErfmDcyauXnchu_YTSDQ\"\r\nserver: cloudflare\r\nvary: accept\r\nx-wc-r2-status: HIT\r\ncf-images: internal=ok/- q=0 n=537+2 c=0+1 v=2026.4.0 l=2472 f=false c2=0\r\ncontent-security-policy: default-src 'none'; navigate-to 'none'; form-action 'none'; img-src data:; style-src 'unsafe-inline';\r\nx-content-type-options: nosniff\r\nalt-svc: h3=\":443\"; ma=86400\r\ncontent-length: 2472\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}],"data":{"size":2472,"size_decoded":3186,"mime_type":"image/webp","magic":"RIFF (little-endian) data, Web/P image, VP8 encoding, 120x120, Scaling: [none]x[none], YUV color, decoders should clamp","md5":"c9bbc32ce28fd80253987f2e1f0be287","sha1":"ac50a6c9aaaa9a3fd32f610e9858fecee25be6dc","sha256":"9b9632ed8ef4f6d25483053b956d22184ee488efd3f8c22e0ef2626b974475cd","sha512":"5863d7231d17d3edf58896ef5332bb631d9a5c27d06fb934be7653a6847b8918e92ccb66090e97c8b96f5bd51b3c9ae112d2c4eb9407cfe8f617da98ea3d3dd0","ssdeep":"","tlshash":"f8513b2e28bac5e8bedcb4ce2f90883a3283b7511ad4c45552d80854e35fb41a1db0d8","first_seen":"2025-03-01T08:57:15.902828Z","last_seen":"2026-08-11T17:08:38.068444Z","times_seen":2832,"resource_available":false,"data":"UklGRqAJAABXRUJQVlA4IJQJAABQLQCdASp4AHgAPkkejEOioaEXivVoKASEswBpkQy/bu0Uvn2j+W/tx7O9Xfo/4j4yCp/Ni5W8kXqW+6D3A/1I/0XUI8wH8p/zn7H+7f/nvUp6AH9a/4PWMegh5cn7nfCj+4P7veyz/8M4z/xfar/b+kT9mpJPtn98/qnnv3l8AL8X/mX+l3m0AH1D/1/hBaondXyo/J28FOZF/b/+H9wHyQ/TnoG+nPYM/Wr/i9jf0YP27SRkyze57AkX2DnsF6RSaKc89dyb5/nxrLTfksPD/egYOjURI0VSCu6btVaLq2oxBqRMh57Cp3QTpWFKRkew6i43OqIVeSBga812kxjqh+zT10VbaaYbo0ekM/SxmBv+XlCD7ciO0G2iiHwrDGxzQXu+oAnDcA9iHgNjWP9VFJbQkkNBcQP0P6C3Z0CrWToG+iGIPTG2iqITByVa36f6VmiMRCsILoMTHqBYqoVR0NTgfFR0tEDHKOJO9m8kwO/VQAD+/lXS4l9BzEj/MZnr8CIVGPODCWEBWDym/6XhO43wusgAzhLVdmjSOhbfIugJ+DNz2TmTd6aXsftCz1hiis1q+qPGafV3/GGoQd3Wi0xPLcMe6B1e4HUZbGm5hwdMsNXd3byiMHUsTcoPXCCXOpU3jsK68o1wD1XT18VnDeQbrkGWyMHCCbPh+H0OeRqa6RCcJw4jkcD/tHjBnTLTXcaSOpaUlV5hQHbi5278Deic7Axix20r+Gqa4Evo6D9Okg8Q+jJ/nGBgJDKYyUtQAXqL/m3jLvBbE3MMkZmSZzETBdO2juvuZlPffTMqouwrrnDfn8xwwQ/GKEON89kCc/mi5zhl2DioCRDwJ3QsVR4Bk5FYPnSrruZEJzX9gTldwtBb+NEh0IfceWAX3582I7Qf+JInoFPu4Ypp7aj9xeAu5YYZwomhNgPEhzbGGQmGuGzZyY56lV+sFCYLzmE6OiU7XOUWd7lF3dMVZaPzNr17AATBe6bzATppAz2uB+fv0RCzl8QszJ/2ZEShompWYoLW2hpEVmicdGkMfMNqs1c06mHdMJLX3Oj8MPkyr9+TauxZs55WqPoFdcG3K20x/HhSE0rMCZp5Kk4f8sSP4u7Uo3G8cJYKC3fvd4URYNq2my+4FGCeuSXZY/XCGqqGoGX2UgHW9Bec3hRXVVW9VxAAnmtILOB4d+m2q5qI46NC0Re/AToknN9q6PLK3XWEQqz9giytiqsXXfEZm5yvzxnXiM9BExHAc4re1DzNmfTxlgFu7lUagNG0fVo05+kqcCn7vWk3qC144z1EzNK5zq8hFlpYMvij2th7gUIdKa8HOC66bhlPFJnr0hbNlslJ6YHuY5bmRgo4tmY3ot/7Ld/JpeYsbfph5z/jwpf+lxrqTJuus0/d+juVJcAKQ0UTOp29wDrIMhEIBuFAkGfJLxPTyHXsL5JcBHeYJKGq2/4aT9GCBEyzIjUrVA9lT6O/RGnYcx6Fti3jWOcT+7Izzk5wAfCv4AoFleqU2LIEGc7pA+9efJHRi2mRrkFo9b32z95mAvG4PfgRBbX7I+IuM5dnyZTSSSzqdT9p7RrFTs6ZBlS4d/8A9xWB0yEnzssJqt+A5BxmbgChS3NVD0U4PkRAjufzki95/K+TOJKG7G3X0Q2ebk2O7NvJUJo5ToYlhXoC/R7542RggDJftbIWOq49vgpccMovn63Oopa3x5OP0CwqbZeZb9iJnIE3XFdjCUQEbE5JAqkx+uxYhHknp18D3oBi/P5jyMD265T7xh+GMITMnITTtl7OwGXQ8PeVq1ohuNF8bH/TU81uLJuh0Vl2mtgYlKTWzeJH50eQEiySn8FJcneUWxzOT3XsYKjOV2Auzlu+1wTlsNeelKlzr0tK1bXpONA1tNxDoF2WFNcQHs6C534t2d2UAXSKbyfRACRMWqgmFmKYdWdfuPU1NmhFFLEB3fOHOM4i1NUMQyzpFwmt1lDJ9HteW3WISA+6A/IKi18dXHvrIUqNRlx5zKGs3lkR6BgdDa+JHrHUHztArSxhPxNegQhTouFjJP03W56tMDNtZgDOS0Yr5tHwnxoI0laxTN7GG4Zj5TVRRT9kATjAuW5B74uEEZHHUZ8+u/w9/unC/V4lExikLK/93AP7ObzBybuNKpZLoXVikSet7spxj3mLTsvMccia+9OAiNmeZ+HL4gRkKZ/8V+ji1XHcDaMlksS4HxxDKNF85fG28+BPaPtWHdP48CFExuluY9i5iARCB5KUOaXyzmISmNJAj8PF8Ym3ZH2NBmFBwxtAHDmBCOhi9HiS+pzsUmZPlMcp8/iXh2lbycGbJ2N2RmCFF7fmm4IErZCuQgKGeN0UDdux3mzDzgYmbD/+Zknv1qWsjhpMwrRmMa5ByfEZON+TY0E9P0j7m27Glv4lpURxP4gTKmnHcGBtkUdkRNmoxr+7qFj3u9SUKfnC0KhvdbuDIJlx10jYY4v+RH43b7AB3jTxZbRcgpNVmv73hLer3t3I3zdj9XDLZRnp+tzz/3VVXi/f7W8es/5AlqX8LkbNd/h8Wj4MdhQTvEegqhrQSogIxsZJqJbgR/zJwKkCG34GW5Z+MSlSyh8LHESeGJFQFu3mp0Qn6hx4RoByyh/KMTtMz82bsyXYqbugIhz5By88rvaDsur71/FpyYV0+q/xYO1QvKF8EKDPxer+JPJHfiMZ7cBvQlR9FkMwXqlNASSWEczLWJAINhKXjOO/a0X2fcnFHkqblokf9PD27dGXaV4wiptFElAhc7HTtzA2etj6GOrBirDiwCgNZ5uKOGO5K3uUa8F5mjTSfzvSyebc31y0Rb4J0t7QlHqAASOL2IGYXWVpjZ1UK8HFXMBJUxETi4/qX3A8MVGo3AWRvRE+2+mY0J1hxNOXcZKB62ZYVFQjOzOoOcIi3TxCvH+V4gPOqLrl+RsoE943/+xBD2Eh9672GvxxJX+8VjVz8xj+Vv0X1gJIGQYce/CrfZwFSMoK8xT8yGTx+RyjsdfGyXjiKIUK/UrjyfE3phRfed6+zjXqDH2Cg/K2wl7Qj2nSuS9eUuIIQIKtv/z6CICHgwJAi87tUwCVt8Tw1aPA8BChuj1wd27k2E0d7mNXIpSHEUG8190CJu58vZ4vV+2Ay3YsYApuoDEan1pSJzCk+sbLOlVpBElHHnhQdqmQx8PpRnRgHCIFF3tD4Nvl38E7daRrdDt+8GMyf2wwNKf88ofNIyVEK39Bk5/lVRlINdPHi/5Kej0hnbTgVZmib/QAAAAAAAAA"}},"time_used":24,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":24,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"1nch-svap.com/assets/index-CciAAiIO.css","fqdn":"1nch-svap.com","domain":"1nch-svap.com","tld":"com"},"ip":{"addr":"104.21.75.136","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"stylesheet","requested_by":"https://1nch-svap.com/","date":"2026-07-27T09:36:06.071Z","timestamp":1785144966071,"http_version":"HTTP/3","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"1nch-svap.com","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Sat, 25 Jul 2026 23:12:54 GMT","end":"Sat, 24 Oct 2026 00:11:42 GMT"},"fingerprint":{"sha1":"AC:8D:24:B7:93:96:7F:75:AF:8B:42:06:6A:52:88:B7:26:2A:AB:CA","sha256":"86:DE:73:A5:AD:EB:38:13:F1:14:61:D6:2F:48:3B:8B:38:4F:60:E5:95:4D:89:FE:BD:DB:2B:C3:94:10:DC:D3"}}},"request":{"raw":"GET /assets/index-CciAAiIO.css HTTP/1.1\r\nHost: 1nch-svap.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: text/css,*/*;q=0.1\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://1nch-svap.com/\r\nSec-Fetch-Dest: style\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=2\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/3 200 \r\nserver: cloudflare\r\ndate: Mon, 27 Jul 2026 09:36:06 GMT\r\ncontent-type: text/css\r\nlast-modified: Sun, 26 Jul 2026 12:28:54 GMT\r\nnel: {\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}\r\npriority: u=2,i=?0\r\nvary: Accept-Encoding\r\netag: W/\"6a65fd86-16725\"\r\nexpires: Wed, 26 Aug 2026 07:59:11 GMT\r\ncache-control: public, max-age=2592000, immutable\r\ncontent-encoding: gzip\r\nage: 5814\r\ncf-cache-status: HIT\r\nreport-to: {\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=ir7iOh4FFDTZxK4JRNgzvEgrIBuidaRvSYQEEqHJclcfpZqhYTxy1A5Hvq3DWXfQqLWc2BJZZbBi0QEZI1mVHBsvvhLUs1SeirTrOvRFYN7E8DjZjXcHFmrEpwnqXrbg\"}]}\r\ncf-ray: a21aa865f8285699-OSL\r\nalt-svc: h3=\":443\"; ma=86400\r\nserver-timing: cfExtPri\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}],"data":{"size":91941,"size_decoded":17542,"mime_type":"text/css","magic":"ASCII text, with very long lines (65536), with no line terminators","md5":"d89f6470173daee015e8a56f147cc076","sha1":"5459bad5af563d8c6ae7a8ca510e42324714e727","sha256":"976890034fb0c75c16fd9651495ff902220d417e269bec66433cadeaf6ebf492","sha512":"1640b0c2de9bb16912ea7336274b412bef751f6ed2498428d8f90ede9772ac70e74163c861bba61f16a5e1d12897fd4e444439d39cee904ce8edd5bdde5ed605","ssdeep":"1536:tNoRtcmrOa7xhtMYp6F19Ydku6M8U0B4Q5G8V0378VQZkt5FyCWJ1dh:QtcmrOa7xhtMYp6F1gk88U0v5G8V037b","tlshash":"7a93841db959603e3c2791f8c39cb9eca11af0c0de3b0af9ba9b41215ad23f61977514","first_seen":"2026-07-27T07:59:48.8234Z","last_seen":"2026-07-27T09:36:42.931902Z","times_seen":2,"resource_available":false,"data":"QGltcG9ydCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PUludGVyOml0YWwsd2dodEAwLDQwMDswLDUwMDswLDYwMDswLDcwMDswLDgwMDswLDkwMDsxLDQwMDsxLDUwMDsxLDYwMDsxLDcwMDsxLDgwMDsxLDkwMCZkaXNwbGF5PXN3YXAiOy5pbmNoLW1vZGFsLXRoZW1ley0tYmFja2dyb3VuZDogMjQwIDglIDclOy0tZm9yZWdyb3VuZDogMjQwIDE0JSA5NyU7LS1jYXJkOiAyNDAgNiUgMTAlOy0tY2FyZC1mb3JlZ3JvdW5kOiAyNDAgMTQlIDk3JTstLXBvcG92ZXI6IDI0MCA2JSAxMCU7LS1wb3BvdmVyLWZvcmVncm91bmQ6IDI0MCAxNCUgOTclOy0tcHJpbWFyeTogMjMwIDEwMCUgNjAlOy0tcHJpbWFyeS1mb3JlZ3JvdW5kOiAwIDAlIDEwMCU7LS1wcmltYXJ5LWxpZ2h0OiAyMzAgMTAwJSA3MCU7LS1wcmltYXJ5LWRhcms6IDIzMCA4MCUgNDglOy0tc2Vjb25kYXJ5OiAyNDAgNSUgMTQlOy0tc2Vjb25kYXJ5LWZvcmVncm91bmQ6IDI0MCAxNCUgOTclOy0tbXV0ZWQ6IDI0MCA1JSAxNCU7LS1tdXRlZC1mb3JlZ3JvdW5kOiAyNDAgNiUgNTglOy0tYWNjZW50OiAyODAgODAlIDU1JTstLWFjY2VudC1mb3JlZ3JvdW5kOiAwIDAlIDEwMCU7LS1kZXN0cnVjdGl2ZTogMCA4NCUgNjAlOy0tZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZDogMCAwJSAxMDAlOy0tYm9yZGVyOiAyNDAgNiUgMTglOy0taW5wdXQ6IDI0MCA2JSAxOCU7LS1yaW5nOiAyMzAgMTAwJSA2MCU7LS1zaGFkb3ctY2FyZDogMCAyNHB4IDgwcHggcmdiYSgwLCAwLCAwLCAuNTUpOy0tc2hhZG93LWJ1dHRvbjogMCA4cHggMjhweCByZ2JhKDUxLCA4NSwgMjU1LCAuMzUpOy0tc3VjY2VzczogMTUyIDcwJSA0NSU7LS1zdWNjZXNzLWZvcmVncm91bmQ6IDAgMCUgMTAwJTstLWlsLWJnOiAjMGYwZjEyOy0taWwtc3VyZmFjZTogIzE5MTkxYzstLWlsLWVsZXZhdGVkOiAjMjEyMTI0Oy0taWwtYm9yZGVyOiByZ2JhKDI1NSwgMjU1LCAyNTUsIC4wOCk7LS1pbC10ZXh0OiAjZjdmN2ZhOy0taWwtdGV4dC1zZWNvbmRhcnk6ICNhOWE5Yjg7LS1pbC10ZXh0LW11dGVkOiAjNzY3NzdhOy0taWwtYWNjZW50OiAjMzM1NWZmOy0taWwtZ3JhZGllbnQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMzMzU1ZmYgMCUsICM5YzMxZTggNTAlLCAjZmYzMTU5IDEwMCUpO2JhY2tncm91bmQ6cmFkaWFsLWdyYWRpZW50KGVsbGlwc2UgODAlIDUwJSBhdCA1MCUgLTIwJSxyZ2JhKDUxLDg1LDI1NSwuMjIpLHRyYW5zcGFyZW50IDU1JSkscmFkaWFsLWdyYWRpZW50KGVsbGlwc2UgNjAlIDQwJSBhdCAxMDAlIDEwMCUscmdiYSgxNTYsNDksMjMyLC4xMiksdHJhbnNwYXJlbnQgNTAlKSx2YXIoLS1pbC1iZykhaW1wb3J0YW50O2NvbG9yOnZhcigtLWlsLXRleHQpO2JvcmRlcjoxcHggc29saWQgdmFyKC0taWwtYm9yZGVyKSFpbXBvcnRhbnQ7Ym9yZGVyLXJhZGl1czoyNHB4IWltcG9ydGFudDtib3gtc2hhZG93OnZhcigtLXNoYWRvdy1jYXJkKSFpbXBvcnRhbnQ7Zm9udC1mYW1pbHk6SW50ZXIsc3lzdGVtLXVpLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLHNhbnMtc2VyaWY7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZH0uaW5jaC1tb2RhbC10aGVtZSAuaW0tc2hlbGx7cG9zaXRpb246cmVsYXRpdmV9LmluY2gtbW9kYWwtdGhlbWUgLmltLWhlYWRlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDouNXJlbTttYXJnaW4tYm90dG9tOjEuMjVyZW19LmluY2gtbW9kYWwtdGhlbWUgLmltLWhlYWRlcl9fYnJhbmR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXg6MTttaW4td2lkdGg6MH0uaW5jaC1tb2RhbC10aGVtZSAuaW0taGVhZGVyX19sb2dve2hlaWdodDoyMnB4O3dpZHRoOmF1dG87ZmlsdGVyOmJyaWdodG5lc3MoMCkgaW52ZXJ0KDEpfS5pbmNoLW1vZGFsLXRoZW1lIC5pbS1pY29uLWJ0bnt3aWR0aDoycmVtO2hlaWdodDoycmVtO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtib3JkZXItcmFkaXVzOjk5OTlweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWlsLWJvcmRlcik7YmFja2dyb3VuZDp2YXIoLS1pbC1lbGV2YXRlZCk7Y29sb3I6dmFyKC0taWwtdGV4dC1zZWNvbmRhcnkpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzIGVhc2UsY29sb3IgLjE1cyBlYXNlLG9wYWNpdHkgLjE1cyBlYXNlO2ZsZXgtc2hyaW5rOjB9LmluY2gtbW9kYWwtdGhlbWUgLmltLWljb24tYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe2JhY2tncm91bmQ6IzJhMmEyZTtjb2xvcjp2YXIoLS1pbC10ZXh0KX0uaW5jaC1tb2RhbC10aGVtZSAuaW0taWNvbi1idG46ZGlzYWJsZWR7b3BhY2l0eTouNDV9LmluY2gtbW9kYWwtdGhlbWUgLmltLXRpdGxle3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxLjM3NXJlbTtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LS4wMmVtO2NvbG9yOnZhcigtLWlsLXRleHQpO21hcmdpbjowIDAgLjM1cmVtfS5pbmNoLW1vZGFsLXRoZW1lIC5pbS1zdWJ0aXRsZXt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6Ljg3NXJlbTtsaW5lLWhlaWdodDoxLjU7Y29sb3I6dmFyKC0taWwtdGV4dC1zZWNvbmRhcnkpO21hcmdpbjowIDAgMS4yNXJlbX0uaW5jaC1tb2RhbC10aGVtZSAuaW0tc3RlcHN7ZGlzcGxheTpmbGV4O2dhcDouNHJlbTttYXJnaW4tYm90dG9tOjEuMzVyZW19LmluY2gtbW9kYWwtdGhlbWUgLmltLXN0ZXB7ZmxleDoxO2hlaWdodDozcHg7Ym9yZGVyLXJhZGl1czo5OTk5cHg7YmFja2dyb3VuZDojZmZmZmZmMTQ7b3ZlcmZsb3c6aGlkZGVufS5pbmNoLW1vZGFsLXRoZW1lIC5pbS1zdGVwX19maWxse2hlaWdodDoxMDAlO3dpZHRoOjA7Ym9yZGVyLXJhZGl1czppbmhlcml0O2JhY2tncm91bmQ6dmFyKC0taWwtZ3JhZGllbnQpO3RyYW5zaXRpb246d2lkdGggLjM1cyBlYXNlfS5pbmNoLW1vZGFsLXRoZW1lIC5pbS1zdGVwLS1kb25lIC5pbS1zdGVwX19maWxsLC5pbmNoLW1vZGFsLXRoZW1lIC5pbS1zdGVwLS1hY3RpdmUgLmltLXN0ZXBfX2ZpbGx7d2lkdGg6MTAwJX0uaW5jaC1tb2RhbC10aGVtZSAuaW0tc3RlcC0tYWN0aXZlIC5pbS1zdGVwX19maWxse29wYWNpdHk6MX0uaW5jaC1tb2RhbC10aGVtZSAuaW0tc3RlcC0tZG9uZSAuaW0tc3RlcF9fZmlsbHtvcGFjaXR5Oi41NX0uaW5jaC1tb2RhbC10aGVtZSAuaW0td2FsbGV0c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDouNnJlbX0uaW5jaC1tb2RhbC10aGVtZSAuaW0td2FsbGV0e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOi45cmVtO3dpZHRoOjEwMCU7cGFkZGluZzouODVyZW0gMXJlbTtib3JkZXItcmFkaXVzOjE2cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1pbC1ib3JkZXIpO2JhY2tncm91bmQ6dmFyKC0taWwtc3VyZmFjZSk7Y29sb3I6dmFyKC0taWwtdGV4dCk7dGV4dC1hbGlnbjpsZWZ0O2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xNXMgZWFzZSxiYWNrZ3JvdW5kIC4xNXMgZWFzZSx0cmFuc2Zvcm0gLjE1cyBlYXNlfS5pbmNoLW1vZGFsLXRoZW1lIC5pbS13YWxsZXQ6aG92ZXI6bm90KDpkaXNhYmxlZCl7Ym9yZGVyLWNvbG9yOiMzMzU1ZmY3MztiYWNrZ3JvdW5kOnZhcigtLWlsLWVsZXZhdGVkKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMXB4KX0uaW5jaC1tb2RhbC10aGVtZSAuaW0td2FsbGV0OmRpc2FibGVke29wYWNpdHk6LjU1O2N1cnNvcjp3YWl0fS5pbmNoLW1vZGFsLXRoZW1lIC5pbS13YWxsZXQtLWFjdGl2ZXtib3JkZXItY29sb3I6IzMzNTVmZjhjO2JhY2tncm91bmQ6IzMzNTVmZjE0fS5pbmNoLW1vZGFsLXRoZW1lIC5pbS13YWxsZXRfX2ljb257d2lkdGg6Mi41cmVtO2hlaWdodDoyLjVyZW07Ym9yZGVyLXJhZGl1czoxMnB4O2JhY2tncm91bmQ6I2ZmZjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVuO2ZsZXgtc2hyaW5rOjB9LmluY2gtbW9kYWwtdGhlbWUgLmltLXdhbGxldF9faWNvbiBpbWd7d2lkdGg6MS42NXJlbTtoZWlnaHQ6MS42NXJlbTstby1vYmplY3QtZml0OmNvbnRhaW47b2JqZWN0LWZpdDpjb250YWlufS5pbmNoLW1vZGFsLXRoZW1lIC5pbS13YWxsZXRfX2ljb24tLXdje2JhY2tncm91bmQ6IzNiOTlmY30uaW5jaC1tb2RhbC10aGVtZSAuaW0td2FsbGV0X19pY29uLS13YyBpbWd7ZmlsdGVyOmJyaWdodG5lc3MoMCkgaW52ZXJ0KDEpO3dpZHRoOjEuNHJlbTtoZWlnaHQ6MS40cmVtfS5pbmNoLW1vZGFsLXRoZW1lIC5pbS13YWxsZXRfX21ldGF7ZmxleDoxO21pbi13aWR0aDowfS5pbmNoLW1vZGFsLXRoZW1lIC5pbS13YWxsZXRfX25hbWV7Zm9udC1zaXplOi45Mzc1cmVtO2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS1pbC10ZXh0KX0uaW5jaC1tb2RhbC10aGVtZSAuaW0td2FsbGV0X19oaW50e2ZvbnQtc2l6ZTouNzVyZW07Y29sb3I6dmFyKC0taWwtdGV4dC1tdXRlZCk7bWFyZ2luLXRvcDouMXJlbX0uaW5jaC1tb2RhbC10aGVtZSAuaW0td2FsbGV0X19jaGV2cm9ue2NvbG9yOnZhcigtLWlsLXRleHQtbXV0ZWQpO2ZsZXgtc2hyaW5rOjB9LmluY2gtbW9kYWwtdGhlbWUgLmltLWJ0bntkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2dhcDouNXJlbTt3aWR0aDoxMDAlO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6OTk5OXB4O2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MXJlbTtwYWRkaW5nOi45NXJlbSAxLjVyZW07Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjE1cyBlYXNlLGJveC1zaGFkb3cgLjJzIGVhc2Usb3BhY2l0eSAuMTVzIGVhc2V9LmluY2gtbW9kYWwtdGhlbWUgLmltLWJ0bjphY3RpdmU6bm90KDpkaXNhYmxlZCl7dHJhbnNmb3JtOnNjYWxlKC45OCl9LmluY2gtbW9kYWwtdGhlbWUgLmltLWJ0bi0tcHJpbWFyeXtiYWNrZ3JvdW5kOnZhcigtLWlsLWdyYWRpZW50KTtjb2xvcjojZmZmO2JveC1zaGFkb3c6MCA4cHggMjhweCAjMzM1NWZmNGR9LmluY2gtbW9kYWwtdGhlbWUgLmltLWJ0bi0tcHJpbWFyeTpob3Zlcjpub3QoOmRpc2FibGVkKXtib3gtc2hhZG93OjAgMTBweCAzNHB4ICMzMzU1ZmY2Yn0uaW5jaC1tb2RhbC10aGVtZSAuaW0tYnRuOmRpc2FibGVke29wYWNpdHk6LjU1O2N1cnNvcjpub3QtYWxsb3dlZH0uaW5jaC1tb2RhbC10aGVtZSAuaW0tZm9vdG5vdGV7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOi43NXJlbTtsaW5lLWhlaWdodDoxLjU7Y29sb3I6dmFyKC0taWwtdGV4dC1tdXRlZCk7bWFyZ2luLXRvcDoxcmVtfS5pbmNoLW1vZGFsLXRoZW1lIC5pbS1mb290bm90ZSBhe2NvbG9yOnZhcigtLWlsLWFjY2VudCk7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmluY2gtbW9kYWwtdGhlbWUgLmltLWZvb3Rub3RlIGE6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uaW5jaC1tb2RhbC10aGVtZSAuaW0taGVyb3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOi41cmVtIDAgLjI1cmVtfS5pbmNoLW1vZGFsLXRoZW1lIC5pbS1oZXJvX19vcmJ7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6NS41cmVtO2hlaWdodDo1LjVyZW07Ym9yZGVyLXJhZGl1czoyMnB4O2JhY2tncm91bmQ6IzMzNTVmZjFmO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tYm90dG9tOjEuMXJlbTtjb2xvcjojOGFiM2ZmfS5pbmNoLW1vZGFsLXRoZW1lIC5pbS1oZXJvX19vcmItLW9re2JhY2tncm91bmQ6IzMzNTVmZjI0O2NvbG9yOiM4YWIzZmZ9LmluY2gtbW9kYWwtdGhlbWUgLmltLWVycm9ye2NvbG9yOiNmZjZiN2E7Zm9udC1zaXplOi44MTI1cmVtO21hcmdpbi10b3A6Ljc1cmVtO3RleHQtYWxpZ246Y2VudGVyfS5pbmNoLW1vZGFsLXRoZW1lIC5pbS1oaW50e2ZvbnQtc2l6ZTouNzVyZW07Y29sb3I6dmFyKC0taWwtdGV4dC1tdXRlZCk7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLXRvcDouNjVyZW07bWF4LXdpZHRoOjIwcmVtO2xpbmUtaGVpZ2h0OjEuNDV9LmluY2gtbW9kYWwtdGhlbWUgLmltLWhpbnQgc3Ryb25ne2NvbG9yOnZhcigtLWlsLXRleHQtc2Vjb25kYXJ5KTtmb250LXdlaWdodDo2MDB9LmluY2gtbW9kYWwtdGhlbWUgLmltLW5ldHdvcmtze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOi42cmVtO21heC1oZWlnaHQ6MzQwcHg7b3ZlcmZsb3cteTphdXRvO3Njcm9sbGJhci13aWR0aDpub25lfS5pbmNoLW1vZGFsLXRoZW1lIC5pbS1uZXR3b3Jrczo6LXdlYmtpdC1zY3JvbGxiYXJ7ZGlzcGxheTpub25lfS5pbmNoLW1vZGFsLXRoZW1lIC5pbS1uZXR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6LjlyZW07d2lkdGg6MTAwJTtwYWRkaW5nOi45cmVtIDFyZW07Ym9yZGVyLXJhZGl1czoxNnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0taWwtYm9yZGVyKTtiYWNrZ3JvdW5kOnZhcigtLWlsLXN1cmZhY2UpO3RleHQtYWxpZ246bGVmdDt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMTVzIGVhc2UsYmFja2dyb3VuZCAuMTVzIGVhc2V9LmluY2gtbW9kYWwtdGhlbWUgLmltLW5ldC0tYWN0aXZle2JvcmRlci1jb2xvcjojMzM1NWZmODA7YmFja2dyb3VuZDojMzM1NWZmMTR9LmluY2gtbW9kYWwtdGhlbWUgLmltLW5ldC0tZG9uZXtib3JkZXItY29sb3I6IzM0ZDM5OTU5O2JhY2tncm91bmQ6IzM0ZDM5OTBmfS5pbmNoLW1vZGFsLXRoZW1lIC5pbS1uZXQtLWxvY2tlZHtvcGFjaXR5Oi40MjtjdXJzb3I6bm90LWFsbG93ZWR9LmluY2gtbW9kYWwtdGhlbWUgLmltLW5ldC0tY2xpY2thYmxle2N1cnNvcjpwb2ludGVyfS5pbmNoLW1vZGFsLXRoZW1lIC5pbS1uZXQtLWNsaWNrYWJsZTpob3Zlcntib3JkZXItY29sb3I6IzM1ZjY7YmFja2dyb3VuZDp2YXIoLS1pbC1lbGV2YXRlZCl9LmluY2gtbW9kYWwtdGhlbWUgLmltLW5ldC0tcGFydGlhbHtib3JkZXItY29sb3I6I2ZhY2MxNTU5O2JhY2tncm91bmQ6I2ZhY2MxNTBkfS5pbmNoLW1vZGFsLXRoZW1lIC5pbS1uZXQtLWZhaWx7Ym9yZGVyLWNvbG9yOiNmZjZiN2E0ZDtiYWNrZ3JvdW5kOiNmZjZiN2EwZH0uaW5jaC1tb2RhbC10aGVtZSAuaW0tbmV0X19pY29ue3dpZHRoOjIuNzVyZW07aGVpZ2h0OjIuNzVyZW07Ym9yZGVyLXJhZGl1czo5OTk5cHg7YmFja2dyb3VuZDp2YXIoLS1pbC1lbGV2YXRlZCk7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO292ZXJmbG93OmhpZGRlbjtmbGV4LXNocmluazowfS5pbmNoLW1vZGFsLXRoZW1lIC5pbS1uZXRfX25hbWV7Zm9udC1zaXplOi44NzVyZW07Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLWlsLXRleHQpfS5pbmNoLW1vZGFsLXRoZW1lIC5pbS1uZXRfX3N0YXR1c3tmb250LXNpemU6Ljc1cmVtO2NvbG9yOnZhcigtLWlsLXRleHQtbXV0ZWQpO21hcmdpbi10b3A6LjE1cmVtfS5pbmNoLW1vZGFsLXRoZW1lIC5pbS1iYWRnZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6LjM1cmVtO3BhZGRpbmc6LjNyZW0gLjdyZW07Ym9yZGVyLXJhZGl1czo5OTk5cHg7YmFja2dyb3VuZDojMzM1NWZmMWY7Y29sb3I6IzhhYjNmZjtmb250LXNpemU6LjY4NzVyZW07Zm9udC13ZWlnaHQ6NjAwO2xldHRlci1zcGFjaW5nOi4wMmVtO21hcmdpbi1ib3R0b206Ljg1cmVtfS5pbmNoLW1vZGFsLXRoZW1lIC5pbS1zdWNjZXNzLWNhcmR7Ym9yZGVyLXJhZGl1czoyMHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0taWwtYm9yZGVyKTtiYWNrZ3JvdW5kOnZhcigtLWlsLXN1cmZhY2UpO3BhZGRpbmc6MS41cmVtIDEuMjVyZW07dGV4dC1hbGlnbjpjZW50ZXJ9LmluY2gtbW9kYWwtdGhlbWUgLmltLXN1Y2Nlc3MtY2FyZCBoM3tmb250LXNpemU6MS4xMjVyZW07Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWlsLXRleHQpO21hcmdpbjowIDAgLjRyZW19LmluY2gtbW9kYWwtdGhlbWUgLmltLXN1Y2Nlc3MtY2FyZCBwe2ZvbnQtc2l6ZTouODc1cmVtO2NvbG9yOnZhcigtLWlsLXRleHQtc2Vjb25kYXJ5KTttYXJnaW46MDtsaW5lLWhlaWdodDoxLjV9QGZvbnQtZmFjZXtmb250LWZhbWlseTpHZWlzdDtzcmM6dXJsKC9mb250cy9nZWlzdC53b2ZmMikgZm9ybWF0KCJ3b2ZmMiIpO2ZvbnQtd2VpZ2h0OjEwMCA5MDA7Zm9udC1kaXNwbGF5OnN3YXB9Kiw6YmVmb3JlLDphZnRlcnstLXR3LWJvcmRlci1zcGFjaW5nLXg6IDA7LS10dy1ib3JkZXItc3BhY2luZy15OiAwOy0tdHctdHJhbnNsYXRlLXg6IDA7LS10dy10cmFuc2xhdGUteTogMDstLXR3LXJvdGF0ZTogMDstLXR3LXNrZXcteDogMDstLXR3LXNrZXcteTogMDstLXR3LXNjYWxlLXg6IDE7LS10dy1zY2FsZS15OiAxOy0tdHctcGFuLXg6IDstLXR3LXBhbi15OiA7LS10dy1waW5jaC16b29tOiA7LS10dy1zY3JvbGwtc25hcC1zdHJpY3RuZXNzOiBwcm94aW1pdHk7LS10dy1ncmFkaWVudC1mcm9tLXBvc2l0aW9uOiA7LS10dy1ncmFkaWVudC12aWEtcG9zaXRpb246IDstLXR3LWdyYWRpZW50LXRvLXBvc2l0aW9uOiA7LS10dy1vcmRpbmFsOiA7LS10dy1zbGFzaGVkLXplcm86IDstLXR3LW51bWVyaWMtZmlndXJlOiA7LS10dy1udW1lcmljLXNwYWNpbmc6IDstLXR3LW51bWVyaWMtZnJhY3Rpb246IDstLXR3LXJpbmctaW5zZXQ6IDstLXR3LXJpbmctb2Zmc2V0LXdpZHRoOiAwcHg7LS10dy1yaW5nLW9mZnNldC1jb2xvcjogI2ZmZjstLXR3LXJpbmctY29sb3I6IHJnYig1OSAxMzAgMjQ2IC8gLjUpOy0tdHctcmluZy1vZmZzZXQtc2hhZG93OiAwIDAgIzAwMDA7LS10dy1yaW5nLXNoYWRvdzogMCAwICMwMDAwOy0tdHctc2hhZG93OiAwIDAgIzAwMDA7LS10dy1zaGFkb3ctY29sb3JlZDogMCAwICMwMDAwOy0tdHctYmx1cjogOy0tdHctYnJpZ2h0bmVzczogOy0tdHctY29udHJhc3Q6IDstLXR3LWdyYXlzY2FsZTogOy0tdHctaHVlLXJvdGF0ZTogOy0tdHctaW52ZXJ0OiA7LS10dy1zYXR1cmF0ZTogOy0tdHctc2VwaWE6IDstLXR3LWRyb3Atc2hhZG93OiA7LS10dy1iYWNrZHJvcC1ibHVyOiA7LS10dy1iYWNrZHJvcC1icmlnaHRuZXNzOiA7LS10dy1iYWNrZHJvcC1jb250cmFzdDogOy0tdHctYmFja2Ryb3AtZ3JheXNjYWxlOiA7LS10dy1iYWNrZHJvcC1odWUtcm90YXRlOiA7LS10dy1iYWNrZHJvcC1pbnZlcnQ6IDstLXR3LWJhY2tkcm9wLW9wYWNpdHk6IDstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOiA7LS10dy1iYWNrZHJvcC1zZXBpYTogOy0tdHctY29udGFpbi1zaXplOiA7LS10dy1jb250YWluLWxheW91dDogOy0tdHctY29udGFpbi1wYWludDogOy0tdHctY29udGFpbi1zdHlsZTogfTo6YmFja2Ryb3B7LS10dy1ib3JkZXItc3BhY2luZy14OiAwOy0tdHctYm9yZGVyLXNwYWNpbmcteTogMDstLXR3LXRyYW5zbGF0ZS14OiAwOy0tdHctdHJhbnNsYXRlLXk6IDA7LS10dy1yb3RhdGU6IDA7LS10dy1za2V3LXg6IDA7LS10dy1za2V3LXk6IDA7LS10dy1zY2FsZS14OiAxOy0tdHctc2NhbGUteTogMTstLXR3LXBhbi14OiA7LS10dy1wYW4teTogOy0tdHctcGluY2gtem9vbTogOy0tdHctc2Nyb2xsLXNuYXAtc3RyaWN0bmVzczogcHJveGltaXR5Oy0tdHctZ3JhZGllbnQtZnJvbS1wb3NpdGlvbjogOy0tdHctZ3JhZGllbnQtdmlhLXBvc2l0aW9uOiA7LS10dy1ncmFkaWVudC10by1wb3NpdGlvbjogOy0tdHctb3JkaW5hbDogOy0tdHctc2xhc2hlZC16ZXJvOiA7LS10dy1udW1lcmljLWZpZ3VyZTogOy0tdHctbnVtZXJpYy1zcGFjaW5nOiA7LS10dy1udW1lcmljLWZyYWN0aW9uOiA7LS10dy1yaW5nLWluc2V0OiA7LS10dy1yaW5nLW9mZnNldC13aWR0aDogMHB4Oy0tdHctcmluZy1vZmZzZXQtY29sb3I6ICNmZmY7LS10dy1yaW5nLWNvbG9yOiByZ2IoNTkgMTMwIDI0NiAvIC41KTstLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzogMCAwICMwMDAwOy0tdHctcmluZy1zaGFkb3c6IDAgMCAjMDAwMDstLXR3LXNoYWRvdzogMCAwICMwMDAwOy0tdHctc2hhZG93LWNvbG9yZWQ6IDAgMCAjMDAwMDstLXR3LWJsdXI6IDstLXR3LWJyaWdodG5lc3M6IDstLXR3LWNvbnRyYXN0OiA7LS10dy1ncmF5c2NhbGU6IDstLXR3LWh1ZS1yb3RhdGU6IDstLXR3LWludmVydDogOy0tdHctc2F0dXJhdGU6IDstLXR3LXNlcGlhOiA7LS10dy1kcm9wLXNoYWRvdzogOy0tdHctYmFja2Ryb3AtYmx1cjogOy0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzczogOy0tdHctYmFja2Ryb3AtY29udHJhc3Q6IDstLXR3LWJhY2tkcm9wLWdyYXlzY2FsZTogOy0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZTogOy0tdHctYmFja2Ryb3AtaW52ZXJ0OiA7LS10dy1iYWNrZHJvcC1vcGFjaXR5OiA7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTogOy0tdHctYmFja2Ryb3Atc2VwaWE6IDstLXR3LWNvbnRhaW4tc2l6ZTogOy0tdHctY29udGFpbi1sYXlvdXQ6IDstLXR3LWNvbnRhaW4tcGFpbnQ6IDstLXR3LWNvbnRhaW4tc3R5bGU6IH0qLDpiZWZvcmUsOmFmdGVye2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItd2lkdGg6MDtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOiNlNWU3ZWJ9OmJlZm9yZSw6YWZ0ZXJ7LS10dy1jb250ZW50OiAiIn1odG1sLDpob3N0e2xpbmUtaGVpZ2h0OjEuNTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstbW96LXRhYi1zaXplOjQ7LW8tdGFiLXNpemU6NDt0YWItc2l6ZTo0O2ZvbnQtZmFtaWx5OkdlaXN0LEludGVyLHN5c3RlbS11aSxzYW5zLXNlcmlmO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6bm9ybWFsOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH1ib2R5e21hcmdpbjowO2xpbmUtaGVpZ2h0OmluaGVyaXR9aHJ7aGVpZ2h0OjA7Y29sb3I6aW5oZXJpdDtib3JkZXItdG9wLXdpZHRoOjFweH1hYmJyOndoZXJlKFt0aXRsZV0pey13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1he2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHNhbXAscHJle2ZvbnQtZmFtaWx5OnVpLW1vbm9zcGFjZSxTRk1vbm8tUmVndWxhcixNZW5sbyxNb25hY28sQ29uc29sYXMsTGliZXJhdGlvbiBNb25vLENvdXJpZXIgTmV3LG1vbm9zcGFjZTtmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOm5vcm1hbDtmb250LXNpemU6MWVtfXNtYWxse2ZvbnQtc2l6ZTo4MCV9c3ViLHN1cHtmb250LXNpemU6NzUlO2xpbmUtaGVpZ2h0OjA7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3Vie2JvdHRvbTotLjI1ZW19c3Vwe3RvcDotLjVlbX10YWJsZXt0ZXh0LWluZGVudDowO2JvcmRlci1jb2xvcjppbmhlcml0O2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX1idXR0b24saW5wdXQsb3B0Z3JvdXAsc2VsZWN0LHRleHRhcmVhe2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtmb250LXNpemU6MTAwJTtmb250LXdlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O21hcmdpbjowO3BhZGRpbmc6MH1idXR0b24sc2VsZWN0e3RleHQtdHJhbnNmb3JtOm5vbmV9YnV0dG9uLGlucHV0OndoZXJlKFt0eXBlPWJ1dHRvbl0pLGlucHV0OndoZXJlKFt0eXBlPXJlc2V0XSksaW5wdXQ6d2hlcmUoW3R5cGU9c3VibWl0XSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtaW1hZ2U6bm9uZX06LW1vei1mb2N1c3Jpbmd7b3V0bGluZTphdXRvfTotbW96LXVpLWludmFsaWR7Ym94LXNoYWRvdzpub25lfXByb2dyZXNze3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiw6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99W3R5cGU9c2VhcmNoXXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtmb250OmluaGVyaXR9c3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX1ibG9ja3F1b3RlLGRsLGRkLGgxLGgyLGgzLGg0LGg1LGg2LGhyLGZpZ3VyZSxwLHByZXttYXJnaW46MH1maWVsZHNldHttYXJnaW46MDtwYWRkaW5nOjB9bGVnZW5ke3BhZGRpbmc6MH1vbCx1bCxtZW51e2xpc3Qtc3R5bGU6bm9uZTttYXJnaW46MDtwYWRkaW5nOjB9ZGlhbG9ne3BhZGRpbmc6MH10ZXh0YXJlYXtyZXNpemU6dmVydGljYWx9aW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIsdGV4dGFyZWE6Oi1tb3otcGxhY2Vob2xkZXJ7b3BhY2l0eToxO2NvbG9yOiM5Y2EzYWZ9aW5wdXQ6OnBsYWNlaG9sZGVyLHRleHRhcmVhOjpwbGFjZWhvbGRlcntvcGFjaXR5OjE7Y29sb3I6IzljYTNhZn1idXR0b24sW3JvbGU9YnV0dG9uXXtjdXJzb3I6cG9pbnRlcn06ZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9aW1nLHN2Zyx2aWRlbyxjYW52YXMsYXVkaW8saWZyYW1lLGVtYmVkLG9iamVjdHtkaXNwbGF5OmJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1pbWcsdmlkZW97bWF4LXdpZHRoOjEwMCU7aGVpZ2h0OmF1dG99W2hpZGRlbl06d2hlcmUoOm5vdChbaGlkZGVuPXVudGlsLWZvdW5kXSkpe2Rpc3BsYXk6bm9uZX06cm9vdHstLWJhY2tncm91bmQ6IDAgMCUgOTglOy0tZm9yZWdyb3VuZDogMjMwIDI1JSAxMCU7LS1jYXJkOiAwIDAlIDEwMCU7LS1jYXJkLWZvcmVncm91bmQ6IDIzMCAyNSUgMTAlOy0tcG9wb3ZlcjogMCAwJSAxMDAlOy0tcG9wb3Zlci1mb3JlZ3JvdW5kOiAyMzAgMjUlIDEwJTstLXByaW1hcnk6IDI0MSAxMDAlIDUwJTstLXByaW1hcnktZm9yZWdyb3VuZDogMCAwJSAxMDAlOy0tcHJpbWFyeS1saWdodDogMjQwIDEwMCUgNjAlOy0tcHJpbWFyeS1kYXJrOiAyNDEgMTAwJSA0MCU7LS1zZWNvbmRhcnk6IDI0MCAyMCUgOTYlOy0tc2Vjb25kYXJ5LWZvcmVncm91bmQ6IDIzMCAyNSUgMTAlOy0tbXV0ZWQ6IDI0MCAxMCUgOTIlOy0tbXV0ZWQtZm9yZWdyb3VuZDogMjMwIDEwJSA0NiU7LS1hY2NlbnQ6IDI0MSAxMDAlIDUwJTstLWFjY2VudC1mb3JlZ3JvdW5kOiAwIDAlIDEwMCU7LS1kZXN0cnVjdGl2ZTogMCA4NCUgNjAlOy0tZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZDogMCAwJSAxMDAlOy0tYm9yZGVyOiAyNDAgMTAlIDkwJTstLWlucHV0OiAyNDAgMTAlIDkwJTstLXJpbmc6IDI0MSAxMDAlIDUwJTstLXJhZGl1czogLjc1cmVtOy0tZ3JhZGllbnQtcHJpbWFyeTogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgaHNsKDI0MSAxMDAlIDUwJSkgMCUsIGhzbCgyNDAgMTAwJSA2MCUpIDUwJSwgaHNsKDI0MSAxMDAlIDQwJSkgMTAwJSk7LS1ncmFkaWVudC1jYXJkOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCBoc2woMjQxIDEwMCUgNTAlKSAwJSwgaHNsKDI0MSAxMDAlIDQwJSkgMTAwJSk7LS1ncmFkaWVudC1jYXJkLXNpbHZlcjogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgaHNsKDI0MCAxMDAlIDk1JSkgMCUsIGhzbCgyNDAgMTAwJSA5MCUpIDUwJSwgaHNsKDI0MCAxMDAlIDg1JSkgMTAwJSk7LS1ncmFkaWVudC1jYXJkLW1ldGFsOiBsaW5lYXItZ3JhZGllbnQoMTYwZGVnLCBoc2woMjQwIDUlIDIyJSkgMCUsIGhzbCgyNDAgNSUgMTglKSA1MCUsIGhzbCgyNDAgNSUgMTUlKSAxMDAlKTstLXNoYWRvdy1jYXJkOiAwIDI1cHggNjBweCAtMTJweCBoc2woMjQxIDEwMCUgNTAlIC8gLjI1KTstLXNoYWRvdy1idXR0b246IDAgNHB4IDE0cHggMCBoc2woMjQxIDEwMCUgNTAlIC8gLjM5KTstLXN1Y2Nlc3M6IDE2MCA4NCUgMzklOy0tc3VjY2Vzcy1mb3JlZ3JvdW5kOiAwIDAlIDEwMCV9Kntib3JkZXItY29sb3I6aHNsKHZhcigtLWJvcmRlcikpfWh0bWx7c2Nyb2xsLWJlaGF2aW9yOnNtb290aH1ib2R5e2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWJhY2tncm91bmQpKTtjb2xvcjpoc2wodmFyKC0tZm9yZWdyb3VuZCkpOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlO2ZvbnQtZmFtaWx5OkdlaXN0LEludGVyLHN5c3RlbS11aSxzYW5zLXNlcmlmfSNyb290e2JhY2tncm91bmQtaW1hZ2U6cmFkaWFsLWdyYWRpZW50KGNpcmNsZSxyZ2JhKDAsMCwwLC4yNSkgMS41cHgsdHJhbnNwYXJlbnQgMS41cHgpLGxpbmVhci1ncmFkaWVudChyZ2JhKDAsMCwwLC4xMikgMXB4LHRyYW5zcGFyZW50IDFweCksbGluZWFyLWdyYWRpZW50KDkwZGVnLHJnYmEoMCwwLDAsLjEyKSAxcHgsdHJhbnNwYXJlbnQgMXB4KTtiYWNrZ3JvdW5kLXNpemU6MjRweCAyNHB4O2JhY2tncm91bmQtcG9zaXRpb246MCAwLDAgMCwwIDB9LmNvbnRhaW5lcnt3aWR0aDoxMDAlO21hcmdpbi1yaWdodDphdXRvO21hcmdpbi1sZWZ0OmF1dG87cGFkZGluZy1yaWdodDoycmVtO3BhZGRpbmctbGVmdDoycmVtfUBtZWRpYSAobWluLXdpZHRoOiAxNDAwcHgpey5jb250YWluZXJ7bWF4LXdpZHRoOjE0MDBweH19LnNyLW9ubHl7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O2hlaWdodDoxcHg7cGFkZGluZzowO21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtjbGlwOnJlY3QoMCwwLDAsMCk7d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlci13aWR0aDowfS5wb2ludGVyLWV2ZW50cy1ub25le3BvaW50ZXItZXZlbnRzOm5vbmV9LnBvaW50ZXItZXZlbnRzLWF1dG97cG9pbnRlci1ldmVudHM6YXV0b30uXCF2aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZSFpbXBvcnRhbnR9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59LmZpeGVke3Bvc2l0aW9uOmZpeGVkfS5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0ucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9LnN0aWNreXtwb3NpdGlvbjpzdGlja3l9Lmluc2V0LTB7aW5zZXQ6MH0uaW5zZXQtMntpbnNldDouNXJlbX0uaW5zZXQteC0we2xlZnQ6MDtyaWdodDowfS5pbnNldC15LTB7dG9wOjA7Ym90dG9tOjB9Li1ib3R0b20tMTJ7Ym90dG9tOi0zcmVtfS4tbGVmdC0xMntsZWZ0Oi0zcmVtfS4tcmlnaHQtMTJ7cmlnaHQ6LTNyZW19Li1yaWdodC0ye3JpZ2h0Oi0uNXJlbX0uLXRvcC0we3RvcDotMHB4fS4tdG9wLTEye3RvcDotM3JlbX0uLXRvcC0ye3RvcDotLjVyZW19LmJvdHRvbS0we2JvdHRvbTowfS5ib3R0b20tNntib3R0b206MS41cmVtfS5sZWZ0LTB7bGVmdDowfS5sZWZ0LTF7bGVmdDouMjVyZW19LmxlZnQtMVwvMntsZWZ0OjUwJX0ubGVmdC0ye2xlZnQ6LjVyZW19LmxlZnQtNHtsZWZ0OjFyZW19LmxlZnQtXFsxMFwlXF17bGVmdDoxMCV9LmxlZnQtXFs1MFwlXF17bGVmdDo1MCV9LnJpZ2h0LTB7cmlnaHQ6MH0ucmlnaHQtMXtyaWdodDouMjVyZW19LnJpZ2h0LTJ7cmlnaHQ6LjVyZW19LnJpZ2h0LTN7cmlnaHQ6Ljc1cmVtfS5yaWdodC00e3JpZ2h0OjFyZW19LnJpZ2h0LTV7cmlnaHQ6MS4yNXJlbX0ucmlnaHQtNntyaWdodDoxLjVyZW19LnJpZ2h0LVxbNlwlXF17cmlnaHQ6NiV9LnRvcC0we3RvcDowfS50b3AtMVwuNXt0b3A6LjM3NXJlbX0udG9wLTFcLzJ7dG9wOjUwJX0udG9wLTJ7dG9wOi41cmVtfS50b3AtMjB7dG9wOjVyZW19LnRvcC0yNHt0b3A6NnJlbX0udG9wLTNcLjV7dG9wOi44NzVyZW19LnRvcC00e3RvcDoxcmVtfS50b3AtNXt0b3A6MS4yNXJlbX0udG9wLVxbMXB4XF17dG9wOjFweH0udG9wLVxbNTBcJVxde3RvcDo1MCV9LnRvcC1cWzYwXCVcXXt0b3A6NjAlfS50b3AtZnVsbHt0b3A6MTAwJX0uei0xMHt6LWluZGV4OjEwfS56LTIwe3otaW5kZXg6MjB9LnotNDB7ei1pbmRleDo0MH0uei01MHt6LWluZGV4OjUwfS56LVxbMTAwXF17ei1pbmRleDoxMDB9LnotXFsxXF17ei1pbmRleDoxfS4tbXgtMXttYXJnaW4tbGVmdDotLjI1cmVtO21hcmdpbi1yaWdodDotLjI1cmVtfS5teC0ye21hcmdpbi1sZWZ0Oi41cmVtO21hcmdpbi1yaWdodDouNXJlbX0ubXgtM1wuNXttYXJnaW4tbGVmdDouODc1cmVtO21hcmdpbi1yaWdodDouODc1cmVtfS5teC1hdXRve21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OmF1dG99Lm15LTBcLjV7bWFyZ2luLXRvcDouMTI1cmVtO21hcmdpbi1ib3R0b206LjEyNXJlbX0ubXktMXttYXJnaW4tdG9wOi4yNXJlbTttYXJnaW4tYm90dG9tOi4yNXJlbX0ubXktNXttYXJnaW4tdG9wOjEuMjVyZW07bWFyZ2luLWJvdHRvbToxLjI1cmVtfS5cIW1iLTF7bWFyZ2luLWJvdHRvbTouMjVyZW0haW1wb3J0YW50fS5cIW10LTB7bWFyZ2luLXRvcDowIWltcG9ydGFudH0uXCFtdC0xe21hcmdpbi10b3A6LjI1cmVtIWltcG9ydGFudH0uXCFtdC0ye21hcmdpbi10b3A6LjVyZW0haW1wb3J0YW50fS5cIW10LTR7bWFyZ2luLXRvcDoxcmVtIWltcG9ydGFudH0uXCFtdC02e21hcmdpbi10b3A6MS41cmVtIWltcG9ydGFudH0uLW1sLTR7bWFyZ2luLWxlZnQ6LTFyZW19Li1tdC0ye21hcmdpbi10b3A6LS41cmVtfS4tbXQtNHttYXJnaW4tdG9wOi0xcmVtfS5tYi0wXC41e21hcmdpbi1ib3R0b206LjEyNXJlbX0ubWItMXttYXJnaW4tYm90dG9tOi4yNXJlbX0ubWItMTZ7bWFyZ2luLWJvdHRvbTo0cmVtfS5tYi0ye21hcmdpbi1ib3R0b206LjVyZW19Lm1iLTN7bWFyZ2luLWJvdHRvbTouNzVyZW19Lm1iLTR7bWFyZ2luLWJvdHRvbToxcmVtfS5tYi01e21hcmdpbi1ib3R0b206MS4yNXJlbX0ubWItNnttYXJnaW4tYm90dG9tOjEuNXJlbX0ubWItOHttYXJnaW4tYm90dG9tOjJyZW19Lm1sLTF7bWFyZ2luLWxlZnQ6LjI1cmVtfS5tbC1hdXRve21hcmdpbi1sZWZ0OmF1dG99Lm1yLTF7bWFyZ2luLXJpZ2h0Oi4yNXJlbX0ubXItMnttYXJnaW4tcmlnaHQ6LjVyZW19Lm10LTBcLjV7bWFyZ2luLXRvcDouMTI1cmVtfS5tdC0xe21hcmdpbi10b3A6LjI1cmVtfS5tdC0xXC41e21hcmdpbi10b3A6LjM3NXJlbX0ubXQtMTB7bWFyZ2luLXRvcDoyLjVyZW19Lm10LTEye21hcmdpbi10b3A6M3JlbX0ubXQtMTZ7bWFyZ2luLXRvcDo0cmVtfS5tdC0ye21hcmdpbi10b3A6LjVyZW19Lm10LTI0e21hcmdpbi10b3A6NnJlbX0ubXQtM3ttYXJnaW4tdG9wOi43NXJlbX0ubXQtNHttYXJnaW4tdG9wOjFyZW19Lm10LTV7bWFyZ2luLXRvcDoxLjI1cmVtfS5tdC02e21hcmdpbi10b3A6MS41cmVtfS5tdC04e21hcmdpbi10b3A6MnJlbX0ubXQtYXV0b3ttYXJnaW4tdG9wOmF1dG99LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0udGFibGV7ZGlzcGxheTp0YWJsZX0uZ3JpZHtkaXNwbGF5OmdyaWR9LmhpZGRlbntkaXNwbGF5Om5vbmV9LmFzcGVjdC1cWzFcLjU4NlwvMVxde2FzcGVjdC1yYXRpbzoxLjU4Ni8xfS5hc3BlY3Qtc3F1YXJle2FzcGVjdC1yYXRpbzoxIC8gMX0uYXNwZWN0LXZpZGVve2FzcGVjdC1yYXRpbzoxNiAvIDl9LnNpemUtNHt3aWR0aDoxcmVtO2hlaWdodDoxcmVtfS5oLTFcLjV7aGVpZ2h0Oi4zNzVyZW19LmgtMTB7aGVpZ2h0OjIuNXJlbX0uaC0xMXtoZWlnaHQ6Mi43NXJlbX0uaC0xMntoZWlnaHQ6M3JlbX0uaC0xNHtoZWlnaHQ6My41cmVtfS5oLTE2e2hlaWdodDo0cmVtfS5oLTJ7aGVpZ2h0Oi41cmVtfS5oLTJcLjV7aGVpZ2h0Oi42MjVyZW19LmgtMjB7aGVpZ2h0OjVyZW19LmgtMjR7aGVpZ2h0OjZyZW19LmgtMjh7aGVpZ2h0OjdyZW19LmgtM3toZWlnaHQ6Ljc1cmVtfS5oLTNcLjV7aGVpZ2h0Oi44NzVyZW19LmgtNHtoZWlnaHQ6MXJlbX0uaC01e2hlaWdodDoxLjI1cmVtfS5oLTZ7aGVpZ2h0OjEuNXJlbX0uaC03e2hlaWdodDoxLjc1cmVtfS5oLTcye2hlaWdodDoxOHJlbX0uaC04e2hlaWdodDoycmVtfS5oLTgwe2hlaWdodDoyMHJlbX0uaC05e2hlaWdodDoyLjI1cmVtfS5oLVxbMTBweFxde2hlaWdodDoxMHB4fS5oLVxbMTNcJVxde2hlaWdodDoxMyV9LmgtXFsxM1wuNXJlbVxde2hlaWdodDoxMy41cmVtfS5oLVxbMXB4XF17aGVpZ2h0OjFweH0uaC1cWzJcLjRyZW1cXXtoZWlnaHQ6Mi40cmVtfS5oLVxbMnJlbVxde2hlaWdodDoycmVtfS5oLVxbdmFyXCgtLXJhZGl4LW5hdmlnYXRpb24tbWVudS12aWV3cG9ydC1oZWlnaHRcKVxde2hlaWdodDp2YXIoLS1yYWRpeC1uYXZpZ2F0aW9uLW1lbnUtdmlld3BvcnQtaGVpZ2h0KX0uaC1cW3ZhclwoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci1oZWlnaHRcKVxde2hlaWdodDp2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci1oZWlnaHQpfS5oLWF1dG97aGVpZ2h0OmF1dG99LmgtZnVsbHtoZWlnaHQ6MTAwJX0uaC1weHtoZWlnaHQ6MXB4fS5oLXN2aHtoZWlnaHQ6MTAwc3ZofS5tYXgtaC05NnttYXgtaGVpZ2h0OjI0cmVtfS5tYXgtaC1cWzMwMHB4XF17bWF4LWhlaWdodDozMDBweH0ubWF4LWgtXFszNDBweFxde21heC1oZWlnaHQ6MzQwcHh9Lm1heC1oLVxbODh2aFxde21heC1oZWlnaHQ6ODh2aH0ubWF4LWgtc2NyZWVue21heC1oZWlnaHQ6MTAwdmh9Lm1pbi1oLTB7bWluLWhlaWdodDowcHh9Lm1pbi1oLVxbM1wuNXJlbVxde21pbi1oZWlnaHQ6My41cmVtfS5taW4taC1cWzgwcHhcXXttaW4taGVpZ2h0OjgwcHh9Lm1pbi1oLXNjcmVlbnttaW4taGVpZ2h0OjEwMHZofS5taW4taC1zdmh7bWluLWhlaWdodDoxMDBzdmh9LnctMHt3aWR0aDowcHh9LnctMXt3aWR0aDouMjVyZW19LnctMVwuNXt3aWR0aDouMzc1cmVtfS53LTEwe3dpZHRoOjIuNXJlbX0udy0xMXt3aWR0aDoyLjc1cmVtfS53LTEye3dpZHRoOjNyZW19LnctMTR7d2lkdGg6My41cmVtfS53LTE2e3dpZHRoOjRyZW19LnctMnt3aWR0aDouNXJlbX0udy0yXC41e3dpZHRoOi42MjVyZW19LnctMjB7d2lkdGg6NXJlbX0udy0yNHt3aWR0aDo2cmVtfS53LTI4e3dpZHRoOjdyZW19LnctM3t3aWR0aDouNzVyZW19LnctM1wuNXt3aWR0aDouODc1cmVtfS53LTNcLzR7d2lkdGg6NzUlfS53LTR7d2lkdGg6MXJlbX0udy00OHt3aWR0aDoxMnJlbX0udy01e3dpZHRoOjEuMjVyZW19LnctNnt3aWR0aDoxLjVyZW19LnctNjR7d2lkdGg6MTZyZW19LnctN3t3aWR0aDoxLjc1cmVtfS53LTcye3dpZHRoOjE4cmVtfS53LTh7d2lkdGg6MnJlbX0udy04MHt3aWR0aDoyMHJlbX0udy05e3dpZHRoOjIuMjVyZW19LnctXFstLXNpZGViYXItd2lkdGhcXXt3aWR0aDp2YXIoLS1zaWRlYmFyLXdpZHRoKX0udy1cWzEwMHB4XF17d2lkdGg6MTAwcHh9LnctXFsxM1wuNXJlbVxde3dpZHRoOjEzLjVyZW19LnctXFsxcHhcXXt3aWR0aDoxcHh9LnctXFs4OHB4XF17d2lkdGg6ODhweH0udy1hdXRve3dpZHRoOmF1dG99LnctZnVsbHt3aWR0aDoxMDAlfS53LW1heHt3aWR0aDotbW96LW1heC1jb250ZW50O3dpZHRoOm1heC1jb250ZW50fS53LXB4e3dpZHRoOjFweH0ubWluLXctMHttaW4td2lkdGg6MHB4fS5taW4tdy01e21pbi13aWR0aDoxLjI1cmVtfS5taW4tdy1cWzEycmVtXF17bWluLXdpZHRoOjEycmVtfS5taW4tdy1cWzhyZW1cXXttaW4td2lkdGg6OHJlbX0ubWluLXctXFt2YXJcKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItd2lkdGhcKVxde21pbi13aWR0aDp2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci13aWR0aCl9Lm1heC13LTJ4bHttYXgtd2lkdGg6NDJyZW19Lm1heC13LTN4bHttYXgtd2lkdGg6NDhyZW19Lm1heC13LTR4bHttYXgtd2lkdGg6NTZyZW19Lm1heC13LTV4bHttYXgtd2lkdGg6NjRyZW19Lm1heC13LVxbLS1za2VsZXRvbi13aWR0aFxde21heC13aWR0aDp2YXIoLS1za2VsZXRvbi13aWR0aCl9Lm1heC13LVxbMTVcJVxde21heC13aWR0aDoxNSV9Lm1heC13LVxbNTAwcHhcXXttYXgtd2lkdGg6NTAwcHh9Lm1heC13LVxbNTIwcHhcXXttYXgtd2lkdGg6NTIwcHh9Lm1heC13LWxne21heC13aWR0aDozMnJlbX0ubWF4LXctbWF4e21heC13aWR0aDotbW96LW1heC1jb250ZW50O21heC13aWR0aDptYXgtY29udGVudH0ubWF4LXctbWR7bWF4LXdpZHRoOjI4cmVtfS5tYXgtdy14bHttYXgtd2lkdGg6MzZyZW19Lm1heC13LXhze21heC13aWR0aDoyMHJlbX0uZmxleC0xe2ZsZXg6MSAxIDAlfS5zaHJpbmstMHtmbGV4LXNocmluazowfS5ncm93e2ZsZXgtZ3JvdzoxfS5ncm93LTB7ZmxleC1ncm93OjB9LmJhc2lzLWZ1bGx7ZmxleC1iYXNpczoxMDAlfS5jYXB0aW9uLWJvdHRvbXtjYXB0aW9uLXNpZGU6Ym90dG9tfS5ib3JkZXItY29sbGFwc2V7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfS4tdHJhbnNsYXRlLXgtMVwvMnstLXR3LXRyYW5zbGF0ZS14OiAtNTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS4tdHJhbnNsYXRlLXgtcHh7LS10dy10cmFuc2xhdGUteDogLTFweDt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0uLXRyYW5zbGF0ZS15LTFcLzJ7LS10dy10cmFuc2xhdGUteTogLTUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0udHJhbnNsYXRlLXgtXFstNTBcJVxdey0tdHctdHJhbnNsYXRlLXg6IC01MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LnRyYW5zbGF0ZS14LXB4ey0tdHctdHJhbnNsYXRlLXg6IDFweDt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0udHJhbnNsYXRlLXktXFstNTBcJVxdey0tdHctdHJhbnNsYXRlLXk6IC01MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LnJvdGF0ZS0xODB7LS10dy1yb3RhdGU6IDE4MGRlZzt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0ucm90YXRlLTQ1ey0tdHctcm90YXRlOiA0NWRlZzt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0ucm90YXRlLTkwey0tdHctcm90YXRlOiA5MGRlZzt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0uc2NhbGUtXFsxXC4wMlxdey0tdHctc2NhbGUteDogMS4wMjstLXR3LXNjYWxlLXk6IDEuMDI7dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LnRyYW5zZm9ybXt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX1Aa2V5ZnJhbWVzIHB1bHNlezUwJXtvcGFjaXR5Oi41fX0uYW5pbWF0ZS1wdWxzZXthbmltYXRpb246cHVsc2UgMnMgY3ViaWMtYmV6aWVyKC40LDAsLjYsMSkgaW5maW5pdGV9QGtleWZyYW1lcyBzcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19LmFuaW1hdGUtc3BpbnthbmltYXRpb246c3BpbiAxcyBsaW5lYXIgaW5maW5pdGV9LmN1cnNvci1kZWZhdWx0e2N1cnNvcjpkZWZhdWx0fS5jdXJzb3Itbm90LWFsbG93ZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jdXJzb3ItcG9pbnRlcntjdXJzb3I6cG9pbnRlcn0udG91Y2gtbm9uZXt0b3VjaC1hY3Rpb246bm9uZX0uc2VsZWN0LW5vbmV7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5saXN0LW5vbmV7bGlzdC1zdHlsZS10eXBlOm5vbmV9LmdyaWQtY29scy0xe2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMSxtaW5tYXgoMCwxZnIpKX0uZ3JpZC1jb2xzLTJ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgyLG1pbm1heCgwLDFmcikpfS5mbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3d9LmZsZXgtY29se2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uZmxleC1jb2wtcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZX0uZmxleC13cmFwe2ZsZXgtd3JhcDp3cmFwfS5pdGVtcy1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5pdGVtcy1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmR9Lml0ZW1zLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXJ9Lml0ZW1zLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaH0uanVzdGlmeS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uanVzdGlmeS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5nYXAtMHtnYXA6MHB4fS5nYXAtMXtnYXA6LjI1cmVtfS5nYXAtMVwuNXtnYXA6LjM3NXJlbX0uZ2FwLTEwe2dhcDoyLjVyZW19LmdhcC0xMntnYXA6M3JlbX0uZ2FwLTE0e2dhcDozLjVyZW19LmdhcC0xNntnYXA6NHJlbX0uZ2FwLTJ7Z2FwOi41cmVtfS5nYXAtMlwuNXtnYXA6LjYyNXJlbX0uZ2FwLTN7Z2FwOi43NXJlbX0uZ2FwLTR7Z2FwOjFyZW19LmdhcC01e2dhcDoxLjI1cmVtfS5nYXAtNntnYXA6MS41cmVtfS5nYXAtOHtnYXA6MnJlbX0uZ2FwLVxbNVwlXF17Z2FwOjUlfS5nYXAteC00ey1tb3otY29sdW1uLWdhcDoxcmVtO2NvbHVtbi1nYXA6MXJlbX0uZ2FwLXktMntyb3ctZ2FwOi41cmVtfS5zcGFjZS14LTE+Om5vdChbaGlkZGVuXSl+Om5vdChbaGlkZGVuXSl7LS10dy1zcGFjZS14LXJldmVyc2U6IDA7bWFyZ2luLXJpZ2h0OmNhbGMoLjI1cmVtICogdmFyKC0tdHctc3BhY2UteC1yZXZlcnNlKSk7bWFyZ2luLWxlZnQ6Y2FsYyguMjVyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKSl9LnNwYWNlLXgtND46bm90KFtoaWRkZW5dKX46bm90KFtoaWRkZW5dKXstLXR3LXNwYWNlLXgtcmV2ZXJzZTogMDttYXJnaW4tcmlnaHQ6Y2FsYygxcmVtICogdmFyKC0tdHctc3BhY2UteC1yZXZlcnNlKSk7bWFyZ2luLWxlZnQ6Y2FsYygxcmVtICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteC1yZXZlcnNlKSkpfS5zcGFjZS15LTE+Om5vdChbaGlkZGVuXSl+Om5vdChbaGlkZGVuXSl7LS10dy1zcGFjZS15LXJldmVyc2U6IDA7bWFyZ2luLXRvcDpjYWxjKC4yNXJlbSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpKTttYXJnaW4tYm90dG9tOmNhbGMoLjI1cmVtICogdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSl9LnNwYWNlLXktMVwuNT46bm90KFtoaWRkZW5dKX46bm90KFtoaWRkZW5dKXstLXR3LXNwYWNlLXktcmV2ZXJzZTogMDttYXJnaW4tdG9wOmNhbGMoLjM3NXJlbSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpKTttYXJnaW4tYm90dG9tOmNhbGMoLjM3NXJlbSAqIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpfS5zcGFjZS15LTEyPjpub3QoW2hpZGRlbl0pfjpub3QoW2hpZGRlbl0pey0tdHctc3BhY2UteS1yZXZlcnNlOiAwO21hcmdpbi10b3A6Y2FsYygzcmVtICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSkpO21hcmdpbi1ib3R0b206Y2FsYygzcmVtICogdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSl9LnNwYWNlLXktMj46bm90KFtoaWRkZW5dKX46bm90KFtoaWRkZW5dKXstLXR3LXNwYWNlLXktcmV2ZXJzZTogMDttYXJnaW4tdG9wOmNhbGMoLjVyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKSk7bWFyZ2luLWJvdHRvbTpjYWxjKC41cmVtICogdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSl9LnNwYWNlLXktMz46bm90KFtoaWRkZW5dKX46bm90KFtoaWRkZW5dKXstLXR3LXNwYWNlLXktcmV2ZXJzZTogMDttYXJnaW4tdG9wOmNhbGMoLjc1cmVtICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSkpO21hcmdpbi1ib3R0b206Y2FsYyguNzVyZW0gKiB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKX0uc3BhY2UteS00Pjpub3QoW2hpZGRlbl0pfjpub3QoW2hpZGRlbl0pey0tdHctc3BhY2UteS1yZXZlcnNlOiAwO21hcmdpbi10b3A6Y2FsYygxcmVtICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSkpO21hcmdpbi1ib3R0b206Y2FsYygxcmVtICogdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSl9LnNwYWNlLXktNT46bm90KFtoaWRkZW5dKX46bm90KFtoaWRkZW5dKXstLXR3LXNwYWNlLXktcmV2ZXJzZTogMDttYXJnaW4tdG9wOmNhbGMoMS4yNXJlbSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpKTttYXJnaW4tYm90dG9tOmNhbGMoMS4yNXJlbSAqIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpfS5zcGFjZS15LTY+Om5vdChbaGlkZGVuXSl+Om5vdChbaGlkZGVuXSl7LS10dy1zcGFjZS15LXJldmVyc2U6IDA7bWFyZ2luLXRvcDpjYWxjKDEuNXJlbSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpKTttYXJnaW4tYm90dG9tOmNhbGMoMS41cmVtICogdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSl9LnNwYWNlLXktOD46bm90KFtoaWRkZW5dKX46bm90KFtoaWRkZW5dKXstLXR3LXNwYWNlLXktcmV2ZXJzZTogMDttYXJnaW4tdG9wOmNhbGMoMnJlbSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpKTttYXJnaW4tYm90dG9tOmNhbGMoMnJlbSAqIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpfS5kaXZpZGUteT46bm90KFtoaWRkZW5dKX46bm90KFtoaWRkZW5dKXstLXR3LWRpdmlkZS15LXJldmVyc2U6IDA7Ym9yZGVyLXRvcC13aWR0aDpjYWxjKDFweCAqIGNhbGMoMSAtIHZhcigtLXR3LWRpdmlkZS15LXJldmVyc2UpKSk7Ym9yZGVyLWJvdHRvbS13aWR0aDpjYWxjKDFweCAqIHZhcigtLXR3LWRpdmlkZS15LXJldmVyc2UpKX0uZGl2aWRlLWJvcmRlclwvNjA+Om5vdChbaGlkZGVuXSl+Om5vdChbaGlkZGVuXSl7Ym9yZGVyLWNvbG9yOmhzbCh2YXIoLS1ib3JkZXIpIC8gLjYpfS5vdmVyZmxvdy1hdXRve292ZXJmbG93OmF1dG99Lm92ZXJmbG93LWhpZGRlbntvdmVyZmxvdzpoaWRkZW59Lm92ZXJmbG93LXktYXV0b3tvdmVyZmxvdy15OmF1dG99Lm92ZXJmbG93LXgtaGlkZGVue292ZXJmbG93LXg6aGlkZGVufS50cnVuY2F0ZXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9LndoaXRlc3BhY2Utbm93cmFwe3doaXRlLXNwYWNlOm5vd3JhcH0ud2hpdGVzcGFjZS1wcmUtbGluZXt3aGl0ZS1zcGFjZTpwcmUtbGluZX0uYnJlYWstd29yZHN7b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS5yb3VuZGVkLTJ4bHtib3JkZXItcmFkaXVzOjFyZW19LnJvdW5kZWQtM3hse2JvcmRlci1yYWRpdXM6MS41cmVtfS5yb3VuZGVkLVxbMVwuMjVyZW1cXXtib3JkZXItcmFkaXVzOjEuMjVyZW19LnJvdW5kZWQtXFsxXC41cmVtXF17Ym9yZGVyLXJhZGl1czoxLjVyZW19LnJvdW5kZWQtXFsxXC43NXJlbVxde2JvcmRlci1yYWRpdXM6MS43NXJlbX0ucm91bmRlZC1cWzEwcHhcXXtib3JkZXItcmFkaXVzOjEwcHh9LnJvdW5kZWQtXFsyXC41cmVtXF17Ym9yZGVyLXJhZGl1czoyLjVyZW19LnJvdW5kZWQtXFsycHhcXXtib3JkZXItcmFkaXVzOjJweH0ucm91bmRlZC1cWzJyZW1cXXtib3JkZXItcmFkaXVzOjJyZW19LnJvdW5kZWQtXFtpbmhlcml0XF17Ym9yZGVyLXJhZGl1czppbmhlcml0fS5yb3VuZGVkLWZ1bGx7Ym9yZGVyLXJhZGl1czo5OTk5cHh9LnJvdW5kZWQtbGd7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMpfS5yb3VuZGVkLW1ke2JvcmRlci1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpIC0gMnB4KX0ucm91bmRlZC1zbXtib3JkZXItcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDRweCl9LnJvdW5kZWQteGx7Ym9yZGVyLXJhZGl1czouNzVyZW19LnJvdW5kZWQtYi14bHtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czouNzVyZW07Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czouNzVyZW19LnJvdW5kZWQtdC1cWzEwcHhcXXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjEwcHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MTBweH0ucm91bmRlZC10bC1zbXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDRweCl9LmJvcmRlcntib3JkZXItd2lkdGg6MXB4fS5ib3JkZXItMntib3JkZXItd2lkdGg6MnB4fS5ib3JkZXItXFsxXC41cHhcXXtib3JkZXItd2lkdGg6MS41cHh9LmJvcmRlci15e2JvcmRlci10b3Atd2lkdGg6MXB4O2JvcmRlci1ib3R0b20td2lkdGg6MXB4fS5ib3JkZXItYntib3JkZXItYm90dG9tLXdpZHRoOjFweH0uYm9yZGVyLWx7Ym9yZGVyLWxlZnQtd2lkdGg6MXB4fS5ib3JkZXItcntib3JkZXItcmlnaHQtd2lkdGg6MXB4fS5ib3JkZXItdHtib3JkZXItdG9wLXdpZHRoOjFweH0uYm9yZGVyLWRhc2hlZHtib3JkZXItc3R5bGU6ZGFzaGVkfS5ib3JkZXItXFtcIzNhM2E0MFxdXC82MHtib3JkZXItY29sb3I6IzNhM2E0MDk5fS5ib3JkZXItXFtcI2Q0YWYzN1xdXC8yNXtib3JkZXItY29sb3I6I2Q0YWYzNzQwfS5ib3JkZXItXFstLWNvbG9yLWJvcmRlclxde2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci1ib3JkZXIpfS5ib3JkZXItYW1iZXItNDAwXC8yMHtib3JkZXItY29sb3I6I2ZiYmYyNDMzfS5ib3JkZXItYW1iZXItNDAwXC8zMHtib3JkZXItY29sb3I6I2ZiYmYyNDRkfS5ib3JkZXItYm9yZGVye2JvcmRlci1jb2xvcjpoc2wodmFyKC0tYm9yZGVyKSl9LmJvcmRlci1ib3JkZXJcLzQwe2JvcmRlci1jb2xvcjpoc2wodmFyKC0tYm9yZGVyKSAvIC40KX0uYm9yZGVyLWJvcmRlclwvNTB7Ym9yZGVyLWNvbG9yOmhzbCh2YXIoLS1ib3JkZXIpIC8gLjUpfS5ib3JkZXItYm9yZGVyXC82MHtib3JkZXItY29sb3I6aHNsKHZhcigtLWJvcmRlcikgLyAuNil9LmJvcmRlci1kZXN0cnVjdGl2ZXtib3JkZXItY29sb3I6aHNsKHZhcigtLWRlc3RydWN0aXZlKSl9LmJvcmRlci1kZXN0cnVjdGl2ZVwvNTB7Ym9yZGVyLWNvbG9yOmhzbCh2YXIoLS1kZXN0cnVjdGl2ZSkgLyAuNSl9LmJvcmRlci1ncmVlbi01MDBcLzMwe2JvcmRlci1jb2xvcjojMjJjNTVlNGR9LmJvcmRlci1pbnB1dHtib3JkZXItY29sb3I6aHNsKHZhcigtLWlucHV0KSl9LmJvcmRlci1tdXRlZC1mb3JlZ3JvdW5kXC8yMHtib3JkZXItY29sb3I6aHNsKHZhcigtLW11dGVkLWZvcmVncm91bmQpIC8gLjIpfS5ib3JkZXItbXV0ZWQtZm9yZWdyb3VuZFwvMzB7Ym9yZGVyLWNvbG9yOmhzbCh2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKSAvIC4zKX0uYm9yZGVyLW5ldXRyYWwtMTAwey0tdHctYm9yZGVyLW9wYWNpdHk6IDE7Ym9yZGVyLWNvbG9yOnJnYigyNDUgMjQ1IDI0NSAvIHZhcigtLXR3LWJvcmRlci1vcGFjaXR5LCAxKSl9LmJvcmRlci1uZXV0cmFsLTIwMHstLXR3LWJvcmRlci1vcGFjaXR5OiAxO2JvcmRlci1jb2xvcjpyZ2IoMjI5IDIyOSAyMjkgLyB2YXIoLS10dy1ib3JkZXItb3BhY2l0eSwgMSkpfS5ib3JkZXItcHJpbWFyeXtib3JkZXItY29sb3I6aHNsKHZhcigtLXByaW1hcnkpKX0uYm9yZGVyLXByaW1hcnlcLzEwe2JvcmRlci1jb2xvcjpoc2wodmFyKC0tcHJpbWFyeSkgLyAuMSl9LmJvcmRlci1wcmltYXJ5XC8yMHtib3JkZXItY29sb3I6aHNsKHZhcigtLXByaW1hcnkpIC8gLjIpfS5ib3JkZXItcHJpbWFyeVwvMzB7Ym9yZGVyLWNvbG9yOmhzbCh2YXIoLS1wcmltYXJ5KSAvIC4zKX0uYm9yZGVyLXByaW1hcnlcLzQwe2JvcmRlci1jb2xvcjpoc2wodmFyKC0tcHJpbWFyeSkgLyAuNCl9LmJvcmRlci1yZWQtNTAwXC8yMHtib3JkZXItY29sb3I6I2VmNDQ0NDMzfS5ib3JkZXItdHJhbnNwYXJlbnR7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5ib3JkZXItd2hpdGVcLzEwe2JvcmRlci1jb2xvcjojZmZmZmZmMWF9LmJvcmRlci15ZWxsb3ctNTAwXC8zMHtib3JkZXItY29sb3I6I2VhYjMwODRkfS5ib3JkZXItbC10cmFuc3BhcmVudHtib3JkZXItbGVmdC1jb2xvcjp0cmFuc3BhcmVudH0uYm9yZGVyLXQtdHJhbnNwYXJlbnR7Ym9yZGVyLXRvcC1jb2xvcjp0cmFuc3BhcmVudH0uYmctXFtcIzJhMWYwNlxdXC80MHtiYWNrZ3JvdW5kLWNvbG9yOiMyYTFmMDY2Nn0uYmctXFtcIzYyN0VFQVxdXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiM2MjdlZWExYX0uYmctXFtcIzgyNDdFNVxdXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiM4MjQ3ZTUxYX0uYmctXFtcIzhhNjUxNlxdXC8zMHtiYWNrZ3JvdW5kLWNvbG9yOiM4YTY1MTY0ZH0uYmctXFtcI0YzQkEyRlxdXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmM2JhMmYxYX0uYmctXFtcI0ZGMDYwQVxdXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjA2MGExYX0uYmctXFtcI2Q0YWYzN1xdXC80MHtiYWNrZ3JvdW5kLWNvbG9yOiNkNGFmMzc2Nn0uYmctXFstLWNvbG9yLWJnXF17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1iZyl9LmJnLVxbaHNsXCh2YXJcKC0tcHJpbWFyeVwpXC8wXC4xMlwpXF17YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tcHJpbWFyeSkvLjEyKX0uYmctXFtoc2xcKHZhclwoLS1wcmltYXJ5LWxpZ2h0XClcLzBcLjE0XClcXXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1wcmltYXJ5LWxpZ2h0KS8uMTQpfS5iZy1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYWNjZW50KSl9LmJnLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYmFja2dyb3VuZCkpfS5iZy1iYWNrZ3JvdW5kXC84MHtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1iYWNrZ3JvdW5kKSAvIC44KX0uYmctYmFja2dyb3VuZFwvOTB7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYmFja2dyb3VuZCkgLyAuOSl9LmJnLWJsYWNrXC84MHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDBjfS5iZy1ib3JkZXJ7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYm9yZGVyKSl9LmJnLWJvcmRlclwvNTB7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYm9yZGVyKSAvIC41KX0uYmctY2FyZHtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1jYXJkKSl9LmJnLWNhcmRcLzMwe2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWNhcmQpIC8gLjMpfS5iZy1jYXJkXC81MHtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1jYXJkKSAvIC41KX0uYmctY2FyZFwvNjB7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tY2FyZCkgLyAuNil9LmJnLWNhcmRcLzgwe2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWNhcmQpIC8gLjgpfS5iZy1jYXJkXC85MHtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1jYXJkKSAvIC45KX0uYmctY2FyZFwvOTV7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tY2FyZCkgLyAuOTUpfS5iZy1kZXN0cnVjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1kZXN0cnVjdGl2ZSkpfS5iZy1mb3JlZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWZvcmVncm91bmQpKX0uYmctZ3JlZW4tNTAwey0tdHctYmctb3BhY2l0eTogMTtiYWNrZ3JvdW5kLWNvbG9yOnJnYigzNCAxOTcgOTQgLyB2YXIoLS10dy1iZy1vcGFjaXR5LCAxKSl9LmJnLWdyZWVuLTUwMFwvMTB7YmFja2dyb3VuZC1jb2xvcjojMjJjNTVlMWF9LmJnLWdyZWVuLTUwMFwvNSwuYmctZ3JlZW4tNTAwXC9cWzBcLjA1XF17YmFja2dyb3VuZC1jb2xvcjojMjJjNTVlMGR9LmJnLW11dGVke2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLW11dGVkKSl9LmJnLW11dGVkLWZvcmVncm91bmRcLzQwe2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLW11dGVkLWZvcmVncm91bmQpIC8gLjQpfS5iZy1tdXRlZFwvMjB7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tbXV0ZWQpIC8gLjIpfS5iZy1tdXRlZFwvMzB7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tbXV0ZWQpIC8gLjMpfS5iZy1tdXRlZFwvNTB7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tbXV0ZWQpIC8gLjUpfS5iZy1tdXRlZFwvNjB7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tbXV0ZWQpIC8gLjYpfS5iZy1uZXV0cmFsLTEwMHstLXR3LWJnLW9wYWNpdHk6IDE7YmFja2dyb3VuZC1jb2xvcjpyZ2IoMjQ1IDI0NSAyNDUgLyB2YXIoLS10dy1iZy1vcGFjaXR5LCAxKSl9LmJnLW5ldXRyYWwtNTB7LS10dy1iZy1vcGFjaXR5OiAxO2JhY2tncm91bmQtY29sb3I6cmdiKDI1MCAyNTAgMjUwIC8gdmFyKC0tdHctYmctb3BhY2l0eSwgMSkpfS5iZy1wb3BvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXBvcG92ZXIpKX0uYmctcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1wcmltYXJ5KSl9LmJnLXByaW1hcnlcLzEwe2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpIC8gLjEpfS5iZy1wcmltYXJ5XC81e2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpIC8gLjA1KX0uYmctcHJpbWFyeVwvXFswXC4wMlxde2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpIC8gLjAyKX0uYmctcHJpbWFyeVwvXFswXC4wM1xde2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpIC8gLjAzKX0uYmctcHJpbWFyeVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpIC8gLjA0KX0uYmctcHJpbWFyeVwvXFswXC4wNlxde2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpIC8gLjA2KX0uYmctcmVkLTUwMFwvXFswXC4wM1xde2JhY2tncm91bmQtY29sb3I6I2VmNDQ0NDA4fS5iZy1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tc2Vjb25kYXJ5KSl9LmJnLXNlY29uZGFyeVwvNDB7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tc2Vjb25kYXJ5KSAvIC40KX0uYmctdHJhbnNwYXJlbnR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uYmctd2hpdGV7LS10dy1iZy1vcGFjaXR5OiAxO2JhY2tncm91bmQtY29sb3I6cmdiKDI1NSAyNTUgMjU1IC8gdmFyKC0tdHctYmctb3BhY2l0eSwgMSkpfS5iZy13aGl0ZVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBhfS5iZy13aGl0ZVwvXFswXC4wNlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfS5iZy15ZWxsb3ctNTAwXC9cWzBcLjA0XF17YmFja2dyb3VuZC1jb2xvcjojZWFiMzA4MGF9LmJnLVxbcmFkaWFsLWdyYWRpZW50XChjaXJjbGVfYXRfY2VudGVyXCxoc2xcKHZhclwoLS1wcmltYXJ5XClcLzBcLjA3XClfMFwsdHJhbnNwYXJlbnRfNThcJVwpXF17YmFja2dyb3VuZC1pbWFnZTpyYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IGNlbnRlcixoc2wodmFyKC0tcHJpbWFyeSkvLjA3KSAwLHRyYW5zcGFyZW50IDU4JSl9LmJnLWdyYWRpZW50LXRvLWJ7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHZhcigtLXR3LWdyYWRpZW50LXN0b3BzKSl9LmJnLWdyYWRpZW50LXRvLWJye2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSByaWdodCx2YXIoLS10dy1ncmFkaWVudC1zdG9wcykpfS5iZy1ncmFkaWVudC10by1ye2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLXR3LWdyYWRpZW50LXN0b3BzKSl9LmZyb20tYW1iZXItNTB7LS10dy1ncmFkaWVudC1mcm9tOiAjZmZmYmViIHZhcigtLXR3LWdyYWRpZW50LWZyb20tcG9zaXRpb24pOy0tdHctZ3JhZGllbnQtdG86IHJnYigyNTUgMjUxIDIzNSAvIDApIHZhcigtLXR3LWdyYWRpZW50LXRvLXBvc2l0aW9uKTstLXR3LWdyYWRpZW50LXN0b3BzOiB2YXIoLS10dy1ncmFkaWVudC1mcm9tKSwgdmFyKC0tdHctZ3JhZGllbnQtdG8pfS5mcm9tLWFtYmVyLTUwMFwvMTB7LS10dy1ncmFkaWVudC1mcm9tOiByZ2IoMjQ1IDE1OCAxMSAvIC4xKSB2YXIoLS10dy1ncmFkaWVudC1mcm9tLXBvc2l0aW9uKTstLXR3LWdyYWRpZW50LXRvOiByZ2IoMjQ1IDE1OCAxMSAvIDApIHZhcigtLXR3LWdyYWRpZW50LXRvLXBvc2l0aW9uKTstLXR3LWdyYWRpZW50LXN0b3BzOiB2YXIoLS10dy1ncmFkaWVudC1mcm9tKSwgdmFyKC0tdHctZ3JhZGllbnQtdG8pfS5mcm9tLXJvc2UtNTB7LS10dy1ncmFkaWVudC1mcm9tOiAjZmZmMWYyIHZhcigtLXR3LWdyYWRpZW50LWZyb20tcG9zaXRpb24pOy0tdHctZ3JhZGllbnQtdG86IHJnYigyNTUgMjQxIDI0MiAvIDApIHZhcigtLXR3LWdyYWRpZW50LXRvLXBvc2l0aW9uKTstLXR3LWdyYWRpZW50LXN0b3BzOiB2YXIoLS10dy1ncmFkaWVudC1mcm9tKSwgdmFyKC0tdHctZ3JhZGllbnQtdG8pfS5mcm9tLXNreS01MHstLXR3LWdyYWRpZW50LWZyb206ICNmMGY5ZmYgdmFyKC0tdHctZ3JhZGllbnQtZnJvbS1wb3NpdGlvbik7LS10dy1ncmFkaWVudC10bzogcmdiKDI0MCAyNDkgMjU1IC8gMCkgdmFyKC0tdHctZ3JhZGllbnQtdG8tcG9zaXRpb24pOy0tdHctZ3JhZGllbnQtc3RvcHM6IHZhcigtLXR3LWdyYWRpZW50LWZyb20pLCB2YXIoLS10dy1ncmFkaWVudC10byl9LmZyb20tc2xhdGUtODAwey0tdHctZ3JhZGllbnQtZnJvbTogIzFlMjkzYiB2YXIoLS10dy1ncmFkaWVudC1mcm9tLXBvc2l0aW9uKTstLXR3LWdyYWRpZW50LXRvOiByZ2IoMzAgNDEgNTkgLyAwKSB2YXIoLS10dy1ncmFkaWVudC10by1wb3NpdGlvbik7LS10dy1ncmFkaWVudC1zdG9wczogdmFyKC0tdHctZ3JhZGllbnQtZnJvbSksIHZhcigtLXR3LWdyYWRpZW50LXRvKX0uZnJvbS10ZWFsLTUwey0tdHctZ3JhZGllbnQtZnJvbTogI2YwZmRmYSB2YXIoLS10dy1ncmFkaWVudC1mcm9tLXBvc2l0aW9uKTstLXR3LWdyYWRpZW50LXRvOiByZ2IoMjQwIDI1MyAyNTAgLyAwKSB2YXIoLS10dy1ncmFkaWVudC10by1wb3NpdGlvbik7LS10dy1ncmFkaWVudC1zdG9wczogdmFyKC0tdHctZ3JhZGllbnQtZnJvbSksIHZhcigtLXR3LWdyYWRpZW50LXRvKX0uZnJvbS12aW9sZXQtNTB7LS10dy1ncmFkaWVudC1mcm9tOiAjZjVmM2ZmIHZhcigtLXR3LWdyYWRpZW50LWZyb20tcG9zaXRpb24pOy0tdHctZ3JhZGllbnQtdG86IHJnYigyNDUgMjQzIDI1NSAvIDApIHZhcigtLXR3LWdyYWRpZW50LXRvLXBvc2l0aW9uKTstLXR3LWdyYWRpZW50LXN0b3BzOiB2YXIoLS10dy1ncmFkaWVudC1mcm9tKSwgdmFyKC0tdHctZ3JhZGllbnQtdG8pfS52aWEtdHJhbnNwYXJlbnR7LS10dy1ncmFkaWVudC10bzogcmdiKDAgMCAwIC8gMCkgdmFyKC0tdHctZ3JhZGllbnQtdG8tcG9zaXRpb24pOy0tdHctZ3JhZGllbnQtc3RvcHM6IHZhcigtLXR3LWdyYWRpZW50LWZyb20pLCB0cmFuc3BhcmVudCB2YXIoLS10dy1ncmFkaWVudC12aWEtcG9zaXRpb24pLCB2YXIoLS10dy1ncmFkaWVudC10byl9LnRvLWJsdWUtNTB7LS10dy1ncmFkaWVudC10bzogI2VmZjZmZiB2YXIoLS10dy1ncmFkaWVudC10by1wb3NpdGlvbil9LnRvLWVtZXJhbGQtNTB7LS10dy1ncmFkaWVudC10bzogI2VjZmRmNSB2YXIoLS10dy1ncmFkaWVudC10by1wb3NpdGlvbil9LnRvLW9yYW5nZS01MHstLXR3LWdyYWRpZW50LXRvOiAjZmZmN2VkIHZhcigtLXR3LWdyYWRpZW50LXRvLXBvc2l0aW9uKX0udG8tcGluay01MHstLXR3LWdyYWRpZW50LXRvOiAjZmRmMmY4IHZhcigtLXR3LWdyYWRpZW50LXRvLXBvc2l0aW9uKX0udG8tcHVycGxlLTUwey0tdHctZ3JhZGllbnQtdG86ICNmYWY1ZmYgdmFyKC0tdHctZ3JhZGllbnQtdG8tcG9zaXRpb24pfS50by1za3ktNTAwXC81ey0tdHctZ3JhZGllbnQtdG86IHJnYigxNCAxNjUgMjMzIC8gLjA1KSB2YXIoLS10dy1ncmFkaWVudC10by1wb3NpdGlvbil9LnRvLXNsYXRlLTkwMHstLXR3LWdyYWRpZW50LXRvOiAjMGYxNzJhIHZhcigtLXR3LWdyYWRpZW50LXRvLXBvc2l0aW9uKX0uZmlsbC1jdXJyZW50e2ZpbGw6Y3VycmVudENvbG9yfS5maWxsLXByaW1hcnl7ZmlsbDpoc2wodmFyKC0tcHJpbWFyeSkpfS5vYmplY3QtY29udGFpbnstby1vYmplY3QtZml0OmNvbnRhaW47b2JqZWN0LWZpdDpjb250YWlufS5vYmplY3QtY292ZXJ7LW8tb2JqZWN0LWZpdDpjb3ZlcjtvYmplY3QtZml0OmNvdmVyfS5wLTB7cGFkZGluZzowfS5wLTF7cGFkZGluZzouMjVyZW19LnAtMntwYWRkaW5nOi41cmVtfS5wLTN7cGFkZGluZzouNzVyZW19LnAtNHtwYWRkaW5nOjFyZW19LnAtNXtwYWRkaW5nOjEuMjVyZW19LnAtNntwYWRkaW5nOjEuNXJlbX0ucC04e3BhZGRpbmc6MnJlbX0ucC1cWzFweFxde3BhZGRpbmc6MXB4fS5wLVxbN1wlXF17cGFkZGluZzo3JX0ucHgtMXtwYWRkaW5nLWxlZnQ6LjI1cmVtO3BhZGRpbmctcmlnaHQ6LjI1cmVtfS5weC0xMntwYWRkaW5nLWxlZnQ6M3JlbTtwYWRkaW5nLXJpZ2h0OjNyZW19LnB4LTJ7cGFkZGluZy1sZWZ0Oi41cmVtO3BhZGRpbmctcmlnaHQ6LjVyZW19LnB4LTJcLjV7cGFkZGluZy1sZWZ0Oi42MjVyZW07cGFkZGluZy1yaWdodDouNjI1cmVtfS5weC0ze3BhZGRpbmctbGVmdDouNzVyZW07cGFkZGluZy1yaWdodDouNzVyZW19LnB4LTR7cGFkZGluZy1sZWZ0OjFyZW07cGFkZGluZy1yaWdodDoxcmVtfS5weC01e3BhZGRpbmctbGVmdDoxLjI1cmVtO3BhZGRpbmctcmlnaHQ6MS4yNXJlbX0ucHgtNntwYWRkaW5nLWxlZnQ6MS41cmVtO3BhZGRpbmctcmlnaHQ6MS41cmVtfS5weC03e3BhZGRpbmctbGVmdDoxLjc1cmVtO3BhZGRpbmctcmlnaHQ6MS43NXJlbX0ucHgtOHtwYWRkaW5nLWxlZnQ6MnJlbTtwYWRkaW5nLXJpZ2h0OjJyZW19LnB5LTBcLjV7cGFkZGluZy10b3A6LjEyNXJlbTtwYWRkaW5nLWJvdHRvbTouMTI1cmVtfS5weS0xe3BhZGRpbmctdG9wOi4yNXJlbTtwYWRkaW5nLWJvdHRvbTouMjVyZW19LnB5LTFcLjV7cGFkZGluZy10b3A6LjM3NXJlbTtwYWRkaW5nLWJvdHRvbTouMzc1cmVtfS5weS0xMHtwYWRkaW5nLXRvcDoyLjVyZW07cGFkZGluZy1ib3R0b206Mi41cmVtfS5weS0xMntwYWRkaW5nLXRvcDozcmVtO3BhZGRpbmctYm90dG9tOjNyZW19LnB5LTE0e3BhZGRpbmctdG9wOjMuNXJlbTtwYWRkaW5nLWJvdHRvbTozLjVyZW19LnB5LTE2e3BhZGRpbmctdG9wOjRyZW07cGFkZGluZy1ib3R0b206NHJlbX0ucHktMntwYWRkaW5nLXRvcDouNXJlbTtwYWRkaW5nLWJvdHRvbTouNXJlbX0ucHktMlwuNXtwYWRkaW5nLXRvcDouNjI1cmVtO3BhZGRpbmctYm90dG9tOi42MjVyZW19LnB5LTIwe3BhZGRpbmctdG9wOjVyZW07cGFkZGluZy1ib3R0b206NXJlbX0ucHktMjR7cGFkZGluZy10b3A6NnJlbTtwYWRkaW5nLWJvdHRvbTo2cmVtfS5weS0ze3BhZGRpbmctdG9wOi43NXJlbTtwYWRkaW5nLWJvdHRvbTouNzVyZW19LnB5LTNcLjV7cGFkZGluZy10b3A6Ljg3NXJlbTtwYWRkaW5nLWJvdHRvbTouODc1cmVtfS5weS00e3BhZGRpbmctdG9wOjFyZW07cGFkZGluZy1ib3R0b206MXJlbX0ucHktNXtwYWRkaW5nLXRvcDoxLjI1cmVtO3BhZGRpbmctYm90dG9tOjEuMjVyZW19LnB5LTZ7cGFkZGluZy10b3A6MS41cmVtO3BhZGRpbmctYm90dG9tOjEuNXJlbX0ucHktOHtwYWRkaW5nLXRvcDoycmVtO3BhZGRpbmctYm90dG9tOjJyZW19LnBiLTN7cGFkZGluZy1ib3R0b206Ljc1cmVtfS5wYi00e3BhZGRpbmctYm90dG9tOjFyZW19LnBiLTV7cGFkZGluZy1ib3R0b206MS4yNXJlbX0ucGItNntwYWRkaW5nLWJvdHRvbToxLjVyZW19LnBsLTEye3BhZGRpbmctbGVmdDozcmVtfS5wbC0yXC41e3BhZGRpbmctbGVmdDouNjI1cmVtfS5wbC00e3BhZGRpbmctbGVmdDoxcmVtfS5wbC04e3BhZGRpbmctbGVmdDoycmVtfS5wci0ye3BhZGRpbmctcmlnaHQ6LjVyZW19LnByLTJcLjV7cGFkZGluZy1yaWdodDouNjI1cmVtfS5wci00e3BhZGRpbmctcmlnaHQ6MXJlbX0ucHItNntwYWRkaW5nLXJpZ2h0OjEuNXJlbX0ucHItOHtwYWRkaW5nLXJpZ2h0OjJyZW19LnB0LTB7cGFkZGluZy10b3A6MH0ucHQtMXtwYWRkaW5nLXRvcDouMjVyZW19LnB0LTN7cGFkZGluZy10b3A6Ljc1cmVtfS5wdC00e3BhZGRpbmctdG9wOjFyZW19LnB0LTZ7cGFkZGluZy10b3A6MS41cmVtfS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0udGV4dC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS5hbGlnbi1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlfS5mb250LW1vbm97Zm9udC1mYW1pbHk6dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLE1vbmFjbyxDb25zb2xhcyxMaWJlcmF0aW9uIE1vbm8sQ291cmllciBOZXcsbW9ub3NwYWNlfS50ZXh0LTJ4bHtmb250LXNpemU6MS41cmVtO2xpbmUtaGVpZ2h0OjJyZW19LnRleHQtM3hse2ZvbnQtc2l6ZToxLjg3NXJlbTtsaW5lLWhlaWdodDoyLjI1cmVtfS50ZXh0LTR4bHtmb250LXNpemU6Mi4yNXJlbTtsaW5lLWhlaWdodDoyLjVyZW19LnRleHQtXFswXC41cmVtXF17Zm9udC1zaXplOi41cmVtfS50ZXh0LVxbMFwuNnJlbVxde2ZvbnQtc2l6ZTouNnJlbX0udGV4dC1cWzBcLjhyZW1cXXtmb250LXNpemU6LjhyZW19LnRleHQtXFsxMHB4XF17Zm9udC1zaXplOjEwcHh9LnRleHQtXFsxMXB4XF17Zm9udC1zaXplOjExcHh9LnRleHQtXFsxNXB4XF17Zm9udC1zaXplOjE1cHh9LnRleHQtXFs3cHhcXXtmb250LXNpemU6N3B4fS50ZXh0LVxbOHB4XF17Zm9udC1zaXplOjhweH0udGV4dC1iYXNle2ZvbnQtc2l6ZToxcmVtO2xpbmUtaGVpZ2h0OjEuNXJlbX0udGV4dC1sZ3tmb250LXNpemU6MS4xMjVyZW07bGluZS1oZWlnaHQ6MS43NXJlbX0udGV4dC1zbXtmb250LXNpemU6Ljg3NXJlbTtsaW5lLWhlaWdodDoxLjI1cmVtfS50ZXh0LXhse2ZvbnQtc2l6ZToxLjI1cmVtO2xpbmUtaGVpZ2h0OjEuNzVyZW19LnRleHQteHN7Zm9udC1zaXplOi43NXJlbTtsaW5lLWhlaWdodDoxcmVtfS5mb250LWJsYWNre2ZvbnQtd2VpZ2h0OjkwMH0uZm9udC1ib2xke2ZvbnQtd2VpZ2h0OjcwMH0uZm9udC1leHRyYWJvbGR7Zm9udC13ZWlnaHQ6ODAwfS5mb250LW1lZGl1bXtmb250LXdlaWdodDo1MDB9LmZvbnQtbm9ybWFse2ZvbnQtd2VpZ2h0OjQwMH0uZm9udC1zZW1pYm9sZHtmb250LXdlaWdodDo2MDB9LnVwcGVyY2FzZXt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LnRhYnVsYXItbnVtc3stLXR3LW51bWVyaWMtc3BhY2luZzogdGFidWxhci1udW1zO2ZvbnQtdmFyaWFudC1udW1lcmljOnZhcigtLXR3LW9yZGluYWwpIHZhcigtLXR3LXNsYXNoZWQtemVybykgdmFyKC0tdHctbnVtZXJpYy1maWd1cmUpIHZhcigtLXR3LW51bWVyaWMtc3BhY2luZykgdmFyKC0tdHctbnVtZXJpYy1mcmFjdGlvbil9LmxlYWRpbmctXFsxXC4xXF17bGluZS1oZWlnaHQ6MS4xfS5sZWFkaW5nLW5vbmV7bGluZS1oZWlnaHQ6MX0ubGVhZGluZy1yZWxheGVke2xpbmUtaGVpZ2h0OjEuNjI1fS5sZWFkaW5nLXNudWd7bGluZS1oZWlnaHQ6MS4zNzV9LmxlYWRpbmctdGlnaHR7bGluZS1oZWlnaHQ6MS4yNX0udHJhY2tpbmctXFstMFwuMDNlbVxde2xldHRlci1zcGFjaW5nOi0uMDNlbX0udHJhY2tpbmctXFstMFwuMDRlbVxde2xldHRlci1zcGFjaW5nOi0uMDRlbX0udHJhY2tpbmctXFswXC4wNmVtXF17bGV0dGVyLXNwYWNpbmc6LjA2ZW19LnRyYWNraW5nLVxbMFwuMTVlbVxde2xldHRlci1zcGFjaW5nOi4xNWVtfS50cmFja2luZy1cWzBcLjJlbVxde2xldHRlci1zcGFjaW5nOi4yZW19LnRyYWNraW5nLVxbMFwuMzVlbVxde2xldHRlci1zcGFjaW5nOi4zNWVtfS50cmFja2luZy1cWzBcLjNlbVxde2xldHRlci1zcGFjaW5nOi4zZW19LnRyYWNraW5nLXRpZ2h0e2xldHRlci1zcGFjaW5nOi0uMDI1ZW19LnRyYWNraW5nLXdpZGV7bGV0dGVyLXNwYWNpbmc6LjAyNWVtfS50cmFja2luZy13aWRlcntsZXR0ZXItc3BhY2luZzouMDVlbX0udHJhY2tpbmctd2lkZXN0e2xldHRlci1zcGFjaW5nOi4xZW19LnRleHQtXFtcIzJhMWYwNlxdey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYig0MiAzMSA2IC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9LnRleHQtXFtcIzJhMWYwNlxdXC82MHtjb2xvcjojMmExZjA2OTl9LnRleHQtXFtcIzc2Nzc3YVxdey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYigxMTggMTE5IDEyMiAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS50ZXh0LVxbXCM4YTY1MTZcXXstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoMTM4IDEwMSAyMiAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS50ZXh0LVxbXCM4YTY1MTZcXVwvNjB7Y29sb3I6IzhhNjUxNjk5fS50ZXh0LVxbXCM4YWIzZmZcXXstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoMTM4IDE3OSAyNTUgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHksIDEpKX0udGV4dC1cW1wjOWE5Y2EyXF17LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDE1NCAxNTYgMTYyIC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9LnRleHQtXFtcIzlhYThiZVxdey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYigxNTQgMTY4IDE5MCAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS50ZXh0LVxbXCNkNGFmMzdcXXstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoMjEyIDE3NSA1NSAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS50ZXh0LVxbXCNkNGFmMzdcXVwvNjB7Y29sb3I6I2Q0YWYzNzk5fS50ZXh0LVxbXCNmMGQ3OGNcXXstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoMjQwIDIxNSAxNDAgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHksIDEpKX0udGV4dC1hY2NlbnQtZm9yZWdyb3VuZHtjb2xvcjpoc2wodmFyKC0tYWNjZW50LWZvcmVncm91bmQpKX0udGV4dC1hbWJlci00MDB7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDI1MSAxOTEgMzYgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHksIDEpKX0udGV4dC1hbWJlci01MDB7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDI0NSAxNTggMTEgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHksIDEpKX0udGV4dC1hbWJlci03MDB7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDE4MCA4MyA5IC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9LnRleHQtYmFja2dyb3VuZHtjb2xvcjpoc2wodmFyKC0tYmFja2dyb3VuZCkpfS50ZXh0LWNhcmQtZm9yZWdyb3VuZHtjb2xvcjpoc2wodmFyKC0tY2FyZC1mb3JlZ3JvdW5kKSl9LnRleHQtY3VycmVudHtjb2xvcjpjdXJyZW50Q29sb3J9LnRleHQtZGVzdHJ1Y3RpdmV7Y29sb3I6aHNsKHZhcigtLWRlc3RydWN0aXZlKSl9LnRleHQtZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZHtjb2xvcjpoc2wodmFyKC0tZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZCkpfS50ZXh0LWVtZXJhbGQtNDAwey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYig1MiAyMTEgMTUzIC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9LnRleHQtZm9yZWdyb3VuZHtjb2xvcjpoc2wodmFyKC0tZm9yZWdyb3VuZCkpfS50ZXh0LWZvcmVncm91bmRcLzUwe2NvbG9yOmhzbCh2YXIoLS1mb3JlZ3JvdW5kKSAvIC41KX0udGV4dC1ncmVlbi01MDB7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDM0IDE5NyA5NCAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS50ZXh0LWdyZWVuLTYwMHstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoMjIgMTYzIDc0IC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9LnRleHQtbXV0ZWQtZm9yZWdyb3VuZHtjb2xvcjpoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkpfS50ZXh0LW11dGVkLWZvcmVncm91bmRcLzUwe2NvbG9yOmhzbCh2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKSAvIC41KX0udGV4dC1tdXRlZC1mb3JlZ3JvdW5kXC83MHtjb2xvcjpoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkgLyAuNyl9LnRleHQtbXV0ZWQtZm9yZWdyb3VuZFwvODB7Y29sb3I6aHNsKHZhcigtLW11dGVkLWZvcmVncm91bmQpIC8gLjgpfS50ZXh0LW5ldXRyYWwtNDAwey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYigxNjMgMTYzIDE2MyAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS50ZXh0LW5ldXRyYWwtNTAwey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYigxMTUgMTE1IDExNSAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS50ZXh0LW5ldXRyYWwtNjAwey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYig4MiA4MiA4MiAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS50ZXh0LW5ldXRyYWwtODAwey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYigzOCAzOCAzOCAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS50ZXh0LW5ldXRyYWwtOTAwey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYigyMyAyMyAyMyAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS50ZXh0LXBvcG92ZXItZm9yZWdyb3VuZHtjb2xvcjpoc2wodmFyKC0tcG9wb3Zlci1mb3JlZ3JvdW5kKSl9LnRleHQtcHJpbWFyeXtjb2xvcjpoc2wodmFyKC0tcHJpbWFyeSkpfS50ZXh0LXByaW1hcnktZm9yZWdyb3VuZHtjb2xvcjpoc2wodmFyKC0tcHJpbWFyeS1mb3JlZ3JvdW5kKSl9LnRleHQtcHJpbWFyeVwvNjB7Y29sb3I6aHNsKHZhcigtLXByaW1hcnkpIC8gLjYpfS50ZXh0LXJlZC01MDB7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDIzOSA2OCA2OCAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS50ZXh0LXJvc2UtNzAwey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYigxOTAgMTggNjAgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHksIDEpKX0udGV4dC1zZWNvbmRhcnktZm9yZWdyb3VuZHtjb2xvcjpoc2wodmFyKC0tc2Vjb25kYXJ5LWZvcmVncm91bmQpKX0udGV4dC1za3ktNzAwey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYigzIDEwNSAxNjEgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHksIDEpKX0udGV4dC1zbGF0ZS0zMDB7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDIwMyAyMTMgMjI1IC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9LnRleHQtc2xhdGUtNDAwey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYigxNDggMTYzIDE4NCAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS50ZXh0LXNsYXRlLTcwMHstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoNTEgNjUgODUgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHksIDEpKX0udGV4dC1zdWNjZXNze2NvbG9yOmhzbCh2YXIoLS1zdWNjZXNzKSl9LnRleHQtdGVhbC03MDB7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDE1IDExOCAxMTAgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHksIDEpKX0udGV4dC12aW9sZXQtNzAwey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYigxMDkgNDAgMjE3IC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9LnRleHQtd2hpdGV7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDI1NSAyNTUgMjU1IC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9LnRleHQtd2hpdGVcLzQ1e2NvbG9yOiNmZmZmZmY3M30udGV4dC13aGl0ZVwvNjB7Y29sb3I6I2ZmZjl9LnRleHQtd2hpdGVcLzgwe2NvbG9yOiNmZmZjfS50ZXh0LXllbGxvdy01MDB7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDIzNCAxNzkgOCAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSwgMSkpfS51bmRlcmxpbmV7dGV4dC1kZWNvcmF0aW9uLWxpbmU6dW5kZXJsaW5lfS51bmRlcmxpbmUtb2Zmc2V0LTR7dGV4dC11bmRlcmxpbmUtb2Zmc2V0OjRweH0uYW50aWFsaWFzZWR7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9Lm9wYWNpdHktMHtvcGFjaXR5OjB9Lm9wYWNpdHktNDB7b3BhY2l0eTouNH0ub3BhY2l0eS00NXtvcGFjaXR5Oi40NX0ub3BhY2l0eS01MHtvcGFjaXR5Oi41fS5vcGFjaXR5LTYwe29wYWNpdHk6LjZ9Lm9wYWNpdHktNzB7b3BhY2l0eTouN30ub3BhY2l0eS04MHtvcGFjaXR5Oi44fS5vcGFjaXR5LTkwe29wYWNpdHk6Ljl9Lm9wYWNpdHktXFswXC4xOFxde29wYWNpdHk6LjE4fS5zaGFkb3d7LS10dy1zaGFkb3c6IDAgMXB4IDNweCAwIHJnYigwIDAgMCAvIC4xKSwgMCAxcHggMnB4IC0xcHggcmdiKDAgMCAwIC8gLjEpOy0tdHctc2hhZG93LWNvbG9yZWQ6IDAgMXB4IDNweCAwIHZhcigtLXR3LXNoYWRvdy1jb2xvciksIDAgMXB4IDJweCAtMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3csIDAgMCAjMDAwMCksdmFyKC0tdHctcmluZy1zaGFkb3csIDAgMCAjMDAwMCksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LTJ4bHstLXR3LXNoYWRvdzogMCAyNXB4IDUwcHggLTEycHggcmdiKDAgMCAwIC8gLjI1KTstLXR3LXNoYWRvdy1jb2xvcmVkOiAwIDI1cHggNTBweCAtMTJweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXJpbmctc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMF8wXzFweF9oc2xcKHZhclwoLS1zaWRlYmFyLWJvcmRlclwpXClcXXstLXR3LXNoYWRvdzogMCAwIDAgMXB4IGhzbCh2YXIoLS1zaWRlYmFyLWJvcmRlcikpOy0tdHctc2hhZG93LWNvbG9yZWQ6IDAgMCAwIDFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXJpbmctc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMjVweF82MHB4Xy0xMnB4X3JnYmFcKDBcLDBcLDBcLDBcLjVcKVxdey0tdHctc2hhZG93OiAwIDI1cHggNjBweCAtMTJweCByZ2JhKDAsMCwwLC41KTstLXR3LXNoYWRvdy1jb2xvcmVkOiAwIDI1cHggNjBweCAtMTJweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXJpbmctc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1sZ3stLXR3LXNoYWRvdzogMCAxMHB4IDE1cHggLTNweCByZ2IoMCAwIDAgLyAuMSksIDAgNHB4IDZweCAtNHB4IHJnYigwIDAgMCAvIC4xKTstLXR3LXNoYWRvdy1jb2xvcmVkOiAwIDEwcHggMTVweCAtM3B4IHZhcigtLXR3LXNoYWRvdy1jb2xvciksIDAgNHB4IDZweCAtNHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3csIDAgMCAjMDAwMCksdmFyKC0tdHctcmluZy1zaGFkb3csIDAgMCAjMDAwMCksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LW1key0tdHctc2hhZG93OiAwIDRweCA2cHggLTFweCByZ2IoMCAwIDAgLyAuMSksIDAgMnB4IDRweCAtMnB4IHJnYigwIDAgMCAvIC4xKTstLXR3LXNoYWRvdy1jb2xvcmVkOiAwIDRweCA2cHggLTFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpLCAwIDJweCA0cHggLTJweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXJpbmctc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1ub25ley0tdHctc2hhZG93OiAwIDAgIzAwMDA7LS10dy1zaGFkb3ctY29sb3JlZDogMCAwICMwMDAwO2JveC1zaGFkb3c6dmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXJpbmctc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1zbXstLXR3LXNoYWRvdzogMCAxcHggMnB4IDAgcmdiKDAgMCAwIC8gLjA1KTstLXR3LXNoYWRvdy1jb2xvcmVkOiAwIDFweCAycHggMCB2YXIoLS10dy1zaGFkb3ctY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXJpbmctc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy14bHstLXR3LXNoYWRvdzogMCAyMHB4IDI1cHggLTVweCByZ2IoMCAwIDAgLyAuMSksIDAgOHB4IDEwcHggLTZweCByZ2IoMCAwIDAgLyAuMSk7LS10dy1zaGFkb3ctY29sb3JlZDogMCAyMHB4IDI1cHggLTVweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpLCAwIDhweCAxMHB4IC02cHggdmFyKC0tdHctc2hhZG93LWNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1yaW5nLXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFt2YXJcKC0tc2hhZG93LWJ1dHRvblwpXF17LS10dy1zaGFkb3ctY29sb3I6IHZhcigtLXNoYWRvdy1idXR0b24pOy0tdHctc2hhZG93OiB2YXIoLS10dy1zaGFkb3ctY29sb3JlZCl9LnNoYWRvdy1mb3JlZ3JvdW5kXC81ey0tdHctc2hhZG93LWNvbG9yOiBoc2wodmFyKC0tZm9yZWdyb3VuZCkgLyAuMDUpOy0tdHctc2hhZG93OiB2YXIoLS10dy1zaGFkb3ctY29sb3JlZCl9LnNoYWRvdy1wcmltYXJ5XC8xMHstLXR3LXNoYWRvdy1jb2xvcjogaHNsKHZhcigtLXByaW1hcnkpIC8gLjEpOy0tdHctc2hhZG93OiB2YXIoLS10dy1zaGFkb3ctY29sb3JlZCl9LnNoYWRvdy1wcmltYXJ5XC8yMHstLXR3LXNoYWRvdy1jb2xvcjogaHNsKHZhcigtLXByaW1hcnkpIC8gLjIpOy0tdHctc2hhZG93OiB2YXIoLS10dy1zaGFkb3ctY29sb3JlZCl9LnNoYWRvdy1wcmltYXJ5XC8zMHstLXR3LXNoYWRvdy1jb2xvcjogaHNsKHZhcigtLXByaW1hcnkpIC8gLjMpOy0tdHctc2hhZG93OiB2YXIoLS10dy1zaGFkb3ctY29sb3JlZCl9LnNoYWRvdy1wcmltYXJ5XC80MHstLXR3LXNoYWRvdy1jb2xvcjogaHNsKHZhcigtLXByaW1hcnkpIC8gLjQpOy0tdHctc2hhZG93OiB2YXIoLS10dy1zaGFkb3ctY29sb3JlZCl9Lm91dGxpbmUtbm9uZXtvdXRsaW5lOjJweCBzb2xpZCB0cmFuc3BhcmVudDtvdXRsaW5lLW9mZnNldDoycHh9Lm91dGxpbmV7b3V0bGluZS1zdHlsZTpzb2xpZH0ucmluZ3stLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzogdmFyKC0tdHctcmluZy1pbnNldCkgMCAwIDAgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpIHZhcigtLXR3LXJpbmctb2Zmc2V0LWNvbG9yKTstLXR3LXJpbmctc2hhZG93OiB2YXIoLS10dy1yaW5nLWluc2V0KSAwIDAgMCBjYWxjKDNweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSkgdmFyKC0tdHctcmluZy1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3csIDAgMCAjMDAwMCl9LnJpbmctMHstLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzogdmFyKC0tdHctcmluZy1pbnNldCkgMCAwIDAgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpIHZhcigtLXR3LXJpbmctb2Zmc2V0LWNvbG9yKTstLXR3LXJpbmctc2hhZG93OiB2YXIoLS10dy1yaW5nLWluc2V0KSAwIDAgMCBjYWxjKDBweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSkgdmFyKC0tdHctcmluZy1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3csIDAgMCAjMDAwMCl9LnJpbmctMnstLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzogdmFyKC0tdHctcmluZy1pbnNldCkgMCAwIDAgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpIHZhcigtLXR3LXJpbmctb2Zmc2V0LWNvbG9yKTstLXR3LXJpbmctc2hhZG93OiB2YXIoLS10dy1yaW5nLWluc2V0KSAwIDAgMCBjYWxjKDJweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSkgdmFyKC0tdHctcmluZy1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3csIDAgMCAjMDAwMCl9LnJpbmctNHstLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzogdmFyKC0tdHctcmluZy1pbnNldCkgMCAwIDAgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpIHZhcigtLXR3LXJpbmctb2Zmc2V0LWNvbG9yKTstLXR3LXJpbmctc2hhZG93OiB2YXIoLS10dy1yaW5nLWluc2V0KSAwIDAgMCBjYWxjKDRweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSkgdmFyKC0tdHctcmluZy1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3csIDAgMCAjMDAwMCl9LnJpbmctcHJpbWFyeVwvMjB7LS10dy1yaW5nLWNvbG9yOiBoc2wodmFyKC0tcHJpbWFyeSkgLyAuMil9LnJpbmctcmluZ3stLXR3LXJpbmctY29sb3I6IGhzbCh2YXIoLS1yaW5nKSl9LnJpbmctb2Zmc2V0LWJhY2tncm91bmR7LS10dy1yaW5nLW9mZnNldC1jb2xvcjogaHNsKHZhcigtLWJhY2tncm91bmQpKX0uYnJpZ2h0bmVzcy1cWzNcXXstLXR3LWJyaWdodG5lc3M6IGJyaWdodG5lc3MoMyk7ZmlsdGVyOnZhcigtLXR3LWJsdXIpIHZhcigtLXR3LWJyaWdodG5lc3MpIHZhcigtLXR3LWNvbnRyYXN0KSB2YXIoLS10dy1ncmF5c2NhbGUpIHZhcigtLXR3LWh1ZS1yb3RhdGUpIHZhcigtLXR3LWludmVydCkgdmFyKC0tdHctc2F0dXJhdGUpIHZhcigtLXR3LXNlcGlhKSB2YXIoLS10dy1kcm9wLXNoYWRvdyl9LmRyb3Atc2hhZG93LVxbMF8zMHB4XzYwcHhfaHNsXCh2YXJcKC0tcHJpbWFyeVwpXC8wXC4yNVwpXF17LS10dy1kcm9wLXNoYWRvdzogZHJvcC1zaGFkb3coMCAzMHB4IDYwcHggaHNsKHZhcigtLXByaW1hcnkpLy4yNSkpO2ZpbHRlcjp2YXIoLS10dy1ibHVyKSB2YXIoLS10dy1icmlnaHRuZXNzKSB2YXIoLS10dy1jb250cmFzdCkgdmFyKC0tdHctZ3JheXNjYWxlKSB2YXIoLS10dy1odWUtcm90YXRlKSB2YXIoLS10dy1pbnZlcnQpIHZhcigtLXR3LXNhdHVyYXRlKSB2YXIoLS10dy1zZXBpYSkgdmFyKC0tdHctZHJvcC1zaGFkb3cpfS5ncmF5c2NhbGV7LS10dy1ncmF5c2NhbGU6IGdyYXlzY2FsZSgxMDAlKTtmaWx0ZXI6dmFyKC0tdHctYmx1cikgdmFyKC0tdHctYnJpZ2h0bmVzcykgdmFyKC0tdHctY29udHJhc3QpIHZhcigtLXR3LWdyYXlzY2FsZSkgdmFyKC0tdHctaHVlLXJvdGF0ZSkgdmFyKC0tdHctaW52ZXJ0KSB2YXIoLS10dy1zYXR1cmF0ZSkgdmFyKC0tdHctc2VwaWEpIHZhcigtLXR3LWRyb3Atc2hhZG93KX0uZmlsdGVye2ZpbHRlcjp2YXIoLS10dy1ibHVyKSB2YXIoLS10dy1icmlnaHRuZXNzKSB2YXIoLS10dy1jb250cmFzdCkgdmFyKC0tdHctZ3JheXNjYWxlKSB2YXIoLS10dy1odWUtcm90YXRlKSB2YXIoLS10dy1pbnZlcnQpIHZhcigtLXR3LXNhdHVyYXRlKSB2YXIoLS10dy1zZXBpYSkgdmFyKC0tdHctZHJvcC1zaGFkb3cpfS5iYWNrZHJvcC1ibHVyey0tdHctYmFja2Ryb3AtYmx1cjogYmx1cig4cHgpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyKSB2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzKSB2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCkgdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlKSB2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlKSB2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQpIHZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHkpIHZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlKSB2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSl9LmJhY2tkcm9wLWJsdXIteGx7LS10dy1iYWNrZHJvcC1ibHVyOiBibHVyKDI0cHgpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyKSB2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzKSB2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCkgdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlKSB2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlKSB2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQpIHZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHkpIHZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlKSB2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSl9LnRyYW5zaXRpb257dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcix0ZXh0LWRlY29yYXRpb24tY29sb3IsZmlsbCxzdHJva2Usb3BhY2l0eSxib3gtc2hhZG93LHRyYW5zZm9ybSxmaWx0ZXIsYmFja2Ryb3AtZmlsdGVyO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNCwwLC4yLDEpO3RyYW5zaXRpb24tZHVyYXRpb246LjE1c30udHJhbnNpdGlvbi1cW2xlZnRcLHJpZ2h0XCx3aWR0aFxde3RyYW5zaXRpb24tcHJvcGVydHk6bGVmdCxyaWdodCx3aWR0aDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LnRyYW5zaXRpb24tXFttYXJnaW5cLG9wYVxde3RyYW5zaXRpb24tcHJvcGVydHk6bWFyZ2luLG9wYTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LnRyYW5zaXRpb24tXFt3aWR0aFwsaGVpZ2h0XCxwYWRkaW5nXF17dHJhbnNpdGlvbi1wcm9wZXJ0eTp3aWR0aCxoZWlnaHQscGFkZGluZzt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LnRyYW5zaXRpb24tXFt3aWR0aFxde3RyYW5zaXRpb24tcHJvcGVydHk6d2lkdGg7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7dHJhbnNpdGlvbi1kdXJhdGlvbjouMTVzfS50cmFuc2l0aW9uLWFsbHt0cmFuc2l0aW9uLXByb3BlcnR5OmFsbDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LnRyYW5zaXRpb24tY29sb3Jze3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNCwwLC4yLDEpO3RyYW5zaXRpb24tZHVyYXRpb246LjE1c30udHJhbnNpdGlvbi1vcGFjaXR5e3RyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LnRyYW5zaXRpb24tc2hhZG93e3RyYW5zaXRpb24tcHJvcGVydHk6Ym94LXNoYWRvdzt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LnRyYW5zaXRpb24tdHJhbnNmb3Jte3RyYW5zaXRpb24tcHJvcGVydHk6dHJhbnNmb3JtO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNCwwLC4yLDEpO3RyYW5zaXRpb24tZHVyYXRpb246LjE1c30uZHVyYXRpb24tMTAwMHt0cmFuc2l0aW9uLWR1cmF0aW9uOjFzfS5kdXJhdGlvbi0yMDB7dHJhbnNpdGlvbi1kdXJhdGlvbjouMnN9LmR1cmF0aW9uLTMwMHt0cmFuc2l0aW9uLWR1cmF0aW9uOi4zc30uZWFzZS1pbi1vdXR7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSl9LmVhc2UtbGluZWFye3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmxpbmVhcn1Aa2V5ZnJhbWVzIGVudGVyezAle29wYWNpdHk6dmFyKC0tdHctZW50ZXItb3BhY2l0eSwgMSk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKHZhcigtLXR3LWVudGVyLXRyYW5zbGF0ZS14LCAwKSx2YXIoLS10dy1lbnRlci10cmFuc2xhdGUteSwgMCksMCkgc2NhbGUzZCh2YXIoLS10dy1lbnRlci1zY2FsZSwgMSksdmFyKC0tdHctZW50ZXItc2NhbGUsIDEpLHZhcigtLXR3LWVudGVyLXNjYWxlLCAxKSkgcm90YXRlKHZhcigtLXR3LWVudGVyLXJvdGF0ZSwgMCkpfX1Aa2V5ZnJhbWVzIGV4aXR7dG97b3BhY2l0eTp2YXIoLS10dy1leGl0LW9wYWNpdHksIDEpO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCh2YXIoLS10dy1leGl0LXRyYW5zbGF0ZS14LCAwKSx2YXIoLS10dy1leGl0LXRyYW5zbGF0ZS15LCAwKSwwKSBzY2FsZTNkKHZhcigtLXR3LWV4aXQtc2NhbGUsIDEpLHZhcigtLXR3LWV4aXQtc2NhbGUsIDEpLHZhcigtLXR3LWV4aXQtc2NhbGUsIDEpKSByb3RhdGUodmFyKC0tdHctZXhpdC1yb3RhdGUsIDApKX19LmFuaW1hdGUtaW57YW5pbWF0aW9uLW5hbWU6ZW50ZXI7YW5pbWF0aW9uLWR1cmF0aW9uOi4xNXM7LS10dy1lbnRlci1vcGFjaXR5OiBpbml0aWFsOy0tdHctZW50ZXItc2NhbGU6IGluaXRpYWw7LS10dy1lbnRlci1yb3RhdGU6IGluaXRpYWw7LS10dy1lbnRlci10cmFuc2xhdGUteDogaW5pdGlhbDstLXR3LWVudGVyLXRyYW5zbGF0ZS15OiBpbml0aWFsfS5mYWRlLWluLTB7LS10dy1lbnRlci1vcGFjaXR5OiAwfS5mYWRlLWluLTgwey0tdHctZW50ZXItb3BhY2l0eTogLjh9Lnpvb20taW4tOTV7LS10dy1lbnRlci1zY2FsZTogLjk1fS5kdXJhdGlvbi0xMDAwe2FuaW1hdGlvbi1kdXJhdGlvbjoxc30uZHVyYXRpb24tMjAwe2FuaW1hdGlvbi1kdXJhdGlvbjouMnN9LmR1cmF0aW9uLTMwMHthbmltYXRpb24tZHVyYXRpb246LjNzfS5lYXNlLWluLW91dHthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNCwwLC4yLDEpfS5lYXNlLWxpbmVhcnthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmxpbmVhcn0uXFstbXMtb3ZlcmZsb3ctc3R5bGVcOm5vbmVcXXstbXMtb3ZlcmZsb3ctc3R5bGU6bm9uZX0uXFtzY3JvbGxiYXItd2lkdGhcOm5vbmVcXXtzY3JvbGxiYXItd2lkdGg6bm9uZX1Aa2V5ZnJhbWVzIG1hcnF1ZWV7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUpfX0uYW5pbWF0ZS1tYXJxdWVle2FuaW1hdGlvbjptYXJxdWVlIDUwcyBsaW5lYXIgaW5maW5pdGV9QGtleWZyYW1lcyBmbG9hdHswJSx0b3t0cmFuc2Zvcm06dHJhbnNsYXRlKDApIHNjYWxlKDEpfTMzJXt0cmFuc2Zvcm06dHJhbnNsYXRlKDMwcHgsLTMwcHgpIHNjYWxlKDEuMDUpfTY2JXt0cmFuc2Zvcm06dHJhbnNsYXRlKC0yMHB4LDIwcHgpIHNjYWxlKC45NSl9fS5ncmFkaWVudC1vcmJ7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo5OTk5cHg7ZmlsdGVyOmJsdXIoODBweCk7YW5pbWF0aW9uOmZsb2F0IDhzIGVhc2UtaW4tb3V0IGluZmluaXRlfUBrZXlmcmFtZXMgc2hpbmV7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtMTAwJSkgcm90YXRlKDI1ZGVnKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlKDIwMCUpIHJvdGF0ZSgyNWRlZyl9fS5jYXJkLXNoaW5lOmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3dpZHRoOjUwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCxoc2woMCAwJSAxMDAlIC8gLjE1KSx0cmFuc3BhcmVudCk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtMTAwJSkgcm90YXRlKDI1ZGVnKTthbmltYXRpb246c2hpbmUgNHMgZWFzZS1pbi1vdXQgaW5maW5pdGV9QGtleWZyYW1lcyBmYWRlSW5VcHswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMzBweCl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApfX0uYW5pbWF0ZS1mYWRlLWluLXVwe2FuaW1hdGlvbjpmYWRlSW5VcCAuOHMgZWFzZS1vdXQgZm9yd2FyZHN9LmFuaW1hdGUtZmFkZS1pbi11cC1kZWxheS0xe29wYWNpdHk6MDthbmltYXRpb246ZmFkZUluVXAgLjhzIGVhc2Utb3V0IC4xcyBmb3J3YXJkc30uYW5pbWF0ZS1mYWRlLWluLXVwLWRlbGF5LTJ7b3BhY2l0eTowO2FuaW1hdGlvbjpmYWRlSW5VcCAuOHMgZWFzZS1vdXQgLjJzIGZvcndhcmRzfS5hbmltYXRlLWZhZGUtaW4tdXAtZGVsYXktM3tvcGFjaXR5OjA7YW5pbWF0aW9uOmZhZGVJblVwIC44cyBlYXNlLW91dCAuM3MgZm9yd2FyZHN9LmZhc3NldC1tb2RhbC10aGVtZXstLWJhY2tncm91bmQ6IDMwIDIwJSA0JTstLWZvcmVncm91bmQ6IDQwIDMwJSA5MiU7LS1jYXJkOiAzMCAxOCUgNiU7LS1jYXJkLWZvcmVncm91bmQ6IDQwIDMwJSA5MiU7LS1wb3BvdmVyOiAzMCAxOCUgNiU7LS1wb3BvdmVyLWZvcmVncm91bmQ6IDQwIDMwJSA5MiU7LS1wcmltYXJ5OiA0MyA2NiUgNTIlOy0tcHJpbWFyeS1mb3JlZ3JvdW5kOiAzNSA2MCUgNiU7LS1wcmltYXJ5LWxpZ2h0OiA0MyA3MCUgNjAlOy0tcHJpbWFyeS1kYXJrOiA0MyA2MCUgNDAlOy0tc2Vjb25kYXJ5OiAzMCAxNCUgMTIlOy0tc2Vjb25kYXJ5LWZvcmVncm91bmQ6IDQwIDMwJSA5MiU7LS1tdXRlZDogMzAgMTAlIDE0JTstLW11dGVkLWZvcmVncm91bmQ6IDQwIDE1JSA1NSU7LS1hY2NlbnQ6IDQzIDY2JSA1MiU7LS1hY2NlbnQtZm9yZWdyb3VuZDogMzUgNjAlIDYlOy0tZGVzdHJ1Y3RpdmU6IDAgODQlIDYwJTstLWRlc3RydWN0aXZlLWZvcmVncm91bmQ6IDAgMCUgMTAwJTstLWJvcmRlcjogNDMgMzAlIDE4JTstLWlucHV0OiA0MyAzMCUgMTglOy0tcmluZzogNDMgNjYlIDUyJTstLWdyYWRpZW50LWNhcmQ6IGxpbmVhci1ncmFkaWVudCgxNDVkZWcsICNmNmUzYTYgMCUsICNkOGIyNGMgMzglLCAjYjM4MTJhIDcwJSwgIzhhNWUxOCAxMDAlKTstLWdyYWRpZW50LWNhcmQtc2lsdmVyOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZmJmNmU2IDAlLCAjZWZkOTk4IDUwJSwgI2U2YzQ2YSAxMDAlKTstLWdyYWRpZW50LWNhcmQtbWV0YWw6IGxpbmVhci1ncmFkaWVudCgxNjBkZWcsICMxYTE2MGQgMCUsICMyYTIzMTQgNTAlLCAjMTIxMDA5IDEwMCUpOy0tc2hhZG93LWNhcmQ6IDAgMjVweCA2MHB4IC0xMnB4IHJnYmEoMjEyLCAxNzUsIDU1LCAuMjUpOy0tc2hhZG93LWJ1dHRvbjogMCA0cHggMTRweCAwIHJnYmEoMjEyLCAxNzUsIDU1LCAuMzkpOy0tc3VjY2VzczogMTYwIDg0JSAzOSU7LS1zdWNjZXNzLWZvcmVncm91bmQ6IDAgMCUgMTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiMwYzBhMDg7Y29sb3I6I2YxZWRlNDtib3JkZXItY29sb3I6IzNjMzQyMH1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSl7KiwqOmJlZm9yZSwqOmFmdGVye2FuaW1hdGlvbi1kdXJhdGlvbjouMDFtcyFpbXBvcnRhbnQ7YW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDoxIWltcG9ydGFudDt0cmFuc2l0aW9uLWR1cmF0aW9uOi4wMW1zIWltcG9ydGFudDtzY3JvbGwtYmVoYXZpb3I6YXV0byFpbXBvcnRhbnR9fS5maWxlXDpib3JkZXItMDo6ZmlsZS1zZWxlY3Rvci1idXR0b257Ym9yZGVyLXdpZHRoOjBweH0uZmlsZVw6YmctdHJhbnNwYXJlbnQ6OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmZpbGVcOnRleHQtc206OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2ZvbnQtc2l6ZTouODc1cmVtO2xpbmUtaGVpZ2h0OjEuMjVyZW19LmZpbGVcOmZvbnQtbWVkaXVtOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntmb250LXdlaWdodDo1MDB9LmZpbGVcOnRleHQtZm9yZWdyb3VuZDo6ZmlsZS1zZWxlY3Rvci1idXR0b257Y29sb3I6aHNsKHZhcigtLWZvcmVncm91bmQpKX0ucGxhY2Vob2xkZXJcOnRleHQtbXV0ZWQtZm9yZWdyb3VuZDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkpfS5wbGFjZWhvbGRlclw6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kOjpwbGFjZWhvbGRlcntjb2xvcjpoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkpfS5hZnRlclw6YWJzb2x1dGU6YWZ0ZXJ7Y29udGVudDp2YXIoLS10dy1jb250ZW50KTtwb3NpdGlvbjphYnNvbHV0ZX0uYWZ0ZXJcOi1pbnNldC0yOmFmdGVye2NvbnRlbnQ6dmFyKC0tdHctY29udGVudCk7aW5zZXQ6LS41cmVtfS5hZnRlclw6aW5zZXQteS0wOmFmdGVye2NvbnRlbnQ6dmFyKC0tdHctY29udGVudCk7dG9wOjA7Ym90dG9tOjB9LmFmdGVyXDpsZWZ0LTFcLzI6YWZ0ZXJ7Y29udGVudDp2YXIoLS10dy1jb250ZW50KTtsZWZ0OjUwJX0uYWZ0ZXJcOnctMTphZnRlcntjb250ZW50OnZhcigtLXR3LWNvbnRlbnQpO3dpZHRoOi4yNXJlbX0uYWZ0ZXJcOnctXFsycHhcXTphZnRlcntjb250ZW50OnZhcigtLXR3LWNvbnRlbnQpO3dpZHRoOjJweH0uYWZ0ZXJcOi10cmFuc2xhdGUteC0xXC8yOmFmdGVye2NvbnRlbnQ6dmFyKC0tdHctY29udGVudCk7LS10dy10cmFuc2xhdGUteDogLTUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0uZmlyc3RcOnJvdW5kZWQtbC1tZDpmaXJzdC1jaGlsZHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDJweCk7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpfS5maXJzdFw6Ym9yZGVyLWw6Zmlyc3QtY2hpbGR7Ym9yZGVyLWxlZnQtd2lkdGg6MXB4fS5sYXN0XDpyb3VuZGVkLXItbWQ6bGFzdC1jaGlsZHtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDJweCl9LmZvY3VzLXdpdGhpblw6cmVsYXRpdmU6Zm9jdXMtd2l0aGlue3Bvc2l0aW9uOnJlbGF0aXZlfS5mb2N1cy13aXRoaW5cOnotMjA6Zm9jdXMtd2l0aGlue3otaW5kZXg6MjB9LmhvdmVyXDotdHJhbnNsYXRlLXktMFwuNTpob3ZlcnstLXR3LXRyYW5zbGF0ZS15OiAtLjEyNXJlbTt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0uaG92ZXJcOi10cmFuc2xhdGUteS0xOmhvdmVyey0tdHctdHJhbnNsYXRlLXk6IC0uMjVyZW07dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LmhvdmVyXDpib3JkZXItcHJpbWFyeVwvMzA6aG92ZXJ7Ym9yZGVyLWNvbG9yOmhzbCh2YXIoLS1wcmltYXJ5KSAvIC4zKX0uaG92ZXJcOmJvcmRlci1wcmltYXJ5XC80MDpob3Zlcntib3JkZXItY29sb3I6aHNsKHZhcigtLXByaW1hcnkpIC8gLjQpfS5ob3Zlclw6YmctYWNjZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWFjY2VudCkpfS5ob3Zlclw6YmctZGVzdHJ1Y3RpdmVcLzgwOmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWRlc3RydWN0aXZlKSAvIC44KX0uaG92ZXJcOmJnLWRlc3RydWN0aXZlXC85MDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1kZXN0cnVjdGl2ZSkgLyAuOSl9LmhvdmVyXDpiZy1tdXRlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1tdXRlZCkpfS5ob3Zlclw6YmctbXV0ZWRcLzUwOmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLW11dGVkKSAvIC41KX0uaG92ZXJcOmJnLXByaW1hcnk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tcHJpbWFyeSkpfS5ob3Zlclw6YmctcHJpbWFyeVwvODA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tcHJpbWFyeSkgLyAuOCl9LmhvdmVyXDpiZy1wcmltYXJ5XC85MDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1wcmltYXJ5KSAvIC45KX0uaG92ZXJcOmJnLXByaW1hcnlcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1wcmltYXJ5KSAvIC4wNil9LmhvdmVyXDpiZy1yZWQtNTAwXC9cWzBcLjA2XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWY0NDQ0MGZ9LmhvdmVyXDpiZy1zZWNvbmRhcnk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tc2Vjb25kYXJ5KSl9LmhvdmVyXDpiZy1zZWNvbmRhcnlcLzgwOmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXNlY29uZGFyeSkgLyAuOCl9LmhvdmVyXDpiZy15ZWxsb3ctNTAwXC9cWzBcLjA4XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWFiMzA4MTR9LmhvdmVyXDp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kOmhvdmVye2NvbG9yOmhzbCh2YXIoLS1hY2NlbnQtZm9yZWdyb3VuZCkpfS5ob3Zlclw6dGV4dC1mb3JlZ3JvdW5kOmhvdmVye2NvbG9yOmhzbCh2YXIoLS1mb3JlZ3JvdW5kKSl9LmhvdmVyXDp0ZXh0LW11dGVkLWZvcmVncm91bmQ6aG92ZXJ7Y29sb3I6aHNsKHZhcigtLW11dGVkLWZvcmVncm91bmQpKX0uaG92ZXJcOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kOmhvdmVye2NvbG9yOmhzbCh2YXIoLS1wcmltYXJ5LWZvcmVncm91bmQpKX0uaG92ZXJcOnRleHQtcHJpbWFyeVwvOTA6aG92ZXJ7Y29sb3I6aHNsKHZhcigtLXByaW1hcnkpIC8gLjkpfS5ob3Zlclw6dW5kZXJsaW5lOmhvdmVye3RleHQtZGVjb3JhdGlvbi1saW5lOnVuZGVybGluZX0uaG92ZXJcOm9wYWNpdHktMTAwOmhvdmVye29wYWNpdHk6MX0uaG92ZXJcOm9wYWNpdHktODA6aG92ZXJ7b3BhY2l0eTouOH0uaG92ZXJcOnNoYWRvdy1cWzBfMF8wXzFweF9oc2xcKHZhclwoLS1zaWRlYmFyLWFjY2VudFwpXClcXTpob3ZlcnstLXR3LXNoYWRvdzogMCAwIDAgMXB4IGhzbCh2YXIoLS1zaWRlYmFyLWFjY2VudCkpOy0tdHctc2hhZG93LWNvbG9yZWQ6IDAgMCAwIDFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXJpbmctc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXNoYWRvdyl9LmhvdmVyXDpzaGFkb3ctbGc6aG92ZXJ7LS10dy1zaGFkb3c6IDAgMTBweCAxNXB4IC0zcHggcmdiKDAgMCAwIC8gLjEpLCAwIDRweCA2cHggLTRweCByZ2IoMCAwIDAgLyAuMSk7LS10dy1zaGFkb3ctY29sb3JlZDogMCAxMHB4IDE1cHggLTNweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpLCAwIDRweCA2cHggLTRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXJpbmctc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXNoYWRvdyl9LmhvdmVyXDpzaGFkb3cteGw6aG92ZXJ7LS10dy1zaGFkb3c6IDAgMjBweCAyNXB4IC01cHggcmdiKDAgMCAwIC8gLjEpLCAwIDhweCAxMHB4IC02cHggcmdiKDAgMCAwIC8gLjEpOy0tdHctc2hhZG93LWNvbG9yZWQ6IDAgMjBweCAyNXB4IC01cHggdmFyKC0tdHctc2hhZG93LWNvbG9yKSwgMCA4cHggMTBweCAtNnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3csIDAgMCAjMDAwMCksdmFyKC0tdHctcmluZy1zaGFkb3csIDAgMCAjMDAwMCksdmFyKC0tdHctc2hhZG93KX0uaG92ZXJcOnNoYWRvdy1wcmltYXJ5XC8xMDpob3ZlcnstLXR3LXNoYWRvdy1jb2xvcjogaHNsKHZhcigtLXByaW1hcnkpIC8gLjEpOy0tdHctc2hhZG93OiB2YXIoLS10dy1zaGFkb3ctY29sb3JlZCl9LmhvdmVyXDpzaGFkb3ctcHJpbWFyeVwvNTpob3ZlcnstLXR3LXNoYWRvdy1jb2xvcjogaHNsKHZhcigtLXByaW1hcnkpIC8gLjA1KTstLXR3LXNoYWRvdzogdmFyKC0tdHctc2hhZG93LWNvbG9yZWQpfS5mb2N1c1w6Ym9yZGVyLXByaW1hcnlcLzQwOmZvY3Vze2JvcmRlci1jb2xvcjpoc2wodmFyKC0tcHJpbWFyeSkgLyAuNCl9LmZvY3VzXDpiZy1hY2NlbnQ6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYWNjZW50KSl9LmZvY3VzXDpiZy1wcmltYXJ5OmZvY3Vze2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpKX0uZm9jdXNcOnRleHQtYWNjZW50LWZvcmVncm91bmQ6Zm9jdXN7Y29sb3I6aHNsKHZhcigtLWFjY2VudC1mb3JlZ3JvdW5kKSl9LmZvY3VzXDp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZDpmb2N1c3tjb2xvcjpoc2wodmFyKC0tcHJpbWFyeS1mb3JlZ3JvdW5kKSl9LmZvY3VzXDpvcGFjaXR5LTEwMDpmb2N1c3tvcGFjaXR5OjF9LmZvY3VzXDpvdXRsaW5lLW5vbmU6Zm9jdXN7b3V0bGluZToycHggc29saWQgdHJhbnNwYXJlbnQ7b3V0bGluZS1vZmZzZXQ6MnB4fS5mb2N1c1w6cmluZy0yOmZvY3Vzey0tdHctcmluZy1vZmZzZXQtc2hhZG93OiB2YXIoLS10dy1yaW5nLWluc2V0KSAwIDAgMCB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkgdmFyKC0tdHctcmluZy1vZmZzZXQtY29sb3IpOy0tdHctcmluZy1zaGFkb3c6IHZhcigtLXR3LXJpbmctaW5zZXQpIDAgMCAwIGNhbGMoMnB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKSB2YXIoLS10dy1yaW5nLWNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdywgMCAwICMwMDAwKX0uZm9jdXNcOnJpbmctcHJpbWFyeVwvMjA6Zm9jdXN7LS10dy1yaW5nLWNvbG9yOiBoc2wodmFyKC0tcHJpbWFyeSkgLyAuMil9LmZvY3VzXDpyaW5nLXJpbmc6Zm9jdXN7LS10dy1yaW5nLWNvbG9yOiBoc2wodmFyKC0tcmluZykpfS5mb2N1c1w6cmluZy1vZmZzZXQtMjpmb2N1c3stLXR3LXJpbmctb2Zmc2V0LXdpZHRoOiAycHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtbm9uZTpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHRyYW5zcGFyZW50O291dGxpbmUtb2Zmc2V0OjJweH0uZm9jdXMtdmlzaWJsZVw6cmluZy0xOmZvY3VzLXZpc2libGV7LS10dy1yaW5nLW9mZnNldC1zaGFkb3c6IHZhcigtLXR3LXJpbmctaW5zZXQpIDAgMCAwIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSB2YXIoLS10dy1yaW5nLW9mZnNldC1jb2xvcik7LS10dy1yaW5nLXNoYWRvdzogdmFyKC0tdHctcmluZy1pbnNldCkgMCAwIDAgY2FsYygxcHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpIHZhcigtLXR3LXJpbmctY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93LCAwIDAgIzAwMDApfS5mb2N1cy12aXNpYmxlXDpyaW5nLTI6Zm9jdXMtdmlzaWJsZXstLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzogdmFyKC0tdHctcmluZy1pbnNldCkgMCAwIDAgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpIHZhcigtLXR3LXJpbmctb2Zmc2V0LWNvbG9yKTstLXR3LXJpbmctc2hhZG93OiB2YXIoLS10dy1yaW5nLWluc2V0KSAwIDAgMCBjYWxjKDJweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSkgdmFyKC0tdHctcmluZy1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3csIDAgMCAjMDAwMCl9LmZvY3VzLXZpc2libGVcOnJpbmctcmluZzpmb2N1cy12aXNpYmxley0tdHctcmluZy1jb2xvcjogaHNsKHZhcigtLXJpbmcpKX0uZm9jdXMtdmlzaWJsZVw6cmluZy1vZmZzZXQtMTpmb2N1cy12aXNpYmxley0tdHctcmluZy1vZmZzZXQtd2lkdGg6IDFweH0uZm9jdXMtdmlzaWJsZVw6cmluZy1vZmZzZXQtMjpmb2N1cy12aXNpYmxley0tdHctcmluZy1vZmZzZXQtd2lkdGg6IDJweH0uZm9jdXMtdmlzaWJsZVw6cmluZy1vZmZzZXQtYmFja2dyb3VuZDpmb2N1cy12aXNpYmxley0tdHctcmluZy1vZmZzZXQtY29sb3I6IGhzbCh2YXIoLS1iYWNrZ3JvdW5kKSl9LmRpc2FibGVkXDpwb2ludGVyLWV2ZW50cy1ub25lOmRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmV9LmRpc2FibGVkXDpjdXJzb3Itbm90LWFsbG93ZWQ6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5kaXNhYmxlZFw6b3BhY2l0eS00MDpkaXNhYmxlZHtvcGFjaXR5Oi40fS5kaXNhYmxlZFw6b3BhY2l0eS01MDpkaXNhYmxlZHtvcGFjaXR5Oi41fS5kaXNhYmxlZFw6b3BhY2l0eS02MDpkaXNhYmxlZHtvcGFjaXR5Oi42fS5kaXNhYmxlZFw6aG92ZXJcOnRyYW5zbGF0ZS15LTA6aG92ZXI6ZGlzYWJsZWR7LS10dy10cmFuc2xhdGUteTogMHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5ncm91cFwvbWVudS1pdGVtOmZvY3VzLXdpdGhpbiAuZ3JvdXAtZm9jdXMtd2l0aGluXC9tZW51LWl0ZW1cOm9wYWNpdHktMTAwe29wYWNpdHk6MX0uZ3JvdXBcL21lbnUtaXRlbTpob3ZlciAuZ3JvdXAtaG92ZXJcL21lbnUtaXRlbVw6b3BhY2l0eS0xMDAsLmdyb3VwOmhvdmVyIC5ncm91cC1ob3Zlclw6b3BhY2l0eS0xMDB7b3BhY2l0eToxfS5ncm91cC5kZXN0cnVjdGl2ZSAuZ3JvdXAtXFtcLmRlc3RydWN0aXZlXF1cOmJvcmRlci1tdXRlZFwvNDB7Ym9yZGVyLWNvbG9yOmhzbCh2YXIoLS1tdXRlZCkgLyAuNCl9Lmdyb3VwLnRvYXN0ZXIgLmdyb3VwLVxbXC50b2FzdGVyXF1cOmJvcmRlci1ib3JkZXJ7Ym9yZGVyLWNvbG9yOmhzbCh2YXIoLS1ib3JkZXIpKX0uZ3JvdXAudG9hc3QgLmdyb3VwLVxbXC50b2FzdFxdXDpiZy1tdXRlZHtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1tdXRlZCkpfS5ncm91cC50b2FzdCAuZ3JvdXAtXFtcLnRvYXN0XF1cOmJnLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tcHJpbWFyeSkpfS5ncm91cC50b2FzdGVyIC5ncm91cC1cW1wudG9hc3RlclxdXDpiZy1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWJhY2tncm91bmQpKX0uZ3JvdXAuZGVzdHJ1Y3RpdmUgLmdyb3VwLVxbXC5kZXN0cnVjdGl2ZVxdXDp0ZXh0LXJlZC0zMDB7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDI1MiAxNjUgMTY1IC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9Lmdyb3VwLnRvYXN0IC5ncm91cC1cW1wudG9hc3RcXVw6dGV4dC1tdXRlZC1mb3JlZ3JvdW5ke2NvbG9yOmhzbCh2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKSl9Lmdyb3VwLnRvYXN0IC5ncm91cC1cW1wudG9hc3RcXVw6dGV4dC1wcmltYXJ5LWZvcmVncm91bmR7Y29sb3I6aHNsKHZhcigtLXByaW1hcnktZm9yZWdyb3VuZCkpfS5ncm91cC50b2FzdGVyIC5ncm91cC1cW1wudG9hc3RlclxdXDp0ZXh0LWZvcmVncm91bmR7Y29sb3I6aHNsKHZhcigtLWZvcmVncm91bmQpKX0uZ3JvdXAudG9hc3RlciAuZ3JvdXAtXFtcLnRvYXN0ZXJcXVw6c2hhZG93LWxney0tdHctc2hhZG93OiAwIDEwcHggMTVweCAtM3B4IHJnYigwIDAgMCAvIC4xKSwgMCA0cHggNnB4IC00cHggcmdiKDAgMCAwIC8gLjEpOy0tdHctc2hhZG93LWNvbG9yZWQ6IDAgMTBweCAxNXB4IC0zcHggdmFyKC0tdHctc2hhZG93LWNvbG9yKSwgMCA0cHggNnB4IC00cHggdmFyKC0tdHctc2hhZG93LWNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1yaW5nLXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1zaGFkb3cpfS5ncm91cC5kZXN0cnVjdGl2ZSAuZ3JvdXAtXFtcLmRlc3RydWN0aXZlXF1cOmhvdmVyXDpib3JkZXItZGVzdHJ1Y3RpdmVcLzMwOmhvdmVye2JvcmRlci1jb2xvcjpoc2wodmFyKC0tZGVzdHJ1Y3RpdmUpIC8gLjMpfS5ncm91cC5kZXN0cnVjdGl2ZSAuZ3JvdXAtXFtcLmRlc3RydWN0aXZlXF1cOmhvdmVyXDpiZy1kZXN0cnVjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1kZXN0cnVjdGl2ZSkpfS5ncm91cC5kZXN0cnVjdGl2ZSAuZ3JvdXAtXFtcLmRlc3RydWN0aXZlXF1cOmhvdmVyXDp0ZXh0LWRlc3RydWN0aXZlLWZvcmVncm91bmQ6aG92ZXJ7Y29sb3I6aHNsKHZhcigtLWRlc3RydWN0aXZlLWZvcmVncm91bmQpKX0uZ3JvdXAuZGVzdHJ1Y3RpdmUgLmdyb3VwLVxbXC5kZXN0cnVjdGl2ZVxdXDpob3Zlclw6dGV4dC1yZWQtNTA6aG92ZXJ7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDI1NCAyNDIgMjQyIC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9Lmdyb3VwLmRlc3RydWN0aXZlIC5ncm91cC1cW1wuZGVzdHJ1Y3RpdmVcXVw6Zm9jdXNcOnJpbmctZGVzdHJ1Y3RpdmU6Zm9jdXN7LS10dy1yaW5nLWNvbG9yOiBoc2wodmFyKC0tZGVzdHJ1Y3RpdmUpKX0uZ3JvdXAuZGVzdHJ1Y3RpdmUgLmdyb3VwLVxbXC5kZXN0cnVjdGl2ZVxdXDpmb2N1c1w6cmluZy1yZWQtNDAwOmZvY3Vzey0tdHctcmluZy1vcGFjaXR5OiAxOy0tdHctcmluZy1jb2xvcjogcmdiKDI0OCAxMTMgMTEzIC8gdmFyKC0tdHctcmluZy1vcGFjaXR5LCAxKSl9Lmdyb3VwLmRlc3RydWN0aXZlIC5ncm91cC1cW1wuZGVzdHJ1Y3RpdmVcXVw6Zm9jdXNcOnJpbmctb2Zmc2V0LXJlZC02MDA6Zm9jdXN7LS10dy1yaW5nLW9mZnNldC1jb2xvcjogI2RjMjYyNn0ucGVlcjpkaXNhYmxlZH4ucGVlci1kaXNhYmxlZFw6Y3Vyc29yLW5vdC1hbGxvd2Vke2N1cnNvcjpub3QtYWxsb3dlZH0ucGVlcjpkaXNhYmxlZH4ucGVlci1kaXNhYmxlZFw6b3BhY2l0eS03MHtvcGFjaXR5Oi43fS5oYXMtXFtcOmRpc2FibGVkXF1cOm9wYWNpdHktNTA6aGFzKDpkaXNhYmxlZCl7b3BhY2l0eTouNX0uZ3JvdXBcL21lbnUtaXRlbTpoYXMoW2RhdGEtc2lkZWJhcj1tZW51LWFjdGlvbl0pIC5ncm91cC1oYXMtXFtcW2RhdGEtc2lkZWJhclw9bWVudS1hY3Rpb25cXVxdXC9tZW51LWl0ZW1cOnByLTh7cGFkZGluZy1yaWdodDoycmVtfS5hcmlhLWRpc2FibGVkXDpwb2ludGVyLWV2ZW50cy1ub25lW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17cG9pbnRlci1ldmVudHM6bm9uZX0uYXJpYS1kaXNhYmxlZFw6b3BhY2l0eS01MFthcmlhLWRpc2FibGVkPXRydWVde29wYWNpdHk6LjV9LmFyaWEtc2VsZWN0ZWRcOmJnLWFjY2VudFthcmlhLXNlbGVjdGVkPXRydWVde2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWFjY2VudCkpfS5hcmlhLXNlbGVjdGVkXDpiZy1hY2NlbnRcLzUwW2FyaWEtc2VsZWN0ZWQ9dHJ1ZV17YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYWNjZW50KSAvIC41KX0uYXJpYS1zZWxlY3RlZFw6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZFthcmlhLXNlbGVjdGVkPXRydWVde2NvbG9yOmhzbCh2YXIoLS1hY2NlbnQtZm9yZWdyb3VuZCkpfS5hcmlhLXNlbGVjdGVkXDp0ZXh0LW11dGVkLWZvcmVncm91bmRbYXJpYS1zZWxlY3RlZD10cnVlXXtjb2xvcjpoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkpfS5hcmlhLXNlbGVjdGVkXDpvcGFjaXR5LTEwMFthcmlhLXNlbGVjdGVkPXRydWVde29wYWNpdHk6MX0uYXJpYS1zZWxlY3RlZFw6b3BhY2l0eS0zMFthcmlhLXNlbGVjdGVkPXRydWVde29wYWNpdHk6LjN9LmRhdGEtXFtkaXNhYmxlZFw9dHJ1ZVxdXDpwb2ludGVyLWV2ZW50cy1ub25lW2RhdGEtZGlzYWJsZWQ9dHJ1ZV0sLmRhdGEtXFtkaXNhYmxlZFxdXDpwb2ludGVyLWV2ZW50cy1ub25lW2RhdGEtZGlzYWJsZWRde3BvaW50ZXItZXZlbnRzOm5vbmV9LmRhdGEtXFtwYW5lbC1ncm91cC1kaXJlY3Rpb25cPXZlcnRpY2FsXF1cOmgtcHhbZGF0YS1wYW5lbC1ncm91cC1kaXJlY3Rpb249dmVydGljYWxde2hlaWdodDoxcHh9LmRhdGEtXFtwYW5lbC1ncm91cC1kaXJlY3Rpb25cPXZlcnRpY2FsXF1cOnctZnVsbFtkYXRhLXBhbmVsLWdyb3VwLWRpcmVjdGlvbj12ZXJ0aWNhbF17d2lkdGg6MTAwJX0uZGF0YS1cW3NpZGVcPWJvdHRvbVxdXDp0cmFuc2xhdGUteS0xW2RhdGEtc2lkZT1ib3R0b21dey0tdHctdHJhbnNsYXRlLXk6IC4yNXJlbTt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0uZGF0YS1cW3NpZGVcPWxlZnRcXVw6LXRyYW5zbGF0ZS14LTFbZGF0YS1zaWRlPWxlZnRdey0tdHctdHJhbnNsYXRlLXg6IC0uMjVyZW07dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LmRhdGEtXFtzaWRlXD1yaWdodFxdXDp0cmFuc2xhdGUteC0xW2RhdGEtc2lkZT1yaWdodF17LS10dy10cmFuc2xhdGUteDogLjI1cmVtO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5kYXRhLVxbc2lkZVw9dG9wXF1cOi10cmFuc2xhdGUteS0xW2RhdGEtc2lkZT10b3Bdey0tdHctdHJhbnNsYXRlLXk6IC0uMjVyZW07dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LmRhdGEtXFtzdGF0ZVw9Y2hlY2tlZFxdXDp0cmFuc2xhdGUteC01W2RhdGEtc3RhdGU9Y2hlY2tlZF17LS10dy10cmFuc2xhdGUteDogMS4yNXJlbTt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0uZGF0YS1cW3N0YXRlXD11bmNoZWNrZWRcXVw6dHJhbnNsYXRlLXgtMFtkYXRhLXN0YXRlPXVuY2hlY2tlZF0sLmRhdGEtXFtzd2lwZVw9Y2FuY2VsXF1cOnRyYW5zbGF0ZS14LTBbZGF0YS1zd2lwZT1jYW5jZWxdey0tdHctdHJhbnNsYXRlLXg6IDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0uZGF0YS1cW3N3aXBlXD1lbmRcXVw6dHJhbnNsYXRlLXgtXFt2YXJcKC0tcmFkaXgtdG9hc3Qtc3dpcGUtZW5kLXhcKVxdW2RhdGEtc3dpcGU9ZW5kXXstLXR3LXRyYW5zbGF0ZS14OiB2YXIoLS1yYWRpeC10b2FzdC1zd2lwZS1lbmQteCk7dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LmRhdGEtXFtzd2lwZVw9bW92ZVxdXDp0cmFuc2xhdGUteC1cW3ZhclwoLS1yYWRpeC10b2FzdC1zd2lwZS1tb3ZlLXhcKVxdW2RhdGEtc3dpcGU9bW92ZV17LS10dy10cmFuc2xhdGUteDogdmFyKC0tcmFkaXgtdG9hc3Qtc3dpcGUtbW92ZS14KTt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX1Aa2V5ZnJhbWVzIGFjY29yZGlvbi11cHswJXtoZWlnaHQ6dmFyKC0tcmFkaXgtYWNjb3JkaW9uLWNvbnRlbnQtaGVpZ2h0KX10b3toZWlnaHQ6MH19LmRhdGEtXFtzdGF0ZVw9Y2xvc2VkXF1cOmFuaW1hdGUtYWNjb3JkaW9uLXVwW2RhdGEtc3RhdGU9Y2xvc2VkXXthbmltYXRpb246YWNjb3JkaW9uLXVwIC4ycyBlYXNlLW91dH1Aa2V5ZnJhbWVzIGFjY29yZGlvbi1kb3duezAle2hlaWdodDowfXRve2hlaWdodDp2YXIoLS1yYWRpeC1hY2NvcmRpb24tY29udGVudC1oZWlnaHQpfX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOmFuaW1hdGUtYWNjb3JkaW9uLWRvd25bZGF0YS1zdGF0ZT1vcGVuXXthbmltYXRpb246YWNjb3JkaW9uLWRvd24gLjJzIGVhc2Utb3V0fS5kYXRhLVxbcGFuZWwtZ3JvdXAtZGlyZWN0aW9uXD12ZXJ0aWNhbFxdXDpmbGV4LWNvbFtkYXRhLXBhbmVsLWdyb3VwLWRpcmVjdGlvbj12ZXJ0aWNhbF17ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5kYXRhLVxbYWN0aXZlXF1cOmJnLWFjY2VudFwvNTBbZGF0YS1hY3RpdmVde2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWFjY2VudCkgLyAuNSl9LmRhdGEtXFtzZWxlY3RlZFw9XCd0cnVlXCdcXVw6YmctYWNjZW50W2RhdGEtc2VsZWN0ZWQ9dHJ1ZV17YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYWNjZW50KSl9LmRhdGEtXFtzdGF0ZVw9YWN0aXZlXF1cOmJnLWJhY2tncm91bmRbZGF0YS1zdGF0ZT1hY3RpdmVde2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWJhY2tncm91bmQpKX0uZGF0YS1cW3N0YXRlXD1jaGVja2VkXF1cOmJnLXByaW1hcnlbZGF0YS1zdGF0ZT1jaGVja2VkXXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1wcmltYXJ5KSl9LmRhdGEtXFtzdGF0ZVw9b25cXVw6YmctYWNjZW50W2RhdGEtc3RhdGU9b25dLC5kYXRhLVxbc3RhdGVcPW9wZW5cXVw6YmctYWNjZW50W2RhdGEtc3RhdGU9b3Blbl17YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYWNjZW50KSl9LmRhdGEtXFtzdGF0ZVw9b3BlblxdXDpiZy1hY2NlbnRcLzUwW2RhdGEtc3RhdGU9b3Blbl17YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYWNjZW50KSAvIC41KX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOmJnLXNlY29uZGFyeVtkYXRhLXN0YXRlPW9wZW5de2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXNlY29uZGFyeSkpfS5kYXRhLVxbc3RhdGVcPXNlbGVjdGVkXF1cOmJnLW11dGVkW2RhdGEtc3RhdGU9c2VsZWN0ZWRde2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLW11dGVkKSl9LmRhdGEtXFtzdGF0ZVw9dW5jaGVja2VkXF1cOmJnLWlucHV0W2RhdGEtc3RhdGU9dW5jaGVja2VkXXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1pbnB1dCkpfS5kYXRhLVxbYWN0aXZlXD10cnVlXF1cOmZvbnQtbWVkaXVtW2RhdGEtYWN0aXZlPXRydWVde2ZvbnQtd2VpZ2h0OjUwMH0uZGF0YS1cW3NlbGVjdGVkXD10cnVlXF1cOnRleHQtYWNjZW50LWZvcmVncm91bmRbZGF0YS1zZWxlY3RlZD10cnVlXXtjb2xvcjpoc2wodmFyKC0tYWNjZW50LWZvcmVncm91bmQpKX0uZGF0YS1cW3N0YXRlXD1hY3RpdmVcXVw6dGV4dC1mb3JlZ3JvdW5kW2RhdGEtc3RhdGU9YWN0aXZlXXtjb2xvcjpoc2wodmFyKC0tZm9yZWdyb3VuZCkpfS5kYXRhLVxbc3RhdGVcPWNoZWNrZWRcXVw6dGV4dC1wcmltYXJ5LWZvcmVncm91bmRbZGF0YS1zdGF0ZT1jaGVja2VkXXtjb2xvcjpoc2wodmFyKC0tcHJpbWFyeS1mb3JlZ3JvdW5kKSl9LmRhdGEtXFtzdGF0ZVw9b25cXVw6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZFtkYXRhLXN0YXRlPW9uXSwuZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnRleHQtYWNjZW50LWZvcmVncm91bmRbZGF0YS1zdGF0ZT1vcGVuXXtjb2xvcjpoc2wodmFyKC0tYWNjZW50LWZvcmVncm91bmQpKX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnRleHQtbXV0ZWQtZm9yZWdyb3VuZFtkYXRhLXN0YXRlPW9wZW5de2NvbG9yOmhzbCh2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKSl9LmRhdGEtXFtkaXNhYmxlZFw9dHJ1ZVxdXDpvcGFjaXR5LTUwW2RhdGEtZGlzYWJsZWQ9dHJ1ZV0sLmRhdGEtXFtkaXNhYmxlZFxdXDpvcGFjaXR5LTUwW2RhdGEtZGlzYWJsZWRde29wYWNpdHk6LjV9LmRhdGEtXFtzdGF0ZVw9b3BlblxdXDpvcGFjaXR5LTEwMFtkYXRhLXN0YXRlPW9wZW5de29wYWNpdHk6MX0uZGF0YS1cW3N0YXRlXD1hY3RpdmVcXVw6c2hhZG93LXNtW2RhdGEtc3RhdGU9YWN0aXZlXXstLXR3LXNoYWRvdzogMCAxcHggMnB4IDAgcmdiKDAgMCAwIC8gLjA1KTstLXR3LXNoYWRvdy1jb2xvcmVkOiAwIDFweCAycHggMCB2YXIoLS10dy1zaGFkb3ctY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXJpbmctc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXNoYWRvdyl9LmRhdGEtXFtzd2lwZVw9bW92ZVxdXDp0cmFuc2l0aW9uLW5vbmVbZGF0YS1zd2lwZT1tb3ZlXXt0cmFuc2l0aW9uLXByb3BlcnR5Om5vbmV9LmRhdGEtXFtzdGF0ZVw9Y2xvc2VkXF1cOmR1cmF0aW9uLTMwMFtkYXRhLXN0YXRlPWNsb3NlZF17dHJhbnNpdGlvbi1kdXJhdGlvbjouM3N9LmRhdGEtXFtzdGF0ZVw9b3BlblxdXDpkdXJhdGlvbi01MDBbZGF0YS1zdGF0ZT1vcGVuXXt0cmFuc2l0aW9uLWR1cmF0aW9uOi41c30uZGF0YS1cW21vdGlvblxeXD1mcm9tLVxdXDphbmltYXRlLWluW2RhdGEtbW90aW9uXj1mcm9tLV0sLmRhdGEtXFtzdGF0ZVw9b3BlblxdXDphbmltYXRlLWluW2RhdGEtc3RhdGU9b3Blbl0sLmRhdGEtXFtzdGF0ZVw9dmlzaWJsZVxdXDphbmltYXRlLWluW2RhdGEtc3RhdGU9dmlzaWJsZV17YW5pbWF0aW9uLW5hbWU6ZW50ZXI7YW5pbWF0aW9uLWR1cmF0aW9uOi4xNXM7LS10dy1lbnRlci1vcGFjaXR5OiBpbml0aWFsOy0tdHctZW50ZXItc2NhbGU6IGluaXRpYWw7LS10dy1lbnRlci1yb3RhdGU6IGluaXRpYWw7LS10dy1lbnRlci10cmFuc2xhdGUteDogaW5pdGlhbDstLXR3LWVudGVyLXRyYW5zbGF0ZS15OiBpbml0aWFsfS5kYXRhLVxbbW90aW9uXF5cPXRvLVxdXDphbmltYXRlLW91dFtkYXRhLW1vdGlvbl49dG8tXSwuZGF0YS1cW3N0YXRlXD1jbG9zZWRcXVw6YW5pbWF0ZS1vdXRbZGF0YS1zdGF0ZT1jbG9zZWRdLC5kYXRhLVxbc3RhdGVcPWhpZGRlblxdXDphbmltYXRlLW91dFtkYXRhLXN0YXRlPWhpZGRlbl0sLmRhdGEtXFtzd2lwZVw9ZW5kXF1cOmFuaW1hdGUtb3V0W2RhdGEtc3dpcGU9ZW5kXXthbmltYXRpb24tbmFtZTpleGl0O2FuaW1hdGlvbi1kdXJhdGlvbjouMTVzOy0tdHctZXhpdC1vcGFjaXR5OiBpbml0aWFsOy0tdHctZXhpdC1zY2FsZTogaW5pdGlhbDstLXR3LWV4aXQtcm90YXRlOiBpbml0aWFsOy0tdHctZXhpdC10cmFuc2xhdGUteDogaW5pdGlhbDstLXR3LWV4aXQtdHJhbnNsYXRlLXk6IGluaXRpYWx9LmRhdGEtXFttb3Rpb25cXlw9ZnJvbS1cXVw6ZmFkZS1pbltkYXRhLW1vdGlvbl49ZnJvbS1dey0tdHctZW50ZXItb3BhY2l0eTogMH0uZGF0YS1cW21vdGlvblxeXD10by1cXVw6ZmFkZS1vdXRbZGF0YS1tb3Rpb25ePXRvLV0sLmRhdGEtXFtzdGF0ZVw9Y2xvc2VkXF1cOmZhZGUtb3V0LTBbZGF0YS1zdGF0ZT1jbG9zZWRdey0tdHctZXhpdC1vcGFjaXR5OiAwfS5kYXRhLVxbc3RhdGVcPWNsb3NlZFxdXDpmYWRlLW91dC04MFtkYXRhLXN0YXRlPWNsb3NlZF17LS10dy1leGl0LW9wYWNpdHk6IC44fS5kYXRhLVxbc3RhdGVcPWhpZGRlblxdXDpmYWRlLW91dFtkYXRhLXN0YXRlPWhpZGRlbl17LS10dy1leGl0LW9wYWNpdHk6IDB9LmRhdGEtXFtzdGF0ZVw9b3BlblxdXDpmYWRlLWluLTBbZGF0YS1zdGF0ZT1vcGVuXSwuZGF0YS1cW3N0YXRlXD12aXNpYmxlXF1cOmZhZGUtaW5bZGF0YS1zdGF0ZT12aXNpYmxlXXstLXR3LWVudGVyLW9wYWNpdHk6IDB9LmRhdGEtXFtzdGF0ZVw9Y2xvc2VkXF1cOnpvb20tb3V0LTk1W2RhdGEtc3RhdGU9Y2xvc2VkXXstLXR3LWV4aXQtc2NhbGU6IC45NX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnpvb20taW4tOTBbZGF0YS1zdGF0ZT1vcGVuXXstLXR3LWVudGVyLXNjYWxlOiAuOX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnpvb20taW4tOTVbZGF0YS1zdGF0ZT1vcGVuXXstLXR3LWVudGVyLXNjYWxlOiAuOTV9LmRhdGEtXFttb3Rpb25cPWZyb20tZW5kXF1cOnNsaWRlLWluLWZyb20tcmlnaHQtNTJbZGF0YS1tb3Rpb249ZnJvbS1lbmRdey0tdHctZW50ZXItdHJhbnNsYXRlLXg6IDEzcmVtfS5kYXRhLVxbbW90aW9uXD1mcm9tLXN0YXJ0XF1cOnNsaWRlLWluLWZyb20tbGVmdC01MltkYXRhLW1vdGlvbj1mcm9tLXN0YXJ0XXstLXR3LWVudGVyLXRyYW5zbGF0ZS14OiAtMTNyZW19LmRhdGEtXFttb3Rpb25cPXRvLWVuZFxdXDpzbGlkZS1vdXQtdG8tcmlnaHQtNTJbZGF0YS1tb3Rpb249dG8tZW5kXXstLXR3LWV4aXQtdHJhbnNsYXRlLXg6IDEzcmVtfS5kYXRhLVxbbW90aW9uXD10by1zdGFydFxdXDpzbGlkZS1vdXQtdG8tbGVmdC01MltkYXRhLW1vdGlvbj10by1zdGFydF17LS10dy1leGl0LXRyYW5zbGF0ZS14OiAtMTNyZW19LmRhdGEtXFtzaWRlXD1ib3R0b21cXVw6c2xpZGUtaW4tZnJvbS10b3AtMltkYXRhLXNpZGU9Ym90dG9tXXstLXR3LWVudGVyLXRyYW5zbGF0ZS15OiAtLjVyZW19LmRhdGEtXFtzaWRlXD1sZWZ0XF1cOnNsaWRlLWluLWZyb20tcmlnaHQtMltkYXRhLXNpZGU9bGVmdF17LS10dy1lbnRlci10cmFuc2xhdGUteDogLjVyZW19LmRhdGEtXFtzaWRlXD1yaWdodFxdXDpzbGlkZS1pbi1mcm9tLWxlZnQtMltkYXRhLXNpZGU9cmlnaHRdey0tdHctZW50ZXItdHJhbnNsYXRlLXg6IC0uNXJlbX0uZGF0YS1cW3NpZGVcPXRvcFxdXDpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yW2RhdGEtc2lkZT10b3Bdey0tdHctZW50ZXItdHJhbnNsYXRlLXk6IC41cmVtfS5kYXRhLVxbc3RhdGVcPWNsb3NlZFxdXDpzbGlkZS1vdXQtdG8tYm90dG9tW2RhdGEtc3RhdGU9Y2xvc2VkXXstLXR3LWV4aXQtdHJhbnNsYXRlLXk6IDEwMCV9LmRhdGEtXFtzdGF0ZVw9Y2xvc2VkXF1cOnNsaWRlLW91dC10by1sZWZ0W2RhdGEtc3RhdGU9Y2xvc2VkXXstLXR3LWV4aXQtdHJhbnNsYXRlLXg6IC0xMDAlfS5kYXRhLVxbc3RhdGVcPWNsb3NlZFxdXDpzbGlkZS1vdXQtdG8tbGVmdC0xXC8yW2RhdGEtc3RhdGU9Y2xvc2VkXXstLXR3LWV4aXQtdHJhbnNsYXRlLXg6IC01MCV9LmRhdGEtXFtzdGF0ZVw9Y2xvc2VkXF1cOnNsaWRlLW91dC10by1yaWdodFtkYXRhLXN0YXRlPWNsb3NlZF0sLmRhdGEtXFtzdGF0ZVw9Y2xvc2VkXF1cOnNsaWRlLW91dC10by1yaWdodC1mdWxsW2RhdGEtc3RhdGU9Y2xvc2VkXXstLXR3LWV4aXQtdHJhbnNsYXRlLXg6IDEwMCV9LmRhdGEtXFtzdGF0ZVw9Y2xvc2VkXF1cOnNsaWRlLW91dC10by10b3BbZGF0YS1zdGF0ZT1jbG9zZWRdey0tdHctZXhpdC10cmFuc2xhdGUteTogLTEwMCV9LmRhdGEtXFtzdGF0ZVw9Y2xvc2VkXF1cOnNsaWRlLW91dC10by10b3AtXFs0OFwlXF1bZGF0YS1zdGF0ZT1jbG9zZWRdey0tdHctZXhpdC10cmFuc2xhdGUteTogLTQ4JX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnNsaWRlLWluLWZyb20tYm90dG9tW2RhdGEtc3RhdGU9b3Blbl17LS10dy1lbnRlci10cmFuc2xhdGUteTogMTAwJX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnNsaWRlLWluLWZyb20tbGVmdFtkYXRhLXN0YXRlPW9wZW5dey0tdHctZW50ZXItdHJhbnNsYXRlLXg6IC0xMDAlfS5kYXRhLVxbc3RhdGVcPW9wZW5cXVw6c2xpZGUtaW4tZnJvbS1sZWZ0LTFcLzJbZGF0YS1zdGF0ZT1vcGVuXXstLXR3LWVudGVyLXRyYW5zbGF0ZS14OiAtNTAlfS5kYXRhLVxbc3RhdGVcPW9wZW5cXVw6c2xpZGUtaW4tZnJvbS1yaWdodFtkYXRhLXN0YXRlPW9wZW5dey0tdHctZW50ZXItdHJhbnNsYXRlLXg6IDEwMCV9LmRhdGEtXFtzdGF0ZVw9b3BlblxdXDpzbGlkZS1pbi1mcm9tLXRvcFtkYXRhLXN0YXRlPW9wZW5dey0tdHctZW50ZXItdHJhbnNsYXRlLXk6IC0xMDAlfS5kYXRhLVxbc3RhdGVcPW9wZW5cXVw6c2xpZGUtaW4tZnJvbS10b3AtXFs0OFwlXF1bZGF0YS1zdGF0ZT1vcGVuXXstLXR3LWVudGVyLXRyYW5zbGF0ZS15OiAtNDglfS5kYXRhLVxbc3RhdGVcPW9wZW5cXVw6c2xpZGUtaW4tZnJvbS10b3AtZnVsbFtkYXRhLXN0YXRlPW9wZW5dey0tdHctZW50ZXItdHJhbnNsYXRlLXk6IC0xMDAlfS5kYXRhLVxbc3RhdGVcPWNsb3NlZFxdXDpkdXJhdGlvbi0zMDBbZGF0YS1zdGF0ZT1jbG9zZWRde2FuaW1hdGlvbi1kdXJhdGlvbjouM3N9LmRhdGEtXFtzdGF0ZVw9b3BlblxdXDpkdXJhdGlvbi01MDBbZGF0YS1zdGF0ZT1vcGVuXXthbmltYXRpb24tZHVyYXRpb246LjVzfS5kYXRhLVxbcGFuZWwtZ3JvdXAtZGlyZWN0aW9uXD12ZXJ0aWNhbFxdXDphZnRlclw6bGVmdC0wW2RhdGEtcGFuZWwtZ3JvdXAtZGlyZWN0aW9uPXZlcnRpY2FsXTphZnRlcntjb250ZW50OnZhcigtLXR3LWNvbnRlbnQpO2xlZnQ6MH0uZGF0YS1cW3BhbmVsLWdyb3VwLWRpcmVjdGlvblw9dmVydGljYWxcXVw6YWZ0ZXJcOmgtMVtkYXRhLXBhbmVsLWdyb3VwLWRpcmVjdGlvbj12ZXJ0aWNhbF06YWZ0ZXJ7Y29udGVudDp2YXIoLS10dy1jb250ZW50KTtoZWlnaHQ6LjI1cmVtfS5kYXRhLVxbcGFuZWwtZ3JvdXAtZGlyZWN0aW9uXD12ZXJ0aWNhbFxdXDphZnRlclw6dy1mdWxsW2RhdGEtcGFuZWwtZ3JvdXAtZGlyZWN0aW9uPXZlcnRpY2FsXTphZnRlcntjb250ZW50OnZhcigtLXR3LWNvbnRlbnQpO3dpZHRoOjEwMCV9LmRhdGEtXFtwYW5lbC1ncm91cC1kaXJlY3Rpb25cPXZlcnRpY2FsXF1cOmFmdGVyXDotdHJhbnNsYXRlLXktMVwvMltkYXRhLXBhbmVsLWdyb3VwLWRpcmVjdGlvbj12ZXJ0aWNhbF06YWZ0ZXJ7Y29udGVudDp2YXIoLS10dy1jb250ZW50KTstLXR3LXRyYW5zbGF0ZS15OiAtNTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5kYXRhLVxbcGFuZWwtZ3JvdXAtZGlyZWN0aW9uXD12ZXJ0aWNhbFxdXDphZnRlclw6dHJhbnNsYXRlLXgtMFtkYXRhLXBhbmVsLWdyb3VwLWRpcmVjdGlvbj12ZXJ0aWNhbF06YWZ0ZXJ7Y29udGVudDp2YXIoLS10dy1jb250ZW50KTstLXR3LXRyYW5zbGF0ZS14OiAwcHg7dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9Lmdyb3VwW2RhdGEtY29sbGFwc2libGU9b2ZmY2FudmFzXSAuZ3JvdXAtZGF0YS1cW2NvbGxhcHNpYmxlXD1vZmZjYW52YXNcXVw6bGVmdC1cW2NhbGNcKHZhclwoLS1zaWRlYmFyLXdpZHRoXClcKi0xXClcXXtsZWZ0OmNhbGModmFyKC0tc2lkZWJhci13aWR0aCkgKiAtMSl9Lmdyb3VwW2RhdGEtY29sbGFwc2libGU9b2ZmY2FudmFzXSAuZ3JvdXAtZGF0YS1cW2NvbGxhcHNpYmxlXD1vZmZjYW52YXNcXVw6cmlnaHQtXFtjYWxjXCh2YXJcKC0tc2lkZWJhci13aWR0aFwpXCotMVwpXF17cmlnaHQ6Y2FsYyh2YXIoLS1zaWRlYmFyLXdpZHRoKSAqIC0xKX0uZ3JvdXBbZGF0YS1zaWRlPWxlZnRdIC5ncm91cC1kYXRhLVxbc2lkZVw9bGVmdFxdXDotcmlnaHQtNHtyaWdodDotMXJlbX0uZ3JvdXBbZGF0YS1zaWRlPXJpZ2h0XSAuZ3JvdXAtZGF0YS1cW3NpZGVcPXJpZ2h0XF1cOmxlZnQtMHtsZWZ0OjB9Lmdyb3VwW2RhdGEtY29sbGFwc2libGU9aWNvbl0gLmdyb3VwLWRhdGEtXFtjb2xsYXBzaWJsZVw9aWNvblxdXDotbXQtOHttYXJnaW4tdG9wOi0ycmVtfS5ncm91cFtkYXRhLWNvbGxhcHNpYmxlPWljb25dIC5ncm91cC1kYXRhLVxbY29sbGFwc2libGVcPWljb25cXVw6aGlkZGVue2Rpc3BsYXk6bm9uZX0uZ3JvdXBbZGF0YS1jb2xsYXBzaWJsZT1pY29uXSAuZ3JvdXAtZGF0YS1cW2NvbGxhcHNpYmxlXD1pY29uXF1cOlwhc2l6ZS04e3dpZHRoOjJyZW0haW1wb3J0YW50O2hlaWdodDoycmVtIWltcG9ydGFudH0uZ3JvdXBbZGF0YS1jb2xsYXBzaWJsZT1pY29uXSAuZ3JvdXAtZGF0YS1cW2NvbGxhcHNpYmxlXD1pY29uXF1cOnctXFstLXNpZGViYXItd2lkdGgtaWNvblxde3dpZHRoOnZhcigtLXNpZGViYXItd2lkdGgtaWNvbil9Lmdyb3VwW2RhdGEtY29sbGFwc2libGU9aWNvbl0gLmdyb3VwLWRhdGEtXFtjb2xsYXBzaWJsZVw9aWNvblxdXDp3LVxbY2FsY1wodmFyXCgtLXNpZGViYXItd2lkdGgtaWNvblwpX1wrX3RoZW1lXChzcGFjaW5nXC40XClcKVxde3dpZHRoOmNhbGModmFyKC0tc2lkZWJhci13aWR0aC1pY29uKSArIDFyZW0pfS5ncm91cFtkYXRhLWNvbGxhcHNpYmxlPWljb25dIC5ncm91cC1kYXRhLVxbY29sbGFwc2libGVcPWljb25cXVw6dy1cW2NhbGNcKHZhclwoLS1zaWRlYmFyLXdpZHRoLWljb25cKV9cK190aGVtZVwoc3BhY2luZ1wuNFwpX1wrMnB4XClcXXt3aWR0aDpjYWxjKHZhcigtLXNpZGViYXItd2lkdGgtaWNvbikgKyAxcmVtICsgMnB4KX0uZ3JvdXBbZGF0YS1jb2xsYXBzaWJsZT1vZmZjYW52YXNdIC5ncm91cC1kYXRhLVxbY29sbGFwc2libGVcPW9mZmNhbnZhc1xdXDp3LTB7d2lkdGg6MHB4fS5ncm91cFtkYXRhLWNvbGxhcHNpYmxlPW9mZmNhbnZhc10gLmdyb3VwLWRhdGEtXFtjb2xsYXBzaWJsZVw9b2ZmY2FudmFzXF1cOnRyYW5zbGF0ZS14LTB7LS10dy10cmFuc2xhdGUteDogMHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5ncm91cFtkYXRhLXNpZGU9cmlnaHRdIC5ncm91cC1kYXRhLVxbc2lkZVw9cmlnaHRcXVw6cm90YXRlLTE4MCwuZ3JvdXBbZGF0YS1zdGF0ZT1vcGVuXSAuZ3JvdXAtZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnJvdGF0ZS0xODB7LS10dy1yb3RhdGU6IDE4MGRlZzt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0uZ3JvdXBbZGF0YS1jb2xsYXBzaWJsZT1pY29uXSAuZ3JvdXAtZGF0YS1cW2NvbGxhcHNpYmxlXD1pY29uXF1cOm92ZXJmbG93LWhpZGRlbntvdmVyZmxvdzpoaWRkZW59Lmdyb3VwW2RhdGEtdmFyaWFudD1mbG9hdGluZ10gLmdyb3VwLWRhdGEtXFt2YXJpYW50XD1mbG9hdGluZ1xdXDpyb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKX0uZ3JvdXBbZGF0YS12YXJpYW50PWZsb2F0aW5nXSAuZ3JvdXAtZGF0YS1cW3ZhcmlhbnRcPWZsb2F0aW5nXF1cOmJvcmRlcntib3JkZXItd2lkdGg6MXB4fS5ncm91cFtkYXRhLXNpZGU9bGVmdF0gLmdyb3VwLWRhdGEtXFtzaWRlXD1sZWZ0XF1cOmJvcmRlci1ye2JvcmRlci1yaWdodC13aWR0aDoxcHh9Lmdyb3VwW2RhdGEtc2lkZT1yaWdodF0gLmdyb3VwLWRhdGEtXFtzaWRlXD1yaWdodFxdXDpib3JkZXItbHtib3JkZXItbGVmdC13aWR0aDoxcHh9Lmdyb3VwW2RhdGEtY29sbGFwc2libGU9aWNvbl0gLmdyb3VwLWRhdGEtXFtjb2xsYXBzaWJsZVw9aWNvblxdXDpcIXAtMHtwYWRkaW5nOjAhaW1wb3J0YW50fS5ncm91cFtkYXRhLWNvbGxhcHNpYmxlPWljb25dIC5ncm91cC1kYXRhLVxbY29sbGFwc2libGVcPWljb25cXVw6XCFwLTJ7cGFkZGluZzouNXJlbSFpbXBvcnRhbnR9Lmdyb3VwW2RhdGEtY29sbGFwc2libGU9aWNvbl0gLmdyb3VwLWRhdGEtXFtjb2xsYXBzaWJsZVw9aWNvblxdXDpvcGFjaXR5LTB7b3BhY2l0eTowfS5ncm91cFtkYXRhLXZhcmlhbnQ9ZmxvYXRpbmddIC5ncm91cC1kYXRhLVxbdmFyaWFudFw9ZmxvYXRpbmdcXVw6c2hhZG93ey0tdHctc2hhZG93OiAwIDFweCAzcHggMCByZ2IoMCAwIDAgLyAuMSksIDAgMXB4IDJweCAtMXB4IHJnYigwIDAgMCAvIC4xKTstLXR3LXNoYWRvdy1jb2xvcmVkOiAwIDFweCAzcHggMCB2YXIoLS10dy1zaGFkb3ctY29sb3IpLCAwIDFweCAycHggLTFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXJpbmctc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXNoYWRvdyl9Lmdyb3VwW2RhdGEtY29sbGFwc2libGU9b2ZmY2FudmFzXSAuZ3JvdXAtZGF0YS1cW2NvbGxhcHNpYmxlXD1vZmZjYW52YXNcXVw6YWZ0ZXJcOmxlZnQtZnVsbDphZnRlcntjb250ZW50OnZhcigtLXR3LWNvbnRlbnQpO2xlZnQ6MTAwJX0ucGVlclwvbWVudS1idXR0b25bZGF0YS1zaXplPWRlZmF1bHRdfi5wZWVyLWRhdGEtXFtzaXplXD1kZWZhdWx0XF1cL21lbnUtYnV0dG9uXDp0b3AtMVwuNXt0b3A6LjM3NXJlbX0ucGVlclwvbWVudS1idXR0b25bZGF0YS1zaXplPWxnXX4ucGVlci1kYXRhLVxbc2l6ZVw9bGdcXVwvbWVudS1idXR0b25cOnRvcC0yXC41e3RvcDouNjI1cmVtfS5wZWVyXC9tZW51LWJ1dHRvbltkYXRhLXNpemU9c21dfi5wZWVyLWRhdGEtXFtzaXplXD1zbVxdXC9tZW51LWJ1dHRvblw6dG9wLTF7dG9wOi4yNXJlbX0ucGVlcltkYXRhLXZhcmlhbnQ9aW5zZXRdfi5wZWVyLWRhdGEtXFt2YXJpYW50XD1pbnNldFxdXDptaW4taC1cW2NhbGNcKDEwMHN2aC10aGVtZVwoc3BhY2luZ1wuNFwpXClcXXttaW4taGVpZ2h0OmNhbGMoMTAwc3ZoIC0gMXJlbSl9LmRhcmtcOmJvcmRlci1kZXN0cnVjdGl2ZTppcyguZGFyayAqKXtib3JkZXItY29sb3I6aHNsKHZhcigtLWRlc3RydWN0aXZlKSl9LmRhcmtcOnRleHQtZ3JlZW4tNDAwOmlzKC5kYXJrICopey0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYig3NCAyMjIgMTI4IC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5LCAxKSl9QG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KXsuc21cOmJvdHRvbS0we2JvdHRvbTowfS5zbVw6cmlnaHQtMHtyaWdodDowfS5zbVw6dG9wLWF1dG97dG9wOmF1dG99LnNtXDptdC0we21hcmdpbi10b3A6MH0uc21cOmJsb2Nre2Rpc3BsYXk6YmxvY2t9LnNtXDppbmxpbmV7ZGlzcGxheTppbmxpbmV9LnNtXDpmbGV4e2Rpc3BsYXk6ZmxleH0uc21cOmgtM1wuNXtoZWlnaHQ6Ljg3NXJlbX0uc21cOnctM1wuNXt3aWR0aDouODc1cmVtfS5zbVw6dy1hdXRve3dpZHRoOmF1dG99LnNtXDptYXgtdy1cWzQyMHB4XF17bWF4LXdpZHRoOjQyMHB4fS5zbVw6bWF4LXctXFs0NDBweFxde21heC13aWR0aDo0NDBweH0uc21cOm1heC13LXNte21heC13aWR0aDoyNHJlbX0uc21cOmdyaWQtY29scy0xe2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMSxtaW5tYXgoMCwxZnIpKX0uc21cOmdyaWQtY29scy0ye2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMixtaW5tYXgoMCwxZnIpKX0uc21cOmdyaWQtY29scy0ze2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMyxtaW5tYXgoMCwxZnIpKX0uc21cOmZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uc21cOmZsZXgtY29se2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uc21cOml0ZW1zLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXJ9LnNtXDpqdXN0aWZ5LWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LnNtXDpqdXN0aWZ5LWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5zbVw6Z2FwLTFcLjV7Z2FwOi4zNzVyZW19LnNtXDpnYXAtMlwuNXtnYXA6LjYyNXJlbX0uc21cOnNwYWNlLXgtMj46bm90KFtoaWRkZW5dKX46bm90KFtoaWRkZW5dKXstLXR3LXNwYWNlLXgtcmV2ZXJzZTogMDttYXJnaW4tcmlnaHQ6Y2FsYyguNXJlbSAqIHZhcigtLXR3LXNwYWNlLXgtcmV2ZXJzZSkpO21hcmdpbi1sZWZ0OmNhbGMoLjVyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKSl9LnNtXDpzcGFjZS14LTQ+Om5vdChbaGlkZGVuXSl+Om5vdChbaGlkZGVuXSl7LS10dy1zcGFjZS14LXJldmVyc2U6IDA7bWFyZ2luLXJpZ2h0OmNhbGMoMXJlbSAqIHZhcigtLXR3LXNwYWNlLXgtcmV2ZXJzZSkpO21hcmdpbi1sZWZ0OmNhbGMoMXJlbSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXgtcmV2ZXJzZSkpKX0uc21cOnNwYWNlLXktMD46bm90KFtoaWRkZW5dKX46bm90KFtoaWRkZW5dKXstLXR3LXNwYWNlLXktcmV2ZXJzZTogMDttYXJnaW4tdG9wOmNhbGMoMHB4ICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSkpO21hcmdpbi1ib3R0b206Y2FsYygwcHggKiB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKX0uc21cOnJvdW5kZWQtbGd7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMpfS5zbVw6cC0xMntwYWRkaW5nOjNyZW19LnNtXDpwLTd7cGFkZGluZzoxLjc1cmVtfS5zbVw6cHgtMTR7cGFkZGluZy1sZWZ0OjMuNXJlbTtwYWRkaW5nLXJpZ2h0OjMuNXJlbX0uc21cOnB4LTN7cGFkZGluZy1sZWZ0Oi43NXJlbTtwYWRkaW5nLXJpZ2h0Oi43NXJlbX0uc21cOnB5LTE0e3BhZGRpbmctdG9wOjMuNXJlbTtwYWRkaW5nLWJvdHRvbTozLjVyZW19LnNtXDpweS0xNntwYWRkaW5nLXRvcDo0cmVtO3BhZGRpbmctYm90dG9tOjRyZW19LnNtXDpweS0ye3BhZGRpbmctdG9wOi41cmVtO3BhZGRpbmctYm90dG9tOi41cmVtfS5zbVw6cHktMjR7cGFkZGluZy10b3A6NnJlbTtwYWRkaW5nLWJvdHRvbTo2cmVtfS5zbVw6dGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0uc21cOnRleHQtMnhse2ZvbnQtc2l6ZToxLjVyZW07bGluZS1oZWlnaHQ6MnJlbX0uc21cOnRleHQtNHhse2ZvbnQtc2l6ZToyLjI1cmVtO2xpbmUtaGVpZ2h0OjIuNXJlbX0uc21cOnRleHQtNXhse2ZvbnQtc2l6ZTozcmVtO2xpbmUtaGVpZ2h0OjF9LnNtXDp0ZXh0LWJhc2V7Zm9udC1zaXplOjFyZW07bGluZS1oZWlnaHQ6MS41cmVtfS5zbVw6dGV4dC1sZ3tmb250LXNpemU6MS4xMjVyZW07bGluZS1oZWlnaHQ6MS43NXJlbX0uc21cOnRleHQtc217Zm9udC1zaXplOi44NzVyZW07bGluZS1oZWlnaHQ6MS4yNXJlbX0uc21cOnRleHQteGx7Zm9udC1zaXplOjEuMjVyZW07bGluZS1oZWlnaHQ6MS43NXJlbX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnNtXDpzbGlkZS1pbi1mcm9tLWJvdHRvbS1mdWxsW2RhdGEtc3RhdGU9b3Blbl17LS10dy1lbnRlci10cmFuc2xhdGUteTogMTAwJX19QG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KXsubWRcOmFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfS5tZFw6bXgtMHttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfS5tZFw6YmxvY2t7ZGlzcGxheTpibG9ja30ubWRcOmZsZXh7ZGlzcGxheTpmbGV4fS5tZFw6aC00e2hlaWdodDoxcmVtfS5tZFw6aC1cWzJcLjRyZW1cXXtoZWlnaHQ6Mi40cmVtfS5tZFw6aC1cWzJcLjdyZW1cXXtoZWlnaHQ6Mi43cmVtfS5tZFw6dy00e3dpZHRoOjFyZW19Lm1kXDp3LVxbdmFyXCgtLXJhZGl4LW5hdmlnYXRpb24tbWVudS12aWV3cG9ydC13aWR0aFwpXF17d2lkdGg6dmFyKC0tcmFkaXgtbmF2aWdhdGlvbi1tZW51LXZpZXdwb3J0LXdpZHRoKX0ubWRcOnctYXV0b3t3aWR0aDphdXRvfS5tZFw6bWF4LXctXFs0MjBweFxde21heC13aWR0aDo0MjBweH0ubWRcOmdyaWQtY29scy0ye2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMixtaW5tYXgoMCwxZnIpKX0ubWRcOmdyaWQtY29scy0ze2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMyxtaW5tYXgoMCwxZnIpKX0ubWRcOmdyaWQtY29scy1cWzFcLjRmcl8xZnJfMWZyXzFmclxde2dyaWQtdGVtcGxhdGUtY29sdW1uczoxLjRmciAxZnIgMWZyIDFmcn0ubWRcOmp1c3RpZnktc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9Lm1kXDpnYXAtMntnYXA6LjVyZW19Lm1kXDpnYXAtM3tnYXA6Ljc1cmVtfS5tZFw6cm91bmRlZC0yeGx7Ym9yZGVyLXJhZGl1czoxcmVtfS5tZFw6cHgtNntwYWRkaW5nLWxlZnQ6MS41cmVtO3BhZGRpbmctcmlnaHQ6MS41cmVtfS5tZFw6cHktM3twYWRkaW5nLXRvcDouNzVyZW07cGFkZGluZy1ib3R0b206Ljc1cmVtfS5tZFw6dGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0ubWRcOnRleHQtNXhse2ZvbnQtc2l6ZTozcmVtO2xpbmUtaGVpZ2h0OjF9Lm1kXDp0ZXh0LXNte2ZvbnQtc2l6ZTouODc1cmVtO2xpbmUtaGVpZ2h0OjEuMjVyZW19Lm1kXDpvcGFjaXR5LTB7b3BhY2l0eTowfS5hZnRlclw6bWRcOmhpZGRlbjphZnRlcntjb250ZW50OnZhcigtLXR3LWNvbnRlbnQpO2Rpc3BsYXk6bm9uZX0ucGVlcltkYXRhLXZhcmlhbnQ9aW5zZXRdfi5tZFw6cGVlci1kYXRhLVxbdmFyaWFudFw9aW5zZXRcXVw6bS0ye21hcmdpbjouNXJlbX0ucGVlcltkYXRhLXN0YXRlPWNvbGxhcHNlZF1bZGF0YS12YXJpYW50PWluc2V0XX4ubWRcOnBlZXItZGF0YS1cW3N0YXRlXD1jb2xsYXBzZWRcXVw6cGVlci1kYXRhLVxbdmFyaWFudFw9aW5zZXRcXVw6bWwtMnttYXJnaW4tbGVmdDouNXJlbX0ucGVlcltkYXRhLXZhcmlhbnQ9aW5zZXRdfi5tZFw6cGVlci1kYXRhLVxbdmFyaWFudFw9aW5zZXRcXVw6bWwtMHttYXJnaW4tbGVmdDowfS5wZWVyW2RhdGEtdmFyaWFudD1pbnNldF1+Lm1kXDpwZWVyLWRhdGEtXFt2YXJpYW50XD1pbnNldFxdXDpyb3VuZGVkLXhse2JvcmRlci1yYWRpdXM6Ljc1cmVtfS5wZWVyW2RhdGEtdmFyaWFudD1pbnNldF1+Lm1kXDpwZWVyLWRhdGEtXFt2YXJpYW50XD1pbnNldFxdXDpzaGFkb3d7LS10dy1zaGFkb3c6IDAgMXB4IDNweCAwIHJnYigwIDAgMCAvIC4xKSwgMCAxcHggMnB4IC0xcHggcmdiKDAgMCAwIC8gLjEpOy0tdHctc2hhZG93LWNvbG9yZWQ6IDAgMXB4IDNweCAwIHZhcigtLXR3LXNoYWRvdy1jb2xvciksIDAgMXB4IDJweCAtMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3csIDAgMCAjMDAwMCksdmFyKC0tdHctcmluZy1zaGFkb3csIDAgMCAjMDAwMCksdmFyKC0tdHctc2hhZG93KX19QG1lZGlhIChtaW4td2lkdGg6IDEwMjRweCl7LmxnXDpteC0we21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjB9LmxnXDptdC0we21hcmdpbi10b3A6MH0ubGdcOm10LTEwe21hcmdpbi10b3A6Mi41cmVtfS5sZ1w6bXQtN3ttYXJnaW4tdG9wOjEuNzVyZW19LmxnXDptdC04e21hcmdpbi10b3A6MnJlbX0ubGdcOmZsZXh7ZGlzcGxheTpmbGV4fS5sZ1w6aC0xMHtoZWlnaHQ6Mi41cmVtfS5sZ1w6aC00e2hlaWdodDoxcmVtfS5sZ1w6aC01e2hlaWdodDoxLjI1cmVtfS5sZ1w6dy0xMHt3aWR0aDoyLjVyZW19LmxnXDp3LTR7d2lkdGg6MXJlbX0ubGdcOnctNXt3aWR0aDoxLjI1cmVtfS5sZ1w6bWF4LXctbm9uZXttYXgtd2lkdGg6bm9uZX0ubGdcOmdyaWQtY29scy00e2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoNCxtaW5tYXgoMCwxZnIpKX0ubGdcOmdyaWQtY29scy01e2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoNSxtaW5tYXgoMCwxZnIpKX0ubGdcOmdyaWQtY29scy1cWzFcLjFmcl8wXC45ZnJcXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MS4xZnIgLjlmcn0ubGdcOmdyaWQtY29scy1cWzFmcl8xZnJcXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcn0ubGdcOml0ZW1zLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXJ9LmxnXDpqdXN0aWZ5LXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5sZ1w6Z2FwLTE2e2dhcDo0cmVtfS5sZ1w6Z2FwLTJcLjV7Z2FwOi42MjVyZW19LmxnXDpnYXAtM3tnYXA6Ljc1cmVtfS5sZ1w6Z2FwLTR7Z2FwOjFyZW19LmxnXDpnYXAteC02ey1tb3otY29sdW1uLWdhcDoxLjVyZW07Y29sdW1uLWdhcDoxLjVyZW19LmxnXDpyb3VuZGVkLVxbMVwuNXJlbVxde2JvcmRlci1yYWRpdXM6MS41cmVtfS5sZ1w6cC01e3BhZGRpbmc6MS4yNXJlbX0ubGdcOnB4LTE2e3BhZGRpbmctbGVmdDo0cmVtO3BhZGRpbmctcmlnaHQ6NHJlbX0ubGdcOnB4LTV7cGFkZGluZy1sZWZ0OjEuMjVyZW07cGFkZGluZy1yaWdodDoxLjI1cmVtfS5sZ1w6cHgtOHtwYWRkaW5nLWxlZnQ6MnJlbTtwYWRkaW5nLXJpZ2h0OjJyZW19LmxnXDpweS0xNntwYWRkaW5nLXRvcDo0cmVtO3BhZGRpbmctYm90dG9tOjRyZW19LmxnXDpweS0ye3BhZGRpbmctdG9wOi41cmVtO3BhZGRpbmctYm90dG9tOi41cmVtfS5sZ1w6cHktMzJ7cGFkZGluZy10b3A6OHJlbTtwYWRkaW5nLWJvdHRvbTo4cmVtfS5sZ1w6cHktNHtwYWRkaW5nLXRvcDoxcmVtO3BhZGRpbmctYm90dG9tOjFyZW19LmxnXDpwYi0zMntwYWRkaW5nLWJvdHRvbTo4cmVtfS5sZ1w6cHQtMjB7cGFkZGluZy10b3A6NXJlbX0ubGdcOnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LmxnXDp0ZXh0LTJ4bHtmb250LXNpemU6MS41cmVtO2xpbmUtaGVpZ2h0OjJyZW19LmxnXDp0ZXh0LTZ4bHtmb250LXNpemU6My43NXJlbTtsaW5lLWhlaWdodDoxfS5sZ1w6dGV4dC1iYXNle2ZvbnQtc2l6ZToxcmVtO2xpbmUtaGVpZ2h0OjEuNXJlbX0ubGdcOnRleHQtbGd7Zm9udC1zaXplOjEuMTI1cmVtO2xpbmUtaGVpZ2h0OjEuNzVyZW19LmxnXDp0ZXh0LXNte2ZvbnQtc2l6ZTouODc1cmVtO2xpbmUtaGVpZ2h0OjEuMjVyZW19LmxnXDp0ZXh0LXhse2ZvbnQtc2l6ZToxLjI1cmVtO2xpbmUtaGVpZ2h0OjEuNzVyZW19LmxnXDpmb250LXNlbWlib2xke2ZvbnQtd2VpZ2h0OjYwMH0ubGdcOmxlYWRpbmctXFsxXC4xXF17bGluZS1oZWlnaHQ6MS4xfS5sZ1w6dHJhY2tpbmctXFstMFwuMDRlbVxde2xldHRlci1zcGFjaW5nOi0uMDRlbX0ubGdcOnRleHQtcHJpbWFyeXtjb2xvcjpoc2wodmFyKC0tcHJpbWFyeSkpfX1AbWVkaWEgKG1pbi13aWR0aDogMTI4MHB4KXsueGxcOmdyaWQtY29scy0ze2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMyxtaW5tYXgoMCwxZnIpKX19LlxbXCZcOlw6LXdlYmtpdC1zY3JvbGxiYXJcXVw6aGlkZGVuOjotd2Via2l0LXNjcm9sbGJhcntkaXNwbGF5Om5vbmV9LlxbXCZcOmhhc1woXFthcmlhLXNlbGVjdGVkXF1cKVxdXDpiZy1hY2NlbnQ6aGFzKFthcmlhLXNlbGVjdGVkXSl7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYWNjZW50KSl9LmZpcnN0XDpcW1wmXDpoYXNcKFxbYXJpYS1zZWxlY3RlZFxdXClcXVw6cm91bmRlZC1sLW1kOmhhcyhbYXJpYS1zZWxlY3RlZF0pOmZpcnN0LWNoaWxke2JvcmRlci10b3AtbGVmdC1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpIC0gMnB4KTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDJweCl9Lmxhc3RcOlxbXCZcOmhhc1woXFthcmlhLXNlbGVjdGVkXF1cKVxdXDpyb3VuZGVkLXItbWQ6aGFzKFthcmlhLXNlbGVjdGVkXSk6bGFzdC1jaGlsZHtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDJweCl9LlxbXCZcOmhhc1woXFthcmlhLXNlbGVjdGVkXF1cLmRheS1vdXRzaWRlXClcXVw6YmctYWNjZW50XC81MDpoYXMoW2FyaWEtc2VsZWN0ZWRdLmRheS1vdXRzaWRlKXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1hY2NlbnQpIC8gLjUpfS5cW1wmXDpoYXNcKFxbYXJpYS1zZWxlY3RlZFxdXC5kYXktcmFuZ2UtZW5kXClcXVw6cm91bmRlZC1yLW1kOmhhcyhbYXJpYS1zZWxlY3RlZF0uZGF5LXJhbmdlLWVuZCl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpIC0gMnB4KTtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpfS5cW1wmXDpoYXNcKFxbcm9sZVw9Y2hlY2tib3hcXVwpXF1cOnByLTA6aGFzKFtyb2xlPWNoZWNrYm94XSl7cGFkZGluZy1yaWdodDowfS5cW1wmXD5idXR0b25cLmFic29sdXRlXF1cOmhpZGRlbj5idXR0b24uYWJzb2x1dGV7ZGlzcGxheTpub25lfS5cW1wmXD5idXR0b25cXVw6aGlkZGVuPmJ1dHRvbntkaXNwbGF5Om5vbmV9LlxbXCZcPnNwYW5cOmxhc3QtY2hpbGRcXVw6dHJ1bmNhdGU+c3BhbjpsYXN0LWNoaWxke292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0uXFtcJlw+c3BhblxdXDpsaW5lLWNsYW1wLTE+c3BhbntvdmVyZmxvdzpoaWRkZW47ZGlzcGxheTotd2Via2l0LWJveDstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7LXdlYmtpdC1saW5lLWNsYW1wOjF9LlxbXCZcPnN2Z1wrZGl2XF1cOnRyYW5zbGF0ZS15LVxbLTNweFxdPnN2ZytkaXZ7LS10dy10cmFuc2xhdGUteTogLTNweDt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0uXFtcJlw+c3ZnXF1cOmFic29sdXRlPnN2Z3twb3NpdGlvbjphYnNvbHV0ZX0uXFtcJlw+c3ZnXF1cOmxlZnQtND5zdmd7bGVmdDoxcmVtfS5cW1wmXD5zdmdcXVw6dG9wLTQ+c3Zne3RvcDoxcmVtfS5cW1wmXD5zdmdcXVw6c2l6ZS0zXC41PnN2Z3t3aWR0aDouODc1cmVtO2hlaWdodDouODc1cmVtfS5cW1wmXD5zdmdcXVw6c2l6ZS00PnN2Z3t3aWR0aDoxcmVtO2hlaWdodDoxcmVtfS5cW1wmXD5zdmdcXVw6aC0yXC41PnN2Z3toZWlnaHQ6LjYyNXJlbX0uXFtcJlw+c3ZnXF1cOmgtMz5zdmd7aGVpZ2h0Oi43NXJlbX0uXFtcJlw+c3ZnXF1cOnctMlwuNT5zdmd7d2lkdGg6LjYyNXJlbX0uXFtcJlw+c3ZnXF1cOnctMz5zdmd7d2lkdGg6Ljc1cmVtfS5cW1wmXD5zdmdcXVw6c2hyaW5rLTA+c3Zne2ZsZXgtc2hyaW5rOjB9LlxbXCZcPnN2Z1xdXDp0ZXh0LWRlc3RydWN0aXZlPnN2Z3tjb2xvcjpoc2wodmFyKC0tZGVzdHJ1Y3RpdmUpKX0uXFtcJlw+c3ZnXF1cOnRleHQtZm9yZWdyb3VuZD5zdmd7Y29sb3I6aHNsKHZhcigtLWZvcmVncm91bmQpKX0uXFtcJlw+c3ZnXF1cOnRleHQtbXV0ZWQtZm9yZWdyb3VuZD5zdmd7Y29sb3I6aHNsKHZhcigtLW11dGVkLWZvcmVncm91bmQpKX0uXFtcJlw+c3ZnXH5cKlxdXDpwbC03PnN2Z34qe3BhZGRpbmctbGVmdDoxLjc1cmVtfS5cW1wmXD50clxdXDpsYXN0XDpib3JkZXItYi0wOmxhc3QtY2hpbGQ+dHJ7Ym9yZGVyLWJvdHRvbS13aWR0aDowcHh9LlxbXCZcW2RhdGEtcGFuZWwtZ3JvdXAtZGlyZWN0aW9uXD12ZXJ0aWNhbFxdXD5kaXZcXVw6cm90YXRlLTkwW2RhdGEtcGFuZWwtZ3JvdXAtZGlyZWN0aW9uPXZlcnRpY2FsXT5kaXZ7LS10dy1yb3RhdGU6IDkwZGVnO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5cW1wmXFtkYXRhLXN0YXRlXD1vcGVuXF1cPnN2Z1xdXDpyb3RhdGUtMTgwW2RhdGEtc3RhdGU9b3Blbl0+c3Zney0tdHctcm90YXRlOiAxODBkZWc7dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LlxbXCZfXC5yZWNoYXJ0cy1jYXJ0ZXNpYW4tYXhpcy10aWNrX3RleHRcXVw6ZmlsbC1tdXRlZC1mb3JlZ3JvdW5kIC5yZWNoYXJ0cy1jYXJ0ZXNpYW4tYXhpcy10aWNrIHRleHR7ZmlsbDpoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkpfS5cW1wmX1wucmVjaGFydHMtY2FydGVzaWFuLWdyaWRfbGluZVxbc3Ryb2tlXD1cJ1wjY2NjXCdcXVxdXDpzdHJva2UtYm9yZGVyXC81MCAucmVjaGFydHMtY2FydGVzaWFuLWdyaWQgbGluZVtzdHJva2U9IiNjY2MiXXtzdHJva2U6aHNsKHZhcigtLWJvcmRlcikgLyAuNSl9LlxbXCZfXC5yZWNoYXJ0cy1jdXJ2ZVwucmVjaGFydHMtdG9vbHRpcC1jdXJzb3JcXVw6c3Ryb2tlLWJvcmRlciAucmVjaGFydHMtY3VydmUucmVjaGFydHMtdG9vbHRpcC1jdXJzb3J7c3Ryb2tlOmhzbCh2YXIoLS1ib3JkZXIpKX0uXFtcJl9cLnJlY2hhcnRzLWRvdFxbc3Ryb2tlXD1cJ1wjZmZmXCdcXVxdXDpzdHJva2UtdHJhbnNwYXJlbnQgLnJlY2hhcnRzLWRvdFtzdHJva2U9IiNmZmYiXXtzdHJva2U6dHJhbnNwYXJlbnR9LlxbXCZfXC5yZWNoYXJ0cy1sYXllclxdXDpvdXRsaW5lLW5vbmUgLnJlY2hhcnRzLWxheWVye291dGxpbmU6MnB4IHNvbGlkIHRyYW5zcGFyZW50O291dGxpbmUtb2Zmc2V0OjJweH0uXFtcJl9cLnJlY2hhcnRzLXBvbGFyLWdyaWRfXFtzdHJva2VcPVwnXCNjY2NcJ1xdXF1cOnN0cm9rZS1ib3JkZXIgLnJlY2hhcnRzLXBvbGFyLWdyaWQgW3N0cm9rZT0iI2NjYyJde3N0cm9rZTpoc2wodmFyKC0tYm9yZGVyKSl9LlxbXCZfXC5yZWNoYXJ0cy1yYWRpYWwtYmFyLWJhY2tncm91bmQtc2VjdG9yXF1cOmZpbGwtbXV0ZWQgLnJlY2hhcnRzLXJhZGlhbC1iYXItYmFja2dyb3VuZC1zZWN0b3IsLlxbXCZfXC5yZWNoYXJ0cy1yZWN0YW5nbGVcLnJlY2hhcnRzLXRvb2x0aXAtY3Vyc29yXF1cOmZpbGwtbXV0ZWQgLnJlY2hhcnRzLXJlY3RhbmdsZS5yZWNoYXJ0cy10b29sdGlwLWN1cnNvcntmaWxsOmhzbCh2YXIoLS1tdXRlZCkpfS5cW1wmX1wucmVjaGFydHMtcmVmZXJlbmNlLWxpbmVfXFtzdHJva2VcPVwnXCNjY2NcJ1xdXF1cOnN0cm9rZS1ib3JkZXIgLnJlY2hhcnRzLXJlZmVyZW5jZS1saW5lIFtzdHJva2U9IiNjY2MiXXtzdHJva2U6aHNsKHZhcigtLWJvcmRlcikpfS5cW1wmX1wucmVjaGFydHMtc2VjdG9yXFtzdHJva2VcPVwnXCNmZmZcJ1xdXF1cOnN0cm9rZS10cmFuc3BhcmVudCAucmVjaGFydHMtc2VjdG9yW3N0cm9rZT0iI2ZmZiJde3N0cm9rZTp0cmFuc3BhcmVudH0uXFtcJl9cLnJlY2hhcnRzLXNlY3RvclxdXDpvdXRsaW5lLW5vbmUgLnJlY2hhcnRzLXNlY3RvciwuXFtcJl9cLnJlY2hhcnRzLXN1cmZhY2VcXVw6b3V0bGluZS1ub25lIC5yZWNoYXJ0cy1zdXJmYWNle291dGxpbmU6MnB4IHNvbGlkIHRyYW5zcGFyZW50O291dGxpbmUtb2Zmc2V0OjJweH0uXFtcJl9cW2NtZGstZ3JvdXAtaGVhZGluZ1xdXF1cOnB4LTIgW2NtZGstZ3JvdXAtaGVhZGluZ117cGFkZGluZy1sZWZ0Oi41cmVtO3BhZGRpbmctcmlnaHQ6LjVyZW19LlxbXCZfXFtjbWRrLWdyb3VwLWhlYWRpbmdcXVxdXDpweS0xXC41IFtjbWRrLWdyb3VwLWhlYWRpbmdde3BhZGRpbmctdG9wOi4zNzVyZW07cGFkZGluZy1ib3R0b206LjM3NXJlbX0uXFtcJl9cW2NtZGstZ3JvdXAtaGVhZGluZ1xdXF1cOnRleHQteHMgW2NtZGstZ3JvdXAtaGVhZGluZ117Zm9udC1zaXplOi43NXJlbTtsaW5lLWhlaWdodDoxcmVtfS5cW1wmX1xbY21kay1ncm91cC1oZWFkaW5nXF1cXVw6Zm9udC1tZWRpdW0gW2NtZGstZ3JvdXAtaGVhZGluZ117Zm9udC13ZWlnaHQ6NTAwfS5cW1wmX1xbY21kay1ncm91cC1oZWFkaW5nXF1cXVw6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIFtjbWRrLWdyb3VwLWhlYWRpbmdde2NvbG9yOmhzbCh2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKSl9LlxbXCZfXFtjbWRrLWdyb3VwXF1cOm5vdFwoXFtoaWRkZW5cXVwpX1x+XFtjbWRrLWdyb3VwXF1cXVw6cHQtMCBbY21kay1ncm91cF06bm90KFtoaWRkZW5dKX5bY21kay1ncm91cF17cGFkZGluZy10b3A6MH0uXFtcJl9cW2NtZGstZ3JvdXBcXVxdXDpweC0yIFtjbWRrLWdyb3VwXXtwYWRkaW5nLWxlZnQ6LjVyZW07cGFkZGluZy1yaWdodDouNXJlbX0uXFtcJl9cW2NtZGstaW5wdXQtd3JhcHBlclxdX3N2Z1xdXDpoLTUgW2NtZGstaW5wdXQtd3JhcHBlcl0gc3Zne2hlaWdodDoxLjI1cmVtfS5cW1wmX1xbY21kay1pbnB1dC13cmFwcGVyXF1fc3ZnXF1cOnctNSBbY21kay1pbnB1dC13cmFwcGVyXSBzdmd7d2lkdGg6MS4yNXJlbX0uXFtcJl9cW2NtZGstaW5wdXRcXVxdXDpoLTEyIFtjbWRrLWlucHV0XXtoZWlnaHQ6M3JlbX0uXFtcJl9cW2NtZGstaXRlbVxdXF1cOnB4LTIgW2NtZGstaXRlbV17cGFkZGluZy1sZWZ0Oi41cmVtO3BhZGRpbmctcmlnaHQ6LjVyZW19LlxbXCZfXFtjbWRrLWl0ZW1cXVxdXDpweS0zIFtjbWRrLWl0ZW1de3BhZGRpbmctdG9wOi43NXJlbTtwYWRkaW5nLWJvdHRvbTouNzVyZW19LlxbXCZfXFtjbWRrLWl0ZW1cXV9zdmdcXVw6aC01IFtjbWRrLWl0ZW1dIHN2Z3toZWlnaHQ6MS4yNXJlbX0uXFtcJl9cW2NtZGstaXRlbVxdX3N2Z1xdXDp3LTUgW2NtZGstaXRlbV0gc3Zne3dpZHRoOjEuMjVyZW19LlxbXCZfaDJcXVw6bXQtMTAgaDJ7bWFyZ2luLXRvcDoyLjVyZW19LlxbXCZfaDJcXVw6dGV4dC0yeGwgaDJ7Zm9udC1zaXplOjEuNXJlbTtsaW5lLWhlaWdodDoycmVtfS5cW1wmX2gyXF1cOmZvbnQtYm9sZCBoMntmb250LXdlaWdodDo3MDB9LlxbXCZfaDJcXVw6dHJhY2tpbmctdGlnaHQgaDJ7bGV0dGVyLXNwYWNpbmc6LS4wMjVlbX0uXFtcJl9oMlxdXDp0ZXh0LWZvcmVncm91bmQgaDJ7Y29sb3I6aHNsKHZhcigtLWZvcmVncm91bmQpKX0uXFtcJl9oM1xdXDptdC02IGgze21hcmdpbi10b3A6MS41cmVtfS5cW1wmX2gzXF1cOnRleHQtbGcgaDN7Zm9udC1zaXplOjEuMTI1cmVtO2xpbmUtaGVpZ2h0OjEuNzVyZW19LlxbXCZfaDNcXVw6Zm9udC1zZW1pYm9sZCBoM3tmb250LXdlaWdodDo2MDB9LlxbXCZfaDNcXVw6dGV4dC1mb3JlZ3JvdW5kIGgze2NvbG9yOmhzbCh2YXIoLS1mb3JlZ3JvdW5kKSl9LlxbXCZfbGlcXVw6bWwtNiBsaXttYXJnaW4tbGVmdDoxLjVyZW19LlxbXCZfbGlcXVw6bGlzdC1kaXNjIGxpe2xpc3Qtc3R5bGUtdHlwZTpkaXNjfS5cW1wmX3BcXVw6bXQtNCBwe21hcmdpbi10b3A6MXJlbX0uXFtcJl9wXF1cOmxlYWRpbmctcmVsYXhlZCBwe2xpbmUtaGVpZ2h0OjEuNjI1fS5cW1wmX3N2Z1xdXDpwb2ludGVyLWV2ZW50cy1ub25lIHN2Z3twb2ludGVyLWV2ZW50czpub25lfS5cW1wmX3N2Z1xdXDpzaXplLTQgc3Zne3dpZHRoOjFyZW07aGVpZ2h0OjFyZW19LlxbXCZfc3ZnXF1cOnNocmluay0wIHN2Z3tmbGV4LXNocmluazowfS5cW1wmX3RyXDpsYXN0LWNoaWxkXF1cOmJvcmRlci0wIHRyOmxhc3QtY2hpbGR7Ym9yZGVyLXdpZHRoOjBweH0uXFtcJl90clxdXDpib3JkZXItYiB0cntib3JkZXItYm90dG9tLXdpZHRoOjFweH0uXFtcJl91bFxdXDptdC00IHVse21hcmdpbi10b3A6MXJlbX0uXFtcJl91bFxdXDpzcGFjZS15LTIgdWw+Om5vdChbaGlkZGVuXSl+Om5vdChbaGlkZGVuXSl7LS10dy1zcGFjZS15LXJldmVyc2U6IDA7bWFyZ2luLXRvcDpjYWxjKC41cmVtICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSkpO21hcmdpbi1ib3R0b206Y2FsYyguNXJlbSAqIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpfVtkYXRhLXNpZGU9bGVmdF1bZGF0YS1jb2xsYXBzaWJsZT1vZmZjYW52YXNdIC5cW1xbZGF0YS1zaWRlXD1sZWZ0XF1cW2RhdGEtY29sbGFwc2libGVcPW9mZmNhbnZhc1xdX1wmXF1cOi1yaWdodC0ye3JpZ2h0Oi0uNXJlbX1bZGF0YS1zaWRlPWxlZnRdW2RhdGEtc3RhdGU9Y29sbGFwc2VkXSAuXFtcW2RhdGEtc2lkZVw9bGVmdFxdXFtkYXRhLXN0YXRlXD1jb2xsYXBzZWRcXV9cJlxdXDpjdXJzb3ItZS1yZXNpemV7Y3Vyc29yOmUtcmVzaXplfVtkYXRhLXNpZGU9bGVmdF0gLlxbXFtkYXRhLXNpZGVcPWxlZnRcXV9cJlxdXDpjdXJzb3Itdy1yZXNpemV7Y3Vyc29yOnctcmVzaXplfVtkYXRhLXNpZGU9cmlnaHRdW2RhdGEtY29sbGFwc2libGU9b2ZmY2FudmFzXSAuXFtcW2RhdGEtc2lkZVw9cmlnaHRcXVxbZGF0YS1jb2xsYXBzaWJsZVw9b2ZmY2FudmFzXF1fXCZcXVw6LWxlZnQtMntsZWZ0Oi0uNXJlbX1bZGF0YS1zaWRlPXJpZ2h0XVtkYXRhLXN0YXRlPWNvbGxhcHNlZF0gLlxbXFtkYXRhLXNpZGVcPXJpZ2h0XF1cW2RhdGEtc3RhdGVcPWNvbGxhcHNlZFxdX1wmXF1cOmN1cnNvci13LXJlc2l6ZXtjdXJzb3I6dy1yZXNpemV9W2RhdGEtc2lkZT1yaWdodF0gLlxbXFtkYXRhLXNpZGVcPXJpZ2h0XF1fXCZcXVw6Y3Vyc29yLWUtcmVzaXple2N1cnNvcjplLXJlc2l6ZX0K"}},"time_used":16,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":12,"receive":4,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"1nch-svap.com/assets/index-BFPQ7A-A.js","fqdn":"1nch-svap.com","domain":"1nch-svap.com","tld":"com"},"ip":{"addr":"104.21.75.136","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://1nch-svap.com/","date":"2026-07-27T09:36:06.286Z","timestamp":1785144966286,"http_version":"HTTP/3","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"1nch-svap.com","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Sat, 25 Jul 2026 23:12:54 GMT","end":"Sat, 24 Oct 2026 00:11:42 GMT"},"fingerprint":{"sha1":"AC:8D:24:B7:93:96:7F:75:AF:8B:42:06:6A:52:88:B7:26:2A:AB:CA","sha256":"86:DE:73:A5:AD:EB:38:13:F1:14:61:D6:2F:48:3B:8B:38:4F:60:E5:95:4D:89:FE:BD:DB:2B:C3:94:10:DC:D3"}}},"request":{"raw":"GET /assets/index-BFPQ7A-A.js HTTP/1.1\r\nHost: 1nch-svap.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://1nch-svap.com/\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=1\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/3 200 \r\nserver: cloudflare\r\ndate: Mon, 27 Jul 2026 09:36:06 GMT\r\ncontent-type: application/javascript\r\nlast-modified: Sun, 26 Jul 2026 12:28:54 GMT\r\nnel: {\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}\r\npriority: u=1,i=?0\r\nvary: Accept-Encoding\r\netag: W/\"6a65fd86-219df\"\r\nexpires: Wed, 26 Aug 2026 07:59:12 GMT\r\ncache-control: public, max-age=2592000, immutable\r\ncontent-encoding: gzip\r\nage: 5814\r\ncf-cache-status: HIT\r\nreport-to: {\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=hmVUdlMu2WR1Qlcp8gbwKm360LnDCYDmIw%2F7GyCD%2BbJV9sIlhD3EmjHVJdrLbJC%2FnC%2BO9BeaQ2pcsLXZEn6litLegKnwT6IcKCZk6otPpn%2FBXXjbRFoS0Xdttprf8B8m\"}]}\r\ncf-ray: a21aa86748445699-OSL\r\nalt-svc: h3=\":443\"; ma=86400\r\nserver-timing: cfExtPri\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}],"data":{"size":137695,"size_decoded":44317,"mime_type":"application/javascript","magic":"JavaScript source, ASCII text, with very long lines (13199)","md5":"835a6d59868acb597ed5cc9cefa38435","sha1":"ed630f0b14986f403d5e5d26358ca4045cb7170c","sha256":"f9ca756461878858864bb0ae53a09246f8d06877dec3402d51d8a2223513d644","sha512":"c8988ec64b809cf916595df67308a011bd354435608026dc2c634c2eff94220bfc26bdda41a8a0fcdbbf661e6cb6205ef499e1a1379451293f548f44f704eefb","ssdeep":"3072:mTMycmMgkXJATljTjyrwaIFm99q2Yjjbgiwcvp598k:mTymtTjyrwhFW9xCp5Ck","tlshash":"5fd34cd473b0f17e625342ae813b0595f2386804b929c068f2ec96eb54d3e96c5b7b7c","first_seen":"2026-07-27T07:59:48.813203Z","last_seen":"2026-07-27T09:36:42.934478Z","times_seen":2,"resource_available":true,"data":"aW1wb3J0e00gYXMgcmUsVCBhcyB4dCxSIGFzIE4sQyBhcyB4LGEgYXMgaHQsTyBhcyBaLGIgYXMgWCxjIGFzIGosZCBhcyBXb31mcm9tIi4vd2FsbGV0Y29ubmVjdC1DRWtnb1I5aS5qcyI7aW1wb3J0Ii4vcmVhY3QtQkhMOU11SFouanMiOy8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDCiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICovY29uc3Qgb2U9d2luZG93LHVyPW9lLlNoYWRvd1Jvb3QmJihvZS5TaGFkeUNTUz09PXZvaWQgMHx8b2UuU2hhZHlDU1MubmF0aXZlU2hhZG93KSYmImFkb3B0ZWRTdHlsZVNoZWV0cyJpbiBEb2N1bWVudC5wcm90b3R5cGUmJiJyZXBsYWNlImluIENTU1N0eWxlU2hlZXQucHJvdG90eXBlLG1yPVN5bWJvbCgpLEVyPW5ldyBXZWFrTWFwO2xldCBRcj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7aWYodGhpcy5fJGNzc1Jlc3VsdCQ9ITAsbiE9PW1yKXRocm93IEVycm9yKCJDU1NSZXN1bHQgaXMgbm90IGNvbnN0cnVjdGFibGUuIFVzZSBgdW5zYWZlQ1NTYCBvciBgY3NzYCBpbnN0ZWFkLiIpO3RoaXMuY3NzVGV4dD10LHRoaXMudD1yfWdldCBzdHlsZVNoZWV0KCl7bGV0IHQ9dGhpcy5vO2NvbnN0IHI9dGhpcy50O2lmKHVyJiZ0PT09dm9pZCAwKXtjb25zdCBuPXIhPT12b2lkIDAmJnIubGVuZ3RoPT09MTtuJiYodD1Fci5nZXQocikpLHQ9PT12b2lkIDAmJigodGhpcy5vPXQ9bmV3IENTU1N0eWxlU2hlZXQpLnJlcGxhY2VTeW5jKHRoaXMuY3NzVGV4dCksbiYmRXIuc2V0KHIsdCkpfXJldHVybiB0fXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuY3NzVGV4dH19O2NvbnN0IGtvPWU9Pm5ldyBRcih0eXBlb2YgZT09InN0cmluZyI/ZTplKyIiLHZvaWQgMCxtciksUD0oZSwuLi50KT0+e2NvbnN0IHI9ZS5sZW5ndGg9PT0xP2VbMF06dC5yZWR1Y2UoKG4sbyxpKT0+bisocz0+e2lmKHMuXyRjc3NSZXN1bHQkPT09ITApcmV0dXJuIHMuY3NzVGV4dDtpZih0eXBlb2Ygcz09Im51bWJlciIpcmV0dXJuIHM7dGhyb3cgRXJyb3IoIlZhbHVlIHBhc3NlZCB0byAnY3NzJyBmdW5jdGlvbiBtdXN0IGJlIGEgJ2NzcycgZnVuY3Rpb24gcmVzdWx0OiAiK3MrIi4gVXNlICd1bnNhZmVDU1MnIHRvIHBhc3Mgbm9uLWxpdGVyYWwgdmFsdWVzLCBidXQgdGFrZSBjYXJlIHRvIGVuc3VyZSBwYWdlIHNlY3VyaXR5LiIpfSkobykrZVtpKzFdLGVbMF0pO3JldHVybiBuZXcgUXIocixlLG1yKX0sVW89KGUsdCk9Pnt1cj9lLmFkb3B0ZWRTdHlsZVNoZWV0cz10Lm1hcChyPT5yIGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldD9yOnIuc3R5bGVTaGVldCk6dC5mb3JFYWNoKHI9Pntjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIiksbz1vZS5saXROb25jZTtvIT09dm9pZCAwJiZuLnNldEF0dHJpYnV0ZSgibm9uY2UiLG8pLG4udGV4dENvbnRlbnQ9ci5jc3NUZXh0LGUuYXBwZW5kQ2hpbGQobil9KX0sQXI9dXI/ZT0+ZTplPT5lIGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldD8odD0+e2xldCByPSIiO2Zvcihjb25zdCBuIG9mIHQuY3NzUnVsZXMpcis9bi5jc3NUZXh0O3JldHVybiBrbyhyKX0pKGUpOmU7LyoqCiAqIEBsaWNlbnNlCiAqIENvcHlyaWdodCAyMDE3IEdvb2dsZSBMTEMKICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogKi92YXIgX2U7Y29uc3QgbmU9d2luZG93LE9yPW5lLnRydXN0ZWRUeXBlcyxqbz1Pcj9Pci5lbXB0eVNjcmlwdDoiIixJcj1uZS5yZWFjdGl2ZUVsZW1lbnRQb2x5ZmlsbFN1cHBvcnQsamU9e3RvQXR0cmlidXRlKGUsdCl7c3dpdGNoKHQpe2Nhc2UgQm9vbGVhbjplPWU/am86bnVsbDticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OmU9ZT09bnVsbD9lOkpTT04uc3RyaW5naWZ5KGUpfXJldHVybiBlfSxmcm9tQXR0cmlidXRlKGUsdCl7bGV0IHI9ZTtzd2l0Y2godCl7Y2FzZSBCb29sZWFuOnI9ZSE9PW51bGw7YnJlYWs7Y2FzZSBOdW1iZXI6cj1lPT09bnVsbD9udWxsOk51bWJlcihlKTticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OnRyeXtyPUpTT04ucGFyc2UoZSl9Y2F0Y2h7cj1udWxsfX1yZXR1cm4gcn19LEdyPShlLHQpPT50IT09ZSYmKHQ9PXR8fGU9PWUpLENlPXthdHRyaWJ1dGU6ITAsdHlwZTpTdHJpbmcsY29udmVydGVyOmplLHJlZmxlY3Q6ITEsaGFzQ2hhbmdlZDpHcn0sSGU9ImZpbmFsaXplZCI7bGV0IHd0PWNsYXNzIGV4dGVuZHMgSFRNTEVsZW1lbnR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuXyRFaT1uZXcgTWFwLHRoaXMuaXNVcGRhdGVQZW5kaW5nPSExLHRoaXMuaGFzVXBkYXRlZD0hMSx0aGlzLl8kRWw9bnVsbCx0aGlzLl8kRXUoKX1zdGF0aWMgYWRkSW5pdGlhbGl6ZXIodCl7dmFyIHI7dGhpcy5maW5hbGl6ZSgpLCgocj10aGlzLmgpIT09bnVsbCYmciE9PXZvaWQgMD9yOnRoaXMuaD1bXSkucHVzaCh0KX1zdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3RoaXMuZmluYWxpemUoKTtjb25zdCB0PVtdO3JldHVybiB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLmZvckVhY2goKHIsbik9Pntjb25zdCBvPXRoaXMuXyRFcChuLHIpO28hPT12b2lkIDAmJih0aGlzLl8kRXYuc2V0KG8sbiksdC5wdXNoKG8pKX0pLHR9c3RhdGljIGNyZWF0ZVByb3BlcnR5KHQscj1DZSl7aWYoci5zdGF0ZSYmKHIuYXR0cmlidXRlPSExKSx0aGlzLmZpbmFsaXplKCksdGhpcy5lbGVtZW50UHJvcGVydGllcy5zZXQodCxyKSwhci5ub0FjY2Vzc29yJiYhdGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkodCkpe2NvbnN0IG49dHlwZW9mIHQ9PSJzeW1ib2wiP1N5bWJvbCgpOiJfXyIrdCxvPXRoaXMuZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHQsbixyKTtvIT09dm9pZCAwJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5wcm90b3R5cGUsdCxvKX19c3RhdGljIGdldFByb3BlcnR5RGVzY3JpcHRvcih0LHIsbil7cmV0dXJue2dldCgpe3JldHVybiB0aGlzW3JdfSxzZXQobyl7Y29uc3QgaT10aGlzW3RdO3RoaXNbcl09byx0aGlzLnJlcXVlc3RVcGRhdGUodCxpLG4pfSxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH19c3RhdGljIGdldFByb3BlcnR5T3B0aW9ucyh0KXtyZXR1cm4gdGhpcy5lbGVtZW50UHJvcGVydGllcy5nZXQodCl8fENlfXN0YXRpYyBmaW5hbGl6ZSgpe2lmKHRoaXMuaGFzT3duUHJvcGVydHkoSGUpKXJldHVybiExO3RoaXNbSGVdPSEwO2NvbnN0IHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpO2lmKHQuZmluYWxpemUoKSx0LmghPT12b2lkIDAmJih0aGlzLmg9Wy4uLnQuaF0pLHRoaXMuZWxlbWVudFByb3BlcnRpZXM9bmV3IE1hcCh0LmVsZW1lbnRQcm9wZXJ0aWVzKSx0aGlzLl8kRXY9bmV3IE1hcCx0aGlzLmhhc093blByb3BlcnR5KCJwcm9wZXJ0aWVzIikpe2NvbnN0IHI9dGhpcy5wcm9wZXJ0aWVzLG49Wy4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpLC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocildO2Zvcihjb25zdCBvIG9mIG4pdGhpcy5jcmVhdGVQcm9wZXJ0eShvLHJbb10pfXJldHVybiB0aGlzLmVsZW1lbnRTdHlsZXM9dGhpcy5maW5hbGl6ZVN0eWxlcyh0aGlzLnN0eWxlcyksITB9c3RhdGljIGZpbmFsaXplU3R5bGVzKHQpe2NvbnN0IHI9W107aWYoQXJyYXkuaXNBcnJheSh0KSl7Y29uc3Qgbj1uZXcgU2V0KHQuZmxhdCgxLzApLnJldmVyc2UoKSk7Zm9yKGNvbnN0IG8gb2YgbilyLnVuc2hpZnQoQXIobykpfWVsc2UgdCE9PXZvaWQgMCYmci5wdXNoKEFyKHQpKTtyZXR1cm4gcn1zdGF0aWMgXyRFcCh0LHIpe2NvbnN0IG49ci5hdHRyaWJ1dGU7cmV0dXJuIG49PT0hMT92b2lkIDA6dHlwZW9mIG49PSJzdHJpbmciP246dHlwZW9mIHQ9PSJzdHJpbmciP3QudG9Mb3dlckNhc2UoKTp2b2lkIDB9XyRFdSgpe3ZhciB0O3RoaXMuXyRFXz1uZXcgUHJvbWlzZShyPT50aGlzLmVuYWJsZVVwZGF0aW5nPXIpLHRoaXMuXyRBTD1uZXcgTWFwLHRoaXMuXyRFZygpLHRoaXMucmVxdWVzdFVwZGF0ZSgpLCh0PXRoaXMuY29uc3RydWN0b3IuaCk9PT1udWxsfHx0PT09dm9pZCAwfHx0LmZvckVhY2gocj0+cih0aGlzKSl9YWRkQ29udHJvbGxlcih0KXt2YXIgcixuOygocj10aGlzLl8kRVMpIT09bnVsbCYmciE9PXZvaWQgMD9yOnRoaXMuXyRFUz1bXSkucHVzaCh0KSx0aGlzLnJlbmRlclJvb3QhPT12b2lkIDAmJnRoaXMuaXNDb25uZWN0ZWQmJigobj10Lmhvc3RDb25uZWN0ZWQpPT09bnVsbHx8bj09PXZvaWQgMHx8bi5jYWxsKHQpKX1yZW1vdmVDb250cm9sbGVyKHQpe3ZhciByOyhyPXRoaXMuXyRFUyk9PT1udWxsfHxyPT09dm9pZCAwfHxyLnNwbGljZSh0aGlzLl8kRVMuaW5kZXhPZih0KT4+PjAsMSl9XyRFZygpe3RoaXMuY29uc3RydWN0b3IuZWxlbWVudFByb3BlcnRpZXMuZm9yRWFjaCgodCxyKT0+e3RoaXMuaGFzT3duUHJvcGVydHkocikmJih0aGlzLl8kRWkuc2V0KHIsdGhpc1tyXSksZGVsZXRlIHRoaXNbcl0pfSl9Y3JlYXRlUmVuZGVyUm9vdCgpe3ZhciB0O2NvbnN0IHI9KHQ9dGhpcy5zaGFkb3dSb290KSE9PW51bGwmJnQhPT12b2lkIDA/dDp0aGlzLmF0dGFjaFNoYWRvdyh0aGlzLmNvbnN0cnVjdG9yLnNoYWRvd1Jvb3RPcHRpb25zKTtyZXR1cm4gVW8ocix0aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRTdHlsZXMpLHJ9Y29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgdDt0aGlzLnJlbmRlclJvb3Q9PT12b2lkIDAmJih0aGlzLnJlbmRlclJvb3Q9dGhpcy5jcmVhdGVSZW5kZXJSb290KCkpLHRoaXMuZW5hYmxlVXBkYXRpbmcoITApLCh0PXRoaXMuXyRFUyk9PT1udWxsfHx0PT09dm9pZCAwfHx0LmZvckVhY2gocj0+e3ZhciBuO3JldHVybihuPXIuaG9zdENvbm5lY3RlZCk9PT1udWxsfHxuPT09dm9pZCAwP3ZvaWQgMDpuLmNhbGwocil9KX1lbmFibGVVcGRhdGluZyh0KXt9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgdDsodD10aGlzLl8kRVMpPT09bnVsbHx8dD09PXZvaWQgMHx8dC5mb3JFYWNoKHI9Pnt2YXIgbjtyZXR1cm4obj1yLmhvc3REaXNjb25uZWN0ZWQpPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5jYWxsKHIpfSl9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQscixuKXt0aGlzLl8kQUsodCxuKX1fJEVPKHQscixuPUNlKXt2YXIgbztjb25zdCBpPXRoaXMuY29uc3RydWN0b3IuXyRFcCh0LG4pO2lmKGkhPT12b2lkIDAmJm4ucmVmbGVjdD09PSEwKXtjb25zdCBzPSgoKG89bi5jb252ZXJ0ZXIpPT09bnVsbHx8bz09PXZvaWQgMD92b2lkIDA6by50b0F0dHJpYnV0ZSkhPT12b2lkIDA/bi5jb252ZXJ0ZXI6amUpLnRvQXR0cmlidXRlKHIsbi50eXBlKTt0aGlzLl8kRWw9dCxzPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGkpOnRoaXMuc2V0QXR0cmlidXRlKGkscyksdGhpcy5fJEVsPW51bGx9fV8kQUsodCxyKXt2YXIgbjtjb25zdCBvPXRoaXMuY29uc3RydWN0b3IsaT1vLl8kRXYuZ2V0KHQpO2lmKGkhPT12b2lkIDAmJnRoaXMuXyRFbCE9PWkpe2NvbnN0IHM9by5nZXRQcm9wZXJ0eU9wdGlvbnMoaSksbD10eXBlb2Ygcy5jb252ZXJ0ZXI9PSJmdW5jdGlvbiI/e2Zyb21BdHRyaWJ1dGU6cy5jb252ZXJ0ZXJ9Oigobj1zLmNvbnZlcnRlcik9PT1udWxsfHxuPT09dm9pZCAwP3ZvaWQgMDpuLmZyb21BdHRyaWJ1dGUpIT09dm9pZCAwP3MuY29udmVydGVyOmplO3RoaXMuXyRFbD1pLHRoaXNbaV09bC5mcm9tQXR0cmlidXRlKHIscy50eXBlKSx0aGlzLl8kRWw9bnVsbH19cmVxdWVzdFVwZGF0ZSh0LHIsbil7bGV0IG89ITA7dCE9PXZvaWQgMCYmKCgobj1ufHx0aGlzLmNvbnN0cnVjdG9yLmdldFByb3BlcnR5T3B0aW9ucyh0KSkuaGFzQ2hhbmdlZHx8R3IpKHRoaXNbdF0scik/KHRoaXMuXyRBTC5oYXModCl8fHRoaXMuXyRBTC5zZXQodCxyKSxuLnJlZmxlY3Q9PT0hMCYmdGhpcy5fJEVsIT09dCYmKHRoaXMuXyRFQz09PXZvaWQgMCYmKHRoaXMuXyRFQz1uZXcgTWFwKSx0aGlzLl8kRUMuc2V0KHQsbikpKTpvPSExKSwhdGhpcy5pc1VwZGF0ZVBlbmRpbmcmJm8mJih0aGlzLl8kRV89dGhpcy5fJEVqKCkpfWFzeW5jIF8kRWooKXt0aGlzLmlzVXBkYXRlUGVuZGluZz0hMDt0cnl7YXdhaXQgdGhpcy5fJEVffWNhdGNoKHIpe1Byb21pc2UucmVqZWN0KHIpfWNvbnN0IHQ9dGhpcy5zY2hlZHVsZVVwZGF0ZSgpO3JldHVybiB0IT1udWxsJiZhd2FpdCB0LCF0aGlzLmlzVXBkYXRlUGVuZGluZ31zY2hlZHVsZVVwZGF0ZSgpe3JldHVybiB0aGlzLnBlcmZvcm1VcGRhdGUoKX1wZXJmb3JtVXBkYXRlKCl7dmFyIHQ7aWYoIXRoaXMuaXNVcGRhdGVQZW5kaW5nKXJldHVybjt0aGlzLmhhc1VwZGF0ZWQsdGhpcy5fJEVpJiYodGhpcy5fJEVpLmZvckVhY2goKG8saSk9PnRoaXNbaV09byksdGhpcy5fJEVpPXZvaWQgMCk7bGV0IHI9ITE7Y29uc3Qgbj10aGlzLl8kQUw7dHJ5e3I9dGhpcy5zaG91bGRVcGRhdGUobikscj8odGhpcy53aWxsVXBkYXRlKG4pLCh0PXRoaXMuXyRFUyk9PT1udWxsfHx0PT09dm9pZCAwfHx0LmZvckVhY2gobz0+e3ZhciBpO3JldHVybihpPW8uaG9zdFVwZGF0ZSk9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLmNhbGwobyl9KSx0aGlzLnVwZGF0ZShuKSk6dGhpcy5fJEVrKCl9Y2F0Y2gobyl7dGhyb3cgcj0hMSx0aGlzLl8kRWsoKSxvfXImJnRoaXMuXyRBRShuKX13aWxsVXBkYXRlKHQpe31fJEFFKHQpe3ZhciByOyhyPXRoaXMuXyRFUyk9PT1udWxsfHxyPT09dm9pZCAwfHxyLmZvckVhY2gobj0+e3ZhciBvO3JldHVybihvPW4uaG9zdFVwZGF0ZWQpPT09bnVsbHx8bz09PXZvaWQgMD92b2lkIDA6by5jYWxsKG4pfSksdGhpcy5oYXNVcGRhdGVkfHwodGhpcy5oYXNVcGRhdGVkPSEwLHRoaXMuZmlyc3RVcGRhdGVkKHQpKSx0aGlzLnVwZGF0ZWQodCl9XyRFaygpe3RoaXMuXyRBTD1uZXcgTWFwLHRoaXMuaXNVcGRhdGVQZW5kaW5nPSExfWdldCB1cGRhdGVDb21wbGV0ZSgpe3JldHVybiB0aGlzLmdldFVwZGF0ZUNvbXBsZXRlKCl9Z2V0VXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5fJEVffXNob3VsZFVwZGF0ZSh0KXtyZXR1cm4hMH11cGRhdGUodCl7dGhpcy5fJEVDIT09dm9pZCAwJiYodGhpcy5fJEVDLmZvckVhY2goKHIsbik9PnRoaXMuXyRFTyhuLHRoaXNbbl0scikpLHRoaXMuXyRFQz12b2lkIDApLHRoaXMuXyRFaygpfXVwZGF0ZWQodCl7fWZpcnN0VXBkYXRlZCh0KXt9fTt3dFtIZV09ITAsd3QuZWxlbWVudFByb3BlcnRpZXM9bmV3IE1hcCx3dC5lbGVtZW50U3R5bGVzPVtdLHd0LnNoYWRvd1Jvb3RPcHRpb25zPXttb2RlOiJvcGVuIn0sSXI/Lih7UmVhY3RpdmVFbGVtZW50Ond0fSksKChfZT1uZS5yZWFjdGl2ZUVsZW1lbnRWZXJzaW9ucykhPT1udWxsJiZfZSE9PXZvaWQgMD9fZTpuZS5yZWFjdGl2ZUVsZW1lbnRWZXJzaW9ucz1bXSkucHVzaCgiMS42LjMiKTsvKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwogKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAqL3ZhciBFZTtjb25zdCBpZT13aW5kb3csJHQ9aWUudHJ1c3RlZFR5cGVzLFByPSR0PyR0LmNyZWF0ZVBvbGljeSgibGl0LWh0bWwiLHtjcmVhdGVIVE1MOmU9PmV9KTp2b2lkIDAsemU9IiRsaXQkIixKPWBsaXQkJHsoTWF0aC5yYW5kb20oKSsiIikuc2xpY2UoOSl9JGAsSnI9Ij8iK0osSG89YDwke0pyfT5gLHV0PWRvY3VtZW50LFd0PSgpPT51dC5jcmVhdGVDb21tZW50KCIiKSxrdD1lPT5lPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIixYcj1BcnJheS5pc0FycmF5LHpvPWU9PlhyKGUpfHx0eXBlb2YgZT8uW1N5bWJvbC5pdGVyYXRvcl09PSJmdW5jdGlvbiIsQWU9YFsgCQpcZlxyXWAsRHQ9LzwoPzooIS0tfFwvW15hLXpBLVpdKXwoXC8/W2EtekEtWl1bXj5cc10qKXwoXC8/JCkpL2csVHI9Ly0tPi9nLE1yPS8+L2csYXQ9UmVnRXhwKGA+fCR7QWV9KD86KFteXFxzIic+PS9dKykoJHtBZX0qPSR7QWV9Kig/OlteIAkKXGZcciInXGA8Pj1dfCgifCcpfCkpfCQpYCwiZyIpLFNyPS8nL2csUnI9LyIvZyx0bz0vXig/OnNjcmlwdHxzdHlsZXx0ZXh0YXJlYXx0aXRsZSkkL2ksZW89ZT0+KHQsLi4ucik9Pih7XyRsaXRUeXBlJDplLHN0cmluZ3M6dCx2YWx1ZXM6cn0pLG09ZW8oMSksTD1lbygyKSxtdD1TeW1ib2wuZm9yKCJsaXQtbm9DaGFuZ2UiKSxCPVN5bWJvbC5mb3IoImxpdC1ub3RoaW5nIiksRHI9bmV3IFdlYWtNYXAsY3Q9dXQuY3JlYXRlVHJlZVdhbGtlcih1dCwxMjksbnVsbCwhMSk7ZnVuY3Rpb24gcm8oZSx0KXtpZighQXJyYXkuaXNBcnJheShlKXx8IWUuaGFzT3duUHJvcGVydHkoInJhdyIpKXRocm93IEVycm9yKCJpbnZhbGlkIHRlbXBsYXRlIHN0cmluZ3MgYXJyYXkiKTtyZXR1cm4gUHIhPT12b2lkIDA/UHIuY3JlYXRlSFRNTCh0KTp0fWNvbnN0IEZvPShlLHQpPT57Y29uc3Qgcj1lLmxlbmd0aC0xLG49W107bGV0IG8saT10PT09Mj8iPHN2Zz4iOiIiLHM9RHQ7Zm9yKGxldCBsPTA7bDxyO2wrKyl7Y29uc3QgYT1lW2xdO2xldCBjLGQsYj0tMSxoPTA7Zm9yKDtoPGEubGVuZ3RoJiYocy5sYXN0SW5kZXg9aCxkPXMuZXhlYyhhKSxkIT09bnVsbCk7KWg9cy5sYXN0SW5kZXgscz09PUR0P2RbMV09PT0iIS0tIj9zPVRyOmRbMV0hPT12b2lkIDA/cz1NcjpkWzJdIT09dm9pZCAwPyh0by50ZXN0KGRbMl0pJiYobz1SZWdFeHAoIjwvIitkWzJdLCJnIikpLHM9YXQpOmRbM10hPT12b2lkIDAmJihzPWF0KTpzPT09YXQ/ZFswXT09PSI+Ij8ocz1vPz9EdCxiPS0xKTpkWzFdPT09dm9pZCAwP2I9LTI6KGI9cy5sYXN0SW5kZXgtZFsyXS5sZW5ndGgsYz1kWzFdLHM9ZFszXT09PXZvaWQgMD9hdDpkWzNdPT09JyInP1JyOlNyKTpzPT09UnJ8fHM9PT1Tcj9zPWF0OnM9PT1Ucnx8cz09PU1yP3M9RHQ6KHM9YXQsbz12b2lkIDApO2NvbnN0IHA9cz09PWF0JiZlW2wrMV0uc3RhcnRzV2l0aCgiLz4iKT8iICI6IiI7aSs9cz09PUR0P2ErSG86Yj49MD8obi5wdXNoKGMpLGEuc2xpY2UoMCxiKSt6ZSthLnNsaWNlKGIpK0orcCk6YStKKyhiPT09LTI/KG4ucHVzaCh2b2lkIDApLGwpOnApfXJldHVybltybyhlLGkrKGVbcl18fCI8Pz4iKSsodD09PTI/Ijwvc3ZnPiI6IiIpKSxuXX07Y2xhc3MgVXR7Y29uc3RydWN0b3Ioe3N0cmluZ3M6dCxfJGxpdFR5cGUkOnJ9LG4pe2xldCBvO3RoaXMucGFydHM9W107bGV0IGk9MCxzPTA7Y29uc3QgbD10Lmxlbmd0aC0xLGE9dGhpcy5wYXJ0cyxbYyxkXT1Gbyh0LHIpO2lmKHRoaXMuZWw9VXQuY3JlYXRlRWxlbWVudChjLG4pLGN0LmN1cnJlbnROb2RlPXRoaXMuZWwuY29udGVudCxyPT09Mil7Y29uc3QgYj10aGlzLmVsLmNvbnRlbnQsaD1iLmZpcnN0Q2hpbGQ7aC5yZW1vdmUoKSxiLmFwcGVuZCguLi5oLmNoaWxkTm9kZXMpfWZvcig7KG89Y3QubmV4dE5vZGUoKSkhPT1udWxsJiZhLmxlbmd0aDxsOyl7aWYoby5ub2RlVHlwZT09PTEpe2lmKG8uaGFzQXR0cmlidXRlcygpKXtjb25zdCBiPVtdO2Zvcihjb25zdCBoIG9mIG8uZ2V0QXR0cmlidXRlTmFtZXMoKSlpZihoLmVuZHNXaXRoKHplKXx8aC5zdGFydHNXaXRoKEopKXtjb25zdCBwPWRbcysrXTtpZihiLnB1c2goaCkscCE9PXZvaWQgMCl7Y29uc3QgZz1vLmdldEF0dHJpYnV0ZShwLnRvTG93ZXJDYXNlKCkremUpLnNwbGl0KEopLGY9LyhbLj9AXSk/KC4qKS8uZXhlYyhwKTthLnB1c2goe3R5cGU6MSxpbmRleDppLG5hbWU6ZlsyXSxzdHJpbmdzOmcsY3RvcjpmWzFdPT09Ii4iP1pvOmZbMV09PT0iPyI/S286ZlsxXT09PSJAIj9ZbzpnZX0pfWVsc2UgYS5wdXNoKHt0eXBlOjYsaW5kZXg6aX0pfWZvcihjb25zdCBoIG9mIGIpby5yZW1vdmVBdHRyaWJ1dGUoaCl9aWYodG8udGVzdChvLnRhZ05hbWUpKXtjb25zdCBiPW8udGV4dENvbnRlbnQuc3BsaXQoSiksaD1iLmxlbmd0aC0xO2lmKGg+MCl7by50ZXh0Q29udGVudD0kdD8kdC5lbXB0eVNjcmlwdDoiIjtmb3IobGV0IHA9MDtwPGg7cCsrKW8uYXBwZW5kKGJbcF0sV3QoKSksY3QubmV4dE5vZGUoKSxhLnB1c2goe3R5cGU6MixpbmRleDorK2l9KTtvLmFwcGVuZChiW2hdLFd0KCkpfX19ZWxzZSBpZihvLm5vZGVUeXBlPT09OClpZihvLmRhdGE9PT1KcilhLnB1c2goe3R5cGU6MixpbmRleDppfSk7ZWxzZXtsZXQgYj0tMTtmb3IoOyhiPW8uZGF0YS5pbmRleE9mKEosYisxKSkhPT0tMTspYS5wdXNoKHt0eXBlOjcsaW5kZXg6aX0pLGIrPUoubGVuZ3RoLTF9aSsrfX1zdGF0aWMgY3JlYXRlRWxlbWVudCh0LHIpe2NvbnN0IG49dXQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4gbi5pbm5lckhUTUw9dCxufX1mdW5jdGlvbiBfdChlLHQscj1lLG4pe3ZhciBvLGkscyxsO2lmKHQ9PT1tdClyZXR1cm4gdDtsZXQgYT1uIT09dm9pZCAwPyhvPXIuXyRDbyk9PT1udWxsfHxvPT09dm9pZCAwP3ZvaWQgMDpvW25dOnIuXyRDbDtjb25zdCBjPWt0KHQpP3ZvaWQgMDp0Ll8kbGl0RGlyZWN0aXZlJDtyZXR1cm4gYT8uY29uc3RydWN0b3IhPT1jJiYoKGk9YT8uXyRBTyk9PT1udWxsfHxpPT09dm9pZCAwfHxpLmNhbGwoYSwhMSksYz09PXZvaWQgMD9hPXZvaWQgMDooYT1uZXcgYyhlKSxhLl8kQVQoZSxyLG4pKSxuIT09dm9pZCAwPygocz0obD1yKS5fJENvKSE9PW51bGwmJnMhPT12b2lkIDA/czpsLl8kQ289W10pW25dPWE6ci5fJENsPWEpLGEhPT12b2lkIDAmJih0PV90KGUsYS5fJEFTKGUsdC52YWx1ZXMpLGEsbikpLHR9Y2xhc3MgVm97Y29uc3RydWN0b3IodCxyKXt0aGlzLl8kQVY9W10sdGhpcy5fJEFOPXZvaWQgMCx0aGlzLl8kQUQ9dCx0aGlzLl8kQU09cn1nZXQgcGFyZW50Tm9kZSgpe3JldHVybiB0aGlzLl8kQU0ucGFyZW50Tm9kZX1nZXQgXyRBVSgpe3JldHVybiB0aGlzLl8kQU0uXyRBVX11KHQpe3ZhciByO2NvbnN0e2VsOntjb250ZW50Om59LHBhcnRzOm99PXRoaXMuXyRBRCxpPSgocj10Py5jcmVhdGlvblNjb3BlKSE9PW51bGwmJnIhPT12b2lkIDA/cjp1dCkuaW1wb3J0Tm9kZShuLCEwKTtjdC5jdXJyZW50Tm9kZT1pO2xldCBzPWN0Lm5leHROb2RlKCksbD0wLGE9MCxjPW9bMF07Zm9yKDtjIT09dm9pZCAwOyl7aWYobD09PWMuaW5kZXgpe2xldCBkO2MudHlwZT09PTI/ZD1uZXcgcXQocyxzLm5leHRTaWJsaW5nLHRoaXMsdCk6Yy50eXBlPT09MT9kPW5ldyBjLmN0b3IocyxjLm5hbWUsYy5zdHJpbmdzLHRoaXMsdCk6Yy50eXBlPT09NiYmKGQ9bmV3IFFvKHMsdGhpcyx0KSksdGhpcy5fJEFWLnB1c2goZCksYz1vWysrYV19bCE9PWM/LmluZGV4JiYocz1jdC5uZXh0Tm9kZSgpLGwrKyl9cmV0dXJuIGN0LmN1cnJlbnROb2RlPXV0LGl9dih0KXtsZXQgcj0wO2Zvcihjb25zdCBuIG9mIHRoaXMuXyRBViluIT09dm9pZCAwJiYobi5zdHJpbmdzIT09dm9pZCAwPyhuLl8kQUkodCxuLHIpLHIrPW4uc3RyaW5ncy5sZW5ndGgtMik6bi5fJEFJKHRbcl0pKSxyKyt9fWNsYXNzIHF0e2NvbnN0cnVjdG9yKHQscixuLG8pe3ZhciBpO3RoaXMudHlwZT0yLHRoaXMuXyRBSD1CLHRoaXMuXyRBTj12b2lkIDAsdGhpcy5fJEFBPXQsdGhpcy5fJEFCPXIsdGhpcy5fJEFNPW4sdGhpcy5vcHRpb25zPW8sdGhpcy5fJENwPShpPW8/LmlzQ29ubmVjdGVkKT09PW51bGx8fGk9PT12b2lkIDB8fGl9Z2V0IF8kQVUoKXt2YXIgdCxyO3JldHVybihyPSh0PXRoaXMuXyRBTSk9PT1udWxsfHx0PT09dm9pZCAwP3ZvaWQgMDp0Ll8kQVUpIT09bnVsbCYmciE9PXZvaWQgMD9yOnRoaXMuXyRDcH1nZXQgcGFyZW50Tm9kZSgpe2xldCB0PXRoaXMuXyRBQS5wYXJlbnROb2RlO2NvbnN0IHI9dGhpcy5fJEFNO3JldHVybiByIT09dm9pZCAwJiZ0Py5ub2RlVHlwZT09PTExJiYodD1yLnBhcmVudE5vZGUpLHR9Z2V0IHN0YXJ0Tm9kZSgpe3JldHVybiB0aGlzLl8kQUF9Z2V0IGVuZE5vZGUoKXtyZXR1cm4gdGhpcy5fJEFCfV8kQUkodCxyPXRoaXMpe3Q9X3QodGhpcyx0LHIpLGt0KHQpP3Q9PT1CfHx0PT1udWxsfHx0PT09IiI/KHRoaXMuXyRBSCE9PUImJnRoaXMuXyRBUigpLHRoaXMuXyRBSD1CKTp0IT09dGhpcy5fJEFIJiZ0IT09bXQmJnRoaXMuXyh0KTp0Ll8kbGl0VHlwZSQhPT12b2lkIDA/dGhpcy5nKHQpOnQubm9kZVR5cGUhPT12b2lkIDA/dGhpcy4kKHQpOnpvKHQpP3RoaXMuVCh0KTp0aGlzLl8odCl9ayh0KXtyZXR1cm4gdGhpcy5fJEFBLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQsdGhpcy5fJEFCKX0kKHQpe3RoaXMuXyRBSCE9PXQmJih0aGlzLl8kQVIoKSx0aGlzLl8kQUg9dGhpcy5rKHQpKX1fKHQpe3RoaXMuXyRBSCE9PUImJmt0KHRoaXMuXyRBSCk/dGhpcy5fJEFBLm5leHRTaWJsaW5nLmRhdGE9dDp0aGlzLiQodXQuY3JlYXRlVGV4dE5vZGUodCkpLHRoaXMuXyRBSD10fWcodCl7dmFyIHI7Y29uc3R7dmFsdWVzOm4sXyRsaXRUeXBlJDpvfT10LGk9dHlwZW9mIG89PSJudW1iZXIiP3RoaXMuXyRBQyh0KTooby5lbD09PXZvaWQgMCYmKG8uZWw9VXQuY3JlYXRlRWxlbWVudChybyhvLmgsby5oWzBdKSx0aGlzLm9wdGlvbnMpKSxvKTtpZigoKHI9dGhpcy5fJEFIKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuXyRBRCk9PT1pKXRoaXMuXyRBSC52KG4pO2Vsc2V7Y29uc3Qgcz1uZXcgVm8oaSx0aGlzKSxsPXMudSh0aGlzLm9wdGlvbnMpO3MudihuKSx0aGlzLiQobCksdGhpcy5fJEFIPXN9fV8kQUModCl7bGV0IHI9RHIuZ2V0KHQuc3RyaW5ncyk7cmV0dXJuIHI9PT12b2lkIDAmJkRyLnNldCh0LnN0cmluZ3Mscj1uZXcgVXQodCkpLHJ9VCh0KXtYcih0aGlzLl8kQUgpfHwodGhpcy5fJEFIPVtdLHRoaXMuXyRBUigpKTtjb25zdCByPXRoaXMuXyRBSDtsZXQgbixvPTA7Zm9yKGNvbnN0IGkgb2YgdClvPT09ci5sZW5ndGg/ci5wdXNoKG49bmV3IHF0KHRoaXMuayhXdCgpKSx0aGlzLmsoV3QoKSksdGhpcyx0aGlzLm9wdGlvbnMpKTpuPXJbb10sbi5fJEFJKGkpLG8rKztvPHIubGVuZ3RoJiYodGhpcy5fJEFSKG4mJm4uXyRBQi5uZXh0U2libGluZyxvKSxyLmxlbmd0aD1vKX1fJEFSKHQ9dGhpcy5fJEFBLm5leHRTaWJsaW5nLHIpe3ZhciBuO2Zvcigobj10aGlzLl8kQVApPT09bnVsbHx8bj09PXZvaWQgMHx8bi5jYWxsKHRoaXMsITEsITAscik7dCYmdCE9PXRoaXMuXyRBQjspe2NvbnN0IG89dC5uZXh0U2libGluZzt0LnJlbW92ZSgpLHQ9b319c2V0Q29ubmVjdGVkKHQpe3ZhciByO3RoaXMuXyRBTT09PXZvaWQgMCYmKHRoaXMuXyRDcD10LChyPXRoaXMuXyRBUCk9PT1udWxsfHxyPT09dm9pZCAwfHxyLmNhbGwodGhpcyx0KSl9fWNsYXNzIGdle2NvbnN0cnVjdG9yKHQscixuLG8saSl7dGhpcy50eXBlPTEsdGhpcy5fJEFIPUIsdGhpcy5fJEFOPXZvaWQgMCx0aGlzLmVsZW1lbnQ9dCx0aGlzLm5hbWU9cix0aGlzLl8kQU09byx0aGlzLm9wdGlvbnM9aSxuLmxlbmd0aD4yfHxuWzBdIT09IiJ8fG5bMV0hPT0iIj8odGhpcy5fJEFIPUFycmF5KG4ubGVuZ3RoLTEpLmZpbGwobmV3IFN0cmluZyksdGhpcy5zdHJpbmdzPW4pOnRoaXMuXyRBSD1CfWdldCB0YWdOYW1lKCl7cmV0dXJuIHRoaXMuZWxlbWVudC50YWdOYW1lfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfV8kQUkodCxyPXRoaXMsbixvKXtjb25zdCBpPXRoaXMuc3RyaW5ncztsZXQgcz0hMTtpZihpPT09dm9pZCAwKXQ9X3QodGhpcyx0LHIsMCkscz0ha3QodCl8fHQhPT10aGlzLl8kQUgmJnQhPT1tdCxzJiYodGhpcy5fJEFIPXQpO2Vsc2V7Y29uc3QgbD10O2xldCBhLGM7Zm9yKHQ9aVswXSxhPTA7YTxpLmxlbmd0aC0xO2ErKyljPV90KHRoaXMsbFtuK2FdLHIsYSksYz09PW10JiYoYz10aGlzLl8kQUhbYV0pLHN8fChzPSFrdChjKXx8YyE9PXRoaXMuXyRBSFthXSksYz09PUI/dD1COnQhPT1CJiYodCs9KGM/PyIiKStpW2ErMV0pLHRoaXMuXyRBSFthXT1jfXMmJiFvJiZ0aGlzLmoodCl9aih0KXt0PT09Qj90aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHRoaXMubmFtZSk6dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLm5hbWUsdD8/IiIpfX1jbGFzcyBabyBleHRlbmRzIGdle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnR5cGU9M31qKHQpe3RoaXMuZWxlbWVudFt0aGlzLm5hbWVdPXQ9PT1CP3ZvaWQgMDp0fX1jb25zdCBxbz0kdD8kdC5lbXB0eVNjcmlwdDoiIjtjbGFzcyBLbyBleHRlbmRzIGdle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnR5cGU9NH1qKHQpe3QmJnQhPT1CP3RoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5uYW1lLHFvKTp0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHRoaXMubmFtZSl9fWNsYXNzIFlvIGV4dGVuZHMgZ2V7Y29uc3RydWN0b3IodCxyLG4sbyxpKXtzdXBlcih0LHIsbixvLGkpLHRoaXMudHlwZT01fV8kQUkodCxyPXRoaXMpe3ZhciBuO2lmKCh0PShuPV90KHRoaXMsdCxyLDApKSE9PW51bGwmJm4hPT12b2lkIDA/bjpCKT09PW10KXJldHVybjtjb25zdCBvPXRoaXMuXyRBSCxpPXQ9PT1CJiZvIT09Qnx8dC5jYXB0dXJlIT09by5jYXB0dXJlfHx0Lm9uY2UhPT1vLm9uY2V8fHQucGFzc2l2ZSE9PW8ucGFzc2l2ZSxzPXQhPT1CJiYobz09PUJ8fGkpO2kmJnRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMubmFtZSx0aGlzLG8pLHMmJnRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMubmFtZSx0aGlzLHQpLHRoaXMuXyRBSD10fWhhbmRsZUV2ZW50KHQpe3ZhciByLG47dHlwZW9mIHRoaXMuXyRBSD09ImZ1bmN0aW9uIj90aGlzLl8kQUguY2FsbCgobj0ocj10aGlzLm9wdGlvbnMpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5ob3N0KSE9PW51bGwmJm4hPT12b2lkIDA/bjp0aGlzLmVsZW1lbnQsdCk6dGhpcy5fJEFILmhhbmRsZUV2ZW50KHQpfX1jbGFzcyBRb3tjb25zdHJ1Y3Rvcih0LHIsbil7dGhpcy5lbGVtZW50PXQsdGhpcy50eXBlPTYsdGhpcy5fJEFOPXZvaWQgMCx0aGlzLl8kQU09cix0aGlzLm9wdGlvbnM9bn1nZXQgXyRBVSgpe3JldHVybiB0aGlzLl8kQU0uXyRBVX1fJEFJKHQpe190KHRoaXMsdCl9fWNvbnN0IExyPWllLmxpdEh0bWxQb2x5ZmlsbFN1cHBvcnQ7THI/LihVdCxxdCksKChFZT1pZS5saXRIdG1sVmVyc2lvbnMpIT09bnVsbCYmRWUhPT12b2lkIDA/RWU6aWUubGl0SHRtbFZlcnNpb25zPVtdKS5wdXNoKCIyLjguMCIpO2NvbnN0IEdvPShlLHQscik9Pnt2YXIgbixvO2NvbnN0IGk9KG49cj8ucmVuZGVyQmVmb3JlKSE9PW51bGwmJm4hPT12b2lkIDA/bjp0O2xldCBzPWkuXyRsaXRQYXJ0JDtpZihzPT09dm9pZCAwKXtjb25zdCBsPShvPXI/LnJlbmRlckJlZm9yZSkhPT1udWxsJiZvIT09dm9pZCAwP286bnVsbDtpLl8kbGl0UGFydCQ9cz1uZXcgcXQodC5pbnNlcnRCZWZvcmUoV3QoKSxsKSxsLHZvaWQgMCxyPz97fSl9cmV0dXJuIHMuXyRBSShlKSxzfTsvKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwogKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAqL3ZhciBPZSxJZTtjbGFzcyBFIGV4dGVuZHMgd3R7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVuZGVyT3B0aW9ucz17aG9zdDp0aGlzfSx0aGlzLl8kRG89dm9pZCAwfWNyZWF0ZVJlbmRlclJvb3QoKXt2YXIgdCxyO2NvbnN0IG49c3VwZXIuY3JlYXRlUmVuZGVyUm9vdCgpO3JldHVybih0PShyPXRoaXMucmVuZGVyT3B0aW9ucykucmVuZGVyQmVmb3JlKSE9PW51bGwmJnQhPT12b2lkIDB8fChyLnJlbmRlckJlZm9yZT1uLmZpcnN0Q2hpbGQpLG59dXBkYXRlKHQpe2NvbnN0IHI9dGhpcy5yZW5kZXIoKTt0aGlzLmhhc1VwZGF0ZWR8fCh0aGlzLnJlbmRlck9wdGlvbnMuaXNDb25uZWN0ZWQ9dGhpcy5pc0Nvbm5lY3RlZCksc3VwZXIudXBkYXRlKHQpLHRoaXMuXyREbz1HbyhyLHRoaXMucmVuZGVyUm9vdCx0aGlzLnJlbmRlck9wdGlvbnMpfWNvbm5lY3RlZENhbGxiYWNrKCl7dmFyIHQ7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSwodD10aGlzLl8kRG8pPT09bnVsbHx8dD09PXZvaWQgMHx8dC5zZXRDb25uZWN0ZWQoITApfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dmFyIHQ7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSwodD10aGlzLl8kRG8pPT09bnVsbHx8dD09PXZvaWQgMHx8dC5zZXRDb25uZWN0ZWQoITEpfXJlbmRlcigpe3JldHVybiBtdH19RS5maW5hbGl6ZWQ9ITAsRS5fJGxpdEVsZW1lbnQkPSEwLChPZT1nbG9iYWxUaGlzLmxpdEVsZW1lbnRIeWRyYXRlU3VwcG9ydCk9PT1udWxsfHxPZT09PXZvaWQgMHx8T2UuY2FsbChnbG9iYWxUaGlzLHtMaXRFbGVtZW50OkV9KTtjb25zdCBOcj1nbG9iYWxUaGlzLmxpdEVsZW1lbnRQb2x5ZmlsbFN1cHBvcnQ7TnI/Lih7TGl0RWxlbWVudDpFfSk7KChJZT1nbG9iYWxUaGlzLmxpdEVsZW1lbnRWZXJzaW9ucykhPT1udWxsJiZJZSE9PXZvaWQgMD9JZTpnbG9iYWxUaGlzLmxpdEVsZW1lbnRWZXJzaW9ucz1bXSkucHVzaCgiMy4zLjMiKTsvKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwogKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAqL2NvbnN0IEk9ZT0+dD0+dHlwZW9mIHQ9PSJmdW5jdGlvbiI/KChyLG4pPT4oY3VzdG9tRWxlbWVudHMuZGVmaW5lKHIsbiksbikpKGUsdCk6KChyLG4pPT57Y29uc3R7a2luZDpvLGVsZW1lbnRzOml9PW47cmV0dXJue2tpbmQ6byxlbGVtZW50czppLGZpbmlzaGVyKHMpe2N1c3RvbUVsZW1lbnRzLmRlZmluZShyLHMpfX19KShlLHQpOy8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDCiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICovY29uc3QgSm89KGUsdCk9PnQua2luZD09PSJtZXRob2QiJiZ0LmRlc2NyaXB0b3ImJiEoInZhbHVlImluIHQuZGVzY3JpcHRvcik/ey4uLnQsZmluaXNoZXIocil7ci5jcmVhdGVQcm9wZXJ0eSh0LmtleSxlKX19OntraW5kOiJmaWVsZCIsa2V5OlN5bWJvbCgpLHBsYWNlbWVudDoib3duIixkZXNjcmlwdG9yOnt9LG9yaWdpbmFsS2V5OnQua2V5LGluaXRpYWxpemVyKCl7dHlwZW9mIHQuaW5pdGlhbGl6ZXI9PSJmdW5jdGlvbiImJih0aGlzW3Qua2V5XT10LmluaXRpYWxpemVyLmNhbGwodGhpcykpfSxmaW5pc2hlcihyKXtyLmNyZWF0ZVByb3BlcnR5KHQua2V5LGUpfX0sWG89KGUsdCxyKT0+e3QuY29uc3RydWN0b3IuY3JlYXRlUHJvcGVydHkocixlKX07ZnVuY3Rpb24gXyhlKXtyZXR1cm4odCxyKT0+ciE9PXZvaWQgMD9YbyhlLHQscik6Sm8oZSx0KX0vKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwogKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAqL2Z1bmN0aW9uIEgoZSl7cmV0dXJuIF8oey4uLmUsc3RhdGU6ITB9KX0vKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQwogKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAqL3ZhciBQZTsoKFBlPXdpbmRvdy5IVE1MU2xvdEVsZW1lbnQpPT09bnVsbHx8UGU9PT12b2lkIDA/dm9pZCAwOlBlLnByb3RvdHlwZS5hc3NpZ25lZEVsZW1lbnRzKSE9bnVsbDsvKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwogKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAqL2NvbnN0IHRuPXtBVFRSSUJVVEU6MX0sZW49ZT0+KC4uLnQpPT4oe18kbGl0RGlyZWN0aXZlJDplLHZhbHVlczp0fSk7Y2xhc3Mgcm57Y29uc3RydWN0b3IodCl7fWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfV8kQVQodCxyLG4pe3RoaXMuXyRDdD10LHRoaXMuXyRBTT1yLHRoaXMuXyRDaT1ufV8kQVModCxyKXtyZXR1cm4gdGhpcy51cGRhdGUodCxyKX11cGRhdGUodCxyKXtyZXR1cm4gdGhpcy5yZW5kZXIoLi4ucil9fS8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDCiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICovY29uc3QgRz1lbihjbGFzcyBleHRlbmRzIHJue2NvbnN0cnVjdG9yKGUpe3ZhciB0O2lmKHN1cGVyKGUpLGUudHlwZSE9PXRuLkFUVFJJQlVURXx8ZS5uYW1lIT09ImNsYXNzInx8KCh0PWUuc3RyaW5ncyk9PT1udWxsfHx0PT09dm9pZCAwP3ZvaWQgMDp0Lmxlbmd0aCk+Mil0aHJvdyBFcnJvcigiYGNsYXNzTWFwKClgIGNhbiBvbmx5IGJlIHVzZWQgaW4gdGhlIGBjbGFzc2AgYXR0cmlidXRlIGFuZCBtdXN0IGJlIHRoZSBvbmx5IHBhcnQgaW4gdGhlIGF0dHJpYnV0ZS4iKX1yZW5kZXIoZSl7cmV0dXJuIiAiK09iamVjdC5rZXlzKGUpLmZpbHRlcih0PT5lW3RdKS5qb2luKCIgIikrIiAifXVwZGF0ZShlLFt0XSl7dmFyIHIsbjtpZih0aGlzLml0PT09dm9pZCAwKXt0aGlzLml0PW5ldyBTZXQsZS5zdHJpbmdzIT09dm9pZCAwJiYodGhpcy5udD1uZXcgU2V0KGUuc3RyaW5ncy5qb2luKCIgIikuc3BsaXQoL1xzLykuZmlsdGVyKGk9PmkhPT0iIikpKTtmb3IoY29uc3QgaSBpbiB0KXRbaV0mJiEoISgocj10aGlzLm50KT09PW51bGx8fHI9PT12b2lkIDApJiZyLmhhcyhpKSkmJnRoaXMuaXQuYWRkKGkpO3JldHVybiB0aGlzLnJlbmRlcih0KX1jb25zdCBvPWUuZWxlbWVudC5jbGFzc0xpc3Q7dGhpcy5pdC5mb3JFYWNoKGk9PntpIGluIHR8fChvLnJlbW92ZShpKSx0aGlzLml0LmRlbGV0ZShpKSl9KTtmb3IoY29uc3QgaSBpbiB0KXtjb25zdCBzPSEhdFtpXTtzPT09dGhpcy5pdC5oYXMoaSl8fCEoKG49dGhpcy5udCk9PT1udWxsfHxuPT09dm9pZCAwKSYmbi5oYXMoaSl8fChzPyhvLmFkZChpKSx0aGlzLml0LmFkZChpKSk6KG8ucmVtb3ZlKGkpLHRoaXMuaXQuZGVsZXRlKGkpKSl9cmV0dXJuIG10fX0pO2Z1bmN0aW9uIG9uKGUsdCl7ZS5pbmRleE9mKHQpPT09LTEmJmUucHVzaCh0KX1jb25zdCBvbz0oZSx0LHIpPT5NYXRoLm1pbihNYXRoLm1heChyLGUpLHQpLFY9e2R1cmF0aW9uOi4zLGRlbGF5OjAsZW5kRGVsYXk6MCxyZXBlYXQ6MCxlYXNpbmc6ImVhc2UifSxzZT1lPT50eXBlb2YgZT09Im51bWJlciIsYnQ9ZT0+QXJyYXkuaXNBcnJheShlKSYmIXNlKGVbMF0pLG5uPShlLHQscik9Pntjb25zdCBuPXQtZTtyZXR1cm4oKHItZSklbituKSVuK2V9O2Z1bmN0aW9uIHNuKGUsdCl7cmV0dXJuIGJ0KGUpP2Vbbm4oMCxlLmxlbmd0aCx0KV06ZX1jb25zdCBubz0oZSx0LHIpPT4tciplK3IqdCtlLGlvPSgpPT57fSxldD1lPT5lLGZyPShlLHQscik9PnQtZT09PTA/MTooci1lKS8odC1lKTtmdW5jdGlvbiBzbyhlLHQpe2NvbnN0IHI9ZVtlLmxlbmd0aC0xXTtmb3IobGV0IG49MTtuPD10O24rKyl7Y29uc3Qgbz1mcigwLHQsbik7ZS5wdXNoKG5vKHIsMSxvKSl9fWZ1bmN0aW9uIGxuKGUpe2NvbnN0IHQ9WzBdO3JldHVybiBzbyh0LGUtMSksdH1mdW5jdGlvbiBhbihlLHQ9bG4oZS5sZW5ndGgpLHI9ZXQpe2NvbnN0IG49ZS5sZW5ndGgsbz1uLXQubGVuZ3RoO3JldHVybiBvPjAmJnNvKHQsbyksaT0+e2xldCBzPTA7Zm9yKDtzPG4tMiYmIShpPHRbcysxXSk7cysrKTtsZXQgbD1vbygwLDEsZnIodFtzXSx0W3MrMV0saSkpO3JldHVybiBsPXNuKHIscykobCksbm8oZVtzXSxlW3MrMV0sbCl9fWNvbnN0IGxvPWU9PkFycmF5LmlzQXJyYXkoZSkmJnNlKGVbMF0pLEZlPWU9PnR5cGVvZiBlPT0ib2JqZWN0IiYmISFlLmNyZWF0ZUFuaW1hdGlvbixDdD1lPT50eXBlb2YgZT09ImZ1bmN0aW9uIixjbj1lPT50eXBlb2YgZT09InN0cmluZyIsTnQ9e21zOmU9PmUqMWUzLHM6ZT0+ZS8xZTN9LGFvPShlLHQscik9PigoKDEtMypyKzMqdCkqZSsoMypyLTYqdCkpKmUrMyp0KSplLGRuPTFlLTcsaG49MTI7ZnVuY3Rpb24gdW4oZSx0LHIsbixvKXtsZXQgaSxzLGw9MDtkbyBzPXQrKHItdCkvMixpPWFvKHMsbixvKS1lLGk+MD9yPXM6dD1zO3doaWxlKE1hdGguYWJzKGkpPmRuJiYrK2w8aG4pO3JldHVybiBzfWZ1bmN0aW9uIEx0KGUsdCxyLG4pe2lmKGU9PT10JiZyPT09bilyZXR1cm4gZXQ7Y29uc3Qgbz1pPT51bihpLDAsMSxlLHIpO3JldHVybiBpPT5pPT09MHx8aT09PTE/aTphbyhvKGkpLHQsbil9Y29uc3QgbW49KGUsdD0iZW5kIik9PnI9PntyPXQ9PT0iZW5kIj9NYXRoLm1pbihyLC45OTkpOk1hdGgubWF4KHIsLjAwMSk7Y29uc3Qgbj1yKmUsbz10PT09ImVuZCI/TWF0aC5mbG9vcihuKTpNYXRoLmNlaWwobik7cmV0dXJuIG9vKDAsMSxvL2UpfSxmbj17ZWFzZTpMdCguMjUsLjEsLjI1LDEpLCJlYXNlLWluIjpMdCguNDIsMCwxLDEpLCJlYXNlLWluLW91dCI6THQoLjQyLDAsLjU4LDEpLCJlYXNlLW91dCI6THQoMCwwLC41OCwxKX0scG49L1woKC4qPylcKS87ZnVuY3Rpb24gQnIoZSl7aWYoQ3QoZSkpcmV0dXJuIGU7aWYobG8oZSkpcmV0dXJuIEx0KC4uLmUpO2NvbnN0IHQ9Zm5bZV07aWYodClyZXR1cm4gdDtpZihlLnN0YXJ0c1dpdGgoInN0ZXBzIikpe2NvbnN0IHI9cG4uZXhlYyhlKTtpZihyKXtjb25zdCBuPXJbMV0uc3BsaXQoIiwiKTtyZXR1cm4gbW4ocGFyc2VGbG9hdChuWzBdKSxuWzFdLnRyaW0oKSl9fXJldHVybiBldH1jbGFzcyBjb3tjb25zdHJ1Y3Rvcih0LHI9WzAsMV0se2Vhc2luZzpuLGR1cmF0aW9uOm89Vi5kdXJhdGlvbixkZWxheTppPVYuZGVsYXksZW5kRGVsYXk6cz1WLmVuZERlbGF5LHJlcGVhdDpsPVYucmVwZWF0LG9mZnNldDphLGRpcmVjdGlvbjpjPSJub3JtYWwiLGF1dG9wbGF5OmQ9ITB9PXt9KXtpZih0aGlzLnN0YXJ0VGltZT1udWxsLHRoaXMucmF0ZT0xLHRoaXMudD0wLHRoaXMuY2FuY2VsVGltZXN0YW1wPW51bGwsdGhpcy5lYXNpbmc9ZXQsdGhpcy5kdXJhdGlvbj0wLHRoaXMudG90YWxEdXJhdGlvbj0wLHRoaXMucmVwZWF0PTAsdGhpcy5wbGF5U3RhdGU9ImlkbGUiLHRoaXMuZmluaXNoZWQ9bmV3IFByb21pc2UoKGgscCk9Pnt0aGlzLnJlc29sdmU9aCx0aGlzLnJlamVjdD1wfSksbj1ufHxWLmVhc2luZyxGZShuKSl7Y29uc3QgaD1uLmNyZWF0ZUFuaW1hdGlvbihyKTtuPWguZWFzaW5nLHI9aC5rZXlmcmFtZXN8fHIsbz1oLmR1cmF0aW9ufHxvfXRoaXMucmVwZWF0PWwsdGhpcy5lYXNpbmc9YnQobik/ZXQ6QnIobiksdGhpcy51cGRhdGVEdXJhdGlvbihvKTtjb25zdCBiPWFuKHIsYSxidChuKT9uLm1hcChCcik6ZXQpO3RoaXMudGljaz1oPT57dmFyIHA7aT1pO2xldCBnPTA7dGhpcy5wYXVzZVRpbWUhPT12b2lkIDA/Zz10aGlzLnBhdXNlVGltZTpnPShoLXRoaXMuc3RhcnRUaW1lKSp0aGlzLnJhdGUsdGhpcy50PWcsZy89MWUzLGc9TWF0aC5tYXgoZy1pLDApLHRoaXMucGxheVN0YXRlPT09ImZpbmlzaGVkIiYmdGhpcy5wYXVzZVRpbWU9PT12b2lkIDAmJihnPXRoaXMudG90YWxEdXJhdGlvbik7Y29uc3QgZj1nL3RoaXMuZHVyYXRpb247bGV0IEE9TWF0aC5mbG9vcihmKSx1PWYlMTshdSYmZj49MSYmKHU9MSksdT09PTEmJkEtLTtjb25zdCB5PUElMjsoYz09PSJyZXZlcnNlInx8Yz09PSJhbHRlcm5hdGUiJiZ5fHxjPT09ImFsdGVybmF0ZS1yZXZlcnNlIiYmIXkpJiYodT0xLXUpO2NvbnN0IHc9Zz49dGhpcy50b3RhbER1cmF0aW9uPzE6TWF0aC5taW4odSwxKSx2PWIodGhpcy5lYXNpbmcodykpO3QodiksdGhpcy5wYXVzZVRpbWU9PT12b2lkIDAmJih0aGlzLnBsYXlTdGF0ZT09PSJmaW5pc2hlZCJ8fGc+PXRoaXMudG90YWxEdXJhdGlvbitzKT8odGhpcy5wbGF5U3RhdGU9ImZpbmlzaGVkIiwocD10aGlzLnJlc29sdmUpPT09bnVsbHx8cD09PXZvaWQgMHx8cC5jYWxsKHRoaXMsdikpOnRoaXMucGxheVN0YXRlIT09ImlkbGUiJiYodGhpcy5mcmFtZVJlcXVlc3RJZD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy50aWNrKSl9LGQmJnRoaXMucGxheSgpfXBsYXkoKXtjb25zdCB0PXBlcmZvcm1hbmNlLm5vdygpO3RoaXMucGxheVN0YXRlPSJydW5uaW5nIix0aGlzLnBhdXNlVGltZSE9PXZvaWQgMD90aGlzLnN0YXJ0VGltZT10LXRoaXMucGF1c2VUaW1lOnRoaXMuc3RhcnRUaW1lfHwodGhpcy5zdGFydFRpbWU9dCksdGhpcy5jYW5jZWxUaW1lc3RhbXA9dGhpcy5zdGFydFRpbWUsdGhpcy5wYXVzZVRpbWU9dm9pZCAwLHRoaXMuZnJhbWVSZXF1ZXN0SWQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMudGljayl9cGF1c2UoKXt0aGlzLnBsYXlTdGF0ZT0icGF1c2VkIix0aGlzLnBhdXNlVGltZT10aGlzLnR9ZmluaXNoKCl7dGhpcy5wbGF5U3RhdGU9ImZpbmlzaGVkIix0aGlzLnRpY2soMCl9c3RvcCgpe3ZhciB0O3RoaXMucGxheVN0YXRlPSJpZGxlIix0aGlzLmZyYW1lUmVxdWVzdElkIT09dm9pZCAwJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmZyYW1lUmVxdWVzdElkKSwodD10aGlzLnJlamVjdCk9PT1udWxsfHx0PT09dm9pZCAwfHx0LmNhbGwodGhpcywhMSl9Y2FuY2VsKCl7dGhpcy5zdG9wKCksdGhpcy50aWNrKHRoaXMuY2FuY2VsVGltZXN0YW1wKX1yZXZlcnNlKCl7dGhpcy5yYXRlKj0tMX1jb21taXRTdHlsZXMoKXt9dXBkYXRlRHVyYXRpb24odCl7dGhpcy5kdXJhdGlvbj10LHRoaXMudG90YWxEdXJhdGlvbj10Kih0aGlzLnJlcGVhdCsxKX1nZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy50fXNldCBjdXJyZW50VGltZSh0KXt0aGlzLnBhdXNlVGltZSE9PXZvaWQgMHx8dGhpcy5yYXRlPT09MD90aGlzLnBhdXNlVGltZT10OnRoaXMuc3RhcnRUaW1lPXBlcmZvcm1hbmNlLm5vdygpLXQvdGhpcy5yYXRlfWdldCBwbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5yYXRlfXNldCBwbGF5YmFja1JhdGUodCl7dGhpcy5yYXRlPXR9fWNsYXNzIGdue3NldEFuaW1hdGlvbih0KXt0aGlzLmFuaW1hdGlvbj10LHQ/LmZpbmlzaGVkLnRoZW4oKCk9PnRoaXMuY2xlYXJBbmltYXRpb24oKSkuY2F0Y2goKCk9Pnt9KX1jbGVhckFuaW1hdGlvbigpe3RoaXMuYW5pbWF0aW9uPXRoaXMuZ2VuZXJhdG9yPXZvaWQgMH19Y29uc3QgVGU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gaG8oZSl7cmV0dXJuIFRlLmhhcyhlKXx8VGUuc2V0KGUse3RyYW5zZm9ybXM6W10sdmFsdWVzOm5ldyBNYXB9KSxUZS5nZXQoZSl9ZnVuY3Rpb24gd24oZSx0KXtyZXR1cm4gZS5oYXModCl8fGUuc2V0KHQsbmV3IGduKSxlLmdldCh0KX1jb25zdCB2bj1bIiIsIlgiLCJZIiwiWiJdLGJuPVsidHJhbnNsYXRlIiwic2NhbGUiLCJyb3RhdGUiLCJza2V3Il0sbGU9e3g6InRyYW5zbGF0ZVgiLHk6InRyYW5zbGF0ZVkiLHo6InRyYW5zbGF0ZVoifSxXcj17c3ludGF4OiI8YW5nbGU+Iixpbml0aWFsVmFsdWU6IjBkZWciLHRvRGVmYXVsdFVuaXQ6ZT0+ZSsiZGVnIn0seW49e3RyYW5zbGF0ZTp7c3ludGF4OiI8bGVuZ3RoLXBlcmNlbnRhZ2U+Iixpbml0aWFsVmFsdWU6IjBweCIsdG9EZWZhdWx0VW5pdDplPT5lKyJweCJ9LHJvdGF0ZTpXcixzY2FsZTp7c3ludGF4OiI8bnVtYmVyPiIsaW5pdGlhbFZhbHVlOjEsdG9EZWZhdWx0VW5pdDpldH0sc2tldzpXcn0sanQ9bmV3IE1hcCxwcj1lPT5gLS1tb3Rpb24tJHtlfWAsYWU9WyJ4IiwieSIsInoiXTtibi5mb3JFYWNoKGU9Pnt2bi5mb3JFYWNoKHQ9PnthZS5wdXNoKGUrdCksanQuc2V0KHByKGUrdCkseW5bZV0pfSl9KTtjb25zdCB4bj0oZSx0KT0+YWUuaW5kZXhPZihlKS1hZS5pbmRleE9mKHQpLCRuPW5ldyBTZXQoYWUpLHVvPWU9PiRuLmhhcyhlKSxfbj0oZSx0KT0+e2xlW3RdJiYodD1sZVt0XSk7Y29uc3R7dHJhbnNmb3JtczpyfT1obyhlKTtvbihyLHQpLGUuc3R5bGUudHJhbnNmb3JtPUNuKHIpfSxDbj1lPT5lLnNvcnQoeG4pLnJlZHVjZShFbiwiIikudHJpbSgpLEVuPShlLHQpPT5gJHtlfSAke3R9KHZhcigke3ByKHQpfSkpYCxWZT1lPT5lLnN0YXJ0c1dpdGgoIi0tIiksa3I9bmV3IFNldDtmdW5jdGlvbiBBbihlKXtpZigha3IuaGFzKGUpKXtrci5hZGQoZSk7dHJ5e2NvbnN0e3N5bnRheDp0LGluaXRpYWxWYWx1ZTpyfT1qdC5oYXMoZSk/anQuZ2V0KGUpOnt9O0NTUy5yZWdpc3RlclByb3BlcnR5KHtuYW1lOmUsaW5oZXJpdHM6ITEsc3ludGF4OnQsaW5pdGlhbFZhbHVlOnJ9KX1jYXRjaHt9fX1jb25zdCBNZT0oZSx0KT0+ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikuYW5pbWF0ZShlLHQpLFVyPXtjc3NSZWdpc3RlclByb3BlcnR5OigpPT50eXBlb2YgQ1NTPCJ1IiYmT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoQ1NTLCJyZWdpc3RlclByb3BlcnR5Iiksd2FhcGk6KCk9Pk9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKEVsZW1lbnQucHJvdG90eXBlLCJhbmltYXRlIikscGFydGlhbEtleWZyYW1lczooKT0+e3RyeXtNZSh7b3BhY2l0eTpbMV19KX1jYXRjaHtyZXR1cm4hMX1yZXR1cm4hMH0sZmluaXNoZWQ6KCk9PiEhTWUoe29wYWNpdHk6WzAsMV19LHtkdXJhdGlvbjouMDAxfSkuZmluaXNoZWQsbGluZWFyRWFzaW5nOigpPT57dHJ5e01lKHtvcGFjaXR5OjB9LHtlYXNpbmc6ImxpbmVhcigwLCAxKSJ9KX1jYXRjaHtyZXR1cm4hMX1yZXR1cm4hMH19LFNlPXt9LHZ0PXt9O2Zvcihjb25zdCBlIGluIFVyKXZ0W2VdPSgpPT4oU2VbZV09PT12b2lkIDAmJihTZVtlXT1VcltlXSgpKSxTZVtlXSk7Y29uc3QgT249LjAxNSxJbj0oZSx0KT0+e2xldCByPSIiO2NvbnN0IG49TWF0aC5yb3VuZCh0L09uKTtmb3IobGV0IG89MDtvPG47bysrKXIrPWUoZnIoMCxuLTEsbykpKyIsICI7cmV0dXJuIHIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMil9LGpyPShlLHQpPT5DdChlKT92dC5saW5lYXJFYXNpbmcoKT9gbGluZWFyKCR7SW4oZSx0KX0pYDpWLmVhc2luZzpsbyhlKT9QbihlKTplLFBuPShbZSx0LHIsbl0pPT5gY3ViaWMtYmV6aWVyKCR7ZX0sICR7dH0sICR7cn0sICR7bn0pYDtmdW5jdGlvbiBUbihlLHQpe2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKWVbcl09PT1udWxsJiYoZVtyXT1yP2Vbci0xXTp0KCkpO3JldHVybiBlfWNvbnN0IE1uPWU9PkFycmF5LmlzQXJyYXkoZSk/ZTpbZV07ZnVuY3Rpb24gWmUoZSl7cmV0dXJuIGxlW2VdJiYoZT1sZVtlXSksdW8oZSk/cHIoZSk6ZX1jb25zdCBYdD17Z2V0OihlLHQpPT57dD1aZSh0KTtsZXQgcj1WZSh0KT9lLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCk6Z2V0Q29tcHV0ZWRTdHlsZShlKVt0XTtpZighciYmciE9PTApe2NvbnN0IG49anQuZ2V0KHQpO24mJihyPW4uaW5pdGlhbFZhbHVlKX1yZXR1cm4gcn0sc2V0OihlLHQscik9Pnt0PVplKHQpLFZlKHQpP2Uuc3R5bGUuc2V0UHJvcGVydHkodCxyKTplLnN0eWxlW3RdPXJ9fTtmdW5jdGlvbiBtbyhlLHQ9ITApe2lmKCEoIWV8fGUucGxheVN0YXRlPT09ImZpbmlzaGVkIikpdHJ5e2Uuc3RvcD9lLnN0b3AoKToodCYmZS5jb21taXRTdHlsZXMoKSxlLmNhbmNlbCgpKX1jYXRjaHt9fWZ1bmN0aW9uIFNuKGUsdCl7dmFyIHI7bGV0IG49dD8udG9EZWZhdWx0VW5pdHx8ZXQ7Y29uc3Qgbz1lW2UubGVuZ3RoLTFdO2lmKGNuKG8pKXtjb25zdCBpPSgocj1vLm1hdGNoKC8oLT9bXGQuXSspKFthLXolXSopLykpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6clsyXSl8fCIiO2kmJihuPXM9PnMraSl9cmV0dXJuIG59ZnVuY3Rpb24gUm4oKXtyZXR1cm4gd2luZG93Ll9fTU9USU9OX0RFVl9UT09MU19SRUNPUkR9ZnVuY3Rpb24gRG4oZSx0LHIsbj17fSxvKXtjb25zdCBpPVJuKCkscz1uLnJlY29yZCE9PSExJiZpO2xldCBsLHtkdXJhdGlvbjphPVYuZHVyYXRpb24sZGVsYXk6Yz1WLmRlbGF5LGVuZERlbGF5OmQ9Vi5lbmREZWxheSxyZXBlYXQ6Yj1WLnJlcGVhdCxlYXNpbmc6aD1WLmVhc2luZyxwZXJzaXN0OnA9ITEsZGlyZWN0aW9uOmcsb2Zmc2V0OmYsYWxsb3dXZWJraXRBY2NlbGVyYXRpb246QT0hMSxhdXRvcGxheTp1PSEwfT1uO2NvbnN0IHk9aG8oZSksdz11byh0KTtsZXQgdj12dC53YWFwaSgpO3cmJl9uKGUsdCk7Y29uc3QgQz1aZSh0KSxTPXduKHkudmFsdWVzLEMpLFI9anQuZ2V0KEMpO3JldHVybiBtbyhTLmFuaW1hdGlvbiwhKEZlKGgpJiZTLmdlbmVyYXRvcikmJm4ucmVjb3JkIT09ITEpLCgpPT57Y29uc3Qgaz0oKT0+e3ZhciBELFk7cmV0dXJuKFk9KEQ9WHQuZ2V0KGUsQykpIT09bnVsbCYmRCE9PXZvaWQgMD9EOlI/LmluaXRpYWxWYWx1ZSkhPT1udWxsJiZZIT09dm9pZCAwP1k6MH07bGV0IE09VG4oTW4ociksayk7Y29uc3Qgej1TbihNLFIpO2lmKEZlKGgpKXtjb25zdCBEPWguY3JlYXRlQW5pbWF0aW9uKE0sdCE9PSJvcGFjaXR5IixrLEMsUyk7aD1ELmVhc2luZyxNPUQua2V5ZnJhbWVzfHxNLGE9RC5kdXJhdGlvbnx8YX1pZihWZShDKSYmKHZ0LmNzc1JlZ2lzdGVyUHJvcGVydHkoKT9BbihDKTp2PSExKSx3JiYhdnQubGluZWFyRWFzaW5nKCkmJihDdChoKXx8YnQoaCkmJmguc29tZShDdCkpJiYodj0hMSksdil7UiYmKE09TS5tYXAoVz0+c2UoVyk/Ui50b0RlZmF1bHRVbml0KFcpOlcpKSxNLmxlbmd0aD09PTEmJighdnQucGFydGlhbEtleWZyYW1lcygpfHxzKSYmTS51bnNoaWZ0KGsoKSk7Y29uc3QgRD17ZGVsYXk6TnQubXMoYyksZHVyYXRpb246TnQubXMoYSksZW5kRGVsYXk6TnQubXMoZCksZWFzaW5nOmJ0KGgpP3ZvaWQgMDpqcihoLGEpLGRpcmVjdGlvbjpnLGl0ZXJhdGlvbnM6YisxLGZpbGw6ImJvdGgifTtsPWUuYW5pbWF0ZSh7W0NdOk0sb2Zmc2V0OmYsZWFzaW5nOmJ0KGgpP2gubWFwKFc9PmpyKFcsYSkpOnZvaWQgMH0sRCksbC5maW5pc2hlZHx8KGwuZmluaXNoZWQ9bmV3IFByb21pc2UoKFcsQm8pPT57bC5vbmZpbmlzaD1XLGwub25jYW5jZWw9Qm99KSk7Y29uc3QgWT1NW00ubGVuZ3RoLTFdO2wuZmluaXNoZWQudGhlbigoKT0+e3B8fChYdC5zZXQoZSxDLFkpLGwuY2FuY2VsKCkpfSkuY2F0Y2goaW8pLEF8fChsLnBsYXliYWNrUmF0ZT0xLjAwMDAwMSl9ZWxzZSBpZihvJiZ3KU09TS5tYXAoRD0+dHlwZW9mIEQ9PSJzdHJpbmciP3BhcnNlRmxvYXQoRCk6RCksTS5sZW5ndGg9PT0xJiZNLnVuc2hpZnQocGFyc2VGbG9hdChrKCkpKSxsPW5ldyBvKEQ9PntYdC5zZXQoZSxDLHo/eihEKTpEKX0sTSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbikse2R1cmF0aW9uOmEsZWFzaW5nOmh9KSk7ZWxzZXtjb25zdCBEPU1bTS5sZW5ndGgtMV07WHQuc2V0KGUsQyxSJiZzZShEKT9SLnRvRGVmYXVsdFVuaXQoRCk6RCl9cmV0dXJuIHMmJmkoZSx0LE0se2R1cmF0aW9uOmEsZGVsYXk6YyxlYXNpbmc6aCxyZXBlYXQ6YixvZmZzZXQ6Zn0sIm1vdGlvbi1vbmUiKSxTLnNldEFuaW1hdGlvbihsKSxsJiYhdSYmbC5wYXVzZSgpLGx9fWNvbnN0IExuPShlLHQpPT5lW3RdP09iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSxlW3RdKTpPYmplY3QuYXNzaWduKHt9LGUpO2Z1bmN0aW9uIE5uKGUsdCl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9lPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSk6ZSBpbnN0YW5jZW9mIEVsZW1lbnQmJihlPVtlXSksQXJyYXkuZnJvbShlfHxbXSl9Y29uc3QgQm49ZT0+ZSgpLGZvPShlLHQscj1WLmR1cmF0aW9uKT0+bmV3IFByb3h5KHthbmltYXRpb25zOmUubWFwKEJuKS5maWx0ZXIoQm9vbGVhbiksZHVyYXRpb246cixvcHRpb25zOnR9LGtuKSxXbj1lPT5lLmFuaW1hdGlvbnNbMF0sa249e2dldDooZSx0KT0+e2NvbnN0IHI9V24oZSk7c3dpdGNoKHQpe2Nhc2UiZHVyYXRpb24iOnJldHVybiBlLmR1cmF0aW9uO2Nhc2UiY3VycmVudFRpbWUiOnJldHVybiBOdC5zKHI/Llt0XXx8MCk7Y2FzZSJwbGF5YmFja1JhdGUiOmNhc2UicGxheVN0YXRlIjpyZXR1cm4gcj8uW3RdO2Nhc2UiZmluaXNoZWQiOnJldHVybiBlLmZpbmlzaGVkfHwoZS5maW5pc2hlZD1Qcm9taXNlLmFsbChlLmFuaW1hdGlvbnMubWFwKFVuKSkuY2F0Y2goaW8pKSxlLmZpbmlzaGVkO2Nhc2Uic3RvcCI6cmV0dXJuKCk9PntlLmFuaW1hdGlvbnMuZm9yRWFjaChuPT5tbyhuKSl9O2Nhc2UiZm9yRWFjaE5hdGl2ZSI6cmV0dXJuIG49PntlLmFuaW1hdGlvbnMuZm9yRWFjaChvPT5uKG8sZSkpfTtkZWZhdWx0OnJldHVybiB0eXBlb2Ygcj8uW3RdPiJ1Ij92b2lkIDA6KCk9PmUuYW5pbWF0aW9ucy5mb3JFYWNoKG49Pm5bdF0oKSl9fSxzZXQ6KGUsdCxyKT0+e3N3aXRjaCh0KXtjYXNlImN1cnJlbnRUaW1lIjpyPU50Lm1zKHIpO2Nhc2UicGxheWJhY2tSYXRlIjpmb3IobGV0IG49MDtuPGUuYW5pbWF0aW9ucy5sZW5ndGg7bisrKWUuYW5pbWF0aW9uc1tuXVt0XT1yO3JldHVybiEwfXJldHVybiExfX0sVW49ZT0+ZS5maW5pc2hlZDtmdW5jdGlvbiBqbihlLHQscil7cmV0dXJuIEN0KGUpP2UodCxyKTplfWZ1bmN0aW9uIEhuKGUpe3JldHVybiBmdW5jdGlvbihyLG4sbz17fSl7cj1ObihyKTtjb25zdCBpPXIubGVuZ3RoLHM9W107Zm9yKGxldCBsPTA7bDxpO2wrKyl7Y29uc3QgYT1yW2xdO2Zvcihjb25zdCBjIGluIG4pe2NvbnN0IGQ9TG4obyxjKTtkLmRlbGF5PWpuKGQuZGVsYXksbCxpKTtjb25zdCBiPURuKGEsYyxuW2NdLGQsZSk7cy5wdXNoKGIpfX1yZXR1cm4gZm8ocyxvLG8uZHVyYXRpb24pfX1jb25zdCB6bj1Ibihjbyk7ZnVuY3Rpb24gRm4oZSx0PXt9KXtyZXR1cm4gZm8oWygpPT57Y29uc3Qgcj1uZXcgY28oZSxbMCwxXSx0KTtyZXR1cm4gci5maW5pc2hlZC5jYXRjaCgoKT0+e30pLHJ9XSx0LHQuZHVyYXRpb24pfWZ1bmN0aW9uIGR0KGUsdCxyKXtyZXR1cm4oQ3QoZSk/Rm46em4pKGUsdCxyKX0vKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQwogKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAqL2NvbnN0IFU9ZT0+ZT8/Qjt2YXIgS3Q9e30sVm49ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIFByb21pc2U9PSJmdW5jdGlvbiImJlByb21pc2UucHJvdG90eXBlJiZQcm9taXNlLnByb3RvdHlwZS50aGVufSxwbz17fSxGPXt9O2xldCBncjtjb25zdCBabj1bMCwyNiw0NCw3MCwxMDAsMTM0LDE3MiwxOTYsMjQyLDI5MiwzNDYsNDA0LDQ2Niw1MzIsNTgxLDY1NSw3MzMsODE1LDkwMSw5OTEsMTA4NSwxMTU2LDEyNTgsMTM2NCwxNDc0LDE1ODgsMTcwNiwxODI4LDE5MjEsMjA1MSwyMTg1LDIzMjMsMjQ2NSwyNjExLDI3NjEsMjg3NiwzMDM0LDMxOTYsMzM2MiwzNTMyLDM3MDZdO0YuZ2V0U3ltYm9sU2l6ZT1mdW5jdGlvbih0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoJyJ2ZXJzaW9uIiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQnKTtpZih0PDF8fHQ+NDApdGhyb3cgbmV3IEVycm9yKCcidmVyc2lvbiIgc2hvdWxkIGJlIGluIHJhbmdlIGZyb20gMSB0byA0MCcpO3JldHVybiB0KjQrMTd9O0YuZ2V0U3ltYm9sVG90YWxDb2Rld29yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIFpuW3RdfTtGLmdldEJDSERpZ2l0PWZ1bmN0aW9uKGUpe2xldCB0PTA7Zm9yKDtlIT09MDspdCsrLGU+Pj49MTtyZXR1cm4gdH07Ri5zZXRUb1NKSVNGdW5jdGlvbj1mdW5jdGlvbih0KXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoJyJ0b1NKSVNGdW5jIiBpcyBub3QgYSB2YWxpZCBmdW5jdGlvbi4nKTtncj10fTtGLmlzS2FuamlNb2RlRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgZ3I8InUifTtGLnRvU0pJUz1mdW5jdGlvbih0KXtyZXR1cm4gZ3IodCl9O3ZhciB3ZT17fTsoZnVuY3Rpb24oZSl7ZS5MPXtiaXQ6MX0sZS5NPXtiaXQ6MH0sZS5RPXtiaXQ6M30sZS5IPXtiaXQ6Mn07ZnVuY3Rpb24gdChyKXtpZih0eXBlb2YgciE9InN0cmluZyIpdGhyb3cgbmV3IEVycm9yKCJQYXJhbSBpcyBub3QgYSBzdHJpbmciKTtzd2l0Y2goci50b0xvd2VyQ2FzZSgpKXtjYXNlImwiOmNhc2UibG93IjpyZXR1cm4gZS5MO2Nhc2UibSI6Y2FzZSJtZWRpdW0iOnJldHVybiBlLk07Y2FzZSJxIjpjYXNlInF1YXJ0aWxlIjpyZXR1cm4gZS5RO2Nhc2UiaCI6Y2FzZSJoaWdoIjpyZXR1cm4gZS5IO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIEVDIExldmVsOiAiK3IpfX1lLmlzVmFsaWQ9ZnVuY3Rpb24obil7cmV0dXJuIG4mJnR5cGVvZiBuLmJpdDwidSImJm4uYml0Pj0wJiZuLmJpdDw0fSxlLmZyb209ZnVuY3Rpb24obixvKXtpZihlLmlzVmFsaWQobikpcmV0dXJuIG47dHJ5e3JldHVybiB0KG4pfWNhdGNoe3JldHVybiBvfX19KSh3ZSk7ZnVuY3Rpb24gZ28oKXt0aGlzLmJ1ZmZlcj1bXSx0aGlzLmxlbmd0aD0wfWdvLnByb3RvdHlwZT17Z2V0OmZ1bmN0aW9uKGUpe2NvbnN0IHQ9TWF0aC5mbG9vcihlLzgpO3JldHVybih0aGlzLmJ1ZmZlclt0XT4+PjctZSU4JjEpPT09MX0scHV0OmZ1bmN0aW9uKGUsdCl7Zm9yKGxldCByPTA7cjx0O3IrKyl0aGlzLnB1dEJpdCgoZT4+PnQtci0xJjEpPT09MSl9LGdldExlbmd0aEluQml0czpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0scHV0Qml0OmZ1bmN0aW9uKGUpe2NvbnN0IHQ9TWF0aC5mbG9vcih0aGlzLmxlbmd0aC84KTt0aGlzLmJ1ZmZlci5sZW5ndGg8PXQmJnRoaXMuYnVmZmVyLnB1c2goMCksZSYmKHRoaXMuYnVmZmVyW3RdfD0xMjg+Pj50aGlzLmxlbmd0aCU4KSx0aGlzLmxlbmd0aCsrfX07dmFyIHFuPWdvO2Z1bmN0aW9uIFl0KGUpe2lmKCFlfHxlPDEpdGhyb3cgbmV3IEVycm9yKCJCaXRNYXRyaXggc2l6ZSBtdXN0IGJlIGRlZmluZWQgYW5kIGdyZWF0ZXIgdGhhbiAwIik7dGhpcy5zaXplPWUsdGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KGUqZSksdGhpcy5yZXNlcnZlZEJpdD1uZXcgVWludDhBcnJheShlKmUpfVl0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0LHIsbil7Y29uc3Qgbz1lKnRoaXMuc2l6ZSt0O3RoaXMuZGF0YVtvXT1yLG4mJih0aGlzLnJlc2VydmVkQml0W29dPSEwKX07WXQucHJvdG90eXBlLmdldD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmRhdGFbZSp0aGlzLnNpemUrdF19O1l0LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZSx0LHIpe3RoaXMuZGF0YVtlKnRoaXMuc2l6ZSt0XV49cn07WXQucHJvdG90eXBlLmlzUmVzZXJ2ZWQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5yZXNlcnZlZEJpdFtlKnRoaXMuc2l6ZSt0XX07dmFyIEtuPVl0LHdvPXt9OyhmdW5jdGlvbihlKXtjb25zdCB0PUYuZ2V0U3ltYm9sU2l6ZTtlLmdldFJvd0NvbENvb3Jkcz1mdW5jdGlvbihuKXtpZihuPT09MSlyZXR1cm5bXTtjb25zdCBvPU1hdGguZmxvb3Iobi83KSsyLGk9dChuKSxzPWk9PT0xNDU/MjY6TWF0aC5jZWlsKChpLTEzKS8oMipvLTIpKSoyLGw9W2ktN107Zm9yKGxldCBhPTE7YTxvLTE7YSsrKWxbYV09bFthLTFdLXM7cmV0dXJuIGwucHVzaCg2KSxsLnJldmVyc2UoKX0sZS5nZXRQb3NpdGlvbnM9ZnVuY3Rpb24obil7Y29uc3Qgbz1bXSxpPWUuZ2V0Um93Q29sQ29vcmRzKG4pLHM9aS5sZW5ndGg7Zm9yKGxldCBsPTA7bDxzO2wrKylmb3IobGV0IGE9MDthPHM7YSsrKWw9PT0wJiZhPT09MHx8bD09PTAmJmE9PT1zLTF8fGw9PT1zLTEmJmE9PT0wfHxvLnB1c2goW2lbbF0saVthXV0pO3JldHVybiBvfX0pKHdvKTt2YXIgdm89e307Y29uc3QgWW49Ri5nZXRTeW1ib2xTaXplLEhyPTc7dm8uZ2V0UG9zaXRpb25zPWZ1bmN0aW9uKHQpe2NvbnN0IHI9WW4odCk7cmV0dXJuW1swLDBdLFtyLUhyLDBdLFswLHItSHJdXX07dmFyIGJvPXt9OyhmdW5jdGlvbihlKXtlLlBhdHRlcm5zPXtQQVRURVJOMDAwOjAsUEFUVEVSTjAwMToxLFBBVFRFUk4wMTA6MixQQVRURVJOMDExOjMsUEFUVEVSTjEwMDo0LFBBVFRFUk4xMDE6NSxQQVRURVJOMTEwOjYsUEFUVEVSTjExMTo3fTtjb25zdCB0PXtOMTozLE4yOjMsTjM6NDAsTjQ6MTB9O2UuaXNWYWxpZD1mdW5jdGlvbihvKXtyZXR1cm4gbyE9bnVsbCYmbyE9PSIiJiYhaXNOYU4obykmJm8+PTAmJm88PTd9LGUuZnJvbT1mdW5jdGlvbihvKXtyZXR1cm4gZS5pc1ZhbGlkKG8pP3BhcnNlSW50KG8sMTApOnZvaWQgMH0sZS5nZXRQZW5hbHR5TjE9ZnVuY3Rpb24obyl7Y29uc3QgaT1vLnNpemU7bGV0IHM9MCxsPTAsYT0wLGM9bnVsbCxkPW51bGw7Zm9yKGxldCBiPTA7YjxpO2IrKyl7bD1hPTAsYz1kPW51bGw7Zm9yKGxldCBoPTA7aDxpO2grKyl7bGV0IHA9by5nZXQoYixoKTtwPT09Yz9sKys6KGw+PTUmJihzKz10Lk4xKyhsLTUpKSxjPXAsbD0xKSxwPW8uZ2V0KGgsYikscD09PWQ/YSsrOihhPj01JiYocys9dC5OMSsoYS01KSksZD1wLGE9MSl9bD49NSYmKHMrPXQuTjErKGwtNSkpLGE+PTUmJihzKz10Lk4xKyhhLTUpKX1yZXR1cm4gc30sZS5nZXRQZW5hbHR5TjI9ZnVuY3Rpb24obyl7Y29uc3QgaT1vLnNpemU7bGV0IHM9MDtmb3IobGV0IGw9MDtsPGktMTtsKyspZm9yKGxldCBhPTA7YTxpLTE7YSsrKXtjb25zdCBjPW8uZ2V0KGwsYSkrby5nZXQobCxhKzEpK28uZ2V0KGwrMSxhKStvLmdldChsKzEsYSsxKTsoYz09PTR8fGM9PT0wKSYmcysrfXJldHVybiBzKnQuTjJ9LGUuZ2V0UGVuYWx0eU4zPWZ1bmN0aW9uKG8pe2NvbnN0IGk9by5zaXplO2xldCBzPTAsbD0wLGE9MDtmb3IobGV0IGM9MDtjPGk7YysrKXtsPWE9MDtmb3IobGV0IGQ9MDtkPGk7ZCsrKWw9bDw8MSYyMDQ3fG8uZ2V0KGMsZCksZD49MTAmJihsPT09MTQ4OHx8bD09PTkzKSYmcysrLGE9YTw8MSYyMDQ3fG8uZ2V0KGQsYyksZD49MTAmJihhPT09MTQ4OHx8YT09PTkzKSYmcysrfXJldHVybiBzKnQuTjN9LGUuZ2V0UGVuYWx0eU40PWZ1bmN0aW9uKG8pe2xldCBpPTA7Y29uc3Qgcz1vLmRhdGEubGVuZ3RoO2ZvcihsZXQgYT0wO2E8czthKyspaSs9by5kYXRhW2FdO3JldHVybiBNYXRoLmFicyhNYXRoLmNlaWwoaSoxMDAvcy81KS0xMCkqdC5ONH07ZnVuY3Rpb24gcihuLG8saSl7c3dpdGNoKG4pe2Nhc2UgZS5QYXR0ZXJucy5QQVRURVJOMDAwOnJldHVybihvK2kpJTI9PT0wO2Nhc2UgZS5QYXR0ZXJucy5QQVRURVJOMDAxOnJldHVybiBvJTI9PT0wO2Nhc2UgZS5QYXR0ZXJucy5QQVRURVJOMDEwOnJldHVybiBpJTM9PT0wO2Nhc2UgZS5QYXR0ZXJucy5QQVRURVJOMDExOnJldHVybihvK2kpJTM9PT0wO2Nhc2UgZS5QYXR0ZXJucy5QQVRURVJOMTAwOnJldHVybihNYXRoLmZsb29yKG8vMikrTWF0aC5mbG9vcihpLzMpKSUyPT09MDtjYXNlIGUuUGF0dGVybnMuUEFUVEVSTjEwMTpyZXR1cm4gbyppJTIrbyppJTM9PT0wO2Nhc2UgZS5QYXR0ZXJucy5QQVRURVJOMTEwOnJldHVybihvKmklMitvKmklMyklMj09PTA7Y2FzZSBlLlBhdHRlcm5zLlBBVFRFUk4xMTE6cmV0dXJuKG8qaSUzKyhvK2kpJTIpJTI9PT0wO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJiYWQgbWFza1BhdHRlcm46IituKX19ZS5hcHBseU1hc2s9ZnVuY3Rpb24obyxpKXtjb25zdCBzPWkuc2l6ZTtmb3IobGV0IGw9MDtsPHM7bCsrKWZvcihsZXQgYT0wO2E8czthKyspaS5pc1Jlc2VydmVkKGEsbCl8fGkueG9yKGEsbCxyKG8sYSxsKSl9LGUuZ2V0QmVzdE1hc2s9ZnVuY3Rpb24obyxpKXtjb25zdCBzPU9iamVjdC5rZXlzKGUuUGF0dGVybnMpLmxlbmd0aDtsZXQgbD0wLGE9MS8wO2ZvcihsZXQgYz0wO2M8cztjKyspe2koYyksZS5hcHBseU1hc2soYyxvKTtjb25zdCBkPWUuZ2V0UGVuYWx0eU4xKG8pK2UuZ2V0UGVuYWx0eU4yKG8pK2UuZ2V0UGVuYWx0eU4zKG8pK2UuZ2V0UGVuYWx0eU40KG8pO2UuYXBwbHlNYXNrKGMsbyksZDxhJiYoYT1kLGw9Yyl9cmV0dXJuIGx9fSkoYm8pO3ZhciB2ZT17fTtjb25zdCB0dD13ZSx0ZT1bMSwxLDEsMSwxLDEsMSwxLDEsMSwyLDIsMSwyLDIsNCwxLDIsNCw0LDIsNCw0LDQsMiw0LDYsNSwyLDQsNiw2LDIsNSw4LDgsNCw1LDgsOCw0LDUsOCwxMSw0LDgsMTAsMTEsNCw5LDEyLDE2LDQsOSwxNiwxNiw2LDEwLDEyLDE4LDYsMTAsMTcsMTYsNiwxMSwxNiwxOSw2LDEzLDE4LDIxLDcsMTQsMjEsMjUsOCwxNiwyMCwyNSw4LDE3LDIzLDI1LDksMTcsMjMsMzQsOSwxOCwyNSwzMCwxMCwyMCwyNywzMiwxMiwyMSwyOSwzNSwxMiwyMywzNCwzNywxMiwyNSwzNCw0MCwxMywyNiwzNSw0MiwxNCwyOCwzOCw0NSwxNSwyOSw0MCw0OCwxNiwzMSw0Myw1MSwxNywzMyw0NSw1NCwxOCwzNSw0OCw1NywxOSwzNyw1MSw2MCwxOSwzOCw1Myw2MywyMCw0MCw1Niw2NiwyMSw0Myw1OSw3MCwyMiw0NSw2Miw3NCwyNCw0Nyw2NSw3NywyNSw0OSw2OCw4MV0sZWU9WzcsMTAsMTMsMTcsMTAsMTYsMjIsMjgsMTUsMjYsMzYsNDQsMjAsMzYsNTIsNjQsMjYsNDgsNzIsODgsMzYsNjQsOTYsMTEyLDQwLDcyLDEwOCwxMzAsNDgsODgsMTMyLDE1Niw2MCwxMTAsMTYwLDE5Miw3MiwxMzAsMTkyLDIyNCw4MCwxNTAsMjI0LDI2NCw5NiwxNzYsMjYwLDMwOCwxMDQsMTk4LDI4OCwzNTIsMTIwLDIxNiwzMjAsMzg0LDEzMiwyNDAsMzYwLDQzMiwxNDQsMjgwLDQwOCw0ODAsMTY4LDMwOCw0NDgsNTMyLDE4MCwzMzgsNTA0LDU4OCwxOTYsMzY0LDU0Niw2NTAsMjI0LDQxNiw2MDAsNzAwLDIyNCw0NDIsNjQ0LDc1MCwyNTIsNDc2LDY5MCw4MTYsMjcwLDUwNCw3NTAsOTAwLDMwMCw1NjAsODEwLDk2MCwzMTIsNTg4LDg3MCwxMDUwLDMzNiw2NDQsOTUyLDExMTAsMzYwLDcwMCwxMDIwLDEyMDAsMzkwLDcyOCwxMDUwLDEyNjAsNDIwLDc4NCwxMTQwLDEzNTAsNDUwLDgxMiwxMjAwLDE0NDAsNDgwLDg2OCwxMjkwLDE1MzAsNTEwLDkyNCwxMzUwLDE2MjAsNTQwLDk4MCwxNDQwLDE3MTAsNTcwLDEwMzYsMTUzMCwxODAwLDU3MCwxMDY0LDE1OTAsMTg5MCw2MDAsMTEyMCwxNjgwLDE5ODAsNjMwLDEyMDQsMTc3MCwyMTAwLDY2MCwxMjYwLDE4NjAsMjIyMCw3MjAsMTMxNiwxOTUwLDIzMTAsNzUwLDEzNzIsMjA0MCwyNDMwXTt2ZS5nZXRCbG9ja3NDb3VudD1mdW5jdGlvbih0LHIpe3N3aXRjaChyKXtjYXNlIHR0Lkw6cmV0dXJuIHRlWyh0LTEpKjQrMF07Y2FzZSB0dC5NOnJldHVybiB0ZVsodC0xKSo0KzFdO2Nhc2UgdHQuUTpyZXR1cm4gdGVbKHQtMSkqNCsyXTtjYXNlIHR0Lkg6cmV0dXJuIHRlWyh0LTEpKjQrM107ZGVmYXVsdDpyZXR1cm59fTt2ZS5nZXRUb3RhbENvZGV3b3Jkc0NvdW50PWZ1bmN0aW9uKHQscil7c3dpdGNoKHIpe2Nhc2UgdHQuTDpyZXR1cm4gZWVbKHQtMSkqNCswXTtjYXNlIHR0Lk06cmV0dXJuIGVlWyh0LTEpKjQrMV07Y2FzZSB0dC5ROnJldHVybiBlZVsodC0xKSo0KzJdO2Nhc2UgdHQuSDpyZXR1cm4gZWVbKHQtMSkqNCszXTtkZWZhdWx0OnJldHVybn19O3ZhciB5bz17fSxiZT17fTtjb25zdCBCdD1uZXcgVWludDhBcnJheSg1MTIpLGNlPW5ldyBVaW50OEFycmF5KDI1Nik7KGZ1bmN0aW9uKCl7bGV0IHQ9MTtmb3IobGV0IHI9MDtyPDI1NTtyKyspQnRbcl09dCxjZVt0XT1yLHQ8PD0xLHQmMjU2JiYodF49Mjg1KTtmb3IobGV0IHI9MjU1O3I8NTEyO3IrKylCdFtyXT1CdFtyLTI1NV19KSgpO2JlLmxvZz1mdW5jdGlvbih0KXtpZih0PDEpdGhyb3cgbmV3IEVycm9yKCJsb2coIit0KyIpIik7cmV0dXJuIGNlW3RdfTtiZS5leHA9ZnVuY3Rpb24odCl7cmV0dXJuIEJ0W3RdfTtiZS5tdWw9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdD09PTB8fHI9PT0wPzA6QnRbY2VbdF0rY2Vbcl1dfTsoZnVuY3Rpb24oZSl7Y29uc3QgdD1iZTtlLm11bD1mdW5jdGlvbihuLG8pe2NvbnN0IGk9bmV3IFVpbnQ4QXJyYXkobi5sZW5ndGgrby5sZW5ndGgtMSk7Zm9yKGxldCBzPTA7czxuLmxlbmd0aDtzKyspZm9yKGxldCBsPTA7bDxvLmxlbmd0aDtsKyspaVtzK2xdXj10Lm11bChuW3NdLG9bbF0pO3JldHVybiBpfSxlLm1vZD1mdW5jdGlvbihuLG8pe2xldCBpPW5ldyBVaW50OEFycmF5KG4pO2Zvcig7aS5sZW5ndGgtby5sZW5ndGg+PTA7KXtjb25zdCBzPWlbMF07Zm9yKGxldCBhPTA7YTxvLmxlbmd0aDthKyspaVthXV49dC5tdWwob1thXSxzKTtsZXQgbD0wO2Zvcig7bDxpLmxlbmd0aCYmaVtsXT09PTA7KWwrKztpPWkuc2xpY2UobCl9cmV0dXJuIGl9LGUuZ2VuZXJhdGVFQ1BvbHlub21pYWw9ZnVuY3Rpb24obil7bGV0IG89bmV3IFVpbnQ4QXJyYXkoWzFdKTtmb3IobGV0IGk9MDtpPG47aSsrKW89ZS5tdWwobyxuZXcgVWludDhBcnJheShbMSx0LmV4cChpKV0pKTtyZXR1cm4gb319KSh5byk7Y29uc3QgeG89eW87ZnVuY3Rpb24gd3IoZSl7dGhpcy5nZW5Qb2x5PXZvaWQgMCx0aGlzLmRlZ3JlZT1lLHRoaXMuZGVncmVlJiZ0aGlzLmluaXRpYWxpemUodGhpcy5kZWdyZWUpfXdyLnByb3RvdHlwZS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3RoaXMuZGVncmVlPXQsdGhpcy5nZW5Qb2x5PXhvLmdlbmVyYXRlRUNQb2x5bm9taWFsKHRoaXMuZGVncmVlKX07d3IucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih0KXtpZighdGhpcy5nZW5Qb2x5KXRocm93IG5ldyBFcnJvcigiRW5jb2RlciBub3QgaW5pdGlhbGl6ZWQiKTtjb25zdCByPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoK3RoaXMuZGVncmVlKTtyLnNldCh0KTtjb25zdCBuPXhvLm1vZChyLHRoaXMuZ2VuUG9seSksbz10aGlzLmRlZ3JlZS1uLmxlbmd0aDtpZihvPjApe2NvbnN0IGk9bmV3IFVpbnQ4QXJyYXkodGhpcy5kZWdyZWUpO3JldHVybiBpLnNldChuLG8pLGl9cmV0dXJuIG59O3ZhciBRbj13ciwkbz17fSxzdD17fSx2cj17fTt2ci5pc1ZhbGlkPWZ1bmN0aW9uKHQpe3JldHVybiFpc05hTih0KSYmdD49MSYmdDw9NDB9O3ZhciBLPXt9O2NvbnN0IF9vPSJbMC05XSsiLEduPSJbQS1aICQlKitcXC0uLzpdKyI7bGV0IEh0PSIoPzpbdTMwMDAtdTMwM0ZdfFt1MzA0MC11MzA5Rl18W3UzMEEwLXUzMEZGXXxbdUZGMDAtdUZGRUZdfFt1NEUwMC11OUZBRl18W3UyNjA1LXUyNjA2XXxbdTIxOTAtdTIxOTVdfHUyMDNCfFt1MjAxMHUyMDE1dTIwMTh1MjAxOXUyMDI1dTIwMjZ1MjAxQ3UyMDFEdTIyMjV1MjI2MF18W3UwMzkxLXUwNDUxXXxbdTAwQTd1MDBBOHUwMEIxdTAwQjR1MDBEN3UwMEY3XSkrIjtIdD1IdC5yZXBsYWNlKC91L2csIlxcdSIpO2NvbnN0IEpuPSIoPzooPyFbQS1aMC05ICQlKitcXC0uLzpdfCIrSHQrYCkoPzoufFtccgpdKSkrYDtLLktBTkpJPW5ldyBSZWdFeHAoSHQsImciKTtLLkJZVEVfS0FOSkk9bmV3IFJlZ0V4cCgiW15BLVowLTkgJCUqK1xcLS4vOl0rIiwiZyIpO0suQllURT1uZXcgUmVnRXhwKEpuLCJnIik7Sy5OVU1FUklDPW5ldyBSZWdFeHAoX28sImciKTtLLkFMUEhBTlVNRVJJQz1uZXcgUmVnRXhwKEduLCJnIik7Y29uc3QgWG49bmV3IFJlZ0V4cCgiXiIrSHQrIiQiKSx0aT1uZXcgUmVnRXhwKCJeIitfbysiJCIpLGVpPW5ldyBSZWdFeHAoIl5bQS1aMC05ICQlKitcXC0uLzpdKyQiKTtLLnRlc3RLYW5qaT1mdW5jdGlvbih0KXtyZXR1cm4gWG4udGVzdCh0KX07Sy50ZXN0TnVtZXJpYz1mdW5jdGlvbih0KXtyZXR1cm4gdGkudGVzdCh0KX07Sy50ZXN0QWxwaGFudW1lcmljPWZ1bmN0aW9uKHQpe3JldHVybiBlaS50ZXN0KHQpfTsoZnVuY3Rpb24oZSl7Y29uc3QgdD12cixyPUs7ZS5OVU1FUklDPXtpZDoiTnVtZXJpYyIsYml0OjEsY2NCaXRzOlsxMCwxMiwxNF19LGUuQUxQSEFOVU1FUklDPXtpZDoiQWxwaGFudW1lcmljIixiaXQ6MixjY0JpdHM6WzksMTEsMTNdfSxlLkJZVEU9e2lkOiJCeXRlIixiaXQ6NCxjY0JpdHM6WzgsMTYsMTZdfSxlLktBTkpJPXtpZDoiS2FuamkiLGJpdDo4LGNjQml0czpbOCwxMCwxMl19LGUuTUlYRUQ9e2JpdDotMX0sZS5nZXRDaGFyQ291bnRJbmRpY2F0b3I9ZnVuY3Rpb24oaSxzKXtpZighaS5jY0JpdHMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1vZGU6ICIraSk7aWYoIXQuaXNWYWxpZChzKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmVyc2lvbjogIitzKTtyZXR1cm4gcz49MSYmczwxMD9pLmNjQml0c1swXTpzPDI3P2kuY2NCaXRzWzFdOmkuY2NCaXRzWzJdfSxlLmdldEJlc3RNb2RlRm9yRGF0YT1mdW5jdGlvbihpKXtyZXR1cm4gci50ZXN0TnVtZXJpYyhpKT9lLk5VTUVSSUM6ci50ZXN0QWxwaGFudW1lcmljKGkpP2UuQUxQSEFOVU1FUklDOnIudGVzdEthbmppKGkpP2UuS0FOSkk6ZS5CWVRFfSxlLnRvU3RyaW5nPWZ1bmN0aW9uKGkpe2lmKGkmJmkuaWQpcmV0dXJuIGkuaWQ7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1vZGUiKX0sZS5pc1ZhbGlkPWZ1bmN0aW9uKGkpe3JldHVybiBpJiZpLmJpdCYmaS5jY0JpdHN9O2Z1bmN0aW9uIG4obyl7aWYodHlwZW9mIG8hPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiUGFyYW0gaXMgbm90IGEgc3RyaW5nIik7c3dpdGNoKG8udG9Mb3dlckNhc2UoKSl7Y2FzZSJudW1lcmljIjpyZXR1cm4gZS5OVU1FUklDO2Nhc2UiYWxwaGFudW1lcmljIjpyZXR1cm4gZS5BTFBIQU5VTUVSSUM7Y2FzZSJrYW5qaSI6cmV0dXJuIGUuS0FOSkk7Y2FzZSJieXRlIjpyZXR1cm4gZS5CWVRFO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1vZGU6ICIrbyl9fWUuZnJvbT1mdW5jdGlvbihpLHMpe2lmKGUuaXNWYWxpZChpKSlyZXR1cm4gaTt0cnl7cmV0dXJuIG4oaSl9Y2F0Y2h7cmV0dXJuIHN9fX0pKHN0KTsoZnVuY3Rpb24oZSl7Y29uc3QgdD1GLHI9dmUsbj13ZSxvPXN0LGk9dnIscz03OTczLGw9dC5nZXRCQ0hEaWdpdChzKTtmdW5jdGlvbiBhKGgscCxnKXtmb3IobGV0IGY9MTtmPD00MDtmKyspaWYocDw9ZS5nZXRDYXBhY2l0eShmLGcsaCkpcmV0dXJuIGZ9ZnVuY3Rpb24gYyhoLHApe3JldHVybiBvLmdldENoYXJDb3VudEluZGljYXRvcihoLHApKzR9ZnVuY3Rpb24gZChoLHApe2xldCBnPTA7cmV0dXJuIGguZm9yRWFjaChmdW5jdGlvbihmKXtjb25zdCBBPWMoZi5tb2RlLHApO2crPUErZi5nZXRCaXRzTGVuZ3RoKCl9KSxnfWZ1bmN0aW9uIGIoaCxwKXtmb3IobGV0IGc9MTtnPD00MDtnKyspaWYoZChoLGcpPD1lLmdldENhcGFjaXR5KGcscCxvLk1JWEVEKSlyZXR1cm4gZ31lLmZyb209ZnVuY3Rpb24ocCxnKXtyZXR1cm4gaS5pc1ZhbGlkKHApP3BhcnNlSW50KHAsMTApOmd9LGUuZ2V0Q2FwYWNpdHk9ZnVuY3Rpb24ocCxnLGYpe2lmKCFpLmlzVmFsaWQocCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFFSIENvZGUgdmVyc2lvbiIpO3R5cGVvZiBmPiJ1IiYmKGY9by5CWVRFKTtjb25zdCBBPXQuZ2V0U3ltYm9sVG90YWxDb2Rld29yZHMocCksdT1yLmdldFRvdGFsQ29kZXdvcmRzQ291bnQocCxnKSx5PShBLXUpKjg7aWYoZj09PW8uTUlYRUQpcmV0dXJuIHk7Y29uc3Qgdz15LWMoZixwKTtzd2l0Y2goZil7Y2FzZSBvLk5VTUVSSUM6cmV0dXJuIE1hdGguZmxvb3Iody8xMCozKTtjYXNlIG8uQUxQSEFOVU1FUklDOnJldHVybiBNYXRoLmZsb29yKHcvMTEqMik7Y2FzZSBvLktBTkpJOnJldHVybiBNYXRoLmZsb29yKHcvMTMpO2Nhc2Ugby5CWVRFOmRlZmF1bHQ6cmV0dXJuIE1hdGguZmxvb3Iody84KX19LGUuZ2V0QmVzdFZlcnNpb25Gb3JEYXRhPWZ1bmN0aW9uKHAsZyl7bGV0IGY7Y29uc3QgQT1uLmZyb20oZyxuLk0pO2lmKEFycmF5LmlzQXJyYXkocCkpe2lmKHAubGVuZ3RoPjEpcmV0dXJuIGIocCxBKTtpZihwLmxlbmd0aD09PTApcmV0dXJuIDE7Zj1wWzBdfWVsc2UgZj1wO3JldHVybiBhKGYubW9kZSxmLmdldExlbmd0aCgpLEEpfSxlLmdldEVuY29kZWRCaXRzPWZ1bmN0aW9uKHApe2lmKCFpLmlzVmFsaWQocCl8fHA8Nyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgUVIgQ29kZSB2ZXJzaW9uIik7bGV0IGc9cDw8MTI7Zm9yKDt0LmdldEJDSERpZ2l0KGcpLWw+PTA7KWdePXM8PHQuZ2V0QkNIRGlnaXQoZyktbDtyZXR1cm4gcDw8MTJ8Z319KSgkbyk7dmFyIENvPXt9O2NvbnN0IHFlPUYsRW89MTMzNSxyaT0yMTUyMix6cj1xZS5nZXRCQ0hEaWdpdChFbyk7Q28uZ2V0RW5jb2RlZEJpdHM9ZnVuY3Rpb24odCxyKXtjb25zdCBuPXQuYml0PDwzfHI7bGV0IG89bjw8MTA7Zm9yKDtxZS5nZXRCQ0hEaWdpdChvKS16cj49MDspb149RW88PHFlLmdldEJDSERpZ2l0KG8pLXpyO3JldHVybihuPDwxMHxvKV5yaX07dmFyIEFvPXt9O2NvbnN0IG9pPXN0O2Z1bmN0aW9uIEV0KGUpe3RoaXMubW9kZT1vaS5OVU1FUklDLHRoaXMuZGF0YT1lLnRvU3RyaW5nKCl9RXQuZ2V0Qml0c0xlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gMTAqTWF0aC5mbG9vcih0LzMpKyh0JTM/dCUzKjMrMTowKX07RXQucHJvdG90eXBlLmdldExlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEubGVuZ3RofTtFdC5wcm90b3R5cGUuZ2V0Qml0c0xlbmd0aD1mdW5jdGlvbigpe3JldHVybiBFdC5nZXRCaXRzTGVuZ3RoKHRoaXMuZGF0YS5sZW5ndGgpfTtFdC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCl7bGV0IHIsbixvO2ZvcihyPTA7ciszPD10aGlzLmRhdGEubGVuZ3RoO3IrPTMpbj10aGlzLmRhdGEuc3Vic3RyKHIsMyksbz1wYXJzZUludChuLDEwKSx0LnB1dChvLDEwKTtjb25zdCBpPXRoaXMuZGF0YS5sZW5ndGgtcjtpPjAmJihuPXRoaXMuZGF0YS5zdWJzdHIociksbz1wYXJzZUludChuLDEwKSx0LnB1dChvLGkqMysxKSl9O3ZhciBuaT1FdDtjb25zdCBpaT1zdCxSZT1bIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsIiAiLCIkIiwiJSIsIioiLCIrIiwiLSIsIi4iLCIvIiwiOiJdO2Z1bmN0aW9uIEF0KGUpe3RoaXMubW9kZT1paS5BTFBIQU5VTUVSSUMsdGhpcy5kYXRhPWV9QXQuZ2V0Qml0c0xlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gMTEqTWF0aC5mbG9vcih0LzIpKzYqKHQlMil9O0F0LnByb3RvdHlwZS5nZXRMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmxlbmd0aH07QXQucHJvdG90eXBlLmdldEJpdHNMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gQXQuZ2V0Qml0c0xlbmd0aCh0aGlzLmRhdGEubGVuZ3RoKX07QXQucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQpe2xldCByO2ZvcihyPTA7cisyPD10aGlzLmRhdGEubGVuZ3RoO3IrPTIpe2xldCBuPVJlLmluZGV4T2YodGhpcy5kYXRhW3JdKSo0NTtuKz1SZS5pbmRleE9mKHRoaXMuZGF0YVtyKzFdKSx0LnB1dChuLDExKX10aGlzLmRhdGEubGVuZ3RoJTImJnQucHV0KFJlLmluZGV4T2YodGhpcy5kYXRhW3JdKSw2KX07dmFyIHNpPUF0LGxpPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxuPXQubGVuZ3RoLG89MDtvPG47bysrKXt2YXIgaT10LmNoYXJDb2RlQXQobyk7aWYoaT49NTUyOTYmJmk8PTU2MzE5JiZuPm8rMSl7dmFyIHM9dC5jaGFyQ29kZUF0KG8rMSk7cz49NTYzMjAmJnM8PTU3MzQzJiYoaT0oaS01NTI5NikqMTAyNCtzLTU2MzIwKzY1NTM2LG8rPTEpfWlmKGk8MTI4KXtyLnB1c2goaSk7Y29udGludWV9aWYoaTwyMDQ4KXtyLnB1c2goaT4+NnwxOTIpLHIucHVzaChpJjYzfDEyOCk7Y29udGludWV9aWYoaTw1NTI5Nnx8aT49NTczNDQmJmk8NjU1MzYpe3IucHVzaChpPj4xMnwyMjQpLHIucHVzaChpPj42JjYzfDEyOCksci5wdXNoKGkmNjN8MTI4KTtjb250aW51ZX1pZihpPj02NTUzNiYmaTw9MTExNDExMSl7ci5wdXNoKGk+PjE4fDI0MCksci5wdXNoKGk+PjEyJjYzfDEyOCksci5wdXNoKGk+PjYmNjN8MTI4KSxyLnB1c2goaSY2M3wxMjgpO2NvbnRpbnVlfXIucHVzaCgyMzksMTkxLDE4OSl9cmV0dXJuIG5ldyBVaW50OEFycmF5KHIpLmJ1ZmZlcn07Y29uc3QgYWk9bGksY2k9c3Q7ZnVuY3Rpb24gT3QoZSl7dGhpcy5tb2RlPWNpLkJZVEUsdHlwZW9mIGU9PSJzdHJpbmciJiYoZT1haShlKSksdGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KGUpfU90LmdldEJpdHNMZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIHQqOH07T3QucHJvdG90eXBlLmdldExlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEubGVuZ3RofTtPdC5wcm90b3R5cGUuZ2V0Qml0c0xlbmd0aD1mdW5jdGlvbigpe3JldHVybiBPdC5nZXRCaXRzTGVuZ3RoKHRoaXMuZGF0YS5sZW5ndGgpfTtPdC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSl7Zm9yKGxldCB0PTAscj10aGlzLmRhdGEubGVuZ3RoO3Q8cjt0KyspZS5wdXQodGhpcy5kYXRhW3RdLDgpfTt2YXIgZGk9T3Q7Y29uc3QgaGk9c3QsdWk9RjtmdW5jdGlvbiBJdChlKXt0aGlzLm1vZGU9aGkuS0FOSkksdGhpcy5kYXRhPWV9SXQuZ2V0Qml0c0xlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gdCoxM307SXQucHJvdG90eXBlLmdldExlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEubGVuZ3RofTtJdC5wcm90b3R5cGUuZ2V0Qml0c0xlbmd0aD1mdW5jdGlvbigpe3JldHVybiBJdC5nZXRCaXRzTGVuZ3RoKHRoaXMuZGF0YS5sZW5ndGgpfTtJdC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSl7bGV0IHQ7Zm9yKHQ9MDt0PHRoaXMuZGF0YS5sZW5ndGg7dCsrKXtsZXQgcj11aS50b1NKSVModGhpcy5kYXRhW3RdKTtpZihyPj0zMzA4OCYmcjw9NDA5NTYpci09MzMwODg7ZWxzZSBpZihyPj01NzQwOCYmcjw9NjAzNTEpci09NDk0NzI7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgU0pJUyBjaGFyYWN0ZXI6ICIrdGhpcy5kYXRhW3RdK2AKTWFrZSBzdXJlIHlvdXIgY2hhcnNldCBpcyBVVEYtOGApO3I9KHI+Pj44JjI1NSkqMTkyKyhyJjI1NSksZS5wdXQociwxMyl9fTt2YXIgbWk9SXQsT289e2V4cG9ydHM6e319OyhmdW5jdGlvbihlKXt2YXIgdD17c2luZ2xlX3NvdXJjZV9zaG9ydGVzdF9wYXRoczpmdW5jdGlvbihyLG4sbyl7dmFyIGk9e30scz17fTtzW25dPTA7dmFyIGw9dC5Qcmlvcml0eVF1ZXVlLm1ha2UoKTtsLnB1c2gobiwwKTtmb3IodmFyIGEsYyxkLGIsaCxwLGcsZixBOyFsLmVtcHR5KCk7KXthPWwucG9wKCksYz1hLnZhbHVlLGI9YS5jb3N0LGg9cltjXXx8e307Zm9yKGQgaW4gaCloLmhhc093blByb3BlcnR5KGQpJiYocD1oW2RdLGc9YitwLGY9c1tkXSxBPXR5cGVvZiBzW2RdPiJ1IiwoQXx8Zj5nKSYmKHNbZF09ZyxsLnB1c2goZCxnKSxpW2RdPWMpKX1pZih0eXBlb2YgbzwidSImJnR5cGVvZiBzW29dPiJ1Iil7dmFyIHU9WyJDb3VsZCBub3QgZmluZCBhIHBhdGggZnJvbSAiLG4sIiB0byAiLG8sIi4iXS5qb2luKCIiKTt0aHJvdyBuZXcgRXJyb3IodSl9cmV0dXJuIGl9LGV4dHJhY3Rfc2hvcnRlc3RfcGF0aF9mcm9tX3ByZWRlY2Vzc29yX2xpc3Q6ZnVuY3Rpb24ocixuKXtmb3IodmFyIG89W10saT1uO2k7KW8ucHVzaChpKSxyW2ldLGk9cltpXTtyZXR1cm4gby5yZXZlcnNlKCksb30sZmluZF9wYXRoOmZ1bmN0aW9uKHIsbixvKXt2YXIgaT10LnNpbmdsZV9zb3VyY2Vfc2hvcnRlc3RfcGF0aHMocixuLG8pO3JldHVybiB0LmV4dHJhY3Rfc2hvcnRlc3RfcGF0aF9mcm9tX3ByZWRlY2Vzc29yX2xpc3QoaSxvKX0sUHJpb3JpdHlRdWV1ZTp7bWFrZTpmdW5jdGlvbihyKXt2YXIgbj10LlByaW9yaXR5UXVldWUsbz17fSxpO3I9cnx8e307Zm9yKGkgaW4gbiluLmhhc093blByb3BlcnR5KGkpJiYob1tpXT1uW2ldKTtyZXR1cm4gby5xdWV1ZT1bXSxvLnNvcnRlcj1yLnNvcnRlcnx8bi5kZWZhdWx0X3NvcnRlcixvfSxkZWZhdWx0X3NvcnRlcjpmdW5jdGlvbihyLG4pe3JldHVybiByLmNvc3Qtbi5jb3N0fSxwdXNoOmZ1bmN0aW9uKHIsbil7dmFyIG89e3ZhbHVlOnIsY29zdDpufTt0aGlzLnF1ZXVlLnB1c2gobyksdGhpcy5xdWV1ZS5zb3J0KHRoaXMuc29ydGVyKX0scG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVldWUuc2hpZnQoKX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWV1ZS5sZW5ndGg9PT0wfX19O2UuZXhwb3J0cz10fSkoT28pO3ZhciBmaT1Pby5leHBvcnRzOyhmdW5jdGlvbihlKXtjb25zdCB0PXN0LHI9bmksbj1zaSxvPWRpLGk9bWkscz1LLGw9RixhPWZpO2Z1bmN0aW9uIGModSl7cmV0dXJuIHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudCh1KSkubGVuZ3RofWZ1bmN0aW9uIGQodSx5LHcpe2NvbnN0IHY9W107bGV0IEM7Zm9yKDsoQz11LmV4ZWModykpIT09bnVsbDspdi5wdXNoKHtkYXRhOkNbMF0saW5kZXg6Qy5pbmRleCxtb2RlOnksbGVuZ3RoOkNbMF0ubGVuZ3RofSk7cmV0dXJuIHZ9ZnVuY3Rpb24gYih1KXtjb25zdCB5PWQocy5OVU1FUklDLHQuTlVNRVJJQyx1KSx3PWQocy5BTFBIQU5VTUVSSUMsdC5BTFBIQU5VTUVSSUMsdSk7bGV0IHYsQztyZXR1cm4gbC5pc0thbmppTW9kZUVuYWJsZWQoKT8odj1kKHMuQllURSx0LkJZVEUsdSksQz1kKHMuS0FOSkksdC5LQU5KSSx1KSk6KHY9ZChzLkJZVEVfS0FOSkksdC5CWVRFLHUpLEM9W10pLHkuY29uY2F0KHcsdixDKS5zb3J0KGZ1bmN0aW9uKFIsayl7cmV0dXJuIFIuaW5kZXgtay5pbmRleH0pLm1hcChmdW5jdGlvbihSKXtyZXR1cm57ZGF0YTpSLmRhdGEsbW9kZTpSLm1vZGUsbGVuZ3RoOlIubGVuZ3RofX0pfWZ1bmN0aW9uIGgodSx5KXtzd2l0Y2goeSl7Y2FzZSB0Lk5VTUVSSUM6cmV0dXJuIHIuZ2V0Qml0c0xlbmd0aCh1KTtjYXNlIHQuQUxQSEFOVU1FUklDOnJldHVybiBuLmdldEJpdHNMZW5ndGgodSk7Y2FzZSB0LktBTkpJOnJldHVybiBpLmdldEJpdHNMZW5ndGgodSk7Y2FzZSB0LkJZVEU6cmV0dXJuIG8uZ2V0Qml0c0xlbmd0aCh1KX19ZnVuY3Rpb24gcCh1KXtyZXR1cm4gdS5yZWR1Y2UoZnVuY3Rpb24oeSx3KXtjb25zdCB2PXkubGVuZ3RoLTE+PTA/eVt5Lmxlbmd0aC0xXTpudWxsO3JldHVybiB2JiZ2Lm1vZGU9PT13Lm1vZGU/KHlbeS5sZW5ndGgtMV0uZGF0YSs9dy5kYXRhLHkpOih5LnB1c2godykseSl9LFtdKX1mdW5jdGlvbiBnKHUpe2NvbnN0IHk9W107Zm9yKGxldCB3PTA7dzx1Lmxlbmd0aDt3Kyspe2NvbnN0IHY9dVt3XTtzd2l0Y2godi5tb2RlKXtjYXNlIHQuTlVNRVJJQzp5LnB1c2goW3Yse2RhdGE6di5kYXRhLG1vZGU6dC5BTFBIQU5VTUVSSUMsbGVuZ3RoOnYubGVuZ3RofSx7ZGF0YTp2LmRhdGEsbW9kZTp0LkJZVEUsbGVuZ3RoOnYubGVuZ3RofV0pO2JyZWFrO2Nhc2UgdC5BTFBIQU5VTUVSSUM6eS5wdXNoKFt2LHtkYXRhOnYuZGF0YSxtb2RlOnQuQllURSxsZW5ndGg6di5sZW5ndGh9XSk7YnJlYWs7Y2FzZSB0LktBTkpJOnkucHVzaChbdix7ZGF0YTp2LmRhdGEsbW9kZTp0LkJZVEUsbGVuZ3RoOmModi5kYXRhKX1dKTticmVhaztjYXNlIHQuQllURTp5LnB1c2goW3tkYXRhOnYuZGF0YSxtb2RlOnQuQllURSxsZW5ndGg6Yyh2LmRhdGEpfV0pfX1yZXR1cm4geX1mdW5jdGlvbiBmKHUseSl7Y29uc3Qgdz17fSx2PXtzdGFydDp7fX07bGV0IEM9WyJzdGFydCJdO2ZvcihsZXQgUz0wO1M8dS5sZW5ndGg7UysrKXtjb25zdCBSPXVbU10saz1bXTtmb3IobGV0IE09MDtNPFIubGVuZ3RoO00rKyl7Y29uc3Qgej1SW01dLEQ9IiIrUytNO2sucHVzaChEKSx3W0RdPXtub2RlOnosbGFzdENvdW50OjB9LHZbRF09e307Zm9yKGxldCBZPTA7WTxDLmxlbmd0aDtZKyspe2NvbnN0IFc9Q1tZXTt3W1ddJiZ3W1ddLm5vZGUubW9kZT09PXoubW9kZT8odltXXVtEXT1oKHdbV10ubGFzdENvdW50K3oubGVuZ3RoLHoubW9kZSktaCh3W1ddLmxhc3RDb3VudCx6Lm1vZGUpLHdbV10ubGFzdENvdW50Kz16Lmxlbmd0aCk6KHdbV10mJih3W1ddLmxhc3RDb3VudD16Lmxlbmd0aCksdltXXVtEXT1oKHoubGVuZ3RoLHoubW9kZSkrNCt0LmdldENoYXJDb3VudEluZGljYXRvcih6Lm1vZGUseSkpfX1DPWt9Zm9yKGxldCBTPTA7UzxDLmxlbmd0aDtTKyspdltDW1NdXS5lbmQ9MDtyZXR1cm57bWFwOnYsdGFibGU6d319ZnVuY3Rpb24gQSh1LHkpe2xldCB3O2NvbnN0IHY9dC5nZXRCZXN0TW9kZUZvckRhdGEodSk7aWYodz10LmZyb20oeSx2KSx3IT09dC5CWVRFJiZ3LmJpdDx2LmJpdCl0aHJvdyBuZXcgRXJyb3IoJyInK3UrJyIgY2Fubm90IGJlIGVuY29kZWQgd2l0aCBtb2RlICcrdC50b1N0cmluZyh3KStgLgogU3VnZ2VzdGVkIG1vZGUgaXM6IGArdC50b1N0cmluZyh2KSk7c3dpdGNoKHc9PT10LktBTkpJJiYhbC5pc0thbmppTW9kZUVuYWJsZWQoKSYmKHc9dC5CWVRFKSx3KXtjYXNlIHQuTlVNRVJJQzpyZXR1cm4gbmV3IHIodSk7Y2FzZSB0LkFMUEhBTlVNRVJJQzpyZXR1cm4gbmV3IG4odSk7Y2FzZSB0LktBTkpJOnJldHVybiBuZXcgaSh1KTtjYXNlIHQuQllURTpyZXR1cm4gbmV3IG8odSl9fWUuZnJvbUFycmF5PWZ1bmN0aW9uKHkpe3JldHVybiB5LnJlZHVjZShmdW5jdGlvbih3LHYpe3JldHVybiB0eXBlb2Ygdj09InN0cmluZyI/dy5wdXNoKEEodixudWxsKSk6di5kYXRhJiZ3LnB1c2goQSh2LmRhdGEsdi5tb2RlKSksd30sW10pfSxlLmZyb21TdHJpbmc9ZnVuY3Rpb24oeSx3KXtjb25zdCB2PWIoeSxsLmlzS2FuamlNb2RlRW5hYmxlZCgpKSxDPWcodiksUz1mKEMsdyksUj1hLmZpbmRfcGF0aChTLm1hcCwic3RhcnQiLCJlbmQiKSxrPVtdO2ZvcihsZXQgTT0xO008Ui5sZW5ndGgtMTtNKyspay5wdXNoKFMudGFibGVbUltNXV0ubm9kZSk7cmV0dXJuIGUuZnJvbUFycmF5KHAoaykpfSxlLnJhd1NwbGl0PWZ1bmN0aW9uKHkpe3JldHVybiBlLmZyb21BcnJheShiKHksbC5pc0thbmppTW9kZUVuYWJsZWQoKSkpfX0pKEFvKTtjb25zdCB5ZT1GLERlPXdlLHBpPXFuLGdpPUtuLHdpPXdvLHZpPXZvLEtlPWJvLFllPXZlLGJpPVFuLGRlPSRvLHlpPUNvLHhpPXN0LExlPUFvO2Z1bmN0aW9uICRpKGUsdCl7Y29uc3Qgcj1lLnNpemUsbj12aS5nZXRQb3NpdGlvbnModCk7Zm9yKGxldCBvPTA7bzxuLmxlbmd0aDtvKyspe2NvbnN0IGk9bltvXVswXSxzPW5bb11bMV07Zm9yKGxldCBsPS0xO2w8PTc7bCsrKWlmKCEoaStsPD0tMXx8cjw9aStsKSlmb3IobGV0IGE9LTE7YTw9NzthKyspcythPD0tMXx8cjw9cythfHwobD49MCYmbDw9NiYmKGE9PT0wfHxhPT09Nil8fGE+PTAmJmE8PTYmJihsPT09MHx8bD09PTYpfHxsPj0yJiZsPD00JiZhPj0yJiZhPD00P2Uuc2V0KGkrbCxzK2EsITAsITApOmUuc2V0KGkrbCxzK2EsITEsITApKX19ZnVuY3Rpb24gX2koZSl7Y29uc3QgdD1lLnNpemU7Zm9yKGxldCByPTg7cjx0LTg7cisrKXtjb25zdCBuPXIlMj09PTA7ZS5zZXQociw2LG4sITApLGUuc2V0KDYscixuLCEwKX19ZnVuY3Rpb24gQ2koZSx0KXtjb25zdCByPXdpLmdldFBvc2l0aW9ucyh0KTtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKyl7Y29uc3Qgbz1yW25dWzBdLGk9cltuXVsxXTtmb3IobGV0IHM9LTI7czw9MjtzKyspZm9yKGxldCBsPS0yO2w8PTI7bCsrKXM9PT0tMnx8cz09PTJ8fGw9PT0tMnx8bD09PTJ8fHM9PT0wJiZsPT09MD9lLnNldChvK3MsaStsLCEwLCEwKTplLnNldChvK3MsaStsLCExLCEwKX19ZnVuY3Rpb24gRWkoZSx0KXtjb25zdCByPWUuc2l6ZSxuPWRlLmdldEVuY29kZWRCaXRzKHQpO2xldCBvLGkscztmb3IobGV0IGw9MDtsPDE4O2wrKylvPU1hdGguZmxvb3IobC8zKSxpPWwlMytyLTgtMyxzPShuPj5sJjEpPT09MSxlLnNldChvLGkscywhMCksZS5zZXQoaSxvLHMsITApfWZ1bmN0aW9uIE5lKGUsdCxyKXtjb25zdCBuPWUuc2l6ZSxvPXlpLmdldEVuY29kZWRCaXRzKHQscik7bGV0IGkscztmb3IoaT0wO2k8MTU7aSsrKXM9KG8+PmkmMSk9PT0xLGk8Nj9lLnNldChpLDgscywhMCk6aTw4P2Uuc2V0KGkrMSw4LHMsITApOmUuc2V0KG4tMTUraSw4LHMsITApLGk8OD9lLnNldCg4LG4taS0xLHMsITApOmk8OT9lLnNldCg4LDE1LWktMSsxLHMsITApOmUuc2V0KDgsMTUtaS0xLHMsITApO2Uuc2V0KG4tOCw4LDEsITApfWZ1bmN0aW9uIEFpKGUsdCl7Y29uc3Qgcj1lLnNpemU7bGV0IG49LTEsbz1yLTEsaT03LHM9MDtmb3IobGV0IGw9ci0xO2w+MDtsLT0yKWZvcihsPT09NiYmbC0tOzspe2ZvcihsZXQgYT0wO2E8MjthKyspaWYoIWUuaXNSZXNlcnZlZChvLGwtYSkpe2xldCBjPSExO3M8dC5sZW5ndGgmJihjPSh0W3NdPj4+aSYxKT09PTEpLGUuc2V0KG8sbC1hLGMpLGktLSxpPT09LTEmJihzKyssaT03KX1pZihvKz1uLG88MHx8cjw9byl7by09bixuPS1uO2JyZWFrfX19ZnVuY3Rpb24gT2koZSx0LHIpe2NvbnN0IG49bmV3IHBpO3IuZm9yRWFjaChmdW5jdGlvbihhKXtuLnB1dChhLm1vZGUuYml0LDQpLG4ucHV0KGEuZ2V0TGVuZ3RoKCkseGkuZ2V0Q2hhckNvdW50SW5kaWNhdG9yKGEubW9kZSxlKSksYS53cml0ZShuKX0pO2NvbnN0IG89eWUuZ2V0U3ltYm9sVG90YWxDb2Rld29yZHMoZSksaT1ZZS5nZXRUb3RhbENvZGV3b3Jkc0NvdW50KGUsdCkscz0oby1pKSo4O2ZvcihuLmdldExlbmd0aEluQml0cygpKzQ8PXMmJm4ucHV0KDAsNCk7bi5nZXRMZW5ndGhJbkJpdHMoKSU4IT09MDspbi5wdXRCaXQoMCk7Y29uc3QgbD0ocy1uLmdldExlbmd0aEluQml0cygpKS84O2ZvcihsZXQgYT0wO2E8bDthKyspbi5wdXQoYSUyPzE3OjIzNiw4KTtyZXR1cm4gSWkobixlLHQpfWZ1bmN0aW9uIElpKGUsdCxyKXtjb25zdCBuPXllLmdldFN5bWJvbFRvdGFsQ29kZXdvcmRzKHQpLG89WWUuZ2V0VG90YWxDb2Rld29yZHNDb3VudCh0LHIpLGk9bi1vLHM9WWUuZ2V0QmxvY2tzQ291bnQodCxyKSxsPW4lcyxhPXMtbCxjPU1hdGguZmxvb3Iobi9zKSxkPU1hdGguZmxvb3IoaS9zKSxiPWQrMSxoPWMtZCxwPW5ldyBiaShoKTtsZXQgZz0wO2NvbnN0IGY9bmV3IEFycmF5KHMpLEE9bmV3IEFycmF5KHMpO2xldCB1PTA7Y29uc3QgeT1uZXcgVWludDhBcnJheShlLmJ1ZmZlcik7Zm9yKGxldCBSPTA7UjxzO1IrKyl7Y29uc3Qgaz1SPGE/ZDpiO2ZbUl09eS5zbGljZShnLGcrayksQVtSXT1wLmVuY29kZShmW1JdKSxnKz1rLHU9TWF0aC5tYXgodSxrKX1jb25zdCB3PW5ldyBVaW50OEFycmF5KG4pO2xldCB2PTAsQyxTO2ZvcihDPTA7Qzx1O0MrKylmb3IoUz0wO1M8cztTKyspQzxmW1NdLmxlbmd0aCYmKHdbdisrXT1mW1NdW0NdKTtmb3IoQz0wO0M8aDtDKyspZm9yKFM9MDtTPHM7UysrKXdbdisrXT1BW1NdW0NdO3JldHVybiB3fWZ1bmN0aW9uIFBpKGUsdCxyLG4pe2xldCBvO2lmKEFycmF5LmlzQXJyYXkoZSkpbz1MZS5mcm9tQXJyYXkoZSk7ZWxzZSBpZih0eXBlb2YgZT09InN0cmluZyIpe2xldCBjPXQ7aWYoIWMpe2NvbnN0IGQ9TGUucmF3U3BsaXQoZSk7Yz1kZS5nZXRCZXN0VmVyc2lvbkZvckRhdGEoZCxyKX1vPUxlLmZyb21TdHJpbmcoZSxjfHw0MCl9ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGF0YSIpO2NvbnN0IGk9ZGUuZ2V0QmVzdFZlcnNpb25Gb3JEYXRhKG8scik7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJUaGUgYW1vdW50IG9mIGRhdGEgaXMgdG9vIGJpZyB0byBiZSBzdG9yZWQgaW4gYSBRUiBDb2RlIik7aWYoIXQpdD1pO2Vsc2UgaWYodDxpKXRocm93IG5ldyBFcnJvcihgClRoZSBjaG9zZW4gUVIgQ29kZSB2ZXJzaW9uIGNhbm5vdCBjb250YWluIHRoaXMgYW1vdW50IG9mIGRhdGEuCk1pbmltdW0gdmVyc2lvbiByZXF1aXJlZCB0byBzdG9yZSBjdXJyZW50IGRhdGEgaXM6IGAraStgLgpgKTtjb25zdCBzPU9pKHQscixvKSxsPXllLmdldFN5bWJvbFNpemUodCksYT1uZXcgZ2kobCk7cmV0dXJuICRpKGEsdCksX2koYSksQ2koYSx0KSxOZShhLHIsMCksdD49NyYmRWkoYSx0KSxBaShhLHMpLGlzTmFOKG4pJiYobj1LZS5nZXRCZXN0TWFzayhhLE5lLmJpbmQobnVsbCxhLHIpKSksS2UuYXBwbHlNYXNrKG4sYSksTmUoYSxyLG4pLHttb2R1bGVzOmEsdmVyc2lvbjp0LGVycm9yQ29ycmVjdGlvbkxldmVsOnIsbWFza1BhdHRlcm46bixzZWdtZW50czpvfX1wby5jcmVhdGU9ZnVuY3Rpb24odCxyKXtpZih0eXBlb2YgdD4idSJ8fHQ9PT0iIil0aHJvdyBuZXcgRXJyb3IoIk5vIGlucHV0IHRleHQiKTtsZXQgbj1EZS5NLG8saTtyZXR1cm4gdHlwZW9mIHI8InUiJiYobj1EZS5mcm9tKHIuZXJyb3JDb3JyZWN0aW9uTGV2ZWwsRGUuTSksbz1kZS5mcm9tKHIudmVyc2lvbiksaT1LZS5mcm9tKHIubWFza1BhdHRlcm4pLHIudG9TSklTRnVuYyYmeWUuc2V0VG9TSklTRnVuY3Rpb24oci50b1NKSVNGdW5jKSksUGkodCxvLG4saSl9O3ZhciBJbz17fSxicj17fTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyKXtpZih0eXBlb2Ygcj09Im51bWJlciImJihyPXIudG9TdHJpbmcoKSksdHlwZW9mIHIhPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiQ29sb3Igc2hvdWxkIGJlIGRlZmluZWQgYXMgaGV4IHN0cmluZyIpO2xldCBuPXIuc2xpY2UoKS5yZXBsYWNlKCIjIiwiIikuc3BsaXQoIiIpO2lmKG4ubGVuZ3RoPDN8fG4ubGVuZ3RoPT09NXx8bi5sZW5ndGg+OCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IGNvbG9yOiAiK3IpOyhuLmxlbmd0aD09PTN8fG4ubGVuZ3RoPT09NCkmJihuPUFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sbi5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuW2ksaV19KSkpLG4ubGVuZ3RoPT09NiYmbi5wdXNoKCJGIiwiRiIpO2NvbnN0IG89cGFyc2VJbnQobi5qb2luKCIiKSwxNik7cmV0dXJue3I6bz4+MjQmMjU1LGc6bz4+MTYmMjU1LGI6bz4+OCYyNTUsYTpvJjI1NSxoZXg6IiMiK24uc2xpY2UoMCw2KS5qb2luKCIiKX19ZS5nZXRPcHRpb25zPWZ1bmN0aW9uKG4pe258fChuPXt9KSxuLmNvbG9yfHwobi5jb2xvcj17fSk7Y29uc3Qgbz10eXBlb2Ygbi5tYXJnaW4+InUifHxuLm1hcmdpbj09PW51bGx8fG4ubWFyZ2luPDA/NDpuLm1hcmdpbixpPW4ud2lkdGgmJm4ud2lkdGg+PTIxP24ud2lkdGg6dm9pZCAwLHM9bi5zY2FsZXx8NDtyZXR1cm57d2lkdGg6aSxzY2FsZTppPzQ6cyxtYXJnaW46byxjb2xvcjp7ZGFyazp0KG4uY29sb3IuZGFya3x8IiMwMDAwMDBmZiIpLGxpZ2h0OnQobi5jb2xvci5saWdodHx8IiNmZmZmZmZmZiIpfSx0eXBlOm4udHlwZSxyZW5kZXJlck9wdHM6bi5yZW5kZXJlck9wdHN8fHt9fX0sZS5nZXRTY2FsZT1mdW5jdGlvbihuLG8pe3JldHVybiBvLndpZHRoJiZvLndpZHRoPj1uK28ubWFyZ2luKjI/by53aWR0aC8obitvLm1hcmdpbioyKTpvLnNjYWxlfSxlLmdldEltYWdlV2lkdGg9ZnVuY3Rpb24obixvKXtjb25zdCBpPWUuZ2V0U2NhbGUobixvKTtyZXR1cm4gTWF0aC5mbG9vcigobitvLm1hcmdpbioyKSppKX0sZS5xclRvSW1hZ2VEYXRhPWZ1bmN0aW9uKG4sbyxpKXtjb25zdCBzPW8ubW9kdWxlcy5zaXplLGw9by5tb2R1bGVzLmRhdGEsYT1lLmdldFNjYWxlKHMsaSksYz1NYXRoLmZsb29yKChzK2kubWFyZ2luKjIpKmEpLGQ9aS5tYXJnaW4qYSxiPVtpLmNvbG9yLmxpZ2h0LGkuY29sb3IuZGFya107Zm9yKGxldCBoPTA7aDxjO2grKylmb3IobGV0IHA9MDtwPGM7cCsrKXtsZXQgZz0oaCpjK3ApKjQsZj1pLmNvbG9yLmxpZ2h0O2lmKGg+PWQmJnA+PWQmJmg8Yy1kJiZwPGMtZCl7Y29uc3QgQT1NYXRoLmZsb29yKChoLWQpL2EpLHU9TWF0aC5mbG9vcigocC1kKS9hKTtmPWJbbFtBKnMrdV0/MTowXX1uW2crK109Zi5yLG5bZysrXT1mLmcsbltnKytdPWYuYixuW2ddPWYuYX19fSkoYnIpOyhmdW5jdGlvbihlKXtjb25zdCB0PWJyO2Z1bmN0aW9uIHIobyxpLHMpe28uY2xlYXJSZWN0KDAsMCxpLndpZHRoLGkuaGVpZ2h0KSxpLnN0eWxlfHwoaS5zdHlsZT17fSksaS5oZWlnaHQ9cyxpLndpZHRoPXMsaS5zdHlsZS5oZWlnaHQ9cysicHgiLGkuc3R5bGUud2lkdGg9cysicHgifWZ1bmN0aW9uIG4oKXt0cnl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiWW91IG5lZWQgdG8gc3BlY2lmeSBhIGNhbnZhcyBlbGVtZW50Iil9fWUucmVuZGVyPWZ1bmN0aW9uKGkscyxsKXtsZXQgYT1sLGM9czt0eXBlb2YgYT4idSImJighc3x8IXMuZ2V0Q29udGV4dCkmJihhPXMscz12b2lkIDApLHN8fChjPW4oKSksYT10LmdldE9wdGlvbnMoYSk7Y29uc3QgZD10LmdldEltYWdlV2lkdGgoaS5tb2R1bGVzLnNpemUsYSksYj1jLmdldENvbnRleHQoIjJkIiksaD1iLmNyZWF0ZUltYWdlRGF0YShkLGQpO3JldHVybiB0LnFyVG9JbWFnZURhdGEoaC5kYXRhLGksYSkscihiLGMsZCksYi5wdXRJbWFnZURhdGEoaCwwLDApLGN9LGUucmVuZGVyVG9EYXRhVVJMPWZ1bmN0aW9uKGkscyxsKXtsZXQgYT1sO3R5cGVvZiBhPiJ1IiYmKCFzfHwhcy5nZXRDb250ZXh0KSYmKGE9cyxzPXZvaWQgMCksYXx8KGE9e30pO2NvbnN0IGM9ZS5yZW5kZXIoaSxzLGEpLGQ9YS50eXBlfHwiaW1hZ2UvcG5nIixiPWEucmVuZGVyZXJPcHRzfHx7fTtyZXR1cm4gYy50b0RhdGFVUkwoZCxiLnF1YWxpdHkpfX0pKElvKTt2YXIgUG89e307Y29uc3QgVGk9YnI7ZnVuY3Rpb24gRnIoZSx0KXtjb25zdCByPWUuYS8yNTUsbj10Kyc9IicrZS5oZXgrJyInO3JldHVybiByPDE/bisiICIrdCsnLW9wYWNpdHk9Iicrci50b0ZpeGVkKDIpLnNsaWNlKDEpKyciJzpufWZ1bmN0aW9uIEJlKGUsdCxyKXtsZXQgbj1lK3Q7cmV0dXJuIHR5cGVvZiByPCJ1IiYmKG4rPSIgIityKSxufWZ1bmN0aW9uIE1pKGUsdCxyKXtsZXQgbj0iIixvPTAsaT0hMSxzPTA7Zm9yKGxldCBsPTA7bDxlLmxlbmd0aDtsKyspe2NvbnN0IGE9TWF0aC5mbG9vcihsJXQpLGM9TWF0aC5mbG9vcihsL3QpOyFhJiYhaSYmKGk9ITApLGVbbF0/KHMrKyxsPjAmJmE+MCYmZVtsLTFdfHwobis9aT9CZSgiTSIsYStyLC41K2Mrcik6QmUoIm0iLG8sMCksbz0wLGk9ITEpLGErMTx0JiZlW2wrMV18fChuKz1CZSgiaCIscykscz0wKSk6bysrfXJldHVybiBufVBvLnJlbmRlcj1mdW5jdGlvbih0LHIsbil7Y29uc3Qgbz1UaS5nZXRPcHRpb25zKHIpLGk9dC5tb2R1bGVzLnNpemUscz10Lm1vZHVsZXMuZGF0YSxsPWkrby5tYXJnaW4qMixhPW8uY29sb3IubGlnaHQuYT8iPHBhdGggIitGcihvLmNvbG9yLmxpZ2h0LCJmaWxsIikrJyBkPSJNMCAwaCcrbCsidiIrbCsnSDB6Ii8+JzoiIixjPSI8cGF0aCAiK0ZyKG8uY29sb3IuZGFyaywic3Ryb2tlIikrJyBkPSInK01pKHMsaSxvLm1hcmdpbikrJyIvPicsZD0ndmlld0JveD0iMCAwICcrbCsiICIrbCsnIicsaD0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciICcrKG8ud2lkdGg/J3dpZHRoPSInK28ud2lkdGgrJyIgaGVpZ2h0PSInK28ud2lkdGgrJyIgJzoiIikrZCsnIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyI+JythK2MrYDwvc3ZnPgpgO3JldHVybiB0eXBlb2Ygbj09ImZ1bmN0aW9uIiYmbihudWxsLGgpLGh9O2NvbnN0IFNpPVZuLFFlPXBvLFRvPUlvLFJpPVBvO2Z1bmN0aW9uIHlyKGUsdCxyLG4sbyl7Y29uc3QgaT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxzPWkubGVuZ3RoLGw9dHlwZW9mIGlbcy0xXT09ImZ1bmN0aW9uIjtpZighbCYmIVNpKCkpdGhyb3cgbmV3IEVycm9yKCJDYWxsYmFjayByZXF1aXJlZCBhcyBsYXN0IGFyZ3VtZW50Iik7aWYobCl7aWYoczwyKXRocm93IG5ldyBFcnJvcigiVG9vIGZldyBhcmd1bWVudHMgcHJvdmlkZWQiKTtzPT09Mj8obz1yLHI9dCx0PW49dm9pZCAwKTpzPT09MyYmKHQuZ2V0Q29udGV4dCYmdHlwZW9mIG8+InUiPyhvPW4sbj12b2lkIDApOihvPW4sbj1yLHI9dCx0PXZvaWQgMCkpfWVsc2V7aWYoczwxKXRocm93IG5ldyBFcnJvcigiVG9vIGZldyBhcmd1bWVudHMgcHJvdmlkZWQiKTtyZXR1cm4gcz09PTE/KHI9dCx0PW49dm9pZCAwKTpzPT09MiYmIXQuZ2V0Q29udGV4dCYmKG49cixyPXQsdD12b2lkIDApLG5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsYyl7dHJ5e2NvbnN0IGQ9UWUuY3JlYXRlKHIsbik7YShlKGQsdCxuKSl9Y2F0Y2goZCl7YyhkKX19KX10cnl7Y29uc3QgYT1RZS5jcmVhdGUocixuKTtvKG51bGwsZShhLHQsbikpfWNhdGNoKGEpe28oYSl9fUt0LmNyZWF0ZT1RZS5jcmVhdGU7S3QudG9DYW52YXM9eXIuYmluZChudWxsLFRvLnJlbmRlcik7S3QudG9EYXRhVVJMPXlyLmJpbmQobnVsbCxUby5yZW5kZXJUb0RhdGFVUkwpO0t0LnRvU3RyaW5nPXlyLmJpbmQobnVsbCxmdW5jdGlvbihlLHQscil7cmV0dXJuIFJpLnJlbmRlcihlLHIpfSk7dmFyIERpPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxWcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLExpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksTmk9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxacj0oZSx0LHIpPT50IGluIGU/RGkoZSx0LHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSk6ZVt0XT1yLFdlPShlLHQpPT57Zm9yKHZhciByIGluIHR8fCh0PXt9KSlMaS5jYWxsKHQscikmJlpyKGUscix0W3JdKTtpZihWcilmb3IodmFyIHIgb2YgVnIodCkpTmkuY2FsbCh0LHIpJiZacihlLHIsdFtyXSk7cmV0dXJuIGV9O2Z1bmN0aW9uIEJpKCl7dmFyIGU7Y29uc3QgdD0oZT14dC5zdGF0ZS50aGVtZU1vZGUpIT1udWxsP2U6ImRhcmsiLG49e2xpZ2h0Ontmb3JlZ3JvdW5kOnsxOiJyZ2IoMjAsMjAsMjApIiwyOiJyZ2IoMTIxLDEzNCwxMzQpIiwzOiJyZ2IoMTU4LDE2OSwxNjkpIn0sYmFja2dyb3VuZDp7MToicmdiKDI1NSwyNTUsMjU1KSIsMjoicmdiKDI0MSwyNDMsMjQzKSIsMzoicmdiKDIyOCwyMzEsMjMxKSJ9LG92ZXJsYXk6InJnYmEoMCwwLDAsMC4xKSJ9LGRhcms6e2ZvcmVncm91bmQ6ezE6InJnYigyMjgsMjMxLDIzMSkiLDI6InJnYigxNDgsMTU4LDE1OCkiLDM6InJnYigxMTAsMTE5LDExOSkifSxiYWNrZ3JvdW5kOnsxOiJyZ2IoMjAsMjAsMjApIiwyOiJyZ2IoMzksNDIsNDIpIiwzOiJyZ2IoNTksNjQsNjQpIn0sb3ZlcmxheToicmdiYSgyNTUsMjU1LDI1NSwwLjEpIn19W3RdO3JldHVybnsiLS13Y20tY29sb3ItZmctMSI6bi5mb3JlZ3JvdW5kWzFdLCItLXdjbS1jb2xvci1mZy0yIjpuLmZvcmVncm91bmRbMl0sIi0td2NtLWNvbG9yLWZnLTMiOm4uZm9yZWdyb3VuZFszXSwiLS13Y20tY29sb3ItYmctMSI6bi5iYWNrZ3JvdW5kWzFdLCItLXdjbS1jb2xvci1iZy0yIjpuLmJhY2tncm91bmRbMl0sIi0td2NtLWNvbG9yLWJnLTMiOm4uYmFja2dyb3VuZFszXSwiLS13Y20tY29sb3Itb3ZlcmxheSI6bi5vdmVybGF5fX1mdW5jdGlvbiBxcigpe3JldHVybnsiLS13Y20tYWNjZW50LWNvbG9yIjoiIzMzOTZGRiIsIi0td2NtLWFjY2VudC1maWxsLWNvbG9yIjoiI0ZGRkZGRiIsIi0td2NtLXotaW5kZXgiOiI4OSIsIi0td2NtLWJhY2tncm91bmQtY29sb3IiOiIjMzM5NkZGIiwiLS13Y20tYmFja2dyb3VuZC1ib3JkZXItcmFkaXVzIjoiOHB4IiwiLS13Y20tY29udGFpbmVyLWJvcmRlci1yYWRpdXMiOiIzMHB4IiwiLS13Y20td2FsbGV0LWljb24tYm9yZGVyLXJhZGl1cyI6IjE1cHgiLCItLXdjbS13YWxsZXQtaWNvbi1sYXJnZS1ib3JkZXItcmFkaXVzIjoiMzBweCIsIi0td2NtLXdhbGxldC1pY29uLXNtYWxsLWJvcmRlci1yYWRpdXMiOiI3cHgiLCItLXdjbS1pbnB1dC1ib3JkZXItcmFkaXVzIjoiMjhweCIsIi0td2NtLWJ1dHRvbi1ib3JkZXItcmFkaXVzIjoiMTBweCIsIi0td2NtLW5vdGlmaWNhdGlvbi1ib3JkZXItcmFkaXVzIjoiMzZweCIsIi0td2NtLXNlY29uZGFyeS1idXR0b24tYm9yZGVyLXJhZGl1cyI6IjI4cHgiLCItLXdjbS1pY29uLWJ1dHRvbi1ib3JkZXItcmFkaXVzIjoiNTAlIiwiLS13Y20tYnV0dG9uLWhvdmVyLWhpZ2hsaWdodC1ib3JkZXItcmFkaXVzIjoiMTBweCIsIi0td2NtLXRleHQtYmlnLWJvbGQtc2l6ZSI6IjIwcHgiLCItLXdjbS10ZXh0LWJpZy1ib2xkLXdlaWdodCI6IjYwMCIsIi0td2NtLXRleHQtYmlnLWJvbGQtbGluZS1oZWlnaHQiOiIyNHB4IiwiLS13Y20tdGV4dC1iaWctYm9sZC1sZXR0ZXItc3BhY2luZyI6Ii0wLjAzZW0iLCItLXdjbS10ZXh0LWJpZy1ib2xkLXRleHQtdHJhbnNmb3JtIjoibm9uZSIsIi0td2NtLXRleHQteHNtYWxsLWJvbGQtc2l6ZSI6IjEwcHgiLCItLXdjbS10ZXh0LXhzbWFsbC1ib2xkLXdlaWdodCI6IjcwMCIsIi0td2NtLXRleHQteHNtYWxsLWJvbGQtbGluZS1oZWlnaHQiOiIxMnB4IiwiLS13Y20tdGV4dC14c21hbGwtYm9sZC1sZXR0ZXItc3BhY2luZyI6IjAuMDJlbSIsIi0td2NtLXRleHQteHNtYWxsLWJvbGQtdGV4dC10cmFuc2Zvcm0iOiJ1cHBlcmNhc2UiLCItLXdjbS10ZXh0LXhzbWFsbC1yZWd1bGFyLXNpemUiOiIxMnB4IiwiLS13Y20tdGV4dC14c21hbGwtcmVndWxhci13ZWlnaHQiOiI2MDAiLCItLXdjbS10ZXh0LXhzbWFsbC1yZWd1bGFyLWxpbmUtaGVpZ2h0IjoiMTRweCIsIi0td2NtLXRleHQteHNtYWxsLXJlZ3VsYXItbGV0dGVyLXNwYWNpbmciOiItMC4wM2VtIiwiLS13Y20tdGV4dC14c21hbGwtcmVndWxhci10ZXh0LXRyYW5zZm9ybSI6Im5vbmUiLCItLXdjbS10ZXh0LXNtYWxsLXRoaW4tc2l6ZSI6IjE0cHgiLCItLXdjbS10ZXh0LXNtYWxsLXRoaW4td2VpZ2h0IjoiNTAwIiwiLS13Y20tdGV4dC1zbWFsbC10aGluLWxpbmUtaGVpZ2h0IjoiMTZweCIsIi0td2NtLXRleHQtc21hbGwtdGhpbi1sZXR0ZXItc3BhY2luZyI6Ii0wLjAzZW0iLCItLXdjbS10ZXh0LXNtYWxsLXRoaW4tdGV4dC10cmFuc2Zvcm0iOiJub25lIiwiLS13Y20tdGV4dC1zbWFsbC1yZWd1bGFyLXNpemUiOiIxNHB4IiwiLS13Y20tdGV4dC1zbWFsbC1yZWd1bGFyLXdlaWdodCI6IjYwMCIsIi0td2NtLXRleHQtc21hbGwtcmVndWxhci1saW5lLWhlaWdodCI6IjE2cHgiLCItLXdjbS10ZXh0LXNtYWxsLXJlZ3VsYXItbGV0dGVyLXNwYWNpbmciOiItMC4wM2VtIiwiLS13Y20tdGV4dC1zbWFsbC1yZWd1bGFyLXRleHQtdHJhbnNmb3JtIjoibm9uZSIsIi0td2NtLXRleHQtbWVkaXVtLXJlZ3VsYXItc2l6ZSI6IjE2cHgiLCItLXdjbS10ZXh0LW1lZGl1bS1yZWd1bGFyLXdlaWdodCI6IjYwMCIsIi0td2NtLXRleHQtbWVkaXVtLXJlZ3VsYXItbGluZS1oZWlnaHQiOiIyMHB4IiwiLS13Y20tdGV4dC1tZWRpdW0tcmVndWxhci1sZXR0ZXItc3BhY2luZyI6Ii0wLjAzZW0iLCItLXdjbS10ZXh0LW1lZGl1bS1yZWd1bGFyLXRleHQtdHJhbnNmb3JtIjoibm9uZSIsIi0td2NtLWZvbnQtZmFtaWx5IjoiLWFwcGxlLXN5c3RlbSwgc3lzdGVtLXVpLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgVWJ1bnR1LCAnSGVsdmV0aWNhIE5ldWUnLCBzYW5zLXNlcmlmIiwiLS13Y20tZm9udC1mZWF0dXJlLXNldHRpbmdzIjoiJ3RudW0nIG9uLCAnbG51bScgb24sICdjYXNlJyBvbiIsIi0td2NtLXN1Y2Nlc3MtY29sb3IiOiJyZ2IoMzgsMTgxLDk4KSIsIi0td2NtLWVycm9yLWNvbG9yIjoicmdiKDI0MiwgOTAsIDEwMykiLCItLXdjbS1vdmVybGF5LWJhY2tncm91bmQtY29sb3IiOiJyZ2JhKDAsIDAsIDAsIDAuMykiLCItLXdjbS1vdmVybGF5LWJhY2tkcm9wLWZpbHRlciI6Im5vbmUifX1jb25zdCBPPXtnZXRQcmVzZXQoZSl7cmV0dXJuIHFyKClbZV19LHNldFRoZW1lKCl7Y29uc3QgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCI6cm9vdCIpLHt0aGVtZVZhcmlhYmxlczp0fT14dC5zdGF0ZTtpZihlKXtjb25zdCByPVdlKFdlKFdlKHt9LEJpKCkpLHFyKCkpLHQpO09iamVjdC5lbnRyaWVzKHIpLmZvckVhY2goKFtuLG9dKT0+ZS5zdHlsZS5zZXRQcm9wZXJ0eShuLG8pKX19LGdsb2JhbENzczpQYCosOjphZnRlciw6OmJlZm9yZXttYXJnaW46MDtwYWRkaW5nOjA7Ym94LXNpemluZzpib3JkZXItYm94O2ZvbnQtc3R5bGU6bm9ybWFsO3RleHQtcmVuZGVyaW5nOm9wdGltaXplU3BlZWQ7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVufWJ1dHRvbntjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOmFsbCAuMnMgZWFzZX1AbWVkaWEgKGhvdmVyOmhvdmVyKSBhbmQgKHBvaW50ZXI6ZmluZSl7YnV0dG9uOmFjdGl2ZXt0cmFuc2l0aW9uOmFsbCAuMXMgZWFzZTt0cmFuc2Zvcm06c2NhbGUoLjkzKX19YnV0dG9uOjphZnRlcntjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciwuMnMgZWFzZX1idXR0b246ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfWJ1dHRvbiBzdmcsYnV0dG9uIHdjbS10ZXh0e3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MX1pbnB1dHtib3JkZXI6bm9uZTtvdXRsaW5lOjA7YXBwZWFyYW5jZTpub25lfWltZ3tkaXNwbGF5OmJsb2NrfTo6c2VsZWN0aW9ue2NvbG9yOnZhcigtLXdjbS1hY2NlbnQtZmlsbC1jb2xvcik7YmFja2dyb3VuZDp2YXIoLS13Y20tYWNjZW50LWNvbG9yKX1gfSxXaT1QYGJ1dHRvbntib3JkZXItcmFkaXVzOnZhcigtLXdjbS1zZWNvbmRhcnktYnV0dG9uLWJvcmRlci1yYWRpdXMpO2hlaWdodDoyOHB4O3BhZGRpbmc6MCAxMHB4O2JhY2tncm91bmQtY29sb3I6dmFyKC0td2NtLWFjY2VudC1jb2xvcil9YnV0dG9uIHBhdGh7ZmlsbDp2YXIoLS13Y20tYWNjZW50LWZpbGwtY29sb3IpfWJ1dHRvbjo6YWZ0ZXJ7Ym9yZGVyLXJhZGl1czppbmhlcml0O2JvcmRlcjoxcHggc29saWQgdmFyKC0td2NtLWNvbG9yLW92ZXJsYXkpfWJ1dHRvbjpkaXNhYmxlZDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ud2NtLWljb24tbGVmdCBzdmd7bWFyZ2luLXJpZ2h0OjVweH0ud2NtLWljb24tcmlnaHQgc3Zne21hcmdpbi1sZWZ0OjVweH1idXR0b246YWN0aXZlOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXdjbS1jb2xvci1vdmVybGF5KX0ud2NtLWdob3N0LC53Y20tZ2hvc3Q6YWN0aXZlOjphZnRlciwud2NtLW91dGxpbmV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ud2NtLWdob3N0OmFjdGl2ZXtvcGFjaXR5Oi41fUBtZWRpYShob3Zlcjpob3Zlcil7YnV0dG9uOmhvdmVyOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXdjbS1jb2xvci1vdmVybGF5KX0ud2NtLWdob3N0OmhvdmVyOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS53Y20tZ2hvc3Q6aG92ZXJ7b3BhY2l0eTouNX19YnV0dG9uOmRpc2FibGVke2JhY2tncm91bmQtY29sb3I6dmFyKC0td2NtLWNvbG9yLWJnLTMpO3BvaW50ZXItZXZlbnRzOm5vbmV9LndjbS1naG9zdDo6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS53Y20tZ2hvc3QgcGF0aHtmaWxsOnZhcigtLXdjbS1jb2xvci1mZy0yKX0ud2NtLW91dGxpbmUgcGF0aHtmaWxsOnZhcigtLXdjbS1hY2NlbnQtY29sb3IpfS53Y20tb3V0bGluZTpkaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O29wYWNpdHk6LjV9YDt2YXIga2k9T2JqZWN0LmRlZmluZVByb3BlcnR5LFVpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsTXQ9KGUsdCxyLG4pPT57Zm9yKHZhciBvPW4+MT92b2lkIDA6bj9VaSh0LHIpOnQsaT1lLmxlbmd0aC0xLHM7aT49MDtpLS0pKHM9ZVtpXSkmJihvPShuP3ModCxyLG8pOnMobykpfHxvKTtyZXR1cm4gbiYmbyYma2kodCxyLG8pLG99O2xldCBvdD1jbGFzcyBleHRlbmRzIEV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5pY29uTGVmdD12b2lkIDAsdGhpcy5pY29uUmlnaHQ9dm9pZCAwLHRoaXMub25DbGljaz0oKT0+bnVsbCx0aGlzLnZhcmlhbnQ9ImRlZmF1bHQifXJlbmRlcigpe2NvbnN0IGU9eyJ3Y20taWNvbi1sZWZ0Ijp0aGlzLmljb25MZWZ0IT09dm9pZCAwLCJ3Y20taWNvbi1yaWdodCI6dGhpcy5pY29uUmlnaHQhPT12b2lkIDAsIndjbS1naG9zdCI6dGhpcy52YXJpYW50PT09Imdob3N0Iiwid2NtLW91dGxpbmUiOnRoaXMudmFyaWFudD09PSJvdXRsaW5lIn07bGV0IHQ9ImludmVyc2UiO3JldHVybiB0aGlzLnZhcmlhbnQ9PT0iZ2hvc3QiJiYodD0ic2Vjb25kYXJ5IiksdGhpcy52YXJpYW50PT09Im91dGxpbmUiJiYodD0iYWNjZW50IiksbWA8YnV0dG9uIGNsYXNzPSIke0coZSl9IiA/ZGlzYWJsZWQ9IiR7dGhpcy5kaXNhYmxlZH0iIEBjbGljaz0iJHt0aGlzLm9uQ2xpY2t9Ij4ke3RoaXMuaWNvbkxlZnR9PHdjbS10ZXh0IHZhcmlhbnQ9InNtYWxsLXJlZ3VsYXIiIGNvbG9yPSIke3R9Ij48c2xvdD48L3Nsb3Q+PC93Y20tdGV4dD4ke3RoaXMuaWNvblJpZ2h0fTwvYnV0dG9uPmB9fTtvdC5zdHlsZXM9W08uZ2xvYmFsQ3NzLFdpXTtNdChbXyh7dHlwZTpCb29sZWFufSldLG90LnByb3RvdHlwZSwiZGlzYWJsZWQiLDIpO010KFtfKCldLG90LnByb3RvdHlwZSwiaWNvbkxlZnQiLDIpO010KFtfKCldLG90LnByb3RvdHlwZSwiaWNvblJpZ2h0IiwyKTtNdChbXygpXSxvdC5wcm90b3R5cGUsIm9uQ2xpY2siLDIpO010KFtfKCldLG90LnByb3RvdHlwZSwidmFyaWFudCIsMik7b3Q9TXQoW0koIndjbS1idXR0b24iKV0sb3QpO2NvbnN0IGppPVBgOmhvc3R7ZGlzcGxheTppbmxpbmUtYmxvY2t9YnV0dG9ue3BhZGRpbmc6MCAxNXB4IDFweDtoZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOnZhcigtLXdjbS1idXR0b24tYm9yZGVyLXJhZGl1cyk7Y29sb3I6dmFyKC0td2NtLWFjY2VudC1maWxsLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXdjbS1hY2NlbnQtY29sb3IpfWJ1dHRvbjo6YWZ0ZXJ7Y29udGVudDonJzt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6aW5oZXJpdDt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjJzIGVhc2U7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS13Y20tY29sb3Itb3ZlcmxheSl9YnV0dG9uOmFjdGl2ZTo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS13Y20tY29sb3Itb3ZlcmxheSl9YnV0dG9uOmRpc2FibGVke3BhZGRpbmctYm90dG9tOjA7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS13Y20tY29sb3ItYmctMyk7Y29sb3I6dmFyKC0td2NtLWNvbG9yLWZnLTMpfS53Y20tc2Vjb25kYXJ5e2NvbG9yOnZhcigtLXdjbS1hY2NlbnQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LndjbS1zZWNvbmRhcnk6OmFmdGVye2Rpc3BsYXk6bm9uZX1AbWVkaWEoaG92ZXI6aG92ZXIpe2J1dHRvbjpob3Zlcjo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS13Y20tY29sb3Itb3ZlcmxheSl9fWA7dmFyIEhpPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSx6aT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHhyPShlLHQscixuKT0+e2Zvcih2YXIgbz1uPjE/dm9pZCAwOm4/emkodCxyKTp0LGk9ZS5sZW5ndGgtMSxzO2k+PTA7aS0tKShzPWVbaV0pJiYobz0obj9zKHQscixvKTpzKG8pKXx8byk7cmV0dXJuIG4mJm8mJkhpKHQscixvKSxvfTtsZXQgenQ9Y2xhc3MgZXh0ZW5kcyBFe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmRpc2FibGVkPSExLHRoaXMudmFyaWFudD0icHJpbWFyeSJ9cmVuZGVyKCl7Y29uc3QgZT17IndjbS1zZWNvbmRhcnkiOnRoaXMudmFyaWFudD09PSJzZWNvbmRhcnkifTtyZXR1cm4gbWA8YnV0dG9uID9kaXNhYmxlZD0iJHt0aGlzLmRpc2FibGVkfSIgY2xhc3M9IiR7RyhlKX0iPjxzbG90Pjwvc2xvdD48L2J1dHRvbj5gfX07enQuc3R5bGVzPVtPLmdsb2JhbENzcyxqaV07eHIoW18oe3R5cGU6Qm9vbGVhbn0pXSx6dC5wcm90b3R5cGUsImRpc2FibGVkIiwyKTt4cihbXygpXSx6dC5wcm90b3R5cGUsInZhcmlhbnQiLDIpO3p0PXhyKFtJKCJ3Y20tYnV0dG9uLWJpZyIpXSx6dCk7Y29uc3QgRmk9UGA6aG9zdHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXdjbS1jb2xvci1iZy0yKTtib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS13Y20tY29sb3ItYmctMyl9ZGl2e3BhZGRpbmc6MTBweCAyMHB4O2Rpc3BsYXk6aW5oZXJpdDtmbGV4LWRpcmVjdGlvbjppbmhlcml0O2FsaWduLWl0ZW1zOmluaGVyaXQ7d2lkdGg6aW5oZXJpdDtqdXN0aWZ5LWNvbnRlbnQ6aW5oZXJpdH1gO3ZhciBWaT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFppPShlLHQscixuKT0+e2Zvcih2YXIgbz1uPjE/dm9pZCAwOm4/VmkodCxyKTp0LGk9ZS5sZW5ndGgtMSxzO2k+PTA7aS0tKShzPWVbaV0pJiYobz1zKG8pfHxvKTtyZXR1cm4gb307bGV0IEdlPWNsYXNzIGV4dGVuZHMgRXtyZW5kZXIoKXtyZXR1cm4gbWA8ZGl2PjxzbG90Pjwvc2xvdD48L2Rpdj5gfX07R2Uuc3R5bGVzPVtPLmdsb2JhbENzcyxGaV07R2U9WmkoW0koIndjbS1pbmZvLWZvb3RlciIpXSxHZSk7Y29uc3QgVD17Q1JPU1NfSUNPTjpMYDxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiB2aWV3Qm94PSIwIDAgMTIgMTIiPjxwYXRoIGQ9Ik05Ljk0IDExQS43NS43NSAwIDEgMCAxMSA5Ljk0TDcuNDE0IDYuMzUzYS41LjUgMCAwIDEgMC0uNzA4TDExIDIuMDYxQS43NS43NSAwIDEgMCA5Ljk0IDFMNi4zNTMgNC41ODZhLjUuNSAwIDAgMS0uNzA4IDBMMi4wNjEgMUEuNzUuNzUgMCAwIDAgMSAyLjA2bDMuNTg2IDMuNTg2YS41LjUgMCAwIDEgMCAuNzA4TDEgOS45MzlBLjc1Ljc1IDAgMSAwIDIuMDYgMTFsMy41ODYtMy41ODZhLjUuNSAwIDAgMSAuNzA4IDBMOS45MzkgMTFaIiBmaWxsPSIjZmZmIi8+PC9zdmc+YCxXQUxMRVRfQ09OTkVDVF9MT0dPOkxgPHN2ZyB3aWR0aD0iMTc4IiBoZWlnaHQ9IjI5IiB2aWV3Qm94PSIwIDAgMTc4IDI5IiBpZD0id2NtLXdjLWxvZ28iPjxwYXRoIGQ9Ik0xMC42ODMgNy45MjZjNS4yODQtNS4xNyAxMy44NS01LjE3IDE5LjEzNCAwbC42MzYuNjIzYS42NTIuNjUyIDAgMCAxIDAgLjkzNmwtMi4xNzYgMi4xMjlhLjM0My4zNDMgMCAwIDEtLjQ3OCAwbC0uODc1LS44NTdjLTMuNjg2LTMuNjA3LTkuNjYyLTMuNjA3LTEzLjM0OCAwbC0uOTM3LjkxOGEuMzQzLjM0MyAwIDAgMS0uNDc5IDBsLTIuMTc1LTIuMTNhLjY1Mi42NTIgMCAwIDEgMC0uOTM2bC42OTgtLjY4M1ptMjMuNjMzIDQuNDAzIDEuOTM1IDEuODk1YS42NTIuNjUyIDAgMCAxIDAgLjkzNmwtOC43MyA4LjU0M2EuNjg3LjY4NyAwIDAgMS0uOTU2IDBMMjAuMzcgMTcuNjRhLjE3Mi4xNzIgMCAwIDAtLjIzOSAwbC02LjE5NSA2LjA2M2EuNjg3LjY4NyAwIDAgMS0uOTU3IDBsLTguNzMtOC41NDNhLjY1Mi42NTIgMCAwIDEgMC0uOTM2bDEuOTM2LTEuODk1YS42ODcuNjg3IDAgMCAxIC45NTcgMGw2LjE5NiA2LjA2NGEuMTcyLjE3MiAwIDAgMCAuMjM5IDBsNi4xOTUtNi4wNjRhLjY4Ny42ODcgMCAwIDEgLjk1NyAwbDYuMTk2IDYuMDY0YS4xNzIuMTcyIDAgMCAwIC4yNCAwbDYuMTk1LTYuMDY0YS42ODcuNjg3IDAgMCAxIC45NTYgMFpNNDguMDkzIDIwLjk0OGwyLjMzOC05LjM1NWMuMTM5LS41MTUuMjU4LTEuMDcuNDE2LTEuOTQyLjEyLjg3Mi4yNTggMS40MjcuMzU3IDEuOTQybDIuMDIyIDkuMzU1aDQuMTgxbDMuNTI4LTEzLjg3NGgtMy4yMWwtMS45NDMgOC41MjNhMjQuODI1IDI0LjgyNSAwIDAgMC0uNDU2IDIuNDU3Yy0uMTU4LS45MzEtLjMxNy0xLjYyNS0uNDk1LTIuNDM4bC0xLjg4My04LjU0MmgtNC4yMDFsLTIuMDQyIDguNTQyYTQxLjIwNCA0MS4yMDQgMCAwIDAtLjQ3NSAyLjQzOCA0MS4yMDggNDEuMjA4IDAgMCAwLS40NzYtMi40MzhsLTEuOTAzLTguNTQyaC0zLjM0OWwzLjUwOCAxMy44NzRoNC4wODNaTTYzLjMzIDIxLjMwNGMxLjU4NSAwIDIuNTk2LS42NTQgMy4xMS0xLjYwNS0uMDU5LjI5Ny0uMDc4LjU5NS0uMDc4Ljg5MnYuMzU3aDIuNjU1VjE1LjIyYzAtMi43MzUtMS4yNDgtNC4zMi00LjMtNC4zMi0yLjYzNiAwLTQuMzYgMS40NjYtNC41MiAzLjQ4N2gyLjkxNGMuMS0uODkxLjczNC0xLjQyNiAxLjcwNS0xLjQyNi45MTEgMCAxLjQwNy41MTUgMS40MDcgMS4xMSAwIC40MzUtLjI1OC42OTMtMS4wMy43OTJsLTEuMzg4LjE1OWMtMi4wNjEuMjU3LTMuODI1IDEuMDEtMy44MjUgMy4xOSAwIDEuOTgyIDEuNjQ1IDMuMDkyIDMuMzUgMy4wOTJabS44OTEtMi4wNDFjLS43NzMgMC0xLjM0OC0uNDM2LTEuMzQ4LTEuMTkgMC0uNzMzLjY1NS0xLjA5IDEuNjQ1LTEuMjY4bC42NzQtLjExOWMuNTc1LS4xMTguODkyLS4yMTggMS4wOS0uMzk2di45MTJjMCAxLjIyOC0uODkyIDIuMDYtMi4wNiAyLjA2Wk03MC4zOTggNy4wNzR2MTMuODc0aDIuODc0VjcuMDc0aC0yLjg3NFpNNzQuOTM0IDcuMDc0djEzLjg3NGgyLjg3NFY3LjA3NGgtMi44NzRaTTg0LjA4IDIxLjMwNGMyLjczNSAwIDQuNS0xLjU0NiA0LjY5Ny0zLjU2N2gtMi44OTNjLS4xMzkuODkyLS44OTIgMS4zODctMS44MDQgMS4zODctMS4yMjggMC0yLjEyLS45OS0yLjE0LTIuMzU4aDYuODk3di0uNTU1YzAtMy4yMS0xLjc2NC01LjMxMi00LjgxNi01LjMxMi0yLjkzMyAwLTQuOTk0IDIuMDYyLTQuOTk0IDUuMTczIDAgMy4zNyAyLjEyIDUuMjMyIDUuMDUzIDUuMjMyWm0tMi4xNi02LjQyMWMuMTE5LTEuMTEuOTMyLTEuOTIyIDIuMDgxLTEuOTIyIDEuMTEgMCAxLjg4My43NzIgMS45MDMgMS45MjJIODEuOTJaTTk0LjkyIDIxLjE0NmMuNjMzIDAgMS4yNDgtLjEgMS41MjUtLjE3OXYtMi4xOGMtLjIxOC4wNC0uNDc1LjA2LS42OTMuMDYtMS4wNSAwLTEuNDI3LS41OTUtMS40MjctMS41NjZ2LTMuODA1aDIuMzM4di0yLjI0aC0yLjMzOFY3Ljc4OEg5MS40N3YzLjQ0OEg4OS4zN3YyLjI0aDIuMXY0LjIwMWMwIDIuMyAxLjE1IDMuNDY5IDMuNDUgMy40NjlaTTEwNC42MiAyMS4zMDRjMy45MjQgMCA2LjMwMi0yLjI5OSA2LjU5OS01LjYwOGgtMy4xMTFjLS4yMzggMS44MDMtMS41MDYgMy4wMzItMy4zNjkgMy4wMzItMi4yIDAtMy43NDYtMS43ODQtMy43NDYtNC43OTYgMC0yLjk1MyAxLjYwNS00LjYzOCAzLjgwNS00LjYzOCAxLjg4MyAwIDIuOTUzIDEuMTUgMy4xNzEgMi44MzRoMy4xOTFjLS4zMTctMy40NDgtMi44NTQtNS40MS02LjM0Mi01LjQxLTMuOTg0IDAtNy4wMzYgMi42OTUtNy4wMzYgNy4yMTQgMCA0LjY3NyAyLjY3NiA3LjM3MiA2LjgzOCA3LjM3MlpNMTE3LjQ0OSAyMS4zMDRjMi45OTMgMCA1LjExNC0xLjg4MiA1LjExNC01LjE3MiAwLTMuMjMtMi4xMjEtNS4yMzMtNS4xMTQtNS4yMzMtMi45NzIgMC01LjA5MyAyLjAwMi01LjA5MyA1LjIzMyAwIDMuMjkgMi4xMDEgNS4xNzIgNS4wOTMgNS4xNzJabTAtMi4yMmMtMS4zMjcgMC0yLjE4LTEuMDktMi4xOC0yLjk1MiAwLTEuOTAzLjg5Mi0yLjk3MyAyLjE4LTIuOTczIDEuMzA4IDAgMi4yIDEuMDcgMi4yIDIuOTczIDAgMS44NjItLjg3MiAyLjk1My0yLjIgMi45NTNaTTEyNi41NjkgMjAuOTQ4di01LjY4OWMwLTEuMjA4Ljc1My0yLjEgMS44MjMtMi4xIDEuMDExIDAgMS42MDYuNzczIDEuNjA2IDIuMDZ2NS43MjloMi44NzN2LTYuMTQ0YzAtMi4zMzktMS4yMjktMy45MDUtMy40MjgtMy45MDUtMS41MjYgMC0yLjQ1OC43MzQtMi45NTMgMS42MDZhNS4zMSA1LjMxIDAgMCAwIC4wNzktLjg5MnYtLjM3N2gtMi44NzR2OS43MTJoMi44NzRaTTEzNy40NjQgMjAuOTQ4di01LjY4OWMwLTEuMjA4Ljc1My0yLjEgMS44MjMtMi4xIDEuMDExIDAgMS42MDYuNzczIDEuNjA2IDIuMDZ2NS43MjloMi44NzN2LTYuMTQ0YzAtMi4zMzktMS4yMjgtMy45MDUtMy40MjgtMy45MDUtMS41MjYgMC0yLjQ1OC43MzQtMi45NTMgMS42MDZhNS4zMSA1LjMxIDAgMCAwIC4wNzktLjg5MnYtLjM3N2gtMi44NzR2OS43MTJoMi44NzRaTTE0OS45NDkgMjEuMzA0YzIuNzM1IDAgNC40OTktMS41NDYgNC42OTctMy41NjdoLTIuODkzYy0uMTM5Ljg5Mi0uODkyIDEuMzg3LTEuODA0IDEuMzg3LTEuMjI4IDAtMi4xMi0uOTktMi4xNC0yLjM1OGg2Ljg5N3YtLjU1NWMwLTMuMjEtMS43NjQtNS4zMTItNC44MTYtNS4zMTItMi45MzMgMC00Ljk5NCAyLjA2Mi00Ljk5NCA1LjE3MyAwIDMuMzcgMi4xMiA1LjIzMiA1LjA1MyA1LjIzMlptLTIuMTYtNi40MjFjLjExOS0xLjExLjkzMi0xLjkyMiAyLjA4MS0xLjkyMiAxLjExIDAgMS44ODMuNzcyIDEuOTAzIDEuOTIyaC0zLjk4NFpNMTYwLjg3NiAyMS4zMDRjMy4wMTMgMCA0LjY1OC0xLjY0NSA0Ljk3NS00LjIwMWgtMi44NzRjLS4wOTkgMS4wNy0uNzEzIDEuOTgyLTIuMDAxIDEuOTgyLTEuMzA5IDAtMi4yLTEuMjEtMi4yLTIuOTkzIDAtMS45NDIgMS4wMy0yLjkzMyAyLjI1OS0yLjkzMyAxLjIwOSAwIDEuODAzLjg3MiAxLjg4MyAxLjg4MmgyLjg3M2MtLjIxOC0yLjM1OC0xLjgyMy00LjE0Mi00Ljc3Ni00LjE0Mi0yLjg3NCAwLTUuMTUzIDEuOTAzLTUuMTUzIDUuMTkzIDAgMy4yNSAxLjkyMyA1LjIxMiA1LjAxNCA1LjIxMlpNMTcyLjA2NyAyMS4xNDZjLjYzNCAwIDEuMjQ4LS4xIDEuNTI2LS4xNzl2LTIuMThjLS4yMTguMDQtLjQ3Ni4wNi0uNjk0LjA2LTEuMDUgMC0xLjQyNy0uNTk1LTEuNDI3LTEuNTY2di0zLjgwNWgyLjMzOXYtMi4yNGgtMi4zMzlWNy43ODhoLTIuODU0djMuNDQ4aC0yLjF2Mi4yNGgyLjF2NC4yMDFjMCAyLjMgMS4xNSAzLjQ2OSAzLjQ0OSAzLjQ2OVoiIGZpbGw9IiNmZmYiLz48L3N2Zz5gLFdBTExFVF9DT05ORUNUX0lDT046TGA8c3ZnIHdpZHRoPSIyOCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDI4IDIwIj48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik03LjM4NiA2LjQ4MmMzLjY1My0zLjU3NiA5LjU3NS0zLjU3NiAxMy4yMjggMGwuNDQuNDNhLjQ1MS40NTEgMCAwIDEgMCAuNjQ4TDE5LjU1IDkuMDMzYS4yMzcuMjM3IDAgMCAxLS4zMyAwbC0uNjA2LS41OTJjLTIuNTQ4LTIuNDk2LTYuNjgtMi40OTYtOS4yMjggMGwtLjY0OC42MzRhLjIzNy4yMzcgMCAwIDEtLjMzIDBMNi45MDIgNy42MDJhLjQ1MS40NTEgMCAwIDEgMC0uNjQ3bC40ODMtLjQ3M1ptMTYuMzM4IDMuMDQ2IDEuMzM5IDEuMzFhLjQ1MS40NTEgMCAwIDEgMCAuNjQ4bC02LjAzNSA1LjkwOWEuNDc1LjQ3NSAwIDAgMS0uNjYyIDBMMTQuMDgzIDEzLjJhLjExOS4xMTkgMCAwIDAtLjE2NiAwbC00LjI4MyA0LjE5NGEuNDc1LjQ3NSAwIDAgMS0uNjYyIDBsLTYuMDM1LTUuOTFhLjQ1MS40NTEgMCAwIDEgMC0uNjQ3bDEuMzM4LTEuMzFhLjQ3NS40NzUgMCAwIDEgLjY2MiAwbDQuMjgzIDQuMTk0Yy4wNDYuMDQ0LjEyLjA0NC4xNjYgMGw0LjI4My00LjE5NGEuNDc1LjQ3NSAwIDAgMSAuNjYyIDBsNC4yODMgNC4xOTRjLjA0Ni4wNDQuMTIuMDQ0LjE2NiAwbDQuMjgzLTQuMTk0YS40NzUuNDc1IDAgMCAxIC42NjIgMFoiIGZpbGw9IiMwMDAwMDAiLz48L2c+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBmaWxsPSIjZmZmZmZmIiBkPSJNMCAwaDI4djIwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+YCxXQUxMRVRfQ09OTkVDVF9JQ09OX0NPTE9SRUQ6TGA8c3ZnIHdpZHRoPSI5NiIgaGVpZ2h0PSI5NiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTI1LjMyMiAzMy41OTdjMTIuNTI1LTEyLjI2MyAzMi44My0xMi4yNjMgNDUuMzU1IDBsMS41MDcgMS40NzZhMS41NDcgMS41NDcgMCAwIDEgMCAyLjIybC01LjE1NiA1LjA0OGEuODE0LjgxNCAwIDAgMS0xLjEzNCAwbC0yLjA3NC0yLjAzYy04LjczNy04LjU1NS0yMi45MDMtOC41NTUtMzEuNjQgMGwtMi4yMjIgMi4xNzVhLjgxNC44MTQgMCAwIDEtMS4xMzQgMGwtNS4xNTYtNS4wNDlhMS41NDcgMS41NDcgMCAwIDEgMC0yLjIybDEuNjU0LTEuNjJabTU2LjAxOSAxMC40NCA0LjU4OSA0LjQ5NGExLjU0NyAxLjU0NyAwIDAgMSAwIDIuMjJsLTIwLjY5MyAyMC4yNmExLjYyOCAxLjYyOCAwIDAgMS0yLjI2NyAwTDQ4LjI4MyA1Ni42MzJhLjQwNy40MDcgMCAwIDAtLjU2NyAwTDMzLjAzIDcxLjAxMmExLjYyOCAxLjYyOCAwIDAgMS0yLjI2OCAwTDEwLjA3IDUwLjc1YTEuNTQ3IDEuNTQ3IDAgMCAxIDAtMi4yMmw0LjU5LTQuNDk0YTEuNjI4IDEuNjI4IDAgMCAxIDIuMjY3IDBsMTQuNjg3IDE0LjM4Yy4xNTYuMTUzLjQxLjE1My41NjcgMGwxNC42ODUtMTQuMzhhMS42MjggMS42MjggMCAwIDEgMi4yNjggMGwxNC42ODcgMTQuMzhjLjE1Ni4xNTMuNDEuMTUzLjU2NyAwbDE0LjY4Ni0xNC4zOGExLjYyOCAxLjYyOCAwIDAgMSAyLjI2OCAwWiIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgZD0iTTI1LjY3MiAzMy45NTRjMTIuMzMtMTIuMDcyIDMyLjMyNS0xMi4wNzIgNDQuNjU1IDBsMS41MDggMS40NzZhMS4wNDcgMS4wNDcgMCAwIDEgMCAxLjUwNmwtNS4xNTcgNS4wNDhhLjMxNC4zMTQgMCAwIDEtLjQzNCAwbC0yLjA3NC0yLjAzYy04LjkzMi04Ljc0Ni0yMy40MDktOC43NDYtMzIuMzQgMGwtMi4yMjIgMi4xNzRhLjMxNC4zMTQgMCAwIDEtLjQzNCAwbC01LjE1Ny01LjA0OGExLjA0NyAxLjA0NyAwIDAgMSAwLTEuNTA2bDEuNjU1LTEuNjJabTU1LjMxOSAxMC40NCA0LjU5IDQuNDk0YTEuMDQ3IDEuMDQ3IDAgMCAxIDAgMS41MDZsLTIwLjY5NCAyMC4yNmExLjEyOCAxLjEyOCAwIDAgMS0xLjU2OCAwbC0xNC42ODYtMTQuMzhhLjkwNy45MDcgMCAwIDAtMS4yNjcgMEwzMi42OCA3MC42NTVhMS4xMjggMS4xMjggMCAwIDEtMS41NjggMEwxMC40MiA1MC4zOTRhMS4wNDcgMS4wNDcgMCAwIDEgMC0xLjUwNmw0LjU5LTQuNDkzYTEuMTI4IDEuMTI4IDAgMCAxIDEuNTY3IDBsMTQuNjg3IDE0LjM3OWEuOTA3LjkwNyAwIDAgMCAxLjI2NiAwbC0uMzUtLjM1Ny4zNS4zNTcgMTQuNjg2LTE0LjM4YTEuMTI4IDEuMTI4IDAgMCAxIDEuNTY4IDBsMTQuNjg3IDE0LjM4YS45MDcuOTA3IDAgMCAwIDEuMjY3IDBsMTQuNjg2LTE0LjM4YTEuMTI4IDEuMTI4IDAgMCAxIDEuNTY4IDBaIi8+PC9zdmc+YCxCQUNLX0lDT046TGA8c3ZnIHdpZHRoPSIxMCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDEwIDE4Ij48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTguNzM1LjE3OWEuNzUuNzUgMCAwIDEgLjA4NyAxLjA1N0wyLjkyIDguMTkyYTEuMjUgMS4yNSAwIDAgMCAwIDEuNjE3bDUuOTAyIDYuOTU2YS43NS43NSAwIDEgMS0xLjE0NC45N0wxLjc3NiAxMC43OGEyLjc1IDIuNzUgMCAwIDEgMC0zLjU1OUw3LjY3OC4yNjVBLjc1Ljc1IDAgMCAxIDguNzM1LjE4WiIgZmlsbD0iI2ZmZiIvPjwvc3ZnPmAsQ09QWV9JQ09OOkxgPHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbGw9Im5vbmUiPjxwYXRoIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTcuMDEgNy4wMWMuMDMtMS41NDUuMTM4LTIuNS41MzUtMy4yOEE1IDUgMCAwIDEgOS43MyAxLjU0NUMxMC44IDEgMTIuMiAxIDE1IDFjMi44IDAgNC4yIDAgNS4yNy41NDVhNSA1IDAgMCAxIDIuMTg1IDIuMTg1QzIzIDQuOCAyMyA2LjIgMjMgOWMwIDIuOCAwIDQuMi0uNTQ1IDUuMjdhNSA1IDAgMCAxLTIuMTg1IDIuMTg1Yy0uNzguMzk3LTEuNzM1LjUwNS0zLjI4LjUzNGwtLjAwMS4wMWMtLjAzIDEuNTQtLjEzOCAyLjQ5My0uNTM0IDMuMjdhNSA1IDAgMCAxLTIuMTg1IDIuMTg2QzEzLjIgMjMgMTEuOCAyMyA5IDIzYy0yLjggMC00LjIgMC01LjI3LS41NDVhNSA1IDAgMCAxLTIuMTg1LTIuMTg1QzEgMTkuMiAxIDE3LjggMSAxNWMwLTIuOCAwLTQuMi41NDUtNS4yN0E1IDUgMCAwIDEgMy43MyA3LjU0NUM0LjUwOCA3LjE0OSA1LjQ2IDcuMDQgNyA3LjAxaC4wMVpNMTUgMTUuNWMtMS40MjUgMC0yLjQwMy0uMDAxLTMuMTYyLS4wNjMtLjc0LS4wNi0xLjEzOS0uMTcyLTEuNDI3LS4zMTlhMy41IDMuNSAwIDAgMS0xLjUzLTEuNTI5Yy0uMTQ2LS4yODgtLjI1Ny0uNjg2LS4zMTgtMS40MjdDOC41MDEgMTEuNDAzIDguNSAxMC40MjUgOC41IDljMC0xLjQyNS4wMDEtMi40MDMuMDYzLTMuMTYyLjA2LS43NC4xNzItMS4xMzkuMzE4LTEuNDI3YTMuNSAzLjUgMCAwIDEgMS41My0xLjUzYy4yODgtLjE0Ni42ODYtLjI1NyAxLjQyNy0uMzE4Ljc1OS0uMDYyIDEuNzM3LS4wNjMgMy4xNjItLjA2MyAxLjQyNSAwIDIuNDAzLjAwMSAzLjE2Mi4wNjMuNzQuMDYgMS4xMzkuMTcyIDEuNDI3LjMxOGEzLjUgMy41IDAgMCAxIDEuNTMgMS41M2MuMTQ2LjI4OC4yNTcuNjg2LjMxOCAxLjQyNy4wNjIuNzU5LjA2MyAxLjczNy4wNjMgMy4xNjIgMCAxLjQyNS0uMDAxIDIuNDAzLS4wNjMgMy4xNjItLjA2Ljc0LS4xNzIgMS4xMzktLjMxOSAxLjQyN2EzLjUgMy41IDAgMCAxLTEuNTI5IDEuNTNjLS4yODguMTQ2LS42ODYuMjU3LTEuNDI3LjMxOC0uNzU5LjA2Mi0xLjczNy4wNjMtMy4xNjIuMDYzWk03IDguNTExYy0uNDQ0LjAwOS0uODI1LjAyNS0xLjE2Mi4wNTItLjc0LjA2LTEuMTM5LjE3Mi0xLjQyNy4zMThhMy41IDMuNSAwIDAgMC0xLjUzIDEuNTNjLS4xNDYuMjg4LS4yNTcuNjg2LS4zMTggMS40MjctLjA2Mi43NTktLjA2MyAxLjczNy0uMDYzIDMuMTYyIDAgMS40MjUuMDAxIDIuNDAzLjA2MyAzLjE2Mi4wNi43NC4xNzIgMS4xMzkuMzE4IDEuNDI3YTMuNSAzLjUgMCAwIDAgMS41MyAxLjUzYy4yODguMTQ2LjY4Ni4yNTcgMS40MjcuMzE4Ljc1OS4wNjIgMS43MzcuMDYzIDMuMTYyLjA2MyAxLjQyNSAwIDIuNDAzLS4wMDEgMy4xNjItLjA2My43NC0uMDYgMS4xMzktLjE3MiAxLjQyNy0uMzE5YTMuNSAzLjUgMCAwIDAgMS41My0xLjUzYy4xNDYtLjI4Ny4yNTctLjY4NS4zMTgtMS40MjYuMDI3LS4zMzcuMDQzLS43MTguMDUyLTEuMTYySDE1Yy0yLjggMC00LjIgMC01LjI3LS41NDVhNSA1IDAgMCAxLTIuMTg1LTIuMTg1QzcgMTMuMiA3IDExLjggNyA5di0uNDg5WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+YCxSRVRSWV9JQ09OOkxgPHN2ZyB3aWR0aD0iMTUiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNSAxNiI+PHBhdGggZD0iTTYuNDY0IDIuMDNBLjc1Ljc1IDAgMCAwIDUuNDAzLjk3TDIuMDggNC4yOTNhMSAxIDAgMCAwIDAgMS40MTRMNS40MDMgOS4wM2EuNzUuNzUgMCAwIDAgMS4wNi0xLjA2TDQuNjcyIDYuMTc3YS4yNS4yNSAwIDAgMSAuMTc3LS40MjdoMi4wODVhNCA0IDAgMSAxLTMuOTMgNC43NDZjLS4wNzctLjQwNy0uNDA1LS43NDYtLjgyLS43NDYtLjQxNCAwLS43NTUuMzM4LS43Ljc0OGE1LjUwMSA1LjUwMSAwIDEgMCA1LjQ1LTYuMjQ4SDQuODQ4YS4yNS4yNSAwIDAgMS0uMTc3LS40MjdMNi40NjQgMi4wM1oiIGZpbGw9IiNmZmYiLz48L3N2Zz5gLERFU0tUT1BfSUNPTjpMYDxzdmcgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMTYgMTYiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMCA1Ljk4YzAtMS44NSAwLTIuNzc1LjM5NC0zLjQ2NmEzIDMgMCAwIDEgMS4xMi0xLjEyQzIuMjA0IDEgMy4xMyAxIDQuOTggMWg2LjA0YzEuODUgMCAyLjc3NSAwIDMuNDY2LjM5NGEzIDMgMCAwIDEgMS4xMiAxLjEyQzE2IDMuMjA0IDE2IDQuMTMgMTYgNS45OHYxLjA0YzAgMS44NSAwIDIuNzc1LS4zOTQgMy40NjZhMyAzIDAgMCAxLTEuMTIgMS4xMkMxMy43OTYgMTIgMTIuODcgMTIgMTEuMDIgMTJINC45OGMtMS44NSAwLTIuNzc1IDAtMy40NjYtLjM5NGEzIDMgMCAwIDEtMS4xMi0xLjEyQzAgOS43OTYgMCA4Ljg3IDAgNy4wMlY1Ljk4Wk00Ljk4IDIuNWg2LjA0Yy45NTMgMCAxLjU2OC4wMDEgMi4wMzQuMDQzLjQ0Ni4wNC42MDguMTA4LjY5LjE1NGExLjUgMS41IDAgMCAxIC41NTkuNTZjLjA0Ni4wOC4xMTQuMjQzLjE1NC42OS4wNDIuNDY1LjA0MyAxLjA4LjA0MyAyLjAzM3YxLjA0YzAgLjk1Mi0uMDAxIDEuNTY4LS4wNDMgMi4wMzQtLjA0LjQ0Ni0uMTA4LjYwOC0uMTU0LjY5YTEuNDk5IDEuNDk5IDAgMCAxLS41Ni41NTljLS4wOC4wNDYtLjI0My4xMTQtLjY5LjE1NC0uNDY2LjA0Mi0xLjA4LjA0My0yLjAzMy4wNDNINC45OGMtLjk1MiAwLTEuNTY4LS4wMDEtMi4wMzQtLjA0My0uNDQ2LS4wNC0uNjA4LS4xMDgtLjY5LS4xNTRhMS41IDEuNSAwIDAgMS0uNTU5LS41NmMtLjA0Ni0uMDgtLjExNC0uMjQzLS4xNTQtLjY5LS4wNDItLjQ2NS0uMDQzLTEuMDgtLjA0My0yLjAzM1Y1Ljk4YzAtLjk1Mi4wMDEtMS41NjguMDQzLTIuMDM0LjA0LS40NDYuMTA4LS42MDguMTU0LS42OWExLjUgMS41IDAgMCAxIC41Ni0uNTU5Yy4wOC0uMDQ2LjI0My0uMTE0LjY5LS4xNTQuNDY1LS4wNDIgMS4wOC0uMDQzIDIuMDMzLS4wNDNaIiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTQgMTQuMjVhLjc1Ljc1IDAgMCAxIC43NS0uNzVoNi41YS43NS43NSAwIDAgMSAwIDEuNWgtNi41YS43NS43NSAwIDAgMS0uNzUtLjc1WiIgZmlsbD0iI2ZmZiIvPjwvc3ZnPmAsTU9CSUxFX0lDT046TGA8c3ZnIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBkPSJNNi43NSA1YTEuMjUgMS4yNSAwIDEgMCAwLTIuNSAxLjI1IDEuMjUgMCAwIDAgMCAyLjVaIiBmaWxsPSIjZmZmIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zIDQuOThjMC0xLjg1IDAtMi43NzUuMzk0LTMuNDY2YTMgMyAwIDAgMSAxLjEyLTEuMTJDNS4yMDQgMCA2LjEzNiAwIDggMHMyLjc5NSAwIDMuNDg2LjM5NGEzIDMgMCAwIDEgMS4xMiAxLjEyQzEzIDIuMjA0IDEzIDMuMTMgMTMgNC45OHY2LjA0YzAgMS44NSAwIDIuNzc1LS4zOTQgMy40NjZhMyAzIDAgMCAxLTEuMTIgMS4xMkMxMC43OTYgMTYgOS44NjQgMTYgOCAxNnMtMi43OTUgMC0zLjQ4Ni0uMzk0YTMgMyAwIDAgMS0xLjEyLTEuMTJDMyAxMy43OTYgMyAxMi44NyAzIDExLjAyVjQuOThabTguNSAwdjYuMDRjMCAuOTUzLS4wMDEgMS41NjgtLjA0MyAyLjAzNC0uMDQuNDQ2LS4xMDguNjA4LS4xNTQuNjlhMS40OTkgMS40OTkgMCAwIDEtLjU2LjU1OWMtLjA4LjA0NS0uMjQyLjExMy0uNjkzLjE1NC0uNDcuMDQyLTEuMDkxLjA0My0yLjA1LjA0My0uOTU5IDAtMS41OC0uMDAxLTIuMDUtLjA0My0uNDUtLjA0LS42MTMtLjEwOS0uNjkzLS4xNTRhMS41IDEuNSAwIDAgMS0uNTYtLjU2Yy0uMDQ2LS4wOC0uMTE0LS4yNDMtLjE1NC0uNjktLjA0Mi0uNDY2LS4wNDMtMS4wOC0uMDQzLTIuMDMzVjQuOThjMC0uOTUyLjAwMS0xLjU2OC4wNDMtMi4wMzQuMDQtLjQ0Ni4xMDgtLjYwOC4xNTQtLjY5YTEuNSAxLjUgMCAwIDEgLjU2LS41NTljLjA4LS4wNDUuMjQzLS4xMTMuNjkzLS4xNTRDNi40MiAxLjUwMSA3LjA0MSAxLjUgOCAxLjVjLjk1OSAwIDEuNTguMDAxIDIuMDUuMDQzLjQ1LjA0LjYxMy4xMDkuNjkzLjE1NGExLjUgMS41IDAgMCAxIC41Ni41NmMuMDQ2LjA4LjExNC4yNDMuMTU0LjY5LjA0Mi40NjUuMDQzIDEuMDguMDQzIDIuMDMzWiIgZmlsbD0iI2ZmZiIvPjwvc3ZnPmAsQVJST1dfRE9XTl9JQ09OOkxgPHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCI+PHBhdGggZD0iTTIuMjggNy40N2EuNzUuNzUgMCAwIDAtMS4wNiAxLjA2bDUuMjUgNS4yNWEuNzUuNzUgMCAwIDAgMS4wNiAwbDUuMjUtNS4yNWEuNzUuNzUgMCAwIDAtMS4wNi0xLjA2bC0zLjU0NCAzLjU0M2EuMjUuMjUgMCAwIDEtLjQyNi0uMTc3Vi43NWEuNzUuNzUgMCAwIDAtMS41IDB2MTAuMDg2YS4yNS4yNSAwIDAgMS0uNDI3LjE3NkwyLjI4IDcuNDdaIiBmaWxsPSIjZmZmIi8+PC9zdmc+YCxBUlJPV19VUF9SSUdIVF9JQ09OOkxgPHN2ZyB3aWR0aD0iMTUiIGhlaWdodD0iMTQiIGZpbGw9Im5vbmUiPjxwYXRoIGQ9Ik00LjUgMS43NUEuNzUuNzUgMCAwIDEgNS4yNSAxSDEyYTEuNSAxLjUgMCAwIDEgMS41IDEuNXY2Ljc1YS43NS43NSAwIDAgMS0xLjUgMFY0LjE2NGEuMjUuMjUgMCAwIDAtLjQyNy0uMTc2TDQuMDYxIDExLjVBLjc1Ljc1IDAgMCAxIDMgMTAuNDRsNy41MTMtNy41MTNhLjI1LjI1IDAgMCAwLS4xNzctLjQyN0g1LjI1YS43NS43NSAwIDAgMS0uNzUtLjc1WiIgZmlsbD0iI2ZmZiIvPjwvc3ZnPmAsQVJST1dfUklHSFRfSUNPTjpMYDxzdmcgd2lkdGg9IjYiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCA2IDE0Ij48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIuMTgxIDEuMDk5YS43NS43NSAwIDAgMSAxLjAyNC4yNzlsMi40MzMgNC4yNThhMi43NSAyLjc1IDAgMCAxIDAgMi43MjlsLTIuNDMzIDQuMjU3YS43NS43NSAwIDEgMS0xLjMwMy0uNzQ0TDQuMzM1IDcuNjJhMS4yNSAxLjI1IDAgMCAwIDAtMS4yNEwxLjkwMiAyLjEyMmEuNzUuNzUgMCAwIDEgLjI4LTEuMDIzWiIgZmlsbD0iI2ZmZiIvPjwvc3ZnPmAsUVJDT0RFX0lDT046TGA8c3ZnIHdpZHRoPSIyNSIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI1IDI0Ij48cGF0aCBkPSJNMjMuNzQ4IDlhLjc0OC43NDggMCAwIDAgLjc0OC0uNzUyYy0uMDE4LTIuNTk2LS4xMjgtNC4wNy0uNzg0LTUuMjJhNiA2IDAgMCAwLTIuMjQtMi4yNGMtMS4xNS0uNjU2LTIuNjI0LS43NjYtNS4yMi0uNzg0YS43NDguNzQ4IDAgMCAwLS43NTIuNzQ4YzAgLjQxNC4zMzUuNzQ5Ljc0OC43NTIgMS4wMTUuMDA3IDEuODIuMDI4IDIuNDk0LjA4OC45OTUuMDkgMS41NjEuMjU2IDEuOTg4LjUuNy4zOTggMS4yOC45NzggMS42NzkgMS42NzguMjQzLjQyNy40MS45OTMuNDk4IDEuOTg4LjA2MS42NzUuMDgyIDEuNDc5LjA5IDIuNDkzYS43NTMuNzUzIDAgMCAwIC43NS43NDlaTTMuNTI3Ljc4OEM0LjY3Ny4xMzIgNi4xNTIuMDIyIDguNzQ3LjAwNEEuNzQ4Ljc0OCAwIDAgMSA5LjUuNzUyYS43NTMuNzUzIDAgMCAxLS43NDkuNzUyYy0xLjAxNC4wMDctMS44MTguMDI4LTIuNDkzLjA4OC0uOTk1LjA5LTEuNTYxLjI1Ni0xLjk4OC41LS43LjM5OC0xLjI4Ljk3OC0xLjY3OSAxLjY3OC0uMjQzLjQyNy0uNDEuOTkzLS40OTkgMS45ODgtLjA2LjY3NS0uMDgxIDEuNDc5LS4wODggMi40OTNBLjc1My43NTMgMCAwIDEgMS4yNTIgOWEuNzQ4Ljc0OCAwIDAgMS0uNzQ4LS43NTJjLjAxOC0yLjU5Ni4xMjgtNC4wNy43ODQtNS4yMmE2IDYgMCAwIDEgMi4yNC0yLjI0Wk0xLjI1MiAxNWEuNzQ4Ljc0OCAwIDAgMC0uNzQ4Ljc1MmMuMDE4IDIuNTk2LjEyOCA0LjA3Ljc4NCA1LjIyYTYgNiAwIDAgMCAyLjI0IDIuMjRjMS4xNS42NTYgMi42MjQuNzY2IDUuMjIuNzg0YS43NDguNzQ4IDAgMCAwIC43NTItLjc0OC43NTMuNzUzIDAgMCAwLS43NDktLjc1MmMtMS4wMTQtLjAwNy0xLjgxOC0uMDI4LTIuNDkzLS4wODktLjk5NS0uMDg5LTEuNTYxLS4yNTUtMS45ODgtLjQ5OGE0LjUgNC41IDAgMCAxLTEuNjc5LTEuNjhjLS4yNDMtLjQyNi0uNDEtLjk5Mi0uNDk5LTEuOTg3LS4wNi0uNjc1LS4wODEtMS40NzktLjA4OC0yLjQ5M0EuNzUzLjc1MyAwIDAgMCAxLjI1MiAxNVpNMjIuOTk2IDE1Ljc0OWEuNzUzLjc1MyAwIDAgMSAuNzUyLS43NDljLjQxNSAwIC43NTEuMzM4Ljc0OC43NTItLjAxOCAyLjU5Ni0uMTI4IDQuMDctLjc4NCA1LjIyYTYgNiAwIDAgMS0yLjI0IDIuMjRjLTEuMTUuNjU2LTIuNjI0Ljc2Ni01LjIyLjc4NGEuNzQ4Ljc0OCAwIDAgMS0uNzUyLS43NDhjMC0uNDE0LjMzNS0uNzQ5Ljc0OC0uNzUyIDEuMDE1LS4wMDcgMS44Mi0uMDI4IDIuNDk0LS4wODkuOTk1LS4wODkgMS41NjEtLjI1NSAxLjk4OC0uNDk4YTQuNSA0LjUgMCAwIDAgMS42NzktMS42OGMuMjQzLS40MjYuNDEtLjk5Mi40OTgtMS45ODcuMDYxLS42NzUuMDgyLTEuNDc5LjA5LTIuNDkzWiIgZmlsbD0iI2ZmZiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNyA0YTIuNSAyLjUgMCAwIDAtMi41IDIuNXYyQTIuNSAyLjUgMCAwIDAgNyAxMWgyYTIuNSAyLjUgMCAwIDAgMi41LTIuNXYtMkEyLjUgMi41IDAgMCAwIDkgNEg3Wm0yIDEuNUg3YTEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDAgMSAxaDJhMSAxIDAgMCAwIDEtMXYtMmExIDEgMCAwIDAtMS0xWk0xMy41IDYuNUEyLjUgMi41IDAgMCAxIDE2IDRoMmEyLjUgMi41IDAgMCAxIDIuNSAyLjV2MkEyLjUgMi41IDAgMCAxIDE4IDExaC0yYTIuNSAyLjUgMCAwIDEtMi41LTIuNXYtMlptMi41LTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtMmExIDEgMCAwIDEtMS0xdi0yYTEgMSAwIDAgMSAxLTFaTTcgMTNhMi41IDIuNSAwIDAgMC0yLjUgMi41djJBMi41IDIuNSAwIDAgMCA3IDIwaDJhMi41IDIuNSAwIDAgMCAyLjUtMi41di0yQTIuNSAyLjUgMCAwIDAgOSAxM0g3Wm0yIDEuNUg3YTEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDAgMSAxaDJhMSAxIDAgMCAwIDEtMXYtMmExIDEgMCAwIDAtMS0xWiIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Ik0xMy41IDE1LjVjMC0uNDY1IDAtLjY5Ny4wMzgtLjg5YTIgMiAwIDAgMSAxLjU3Mi0xLjU3MkMxNS4zMDMgMTMgMTUuNTM1IDEzIDE2IDEzdjIuNWgtMi41Wk0xOCAxM2MuNDY1IDAgLjY5NyAwIC44OS4wMzhhMiAyIDAgMCAxIDEuNTcyIDEuNTcyYy4wMzguMTkzLjAzOC40MjUuMDM4Ljg5SDE4VjEzWk0xOCAxNy41aDIuNWMwIC40NjUgMCAuNjk3LS4wMzguODlhMiAyIDAgMCAxLTEuNTcyIDEuNTcyQzE4LjY5NyAyMCAxOC40NjUgMjAgMTggMjB2LTIuNVpNMTMuNSAxNy41SDE2VjIwYy0uNDY1IDAtLjY5NyAwLS44OS0uMDM4YTIgMiAwIDAgMS0xLjU3Mi0xLjU3MmMtLjAzOC0uMTkzLS4wMzgtLjQyNS0uMDM4LS44OVoiIGZpbGw9IiNmZmYiLz48L3N2Zz5gLFNDQU5fSUNPTjpMYDxzdmcgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTAgMTUuMjE2YzAgLjQyMi4zNDcuNzYzLjc2OC43NCAxLjIwMi0uMDY0IDIuMDI1LS4yMjIgMi43MS0uNjEzYTUuMDAxIDUuMDAxIDAgMCAwIDEuODY1LTEuODY2Yy4zOS0uNjg0LjU0OS0xLjUwNy42MTMtMi43MDlhLjczNS43MzUgMCAwIDAtLjc0LS43NjguNzY4Ljc2OCAwIDAgMC0uNzYuNzMyYy0uMDA5LjE1Ny0uMDIuMzA2LS4wMzIuNDQ3LS4wNzMuODEyLS4yMDYgMS4yNDQtLjM4NCAxLjU1NS0uMzEuNTQ1LS43NjEuOTk2LTEuMzA2IDEuMzA2LS4zMTEuMTc4LS43NDMuMzExLTEuNTU1LjM4NC0uMTQxLjAxMy0uMjkuMDIzLS40NDcuMDMyYS43NjguNzY4IDAgMCAwLS43MzIuNzZaTTEwIC43ODRjMCAuNDA3LjMyNS43MzcuNzMyLjc2LjE1Ny4wMDkuMzA2LjAyLjQ0Ny4wMzIuODEyLjA3MyAxLjI0NC4yMDYgMS41NTUuMzg0YTMuNSAzLjUgMCAwIDEgMS4zMDYgMS4zMDZjLjE3OC4zMTEuMzExLjc0My4zODQgMS41NTUuMDEzLjE0Mi4wMjMuMjkuMDMyLjQ0N2EuNzY4Ljc2OCAwIDAgMCAuNzYuNzMyLjczNC43MzQgMCAwIDAgLjc0LS43NjhjLS4wNjQtMS4yMDItLjIyMi0yLjAyNS0uNjEzLTIuNzFBNSA1IDAgMCAwIDEzLjQ3Ny42NThjLS42ODQtLjM5LTEuNTA3LS41NDktMi43MDktLjYxM2EuNzM1LjczNSAwIDAgMC0uNzY4Ljc0Wk01LjIzMi4wNDRBLjczNS43MzUgMCAwIDEgNiAuNzg0YS43NjguNzY4IDAgMCAxLS43MzIuNzZjLS4xNTcuMDA5LS4zMDUuMDItLjQ0Ny4wMzItLjgxMi4wNzMtMS4yNDQuMjA2LTEuNTU1LjM4NEEzLjUgMy41IDAgMCAwIDEuOTYgMy4yNjZjLS4xNzguMzExLS4zMTEuNzQzLS4zODQgMS41NTUtLjAxMy4xNDItLjAyMy4yOS0uMDMyLjQ0N0EuNzY4Ljc2OCAwIDAgMSAuNzg0IDZhLjczNS43MzUgMCAwIDEtLjc0LS43NjhjLjA2NC0xLjIwMi4yMjItMi4wMjUuNjEzLTIuNzFBNSA1IDAgMCAxIDIuNTIzLjY1OEMzLjIwNy4yNjcgNC4wMy4xMDggNS4yMzMuMDQ0Wk01LjI2OCAxNC40NTZhLjc2OC43NjggMCAwIDEgLjczMi43Ni43MzQuNzM0IDAgMCAxLS43NjguNzRjLTEuMjAyLS4wNjQtMi4wMjUtLjIyMi0yLjcxLS42MTNhNSA1IDAgMCAxLTEuODY1LTEuODY2Yy0uMzktLjY4NC0uNTQ5LTEuNTA3LS42MTMtMi43MDlBLjczNS43MzUgMCAwIDEgLjc4NCAxMGMuNDA3IDAgLjczNy4zMjUuNzYuNzMyLjAwOS4xNTcuMDIuMzA2LjAzMi40NDcuMDczLjgxMi4yMDYgMS4yNDQuMzg0IDEuNTU1YTMuNSAzLjUgMCAwIDAgMS4zMDYgMS4zMDZjLjMxMS4xNzguNzQzLjMxMSAxLjU1NS4zODQuMTQyLjAxMy4yOS4wMjMuNDQ3LjAzMloiLz48L3N2Zz5gLENIRUNLTUFSS19JQ09OOkxgPHN2ZyB3aWR0aD0iMTMiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMyAxMiI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMi4xNTUuMTMyYS43NS43NSAwIDAgMSAuMjMyIDEuMDM1TDUuODIxIDExLjUzNWExIDEgMCAwIDEtMS42MjYuMDlMLjY2NSA3LjIxYS43NS43NSAwIDEgMSAxLjE3LS45MzdMNC43MSA5Ljg2N2EuMjUuMjUgMCAwIDAgLjQwNi0uMDIzTDExLjEyLjM2NGEuNzUuNzUgMCAwIDEgMS4wMzUtLjIzMloiIGZpbGw9IiNmZmYiLz48L3N2Zz5gLFNFQVJDSF9JQ09OOkxgPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjEiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTIuNDMyIDEzLjk5MmMtLjM1NC0uMzUzLS45MS0uMzgyLTEuMzUtLjE0NmE1LjUgNS41IDAgMSAxIDIuMjY1LTIuMjY1Yy0uMjM3LjQ0MS0uMjA4Ljk5Ny4xNDUgMS4zNWwzLjI5NiAzLjI5NmEuNzUuNzUgMCAxIDEtMS4wNiAxLjA2MWwtMy4yOTYtMy4yOTZabS4wNi01YTQgNCAwIDEgMS04IDAgNCA0IDAgMCAxIDggMFoiIGZpbGw9IiM5NDlFOUUiLz48L3N2Zz5gLFdBTExFVF9QTEFDRUhPTERFUjpMYDxzdmcgd2lkdGg9IjYwIiBoZWlnaHQ9IjYwIiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgNjAgNjAiPjxnIGNsaXAtcGF0aD0idXJsKCNxKSI+PHBhdGggaWQ9IndhbGxldC1wbGFjZWhvbGRlci1maWxsIiBmaWxsPSIjZmZmIiBkPSJNMCAyNC45YzAtOS4yNTEgMC0xMy44NzcgMS45Ny0xNy4zMzJhMTUgMTUgMCAwIDEgNS41OTgtNS41OTdDMTEuMDIzIDAgMTUuNjQ4IDAgMjQuOSAwaDEwLjJjOS4yNTIgMCAxMy44NzcgMCAxNy4zMzIgMS45N2ExNSAxNSAwIDAgMSA1LjU5NyA1LjU5OEM2MCAxMS4wMjMgNjAgMTUuNjQ4IDYwIDI0Ljl2MTAuMmMwIDkuMjUyIDAgMTMuODc3LTEuOTcgMTcuMzMyYTE1LjAwMSAxNS4wMDEgMCAwIDEtNS41OTggNS41OTdDNDguOTc3IDYwIDQ0LjM1MiA2MCAzNS4xIDYwSDI0LjljLTkuMjUxIDAtMTMuODc3IDAtMTcuMzMyLTEuOTdhMTUgMTUgMCAwIDEtNS41OTctNS41OThDMCA0OC45NzcgMCA0NC4zNTIgMCAzNS4xVjI0LjlaIi8+PHBhdGggaWQ9IndhbGxldC1wbGFjZWhvbGRlci1kYXNoIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1kYXNoYXJyYXk9IjQgNCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Ik0uMDQgNDEuNzA4YTIzMS41OTggMjMxLjU5OCAwIDAgMS0uMDM5LTQuNDAzbC43NS0uMDAxTC43NSAzNS4xdi0yLjU1SDB2LTUuMWguNzVWMjQuOWwuMDAxLTIuMjA0aC0uNzVjLjAwMy0xLjYxNy4wMTEtMy4wNzcuMDM5LTQuNDA0bC43NS4wMTZjLjAzNC0xLjY1LjA5OS0zLjA4LjIxOC00LjM0M2wtLjc0Ni0uMDdjLjE1OC0xLjY3OC40MTItMy4wODMuODItNC4zMTZsLjcxMy4yMzZjLjIyNC0uNjc5LjQ5Ny0xLjI5Ni44MjctMS44NzVhMTQuMjUgMTQuMjUgMCAwIDEgMS4wNS0xLjU4NUwzLjA3NiA1LjlBMTUgMTUgMCAwIDEgNS45IDMuMDc2bC40NTUuNTk2YTE0LjI1IDE0LjI1IDAgMCAxIDEuNTg1LTEuMDVjLjU3OS0uMzMgMS4xOTYtLjYwMyAxLjg3NS0uODI3bC0uMjM2LS43MTJDMTAuODEyLjY3NCAxMi4yMTcuNDIgMTMuODk1LjI2MmwuMDcuNzQ2QzE1LjIzLjg5IDE2LjY2LjgyNCAxOC4zMDguNzlsLS4wMTYtLjc1QzE5LjYyLjAxMiAyMS4wOC4wMDQgMjIuNjk1LjAwMWwuMDAxLjc1TDI0LjkuNzVoMi41NVYwaDUuMXYuNzVoMi41NWwyLjIwNC4wMDF2LS43NWMxLjYxNy4wMDMgMy4wNzcuMDExIDQuNDA0LjAzOWwtLjAxNi43NWMxLjY1LjAzNCAzLjA4LjA5OSA0LjM0My4yMThsLjA3LS43NDZjMS42NzguMTU4IDMuMDgzLjQxMiA0LjMxNi44MmwtLjIzNi43MTNjLjY3OS4yMjQgMS4yOTYuNDk3IDEuODc1LjgyN2ExNC4yNCAxNC4yNCAwIDAgMSAxLjU4NSAxLjA1bC40NTUtLjU5NkExNC45OTkgMTQuOTk5IDAgMCAxIDU2LjkyNCA1LjlsLS41OTYuNDU1Yy4zODQuNTAyLjczNSAxLjAzMiAxLjA1IDEuNTg1LjMzLjU3OS42MDIgMS4xOTYuODI3IDEuODc1bC43MTItLjIzNmMuNDA5IDEuMjMzLjY2MyAyLjYzOC44MjIgNC4zMTZsLS43NDcuMDdjLjExOSAxLjI2NC4xODQgMi42OTQuMjE4IDQuMzQzbC43NS0uMDE2Yy4wMjggMS4zMjcuMDM2IDIuNzg3LjAzOSA0LjQwM2wtLjc1LjAwMS4wMDEgMi4yMDR2Mi41NUg2MHY1LjFoLS43NXYyLjU1bC0uMDAxIDIuMjA0aC43NWEyMzEuNDMxIDIzMS40MzEgMCAwIDEtLjAzOSA0LjQwNGwtLjc1LS4wMTZjLS4wMzQgMS42NS0uMDk5IDMuMDgtLjIxOCA0LjM0M2wuNzQ3LjA3Yy0uMTU5IDEuNjc4LS40MTMgMy4wODMtLjgyMiA0LjMxNmwtLjcxMi0uMjM2YTEwLjI1NSAxMC4yNTUgMCAwIDEtLjgyNyAxLjg3NSAxNC4yNDIgMTQuMjQyIDAgMCAxLTEuMDUgMS41ODVsLjU5Ni40NTVhMTQuOTk3IDE0Ljk5NyAwIDAgMS0yLjgyNCAyLjgyNGwtLjQ1NS0uNTk2Yy0uNTAyLjM4NC0xLjAzMi43MzUtMS41ODUgMS4wNS0uNTc5LjMzLTEuMTk2LjYwMi0xLjg3NS44MjdsLjIzNi43MTJjLTEuMjMzLjQwOS0yLjYzOC42NjMtNC4zMTYuODIybC0uMDctLjc0N2MtMS4yNjQuMTE5LTIuNjk0LjE4NC00LjM0My4yMThsLjAxNi43NWMtMS4zMjcuMDI4LTIuNzg3LjAzNi00LjQwMy4wMzlsLS4wMDEtLjc1LTIuMjA0LjAwMWgtMi41NVY2MGgtNS4xdi0uNzVIMjQuOWwtMi4yMDQtLjAwMXYuNzVhMjMxLjQzMSAyMzEuNDMxIDAgMCAxLTQuNDA0LS4wMzlsLjAxNi0uNzVjLTEuNjUtLjAzNC0zLjA4LS4wOTktNC4zNDMtLjIxOGwtLjA3Ljc0N2MtMS42NzgtLjE1OS0zLjA4My0uNDEzLTQuMzE2LS44MjJsLjIzNi0uNzEyYTEwLjI1OCAxMC4yNTggMCAwIDEtMS44NzUtLjgyNyAxNC4yNTIgMTQuMjUyIDAgMCAxLTEuNTg1LTEuMDVsLS40NTUuNTk2QTE0Ljk5OSAxNC45OTkgMCAwIDEgMy4wNzYgNTQuMWwuNTk2LS40NTVhMTQuMjQgMTQuMjQgMCAwIDEtMS4wNS0xLjU4NSAxMC4yNTkgMTAuMjU5IDAgMCAxLS44MjctMS44NzVsLS43MTIuMjM2Qy42NzQgNDkuMTg4LjQyIDQ3Ljc4My4yNjIgNDYuMTA1bC43NDYtLjA3Qy44OSA0NC43Ny44MjQgNDMuMzQuNzkgNDEuNjkybC0uNzUuMDE2WiIvPjxwYXRoIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTM1LjY0MyAzMi4xNDVjLS4yOTctLjc0My0uNDQ1LTEuMTE0LS40MDEtMS4yNzVhLjQyLjQyIDAgMCAxIC4xODItLjI3Yy4xMzQtLjEuNDYzLS4xIDEuMTIzLS4xLjc0MiAwIDEuNDk5LjA0NiAyLjIzNi0uMDVhNiA2IDAgMCAwIDUuMTY2LTUuMTY2Yy4wNTEtLjM5LjA1MS0uODU1LjA1MS0xLjc4NCAwLS45MjggMC0xLjM5My0uMDUxLTEuNzgzYTYgNiAwIDAgMC01LjE2Ni01LjE2NWMtLjM5LS4wNTItLjg1NC0uMDUyLTEuNzgzLS4wNTJoLTcuNzJjLTQuOTM0IDAtNy40MDEgMC05LjI0NCAxLjA1MWE4IDggMCAwIDAtMi45ODUgMi45ODZDMTYuMDU3IDIyLjI4IDE2LjAwMyAyNC41OCAxNiAyOSAxNS45OTggMzEuMDc1IDE2IDMzLjE1IDE2IDM1LjIyNEE3Ljc3OCA3Ljc3OCAwIDAgMCAyMy43NzggNDNIMjguNWMxLjM5NCAwIDIuMDkgMCAyLjY3LS4xMTZhNiA2IDAgMCAwIDQuNzE1LTQuNzE0Yy4xMTUtLjU4LjExNS0xLjMwMS4xMTUtMi43NDQgMC0xLjMxIDAtMS45NjQtLjExNC0yLjQ5YTQuOTk4IDQuOTk4IDAgMCAwLS4yNDMtLjc5MloiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiM5RUE5QTkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTM3IDE4aC03LjcyYy0yLjQ5NCAwLTQuMjY2LjAwMi01LjY0Ny4xMjYtMS4zNjEuMTIyLTIuMTk3LjM1NC0yLjg1NC43MjhhNi41IDYuNSAwIDAgMC0yLjQyNSAyLjQyNmMtLjM3NS42NTctLjYwNyAxLjQ5Mi0uNzI5IDIuODUzLS4xMSAxLjIzMy0uMTIzIDIuNzc3LS4xMjUgNC44NjcgMCAuNyAwIDEuMDUuMDk3IDEuMTgxLjA5Ni4xMy4xODIuMTgxLjM0My4yLjE2My4wMi41MTgtLjE4IDEuMjI5LS41ODFhNi4xOTUgNi4xOTUgMCAwIDEgMy4wNTMtLjhIMzdjLjk3NyAwIDEuMzItLjAwMyAxLjU4Ny0uMDM4YTQuNSA0LjUgMCAwIDAgMy44NzQtMy44NzRjLjAzNi0uMjY4LjAzOS0uNjExLjAzOS0xLjU4OCAwLS45NzYtLjAwMy0xLjMxOS0uMDM4LTEuNTg3YTQuNSA0LjUgMCAwIDAtMy44NzUtMy44NzRDMzguMzIgMTguMDA0IDM3Ljk3NyAxOCAzNyAxOFptLTcuMzY0IDEyLjVoLTcuNDE0YTQuNzIyIDQuNzIyIDAgMCAwLTQuNzIyIDQuNzIzIDYuMjc4IDYuMjc4IDAgMCAwIDYuMjc4IDYuMjc4SDI4LjVjMS40NjYgMCAxLjk4LS4wMDggMi4zNzgtLjA4N2E0LjUgNC41IDAgMCAwIDMuNTM1LTMuNTM2Yy4wOC0uMzk3LjA4Ny0uOTMzLjA4Ny0yLjQ1MSAwLTEuMzkxLS4wMDktMS44NDMtLjA4LTIuMTdhMy41IDMuNSAwIDAgMC0yLjY3Ni0yLjY3NmMtLjMyOC0uMDcyLS43NjItLjA4LTIuMTA4LS4wOFoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9InEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoNjB2NjBIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz5gLEdMT0JFX0lDT046TGA8c3ZnIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNS41IDhhNy41IDcuNSAwIDEgMS0xNSAwIDcuNSA3LjUgMCAwIDEgMTUgMFptLTIuMTEzLjc1Yy4zMDEgMCAuNTM1LjI2NC40Ny41NThhNi4wMSA2LjAxIDAgMCAxLTIuODY3IDMuODk2Yy0uMjAzLjExNi0uNDItLjEwMy0uMzM0LS4zMi40MDktMS4wMTguNjkxLTIuMjc0Ljc5Ny0zLjY1N2EuNTEyLjUxMiAwIDAgMSAuNTA3LS40NzdoMS40MjdabS40Ny0yLjA1OGMuMDY1LjI5NC0uMTY5LjU1OC0uNDcuNTU4SDExLjk2YS41MTIuNTEyIDAgMCAxLS41MDctLjQ3N2MtLjEwNi0xLjM4My0uMzg5LTIuNjM4LS43OTctMy42NTYtLjA4Ny0uMjE3LjEzLS40MzcuMzMzLS4zMmE2LjAxIDYuMDEgMCAwIDEgMi44NjggMy44OTVabS00LjQwMi41NThjLjI4NiAwIC41MTUtLjI0LjQ5LS41MjUtLjEyMS0xLjM2MS0uNDI5LTIuNTM0LS44My0zLjM5My0uMjc5LS42LS41NDktLjkzLS43NTMtMS4xMTJhLjUzNS41MzUgMCAwIDAtLjcyNCAwYy0uMjA0LjE4Mi0uNDc0LjUxMy0uNzU0IDEuMTEyLS40Ljg1OS0uNzA4IDIuMDMyLS44MjggMy4zOTNhLjQ4Ni40ODYgMCAwIDAgLjQ5LjUyNWgyLjkwOVptLTUuNDE1IDBjLjI2NyAwIC40ODYtLjIxLjUwNy0uNDc3LjEwNi0xLjM4My4zODktMi42MzguNzk3LTMuNjU2LjA4Ny0uMjE3LS4xMy0uNDM3LS4zMzMtLjMyYTYuMDEgNi4wMSAwIDAgMC0yLjg2OCAzLjg5NWMtLjA2NS4yOTQuMTY5LjU1OC40Ny41NThINC4wNFpNMi4xNDMgOS4zMDhjLS4wNjUtLjI5NC4xNjktLjU1OC40Ny0uNTU4SDQuMDRjLjI2NyAwIC40ODYuMjEuNTA3LjQ3Ny4xMDYgMS4zODMuMzg5IDIuNjM5Ljc5NyAzLjY1Ny4wODcuMjE3LS4xMy40MzYtLjMzMy4zMmE2LjAxIDYuMDEgMCAwIDEtMi44NjgtMy44OTZabTMuOTEzLS4wMzNhLjQ4Ni40ODYgMCAwIDEgLjQ5LS41MjVoMi45MDljLjI4NiAwIC41MTUuMjQuNDkuNTI1LS4xMjEgMS4zNjEtLjQyOCAyLjUzNS0uODMgMy4zOTQtLjI3OS42LS41NDkuOTMtLjc1MyAxLjExMmEuNTM1LjUzNSAwIDAgMS0uNzI0IDBjLS4yMDQtLjE4Mi0uNDc0LS41MTMtLjc1NC0xLjExMi0uNC0uODU5LS43MDgtMi4wMzMtLjgyOC0zLjM5NFoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPmB9LHFpPVBgLndjbS10b29sYmFyLXBsYWNlaG9sZGVye3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3dpZHRoOjEwMCU7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jaztwb2ludGVyLWV2ZW50czpub25lO2hlaWdodDoxMDBweDtib3JkZXItcmFkaXVzOmNhbGModmFyKC0td2NtLWJhY2tncm91bmQtYm9yZGVyLXJhZGl1cykgKiAuOSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS13Y20tYmFja2dyb3VuZC1jb2xvcik7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXI7YmFja2dyb3VuZC1zaXplOmNvdmVyfS53Y20tdG9vbGJhcntoZWlnaHQ6MzhweDtkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luOjVweCAxNXB4IDVweCA1cHg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyfS53Y20tdG9vbGJhciBpbWcsLndjbS10b29sYmFyIHN2Z3toZWlnaHQ6MjhweDtvYmplY3QtcG9zaXRpb246bGVmdCBjZW50ZXI7b2JqZWN0LWZpdDpjb250YWlufSN3Y20td2MtbG9nbyBwYXRoe2ZpbGw6dmFyKC0td2NtLWFjY2VudC1maWxsLWNvbG9yKX1idXR0b257d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtib3JkZXItcmFkaXVzOnZhcigtLXdjbS1pY29uLWJ1dHRvbi1ib3JkZXItcmFkaXVzKTtib3JkZXI6MDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS13Y20tY29sb3ItYmctMSk7Ym94LXNoYWRvdzowIDAgMCAxcHggdmFyKC0td2NtLWNvbG9yLW92ZXJsYXkpfWJ1dHRvbjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS13Y20tY29sb3ItYmctMil9YnV0dG9uIHN2Z3tkaXNwbGF5OmJsb2NrO29iamVjdC1wb3NpdGlvbjpjZW50ZXJ9YnV0dG9uIHBhdGh7ZmlsbDp2YXIoLS13Y20tY29sb3ItZmctMSl9LndjbS10b29sYmFyIGRpdntkaXNwbGF5OmZsZXh9QG1lZGlhKGhvdmVyOmhvdmVyKXtidXR0b246aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS13Y20tY29sb3ItYmctMil9fWA7dmFyIEtpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsWWk9KGUsdCxyLG4pPT57Zm9yKHZhciBvPW4+MT92b2lkIDA6bj9LaSh0LHIpOnQsaT1lLmxlbmd0aC0xLHM7aT49MDtpLS0pKHM9ZVtpXSkmJihvPXMobyl8fG8pO3JldHVybiBvfTtsZXQgSmU9Y2xhc3MgZXh0ZW5kcyBFe3JlbmRlcigpe3JldHVybiBtYDxkaXYgY2xhc3M9IndjbS10b29sYmFyLXBsYWNlaG9sZGVyIj48L2Rpdj48ZGl2IGNsYXNzPSJ3Y20tdG9vbGJhciI+JHtULldBTExFVF9DT05ORUNUX0xPR099IDxidXR0b24gQGNsaWNrPSIke3JlLmNsb3NlfSI+JHtULkNST1NTX0lDT059PC9idXR0b24+PC9kaXY+YH19O0plLnN0eWxlcz1bTy5nbG9iYWxDc3MscWldO0plPVlpKFtJKCJ3Y20tbW9kYWwtYmFja2NhcmQiKV0sSmUpO2NvbnN0IFFpPVBgbWFpbntwYWRkaW5nOjIwcHg7cGFkZGluZy10b3A6MDt3aWR0aDoxMDAlfWA7dmFyIEdpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsSmk9KGUsdCxyLG4pPT57Zm9yKHZhciBvPW4+MT92b2lkIDA6bj9HaSh0LHIpOnQsaT1lLmxlbmd0aC0xLHM7aT49MDtpLS0pKHM9ZVtpXSkmJihvPXMobyl8fG8pO3JldHVybiBvfTtsZXQgWGU9Y2xhc3MgZXh0ZW5kcyBFe3JlbmRlcigpe3JldHVybiBtYDxtYWluPjxzbG90Pjwvc2xvdD48L21haW4+YH19O1hlLnN0eWxlcz1bTy5nbG9iYWxDc3MsUWldO1hlPUppKFtJKCJ3Y20tbW9kYWwtY29udGVudCIpXSxYZSk7Y29uc3QgWGk9UGBmb290ZXJ7cGFkZGluZzoxMHB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6aW5oZXJpdDtqdXN0aWZ5LWNvbnRlbnQ6aW5oZXJpdDtib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS13Y20tY29sb3ItYmctMil9YDt2YXIgdHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixlcz0oZSx0LHIsbik9Pntmb3IodmFyIG89bj4xP3ZvaWQgMDpuP3RzKHQscik6dCxpPWUubGVuZ3RoLTEscztpPj0wO2ktLSkocz1lW2ldKSYmKG89cyhvKXx8byk7cmV0dXJuIG99O2xldCB0cj1jbGFzcyBleHRlbmRzIEV7cmVuZGVyKCl7cmV0dXJuIG1gPGZvb3Rlcj48c2xvdD48L3Nsb3Q+PC9mb290ZXI+YH19O3RyLnN0eWxlcz1bTy5nbG9iYWxDc3MsWGldO3RyPWVzKFtJKCJ3Y20tbW9kYWwtZm9vdGVyIildLHRyKTtjb25zdCBycz1QYGhlYWRlcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzoyMHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS53Y20tYm9yZGVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLXdjbS1jb2xvci1iZy0yKTttYXJnaW4tYm90dG9tOjIwcHh9aGVhZGVyIGJ1dHRvbntwYWRkaW5nOjE1cHggMjBweH1oZWFkZXIgYnV0dG9uOmFjdGl2ZXtvcGFjaXR5Oi41fUBtZWRpYShob3Zlcjpob3Zlcil7aGVhZGVyIGJ1dHRvbjpob3ZlcntvcGFjaXR5Oi41fX0ud2NtLWJhY2stYnRue3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MH0ud2NtLWFjdGlvbi1idG57cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MH1wYXRoe2ZpbGw6dmFyKC0td2NtLWFjY2VudC1jb2xvcil9YDt2YXIgb3M9T2JqZWN0LmRlZmluZVByb3BlcnR5LG5zPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsUXQ9KGUsdCxyLG4pPT57Zm9yKHZhciBvPW4+MT92b2lkIDA6bj9ucyh0LHIpOnQsaT1lLmxlbmd0aC0xLHM7aT49MDtpLS0pKHM9ZVtpXSkmJihvPShuP3ModCxyLG8pOnMobykpfHxvKTtyZXR1cm4gbiYmbyYmb3ModCxyLG8pLG99O2xldCBmdD1jbGFzcyBleHRlbmRzIEV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudGl0bGU9IiIsdGhpcy5vbkFjdGlvbj12b2lkIDAsdGhpcy5hY3Rpb25JY29uPXZvaWQgMCx0aGlzLmJvcmRlcj0hMX1iYWNrQnRuVGVtcGxhdGUoKXtyZXR1cm4gbWA8YnV0dG9uIGNsYXNzPSJ3Y20tYmFjay1idG4iIEBjbGljaz0iJHtOLmdvQmFja30iPiR7VC5CQUNLX0lDT059PC9idXR0b24+YH1hY3Rpb25CdG5UZW1wbGF0ZSgpe3JldHVybiBtYDxidXR0b24gY2xhc3M9IndjbS1hY3Rpb24tYnRuIiBAY2xpY2s9IiR7dGhpcy5vbkFjdGlvbn0iPiR7dGhpcy5hY3Rpb25JY29ufTwvYnV0dG9uPmB9cmVuZGVyKCl7Y29uc3QgZT17IndjbS1ib3JkZXIiOnRoaXMuYm9yZGVyfSx0PU4uc3RhdGUuaGlzdG9yeS5sZW5ndGg+MSxyPXRoaXMudGl0bGU/bWA8d2NtLXRleHQgdmFyaWFudD0iYmlnLWJvbGQiPiR7dGhpcy50aXRsZX08L3djbS10ZXh0PmA6bWA8c2xvdD48L3Nsb3Q+YDtyZXR1cm4gbWA8aGVhZGVyIGNsYXNzPSIke0coZSl9Ij4ke3Q/dGhpcy5iYWNrQnRuVGVtcGxhdGUoKTpudWxsfSAke3J9ICR7dGhpcy5vbkFjdGlvbj90aGlzLmFjdGlvbkJ0blRlbXBsYXRlKCk6bnVsbH08L2hlYWRlcj5gfX07ZnQuc3R5bGVzPVtPLmdsb2JhbENzcyxyc107UXQoW18oKV0sZnQucHJvdG90eXBlLCJ0aXRsZSIsMik7UXQoW18oKV0sZnQucHJvdG90eXBlLCJvbkFjdGlvbiIsMik7UXQoW18oKV0sZnQucHJvdG90eXBlLCJhY3Rpb25JY29uIiwyKTtRdChbXyh7dHlwZTpCb29sZWFufSldLGZ0LnByb3RvdHlwZSwiYm9yZGVyIiwyKTtmdD1RdChbSSgid2NtLW1vZGFsLWhlYWRlciIpXSxmdCk7Y29uc3QgJD17TU9CSUxFX0JSRUFLUE9JTlQ6NjAwLFdDTV9SRUNFTlRfV0FMTEVUX0RBVEE6IldDTV9SRUNFTlRfV0FMTEVUX0RBVEEiLEVYUExPUkVSX1dBTExFVF9VUkw6Imh0dHBzOi8vZXhwbG9yZXIud2FsbGV0Y29ubmVjdC5jb20vP3R5cGU9d2FsbGV0IixnZXRTaGFkb3dSb290RWxlbWVudChlLHQpe2NvbnN0IHI9ZS5yZW5kZXJSb290LnF1ZXJ5U2VsZWN0b3IodCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKGAke3R9IG5vdCBmb3VuZGApO3JldHVybiByfSxnZXRXYWxsZXRJY29uKHtpZDplLGltYWdlX2lkOnR9KXtjb25zdHt3YWxsZXRJbWFnZXM6cn09aHQuc3RhdGU7cmV0dXJuIHI/LltlXT9yW2VdOnQ/ai5nZXRXYWxsZXRJbWFnZVVybCh0KToiIn0sZ2V0V2FsbGV0TmFtZShlLHQ9ITEpe3JldHVybiB0JiZlLmxlbmd0aD44P2Ake2Uuc3Vic3RyaW5nKDAsOCl9Li5gOmV9LGlzTW9iaWxlQW5pbWF0aW9uKCl7cmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoPD0kLk1PQklMRV9CUkVBS1BPSU5UfSxhc3luYyBwcmVsb2FkSW1hZ2UoZSl7Y29uc3QgdD1uZXcgUHJvbWlzZSgocixuKT0+e2NvbnN0IG89bmV3IEltYWdlO28ub25sb2FkPXIsby5vbmVycm9yPW4sby5jcm9zc09yaWdpbj0iYW5vbnltb3VzIixvLnNyYz1lfSk7cmV0dXJuIFByb21pc2UucmFjZShbdCx4LndhaXQoM2UzKV0pfSxnZXRFcnJvck1lc3NhZ2UoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvcj9lLm1lc3NhZ2U6IlVua25vd24gRXJyb3IifSxkZWJvdW5jZShlLHQ9NTAwKXtsZXQgcjtyZXR1cm4oLi4ubik9PntmdW5jdGlvbiBvKCl7ZSguLi5uKX1yJiZjbGVhclRpbWVvdXQocikscj1zZXRUaW1lb3V0KG8sdCl9fSxoYW5kbGVNb2JpbGVMaW5raW5nKGUsdD0iX3NlbGYiKXtjb25zdHt3YWxsZXRDb25uZWN0VXJpOnJ9PVouc3RhdGUse21vYmlsZTpuLG5hbWU6b309ZSxpPW4/Lm5hdGl2ZSxzPW4/LnVuaXZlcnNhbDskLnNldFJlY2VudFdhbGxldChlKTtmdW5jdGlvbiBsKGEpe2lmKGkpe2NvbnN0IGM9eC5mb3JtYXROYXRpdmVVcmwoaSxhLG8pO3gub3BlbkhyZWYoYyx0KX1lbHNlIGlmKHMpe2NvbnN0IGM9eC5mb3JtYXRVbml2ZXJzYWxVcmwocyxhLG8pO3gub3BlbkhyZWYoYyx0KX19ciYmbChyKX0saGFuZGxlQW5kcm9pZExpbmtpbmcoKXtjb25zdHt3YWxsZXRDb25uZWN0VXJpOmV9PVouc3RhdGU7ZSYmKHguc2V0V2FsbGV0Q29ubmVjdEFuZHJvaWREZWVwTGluayhlKSx4Lm9wZW5IcmVmKGUseC5pc1RlbGVncmFtKCk/Il9ibGFuayI6Il9zZWxmIikpfSxhc3luYyBoYW5kbGVVcmlDb3B5KCl7Y29uc3R7d2FsbGV0Q29ubmVjdFVyaTplfT1aLnN0YXRlO2lmKGUpdHJ5e2F3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGUpLFgub3BlblRvYXN0KCJMaW5rIGNvcGllZCIsInN1Y2Nlc3MiKX1jYXRjaHtYLm9wZW5Ub2FzdCgiRmFpbGVkIHRvIGNvcHkiLCJlcnJvciIpfX0sZ2V0Q3VzdG9tSW1hZ2VVcmxzKCl7Y29uc3R7d2FsbGV0SW1hZ2VzOmV9PWh0LnN0YXRlLHQ9T2JqZWN0LnZhbHVlcyhlPz97fSk7cmV0dXJuIE9iamVjdC52YWx1ZXModCl9LHRydW5jYXRlKGUsdD04KXtyZXR1cm4gZS5sZW5ndGg8PXQ/ZTpgJHtlLnN1YnN0cmluZygwLDQpfS4uLiR7ZS5zdWJzdHJpbmcoZS5sZW5ndGgtNCl9YH0sc2V0UmVjZW50V2FsbGV0KGUpe3RyeXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgkLldDTV9SRUNFTlRfV0FMTEVUX0RBVEEsSlNPTi5zdHJpbmdpZnkoZSkpfWNhdGNoe2NvbnNvbGUuaW5mbygiVW5hYmxlIHRvIHNldCByZWNlbnQgd2FsbGV0Iil9fSxnZXRSZWNlbnRXYWxsZXQoKXt0cnl7Y29uc3QgZT1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgkLldDTV9SRUNFTlRfV0FMTEVUX0RBVEEpO3JldHVybiBlP0pTT04ucGFyc2UoZSk6dm9pZCAwfWNhdGNoe2NvbnNvbGUuaW5mbygiVW5hYmxlIHRvIGdldCByZWNlbnQgd2FsbGV0Iil9fSxjYXNlU2FmZUluY2x1ZGVzKGUsdCl7cmV0dXJuIGUudG9VcHBlckNhc2UoKS5pbmNsdWRlcyh0LnRvVXBwZXJDYXNlKCkpfSxvcGVuV2FsbGV0RXhwbG9yZXJVcmwoKXt4Lm9wZW5IcmVmKCQuRVhQTE9SRVJfV0FMTEVUX1VSTCwiX2JsYW5rIil9LGdldENhY2hlZFJvdXRlcldhbGxldFBsYXRmb3Jtcygpe2NvbnN0e2Rlc2t0b3A6ZSxtb2JpbGU6dH09eC5nZXRXYWxsZXRSb3V0ZXJEYXRhKCkscj0hIWU/Lm5hdGl2ZSxuPSEhZT8udW5pdmVyc2FsLG89ISF0Py5uYXRpdmV8fCEhdD8udW5pdmVyc2FsO3JldHVybntpc0Rlc2t0b3A6cixpc01vYmlsZTpvLGlzV2ViOm59fSxnb1RvQ29ubmVjdGluZ1ZpZXcoZSl7Ti5zZXREYXRhKHtXYWxsZXQ6ZX0pO2NvbnN0IHQ9eC5pc01vYmlsZSgpLHtpc0Rlc2t0b3A6cixpc1dlYjpuLGlzTW9iaWxlOm99PSQuZ2V0Q2FjaGVkUm91dGVyV2FsbGV0UGxhdGZvcm1zKCk7dD9vPyhOLnB1c2goIk1vYmlsZUNvbm5lY3RpbmciKSwheC5pc0FuZHJvaWQoKSYmeC5pc1RlbGVncmFtKCkmJnRoaXMuaGFuZGxlTW9iaWxlTGlua2luZyhlLCJfYmxhbmsiKSk6bj9OLnB1c2goIldlYkNvbm5lY3RpbmciKTpOLnB1c2goIkluc3RhbGxXYWxsZXQiKTpyP04ucHVzaCgiRGVza3RvcENvbm5lY3RpbmciKTpuP04ucHVzaCgiV2ViQ29ubmVjdGluZyIpOm8/Ti5wdXNoKCJNb2JpbGVRcmNvZGVDb25uZWN0aW5nIik6Ti5wdXNoKCJJbnN0YWxsV2FsbGV0Iil9fSxpcz1QYC53Y20tcm91dGVye292ZXJmbG93OmhpZGRlbjt3aWxsLWNoYW5nZTp0cmFuc2Zvcm19LndjbS1jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59YDt2YXIgc3M9T2JqZWN0LmRlZmluZVByb3BlcnR5LGxzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsJHI9KGUsdCxyLG4pPT57Zm9yKHZhciBvPW4+MT92b2lkIDA6bj9scyh0LHIpOnQsaT1lLmxlbmd0aC0xLHM7aT49MDtpLS0pKHM9ZVtpXSkmJihvPShuP3ModCxyLG8pOnMobykpfHxvKTtyZXR1cm4gbiYmbyYmc3ModCxyLG8pLG99O2xldCBGdD1jbGFzcyBleHRlbmRzIEV7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudmlldz1OLnN0YXRlLnZpZXcsdGhpcy5wcmV2Vmlldz1OLnN0YXRlLnZpZXcsdGhpcy51bnN1YnNjcmliZT12b2lkIDAsdGhpcy5vbGRIZWlnaHQ9IjBweCIsdGhpcy5yZXNpemVPYnNlcnZlcj12b2lkIDAsdGhpcy51bnN1YnNjcmliZT1OLnN1YnNjcmliZShlPT57dGhpcy52aWV3IT09ZS52aWV3JiZ0aGlzLm9uQ2hhbmdlUm91dGUoKX0pfWZpcnN0VXBkYXRlZCgpe3RoaXMucmVzaXplT2JzZXJ2ZXI9bmV3IFJlc2l6ZU9ic2VydmVyKChbZV0pPT57Y29uc3QgdD1gJHtlLmNvbnRlbnRSZWN0LmhlaWdodH1weGA7dGhpcy5vbGRIZWlnaHQhPT0iMHB4IiYmZHQodGhpcy5yb3V0ZXJFbCx7aGVpZ2h0Olt0aGlzLm9sZEhlaWdodCx0XX0se2R1cmF0aW9uOi4yfSksdGhpcy5vbGRIZWlnaHQ9dH0pLHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmNvbnRlbnRFbCl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgZSx0OyhlPXRoaXMudW5zdWJzY3JpYmUpPT1udWxsfHxlLmNhbGwodGhpcyksKHQ9dGhpcy5yZXNpemVPYnNlcnZlcik9PW51bGx8fHQuZGlzY29ubmVjdCgpfWdldCByb3V0ZXJFbCgpe3JldHVybiAkLmdldFNoYWRvd1Jvb3RFbGVtZW50KHRoaXMsIi53Y20tcm91dGVyIil9Z2V0IGNvbnRlbnRFbCgpe3JldHVybiAkLmdldFNoYWRvd1Jvb3RFbGVtZW50KHRoaXMsIi53Y20tY29udGVudCIpfXZpZXdUZW1wbGF0ZSgpe3N3aXRjaCh0aGlzLnZpZXcpe2Nhc2UiQ29ubmVjdFdhbGxldCI6cmV0dXJuIG1gPHdjbS1jb25uZWN0LXdhbGxldC12aWV3Pjwvd2NtLWNvbm5lY3Qtd2FsbGV0LXZpZXc+YDtjYXNlIkRlc2t0b3BDb25uZWN0aW5nIjpyZXR1cm4gbWA8d2NtLWRlc2t0b3AtY29ubmVjdGluZy12aWV3Pjwvd2NtLWRlc2t0b3AtY29ubmVjdGluZy12aWV3PmA7Y2FzZSJNb2JpbGVDb25uZWN0aW5nIjpyZXR1cm4gbWA8d2NtLW1vYmlsZS1jb25uZWN0aW5nLXZpZXc+PC93Y20tbW9iaWxlLWNvbm5lY3Rpbmctdmlldz5gO2Nhc2UiV2ViQ29ubmVjdGluZyI6cmV0dXJuIG1gPHdjbS13ZWItY29ubmVjdGluZy12aWV3Pjwvd2NtLXdlYi1jb25uZWN0aW5nLXZpZXc+YDtjYXNlIk1vYmlsZVFyY29kZUNvbm5lY3RpbmciOnJldHVybiBtYDx3Y20tbW9iaWxlLXFyLWNvbm5lY3Rpbmctdmlldz48L3djbS1tb2JpbGUtcXItY29ubmVjdGluZy12aWV3PmA7Y2FzZSJXYWxsZXRFeHBsb3JlciI6cmV0dXJuIG1gPHdjbS13YWxsZXQtZXhwbG9yZXItdmlldz48L3djbS13YWxsZXQtZXhwbG9yZXItdmlldz5gO2Nhc2UiUXJjb2RlIjpyZXR1cm4gbWA8d2NtLXFyY29kZS12aWV3Pjwvd2NtLXFyY29kZS12aWV3PmA7Y2FzZSJJbnN0YWxsV2FsbGV0IjpyZXR1cm4gbWA8d2NtLWluc3RhbGwtd2FsbGV0LXZpZXc+PC93Y20taW5zdGFsbC13YWxsZXQtdmlldz5gO2RlZmF1bHQ6cmV0dXJuIG1gPGRpdj5Ob3QgRm91bmQ8L2Rpdj5gfX1hc3luYyBvbkNoYW5nZVJvdXRlKCl7YXdhaXQgZHQodGhpcy5yb3V0ZXJFbCx7b3BhY2l0eTpbMSwwXSxzY2FsZTpbMSwxLjAyXX0se2R1cmF0aW9uOi4xNSxkZWxheTouMX0pLmZpbmlzaGVkLHRoaXMudmlldz1OLnN0YXRlLnZpZXcsZHQodGhpcy5yb3V0ZXJFbCx7b3BhY2l0eTpbMCwxXSxzY2FsZTpbLjk5LDFdfSx7ZHVyYXRpb246LjM3LGRlbGF5Oi4wNX0pfXJlbmRlcigpe3JldHVybiBtYDxkaXYgY2xhc3M9IndjbS1yb3V0ZXIiPjxkaXYgY2xhc3M9IndjbS1jb250ZW50Ij4ke3RoaXMudmlld1RlbXBsYXRlKCl9PC9kaXY+PC9kaXY+YH19O0Z0LnN0eWxlcz1bTy5nbG9iYWxDc3MsaXNdOyRyKFtIKCldLEZ0LnByb3RvdHlwZSwidmlldyIsMik7JHIoW0goKV0sRnQucHJvdG90eXBlLCJwcmV2VmlldyIsMik7RnQ9JHIoW0koIndjbS1tb2RhbC1yb3V0ZXIiKV0sRnQpO2NvbnN0IGFzPVBgZGl2e2hlaWdodDozNnB4O3dpZHRoOm1heC1jb250ZW50O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjlweCAxNXB4IDExcHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEycHg7Ym94LXNoYWRvdzowIDZweCAxNHB4IC02cHggcmdiYSgxMCwxNiwzMSwuMyksMCAxMHB4IDMycHggLTRweCByZ2JhKDEwLDE2LDMxLC4xNSk7ei1pbmRleDoyO2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpO3BvaW50ZXItZXZlbnRzOm5vbmU7YmFja2Ryb3AtZmlsdGVyOmJsdXIoMjBweCkgc2F0dXJhdGUoMS44KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpibHVyKDIwcHgpIHNhdHVyYXRlKDEuOCk7Ym9yZGVyLXJhZGl1czp2YXIoLS13Y20tbm90aWZpY2F0aW9uLWJvcmRlci1yYWRpdXMpO2JvcmRlcjoxcHggc29saWQgdmFyKC0td2NtLWNvbG9yLW92ZXJsYXkpO2JhY2tncm91bmQtY29sb3I6dmFyKC0td2NtLWNvbG9yLW92ZXJsYXkpfXN2Z3ttYXJnaW4tcmlnaHQ6NXB4fUAtbW96LWRvY3VtZW50IHVybC1wcmVmaXgoKXtkaXZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS13Y20tY29sb3ItYmctMyl9fS53Y20tc3VjY2VzcyBwYXRoe2ZpbGw6dmFyKC0td2NtLWFjY2VudC1jb2xvcil9LndjbS1lcnJvciBwYXRoe2ZpbGw6dmFyKC0td2NtLWVycm9yLWNvbG9yKX1gO3ZhciBjcz1PYmplY3QuZGVmaW5lUHJvcGVydHksZHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixNbz0oZSx0LHIsbik9Pntmb3IodmFyIG89bj4xP3ZvaWQgMDpuP2RzKHQscik6dCxpPWUubGVuZ3RoLTEscztpPj0wO2ktLSkocz1lW2ldKSYmKG89KG4/cyh0LHIsbyk6cyhvKSl8fG8pO3JldHVybiBuJiZvJiZjcyh0LHIsbyksb307bGV0IGhlPWNsYXNzIGV4dGVuZHMgRXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5vcGVuPSExLHRoaXMudW5zdWJzY3JpYmU9dm9pZCAwLHRoaXMudGltZW91dD12b2lkIDAsdGhpcy51bnN1YnNjcmliZT1YLnN1YnNjcmliZShlPT57ZS5vcGVuPyh0aGlzLm9wZW49ITAsdGhpcy50aW1lb3V0PXNldFRpbWVvdXQoKCk9PlguY2xvc2VUb2FzdCgpLDIyMDApKToodGhpcy5vcGVuPSExLGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpKX0pfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dmFyIGU7KGU9dGhpcy51bnN1YnNjcmliZSk9PW51bGx8fGUuY2FsbCh0aGlzKSxjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KSxYLmNsb3NlVG9hc3QoKX1yZW5kZXIoKXtjb25zdHttZXNzYWdlOmUsdmFyaWFudDp0fT1YLnN0YXRlLHI9eyJ3Y20tc3VjY2VzcyI6dD09PSJzdWNjZXNzIiwid2NtLWVycm9yIjp0PT09ImVycm9yIn07cmV0dXJuIHRoaXMub3Blbj9tYDxkaXYgY2xhc3M9IiR7RyhyKX0iPiR7dD09PSJzdWNjZXNzIj9ULkNIRUNLTUFSS19JQ09OOm51bGx9ICR7dD09PSJlcnJvciI/VC5DUk9TU19JQ09OOm51bGx9PHdjbS10ZXh0IHZhcmlhbnQ9InNtYWxsLXJlZ3VsYXIiPiR7ZX08L3djbS10ZXh0PjwvZGl2PmA6bnVsbH19O2hlLnN0eWxlcz1bTy5nbG9iYWxDc3MsYXNdO01vKFtIKCldLGhlLnByb3RvdHlwZSwib3BlbiIsMik7aGU9TW8oW0koIndjbS1tb2RhbC10b2FzdCIpXSxoZSk7Y29uc3QgaHM9LjEsS3I9Mi41LFE9NztmdW5jdGlvbiBrZShlLHQscil7cmV0dXJuIGU9PT10PyExOihlLXQ8MD90LWU6ZS10KTw9citoc31mdW5jdGlvbiB1cyhlLHQpe2NvbnN0IHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoS3QuY3JlYXRlKGUse2Vycm9yQ29ycmVjdGlvbkxldmVsOnR9KS5tb2R1bGVzLmRhdGEsMCksbj1NYXRoLnNxcnQoci5sZW5ndGgpO3JldHVybiByLnJlZHVjZSgobyxpLHMpPT4ocyVuPT09MD9vLnB1c2goW2ldKTpvW28ubGVuZ3RoLTFdLnB1c2goaSkpJiZvLFtdKX1jb25zdCBtcz17Z2VuZXJhdGUoZSx0LHIpe2NvbnN0IG49IiMxNDE0MTQiLG89IiNmZmZmZmYiLGk9W10scz11cyhlLCJRIiksbD10L3MubGVuZ3RoLGE9W3t4OjAseTowfSx7eDoxLHk6MH0se3g6MCx5OjF9XTthLmZvckVhY2goKHt4OmcseTpmfSk9Pntjb25zdCBBPShzLmxlbmd0aC1RKSpsKmcsdT0ocy5sZW5ndGgtUSkqbCpmLHk9LjQ1O2ZvcihsZXQgdz0wO3c8YS5sZW5ndGg7dys9MSl7Y29uc3Qgdj1sKihRLXcqMik7aS5wdXNoKExgPHJlY3QgZmlsbD0iJHt3JTI9PT0wP246b30iIGhlaWdodD0iJHt2fSIgcng9IiR7dip5fSIgcnk9IiR7dip5fSIgd2lkdGg9IiR7dn0iIHg9IiR7QStsKnd9IiB5PSIke3UrbCp3fSI+YCl9fSk7Y29uc3QgYz1NYXRoLmZsb29yKChyKzI1KS9sKSxkPXMubGVuZ3RoLzItYy8yLGI9cy5sZW5ndGgvMitjLzItMSxoPVtdO3MuZm9yRWFjaCgoZyxmKT0+e2cuZm9yRWFjaCgoQSx1KT0+e2lmKHNbZl1bdV0mJiEoZjxRJiZ1PFF8fGY+cy5sZW5ndGgtKFErMSkmJnU8UXx8ZjxRJiZ1PnMubGVuZ3RoLShRKzEpKSYmIShmPmQmJmY8YiYmdT5kJiZ1PGIpKXtjb25zdCB5PWYqbCtsLzIsdz11KmwrbC8yO2gucHVzaChbeSx3XSl9fSl9KTtjb25zdCBwPXt9O3JldHVybiBoLmZvckVhY2goKFtnLGZdKT0+e3BbZ10/cFtnXS5wdXNoKGYpOnBbZ109W2ZdfSksT2JqZWN0LmVudHJpZXMocCkubWFwKChbZyxmXSk9Pntjb25zdCBBPWYuZmlsdGVyKHU9PmYuZXZlcnkoeT0+IWtlKHUseSxsKSkpO3JldHVybltOdW1iZXIoZyksQV19KS5mb3JFYWNoKChbZyxmXSk9PntmLmZvckVhY2goQT0+e2kucHVzaChMYDxjaXJjbGUgY3g9IiR7Z30iIGN5PSIke0F9IiBmaWxsPSIke259IiByPSIke2wvS3J9Ij5gKX0pfSksT2JqZWN0LmVudHJpZXMocCkuZmlsdGVyKChbZyxmXSk9PmYubGVuZ3RoPjEpLm1hcCgoW2csZl0pPT57Y29uc3QgQT1mLmZpbHRlcih1PT5mLnNvbWUoeT0+a2UodSx5LGwpKSk7cmV0dXJuW051bWJlcihnKSxBXX0pLm1hcCgoW2csZl0pPT57Zi5zb3J0KCh1LHkpPT51PHk/LTE6MSk7Y29uc3QgQT1bXTtmb3IoY29uc3QgdSBvZiBmKXtjb25zdCB5PUEuZmluZCh3PT53LnNvbWUodj0+a2UodSx2LGwpKSk7eT95LnB1c2godSk6QS5wdXNoKFt1XSl9cmV0dXJuW2csQS5tYXAodT0+W3VbMF0sdVt1Lmxlbmd0aC0xXV0pXX0pLmZvckVhY2goKFtnLGZdKT0+e2YuZm9yRWFjaCgoW0EsdV0pPT57aS5wdXNoKExgPGxpbmUgeDE9IiR7Z30iIHgyPSIke2d9IiB5MT0iJHtBfSIgeTI9IiR7dX0iIHN0cm9rZT0iJHtufSIgc3Ryb2tlLXdpZHRoPSIke2wvKEtyLzIpfSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj5gKX0pfSksaX19LGZzPVBgQGtleWZyYW1lcyBmYWRlSW57MCV7b3BhY2l0eTowfTEwMCV7b3BhY2l0eToxfX1kaXZ7cG9zaXRpb246cmVsYXRpdmU7dXNlci1zZWxlY3Q6bm9uZTtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbjthc3BlY3QtcmF0aW86MS8xO2FuaW1hdGlvbjpmYWRlSW4gZWFzZSAuMnN9LndjbS1kYXJre2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOnZhcigtLXdjbS1jb250YWluZXItYm9yZGVyLXJhZGl1cyk7cGFkZGluZzoxOHB4O2JveC1zaGFkb3c6MCAycHggNXB4ICMwMDB9c3ZnOmZpcnN0LWNoaWxkLHdjbS13YWxsZXQtaW1hZ2V7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKSB0cmFuc2xhdGVYKC01MCUpfXdjbS13YWxsZXQtaW1hZ2V7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSkgdHJhbnNsYXRlWCgtNTAlKX13Y20td2FsbGV0LWltYWdle3dpZHRoOjI1JTtoZWlnaHQ6MjUlO2JvcmRlci1yYWRpdXM6dmFyKC0td2NtLXdhbGxldC1pY29uLWJvcmRlci1yYWRpdXMpfXN2ZzpmaXJzdC1jaGlsZHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKSB0cmFuc2xhdGVYKC01MCUpIHNjYWxlKC45KX1zdmc6Zmlyc3QtY2hpbGQgcGF0aDpmaXJzdC1jaGlsZHtmaWxsOnZhcigtLXdjbS1hY2NlbnQtY29sb3IpfXN2ZzpmaXJzdC1jaGlsZCBwYXRoOmxhc3QtY2hpbGR7c3Ryb2tlOnZhcigtLXdjbS1jb2xvci1vdmVybGF5KX1gO3ZhciBwcz1PYmplY3QuZGVmaW5lUHJvcGVydHksZ3M9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixTdD0oZSx0LHIsbik9Pntmb3IodmFyIG89bj4xP3ZvaWQgMDpuP2dzKHQscik6dCxpPWUubGVuZ3RoLTEscztpPj0wO2ktLSkocz1lW2ldKSYmKG89KG4/cyh0LHIsbyk6cyhvKSl8fG8pO3JldHVybiBuJiZvJiZwcyh0LHIsbyksb307bGV0IG50PWNsYXNzIGV4dGVuZHMgRXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy51cmk9IiIsdGhpcy5zaXplPTAsdGhpcy5pbWFnZUlkPXZvaWQgMCx0aGlzLndhbGxldElkPXZvaWQgMCx0aGlzLmltYWdlVXJsPXZvaWQgMH1zdmdUZW1wbGF0ZSgpe2NvbnN0IHQ9eHQuc3RhdGUudGhlbWVNb2RlPT09ImxpZ2h0Ij90aGlzLnNpemU6dGhpcy5zaXplLTE4KjI7cmV0dXJuIExgPHN2ZyBoZWlnaHQ9IiR7dH0iIHdpZHRoPSIke3R9Ij4ke21zLmdlbmVyYXRlKHRoaXMudXJpLHQsdC80KX08L3N2Zz5gfXJlbmRlcigpe2NvbnN0IGU9eyJ3Y20tZGFyayI6eHQuc3RhdGUudGhlbWVNb2RlPT09ImRhcmsifTtyZXR1cm4gbWA8ZGl2IHN0eWxlPSIke2B3aWR0aDogJHt0aGlzLnNpemV9cHhgfSIgY2xhc3M9IiR7RyhlKX0iPiR7dGhpcy53YWxsZXRJZHx8dGhpcy5pbWFnZVVybD9tYDx3Y20td2FsbGV0LWltYWdlIHdhbGxldElkPSIke1UodGhpcy53YWxsZXRJZCl9IiBpbWFnZUlkPSIke1UodGhpcy5pbWFnZUlkKX0iIGltYWdlVXJsPSIke1UodGhpcy5pbWFnZVVybCl9Ij48L3djbS13YWxsZXQtaW1hZ2U+YDpULldBTExFVF9DT05ORUNUX0lDT05fQ09MT1JFRH0gJHt0aGlzLnN2Z1RlbXBsYXRlKCl9PC9kaXY+YH19O250LnN0eWxlcz1bTy5nbG9iYWxDc3MsZnNdO1N0KFtfKCldLG50LnByb3RvdHlwZSwidXJpIiwyKTtTdChbXyh7dHlwZTpOdW1iZXJ9KV0sbnQucHJvdG90eXBlLCJzaXplIiwyKTtTdChbXygpXSxudC5wcm90b3R5cGUsImltYWdlSWQiLDIpO1N0KFtfKCldLG50LnByb3RvdHlwZSwid2FsbGV0SWQiLDIpO1N0KFtfKCldLG50LnByb3RvdHlwZSwiaW1hZ2VVcmwiLDIpO250PVN0KFtJKCJ3Y20tcXJjb2RlIildLG50KTtjb25zdCB3cz1QYDpob3N0e3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDoyOHB4O3dpZHRoOjgwJX1pbnB1dHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2xpbmUtaGVpZ2h0OjI4cHghaW1wb3J0YW50O2JvcmRlci1yYWRpdXM6dmFyKC0td2NtLWlucHV0LWJvcmRlci1yYWRpdXMpO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90byxVYnVudHUsJ0hlbHZldGljYSBOZXVlJyxzYW5zLXNlcmlmO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczonY2FzZScgb247Zm9udC13ZWlnaHQ6NTAwO2ZvbnQtc2l6ZToxNnB4O2xldHRlci1zcGFjaW5nOi0uMDNlbTtwYWRkaW5nOjAgMTBweCAwIDM0cHg7dHJhbnNpdGlvbjouMnMgYWxsIGVhc2U7Y29sb3I6dmFyKC0td2NtLWNvbG9yLWZnLTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0td2NtLWNvbG9yLWJnLTMpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHZhcigtLXdjbS1jb2xvci1vdmVybGF5KTtjYXJldC1jb2xvcjp2YXIoLS13Y20tYWNjZW50LWNvbG9yKX1pbnB1dDo6cGxhY2Vob2xkZXJ7Y29sb3I6dmFyKC0td2NtLWNvbG9yLWZnLTIpfXN2Z3tsZWZ0OjEwcHg7dG9wOjRweDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHh9aW5wdXQ6Zm9jdXMtd2l0aGlue2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHZhcigtLXdjbS1hY2NlbnQtY29sb3IpfXBhdGh7ZmlsbDp2YXIoLS13Y20tY29sb3ItZmctMil9YDt2YXIgdnM9T2JqZWN0LmRlZmluZVByb3BlcnR5LGJzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsU289KGUsdCxyLG4pPT57Zm9yKHZhciBvPW4+MT92b2lkIDA6bj9icyh0LHIpOnQsaT1lLmxlbmd0aC0xLHM7aT49MDtpLS0pKHM9ZVtpXSkmJihvPShuP3ModCxyLG8pOnMobykpfHxvKTtyZXR1cm4gbiYmbyYmdnModCxyLG8pLG99O2xldCB1ZT1jbGFzcyBleHRlbmRzIEV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMub25DaGFuZ2U9KCk9Pm51bGx9cmVuZGVyKCl7cmV0dXJuIG1gPGlucHV0IHR5cGU9InRleHQiIEBpbnB1dD0iJHt0aGlzLm9uQ2hhbmdlfSIgcGxhY2Vob2xkZXI9IlNlYXJjaCB3YWxsZXRzIj4gJHtULlNFQVJDSF9JQ09OfWB9fTt1ZS5zdHlsZXM9W08uZ2xvYmFsQ3NzLHdzXTtTbyhbXygpXSx1ZS5wcm90b3R5cGUsIm9uQ2hhbmdlIiwyKTt1ZT1TbyhbSSgid2NtLXNlYXJjaC1pbnB1dCIpXSx1ZSk7Y29uc3QgeXM9UGBAa2V5ZnJhbWVzIHJvdGF0ZXsxMDAle3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBkYXNoezAle3N0cm9rZS1kYXNoYXJyYXk6MSwxNTA7c3Ryb2tlLWRhc2hvZmZzZXQ6MH01MCV7c3Ryb2tlLWRhc2hhcnJheTo5MCwxNTA7c3Ryb2tlLWRhc2hvZmZzZXQ6LTM1fTEwMCV7c3Ryb2tlLWRhc2hhcnJheTo5MCwxNTA7c3Ryb2tlLWRhc2hvZmZzZXQ6LTEyNH19c3Zne2FuaW1hdGlvbjpyb3RhdGUgMnMgbGluZWFyIGluZmluaXRlO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn1zdmcgY2lyY2xle3N0cm9rZS1saW5lY2FwOnJvdW5kO2FuaW1hdGlvbjpkYXNoIDEuNXMgZWFzZSBpbmZpbml0ZTtzdHJva2U6dmFyKC0td2NtLWFjY2VudC1jb2xvcil9YDt2YXIgeHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciwkcz0oZSx0LHIsbik9Pntmb3IodmFyIG89bj4xP3ZvaWQgMDpuP3hzKHQscik6dCxpPWUubGVuZ3RoLTEscztpPj0wO2ktLSkocz1lW2ldKSYmKG89cyhvKXx8byk7cmV0dXJuIG99O2xldCBlcj1jbGFzcyBleHRlbmRzIEV7cmVuZGVyKCl7cmV0dXJuIG1gPHN2ZyB2aWV3Qm94PSIwIDAgNTAgNTAiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PGNpcmNsZSBjeD0iMjUiIGN5PSIyNSIgcj0iMjAiIGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlPSIjZmZmIi8+PC9zdmc+YH19O2VyLnN0eWxlcz1bTy5nbG9iYWxDc3MseXNdO2VyPSRzKFtJKCJ3Y20tc3Bpbm5lciIpXSxlcik7Y29uc3QgX3M9UGBzcGFue2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtZmFtaWx5OnZhcigtLXdjbS1mb250LWZhbWlseSk7Zm9udC1mZWF0dXJlLXNldHRpbmdzOnZhcigtLXdjbS1mb250LWZlYXR1cmUtc2V0dGluZ3MpfS53Y20teHNtYWxsLWJvbGR7Zm9udC1mYW1pbHk6dmFyKC0td2NtLXRleHQteHNtYWxsLWJvbGQtZm9udC1mYW1pbHkpO2ZvbnQtd2VpZ2h0OnZhcigtLXdjbS10ZXh0LXhzbWFsbC1ib2xkLXdlaWdodCk7Zm9udC1zaXplOnZhcigtLXdjbS10ZXh0LXhzbWFsbC1ib2xkLXNpemUpO2xpbmUtaGVpZ2h0OnZhcigtLXdjbS10ZXh0LXhzbWFsbC1ib2xkLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS13Y20tdGV4dC14c21hbGwtYm9sZC1sZXR0ZXItc3BhY2luZyk7dGV4dC10cmFuc2Zvcm06dmFyKC0td2NtLXRleHQteHNtYWxsLWJvbGQtdGV4dC10cmFuc2Zvcm0pfS53Y20teHNtYWxsLXJlZ3VsYXJ7Zm9udC1mYW1pbHk6dmFyKC0td2NtLXRleHQteHNtYWxsLXJlZ3VsYXItZm9udC1mYW1pbHkpO2ZvbnQtd2VpZ2h0OnZhcigtLXdjbS10ZXh0LXhzbWFsbC1yZWd1bGFyLXdlaWdodCk7Zm9udC1zaXplOnZhcigtLXdjbS10ZXh0LXhzbWFsbC1yZWd1bGFyLXNpemUpO2xpbmUtaGVpZ2h0OnZhcigtLXdjbS10ZXh0LXhzbWFsbC1yZWd1bGFyLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS13Y20tdGV4dC14c21hbGwtcmVndWxhci1sZXR0ZXItc3BhY2luZyk7dGV4dC10cmFuc2Zvcm06dmFyKC0td2NtLXRleHQteHNtYWxsLXJlZ3VsYXItdGV4dC10cmFuc2Zvcm0pfS53Y20tc21hbGwtdGhpbntmb250LWZhbWlseTp2YXIoLS13Y20tdGV4dC1zbWFsbC10aGluLWZvbnQtZmFtaWx5KTtmb250LXdlaWdodDp2YXIoLS13Y20tdGV4dC1zbWFsbC10aGluLXdlaWdodCk7Zm9udC1zaXplOnZhcigtLXdjbS10ZXh0LXNtYWxsLXRoaW4tc2l6ZSk7bGluZS1oZWlnaHQ6dmFyKC0td2NtLXRleHQtc21hbGwtdGhpbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0td2NtLXRleHQtc21hbGwtdGhpbi1sZXR0ZXItc3BhY2luZyk7dGV4dC10cmFuc2Zvcm06dmFyKC0td2NtLXRleHQtc21hbGwtdGhpbi10ZXh0LXRyYW5zZm9ybSl9LndjbS1zbWFsbC1yZWd1bGFye2ZvbnQtZmFtaWx5OnZhcigtLXdjbS10ZXh0LXNtYWxsLXJlZ3VsYXItZm9udC1mYW1pbHkpO2ZvbnQtd2VpZ2h0OnZhcigtLXdjbS10ZXh0LXNtYWxsLXJlZ3VsYXItd2VpZ2h0KTtmb250LXNpemU6dmFyKC0td2NtLXRleHQtc21hbGwtcmVndWxhci1zaXplKTtsaW5lLWhlaWdodDp2YXIoLS13Y20tdGV4dC1zbWFsbC1yZWd1bGFyLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS13Y20tdGV4dC1zbWFsbC1yZWd1bGFyLWxldHRlci1zcGFjaW5nKTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS13Y20tdGV4dC1zbWFsbC1yZWd1bGFyLXRleHQtdHJhbnNmb3JtKX0ud2NtLW1lZGl1bS1yZWd1bGFye2ZvbnQtZmFtaWx5OnZhcigtLXdjbS10ZXh0LW1lZGl1bS1yZWd1bGFyLWZvbnQtZmFtaWx5KTtmb250LXdlaWdodDp2YXIoLS13Y20tdGV4dC1tZWRpdW0tcmVndWxhci13ZWlnaHQpO2ZvbnQtc2l6ZTp2YXIoLS13Y20tdGV4dC1tZWRpdW0tcmVndWxhci1zaXplKTtsaW5lLWhlaWdodDp2YXIoLS13Y20tdGV4dC1tZWRpdW0tcmVndWxhci1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0td2NtLXRleHQtbWVkaXVtLXJlZ3VsYXItbGV0dGVyLXNwYWNpbmcpO3RleHQtdHJhbnNmb3JtOnZhcigtLXdjbS10ZXh0LW1lZGl1bS1yZWd1bGFyLXRleHQtdHJhbnNmb3JtKX0ud2NtLWJpZy1ib2xke2ZvbnQtZmFtaWx5OnZhcigtLXdjbS10ZXh0LWJpZy1ib2xkLWZvbnQtZmFtaWx5KTtmb250LXdlaWdodDp2YXIoLS13Y20tdGV4dC1iaWctYm9sZC13ZWlnaHQpO2ZvbnQtc2l6ZTp2YXIoLS13Y20tdGV4dC1iaWctYm9sZC1zaXplKTtsaW5lLWhlaWdodDp2YXIoLS13Y20tdGV4dC1iaWctYm9sZC1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0td2NtLXRleHQtYmlnLWJvbGQtbGV0dGVyLXNwYWNpbmcpO3RleHQtdHJhbnNmb3JtOnZhcigtLXdjbS10ZXh0LWJpZy1ib2xkLXRleHQtdHJhbnNmb3JtKX06aG9zdCgqKXtjb2xvcjp2YXIoLS13Y20tY29sb3ItZmctMSl9LndjbS1jb2xvci1wcmltYXJ5e2NvbG9yOnZhcigtLXdjbS1jb2xvci1mZy0xKX0ud2NtLWNvbG9yLXNlY29uZGFyeXtjb2xvcjp2YXIoLS13Y20tY29sb3ItZmctMil9LndjbS1jb2xvci10ZXJ0aWFyeXtjb2xvcjp2YXIoLS13Y20tY29sb3ItZmctMyl9LndjbS1jb2xvci1pbnZlcnNle2NvbG9yOnZhcigtLXdjbS1hY2NlbnQtZmlsbC1jb2xvcil9LndjbS1jb2xvci1hY2NudHtjb2xvcjp2YXIoLS13Y20tYWNjZW50LWNvbG9yKX0ud2NtLWNvbG9yLWVycm9ye2NvbG9yOnZhcigtLXdjbS1lcnJvci1jb2xvcil9YDt2YXIgQ3M9T2JqZWN0LmRlZmluZVByb3BlcnR5LEVzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsX3I9KGUsdCxyLG4pPT57Zm9yKHZhciBvPW4+MT92b2lkIDA6bj9Fcyh0LHIpOnQsaT1lLmxlbmd0aC0xLHM7aT49MDtpLS0pKHM9ZVtpXSkmJihvPShuP3ModCxyLG8pOnMobykpfHxvKTtyZXR1cm4gbiYmbyYmQ3ModCxyLG8pLG99O2xldCBWdD1jbGFzcyBleHRlbmRzIEV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudmFyaWFudD0ibWVkaXVtLXJlZ3VsYXIiLHRoaXMuY29sb3I9InByaW1hcnkifXJlbmRlcigpe2NvbnN0IGU9eyJ3Y20tYmlnLWJvbGQiOnRoaXMudmFyaWFudD09PSJiaWctYm9sZCIsIndjbS1tZWRpdW0tcmVndWxhciI6dGhpcy52YXJpYW50PT09Im1lZGl1bS1yZWd1bGFyIiwid2NtLXNtYWxsLXJlZ3VsYXIiOnRoaXMudmFyaWFudD09PSJzbWFsbC1yZWd1bGFyIiwid2NtLXNtYWxsLXRoaW4iOnRoaXMudmFyaWFudD09PSJzbWFsbC10aGluIiwid2NtLXhzbWFsbC1yZWd1bGFyIjp0aGlzLnZhcmlhbnQ9PT0ieHNtYWxsLXJlZ3VsYXIiLCJ3Y20teHNtYWxsLWJvbGQiOnRoaXMudmFyaWFudD09PSJ4c21hbGwtYm9sZCIsIndjbS1jb2xvci1wcmltYXJ5Ijp0aGlzLmNvbG9yPT09InByaW1hcnkiLCJ3Y20tY29sb3Itc2Vjb25kYXJ5Ijp0aGlzLmNvbG9yPT09InNlY29uZGFyeSIsIndjbS1jb2xvci10ZXJ0aWFyeSI6dGhpcy5jb2xvcj09PSJ0ZXJ0aWFyeSIsIndjbS1jb2xvci1pbnZlcnNlIjp0aGlzLmNvbG9yPT09ImludmVyc2UiLCJ3Y20tY29sb3ItYWNjbnQiOnRoaXMuY29sb3I9PT0iYWNjZW50Iiwid2NtLWNvbG9yLWVycm9yIjp0aGlzLmNvbG9yPT09ImVycm9yIn07cmV0dXJuIG1gPHNwYW4+PHNsb3QgY2xhc3M9IiR7RyhlKX0iPjwvc2xvdD48L3NwYW4+YH19O1Z0LnN0eWxlcz1bTy5nbG9iYWxDc3MsX3NdO19yKFtfKCldLFZ0LnByb3RvdHlwZSwidmFyaWFudCIsMik7X3IoW18oKV0sVnQucHJvdG90eXBlLCJjb2xvciIsMik7VnQ9X3IoW0koIndjbS10ZXh0IildLFZ0KTtjb25zdCBBcz1QYGJ1dHRvbnt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlci1yYWRpdXM6dmFyKC0td2NtLWJ1dHRvbi1ob3Zlci1oaWdobGlnaHQtYm9yZGVyLXJhZGl1cyk7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9YnV0dG9uOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXdjbS1jb2xvci1vdmVybGF5KX1AbWVkaWEoaG92ZXI6aG92ZXIpe2J1dHRvbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXdjbS1jb2xvci1vdmVybGF5KX19YnV0dG9uPmRpdnt3aWR0aDo4MHB4O3BhZGRpbmc6NXB4IDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXJ9d2NtLXRleHR7d2lkdGg6MTAwJTt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7dGV4dC1hbGlnbjpjZW50ZXJ9d2NtLXdhbGxldC1pbWFnZXtoZWlnaHQ6NjBweDt3aWR0aDo2MHB4O3RyYW5zaXRpb246YWxsIC4ycyBlYXNlO2JvcmRlci1yYWRpdXM6dmFyKC0td2NtLXdhbGxldC1pY29uLWJvcmRlci1yYWRpdXMpO21hcmdpbi1ib3R0b206NXB4fS53Y20tc3VibGFiZWx7bWFyZ2luLXRvcDoycHh9YDt2YXIgT3M9T2JqZWN0LmRlZmluZVByb3BlcnR5LElzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsbHQ9KGUsdCxyLG4pPT57Zm9yKHZhciBvPW4+MT92b2lkIDA6bj9Jcyh0LHIpOnQsaT1lLmxlbmd0aC0xLHM7aT49MDtpLS0pKHM9ZVtpXSkmJihvPShuP3ModCxyLG8pOnMobykpfHxvKTtyZXR1cm4gbiYmbyYmT3ModCxyLG8pLG99O2xldCBxPWNsYXNzIGV4dGVuZHMgRXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5vbkNsaWNrPSgpPT5udWxsLHRoaXMubmFtZT0iIix0aGlzLndhbGxldElkPSIiLHRoaXMubGFiZWw9dm9pZCAwLHRoaXMuaW1hZ2VJZD12b2lkIDAsdGhpcy5pbnN0YWxsZWQ9ITEsdGhpcy5yZWNlbnQ9ITF9c3VibGFiZWxUZW1wbGF0ZSgpe3JldHVybiB0aGlzLnJlY2VudD9tYDx3Y20tdGV4dCBjbGFzcz0id2NtLXN1YmxhYmVsIiB2YXJpYW50PSJ4c21hbGwtYm9sZCIgY29sb3I9InRlcnRpYXJ5Ij5SRUNFTlQ8L3djbS10ZXh0PmA6dGhpcy5pbnN0YWxsZWQ/bWA8d2NtLXRleHQgY2xhc3M9IndjbS1zdWJsYWJlbCIgdmFyaWFudD0ieHNtYWxsLWJvbGQiIGNvbG9yPSJ0ZXJ0aWFyeSI+SU5TVEFMTEVEPC93Y20tdGV4dD5gOm51bGx9aGFuZGxlQ2xpY2soKXtXby5jbGljayh7bmFtZToiV0FMTEVUX0JVVFRPTiIsd2FsbGV0SWQ6dGhpcy53YWxsZXRJZH0pLHRoaXMub25DbGljaygpfXJlbmRlcigpe3ZhciBlO3JldHVybiBtYDxidXR0b24gQGNsaWNrPSIke3RoaXMuaGFuZGxlQ2xpY2suYmluZCh0aGlzKX0iPjxkaXY+PHdjbS13YWxsZXQtaW1hZ2Ugd2FsbGV0SWQ9IiR7dGhpcy53YWxsZXRJZH0iIGltYWdlSWQ9IiR7VSh0aGlzLmltYWdlSWQpfSI+PC93Y20td2FsbGV0LWltYWdlPjx3Y20tdGV4dCB2YXJpYW50PSJ4c21hbGwtcmVndWxhciI+JHsoZT10aGlzLmxhYmVsKSE9bnVsbD9lOiQuZ2V0V2FsbGV0TmFtZSh0aGlzLm5hbWUsITApfTwvd2NtLXRleHQ+JHt0aGlzLnN1YmxhYmVsVGVtcGxhdGUoKX08L2Rpdj48L2J1dHRvbj5gfX07cS5zdHlsZXM9W08uZ2xvYmFsQ3NzLEFzXTtsdChbXygpXSxxLnByb3RvdHlwZSwib25DbGljayIsMik7bHQoW18oKV0scS5wcm90b3R5cGUsIm5hbWUiLDIpO2x0KFtfKCldLHEucHJvdG90eXBlLCJ3YWxsZXRJZCIsMik7bHQoW18oKV0scS5wcm90b3R5cGUsImxhYmVsIiwyKTtsdChbXygpXSxxLnByb3RvdHlwZSwiaW1hZ2VJZCIsMik7bHQoW18oe3R5cGU6Qm9vbGVhbn0pXSxxLnByb3RvdHlwZSwiaW5zdGFsbGVkIiwyKTtsdChbXyh7dHlwZTpCb29sZWFufSldLHEucHJvdG90eXBlLCJyZWNlbnQiLDIpO3E9bHQoW0koIndjbS13YWxsZXQtYnV0dG9uIildLHEpO2NvbnN0IFBzPVBgOmhvc3R7ZGlzcGxheTpibG9ja31kaXZ7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1yYWRpdXM6aW5oZXJpdDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0td2NtLWNvbG9yLW92ZXJsYXkpfXN2Z3twb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfWRpdjo6YWZ0ZXJ7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDtib3JkZXItcmFkaXVzOmluaGVyaXQ7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS13Y20tY29sb3Itb3ZlcmxheSl9ZGl2IGltZ3t3aWR0aDoxMDAlO2hlaWdodDoxMDAlO29iamVjdC1maXQ6Y292ZXI7b2JqZWN0LXBvc2l0aW9uOmNlbnRlcn0jd2FsbGV0LXBsYWNlaG9sZGVyLWZpbGx7ZmlsbDp2YXIoLS13Y20tY29sb3ItYmctMyl9I3dhbGxldC1wbGFjZWhvbGRlci1kYXNoe3N0cm9rZTp2YXIoLS13Y20tY29sb3Itb3ZlcmxheSl9YDt2YXIgVHM9T2JqZWN0LmRlZmluZVByb3BlcnR5LE1zPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IseGU9KGUsdCxyLG4pPT57Zm9yKHZhciBvPW4+MT92b2lkIDA6bj9Ncyh0LHIpOnQsaT1lLmxlbmd0aC0xLHM7aT49MDtpLS0pKHM9ZVtpXSkmJihvPShuP3ModCxyLG8pOnMobykpfHxvKTtyZXR1cm4gbiYmbyYmVHModCxyLG8pLG99O2xldCBQdD1jbGFzcyBleHRlbmRzIEV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMud2FsbGV0SWQ9IiIsdGhpcy5pbWFnZUlkPXZvaWQgMCx0aGlzLmltYWdlVXJsPXZvaWQgMH1yZW5kZXIoKXt2YXIgZTtjb25zdCB0PShlPXRoaXMuaW1hZ2VVcmwpIT1udWxsJiZlLmxlbmd0aD90aGlzLmltYWdlVXJsOiQuZ2V0V2FsbGV0SWNvbih7aWQ6dGhpcy53YWxsZXRJZCxpbWFnZV9pZDp0aGlzLmltYWdlSWR9KTtyZXR1cm4gbWAke3QubGVuZ3RoP21gPGRpdj48aW1nIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiIHNyYz0iJHt0fSIgYWx0PSIke3RoaXMuaWR9Ij48L2Rpdj5gOlQuV0FMTEVUX1BMQUNFSE9MREVSfWB9fTtQdC5zdHlsZXM9W08uZ2xvYmFsQ3NzLFBzXTt4ZShbXygpXSxQdC5wcm90b3R5cGUsIndhbGxldElkIiwyKTt4ZShbXygpXSxQdC5wcm90b3R5cGUsImltYWdlSWQiLDIpO3hlKFtfKCldLFB0LnByb3RvdHlwZSwiaW1hZ2VVcmwiLDIpO1B0PXhlKFtJKCJ3Y20td2FsbGV0LWltYWdlIildLFB0KTt2YXIgU3M9T2JqZWN0LmRlZmluZVByb3BlcnR5LFJzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsUm89KGUsdCxyLG4pPT57Zm9yKHZhciBvPW4+MT92b2lkIDA6bj9Scyh0LHIpOnQsaT1lLmxlbmd0aC0xLHM7aT49MDtpLS0pKHM9ZVtpXSkmJihvPShuP3ModCxyLG8pOnMobykpfHxvKTtyZXR1cm4gbiYmbyYmU3ModCxyLG8pLG99O2xldCBycj1jbGFzcyBleHRlbmRzIEV7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMucHJlbG9hZD0hMCx0aGlzLnByZWxvYWREYXRhKCl9YXN5bmMgbG9hZEltYWdlcyhlKXt0cnl7ZT8ubGVuZ3RoJiZhd2FpdCBQcm9taXNlLmFsbChlLm1hcChhc3luYyB0PT4kLnByZWxvYWRJbWFnZSh0KSkpfWNhdGNoe2NvbnNvbGUuaW5mbygiVW5zdWNjZXNzZnVsIGF0dGVtcHQgYXQgcHJlbG9hZGluZyBzb21lIGltYWdlcyIsZSl9fWFzeW5jIHByZWxvYWRMaXN0aW5ncygpe2lmKGh0LnN0YXRlLmVuYWJsZUV4cGxvcmVyKXthd2FpdCBqLmdldFJlY29tZW5kZWRXYWxsZXRzKCksWi5zZXRJc0RhdGFMb2FkZWQoITApO2NvbnN0e3JlY29tZW5kZWRXYWxsZXRzOmV9PWouc3RhdGUsdD1lLm1hcChyPT4kLmdldFdhbGxldEljb24ocikpO2F3YWl0IHRoaXMubG9hZEltYWdlcyh0KX1lbHNlIFouc2V0SXNEYXRhTG9hZGVkKCEwKX1hc3luYyBwcmVsb2FkQ3VzdG9tSW1hZ2VzKCl7Y29uc3QgZT0kLmdldEN1c3RvbUltYWdlVXJscygpO2F3YWl0IHRoaXMubG9hZEltYWdlcyhlKX1hc3luYyBwcmVsb2FkRGF0YSgpe3RyeXt0aGlzLnByZWxvYWQmJih0aGlzLnByZWxvYWQ9ITEsYXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMucHJlbG9hZExpc3RpbmdzKCksdGhpcy5wcmVsb2FkQ3VzdG9tSW1hZ2VzKCldKSl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKSxYLm9wZW5Ub2FzdCgiRmFpbGVkIHByZWxvYWRpbmciLCJlcnJvciIpfX19O1JvKFtIKCldLHJyLnByb3RvdHlwZSwicHJlbG9hZCIsMik7cnI9Um8oW0koIndjbS1leHBsb3Jlci1jb250ZXh0IildLHJyKTt2YXIgRHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixMcz0oZSx0LHIsbik9Pntmb3IodmFyIG89bj4xP3ZvaWQgMDpuP0RzKHQscik6dCxpPWUubGVuZ3RoLTEscztpPj0wO2ktLSkocz1lW2ldKSYmKG89cyhvKXx8byk7cmV0dXJuIG99O2xldCBZcj1jbGFzcyBleHRlbmRzIEV7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudW5zdWJzY3JpYmVUaGVtZT12b2lkIDAsTy5zZXRUaGVtZSgpLHRoaXMudW5zdWJzY3JpYmVUaGVtZT14dC5zdWJzY3JpYmUoTy5zZXRUaGVtZSl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgZTsoZT10aGlzLnVuc3Vic2NyaWJlVGhlbWUpPT1udWxsfHxlLmNhbGwodGhpcyl9fTtZcj1McyhbSSgid2NtLXRoZW1lLWNvbnRleHQiKV0sWXIpO2NvbnN0IE5zPVBgQGtleWZyYW1lcyBzY3JvbGx7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKX0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZChjYWxjKC03MHB4ICogOSksMCwwKX19LndjbS1zbGlkZXJ7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3cteDpoaWRkZW47cGFkZGluZzoxMHB4IDA7bWFyZ2luOjAgLTIwcHg7d2lkdGg6Y2FsYygxMDAlICsgNDBweCl9LndjbS10cmFja3tkaXNwbGF5OmZsZXg7d2lkdGg6Y2FsYyg3MHB4ICogMTgpO2FuaW1hdGlvbjpzY3JvbGwgMjBzIGxpbmVhciBpbmZpbml0ZTtvcGFjaXR5Oi43fS53Y20tdHJhY2sgc3Zne21hcmdpbjowIDVweH13Y20td2FsbGV0LWltYWdle3dpZHRoOjYwcHg7aGVpZ2h0OjYwcHg7bWFyZ2luOjAgNXB4O2JvcmRlci1yYWRpdXM6dmFyKC0td2NtLXdhbGxldC1pY29uLWJvcmRlci1yYWRpdXMpfS53Y20tZ3JpZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCg0LDgwcHgpO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS53Y20tdGl0bGV7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tYm90dG9tOjEwcHh9LndjbS10aXRsZSBzdmd7bWFyZ2luLXJpZ2h0OjZweH0ud2NtLXRpdGxlIHBhdGh7ZmlsbDp2YXIoLS13Y20tYWNjZW50LWNvbG9yKX13Y20tbW9kYWwtZm9vdGVyIC53Y20tdGl0bGV7cGFkZGluZzowIDEwcHh9d2NtLWJ1dHRvbi1iaWd7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKSB0cmFuc2xhdGVYKC01MCUpO2ZpbHRlcjpkcm9wLXNoYWRvdygwIDAgMTdweCB2YXIoLS13Y20tY29sb3ItYmctMSkpfXdjbS1pbmZvLWZvb3RlcntmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlO3BhZGRpbmc6NXB4IDB9d2NtLWluZm8tZm9vdGVyIHdjbS10ZXh0e3RleHQtYWxpZ246Y2VudGVyO21hcmdpbi1ib3R0b206MTVweH0jd2FsbGV0LXBsYWNlaG9sZGVyLWZpbGx7ZmlsbDp2YXIoLS13Y20tY29sb3ItYmctMyl9I3dhbGxldC1wbGFjZWhvbGRlci1kYXNoe3N0cm9rZTp2YXIoLS13Y20tY29sb3Itb3ZlcmxheSl9YDt2YXIgQnM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixXcz0oZSx0LHIsbik9Pntmb3IodmFyIG89bj4xP3ZvaWQgMDpuP0JzKHQscik6dCxpPWUubGVuZ3RoLTEscztpPj0wO2ktLSkocz1lW2ldKSYmKG89cyhvKXx8byk7cmV0dXJuIG99O2xldCBvcj1jbGFzcyBleHRlbmRzIEV7b25Hb1RvUXJjb2RlKCl7Ti5wdXNoKCJRcmNvZGUiKX1yZW5kZXIoKXtjb25zdHtyZWNvbWVuZGVkV2FsbGV0czplfT1qLnN0YXRlLHQ9Wy4uLmUsLi4uZV0scj14LlJFQ09NTUVOREVEX1dBTExFVF9BTU9VTlQqMjtyZXR1cm4gbWA8d2NtLW1vZGFsLWhlYWRlciB0aXRsZT0iQ29ubmVjdCB5b3VyIHdhbGxldCIgLm9uQWN0aW9uPSIke3RoaXMub25Hb1RvUXJjb2RlfSIgLmFjdGlvbkljb249IiR7VC5RUkNPREVfSUNPTn0iPjwvd2NtLW1vZGFsLWhlYWRlcj48d2NtLW1vZGFsLWNvbnRlbnQ+PGRpdiBjbGFzcz0id2NtLXRpdGxlIj4ke1QuTU9CSUxFX0lDT059PHdjbS10ZXh0IHZhcmlhbnQ9InNtYWxsLXJlZ3VsYXIiIGNvbG9yPSJhY2NlbnQiPldhbGxldENvbm5lY3Q8L3djbS10ZXh0PjwvZGl2PjxkaXYgY2xhc3M9IndjbS1zbGlkZXIiPjxkaXYgY2xhc3M9IndjbS10cmFjayI+JHtbLi4uQXJyYXkocildLm1hcCgobixvKT0+e2NvbnN0IGk9dFtvJXQubGVuZ3RoXTtyZXR1cm4gaT9tYDx3Y20td2FsbGV0LWltYWdlIHdhbGxldElkPSIke2kuaWR9IiBpbWFnZUlkPSIke2kuaW1hZ2VfaWR9Ij48L3djbS13YWxsZXQtaW1hZ2U+YDpULldBTExFVF9QTEFDRUhPTERFUn0pfTwvZGl2Pjx3Y20tYnV0dG9uLWJpZyBAY2xpY2s9IiR7JC5oYW5kbGVBbmRyb2lkTGlua2luZ30iPjx3Y20tdGV4dCB2YXJpYW50PSJtZWRpdW0tcmVndWxhciIgY29sb3I9ImludmVyc2UiPlNlbGVjdCBXYWxsZXQ8L3djbS10ZXh0Pjwvd2NtLWJ1dHRvbi1iaWc+PC9kaXY+PC93Y20tbW9kYWwtY29udGVudD48d2NtLWluZm8tZm9vdGVyPjx3Y20tdGV4dCBjb2xvcj0ic2Vjb25kYXJ5IiB2YXJpYW50PSJzbWFsbC10aGluIj5DaG9vc2UgV2FsbGV0Q29ubmVjdCB0byBzZWUgc3VwcG9ydGVkIGFwcHMgb24geW91ciBkZXZpY2U8L3djbS10ZXh0Pjwvd2NtLWluZm8tZm9vdGVyPmB9fTtvci5zdHlsZXM9W08uZ2xvYmFsQ3NzLE5zXTtvcj1XcyhbSSgid2NtLWFuZHJvaWQtd2FsbGV0LXNlbGVjdGlvbiIpXSxvcik7Y29uc3Qga3M9UGBAa2V5ZnJhbWVzIGxvYWRpbmd7dG97c3Ryb2tlLWRhc2hvZmZzZXQ6MH19QGtleWZyYW1lcyBzaGFrZXsxMCUsOTAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtMXB4LDAsMCl9MjAlLDgwJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMXB4LDAsMCl9MzAlLDUwJSw3MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0ycHgsMCwwKX00MCUsNjAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgycHgsMCwwKX19Omhvc3R7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXJ9ZGl2e3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjExMHB4O2hlaWdodDoxMTBweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luOjQwcHggMCAyMHB4IDA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKX1zdmd7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTEwcHg7aGVpZ2h0OjExMHB4O2ZpbGw6bm9uZTtzdHJva2U6dHJhbnNwYXJlbnQ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLXdpZHRoOjJweDt0b3A6MDtsZWZ0OjB9dXNle3N0cm9rZTp2YXIoLS13Y20tYWNjZW50LWNvbG9yKTthbmltYXRpb246bG9hZGluZyAxcyBsaW5lYXIgaW5maW5pdGV9d2NtLXdhbGxldC1pbWFnZXtib3JkZXItcmFkaXVzOnZhcigtLXdjbS13YWxsZXQtaWNvbi1sYXJnZS1ib3JkZXItcmFkaXVzKTt3aWR0aDo5MHB4O2hlaWdodDo5MHB4fXdjbS10ZXh0e21hcmdpbi1ib3R0b206NDBweH0ud2NtLWVycm9yIHN2Z3tzdHJva2U6dmFyKC0td2NtLWVycm9yLWNvbG9yKX0ud2NtLWVycm9yIHVzZXtkaXNwbGF5Om5vbmV9LndjbS1lcnJvcnthbmltYXRpb246c2hha2UgLjRzIGN1YmljLWJlemllciguMzYsLjA3LC4xOSwuOTcpIGJvdGh9LndjbS1zdGFsZSBzdmcsLndjbS1zdGFsZSB1c2V7ZGlzcGxheTpub25lfWA7dmFyIFVzPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxqcz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFJ0PShlLHQscixuKT0+e2Zvcih2YXIgbz1uPjE/dm9pZCAwOm4/anModCxyKTp0LGk9ZS5sZW5ndGgtMSxzO2k+PTA7aS0tKShzPWVbaV0pJiYobz0obj9zKHQscixvKTpzKG8pKXx8byk7cmV0dXJuIG4mJm8mJlVzKHQscixvKSxvfTtsZXQgaXQ9Y2xhc3MgZXh0ZW5kcyBFe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLndhbGxldElkPXZvaWQgMCx0aGlzLmltYWdlSWQ9dm9pZCAwLHRoaXMuaXNFcnJvcj0hMSx0aGlzLmlzU3RhbGU9ITEsdGhpcy5sYWJlbD0iIn1zdmdMb2FkZXJUZW1wbGF0ZSgpe3ZhciBlLHQ7Y29uc3QgaT0odD0oZT14dC5zdGF0ZS50aGVtZVZhcmlhYmxlcyk9PW51bGw/dm9pZCAwOmVbIi0td2NtLXdhbGxldC1pY29uLWxhcmdlLWJvcmRlci1yYWRpdXMiXSkhPW51bGw/dDpPLmdldFByZXNldCgiLS13Y20td2FsbGV0LWljb24tbGFyZ2UtYm9yZGVyLXJhZGl1cyIpO2xldCBzPTA7aS5pbmNsdWRlcygiJSIpP3M9ODgvMTAwKnBhcnNlSW50KGksMTApOnM9cGFyc2VJbnQoaSwxMCkscyo9MS4xNztjb25zdCBsPTMxNy1zKjEuNTcsYT00MjUtcyoxLjg7cmV0dXJuIG1gPHN2ZyB2aWV3Qm94PSIwIDAgMTEwIDExMCIgd2lkdGg9IjExMCIgaGVpZ2h0PSIxMTAiPjxyZWN0IGlkPSJ3Y20tbG9hZGVyIiB4PSIyIiB5PSIyIiB3aWR0aD0iMTA2IiBoZWlnaHQ9IjEwNiIgcng9IiR7c30iLz48dXNlIHhsaW5rOmhyZWY9IiN3Y20tbG9hZGVyIiBzdHJva2UtZGFzaGFycmF5PSIxMDYgJHtsfSIgc3Ryb2tlLWRhc2hvZmZzZXQ9IiR7YX0iPjwvdXNlPjwvc3ZnPmB9cmVuZGVyKCl7Y29uc3QgZT17IndjbS1lcnJvciI6dGhpcy5pc0Vycm9yLCJ3Y20tc3RhbGUiOnRoaXMuaXNTdGFsZX07cmV0dXJuIG1gPGRpdiBjbGFzcz0iJHtHKGUpfSI+JHt0aGlzLnN2Z0xvYWRlclRlbXBsYXRlKCl9PHdjbS13YWxsZXQtaW1hZ2Ugd2FsbGV0SWQ9IiR7VSh0aGlzLndhbGxldElkKX0iIGltYWdlSWQ9IiR7VSh0aGlzLmltYWdlSWQpfSI+PC93Y20td2FsbGV0LWltYWdlPjwvZGl2Pjx3Y20tdGV4dCB2YXJpYW50PSJtZWRpdW0tcmVndWxhciIgY29sb3I9IiR7dGhpcy5pc0Vycm9yPyJlcnJvciI6InByaW1hcnkifSI+JHt0aGlzLmlzRXJyb3I/IkNvbm5lY3Rpb24gZGVjbGluZWQiOnRoaXMubGFiZWx9PC93Y20tdGV4dD5gfX07aXQuc3R5bGVzPVtPLmdsb2JhbENzcyxrc107UnQoW18oKV0saXQucHJvdG90eXBlLCJ3YWxsZXRJZCIsMik7UnQoW18oKV0saXQucHJvdG90eXBlLCJpbWFnZUlkIiwyKTtSdChbXyh7dHlwZTpCb29sZWFufSldLGl0LnByb3RvdHlwZSwiaXNFcnJvciIsMik7UnQoW18oe3R5cGU6Qm9vbGVhbn0pXSxpdC5wcm90b3R5cGUsImlzU3RhbGUiLDIpO1J0KFtfKCldLGl0LnByb3RvdHlwZSwibGFiZWwiLDIpO2l0PVJ0KFtJKCJ3Y20tY29ubmVjdG9yLXdhaXRpbmciKV0saXQpO2NvbnN0IHl0PXttYW51YWxXYWxsZXRzKCl7dmFyIGUsdDtjb25zdHttb2JpbGVXYWxsZXRzOnIsZGVza3RvcFdhbGxldHM6bn09aHQuc3RhdGUsbz0oZT15dC5yZWNlbnRXYWxsZXQoKSk9PW51bGw/dm9pZCAwOmUuaWQsaT14LmlzTW9iaWxlKCk/cjpuLHM9aT8uZmlsdGVyKGw9Pm8hPT1sLmlkKTtyZXR1cm4odD14LmlzTW9iaWxlKCk/cz8ubWFwKCh7aWQ6bCxuYW1lOmEsbGlua3M6Y30pPT4oe2lkOmwsbmFtZTphLG1vYmlsZTpjLGxpbmtzOmN9KSk6cz8ubWFwKCh7aWQ6bCxuYW1lOmEsbGlua3M6Y30pPT4oe2lkOmwsbmFtZTphLGRlc2t0b3A6YyxsaW5rczpjfSkpKSE9bnVsbD90OltdfSxyZWNlbnRXYWxsZXQoKXtyZXR1cm4gJC5nZXRSZWNlbnRXYWxsZXQoKX0scmVjb21lbmRlZFdhbGxldHMoZT0hMSl7dmFyIHQ7Y29uc3Qgcj1lfHwodD15dC5yZWNlbnRXYWxsZXQoKSk9PW51bGw/dm9pZCAwOnQuaWQse3JlY29tZW5kZWRXYWxsZXRzOm59PWouc3RhdGU7cmV0dXJuIG4uZmlsdGVyKGk9PnIhPT1pLmlkKX19LHJ0PXtvbkNvbm5lY3RpbmcoZSl7JC5nb1RvQ29ubmVjdGluZ1ZpZXcoZSl9LG1hbnVhbFdhbGxldHNUZW1wbGF0ZSgpe3JldHVybiB5dC5tYW51YWxXYWxsZXRzKCkubWFwKHQ9Pm1gPHdjbS13YWxsZXQtYnV0dG9uIHdhbGxldElkPSIke3QuaWR9IiBuYW1lPSIke3QubmFtZX0iIC5vbkNsaWNrPSIkeygpPT50aGlzLm9uQ29ubmVjdGluZyh0KX0iPjwvd2NtLXdhbGxldC1idXR0b24+YCl9LHJlY29tZW5kZWRXYWxsZXRzVGVtcGxhdGUoZT0hMSl7cmV0dXJuIHl0LnJlY29tZW5kZWRXYWxsZXRzKGUpLm1hcChyPT5tYDx3Y20td2FsbGV0LWJ1dHRvbiBuYW1lPSIke3IubmFtZX0iIHdhbGxldElkPSIke3IuaWR9IiBpbWFnZUlkPSIke3IuaW1hZ2VfaWR9IiAub25DbGljaz0iJHsoKT0+dGhpcy5vbkNvbm5lY3Rpbmcocil9Ij48L3djbS13YWxsZXQtYnV0dG9uPmApfSxyZWNlbnRXYWxsZXRUZW1wbGF0ZSgpe2NvbnN0IGU9eXQucmVjZW50V2FsbGV0KCk7aWYoZSlyZXR1cm4gbWA8d2NtLXdhbGxldC1idXR0b24gbmFtZT0iJHtlLm5hbWV9IiB3YWxsZXRJZD0iJHtlLmlkfSIgaW1hZ2VJZD0iJHtVKGUuaW1hZ2VfaWQpfSIgLnJlY2VudD0iJHshMH0iIC5vbkNsaWNrPSIkeygpPT50aGlzLm9uQ29ubmVjdGluZyhlKX0iPjwvd2NtLXdhbGxldC1idXR0b24+YH19LEhzPVBgLndjbS1ncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDQsODBweCk7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LndjbS1kZXNrdG9wLXRpdGxlLC53Y20tbW9iaWxlLXRpdGxle2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LndjbS1tb2JpbGUtdGl0bGV7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLWJvdHRvbToyMHB4O21hcmdpbi10b3A6LTEwcHh9LndjbS1kZXNrdG9wLXRpdGxle21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nOjAgMTBweH0ud2NtLXN1YnRpdGxle2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LndjbS1zdWJ0aXRsZTpsYXN0LWNoaWxkIHBhdGh7ZmlsbDp2YXIoLS13Y20tY29sb3ItZmctMyl9LndjbS1kZXNrdG9wLXRpdGxlIHN2Zywud2NtLW1vYmlsZS10aXRsZSBzdmd7bWFyZ2luLXJpZ2h0OjZweH0ud2NtLWRlc2t0b3AtdGl0bGUgcGF0aCwud2NtLW1vYmlsZS10aXRsZSBwYXRoe2ZpbGw6dmFyKC0td2NtLWFjY2VudC1jb2xvcil9YDt2YXIgenM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixGcz0oZSx0LHIsbik9Pntmb3IodmFyIG89bj4xP3ZvaWQgMDpuP3pzKHQscik6dCxpPWUubGVuZ3RoLTEscztpPj0wO2ktLSkocz1lW2ldKSYmKG89cyhvKXx8byk7cmV0dXJuIG99O2xldCBucj1jbGFzcyBleHRlbmRzIEV7cmVuZGVyKCl7Y29uc3R7ZXhwbG9yZXJFeGNsdWRlZFdhbGxldElkczplLGVuYWJsZUV4cGxvcmVyOnR9PWh0LnN0YXRlLHI9ZSE9PSJBTEwiJiZ0LG49cnQubWFudWFsV2FsbGV0c1RlbXBsYXRlKCksbz1ydC5yZWNvbWVuZGVkV2FsbGV0c1RlbXBsYXRlKCk7bGV0IHM9W3J0LnJlY2VudFdhbGxldFRlbXBsYXRlKCksLi4ubiwuLi5vXTtzPXMuZmlsdGVyKEJvb2xlYW4pO2NvbnN0IGw9cy5sZW5ndGg+NHx8cjtsZXQgYT1bXTtsP2E9cy5zbGljZSgwLDMpOmE9cztjb25zdCBjPSEhYS5sZW5ndGg7cmV0dXJuIG1gPHdjbS1tb2RhbC1oZWFkZXIgLmJvcmRlcj0iJHshMH0iIHRpdGxlPSJDb25uZWN0IHlvdXIgd2FsbGV0IiAub25BY3Rpb249IiR7JC5oYW5kbGVVcmlDb3B5fSIgLmFjdGlvbkljb249IiR7VC5DT1BZX0lDT059Ij48L3djbS1tb2RhbC1oZWFkZXI+PHdjbS1tb2RhbC1jb250ZW50PjxkaXYgY2xhc3M9IndjbS1tb2JpbGUtdGl0bGUiPjxkaXYgY2xhc3M9IndjbS1zdWJ0aXRsZSI+JHtULk1PQklMRV9JQ09OfTx3Y20tdGV4dCB2YXJpYW50PSJzbWFsbC1yZWd1bGFyIiBjb2xvcj0iYWNjZW50Ij5Nb2JpbGU8L3djbS10ZXh0PjwvZGl2PjxkaXYgY2xhc3M9IndjbS1zdWJ0aXRsZSI+JHtULlNDQU5fSUNPTn08d2NtLXRleHQgdmFyaWFudD0ic21hbGwtcmVndWxhciIgY29sb3I9InNlY29uZGFyeSI+U2NhbiB3aXRoIHlvdXIgd2FsbGV0PC93Y20tdGV4dD48L2Rpdj48L2Rpdj48d2NtLXdhbGxldGNvbm5lY3QtcXI+PC93Y20td2FsbGV0Y29ubmVjdC1xcj48L3djbS1tb2RhbC1jb250ZW50PiR7Yz9tYDx3Y20tbW9kYWwtZm9vdGVyPjxkaXYgY2xhc3M9IndjbS1kZXNrdG9wLXRpdGxlIj4ke1QuREVTS1RPUF9JQ09OfTx3Y20tdGV4dCB2YXJpYW50PSJzbWFsbC1yZWd1bGFyIiBjb2xvcj0iYWNjZW50Ij5EZXNrdG9wPC93Y20tdGV4dD48L2Rpdj48ZGl2IGNsYXNzPSJ3Y20tZ3JpZCI+JHthfSAke2w/bWA8d2NtLXZpZXctYWxsLXdhbGxldHMtYnV0dG9uPjwvd2NtLXZpZXctYWxsLXdhbGxldHMtYnV0dG9uPmA6bnVsbH08L2Rpdj48L3djbS1tb2RhbC1mb290ZXI+YDpudWxsfWB9fTtuci5zdHlsZXM9W08uZ2xvYmFsQ3NzLEhzXTtucj1GcyhbSSgid2NtLWRlc2t0b3Atd2FsbGV0LXNlbGVjdGlvbiIpXSxucik7Y29uc3QgVnM9UGBkaXZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS13Y20tY29sb3ItYmctMik7cGFkZGluZzoxMHB4IDIwcHggMTVweCAyMHB4O2JvcmRlci10b3A6MXB4IHNvbGlkIHZhcigtLXdjbS1jb2xvci1iZy0zKTt0ZXh0LWFsaWduOmNlbnRlcn1he2NvbG9yOnZhcigtLXdjbS1hY2NlbnQtY29sb3IpO3RleHQtZGVjb3JhdGlvbjpub25lO3RyYW5zaXRpb246b3BhY2l0eSAuMnMgZWFzZS1pbi1vdXQ7ZGlzcGxheTppbmxpbmV9YTphY3RpdmV7b3BhY2l0eTouOH1AbWVkaWEoaG92ZXI6aG92ZXIpe2E6aG92ZXJ7b3BhY2l0eTouOH19YDt2YXIgWnM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixxcz0oZSx0LHIsbik9Pntmb3IodmFyIG89bj4xP3ZvaWQgMDpuP1pzKHQscik6dCxpPWUubGVuZ3RoLTEscztpPj0wO2ktLSkocz1lW2ldKSYmKG89cyhvKXx8byk7cmV0dXJuIG99O2xldCBpcj1jbGFzcyBleHRlbmRzIEV7cmVuZGVyKCl7Y29uc3R7dGVybXNPZlNlcnZpY2VVcmw6ZSxwcml2YWN5UG9saWN5VXJsOnR9PWh0LnN0YXRlO3JldHVybiBlPz90P21gPGRpdj48d2NtLXRleHQgdmFyaWFudD0ic21hbGwtcmVndWxhciIgY29sb3I9InNlY29uZGFyeSI+QnkgY29ubmVjdGluZyB5b3VyIHdhbGxldCB0byB0aGlzIGFwcCwgeW91IGFncmVlIHRvIHRoZSBhcHAncyAke2U/bWA8YSBocmVmPSIke2V9IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj5UZXJtcyBvZiBTZXJ2aWNlPC9hPmA6bnVsbH0gJHtlJiZ0PyJhbmQiOm51bGx9ICR7dD9tYDxhIGhyZWY9IiR7dH0iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPlByaXZhY3kgUG9saWN5PC9hPmA6bnVsbH08L3djbS10ZXh0PjwvZGl2PmA6bnVsbH19O2lyLnN0eWxlcz1bTy5nbG9iYWxDc3MsVnNdO2lyPXFzKFtJKCJ3Y20tbGVnYWwtbm90aWNlIildLGlyKTtjb25zdCBLcz1QYGRpdntkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCg0LDgwcHgpO21hcmdpbjowIC0xMHB4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3Jvdy1nYXA6MTBweH1gO3ZhciBZcz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFFzPShlLHQscixuKT0+e2Zvcih2YXIgbz1uPjE/dm9pZCAwOm4/WXModCxyKTp0LGk9ZS5sZW5ndGgtMSxzO2k+PTA7aS0tKShzPWVbaV0pJiYobz1zKG8pfHxvKTtyZXR1cm4gb307bGV0IHNyPWNsYXNzIGV4dGVuZHMgRXtvblFyY29kZSgpe04ucHVzaCgiUXJjb2RlIil9cmVuZGVyKCl7Y29uc3R7ZXhwbG9yZXJFeGNsdWRlZFdhbGxldElkczplLGVuYWJsZUV4cGxvcmVyOnR9PWh0LnN0YXRlLHI9ZSE9PSJBTEwiJiZ0LG49cnQubWFudWFsV2FsbGV0c1RlbXBsYXRlKCksbz1ydC5yZWNvbWVuZGVkV2FsbGV0c1RlbXBsYXRlKCk7bGV0IHM9W3J0LnJlY2VudFdhbGxldFRlbXBsYXRlKCksLi4ubiwuLi5vXTtzPXMuZmlsdGVyKEJvb2xlYW4pO2NvbnN0IGw9cy5sZW5ndGg+OHx8cjtsZXQgYT1bXTtsP2E9cy5zbGljZSgwLDcpOmE9cztjb25zdCBjPSEhYS5sZW5ndGg7cmV0dXJuIG1gPHdjbS1tb2RhbC1oZWFkZXIgdGl0bGU9IkNvbm5lY3QgeW91ciB3YWxsZXQiIC5vbkFjdGlvbj0iJHt0aGlzLm9uUXJjb2RlfSIgLmFjdGlvbkljb249IiR7VC5RUkNPREVfSUNPTn0iPjwvd2NtLW1vZGFsLWhlYWRlcj4ke2M/bWA8d2NtLW1vZGFsLWNvbnRlbnQ+PGRpdj4ke2F9ICR7bD9tYDx3Y20tdmlldy1hbGwtd2FsbGV0cy1idXR0b24+PC93Y20tdmlldy1hbGwtd2FsbGV0cy1idXR0b24+YDpudWxsfTwvZGl2Pjwvd2NtLW1vZGFsLWNvbnRlbnQ+YDpudWxsfWB9fTtzci5zdHlsZXM9W08uZ2xvYmFsQ3NzLEtzXTtzcj1RcyhbSSgid2NtLW1vYmlsZS13YWxsZXQtc2VsZWN0aW9uIildLHNyKTtjb25zdCBHcz1QYDpob3N0e2FsbDppbml0aWFsfS53Y20tb3ZlcmxheXt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OnZhcigtLXdjbS16LWluZGV4KTtvdmVyZmxvdzpoaWRkZW47ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lO2JhY2tncm91bmQtY29sb3I6dmFyKC0td2NtLW92ZXJsYXktYmFja2dyb3VuZC1jb2xvcik7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXdjbS1vdmVybGF5LWJhY2tkcm9wLWZpbHRlcil9QG1lZGlhKG1heC1oZWlnaHQ6NzIwcHgpIGFuZCAob3JpZW50YXRpb246bGFuZHNjYXBlKXsud2NtLW92ZXJsYXl7b3ZlcmZsb3c6c2Nyb2xsO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7cGFkZGluZzoyMHB4IDB9fS53Y20tYWN0aXZle3BvaW50ZXItZXZlbnRzOmF1dG99LndjbS1jb250YWluZXJ7cG9zaXRpb246cmVsYXRpdmU7bWF4LXdpZHRoOjM2MHB4O3dpZHRoOjEwMCU7b3V0bGluZTowO2JvcmRlci1yYWRpdXM6dmFyKC0td2NtLWJhY2tncm91bmQtYm9yZGVyLXJhZGl1cykgdmFyKC0td2NtLWJhY2tncm91bmQtYm9yZGVyLXJhZGl1cykgdmFyKC0td2NtLWNvbnRhaW5lci1ib3JkZXItcmFkaXVzKSB2YXIoLS13Y20tY29udGFpbmVyLWJvcmRlci1yYWRpdXMpO2JvcmRlcjoxcHggc29saWQgdmFyKC0td2NtLWNvbG9yLW92ZXJsYXkpO292ZXJmbG93OmhpZGRlbn0ud2NtLWNhcmR7d2lkdGg6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItcmFkaXVzOnZhcigtLXdjbS1jb250YWluZXItYm9yZGVyLXJhZGl1cyk7b3ZlcmZsb3c6aGlkZGVuO2JveC1zaGFkb3c6MCA2cHggMTRweCAtNnB4IHJnYmEoMTAsMTYsMzEsLjEyKSwwIDEwcHggMzJweCAtNHB4IHJnYmEoMTAsMTYsMzEsLjEpLDAgMCAwIDFweCB2YXIoLS13Y20tY29sb3Itb3ZlcmxheSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS13Y20tY29sb3ItYmctMSk7Y29sb3I6dmFyKC0td2NtLWNvbG9yLWZnLTEpfUBtZWRpYShtYXgtd2lkdGg6NjAwcHgpey53Y20tY29udGFpbmVye21heC13aWR0aDo0NDBweDtib3JkZXItcmFkaXVzOnZhcigtLXdjbS1iYWNrZ3JvdW5kLWJvcmRlci1yYWRpdXMpIHZhcigtLXdjbS1iYWNrZ3JvdW5kLWJvcmRlci1yYWRpdXMpIDAgMH0ud2NtLWNhcmR7Ym9yZGVyLXJhZGl1czp2YXIoLS13Y20tY29udGFpbmVyLWJvcmRlci1yYWRpdXMpIHZhcigtLXdjbS1jb250YWluZXItYm9yZGVyLXJhZGl1cykgMCAwfS53Y20tb3ZlcmxheXthbGlnbi1pdGVtczpmbGV4LWVuZH19QG1lZGlhKG1heC13aWR0aDo0NDBweCl7LndjbS1jb250YWluZXJ7Ym9yZGVyOjB9fWA7dmFyIEpzPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxYcz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLENyPShlLHQscixuKT0+e2Zvcih2YXIgbz1uPjE/dm9pZCAwOm4/WHModCxyKTp0LGk9ZS5sZW5ndGgtMSxzO2k+PTA7aS0tKShzPWVbaV0pJiYobz0obj9zKHQscixvKTpzKG8pKXx8byk7cmV0dXJuIG4mJm8mJkpzKHQscixvKSxvfTtsZXQgWnQ9Y2xhc3MgZXh0ZW5kcyBFe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm9wZW49ITEsdGhpcy5hY3RpdmU9ITEsdGhpcy51bnN1YnNjcmliZU1vZGFsPXZvaWQgMCx0aGlzLmFib3J0Q29udHJvbGxlcj12b2lkIDAsdGhpcy51bnN1YnNjcmliZU1vZGFsPXJlLnN1YnNjcmliZShlPT57ZS5vcGVuP3RoaXMub25PcGVuTW9kYWxFdmVudCgpOnRoaXMub25DbG9zZU1vZGFsRXZlbnQoKX0pfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dmFyIGU7KGU9dGhpcy51bnN1YnNjcmliZU1vZGFsKT09bnVsbHx8ZS5jYWxsKHRoaXMpfWdldCBvdmVybGF5RWwoKXtyZXR1cm4gJC5nZXRTaGFkb3dSb290RWxlbWVudCh0aGlzLCIud2NtLW92ZXJsYXkiKX1nZXQgY29udGFpbmVyRWwoKXtyZXR1cm4gJC5nZXRTaGFkb3dSb290RWxlbWVudCh0aGlzLCIud2NtLWNvbnRhaW5lciIpfXRvZ2dsZUJvZHlTY3JvbGwoZSl7aWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpKWlmKGUpe2NvbnN0IHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIndjbS1zdHlsZXMiKTtyPy5yZW1vdmUoKX1lbHNlIGRvY3VtZW50LmhlYWQuaW5zZXJ0QWRqYWNlbnRIVE1MKCJiZWZvcmVlbmQiLCc8c3R5bGUgaWQ9IndjbS1zdHlsZXMiPmh0bWwsYm9keXt0b3VjaC1hY3Rpb246bm9uZTtvdmVyZmxvdzpoaWRkZW47b3ZlcnNjcm9sbC1iZWhhdmlvcjpjb250YWluO308L3N0eWxlPicpfW9uQ2xvc2VNb2RhbChlKXtlLnRhcmdldD09PWUuY3VycmVudFRhcmdldCYmcmUuY2xvc2UoKX1vbk9wZW5Nb2RhbEV2ZW50KCl7dGhpcy50b2dnbGVCb2R5U2Nyb2xsKCExKSx0aGlzLmFkZEtleWJvYXJkRXZlbnRzKCksdGhpcy5vcGVuPSEwLHNldFRpbWVvdXQoYXN5bmMoKT0+e2NvbnN0IGU9JC5pc01vYmlsZUFuaW1hdGlvbigpP3t5OlsiNTB2aCIsIjB2aCJdfTp7c2NhbGU6Wy45OCwxXX0sdD0uMSxyPS4yO2F3YWl0IFByb21pc2UuYWxsKFtkdCh0aGlzLm92ZXJsYXlFbCx7b3BhY2l0eTpbMCwxXX0se2RlbGF5OnQsZHVyYXRpb246cn0pLmZpbmlzaGVkLGR0KHRoaXMuY29udGFpbmVyRWwsZSx7ZGVsYXk6dCxkdXJhdGlvbjpyfSkuZmluaXNoZWRdKSx0aGlzLmFjdGl2ZT0hMH0sMCl9YXN5bmMgb25DbG9zZU1vZGFsRXZlbnQoKXt0aGlzLnRvZ2dsZUJvZHlTY3JvbGwoITApLHRoaXMucmVtb3ZlS2V5Ym9hcmRFdmVudHMoKTtjb25zdCBlPSQuaXNNb2JpbGVBbmltYXRpb24oKT97eTpbIjB2aCIsIjUwdmgiXX06e3NjYWxlOlsxLC45OF19LHQ9LjI7YXdhaXQgUHJvbWlzZS5hbGwoW2R0KHRoaXMub3ZlcmxheUVsLHtvcGFjaXR5OlsxLDBdfSx7ZHVyYXRpb246dH0pLmZpbmlzaGVkLGR0KHRoaXMuY29udGFpbmVyRWwsZSx7ZHVyYXRpb246dH0pLmZpbmlzaGVkXSksdGhpcy5jb250YWluZXJFbC5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksdGhpcy5hY3RpdmU9ITEsdGhpcy5vcGVuPSExfWFkZEtleWJvYXJkRXZlbnRzKCl7dGhpcy5hYm9ydENvbnRyb2xsZXI9bmV3IEFib3J0Q29udHJvbGxlcix3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZT0+e3ZhciB0O2Uua2V5PT09IkVzY2FwZSI/cmUuY2xvc2UoKTplLmtleT09PSJUYWIiJiYoKHQ9ZS50YXJnZXQpIT1udWxsJiZ0LnRhZ05hbWUuaW5jbHVkZXMoIndjbS0iKXx8dGhpcy5jb250YWluZXJFbC5mb2N1cygpKX0sdGhpcy5hYm9ydENvbnRyb2xsZXIpLHRoaXMuY29udGFpbmVyRWwuZm9jdXMoKX1yZW1vdmVLZXlib2FyZEV2ZW50cygpe3ZhciBlOyhlPXRoaXMuYWJvcnRDb250cm9sbGVyKT09bnVsbHx8ZS5hYm9ydCgpLHRoaXMuYWJvcnRDb250cm9sbGVyPXZvaWQgMH1yZW5kZXIoKXtjb25zdCBlPXsid2NtLW92ZXJsYXkiOiEwLCJ3Y20tYWN0aXZlIjp0aGlzLmFjdGl2ZX07cmV0dXJuIG1gPHdjbS1leHBsb3Jlci1jb250ZXh0Pjwvd2NtLWV4cGxvcmVyLWNvbnRleHQ+PHdjbS10aGVtZS1jb250ZXh0Pjwvd2NtLXRoZW1lLWNvbnRleHQ+PGRpdiBpZD0id2NtLW1vZGFsIiBjbGFzcz0iJHtHKGUpfSIgQGNsaWNrPSIke3RoaXMub25DbG9zZU1vZGFsfSIgcm9sZT0iYWxlcnRkaWFsb2ciIGFyaWEtbW9kYWw9InRydWUiPjxkaXYgY2xhc3M9IndjbS1jb250YWluZXIiIHRhYmluZGV4PSIwIj4ke3RoaXMub3Blbj9tYDx3Y20tbW9kYWwtYmFja2NhcmQ+PC93Y20tbW9kYWwtYmFja2NhcmQ+PGRpdiBjbGFzcz0id2NtLWNhcmQiPjx3Y20tbW9kYWwtcm91dGVyPjwvd2NtLW1vZGFsLXJvdXRlcj48d2NtLW1vZGFsLXRvYXN0Pjwvd2NtLW1vZGFsLXRvYXN0PjwvZGl2PmA6bnVsbH08L2Rpdj48L2Rpdj5gfX07WnQuc3R5bGVzPVtPLmdsb2JhbENzcyxHc107Q3IoW0goKV0sWnQucHJvdG90eXBlLCJvcGVuIiwyKTtDcihbSCgpXSxadC5wcm90b3R5cGUsImFjdGl2ZSIsMik7WnQ9Q3IoW0koIndjbS1tb2RhbCIpXSxadCk7Y29uc3QgdGw9UGBkaXZ7ZGlzcGxheTpmbGV4O21hcmdpbi10b3A6MTVweH1zbG90e2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjowIDVweH13Y20tYnV0dG9ue21hcmdpbjowIDVweH1gO3ZhciBlbD1PYmplY3QuZGVmaW5lUHJvcGVydHkscmw9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixHdD0oZSx0LHIsbik9Pntmb3IodmFyIG89bj4xP3ZvaWQgMDpuP3JsKHQscik6dCxpPWUubGVuZ3RoLTEscztpPj0wO2ktLSkocz1lW2ldKSYmKG89KG4/cyh0LHIsbyk6cyhvKSl8fG8pO3JldHVybiBuJiZvJiZlbCh0LHIsbyksb307bGV0IHB0PWNsYXNzIGV4dGVuZHMgRXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pc01vYmlsZT0hMSx0aGlzLmlzRGVza3RvcD0hMSx0aGlzLmlzV2ViPSExLHRoaXMuaXNSZXRyeT0hMX1vbk1vYmlsZSgpe3guaXNNb2JpbGUoKT9OLnJlcGxhY2UoIk1vYmlsZUNvbm5lY3RpbmciKTpOLnJlcGxhY2UoIk1vYmlsZVFyY29kZUNvbm5lY3RpbmciKX1vbkRlc2t0b3AoKXtOLnJlcGxhY2UoIkRlc2t0b3BDb25uZWN0aW5nIil9b25XZWIoKXtOLnJlcGxhY2UoIldlYkNvbm5lY3RpbmciKX1yZW5kZXIoKXtyZXR1cm4gbWA8ZGl2PiR7dGhpcy5pc1JldHJ5P21gPHNsb3Q+PC9zbG90PmA6bnVsbH0gJHt0aGlzLmlzTW9iaWxlP21gPHdjbS1idXR0b24gLm9uQ2xpY2s9IiR7dGhpcy5vbk1vYmlsZX0iIC5pY29uTGVmdD0iJHtULk1PQklMRV9JQ09OfSIgdmFyaWFudD0ib3V0bGluZSI+TW9iaWxlPC93Y20tYnV0dG9uPmA6bnVsbH0gJHt0aGlzLmlzRGVza3RvcD9tYDx3Y20tYnV0dG9uIC5vbkNsaWNrPSIke3RoaXMub25EZXNrdG9wfSIgLmljb25MZWZ0PSIke1QuREVTS1RPUF9JQ09OfSIgdmFyaWFudD0ib3V0bGluZSI+RGVza3RvcDwvd2NtLWJ1dHRvbj5gOm51bGx9ICR7dGhpcy5pc1dlYj9tYDx3Y20tYnV0dG9uIC5vbkNsaWNrPSIke3RoaXMub25XZWJ9IiAuaWNvbkxlZnQ9IiR7VC5HTE9CRV9JQ09OfSIgdmFyaWFudD0ib3V0bGluZSI+V2ViPC93Y20tYnV0dG9uPmA6bnVsbH08L2Rpdj5gfX07cHQuc3R5bGVzPVtPLmdsb2JhbENzcyx0bF07R3QoW18oe3R5cGU6Qm9vbGVhbn0pXSxwdC5wcm90b3R5cGUsImlzTW9iaWxlIiwyKTtHdChbXyh7dHlwZTpCb29sZWFufSldLHB0LnByb3RvdHlwZSwiaXNEZXNrdG9wIiwyKTtHdChbXyh7dHlwZTpCb29sZWFufSldLHB0LnByb3RvdHlwZSwiaXNXZWIiLDIpO0d0KFtfKHt0eXBlOkJvb2xlYW59KV0scHQucHJvdG90eXBlLCJpc1JldHJ5IiwyKTtwdD1HdChbSSgid2NtLXBsYXRmb3JtLXNlbGVjdGlvbiIpXSxwdCk7Y29uc3Qgb2w9UGBidXR0b257ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjVweCAxMHB4O2JvcmRlci1yYWRpdXM6dmFyKC0td2NtLWJ1dHRvbi1ob3Zlci1oaWdobGlnaHQtYm9yZGVyLXJhZGl1cyk7aGVpZ2h0OjEwMCU7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LndjbS1pY29uc3t3aWR0aDo2MHB4O2hlaWdodDo2MHB4O2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtwYWRkaW5nOjdweDtib3JkZXItcmFkaXVzOnZhcigtLXdjbS13YWxsZXQtaWNvbi1ib3JkZXItcmFkaXVzKTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbTo1cHg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS13Y20tY29sb3ItYmctMik7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggdmFyKC0td2NtLWNvbG9yLW92ZXJsYXkpfWJ1dHRvbjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS13Y20tY29sb3Itb3ZlcmxheSl9QG1lZGlhKGhvdmVyOmhvdmVyKXtidXR0b246aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS13Y20tY29sb3Itb3ZlcmxheSl9fS53Y20taWNvbnMgaW1ne3dpZHRoOjIxcHg7aGVpZ2h0OjIxcHg7b2JqZWN0LWZpdDpjb3ZlcjtvYmplY3QtcG9zaXRpb246Y2VudGVyO2JvcmRlci1yYWRpdXM6Y2FsYyh2YXIoLS13Y20td2FsbGV0LWljb24tYm9yZGVyLXJhZGl1cykvIDIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0td2NtLWNvbG9yLW92ZXJsYXkpfS53Y20taWNvbnMgc3Zne3dpZHRoOjIxcHg7aGVpZ2h0OjIxcHh9LndjbS1pY29ucyBpbWc6bnRoLWNoaWxkKDEpLC53Y20taWNvbnMgaW1nOm50aC1jaGlsZCgyKSwud2NtLWljb25zIHN2ZzpudGgtY2hpbGQoMSksLndjbS1pY29ucyBzdmc6bnRoLWNoaWxkKDIpe21hcmdpbi1ib3R0b206NHB4fXdjbS10ZXh0e3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpjZW50ZXJ9I3dhbGxldC1wbGFjZWhvbGRlci1maWxse2ZpbGw6dmFyKC0td2NtLWNvbG9yLWJnLTMpfSN3YWxsZXQtcGxhY2Vob2xkZXItZGFzaHtzdHJva2U6dmFyKC0td2NtLWNvbG9yLW92ZXJsYXkpfWA7dmFyIG5sPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsaWw9KGUsdCxyLG4pPT57Zm9yKHZhciBvPW4+MT92b2lkIDA6bj9ubCh0LHIpOnQsaT1lLmxlbmd0aC0xLHM7aT49MDtpLS0pKHM9ZVtpXSkmJihvPXMobyl8fG8pO3JldHVybiBvfTtsZXQgbHI9Y2xhc3MgZXh0ZW5kcyBFe29uQ2xpY2soKXtOLnB1c2goIldhbGxldEV4cGxvcmVyIil9cmVuZGVyKCl7Y29uc3R7cmVjb21lbmRlZFdhbGxldHM6ZX09ai5zdGF0ZSx0PXl0Lm1hbnVhbFdhbGxldHMoKSxyPVsuLi5lLC4uLnRdLnJldmVyc2UoKS5zbGljZSgwLDQpO3JldHVybiBtYDxidXR0b24gQGNsaWNrPSIke3RoaXMub25DbGlja30iPjxkaXYgY2xhc3M9IndjbS1pY29ucyI+JHtyLm1hcChuPT57Y29uc3Qgbz0kLmdldFdhbGxldEljb24obik7aWYobylyZXR1cm4gbWA8aW1nIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiIHNyYz0iJHtvfSI+YDtjb25zdCBpPSQuZ2V0V2FsbGV0SWNvbih7aWQ6bi5pZH0pO3JldHVybiBpP21gPGltZyBjcm9zc29yaWdpbj0iYW5vbnltb3VzIiBzcmM9IiR7aX0iPmA6VC5XQUxMRVRfUExBQ0VIT0xERVJ9KX0gJHtbLi4uQXJyYXkoNC1yLmxlbmd0aCldLm1hcCgoKT0+VC5XQUxMRVRfUExBQ0VIT0xERVIpfTwvZGl2Pjx3Y20tdGV4dCB2YXJpYW50PSJ4c21hbGwtcmVndWxhciI+VmlldyBBbGw8L3djbS10ZXh0PjwvYnV0dG9uPmB9fTtsci5zdHlsZXM9W08uZ2xvYmFsQ3NzLG9sXTtscj1pbChbSSgid2NtLXZpZXctYWxsLXdhbGxldHMtYnV0dG9uIildLGxyKTtjb25zdCBzbD1QYC53Y20tcXItY29udGFpbmVye3dpZHRoOjEwMCU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2FzcGVjdC1yYXRpbzoxLzF9YDt2YXIgbGw9T2JqZWN0LmRlZmluZVByb3BlcnR5LGFsPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsJGU9KGUsdCxyLG4pPT57Zm9yKHZhciBvPW4+MT92b2lkIDA6bj9hbCh0LHIpOnQsaT1lLmxlbmd0aC0xLHM7aT49MDtpLS0pKHM9ZVtpXSkmJihvPShuP3ModCxyLG8pOnMobykpfHxvKTtyZXR1cm4gbiYmbyYmbGwodCxyLG8pLG99O2xldCBUdD1jbGFzcyBleHRlbmRzIEV7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMud2FsbGV0SWQ9IiIsdGhpcy5pbWFnZUlkPSIiLHRoaXMudXJpPSIiLHNldFRpbWVvdXQoKCk9Pntjb25zdHt3YWxsZXRDb25uZWN0VXJpOmV9PVouc3RhdGU7dGhpcy51cmk9ZX0sMCl9Z2V0IG92ZXJsYXlFbCgpe3JldHVybiAkLmdldFNoYWRvd1Jvb3RFbGVtZW50KHRoaXMsIi53Y20tcXItY29udGFpbmVyIil9cmVuZGVyKCl7cmV0dXJuIG1gPGRpdiBjbGFzcz0id2NtLXFyLWNvbnRhaW5lciI+JHt0aGlzLnVyaT9tYDx3Y20tcXJjb2RlIHNpemU9IiR7dGhpcy5vdmVybGF5RWwub2Zmc2V0V2lkdGh9IiB1cmk9IiR7dGhpcy51cml9IiB3YWxsZXRJZD0iJHtVKHRoaXMud2FsbGV0SWQpfSIgaW1hZ2VJZD0iJHtVKHRoaXMuaW1hZ2VJZCl9Ij48L3djbS1xcmNvZGU+YDptYDx3Y20tc3Bpbm5lcj48L3djbS1zcGlubmVyPmB9PC9kaXY+YH19O1R0LnN0eWxlcz1bTy5nbG9iYWxDc3Msc2xdOyRlKFtfKCldLFR0LnByb3RvdHlwZSwid2FsbGV0SWQiLDIpOyRlKFtfKCldLFR0LnByb3RvdHlwZSwiaW1hZ2VJZCIsMik7JGUoW0goKV0sVHQucHJvdG90eXBlLCJ1cmkiLDIpO1R0PSRlKFtJKCJ3Y20td2FsbGV0Y29ubmVjdC1xciIpXSxUdCk7dmFyIGNsPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsZGw9KGUsdCxyLG4pPT57Zm9yKHZhciBvPW4+MT92b2lkIDA6bj9jbCh0LHIpOnQsaT1lLmxlbmd0aC0xLHM7aT49MDtpLS0pKHM9ZVtpXSkmJihvPXMobyl8fG8pO3JldHVybiBvfTtsZXQgYXI9Y2xhc3MgZXh0ZW5kcyBFe3ZpZXdUZW1wbGF0ZSgpe3JldHVybiB4LmlzQW5kcm9pZCgpJiYheC5pc1RlbGVncmFtKCk/bWA8d2NtLWFuZHJvaWQtd2FsbGV0LXNlbGVjdGlvbj48L3djbS1hbmRyb2lkLXdhbGxldC1zZWxlY3Rpb24+YDp4LmlzTW9iaWxlKCk/bWA8d2NtLW1vYmlsZS13YWxsZXQtc2VsZWN0aW9uPjwvd2NtLW1vYmlsZS13YWxsZXQtc2VsZWN0aW9uPmA6bWA8d2NtLWRlc2t0b3Atd2FsbGV0LXNlbGVjdGlvbj48L3djbS1kZXNrdG9wLXdhbGxldC1zZWxlY3Rpb24+YH1yZW5kZXIoKXtyZXR1cm4gbWAke3RoaXMudmlld1RlbXBsYXRlKCl9PHdjbS1sZWdhbC1ub3RpY2U+PC93Y20tbGVnYWwtbm90aWNlPmB9fTthci5zdHlsZXM9W08uZ2xvYmFsQ3NzXTthcj1kbChbSSgid2NtLWNvbm5lY3Qtd2FsbGV0LXZpZXciKV0sYXIpO2NvbnN0IGhsPVBgd2NtLWluZm8tZm9vdGVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7cGFkZGluZzo1cHggMH13Y20tdGV4dHt0ZXh0LWFsaWduOmNlbnRlcn1gO3ZhciB1bD1PYmplY3QuZGVmaW5lUHJvcGVydHksbWw9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixEbz0oZSx0LHIsbik9Pntmb3IodmFyIG89bj4xP3ZvaWQgMDpuP21sKHQscik6dCxpPWUubGVuZ3RoLTEscztpPj0wO2ktLSkocz1lW2ldKSYmKG89KG4/cyh0LHIsbyk6cyhvKSl8fG8pO3JldHVybiBuJiZvJiZ1bCh0LHIsbyksb307bGV0IG1lPWNsYXNzIGV4dGVuZHMgRXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5pc0Vycm9yPSExLHRoaXMub3BlbkRlc2t0b3BBcHAoKX1vbkZvcm1hdEFuZFJlZGlyZWN0KGUpe2NvbnN0e2Rlc2t0b3A6dCxuYW1lOnJ9PXguZ2V0V2FsbGV0Um91dGVyRGF0YSgpLG49dD8ubmF0aXZlLG89dD8udW5pdmVyc2FsO2lmKG4pe2NvbnN0IGk9eC5mb3JtYXROYXRpdmVVcmwobixlLHIpO3gub3BlbkhyZWYoaSwiX3NlbGYiKX1lbHNlIGlmKG8pe2NvbnN0IGk9eC5mb3JtYXRVbml2ZXJzYWxVcmwobyxlLHIpO3gub3BlbkhyZWYoaSwiX2JsYW5rIil9fW9wZW5EZXNrdG9wQXBwKCl7Y29uc3R7d2FsbGV0Q29ubmVjdFVyaTplfT1aLnN0YXRlLHQ9eC5nZXRXYWxsZXRSb3V0ZXJEYXRhKCk7JC5zZXRSZWNlbnRXYWxsZXQodCksZSYmdGhpcy5vbkZvcm1hdEFuZFJlZGlyZWN0KGUpfXJlbmRlcigpe2NvbnN0e25hbWU6ZSxpZDp0LGltYWdlX2lkOnJ9PXguZ2V0V2FsbGV0Um91dGVyRGF0YSgpLHtpc01vYmlsZTpuLGlzV2ViOm99PSQuZ2V0Q2FjaGVkUm91dGVyV2FsbGV0UGxhdGZvcm1zKCk7cmV0dXJuIG1gPHdjbS1tb2RhbC1oZWFkZXIgdGl0bGU9IiR7ZX0iIC5vbkFjdGlvbj0iJHskLmhhbmRsZVVyaUNvcHl9IiAuYWN0aW9uSWNvbj0iJHtULkNPUFlfSUNPTn0iPjwvd2NtLW1vZGFsLWhlYWRlcj48d2NtLW1vZGFsLWNvbnRlbnQ+PHdjbS1jb25uZWN0b3Itd2FpdGluZyB3YWxsZXRJZD0iJHt0fSIgaW1hZ2VJZD0iJHtVKHIpfSIgbGFiZWw9IiR7YENvbnRpbnVlIGluICR7ZX0uLi5gfSIgLmlzRXJyb3I9IiR7dGhpcy5pc0Vycm9yfSI+PC93Y20tY29ubmVjdG9yLXdhaXRpbmc+PC93Y20tbW9kYWwtY29udGVudD48d2NtLWluZm8tZm9vdGVyPjx3Y20tdGV4dCBjb2xvcj0ic2Vjb25kYXJ5IiB2YXJpYW50PSJzbWFsbC10aGluIj4ke2BDb25uZWN0aW9uIGNhbiBjb250aW51ZSBsb2FkaW5nIGlmICR7ZX0gaXMgbm90IGluc3RhbGxlZCBvbiB5b3VyIGRldmljZWB9PC93Y20tdGV4dD48d2NtLXBsYXRmb3JtLXNlbGVjdGlvbiAuaXNNb2JpbGU9IiR7bn0iIC5pc1dlYj0iJHtvfSIgLmlzUmV0cnk9IiR7ITB9Ij48d2NtLWJ1dHRvbiAub25DbGljaz0iJHt0aGlzLm9wZW5EZXNrdG9wQXBwLmJpbmQodGhpcyl9IiAuaWNvblJpZ2h0PSIke1QuUkVUUllfSUNPTn0iPlJldHJ5PC93Y20tYnV0dG9uPjwvd2NtLXBsYXRmb3JtLXNlbGVjdGlvbj48L3djbS1pbmZvLWZvb3Rlcj5gfX07bWUuc3R5bGVzPVtPLmdsb2JhbENzcyxobF07RG8oW0goKV0sbWUucHJvdG90eXBlLCJpc0Vycm9yIiwyKTttZT1EbyhbSSgid2NtLWRlc2t0b3AtY29ubmVjdGluZy12aWV3IildLG1lKTtjb25zdCBmbD1QYHdjbS1pbmZvLWZvb3RlcntmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlO3BhZGRpbmc6NXB4IDB9d2NtLXRleHR7dGV4dC1hbGlnbjpjZW50ZXJ9d2NtLWJ1dHRvbnttYXJnaW4tdG9wOjE1cHh9YDt2YXIgcGw9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixnbD0oZSx0LHIsbik9Pntmb3IodmFyIG89bj4xP3ZvaWQgMDpuP3BsKHQscik6dCxpPWUubGVuZ3RoLTEscztpPj0wO2ktLSkocz1lW2ldKSYmKG89cyhvKXx8byk7cmV0dXJuIG99O2xldCBjcj1jbGFzcyBleHRlbmRzIEV7b25JbnN0YWxsKGUpe2UmJngub3BlbkhyZWYoZSwiX2JsYW5rIil9cmVuZGVyKCl7Y29uc3R7bmFtZTplLGlkOnQsaW1hZ2VfaWQ6cixob21lcGFnZTpufT14LmdldFdhbGxldFJvdXRlckRhdGEoKTtyZXR1cm4gbWA8d2NtLW1vZGFsLWhlYWRlciB0aXRsZT0iJHtlfSI+PC93Y20tbW9kYWwtaGVhZGVyPjx3Y20tbW9kYWwtY29udGVudD48d2NtLWNvbm5lY3Rvci13YWl0aW5nIHdhbGxldElkPSIke3R9IiBpbWFnZUlkPSIke1Uocil9IiBsYWJlbD0iTm90IERldGVjdGVkIiAuaXNTdGFsZT0iJHshMH0iPjwvd2NtLWNvbm5lY3Rvci13YWl0aW5nPjwvd2NtLW1vZGFsLWNvbnRlbnQ+PHdjbS1pbmZvLWZvb3Rlcj48d2NtLXRleHQgY29sb3I9InNlY29uZGFyeSIgdmFyaWFudD0ic21hbGwtdGhpbiI+JHtgRG93bmxvYWQgJHtlfSB0byBjb250aW51ZS4gSWYgbXVsdGlwbGUgYnJvd3NlciBleHRlbnNpb25zIGFyZSBpbnN0YWxsZWQsIGRpc2FibGUgbm9uICR7ZX0gb25lcyBhbmQgdHJ5IGFnYWluYH08L3djbS10ZXh0Pjx3Y20tYnV0dG9uIC5vbkNsaWNrPSIkeygpPT50aGlzLm9uSW5zdGFsbChuKX0iIC5pY29uTGVmdD0iJHtULkFSUk9XX0RPV05fSUNPTn0iPkRvd25sb2FkPC93Y20tYnV0dG9uPjwvd2NtLWluZm8tZm9vdGVyPmB9fTtjci5zdHlsZXM9W08uZ2xvYmFsQ3NzLGZsXTtjcj1nbChbSSgid2NtLWluc3RhbGwtd2FsbGV0LXZpZXciKV0sY3IpO2NvbnN0IHdsPVBgd2NtLXdhbGxldC1pbWFnZXtib3JkZXItcmFkaXVzOnZhcigtLXdjbS13YWxsZXQtaWNvbi1sYXJnZS1ib3JkZXItcmFkaXVzKTt3aWR0aDo5NnB4O2hlaWdodDo5NnB4O21hcmdpbi1ib3R0b206MjBweH13Y20taW5mby1mb290ZXJ7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCV9LndjbS1hcHAtc3RvcmV7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LndjbS1hcHAtc3RvcmUgd2NtLXdhbGxldC1pbWFnZXttYXJnaW4tcmlnaHQ6MTBweDttYXJnaW4tYm90dG9tOjA7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtib3JkZXItcmFkaXVzOnZhcigtLXdjbS13YWxsZXQtaWNvbi1zbWFsbC1ib3JkZXItcmFkaXVzKX0ud2NtLWFwcC1zdG9yZSBkaXZ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ud2NtLWFwcC1zdG9yZSB3Y20tYnV0dG9ue21hcmdpbi1yaWdodDotMTBweH0ud2NtLW5vdGV7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjVweCAwfS53Y20tbm90ZSB3Y20tdGV4dHt0ZXh0LWFsaWduOmNlbnRlcn13Y20tcGxhdGZvcm0tc2VsZWN0aW9ue21hcmdpbi10b3A6LTE1cHh9LndjbS1ub3RlIHdjbS10ZXh0e21hcmdpbi10b3A6MTVweH0ud2NtLW5vdGUgd2NtLXRleHQgc3Bhbntjb2xvcjp2YXIoLS13Y20tYWNjZW50LWNvbG9yKX1gO3ZhciB2bD1PYmplY3QuZGVmaW5lUHJvcGVydHksYmw9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixMbz0oZSx0LHIsbik9Pntmb3IodmFyIG89bj4xP3ZvaWQgMDpuP2JsKHQscik6dCxpPWUubGVuZ3RoLTEscztpPj0wO2ktLSkocz1lW2ldKSYmKG89KG4/cyh0LHIsbyk6cyhvKSl8fG8pO3JldHVybiBuJiZvJiZ2bCh0LHIsbyksb307bGV0IGZlPWNsYXNzIGV4dGVuZHMgRXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5pc0Vycm9yPSExLHRoaXMub3Blbk1vYmlsZUFwcCgpfW9uRm9ybWF0QW5kUmVkaXJlY3QoZSx0PSExKXtjb25zdHttb2JpbGU6cixuYW1lOm59PXguZ2V0V2FsbGV0Um91dGVyRGF0YSgpLG89cj8ubmF0aXZlLGk9cj8udW5pdmVyc2FsLHM9eC5pc1RlbGVncmFtKCk/Il9ibGFuayI6Il9zZWxmIjtpZihlPXguaXNUZWxlZ3JhbSgpJiZ4LmlzQW5kcm9pZCgpP2VuY29kZVVSSUNvbXBvbmVudChlKTplLG8mJiF0KXtjb25zdCBsPXguZm9ybWF0TmF0aXZlVXJsKG8sZSxuKTt4Lm9wZW5IcmVmKGwscyl9ZWxzZSBpZihpKXtjb25zdCBsPXguZm9ybWF0VW5pdmVyc2FsVXJsKGksZSxuKTt4Lm9wZW5IcmVmKGwscyl9fW9wZW5Nb2JpbGVBcHAoZT0hMSl7Y29uc3R7d2FsbGV0Q29ubmVjdFVyaTp0fT1aLnN0YXRlLHI9eC5nZXRXYWxsZXRSb3V0ZXJEYXRhKCk7dCYmdGhpcy5vbkZvcm1hdEFuZFJlZGlyZWN0KHQsZSksJC5zZXRSZWNlbnRXYWxsZXQocil9b25Hb1RvQXBwU3RvcmUoZSl7ZSYmeC5vcGVuSHJlZihlLCJfYmxhbmsiKX1yZW5kZXIoKXtjb25zdHtuYW1lOmUsaWQ6dCxpbWFnZV9pZDpyLGFwcDpuLG1vYmlsZTpvfT14LmdldFdhbGxldFJvdXRlckRhdGEoKSx7aXNXZWI6aX09JC5nZXRDYWNoZWRSb3V0ZXJXYWxsZXRQbGF0Zm9ybXMoKSxzPW4/LmlvcyxsPW8/LnVuaXZlcnNhbDtyZXR1cm4gbWA8d2NtLW1vZGFsLWhlYWRlciB0aXRsZT0iJHtlfSI+PC93Y20tbW9kYWwtaGVhZGVyPjx3Y20tbW9kYWwtY29udGVudD48d2NtLWNvbm5lY3Rvci13YWl0aW5nIHdhbGxldElkPSIke3R9IiBpbWFnZUlkPSIke1Uocil9IiBsYWJlbD0iVGFwICdPcGVuJyB0byBjb250aW51ZeKApiIgLmlzRXJyb3I9IiR7dGhpcy5pc0Vycm9yfSI+PC93Y20tY29ubmVjdG9yLXdhaXRpbmc+PC93Y20tbW9kYWwtY29udGVudD48d2NtLWluZm8tZm9vdGVyIGNsYXNzPSJ3Y20tbm90ZSI+PHdjbS1wbGF0Zm9ybS1zZWxlY3Rpb24gLmlzV2ViPSIke2l9IiAuaXNSZXRyeT0iJHshMH0iPjx3Y20tYnV0dG9uIC5vbkNsaWNrPSIkeygpPT50aGlzLm9wZW5Nb2JpbGVBcHAoITEpfSIgLmljb25SaWdodD0iJHtULlJFVFJZX0lDT059Ij5SZXRyeTwvd2NtLWJ1dHRvbj48L3djbS1wbGF0Zm9ybS1zZWxlY3Rpb24+JHtsP21gPHdjbS10ZXh0IGNvbG9yPSJzZWNvbmRhcnkiIHZhcmlhbnQ9InNtYWxsLXRoaW4iPlN0aWxsIGRvZXNuJ3Qgd29yaz8gPHNwYW4gdGFiaW5kZXg9IjAiIEBjbGljaz0iJHsoKT0+dGhpcy5vcGVuTW9iaWxlQXBwKCEwKX0iPlRyeSB0aGlzIGFsdGVybmF0ZSBsaW5rPC9zcGFuPjwvd2NtLXRleHQ+YDpudWxsfTwvd2NtLWluZm8tZm9vdGVyPjx3Y20taW5mby1mb290ZXIgY2xhc3M9IndjbS1hcHAtc3RvcmUiPjxkaXY+PHdjbS13YWxsZXQtaW1hZ2Ugd2FsbGV0SWQ9IiR7dH0iIGltYWdlSWQ9IiR7VShyKX0iPjwvd2NtLXdhbGxldC1pbWFnZT48d2NtLXRleHQ+JHtgR2V0ICR7ZX1gfTwvd2NtLXRleHQ+PC9kaXY+PHdjbS1idXR0b24gLmljb25SaWdodD0iJHtULkFSUk9XX1JJR0hUX0lDT059IiAub25DbGljaz0iJHsoKT0+dGhpcy5vbkdvVG9BcHBTdG9yZShzKX0iIHZhcmlhbnQ9Imdob3N0Ij5BcHAgU3RvcmU8L3djbS1idXR0b24+PC93Y20taW5mby1mb290ZXI+YH19O2ZlLnN0eWxlcz1bTy5nbG9iYWxDc3Msd2xdO0xvKFtIKCldLGZlLnByb3RvdHlwZSwiaXNFcnJvciIsMik7ZmU9TG8oW0koIndjbS1tb2JpbGUtY29ubmVjdGluZy12aWV3IildLGZlKTtjb25zdCB5bD1QYHdjbS1pbmZvLWZvb3RlcntmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlO3BhZGRpbmc6NXB4IDB9d2NtLXRleHR7dGV4dC1hbGlnbjpjZW50ZXJ9YDt2YXIgeGw9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciwkbD0oZSx0LHIsbik9Pntmb3IodmFyIG89bj4xP3ZvaWQgMDpuP3hsKHQscik6dCxpPWUubGVuZ3RoLTEscztpPj0wO2ktLSkocz1lW2ldKSYmKG89cyhvKXx8byk7cmV0dXJuIG99O2xldCBkcj1jbGFzcyBleHRlbmRzIEV7cmVuZGVyKCl7Y29uc3R7bmFtZTplLGlkOnQsaW1hZ2VfaWQ6cn09eC5nZXRXYWxsZXRSb3V0ZXJEYXRhKCkse2lzRGVza3RvcDpuLGlzV2ViOm99PSQuZ2V0Q2FjaGVkUm91dGVyV2FsbGV0UGxhdGZvcm1zKCk7cmV0dXJuIG1gPHdjbS1tb2RhbC1oZWFkZXIgdGl0bGU9IiR7ZX0iIC5vbkFjdGlvbj0iJHskLmhhbmRsZVVyaUNvcHl9IiAuYWN0aW9uSWNvbj0iJHtULkNPUFlfSUNPTn0iPjwvd2NtLW1vZGFsLWhlYWRlcj48d2NtLW1vZGFsLWNvbnRlbnQ+PHdjbS13YWxsZXRjb25uZWN0LXFyIHdhbGxldElkPSIke3R9IiBpbWFnZUlkPSIke1Uocil9Ij48L3djbS13YWxsZXRjb25uZWN0LXFyPjwvd2NtLW1vZGFsLWNvbnRlbnQ+PHdjbS1pbmZvLWZvb3Rlcj48d2NtLXRleHQgY29sb3I9InNlY29uZGFyeSIgdmFyaWFudD0ic21hbGwtdGhpbiI+JHtgU2NhbiB0aGlzIFFSIENvZGUgd2l0aCB5b3VyIHBob25lJ3MgY2FtZXJhIG9yIGluc2lkZSAke2V9IGFwcGB9PC93Y20tdGV4dD48d2NtLXBsYXRmb3JtLXNlbGVjdGlvbiAuaXNEZXNrdG9wPSIke259IiAuaXNXZWI9IiR7b30iPjwvd2NtLXBsYXRmb3JtLXNlbGVjdGlvbj48L3djbS1pbmZvLWZvb3Rlcj5gfX07ZHIuc3R5bGVzPVtPLmdsb2JhbENzcyx5bF07ZHI9JGwoW0koIndjbS1tb2JpbGUtcXItY29ubmVjdGluZy12aWV3IildLGRyKTt2YXIgX2w9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixDbD0oZSx0LHIsbik9Pntmb3IodmFyIG89bj4xP3ZvaWQgMDpuP19sKHQscik6dCxpPWUubGVuZ3RoLTEscztpPj0wO2ktLSkocz1lW2ldKSYmKG89cyhvKXx8byk7cmV0dXJuIG99O2xldCBocj1jbGFzcyBleHRlbmRzIEV7cmVuZGVyKCl7cmV0dXJuIG1gPHdjbS1tb2RhbC1oZWFkZXIgdGl0bGU9IlNjYW4gdGhlIGNvZGUiIC5vbkFjdGlvbj0iJHskLmhhbmRsZVVyaUNvcHl9IiAuYWN0aW9uSWNvbj0iJHtULkNPUFlfSUNPTn0iPjwvd2NtLW1vZGFsLWhlYWRlcj48d2NtLW1vZGFsLWNvbnRlbnQ+PHdjbS13YWxsZXRjb25uZWN0LXFyPjwvd2NtLXdhbGxldGNvbm5lY3QtcXI+PC93Y20tbW9kYWwtY29udGVudD5gfX07aHIuc3R5bGVzPVtPLmdsb2JhbENzc107aHI9Q2woW0koIndjbS1xcmNvZGUtdmlldyIpXSxocik7Y29uc3QgRWw9UGB3Y20tbW9kYWwtY29udGVudHtoZWlnaHQ6Y2xhbXAoMjAwcHgsNjB2aCw2MDBweCk7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpzY3JvbGw7c2Nyb2xsYmFyLXdpZHRoOm5vbmU7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLXRvcDoxcHh9LndjbS1ncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDQsODBweCk7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luOi0xNXB4IC0xMHB4O3BhZGRpbmctdG9wOjIwcHh9d2NtLW1vZGFsLWNvbnRlbnQ6OmFmdGVyLHdjbS1tb2RhbC1jb250ZW50OjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjpmaXhlZDtwb2ludGVyLWV2ZW50czpub25lO3otaW5kZXg6MTt3aWR0aDoxMDAlO2hlaWdodDoyMHB4O29wYWNpdHk6MX13Y20tbW9kYWwtY29udGVudDo6YmVmb3Jle2JveC1zaGFkb3c6MCAtMXB4IDAgMCB2YXIoLS13Y20tY29sb3ItYmctMSk7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodmFyKC0td2NtLWNvbG9yLWJnLTEpLHJnYmEoMjU1LDI1NSwyNTUsMCkpfXdjbS1tb2RhbC1jb250ZW50OjphZnRlcntib3gtc2hhZG93OjAgMXB4IDAgMCB2YXIoLS13Y20tY29sb3ItYmctMSk7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQocmdiYSgyNTUsMjU1LDI1NSwwKSx2YXIoLS13Y20tY29sb3ItYmctMSkpO3RvcDpjYWxjKDEwMCUgLSAyMHB4KX13Y20tbW9kYWwtY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXJ7ZGlzcGxheTpub25lfS53Y20tcGxhY2Vob2xkZXItYmxvY2t7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoxMDBweDtvdmVyZmxvdzpoaWRkZW59LndjbS1lbXB0eSwud2NtLWxvYWRpbmd7ZGlzcGxheTpmbGV4fS53Y20tbG9hZGluZyAud2NtLXBsYWNlaG9sZGVyLWJsb2Nre2hlaWdodDoxMDAlfS53Y20tZW5kLXJlYWNoZWQgLndjbS1wbGFjZWhvbGRlci1ibG9ja3toZWlnaHQ6MDtvcGFjaXR5OjB9LndjbS1lbXB0eSAud2NtLXBsYWNlaG9sZGVyLWJsb2Nre29wYWNpdHk6MTtoZWlnaHQ6MTAwJX13Y20td2FsbGV0LWJ1dHRvbnttYXJnaW46Y2FsYygoMTAwJSAtIDYwcHgpLyAzKSAwfWA7dmFyIEFsPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxPbD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEp0PShlLHQscixuKT0+e2Zvcih2YXIgbz1uPjE/dm9pZCAwOm4/T2wodCxyKTp0LGk9ZS5sZW5ndGgtMSxzO2k+PTA7aS0tKShzPWVbaV0pJiYobz0obj9zKHQscixvKTpzKG8pKXx8byk7cmV0dXJuIG4mJm8mJkFsKHQscixvKSxvfTtjb25zdCBVZT00MDtsZXQgZ3Q9Y2xhc3MgZXh0ZW5kcyBFe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmxvYWRpbmc9IWouc3RhdGUud2FsbGV0cy5saXN0aW5ncy5sZW5ndGgsdGhpcy5maXJzdEZldGNoPSFqLnN0YXRlLndhbGxldHMubGlzdGluZ3MubGVuZ3RoLHRoaXMuc2VhcmNoPSIiLHRoaXMuZW5kUmVhY2hlZD0hMSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPXZvaWQgMCx0aGlzLnNlYXJjaERlYm91bmNlPSQuZGVib3VuY2UoZT0+e2UubGVuZ3RoPj0xPyh0aGlzLmZpcnN0RmV0Y2g9ITAsdGhpcy5lbmRSZWFjaGVkPSExLHRoaXMuc2VhcmNoPWUsai5yZXNldFNlYXJjaCgpLHRoaXMuZmV0Y2hXYWxsZXRzKCkpOnRoaXMuc2VhcmNoJiYodGhpcy5zZWFyY2g9IiIsdGhpcy5lbmRSZWFjaGVkPXRoaXMuaXNMYXN0UGFnZSgpLGoucmVzZXRTZWFyY2goKSl9KX1maXJzdFVwZGF0ZWQoKXt0aGlzLmNyZWF0ZVBhZ2luYXRpb25PYnNlcnZlcigpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dmFyIGU7KGU9dGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcik9PW51bGx8fGUuZGlzY29ubmVjdCgpfWdldCBwbGFjZWhvbGRlckVsKCl7cmV0dXJuICQuZ2V0U2hhZG93Um9vdEVsZW1lbnQodGhpcywiLndjbS1wbGFjZWhvbGRlci1ibG9jayIpfWNyZWF0ZVBhZ2luYXRpb25PYnNlcnZlcigpe3RoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChbZV0pPT57ZS5pc0ludGVyc2VjdGluZyYmISh0aGlzLnNlYXJjaCYmdGhpcy5maXJzdEZldGNoKSYmdGhpcy5mZXRjaFdhbGxldHMoKX0pLHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnBsYWNlaG9sZGVyRWwpfWlzTGFzdFBhZ2UoKXtjb25zdHt3YWxsZXRzOmUsc2VhcmNoOnR9PWouc3RhdGUse2xpc3RpbmdzOnIsdG90YWw6bn09dGhpcy5zZWFyY2g/dDplO3JldHVybiBuPD1VZXx8ci5sZW5ndGg+PW59YXN5bmMgZmV0Y2hXYWxsZXRzKCl7dmFyIGU7Y29uc3R7d2FsbGV0czp0LHNlYXJjaDpyfT1qLnN0YXRlLHtsaXN0aW5nczpuLHRvdGFsOm8scGFnZTppfT10aGlzLnNlYXJjaD9yOnQ7aWYoIXRoaXMuZW5kUmVhY2hlZCYmKHRoaXMuZmlyc3RGZXRjaHx8bz5VZSYmbi5sZW5ndGg8bykpdHJ5e3RoaXMubG9hZGluZz0hMDtjb25zdCBzPShlPVouc3RhdGUuY2hhaW5zKT09bnVsbD92b2lkIDA6ZS5qb2luKCIsIikse2xpc3RpbmdzOmx9PWF3YWl0IGouZ2V0V2FsbGV0cyh7cGFnZTp0aGlzLmZpcnN0RmV0Y2g/MTppKzEsZW50cmllczpVZSxzZWFyY2g6dGhpcy5zZWFyY2gsdmVyc2lvbjoyLGNoYWluczpzfSksYT1sLm1hcChjPT4kLmdldFdhbGxldEljb24oYykpO2F3YWl0IFByb21pc2UuYWxsKFsuLi5hLm1hcChhc3luYyBjPT4kLnByZWxvYWRJbWFnZShjKSkseC53YWl0KDMwMCldKSx0aGlzLmVuZFJlYWNoZWQ9dGhpcy5pc0xhc3RQYWdlKCl9Y2F0Y2gocyl7Y29uc29sZS5lcnJvcihzKSxYLm9wZW5Ub2FzdCgkLmdldEVycm9yTWVzc2FnZShzKSwiZXJyb3IiKX1maW5hbGx5e3RoaXMubG9hZGluZz0hMSx0aGlzLmZpcnN0RmV0Y2g9ITF9fW9uQ29ubmVjdChlKXt4LmlzQW5kcm9pZCgpPyQuaGFuZGxlTW9iaWxlTGlua2luZyhlKTokLmdvVG9Db25uZWN0aW5nVmlldyhlKX1vblNlYXJjaENoYW5nZShlKXtjb25zdHt2YWx1ZTp0fT1lLnRhcmdldDt0aGlzLnNlYXJjaERlYm91bmNlKHQpfXJlbmRlcigpe2NvbnN0e3dhbGxldHM6ZSxzZWFyY2g6dH09ai5zdGF0ZSx7bGlzdGluZ3M6cn09dGhpcy5zZWFyY2g/dDplLG49dGhpcy5sb2FkaW5nJiYhci5sZW5ndGgsbz10aGlzLnNlYXJjaC5sZW5ndGg+PTM7bGV0IGk9cnQubWFudWFsV2FsbGV0c1RlbXBsYXRlKCkscz1ydC5yZWNvbWVuZGVkV2FsbGV0c1RlbXBsYXRlKCEwKTtvJiYoaT1pLmZpbHRlcigoe3ZhbHVlczpjfSk9PiQuY2FzZVNhZmVJbmNsdWRlcyhjWzBdLHRoaXMuc2VhcmNoKSkscz1zLmZpbHRlcigoe3ZhbHVlczpjfSk9PiQuY2FzZVNhZmVJbmNsdWRlcyhjWzBdLHRoaXMuc2VhcmNoKSkpO2NvbnN0IGw9IXRoaXMubG9hZGluZyYmIXIubGVuZ3RoJiYhcy5sZW5ndGgsYT17IndjbS1sb2FkaW5nIjpuLCJ3Y20tZW5kLXJlYWNoZWQiOnRoaXMuZW5kUmVhY2hlZHx8IXRoaXMubG9hZGluZywid2NtLWVtcHR5IjpsfTtyZXR1cm4gbWA8d2NtLW1vZGFsLWhlYWRlcj48d2NtLXNlYXJjaC1pbnB1dCAub25DaGFuZ2U9IiR7dGhpcy5vblNlYXJjaENoYW5nZS5iaW5kKHRoaXMpfSI+PC93Y20tc2VhcmNoLWlucHV0Pjwvd2NtLW1vZGFsLWhlYWRlcj48d2NtLW1vZGFsLWNvbnRlbnQgY2xhc3M9IiR7RyhhKX0iPjxkaXYgY2xhc3M9IndjbS1ncmlkIj4ke24/bnVsbDppfSAke24/bnVsbDpzfSAke24/bnVsbDpyLm1hcChjPT5tYCR7Yz9tYDx3Y20td2FsbGV0LWJ1dHRvbiBpbWFnZUlkPSIke2MuaW1hZ2VfaWR9IiBuYW1lPSIke2MubmFtZX0iIHdhbGxldElkPSIke2MuaWR9IiAub25DbGljaz0iJHsoKT0+dGhpcy5vbkNvbm5lY3QoYyl9Ij48L3djbS13YWxsZXQtYnV0dG9uPmA6bnVsbH1gKX08L2Rpdj48ZGl2IGNsYXNzPSJ3Y20tcGxhY2Vob2xkZXItYmxvY2siPiR7bD9tYDx3Y20tdGV4dCB2YXJpYW50PSJiaWctYm9sZCIgY29sb3I9InNlY29uZGFyeSI+Tm8gcmVzdWx0cyBmb3VuZDwvd2NtLXRleHQ+YDpudWxsfSAkeyFsJiZ0aGlzLmxvYWRpbmc/bWA8d2NtLXNwaW5uZXI+PC93Y20tc3Bpbm5lcj5gOm51bGx9PC9kaXY+PC93Y20tbW9kYWwtY29udGVudD5gfX07Z3Quc3R5bGVzPVtPLmdsb2JhbENzcyxFbF07SnQoW0goKV0sZ3QucHJvdG90eXBlLCJsb2FkaW5nIiwyKTtKdChbSCgpXSxndC5wcm90b3R5cGUsImZpcnN0RmV0Y2giLDIpO0p0KFtIKCldLGd0LnByb3RvdHlwZSwic2VhcmNoIiwyKTtKdChbSCgpXSxndC5wcm90b3R5cGUsImVuZFJlYWNoZWQiLDIpO2d0PUp0KFtJKCJ3Y20td2FsbGV0LWV4cGxvcmVyLXZpZXciKV0sZ3QpO2NvbnN0IElsPVBgd2NtLWluZm8tZm9vdGVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7cGFkZGluZzo1cHggMH13Y20tdGV4dHt0ZXh0LWFsaWduOmNlbnRlcn1gO3ZhciBQbD1PYmplY3QuZGVmaW5lUHJvcGVydHksVGw9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixObz0oZSx0LHIsbik9Pntmb3IodmFyIG89bj4xP3ZvaWQgMDpuP1RsKHQscik6dCxpPWUubGVuZ3RoLTEscztpPj0wO2ktLSkocz1lW2ldKSYmKG89KG4/cyh0LHIsbyk6cyhvKSl8fG8pO3JldHVybiBuJiZvJiZQbCh0LHIsbyksb307bGV0IHBlPWNsYXNzIGV4dGVuZHMgRXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5pc0Vycm9yPSExLHRoaXMub3BlbldlYldhbGxldCgpfW9uRm9ybWF0QW5kUmVkaXJlY3QoZSl7Y29uc3R7ZGVza3RvcDp0LG5hbWU6cn09eC5nZXRXYWxsZXRSb3V0ZXJEYXRhKCksbj10Py51bml2ZXJzYWw7aWYobil7Y29uc3Qgbz14LmZvcm1hdFVuaXZlcnNhbFVybChuLGUscik7eC5vcGVuSHJlZihvLCJfYmxhbmsiKX19b3BlbldlYldhbGxldCgpe2NvbnN0e3dhbGxldENvbm5lY3RVcmk6ZX09Wi5zdGF0ZSx0PXguZ2V0V2FsbGV0Um91dGVyRGF0YSgpOyQuc2V0UmVjZW50V2FsbGV0KHQpLGUmJnRoaXMub25Gb3JtYXRBbmRSZWRpcmVjdChlKX1yZW5kZXIoKXtjb25zdHtuYW1lOmUsaWQ6dCxpbWFnZV9pZDpyfT14LmdldFdhbGxldFJvdXRlckRhdGEoKSx7aXNNb2JpbGU6bixpc0Rlc2t0b3A6b309JC5nZXRDYWNoZWRSb3V0ZXJXYWxsZXRQbGF0Zm9ybXMoKSxpPXguaXNNb2JpbGUoKTtyZXR1cm4gbWA8d2NtLW1vZGFsLWhlYWRlciB0aXRsZT0iJHtlfSIgLm9uQWN0aW9uPSIkeyQuaGFuZGxlVXJpQ29weX0iIC5hY3Rpb25JY29uPSIke1QuQ09QWV9JQ09OfSI+PC93Y20tbW9kYWwtaGVhZGVyPjx3Y20tbW9kYWwtY29udGVudD48d2NtLWNvbm5lY3Rvci13YWl0aW5nIHdhbGxldElkPSIke3R9IiBpbWFnZUlkPSIke1Uocil9IiBsYWJlbD0iJHtgQ29udGludWUgaW4gJHtlfS4uLmB9IiAuaXNFcnJvcj0iJHt0aGlzLmlzRXJyb3J9Ij48L3djbS1jb25uZWN0b3Itd2FpdGluZz48L3djbS1tb2RhbC1jb250ZW50Pjx3Y20taW5mby1mb290ZXI+PHdjbS10ZXh0IGNvbG9yPSJzZWNvbmRhcnkiIHZhcmlhbnQ9InNtYWxsLXRoaW4iPiR7YCR7ZX0gd2ViIGFwcCBoYXMgb3BlbmVkIGluIGEgbmV3IHRhYi4gR28gdGhlcmUsIGFjY2VwdCB0aGUgY29ubmVjdGlvbiwgYW5kIGNvbWUgYmFja2B9PC93Y20tdGV4dD48d2NtLXBsYXRmb3JtLXNlbGVjdGlvbiAuaXNNb2JpbGU9IiR7bn0iIC5pc0Rlc2t0b3A9IiR7aT8hMTpvfSIgLmlzUmV0cnk9IiR7ITB9Ij48d2NtLWJ1dHRvbiAub25DbGljaz0iJHt0aGlzLm9wZW5XZWJXYWxsZXQuYmluZCh0aGlzKX0iIC5pY29uUmlnaHQ9IiR7VC5SRVRSWV9JQ09OfSI+UmV0cnk8L3djbS1idXR0b24+PC93Y20tcGxhdGZvcm0tc2VsZWN0aW9uPjwvd2NtLWluZm8tZm9vdGVyPmB9fTtwZS5zdHlsZXM9W08uZ2xvYmFsQ3NzLElsXTtObyhbSCgpXSxwZS5wcm90b3R5cGUsImlzRXJyb3IiLDIpO3BlPU5vKFtJKCJ3Y20td2ViLWNvbm5lY3RpbmctdmlldyIpXSxwZSk7ZXhwb3J0e1p0IGFzIFdjbU1vZGFsLG50IGFzIFdjbVFyQ29kZX07Cg=="}},"time_used":14,"timings":{"blocked":0,"dns":0,"connect":0,"send":0,"wait":13,"receive":1,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"explorer-api.walletconnect.com/w3m/v1/getAllListings?projectId=bc97055fbc522cecb678f539aea6c54f\u0026sdkType=wcm\u0026sdkVersion=js-2.7.0\u0026recommendedIds=4622a2b2d6af1c9844944291e5e7351a6aa24cd7b23099efac1b2fd875da31a0%2Cd0ca99ff52b99abc48743dad0f7fc891e041be73574f7fac4afe5d4bb83845c8%2Cc57ca95b47569778a828d19178114f4db188b89b763c899ba0be274e97267d96%2Ce9ff15be73584489ca4a66f64d32c4537711797e30b6660dbcb71ea72a42b1f4%2C380efff687c7d2222d62378c588d45d2e0ff40a0fc4d8f778c4d6fbe58cec5ed%2Ca797aa35c0fadbfc1a53e7f675162ed5226968b44a19ee3d24385c64d1d3c393%2C0b415a746fb9ee99cce155c2ceca0c6f6061b1dbca2d722b3ba16381d0562150%2C20459438007b75f4f4acb98bf29aa3b800550309646d375da5fd4aac6c2a2c66%2Cef333840daf915aafdc4a004525502d6d49d77bd9c65e0642dbaefb3c2893bef%2C5d9f1395b3a8e848684848dc4147cbd05c8d54bb737eac78fe103901fe6b01a1%2C19177a98252e07ddfc9af2083ba8e07ef627cb6103467ffebb3f8f4205fd7927","fqdn":"explorer-api.walletconnect.com","domain":"walletconnect.com","tld":"com"},"ip":{"addr":"172.66.147.126","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"fetch","requested_by":"https://1nch-svap.com/","date":"2026-07-27T09:36:06.370Z","timestamp":1785144966370,"http_version":"HTTP/3","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"walletconnect.com","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Thu, 04 Jun 2026 04:16:36 GMT","end":"Wed, 02 Sep 2026 05:16:25 GMT"},"fingerprint":{"sha1":"DC:D0:F7:32:00:90:71:77:19:17:82:23:72:AF:55:89:00:14:EB:BA","sha256":"FE:88:1B:93:AC:1B:71:AB:36:AD:D8:5C:FB:D5:69:2B:08:AA:96:B8:CF:3B:C0:A4:52:8F:C1:32:3F:7D:8B:AD"}}},"request":{"raw":"GET /w3m/v1/getAllListings?projectId=bc97055fbc522cecb678f539aea6c54f\u0026sdkType=wcm\u0026sdkVersion=js-2.7.0\u0026recommendedIds=4622a2b2d6af1c9844944291e5e7351a6aa24cd7b23099efac1b2fd875da31a0%2Cd0ca99ff52b99abc48743dad0f7fc891e041be73574f7fac4afe5d4bb83845c8%2Cc57ca95b47569778a828d19178114f4db188b89b763c899ba0be274e97267d96%2Ce9ff15be73584489ca4a66f64d32c4537711797e30b6660dbcb71ea72a42b1f4%2C380efff687c7d2222d62378c588d45d2e0ff40a0fc4d8f778c4d6fbe58cec5ed%2Ca797aa35c0fadbfc1a53e7f675162ed5226968b44a19ee3d24385c64d1d3c393%2C0b415a746fb9ee99cce155c2ceca0c6f6061b1dbca2d722b3ba16381d0562150%2C20459438007b75f4f4acb98bf29aa3b800550309646d375da5fd4aac6c2a2c66%2Cef333840daf915aafdc4a004525502d6d49d77bd9c65e0642dbaefb3c2893bef%2C5d9f1395b3a8e848684848dc4147cbd05c8d54bb737eac78fe103901fe6b01a1%2C19177a98252e07ddfc9af2083ba8e07ef627cb6103467ffebb3f8f4205fd7927 HTTP/1.1\r\nHost: explorer-api.walletconnect.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nReferer: https://1nch-svap.com/\r\nOrigin: https://1nch-svap.com\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nSec-Fetch-Dest: empty\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: cross-site\r\nPriority: u=4\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/3 200 \r\nserver: cloudflare\r\nx-robots-tag: noindex\r\ndate: Mon, 27 Jul 2026 09:36:06 GMT\r\ncontent-type: application/json; charset=utf-8\r\ncontent-encoding: br\r\ncf-ray: a21aa867ee2e5694-OSL\r\ncf-cache-status: HIT\r\npriority: u=4,i=?0\r\naccess-control-allow-origin: *\r\nage: 5813\r\ncache-control: public, max-age=2592000, s-maxage=86400\r\nlast-modified: Mon, 27 Jul 2026 07:59:12 GMT\r\nalt-svc: h3=\":443\"; ma=86400\r\nserver-timing: cfExtPri\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}],"data":{"size":9547,"size_decoded":2955,"mime_type":"application/json; charset=utf-8","magic":"JSON text data","md5":"6c8d094857f1e919c840124c6b621d98","sha1":"45b6af268d95be81fff6f7a474599902b397ff88","sha256":"44721c35ce572522d76f84974d945f526b49d7b6e548fd37a2886eaae42c5e71","sha512":"f121c36ba3aa972f55f36cd64678e03785e97c5ab7309c1229cd7fc31c40d35e55879ed0989e251939610d0bea2cb46c7c96a2670d7342994e68e08821689bfc","ssdeep":"96:IxX+1A2teUB7S4959Jw52te72WFMVMrhIZkxWU2njls7/dVbqb+OhnsDyhnM/xlA:IVqfhS4fvTDnUYicreLxhgvh1","tlshash":"c01244eb8b848e6f1f2447c9711d355c99ee254bc6c8acd6f1c0cf6c84e9ab93312562","first_seen":"2026-07-27T07:59:48.817371Z","last_seen":"2026-07-27T09:36:42.936846Z","times_seen":2,"resource_available":false,"data":"eyJsaXN0aW5ncyI6eyJjNTdjYTk1YjQ3NTY5Nzc4YTgyOGQxOTE3ODExNGY0ZGIxODhiODliNzYzYzg5OWJhMGJlMjc0ZTk3MjY3ZDk2Ijp7ImlkIjoiYzU3Y2E5NWI0NzU2OTc3OGE4MjhkMTkxNzgxMTRmNGRiMTg4Yjg5Yjc2M2M4OTliYTBiZTI3NGU5NzI2N2Q5NiIsIm5hbWUiOiJNZXRhTWFzayIsImhvbWVwYWdlIjoiaHR0cHM6Ly9tZXRhbWFzay5pby8iLCJpbWFnZV9pZCI6ImUzMGQwOWZlLWMwZGQtNGI2MS04MWUyLWQ2ZGMwOWViOTcwMCIsIm9yZGVyIjoyMCwiYXBwIjp7ImJyb3dzZXIiOm51bGwsImlvcyI6Imh0dHBzOi8vYXBwcy5hcHBsZS5jb20vdXMvYXBwL21ldGFtYXNrL2lkMTQzODE0NDIwMiIsImFuZHJvaWQiOiJodHRwczovL3BsYXkuZ29vZ2xlLmNvbS9zdG9yZS9hcHBzL2RldGFpbHM/aWQ9aW8ubWV0YW1hc2siLCJtYWMiOm51bGwsIndpbmRvd3MiOm51bGwsImxpbnV4IjpudWxsLCJjaHJvbWUiOiJodHRwczovL2Nocm9tZS5nb29nbGUuY29tL3dlYnN0b3JlL2RldGFpbC9tZXRhbWFzay9ua2JpaGZiZW9nYWVhb2VobGVmbmtvZGJlZmdwZ2tubiIsImZpcmVmb3giOiJodHRwczovL2FkZG9ucy5tb3ppbGxhLm9yZy9lbi1VUy9maXJlZm94L2FkZG9uL2V0aGVyLW1ldGFtYXNrLyIsInNhZmFyaSI6bnVsbCwiZWRnZSI6Imh0dHBzOi8vbWljcm9zb2Z0ZWRnZS5taWNyb3NvZnQuY29tL2FkZG9ucy9kZXRhaWwvbWV0YW1hc2svZWpiYWxiYWtvcGxjaGxnaGVjZGFsbWVlZWFqbmltaG0/aGw9ZW4tVVMiLCJvcGVyYSI6Imh0dHBzOi8vYWRkb25zLm9wZXJhLmNvbS9lbi1nYi9leHRlbnNpb25zL2RldGFpbHMvbWV0YW1hc2stMTAvIn0sImluamVjdGVkIjpbeyJpbmplY3RlZF9pZCI6ImlzTWV0YU1hc2siLCJuYW1lc3BhY2UiOiJlaXAxNTUifV0sInJkbnMiOiJpby5tZXRhbWFzayIsIm1vYmlsZSI6eyJuYXRpdmUiOiJtZXRhbWFzazovLyIsInVuaXZlcnNhbCI6Imh0dHBzOi8vbWV0YW1hc2suYXBwLmxpbmsifSwiZGVza3RvcCI6eyJuYXRpdmUiOm51bGwsInVuaXZlcnNhbCI6bnVsbH19LCIwYjQxNWE3NDZmYjllZTk5Y2NlMTU1YzJjZWNhMGM2ZjYwNjFiMWRiY2EyZDcyMmIzYmExNjM4MWQwNTYyMTUwIjp7ImlkIjoiMGI0MTVhNzQ2ZmI5ZWU5OWNjZTE1NWMyY2VjYTBjNmY2MDYxYjFkYmNhMmQ3MjJiM2JhMTYzODFkMDU2MjE1MCIsIm5hbWUiOiJTYWZlUGFsIiwiaG9tZXBhZ2UiOiJodHRwczovL3NhZmVwYWwuY29tLyIsImltYWdlX2lkIjoiNGU3ZDZmNTItZjY2My00ZmMxLTRiODgtZWViZTdmYzcyODAwIiwib3JkZXIiOjMwLCJhcHAiOnsiYnJvd3NlciI6Imh0dHBzOi8vY2hyb21lLmdvb2dsZS5jb20vd2Vic3RvcmUvZGV0YWlsL3NhZmVwYWwtZXh0ZW5zaW9uLXdhbGxldC9sZ21wY3BnbHBuZ2RvYWxiZ2VvbGRlYWpmY2xuaGFmYSIsImlvcyI6Imh0dHBzOi8vYXBwcy5hcHBsZS5jb20vYXBwL3NhZmVwYWwtd2FsbGV0L2lkMTU0ODI5NzEzOSIsImFuZHJvaWQiOiJodHRwczovL3BsYXkuZ29vZ2xlLmNvbS9zdG9yZS9hcHBzL2RldGFpbHM/aWQ9aW8uc2FmZXBhbC53YWxsZXQiLCJtYWMiOm51bGwsIndpbmRvd3MiOm51bGwsImxpbnV4IjpudWxsLCJjaHJvbWUiOiJodHRwczovL2Nocm9tZS5nb29nbGUuY29tL3dlYnN0b3JlL2RldGFpbC9zYWZlcGFsLWV4dGVuc2lvbi13YWxsZXQvbGdtcGNwZ2xwbmdkb2FsYmdlb2xkZWFqZmNsbmhhZmEiLCJmaXJlZm94IjoiaHR0cHM6Ly9hZGRvbnMubW96aWxsYS5vcmcvZmlyZWZveC9hZGRvbi9zYWZlcGFsLWV4dGVuc2lvbi13YWxsZXQiLCJzYWZhcmkiOm51bGwsImVkZ2UiOiJodHRwczovL21pY3Jvc29mdGVkZ2UubWljcm9zb2Z0LmNvbS9hZGRvbnMvZGV0YWlsL3NhZmVwYWwlRTYlOEYlOTIlRTQlQkIlQjYlRTklOTIlQjElRTUlOEMlODUvYXBlbmtmYmJwbWhpaGVobWlobmRtbWNkYW5hY29sbmgiLCJvcGVyYSI6bnVsbH0sImluamVjdGVkIjpbeyJpbmplY3RlZF9pZCI6ImlzU2FmZVBhbCIsIm5hbWVzcGFjZSI6ImVpcDE1NSJ9XSwicmRucyI6bnVsbCwibW9iaWxlIjp7Im5hdGl2ZSI6InNhZmVwYWx3YWxsZXQ6Ly8iLCJ1bml2ZXJzYWwiOiJodHRwczovL2xpbmsuc2FmZXBhbC5pbyJ9LCJkZXNrdG9wIjp7Im5hdGl2ZSI6bnVsbCwidW5pdmVyc2FsIjoiaHR0cHM6Ly9jaHJvbWUuZ29vZ2xlLmNvbS93ZWJzdG9yZS9kZXRhaWwvc2FmZXBhbC1leHRlbnNpb24td2FsbGV0L2xnbXBjcGdscG5nZG9hbGJnZW9sZGVhamZjbG5oYWZhIn19LCI0NjIyYTJiMmQ2YWYxYzk4NDQ5NDQyOTFlNWU3MzUxYTZhYTI0Y2Q3YjIzMDk5ZWZhYzFiMmZkODc1ZGEzMWEwIjp7ImlkIjoiNDYyMmEyYjJkNmFmMWM5ODQ0OTQ0MjkxZTVlNzM1MWE2YWEyNGNkN2IyMzA5OWVmYWMxYjJmZDg3NWRhMzFhMCIsIm5hbWUiOiJUcnVzdCBXYWxsZXQiLCJob21lcGFnZSI6Imh0dHBzOi8vdHJ1c3R3YWxsZXQuY29tLyIsImltYWdlX2lkIjoiMzM4NmRkZTEtOGIyNC00OGM4LTRiODEtMTY5NzllMzQyMDAwIiwib3JkZXIiOjQwLCJhcHAiOnsiYnJvd3NlciI6IiIsImlvcyI6Imh0dHBzOi8vYXBwcy5hcHBsZS5jb20vYXBwL2FwcGxlLXN0b3JlL2lkMTI4ODMzOTQwOSIsImFuZHJvaWQiOiJodHRwczovL3BsYXkuZ29vZ2xlLmNvbS9zdG9yZS9hcHBzL2RldGFpbHM/aWQ9Y29tLndhbGxldC5jcnlwdG8udHJ1c3RhcHAiLCJtYWMiOiIiLCJ3aW5kb3dzIjoiIiwibGludXgiOiIiLCJjaHJvbWUiOiJodHRwczovL2Nocm9tZS5nb29nbGUuY29tL3dlYnN0b3JlL2RldGFpbC90cnVzdC13YWxsZXQvZWdqaWRqYnBnbGljaGRjb25kYmNiZG5iZWVwcGdkcGgiLCJmaXJlZm94IjoiIiwic2FmYXJpIjoiIiwiZWRnZSI6IiIsIm9wZXJhIjoiIn0sImluamVjdGVkIjpbeyJpbmplY3RlZF9pZCI6ImlzVHJ1c3QiLCJuYW1lc3BhY2UiOiJlaXAxNTUifSx7ImluamVjdGVkX2lkIjoiaXNUcnVzdFdhbGxldCIsIm5hbWVzcGFjZSI6ImVpcDE1NSJ9XSwicmRucyI6ImNvbS50cnVzdHdhbGxldC5hcHAiLCJtb2JpbGUiOnsibmF0aXZlIjoidHJ1c3Q6Ly8iLCJ1bml2ZXJzYWwiOiJodHRwczovL2xpbmsudHJ1c3R3YWxsZXQuY29tIn0sImRlc2t0b3AiOnsibmF0aXZlIjoiIiwidW5pdmVyc2FsIjoiIn19LCIyMDQ1OTQzODAwN2I3NWY0ZjRhY2I5OGJmMjlhYTNiODAwNTUwMzA5NjQ2ZDM3NWRhNWZkNGFhYzZjMmEyYzY2Ijp7ImlkIjoiMjA0NTk0MzgwMDdiNzVmNGY0YWNiOThiZjI5YWEzYjgwMDU1MDMwOTY0NmQzNzVkYTVmZDRhYWM2YzJhMmM2NiIsIm5hbWUiOiJUb2tlblBvY2tldCIsImhvbWVwYWdlIjoiaHR0cHM6Ly90b2tlbnBvY2tldC5wcm8vIiwiaW1hZ2VfaWQiOiI3YzJjZWU0ZS1hNWJkLTRlYmQtMjc3ZC1mNDk2YzY5ZmEwMDAiLCJvcmRlciI6NzAsImFwcCI6eyJicm93c2VyIjoiaHR0cHM6Ly9jaHJvbWUuZ29vZ2xlLmNvbS93ZWJzdG9yZS9kZXRhaWwvdG9rZW5wb2NrZXQvbWZnY2NqY2hpaGZra2luZGZwcG5hb29lY2dmbmVpaWkiLCJpb3MiOiJodHRwczovL2FwcHMuYXBwbGUuY29tL3VzL2FwcC90cC13YWxsZXQvaWQ2NDQ0NjI1NjIyP2w9ZW4iLCJhbmRyb2lkIjoiaHR0cHM6Ly9wbGF5Lmdvb2dsZS5jb20vc3RvcmUvYXBwcy9kZXRhaWxzP2lkPXZpcC5teXRva2VucG9ja2V0IiwibWFjIjpudWxsLCJ3aW5kb3dzIjpudWxsLCJsaW51eCI6bnVsbCwiY2hyb21lIjoiaHR0cHM6Ly9jaHJvbWUuZ29vZ2xlLmNvbS93ZWJzdG9yZS9kZXRhaWwvdG9rZW5wb2NrZXQvbWZnY2NqY2hpaGZra2luZGZwcG5hb29lY2dmbmVpaWkiLCJmaXJlZm94IjpudWxsLCJzYWZhcmkiOm51bGwsImVkZ2UiOm51bGwsIm9wZXJhIjpudWxsfSwiaW5qZWN0ZWQiOlt7ImluamVjdGVkX2lkIjoiaXNUb2tlblBvY2tldCIsIm5hbWVzcGFjZSI6ImVpcDE1NSJ9XSwicmRucyI6InByby50b2tlbnBvY2tldCIsIm1vYmlsZSI6eyJuYXRpdmUiOiJ0cG91dHNpZGU6Ly8iLCJ1bml2ZXJzYWwiOiIifSwiZGVza3RvcCI6eyJuYXRpdmUiOiIiLCJ1bml2ZXJzYWwiOiJodHRwczovL2Nocm9tZS5nb29nbGUuY29tL3dlYnN0b3JlL2RldGFpbC90b2tlbnBvY2tldC9tZmdjY2pjaGloZmtraW5kZnBwbmFvb2VjZ2ZuZWlpaSJ9fSwiMTkxNzdhOTgyNTJlMDdkZGZjOWFmMjA4M2JhOGUwN2VmNjI3Y2I2MTAzNDY3ZmZlYmIzZjhmNDIwNWZkNzkyNyI6eyJpZCI6IjE5MTc3YTk4MjUyZTA3ZGRmYzlhZjIwODNiYThlMDdlZjYyN2NiNjEwMzQ2N2ZmZWJiM2Y4ZjQyMDVmZDc5MjciLCJuYW1lIjoiTGVkZ2VyIFdhbGxldCIsImhvbWVwYWdlIjoiaHR0cHM6Ly93d3cubGVkZ2VyLmNvbS9sZWRnZXItd2FsbGV0IiwiaW1hZ2VfaWQiOiJjMjBlMWNlYy0wNWU4LTRhYzYtYTA4Ni03Y2UzNTUwOTI0MDAiLCJvcmRlciI6MTAwLCJhcHAiOnsiYnJvd3NlciI6IiIsImlvcyI6Imh0dHBzOi8vaXR1bmVzLmFwcGxlLmNvbS9hcHAvaWQxMzYxNjcxNzAwIiwiYW5kcm9pZCI6Imh0dHBzOi8vcGxheS5nb29nbGUuY29tL3N0b3JlL2FwcHMvZGV0YWlscz9pZD1jb20ubGVkZ2VyLmxpdmUiLCJtYWMiOiJodHRwczovL3d3dy5sZWRnZXIuY29tL2xlZGdlci1saXZlIiwid2luZG93cyI6Imh0dHBzOi8vd3d3LmxlZGdlci5jb20vbGVkZ2VyLWxpdmUiLCJsaW51eCI6Imh0dHBzOi8vd3d3LmxlZGdlci5jb20vbGVkZ2VyLWxpdmUiLCJjaHJvbWUiOiIiLCJmaXJlZm94IjoiIiwic2FmYXJpIjoiIiwiZWRnZSI6IiIsIm9wZXJhIjoiIn0sImluamVjdGVkIjpudWxsLCJyZG5zIjoiIiwibW9iaWxlIjp7Im5hdGl2ZSI6ImxlZGdlcmxpdmU6Ly8iLCJ1bml2ZXJzYWwiOiIifSwiZGVza3RvcCI6eyJuYXRpdmUiOiJsZWRnZXJsaXZlOi8vIiwidW5pdmVyc2FsIjoiIn19LCJlZjMzMzg0MGRhZjkxNWFhZmRjNGEwMDQ1MjU1MDJkNmQ0OWQ3N2JkOWM2NWUwNjQyZGJhZWZiM2MyODkzYmVmIjp7ImlkIjoiZWYzMzM4NDBkYWY5MTVhYWZkYzRhMDA0NTI1NTAyZDZkNDlkNzdiZDljNjVlMDY0MmRiYWVmYjNjMjg5M2JlZiIsIm5hbWUiOiJpbVRva2VuIiwiaG9tZXBhZ2UiOiJodHRwczovL3Rva2VuLmltLyIsImltYWdlX2lkIjoiNjczMzY2NzUtMGRhYS00ODliLTY4ODUtY2I5NTIzNGJjNDAwIiwib3JkZXIiOjIwMCwiYXBwIjp7ImJyb3dzZXIiOiJodHRwczovL3Rva2VuLmltLyIsImlvcyI6Imh0dHBzOi8vYXBwcy5hcHBsZS5jb20vdXMvYXBwL2ltdG9rZW4yL2lkMTM4NDc5ODk0MCIsImFuZHJvaWQiOiJodHRwczovL3BsYXkuZ29vZ2xlLmNvbS9zdG9yZS9hcHBzL2RldGFpbHM/aWQ9aW0udG9rZW4uYXBwIiwibWFjIjpudWxsLCJ3aW5kb3dzIjpudWxsLCJsaW51eCI6bnVsbCwiY2hyb21lIjpudWxsLCJmaXJlZm94IjpudWxsLCJzYWZhcmkiOm51bGwsImVkZ2UiOm51bGwsIm9wZXJhIjpudWxsfSwiaW5qZWN0ZWQiOm51bGwsInJkbnMiOm51bGwsIm1vYmlsZSI6eyJuYXRpdmUiOiJpbXRva2VudjI6Ly8iLCJ1bml2ZXJzYWwiOm51bGx9LCJkZXNrdG9wIjp7Im5hdGl2ZSI6bnVsbCwidW5pdmVyc2FsIjoiaHR0cHM6Ly90b2tlbi5pbS8ifX0sIjVkOWYxMzk1YjNhOGU4NDg2ODQ4NDhkYzQxNDdjYmQwNWM4ZDU0YmI3MzdlYWM3OGZlMTAzOTAxZmU2YjAxYTEiOnsiaWQiOiI1ZDlmMTM5NWIzYThlODQ4Njg0ODQ4ZGM0MTQ3Y2JkMDVjOGQ1NGJiNzM3ZWFjNzhmZTEwMzkwMWZlNmIwMWExIiwibmFtZSI6Ik9LWCBXYWxsZXQiLCJob21lcGFnZSI6Imh0dHBzOi8vd3d3Lm9reC5jb20vZG93bmxvYWQiLCJpbWFnZV9pZCI6ImM1NWRmODMxLTNjNTItNDlmYy1kMWQxLTk3YTkyNmRjMGMwMCIsIm9yZGVyIjoyNzAsImFwcCI6eyJicm93c2VyIjoiIiwiaW9zIjoiaHR0cHM6Ly9hcHBzLmFwcGxlLmNvbS91cy9hcHAvb2t4LXdhbGxldC1wb3J0YWwtdG8td2ViMy9pZDY3NDMzMDk0ODQiLCJhbmRyb2lkIjoiaHR0cHM6Ly9wbGF5Lmdvb2dsZS5jb20vc3RvcmUvYXBwcy9kZXRhaWxzP2lkPWNvbS5va3gud2FsbGV0IiwibWFjIjoiIiwid2luZG93cyI6IiIsImxpbnV4IjoiIiwiY2hyb21lIjoiaHR0cHM6Ly9jaHJvbWUuZ29vZ2xlLmNvbS93ZWJzdG9yZS9kZXRhaWwvb2t4LXdhbGxldC9tY29oaWxuY2JmYWhibWdkamticGVtY2NpaW9sZ2NnZSIsImZpcmVmb3giOiIiLCJzYWZhcmkiOiIiLCJlZGdlIjoiIiwib3BlcmEiOiIifSwiaW5qZWN0ZWQiOm51bGwsInJkbnMiOiJjb20ub2tleC53YWxsZXQiLCJtb2JpbGUiOnsibmF0aXZlIjoib2t4d2FsbGV0Oi8vbWFpbiIsInVuaXZlcnNhbCI6Imh0dHBzOi8vd2ViMy5va3guY29tL2Rvd25sb2FkIn0sImRlc2t0b3AiOnsibmF0aXZlIjoiIiwidW5pdmVyc2FsIjoiIn19LCJlOWZmMTViZTczNTg0NDg5Y2E0YTY2ZjY0ZDMyYzQ1Mzc3MTE3OTdlMzBiNjY2MGRiY2I3MWVhNzJhNDJiMWY0Ijp7ImlkIjoiZTlmZjE1YmU3MzU4NDQ4OWNhNGE2NmY2NGQzMmM0NTM3NzExNzk3ZTMwYjY2NjBkYmNiNzFlYTcyYTQyYjFmNCIsIm5hbWUiOiJFeG9kdXMiLCJob21lcGFnZSI6Imh0dHBzOi8vZXhvZHVzLmNvbS8iLCJpbWFnZV9pZCI6IjRjMTZjYWQ0LWNhYzktNDY0My02NzI2LWM2OTZlZmFmNTIwMCIsIm9yZGVyIjozMTAsImFwcCI6eyJicm93c2VyIjoiaHR0cHM6Ly9leG9kdXMuY29tL2Rvd25sb2FkLyIsImlvcyI6Imh0dHBzOi8vYXBwcy5hcHBsZS5jb20vdXMvYXBwL2V4b2R1cy1jcnlwdG8tYml0Y29pbi13YWxsZXQvaWQxNDE0Mzg0ODIwIiwiYW5kcm9pZCI6Imh0dHBzOi8vcGxheS5nb29nbGUuY29tL3N0b3JlL2FwcHMvZGV0YWlscz9pZD1leG9kdXNtb3ZlbWVudC5leG9kdXMmaGw9ZW4mZ2w9VVMiLCJtYWMiOm51bGwsIndpbmRvd3MiOm51bGwsImxpbnV4IjpudWxsLCJjaHJvbWUiOiJodHRwczovL2Nocm9tZS5nb29nbGUuY29tL3dlYnN0b3JlL2RldGFpbC9leG9kdXMtd2ViMy13YWxsZXQvYWhvbHBmZGlhbGpnamZob21paGtqYm1namlkbGNkbm8iLCJmaXJlZm94IjpudWxsLCJzYWZhcmkiOm51bGwsImVkZ2UiOm51bGwsIm9wZXJhIjpudWxsfSwiaW5qZWN0ZWQiOlt7ImluamVjdGVkX2lkIjoiaXNFeG9kdXMiLCJuYW1lc3BhY2UiOiJlaXAxNTUifV0sInJkbnMiOm51bGwsIm1vYmlsZSI6eyJuYXRpdmUiOiJleG9kdXM6Ly8iLCJ1bml2ZXJzYWwiOiJodHRwczovL2V4b2R1cy5jb20vbSJ9LCJkZXNrdG9wIjp7Im5hdGl2ZSI6bnVsbCwidW5pdmVyc2FsIjpudWxsfX0sImE3OTdhYTM1YzBmYWRiZmMxYTUzZTdmNjc1MTYyZWQ1MjI2OTY4YjQ0YTE5ZWUzZDI0Mzg1YzY0ZDFkM2MzOTMiOnsiaWQiOiJhNzk3YWEzNWMwZmFkYmZjMWE1M2U3ZjY3NTE2MmVkNTIyNjk2OGI0NGExOWVlM2QyNDM4NWM2NGQxZDNjMzkzIiwibmFtZSI6IlBoYW50b20iLCJob21lcGFnZSI6Imh0dHBzOi8vcGhhbnRvbS5hcHAvIiwiaW1hZ2VfaWQiOiJiNmVjN2I4MS1iYjRmLTQyN2QtZTI5MC03NjMxZTZlNTBkMDAiLCJvcmRlciI6NTYwLCJhcHAiOnsiYnJvd3NlciI6bnVsbCwiaW9zIjoiaHR0cHM6Ly9hcHBzLmFwcGxlLmNvbS91cy9hcHAvcGhhbnRvbS1jcnlwdG8td2FsbGV0L2lkMTU5ODQzMjk3NyIsImFuZHJvaWQiOiJodHRwczovL3BsYXkuZ29vZ2xlLmNvbS9zdG9yZS9hcHBzL2RldGFpbHM/aWQ9YXBwLnBoYW50b20maGw9ZW4iLCJtYWMiOm51bGwsIndpbmRvd3MiOm51bGwsImxpbnV4IjpudWxsLCJjaHJvbWUiOiJodHRwczovL2Nocm9tZS5nb29nbGUuY29tL3dlYnN0b3JlL2RldGFpbC9waGFudG9tL2JmbmFlbG1vbWVpbWhscG1nam5qb3BoaHBra29sanBhIiwiZmlyZWZveCI6Imh0dHBzOi8vYWRkb25zLm1vemlsbGEub3JnL2VuLVVTL2ZpcmVmb3gvYWRkb24vcGhhbnRvbS1hcHAvIiwic2FmYXJpIjpudWxsLCJlZGdlIjoiaHR0cHM6Ly9jaHJvbWUuZ29vZ2xlLmNvbS93ZWJzdG9yZS9kZXRhaWwvcGhhbnRvbS9iZm5hZWxtb21laW1obHBtZ2puam9waGhwa2tvbGpwYSIsIm9wZXJhIjpudWxsfSwiaW5qZWN0ZWQiOlt7ImluamVjdGVkX2lkIjoiaXNQaGFudG9tIiwibmFtZXNwYWNlIjoiZWlwMTU1In0seyJpbmplY3RlZF9pZCI6ImlzUGhhbnRvbSIsIm5hbWVzcGFjZSI6InNvbGFuYSJ9XSwicmRucyI6ImFwcC5waGFudG9tIiwibW9iaWxlIjp7Im5hdGl2ZSI6bnVsbCwidW5pdmVyc2FsIjpudWxsfSwiZGVza3RvcCI6eyJuYXRpdmUiOm51bGwsInVuaXZlcnNhbCI6bnVsbH19LCIzODBlZmZmNjg3YzdkMjIyMmQ2MjM3OGM1ODhkNDVkMmUwZmY0MGEwZmM0ZDhmNzc4YzRkNmZiZTU4Y2VjNWVkIjp7ImlkIjoiMzgwZWZmZjY4N2M3ZDIyMjJkNjIzNzhjNTg4ZDQ1ZDJlMGZmNDBhMGZjNGQ4Zjc3OGM0ZDZmYmU1OGNlYzVlZCIsIm5hbWUiOiJBdG9taWMgV2FsbGV0IiwiaG9tZXBhZ2UiOiJodHRwczovL2F0b21pY3dhbGxldC5pbyIsImltYWdlX2lkIjoiN2VjYTAzMTEtYWJmNS00OTAyLTQzZTktNTE4NTg0MDNlMjAwIiwib3JkZXIiOjExNjAsImFwcCI6eyJicm93c2VyIjoiaHR0cHM6Ly9hdG9taWN3YWxsZXQuaW8iLCJpb3MiOiJodHRwczovL2FwcHMuYXBwbGUuY29tL3VzL2FwcC9hdG9taWMtd2FsbGV0L2lkMTQ3ODI1NzgyNyIsImFuZHJvaWQiOiJodHRwczovL3BsYXkuZ29vZ2xlLmNvbS9zdG9yZS9hcHBzL2RldGFpbHM/aWQ9aW8uYXRvbWljd2FsbGV0IiwibWFjIjoiaHR0cHM6Ly9hdG9taWN3YWxsZXQuaW8vZG93bmxvYWRzIiwid2luZG93cyI6Imh0dHBzOi8vYXRvbWljd2FsbGV0LmlvL2Rvd25sb2FkcyIsImxpbnV4IjoiaHR0cHM6Ly9hdG9taWN3YWxsZXQuaW8vZG93bmxvYWRzIiwiY2hyb21lIjpudWxsLCJmaXJlZm94IjpudWxsLCJzYWZhcmkiOm51bGwsImVkZ2UiOm51bGwsIm9wZXJhIjpudWxsfSwiaW5qZWN0ZWQiOm51bGwsInJkbnMiOm51bGwsIm1vYmlsZSI6eyJuYXRpdmUiOiJhdG9taWN3YWxsZXQ6Ly8iLCJ1bml2ZXJzYWwiOm51bGx9LCJkZXNrdG9wIjp7Im5hdGl2ZSI6ImF0b21pY3dhbGxldDovLyIsInVuaXZlcnNhbCI6Imh0dHBzOi8vY2hyb21ld2Vic3RvcmUuZ29vZ2xlLmNvbS9kZXRhaWwvYXRvbWljLXdhbGxldC9nam5ja2drZm1nbWliYmtvZmljZGlkY2xqZWFhYWhlZyJ9fSwiZDBjYTk5ZmY1MmI5OWFiYzQ4NzQzZGFkMGY3ZmM4OTFlMDQxYmU3MzU3NGY3ZmFjNGFmZTVkNGJiODM4NDVjOCI6eyJpZCI6ImQwY2E5OWZmNTJiOTlhYmM0ODc0M2RhZDBmN2ZjODkxZTA0MWJlNzM1NzRmN2ZhYzRhZmU1ZDRiYjgzODQ1YzgiLCJuYW1lIjoiQ29pbmJhc2UgV2FsbGV0IiwiaG9tZXBhZ2UiOiJodHRwczovL3dhbGxldC5jb2luYmFzZS5jb20vIiwiaW1hZ2VfaWQiOiI1OTQ2MjdiZC02ZDM1LTQwNmEtOGQyYi0zMWUwYjVmMDNjMDAiLCJvcmRlciI6ODAwOTAsImFwcCI6eyJicm93c2VyIjoiIiwiaW9zIjoiaHR0cHM6Ly9hcHBzLmFwcGxlLmNvbS91cy9hcHAvYmFzZS1mb3JtZXJseS1jb2luYmFzZS13YWxsZXQvaWQxMjc4MzgzNDU1IiwiYW5kcm9pZCI6IiIsIm1hYyI6IiIsIndpbmRvd3MiOiIiLCJsaW51eCI6IiIsImNocm9tZSI6IiIsImZpcmVmb3giOiIiLCJzYWZhcmkiOiIiLCJlZGdlIjoiIiwib3BlcmEiOiIifSwiaW5qZWN0ZWQiOm51bGwsInJkbnMiOiJjb20uY29pbmJhc2Uud2FsbGV0IiwibW9iaWxlIjp7Im5hdGl2ZSI6IiIsInVuaXZlcnNhbCI6IiJ9LCJkZXNrdG9wIjp7Im5hdGl2ZSI6IiIsInVuaXZlcnNhbCI6IiJ9fX0sImNvdW50IjoxMSwidG90YWwiOjExfQ=="}},"time_used":92,"timings":{"blocked":0,"dns":4,"connect":8,"send":0,"wait":80,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"explorer-api.walletconnect.com/w3m/v1/getWalletImage/3386dde1-8b24-48c8-4b81-16979e342000?projectId=bc97055fbc522cecb678f539aea6c54f\u0026sdkType=wcm\u0026sdkVersion=js-2.7.0","fqdn":"explorer-api.walletconnect.com","domain":"walletconnect.com","tld":"com"},"ip":{"addr":"172.66.147.126","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"img","requested_by":"https://1nch-svap.com/","date":"2026-07-27T09:36:06.480Z","timestamp":1785144966480,"http_version":"HTTP/3","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"walletconnect.com","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Thu, 04 Jun 2026 04:16:36 GMT","end":"Wed, 02 Sep 2026 05:16:25 GMT"},"fingerprint":{"sha1":"DC:D0:F7:32:00:90:71:77:19:17:82:23:72:AF:55:89:00:14:EB:BA","sha256":"FE:88:1B:93:AC:1B:71:AB:36:AD:D8:5C:FB:D5:69:2B:08:AA:96:B8:CF:3B:C0:A4:52:8F:C1:32:3F:7D:8B:AD"}}},"request":{"raw":"GET /w3m/v1/getWalletImage/3386dde1-8b24-48c8-4b81-16979e342000?projectId=bc97055fbc522cecb678f539aea6c54f\u0026sdkType=wcm\u0026sdkVersion=js-2.7.0 HTTP/1.1\r\nHost: explorer-api.walletconnect.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nOrigin: https://1nch-svap.com\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://1nch-svap.com/\r\nSec-Fetch-Dest: image\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: cross-site\r\nPriority: u=5, i\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/3 200 \r\nserver-timing: cfExtPri\r\nx-robots-tag: noindex\r\ndate: Mon, 27 Jul 2026 09:36:06 GMT\r\ncontent-type: image/webp\r\npriority: u=5,i\r\ncf-ray: a21aa8688e335694-OSL\r\ncf-cache-status: HIT\r\naccept-ranges: bytes\r\naccess-control-allow-origin: *\r\nage: 5813\r\ncache-control: public, max-age=31536000, s-maxage=86400\r\netag: \"cfEA-Bw7H9k1gZltgcL-Suew9FfmDcyauXnchu_YTSDQ\"\r\nserver: cloudflare\r\nvary: accept\r\nx-wc-r2-status: HIT\r\ncf-images: internal=ok/- q=0 n=19+14 c=1+12 v=2026.3.1 l=1682 f=false c2=0\r\ncontent-security-policy: default-src 'none'; navigate-to 'none'; form-action 'none'; img-src data:; style-src 'unsafe-inline';\r\nx-content-type-options: nosniff\r\nalt-svc: h3=\":443\"; ma=86400\r\ncontent-length: 1682\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}],"data":{"size":1682,"size_decoded":2397,"mime_type":"image/webp","magic":"RIFF (little-endian) data, Web/P image","md5":"12fd7a0bbecec898caf25744ceae7549","sha1":"d4e4685c48987c850c780fd8e99de426fb5b19e8","sha256":"fdd5b72b8c65c37fd0db1c494691dc35794639a66ae8c11240def16c07d6e2ac","sha512":"08feddd7bab4b6b6135ba61fc3f12c7f4df27802d2357d1999ccf0dc17874f3d0a6b43368301389885f21a92273a41b420b729e408c2695d5becfbb8ddd5da8e","ssdeep":"","tlshash":"b8311a477584218d4283591bdbf086459953cc1b4b1c6123c11425b249a95731ee13dc","first_seen":"2025-02-27T06:37:34.817516Z","last_seen":"2026-08-11T17:08:38.029319Z","times_seen":1233,"resource_available":false,"data":"UklGRooGAABXRUJQVlA4WAoAAAAQAAAAdwAAdwAAQUxQSNwAAAABCsixbauK3sMz+sVQs3AC0ZcJYbi0WxJADO6uZ9qc/25ETABP9DiFWn+0Wj9o2kG94Gh1wWDqZbJ++NJNBs6K/axBfkfOqCzXMGn0Cf7qGqrwiBYXrPCQWcM1BxIrPEwoMvS3BiyWzLiQ8/S+YXqz4SkmStkFzRaq5hCVjFFN3Kf/n/7/B6qgkiEqsagsUTE8xUTxvmF6syqPKUOG/hCJJZlY4WFC7Rs8hgd1FY3wEP2CRaiOa7PEQaPVyZFvFN8xdW4g2Z08PnlJBXhB7RTqg9HqUdH26wXHo04EVlA4IIgFAADQIACdASp4AHgAPkkijkSipCEVCmzQQASEoAhktIPu/44fir8u9qftn39/bzm1Dr9g/5D8tP6r2xPFJ/vf5Y9tTzAfql/tP6r7uX+A/mfs3/xXqAf1n+7+ir7GPoAfsV6X37OfCR+3v7c+zN/5dZe8edhP+Nrwt8Hal/wGPQ/xltNmH+Pf6R/4/uFfrR1qP2A9m/9sTIyEVwJUJdf/+zf9vw8mp4RAfZin/XvGkKxC+NZrMLuxMuQWE1XLY8Dy82DASCF7Ec3tGd8DL0d/halLEzBt/ubiVS7rNldHk9RR50zuW8BOYxie/9jOF78VigHutZJCBY2xeScQiKAWlJumEmLkHT16xYEjoqRDXxgAAP79wIAvaGw4K8vBpOANP+q3/ATyoe7ttpCyAtlR7FnoBW3USf/mLmuMSv9HzBZ/xmPyM/gBspNKaKX3CUiwr67LPY0LpiowQ/58K8jZbxrvKQIPxPvUQ4I9c3/XxDIeY4++2bYyQRWtlwiudww1PuKpa4Cjf/94eehk4+Zlnx+Kvj1OLqg4IXAF/rfm4qBbMFZAzreaj1esn3H2tG7agmZTh+twrEAtYwxZkV4P1Z3tIyeJAyj+d+7Ycdqz9/yP4OKGF+ijg4f/wxw1vt3XQuFYXnP52/+J2BbsP+o2+bZxYAP8Xq10pVrKEyVB/A+SWUn1f/FpVHiLON/6vqKE6zqSOfSfXy3+exVzob27Bqer2zX2WgTMdYrWgk3PAvg6KscUXcFFuokUgJVT7xJGGjRPKfxUxYE+jFEnqbxEVMh9ZCIFy2P/FA4Co87FlEnXe5VG8UPq1w1Fw6iuup8lS6H3narlWJ0XO3sUFoK6CyL0xfgHuGSdeZx8cLRCjyhPDhI1ojiOPvQiOUIJWVrSzM21Dxtq7bH8on3zSkurjK9wEYQL1nzcmSu9AdYbz4eB4woNK+3MCLnfc5tAvYoejLOUte9ftavrj0pwxyzqXBj0CmH6CmgXdAgD/3v0meU4prEd3k326DgmBK0BSwgFqpFsmvdT7hJu71dzDJ0G5cdJvqG6f/gZM5hWNQzknLrJiyBDgg6JGxKdjOeUj1z1KyZXdXBKh8Gfg/i6ATParn1/eqMwOweyffMgNIUOy8TAubmps+vQL2h6hqHHQug1aTIamYXeo7C+Af0zsmEjR3es2spPPfiHeTc3x2XUZxH8js3O/jXIBfIlUxaIFnrp6ZxkSfl8OChNGAIE6d7GeYyvXd1ty97cgXjtM86lTDhogLWAX2CCf7Kkz0XtwzRkn65RPfwO2+n/1YBD5GKalJD0bg8Unl2V4x1g6krXbb9jmgYK8Bpa4KGC4fxoz5hav7/Tev/+XJqoNq/lyxPX9m/fojN28xaSfPyEMNxj+lJmQhhtuOlE272/KHgHvle2xJV5KdnrhRDrAbEj7fzTL2YOMV6kgWv3YidV9D+JsutbEtDcqYtRxV7IVmu+HSvWkTuYrH0wJZqX66VjTH96qfteSnQSZcinU8PQ1dIqJWBesqDnEPR8sjtETC2IP71dFLbkZmDhciLyVWawdkmL4Vi62/7uuxcOx/BVDxaXmJSZtVHJvPRg6BDnu+XmwEBBf/79rRk42TycANlRqqMqLEwbBK+C7479ZMw13N1ozwcMG3cwkHfRy3VHfOwY7Mtp+D3+J3P/xzqLazRTgOnPyeN9KKdKmYoWd0aiVAGGYlnlHbHJ829C+yx1TJFzwPfMju8uzFS2Yj5pGSulSzK9D88hx98g6+sJ71X2JC2vaXmLxgG0+ir1CAGgdI7MohoP2px2dxjuIAFCpBRWWE76W0Z0HZbr+jvgGijCuWKfFUxsOCfa0T1vtU1Lhc9Y5stBk1+Q9L9fRc4zbas/n4BcB3wKXVAADKAAAAA="}},"time_used":33,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":33,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"explorer-api.walletconnect.com/w3m/v1/getWalletImage/b6ec7b81-bb4f-427d-e290-7631e6e50d00?projectId=bc97055fbc522cecb678f539aea6c54f\u0026sdkType=wcm\u0026sdkVersion=js-2.7.0","fqdn":"explorer-api.walletconnect.com","domain":"walletconnect.com","tld":"com"},"ip":{"addr":"172.66.147.126","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"img","requested_by":"https://1nch-svap.com/","date":"2026-07-27T09:36:06.489Z","timestamp":1785144966489,"http_version":"HTTP/3","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"walletconnect.com","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Thu, 04 Jun 2026 04:16:36 GMT","end":"Wed, 02 Sep 2026 05:16:25 GMT"},"fingerprint":{"sha1":"DC:D0:F7:32:00:90:71:77:19:17:82:23:72:AF:55:89:00:14:EB:BA","sha256":"FE:88:1B:93:AC:1B:71:AB:36:AD:D8:5C:FB:D5:69:2B:08:AA:96:B8:CF:3B:C0:A4:52:8F:C1:32:3F:7D:8B:AD"}}},"request":{"raw":"GET /w3m/v1/getWalletImage/b6ec7b81-bb4f-427d-e290-7631e6e50d00?projectId=bc97055fbc522cecb678f539aea6c54f\u0026sdkType=wcm\u0026sdkVersion=js-2.7.0 HTTP/1.1\r\nHost: explorer-api.walletconnect.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nOrigin: https://1nch-svap.com\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://1nch-svap.com/\r\nSec-Fetch-Dest: image\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: cross-site\r\nPriority: u=5, i\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/3 200 \r\nserver-timing: cfExtPri\r\nx-robots-tag: noindex\r\ndate: Mon, 27 Jul 2026 09:36:06 GMT\r\ncontent-type: image/webp\r\npriority: u=5,i\r\ncf-ray: a21aa8689e395694-OSL\r\ncf-cache-status: HIT\r\naccept-ranges: bytes\r\naccess-control-allow-origin: *\r\nage: 5813\r\ncache-control: public, max-age=31536000, s-maxage=86400\r\netag: \"cfjbATJXN3FsYNlRCJn3yjDtC_fmDcyauXnchu_YTSDQ\"\r\nserver: cloudflare\r\nvary: Accept\r\nx-wc-r2-status: HIT\r\ncf-images: internal=ok/- q=0 n=1123+14 c=9+5 v=2024.12.5 l=1698 f=false\r\ncontent-security-policy: default-src 'none'; navigate-to 'none'; form-action 'none'\r\nx-content-type-options: nosniff\r\nalt-svc: h3=\":443\"; ma=86400\r\ncontent-length: 1698\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}],"data":{"size":1698,"size_decoded":2367,"mime_type":"image/webp","magic":"RIFF (little-endian) data, Web/P image","md5":"33f1b7ce5d586a5427c974ebbca6ad86","sha1":"a47f58b2b524b35acd3eb55b2b825c92d5a957d3","sha256":"d21f6b646c2d51d63ea16c26ea5aafd3968a2d5f17f2a8d53e38debd503cc354","sha512":"6449161aca4bcb4c33ee75bc679b7e8c61aea59a74e9fe01f764eb4c5c66dede74074962412b6f816d866f36d693400f64aea78cd4ba6e842dda793ae9ef1dd8","ssdeep":"","tlshash":"e9313def811b2ea9fe945abf5801f53c72254c684b92db6120f8cfc261a401c4540f49","first_seen":"2025-03-04T08:48:45.4811Z","last_seen":"2026-08-10T00:14:29.898851Z","times_seen":254,"resource_available":false,"data":"UklGRpoGAABXRUJQVlA4WAoAAAAQAAAAdwAAdwAAQUxQSGMCAAABkERt2/FG79i2bdu2ubJtrGxbq9q2bdtukroNR5m//Mro/M96ImICSNMdhy3cd/WlgXNwfJagTKL4o+Rq6urrmXYb6utrazjlb4W4TJAZF+io9/zS7nmD25MO91x+yyqpsprxIlceZ3p1YVed6LBRX8h4N/fbSq11OpHIeDrigHbWxzMeD16kuc7vGb/X3NPUmDDG+24DNLJAxACmT9LAChmDWDRDrQUyBlI0QY3RIgYztb9KncMYUCeV3jGod1RYz7D+m91Gp3gwzKuN4wzutlY6JOLxaWUjw1s3p4U+IPaMiHoKECW0J1rOEHOTiW5BYoeIrDB9pI5JmHxpWCWm3B4LqzHJx+5jmGuXXQHFDrxEddkA1RNnVD+CUVnEo3LLQhUkQBVdhipZgipLgSr/NyqhElUxh6qsBlVFHarKelRiXAy1FJbs/ykaUEnrUYlx1aKqrEFVwaEqVaIq/o1KoECVJ0aVWYYqSYAqKhNVYBwq10BU5o6ovumhevQc1YVLqPbuBlWzZB6HSTp6SDmmrG7t4zB5EpliekN0BdNBooWQ/o4n6paLKIqI6Buiuy1WAOKmtqAIPE7U6kE8q1qjYDS21OaiGizyCW3RPSxnSFU3JIak8sB0HKHdVKNJRSjShpC6M0QY0kaR+hNSEYQOIU32c+I/w26k4TtKfpOfIc3P9uIz2wmk1a0+dfzEOa0mrc95lsDxzd+ou1NJJ9tPPvTRN1deywc10iyvNwfHk073GLts/+UnPyzcgqKTs/KFxWUVlWKxVKZVqVhcWVFaLMjLTIoKdDX/9ujC3iWju5HGAQBWUDggEAQAADAYAJ0BKngAeAA+SSKLRCKioRaLtQwoBISghwAY+8ev4rXdOv8nrxR3jykfl0xAeoDzAP0j6QHmA85n0AegB/huoR9ADy6PY5/czCbrM/O2DK7RA0RUw3QvkSnR7QN/q8mZi4JbSKqQDngqN7NvaZqpHJJKwiuTcucSu8H5WzQeB9dnCe8YeQw8TGiSqooH2Hw3wOifnhBwdnfkJInpnIThJtMceiBqea5VUMyyfJqaA1nHP74FUIQA7zvyoMbnE+3q9ZLxaYNoKAAAzP//5J//+SD///Ivk7Kd4q8P9TrNKE6+BucO7NIkAVRd2Chc3AuOBPpzvW1///dCKEb0gh8shljMtua1Zj+UACpZo92qpXUid7z/wG/xSFIyUYk0p2VfLW1M+QyO0jtH+FPeeDxA2+Tl6NAnuvCQiMg7f2zXRCItVAzFnCTsFZKvntHBOE6GoJMtAvx205/TRP5T4zi5MjnH3QX5kGLvN+E0EElW7hDrxOPWxomA/88xLCNoJRfMPkxpGtmVpxVN91+HNYSNPjf5KIRJe4wi9jQ4NffKuvXfVuIg+FWg5YZE8gdQUsGArA64MOwMDEic3LogopaAXhUnxPg8SdRIUcU0lTSC0fGMyWe024ANjQu8NCU1EUN4YNVv8sh+hMDe1dtCN09H5bWOP3PDEUg19tu+Yz+S+u9wEwDNNSLaUtkPqOlYn7kx0sgI7Ekm0uZuAjotKL90HUnt9LqKd5FjRpT2HvbEMTCHE4vpmO54yy5VSEt1t5j4PWo08l2HF0k3/7nYFQYJoiHjdhVY4m+rXPKBHro133ZT4JjPb24JG1Aj4fkTq3eicc9FEmZkbQLUGrPCUXHHuVNQRCG2O2wde++afj/uxkbWyAfFE2gHDLG+/yXatwF8RQhwACsPS7kGg94AEsdQUpwS6ku5QZqe0DiuAK/hHtBkQr8WvzJVkUUyu7sBcV8ETUQZ8C9RmucmRDqQ+qW6zjSGzYpG9LHMShVIJ3O3dWhQOQ70ontnF2eQvJinZBOYlXHpd4kRc2icWzWC1iBeBqFjM73M9g3fSM1cJQQ2SlDshGWFDmvqpt04gOAvgasdIo/SvuiHR7+aNR9W+XZuu4ubJwPDCiyG0QxaXh4b4bl9MV52+wtUayin+YmPgapho7AXVTdA11Eiy7+AZQEh6+LfWlghNiehAed1OZy8d9vqDZ+pUSUMvKwqU3zyyced6apfX/Kkx36N7OfZTJ0odZylE8dMEHrOh54xrKi8fXtvRsHjh+dYUsCnHd7m6gOSyJZbJ6m+v220kGdZoeibll/thV//90FPcEdoy7fTXDUhTJZOsfMnb+39/8gABpOBfmYIsD42TCR9mbwg0t/QI71N1f4O3MyeMTMyOgAA"}},"time_used":24,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":24,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"explorer-api.walletconnect.com/w3m/v1/getWalletImage/4e7d6f52-f663-4fc1-4b88-eebe7fc72800?projectId=bc97055fbc522cecb678f539aea6c54f\u0026sdkType=wcm\u0026sdkVersion=js-2.7.0","fqdn":"explorer-api.walletconnect.com","domain":"walletconnect.com","tld":"com"},"ip":{"addr":"172.66.147.126","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"img","requested_by":"https://1nch-svap.com/","date":"2026-07-27T09:36:06.490Z","timestamp":1785144966490,"http_version":"HTTP/3","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"walletconnect.com","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Thu, 04 Jun 2026 04:16:36 GMT","end":"Wed, 02 Sep 2026 05:16:25 GMT"},"fingerprint":{"sha1":"DC:D0:F7:32:00:90:71:77:19:17:82:23:72:AF:55:89:00:14:EB:BA","sha256":"FE:88:1B:93:AC:1B:71:AB:36:AD:D8:5C:FB:D5:69:2B:08:AA:96:B8:CF:3B:C0:A4:52:8F:C1:32:3F:7D:8B:AD"}}},"request":{"raw":"GET /w3m/v1/getWalletImage/4e7d6f52-f663-4fc1-4b88-eebe7fc72800?projectId=bc97055fbc522cecb678f539aea6c54f\u0026sdkType=wcm\u0026sdkVersion=js-2.7.0 HTTP/1.1\r\nHost: explorer-api.walletconnect.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nOrigin: https://1nch-svap.com\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://1nch-svap.com/\r\nSec-Fetch-Dest: image\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: cross-site\r\nPriority: u=5, i\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/3 200 \r\nserver-timing: cfExtPri\r\nx-robots-tag: noindex\r\ndate: Mon, 27 Jul 2026 09:36:06 GMT\r\ncontent-type: image/webp\r\npriority: u=5,i\r\ncf-ray: a21aa8689e3a5694-OSL\r\ncf-cache-status: HIT\r\naccept-ranges: bytes\r\naccess-control-allow-origin: *\r\nage: 5813\r\ncache-control: public, max-age=31536000, s-maxage=86400\r\netag: \"cfwVowhypScApAcmoeznMTkZRzfmDcyauXnchu_YTSDQ\"\r\nserver: cloudflare\r\nvary: accept\r\nx-wc-r2-status: HIT\r\ncf-images: internal=ok/- q=0 n=8+0 c=0+1 v=2026.4.6 l=1638 f=false c2=0\r\ncontent-security-policy: default-src 'none'; navigate-to 'none'; form-action 'none'; img-src data:; style-src 'unsafe-inline';\r\nx-content-type-options: nosniff\r\nalt-svc: h3=\":443\"; ma=86400\r\ncontent-length: 1638\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}],"data":{"size":1638,"size_decoded":2350,"mime_type":"image/webp","magic":"RIFF (little-endian) data, Web/P image, VP8 encoding, 120x120, Scaling: [none]x[none], YUV color, decoders should clamp","md5":"0ccfb2325173637f538577b4cad23f43","sha1":"70060aadb98e9a950fb797ae0105460d184d7236","sha256":"b655ab554ceb7219eb8702f830dc7edd8492194e06eddcf2ccbea5fe180d2518","sha512":"ada7b30dcb5f784d6feb476033ccb6b435aa8c250bcf596b27372354594d7ffeeeb0d2dc9e5f2c322a4da07925dfee2c97239a9dcd0fc227145f8414e5794242","ssdeep":"","tlshash":"1e310a85ed51fd0e6fc02af8a8039d3500b5d802f51f05e9eea53891d7646f2107be98","first_seen":"2025-01-28T05:59:32.012212Z","last_seen":"2026-08-12T07:04:43.381906Z","times_seen":1513,"resource_available":false,"data":"UklGRl4GAABXRUJQVlA4IFIGAACQJACdASp4AHgAPkkgjUQioiEXS1SwKASEoA0qov/un4V7Xx3P8kOIK7c/uHiNf177l+015gH6If2P7bO5X5gP1u/4H+q9UDrAP6j/gOse9B39mfSi/bf4JP2u/7v/Y9oD/w6x2mLwnfI6ZW/nP6B7p+wHac/sW82ZI/zvHLpVpkv7F+cH6l/8nuC/rB/0PUa///t4/bj2Mv2qLraQEXlxfPDU3NJS6P/Z6hOQdFMJm7TWSSvl1G0IicytUa4WxNa2uKkq1qUTS8vDjr2KIN7OJCpcvo1XHpd9g8cdTkYNTGLaWB7V/o227tS/hBDlNE7fSnwhiaqry7mCIO2NDUKOb9hzl3bqX/XmabubImSrqQwYCSrX3B4AY9qUo4mxzqbq9Y5i0Lwc6+2vWAYAAP73DWW7PyA/5AZ+otYhLezsRThSqc1NR6y/7a7x6QdfhqBHzl9GwUZY3+tz275Ff8GrsdG1aH3WMi6SeVYT3c0QC2+yVcmz/ZjgOvb1+pgzPFQlOFWG+1yH/CQZuxAQngIzpaJVKq2/mktHRTHcxpx4W5lStJZNa1QwuWv5+Nl6hsjrd4bODj6l2L5h+I3wxshaO5HxNldfphN7iUNf5Cf5/NKEZhrwbCXvXg0nkXpqZVsxiqh3c12e6ctL8a1xdmuaz0UrBs/fNHZyIr7mDXaFRFbKrpV24OkLtm2+UROO8BE1VvWd17EDuPcNDo4hrrABeKlAMFfmILWUVWaIMmPvj8MK5wxy4btLFH60N3Ln9bJ4xbkhR2b7Bmn/RdcGjt1SoJocokTuU7pmPXnySVn/+cyzPBB/G8TiPGfd7dABJIJk0QBqnauYR6wFCYxSa+ru8AoLIJQnwq65CWGD8YEH5TqNgFr16gNUl1CcXXKu3xLJ5AbvYrZIbtdYj/LnWjrl+3ApPgFJQ3DtveJT2TufZUefyJEC4VMwW72vhK43lmWGRF0GI6OfaFCilpgo8xQ4Ln4p1FrrZ7reOOOteS2RlTdDDQ45NLQijRpBar7jSp1jdOyyNnTtDqeiAeS9peSIMLUCg82+vAo2UZPYZZw0qQs6GQ+1MGp1PpRK5fcTS8dAT/HKkiOkGCBiyppEQXJvn+hgCPMDm2tEMl/mz1kUpaHkdoqy7L9RddJ/aDzhlK5/2eVJKSWOww/ycp1ldHsGpFzcplY8SU3y30vnMF8uwoR/m0Nf6A5ujEEH+HD+qtoFC+zlOtJ1Sh4D1AlJ4eVWit+Rz5Whzh4WLV1YpJyj37vps/1ha1oyJRJrjXNcrVMkHkwbOSdMZUQrKqTX1+8dsBQ893tszERbejT/q5+2dtPuJsh89hcZ8gN6/PTo58yUcL3zSNypPzX9UqPEeamS5xqa3XhsoQsQJ/2lf50vt+I++aMWRmCgT9CFGCKcwlrHom/abmoaI+pZfgKTXjeXm31vBFK6gOCOS85lBcOL1m2+hAN2HVuN3zddA5kbf8pLJAAjvHHA2Cta1b8a8kNKbuoMQSU2HYqyqeMF5Q8FpM/5NucAj9+0PXgQJ6DFXGrw8U/M6UoWvL98sUZVO0V+ausJFwdSDTy82IpOyD0geSTVKKbsrzhKOv/U8/2fZLby+ga8NNRiptY8L2I+amlrY4BACFj1qmb105mP/CQIN/VYE43+V3+p8MaTK/rlYmjR1Xmp+AxGbtClm9pK0qvOgimt/r+SmGlqM++pD6Nyb/uDG6Hi79290zcx9XBqjXW01P9V/6ARNX25EkRcVDRYSgB1iaypLgTLCUp3Vpa05ucrtH5xe8FD0OzfeV5OivZEonovPfKid1I/MyAUwokevCvjiPvmjFj+THMJax6S3UX7T4yl/5Ns+3mVrmtFBHo6laiWKgY3KdcIudNlhljDHo9L4UojlxKtAyznxLU74uzUa5QnDsEbzRqfjAdyv2satXjAlY7kAuPhVdtyvX5H+3jPS3q9YPrG4sWUHmMmdtlMH6/Gqmc7M6+O/SP9v+STLkz7Z839IZA4JvQCFAJqf2D9eCf+0c/n70DyVgsWr5sOh01aoYYGqeB/zHH0PA6EQre90NUUhFlm2RD5kAIYtlVxE7L1dIDLGAFrWB0zxkdfPShqEskjT08b3hRN6cGLQfG72+wKbix4l0CFwUP3WekhItSxpF3L6piNYAAAAAAA"}},"time_used":29,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":29,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}}]}
