{"report_id":"4a9f30e9-96d0-4ca0-9772-0b493454a507","version":0,"status":"done","tags":[],"date":"2026-07-27T14:06:46Z","url":{"schema":"http","addr":"detran-go-emissao-gov.site","fqdn":"detran-go-emissao-gov.site","domain":"detran-go-emissao-gov.site","tld":"site"},"ip":{"addr":"172.67.152.179","port":0,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"final":{"url":{"schema":"https","addr":"detran-go-emissao-gov.site/dashboard/","fqdn":"detran-go-emissao-gov.site","domain":"detran-go-emissao-gov.site","tld":"site"},"title":"Welcome to XAMPP","dom":{"size":5762,"mime_type":"text/html; charset=utf-8","magic":"JavaScript source, Unicode text, UTF-8 text, with very long lines (513)","md5":"0b67eb804000147a9c31ab4a42a59513","sha1":"d6e51129e15f3094a07ac6852ffddb64a19faf45","sha256":"71285ea66726c125cb5e2bf0d3c7b5189173cd553f87a385f2a691432903f384","sha512":"3787edb7490fcc0b59cad207ef1328094bf5171a637df324cd21a2350ecc06aeb18d6a6e464dc1ff592102bb0efa15818945234e40219159fc1bbafb9a4ee371","ssdeep":"96:0+vhgcg2DC24mV31UrjKiLxCjZVsFOVo4C+wWy:NZgcgNlU3ira/VofWy","tlshash":"f0c1b52f58e8122b125382d1ba702b28fde2d15beb0a598471dc421d9fa3f83cd1f18d","dom_hash":"domhash39385fbc6609d5d0ae1f1a5783761270","first_seen":"","last_seen":"","times_seen":0,"resource_available":false,"data":null}},"submit":{"url":{"schema":"http","addr":"detran-go-emissao-gov.site","fqdn":"detran-go-emissao-gov.site","domain":"detran-go-emissao-gov.site","tld":"site"},"ip":{"addr":"172.67.152.179","port":0,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"tags":null,"meta":null},"settings":{"access":"public","device_type":"desktop","expires_at":"2027-08-31T14:06:46Z","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":"cdnjs.cloudflare.com","ip":{"addr":"104.17.25.14","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"domain_registered":"2009-02-17","domain_rank":1222,"first_seen":"2012-05-23T12:49:49Z","last_seen":"2026-07-26T22:43:30.214545Z","alert_count":0,"request_count":1,"received_data":20393,"sent_data":544,"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"]},{"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":"code.jquery.com","ip":{"addr":"151.101.193.155","port":443,"asn":54113,"as":"FASTLY","country":"United States","country_code":"US"},"domain_registered":"2005-12-10","domain_rank":4915,"first_seen":"2012-05-21T17:28:02Z","last_seen":"2026-07-27T00:05:00.24147Z","alert_count":0,"request_count":1,"received_data":93747,"sent_data":477,"comment":"","tags":null,"fingerprints":[{"name":"Varnish","description":"Varnish is a reverse caching proxy.","website":"https://www.varnish-cache.org","common_platform_enumeration":"cpe:2.3:a:varnish-software:varnish_cache:*:*:*:*:*:*:*:*","icon":"Varnish.svg","categories":["Caching"]},{"name":"Nginx","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]}]},{"fqdn":"detran-go-emissao-gov.site","ip":{"addr":"172.67.152.179","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"domain_registered":"2026-07-26","domain_rank":0,"first_seen":"2026-07-27T11:40:48.643352Z","last_seen":"2026-07-27T11:40:48.643352Z","alert_count":0,"request_count":10,"received_data":678901,"sent_data":5247,"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"]},{"name":"PHP:8.2.12","description":"PHP is a general-purpose scripting language used for web development.","website":"https://php.net","common_platform_enumeration":"cpe:2.3:a:php:php:*:*:*:*:*:*:*:*","icon":"PHP.svg","categories":["Programming languages"]},{"name":"Modernizr","description":"Modernizr is a JavaScript library that detects the features available in a user's browser.","website":"https://modernizr.com","common_platform_enumeration":"","icon":"Modernizr.svg","categories":["JavaScript libraries"]},{"name":"jQuery CDN","description":"jQuery CDN is a way to include jQuery in your website without actually downloading and keeping it your website's folder.","website":"https://code.jquery.com/","common_platform_enumeration":"","icon":"jQuery.svg","categories":["CDN"]},{"name":"jQuery:1.10.2","description":"jQuery is a JavaScript library which is a free, open-source software designed to simplify HTML DOM tree traversal and manipulation, as well as event handling, CSS animation, and Ajax.","website":"https://jquery.com","common_platform_enumeration":"cpe:2.3:a:jquery:jquery:*:*:*:*:*:*:*:*","icon":"jQuery.svg","categories":["JavaScript libraries"]},{"name":"ZURB Foundation","description":"Zurb Foundation is used to prototype in the browser. Allows rapid creation of websites or applications while leveraging mobile and responsive technology. The front end framework is the collection of HTML, CSS, and Javascript containing design patterns.","website":"https://foundation.zurb.com","common_platform_enumeration":"","icon":"ZURB Foundation.png","categories":["UI frameworks"]}]}],"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":"detran-go-emissao-gov.site/dashboard/javascripts/modernizr.js","fqdn":"detran-go-emissao-gov.site","domain":"detran-go-emissao-gov.site","tld":"site"},"ip":{"addr":"172.67.152.179","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"introduction_type":"scriptElement","is_inline":false,"md5":"4fae2a90728c528aa148c31466b7ed39","sha1":"6bfc3ff0b0c367ea21003e42175486ae0b2b2bfc","sha256":"654222debe8018b12f1993ceddff30dc163a7d5008d79869c399d6d167321f97","sha512":"1b385498219ad468a9eddb3d4d0747a91ca9f867c75f10715bfaa4be369781b6788489a71350d9509af7132aac92a2b411e817e7928c782fa41e77debc0ee277","ssdeep":"1536:FRCJJ/KpVsnpxvXmET56JYFE7qbe/7Y8fjWWy+4GrkfwuXxJ44ipW/VPRLq277ts:FS/FpzarzCT71Pts","tlshash":"4333a4097ce771264a13f0aa67ef7445fa26c42b2315d440f89e436c2f91f2442bdeea","size":51365,"data":"","first_seen":"2023-03-07T12:03:14Z","last_seen":"2026-07-27T14:06:48.022397Z","times_seen":778,"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"detran-go-emissao-gov.site/dashboard/","fqdn":"detran-go-emissao-gov.site","domain":"detran-go-emissao-gov.site","tld":"site"},"ip":{"addr":"172.67.152.179","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"introduction_type":"scriptElement","is_inline":true,"md5":"a52bf5d7708a54de400961ec5cb1cce2","sha1":"de3ae78d6bf41bd9a8f29ab4dd4ca95461ef0377","sha256":"5dfec6c0db7dae777a7b166c735da40f749675494154f2bcb62a64fc9f014d74","sha512":"2b5d372f6125296b945fca279461dadb9fc962973d20dea7288a903d89af4376174f10b863afff49c6435cc74d2565d9a4b929b21ba1c4040b3d4ab8fcc79cf0","ssdeep":"","tlshash":"1ae0260e24a330282be6243b4b290198308c55561a01c8107c4d90696fa0fa00aa8abc","size":328,"data":"","first_seen":"2023-03-07T12:03:14Z","last_seen":"2026-07-27T14:06:48.032012Z","times_seen":412,"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"code.jquery.com/jquery-1.10.2.min.js","fqdn":"code.jquery.com","domain":"jquery.com","tld":"com"},"ip":{"addr":"151.101.193.155","port":443,"asn":54113,"as":"FASTLY","country":"United States","country_code":"US"},"introduction_type":"scriptElement","is_inline":false,"md5":"628072e7212db1e8cdacb22b21752cda","sha1":"0511abe9863c2ea7084efa7e24d1d86c5b3974f1","sha256":"0ba081f546084bd5097aa8a73c75931d5aa1fc4d6e846e53c21f98e6a1509988","sha512":"3aa68568ff2592ead412a0c7f5c39abc37ac562f00b7c16af07cd5eff881aadce77ec71040b36c0ad9c2d2aa4edd7744fa72b0f44cb8b485d4f283b1b49c2141","ssdeep":"1536:L4mCgi8DyCuXXFiJ+L0kJQsJVPEKLQRZdC/RlfDknv+p0WzH/IoSZ7qABZnu0sFv:LGsKXlI2p0WPSbDrstfam","tlshash":"3f93f8ddb2d1b06257bb21bd006f540ff236195e280d8850f129e8eabc74a4d9277fad","size":93107,"data":"","first_seen":"2023-03-07T01:02:00Z","last_seen":"2026-07-27T23:14:12.930038Z","times_seen":16830,"alerts":{"ids":null,"analyzer":null,"urlquery":null}}],"eval":null,"write":null,"console":null},"http":[{"url":{"schema":"https","addr":"detran-go-emissao-gov.site/dashboard/stylesheets/normalize.css","fqdn":"detran-go-emissao-gov.site","domain":"detran-go-emissao-gov.site","tld":"site"},"ip":{"addr":"172.67.152.179","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"stylesheet","requested_by":"https://detran-go-emissao-gov.site/dashboard/","date":"2026-07-27T14:06:09.560Z","timestamp":1785161169560,"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":"detran-go-emissao-gov.site","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Sun, 26 Jul 2026 14:27:30 GMT","end":"Sat, 24 Oct 2026 15:26:12 GMT"},"fingerprint":{"sha1":"33:BD:B0:00:D4:4F:09:5C:59:02:3B:55:1C:94:52:31:7F:BD:F6:AE","sha256":"F4:70:53:78:85:5E:A4:5C:81:1D:85:52:5D:63:D9:95:2D:9A:2E:D2:93:00:F8:AC:EA:E4:AC:0B:59:BC:2A:A0"}}},"request":{"raw":"GET /dashboard/stylesheets/normalize.css HTTP/1.1\r\nHost: detran-go-emissao-gov.site\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://detran-go-emissao-gov.site/dashboard/\r\nSec-Fetch-Dest: style\r\nSec-Fetch-Mode: no-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\ndate: Mon, 27 Jul 2026 14:06:10 GMT\r\nserver: cloudflare\r\nlast-modified: Tue, 22 Nov 2022 15:37:06 GMT\r\nreport-to: {\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=mlLVnuxqUjWYHKAOUqD%2B8UVggcbrIyyWv1kb%2BC9d67BLVRNs%2FRg0nPGJX2dO27o0gte2MbuVkyiNLSKjAR9zgi3vtU0HmjwxQhmnEQFpAQAJ8YNnY6Bu47UxM1LYoVjJ5QiSq%2FkUPXFkR0Lcxw%3D%3D\"}]}\r\nnel: {\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}\r\npriority: u=2,i=?0\r\ncontent-encoding: zstd\r\netag: W/\"1adc-5ee10f1baec80\"\r\ncontent-type: text/css\r\ncache-control: max-age=14400\r\ncf-cache-status: REVALIDATED\r\ncf-ray: a21c33fdcdc57131-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":6876,"size_decoded":2840,"mime_type":"text/css","magic":"ASCII text","md5":"ed3146b9b1ec5eecb132a21916d0afe5","sha1":"ef7858efe109963a03f52f2fa0b592a707a8a90a","sha256":"ca7c3f9c26df461561ea2e4ac7101b122f99211810ca1fb6f9acd17d48421223","sha512":"ce20569081e341c80fdae3e451f0b0579c93392a11ba310d5fe02ec2450bdf3163bffc389a6f2aa8579b8b88257f148ce420a720ad81e1fc2c63d591bc1f81e0","ssdeep":"96:rbPT/txAbGLRvRuDTIO8hjpEMyg4bdR+XCo+1P2o35WL0Sl:rDTlib+FYvBUFEXgTCoE2o35nQ","tlshash":"0fe1721a1760be42927a4a713bef82a53309016f535c78feb49a434c8f45799c2f6fd8","first_seen":"2023-04-05T13:45:37Z","last_seen":"2026-07-27T14:06:48.018706Z","times_seen":765,"resource_available":false,"data":"LyohIG5vcm1hbGl6ZS5jc3MgdjIuMC4xIHwgTUlUIExpY2Vuc2UgfCBnaXQuaW8vbm9ybWFsaXplICovCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBIVE1MNSBkaXNwbGF5IGRlZmluaXRpb25zCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgovKgogKiBDb3JyZWN0cyBgYmxvY2tgIGRpc3BsYXkgbm90IGRlZmluZWQgaW4gSUUgOC85LgogKi8KCgphcnRpY2xlLAphc2lkZSwKZGV0YWlscywKZmlnY2FwdGlvbiwKZmlndXJlLApmb290ZXIsCmhlYWRlciwKaGdyb3VwLApuYXYsCnNlY3Rpb24sCnN1bW1hcnkgewogICAgZGlzcGxheTogYmxvY2s7Cn0KCi8qCiAqIENvcnJlY3RzIGBpbmxpbmUtYmxvY2tgIGRpc3BsYXkgbm90IGRlZmluZWQgaW4gSUUgOC85LgogKi8KCmF1ZGlvLApjYW52YXMsCnZpZGVvIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLyoKICogUHJldmVudHMgbW9kZXJuIGJyb3dzZXJzIGZyb20gZGlzcGxheWluZyBgYXVkaW9gIHdpdGhvdXQgY29udHJvbHMuCiAqIFJlbW92ZSBleGNlc3MgaGVpZ2h0IGluIGlPUyA1IGRldmljZXMuCiAqLwoKYXVkaW86bm90KFtjb250cm9sc10pIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBoZWlnaHQ6IDA7Cn0KCi8qCiAqIEFkZHJlc3NlcyBzdHlsaW5nIGZvciBgaGlkZGVuYCBhdHRyaWJ1dGUgbm90IHByZXNlbnQgaW4gSUUgOC85LgogKi8KCltoaWRkZW5dIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEJhc2UKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCi8qCiAqIDEuIFNldHMgZGVmYXVsdCBmb250IGZhbWlseSB0byBzYW5zLXNlcmlmLgogKiAyLiBQcmV2ZW50cyBpT1MgdGV4dCBzaXplIGFkanVzdCBhZnRlciBvcmllbnRhdGlvbiBjaGFuZ2UsIHdpdGhvdXQgZGlzYWJsaW5nCiAqICAgIHVzZXIgem9vbS4KICovCgpodG1sIHsKICAgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyAvKiAxICovCiAgICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC8qIDIgKi8KICAgIC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAvKiAyICovCn0KCi8qCiAqIFJlbW92ZXMgZGVmYXVsdCBtYXJnaW4uCiAqLwoKYm9keSB7CiAgICBtYXJnaW46IDA7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIExpbmtzCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgovKgogKiBBZGRyZXNzZXMgYG91dGxpbmVgIGluY29uc2lzdGVuY3kgYmV0d2VlbiBDaHJvbWUgYW5kIG90aGVyIGJyb3dzZXJzLgogKi8KCmE6Zm9jdXMgewogICAgb3V0bGluZTogdGhpbiBkb3R0ZWQ7Cn0KCi8qCiAqIEltcHJvdmVzIHJlYWRhYmlsaXR5IHdoZW4gZm9jdXNlZCBhbmQgYWxzbyBtb3VzZSBob3ZlcmVkIGluIGFsbCBicm93c2Vycy4KICovCgphOmFjdGl2ZSwKYTpob3ZlciB7CiAgICBvdXRsaW5lOiAwOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBUeXBvZ3JhcGh5CiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgovKgogKiBBZGRyZXNzZXMgYGgxYCBmb250IHNpemVzIHdpdGhpbiBgc2VjdGlvbmAgYW5kIGBhcnRpY2xlYCBpbiBGaXJlZm94IDQrLAogKiBTYWZhcmkgNSwgYW5kIENocm9tZS4KICovCgpoMSB7CiAgICBmb250LXNpemU6IDJlbTsKfQoKLyoKICogQWRkcmVzc2VzIHN0eWxpbmcgbm90IHByZXNlbnQgaW4gSUUgOC85LCBTYWZhcmkgNSwgYW5kIENocm9tZS4KICovCgphYmJyW3RpdGxlXSB7CiAgICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkOwp9CgovKgogKiBBZGRyZXNzZXMgc3R5bGUgc2V0IHRvIGBib2xkZXJgIGluIEZpcmVmb3ggNCssIFNhZmFyaSA1LCBhbmQgQ2hyb21lLgogKi8KCmIsCnN0cm9uZyB7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLyoKICogQWRkcmVzc2VzIHN0eWxpbmcgbm90IHByZXNlbnQgaW4gU2FmYXJpIDUgYW5kIENocm9tZS4KICovCgpkZm4gewogICAgZm9udC1zdHlsZTogaXRhbGljOwp9CgovKgogKiBBZGRyZXNzZXMgc3R5bGluZyBub3QgcHJlc2VudCBpbiBJRSA4LzkuCiAqLwoKbWFyayB7CiAgICBiYWNrZ3JvdW5kOiAjZmYwOwogICAgY29sb3I6ICMwMDA7Cn0KCgovKgogKiBDb3JyZWN0cyBmb250IGZhbWlseSBzZXQgb2RkbHkgaW4gU2FmYXJpIDUgYW5kIENocm9tZS4KICovCgpjb2RlLAprYmQsCnByZSwKc2FtcCB7CiAgICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBzZXJpZjsKICAgIGZvbnQtc2l6ZTogMWVtOwp9CgovKgogKiBJbXByb3ZlcyByZWFkYWJpbGl0eSBvZiBwcmUtZm9ybWF0dGVkIHRleHQgaW4gYWxsIGJyb3dzZXJzLgogKi8KCnByZSB7CiAgICB3aGl0ZS1zcGFjZTogcHJlOwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgd29yZC13cmFwOiBicmVhay13b3JkOwp9CgovKgogKiBTZXRzIGNvbnNpc3RlbnQgcXVvdGUgdHlwZXMuCiAqLwoKcSB7CiAgICBxdW90ZXM6ICJcMjAxQyIgIlwyMDFEIiAiXDIwMTgiICJcMjAxOSI7Cn0KCi8qCiAqIEFkZHJlc3NlcyBpbmNvbnNpc3RlbnQgYW5kIHZhcmlhYmxlIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuCiAqLwoKc21hbGwgewogICAgZm9udC1zaXplOiA4MCU7Cn0KCi8qCiAqIFByZXZlbnRzIGBzdWJgIGFuZCBgc3VwYCBhZmZlY3RpbmcgYGxpbmUtaGVpZ2h0YCBpbiBhbGwgYnJvd3NlcnMuCiAqLwoKc3ViLApzdXAgewogICAgZm9udC1zaXplOiA3NSU7CiAgICBsaW5lLWhlaWdodDogMDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKfQoKc3VwIHsKICAgIHRvcDogLTAuNWVtOwp9CgpzdWIgewogICAgYm90dG9tOiAtMC4yNWVtOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBFbWJlZGRlZCBjb250ZW50CiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgovKgogKiBSZW1vdmVzIGJvcmRlciB3aGVuIGluc2lkZSBgYWAgZWxlbWVudCBpbiBJRSA4LzkuCiAqLwoKaW1nIHsKICAgIGJvcmRlcjogMDsKfQoKLyoKICogQ29ycmVjdHMgb3ZlcmZsb3cgZGlzcGxheWVkIG9kZGx5IGluIElFIDkuCiAqLwoKc3ZnOm5vdCg6cm9vdCkgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgRmlndXJlcwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKLyoKICogQWRkcmVzc2VzIG1hcmdpbiBub3QgcHJlc2VudCBpbiBJRSA4LzkgYW5kIFNhZmFyaSA1LgogKi8KCmZpZ3VyZSB7CiAgICBtYXJnaW46IDA7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEZvcm1zCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgovKgogKiBEZWZpbmUgY29uc2lzdGVudCBib3JkZXIsIG1hcmdpbiwgYW5kIHBhZGRpbmcuCiAqLwoKZmllbGRzZXQgewogICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDsKICAgIG1hcmdpbjogMCAycHg7CiAgICBwYWRkaW5nOiAwLjM1ZW0gMC42MjVlbSAwLjc1ZW07Cn0KCi8qCiAqIDEuIENvcnJlY3RzIGNvbG9yIG5vdCBiZWluZyBpbmhlcml0ZWQgaW4gSUUgOC85LgogKiAyLiBSZW1vdmUgcGFkZGluZyBzbyBwZW9wbGUgYXJlbid0IGNhdWdodCBvdXQgaWYgdGhleSB6ZXJvIG91dCBmaWVsZHNldHMuCiAqLwoKbGVnZW5kIHsKICAgIGJvcmRlcjogMDsgLyogMSAqLwogICAgcGFkZGluZzogMDsgLyogMiAqLwp9CgovKgogKiAxLiBDb3JyZWN0cyBmb250IGZhbWlseSBub3QgYmVpbmcgaW5oZXJpdGVkIGluIGFsbCBicm93c2Vycy4KICogMi4gQ29ycmVjdHMgZm9udCBzaXplIG5vdCBiZWluZyBpbmhlcml0ZWQgaW4gYWxsIGJyb3dzZXJzLgogKiAzLiBBZGRyZXNzZXMgbWFyZ2lucyBzZXQgZGlmZmVyZW50bHkgaW4gRmlyZWZveCA0KywgU2FmYXJpIDUsIGFuZCBDaHJvbWUKICovCgpidXR0b24sCmlucHV0LApzZWxlY3QsCnRleHRhcmVhIHsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OyAvKiAxICovCiAgICBmb250LXNpemU6IDEwMCU7IC8qIDIgKi8KICAgIG1hcmdpbjogMDsgLyogMyAqLwp9CgovKgogKiBBZGRyZXNzZXMgRmlyZWZveCA0KyBzZXR0aW5nIGBsaW5lLWhlaWdodGAgb24gYGlucHV0YCB1c2luZyBgIWltcG9ydGFudGAgaW4KICogdGhlIFVBIHN0eWxlc2hlZXQuCiAqLwoKYnV0dG9uLAppbnB1dCB7CiAgICBsaW5lLWhlaWdodDogbm9ybWFsOwp9CgovKgogKiAxLiBBdm9pZCB0aGUgV2ViS2l0IGJ1ZyBpbiBBbmRyb2lkIDQuMC4qIHdoZXJlICgyKSBkZXN0cm95cyBuYXRpdmUgYGF1ZGlvYAogKiAgICBhbmQgYHZpZGVvYCBjb250cm9scy4KICogMi4gQ29ycmVjdHMgaW5hYmlsaXR5IHRvIHN0eWxlIGNsaWNrYWJsZSBgaW5wdXRgIHR5cGVzIGluIGlPUy4KICogMy4gSW1wcm92ZXMgdXNhYmlsaXR5IGFuZCBjb25zaXN0ZW5jeSBvZiBjdXJzb3Igc3R5bGUgYmV0d2VlbiBpbWFnZS10eXBlCiAqICAgIGBpbnB1dGAgYW5kIG90aGVycy4KICovCgpidXR0b24sCmh0bWwgaW5wdXRbdHlwZT0iYnV0dG9uIl0sIC8qIDEgKi8KaW5wdXRbdHlwZT0icmVzZXQiXSwKaW5wdXRbdHlwZT0ic3VibWl0Il0gewogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247IC8qIDIgKi8KICAgIGN1cnNvcjogcG9pbnRlcjsgLyogMyAqLwp9CgovKgogKiBSZS1zZXQgZGVmYXVsdCBjdXJzb3IgZm9yIGRpc2FibGVkIGVsZW1lbnRzLgogKi8KCmJ1dHRvbltkaXNhYmxlZF0sCmlucHV0W2Rpc2FibGVkXSB7CiAgICBjdXJzb3I6IGRlZmF1bHQ7Cn0KCi8qCiAqIDEuIEFkZHJlc3NlcyBib3ggc2l6aW5nIHNldCB0byBgY29udGVudC1ib3hgIGluIElFIDgvOS4KICogMi4gUmVtb3ZlcyBleGNlc3MgcGFkZGluZyBpbiBJRSA4LzkuCiAqLwoKaW5wdXRbdHlwZT0iY2hlY2tib3giXSwKaW5wdXRbdHlwZT0icmFkaW8iXSB7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvKiAxICovCiAgICBwYWRkaW5nOiAwOyAvKiAyICovCn0KCi8qCiAqIDEuIEFkZHJlc3NlcyBgYXBwZWFyYW5jZWAgc2V0IHRvIGBzZWFyY2hmaWVsZGAgaW4gU2FmYXJpIDUgYW5kIENocm9tZS4KICogMi4gQWRkcmVzc2VzIGBib3gtc2l6aW5nYCBzZXQgdG8gYGJvcmRlci1ib3hgIGluIFNhZmFyaSA1IGFuZCBDaHJvbWUKICogICAgKGluY2x1ZGUgYC1tb3pgIHRvIGZ1dHVyZS1wcm9vZikuCiAqLwoKaW5wdXRbdHlwZT0ic2VhcmNoIl0gewogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7IC8qIDEgKi8KICAgIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7CiAgICAtd2Via2l0LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OyAvKiAyICovCiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKfQoKLyoKICogUmVtb3ZlcyBpbm5lciBwYWRkaW5nIGFuZCBzZWFyY2ggY2FuY2VsIGJ1dHRvbiBpbiBTYWZhcmkgNSBhbmQgQ2hyb21lCiAqIG9uIE9TIFguCiAqLwoKaW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sCmlucHV0W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHsKICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKfQoKLyoKICogUmVtb3ZlcyBpbm5lciBwYWRkaW5nIGFuZCBib3JkZXIgaW4gRmlyZWZveCA0Ky4KICovCgpidXR0b246Oi1tb3otZm9jdXMtaW5uZXIsCmlucHV0OjotbW96LWZvY3VzLWlubmVyIHsKICAgIGJvcmRlcjogMDsKICAgIHBhZGRpbmc6IDA7Cn0KCi8qCiAqIDEuIFJlbW92ZXMgZGVmYXVsdCB2ZXJ0aWNhbCBzY3JvbGxiYXIgaW4gSUUgOC85LgogKiAyLiBJbXByb3ZlcyByZWFkYWJpbGl0eSBhbmQgYWxpZ25tZW50IGluIGFsbCBicm93c2Vycy4KICovCgp0ZXh0YXJlYSB7CiAgICBvdmVyZmxvdzogYXV0bzsgLyogMSAqLwogICAgdmVydGljYWwtYWxpZ246IHRvcDsgLyogMiAqLwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBUYWJsZXMKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCi8qCiAqIFJlbW92ZSBtb3N0IHNwYWNpbmcgYmV0d2VlbiB0YWJsZSBjZWxscy4KICovCgp0YWJsZSB7CiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgYm9yZGVyLXNwYWNpbmc6IDA7Cn0K"}},"time_used":604,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":604,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"detran-go-emissao-gov.site/dashboard/stylesheets/all.css","fqdn":"detran-go-emissao-gov.site","domain":"detran-go-emissao-gov.site","tld":"site"},"ip":{"addr":"172.67.152.179","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"stylesheet","requested_by":"https://detran-go-emissao-gov.site/dashboard/","date":"2026-07-27T14:06:09.561Z","timestamp":1785161169561,"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":"detran-go-emissao-gov.site","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Sun, 26 Jul 2026 14:27:30 GMT","end":"Sat, 24 Oct 2026 15:26:12 GMT"},"fingerprint":{"sha1":"33:BD:B0:00:D4:4F:09:5C:59:02:3B:55:1C:94:52:31:7F:BD:F6:AE","sha256":"F4:70:53:78:85:5E:A4:5C:81:1D:85:52:5D:63:D9:95:2D:9A:2E:D2:93:00:F8:AC:EA:E4:AC:0B:59:BC:2A:A0"}}},"request":{"raw":"GET /dashboard/stylesheets/all.css HTTP/1.1\r\nHost: detran-go-emissao-gov.site\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://detran-go-emissao-gov.site/dashboard/\r\nSec-Fetch-Dest: style\r\nSec-Fetch-Mode: no-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\ndate: Mon, 27 Jul 2026 14:06:10 GMT\r\nserver: cloudflare\r\nlast-modified: Tue, 22 Nov 2022 15:37:04 GMT\r\nreport-to: {\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=bw84rgCIrPLJbMwd7Bm8ijEKhxxVxzuM46q10tUQGYA01H8tZK%2FSU%2FWoGaEAa571dJ4ea3t3vnkKMpuy4suvKJ5lesD6roYNWH0vO7LUmd7hMLWb9LRxdZ2Wiv2%2BarpffeTfJ6%2BiP52kj8fJTA%3D%3D\"}]}\r\nnel: {\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}\r\npriority: u=2,i=?0\r\ncontent-encoding: zstd\r\netag: W/\"635d6-5ee10f19c6800\"\r\ncontent-type: text/css\r\ncache-control: max-age=14400\r\ncf-cache-status: REVALIDATED\r\ncf-ray: a21c33fdcdc67131-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":406998,"size_decoded":49166,"mime_type":"text/css","magic":"ASCII text, with very long lines (1479)","md5":"5328323c816afb42eba591c6d82cab80","sha1":"007f3cef64d8adb581fc1ff8eabb38a49ec5509f","sha256":"8edb8804b01b16ac94127920b6c6e5dd71736d806e97d49b67f61bac65b7a8ea","sha512":"f4f008244d1f544bede0836f575e0668948d768e8c1da08d480c970df66d0e4dd0ecaab129db6eff0a1ec5a012e0014cf420456d11480d91f9c6e0480f19cf0f","ssdeep":"3072:gLPOPWP5kTTX5hLJD1bFvYT5XeH8M74JOPWPpaeOPWPpagZkWU61qU1IDf4V1E2k:gLdRyM+743P9/1IDfoE27fUpP","tlshash":"c18467a6ed50008a65b592b733793e1266d5f12bcad2ccb4fa4e027c9f853204375bdb","first_seen":"2023-04-05T13:45:37Z","last_seen":"2026-07-27T14:06:48.020394Z","times_seen":621,"resource_available":false,"data":"LyogbGluZSA0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCmJvZHkgewogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICBtaW4taGVpZ2h0OiAxMDB2aDsgfQoKLyogbGluZSAxMCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwoud3JhcHBlciB7CiAgYmFja2dyb3VuZDogd2hpdGU7CiAgcGFkZGluZy1ib3R0b206IDJlbTsKICBmbGV4OiAxOyB9CgovKiBsaW5lIDE2LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCm9sLm5vLW51bWJlciB7CiAgbGlzdC1zdHlsZTogbm9uZTsKICBtYXJnaW4tbGVmdDogMDsgfQoKLyogbGluZSAyMSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwpjb2RlIHsKICB3aGl0ZS1zcGFjZTogcHJlLWxpbmU7IH0KCi8qIGxpbmUgMjcsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8Kb2wuc2VwYXJhdGUgPiBsaSwgdWwuc2VwYXJhdGUgPiBsaSB7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7CiAgbWFyZ2luLWJvdHRvbTogMC41ZW07IH0KCi8qIExvY2FsZSBzZWxlY3RvciAqLwovKiBsaW5lIDM2LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiNsb2NhbGVzIGEgaW1nIHsKICBtYXJnaW4tcmlnaHQ6IDAuNWVtOwogIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsgfQoKLyogbGluZSA0MywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwpoMSBhW25hbWVdLCBoMiBhW25hbWVdLCBoMyBhW25hbWVdLCBoNCBhW25hbWVdLCBoNSBhW25hbWVdLCBoNiBhW25hbWVdIHsKICBjb2xvcjogaW5oZXJpdDsKICBjdXJzb3I6IGluaGVyaXQ7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9CgovKiBsaW5lIDUwLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCmgzICsgYSBpbWcsIGg0ICsgYSBpbWcgewogIG1hcmdpbi1ib3R0b206IDAuNWVtOyB9CgovKiBsaW5lIDU1LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCmltZy5tYXJnaW4ucmlnaHQsIGJvZHlbY2xhc3MkPSJhYm91dCJdIGRsIGRkIGltZy5tYXJnaW4gewogIG1hcmdpbjogMCAwIDFlbSAxZW07IH0KLyogbGluZSA1OCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwppbWcubWFyZ2luLmxlZnQgewogIG1hcmdpbjogMCAxZW0gMWVtIDA7IH0KCi8qIGxpbmUgNjMsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KcCBjb2RlIHsKICBkaXJlY3Rpb246IGx0cjsKICBmb250LXNpemU6IGluaGVyaXQ7CiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICBjb2xvcjogIzJhNWQ4NDsKICBkaXNwbGF5OiBibG9jazsKICBwYWRkaW5nOiAwLjVlbSAxZW0gIWltcG9ydGFudDsgfQoKLyogbGF0ZXN0IG5ld3MgaGVhZGxpbmcgKi8KLyogbGluZSA3OCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwojYnJlYWtpbmcgZGl2OmZpcnN0LWNoaWxkIHsKICBkaXNwbGF5OiB0YWJsZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgbWFyZ2luLWJvdHRvbTogMC41ZW07IH0KICAvKiBsaW5lIDgzLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgI2JyZWFraW5nIGRpdjpmaXJzdC1jaGlsZCBoNCB7CiAgICBmb250LXNpemU6IDJlbTsKICAgIGxpbmUtaGVpZ2h0OiAxLjJlbTsKICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9CgovKiBsaW5lIDk0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCmEuZG93bmxvYWQsIC5oZXJvICNkb3dubG9hZCA+IC5jb2x1bW5zID4gYSwgLmhlcm8gI3N0YWNrLWxpc3QgI2Rvd25sb2FkID4gbGkgPiBhLCAjc3RhY2stbGlzdCAuaGVybyAjZG93bmxvYWQgPiBsaSA+IGEsIC5oZXJvICN0aGVtZS1saXN0IGxpI2Rvd25sb2FkID4gZGl2ID4gYSwgI3RoZW1lLWxpc3QgLmhlcm8gbGkjZG93bmxvYWQgPiBkaXYgPiBhLCBhI2ZvcnVtIHsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCAjZmZmOwogIG1hcmdpbjogMC41ZW0gMDsKICBwYWRkaW5nOiAxMHB4OwogIGRpc3BsYXk6IGJsb2NrOwogIGNvbG9yOiAjNzc3OyB9CiAgLyogbGluZSAxMDUsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICBhLmRvd25sb2FkOmFjdGl2ZSwgLmhlcm8gI2Rvd25sb2FkID4gLmNvbHVtbnMgPiBhOmFjdGl2ZSwgLmhlcm8gI3N0YWNrLWxpc3QgI2Rvd25sb2FkID4gbGkgPiBhOmFjdGl2ZSwgI3N0YWNrLWxpc3QgLmhlcm8gI2Rvd25sb2FkID4gbGkgPiBhOmFjdGl2ZSwgLmhlcm8gI3RoZW1lLWxpc3QgbGkjZG93bmxvYWQgPiBkaXYgPiBhOmFjdGl2ZSwgI3RoZW1lLWxpc3QgLmhlcm8gbGkjZG93bmxvYWQgPiBkaXYgPiBhOmFjdGl2ZSwgYSNmb3J1bTphY3RpdmUsIGEuZG93bmxvYWQ6dmlzaXRlZCwgLmhlcm8gI2Rvd25sb2FkID4gLmNvbHVtbnMgPiBhOnZpc2l0ZWQsIC5oZXJvICNzdGFjay1saXN0ICNkb3dubG9hZCA+IGxpID4gYTp2aXNpdGVkLCAjc3RhY2stbGlzdCAuaGVybyAjZG93bmxvYWQgPiBsaSA+IGE6dmlzaXRlZCwgLmhlcm8gI3RoZW1lLWxpc3QgbGkjZG93bmxvYWQgPiBkaXYgPiBhOnZpc2l0ZWQsICN0aGVtZS1saXN0IC5oZXJvIGxpI2Rvd25sb2FkID4gZGl2ID4gYTp2aXNpdGVkLCBhI2ZvcnVtOnZpc2l0ZWQgewogICAgY29sb3I6ICNjY2M7IH0KICAvKiBsaW5lIDEwOSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwogIGEuZG93bmxvYWQgc3Ryb25nLCAuaGVybyAjZG93bmxvYWQgPiAuY29sdW1ucyA+IGEgc3Ryb25nLCAuaGVybyAjc3RhY2stbGlzdCAjZG93bmxvYWQgPiBsaSA+IGEgc3Ryb25nLCAjc3RhY2stbGlzdCAuaGVybyAjZG93bmxvYWQgPiBsaSA+IGEgc3Ryb25nLCAuaGVybyAjdGhlbWUtbGlzdCBsaSNkb3dubG9hZCA+IGRpdiA+IGEgc3Ryb25nLCAjdGhlbWUtbGlzdCAuaGVybyBsaSNkb3dubG9hZCA+IGRpdiA+IGEgc3Ryb25nLCBhI2ZvcnVtIHN0cm9uZyB7CiAgICBjb2xvcjogIzU1NTU1NTsgfQogIC8qIGxpbmUgMTEzLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgYS5kb3dubG9hZCBpbWcsIC5oZXJvICNkb3dubG9hZCA+IC5jb2x1bW5zID4gYSBpbWcsIC5oZXJvICNzdGFjay1saXN0ICNkb3dubG9hZCA+IGxpID4gYSBpbWcsICNzdGFjay1saXN0IC5oZXJvICNkb3dubG9hZCA+IGxpID4gYSBpbWcsIC5oZXJvICN0aGVtZS1saXN0IGxpI2Rvd25sb2FkID4gZGl2ID4gYSBpbWcsICN0aGVtZS1saXN0IC5oZXJvIGxpI2Rvd25sb2FkID4gZGl2ID4gYSBpbWcsIGEjZm9ydW0gaW1nIHsKICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDsKICAgIHdpZHRoOiAyMHB4OwogICAgaGVpZ2h0OiAyMHB4OyB9CgovKiBoZXJvIHVuaXQgKi8KLyogbGluZSAxMjEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KLmhlcm8gewogIGJhY2tncm91bmQ6ICNlZmVlZTU7CiAgcGFkZGluZzogMWVtIDA7CiAgbWFyZ2luLWJvdHRvbTogMmVtOwogIC8qIGRvd25sb2FkIGJhciAqLyB9CiAgLyogbGluZSAxMjYsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAuaGVybyBoMSB7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogM2VtOwogICAgbGluZS1oZWlnaHQ6IDFlbTsKICAgIHBhZGRpbmc6IDAuM2VtIDA7IH0KICAgIC8qIGxpbmUgMTMzLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgICAuaGVybyBoMSBzcGFuIHsKICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgZm9udC1zaXplOiAwLjVlbTsKICAgICAgZGlzcGxheTogYmxvY2s7IH0KICAgIC8qIGxpbmUgMTM4LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgICAuaGVybyBoMSBpbWcgewogICAgICBoZWlnaHQ6IDFlbTsKICAgICAgbWFyZ2luLXJpZ2h0OiAwLjNlbTsKICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTsgfQogIC8qIGxpbmUgMTQ5LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgLmhlcm8gaDIgewogICAgZm9udC1zaXplOiAxLjZlbTsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOyB9CiAgLyogbGluZSAxNTMsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAuaGVybyBoMyB7CiAgICBmb250LXNpemU6IDEuNGVtOyB9CiAgLyogbGluZSAxNTcsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAuaGVybyAjZG93bmxvYWQgewogICAgYmFja2dyb3VuZDogI2ZmZjsKICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CiAgICBwYWRkaW5nOiA1cHg7CiAgICBtYXJnaW4tdG9wOiAxZW07IH0KICAgIC8qIGxpbmUgMTY0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgICAuaGVybyAjZG93bmxvYWQgPiAuY29sdW1uczpmaXJzdC1jaGlsZCwgLmhlcm8gI3N0YWNrLWxpc3QgI2Rvd25sb2FkID4gbGk6Zmlyc3QtY2hpbGQsICNzdGFjay1saXN0IC5oZXJvICNkb3dubG9hZCA+IGxpOmZpcnN0LWNoaWxkLCAuaGVybyAjdGhlbWUtbGlzdCBsaSNkb3dubG9hZCA+IGRpdjpmaXJzdC1jaGlsZCwgI3RoZW1lLWxpc3QgLmhlcm8gbGkjZG93bmxvYWQgPiBkaXY6Zmlyc3QtY2hpbGQgewogICAgICBkaXNwbGF5OiBub25lOwogICAgICAvKiBvdmVycmlkZW4gYnkgQG1lZGlhIHF1ZXJ5ICovCiAgICAgIHBhZGRpbmctbGVmdDogMDsgfQogICAgLyogbGluZSAxNjksIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAgIC5oZXJvICNkb3dubG9hZCA+IC5jb2x1bW5zID4gYSwgLmhlcm8gI3N0YWNrLWxpc3QgI2Rvd25sb2FkID4gbGkgPiBhLCAjc3RhY2stbGlzdCAuaGVybyAjZG93bmxvYWQgPiBsaSA+IGEsIC5oZXJvICN0aGVtZS1saXN0IGxpI2Rvd25sb2FkID4gZGl2ID4gYSwgI3RoZW1lLWxpc3QgLmhlcm8gbGkjZG93bmxvYWQgPiBkaXYgPiBhIHsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICBiYWNrZ3JvdW5kOiAjZWVlOyB9CiAgICAgIC8qIGxpbmUgMTczLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgICAgIC5oZXJvICNkb3dubG9hZCA+IC5jb2x1bW5zID4gYTphY3RpdmUsIC5oZXJvICNzdGFjay1saXN0ICNkb3dubG9hZCA+IGxpID4gYTphY3RpdmUsICNzdGFjay1saXN0IC5oZXJvICNkb3dubG9hZCA+IGxpID4gYTphY3RpdmUsIC5oZXJvICN0aGVtZS1saXN0IGxpI2Rvd25sb2FkID4gZGl2ID4gYTphY3RpdmUsICN0aGVtZS1saXN0IC5oZXJvIGxpI2Rvd25sb2FkID4gZGl2ID4gYTphY3RpdmUsIC5oZXJvICNkb3dubG9hZCA+IC5jb2x1bW5zID4gYTp2aXNpdGVkLCAuaGVybyAjc3RhY2stbGlzdCAjZG93bmxvYWQgPiBsaSA+IGE6dmlzaXRlZCwgI3N0YWNrLWxpc3QgLmhlcm8gI2Rvd25sb2FkID4gbGkgPiBhOnZpc2l0ZWQsIC5oZXJvICN0aGVtZS1saXN0IGxpI2Rvd25sb2FkID4gZGl2ID4gYTp2aXNpdGVkLCAjdGhlbWUtbGlzdCAuaGVybyBsaSNkb3dubG9hZCA+IGRpdiA+IGE6dmlzaXRlZCB7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7IH0KICAgICAgLyogbGluZSAxNzcsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAgICAgLmhlcm8gI2Rvd25sb2FkID4gLmNvbHVtbnMgPiBhIHNwYW4sIC5oZXJvICNzdGFjay1saXN0ICNkb3dubG9hZCA+IGxpID4gYSBzcGFuLCAjc3RhY2stbGlzdCAuaGVybyAjZG93bmxvYWQgPiBsaSA+IGEgc3BhbiwgLmhlcm8gI3RoZW1lLWxpc3QgbGkjZG93bmxvYWQgPiBkaXYgPiBhIHNwYW4sICN0aGVtZS1saXN0IC5oZXJvIGxpI2Rvd25sb2FkID4gZGl2ID4gYSBzcGFuIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW4tdG9wOiAwLjVlbTsKICAgICAgICBjb2xvcjogIzc3NzsgfQogICAgLyogbGluZSAxODUsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAgIC5oZXJvICNkb3dubG9hZCAjYXJyb3cgewogICAgICBoZWlnaHQ6IDgwcHg7CiAgICAgIHBhZGRpbmc6IDEwcHggMCAwIDIwcHg7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgY29sb3I6ICNmZmY7CiAgICAgIGJhY2tncm91bmQ6ICM1ZTg5NDk7IH0KICAgICAgLyogbGluZSAxOTcsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAgICAgLmhlcm8gI2Rvd25sb2FkICNhcnJvdzphZnRlciB7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgYm9yZGVyOiBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBjb250ZW50OiAiICI7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgIHdpZHRoOiAwOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBsZWZ0OiAxMDAlOwogICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAjNWU4OTQ5OwogICAgICAgIG1hcmdpbi1sZWZ0OiAtMzBweDsKICAgICAgICBib3JkZXItd2lkdGg6IDQwcHg7CiAgICAgICAgbWFyZ2luLXRvcDogLTQwcHg7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsgfQogICAgICAvKiBsaW5lIDIxOSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwogICAgICAuaGVybyAjZG93bmxvYWQgI2Fycm93IGgyIHsKICAgICAgICBjb2xvcjogaW5oZXJpdDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxLjRlbTsgfQogICAgICAvKiBsaW5lIDIyNiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwogICAgICAuaGVybyAjZG93bmxvYWQgI2Fycm93IGEgewogICAgICAgIGZvbnQtc2l6ZTogMC44ZW07CiAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsgfQogICAgICAgIC8qIGxpbmUgMjMwLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgICAgICAgLmhlcm8gI2Rvd25sb2FkICNhcnJvdyBhOmhvdmVyIHsKICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9CgovKiBsaW5lIDIzOCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwpib2R5LmluZGV4IC5oZXJvIHsKICBwYWRkaW5nOiAyZW0gMDsgfQogIC8qIGxpbmUgMjQxLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgYm9keS5pbmRleCAuaGVybyBoMSB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBib3JkZXItdG9wOiAycHggc29saWQgI2NjYzsKICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjY2NjOwogICAgbWFyZ2luLWJvdHRvbTogMWVtOyB9CgovKiBsaW5lIDI1MCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwoucGFuZWwgaDEsIHAgY29kZSBoMSwgdWwjZG93bmxvYWRzID4gbGkgaDEsIC5wYW5lbCBoMiwgcCBjb2RlIGgyLCB1bCNkb3dubG9hZHMgPiBsaSBoMiwgLnBhbmVsIGgzLCBwIGNvZGUgaDMsIHVsI2Rvd25sb2FkcyA+IGxpIGgzLCAucGFuZWwgaDQsIHAgY29kZSBoNCwgdWwjZG93bmxvYWRzID4gbGkgaDQsIC5wYW5lbCBwLCBwIGNvZGUgcCwgdWwjZG93bmxvYWRzID4gbGkgcCB7CiAgbWFyZ2luOiAwOyB9CgovKiBhYm91dCwgZG9jdW1lbnRhdGlvbiAmIGRpc2N1c3Npb25zICovCi8qIGxpbmUgMjU3LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiNhYm91dCBoMywgI2RvY3VtZW50YXRpb24gaDMsICNkaXNjdXNzaW9ucyBoMyB7CiAgZm9udC1zaXplOiAxLjJlbTsKICBmb250LXdlaWdodDogYm9sZDsKICBtYXJnaW4tYm90dG9tOiAxZW07CiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNlZWU7CiAgcGFkZGluZy1ib3R0b206IDAuMmVtOyB9CgovKiBsaW5lIDI2OCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwojZG9jdW1lbnRhdGlvbiBkdCwgI2RvY3VtZW50YXRpb24gaDUsICNkaXNjdXNzaW9ucyBkdCwgI2Rpc2N1c3Npb25zIGg1IHsKICBmb250LXdlaWdodDogYm9sZDsKICBjb2xvcjogaW5oZXJpdDsKICBmb250LXNpemU6IDFlbTsgfQovKiBsaW5lIDI3NCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwojZG9jdW1lbnRhdGlvbiBwLCAjZGlzY3Vzc2lvbnMgcCB7CiAgbWFyZ2luLWJvdHRvbTogMDsgfQovKiBsaW5lIDI3OCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwojZG9jdW1lbnRhdGlvbiBsaSwgI2RvY3VtZW50YXRpb24gZGQsICNkaXNjdXNzaW9ucyBsaSwgI2Rpc2N1c3Npb25zIGRkIHsKICBtYXJnaW4tYm90dG9tOiAxZW07IH0KCi8qIHN1YiBwYWdlIGxheW91dCAqLwovKiBsaW5lIDI4NCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwphc2lkZSB7CiAgcGFkZGluZzogMC41ZW0gMWVtOwogIGJhY2tncm91bmQ6ICNlZWU7IH0KICAvKiBsaW5lIDI4OSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwogIGFzaWRlIGgzOm5vdCg6Zmlyc3QtY2hpbGQpLCBhc2lkZSBoNDpub3QoOmZpcnN0LWNoaWxkKSB7CiAgICBtYXJnaW46IDAuNWVtIDA7IH0KICAvKiBsaW5lIDI5MywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwogIGFzaWRlID4gaW1nIHsKICAgIG1hcmdpbjogMC41ZW0gMDsgfQogIC8qIGxpbmUgMjk2LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgYXNpZGUgLnNvY2lhbCB7CiAgICBtYXJnaW4tYm90dG9tOiAxZW07IH0KICAvKiBsaW5lIDI5OSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwogIGFzaWRlIG9sLnNlY3Rpb25zIHsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsgfQogICAgLyogbGluZSAzMDIsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAgIGFzaWRlIG9sLnNlY3Rpb25zIGxpIHsKICAgICAgbWFyZ2luLWJvdHRvbTogMC4yNWVtOyB9CiAgICAgIC8qIGxpbmUgMzA0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgICAgIGFzaWRlIG9sLnNlY3Rpb25zIGxpOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7IH0KCi8qIFhBTVBQIHN0YW1wcyB0YWJsZSAqLwovKiBsaW5lIDMxNCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwp0YWJsZSNzdGFtcHMgdGQ6Zmlyc3QtY2hpbGQgewogIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZGQ7CiAgdGV4dC1hbGlnbjogY2VudGVyOyB9CgovKiBzb2NpYWwgaWNvbnMgKi8KLyogbGluZSAzMjMsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KLnNvY2lhbCB7CiAgbWFyZ2luLWJvdHRvbTogMDsgfQogIC8qIGxpbmUgMzI3LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgLnNvY2lhbCBsaSB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBtYXJnaW4tcmlnaHQ6IDVweDsgfQogICAgLyogbGluZSAzMzEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAgIC5zb2NpYWwgbGkgYSB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMjVweDsKICAgICAgaGVpZ2h0OiAyNXB4OwogICAgICB0ZXh0LWluZGVudDogLTk5OTlweDsKICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCIvZGFzaGJvYXJkL2ltYWdlcy9zb2NpYWwtaWNvbnMucG5nIik7IH0KICAgIC8qIGxpbmUgMzM4LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgICAuc29jaWFsIGxpLnR3aXR0ZXIgYSB7CiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDsgfQogICAgLyogbGluZSAzNDEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAgIC5zb2NpYWwgbGkuZmFjZWJvb2sgYSB7CiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0yNXB4IDA7IH0KICAgIC8qIGxpbmUgMzQ0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgICAuc29jaWFsIGxpLmdvb2dsZSBhIHsKICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTUwcHggMDsgfQogIC8qIGxpbmUgMzQ5LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgLnNvY2lhbC5sYXJnZSB7CiAgICBtYXJnaW4tYm90dG9tOiAxZW07IH0KICAgIC8qIGxpbmUgMzUzLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgICAuc29jaWFsLmxhcmdlIGxpIGEgewogICAgICB3aWR0aDogNzBweDsKICAgICAgaGVpZ2h0OiA3MHB4OwogICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoIi9kYXNoYm9hcmQvaW1hZ2VzL3NvY2lhbC1pY29ucy1sYXJnZS5wbmciKTsgfQogICAgLyogbGluZSAzNTgsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAgIC5zb2NpYWwubGFyZ2UgbGkudHdpdHRlciBhIHsKICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOyB9CiAgICAvKiBsaW5lIDM2MSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwogICAgLnNvY2lhbC5sYXJnZSBsaS5mYWNlYm9vayBhIHsKICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTcwcHggMDsgfQogICAgLyogbGluZSAzNjQsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAgIC5zb2NpYWwubGFyZ2UgbGkuZ29vZ2xlIGEgewogICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQwcHggMDsgfQoKLyogdHdlZXQgaXQgZm9ybSAqLwovKiBsaW5lIDM3MywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwpmb3JtI3R3ZWV0IGlucHV0LCBmb3JtI3R3ZWV0IHRleHRhcmVhIHsKICBtYXJnaW4tYm90dG9tOiAwOyB9CgovKiBkb3dubG9hZHMgbGlzdCAqLwovKiBsaW5lIDM4NiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwp1bCNkb3dubG9hZHMgPiBsaSBoMyBpbWcgewogIHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDsKICB3aWR0aDogNDBweDsKICBoZWlnaHQ6IDQwcHg7CiAgbWFyZ2luLXJpZ2h0OiAxMHB4OyB9Ci8qIGxpbmUgMzkxLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCnVsI2Rvd25sb2FkcyA+IGxpIGgzIHNwYW4gewogIGNvbG9yOiAjNzc3OyB9Ci8qIGxpbmUgMzk2LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCnVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIHsKICBtYXJnaW4tdG9wOiAxLjVlbTsgfQogIC8qIGxpbmUgMzk5LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgdGggewogICAgdGV4dC1hbGlnbjogbGVmdDsgfQogIC8qIGxpbmUgNDA1LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgdGQgdWwuaW5saW5lLWxpc3QgbGk6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tcmlnaHQ6IDA7IH0KICAvKiBsaW5lIDQxMSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwogIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5idXR0b24gewogICAgbWFyZ2luOiAwIDAgNXB4IDVweDsKICAgIHBhZGRpbmc6IDdweDsKICAgIGZvbnQtc2l6ZTogMC45ZW07IH0KICAgIC8qIGxpbmUgNDE2LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgICB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSAuYnV0dG9uOmxhc3QtY2hpbGQgewogICAgICBtYXJnaW4tYm90dG9tOiAwOyB9Ci8qIGxpbmUgNDIzLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCnVsI2Rvd25sb2FkcyA+IGxpIHVsLmlubGluZS1saXN0LCB1bCNkb3dubG9hZHMgPiBsaSB1bC5pbmxpbmUtbGlzdCBsaSB7CiAgbWFyZ2luLWxlZnQ6IDA7IH0KLyogbGluZSA0MjYsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KdWwjZG93bmxvYWRzID4gbGkgdWwuaW5saW5lLWxpc3QgbGkgewogIG1hcmdpbi1yaWdodDogMWVtOyB9Ci8qIGxpbmUgNDMxLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCnVsI2Rvd25sb2FkcyA+IGxpIC5ub3RlcyB7CiAgbWF4LXdpZHRoOiA1NTBweCAhaW1wb3J0YW50OyB9CiAgLyogbGluZSA0MzUsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICB1bCNkb3dubG9hZHMgPiBsaSAubm90ZXMgcCB7CiAgICBmb250LXNpemU6IDAuOGVtOwogICAgY29sb3I6ICM3Nzc7CiAgICBtYXJnaW4tYm90dG9tOiAwOyB9Ci8qIGxpbmUgNDQzLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCnVsI2Rvd25sb2FkcyA+IGxpI2Rvd25sb2FkLXdpbmRvd3MgcDpsYXN0LWNoaWxkIHsKICBjb2xvcjogIzc3NzsKICBtYXJnaW4tdG9wOiAxZW07CiAgZm9udC1zaXplOiAwLjhlbTsgfQoKLyogbGluZSA0NTMsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KdWwjZG93bmxvYWRzID4gbGkgdGFibGUgdWxbaWQkPSItZG93bmxvYWQiXSwgI2Rvd25sb2FkID4gZGl2IHVsW2lkJD0iLWRvd25sb2FkIl0gewogIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICBtYXgtd2lkdGg6IDUwcHggIWltcG9ydGFudDsKICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KCi8qIHRlYW0gaW1hZ2VzICovCi8qIGxpbmUgNDY0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCmJvZHlbY2xhc3MkPSJhYm91dCJdIGRsIGRkIGltZyB7CiAgYm9yZGVyOiAxcHggc29saWQgI2VlZTsKICBwYWRkaW5nOiAzcHg7CiAgbWFyZ2luOiAwIDAgMC41ZW0gMC41ZW07IH0KCi8qIGxpbmUgNDcyLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiNtYWlsaW5nLWxpc3QgewogIG1hcmdpbi1ib3R0b206IDAuNWVtOyB9CiAgLyogbGluZSA0NzUsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAjbWFpbGluZy1saXN0IGlucHV0LCAjbWFpbGluZy1saXN0IGEgewogICAgbWFyZ2luLWJvdHRvbTogMDsgfQoKLyogbGluZSA0ODAsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KI2ludHJvIHsKICBtYXJnaW4tYm90dG9tOiAwOyB9CgovKiBsaW5lIDQ4NCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwojc3RhY2stbGlzdCB7CiAgbGlzdC1zdHlsZTogbm9uZTsKICBtYXJnaW4tbGVmdDogMDsgfQogIC8qIGxpbmUgNDg5LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgI3N0YWNrLWxpc3QgbGkgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgbWFyZ2luOiAwIDAgMC41ZW0gMDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfQogICAgLyogbGluZSA0OTUsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAgICNzdGFjay1saXN0IGxpIGEgewogICAgICBjb2xvcjogIzJhNWQ4NDsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIG1pbi1oZWlnaHQ6IDIwMHB4OyB9CiAgICAgIC8qIGxpbmUgNTAwLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgICAgICNzdGFjay1saXN0IGxpIGEgc3BhbiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7IH0KICAgICAgICAvKiBsaW5lIDUwMywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwogICAgICAgICNzdGFjay1saXN0IGxpIGEgc3Bhbi50eXBlIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMC45ZW07CiAgICAgICAgICBjb2xvcjogIzc3NzsgfQoKLyogbGluZSA1MTIsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KI3RoZW1lLWxpc3QgewogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgbWFyZ2luLWxlZnQ6IDA7IH0KICAvKiBsaW5lIDUxNiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwogICN0aGVtZS1saXN0IGxpIHsKICAgIG1hcmdpbi1ib3R0b206IDEuNWVtICFpbXBvcnRhbnQ7IH0KICAgIC8qIGxpbmUgNTIwLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgICAjdGhlbWUtbGlzdCBsaSBoNCBhIHsKICAgICAgY29sb3I6IGluaGVyaXQ7IH0KCi8qIGxpbmUgNTM1LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCmJvZHkuYWRkLW9ucyAjdGhlbWUtbGlzdCB7CiAgbWFyZ2luLWJvdHRvbTogMmVtOyB9Ci8qIGxpbmUgNTM4LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCmJvZHkuYWRkLW9ucyBhc2lkZSB1bCB7CiAgbWFyZ2luLWJvdHRvbTogMDsgfQoKLyogbGluZSA1NDQsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KLmJ1dHRvbi5pY29uIGltZyB7CiAgbWFyZ2luLXJpZ2h0OiAxZW07IH0KCi8qIGxpbmUgNTQ5LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCmEjZm9ydW0gewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXNpemU6IDEuNGVtOwogIGNvbG9yOiAjZmI3YTI0OyB9CiAgLyogbGluZSA1NTUsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICBhI2ZvcnVtIGltZyB7CiAgICB3aWR0aDogMzBweDsKICAgIGhlaWdodDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogMC41ZW07IH0KICAvKiBsaW5lIDU2MCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwogIGEjZm9ydW0gc3BhbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZvbnQtc2l6ZTogMC43ZW07CiAgICBjb2xvcjogIzc3NzsKICAgIHRleHQtYWxpZ246IHJpZ2h0OyB9CgovKiBsaW5lIDU3MCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwpvbCNhcnRpY2xlcyBsaSBzcGFuIHsKICBmb250LXNpemU6IDAuOGVtOwogIGNvbG9yOiAjNzc3OwogIGRpc3BsYXk6IGJsb2NrOyB9CgovKiBsaW5lIDU3OSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwouYWNjb3JkaW9uIGR0IHsKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDsKICBwYWRkaW5nOiAwLjVlbSAwOwogIG1hcmdpbi1ib3R0b206IDA7CiAgZm9udC1zaXplOiAxLjFlbTsgfQovKiBsaW5lIDU4NSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwouYWNjb3JkaW9uIGRkIHsKICBtYXJnaW4tdG9wOiAxZW07IH0KCi8qIFJldGluYSBPdmVycmlkZXMgKi8KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSwgb25seSBzY3JlZW4gYW5kICgtby1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyIC8gMSksIG9ubHkgc2NyZWVuIGFuZCAobWluLS1tb3otZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSwgb25seSBzY3JlZW4gYW5kIChtaW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSB7CiAgLyogbGluZSA1OTUsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAuc29jaWFsIGxpIGEgewogICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCIvZGFzaGJvYXJkL2ltYWdlcy9zb2NpYWwtaWNvbnNAMngucG5nIik7CiAgICBiYWNrZ3JvdW5kLXNpemU6IGF1dG8gMjVweDsgfQoKICAvKiBsaW5lIDU5OSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwogIC5zb2NpYWwubGFyZ2UgbGkgYSB7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoIi9kYXNoYm9hcmQvaW1hZ2VzL3NvY2lhbC1pY29ucy1sYXJnZUAyeC5wbmciKTsKICAgIGJhY2tncm91bmQtc2l6ZTogYXV0byA3MHB4OyB9IH0KLyogbGluZSAxLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL19mb290ZXIuc2NzcyAqLwouZm9vdGVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzMzMzOwogIGNvbG9yOiAjODg4ODg4OwogIHBhZGRpbmc6IDJlbSAwOyB9CiAgLyogbGluZSA3LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL19mb290ZXIuc2NzcyAqLwogIC5mb290ZXIgcCwKICAuZm9vdGVyIGEgewogICAgZm9udC1zaXplOiAwLjhlbTsKICAgIGNvbG9yOiBpbmhlcml0OyB9CiAgLyogbGluZSAxMiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9fZm9vdGVyLnNjc3MgKi8KICAuZm9vdGVyIHAgewogICAgbWFyZ2luLWJvdHRvbTogMDsgfQogIC8qIGxpbmUgMTksIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvX2Zvb3Rlci5zY3NzICovCiAgLmZvb3RlciBhOmhvdmVyLCAuZm9vdGVyIGE6YWN0aXZlLCAuZm9vdGVyIGE6dmlzaXRlZCB7CiAgICBjb2xvcjogaW5oZXJpdDsgfQogIC8qIGxpbmUgMjQsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvX2Zvb3Rlci5zY3NzICovCiAgLmZvb3RlciBhOmhvdmVyLCAuZm9vdGVyIGE6YWN0aXZlIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9CiAgLyogbGluZSAzMiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9fZm9vdGVyLnNjc3MgKi8KICAuZm9vdGVyIC5mb290ZXJfbGlzdHMtY29udGFpbmVyLnJvdyA+ICo6bm90KDpsYXN0LWNoaWxkKSwgLmZvb3RlciAuZm9vdGVyX2xpc3RzLWNvbnRhaW5lciNzdGFjay1saXN0ID4gKjpub3QoOmxhc3QtY2hpbGQpLCAuZm9vdGVyICN0aGVtZS1saXN0IGxpLmZvb3Rlcl9saXN0cy1jb250YWluZXIgPiAqOm5vdCg6bGFzdC1jaGlsZCksICN0aGVtZS1saXN0IC5mb290ZXIgbGkuZm9vdGVyX2xpc3RzLWNvbnRhaW5lciA+ICo6bm90KDpsYXN0LWNoaWxkKSwgLmZvb3RlciB1bC5mb290ZXJfbGlzdHMtY29udGFpbmVyI2RvY3MtbGlzdCA+ICo6bm90KDpsYXN0LWNoaWxkKSB7CiAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsgfQogICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NC4wNjNlbSkgewogICAgICAvKiBsaW5lIDMyLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL19mb290ZXIuc2NzcyAqLwogICAgICAuZm9vdGVyIC5mb290ZXJfbGlzdHMtY29udGFpbmVyLnJvdyA+ICo6bm90KDpsYXN0LWNoaWxkKSwgLmZvb3RlciAuZm9vdGVyX2xpc3RzLWNvbnRhaW5lciNzdGFjay1saXN0ID4gKjpub3QoOmxhc3QtY2hpbGQpLCAuZm9vdGVyICN0aGVtZS1saXN0IGxpLmZvb3Rlcl9saXN0cy1jb250YWluZXIgPiAqOm5vdCg6bGFzdC1jaGlsZCksICN0aGVtZS1saXN0IC5mb290ZXIgbGkuZm9vdGVyX2xpc3RzLWNvbnRhaW5lciA+ICo6bm90KDpsYXN0LWNoaWxkKSwgLmZvb3RlciB1bC5mb290ZXJfbGlzdHMtY29udGFpbmVyI2RvY3MtbGlzdCA+ICo6bm90KDpsYXN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDAuNWVtOyB9IH0KICAvKiBsaW5lIDQyLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL19mb290ZXIuc2NzcyAqLwogIC5mb290ZXIgLmZvb3Rlcl9zb2NpYWwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOyB9CiAgICAvKiBsaW5lIDQ1LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL19mb290ZXIuc2NzcyAqLwogICAgLmZvb3RlciAuZm9vdGVyX3NvY2lhbCA+ICo6bm90KDpsYXN0LWNoaWxkKSB7CiAgICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOyB9CiAgLyogbGluZSA1MCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9fZm9vdGVyLnNjc3MgKi8KICAuZm9vdGVyIC5mb290ZXJfbGlua3MgewogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIG1hcmdpbjogMDsgfQogICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0MC4wNjNlbSkgewogICAgICAvKiBsaW5lIDUwLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL19mb290ZXIuc2NzcyAqLwogICAgICAuZm9vdGVyIC5mb290ZXJfbGlua3MgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBjb2x1bW4tZ2FwOiAxZW07IH0gfQogICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NC4wNjNlbSkgewogICAgICAvKiBsaW5lIDUwLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL19mb290ZXIuc2NzcyAqLwogICAgICAuZm9vdGVyIC5mb290ZXJfbGlua3MgewogICAgICAgIGNvbHVtbi1nYXA6IDEuNWVtOyB9IH0KCi8qIGxpbmUgMjAsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvX2hlYWRlci5zY3NzICovCi50b3AtYmFyLXNlY3Rpb24gLmRyb3Bkb3duIHsKICBib3JkZXItYm90dG9tOiAycHggc29saWQgI2VlZWVlZTsgfQogIC8qIGxpbmUgMjMsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvX2hlYWRlci5zY3NzICovCiAgLnRvcC1iYXItc2VjdGlvbiAuZHJvcGRvd24gbGkgewogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWVlZWU7IH0KICAgIC8qIGxpbmUgMjYsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvX2hlYWRlci5zY3NzICovCiAgICAudG9wLWJhci1zZWN0aW9uIC5kcm9wZG93biBsaTpsYXN0LWNoaWxkIHsKICAgICAgYm9yZGVyLWJvdHRvbTogMDsgfQogICAgLyogbGluZSAyOSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9faGVhZGVyLnNjc3MgKi8KICAgIC50b3AtYmFyLXNlY3Rpb24gLmRyb3Bkb3duIGxpIGE6bm90KC5idXR0b24pOmhvdmVyIHsKICAgICAgYmFja2dyb3VuZDogIzJhNWQ4NDsgfQovKiBsaW5lIDM1LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL19oZWFkZXIuc2NzcyAqLwoudG9wLWJhci1zZWN0aW9uIGxpLmhhcy1mb3JtIHsKICBwYWRkaW5nOiA4cHggMTVweCAwOyB9Ci8qIGxpbmUgMzksIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvX2hlYWRlci5zY3NzICovCi50b3AtYmFyLXNlY3Rpb24gLnZpc3VhbGx5aGlkZGVuIHsKICBib3JkZXI6IDA7CiAgY2xpcDogcmVjdCgwIDAgMCAwKTsKICBoZWlnaHQ6IDFweDsKICBtYXJnaW46IC0xcHg7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICBwYWRkaW5nOiAwOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB3aWR0aDogMXB4OyB9CkBtZWRpYSAobWF4LXdpZHRoOiAxMDIzcHgpIHsKICAvKiBsaW5lIDUxLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL19oZWFkZXIuc2NzcyAqLwogIC50b3AtYmFyLXNlY3Rpb24gPiB1bCA+IGxpLml0ZW0gPiBhOm5vdCguYnV0dG9uKSB7CiAgICBwYWRkaW5nOiAxMnB4IDIwcHg7IH0KICAvKiBsaW5lIDU1LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL19oZWFkZXIuc2NzcyAqLwogIC50b3AtYmFyLXNlY3Rpb24gbGkuaGFzLWZvcm0gewogICAgYmFja2dyb3VuZDogIzFmM2M1MjsgfSB9CkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkgewogIC8qIGxpbmUgNjEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvX2hlYWRlci5zY3NzICovCiAgLnRvcC1iYXItc2VjdGlvbiB1bC5kcm9wZG93biA+IGxpIGEgewogICAgYmFja2dyb3VuZDogI2ZmZjsgfQogIC8qIGxpbmUgNjUsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvX2hlYWRlci5zY3NzICovCiAgLnRvcC1iYXItc2VjdGlvbiB1bC5kcm9wZG93biA+IGxpIGE6bm90KC5idXR0b24pOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICNmMmYyZjI7CiAgICBjb2xvcjogIzVlODk0OTsgfSB9CgovKiBsaW5lIDczLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL19oZWFkZXIuc2NzcyAqLwoudG9wLWJhci5leHBhbmRlZCAudG9wLWJhci1zZWN0aW9uID4gdWwgPiBsaSBhOm5vdCguYnV0dG9uKTpob3ZlciB7CiAgYmFja2dyb3VuZDogIzJhNWQ4NDsgfQoKLyogaW1wb3J0IGZvdW5kYXRpb24gbGFzdCAqLwovKiBsaW5lIDI4NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dsb2JhbC5zY3NzICovCm1ldGEuZm91bmRhdGlvbi1tcS1zbWFsbCB7CiAgZm9udC1mYW1pbHk6ICIvb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQwZW0pLyI7CiAgd2lkdGg6IDBlbTsgfQoKLyogbGluZSAyOTIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19nbG9iYWwuc2NzcyAqLwptZXRhLmZvdW5kYXRpb24tbXEtbWVkaXVtIHsKICBmb250LWZhbWlseTogIi9vbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDo0MC4wNjNlbSkgYW5kIChtYXgtd2lkdGg6NjRlbSkvIjsKICB3aWR0aDogNDAuMDYzZW07IH0KCi8qIGxpbmUgMjk3LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ2xvYmFsLnNjc3MgKi8KbWV0YS5mb3VuZGF0aW9uLW1xLWxhcmdlIHsKICBmb250LWZhbWlseTogIi9vbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDo2NC4wNjNlbSkvIjsKICB3aWR0aDogNjQuMDYzZW07IH0KCi8qIGxpbmUgMzAyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ2xvYmFsLnNjc3MgKi8KbWV0YS5mb3VuZGF0aW9uLW1xLXhsYXJnZSB7CiAgZm9udC1mYW1pbHk6ICIvb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6OTAuMDYzZW0pLyI7CiAgd2lkdGg6IDkwLjA2M2VtOyB9CgovKiBsaW5lIDMwNywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dsb2JhbC5zY3NzICovCm1ldGEuZm91bmRhdGlvbi1tcS14eGxhcmdlIHsKICBmb250LWZhbWlseTogIi9vbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDoxMjAuMDYzZW0pLyI7CiAgd2lkdGg6IDEyMC4wNjNlbTsgfQoKLyogbGluZSAzMTcsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19nbG9iYWwuc2NzcyAqLwoqLAoqOmJlZm9yZSwKKjphZnRlciB7CiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OwogIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9CgovKiBsaW5lIDMyMiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dsb2JhbC5zY3NzICovCmh0bWwsCmJvZHkgewogIGZvbnQtc2l6ZTogMTAwJTsgfQoKLyogbGluZSAzMjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19nbG9iYWwuc2NzcyAqLwpib2R5IHsKICBiYWNrZ3JvdW5kOiAjMzMzMzMzOwogIGNvbG9yOiAjNTU1NTU1OwogIHBhZGRpbmc6IDA7CiAgbWFyZ2luOiAwOwogIGZvbnQtZmFtaWx5OiAiSGVsdmV0aWNhIE5ldWUiLCAiSGVsdmV0aWNhIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKICBmb250LXdlaWdodDogbm9ybWFsOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBsaW5lLWhlaWdodDogMTsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgY3Vyc29yOiBkZWZhdWx0OyB9CgovKiBsaW5lIDMzOCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dsb2JhbC5zY3NzICovCmE6aG92ZXIgewogIGN1cnNvcjogcG9pbnRlcjsgfQoKLyogbGluZSAzNDMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19nbG9iYWwuc2NzcyAqLwppbWcsCm9iamVjdCwKZW1iZWQgewogIG1heC13aWR0aDogMTAwJTsKICBoZWlnaHQ6IGF1dG87IH0KCi8qIGxpbmUgMzQ2LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ2xvYmFsLnNjc3MgKi8Kb2JqZWN0LAplbWJlZCB7CiAgaGVpZ2h0OiAxMDAlOyB9CgovKiBsaW5lIDM0NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dsb2JhbC5zY3NzICovCmltZyB7CiAgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJpYzsgfQoKLyogbGluZSAzNTMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19nbG9iYWwuc2NzcyAqLwojbWFwX2NhbnZhcyBpbWcsCiNtYXBfY2FudmFzIGVtYmVkLAojbWFwX2NhbnZhcyBvYmplY3QsCi5tYXBfY2FudmFzIGltZywKLm1hcF9jYW52YXMgZW1iZWQsCi5tYXBfY2FudmFzIG9iamVjdCB7CiAgbWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7IH0KCi8qIGxpbmUgMzU4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ2xvYmFsLnNjc3MgKi8KLmxlZnQgewogIGZsb2F0OiBsZWZ0ICFpbXBvcnRhbnQ7IH0KCi8qIGxpbmUgMzU5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ2xvYmFsLnNjc3MgKi8KLnJpZ2h0LCBib2R5W2NsYXNzJD0iYWJvdXQiXSBkbCBkZCBpbWcgewogIGZsb2F0OiByaWdodCAhaW1wb3J0YW50OyB9CgovKiBsaW5lIDM2MCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dsb2JhbC5zY3NzICovCi5jbGVhcmZpeCwgI2JyZWFraW5nIGRpdiwgYm9keVtjbGFzcyQ9ImFib3V0Il0gZGwgZGQgewogICp6b29tOiAxOyB9CiAgLyogbGluZSAxNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19nbG9iYWwuc2NzcyAqLwogIC5jbGVhcmZpeDpiZWZvcmUsICNicmVha2luZyBkaXY6YmVmb3JlLCBib2R5W2NsYXNzJD0iYWJvdXQiXSBkbCBkZDpiZWZvcmUsIC5jbGVhcmZpeDphZnRlciwgI2JyZWFraW5nIGRpdjphZnRlciwgYm9keVtjbGFzcyQ9ImFib3V0Il0gZGwgZGQ6YWZ0ZXIgewogICAgY29udGVudDogIiAiOwogICAgZGlzcGxheTogdGFibGU7IH0KICAvKiBsaW5lIDE2NiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dsb2JhbC5zY3NzICovCiAgLmNsZWFyZml4OmFmdGVyLCAjYnJlYWtpbmcgZGl2OmFmdGVyLCBib2R5W2NsYXNzJD0iYWJvdXQiXSBkbCBkZDphZnRlciB7CiAgICBjbGVhcjogYm90aDsgfQoKLyogbGluZSAzNjEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19nbG9iYWwuc2NzcyAqLwoudGV4dC1sZWZ0IHsKICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7IH0KCi8qIGxpbmUgMzYyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ2xvYmFsLnNjc3MgKi8KLnRleHQtcmlnaHQgewogIHRleHQtYWxpZ246IHJpZ2h0ICFpbXBvcnRhbnQ7IH0KCi8qIGxpbmUgMzYzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ2xvYmFsLnNjc3MgKi8KLnRleHQtY2VudGVyIHsKICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsgfQoKLyogbGluZSAzNjQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19nbG9iYWwuc2NzcyAqLwoudGV4dC1qdXN0aWZ5IHsKICB0ZXh0LWFsaWduOiBqdXN0aWZ5ICFpbXBvcnRhbnQ7IH0KCi8qIGxpbmUgMzY1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ2xvYmFsLnNjc3MgKi8KLmhpZGUgewogIGRpc3BsYXk6IG5vbmU7IH0KCi8qIGxpbmUgMzcxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ2xvYmFsLnNjc3MgKi8KLmFudGlhbGlhc2VkIHsKICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsgfQoKLyogbGluZSAzNzQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19nbG9iYWwuc2NzcyAqLwppbWcgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9CgovKiBsaW5lIDM4NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dsb2JhbC5zY3NzICovCnRleHRhcmVhIHsKICBoZWlnaHQ6IGF1dG87CiAgbWluLWhlaWdodDogNTBweDsgfQoKLyogbGluZSAzODcsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19nbG9iYWwuc2NzcyAqLwpzZWxlY3QgewogIHdpZHRoOiAxMDAlOyB9CgovKiBsaW5lIDE5MCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwoucm93LCAjc3RhY2stbGlzdCwgI3RoZW1lLWxpc3QgbGksIHVsI2RvY3MtbGlzdCB7CiAgd2lkdGg6IDEwMCU7CiAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgbWFyZ2luLXJpZ2h0OiBhdXRvOwogIG1hcmdpbi10b3A6IDA7CiAgbWFyZ2luLWJvdHRvbTogMDsKICBtYXgtd2lkdGg6IDYyLjVyZW07CiAgKnpvb206IDE7IH0KICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dsb2JhbC5zY3NzICovCiAgLnJvdzpiZWZvcmUsICNzdGFjay1saXN0OmJlZm9yZSwgI3RoZW1lLWxpc3QgbGk6YmVmb3JlLCB1bCNkb2NzLWxpc3Q6YmVmb3JlLCAucm93OmFmdGVyLCAjc3RhY2stbGlzdDphZnRlciwgI3RoZW1lLWxpc3QgbGk6YWZ0ZXIsIHVsI2RvY3MtbGlzdDphZnRlciB7CiAgICBjb250ZW50OiAiICI7CiAgICBkaXNwbGF5OiB0YWJsZTsgfQogIC8qIGxpbmUgMTY2LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ2xvYmFsLnNjc3MgKi8KICAucm93OmFmdGVyLCAjc3RhY2stbGlzdDphZnRlciwgI3RoZW1lLWxpc3QgbGk6YWZ0ZXIsIHVsI2RvY3MtbGlzdDphZnRlciB7CiAgICBjbGVhcjogYm90aDsgfQogIC8qIGxpbmUgMTk1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnJvdy5jb2xsYXBzZSA+IC5jb2x1bW4sIC5jb2xsYXBzZSNzdGFjay1saXN0ID4gLmNvbHVtbiwgI3RoZW1lLWxpc3QgbGkuY29sbGFwc2UgPiAuY29sdW1uLCB1bC5jb2xsYXBzZSNkb2NzLWxpc3QgPiAuY29sdW1uLAogIC5yb3cuY29sbGFwc2UgPiAuY29sdW1ucywKICAuY29sbGFwc2Ujc3RhY2stbGlzdCA+IC5jb2x1bW5zLAogICN0aGVtZS1saXN0IGxpLmNvbGxhcHNlID4gLmNvbHVtbnMsCiAgdWwuY29sbGFwc2UjZG9jcy1saXN0ID4gLmNvbHVtbnMsCiAgI3N0YWNrLWxpc3QgLnJvdy5jb2xsYXBzZSA+IGxpLAogIC5jb2xsYXBzZSNzdGFjay1saXN0ID4gbGksCiAgI3RoZW1lLWxpc3QgI3N0YWNrLWxpc3QgbGkuY29sbGFwc2UgPiBsaSwKICAjc3RhY2stbGlzdCAjdGhlbWUtbGlzdCBsaS5jb2xsYXBzZSA+IGxpLAogICN0aGVtZS1saXN0IGxpLmNvbGxhcHNlID4gZGl2LAogIHVsI2RvY3MtbGlzdC5jb2xsYXBzZSA+IGxpIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHBhZGRpbmctbGVmdDogMDsKICAgIHBhZGRpbmctcmlnaHQ6IDA7CiAgICBmbG9hdDogbGVmdDsgfQogIC8qIGxpbmUgMTk3LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnJvdy5jb2xsYXBzZSAucm93LCAuY29sbGFwc2Ujc3RhY2stbGlzdCAucm93LCAjdGhlbWUtbGlzdCBsaS5jb2xsYXBzZSAucm93LCB1bC5jb2xsYXBzZSNkb2NzLWxpc3QgLnJvdywgLnJvdy5jb2xsYXBzZSAjc3RhY2stbGlzdCwgLmNvbGxhcHNlI3N0YWNrLWxpc3QgI3N0YWNrLWxpc3QsICN0aGVtZS1saXN0IGxpLmNvbGxhcHNlICNzdGFjay1saXN0LCB1bC5jb2xsYXBzZSNkb2NzLWxpc3QgI3N0YWNrLWxpc3QsIC5yb3cuY29sbGFwc2UgI3RoZW1lLWxpc3QgbGksICN0aGVtZS1saXN0IC5yb3cuY29sbGFwc2UgbGksIC5jb2xsYXBzZSNzdGFjay1saXN0ICN0aGVtZS1saXN0IGxpLCAjdGhlbWUtbGlzdCAuY29sbGFwc2Ujc3RhY2stbGlzdCBsaSwgI3RoZW1lLWxpc3QgbGkuY29sbGFwc2UgbGksIHVsLmNvbGxhcHNlI2RvY3MtbGlzdCAjdGhlbWUtbGlzdCBsaSwgI3RoZW1lLWxpc3QgdWwuY29sbGFwc2UjZG9jcy1saXN0IGxpLCAucm93LmNvbGxhcHNlIHVsI2RvY3MtbGlzdCwgLmNvbGxhcHNlI3N0YWNrLWxpc3QgdWwjZG9jcy1saXN0LCAjdGhlbWUtbGlzdCBsaS5jb2xsYXBzZSB1bCNkb2NzLWxpc3QsIHVsLmNvbGxhcHNlI2RvY3MtbGlzdCB1bCNkb2NzLWxpc3QgewogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IDA7IH0KICAvKiBsaW5lIDIwMCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5yb3cgLnJvdywgI3N0YWNrLWxpc3QgLnJvdywgI3RoZW1lLWxpc3QgbGkgLnJvdywgdWwjZG9jcy1saXN0IC5yb3csIC5yb3cgI3N0YWNrLWxpc3QsICNzdGFjay1saXN0ICNzdGFjay1saXN0LCAjdGhlbWUtbGlzdCBsaSAjc3RhY2stbGlzdCwgdWwjZG9jcy1saXN0ICNzdGFjay1saXN0LCAucm93ICN0aGVtZS1saXN0IGxpLCAjdGhlbWUtbGlzdCAucm93IGxpLCAjc3RhY2stbGlzdCAjdGhlbWUtbGlzdCBsaSwgI3RoZW1lLWxpc3QgI3N0YWNrLWxpc3QgbGksICN0aGVtZS1saXN0IGxpIGxpLCB1bCNkb2NzLWxpc3QgI3RoZW1lLWxpc3QgbGksICN0aGVtZS1saXN0IHVsI2RvY3MtbGlzdCBsaSwgLnJvdyB1bCNkb2NzLWxpc3QsICNzdGFjay1saXN0IHVsI2RvY3MtbGlzdCwgI3RoZW1lLWxpc3QgbGkgdWwjZG9jcy1saXN0LCB1bCNkb2NzLWxpc3QgdWwjZG9jcy1saXN0IHsKICAgIHdpZHRoOiBhdXRvOwogICAgbWFyZ2luLWxlZnQ6IC0wLjkzNzVyZW07CiAgICBtYXJnaW4tcmlnaHQ6IC0wLjkzNzVyZW07CiAgICBtYXJnaW4tdG9wOiAwOwogICAgbWFyZ2luLWJvdHRvbTogMDsKICAgIG1heC13aWR0aDogbm9uZTsKICAgICp6b29tOiAxOyB9CiAgICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dsb2JhbC5zY3NzICovCiAgICAucm93IC5yb3c6YmVmb3JlLCAjc3RhY2stbGlzdCAucm93OmJlZm9yZSwgI3RoZW1lLWxpc3QgbGkgLnJvdzpiZWZvcmUsIHVsI2RvY3MtbGlzdCAucm93OmJlZm9yZSwgLnJvdyAjc3RhY2stbGlzdDpiZWZvcmUsICNzdGFjay1saXN0ICNzdGFjay1saXN0OmJlZm9yZSwgI3RoZW1lLWxpc3QgbGkgI3N0YWNrLWxpc3Q6YmVmb3JlLCB1bCNkb2NzLWxpc3QgI3N0YWNrLWxpc3Q6YmVmb3JlLCAucm93ICN0aGVtZS1saXN0IGxpOmJlZm9yZSwgI3RoZW1lLWxpc3QgLnJvdyBsaTpiZWZvcmUsICNzdGFjay1saXN0ICN0aGVtZS1saXN0IGxpOmJlZm9yZSwgI3RoZW1lLWxpc3QgI3N0YWNrLWxpc3QgbGk6YmVmb3JlLCAjdGhlbWUtbGlzdCBsaSBsaTpiZWZvcmUsIHVsI2RvY3MtbGlzdCAjdGhlbWUtbGlzdCBsaTpiZWZvcmUsICN0aGVtZS1saXN0IHVsI2RvY3MtbGlzdCBsaTpiZWZvcmUsIC5yb3cgdWwjZG9jcy1saXN0OmJlZm9yZSwgI3N0YWNrLWxpc3QgdWwjZG9jcy1saXN0OmJlZm9yZSwgI3RoZW1lLWxpc3QgbGkgdWwjZG9jcy1saXN0OmJlZm9yZSwgdWwjZG9jcy1saXN0IHVsI2RvY3MtbGlzdDpiZWZvcmUsIC5yb3cgLnJvdzphZnRlciwgI3N0YWNrLWxpc3QgLnJvdzphZnRlciwgI3RoZW1lLWxpc3QgbGkgLnJvdzphZnRlciwgdWwjZG9jcy1saXN0IC5yb3c6YWZ0ZXIsIC5yb3cgI3N0YWNrLWxpc3Q6YWZ0ZXIsICNzdGFjay1saXN0ICNzdGFjay1saXN0OmFmdGVyLCAjdGhlbWUtbGlzdCBsaSAjc3RhY2stbGlzdDphZnRlciwgdWwjZG9jcy1saXN0ICNzdGFjay1saXN0OmFmdGVyLCAucm93ICN0aGVtZS1saXN0IGxpOmFmdGVyLCAjdGhlbWUtbGlzdCAucm93IGxpOmFmdGVyLCAjc3RhY2stbGlzdCAjdGhlbWUtbGlzdCBsaTphZnRlciwgI3RoZW1lLWxpc3QgI3N0YWNrLWxpc3QgbGk6YWZ0ZXIsICN0aGVtZS1saXN0IGxpIGxpOmFmdGVyLCB1bCNkb2NzLWxpc3QgI3RoZW1lLWxpc3QgbGk6YWZ0ZXIsICN0aGVtZS1saXN0IHVsI2RvY3MtbGlzdCBsaTphZnRlciwgLnJvdyB1bCNkb2NzLWxpc3Q6YWZ0ZXIsICNzdGFjay1saXN0IHVsI2RvY3MtbGlzdDphZnRlciwgI3RoZW1lLWxpc3QgbGkgdWwjZG9jcy1saXN0OmFmdGVyLCB1bCNkb2NzLWxpc3QgdWwjZG9jcy1saXN0OmFmdGVyIHsKICAgICAgY29udGVudDogIiAiOwogICAgICBkaXNwbGF5OiB0YWJsZTsgfQogICAgLyogbGluZSAxNjYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19nbG9iYWwuc2NzcyAqLwogICAgLnJvdyAucm93OmFmdGVyLCAjc3RhY2stbGlzdCAucm93OmFmdGVyLCAjdGhlbWUtbGlzdCBsaSAucm93OmFmdGVyLCB1bCNkb2NzLWxpc3QgLnJvdzphZnRlciwgLnJvdyAjc3RhY2stbGlzdDphZnRlciwgI3N0YWNrLWxpc3QgI3N0YWNrLWxpc3Q6YWZ0ZXIsICN0aGVtZS1saXN0IGxpICNzdGFjay1saXN0OmFmdGVyLCB1bCNkb2NzLWxpc3QgI3N0YWNrLWxpc3Q6YWZ0ZXIsIC5yb3cgI3RoZW1lLWxpc3QgbGk6YWZ0ZXIsICN0aGVtZS1saXN0IC5yb3cgbGk6YWZ0ZXIsICNzdGFjay1saXN0ICN0aGVtZS1saXN0IGxpOmFmdGVyLCAjdGhlbWUtbGlzdCAjc3RhY2stbGlzdCBsaTphZnRlciwgI3RoZW1lLWxpc3QgbGkgbGk6YWZ0ZXIsIHVsI2RvY3MtbGlzdCAjdGhlbWUtbGlzdCBsaTphZnRlciwgI3RoZW1lLWxpc3QgdWwjZG9jcy1saXN0IGxpOmFmdGVyLCAucm93IHVsI2RvY3MtbGlzdDphZnRlciwgI3N0YWNrLWxpc3QgdWwjZG9jcy1saXN0OmFmdGVyLCAjdGhlbWUtbGlzdCBsaSB1bCNkb2NzLWxpc3Q6YWZ0ZXIsIHVsI2RvY3MtbGlzdCB1bCNkb2NzLWxpc3Q6YWZ0ZXIgewogICAgICBjbGVhcjogYm90aDsgfQogICAgLyogbGluZSAyMDEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAgIC5yb3cgLnJvdy5jb2xsYXBzZSwgI3N0YWNrLWxpc3QgLnJvdy5jb2xsYXBzZSwgI3RoZW1lLWxpc3QgbGkgLnJvdy5jb2xsYXBzZSwgdWwjZG9jcy1saXN0IC5yb3cuY29sbGFwc2UsIC5yb3cgLmNvbGxhcHNlI3N0YWNrLWxpc3QsICNzdGFjay1saXN0IC5jb2xsYXBzZSNzdGFjay1saXN0LCAjdGhlbWUtbGlzdCBsaSAuY29sbGFwc2Ujc3RhY2stbGlzdCwgdWwjZG9jcy1saXN0IC5jb2xsYXBzZSNzdGFjay1saXN0LCAucm93ICN0aGVtZS1saXN0IGxpLmNvbGxhcHNlLCAjdGhlbWUtbGlzdCAucm93IGxpLmNvbGxhcHNlLCAjc3RhY2stbGlzdCAjdGhlbWUtbGlzdCBsaS5jb2xsYXBzZSwgI3RoZW1lLWxpc3QgI3N0YWNrLWxpc3QgbGkuY29sbGFwc2UsICN0aGVtZS1saXN0IGxpIGxpLmNvbGxhcHNlLCB1bCNkb2NzLWxpc3QgI3RoZW1lLWxpc3QgbGkuY29sbGFwc2UsICN0aGVtZS1saXN0IHVsI2RvY3MtbGlzdCBsaS5jb2xsYXBzZSwgLnJvdyB1bC5jb2xsYXBzZSNkb2NzLWxpc3QsICNzdGFjay1saXN0IHVsLmNvbGxhcHNlI2RvY3MtbGlzdCwgI3RoZW1lLWxpc3QgbGkgdWwuY29sbGFwc2UjZG9jcy1saXN0LCB1bCNkb2NzLWxpc3QgdWwuY29sbGFwc2UjZG9jcy1saXN0IHsKICAgICAgd2lkdGg6IGF1dG87CiAgICAgIG1hcmdpbjogMDsKICAgICAgbWF4LXdpZHRoOiBub25lOwogICAgICAqem9vbTogMTsgfQogICAgICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dsb2JhbC5zY3NzICovCiAgICAgIC5yb3cgLnJvdy5jb2xsYXBzZTpiZWZvcmUsICNzdGFjay1saXN0IC5yb3cuY29sbGFwc2U6YmVmb3JlLCAjdGhlbWUtbGlzdCBsaSAucm93LmNvbGxhcHNlOmJlZm9yZSwgdWwjZG9jcy1saXN0IC5yb3cuY29sbGFwc2U6YmVmb3JlLCAucm93IC5jb2xsYXBzZSNzdGFjay1saXN0OmJlZm9yZSwgI3N0YWNrLWxpc3QgLmNvbGxhcHNlI3N0YWNrLWxpc3Q6YmVmb3JlLCAjdGhlbWUtbGlzdCBsaSAuY29sbGFwc2Ujc3RhY2stbGlzdDpiZWZvcmUsIHVsI2RvY3MtbGlzdCAuY29sbGFwc2Ujc3RhY2stbGlzdDpiZWZvcmUsIC5yb3cgI3RoZW1lLWxpc3QgbGkuY29sbGFwc2U6YmVmb3JlLCAjdGhlbWUtbGlzdCAucm93IGxpLmNvbGxhcHNlOmJlZm9yZSwgI3N0YWNrLWxpc3QgI3RoZW1lLWxpc3QgbGkuY29sbGFwc2U6YmVmb3JlLCAjdGhlbWUtbGlzdCAjc3RhY2stbGlzdCBsaS5jb2xsYXBzZTpiZWZvcmUsICN0aGVtZS1saXN0IGxpIGxpLmNvbGxhcHNlOmJlZm9yZSwgdWwjZG9jcy1saXN0ICN0aGVtZS1saXN0IGxpLmNvbGxhcHNlOmJlZm9yZSwgI3RoZW1lLWxpc3QgdWwjZG9jcy1saXN0IGxpLmNvbGxhcHNlOmJlZm9yZSwgLnJvdyB1bC5jb2xsYXBzZSNkb2NzLWxpc3Q6YmVmb3JlLCAjc3RhY2stbGlzdCB1bC5jb2xsYXBzZSNkb2NzLWxpc3Q6YmVmb3JlLCAjdGhlbWUtbGlzdCBsaSB1bC5jb2xsYXBzZSNkb2NzLWxpc3Q6YmVmb3JlLCB1bCNkb2NzLWxpc3QgdWwuY29sbGFwc2UjZG9jcy1saXN0OmJlZm9yZSwgLnJvdyAucm93LmNvbGxhcHNlOmFmdGVyLCAjc3RhY2stbGlzdCAucm93LmNvbGxhcHNlOmFmdGVyLCAjdGhlbWUtbGlzdCBsaSAucm93LmNvbGxhcHNlOmFmdGVyLCB1bCNkb2NzLWxpc3QgLnJvdy5jb2xsYXBzZTphZnRlciwgLnJvdyAuY29sbGFwc2Ujc3RhY2stbGlzdDphZnRlciwgI3N0YWNrLWxpc3QgLmNvbGxhcHNlI3N0YWNrLWxpc3Q6YWZ0ZXIsICN0aGVtZS1saXN0IGxpIC5jb2xsYXBzZSNzdGFjay1saXN0OmFmdGVyLCB1bCNkb2NzLWxpc3QgLmNvbGxhcHNlI3N0YWNrLWxpc3Q6YWZ0ZXIsIC5yb3cgI3RoZW1lLWxpc3QgbGkuY29sbGFwc2U6YWZ0ZXIsICN0aGVtZS1saXN0IC5yb3cgbGkuY29sbGFwc2U6YWZ0ZXIsICNzdGFjay1saXN0ICN0aGVtZS1saXN0IGxpLmNvbGxhcHNlOmFmdGVyLCAjdGhlbWUtbGlzdCAjc3RhY2stbGlzdCBsaS5jb2xsYXBzZTphZnRlciwgI3RoZW1lLWxpc3QgbGkgbGkuY29sbGFwc2U6YWZ0ZXIsIHVsI2RvY3MtbGlzdCAjdGhlbWUtbGlzdCBsaS5jb2xsYXBzZTphZnRlciwgI3RoZW1lLWxpc3QgdWwjZG9jcy1saXN0IGxpLmNvbGxhcHNlOmFmdGVyLCAucm93IHVsLmNvbGxhcHNlI2RvY3MtbGlzdDphZnRlciwgI3N0YWNrLWxpc3QgdWwuY29sbGFwc2UjZG9jcy1saXN0OmFmdGVyLCAjdGhlbWUtbGlzdCBsaSB1bC5jb2xsYXBzZSNkb2NzLWxpc3Q6YWZ0ZXIsIHVsI2RvY3MtbGlzdCB1bC5jb2xsYXBzZSNkb2NzLWxpc3Q6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICIgIjsKICAgICAgICBkaXNwbGF5OiB0YWJsZTsgfQogICAgICAvKiBsaW5lIDE2NiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dsb2JhbC5zY3NzICovCiAgICAgIC5yb3cgLnJvdy5jb2xsYXBzZTphZnRlciwgI3N0YWNrLWxpc3QgLnJvdy5jb2xsYXBzZTphZnRlciwgI3RoZW1lLWxpc3QgbGkgLnJvdy5jb2xsYXBzZTphZnRlciwgdWwjZG9jcy1saXN0IC5yb3cuY29sbGFwc2U6YWZ0ZXIsIC5yb3cgLmNvbGxhcHNlI3N0YWNrLWxpc3Q6YWZ0ZXIsICNzdGFjay1saXN0IC5jb2xsYXBzZSNzdGFjay1saXN0OmFmdGVyLCAjdGhlbWUtbGlzdCBsaSAuY29sbGFwc2Ujc3RhY2stbGlzdDphZnRlciwgdWwjZG9jcy1saXN0IC5jb2xsYXBzZSNzdGFjay1saXN0OmFmdGVyLCAucm93ICN0aGVtZS1saXN0IGxpLmNvbGxhcHNlOmFmdGVyLCAjdGhlbWUtbGlzdCAucm93IGxpLmNvbGxhcHNlOmFmdGVyLCAjc3RhY2stbGlzdCAjdGhlbWUtbGlzdCBsaS5jb2xsYXBzZTphZnRlciwgI3RoZW1lLWxpc3QgI3N0YWNrLWxpc3QgbGkuY29sbGFwc2U6YWZ0ZXIsICN0aGVtZS1saXN0IGxpIGxpLmNvbGxhcHNlOmFmdGVyLCB1bCNkb2NzLWxpc3QgI3RoZW1lLWxpc3QgbGkuY29sbGFwc2U6YWZ0ZXIsICN0aGVtZS1saXN0IHVsI2RvY3MtbGlzdCBsaS5jb2xsYXBzZTphZnRlciwgLnJvdyB1bC5jb2xsYXBzZSNkb2NzLWxpc3Q6YWZ0ZXIsICNzdGFjay1saXN0IHVsLmNvbGxhcHNlI2RvY3MtbGlzdDphZnRlciwgI3RoZW1lLWxpc3QgbGkgdWwuY29sbGFwc2UjZG9jcy1saXN0OmFmdGVyLCB1bCNkb2NzLWxpc3QgdWwuY29sbGFwc2UjZG9jcy1saXN0OmFmdGVyIHsKICAgICAgICBjbGVhcjogYm90aDsgfQoKLyogbGluZSAyMDYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KLmNvbHVtbiwKLmNvbHVtbnMsCiNzdGFjay1saXN0IGxpLAojdGhlbWUtbGlzdCBsaSA+IGRpdiwKdWwjZG9jcy1saXN0ID4gbGkgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBwYWRkaW5nLWxlZnQ6IDAuOTM3NXJlbTsKICBwYWRkaW5nLXJpZ2h0OiAwLjkzNzVyZW07CiAgd2lkdGg6IDEwMCU7CiAgZmxvYXQ6IGxlZnQ7IH0KCkBtZWRpYSBvbmx5IHNjcmVlbiB7CiAgLyogbGluZSAxNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuc21hbGwtcHVzaC0xIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDguMzMzMzMlOwogICAgcmlnaHQ6IGF1dG87IH0KCiAgLyogbGluZSAxNTEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuc21hbGwtcHVsbC0xIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHJpZ2h0OiA4LjMzMzMzJTsKICAgIGxlZnQ6IGF1dG87IH0KCiAgLyogbGluZSAxNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuc21hbGwtcHVzaC0yIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDE2LjY2NjY3JTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnNtYWxsLXB1bGwtMiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICByaWdodDogMTYuNjY2NjclOwogICAgbGVmdDogYXV0bzsgfQoKICAvKiBsaW5lIDE0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5zbWFsbC1wdXNoLTMgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbGVmdDogMjUlOwogICAgcmlnaHQ6IGF1dG87IH0KCiAgLyogbGluZSAxNTEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuc21hbGwtcHVsbC0zIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHJpZ2h0OiAyNSU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnNtYWxsLXB1c2gtNCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBsZWZ0OiAzMy4zMzMzMyU7CiAgICByaWdodDogYXV0bzsgfQoKICAvKiBsaW5lIDE1MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5zbWFsbC1wdWxsLTQgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcmlnaHQ6IDMzLjMzMzMzJTsKICAgIGxlZnQ6IGF1dG87IH0KCiAgLyogbGluZSAxNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuc21hbGwtcHVzaC01IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDQxLjY2NjY3JTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnNtYWxsLXB1bGwtNSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICByaWdodDogNDEuNjY2NjclOwogICAgbGVmdDogYXV0bzsgfQoKICAvKiBsaW5lIDE0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5zbWFsbC1wdXNoLTYgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbGVmdDogNTAlOwogICAgcmlnaHQ6IGF1dG87IH0KCiAgLyogbGluZSAxNTEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuc21hbGwtcHVsbC02IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHJpZ2h0OiA1MCU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnNtYWxsLXB1c2gtNyB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBsZWZ0OiA1OC4zMzMzMyU7CiAgICByaWdodDogYXV0bzsgfQoKICAvKiBsaW5lIDE1MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5zbWFsbC1wdWxsLTcgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcmlnaHQ6IDU4LjMzMzMzJTsKICAgIGxlZnQ6IGF1dG87IH0KCiAgLyogbGluZSAxNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuc21hbGwtcHVzaC04IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDY2LjY2NjY3JTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnNtYWxsLXB1bGwtOCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICByaWdodDogNjYuNjY2NjclOwogICAgbGVmdDogYXV0bzsgfQoKICAvKiBsaW5lIDE0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5zbWFsbC1wdXNoLTkgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbGVmdDogNzUlOwogICAgcmlnaHQ6IGF1dG87IH0KCiAgLyogbGluZSAxNTEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuc21hbGwtcHVsbC05IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHJpZ2h0OiA3NSU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnNtYWxsLXB1c2gtMTAgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbGVmdDogODMuMzMzMzMlOwogICAgcmlnaHQ6IGF1dG87IH0KCiAgLyogbGluZSAxNTEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuc21hbGwtcHVsbC0xMCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICByaWdodDogODMuMzMzMzMlOwogICAgbGVmdDogYXV0bzsgfQoKICAvKiBsaW5lIDE0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5zbWFsbC1wdXNoLTExIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDkxLjY2NjY3JTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnNtYWxsLXB1bGwtMTEgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcmlnaHQ6IDkxLjY2NjY3JTsKICAgIGxlZnQ6IGF1dG87IH0KCiAgLyogbGluZSAxNTcsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuY29sdW1uLAogIC5jb2x1bW5zLAogICNzdGFjay1saXN0IGxpLAogICN0aGVtZS1saXN0IGxpID4gZGl2LAogIHVsI2RvY3MtbGlzdCA+IGxpIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHBhZGRpbmctbGVmdDogMC45Mzc1cmVtOwogICAgcGFkZGluZy1yaWdodDogMC45Mzc1cmVtOwogICAgZmxvYXQ6IGxlZnQ7IH0KCiAgLyogbGluZSAxNjEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuc21hbGwtMSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogOC4zMzMzMyU7IH0KCiAgLyogbGluZSAxNjEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuc21hbGwtMiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogMTYuNjY2NjclOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnNtYWxsLTMgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDI1JTsgfQoKICAvKiBsaW5lIDE2MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5zbWFsbC00IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiAzMy4zMzMzMyU7IH0KCiAgLyogbGluZSAxNjEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuc21hbGwtNSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogNDEuNjY2NjclOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnNtYWxsLTYsICNzdGFjay1saXN0IGxpIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiA1MCU7IH0KCiAgLyogbGluZSAxNjEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuc21hbGwtNyB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogNTguMzMzMzMlOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnNtYWxsLTggewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDY2LjY2NjY3JTsgfQoKICAvKiBsaW5lIDE2MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5zbWFsbC05IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiA3NSU7IH0KCiAgLyogbGluZSAxNjEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuc21hbGwtMTAgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDgzLjMzMzMzJTsgfQoKICAvKiBsaW5lIDE2MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5zbWFsbC0xMSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogOTEuNjY2NjclOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnNtYWxsLTEyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiAxMDAlOyB9CgogIC8qIGxpbmUgMTY1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnNtYWxsLW9mZnNldC0wIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiAwJTsgfQoKICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5zbWFsbC1vZmZzZXQtMSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtYXJnaW4tbGVmdDogOC4zMzMzMyU7IH0KCiAgLyogbGluZSAxNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuc21hbGwtb2Zmc2V0LTIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY3JTsgfQoKICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5zbWFsbC1vZmZzZXQtMyB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtYXJnaW4tbGVmdDogMjUlOyB9CgogIC8qIGxpbmUgMTY1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnNtYWxsLW9mZnNldC00IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMyU7IH0KCiAgLyogbGluZSAxNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuc21hbGwtb2Zmc2V0LTUgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY3JTsgfQoKICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5zbWFsbC1vZmZzZXQtNiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtYXJnaW4tbGVmdDogNTAlOyB9CgogIC8qIGxpbmUgMTY1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnNtYWxsLW9mZnNldC03IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMyU7IH0KCiAgLyogbGluZSAxNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuc21hbGwtb2Zmc2V0LTggewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjY3JTsgfQoKICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5zbWFsbC1vZmZzZXQtOSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtYXJnaW4tbGVmdDogNzUlOyB9CgogIC8qIGxpbmUgMTY1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnNtYWxsLW9mZnNldC0xMCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtYXJnaW4tbGVmdDogODMuMzMzMzMlOyB9CgogIC8qIGxpbmUgMTY4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgW2NsYXNzKj0iY29sdW1uIl0gKyBbY2xhc3MqPSJjb2x1bW4iXTpsYXN0LWNoaWxkIHsKICAgIGZsb2F0OiByaWdodDsgfQoKICAvKiBsaW5lIDE2OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIFtjbGFzcyo9ImNvbHVtbiJdICsgW2NsYXNzKj0iY29sdW1uIl0uZW5kIHsKICAgIGZsb2F0OiBsZWZ0OyB9CgogIC8qIGxpbmUgMTcyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLmNvbHVtbi5zbWFsbC1jZW50ZXJlZCwKICAuY29sdW1ucy5zbWFsbC1jZW50ZXJlZCwKICAjc3RhY2stbGlzdCBsaS5zbWFsbC1jZW50ZXJlZCwKICAjdGhlbWUtbGlzdCBsaSA+IGRpdi5zbWFsbC1jZW50ZXJlZCwKICB1bCNkb2NzLWxpc3QgPiBsaS5zbWFsbC1jZW50ZXJlZCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIG1hcmdpbi1yaWdodDogYXV0bzsKICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7IH0KCiAgLyogbGluZSAxNzUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuY29sdW1uLnNtYWxsLXVuY2VudGVyZWQsCiAgLmNvbHVtbnMuc21hbGwtdW5jZW50ZXJlZCwKICAjc3RhY2stbGlzdCBsaS5zbWFsbC11bmNlbnRlcmVkLAogICN0aGVtZS1saXN0IGxpID4gZGl2LnNtYWxsLXVuY2VudGVyZWQsCiAgdWwjZG9jcy1saXN0ID4gbGkuc21hbGwtdW5jZW50ZXJlZCB7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIG1hcmdpbi1yaWdodDogMDsKICAgIGZsb2F0OiBsZWZ0ICFpbXBvcnRhbnQ7IH0KCiAgLyogbGluZSAxODIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuY29sdW1uLnNtYWxsLXVuY2VudGVyZWQub3Bwb3NpdGUsCiAgLmNvbHVtbnMuc21hbGwtdW5jZW50ZXJlZC5vcHBvc2l0ZSwKICAjc3RhY2stbGlzdCBsaS5zbWFsbC11bmNlbnRlcmVkLm9wcG9zaXRlLAogICN0aGVtZS1saXN0IGxpID4gZGl2LnNtYWxsLXVuY2VudGVyZWQub3Bwb3NpdGUsCiAgdWwjZG9jcy1saXN0ID4gbGkuc21hbGwtdW5jZW50ZXJlZC5vcHBvc2l0ZSB7CiAgICBmbG9hdDogcmlnaHQgIWltcG9ydGFudDsgfSB9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDAuMDYzZW0pIHsKICAvKiBsaW5lIDE0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5tZWRpdW0tcHVzaC0xIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDguMzMzMzMlOwogICAgcmlnaHQ6IGF1dG87IH0KCiAgLyogbGluZSAxNTEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubWVkaXVtLXB1bGwtMSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICByaWdodDogOC4zMzMzMyU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLm1lZGl1bS1wdXNoLTIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbGVmdDogMTYuNjY2NjclOwogICAgcmlnaHQ6IGF1dG87IH0KCiAgLyogbGluZSAxNTEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubWVkaXVtLXB1bGwtMiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICByaWdodDogMTYuNjY2NjclOwogICAgbGVmdDogYXV0bzsgfQoKICAvKiBsaW5lIDE0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5tZWRpdW0tcHVzaC0zIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDI1JTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLm1lZGl1bS1wdWxsLTMgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcmlnaHQ6IDI1JTsKICAgIGxlZnQ6IGF1dG87IH0KCiAgLyogbGluZSAxNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubWVkaXVtLXB1c2gtNCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBsZWZ0OiAzMy4zMzMzMyU7CiAgICByaWdodDogYXV0bzsgfQoKICAvKiBsaW5lIDE1MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5tZWRpdW0tcHVsbC00IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHJpZ2h0OiAzMy4zMzMzMyU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLm1lZGl1bS1wdXNoLTUgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbGVmdDogNDEuNjY2NjclOwogICAgcmlnaHQ6IGF1dG87IH0KCiAgLyogbGluZSAxNTEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubWVkaXVtLXB1bGwtNSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICByaWdodDogNDEuNjY2NjclOwogICAgbGVmdDogYXV0bzsgfQoKICAvKiBsaW5lIDE0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5tZWRpdW0tcHVzaC02IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDUwJTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLm1lZGl1bS1wdWxsLTYgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcmlnaHQ6IDUwJTsKICAgIGxlZnQ6IGF1dG87IH0KCiAgLyogbGluZSAxNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubWVkaXVtLXB1c2gtNyB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBsZWZ0OiA1OC4zMzMzMyU7CiAgICByaWdodDogYXV0bzsgfQoKICAvKiBsaW5lIDE1MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5tZWRpdW0tcHVsbC03IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHJpZ2h0OiA1OC4zMzMzMyU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLm1lZGl1bS1wdXNoLTggewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbGVmdDogNjYuNjY2NjclOwogICAgcmlnaHQ6IGF1dG87IH0KCiAgLyogbGluZSAxNTEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubWVkaXVtLXB1bGwtOCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICByaWdodDogNjYuNjY2NjclOwogICAgbGVmdDogYXV0bzsgfQoKICAvKiBsaW5lIDE0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5tZWRpdW0tcHVzaC05IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDc1JTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLm1lZGl1bS1wdWxsLTkgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcmlnaHQ6IDc1JTsKICAgIGxlZnQ6IGF1dG87IH0KCiAgLyogbGluZSAxNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubWVkaXVtLXB1c2gtMTAgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbGVmdDogODMuMzMzMzMlOwogICAgcmlnaHQ6IGF1dG87IH0KCiAgLyogbGluZSAxNTEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubWVkaXVtLXB1bGwtMTAgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcmlnaHQ6IDgzLjMzMzMzJTsKICAgIGxlZnQ6IGF1dG87IH0KCiAgLyogbGluZSAxNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubWVkaXVtLXB1c2gtMTEgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbGVmdDogOTEuNjY2NjclOwogICAgcmlnaHQ6IGF1dG87IH0KCiAgLyogbGluZSAxNTEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubWVkaXVtLXB1bGwtMTEgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcmlnaHQ6IDkxLjY2NjY3JTsKICAgIGxlZnQ6IGF1dG87IH0KCiAgLyogbGluZSAxNTcsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuY29sdW1uLAogIC5jb2x1bW5zLAogICNzdGFjay1saXN0IGxpLAogICN0aGVtZS1saXN0IGxpID4gZGl2LAogIHVsI2RvY3MtbGlzdCA+IGxpIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHBhZGRpbmctbGVmdDogMC45Mzc1cmVtOwogICAgcGFkZGluZy1yaWdodDogMC45Mzc1cmVtOwogICAgZmxvYXQ6IGxlZnQ7IH0KCiAgLyogbGluZSAxNjEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubWVkaXVtLTEgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDguMzMzMzMlOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLm1lZGl1bS0yLCAjdGhlbWUtbGlzdCBsaSA+IGRpdi50aGVtZS1pY29uIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiAxNi42NjY2NyU7IH0KCiAgLyogbGluZSAxNjEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubWVkaXVtLTMgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDI1JTsgfQoKICAvKiBsaW5lIDE2MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5tZWRpdW0tNCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogMzMuMzMzMzMlOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLm1lZGl1bS01IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiA0MS42NjY2NyU7IH0KCiAgLyogbGluZSAxNjEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubWVkaXVtLTYgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDUwJTsgfQoKICAvKiBsaW5lIDE2MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5tZWRpdW0tNyB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogNTguMzMzMzMlOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLm1lZGl1bS04IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiA2Ni42NjY2NyU7IH0KCiAgLyogbGluZSAxNjEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubWVkaXVtLTkgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDc1JTsgfQoKICAvKiBsaW5lIDE2MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5tZWRpdW0tMTAsICN0aGVtZS1saXN0IGxpID4gZGl2IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiA4My4zMzMzMyU7IH0KCiAgLyogbGluZSAxNjEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubWVkaXVtLTExIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiA5MS42NjY2NyU7IH0KCiAgLyogbGluZSAxNjEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubWVkaXVtLTEyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiAxMDAlOyB9CgogIC8qIGxpbmUgMTY1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLm1lZGl1bS1vZmZzZXQtMCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtYXJnaW4tbGVmdDogMCU7IH0KCiAgLyogbGluZSAxNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubWVkaXVtLW9mZnNldC0xIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMzJTsgfQoKICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5tZWRpdW0tb2Zmc2V0LTIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY3JTsgfQoKICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5tZWRpdW0tb2Zmc2V0LTMgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWFyZ2luLWxlZnQ6IDI1JTsgfQoKICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5tZWRpdW0tb2Zmc2V0LTQgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzJTsgfQoKICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5tZWRpdW0tb2Zmc2V0LTUgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY3JTsgfQoKICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5tZWRpdW0tb2Zmc2V0LTYgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWFyZ2luLWxlZnQ6IDUwJTsgfQoKICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5tZWRpdW0tb2Zmc2V0LTcgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzJTsgfQoKICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5tZWRpdW0tb2Zmc2V0LTggewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjY3JTsgfQoKICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5tZWRpdW0tb2Zmc2V0LTkgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWFyZ2luLWxlZnQ6IDc1JTsgfQoKICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5tZWRpdW0tb2Zmc2V0LTEwIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzMyU7IH0KCiAgLyogbGluZSAxNjgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICBbY2xhc3MqPSJjb2x1bW4iXSArIFtjbGFzcyo9ImNvbHVtbiJdOmxhc3QtY2hpbGQgewogICAgZmxvYXQ6IHJpZ2h0OyB9CgogIC8qIGxpbmUgMTY5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgW2NsYXNzKj0iY29sdW1uIl0gKyBbY2xhc3MqPSJjb2x1bW4iXS5lbmQgewogICAgZmxvYXQ6IGxlZnQ7IH0KCiAgLyogbGluZSAxNzIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuY29sdW1uLm1lZGl1bS1jZW50ZXJlZCwKICAuY29sdW1ucy5tZWRpdW0tY2VudGVyZWQsCiAgI3N0YWNrLWxpc3QgbGkubWVkaXVtLWNlbnRlcmVkLAogICN0aGVtZS1saXN0IGxpID4gZGl2Lm1lZGl1bS1jZW50ZXJlZCwKICB1bCNkb2NzLWxpc3QgPiBsaS5tZWRpdW0tY2VudGVyZWQgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87CiAgICBmbG9hdDogbm9uZSAhaW1wb3J0YW50OyB9CgogIC8qIGxpbmUgMTc1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLmNvbHVtbi5tZWRpdW0tdW5jZW50ZXJlZCwKICAuY29sdW1ucy5tZWRpdW0tdW5jZW50ZXJlZCwKICAjc3RhY2stbGlzdCBsaS5tZWRpdW0tdW5jZW50ZXJlZCwKICAjdGhlbWUtbGlzdCBsaSA+IGRpdi5tZWRpdW0tdW5jZW50ZXJlZCwKICB1bCNkb2NzLWxpc3QgPiBsaS5tZWRpdW0tdW5jZW50ZXJlZCB7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIG1hcmdpbi1yaWdodDogMDsKICAgIGZsb2F0OiBsZWZ0ICFpbXBvcnRhbnQ7IH0KCiAgLyogbGluZSAxODIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuY29sdW1uLm1lZGl1bS11bmNlbnRlcmVkLm9wcG9zaXRlLAogIC5jb2x1bW5zLm1lZGl1bS11bmNlbnRlcmVkLm9wcG9zaXRlLAogICNzdGFjay1saXN0IGxpLm1lZGl1bS11bmNlbnRlcmVkLm9wcG9zaXRlLAogICN0aGVtZS1saXN0IGxpID4gZGl2Lm1lZGl1bS11bmNlbnRlcmVkLm9wcG9zaXRlLAogIHVsI2RvY3MtbGlzdCA+IGxpLm1lZGl1bS11bmNlbnRlcmVkLm9wcG9zaXRlIHsKICAgIGZsb2F0OiByaWdodCAhaW1wb3J0YW50OyB9CgogIC8qIGxpbmUgMjE2LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnB1c2gtMSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBsZWZ0OiA4LjMzMzMzJTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMjE5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnB1bGwtMSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICByaWdodDogOC4zMzMzMyU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMjE2LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnB1c2gtMiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBsZWZ0OiAxNi42NjY2NyU7CiAgICByaWdodDogYXV0bzsgfQoKICAvKiBsaW5lIDIxOSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5wdWxsLTIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcmlnaHQ6IDE2LjY2NjY3JTsKICAgIGxlZnQ6IGF1dG87IH0KCiAgLyogbGluZSAyMTYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAucHVzaC0zIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDI1JTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMjE5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnB1bGwtMyB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICByaWdodDogMjUlOwogICAgbGVmdDogYXV0bzsgfQoKICAvKiBsaW5lIDIxNiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5wdXNoLTQgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbGVmdDogMzMuMzMzMzMlOwogICAgcmlnaHQ6IGF1dG87IH0KCiAgLyogbGluZSAyMTksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAucHVsbC00IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHJpZ2h0OiAzMy4zMzMzMyU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMjE2LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnB1c2gtNSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBsZWZ0OiA0MS42NjY2NyU7CiAgICByaWdodDogYXV0bzsgfQoKICAvKiBsaW5lIDIxOSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5wdWxsLTUgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcmlnaHQ6IDQxLjY2NjY3JTsKICAgIGxlZnQ6IGF1dG87IH0KCiAgLyogbGluZSAyMTYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAucHVzaC02IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDUwJTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMjE5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnB1bGwtNiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICByaWdodDogNTAlOwogICAgbGVmdDogYXV0bzsgfQoKICAvKiBsaW5lIDIxNiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5wdXNoLTcgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbGVmdDogNTguMzMzMzMlOwogICAgcmlnaHQ6IGF1dG87IH0KCiAgLyogbGluZSAyMTksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAucHVsbC03IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHJpZ2h0OiA1OC4zMzMzMyU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMjE2LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnB1c2gtOCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBsZWZ0OiA2Ni42NjY2NyU7CiAgICByaWdodDogYXV0bzsgfQoKICAvKiBsaW5lIDIxOSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5wdWxsLTggewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcmlnaHQ6IDY2LjY2NjY3JTsKICAgIGxlZnQ6IGF1dG87IH0KCiAgLyogbGluZSAyMTYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAucHVzaC05IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDc1JTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMjE5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnB1bGwtOSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICByaWdodDogNzUlOwogICAgbGVmdDogYXV0bzsgfQoKICAvKiBsaW5lIDIxNiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5wdXNoLTEwIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDgzLjMzMzMzJTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMjE5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnB1bGwtMTAgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcmlnaHQ6IDgzLjMzMzMzJTsKICAgIGxlZnQ6IGF1dG87IH0KCiAgLyogbGluZSAyMTYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAucHVzaC0xMSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBsZWZ0OiA5MS42NjY2NyU7CiAgICByaWdodDogYXV0bzsgfQoKICAvKiBsaW5lIDIxOSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5wdWxsLTExIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHJpZ2h0OiA5MS42NjY2NyU7CiAgICBsZWZ0OiBhdXRvOyB9IH0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NC4wNjNlbSkgewogIC8qIGxpbmUgMTQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLmxhcmdlLXB1c2gtMSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBsZWZ0OiA4LjMzMzMzJTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLmxhcmdlLXB1bGwtMSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICByaWdodDogOC4zMzMzMyU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLmxhcmdlLXB1c2gtMiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBsZWZ0OiAxNi42NjY2NyU7CiAgICByaWdodDogYXV0bzsgfQoKICAvKiBsaW5lIDE1MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5sYXJnZS1wdWxsLTIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcmlnaHQ6IDE2LjY2NjY3JTsKICAgIGxlZnQ6IGF1dG87IH0KCiAgLyogbGluZSAxNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubGFyZ2UtcHVzaC0zIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDI1JTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLmxhcmdlLXB1bGwtMyB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICByaWdodDogMjUlOwogICAgbGVmdDogYXV0bzsgfQoKICAvKiBsaW5lIDE0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5sYXJnZS1wdXNoLTQgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbGVmdDogMzMuMzMzMzMlOwogICAgcmlnaHQ6IGF1dG87IH0KCiAgLyogbGluZSAxNTEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubGFyZ2UtcHVsbC00IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHJpZ2h0OiAzMy4zMzMzMyU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLmxhcmdlLXB1c2gtNSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBsZWZ0OiA0MS42NjY2NyU7CiAgICByaWdodDogYXV0bzsgfQoKICAvKiBsaW5lIDE1MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5sYXJnZS1wdWxsLTUgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcmlnaHQ6IDQxLjY2NjY3JTsKICAgIGxlZnQ6IGF1dG87IH0KCiAgLyogbGluZSAxNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubGFyZ2UtcHVzaC02IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDUwJTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLmxhcmdlLXB1bGwtNiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICByaWdodDogNTAlOwogICAgbGVmdDogYXV0bzsgfQoKICAvKiBsaW5lIDE0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5sYXJnZS1wdXNoLTcgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbGVmdDogNTguMzMzMzMlOwogICAgcmlnaHQ6IGF1dG87IH0KCiAgLyogbGluZSAxNTEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubGFyZ2UtcHVsbC03IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHJpZ2h0OiA1OC4zMzMzMyU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLmxhcmdlLXB1c2gtOCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBsZWZ0OiA2Ni42NjY2NyU7CiAgICByaWdodDogYXV0bzsgfQoKICAvKiBsaW5lIDE1MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5sYXJnZS1wdWxsLTggewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcmlnaHQ6IDY2LjY2NjY3JTsKICAgIGxlZnQ6IGF1dG87IH0KCiAgLyogbGluZSAxNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubGFyZ2UtcHVzaC05IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDc1JTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLmxhcmdlLXB1bGwtOSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICByaWdodDogNzUlOwogICAgbGVmdDogYXV0bzsgfQoKICAvKiBsaW5lIDE0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5sYXJnZS1wdXNoLTEwIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDgzLjMzMzMzJTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLmxhcmdlLXB1bGwtMTAgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcmlnaHQ6IDgzLjMzMzMzJTsKICAgIGxlZnQ6IGF1dG87IH0KCiAgLyogbGluZSAxNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubGFyZ2UtcHVzaC0xMSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBsZWZ0OiA5MS42NjY2NyU7CiAgICByaWdodDogYXV0bzsgfQoKICAvKiBsaW5lIDE1MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5sYXJnZS1wdWxsLTExIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHJpZ2h0OiA5MS42NjY2NyU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTU3LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLmNvbHVtbiwKICAuY29sdW1ucywKICAjc3RhY2stbGlzdCBsaSwKICAjdGhlbWUtbGlzdCBsaSA+IGRpdiwKICB1bCNkb2NzLWxpc3QgPiBsaSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBwYWRkaW5nLWxlZnQ6IDAuOTM3NXJlbTsKICAgIHBhZGRpbmctcmlnaHQ6IDAuOTM3NXJlbTsKICAgIGZsb2F0OiBsZWZ0OyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLmxhcmdlLTEgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDguMzMzMzMlOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLmxhcmdlLTIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDE2LjY2NjY3JTsgfQoKICAvKiBsaW5lIDE2MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5sYXJnZS0zLCAjc3RhY2stbGlzdCBsaSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogMjUlOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLmxhcmdlLTQgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDMzLjMzMzMzJTsgfQoKICAvKiBsaW5lIDE2MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5sYXJnZS01IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiA0MS42NjY2NyU7IH0KCiAgLyogbGluZSAxNjEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubGFyZ2UtNiwgdWwjZG9jcy1saXN0ID4gbGkgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDUwJTsgfQoKICAvKiBsaW5lIDE2MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5sYXJnZS03IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiA1OC4zMzMzMyU7IH0KCiAgLyogbGluZSAxNjEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubGFyZ2UtOCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogNjYuNjY2NjclOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLmxhcmdlLTkgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDc1JTsgfQoKICAvKiBsaW5lIDE2MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5sYXJnZS0xMCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogODMuMzMzMzMlOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLmxhcmdlLTExIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiA5MS42NjY2NyU7IH0KCiAgLyogbGluZSAxNjEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubGFyZ2UtMTIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDEwMCU7IH0KCiAgLyogbGluZSAxNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubGFyZ2Utb2Zmc2V0LTAgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWFyZ2luLWxlZnQ6IDAlOyB9CgogIC8qIGxpbmUgMTY1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLmxhcmdlLW9mZnNldC0xIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMzJTsgfQoKICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5sYXJnZS1vZmZzZXQtMiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtYXJnaW4tbGVmdDogMTYuNjY2NjclOyB9CgogIC8qIGxpbmUgMTY1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLmxhcmdlLW9mZnNldC0zIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiAyNSU7IH0KCiAgLyogbGluZSAxNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubGFyZ2Utb2Zmc2V0LTQgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzJTsgfQoKICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5sYXJnZS1vZmZzZXQtNSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjclOyB9CgogIC8qIGxpbmUgMTY1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLmxhcmdlLW9mZnNldC02IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiA1MCU7IH0KCiAgLyogbGluZSAxNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubGFyZ2Utb2Zmc2V0LTcgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzJTsgfQoKICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5sYXJnZS1vZmZzZXQtOCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtYXJnaW4tbGVmdDogNjYuNjY2NjclOyB9CgogIC8qIGxpbmUgMTY1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLmxhcmdlLW9mZnNldC05IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiA3NSU7IH0KCiAgLyogbGluZSAxNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAubGFyZ2Utb2Zmc2V0LTEwIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzMyU7IH0KCiAgLyogbGluZSAxNjgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICBbY2xhc3MqPSJjb2x1bW4iXSArIFtjbGFzcyo9ImNvbHVtbiJdOmxhc3QtY2hpbGQgewogICAgZmxvYXQ6IHJpZ2h0OyB9CgogIC8qIGxpbmUgMTY5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgW2NsYXNzKj0iY29sdW1uIl0gKyBbY2xhc3MqPSJjb2x1bW4iXS5lbmQgewogICAgZmxvYXQ6IGxlZnQ7IH0KCiAgLyogbGluZSAxNzIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuY29sdW1uLmxhcmdlLWNlbnRlcmVkLAogIC5jb2x1bW5zLmxhcmdlLWNlbnRlcmVkLAogICNzdGFjay1saXN0IGxpLmxhcmdlLWNlbnRlcmVkLAogICN0aGVtZS1saXN0IGxpID4gZGl2LmxhcmdlLWNlbnRlcmVkLAogIHVsI2RvY3MtbGlzdCA+IGxpLmxhcmdlLWNlbnRlcmVkIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgbWFyZ2luLXJpZ2h0OiBhdXRvOwogICAgZmxvYXQ6IG5vbmUgIWltcG9ydGFudDsgfQoKICAvKiBsaW5lIDE3NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5jb2x1bW4ubGFyZ2UtdW5jZW50ZXJlZCwKICAuY29sdW1ucy5sYXJnZS11bmNlbnRlcmVkLAogICNzdGFjay1saXN0IGxpLmxhcmdlLXVuY2VudGVyZWQsCiAgI3RoZW1lLWxpc3QgbGkgPiBkaXYubGFyZ2UtdW5jZW50ZXJlZCwKICB1bCNkb2NzLWxpc3QgPiBsaS5sYXJnZS11bmNlbnRlcmVkIHsKICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgbWFyZ2luLXJpZ2h0OiAwOwogICAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudDsgfQoKICAvKiBsaW5lIDE4MiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5jb2x1bW4ubGFyZ2UtdW5jZW50ZXJlZC5vcHBvc2l0ZSwKICAuY29sdW1ucy5sYXJnZS11bmNlbnRlcmVkLm9wcG9zaXRlLAogICNzdGFjay1saXN0IGxpLmxhcmdlLXVuY2VudGVyZWQub3Bwb3NpdGUsCiAgI3RoZW1lLWxpc3QgbGkgPiBkaXYubGFyZ2UtdW5jZW50ZXJlZC5vcHBvc2l0ZSwKICB1bCNkb2NzLWxpc3QgPiBsaS5sYXJnZS11bmNlbnRlcmVkLm9wcG9zaXRlIHsKICAgIGZsb2F0OiByaWdodCAhaW1wb3J0YW50OyB9IH0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA5MC4wNjNlbSkgewogIC8qIGxpbmUgMTQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnhsYXJnZS1wdXNoLTEgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbGVmdDogOC4zMzMzMyU7CiAgICByaWdodDogYXV0bzsgfQoKICAvKiBsaW5lIDE1MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC54bGFyZ2UtcHVsbC0xIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHJpZ2h0OiA4LjMzMzMzJTsKICAgIGxlZnQ6IGF1dG87IH0KCiAgLyogbGluZSAxNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAueGxhcmdlLXB1c2gtMiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBsZWZ0OiAxNi42NjY2NyU7CiAgICByaWdodDogYXV0bzsgfQoKICAvKiBsaW5lIDE1MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC54bGFyZ2UtcHVsbC0yIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHJpZ2h0OiAxNi42NjY2NyU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnhsYXJnZS1wdXNoLTMgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbGVmdDogMjUlOwogICAgcmlnaHQ6IGF1dG87IH0KCiAgLyogbGluZSAxNTEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAueGxhcmdlLXB1bGwtMyB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICByaWdodDogMjUlOwogICAgbGVmdDogYXV0bzsgfQoKICAvKiBsaW5lIDE0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC54bGFyZ2UtcHVzaC00IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDMzLjMzMzMzJTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnhsYXJnZS1wdWxsLTQgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcmlnaHQ6IDMzLjMzMzMzJTsKICAgIGxlZnQ6IGF1dG87IH0KCiAgLyogbGluZSAxNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAueGxhcmdlLXB1c2gtNSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBsZWZ0OiA0MS42NjY2NyU7CiAgICByaWdodDogYXV0bzsgfQoKICAvKiBsaW5lIDE1MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC54bGFyZ2UtcHVsbC01IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHJpZ2h0OiA0MS42NjY2NyU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnhsYXJnZS1wdXNoLTYgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbGVmdDogNTAlOwogICAgcmlnaHQ6IGF1dG87IH0KCiAgLyogbGluZSAxNTEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAueGxhcmdlLXB1bGwtNiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICByaWdodDogNTAlOwogICAgbGVmdDogYXV0bzsgfQoKICAvKiBsaW5lIDE0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC54bGFyZ2UtcHVzaC03IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDU4LjMzMzMzJTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnhsYXJnZS1wdWxsLTcgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcmlnaHQ6IDU4LjMzMzMzJTsKICAgIGxlZnQ6IGF1dG87IH0KCiAgLyogbGluZSAxNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAueGxhcmdlLXB1c2gtOCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBsZWZ0OiA2Ni42NjY2NyU7CiAgICByaWdodDogYXV0bzsgfQoKICAvKiBsaW5lIDE1MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC54bGFyZ2UtcHVsbC04IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHJpZ2h0OiA2Ni42NjY2NyU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnhsYXJnZS1wdXNoLTkgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbGVmdDogNzUlOwogICAgcmlnaHQ6IGF1dG87IH0KCiAgLyogbGluZSAxNTEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAueGxhcmdlLXB1bGwtOSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICByaWdodDogNzUlOwogICAgbGVmdDogYXV0bzsgfQoKICAvKiBsaW5lIDE0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC54bGFyZ2UtcHVzaC0xMCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBsZWZ0OiA4My4zMzMzMyU7CiAgICByaWdodDogYXV0bzsgfQoKICAvKiBsaW5lIDE1MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC54bGFyZ2UtcHVsbC0xMCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICByaWdodDogODMuMzMzMzMlOwogICAgbGVmdDogYXV0bzsgfQoKICAvKiBsaW5lIDE0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC54bGFyZ2UtcHVzaC0xMSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBsZWZ0OiA5MS42NjY2NyU7CiAgICByaWdodDogYXV0bzsgfQoKICAvKiBsaW5lIDE1MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC54bGFyZ2UtcHVsbC0xMSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICByaWdodDogOTEuNjY2NjclOwogICAgbGVmdDogYXV0bzsgfQoKICAvKiBsaW5lIDE1NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5jb2x1bW4sCiAgLmNvbHVtbnMsCiAgI3N0YWNrLWxpc3QgbGksCiAgI3RoZW1lLWxpc3QgbGkgPiBkaXYsCiAgdWwjZG9jcy1saXN0ID4gbGkgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcGFkZGluZy1sZWZ0OiAwLjkzNzVyZW07CiAgICBwYWRkaW5nLXJpZ2h0OiAwLjkzNzVyZW07CiAgICBmbG9hdDogbGVmdDsgfQoKICAvKiBsaW5lIDE2MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC54bGFyZ2UtMSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogOC4zMzMzMyU7IH0KCiAgLyogbGluZSAxNjEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAueGxhcmdlLTIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDE2LjY2NjY3JTsgfQoKICAvKiBsaW5lIDE2MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC54bGFyZ2UtMyB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogMjUlOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnhsYXJnZS00IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiAzMy4zMzMzMyU7IH0KCiAgLyogbGluZSAxNjEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAueGxhcmdlLTUgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDQxLjY2NjY3JTsgfQoKICAvKiBsaW5lIDE2MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC54bGFyZ2UtNiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogNTAlOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnhsYXJnZS03IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiA1OC4zMzMzMyU7IH0KCiAgLyogbGluZSAxNjEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAueGxhcmdlLTggewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDY2LjY2NjY3JTsgfQoKICAvKiBsaW5lIDE2MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC54bGFyZ2UtOSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogNzUlOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnhsYXJnZS0xMCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogODMuMzMzMzMlOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnhsYXJnZS0xMSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogOTEuNjY2NjclOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnhsYXJnZS0xMiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogMTAwJTsgfQoKICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC54bGFyZ2Utb2Zmc2V0LTAgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWFyZ2luLWxlZnQ6IDAlOyB9CgogIC8qIGxpbmUgMTY1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnhsYXJnZS1vZmZzZXQtMSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtYXJnaW4tbGVmdDogOC4zMzMzMyU7IH0KCiAgLyogbGluZSAxNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAueGxhcmdlLW9mZnNldC0yIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY2NyU7IH0KCiAgLyogbGluZSAxNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAueGxhcmdlLW9mZnNldC0zIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiAyNSU7IH0KCiAgLyogbGluZSAxNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAueGxhcmdlLW9mZnNldC00IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMyU7IH0KCiAgLyogbGluZSAxNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAueGxhcmdlLW9mZnNldC01IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NyU7IH0KCiAgLyogbGluZSAxNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAueGxhcmdlLW9mZnNldC02IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiA1MCU7IH0KCiAgLyogbGluZSAxNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAueGxhcmdlLW9mZnNldC03IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMyU7IH0KCiAgLyogbGluZSAxNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAueGxhcmdlLW9mZnNldC04IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NyU7IH0KCiAgLyogbGluZSAxNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAueGxhcmdlLW9mZnNldC05IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiA3NSU7IH0KCiAgLyogbGluZSAxNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAueGxhcmdlLW9mZnNldC0xMCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtYXJnaW4tbGVmdDogODMuMzMzMzMlOyB9CgogIC8qIGxpbmUgMTY4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgW2NsYXNzKj0iY29sdW1uIl0gKyBbY2xhc3MqPSJjb2x1bW4iXTpsYXN0LWNoaWxkIHsKICAgIGZsb2F0OiByaWdodDsgfQoKICAvKiBsaW5lIDE2OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIFtjbGFzcyo9ImNvbHVtbiJdICsgW2NsYXNzKj0iY29sdW1uIl0uZW5kIHsKICAgIGZsb2F0OiBsZWZ0OyB9CgogIC8qIGxpbmUgMTcyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLmNvbHVtbi54bGFyZ2UtY2VudGVyZWQsCiAgLmNvbHVtbnMueGxhcmdlLWNlbnRlcmVkLAogICNzdGFjay1saXN0IGxpLnhsYXJnZS1jZW50ZXJlZCwKICAjdGhlbWUtbGlzdCBsaSA+IGRpdi54bGFyZ2UtY2VudGVyZWQsCiAgdWwjZG9jcy1saXN0ID4gbGkueGxhcmdlLWNlbnRlcmVkIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgbWFyZ2luLXJpZ2h0OiBhdXRvOwogICAgZmxvYXQ6IG5vbmUgIWltcG9ydGFudDsgfQoKICAvKiBsaW5lIDE3NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5jb2x1bW4ueGxhcmdlLXVuY2VudGVyZWQsCiAgLmNvbHVtbnMueGxhcmdlLXVuY2VudGVyZWQsCiAgI3N0YWNrLWxpc3QgbGkueGxhcmdlLXVuY2VudGVyZWQsCiAgI3RoZW1lLWxpc3QgbGkgPiBkaXYueGxhcmdlLXVuY2VudGVyZWQsCiAgdWwjZG9jcy1saXN0ID4gbGkueGxhcmdlLXVuY2VudGVyZWQgewogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IDA7CiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50OyB9CgogIC8qIGxpbmUgMTgyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLmNvbHVtbi54bGFyZ2UtdW5jZW50ZXJlZC5vcHBvc2l0ZSwKICAuY29sdW1ucy54bGFyZ2UtdW5jZW50ZXJlZC5vcHBvc2l0ZSwKICAjc3RhY2stbGlzdCBsaS54bGFyZ2UtdW5jZW50ZXJlZC5vcHBvc2l0ZSwKICAjdGhlbWUtbGlzdCBsaSA+IGRpdi54bGFyZ2UtdW5jZW50ZXJlZC5vcHBvc2l0ZSwKICB1bCNkb2NzLWxpc3QgPiBsaS54bGFyZ2UtdW5jZW50ZXJlZC5vcHBvc2l0ZSB7CiAgICBmbG9hdDogcmlnaHQgIWltcG9ydGFudDsgfSB9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTIwLjA2M2VtKSB7CiAgLyogbGluZSAxNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAueHhsYXJnZS1wdXNoLTEgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbGVmdDogOC4zMzMzMyU7CiAgICByaWdodDogYXV0bzsgfQoKICAvKiBsaW5lIDE1MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC54eGxhcmdlLXB1bGwtMSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICByaWdodDogOC4zMzMzMyU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtcHVzaC0yIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDE2LjY2NjY3JTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtcHVsbC0yIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHJpZ2h0OiAxNi42NjY2NyU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtcHVzaC0zIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDI1JTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtcHVsbC0zIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHJpZ2h0OiAyNSU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtcHVzaC00IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDMzLjMzMzMzJTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtcHVsbC00IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHJpZ2h0OiAzMy4zMzMzMyU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtcHVzaC01IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDQxLjY2NjY3JTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtcHVsbC01IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHJpZ2h0OiA0MS42NjY2NyU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtcHVzaC02IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDUwJTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtcHVsbC02IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHJpZ2h0OiA1MCU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtcHVzaC03IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDU4LjMzMzMzJTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtcHVsbC03IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHJpZ2h0OiA1OC4zMzMzMyU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtcHVzaC04IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDY2LjY2NjY3JTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtcHVsbC04IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHJpZ2h0OiA2Ni42NjY2NyU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtcHVzaC05IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDc1JTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtcHVsbC05IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHJpZ2h0OiA3NSU7CiAgICBsZWZ0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtcHVzaC0xMCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBsZWZ0OiA4My4zMzMzMyU7CiAgICByaWdodDogYXV0bzsgfQoKICAvKiBsaW5lIDE1MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC54eGxhcmdlLXB1bGwtMTAgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcmlnaHQ6IDgzLjMzMzMzJTsKICAgIGxlZnQ6IGF1dG87IH0KCiAgLyogbGluZSAxNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAueHhsYXJnZS1wdXNoLTExIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDkxLjY2NjY3JTsKICAgIHJpZ2h0OiBhdXRvOyB9CgogIC8qIGxpbmUgMTUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtcHVsbC0xMSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICByaWdodDogOTEuNjY2NjclOwogICAgbGVmdDogYXV0bzsgfQoKICAvKiBsaW5lIDE1NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC5jb2x1bW4sCiAgLmNvbHVtbnMsCiAgI3N0YWNrLWxpc3QgbGksCiAgI3RoZW1lLWxpc3QgbGkgPiBkaXYsCiAgdWwjZG9jcy1saXN0ID4gbGkgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcGFkZGluZy1sZWZ0OiAwLjkzNzVyZW07CiAgICBwYWRkaW5nLXJpZ2h0OiAwLjkzNzVyZW07CiAgICBmbG9hdDogbGVmdDsgfQoKICAvKiBsaW5lIDE2MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC54eGxhcmdlLTEgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDguMzMzMzMlOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtMiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogMTYuNjY2NjclOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtMyB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogMjUlOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtNCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogMzMuMzMzMzMlOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtNSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogNDEuNjY2NjclOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtNiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogNTAlOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtNyB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogNTguMzMzMzMlOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtOCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogNjYuNjY2NjclOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtOSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogNzUlOyB9CgogIC8qIGxpbmUgMTYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2UtMTAgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDgzLjMzMzMzJTsgfQoKICAvKiBsaW5lIDE2MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC54eGxhcmdlLTExIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiA5MS42NjY2NyU7IH0KCiAgLyogbGluZSAxNjEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAueHhsYXJnZS0xMiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogMTAwJTsgfQoKICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC54eGxhcmdlLW9mZnNldC0wIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiAwJTsgfQoKICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC54eGxhcmdlLW9mZnNldC0xIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMzJTsgfQoKICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC54eGxhcmdlLW9mZnNldC0yIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY2NyU7IH0KCiAgLyogbGluZSAxNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAueHhsYXJnZS1vZmZzZXQtMyB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtYXJnaW4tbGVmdDogMjUlOyB9CgogIC8qIGxpbmUgMTY1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2Utb2Zmc2V0LTQgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzJTsgfQoKICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC54eGxhcmdlLW9mZnNldC01IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NyU7IH0KCiAgLyogbGluZSAxNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAueHhsYXJnZS1vZmZzZXQtNiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtYXJnaW4tbGVmdDogNTAlOyB9CgogIC8qIGxpbmUgMTY1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2Utb2Zmc2V0LTcgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzJTsgfQoKICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dyaWQuc2NzcyAqLwogIC54eGxhcmdlLW9mZnNldC04IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NyU7IH0KCiAgLyogbGluZSAxNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAueHhsYXJnZS1vZmZzZXQtOSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtYXJnaW4tbGVmdDogNzUlOyB9CgogIC8qIGxpbmUgMTY1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLnh4bGFyZ2Utb2Zmc2V0LTEwIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzMyU7IH0KCiAgLyogbGluZSAxNjgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICBbY2xhc3MqPSJjb2x1bW4iXSArIFtjbGFzcyo9ImNvbHVtbiJdOmxhc3QtY2hpbGQgewogICAgZmxvYXQ6IHJpZ2h0OyB9CgogIC8qIGxpbmUgMTY5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgW2NsYXNzKj0iY29sdW1uIl0gKyBbY2xhc3MqPSJjb2x1bW4iXS5lbmQgewogICAgZmxvYXQ6IGxlZnQ7IH0KCiAgLyogbGluZSAxNzIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuY29sdW1uLnh4bGFyZ2UtY2VudGVyZWQsCiAgLmNvbHVtbnMueHhsYXJnZS1jZW50ZXJlZCwKICAjc3RhY2stbGlzdCBsaS54eGxhcmdlLWNlbnRlcmVkLAogICN0aGVtZS1saXN0IGxpID4gZGl2Lnh4bGFyZ2UtY2VudGVyZWQsCiAgdWwjZG9jcy1saXN0ID4gbGkueHhsYXJnZS1jZW50ZXJlZCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIG1hcmdpbi1yaWdodDogYXV0bzsKICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7IH0KCiAgLyogbGluZSAxNzUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ncmlkLnNjc3MgKi8KICAuY29sdW1uLnh4bGFyZ2UtdW5jZW50ZXJlZCwKICAuY29sdW1ucy54eGxhcmdlLXVuY2VudGVyZWQsCiAgI3N0YWNrLWxpc3QgbGkueHhsYXJnZS11bmNlbnRlcmVkLAogICN0aGVtZS1saXN0IGxpID4gZGl2Lnh4bGFyZ2UtdW5jZW50ZXJlZCwKICB1bCNkb2NzLWxpc3QgPiBsaS54eGxhcmdlLXVuY2VudGVyZWQgewogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IDA7CiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50OyB9CgogIC8qIGxpbmUgMTgyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ3JpZC5zY3NzICovCiAgLmNvbHVtbi54eGxhcmdlLXVuY2VudGVyZWQub3Bwb3NpdGUsCiAgLmNvbHVtbnMueHhsYXJnZS11bmNlbnRlcmVkLm9wcG9zaXRlLAogICNzdGFjay1saXN0IGxpLnh4bGFyZ2UtdW5jZW50ZXJlZC5vcHBvc2l0ZSwKICAjdGhlbWUtbGlzdCBsaSA+IGRpdi54eGxhcmdlLXVuY2VudGVyZWQub3Bwb3NpdGUsCiAgdWwjZG9jcy1saXN0ID4gbGkueHhsYXJnZS11bmNlbnRlcmVkLm9wcG9zaXRlIHsKICAgIGZsb2F0OiByaWdodCAhaW1wb3J0YW50OyB9IH0KLyogbGluZSAyMywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2FjY29yZGlvbi5zY3NzICovCi5hY2NvcmRpb24gewogICp6b29tOiAxOwogIG1hcmdpbi1ib3R0b206IDA7IH0KICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dsb2JhbC5zY3NzICovCiAgLmFjY29yZGlvbjpiZWZvcmUsIC5hY2NvcmRpb246YWZ0ZXIgewogICAgY29udGVudDogIiAiOwogICAgZGlzcGxheTogdGFibGU7IH0KICAvKiBsaW5lIDE2NiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dsb2JhbC5zY3NzICovCiAgLmFjY29yZGlvbjphZnRlciB7CiAgICBjbGVhcjogYm90aDsgfQogIC8qIGxpbmUgMjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19hY2NvcmRpb24uc2NzcyAqLwogIC5hY2NvcmRpb24gZGQgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7IH0KICAgIC8qIGxpbmUgMjgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19hY2NvcmRpb24uc2NzcyAqLwogICAgLmFjY29yZGlvbiBkZC5hY3RpdmUgYSB7CiAgICAgIGJhY2tncm91bmQ6ICNlN2U3ZTc7IH0KICAgIC8qIGxpbmUgMjksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19hY2NvcmRpb24uc2NzcyAqLwogICAgLmFjY29yZGlvbiBkZCA+IGEgewogICAgICBiYWNrZ3JvdW5kOiAjZWZlZmVmOwogICAgICBjb2xvcjogIzIyMjIyMjsKICAgICAgcGFkZGluZzogMXJlbTsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIGZvbnQtZmFtaWx5OiAiSGVsdmV0aWNhIE5ldWUiLCAiSGVsdmV0aWNhIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgZm9udC1zaXplOiAxcmVtOyB9CiAgICAgIC8qIGxpbmUgMzYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19hY2NvcmRpb24uc2NzcyAqLwogICAgICAuYWNjb3JkaW9uIGRkID4gYTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogI2UyZTJlMjsgfQogIC8qIGxpbmUgMzksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19hY2NvcmRpb24uc2NzcyAqLwogIC5hY2NvcmRpb24gLmNvbnRlbnQsIC5hY2NvcmRpb24gdWwjZG93bmxvYWRzID4gbGkgLm5vdGVzLCB1bCNkb3dubG9hZHMgPiBsaSAuYWNjb3JkaW9uIC5ub3RlcywgLmFjY29yZGlvbiB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSB1bFtpZCQ9Ii1kb3dubG9hZCJdLCB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSAuYWNjb3JkaW9uIHVsW2lkJD0iLWRvd25sb2FkIl0sIC5hY2NvcmRpb24gI2Rvd25sb2FkID4gZGl2IHVsW2lkJD0iLWRvd25sb2FkIl0sICNkb3dubG9hZCA+IGRpdiAuYWNjb3JkaW9uIHVsW2lkJD0iLWRvd25sb2FkIl0gewogICAgZGlzcGxheTogbm9uZTsKICAgIHBhZGRpbmc6IDAuOTM3NXJlbTsgfQogICAgLyogbGluZSA0MiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2FjY29yZGlvbi5zY3NzICovCiAgICAuYWNjb3JkaW9uIC5jb250ZW50LmFjdGl2ZSwgLmFjY29yZGlvbiB1bCNkb3dubG9hZHMgPiBsaSAuYWN0aXZlLm5vdGVzLCB1bCNkb3dubG9hZHMgPiBsaSAuYWNjb3JkaW9uIC5hY3RpdmUubm90ZXMsIC5hY2NvcmRpb24gdWwjZG93bmxvYWRzID4gbGkgdGFibGUgdWwuYWN0aXZlW2lkJD0iLWRvd25sb2FkIl0sIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5hY2NvcmRpb24gdWwuYWN0aXZlW2lkJD0iLWRvd25sb2FkIl0sIC5hY2NvcmRpb24gI2Rvd25sb2FkID4gZGl2IHVsLmFjdGl2ZVtpZCQ9Ii1kb3dubG9hZCJdLCAjZG93bmxvYWQgPiBkaXYgLmFjY29yZGlvbiB1bC5hY3RpdmVbaWQkPSItZG93bmxvYWQiXSB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsgfQoKLyogbGluZSAxMDIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19hbGVydC1ib3hlcy5zY3NzICovCi5hbGVydC1ib3ggewogIGJvcmRlci1zdHlsZTogc29saWQ7CiAgYm9yZGVyLXdpZHRoOiAxcHg7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICBtYXJnaW4tYm90dG9tOiAxLjI1cmVtOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBwYWRkaW5nOiAwLjg3NXJlbSAxLjVyZW0gMC44NzVyZW0gMC44NzVyZW07CiAgZm9udC1zaXplOiAwLjgxMjVyZW07CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwOGNiYTsKICBib3JkZXItY29sb3I6ICMwMDc5YTE7CiAgY29sb3I6IHdoaXRlOyB9CiAgLyogbGluZSAxMDUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19hbGVydC1ib3hlcy5zY3NzICovCiAgLmFsZXJ0LWJveCAuY2xvc2UgewogICAgZm9udC1zaXplOiAxLjM3NXJlbTsKICAgIHBhZGRpbmc6IDlweCA2cHggNHB4OwogICAgbGluZS1oZWlnaHQ6IDA7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDUwJTsKICAgIG1hcmdpbi10b3A6IC0wLjY4NzVyZW07CiAgICByaWdodDogMC4yNXJlbTsKICAgIGNvbG9yOiAjMzMzMzMzOwogICAgb3BhY2l0eTogMC4zOyB9CiAgICAvKiBsaW5lIDg3LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYWxlcnQtYm94ZXMuc2NzcyAqLwogICAgLmFsZXJ0LWJveCAuY2xvc2U6aG92ZXIsIC5hbGVydC1ib3ggLmNsb3NlOmZvY3VzIHsKICAgICAgb3BhY2l0eTogMC41OyB9CiAgLyogbGluZSAxMDcsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19hbGVydC1ib3hlcy5zY3NzICovCiAgLmFsZXJ0LWJveC5yYWRpdXMgewogICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7IH0KICAvKiBsaW5lIDEwOCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2FsZXJ0LWJveGVzLnNjc3MgKi8KICAuYWxlcnQtYm94LnJvdW5kIHsKICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMTAwMHB4OwogICAgYm9yZGVyLXJhZGl1czogMTAwMHB4OyB9CiAgLyogbGluZSAxMTAsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19hbGVydC1ib3hlcy5zY3NzICovCiAgLmFsZXJ0LWJveC5zdWNjZXNzIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICM1ZTg5NDk7CiAgICBib3JkZXItY29sb3I6ICM1Mzc4NDA7CiAgICBjb2xvcjogd2hpdGU7IH0KICAvKiBsaW5lIDExMSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2FsZXJ0LWJveGVzLnNjc3MgKi8KICAuYWxlcnQtYm94LmFsZXJ0IHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmMDQxMjQ7CiAgICBib3JkZXItY29sb3I6ICNlYTJmMTA7CiAgICBjb2xvcjogd2hpdGU7IH0KICAvKiBsaW5lIDExMiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2FsZXJ0LWJveGVzLnNjc3MgKi8KICAuYWxlcnQtYm94LnNlY29uZGFyeSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTdlN2U3OwogICAgYm9yZGVyLWNvbG9yOiAjZGFkYWRhOwogICAgY29sb3I6ICM0ZTRlNGU7IH0KICAvKiBsaW5lIDExMywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2FsZXJ0LWJveGVzLnNjc3MgKi8KICAuYWxlcnQtYm94Lndhcm5pbmcgewogICAgYmFja2dyb3VuZC1jb2xvcjogI2YwOGEyNDsKICAgIGJvcmRlci1jb2xvcjogI2VhN2QxMDsKICAgIGNvbG9yOiB3aGl0ZTsgfQogIC8qIGxpbmUgMTE0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYWxlcnQtYm94ZXMuc2NzcyAqLwogIC5hbGVydC1ib3guaW5mbyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTBkM2U4OwogICAgYm9yZGVyLWNvbG9yOiAjOGJjOWUzOwogICAgY29sb3I6ICM0ZTRlNGU7IH0KCi8qIGxpbmUgNjksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KW2NsYXNzKj0iYmxvY2stZ3JpZC0iXSB7CiAgZGlzcGxheTogYmxvY2s7CiAgcGFkZGluZzogMDsKICBtYXJnaW46IDAgLTAuNjI1cmVtOwogICp6b29tOiAxOyB9CiAgLyogbGluZSAxNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19nbG9iYWwuc2NzcyAqLwogIFtjbGFzcyo9ImJsb2NrLWdyaWQtIl06YmVmb3JlLCBbY2xhc3MqPSJibG9jay1ncmlkLSJdOmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIgIjsKICAgIGRpc3BsYXk6IHRhYmxlOyB9CiAgLyogbGluZSAxNjYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19nbG9iYWwuc2NzcyAqLwogIFtjbGFzcyo9ImJsb2NrLWdyaWQtIl06YWZ0ZXIgewogICAgY2xlYXI6IGJvdGg7IH0KICAvKiBsaW5lIDM1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgW2NsYXNzKj0iYmxvY2stZ3JpZC0iXSA+IGxpIHsKICAgIGRpc3BsYXk6IGlubGluZTsKICAgIGhlaWdodDogYXV0bzsKICAgIGZsb2F0OiBsZWZ0OwogICAgcGFkZGluZzogMCAwLjYyNXJlbSAxLjI1cmVtOyB9CgpAbWVkaWEgb25seSBzY3JlZW4gewogIC8qIGxpbmUgNDQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAuc21hbGwtYmxvY2stZ3JpZC0xID4gbGkgewogICAgd2lkdGg6IDEwMCU7CiAgICBwYWRkaW5nOiAwIDAuNjI1cmVtIDEuMjVyZW07IH0KICAgIC8qIGxpbmUgNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAgIC5zbWFsbC1ibG9jay1ncmlkLTEgPiBsaTpudGgtb2YtdHlwZShuKSB7CiAgICAgIGNsZWFyOiBub25lOyB9CiAgICAvKiBsaW5lIDQ5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgICAuc21hbGwtYmxvY2stZ3JpZC0xID4gbGk6bnRoLW9mLXR5cGUoMW4rMSkgewogICAgICBjbGVhcjogYm90aDsgfQoKICAvKiBsaW5lIDQ0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgLnNtYWxsLWJsb2NrLWdyaWQtMiA+IGxpIHsKICAgIHdpZHRoOiA1MCU7CiAgICBwYWRkaW5nOiAwIDAuNjI1cmVtIDEuMjVyZW07IH0KICAgIC8qIGxpbmUgNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAgIC5zbWFsbC1ibG9jay1ncmlkLTIgPiBsaTpudGgtb2YtdHlwZShuKSB7CiAgICAgIGNsZWFyOiBub25lOyB9CiAgICAvKiBsaW5lIDQ5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgICAuc21hbGwtYmxvY2stZ3JpZC0yID4gbGk6bnRoLW9mLXR5cGUoMm4rMSkgewogICAgICBjbGVhcjogYm90aDsgfQoKICAvKiBsaW5lIDQ0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgLnNtYWxsLWJsb2NrLWdyaWQtMyA+IGxpIHsKICAgIHdpZHRoOiAzMy4zMzMzMyU7CiAgICBwYWRkaW5nOiAwIDAuNjI1cmVtIDEuMjVyZW07IH0KICAgIC8qIGxpbmUgNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAgIC5zbWFsbC1ibG9jay1ncmlkLTMgPiBsaTpudGgtb2YtdHlwZShuKSB7CiAgICAgIGNsZWFyOiBub25lOyB9CiAgICAvKiBsaW5lIDQ5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgICAuc21hbGwtYmxvY2stZ3JpZC0zID4gbGk6bnRoLW9mLXR5cGUoM24rMSkgewogICAgICBjbGVhcjogYm90aDsgfQoKICAvKiBsaW5lIDQ0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgLnNtYWxsLWJsb2NrLWdyaWQtNCA+IGxpIHsKICAgIHdpZHRoOiAyNSU7CiAgICBwYWRkaW5nOiAwIDAuNjI1cmVtIDEuMjVyZW07IH0KICAgIC8qIGxpbmUgNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAgIC5zbWFsbC1ibG9jay1ncmlkLTQgPiBsaTpudGgtb2YtdHlwZShuKSB7CiAgICAgIGNsZWFyOiBub25lOyB9CiAgICAvKiBsaW5lIDQ5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgICAuc21hbGwtYmxvY2stZ3JpZC00ID4gbGk6bnRoLW9mLXR5cGUoNG4rMSkgewogICAgICBjbGVhcjogYm90aDsgfQoKICAvKiBsaW5lIDQ0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgLnNtYWxsLWJsb2NrLWdyaWQtNSA+IGxpIHsKICAgIHdpZHRoOiAyMCU7CiAgICBwYWRkaW5nOiAwIDAuNjI1cmVtIDEuMjVyZW07IH0KICAgIC8qIGxpbmUgNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAgIC5zbWFsbC1ibG9jay1ncmlkLTUgPiBsaTpudGgtb2YtdHlwZShuKSB7CiAgICAgIGNsZWFyOiBub25lOyB9CiAgICAvKiBsaW5lIDQ5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgICAuc21hbGwtYmxvY2stZ3JpZC01ID4gbGk6bnRoLW9mLXR5cGUoNW4rMSkgewogICAgICBjbGVhcjogYm90aDsgfQoKICAvKiBsaW5lIDQ0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgLnNtYWxsLWJsb2NrLWdyaWQtNiA+IGxpIHsKICAgIHdpZHRoOiAxNi42NjY2NyU7CiAgICBwYWRkaW5nOiAwIDAuNjI1cmVtIDEuMjVyZW07IH0KICAgIC8qIGxpbmUgNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAgIC5zbWFsbC1ibG9jay1ncmlkLTYgPiBsaTpudGgtb2YtdHlwZShuKSB7CiAgICAgIGNsZWFyOiBub25lOyB9CiAgICAvKiBsaW5lIDQ5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgICAuc21hbGwtYmxvY2stZ3JpZC02ID4gbGk6bnRoLW9mLXR5cGUoNm4rMSkgewogICAgICBjbGVhcjogYm90aDsgfQoKICAvKiBsaW5lIDQ0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgLnNtYWxsLWJsb2NrLWdyaWQtNyA+IGxpIHsKICAgIHdpZHRoOiAxNC4yODU3MSU7CiAgICBwYWRkaW5nOiAwIDAuNjI1cmVtIDEuMjVyZW07IH0KICAgIC8qIGxpbmUgNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAgIC5zbWFsbC1ibG9jay1ncmlkLTcgPiBsaTpudGgtb2YtdHlwZShuKSB7CiAgICAgIGNsZWFyOiBub25lOyB9CiAgICAvKiBsaW5lIDQ5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgICAuc21hbGwtYmxvY2stZ3JpZC03ID4gbGk6bnRoLW9mLXR5cGUoN24rMSkgewogICAgICBjbGVhcjogYm90aDsgfQoKICAvKiBsaW5lIDQ0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgLnNtYWxsLWJsb2NrLWdyaWQtOCA+IGxpIHsKICAgIHdpZHRoOiAxMi41JTsKICAgIHBhZGRpbmc6IDAgMC42MjVyZW0gMS4yNXJlbTsgfQogICAgLyogbGluZSA0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLnNtYWxsLWJsb2NrLWdyaWQtOCA+IGxpOm50aC1vZi10eXBlKG4pIHsKICAgICAgY2xlYXI6IG5vbmU7IH0KICAgIC8qIGxpbmUgNDksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAgIC5zbWFsbC1ibG9jay1ncmlkLTggPiBsaTpudGgtb2YtdHlwZSg4bisxKSB7CiAgICAgIGNsZWFyOiBib3RoOyB9CgogIC8qIGxpbmUgNDQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAuc21hbGwtYmxvY2stZ3JpZC05ID4gbGkgewogICAgd2lkdGg6IDExLjExMTExJTsKICAgIHBhZGRpbmc6IDAgMC42MjVyZW0gMS4yNXJlbTsgfQogICAgLyogbGluZSA0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLnNtYWxsLWJsb2NrLWdyaWQtOSA+IGxpOm50aC1vZi10eXBlKG4pIHsKICAgICAgY2xlYXI6IG5vbmU7IH0KICAgIC8qIGxpbmUgNDksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAgIC5zbWFsbC1ibG9jay1ncmlkLTkgPiBsaTpudGgtb2YtdHlwZSg5bisxKSB7CiAgICAgIGNsZWFyOiBib3RoOyB9CgogIC8qIGxpbmUgNDQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAuc21hbGwtYmxvY2stZ3JpZC0xMCA+IGxpIHsKICAgIHdpZHRoOiAxMCU7CiAgICBwYWRkaW5nOiAwIDAuNjI1cmVtIDEuMjVyZW07IH0KICAgIC8qIGxpbmUgNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAgIC5zbWFsbC1ibG9jay1ncmlkLTEwID4gbGk6bnRoLW9mLXR5cGUobikgewogICAgICBjbGVhcjogbm9uZTsgfQogICAgLyogbGluZSA0OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLnNtYWxsLWJsb2NrLWdyaWQtMTAgPiBsaTpudGgtb2YtdHlwZSgxMG4rMSkgewogICAgICBjbGVhcjogYm90aDsgfQoKICAvKiBsaW5lIDQ0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgLnNtYWxsLWJsb2NrLWdyaWQtMTEgPiBsaSB7CiAgICB3aWR0aDogOS4wOTA5MSU7CiAgICBwYWRkaW5nOiAwIDAuNjI1cmVtIDEuMjVyZW07IH0KICAgIC8qIGxpbmUgNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAgIC5zbWFsbC1ibG9jay1ncmlkLTExID4gbGk6bnRoLW9mLXR5cGUobikgewogICAgICBjbGVhcjogbm9uZTsgfQogICAgLyogbGluZSA0OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLnNtYWxsLWJsb2NrLWdyaWQtMTEgPiBsaTpudGgtb2YtdHlwZSgxMW4rMSkgewogICAgICBjbGVhcjogYm90aDsgfQoKICAvKiBsaW5lIDQ0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgLnNtYWxsLWJsb2NrLWdyaWQtMTIgPiBsaSB7CiAgICB3aWR0aDogOC4zMzMzMyU7CiAgICBwYWRkaW5nOiAwIDAuNjI1cmVtIDEuMjVyZW07IH0KICAgIC8qIGxpbmUgNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAgIC5zbWFsbC1ibG9jay1ncmlkLTEyID4gbGk6bnRoLW9mLXR5cGUobikgewogICAgICBjbGVhcjogbm9uZTsgfQogICAgLyogbGluZSA0OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLnNtYWxsLWJsb2NrLWdyaWQtMTIgPiBsaTpudGgtb2YtdHlwZSgxMm4rMSkgewogICAgICBjbGVhcjogYm90aDsgfSB9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDAuMDYzZW0pIHsKICAvKiBsaW5lIDQ0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgLm1lZGl1bS1ibG9jay1ncmlkLTEgPiBsaSB7CiAgICB3aWR0aDogMTAwJTsKICAgIHBhZGRpbmc6IDAgMC42MjVyZW0gMS4yNXJlbTsgfQogICAgLyogbGluZSA0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLm1lZGl1bS1ibG9jay1ncmlkLTEgPiBsaTpudGgtb2YtdHlwZShuKSB7CiAgICAgIGNsZWFyOiBub25lOyB9CiAgICAvKiBsaW5lIDQ5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgICAubWVkaXVtLWJsb2NrLWdyaWQtMSA+IGxpOm50aC1vZi10eXBlKDFuKzEpIHsKICAgICAgY2xlYXI6IGJvdGg7IH0KCiAgLyogbGluZSA0NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogIC5tZWRpdW0tYmxvY2stZ3JpZC0yID4gbGkgewogICAgd2lkdGg6IDUwJTsKICAgIHBhZGRpbmc6IDAgMC42MjVyZW0gMS4yNXJlbTsgfQogICAgLyogbGluZSA0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLm1lZGl1bS1ibG9jay1ncmlkLTIgPiBsaTpudGgtb2YtdHlwZShuKSB7CiAgICAgIGNsZWFyOiBub25lOyB9CiAgICAvKiBsaW5lIDQ5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgICAubWVkaXVtLWJsb2NrLWdyaWQtMiA+IGxpOm50aC1vZi10eXBlKDJuKzEpIHsKICAgICAgY2xlYXI6IGJvdGg7IH0KCiAgLyogbGluZSA0NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogIC5tZWRpdW0tYmxvY2stZ3JpZC0zID4gbGkgewogICAgd2lkdGg6IDMzLjMzMzMzJTsKICAgIHBhZGRpbmc6IDAgMC42MjVyZW0gMS4yNXJlbTsgfQogICAgLyogbGluZSA0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLm1lZGl1bS1ibG9jay1ncmlkLTMgPiBsaTpudGgtb2YtdHlwZShuKSB7CiAgICAgIGNsZWFyOiBub25lOyB9CiAgICAvKiBsaW5lIDQ5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgICAubWVkaXVtLWJsb2NrLWdyaWQtMyA+IGxpOm50aC1vZi10eXBlKDNuKzEpIHsKICAgICAgY2xlYXI6IGJvdGg7IH0KCiAgLyogbGluZSA0NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogIC5tZWRpdW0tYmxvY2stZ3JpZC00ID4gbGkgewogICAgd2lkdGg6IDI1JTsKICAgIHBhZGRpbmc6IDAgMC42MjVyZW0gMS4yNXJlbTsgfQogICAgLyogbGluZSA0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLm1lZGl1bS1ibG9jay1ncmlkLTQgPiBsaTpudGgtb2YtdHlwZShuKSB7CiAgICAgIGNsZWFyOiBub25lOyB9CiAgICAvKiBsaW5lIDQ5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgICAubWVkaXVtLWJsb2NrLWdyaWQtNCA+IGxpOm50aC1vZi10eXBlKDRuKzEpIHsKICAgICAgY2xlYXI6IGJvdGg7IH0KCiAgLyogbGluZSA0NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogIC5tZWRpdW0tYmxvY2stZ3JpZC01ID4gbGkgewogICAgd2lkdGg6IDIwJTsKICAgIHBhZGRpbmc6IDAgMC42MjVyZW0gMS4yNXJlbTsgfQogICAgLyogbGluZSA0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLm1lZGl1bS1ibG9jay1ncmlkLTUgPiBsaTpudGgtb2YtdHlwZShuKSB7CiAgICAgIGNsZWFyOiBub25lOyB9CiAgICAvKiBsaW5lIDQ5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgICAubWVkaXVtLWJsb2NrLWdyaWQtNSA+IGxpOm50aC1vZi10eXBlKDVuKzEpIHsKICAgICAgY2xlYXI6IGJvdGg7IH0KCiAgLyogbGluZSA0NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogIC5tZWRpdW0tYmxvY2stZ3JpZC02ID4gbGkgewogICAgd2lkdGg6IDE2LjY2NjY3JTsKICAgIHBhZGRpbmc6IDAgMC42MjVyZW0gMS4yNXJlbTsgfQogICAgLyogbGluZSA0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLm1lZGl1bS1ibG9jay1ncmlkLTYgPiBsaTpudGgtb2YtdHlwZShuKSB7CiAgICAgIGNsZWFyOiBub25lOyB9CiAgICAvKiBsaW5lIDQ5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgICAubWVkaXVtLWJsb2NrLWdyaWQtNiA+IGxpOm50aC1vZi10eXBlKDZuKzEpIHsKICAgICAgY2xlYXI6IGJvdGg7IH0KCiAgLyogbGluZSA0NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogIC5tZWRpdW0tYmxvY2stZ3JpZC03ID4gbGkgewogICAgd2lkdGg6IDE0LjI4NTcxJTsKICAgIHBhZGRpbmc6IDAgMC42MjVyZW0gMS4yNXJlbTsgfQogICAgLyogbGluZSA0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLm1lZGl1bS1ibG9jay1ncmlkLTcgPiBsaTpudGgtb2YtdHlwZShuKSB7CiAgICAgIGNsZWFyOiBub25lOyB9CiAgICAvKiBsaW5lIDQ5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgICAubWVkaXVtLWJsb2NrLWdyaWQtNyA+IGxpOm50aC1vZi10eXBlKDduKzEpIHsKICAgICAgY2xlYXI6IGJvdGg7IH0KCiAgLyogbGluZSA0NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogIC5tZWRpdW0tYmxvY2stZ3JpZC04ID4gbGkgewogICAgd2lkdGg6IDEyLjUlOwogICAgcGFkZGluZzogMCAwLjYyNXJlbSAxLjI1cmVtOyB9CiAgICAvKiBsaW5lIDQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgICAubWVkaXVtLWJsb2NrLWdyaWQtOCA+IGxpOm50aC1vZi10eXBlKG4pIHsKICAgICAgY2xlYXI6IG5vbmU7IH0KICAgIC8qIGxpbmUgNDksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAgIC5tZWRpdW0tYmxvY2stZ3JpZC04ID4gbGk6bnRoLW9mLXR5cGUoOG4rMSkgewogICAgICBjbGVhcjogYm90aDsgfQoKICAvKiBsaW5lIDQ0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgLm1lZGl1bS1ibG9jay1ncmlkLTkgPiBsaSB7CiAgICB3aWR0aDogMTEuMTExMTElOwogICAgcGFkZGluZzogMCAwLjYyNXJlbSAxLjI1cmVtOyB9CiAgICAvKiBsaW5lIDQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgICAubWVkaXVtLWJsb2NrLWdyaWQtOSA+IGxpOm50aC1vZi10eXBlKG4pIHsKICAgICAgY2xlYXI6IG5vbmU7IH0KICAgIC8qIGxpbmUgNDksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAgIC5tZWRpdW0tYmxvY2stZ3JpZC05ID4gbGk6bnRoLW9mLXR5cGUoOW4rMSkgewogICAgICBjbGVhcjogYm90aDsgfQoKICAvKiBsaW5lIDQ0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgLm1lZGl1bS1ibG9jay1ncmlkLTEwID4gbGkgewogICAgd2lkdGg6IDEwJTsKICAgIHBhZGRpbmc6IDAgMC42MjVyZW0gMS4yNXJlbTsgfQogICAgLyogbGluZSA0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLm1lZGl1bS1ibG9jay1ncmlkLTEwID4gbGk6bnRoLW9mLXR5cGUobikgewogICAgICBjbGVhcjogbm9uZTsgfQogICAgLyogbGluZSA0OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLm1lZGl1bS1ibG9jay1ncmlkLTEwID4gbGk6bnRoLW9mLXR5cGUoMTBuKzEpIHsKICAgICAgY2xlYXI6IGJvdGg7IH0KCiAgLyogbGluZSA0NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogIC5tZWRpdW0tYmxvY2stZ3JpZC0xMSA+IGxpIHsKICAgIHdpZHRoOiA5LjA5MDkxJTsKICAgIHBhZGRpbmc6IDAgMC42MjVyZW0gMS4yNXJlbTsgfQogICAgLyogbGluZSA0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLm1lZGl1bS1ibG9jay1ncmlkLTExID4gbGk6bnRoLW9mLXR5cGUobikgewogICAgICBjbGVhcjogbm9uZTsgfQogICAgLyogbGluZSA0OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLm1lZGl1bS1ibG9jay1ncmlkLTExID4gbGk6bnRoLW9mLXR5cGUoMTFuKzEpIHsKICAgICAgY2xlYXI6IGJvdGg7IH0KCiAgLyogbGluZSA0NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogIC5tZWRpdW0tYmxvY2stZ3JpZC0xMiA+IGxpIHsKICAgIHdpZHRoOiA4LjMzMzMzJTsKICAgIHBhZGRpbmc6IDAgMC42MjVyZW0gMS4yNXJlbTsgfQogICAgLyogbGluZSA0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLm1lZGl1bS1ibG9jay1ncmlkLTEyID4gbGk6bnRoLW9mLXR5cGUobikgewogICAgICBjbGVhcjogbm9uZTsgfQogICAgLyogbGluZSA0OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLm1lZGl1bS1ibG9jay1ncmlkLTEyID4gbGk6bnRoLW9mLXR5cGUoMTJuKzEpIHsKICAgICAgY2xlYXI6IGJvdGg7IH0gfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0LjA2M2VtKSB7CiAgLyogbGluZSA0NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogIC5sYXJnZS1ibG9jay1ncmlkLTEgPiBsaSB7CiAgICB3aWR0aDogMTAwJTsKICAgIHBhZGRpbmc6IDAgMC42MjVyZW0gMS4yNXJlbTsgfQogICAgLyogbGluZSA0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLmxhcmdlLWJsb2NrLWdyaWQtMSA+IGxpOm50aC1vZi10eXBlKG4pIHsKICAgICAgY2xlYXI6IG5vbmU7IH0KICAgIC8qIGxpbmUgNDksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAgIC5sYXJnZS1ibG9jay1ncmlkLTEgPiBsaTpudGgtb2YtdHlwZSgxbisxKSB7CiAgICAgIGNsZWFyOiBib3RoOyB9CgogIC8qIGxpbmUgNDQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAubGFyZ2UtYmxvY2stZ3JpZC0yID4gbGkgewogICAgd2lkdGg6IDUwJTsKICAgIHBhZGRpbmc6IDAgMC42MjVyZW0gMS4yNXJlbTsgfQogICAgLyogbGluZSA0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLmxhcmdlLWJsb2NrLWdyaWQtMiA+IGxpOm50aC1vZi10eXBlKG4pIHsKICAgICAgY2xlYXI6IG5vbmU7IH0KICAgIC8qIGxpbmUgNDksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAgIC5sYXJnZS1ibG9jay1ncmlkLTIgPiBsaTpudGgtb2YtdHlwZSgybisxKSB7CiAgICAgIGNsZWFyOiBib3RoOyB9CgogIC8qIGxpbmUgNDQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAubGFyZ2UtYmxvY2stZ3JpZC0zID4gbGkgewogICAgd2lkdGg6IDMzLjMzMzMzJTsKICAgIHBhZGRpbmc6IDAgMC42MjVyZW0gMS4yNXJlbTsgfQogICAgLyogbGluZSA0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLmxhcmdlLWJsb2NrLWdyaWQtMyA+IGxpOm50aC1vZi10eXBlKG4pIHsKICAgICAgY2xlYXI6IG5vbmU7IH0KICAgIC8qIGxpbmUgNDksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAgIC5sYXJnZS1ibG9jay1ncmlkLTMgPiBsaTpudGgtb2YtdHlwZSgzbisxKSB7CiAgICAgIGNsZWFyOiBib3RoOyB9CgogIC8qIGxpbmUgNDQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAubGFyZ2UtYmxvY2stZ3JpZC00ID4gbGkgewogICAgd2lkdGg6IDI1JTsKICAgIHBhZGRpbmc6IDAgMC42MjVyZW0gMS4yNXJlbTsgfQogICAgLyogbGluZSA0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLmxhcmdlLWJsb2NrLWdyaWQtNCA+IGxpOm50aC1vZi10eXBlKG4pIHsKICAgICAgY2xlYXI6IG5vbmU7IH0KICAgIC8qIGxpbmUgNDksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAgIC5sYXJnZS1ibG9jay1ncmlkLTQgPiBsaTpudGgtb2YtdHlwZSg0bisxKSB7CiAgICAgIGNsZWFyOiBib3RoOyB9CgogIC8qIGxpbmUgNDQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAubGFyZ2UtYmxvY2stZ3JpZC01ID4gbGkgewogICAgd2lkdGg6IDIwJTsKICAgIHBhZGRpbmc6IDAgMC42MjVyZW0gMS4yNXJlbTsgfQogICAgLyogbGluZSA0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLmxhcmdlLWJsb2NrLWdyaWQtNSA+IGxpOm50aC1vZi10eXBlKG4pIHsKICAgICAgY2xlYXI6IG5vbmU7IH0KICAgIC8qIGxpbmUgNDksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAgIC5sYXJnZS1ibG9jay1ncmlkLTUgPiBsaTpudGgtb2YtdHlwZSg1bisxKSB7CiAgICAgIGNsZWFyOiBib3RoOyB9CgogIC8qIGxpbmUgNDQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAubGFyZ2UtYmxvY2stZ3JpZC02ID4gbGkgewogICAgd2lkdGg6IDE2LjY2NjY3JTsKICAgIHBhZGRpbmc6IDAgMC42MjVyZW0gMS4yNXJlbTsgfQogICAgLyogbGluZSA0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLmxhcmdlLWJsb2NrLWdyaWQtNiA+IGxpOm50aC1vZi10eXBlKG4pIHsKICAgICAgY2xlYXI6IG5vbmU7IH0KICAgIC8qIGxpbmUgNDksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAgIC5sYXJnZS1ibG9jay1ncmlkLTYgPiBsaTpudGgtb2YtdHlwZSg2bisxKSB7CiAgICAgIGNsZWFyOiBib3RoOyB9CgogIC8qIGxpbmUgNDQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAubGFyZ2UtYmxvY2stZ3JpZC03ID4gbGkgewogICAgd2lkdGg6IDE0LjI4NTcxJTsKICAgIHBhZGRpbmc6IDAgMC42MjVyZW0gMS4yNXJlbTsgfQogICAgLyogbGluZSA0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLmxhcmdlLWJsb2NrLWdyaWQtNyA+IGxpOm50aC1vZi10eXBlKG4pIHsKICAgICAgY2xlYXI6IG5vbmU7IH0KICAgIC8qIGxpbmUgNDksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAgIC5sYXJnZS1ibG9jay1ncmlkLTcgPiBsaTpudGgtb2YtdHlwZSg3bisxKSB7CiAgICAgIGNsZWFyOiBib3RoOyB9CgogIC8qIGxpbmUgNDQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAubGFyZ2UtYmxvY2stZ3JpZC04ID4gbGkgewogICAgd2lkdGg6IDEyLjUlOwogICAgcGFkZGluZzogMCAwLjYyNXJlbSAxLjI1cmVtOyB9CiAgICAvKiBsaW5lIDQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgICAubGFyZ2UtYmxvY2stZ3JpZC04ID4gbGk6bnRoLW9mLXR5cGUobikgewogICAgICBjbGVhcjogbm9uZTsgfQogICAgLyogbGluZSA0OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLmxhcmdlLWJsb2NrLWdyaWQtOCA+IGxpOm50aC1vZi10eXBlKDhuKzEpIHsKICAgICAgY2xlYXI6IGJvdGg7IH0KCiAgLyogbGluZSA0NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogIC5sYXJnZS1ibG9jay1ncmlkLTkgPiBsaSB7CiAgICB3aWR0aDogMTEuMTExMTElOwogICAgcGFkZGluZzogMCAwLjYyNXJlbSAxLjI1cmVtOyB9CiAgICAvKiBsaW5lIDQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgICAubGFyZ2UtYmxvY2stZ3JpZC05ID4gbGk6bnRoLW9mLXR5cGUobikgewogICAgICBjbGVhcjogbm9uZTsgfQogICAgLyogbGluZSA0OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLmxhcmdlLWJsb2NrLWdyaWQtOSA+IGxpOm50aC1vZi10eXBlKDluKzEpIHsKICAgICAgY2xlYXI6IGJvdGg7IH0KCiAgLyogbGluZSA0NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogIC5sYXJnZS1ibG9jay1ncmlkLTEwID4gbGkgewogICAgd2lkdGg6IDEwJTsKICAgIHBhZGRpbmc6IDAgMC42MjVyZW0gMS4yNXJlbTsgfQogICAgLyogbGluZSA0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLmxhcmdlLWJsb2NrLWdyaWQtMTAgPiBsaTpudGgtb2YtdHlwZShuKSB7CiAgICAgIGNsZWFyOiBub25lOyB9CiAgICAvKiBsaW5lIDQ5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgICAubGFyZ2UtYmxvY2stZ3JpZC0xMCA+IGxpOm50aC1vZi10eXBlKDEwbisxKSB7CiAgICAgIGNsZWFyOiBib3RoOyB9CgogIC8qIGxpbmUgNDQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAubGFyZ2UtYmxvY2stZ3JpZC0xMSA+IGxpIHsKICAgIHdpZHRoOiA5LjA5MDkxJTsKICAgIHBhZGRpbmc6IDAgMC42MjVyZW0gMS4yNXJlbTsgfQogICAgLyogbGluZSA0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLmxhcmdlLWJsb2NrLWdyaWQtMTEgPiBsaTpudGgtb2YtdHlwZShuKSB7CiAgICAgIGNsZWFyOiBub25lOyB9CiAgICAvKiBsaW5lIDQ5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgICAubGFyZ2UtYmxvY2stZ3JpZC0xMSA+IGxpOm50aC1vZi10eXBlKDExbisxKSB7CiAgICAgIGNsZWFyOiBib3RoOyB9CgogIC8qIGxpbmUgNDQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19ibG9jay1ncmlkLnNjc3MgKi8KICAubGFyZ2UtYmxvY2stZ3JpZC0xMiA+IGxpIHsKICAgIHdpZHRoOiA4LjMzMzMzJTsKICAgIHBhZGRpbmc6IDAgMC42MjVyZW0gMS4yNXJlbTsgfQogICAgLyogbGluZSA0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Jsb2NrLWdyaWQuc2NzcyAqLwogICAgLmxhcmdlLWJsb2NrLWdyaWQtMTIgPiBsaTpudGgtb2YtdHlwZShuKSB7CiAgICAgIGNsZWFyOiBub25lOyB9CiAgICAvKiBsaW5lIDQ5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYmxvY2stZ3JpZC5zY3NzICovCiAgICAubGFyZ2UtYmxvY2stZ3JpZC0xMiA+IGxpOm50aC1vZi10eXBlKDEybisxKSB7CiAgICAgIGNsZWFyOiBib3RoOyB9IH0KLyogbGluZSAxMTQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19icmVhZGNydW1icy5zY3NzICovCi5icmVhZGNydW1icyB7CiAgZGlzcGxheTogYmxvY2s7CiAgcGFkZGluZzogMC41NjI1cmVtIDAuODc1cmVtIDAuNTYyNXJlbTsKICBvdmVyZmxvdzogaGlkZGVuOwogIG1hcmdpbi1sZWZ0OiAwOwogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKICBib3JkZXItd2lkdGg6IDFweDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjRmNGY0OwogIGJvcmRlci1jb2xvcjogI2RhZGFkYTsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDsKICBib3JkZXItcmFkaXVzOiAzcHg7IH0KICAvKiBsaW5lIDExOCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2JyZWFkY3J1bWJzLnNjc3MgKi8KICAuYnJlYWRjcnVtYnMgPiAqIHsKICAgIG1hcmdpbjogMDsKICAgIGZsb2F0OiBsZWZ0OwogICAgZm9udC1zaXplOiAwLjY4NzVyZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9CiAgICAvKiBsaW5lIDYyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnJlYWRjcnVtYnMuc2NzcyAqLwogICAgLmJyZWFkY3J1bWJzID4gKjpob3ZlciBhLCAuYnJlYWRjcnVtYnMgPiAqOmZvY3VzIGEgewogICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfQogICAgLyogbGluZSA2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2JyZWFkY3J1bWJzLnNjc3MgKi8KICAgIC5icmVhZGNydW1icyA+ICogYSwKICAgIC5icmVhZGNydW1icyA+ICogc3BhbiB7CiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIGNvbG9yOiAjMDA4Y2JhOyB9CiAgICAvKiBsaW5lIDcxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnJlYWRjcnVtYnMuc2NzcyAqLwogICAgLmJyZWFkY3J1bWJzID4gKi5jdXJyZW50IHsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICBjb2xvcjogIzMzMzMzMzsgfQogICAgICAvKiBsaW5lIDc0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnJlYWRjcnVtYnMuc2NzcyAqLwogICAgICAuYnJlYWRjcnVtYnMgPiAqLmN1cnJlbnQgYSB7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIGNvbG9yOiAjMzMzMzMzOyB9CiAgICAgIC8qIGxpbmUgODAsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19icmVhZGNydW1icy5zY3NzICovCiAgICAgIC5icmVhZGNydW1icyA+ICouY3VycmVudDpob3ZlciwgLmJyZWFkY3J1bWJzID4gKi5jdXJyZW50OmhvdmVyIGEsIC5icmVhZGNydW1icyA+ICouY3VycmVudDpmb2N1cywgLmJyZWFkY3J1bWJzID4gKi5jdXJyZW50OmZvY3VzIGEgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQogICAgLyogbGluZSA4NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2JyZWFkY3J1bWJzLnNjc3MgKi8KICAgIC5icmVhZGNydW1icyA+ICoudW5hdmFpbGFibGUgewogICAgICBjb2xvcjogIzk5OTk5OTsgfQogICAgICAvKiBsaW5lIDg2LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnJlYWRjcnVtYnMuc2NzcyAqLwogICAgICAuYnJlYWRjcnVtYnMgPiAqLnVuYXZhaWxhYmxlIGEgewogICAgICAgIGNvbG9yOiAjOTk5OTk5OyB9CiAgICAgIC8qIGxpbmUgOTEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19icmVhZGNydW1icy5zY3NzICovCiAgICAgIC5icmVhZGNydW1icyA+ICoudW5hdmFpbGFibGU6aG92ZXIsIC5icmVhZGNydW1icyA+ICoudW5hdmFpbGFibGU6aG92ZXIgYSwgLmJyZWFkY3J1bWJzID4gKi51bmF2YWlsYWJsZTpmb2N1cywKICAgICAgLmJyZWFkY3J1bWJzID4gKi51bmF2YWlsYWJsZSBhOmZvY3VzIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgY29sb3I6ICM5OTk5OTk7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OyB9CiAgICAvKiBsaW5lIDk4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnJlYWRjcnVtYnMuc2NzcyAqLwogICAgLmJyZWFkY3J1bWJzID4gKjpiZWZvcmUgewogICAgICBjb250ZW50OiAiLyI7CiAgICAgIGNvbG9yOiAjYWFhYWFhOwogICAgICBtYXJnaW46IDAgMC43NXJlbTsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB0b3A6IDFweDsgfQogICAgLyogbGluZSAxMDYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19icmVhZGNydW1icy5zY3NzICovCiAgICAuYnJlYWRjcnVtYnMgPiAqOmZpcnN0LWNoaWxkOmJlZm9yZSB7CiAgICAgIGNvbnRlbnQ6ICIgIjsKICAgICAgbWFyZ2luOiAwOyB9CgovKiBsaW5lIDE5NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbnMuc2NzcyAqLwpidXR0b24sIC5idXR0b24gewogIGN1cnNvcjogcG9pbnRlcjsKICBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwgIkhlbHZldGljYSIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICBsaW5lLWhlaWdodDogbm9ybWFsOwogIG1hcmdpbjogMCAwIDEuMjVyZW07CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHBhZGRpbmctdG9wOiAxcmVtOwogIHBhZGRpbmctcmlnaHQ6IDJyZW07CiAgcGFkZGluZy1ib3R0b206IDEuMDYyNXJlbTsKICBwYWRkaW5nLWxlZnQ6IDJyZW07CiAgZm9udC1zaXplOiAxcmVtOwogIC8qICAgICBAZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGZvbnQtc2l6ZTogJHBhZGRpbmcgLSByZW0tY2FsYygyKTsgfSAqLwogIGJhY2tncm91bmQtY29sb3I6ICMwMDhjYmE7CiAgYm9yZGVyLWNvbG9yOiAjMDA3OWExOwogIGNvbG9yOiB3aGl0ZTsKICAtd2Via2l0LXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMzAwbXMgZWFzZS1vdXQ7CiAgLW1vei10cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDMwMG1zIGVhc2Utb3V0OwogIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMzAwbXMgZWFzZS1vdXQ7CiAgcGFkZGluZy10b3A6IDEuMDYyNXJlbTsKICBwYWRkaW5nLWJvdHRvbTogMXJlbTsKICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgYm9yZGVyOiBub25lOwogIGZvbnQtd2VpZ2h0OiBub3JtYWwgIWltcG9ydGFudDsgfQogIC8qIGxpbmUgMTQyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnV0dG9ucy5zY3NzICovCiAgYnV0dG9uOmhvdmVyLCBidXR0b246Zm9jdXMsIC5idXR0b246aG92ZXIsIC5idXR0b246Zm9jdXMgewogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwNzlhMTsgfQogIC8qIGxpbmUgMTUzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnV0dG9ucy5zY3NzICovCiAgYnV0dG9uOmhvdmVyLCBidXR0b246Zm9jdXMsIC5idXR0b246aG92ZXIsIC5idXR0b246Zm9jdXMgewogICAgY29sb3I6IHdoaXRlOyB9CiAgLyogbGluZSAyMDUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19idXR0b25zLnNjc3MgKi8KICBidXR0b24uc2Vjb25kYXJ5LCAuYnV0dG9uLnNlY29uZGFyeSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTdlN2U3OwogICAgYm9yZGVyLWNvbG9yOiAjZGFkYWRhOwogICAgY29sb3I6ICMzMzMzMzM7IH0KICAgIC8qIGxpbmUgMTQyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnV0dG9ucy5zY3NzICovCiAgICBidXR0b24uc2Vjb25kYXJ5OmhvdmVyLCBidXR0b24uc2Vjb25kYXJ5OmZvY3VzLCAuYnV0dG9uLnNlY29uZGFyeTpob3ZlciwgLmJ1dHRvbi5zZWNvbmRhcnk6Zm9jdXMgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGFkYWRhOyB9CiAgICAvKiBsaW5lIDE0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbnMuc2NzcyAqLwogICAgYnV0dG9uLnNlY29uZGFyeTpob3ZlciwgYnV0dG9uLnNlY29uZGFyeTpmb2N1cywgLmJ1dHRvbi5zZWNvbmRhcnk6aG92ZXIsIC5idXR0b24uc2Vjb25kYXJ5OmZvY3VzIHsKICAgICAgY29sb3I6ICMzMzMzMzM7IH0KICAvKiBsaW5lIDIwNiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbnMuc2NzcyAqLwogIGJ1dHRvbi5zdWNjZXNzLCAuYnV0dG9uLnN1Y2Nlc3MgewogICAgYmFja2dyb3VuZC1jb2xvcjogIzVlODk0OTsKICAgIGJvcmRlci1jb2xvcjogIzUzNzg0MDsKICAgIGNvbG9yOiB3aGl0ZTsgfQogICAgLyogbGluZSAxNDIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19idXR0b25zLnNjc3MgKi8KICAgIGJ1dHRvbi5zdWNjZXNzOmhvdmVyLCBidXR0b24uc3VjY2Vzczpmb2N1cywgLmJ1dHRvbi5zdWNjZXNzOmhvdmVyLCAuYnV0dG9uLnN1Y2Nlc3M6Zm9jdXMgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTM3ODQwOyB9CiAgICAvKiBsaW5lIDE1MywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbnMuc2NzcyAqLwogICAgYnV0dG9uLnN1Y2Nlc3M6aG92ZXIsIGJ1dHRvbi5zdWNjZXNzOmZvY3VzLCAuYnV0dG9uLnN1Y2Nlc3M6aG92ZXIsIC5idXR0b24uc3VjY2Vzczpmb2N1cyB7CiAgICAgIGNvbG9yOiB3aGl0ZTsgfQogIC8qIGxpbmUgMjA3LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnV0dG9ucy5zY3NzICovCiAgYnV0dG9uLmFsZXJ0LCAuYnV0dG9uLmFsZXJ0IHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmMDQxMjQ7CiAgICBib3JkZXItY29sb3I6ICNlYTJmMTA7CiAgICBjb2xvcjogd2hpdGU7IH0KICAgIC8qIGxpbmUgMTQyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnV0dG9ucy5zY3NzICovCiAgICBidXR0b24uYWxlcnQ6aG92ZXIsIGJ1dHRvbi5hbGVydDpmb2N1cywgLmJ1dHRvbi5hbGVydDpob3ZlciwgLmJ1dHRvbi5hbGVydDpmb2N1cyB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlYTJmMTA7IH0KICAgIC8qIGxpbmUgMTUzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnV0dG9ucy5zY3NzICovCiAgICBidXR0b24uYWxlcnQ6aG92ZXIsIGJ1dHRvbi5hbGVydDpmb2N1cywgLmJ1dHRvbi5hbGVydDpob3ZlciwgLmJ1dHRvbi5hbGVydDpmb2N1cyB7CiAgICAgIGNvbG9yOiB3aGl0ZTsgfQogIC8qIGxpbmUgMjA5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnV0dG9ucy5zY3NzICovCiAgYnV0dG9uLmxhcmdlLCAuYnV0dG9uLmxhcmdlIHsKICAgIHBhZGRpbmctdG9wOiAxLjEyNXJlbTsKICAgIHBhZGRpbmctcmlnaHQ6IDIuMjVyZW07CiAgICBwYWRkaW5nLWJvdHRvbTogMS4xODc1cmVtOwogICAgcGFkZGluZy1sZWZ0OiAyLjI1cmVtOwogICAgZm9udC1zaXplOiAxLjI1cmVtOwogICAgLyogICAgIEBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZm9udC1zaXplOiAkcGFkZGluZyAtIHJlbS1jYWxjKDIpOyB9ICovIH0KICAvKiBsaW5lIDIxMCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbnMuc2NzcyAqLwogIGJ1dHRvbi5zbWFsbCwgLmJ1dHRvbi5zbWFsbCB7CiAgICBwYWRkaW5nLXRvcDogMC44NzVyZW07CiAgICBwYWRkaW5nLXJpZ2h0OiAxLjc1cmVtOwogICAgcGFkZGluZy1ib3R0b206IDAuOTM3NXJlbTsKICAgIHBhZGRpbmctbGVmdDogMS43NXJlbTsKICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtOwogICAgLyogICAgIEBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZm9udC1zaXplOiAkcGFkZGluZyAtIHJlbS1jYWxjKDIpOyB9ICovIH0KICAvKiBsaW5lIDIxMSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbnMuc2NzcyAqLwogIGJ1dHRvbi50aW55LCAuYnV0dG9uLnRpbnkgewogICAgcGFkZGluZy10b3A6IDAuNjI1cmVtOwogICAgcGFkZGluZy1yaWdodDogMS4yNXJlbTsKICAgIHBhZGRpbmctYm90dG9tOiAwLjY4NzVyZW07CiAgICBwYWRkaW5nLWxlZnQ6IDEuMjVyZW07CiAgICBmb250LXNpemU6IDAuNjg3NXJlbTsKICAgIC8qICAgICBAZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGZvbnQtc2l6ZTogJHBhZGRpbmcgLSByZW0tY2FsYygyKTsgfSAqLyB9CiAgLyogbGluZSAyMTIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19idXR0b25zLnNjc3MgKi8KICBidXR0b24uZXhwYW5kLCAuYnV0dG9uLmV4cGFuZCB7CiAgICBwYWRkaW5nLXJpZ2h0OiAwOwogICAgcGFkZGluZy1sZWZ0OiAwOwogICAgd2lkdGg6IDEwMCU7IH0KICAvKiBsaW5lIDIxNCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbnMuc2NzcyAqLwogIGJ1dHRvbi5sZWZ0LWFsaWduLCAuYnV0dG9uLmxlZnQtYWxpZ24gewogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIHRleHQtaW5kZW50OiAwLjc1cmVtOyB9CiAgLyogbGluZSAyMTUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19idXR0b25zLnNjc3MgKi8KICBidXR0b24ucmlnaHQtYWxpZ24sIC5idXR0b24ucmlnaHQtYWxpZ24gewogICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICBwYWRkaW5nLXJpZ2h0OiAwLjc1cmVtOyB9CiAgLyogbGluZSAyMTcsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19idXR0b25zLnNjc3MgKi8KICBidXR0b24ucmFkaXVzLCAuYnV0dG9uLnJhZGl1cyB7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsgfQogIC8qIGxpbmUgMjE4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnV0dG9ucy5zY3NzICovCiAgYnV0dG9uLnJvdW5kLCAuYnV0dG9uLnJvdW5kIHsKICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMTAwMHB4OwogICAgYm9yZGVyLXJhZGl1czogMTAwMHB4OyB9CiAgLyogbGluZSAyMjAsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19idXR0b25zLnNjc3MgKi8KICBidXR0b24uZGlzYWJsZWQsIGJ1dHRvbltkaXNhYmxlZF0sIC5idXR0b24uZGlzYWJsZWQsIC5idXR0b25bZGlzYWJsZWRdIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDhjYmE7CiAgICBib3JkZXItY29sb3I6ICMwMDc5YTE7CiAgICBjb2xvcjogd2hpdGU7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICBvcGFjaXR5OiAwLjc7CiAgICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7CiAgICBib3gtc2hhZG93OiBub25lOyB9CiAgICAvKiBsaW5lIDE0MiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbnMuc2NzcyAqLwogICAgYnV0dG9uLmRpc2FibGVkOmhvdmVyLCBidXR0b24uZGlzYWJsZWQ6Zm9jdXMsIGJ1dHRvbltkaXNhYmxlZF06aG92ZXIsIGJ1dHRvbltkaXNhYmxlZF06Zm9jdXMsIC5idXR0b24uZGlzYWJsZWQ6aG92ZXIsIC5idXR0b24uZGlzYWJsZWQ6Zm9jdXMsIC5idXR0b25bZGlzYWJsZWRdOmhvdmVyLCAuYnV0dG9uW2Rpc2FibGVkXTpmb2N1cyB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDc5YTE7IH0KICAgIC8qIGxpbmUgMTUzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnV0dG9ucy5zY3NzICovCiAgICBidXR0b24uZGlzYWJsZWQ6aG92ZXIsIGJ1dHRvbi5kaXNhYmxlZDpmb2N1cywgYnV0dG9uW2Rpc2FibGVkXTpob3ZlciwgYnV0dG9uW2Rpc2FibGVkXTpmb2N1cywgLmJ1dHRvbi5kaXNhYmxlZDpob3ZlciwgLmJ1dHRvbi5kaXNhYmxlZDpmb2N1cywgLmJ1dHRvbltkaXNhYmxlZF06aG92ZXIsIC5idXR0b25bZGlzYWJsZWRdOmZvY3VzIHsKICAgICAgY29sb3I6IHdoaXRlOyB9CiAgICAvKiBsaW5lIDE2NiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbnMuc2NzcyAqLwogICAgYnV0dG9uLmRpc2FibGVkOmhvdmVyLCBidXR0b24uZGlzYWJsZWQ6Zm9jdXMsIGJ1dHRvbltkaXNhYmxlZF06aG92ZXIsIGJ1dHRvbltkaXNhYmxlZF06Zm9jdXMsIC5idXR0b24uZGlzYWJsZWQ6aG92ZXIsIC5idXR0b24uZGlzYWJsZWQ6Zm9jdXMsIC5idXR0b25bZGlzYWJsZWRdOmhvdmVyLCAuYnV0dG9uW2Rpc2FibGVkXTpmb2N1cyB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDhjYmE7IH0KICAgIC8qIGxpbmUgMjIxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnV0dG9ucy5zY3NzICovCiAgICBidXR0b24uZGlzYWJsZWQuc2Vjb25kYXJ5LCBidXR0b25bZGlzYWJsZWRdLnNlY29uZGFyeSwgLmJ1dHRvbi5kaXNhYmxlZC5zZWNvbmRhcnksIC5idXR0b25bZGlzYWJsZWRdLnNlY29uZGFyeSB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlN2U3ZTc7CiAgICAgIGJvcmRlci1jb2xvcjogI2RhZGFkYTsKICAgICAgY29sb3I6ICMzMzMzMzM7CiAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgb3BhY2l0eTogMC43OwogICAgICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7CiAgICAgIGJveC1zaGFkb3c6IG5vbmU7IH0KICAgICAgLyogbGluZSAxNDIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19idXR0b25zLnNjc3MgKi8KICAgICAgYnV0dG9uLmRpc2FibGVkLnNlY29uZGFyeTpob3ZlciwgYnV0dG9uLmRpc2FibGVkLnNlY29uZGFyeTpmb2N1cywgYnV0dG9uW2Rpc2FibGVkXS5zZWNvbmRhcnk6aG92ZXIsIGJ1dHRvbltkaXNhYmxlZF0uc2Vjb25kYXJ5OmZvY3VzLCAuYnV0dG9uLmRpc2FibGVkLnNlY29uZGFyeTpob3ZlciwgLmJ1dHRvbi5kaXNhYmxlZC5zZWNvbmRhcnk6Zm9jdXMsIC5idXR0b25bZGlzYWJsZWRdLnNlY29uZGFyeTpob3ZlciwgLmJ1dHRvbltkaXNhYmxlZF0uc2Vjb25kYXJ5OmZvY3VzIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGFkYWRhOyB9CiAgICAgIC8qIGxpbmUgMTQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnV0dG9ucy5zY3NzICovCiAgICAgIGJ1dHRvbi5kaXNhYmxlZC5zZWNvbmRhcnk6aG92ZXIsIGJ1dHRvbi5kaXNhYmxlZC5zZWNvbmRhcnk6Zm9jdXMsIGJ1dHRvbltkaXNhYmxlZF0uc2Vjb25kYXJ5OmhvdmVyLCBidXR0b25bZGlzYWJsZWRdLnNlY29uZGFyeTpmb2N1cywgLmJ1dHRvbi5kaXNhYmxlZC5zZWNvbmRhcnk6aG92ZXIsIC5idXR0b24uZGlzYWJsZWQuc2Vjb25kYXJ5OmZvY3VzLCAuYnV0dG9uW2Rpc2FibGVkXS5zZWNvbmRhcnk6aG92ZXIsIC5idXR0b25bZGlzYWJsZWRdLnNlY29uZGFyeTpmb2N1cyB7CiAgICAgICAgY29sb3I6ICMzMzMzMzM7IH0KICAgICAgLyogbGluZSAxNjYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19idXR0b25zLnNjc3MgKi8KICAgICAgYnV0dG9uLmRpc2FibGVkLnNlY29uZGFyeTpob3ZlciwgYnV0dG9uLmRpc2FibGVkLnNlY29uZGFyeTpmb2N1cywgYnV0dG9uW2Rpc2FibGVkXS5zZWNvbmRhcnk6aG92ZXIsIGJ1dHRvbltkaXNhYmxlZF0uc2Vjb25kYXJ5OmZvY3VzLCAuYnV0dG9uLmRpc2FibGVkLnNlY29uZGFyeTpob3ZlciwgLmJ1dHRvbi5kaXNhYmxlZC5zZWNvbmRhcnk6Zm9jdXMsIC5idXR0b25bZGlzYWJsZWRdLnNlY29uZGFyeTpob3ZlciwgLmJ1dHRvbltkaXNhYmxlZF0uc2Vjb25kYXJ5OmZvY3VzIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTdlN2U3OyB9CiAgICAvKiBsaW5lIDIyMiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbnMuc2NzcyAqLwogICAgYnV0dG9uLmRpc2FibGVkLnN1Y2Nlc3MsIGJ1dHRvbltkaXNhYmxlZF0uc3VjY2VzcywgLmJ1dHRvbi5kaXNhYmxlZC5zdWNjZXNzLCAuYnV0dG9uW2Rpc2FibGVkXS5zdWNjZXNzIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzVlODk0OTsKICAgICAgYm9yZGVyLWNvbG9yOiAjNTM3ODQwOwogICAgICBjb2xvcjogd2hpdGU7CiAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgb3BhY2l0eTogMC43OwogICAgICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7CiAgICAgIGJveC1zaGFkb3c6IG5vbmU7IH0KICAgICAgLyogbGluZSAxNDIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19idXR0b25zLnNjc3MgKi8KICAgICAgYnV0dG9uLmRpc2FibGVkLnN1Y2Nlc3M6aG92ZXIsIGJ1dHRvbi5kaXNhYmxlZC5zdWNjZXNzOmZvY3VzLCBidXR0b25bZGlzYWJsZWRdLnN1Y2Nlc3M6aG92ZXIsIGJ1dHRvbltkaXNhYmxlZF0uc3VjY2Vzczpmb2N1cywgLmJ1dHRvbi5kaXNhYmxlZC5zdWNjZXNzOmhvdmVyLCAuYnV0dG9uLmRpc2FibGVkLnN1Y2Nlc3M6Zm9jdXMsIC5idXR0b25bZGlzYWJsZWRdLnN1Y2Nlc3M6aG92ZXIsIC5idXR0b25bZGlzYWJsZWRdLnN1Y2Nlc3M6Zm9jdXMgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM1Mzc4NDA7IH0KICAgICAgLyogbGluZSAxNTMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19idXR0b25zLnNjc3MgKi8KICAgICAgYnV0dG9uLmRpc2FibGVkLnN1Y2Nlc3M6aG92ZXIsIGJ1dHRvbi5kaXNhYmxlZC5zdWNjZXNzOmZvY3VzLCBidXR0b25bZGlzYWJsZWRdLnN1Y2Nlc3M6aG92ZXIsIGJ1dHRvbltkaXNhYmxlZF0uc3VjY2Vzczpmb2N1cywgLmJ1dHRvbi5kaXNhYmxlZC5zdWNjZXNzOmhvdmVyLCAuYnV0dG9uLmRpc2FibGVkLnN1Y2Nlc3M6Zm9jdXMsIC5idXR0b25bZGlzYWJsZWRdLnN1Y2Nlc3M6aG92ZXIsIC5idXR0b25bZGlzYWJsZWRdLnN1Y2Nlc3M6Zm9jdXMgewogICAgICAgIGNvbG9yOiB3aGl0ZTsgfQogICAgICAvKiBsaW5lIDE2NiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbnMuc2NzcyAqLwogICAgICBidXR0b24uZGlzYWJsZWQuc3VjY2Vzczpob3ZlciwgYnV0dG9uLmRpc2FibGVkLnN1Y2Nlc3M6Zm9jdXMsIGJ1dHRvbltkaXNhYmxlZF0uc3VjY2Vzczpob3ZlciwgYnV0dG9uW2Rpc2FibGVkXS5zdWNjZXNzOmZvY3VzLCAuYnV0dG9uLmRpc2FibGVkLnN1Y2Nlc3M6aG92ZXIsIC5idXR0b24uZGlzYWJsZWQuc3VjY2Vzczpmb2N1cywgLmJ1dHRvbltkaXNhYmxlZF0uc3VjY2Vzczpob3ZlciwgLmJ1dHRvbltkaXNhYmxlZF0uc3VjY2Vzczpmb2N1cyB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzVlODk0OTsgfQogICAgLyogbGluZSAyMjMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19idXR0b25zLnNjc3MgKi8KICAgIGJ1dHRvbi5kaXNhYmxlZC5hbGVydCwgYnV0dG9uW2Rpc2FibGVkXS5hbGVydCwgLmJ1dHRvbi5kaXNhYmxlZC5hbGVydCwgLmJ1dHRvbltkaXNhYmxlZF0uYWxlcnQgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjA0MTI0OwogICAgICBib3JkZXItY29sb3I6ICNlYTJmMTA7CiAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsKICAgICAgYm94LXNoYWRvdzogbm9uZTsgfQogICAgICAvKiBsaW5lIDE0MiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbnMuc2NzcyAqLwogICAgICBidXR0b24uZGlzYWJsZWQuYWxlcnQ6aG92ZXIsIGJ1dHRvbi5kaXNhYmxlZC5hbGVydDpmb2N1cywgYnV0dG9uW2Rpc2FibGVkXS5hbGVydDpob3ZlciwgYnV0dG9uW2Rpc2FibGVkXS5hbGVydDpmb2N1cywgLmJ1dHRvbi5kaXNhYmxlZC5hbGVydDpob3ZlciwgLmJ1dHRvbi5kaXNhYmxlZC5hbGVydDpmb2N1cywgLmJ1dHRvbltkaXNhYmxlZF0uYWxlcnQ6aG92ZXIsIC5idXR0b25bZGlzYWJsZWRdLmFsZXJ0OmZvY3VzIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWEyZjEwOyB9CiAgICAgIC8qIGxpbmUgMTUzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnV0dG9ucy5zY3NzICovCiAgICAgIGJ1dHRvbi5kaXNhYmxlZC5hbGVydDpob3ZlciwgYnV0dG9uLmRpc2FibGVkLmFsZXJ0OmZvY3VzLCBidXR0b25bZGlzYWJsZWRdLmFsZXJ0OmhvdmVyLCBidXR0b25bZGlzYWJsZWRdLmFsZXJ0OmZvY3VzLCAuYnV0dG9uLmRpc2FibGVkLmFsZXJ0OmhvdmVyLCAuYnV0dG9uLmRpc2FibGVkLmFsZXJ0OmZvY3VzLCAuYnV0dG9uW2Rpc2FibGVkXS5hbGVydDpob3ZlciwgLmJ1dHRvbltkaXNhYmxlZF0uYWxlcnQ6Zm9jdXMgewogICAgICAgIGNvbG9yOiB3aGl0ZTsgfQogICAgICAvKiBsaW5lIDE2NiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbnMuc2NzcyAqLwogICAgICBidXR0b24uZGlzYWJsZWQuYWxlcnQ6aG92ZXIsIGJ1dHRvbi5kaXNhYmxlZC5hbGVydDpmb2N1cywgYnV0dG9uW2Rpc2FibGVkXS5hbGVydDpob3ZlciwgYnV0dG9uW2Rpc2FibGVkXS5hbGVydDpmb2N1cywgLmJ1dHRvbi5kaXNhYmxlZC5hbGVydDpob3ZlciwgLmJ1dHRvbi5kaXNhYmxlZC5hbGVydDpmb2N1cywgLmJ1dHRvbltkaXNhYmxlZF0uYWxlcnQ6aG92ZXIsIC5idXR0b25bZGlzYWJsZWRdLmFsZXJ0OmZvY3VzIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjA0MTI0OyB9CgpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQwLjA2M2VtKSB7CiAgLyogbGluZSAyMjgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19idXR0b25zLnNjc3MgKi8KICBidXR0b24sIC5idXR0b24gewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9IH0KLyogbGluZSA4MCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbi1ncm91cHMuc2NzcyAqLwouYnV0dG9uLWdyb3VwIHsKICBsaXN0LXN0eWxlOiBub25lOwogIG1hcmdpbjogMDsKICAqem9vbTogMTsgfQogIC8qIGxpbmUgMTY1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ2xvYmFsLnNjc3MgKi8KICAuYnV0dG9uLWdyb3VwOmJlZm9yZSwgLmJ1dHRvbi1ncm91cDphZnRlciB7CiAgICBjb250ZW50OiAiICI7CiAgICBkaXNwbGF5OiB0YWJsZTsgfQogIC8qIGxpbmUgMTY2LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ2xvYmFsLnNjc3MgKi8KICAuYnV0dG9uLWdyb3VwOmFmdGVyIHsKICAgIGNsZWFyOiBib3RoOyB9CiAgLyogbGluZSA4MiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbi1ncm91cHMuc2NzcyAqLwogIC5idXR0b24tZ3JvdXAgPiAqIHsKICAgIG1hcmdpbjogMDsKICAgIGZsb2F0OiBsZWZ0OyB9CiAgICAvKiBsaW5lIDM1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnV0dG9uLWdyb3Vwcy5zY3NzICovCiAgICAuYnV0dG9uLWdyb3VwID4gKiA+IGJ1dHRvbiwgLmJ1dHRvbi1ncm91cCA+ICogLmJ1dHRvbiB7CiAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkOwogICAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsgfQogICAgLyogbGluZSA0NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbi1ncm91cHMuc2NzcyAqLwogICAgLmJ1dHRvbi1ncm91cCA+ICo6Zmlyc3QtY2hpbGQgewogICAgICBtYXJnaW4tbGVmdDogMDsgfQogIC8qIGxpbmUgMzUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19idXR0b24tZ3JvdXBzLnNjc3MgKi8KICAuYnV0dG9uLWdyb3VwLnJhZGl1cyA+ICogPiBidXR0b24sIC5idXR0b24tZ3JvdXAucmFkaXVzID4gKiAuYnV0dG9uIHsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7IH0KICAvKiBsaW5lIDYzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnV0dG9uLWdyb3Vwcy5zY3NzICovCiAgLmJ1dHRvbi1ncm91cC5yYWRpdXMgPiAqOmZpcnN0LWNoaWxkLCAuYnV0dG9uLWdyb3VwLnJhZGl1cyA+ICo6Zmlyc3QtY2hpbGQgPiBhLCAuYnV0dG9uLWdyb3VwLnJhZGl1cyA+ICo6Zmlyc3QtY2hpbGQgPiBidXR0b24sIC5idXR0b24tZ3JvdXAucmFkaXVzID4gKjpmaXJzdC1jaGlsZCA+IC5idXR0b24gewogICAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6IDNweDsKICAgIC1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OiAzcHg7CiAgICAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDNweDsKICAgIC13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogM3B4OwogICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogM3B4OwogICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogM3B4OyB9CiAgLyogbGluZSA2NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbi1ncm91cHMuc2NzcyAqLwogIC5idXR0b24tZ3JvdXAucmFkaXVzID4gKjpsYXN0LWNoaWxkLCAuYnV0dG9uLWdyb3VwLnJhZGl1cyA+ICo6bGFzdC1jaGlsZCA+IGEsIC5idXR0b24tZ3JvdXAucmFkaXVzID4gKjpsYXN0LWNoaWxkID4gYnV0dG9uLCAuYnV0dG9uLWdyb3VwLnJhZGl1cyA+ICo6bGFzdC1jaGlsZCA+IC5idXR0b24gewogICAgLW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OiAzcHg7CiAgICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6IDNweDsKICAgIC13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDNweDsKICAgIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDsKICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7CiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4OyB9CiAgLyogbGluZSAzNSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbi1ncm91cHMuc2NzcyAqLwogIC5idXR0b24tZ3JvdXAucm91bmQgPiAqID4gYnV0dG9uLCAuYnV0dG9uLWdyb3VwLnJvdW5kID4gKiAuYnV0dG9uIHsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7IH0KICAvKiBsaW5lIDYzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnV0dG9uLWdyb3Vwcy5zY3NzICovCiAgLmJ1dHRvbi1ncm91cC5yb3VuZCA+ICo6Zmlyc3QtY2hpbGQsIC5idXR0b24tZ3JvdXAucm91bmQgPiAqOmZpcnN0LWNoaWxkID4gYSwgLmJ1dHRvbi1ncm91cC5yb3VuZCA+ICo6Zmlyc3QtY2hpbGQgPiBidXR0b24sIC5idXR0b24tZ3JvdXAucm91bmQgPiAqOmZpcnN0LWNoaWxkID4gLmJ1dHRvbiB7CiAgICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDogMTAwMHB4OwogICAgLW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6IDEwMDBweDsKICAgIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMTAwMHB4OwogICAgLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxMDAwcHg7CiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAxMDAwcHg7CiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxMDAwcHg7IH0KICAvKiBsaW5lIDY3LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnV0dG9uLWdyb3Vwcy5zY3NzICovCiAgLmJ1dHRvbi1ncm91cC5yb3VuZCA+ICo6bGFzdC1jaGlsZCwgLmJ1dHRvbi1ncm91cC5yb3VuZCA+ICo6bGFzdC1jaGlsZCA+IGEsIC5idXR0b24tZ3JvdXAucm91bmQgPiAqOmxhc3QtY2hpbGQgPiBidXR0b24sIC5idXR0b24tZ3JvdXAucm91bmQgPiAqOmxhc3QtY2hpbGQgPiAuYnV0dG9uIHsKICAgIC1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDogMTAwMHB4OwogICAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OiAxMDAwcHg7CiAgICAtd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxMDAwcHg7CiAgICAtd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAxMDAwcHg7CiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMTAwMHB4OwogICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDEwMDBweDsgfQogIC8qIGxpbmUgODgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19idXR0b24tZ3JvdXBzLnNjc3MgKi8KICAuYnV0dG9uLWdyb3VwLmV2ZW4tMiBsaSB7CiAgICB3aWR0aDogNTAlOyB9CiAgICAvKiBsaW5lIDM1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnV0dG9uLWdyb3Vwcy5zY3NzICovCiAgICAuYnV0dG9uLWdyb3VwLmV2ZW4tMiBsaSA+IGJ1dHRvbiwgLmJ1dHRvbi1ncm91cC5ldmVuLTIgbGkgLmJ1dHRvbiB7CiAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkOwogICAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsgfQogICAgLyogbGluZSA3MywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbi1ncm91cHMuc2NzcyAqLwogICAgLmJ1dHRvbi1ncm91cC5ldmVuLTIgbGkgYnV0dG9uLCAuYnV0dG9uLWdyb3VwLmV2ZW4tMiBsaSAuYnV0dG9uIHsKICAgICAgd2lkdGg6IDEwMCU7IH0KICAvKiBsaW5lIDg4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnV0dG9uLWdyb3Vwcy5zY3NzICovCiAgLmJ1dHRvbi1ncm91cC5ldmVuLTMgbGkgewogICAgd2lkdGg6IDMzLjMzMzMzJTsgfQogICAgLyogbGluZSAzNSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbi1ncm91cHMuc2NzcyAqLwogICAgLmJ1dHRvbi1ncm91cC5ldmVuLTMgbGkgPiBidXR0b24sIC5idXR0b24tZ3JvdXAuZXZlbi0zIGxpIC5idXR0b24gewogICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZDsKICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7IH0KICAgIC8qIGxpbmUgNzMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19idXR0b24tZ3JvdXBzLnNjc3MgKi8KICAgIC5idXR0b24tZ3JvdXAuZXZlbi0zIGxpIGJ1dHRvbiwgLmJ1dHRvbi1ncm91cC5ldmVuLTMgbGkgLmJ1dHRvbiB7CiAgICAgIHdpZHRoOiAxMDAlOyB9CiAgLyogbGluZSA4OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbi1ncm91cHMuc2NzcyAqLwogIC5idXR0b24tZ3JvdXAuZXZlbi00IGxpIHsKICAgIHdpZHRoOiAyNSU7IH0KICAgIC8qIGxpbmUgMzUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19idXR0b24tZ3JvdXBzLnNjc3MgKi8KICAgIC5idXR0b24tZ3JvdXAuZXZlbi00IGxpID4gYnV0dG9uLCAuYnV0dG9uLWdyb3VwLmV2ZW4tNCBsaSAuYnV0dG9uIHsKICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQ7CiAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOyB9CiAgICAvKiBsaW5lIDczLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnV0dG9uLWdyb3Vwcy5zY3NzICovCiAgICAuYnV0dG9uLWdyb3VwLmV2ZW4tNCBsaSBidXR0b24sIC5idXR0b24tZ3JvdXAuZXZlbi00IGxpIC5idXR0b24gewogICAgICB3aWR0aDogMTAwJTsgfQogIC8qIGxpbmUgODgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19idXR0b24tZ3JvdXBzLnNjc3MgKi8KICAuYnV0dG9uLWdyb3VwLmV2ZW4tNSBsaSB7CiAgICB3aWR0aDogMjAlOyB9CiAgICAvKiBsaW5lIDM1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnV0dG9uLWdyb3Vwcy5zY3NzICovCiAgICAuYnV0dG9uLWdyb3VwLmV2ZW4tNSBsaSA+IGJ1dHRvbiwgLmJ1dHRvbi1ncm91cC5ldmVuLTUgbGkgLmJ1dHRvbiB7CiAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkOwogICAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsgfQogICAgLyogbGluZSA3MywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbi1ncm91cHMuc2NzcyAqLwogICAgLmJ1dHRvbi1ncm91cC5ldmVuLTUgbGkgYnV0dG9uLCAuYnV0dG9uLWdyb3VwLmV2ZW4tNSBsaSAuYnV0dG9uIHsKICAgICAgd2lkdGg6IDEwMCU7IH0KICAvKiBsaW5lIDg4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnV0dG9uLWdyb3Vwcy5zY3NzICovCiAgLmJ1dHRvbi1ncm91cC5ldmVuLTYgbGkgewogICAgd2lkdGg6IDE2LjY2NjY3JTsgfQogICAgLyogbGluZSAzNSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbi1ncm91cHMuc2NzcyAqLwogICAgLmJ1dHRvbi1ncm91cC5ldmVuLTYgbGkgPiBidXR0b24sIC5idXR0b24tZ3JvdXAuZXZlbi02IGxpIC5idXR0b24gewogICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZDsKICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7IH0KICAgIC8qIGxpbmUgNzMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19idXR0b24tZ3JvdXBzLnNjc3MgKi8KICAgIC5idXR0b24tZ3JvdXAuZXZlbi02IGxpIGJ1dHRvbiwgLmJ1dHRvbi1ncm91cC5ldmVuLTYgbGkgLmJ1dHRvbiB7CiAgICAgIHdpZHRoOiAxMDAlOyB9CiAgLyogbGluZSA4OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbi1ncm91cHMuc2NzcyAqLwogIC5idXR0b24tZ3JvdXAuZXZlbi03IGxpIHsKICAgIHdpZHRoOiAxNC4yODU3MSU7IH0KICAgIC8qIGxpbmUgMzUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19idXR0b24tZ3JvdXBzLnNjc3MgKi8KICAgIC5idXR0b24tZ3JvdXAuZXZlbi03IGxpID4gYnV0dG9uLCAuYnV0dG9uLWdyb3VwLmV2ZW4tNyBsaSAuYnV0dG9uIHsKICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQ7CiAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOyB9CiAgICAvKiBsaW5lIDczLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnV0dG9uLWdyb3Vwcy5zY3NzICovCiAgICAuYnV0dG9uLWdyb3VwLmV2ZW4tNyBsaSBidXR0b24sIC5idXR0b24tZ3JvdXAuZXZlbi03IGxpIC5idXR0b24gewogICAgICB3aWR0aDogMTAwJTsgfQogIC8qIGxpbmUgODgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19idXR0b24tZ3JvdXBzLnNjc3MgKi8KICAuYnV0dG9uLWdyb3VwLmV2ZW4tOCBsaSB7CiAgICB3aWR0aDogMTIuNSU7IH0KICAgIC8qIGxpbmUgMzUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19idXR0b24tZ3JvdXBzLnNjc3MgKi8KICAgIC5idXR0b24tZ3JvdXAuZXZlbi04IGxpID4gYnV0dG9uLCAuYnV0dG9uLWdyb3VwLmV2ZW4tOCBsaSAuYnV0dG9uIHsKICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQ7CiAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOyB9CiAgICAvKiBsaW5lIDczLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fYnV0dG9uLWdyb3Vwcy5zY3NzICovCiAgICAuYnV0dG9uLWdyb3VwLmV2ZW4tOCBsaSBidXR0b24sIC5idXR0b24tZ3JvdXAuZXZlbi04IGxpIC5idXR0b24gewogICAgICB3aWR0aDogMTAwJTsgfQoKLyogbGluZSA5MiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbi1ncm91cHMuc2NzcyAqLwouYnV0dG9uLWJhciB7CiAgKnpvb206IDE7IH0KICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dsb2JhbC5zY3NzICovCiAgLmJ1dHRvbi1iYXI6YmVmb3JlLCAuYnV0dG9uLWJhcjphZnRlciB7CiAgICBjb250ZW50OiAiICI7CiAgICBkaXNwbGF5OiB0YWJsZTsgfQogIC8qIGxpbmUgMTY2LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ2xvYmFsLnNjc3MgKi8KICAuYnV0dG9uLWJhcjphZnRlciB7CiAgICBjbGVhcjogYm90aDsgfQogIC8qIGxpbmUgOTQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19idXR0b24tZ3JvdXBzLnNjc3MgKi8KICAuYnV0dG9uLWJhciAuYnV0dG9uLWdyb3VwIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiAwLjYyNXJlbTsgfQogICAgLyogbGluZSAyOCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2J1dHRvbi1ncm91cHMuc2NzcyAqLwogICAgLmJ1dHRvbi1iYXIgLmJ1dHRvbi1ncm91cCBkaXYgewogICAgICBvdmVyZmxvdzogaGlkZGVuOyB9CgovKiBDbGVhcmluZyBTdHlsZXMgKi8KLyogbGluZSA0MCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2NsZWFyaW5nLnNjc3MgKi8KW2RhdGEtY2xlYXJpbmddIHsKICAqem9vbTogMTsKICBtYXJnaW4tYm90dG9tOiAwOwogIG1hcmdpbi1sZWZ0OiAwOwogIGxpc3Qtc3R5bGU6IG5vbmU7IH0KICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dsb2JhbC5zY3NzICovCiAgW2RhdGEtY2xlYXJpbmddOmJlZm9yZSwgW2RhdGEtY2xlYXJpbmddOmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIgIjsKICAgIGRpc3BsYXk6IHRhYmxlOyB9CiAgLyogbGluZSAxNjYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19nbG9iYWwuc2NzcyAqLwogIFtkYXRhLWNsZWFyaW5nXTphZnRlciB7CiAgICBjbGVhcjogYm90aDsgfQogIC8qIGxpbmUgNDYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19jbGVhcmluZy5zY3NzICovCiAgW2RhdGEtY2xlYXJpbmddIGxpIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiAxMHB4OyB9CgovKiBsaW5lIDUyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fY2xlYXJpbmcuc2NzcyAqLwouY2xlYXJpbmctYmxhY2tvdXQgewogIGJhY2tncm91bmQ6ICMzMzMzMzM7CiAgcG9zaXRpb246IGZpeGVkOwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICB0b3A6IDA7CiAgbGVmdDogMDsKICB6LWluZGV4OiA5OTg7IH0KICAvKiBsaW5lIDYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fY2xlYXJpbmcuc2NzcyAqLwogIC5jbGVhcmluZy1ibGFja291dCAuY2xlYXJpbmctY2xvc2UgewogICAgZGlzcGxheTogYmxvY2s7IH0KCi8qIGxpbmUgNjQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19jbGVhcmluZy5zY3NzICovCi5jbGVhcmluZy1jb250YWluZXIgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB6LWluZGV4OiA5OTg7CiAgaGVpZ2h0OiAxMDAlOwogIG92ZXJmbG93OiBoaWRkZW47CiAgbWFyZ2luOiAwOyB9CgovKiBsaW5lIDcyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fY2xlYXJpbmcuc2NzcyAqLwoudmlzaWJsZS1pbWcgewogIGhlaWdodDogOTUlOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsgfQogIC8qIGxpbmUgNzYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19jbGVhcmluZy5zY3NzICovCiAgLnZpc2libGUtaW1nIGltZyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiA1MCU7CiAgICB0b3A6IDUwJTsKICAgIG1hcmdpbi1sZWZ0OiAtNTAlOwogICAgbWF4LWhlaWdodDogMTAwJTsKICAgIG1heC13aWR0aDogMTAwJTsgfQoKLyogbGluZSA4NiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2NsZWFyaW5nLnNjc3MgKi8KLmNsZWFyaW5nLWNhcHRpb24gewogIGNvbG9yOiAjY2NjY2NjOwogIGZvbnQtc2l6ZTogMC44NzVlbTsKICBsaW5lLWhlaWdodDogMS4zOwogIG1hcmdpbi1ib3R0b206IDA7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIGJvdHRvbTogMDsKICBiYWNrZ3JvdW5kOiAjMzMzMzMzOwogIHdpZHRoOiAxMDAlOwogIHBhZGRpbmc6IDEwcHggMzBweCAyMHB4OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBsZWZ0OiAwOyB9CgovKiBsaW5lIDEwMCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2NsZWFyaW5nLnNjc3MgKi8KLmNsZWFyaW5nLWNsb3NlIHsKICB6LWluZGV4OiA5OTk7CiAgcGFkZGluZy1sZWZ0OiAyMHB4OwogIHBhZGRpbmctdG9wOiAxMHB4OwogIGZvbnQtc2l6ZTogMzBweDsKICBsaW5lLWhlaWdodDogMTsKICBjb2xvcjogI2NjY2NjYzsKICBkaXNwbGF5OiBub25lOyB9CiAgLyogbGluZSAxMTAsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19jbGVhcmluZy5zY3NzICovCiAgLmNsZWFyaW5nLWNsb3NlOmhvdmVyLCAuY2xlYXJpbmctY2xvc2U6Zm9jdXMgewogICAgY29sb3I6ICNjY2M7IH0KCi8qIGxpbmUgMTEzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fY2xlYXJpbmcuc2NzcyAqLwouY2xlYXJpbmctYXNzZW1ibGVkIC5jbGVhcmluZy1jb250YWluZXIgewogIGhlaWdodDogMTAwJTsgfQogIC8qIGxpbmUgMTE0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fY2xlYXJpbmcuc2NzcyAqLwogIC5jbGVhcmluZy1hc3NlbWJsZWQgLmNsZWFyaW5nLWNvbnRhaW5lciAuY2Fyb3VzZWwgPiB1bCB7CiAgICBkaXNwbGF5OiBub25lOyB9CgovKiBsaW5lIDExOCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2NsZWFyaW5nLnNjc3MgKi8KLmNsZWFyaW5nLWZlYXR1cmUgbGkgewogIGRpc3BsYXk6IG5vbmU7IH0KICAvKiBsaW5lIDEyMCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2NsZWFyaW5nLnNjc3MgKi8KICAuY2xlYXJpbmctZmVhdHVyZSBsaS5jbGVhcmluZy1mZWF0dXJlZC1pbWcgewogICAgZGlzcGxheTogYmxvY2s7IH0KCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDAuMDYzZW0pIHsKICAvKiBsaW5lIDEyOCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2NsZWFyaW5nLnNjc3MgKi8KICAuY2xlYXJpbmctbWFpbi1wcmV2LAogIC5jbGVhcmluZy1tYWluLW5leHQgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgd2lkdGg6IDQwcHg7CiAgICB0b3A6IDA7IH0KICAgIC8qIGxpbmUgMTMzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fY2xlYXJpbmcuc2NzcyAqLwogICAgLmNsZWFyaW5nLW1haW4tcHJldiA+IHNwYW4sCiAgICAuY2xlYXJpbmctbWFpbi1uZXh0ID4gc3BhbiB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiA1MCU7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMDsKICAgICAgaGVpZ2h0OiAwOwogICAgICBib3JkZXI6IHNvbGlkIDEycHg7IH0KICAgICAgLyogbGluZSAxNDAsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19jbGVhcmluZy5zY3NzICovCiAgICAgIC5jbGVhcmluZy1tYWluLXByZXYgPiBzcGFuOmhvdmVyLAogICAgICAuY2xlYXJpbmctbWFpbi1uZXh0ID4gc3Bhbjpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMC44OyB9CgogIC8qIGxpbmUgMTQzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fY2xlYXJpbmcuc2NzcyAqLwogIC5jbGVhcmluZy1tYWluLXByZXYgewogICAgbGVmdDogMDsgfQogICAgLyogbGluZSAxNDUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19jbGVhcmluZy5zY3NzICovCiAgICAuY2xlYXJpbmctbWFpbi1wcmV2ID4gc3BhbiB7CiAgICAgIGxlZnQ6IDVweDsKICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjY2NjY2NjOyB9CgogIC8qIGxpbmUgMTUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fY2xlYXJpbmcuc2NzcyAqLwogIC5jbGVhcmluZy1tYWluLW5leHQgewogICAgcmlnaHQ6IDA7IH0KICAgIC8qIGxpbmUgMTUzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fY2xlYXJpbmcuc2NzcyAqLwogICAgLmNsZWFyaW5nLW1haW4tbmV4dCA+IHNwYW4gewogICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OwogICAgICBib3JkZXItbGVmdC1jb2xvcjogI2NjY2NjYzsgfQoKICAvKiBsaW5lIDE2MCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2NsZWFyaW5nLnNjc3MgKi8KICAuY2xlYXJpbmctbWFpbi1wcmV2LmRpc2FibGVkLAogIC5jbGVhcmluZy1tYWluLW5leHQuZGlzYWJsZWQgewogICAgb3BhY2l0eTogMC4zOyB9CgogIC8qIGxpbmUgMTY0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fY2xlYXJpbmcuc2NzcyAqLwogIC5jbGVhcmluZy1hc3NlbWJsZWQgLmNsZWFyaW5nLWNvbnRhaW5lciAuY2Fyb3VzZWwgewogICAgYmFja2dyb3VuZDogcmdiYSg1MSwgNTEsIDUxLCAwLjgpOwogICAgaGVpZ2h0OiAxMjBweDsKICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KICAgIC8qIGxpbmUgMTcwLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fY2xlYXJpbmcuc2NzcyAqLwogICAgLmNsZWFyaW5nLWFzc2VtYmxlZCAuY2xlYXJpbmctY29udGFpbmVyIC5jYXJvdXNlbCA+IHVsIHsKICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB6LWluZGV4OiA5OTk7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBmbG9hdDogbm9uZTsgfQogICAgICAvKiBsaW5lIDE3NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2NsZWFyaW5nLnNjc3MgKi8KICAgICAgLmNsZWFyaW5nLWFzc2VtYmxlZCAuY2xlYXJpbmctY29udGFpbmVyIC5jYXJvdXNlbCA+IHVsIGxpIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTIwcHg7CiAgICAgICAgbWluLWhlaWdodDogaW5oZXJpdDsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIG1hcmdpbi1yaWdodDogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgb3BhY2l0eTogMC40OyB9CiAgICAgICAgLyogbGluZSAxOTAsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19jbGVhcmluZy5zY3NzICovCiAgICAgICAgLmNsZWFyaW5nLWFzc2VtYmxlZCAuY2xlYXJpbmctY29udGFpbmVyIC5jYXJvdXNlbCA+IHVsIGxpLmZpeC1oZWlnaHQgaW1nIHsKICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgIG1heC13aWR0aDogbm9uZTsgfQogICAgICAgIC8qIGxpbmUgMTk2LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fY2xlYXJpbmcuc2NzcyAqLwogICAgICAgIC5jbGVhcmluZy1hc3NlbWJsZWQgLmNsZWFyaW5nLWNvbnRhaW5lciAuY2Fyb3VzZWwgPiB1bCBsaSBhLnRoIHsKICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsKICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsgfQogICAgICAgIC8qIGxpbmUgMjA1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fY2xlYXJpbmcuc2NzcyAqLwogICAgICAgIC5jbGVhcmluZy1hc3NlbWJsZWQgLmNsZWFyaW5nLWNvbnRhaW5lciAuY2Fyb3VzZWwgPiB1bCBsaSBpbWcgewogICAgICAgICAgY3Vyc29yOiBwb2ludGVyICFpbXBvcnRhbnQ7CiAgICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OyB9CiAgICAgICAgLyogbGluZSAyMTAsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19jbGVhcmluZy5zY3NzICovCiAgICAgICAgLmNsZWFyaW5nLWFzc2VtYmxlZCAuY2xlYXJpbmctY29udGFpbmVyIC5jYXJvdXNlbCA+IHVsIGxpLnZpc2libGUgewogICAgICAgICAgb3BhY2l0eTogMTsgfQogICAgICAgIC8qIGxpbmUgMjExLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fY2xlYXJpbmcuc2NzcyAqLwogICAgICAgIC5jbGVhcmluZy1hc3NlbWJsZWQgLmNsZWFyaW5nLWNvbnRhaW5lciAuY2Fyb3VzZWwgPiB1bCBsaTpob3ZlciB7CiAgICAgICAgICBvcGFjaXR5OiAwLjg7IH0KICAvKiBsaW5lIDIxNiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2NsZWFyaW5nLnNjc3MgKi8KICAuY2xlYXJpbmctYXNzZW1ibGVkIC5jbGVhcmluZy1jb250YWluZXIgLnZpc2libGUtaW1nIHsKICAgIGJhY2tncm91bmQ6ICMzMzMzMzM7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgaGVpZ2h0OiA4NSU7IH0KCiAgLyogbGluZSAyMjMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19jbGVhcmluZy5zY3NzICovCiAgLmNsZWFyaW5nLWNsb3NlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMTBweDsKICAgIHJpZ2h0OiAyMHB4OwogICAgcGFkZGluZy1sZWZ0OiAwOwogICAgcGFkZGluZy10b3A6IDA7IH0gfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQwZW0pIHsKICAvKiBsaW5lIDEzNSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Ryb3Bkb3duLnNjc3MgKi8KICAuZi1kcm9wZG93biwgdWwjZG93bmxvYWRzID4gbGkgLm5vdGVzLCB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSB1bFtpZCQ9Ii1kb3dubG9hZCJdLCAjZG93bmxvYWQgPiBkaXYgdWxbaWQkPSItZG93bmxvYWQiXSB7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBsZWZ0OiAwOyB9IH0KLyogRm91bmRhdGlvbiBEcm9wZG93bnMgKi8KLyogbGluZSAxNDIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19kcm9wZG93bi5zY3NzICovCi5mLWRyb3Bkb3duLCB1bCNkb3dubG9hZHMgPiBsaSAubm90ZXMsIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIHVsW2lkJD0iLWRvd25sb2FkIl0sICNkb3dubG9hZCA+IGRpdiB1bFtpZCQ9Ii1kb3dubG9hZCJdIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAtOTk5OXB4OwogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgbWFyZ2luLWxlZnQ6IDA7CiAgd2lkdGg6IDEwMCU7CiAgbWF4LWhlaWdodDogbm9uZTsKICBoZWlnaHQ6IGF1dG87CiAgYmFja2dyb3VuZDogd2hpdGU7CiAgYm9yZGVyOiBzb2xpZCAxcHggI2NjY2NjYzsKICBmb250LXNpemU6IDE2cHg7CiAgei1pbmRleDogOTk7CiAgbWFyZ2luLXRvcDogMnB4OwogIG1heC13aWR0aDogMjAwcHg7IH0KICAvKiBsaW5lIDU0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZHJvcGRvd24uc2NzcyAqLwogIC5mLWRyb3Bkb3duID4gKjpmaXJzdC1jaGlsZCwgdWwjZG93bmxvYWRzID4gbGkgLm5vdGVzID4gKjpmaXJzdC1jaGlsZCwgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgdWxbaWQkPSItZG93bmxvYWQiXSA+ICo6Zmlyc3QtY2hpbGQsICNkb3dubG9hZCA+IGRpdiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gKjpmaXJzdC1jaGlsZCB7CiAgICBtYXJnaW4tdG9wOiAwOyB9CiAgLyogbGluZSA1NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Ryb3Bkb3duLnNjc3MgKi8KICAuZi1kcm9wZG93biA+ICo6bGFzdC1jaGlsZCwgdWwjZG93bmxvYWRzID4gbGkgLm5vdGVzID4gKjpsYXN0LWNoaWxkLCB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gKjpsYXN0LWNoaWxkLCAjZG93bmxvYWQgPiBkaXYgdWxbaWQkPSItZG93bmxvYWQiXSA+ICo6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOyB9CiAgLyogbGluZSA4MCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Ryb3Bkb3duLnNjc3MgKi8KICAuZi1kcm9wZG93bjpiZWZvcmUsIHVsI2Rvd25sb2FkcyA+IGxpIC5ub3RlczpiZWZvcmUsIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIHVsW2lkJD0iLWRvd25sb2FkIl06YmVmb3JlLCAjZG93bmxvYWQgPiBkaXYgdWxbaWQkPSItZG93bmxvYWQiXTpiZWZvcmUgewogICAgY29udGVudDogIiI7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHdpZHRoOiAwOwogICAgaGVpZ2h0OiAwOwogICAgYm9yZGVyOiBpbnNldCA2cHg7CiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHdoaXRlIHRyYW5zcGFyZW50OwogICAgYm9yZGVyLWJvdHRvbS1zdHlsZTogc29saWQ7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IC0xMnB4OwogICAgbGVmdDogMTBweDsKICAgIHotaW5kZXg6IDk5OyB9CiAgLyogbGluZSA4NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Ryb3Bkb3duLnNjc3MgKi8KICAuZi1kcm9wZG93bjphZnRlciwgdWwjZG93bmxvYWRzID4gbGkgLm5vdGVzOmFmdGVyLCB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSB1bFtpZCQ9Ii1kb3dubG9hZCJdOmFmdGVyLCAjZG93bmxvYWQgPiBkaXYgdWxbaWQkPSItZG93bmxvYWQiXTphZnRlciB7CiAgICBjb250ZW50OiAiIjsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgd2lkdGg6IDA7CiAgICBoZWlnaHQ6IDA7CiAgICBib3JkZXI6IGluc2V0IDdweDsKICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgI2NjY2NjYyB0cmFuc3BhcmVudDsKICAgIGJvcmRlci1ib3R0b20tc3R5bGU6IHNvbGlkOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAtMTRweDsKICAgIGxlZnQ6IDlweDsKICAgIHotaW5kZXg6IDk4OyB9CiAgLyogbGluZSA5NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Ryb3Bkb3duLnNjc3MgKi8KICAuZi1kcm9wZG93bi5yaWdodDpiZWZvcmUsIHVsI2Rvd25sb2FkcyA+IGxpIC5yaWdodC5ub3RlczpiZWZvcmUsIHVsI2Rvd25sb2FkcyA+IGxpIGJvZHlbY2xhc3MkPSJhYm91dCJdIGRsIGRkIGltZy5ub3RlczpiZWZvcmUsIGJvZHlbY2xhc3MkPSJhYm91dCJdIGRsIGRkIHVsI2Rvd25sb2FkcyA+IGxpIGltZy5ub3RlczpiZWZvcmUsIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIHVsLnJpZ2h0W2lkJD0iLWRvd25sb2FkIl06YmVmb3JlLCAjZG93bmxvYWQgPiBkaXYgdWwucmlnaHRbaWQkPSItZG93bmxvYWQiXTpiZWZvcmUsIGJvZHlbY2xhc3MkPSJhYm91dCJdIGRsIGRkIGltZy5mLWRyb3Bkb3duOmJlZm9yZSB7CiAgICBsZWZ0OiBhdXRvOwogICAgcmlnaHQ6IDEwcHg7IH0KICAvKiBsaW5lIDk5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZHJvcGRvd24uc2NzcyAqLwogIC5mLWRyb3Bkb3duLnJpZ2h0OmFmdGVyLCB1bCNkb3dubG9hZHMgPiBsaSAucmlnaHQubm90ZXM6YWZ0ZXIsIHVsI2Rvd25sb2FkcyA+IGxpIGJvZHlbY2xhc3MkPSJhYm91dCJdIGRsIGRkIGltZy5ub3RlczphZnRlciwgYm9keVtjbGFzcyQ9ImFib3V0Il0gZGwgZGQgdWwjZG93bmxvYWRzID4gbGkgaW1nLm5vdGVzOmFmdGVyLCB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSB1bC5yaWdodFtpZCQ9Ii1kb3dubG9hZCJdOmFmdGVyLCAjZG93bmxvYWQgPiBkaXYgdWwucmlnaHRbaWQkPSItZG93bmxvYWQiXTphZnRlciwgYm9keVtjbGFzcyQ9ImFib3V0Il0gZGwgZGQgaW1nLmYtZHJvcGRvd246YWZ0ZXIgewogICAgbGVmdDogYXV0bzsKICAgIHJpZ2h0OiA5cHg7IH0KICAvKiBsaW5lIDE0NiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Ryb3Bkb3duLnNjc3MgKi8KICAuZi1kcm9wZG93biBsaSwgdWwjZG93bmxvYWRzID4gbGkgLm5vdGVzIGxpLCB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSB1bFtpZCQ9Ii1kb3dubG9hZCJdIGxpLCAjZG93bmxvYWQgPiBkaXYgdWxbaWQkPSItZG93bmxvYWQiXSBsaSB7CiAgICBmb250LXNpemU6IDAuODc1cmVtOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgbGluZS1oZWlnaHQ6IDEuMTI1cmVtOwogICAgbWFyZ2luOiAwOyB9CiAgICAvKiBsaW5lIDEyMiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Ryb3Bkb3duLnNjc3MgKi8KICAgIC5mLWRyb3Bkb3duIGxpOmhvdmVyLCB1bCNkb3dubG9hZHMgPiBsaSAubm90ZXMgbGk6aG92ZXIsIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIHVsW2lkJD0iLWRvd25sb2FkIl0gbGk6aG92ZXIsICNkb3dubG9hZCA+IGRpdiB1bFtpZCQ9Ii1kb3dubG9hZCJdIGxpOmhvdmVyLCAuZi1kcm9wZG93biBsaTpmb2N1cywgdWwjZG93bmxvYWRzID4gbGkgLm5vdGVzIGxpOmZvY3VzLCB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSB1bFtpZCQ9Ii1kb3dubG9hZCJdIGxpOmZvY3VzLCAjZG93bmxvYWQgPiBkaXYgdWxbaWQkPSItZG93bmxvYWQiXSBsaTpmb2N1cyB7CiAgICAgIGJhY2tncm91bmQ6ICNlZWVlZWU7IH0KICAgIC8qIGxpbmUgMTI0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZHJvcGRvd24uc2NzcyAqLwogICAgLmYtZHJvcGRvd24gbGkgYSwgdWwjZG93bmxvYWRzID4gbGkgLm5vdGVzIGxpIGEsIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIHVsW2lkJD0iLWRvd25sb2FkIl0gbGkgYSwgI2Rvd25sb2FkID4gZGl2IHVsW2lkJD0iLWRvd25sb2FkIl0gbGkgYSB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwYWRkaW5nOiAwLjVyZW07CiAgICAgIGNvbG9yOiAjNTU1NTU1OyB9CiAgLyogbGluZSAxNDksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19kcm9wZG93bi5zY3NzICovCiAgLmYtZHJvcGRvd24uY29udGVudCwgdWwjZG93bmxvYWRzID4gbGkgLm5vdGVzLCB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSB1bFtpZCQ9Ii1kb3dubG9hZCJdLCAjZG93bmxvYWQgPiBkaXYgdWxbaWQkPSItZG93bmxvYWQiXSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IC05OTk5cHg7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBwYWRkaW5nOiAxLjI1cmVtOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IGF1dG87CiAgICBtYXgtaGVpZ2h0OiBub25lOwogICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICBib3JkZXI6IHNvbGlkIDFweCAjY2NjY2NjOwogICAgZm9udC1zaXplOiAxNnB4OwogICAgei1pbmRleDogOTk7CiAgICBtYXgtd2lkdGg6IDIwMHB4OyB9CiAgICAvKiBsaW5lIDU0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZHJvcGRvd24uc2NzcyAqLwogICAgLmYtZHJvcGRvd24uY29udGVudCA+ICo6Zmlyc3QtY2hpbGQsIHVsI2Rvd25sb2FkcyA+IGxpIC5ub3RlcyA+ICo6Zmlyc3QtY2hpbGQsIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIHVsW2lkJD0iLWRvd25sb2FkIl0gPiAqOmZpcnN0LWNoaWxkLCAjZG93bmxvYWQgPiBkaXYgdWxbaWQkPSItZG93bmxvYWQiXSA+ICo6Zmlyc3QtY2hpbGQgewogICAgICBtYXJnaW4tdG9wOiAwOyB9CiAgICAvKiBsaW5lIDU1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZHJvcGRvd24uc2NzcyAqLwogICAgLmYtZHJvcGRvd24uY29udGVudCA+ICo6bGFzdC1jaGlsZCwgdWwjZG93bmxvYWRzID4gbGkgLm5vdGVzID4gKjpsYXN0LWNoaWxkLCB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gKjpsYXN0LWNoaWxkLCAjZG93bmxvYWQgPiBkaXYgdWxbaWQkPSItZG93bmxvYWQiXSA+ICo6bGFzdC1jaGlsZCB7CiAgICAgIG1hcmdpbi1ib3R0b206IDA7IH0KICAvKiBsaW5lIDE1MiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Ryb3Bkb3duLnNjc3MgKi8KICAuZi1kcm9wZG93bi50aW55LCB1bCNkb3dubG9hZHMgPiBsaSAudGlueS5ub3RlcywgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgdWwudGlueVtpZCQ9Ii1kb3dubG9hZCJdLCAjZG93bmxvYWQgPiBkaXYgdWwudGlueVtpZCQ9Ii1kb3dubG9hZCJdIHsKICAgIG1heC13aWR0aDogMjAwcHg7IH0KICAvKiBsaW5lIDE1MywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Ryb3Bkb3duLnNjc3MgKi8KICAuZi1kcm9wZG93bi5zbWFsbCwgdWwjZG93bmxvYWRzID4gbGkgLnNtYWxsLm5vdGVzLCB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSB1bC5zbWFsbFtpZCQ9Ii1kb3dubG9hZCJdLCAjZG93bmxvYWQgPiBkaXYgdWwuc21hbGxbaWQkPSItZG93bmxvYWQiXSB7CiAgICBtYXgtd2lkdGg6IDMwMHB4OyB9CiAgLyogbGluZSAxNTQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19kcm9wZG93bi5zY3NzICovCiAgLmYtZHJvcGRvd24ubWVkaXVtLCB1bCNkb3dubG9hZHMgPiBsaSAubWVkaXVtLm5vdGVzLCB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSB1bC5tZWRpdW1baWQkPSItZG93bmxvYWQiXSwgI2Rvd25sb2FkID4gZGl2IHVsLm1lZGl1bVtpZCQ9Ii1kb3dubG9hZCJdIHsKICAgIG1heC13aWR0aDogNTAwcHg7IH0KICAvKiBsaW5lIDE1NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Ryb3Bkb3duLnNjc3MgKi8KICAuZi1kcm9wZG93bi5sYXJnZSwgdWwjZG93bmxvYWRzID4gbGkgLmxhcmdlLm5vdGVzLCB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSB1bC5sYXJnZVtpZCQ9Ii1kb3dubG9hZCJdLCAjZG93bmxvYWQgPiBkaXYgdWwubGFyZ2VbaWQkPSItZG93bmxvYWQiXSB7CiAgICBtYXgtd2lkdGg6IDgwMHB4OyB9CgovKiBsaW5lIDExOCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Ryb3Bkb3duLWJ1dHRvbnMuc2NzcyAqLwouZHJvcGRvd24uYnV0dG9uIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgcGFkZGluZy1yaWdodDogMy41NjI1cmVtOyB9CiAgLyogbGluZSA1OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Ryb3Bkb3duLWJ1dHRvbnMuc2NzcyAqLwogIC5kcm9wZG93bi5idXR0b246YmVmb3JlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGNvbnRlbnQ6ICIiOwogICAgd2lkdGg6IDA7CiAgICBoZWlnaHQ6IDA7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGJvcmRlci1zdHlsZTogc29saWQ7CiAgICBib3JkZXItY29sb3I6IHdoaXRlIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50OwogICAgdG9wOiA1MCU7IH0KICAvKiBsaW5lIDkzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZHJvcGRvd24tYnV0dG9ucy5zY3NzICovCiAgLmRyb3Bkb3duLmJ1dHRvbjpiZWZvcmUgewogICAgYm9yZGVyLXdpZHRoOiAwLjM3NXJlbTsKICAgIHJpZ2h0OiAxLjQwNjI1cmVtOwogICAgbWFyZ2luLXRvcDogLTAuMTU2MjVyZW07IH0KICAvKiBsaW5lIDExMiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Ryb3Bkb3duLWJ1dHRvbnMuc2NzcyAqLwogIC5kcm9wZG93bi5idXR0b246YmVmb3JlIHsKICAgIGJvcmRlci1jb2xvcjogd2hpdGUgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7IH0KICAvKiBsaW5lIDExOSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Ryb3Bkb3duLWJ1dHRvbnMuc2NzcyAqLwogIC5kcm9wZG93bi5idXR0b24udGlueSB7CiAgICBwYWRkaW5nLXJpZ2h0OiAyLjYyNXJlbTsgfQogICAgLyogbGluZSA3MywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Ryb3Bkb3duLWJ1dHRvbnMuc2NzcyAqLwogICAgLmRyb3Bkb3duLmJ1dHRvbi50aW55OmJlZm9yZSB7CiAgICAgIGJvcmRlci13aWR0aDogMC4zNzVyZW07CiAgICAgIHJpZ2h0OiAxLjEyNXJlbTsKICAgICAgbWFyZ2luLXRvcDogLTAuMTI1cmVtOyB9CiAgICAvKiBsaW5lIDExMiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Ryb3Bkb3duLWJ1dHRvbnMuc2NzcyAqLwogICAgLmRyb3Bkb3duLmJ1dHRvbi50aW55OmJlZm9yZSB7CiAgICAgIGJvcmRlci1jb2xvcjogd2hpdGUgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7IH0KICAvKiBsaW5lIDEyMCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Ryb3Bkb3duLWJ1dHRvbnMuc2NzcyAqLwogIC5kcm9wZG93bi5idXR0b24uc21hbGwgewogICAgcGFkZGluZy1yaWdodDogMy4wNjI1cmVtOyB9CiAgICAvKiBsaW5lIDgzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZHJvcGRvd24tYnV0dG9ucy5zY3NzICovCiAgICAuZHJvcGRvd24uYnV0dG9uLnNtYWxsOmJlZm9yZSB7CiAgICAgIGJvcmRlci13aWR0aDogMC40Mzc1cmVtOwogICAgICByaWdodDogMS4zMTI1cmVtOwogICAgICBtYXJnaW4tdG9wOiAtMC4xNTYyNXJlbTsgfQogICAgLyogbGluZSAxMTIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19kcm9wZG93bi1idXR0b25zLnNjc3MgKi8KICAgIC5kcm9wZG93bi5idXR0b24uc21hbGw6YmVmb3JlIHsKICAgICAgYm9yZGVyLWNvbG9yOiB3aGl0ZSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDsgfQogIC8qIGxpbmUgMTIxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZHJvcGRvd24tYnV0dG9ucy5zY3NzICovCiAgLmRyb3Bkb3duLmJ1dHRvbi5sYXJnZSB7CiAgICBwYWRkaW5nLXJpZ2h0OiAzLjYyNXJlbTsgfQogICAgLyogbGluZSAxMDMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19kcm9wZG93bi1idXR0b25zLnNjc3MgKi8KICAgIC5kcm9wZG93bi5idXR0b24ubGFyZ2U6YmVmb3JlIHsKICAgICAgYm9yZGVyLXdpZHRoOiAwLjMxMjVyZW07CiAgICAgIHJpZ2h0OiAxLjcxODc1cmVtOwogICAgICBtYXJnaW4tdG9wOiAtMC4xNTYyNXJlbTsgfQogICAgLyogbGluZSAxMTIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19kcm9wZG93bi1idXR0b25zLnNjc3MgKi8KICAgIC5kcm9wZG93bi5idXR0b24ubGFyZ2U6YmVmb3JlIHsKICAgICAgYm9yZGVyLWNvbG9yOiB3aGl0ZSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDsgfQogIC8qIGxpbmUgMTIyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZHJvcGRvd24tYnV0dG9ucy5zY3NzICovCiAgLmRyb3Bkb3duLmJ1dHRvbi5zZWNvbmRhcnk6YmVmb3JlIHsKICAgIGJvcmRlci1jb2xvcjogIzMzMzMzMyB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDsgfQoKLyogbGluZSA0NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2ZsZXgtdmlkZW8uc2NzcyAqLwouZmxleC12aWRlbyB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHBhZGRpbmctdG9wOiAxLjU2MjVyZW07CiAgcGFkZGluZy1ib3R0b206IDY3LjUlOwogIGhlaWdodDogMDsKICBtYXJnaW4tYm90dG9tOiAxcmVtOwogIG92ZXJmbG93OiBoaWRkZW47IH0KICAvKiBsaW5lIDI4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZmxleC12aWRlby5zY3NzICovCiAgLmZsZXgtdmlkZW8ud2lkZXNjcmVlbiB7CiAgICBwYWRkaW5nLWJvdHRvbTogNTcuMjUlOyB9CiAgLyogbGluZSAyOSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2ZsZXgtdmlkZW8uc2NzcyAqLwogIC5mbGV4LXZpZGVvLnZpbWVvIHsKICAgIHBhZGRpbmctdG9wOiAwOyB9CiAgLyogbGluZSAzNCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2ZsZXgtdmlkZW8uc2NzcyAqLwogIC5mbGV4LXZpZGVvIGlmcmFtZSwKICAuZmxleC12aWRlbyBvYmplY3QsCiAgLmZsZXgtdmlkZW8gZW1iZWQsCiAgLmZsZXgtdmlkZW8gdmlkZW8gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAwOwogICAgbGVmdDogMDsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOyB9CgovKiBTdGFuZGFyZCBGb3JtcyAqLwovKiBsaW5lIDMwMCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Zvcm1zLnNjc3MgKi8KZm9ybSB7CiAgbWFyZ2luOiAwIDAgMXJlbTsgfQoKLyogVXNpbmcgZm9ybXMgd2l0aGluIHJvd3MsIHdlIG5lZWQgdG8gc2V0IHNvbWUgZGVmYXVsdHMgKi8KLyogbGluZSA3NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Zvcm1zLnNjc3MgKi8KZm9ybSAucm93IC5yb3csIGZvcm0gI3N0YWNrLWxpc3QgLnJvdywgZm9ybSAjdGhlbWUtbGlzdCBsaSAucm93LCAjdGhlbWUtbGlzdCBmb3JtIGxpIC5yb3csIGZvcm0gdWwjZG9jcy1saXN0IC5yb3csIGZvcm0gLnJvdyAjc3RhY2stbGlzdCwgZm9ybSAjc3RhY2stbGlzdCAjc3RhY2stbGlzdCwgZm9ybSAjdGhlbWUtbGlzdCBsaSAjc3RhY2stbGlzdCwgI3RoZW1lLWxpc3QgZm9ybSBsaSAjc3RhY2stbGlzdCwgZm9ybSB1bCNkb2NzLWxpc3QgI3N0YWNrLWxpc3QsIGZvcm0gLnJvdyAjdGhlbWUtbGlzdCBsaSwgI3RoZW1lLWxpc3QgZm9ybSAucm93IGxpLCBmb3JtICNzdGFjay1saXN0ICN0aGVtZS1saXN0IGxpLCAjdGhlbWUtbGlzdCBmb3JtICNzdGFjay1saXN0IGxpLCBmb3JtICN0aGVtZS1saXN0IGxpIGxpLCAjdGhlbWUtbGlzdCBmb3JtIGxpIGxpLCBmb3JtIHVsI2RvY3MtbGlzdCAjdGhlbWUtbGlzdCBsaSwgI3RoZW1lLWxpc3QgZm9ybSB1bCNkb2NzLWxpc3QgbGksIGZvcm0gLnJvdyB1bCNkb2NzLWxpc3QsIGZvcm0gI3N0YWNrLWxpc3QgdWwjZG9jcy1saXN0LCBmb3JtICN0aGVtZS1saXN0IGxpIHVsI2RvY3MtbGlzdCwgI3RoZW1lLWxpc3QgZm9ybSBsaSB1bCNkb2NzLWxpc3QsIGZvcm0gdWwjZG9jcy1saXN0IHVsI2RvY3MtbGlzdCB7CiAgbWFyZ2luOiAwIC0wLjVyZW07IH0KICAvKiBsaW5lIDc4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZm9ybXMuc2NzcyAqLwogIGZvcm0gLnJvdyAucm93IC5jb2x1bW4sIGZvcm0gI3N0YWNrLWxpc3QgLnJvdyAuY29sdW1uLCBmb3JtICN0aGVtZS1saXN0IGxpIC5yb3cgLmNvbHVtbiwgI3RoZW1lLWxpc3QgZm9ybSBsaSAucm93IC5jb2x1bW4sIGZvcm0gdWwjZG9jcy1saXN0IC5yb3cgLmNvbHVtbiwgZm9ybSAucm93ICNzdGFjay1saXN0IC5jb2x1bW4sIGZvcm0gI3N0YWNrLWxpc3QgI3N0YWNrLWxpc3QgLmNvbHVtbiwgZm9ybSAjdGhlbWUtbGlzdCBsaSAjc3RhY2stbGlzdCAuY29sdW1uLCAjdGhlbWUtbGlzdCBmb3JtIGxpICNzdGFjay1saXN0IC5jb2x1bW4sIGZvcm0gdWwjZG9jcy1saXN0ICNzdGFjay1saXN0IC5jb2x1bW4sIGZvcm0gLnJvdyAjdGhlbWUtbGlzdCBsaSAuY29sdW1uLCAjdGhlbWUtbGlzdCBmb3JtIC5yb3cgbGkgLmNvbHVtbiwgZm9ybSAjc3RhY2stbGlzdCAjdGhlbWUtbGlzdCBsaSAuY29sdW1uLCAjdGhlbWUtbGlzdCBmb3JtICNzdGFjay1saXN0IGxpIC5jb2x1bW4sIGZvcm0gI3RoZW1lLWxpc3QgbGkgbGkgLmNvbHVtbiwgI3RoZW1lLWxpc3QgZm9ybSBsaSBsaSAuY29sdW1uLCBmb3JtIHVsI2RvY3MtbGlzdCAjdGhlbWUtbGlzdCBsaSAuY29sdW1uLCAjdGhlbWUtbGlzdCBmb3JtIHVsI2RvY3MtbGlzdCBsaSAuY29sdW1uLCBmb3JtIC5yb3cgdWwjZG9jcy1saXN0IC5jb2x1bW4sIGZvcm0gI3N0YWNrLWxpc3QgdWwjZG9jcy1saXN0IC5jb2x1bW4sIGZvcm0gI3RoZW1lLWxpc3QgbGkgdWwjZG9jcy1saXN0IC5jb2x1bW4sICN0aGVtZS1saXN0IGZvcm0gbGkgdWwjZG9jcy1saXN0IC5jb2x1bW4sIGZvcm0gdWwjZG9jcy1saXN0IHVsI2RvY3MtbGlzdCAuY29sdW1uLAogIGZvcm0gLnJvdyAucm93IC5jb2x1bW5zLAogIGZvcm0gI3N0YWNrLWxpc3QgLnJvdyAuY29sdW1ucywKICBmb3JtICN0aGVtZS1saXN0IGxpIC5yb3cgLmNvbHVtbnMsCiAgI3RoZW1lLWxpc3QgZm9ybSBsaSAucm93IC5jb2x1bW5zLAogIGZvcm0gdWwjZG9jcy1saXN0IC5yb3cgLmNvbHVtbnMsCiAgZm9ybSAucm93ICNzdGFjay1saXN0IC5jb2x1bW5zLAogIGZvcm0gI3N0YWNrLWxpc3QgI3N0YWNrLWxpc3QgLmNvbHVtbnMsCiAgZm9ybSAjdGhlbWUtbGlzdCBsaSAjc3RhY2stbGlzdCAuY29sdW1ucywKICAjdGhlbWUtbGlzdCBmb3JtIGxpICNzdGFjay1saXN0IC5jb2x1bW5zLAogIGZvcm0gdWwjZG9jcy1saXN0ICNzdGFjay1saXN0IC5jb2x1bW5zLAogIGZvcm0gLnJvdyAjdGhlbWUtbGlzdCBsaSAuY29sdW1ucywKICAjdGhlbWUtbGlzdCBmb3JtIC5yb3cgbGkgLmNvbHVtbnMsCiAgZm9ybSAjc3RhY2stbGlzdCAjdGhlbWUtbGlzdCBsaSAuY29sdW1ucywKICAjdGhlbWUtbGlzdCBmb3JtICNzdGFjay1saXN0IGxpIC5jb2x1bW5zLAogIGZvcm0gI3RoZW1lLWxpc3QgbGkgbGkgLmNvbHVtbnMsCiAgI3RoZW1lLWxpc3QgZm9ybSBsaSBsaSAuY29sdW1ucywKICBmb3JtIHVsI2RvY3MtbGlzdCAjdGhlbWUtbGlzdCBsaSAuY29sdW1ucywKICAjdGhlbWUtbGlzdCBmb3JtIHVsI2RvY3MtbGlzdCBsaSAuY29sdW1ucywKICBmb3JtIC5yb3cgdWwjZG9jcy1saXN0IC5jb2x1bW5zLAogIGZvcm0gI3N0YWNrLWxpc3QgdWwjZG9jcy1saXN0IC5jb2x1bW5zLAogIGZvcm0gI3RoZW1lLWxpc3QgbGkgdWwjZG9jcy1saXN0IC5jb2x1bW5zLAogICN0aGVtZS1saXN0IGZvcm0gbGkgdWwjZG9jcy1saXN0IC5jb2x1bW5zLAogIGZvcm0gdWwjZG9jcy1saXN0IHVsI2RvY3MtbGlzdCAuY29sdW1ucywKICAjc3RhY2stbGlzdCBmb3JtIC5yb3cgLnJvdyBsaSwKICBmb3JtICNzdGFjay1saXN0IC5yb3cgbGksCiAgI3N0YWNrLWxpc3QgZm9ybSAjdGhlbWUtbGlzdCBsaSAucm93IGxpLAogICNzdGFjay1saXN0ICN0aGVtZS1saXN0IGZvcm0gbGkgLnJvdyBsaSwKICAjc3RhY2stbGlzdCBmb3JtIHVsI2RvY3MtbGlzdCAucm93IGxpLAogIGZvcm0gLnJvdyAjc3RhY2stbGlzdCBsaSwKICBmb3JtICNzdGFjay1saXN0ICNzdGFjay1saXN0IGxpLAogIGZvcm0gI3RoZW1lLWxpc3QgbGkgI3N0YWNrLWxpc3QgbGksCiAgI3RoZW1lLWxpc3QgZm9ybSBsaSAjc3RhY2stbGlzdCBsaSwKICBmb3JtIHVsI2RvY3MtbGlzdCAjc3RhY2stbGlzdCBsaSwKICAjc3RhY2stbGlzdCBmb3JtIC5yb3cgI3RoZW1lLWxpc3QgbGkgbGksCiAgI3N0YWNrLWxpc3QgI3RoZW1lLWxpc3QgZm9ybSAucm93IGxpIGxpLAogIGZvcm0gI3N0YWNrLWxpc3QgI3RoZW1lLWxpc3QgbGkgbGksCiAgI3RoZW1lLWxpc3QgZm9ybSAjc3RhY2stbGlzdCBsaSBsaSwKICAjc3RhY2stbGlzdCBmb3JtICN0aGVtZS1saXN0IGxpIGxpIGxpLAogICNzdGFjay1saXN0ICN0aGVtZS1saXN0IGZvcm0gbGkgbGkgbGksCiAgI3N0YWNrLWxpc3QgZm9ybSB1bCNkb2NzLWxpc3QgI3RoZW1lLWxpc3QgbGkgbGksCiAgI3N0YWNrLWxpc3QgI3RoZW1lLWxpc3QgZm9ybSB1bCNkb2NzLWxpc3QgbGkgbGksCiAgI3N0YWNrLWxpc3QgZm9ybSAucm93IHVsI2RvY3MtbGlzdCBsaSwKICBmb3JtICNzdGFjay1saXN0IHVsI2RvY3MtbGlzdCBsaSwKICAjc3RhY2stbGlzdCBmb3JtICN0aGVtZS1saXN0IGxpIHVsI2RvY3MtbGlzdCBsaSwKICAjc3RhY2stbGlzdCAjdGhlbWUtbGlzdCBmb3JtIGxpIHVsI2RvY3MtbGlzdCBsaSwKICAjc3RhY2stbGlzdCBmb3JtIHVsI2RvY3MtbGlzdCB1bCNkb2NzLWxpc3QgbGksCiAgZm9ybSAucm93ICN0aGVtZS1saXN0IGxpID4gZGl2LAogICN0aGVtZS1saXN0IGZvcm0gLnJvdyBsaSA+IGRpdiwKICBmb3JtICNzdGFjay1saXN0ICN0aGVtZS1saXN0IGxpID4gZGl2LAogICN0aGVtZS1saXN0IGZvcm0gI3N0YWNrLWxpc3QgbGkgPiBkaXYsCiAgZm9ybSAjdGhlbWUtbGlzdCBsaSBsaSA+IGRpdiwKICAjdGhlbWUtbGlzdCBmb3JtIGxpIGxpID4gZGl2LAogIGZvcm0gdWwjZG9jcy1saXN0ICN0aGVtZS1saXN0IGxpID4gZGl2LAogICN0aGVtZS1saXN0IGZvcm0gdWwjZG9jcy1saXN0IGxpID4gZGl2LAogIGZvcm0gLnJvdyB1bCNkb2NzLWxpc3QgPiBsaSwKICBmb3JtICN0aGVtZS1saXN0IGxpIHVsI2RvY3MtbGlzdCA+IGxpLAogICN0aGVtZS1saXN0IGZvcm0gbGkgdWwjZG9jcy1saXN0ID4gbGksCiAgZm9ybSB1bCNkb2NzLWxpc3QgdWwjZG9jcy1saXN0ID4gbGkgewogICAgcGFkZGluZzogMCAwLjVyZW07IH0KICAvKiBsaW5lIDgxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZm9ybXMuc2NzcyAqLwogIGZvcm0gLnJvdyAucm93LmNvbGxhcHNlLCBmb3JtICNzdGFjay1saXN0IC5yb3cuY29sbGFwc2UsIGZvcm0gI3RoZW1lLWxpc3QgbGkgLnJvdy5jb2xsYXBzZSwgI3RoZW1lLWxpc3QgZm9ybSBsaSAucm93LmNvbGxhcHNlLCBmb3JtIHVsI2RvY3MtbGlzdCAucm93LmNvbGxhcHNlLCBmb3JtIC5yb3cgLmNvbGxhcHNlI3N0YWNrLWxpc3QsIGZvcm0gI3N0YWNrLWxpc3QgLmNvbGxhcHNlI3N0YWNrLWxpc3QsIGZvcm0gI3RoZW1lLWxpc3QgbGkgLmNvbGxhcHNlI3N0YWNrLWxpc3QsICN0aGVtZS1saXN0IGZvcm0gbGkgLmNvbGxhcHNlI3N0YWNrLWxpc3QsIGZvcm0gdWwjZG9jcy1saXN0IC5jb2xsYXBzZSNzdGFjay1saXN0LCBmb3JtIC5yb3cgI3RoZW1lLWxpc3QgbGkuY29sbGFwc2UsICN0aGVtZS1saXN0IGZvcm0gLnJvdyBsaS5jb2xsYXBzZSwgZm9ybSAjc3RhY2stbGlzdCAjdGhlbWUtbGlzdCBsaS5jb2xsYXBzZSwgI3RoZW1lLWxpc3QgZm9ybSAjc3RhY2stbGlzdCBsaS5jb2xsYXBzZSwgZm9ybSAjdGhlbWUtbGlzdCBsaSBsaS5jb2xsYXBzZSwgI3RoZW1lLWxpc3QgZm9ybSBsaSBsaS5jb2xsYXBzZSwgZm9ybSB1bCNkb2NzLWxpc3QgI3RoZW1lLWxpc3QgbGkuY29sbGFwc2UsICN0aGVtZS1saXN0IGZvcm0gdWwjZG9jcy1saXN0IGxpLmNvbGxhcHNlLCBmb3JtIC5yb3cgdWwuY29sbGFwc2UjZG9jcy1saXN0LCBmb3JtICNzdGFjay1saXN0IHVsLmNvbGxhcHNlI2RvY3MtbGlzdCwgZm9ybSAjdGhlbWUtbGlzdCBsaSB1bC5jb2xsYXBzZSNkb2NzLWxpc3QsICN0aGVtZS1saXN0IGZvcm0gbGkgdWwuY29sbGFwc2UjZG9jcy1saXN0LCBmb3JtIHVsI2RvY3MtbGlzdCB1bC5jb2xsYXBzZSNkb2NzLWxpc3QgewogICAgbWFyZ2luOiAwOyB9CiAgICAvKiBsaW5lIDg0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZm9ybXMuc2NzcyAqLwogICAgZm9ybSAucm93IC5yb3cuY29sbGFwc2UgLmNvbHVtbiwgZm9ybSAjc3RhY2stbGlzdCAucm93LmNvbGxhcHNlIC5jb2x1bW4sIGZvcm0gI3RoZW1lLWxpc3QgbGkgLnJvdy5jb2xsYXBzZSAuY29sdW1uLCAjdGhlbWUtbGlzdCBmb3JtIGxpIC5yb3cuY29sbGFwc2UgLmNvbHVtbiwgZm9ybSB1bCNkb2NzLWxpc3QgLnJvdy5jb2xsYXBzZSAuY29sdW1uLCBmb3JtIC5yb3cgLmNvbGxhcHNlI3N0YWNrLWxpc3QgLmNvbHVtbiwgZm9ybSAjc3RhY2stbGlzdCAuY29sbGFwc2Ujc3RhY2stbGlzdCAuY29sdW1uLCBmb3JtICN0aGVtZS1saXN0IGxpIC5jb2xsYXBzZSNzdGFjay1saXN0IC5jb2x1bW4sICN0aGVtZS1saXN0IGZvcm0gbGkgLmNvbGxhcHNlI3N0YWNrLWxpc3QgLmNvbHVtbiwgZm9ybSB1bCNkb2NzLWxpc3QgLmNvbGxhcHNlI3N0YWNrLWxpc3QgLmNvbHVtbiwgZm9ybSAucm93ICN0aGVtZS1saXN0IGxpLmNvbGxhcHNlIC5jb2x1bW4sICN0aGVtZS1saXN0IGZvcm0gLnJvdyBsaS5jb2xsYXBzZSAuY29sdW1uLCBmb3JtICNzdGFjay1saXN0ICN0aGVtZS1saXN0IGxpLmNvbGxhcHNlIC5jb2x1bW4sICN0aGVtZS1saXN0IGZvcm0gI3N0YWNrLWxpc3QgbGkuY29sbGFwc2UgLmNvbHVtbiwgZm9ybSAjdGhlbWUtbGlzdCBsaSBsaS5jb2xsYXBzZSAuY29sdW1uLCAjdGhlbWUtbGlzdCBmb3JtIGxpIGxpLmNvbGxhcHNlIC5jb2x1bW4sIGZvcm0gdWwjZG9jcy1saXN0ICN0aGVtZS1saXN0IGxpLmNvbGxhcHNlIC5jb2x1bW4sICN0aGVtZS1saXN0IGZvcm0gdWwjZG9jcy1saXN0IGxpLmNvbGxhcHNlIC5jb2x1bW4sIGZvcm0gLnJvdyB1bC5jb2xsYXBzZSNkb2NzLWxpc3QgLmNvbHVtbiwgZm9ybSAjc3RhY2stbGlzdCB1bC5jb2xsYXBzZSNkb2NzLWxpc3QgLmNvbHVtbiwgZm9ybSAjdGhlbWUtbGlzdCBsaSB1bC5jb2xsYXBzZSNkb2NzLWxpc3QgLmNvbHVtbiwgI3RoZW1lLWxpc3QgZm9ybSBsaSB1bC5jb2xsYXBzZSNkb2NzLWxpc3QgLmNvbHVtbiwgZm9ybSB1bCNkb2NzLWxpc3QgdWwuY29sbGFwc2UjZG9jcy1saXN0IC5jb2x1bW4sCiAgICBmb3JtIC5yb3cgLnJvdy5jb2xsYXBzZSAuY29sdW1ucywKICAgIGZvcm0gI3N0YWNrLWxpc3QgLnJvdy5jb2xsYXBzZSAuY29sdW1ucywKICAgIGZvcm0gI3RoZW1lLWxpc3QgbGkgLnJvdy5jb2xsYXBzZSAuY29sdW1ucywKICAgICN0aGVtZS1saXN0IGZvcm0gbGkgLnJvdy5jb2xsYXBzZSAuY29sdW1ucywKICAgIGZvcm0gdWwjZG9jcy1saXN0IC5yb3cuY29sbGFwc2UgLmNvbHVtbnMsCiAgICBmb3JtIC5yb3cgLmNvbGxhcHNlI3N0YWNrLWxpc3QgLmNvbHVtbnMsCiAgICBmb3JtICNzdGFjay1saXN0IC5jb2xsYXBzZSNzdGFjay1saXN0IC5jb2x1bW5zLAogICAgZm9ybSAjdGhlbWUtbGlzdCBsaSAuY29sbGFwc2Ujc3RhY2stbGlzdCAuY29sdW1ucywKICAgICN0aGVtZS1saXN0IGZvcm0gbGkgLmNvbGxhcHNlI3N0YWNrLWxpc3QgLmNvbHVtbnMsCiAgICBmb3JtIHVsI2RvY3MtbGlzdCAuY29sbGFwc2Ujc3RhY2stbGlzdCAuY29sdW1ucywKICAgIGZvcm0gLnJvdyAjdGhlbWUtbGlzdCBsaS5jb2xsYXBzZSAuY29sdW1ucywKICAgICN0aGVtZS1saXN0IGZvcm0gLnJvdyBsaS5jb2xsYXBzZSAuY29sdW1ucywKICAgIGZvcm0gI3N0YWNrLWxpc3QgI3RoZW1lLWxpc3QgbGkuY29sbGFwc2UgLmNvbHVtbnMsCiAgICAjdGhlbWUtbGlzdCBmb3JtICNzdGFjay1saXN0IGxpLmNvbGxhcHNlIC5jb2x1bW5zLAogICAgZm9ybSAjdGhlbWUtbGlzdCBsaSBsaS5jb2xsYXBzZSAuY29sdW1ucywKICAgICN0aGVtZS1saXN0IGZvcm0gbGkgbGkuY29sbGFwc2UgLmNvbHVtbnMsCiAgICBmb3JtIHVsI2RvY3MtbGlzdCAjdGhlbWUtbGlzdCBsaS5jb2xsYXBzZSAuY29sdW1ucywKICAgICN0aGVtZS1saXN0IGZvcm0gdWwjZG9jcy1saXN0IGxpLmNvbGxhcHNlIC5jb2x1bW5zLAogICAgZm9ybSAucm93IHVsLmNvbGxhcHNlI2RvY3MtbGlzdCAuY29sdW1ucywKICAgIGZvcm0gI3N0YWNrLWxpc3QgdWwuY29sbGFwc2UjZG9jcy1saXN0IC5jb2x1bW5zLAogICAgZm9ybSAjdGhlbWUtbGlzdCBsaSB1bC5jb2xsYXBzZSNkb2NzLWxpc3QgLmNvbHVtbnMsCiAgICAjdGhlbWUtbGlzdCBmb3JtIGxpIHVsLmNvbGxhcHNlI2RvY3MtbGlzdCAuY29sdW1ucywKICAgIGZvcm0gdWwjZG9jcy1saXN0IHVsLmNvbGxhcHNlI2RvY3MtbGlzdCAuY29sdW1ucywKICAgIGZvcm0gLnJvdyAucm93LmNvbGxhcHNlICNzdGFjay1saXN0IGxpLAogICAgI3N0YWNrLWxpc3QgZm9ybSAucm93IC5yb3cuY29sbGFwc2UgbGksCiAgICBmb3JtICNzdGFjay1saXN0IC5yb3cuY29sbGFwc2UgbGksCiAgICBmb3JtICN0aGVtZS1saXN0IGxpIC5yb3cuY29sbGFwc2UgI3N0YWNrLWxpc3QgbGksCiAgICAjc3RhY2stbGlzdCBmb3JtICN0aGVtZS1saXN0IGxpIC5yb3cuY29sbGFwc2UgbGksCiAgICAjdGhlbWUtbGlzdCBmb3JtIGxpIC5yb3cuY29sbGFwc2UgI3N0YWNrLWxpc3QgbGksCiAgICAjc3RhY2stbGlzdCAjdGhlbWUtbGlzdCBmb3JtIGxpIC5yb3cuY29sbGFwc2UgbGksCiAgICBmb3JtIHVsI2RvY3MtbGlzdCAucm93LmNvbGxhcHNlICNzdGFjay1saXN0IGxpLAogICAgI3N0YWNrLWxpc3QgZm9ybSB1bCNkb2NzLWxpc3QgLnJvdy5jb2xsYXBzZSBsaSwKICAgIGZvcm0gLnJvdyAuY29sbGFwc2Ujc3RhY2stbGlzdCBsaSwKICAgIGZvcm0gLmNvbGxhcHNlI3N0YWNrLWxpc3QgLmNvbGxhcHNlI3N0YWNrLWxpc3QgbGksCiAgICBmb3JtICN0aGVtZS1saXN0IGxpIC5jb2xsYXBzZSNzdGFjay1saXN0IGxpLAogICAgI3RoZW1lLWxpc3QgZm9ybSBsaSAuY29sbGFwc2Ujc3RhY2stbGlzdCBsaSwKICAgIGZvcm0gdWwjZG9jcy1saXN0IC5jb2xsYXBzZSNzdGFjay1saXN0IGxpLAogICAgZm9ybSAucm93ICN0aGVtZS1saXN0IGxpLmNvbGxhcHNlICNzdGFjay1saXN0IGxpLAogICAgI3N0YWNrLWxpc3QgZm9ybSAucm93ICN0aGVtZS1saXN0IGxpLmNvbGxhcHNlIGxpLAogICAgI3RoZW1lLWxpc3QgZm9ybSAucm93IGxpLmNvbGxhcHNlICNzdGFjay1saXN0IGxpLAogICAgI3N0YWNrLWxpc3QgI3RoZW1lLWxpc3QgZm9ybSAucm93IGxpLmNvbGxhcHNlIGxpLAogICAgZm9ybSAjc3RhY2stbGlzdCAjdGhlbWUtbGlzdCBsaS5jb2xsYXBzZSBsaSwKICAgICN0aGVtZS1saXN0IGZvcm0gI3N0YWNrLWxpc3QgbGkuY29sbGFwc2UgbGksCiAgICBmb3JtICN0aGVtZS1saXN0IGxpIGxpLmNvbGxhcHNlICNzdGFjay1saXN0IGxpLAogICAgI3N0YWNrLWxpc3QgZm9ybSAjdGhlbWUtbGlzdCBsaSBsaS5jb2xsYXBzZSBsaSwKICAgICN0aGVtZS1saXN0IGZvcm0gbGkgbGkuY29sbGFwc2UgI3N0YWNrLWxpc3QgbGksCiAgICAjc3RhY2stbGlzdCAjdGhlbWUtbGlzdCBmb3JtIGxpIGxpLmNvbGxhcHNlIGxpLAogICAgZm9ybSB1bCNkb2NzLWxpc3QgI3RoZW1lLWxpc3QgbGkuY29sbGFwc2UgI3N0YWNrLWxpc3QgbGksCiAgICAjc3RhY2stbGlzdCBmb3JtIHVsI2RvY3MtbGlzdCAjdGhlbWUtbGlzdCBsaS5jb2xsYXBzZSBsaSwKICAgICN0aGVtZS1saXN0IGZvcm0gdWwjZG9jcy1saXN0IGxpLmNvbGxhcHNlICNzdGFjay1saXN0IGxpLAogICAgI3N0YWNrLWxpc3QgI3RoZW1lLWxpc3QgZm9ybSB1bCNkb2NzLWxpc3QgbGkuY29sbGFwc2UgbGksCiAgICBmb3JtIC5yb3cgdWwuY29sbGFwc2UjZG9jcy1saXN0ICNzdGFjay1saXN0IGxpLAogICAgI3N0YWNrLWxpc3QgZm9ybSAucm93IHVsLmNvbGxhcHNlI2RvY3MtbGlzdCBsaSwKICAgIGZvcm0gI3N0YWNrLWxpc3QgdWwuY29sbGFwc2UjZG9jcy1saXN0IGxpLAogICAgZm9ybSAjdGhlbWUtbGlzdCBsaSB1bC5jb2xsYXBzZSNkb2NzLWxpc3QgI3N0YWNrLWxpc3QgbGksCiAgICAjc3RhY2stbGlzdCBmb3JtICN0aGVtZS1saXN0IGxpIHVsLmNvbGxhcHNlI2RvY3MtbGlzdCBsaSwKICAgICN0aGVtZS1saXN0IGZvcm0gbGkgdWwuY29sbGFwc2UjZG9jcy1saXN0ICNzdGFjay1saXN0IGxpLAogICAgI3N0YWNrLWxpc3QgI3RoZW1lLWxpc3QgZm9ybSBsaSB1bC5jb2xsYXBzZSNkb2NzLWxpc3QgbGksCiAgICBmb3JtIHVsI2RvY3MtbGlzdCB1bC5jb2xsYXBzZSNkb2NzLWxpc3QgI3N0YWNrLWxpc3QgbGksCiAgICAjc3RhY2stbGlzdCBmb3JtIHVsI2RvY3MtbGlzdCB1bC5jb2xsYXBzZSNkb2NzLWxpc3QgbGksCiAgICBmb3JtIC5yb3cgLnJvdy5jb2xsYXBzZSAjdGhlbWUtbGlzdCBsaSA+IGRpdiwKICAgICN0aGVtZS1saXN0IGZvcm0gLnJvdyAucm93LmNvbGxhcHNlIGxpID4gZGl2LAogICAgZm9ybSAjc3RhY2stbGlzdCAucm93LmNvbGxhcHNlICN0aGVtZS1saXN0IGxpID4gZGl2LAogICAgI3RoZW1lLWxpc3QgZm9ybSAjc3RhY2stbGlzdCAucm93LmNvbGxhcHNlIGxpID4gZGl2LAogICAgZm9ybSAjdGhlbWUtbGlzdCBsaSAucm93LmNvbGxhcHNlIGxpID4gZGl2LAogICAgI3RoZW1lLWxpc3QgZm9ybSBsaSAucm93LmNvbGxhcHNlIGxpID4gZGl2LAogICAgZm9ybSB1bCNkb2NzLWxpc3QgLnJvdy5jb2xsYXBzZSAjdGhlbWUtbGlzdCBsaSA+IGRpdiwKICAgICN0aGVtZS1saXN0IGZvcm0gdWwjZG9jcy1saXN0IC5yb3cuY29sbGFwc2UgbGkgPiBkaXYsCiAgICBmb3JtIC5yb3cgLmNvbGxhcHNlI3N0YWNrLWxpc3QgI3RoZW1lLWxpc3QgbGkgPiBkaXYsCiAgICAjdGhlbWUtbGlzdCBmb3JtIC5yb3cgLmNvbGxhcHNlI3N0YWNrLWxpc3QgbGkgPiBkaXYsCiAgICBmb3JtICNzdGFjay1saXN0IC5jb2xsYXBzZSNzdGFjay1saXN0ICN0aGVtZS1saXN0IGxpID4gZGl2LAogICAgI3RoZW1lLWxpc3QgZm9ybSAjc3RhY2stbGlzdCAuY29sbGFwc2Ujc3RhY2stbGlzdCBsaSA+IGRpdiwKICAgIGZvcm0gI3RoZW1lLWxpc3QgbGkgLmNvbGxhcHNlI3N0YWNrLWxpc3QgbGkgPiBkaXYsCiAgICAjdGhlbWUtbGlzdCBmb3JtIGxpIC5jb2xsYXBzZSNzdGFjay1saXN0IGxpID4gZGl2LAogICAgZm9ybSB1bCNkb2NzLWxpc3QgLmNvbGxhcHNlI3N0YWNrLWxpc3QgI3RoZW1lLWxpc3QgbGkgPiBkaXYsCiAgICAjdGhlbWUtbGlzdCBmb3JtIHVsI2RvY3MtbGlzdCAuY29sbGFwc2Ujc3RhY2stbGlzdCBsaSA+IGRpdiwKICAgIGZvcm0gLnJvdyAjdGhlbWUtbGlzdCBsaS5jb2xsYXBzZSBsaSA+IGRpdiwKICAgICN0aGVtZS1saXN0IGZvcm0gLnJvdyBsaS5jb2xsYXBzZSBsaSA+IGRpdiwKICAgIGZvcm0gI3N0YWNrLWxpc3QgI3RoZW1lLWxpc3QgbGkuY29sbGFwc2UgbGkgPiBkaXYsCiAgICAjdGhlbWUtbGlzdCBmb3JtICNzdGFjay1saXN0IGxpLmNvbGxhcHNlIGxpID4gZGl2LAogICAgZm9ybSAjdGhlbWUtbGlzdCBsaSBsaS5jb2xsYXBzZSBsaSA+IGRpdiwKICAgICN0aGVtZS1saXN0IGZvcm0gbGkgbGkuY29sbGFwc2UgbGkgPiBkaXYsCiAgICBmb3JtIHVsI2RvY3MtbGlzdCAjdGhlbWUtbGlzdCBsaS5jb2xsYXBzZSBsaSA+IGRpdiwKICAgICN0aGVtZS1saXN0IGZvcm0gdWwjZG9jcy1saXN0IGxpLmNvbGxhcHNlIGxpID4gZGl2LAogICAgZm9ybSAucm93IHVsLmNvbGxhcHNlI2RvY3MtbGlzdCAjdGhlbWUtbGlzdCBsaSA+IGRpdiwKICAgICN0aGVtZS1saXN0IGZvcm0gLnJvdyB1bC5jb2xsYXBzZSNkb2NzLWxpc3QgbGkgPiBkaXYsCiAgICBmb3JtICNzdGFjay1saXN0IHVsLmNvbGxhcHNlI2RvY3MtbGlzdCAjdGhlbWUtbGlzdCBsaSA+IGRpdiwKICAgICN0aGVtZS1saXN0IGZvcm0gI3N0YWNrLWxpc3QgdWwuY29sbGFwc2UjZG9jcy1saXN0IGxpID4gZGl2LAogICAgZm9ybSAjdGhlbWUtbGlzdCBsaSB1bC5jb2xsYXBzZSNkb2NzLWxpc3QgbGkgPiBkaXYsCiAgICAjdGhlbWUtbGlzdCBmb3JtIGxpIHVsLmNvbGxhcHNlI2RvY3MtbGlzdCBsaSA+IGRpdiwKICAgIGZvcm0gdWwjZG9jcy1saXN0IHVsLmNvbGxhcHNlI2RvY3MtbGlzdCAjdGhlbWUtbGlzdCBsaSA+IGRpdiwKICAgICN0aGVtZS1saXN0IGZvcm0gdWwjZG9jcy1saXN0IHVsLmNvbGxhcHNlI2RvY3MtbGlzdCBsaSA+IGRpdiwKICAgIGZvcm0gLnJvdyAucm93LmNvbGxhcHNlIHVsI2RvY3MtbGlzdCA+IGxpLAogICAgZm9ybSAjdGhlbWUtbGlzdCBsaSAucm93LmNvbGxhcHNlIHVsI2RvY3MtbGlzdCA+IGxpLAogICAgI3RoZW1lLWxpc3QgZm9ybSBsaSAucm93LmNvbGxhcHNlIHVsI2RvY3MtbGlzdCA+IGxpLAogICAgZm9ybSB1bCNkb2NzLWxpc3QgLnJvdy5jb2xsYXBzZSB1bCNkb2NzLWxpc3QgPiBsaSwKICAgIGZvcm0gI3N0YWNrLWxpc3QgLmNvbGxhcHNlI3N0YWNrLWxpc3QgdWwjZG9jcy1saXN0ID4gbGksCiAgICBmb3JtIC5yb3cgI3RoZW1lLWxpc3QgbGkuY29sbGFwc2UgdWwjZG9jcy1saXN0ID4gbGksCiAgICAjdGhlbWUtbGlzdCBmb3JtIC5yb3cgbGkuY29sbGFwc2UgdWwjZG9jcy1saXN0ID4gbGksCiAgICBmb3JtICN0aGVtZS1saXN0IGxpIGxpLmNvbGxhcHNlIHVsI2RvY3MtbGlzdCA+IGxpLAogICAgI3RoZW1lLWxpc3QgZm9ybSBsaSBsaS5jb2xsYXBzZSB1bCNkb2NzLWxpc3QgPiBsaSwKICAgIGZvcm0gdWwjZG9jcy1saXN0ICN0aGVtZS1saXN0IGxpLmNvbGxhcHNlIHVsI2RvY3MtbGlzdCA+IGxpLAogICAgI3RoZW1lLWxpc3QgZm9ybSB1bCNkb2NzLWxpc3QgbGkuY29sbGFwc2UgdWwjZG9jcy1saXN0ID4gbGksCiAgICBmb3JtIC5yb3cgdWwuY29sbGFwc2UjZG9jcy1saXN0IHVsI2RvY3MtbGlzdCA+IGxpLAogICAgZm9ybSAjdGhlbWUtbGlzdCBsaSB1bC5jb2xsYXBzZSNkb2NzLWxpc3QgdWwjZG9jcy1saXN0ID4gbGksCiAgICAjdGhlbWUtbGlzdCBmb3JtIGxpIHVsLmNvbGxhcHNlI2RvY3MtbGlzdCB1bCNkb2NzLWxpc3QgPiBsaSwKICAgIGZvcm0gdWwjZG9jcy1saXN0IHVsLmNvbGxhcHNlI2RvY3MtbGlzdCB1bCNkb2NzLWxpc3QgPiBsaSB7CiAgICAgIHBhZGRpbmc6IDA7IH0KICAgIC8qIGxpbmUgODUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19mb3Jtcy5zY3NzICovCiAgICBmb3JtIC5yb3cgLnJvdy5jb2xsYXBzZSBpbnB1dCwgZm9ybSAjc3RhY2stbGlzdCAucm93LmNvbGxhcHNlIGlucHV0LCBmb3JtICN0aGVtZS1saXN0IGxpIC5yb3cuY29sbGFwc2UgaW5wdXQsICN0aGVtZS1saXN0IGZvcm0gbGkgLnJvdy5jb2xsYXBzZSBpbnB1dCwgZm9ybSB1bCNkb2NzLWxpc3QgLnJvdy5jb2xsYXBzZSBpbnB1dCwgZm9ybSAucm93IC5jb2xsYXBzZSNzdGFjay1saXN0IGlucHV0LCBmb3JtICNzdGFjay1saXN0IC5jb2xsYXBzZSNzdGFjay1saXN0IGlucHV0LCBmb3JtICN0aGVtZS1saXN0IGxpIC5jb2xsYXBzZSNzdGFjay1saXN0IGlucHV0LCAjdGhlbWUtbGlzdCBmb3JtIGxpIC5jb2xsYXBzZSNzdGFjay1saXN0IGlucHV0LCBmb3JtIHVsI2RvY3MtbGlzdCAuY29sbGFwc2Ujc3RhY2stbGlzdCBpbnB1dCwgZm9ybSAucm93ICN0aGVtZS1saXN0IGxpLmNvbGxhcHNlIGlucHV0LCAjdGhlbWUtbGlzdCBmb3JtIC5yb3cgbGkuY29sbGFwc2UgaW5wdXQsIGZvcm0gI3N0YWNrLWxpc3QgI3RoZW1lLWxpc3QgbGkuY29sbGFwc2UgaW5wdXQsICN0aGVtZS1saXN0IGZvcm0gI3N0YWNrLWxpc3QgbGkuY29sbGFwc2UgaW5wdXQsIGZvcm0gI3RoZW1lLWxpc3QgbGkgbGkuY29sbGFwc2UgaW5wdXQsICN0aGVtZS1saXN0IGZvcm0gbGkgbGkuY29sbGFwc2UgaW5wdXQsIGZvcm0gdWwjZG9jcy1saXN0ICN0aGVtZS1saXN0IGxpLmNvbGxhcHNlIGlucHV0LCAjdGhlbWUtbGlzdCBmb3JtIHVsI2RvY3MtbGlzdCBsaS5jb2xsYXBzZSBpbnB1dCwgZm9ybSAucm93IHVsLmNvbGxhcHNlI2RvY3MtbGlzdCBpbnB1dCwgZm9ybSAjc3RhY2stbGlzdCB1bC5jb2xsYXBzZSNkb2NzLWxpc3QgaW5wdXQsIGZvcm0gI3RoZW1lLWxpc3QgbGkgdWwuY29sbGFwc2UjZG9jcy1saXN0IGlucHV0LCAjdGhlbWUtbGlzdCBmb3JtIGxpIHVsLmNvbGxhcHNlI2RvY3MtbGlzdCBpbnB1dCwgZm9ybSB1bCNkb2NzLWxpc3QgdWwuY29sbGFwc2UjZG9jcy1saXN0IGlucHV0IHsKICAgICAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OiAwOwogICAgICAtbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6IDA7CiAgICAgIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7CiAgICAgIC13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7IH0KLyogbGluZSA5NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Zvcm1zLnNjc3MgKi8KZm9ybSAucm93IGlucHV0LmNvbHVtbiwgZm9ybSAjc3RhY2stbGlzdCBpbnB1dC5jb2x1bW4sIGZvcm0gI3RoZW1lLWxpc3QgbGkgaW5wdXQuY29sdW1uLCAjdGhlbWUtbGlzdCBmb3JtIGxpIGlucHV0LmNvbHVtbiwgZm9ybSB1bCNkb2NzLWxpc3QgaW5wdXQuY29sdW1uLApmb3JtIC5yb3cgaW5wdXQuY29sdW1ucywKZm9ybSAjc3RhY2stbGlzdCBpbnB1dC5jb2x1bW5zLApmb3JtICN0aGVtZS1saXN0IGxpIGlucHV0LmNvbHVtbnMsCiN0aGVtZS1saXN0IGZvcm0gbGkgaW5wdXQuY29sdW1ucywKZm9ybSB1bCNkb2NzLWxpc3QgaW5wdXQuY29sdW1ucywKZm9ybSAucm93IHRleHRhcmVhLmNvbHVtbiwKZm9ybSAjc3RhY2stbGlzdCB0ZXh0YXJlYS5jb2x1bW4sCmZvcm0gI3RoZW1lLWxpc3QgbGkgdGV4dGFyZWEuY29sdW1uLAojdGhlbWUtbGlzdCBmb3JtIGxpIHRleHRhcmVhLmNvbHVtbiwKZm9ybSB1bCNkb2NzLWxpc3QgdGV4dGFyZWEuY29sdW1uLApmb3JtIC5yb3cgdGV4dGFyZWEuY29sdW1ucywKZm9ybSAjc3RhY2stbGlzdCB0ZXh0YXJlYS5jb2x1bW5zLApmb3JtICN0aGVtZS1saXN0IGxpIHRleHRhcmVhLmNvbHVtbnMsCiN0aGVtZS1saXN0IGZvcm0gbGkgdGV4dGFyZWEuY29sdW1ucywKZm9ybSB1bCNkb2NzLWxpc3QgdGV4dGFyZWEuY29sdW1ucyB7CiAgcGFkZGluZy1sZWZ0OiAwLjVyZW07IH0KCi8qIExhYmVsIFN0eWxlcyAqLwovKiBsaW5lIDMwNiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Zvcm1zLnNjc3MgKi8KbGFiZWwgewogIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgY29sb3I6ICM0ZDRkNGQ7CiAgY3Vyc29yOiBwb2ludGVyOwogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgbWFyZ2luLWJvdHRvbTogMC41cmVtOwogIC8qIFN0eWxlcyBmb3IgcmVxdWlyZWQgaW5wdXRzICovIH0KICAvKiBsaW5lIDMwNywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Zvcm1zLnNjc3MgKi8KICBsYWJlbC5yaWdodCB7CiAgICBmbG9hdDogbm9uZTsKICAgIHRleHQtYWxpZ246IHJpZ2h0OyB9CiAgLyogbGluZSAzMDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19mb3Jtcy5zY3NzICovCiAgbGFiZWwuaW5saW5lIHsKICAgIG1hcmdpbjogMCAwIDFyZW0gMDsKICAgIHBhZGRpbmc6IDAuNjI1cmVtIDA7IH0KICAvKiBsaW5lIDMxMCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Zvcm1zLnNjc3MgKi8KICBsYWJlbCBzbWFsbCB7CiAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTsKICAgIGNvbG9yOiAjNjY2NjY2OyB9CgovKiBsaW5lIDMxNiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Zvcm1zLnNjc3MgKi8Kc2VsZWN0IHsKICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmUgIWltcG9ydGFudDsKICBiYWNrZ3JvdW5kOiAjZmFmYWZhIHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwgUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIWmxjbk5wYjI0OUlqRXVNU0lnZUQwaU1IQjRJaUI1UFNJd2NIZ2lJSGRwWkhSb1BTSTJjSGdpSUdobGFXZG9kRDBpTTNCNElpQjJhV1YzUW05NFBTSXdJREFnTmlBeklpQmxibUZpYkdVdFltRmphMmR5YjNWdVpEMGlibVYzSURBZ01DQTJJRE1pSUhodGJEcHpjR0ZqWlQwaWNISmxjMlZ5ZG1VaVBqeHdiMng1WjI5dUlIQnZhVzUwY3owaU5TNDVPVElzTUNBeUxqazVNaXd6SUMwd0xqQXdPQ3d3SUNJdlBqd3ZjM1puUGc9PSIpIG5vLXJlcGVhdDsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IDk3JTsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IGNlbnRlcjsKICBib3JkZXI6IDFweCBzb2xpZCAjY2NjY2NjOwogIHBhZGRpbmc6IDAuNXJlbTsKICBmb250LXNpemU6IDAuODc1cmVtOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICBib3JkZXItcmFkaXVzOiAwOyB9CiAgLyogbGluZSAzMjcsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19mb3Jtcy5zY3NzICovCiAgc2VsZWN0LnJhZGl1cyB7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsgfQogIC8qIGxpbmUgMzI4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZm9ybXMuc2NzcyAqLwogIHNlbGVjdDpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiAjZjJmMmYyIHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwgUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIWmxjbk5wYjI0OUlqRXVNU0lnZUQwaU1IQjRJaUI1UFNJd2NIZ2lJSGRwWkhSb1BTSTJjSGdpSUdobGFXZG9kRDBpTTNCNElpQjJhV1YzUW05NFBTSXdJREFnTmlBeklpQmxibUZpYkdVdFltRmphMmR5YjNWdVpEMGlibVYzSURBZ01DQTJJRE1pSUhodGJEcHpjR0ZqWlQwaWNISmxjMlZ5ZG1VaVBqeHdiMng1WjI5dUlIQnZhVzUwY3owaU5TNDVPVElzTUNBeUxqazVNaXd6SUMwd0xqQXdPQ3d3SUNJdlBqd3ZjM1puUGc9PSIpIG5vLXJlcGVhdDsKICAgIGJhY2tncm91bmQtcG9zaXRpb24teDogOTclOwogICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiBjZW50ZXI7CiAgICBib3JkZXItY29sb3I6ICM5OTk5OTk7IH0KCkAtbW96LWRvY3VtZW50IHVybC1wcmVmaXgoKSB7CiAgLyogbGluZSAzMzgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19mb3Jtcy5zY3NzICovCiAgc2VsZWN0IHsKICAgIGJhY2tncm91bmQ6ICNmYWZhZmE7IH0KCiAgLyogbGluZSAzMzksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19mb3Jtcy5zY3NzICovCiAgc2VsZWN0OmhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICNmMmYyZjI7IH0gfQoKLyogQXR0YWNoIGVsZW1lbnRzIHRvIHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIGFuIGlucHV0ICovCi8qIGxpbmUgMzQzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZm9ybXMuc2NzcyAqLwoucHJlZml4LAoucG9zdGZpeCB7CiAgZGlzcGxheTogYmxvY2s7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHotaW5kZXg6IDI7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIHdpZHRoOiAxMDAlOwogIHBhZGRpbmctdG9wOiAwOwogIHBhZGRpbmctYm90dG9tOiAwOwogIGJvcmRlci1zdHlsZTogc29saWQ7CiAgYm9yZGVyLXdpZHRoOiAxcHg7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICBmb250LXNpemU6IDAuODc1cmVtOwogIGhlaWdodDogMi4zMTI1cmVtOwogIGxpbmUtaGVpZ2h0OiAyLjMxMjVyZW07IH0KCi8qIEFkanVzdCBwYWRkaW5nLCBhbGlnbm1lbnQgYW5kIHJhZGl1cyBpZiBwcmUvcG9zdCBlbGVtZW50IGlzIGEgYnV0dG9uICovCi8qIGxpbmUgMzQ2LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZm9ybXMuc2NzcyAqLwoucG9zdGZpeC5idXR0b24gewogIHBhZGRpbmctbGVmdDogMDsKICBwYWRkaW5nLXJpZ2h0OiAwOwogIHBhZGRpbmctdG9wOiAwOwogIHBhZGRpbmctYm90dG9tOiAwOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBsaW5lLWhlaWdodDogMi4xMjVyZW07CiAgYm9yZGVyOiBub25lOyB9CgovKiBsaW5lIDM0NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Zvcm1zLnNjc3MgKi8KLnByZWZpeC5idXR0b24gewogIHBhZGRpbmctbGVmdDogMDsKICBwYWRkaW5nLXJpZ2h0OiAwOwogIHBhZGRpbmctdG9wOiAwOwogIHBhZGRpbmctYm90dG9tOiAwOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBsaW5lLWhlaWdodDogMi4xMjVyZW07CiAgYm9yZGVyOiBub25lOyB9CgovKiBsaW5lIDM0OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Zvcm1zLnNjc3MgKi8KLnByZWZpeC5idXR0b24ucmFkaXVzIHsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgYm9yZGVyLXJhZGl1czogMDsKICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDogM3B4OwogIC1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OiAzcHg7CiAgLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7CiAgLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7CiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogM3B4OwogIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDNweDsgfQoKLyogbGluZSAzNTAsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19mb3Jtcy5zY3NzICovCi5wb3N0Zml4LmJ1dHRvbi5yYWRpdXMgewogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICBib3JkZXItcmFkaXVzOiAwOwogIC1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDogM3B4OwogIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDogM3B4OwogIC13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDNweDsKICAtd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzcHg7CiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDNweDsKICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4OyB9CgovKiBsaW5lIDM1MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Zvcm1zLnNjc3MgKi8KLnByZWZpeC5idXR0b24ucm91bmQgewogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICBib3JkZXItcmFkaXVzOiAwOwogIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OiAxMDAwcHg7CiAgLW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6IDEwMDBweDsKICAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDEwMDBweDsKICAtd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDEwMDBweDsKICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAxMDAwcHg7CiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMTAwMHB4OyB9CgovKiBsaW5lIDM1MiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Zvcm1zLnNjc3MgKi8KLnBvc3RmaXguYnV0dG9uLnJvdW5kIHsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgYm9yZGVyLXJhZGl1czogMDsKICAtbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6IDEwMDBweDsKICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6IDEwMDBweDsKICAtd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxMDAwcHg7CiAgLXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMTAwMHB4OwogIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxMDAwcHg7CiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDEwMDBweDsgfQoKLyogU2VwYXJhdGUgcHJlZml4IGFuZCBwb3N0Zml4IHN0eWxlcyB3aGVuIG9uIHNwYW4gb3IgbGFiZWwgc28gYnV0dG9ucyBrZWVwIHRoZWlyIG93biAqLwovKiBsaW5lIDM1NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Zvcm1zLnNjc3MgKi8Kc3Bhbi5wcmVmaXgsIGxhYmVsLnByZWZpeCB7CiAgYmFja2dyb3VuZDogI2YyZjJmMjsKICBib3JkZXItY29sb3I6ICNkOWQ5ZDk7CiAgYm9yZGVyLXJpZ2h0OiBub25lOwogIGNvbG9yOiAjMzMzMzMzOyB9CiAgLyogbGluZSAzNTYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19mb3Jtcy5zY3NzICovCiAgc3Bhbi5wcmVmaXgucmFkaXVzLCBsYWJlbC5wcmVmaXgucmFkaXVzIHsKICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDogM3B4OwogICAgLW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6IDNweDsKICAgIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogM3B4OwogICAgLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7CiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7CiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7IH0KCi8qIGxpbmUgMzU4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZm9ybXMuc2NzcyAqLwpzcGFuLnBvc3RmaXgsIGxhYmVsLnBvc3RmaXggewogIGJhY2tncm91bmQ6ICNmMmYyZjI7CiAgYm9yZGVyLWNvbG9yOiAjY2NjY2NjOwogIGJvcmRlci1sZWZ0OiBub25lOwogIGNvbG9yOiAjMzMzMzMzOyB9CiAgLyogbGluZSAzNTksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19mb3Jtcy5zY3NzICovCiAgc3Bhbi5wb3N0Zml4LnJhZGl1cywgbGFiZWwucG9zdGZpeC5yYWRpdXMgewogICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOwogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIC1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDogM3B4OwogICAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OiAzcHg7CiAgICAtd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7CiAgICAtd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzcHg7CiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4OwogICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDsgfQoKLyogSW5wdXQgZ3JvdXBzIHdpbGwgYXV0b21hdGljYWxseSBzdHlsZSBmaXJzdCBhbmQgbGFzdCBlbGVtZW50cyBvZiB0aGUgZ3JvdXAgKi8KLyogbGluZSAzNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19mb3Jtcy5zY3NzICovCi5pbnB1dC1ncm91cC5yYWRpdXMgPiAqOmZpcnN0LWNoaWxkLCAuaW5wdXQtZ3JvdXAucmFkaXVzID4gKjpmaXJzdC1jaGlsZCAqIHsKICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDogM3B4OwogIC1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OiAzcHg7CiAgLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7CiAgLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7CiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogM3B4OwogIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDNweDsgfQovKiBsaW5lIDM2OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Zvcm1zLnNjc3MgKi8KLmlucHV0LWdyb3VwLnJhZGl1cyA+ICo6bGFzdC1jaGlsZCwgLmlucHV0LWdyb3VwLnJhZGl1cyA+ICo6bGFzdC1jaGlsZCAqIHsKICAtbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6IDNweDsKICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6IDNweDsKICAtd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7CiAgLXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4OwogIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7CiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDsgfQovKiBsaW5lIDM3MywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Zvcm1zLnNjc3MgKi8KLmlucHV0LWdyb3VwLnJvdW5kID4gKjpmaXJzdC1jaGlsZCwgLmlucHV0LWdyb3VwLnJvdW5kID4gKjpmaXJzdC1jaGlsZCAqIHsKICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDogMTAwMHB4OwogIC1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OiAxMDAwcHg7CiAgLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAxMDAwcHg7CiAgLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxMDAwcHg7CiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMTAwMHB4OwogIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDEwMDBweDsgfQovKiBsaW5lIDM3NiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Zvcm1zLnNjc3MgKi8KLmlucHV0LWdyb3VwLnJvdW5kID4gKjpsYXN0LWNoaWxkLCAuaW5wdXQtZ3JvdXAucm91bmQgPiAqOmxhc3QtY2hpbGQgKiB7CiAgLW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OiAxMDAwcHg7CiAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OiAxMDAwcHg7CiAgLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMTAwMHB4OwogIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDEwMDBweDsKICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMTAwMHB4OwogIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAxMDAwcHg7IH0KCi8qIFdlIHVzZSB0aGlzIHRvIGdldCBiYXNpYyBzdHlsaW5nIG9uIGFsbCBiYXNpYyBmb3JtIGVsZW1lbnRzICovCi8qIGxpbmUgMzk2LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZm9ybXMuc2NzcyAqLwppbnB1dFt0eXBlPSJ0ZXh0Il0sCmlucHV0W3R5cGU9InBhc3N3b3JkIl0sCmlucHV0W3R5cGU9ImRhdGUiXSwKaW5wdXRbdHlwZT0iZGF0ZXRpbWUiXSwKaW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXSwKaW5wdXRbdHlwZT0ibW9udGgiXSwKaW5wdXRbdHlwZT0id2VlayJdLAppbnB1dFt0eXBlPSJlbWFpbCJdLAppbnB1dFt0eXBlPSJudW1iZXIiXSwKaW5wdXRbdHlwZT0ic2VhcmNoIl0sCmlucHV0W3R5cGU9InRlbCJdLAppbnB1dFt0eXBlPSJ0aW1lIl0sCmlucHV0W3R5cGU9InVybCJdLAp0ZXh0YXJlYSB7CiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICBib3JkZXItcmFkaXVzOiAwOwogIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogIGJvcmRlcjogMXB4IHNvbGlkICNjY2NjY2M7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjEpOwogIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC43NSk7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC1zaXplOiAwLjg3NXJlbTsKICBtYXJnaW46IDAgMCAxcmVtIDA7CiAgcGFkZGluZzogMC41cmVtOwogIGhlaWdodDogMi4zMTI1cmVtOwogIHdpZHRoOiAxMDAlOwogIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtYm94LXNoYWRvdyAwLjQ1cywgYm9yZGVyLWNvbG9yIDAuNDVzIGVhc2UtaW4tb3V0OwogIC1tb3otdHJhbnNpdGlvbjogLW1vei1ib3gtc2hhZG93IDAuNDVzLCBib3JkZXItY29sb3IgMC40NXMgZWFzZS1pbi1vdXQ7CiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjQ1cywgYm9yZGVyLWNvbG9yIDAuNDVzIGVhc2UtaW4tb3V0OyB9CiAgLyogbGluZSAxODIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19nbG9iYWwuc2NzcyAqLwogIGlucHV0W3R5cGU9InRleHQiXTpmb2N1cywKICBpbnB1dFt0eXBlPSJwYXNzd29yZCJdOmZvY3VzLAogIGlucHV0W3R5cGU9ImRhdGUiXTpmb2N1cywKICBpbnB1dFt0eXBlPSJkYXRldGltZSJdOmZvY3VzLAogIGlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl06Zm9jdXMsCiAgaW5wdXRbdHlwZT0ibW9udGgiXTpmb2N1cywKICBpbnB1dFt0eXBlPSJ3ZWVrIl06Zm9jdXMsCiAgaW5wdXRbdHlwZT0iZW1haWwiXTpmb2N1cywKICBpbnB1dFt0eXBlPSJudW1iZXIiXTpmb2N1cywKICBpbnB1dFt0eXBlPSJzZWFyY2giXTpmb2N1cywKICBpbnB1dFt0eXBlPSJ0ZWwiXTpmb2N1cywKICBpbnB1dFt0eXBlPSJ0aW1lIl06Zm9jdXMsCiAgaW5wdXRbdHlwZT0idXJsIl06Zm9jdXMsCiAgdGV4dGFyZWE6Zm9jdXMgewogICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgNXB4ICM5OTk5OTk7CiAgICAtbW96LWJveC1zaGFkb3c6IDAgMCA1cHggIzk5OTk5OTsKICAgIGJveC1zaGFkb3c6IDAgMCA1cHggIzk5OTk5OTsKICAgIGJvcmRlci1jb2xvcjogIzk5OTk5OTsgfQogIC8qIGxpbmUgMTIzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZm9ybXMuc2NzcyAqLwogIGlucHV0W3R5cGU9InRleHQiXTpmb2N1cywKICBpbnB1dFt0eXBlPSJwYXNzd29yZCJdOmZvY3VzLAogIGlucHV0W3R5cGU9ImRhdGUiXTpmb2N1cywKICBpbnB1dFt0eXBlPSJkYXRldGltZSJdOmZvY3VzLAogIGlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl06Zm9jdXMsCiAgaW5wdXRbdHlwZT0ibW9udGgiXTpmb2N1cywKICBpbnB1dFt0eXBlPSJ3ZWVrIl06Zm9jdXMsCiAgaW5wdXRbdHlwZT0iZW1haWwiXTpmb2N1cywKICBpbnB1dFt0eXBlPSJudW1iZXIiXTpmb2N1cywKICBpbnB1dFt0eXBlPSJzZWFyY2giXTpmb2N1cywKICBpbnB1dFt0eXBlPSJ0ZWwiXTpmb2N1cywKICBpbnB1dFt0eXBlPSJ0aW1lIl06Zm9jdXMsCiAgaW5wdXRbdHlwZT0idXJsIl06Zm9jdXMsCiAgdGV4dGFyZWE6Zm9jdXMgewogICAgYmFja2dyb3VuZDogI2ZhZmFmYTsKICAgIGJvcmRlci1jb2xvcjogIzk5OTk5OTsKICAgIG91dGxpbmU6IG5vbmU7IH0KICAvKiBsaW5lIDEzMCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Zvcm1zLnNjc3MgKi8KICBpbnB1dFt0eXBlPSJ0ZXh0Il1bZGlzYWJsZWRdLAogIGlucHV0W3R5cGU9InBhc3N3b3JkIl1bZGlzYWJsZWRdLAogIGlucHV0W3R5cGU9ImRhdGUiXVtkaXNhYmxlZF0sCiAgaW5wdXRbdHlwZT0iZGF0ZXRpbWUiXVtkaXNhYmxlZF0sCiAgaW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXVtkaXNhYmxlZF0sCiAgaW5wdXRbdHlwZT0ibW9udGgiXVtkaXNhYmxlZF0sCiAgaW5wdXRbdHlwZT0id2VlayJdW2Rpc2FibGVkXSwKICBpbnB1dFt0eXBlPSJlbWFpbCJdW2Rpc2FibGVkXSwKICBpbnB1dFt0eXBlPSJudW1iZXIiXVtkaXNhYmxlZF0sCiAgaW5wdXRbdHlwZT0ic2VhcmNoIl1bZGlzYWJsZWRdLAogIGlucHV0W3R5cGU9InRlbCJdW2Rpc2FibGVkXSwKICBpbnB1dFt0eXBlPSJ0aW1lIl1bZGlzYWJsZWRdLAogIGlucHV0W3R5cGU9InVybCJdW2Rpc2FibGVkXSwKICB0ZXh0YXJlYVtkaXNhYmxlZF0gewogICAgYmFja2dyb3VuZC1jb2xvcjogI2RkZGRkZDsgfQoKLyogQWRqdXN0IG1hcmdpbiBmb3IgZm9ybSBlbGVtZW50cyBiZWxvdyAqLwovKiBsaW5lIDQxMCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Zvcm1zLnNjc3MgKi8KaW5wdXRbdHlwZT0iZmlsZSJdLAppbnB1dFt0eXBlPSJjaGVja2JveCJdLAppbnB1dFt0eXBlPSJyYWRpbyJdLApzZWxlY3QgewogIG1hcmdpbjogMCAwIDFyZW0gMDsgfQoKLyogbGluZSA0MTUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19mb3Jtcy5zY3NzICovCmlucHV0W3R5cGU9ImNoZWNrYm94Il0gKyBsYWJlbCwKaW5wdXRbdHlwZT0icmFkaW8iXSArIGxhYmVsIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbWFyZ2luLWxlZnQ6IDAuNXJlbTsKICBtYXJnaW4tcmlnaHQ6IDFyZW07CiAgbWFyZ2luLWJvdHRvbTogMDsKICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7IH0KCi8qIE5vcm1hbGl6ZSBmaWxlIGlucHV0IHdpZHRoICovCi8qIGxpbmUgNDI0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZm9ybXMuc2NzcyAqLwppbnB1dFt0eXBlPSJmaWxlIl0gewogIHdpZHRoOiAxMDAlOyB9CgovKiBXZSBhZGQgYmFzaWMgZmllbGRzZXQgc3R5bGluZyAqLwovKiBsaW5lIDQyOSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Zvcm1zLnNjc3MgKi8KZmllbGRzZXQgewogIGJvcmRlcjogc29saWQgMXB4ICNkZGRkZGQ7CiAgcGFkZGluZzogMS4yNXJlbTsKICBtYXJnaW46IDEuMTI1cmVtIDA7IH0KICAvKiBsaW5lIDI0NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Zvcm1zLnNjc3MgKi8KICBmaWVsZHNldCBsZWdlbmQgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgIHBhZGRpbmc6IDAgMC4xODc1cmVtOwogICAgbWFyZ2luOiAwOwogICAgbWFyZ2luLWxlZnQ6IC0wLjE4NzVyZW07IH0KCi8qIEVycm9yIEhhbmRsaW5nICovCi8qIGxpbmUgNDM2LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZm9ybXMuc2NzcyAqLwpbZGF0YS1hYmlkZV0gLmVycm9yIHNtYWxsLmVycm9yLCBbZGF0YS1hYmlkZV0gc3Bhbi5lcnJvciwgW2RhdGEtYWJpZGVdIHNtYWxsLmVycm9yIHsKICBkaXNwbGF5OiBibG9jazsKICBwYWRkaW5nOiAwLjM3NXJlbSAwLjU2MjVyZW0gMC41NjI1cmVtOwogIG1hcmdpbi10b3A6IC0xcHg7CiAgbWFyZ2luLWJvdHRvbTogMXJlbTsKICBmb250LXNpemU6IDAuNzVyZW07CiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgYmFja2dyb3VuZDogI2YwNDEyNDsKICBjb2xvcjogd2hpdGU7IH0KLyogbGluZSA0MzksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19mb3Jtcy5zY3NzICovCltkYXRhLWFiaWRlXSBzcGFuLmVycm9yLCBbZGF0YS1hYmlkZV0gc21hbGwuZXJyb3IgewogIGRpc3BsYXk6IG5vbmU7IH0KCi8qIGxpbmUgNDQxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZm9ybXMuc2NzcyAqLwpzcGFuLmVycm9yLCBzbWFsbC5lcnJvciB7CiAgZGlzcGxheTogYmxvY2s7CiAgcGFkZGluZzogMC4zNzVyZW0gMC41NjI1cmVtIDAuNTYyNXJlbTsKICBtYXJnaW4tdG9wOiAtMXB4OwogIG1hcmdpbi1ib3R0b206IDFyZW07CiAgZm9udC1zaXplOiAwLjc1cmVtOwogIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGJhY2tncm91bmQ6ICNmMDQxMjQ7CiAgY29sb3I6IHdoaXRlOyB9CgovKiBsaW5lIDQ0NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Zvcm1zLnNjc3MgKi8KLmVycm9yIGlucHV0LAouZXJyb3IgdGV4dGFyZWEsCi5lcnJvciBzZWxlY3QgewogIG1hcmdpbi1ib3R0b206IDA7IH0KLyogbGluZSA0NTIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19mb3Jtcy5zY3NzICovCi5lcnJvciBsYWJlbCwKLmVycm9yIGxhYmVsLmVycm9yIHsKICBjb2xvcjogI2YwNDEyNDsgfQovKiBsaW5lIDQ1NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2Zvcm1zLnNjc3MgKi8KLmVycm9yID4gc21hbGwsCi5lcnJvciBzbWFsbC5lcnJvciB7CiAgZGlzcGxheTogYmxvY2s7CiAgcGFkZGluZzogMC4zNzVyZW0gMC41NjI1cmVtIDAuNTYyNXJlbTsKICBtYXJnaW4tdG9wOiAtMXB4OwogIG1hcmdpbi1ib3R0b206IDFyZW07CiAgZm9udC1zaXplOiAwLjc1cmVtOwogIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGJhY2tncm91bmQ6ICNmMDQxMjQ7CiAgY29sb3I6IHdoaXRlOyB9Ci8qIGxpbmUgNDYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZm9ybXMuc2NzcyAqLwouZXJyb3Igc3Bhbi5lcnJvci1tZXNzYWdlIHsKICBkaXNwbGF5OiBibG9jazsgfQoKLyogbGluZSA0NjcsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19mb3Jtcy5zY3NzICovCmlucHV0LmVycm9yLAp0ZXh0YXJlYS5lcnJvciB7CiAgbWFyZ2luLWJvdHRvbTogMDsgfQoKLyogbGluZSA0NzAsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19mb3Jtcy5zY3NzICovCmxhYmVsLmVycm9yIHsKICBjb2xvcjogI2YwNDEyNDsgfQoKLyogbGluZSA0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2lubGluZS1saXN0cy5zY3NzICovCi5pbmxpbmUtbGlzdCB7CiAgbWFyZ2luOiAwIGF1dG8gMS4wNjI1cmVtIGF1dG87CiAgbWFyZ2luLWxlZnQ6IC0xLjM3NXJlbTsKICBtYXJnaW4tcmlnaHQ6IDA7CiAgcGFkZGluZzogMDsKICBsaXN0LXN0eWxlOiBub25lOwogIG92ZXJmbG93OiBoaWRkZW47IH0KICAvKiBsaW5lIDM3LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9faW5saW5lLWxpc3RzLnNjc3MgKi8KICAuaW5saW5lLWxpc3QgPiBsaSB7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBtYXJnaW4tbGVmdDogMS4zNzVyZW07CiAgICBkaXNwbGF5OiBibG9jazsgfQogICAgLyogbGluZSA0MiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2lubGluZS1saXN0cy5zY3NzICovCiAgICAuaW5saW5lLWxpc3QgPiBsaSA+ICogewogICAgICBkaXNwbGF5OiBibG9jazsgfQoKLyogRm91bmRhdGlvbiBKb3lyaWRlICovCi8qIGxpbmUgNDQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19qb3lyaWRlLnNjc3MgKi8KLmpveXJpZGUtbGlzdCB7CiAgZGlzcGxheTogbm9uZTsgfQoKLyogRGVmYXVsdCBzdHlsZXMgZm9yIHRoZSBjb250YWluZXIgKi8KLyogbGluZSA0NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2pveXJpZGUuc2NzcyAqLwouam95cmlkZS10aXAtZ3VpZGUgewogIGRpc3BsYXk6IG5vbmU7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGJhY2tncm91bmQ6ICMzMzMzMzM7CiAgY29sb3I6IHdoaXRlOwogIHotaW5kZXg6IDEwMTsKICB0b3A6IDA7CiAgbGVmdDogMi41JTsKICBmb250LWZhbWlseTogaW5oZXJpdDsKICBmb250LXdlaWdodDogbm9ybWFsOwogIHdpZHRoOiA5NSU7IH0KCi8qIGxpbmUgNjAsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19qb3lyaWRlLnNjc3MgKi8KLmx0LWllOSAuam95cmlkZS10aXAtZ3VpZGUgewogIG1heC13aWR0aDogODAwcHg7CiAgbGVmdDogNTAlOwogIG1hcmdpbi1sZWZ0OiAtNDAwcHg7IH0KCi8qIGxpbmUgNjYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19qb3lyaWRlLnNjc3MgKi8KLmpveXJpZGUtY29udGVudC13cmFwcGVyIHsKICB3aWR0aDogMTAwJTsKICBwYWRkaW5nOiAxLjEyNXJlbSAxLjI1cmVtIDEuNXJlbTsgfQogIC8qIGxpbmUgNzEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19qb3lyaWRlLnNjc3MgKi8KICAuam95cmlkZS1jb250ZW50LXdyYXBwZXIgLmJ1dHRvbiB7CiAgICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7IH0KCi8qIEFkZCBhIGxpdHRsZSBjc3MgdHJpYW5nbGUgcGlwLCBvbGRlciBicm93c2VyIGp1c3QgbWlzcyBvdXQgb24gdGhlIGZhbmNpbmVzcyBvZiBpdCAqLwovKiBsaW5lIDc2LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fam95cmlkZS5zY3NzICovCi5qb3lyaWRlLXRpcC1ndWlkZSAuam95cmlkZS1udWIgewogIGRpc3BsYXk6IGJsb2NrOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBsZWZ0OiAyMnB4OwogIHdpZHRoOiAwOwogIGhlaWdodDogMDsKICBib3JkZXI6IDEwcHggc29saWQgIzMzMzMzMzsgfQogIC8qIGxpbmUgODQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19qb3lyaWRlLnNjc3MgKi8KICAuam95cmlkZS10aXAtZ3VpZGUgLmpveXJpZGUtbnViLnRvcCB7CiAgICBib3JkZXItdG9wLXN0eWxlOiBzb2xpZDsKICAgIGJvcmRlci1jb2xvcjogIzMzMzMzMzsKICAgIGJvcmRlci10b3AtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgIHRvcDogLTIwcHg7IH0KICAvKiBsaW5lIDkyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fam95cmlkZS5zY3NzICovCiAgLmpveXJpZGUtdGlwLWd1aWRlIC5qb3lyaWRlLW51Yi5ib3R0b20gewogICAgYm9yZGVyLWJvdHRvbS1zdHlsZTogc29saWQ7CiAgICBib3JkZXItY29sb3I6ICMzMzMzMzMgIWltcG9ydGFudDsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgIGJvdHRvbTogLTIwcHg7IH0KICAvKiBsaW5lIDEwMSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2pveXJpZGUuc2NzcyAqLwogIC5qb3lyaWRlLXRpcC1ndWlkZSAuam95cmlkZS1udWIucmlnaHQsIC5qb3lyaWRlLXRpcC1ndWlkZSBib2R5W2NsYXNzJD0iYWJvdXQiXSBkbCBkZCBpbWcuam95cmlkZS1udWIsIGJvZHlbY2xhc3MkPSJhYm91dCJdIGRsIGRkIC5qb3lyaWRlLXRpcC1ndWlkZSBpbWcuam95cmlkZS1udWIgewogICAgcmlnaHQ6IC0yMHB4OyB9CiAgLyogbGluZSAxMDIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19qb3lyaWRlLnNjc3MgKi8KICAuam95cmlkZS10aXAtZ3VpZGUgLmpveXJpZGUtbnViLmxlZnQgewogICAgbGVmdDogLTIwcHg7IH0KCi8qIFR5cG9ncmFwaHkgKi8KLyogbGluZSAxMTIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19qb3lyaWRlLnNjc3MgKi8KLmpveXJpZGUtdGlwLWd1aWRlIGgxLAouam95cmlkZS10aXAtZ3VpZGUgaDIsCi5qb3lyaWRlLXRpcC1ndWlkZSBoMywKLmpveXJpZGUtdGlwLWd1aWRlIGg0LAouam95cmlkZS10aXAtZ3VpZGUgaDUsCi5qb3lyaWRlLXRpcC1ndWlkZSBoNiB7CiAgbGluZS1oZWlnaHQ6IDEuMjU7CiAgbWFyZ2luOiAwOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGNvbG9yOiB3aGl0ZTsgfQoKLyogbGluZSAxMTgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19qb3lyaWRlLnNjc3MgKi8KLmpveXJpZGUtdGlwLWd1aWRlIHAgewogIG1hcmdpbjogMCAwIDEuMTI1cmVtIDA7CiAgZm9udC1zaXplOiAwLjg3NXJlbTsKICBsaW5lLWhlaWdodDogMS4zOyB9CgovKiBsaW5lIDEyNCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2pveXJpZGUuc2NzcyAqLwouam95cmlkZS10aW1lci1pbmRpY2F0b3Itd3JhcCB7CiAgd2lkdGg6IDUwcHg7CiAgaGVpZ2h0OiAzcHg7CiAgYm9yZGVyOiBzb2xpZCAxcHggIzU1NTU1NTsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgcmlnaHQ6IDEuMDYyNXJlbTsKICBib3R0b206IDFyZW07IH0KCi8qIGxpbmUgMTMyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fam95cmlkZS5zY3NzICovCi5qb3lyaWRlLXRpbWVyLWluZGljYXRvciB7CiAgZGlzcGxheTogYmxvY2s7CiAgd2lkdGg6IDA7CiAgaGVpZ2h0OiBpbmhlcml0OwogIGJhY2tncm91bmQ6ICM2NjY2NjY7IH0KCi8qIGxpbmUgMTM5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fam95cmlkZS5zY3NzICovCi5qb3lyaWRlLWNsb3NlLXRpcCB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHJpZ2h0OiAxMnB4OwogIHRvcDogMTBweDsKICBjb2xvcjogIzc3Nzc3NyAhaW1wb3J0YW50OwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICBmb250LXNpemU6IDI0cHg7CiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICBsaW5lLWhlaWdodDogLjUgIWltcG9ydGFudDsgfQogIC8qIGxpbmUgMTUwLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fam95cmlkZS5zY3NzICovCiAgLmpveXJpZGUtY2xvc2UtdGlwOmhvdmVyLCAuam95cmlkZS1jbG9zZS10aXA6Zm9jdXMgewogICAgY29sb3I6ICNlZWUgIWltcG9ydGFudDsgfQoKLyogbGluZSAxNTMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19qb3lyaWRlLnNjc3MgKi8KLmpveXJpZGUtbW9kYWwtYmcgewogIHBvc2l0aW9uOiBmaXhlZDsKICBoZWlnaHQ6IDEwMCU7CiAgd2lkdGg6IDEwMCU7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjUpOwogIHotaW5kZXg6IDEwMDsKICBkaXNwbGF5OiBub25lOwogIHRvcDogMDsKICBsZWZ0OiAwOwogIGN1cnNvcjogcG9pbnRlcjsgfQoKLyogbGluZSAxNjYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19qb3lyaWRlLnNjc3MgKi8KLmpveXJpZGUtZXhwb3NlLXdyYXBwZXIgewogIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGJvcmRlci1yYWRpdXM6IDNweDsKICB6LWluZGV4OiAxMDI7CiAgLW1vei1ib3gtc2hhZG93OiAwIDAgMzBweCAjZmZmZmZmOwogIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDE1cHggI2ZmZmZmZjsKICBib3gtc2hhZG93OiAwIDAgMTVweCAjZmZmZmZmOyB9CgovKiBsaW5lIDE3OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2pveXJpZGUuc2NzcyAqLwouam95cmlkZS1leHBvc2UtY292ZXIgewogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogIGJvcmRlci1yYWRpdXM6IDNweDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgei1pbmRleDogOTk5OTsKICB0b3A6IDA7CiAgbGVmdDogMDsgfQoKLyogU3R5bGVzIGZvciBzY3JlZW5zIHRoYXQgYXJlIGF0bGVhc3QgNzY4cHg7ICovCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDAuMDYzZW0pIHsKICAvKiBsaW5lIDE5MCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2pveXJpZGUuc2NzcyAqLwogIC5qb3lyaWRlLXRpcC1ndWlkZSB7CiAgICB3aWR0aDogMzAwcHg7CiAgICBsZWZ0OiBpbmhlcml0OyB9CiAgICAvKiBsaW5lIDE5MiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2pveXJpZGUuc2NzcyAqLwogICAgLmpveXJpZGUtdGlwLWd1aWRlIC5qb3lyaWRlLW51Yi5ib3R0b20gewogICAgICBib3JkZXItY29sb3I6ICMzMzMzMzMgIWltcG9ydGFudDsKICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgYm9yZGVyLWxlZnQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgYm90dG9tOiAtMjBweDsgfQogICAgLyogbGluZSAxOTksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19qb3lyaWRlLnNjc3MgKi8KICAgIC5qb3lyaWRlLXRpcC1ndWlkZSAuam95cmlkZS1udWIucmlnaHQsIC5qb3lyaWRlLXRpcC1ndWlkZSBib2R5W2NsYXNzJD0iYWJvdXQiXSBkbCBkZCBpbWcuam95cmlkZS1udWIsIGJvZHlbY2xhc3MkPSJhYm91dCJdIGRsIGRkIC5qb3lyaWRlLXRpcC1ndWlkZSBpbWcuam95cmlkZS1udWIgewogICAgICBib3JkZXItY29sb3I6ICMzMzMzMzMgIWltcG9ydGFudDsKICAgICAgYm9yZGVyLXRvcC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgICB0b3A6IDIycHg7CiAgICAgIGxlZnQ6IGF1dG87CiAgICAgIHJpZ2h0OiAtMjBweDsgfQogICAgLyogbGluZSAyMDcsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19qb3lyaWRlLnNjc3MgKi8KICAgIC5qb3lyaWRlLXRpcC1ndWlkZSAuam95cmlkZS1udWIubGVmdCB7CiAgICAgIGJvcmRlci1jb2xvcjogIzMzMzMzMyAhaW1wb3J0YW50OwogICAgICBib3JkZXItdG9wLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgdG9wOiAyMnB4OwogICAgICBsZWZ0OiAtMjBweDsKICAgICAgcmlnaHQ6IGF1dG87IH0gfQovKiBsaW5lIDUyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fa2V5c3Ryb2tlcy5zY3NzICovCi5rZXlzdHJva2UsCmtiZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2VkZWRlZDsKICBib3JkZXItY29sb3I6ICNkYmRiZGI7CiAgY29sb3I6ICMyMjIyMjI7CiAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKICBib3JkZXItd2lkdGg6IDFweDsKICBtYXJnaW46IDA7CiAgZm9udC1mYW1pbHk6ICJDb25zb2xhcyIsICJNZW5sbyIsICJDb3VyaWVyIiwgbW9ub3NwYWNlOwogIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgcGFkZGluZzogMC4xMjVyZW0gMC4yNXJlbSAwOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogM3B4OwogIGJvcmRlci1yYWRpdXM6IDNweDsgfQoKLyogbGluZSA4NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2xhYmVscy5zY3NzICovCi5sYWJlbCB7CiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwgIkhlbHZldGljYSIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICBsaW5lLWhlaWdodDogMTsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgbWFyZ2luLWJvdHRvbTogaW5oZXJpdDsKICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbSAwLjM3NXJlbTsKICBmb250LXNpemU6IDAuNjg3NXJlbTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA4Y2JhOwogIGNvbG9yOiB3aGl0ZTsgfQogIC8qIGxpbmUgOTIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19sYWJlbHMuc2NzcyAqLwogIC5sYWJlbC5yYWRpdXMgewogICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7IH0KICAvKiBsaW5lIDkzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fbGFiZWxzLnNjc3MgKi8KICAubGFiZWwucm91bmQgewogICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAxMDAwcHg7CiAgICBib3JkZXItcmFkaXVzOiAxMDAwcHg7IH0KICAvKiBsaW5lIDk1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fbGFiZWxzLnNjc3MgKi8KICAubGFiZWwuYWxlcnQgewogICAgYmFja2dyb3VuZC1jb2xvcjogI2YwNDEyNDsKICAgIGNvbG9yOiB3aGl0ZTsgfQogIC8qIGxpbmUgOTYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19sYWJlbHMuc2NzcyAqLwogIC5sYWJlbC5zdWNjZXNzIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICM1ZTg5NDk7CiAgICBjb2xvcjogd2hpdGU7IH0KICAvKiBsaW5lIDk3LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fbGFiZWxzLnNjc3MgKi8KICAubGFiZWwuc2Vjb25kYXJ5IHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNlN2U3ZTc7CiAgICBjb2xvcjogIzMzMzMzMzsgfQoKLyogbGluZSAxNCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX21hZ2VsbGFuLnNjc3MgKi8KW2RhdGEtbWFnZWxsYW4tZXhwZWRpdGlvbl0gewogIGJhY2tncm91bmQ6IHdoaXRlOwogIHotaW5kZXg6IDUwOwogIG1pbi13aWR0aDogMTAwJTsKICBwYWRkaW5nOiAxMHB4OyB9CiAgLyogbGluZSAyMCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX21hZ2VsbGFuLnNjc3MgKi8KICBbZGF0YS1tYWdlbGxhbi1leHBlZGl0aW9uXSAuc3ViLW5hdiB7CiAgICBtYXJnaW4tYm90dG9tOiAwOyB9CiAgICAvKiBsaW5lIDIyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fbWFnZWxsYW4uc2NzcyAqLwogICAgW2RhdGEtbWFnZWxsYW4tZXhwZWRpdGlvbl0gLnN1Yi1uYXYgZGQgewogICAgICBtYXJnaW4tYm90dG9tOiAwOyB9CiAgICAvKiBsaW5lIDIzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fbWFnZWxsYW4uc2NzcyAqLwogICAgW2RhdGEtbWFnZWxsYW4tZXhwZWRpdGlvbl0gLnN1Yi1uYXYgLmFjdGl2ZSB7CiAgICAgIGxpbmUtaGVpZ2h0OiAxLjhlbTsgfQoKQC13ZWJraXQta2V5ZnJhbWVzIHJvdGF0ZSB7CiAgLyogbGluZSA0NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29yYml0LnNjc3MgKi8KICBmcm9tIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH0KCiAgLyogbGluZSA0NiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29yYml0LnNjc3MgKi8KICB0byB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH0gfQoKQC1tb3ota2V5ZnJhbWVzIHJvdGF0ZSB7CiAgLyogbGluZSA0OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29yYml0LnNjc3MgKi8KICBmcm9tIHsKICAgIC1tb3otdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH0KCiAgLyogbGluZSA1MCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29yYml0LnNjc3MgKi8KICB0byB7CiAgICAtbW96LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH0gfQoKQC1vLWtleWZyYW1lcyByb3RhdGUgewogIC8qIGxpbmUgNTMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vcmJpdC5zY3NzICovCiAgZnJvbSB7CiAgICAtby10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfQoKICAvKiBsaW5lIDU0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fb3JiaXQuc2NzcyAqLwogIHRvIHsKICAgIC1vLXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH0gfQoKQGtleWZyYW1lcyByb3RhdGUgewogIC8qIGxpbmUgNTgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vcmJpdC5zY3NzICovCiAgZnJvbSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfQoKICAvKiBsaW5lIDU5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fb3JiaXQuc2NzcyAqLwogIHRvIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH0gfQoKLyogT3JiaXQgR3JhY2VmdWwgTG9hZGluZyAqLwovKiBsaW5lIDYzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fb3JiaXQuc2NzcyAqLwouc2xpZGVzaG93LXdyYXBwZXIgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsgfQogIC8qIGxpbmUgNjYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vcmJpdC5zY3NzICovCiAgLnNsaWRlc2hvdy13cmFwcGVyIHVsIHsKICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgIG1hcmdpbjogMDsgfQogICAgLyogbGluZSA3MywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29yYml0LnNjc3MgKi8KICAgIC5zbGlkZXNob3ctd3JhcHBlciB1bCBsaSwKICAgIC5zbGlkZXNob3ctd3JhcHBlciB1bCBsaSAub3JiaXQtY2FwdGlvbiB7CiAgICAgIGRpc3BsYXk6IG5vbmU7IH0KICAgIC8qIGxpbmUgNzYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vcmJpdC5zY3NzICovCiAgICAuc2xpZGVzaG93LXdyYXBwZXIgdWwgbGk6Zmlyc3QtY2hpbGQgewogICAgICBkaXNwbGF5OiBibG9jazsgfQogIC8qIGxpbmUgNzksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vcmJpdC5zY3NzICovCiAgLnNsaWRlc2hvdy13cmFwcGVyIC5vcmJpdC1jb250YWluZXIgewogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0KICAgIC8qIGxpbmUgODIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vcmJpdC5zY3NzICovCiAgICAuc2xpZGVzaG93LXdyYXBwZXIgLm9yYml0LWNvbnRhaW5lciBsaSB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOyB9CiAgICAgIC8qIGxpbmUgODQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vcmJpdC5zY3NzICovCiAgICAgIC5zbGlkZXNob3ctd3JhcHBlciAub3JiaXQtY29udGFpbmVyIGxpIC5vcmJpdC1jYXB0aW9uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsgfQoKLyogbGluZSA5MCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29yYml0LnNjc3MgKi8KLnByZWxvYWRlciB7CiAgZGlzcGxheTogYmxvY2s7CiAgd2lkdGg6IDQwcHg7CiAgaGVpZ2h0OiA0MHB4OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDUwJTsKICBsZWZ0OiA1MCU7CiAgbWFyZ2luLXRvcDogLTIwcHg7CiAgbWFyZ2luLWxlZnQ6IC0yMHB4OwogIGJvcmRlcjogc29saWQgM3B4OwogIGJvcmRlci1jb2xvcjogIzU1NSAjZmZmOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMTAwMHB4OwogIGJvcmRlci1yYWRpdXM6IDEwMDBweDsKICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiByb3RhdGU7CiAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IDEuNXM7CiAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTsKICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjsKICAtbW96LWFuaW1hdGlvbi1uYW1lOiByb3RhdGU7CiAgLW1vei1hbmltYXRpb24tZHVyYXRpb246IDEuNXM7CiAgLW1vei1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTsKICAtbW96LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjsKICAtby1hbmltYXRpb24tbmFtZTogcm90YXRlOwogIC1vLWFuaW1hdGlvbi1kdXJhdGlvbjogMS41czsKICAtby1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTsKICAtby1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7CiAgYW5pbWF0aW9uLW5hbWU6IHJvdGF0ZTsKICBhbmltYXRpb24tZHVyYXRpb246IDEuNXM7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyOyB9CgovKiBsaW5lIDEyMiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29yYml0LnNjc3MgKi8KLm9yYml0LWNvbnRhaW5lciB7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICB3aWR0aDogMTAwJTsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgYmFja2dyb3VuZDogbm9uZTsgfQogIC8qIGxpbmUgMTI4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fb3JiaXQuc2NzcyAqLwogIC5vcmJpdC1jb250YWluZXIgLm9yYml0LXNsaWRlcy1jb250YWluZXIgewogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH0KICAgIC8qIGxpbmUgMTM0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fb3JiaXQuc2NzcyAqLwogICAgLm9yYml0LWNvbnRhaW5lciAub3JiaXQtc2xpZGVzLWNvbnRhaW5lciBpbWcgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgbWF4LXdpZHRoOiAxMDAlOyB9CiAgICAvKiBsaW5lIDEzNiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29yYml0LnNjc3MgKi8KICAgIC5vcmJpdC1jb250YWluZXIgLm9yYml0LXNsaWRlcy1jb250YWluZXIgPiAqIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBtYXJnaW4tbGVmdDogMTAwJTsgfQogICAgICAvKiBsaW5lIDE0NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29yYml0LnNjc3MgKi8KICAgICAgLm9yYml0LWNvbnRhaW5lciAub3JiaXQtc2xpZGVzLWNvbnRhaW5lciA+ICo6Zmlyc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1sZWZ0OiAwJTsgfQogICAgICAvKiBsaW5lIDE1NiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29yYml0LnNjc3MgKi8KICAgICAgLm9yYml0LWNvbnRhaW5lciAub3JiaXQtc2xpZGVzLWNvbnRhaW5lciA+ICogLm9yYml0LWNhcHRpb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg1MSwgNTEsIDUxLCAwLjgpOwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiAxMHB4IDE0cHg7CiAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTsgfQogIC8qIGxpbmUgMTczLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fb3JiaXQuc2NzcyAqLwogIC5vcmJpdC1jb250YWluZXIgLm9yYml0LXNsaWRlLW51bWJlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDEwcHg7CiAgICBsZWZ0OiAxMHB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHdoaXRlOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwKTsKICAgIHotaW5kZXg6IDEwOyB9CiAgICAvKiBsaW5lIDE3OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29yYml0LnNjc3MgKi8KICAgIC5vcmJpdC1jb250YWluZXIgLm9yYml0LXNsaWRlLW51bWJlciBzcGFuIHsKICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgcGFkZGluZzogMC4zMTI1cmVtOyB9CiAgLyogbGluZSAxODQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vcmJpdC5zY3NzICovCiAgLm9yYml0LWNvbnRhaW5lciAub3JiaXQtdGltZXIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAxMnB4OwogICAgcmlnaHQ6IDEwcHg7CiAgICBoZWlnaHQ6IDZweDsKICAgIHdpZHRoOiAxMDBweDsKICAgIHotaW5kZXg6IDEwOyB9CiAgICAvKiBsaW5lIDE5MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29yYml0LnNjc3MgKi8KICAgIC5vcmJpdC1jb250YWluZXIgLm9yYml0LXRpbWVyIC5vcmJpdC1wcm9ncmVzcyB7CiAgICAgIGhlaWdodDogM3B4OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMCU7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgcmlnaHQ6IDIwcHg7CiAgICAgIHRvcDogNXB4OyB9CiAgICAvKiBsaW5lIDIwNCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29yYml0LnNjc3MgKi8KICAgIC5vcmJpdC1jb250YWluZXIgLm9yYml0LXRpbWVyID4gc3BhbiB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwcHg7CiAgICAgIHJpZ2h0OiAwOwogICAgICB3aWR0aDogMTFweDsKICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICBib3JkZXI6IHNvbGlkIDRweCAjZmZmOwogICAgICBib3JkZXItdG9wOiBub25lOwogICAgICBib3JkZXItYm90dG9tOiBub25lOyB9CiAgICAvKiBsaW5lIDIxOCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29yYml0LnNjc3MgKi8KICAgIC5vcmJpdC1jb250YWluZXIgLm9yYml0LXRpbWVyLnBhdXNlZCA+IHNwYW4gewogICAgICByaWdodDogLTRweDsKICAgICAgdG9wOiAwcHg7CiAgICAgIHdpZHRoOiAxMXB4OwogICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgIGJvcmRlcjogaW5zZXQgOHB4OwogICAgICBib3JkZXItcmlnaHQtc3R5bGU6IHNvbGlkOwogICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICNmZmY7IH0KICAgICAgLyogbGluZSAyMjYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vcmJpdC5zY3NzICovCiAgICAgIC5vcmJpdC1jb250YWluZXIgLm9yYml0LXRpbWVyLnBhdXNlZCA+IHNwYW4uZGFyayB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjMzMzOyB9CiAgLyogbGluZSAyMzUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vcmJpdC5zY3NzICovCiAgLm9yYml0LWNvbnRhaW5lcjpob3ZlciAub3JiaXQtdGltZXIgPiBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOyB9CiAgLyogbGluZSAyMzksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vcmJpdC5zY3NzICovCiAgLm9yYml0LWNvbnRhaW5lciAub3JiaXQtcHJldiwKICAub3JiaXQtY29udGFpbmVyIC5vcmJpdC1uZXh0IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNDUlOwogICAgbWFyZ2luLXRvcDogLTI1cHg7CiAgICB3aWR0aDogMzZweDsKICAgIGhlaWdodDogNjBweDsKICAgIGxpbmUtaGVpZ2h0OiA1MHB4OwogICAgY29sb3I6IHdoaXRlOwogICAgdGV4dC1pbmRlbnQ6IC05OTk5cHggIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwOyB9CiAgICAvKiBsaW5lIDI1MCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29yYml0LnNjc3MgKi8KICAgIC5vcmJpdC1jb250YWluZXIgLm9yYml0LXByZXY6aG92ZXIsCiAgICAub3JiaXQtY29udGFpbmVyIC5vcmJpdC1uZXh0OmhvdmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjMpOyB9CiAgICAvKiBsaW5lIDI1NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29yYml0LnNjc3MgKi8KICAgIC5vcmJpdC1jb250YWluZXIgLm9yYml0LXByZXYgPiBzcGFuLAogICAgLm9yYml0LWNvbnRhaW5lciAub3JiaXQtbmV4dCA+IHNwYW4gewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogNTAlOwogICAgICBtYXJnaW4tdG9wOiAtMTBweDsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIHdpZHRoOiAwOwogICAgICBoZWlnaHQ6IDA7CiAgICAgIGJvcmRlcjogaW5zZXQgMTBweDsgfQogIC8qIGxpbmUgMjY0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fb3JiaXQuc2NzcyAqLwogIC5vcmJpdC1jb250YWluZXIgLm9yYml0LXByZXYgewogICAgbGVmdDogMDsgfQogICAgLyogbGluZSAyNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vcmJpdC5zY3NzICovCiAgICAub3JiaXQtY29udGFpbmVyIC5vcmJpdC1wcmV2ID4gc3BhbiB7CiAgICAgIGJvcmRlci1yaWdodC1zdHlsZTogc29saWQ7CiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogd2hpdGU7IH0KICAgIC8qIGxpbmUgMjcwLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fb3JiaXQuc2NzcyAqLwogICAgLm9yYml0LWNvbnRhaW5lciAub3JiaXQtcHJldjpob3ZlciA+IHNwYW4gewogICAgICBib3JkZXItcmlnaHQtY29sb3I6IHdoaXRlOyB9CiAgLyogbGluZSAyNzQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vcmJpdC5zY3NzICovCiAgLm9yYml0LWNvbnRhaW5lciAub3JiaXQtbmV4dCB7CiAgICByaWdodDogMDsgfQogICAgLyogbGluZSAyNzUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vcmJpdC5zY3NzICovCiAgICAub3JiaXQtY29udGFpbmVyIC5vcmJpdC1uZXh0ID4gc3BhbiB7CiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIGJvcmRlci1sZWZ0LXN0eWxlOiBzb2xpZDsKICAgICAgYm9yZGVyLWxlZnQtY29sb3I6IHdoaXRlOwogICAgICBsZWZ0OiA1MCU7CiAgICAgIG1hcmdpbi1sZWZ0OiAtNHB4OyB9CiAgICAvKiBsaW5lIDI4MiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29yYml0LnNjc3MgKi8KICAgIC5vcmJpdC1jb250YWluZXIgLm9yYml0LW5leHQ6aG92ZXIgPiBzcGFuIHsKICAgICAgYm9yZGVyLWxlZnQtY29sb3I6IHdoaXRlOyB9CgovKiBsaW5lIDI4OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29yYml0LnNjc3MgKi8KLm9yYml0LWJ1bGxldHMtY29udGFpbmVyIHsKICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KCi8qIGxpbmUgMjg5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fb3JiaXQuc2NzcyAqLwoub3JiaXQtYnVsbGV0cyB7CiAgbWFyZ2luOiAwIGF1dG8gMzBweCBhdXRvOwogIG92ZXJmbG93OiBoaWRkZW47CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHRvcDogMTBweDsKICBmbG9hdDogbm9uZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9CiAgLyogbGluZSAyOTgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vcmJpdC5zY3NzICovCiAgLm9yYml0LWJ1bGxldHMgbGkgewogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogMC41NjI1cmVtOwogICAgaGVpZ2h0OiAwLjU2MjVyZW07CiAgICBiYWNrZ3JvdW5kOiAjY2NjY2NjOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBtYXJnaW4tcmlnaHQ6IDZweDsKICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMTAwMHB4OwogICAgYm9yZGVyLXJhZGl1czogMTAwMHB4OyB9CiAgICAvKiBsaW5lIDMwNywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29yYml0LnNjc3MgKi8KICAgIC5vcmJpdC1idWxsZXRzIGxpLmFjdGl2ZSB7CiAgICAgIGJhY2tncm91bmQ6ICM5OTk5OTk7IH0KICAgIC8qIGxpbmUgMzExLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fb3JiaXQuc2NzcyAqLwogICAgLm9yYml0LWJ1bGxldHMgbGk6bGFzdC1jaGlsZCB7CiAgICAgIG1hcmdpbi1yaWdodDogMDsgfQoKLyogbGluZSAzMTgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vcmJpdC5zY3NzICovCi50b3VjaCAub3JiaXQtY29udGFpbmVyIC5vcmJpdC1wcmV2LAoudG91Y2ggLm9yYml0LWNvbnRhaW5lciAub3JiaXQtbmV4dCB7CiAgZGlzcGxheTogbm9uZTsgfQovKiBsaW5lIDMyMSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29yYml0LnNjc3MgKi8KLnRvdWNoIC5vcmJpdC1idWxsZXRzIHsKICBkaXNwbGF5OiBub25lOyB9CgpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQwLjA2M2VtKSB7CiAgLyogbGluZSAzMzAsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vcmJpdC5zY3NzICovCiAgLnRvdWNoIC5vcmJpdC1jb250YWluZXIgLm9yYml0LXByZXYsCiAgLnRvdWNoIC5vcmJpdC1jb250YWluZXIgLm9yYml0LW5leHQgewogICAgZGlzcGxheTogaW5oZXJpdDsgfQogIC8qIGxpbmUgMzMzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fb3JiaXQuc2NzcyAqLwogIC50b3VjaCAub3JiaXQtYnVsbGV0cyB7CiAgICBkaXNwbGF5OiBibG9jazsgfSB9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDBlbSkgewogIC8qIGxpbmUgMzQwLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fb3JiaXQuc2NzcyAqLwogIC5vcmJpdC1zdGFjay1vbi1zbWFsbCAub3JiaXQtc2xpZGVzLWNvbnRhaW5lciB7CiAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsgfQogIC8qIGxpbmUgMzQxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fb3JiaXQuc2NzcyAqLwogIC5vcmJpdC1zdGFjay1vbi1zbWFsbCAub3JiaXQtc2xpZGVzLWNvbnRhaW5lciA+ICogewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWFyZ2luLWxlZnQ6IDAlICFpbXBvcnRhbnQ7IH0KICAvKiBsaW5lIDM0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29yYml0LnNjc3MgKi8KICAub3JiaXQtc3RhY2stb24tc21hbGwgLm9yYml0LXRpbWVyLAogIC5vcmJpdC1zdGFjay1vbi1zbWFsbCAub3JiaXQtbmV4dCwKICAub3JiaXQtc3RhY2stb24tc21hbGwgLm9yYml0LXByZXYsCiAgLm9yYml0LXN0YWNrLW9uLXNtYWxsIC5vcmJpdC1idWxsZXRzIHsKICAgIGRpc3BsYXk6IG5vbmU7IH0gfQovKiBsaW5lIDEzMiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3BhZ2luYXRpb24uc2NzcyAqLwp1bC5wYWdpbmF0aW9uIHsKICBkaXNwbGF5OiBibG9jazsKICBoZWlnaHQ6IDEuNXJlbTsKICBtYXJnaW4tbGVmdDogLTAuMzEyNXJlbTsgfQogIC8qIGxpbmUgOTUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19wYWdpbmF0aW9uLnNjc3MgKi8KICB1bC5wYWdpbmF0aW9uIGxpIHsKICAgIGhlaWdodDogMS41cmVtOwogICAgY29sb3I6ICMyMjIyMjI7CiAgICBmb250LXNpemU6IDAuODc1cmVtOwogICAgbWFyZ2luLWxlZnQ6IDAuMzEyNXJlbTsgfQogICAgLyogbGluZSAxMDEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19wYWdpbmF0aW9uLnNjc3MgKi8KICAgIHVsLnBhZ2luYXRpb24gbGkgYSB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwYWRkaW5nOiAwLjA2MjVyZW0gMC42MjVyZW0gMC4wNjI1cmVtOwogICAgICBjb2xvcjogIzk5OTk5OTsKICAgICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsgfQogICAgLyogbGluZSAxMDksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19wYWdpbmF0aW9uLnNjc3MgKi8KICAgIHVsLnBhZ2luYXRpb24gbGk6aG92ZXIgYSwKICAgIHVsLnBhZ2luYXRpb24gbGkgYTpmb2N1cyB7CiAgICAgIGJhY2tncm91bmQ6ICNlNmU2ZTY7IH0KICAgIC8qIGxpbmUgNDcsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19wYWdpbmF0aW9uLnNjc3MgKi8KICAgIHVsLnBhZ2luYXRpb24gbGkudW5hdmFpbGFibGUgYSB7CiAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgY29sb3I6ICM5OTk5OTk7IH0KICAgIC8qIGxpbmUgNTIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19wYWdpbmF0aW9uLnNjc3MgKi8KICAgIHVsLnBhZ2luYXRpb24gbGkudW5hdmFpbGFibGU6aG92ZXIgYSwgdWwucGFnaW5hdGlvbiBsaS51bmF2YWlsYWJsZSBhOmZvY3VzIHsKICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IH0KICAgIC8qIGxpbmUgNjAsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19wYWdpbmF0aW9uLnNjc3MgKi8KICAgIHVsLnBhZ2luYXRpb24gbGkuY3VycmVudCBhIHsKICAgICAgYmFja2dyb3VuZDogIzAwOGNiYTsKICAgICAgY29sb3I6IHdoaXRlOwogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgY3Vyc29yOiBkZWZhdWx0OyB9CiAgICAgIC8qIGxpbmUgNjcsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19wYWdpbmF0aW9uLnNjc3MgKi8KICAgICAgdWwucGFnaW5hdGlvbiBsaS5jdXJyZW50IGE6aG92ZXIsIHVsLnBhZ2luYXRpb24gbGkuY3VycmVudCBhOmZvY3VzIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMDA4Y2JhOyB9CiAgLyogbGluZSAxMTksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19wYWdpbmF0aW9uLnNjc3MgKi8KICB1bC5wYWdpbmF0aW9uIGxpIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgZGlzcGxheTogYmxvY2s7IH0KCi8qIFBhZ2luYXRpb24gY2VudHJlZCB3cmFwcGVyICovCi8qIGxpbmUgMTM3LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fcGFnaW5hdGlvbi5zY3NzICovCi5wYWdpbmF0aW9uLWNlbnRlcmVkIHsKICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KICAvKiBsaW5lIDExOSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3BhZ2luYXRpb24uc2NzcyAqLwogIC5wYWdpbmF0aW9uLWNlbnRlcmVkIHVsLnBhZ2luYXRpb24gbGkgewogICAgZmxvYXQ6IG5vbmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH0KCi8qIFBhbmVscyAqLwovKiBsaW5lIDcwLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fcGFuZWxzLnNjc3MgKi8KLnBhbmVsLCBwIGNvZGUsIHVsI2Rvd25sb2FkcyA+IGxpIHsKICBib3JkZXItc3R5bGU6IHNvbGlkOwogIGJvcmRlci13aWR0aDogMXB4OwogIGJvcmRlci1jb2xvcjogI2Q5ZDlkOTsKICBtYXJnaW4tYm90dG9tOiAxLjI1cmVtOwogIHBhZGRpbmc6IDEuMjVyZW07CiAgYmFja2dyb3VuZDogI2YyZjJmMjsgfQogIC8qIGxpbmUgNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19wYW5lbHMuc2NzcyAqLwogIC5wYW5lbCA+IDpmaXJzdC1jaGlsZCwgcCBjb2RlID4gOmZpcnN0LWNoaWxkLCB1bCNkb3dubG9hZHMgPiBsaSA+IDpmaXJzdC1jaGlsZCB7CiAgICBtYXJnaW4tdG9wOiAwOyB9CiAgLyogbGluZSA0OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3BhbmVscy5zY3NzICovCiAgLnBhbmVsID4gOmxhc3QtY2hpbGQsIHAgY29kZSA+IDpsYXN0LWNoaWxkLCB1bCNkb3dubG9hZHMgPiBsaSA+IDpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1ib3R0b206IDA7IH0KICAvKiBsaW5lIDU0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fcGFuZWxzLnNjc3MgKi8KICAucGFuZWwgaDEsIHAgY29kZSBoMSwgdWwjZG93bmxvYWRzID4gbGkgaDEsIC5wYW5lbCBoMiwgcCBjb2RlIGgyLCB1bCNkb3dubG9hZHMgPiBsaSBoMiwgLnBhbmVsIGgzLCBwIGNvZGUgaDMsIHVsI2Rvd25sb2FkcyA+IGxpIGgzLCAucGFuZWwgaDQsIHAgY29kZSBoNCwgdWwjZG93bmxvYWRzID4gbGkgaDQsIC5wYW5lbCBoNSwgcCBjb2RlIGg1LCB1bCNkb3dubG9hZHMgPiBsaSBoNSwgLnBhbmVsIGg2LCBwIGNvZGUgaDYsIHVsI2Rvd25sb2FkcyA+IGxpIGg2LCAucGFuZWwgcCwgcCBjb2RlIHAsIHVsI2Rvd25sb2FkcyA+IGxpIHAgewogICAgY29sb3I6ICMzMzMzMzM7IH0KICAvKiBsaW5lIDU4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fcGFuZWxzLnNjc3MgKi8KICAucGFuZWwgaDEsIHAgY29kZSBoMSwgdWwjZG93bmxvYWRzID4gbGkgaDEsIC5wYW5lbCBoMiwgcCBjb2RlIGgyLCB1bCNkb3dubG9hZHMgPiBsaSBoMiwgLnBhbmVsIGgzLCBwIGNvZGUgaDMsIHVsI2Rvd25sb2FkcyA+IGxpIGgzLCAucGFuZWwgaDQsIHAgY29kZSBoNCwgdWwjZG93bmxvYWRzID4gbGkgaDQsIC5wYW5lbCBoNSwgcCBjb2RlIGg1LCB1bCNkb3dubG9hZHMgPiBsaSBoNSwgLnBhbmVsIGg2LCBwIGNvZGUgaDYsIHVsI2Rvd25sb2FkcyA+IGxpIGg2IHsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgbWFyZ2luLWJvdHRvbTogMC42MjVyZW07IH0KICAgIC8qIGxpbmUgNjAsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19wYW5lbHMuc2NzcyAqLwogICAgLnBhbmVsIGgxLnN1YmhlYWRlciwgcCBjb2RlIGgxLnN1YmhlYWRlciwgdWwjZG93bmxvYWRzID4gbGkgaDEuc3ViaGVhZGVyLCAucGFuZWwgaDIuc3ViaGVhZGVyLCBwIGNvZGUgaDIuc3ViaGVhZGVyLCB1bCNkb3dubG9hZHMgPiBsaSBoMi5zdWJoZWFkZXIsIC5wYW5lbCBoMy5zdWJoZWFkZXIsIHAgY29kZSBoMy5zdWJoZWFkZXIsIHVsI2Rvd25sb2FkcyA+IGxpIGgzLnN1YmhlYWRlciwgLnBhbmVsIGg0LnN1YmhlYWRlciwgcCBjb2RlIGg0LnN1YmhlYWRlciwgdWwjZG93bmxvYWRzID4gbGkgaDQuc3ViaGVhZGVyLCAucGFuZWwgaDUuc3ViaGVhZGVyLCBwIGNvZGUgaDUuc3ViaGVhZGVyLCB1bCNkb3dubG9hZHMgPiBsaSBoNS5zdWJoZWFkZXIsIC5wYW5lbCBoNi5zdWJoZWFkZXIsIHAgY29kZSBoNi5zdWJoZWFkZXIsIHVsI2Rvd25sb2FkcyA+IGxpIGg2LnN1YmhlYWRlciB7CiAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IH0KICAvKiBsaW5lIDcyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fcGFuZWxzLnNjc3MgKi8KICAucGFuZWwuY2FsbG91dCwgcCBjb2RlLmNhbGxvdXQsIHVsI2Rvd25sb2FkcyA+IGxpLmNhbGxvdXQgewogICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKICAgIGJvcmRlci13aWR0aDogMXB4OwogICAgYm9yZGVyLWNvbG9yOiAjYmFlZWZmOwogICAgbWFyZ2luLWJvdHRvbTogMS4yNXJlbTsKICAgIHBhZGRpbmc6IDEuMjVyZW07CiAgICBiYWNrZ3JvdW5kOiAjZWRmYmZmOyB9CiAgICAvKiBsaW5lIDQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fcGFuZWxzLnNjc3MgKi8KICAgIC5wYW5lbC5jYWxsb3V0ID4gOmZpcnN0LWNoaWxkLCBwIGNvZGUuY2FsbG91dCA+IDpmaXJzdC1jaGlsZCwgdWwjZG93bmxvYWRzID4gbGkuY2FsbG91dCA+IDpmaXJzdC1jaGlsZCB7CiAgICAgIG1hcmdpbi10b3A6IDA7IH0KICAgIC8qIGxpbmUgNDksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19wYW5lbHMuc2NzcyAqLwogICAgLnBhbmVsLmNhbGxvdXQgPiA6bGFzdC1jaGlsZCwgcCBjb2RlLmNhbGxvdXQgPiA6bGFzdC1jaGlsZCwgdWwjZG93bmxvYWRzID4gbGkuY2FsbG91dCA+IDpsYXN0LWNoaWxkIHsKICAgICAgbWFyZ2luLWJvdHRvbTogMDsgfQogICAgLyogbGluZSA1NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3BhbmVscy5zY3NzICovCiAgICAucGFuZWwuY2FsbG91dCBoMSwgcCBjb2RlLmNhbGxvdXQgaDEsIHVsI2Rvd25sb2FkcyA+IGxpLmNhbGxvdXQgaDEsIC5wYW5lbC5jYWxsb3V0IGgyLCBwIGNvZGUuY2FsbG91dCBoMiwgdWwjZG93bmxvYWRzID4gbGkuY2FsbG91dCBoMiwgLnBhbmVsLmNhbGxvdXQgaDMsIHAgY29kZS5jYWxsb3V0IGgzLCB1bCNkb3dubG9hZHMgPiBsaS5jYWxsb3V0IGgzLCAucGFuZWwuY2FsbG91dCBoNCwgcCBjb2RlLmNhbGxvdXQgaDQsIHVsI2Rvd25sb2FkcyA+IGxpLmNhbGxvdXQgaDQsIC5wYW5lbC5jYWxsb3V0IGg1LCBwIGNvZGUuY2FsbG91dCBoNSwgdWwjZG93bmxvYWRzID4gbGkuY2FsbG91dCBoNSwgLnBhbmVsLmNhbGxvdXQgaDYsIHAgY29kZS5jYWxsb3V0IGg2LCB1bCNkb3dubG9hZHMgPiBsaS5jYWxsb3V0IGg2LCAucGFuZWwuY2FsbG91dCBwLCBwIGNvZGUuY2FsbG91dCBwLCB1bCNkb3dubG9hZHMgPiBsaS5jYWxsb3V0IHAgewogICAgICBjb2xvcjogIzMzMzMzMzsgfQogICAgLyogbGluZSA1OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3BhbmVscy5zY3NzICovCiAgICAucGFuZWwuY2FsbG91dCBoMSwgcCBjb2RlLmNhbGxvdXQgaDEsIHVsI2Rvd25sb2FkcyA+IGxpLmNhbGxvdXQgaDEsIC5wYW5lbC5jYWxsb3V0IGgyLCBwIGNvZGUuY2FsbG91dCBoMiwgdWwjZG93bmxvYWRzID4gbGkuY2FsbG91dCBoMiwgLnBhbmVsLmNhbGxvdXQgaDMsIHAgY29kZS5jYWxsb3V0IGgzLCB1bCNkb3dubG9hZHMgPiBsaS5jYWxsb3V0IGgzLCAucGFuZWwuY2FsbG91dCBoNCwgcCBjb2RlLmNhbGxvdXQgaDQsIHVsI2Rvd25sb2FkcyA+IGxpLmNhbGxvdXQgaDQsIC5wYW5lbC5jYWxsb3V0IGg1LCBwIGNvZGUuY2FsbG91dCBoNSwgdWwjZG93bmxvYWRzID4gbGkuY2FsbG91dCBoNSwgLnBhbmVsLmNhbGxvdXQgaDYsIHAgY29kZS5jYWxsb3V0IGg2LCB1bCNkb3dubG9hZHMgPiBsaS5jYWxsb3V0IGg2IHsKICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgIG1hcmdpbi1ib3R0b206IDAuNjI1cmVtOyB9CiAgICAgIC8qIGxpbmUgNjAsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19wYW5lbHMuc2NzcyAqLwogICAgICAucGFuZWwuY2FsbG91dCBoMS5zdWJoZWFkZXIsIHAgY29kZS5jYWxsb3V0IGgxLnN1YmhlYWRlciwgdWwjZG93bmxvYWRzID4gbGkuY2FsbG91dCBoMS5zdWJoZWFkZXIsIC5wYW5lbC5jYWxsb3V0IGgyLnN1YmhlYWRlciwgcCBjb2RlLmNhbGxvdXQgaDIuc3ViaGVhZGVyLCB1bCNkb3dubG9hZHMgPiBsaS5jYWxsb3V0IGgyLnN1YmhlYWRlciwgLnBhbmVsLmNhbGxvdXQgaDMuc3ViaGVhZGVyLCBwIGNvZGUuY2FsbG91dCBoMy5zdWJoZWFkZXIsIHVsI2Rvd25sb2FkcyA+IGxpLmNhbGxvdXQgaDMuc3ViaGVhZGVyLCAucGFuZWwuY2FsbG91dCBoNC5zdWJoZWFkZXIsIHAgY29kZS5jYWxsb3V0IGg0LnN1YmhlYWRlciwgdWwjZG93bmxvYWRzID4gbGkuY2FsbG91dCBoNC5zdWJoZWFkZXIsIC5wYW5lbC5jYWxsb3V0IGg1LnN1YmhlYWRlciwgcCBjb2RlLmNhbGxvdXQgaDUuc3ViaGVhZGVyLCB1bCNkb3dubG9hZHMgPiBsaS5jYWxsb3V0IGg1LnN1YmhlYWRlciwgLnBhbmVsLmNhbGxvdXQgaDYuc3ViaGVhZGVyLCBwIGNvZGUuY2FsbG91dCBoNi5zdWJoZWFkZXIsIHVsI2Rvd25sb2FkcyA+IGxpLmNhbGxvdXQgaDYuc3ViaGVhZGVyIHsKICAgICAgICBsaW5lLWhlaWdodDogMS40OyB9CiAgICAvKiBsaW5lIDc0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fcGFuZWxzLnNjc3MgKi8KICAgIC5wYW5lbC5jYWxsb3V0IGEsIHAgY29kZS5jYWxsb3V0IGEsIHVsI2Rvd25sb2FkcyA+IGxpLmNhbGxvdXQgYSB7CiAgICAgIGNvbG9yOiAjMDA4Y2JhOyB9CiAgLyogbGluZSA3OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3BhbmVscy5zY3NzICovCiAgLnBhbmVsLnJhZGl1cywgcCBjb2RlLnJhZGl1cywgdWwjZG93bmxvYWRzID4gbGkucmFkaXVzIHsKICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogM3B4OwogICAgYm9yZGVyLXJhZGl1czogM3B4OyB9CgovKiBQcmljaW5nIFRhYmxlcyAqLwovKiBsaW5lIDEzNSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3ByaWNpbmctdGFibGVzLnNjc3MgKi8KLnByaWNpbmctdGFibGUgewogIGJvcmRlcjogc29saWQgMXB4ICNkZGRkZGQ7CiAgbWFyZ2luLWxlZnQ6IDA7CiAgbWFyZ2luLWJvdHRvbTogMS4yNXJlbTsgfQogIC8qIGxpbmUgNjQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19wcmljaW5nLXRhYmxlcy5zY3NzICovCiAgLnByaWNpbmctdGFibGUgKiB7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgbGluZS1oZWlnaHQ6IDE7IH0KICAvKiBsaW5lIDEzOCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3ByaWNpbmctdGFibGVzLnNjc3MgKi8KICAucHJpY2luZy10YWJsZSAudGl0bGUgewogICAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzMzMzsKICAgIHBhZGRpbmc6IDAuOTM3NXJlbSAxLjI1cmVtOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgY29sb3I6ICNlZWVlZWU7CiAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgZm9udC1zaXplOiAxcmVtOwogICAgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSIsICJIZWx2ZXRpY2EiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOyB9CiAgLyogbGluZSAxMzksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19wcmljaW5nLXRhYmxlcy5zY3NzICovCiAgLnByaWNpbmctdGFibGUgLnByaWNlIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmNmY2ZjY7CiAgICBwYWRkaW5nOiAwLjkzNzVyZW0gMS4yNXJlbTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGNvbG9yOiAjMzMzMzMzOwogICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgIGZvbnQtc2l6ZTogMnJlbTsKICAgIGZvbnQtZmFtaWx5OiAiSGVsdmV0aWNhIE5ldWUiLCAiSGVsdmV0aWNhIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsgfQogIC8qIGxpbmUgMTQwLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fcHJpY2luZy10YWJsZXMuc2NzcyAqLwogIC5wcmljaW5nLXRhYmxlIC5kZXNjcmlwdGlvbiB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgIHBhZGRpbmc6IDAuOTM3NXJlbTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGNvbG9yOiAjNzc3Nzc3OwogICAgZm9udC1zaXplOiAwLjc1cmVtOwogICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICBib3JkZXItYm90dG9tOiBkb3R0ZWQgMXB4ICNkZGRkZGQ7IH0KICAvKiBsaW5lIDE0MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3ByaWNpbmctdGFibGVzLnNjc3MgKi8KICAucHJpY2luZy10YWJsZSAuYnVsbGV0LWl0ZW0gewogICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiAgICBwYWRkaW5nOiAwLjkzNzVyZW07CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBjb2xvcjogIzMzMzMzMzsKICAgIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgYm9yZGVyLWJvdHRvbTogZG90dGVkIDFweCAjZGRkZGRkOyB9CiAgLyogbGluZSAxNDIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19wcmljaW5nLXRhYmxlcy5zY3NzICovCiAgLnByaWNpbmctdGFibGUgLmN0YS1idXR0b24gewogICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBwYWRkaW5nOiAxLjI1cmVtIDEuMjVyZW0gMDsgfQoKLyogUHJvZ3Jlc3MgQmFyICovCi8qIGxpbmUgNTMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19wcm9ncmVzcy1iYXJzLnNjc3MgKi8KLnByb2dyZXNzIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjZmNmY2OwogIGhlaWdodDogMS41NjI1cmVtOwogIGJvcmRlcjogMXB4IHNvbGlkICNjY2NjY2M7CiAgcGFkZGluZzogMC4xMjVyZW07CiAgbWFyZ2luLWJvdHRvbTogMC42MjVyZW07IH0KICAvKiBsaW5lIDU3LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fcHJvZ3Jlc3MtYmFycy5zY3NzICovCiAgLnByb2dyZXNzIC5tZXRlciB7CiAgICBiYWNrZ3JvdW5kOiAjMDA4Y2JhOwogICAgaGVpZ2h0OiAxMDAlOwogICAgZGlzcGxheTogYmxvY2s7IH0KICAvKiBsaW5lIDYwLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fcHJvZ3Jlc3MtYmFycy5zY3NzICovCiAgLnByb2dyZXNzLnNlY29uZGFyeSAubWV0ZXIgewogICAgYmFja2dyb3VuZDogI2U3ZTdlNzsKICAgIGhlaWdodDogMTAwJTsKICAgIGRpc3BsYXk6IGJsb2NrOyB9CiAgLyogbGluZSA2MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Byb2dyZXNzLWJhcnMuc2NzcyAqLwogIC5wcm9ncmVzcy5zdWNjZXNzIC5tZXRlciB7CiAgICBiYWNrZ3JvdW5kOiAjNWU4OTQ5OwogICAgaGVpZ2h0OiAxMDAlOwogICAgZGlzcGxheTogYmxvY2s7IH0KICAvKiBsaW5lIDYyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fcHJvZ3Jlc3MtYmFycy5zY3NzICovCiAgLnByb2dyZXNzLmFsZXJ0IC5tZXRlciB7CiAgICBiYWNrZ3JvdW5kOiAjZjA0MTI0OwogICAgaGVpZ2h0OiAxMDAlOwogICAgZGlzcGxheTogYmxvY2s7IH0KICAvKiBsaW5lIDY0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fcHJvZ3Jlc3MtYmFycy5zY3NzICovCiAgLnByb2dyZXNzLnJhZGl1cyB7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsgfQogICAgLyogbGluZSA2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Byb2dyZXNzLWJhcnMuc2NzcyAqLwogICAgLnByb2dyZXNzLnJhZGl1cyAubWV0ZXIgewogICAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgYm9yZGVyLXJhZGl1czogMnB4OyB9CiAgLyogbGluZSA2OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Byb2dyZXNzLWJhcnMuc2NzcyAqLwogIC5wcm9ncmVzcy5yb3VuZCB7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDEwMDBweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwMDBweDsgfQogICAgLyogbGluZSA2OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Byb2dyZXNzLWJhcnMuc2NzcyAqLwogICAgLnByb2dyZXNzLnJvdW5kIC5tZXRlciB7CiAgICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OyB9CgovKiBsaW5lIDEzOCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3JldmVhbC5zY3NzICovCi5yZXZlYWwtbW9kYWwtYmcgewogIHBvc2l0aW9uOiBmaXhlZDsKICBoZWlnaHQ6IDEwMCU7CiAgd2lkdGg6IDEwMCU7CiAgYmFja2dyb3VuZDogYmxhY2s7CiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjQ1KTsKICB6LWluZGV4OiA5ODsKICBkaXNwbGF5OiBub25lOwogIHRvcDogMDsKICBsZWZ0OiAwOyB9CgovKiBsaW5lIDE0MCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3JldmVhbC5zY3NzICovCi5yZXZlYWwtbW9kYWwgewogIHZpc2liaWxpdHk6IGhpZGRlbjsKICBkaXNwbGF5OiBub25lOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBsZWZ0OiA1MCU7CiAgei1pbmRleDogOTk7CiAgaGVpZ2h0OiBhdXRvOwogIG1hcmdpbi1sZWZ0OiAtNDAlOwogIHdpZHRoOiA4MCU7CiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiAgcGFkZGluZzogMS4yNXJlbTsKICBib3JkZXI6IHNvbGlkIDFweCAjNjY2NjY2OwogIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDEwcHggcmdiYSgwLCAwLCAwLCAwLjQpOwogIGJveC1zaGFkb3c6IDAgMCAxMHB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICB0b3A6IDUwcHg7IH0KICAvKiBsaW5lIDcxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fcmV2ZWFsLnNjc3MgKi8KICAucmV2ZWFsLW1vZGFsIC5jb2x1bW4sCiAgLnJldmVhbC1tb2RhbCAuY29sdW1ucywKICAucmV2ZWFsLW1vZGFsICNzdGFjay1saXN0IGxpLAogICNzdGFjay1saXN0IC5yZXZlYWwtbW9kYWwgbGksCiAgLnJldmVhbC1tb2RhbCAjdGhlbWUtbGlzdCBsaSA+IGRpdiwKICAjdGhlbWUtbGlzdCAucmV2ZWFsLW1vZGFsIGxpID4gZGl2LAogIC5yZXZlYWwtbW9kYWwgdWwjZG9jcy1saXN0ID4gbGkgewogICAgbWluLXdpZHRoOiAwOyB9CiAgLyogbGluZSA3NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3JldmVhbC5zY3NzICovCiAgLnJldmVhbC1tb2RhbCA+IDpmaXJzdC1jaGlsZCB7CiAgICBtYXJnaW4tdG9wOiAwOyB9CiAgLyogbGluZSA3NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3JldmVhbC5zY3NzICovCiAgLnJldmVhbC1tb2RhbCA+IDpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1ib3R0b206IDA7IH0KICAvKiBsaW5lIDE0NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3JldmVhbC5zY3NzICovCiAgLnJldmVhbC1tb2RhbCAuY2xvc2UtcmV2ZWFsLW1vZGFsIHsKICAgIGZvbnQtc2l6ZTogMS4zNzVyZW07CiAgICBsaW5lLWhlaWdodDogMTsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMC41cmVtOwogICAgcmlnaHQ6IDAuNjg3NXJlbTsKICAgIGNvbG9yOiAjYWFhYWFhOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7IH0KCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDAuMDYzZW0pIHsKICAvKiBsaW5lIDE0OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3JldmVhbC5zY3NzICovCiAgLnJldmVhbC1tb2RhbCB7CiAgICBwYWRkaW5nOiAxLjg3NXJlbTsKICAgIHRvcDogNi4yNXJlbTsgfQogICAgLyogbGluZSAxNTIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19yZXZlYWwuc2NzcyAqLwogICAgLnJldmVhbC1tb2RhbC50aW55IHsKICAgICAgbWFyZ2luLWxlZnQ6IC0xNSU7CiAgICAgIHdpZHRoOiAzMCU7IH0KICAgIC8qIGxpbmUgMTUzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fcmV2ZWFsLnNjc3MgKi8KICAgIC5yZXZlYWwtbW9kYWwuc21hbGwgewogICAgICBtYXJnaW4tbGVmdDogLTIwJTsKICAgICAgd2lkdGg6IDQwJTsgfQogICAgLyogbGluZSAxNTQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19yZXZlYWwuc2NzcyAqLwogICAgLnJldmVhbC1tb2RhbC5tZWRpdW0gewogICAgICBtYXJnaW4tbGVmdDogLTMwJTsKICAgICAgd2lkdGg6IDYwJTsgfQogICAgLyogbGluZSAxNTUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19yZXZlYWwuc2NzcyAqLwogICAgLnJldmVhbC1tb2RhbC5sYXJnZSB7CiAgICAgIG1hcmdpbi1sZWZ0OiAtMzUlOwogICAgICB3aWR0aDogNzAlOyB9CiAgICAvKiBsaW5lIDE1NiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3JldmVhbC5zY3NzICovCiAgICAucmV2ZWFsLW1vZGFsLnhsYXJnZSB7CiAgICAgIG1hcmdpbi1sZWZ0OiAtNDcuNSU7CiAgICAgIHdpZHRoOiA5NSU7IH0gfQpAbWVkaWEgcHJpbnQgewogIC8qIGxpbmUgMTYyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fcmV2ZWFsLnNjc3MgKi8KICAucmV2ZWFsLW1vZGFsIHsKICAgIGJhY2tncm91bmQ6ICNmZmYgIWltcG9ydGFudDsgfSB9Ci8qIGxpbmUgODEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19zaWRlLW5hdi5zY3NzICovCi5zaWRlLW5hdiB7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDAuODc1cmVtIDA7CiAgbGlzdC1zdHlsZS10eXBlOiBub25lOwogIGxpc3Qtc3R5bGUtcG9zaXRpb246IGluc2lkZTsKICBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwgIkhlbHZldGljYSIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7IH0KICAvKiBsaW5lIDU0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc2lkZS1uYXYuc2NzcyAqLwogIC5zaWRlLW5hdiBsaSB7CiAgICBtYXJnaW46IDAgMCAwLjQzNzVyZW0gMDsKICAgIGZvbnQtc2l6ZTogMC44NzVyZW07IH0KICAgIC8qIGxpbmUgNTgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19zaWRlLW5hdi5zY3NzICovCiAgICAuc2lkZS1uYXYgbGkgYSB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBjb2xvcjogIzAwOGNiYTsgfQogICAgLyogbGluZSA2MywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3NpZGUtbmF2LnNjc3MgKi8KICAgIC5zaWRlLW5hdiBsaS5hY3RpdmUgPiBhOmZpcnN0LWNoaWxkIHsKICAgICAgY29sb3I6ICM0ZDRkNGQ7CiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgIGZvbnQtZmFtaWx5OiAiSGVsdmV0aWNhIE5ldWUiLCAiSGVsdmV0aWNhIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsgfQogICAgLyogbGluZSA2OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3NpZGUtbmF2LnNjc3MgKi8KICAgIC5zaWRlLW5hdiBsaS5kaXZpZGVyIHsKICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkOwogICAgICBoZWlnaHQ6IDA7CiAgICAgIHBhZGRpbmc6IDA7CiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICAgIGJvcmRlci10b3AtY29sb3I6ICNlNmU2ZTY7IH0KCi8qIGxpbmUgMTY5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3BsaXQtYnV0dG9ucy5zY3NzICovCi5zcGxpdC5idXR0b24gewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBwYWRkaW5nLXJpZ2h0OiA1LjA2MjVyZW07IH0KICAvKiBsaW5lIDcyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3BsaXQtYnV0dG9ucy5zY3NzICovCiAgLnNwbGl0LmJ1dHRvbiBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgaGVpZ2h0OiAxMDAlOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgcmlnaHQ6IDA7CiAgICB0b3A6IDA7CiAgICBib3JkZXItbGVmdDogc29saWQgMXB4OyB9CiAgICAvKiBsaW5lIDgxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3BsaXQtYnV0dG9ucy5zY3NzICovCiAgICAuc3BsaXQuYnV0dG9uIHNwYW46YmVmb3JlIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBjb250ZW50OiAiIjsKICAgICAgd2lkdGg6IDA7CiAgICAgIGhlaWdodDogMDsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIGJvcmRlci1zdHlsZTogaW5zZXQ7CiAgICAgIHRvcDogNTAlOwogICAgICBsZWZ0OiA1MCU7IH0KICAgIC8qIGxpbmUgOTMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19zcGxpdC1idXR0b25zLnNjc3MgKi8KICAgIC5zcGxpdC5idXR0b24gc3BhbjphY3RpdmUgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSk7IH0KICAvKiBsaW5lIDk5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3BsaXQtYnV0dG9ucy5zY3NzICovCiAgLnNwbGl0LmJ1dHRvbiBzcGFuIHsKICAgIGJvcmRlci1sZWZ0LWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7IH0KICAvKiBsaW5lIDEzNiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3NwbGl0LWJ1dHRvbnMuc2NzcyAqLwogIC5zcGxpdC5idXR0b24gc3BhbiB7CiAgICB3aWR0aDogMy4wOTM3NXJlbTsgfQogICAgLyogbGluZSAxMzcsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19zcGxpdC1idXR0b25zLnNjc3MgKi8KICAgIC5zcGxpdC5idXR0b24gc3BhbjpiZWZvcmUgewogICAgICBib3JkZXItdG9wLXN0eWxlOiBzb2xpZDsKICAgICAgYm9yZGVyLXdpZHRoOiAwLjM3NXJlbTsKICAgICAgdG9wOiA0OCU7CiAgICAgIG1hcmdpbi1sZWZ0OiAtMC4zNzVyZW07IH0KICAvKiBsaW5lIDE2MiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3NwbGl0LWJ1dHRvbnMuc2NzcyAqLwogIC5zcGxpdC5idXR0b24gc3BhbjpiZWZvcmUgewogICAgYm9yZGVyLWNvbG9yOiB3aGl0ZSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDsgfQogIC8qIGxpbmUgOTksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19zcGxpdC1idXR0b25zLnNjc3MgKi8KICAuc3BsaXQuYnV0dG9uLnNlY29uZGFyeSBzcGFuIHsKICAgIGJvcmRlci1sZWZ0LWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7IH0KICAvKiBsaW5lIDE2MiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3NwbGl0LWJ1dHRvbnMuc2NzcyAqLwogIC5zcGxpdC5idXR0b24uc2Vjb25kYXJ5IHNwYW46YmVmb3JlIHsKICAgIGJvcmRlci1jb2xvcjogd2hpdGUgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7IH0KICAvKiBsaW5lIDk5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3BsaXQtYnV0dG9ucy5zY3NzICovCiAgLnNwbGl0LmJ1dHRvbi5hbGVydCBzcGFuIHsKICAgIGJvcmRlci1sZWZ0LWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7IH0KICAvKiBsaW5lIDk5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3BsaXQtYnV0dG9ucy5zY3NzICovCiAgLnNwbGl0LmJ1dHRvbi5zdWNjZXNzIHNwYW4gewogICAgYm9yZGVyLWxlZnQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsgfQogIC8qIGxpbmUgMTc1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3BsaXQtYnV0dG9ucy5zY3NzICovCiAgLnNwbGl0LmJ1dHRvbi50aW55IHsKICAgIHBhZGRpbmctcmlnaHQ6IDMuNzVyZW07IH0KICAgIC8qIGxpbmUgMTA4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3BsaXQtYnV0dG9ucy5zY3NzICovCiAgICAuc3BsaXQuYnV0dG9uLnRpbnkgc3BhbiB7CiAgICAgIHdpZHRoOiAyLjI1cmVtOyB9CiAgICAgIC8qIGxpbmUgMTA5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3BsaXQtYnV0dG9ucy5zY3NzICovCiAgICAgIC5zcGxpdC5idXR0b24udGlueSBzcGFuOmJlZm9yZSB7CiAgICAgICAgYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7CiAgICAgICAgYm9yZGVyLXdpZHRoOiAwLjM3NXJlbTsKICAgICAgICB0b3A6IDQ4JTsKICAgICAgICBtYXJnaW4tbGVmdDogLTAuMzc1cmVtOyB9CiAgLyogbGluZSAxNzYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19zcGxpdC1idXR0b25zLnNjc3MgKi8KICAuc3BsaXQuYnV0dG9uLnNtYWxsIHsKICAgIHBhZGRpbmctcmlnaHQ6IDQuMzc1cmVtOyB9CiAgICAvKiBsaW5lIDEyMiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3NwbGl0LWJ1dHRvbnMuc2NzcyAqLwogICAgLnNwbGl0LmJ1dHRvbi5zbWFsbCBzcGFuIHsKICAgICAgd2lkdGg6IDIuNjI1cmVtOyB9CiAgICAgIC8qIGxpbmUgMTIzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3BsaXQtYnV0dG9ucy5zY3NzICovCiAgICAgIC5zcGxpdC5idXR0b24uc21hbGwgc3BhbjpiZWZvcmUgewogICAgICAgIGJvcmRlci10b3Atc3R5bGU6IHNvbGlkOwogICAgICAgIGJvcmRlci13aWR0aDogMC40Mzc1cmVtOwogICAgICAgIHRvcDogNDglOwogICAgICAgIG1hcmdpbi1sZWZ0OiAtMC4zNzVyZW07IH0KICAvKiBsaW5lIDE3NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3NwbGl0LWJ1dHRvbnMuc2NzcyAqLwogIC5zcGxpdC5idXR0b24ubGFyZ2UgewogICAgcGFkZGluZy1yaWdodDogNS41cmVtOyB9CiAgICAvKiBsaW5lIDE1MCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3NwbGl0LWJ1dHRvbnMuc2NzcyAqLwogICAgLnNwbGl0LmJ1dHRvbi5sYXJnZSBzcGFuIHsKICAgICAgd2lkdGg6IDMuNDM3NXJlbTsgfQogICAgICAvKiBsaW5lIDE1MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3NwbGl0LWJ1dHRvbnMuc2NzcyAqLwogICAgICAuc3BsaXQuYnV0dG9uLmxhcmdlIHNwYW46YmVmb3JlIHsKICAgICAgICBib3JkZXItdG9wLXN0eWxlOiBzb2xpZDsKICAgICAgICBib3JkZXItd2lkdGg6IDAuMzEyNXJlbTsKICAgICAgICB0b3A6IDQ4JTsKICAgICAgICBtYXJnaW4tbGVmdDogLTAuMzc1cmVtOyB9CiAgLyogbGluZSAxNzgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19zcGxpdC1idXR0b25zLnNjc3MgKi8KICAuc3BsaXQuYnV0dG9uLmV4cGFuZCB7CiAgICBwYWRkaW5nLWxlZnQ6IDJyZW07IH0KICAvKiBsaW5lIDE2MiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3NwbGl0LWJ1dHRvbnMuc2NzcyAqLwogIC5zcGxpdC5idXR0b24uc2Vjb25kYXJ5IHNwYW46YmVmb3JlIHsKICAgIGJvcmRlci1jb2xvcjogIzMzMzMzMyB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDsgfQogIC8qIGxpbmUgMTgyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3BsaXQtYnV0dG9ucy5zY3NzICovCiAgLnNwbGl0LmJ1dHRvbi5yYWRpdXMgc3BhbiB7CiAgICAtbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6IDNweDsKICAgIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDogM3B4OwogICAgLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4OwogICAgLXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4OwogICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDNweDsKICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzcHg7IH0KICAvKiBsaW5lIDE4MywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3NwbGl0LWJ1dHRvbnMuc2NzcyAqLwogIC5zcGxpdC5idXR0b24ucm91bmQgc3BhbiB7CiAgICAtbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6IDEwMDBweDsKICAgIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDogMTAwMHB4OwogICAgLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMTAwMHB4OwogICAgLXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMTAwMHB4OwogICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDEwMDBweDsKICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAxMDAwcHg7IH0KCi8qIGxpbmUgMTE2LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3ViLW5hdi5zY3NzICovCi5zdWItbmF2IHsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogYXV0bzsKICBvdmVyZmxvdzogaGlkZGVuOwogIG1hcmdpbjogLTAuMjVyZW0gMCAxLjEyNXJlbTsKICBwYWRkaW5nLXRvcDogMC4yNXJlbTsKICBtYXJnaW4tcmlnaHQ6IDA7CiAgbWFyZ2luLWxlZnQ6IC0wLjc1cmVtOyB9CiAgLyogbGluZSA2MywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3N1Yi1uYXYuc2NzcyAqLwogIC5zdWItbmF2IGR0IHsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH0KICAvKiBsaW5lIDY5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3ViLW5hdi5zY3NzICovCiAgLnN1Yi1uYXYgZHQsCiAgLnN1Yi1uYXYgZGQsCiAgLnN1Yi1uYXYgbGkgewogICAgZmxvYXQ6IGxlZnQ7CiAgICBkaXNwbGF5OiBpbmxpbmU7CiAgICBtYXJnaW4tbGVmdDogMXJlbTsKICAgIG1hcmdpbi1ib3R0b206IDAuNjI1cmVtOwogICAgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSIsICJIZWx2ZXRpY2EiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgICBjb2xvcjogIzk5OTk5OTsgfQogICAgLyogbGluZSA3OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3N1Yi1uYXYuc2NzcyAqLwogICAgLnN1Yi1uYXYgZHQgYSwKICAgIC5zdWItbmF2IGRkIGEsCiAgICAuc3ViLW5hdiBsaSBhIHsKICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICBjb2xvcjogIzk5OTk5OTsgfQogICAgICAvKiBsaW5lIDgyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3ViLW5hdi5zY3NzICovCiAgICAgIC5zdWItbmF2IGR0IGE6aG92ZXIsCiAgICAgIC5zdWItbmF2IGRkIGE6aG92ZXIsCiAgICAgIC5zdWItbmF2IGxpIGE6aG92ZXIgewogICAgICAgIGNvbG9yOiAjMDA3OWExOyB9CiAgICAvKiBsaW5lIDg3LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3ViLW5hdi5zY3NzICovCiAgICAuc3ViLW5hdiBkdC5hY3RpdmUgYSwKICAgIC5zdWItbmF2IGRkLmFjdGl2ZSBhLAogICAgLnN1Yi1uYXYgbGkuYWN0aXZlIGEgewogICAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICBiYWNrZ3JvdW5kOiAjMDA4Y2JhOwogICAgICBwYWRkaW5nOiAwLjE4NzVyZW0gMXJlbTsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICBjb2xvcjogd2hpdGU7IH0KICAgICAgLyogbGluZSA5NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3N1Yi1uYXYuc2NzcyAqLwogICAgICAuc3ViLW5hdiBkdC5hY3RpdmUgYTpob3ZlciwKICAgICAgLnN1Yi1uYXYgZGQuYWN0aXZlIGE6aG92ZXIsCiAgICAgIC5zdWItbmF2IGxpLmFjdGl2ZSBhOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMDA3OWExOyB9CgovKiBsaW5lIDI4NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3N3aXRjaC5zY3NzICovCmRpdi5zd2l0Y2ggewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBwYWRkaW5nOiAwOwogIGRpc3BsYXk6IGJsb2NrOwogIG92ZXJmbG93OiBoaWRkZW47CiAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKICBib3JkZXItd2lkdGg6IDFweDsKICBtYXJnaW4tYm90dG9tOiAxLjI1cmVtOwogIGhlaWdodDogMi4yNXJlbTsKICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICBib3JkZXItY29sb3I6ICNjY2NjY2M7IH0KICAvKiBsaW5lIDcxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3dpdGNoLnNjc3MgKi8KICBkaXYuc3dpdGNoIGxhYmVsIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGxlZnQ6IDA7CiAgICB6LWluZGV4OiAyOwogICAgZmxvYXQ6IGxlZnQ7CiAgICB3aWR0aDogNTAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgbWFyZ2luOiAwOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC4xcyBlYXNlLW91dDsKICAgIC1tb3otdHJhbnNpdGlvbjogYWxsIDAuMXMgZWFzZS1vdXQ7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4xcyBlYXNlLW91dDsgfQogIC8qIGxpbmUgODgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19zd2l0Y2guc2NzcyAqLwogIGRpdi5zd2l0Y2ggaW5wdXQgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgei1pbmRleDogMzsKICAgIG9wYWNpdHk6IDA7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIC1tb3otYXBwZWFyYW5jZTogbm9uZTsgfQogICAgLyogbGluZSA5OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3N3aXRjaC5zY3NzICovCiAgICBkaXYuc3dpdGNoIGlucHV0OmhvdmVyLCBkaXYuc3dpdGNoIGlucHV0OmZvY3VzIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOyB9CiAgLyogbGluZSAxMDQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19zd2l0Y2guc2NzcyAqLwogIGRpdi5zd2l0Y2ggc3BhbjpsYXN0LWNoaWxkIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogLTFweDsKICAgIGxlZnQ6IC0xcHg7CiAgICB6LWluZGV4OiAxOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBwYWRkaW5nOiAwOwogICAgYm9yZGVyLXdpZHRoOiAxcHg7CiAgICBib3JkZXItc3R5bGU6IHNvbGlkOwogICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC4xcyBlYXNlLW91dDsKICAgIC1tb3otdHJhbnNpdGlvbjogYWxsIDAuMXMgZWFzZS1vdXQ7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4xcyBlYXNlLW91dDsgfQogIC8qIGxpbmUgMTE5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3dpdGNoLnNjc3MgKi8KICBkaXYuc3dpdGNoIGlucHV0Om5vdCg6Y2hlY2tlZCkgKyBsYWJlbCB7CiAgICBvcGFjaXR5OiAwOyB9CiAgLyogbGluZSAxMjIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19zd2l0Y2guc2NzcyAqLwogIGRpdi5zd2l0Y2ggaW5wdXQ6Y2hlY2tlZCB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KICAvKiBsaW5lIDEyMywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3N3aXRjaC5zY3NzICovCiAgZGl2LnN3aXRjaCBpbnB1dCB7CiAgICBsZWZ0OiAwOwogICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgfQogIC8qIGxpbmUgMTI3LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3dpdGNoLnNjc3MgKi8KICBkaXYuc3dpdGNoIGlucHV0OmZpcnN0LW9mLXR5cGUgKyBsYWJlbCwKICBkaXYuc3dpdGNoIGlucHV0OmZpcnN0LW9mLXR5cGUgKyBzcGFuICsgbGFiZWwgewogICAgbGVmdDogLTUwJTsgfQogIC8qIGxpbmUgMTI5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3dpdGNoLnNjc3MgKi8KICBkaXYuc3dpdGNoIGlucHV0OmZpcnN0LW9mLXR5cGU6Y2hlY2tlZCArIGxhYmVsLAogIGRpdi5zd2l0Y2ggaW5wdXQ6Zmlyc3Qtb2YtdHlwZTpjaGVja2VkICsgc3BhbiArIGxhYmVsIHsKICAgIGxlZnQ6IDAlOyB9CiAgLyogbGluZSAxMzMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19zd2l0Y2guc2NzcyAqLwogIGRpdi5zd2l0Y2ggaW5wdXQ6bGFzdC1vZi10eXBlICsgbGFiZWwsCiAgZGl2LnN3aXRjaCBpbnB1dDpsYXN0LW9mLXR5cGUgKyBzcGFuICsgbGFiZWwgewogICAgcmlnaHQ6IC01MCU7CiAgICBsZWZ0OiBhdXRvOwogICAgdGV4dC1hbGlnbjogcmlnaHQ7IH0KICAvKiBsaW5lIDEzNSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3N3aXRjaC5zY3NzICovCiAgZGl2LnN3aXRjaCBpbnB1dDpsYXN0LW9mLXR5cGU6Y2hlY2tlZCArIGxhYmVsLAogIGRpdi5zd2l0Y2ggaW5wdXQ6bGFzdC1vZi10eXBlOmNoZWNrZWQgKyBzcGFuICsgbGFiZWwgewogICAgcmlnaHQ6IDAlOwogICAgbGVmdDogYXV0bzsgfQogIC8qIGxpbmUgMTM4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3dpdGNoLnNjc3MgKi8KICBkaXYuc3dpdGNoIHNwYW4uY3VzdG9tIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfQogIC8qIGxpbmUgMTUwLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3dpdGNoLnNjc3MgKi8KICBmb3JtLmN1c3RvbSBkaXYuc3dpdGNoIC5oaWRkZW4tZmllbGQgewogICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOyB9CiAgLyogbGluZSAxNjksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19zd2l0Y2guc2NzcyAqLwogIGRpdi5zd2l0Y2ggbGFiZWwgewogICAgcGFkZGluZzogMDsKICAgIGxpbmUtaGVpZ2h0OiAyLjNyZW07CiAgICBmb250LXNpemU6IDAuODc1cmVtOyB9CiAgLyogbGluZSAxNzcsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19zd2l0Y2guc2NzcyAqLwogIGRpdi5zd2l0Y2ggaW5wdXQ6Zmlyc3Qtb2YtdHlwZTpjaGVja2VkIH4gc3BhbjpsYXN0LWNoaWxkIHsKICAgIGxlZnQ6IDEwMCU7CiAgICBtYXJnaW4tbGVmdDogLTIuMTg3NXJlbTsgfQogIC8qIGxpbmUgMTgzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3dpdGNoLnNjc3MgKi8KICBkaXYuc3dpdGNoIHNwYW46bGFzdC1jaGlsZCB7CiAgICB3aWR0aDogMi4yNXJlbTsKICAgIGhlaWdodDogMi4yNXJlbTsgfQogIC8qIGxpbmUgMjA4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3dpdGNoLnNjc3MgKi8KICBkaXYuc3dpdGNoIHNwYW46bGFzdC1jaGlsZCB7CiAgICBib3JkZXItY29sb3I6ICNiM2IzYjM7CiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgIGJhY2tncm91bmQ6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgd2hpdGUgMCUsICNmMmYyZjIgMTAwJSk7CiAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIHdoaXRlIDAlLCAjZjJmMmYyIDEwMCUpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2ZmZmZmZiAwJSwgI2YyZjJmMiAxMDAlKTsKICAgIC13ZWJraXQtYm94LXNoYWRvdzogMnB4IDAgMTBweCAwIHJnYmEoMCwgMCwgMCwgMC4wNyksIDEwMDBweCAwIDAgMTAwMHB4ICNlNmVmZTIsIC0ycHggMCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAwLjA3KSwgLTEwMDBweCAwIDAgMTAwMHB4IHdoaXRlc21va2U7CiAgICBib3gtc2hhZG93OiAycHggMCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAwLjA3KSwgMTAwMHB4IDAgMCA5ODBweCAjZTZlZmUyLCAtMnB4IDAgMTBweCAwIHJnYmEoMCwgMCwgMCwgMC4wNyksIC0xMDAwcHggMCAwIDEwMDBweCB3aGl0ZXNtb2tlOyB9CiAgLyogbGluZSAyMzIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19zd2l0Y2guc2NzcyAqLwogIGRpdi5zd2l0Y2g6aG92ZXIgc3BhbjpsYXN0LWNoaWxkLCBkaXYuc3dpdGNoOmZvY3VzIHNwYW46bGFzdC1jaGlsZCB7CiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgIGJhY2tncm91bmQ6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgd2hpdGUgMCUsICNlNmU2ZTYgMTAwJSk7CiAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIHdoaXRlIDAlLCAjZTZlNmU2IDEwMCUpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2ZmZmZmZiAwJSwgI2U2ZTZlNiAxMDAlKTsgfQogIC8qIGxpbmUgMjQyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3dpdGNoLnNjc3MgKi8KICBkaXYuc3dpdGNoOmFjdGl2ZSB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgfQogIC8qIGxpbmUgMjkxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3dpdGNoLnNjc3MgKi8KICBkaXYuc3dpdGNoLmxhcmdlIHsKICAgIGhlaWdodDogMi43NXJlbTsgfQogICAgLyogbGluZSAxNjksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19zd2l0Y2guc2NzcyAqLwogICAgZGl2LnN3aXRjaC5sYXJnZSBsYWJlbCB7CiAgICAgIHBhZGRpbmc6IDA7CiAgICAgIGxpbmUtaGVpZ2h0OiAyLjNyZW07CiAgICAgIGZvbnQtc2l6ZTogMS4wNjI1cmVtOyB9CiAgICAvKiBsaW5lIDE3NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3N3aXRjaC5zY3NzICovCiAgICBkaXYuc3dpdGNoLmxhcmdlIGlucHV0OmZpcnN0LW9mLXR5cGU6Y2hlY2tlZCB+IHNwYW46bGFzdC1jaGlsZCB7CiAgICAgIGxlZnQ6IDEwMCU7CiAgICAgIG1hcmdpbi1sZWZ0OiAtMi42ODc1cmVtOyB9CiAgICAvKiBsaW5lIDE4MywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3N3aXRjaC5zY3NzICovCiAgICBkaXYuc3dpdGNoLmxhcmdlIHNwYW46bGFzdC1jaGlsZCB7CiAgICAgIHdpZHRoOiAyLjc1cmVtOwogICAgICBoZWlnaHQ6IDIuNzVyZW07IH0KICAvKiBsaW5lIDI5NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3N3aXRjaC5zY3NzICovCiAgZGl2LnN3aXRjaC5zbWFsbCB7CiAgICBoZWlnaHQ6IDEuNzVyZW07IH0KICAgIC8qIGxpbmUgMTY5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3dpdGNoLnNjc3MgKi8KICAgIGRpdi5zd2l0Y2guc21hbGwgbGFiZWwgewogICAgICBwYWRkaW5nOiAwOwogICAgICBsaW5lLWhlaWdodDogMi4xcmVtOwogICAgICBmb250LXNpemU6IDAuNzVyZW07IH0KICAgIC8qIGxpbmUgMTc3LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3dpdGNoLnNjc3MgKi8KICAgIGRpdi5zd2l0Y2guc21hbGwgaW5wdXQ6Zmlyc3Qtb2YtdHlwZTpjaGVja2VkIH4gc3BhbjpsYXN0LWNoaWxkIHsKICAgICAgbGVmdDogMTAwJTsKICAgICAgbWFyZ2luLWxlZnQ6IC0xLjY4NzVyZW07IH0KICAgIC8qIGxpbmUgMTgzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3dpdGNoLnNjc3MgKi8KICAgIGRpdi5zd2l0Y2guc21hbGwgc3BhbjpsYXN0LWNoaWxkIHsKICAgICAgd2lkdGg6IDEuNzVyZW07CiAgICAgIGhlaWdodDogMS43NXJlbTsgfQogIC8qIGxpbmUgMjk3LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3dpdGNoLnNjc3MgKi8KICBkaXYuc3dpdGNoLnRpbnkgewogICAgaGVpZ2h0OiAxLjM3NXJlbTsgfQogICAgLyogbGluZSAxNjksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19zd2l0Y2guc2NzcyAqLwogICAgZGl2LnN3aXRjaC50aW55IGxhYmVsIHsKICAgICAgcGFkZGluZzogMDsKICAgICAgbGluZS1oZWlnaHQ6IDEuOXJlbTsKICAgICAgZm9udC1zaXplOiAwLjY4NzVyZW07IH0KICAgIC8qIGxpbmUgMTc3LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3dpdGNoLnNjc3MgKi8KICAgIGRpdi5zd2l0Y2gudGlueSBpbnB1dDpmaXJzdC1vZi10eXBlOmNoZWNrZWQgfiBzcGFuOmxhc3QtY2hpbGQgewogICAgICBsZWZ0OiAxMDAlOwogICAgICBtYXJnaW4tbGVmdDogLTEuMzEyNXJlbTsgfQogICAgLyogbGluZSAxODMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19zd2l0Y2guc2NzcyAqLwogICAgZGl2LnN3aXRjaC50aW55IHNwYW46bGFzdC1jaGlsZCB7CiAgICAgIHdpZHRoOiAxLjM3NXJlbTsKICAgICAgaGVpZ2h0OiAxLjM3NXJlbTsgfQogIC8qIGxpbmUgMzAwLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3dpdGNoLnNjc3MgKi8KICBkaXYuc3dpdGNoLnJhZGl1cyB7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsgfQogICAgLyogbGluZSAzMDEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19zd2l0Y2guc2NzcyAqLwogICAgZGl2LnN3aXRjaC5yYWRpdXMgc3BhbjpsYXN0LWNoaWxkIHsKICAgICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsgfQogIC8qIGxpbmUgMzA1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fc3dpdGNoLnNjc3MgKi8KICBkaXYuc3dpdGNoLnJvdW5kIHsKICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMTAwMHB4OwogICAgYm9yZGVyLXJhZGl1czogMTAwMHB4OyB9CiAgICAvKiBsaW5lIDMwNiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3N3aXRjaC5zY3NzICovCiAgICBkaXYuc3dpdGNoLnJvdW5kIHNwYW46bGFzdC1jaGlsZCB7CiAgICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OyB9CiAgICAvKiBsaW5lIDMwNywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3N3aXRjaC5zY3NzICovCiAgICBkaXYuc3dpdGNoLnJvdW5kIGxhYmVsIHsKICAgICAgcGFkZGluZzogMCAwLjU2MjVyZW07IH0KCkAtd2Via2l0LWtleWZyYW1lcyB3ZWJraXRTaWJsaW5nQnVnZml4IHsKICAvKiBsaW5lIDMxMiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3N3aXRjaC5zY3NzICovCiAgZnJvbSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH0KCiAgLyogbGluZSAzMTIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19zd2l0Y2guc2NzcyAqLwogIHRvIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfSB9CgovKiBsaW5lIDg5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdGFibGVzLnNjc3MgKi8KdGFibGUgewogIGJhY2tncm91bmQ6IHdoaXRlOwogIG1hcmdpbi1ib3R0b206IDEuMjVyZW07CiAgYm9yZGVyOiBzb2xpZCAxcHggI2RkZGRkZDsgfQogIC8qIGxpbmUgNTEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190YWJsZXMuc2NzcyAqLwogIHRhYmxlIHRoZWFkLAogIHRhYmxlIHRmb290IHsKICAgIGJhY2tncm91bmQ6IHdoaXRlc21va2U7CiAgICBmb250LXdlaWdodDogYm9sZDsgfQogICAgLyogbGluZSA1NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RhYmxlcy5zY3NzICovCiAgICB0YWJsZSB0aGVhZCB0ciB0aCwKICAgIHRhYmxlIHRoZWFkIHRyIHRkLAogICAgdGFibGUgdGZvb3QgdHIgdGgsCiAgICB0YWJsZSB0Zm9vdCB0ciB0ZCB7CiAgICAgIHBhZGRpbmc6IDAuNXJlbSAwLjYyNXJlbSAwLjYyNXJlbTsKICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTsKICAgICAgY29sb3I6ICMyMjIyMjI7CiAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KICAvKiBsaW5lIDY4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdGFibGVzLnNjc3MgKi8KICB0YWJsZSB0ciB0aCwKICB0YWJsZSB0ciB0ZCB7CiAgICBwYWRkaW5nOiAwLjU2MjVyZW0gMC42MjVyZW07CiAgICBmb250LXNpemU6IDAuODc1cmVtOwogICAgY29sb3I6ICMyMjIyMjI7IH0KICAvKiBsaW5lIDc2LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdGFibGVzLnNjc3MgKi8KICB0YWJsZSB0ci5ldmVuLCB0YWJsZSB0ci5hbHQsIHRhYmxlIHRyOm50aC1vZi10eXBlKGV2ZW4pIHsKICAgIGJhY2tncm91bmQ6ICNmOWY5Zjk7IH0KICAvKiBsaW5lIDgzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdGFibGVzLnNjc3MgKi8KICB0YWJsZSB0aGVhZCB0ciB0aCwKICB0YWJsZSB0Zm9vdCB0ciB0aCwKICB0YWJsZSB0Ym9keSB0ciB0ZCwKICB0YWJsZSB0ciB0ZCwKICB0YWJsZSB0Zm9vdCB0ciB0ZCB7CiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsOwogICAgbGluZS1oZWlnaHQ6IDEuMTI1cmVtOyB9CgovKiBsaW5lIDIzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdGFicy5zY3NzICovCi50YWJzIHsKICAqem9vbTogMTsKICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7IH0KICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dsb2JhbC5zY3NzICovCiAgLnRhYnM6YmVmb3JlLCAudGFiczphZnRlciB7CiAgICBjb250ZW50OiAiICI7CiAgICBkaXNwbGF5OiB0YWJsZTsgfQogIC8qIGxpbmUgMTY2LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ2xvYmFsLnNjc3MgKi8KICAudGFiczphZnRlciB7CiAgICBjbGVhcjogYm90aDsgfQogIC8qIGxpbmUgMjYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190YWJzLnNjc3MgKi8KICAudGFicyBkZCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7CiAgICB0b3A6IDFweDsKICAgIGZsb2F0OiBsZWZ0OyB9CiAgICAvKiBsaW5lIDMxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdGFicy5zY3NzICovCiAgICAudGFicyBkZCA+IGEgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgYmFja2dyb3VuZDogI2VmZWZlZjsKICAgICAgY29sb3I6ICMyMjIyMjI7CiAgICAgIHBhZGRpbmctdG9wOiAxcmVtOwogICAgICBwYWRkaW5nLXJpZ2h0OiAycmVtOwogICAgICBwYWRkaW5nLWJvdHRvbTogMS4wNjI1cmVtOwogICAgICBwYWRkaW5nLWxlZnQ6IDJyZW07CiAgICAgIGZvbnQtZmFtaWx5OiAiSGVsdmV0aWNhIE5ldWUiLCAiSGVsdmV0aWNhIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgZm9udC1zaXplOiAxcmVtOyB9CiAgICAgIC8qIGxpbmUgNDEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190YWJzLnNjc3MgKi8KICAgICAgLnRhYnMgZGQgPiBhOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZTJlMmUyOyB9CiAgICAvKiBsaW5lIDQzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdGFicy5zY3NzICovCiAgICAudGFicyBkZC5hY3RpdmUgYSB7CiAgICAgIGJhY2tncm91bmQ6ICNmZmY7IH0KICAvKiBsaW5lIDQ3LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdGFicy5zY3NzICovCiAgLnRhYnMucmFkaXVzIGRkOmZpcnN0LWNoaWxkIGEgewogICAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6IDNweDsKICAgIC1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OiAzcHg7CiAgICAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDNweDsKICAgIC13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogM3B4OwogICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogM3B4OwogICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogM3B4OyB9CiAgLyogbGluZSA1MCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RhYnMuc2NzcyAqLwogIC50YWJzLnJhZGl1cyBkZDpsYXN0LWNoaWxkIGEgewogICAgLW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OiAzcHg7CiAgICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6IDNweDsKICAgIC13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDNweDsKICAgIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDsKICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7CiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4OyB9CiAgLyogbGluZSA1NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RhYnMuc2NzcyAqLwogIC50YWJzLnZlcnRpY2FsIGRkIHsKICAgIHBvc2l0aW9uOiBpbmhlcml0OwogICAgZmxvYXQ6IG5vbmU7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHRvcDogYXV0bzsgfQoKLyogbGluZSA2MywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RhYnMuc2NzcyAqLwoudGFicy1jb250ZW50IHsKICAqem9vbTogMTsKICBtYXJnaW4tYm90dG9tOiAxLjVyZW07IH0KICAvKiBsaW5lIDE2NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dsb2JhbC5zY3NzICovCiAgLnRhYnMtY29udGVudDpiZWZvcmUsIC50YWJzLWNvbnRlbnQ6YWZ0ZXIgewogICAgY29udGVudDogIiAiOwogICAgZGlzcGxheTogdGFibGU7IH0KICAvKiBsaW5lIDE2NiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dsb2JhbC5zY3NzICovCiAgLnRhYnMtY29udGVudDphZnRlciB7CiAgICBjbGVhcjogYm90aDsgfQogIC8qIGxpbmUgNjYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190YWJzLnNjc3MgKi8KICAudGFicy1jb250ZW50ID4gLmNvbnRlbnQsIHVsI2Rvd25sb2FkcyA+IGxpIC50YWJzLWNvbnRlbnQgPiAubm90ZXMsIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC50YWJzLWNvbnRlbnQgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdLCAjZG93bmxvYWQgPiBkaXYgLnRhYnMtY29udGVudCA+IHVsW2lkJD0iLWRvd25sb2FkIl0gewogICAgZGlzcGxheTogbm9uZTsKICAgIGZsb2F0OiBsZWZ0OwogICAgcGFkZGluZzogMC45Mzc1cmVtIDA7IH0KICAgIC8qIGxpbmUgNzAsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190YWJzLnNjc3MgKi8KICAgIC50YWJzLWNvbnRlbnQgPiAuY29udGVudC5hY3RpdmUsIHVsI2Rvd25sb2FkcyA+IGxpIC50YWJzLWNvbnRlbnQgPiAuYWN0aXZlLm5vdGVzLCB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSAudGFicy1jb250ZW50ID4gdWwuYWN0aXZlW2lkJD0iLWRvd25sb2FkIl0sICNkb3dubG9hZCA+IGRpdiAudGFicy1jb250ZW50ID4gdWwuYWN0aXZlW2lkJD0iLWRvd25sb2FkIl0gewogICAgICBkaXNwbGF5OiBibG9jazsgfQogICAgLyogbGluZSA3MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RhYnMuc2NzcyAqLwogICAgLnRhYnMtY29udGVudCA+IC5jb250ZW50LmNvbnRhaW5lZCwgdWwjZG93bmxvYWRzID4gbGkgLnRhYnMtY29udGVudCA+IC5jb250YWluZWQubm90ZXMsIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC50YWJzLWNvbnRlbnQgPiB1bC5jb250YWluZWRbaWQkPSItZG93bmxvYWQiXSwgI2Rvd25sb2FkID4gZGl2IC50YWJzLWNvbnRlbnQgPiB1bC5jb250YWluZWRbaWQkPSItZG93bmxvYWQiXSB7CiAgICAgIHBhZGRpbmc6IDAuOTM3NXJlbTsgfQogIC8qIGxpbmUgNzMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190YWJzLnNjc3MgKi8KICAudGFicy1jb250ZW50LnZlcnRpY2FsIHsKICAgIGRpc3BsYXk6IGJsb2NrOyB9CiAgICAvKiBsaW5lIDc1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdGFicy5zY3NzICovCiAgICAudGFicy1jb250ZW50LnZlcnRpY2FsID4gLmNvbnRlbnQsIHVsI2Rvd25sb2FkcyA+IGxpIC50YWJzLWNvbnRlbnQudmVydGljYWwgPiAubm90ZXMsIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC50YWJzLWNvbnRlbnQudmVydGljYWwgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdLCAjZG93bmxvYWQgPiBkaXYgLnRhYnMtY29udGVudC52ZXJ0aWNhbCA+IHVsW2lkJD0iLWRvd25sb2FkIl0gewogICAgICBwYWRkaW5nOiAwIDAuOTM3NXJlbTsgfQoKQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0MC4wNjNlbSkgewogIC8qIGxpbmUgODAsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190YWJzLnNjc3MgKi8KICAudGFicy52ZXJ0aWNhbCB7CiAgICB3aWR0aDogMjAlOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiAxLjI1cmVtOyB9CgogIC8qIGxpbmUgODcsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190YWJzLnNjc3MgKi8KICAudGFicy1jb250ZW50LnZlcnRpY2FsIHsKICAgIHdpZHRoOiA4MCU7CiAgICBmbG9hdDogbGVmdDsKICAgIG1hcmdpbi1sZWZ0OiAtMXB4OyB9IH0KLyogSW1hZ2UgVGh1bWJuYWlscyAqLwovKiBsaW5lIDYyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdGh1bWJzLnNjc3MgKi8KLnRoIHsKICBsaW5lLWhlaWdodDogMDsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgYm9yZGVyOiBzb2xpZCA0cHggd2hpdGU7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgwLCAwLCAwLCAwLjIpOwogIGJveC1zaGFkb3c6IDAgMCAwIDFweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMjAwbXMgZWFzZS1vdXQ7CiAgLW1vei10cmFuc2l0aW9uOiBhbGwgMjAwbXMgZWFzZS1vdXQ7CiAgdHJhbnNpdGlvbjogYWxsIDIwMG1zIGVhc2Utb3V0OyB9CiAgLyogbGluZSA0OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RodW1icy5zY3NzICovCiAgLnRoOmhvdmVyLCAudGg6Zm9jdXMgewogICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgNnB4IDFweCByZ2JhKDAsIDE0MCwgMTg2LCAwLjUpOwogICAgYm94LXNoYWRvdzogMCAwIDZweCAxcHggcmdiYSgwLCAxNDAsIDE4NiwgMC41KTsgfQogIC8qIGxpbmUgNjYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190aHVtYnMuc2NzcyAqLwogIC50aC5yYWRpdXMgewogICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7IH0KCi8qIGxpbmUgNjgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190aHVtYnMuc2NzcyAqLwphLnRoIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbWF4LXdpZHRoOiAxMDAlOyB9CgovKiBUb29sdGlwcyAqLwovKiBsaW5lIDMyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9vbHRpcHMuc2NzcyAqLwouaGFzLXRpcCB7CiAgYm9yZGVyLWJvdHRvbTogZG90dGVkIDFweCAjY2NjY2NjOwogIGN1cnNvcjogaGVscDsKICBmb250LXdlaWdodDogYm9sZDsKICBjb2xvcjogIzMzMzMzMzsgfQogIC8qIGxpbmUgMzksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b29sdGlwcy5zY3NzICovCiAgLmhhcy10aXA6aG92ZXIsIC5oYXMtdGlwOmZvY3VzIHsKICAgIGJvcmRlci1ib3R0b206IGRvdHRlZCAxcHggIzAwM2Y1NDsKICAgIGNvbG9yOiAjMDA4Y2JhOyB9CiAgLyogbGluZSA0NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Rvb2x0aXBzLnNjc3MgKi8KICAuaGFzLXRpcC50aXAtbGVmdCwgLmhhcy10aXAudGlwLXJpZ2h0IHsKICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7IH0KCi8qIGxpbmUgNDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b29sdGlwcy5zY3NzICovCi50b29sdGlwIHsKICBkaXNwbGF5OiBub25lOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB6LWluZGV4OiA5OTk7CiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICBmb250LXNpemU6IDAuODc1cmVtOwogIGxpbmUtaGVpZ2h0OiAxLjM7CiAgcGFkZGluZzogMC43NXJlbTsKICBtYXgtd2lkdGg6IDg1JTsKICBsZWZ0OiA1MCU7CiAgd2lkdGg6IDEwMCU7CiAgY29sb3I6IHdoaXRlOwogIGJhY2tncm91bmQ6ICMzMzMzMzM7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7CiAgYm9yZGVyLXJhZGl1czogM3B4OyB9CiAgLyogbGluZSA2MywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Rvb2x0aXBzLnNjc3MgKi8KICAudG9vbHRpcCA+IC5udWIgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBsZWZ0OiA1cHg7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB3aWR0aDogMDsKICAgIGhlaWdodDogMDsKICAgIGJvcmRlcjogc29saWQgNXB4OwogICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjMzMzMzMzIHRyYW5zcGFyZW50OwogICAgdG9wOiAtMTBweDsgfQogIC8qIGxpbmUgNzQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b29sdGlwcy5zY3NzICovCiAgLnRvb2x0aXAub3BlbmVkIHsKICAgIGNvbG9yOiAjMDA4Y2JhICFpbXBvcnRhbnQ7CiAgICBib3JkZXItYm90dG9tOiBkb3R0ZWQgMXB4ICMwMDNmNTQgIWltcG9ydGFudDsgfQoKLyogbGluZSA4MCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Rvb2x0aXBzLnNjc3MgKi8KLnRhcC10by1jbG9zZSB7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC1zaXplOiAwLjYyNXJlbTsKICBjb2xvcjogIzc3Nzc3NzsKICBmb250LXdlaWdodDogbm9ybWFsOyB9CgpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQwLjA2M2VtKSB7CiAgLyogbGluZSA4OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Rvb2x0aXBzLnNjc3MgKi8KICAudG9vbHRpcCA+IC5udWIgewogICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjMzMzMzMzIHRyYW5zcGFyZW50OwogICAgdG9wOiAtMTBweDsgfQogIC8qIGxpbmUgOTMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b29sdGlwcy5zY3NzICovCiAgLnRvb2x0aXAudGlwLXRvcCA+IC5udWIgewogICAgYm9yZGVyLWNvbG9yOiAjMzMzMzMzIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50OwogICAgdG9wOiBhdXRvOwogICAgYm90dG9tOiAtMTBweDsgfQogIC8qIGxpbmUgMTAwLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9vbHRpcHMuc2NzcyAqLwogIC50b29sdGlwLnRpcC1sZWZ0LCAudG9vbHRpcC50aXAtcmlnaHQgewogICAgZmxvYXQ6IG5vbmUgIWltcG9ydGFudDsgfQogIC8qIGxpbmUgMTAyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9vbHRpcHMuc2NzcyAqLwogIC50b29sdGlwLnRpcC1sZWZ0ID4gLm51YiB7CiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICMzMzMzMzM7CiAgICByaWdodDogLTEwcHg7CiAgICBsZWZ0OiBhdXRvOwogICAgdG9wOiA1MCU7CiAgICBtYXJnaW4tdG9wOiAtNXB4OyB9CiAgLyogbGluZSAxMDksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b29sdGlwcy5zY3NzICovCiAgLnRvb2x0aXAudGlwLXJpZ2h0ID4gLm51YiB7CiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50ICMzMzMzMzMgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7CiAgICByaWdodDogYXV0bzsKICAgIGxlZnQ6IC0xMHB4OwogICAgdG9wOiA1MCU7CiAgICBtYXJnaW4tdG9wOiAtNXB4OyB9IH0KLyogbGluZSAxMTEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KcC5sZWFkIHsKICBmb250LXNpemU6IDEuMjE4NzVyZW07CiAgbGluZS1oZWlnaHQ6IDEuNjsgfQoKLyogbGluZSAxMTYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KLnN1YmhlYWRlciB7CiAgbGluZS1oZWlnaHQ6IDEuNDsKICBjb2xvcjogIzZmNmY2ZjsKICBmb250LXdlaWdodDogMzAwOwogIG1hcmdpbi10b3A6IDAuMnJlbTsKICBtYXJnaW4tYm90dG9tOiAwLjVyZW07IH0KCi8qIFR5cG9ncmFwaHkgcmVzZXRzICovCi8qIGxpbmUgMTQ1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdHlwZS5zY3NzICovCmRpdiwKZGwsCmR0LApkZCwKdWwsCm9sLApsaSwKaDEsCmgyLApoMywKaDQsCmg1LApoNiwKcHJlLApmb3JtLApwLApibG9ja3F1b3RlLAp0aCwKdGQgewogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAwOwogIGRpcmVjdGlvbjogbHRyOyB9CgovKiBEZWZhdWx0IExpbmsgU3R5bGVzICovCi8qIGxpbmUgMTUyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdHlwZS5zY3NzICovCmEgewogIGNvbG9yOiAjNWU4OTQ5OwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICBsaW5lLWhlaWdodDogaW5oZXJpdDsgfQogIC8qIGxpbmUgMTU4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdHlwZS5zY3NzICovCiAgYTpob3ZlciwgYTpmb2N1cyB7CiAgICBjb2xvcjogIzAwNzlhMTsgfQogIC8qIGxpbmUgMTYwLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdHlwZS5zY3NzICovCiAgYSBpbWcgewogICAgYm9yZGVyOiBub25lOyB9CgovKiBEZWZhdWx0IHBhcmFncmFwaCBzdHlsZXMgKi8KLyogbGluZSAxNjQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KcCB7CiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICBmb250LXNpemU6IDFyZW07CiAgbGluZS1oZWlnaHQ6IDEuNjsKICBtYXJnaW4tYm90dG9tOiAxLjI1cmVtOwogIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7IH0KICAvKiBsaW5lIDE3NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3R5cGUuc2NzcyAqLwogIHAgYXNpZGUgewogICAgZm9udC1zaXplOiAwLjg3NXJlbTsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgZm9udC1zdHlsZTogaXRhbGljOyB9CgovKiBEZWZhdWx0IGhlYWRlciBzdHlsZXMgKi8KLyogbGluZSAxODIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KaDEsIGgyLCBoMywgaDQsIGg1LCBoNiB7CiAgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSIsICJIZWx2ZXRpY2EiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGNvbG9yOiAjMjIyMjIyOwogIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7CiAgbWFyZ2luLXRvcDogMC4ycmVtOwogIG1hcmdpbi1ib3R0b206IDAuNXJlbTsKICBsaW5lLWhlaWdodDogMS40OyB9CiAgLyogbGluZSAxOTIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KICBoMSBzbWFsbCwgaDIgc21hbGwsIGgzIHNtYWxsLCBoNCBzbWFsbCwgaDUgc21hbGwsIGg2IHNtYWxsIHsKICAgIGZvbnQtc2l6ZTogNjAlOwogICAgY29sb3I6ICM2ZjZmNmY7CiAgICBsaW5lLWhlaWdodDogMDsgfQoKLyogbGluZSAxOTksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KaDEgewogIGZvbnQtc2l6ZTogMi4xMjVyZW07IH0KCi8qIGxpbmUgMjAwLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdHlwZS5zY3NzICovCmgyIHsKICBmb250LXNpemU6IDEuNjg3NXJlbTsgfQoKLyogbGluZSAyMDEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KaDMgewogIGZvbnQtc2l6ZTogMS4zNzVyZW07IH0KCi8qIGxpbmUgMjAyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdHlwZS5zY3NzICovCmg0IHsKICBmb250LXNpemU6IDEuMTI1cmVtOyB9CgovKiBsaW5lIDIwMywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3R5cGUuc2NzcyAqLwpoNSB7CiAgZm9udC1zaXplOiAxLjEyNXJlbTsgfQoKLyogbGluZSAyMDQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KaDYgewogIGZvbnQtc2l6ZTogMXJlbTsgfQoKLyogbGluZSAyMDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KaHIgewogIGJvcmRlcjogc29saWQgI2RkZGRkZDsKICBib3JkZXItd2lkdGg6IDFweCAwIDA7CiAgY2xlYXI6IGJvdGg7CiAgbWFyZ2luOiAxLjI1cmVtIDAgMS4xODc1cmVtOwogIGhlaWdodDogMDsgfQoKLyogSGVscGZ1bCBUeXBvZ3JhcGh5IERlZmF1bHRzICovCi8qIGxpbmUgMjE4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdHlwZS5zY3NzICovCmVtLAppIHsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7IH0KCi8qIGxpbmUgMjI0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdHlwZS5zY3NzICovCnN0cm9uZywKYiB7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7IH0KCi8qIGxpbmUgMjI5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdHlwZS5zY3NzICovCnNtYWxsIHsKICBmb250LXNpemU6IDYwJTsKICBsaW5lLWhlaWdodDogaW5oZXJpdDsgfQoKLyogbGluZSAyMzQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KY29kZSB7CiAgZm9udC1mYW1pbHk6IENvbnNvbGFzLCAiTGliZXJhdGlvbiBNb25vIiwgQ291cmllciwgbW9ub3NwYWNlOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGNvbG9yOiAjYmIyNjBkOyB9CgovKiBMaXN0cyAqLwovKiBsaW5lIDI0MywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3R5cGUuc2NzcyAqLwp1bCwKb2wsCmRsIHsKICBmb250LXNpemU6IDFyZW07CiAgbGluZS1oZWlnaHQ6IDEuNjsKICBtYXJnaW4tYm90dG9tOiAxLjI1cmVtOwogIGxpc3Qtc3R5bGUtcG9zaXRpb246IG91dHNpZGU7CiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7IH0KCi8qIGxpbmUgMjUxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdHlwZS5zY3NzICovCnVsIHsKICBtYXJnaW4tbGVmdDogMS4xcmVtOyB9CiAgLyogbGluZSAyNTMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KICB1bC5uby1idWxsZXQsIHVsLnNvY2lhbCwgdWwjZG93bmxvYWRzLCB1bCNkb2NzLWxpc3QgewogICAgbWFyZ2luLWxlZnQ6IDA7IH0KICAgIC8qIGxpbmUgMjU3LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdHlwZS5zY3NzICovCiAgICB1bC5uby1idWxsZXQgbGkgdWwsIHVsLnNvY2lhbCBsaSB1bCwgdWwjZG93bmxvYWRzIGxpIHVsLCB1bCNkb2NzLWxpc3QgbGkgdWwsCiAgICB1bC5uby1idWxsZXQgbGkgb2wsCiAgICB1bC5zb2NpYWwgbGkgb2wsCiAgICB1bCNkb3dubG9hZHMgbGkgb2wsCiAgICB1bCNkb2NzLWxpc3QgbGkgb2wgewogICAgICBtYXJnaW4tbGVmdDogMS4yNXJlbTsKICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgbGlzdC1zdHlsZTogbm9uZTsgfQoKLyogVW5vcmRlcmVkIExpc3RzICovCi8qIGxpbmUgMjcwLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdHlwZS5zY3NzICovCnVsIGxpIHVsLAp1bCBsaSBvbCB7CiAgbWFyZ2luLWxlZnQ6IDEuMjVyZW07CiAgbWFyZ2luLWJvdHRvbTogMDsKICBmb250LXNpemU6IDFyZW07CiAgLyogT3ZlcnJpZGUgbmVzdGVkIGZvbnQtc2l6ZSBjaGFuZ2UgKi8gfQovKiBsaW5lIDI3OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3R5cGUuc2NzcyAqLwp1bC5zcXVhcmUgbGkgdWwsIHVsLmNpcmNsZSBsaSB1bCwgdWwuZGlzYyBsaSB1bCB7CiAgbGlzdC1zdHlsZTogaW5oZXJpdDsgfQovKiBsaW5lIDI4MiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3R5cGUuc2NzcyAqLwp1bC5zcXVhcmUgewogIGxpc3Qtc3R5bGUtdHlwZTogc3F1YXJlOwogIG1hcmdpbi1sZWZ0OiAxLjFyZW07IH0KLyogbGluZSAyODMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KdWwuY2lyY2xlIHsKICBsaXN0LXN0eWxlLXR5cGU6IGNpcmNsZTsKICBtYXJnaW4tbGVmdDogMS4xcmVtOyB9Ci8qIGxpbmUgMjg0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdHlwZS5zY3NzICovCnVsLmRpc2MgewogIGxpc3Qtc3R5bGUtdHlwZTogZGlzYzsKICBtYXJnaW4tbGVmdDogMS4xcmVtOyB9Ci8qIGxpbmUgMjg1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdHlwZS5zY3NzICovCnVsLm5vLWJ1bGxldCwgdWwuc29jaWFsLCB1bCNkb3dubG9hZHMsIHVsI2RvY3MtbGlzdCB7CiAgbGlzdC1zdHlsZTogbm9uZTsgfQoKLyogT3JkZXJlZCBMaXN0cyAqLwovKiBsaW5lIDI4OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3R5cGUuc2NzcyAqLwpvbCB7CiAgbWFyZ2luLWxlZnQ6IDEuNHJlbTsgfQogIC8qIGxpbmUgMjkzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdHlwZS5zY3NzICovCiAgb2wgbGkgdWwsCiAgb2wgbGkgb2wgewogICAgbWFyZ2luLWxlZnQ6IDEuMjVyZW07CiAgICBtYXJnaW4tYm90dG9tOiAwOyB9CgovKiBEZWZpbml0aW9uIExpc3RzICovCi8qIGxpbmUgMzAyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdHlwZS5zY3NzICovCmRsIGR0IHsKICBtYXJnaW4tYm90dG9tOiAwLjNyZW07CiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLyogbGluZSAzMDYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KZGwgZGQgewogIG1hcmdpbi1ib3R0b206IDAuNzVyZW07IH0KCi8qIEFiYnJldmlhdGlvbnMgKi8KLyogbGluZSAzMTEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KYWJiciwKYWNyb255bSB7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICBmb250LXNpemU6IDkwJTsKICBjb2xvcjogIzU1NTU1NTsKICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkICNkZGRkZGQ7CiAgY3Vyc29yOiBoZWxwOyB9CgovKiBsaW5lIDMxOCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3R5cGUuc2NzcyAqLwphYmJyIHsKICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgfQoKLyogQmxvY2txdW90ZXMgKi8KLyogbGluZSAzMjMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KYmxvY2txdW90ZSB7CiAgbWFyZ2luOiAwIDAgMS4yNXJlbTsKICBwYWRkaW5nOiAwLjU2MjVyZW0gMS4yNXJlbSAwIDEuMTg3NXJlbTsKICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNkZGRkZGQ7IH0KICAvKiBsaW5lIDMyOCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3R5cGUuc2NzcyAqLwogIGJsb2NrcXVvdGUgY2l0ZSB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtOwogICAgY29sb3I6ICM1NTU1NTU7IH0KICAgIC8qIGxpbmUgMzMyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdHlwZS5zY3NzICovCiAgICBibG9ja3F1b3RlIGNpdGU6YmVmb3JlIHsKICAgICAgY29udGVudDogIlwyMDE0IFwwMDIwIjsgfQogICAgLyogbGluZSAzMzcsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KICAgIGJsb2NrcXVvdGUgY2l0ZSBhLAogICAgYmxvY2txdW90ZSBjaXRlIGE6dmlzaXRlZCB7CiAgICAgIGNvbG9yOiAjNTU1NTU1OyB9CgovKiBsaW5lIDM0MywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3R5cGUuc2NzcyAqLwpibG9ja3F1b3RlLApibG9ja3F1b3RlIHAgewogIGxpbmUtaGVpZ2h0OiAxLjY7CiAgY29sb3I6ICM2ZjZmNmY7IH0KCi8qIE1pY3JvZm9ybWF0cyAqLwovKiBsaW5lIDM0OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3R5cGUuc2NzcyAqLwoudmNhcmQgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBtYXJnaW46IDAgMCAxLjI1cmVtIDA7CiAgYm9yZGVyOiAxcHggc29saWQgI2RkZGRkZDsKICBwYWRkaW5nOiAwLjYyNXJlbSAwLjc1cmVtOyB9CiAgLyogbGluZSAzNTUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KICAudmNhcmQgbGkgewogICAgbWFyZ2luOiAwOwogICAgZGlzcGxheTogYmxvY2s7IH0KICAvKiBsaW5lIDM1OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3R5cGUuc2NzcyAqLwogIC52Y2FyZCAuZm4gewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LXNpemU6IDAuOTM3NXJlbTsgfQoKLyogbGluZSAzNjYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KLnZldmVudCAuc3VtbWFyeSB7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLyogbGluZSAzNjgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KLnZldmVudCBhYmJyIHsKICBjdXJzb3I6IGRlZmF1bHQ7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGJvcmRlcjogbm9uZTsKICBwYWRkaW5nOiAwIDAuMDYyNXJlbTsgfQoKQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0MC4wNjNlbSkgewogIC8qIGxpbmUgMzc5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdHlwZS5zY3NzICovCiAgaDEsIGgyLCBoMywgaDQsIGg1LCBoNiB7CiAgICBsaW5lLWhlaWdodDogMS40OyB9CgogIC8qIGxpbmUgMzgwLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdHlwZS5zY3NzICovCiAgaDEgewogICAgZm9udC1zaXplOiAyLjc1cmVtOyB9CgogIC8qIGxpbmUgMzgxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdHlwZS5zY3NzICovCiAgaDIgewogICAgZm9udC1zaXplOiAyLjMxMjVyZW07IH0KCiAgLyogbGluZSAzODIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KICBoMyB7CiAgICBmb250LXNpemU6IDEuNjg3NXJlbTsgfQoKICAvKiBsaW5lIDM4MywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3R5cGUuc2NzcyAqLwogIGg0IHsKICAgIGZvbnQtc2l6ZTogMS40Mzc1cmVtOyB9IH0KLyoKICogUHJpbnQgc3R5bGVzLgogKgogKiBJbmxpbmVkIHRvIGF2b2lkIHJlcXVpcmVkIEhUVFAgY29ubmVjdGlvbjogd3d3LnBocGllZC5jb20vZGVsYXktbG9hZGluZy15b3VyLXByaW50LWNzcy8KICogQ3JlZGl0IHRvIFBhdWwgSXJpc2ggYW5kIEhUTUw1IEJvaWxlcnBsYXRlIChodG1sNWJvaWxlcnBsYXRlLmNvbSkKKi8KLyogbGluZSAzOTQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KLnByaW50LW9ubHkgewogIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfQoKQG1lZGlhIHByaW50IHsKICAvKiBsaW5lIDM5NiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3R5cGUuc2NzcyAqLwogICogewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgIGNvbG9yOiAjMDAwICFpbXBvcnRhbnQ7CiAgICAvKiBCbGFjayBwcmludHMgZmFzdGVyOiBoNWJwLmNvbS9zICovCiAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7CiAgICB0ZXh0LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OyB9CgogIC8qIGxpbmUgNDA0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdHlwZS5zY3NzICovCiAgYSwKICBhOnZpc2l0ZWQgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0KCiAgLyogbGluZSA0MDUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KICBhW2hyZWZdOmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIgKCIgYXR0cihocmVmKSAiKSI7IH0KCiAgLyogbGluZSA0MDcsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KICBhYmJyW3RpdGxlXTphZnRlciB7CiAgICBjb250ZW50OiAiICgiIGF0dHIodGl0bGUpICIpIjsgfQoKICAvKiBsaW5lIDQxMiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3R5cGUuc2NzcyAqLwogIC5pciBhOmFmdGVyLAogIGFbaHJlZl49ImphdmFzY3JpcHQ6Il06YWZ0ZXIsCiAgYVtocmVmXj0iIyJdOmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIiOyB9CgogIC8qIGxpbmUgNDE1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdHlwZS5zY3NzICovCiAgcHJlLAogIGJsb2NrcXVvdGUgewogICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsgfQoKICAvKiBsaW5lIDQyMCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3R5cGUuc2NzcyAqLwogIHRoZWFkIHsKICAgIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDsKICAgIC8qIGg1YnAuY29tL3QgKi8gfQoKICAvKiBsaW5lIDQyMywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3R5cGUuc2NzcyAqLwogIHRyLAogIGltZyB7CiAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7IH0KCiAgLyogbGluZSA0MjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KICBpbWcgewogICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IH0KCiAgQHBhZ2UgewogICAgbWFyZ2luOiAwLjVjbTsgfQoKICAvKiBsaW5lIDQzMSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3R5cGUuc2NzcyAqLwogIHAsCiAgaDIsCiAgaDMgewogICAgb3JwaGFuczogMzsKICAgIHdpZG93czogMzsgfQoKICAvKiBsaW5lIDQzNywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3R5cGUuc2NzcyAqLwogIGgyLAogIGgzIHsKICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkOyB9CgogIC8qIGxpbmUgNDM5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdHlwZS5zY3NzICovCiAgLmhpZGUtb24tcHJpbnQgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9CgogIC8qIGxpbmUgNDQwLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdHlwZS5zY3NzICovCiAgLnByaW50LW9ubHkgewogICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgfQoKICAvKiBsaW5lIDQ0MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3R5cGUuc2NzcyAqLwogIC5oaWRlLWZvci1wcmludCB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KCiAgLyogbGluZSA0NDIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190eXBlLnNjc3MgKi8KICAuc2hvdy1mb3ItcHJpbnQgewogICAgZGlzcGxheTogaW5oZXJpdCAhaW1wb3J0YW50OyB9IH0KLyogbGluZSA3NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwptZXRhLmZvdW5kYXRpb24tbXEtdG9wYmFyIHsKICBmb250LWZhbWlseTogIi9zY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkvIjsKICB3aWR0aDogMTAyNHB4OyB9CgovKiBXcmFwcGVkIGFyb3VuZCAudG9wLWJhciB0byBjb250YWluIHRvIGdyaWQgd2lkdGggKi8KLyogbGluZSA4NiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwouY29udGFpbi10by1ncmlkIHsKICB3aWR0aDogMTAwJTsKICBiYWNrZ3JvdW5kOiAjMmE1ZDg0OyB9CiAgLyogbGluZSA5MCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogIC5jb250YWluLXRvLWdyaWQgLnRvcC1iYXIgewogICAgbWFyZ2luLWJvdHRvbTogMDsgfQoKLyogbGluZSA5NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwouZml4ZWQgewogIHdpZHRoOiAxMDAlOwogIGxlZnQ6IDA7CiAgcG9zaXRpb246IGZpeGVkOwogIHRvcDogMDsKICB6LWluZGV4OiA5OTsgfQogIC8qIGxpbmUgMTAxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9wLWJhci5zY3NzICovCiAgLmZpeGVkLmV4cGFuZGVkOm5vdCgudG9wLWJhcikgewogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIGhlaWdodDogYXV0bzsKICAgIHdpZHRoOiAxMDAlOwogICAgbWF4LWhlaWdodDogMTAwJTsgfQogICAgLyogbGluZSAxMDcsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KICAgIC5maXhlZC5leHBhbmRlZDpub3QoLnRvcC1iYXIpIC50aXRsZS1hcmVhIHsKICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgei1pbmRleDogOTk7IH0KICAgIC8qIGxpbmUgMTEzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9wLWJhci5zY3NzICovCiAgICAuZml4ZWQuZXhwYW5kZWQ6bm90KC50b3AtYmFyKSAudG9wLWJhci1zZWN0aW9uIHsKICAgICAgei1pbmRleDogOTg7CiAgICAgIG1hcmdpbi10b3A6IDYwcHg7IH0KCi8qIGxpbmUgMTIwLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9wLWJhci5zY3NzICovCi50b3AtYmFyIHsKICBvdmVyZmxvdzogaGlkZGVuOwogIGhlaWdodDogNjBweDsKICBsaW5lLWhlaWdodDogNjBweDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgYmFja2dyb3VuZDogIzJhNWQ4NDsKICBtYXJnaW4tYm90dG9tOiAwOyB9CiAgLyogbGluZSAxMjksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KICAudG9wLWJhciB1bCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgbGlzdC1zdHlsZTogbm9uZTsgfQogIC8qIGxpbmUgMTM0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9wLWJhci5zY3NzICovCiAgLnRvcC1iYXIgLnJvdywgLnRvcC1iYXIgI3N0YWNrLWxpc3QsIC50b3AtYmFyICN0aGVtZS1saXN0IGxpLCAjdGhlbWUtbGlzdCAudG9wLWJhciBsaSwgLnRvcC1iYXIgdWwjZG9jcy1saXN0IHsKICAgIG1heC13aWR0aDogbm9uZTsgfQogIC8qIGxpbmUgMTM3LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9wLWJhci5zY3NzICovCiAgLnRvcC1iYXIgZm9ybSwKICAudG9wLWJhciBpbnB1dCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOyB9CiAgLyogbGluZSAxMzksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KICAudG9wLWJhciBpbnB1dCB7CiAgICBoZWlnaHQ6IGF1dG87CiAgICBwYWRkaW5nLXRvcDogLjM1cmVtOwogICAgcGFkZGluZy1ib3R0b206IC4zNXJlbTsKICAgIGZvbnQtc2l6ZTogMC43NXJlbTsgfQogIC8qIGxpbmUgMTQxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9wLWJhci5zY3NzICovCiAgLnRvcC1iYXIgLmJ1dHRvbiB7CiAgICBwYWRkaW5nLXRvcDogLjQ1cmVtOwogICAgcGFkZGluZy1ib3R0b206IC4zNXJlbTsKICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICBmb250LXNpemU6IDAuNzVyZW07IH0KICAvKiBsaW5lIDE1MiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogIC50b3AtYmFyIC50aXRsZS1hcmVhIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbjogMDsgfQogIC8qIGxpbmUgMTU3LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9wLWJhci5zY3NzICovCiAgLnRvcC1iYXIgLm5hbWUgewogICAgaGVpZ2h0OiA2MHB4OwogICAgbWFyZ2luOiAwOwogICAgZm9udC1zaXplOiAxNnB4OyB9CiAgICAvKiBsaW5lIDE2MiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogICAgLnRvcC1iYXIgLm5hbWUgaDEgewogICAgICBsaW5lLWhlaWdodDogNjBweDsKICAgICAgZm9udC1zaXplOiAxZW07CiAgICAgIG1hcmdpbjogMDsgfQogICAgICAvKiBsaW5lIDE2NiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogICAgICAudG9wLWJhciAubmFtZSBoMSBhIHsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICB3aWR0aDogNTAlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDAgMjBweDsgfQogIC8qIGxpbmUgMTc3LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9wLWJhci5zY3NzICovCiAgLnRvcC1iYXIgLnRvZ2dsZS10b3BiYXIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgcmlnaHQ6IDA7CiAgICB0b3A6IDA7IH0KICAgIC8qIGxpbmUgMTgyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9wLWJhci5zY3NzICovCiAgICAudG9wLWJhciAudG9nZ2xlLXRvcGJhciBhIHsKICAgICAgY29sb3I6IHdoaXRlOwogICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICBmb250LXNpemU6IDAuODEyNXJlbTsKICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIHBhZGRpbmc6IDAgMjBweDsKICAgICAgaGVpZ2h0OiA2MHB4OwogICAgICBsaW5lLWhlaWdodDogNjBweDsgfQogICAgLyogbGluZSAxOTUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KICAgIC50b3AtYmFyIC50b2dnbGUtdG9wYmFyLm1lbnUtaWNvbiB7CiAgICAgIHJpZ2h0OiAyMHB4OwogICAgICB0b3A6IDUwJTsKICAgICAgbWFyZ2luLXRvcDogLTE2cHg7CiAgICAgIHBhZGRpbmctbGVmdDogNDBweDsgfQogICAgICAvKiBsaW5lIDIwMSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogICAgICAudG9wLWJhciAudG9nZ2xlLXRvcGJhci5tZW51LWljb24gYSB7CiAgICAgICAgdGV4dC1pbmRlbnQ6IC00OHB4OwogICAgICAgIHdpZHRoOiAzNHB4OwogICAgICAgIGhlaWdodDogMzRweDsKICAgICAgICBsaW5lLWhlaWdodDogMzNweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGNvbG9yOiB3aGl0ZTsgfQogICAgICAgIC8qIGxpbmUgMjA5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9wLWJhci5zY3NzICovCiAgICAgICAgLnRvcC1iYXIgLnRvZ2dsZS10b3BiYXIubWVudS1pY29uIGEgc3BhbiB7CiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICByaWdodDogMDsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgICBoZWlnaHQ6IDA7CiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAwIDFweCB3aGl0ZSwgMCAxNnB4IDAgMXB4IHdoaXRlLCAwIDIycHggMCAxcHggd2hpdGU7CiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMCAxcHggd2hpdGUsIDAgMTZweCAwIDFweCB3aGl0ZSwgMCAyMnB4IDAgMXB4IHdoaXRlOyB9CiAgLyogbGluZSAyMzAsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KICAudG9wLWJhci5leHBhbmRlZCB7CiAgICBoZWlnaHQ6IGF1dG87CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgfQogICAgLyogbGluZSAyMzQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KICAgIC50b3AtYmFyLmV4cGFuZGVkIC50aXRsZS1hcmVhIHsKICAgICAgYmFja2dyb3VuZDogIzJhNWQ4NDsgfQogICAgLyogbGluZSAyMzcsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KICAgIC50b3AtYmFyLmV4cGFuZGVkIC50b2dnbGUtdG9wYmFyIGEgewogICAgICBjb2xvcjogIzg4ODg4ODsgfQogICAgICAvKiBsaW5lIDIzOCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogICAgICAudG9wLWJhci5leHBhbmRlZCAudG9nZ2xlLXRvcGJhciBhIHNwYW4gewogICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAxMHB4IDAgMXB4ICM4ODg4ODgsIDAgMTZweCAwIDFweCAjODg4ODg4LCAwIDIycHggMCAxcHggIzg4ODg4ODsKICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMCAxcHggIzg4ODg4OCwgMCAxNnB4IDAgMXB4ICM4ODg4ODgsIDAgMjJweCAwIDFweCAjODg4ODg4OyB9CgovKiBsaW5lIDI1OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwoudG9wLWJhci1zZWN0aW9uIHsKICBsZWZ0OiAwOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB3aWR0aDogYXV0bzsKICAtd2Via2l0LXRyYW5zaXRpb246IGxlZnQgMzAwbXMgZWFzZS1vdXQ7CiAgLW1vei10cmFuc2l0aW9uOiBsZWZ0IDMwMG1zIGVhc2Utb3V0OwogIHRyYW5zaXRpb246IGxlZnQgMzAwbXMgZWFzZS1vdXQ7IH0KICAvKiBsaW5lIDI2NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogIC50b3AtYmFyLXNlY3Rpb24gdWwgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IGF1dG87CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGJhY2tncm91bmQ6ICMxZjNjNTI7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBtYXJnaW46IDA7IH0KICAvKiBsaW5lIDI3NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogIC50b3AtYmFyLXNlY3Rpb24gLmRpdmlkZXIsCiAgLnRvcC1iYXItc2VjdGlvbiBbcm9sZT0ic2VwYXJhdG9yIl0gewogICAgYm9yZGVyLXRvcDogc29saWQgMXB4ICMxZTQyNWQ7CiAgICBjbGVhcjogYm90aDsKICAgIGhlaWdodDogMXB4OwogICAgd2lkdGg6IDEwMCU7IH0KICAvKiBsaW5lIDI4MiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogIC50b3AtYmFyLXNlY3Rpb24gdWwgbGkgPiBhIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgd2lkdGg6IDEwMCU7CiAgICBjb2xvcjogd2hpdGU7CiAgICBwYWRkaW5nOiAxMnB4IDAgMTJweCAwOwogICAgcGFkZGluZy1sZWZ0OiAyMHB4OwogICAgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSIsICJIZWx2ZXRpY2EiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1zaXplOiAwLjgxMjVyZW07CiAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgYmFja2dyb3VuZDogIzFmM2M1MjsgfQogICAgLyogbGluZSAyOTMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KICAgIC50b3AtYmFyLXNlY3Rpb24gdWwgbGkgPiBhLmJ1dHRvbiB7CiAgICAgIGJhY2tncm91bmQ6ICMwMDhjYmE7CiAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtOwogICAgICBwYWRkaW5nLXJpZ2h0OiAyMHB4OwogICAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7IH0KICAgICAgLyogbGluZSAyOTgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KICAgICAgLnRvcC1iYXItc2VjdGlvbiB1bCBsaSA+IGEuYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMDA2Njg3OyB9CiAgICAvKiBsaW5lIDMwMiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogICAgLnRvcC1iYXItc2VjdGlvbiB1bCBsaSA+IGEuYnV0dG9uLnNlY29uZGFyeSB7CiAgICAgIGJhY2tncm91bmQ6ICNlN2U3ZTc7IH0KICAgICAgLyogbGluZSAzMDQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KICAgICAgLnRvcC1iYXItc2VjdGlvbiB1bCBsaSA+IGEuYnV0dG9uLnNlY29uZGFyeTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogI2NlY2VjZTsgfQogICAgLyogbGluZSAzMDgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KICAgIC50b3AtYmFyLXNlY3Rpb24gdWwgbGkgPiBhLmJ1dHRvbi5zdWNjZXNzIHsKICAgICAgYmFja2dyb3VuZDogIzVlODk0OTsgfQogICAgICAvKiBsaW5lIDMxMCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogICAgICAudG9wLWJhci1zZWN0aW9uIHVsIGxpID4gYS5idXR0b24uc3VjY2Vzczpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogIzQ3NjgzNzsgfQogICAgLyogbGluZSAzMTQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KICAgIC50b3AtYmFyLXNlY3Rpb24gdWwgbGkgPiBhLmJ1dHRvbi5hbGVydCB7CiAgICAgIGJhY2tncm91bmQ6ICNmMDQxMjQ7IH0KICAgICAgLyogbGluZSAzMTYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KICAgICAgLnRvcC1iYXItc2VjdGlvbiB1bCBsaSA+IGEuYnV0dG9uLmFsZXJ0OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZDMyYTBlOyB9CiAgLyogbGluZSAzMjQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KICAudG9wLWJhci1zZWN0aW9uIHVsIGxpOmhvdmVyID4gYSB7CiAgICBiYWNrZ3JvdW5kOiAjMWYzYzUyOwogICAgY29sb3I6IHdoaXRlOyB9CiAgLyogbGluZSAzMzEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KICAudG9wLWJhci1zZWN0aW9uIHVsIGxpLmFjdGl2ZSA+IGEgewogICAgYmFja2dyb3VuZDogIzFmM2M1MjsKICAgIGNvbG9yOiB3aGl0ZTsgfQogICAgLyogbGluZSAzMzQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KICAgIC50b3AtYmFyLXNlY3Rpb24gdWwgbGkuYWN0aXZlID4gYTpob3ZlciB7CiAgICAgIGJhY2tncm91bmQ6ICMwMDc5YTE7IH0KICAvKiBsaW5lIDM0MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogIC50b3AtYmFyLXNlY3Rpb24gLmhhcy1mb3JtIHsKICAgIHBhZGRpbmc6IDIwcHg7IH0KICAvKiBsaW5lIDM0NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogIC50b3AtYmFyLXNlY3Rpb24gLmhhcy1kcm9wZG93biB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH0KICAgIC8qIGxpbmUgMzQ4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9wLWJhci5zY3NzICovCiAgICAudG9wLWJhci1zZWN0aW9uIC5oYXMtZHJvcGRvd24gPiBhOmFmdGVyIHsKICAgICAgY29udGVudDogIiI7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMDsKICAgICAgaGVpZ2h0OiAwOwogICAgICBib3JkZXI6IGluc2V0IDVweDsKICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNCk7CiAgICAgIGJvcmRlci1sZWZ0LXN0eWxlOiBzb2xpZDsKICAgICAgbWFyZ2luLXJpZ2h0OiAyMHB4OwogICAgICBtYXJnaW4tdG9wOiAtNC41cHg7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiA1MCU7CiAgICAgIHJpZ2h0OiAwOyB9CiAgICAvKiBsaW5lIDM2MCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogICAgLnRvcC1iYXItc2VjdGlvbiAuaGFzLWRyb3Bkb3duLm1vdmVkIHsKICAgICAgcG9zaXRpb246IHN0YXRpYzsgfQogICAgICAvKiBsaW5lIDM2MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogICAgICAudG9wLWJhci1zZWN0aW9uIC5oYXMtZHJvcGRvd24ubW92ZWQgPiAuZHJvcGRvd24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOyB9CiAgLyogbGluZSAzNjgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KICAudG9wLWJhci1zZWN0aW9uIC5kcm9wZG93biB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAxMDAlOwogICAgdG9wOiAwOwogICAgZGlzcGxheTogbm9uZTsKICAgIHotaW5kZXg6IDk5OyB9CiAgICAvKiBsaW5lIDM3NSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogICAgLnRvcC1iYXItc2VjdGlvbiAuZHJvcGRvd24gbGkgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiBhdXRvOyB9CiAgICAgIC8qIGxpbmUgMzc5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9wLWJhci5zY3NzICovCiAgICAgIC50b3AtYmFyLXNlY3Rpb24gLmRyb3Bkb3duIGxpIGEgewogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgcGFkZGluZzogOHB4IDIwcHg7IH0KICAgICAgICAvKiBsaW5lIDM4MiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogICAgICAgIC50b3AtYmFyLXNlY3Rpb24gLmRyb3Bkb3duIGxpIGEucGFyZW50LWxpbmsgewogICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsgfQogICAgICAvKiBsaW5lIDM4NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogICAgICAudG9wLWJhci1zZWN0aW9uIC5kcm9wZG93biBsaS50aXRsZSBoNSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsgfQogICAgICAgIC8qIGxpbmUgMzg4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9wLWJhci5zY3NzICovCiAgICAgICAgLnRvcC1iYXItc2VjdGlvbiAuZHJvcGRvd24gbGkudGl0bGUgaDUgYSB7CiAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgICBsaW5lLWhlaWdodDogMzBweDsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOyB9CiAgICAvKiBsaW5lIDM5NiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogICAgLnRvcC1iYXItc2VjdGlvbiAuZHJvcGRvd24gbGFiZWwgewogICAgICBwYWRkaW5nOiA4cHggMjBweCAycHg7CiAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIGNvbG9yOiAjNzc3Nzc3OwogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgZm9udC1zaXplOiAwLjYyNXJlbTsgfQoKLyogbGluZSA0MDcsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KLmpzLWdlbmVyYXRlZCB7CiAgZGlzcGxheTogYmxvY2s7IH0KCkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkgewogIC8qIGxpbmUgNDEyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9wLWJhci5zY3NzICovCiAgLnRvcC1iYXIgewogICAgYmFja2dyb3VuZDogIzJhNWQ4NDsKICAgICp6b29tOiAxOwogICAgb3ZlcmZsb3c6IHZpc2libGU7IH0KICAgIC8qIGxpbmUgMTY1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fZ2xvYmFsLnNjc3MgKi8KICAgIC50b3AtYmFyOmJlZm9yZSwgLnRvcC1iYXI6YWZ0ZXIgewogICAgICBjb250ZW50OiAiICI7CiAgICAgIGRpc3BsYXk6IHRhYmxlOyB9CiAgICAvKiBsaW5lIDE2NiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dsb2JhbC5zY3NzICovCiAgICAudG9wLWJhcjphZnRlciB7CiAgICAgIGNsZWFyOiBib3RoOyB9CiAgICAvKiBsaW5lIDQxNywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogICAgLnRvcC1iYXIgLnRvZ2dsZS10b3BiYXIgewogICAgICBkaXNwbGF5OiBub25lOyB9CiAgICAvKiBsaW5lIDQxOSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogICAgLnRvcC1iYXIgLnRpdGxlLWFyZWEgewogICAgICBmbG9hdDogbGVmdDsgfQogICAgLyogbGluZSA0MjAsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KICAgIC50b3AtYmFyIC5uYW1lIGgxIGEgewogICAgICB3aWR0aDogYXV0bzsgfQogICAgLyogbGluZSA0MjMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KICAgIC50b3AtYmFyIGlucHV0LAogICAgLnRvcC1iYXIgLmJ1dHRvbiB7CiAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgdG9wOiA3cHg7IH0KICAgIC8qIGxpbmUgNDI5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9wLWJhci5zY3NzICovCiAgICAudG9wLWJhci5leHBhbmRlZCB7CiAgICAgIGJhY2tncm91bmQ6ICMyYTVkODQ7IH0KCiAgLyogbGluZSA0MzIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KICAuY29udGFpbi10by1ncmlkIC50b3AtYmFyIHsKICAgIG1heC13aWR0aDogNjIuNXJlbTsKICAgIG1hcmdpbjogMCBhdXRvOwogICAgbWFyZ2luLWJvdHRvbTogMDsgfQoKICAvKiBsaW5lIDQzOCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogIC50b3AtYmFyLXNlY3Rpb24gewogICAgLXdlYmtpdC10cmFuc2l0aW9uOiBub25lIDAgMDsKICAgIC1tb3otdHJhbnNpdGlvbjogbm9uZSAwIDA7CiAgICB0cmFuc2l0aW9uOiBub25lIDAgMDsKICAgIGxlZnQ6IDAgIWltcG9ydGFudDsgfQogICAgLyogbGluZSA0NDIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KICAgIC50b3AtYmFyLXNlY3Rpb24gdWwgewogICAgICB3aWR0aDogYXV0bzsKICAgICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICAgIGRpc3BsYXk6IGlubGluZTsgfQogICAgICAvKiBsaW5lIDQ0NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogICAgICAudG9wLWJhci1zZWN0aW9uIHVsIGxpIHsKICAgICAgICBmbG9hdDogbGVmdDsgfQogICAgICAgIC8qIGxpbmUgNDQ5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9wLWJhci5zY3NzICovCiAgICAgICAgLnRvcC1iYXItc2VjdGlvbiB1bCBsaSAuanMtZ2VuZXJhdGVkIHsKICAgICAgICAgIGRpc3BsYXk6IG5vbmU7IH0KICAgIC8qIGxpbmUgNDU1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9wLWJhci5zY3NzICovCiAgICAudG9wLWJhci1zZWN0aW9uIGxpLmhvdmVyID4gYTpub3QoLmJ1dHRvbikgewogICAgICBiYWNrZ3JvdW5kOiAjMWYzYzUyOwogICAgICBjb2xvcjogd2hpdGU7IH0KICAgIC8qIGxpbmUgNDYwLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9wLWJhci5zY3NzICovCiAgICAudG9wLWJhci1zZWN0aW9uIGxpIGE6bm90KC5idXR0b24pIHsKICAgICAgcGFkZGluZzogMCAyMHB4OwogICAgICBsaW5lLWhlaWdodDogNjBweDsKICAgICAgYmFja2dyb3VuZDogIzJhNWQ4NDsgfQogICAgICAvKiBsaW5lIDQ2NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogICAgICAudG9wLWJhci1zZWN0aW9uIGxpIGE6bm90KC5idXR0b24pOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMWYzYzUyOyB9CiAgICAvKiBsaW5lIDQ3MiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogICAgLnRvcC1iYXItc2VjdGlvbiAuaGFzLWRyb3Bkb3duID4gYSB7CiAgICAgIHBhZGRpbmctcmlnaHQ6IDQwcHggIWltcG9ydGFudDsgfQogICAgICAvKiBsaW5lIDQ3NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogICAgICAudG9wLWJhci1zZWN0aW9uIC5oYXMtZHJvcGRvd24gPiBhOmFmdGVyIHsKICAgICAgICBjb250ZW50OiAiIjsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMDsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgICAgYm9yZGVyOiBpbnNldCA1cHg7CiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNCkgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7CiAgICAgICAgbWFyZ2luLXRvcDogLTIuNXB4OwogICAgICAgIHRvcDogMzBweDsgfQogICAgLyogbGluZSA0ODMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KICAgIC50b3AtYmFyLXNlY3Rpb24gLmhhcy1kcm9wZG93bi5tb3ZlZCB7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfQogICAgICAvKiBsaW5lIDQ4NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogICAgICAudG9wLWJhci1zZWN0aW9uIC5oYXMtZHJvcGRvd24ubW92ZWQgPiAuZHJvcGRvd24gewogICAgICAgIGRpc3BsYXk6IG5vbmU7IH0KICAgIC8qIGxpbmUgNDg4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9wLWJhci5zY3NzICovCiAgICAudG9wLWJhci1zZWN0aW9uIC5oYXMtZHJvcGRvd24uaG92ZXIgPiAuZHJvcGRvd24sIC50b3AtYmFyLXNlY3Rpb24gLmhhcy1kcm9wZG93bi5ub3QtY2xpY2s6aG92ZXIgPiAuZHJvcGRvd24gewogICAgICBkaXNwbGF5OiBibG9jazsgfQogICAgLyogbGluZSA0OTUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KICAgIC50b3AtYmFyLXNlY3Rpb24gLmhhcy1kcm9wZG93biAuZHJvcGRvd24gbGkuaGFzLWRyb3Bkb3duID4gYTphZnRlciB7CiAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgY29udGVudDogIlwwMGJiIjsKICAgICAgdG9wOiAxcmVtOwogICAgICBtYXJnaW4tdG9wOiAtMnB4OwogICAgICByaWdodDogNXB4OyB9CiAgICAvKiBsaW5lIDUwNywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogICAgLnRvcC1iYXItc2VjdGlvbiAuZHJvcGRvd24gewogICAgICBsZWZ0OiAwOwogICAgICB0b3A6IGF1dG87CiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICBtaW4td2lkdGg6IDEwMCU7IH0KICAgICAgLyogbGluZSA1MTQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL190b3AtYmFyLnNjc3MgKi8KICAgICAgLnRvcC1iYXItc2VjdGlvbiAuZHJvcGRvd24gbGkgYSB7CiAgICAgICAgY29sb3I6ICM1NTU1NTU7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDIwcHg7CiAgICAgICAgYmFja2dyb3VuZDogIzFmM2M1MjsgfQogICAgICAvKiBsaW5lIDUyMiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogICAgICAudG9wLWJhci1zZWN0aW9uIC5kcm9wZG93biBsaSBsYWJlbCB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBiYWNrZ3JvdW5kOiAjMzMzMzMzOyB9CiAgICAgIC8qIGxpbmUgNTI4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9wLWJhci5zY3NzICovCiAgICAgIC50b3AtYmFyLXNlY3Rpb24gLmRyb3Bkb3duIGxpIC5kcm9wZG93biB7CiAgICAgICAgbGVmdDogMTAwJTsKICAgICAgICB0b3A6IDA7IH0KICAgIC8qIGxpbmUgNTM2LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9wLWJhci5zY3NzICovCiAgICAudG9wLWJhci1zZWN0aW9uID4gdWwgPiAuZGl2aWRlciwgLnRvcC1iYXItc2VjdGlvbiA+IHVsID4gW3JvbGU9InNlcGFyYXRvciJdIHsKICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKICAgICAgYm9yZGVyLXRvcDogbm9uZTsKICAgICAgYm9yZGVyLXJpZ2h0OiBzb2xpZCAxcHggIzM2NzhhYjsKICAgICAgY2xlYXI6IG5vbmU7CiAgICAgIGhlaWdodDogNjBweDsKICAgICAgd2lkdGg6IDA7IH0KICAgIC8qIGxpbmUgNTQ1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9wLWJhci5zY3NzICovCiAgICAudG9wLWJhci1zZWN0aW9uIC5oYXMtZm9ybSB7CiAgICAgIGJhY2tncm91bmQ6ICMyYTVkODQ7CiAgICAgIHBhZGRpbmc6IDAgMjBweDsKICAgICAgaGVpZ2h0OiA2MHB4OyB9CiAgICAvKiBsaW5lIDU1MywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogICAgLnRvcC1iYXItc2VjdGlvbiB1bC5yaWdodCBsaSAuZHJvcGRvd24gewogICAgICBsZWZ0OiBhdXRvOwogICAgICByaWdodDogMDsgfQogICAgICAvKiBsaW5lIDU1NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogICAgICAudG9wLWJhci1zZWN0aW9uIHVsLnJpZ2h0IGxpIC5kcm9wZG93biBsaSAuZHJvcGRvd24gewogICAgICAgIHJpZ2h0OiAxMDAlOyB9CgogIC8qIGxpbmUgNTY3LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9wLWJhci5zY3NzICovCiAgLm5vLWpzIC50b3AtYmFyLXNlY3Rpb24gdWwgbGk6aG92ZXIgPiBhIHsKICAgIGJhY2tncm91bmQ6ICMxZjNjNTI7CiAgICBjb2xvcjogd2hpdGU7IH0KICAvKiBsaW5lIDU3MywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyAqLwogIC5uby1qcyAudG9wLWJhci1zZWN0aW9uIHVsIGxpOmFjdGl2ZSA+IGEgewogICAgYmFja2dyb3VuZDogIzFmM2M1MjsKICAgIGNvbG9yOiB3aGl0ZTsgfQogIC8qIGxpbmUgNTgxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdG9wLWJhci5zY3NzICovCiAgLm5vLWpzIC50b3AtYmFyLXNlY3Rpb24gLmhhcy1kcm9wZG93bjpob3ZlciA+IC5kcm9wZG93biB7CiAgICBkaXNwbGF5OiBibG9jazsgfSB9Ci8qIGxpbmUgNjcsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vZmZjYW52YXMuc2NzcyAqLwoub2ZmLWNhbnZhcy13cmFwLCAuaW5uZXItd3JhcCwgbmF2LnRhYi1iYXIsIC5sZWZ0LW9mZi1jYW52YXMtbWVudSwgLmxlZnQtb2ZmLWNhbnZhcy1tZW51ICosIC5yaWdodC1vZmYtY2FudmFzLW1lbnUsIC5tb3ZlLXJpZ2h0IGEuZXhpdC1vZmYtY2FudmFzLCAubW92ZS1sZWZ0IGEuZXhpdC1vZmYtY2FudmFzIHsKICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjsgfQoKLyogbGluZSA3MywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29mZmNhbnZhcy5zY3NzICovCi5vZmYtY2FudmFzLXdyYXAsIC5pbm5lci13cmFwIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgd2lkdGg6IDEwMCU7IH0KCi8qIGxpbmUgNzksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vZmZjYW52YXMuc2NzcyAqLwoubGVmdC1vZmYtY2FudmFzLW1lbnUsIC5yaWdodC1vZmYtY2FudmFzLW1lbnUgewogIHdpZHRoOiAyNTBweDsKICB0b3A6IDA7CiAgYm90dG9tOiAwOwogIGhlaWdodDogMTAwJTsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgb3ZlcmZsb3cteTogYXV0bzsKICBiYWNrZ3JvdW5kOiAjMzMzMzMzOwogIHotaW5kZXg6IDEwMDE7CiAgYm94LXNpemluZzogY29udGVudC1ib3g7IH0KCi8qIGxpbmUgMTUwLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fb2ZmY2FudmFzLnNjc3MgKi8Kc2VjdGlvbi5sZWZ0LXNtYWxsLCBzZWN0aW9uLnJpZ2h0LXNtYWxsIHsKICB3aWR0aDogMi44MTI1cmVtOwogIGhlaWdodDogMi44MTI1cmVtOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDA7IH0KCi8qIGxpbmUgMjcwLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fb2ZmY2FudmFzLnNjc3MgKi8KLm9mZi1jYW52YXMtd3JhcCB7CiAgb3ZlcmZsb3c6IGhpZGRlbjsgfQoKLyogbGluZSAyNzEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vZmZjYW52YXMuc2NzcyAqLwouaW5uZXItd3JhcCB7CiAgKnpvb206IDE7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSA1MDBtcyBlYXNlOwogIC1tb3otdHJhbnNpdGlvbjogLW1vei10cmFuc2Zvcm0gNTAwbXMgZWFzZTsKICAtbXMtdHJhbnNpdGlvbjogLW1zLXRyYW5zZm9ybSA1MDBtcyBlYXNlOwogIC1vLXRyYW5zaXRpb246IC1vLXRyYW5zZm9ybSA1MDBtcyBlYXNlOwogIHRyYW5zaXRpb246IHRyYW5zZm9ybSA1MDBtcyBlYXNlOyB9CiAgLyogbGluZSAxNjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19nbG9iYWwuc2NzcyAqLwogIC5pbm5lci13cmFwOmJlZm9yZSwgLmlubmVyLXdyYXA6YWZ0ZXIgewogICAgY29udGVudDogIiAiOwogICAgZGlzcGxheTogdGFibGU7IH0KICAvKiBsaW5lIDE2NiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX2dsb2JhbC5zY3NzICovCiAgLmlubmVyLXdyYXA6YWZ0ZXIgewogICAgY2xlYXI6IGJvdGg7IH0KCi8qIGxpbmUgMjczLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fb2ZmY2FudmFzLnNjc3MgKi8KbmF2LnRhYi1iYXIgewogIGJhY2tncm91bmQ6ICMzMzMzMzM7CiAgY29sb3I6IHdoaXRlOwogIGhlaWdodDogMi44MTI1cmVtOwogIGxpbmUtaGVpZ2h0OiAyLjgxMjVyZW07CiAgcG9zaXRpb246IHJlbGF0aXZlOyB9CiAgLyogbGluZSAxMzksIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vZmZjYW52YXMuc2NzcyAqLwogIG5hdi50YWItYmFyIGgxLCBuYXYudGFiLWJhciBoMiwgbmF2LnRhYi1iYXIgaDMsIG5hdi50YWItYmFyIGg0LCBuYXYudGFiLWJhciBoNSwgbmF2LnRhYi1iYXIgaDYgewogICAgY29sb3I6IHdoaXRlOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBsaW5lLWhlaWdodDogMi44MTI1cmVtOwogICAgbWFyZ2luOiAwOyB9CiAgLyogbGluZSAxNDUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vZmZjYW52YXMuc2NzcyAqLwogIG5hdi50YWItYmFyIGgxLCBuYXYudGFiLWJhciBoMiwgbmF2LnRhYi1iYXIgaDMsIG5hdi50YWItYmFyIGg0IHsKICAgIGZvbnQtc2l6ZTogMS4xMjVyZW07IH0KCi8qIGxpbmUgMjc1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fb2ZmY2FudmFzLnNjc3MgKi8Kc2VjdGlvbi5sZWZ0LXNtYWxsIHsKICBib3JkZXItcmlnaHQ6IHNvbGlkIDFweCAjMWExYTFhOwogIGJveC1zaGFkb3c6IDFweCAwIDAgIzRkNGQ0ZDsKICBsZWZ0OiAwOyB9CgovKiBsaW5lIDI3NiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29mZmNhbnZhcy5zY3NzICovCnNlY3Rpb24ucmlnaHQtc21hbGwgewogIGJvcmRlci1sZWZ0OiBzb2xpZCAxcHggIzRkNGQ0ZDsKICBib3gtc2hhZG93OiAtMXB4IDAgMCAjMWExYTFhOwogIHJpZ2h0OiAwOyB9CgovKiBsaW5lIDI3OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29mZmNhbnZhcy5zY3NzICovCnNlY3Rpb24udGFiLWJhci1zZWN0aW9uIHsKICBwYWRkaW5nOiAwIDAuNjI1cmVtOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgaGVpZ2h0OiAyLjgxMjVyZW07CiAgdG9wOiAwOyB9CiAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0MC4wNjNlbSkgewogICAgLyogbGluZSAyNzgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vZmZjYW52YXMuc2NzcyAqLwogICAgc2VjdGlvbi50YWItYmFyLXNlY3Rpb24gewogICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9IH0KICAvKiBsaW5lIDE4MiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29mZmNhbnZhcy5zY3NzICovCiAgc2VjdGlvbi50YWItYmFyLXNlY3Rpb24ubGVmdCB7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDIuODEyNXJlbTsgfQogIC8qIGxpbmUgMTg2LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fb2ZmY2FudmFzLnNjc3MgKi8KICBzZWN0aW9uLnRhYi1iYXItc2VjdGlvbi5yaWdodCB7CiAgICBsZWZ0OiAyLjgxMjVyZW07CiAgICByaWdodDogMDsgfQogIC8qIGxpbmUgMTkwLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fb2ZmY2FudmFzLnNjc3MgKi8KICBzZWN0aW9uLnRhYi1iYXItc2VjdGlvbi5taWRkbGUgewogICAgbGVmdDogMi44MTI1cmVtOwogICAgcmlnaHQ6IDIuODEyNXJlbTsgfQoKLyogbGluZSAyODIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vZmZjYW52YXMuc2NzcyAqLwphLm1lbnUtaWNvbiB7CiAgdGV4dC1pbmRlbnQ6IDIuMTg3NXJlbTsKICB3aWR0aDogMi44MTI1cmVtOwogIGhlaWdodDogMi44MTI1cmVtOwogIGRpc3BsYXk6IGJsb2NrOwogIGxpbmUtaGVpZ2h0OiAyLjA2MjVyZW07CiAgcGFkZGluZzogMDsKICBjb2xvcjogd2hpdGU7CiAgcG9zaXRpb246IHJlbGF0aXZlOyB9CiAgLyogbGluZSAyOTMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vZmZjYW52YXMuc2NzcyAqLwogIGEubWVudS1pY29uIHNwYW4gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogMXJlbTsKICAgIGhlaWdodDogMDsKICAgIGxlZnQ6IDAuODEyNXJlbTsKICAgIHRvcDogMC4zMTI1cmVtOwogICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDEwcHggMCAxcHggd2hpdGUsIDAgMTZweCAwIDFweCB3aGl0ZSwgMCAyMnB4IDAgMXB4IHdoaXRlOwogICAgYm94LXNoYWRvdzogMCAxMHB4IDAgMXB4IHdoaXRlLCAwIDE2cHggMCAxcHggd2hpdGUsIDAgMjJweCAwIDFweCB3aGl0ZTsgfQogIC8qIGxpbmUgMzEzLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fb2ZmY2FudmFzLnNjc3MgKi8KICBhLm1lbnUtaWNvbjpob3ZlciBzcGFuIHsKICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAxMHB4IDAgMXB4ICNiM2IzYjMsIDAgMTZweCAwIDFweCAjYjNiM2IzLCAwIDIycHggMCAxcHggI2IzYjNiMzsKICAgIGJveC1zaGFkb3c6IDAgMTBweCAwIDFweCAjYjNiM2IzLCAwIDE2cHggMCAxcHggI2IzYjNiMywgMCAyMnB4IDAgMXB4ICNiM2IzYjM7IH0KCi8qIGxpbmUgMzI1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fb2ZmY2FudmFzLnNjc3MgKi8KLmxlZnQtb2ZmLWNhbnZhcy1tZW51IHsKICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTEwMCUsIDAsIDApOwogIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCk7CiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTEwMCUsIDAsIDApOwogIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTEwMCUsIDAsIDApOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTEwMCUsIDAsIDApOyB9CgovKiBsaW5lIDMyNiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29mZmNhbnZhcy5zY3NzICovCi5yaWdodC1vZmYtY2FudmFzLW1lbnUgewogIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgxMDAlLCAwLCAwKTsKICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMTAwJSwgMCwgMCk7CiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMTAwJSwgMCwgMCk7CiAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgxMDAlLCAwLCAwKTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApOwogIHJpZ2h0OiAwOyB9CgovKiBsaW5lIDMyOCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29mZmNhbnZhcy5zY3NzICovCnVsLm9mZi1jYW52YXMtbGlzdCB7CiAgbGlzdC1zdHlsZS10eXBlOiBub25lOwogIHBhZGRpbmc6IDA7CiAgbWFyZ2luOiAwOyB9CiAgLyogbGluZSAyMDQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vZmZjYW52YXMuc2NzcyAqLwogIHVsLm9mZi1jYW52YXMtbGlzdCBsaSBsYWJlbCB7CiAgICBwYWRkaW5nOiAwLjNyZW0gMC45Mzc1cmVtOwogICAgY29sb3I6ICM5OTk5OTk7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBiYWNrZ3JvdW5kOiAjNDQ0NDQ0OwogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICM1ZTVlNWU7CiAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgbWFyZ2luOiAwOyB9CiAgLyogbGluZSAyMTQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vZmZjYW52YXMuc2NzcyAqLwogIHVsLm9mZi1jYW52YXMtbGlzdCBsaSBhIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcGFkZGluZzogMC42NjY2N3JlbTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzI2MjYyNjsgfQoKLyogbGluZSAzMzQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vZmZjYW52YXMuc2NzcyAqLwoubW92ZS1yaWdodCA+IC5pbm5lci13cmFwIHsKICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMjUwcHgsIDAsIDApOwogIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgyNTBweCwgMCwgMCk7CiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMjUwcHgsIDAsIDApOwogIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMjUwcHgsIDAsIDApOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMjUwcHgsIDAsIDApOyB9Ci8qIGxpbmUgMzM3LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fb2ZmY2FudmFzLnNjc3MgKi8KLm1vdmUtcmlnaHQgYS5leGl0LW9mZi1jYW52YXMgewogIHRyYW5zaXRpb246IGJhY2tncm91bmQgMzAwbXMgZWFzZTsKICBjdXJzb3I6IHBvaW50ZXI7CiAgYm94LXNoYWRvdzogLTRweCAwIDRweCByZ2JhKDAsIDAsIDAsIDAuNSksIDRweCAwIDRweCByZ2JhKDAsIDAsIDAsIDAuNSk7CiAgZGlzcGxheTogYmxvY2s7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICB0b3A6IDA7CiAgYm90dG9tOiAwOwogIGxlZnQ6IDA7CiAgcmlnaHQ6IDA7CiAgei1pbmRleDogMTAwMjsgfQogIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDAuMDYzZW0pIHsKICAgIC8qIGxpbmUgMjQ0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fb2ZmY2FudmFzLnNjc3MgKi8KICAgIC5tb3ZlLXJpZ2h0IGEuZXhpdC1vZmYtY2FudmFzOmhvdmVyIHsKICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsgfSB9CgovKiBsaW5lIDM0MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29mZmNhbnZhcy5zY3NzICovCi5tb3ZlLWxlZnQgPiAuaW5uZXItd3JhcCB7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0yNTBweCwgMCwgMCk7CiAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0yNTBweCwgMCwgMCk7CiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTI1MHB4LCAwLCAwKTsKICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0yNTBweCwgMCwgMCk7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtMjUwcHgsIDAsIDApOyB9Ci8qIGxpbmUgMzQ1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fb2ZmY2FudmFzLnNjc3MgKi8KLm1vdmUtbGVmdCBhLmV4aXQtb2ZmLWNhbnZhcyB7CiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAzMDBtcyBlYXNlOwogIGN1cnNvcjogcG9pbnRlcjsKICBib3gtc2hhZG93OiAtNHB4IDAgNHB4IHJnYmEoMCwgMCwgMCwgMC41KSwgNHB4IDAgNHB4IHJnYmEoMCwgMCwgMCwgMC41KTsKICBkaXNwbGF5OiBibG9jazsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwogIHRvcDogMDsKICBib3R0b206IDA7CiAgbGVmdDogMDsKICByaWdodDogMDsKICB6LWluZGV4OiAxMDAyOyB9CiAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0MC4wNjNlbSkgewogICAgLyogbGluZSAyNDQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vZmZjYW52YXMuc2NzcyAqLwogICAgLm1vdmUtbGVmdCBhLmV4aXQtb2ZmLWNhbnZhczpob3ZlciB7CiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7IH0gfQoKLyogbGluZSAzNTMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vZmZjYW52YXMuc2NzcyAqLwoubHQtaWUxMCAubGVmdC1vZmYtY2FudmFzLW1lbnUgewogIGxlZnQ6IC0yNTBweDsgfQovKiBsaW5lIDM1NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29mZmNhbnZhcy5zY3NzICovCi5sdC1pZTEwIC5yaWdodC1vZmYtY2FudmFzLW1lbnUgewogIHJpZ2h0OiAtMjUwcHg7IH0KLyogbGluZSAzNTcsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL19vZmZjYW52YXMuc2NzcyAqLwoubHQtaWUxMCAubW92ZS1sZWZ0ID4gLmlubmVyLXdyYXAgewogIHJpZ2h0OiAyNTBweDsgfQovKiBsaW5lIDM1OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX29mZmNhbnZhcy5zY3NzICovCi5sdC1pZTEwIC5tb3ZlLXJpZ2h0ID4gLmlubmVyLXdyYXAgewogIGxlZnQ6IDI1MHB4OyB9CgovKiBGb3VuZGF0aW9uIFZpc2liaWxpdHkgSFRNTCBDbGFzc2VzICovCi8qIGxpbmUgMjcsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL192aXNpYmlsaXR5LnNjc3MgKi8KLnNob3ctZm9yLXNtYWxsLAouc2hvdy1mb3Itc21hbGwtb25seSwKLnNob3ctZm9yLW1lZGl1bS1kb3duLAouc2hvdy1mb3ItbGFyZ2UtZG93biwKLmhpZGUtZm9yLW1lZGl1bSwKLmhpZGUtZm9yLW1lZGl1bS11cCwKLmhpZGUtZm9yLW1lZGl1bS1vbmx5LAouaGlkZS1mb3ItbGFyZ2UsCi5oaWRlLWZvci1sYXJnZS11cCwKLmhpZGUtZm9yLWxhcmdlLW9ubHksCi5oaWRlLWZvci14bGFyZ2UsCi5oaWRlLWZvci14bGFyZ2UtdXAsCi5oaWRlLWZvci14bGFyZ2Utb25seSwKLmhpZGUtZm9yLXh4bGFyZ2UtdXAsCi5oaWRlLWZvci14eGxhcmdlLW9ubHkgewogIGRpc3BsYXk6IGluaGVyaXQgIWltcG9ydGFudDsgfQoKLyogbGluZSA0MywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwouaGlkZS1mb3Itc21hbGwsCi5oaWRlLWZvci1zbWFsbC1vbmx5LAouaGlkZS1mb3ItbWVkaXVtLWRvd24sCi5zaG93LWZvci1tZWRpdW0sCi5zaG93LWZvci1tZWRpdW0tdXAsCi5zaG93LWZvci1tZWRpdW0tb25seSwKLmhpZGUtZm9yLWxhcmdlLWRvd24sCi5zaG93LWZvci1sYXJnZSwKLnNob3ctZm9yLWxhcmdlLXVwLAouc2hvdy1mb3ItbGFyZ2Utb25seSwKLnNob3ctZm9yLXhsYXJnZSwKLnNob3ctZm9yLXhsYXJnZS11cCwKLnNob3ctZm9yLXhsYXJnZS1vbmx5LAouc2hvdy1mb3IteHhsYXJnZS11cCwKLnNob3ctZm9yLXh4bGFyZ2Utb25seSB7CiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9CgovKiBTcGVjaWZpYyB2aXNpYmlsaXR5IGZvciB0YWJsZXMgKi8KLyogbGluZSA2MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwp0YWJsZS5zaG93LWZvci1zbWFsbCwgdGFibGUuc2hvdy1mb3Itc21hbGwtb25seSwgdGFibGUuc2hvdy1mb3ItbWVkaXVtLWRvd24sIHRhYmxlLnNob3ctZm9yLWxhcmdlLWRvd24sIHRhYmxlLmhpZGUtZm9yLW1lZGl1bSwgdGFibGUuaGlkZS1mb3ItbWVkaXVtLXVwLCB0YWJsZS5oaWRlLWZvci1tZWRpdW0tb25seSwgdGFibGUuaGlkZS1mb3ItbGFyZ2UsIHRhYmxlLmhpZGUtZm9yLWxhcmdlLXVwLCB0YWJsZS5oaWRlLWZvci1sYXJnZS1vbmx5LCB0YWJsZS5oaWRlLWZvci14bGFyZ2UsIHRhYmxlLmhpZGUtZm9yLXhsYXJnZS11cCwgdGFibGUuaGlkZS1mb3IteGxhcmdlLW9ubHksIHRhYmxlLmhpZGUtZm9yLXh4bGFyZ2UtdXAsIHRhYmxlLmhpZGUtZm9yLXh4bGFyZ2Utb25seSB7CiAgZGlzcGxheTogdGFibGU7IH0KCi8qIGxpbmUgNzgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL192aXNpYmlsaXR5LnNjc3MgKi8KdGhlYWQuc2hvdy1mb3Itc21hbGwsIHRoZWFkLnNob3ctZm9yLXNtYWxsLW9ubHksIHRoZWFkLnNob3ctZm9yLW1lZGl1bS1kb3duLCB0aGVhZC5zaG93LWZvci1sYXJnZS1kb3duLCB0aGVhZC5oaWRlLWZvci1tZWRpdW0sIHRoZWFkLmhpZGUtZm9yLW1lZGl1bS11cCwgdGhlYWQuaGlkZS1mb3ItbWVkaXVtLW9ubHksIHRoZWFkLmhpZGUtZm9yLWxhcmdlLCB0aGVhZC5oaWRlLWZvci1sYXJnZS11cCwgdGhlYWQuaGlkZS1mb3ItbGFyZ2Utb25seSwgdGhlYWQuaGlkZS1mb3IteGxhcmdlLCB0aGVhZC5oaWRlLWZvci14bGFyZ2UtdXAsIHRoZWFkLmhpZGUtZm9yLXhsYXJnZS1vbmx5LCB0aGVhZC5oaWRlLWZvci14eGxhcmdlLXVwLCB0aGVhZC5oaWRlLWZvci14eGxhcmdlLW9ubHkgewogIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cCAhaW1wb3J0YW50OyB9CgovKiBsaW5lIDk1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdmlzaWJpbGl0eS5zY3NzICovCnRib2R5LnNob3ctZm9yLXNtYWxsLCB0Ym9keS5zaG93LWZvci1zbWFsbC1vbmx5LCB0Ym9keS5zaG93LWZvci1tZWRpdW0tZG93biwgdGJvZHkuc2hvdy1mb3ItbGFyZ2UtZG93biwgdGJvZHkuaGlkZS1mb3ItbWVkaXVtLCB0Ym9keS5oaWRlLWZvci1tZWRpdW0tdXAsIHRib2R5LmhpZGUtZm9yLW1lZGl1bS1vbmx5LCB0Ym9keS5oaWRlLWZvci1sYXJnZSwgdGJvZHkuaGlkZS1mb3ItbGFyZ2UtdXAsIHRib2R5LmhpZGUtZm9yLWxhcmdlLW9ubHksIHRib2R5LmhpZGUtZm9yLXhsYXJnZSwgdGJvZHkuaGlkZS1mb3IteGxhcmdlLXVwLCB0Ym9keS5oaWRlLWZvci14bGFyZ2Utb25seSwgdGJvZHkuaGlkZS1mb3IteHhsYXJnZS11cCwgdGJvZHkuaGlkZS1mb3IteHhsYXJnZS1vbmx5IHsKICBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXAgIWltcG9ydGFudDsgfQoKLyogbGluZSAxMTIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL192aXNpYmlsaXR5LnNjc3MgKi8KdHIuc2hvdy1mb3Itc21hbGwsIHRyLnNob3ctZm9yLXNtYWxsLW9ubHksIHRyLnNob3ctZm9yLW1lZGl1bS1kb3duLCB0ci5zaG93LWZvci1sYXJnZS1kb3duLCB0ci5oaWRlLWZvci1tZWRpdW0sIHRyLmhpZGUtZm9yLW1lZGl1bS11cCwgdHIuaGlkZS1mb3ItbWVkaXVtLW9ubHksIHRyLmhpZGUtZm9yLWxhcmdlLCB0ci5oaWRlLWZvci1sYXJnZS11cCwgdHIuaGlkZS1mb3ItbGFyZ2Utb25seSwgdHIuaGlkZS1mb3IteGxhcmdlLCB0ci5oaWRlLWZvci14bGFyZ2UtdXAsIHRyLmhpZGUtZm9yLXhsYXJnZS1vbmx5LCB0ci5oaWRlLWZvci14eGxhcmdlLXVwLCB0ci5oaWRlLWZvci14eGxhcmdlLW9ubHkgewogIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50OyB9CgovKiBsaW5lIDEyNiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwp0ZC5zaG93LWZvci1zbWFsbCwgdGQuc2hvdy1mb3Itc21hbGwtb25seSwgdGQuc2hvdy1mb3ItbWVkaXVtLWRvd24KdGQuc2hvdy1mb3ItbGFyZ2UtZG93biwgdGQuaGlkZS1mb3ItbWVkaXVtLCB0ZC5oaWRlLWZvci1tZWRpdW0tdXAsIHRkLmhpZGUtZm9yLWxhcmdlLCB0ZC5oaWRlLWZvci1sYXJnZS11cCwgdGQuaGlkZS1mb3IteGxhcmdlCnRkLmhpZGUtZm9yLXhsYXJnZS11cCwgdGQuaGlkZS1mb3IteHhsYXJnZS11cCwKdGguc2hvdy1mb3Itc21hbGwsCnRoLnNob3ctZm9yLXNtYWxsLW9ubHksCnRoLnNob3ctZm9yLW1lZGl1bS1kb3duCnRoLnNob3ctZm9yLWxhcmdlLWRvd24sCnRoLmhpZGUtZm9yLW1lZGl1bSwKdGguaGlkZS1mb3ItbWVkaXVtLXVwLAp0aC5oaWRlLWZvci1sYXJnZSwKdGguaGlkZS1mb3ItbGFyZ2UtdXAsCnRoLmhpZGUtZm9yLXhsYXJnZQp0aC5oaWRlLWZvci14bGFyZ2UtdXAsCnRoLmhpZGUtZm9yLXh4bGFyZ2UtdXAgewogIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDsgfQoKLyogTWVkaXVtIERpc3BsYXlzOiA2NDFweCBhbmQgdXAgKi8KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0MC4wNjNlbSkgewogIC8qIGxpbmUgMTQ0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdmlzaWJpbGl0eS5zY3NzICovCiAgLmhpZGUtZm9yLXNtYWxsLAogIC5oaWRlLWZvci1zbWFsbC1vbmx5LAogIC5zaG93LWZvci1tZWRpdW0sCiAgLnNob3ctZm9yLW1lZGl1bS1kb3duLAogIC5zaG93LWZvci1tZWRpdW0tdXAsCiAgLnNob3ctZm9yLW1lZGl1bS1vbmx5LAogIC5oaWRlLWZvci1sYXJnZSwKICAuaGlkZS1mb3ItbGFyZ2UtdXAsCiAgLmhpZGUtZm9yLWxhcmdlLW9ubHksCiAgLmhpZGUtZm9yLXhsYXJnZSwKICAuaGlkZS1mb3IteGxhcmdlLXVwLAogIC5oaWRlLWZvci14bGFyZ2Utb25seSwKICAuaGlkZS1mb3IteHhsYXJnZS11cCwKICAuaGlkZS1mb3IteHhsYXJnZS1vbmx5IHsKICAgIGRpc3BsYXk6IGluaGVyaXQgIWltcG9ydGFudDsgfQoKICAvKiBsaW5lIDE2MCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwogIC5zaG93LWZvci1zbWFsbCwKICAuc2hvdy1mb3Itc21hbGwtb25seSwKICAuaGlkZS1mb3ItbWVkaXVtLAogIC5oaWRlLWZvci1tZWRpdW0tZG93biwKICAuaGlkZS1mb3ItbWVkaXVtLXVwLAogIC5oaWRlLWZvci1tZWRpdW0tb25seSwKICAuaGlkZS1mb3ItbGFyZ2UtZG93biwKICAuc2hvdy1mb3ItbGFyZ2UsCiAgLnNob3ctZm9yLWxhcmdlLXVwLAogIC5zaG93LWZvci1sYXJnZS1vbmx5LAogIC5zaG93LWZvci14bGFyZ2UsCiAgLnNob3ctZm9yLXhsYXJnZS11cCwKICAuc2hvdy1mb3IteGxhcmdlLW9ubHksCiAgLnNob3ctZm9yLXh4bGFyZ2UtdXAsCiAgLnNob3ctZm9yLXh4bGFyZ2Utb25seSB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KCiAgLyogU3BlY2lmaWMgdmlzaWJpbGl0eSBmb3IgdGFibGVzICovCiAgLyogbGluZSAxNzcsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL192aXNpYmlsaXR5LnNjc3MgKi8KICB0YWJsZS5oaWRlLWZvci1zbWFsbCwgdGFibGUuaGlkZS1mb3Itc21hbGwtb25seSwgdGFibGUuc2hvdy1mb3ItbWVkaXVtLCB0YWJsZS5zaG93LWZvci1tZWRpdW0tZG93biwgdGFibGUuc2hvdy1mb3ItbWVkaXVtLXVwLCB0YWJsZS5zaG93LWZvci1tZWRpdW0tb25seSwgdGFibGUuaGlkZS1mb3ItbGFyZ2UsIHRhYmxlLmhpZGUtZm9yLWxhcmdlLXVwLCB0YWJsZS5oaWRlLWZvci1sYXJnZS1vbmx5LCB0YWJsZS5oaWRlLWZvci14bGFyZ2UsIHRhYmxlLmhpZGUtZm9yLXhsYXJnZS11cCwgdGFibGUuaGlkZS1mb3IteGxhcmdlLW9ubHksIHRhYmxlLmhpZGUtZm9yLXh4bGFyZ2UtdXAsIHRhYmxlLmhpZGUtZm9yLXh4bGFyZ2Utb25seSB7CiAgICBkaXNwbGF5OiB0YWJsZTsgfQoKICAvKiBsaW5lIDE5MywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwogIHRoZWFkLmhpZGUtZm9yLXNtYWxsLCB0aGVhZC5oaWRlLWZvci1zbWFsbC1vbmx5LCB0aGVhZC5zaG93LWZvci1tZWRpdW0sIHRoZWFkLnNob3ctZm9yLW1lZGl1bS1kb3duLCB0aGVhZC5zaG93LWZvci1tZWRpdW0tdXAsIHRoZWFkLnNob3ctZm9yLW1lZGl1bS1vbmx5LCB0aGVhZC5oaWRlLWZvci1sYXJnZSwgdGhlYWQuaGlkZS1mb3ItbGFyZ2UtdXAsIHRoZWFkLmhpZGUtZm9yLWxhcmdlLW9ubHksIHRoZWFkLmhpZGUtZm9yLXhsYXJnZSwgdGhlYWQuaGlkZS1mb3IteGxhcmdlLXVwLCB0aGVhZC5oaWRlLWZvci14bGFyZ2Utb25seSwgdGhlYWQuaGlkZS1mb3IteHhsYXJnZS11cCwgdGhlYWQuaGlkZS1mb3IteHhsYXJnZS1vbmx5IHsKICAgIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cCAhaW1wb3J0YW50OyB9CgogIC8qIGxpbmUgMjA5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdmlzaWJpbGl0eS5zY3NzICovCiAgdGJvZHkuaGlkZS1mb3Itc21hbGwsIHRib2R5LmhpZGUtZm9yLXNtYWxsLW9ubHksIHRib2R5LnNob3ctZm9yLW1lZGl1bSwgdGJvZHkuc2hvdy1mb3ItbWVkaXVtLWRvd24sIHRib2R5LnNob3ctZm9yLW1lZGl1bS11cCwgdGJvZHkuc2hvdy1mb3ItbWVkaXVtLW9ubHksIHRib2R5LmhpZGUtZm9yLWxhcmdlLCB0Ym9keS5oaWRlLWZvci1sYXJnZS11cCwgdGJvZHkuaGlkZS1mb3ItbGFyZ2Utb25seSwgdGJvZHkuaGlkZS1mb3IteGxhcmdlLCB0Ym9keS5oaWRlLWZvci14bGFyZ2UtdXAsIHRib2R5LmhpZGUtZm9yLXhsYXJnZS1vbmx5LCB0Ym9keS5oaWRlLWZvci14eGxhcmdlLXVwLCB0Ym9keS5oaWRlLWZvci14eGxhcmdlLW9ubHkgewogICAgZGlzcGxheTogdGFibGUtcm93LWdyb3VwICFpbXBvcnRhbnQ7IH0KCiAgLyogbGluZSAyMjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL192aXNpYmlsaXR5LnNjc3MgKi8KICB0ci5oaWRlLWZvci1zbWFsbCwgdHIuaGlkZS1mb3Itc21hbGwtb25seSwgdHIuc2hvdy1mb3ItbWVkaXVtLCB0ci5zaG93LWZvci1tZWRpdW0tZG93biwgdHIuc2hvdy1mb3ItbWVkaXVtLXVwLCB0ci5zaG93LWZvci1tZWRpdW0tb25seSwgdHIuaGlkZS1mb3ItbGFyZ2UsIHRyLmhpZGUtZm9yLWxhcmdlLXVwLCB0ci5oaWRlLWZvci1sYXJnZS1vbmx5LCB0ci5oaWRlLWZvci14bGFyZ2UsIHRyLmhpZGUtZm9yLXhsYXJnZS11cCwgdHIuaGlkZS1mb3IteGxhcmdlLW9ubHksIHRyLmhpZGUtZm9yLXh4bGFyZ2UtdXAsIHRyLmhpZGUtZm9yLXh4bGFyZ2Utb25seSB7CiAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudDsgfQoKICAvKiBsaW5lIDI0MiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwogIHRkLmhpZGUtZm9yLXNtYWxsLCB0ZC5oaWRlLWZvci1zbWFsbC1vbmx5LCB0ZC5zaG93LWZvci1tZWRpdW0sIHRkLnNob3ctZm9yLW1lZGl1bS1kb3duLCB0ZC5zaG93LWZvci1tZWRpdW0tdXAsIHRkLnNob3ctZm9yLW1lZGl1bS1vbmx5LCB0ZC5oaWRlLWZvci1sYXJnZSwgdGQuaGlkZS1mb3ItbGFyZ2UtdXAsIHRkLmhpZGUtZm9yLWxhcmdlLW9ubHksIHRkLmhpZGUtZm9yLXhsYXJnZSwgdGQuaGlkZS1mb3IteGxhcmdlLXVwLCB0ZC5oaWRlLWZvci14bGFyZ2Utb25seSwgdGQuaGlkZS1mb3IteHhsYXJnZS11cCwgdGQuaGlkZS1mb3IteHhsYXJnZS1vbmx5LAogIHRoLmhpZGUtZm9yLXNtYWxsLAogIHRoLmhpZGUtZm9yLXNtYWxsLW9ubHksCiAgdGguc2hvdy1mb3ItbWVkaXVtLAogIHRoLnNob3ctZm9yLW1lZGl1bS1kb3duLAogIHRoLnNob3ctZm9yLW1lZGl1bS11cCwKICB0aC5zaG93LWZvci1tZWRpdW0tb25seSwKICB0aC5oaWRlLWZvci1sYXJnZSwKICB0aC5oaWRlLWZvci1sYXJnZS11cCwKICB0aC5oaWRlLWZvci1sYXJnZS1vbmx5LAogIHRoLmhpZGUtZm9yLXhsYXJnZSwKICB0aC5oaWRlLWZvci14bGFyZ2UtdXAsCiAgdGguaGlkZS1mb3IteGxhcmdlLW9ubHksCiAgdGguaGlkZS1mb3IteHhsYXJnZS11cCwKICB0aC5oaWRlLWZvci14eGxhcmdlLW9ubHkgewogICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50OyB9IH0KLyogTGFyZ2UgRGlzcGxheXM6IDEwMjRweCBhbmQgdXAgKi8KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NC4wNjNlbSkgewogIC8qIGxpbmUgMjYxLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdmlzaWJpbGl0eS5zY3NzICovCiAgLmhpZGUtZm9yLXNtYWxsLAogIC5oaWRlLWZvci1zbWFsbC1vbmx5LAogIC5oaWRlLWZvci1tZWRpdW0sCiAgLmhpZGUtZm9yLW1lZGl1bS1kb3duLAogIC5oaWRlLWZvci1tZWRpdW0tb25seSwKICAuc2hvdy1mb3ItbWVkaXVtLXVwLAogIC5zaG93LWZvci1sYXJnZSwKICAuc2hvdy1mb3ItbGFyZ2UtdXAsCiAgLnNob3ctZm9yLWxhcmdlLW9ubHksCiAgLmhpZGUtZm9yLXhsYXJnZSwKICAuaGlkZS1mb3IteGxhcmdlLXVwLAogIC5oaWRlLWZvci14bGFyZ2Utb25seSwKICAuaGlkZS1mb3IteHhsYXJnZS11cCwKICAuaGlkZS1mb3IteHhsYXJnZS1vbmx5IHsKICAgIGRpc3BsYXk6IGluaGVyaXQgIWltcG9ydGFudDsgfQoKICAvKiBsaW5lIDI3NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwogIC5zaG93LWZvci1zbWFsbC1vbmx5LAogIC5zaG93LWZvci1tZWRpdW0sCiAgLnNob3ctZm9yLW1lZGl1bS1kb3duLAogIC5zaG93LWZvci1tZWRpdW0tb25seSwKICAuaGlkZS1mb3ItbGFyZ2UsCiAgLmhpZGUtZm9yLWxhcmdlLXVwLAogIC5oaWRlLWZvci1sYXJnZS1vbmx5LAogIC5zaG93LWZvci14bGFyZ2UsCiAgLnNob3ctZm9yLXhsYXJnZS11cCwKICAuc2hvdy1mb3IteGxhcmdlLW9ubHksCiAgLnNob3ctZm9yLXh4bGFyZ2UtdXAsCiAgLnNob3ctZm9yLXh4bGFyZ2Utb25seSB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KCiAgLyogU3BlY2lmaWMgdmlzaWxiaXR5IGZvciB0YWJsZXMgKi8KICAvKiBsaW5lIDI5MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwogIHRhYmxlLmhpZGUtZm9yLXNtYWxsLCB0YWJsZS5oaWRlLWZvci1zbWFsbC1vbmx5LCB0YWJsZS5oaWRlLWZvci1tZWRpdW0sIHRhYmxlLmhpZGUtZm9yLW1lZGl1bS1kb3duLCB0YWJsZS5oaWRlLWZvci1tZWRpdW0tb25seSwgdGFibGUuc2hvdy1mb3ItbWVkaXVtLXVwLCB0YWJsZS5zaG93LWZvci1sYXJnZSwgdGFibGUuc2hvdy1mb3ItbGFyZ2UtdXAsIHRhYmxlLnNob3ctZm9yLWxhcmdlLW9ubHksIHRhYmxlLmhpZGUtZm9yLXhsYXJnZSwgdGFibGUuaGlkZS1mb3IteGxhcmdlLXVwLCB0YWJsZS5oaWRlLWZvci14bGFyZ2Utb25seSwgdGFibGUuaGlkZS1mb3IteHhsYXJnZS11cCwgdGFibGUuaGlkZS1mb3IteHhsYXJnZS1vbmx5IHsKICAgIGRpc3BsYXk6IHRhYmxlOyB9CgogIC8qIGxpbmUgMzA3LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdmlzaWJpbGl0eS5zY3NzICovCiAgdGhlYWQuaGlkZS1mb3Itc21hbGwsIHRoZWFkLmhpZGUtZm9yLXNtYWxsLW9ubHksIHRoZWFkLmhpZGUtZm9yLW1lZGl1bSwgdGhlYWQuaGlkZS1mb3ItbWVkaXVtLWRvd24sIHRoZWFkLmhpZGUtZm9yLW1lZGl1bS1vbmx5LCB0aGVhZC5zaG93LWZvci1tZWRpdW0tdXAsIHRoZWFkLnNob3ctZm9yLWxhcmdlLCB0aGVhZC5zaG93LWZvci1sYXJnZS11cCwgdGhlYWQuc2hvdy1mb3ItbGFyZ2Utb25seSwgdGhlYWQuaGlkZS1mb3IteGxhcmdlLCB0aGVhZC5oaWRlLWZvci14bGFyZ2UtdXAsIHRoZWFkLmhpZGUtZm9yLXhsYXJnZS1vbmx5LCB0aGVhZC5oaWRlLWZvci14eGxhcmdlLXVwLCB0aGVhZC5oaWRlLWZvci14eGxhcmdlLW9ubHkgewogICAgZGlzcGxheTogdGFibGUtaGVhZGVyLWdyb3VwICFpbXBvcnRhbnQ7IH0KCiAgLyogbGluZSAzMjMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL192aXNpYmlsaXR5LnNjc3MgKi8KICB0Ym9keS5oaWRlLWZvci1zbWFsbCwgdGJvZHkuaGlkZS1mb3Itc21hbGwtb25seSwgdGJvZHkuaGlkZS1mb3ItbWVkaXVtLCB0Ym9keS5oaWRlLWZvci1tZWRpdW0tZG93biwgdGJvZHkuaGlkZS1mb3ItbWVkaXVtLW9ubHksIHRib2R5LnNob3ctZm9yLW1lZGl1bS11cCwgdGJvZHkuc2hvdy1mb3ItbGFyZ2UsIHRib2R5LnNob3ctZm9yLWxhcmdlLXVwLCB0Ym9keS5zaG93LWZvci1sYXJnZS1vbmx5LCB0Ym9keS5oaWRlLWZvci14bGFyZ2UsIHRib2R5LmhpZGUtZm9yLXhsYXJnZS11cCwgdGJvZHkuaGlkZS1mb3IteGxhcmdlLW9ubHksIHRib2R5LmhpZGUtZm9yLXh4bGFyZ2UtdXAsIHRib2R5LmhpZGUtZm9yLXh4bGFyZ2Utb25seSB7CiAgICBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXAgIWltcG9ydGFudDsgfQoKICAvKiBsaW5lIDMzOSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwogIHRyLmhpZGUtZm9yLXNtYWxsLCB0ci5oaWRlLWZvci1zbWFsbC1vbmx5LCB0ci5oaWRlLWZvci1tZWRpdW0sIHRyLmhpZGUtZm9yLW1lZGl1bS1kb3duLCB0ci5oaWRlLWZvci1tZWRpdW0tb25seSwgdHIuc2hvdy1mb3ItbWVkaXVtLXVwLCB0ci5zaG93LWZvci1sYXJnZSwgdHIuc2hvdy1mb3ItbGFyZ2UtdXAsIHRyLnNob3ctZm9yLWxhcmdlLW9ubHksIHRyLmhpZGUtZm9yLXhsYXJnZSwgdHIuaGlkZS1mb3IteGxhcmdlLXVwLCB0ci5oaWRlLWZvci14bGFyZ2Utb25seSwgdHIuaGlkZS1mb3IteHhsYXJnZS11cCwgdHIuaGlkZS1mb3IteHhsYXJnZS1vbmx5IHsKICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50OyB9CgogIC8qIGxpbmUgMzU2LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdmlzaWJpbGl0eS5zY3NzICovCiAgdGQuaGlkZS1mb3Itc21hbGwsIHRkLmhpZGUtZm9yLXNtYWxsLW9ubHksIHRkLmhpZGUtZm9yLW1lZGl1bSwgdGQuaGlkZS1mb3ItbWVkaXVtLWRvd24sIHRkLmhpZGUtZm9yLW1lZGl1bS1vbmx5LCB0ZC5zaG93LWZvci1tZWRpdW0tdXAsIHRkLnNob3ctZm9yLWxhcmdlLCB0ZC5zaG93LWZvci1sYXJnZS11cCwgdGQuc2hvdy1mb3ItbGFyZ2Utb25seSwgdGQuaGlkZS1mb3IteGxhcmdlLCB0ZC5oaWRlLWZvci14bGFyZ2UtdXAsIHRkLmhpZGUtZm9yLXhsYXJnZS1vbmx5LCB0ZC5oaWRlLWZvci14eGxhcmdlLXVwLCB0ZC5oaWRlLWZvci14eGxhcmdlLW9ubHksCiAgdGguaGlkZS1mb3Itc21hbGwsCiAgdGguaGlkZS1mb3Itc21hbGwtb25seSwKICB0aC5oaWRlLWZvci1tZWRpdW0sCiAgdGguaGlkZS1mb3ItbWVkaXVtLWRvd24sCiAgdGguaGlkZS1mb3ItbWVkaXVtLW9ubHksCiAgdGguc2hvdy1mb3ItbWVkaXVtLXVwLAogIHRoLnNob3ctZm9yLWxhcmdlLAogIHRoLnNob3ctZm9yLWxhcmdlLXVwLAogIHRoLnNob3ctZm9yLWxhcmdlLW9ubHksCiAgdGguaGlkZS1mb3IteGxhcmdlLAogIHRoLmhpZGUtZm9yLXhsYXJnZS11cCwKICB0aC5oaWRlLWZvci14bGFyZ2Utb25seSwKICB0aC5oaWRlLWZvci14eGxhcmdlLXVwLAogIHRoLmhpZGUtZm9yLXh4bGFyZ2Utb25seSB7CiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7IH0gfQovKiBYLUxhcmdlIERpc3BsYXlzOiAxNDQxIGFuZCB1cCAqLwpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDkwLjA2M2VtKSB7CiAgLyogbGluZSAzNzMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL192aXNpYmlsaXR5LnNjc3MgKi8KICAuaGlkZS1mb3Itc21hbGwsCiAgLmhpZGUtZm9yLXNtYWxsLW9ubHksCiAgLmhpZGUtZm9yLW1lZGl1bSwKICAuaGlkZS1mb3ItbWVkaXVtLWRvd24sCiAgLmhpZGUtZm9yLW1lZGl1bS1vbmx5LAogIC5zaG93LWZvci1tZWRpdW0tdXAsCiAgLnNob3ctZm9yLWxhcmdlLXVwLAogIC5zaG93LWZvci14bGFyZ2UsCiAgLnNob3ctZm9yLXhsYXJnZS11cCwKICAuc2hvdy1mb3IteGxhcmdlLW9ubHksCiAgLmhpZGUtZm9yLXh4bGFyZ2UtdXAsCiAgLmhpZGUtZm9yLXh4bGFyZ2Utb25seSB7CiAgICBkaXNwbGF5OiBpbmhlcml0ICFpbXBvcnRhbnQ7IH0KCiAgLyogbGluZSAzODYsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL192aXNpYmlsaXR5LnNjc3MgKi8KICAuc2hvdy1mb3Itc21hbGwtb25seSwKICAuc2hvdy1mb3ItbWVkaXVtLAogIC5zaG93LWZvci1tZWRpdW0tZG93biwKICAuc2hvdy1mb3ItbWVkaXVtLW9ubHksCiAgLnNob3ctZm9yLWxhcmdlLAogIC5zaG93LWZvci1sYXJnZS1vbmx5LAogIC5zaG93LWZvci1sYXJnZS1kb3duLAogIC5oaWRlLWZvci14bGFyZ2UsCiAgLmhpZGUtZm9yLXhsYXJnZS11cCwKICAuaGlkZS1mb3IteGxhcmdlLW9ubHksCiAgLnNob3ctZm9yLXh4bGFyZ2UtdXAsCiAgLnNob3ctZm9yLXh4bGFyZ2Utb25seSB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KCiAgLyogU3BlY2lmaWMgdmlzaWxiaXR5IGZvciB0YWJsZXMgKi8KICAvKiBsaW5lIDQwMSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwogIHRhYmxlLmhpZGUtZm9yLXNtYWxsLCB0YWJsZS5oaWRlLWZvci1zbWFsbC1vbmx5LCB0YWJsZS5oaWRlLWZvci1tZWRpdW0sIHRhYmxlLmhpZGUtZm9yLW1lZGl1bS1kb3duLCB0YWJsZS5oaWRlLWZvci1tZWRpdW0tb25seSwgdGFibGUuc2hvdy1mb3ItbWVkaXVtLXVwLCB0YWJsZS5zaG93LWZvci1sYXJnZS11cCwgdGFibGUuc2hvdy1mb3IteGxhcmdlLCB0YWJsZS5zaG93LWZvci14bGFyZ2UtdXAsIHRhYmxlLnNob3ctZm9yLXhsYXJnZS1vbmx5LCB0YWJsZS5oaWRlLWZvci14eGxhcmdlLXVwLCB0YWJsZS5oaWRlLWZvci14eGxhcmdlLW9ubHkgewogICAgZGlzcGxheTogdGFibGU7IH0KCiAgLyogbGluZSA0MTUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL192aXNpYmlsaXR5LnNjc3MgKi8KICB0aGVhZC5oaWRlLWZvci1zbWFsbCwgdGhlYWQuaGlkZS1mb3Itc21hbGwtb25seSwgdGhlYWQuaGlkZS1mb3ItbWVkaXVtLCB0aGVhZC5oaWRlLWZvci1tZWRpdW0tZG93biwgdGhlYWQuaGlkZS1mb3ItbWVkaXVtLW9ubHksIHRoZWFkLnNob3ctZm9yLW1lZGl1bS11cCwgdGhlYWQuc2hvdy1mb3ItbGFyZ2UtdXAsIHRoZWFkLnNob3ctZm9yLXhsYXJnZSwgdGhlYWQuc2hvdy1mb3IteGxhcmdlLXVwLCB0aGVhZC5zaG93LWZvci14bGFyZ2Utb25seSwgdGhlYWQuaGlkZS1mb3IteHhsYXJnZS11cCwgdGhlYWQuaGlkZS1mb3IteHhsYXJnZS1vbmx5IHsKICAgIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cCAhaW1wb3J0YW50OyB9CgogIC8qIGxpbmUgNDI5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdmlzaWJpbGl0eS5zY3NzICovCiAgdGJvZHkuaGlkZS1mb3Itc21hbGwsIHRib2R5LmhpZGUtZm9yLXNtYWxsLW9ubHksIHRib2R5LmhpZGUtZm9yLW1lZGl1bSwgdGJvZHkuaGlkZS1mb3ItbWVkaXVtLWRvd24sIHRib2R5LmhpZGUtZm9yLW1lZGl1bS1vbmx5LCB0Ym9keS5zaG93LWZvci1tZWRpdW0tdXAsIHRib2R5LnNob3ctZm9yLWxhcmdlLXVwLCB0Ym9keS5zaG93LWZvci14bGFyZ2UsIHRib2R5LnNob3ctZm9yLXhsYXJnZS11cCwgdGJvZHkuc2hvdy1mb3IteGxhcmdlLW9ubHksIHRib2R5LmhpZGUtZm9yLXh4bGFyZ2UtdXAsIHRib2R5LmhpZGUtZm9yLXh4bGFyZ2Utb25seSB7CiAgICBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXAgIWltcG9ydGFudDsgfQoKICAvKiBsaW5lIDQ0MywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwogIHRyLmhpZGUtZm9yLXNtYWxsLCB0ci5oaWRlLWZvci1zbWFsbC1vbmx5LCB0ci5oaWRlLWZvci1tZWRpdW0sIHRyLmhpZGUtZm9yLW1lZGl1bS1kb3duLCB0ci5oaWRlLWZvci1tZWRpdW0tb25seSwgdHIuc2hvdy1mb3ItbWVkaXVtLXVwLCB0ci5zaG93LWZvci1sYXJnZS11cCwgdHIuc2hvdy1mb3IteGxhcmdlLCB0ci5zaG93LWZvci14bGFyZ2UtdXAsIHRyLnNob3ctZm9yLXhsYXJnZS1vbmx5LCB0ci5oaWRlLWZvci14eGxhcmdlLXVwLCB0ci5oaWRlLWZvci14eGxhcmdlLW9ubHkgewogICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7IH0KCiAgLyogbGluZSA0NTgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL192aXNpYmlsaXR5LnNjc3MgKi8KICB0ZC5oaWRlLWZvci1zbWFsbCwgdGQuaGlkZS1mb3Itc21hbGwtb25seSwgdGQuaGlkZS1mb3ItbWVkaXVtLCB0ZC5oaWRlLWZvci1tZWRpdW0tZG93biwgdGQuaGlkZS1mb3ItbWVkaXVtLW9ubHksIHRkLnNob3ctZm9yLW1lZGl1bS11cCwgdGQuc2hvdy1mb3ItbGFyZ2UtdXAsIHRkLnNob3ctZm9yLXhsYXJnZSwgdGQuc2hvdy1mb3IteGxhcmdlLXVwLCB0ZC5zaG93LWZvci14bGFyZ2Utb25seSwgdGQuaGlkZS1mb3IteHhsYXJnZS11cCwgdGQuaGlkZS1mb3IteHhsYXJnZS1vbmx5LAogIHRoLmhpZGUtZm9yLXNtYWxsLAogIHRoLmhpZGUtZm9yLXNtYWxsLW9ubHksCiAgdGguaGlkZS1mb3ItbWVkaXVtLAogIHRoLmhpZGUtZm9yLW1lZGl1bS1kb3duLAogIHRoLmhpZGUtZm9yLW1lZGl1bS1vbmx5LAogIHRoLnNob3ctZm9yLW1lZGl1bS11cCwKICB0aC5zaG93LWZvci1sYXJnZS11cCwKICB0aC5zaG93LWZvci14bGFyZ2UsCiAgdGguc2hvdy1mb3IteGxhcmdlLXVwLAogIHRoLnNob3ctZm9yLXhsYXJnZS1vbmx5LAogIHRoLmhpZGUtZm9yLXh4bGFyZ2UtdXAsCiAgdGguaGlkZS1mb3IteHhsYXJnZS1vbmx5IHsKICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDsgfSB9Ci8qIFhYLUxhcmdlIERpc3BsYXlzOiAxOTIwIGFuZCB1cCAqLwpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEyMC4wNjNlbSkgewogIC8qIGxpbmUgNDczLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdmlzaWJpbGl0eS5zY3NzICovCiAgLmhpZGUtZm9yLXNtYWxsLAogIC5oaWRlLWZvci1zbWFsbC1vbmx5LAogIC5oaWRlLWZvci1tZWRpdW0sCiAgLmhpZGUtZm9yLW1lZGl1bS1kb3duLAogIC5oaWRlLWZvci1tZWRpdW0tb25seSwKICAuc2hvdy1mb3ItbWVkaXVtLXVwLAogIC5zaG93LWZvci1sYXJnZS11cCwKICAuc2hvdy1mb3IteGxhcmdlLXVwLAogIC5zaG93LWZvci14eGxhcmdlLXVwLAogIC5zaG93LWZvci14eGxhcmdlLW9ubHkgewogICAgZGlzcGxheTogaW5oZXJpdCAhaW1wb3J0YW50OyB9CgogIC8qIGxpbmUgNDg1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdmlzaWJpbGl0eS5zY3NzICovCiAgLnNob3ctZm9yLXNtYWxsLW9ubHksCiAgLnNob3ctZm9yLW1lZGl1bSwKICAuc2hvdy1mb3ItbWVkaXVtLWRvd24sCiAgLnNob3ctZm9yLW1lZGl1bS1vbmx5LAogIC5zaG93LWZvci1sYXJnZSwKICAuc2hvdy1mb3ItbGFyZ2Utb25seSwKICAuc2hvdy1mb3ItbGFyZ2UtZG93biwKICAuaGlkZS1mb3IteGxhcmdlLAogIC5zaG93LWZvci14bGFyZ2Utb25seSwKICAuaGlkZS1mb3IteHhsYXJnZS11cCwKICAuaGlkZS1mb3IteHhsYXJnZS1vbmx5IHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfQoKICAvKiBTcGVjaWZpYyB2aXNpbGJpdHkgZm9yIHRhYmxlcyAqLwogIC8qIGxpbmUgNDk4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdmlzaWJpbGl0eS5zY3NzICovCiAgdGFibGUuaGlkZS1mb3Itc21hbGwsIHRhYmxlLmhpZGUtZm9yLXNtYWxsLW9ubHksIHRhYmxlLmhpZGUtZm9yLW1lZGl1bSwgdGFibGUuaGlkZS1mb3ItbWVkaXVtLWRvd24sIHRhYmxlLmhpZGUtZm9yLW1lZGl1bS1vbmx5LCB0YWJsZS5zaG93LWZvci1tZWRpdW0tdXAsIHRhYmxlLnNob3ctZm9yLWxhcmdlLXVwLCB0YWJsZS5zaG93LWZvci14bGFyZ2UtdXAsIHRhYmxlLnNob3ctZm9yLXh4bGFyZ2UtdXAsIHRhYmxlLnNob3ctZm9yLXh4bGFyZ2Utb25seSB7CiAgICBkaXNwbGF5OiB0YWJsZTsgfQoKICAvKiBsaW5lIDUxMCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwogIHRoZWFkLmhpZGUtZm9yLXNtYWxsLCB0aGVhZC5oaWRlLWZvci1zbWFsbC1vbmx5LCB0aGVhZC5oaWRlLWZvci1tZWRpdW0sIHRoZWFkLmhpZGUtZm9yLW1lZGl1bS1kb3duLCB0aGVhZC5oaWRlLWZvci1tZWRpdW0tb25seSwgdGhlYWQuc2hvdy1mb3ItbWVkaXVtLXVwLCB0aGVhZC5zaG93LWZvci1sYXJnZS11cCwgdGhlYWQuc2hvdy1mb3IteGxhcmdlLXVwLCB0aGVhZC5zaG93LWZvci14eGxhcmdlLXVwLCB0aGVhZC5zaG93LWZvci14eGxhcmdlLW9ubHkgewogICAgZGlzcGxheTogdGFibGUtaGVhZGVyLWdyb3VwICFpbXBvcnRhbnQ7IH0KCiAgLyogbGluZSA1MjIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL192aXNpYmlsaXR5LnNjc3MgKi8KICB0Ym9keS5oaWRlLWZvci1zbWFsbCwgdGJvZHkuaGlkZS1mb3Itc21hbGwtb25seSwgdGJvZHkuaGlkZS1mb3ItbWVkaXVtLCB0Ym9keS5oaWRlLWZvci1tZWRpdW0tZG93biwgdGJvZHkuaGlkZS1mb3ItbWVkaXVtLW9ubHksIHRib2R5LnNob3ctZm9yLW1lZGl1bS11cCwgdGJvZHkuc2hvdy1mb3ItbGFyZ2UtdXAsIHRib2R5LnNob3ctZm9yLXhsYXJnZS11cCwgdGJvZHkuc2hvdy1mb3IteHhsYXJnZS11cCwgdGJvZHkuc2hvdy1mb3IteHhsYXJnZS1vbmx5IHsKICAgIGRpc3BsYXk6IHRhYmxlLXJvdy1ncm91cCAhaW1wb3J0YW50OyB9CgogIC8qIGxpbmUgNTM0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdmlzaWJpbGl0eS5zY3NzICovCiAgdHIuaGlkZS1mb3Itc21hbGwsIHRyLmhpZGUtZm9yLXNtYWxsLW9ubHksIHRyLmhpZGUtZm9yLW1lZGl1bSwgdHIuaGlkZS1mb3ItbWVkaXVtLWRvd24sIHRyLmhpZGUtZm9yLW1lZGl1bS1vbmx5LCB0ci5zaG93LWZvci1tZWRpdW0tdXAsIHRyLnNob3ctZm9yLWxhcmdlLXVwLCB0ci5zaG93LWZvci14bGFyZ2UtdXAsIHRyLnNob3ctZm9yLXh4bGFyZ2UtdXAsIHRyLnNob3ctZm9yLXh4bGFyZ2Utb25seSB7CiAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudDsgfQoKICAvKiBsaW5lIDU0NywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwogIHRkLmhpZGUtZm9yLXNtYWxsLCB0ZC5oaWRlLWZvci1zbWFsbC1vbmx5LCB0ZC5oaWRlLWZvci1tZWRpdW0sIHRkLmhpZGUtZm9yLW1lZGl1bS1kb3duLCB0ZC5oaWRlLWZvci1tZWRpdW0tb25seSwgdGQuc2hvdy1mb3ItbWVkaXVtLXVwLCB0ZC5zaG93LWZvci1sYXJnZS11cCwgdGQuc2hvdy1mb3IteGxhcmdlLXVwLCB0ZC5zaG93LWZvci14eGxhcmdlLXVwLCB0ZC5zaG93LWZvci14eGxhcmdlLW9ubHksCiAgdGguaGlkZS1mb3Itc21hbGwsCiAgdGguaGlkZS1mb3Itc21hbGwtb25seSwKICB0aC5oaWRlLWZvci1tZWRpdW0sCiAgdGguaGlkZS1mb3ItbWVkaXVtLWRvd24sCiAgdGguaGlkZS1mb3ItbWVkaXVtLW9ubHksCiAgdGguc2hvdy1mb3ItbWVkaXVtLXVwLAogIHRoLnNob3ctZm9yLWxhcmdlLXVwLAogIHRoLnNob3ctZm9yLXhsYXJnZS11cCwKICB0aC5zaG93LWZvci14eGxhcmdlLXVwLAogIHRoLnNob3ctZm9yLXh4bGFyZ2Utb25seSB7CiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7IH0gfQovKiBPcmllbnRhdGlvbiB0YXJnZXRpbmcgKi8KLyogbGluZSA1NTQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL192aXNpYmlsaXR5LnNjc3MgKi8KLnNob3ctZm9yLWxhbmRzY2FwZSwKLmhpZGUtZm9yLXBvcnRyYWl0IHsKICBkaXNwbGF5OiBpbmhlcml0ICFpbXBvcnRhbnQ7IH0KCi8qIGxpbmUgNTU2LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdmlzaWJpbGl0eS5zY3NzICovCi5oaWRlLWZvci1sYW5kc2NhcGUsCi5zaG93LWZvci1wb3J0cmFpdCB7CiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9CgovKiBTcGVjaWZpYyB2aXNpbGJpdHkgZm9yIHRhYmxlcyAqLwovKiBsaW5lIDU2MSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwp0YWJsZS5oaWRlLWZvci1sYW5kc2NhcGUsIHRhYmxlLnNob3ctZm9yLXBvcnRyYWl0IHsKICBkaXNwbGF5OiB0YWJsZTsgfQoKLyogbGluZSA1NjUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL192aXNpYmlsaXR5LnNjc3MgKi8KdGhlYWQuaGlkZS1mb3ItbGFuZHNjYXBlLCB0aGVhZC5zaG93LWZvci1wb3J0cmFpdCB7CiAgZGlzcGxheTogdGFibGUtaGVhZGVyLWdyb3VwICFpbXBvcnRhbnQ7IH0KCi8qIGxpbmUgNTY5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdmlzaWJpbGl0eS5zY3NzICovCnRib2R5LmhpZGUtZm9yLWxhbmRzY2FwZSwgdGJvZHkuc2hvdy1mb3ItcG9ydHJhaXQgewogIGRpc3BsYXk6IHRhYmxlLXJvdy1ncm91cCAhaW1wb3J0YW50OyB9CgovKiBsaW5lIDU3MywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwp0ci5oaWRlLWZvci1sYW5kc2NhcGUsIHRyLnNob3ctZm9yLXBvcnRyYWl0IHsKICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudDsgfQoKLyogbGluZSA1NzgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL192aXNpYmlsaXR5LnNjc3MgKi8KdGQuaGlkZS1mb3ItbGFuZHNjYXBlLCB0ZC5zaG93LWZvci1wb3J0cmFpdCwKdGguaGlkZS1mb3ItbGFuZHNjYXBlLAp0aC5zaG93LWZvci1wb3J0cmFpdCB7CiAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50OyB9CgpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7CiAgLyogbGluZSA1ODMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL192aXNpYmlsaXR5LnNjc3MgKi8KICAuc2hvdy1mb3ItbGFuZHNjYXBlLAogIC5oaWRlLWZvci1wb3J0cmFpdCB7CiAgICBkaXNwbGF5OiBpbmhlcml0ICFpbXBvcnRhbnQ7IH0KCiAgLyogbGluZSA1ODUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL192aXNpYmlsaXR5LnNjc3MgKi8KICAuaGlkZS1mb3ItbGFuZHNjYXBlLAogIC5zaG93LWZvci1wb3J0cmFpdCB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KCiAgLyogU3BlY2lmaWMgdmlzaWxiaXR5IGZvciB0YWJsZXMgKi8KICAvKiBsaW5lIDU5MCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwogIHRhYmxlLnNob3ctZm9yLWxhbmRzY2FwZSwgdGFibGUuaGlkZS1mb3ItcG9ydHJhaXQgewogICAgZGlzcGxheTogdGFibGU7IH0KCiAgLyogbGluZSA1OTQsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL192aXNpYmlsaXR5LnNjc3MgKi8KICB0aGVhZC5zaG93LWZvci1sYW5kc2NhcGUsIHRoZWFkLmhpZGUtZm9yLXBvcnRyYWl0IHsKICAgIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cCAhaW1wb3J0YW50OyB9CgogIC8qIGxpbmUgNTk4LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdmlzaWJpbGl0eS5zY3NzICovCiAgdGJvZHkuc2hvdy1mb3ItbGFuZHNjYXBlLCB0Ym9keS5oaWRlLWZvci1wb3J0cmFpdCB7CiAgICBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXAgIWltcG9ydGFudDsgfQoKICAvKiBsaW5lIDYwMiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwogIHRyLnNob3ctZm9yLWxhbmRzY2FwZSwgdHIuaGlkZS1mb3ItcG9ydHJhaXQgewogICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7IH0KCiAgLyogbGluZSA2MDcsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL192aXNpYmlsaXR5LnNjc3MgKi8KICB0ZC5zaG93LWZvci1sYW5kc2NhcGUsIHRkLmhpZGUtZm9yLXBvcnRyYWl0LAogIHRoLnNob3ctZm9yLWxhbmRzY2FwZSwKICB0aC5oaWRlLWZvci1wb3J0cmFpdCB7CiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7IH0gfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHsKICAvKiBsaW5lIDYxMywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwogIC5zaG93LWZvci1wb3J0cmFpdCwKICAuaGlkZS1mb3ItbGFuZHNjYXBlIHsKICAgIGRpc3BsYXk6IGluaGVyaXQgIWltcG9ydGFudDsgfQoKICAvKiBsaW5lIDYxNSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwogIC5oaWRlLWZvci1wb3J0cmFpdCwKICAuc2hvdy1mb3ItbGFuZHNjYXBlIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfQoKICAvKiBTcGVjaWZpYyB2aXNpbGJpdHkgZm9yIHRhYmxlcyAqLwogIC8qIGxpbmUgNjIwLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdmlzaWJpbGl0eS5zY3NzICovCiAgdGFibGUuc2hvdy1mb3ItcG9ydHJhaXQsIHRhYmxlLmhpZGUtZm9yLWxhbmRzY2FwZSB7CiAgICBkaXNwbGF5OiB0YWJsZTsgfQoKICAvKiBsaW5lIDYyNCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwogIHRoZWFkLnNob3ctZm9yLXBvcnRyYWl0LCB0aGVhZC5oaWRlLWZvci1sYW5kc2NhcGUgewogICAgZGlzcGxheTogdGFibGUtaGVhZGVyLWdyb3VwICFpbXBvcnRhbnQ7IH0KCiAgLyogbGluZSA2MjgsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL192aXNpYmlsaXR5LnNjc3MgKi8KICB0Ym9keS5zaG93LWZvci1wb3J0cmFpdCwgdGJvZHkuaGlkZS1mb3ItbGFuZHNjYXBlIHsKICAgIGRpc3BsYXk6IHRhYmxlLXJvdy1ncm91cCAhaW1wb3J0YW50OyB9CgogIC8qIGxpbmUgNjMyLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdmlzaWJpbGl0eS5zY3NzICovCiAgdHIuc2hvdy1mb3ItcG9ydHJhaXQsIHRyLmhpZGUtZm9yLWxhbmRzY2FwZSB7CiAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudDsgfQoKICAvKiBsaW5lIDYzNywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwogIHRkLnNob3ctZm9yLXBvcnRyYWl0LCB0ZC5oaWRlLWZvci1sYW5kc2NhcGUsCiAgdGguc2hvdy1mb3ItcG9ydHJhaXQsCiAgdGguaGlkZS1mb3ItbGFuZHNjYXBlIHsKICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDsgfSB9Ci8qIFRvdWNoLWVuYWJsZWQgZGV2aWNlIHRhcmdldGluZyAqLwovKiBsaW5lIDY0MiwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwouc2hvdy1mb3ItdG91Y2ggewogIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfQoKLyogbGluZSA2NDMsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL192aXNpYmlsaXR5LnNjc3MgKi8KLmhpZGUtZm9yLXRvdWNoIHsKICBkaXNwbGF5OiBpbmhlcml0ICFpbXBvcnRhbnQ7IH0KCi8qIGxpbmUgNjQ0LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdmlzaWJpbGl0eS5zY3NzICovCi50b3VjaCAuc2hvdy1mb3ItdG91Y2ggewogIGRpc3BsYXk6IGluaGVyaXQgIWltcG9ydGFudDsgfQoKLyogbGluZSA2NDUsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL192aXNpYmlsaXR5LnNjc3MgKi8KLnRvdWNoIC5oaWRlLWZvci10b3VjaCB7CiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9CgovKiBTcGVjaWZpYyB2aXNpbGJpdHkgZm9yIHRhYmxlcyAqLwovKiBsaW5lIDY0OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwp0YWJsZS5oaWRlLWZvci10b3VjaCB7CiAgZGlzcGxheTogdGFibGU7IH0KCi8qIGxpbmUgNjQ5LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdmlzaWJpbGl0eS5zY3NzICovCi50b3VjaCB0YWJsZS5zaG93LWZvci10b3VjaCB7CiAgZGlzcGxheTogdGFibGU7IH0KCi8qIGxpbmUgNjUwLCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdmlzaWJpbGl0eS5zY3NzICovCnRoZWFkLmhpZGUtZm9yLXRvdWNoIHsKICBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXAgIWltcG9ydGFudDsgfQoKLyogbGluZSA2NTEsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL192aXNpYmlsaXR5LnNjc3MgKi8KLnRvdWNoIHRoZWFkLnNob3ctZm9yLXRvdWNoIHsKICBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXAgIWltcG9ydGFudDsgfQoKLyogbGluZSA2NTIsIC9hcHAvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uL3Njc3MvZm91bmRhdGlvbi9jb21wb25lbnRzL192aXNpYmlsaXR5LnNjc3MgKi8KdGJvZHkuaGlkZS1mb3ItdG91Y2ggewogIGRpc3BsYXk6IHRhYmxlLXJvdy1ncm91cCAhaW1wb3J0YW50OyB9CgovKiBsaW5lIDY1MywgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwoudG91Y2ggdGJvZHkuc2hvdy1mb3ItdG91Y2ggewogIGRpc3BsYXk6IHRhYmxlLXJvdy1ncm91cCAhaW1wb3J0YW50OyB9CgovKiBsaW5lIDY1NCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwp0ci5oaWRlLWZvci10b3VjaCB7CiAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7IH0KCi8qIGxpbmUgNjU1LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdmlzaWJpbGl0eS5zY3NzICovCi50b3VjaCB0ci5zaG93LWZvci10b3VjaCB7CiAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7IH0KCi8qIGxpbmUgNjU2LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdmlzaWJpbGl0eS5zY3NzICovCnRkLmhpZGUtZm9yLXRvdWNoIHsKICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7IH0KCi8qIGxpbmUgNjU3LCAvYXBwL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi9zY3NzL2ZvdW5kYXRpb24vY29tcG9uZW50cy9fdmlzaWJpbGl0eS5zY3NzICovCi50b3VjaCB0ZC5zaG93LWZvci10b3VjaCB7CiAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50OyB9CgovKiBsaW5lIDY1OCwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwp0aC5oaWRlLWZvci10b3VjaCB7CiAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50OyB9CgovKiBsaW5lIDY1OSwgL2FwcC9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24vc2Nzcy9mb3VuZGF0aW9uL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyAqLwoudG91Y2ggdGguc2hvdy1mb3ItdG91Y2ggewogIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDsgfQoKLyogbGluZSA2MTYsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KLnRvcC1iYXItc2VjdGlvbiA+IHVsID4gbGkgPiBhOm5vdCguYnV0dG9uKSB7CiAgcGFkZGluZzogMCAxNXB4OwogIC8qIHJlZHVjZSBwYWRkaW5nIHRvIGFsbG93IG1vcmUgbmF2IGl0ZW1zICovIH0KCi8qIGxpbmUgNjIwLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCi5hc2NpaWRvY3RvciB7CiAgZm9udC1zaXplOiAxZW07CiAgLyohIG5vcm1hbGl6ZS5jc3MgdjIuMS4yIHwgTUlUIExpY2Vuc2UgfCBnaXQuaW8vbm9ybWFsaXplICovCiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gSFRNTDUgZGlzcGxheSBkZWZpbml0aW9ucyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogIC8qKiBDb3JyZWN0IGBibG9ja2AgZGlzcGxheSBub3QgZGVmaW5lZCBpbiBJRSA4LzkuICovCiAgLyoqIENvcnJlY3QgYGlubGluZS1ibG9ja2AgZGlzcGxheSBub3QgZGVmaW5lZCBpbiBJRSA4LzkuICovCiAgLyoqIFByZXZlbnQgbW9kZXJuIGJyb3dzZXJzIGZyb20gZGlzcGxheWluZyBgYXVkaW9gIHdpdGhvdXQgY29udHJvbHMuIFJlbW92ZSBleGNlc3MgaGVpZ2h0IGluIGlPUyA1IGRldmljZXMuICovCiAgLyoqIEFkZHJlc3MgYFtoaWRkZW5dYCBzdHlsaW5nIG5vdCBwcmVzZW50IGluIElFIDgvOS4gSGlkZSB0aGUgYHRlbXBsYXRlYCBlbGVtZW50IGluIElFLCBTYWZhcmksIGFuZCBGaXJlZm94IDwgMjIuICovCiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQmFzZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogIC8qKiAxLiBTZXQgZGVmYXVsdCBmb250IGZhbWlseSB0byBzYW5zLXNlcmlmLiAyLiBQcmV2ZW50IGlPUyB0ZXh0IHNpemUgYWRqdXN0IGFmdGVyIG9yaWVudGF0aW9uIGNoYW5nZSwgd2l0aG91dCBkaXNhYmxpbmcgdXNlciB6b29tLiAqLwogIC8qKiBSZW1vdmUgZGVmYXVsdCBtYXJnaW4uICovCiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gTGlua3MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KICAvKiogUmVtb3ZlIHRoZSBncmF5IGJhY2tncm91bmQgY29sb3IgZnJvbSBhY3RpdmUgbGlua3MgaW4gSUUgMTAuICovCiAgLyoqIEFkZHJlc3MgYG91dGxpbmVgIGluY29uc2lzdGVuY3kgYmV0d2VlbiBDaHJvbWUgYW5kIG90aGVyIGJyb3dzZXJzLiAqLwogIC8qKiBJbXByb3ZlIHJlYWRhYmlsaXR5IHdoZW4gZm9jdXNlZCBhbmQgYWxzbyBtb3VzZSBob3ZlcmVkIGluIGFsbCBicm93c2Vycy4gKi8KICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBUeXBvZ3JhcGh5ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAgLyoqIEFkZHJlc3MgdmFyaWFibGUgYGgxYCBmb250LXNpemUgYW5kIG1hcmdpbiB3aXRoaW4gYHNlY3Rpb25gIGFuZCBgYXJ0aWNsZWAgY29udGV4dHMgaW4gRmlyZWZveCA0KywgU2FmYXJpIDUsIGFuZCBDaHJvbWUuICovCiAgLyoqIEFkZHJlc3Mgc3R5bGluZyBub3QgcHJlc2VudCBpbiBJRSA4LzksIFNhZmFyaSA1LCBhbmQgQ2hyb21lLiAqLwogIC8qKiBBZGRyZXNzIHN0eWxlIHNldCB0byBgYm9sZGVyYCBpbiBGaXJlZm94IDQrLCBTYWZhcmkgNSwgYW5kIENocm9tZS4gKi8KICAvKiogQWRkcmVzcyBzdHlsaW5nIG5vdCBwcmVzZW50IGluIFNhZmFyaSA1IGFuZCBDaHJvbWUuICovCiAgLyoqIEFkZHJlc3MgZGlmZmVyZW5jZXMgYmV0d2VlbiBGaXJlZm94IGFuZCBvdGhlciBicm93c2Vycy4gKi8KICAvKiogQWRkcmVzcyBzdHlsaW5nIG5vdCBwcmVzZW50IGluIElFIDgvOS4gKi8KICAvKiogQ29ycmVjdCBmb250IGZhbWlseSBzZXQgb2RkbHkgaW4gU2FmYXJpIDUgYW5kIENocm9tZS4gKi8KICAvKiogSW1wcm92ZSByZWFkYWJpbGl0eSBvZiBwcmUtZm9ybWF0dGVkIHRleHQgaW4gYWxsIGJyb3dzZXJzLiAqLwogIC8qKiBTZXQgY29uc2lzdGVudCBxdW90ZSB0eXBlcy4gKi8KICAvKiogQWRkcmVzcyBpbmNvbnNpc3RlbnQgYW5kIHZhcmlhYmxlIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuICovCiAgLyoqIFByZXZlbnQgYHN1YmAgYW5kIGBzdXBgIGFmZmVjdGluZyBgbGluZS1oZWlnaHRgIGluIGFsbCBicm93c2Vycy4gKi8KICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBFbWJlZGRlZCBjb250ZW50ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAgLyoqIFJlbW92ZSBib3JkZXIgd2hlbiBpbnNpZGUgYGFgIGVsZW1lbnQgaW4gSUUgOC85LiAqLwogIC8qKiBDb3JyZWN0IG92ZXJmbG93IGRpc3BsYXllZCBvZGRseSBpbiBJRSA5LiAqLwogIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEZpZ3VyZXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KICAvKiogQWRkcmVzcyBtYXJnaW4gbm90IHByZXNlbnQgaW4gSUUgOC85IGFuZCBTYWZhcmkgNS4gKi8KICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBGb3JtcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogIC8qKiBEZWZpbmUgY29uc2lzdGVudCBib3JkZXIsIG1hcmdpbiwgYW5kIHBhZGRpbmcuICovCiAgLyoqIDEuIENvcnJlY3QgYGNvbG9yYCBub3QgYmVpbmcgaW5oZXJpdGVkIGluIElFIDgvOS4gMi4gUmVtb3ZlIHBhZGRpbmcgc28gcGVvcGxlIGFyZW4ndCBjYXVnaHQgb3V0IGlmIHRoZXkgemVybyBvdXQgZmllbGRzZXRzLiAqLwogIC8qKiAxLiBDb3JyZWN0IGZvbnQgZmFtaWx5IG5vdCBiZWluZyBpbmhlcml0ZWQgaW4gYWxsIGJyb3dzZXJzLiAyLiBDb3JyZWN0IGZvbnQgc2l6ZSBub3QgYmVpbmcgaW5oZXJpdGVkIGluIGFsbCBicm93c2Vycy4gMy4gQWRkcmVzcyBtYXJnaW5zIHNldCBkaWZmZXJlbnRseSBpbiBGaXJlZm94IDQrLCBTYWZhcmkgNSwgYW5kIENocm9tZS4gKi8KICAvKiogQWRkcmVzcyBGaXJlZm94IDQrIHNldHRpbmcgYGxpbmUtaGVpZ2h0YCBvbiBgaW5wdXRgIHVzaW5nIGAhaW1wb3J0YW50YCBpbiB0aGUgVUEgc3R5bGVzaGVldC4gKi8KICAvKiogQWRkcmVzcyBpbmNvbnNpc3RlbnQgYHRleHQtdHJhbnNmb3JtYCBpbmhlcml0YW5jZSBmb3IgYGJ1dHRvbmAgYW5kIGBzZWxlY3RgLiBBbGwgb3RoZXIgZm9ybSBjb250cm9sIGVsZW1lbnRzIGRvIG5vdCBpbmhlcml0IGB0ZXh0LXRyYW5zZm9ybWAgdmFsdWVzLiBDb3JyZWN0IGBidXR0b25gIHN0eWxlIGluaGVyaXRhbmNlIGluIENocm9tZSwgU2FmYXJpIDUrLCBhbmQgSUUgOCsuIENvcnJlY3QgYHNlbGVjdGAgc3R5bGUgaW5oZXJpdGFuY2UgaW4gRmlyZWZveCA0KyBhbmQgT3BlcmEuICovCiAgLyoqIDEuIEF2b2lkIHRoZSBXZWJLaXQgYnVnIGluIEFuZHJvaWQgNC4wLiogd2hlcmUgKDIpIGRlc3Ryb3lzIG5hdGl2ZSBgYXVkaW9gIGFuZCBgdmlkZW9gIGNvbnRyb2xzLiAyLiBDb3JyZWN0IGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgYGlucHV0YCB0eXBlcyBpbiBpT1MuIDMuIEltcHJvdmUgdXNhYmlsaXR5IGFuZCBjb25zaXN0ZW5jeSBvZiBjdXJzb3Igc3R5bGUgYmV0d2VlbiBpbWFnZS10eXBlIGBpbnB1dGAgYW5kIG90aGVycy4gKi8KICAvKiogUmUtc2V0IGRlZmF1bHQgY3Vyc29yIGZvciBkaXNhYmxlZCBlbGVtZW50cy4gKi8KICAvKiogMS4gQWRkcmVzcyBib3ggc2l6aW5nIHNldCB0byBgY29udGVudC1ib3hgIGluIElFIDgvOS4gMi4gUmVtb3ZlIGV4Y2VzcyBwYWRkaW5nIGluIElFIDgvOS4gKi8KICAvKiogMS4gQWRkcmVzcyBgYXBwZWFyYW5jZWAgc2V0IHRvIGBzZWFyY2hmaWVsZGAgaW4gU2FmYXJpIDUgYW5kIENocm9tZS4gMi4gQWRkcmVzcyBgYm94LXNpemluZ2Agc2V0IHRvIGBib3JkZXItYm94YCBpbiBTYWZhcmkgNSBhbmQgQ2hyb21lIChpbmNsdWRlIGAtbW96YCB0byBmdXR1cmUtcHJvb2YpLiAqLwogIC8qKiBSZW1vdmUgaW5uZXIgcGFkZGluZyBhbmQgc2VhcmNoIGNhbmNlbCBidXR0b24gaW4gU2FmYXJpIDUgYW5kIENocm9tZSBvbiBPUyBYLiAqLwogIC8qKiBSZW1vdmUgaW5uZXIgcGFkZGluZyBhbmQgYm9yZGVyIGluIEZpcmVmb3ggNCsuICovCiAgLyoqIDEuIFJlbW92ZSBkZWZhdWx0IHZlcnRpY2FsIHNjcm9sbGJhciBpbiBJRSA4LzkuIDIuIEltcHJvdmUgcmVhZGFiaWxpdHkgYW5kIGFsaWdubWVudCBpbiBhbGwgYnJvd3NlcnMuICovCiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gVGFibGVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAgLyoqIFJlbW92ZSBtb3N0IHNwYWNpbmcgYmV0d2VlbiB0YWJsZSBjZWxscy4gKi8KICAvKiBUeXBvZ3JhcGh5IHJlc2V0cyAqLwogIC8qIERlZmF1bHQgTGluayBTdHlsZXMgKi8KICAvKiBEZWZhdWx0IHBhcmFncmFwaCBzdHlsZXMgKi8KICAvKiBEZWZhdWx0IGhlYWRlciBzdHlsZXMgKi8KICAvKiBIZWxwZnVsIFR5cG9ncmFwaHkgRGVmYXVsdHMgKi8KICAvKiBMaXN0cyAqLwogIC8qIFVub3JkZXJlZCBMaXN0cyAqLwogIC8qIE9yZGVyZWQgTGlzdHMgKi8KICAvKiBEZWZpbml0aW9uIExpc3RzICovCiAgLyogQWJicmV2aWF0aW9ucyAqLwogIC8qIEJsb2NrcXVvdGVzICovCiAgLyogTWljcm9mb3JtYXRzICovCiAgLyogVGFibGVzICovCiAgLyogdXNlIGZvdW5kYXRpb24gc2l6ZXMgKi8gfQogIC8qIGxpbmUgNSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgYXJ0aWNsZSwgLmFzY2lpZG9jdG9yIGFzaWRlLCAuYXNjaWlkb2N0b3IgZGV0YWlscywgLmFzY2lpZG9jdG9yIGZpZ2NhcHRpb24sIC5hc2NpaWRvY3RvciBmaWd1cmUsIC5hc2NpaWRvY3RvciBmb290ZXIsIC5hc2NpaWRvY3RvciBoZWFkZXIsIC5hc2NpaWRvY3RvciBoZ3JvdXAsIC5hc2NpaWRvY3RvciBtYWluLCAuYXNjaWlkb2N0b3IgbmF2LCAuYXNjaWlkb2N0b3Igc2VjdGlvbiwgLmFzY2lpZG9jdG9yIHN1bW1hcnkgewogICAgZGlzcGxheTogYmxvY2s7IH0KICAvKiBsaW5lIDgsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIGF1ZGlvLCAuYXNjaWlkb2N0b3IgY2FudmFzLCAuYXNjaWlkb2N0b3IgdmlkZW8gewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9CiAgLyogbGluZSAxMSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgYXVkaW86bm90KFtjb250cm9sc10pIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBoZWlnaHQ6IDA7IH0KICAvKiBsaW5lIDE0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBbaGlkZGVuXSwgLmFzY2lpZG9jdG9yIHRlbXBsYXRlIHsKICAgIGRpc3BsYXk6IG5vbmU7IH0KICAvKiBsaW5lIDE2LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBzY3JpcHQgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9CiAgLyogbGluZSAyMCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgaHRtbCB7CiAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKICAgIC8qIDEgKi8KICAgIC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOwogICAgLyogMiAqLwogICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOwogICAgLyogMiAqLyB9CiAgLyogbGluZSAyMywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgYm9keSB7CiAgICBtYXJnaW46IDA7IH0KICAvKiBsaW5lIDI3LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBhIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyB9CiAgLyogbGluZSAzMCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgYTpmb2N1cyB7CiAgICBvdXRsaW5lOiB0aGluIGRvdHRlZDsgfQogIC8qIGxpbmUgMzMsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIGE6YWN0aXZlLCAuYXNjaWlkb2N0b3IgYTpob3ZlciB7CiAgICBvdXRsaW5lOiAwOyB9CiAgLyogbGluZSAzNywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgaDEgewogICAgZm9udC1zaXplOiAyZW07CiAgICBtYXJnaW46IDAuNjdlbSAwOyB9CiAgLyogbGluZSA0MCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgYWJiclt0aXRsZV0gewogICAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZDsgfQogIC8qIGxpbmUgNDMsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIGIsIC5hc2NpaWRvY3RvciBzdHJvbmcgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KICAvKiBsaW5lIDQ2LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBkZm4gewogICAgZm9udC1zdHlsZTogaXRhbGljOyB9CiAgLyogbGluZSA0OSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgaHIgewogICAgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgaGVpZ2h0OiAwOyB9CiAgLyogbGluZSA1MiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgbWFyayB7CiAgICBiYWNrZ3JvdW5kOiAjZmYwOwogICAgY29sb3I6ICMwMDA7IH0KICAvKiBsaW5lIDU1LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBjb2RlLCAuYXNjaWlkb2N0b3Iga2JkLCAuYXNjaWlkb2N0b3IgcHJlLCAuYXNjaWlkb2N0b3Igc2FtcCB7CiAgICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBzZXJpZjsKICAgIGZvbnQtc2l6ZTogMWVtOyB9CiAgLyogbGluZSA1OCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgcHJlIHsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsgfQogIC8qIGxpbmUgNjEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHEgewogICAgcXVvdGVzOiAiXDIwMUMiICJcMjAxRCIgIlwyMDE4IiAiXDIwMTkiOyB9CiAgLyogbGluZSA2NCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3Igc21hbGwgewogICAgZm9udC1zaXplOiA4MCU7IH0KICAvKiBsaW5lIDY3LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBzdWIsIC5hc2NpaWRvY3RvciBzdXAgewogICAgZm9udC1zaXplOiA3NSU7CiAgICBsaW5lLWhlaWdodDogMDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsgfQogIC8qIGxpbmUgNjksIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHN1cCB7CiAgICB0b3A6IC0wLjVlbTsgfQogIC8qIGxpbmUgNzEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHN1YiB7CiAgICBib3R0b206IC0wLjI1ZW07IH0KICAvKiBsaW5lIDc1LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBpbWcgewogICAgYm9yZGVyOiAwOyB9CiAgLyogbGluZSA3OCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3Igc3ZnOm5vdCg6cm9vdCkgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsgfQogIC8qIGxpbmUgODIsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIGZpZ3VyZSB7CiAgICBtYXJnaW46IDA7IH0KICAvKiBsaW5lIDg2LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBmaWVsZHNldCB7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwOwogICAgbWFyZ2luOiAwIDJweDsKICAgIHBhZGRpbmc6IDAuMzVlbSAwLjYyNWVtIDAuNzVlbTsgfQogIC8qIGxpbmUgODksIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIGxlZ2VuZCB7CiAgICBib3JkZXI6IDA7CiAgICAvKiAxICovCiAgICBwYWRkaW5nOiAwOwogICAgLyogMiAqLyB9CiAgLyogbGluZSA5MiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgYnV0dG9uLCAuYXNjaWlkb2N0b3IgaW5wdXQsIC5hc2NpaWRvY3RvciBzZWxlY3QsIC5hc2NpaWRvY3RvciB0ZXh0YXJlYSB7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIC8qIDEgKi8KICAgIGZvbnQtc2l6ZTogMTAwJTsKICAgIC8qIDIgKi8KICAgIG1hcmdpbjogMDsKICAgIC8qIDMgKi8gfQogIC8qIGxpbmUgOTUsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIGJ1dHRvbiwgLmFzY2lpZG9jdG9yIGlucHV0IHsKICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7IH0KICAvKiBsaW5lIDk4LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBidXR0b24sIC5hc2NpaWRvY3RvciBzZWxlY3QgewogICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7IH0KICAvKiBsaW5lIDEwMSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgYnV0dG9uLCAuYXNjaWlkb2N0b3IgaHRtbCBpbnB1dFt0eXBlPSJidXR0b24iXSwgLmFzY2lpZG9jdG9yIGlucHV0W3R5cGU9InJlc2V0Il0sIC5hc2NpaWRvY3RvciBpbnB1dFt0eXBlPSJzdWJtaXQiXSB7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjsKICAgIC8qIDIgKi8KICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIC8qIDMgKi8gfQogIC8qIGxpbmUgMTA0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBidXR0b25bZGlzYWJsZWRdLCAuYXNjaWlkb2N0b3IgaHRtbCBpbnB1dFtkaXNhYmxlZF0gewogICAgY3Vyc29yOiBkZWZhdWx0OyB9CiAgLyogbGluZSAxMDcsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIGlucHV0W3R5cGU9ImNoZWNrYm94Il0sIC5hc2NpaWRvY3RvciBpbnB1dFt0eXBlPSJyYWRpbyJdIHsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAvKiAxICovCiAgICBwYWRkaW5nOiAwOwogICAgLyogMiAqLyB9CiAgLyogbGluZSAxMTAsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIGlucHV0W3R5cGU9InNlYXJjaCJdIHsKICAgIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkOwogICAgLyogMSAqLwogICAgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICAgIC13ZWJraXQtYm94LXNpemluZzogY29udGVudC1ib3g7CiAgICAvKiAyICovCiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsgfQogIC8qIGxpbmUgMTEzLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiwgLmFzY2lpZG9jdG9yIGlucHV0W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHsKICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsgfQogIC8qIGxpbmUgMTE2LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBidXR0b246Oi1tb3otZm9jdXMtaW5uZXIsIC5hc2NpaWRvY3RvciBpbnB1dDo6LW1vei1mb2N1cy1pbm5lciB7CiAgICBib3JkZXI6IDA7CiAgICBwYWRkaW5nOiAwOyB9CiAgLyogbGluZSAxMTksIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHRleHRhcmVhIHsKICAgIG92ZXJmbG93OiBhdXRvOwogICAgLyogMSAqLwogICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgIC8qIDIgKi8gfQogIC8qIGxpbmUgMTIzLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciB0YWJsZSB7CiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgYm9yZGVyLXNwYWNpbmc6IDA7IH0KICAvKiBsaW5lIDEyNSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgbWV0YS5mb3VuZGF0aW9uLW1xLXNtYWxsIHsKICAgIGZvbnQtZmFtaWx5OiAib25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSI7CiAgICB3aWR0aDogNzY4cHg7IH0KICAvKiBsaW5lIDEyNywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgbWV0YS5mb3VuZGF0aW9uLW1xLW1lZGl1bSB7CiAgICBmb250LWZhbWlseTogIm9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOjEyODBweCkiOwogICAgd2lkdGg6IDEyODBweDsgfQogIC8qIGxpbmUgMTI5LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBtZXRhLmZvdW5kYXRpb24tbXEtbGFyZ2UgewogICAgZm9udC1mYW1pbHk6ICJvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDoxNDQwcHgpIjsKICAgIHdpZHRoOiAxNDQwcHg7IH0KICAvKiBsaW5lIDEzMSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgKiwgLmFzY2lpZG9jdG9yICo6YmVmb3JlLCAuYXNjaWlkb2N0b3IgKjphZnRlciB7CiAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9CiAgLyogbGluZSAxMzMsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIGh0bWwsIC5hc2NpaWRvY3RvciBib2R5IHsKICAgIGZvbnQtc2l6ZTogMTAwJTsgfQogIC8qIGxpbmUgMTM1LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBib2R5IHsKICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44KTsKICAgIHBhZGRpbmc6IDA7CiAgICBtYXJnaW46IDA7CiAgICBmb250LWZhbWlseTogIk5vdG8gU2VyaWYiLCAiRGVqYVZ1IFNlcmlmIiwgc2VyaWY7CiAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBjdXJzb3I6IGF1dG87IH0KICAvKiBsaW5lIDEzNywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgYTpob3ZlciB7CiAgICBjdXJzb3I6IHBvaW50ZXI7IH0KICAvKiBsaW5lIDEzOSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgaW1nLCAuYXNjaWlkb2N0b3Igb2JqZWN0LCAuYXNjaWlkb2N0b3IgZW1iZWQgewogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiBhdXRvOyB9CiAgLyogbGluZSAxNDEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIG9iamVjdCwgLmFzY2lpZG9jdG9yIGVtYmVkIHsKICAgIGhlaWdodDogMTAwJTsgfQogIC8qIGxpbmUgMTQzLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBpbWcgewogICAgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJpYzsgfQogIC8qIGxpbmUgMTQ1LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAjbWFwX2NhbnZhcyBpbWcsIC5hc2NpaWRvY3RvciAjbWFwX2NhbnZhcyBlbWJlZCwgLmFzY2lpZG9jdG9yICNtYXBfY2FudmFzIG9iamVjdCwgLmFzY2lpZG9jdG9yIC5tYXBfY2FudmFzIGltZywgLmFzY2lpZG9jdG9yIC5tYXBfY2FudmFzIGVtYmVkLCAuYXNjaWlkb2N0b3IgLm1hcF9jYW52YXMgb2JqZWN0IHsKICAgIG1heC13aWR0aDogbm9uZSAhaW1wb3J0YW50OyB9CiAgLyogbGluZSAxNDcsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5sZWZ0IHsKICAgIGZsb2F0OiBsZWZ0ICFpbXBvcnRhbnQ7IH0KICAvKiBsaW5lIDE0OSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLnJpZ2h0LCAuYXNjaWlkb2N0b3IgYm9keVtjbGFzcyQ9ImFib3V0Il0gZGwgZGQgaW1nLCBib2R5W2NsYXNzJD0iYWJvdXQiXSBkbCBkZCAuYXNjaWlkb2N0b3IgaW1nIHsKICAgIGZsb2F0OiByaWdodCAhaW1wb3J0YW50OyB9CiAgLyogbGluZSAxNTEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC50ZXh0LWxlZnQgewogICAgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50OyB9CiAgLyogbGluZSAxNTMsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC50ZXh0LXJpZ2h0IHsKICAgIHRleHQtYWxpZ246IHJpZ2h0ICFpbXBvcnRhbnQ7IH0KICAvKiBsaW5lIDE1NSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLnRleHQtY2VudGVyIHsKICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50OyB9CiAgLyogbGluZSAxNTcsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC50ZXh0LWp1c3RpZnkgewogICAgdGV4dC1hbGlnbjoganVzdGlmeSAhaW1wb3J0YW50OyB9CiAgLyogbGluZSAxNTksIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5oaWRlIHsKICAgIGRpc3BsYXk6IG5vbmU7IH0KICAvKiBsaW5lIDE2MSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmFudGlhbGlhc2VkLCAuYXNjaWlkb2N0b3IgYm9keSB7CiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsgfQogIC8qIGxpbmUgMTYzLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBpbWcgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfQogIC8qIGxpbmUgMTY1LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciB0ZXh0YXJlYSB7CiAgICBoZWlnaHQ6IGF1dG87CiAgICBtaW4taGVpZ2h0OiA1MHB4OyB9CiAgLyogbGluZSAxNjcsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHNlbGVjdCB7CiAgICB3aWR0aDogMTAwJTsgfQogIC8qIGxpbmUgMTY5LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBwLmxlYWQsIC5hc2NpaWRvY3RvciAucGFyYWdyYXBoLmxlYWQgPiBwLCAuYXNjaWlkb2N0b3IgI3ByZWFtYmxlID4gLnNlY3Rpb25ib2R5ID4gLnBhcmFncmFwaDpmaXJzdC1vZi10eXBlIHAgewogICAgZm9udC1zaXplOiAxLjIxODc1ZW07CiAgICBsaW5lLWhlaWdodDogMS42OyB9CiAgLyogbGluZSAxNzEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5zdWJoZWFkZXIsIC5hc2NpaWRvY3RvciAuYWRtb25pdGlvbmJsb2NrIHRkLmNvbnRlbnQgPiAudGl0bGUsIC5hc2NpaWRvY3RvciAuYWRtb25pdGlvbmJsb2NrIHVsI2Rvd25sb2FkcyA+IGxpIHRkLm5vdGVzID4gLnRpdGxlLCB1bCNkb3dubG9hZHMgPiBsaSAuYXNjaWlkb2N0b3IgLmFkbW9uaXRpb25ibG9jayB0ZC5ub3RlcyA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIC5hdWRpb2Jsb2NrID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgLmV4YW1wbGVibG9jayA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIC5pbWFnZWJsb2NrID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgLmxpc3RpbmdibG9jayA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIC5saXRlcmFsYmxvY2sgPiAudGl0bGUsIC5hc2NpaWRvY3RvciAuc3RlbWJsb2NrID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgLm9wZW5ibG9jayA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIC5wYXJhZ3JhcGggPiAudGl0bGUsIC5hc2NpaWRvY3RvciAucXVvdGVibG9jayA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIHRhYmxlLnRhYmxlYmxvY2sgPiAudGl0bGUsIC5hc2NpaWRvY3RvciAudmVyc2VibG9jayA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIC52aWRlb2Jsb2NrID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgLmRsaXN0ID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgLm9saXN0ID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgLnVsaXN0ID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgLnFsaXN0ID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgLmhkbGlzdCA+IC50aXRsZSB7CiAgICBsaW5lLWhlaWdodDogMS40NTsKICAgIGNvbG9yOiAjN2EyNTE4OwogICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgIG1hcmdpbi10b3A6IDA7CiAgICBtYXJnaW4tYm90dG9tOiAwLjI1ZW07IH0KICAvKiBsaW5lIDE3NCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgZGl2LCAuYXNjaWlkb2N0b3IgZGwsIC5hc2NpaWRvY3RvciBkdCwgLmFzY2lpZG9jdG9yIGRkLCAuYXNjaWlkb2N0b3IgdWwsIC5hc2NpaWRvY3RvciBvbCwgLmFzY2lpZG9jdG9yIGxpLCAuYXNjaWlkb2N0b3IgaDEsIC5hc2NpaWRvY3RvciBoMiwgLmFzY2lpZG9jdG9yIGgzLCAuYXNjaWlkb2N0b3IgI3RvY3RpdGxlLCAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayA+IC5jb250ZW50ID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgLnNpZGViYXJibG9jayA+IC5ub3RlcyA+IC50aXRsZSwgdWwjZG93bmxvYWRzID4gbGkgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgPiAubm90ZXMgPiAudGl0bGUsIC5hc2NpaWRvY3RvciB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSwgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgI2Rvd25sb2FkID4gZGl2IC5zaWRlYmFyYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gLnRpdGxlLCAjZG93bmxvYWQgPiBkaXYgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgaDQsIC5hc2NpaWRvY3RvciBoNSwgLmFzY2lpZG9jdG9yIGg2LCAuYXNjaWlkb2N0b3IgcHJlLCAuYXNjaWlkb2N0b3IgZm9ybSwgLmFzY2lpZG9jdG9yIHAsIC5hc2NpaWRvY3RvciBibG9ja3F1b3RlLCAuYXNjaWlkb2N0b3IgdGgsIC5hc2NpaWRvY3RvciB0ZCB7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiAwOwogICAgZGlyZWN0aW9uOiBsdHI7IH0KICAvKiBsaW5lIDE3NywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgYSB7CiAgICBjb2xvcjogIzIxNTZhNTsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7IH0KICAvKiBsaW5lIDE3OCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgYTpob3ZlciwgLmFzY2lpZG9jdG9yIGE6Zm9jdXMgewogICAgY29sb3I6ICMxZDRiOGY7IH0KICAvKiBsaW5lIDE3OSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgYSBpbWcgewogICAgYm9yZGVyOiBub25lOyB9CiAgLyogbGluZSAxODIsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHAgewogICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgZm9udC1zaXplOiAxZW07CiAgICBsaW5lLWhlaWdodDogMS42OwogICAgbWFyZ2luLWJvdHRvbTogMS4yNWVtOwogICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsgfQogIC8qIGxpbmUgMTgzLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBwIGFzaWRlIHsKICAgIGZvbnQtc2l6ZTogMC44NzVlbTsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgZm9udC1zdHlsZTogaXRhbGljOyB9CiAgLyogbGluZSAxODYsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIGgxLCAuYXNjaWlkb2N0b3IgaDIsIC5hc2NpaWRvY3RvciBoMywgLmFzY2lpZG9jdG9yICN0b2N0aXRsZSwgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgPiAuY29udGVudCA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIC5zaWRlYmFyYmxvY2sgPiAubm90ZXMgPiAudGl0bGUsIHVsI2Rvd25sb2FkcyA+IGxpIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gLm5vdGVzID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiAudGl0bGUsIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSwgLmFzY2lpZG9jdG9yICNkb3dubG9hZCA+IGRpdiAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSwgI2Rvd25sb2FkID4gZGl2IC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIGg0LCAuYXNjaWlkb2N0b3IgaDUsIC5hc2NpaWRvY3RvciBoNiB7CiAgICBmb250LWZhbWlseTogIk9wZW4gU2FucyIsICJEZWphVnUgU2FucyIsIHNhbnMtc2VyaWY7CiAgICBmb250LXdlaWdodDogMzAwOwogICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgY29sb3I6ICNiYTM5MjU7CiAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OwogICAgbWFyZ2luLXRvcDogMWVtOwogICAgbWFyZ2luLWJvdHRvbTogMC41ZW07CiAgICBsaW5lLWhlaWdodDogMS4wMTI1ZW07IH0KICAvKiBsaW5lIDE4NywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgaDEgc21hbGwsIC5hc2NpaWRvY3RvciBoMiBzbWFsbCwgLmFzY2lpZG9jdG9yIGgzIHNtYWxsLCAuYXNjaWlkb2N0b3IgI3RvY3RpdGxlIHNtYWxsLCAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayA+IC5jb250ZW50ID4gLnRpdGxlIHNtYWxsLCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgLnNpZGViYXJibG9jayA+IC5ub3RlcyA+IC50aXRsZSBzbWFsbCwgdWwjZG93bmxvYWRzID4gbGkgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgPiAubm90ZXMgPiAudGl0bGUgc21hbGwsIC5hc2NpaWRvY3RvciB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSBzbWFsbCwgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gLnRpdGxlIHNtYWxsLCAuYXNjaWlkb2N0b3IgI2Rvd25sb2FkID4gZGl2IC5zaWRlYmFyYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gLnRpdGxlIHNtYWxsLCAjZG93bmxvYWQgPiBkaXYgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gLnRpdGxlIHNtYWxsLCAuYXNjaWlkb2N0b3IgaDQgc21hbGwsIC5hc2NpaWRvY3RvciBoNSBzbWFsbCwgLmFzY2lpZG9jdG9yIGg2IHNtYWxsIHsKICAgIGZvbnQtc2l6ZTogNjAlOwogICAgY29sb3I6ICNlOTliOGY7CiAgICBsaW5lLWhlaWdodDogMDsgfQogIC8qIGxpbmUgMTg5LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBoMSB7CiAgICBmb250LXNpemU6IDIuMTI1ZW07IH0KICAvKiBsaW5lIDE5MSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgaDIgewogICAgZm9udC1zaXplOiAxLjY4NzVlbTsgfQogIC8qIGxpbmUgMTkzLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBoMywgLmFzY2lpZG9jdG9yICN0b2N0aXRsZSwgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgPiAuY29udGVudCA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIC5zaWRlYmFyYmxvY2sgPiAubm90ZXMgPiAudGl0bGUsIHVsI2Rvd25sb2FkcyA+IGxpIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gLm5vdGVzID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiAudGl0bGUsIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSwgLmFzY2lpZG9jdG9yICNkb3dubG9hZCA+IGRpdiAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSwgI2Rvd25sb2FkID4gZGl2IC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSB7CiAgICBmb250LXNpemU6IDEuMzc1ZW07IH0KICAvKiBsaW5lIDE5NSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgaDQgewogICAgZm9udC1zaXplOiAxLjEyNWVtOyB9CiAgLyogbGluZSAxOTcsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIGg1IHsKICAgIGZvbnQtc2l6ZTogMS4xMjVlbTsgfQogIC8qIGxpbmUgMTk5LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBoNiB7CiAgICBmb250LXNpemU6IDFlbTsgfQogIC8qIGxpbmUgMjAxLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBociB7CiAgICBib3JkZXI6IHNvbGlkICNkZGRkZDg7CiAgICBib3JkZXItd2lkdGg6IDFweCAwIDA7CiAgICBjbGVhcjogYm90aDsKICAgIG1hcmdpbjogMS4yNWVtIDAgMS4xODc1ZW07CiAgICBoZWlnaHQ6IDA7IH0KICAvKiBsaW5lIDIwNCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgZW0sIC5hc2NpaWRvY3RvciBpIHsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OyB9CiAgLyogbGluZSAyMDYsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHN0cm9uZywgLmFzY2lpZG9jdG9yIGIgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDsgfQogIC8qIGxpbmUgMjA4LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBzbWFsbCB7CiAgICBmb250LXNpemU6IDYwJTsKICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OyB9CiAgLyogbGluZSAyMTAsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIGNvZGUgewogICAgZm9udC1mYW1pbHk6ICJEcm9pZCBTYW5zIE1vbm8iLCAiRGVqYVZ1IFNhbnMgTW9ubyIsICJNb25vc3BhY2UiLCBtb25vc3BhY2U7CiAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC45KTsgfQogIC8qIGxpbmUgMjEzLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciB1bCwgLmFzY2lpZG9jdG9yIG9sLCAuYXNjaWlkb2N0b3IgZGwgewogICAgZm9udC1zaXplOiAxZW07CiAgICBsaW5lLWhlaWdodDogMS42OwogICAgbWFyZ2luLWJvdHRvbTogMS4yNWVtOwogICAgbGlzdC1zdHlsZS1wb3NpdGlvbjogb3V0c2lkZTsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OyB9CiAgLyogbGluZSAyMTUsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHVsLCAuYXNjaWlkb2N0b3Igb2wgewogICAgbWFyZ2luLWxlZnQ6IDEuNWVtOyB9CiAgLyogbGluZSAyMTYsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHVsLm5vLWJ1bGxldCwgLmFzY2lpZG9jdG9yIHVsLnNvY2lhbCwgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcywgLmFzY2lpZG9jdG9yIHVsI2RvY3MtbGlzdCwgLmFzY2lpZG9jdG9yIG9sLm5vLWJ1bGxldCwgLmFzY2lpZG9jdG9yIG9sLnNvY2lhbCB7CiAgICBtYXJnaW4tbGVmdDogMS41ZW07IH0KICAvKiBsaW5lIDIxOSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgdWwgbGkgdWwsIC5hc2NpaWRvY3RvciB1bCBsaSBvbCB7CiAgICBtYXJnaW4tbGVmdDogMS4yNWVtOwogICAgbWFyZ2luLWJvdHRvbTogMDsKICAgIGZvbnQtc2l6ZTogMWVtOwogICAgLyogT3ZlcnJpZGUgbmVzdGVkIGZvbnQtc2l6ZSBjaGFuZ2UgKi8gfQogIC8qIGxpbmUgMjIwLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciB1bC5zcXVhcmUgbGkgdWwsIC5hc2NpaWRvY3RvciB1bC5jaXJjbGUgbGkgdWwsIC5hc2NpaWRvY3RvciB1bC5kaXNjIGxpIHVsIHsKICAgIGxpc3Qtc3R5bGU6IGluaGVyaXQ7IH0KICAvKiBsaW5lIDIyMSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgdWwuc3F1YXJlIHsKICAgIGxpc3Qtc3R5bGUtdHlwZTogc3F1YXJlOyB9CiAgLyogbGluZSAyMjIsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHVsLmNpcmNsZSB7CiAgICBsaXN0LXN0eWxlLXR5cGU6IGNpcmNsZTsgfQogIC8qIGxpbmUgMjIzLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciB1bC5kaXNjIHsKICAgIGxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgfQogIC8qIGxpbmUgMjI0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciB1bC5uby1idWxsZXQsIC5hc2NpaWRvY3RvciB1bC5zb2NpYWwsIC5hc2NpaWRvY3RvciB1bCNkb3dubG9hZHMsIC5hc2NpaWRvY3RvciB1bCNkb2NzLWxpc3QgewogICAgbGlzdC1zdHlsZTogbm9uZTsgfQogIC8qIGxpbmUgMjI3LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBvbCBsaSB1bCwgLmFzY2lpZG9jdG9yIG9sIGxpIG9sIHsKICAgIG1hcmdpbi1sZWZ0OiAxLjI1ZW07CiAgICBtYXJnaW4tYm90dG9tOiAwOyB9CiAgLyogbGluZSAyMzAsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIGRsIGR0IHsKICAgIG1hcmdpbi1ib3R0b206IDAuMzEyNWVtOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KICAvKiBsaW5lIDIzMSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgZGwgZGQgewogICAgbWFyZ2luLWJvdHRvbTogMS4yNWVtOyB9CiAgLyogbGluZSAyMzQsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIGFiYnIsIC5hc2NpaWRvY3RvciBhY3JvbnltIHsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBmb250LXNpemU6IDkwJTsKICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOCk7CiAgICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkICNkZGRkZGQ7CiAgICBjdXJzb3I6IGhlbHA7IH0KICAvKiBsaW5lIDIzNiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgYWJiciB7CiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgfQogIC8qIGxpbmUgMjM5LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBibG9ja3F1b3RlIHsKICAgIG1hcmdpbjogMCAwIDEuMjVlbTsKICAgIHBhZGRpbmc6IDAuNTYyNWVtIDEuMjVlbSAwIDEuMTg3NWVtOwogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZGRkZGRkOyB9CiAgLyogbGluZSAyNDAsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIGJsb2NrcXVvdGUgY2l0ZSB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZvbnQtc2l6ZTogMC45Mzc1ZW07CiAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjYpOyB9CiAgLyogbGluZSAyNDEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIGJsb2NrcXVvdGUgY2l0ZTpiZWZvcmUgewogICAgY29udGVudDogIlwyMDE0IFwwMDIwIjsgfQogIC8qIGxpbmUgMjQyLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBibG9ja3F1b3RlIGNpdGUgYSwgLmFzY2lpZG9jdG9yIGJsb2NrcXVvdGUgY2l0ZSBhOnZpc2l0ZWQgewogICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC42KTsgfQogIC8qIGxpbmUgMjQ0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBibG9ja3F1b3RlLCAuYXNjaWlkb2N0b3IgYmxvY2txdW90ZSBwIHsKICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjg1KTsgfQogIC8qIGxpbmUgMjQ3LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAudmNhcmQgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgbWFyZ2luOiAwIDAgMS4yNWVtIDA7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkZGRkOwogICAgcGFkZGluZzogMC42MjVlbSAwLjc1ZW07IH0KICAvKiBsaW5lIDI0OCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLnZjYXJkIGxpIHsKICAgIG1hcmdpbjogMDsKICAgIGRpc3BsYXk6IGJsb2NrOyB9CiAgLyogbGluZSAyNDksIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC52Y2FyZCAuZm4gewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LXNpemU6IDAuOTM3NWVtOyB9CiAgLyogbGluZSAyNTEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC52ZXZlbnQgLnN1bW1hcnkgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KICAvKiBsaW5lIDI1MiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLnZldmVudCBhYmJyIHsKICAgIGN1cnNvcjogYXV0bzsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgYm9yZGVyOiBub25lOwogICAgcGFkZGluZzogMCAwLjA2MjVlbTsgfQogIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHsKICAgIC8qIGxpbmUgMjU0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogICAgLmFzY2lpZG9jdG9yIGgxLCAuYXNjaWlkb2N0b3IgaDIsIC5hc2NpaWRvY3RvciBoMywgLmFzY2lpZG9jdG9yICN0b2N0aXRsZSwgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgPiAuY29udGVudCA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIC5zaWRlYmFyYmxvY2sgPiAubm90ZXMgPiAudGl0bGUsIHVsI2Rvd25sb2FkcyA+IGxpIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gLm5vdGVzID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiAudGl0bGUsIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSwgLmFzY2lpZG9jdG9yICNkb3dubG9hZCA+IGRpdiAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSwgI2Rvd25sb2FkID4gZGl2IC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIGg0LCAuYXNjaWlkb2N0b3IgaDUsIC5hc2NpaWRvY3RvciBoNiB7CiAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7IH0KICAgIC8qIGxpbmUgMjU1LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogICAgLmFzY2lpZG9jdG9yIGgxIHsKICAgICAgZm9udC1zaXplOiAyLjc1ZW07IH0KICAgIC8qIGxpbmUgMjU2LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogICAgLmFzY2lpZG9jdG9yIGgyIHsKICAgICAgZm9udC1zaXplOiAyLjMxMjVlbTsgfQogICAgLyogbGluZSAyNTcsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgICAuYXNjaWlkb2N0b3IgaDMsIC5hc2NpaWRvY3RvciAjdG9jdGl0bGUsIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gLmNvbnRlbnQgPiAudGl0bGUsIC5hc2NpaWRvY3RvciB1bCNkb3dubG9hZHMgPiBsaSAuc2lkZWJhcmJsb2NrID4gLm5vdGVzID4gLnRpdGxlLCB1bCNkb3dubG9hZHMgPiBsaSAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayA+IC5ub3RlcyA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5zaWRlYmFyYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gLnRpdGxlLCB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiAudGl0bGUsIC5hc2NpaWRvY3RvciAjZG93bmxvYWQgPiBkaXYgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiAudGl0bGUsICNkb3dubG9hZCA+IGRpdiAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiAudGl0bGUgewogICAgICBmb250LXNpemU6IDEuNjg3NWVtOyB9CiAgICAvKiBsaW5lIDI1OCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAgIC5hc2NpaWRvY3RvciBoNCB7CiAgICAgIGZvbnQtc2l6ZTogMS40Mzc1ZW07IH0gfQogIC8qIGxpbmUgMjYwLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciB0YWJsZSB7CiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgIG1hcmdpbi1ib3R0b206IDEuMjVlbTsKICAgIGJvcmRlcjogc29saWQgMXB4ICNkZWRlZGU7IH0KICAvKiBsaW5lIDI2MSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgdGFibGUgdGhlYWQsIC5hc2NpaWRvY3RvciB0YWJsZSB0Zm9vdCB7CiAgICBiYWNrZ3JvdW5kOiAjZjdmOGY3OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KICAvKiBsaW5lIDI2MiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgdGFibGUgdGhlYWQgdHIgdGgsIC5hc2NpaWRvY3RvciB0YWJsZSB0aGVhZCB0ciB0ZCwgLmFzY2lpZG9jdG9yIHRhYmxlIHRmb290IHRyIHRoLCAuYXNjaWlkb2N0b3IgdGFibGUgdGZvb3QgdHIgdGQgewogICAgcGFkZGluZzogMC41ZW0gMC42MjVlbSAwLjYyNWVtOwogICAgZm9udC1zaXplOiBpbmhlcml0OwogICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44KTsKICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KICAvKiBsaW5lIDI2MywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgdGFibGUgdHIgdGgsIC5hc2NpaWRvY3RvciB0YWJsZSB0ciB0ZCB7CiAgICBwYWRkaW5nOiAwLjU2MjVlbSAwLjYyNWVtOwogICAgZm9udC1zaXplOiBpbmhlcml0OwogICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44KTsgfQogIC8qIGxpbmUgMjY0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciB0YWJsZSB0ci5ldmVuLCAuYXNjaWlkb2N0b3IgdGFibGUgdHIuYWx0LCAuYXNjaWlkb2N0b3IgdGFibGUgdHI6bnRoLW9mLXR5cGUoZXZlbikgewogICAgYmFja2dyb3VuZDogI2Y4ZjhmNzsgfQogIC8qIGxpbmUgMjY1LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciB0YWJsZSB0aGVhZCB0ciB0aCwgLmFzY2lpZG9jdG9yIHRhYmxlIHRmb290IHRyIHRoLCAuYXNjaWlkb2N0b3IgdGFibGUgdGJvZHkgdHIgdGQsIC5hc2NpaWRvY3RvciB0YWJsZSB0ciB0ZCwgLmFzY2lpZG9jdG9yIHRhYmxlIHRmb290IHRyIHRkIHsKICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICBsaW5lLWhlaWdodDogMS42OyB9CiAgLyogbGluZSAyNjcsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIGgxLCAuYXNjaWlkb2N0b3IgaDIsIC5hc2NpaWRvY3RvciBoMywgLmFzY2lpZG9jdG9yICN0b2N0aXRsZSwgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgPiAuY29udGVudCA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIC5zaWRlYmFyYmxvY2sgPiAubm90ZXMgPiAudGl0bGUsIHVsI2Rvd25sb2FkcyA+IGxpIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gLm5vdGVzID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiAudGl0bGUsIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSwgLmFzY2lpZG9jdG9yICNkb3dubG9hZCA+IGRpdiAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSwgI2Rvd25sb2FkID4gZGl2IC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIGg0LCAuYXNjaWlkb2N0b3IgaDUsIC5hc2NpaWRvY3RvciBoNiB7CiAgICBsaW5lLWhlaWdodDogMS4yOwogICAgd29yZC1zcGFjaW5nOiAtMC4wNWVtOyB9CiAgLyogbGluZSAyNjgsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIGgxIHN0cm9uZywgLmFzY2lpZG9jdG9yIGgyIHN0cm9uZywgLmFzY2lpZG9jdG9yIGgzIHN0cm9uZywgLmFzY2lpZG9jdG9yICN0b2N0aXRsZSBzdHJvbmcsIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gLmNvbnRlbnQgPiAudGl0bGUgc3Ryb25nLCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgLnNpZGViYXJibG9jayA+IC5ub3RlcyA+IC50aXRsZSBzdHJvbmcsIHVsI2Rvd25sb2FkcyA+IGxpIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gLm5vdGVzID4gLnRpdGxlIHN0cm9uZywgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5zaWRlYmFyYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gLnRpdGxlIHN0cm9uZywgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gLnRpdGxlIHN0cm9uZywgLmFzY2lpZG9jdG9yICNkb3dubG9hZCA+IGRpdiAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSBzdHJvbmcsICNkb3dubG9hZCA+IGRpdiAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiAudGl0bGUgc3Ryb25nLCAuYXNjaWlkb2N0b3IgaDQgc3Ryb25nLCAuYXNjaWlkb2N0b3IgaDUgc3Ryb25nLCAuYXNjaWlkb2N0b3IgaDYgc3Ryb25nIHsKICAgIGZvbnQtd2VpZ2h0OiA0MDA7IH0KICAvKiBsaW5lIDI3MCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmNsZWFyZml4OmJlZm9yZSwgLmFzY2lpZG9jdG9yICNicmVha2luZyBkaXY6YmVmb3JlLCAjYnJlYWtpbmcgLmFzY2lpZG9jdG9yIGRpdjpiZWZvcmUsIC5hc2NpaWRvY3RvciBib2R5W2NsYXNzJD0iYWJvdXQiXSBkbCBkZDpiZWZvcmUsIGJvZHlbY2xhc3MkPSJhYm91dCJdIGRsIC5hc2NpaWRvY3RvciBkZDpiZWZvcmUsIC5hc2NpaWRvY3RvciAuY2xlYXJmaXg6YWZ0ZXIsIC5hc2NpaWRvY3RvciAjYnJlYWtpbmcgZGl2OmFmdGVyLCAjYnJlYWtpbmcgLmFzY2lpZG9jdG9yIGRpdjphZnRlciwgLmFzY2lpZG9jdG9yIGJvZHlbY2xhc3MkPSJhYm91dCJdIGRsIGRkOmFmdGVyLCBib2R5W2NsYXNzJD0iYWJvdXQiXSBkbCAuYXNjaWlkb2N0b3IgZGQ6YWZ0ZXIsIC5hc2NpaWRvY3RvciAuZmxvYXQtZ3JvdXA6YmVmb3JlLCAuYXNjaWlkb2N0b3IgLmZsb2F0LWdyb3VwOmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIgIjsKICAgIGRpc3BsYXk6IHRhYmxlOyB9CiAgLyogbGluZSAyNzEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5jbGVhcmZpeDphZnRlciwgLmFzY2lpZG9jdG9yICNicmVha2luZyBkaXY6YWZ0ZXIsICNicmVha2luZyAuYXNjaWlkb2N0b3IgZGl2OmFmdGVyLCAuYXNjaWlkb2N0b3IgYm9keVtjbGFzcyQ9ImFib3V0Il0gZGwgZGQ6YWZ0ZXIsIGJvZHlbY2xhc3MkPSJhYm91dCJdIGRsIC5hc2NpaWRvY3RvciBkZDphZnRlciwgLmFzY2lpZG9jdG9yIC5mbG9hdC1ncm91cDphZnRlciB7CiAgICBjbGVhcjogYm90aDsgfQogIC8qIGxpbmUgMjczLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAqOm5vdChwcmUpID4gY29kZSB7CiAgICBmb250LXNpemU6IDAuOTM3NWVtOwogICAgZm9udC1zdHlsZTogbm9ybWFsICFpbXBvcnRhbnQ7CiAgICBsZXR0ZXItc3BhY2luZzogMDsKICAgIHBhZGRpbmc6IDAuMWVtIDAuNWV4OwogICAgd29yZC1zcGFjaW5nOiAtMC4xNWVtOwogICAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmODsKICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgbGluZS1oZWlnaHQ6IDEuNDU7CiAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVTcGVlZDsgfQogIC8qIGxpbmUgMjc1LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBwcmUsIC5hc2NpaWRvY3RvciBwcmUgPiBjb2RlIHsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ1OwogICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC45KTsKICAgIGZvbnQtZmFtaWx5OiAiRHJvaWQgU2FucyBNb25vIiwgIkRlamFWdSBTYW5zIE1vbm8iLCAiTW9ub3NwYWNlIiwgbW9ub3NwYWNlOwogICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZVNwZWVkOyB9CiAgLyogbGluZSAyNzcsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5rZXlzZXEgewogICAgY29sb3I6IHJnYmEoNTEsIDUxLCA1MSwgMC44KTsgfQogIC8qIGxpbmUgMjc5LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBrYmQgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44KTsKICAgIGZvbnQtc2l6ZTogMC43NWVtOwogICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOwogICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpLCAwIDAgMCAwLjFlbSB3aGl0ZSBpbnNldDsKICAgIGJveC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpLCAwIDAgMCAwLjFlbSB3aGl0ZSBpbnNldDsKICAgIG1hcmdpbjogLTAuMTVlbSAwLjE1ZW0gMCAwLjE1ZW07CiAgICBwYWRkaW5nOiAwLjJlbSAwLjZlbSAwLjJlbSAwLjVlbTsKICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOyB9CiAgLyogbGluZSAyODEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5rZXlzZXEga2JkOmZpcnN0LWNoaWxkIHsKICAgIG1hcmdpbi1sZWZ0OiAwOyB9CiAgLyogbGluZSAyODMsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5rZXlzZXEga2JkOmxhc3QtY2hpbGQgewogICAgbWFyZ2luLXJpZ2h0OiAwOyB9CiAgLyogbGluZSAyODUsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5tZW51c2VxLCAuYXNjaWlkb2N0b3IgLm1lbnUgewogICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44KTsgfQogIC8qIGxpbmUgMjg3LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBiLmJ1dHRvbjpiZWZvcmUsIC5hc2NpaWRvY3RvciBiLmJ1dHRvbjphZnRlciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB0b3A6IC0xcHg7CiAgICBmb250LXdlaWdodDogbm9ybWFsOyB9CiAgLyogbGluZSAyODksIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIGIuYnV0dG9uOmJlZm9yZSB7CiAgICBjb250ZW50OiAiWyI7CiAgICBwYWRkaW5nOiAwIDNweCAwIDJweDsgfQogIC8qIGxpbmUgMjkxLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBiLmJ1dHRvbjphZnRlciB7CiAgICBjb250ZW50OiAiXSI7CiAgICBwYWRkaW5nOiAwIDJweCAwIDNweDsgfQogIC8qIGxpbmUgMjkzLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBwIGEgPiBjb2RlOmhvdmVyIHsKICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOSk7IH0KICAvKiBsaW5lIDI5NSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgI2hlYWRlciwgLmFzY2lpZG9jdG9yICNjb250ZW50LCAuYXNjaWlkb2N0b3IgI2Zvb3Rub3RlcywgLmFzY2lpZG9jdG9yICNmb290ZXIgewogICAgd2lkdGg6IDEwMCU7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIG1hcmdpbi1yaWdodDogYXV0bzsKICAgIG1hcmdpbi10b3A6IDA7CiAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgbWF4LXdpZHRoOiA2Mi41ZW07CiAgICAqem9vbTogMTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHBhZGRpbmctbGVmdDogMC45Mzc1ZW07CiAgICBwYWRkaW5nLXJpZ2h0OiAwLjkzNzVlbTsgfQogIC8qIGxpbmUgMjk2LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAjaGVhZGVyOmJlZm9yZSwgLmFzY2lpZG9jdG9yICNoZWFkZXI6YWZ0ZXIsIC5hc2NpaWRvY3RvciAjY29udGVudDpiZWZvcmUsIC5hc2NpaWRvY3RvciAjY29udGVudDphZnRlciwgLmFzY2lpZG9jdG9yICNmb290bm90ZXM6YmVmb3JlLCAuYXNjaWlkb2N0b3IgI2Zvb3Rub3RlczphZnRlciwgLmFzY2lpZG9jdG9yICNmb290ZXI6YmVmb3JlLCAuYXNjaWlkb2N0b3IgI2Zvb3RlcjphZnRlciB7CiAgICBjb250ZW50OiAiICI7CiAgICBkaXNwbGF5OiB0YWJsZTsgfQogIC8qIGxpbmUgMjk3LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAjaGVhZGVyOmFmdGVyLCAuYXNjaWlkb2N0b3IgI2NvbnRlbnQ6YWZ0ZXIsIC5hc2NpaWRvY3RvciAjZm9vdG5vdGVzOmFmdGVyLCAuYXNjaWlkb2N0b3IgI2Zvb3RlcjphZnRlciB7CiAgICBjbGVhcjogYm90aDsgfQogIC8qIGxpbmUgMjk5LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAjY29udGVudCB7CiAgICBtYXJnaW4tdG9wOiAxLjI1ZW07IH0KICAvKiBsaW5lIDMwMSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgI2NvbnRlbnQ6YmVmb3JlIHsKICAgIGNvbnRlbnQ6IG5vbmU7IH0KICAvKiBsaW5lIDMwMywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgI2hlYWRlciA+IGgxOmZpcnN0LWNoaWxkIHsKICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuODUpOwogICAgbWFyZ2luLXRvcDogMi4yNXJlbTsKICAgIG1hcmdpbi1ib3R0b206IDA7IH0KICAvKiBsaW5lIDMwNCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgI2hlYWRlciA+IGgxOmZpcnN0LWNoaWxkICsgI3RvYyB7CiAgICBtYXJnaW4tdG9wOiA4cHg7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZGRkODsgfQogIC8qIGxpbmUgMzA1LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAjaGVhZGVyID4gaDE6b25seS1jaGlsZCwgLmFzY2lpZG9jdG9yIGJvZHkudG9jMiAjaGVhZGVyID4gaDE6bnRoLWxhc3QtY2hpbGQoMikgewogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGRkZDg7CiAgICBwYWRkaW5nLWJvdHRvbTogOHB4OyB9CiAgLyogbGluZSAzMDYsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yICNoZWFkZXIgLmRldGFpbHMgewogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGRkZDg7CiAgICBsaW5lLWhlaWdodDogMS40NTsKICAgIHBhZGRpbmctdG9wOiAwLjI1ZW07CiAgICBwYWRkaW5nLWJvdHRvbTogMC4yNWVtOwogICAgcGFkZGluZy1sZWZ0OiAwLjI1ZW07CiAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjYpOwogICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgLW1zLWZsZXgtZmxvdzogcm93IHdyYXA7CiAgICAtd2Via2l0LWZsZXgtZmxvdzogcm93IHdyYXA7CiAgICBmbGV4LWZsb3c6IHJvdyB3cmFwOyB9CiAgLyogbGluZSAzMDcsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yICNoZWFkZXIgLmRldGFpbHMgc3BhbjpmaXJzdC1jaGlsZCB7CiAgICBtYXJnaW4tbGVmdDogLTAuMTI1ZW07IH0KICAvKiBsaW5lIDMwOCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgI2hlYWRlciAuZGV0YWlscyBzcGFuLmVtYWlsIGEgewogICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44NSk7IH0KICAvKiBsaW5lIDMwOSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgI2hlYWRlciAuZGV0YWlscyBiciB7CiAgICBkaXNwbGF5OiBub25lOyB9CiAgLyogbGluZSAzMTAsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yICNoZWFkZXIgLmRldGFpbHMgYnIgKyBzcGFuOmJlZm9yZSB7CiAgICBjb250ZW50OiAiXDAwYTBcMjAxM1wwMGEwIjsgfQogIC8qIGxpbmUgMzExLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAjaGVhZGVyIC5kZXRhaWxzIGJyICsgc3Bhbi5hdXRob3I6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJcMDBhMFwyMmM1XDAwYTAiOwogICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44NSk7IH0KICAvKiBsaW5lIDMxMiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgI2hlYWRlciAuZGV0YWlscyBiciArIHNwYW4jcmV2cmVtYXJrOmJlZm9yZSB7CiAgICBjb250ZW50OiAiXDAwYTB8XDAwYTAiOyB9CiAgLyogbGluZSAzMTMsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yICNoZWFkZXIgI3Jldm51bWJlciB7CiAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTsgfQogIC8qIGxpbmUgMzE0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAjaGVhZGVyICNyZXZudW1iZXI6YWZ0ZXIgewogICAgY29udGVudDogIlwwMGEwIjsgfQogIC8qIGxpbmUgMzE2LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAjY29udGVudCA+IGgxOmZpcnN0LWNoaWxkOm5vdChbY2xhc3NdKSB7CiAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjg1KTsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkZGQ4OwogICAgcGFkZGluZy1ib3R0b206IDhweDsKICAgIG1hcmdpbi10b3A6IDA7CiAgICBwYWRkaW5nLXRvcDogMXJlbTsKICAgIG1hcmdpbi1ib3R0b206IDEuMjVyZW07IH0KICAvKiBsaW5lIDMxOCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgI3RvYyB7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VmZWZlZDsKICAgIHBhZGRpbmctYm90dG9tOiAwLjVlbTsgfQogIC8qIGxpbmUgMzE5LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAjdG9jID4gdWwgewogICAgbWFyZ2luLWxlZnQ6IDAuMTI1ZW07IH0KICAvKiBsaW5lIDMyMCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgI3RvYyB1bC5zZWN0bGV2ZWwwID4gbGkgPiBhIHsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsgfQogIC8qIGxpbmUgMzIxLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAjdG9jIHVsLnNlY3RsZXZlbDAgdWwuc2VjdGxldmVsMSB7CiAgICBtYXJnaW46IDAuNWVtIDA7IH0KICAvKiBsaW5lIDMyMiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgI3RvYyB1bCB7CiAgICBmb250LWZhbWlseTogIk9wZW4gU2FucyIsICJEZWphVnUgU2FucyIsIHNhbnMtc2VyaWY7CiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7IH0KICAvKiBsaW5lIDMyMywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgI3RvYyBhIHsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQogIC8qIGxpbmUgMzI0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAjdG9jIGE6YWN0aXZlIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9CiAgLyogbGluZSAzMjYsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yICN0b2N0aXRsZSB7CiAgICBjb2xvcjogIzdhMjUxODsKICAgIGZvbnQtc2l6ZTogMS4yZW07IH0KICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7CiAgICAvKiBsaW5lIDMyOCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAgIC5hc2NpaWRvY3RvciAjdG9jdGl0bGUgewogICAgICBmb250LXNpemU6IDEuMzc1ZW07IH0KICAgIC8qIGxpbmUgMzI5LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogICAgLmFzY2lpZG9jdG9yIGJvZHkudG9jMiB7CiAgICAgIHBhZGRpbmctbGVmdDogMTVlbTsKICAgICAgcGFkZGluZy1yaWdodDogMDsgfQogICAgLyogbGluZSAzMzAsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgICAuYXNjaWlkb2N0b3IgI3RvYy50b2MyIHsKICAgICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOGY3OwogICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIHdpZHRoOiAxNWVtOwogICAgICBsZWZ0OiAwOwogICAgICB0b3A6IDA7CiAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNlZmVmZWQ7CiAgICAgIGJvcmRlci10b3Atd2lkdGg6IDAgIWltcG9ydGFudDsKICAgICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMCAhaW1wb3J0YW50OwogICAgICB6LWluZGV4OiAxMDAwOwogICAgICBwYWRkaW5nOiAxLjI1ZW0gMWVtOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIG92ZXJmbG93OiBhdXRvOyB9CiAgICAvKiBsaW5lIDMzMSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAgIC5hc2NpaWRvY3RvciAjdG9jLnRvYzIgI3RvY3RpdGxlIHsKICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgZm9udC1zaXplOiAxLjJlbTsgfQogICAgLyogbGluZSAzMzIsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgICAuYXNjaWlkb2N0b3IgI3RvYy50b2MyID4gdWwgewogICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICBtYXJnaW4tYm90dG9tOiAwOyB9CiAgICAvKiBsaW5lIDMzMywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAgIC5hc2NpaWRvY3RvciAjdG9jLnRvYzIgdWwgdWwgewogICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgcGFkZGluZy1sZWZ0OiAxZW07IH0KICAgIC8qIGxpbmUgMzM0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogICAgLmFzY2lpZG9jdG9yICN0b2MudG9jMiB1bC5zZWN0bGV2ZWwwIHVsLnNlY3RsZXZlbDEgewogICAgICBwYWRkaW5nLWxlZnQ6IDA7CiAgICAgIG1hcmdpbi10b3A6IDAuNWVtOwogICAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsgfQogICAgLyogbGluZSAzMzUsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgICAuYXNjaWlkb2N0b3IgYm9keS50b2MyLnRvYy1yaWdodCB7CiAgICAgIHBhZGRpbmctbGVmdDogMDsKICAgICAgcGFkZGluZy1yaWdodDogMTVlbTsgfQogICAgLyogbGluZSAzMzYsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgICAuYXNjaWlkb2N0b3IgYm9keS50b2MyLnRvYy1yaWdodCAjdG9jLnRvYzIgewogICAgICBib3JkZXItcmlnaHQtd2lkdGg6IDA7CiAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2VmZWZlZDsKICAgICAgbGVmdDogYXV0bzsKICAgICAgcmlnaHQ6IDA7IH0gfQogIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTI4MHB4KSB7CiAgICAvKiBsaW5lIDMzNywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAgIC5hc2NpaWRvY3RvciBib2R5LnRvYzIgewogICAgICBwYWRkaW5nLWxlZnQ6IDIwZW07CiAgICAgIHBhZGRpbmctcmlnaHQ6IDA7IH0KICAgIC8qIGxpbmUgMzM4LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogICAgLmFzY2lpZG9jdG9yICN0b2MudG9jMiB7CiAgICAgIHdpZHRoOiAyMGVtOyB9CiAgICAvKiBsaW5lIDMzOSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAgIC5hc2NpaWRvY3RvciAjdG9jLnRvYzIgI3RvY3RpdGxlIHsKICAgICAgZm9udC1zaXplOiAxLjM3NWVtOyB9CiAgICAvKiBsaW5lIDM0MCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAgIC5hc2NpaWRvY3RvciAjdG9jLnRvYzIgPiB1bCB7CiAgICAgIGZvbnQtc2l6ZTogMC45NWVtOyB9CiAgICAvKiBsaW5lIDM0MSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAgIC5hc2NpaWRvY3RvciAjdG9jLnRvYzIgdWwgdWwgewogICAgICBwYWRkaW5nLWxlZnQ6IDEuMjVlbTsgfQogICAgLyogbGluZSAzNDIsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgICAuYXNjaWlkb2N0b3IgYm9keS50b2MyLnRvYy1yaWdodCB7CiAgICAgIHBhZGRpbmctbGVmdDogMDsKICAgICAgcGFkZGluZy1yaWdodDogMjBlbTsgfSB9CiAgLyogbGluZSAzNDMsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yICNjb250ZW50ICN0b2MgewogICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKICAgIGJvcmRlci13aWR0aDogMXB4OwogICAgYm9yZGVyLWNvbG9yOiAjZTBlMGRjOwogICAgbWFyZ2luLWJvdHRvbTogMS4yNWVtOwogICAgcGFkZGluZzogMS4yNWVtOwogICAgYmFja2dyb3VuZDogI2Y4ZjhmNzsKICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OyB9CiAgLyogbGluZSAzNDQsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yICNjb250ZW50ICN0b2MgPiA6Zmlyc3QtY2hpbGQgewogICAgbWFyZ2luLXRvcDogMDsgfQogIC8qIGxpbmUgMzQ1LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAjY29udGVudCAjdG9jID4gOmxhc3QtY2hpbGQgewogICAgbWFyZ2luLWJvdHRvbTogMDsgfQogIC8qIGxpbmUgMzQ3LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAjZm9vdGVyIHsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44KTsKICAgIHBhZGRpbmc6IDEuMjVlbTsgfQogIC8qIGxpbmUgMzQ5LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAjZm9vdGVyLXRleHQgewogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ0OyB9CiAgLyogbGluZSAzNTEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5zZWN0MSB7CiAgICBwYWRkaW5nLWJvdHRvbTogMC42MjVlbTsgfQogIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHsKICAgIC8qIGxpbmUgMzUzLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogICAgLmFzY2lpZG9jdG9yIC5zZWN0MSB7CiAgICAgIHBhZGRpbmctYm90dG9tOiAxLjI1ZW07IH0gfQogIC8qIGxpbmUgMzU0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAuc2VjdDEgKyAuc2VjdDEgewogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlZmVmZWQ7IH0KICAvKiBsaW5lIDM1NiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgI2NvbnRlbnQgaDEgPiBhLmFuY2hvciwgLmFzY2lpZG9jdG9yIGgyID4gYS5hbmNob3IsIC5hc2NpaWRvY3RvciBoMyA+IGEuYW5jaG9yLCAuYXNjaWlkb2N0b3IgI3RvY3RpdGxlID4gYS5hbmNob3IsIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gLmNvbnRlbnQgPiAudGl0bGUgPiBhLmFuY2hvciwgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIC5zaWRlYmFyYmxvY2sgPiAubm90ZXMgPiAudGl0bGUgPiBhLmFuY2hvciwgdWwjZG93bmxvYWRzID4gbGkgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgPiAubm90ZXMgPiAudGl0bGUgPiBhLmFuY2hvciwgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5zaWRlYmFyYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gLnRpdGxlID4gYS5hbmNob3IsIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSA+IGEuYW5jaG9yLCAuYXNjaWlkb2N0b3IgI2Rvd25sb2FkID4gZGl2IC5zaWRlYmFyYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gLnRpdGxlID4gYS5hbmNob3IsICNkb3dubG9hZCA+IGRpdiAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiAudGl0bGUgPiBhLmFuY2hvciwgLmFzY2lpZG9jdG9yIGg0ID4gYS5hbmNob3IsIC5hc2NpaWRvY3RvciBoNSA+IGEuYW5jaG9yLCAuYXNjaWlkb2N0b3IgaDYgPiBhLmFuY2hvciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB6LWluZGV4OiAxMDAxOwogICAgd2lkdGg6IDEuNWV4OwogICAgbWFyZ2luLWxlZnQ6IC0xLjVleDsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBmb250LXdlaWdodDogbm9ybWFsOyB9CiAgLyogbGluZSAzNTcsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yICNjb250ZW50IGgxID4gYS5hbmNob3I6YmVmb3JlLCAuYXNjaWlkb2N0b3IgaDIgPiBhLmFuY2hvcjpiZWZvcmUsIC5hc2NpaWRvY3RvciBoMyA+IGEuYW5jaG9yOmJlZm9yZSwgLmFzY2lpZG9jdG9yICN0b2N0aXRsZSA+IGEuYW5jaG9yOmJlZm9yZSwgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgPiAuY29udGVudCA+IC50aXRsZSA+IGEuYW5jaG9yOmJlZm9yZSwgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIC5zaWRlYmFyYmxvY2sgPiAubm90ZXMgPiAudGl0bGUgPiBhLmFuY2hvcjpiZWZvcmUsIHVsI2Rvd25sb2FkcyA+IGxpIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gLm5vdGVzID4gLnRpdGxlID4gYS5hbmNob3I6YmVmb3JlLCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiAudGl0bGUgPiBhLmFuY2hvcjpiZWZvcmUsIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSA+IGEuYW5jaG9yOmJlZm9yZSwgLmFzY2lpZG9jdG9yICNkb3dubG9hZCA+IGRpdiAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSA+IGEuYW5jaG9yOmJlZm9yZSwgI2Rvd25sb2FkID4gZGl2IC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSA+IGEuYW5jaG9yOmJlZm9yZSwgLmFzY2lpZG9jdG9yIGg0ID4gYS5hbmNob3I6YmVmb3JlLCAuYXNjaWlkb2N0b3IgaDUgPiBhLmFuY2hvcjpiZWZvcmUsIC5hc2NpaWRvY3RvciBoNiA+IGEuYW5jaG9yOmJlZm9yZSB7CiAgICBjb250ZW50OiAiXDAwQTciOwogICAgZm9udC1zaXplOiAwLjg1ZW07CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHBhZGRpbmctdG9wOiAwLjFlbTsgfQogIC8qIGxpbmUgMzU4LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAjY29udGVudCBoMTpob3ZlciA+IGEuYW5jaG9yLCAuYXNjaWlkb2N0b3IgI2NvbnRlbnQgaDEgPiBhLmFuY2hvcjpob3ZlciwgLmFzY2lpZG9jdG9yIGgyOmhvdmVyID4gYS5hbmNob3IsIC5hc2NpaWRvY3RvciBoMiA+IGEuYW5jaG9yOmhvdmVyLCAuYXNjaWlkb2N0b3IgaDM6aG92ZXIgPiBhLmFuY2hvciwgLmFzY2lpZG9jdG9yICN0b2N0aXRsZTpob3ZlciA+IGEuYW5jaG9yLCAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayA+IC5jb250ZW50ID4gLnRpdGxlOmhvdmVyID4gYS5hbmNob3IsIC5hc2NpaWRvY3RvciB1bCNkb3dubG9hZHMgPiBsaSAuc2lkZWJhcmJsb2NrID4gLm5vdGVzID4gLnRpdGxlOmhvdmVyID4gYS5hbmNob3IsIHVsI2Rvd25sb2FkcyA+IGxpIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gLm5vdGVzID4gLnRpdGxlOmhvdmVyID4gYS5hbmNob3IsIC5hc2NpaWRvY3RvciB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZTpob3ZlciA+IGEuYW5jaG9yLCB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiAudGl0bGU6aG92ZXIgPiBhLmFuY2hvciwgLmFzY2lpZG9jdG9yICNkb3dubG9hZCA+IGRpdiAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZTpob3ZlciA+IGEuYW5jaG9yLCAjZG93bmxvYWQgPiBkaXYgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gLnRpdGxlOmhvdmVyID4gYS5hbmNob3IsIC5hc2NpaWRvY3RvciBoMyA+IGEuYW5jaG9yOmhvdmVyLCAuYXNjaWlkb2N0b3IgI3RvY3RpdGxlID4gYS5hbmNob3I6aG92ZXIsIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gLmNvbnRlbnQgPiAudGl0bGUgPiBhLmFuY2hvcjpob3ZlciwgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIC5zaWRlYmFyYmxvY2sgPiAubm90ZXMgPiAudGl0bGUgPiBhLmFuY2hvcjpob3ZlciwgdWwjZG93bmxvYWRzID4gbGkgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgPiAubm90ZXMgPiAudGl0bGUgPiBhLmFuY2hvcjpob3ZlciwgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5zaWRlYmFyYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gLnRpdGxlID4gYS5hbmNob3I6aG92ZXIsIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSA+IGEuYW5jaG9yOmhvdmVyLCAuYXNjaWlkb2N0b3IgI2Rvd25sb2FkID4gZGl2IC5zaWRlYmFyYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gLnRpdGxlID4gYS5hbmNob3I6aG92ZXIsICNkb3dubG9hZCA+IGRpdiAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiAudGl0bGUgPiBhLmFuY2hvcjpob3ZlciwgLmFzY2lpZG9jdG9yIGg0OmhvdmVyID4gYS5hbmNob3IsIC5hc2NpaWRvY3RvciBoNCA+IGEuYW5jaG9yOmhvdmVyLCAuYXNjaWlkb2N0b3IgaDU6aG92ZXIgPiBhLmFuY2hvciwgLmFzY2lpZG9jdG9yIGg1ID4gYS5hbmNob3I6aG92ZXIsIC5hc2NpaWRvY3RvciBoNjpob3ZlciA+IGEuYW5jaG9yLCAuYXNjaWlkb2N0b3IgaDYgPiBhLmFuY2hvcjpob3ZlciB7CiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOyB9CiAgLyogbGluZSAzNTksIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yICNjb250ZW50IGgxID4gYS5saW5rLCAuYXNjaWlkb2N0b3IgaDIgPiBhLmxpbmssIC5hc2NpaWRvY3RvciBoMyA+IGEubGluaywgLmFzY2lpZG9jdG9yICN0b2N0aXRsZSA+IGEubGluaywgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgPiAuY29udGVudCA+IC50aXRsZSA+IGEubGluaywgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIC5zaWRlYmFyYmxvY2sgPiAubm90ZXMgPiAudGl0bGUgPiBhLmxpbmssIHVsI2Rvd25sb2FkcyA+IGxpIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gLm5vdGVzID4gLnRpdGxlID4gYS5saW5rLCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiAudGl0bGUgPiBhLmxpbmssIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSA+IGEubGluaywgLmFzY2lpZG9jdG9yICNkb3dubG9hZCA+IGRpdiAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSA+IGEubGluaywgI2Rvd25sb2FkID4gZGl2IC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSA+IGEubGluaywgLmFzY2lpZG9jdG9yIGg0ID4gYS5saW5rLCAuYXNjaWlkb2N0b3IgaDUgPiBhLmxpbmssIC5hc2NpaWRvY3RvciBoNiA+IGEubGluayB7CiAgICBjb2xvcjogI2JhMzkyNTsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQogIC8qIGxpbmUgMzYwLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAjY29udGVudCBoMSA+IGEubGluazpob3ZlciwgLmFzY2lpZG9jdG9yIGgyID4gYS5saW5rOmhvdmVyLCAuYXNjaWlkb2N0b3IgaDMgPiBhLmxpbms6aG92ZXIsIC5hc2NpaWRvY3RvciAjdG9jdGl0bGUgPiBhLmxpbms6aG92ZXIsIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gLmNvbnRlbnQgPiAudGl0bGUgPiBhLmxpbms6aG92ZXIsIC5hc2NpaWRvY3RvciB1bCNkb3dubG9hZHMgPiBsaSAuc2lkZWJhcmJsb2NrID4gLm5vdGVzID4gLnRpdGxlID4gYS5saW5rOmhvdmVyLCB1bCNkb3dubG9hZHMgPiBsaSAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayA+IC5ub3RlcyA+IC50aXRsZSA+IGEubGluazpob3ZlciwgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5zaWRlYmFyYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gLnRpdGxlID4gYS5saW5rOmhvdmVyLCB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiAudGl0bGUgPiBhLmxpbms6aG92ZXIsIC5hc2NpaWRvY3RvciAjZG93bmxvYWQgPiBkaXYgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiAudGl0bGUgPiBhLmxpbms6aG92ZXIsICNkb3dubG9hZCA+IGRpdiAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiAudGl0bGUgPiBhLmxpbms6aG92ZXIsIC5hc2NpaWRvY3RvciBoNCA+IGEubGluazpob3ZlciwgLmFzY2lpZG9jdG9yIGg1ID4gYS5saW5rOmhvdmVyLCAuYXNjaWlkb2N0b3IgaDYgPiBhLmxpbms6aG92ZXIgewogICAgY29sb3I6ICNhNTMyMjE7IH0KICAvKiBsaW5lIDM2MiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmF1ZGlvYmxvY2ssIC5hc2NpaWRvY3RvciAuaW1hZ2VibG9jaywgLmFzY2lpZG9jdG9yIC5saXRlcmFsYmxvY2ssIC5hc2NpaWRvY3RvciAubGlzdGluZ2Jsb2NrLCAuYXNjaWlkb2N0b3IgLnN0ZW1ibG9jaywgLmFzY2lpZG9jdG9yIC52aWRlb2Jsb2NrIHsKICAgIG1hcmdpbi1ib3R0b206IDEuMjVlbTsgfQogIC8qIGxpbmUgMzY0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAuYWRtb25pdGlvbmJsb2NrIHRkLmNvbnRlbnQgPiAudGl0bGUsIC5hc2NpaWRvY3RvciAuYWRtb25pdGlvbmJsb2NrIHVsI2Rvd25sb2FkcyA+IGxpIHRkLm5vdGVzID4gLnRpdGxlLCB1bCNkb3dubG9hZHMgPiBsaSAuYXNjaWlkb2N0b3IgLmFkbW9uaXRpb25ibG9jayB0ZC5ub3RlcyA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIC5hdWRpb2Jsb2NrID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgLmV4YW1wbGVibG9jayA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIC5pbWFnZWJsb2NrID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgLmxpc3RpbmdibG9jayA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIC5saXRlcmFsYmxvY2sgPiAudGl0bGUsIC5hc2NpaWRvY3RvciAuc3RlbWJsb2NrID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgLm9wZW5ibG9jayA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIC5wYXJhZ3JhcGggPiAudGl0bGUsIC5hc2NpaWRvY3RvciAucXVvdGVibG9jayA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIHRhYmxlLnRhYmxlYmxvY2sgPiAudGl0bGUsIC5hc2NpaWRvY3RvciAudmVyc2VibG9jayA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIC52aWRlb2Jsb2NrID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgLmRsaXN0ID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgLm9saXN0ID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgLnVsaXN0ID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgLnFsaXN0ID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgLmhkbGlzdCA+IC50aXRsZSB7CiAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OwogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIGZvbnQtZmFtaWx5OiAiTm90byBTZXJpZiIsICJEZWphVnUgU2VyaWYiLCBzZXJpZjsKICAgIGZvbnQtc2l6ZTogMXJlbTsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsgfQogIC8qIGxpbmUgMzY2LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciB0YWJsZS50YWJsZWJsb2NrID4gY2FwdGlvbi50aXRsZSB7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICBtYXgtd2lkdGg6IDA7IH0KICAvKiBsaW5lIDM2OCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLnBhcmFncmFwaC5sZWFkID4gcCwgLmFzY2lpZG9jdG9yICNwcmVhbWJsZSA+IC5zZWN0aW9uYm9keSA+IC5wYXJhZ3JhcGg6Zmlyc3Qtb2YtdHlwZSBwIHsKICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuODUpOyB9CiAgLyogbGluZSAzNzAsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHRhYmxlLnRhYmxlYmxvY2sgI3ByZWFtYmxlID4gLnNlY3Rpb25ib2R5ID4gLnBhcmFncmFwaDpmaXJzdC1vZi10eXBlIHAgewogICAgZm9udC1zaXplOiBpbmhlcml0OyB9CiAgLyogbGluZSAzNzIsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5hZG1vbml0aW9uYmxvY2sgPiB0YWJsZSB7CiAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOwogICAgYm9yZGVyOiAwOwogICAgYmFja2dyb3VuZDogbm9uZTsKICAgIHdpZHRoOiAxMDAlOyB9CiAgLyogbGluZSAzNzMsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5hZG1vbml0aW9uYmxvY2sgPiB0YWJsZSB0ZC5pY29uIHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHdpZHRoOiA4MHB4OyB9CiAgLyogbGluZSAzNzQsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5hZG1vbml0aW9uYmxvY2sgPiB0YWJsZSB0ZC5pY29uIGltZyB7CiAgICBtYXgtd2lkdGg6IG5vbmU7IH0KICAvKiBsaW5lIDM3NSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmFkbW9uaXRpb25ibG9jayA+IHRhYmxlIHRkLmljb24gLnRpdGxlIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1mYW1pbHk6ICJPcGVuIFNhbnMiLCAiRGVqYVZ1IFNhbnMiLCBzYW5zLXNlcmlmOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfQogIC8qIGxpbmUgMzc2LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAuYWRtb25pdGlvbmJsb2NrID4gdGFibGUgdGQuY29udGVudCwgLmFzY2lpZG9jdG9yIC5hZG1vbml0aW9uYmxvY2sgPiB0YWJsZSB1bCNkb3dubG9hZHMgPiBsaSB0ZC5ub3RlcywgdWwjZG93bmxvYWRzID4gbGkgLmFzY2lpZG9jdG9yIC5hZG1vbml0aW9uYmxvY2sgPiB0YWJsZSB0ZC5ub3RlcyB7CiAgICBwYWRkaW5nLWxlZnQ6IDEuMTI1ZW07CiAgICBwYWRkaW5nLXJpZ2h0OiAxLjI1ZW07CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNkZGRkZDg7CiAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjYpOyB9CiAgLyogbGluZSAzNzcsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5hZG1vbml0aW9uYmxvY2sgPiB0YWJsZSB0ZC5jb250ZW50ID4gOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCwgLmFzY2lpZG9jdG9yIC5hZG1vbml0aW9uYmxvY2sgPiB0YWJsZSB1bCNkb3dubG9hZHMgPiBsaSB0ZC5ub3RlcyA+IDpsYXN0LWNoaWxkID4gOmxhc3QtY2hpbGQsIHVsI2Rvd25sb2FkcyA+IGxpIC5hc2NpaWRvY3RvciAuYWRtb25pdGlvbmJsb2NrID4gdGFibGUgdGQubm90ZXMgPiA6bGFzdC1jaGlsZCA+IDpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1ib3R0b206IDA7IH0KICAvKiBsaW5lIDM3OSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmV4YW1wbGVibG9jayA+IC5jb250ZW50LCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgLmV4YW1wbGVibG9jayA+IC5ub3RlcywgdWwjZG93bmxvYWRzID4gbGkgLmFzY2lpZG9jdG9yIC5leGFtcGxlYmxvY2sgPiAubm90ZXMsIC5hc2NpaWRvY3RvciB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSAuZXhhbXBsZWJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSwgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgLmFzY2lpZG9jdG9yIC5leGFtcGxlYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdLCAuYXNjaWlkb2N0b3IgI2Rvd25sb2FkID4gZGl2IC5leGFtcGxlYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdLCAjZG93bmxvYWQgPiBkaXYgLmFzY2lpZG9jdG9yIC5leGFtcGxlYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdIHsKICAgIGJvcmRlci1zdHlsZTogc29saWQ7CiAgICBib3JkZXItd2lkdGg6IDFweDsKICAgIGJvcmRlci1jb2xvcjogI2U2ZTZlNjsKICAgIG1hcmdpbi1ib3R0b206IDEuMjVlbTsKICAgIHBhZGRpbmc6IDEuMjVlbTsKICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHg7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7IH0KICAvKiBsaW5lIDM4MCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmV4YW1wbGVibG9jayA+IC5jb250ZW50ID4gOmZpcnN0LWNoaWxkLCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgLmV4YW1wbGVibG9jayA+IC5ub3RlcyA+IDpmaXJzdC1jaGlsZCwgdWwjZG93bmxvYWRzID4gbGkgLmFzY2lpZG9jdG9yIC5leGFtcGxlYmxvY2sgPiAubm90ZXMgPiA6Zmlyc3QtY2hpbGQsIC5hc2NpaWRvY3RvciB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSAuZXhhbXBsZWJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IDpmaXJzdC1jaGlsZCwgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgLmFzY2lpZG9jdG9yIC5leGFtcGxlYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gOmZpcnN0LWNoaWxkLCAuYXNjaWlkb2N0b3IgI2Rvd25sb2FkID4gZGl2IC5leGFtcGxlYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gOmZpcnN0LWNoaWxkLCAjZG93bmxvYWQgPiBkaXYgLmFzY2lpZG9jdG9yIC5leGFtcGxlYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gOmZpcnN0LWNoaWxkIHsKICAgIG1hcmdpbi10b3A6IDA7IH0KICAvKiBsaW5lIDM4MSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmV4YW1wbGVibG9jayA+IC5jb250ZW50ID4gOmxhc3QtY2hpbGQsIC5hc2NpaWRvY3RvciB1bCNkb3dubG9hZHMgPiBsaSAuZXhhbXBsZWJsb2NrID4gLm5vdGVzID4gOmxhc3QtY2hpbGQsIHVsI2Rvd25sb2FkcyA+IGxpIC5hc2NpaWRvY3RvciAuZXhhbXBsZWJsb2NrID4gLm5vdGVzID4gOmxhc3QtY2hpbGQsIC5hc2NpaWRvY3RvciB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSAuZXhhbXBsZWJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IDpsYXN0LWNoaWxkLCB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSAuYXNjaWlkb2N0b3IgLmV4YW1wbGVibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiA6bGFzdC1jaGlsZCwgLmFzY2lpZG9jdG9yICNkb3dubG9hZCA+IGRpdiAuZXhhbXBsZWJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IDpsYXN0LWNoaWxkLCAjZG93bmxvYWQgPiBkaXYgLmFzY2lpZG9jdG9yIC5leGFtcGxlYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gOmxhc3QtY2hpbGQgewogICAgbWFyZ2luLWJvdHRvbTogMDsgfQogIC8qIGxpbmUgMzgzLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrIHsKICAgIGJvcmRlci1zdHlsZTogc29saWQ7CiAgICBib3JkZXItd2lkdGg6IDFweDsKICAgIGJvcmRlci1jb2xvcjogI2UwZTBkYzsKICAgIG1hcmdpbi1ib3R0b206IDEuMjVlbTsKICAgIHBhZGRpbmc6IDEuMjVlbTsKICAgIGJhY2tncm91bmQ6ICNmOGY4Zjc7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsgfQogIC8qIGxpbmUgMzg0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gOmZpcnN0LWNoaWxkIHsKICAgIG1hcmdpbi10b3A6IDA7IH0KICAvKiBsaW5lIDM4NSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayA+IDpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1ib3R0b206IDA7IH0KICAvKiBsaW5lIDM4NiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayA+IC5jb250ZW50ID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgLnNpZGViYXJibG9jayA+IC5ub3RlcyA+IC50aXRsZSwgdWwjZG93bmxvYWRzID4gbGkgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgPiAubm90ZXMgPiAudGl0bGUsIC5hc2NpaWRvY3RvciB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSwgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgI2Rvd25sb2FkID4gZGl2IC5zaWRlYmFyYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gLnRpdGxlLCAjZG93bmxvYWQgPiBkaXYgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gLnRpdGxlIHsKICAgIGNvbG9yOiAjN2EyNTE4OwogICAgbWFyZ2luLXRvcDogMDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfQogIC8qIGxpbmUgMzg4LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAuZXhhbXBsZWJsb2NrID4gLmNvbnRlbnQgPiA6bGFzdC1jaGlsZCA+IDpsYXN0LWNoaWxkLCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgLmV4YW1wbGVibG9jayA+IC5ub3RlcyA+IDpsYXN0LWNoaWxkID4gOmxhc3QtY2hpbGQsIHVsI2Rvd25sb2FkcyA+IGxpIC5hc2NpaWRvY3RvciAuZXhhbXBsZWJsb2NrID4gLm5vdGVzID4gOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCwgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5leGFtcGxlYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCwgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgLmFzY2lpZG9jdG9yIC5leGFtcGxlYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCwgLmFzY2lpZG9jdG9yICNkb3dubG9hZCA+IGRpdiAuZXhhbXBsZWJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IDpsYXN0LWNoaWxkID4gOmxhc3QtY2hpbGQsICNkb3dubG9hZCA+IGRpdiAuYXNjaWlkb2N0b3IgLmV4YW1wbGVibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiA6bGFzdC1jaGlsZCA+IDpsYXN0LWNoaWxkLCAuYXNjaWlkb2N0b3IgLmV4YW1wbGVibG9jayA+IC5jb250ZW50IC5vbGlzdCA+IG9sID4gbGk6bGFzdC1jaGlsZCA+IDpsYXN0LWNoaWxkLCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgLmV4YW1wbGVibG9jayA+IC5ub3RlcyAub2xpc3QgPiBvbCA+IGxpOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCwgdWwjZG93bmxvYWRzID4gbGkgLmFzY2lpZG9jdG9yIC5leGFtcGxlYmxvY2sgPiAubm90ZXMgLm9saXN0ID4gb2wgPiBsaTpsYXN0LWNoaWxkID4gOmxhc3QtY2hpbGQsIC5hc2NpaWRvY3RvciB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSAuZXhhbXBsZWJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSAub2xpc3QgPiBvbCA+IGxpOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCwgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgLmFzY2lpZG9jdG9yIC5leGFtcGxlYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdIC5vbGlzdCA+IG9sID4gbGk6bGFzdC1jaGlsZCA+IDpsYXN0LWNoaWxkLCAuYXNjaWlkb2N0b3IgI2Rvd25sb2FkID4gZGl2IC5leGFtcGxlYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdIC5vbGlzdCA+IG9sID4gbGk6bGFzdC1jaGlsZCA+IDpsYXN0LWNoaWxkLCAjZG93bmxvYWQgPiBkaXYgLmFzY2lpZG9jdG9yIC5leGFtcGxlYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdIC5vbGlzdCA+IG9sID4gbGk6bGFzdC1jaGlsZCA+IDpsYXN0LWNoaWxkLCAuYXNjaWlkb2N0b3IgLmV4YW1wbGVibG9jayA+IC5jb250ZW50IC51bGlzdCA+IHVsID4gbGk6bGFzdC1jaGlsZCA+IDpsYXN0LWNoaWxkLCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgLmV4YW1wbGVibG9jayA+IC5ub3RlcyAudWxpc3QgPiB1bCA+IGxpOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCwgdWwjZG93bmxvYWRzID4gbGkgLmFzY2lpZG9jdG9yIC5leGFtcGxlYmxvY2sgPiAubm90ZXMgLnVsaXN0ID4gdWwgPiBsaTpsYXN0LWNoaWxkID4gOmxhc3QtY2hpbGQsIC5hc2NpaWRvY3RvciB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSAuZXhhbXBsZWJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSAudWxpc3QgPiB1bCA+IGxpOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCwgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgLmFzY2lpZG9jdG9yIC5leGFtcGxlYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdIC51bGlzdCA+IHVsID4gbGk6bGFzdC1jaGlsZCA+IDpsYXN0LWNoaWxkLCAuYXNjaWlkb2N0b3IgI2Rvd25sb2FkID4gZGl2IC5leGFtcGxlYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdIC51bGlzdCA+IHVsID4gbGk6bGFzdC1jaGlsZCA+IDpsYXN0LWNoaWxkLCAjZG93bmxvYWQgPiBkaXYgLmFzY2lpZG9jdG9yIC5leGFtcGxlYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdIC51bGlzdCA+IHVsID4gbGk6bGFzdC1jaGlsZCA+IDpsYXN0LWNoaWxkLCAuYXNjaWlkb2N0b3IgLmV4YW1wbGVibG9jayA+IC5jb250ZW50IC5xbGlzdCA+IG9sID4gbGk6bGFzdC1jaGlsZCA+IDpsYXN0LWNoaWxkLCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgLmV4YW1wbGVibG9jayA+IC5ub3RlcyAucWxpc3QgPiBvbCA+IGxpOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCwgdWwjZG93bmxvYWRzID4gbGkgLmFzY2lpZG9jdG9yIC5leGFtcGxlYmxvY2sgPiAubm90ZXMgLnFsaXN0ID4gb2wgPiBsaTpsYXN0LWNoaWxkID4gOmxhc3QtY2hpbGQsIC5hc2NpaWRvY3RvciB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSAuZXhhbXBsZWJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSAucWxpc3QgPiBvbCA+IGxpOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCwgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgLmFzY2lpZG9jdG9yIC5leGFtcGxlYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdIC5xbGlzdCA+IG9sID4gbGk6bGFzdC1jaGlsZCA+IDpsYXN0LWNoaWxkLCAuYXNjaWlkb2N0b3IgI2Rvd25sb2FkID4gZGl2IC5leGFtcGxlYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdIC5xbGlzdCA+IG9sID4gbGk6bGFzdC1jaGlsZCA+IDpsYXN0LWNoaWxkLCAjZG93bmxvYWQgPiBkaXYgLmFzY2lpZG9jdG9yIC5leGFtcGxlYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdIC5xbGlzdCA+IG9sID4gbGk6bGFzdC1jaGlsZCA+IDpsYXN0LWNoaWxkLCAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayA+IC5jb250ZW50ID4gOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCwgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIC5zaWRlYmFyYmxvY2sgPiAubm90ZXMgPiA6bGFzdC1jaGlsZCA+IDpsYXN0LWNoaWxkLCB1bCNkb3dubG9hZHMgPiBsaSAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayA+IC5ub3RlcyA+IDpsYXN0LWNoaWxkID4gOmxhc3QtY2hpbGQsIC5hc2NpaWRvY3RvciB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IDpsYXN0LWNoaWxkID4gOmxhc3QtY2hpbGQsIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IDpsYXN0LWNoaWxkID4gOmxhc3QtY2hpbGQsIC5hc2NpaWRvY3RvciAjZG93bmxvYWQgPiBkaXYgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiA6bGFzdC1jaGlsZCA+IDpsYXN0LWNoaWxkLCAjZG93bmxvYWQgPiBkaXYgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCwgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgPiAuY29udGVudCAub2xpc3QgPiBvbCA+IGxpOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCwgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIC5zaWRlYmFyYmxvY2sgPiAubm90ZXMgLm9saXN0ID4gb2wgPiBsaTpsYXN0LWNoaWxkID4gOmxhc3QtY2hpbGQsIHVsI2Rvd25sb2FkcyA+IGxpIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gLm5vdGVzIC5vbGlzdCA+IG9sID4gbGk6bGFzdC1jaGlsZCA+IDpsYXN0LWNoaWxkLCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gLm9saXN0ID4gb2wgPiBsaTpsYXN0LWNoaWxkID4gOmxhc3QtY2hpbGQsIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSAub2xpc3QgPiBvbCA+IGxpOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCwgLmFzY2lpZG9jdG9yICNkb3dubG9hZCA+IGRpdiAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSAub2xpc3QgPiBvbCA+IGxpOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCwgI2Rvd25sb2FkID4gZGl2IC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSAub2xpc3QgPiBvbCA+IGxpOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCwgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgPiAuY29udGVudCAudWxpc3QgPiB1bCA+IGxpOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCwgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIC5zaWRlYmFyYmxvY2sgPiAubm90ZXMgLnVsaXN0ID4gdWwgPiBsaTpsYXN0LWNoaWxkID4gOmxhc3QtY2hpbGQsIHVsI2Rvd25sb2FkcyA+IGxpIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gLm5vdGVzIC51bGlzdCA+IHVsID4gbGk6bGFzdC1jaGlsZCA+IDpsYXN0LWNoaWxkLCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gLnVsaXN0ID4gdWwgPiBsaTpsYXN0LWNoaWxkID4gOmxhc3QtY2hpbGQsIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSAudWxpc3QgPiB1bCA+IGxpOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCwgLmFzY2lpZG9jdG9yICNkb3dubG9hZCA+IGRpdiAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSAudWxpc3QgPiB1bCA+IGxpOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCwgI2Rvd25sb2FkID4gZGl2IC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSAudWxpc3QgPiB1bCA+IGxpOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCwgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgPiAuY29udGVudCAucWxpc3QgPiBvbCA+IGxpOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCwgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIC5zaWRlYmFyYmxvY2sgPiAubm90ZXMgLnFsaXN0ID4gb2wgPiBsaTpsYXN0LWNoaWxkID4gOmxhc3QtY2hpbGQsIHVsI2Rvd25sb2FkcyA+IGxpIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gLm5vdGVzIC5xbGlzdCA+IG9sID4gbGk6bGFzdC1jaGlsZCA+IDpsYXN0LWNoaWxkLCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gLnFsaXN0ID4gb2wgPiBsaTpsYXN0LWNoaWxkID4gOmxhc3QtY2hpbGQsIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSAucWxpc3QgPiBvbCA+IGxpOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCwgLmFzY2lpZG9jdG9yICNkb3dubG9hZCA+IGRpdiAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSAucWxpc3QgPiBvbCA+IGxpOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCwgI2Rvd25sb2FkID4gZGl2IC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSAucWxpc3QgPiBvbCA+IGxpOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOyB9CiAgLyogbGluZSAzOTAsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5saXRlcmFsYmxvY2sgcHJlLCAuYXNjaWlkb2N0b3IgLmxpc3RpbmdibG9jayBwcmU6bm90KC5oaWdobGlnaHQpLCAuYXNjaWlkb2N0b3IgLmxpc3RpbmdibG9jayBwcmVbY2xhc3M9ImhpZ2hsaWdodCJdLCAuYXNjaWlkb2N0b3IgLmxpc3RpbmdibG9jayBwcmVbY2xhc3NePSJoaWdobGlnaHQgIl0sIC5hc2NpaWRvY3RvciAubGlzdGluZ2Jsb2NrIHByZS5Db2RlUmF5LCAuYXNjaWlkb2N0b3IgLmxpc3RpbmdibG9jayBwcmUucHJldHR5cHJpbnQgewogICAgYmFja2dyb3VuZDogI2Y3ZjdmODsgfQogIC8qIGxpbmUgMzkxLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrIC5saXRlcmFsYmxvY2sgcHJlLCAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayAubGlzdGluZ2Jsb2NrIHByZTpub3QoLmhpZ2hsaWdodCksIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrIC5saXN0aW5nYmxvY2sgcHJlW2NsYXNzPSJoaWdobGlnaHQiXSwgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgLmxpc3RpbmdibG9jayBwcmVbY2xhc3NePSJoaWdobGlnaHQgIl0sIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrIC5saXN0aW5nYmxvY2sgcHJlLkNvZGVSYXksIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrIC5saXN0aW5nYmxvY2sgcHJlLnByZXR0eXByaW50IHsKICAgIGJhY2tncm91bmQ6ICNmMmYxZjE7IH0KICAvKiBsaW5lIDM5MywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmxpdGVyYWxibG9jayBwcmUsIC5hc2NpaWRvY3RvciAubGl0ZXJhbGJsb2NrIHByZVtjbGFzc10sIC5hc2NpaWRvY3RvciAubGlzdGluZ2Jsb2NrIHByZSwgLmFzY2lpZG9jdG9yIC5saXN0aW5nYmxvY2sgcHJlW2NsYXNzXSB7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgIHBhZGRpbmc6IDFlbTsKICAgIGZvbnQtc2l6ZTogMC44MTI1ZW07IH0KICAvKiBsaW5lIDM5NCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmxpdGVyYWxibG9jayBwcmUubm93cmFwLCAuYXNjaWlkb2N0b3IgLmxpdGVyYWxibG9jayBwcmVbY2xhc3NdLm5vd3JhcCwgLmFzY2lpZG9jdG9yIC5saXN0aW5nYmxvY2sgcHJlLm5vd3JhcCwgLmFzY2lpZG9jdG9yIC5saXN0aW5nYmxvY2sgcHJlW2NsYXNzXS5ub3dyYXAgewogICAgb3ZlcmZsb3cteDogYXV0bzsKICAgIHdoaXRlLXNwYWNlOiBwcmU7CiAgICB3b3JkLXdyYXA6IG5vcm1hbDsgfQogIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHsKICAgIC8qIGxpbmUgMzk1LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogICAgLmFzY2lpZG9jdG9yIC5saXRlcmFsYmxvY2sgcHJlLCAuYXNjaWlkb2N0b3IgLmxpdGVyYWxibG9jayBwcmVbY2xhc3NdLCAuYXNjaWlkb2N0b3IgLmxpc3RpbmdibG9jayBwcmUsIC5hc2NpaWRvY3RvciAubGlzdGluZ2Jsb2NrIHByZVtjbGFzc10gewogICAgICBmb250LXNpemU6IDAuOTA2MjVlbTsgfSB9CiAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpIHsKICAgIC8qIGxpbmUgMzk2LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogICAgLmFzY2lpZG9jdG9yIC5saXRlcmFsYmxvY2sgcHJlLCAuYXNjaWlkb2N0b3IgLmxpdGVyYWxibG9jayBwcmVbY2xhc3NdLCAuYXNjaWlkb2N0b3IgLmxpc3RpbmdibG9jayBwcmUsIC5hc2NpaWRvY3RvciAubGlzdGluZ2Jsb2NrIHByZVtjbGFzc10gewogICAgICBmb250LXNpemU6IDFlbTsgfSB9CiAgLyogbGluZSAzOTgsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5saXRlcmFsYmxvY2sub3V0cHV0IHByZSB7CiAgICBjb2xvcjogI2Y3ZjdmODsKICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC45KTsgfQogIC8qIGxpbmUgNDAwLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAubGlzdGluZ2Jsb2NrIHByZS5oaWdobGlnaHRqcyB7CiAgICBwYWRkaW5nOiAwOyB9CiAgLyogbGluZSA0MDEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5saXN0aW5nYmxvY2sgcHJlLmhpZ2hsaWdodGpzID4gY29kZSB7CiAgICBwYWRkaW5nOiAxZW07CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsgfQogIC8qIGxpbmUgNDAzLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAubGlzdGluZ2Jsb2NrIHByZS5wcmV0dHlwcmludCB7CiAgICBib3JkZXItd2lkdGg6IDA7IH0KICAvKiBsaW5lIDQwNSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmxpc3RpbmdibG9jayA+IC5jb250ZW50LCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgLmxpc3RpbmdibG9jayA+IC5ub3RlcywgdWwjZG93bmxvYWRzID4gbGkgLmFzY2lpZG9jdG9yIC5saXN0aW5nYmxvY2sgPiAubm90ZXMsIC5hc2NpaWRvY3RvciB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSAubGlzdGluZ2Jsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSwgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgLmFzY2lpZG9jdG9yIC5saXN0aW5nYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdLCAuYXNjaWlkb2N0b3IgI2Rvd25sb2FkID4gZGl2IC5saXN0aW5nYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdLCAjZG93bmxvYWQgPiBkaXYgLmFzY2lpZG9jdG9yIC5saXN0aW5nYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfQogIC8qIGxpbmUgNDA3LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAubGlzdGluZ2Jsb2NrIGNvZGVbZGF0YS1sYW5nXTpiZWZvcmUgewogICAgZGlzcGxheTogbm9uZTsKICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS1sYW5nKTsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGZvbnQtc2l6ZTogMC43NWVtOwogICAgdG9wOiAwLjQyNXJlbTsKICAgIHJpZ2h0OiAwLjVyZW07CiAgICBsaW5lLWhlaWdodDogMTsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBjb2xvcjogIzk5OTsgfQogIC8qIGxpbmUgNDA5LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAubGlzdGluZ2Jsb2NrOmhvdmVyIGNvZGVbZGF0YS1sYW5nXTpiZWZvcmUgewogICAgZGlzcGxheTogYmxvY2s7IH0KICAvKiBsaW5lIDQxMSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmxpc3RpbmdibG9jay50ZXJtaW5hbCBwcmUgLmNvbW1hbmQ6YmVmb3JlIHsKICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS1wcm9tcHQpOwogICAgcGFkZGluZy1yaWdodDogMC41ZW07CiAgICBjb2xvcjogIzk5OTsgfQogIC8qIGxpbmUgNDEzLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAubGlzdGluZ2Jsb2NrLnRlcm1pbmFsIHByZSAuY29tbWFuZDpub3QoW2RhdGEtcHJvbXB0XSk6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICIkIjsgfQogIC8qIGxpbmUgNDE1LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciB0YWJsZS5weWhsdGFibGUgewogICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKICAgIGJvcmRlcjogMDsKICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICBiYWNrZ3JvdW5kOiBub25lOyB9CiAgLyogbGluZSA0MTcsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHRhYmxlLnB5aGx0YWJsZSB0ZCB7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgcGFkZGluZy10b3A6IDA7CiAgICBwYWRkaW5nLWJvdHRvbTogMDsgfQogIC8qIGxpbmUgNDE5LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciB0YWJsZS5weWhsdGFibGUgdGQuY29kZSB7CiAgICBwYWRkaW5nLWxlZnQ6IC43NWVtOwogICAgcGFkZGluZy1yaWdodDogMDsgfQogIC8qIGxpbmUgNDIxLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBwcmUucHlnbWVudHMgLmxpbmVubywgLmFzY2lpZG9jdG9yIHRhYmxlLnB5aGx0YWJsZSB0ZDpub3QoLmNvZGUpIHsKICAgIGNvbG9yOiAjOTk5OwogICAgcGFkZGluZy1sZWZ0OiAwOwogICAgcGFkZGluZy1yaWdodDogLjVlbTsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZGRkZDg7IH0KICAvKiBsaW5lIDQyMywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgcHJlLnB5Z21lbnRzIC5saW5lbm8gewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgbWFyZ2luLXJpZ2h0OiAuMjVlbTsgfQogIC8qIGxpbmUgNDI1LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciB0YWJsZS5weWhsdGFibGUgLmxpbmVub2RpdiB7CiAgICBiYWNrZ3JvdW5kOiBub25lICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLXJpZ2h0OiAwICFpbXBvcnRhbnQ7IH0KICAvKiBsaW5lIDQyNywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLnF1b3RlYmxvY2sgewogICAgbWFyZ2luOiAwIDFlbSAxLjI1ZW0gMS41ZW07CiAgICBkaXNwbGF5OiB0YWJsZTsgfQogIC8qIGxpbmUgNDI4LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAucXVvdGVibG9jayA+IC50aXRsZSB7CiAgICBtYXJnaW4tbGVmdDogLTEuNWVtOwogICAgbWFyZ2luLWJvdHRvbTogMC43NWVtOyB9CiAgLyogbGluZSA0MjksIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5xdW90ZWJsb2NrIGJsb2NrcXVvdGUsIC5hc2NpaWRvY3RvciAucXVvdGVibG9jayBibG9ja3F1b3RlIHAgewogICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44NSk7CiAgICBmb250LXNpemU6IDEuMTVyZW07CiAgICBsaW5lLWhlaWdodDogMS43NTsKICAgIHdvcmQtc3BhY2luZzogMC4xZW07CiAgICBsZXR0ZXItc3BhY2luZzogMDsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgIHRleHQtYWxpZ246IGp1c3RpZnk7IH0KICAvKiBsaW5lIDQzMCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLnF1b3RlYmxvY2sgYmxvY2txdW90ZSB7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiAwOwogICAgYm9yZGVyOiAwOyB9CiAgLyogbGluZSA0MzEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5xdW90ZWJsb2NrIGJsb2NrcXVvdGU6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJcMjAxYyI7CiAgICBmbG9hdDogbGVmdDsKICAgIGZvbnQtc2l6ZTogMi43NWVtOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBsaW5lLWhlaWdodDogMC42ZW07CiAgICBtYXJnaW4tbGVmdDogLTAuNmVtOwogICAgY29sb3I6ICM3YTI1MTg7CiAgICB0ZXh0LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTsgfQogIC8qIGxpbmUgNDMyLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAucXVvdGVibG9jayBibG9ja3F1b3RlID4gLnBhcmFncmFwaDpsYXN0LWNoaWxkIHAgewogICAgbWFyZ2luLWJvdHRvbTogMDsgfQogIC8qIGxpbmUgNDMzLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAucXVvdGVibG9jayAuYXR0cmlidXRpb24gewogICAgbWFyZ2luLXRvcDogMC41ZW07CiAgICBtYXJnaW4tcmlnaHQ6IDAuNWV4OwogICAgdGV4dC1hbGlnbjogcmlnaHQ7IH0KICAvKiBsaW5lIDQzNCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLnF1b3RlYmxvY2sgLnF1b3RlYmxvY2sgewogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IDA7CiAgICBwYWRkaW5nOiAwLjVlbSAwOwogICAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuNik7IH0KICAvKiBsaW5lIDQzNSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLnF1b3RlYmxvY2sgLnF1b3RlYmxvY2sgYmxvY2txdW90ZSB7CiAgICBwYWRkaW5nOiAwIDAgMCAwLjc1ZW07IH0KICAvKiBsaW5lIDQzNiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLnF1b3RlYmxvY2sgLnF1b3RlYmxvY2sgYmxvY2txdW90ZTpiZWZvcmUgewogICAgZGlzcGxheTogbm9uZTsgfQogIC8qIGxpbmUgNDM4LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAudmVyc2VibG9jayB7CiAgICBtYXJnaW46IDAgMWVtIDEuMjVlbSAxZW07IH0KICAvKiBsaW5lIDQzOSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLnZlcnNlYmxvY2sgcHJlIHsKICAgIGZvbnQtZmFtaWx5OiAiT3BlbiBTYW5zIiwgIkRlamFWdSBTYW5zIiwgc2FuczsKICAgIGZvbnQtc2l6ZTogMS4xNXJlbTsKICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuODUpOwogICAgZm9udC13ZWlnaHQ6IDMwMDsKICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7IH0KICAvKiBsaW5lIDQ0MCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLnZlcnNlYmxvY2sgcHJlIHN0cm9uZyB7CiAgICBmb250LXdlaWdodDogNDAwOyB9CiAgLyogbGluZSA0NDEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC52ZXJzZWJsb2NrIC5hdHRyaWJ1dGlvbiB7CiAgICBtYXJnaW4tdG9wOiAxLjI1cmVtOwogICAgbWFyZ2luLWxlZnQ6IDAuNWV4OyB9CiAgLyogbGluZSA0NDMsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5xdW90ZWJsb2NrIC5hdHRyaWJ1dGlvbiwgLmFzY2lpZG9jdG9yIC52ZXJzZWJsb2NrIC5hdHRyaWJ1dGlvbiB7CiAgICBmb250LXNpemU6IDAuOTM3NWVtOwogICAgbGluZS1oZWlnaHQ6IDEuNDU7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7IH0KICAvKiBsaW5lIDQ0NCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLnF1b3RlYmxvY2sgLmF0dHJpYnV0aW9uIGJyLCAuYXNjaWlkb2N0b3IgLnZlcnNlYmxvY2sgLmF0dHJpYnV0aW9uIGJyIHsKICAgIGRpc3BsYXk6IG5vbmU7IH0KICAvKiBsaW5lIDQ0NSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLnF1b3RlYmxvY2sgLmF0dHJpYnV0aW9uIGNpdGUsIC5hc2NpaWRvY3RvciAudmVyc2VibG9jayAuYXR0cmlidXRpb24gY2l0ZSB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGxldHRlci1zcGFjaW5nOiAtMC4wNWVtOwogICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC42KTsgfQogIC8qIGxpbmUgNDQ3LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAucXVvdGVibG9jay5hYnN0cmFjdCB7CiAgICBtYXJnaW46IDAgMCAxLjI1ZW0gMDsKICAgIGRpc3BsYXk6IGJsb2NrOyB9CiAgLyogbGluZSA0NDgsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5xdW90ZWJsb2NrLmFic3RyYWN0IGJsb2NrcXVvdGUsIC5hc2NpaWRvY3RvciAucXVvdGVibG9jay5hYnN0cmFjdCBibG9ja3F1b3RlIHAgewogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIHdvcmQtc3BhY2luZzogMDsgfQogIC8qIGxpbmUgNDQ5LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAucXVvdGVibG9jay5hYnN0cmFjdCBibG9ja3F1b3RlOmJlZm9yZSwgLmFzY2lpZG9jdG9yIC5xdW90ZWJsb2NrLmFic3RyYWN0IGJsb2NrcXVvdGUgcDpmaXJzdC1vZi10eXBlOmJlZm9yZSB7CiAgICBkaXNwbGF5OiBub25lOyB9CiAgLyogbGluZSA0NTEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHRhYmxlLnRhYmxlYmxvY2sgewogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsgfQogIC8qIGxpbmUgNDUyLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciB0YWJsZS50YWJsZWJsb2NrIHRkID4gLnBhcmFncmFwaDpsYXN0LWNoaWxkIHAgPiBwOmxhc3QtY2hpbGQsIC5hc2NpaWRvY3RvciB0YWJsZS50YWJsZWJsb2NrIHRoID4gcDpsYXN0LWNoaWxkLCAuYXNjaWlkb2N0b3IgdGFibGUudGFibGVibG9jayB0ZCA+IHA6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOyB9CiAgLyogbGluZSA0NTQsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHRhYmxlLnNwcmVhZCB7CiAgICB3aWR0aDogMTAwJTsgfQogIC8qIGxpbmUgNDU2LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciB0YWJsZS50YWJsZWJsb2NrLCAuYXNjaWlkb2N0b3IgdGgudGFibGVibG9jaywgLmFzY2lpZG9jdG9yIHRkLnRhYmxlYmxvY2sgewogICAgYm9yZGVyOiAwIHNvbGlkICNkZWRlZGU7IH0KICAvKiBsaW5lIDQ1OCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgdGFibGUuZ3JpZC1hbGwgdGgudGFibGVibG9jaywgLmFzY2lpZG9jdG9yIHRhYmxlLmdyaWQtYWxsIHRkLnRhYmxlYmxvY2sgewogICAgYm9yZGVyLXdpZHRoOiAwIDFweCAxcHggMDsgfQogIC8qIGxpbmUgNDYwLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciB0YWJsZS5ncmlkLWFsbCB0Zm9vdCA+IHRyID4gdGgudGFibGVibG9jaywgLmFzY2lpZG9jdG9yIHRhYmxlLmdyaWQtYWxsIHRmb290ID4gdHIgPiB0ZC50YWJsZWJsb2NrIHsKICAgIGJvcmRlci13aWR0aDogMXB4IDFweCAwIDA7IH0KICAvKiBsaW5lIDQ2MiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgdGFibGUuZ3JpZC1jb2xzIHRoLnRhYmxlYmxvY2ssIC5hc2NpaWRvY3RvciB0YWJsZS5ncmlkLWNvbHMgdGQudGFibGVibG9jayB7CiAgICBib3JkZXItd2lkdGg6IDAgMXB4IDAgMDsgfQogIC8qIGxpbmUgNDY0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciB0YWJsZS5ncmlkLWFsbCAqID4gdHIgPiAudGFibGVibG9jazpsYXN0LWNoaWxkLCAuYXNjaWlkb2N0b3IgdGFibGUuZ3JpZC1jb2xzICogPiB0ciA+IC50YWJsZWJsb2NrOmxhc3QtY2hpbGQgewogICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwOyB9CiAgLyogbGluZSA0NjYsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHRhYmxlLmdyaWQtcm93cyB0aC50YWJsZWJsb2NrLCAuYXNjaWlkb2N0b3IgdGFibGUuZ3JpZC1yb3dzIHRkLnRhYmxlYmxvY2sgewogICAgYm9yZGVyLXdpZHRoOiAwIDAgMXB4IDA7IH0KICAvKiBsaW5lIDQ2OCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgdGFibGUuZ3JpZC1hbGwgdGJvZHkgPiB0cjpsYXN0LWNoaWxkID4gdGgudGFibGVibG9jaywgLmFzY2lpZG9jdG9yIHRhYmxlLmdyaWQtYWxsIHRib2R5ID4gdHI6bGFzdC1jaGlsZCA+IHRkLnRhYmxlYmxvY2ssIC5hc2NpaWRvY3RvciB0YWJsZS5ncmlkLWFsbCB0aGVhZDpsYXN0LWNoaWxkID4gdHIgPiB0aC50YWJsZWJsb2NrLCAuYXNjaWlkb2N0b3IgdGFibGUuZ3JpZC1yb3dzIHRib2R5ID4gdHI6bGFzdC1jaGlsZCA+IHRoLnRhYmxlYmxvY2ssIC5hc2NpaWRvY3RvciB0YWJsZS5ncmlkLXJvd3MgdGJvZHkgPiB0cjpsYXN0LWNoaWxkID4gdGQudGFibGVibG9jaywgLmFzY2lpZG9jdG9yIHRhYmxlLmdyaWQtcm93cyB0aGVhZDpsYXN0LWNoaWxkID4gdHIgPiB0aC50YWJsZWJsb2NrIHsKICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDA7IH0KICAvKiBsaW5lIDQ3MCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgdGFibGUuZ3JpZC1yb3dzIHRmb290ID4gdHIgPiB0aC50YWJsZWJsb2NrLCAuYXNjaWlkb2N0b3IgdGFibGUuZ3JpZC1yb3dzIHRmb290ID4gdHIgPiB0ZC50YWJsZWJsb2NrIHsKICAgIGJvcmRlci13aWR0aDogMXB4IDAgMCAwOyB9CiAgLyogbGluZSA0NzIsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHRhYmxlLmZyYW1lLWFsbCB7CiAgICBib3JkZXItd2lkdGg6IDFweDsgfQogIC8qIGxpbmUgNDc0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciB0YWJsZS5mcmFtZS1zaWRlcyB7CiAgICBib3JkZXItd2lkdGg6IDAgMXB4OyB9CiAgLyogbGluZSA0NzYsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHRhYmxlLmZyYW1lLXRvcGJvdCB7CiAgICBib3JkZXItd2lkdGg6IDFweCAwOyB9CiAgLyogbGluZSA0NzgsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHRoLmhhbGlnbi1sZWZ0LCAuYXNjaWlkb2N0b3IgdGQuaGFsaWduLWxlZnQgewogICAgdGV4dC1hbGlnbjogbGVmdDsgfQogIC8qIGxpbmUgNDgwLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciB0aC5oYWxpZ24tcmlnaHQsIC5hc2NpaWRvY3RvciB0ZC5oYWxpZ24tcmlnaHQgewogICAgdGV4dC1hbGlnbjogcmlnaHQ7IH0KICAvKiBsaW5lIDQ4MiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgdGguaGFsaWduLWNlbnRlciwgLmFzY2lpZG9jdG9yIHRkLmhhbGlnbi1jZW50ZXIgewogICAgdGV4dC1hbGlnbjogY2VudGVyOyB9CiAgLyogbGluZSA0ODQsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHRoLnZhbGlnbi10b3AsIC5hc2NpaWRvY3RvciB0ZC52YWxpZ24tdG9wIHsKICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7IH0KICAvKiBsaW5lIDQ4NiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgdGgudmFsaWduLWJvdHRvbSwgLmFzY2lpZG9jdG9yIHRkLnZhbGlnbi1ib3R0b20gewogICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTsgfQogIC8qIGxpbmUgNDg4LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciB0aC52YWxpZ24tbWlkZGxlLCAuYXNjaWlkb2N0b3IgdGQudmFsaWduLW1pZGRsZSB7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9CiAgLyogbGluZSA0OTAsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHRhYmxlIHRoZWFkIHRoLCAuYXNjaWlkb2N0b3IgdGFibGUgdGZvb3QgdGggewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KICAvKiBsaW5lIDQ5MiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgdGJvZHkgdHIgdGggewogICAgZGlzcGxheTogdGFibGUtY2VsbDsKICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICBiYWNrZ3JvdW5kOiAjZjdmOGY3OyB9CiAgLyogbGluZSA0OTQsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHRib2R5IHRyIHRoLCAuYXNjaWlkb2N0b3IgdGJvZHkgdHIgdGggcCwgLmFzY2lpZG9jdG9yIHRmb290IHRyIHRoLCAuYXNjaWlkb2N0b3IgdGZvb3QgdHIgdGggcCB7CiAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjgpOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KICAvKiBsaW5lIDQ5NiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgcC50YWJsZWJsb2NrID4gY29kZTpvbmx5LWNoaWxkIHsKICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICBwYWRkaW5nOiAwOyB9CiAgLyogbGluZSA0OTgsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHAudGFibGVibG9jayB7CiAgICBmb250LXNpemU6IDFlbTsgfQogIC8qIGxpbmUgNTAwLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciB0ZCA+IGRpdi52ZXJzZSB7CiAgICB3aGl0ZS1zcGFjZTogcHJlOyB9CiAgLyogbGluZSA1MDIsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIG9sIHsKICAgIG1hcmdpbi1sZWZ0OiAxLjc1ZW07IH0KICAvKiBsaW5lIDUwNCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgdWwgbGkgb2wgewogICAgbWFyZ2luLWxlZnQ6IDEuNWVtOyB9CiAgLyogbGluZSA1MDYsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIGRsIGRkIHsKICAgIG1hcmdpbi1sZWZ0OiAxLjEyNWVtOyB9CiAgLyogbGluZSA1MDgsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIGRsIGRkOmxhc3QtY2hpbGQsIC5hc2NpaWRvY3RvciBkbCBkZDpsYXN0LWNoaWxkID4gOmxhc3QtY2hpbGQgewogICAgbWFyZ2luLWJvdHRvbTogMDsgfQogIC8qIGxpbmUgNTEwLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBvbCA+IGxpIHAsIC5hc2NpaWRvY3RvciB1bCA+IGxpIHAsIC5hc2NpaWRvY3RvciB1bCBkZCwgLmFzY2lpZG9jdG9yIG9sIGRkLCAuYXNjaWlkb2N0b3IgLm9saXN0IC5vbGlzdCwgLmFzY2lpZG9jdG9yIC51bGlzdCAudWxpc3QsIC5hc2NpaWRvY3RvciAudWxpc3QgLm9saXN0LCAuYXNjaWlkb2N0b3IgLm9saXN0IC51bGlzdCB7CiAgICBtYXJnaW4tYm90dG9tOiAwLjYyNWVtOyB9CiAgLyogbGluZSA1MTIsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHVsLnVuc3R5bGVkLCAuYXNjaWlkb2N0b3Igb2wudW5udW1iZXJlZCwgLmFzY2lpZG9jdG9yIHVsLmNoZWNrbGlzdCwgLmFzY2lpZG9jdG9yIHVsLm5vbmUgewogICAgbGlzdC1zdHlsZS10eXBlOiBub25lOyB9CiAgLyogbGluZSA1MTQsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHVsLnVuc3R5bGVkLCAuYXNjaWlkb2N0b3Igb2wudW5udW1iZXJlZCwgLmFzY2lpZG9jdG9yIHVsLmNoZWNrbGlzdCB7CiAgICBtYXJnaW4tbGVmdDogMC42MjVlbTsgfQogIC8qIGxpbmUgNTE2LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciB1bC5jaGVja2xpc3QgbGkgPiBwOmZpcnN0LWNoaWxkID4gLmZhLWNoZWNrLXNxdWFyZS1vOmZpcnN0LWNoaWxkLCAuYXNjaWlkb2N0b3IgdWwuY2hlY2tsaXN0IGxpID4gcDpmaXJzdC1jaGlsZCA+IGlucHV0W3R5cGU9ImNoZWNrYm94Il06Zmlyc3QtY2hpbGQgewogICAgbWFyZ2luLXJpZ2h0OiAwLjI1ZW07IH0KICAvKiBsaW5lIDUxOCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgdWwuY2hlY2tsaXN0IGxpID4gcDpmaXJzdC1jaGlsZCA+IGlucHV0W3R5cGU9ImNoZWNrYm94Il06Zmlyc3QtY2hpbGQgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgdG9wOiAxcHg7IH0KICAvKiBsaW5lIDUyMCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgdWwuaW5saW5lIHsKICAgIG1hcmdpbjogMCBhdXRvIDAuNjI1ZW0gYXV0bzsKICAgIG1hcmdpbi1sZWZ0OiAtMS4zNzVlbTsKICAgIG1hcmdpbi1yaWdodDogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsgfQogIC8qIGxpbmUgNTIxLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciB1bC5pbmxpbmUgPiBsaSB7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBtYXJnaW4tbGVmdDogMS4zNzVlbTsKICAgIGRpc3BsYXk6IGJsb2NrOyB9CiAgLyogbGluZSA1MjIsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHVsLmlubGluZSA+IGxpID4gKiB7CiAgICBkaXNwbGF5OiBibG9jazsgfQogIC8qIGxpbmUgNTI0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAudW5zdHlsZWQgZGwgZHQgewogICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsgfQogIC8qIGxpbmUgNTI2LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBvbC5hcmFiaWMgewogICAgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsOyB9CiAgLyogbGluZSA1MjgsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIG9sLmRlY2ltYWwgewogICAgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsLWxlYWRpbmctemVybzsgfQogIC8qIGxpbmUgNTMwLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBvbC5sb3dlcmFscGhhIHsKICAgIGxpc3Qtc3R5bGUtdHlwZTogbG93ZXItYWxwaGE7IH0KICAvKiBsaW5lIDUzMiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3Igb2wudXBwZXJhbHBoYSB7CiAgICBsaXN0LXN0eWxlLXR5cGU6IHVwcGVyLWFscGhhOyB9CiAgLyogbGluZSA1MzQsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIG9sLmxvd2Vycm9tYW4gewogICAgbGlzdC1zdHlsZS10eXBlOiBsb3dlci1yb21hbjsgfQogIC8qIGxpbmUgNTM2LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBvbC51cHBlcnJvbWFuIHsKICAgIGxpc3Qtc3R5bGUtdHlwZTogdXBwZXItcm9tYW47IH0KICAvKiBsaW5lIDUzOCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3Igb2wubG93ZXJncmVlayB7CiAgICBsaXN0LXN0eWxlLXR5cGU6IGxvd2VyLWdyZWVrOyB9CiAgLyogbGluZSA1NDAsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5oZGxpc3QgPiB0YWJsZSwgLmFzY2lpZG9jdG9yIC5jb2xpc3QgPiB0YWJsZSB7CiAgICBib3JkZXI6IDA7CiAgICBiYWNrZ3JvdW5kOiBub25lOyB9CiAgLyogbGluZSA1NDEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5oZGxpc3QgPiB0YWJsZSA+IHRib2R5ID4gdHIsIC5hc2NpaWRvY3RvciAuY29saXN0ID4gdGFibGUgPiB0Ym9keSA+IHRyIHsKICAgIGJhY2tncm91bmQ6IG5vbmU7IH0KICAvKiBsaW5lIDU0MywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgdGQuaGRsaXN0MSB7CiAgICBwYWRkaW5nLXJpZ2h0OiAuNzVlbTsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOyB9CiAgLyogbGluZSA1NDUsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHRkLmhkbGlzdDEsIC5hc2NpaWRvY3RvciB0ZC5oZGxpc3QyIHsKICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7IH0KICAvKiBsaW5lIDU0NywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmxpdGVyYWxibG9jayArIC5jb2xpc3QsIC5hc2NpaWRvY3RvciAubGlzdGluZ2Jsb2NrICsgLmNvbGlzdCB7CiAgICBtYXJnaW4tdG9wOiAtMC41ZW07IH0KICAvKiBsaW5lIDU0OSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmNvbGlzdCA+IHRhYmxlIHRyID4gdGQ6Zmlyc3Qtb2YtdHlwZSB7CiAgICBwYWRkaW5nOiAwIDAuNzVlbTsKICAgIGxpbmUtaGVpZ2h0OiAxOyB9CiAgLyogbGluZSA1NTAsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5jb2xpc3QgPiB0YWJsZSB0ciA+IHRkOmxhc3Qtb2YtdHlwZSB7CiAgICBwYWRkaW5nOiAwLjI1ZW0gMDsgfQogIC8qIGxpbmUgNTUyLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAudGh1bWIsIC5hc2NpaWRvY3RvciAudGggewogICAgbGluZS1oZWlnaHQ6IDA7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBib3JkZXI6IHNvbGlkIDRweCB3aGl0ZTsKICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDAgMXB4ICNkZGRkZGQ7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggI2RkZGRkZDsgfQogIC8qIGxpbmUgNTU0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAuaW1hZ2VibG9jay5sZWZ0LCAuYXNjaWlkb2N0b3IgLmltYWdlYmxvY2tbc3R5bGUqPSJmbG9hdDogbGVmdCJdIHsKICAgIG1hcmdpbjogMC4yNWVtIDAuNjI1ZW0gMS4yNWVtIDA7IH0KICAvKiBsaW5lIDU1NSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmltYWdlYmxvY2sucmlnaHQsIC5hc2NpaWRvY3RvciBib2R5W2NsYXNzJD0iYWJvdXQiXSBkbCBkZCBpbWcuaW1hZ2VibG9jaywgYm9keVtjbGFzcyQ9ImFib3V0Il0gZGwgZGQgLmFzY2lpZG9jdG9yIGltZy5pbWFnZWJsb2NrLCAuYXNjaWlkb2N0b3IgLmltYWdlYmxvY2tbc3R5bGUqPSJmbG9hdDogcmlnaHQiXSB7CiAgICBtYXJnaW46IDAuMjVlbSAwIDEuMjVlbSAwLjYyNWVtOyB9CiAgLyogbGluZSA1NTYsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5pbWFnZWJsb2NrID4gLnRpdGxlIHsKICAgIG1hcmdpbi1ib3R0b206IDA7IH0KICAvKiBsaW5lIDU1NywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmltYWdlYmxvY2sudGh1bWIsIC5hc2NpaWRvY3RvciAuaW1hZ2VibG9jay50aCB7CiAgICBib3JkZXItd2lkdGg6IDZweDsgfQogIC8qIGxpbmUgNTU4LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAuaW1hZ2VibG9jay50aHVtYiA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIC5pbWFnZWJsb2NrLnRoID4gLnRpdGxlIHsKICAgIHBhZGRpbmc6IDAgMC4xMjVlbTsgfQogIC8qIGxpbmUgNTYwLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAuaW1hZ2UubGVmdCwgLmFzY2lpZG9jdG9yIC5pbWFnZS5yaWdodCwgLmFzY2lpZG9jdG9yIGJvZHlbY2xhc3MkPSJhYm91dCJdIGRsIGRkIGltZy5pbWFnZSwgYm9keVtjbGFzcyQ9ImFib3V0Il0gZGwgZGQgLmFzY2lpZG9jdG9yIGltZy5pbWFnZSB7CiAgICBtYXJnaW4tdG9wOiAwLjI1ZW07CiAgICBtYXJnaW4tYm90dG9tOiAwLjI1ZW07CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBsaW5lLWhlaWdodDogMDsgfQogIC8qIGxpbmUgNTYxLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAuaW1hZ2UubGVmdCB7CiAgICBtYXJnaW4tcmlnaHQ6IDAuNjI1ZW07IH0KICAvKiBsaW5lIDU2MiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmltYWdlLnJpZ2h0LCAuYXNjaWlkb2N0b3IgYm9keVtjbGFzcyQ9ImFib3V0Il0gZGwgZGQgaW1nLmltYWdlLCBib2R5W2NsYXNzJD0iYWJvdXQiXSBkbCBkZCAuYXNjaWlkb2N0b3IgaW1nLmltYWdlIHsKICAgIG1hcmdpbi1sZWZ0OiAwLjYyNWVtOyB9CiAgLyogbGluZSA1NjQsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIGEuaW1hZ2UgewogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9CiAgLyogbGluZSA1NjYsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHNwYW4uZm9vdG5vdGUsIC5hc2NpaWRvY3RvciBzcGFuLmZvb3Rub3RlcmVmIHsKICAgIHZlcnRpY2FsLWFsaWduOiBzdXBlcjsKICAgIGZvbnQtc2l6ZTogMC44NzVlbTsgfQogIC8qIGxpbmUgNTY3LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBzcGFuLmZvb3Rub3RlIGEsIC5hc2NpaWRvY3RvciBzcGFuLmZvb3Rub3RlcmVmIGEgewogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9CiAgLyogbGluZSA1NjgsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHNwYW4uZm9vdG5vdGUgYTphY3RpdmUsIC5hc2NpaWRvY3RvciBzcGFuLmZvb3Rub3RlcmVmIGE6YWN0aXZlIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9CiAgLyogbGluZSA1NzAsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yICNmb290bm90ZXMgewogICAgcGFkZGluZy10b3A6IDAuNzVlbTsKICAgIHBhZGRpbmctYm90dG9tOiAwLjc1ZW07CiAgICBtYXJnaW4tYm90dG9tOiAwLjYyNWVtOyB9CiAgLyogbGluZSA1NzEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yICNmb290bm90ZXMgaHIgewogICAgd2lkdGg6IDIwJTsKICAgIG1pbi13aWR0aDogNi4yNWVtOwogICAgbWFyZ2luOiAtLjI1ZW0gMCAuNzVlbSAwOwogICAgYm9yZGVyLXdpZHRoOiAxcHggMCAwIDA7IH0KICAvKiBsaW5lIDU3MiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgI2Zvb3Rub3RlcyAuZm9vdG5vdGUgewogICAgcGFkZGluZzogMCAwLjM3NWVtOwogICAgbGluZS1oZWlnaHQ6IDEuMzsKICAgIGZvbnQtc2l6ZTogMC44NzVlbTsKICAgIG1hcmdpbi1sZWZ0OiAxLjJlbTsKICAgIHRleHQtaW5kZW50OiAtMS4yZW07CiAgICBtYXJnaW4tYm90dG9tOiAuMmVtOyB9CiAgLyogbGluZSA1NzMsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yICNmb290bm90ZXMgLmZvb3Rub3RlIGE6Zmlyc3Qtb2YtdHlwZSB7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQogIC8qIGxpbmUgNTc0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAjZm9vdG5vdGVzIC5mb290bm90ZTpsYXN0LW9mLXR5cGUgewogICAgbWFyZ2luLWJvdHRvbTogMDsgfQogIC8qIGxpbmUgNTc2LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAjY29udGVudCAjZm9vdG5vdGVzIHsKICAgIG1hcmdpbi10b3A6IC0wLjYyNWVtOwogICAgbWFyZ2luLWJvdHRvbTogMDsKICAgIHBhZGRpbmc6IDAuNzVlbSAwOyB9CiAgLyogbGluZSA1NzgsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5naXN0IC5maWxlLWRhdGEgPiB0YWJsZSB7CiAgICBib3JkZXI6IDA7CiAgICBiYWNrZ3JvdW5kOiAjZmZmOwogICAgd2lkdGg6IDEwMCU7CiAgICBtYXJnaW4tYm90dG9tOiAwOyB9CiAgLyogbGluZSA1NzksIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5naXN0IC5maWxlLWRhdGEgPiB0YWJsZSB0ZC5saW5lLWRhdGEgewogICAgd2lkdGg6IDk5JTsgfQogIC8qIGxpbmUgNTgxLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBkaXYudW5icmVha2FibGUgewogICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOyB9CiAgLyogbGluZSA1ODMsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5iaWcgewogICAgZm9udC1zaXplOiBsYXJnZXI7IH0KICAvKiBsaW5lIDU4NSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLnNtYWxsIHsKICAgIGZvbnQtc2l6ZTogc21hbGxlcjsgfQogIC8qIGxpbmUgNTg3LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAudW5kZXJsaW5lIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9CiAgLyogbGluZSA1ODksIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5vdmVybGluZSB7CiAgICB0ZXh0LWRlY29yYXRpb246IG92ZXJsaW5lOyB9CiAgLyogbGluZSA1OTEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5saW5lLXRocm91Z2ggewogICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7IH0KICAvKiBsaW5lIDU5MywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmFxdWEgewogICAgY29sb3I6ICMwMGJmYmY7IH0KICAvKiBsaW5lIDU5NSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmFxdWEtYmFja2dyb3VuZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBmYWZhOyB9CiAgLyogbGluZSA1OTcsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5ibGFjayB7CiAgICBjb2xvcjogYmxhY2s7IH0KICAvKiBsaW5lIDU5OSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmJsYWNrLWJhY2tncm91bmQgewogICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7IH0KICAvKiBsaW5lIDYwMSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmJsdWUgewogICAgY29sb3I6ICMwMDAwYmY7IH0KICAvKiBsaW5lIDYwMywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmJsdWUtYmFja2dyb3VuZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMGZhOyB9CiAgLyogbGluZSA2MDUsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5mdWNoc2lhIHsKICAgIGNvbG9yOiAjYmYwMGJmOyB9CiAgLyogbGluZSA2MDcsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5mdWNoc2lhLWJhY2tncm91bmQgewogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhMDBmYTsgfQogIC8qIGxpbmUgNjA5LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAuZ3JheSB7CiAgICBjb2xvcjogIzYwNjA2MDsgfQogIC8qIGxpbmUgNjExLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAuZ3JheS1iYWNrZ3JvdW5kIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICM3ZDdkN2Q7IH0KICAvKiBsaW5lIDYxMywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmdyZWVuIHsKICAgIGNvbG9yOiAjMDA2MDAwOyB9CiAgLyogbGluZSA2MTUsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5ncmVlbi1iYWNrZ3JvdW5kIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDdkMDA7IH0KICAvKiBsaW5lIDYxNywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmxpbWUgewogICAgY29sb3I6ICMwMGJmMDA7IH0KICAvKiBsaW5lIDYxOSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmxpbWUtYmFja2dyb3VuZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBmYTAwOyB9CiAgLyogbGluZSA2MjEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5tYXJvb24gewogICAgY29sb3I6ICM2MDAwMDA7IH0KICAvKiBsaW5lIDYyMywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLm1hcm9vbi1iYWNrZ3JvdW5kIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICM3ZDAwMDA7IH0KICAvKiBsaW5lIDYyNSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLm5hdnkgewogICAgY29sb3I6ICMwMDAwNjA7IH0KICAvKiBsaW5lIDYyNywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLm5hdnktYmFja2dyb3VuZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDdkOyB9CiAgLyogbGluZSA2MjksIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5vbGl2ZSB7CiAgICBjb2xvcjogIzYwNjAwMDsgfQogIC8qIGxpbmUgNjMxLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAub2xpdmUtYmFja2dyb3VuZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjN2Q3ZDAwOyB9CiAgLyogbGluZSA2MzMsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5wdXJwbGUgewogICAgY29sb3I6ICM2MDAwNjA7IH0KICAvKiBsaW5lIDYzNSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLnB1cnBsZS1iYWNrZ3JvdW5kIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICM3ZDAwN2Q7IH0KICAvKiBsaW5lIDYzNywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLnJlZCB7CiAgICBjb2xvcjogI2JmMDAwMDsgfQogIC8qIGxpbmUgNjM5LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAucmVkLWJhY2tncm91bmQgewogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhMDAwMDsgfQogIC8qIGxpbmUgNjQxLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAuc2lsdmVyIHsKICAgIGNvbG9yOiAjOTA5MDkwOyB9CiAgLyogbGluZSA2NDMsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5zaWx2ZXItYmFja2dyb3VuZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmNiY2JjOyB9CiAgLyogbGluZSA2NDUsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC50ZWFsIHsKICAgIGNvbG9yOiAjMDA2MDYwOyB9CiAgLyogbGluZSA2NDcsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC50ZWFsLWJhY2tncm91bmQgewogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2Q3ZDsgfQogIC8qIGxpbmUgNjQ5LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAud2hpdGUgewogICAgY29sb3I6ICNiZmJmYmY7IH0KICAvKiBsaW5lIDY1MSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLndoaXRlLWJhY2tncm91bmQgewogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTsgfQogIC8qIGxpbmUgNjUzLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAueWVsbG93IHsKICAgIGNvbG9yOiAjYmZiZjAwOyB9CiAgLyogbGluZSA2NTUsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC55ZWxsb3ctYmFja2dyb3VuZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYTAwOyB9CiAgLyogbGluZSA2NTcsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHNwYW4uaWNvbiA+IC5mYSB7CiAgICBjdXJzb3I6IGRlZmF1bHQ7IH0KICAvKiBsaW5lIDY1OSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmFkbW9uaXRpb25ibG9jayB0ZC5pY29uIFtjbGFzc149ImZhIGljb24tIl0gewogICAgZm9udC1zaXplOiAyLjVlbTsKICAgIC8qdGV4dC1zaGFkb3c6IDFweCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC41KTsqLwogICAgY3Vyc29yOiBkZWZhdWx0OyB9CiAgLyogbGluZSA2NjAsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5hZG1vbml0aW9uYmxvY2sgdGQuaWNvbiAuaWNvbi1ub3RlOmJlZm9yZSB7CiAgICBjb250ZW50OiAiXGYwNWEiOwogICAgY29sb3I6ICMxOTQwN2M7IH0KICAvKiBsaW5lIDY2MSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmFkbW9uaXRpb25ibG9jayB0ZC5pY29uIC5pY29uLXRpcDpiZWZvcmUgewogICAgY29udGVudDogIlxmMGViIjsKICAgIHRleHQtc2hhZG93OiAxcHggMXB4IDJweCByZ2JhKDE1NSwgMTU1LCAwLCAwLjgpOwogICAgY29sb3I6ICMxMTE7IH0KICAvKiBsaW5lIDY2MiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmFkbW9uaXRpb25ibG9jayB0ZC5pY29uIC5pY29uLXdhcm5pbmc6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJcZjA3MSI7CiAgICBjb2xvcjogI2JmNjkwMDsgfQogIC8qIGxpbmUgNjYzLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAuYWRtb25pdGlvbmJsb2NrIHRkLmljb24gLmljb24tY2F1dGlvbjpiZWZvcmUgewogICAgY29udGVudDogIlxmMDZkIjsKICAgIGNvbG9yOiAjYmYzNDAwOyB9CiAgLyogbGluZSA2NjQsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5hZG1vbml0aW9uYmxvY2sgdGQuaWNvbiAuaWNvbi1pbXBvcnRhbnQ6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJcZjA2YSI7CiAgICBjb2xvcjogI2JmMDAwMDsgfQogIC8qIGxpbmUgNjY2LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAuY29udW1bZGF0YS12YWx1ZV0gewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgY29sb3I6ICNmZmYgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44KTsKICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMTAwcHg7CiAgICBib3JkZXItcmFkaXVzOiAxMDBweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogMC43NWVtOwogICAgd2lkdGg6IDEuNjdlbTsKICAgIGhlaWdodDogMS42N2VtOwogICAgbGluZS1oZWlnaHQ6IDEuNjdlbTsKICAgIGZvbnQtZmFtaWx5OiAiT3BlbiBTYW5zIiwgIkRlamFWdSBTYW5zIiwgc2Fucy1zZXJpZjsKICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOyB9CiAgLyogbGluZSA2NjcsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5jb251bVtkYXRhLXZhbHVlXSAqIHsKICAgIGNvbG9yOiAjZmZmICFpbXBvcnRhbnQ7IH0KICAvKiBsaW5lIDY2OCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLmNvbnVtW2RhdGEtdmFsdWVdICsgYiB7CiAgICBkaXNwbGF5OiBub25lOyB9CiAgLyogbGluZSA2NjksIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5jb251bVtkYXRhLXZhbHVlXTphZnRlciB7CiAgICBjb250ZW50OiBhdHRyKGRhdGEtdmFsdWUpOyB9CiAgLyogbGluZSA2NzAsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHByZSAuY29udW1bZGF0YS12YWx1ZV0gewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgdG9wOiAtMC4xMjVlbTsgfQogIC8qIGxpbmUgNjcyLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBiLmNvbnVtICogewogICAgY29sb3I6IGluaGVyaXQgIWltcG9ydGFudDsgfQogIC8qIGxpbmUgNjc0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciAuY29udW06bm90KFtkYXRhLXZhbHVlXSk6ZW1wdHkgewogICAgZGlzcGxheTogbm9uZTsgfQogIC8qIGxpbmUgNjc2LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBoMSwgLmFzY2lpZG9jdG9yIGgyIHsKICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOyB9CiAgLyogbGluZSA2NzgsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIGR0LCAuYXNjaWlkb2N0b3IgdGgudGFibGVibG9jaywgLmFzY2lpZG9jdG9yIHRkLmNvbnRlbnQsIC5hc2NpaWRvY3RvciB1bCNkb3dubG9hZHMgPiBsaSB0ZC5ub3RlcywgdWwjZG93bmxvYWRzID4gbGkgLmFzY2lpZG9jdG9yIHRkLm5vdGVzIHsKICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7IH0KICAvKiBsaW5lIDY4MCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgcCwgLmFzY2lpZG9jdG9yIHRkLmNvbnRlbnQsIC5hc2NpaWRvY3RvciB1bCNkb3dubG9hZHMgPiBsaSB0ZC5ub3RlcywgdWwjZG93bmxvYWRzID4gbGkgLmFzY2lpZG9jdG9yIHRkLm5vdGVzIHsKICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOyB9CiAgLyogbGluZSA2ODEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHAgc3Ryb25nLCAuYXNjaWlkb2N0b3IgdGQuY29udGVudCBzdHJvbmcsIC5hc2NpaWRvY3RvciB1bCNkb3dubG9hZHMgPiBsaSB0ZC5ub3RlcyBzdHJvbmcsIHVsI2Rvd25sb2FkcyA+IGxpIC5hc2NpaWRvY3RvciB0ZC5ub3RlcyBzdHJvbmcgewogICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAwNWVtOyB9CiAgLyogbGluZSA2ODMsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIHAsIC5hc2NpaWRvY3RvciBibG9ja3F1b3RlLCAuYXNjaWlkb2N0b3IgZHQsIC5hc2NpaWRvY3RvciB0ZC5jb250ZW50LCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgdGQubm90ZXMsIHVsI2Rvd25sb2FkcyA+IGxpIC5hc2NpaWRvY3RvciB0ZC5ub3RlcyB7CiAgICBmb250LXNpemU6IDEuMDYyNXJlbTsgfQogIC8qIGxpbmUgNjg1LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogIC5hc2NpaWRvY3RvciBwIHsKICAgIG1hcmdpbi1ib3R0b206IDEuMjVyZW07IH0KICAvKiBsaW5lIDY4NywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayBwLCAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayBkdCwgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgdGQuY29udGVudCwgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgdWwjZG93bmxvYWRzID4gbGkgdGQubm90ZXMsIHVsI2Rvd25sb2FkcyA+IGxpIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrIHRkLm5vdGVzLCAuYXNjaWlkb2N0b3IgcC50YWJsZWJsb2NrIHsKICAgIGZvbnQtc2l6ZTogMWVtOyB9CiAgLyogbGluZSA2ODksIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5leGFtcGxlYmxvY2sgPiAuY29udGVudCwgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIC5leGFtcGxlYmxvY2sgPiAubm90ZXMsIHVsI2Rvd25sb2FkcyA+IGxpIC5hc2NpaWRvY3RvciAuZXhhbXBsZWJsb2NrID4gLm5vdGVzLCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgLmV4YW1wbGVibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0sIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5hc2NpaWRvY3RvciAuZXhhbXBsZWJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSwgLmFzY2lpZG9jdG9yICNkb3dubG9hZCA+IGRpdiAuZXhhbXBsZWJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSwgI2Rvd25sb2FkID4gZGl2IC5hc2NpaWRvY3RvciAuZXhhbXBsZWJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZWY3OwogICAgYm9yZGVyLWNvbG9yOiAjZTBlMGRjOwogICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDFweCA0cHggI2UwZTBkYzsKICAgIGJveC1zaGFkb3c6IDAgMXB4IDRweCAjZTBlMGRjOyB9CiAgLyogbGluZSA2OTEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgLmFzY2lpZG9jdG9yIC5wcmludC1vbmx5IHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfQogIEBtZWRpYSBwcmludCB7CiAgICAvKiBsaW5lIDYyMCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwogICAgLmFzY2lpZG9jdG9yIHsKICAgICAgQHBhZ2UgewogICAgICAgIG1hcmdpbjogMS4yNWNtIDAuNzVjbTsgfQogfQogICAgICAvKiBsaW5lIDY5NCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAgICAgLmFzY2lpZG9jdG9yICogewogICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICAgICAgICB0ZXh0LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OyB9CiAgICAgIC8qIGxpbmUgNjk1LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogICAgICAuYXNjaWlkb2N0b3IgYSB7CiAgICAgICAgY29sb3I6IGluaGVyaXQgIWltcG9ydGFudDsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSAhaW1wb3J0YW50OyB9CiAgICAgIC8qIGxpbmUgNjk2LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogICAgICAuYXNjaWlkb2N0b3IgYS5iYXJlLCAuYXNjaWlkb2N0b3IgYVtocmVmXj0iIyJdLCAuYXNjaWlkb2N0b3IgYVtocmVmXj0ibWFpbHRvOiJdIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDsgfQogICAgICAvKiBsaW5lIDY5NywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAgICAgLmFzY2lpZG9jdG9yIGFbaHJlZl49Imh0dHA6Il06bm90KC5iYXJlKTphZnRlciwgLmFzY2lpZG9jdG9yIGFbaHJlZl49Imh0dHBzOiJdOm5vdCguYmFyZSk6YWZ0ZXIsIC5hc2NpaWRvY3RvciBhW2hyZWZePSJtYWlsdG86Il06bm90KC5iYXJlKTphZnRlciB7CiAgICAgICAgY29udGVudDogIigiIGF0dHIoaHJlZikgIikiOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBmb250LXNpemU6IDAuODc1ZW07CiAgICAgICAgcGFkZGluZy1sZWZ0OiAwLjI1ZW07IH0KICAgICAgLyogbGluZSA2OTgsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgICAgIC5hc2NpaWRvY3RvciBhYmJyW3RpdGxlXTphZnRlciB7CiAgICAgICAgY29udGVudDogIiAoIiBhdHRyKHRpdGxlKSAiKSI7IH0KICAgICAgLyogbGluZSA2OTksIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgICAgIC5hc2NpaWRvY3RvciBwcmUsIC5hc2NpaWRvY3RvciBibG9ja3F1b3RlLCAuYXNjaWlkb2N0b3IgdHIsIC5hc2NpaWRvY3RvciBpbWcgewogICAgICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsgfQogICAgICAvKiBsaW5lIDcwMCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAgICAgLmFzY2lpZG9jdG9yIHRoZWFkIHsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7IH0KICAgICAgLyogbGluZSA3MDEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgICAgIC5hc2NpaWRvY3RvciBpbWcgewogICAgICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50OyB9CiAgICAgIC8qIGxpbmUgNzAyLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogICAgICAuYXNjaWlkb2N0b3IgcCwgLmFzY2lpZG9jdG9yIGJsb2NrcXVvdGUsIC5hc2NpaWRvY3RvciBkdCwgLmFzY2lpZG9jdG9yIHRkLmNvbnRlbnQsIC5hc2NpaWRvY3RvciB1bCNkb3dubG9hZHMgPiBsaSB0ZC5ub3RlcywgdWwjZG93bmxvYWRzID4gbGkgLmFzY2lpZG9jdG9yIHRkLm5vdGVzIHsKICAgICAgICBmb250LXNpemU6IDFlbTsKICAgICAgICBvcnBoYW5zOiAzOwogICAgICAgIHdpZG93czogMzsgfQogICAgICAvKiBsaW5lIDcwMywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAgICAgLmFzY2lpZG9jdG9yIGgyLCAuYXNjaWlkb2N0b3IgaDMsIC5hc2NpaWRvY3RvciAjdG9jdGl0bGUsIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gLmNvbnRlbnQgPiAudGl0bGUsIC5hc2NpaWRvY3RvciB1bCNkb3dubG9hZHMgPiBsaSAuc2lkZWJhcmJsb2NrID4gLm5vdGVzID4gLnRpdGxlLCB1bCNkb3dubG9hZHMgPiBsaSAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayA+IC5ub3RlcyA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5zaWRlYmFyYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gLnRpdGxlLCB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiAudGl0bGUsIC5hc2NpaWRvY3RvciAjZG93bmxvYWQgPiBkaXYgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiAudGl0bGUsICNkb3dubG9hZCA+IGRpdiAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiAudGl0bGUsIC5hc2NpaWRvY3RvciAjdG9jdGl0bGUsIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gLmNvbnRlbnQgPiAudGl0bGUsIC5hc2NpaWRvY3RvciB1bCNkb3dubG9hZHMgPiBsaSAuc2lkZWJhcmJsb2NrID4gLm5vdGVzID4gLnRpdGxlLCB1bCNkb3dubG9hZHMgPiBsaSAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayA+IC5ub3RlcyA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5zaWRlYmFyYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gLnRpdGxlLCB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiAudGl0bGUsIC5hc2NpaWRvY3RvciAjZG93bmxvYWQgPiBkaXYgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiAudGl0bGUsICNkb3dubG9hZCA+IGRpdiAuYXNjaWlkb2N0b3IgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiAudGl0bGUgewogICAgICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkOyB9CiAgICAgIC8qIGxpbmUgNzA0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogICAgICAuYXNjaWlkb2N0b3IgI3RvYywgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2ssIC5hc2NpaWRvY3RvciAuZXhhbXBsZWJsb2NrID4gLmNvbnRlbnQsIC5hc2NpaWRvY3RvciB1bCNkb3dubG9hZHMgPiBsaSAuZXhhbXBsZWJsb2NrID4gLm5vdGVzLCB1bCNkb3dubG9hZHMgPiBsaSAuYXNjaWlkb2N0b3IgLmV4YW1wbGVibG9jayA+IC5ub3RlcywgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5leGFtcGxlYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdLCB1bCNkb3dubG9hZHMgPiBsaSB0YWJsZSAuYXNjaWlkb2N0b3IgLmV4YW1wbGVibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0sIC5hc2NpaWRvY3RvciAjZG93bmxvYWQgPiBkaXYgLmV4YW1wbGVibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0sICNkb3dubG9hZCA+IGRpdiAuYXNjaWlkb2N0b3IgLmV4YW1wbGVibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gewogICAgICAgIGJhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDsgfQogICAgICAvKiBsaW5lIDcwNSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAgICAgLmFzY2lpZG9jdG9yICN0b2MgewogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkZGQ4ICFpbXBvcnRhbnQ7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDsgfQogICAgICAvKiBsaW5lIDcwNiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAgICAgLmFzY2lpZG9jdG9yIC5zZWN0MSB7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDsgfQogICAgICAvKiBsaW5lIDcwNywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAgICAgLmFzY2lpZG9jdG9yIC5zZWN0MSArIC5zZWN0MSB7CiAgICAgICAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7IH0KICAgICAgLyogbGluZSA3MDgsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgICAgIC5hc2NpaWRvY3RvciAjaGVhZGVyID4gaDE6Zmlyc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi10b3A6IDEuMjVyZW07IH0KICAgICAgLyogbGluZSA3MDksIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgICAgIC5hc2NpaWRvY3RvciBib2R5LmJvb2sgI2hlYWRlciB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9CiAgICAgIC8qIGxpbmUgNzEwLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogICAgICAuYXNjaWlkb2N0b3IgYm9keS5ib29rICNoZWFkZXIgPiBoMTpmaXJzdC1jaGlsZCB7CiAgICAgICAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7CiAgICAgICAgbWFyZ2luOiAyLjVlbSAwIDFlbSAwOyB9CiAgICAgIC8qIGxpbmUgNzExLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogICAgICAuYXNjaWlkb2N0b3IgYm9keS5ib29rICNoZWFkZXIgLmRldGFpbHMgewogICAgICAgIGJvcmRlcjogMCAhaW1wb3J0YW50OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsgfQogICAgICAvKiBsaW5lIDcxMiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAgICAgLmFzY2lpZG9jdG9yIGJvZHkuYm9vayAjaGVhZGVyIC5kZXRhaWxzIHNwYW46Zmlyc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7IH0KICAgICAgLyogbGluZSA3MTMsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgICAgIC5hc2NpaWRvY3RvciBib2R5LmJvb2sgI2hlYWRlciAuZGV0YWlscyBiciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7IH0KICAgICAgLyogbGluZSA3MTQsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgICAgIC5hc2NpaWRvY3RvciBib2R5LmJvb2sgI2hlYWRlciAuZGV0YWlscyBiciArIHNwYW46YmVmb3JlIHsKICAgICAgICBjb250ZW50OiBub25lICFpbXBvcnRhbnQ7IH0KICAgICAgLyogbGluZSA3MTUsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgICAgIC5hc2NpaWRvY3RvciBib2R5LmJvb2sgI3RvYyB7CiAgICAgICAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50OwogICAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDsgfQogICAgICAvKiBsaW5lIDcxNiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAgICAgLmFzY2lpZG9jdG9yIGJvZHkuYm9vayAjdG9jLCAuYXNjaWlkb2N0b3IgYm9keS5ib29rICNwcmVhbWJsZSwgLmFzY2lpZG9jdG9yIGJvZHkuYm9vayBoMS5zZWN0MCwgLmFzY2lpZG9jdG9yIGJvZHkuYm9vayAuc2VjdDEgPiBoMiB7CiAgICAgICAgcGFnZS1icmVhay1iZWZvcmU6IGFsd2F5czsgfQogICAgICAvKiBsaW5lIDcxNywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAgICAgLmFzY2lpZG9jdG9yIC5saXN0aW5nYmxvY2sgY29kZVtkYXRhLWxhbmddOmJlZm9yZSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7IH0KICAgICAgLyogbGluZSA3MTgsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgICAgIC5hc2NpaWRvY3RvciAjZm9vdGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lICFpbXBvcnRhbnQ7CiAgICAgICAgcGFkZGluZzogMCAwLjkzNzVlbTsgfQogICAgICAvKiBsaW5lIDcxOSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAgICAgLmFzY2lpZG9jdG9yICNmb290ZXItdGV4dCB7CiAgICAgICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC42KSAhaW1wb3J0YW50OwogICAgICAgIGZvbnQtc2l6ZTogMC45ZW07IH0KICAgICAgLyogbGluZSA3MjAsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgICAgIC5hc2NpaWRvY3RvciAuaGlkZS1vbi1wcmludCB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9CiAgICAgIC8qIGxpbmUgNzIxLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FzY2lpZG9jdG9yLmNzcyAqLwogICAgICAuYXNjaWlkb2N0b3IgLnByaW50LW9ubHkgewogICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IH0KICAgICAgLyogbGluZSA3MjIsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYXNjaWlkb2N0b3IuY3NzICovCiAgICAgIC5hc2NpaWRvY3RvciAuaGlkZS1mb3ItcHJpbnQgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfQogICAgICAvKiBsaW5lIDcyMywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hc2NpaWRvY3Rvci5jc3MgKi8KICAgICAgLmFzY2lpZG9jdG9yIC5zaG93LWZvci1wcmludCB7CiAgICAgICAgZGlzcGxheTogaW5oZXJpdCAhaW1wb3J0YW50OyB9IH0KICAvKiBsaW5lIDYyNSwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwogIC5hc2NpaWRvY3RvciAuaW1hZ2VibG9jayA+IC5jb250ZW50LCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgLmltYWdlYmxvY2sgPiAubm90ZXMsIHVsI2Rvd25sb2FkcyA+IGxpIC5hc2NpaWRvY3RvciAuaW1hZ2VibG9jayA+IC5ub3RlcywgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5pbWFnZWJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSwgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgLmFzY2lpZG9jdG9yIC5pbWFnZWJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSwgLmFzY2lpZG9jdG9yICNkb3dubG9hZCA+IGRpdiAuaW1hZ2VibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0sICNkb3dubG9hZCA+IGRpdiAuYXNjaWlkb2N0b3IgLmltYWdlYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdIHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfQogICAgLyogbGluZSA2MjcsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAgIC5hc2NpaWRvY3RvciAuaW1hZ2VibG9jayA+IC5jb250ZW50ID4gaW1nLCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgLmltYWdlYmxvY2sgPiAubm90ZXMgPiBpbWcsIHVsI2Rvd25sb2FkcyA+IGxpIC5hc2NpaWRvY3RvciAuaW1hZ2VibG9jayA+IC5ub3RlcyA+IGltZywgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5pbWFnZWJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IGltZywgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgLmFzY2lpZG9jdG9yIC5pbWFnZWJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IGltZywgLmFzY2lpZG9jdG9yICNkb3dubG9hZCA+IGRpdiAuaW1hZ2VibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiBpbWcsICNkb3dubG9hZCA+IGRpdiAuYXNjaWlkb2N0b3IgLmltYWdlYmxvY2sgPiB1bFtpZCQ9Ii1kb3dubG9hZCJdID4gaW1nIHsKICAgICAgcGFkZGluZzogMC4yNWVtOwogICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWVlOwogICAgICBtYXgtd2lkdGg6IDcwJTsgfQogIC8qIGxpbmUgNjM0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgLmFzY2lpZG9jdG9yIGgxLCAuYXNjaWlkb2N0b3IgaDIsIC5hc2NpaWRvY3RvciBoMywgLmFzY2lpZG9jdG9yICN0b2N0aXRsZSwgLmFzY2lpZG9jdG9yIC5zaWRlYmFyYmxvY2sgPiAuY29udGVudCA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIHVsI2Rvd25sb2FkcyA+IGxpIC5zaWRlYmFyYmxvY2sgPiAubm90ZXMgPiAudGl0bGUsIHVsI2Rvd25sb2FkcyA+IGxpIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gLm5vdGVzID4gLnRpdGxlLCAuYXNjaWlkb2N0b3IgdWwjZG93bmxvYWRzID4gbGkgdGFibGUgLnNpZGViYXJibG9jayA+IHVsW2lkJD0iLWRvd25sb2FkIl0gPiAudGl0bGUsIHVsI2Rvd25sb2FkcyA+IGxpIHRhYmxlIC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSwgLmFzY2lpZG9jdG9yICNkb3dubG9hZCA+IGRpdiAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSwgI2Rvd25sb2FkID4gZGl2IC5hc2NpaWRvY3RvciAuc2lkZWJhcmJsb2NrID4gdWxbaWQkPSItZG93bmxvYWQiXSA+IC50aXRsZSwgLmFzY2lpZG9jdG9yIGg0LCAuYXNjaWlkb2N0b3IgaDUsIC5hc2NpaWRvY3RvciBoNiB7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIGNvbG9yOiAjMjIyMjIyOyB9CiAgLyogbGluZSA2NDAsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAuYXNjaWlkb2N0b3IgaDEgewogICAgZm9udC1zaXplOiAyLjc1cmVtOyB9CiAgLyogbGluZSA2NDEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAuYXNjaWlkb2N0b3IgaDIgewogICAgZm9udC1zaXplOiAyLjMxMjVyZW07IH0KICAvKiBsaW5lIDY0MiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwogIC5hc2NpaWRvY3RvciBoMyB7CiAgICBmb250LXNpemU6IDEuNjg3NXJlbTsgfQogIC8qIGxpbmUgNjQzLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgLmFzY2lpZG9jdG9yIGg0IHsKICAgIGZvbnQtc2l6ZTogMS40Mzc1cmVtOyB9CiAgLyogbGluZSA2NDQsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAuYXNjaWlkb2N0b3IgaDUgewogICAgZm9udC1zaXplOiAxLjEyNXJlbTsgfQogIC8qIGxpbmUgNjQ1LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgLmFzY2lpZG9jdG9yIGg2IHsKICAgIGZvbnQtc2l6ZTogMXJlbTsgfQogIC8qIGxpbmUgNjQ3LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgLmFzY2lpZG9jdG9yIGEsIC5hc2NpaWRvY3RvciBhLmFuY2hvciB7CiAgICBjb2xvcjogIzVlODk0OTsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OyB9CiAgICAvKiBsaW5lIDY1MywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwogICAgLmFzY2lpZG9jdG9yIGE6aG92ZXIsIC5hc2NpaWRvY3RvciBhOmZvY3VzLCAuYXNjaWlkb2N0b3IgYS5hbmNob3I6aG92ZXIsIC5hc2NpaWRvY3RvciBhLmFuY2hvcjpmb2N1cyB7CiAgICAgIGNvbG9yOiAjMDA3OWExOyB9CiAgLyogbGluZSA2NTgsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAuYXNjaWlkb2N0b3IgPiBhc2lkZSB7CiAgICB3aWR0aDogMzMuMzMzMzMlOwogICAgZmxvYXQ6IHJpZ2h0OwogICAgbWFyZ2luOiAwIDAgMS44NzVyZW0gMS44NzVyZW07IH0KICAvKiBsaW5lIDY2NCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwogIC5hc2NpaWRvY3RvciBpLmZhIHsKICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsgfQoKQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NC4wNjNlbSkgewogIC8qIGxpbmUgNjcxLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgLmhlcm8gI2Rvd25sb2FkID4gLmNvbHVtbnMgPiBhLCAuaGVybyAjc3RhY2stbGlzdCAjZG93bmxvYWQgPiBsaSA+IGEsICNzdGFjay1saXN0IC5oZXJvICNkb3dubG9hZCA+IGxpID4gYSwgLmhlcm8gI3RoZW1lLWxpc3QgbGkjZG93bmxvYWQgPiBkaXYgPiBhLCAjdGhlbWUtbGlzdCAuaGVybyBsaSNkb3dubG9hZCA+IGRpdiA+IGEgewogICAgbWFyZ2luLXRvcDogMC41ZW07IH0KICAvKiBsaW5lIDY3NCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwogIC5oZXJvICNkb3dubG9hZCA+IC5jb2x1bW5zOmZpcnN0LWNoaWxkLCAuaGVybyAjc3RhY2stbGlzdCAjZG93bmxvYWQgPiBsaTpmaXJzdC1jaGlsZCwgI3N0YWNrLWxpc3QgLmhlcm8gI2Rvd25sb2FkID4gbGk6Zmlyc3QtY2hpbGQsIC5oZXJvICN0aGVtZS1saXN0IGxpI2Rvd25sb2FkID4gZGl2OmZpcnN0LWNoaWxkLCAjdGhlbWUtbGlzdCAuaGVybyBsaSNkb3dubG9hZCA+IGRpdjpmaXJzdC1jaGlsZCB7CiAgICBkaXNwbGF5OiBibG9jazsgfQoKICAvKiBsaW5lIDY3OCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwogIHVsI2Rvd25sb2FkcyBsaSB0YWJsZSB7CiAgICB3aWR0aDogMTAwJTsgfSB9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDAuMDYzZW0pIHsKICAvKiBsaW5lIDY4NCwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwogIC5oZXJvIGgxIHNwYW4gewogICAgZm9udC1zaXplOiBpbmhlcml0OwogICAgZGlzcGxheTogaW5saW5lOyB9IH0KLyogbGluZSA2OTAsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KI3NlYXJjaC1yZXN1bHRzIHsKICBtaW4taGVpZ2h0OiAxMGVtOwogIG1hcmdpbi10b3A6IC0yZW07IH0KICAvKiBsaW5lIDY5MywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwogICNzZWFyY2gtcmVzdWx0cyB0YWJsZSB7CiAgICBtYXJnaW46IDA7CiAgICBib3JkZXI6IDA7IH0KICAgIC8qIGxpbmUgNjk2LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgICAjc2VhcmNoLXJlc3VsdHMgdGFibGUgdGQgewogICAgICBsaW5lLWhlaWdodDogMWVtOwogICAgICBwYWRkaW5nOiAwOyB9CiAgLyogbGluZSA3MDEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAjc2VhcmNoLXJlc3VsdHMgLmdzYy10YWJsZS1yZXN1bHQgewogICAgbWFyZ2luLXRvcDogMC41ZW07IH0KICAgIC8qIGxpbmUgNzAzLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgICAjc2VhcmNoLXJlc3VsdHMgLmdzYy10YWJsZS1yZXN1bHQgdGQgewogICAgICBwYWRkaW5nLWxlZnQ6IDhweDsgfQogIC8qIGxpbmUgNzA3LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgI3NlYXJjaC1yZXN1bHRzIC5nc2Mtc2VsZWN0ZWQtb3B0aW9uLWNvbnRhaW5lciB7CiAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50OyB9CiAgLyogbGluZSA3MTAsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAjc2VhcmNoLXJlc3VsdHMgLmdjc2MtYnJhbmRpbmctaW1nLW5vY2xlYXIgewogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogNTFweCAhaW1wb3J0YW50OyB9CgovKiBsaW5lIDcxNiwgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwp1bC5zdWItbmF2IHsKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDsgfQoKLyogbGluZSA3MjAsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KYS5wZGYgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoIi9kYXNoYm9hcmQvaW1hZ2VzL3BkZi1pY29uLnBuZyIpOwogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCA1MCU7CiAgYmFja2dyb3VuZC1zaXplOiAzM3B4IGF1dG87CiAgcGFkZGluZy1sZWZ0OiA0NXB4OwogIG1pbi1oZWlnaHQ6IDQwcHg7CiAgbGluZS1oZWlnaHQ6IDEuMmVtOyB9CiAgLyogbGluZSA3MzAsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICBhLnBkZiBzcGFuIHsKICAgIGZvbnQtc2l6ZTogMC44ZW07CiAgICBjb2xvcjogIzc3NzsKICAgIGRpc3BsYXk6IGJsb2NrOyB9CgovKiBsaW5lIDczNywgL2FwcC9zb3VyY2UteGFtcHAtd2luZG93cy9zdHlsZXNoZWV0cy9hbGwuc2NzcyAqLwoudmlkZW8td3JhcHBlciB7CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyOwogIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsKICBkaXNwbGF5OiBmbGV4OwogIG1heC13aWR0aDogNDgwcHg7CiAgaGVpZ2h0OiAyNzBweDsKICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogIG1hcmdpbjogYXV0bzsgfQogIC8qIGxpbmUgNzQ4LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgLnZpZGVvLXdyYXBwZXIgLnBsYXktYnV0dG9uIHsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgIHBhZGRpbmc6IC4zZW0gMWVtOyB9CiAgLyogbGluZSA3NTMsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAudmlkZW8td3JhcHBlciAuZmVhdGhlciB7CiAgICBoZWlnaHQ6IDI0MHB4OwogICAgc3Ryb2tlOiAjZmZmOwogICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgZmlsbDogbm9uZTsKICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICAgIHN0cm9rZS1saW5lam9pbjogcm91bmQ7CiAgICBib3JkZXItcmFkaXVzOiAxMDAlOyB9CiAgLyogbGluZSA3NjMsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAudmlkZW8td3JhcHBlciAuY2lyY2xlIHsKICAgIGZpbGw6IHJnYmEoMCwgMCwgMCwgMC41KTsKICAgIHN0cm9rZS13aWR0aDogMTsgfQoKLyogbGluZSA3NzEsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KdWwjZG9jcy1saXN0ID4gbGkgewogIG1pbi1oZWlnaHQ6IDE1MHB4OwogIG1hcmdpbi1ib3R0b206IDEuNWVtOyB9CiAgLyogbGluZSA3NzYsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICB1bCNkb2NzLWxpc3QgPiBsaSBoMyB7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTsKICAgIHBhZGRpbmctYm90dG9tOiAwLjVlbTsgfQogICAgLyogbGluZSA3NzksIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAgIHVsI2RvY3MtbGlzdCA+IGxpIGgzIGEgewogICAgICBjb2xvcjogaW5oZXJpdDsgfQogIC8qIGxpbmUgNzg0LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgdWwjZG9jcy1saXN0ID4gbGkgYS5wZGYgewogICAgbWFyZ2luLXRvcDogMC41ZW07IH0KCi8qIGxpbmUgNzkwLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCmlmcmFtZS52aWRlbyB7CiAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKICBtYXJnaW4tYm90dG9tOiAxZW07IH0KCi8qIGxpbmUgNzk1LCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiNhZGRvbnNWaWRlb01vZGFsIHsKICB3aWR0aDogNjIwcHg7CiAgLyogNTYwcHggMngyMHB4IHBhZGRpbmcgKi8KICBtYXJnaW4tbGVmdDogLTI1JTsgfQoKLyogbGluZSA4MDAsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KLndhcm5pbmctbWVzc2FnZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkJDQzsKICBib3JkZXI6IDFweCBzb2xpZCAjRkI4MTY4OwogIHBhZGRpbmc6IDlweDsKICB0ZXh0LWFsaWduOiBqdXN0aWZ5OyB9CgovKiBQSFAgNyBiYW5uZXIgKi8KLyogbGluZSA4MDgsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KI3BocDctYmFubmVyIHsKICBiYWNrZ3JvdW5kOiAjNWU4OTQ5OwogIHRleHQtYWxpZ246IGNlbnRlcjsgfQogIC8qIGxpbmUgODEyLCAvYXBwL3NvdXJjZS14YW1wcC13aW5kb3dzL3N0eWxlc2hlZXRzL2FsbC5zY3NzICovCiAgI3BocDctYmFubmVyIGgyIHsKICAgIGNvbG9yOiAjZmZmOyB9CiAgLyogbGluZSA4MTYsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAjcGhwNy1iYW5uZXIgYSB7CiAgICBmb250LXNpemU6IDAuOGVtOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsgfQogICAgLyogbGluZSA4MjAsIC9hcHAvc291cmNlLXhhbXBwLXdpbmRvd3Mvc3R5bGVzaGVldHMvYWxsLnNjc3MgKi8KICAgICNwaHA3LWJhbm5lciBhOmhvdmVyIHsKICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0K"}},"time_used":618,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":610,"receive":8,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"cdnjs.cloudflare.com/ajax/libs/font-awesome/3.1.0/css/font-awesome.min.css","fqdn":"cdnjs.cloudflare.com","domain":"cloudflare.com","tld":"com"},"ip":{"addr":"104.17.25.14","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"stylesheet","requested_by":"https://detran-go-emissao-gov.site/dashboard/","date":"2026-07-27T14:06:09.567Z","timestamp":1785161169567,"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":"cdnjs.cloudflare.com","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Fri, 10 Jul 2026 07:07:58 GMT","end":"Thu, 08 Oct 2026 08:07:45 GMT"},"fingerprint":{"sha1":"DF:66:97:F5:13:A2:C0:81:D3:5B:60:C4:B0:7F:CD:78:F5:91:14:D5","sha256":"3C:F2:95:73:83:BA:4D:D9:CC:85:8F:BC:7D:2C:22:CF:F3:49:9A:3A:E4:1D:FC:AE:CB:07:3D:66:89:74:0E:C5"}}},"request":{"raw":"GET /ajax/libs/font-awesome/3.1.0/css/font-awesome.min.css HTTP/1.1\r\nHost: cdnjs.cloudflare.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://detran-go-emissao-gov.site/\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/3 200 \r\ndate: Mon, 27 Jul 2026 14:06:09 GMT\r\ncontent-type: text/css; charset=utf-8\r\ncontent-length: 3409\r\ncf-cache-status: BYPASS\r\naccess-control-allow-origin: *\r\ncache-control: no-transform, public, s-maxage=30672000, max-age=30672000, immutable\r\ncontent-encoding: br\r\nlast-modified: Mon, 04 May 2020 16:10:07 GMT\r\nvary: Accept-Encoding\r\nx-cdnjs-cache: HIT\r\ncross-origin-resource-policy: cross-origin\r\ntiming-allow-origin: *\r\nx-content-type-options: nosniff\r\ncf-cdnjs-via: cfworker/r2\r\nstrict-transport-security: max-age=15780000\r\nreport-to: {\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=TWawVgSOrlgrtOZyOQs4KMtV5xcqkZsIkVRUuQeFU3i%2BY7%2FjjRLScGj5kAJwI8oCdbA1Cb4urrQJLkn5bBfTysLL%2BDi3dJjUOlp4w49bkwamotddiuGvQth3DmlGkVOMWLlYgeKR\"}]}\r\nnel: {\"report_to\":\"cf-nel\",\"success_fraction\":0.01,\"max_age\":604800}\r\npriority: u=2,i=?0\r\nserver: cloudflare\r\ncf-ray: a21c33fde93a8be6-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"]},{"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":19403,"size_decoded":4399,"mime_type":"text/css; charset=utf-8","magic":"ASCII text, with very long lines (18376)","md5":"ea6cc550de5339fc787f1e041363e544","sha1":"1f8f1a6fa898b43de1958384ca103150aadc0a0b","sha256":"c86cb6b421d6b66d5c1de9d0b8390cda5ecf1d341d1156b6194511e14e95f1af","sha512":"e74143255ab2ce6765cdb3b0efac739674c2061e104c3287faf851b3a05ae087ea21a4bba8285fd595d30df233e38e9fddfb666954bc8fb59c1b8f833b2827d8","ssdeep":"384:KqbaJtK4bnrKlfGhH+zxxT4/Yy21b03pmS:stYykoMS","tlshash":"0492b9e9e94d11da6332c483fb816248ed84f129cee14d43f29b605c4ff17598799ba8","first_seen":"2023-04-05T13:45:37Z","last_seen":"2026-07-27T14:06:48.021434Z","times_seen":791,"resource_available":false,"data":"LyohCiAqICBGb250IEF3ZXNvbWUgMy4xLjAKICogIHRoZSBpY29uaWMgZm9udCBkZXNpZ25lZCBmb3IgQm9vdHN0cmFwCiAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqICBUaGUgZnVsbCBzdWl0ZSBvZiBwaWN0b2dyYXBoaWMgaWNvbnMsIGV4YW1wbGVzLCBhbmQgZG9jdW1lbnRhdGlvbgogKiAgY2FuIGJlIGZvdW5kIGF0OiBodHRwOi8vZm9udGF3ZXNvbWUuaW8KICoKICogIExpY2Vuc2UKICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogIC0gVGhlIEZvbnQgQXdlc29tZSBmb250IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBTSUwgT3BlbiBGb250IExpY2Vuc2UgdjEuMSAtCiAqICAgIGh0dHA6Ly9zY3JpcHRzLnNpbC5vcmcvT0ZMCiAqICAtIEZvbnQgQXdlc29tZSBDU1MsIExFU1MsIGFuZCBTQVNTIGZpbGVzIGFyZSBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgLQogKiAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UuaHRtbAogKiAgLSBGb250IEF3ZXNvbWUgZG9jdW1lbnRhdGlvbiBsaWNlbnNlZCB1bmRlciBDQyBCWSAzLjAgTGljZW5zZSAtCiAqICAgIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzMuMC8KICogIC0gQXR0cmlidXRpb24gaXMgbm8gbG9uZ2VyIHJlcXVpcmVkIGluIEZvbnQgQXdlc29tZSAzLjAsIGJ1dCBtdWNoIGFwcHJlY2lhdGVkOgogKiAgICAiRm9udCBBd2Vzb21lIGJ5IERhdmUgR2FuZHkgLSBodHRwOi8vZm9udGF3ZXNvbWUuaW8iCgogKiAgQ29udGFjdAogKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiAgRW1haWw6IGRhdmVAZm9udGF3ZXNvbWUuaW8KICogIFR3aXR0ZXI6IGh0dHA6Ly90d2l0dGVyLmNvbS9mb3J0YXdlc29fbWUKICogIFdvcms6IExlYWQgUHJvZHVjdCBEZXNpZ25lciBAIGh0dHA6Ly9reXJ1dXMuY29tCiAqL0Bmb250LWZhY2V7Zm9udC1mYW1pbHk6J0ZvbnRBd2Vzb21lJztzcmM6dXJsKCcuLi9mb250L2ZvbnRhd2Vzb21lLXdlYmZvbnQuZW90P3Y9My4xLjAnKTtzcmM6dXJsKCcuLi9mb250L2ZvbnRhd2Vzb21lLXdlYmZvbnQuZW90PyNpZWZpeCZ2PTMuMS4wJykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLHVybCgnLi4vZm9udC9mb250YXdlc29tZS13ZWJmb250LndvZmY/dj0zLjEuMCcpIGZvcm1hdCgnd29mZicpLHVybCgnLi4vZm9udC9mb250YXdlc29tZS13ZWJmb250LnR0Zj92PTMuMS4wJykgZm9ybWF0KCd0cnVldHlwZScpLHVybCgnLi4vZm9udC9mb250YXdlc29tZS13ZWJmb250LnN2ZyNmb250YXdlc29tZXJlZ3VsYXI/dj0zLjEuMCcpIGZvcm1hdCgnc3ZnJyk7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3R5bGU6bm9ybWFsfVtjbGFzc149Imljb24tIl0sW2NsYXNzKj0iIGljb24tIl17Zm9udC1mYW1pbHk6Rm9udEF3ZXNvbWU7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3R5bGU6bm9ybWFsO3RleHQtZGVjb3JhdGlvbjppbmhlcml0Oy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Km1hcmdpbi1yaWdodDouM2VtfVtjbGFzc149Imljb24tIl06YmVmb3JlLFtjbGFzcyo9IiBpY29uLSJdOmJlZm9yZXt0ZXh0LWRlY29yYXRpb246aW5oZXJpdDtkaXNwbGF5OmlubGluZS1ibG9jaztzcGVhazpub25lfS5pY29uLWxhcmdlOmJlZm9yZXt2ZXJ0aWNhbC1hbGlnbjotMTAlO2ZvbnQtc2l6ZToxLjMzMzMzMzMzMzMzMzMzMzNlbX1hIFtjbGFzc149Imljb24tIl0sYSBbY2xhc3MqPSIgaWNvbi0iXSxhIFtjbGFzc149Imljb24tIl06YmVmb3JlLGEgW2NsYXNzKj0iIGljb24tIl06YmVmb3Jle2Rpc3BsYXk6aW5saW5lfVtjbGFzc149Imljb24tIl0uaWNvbi1maXhlZC13aWR0aCxbY2xhc3MqPSIgaWNvbi0iXS5pY29uLWZpeGVkLXdpZHRoe2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEuMjg1NzE0Mjg1NzE0Mjg1OGVtO3RleHQtYWxpZ246Y2VudGVyfVtjbGFzc149Imljb24tIl0uaWNvbi1maXhlZC13aWR0aC5pY29uLWxhcmdlLFtjbGFzcyo9IiBpY29uLSJdLmljb24tZml4ZWQtd2lkdGguaWNvbi1sYXJnZXt3aWR0aDoxLjU3MTQyODU3MTQyODU3MTRlbX11bC5pY29ucy11bHtsaXN0LXN0eWxlLXR5cGU6bm9uZTt0ZXh0LWluZGVudDotMC43MTQyODU3MTQyODU3MTQzZW07bWFyZ2luLWxlZnQ6Mi4xNDI4NTcxNDI4NTcxNDNlbX11bC5pY29ucy11bD5saSAuaWNvbi1saXt3aWR0aDouNzE0Mjg1NzE0Mjg1NzE0M2VtO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtYWxpZ246Y2VudGVyfVtjbGFzc149Imljb24tIl0uaGlkZSxbY2xhc3MqPSIgaWNvbi0iXS5oaWRle2Rpc3BsYXk6bm9uZX0uaWNvbi1tdXRlZHtjb2xvcjojZWVlfS5pY29uLWxpZ2h0e2NvbG9yOiNmZmZ9Lmljb24tZGFya3tjb2xvcjojMzMzfS5pY29uLWJvcmRlcntib3JkZXI6c29saWQgMXB4ICNlZWU7cGFkZGluZzouMmVtIC4yNWVtIC4xNWVtOy13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweDtib3JkZXItcmFkaXVzOjNweH0uaWNvbi0yeHtmb250LXNpemU6MmVtfS5pY29uLTJ4Lmljb24tYm9yZGVye2JvcmRlci13aWR0aDoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fS5pY29uLTN4e2ZvbnQtc2l6ZTozZW19Lmljb24tM3guaWNvbi1ib3JkZXJ7Ym9yZGVyLXdpZHRoOjNweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NXB4Oy1tb3otYm9yZGVyLXJhZGl1czo1cHg7Ym9yZGVyLXJhZGl1czo1cHh9Lmljb24tNHh7Zm9udC1zaXplOjRlbX0uaWNvbi00eC5pY29uLWJvcmRlcntib3JkZXItd2lkdGg6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweH0uaWNvbi01eHtmb250LXNpemU6NWVtfS5pY29uLTV4Lmljb24tYm9yZGVye2JvcmRlci13aWR0aDo1cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjdweDstbW96LWJvcmRlci1yYWRpdXM6N3B4O2JvcmRlci1yYWRpdXM6N3B4fS5wdWxsLXJpZ2h0e2Zsb2F0OnJpZ2h0fS5wdWxsLWxlZnR7ZmxvYXQ6bGVmdH1bY2xhc3NePSJpY29uLSJdLnB1bGwtbGVmdCxbY2xhc3MqPSIgaWNvbi0iXS5wdWxsLWxlZnR7bWFyZ2luLXJpZ2h0Oi4zZW19W2NsYXNzXj0iaWNvbi0iXS5wdWxsLXJpZ2h0LFtjbGFzcyo9IiBpY29uLSJdLnB1bGwtcmlnaHR7bWFyZ2luLWxlZnQ6LjNlbX1bY2xhc3NePSJpY29uLSJdLFtjbGFzcyo9IiBpY29uLSJde2Rpc3BsYXk6aW5saW5lO3dpZHRoOmF1dG87aGVpZ2h0OmF1dG87bGluZS1oZWlnaHQ6bm9ybWFsO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2JhY2tncm91bmQtaW1hZ2U6bm9uZTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMDtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQ7bWFyZ2luLXRvcDowfS5pY29uLXdoaXRlLC5uYXYtcGlsbHM+LmFjdGl2ZT5hPltjbGFzc149Imljb24tIl0sLm5hdi1waWxscz4uYWN0aXZlPmE+W2NsYXNzKj0iIGljb24tIl0sLm5hdi1saXN0Pi5hY3RpdmU+YT5bY2xhc3NePSJpY29uLSJdLC5uYXYtbGlzdD4uYWN0aXZlPmE+W2NsYXNzKj0iIGljb24tIl0sLm5hdmJhci1pbnZlcnNlIC5uYXY+LmFjdGl2ZT5hPltjbGFzc149Imljb24tIl0sLm5hdmJhci1pbnZlcnNlIC5uYXY+LmFjdGl2ZT5hPltjbGFzcyo9IiBpY29uLSJdLC5kcm9wZG93bi1tZW51PmxpPmE6aG92ZXI+W2NsYXNzXj0iaWNvbi0iXSwuZHJvcGRvd24tbWVudT5saT5hOmhvdmVyPltjbGFzcyo9IiBpY29uLSJdLC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YT5bY2xhc3NePSJpY29uLSJdLC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YT5bY2xhc3MqPSIgaWNvbi0iXSwuZHJvcGRvd24tc3VibWVudTpob3Zlcj5hPltjbGFzc149Imljb24tIl0sLmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXI+YT5bY2xhc3MqPSIgaWNvbi0iXXtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9LmJ0biBbY2xhc3NePSJpY29uLSJdLmljb24tbGFyZ2UsLm5hdiBbY2xhc3NePSJpY29uLSJdLmljb24tbGFyZ2UsLmJ0biBbY2xhc3MqPSIgaWNvbi0iXS5pY29uLWxhcmdlLC5uYXYgW2NsYXNzKj0iIGljb24tIl0uaWNvbi1sYXJnZXtsaW5lLWhlaWdodDouOWVtfS5idG4gW2NsYXNzXj0iaWNvbi0iXS5pY29uLXNwaW4sLm5hdiBbY2xhc3NePSJpY29uLSJdLmljb24tc3BpbiwuYnRuIFtjbGFzcyo9IiBpY29uLSJdLmljb24tc3BpbiwubmF2IFtjbGFzcyo9IiBpY29uLSJdLmljb24tc3BpbntkaXNwbGF5OmlubGluZS1ibG9ja30ubmF2LXRhYnMgW2NsYXNzXj0iaWNvbi0iXSwubmF2LXBpbGxzIFtjbGFzc149Imljb24tIl0sLm5hdi10YWJzIFtjbGFzcyo9IiBpY29uLSJdLC5uYXYtcGlsbHMgW2NsYXNzKj0iIGljb24tIl0sLm5hdi10YWJzIFtjbGFzc149Imljb24tIl0uaWNvbi1sYXJnZSwubmF2LXBpbGxzIFtjbGFzc149Imljb24tIl0uaWNvbi1sYXJnZSwubmF2LXRhYnMgW2NsYXNzKj0iIGljb24tIl0uaWNvbi1sYXJnZSwubmF2LXBpbGxzIFtjbGFzcyo9IiBpY29uLSJdLmljb24tbGFyZ2V7bGluZS1oZWlnaHQ6LjllbX0uYnRuIFtjbGFzc149Imljb24tIl0ucHVsbC1sZWZ0Lmljb24tMngsLmJ0biBbY2xhc3MqPSIgaWNvbi0iXS5wdWxsLWxlZnQuaWNvbi0yeCwuYnRuIFtjbGFzc149Imljb24tIl0ucHVsbC1yaWdodC5pY29uLTJ4LC5idG4gW2NsYXNzKj0iIGljb24tIl0ucHVsbC1yaWdodC5pY29uLTJ4e21hcmdpbi10b3A6LjE4ZW19LmJ0biBbY2xhc3NePSJpY29uLSJdLmljb24tc3Bpbi5pY29uLWxhcmdlLC5idG4gW2NsYXNzKj0iIGljb24tIl0uaWNvbi1zcGluLmljb24tbGFyZ2V7bGluZS1oZWlnaHQ6LjhlbX0uYnRuLmJ0bi1zbWFsbCBbY2xhc3NePSJpY29uLSJdLnB1bGwtbGVmdC5pY29uLTJ4LC5idG4uYnRuLXNtYWxsIFtjbGFzcyo9IiBpY29uLSJdLnB1bGwtbGVmdC5pY29uLTJ4LC5idG4uYnRuLXNtYWxsIFtjbGFzc149Imljb24tIl0ucHVsbC1yaWdodC5pY29uLTJ4LC5idG4uYnRuLXNtYWxsIFtjbGFzcyo9IiBpY29uLSJdLnB1bGwtcmlnaHQuaWNvbi0yeHttYXJnaW4tdG9wOi4yNWVtfS5idG4uYnRuLWxhcmdlIFtjbGFzc149Imljb24tIl0sLmJ0bi5idG4tbGFyZ2UgW2NsYXNzKj0iIGljb24tIl17bWFyZ2luLXRvcDowfS5idG4uYnRuLWxhcmdlIFtjbGFzc149Imljb24tIl0ucHVsbC1sZWZ0Lmljb24tMngsLmJ0bi5idG4tbGFyZ2UgW2NsYXNzKj0iIGljb24tIl0ucHVsbC1sZWZ0Lmljb24tMngsLmJ0bi5idG4tbGFyZ2UgW2NsYXNzXj0iaWNvbi0iXS5wdWxsLXJpZ2h0Lmljb24tMngsLmJ0bi5idG4tbGFyZ2UgW2NsYXNzKj0iIGljb24tIl0ucHVsbC1yaWdodC5pY29uLTJ4e21hcmdpbi10b3A6LjA1ZW19LmJ0bi5idG4tbGFyZ2UgW2NsYXNzXj0iaWNvbi0iXS5wdWxsLWxlZnQuaWNvbi0yeCwuYnRuLmJ0bi1sYXJnZSBbY2xhc3MqPSIgaWNvbi0iXS5wdWxsLWxlZnQuaWNvbi0yeHttYXJnaW4tcmlnaHQ6LjJlbX0uYnRuLmJ0bi1sYXJnZSBbY2xhc3NePSJpY29uLSJdLnB1bGwtcmlnaHQuaWNvbi0yeCwuYnRuLmJ0bi1sYXJnZSBbY2xhc3MqPSIgaWNvbi0iXS5wdWxsLXJpZ2h0Lmljb24tMnh7bWFyZ2luLWxlZnQ6LjJlbX0uaWNvbi1zdGFja3twb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoyZW07aGVpZ2h0OjJlbTtsaW5lLWhlaWdodDoyZW07dmVydGljYWwtYWxpZ246LTM1JX0uaWNvbi1zdGFjayBbY2xhc3NePSJpY29uLSJdLC5pY29uLXN0YWNrIFtjbGFzcyo9IiBpY29uLSJde2Rpc3BsYXk6YmxvY2s7dGV4dC1hbGlnbjpjZW50ZXI7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtmb250LXNpemU6MWVtO2xpbmUtaGVpZ2h0OmluaGVyaXQ7KmxpbmUtaGVpZ2h0OjJlbX0uaWNvbi1zdGFjayAuaWNvbi1zdGFjay1iYXNle2ZvbnQtc2l6ZToyZW07KmxpbmUtaGVpZ2h0OjFlbX0uaWNvbi1zcGlue2Rpc3BsYXk6aW5saW5lLWJsb2NrOy1tb3otYW5pbWF0aW9uOnNwaW4gMnMgaW5maW5pdGUgbGluZWFyOy1vLWFuaW1hdGlvbjpzcGluIDJzIGluZmluaXRlIGxpbmVhcjstd2Via2l0LWFuaW1hdGlvbjpzcGluIDJzIGluZmluaXRlIGxpbmVhcjthbmltYXRpb246c3BpbiAycyBpbmZpbml0ZSBsaW5lYXJ9QC1tb3ota2V5ZnJhbWVzIHNwaW57MCV7LW1vei10cmFuc2Zvcm06cm90YXRlKDBkZWcpfTEwMCV7LW1vei10cmFuc2Zvcm06cm90YXRlKDM1OWRlZyl9fUAtd2Via2l0LWtleWZyYW1lcyBzcGluezAley13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgzNTlkZWcpfX1ALW8ta2V5ZnJhbWVzIHNwaW57MCV7LW8tdHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX0xMDAley1vLXRyYW5zZm9ybTpyb3RhdGUoMzU5ZGVnKX19QC1tcy1rZXlmcmFtZXMgc3BpbnswJXstbXMtdHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX0xMDAley1tcy10cmFuc2Zvcm06cm90YXRlKDM1OWRlZyl9fUBrZXlmcmFtZXMgc3BpbnswJXt0cmFuc2Zvcm06cm90YXRlKDBkZWcpfTEwMCV7dHJhbnNmb3JtOnJvdGF0ZSgzNTlkZWcpfX0uaWNvbi1yb3RhdGUtOTA6YmVmb3Jley13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyk7LW1vei10cmFuc2Zvcm06cm90YXRlKDkwZGVnKTstbXMtdHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyk7LW8tdHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyk7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5CYXNpY0ltYWdlKHJvdGF0aW9uPTEpfS5pY29uLXJvdGF0ZS0xODA6YmVmb3Jley13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpOy1tb3otdHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpOy1tcy10cmFuc2Zvcm06cm90YXRlKDE4MGRlZyk7LW8tdHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpO3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkJhc2ljSW1hZ2Uocm90YXRpb249Mil9Lmljb24tcm90YXRlLTI3MDpiZWZvcmV7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDI3MGRlZyk7LW1vei10cmFuc2Zvcm06cm90YXRlKDI3MGRlZyk7LW1zLXRyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKTstby10cmFuc2Zvcm06cm90YXRlKDI3MGRlZyk7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0zKX0uaWNvbi1mbGlwLWhvcml6b250YWw6YmVmb3Jley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC0xLDEpOy1tb3otdHJhbnNmb3JtOnNjYWxlKC0xLDEpOy1tcy10cmFuc2Zvcm06c2NhbGUoLTEsMSk7LW8tdHJhbnNmb3JtOnNjYWxlKC0xLDEpO3RyYW5zZm9ybTpzY2FsZSgtMSwxKX0uaWNvbi1mbGlwLXZlcnRpY2FsOmJlZm9yZXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxLC0xKTstbW96LXRyYW5zZm9ybTpzY2FsZSgxLC0xKTstbXMtdHJhbnNmb3JtOnNjYWxlKDEsLTEpOy1vLXRyYW5zZm9ybTpzY2FsZSgxLC0xKTt0cmFuc2Zvcm06c2NhbGUoMSwtMSl9Lmljb24tZ2xhc3M6YmVmb3Jle2NvbnRlbnQ6IlxmMDAwIn0uaWNvbi1tdXNpYzpiZWZvcmV7Y29udGVudDoiXGYwMDEifS5pY29uLXNlYXJjaDpiZWZvcmV7Y29udGVudDoiXGYwMDIifS5pY29uLWVudmVsb3BlOmJlZm9yZXtjb250ZW50OiJcZjAwMyJ9Lmljb24taGVhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDA0In0uaWNvbi1zdGFyOmJlZm9yZXtjb250ZW50OiJcZjAwNSJ9Lmljb24tc3Rhci1lbXB0eTpiZWZvcmV7Y29udGVudDoiXGYwMDYifS5pY29uLXVzZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMDA3In0uaWNvbi1maWxtOmJlZm9yZXtjb250ZW50OiJcZjAwOCJ9Lmljb24tdGgtbGFyZ2U6YmVmb3Jle2NvbnRlbnQ6IlxmMDA5In0uaWNvbi10aDpiZWZvcmV7Y29udGVudDoiXGYwMGEifS5pY29uLXRoLWxpc3Q6YmVmb3Jle2NvbnRlbnQ6IlxmMDBiIn0uaWNvbi1vazpiZWZvcmV7Y29udGVudDoiXGYwMGMifS5pY29uLXJlbW92ZTpiZWZvcmV7Y29udGVudDoiXGYwMGQifS5pY29uLXpvb20taW46YmVmb3Jle2NvbnRlbnQ6IlxmMDBlIn0uaWNvbi16b29tLW91dDpiZWZvcmV7Y29udGVudDoiXGYwMTAifS5pY29uLW9mZjpiZWZvcmV7Y29udGVudDoiXGYwMTEifS5pY29uLXNpZ25hbDpiZWZvcmV7Y29udGVudDoiXGYwMTIifS5pY29uLWNvZzpiZWZvcmV7Y29udGVudDoiXGYwMTMifS5pY29uLXRyYXNoOmJlZm9yZXtjb250ZW50OiJcZjAxNCJ9Lmljb24taG9tZTpiZWZvcmV7Y29udGVudDoiXGYwMTUifS5pY29uLWZpbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMDE2In0uaWNvbi10aW1lOmJlZm9yZXtjb250ZW50OiJcZjAxNyJ9Lmljb24tcm9hZDpiZWZvcmV7Y29udGVudDoiXGYwMTgifS5pY29uLWRvd25sb2FkLWFsdDpiZWZvcmV7Y29udGVudDoiXGYwMTkifS5pY29uLWRvd25sb2FkOmJlZm9yZXtjb250ZW50OiJcZjAxYSJ9Lmljb24tdXBsb2FkOmJlZm9yZXtjb250ZW50OiJcZjAxYiJ9Lmljb24taW5ib3g6YmVmb3Jle2NvbnRlbnQ6IlxmMDFjIn0uaWNvbi1wbGF5LWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGYwMWQifS5pY29uLXJlcGVhdDpiZWZvcmUsLmljb24tcm90YXRlLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjAxZSJ9Lmljb24tcmVmcmVzaDpiZWZvcmV7Y29udGVudDoiXGYwMjEifS5pY29uLWxpc3QtYWx0OmJlZm9yZXtjb250ZW50OiJcZjAyMiJ9Lmljb24tbG9jazpiZWZvcmV7Y29udGVudDoiXGYwMjMifS5pY29uLWZsYWc6YmVmb3Jle2NvbnRlbnQ6IlxmMDI0In0uaWNvbi1oZWFkcGhvbmVzOmJlZm9yZXtjb250ZW50OiJcZjAyNSJ9Lmljb24tdm9sdW1lLW9mZjpiZWZvcmV7Y29udGVudDoiXGYwMjYifS5pY29uLXZvbHVtZS1kb3duOmJlZm9yZXtjb250ZW50OiJcZjAyNyJ9Lmljb24tdm9sdW1lLXVwOmJlZm9yZXtjb250ZW50OiJcZjAyOCJ9Lmljb24tcXJjb2RlOmJlZm9yZXtjb250ZW50OiJcZjAyOSJ9Lmljb24tYmFyY29kZTpiZWZvcmV7Y29udGVudDoiXGYwMmEifS5pY29uLXRhZzpiZWZvcmV7Y29udGVudDoiXGYwMmIifS5pY29uLXRhZ3M6YmVmb3Jle2NvbnRlbnQ6IlxmMDJjIn0uaWNvbi1ib29rOmJlZm9yZXtjb250ZW50OiJcZjAyZCJ9Lmljb24tYm9va21hcms6YmVmb3Jle2NvbnRlbnQ6IlxmMDJlIn0uaWNvbi1wcmludDpiZWZvcmV7Y29udGVudDoiXGYwMmYifS5pY29uLWNhbWVyYTpiZWZvcmV7Y29udGVudDoiXGYwMzAifS5pY29uLWZvbnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDMxIn0uaWNvbi1ib2xkOmJlZm9yZXtjb250ZW50OiJcZjAzMiJ9Lmljb24taXRhbGljOmJlZm9yZXtjb250ZW50OiJcZjAzMyJ9Lmljb24tdGV4dC1oZWlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDM0In0uaWNvbi10ZXh0LXdpZHRoOmJlZm9yZXtjb250ZW50OiJcZjAzNSJ9Lmljb24tYWxpZ24tbGVmdDpiZWZvcmV7Y29udGVudDoiXGYwMzYifS5pY29uLWFsaWduLWNlbnRlcjpiZWZvcmV7Y29udGVudDoiXGYwMzcifS5pY29uLWFsaWduLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjAzOCJ9Lmljb24tYWxpZ24tanVzdGlmeTpiZWZvcmV7Y29udGVudDoiXGYwMzkifS5pY29uLWxpc3Q6YmVmb3Jle2NvbnRlbnQ6IlxmMDNhIn0uaWNvbi1pbmRlbnQtbGVmdDpiZWZvcmV7Y29udGVudDoiXGYwM2IifS5pY29uLWluZGVudC1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYwM2MifS5pY29uLWZhY2V0aW1lLXZpZGVvOmJlZm9yZXtjb250ZW50OiJcZjAzZCJ9Lmljb24tcGljdHVyZTpiZWZvcmV7Y29udGVudDoiXGYwM2UifS5pY29uLXBlbmNpbDpiZWZvcmV7Y29udGVudDoiXGYwNDAifS5pY29uLW1hcC1tYXJrZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMDQxIn0uaWNvbi1hZGp1c3Q6YmVmb3Jle2NvbnRlbnQ6IlxmMDQyIn0uaWNvbi10aW50OmJlZm9yZXtjb250ZW50OiJcZjA0MyJ9Lmljb24tZWRpdDpiZWZvcmV7Y29udGVudDoiXGYwNDQifS5pY29uLXNoYXJlOmJlZm9yZXtjb250ZW50OiJcZjA0NSJ9Lmljb24tY2hlY2s6YmVmb3Jle2NvbnRlbnQ6IlxmMDQ2In0uaWNvbi1tb3ZlOmJlZm9yZXtjb250ZW50OiJcZjA0NyJ9Lmljb24tc3RlcC1iYWNrd2FyZDpiZWZvcmV7Y29udGVudDoiXGYwNDgifS5pY29uLWZhc3QtYmFja3dhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDQ5In0uaWNvbi1iYWNrd2FyZDpiZWZvcmV7Y29udGVudDoiXGYwNGEifS5pY29uLXBsYXk6YmVmb3Jle2NvbnRlbnQ6IlxmMDRiIn0uaWNvbi1wYXVzZTpiZWZvcmV7Y29udGVudDoiXGYwNGMifS5pY29uLXN0b3A6YmVmb3Jle2NvbnRlbnQ6IlxmMDRkIn0uaWNvbi1mb3J3YXJkOmJlZm9yZXtjb250ZW50OiJcZjA0ZSJ9Lmljb24tZmFzdC1mb3J3YXJkOmJlZm9yZXtjb250ZW50OiJcZjA1MCJ9Lmljb24tc3RlcC1mb3J3YXJkOmJlZm9yZXtjb250ZW50OiJcZjA1MSJ9Lmljb24tZWplY3Q6YmVmb3Jle2NvbnRlbnQ6IlxmMDUyIn0uaWNvbi1jaGV2cm9uLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDUzIn0uaWNvbi1jaGV2cm9uLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjA1NCJ9Lmljb24tcGx1cy1zaWduOmJlZm9yZXtjb250ZW50OiJcZjA1NSJ9Lmljb24tbWludXMtc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwNTYifS5pY29uLXJlbW92ZS1zaWduOmJlZm9yZXtjb250ZW50OiJcZjA1NyJ9Lmljb24tb2stc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwNTgifS5pY29uLXF1ZXN0aW9uLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDU5In0uaWNvbi1pbmZvLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDVhIn0uaWNvbi1zY3JlZW5zaG90OmJlZm9yZXtjb250ZW50OiJcZjA1YiJ9Lmljb24tcmVtb3ZlLWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGYwNWMifS5pY29uLW9rLWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGYwNWQifS5pY29uLWJhbi1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMDVlIn0uaWNvbi1hcnJvdy1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjA2MCJ9Lmljb24tYXJyb3ctcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDYxIn0uaWNvbi1hcnJvdy11cDpiZWZvcmV7Y29udGVudDoiXGYwNjIifS5pY29uLWFycm93LWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMDYzIn0uaWNvbi1zaGFyZS1hbHQ6YmVmb3JlLC5pY29uLW1haWwtZm9yd2FyZDpiZWZvcmV7Y29udGVudDoiXGYwNjQifS5pY29uLXJlc2l6ZS1mdWxsOmJlZm9yZXtjb250ZW50OiJcZjA2NSJ9Lmljb24tcmVzaXplLXNtYWxsOmJlZm9yZXtjb250ZW50OiJcZjA2NiJ9Lmljb24tcGx1czpiZWZvcmV7Y29udGVudDoiXGYwNjcifS5pY29uLW1pbnVzOmJlZm9yZXtjb250ZW50OiJcZjA2OCJ9Lmljb24tYXN0ZXJpc2s6YmVmb3Jle2NvbnRlbnQ6IlxmMDY5In0uaWNvbi1leGNsYW1hdGlvbi1zaWduOmJlZm9yZXtjb250ZW50OiJcZjA2YSJ9Lmljb24tZ2lmdDpiZWZvcmV7Y29udGVudDoiXGYwNmIifS5pY29uLWxlYWY6YmVmb3Jle2NvbnRlbnQ6IlxmMDZjIn0uaWNvbi1maXJlOmJlZm9yZXtjb250ZW50OiJcZjA2ZCJ9Lmljb24tZXllLW9wZW46YmVmb3Jle2NvbnRlbnQ6IlxmMDZlIn0uaWNvbi1leWUtY2xvc2U6YmVmb3Jle2NvbnRlbnQ6IlxmMDcwIn0uaWNvbi13YXJuaW5nLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDcxIn0uaWNvbi1wbGFuZTpiZWZvcmV7Y29udGVudDoiXGYwNzIifS5pY29uLWNhbGVuZGFyOmJlZm9yZXtjb250ZW50OiJcZjA3MyJ9Lmljb24tcmFuZG9tOmJlZm9yZXtjb250ZW50OiJcZjA3NCJ9Lmljb24tY29tbWVudDpiZWZvcmV7Y29udGVudDoiXGYwNzUifS5pY29uLW1hZ25ldDpiZWZvcmV7Y29udGVudDoiXGYwNzYifS5pY29uLWNoZXZyb24tdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMDc3In0uaWNvbi1jaGV2cm9uLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMDc4In0uaWNvbi1yZXR3ZWV0OmJlZm9yZXtjb250ZW50OiJcZjA3OSJ9Lmljb24tc2hvcHBpbmctY2FydDpiZWZvcmV7Y29udGVudDoiXGYwN2EifS5pY29uLWZvbGRlci1jbG9zZTpiZWZvcmV7Y29udGVudDoiXGYwN2IifS5pY29uLWZvbGRlci1vcGVuOmJlZm9yZXtjb250ZW50OiJcZjA3YyJ9Lmljb24tcmVzaXplLXZlcnRpY2FsOmJlZm9yZXtjb250ZW50OiJcZjA3ZCJ9Lmljb24tcmVzaXplLWhvcml6b250YWw6YmVmb3Jle2NvbnRlbnQ6IlxmMDdlIn0uaWNvbi1iYXItY2hhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDgwIn0uaWNvbi10d2l0dGVyLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDgxIn0uaWNvbi1mYWNlYm9vay1zaWduOmJlZm9yZXtjb250ZW50OiJcZjA4MiJ9Lmljb24tY2FtZXJhLXJldHJvOmJlZm9yZXtjb250ZW50OiJcZjA4MyJ9Lmljb24ta2V5OmJlZm9yZXtjb250ZW50OiJcZjA4NCJ9Lmljb24tY29nczpiZWZvcmV7Y29udGVudDoiXGYwODUifS5pY29uLWNvbW1lbnRzOmJlZm9yZXtjb250ZW50OiJcZjA4NiJ9Lmljb24tdGh1bWJzLXVwOmJlZm9yZXtjb250ZW50OiJcZjA4NyJ9Lmljb24tdGh1bWJzLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMDg4In0uaWNvbi1zdGFyLWhhbGY6YmVmb3Jle2NvbnRlbnQ6IlxmMDg5In0uaWNvbi1oZWFydC1lbXB0eTpiZWZvcmV7Y29udGVudDoiXGYwOGEifS5pY29uLXNpZ25vdXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDhiIn0uaWNvbi1saW5rZWRpbi1zaWduOmJlZm9yZXtjb250ZW50OiJcZjA4YyJ9Lmljb24tcHVzaHBpbjpiZWZvcmV7Y29udGVudDoiXGYwOGQifS5pY29uLWV4dGVybmFsLWxpbms6YmVmb3Jle2NvbnRlbnQ6IlxmMDhlIn0uaWNvbi1zaWduaW46YmVmb3Jle2NvbnRlbnQ6IlxmMDkwIn0uaWNvbi10cm9waHk6YmVmb3Jle2NvbnRlbnQ6IlxmMDkxIn0uaWNvbi1naXRodWItc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwOTIifS5pY29uLXVwbG9hZC1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDkzIn0uaWNvbi1sZW1vbjpiZWZvcmV7Y29udGVudDoiXGYwOTQifS5pY29uLXBob25lOmJlZm9yZXtjb250ZW50OiJcZjA5NSJ9Lmljb24tY2hlY2stZW1wdHk6YmVmb3Jle2NvbnRlbnQ6IlxmMDk2In0uaWNvbi1ib29rbWFyay1lbXB0eTpiZWZvcmV7Y29udGVudDoiXGYwOTcifS5pY29uLXBob25lLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDk4In0uaWNvbi10d2l0dGVyOmJlZm9yZXtjb250ZW50OiJcZjA5OSJ9Lmljb24tZmFjZWJvb2s6YmVmb3Jle2NvbnRlbnQ6IlxmMDlhIn0uaWNvbi1naXRodWI6YmVmb3Jle2NvbnRlbnQ6IlxmMDliIn0uaWNvbi11bmxvY2s6YmVmb3Jle2NvbnRlbnQ6IlxmMDljIn0uaWNvbi1jcmVkaXQtY2FyZDpiZWZvcmV7Y29udGVudDoiXGYwOWQifS5pY29uLXJzczpiZWZvcmV7Y29udGVudDoiXGYwOWUifS5pY29uLWhkZDpiZWZvcmV7Y29udGVudDoiXGYwYTAifS5pY29uLWJ1bGxob3JuOmJlZm9yZXtjb250ZW50OiJcZjBhMSJ9Lmljb24tYmVsbDpiZWZvcmV7Y29udGVudDoiXGYwYTIifS5pY29uLWNlcnRpZmljYXRlOmJlZm9yZXtjb250ZW50OiJcZjBhMyJ9Lmljb24taGFuZC1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYwYTQifS5pY29uLWhhbmQtbGVmdDpiZWZvcmV7Y29udGVudDoiXGYwYTUifS5pY29uLWhhbmQtdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMGE2In0uaWNvbi1oYW5kLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMGE3In0uaWNvbi1jaXJjbGUtYXJyb3ctbGVmdDpiZWZvcmV7Y29udGVudDoiXGYwYTgifS5pY29uLWNpcmNsZS1hcnJvdy1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYwYTkifS5pY29uLWNpcmNsZS1hcnJvdy11cDpiZWZvcmV7Y29udGVudDoiXGYwYWEifS5pY29uLWNpcmNsZS1hcnJvdy1kb3duOmJlZm9yZXtjb250ZW50OiJcZjBhYiJ9Lmljb24tZ2xvYmU6YmVmb3Jle2NvbnRlbnQ6IlxmMGFjIn0uaWNvbi13cmVuY2g6YmVmb3Jle2NvbnRlbnQ6IlxmMGFkIn0uaWNvbi10YXNrczpiZWZvcmV7Y29udGVudDoiXGYwYWUifS5pY29uLWZpbHRlcjpiZWZvcmV7Y29udGVudDoiXGYwYjAifS5pY29uLWJyaWVmY2FzZTpiZWZvcmV7Y29udGVudDoiXGYwYjEifS5pY29uLWZ1bGxzY3JlZW46YmVmb3Jle2NvbnRlbnQ6IlxmMGIyIn0uaWNvbi1ncm91cDpiZWZvcmV7Y29udGVudDoiXGYwYzAifS5pY29uLWxpbms6YmVmb3Jle2NvbnRlbnQ6IlxmMGMxIn0uaWNvbi1jbG91ZDpiZWZvcmV7Y29udGVudDoiXGYwYzIifS5pY29uLWJlYWtlcjpiZWZvcmV7Y29udGVudDoiXGYwYzMifS5pY29uLWN1dDpiZWZvcmV7Y29udGVudDoiXGYwYzQifS5pY29uLWNvcHk6YmVmb3Jle2NvbnRlbnQ6IlxmMGM1In0uaWNvbi1wYXBlci1jbGlwOmJlZm9yZXtjb250ZW50OiJcZjBjNiJ9Lmljb24tc2F2ZTpiZWZvcmV7Y29udGVudDoiXGYwYzcifS5pY29uLXNpZ24tYmxhbms6YmVmb3Jle2NvbnRlbnQ6IlxmMGM4In0uaWNvbi1yZW9yZGVyOmJlZm9yZXtjb250ZW50OiJcZjBjOSJ9Lmljb24tbGlzdC11bDpiZWZvcmV7Y29udGVudDoiXGYwY2EifS5pY29uLWxpc3Qtb2w6YmVmb3Jle2NvbnRlbnQ6IlxmMGNiIn0uaWNvbi1zdHJpa2V0aHJvdWdoOmJlZm9yZXtjb250ZW50OiJcZjBjYyJ9Lmljb24tdW5kZXJsaW5lOmJlZm9yZXtjb250ZW50OiJcZjBjZCJ9Lmljb24tdGFibGU6YmVmb3Jle2NvbnRlbnQ6IlxmMGNlIn0uaWNvbi1tYWdpYzpiZWZvcmV7Y29udGVudDoiXGYwZDAifS5pY29uLXRydWNrOmJlZm9yZXtjb250ZW50OiJcZjBkMSJ9Lmljb24tcGludGVyZXN0OmJlZm9yZXtjb250ZW50OiJcZjBkMiJ9Lmljb24tcGludGVyZXN0LXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMGQzIn0uaWNvbi1nb29nbGUtcGx1cy1zaWduOmJlZm9yZXtjb250ZW50OiJcZjBkNCJ9Lmljb24tZ29vZ2xlLXBsdXM6YmVmb3Jle2NvbnRlbnQ6IlxmMGQ1In0uaWNvbi1tb25leTpiZWZvcmV7Y29udGVudDoiXGYwZDYifS5pY29uLWNhcmV0LWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMGQ3In0uaWNvbi1jYXJldC11cDpiZWZvcmV7Y29udGVudDoiXGYwZDgifS5pY29uLWNhcmV0LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGQ5In0uaWNvbi1jYXJldC1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYwZGEifS5pY29uLWNvbHVtbnM6YmVmb3Jle2NvbnRlbnQ6IlxmMGRiIn0uaWNvbi1zb3J0OmJlZm9yZXtjb250ZW50OiJcZjBkYyJ9Lmljb24tc29ydC1kb3duOmJlZm9yZXtjb250ZW50OiJcZjBkZCJ9Lmljb24tc29ydC11cDpiZWZvcmV7Y29udGVudDoiXGYwZGUifS5pY29uLWVudmVsb3BlLWFsdDpiZWZvcmV7Y29udGVudDoiXGYwZTAifS5pY29uLWxpbmtlZGluOmJlZm9yZXtjb250ZW50OiJcZjBlMSJ9Lmljb24tdW5kbzpiZWZvcmUsLmljb24tcm90YXRlLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGUyIn0uaWNvbi1sZWdhbDpiZWZvcmV7Y29udGVudDoiXGYwZTMifS5pY29uLWRhc2hib2FyZDpiZWZvcmV7Y29udGVudDoiXGYwZTQifS5pY29uLWNvbW1lbnQtYWx0OmJlZm9yZXtjb250ZW50OiJcZjBlNSJ9Lmljb24tY29tbWVudHMtYWx0OmJlZm9yZXtjb250ZW50OiJcZjBlNiJ9Lmljb24tYm9sdDpiZWZvcmV7Y29udGVudDoiXGYwZTcifS5pY29uLXNpdGVtYXA6YmVmb3Jle2NvbnRlbnQ6IlxmMGU4In0uaWNvbi11bWJyZWxsYTpiZWZvcmV7Y29udGVudDoiXGYwZTkifS5pY29uLXBhc3RlOmJlZm9yZXtjb250ZW50OiJcZjBlYSJ9Lmljb24tbGlnaHRidWxiOmJlZm9yZXtjb250ZW50OiJcZjBlYiJ9Lmljb24tZXhjaGFuZ2U6YmVmb3Jle2NvbnRlbnQ6IlxmMGVjIn0uaWNvbi1jbG91ZC1kb3dubG9hZDpiZWZvcmV7Y29udGVudDoiXGYwZWQifS5pY29uLWNsb3VkLXVwbG9hZDpiZWZvcmV7Y29udGVudDoiXGYwZWUifS5pY29uLXVzZXItbWQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGYwIn0uaWNvbi1zdGV0aG9zY29wZTpiZWZvcmV7Y29udGVudDoiXGYwZjEifS5pY29uLXN1aXRjYXNlOmJlZm9yZXtjb250ZW50OiJcZjBmMiJ9Lmljb24tYmVsbC1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGYzIn0uaWNvbi1jb2ZmZWU6YmVmb3Jle2NvbnRlbnQ6IlxmMGY0In0uaWNvbi1mb29kOmJlZm9yZXtjb250ZW50OiJcZjBmNSJ9Lmljb24tZmlsZS1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGY2In0uaWNvbi1idWlsZGluZzpiZWZvcmV7Y29udGVudDoiXGYwZjcifS5pY29uLWhvc3BpdGFsOmJlZm9yZXtjb250ZW50OiJcZjBmOCJ9Lmljb24tYW1idWxhbmNlOmJlZm9yZXtjb250ZW50OiJcZjBmOSJ9Lmljb24tbWVka2l0OmJlZm9yZXtjb250ZW50OiJcZjBmYSJ9Lmljb24tZmlnaHRlci1qZXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGZiIn0uaWNvbi1iZWVyOmJlZm9yZXtjb250ZW50OiJcZjBmYyJ9Lmljb24taC1zaWduOmJlZm9yZXtjb250ZW50OiJcZjBmZCJ9Lmljb24tcGx1cy1zaWduLWFsdDpiZWZvcmV7Y29udGVudDoiXGYwZmUifS5pY29uLWRvdWJsZS1hbmdsZS1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjEwMCJ9Lmljb24tZG91YmxlLWFuZ2xlLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjEwMSJ9Lmljb24tZG91YmxlLWFuZ2xlLXVwOmJlZm9yZXtjb250ZW50OiJcZjEwMiJ9Lmljb24tZG91YmxlLWFuZ2xlLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMTAzIn0uaWNvbi1hbmdsZS1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjEwNCJ9Lmljb24tYW5nbGUtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTA1In0uaWNvbi1hbmdsZS11cDpiZWZvcmV7Y29udGVudDoiXGYxMDYifS5pY29uLWFuZ2xlLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMTA3In0uaWNvbi1kZXNrdG9wOmJlZm9yZXtjb250ZW50OiJcZjEwOCJ9Lmljb24tbGFwdG9wOmJlZm9yZXtjb250ZW50OiJcZjEwOSJ9Lmljb24tdGFibGV0OmJlZm9yZXtjb250ZW50OiJcZjEwYSJ9Lmljb24tbW9iaWxlLXBob25lOmJlZm9yZXtjb250ZW50OiJcZjEwYiJ9Lmljb24tY2lyY2xlLWJsYW5rOmJlZm9yZXtjb250ZW50OiJcZjEwYyJ9Lmljb24tcXVvdGUtbGVmdDpiZWZvcmV7Y29udGVudDoiXGYxMGQifS5pY29uLXF1b3RlLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjEwZSJ9Lmljb24tc3Bpbm5lcjpiZWZvcmV7Y29udGVudDoiXGYxMTAifS5pY29uLWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGYxMTEifS5pY29uLXJlcGx5OmJlZm9yZSwuaWNvbi1tYWlsLXJlcGx5OmJlZm9yZXtjb250ZW50OiJcZjExMiJ9Lmljb24tZm9sZGVyLWNsb3NlLWFsdDpiZWZvcmV7Y29udGVudDoiXGYxMTQifS5pY29uLWZvbGRlci1vcGVuLWFsdDpiZWZvcmV7Y29udGVudDoiXGYxMTUifS5pY29uLWV4cGFuZC1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTE2In0uaWNvbi1jb2xsYXBzZS1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTE3In0uaWNvbi1zbWlsZTpiZWZvcmV7Y29udGVudDoiXGYxMTgifS5pY29uLWZyb3duOmJlZm9yZXtjb250ZW50OiJcZjExOSJ9Lmljb24tbWVoOmJlZm9yZXtjb250ZW50OiJcZjExYSJ9Lmljb24tZ2FtZXBhZDpiZWZvcmV7Y29udGVudDoiXGYxMWIifS5pY29uLWtleWJvYXJkOmJlZm9yZXtjb250ZW50OiJcZjExYyJ9Lmljb24tZmxhZy1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTFkIn0uaWNvbi1mbGFnLWNoZWNrZXJlZDpiZWZvcmV7Y29udGVudDoiXGYxMWUifS5pY29uLXRlcm1pbmFsOmJlZm9yZXtjb250ZW50OiJcZjEyMCJ9Lmljb24tY29kZTpiZWZvcmV7Y29udGVudDoiXGYxMjEifS5pY29uLXJlcGx5LWFsbDpiZWZvcmV7Y29udGVudDoiXGYxMjIifS5pY29uLW1haWwtcmVwbHktYWxsOmJlZm9yZXtjb250ZW50OiJcZjEyMiJ9Lmljb24tc3Rhci1oYWxmLWVtcHR5OmJlZm9yZXtjb250ZW50OiJcZjEyMyJ9Lmljb24tbG9jYXRpb24tYXJyb3c6YmVmb3Jle2NvbnRlbnQ6IlxmMTI0In0uaWNvbi1jcm9wOmJlZm9yZXtjb250ZW50OiJcZjEyNSJ9Lmljb24tY29kZS1mb3JrOmJlZm9yZXtjb250ZW50OiJcZjEyNiJ9Lmljb24tdW5saW5rOmJlZm9yZXtjb250ZW50OiJcZjEyNyJ9Lmljb24tcXVlc3Rpb246YmVmb3Jle2NvbnRlbnQ6IlxmMTI4In0uaWNvbi1pbmZvOmJlZm9yZXtjb250ZW50OiJcZjEyOSJ9Lmljb24tZXhjbGFtYXRpb246YmVmb3Jle2NvbnRlbnQ6IlxmMTJhIn0uaWNvbi1zdXBlcnNjcmlwdDpiZWZvcmV7Y29udGVudDoiXGYxMmIifS5pY29uLXN1YnNjcmlwdDpiZWZvcmV7Y29udGVudDoiXGYxMmMifS5pY29uLWVyYXNlcjpiZWZvcmV7Y29udGVudDoiXGYxMmQifS5pY29uLXB1enpsZS1waWVjZTpiZWZvcmV7Y29udGVudDoiXGYxMmUifS5pY29uLW1pY3JvcGhvbmU6YmVmb3Jle2NvbnRlbnQ6IlxmMTMwIn0uaWNvbi1taWNyb3Bob25lLW9mZjpiZWZvcmV7Y29udGVudDoiXGYxMzEifS5pY29uLXNoaWVsZDpiZWZvcmV7Y29udGVudDoiXGYxMzIifS5pY29uLWNhbGVuZGFyLWVtcHR5OmJlZm9yZXtjb250ZW50OiJcZjEzMyJ9Lmljb24tZmlyZS1leHRpbmd1aXNoZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMTM0In0uaWNvbi1yb2NrZXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTM1In0uaWNvbi1tYXhjZG46YmVmb3Jle2NvbnRlbnQ6IlxmMTM2In0uaWNvbi1jaGV2cm9uLXNpZ24tbGVmdDpiZWZvcmV7Y29udGVudDoiXGYxMzcifS5pY29uLWNoZXZyb24tc2lnbi1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYxMzgifS5pY29uLWNoZXZyb24tc2lnbi11cDpiZWZvcmV7Y29udGVudDoiXGYxMzkifS5pY29uLWNoZXZyb24tc2lnbi1kb3duOmJlZm9yZXtjb250ZW50OiJcZjEzYSJ9Lmljb24taHRtbDU6YmVmb3Jle2NvbnRlbnQ6IlxmMTNiIn0uaWNvbi1jc3MzOmJlZm9yZXtjb250ZW50OiJcZjEzYyJ9Lmljb24tYW5jaG9yOmJlZm9yZXtjb250ZW50OiJcZjEzZCJ9Lmljb24tdW5sb2NrLWFsdDpiZWZvcmV7Y29udGVudDoiXGYxM2UifS5pY29uLWJ1bGxzZXllOmJlZm9yZXtjb250ZW50OiJcZjE0MCJ9Lmljb24tZWxsaXBzaXMtaG9yaXpvbnRhbDpiZWZvcmV7Y29udGVudDoiXGYxNDEifS5pY29uLWVsbGlwc2lzLXZlcnRpY2FsOmJlZm9yZXtjb250ZW50OiJcZjE0MiJ9Lmljb24tcnNzLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMTQzIn0uaWNvbi1wbGF5LXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMTQ0In0uaWNvbi10aWNrZXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTQ1In0uaWNvbi1taW51cy1zaWduLWFsdDpiZWZvcmV7Y29udGVudDoiXGYxNDYifS5pY29uLWNoZWNrLW1pbnVzOmJlZm9yZXtjb250ZW50OiJcZjE0NyJ9Lmljb24tbGV2ZWwtdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMTQ4In0uaWNvbi1sZXZlbC1kb3duOmJlZm9yZXtjb250ZW50OiJcZjE0OSJ9Lmljb24tY2hlY2stc2lnbjpiZWZvcmV7Y29udGVudDoiXGYxNGEifS5pY29uLWVkaXQtc2lnbjpiZWZvcmV7Y29udGVudDoiXGYxNGIifS5pY29uLWV4dGVybmFsLWxpbmstc2lnbjpiZWZvcmV7Y29udGVudDoiXGYxNGMifS5pY29uLXNoYXJlLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMTRkIn0="}},"time_used":38,"timings":{"blocked":-1,"dns":2,"connect":10,"send":0,"wait":25,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"detran-go-emissao-gov.site/dashboard/javascripts/modernizr.js","fqdn":"detran-go-emissao-gov.site","domain":"detran-go-emissao-gov.site","tld":"site"},"ip":{"addr":"172.67.152.179","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://detran-go-emissao-gov.site/dashboard/","date":"2026-07-27T14:06:09.569Z","timestamp":1785161169569,"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":"detran-go-emissao-gov.site","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Sun, 26 Jul 2026 14:27:30 GMT","end":"Sat, 24 Oct 2026 15:26:12 GMT"},"fingerprint":{"sha1":"33:BD:B0:00:D4:4F:09:5C:59:02:3B:55:1C:94:52:31:7F:BD:F6:AE","sha256":"F4:70:53:78:85:5E:A4:5C:81:1D:85:52:5D:63:D9:95:2D:9A:2E:D2:93:00:F8:AC:EA:E4:AC:0B:59:BC:2A:A0"}}},"request":{"raw":"GET /dashboard/javascripts/modernizr.js HTTP/1.1\r\nHost: detran-go-emissao-gov.site\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://detran-go-emissao-gov.site/dashboard/\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: no-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\ndate: Mon, 27 Jul 2026 14:06:10 GMT\r\nserver: cloudflare\r\nlast-modified: Tue, 22 Nov 2022 15:37:08 GMT\r\nreport-to: {\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=x9jmFBRvxLbm19OiCfVojCXmQ6%2F3JhUkZ2J9J4YLhFs7X6Se7S1lPHVMHUvRPBFuv%2BrvgzMJw71DBPJIz69GEGDPOX8n72xvU%2BH0VrCG%2FLzG1TPWSztBZeC4vnu0D9%2F7miOiZA%2BtdpOPVpaAfg%3D%3D\"}]}\r\nnel: {\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}\r\npriority: u=2,i=?0\r\ncontent-encoding: zstd\r\netag: W/\"c8a5-5ee10f1d97100\"\r\ncontent-type: text/javascript\r\ncache-control: max-age=14400\r\ncf-cache-status: REVALIDATED\r\ncf-ray: a21c33fdddc77131-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":51365,"size_decoded":17626,"mime_type":"text/javascript","magic":"JavaScript source, ASCII text","md5":"4fae2a90728c528aa148c31466b7ed39","sha1":"6bfc3ff0b0c367ea21003e42175486ae0b2b2bfc","sha256":"654222debe8018b12f1993ceddff30dc163a7d5008d79869c399d6d167321f97","sha512":"1b385498219ad468a9eddb3d4d0747a91ca9f867c75f10715bfaa4be369781b6788489a71350d9509af7132aac92a2b411e817e7928c782fa41e77debc0ee277","ssdeep":"1536:FRCJJ/KpVsnpxvXmET56JYFE7qbe/7Y8fjWWy+4GrkfwuXxJ44ipW/VPRLq277ts:FS/FpzarzCT71Pts","tlshash":"4333a4097ce771264a13f0aa67ef7445fa26c42b2315d440f89e436c2f91f2442bdeea","first_seen":"2023-03-07T12:03:14Z","last_seen":"2026-07-27T14:06:48.022397Z","times_seen":778,"resource_available":true,"data":"LyohCiAqIE1vZGVybml6ciB2Mi43LjEKICogd3d3Lm1vZGVybml6ci5jb20KICoKICogQ29weXJpZ2h0IChjKSBGYXJ1ayBBdGVzLCBQYXVsIElyaXNoLCBBbGV4IFNleHRvbgogKiBBdmFpbGFibGUgdW5kZXIgdGhlIEJTRCBhbmQgTUlUIGxpY2Vuc2VzOiB3d3cubW9kZXJuaXpyLmNvbS9saWNlbnNlLwogKi8KCi8qCiAqIE1vZGVybml6ciB0ZXN0cyB3aGljaCBuYXRpdmUgQ1NTMyBhbmQgSFRNTDUgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBpbgogKiB0aGUgY3VycmVudCBVQSBhbmQgbWFrZXMgdGhlIHJlc3VsdHMgYXZhaWxhYmxlIHRvIHlvdSBpbiB0d28gd2F5czoKICogYXMgcHJvcGVydGllcyBvbiBhIGdsb2JhbCBNb2Rlcm5penIgb2JqZWN0LCBhbmQgYXMgY2xhc3NlcyBvbiB0aGUKICogPGh0bWw+IGVsZW1lbnQuIFRoaXMgaW5mb3JtYXRpb24gYWxsb3dzIHlvdSB0byBwcm9ncmVzc2l2ZWx5IGVuaGFuY2UKICogeW91ciBwYWdlcyB3aXRoIGEgZ3JhbnVsYXIgbGV2ZWwgb2YgY29udHJvbCBvdmVyIHRoZSBleHBlcmllbmNlLgogKgogKiBNb2Rlcm5penIgaGFzIGFuIG9wdGlvbmFsIChub3QgaW5jbHVkZWQpIGNvbmRpdGlvbmFsIHJlc291cmNlIGxvYWRlcgogKiBjYWxsZWQgTW9kZXJuaXpyLmxvYWQoKSwgYmFzZWQgb24gWWVwbm9wZS5qcyAoeWVwbm9wZWpzLmNvbSkuCiAqIFRvIGdldCBhIGJ1aWxkIHRoYXQgaW5jbHVkZXMgTW9kZXJuaXpyLmxvYWQoKSwgYXMgd2VsbCBhcyBjaG9vc2luZwogKiB3aGljaCB0ZXN0cyB0byBpbmNsdWRlLCBnbyB0byB3d3cubW9kZXJuaXpyLmNvbS9kb3dubG9hZC8KICoKICogQXV0aG9ycyAgICAgICAgRmFydWsgQXRlcywgUGF1bCBJcmlzaCwgQWxleCBTZXh0b24KICogQ29udHJpYnV0b3JzICAgUnlhbiBTZWRkb24sIEJlbiBBbG1hbgogKi8KCgp3aW5kb3cuTW9kZXJuaXpyID0gKGZ1bmN0aW9uKCB3aW5kb3csIGRvY3VtZW50LCB1bmRlZmluZWQgKSB7CgogICAgdmFyIHZlcnNpb24gPSAnMi43LjEnLAoKICAgIE1vZGVybml6ciA9IHt9LAoKICAgIC8qPj5jc3NjbGFzc2VzKi8KICAgIC8vIG9wdGlvbiBmb3IgZW5hYmxpbmcgdGhlIEhUTUwgY2xhc3NlcyB0byBiZSBhZGRlZAogICAgZW5hYmxlQ2xhc3NlcyA9IHRydWUsCiAgICAvKj4+Y3NzY2xhc3NlcyovCgogICAgZG9jRWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwKCiAgICAvKioKICAgICAqIENyZWF0ZSBvdXIgIm1vZGVybml6ciIgZWxlbWVudCB0aGF0IHdlIGRvIG1vc3QgZmVhdHVyZSB0ZXN0cyBvbi4KICAgICAqLwogICAgbW9kID0gJ21vZGVybml6cicsCiAgICBtb2RFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChtb2QpLAogICAgbVN0eWxlID0gbW9kRWxlbS5zdHlsZSwKCiAgICAvKioKICAgICAqIENyZWF0ZSB0aGUgaW5wdXQgZWxlbWVudCBmb3IgdmFyaW91cyBXZWIgRm9ybXMgZmVhdHVyZSB0ZXN0cy4KICAgICAqLwogICAgaW5wdXRFbGVtIC8qPj5pbnB1dGVsZW0qLyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykgLyo+PmlucHV0ZWxlbSovICwKCiAgICAvKj4+c21pbGUqLwogICAgc21pbGUgPSAnOiknLAogICAgLyo+PnNtaWxlKi8KCiAgICB0b1N0cmluZyA9IHt9LnRvU3RyaW5nLAoKICAgIC8vIFRPRE8gOjogbWFrZSB0aGUgcHJlZml4ZXMgbW9yZSBncmFudWxhcgogICAgLyo+PnByZWZpeGVzKi8KICAgIC8vIExpc3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIHNldCBmb3IgY3NzIHRlc3RzLiBTZWUgdGlja2V0ICMyMQogICAgcHJlZml4ZXMgPSAnIC13ZWJraXQtIC1tb3otIC1vLSAtbXMtICcuc3BsaXQoJyAnKSwKICAgIC8qPj5wcmVmaXhlcyovCgogICAgLyo+PmRvbXByZWZpeGVzKi8KICAgIC8vIEZvbGxvd2luZyBzcGVjIGlzIHRvIGV4cG9zZSB2ZW5kb3Itc3BlY2lmaWMgc3R5bGUgcHJvcGVydGllcyBhczoKICAgIC8vICAgZWxlbS5zdHlsZS5XZWJraXRCb3JkZXJSYWRpdXMKICAgIC8vIGFuZCB0aGUgZm9sbG93aW5nIHdvdWxkIGJlIGluY29ycmVjdDoKICAgIC8vICAgZWxlbS5zdHlsZS53ZWJraXRCb3JkZXJSYWRpdXMKCiAgICAvLyBXZWJraXQgZ2hvc3RzIHRoZWlyIHByb3BlcnRpZXMgaW4gbG93ZXJjYXNlIGJ1dCBPcGVyYSAmIE1veiBkbyBub3QuCiAgICAvLyBNaWNyb3NvZnQgdXNlcyBhIGxvd2VyY2FzZSBgbXNgIGluc3RlYWQgb2YgdGhlIGNvcnJlY3QgYE1zYCBpbiBJRTgrCiAgICAvLyAgIGVyaWsuZWFlLm5ldC9hcmNoaXZlcy8yMDA4LzAzLzEwLzIxLjQ4LjEwLwoKICAgIC8vIE1vcmUgaGVyZTogZ2l0aHViLmNvbS9Nb2Rlcm5penIvTW9kZXJuaXpyL2lzc3Vlcy9pc3N1ZS8yMQogICAgb21QcmVmaXhlcyA9ICdXZWJraXQgTW96IE8gbXMnLAoKICAgIGNzc29tUHJlZml4ZXMgPSBvbVByZWZpeGVzLnNwbGl0KCcgJyksCgogICAgZG9tUHJlZml4ZXMgPSBvbVByZWZpeGVzLnRvTG93ZXJDYXNlKCkuc3BsaXQoJyAnKSwKICAgIC8qPj5kb21wcmVmaXhlcyovCgogICAgLyo+Pm5zKi8KICAgIG5zID0geydzdmcnOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnfSwKICAgIC8qPj5ucyovCgogICAgdGVzdHMgPSB7fSwKICAgIGlucHV0cyA9IHt9LAogICAgYXR0cnMgPSB7fSwKCiAgICBjbGFzc2VzID0gW10sCgogICAgc2xpY2UgPSBjbGFzc2VzLnNsaWNlLAoKICAgIGZlYXR1cmVOYW1lLCAvLyB1c2VkIGluIHRlc3RpbmcgbG9vcAoKCiAgICAvKj4+dGVzdHN0eWxlcyovCiAgICAvLyBJbmplY3QgZWxlbWVudCB3aXRoIHN0eWxlIGVsZW1lbnQgYW5kIHNvbWUgQ1NTIHJ1bGVzCiAgICBpbmplY3RFbGVtZW50V2l0aFN0eWxlcyA9IGZ1bmN0aW9uKCBydWxlLCBjYWxsYmFjaywgbm9kZXMsIHRlc3RuYW1lcyApIHsKCiAgICAgIHZhciBzdHlsZSwgcmV0LCBub2RlLCBkb2NPdmVyZmxvdywKICAgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLAogICAgICAgICAgLy8gQWZ0ZXIgcGFnZSBsb2FkIGluamVjdGluZyBhIGZha2UgYm9keSBkb2Vzbid0IHdvcmsgc28gY2hlY2sgaWYgYm9keSBleGlzdHMKICAgICAgICAgIGJvZHkgPSBkb2N1bWVudC5ib2R5LAogICAgICAgICAgLy8gSUU2IGFuZCA3IHdvbid0IHJldHVybiBvZmZzZXRXaWR0aCBvciBvZmZzZXRIZWlnaHQgdW5sZXNzIGl0J3MgaW4gdGhlIGJvZHkgZWxlbWVudCwgc28gd2UgZmFrZSBpdC4KICAgICAgICAgIGZha2VCb2R5ID0gYm9keSB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdib2R5Jyk7CgogICAgICBpZiAoIHBhcnNlSW50KG5vZGVzLCAxMCkgKSB7CiAgICAgICAgICAvLyBJbiBvcmRlciBub3QgdG8gZ2l2ZSBmYWxzZSBwb3NpdGl2ZXMgd2UgY3JlYXRlIGEgbm9kZSBmb3IgZWFjaCB0ZXN0CiAgICAgICAgICAvLyBUaGlzIGFsc28gYWxsb3dzIHRoZSBtZXRob2QgdG8gc2NhbGUgZm9yIHVuc3BlY2lmaWVkIHVzZXMKICAgICAgICAgIHdoaWxlICggbm9kZXMtLSApIHsKICAgICAgICAgICAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICAgICAgbm9kZS5pZCA9IHRlc3RuYW1lcyA/IHRlc3RuYW1lc1tub2Rlc10gOiBtb2QgKyAobm9kZXMgKyAxKTsKICAgICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQobm9kZSk7CiAgICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIDxzdHlsZT4gZWxlbWVudHMgaW4gSUU2LTkgYXJlIGNvbnNpZGVyZWQgJ05vU2NvcGUnIGVsZW1lbnRzIGFuZCB0aGVyZWZvcmUgd2lsbCBiZSByZW1vdmVkCiAgICAgIC8vIHdoZW4gaW5qZWN0ZWQgd2l0aCBpbm5lckhUTUwuIFRvIGdldCBhcm91bmQgdGhpcyB5b3UgbmVlZCB0byBwcmVwZW5kIHRoZSAnTm9TY29wZScgZWxlbWVudAogICAgICAvLyB3aXRoIGEgJ3Njb3BlZCcgZWxlbWVudCwgaW4gb3VyIGNhc2UgdGhlIHNvZnQtaHlwaGVuIGVudGl0eSBhcyBpdCB3b24ndCBtZXNzIHdpdGggb3VyIG1lYXN1cmVtZW50cy4KICAgICAgLy8gbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzM4OTclMjhWUy44NSUyOS5hc3B4CiAgICAgIC8vIERvY3VtZW50cyBzZXJ2ZWQgYXMgeG1sIHdpbGwgdGhyb3cgaWYgdXNpbmcgJnNoeTsgc28gdXNlIHhtbCBmcmllbmRseSBlbmNvZGVkIHZlcnNpb24uIFNlZSBpc3N1ZSAjMjc3CiAgICAgIHN0eWxlID0gWycmIzE3MzsnLCc8c3R5bGUgaWQ9InMnLCBtb2QsICciPicsIHJ1bGUsICc8L3N0eWxlPiddLmpvaW4oJycpOwogICAgICBkaXYuaWQgPSBtb2Q7CiAgICAgIC8vIElFNiB3aWxsIGZhbHNlIHBvc2l0aXZlIG9uIHNvbWUgdGVzdHMgZHVlIHRvIHRoZSBzdHlsZSBlbGVtZW50IGluc2lkZSB0aGUgdGVzdCBkaXYgc29tZWhvdyBpbnRlcmZlcmluZyBvZmZzZXRIZWlnaHQsIHNvIGluc2VydCBpdCBpbnRvIGJvZHkgb3IgZmFrZWJvZHkuCiAgICAgIC8vIE9wZXJhIHdpbGwgYWN0IGFsbCBxdWlya3kgd2hlbiBpbmplY3RpbmcgZWxlbWVudHMgaW4gZG9jdW1lbnRFbGVtZW50IHdoZW4gcGFnZSBpcyBzZXJ2ZWQgYXMgeG1sLCBuZWVkcyBmYWtlYm9keSB0b28uICMyNzAKICAgICAgKGJvZHkgPyBkaXYgOiBmYWtlQm9keSkuaW5uZXJIVE1MICs9IHN0eWxlOwogICAgICBmYWtlQm9keS5hcHBlbmRDaGlsZChkaXYpOwogICAgICBpZiAoICFib2R5ICkgewogICAgICAgICAgLy9hdm9pZCBjcmFzaGluZyBJRTgsIGlmIGJhY2tncm91bmQgaW1hZ2UgaXMgdXNlZAogICAgICAgICAgZmFrZUJvZHkuc3R5bGUuYmFja2dyb3VuZCA9ICcnOwogICAgICAgICAgLy9TYWZhcmkgNS4xMy81LjEuNCBPU1ggc3RvcHMgbG9hZGluZyBpZiA6Oi13ZWJraXQtc2Nyb2xsYmFyIGlzIHVzZWQgYW5kIHNjcm9sbGJhcnMgYXJlIHZpc2libGUKICAgICAgICAgIGZha2VCb2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7CiAgICAgICAgICBkb2NPdmVyZmxvdyA9IGRvY0VsZW1lbnQuc3R5bGUub3ZlcmZsb3c7CiAgICAgICAgICBkb2NFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7CiAgICAgICAgICBkb2NFbGVtZW50LmFwcGVuZENoaWxkKGZha2VCb2R5KTsKICAgICAgfQoKICAgICAgcmV0ID0gY2FsbGJhY2soZGl2LCBydWxlKTsKICAgICAgLy8gSWYgdGhpcyBpcyBkb25lIGFmdGVyIHBhZ2UgbG9hZCB3ZSBkb24ndCB3YW50IHRvIHJlbW92ZSB0aGUgYm9keSBzbyBjaGVjayBpZiBib2R5IGV4aXN0cwogICAgICBpZiAoICFib2R5ICkgewogICAgICAgICAgZmFrZUJvZHkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmYWtlQm9keSk7CiAgICAgICAgICBkb2NFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gZG9jT3ZlcmZsb3c7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkaXYpOwogICAgICB9CgogICAgICByZXR1cm4gISFyZXQ7CgogICAgfSwKICAgIC8qPj50ZXN0c3R5bGVzKi8KCiAgICAvKj4+bXEqLwogICAgLy8gYWRhcHRlZCBmcm9tIG1hdGNoTWVkaWEgcG9seWZpbGwKICAgIC8vIGJ5IFNjb3R0IEplaGwgYW5kIFBhdWwgSXJpc2gKICAgIC8vIGdpc3QuZ2l0aHViLmNvbS83ODY3NjgKICAgIHRlc3RNZWRpYVF1ZXJ5ID0gZnVuY3Rpb24oIG1xICkgewoKICAgICAgdmFyIG1hdGNoTWVkaWEgPSB3aW5kb3cubWF0Y2hNZWRpYSB8fCB3aW5kb3cubXNNYXRjaE1lZGlhOwogICAgICBpZiAoIG1hdGNoTWVkaWEgKSB7CiAgICAgICAgcmV0dXJuIG1hdGNoTWVkaWEobXEpLm1hdGNoZXM7CiAgICAgIH0KCiAgICAgIHZhciBib29sOwoKICAgICAgaW5qZWN0RWxlbWVudFdpdGhTdHlsZXMoJ0BtZWRpYSAnICsgbXEgKyAnIHsgIycgKyBtb2QgKyAnIHsgcG9zaXRpb246IGFic29sdXRlOyB9IH0nLCBmdW5jdGlvbiggbm9kZSApIHsKICAgICAgICBib29sID0gKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlID8KICAgICAgICAgICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBudWxsKSA6CiAgICAgICAgICAgICAgICAgIG5vZGUuY3VycmVudFN0eWxlKVsncG9zaXRpb24nXSA9PSAnYWJzb2x1dGUnOwogICAgICB9KTsKCiAgICAgIHJldHVybiBib29sOwoKICAgICB9LAogICAgIC8qPj5tcSovCgoKICAgIC8qPj5oYXNldmVudCovCiAgICAvLwogICAgLy8gaXNFdmVudFN1cHBvcnRlZCBkZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gZWxlbWVudCBzdXBwb3J0cyB0aGUgZ2l2ZW4gZXZlbnQKICAgIC8vIGthbmdheC5naXRodWIuY29tL2lzZXZlbnRzdXBwb3J0ZWQvCiAgICAvLwogICAgLy8gVGhlIGZvbGxvd2luZyByZXN1bHRzIGFyZSBrbm93biBpbmNvcnJlY3RzOgogICAgLy8gICBNb2Rlcm5penIuaGFzRXZlbnQoIndlYmtpdFRyYW5zaXRpb25FbmQiLCBlbGVtKSAvLyBmYWxzZSBuZWdhdGl2ZQogICAgLy8gICBNb2Rlcm5penIuaGFzRXZlbnQoInRleHRJbnB1dCIpIC8vIGluIFdlYmtpdC4gZ2l0aHViLmNvbS9Nb2Rlcm5penIvTW9kZXJuaXpyL2lzc3Vlcy8zMzMKICAgIC8vICAgLi4uCiAgICBpc0V2ZW50U3VwcG9ydGVkID0gKGZ1bmN0aW9uKCkgewoKICAgICAgdmFyIFRBR05BTUVTID0gewogICAgICAgICdzZWxlY3QnOiAnaW5wdXQnLCAnY2hhbmdlJzogJ2lucHV0JywKICAgICAgICAnc3VibWl0JzogJ2Zvcm0nLCAncmVzZXQnOiAnZm9ybScsCiAgICAgICAgJ2Vycm9yJzogJ2ltZycsICdsb2FkJzogJ2ltZycsICdhYm9ydCc6ICdpbWcnCiAgICAgIH07CgogICAgICBmdW5jdGlvbiBpc0V2ZW50U3VwcG9ydGVkKCBldmVudE5hbWUsIGVsZW1lbnQgKSB7CgogICAgICAgIGVsZW1lbnQgPSBlbGVtZW50IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoVEFHTkFNRVNbZXZlbnROYW1lXSB8fCAnZGl2Jyk7CiAgICAgICAgZXZlbnROYW1lID0gJ29uJyArIGV2ZW50TmFtZTsKCiAgICAgICAgLy8gV2hlbiB1c2luZyBgc2V0QXR0cmlidXRlYCwgSUUgc2tpcHMgInVubG9hZCIsIFdlYktpdCBza2lwcyAidW5sb2FkIiBhbmQgInJlc2l6ZSIsIHdoZXJlYXMgYGluYCAiY2F0Y2hlcyIgdGhvc2UKICAgICAgICB2YXIgaXNTdXBwb3J0ZWQgPSBldmVudE5hbWUgaW4gZWxlbWVudDsKCiAgICAgICAgaWYgKCAhaXNTdXBwb3J0ZWQgKSB7CiAgICAgICAgICAvLyBJZiBpdCBoYXMgbm8gYHNldEF0dHJpYnV0ZWAgKGkuZS4gZG9lc24ndCBpbXBsZW1lbnQgTm9kZSBpbnRlcmZhY2UpLCB0cnkgZ2VuZXJpYyBlbGVtZW50CiAgICAgICAgICBpZiAoICFlbGVtZW50LnNldEF0dHJpYnV0ZSApIHsKICAgICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCBlbGVtZW50LnNldEF0dHJpYnV0ZSAmJiBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSApIHsKICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoZXZlbnROYW1lLCAnJyk7CiAgICAgICAgICAgIGlzU3VwcG9ydGVkID0gaXMoZWxlbWVudFtldmVudE5hbWVdLCAnZnVuY3Rpb24nKTsKCiAgICAgICAgICAgIC8vIElmIHByb3BlcnR5IHdhcyBjcmVhdGVkLCAicmVtb3ZlIGl0IiAoYnkgc2V0dGluZyB2YWx1ZSB0byBgdW5kZWZpbmVkYCkKICAgICAgICAgICAgaWYgKCAhaXMoZWxlbWVudFtldmVudE5hbWVdLCAndW5kZWZpbmVkJykgKSB7CiAgICAgICAgICAgICAgZWxlbWVudFtldmVudE5hbWVdID0gdW5kZWZpbmVkOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGV2ZW50TmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBlbGVtZW50ID0gbnVsbDsKICAgICAgICByZXR1cm4gaXNTdXBwb3J0ZWQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGlzRXZlbnRTdXBwb3J0ZWQ7CiAgICB9KSgpLAogICAgLyo+Pmhhc2V2ZW50Ki8KCiAgICAvLyBUT0RPIDo6IEFkZCBmbGFnIGZvciBoYXNvd25wcm9wID8gZGlkbid0IGxhc3QgdGltZQoKICAgIC8vIGhhc093blByb3BlcnR5IHNoaW0gYnkga2FuZ2F4IG5lZWRlZCBmb3IgU2FmYXJpIDIuMCBzdXBwb3J0CiAgICBfaGFzT3duUHJvcGVydHkgPSAoe30pLmhhc093blByb3BlcnR5LCBoYXNPd25Qcm9wOwoKICAgIGlmICggIWlzKF9oYXNPd25Qcm9wZXJ0eSwgJ3VuZGVmaW5lZCcpICYmICFpcyhfaGFzT3duUHJvcGVydHkuY2FsbCwgJ3VuZGVmaW5lZCcpICkgewogICAgICBoYXNPd25Qcm9wID0gZnVuY3Rpb24gKG9iamVjdCwgcHJvcGVydHkpIHsKICAgICAgICByZXR1cm4gX2hhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7CiAgICAgIH07CiAgICB9CiAgICBlbHNlIHsKICAgICAgaGFzT3duUHJvcCA9IGZ1bmN0aW9uIChvYmplY3QsIHByb3BlcnR5KSB7IC8qIHllcywgdGhpcyBjYW4gZ2l2ZSBmYWxzZSBwb3NpdGl2ZXMvbmVnYXRpdmVzLCBidXQgbW9zdCBvZiB0aGUgdGltZSB3ZSBkb24ndCBjYXJlIGFib3V0IHRob3NlICovCiAgICAgICAgcmV0dXJuICgocHJvcGVydHkgaW4gb2JqZWN0KSAmJiBpcyhvYmplY3QuY29uc3RydWN0b3IucHJvdG90eXBlW3Byb3BlcnR5XSwgJ3VuZGVmaW5lZCcpKTsKICAgICAgfTsKICAgIH0KCiAgICAvLyBBZGFwdGVkIGZyb20gRVM1LXNoaW0gaHR0cHM6Ly9naXRodWIuY29tL2tyaXNrb3dhbC9lczUtc2hpbS9ibG9iL21hc3Rlci9lczUtc2hpbS5qcwogICAgLy8gZXM1LmdpdGh1Yi5jb20vI3gxNS4zLjQuNQoKICAgIGlmICghRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQpIHsKICAgICAgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHsKCiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXM7CgogICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSksCiAgICAgICAgICAgIGJvdW5kID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCkgewoKICAgICAgICAgICAgICB2YXIgRiA9IGZ1bmN0aW9uKCl7fTsKICAgICAgICAgICAgICBGLnByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7CiAgICAgICAgICAgICAgdmFyIHNlbGYgPSBuZXcgRigpOwoKICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFwcGx5KAogICAgICAgICAgICAgICAgICBzZWxmLAogICAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpCiAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICBpZiAoT2JqZWN0KHJlc3VsdCkgPT09IHJlc3VsdCkgewogICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gc2VsZjsKCiAgICAgICAgICAgIH0gZWxzZSB7CgogICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkoCiAgICAgICAgICAgICAgICAgIHRoYXQsCiAgICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkKICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgfQoKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gYm91bmQ7CiAgICAgIH07CiAgICB9CgogICAgLyoqCiAgICAgKiBzZXRDc3MgYXBwbGllcyBnaXZlbiBzdHlsZXMgdG8gdGhlIE1vZGVybml6ciBET00gbm9kZS4KICAgICAqLwogICAgZnVuY3Rpb24gc2V0Q3NzKCBzdHIgKSB7CiAgICAgICAgbVN0eWxlLmNzc1RleHQgPSBzdHI7CiAgICB9CgogICAgLyoqCiAgICAgKiBzZXRDc3NBbGwgZXh0cmFwb2xhdGVzIGFsbCB2ZW5kb3Itc3BlY2lmaWMgY3NzIHN0cmluZ3MuCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldENzc0FsbCggc3RyMSwgc3RyMiApIHsKICAgICAgICByZXR1cm4gc2V0Q3NzKHByZWZpeGVzLmpvaW4oc3RyMSArICc7JykgKyAoIHN0cjIgfHwgJycgKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBpcyByZXR1cm5zIGEgYm9vbGVhbiBmb3IgaWYgdHlwZW9mIG9iaiBpcyBleGFjdGx5IHR5cGUuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGlzKCBvYmosIHR5cGUgKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09IHR5cGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBjb250YWlucyByZXR1cm5zIGEgYm9vbGVhbiBmb3IgaWYgc3Vic3RyIGlzIGZvdW5kIHdpdGhpbiBzdHIuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNvbnRhaW5zKCBzdHIsIHN1YnN0ciApIHsKICAgICAgICByZXR1cm4gISF+KCcnICsgc3RyKS5pbmRleE9mKHN1YnN0cik7CiAgICB9CgogICAgLyo+PnRlc3Rwcm9wKi8KCiAgICAvLyB0ZXN0UHJvcHMgaXMgYSBnZW5lcmljIENTUyAvIERPTSBwcm9wZXJ0eSB0ZXN0LgoKICAgIC8vIEluIHRlc3Rpbmcgc3VwcG9ydCBmb3IgYSBnaXZlbiBDU1MgcHJvcGVydHksIGl0J3MgbGVnaXQgdG8gdGVzdDoKICAgIC8vICAgIGBlbGVtLnN0eWxlW3N0eWxlTmFtZV0gIT09IHVuZGVmaW5lZGAKICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBzdXBwb3J0ZWQgaXQgd2lsbCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLAogICAgLy8gaWYgdW5zdXBwb3J0ZWQgaXQgd2lsbCByZXR1cm4gdW5kZWZpbmVkLgoKICAgIC8vIFdlJ2xsIHRha2UgYWR2YW50YWdlIG9mIHRoaXMgcXVpY2sgdGVzdCBhbmQgc2tpcCBzZXR0aW5nIGEgc3R5bGUKICAgIC8vIG9uIG91ciBtb2Rlcm5penIgZWxlbWVudCwgYnV0IGluc3RlYWQganVzdCB0ZXN0aW5nIHVuZGVmaW5lZCB2cwogICAgLy8gZW1wdHkgc3RyaW5nLgoKICAgIC8vIEJlY2F1c2UgdGhlIHRlc3Rpbmcgb2YgdGhlIENTUyBwcm9wZXJ0eSBuYW1lcyAod2l0aCAiLSIsIGFzCiAgICAvLyBvcHBvc2VkIHRvIHRoZSBjYW1lbENhc2UgRE9NIHByb3BlcnRpZXMpIGlzIG5vbi1wb3J0YWJsZSBhbmQKICAgIC8vIG5vbi1zdGFuZGFyZCBidXQgd29ya3MgaW4gV2ViS2l0IGFuZCBJRSAoYnV0IG5vdCBHZWNrbyBvciBPcGVyYSksCiAgICAvLyB3ZSBleHBsaWNpdGx5IHJlamVjdCBwcm9wZXJ0aWVzIHdpdGggZGFzaGVzIHNvIHRoYXQgYXV0aG9ycwogICAgLy8gZGV2ZWxvcGluZyBpbiBXZWJLaXQgb3IgSUUgZmlyc3QgZG9uJ3QgZW5kIHVwIHdpdGgKICAgIC8vIGJyb3dzZXItc3BlY2lmaWMgY29udGVudCBieSBhY2NpZGVudC4KCiAgICBmdW5jdGlvbiB0ZXN0UHJvcHMoIHByb3BzLCBwcmVmaXhlZCApIHsKICAgICAgICBmb3IgKCB2YXIgaSBpbiBwcm9wcyApIHsKICAgICAgICAgICAgdmFyIHByb3AgPSBwcm9wc1tpXTsKICAgICAgICAgICAgaWYgKCAhY29udGFpbnMocHJvcCwgIi0iKSAmJiBtU3R5bGVbcHJvcF0gIT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgIHJldHVybiBwcmVmaXhlZCA9PSAncGZ4JyA/IHByb3AgOiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIC8qPj50ZXN0cHJvcCovCgogICAgLy8gVE9ETyA6OiBhZGQgdGVzdERPTVByb3BzCiAgICAvKioKICAgICAqIHRlc3RET01Qcm9wcyBpcyBhIGdlbmVyaWMgRE9NIHByb3BlcnR5IHRlc3Q7IGlmIGEgYnJvd3NlciBzdXBwb3J0cwogICAgICogICBhIGNlcnRhaW4gcHJvcGVydHksIGl0IHdvbid0IHJldHVybiB1bmRlZmluZWQgZm9yIGl0LgogICAgICovCiAgICBmdW5jdGlvbiB0ZXN0RE9NUHJvcHMoIHByb3BzLCBvYmosIGVsZW0gKSB7CiAgICAgICAgZm9yICggdmFyIGkgaW4gcHJvcHMgKSB7CiAgICAgICAgICAgIHZhciBpdGVtID0gb2JqW3Byb3BzW2ldXTsKICAgICAgICAgICAgaWYgKCBpdGVtICE9PSB1bmRlZmluZWQpIHsKCiAgICAgICAgICAgICAgICAvLyByZXR1cm4gdGhlIHByb3BlcnR5IG5hbWUgYXMgYSBzdHJpbmcKICAgICAgICAgICAgICAgIGlmIChlbGVtID09PSBmYWxzZSkgcmV0dXJuIHByb3BzW2ldOwoKICAgICAgICAgICAgICAgIC8vIGxldCdzIGJpbmQgYSBmdW5jdGlvbgogICAgICAgICAgICAgICAgaWYgKGlzKGl0ZW0sICdmdW5jdGlvbicpKXsKICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBhdXRvYmluZCB1bmxlc3Mgb3ZlcnJpZGUKICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uYmluZChlbGVtIHx8IG9iaik7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gcmV0dXJuIHRoZSB1bmJvdW5kIGZ1bmN0aW9uIG9yIG9iaiBvciB2YWx1ZQogICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qPj50ZXN0YWxscHJvcHMqLwogICAgLyoqCiAgICAgKiB0ZXN0UHJvcHNBbGwgdGVzdHMgYSBsaXN0IG9mIERPTSBwcm9wZXJ0aWVzIHdlIHdhbnQgdG8gY2hlY2sgYWdhaW5zdC4KICAgICAqICAgV2Ugc3BlY2lmeSBsaXRlcmFsbHkgQUxMIHBvc3NpYmxlIChrbm93biBhbmQvb3IgbGlrZWx5KSBwcm9wZXJ0aWVzIG9uCiAgICAgKiAgIHRoZSBlbGVtZW50IGluY2x1ZGluZyB0aGUgbm9uLXZlbmRvciBwcmVmaXhlZCBvbmUsIGZvciBmb3J3YXJkLQogICAgICogICBjb21wYXRpYmlsaXR5LgogICAgICovCiAgICBmdW5jdGlvbiB0ZXN0UHJvcHNBbGwoIHByb3AsIHByZWZpeGVkLCBlbGVtICkgewoKICAgICAgICB2YXIgdWNQcm9wICA9IHByb3AuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwcm9wLnNsaWNlKDEpLAogICAgICAgICAgICBwcm9wcyAgID0gKHByb3AgKyAnICcgKyBjc3NvbVByZWZpeGVzLmpvaW4odWNQcm9wICsgJyAnKSArIHVjUHJvcCkuc3BsaXQoJyAnKTsKCiAgICAgICAgLy8gZGlkIHRoZXkgY2FsbCAucHJlZml4ZWQoJ2JveFNpemluZycpIG9yIGFyZSB3ZSBqdXN0IHRlc3RpbmcgYSBwcm9wPwogICAgICAgIGlmKGlzKHByZWZpeGVkLCAic3RyaW5nIikgfHwgaXMocHJlZml4ZWQsICJ1bmRlZmluZWQiKSkgewogICAgICAgICAgcmV0dXJuIHRlc3RQcm9wcyhwcm9wcywgcHJlZml4ZWQpOwoKICAgICAgICAvLyBvdGhlcndpc2UsIHRoZXkgY2FsbGVkIC5wcmVmaXhlZCgncmVxdWVzdEFuaW1hdGlvbkZyYW1lJywgd2luZG93WywgZWxlbV0pCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHByb3BzID0gKHByb3AgKyAnICcgKyAoZG9tUHJlZml4ZXMpLmpvaW4odWNQcm9wICsgJyAnKSArIHVjUHJvcCkuc3BsaXQoJyAnKTsKICAgICAgICAgIHJldHVybiB0ZXN0RE9NUHJvcHMocHJvcHMsIHByZWZpeGVkLCBlbGVtKTsKICAgICAgICB9CiAgICB9CiAgICAvKj4+dGVzdGFsbHByb3BzKi8KCgogICAgLyoqCiAgICAgKiBUZXN0cwogICAgICogLS0tLS0KICAgICAqLwoKICAgIC8vIFRoZSAqbmV3KiBmbGV4Ym94CiAgICAvLyBkZXYudzMub3JnL2Nzc3dnL2NzczMtZmxleGJveAoKICAgIHRlc3RzWydmbGV4Ym94J10gPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRlc3RQcm9wc0FsbCgnZmxleFdyYXAnKTsKICAgIH07CgogICAgLy8gVGhlICpvbGQqIGZsZXhib3gKICAgIC8vIHd3dy53My5vcmcvVFIvMjAwOS9XRC1jc3MzLWZsZXhib3gtMjAwOTA3MjMvCgogICAgdGVzdHNbJ2ZsZXhib3hsZWdhY3knXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0ZXN0UHJvcHNBbGwoJ2JveERpcmVjdGlvbicpOwogICAgfTsKCiAgICAvLyBPbiB0aGUgUzYwIGFuZCBCQiBTdG9ybSwgZ2V0Q29udGV4dCBleGlzdHMsIGJ1dCBhbHdheXMgcmV0dXJucyB1bmRlZmluZWQKICAgIC8vIHNvIHdlIGFjdHVhbGx5IGhhdmUgdG8gY2FsbCBnZXRDb250ZXh0KCkgdG8gdmVyaWZ5CiAgICAvLyBnaXRodWIuY29tL01vZGVybml6ci9Nb2Rlcm5penIvaXNzdWVzL2lzc3VlLzk3LwoKICAgIHRlc3RzWydjYW52YXMnXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7CiAgICAgICAgcmV0dXJuICEhKGVsZW0uZ2V0Q29udGV4dCAmJiBlbGVtLmdldENvbnRleHQoJzJkJykpOwogICAgfTsKCiAgICB0ZXN0c1snY2FudmFzdGV4dCddID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICEhKE1vZGVybml6clsnY2FudmFzJ10gJiYgaXMoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykuZ2V0Q29udGV4dCgnMmQnKS5maWxsVGV4dCwgJ2Z1bmN0aW9uJykpOwogICAgfTsKCiAgICAvLyB3ZWJrLml0LzcwMTE3IGlzIHRyYWNraW5nIGEgbGVnaXQgV2ViR0wgZmVhdHVyZSBkZXRlY3QgcHJvcG9zYWwKCiAgICAvLyBXZSBkbyBhIHNvZnQgZGV0ZWN0IHdoaWNoIG1heSBmYWxzZSBwb3NpdGl2ZSBpbiBvcmRlciB0byBhdm9pZAogICAgLy8gYW4gZXhwZW5zaXZlIGNvbnRleHQgY3JlYXRpb246IGJ1Z3ppbC5sYS83MzI0NDEKCiAgICB0ZXN0c1snd2ViZ2wnXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAhIXdpbmRvdy5XZWJHTFJlbmRlcmluZ0NvbnRleHQ7CiAgICB9OwoKICAgIC8qCiAgICAgKiBUaGUgTW9kZXJuaXpyLnRvdWNoIHRlc3Qgb25seSBpbmRpY2F0ZXMgaWYgdGhlIGJyb3dzZXIgc3VwcG9ydHMKICAgICAqICAgIHRvdWNoIGV2ZW50cywgd2hpY2ggZG9lcyBub3QgbmVjZXNzYXJpbHkgcmVmbGVjdCBhIHRvdWNoc2NyZWVuCiAgICAgKiAgICBkZXZpY2UsIGFzIGV2aWRlbmNlZCBieSB0YWJsZXRzIHJ1bm5pbmcgV2luZG93cyA3IG9yLCBhbGFzLAogICAgICogICAgdGhlIFBhbG0gUHJlIC8gV2ViT1MgKHRvdWNoKSBwaG9uZXMuCiAgICAgKgogICAgICogQWRkaXRpb25hbGx5LCBDaHJvbWUgKGRlc2t0b3ApIHVzZWQgdG8gbGllIGFib3V0IGl0cyBzdXBwb3J0IG9uIHRoaXMsCiAgICAgKiAgICBidXQgdGhhdCBoYXMgc2luY2UgYmVlbiByZWN0aWZpZWQ6IGNyYnVnLmNvbS8zNjQxNQogICAgICoKICAgICAqIFdlIGFsc28gdGVzdCBmb3IgRmlyZWZveCA0IE11bHRpdG91Y2ggU3VwcG9ydC4KICAgICAqCiAgICAgKiBGb3IgbW9yZSBpbmZvLCBzZWU6IG1vZGVybml6ci5naXRodWIuY29tL01vZGVybml6ci90b3VjaC5odG1sCiAgICAgKi8KCiAgICB0ZXN0c1sndG91Y2gnXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBib29sOwoKICAgICAgICBpZigoJ29udG91Y2hzdGFydCcgaW4gd2luZG93KSB8fCB3aW5kb3cuRG9jdW1lbnRUb3VjaCAmJiBkb2N1bWVudCBpbnN0YW5jZW9mIERvY3VtZW50VG91Y2gpIHsKICAgICAgICAgIGJvb2wgPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbmplY3RFbGVtZW50V2l0aFN0eWxlcyhbJ0BtZWRpYSAoJyxwcmVmaXhlcy5qb2luKCd0b3VjaC1lbmFibGVkKSwoJyksbW9kLCcpJywneyNtb2Rlcm5penJ7dG9wOjlweDtwb3NpdGlvbjphYnNvbHV0ZX19J10uam9pbignJyksIGZ1bmN0aW9uKCBub2RlICkgewogICAgICAgICAgICBib29sID0gbm9kZS5vZmZzZXRUb3AgPT09IDk7CiAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBib29sOwogICAgfTsKCgogICAgLy8gZ2VvbG9jYXRpb24gaXMgb2Z0ZW4gY29uc2lkZXJlZCBhIHRyaXZpYWwgZmVhdHVyZSBkZXRlY3QuLi4KICAgIC8vIFR1cm5zIG91dCwgaXQncyBxdWl0ZSB0cmlja3kgdG8gZ2V0IHJpZ2h0OgogICAgLy8KICAgIC8vIFVzaW5nICEhbmF2aWdhdG9yLmdlb2xvY2F0aW9uIGRvZXMgdHdvIHRoaW5ncyB3ZSBkb24ndCB3YW50LiBJdDoKICAgIC8vICAgMS4gTGVha3MgbWVtb3J5IGluIElFOTogZ2l0aHViLmNvbS9Nb2Rlcm5penIvTW9kZXJuaXpyL2lzc3Vlcy81MTMKICAgIC8vICAgMi4gRGlzYWJsZXMgcGFnZSBjYWNoaW5nIGluIFdlYktpdDogd2Viay5pdC80Mzk1NgogICAgLy8KICAgIC8vIE1lYW53aGlsZSwgaW4gRmlyZWZveCA8IDgsIGFuIGFib3V0OmNvbmZpZyBzZXR0aW5nIGNvdWxkIGV4cG9zZQogICAgLy8gYSBmYWxzZSBwb3NpdGl2ZSB0aGF0IHdvdWxkIHRocm93IGFuIGV4Y2VwdGlvbjogYnVnemlsLmxhLzY4ODE1OAoKICAgIHRlc3RzWydnZW9sb2NhdGlvbiddID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICdnZW9sb2NhdGlvbicgaW4gbmF2aWdhdG9yOwogICAgfTsKCgogICAgdGVzdHNbJ3Bvc3RtZXNzYWdlJ10gPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuICEhd2luZG93LnBvc3RNZXNzYWdlOwogICAgfTsKCgogICAgLy8gQ2hyb21lIGluY29nbml0byBtb2RlIHVzZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIHdoZW4gdXNpbmcgb3BlbkRhdGFiYXNlCiAgICAvLyBJdCBkb2Vzbid0IGFueW1vcmUuCiAgICB0ZXN0c1snd2Vic3FsZGF0YWJhc2UnXSA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gISF3aW5kb3cub3BlbkRhdGFiYXNlOwogICAgfTsKCiAgICAvLyBWZW5kb3JzIGhhZCBpbmNvbnNpc3RlbnQgcHJlZml4aW5nIHdpdGggdGhlIGV4cGVyaW1lbnRhbCBJbmRleGVkIERCOgogICAgLy8gLSBXZWJraXQncyBpbXBsZW1lbnRhdGlvbiBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggd2Via2l0SW5kZXhlZERCCiAgICAvLyAtIEZpcmVmb3ggc2hpcHBlZCBtb3pfaW5kZXhlZERCIGJlZm9yZSBGRjRiOSwgYnV0IHNpbmNlIHRoZW4gaGFzIGJlZW4gbW96SW5kZXhlZERCCiAgICAvLyBGb3Igc3BlZWQsIHdlIGRvbid0IHRlc3QgdGhlIGxlZ2FjeSAoYW5kIGJldGEtb25seSkgaW5kZXhlZERCCiAgICB0ZXN0c1snaW5kZXhlZERCJ10gPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuICEhdGVzdFByb3BzQWxsKCJpbmRleGVkREIiLCB3aW5kb3cpOwogICAgfTsKCiAgICAvLyBkb2N1bWVudE1vZGUgbG9naWMgZnJvbSBZVUkgdG8gZmlsdGVyIG91dCBJRTggQ29tcGF0IE1vZGUKICAgIC8vICAgd2hpY2ggZmFsc2UgcG9zaXRpdmVzLgogICAgdGVzdHNbJ2hhc2hjaGFuZ2UnXSA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gaXNFdmVudFN1cHBvcnRlZCgnaGFzaGNoYW5nZScsIHdpbmRvdykgJiYgKGRvY3VtZW50LmRvY3VtZW50TW9kZSA9PT0gdW5kZWZpbmVkIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA+IDcpOwogICAgfTsKCiAgICAvLyBQZXIgMS42OgogICAgLy8gVGhpcyB1c2VkIHRvIGJlIE1vZGVybml6ci5oaXN0b3J5bWFuYWdlbWVudCBidXQgdGhlIGxvbmdlcgogICAgLy8gbmFtZSBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGEgc2hvcnRlciBhbmQgcHJvcGVydHktbWF0Y2hpbmcgb25lLgogICAgLy8gVGhlIG9sZCBBUEkgaXMgc3RpbGwgYXZhaWxhYmxlIGluIDEuNiwgYnV0IGFzIG9mIDIuMCB3aWxsIHRocm93IGEgd2FybmluZywKICAgIC8vIGFuZCBpbiB0aGUgZmlyc3QgcmVsZWFzZSB0aGVyZWFmdGVyIGRpc2FwcGVhciBlbnRpcmVseS4KICAgIHRlc3RzWydoaXN0b3J5J10gPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuICEhKHdpbmRvdy5oaXN0b3J5ICYmIGhpc3RvcnkucHVzaFN0YXRlKTsKICAgIH07CgogICAgdGVzdHNbJ2RyYWdhbmRkcm9wJ10gPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgcmV0dXJuICgnZHJhZ2dhYmxlJyBpbiBkaXYpIHx8ICgnb25kcmFnc3RhcnQnIGluIGRpdiAmJiAnb25kcm9wJyBpbiBkaXYpOwogICAgfTsKCiAgICAvLyBGRjMuNiB3YXMgRU9MJ2VkIG9uIDQvMjQvMTIsIGJ1dCB0aGUgRVNSIHZlcnNpb24gb2YgRkYxMAogICAgLy8gd2lsbCBiZSBzdXBwb3J0ZWQgdW50aWwgRkYxOSAoMi8xMi8xMyksIGF0IHdoaWNoIHRpbWUsIEVTUiBiZWNvbWVzIEZGMTcuCiAgICAvLyBGRjEwIHN0aWxsIHVzZXMgcHJlZml4ZXMsIHNvIGNoZWNrIGZvciBpdCB1bnRpbCB0aGVuLgogICAgLy8gZm9yIG1vcmUgRVNSIGluZm8sIHNlZTogbW96aWxsYS5vcmcvZW4tVVMvZmlyZWZveC9vcmdhbml6YXRpb25zL2ZhcS8KICAgIHRlc3RzWyd3ZWJzb2NrZXRzJ10gPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gJ1dlYlNvY2tldCcgaW4gd2luZG93IHx8ICdNb3pXZWJTb2NrZXQnIGluIHdpbmRvdzsKICAgIH07CgoKICAgIC8vIGNzcy10cmlja3MuY29tL3JnYmEtYnJvd3Nlci1zdXBwb3J0LwogICAgdGVzdHNbJ3JnYmEnXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIC8vIFNldCBhbiByZ2JhKCkgY29sb3IgYW5kIGNoZWNrIHRoZSByZXR1cm5lZCB2YWx1ZQoKICAgICAgICBzZXRDc3MoJ2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMjU1LDE1MCwuNSknKTsKCiAgICAgICAgcmV0dXJuIGNvbnRhaW5zKG1TdHlsZS5iYWNrZ3JvdW5kQ29sb3IsICdyZ2JhJyk7CiAgICB9OwoKICAgIHRlc3RzWydoc2xhJ10gPSBmdW5jdGlvbigpIHsKICAgICAgICAvLyBTYW1lIGFzIHJnYmEoKSwgaW4gZmFjdCwgYnJvd3NlcnMgcmUtbWFwIGhzbGEoKSB0byByZ2JhKCkgaW50ZXJuYWxseSwKICAgICAgICAvLyAgIGV4Y2VwdCBJRTkgd2hvIHJldGFpbnMgaXQgYXMgaHNsYQoKICAgICAgICBzZXRDc3MoJ2JhY2tncm91bmQtY29sb3I6aHNsYSgxMjAsNDAlLDEwMCUsLjUpJyk7CgogICAgICAgIHJldHVybiBjb250YWlucyhtU3R5bGUuYmFja2dyb3VuZENvbG9yLCAncmdiYScpIHx8IGNvbnRhaW5zKG1TdHlsZS5iYWNrZ3JvdW5kQ29sb3IsICdoc2xhJyk7CiAgICB9OwoKICAgIHRlc3RzWydtdWx0aXBsZWJncyddID0gZnVuY3Rpb24oKSB7CiAgICAgICAgLy8gU2V0dGluZyBtdWx0aXBsZSBpbWFnZXMgQU5EIGEgY29sb3Igb24gdGhlIGJhY2tncm91bmQgc2hvcnRoYW5kIHByb3BlcnR5CiAgICAgICAgLy8gIGFuZCB0aGVuIHF1ZXJ5aW5nIHRoZSBzdHlsZS5iYWNrZ3JvdW5kIHByb3BlcnR5IHZhbHVlIGZvciB0aGUgbnVtYmVyIG9mCiAgICAgICAgLy8gIG9jY3VycmVuY2VzIG9mICJ1cmwoIiBpcyBhIHJlbGlhYmxlIG1ldGhvZCBmb3IgZGV0ZWN0aW5nIEFDVFVBTCBzdXBwb3J0IGZvciB0aGlzIQoKICAgICAgICBzZXRDc3MoJ2JhY2tncm91bmQ6dXJsKGh0dHBzOi8vKSx1cmwoaHR0cHM6Ly8pLHJlZCB1cmwoaHR0cHM6Ly8pJyk7CgogICAgICAgIC8vIElmIHRoZSBVQSBzdXBwb3J0cyBtdWx0aXBsZSBiYWNrZ3JvdW5kcywgdGhlcmUgc2hvdWxkIGJlIHRocmVlIG9jY3VycmVuY2VzCiAgICAgICAgLy8gICBvZiB0aGUgc3RyaW5nICJ1cmwoIiBpbiB0aGUgcmV0dXJuIHZhbHVlIGZvciBlbGVtU3R5bGUuYmFja2dyb3VuZAoKICAgICAgICByZXR1cm4gKC8odXJsXHMqXCguKj8pezN9LykudGVzdChtU3R5bGUuYmFja2dyb3VuZCk7CiAgICB9OwoKCgogICAgLy8gdGhpcyB3aWxsIGZhbHNlIHBvc2l0aXZlIGluIE9wZXJhIE1pbmkKICAgIC8vICAgZ2l0aHViLmNvbS9Nb2Rlcm5penIvTW9kZXJuaXpyL2lzc3Vlcy8zOTYKCiAgICB0ZXN0c1snYmFja2dyb3VuZHNpemUnXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0ZXN0UHJvcHNBbGwoJ2JhY2tncm91bmRTaXplJyk7CiAgICB9OwoKICAgIHRlc3RzWydib3JkZXJpbWFnZSddID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRlc3RQcm9wc0FsbCgnYm9yZGVySW1hZ2UnKTsKICAgIH07CgoKICAgIC8vIFN1cGVyIGNvbXByZWhlbnNpdmUgdGFibGUgYWJvdXQgYWxsIHRoZSB1bmlxdWUgaW1wbGVtZW50YXRpb25zIG9mCiAgICAvLyBib3JkZXItcmFkaXVzOiBtdWRkbGVkcmFtYmxpbmdzLmNvbS90YWJsZS1vZi1jc3MzLWJvcmRlci1yYWRpdXMtY29tcGxpYW5jZQoKICAgIHRlc3RzWydib3JkZXJyYWRpdXMnXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0ZXN0UHJvcHNBbGwoJ2JvcmRlclJhZGl1cycpOwogICAgfTsKCiAgICAvLyBXZWJPUyB1bmZvcnR1bmF0ZWx5IGZhbHNlIHBvc2l0aXZlcyBvbiB0aGlzIHRlc3QuCiAgICB0ZXN0c1snYm94c2hhZG93J10gPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGVzdFByb3BzQWxsKCdib3hTaGFkb3cnKTsKICAgIH07CgogICAgLy8gRkYzLjAgd2lsbCBmYWxzZSBwb3NpdGl2ZSBvbiB0aGlzIHRlc3QKICAgIHRlc3RzWyd0ZXh0c2hhZG93J10gPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGUudGV4dFNoYWRvdyA9PT0gJyc7CiAgICB9OwoKCiAgICB0ZXN0c1snb3BhY2l0eSddID0gZnVuY3Rpb24oKSB7CiAgICAgICAgLy8gQnJvd3NlcnMgdGhhdCBhY3R1YWxseSBoYXZlIENTUyBPcGFjaXR5IGltcGxlbWVudGVkIGhhdmUgZG9uZSBzbwogICAgICAgIC8vICBhY2NvcmRpbmcgdG8gc3BlYywgd2hpY2ggbWVhbnMgdGhlaXIgcmV0dXJuIHZhbHVlcyBhcmUgd2l0aGluIHRoZQogICAgICAgIC8vICByYW5nZSBvZiBbMC4wLDEuMF0gLSBpbmNsdWRpbmcgdGhlIGxlYWRpbmcgemVyby4KCiAgICAgICAgc2V0Q3NzQWxsKCdvcGFjaXR5Oi41NScpOwoKICAgICAgICAvLyBUaGUgbm9uLWxpdGVyYWwgLiBpbiB0aGlzIHJlZ2V4IGlzIGludGVudGlvbmFsOgogICAgICAgIC8vICAgR2VybWFuIENocm9tZSByZXR1cm5zIHRoaXMgdmFsdWUgYXMgMCw1NQogICAgICAgIC8vIGdpdGh1Yi5jb20vTW9kZXJuaXpyL01vZGVybml6ci9pc3N1ZXMvI2lzc3VlLzU5L2NvbW1lbnQvNTE2NjMyCiAgICAgICAgcmV0dXJuICgvXjAuNTUkLykudGVzdChtU3R5bGUub3BhY2l0eSk7CiAgICB9OwoKCiAgICAvLyBOb3RlLCBBbmRyb2lkIDwgNCB3aWxsIHBhc3MgdGhpcyB0ZXN0LCBidXQgY2FuIG9ubHkgYW5pbWF0ZQogICAgLy8gICBhIHNpbmdsZSBwcm9wZXJ0eSBhdCBhIHRpbWUKICAgIC8vICAgZGFuZWRlbi5tZS8yMDExLzEyL3B1dHRpbmctdXAtd2l0aC1hbmRyb2lkcy1idWxsc2hpdC8KICAgIHRlc3RzWydjc3NhbmltYXRpb25zJ10gPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGVzdFByb3BzQWxsKCdhbmltYXRpb25OYW1lJyk7CiAgICB9OwoKCiAgICB0ZXN0c1snY3NzY29sdW1ucyddID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRlc3RQcm9wc0FsbCgnY29sdW1uQ291bnQnKTsKICAgIH07CgoKICAgIHRlc3RzWydjc3NncmFkaWVudHMnXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIC8qKgogICAgICAgICAqIEZvciBDU1MgR3JhZGllbnRzIHN5bnRheCwgcGxlYXNlIHNlZToKICAgICAgICAgKiB3ZWJraXQub3JnL2Jsb2cvMTc1L2ludHJvZHVjaW5nLWNzcy1ncmFkaWVudHMvCiAgICAgICAgICogZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0NTUy8tbW96LWxpbmVhci1ncmFkaWVudAogICAgICAgICAqIGRldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9DU1MvLW1vei1yYWRpYWwtZ3JhZGllbnQKICAgICAgICAgKiBkZXYudzMub3JnL2Nzc3dnL2NzczMtaW1hZ2VzLyNncmFkaWVudHMtCiAgICAgICAgICovCgogICAgICAgIHZhciBzdHIxID0gJ2JhY2tncm91bmQtaW1hZ2U6JywKICAgICAgICAgICAgc3RyMiA9ICdncmFkaWVudChsaW5lYXIsbGVmdCB0b3AscmlnaHQgYm90dG9tLGZyb20oIzlmOSksdG8od2hpdGUpKTsnLAogICAgICAgICAgICBzdHIzID0gJ2xpbmVhci1ncmFkaWVudChsZWZ0IHRvcCwjOWY5LCB3aGl0ZSk7JzsKCiAgICAgICAgc2V0Q3NzKAogICAgICAgICAgICAgLy8gbGVnYWN5IHdlYmtpdCBzeW50YXggKEZJWE1FOiByZW1vdmUgd2hlbiBzeW50YXggbm90IGluIHVzZSBhbnltb3JlKQogICAgICAgICAgICAgIChzdHIxICsgJy13ZWJraXQtICcuc3BsaXQoJyAnKS5qb2luKHN0cjIgKyBzdHIxKSArCiAgICAgICAgICAgICAvLyBzdGFuZGFyZCBzeW50YXggICAgICAgICAgICAgLy8gdHJhaWxpbmcgJ2JhY2tncm91bmQtaW1hZ2U6JwogICAgICAgICAgICAgIHByZWZpeGVzLmpvaW4oc3RyMyArIHN0cjEpKS5zbGljZSgwLCAtc3RyMS5sZW5ndGgpCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIGNvbnRhaW5zKG1TdHlsZS5iYWNrZ3JvdW5kSW1hZ2UsICdncmFkaWVudCcpOwogICAgfTsKCgogICAgdGVzdHNbJ2Nzc3JlZmxlY3Rpb25zJ10gPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGVzdFByb3BzQWxsKCdib3hSZWZsZWN0Jyk7CiAgICB9OwoKCiAgICB0ZXN0c1snY3NzdHJhbnNmb3JtcyddID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICEhdGVzdFByb3BzQWxsKCd0cmFuc2Zvcm0nKTsKICAgIH07CgoKICAgIHRlc3RzWydjc3N0cmFuc2Zvcm1zM2QnXSA9IGZ1bmN0aW9uKCkgewoKICAgICAgICB2YXIgcmV0ID0gISF0ZXN0UHJvcHNBbGwoJ3BlcnNwZWN0aXZlJyk7CgogICAgICAgIC8vIFdlYmtpdCdzIDNEIHRyYW5zZm9ybXMgYXJlIHBhc3NlZCBvZmYgdG8gdGhlIGJyb3dzZXIncyBvd24gZ3JhcGhpY3MgcmVuZGVyZXIuCiAgICAgICAgLy8gICBJdCB3b3JrcyBmaW5lIGluIFNhZmFyaSBvbiBMZW9wYXJkIGFuZCBTbm93IExlb3BhcmQsIGJ1dCBub3QgaW4gQ2hyb21lIGluCiAgICAgICAgLy8gICBzb21lIGNvbmRpdGlvbnMuIEFzIGEgcmVzdWx0LCBXZWJraXQgdHlwaWNhbGx5IHJlY29nbml6ZXMgdGhlIHN5bnRheCBidXQKICAgICAgICAvLyAgIHdpbGwgc29tZXRpbWVzIHRocm93IGEgZmFsc2UgcG9zaXRpdmUsIHRodXMgd2UgbXVzdCBkbyBhIG1vcmUgdGhvcm91Z2ggY2hlY2s6CiAgICAgICAgaWYgKCByZXQgJiYgJ3dlYmtpdFBlcnNwZWN0aXZlJyBpbiBkb2NFbGVtZW50LnN0eWxlICkgewoKICAgICAgICAgIC8vIFdlYmtpdCBhbGxvd3MgdGhpcyBtZWRpYSBxdWVyeSB0byBzdWNjZWVkIG9ubHkgaWYgdGhlIGZlYXR1cmUgaXMgZW5hYmxlZC4KICAgICAgICAgIC8vIGBAbWVkaWEgKHRyYW5zZm9ybS0zZCksKC13ZWJraXQtdHJhbnNmb3JtLTNkKXsgLi4uIH1gCiAgICAgICAgICBpbmplY3RFbGVtZW50V2l0aFN0eWxlcygnQG1lZGlhICh0cmFuc2Zvcm0tM2QpLCgtd2Via2l0LXRyYW5zZm9ybS0zZCl7I21vZGVybml6cntsZWZ0OjlweDtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6M3B4O319JywgZnVuY3Rpb24oIG5vZGUsIHJ1bGUgKSB7CiAgICAgICAgICAgIHJldCA9IG5vZGUub2Zmc2V0TGVmdCA9PT0gOSAmJiBub2RlLm9mZnNldEhlaWdodCA9PT0gMzsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0OwogICAgfTsKCgogICAgdGVzdHNbJ2Nzc3RyYW5zaXRpb25zJ10gPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGVzdFByb3BzQWxsKCd0cmFuc2l0aW9uJyk7CiAgICB9OwoKCiAgICAvKj4+Zm9udGZhY2UqLwogICAgLy8gQGZvbnQtZmFjZSBkZXRlY3Rpb24gcm91dGluZSBieSBEaWVnbyBQZXJpbmkKICAgIC8vIGphdmFzY3JpcHQubndib3guY29tL0NTU1N1cHBvcnQvCgogICAgLy8gZmFsc2UgcG9zaXRpdmVzOgogICAgLy8gICBXZWJPUyBnaXRodWIuY29tL01vZGVybml6ci9Nb2Rlcm5penIvaXNzdWVzLzM0MgogICAgLy8gICBXUDcgICBnaXRodWIuY29tL01vZGVybml6ci9Nb2Rlcm5penIvaXNzdWVzLzUzOAogICAgdGVzdHNbJ2ZvbnRmYWNlJ10gPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgYm9vbDsKCiAgICAgICAgaW5qZWN0RWxlbWVudFdpdGhTdHlsZXMoJ0Bmb250LWZhY2Uge2ZvbnQtZmFtaWx5OiJmb250IjtzcmM6dXJsKCJodHRwczovLyIpfScsIGZ1bmN0aW9uKCBub2RlLCBydWxlICkgewogICAgICAgICAgdmFyIHN0eWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Ntb2Rlcm5penInKSwKICAgICAgICAgICAgICBzaGVldCA9IHN0eWxlLnNoZWV0IHx8IHN0eWxlLnN0eWxlU2hlZXQsCiAgICAgICAgICAgICAgY3NzVGV4dCA9IHNoZWV0ID8gKHNoZWV0LmNzc1J1bGVzICYmIHNoZWV0LmNzc1J1bGVzWzBdID8gc2hlZXQuY3NzUnVsZXNbMF0uY3NzVGV4dCA6IHNoZWV0LmNzc1RleHQgfHwgJycpIDogJyc7CgogICAgICAgICAgYm9vbCA9IC9zcmMvaS50ZXN0KGNzc1RleHQpICYmIGNzc1RleHQuaW5kZXhPZihydWxlLnNwbGl0KCcgJylbMF0pID09PSAwOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gYm9vbDsKICAgIH07CiAgICAvKj4+Zm9udGZhY2UqLwoKICAgIC8vIENTUyBnZW5lcmF0ZWQgY29udGVudCBkZXRlY3Rpb24KICAgIHRlc3RzWydnZW5lcmF0ZWRjb250ZW50J10gPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgYm9vbDsKCiAgICAgICAgaW5qZWN0RWxlbWVudFdpdGhTdHlsZXMoWycjJyxtb2QsJ3tmb250OjAvMCBhfSMnLG1vZCwnOmFmdGVye2NvbnRlbnQ6Iicsc21pbGUsJyI7dmlzaWJpbGl0eTpoaWRkZW47Zm9udDozcHgvMSBhfSddLmpvaW4oJycpLCBmdW5jdGlvbiggbm9kZSApIHsKICAgICAgICAgIGJvb2wgPSBub2RlLm9mZnNldEhlaWdodCA+PSAzOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gYm9vbDsKICAgIH07CgoKCiAgICAvLyBUaGVzZSB0ZXN0cyBldmFsdWF0ZSBzdXBwb3J0IG9mIHRoZSB2aWRlby9hdWRpbyBlbGVtZW50cywgYXMgd2VsbCBhcwogICAgLy8gdGVzdGluZyB3aGF0IHR5cGVzIG9mIGNvbnRlbnQgdGhleSBzdXBwb3J0LgogICAgLy8KICAgIC8vIFdlJ3JlIHVzaW5nIHRoZSBCb29sZWFuIGNvbnN0cnVjdG9yIGhlcmUsIHNvIHRoYXQgd2UgY2FuIGV4dGVuZCB0aGUgdmFsdWUKICAgIC8vIGUuZy4gIE1vZGVybml6ci52aWRlbyAgICAgLy8gdHJ1ZQogICAgLy8gICAgICAgTW9kZXJuaXpyLnZpZGVvLm9nZyAvLyAncHJvYmFibHknCiAgICAvLwogICAgLy8gQ29kZWMgdmFsdWVzIGZyb20gOiBnaXRodWIuY29tL05pZWxzTGVlbmhlZXIvaHRtbDV0ZXN0L2Jsb2IvOTEwNmE4L2luZGV4Lmh0bWwjTDg0NQogICAgLy8gICAgICAgICAgICAgICAgICAgICB0aHggdG8gTmllbHNMZWVuaGVlciBhbmQgemNvcnBhbgoKICAgIC8vIE5vdGU6IGluIHNvbWUgb2xkZXIgYnJvd3NlcnMsICJubyIgd2FzIGEgcmV0dXJuIHZhbHVlIGluc3RlYWQgb2YgZW1wdHkgc3RyaW5nLgogICAgLy8gICBJdCB3YXMgbGl2ZSBpbiBGRjMuNS4wIGFuZCAzLjUuMSwgYnV0IGZpeGVkIGluIDMuNS4yCiAgICAvLyAgIEl0IHdhcyBhbHNvIGxpdmUgaW4gU2FmYXJpIDQuMC4wIC0gNC4wLjQsIGJ1dCBmaXhlZCBpbiA0LjAuNQoKICAgIHRlc3RzWyd2aWRlbyddID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpLAogICAgICAgICAgICBib29sID0gZmFsc2U7CgogICAgICAgIC8vIElFOSBSdW5uaW5nIG9uIFdpbmRvd3MgU2VydmVyIFNLVSBjYW4gY2F1c2UgYW4gZXhjZXB0aW9uIHRvIGJlIHRocm93biwgYnVnICMyMjQKICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAoIGJvb2wgPSAhIWVsZW0uY2FuUGxheVR5cGUgKSB7CiAgICAgICAgICAgICAgICBib29sICAgICAgPSBuZXcgQm9vbGVhbihib29sKTsKICAgICAgICAgICAgICAgIGJvb2wub2dnICA9IGVsZW0uY2FuUGxheVR5cGUoJ3ZpZGVvL29nZzsgY29kZWNzPSJ0aGVvcmEiJykgICAgICAucmVwbGFjZSgvXm5vJC8sJycpOwoKICAgICAgICAgICAgICAgIC8vIFdpdGhvdXQgUXVpY2tUaW1lLCB0aGlzIHZhbHVlIHdpbGwgYmUgYHVuZGVmaW5lZGAuIGdpdGh1Yi5jb20vTW9kZXJuaXpyL01vZGVybml6ci9pc3N1ZXMvNTQ2CiAgICAgICAgICAgICAgICBib29sLmgyNjQgPSBlbGVtLmNhblBsYXlUeXBlKCd2aWRlby9tcDQ7IGNvZGVjcz0iYXZjMS40MkUwMUUiJykgLnJlcGxhY2UoL15ubyQvLCcnKTsKCiAgICAgICAgICAgICAgICBib29sLndlYm0gPSBlbGVtLmNhblBsYXlUeXBlKCd2aWRlby93ZWJtOyBjb2RlY3M9InZwOCwgdm9yYmlzIicpLnJlcGxhY2UoL15ubyQvLCcnKTsKICAgICAgICAgICAgfQoKICAgICAgICB9IGNhdGNoKGUpIHsgfQoKICAgICAgICByZXR1cm4gYm9vbDsKICAgIH07CgogICAgdGVzdHNbJ2F1ZGlvJ10gPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2F1ZGlvJyksCiAgICAgICAgICAgIGJvb2wgPSBmYWxzZTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKCBib29sID0gISFlbGVtLmNhblBsYXlUeXBlICkgewogICAgICAgICAgICAgICAgYm9vbCAgICAgID0gbmV3IEJvb2xlYW4oYm9vbCk7CiAgICAgICAgICAgICAgICBib29sLm9nZyAgPSBlbGVtLmNhblBsYXlUeXBlKCdhdWRpby9vZ2c7IGNvZGVjcz0idm9yYmlzIicpLnJlcGxhY2UoL15ubyQvLCcnKTsKICAgICAgICAgICAgICAgIGJvb2wubXAzICA9IGVsZW0uY2FuUGxheVR5cGUoJ2F1ZGlvL21wZWc7JykgICAgICAgICAgICAgICAucmVwbGFjZSgvXm5vJC8sJycpOwoKICAgICAgICAgICAgICAgIC8vIE1pbWV0eXBlcyBhY2NlcHRlZDoKICAgICAgICAgICAgICAgIC8vICAgZGV2ZWxvcGVyLm1vemlsbGEub3JnL0VuL01lZGlhX2Zvcm1hdHNfc3VwcG9ydGVkX2J5X3RoZV9hdWRpb19hbmRfdmlkZW9fZWxlbWVudHMKICAgICAgICAgICAgICAgIC8vICAgYml0Lmx5L2lwaG9uZW9zY29kZWNzCiAgICAgICAgICAgICAgICBib29sLndhdiAgPSBlbGVtLmNhblBsYXlUeXBlKCdhdWRpby93YXY7IGNvZGVjcz0iMSInKSAgICAgLnJlcGxhY2UoL15ubyQvLCcnKTsKICAgICAgICAgICAgICAgIGJvb2wubTRhICA9ICggZWxlbS5jYW5QbGF5VHlwZSgnYXVkaW8veC1tNGE7JykgICAgICAgICAgICB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmNhblBsYXlUeXBlKCdhdWRpby9hYWM7JykpICAgICAgICAgICAgIC5yZXBsYWNlKC9ebm8kLywnJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoKGUpIHsgfQoKICAgICAgICByZXR1cm4gYm9vbDsKICAgIH07CgoKICAgIC8vIEluIEZGNCwgaWYgZGlzYWJsZWQsIHdpbmRvdy5sb2NhbFN0b3JhZ2Ugc2hvdWxkID09PSBudWxsLgoKICAgIC8vIE5vcm1hbGx5LCB3ZSBjb3VsZCBub3QgdGVzdCB0aGF0IGRpcmVjdGx5IGFuZCBuZWVkIHRvIGRvIGEKICAgIC8vICAgYCgnbG9jYWxTdG9yYWdlJyBpbiB3aW5kb3cpICYmIGAgdGVzdCBmaXJzdCBiZWNhdXNlIG90aGVyd2lzZSBGaXJlZm94IHdpbGwKICAgIC8vICAgdGhyb3cgYnVnemlsLmxhLzM2NTc3MiBpZiBjb29raWVzIGFyZSBkaXNhYmxlZAoKICAgIC8vIEFsc28gaW4gaU9TNSBQcml2YXRlIEJyb3dzaW5nIG1vZGUsIGF0dGVtcHRpbmcgdG8gdXNlIGxvY2FsU3RvcmFnZS5zZXRJdGVtCiAgICAvLyB3aWxsIHRocm93IHRoZSBleGNlcHRpb246CiAgICAvLyAgIFFVT1RBX0VYQ0VFREVEX0VSUlJPUiBET00gRXhjZXB0aW9uIDIyLgogICAgLy8gUGVjdWxpYXJseSwgZ2V0SXRlbSBhbmQgcmVtb3ZlSXRlbSBjYWxscyBkbyBub3QgdGhyb3cuCgogICAgLy8gQmVjYXVzZSB3ZSBhcmUgZm9yY2VkIHRvIHRyeS9jYXRjaCB0aGlzLCB3ZSdsbCBnbyBhZ2dyZXNzaXZlLgoKICAgIC8vIEp1c3QgRldJVzogSUU4IENvbXBhdCBtb2RlIHN1cHBvcnRzIHRoZXNlIGZlYXR1cmVzIGNvbXBsZXRlbHk6CiAgICAvLyAgIHd3dy5xdWlya3Ntb2RlLm9yZy9kb20vaHRtbDUuaHRtbAogICAgLy8gQnV0IElFOCBkb2Vzbid0IHN1cHBvcnQgZWl0aGVyIHdpdGggbG9jYWwgZmlsZXMKCiAgICB0ZXN0c1snbG9jYWxzdG9yYWdlJ10gPSBmdW5jdGlvbigpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShtb2QsIG1vZCk7CiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG1vZCk7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gY2F0Y2goZSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfTsKCiAgICB0ZXN0c1snc2Vzc2lvbnN0b3JhZ2UnXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0obW9kLCBtb2QpOwogICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKG1vZCk7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gY2F0Y2goZSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfTsKCgogICAgdGVzdHNbJ3dlYndvcmtlcnMnXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAhIXdpbmRvdy5Xb3JrZXI7CiAgICB9OwoKCiAgICB0ZXN0c1snYXBwbGljYXRpb25jYWNoZSddID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICEhd2luZG93LmFwcGxpY2F0aW9uQ2FjaGU7CiAgICB9OwoKCiAgICAvLyBUaGFua3MgdG8gRXJpayBEYWhsc3Ryb20KICAgIHRlc3RzWydzdmcnXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyAmJiAhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhucy5zdmcsICdzdmcnKS5jcmVhdGVTVkdSZWN0OwogICAgfTsKCiAgICAvLyBzcGVjaWZpY2FsbHkgZm9yIFNWRyBpbmxpbmUgaW4gSFRNTCwgbm90IHdpdGhpbiBYSFRNTAogICAgLy8gdGVzdCBwYWdlOiBwYXVsaXJpc2guY29tL2RlbW8vaW5saW5lLXN2ZwogICAgdGVzdHNbJ2lubGluZXN2ZyddID0gZnVuY3Rpb24oKSB7CiAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgZGl2LmlubmVySFRNTCA9ICc8c3ZnLz4nOwogICAgICByZXR1cm4gKGRpdi5maXJzdENoaWxkICYmIGRpdi5maXJzdENoaWxkLm5hbWVzcGFjZVVSSSkgPT0gbnMuc3ZnOwogICAgfTsKCiAgICAvLyBTVkcgU01JTCBhbmltYXRpb24KICAgIHRlc3RzWydzbWlsJ10gPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gISFkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMgJiYgL1NWR0FuaW1hdGUvLnRlc3QodG9TdHJpbmcuY2FsbChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobnMuc3ZnLCAnYW5pbWF0ZScpKSk7CiAgICB9OwoKICAgIC8vIFRoaXMgdGVzdCBpcyBvbmx5IGZvciBjbGlwIHBhdGhzIGluIFNWRyBwcm9wZXIsIG5vdCBjbGlwIHBhdGhzIG9uIEhUTUwgY29udGVudAogICAgLy8gZGVtbzogc3J1ZmFjdWx0eS5zcnUuZWR1L2RhdmlkLmRhaWxleS9zdmcvbmV3c3R1ZmYvY2xpcFBhdGg0LnN2ZwoKICAgIC8vIEhvd2V2ZXIgcmVhZCB0aGUgY29tbWVudHMgdG8gZGlnIGludG8gYXBwbHlpbmcgU1ZHIGNsaXBwYXRocyB0byBIVE1MIGNvbnRlbnQgaGVyZToKICAgIC8vICAgZ2l0aHViLmNvbS9Nb2Rlcm5penIvTW9kZXJuaXpyL2lzc3Vlcy8yMTMjaXNzdWVjb21tZW50LTExNDk0OTEKICAgIHRlc3RzWydzdmdjbGlwcGF0aHMnXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyAmJiAvU1ZHQ2xpcFBhdGgvLnRlc3QodG9TdHJpbmcuY2FsbChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobnMuc3ZnLCAnY2xpcFBhdGgnKSkpOwogICAgfTsKCiAgICAvKj4+d2ViZm9ybXMqLwogICAgLy8gaW5wdXQgZmVhdHVyZXMgYW5kIGlucHV0IHR5cGVzIGdvIGRpcmVjdGx5IG9udG8gdGhlIHJldCBvYmplY3QsIGJ5cGFzc2luZyB0aGUgdGVzdHMgbG9vcC4KICAgIC8vIEhvbGQgdGhpcyBndXkgdG8gZXhlY3V0ZSBpbiBhIG1vbWVudC4KICAgIGZ1bmN0aW9uIHdlYmZvcm1zKCkgewogICAgICAgIC8qPj5pbnB1dCovCiAgICAgICAgLy8gUnVuIHRocm91Z2ggSFRNTDUncyBuZXcgaW5wdXQgYXR0cmlidXRlcyB0byBzZWUgaWYgdGhlIFVBIHVuZGVyc3RhbmRzIGFueS4KICAgICAgICAvLyBXZSdyZSB1c2luZyBmIHdoaWNoIGlzIHRoZSA8aW5wdXQ+IGVsZW1lbnQgY3JlYXRlZCBlYXJseSBvbgogICAgICAgIC8vIE1pa2UgVGF5bHIgaGFzIGNyZWF0ZWQgYSBjb21wcmVoZW5zaXZlIHJlc291cmNlIGZvciB0ZXN0aW5nIHRoZXNlIGF0dHJpYnV0ZXMKICAgICAgICAvLyAgIHdoZW4gYXBwbGllZCB0byBhbGwgaW5wdXQgdHlwZXM6CiAgICAgICAgLy8gICBtaWtldGF5bHIuY29tL2NvZGUvaW5wdXQtdHlwZS1hdHRyLmh0bWwKICAgICAgICAvLyBzcGVjOiB3d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RoZS1pbnB1dC1lbGVtZW50Lmh0bWwjaW5wdXQtdHlwZS1hdHRyLXN1bW1hcnkKCiAgICAgICAgLy8gT25seSBpbnB1dCBwbGFjZWhvbGRlciBpcyB0ZXN0ZWQgd2hpbGUgdGV4dGFyZWEncyBwbGFjZWhvbGRlciBpcyBub3QuCiAgICAgICAgLy8gQ3VycmVudGx5IFNhZmFyaSA0IGFuZCBPcGVyYSAxMSBoYXZlIHN1cHBvcnQgb25seSBmb3IgdGhlIGlucHV0IHBsYWNlaG9sZGVyCiAgICAgICAgLy8gQm90aCB0ZXN0cyBhcmUgYXZhaWxhYmxlIGluIGZlYXR1cmUtZGV0ZWN0cy9mb3Jtcy1wbGFjZWhvbGRlci5qcwogICAgICAgIE1vZGVybml6clsnaW5wdXQnXSA9IChmdW5jdGlvbiggcHJvcHMgKSB7CiAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbGVuID0gcHJvcHMubGVuZ3RoOyBpIDwgbGVuOyBpKysgKSB7CiAgICAgICAgICAgICAgICBhdHRyc1sgcHJvcHNbaV0gXSA9ICEhKHByb3BzW2ldIGluIGlucHV0RWxlbSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGF0dHJzLmxpc3QpewogICAgICAgICAgICAgIC8vIHNhZmFyaSBmYWxzZSBwb3NpdGl2ZSdzIG9uIGRhdGFsaXN0OiB3ZWJrLml0Lzc0MjUyCiAgICAgICAgICAgICAgLy8gc2VlIGFsc28gZ2l0aHViLmNvbS9Nb2Rlcm5penIvTW9kZXJuaXpyL2lzc3Vlcy8xNDYKICAgICAgICAgICAgICBhdHRycy5saXN0ID0gISEoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGF0YWxpc3QnKSAmJiB3aW5kb3cuSFRNTERhdGFMaXN0RWxlbWVudCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGF0dHJzOwogICAgICAgIH0pKCdhdXRvY29tcGxldGUgYXV0b2ZvY3VzIGxpc3QgcGxhY2Vob2xkZXIgbWF4IG1pbiBtdWx0aXBsZSBwYXR0ZXJuIHJlcXVpcmVkIHN0ZXAnLnNwbGl0KCcgJykpOwogICAgICAgIC8qPj5pbnB1dCovCgogICAgICAgIC8qPj5pbnB1dHR5cGVzKi8KICAgICAgICAvLyBSdW4gdGhyb3VnaCBIVE1MNSdzIG5ldyBpbnB1dCB0eXBlcyB0byBzZWUgaWYgdGhlIFVBIHVuZGVyc3RhbmRzIGFueS4KICAgICAgICAvLyAgIFRoaXMgaXMgcHV0IGJlaGluZCB0aGUgdGVzdHMgcnVubG9vcCBiZWNhdXNlIGl0IGRvZXNuJ3QgcmV0dXJuIGEKICAgICAgICAvLyAgIHRydWUvZmFsc2UgbGlrZSBhbGwgdGhlIG90aGVyIHRlc3RzOyBpbnN0ZWFkLCBpdCByZXR1cm5zIGFuIG9iamVjdAogICAgICAgIC8vICAgY29udGFpbmluZyBlYWNoIGlucHV0IHR5cGUgd2l0aCBpdHMgY29ycmVzcG9uZGluZyB0cnVlL2ZhbHNlIHZhbHVlCgogICAgICAgIC8vIEJpZyB0aGFua3MgdG8gQG1pa2V0YXlsciBmb3IgdGhlIGh0bWw1IGZvcm1zIGV4cGVydGlzZS4gbWlrZXRheWxyLmNvbS8KICAgICAgICBNb2Rlcm5penJbJ2lucHV0dHlwZXMnXSA9IChmdW5jdGlvbihwcm9wcykgewoKICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBib29sLCBpbnB1dEVsZW1UeXBlLCBkZWZhdWx0VmlldywgbGVuID0gcHJvcHMubGVuZ3RoOyBpIDwgbGVuOyBpKysgKSB7CgogICAgICAgICAgICAgICAgaW5wdXRFbGVtLnNldEF0dHJpYnV0ZSgndHlwZScsIGlucHV0RWxlbVR5cGUgPSBwcm9wc1tpXSk7CiAgICAgICAgICAgICAgICBib29sID0gaW5wdXRFbGVtLnR5cGUgIT09ICd0ZXh0JzsKCiAgICAgICAgICAgICAgICAvLyBXZSBmaXJzdCBjaGVjayB0byBzZWUgaWYgdGhlIHR5cGUgd2UgZ2l2ZSBpdCBzdGlja3MuLgogICAgICAgICAgICAgICAgLy8gSWYgdGhlIHR5cGUgZG9lcywgd2UgZmVlZCBpdCBhIHRleHR1YWwgdmFsdWUsIHdoaWNoIHNob3VsZG4ndCBiZSB2YWxpZC4KICAgICAgICAgICAgICAgIC8vIElmIHRoZSB2YWx1ZSBkb2Vzbid0IHN0aWNrLCB3ZSBrbm93IHRoZXJlJ3MgaW5wdXQgc2FuaXRpemF0aW9uIHdoaWNoIGluZmVycyBhIGN1c3RvbSBVSQogICAgICAgICAgICAgICAgaWYgKCBib29sICkgewoKICAgICAgICAgICAgICAgICAgICBpbnB1dEVsZW0udmFsdWUgICAgICAgICA9IHNtaWxlOwogICAgICAgICAgICAgICAgICAgIGlucHV0RWxlbS5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlO3Zpc2liaWxpdHk6aGlkZGVuOyc7CgogICAgICAgICAgICAgICAgICAgIGlmICggL15yYW5nZSQvLnRlc3QoaW5wdXRFbGVtVHlwZSkgJiYgaW5wdXRFbGVtLnN0eWxlLldlYmtpdEFwcGVhcmFuY2UgIT09IHVuZGVmaW5lZCApIHsKCiAgICAgICAgICAgICAgICAgICAgICBkb2NFbGVtZW50LmFwcGVuZENoaWxkKGlucHV0RWxlbSk7CiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmlldyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3OwoKICAgICAgICAgICAgICAgICAgICAgIC8vIFNhZmFyaSAyLTQgYWxsb3dzIHRoZSBzbWlsZXkgYXMgYSB2YWx1ZSwgZGVzcGl0ZSBtYWtpbmcgYSBzbGlkZXIKICAgICAgICAgICAgICAgICAgICAgIGJvb2wgPSAgZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGlucHV0RWxlbSwgbnVsbCkuV2Via2l0QXBwZWFyYW5jZSAhPT0gJ3RleHRmaWVsZCcgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW9iaWxlIGFuZHJvaWQgd2ViIGJyb3dzZXIgaGFzIGZhbHNlIHBvc2l0aXZlLCBzbyBtdXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRoZSBoZWlnaHQgdG8gc2VlIGlmIHRoZSB3aWRnZXQgaXMgYWN0dWFsbHkgdGhlcmUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dEVsZW0ub2Zmc2V0SGVpZ2h0ICE9PSAwKTsKCiAgICAgICAgICAgICAgICAgICAgICBkb2NFbGVtZW50LnJlbW92ZUNoaWxkKGlucHV0RWxlbSk7CgogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIC9eKHNlYXJjaHx0ZWwpJC8udGVzdChpbnB1dEVsZW1UeXBlKSApewogICAgICAgICAgICAgICAgICAgICAgLy8gU3BlYyBkb2Vzbid0IGRlZmluZSBhbnkgc3BlY2lhbCBwYXJzaW5nIG9yIGRldGVjdGFibGUgVUkKICAgICAgICAgICAgICAgICAgICAgIC8vICAgYmVoYXZpb3JzIHNvIHdlIHBhc3MgdGhlc2UgdGhyb3VnaCBhcyB0cnVlCgogICAgICAgICAgICAgICAgICAgICAgLy8gSW50ZXJlc3RpbmdseSwgb3BlcmEgZmFpbHMgdGhlIGVhcmxpZXIgdGVzdCwgc28gaXQgZG9lc24ndAogICAgICAgICAgICAgICAgICAgICAgLy8gIGV2ZW4gbWFrZSBpdCBoZXJlLgoKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAvXih1cmx8ZW1haWwpJC8udGVzdChpbnB1dEVsZW1UeXBlKSApIHsKICAgICAgICAgICAgICAgICAgICAgIC8vIFJlYWwgdXJsIGFuZCBlbWFpbCBzdXBwb3J0IGNvbWVzIHdpdGggcHJlYmFrZWQgdmFsaWRhdGlvbi4KICAgICAgICAgICAgICAgICAgICAgIGJvb2wgPSBpbnB1dEVsZW0uY2hlY2tWYWxpZGl0eSAmJiBpbnB1dEVsZW0uY2hlY2tWYWxpZGl0eSgpID09PSBmYWxzZTsKCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSB1cGdyYWRlZCBpbnB1dCBjb21wb250ZW50IHJlamVjdHMgdGhlIDopIHRleHQsIHdlIGdvdCBhIHdpbm5lcgogICAgICAgICAgICAgICAgICAgICAgYm9vbCA9IGlucHV0RWxlbS52YWx1ZSAhPSBzbWlsZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaW5wdXRzWyBwcm9wc1tpXSBdID0gISFib29sOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBpbnB1dHM7CiAgICAgICAgfSkoJ3NlYXJjaCB0ZWwgdXJsIGVtYWlsIGRhdGV0aW1lIGRhdGUgbW9udGggd2VlayB0aW1lIGRhdGV0aW1lLWxvY2FsIG51bWJlciByYW5nZSBjb2xvcicuc3BsaXQoJyAnKSk7CiAgICAgICAgLyo+PmlucHV0dHlwZXMqLwogICAgfQogICAgLyo+PndlYmZvcm1zKi8KCgogICAgLy8gRW5kIG9mIHRlc3QgZGVmaW5pdGlvbnMKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKCiAgICAvLyBSdW4gdGhyb3VnaCBhbGwgdGVzdHMgYW5kIGRldGVjdCB0aGVpciBzdXBwb3J0IGluIHRoZSBjdXJyZW50IFVBLgogICAgLy8gdG9kbzogaHlwb3RoZXRpY2FsbHkgd2UgY291bGQgYmUgZG9pbmcgYW4gYXJyYXkgb2YgdGVzdHMgYW5kIHVzZSBhIGJhc2ljIGxvb3AgaGVyZS4KICAgIGZvciAoIHZhciBmZWF0dXJlIGluIHRlc3RzICkgewogICAgICAgIGlmICggaGFzT3duUHJvcCh0ZXN0cywgZmVhdHVyZSkgKSB7CiAgICAgICAgICAgIC8vIHJ1biB0aGUgdGVzdCwgdGhyb3cgdGhlIHJldHVybiB2YWx1ZSBpbnRvIHRoZSBNb2Rlcm5penIsCiAgICAgICAgICAgIC8vICAgdGhlbiBiYXNlZCBvbiB0aGF0IGJvb2xlYW4sIGRlZmluZSBhbiBhcHByb3ByaWF0ZSBjbGFzc05hbWUKICAgICAgICAgICAgLy8gICBhbmQgcHVzaCBpdCBpbnRvIGFuIGFycmF5IG9mIGNsYXNzZXMgd2UnbGwgam9pbiBsYXRlci4KICAgICAgICAgICAgZmVhdHVyZU5hbWUgID0gZmVhdHVyZS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICBNb2Rlcm5penJbZmVhdHVyZU5hbWVdID0gdGVzdHNbZmVhdHVyZV0oKTsKCiAgICAgICAgICAgIGNsYXNzZXMucHVzaCgoTW9kZXJuaXpyW2ZlYXR1cmVOYW1lXSA/ICcnIDogJ25vLScpICsgZmVhdHVyZU5hbWUpOwogICAgICAgIH0KICAgIH0KCiAgICAvKj4+d2ViZm9ybXMqLwogICAgLy8gaW5wdXQgdGVzdHMgbmVlZCB0byBydW4uCiAgICBNb2Rlcm5penIuaW5wdXQgfHwgd2ViZm9ybXMoKTsKICAgIC8qPj53ZWJmb3JtcyovCgoKICAgIC8qKgogICAgICogYWRkVGVzdCBhbGxvd3MgdGhlIHVzZXIgdG8gZGVmaW5lIHRoZWlyIG93biBmZWF0dXJlIHRlc3RzCiAgICAgKiB0aGUgcmVzdWx0IHdpbGwgYmUgYWRkZWQgb250byB0aGUgTW9kZXJuaXpyIG9iamVjdCwKICAgICAqIGFzIHdlbGwgYXMgYW4gYXBwcm9wcmlhdGUgY2xhc3NOYW1lIHNldCBvbiB0aGUgaHRtbCBlbGVtZW50CiAgICAgKgogICAgICogQHBhcmFtIGZlYXR1cmUgLSBTdHJpbmcgbmFtaW5nIHRoZSBmZWF0dXJlCiAgICAgKiBAcGFyYW0gdGVzdCAtIEZ1bmN0aW9uIHJldHVybmluZyB0cnVlIGlmIGZlYXR1cmUgaXMgc3VwcG9ydGVkLCBmYWxzZSBpZiBub3QKICAgICAqLwogICAgIE1vZGVybml6ci5hZGRUZXN0ID0gZnVuY3Rpb24gKCBmZWF0dXJlLCB0ZXN0ICkgewogICAgICAgaWYgKCB0eXBlb2YgZmVhdHVyZSA9PSAnb2JqZWN0JyApIHsKICAgICAgICAgZm9yICggdmFyIGtleSBpbiBmZWF0dXJlICkgewogICAgICAgICAgIGlmICggaGFzT3duUHJvcCggZmVhdHVyZSwga2V5ICkgKSB7CiAgICAgICAgICAgICBNb2Rlcm5penIuYWRkVGVzdCgga2V5LCBmZWF0dXJlWyBrZXkgXSApOwogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfSBlbHNlIHsKCiAgICAgICAgIGZlYXR1cmUgPSBmZWF0dXJlLnRvTG93ZXJDYXNlKCk7CgogICAgICAgICBpZiAoIE1vZGVybml6cltmZWF0dXJlXSAhPT0gdW5kZWZpbmVkICkgewogICAgICAgICAgIC8vIHdlJ3JlIGdvaW5nIHRvIHF1aXQgaWYgeW91J3JlIHRyeWluZyB0byBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgdGVzdAogICAgICAgICAgIC8vIGlmIHdlIHdlcmUgdG8gYWxsb3cgaXQsIHdlJ2QgZG8gdGhpczoKICAgICAgICAgICAvLyAgIHZhciByZSA9IG5ldyBSZWdFeHAoIlxcYihuby0pPyIgKyBmZWF0dXJlICsgIlxcYiIpOwogICAgICAgICAgIC8vICAgZG9jRWxlbWVudC5jbGFzc05hbWUgPSBkb2NFbGVtZW50LmNsYXNzTmFtZS5yZXBsYWNlKCByZSwgJycgKTsKICAgICAgICAgICAvLyBidXQsIG5vIHJseSwgc3R1ZmYgJ2VtLgogICAgICAgICAgIHJldHVybiBNb2Rlcm5penI7CiAgICAgICAgIH0KCiAgICAgICAgIHRlc3QgPSB0eXBlb2YgdGVzdCA9PSAnZnVuY3Rpb24nID8gdGVzdCgpIDogdGVzdDsKCiAgICAgICAgIGlmICh0eXBlb2YgZW5hYmxlQ2xhc3NlcyAhPT0gInVuZGVmaW5lZCIgJiYgZW5hYmxlQ2xhc3NlcykgewogICAgICAgICAgIGRvY0VsZW1lbnQuY2xhc3NOYW1lICs9ICcgJyArICh0ZXN0ID8gJycgOiAnbm8tJykgKyBmZWF0dXJlOwogICAgICAgICB9CiAgICAgICAgIE1vZGVybml6cltmZWF0dXJlXSA9IHRlc3Q7CgogICAgICAgfQoKICAgICAgIHJldHVybiBNb2Rlcm5penI7IC8vIGFsbG93IGNoYWluaW5nLgogICAgIH07CgoKICAgIC8vIFJlc2V0IG1vZEVsZW0uY3NzVGV4dCB0byBub3RoaW5nIHRvIHJlZHVjZSBtZW1vcnkgZm9vdHByaW50LgogICAgc2V0Q3NzKCcnKTsKICAgIG1vZEVsZW0gPSBpbnB1dEVsZW0gPSBudWxsOwoKICAgIC8qPj5zaGl2Ki8KICAgIC8qKgogICAgICogQHByZXNlcnZlIEhUTUw1IFNoaXYgcHJldjMuNy4xIHwgQGFmYXJrYXMgQGpkYWx0b24gQGpvbl9uZWFsIEByZW0gfCBNSVQvR1BMMiBMaWNlbnNlZAogICAgICovCiAgICA7KGZ1bmN0aW9uKHdpbmRvdywgZG9jdW1lbnQpIHsKICAgICAgICAvKmpzaGludCBldmlsOnRydWUgKi8KICAgICAgICAvKiogdmVyc2lvbiAqLwogICAgICAgIHZhciB2ZXJzaW9uID0gJzMuNy4wJzsKCiAgICAgICAgLyoqIFByZXNldCBvcHRpb25zICovCiAgICAgICAgdmFyIG9wdGlvbnMgPSB3aW5kb3cuaHRtbDUgfHwge307CgogICAgICAgIC8qKiBVc2VkIHRvIHNraXAgcHJvYmxlbSBlbGVtZW50cyAqLwogICAgICAgIHZhciByZVNraXAgPSAvXjx8Xig/OmJ1dHRvbnxtYXB8c2VsZWN0fHRleHRhcmVhfG9iamVjdHxpZnJhbWV8b3B0aW9ufG9wdGdyb3VwKSQvaTsKCiAgICAgICAgLyoqIE5vdCBhbGwgZWxlbWVudHMgY2FuIGJlIGNsb25lZCBpbiBJRSAqKi8KICAgICAgICB2YXIgc2F2ZUNsb25lcyA9IC9eKD86YXxifGNvZGV8ZGl2fGZpZWxkc2V0fGgxfGgyfGgzfGg0fGg1fGg2fGl8bGFiZWx8bGl8b2x8cHxxfHNwYW58c3Ryb25nfHN0eWxlfHRhYmxlfHRib2R5fHRkfHRofHRyfHVsKSQvaTsKCiAgICAgICAgLyoqIERldGVjdCB3aGV0aGVyIHRoZSBicm93c2VyIHN1cHBvcnRzIGRlZmF1bHQgaHRtbDUgc3R5bGVzICovCiAgICAgICAgdmFyIHN1cHBvcnRzSHRtbDVTdHlsZXM7CgogICAgICAgIC8qKiBOYW1lIG9mIHRoZSBleHBhbmRvLCB0byB3b3JrIHdpdGggbXVsdGlwbGUgZG9jdW1lbnRzIG9yIHRvIHJlLXNoaXYgb25lIGRvY3VtZW50ICovCiAgICAgICAgdmFyIGV4cGFuZG8gPSAnX2h0bWw1c2hpdic7CgogICAgICAgIC8qKiBUaGUgaWQgZm9yIHRoZSB0aGUgZG9jdW1lbnRzIGV4cGFuZG8gKi8KICAgICAgICB2YXIgZXhwYW5JRCA9IDA7CgogICAgICAgIC8qKiBDYWNoZWQgZGF0YSBmb3IgZWFjaCBkb2N1bWVudCAqLwogICAgICAgIHZhciBleHBhbmRvRGF0YSA9IHt9OwoKICAgICAgICAvKiogRGV0ZWN0IHdoZXRoZXIgdGhlIGJyb3dzZXIgc3VwcG9ydHMgdW5rbm93biBlbGVtZW50cyAqLwogICAgICAgIHZhciBzdXBwb3J0c1Vua25vd25FbGVtZW50czsKCiAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CiAgICAgICAgICAgIGEuaW5uZXJIVE1MID0gJzx4eXo+PC94eXo+JzsKICAgICAgICAgICAgLy9pZiB0aGUgaGlkZGVuIHByb3BlcnR5IGlzIGltcGxlbWVudGVkIHdlIGNhbiBhc3N1bWUsIHRoYXQgdGhlIGJyb3dzZXIgc3VwcG9ydHMgYmFzaWMgSFRNTDUgU3R5bGVzCiAgICAgICAgICAgIHN1cHBvcnRzSHRtbDVTdHlsZXMgPSAoJ2hpZGRlbicgaW4gYSk7CgogICAgICAgICAgICBzdXBwb3J0c1Vua25vd25FbGVtZW50cyA9IGEuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSB8fCAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgLy8gYXNzaWduIGEgZmFsc2UgcG9zaXRpdmUgaWYgdW5hYmxlIHRvIHNoaXYKICAgICAgICAgICAgICAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCkoJ2EnKTsKICAgICAgICAgICAgICB2YXIgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKICAgICAgICAgICAgICByZXR1cm4gKAogICAgICAgICAgICAgICAgdHlwZW9mIGZyYWcuY2xvbmVOb2RlID09ICd1bmRlZmluZWQnIHx8CiAgICAgICAgICAgICAgICB0eXBlb2YgZnJhZy5jcmVhdGVEb2N1bWVudEZyYWdtZW50ID09ICd1bmRlZmluZWQnIHx8CiAgICAgICAgICAgICAgICB0eXBlb2YgZnJhZy5jcmVhdGVFbGVtZW50ID09ICd1bmRlZmluZWQnCiAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfSgpKTsKICAgICAgICAgIH0gY2F0Y2goZSkgewogICAgICAgICAgICAvLyBhc3NpZ24gYSBmYWxzZSBwb3NpdGl2ZSBpZiBkZXRlY3Rpb24gZmFpbHMgPT4gdW5hYmxlIHRvIHNoaXYKICAgICAgICAgICAgc3VwcG9ydHNIdG1sNVN0eWxlcyA9IHRydWU7CiAgICAgICAgICAgIHN1cHBvcnRzVW5rbm93bkVsZW1lbnRzID0gdHJ1ZTsKICAgICAgICAgIH0KCiAgICAgICAgfSgpKTsKCiAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgogICAgICAgIC8qKgogICAgICAgICAqIENyZWF0ZXMgYSBzdHlsZSBzaGVldCB3aXRoIHRoZSBnaXZlbiBDU1MgdGV4dCBhbmQgYWRkcyBpdCB0byB0aGUgZG9jdW1lbnQuCiAgICAgICAgICogQHByaXZhdGUKICAgICAgICAgKiBAcGFyYW0ge0RvY3VtZW50fSBvd25lckRvY3VtZW50IFRoZSBkb2N1bWVudC4KICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gY3NzVGV4dCBUaGUgQ1NTIHRleHQuCiAgICAgICAgICogQHJldHVybnMge1N0eWxlU2hlZXR9IFRoZSBzdHlsZSBlbGVtZW50LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGFkZFN0eWxlU2hlZXQob3duZXJEb2N1bWVudCwgY3NzVGV4dCkgewogICAgICAgICAgdmFyIHAgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKSwKICAgICAgICAgIHBhcmVudCA9IG93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSB8fCBvd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKCiAgICAgICAgICBwLmlubmVySFRNTCA9ICd4PHN0eWxlPicgKyBjc3NUZXh0ICsgJzwvc3R5bGU+JzsKICAgICAgICAgIHJldHVybiBwYXJlbnQuaW5zZXJ0QmVmb3JlKHAubGFzdENoaWxkLCBwYXJlbnQuZmlyc3RDaGlsZCk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBgaHRtbDUuZWxlbWVudHNgIGFzIGFuIGFycmF5LgogICAgICAgICAqIEBwcml2YXRlCiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBBbiBhcnJheSBvZiBzaGl2ZWQgZWxlbWVudCBub2RlIG5hbWVzLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEVsZW1lbnRzKCkgewogICAgICAgICAgdmFyIGVsZW1lbnRzID0gaHRtbDUuZWxlbWVudHM7CiAgICAgICAgICByZXR1cm4gdHlwZW9mIGVsZW1lbnRzID09ICdzdHJpbmcnID8gZWxlbWVudHMuc3BsaXQoJyAnKSA6IGVsZW1lbnRzOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogUmV0dXJucyB0aGUgZGF0YSBhc3NvY2lhdGVkIHRvIHRoZSBnaXZlbiBkb2N1bWVudAogICAgICAgICAqIEBwcml2YXRlCiAgICAgICAgICogQHBhcmFtIHtEb2N1bWVudH0gb3duZXJEb2N1bWVudCBUaGUgZG9jdW1lbnQuCiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gQW4gb2JqZWN0IG9mIGRhdGEuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXhwYW5kb0RhdGEob3duZXJEb2N1bWVudCkgewogICAgICAgICAgdmFyIGRhdGEgPSBleHBhbmRvRGF0YVtvd25lckRvY3VtZW50W2V4cGFuZG9dXTsKICAgICAgICAgIGlmICghZGF0YSkgewogICAgICAgICAgICBkYXRhID0ge307CiAgICAgICAgICAgIGV4cGFuSUQrKzsKICAgICAgICAgICAgb3duZXJEb2N1bWVudFtleHBhbmRvXSA9IGV4cGFuSUQ7CiAgICAgICAgICAgIGV4cGFuZG9EYXRhW2V4cGFuSURdID0gZGF0YTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBkYXRhOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogcmV0dXJucyBhIHNoaXZlZCBlbGVtZW50IGZvciB0aGUgZ2l2ZW4gbm9kZU5hbWUgYW5kIGRvY3VtZW50CiAgICAgICAgICogQG1lbWJlck9mIGh0bWw1CiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5vZGVOYW1lIG5hbWUgb2YgdGhlIGVsZW1lbnQKICAgICAgICAgKiBAcGFyYW0ge0RvY3VtZW50fSBvd25lckRvY3VtZW50IFRoZSBjb250ZXh0IGRvY3VtZW50LgogICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBzaGl2ZWQgZWxlbWVudC4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KG5vZGVOYW1lLCBvd25lckRvY3VtZW50LCBkYXRhKXsKICAgICAgICAgIGlmICghb3duZXJEb2N1bWVudCkgewogICAgICAgICAgICBvd25lckRvY3VtZW50ID0gZG9jdW1lbnQ7CiAgICAgICAgICB9CiAgICAgICAgICBpZihzdXBwb3J0c1Vua25vd25FbGVtZW50cyl7CiAgICAgICAgICAgIHJldHVybiBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobm9kZU5hbWUpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFkYXRhKSB7CiAgICAgICAgICAgIGRhdGEgPSBnZXRFeHBhbmRvRGF0YShvd25lckRvY3VtZW50KTsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBub2RlOwoKICAgICAgICAgIGlmIChkYXRhLmNhY2hlW25vZGVOYW1lXSkgewogICAgICAgICAgICBub2RlID0gZGF0YS5jYWNoZVtub2RlTmFtZV0uY2xvbmVOb2RlKCk7CiAgICAgICAgICB9IGVsc2UgaWYgKHNhdmVDbG9uZXMudGVzdChub2RlTmFtZSkpIHsKICAgICAgICAgICAgbm9kZSA9IChkYXRhLmNhY2hlW25vZGVOYW1lXSA9IGRhdGEuY3JlYXRlRWxlbShub2RlTmFtZSkpLmNsb25lTm9kZSgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbm9kZSA9IGRhdGEuY3JlYXRlRWxlbShub2RlTmFtZSk7CiAgICAgICAgICB9CgogICAgICAgICAgLy8gQXZvaWQgYWRkaW5nIHNvbWUgZWxlbWVudHMgdG8gZnJhZ21lbnRzIGluIElFIDwgOSBiZWNhdXNlCiAgICAgICAgICAvLyAqIEF0dHJpYnV0ZXMgbGlrZSBgbmFtZWAgb3IgYHR5cGVgIGNhbm5vdCBiZSBzZXQvY2hhbmdlZCBvbmNlIGFuIGVsZW1lbnQKICAgICAgICAgIC8vICAgaXMgaW5zZXJ0ZWQgaW50byBhIGRvY3VtZW50L2ZyYWdtZW50CiAgICAgICAgICAvLyAqIExpbmsgZWxlbWVudHMgd2l0aCBgc3JjYCBhdHRyaWJ1dGVzIHRoYXQgYXJlIGluYWNjZXNzaWJsZSwgYXMgd2l0aAogICAgICAgICAgLy8gICBhIDQwMyByZXNwb25zZSwgd2lsbCBjYXVzZSB0aGUgdGFiL3dpbmRvdyB0byBjcmFzaAogICAgICAgICAgLy8gKiBTY3JpcHQgZWxlbWVudHMgYXBwZW5kZWQgdG8gZnJhZ21lbnRzIHdpbGwgZXhlY3V0ZSB3aGVuIHRoZWlyIGBzcmNgCiAgICAgICAgICAvLyAgIG9yIGB0ZXh0YCBwcm9wZXJ0eSBpcyBzZXQKICAgICAgICAgIHJldHVybiBub2RlLmNhbkhhdmVDaGlsZHJlbiAmJiAhcmVTa2lwLnRlc3Qobm9kZU5hbWUpICYmICFub2RlLnRhZ1VybiA/IGRhdGEuZnJhZy5hcHBlbmRDaGlsZChub2RlKSA6IG5vZGU7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiByZXR1cm5zIGEgc2hpdmVkIERvY3VtZW50RnJhZ21lbnQgZm9yIHRoZSBnaXZlbiBkb2N1bWVudAogICAgICAgICAqIEBtZW1iZXJPZiBodG1sNQogICAgICAgICAqIEBwYXJhbSB7RG9jdW1lbnR9IG93bmVyRG9jdW1lbnQgVGhlIGNvbnRleHQgZG9jdW1lbnQuCiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gVGhlIHNoaXZlZCBEb2N1bWVudEZyYWdtZW50LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGNyZWF0ZURvY3VtZW50RnJhZ21lbnQob3duZXJEb2N1bWVudCwgZGF0YSl7CiAgICAgICAgICBpZiAoIW93bmVyRG9jdW1lbnQpIHsKICAgICAgICAgICAgb3duZXJEb2N1bWVudCA9IGRvY3VtZW50OwogICAgICAgICAgfQogICAgICAgICAgaWYoc3VwcG9ydHNVbmtub3duRWxlbWVudHMpewogICAgICAgICAgICByZXR1cm4gb3duZXJEb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CiAgICAgICAgICB9CiAgICAgICAgICBkYXRhID0gZGF0YSB8fCBnZXRFeHBhbmRvRGF0YShvd25lckRvY3VtZW50KTsKICAgICAgICAgIHZhciBjbG9uZSA9IGRhdGEuZnJhZy5jbG9uZU5vZGUoKSwKICAgICAgICAgIGkgPSAwLAogICAgICAgICAgZWxlbXMgPSBnZXRFbGVtZW50cygpLAogICAgICAgICAgbCA9IGVsZW1zLmxlbmd0aDsKICAgICAgICAgIGZvcig7aTxsO2krKyl7CiAgICAgICAgICAgIGNsb25lLmNyZWF0ZUVsZW1lbnQoZWxlbXNbaV0pOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGNsb25lOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogU2hpdnMgdGhlIGBjcmVhdGVFbGVtZW50YCBhbmQgYGNyZWF0ZURvY3VtZW50RnJhZ21lbnRgIG1ldGhvZHMgb2YgdGhlIGRvY3VtZW50LgogICAgICAgICAqIEBwcml2YXRlCiAgICAgICAgICogQHBhcmFtIHtEb2N1bWVudHxEb2N1bWVudEZyYWdtZW50fSBvd25lckRvY3VtZW50IFRoZSBkb2N1bWVudC4KICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YSBvZiB0aGUgZG9jdW1lbnQuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2hpdk1ldGhvZHMob3duZXJEb2N1bWVudCwgZGF0YSkgewogICAgICAgICAgaWYgKCFkYXRhLmNhY2hlKSB7CiAgICAgICAgICAgIGRhdGEuY2FjaGUgPSB7fTsKICAgICAgICAgICAgZGF0YS5jcmVhdGVFbGVtID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50OwogICAgICAgICAgICBkYXRhLmNyZWF0ZUZyYWcgPSBvd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQ7CiAgICAgICAgICAgIGRhdGEuZnJhZyA9IGRhdGEuY3JlYXRlRnJhZygpOwogICAgICAgICAgfQoKCiAgICAgICAgICBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbihub2RlTmFtZSkgewogICAgICAgICAgICAvL2Fib3J0IHNoaXYKICAgICAgICAgICAgaWYgKCFodG1sNS5zaGl2TWV0aG9kcykgewogICAgICAgICAgICAgIHJldHVybiBkYXRhLmNyZWF0ZUVsZW0obm9kZU5hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KG5vZGVOYW1lLCBvd25lckRvY3VtZW50LCBkYXRhKTsKICAgICAgICAgIH07CgogICAgICAgICAgb3duZXJEb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50ID0gRnVuY3Rpb24oJ2gsZicsICdyZXR1cm4gZnVuY3Rpb24oKXsnICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2YXIgbj1mLmNsb25lTm9kZSgpLGM9bi5jcmVhdGVFbGVtZW50OycgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2guc2hpdk1ldGhvZHMmJignICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVucm9sbCB0aGUgYGNyZWF0ZUVsZW1lbnRgIGNhbGxzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRFbGVtZW50cygpLmpvaW4oKS5yZXBsYWNlKC9bXHdcLV0rL2csIGZ1bmN0aW9uKG5vZGVOYW1lKSB7CiAgICAgICAgICAgIGRhdGEuY3JlYXRlRWxlbShub2RlTmFtZSk7CiAgICAgICAgICAgIGRhdGEuZnJhZy5jcmVhdGVFbGVtZW50KG5vZGVOYW1lKTsKICAgICAgICAgICAgcmV0dXJuICdjKCInICsgbm9kZU5hbWUgKyAnIiknOwogICAgICAgICAgfSkgKwogICAgICAgICAgICAnKTtyZXR1cm4gbn0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkoaHRtbDUsIGRhdGEuZnJhZyk7CiAgICAgICAgfQoKICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCiAgICAgICAgLyoqCiAgICAgICAgICogU2hpdnMgdGhlIGdpdmVuIGRvY3VtZW50LgogICAgICAgICAqIEBtZW1iZXJPZiBodG1sNQogICAgICAgICAqIEBwYXJhbSB7RG9jdW1lbnR9IG93bmVyRG9jdW1lbnQgVGhlIGRvY3VtZW50IHRvIHNoaXYuCiAgICAgICAgICogQHJldHVybnMge0RvY3VtZW50fSBUaGUgc2hpdmVkIGRvY3VtZW50LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNoaXZEb2N1bWVudChvd25lckRvY3VtZW50KSB7CiAgICAgICAgICBpZiAoIW93bmVyRG9jdW1lbnQpIHsKICAgICAgICAgICAgb3duZXJEb2N1bWVudCA9IGRvY3VtZW50OwogICAgICAgICAgfQogICAgICAgICAgdmFyIGRhdGEgPSBnZXRFeHBhbmRvRGF0YShvd25lckRvY3VtZW50KTsKCiAgICAgICAgICBpZiAoaHRtbDUuc2hpdkNTUyAmJiAhc3VwcG9ydHNIdG1sNVN0eWxlcyAmJiAhZGF0YS5oYXNDU1MpIHsKICAgICAgICAgICAgZGF0YS5oYXNDU1MgPSAhIWFkZFN0eWxlU2hlZXQob3duZXJEb2N1bWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVjdHMgYmxvY2sgZGlzcGxheSBub3QgZGVmaW5lZCBpbiBJRTYvNy84LzkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FydGljbGUsYXNpZGUsZGlhbG9nLGZpZ2NhcHRpb24sZmlndXJlLGZvb3RlcixoZWFkZXIsaGdyb3VwLG1haW4sbmF2LHNlY3Rpb257ZGlzcGxheTpibG9ja30nICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGRzIHN0eWxpbmcgbm90IHByZXNlbnQgaW4gSUU2LzcvOC85CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmt7YmFja2dyb3VuZDojRkYwO2NvbG9yOiMwMDB9JyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGlkZXMgbm9uLXJlbmRlcmVkIGVsZW1lbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RlbXBsYXRle2Rpc3BsYXk6bm9uZX0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghc3VwcG9ydHNVbmtub3duRWxlbWVudHMpIHsKICAgICAgICAgICAgc2hpdk1ldGhvZHMob3duZXJEb2N1bWVudCwgZGF0YSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gb3duZXJEb2N1bWVudDsKICAgICAgICB9CgogICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgYGh0bWw1YCBvYmplY3QgaXMgZXhwb3NlZCBzbyB0aGF0IG1vcmUgZWxlbWVudHMgY2FuIGJlIHNoaXZlZCBhbmQKICAgICAgICAgKiBleGlzdGluZyBzaGl2aW5nIGNhbiBiZSBkZXRlY3RlZCBvbiBpZnJhbWVzLgogICAgICAgICAqIEB0eXBlIE9iamVjdAogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICoKICAgICAgICAgKiAvLyBvcHRpb25zIGNhbiBiZSBjaGFuZ2VkIGJlZm9yZSB0aGUgc2NyaXB0IGlzIGluY2x1ZGVkCiAgICAgICAgICogaHRtbDUgPSB7ICdlbGVtZW50cyc6ICdtYXJrIHNlY3Rpb24nLCAnc2hpdkNTUyc6IGZhbHNlLCAnc2hpdk1ldGhvZHMnOiBmYWxzZSB9OwogICAgICAgICAqLwogICAgICAgIHZhciBodG1sNSA9IHsKCiAgICAgICAgICAvKioKICAgICAgICAgICAqIEFuIGFycmF5IG9yIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgb2Ygbm9kZSBuYW1lcyBvZiB0aGUgZWxlbWVudHMgdG8gc2hpdi4KICAgICAgICAgICAqIEBtZW1iZXJPZiBodG1sNQogICAgICAgICAgICogQHR5cGUgQXJyYXl8U3RyaW5nCiAgICAgICAgICAgKi8KICAgICAgICAgICdlbGVtZW50cyc6IG9wdGlvbnMuZWxlbWVudHMgfHwgJ2FiYnIgYXJ0aWNsZSBhc2lkZSBhdWRpbyBiZGkgY2FudmFzIGRhdGEgZGF0YWxpc3QgZGV0YWlscyBkaWFsb2cgZmlnY2FwdGlvbiBmaWd1cmUgZm9vdGVyIGhlYWRlciBoZ3JvdXAgbWFpbiBtYXJrIG1ldGVyIG5hdiBvdXRwdXQgcHJvZ3Jlc3Mgc2VjdGlvbiBzdW1tYXJ5IHRlbXBsYXRlIHRpbWUgdmlkZW8nLAoKICAgICAgICAgIC8qKgogICAgICAgICAgICogY3VycmVudCB2ZXJzaW9uIG9mIGh0bWw1c2hpdgogICAgICAgICAgICovCiAgICAgICAgICAndmVyc2lvbic6IHZlcnNpb24sCgogICAgICAgICAgLyoqCiAgICAgICAgICAgKiBBIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgSFRNTDUgc3R5bGUgc2hlZXQgc2hvdWxkIGJlIGluc2VydGVkLgogICAgICAgICAgICogQG1lbWJlck9mIGh0bWw1CiAgICAgICAgICAgKiBAdHlwZSBCb29sZWFuCiAgICAgICAgICAgKi8KICAgICAgICAgICdzaGl2Q1NTJzogKG9wdGlvbnMuc2hpdkNTUyAhPT0gZmFsc2UpLAoKICAgICAgICAgIC8qKgogICAgICAgICAgICogSXMgZXF1YWwgdG8gdHJ1ZSBpZiBhIGJyb3dzZXIgc3VwcG9ydHMgY3JlYXRpbmcgdW5rbm93bi9IVE1MNSBlbGVtZW50cwogICAgICAgICAgICogQG1lbWJlck9mIGh0bWw1CiAgICAgICAgICAgKiBAdHlwZSBib29sZWFuCiAgICAgICAgICAgKi8KICAgICAgICAgICdzdXBwb3J0c1Vua25vd25FbGVtZW50cyc6IHN1cHBvcnRzVW5rbm93bkVsZW1lbnRzLAoKICAgICAgICAgIC8qKgogICAgICAgICAgICogQSBmbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIGRvY3VtZW50J3MgYGNyZWF0ZUVsZW1lbnRgIGFuZCBgY3JlYXRlRG9jdW1lbnRGcmFnbWVudGAKICAgICAgICAgICAqIG1ldGhvZHMgc2hvdWxkIGJlIG92ZXJ3cml0dGVuLgogICAgICAgICAgICogQG1lbWJlck9mIGh0bWw1CiAgICAgICAgICAgKiBAdHlwZSBCb29sZWFuCiAgICAgICAgICAgKi8KICAgICAgICAgICdzaGl2TWV0aG9kcyc6IChvcHRpb25zLnNoaXZNZXRob2RzICE9PSBmYWxzZSksCgogICAgICAgICAgLyoqCiAgICAgICAgICAgKiBBIHN0cmluZyB0byBkZXNjcmliZSB0aGUgdHlwZSBvZiBgaHRtbDVgIG9iamVjdCAoImRlZmF1bHQiIG9yICJkZWZhdWx0IHByaW50IikuCiAgICAgICAgICAgKiBAbWVtYmVyT2YgaHRtbDUKICAgICAgICAgICAqIEB0eXBlIFN0cmluZwogICAgICAgICAgICovCiAgICAgICAgICAndHlwZSc6ICdkZWZhdWx0JywKCiAgICAgICAgICAvLyBzaGl2cyB0aGUgZG9jdW1lbnQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgYGh0bWw1YCBvYmplY3Qgb3B0aW9ucwogICAgICAgICAgJ3NoaXZEb2N1bWVudCc6IHNoaXZEb2N1bWVudCwKCiAgICAgICAgICAvL2NyZWF0ZXMgYSBzaGl2ZWQgZWxlbWVudAogICAgICAgICAgY3JlYXRlRWxlbWVudDogY3JlYXRlRWxlbWVudCwKCiAgICAgICAgICAvL2NyZWF0ZXMgYSBzaGl2ZWQgZG9jdW1lbnRGcmFnbWVudAogICAgICAgICAgY3JlYXRlRG9jdW1lbnRGcmFnbWVudDogY3JlYXRlRG9jdW1lbnRGcmFnbWVudAogICAgICAgIH07CgogICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKICAgICAgICAvLyBleHBvc2UgaHRtbDUKICAgICAgICB3aW5kb3cuaHRtbDUgPSBodG1sNTsKCiAgICAgICAgLy8gc2hpdiB0aGUgZG9jdW1lbnQKICAgICAgICBzaGl2RG9jdW1lbnQoZG9jdW1lbnQpOwoKICAgIH0odGhpcywgZG9jdW1lbnQpKTsKICAgIC8qPj5zaGl2Ki8KCiAgICAvLyBBc3NpZ24gcHJpdmF0ZSBwcm9wZXJ0aWVzIHRvIHRoZSByZXR1cm4gb2JqZWN0IHdpdGggcHJlZml4CiAgICBNb2Rlcm5penIuX3ZlcnNpb24gICAgICA9IHZlcnNpb247CgogICAgLy8gZXhwb3NlIHRoZXNlIGZvciB0aGUgcGx1Z2luIEFQSS4gTG9vayBpbiB0aGUgc291cmNlIGZvciBob3cgdG8gam9pbigpIHRoZW0gYWdhaW5zdCB5b3VyIGlucHV0CiAgICAvKj4+cHJlZml4ZXMqLwogICAgTW9kZXJuaXpyLl9wcmVmaXhlcyAgICAgPSBwcmVmaXhlczsKICAgIC8qPj5wcmVmaXhlcyovCiAgICAvKj4+ZG9tcHJlZml4ZXMqLwogICAgTW9kZXJuaXpyLl9kb21QcmVmaXhlcyAgPSBkb21QcmVmaXhlczsKICAgIE1vZGVybml6ci5fY3Nzb21QcmVmaXhlcyAgPSBjc3NvbVByZWZpeGVzOwogICAgLyo+PmRvbXByZWZpeGVzKi8KCiAgICAvKj4+bXEqLwogICAgLy8gTW9kZXJuaXpyLm1xIHRlc3RzIGEgZ2l2ZW4gbWVkaWEgcXVlcnksIGxpdmUgYWdhaW5zdCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgd2luZG93CiAgICAvLyBBIGZldyBpbXBvcnRhbnQgbm90ZXM6CiAgICAvLyAgICogSWYgYSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgbWVkaWEgcXVlcmllcyBhdCBhbGwgKGVnLiBvbGRJRSkgdGhlIG1xKCkgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlCiAgICAvLyAgICogQSBtYXgtd2lkdGggb3Igb3JpZW50YXRpb24gcXVlcnkgd2lsbCBiZSBldmFsdWF0ZWQgYWdhaW5zdCB0aGUgY3VycmVudCBzdGF0ZSwgd2hpY2ggbWF5IGNoYW5nZSBsYXRlci4KICAgIC8vICAgKiBZb3UgbXVzdCBzcGVjaWZ5IHZhbHVlcy4gRWcuIElmIHlvdSBhcmUgdGVzdGluZyBzdXBwb3J0IGZvciB0aGUgbWluLXdpZHRoIG1lZGlhIHF1ZXJ5IHVzZToKICAgIC8vICAgICAgIE1vZGVybml6ci5tcSgnKG1pbi13aWR0aDowKScpCiAgICAvLyB1c2FnZToKICAgIC8vIE1vZGVybml6ci5tcSgnb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY4KScpCiAgICBNb2Rlcm5penIubXEgICAgICAgICAgICA9IHRlc3RNZWRpYVF1ZXJ5OwogICAgLyo+Pm1xKi8KCiAgICAvKj4+aGFzZXZlbnQqLwogICAgLy8gTW9kZXJuaXpyLmhhc0V2ZW50KCkgZGV0ZWN0cyBzdXBwb3J0IGZvciBhIGdpdmVuIGV2ZW50LCB3aXRoIGFuIG9wdGlvbmFsIGVsZW1lbnQgdG8gdGVzdCBvbgogICAgLy8gTW9kZXJuaXpyLmhhc0V2ZW50KCdnZXN0dXJlc3RhcnQnLCBlbGVtKQogICAgTW9kZXJuaXpyLmhhc0V2ZW50ICAgICAgPSBpc0V2ZW50U3VwcG9ydGVkOwogICAgLyo+Pmhhc2V2ZW50Ki8KCiAgICAvKj4+dGVzdHByb3AqLwogICAgLy8gTW9kZXJuaXpyLnRlc3RQcm9wKCkgaW52ZXN0aWdhdGVzIHdoZXRoZXIgYSBnaXZlbiBzdHlsZSBwcm9wZXJ0eSBpcyByZWNvZ25pemVkCiAgICAvLyBOb3RlIHRoYXQgdGhlIHByb3BlcnR5IG5hbWVzIG11c3QgYmUgcHJvdmlkZWQgaW4gdGhlIGNhbWVsQ2FzZSB2YXJpYW50LgogICAgLy8gTW9kZXJuaXpyLnRlc3RQcm9wKCdwb2ludGVyRXZlbnRzJykKICAgIE1vZGVybml6ci50ZXN0UHJvcCAgICAgID0gZnVuY3Rpb24ocHJvcCl7CiAgICAgICAgcmV0dXJuIHRlc3RQcm9wcyhbcHJvcF0pOwogICAgfTsKICAgIC8qPj50ZXN0cHJvcCovCgogICAgLyo+PnRlc3RhbGxwcm9wcyovCiAgICAvLyBNb2Rlcm5penIudGVzdEFsbFByb3BzKCkgaW52ZXN0aWdhdGVzIHdoZXRoZXIgYSBnaXZlbiBzdHlsZSBwcm9wZXJ0eSwKICAgIC8vICAgb3IgYW55IG9mIGl0cyB2ZW5kb3ItcHJlZml4ZWQgdmFyaWFudHMsIGlzIHJlY29nbml6ZWQKICAgIC8vIE5vdGUgdGhhdCB0aGUgcHJvcGVydHkgbmFtZXMgbXVzdCBiZSBwcm92aWRlZCBpbiB0aGUgY2FtZWxDYXNlIHZhcmlhbnQuCiAgICAvLyBNb2Rlcm5penIudGVzdEFsbFByb3BzKCdib3hTaXppbmcnKQogICAgTW9kZXJuaXpyLnRlc3RBbGxQcm9wcyAgPSB0ZXN0UHJvcHNBbGw7CiAgICAvKj4+dGVzdGFsbHByb3BzKi8KCgogICAgLyo+PnRlc3RzdHlsZXMqLwogICAgLy8gTW9kZXJuaXpyLnRlc3RTdHlsZXMoKSBhbGxvd3MgeW91IHRvIGFkZCBjdXN0b20gc3R5bGVzIHRvIHRoZSBkb2N1bWVudCBhbmQgdGVzdCBhbiBlbGVtZW50IGFmdGVyd2FyZHMKICAgIC8vIE1vZGVybml6ci50ZXN0U3R5bGVzKCcjbW9kZXJuaXpyIHsgcG9zaXRpb246YWJzb2x1dGUgfScsIGZ1bmN0aW9uKGVsZW0sIHJ1bGUpeyAuLi4gfSkKICAgIE1vZGVybml6ci50ZXN0U3R5bGVzICAgID0gaW5qZWN0RWxlbWVudFdpdGhTdHlsZXM7CiAgICAvKj4+dGVzdHN0eWxlcyovCgoKICAgIC8qPj5wcmVmaXhlZCovCiAgICAvLyBNb2Rlcm5penIucHJlZml4ZWQoKSByZXR1cm5zIHRoZSBwcmVmaXhlZCBvciBub25wcmVmaXhlZCBwcm9wZXJ0eSBuYW1lIHZhcmlhbnQgb2YgeW91ciBpbnB1dAogICAgLy8gTW9kZXJuaXpyLnByZWZpeGVkKCdib3hTaXppbmcnKSAvLyAnTW96Qm94U2l6aW5nJwoKICAgIC8vIFByb3BlcnRpZXMgbXVzdCBiZSBwYXNzZWQgYXMgZG9tLXN0eWxlIGNhbWVsY2FzZSwgcmF0aGVyIHRoYW4gYGJveC1zaXppbmdgIGh5cGVudGF0ZWQgc3R5bGUuCiAgICAvLyBSZXR1cm4gdmFsdWVzIHdpbGwgYWxzbyBiZSB0aGUgY2FtZWxDYXNlIHZhcmlhbnQsIGlmIHlvdSBuZWVkIHRvIHRyYW5zbGF0ZSB0aGF0IHRvIGh5cGVuYXRlZCBzdHlsZSB1c2U6CiAgICAvLwogICAgLy8gICAgIHN0ci5yZXBsYWNlKC8oW0EtWl0pL2csIGZ1bmN0aW9uKHN0cixtMSl7IHJldHVybiAnLScgKyBtMS50b0xvd2VyQ2FzZSgpOyB9KS5yZXBsYWNlKC9ebXMtLywnLW1zLScpOwoKICAgIC8vIElmIHlvdSdyZSB0cnlpbmcgdG8gYXNjZXJ0YWluIHdoaWNoIHRyYW5zaXRpb24gZW5kIGV2ZW50IHRvIGJpbmQgdG8sIHlvdSBtaWdodCBkbyBzb21ldGhpbmcgbGlrZS4uLgogICAgLy8KICAgIC8vICAgICB2YXIgdHJhbnNFbmRFdmVudE5hbWVzID0gewogICAgLy8gICAgICAgJ1dlYmtpdFRyYW5zaXRpb24nIDogJ3dlYmtpdFRyYW5zaXRpb25FbmQnLAogICAgLy8gICAgICAgJ01velRyYW5zaXRpb24nICAgIDogJ3RyYW5zaXRpb25lbmQnLAogICAgLy8gICAgICAgJ09UcmFuc2l0aW9uJyAgICAgIDogJ29UcmFuc2l0aW9uRW5kJywKICAgIC8vICAgICAgICdtc1RyYW5zaXRpb24nICAgICA6ICdNU1RyYW5zaXRpb25FbmQnLAogICAgLy8gICAgICAgJ3RyYW5zaXRpb24nICAgICAgIDogJ3RyYW5zaXRpb25lbmQnCiAgICAvLyAgICAgfSwKICAgIC8vICAgICB0cmFuc0VuZEV2ZW50TmFtZSA9IHRyYW5zRW5kRXZlbnROYW1lc1sgTW9kZXJuaXpyLnByZWZpeGVkKCd0cmFuc2l0aW9uJykgXTsKCiAgICBNb2Rlcm5penIucHJlZml4ZWQgICAgICA9IGZ1bmN0aW9uKHByb3AsIG9iaiwgZWxlbSl7CiAgICAgIGlmKCFvYmopIHsKICAgICAgICByZXR1cm4gdGVzdFByb3BzQWxsKHByb3AsICdwZngnKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBUZXN0aW5nIERPTSBwcm9wZXJ0eSBlLmcuIE1vZGVybml6ci5wcmVmaXhlZCgncmVxdWVzdEFuaW1hdGlvbkZyYW1lJywgd2luZG93KSAvLyAnbW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lJwogICAgICAgIHJldHVybiB0ZXN0UHJvcHNBbGwocHJvcCwgb2JqLCBlbGVtKTsKICAgICAgfQogICAgfTsKICAgIC8qPj5wcmVmaXhlZCovCgoKICAgIC8qPj5jc3NjbGFzc2VzKi8KICAgIC8vIFJlbW92ZSAibm8tanMiIGNsYXNzIGZyb20gPGh0bWw+IGVsZW1lbnQsIGlmIGl0IGV4aXN0czoKICAgIGRvY0VsZW1lbnQuY2xhc3NOYW1lID0gZG9jRWxlbWVudC5jbGFzc05hbWUucmVwbGFjZSgvKF58XHMpbm8tanMoXHN8JCkvLCAnJDEkMicpICsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIG5ldyBjbGFzc2VzIHRvIHRoZSA8aHRtbD4gZWxlbWVudC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbmFibGVDbGFzc2VzID8gJyBqcyAnICsgY2xhc3Nlcy5qb2luKCcgJykgOiAnJyk7CiAgICAvKj4+Y3NzY2xhc3NlcyovCgogICAgcmV0dXJuIE1vZGVybml6cjsKCn0pKHRoaXMsIHRoaXMuZG9jdW1lbnQpOwo="}},"time_used":601,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":600,"receive":1,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"detran-go-emissao-gov.site/dashboard/images/xampp-logo.svg","fqdn":"detran-go-emissao-gov.site","domain":"detran-go-emissao-gov.site","tld":"site"},"ip":{"addr":"172.67.152.179","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"img","requested_by":"https://detran-go-emissao-gov.site/dashboard/","date":"2026-07-27T14:06:09.578Z","timestamp":1785161169578,"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":"detran-go-emissao-gov.site","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Sun, 26 Jul 2026 14:27:30 GMT","end":"Sat, 24 Oct 2026 15:26:12 GMT"},"fingerprint":{"sha1":"33:BD:B0:00:D4:4F:09:5C:59:02:3B:55:1C:94:52:31:7F:BD:F6:AE","sha256":"F4:70:53:78:85:5E:A4:5C:81:1D:85:52:5D:63:D9:95:2D:9A:2E:D2:93:00:F8:AC:EA:E4:AC:0B:59:BC:2A:A0"}}},"request":{"raw":"GET /dashboard/images/xampp-logo.svg HTTP/1.1\r\nHost: detran-go-emissao-gov.site\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://detran-go-emissao-gov.site/dashboard/\r\nSec-Fetch-Dest: image\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\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\ndate: Mon, 27 Jul 2026 14:06:10 GMT\r\nserver: cloudflare\r\nlast-modified: Tue, 22 Nov 2022 15:37:07 GMT\r\nreport-to: {\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=OPtLABLABwaVBINbjUUmOXrj3n2rxIB0%2BNZlTGEj%2FihjAkVJNk2c8AKGj1AP05JcYQZtCCLaqb%2FS%2F8dlSC3NlET5FUVFJ%2B%2FCTml66JlLfpLFI8rphhYkZ%2F8INVRq9HINNr1O5zDrYVLD%2FqguuQ%3D%3D\"}]}\r\nnel: {\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}\r\npriority: u=5,i\r\ncontent-encoding: zstd\r\netag: W/\"1533-5ee10f1ca2ec0\"\r\ncontent-type: image/svg+xml\r\ncache-control: max-age=14400\r\ncf-cache-status: REVALIDATED\r\ncf-ray: a21c33fdddc97131-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":5427,"size_decoded":3427,"mime_type":"image/svg+xml","magic":"SVG Scalable Vector Graphics image","md5":"70ad98330d991043dcf250eae192e431","sha1":"ac950edf487153a55afe14b4fe34b8b52620dabd","sha256":"96e5b8b61d5bdc5e67d7746bcc72141eaca78302aec6ac86dfaaab8be9bd4053","sha512":"31bc4fd2a7f4891bb5c6058ece7b6d3ba878df8211e0e0aa14c5db3461eb552aeb575d7d8243d1e9e6c34328f9368af830d124ae115cd425966d1cb7ba492611","ssdeep":"96:7xXQSf3x5qxtxlil2BUqcuqGFIz7UVNFKLpMMjbaxSLL1DnWqd+/XMFrk:9QA3xM9AbES78N7MrpWq+/cFrk","tlshash":"8ab174da433ad5f871952b6c99353ec23bf064ae80a1d1dcc3ba6c109453ed1666ce28","first_seen":"2023-05-08T16:45:43Z","last_seen":"2026-07-27T14:06:48.023461Z","times_seen":756,"resource_available":false,"data":"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTQxLjIxOXB4IiBoZWlnaHQ9IjE0Mi41NDhweCIgdmlld0JveD0iMCAwIDE0MS4yMTkgMTQyLjU0OCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTQxLjIxOSAxNDIuNTQ4Ig0KCSB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIGZpbGw9IiNGQjdBMjQiIGQ9Ik03MC41NywwLjAwMWMxOC4zMjksMCwzNi42NTksMCw1NC45ODgtMC4wMDFjMi4zLDAsNC41NzksMC4yLDYuNzg2LDAuODc0DQoJYzQuNzg1LDEuNDYxLDcuMzE5LDQuODk4LDguMzEyLDkuNjM1YzAuMzk0LDEuODc4LDAuNTA2LDMuNzkzLDAuNTEsNS43MDdjMC4wMjksMTIuODU4LDAuMDUxLDI1LjcxNiwwLjA1MiwzOC41NzQNCgljMC4wMDEsMjMuNDE4LDAuMDA0LDQ2LjgzNi0wLjA0NCw3MC4yNTRjLTAuMDA3LDMuMjc4LTAuMTgxLDYuNTkyLTEuNzk3LDkuNTc4Yy0xLjc5MiwzLjMxMi00LjI0Niw1LjkzMy03Ljk3MSw3LjA4Ng0KCWMtMC42NzMsMC4yMDgtMS4zNzYsMC40NDUtMi4wNjYsMC40NDVjLTEuNTksMC4wMDEtMy4xMzcsMC4zOTYtNC43MjIsMC4zOTZjLTM1Ljg5My0wLjAwMy03MS43ODYsMC4wMTgtMTA3LjY3OS0wLjAzOQ0KCWMtMi45MTktMC4wMDUtNS44ODYtMC4yMTgtOC42NTktMS40MDhjLTAuNTUyLTAuMjM3LTEuMTA5LTAuNDM2LTEuNTk0LTAuODA2Yy0zLjUzMS0yLjY5NS01LjkyOC02LjA1Ni02LjQ0Mi0xMC42MDQNCglDMC4wNTksMTI4LjA1MiwwLDEyNi40MjEsMCwxMjQuNzgxYzAuMDA2LTM2LjQ0LDAuMDA5LTcyLjg4LDAuMDI4LTEwOS4zMmMwLjAwMS0yLjExNCwwLjAyMy00LjI2NCwwLjY3Mi02LjI4Nw0KCWMxLjcyOS01LjM5Miw1LjUxMi04LjMzNSwxMS4xMi04LjkzM2MxLjMwMy0wLjEzOSwyLjYxOC0wLjIyOSwzLjkyNy0wLjIzQzM0LjAyMS0wLjAwNCw1Mi4yOTYsMC4wMDEsNzAuNTcsMC4wMDF6IE03MS4xNTEsOTAuNjc2DQoJYzAuMzgxLDIuMTU2LDAuNjg2LDQuMDQ0LDEuMzMxLDUuODUyYzMuOTYxLDExLjExLDE1LjczMSwyMC4yOTMsMzEuMDg2LDE2LjU5M2MxMC45OTgtMi42NSwxOC45OTItMTIuNzg2LDE5LjMzOS0yNC4wOQ0KCWMwLjE2Ni01LjQxNy0xLjEyOC0xMC40MDQtNC4wNi0xNC45NDljLTAuNTA2LTAuNzg1LTAuNTQ3LTEuMzk0LTAuMTUyLTIuMjM4YzEuNzk1LTMuODMxLDMuMDI0LTcuODUsMy42ODYtMTIuMDMxDQoJYzAuNjYzLTQuMTg1LDAuODAzLTguMzcyLTAuMDAxLTEyLjU2M2MtMS45MDItOS45MTctMTEuOTg1LTIwLjU5NC0yNS41OTgtMjAuNDY4QzgzLjM1LDI2LjkwNyw3My44NzQsMzcuMDM3LDcxLjgyOCw0Ni43MTgNCgljLTAuMjQ3LDEuMTY3LTAuNDM2LDIuMzQ3LTAuNjk5LDMuNzc2Yy0wLjE3NS0wLjc4OS0wLjMyNi0xLjMxNC0wLjQwNi0xLjg0OWMtMS41ODgtMTAuNjU2LTExLjc2My0yMC4xMzItMjIuNzQ2LTIxLjE3DQoJYy0xMi40OTItMS4xODItMjEuODE4LDUuOTM5LTI2LjA2NywxNC4zMjhjLTEuNDUsMi44NjQtMi4yMjYsNS45MjItMi40NzcsOS4xMTljLTAuNDcsNS45ODEsMC44MjQsMTEuNTIxLDQuMTU5LDE2LjUzOA0KCWMwLjM4OSwwLjU4NSwwLjM5NSwxLjA0MSwwLjA4NCwxLjY0NWMtMi4xNzIsNC4yMjQtMy41NjQsOC43MDMtNC4wNSwxMy40MjRjLTAuNDU1LDQuNDE5LTAuNTgxLDguODQ2LDAuNjc2LDEzLjE4Nw0KCWMzLjQ3MSwxMS45ODIsMTUuMDE1LDE5LjY5NSwyNy41MTQsMTguMzE4YzEwLjU3NC0xLjE2NSwxNy42MjctNy4wMTgsMjEuNzY2LTE2LjYyM0M3MC40NjYsOTUuMzYyLDcwLjc0OCw5My4xMzcsNzEuMTUxLDkwLjY3NnoiLz4NCjxwYXRoIGZpbGw9IiNGRkZGRkYiIGQ9Ik03MS4xNTEsOTAuNjc2Yy0wLjQwMiwyLjQ2MS0wLjY4NCw0LjY4NS0xLjU2OCw2LjczNWMtNC4xMzksOS42MDUtMTEuMTkyLDE1LjQ1OC0yMS43NjYsMTYuNjIzDQoJYy0xMi40OTksMS4zNzctMjQuMDQzLTYuMzM3LTI3LjUxNC0xOC4zMThjLTEuMjU4LTQuMzQyLTEuMTMyLTguNzY4LTAuNjc2LTEzLjE4N2MwLjQ4Ny00LjcyMiwxLjg3OC05LjIsNC4wNS0xMy40MjQNCgljMC4zMTEtMC42MDQsMC4zMDUtMS4wNi0wLjA4NC0xLjY0NWMtMy4zMzUtNS4wMTYtNC42MjktMTAuNTU3LTQuMTU5LTE2LjUzOGMwLjI1MS0zLjE5NywxLjAyNy02LjI1NSwyLjQ3Ny05LjExOQ0KCWM0LjI0OC04LjM5LDEzLjU3NS0xNS41MSwyNi4wNjctMTQuMzI4YzEwLjk4NCwxLjAzOSwyMS4xNTgsMTAuNTE0LDIyLjc0NiwyMS4xN2MwLjA4LDAuNTM1LDAuMjMsMS4wNiwwLjQwNiwxLjg0OQ0KCWMwLjI2My0xLjQyOSwwLjQ1My0yLjYwOCwwLjY5OS0zLjc3NmMyLjA0Ni05LjY4MSwxMS41MjItMTkuODExLDI0Ljk1NC0xOS45MzZjMTMuNjE0LTAuMTI2LDIzLjY5NiwxMC41NTEsMjUuNTk4LDIwLjQ2OA0KCWMwLjgwNCw0LjE5MSwwLjY2NCw4LjM3OCwwLjAwMSwxMi41NjNjLTAuNjYzLDQuMTgxLTEuODkxLDguMi0zLjY4NiwxMi4wMzFjLTAuMzk2LDAuODQ1LTAuMzU1LDEuNDUzLDAuMTUyLDIuMjM4DQoJYzIuOTMyLDQuNTQ0LDQuMjI2LDkuNTMyLDQuMDYsMTQuOTQ5Yy0wLjM0NywxMS4zMDMtOC4zNDEsMjEuNDM5LTE5LjMzOSwyNC4wOWMtMTUuMzU1LDMuNy0yNy4xMjUtNS40ODMtMzEuMDg2LTE2LjU5Mw0KCUM3MS44MzcsOTQuNzIsNzEuNTMxLDkyLjgzMiw3MS4xNTEsOTAuNjc2eiBNOTkuMDQ3LDcwLjgxOGMwLjE2NC0wLjYzOSwwLjY1OS0xLjAyMiwxLjAxNS0xLjQ5NQ0KCWMzLjg1LTUuMTE2LDUuODc1LTEwLjgzMSw1LjQyMy0xNy4yNjZjLTAuMzI5LTQuNjk3LTQuMTkyLTguMDA1LTguODY4LTcuODNjLTQuNjc5LDAuMTc1LTguMjA1LDMuNzg0LTguMjcxLDguNDY2DQoJYy0wLjAwNSwwLjM4MywwLjAxOCwwLjc2Ny0wLjAwNiwxLjE0OGMtMC4zMjIsNC45OS0zLjA3NSw3LjcyMy03LjI0Nyw4LjAyOGMtMC43NjIsMC4wNTYtMS41MjYsMC4xMjQtMi4yODksMC4xMjYNCglDNzMuMzg5LDYyLjAwNyw2Ny45NzUsNjIuMDA1LDYyLjU2LDYyYy0yLjM2NS0wLjAwMi00LjcxLDAuMjU1LTYuOTYyLDAuOTVjLTEwLjUxMywzLjI0NC0xNi42NDMsMTAuNDMzLTE4LjY3MywyMS4xNDgNCgljLTAuNDAyLDIuMTItMC43NjQsNC4zMi0wLjA2OSw2LjQ5OGMwLjk5NywzLjEyMywyLjg1Niw1LjQ0Niw2LjE0Nyw2LjIyM2MzLjQxMSwwLjgwNSw2LjM4Mi0wLjA4Niw4Ljc0Mi0yLjc2NQ0KCWMxLjUyNi0xLjczMiwyLjAwNy0zLjc5LDIuMTIxLTYuMDQ5YzAuMjk1LTUuODEsMy40NTktOC43MTQsOC43MzUtOC42N2M4LjA5NCwwLjA2NywxNi4xODksMC4wMTQsMjQuMjg0LDAuMDINCgljMS40MzcsMC4wMDEsMS40NSwwLjAyLDEuNDU3LDEuNDQxYzAuMDE0LDIuNjI1LTAuMDY3LDUuMjUzLDAuMDM0LDcuODc1YzAuMTY1LDQuMjgsMy45MzEsNy44MzgsOC4yOTcsNy45NjMNCgljNC41MDIsMC4xMjksOC41MTUtMy4yMDEsOC44MDgtNy41NDhjMC4yNTMtMy43NjIsMC4yMzctNy41NDgtMC4wMS0xMS4zMTNjLTAuMTkxLTIuOTE1LTEuNzY4LTQuOTkyLTQuNDQtNi4xOTgNCglDMTAwLjM5LDcxLjI4Nyw5OS43MTYsNzEuMDcxLDk5LjA0Nyw3MC44MTh6IE00OC4zMDgsNjEuOTg3YzEuNzQxLDAsMy4xNjItMC4wMTYsNC41ODIsMC4wMDdjMC43MDQsMC4wMTEsMC45NjUtMC4yOTIsMC45NTktMC45ODINCgljLTAuMDIzLTIuNzMxLDAuMTE4LTUuNDcxLTAuMDU2LTguMTkyYy0wLjIzLTMuNTktMi4xMzktNi4xODUtNS40ODEtNy40OTRjLTMuNDI3LTEuMzQyLTYuNTYzLTAuNTc2LTkuMjE1LDEuOTU1DQoJYy0yLjY2NCwyLjU0My0zLjAxOSw1LjY1My0yLjA4Nyw5LjA1N2MwLjg1NiwzLjEyOCwyLjg3OSw0LjkwNSw2LjA2LDUuNDQyQzQ0LjkxOCw2Mi4wOTEsNDYuNzc2LDYxLjk0Miw0OC4zMDgsNjEuOTg3eiIvPg0KPHBhdGggZmlsbD0iI0ZCN0EyNCIgZD0iTTk5LjA0Nyw3MC44MThjMC42NywwLjI1MywxLjM0NCwwLjQ2OSwxLjk4NSwwLjc1OGMyLjY3MiwxLjIwNSw0LjI0OSwzLjI4Myw0LjQ0LDYuMTk4DQoJYzAuMjQ2LDMuNzY1LDAuMjYzLDcuNTUxLDAuMDEsMTEuMzEzYy0wLjI5Myw0LjM0Ny00LjMwNyw3LjY3Ni04LjgwOCw3LjU0OGMtNC4zNjUtMC4xMjUtOC4xMzEtMy42ODMtOC4yOTctNy45NjMNCgljLTAuMTAxLTIuNjIxLTAuMDItNS4yNS0wLjAzNC03Ljg3NWMtMC4wMDgtMS40MjEtMC4wMi0xLjQ0LTEuNDU3LTEuNDQxYy04LjA5NS0wLjAwNi0xNi4xOSwwLjA0Ny0yNC4yODQtMC4wMg0KCWMtNS4yNzYtMC4wNDQtOC40NCwyLjg2MS04LjczNSw4LjY3Yy0wLjExNSwyLjI1OS0wLjU5NSw0LjMxNy0yLjEyMSw2LjA0OWMtMi4zNiwyLjY3OC01LjMzMSwzLjU3LTguNzQyLDIuNzY1DQoJYy0zLjI5MS0wLjc3Ny01LjE1LTMuMS02LjE0Ny02LjIyM2MtMC42OTUtMi4xNzctMC4zMzMtNC4zNzgsMC4wNjktNi40OThjMi4wMy0xMC43MTUsOC4xNTktMTcuOTA0LDE4LjY3My0yMS4xNDgNCgljMi4yNTItMC42OTUsNC41OTYtMC45NTIsNi45NjItMC45NWM1LjQxNSwwLjAwNSwxMC44MjksMC4wMDcsMTYuMjQ0LTAuMDA0YzAuNzYzLTAuMDAyLDEuNTI3LTAuMDcsMi4yODktMC4xMjYNCgljNC4xNzItMC4zMDUsNi45MjUtMy4wMzgsNy4yNDctOC4wMjhjMC4wMjUtMC4zODEsMC4wMDEtMC43NjYsMC4wMDYtMS4xNDhjMC4wNjYtNC42ODEsMy41OTItOC4yOSw4LjI3MS04LjQ2Ng0KCWM0LjY3Ni0wLjE3NSw4LjUzOSwzLjEzMyw4Ljg2OCw3LjgzYzAuNDUxLDYuNDM1LTEuNTczLDEyLjE1LTUuNDIzLDE3LjI2NkM5OS43MDYsNjkuNzk2LDk5LjIxLDcwLjE3OSw5OS4wNDcsNzAuODE4eiIvPg0KPHBhdGggZmlsbD0iI0ZCN0EyNCIgZD0iTTQ4LjMwOCw2MS45ODdjLTEuNTMzLTAuMDQ1LTMuMzksMC4xMDUtNS4yMzgtMC4yMDdjLTMuMTgxLTAuNTM3LTUuMjA0LTIuMzE0LTYuMDYtNS40NDINCgljLTAuOTMxLTMuNDA0LTAuNTc3LTYuNTE1LDIuMDg3LTkuMDU3YzIuNjUyLTIuNTMxLDUuNzg4LTMuMjk2LDkuMjE1LTEuOTU1YzMuMzQyLDEuMzA4LDUuMjUxLDMuOTA0LDUuNDgxLDcuNDk0DQoJYzAuMTc0LDIuNzIsMC4wMzMsNS40NjEsMC4wNTYsOC4xOTJjMC4wMDYsMC42OS0wLjI1NiwwLjk5NC0wLjk1OSwwLjk4MkM1MS40Nyw2MS45Nyw1MC4wNSw2MS45ODcsNDguMzA4LDYxLjk4N3oiLz4NCjwvc3ZnPg0K"}},"time_used":584,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":583,"receive":1,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"detran-go-emissao-gov.site/dashboard/images/favicon.png","fqdn":"detran-go-emissao-gov.site","domain":"detran-go-emissao-gov.site","tld":"site"},"ip":{"addr":"172.67.152.179","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"img","requested_by":"https://detran-go-emissao-gov.site/dashboard/","date":"2026-07-27T14:06:10.377Z","timestamp":1785161170377,"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":"detran-go-emissao-gov.site","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Sun, 26 Jul 2026 14:27:30 GMT","end":"Sat, 24 Oct 2026 15:26:12 GMT"},"fingerprint":{"sha1":"33:BD:B0:00:D4:4F:09:5C:59:02:3B:55:1C:94:52:31:7F:BD:F6:AE","sha256":"F4:70:53:78:85:5E:A4:5C:81:1D:85:52:5D:63:D9:95:2D:9A:2E:D2:93:00:F8:AC:EA:E4:AC:0B:59:BC:2A:A0"}}},"request":{"raw":"GET /dashboard/images/favicon.png HTTP/1.1\r\nHost: detran-go-emissao-gov.site\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://detran-go-emissao-gov.site/dashboard/\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\ndate: Mon, 27 Jul 2026 14:06:11 GMT\r\nserver: cloudflare\r\nlast-modified: Tue, 22 Nov 2022 15:37:07 GMT\r\netag: \"9cc-5ee10f1ca2ec0\"\r\naccept-ranges: bytes\r\npriority: u=6,i=?0\r\nserver-timing: cfExtPri\r\nreport-to: {\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=qYrH6w94fpq2PhSfjCohZQGOFZuwKhbtnXgCLEGlZ40S5aB91aI7JdOTYSCZ9z%2BmgslFEgwfMZnf3vyswq9MAJD7DQzbJ8ZRgvRpao%2BnenKLyW15VRQhNTlFrYZQlbzuG7vHhyiRs7BUBpqw8A%3D%3D\"}]}\r\ncontent-type: image/png\r\ncache-control: max-age=14400\r\ncf-cache-status: REVALIDATED\r\nnel: {\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}\r\ncf-ray: a21c3402de097131-OSL\r\nalt-svc: h3=\":443\"; ma=86400\r\ncontent-length: 2508\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":2508,"size_decoded":3226,"mime_type":"image/png","magic":"PNG image data, 47 x 48, 8-bit/color RGBA, non-interlaced","md5":"56f7c04657931f2d0b79371b2d6e9820","sha1":"18f9bd42f53a68beda79f9350a638503eee64883","sha256":"0ce37ed9046fdaaee0efbc4d6705459427204d7353e961e6c20fbb0d5e081a46","sha512":"eb2e754dc6410381a9a0e42627e9ab76cbac7b7d1563e3bcdcbd9934b80ce524dfecf2023c64c326f0ecc77a19841a6fed5f8b73ef611e155b0abfe6962666f2","ssdeep":"","tlshash":"0051fa96f591d492ef09ebf120e6707a9e0185c44b94e86c699f502920d24f9c07ecf3","first_seen":"2023-05-08T16:45:43Z","last_seen":"2026-07-27T14:06:48.024505Z","times_seen":771,"resource_available":false,"data":"iVBORw0KGgoAAAANSUhEUgAAAC8AAAAwCAYAAACBpyPiAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjc4RTNGNTczNUFCNjExRTNCRDA2RUYzMURENDFGRDJBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjc4RTNGNTc0NUFCNjExRTNCRDA2RUYzMURENDFGRDJBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NzhFM0Y1NzE1QUI2MTFFM0JEMDZFRjMxREQ0MUZEMkEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NzhFM0Y1NzI1QUI2MTFFM0JEMDZFRjMxREQ0MUZEMkEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6m/uT7AAAGP0lEQVR42uxaC2xTVRg+596267p1HXsxYCtjYxtsY7BVfBBAQaOIoKBgUPCBSDDKQ8SgECHiJGgUExASSSASguFlpoiIgJAgIgRY18GA0W0VNspzlK2P9XEfx/8OHBn3lPXekUgTTvJ37e7tOd/9z/9///efDSMYoQU5afBjEdgosD5gLLo/Rx3Yz2Bf6pbVN2EAngIfjt4CHS2jHqyUgZfFUQZcGjlg8yTwL6DoHOMl8OYoBd+PQdE7tNEMHj0A/38NjaK7jal+dsibZ3C/EQib0uMRwgzxXPWQ2r9E4cCaAuS5GtvZFLhbhocZNb+GyR2WhGLi0mEKPRIFF3E1OMUjGzVgRfA5IjhSkSKd3sVqEDt+qZUpebEQYRwT5q6QeGLnSWHbhxYkcJQ9ZhH78nIrUzxmgJRsYdfi/I38ujdY0mDt2XXweiOnmbOrFjxdEJE7fC47t/ypPijgvg2Q1SLN3N3VOMlcFOEec8LWeedE2/Zc9TEP3tLM2mGPGLg04pLytB/sdUi71R6b0zZUKgDeRoOwS1nYXHJRNXj2ydlVEKOFijMpPjmfHVdmbVug8GkHzhpcoobHNVPXhyAnVIAHrzOPv9NLNY2VTsiXQo4Z+2kg7E2hVkKaL7YiEiZyY+KymIcm1ChmGyb/CQc8QLbsAhGRsH2xVTy+LVPaHKbfyH/YV1ZapLjumE04jh02/RROSOtPm1/YPKcSElxKXgPS6i9o3t7I4MxBsiRlHn3NJx7bqszzuO9QF3XRnUsrxaObS4HOUsGSxNN7LcIP71VQJx86NZm2BoCpAeAl7c7jAhn82imi5BgZjpSsNMVhA1+ikq1oLU+Q/a72ID28tLHp1Dkqf/LI+SWQQdxX/PLYiElUHvPhCwWh3BunKCFaLtFrhcDz8tVISDF4cs1BbQWZwmdaulTTW5tDpNmZTYOOjSnxlB1xK05Y8eRvmczQt+T0Oa7MgoLeCvHsgRREBN3NWfRBSTygoI8Qn8tLnTDg8RPnySZh1xcx4M0c2fXYxHoIszyZEz1XmxWDJ4227gDmPNBV747otYh9dZWlfVuCPkHY/ZWNWzKQwPustocIo4zAwiffkNf9VBx1hwRVRUr4tSxwt+uQvHaurNQNYgp2wyf1wVhdW6G/wD4+o5i6RsWPZnWqMuAJK6DEfStPCPtWFt8LactO/FoAVsGU9euJszpHleeZZz+ixi9xHGkE4EXoHg1h0+xu4GFZJRXrDrnUaRu9UQAxVUChLsRvfJe7p40MEROE8oW9EN+RFaF6Z8gqd0TyIG+4dLCTR0mgBpC72fTKhv3IkHgOMRrxrmC9180A2HjHAxhJy8UWnJxluo1O14N5ZHK1+Pf6IkXgQQlS+Vw8vOEy9bjEmFqjff/3bBRr6t+Zo/nV448BbQ6WXfC7W+HV1MGJD0/iALzCsEnoTvWe2GijUqFmynfdALgusv4tclICSZ6sXNvoDPQLQa+JAobDGcXduxz7OoNcNmh0JjXahuoebEiUVzxdXEMYb1J3D6dRuzsOm3okUvSOX7m2uXKWrm1GL5SlPztyJr06Xj9vp/L6qPkDgNcvdZjXMrEaqrkMD2m90aRc21TtMDPDpsvBF4/JBQ3iEPetuIH4IMOMmBnPDBxLZQNxz3LoRb+5Bv1s6h1tol778aEkYf+3FcTVyDOWl1JA8FFbRXLmj6Cq0wPtJ8frgPr6qopfLuAEvdOLfX5JBTCGRR3/kyC37DGCvE16xRWW3zJXq7pqli/0Sz0BdF4l8CAX1MwBrebpcMA7BU9qD/aGsm1T7DD7n1ax6pe+tw6RGH7tZBaKkFfRHK6GamH7opIunVUK5QsGice22KgdFM1bNfut/IbppR3ldVUPfs0kN5T/yxEBd1bb+BXPFXR27BfZcZ90Y5/BTki+ZqCzAqr09V4/C57SiKf25ITXSwkhdtxnJ5gBo3MRZuT87bthF3Z+jjs7KVMMvv0LiT29OG/4OZyS3UaPpMlhIPaDvaG1i4/8UIdFOHPQJZye3wQCkEfuK7Gk/rAZGnCDIixKwd9P48EfFx6AVwneG6XYXRL4qigFXyWBXx2l4FcxumX1m+DN91EGfB3gLv8vYaeBzUI3//vjfs0BH5h0lD4DrE2r/yvAABeeX51f2vniAAAAAElFTkSuQmCC"}},"time_used":625,"timings":{"blocked":0,"dns":0,"connect":0,"send":0,"wait":625,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"detran-go-emissao-gov.site/","fqdn":"detran-go-emissao-gov.site","domain":"detran-go-emissao-gov.site","tld":"site"},"ip":{"addr":"172.67.152.179","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":true,"resource_type":"document","requested_by":"","date":"2026-07-27T14:06:08.056Z","timestamp":1785161168056,"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":"detran-go-emissao-gov.site","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Sun, 26 Jul 2026 14:27:30 GMT","end":"Sat, 24 Oct 2026 15:26:12 GMT"},"fingerprint":{"sha1":"33:BD:B0:00:D4:4F:09:5C:59:02:3B:55:1C:94:52:31:7F:BD:F6:AE","sha256":"F4:70:53:78:85:5E:A4:5C:81:1D:85:52:5D:63:D9:95:2D:9A:2E:D2:93:00:F8:AC:EA:E4:AC:0B:59:BC:2A:A0"}}},"request":{"raw":"GET / HTTP/1.1\r\nHost: detran-go-emissao-gov.site\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 302 \r\ndate: Mon, 27 Jul 2026 14:06:08 GMT\r\nserver: cloudflare\r\nx-powered-by: PHP/8.2.12\r\nlocation: https://detran-go-emissao-gov.site/dashboard/\r\npriority: u=0,i\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=i25LrE3sZCOeFsxEcesMUwNCNU9sGZT9n7%2BA2rUOU2pEGYU149j4ibkKQWG619OOTGzqSd5vjJcUZJVUetQguD08oJ5cQtxwkcFbqrCeXK6XuKfY%2Fz%2FZzyAmjMzHe8nzkRtjtq95GjVB0rd%2FPA%3D%3D\"}]}\r\ncontent-type: text/html; charset=UTF-8\r\ncf-cache-status: DYNAMIC\r\ncf-ray: a21c33f4fd347131-OSL\r\nalt-svc: h3=\":443\"; ma=86400\r\nserver-timing: cfExtPri\r\n\r\n","headers":null,"cookies":null,"status_code":"302","status_text":"","fingerprints":[{"name":"PHP:8.2.12","description":"PHP is a general-purpose scripting language used for web development.","website":"https://php.net","common_platform_enumeration":"cpe:2.3:a:php:php:*:*:*:*:*:*:*:*","icon":"PHP.svg","categories":["Programming languages"]},{"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":0,"size_decoded":0,"mime_type":"text/html","magic":"","md5":"d41d8cd98f00b204e9800998ecf8427e","sha1":"da39a3ee5e6b4b0d3255bfef95601890afd80709","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","sha512":"cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e","ssdeep":"","tlshash":"","first_seen":"0001-01-01T00:00:00Z","last_seen":"2026-07-27T23:32:54.780893Z","times_seen":17570627,"resource_available":true,"data":null}},"time_used":685,"timings":{"blocked":-1,"dns":82,"connect":13,"send":0,"wait":590,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"detran-go-emissao-gov.site/dashboard/","fqdn":"detran-go-emissao-gov.site","domain":"detran-go-emissao-gov.site","tld":"site"},"ip":{"addr":"172.67.152.179","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":true,"resource_type":"document","requested_by":"","date":"2026-07-27T14:06:08.750Z","timestamp":1785161168750,"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":"detran-go-emissao-gov.site","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Sun, 26 Jul 2026 14:27:30 GMT","end":"Sat, 24 Oct 2026 15:26:12 GMT"},"fingerprint":{"sha1":"33:BD:B0:00:D4:4F:09:5C:59:02:3B:55:1C:94:52:31:7F:BD:F6:AE","sha256":"F4:70:53:78:85:5E:A4:5C:81:1D:85:52:5D:63:D9:95:2D:9A:2E:D2:93:00:F8:AC:EA:E4:AC:0B:59:BC:2A:A0"}}},"request":{"raw":"GET /dashboard/ HTTP/1.1\r\nHost: detran-go-emissao-gov.site\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\nConnection: keep-alive\r\nUpgrade-Insecure-Requests: 1\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\ndate: Mon, 27 Jul 2026 14:06:09 GMT\r\nserver: cloudflare\r\nlast-modified: Sun, 19 Nov 2023 11:10:25 GMT\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=if3ThF7mpPjM43PEPSEqfDGP%2BfRkFgMytwkJoPxDqGpcBnt6ovZQ4AKU0UWfM2rJZStfJYDSn6ug0m1jxAyoS2LC2CD3MqnUP31xrCmu93qMVcF7mu2TQ%2Fhde7vDO0ppa9UUV56KUs8QSSqNdA%3D%3D\"}]}\r\npriority: u=0,i\r\ncf-cache-status: DYNAMIC\r\ncontent-encoding: zstd\r\ncontent-type: text/html\r\ncf-ray: a21c33f8bd7c7131-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":"Modernizr","description":"Modernizr is a JavaScript library that detects the features available in a user's browser.","website":"https://modernizr.com","common_platform_enumeration":"","icon":"Modernizr.svg","categories":["JavaScript libraries"]},{"name":"jQuery CDN","description":"jQuery CDN is a way to include jQuery in your website without actually downloading and keeping it your website's folder.","website":"https://code.jquery.com/","common_platform_enumeration":"","icon":"jQuery.svg","categories":["CDN"]},{"name":"jQuery:1.10.2","description":"jQuery is a JavaScript library which is a free, open-source software designed to simplify HTML DOM tree traversal and manipulation, as well as event handling, CSS animation, and Ajax.","website":"https://jquery.com","common_platform_enumeration":"cpe:2.3:a:jquery:jquery:*:*:*:*:*:*:*:*","icon":"jQuery.svg","categories":["JavaScript libraries"]},{"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"]},{"name":"ZURB Foundation","description":"Zurb Foundation is used to prototype in the browser. Allows rapid creation of websites or applications while leveraging mobile and responsive technology. The front end framework is the collection of HTML, CSS, and Javascript containing design patterns.","website":"https://foundation.zurb.com","common_platform_enumeration":"","icon":"ZURB Foundation.png","categories":["UI frameworks"]}],"data":{"size":5187,"size_decoded":2702,"mime_type":"text/html","magic":"HTML document, ASCII text, with very long lines (350)","md5":"d440b266b54bcfeb010d63075c435459","sha1":"5f3286dd6de855bc4b1cfa79dc0066eab154e822","sha256":"fc8ecaa8e87debb596ab63431a3091ff7270e5c928ae344d9ac0d63948ee9bb2","sha512":"f6dbffdfb0c5cf65158e4fdfbc17c542bbe7c404a9324b4d38005494346d2b9b80ffe924e45d22cd315ec5d13ce7bd35cc1995ad19a0bccb2eb8952e1ab7c602","ssdeep":"48:0Ek88L4CAWJmHXVp41wljyQOrjEZaVqNJl+8uzxWQoxWg4CNlHGrflPxW0xWn15j:5H2DwHXVB1UrjZ/LxCjZXsFOVo4H+wWa","tlshash":"2db1933b64e92227125386a17a706b2cfed2d15beb0a694472dc521d9f93e83cd1f0cd","first_seen":"2023-12-08T13:55:31Z","last_seen":"2026-07-27T14:06:48.026921Z","times_seen":434,"resource_available":true,"data":"PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICAgIDwhLS0gQWx3YXlzIGZvcmNlIGxhdGVzdCBJRSByZW5kZXJpbmcgZW5naW5lIG9yIHJlcXVlc3QgQ2hyb21lIEZyYW1lIC0tPgogICAgPG1ldGEgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSIgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIj4KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgoKICAgIDwhLS0gVXNlIHRpdGxlIGlmIGl0J3MgaW4gdGhlIHBhZ2UgWUFNTCBmcm9udG1hdHRlciAtLT4KICAgIDx0aXRsZT5XZWxjb21lIHRvIFhBTVBQPC90aXRsZT4KCiAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iWEFNUFAgaXMgYW4gZWFzeSB0byBpbnN0YWxsIEFwYWNoZSBkaXN0cmlidXRpb24gY29udGFpbmluZyBNYXJpYURCLCBQSFAgYW5kIFBlcmwuIiAvPgogICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9InhhbXBwLCBhcGFjaGUsIHBocCwgcGVybCwgbWFyaWFkYiwgb3BlbiBzb3VyY2UgZGlzdHJpYnV0aW9uIiAvPgoKICAgIDxsaW5rIGhyZWY9Ii9kYXNoYm9hcmQvc3R5bGVzaGVldHMvbm9ybWFsaXplLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgLz48bGluayBocmVmPSIvZGFzaGJvYXJkL3N0eWxlc2hlZXRzL2FsbC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIC8+CiAgICA8bGluayBocmVmPSIvL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvMy4xLjAvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiAvPgoKICAgIDxzY3JpcHQgc3JjPSIvZGFzaGJvYXJkL2phdmFzY3JpcHRzL21vZGVybml6ci5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4KCgogICAgPGxpbmsgaHJlZj0iL2Rhc2hib2FyZC9pbWFnZXMvZmF2aWNvbi5wbmciIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2UvcG5nIiAvPgoKCiAgPC9oZWFkPgoKICA8Ym9keSBjbGFzcz0iaW5kZXgiPgogICAgPGRpdiBpZD0iZmItcm9vdCI+PC9kaXY+CiAgICA8c2NyaXB0PihmdW5jdGlvbihkLCBzLCBpZCkgewogICAgICB2YXIganMsIGZqcyA9IGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUocylbMF07CiAgICAgIGlmIChkLmdldEVsZW1lbnRCeUlkKGlkKSkgcmV0dXJuOwogICAgICBqcyA9IGQuY3JlYXRlRWxlbWVudChzKTsganMuaWQgPSBpZDsKICAgICAganMuc3JjID0gIi8vY29ubmVjdC5mYWNlYm9vay5uZXQvZW5fVVMvYWxsLmpzI3hmYm1sPTEmYXBwSWQ9Mjc3Mzg1Mzk1NzYxNjg1IjsKICAgICAgZmpzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGpzLCBmanMpOwogICAgfShkb2N1bWVudCwgJ3NjcmlwdCcsICdmYWNlYm9vay1qc3NkaycpKTs8L3NjcmlwdD4KICAgIDxoZWFkZXIgY2xhc3M9ImhlYWRlciBjb250YWluLXRvLWdyaWQiPgogICAgICA8bmF2IGNsYXNzPSJ0b3AtYmFyIiBkYXRhLXRvcGJhcj4KICAgICAgICA8dWwgY2xhc3M9InRpdGxlLWFyZWEiPgogICAgICAgICAgPGxpIGNsYXNzPSJuYW1lIj4KICAgICAgICAgICAgPGgxPjxhIGhyZWY9Ii9kYXNoYm9hcmQvaW5kZXguaHRtbCI+QXBhY2hlIEZyaWVuZHM8L2E+PC9oMT4KICAgICAgICAgIDwvbGk+CiAgICAgICAgICA8bGkgY2xhc3M9InRvZ2dsZS10b3BiYXIgbWVudS1pY29uIj4KICAgICAgICAgICAgPGEgaHJlZj0iIyI+CiAgICAgICAgICAgICAgPHNwYW4+TWVudTwvc3Bhbj4KICAgICAgICAgICAgPC9hPgogICAgICAgICAgPC9saT4KICAgICAgICA8L3VsPgoKICAgICAgICA8c2VjdGlvbiBjbGFzcz0idG9wLWJhci1zZWN0aW9uIj4KICAgICAgICAgIDwhLS0gTGVmdCBOYXYgU2VjdGlvbiAtLT4KICAgICAgICAgIDx1bCBjbGFzcz0ibGVmdCI+CiAgICAgICAgICAgICAgPGxpIGNsYXNzPSJpdGVtICI+PGEgaHJlZj0iL2Rhc2hib2FyZC9mYXEuaHRtbCI+RkFRczwvYT48L2xpPgogICAgICAgICAgICAgIDxsaSBjbGFzcz0iaXRlbSAiPjxhIGhyZWY9Ii9kYXNoYm9hcmQvaG93dG8uaHRtbCI+SE9XLVRPIEd1aWRlczwvYT48L2xpPgogICAgICAgICAgICAgIDxsaSBjbGFzcz0iaXRlbSAiPjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSIvZGFzaGJvYXJkL3BocGluZm8ucGhwIj5QSFBJbmZvPC9hPjwvbGk+CiAgICAgICAgICAgICAgPGxpIGNsYXNzPSJpdGVtICI+PGEgaHJlZj0iL3BocG15YWRtaW4vIj5waHBNeUFkbWluPC9hPjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvc2VjdGlvbj4KICAgICAgPC9uYXY+CiAgICA8L2hlYWRlcj4KCiAgICA8ZGl2IGNsYXNzPSJ3cmFwcGVyIj4KICAgICAgPGRpdiBjbGFzcz0iaGVybyI+CiAgPGRpdiBjbGFzcz0icm93Ij4KICAgIDxkaXYgY2xhc3M9ImxhcmdlLTEyIGNvbHVtbnMiPgogICAgICA8aDE+PGltZyBzcmM9Ii9kYXNoYm9hcmQvaW1hZ2VzL3hhbXBwLWxvZ28uc3ZnIiAvPlhBTVBQIDxzcGFuPkFwYWNoZSArIE1hcmlhREIgKyBQSFAgKyBQZXJsPC9zcGFuPjwvaDE+CiAgICA8L2Rpdj4KICA8L2Rpdj4KPC9kaXY+CjxkaXYgY2xhc3M9InJvdyI+CiAgPGRpdiBjbGFzcz0ibGFyZ2UtMTIgY29sdW1ucyI+CiAgICA8aDI+V2VsY29tZSB0byBYQU1QUCBmb3IgV2luZG93cyA4LjIuMTI8L2gyPgogIDwvZGl2Pgo8L2Rpdj4KPGRpdiBjbGFzcz0icm93Ij4KICA8ZGl2IGNsYXNzPSJsYXJnZS0xMiBjb2x1bW5zIj4KICAgIDxwPgogICAgICBZb3UgaGF2ZSBzdWNjZXNzZnVsbHkgaW5zdGFsbGVkIFhBTVBQIG9uIHRoaXMgc3lzdGVtISBOb3cgeW91IGNhbiBzdGFydCB1c2luZyBBcGFjaGUsIE1hcmlhREIsIFBIUCBhbmQgb3RoZXIgY29tcG9uZW50cy4KICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mbyBpbiB0aGUgPGEgaHJlZj0iL2Rhc2hib2FyZC9mYXEuaHRtbCI+RkFRczwvYT4gc2VjdGlvbiBvciBjaGVjayB0aGUgPGEgaHJlZj0iL2Rhc2hib2FyZC9ob3d0by5odG1sIj5IT1ctVE8gR3VpZGVzPC9hPiBmb3IgZ2V0dGluZyBzdGFydGVkIHdpdGggUEhQIGFwcGxpY2F0aW9ucy4KICAgIDwvcD4KICAgIDxwPgogICAgICBYQU1QUCBpcyBtZWFudCBvbmx5IGZvciBkZXZlbG9wbWVudCBwdXJwb3Nlcy4gSXQgaGFzIGNlcnRhaW4gY29uZmlndXJhdGlvbiBzZXR0aW5ncyB0aGF0IG1ha2UgaXQgZWFzeSB0byBkZXZlbG9wIGxvY2FsbHkgYnV0IHRoYXQgYXJlIGluc2VjdXJlIGlmIHlvdSB3YW50IHRvIGhhdmUgeW91ciBpbnN0YWxsYXRpb24gYWNjZXNzaWJsZSB0byBvdGhlcnMuCiAgICA8L3A+CiAgICA8cD4KICAgICAgU3RhcnQgdGhlIFhBTVBQIENvbnRyb2wgUGFuZWwgdG8gY2hlY2sgdGhlIHNlcnZlciBzdGF0dXMuCiAgICA8L3A+CiAgPC9kaXY+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJyb3ciPgogIDxkaXYgY2xhc3M9ImxhcmdlLTEyIGNvbHVtbnMiPgogICAgPGgzPkNvbW11bml0eTwvaDM+CiAgPC9kaXY+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJyb3ciPgogIDxkaXYgY2xhc3M9ImxhcmdlLTEyIGNvbHVtbnMiPgogICAgPHA+CiAgICAgIFhBTVBQIGhhcyBiZWVuIGFyb3VuZCBmb3IgbW9yZSB0aGFuIDEwIHllYXJzICZuZGFzaDsgdGhlcmUgaXMgYSBodWdlIGNvbW11bml0eSBiZWhpbmQgaXQuIFlvdSBjYW4gZ2V0IGludm9sdmVkIGJ5IGpvaW5pbmcgb3VyIDxhIGhyZWY9Imh0dHBzOi8vY29tbXVuaXR5LmFwYWNoZWZyaWVuZHMub3JnIj5Gb3J1bXM8L2E+LCBsaWtpbmcgdXMgb24gPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL3dlLmFyZS54YW1wcCI+RmFjZWJvb2s8L2E+LCBvciBmb2xsb3dpbmcgb3VyIGV4cGxvaXRzIG9uIDxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vYXBhY2hlZnJpZW5kcyI+VHdpdHRlcjwvYT4uCiAgICA8L3A+CiAgPC9kaXY+CjwvZGl2PgoKCiAgICA8L2Rpdj4KCiAgICA8Zm9vdGVyIGNsYXNzPSJmb290ZXIgcm93Ij4KICAgICAgPGRpdiBjbGFzcz0iY29sdW1ucyI+CiAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyX2xpc3RzLWNvbnRhaW5lciByb3cgY29sbGFwc2UiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyX3NvY2lhbCBjb2x1bW5zIGxhcmdlLTIiPgogICAgICAgICAgICA8dWwgY2xhc3M9InNvY2lhbCI+CiAgPGxpIGNsYXNzPSJ0d2l0dGVyIj48YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL2FwYWNoZWZyaWVuZHMiPkZvbGxvdyB1cyBvbiBUd2l0dGVyPC9hPjwvbGk+CiAgPGxpIGNsYXNzPSJmYWNlYm9vayI+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL3dlLmFyZS54YW1wcCI+TGlrZSB1cyBvbiBGYWNlYm9vazwvYT48L2xpPgo8L3VsPgoKICAgICAgICAgICAgPHAgY2xhc3M9ImZvb3Rlcl9jb3B5cmlnaHQiPkNvcHlyaWdodCAoYykgMjAyMiwgQXBhY2hlIEZyaWVuZHM8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDx1bCBjbGFzcz0iZm9vdGVyX2xpbmtzIGNvbHVtbnMgbGFyZ2UtOSI+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL3d3dy5hcGFjaGVmcmllbmRzLm9yZy9ibG9nLmh0bWwiPkJsb2c8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9wcml2YWN5X3BvbGljeS5odG1sIj5Qcml2YWN5IFBvbGljeTwvYT48L2xpPgogICAgICAgICAgICA8bGk+CjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LmZhc3RseS5jb20vIj4gICAgICAgICAgICAgICAgQ0ROIHByb3ZpZGVkIGJ5CiAgICAgICAgICAgICAgICA8aW1nIHdpZHRoPSI0OCIgZGF0YS0yeD0iL2Rhc2hib2FyZC9pbWFnZXMvZmFzdGx5LWxvZ29AMngucG5nIiBzcmM9Ii9kYXNoYm9hcmQvaW1hZ2VzL2Zhc3RseS1sb2dvLnBuZyIgLz4KPC9hPiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZm9vdGVyPgoKICAgIDwhLS0gSlMgTGlicmFyaWVzIC0tPgogICAgPHNjcmlwdCBzcmM9Ii8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0xLjEwLjIubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIvZGFzaGJvYXJkL2phdmFzY3JpcHRzL2FsbC5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4K"}},"time_used":586,"timings":{"blocked":0,"dns":0,"connect":0,"send":0,"wait":586,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"code.jquery.com/jquery-1.10.2.min.js","fqdn":"code.jquery.com","domain":"jquery.com","tld":"com"},"ip":{"addr":"151.101.193.155","port":443,"asn":54113,"as":"FASTLY","country":"United States","country_code":"US"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://detran-go-emissao-gov.site/dashboard/","date":"2026-07-27T14:06:09.571Z","timestamp":1785161169571,"http_version":"HTTP/2","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":"*.jquery.com","organization":""},"issuer":{"commonName":"Sectigo Public Server Authentication CA DV E36","organization":"Sectigo Limited"},"validity":{"start":"Wed, 20 May 2026 00:00:00 GMT","end":"Fri, 04 Dec 2026 23:59:59 GMT"},"fingerprint":{"sha1":"DE:F8:0F:C4:8F:BC:F5:01:B1:66:91:CC:15:DC:D8:6E:5D:2F:45:4E","sha256":"05:8E:2E:14:85:E2:41:28:F5:18:A4:37:49:31:2B:0E:24:53:64:3F:02:15:BE:63:EF:F4:B8:53:5A:8B:6D:29"}}},"request":{"raw":"GET /jquery-1.10.2.min.js HTTP/1.1\r\nHost: code.jquery.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-Fetch-Storage-Access: none\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://detran-go-emissao-gov.site/\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: cross-site\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\nserver: nginx\r\ncontent-type: application/javascript; charset=utf-8\r\nlast-modified: Fri, 18 Oct 1991 12:00:00 GMT\r\netag: W/\"28feccc0-16bb3\"\r\ncache-control: public, max-age=31536000, stale-while-revalidate=604800\r\naccess-control-allow-origin: *\r\ncross-origin-resource-policy: cross-origin\r\ncontent-encoding: gzip\r\nvia: 1.1 varnish, 1.1 varnish\r\naccept-ranges: bytes\r\ndate: Mon, 27 Jul 2026 14:06:09 GMT\r\nage: 2602893\r\nx-served-by: cache-lga21955-LGA, cache-bma-essb1270071-BMA\r\nx-cache: HIT, HIT\r\nx-cache-hits: 13583, 6208\r\nx-timer: S1785161170.605486,VS0,VE0\r\nvary: Accept-Encoding\r\ncontent-length: 32788\r\nX-Firefox-Spdy: h2\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Varnish","description":"Varnish is a reverse caching proxy.","website":"https://www.varnish-cache.org","common_platform_enumeration":"cpe:2.3:a:varnish-software:varnish_cache:*:*:*:*:*:*:*:*","icon":"Varnish.svg","categories":["Caching"]},{"name":"Nginx","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]}],"data":{"size":93107,"size_decoded":33428,"mime_type":"application/javascript; charset=utf-8","magic":"JavaScript source, ASCII text, with very long lines (32072)","md5":"628072e7212db1e8cdacb22b21752cda","sha1":"0511abe9863c2ea7084efa7e24d1d86c5b3974f1","sha256":"0ba081f546084bd5097aa8a73c75931d5aa1fc4d6e846e53c21f98e6a1509988","sha512":"3aa68568ff2592ead412a0c7f5c39abc37ac562f00b7c16af07cd5eff881aadce77ec71040b36c0ad9c2d2aa4edd7744fa72b0f44cb8b485d4f283b1b49c2141","ssdeep":"1536:L4mCgi8DyCuXXFiJ+L0kJQsJVPEKLQRZdC/RlfDknv+p0WzH/IoSZ7qABZnu0sFv:LGsKXlI2p0WPSbDrstfam","tlshash":"3f93f8ddb2d1b06257bb21bd006f540ff236195e280d8850f129e8eabc74a4d9277fad","first_seen":"2023-03-07T01:02:00Z","last_seen":"2026-07-27T23:14:12.930038Z","times_seen":16830,"resource_available":true,"data":"LyohIGpRdWVyeSB2MS4xMC4yIHwgKGMpIDIwMDUsIDIwMTMgalF1ZXJ5IEZvdW5kYXRpb24sIEluYy4gfCBqcXVlcnkub3JnL2xpY2Vuc2UKLy9AIHNvdXJjZU1hcHBpbmdVUkw9anF1ZXJ5LTEuMTAuMi5taW4ubWFwCiovCihmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT10eXBlb2YgdCxvPWUubG9jYXRpb24sYT1lLmRvY3VtZW50LHM9YS5kb2N1bWVudEVsZW1lbnQsbD1lLmpRdWVyeSx1PWUuJCxjPXt9LHA9W10sZj0iMS4xMC4yIixkPXAuY29uY2F0LGg9cC5wdXNoLGc9cC5zbGljZSxtPXAuaW5kZXhPZix5PWMudG9TdHJpbmcsdj1jLmhhc093blByb3BlcnR5LGI9Zi50cmltLHg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IHguZm4uaW5pdChlLHQscil9LHc9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsVD0vXFMrL2csQz0vXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csTj0vXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQvLGs9L148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLyxFPS9eW1xdLDp7fVxzXSokLyxTPS8oPzpefDp8LCkoPzpccypcWykrL2csQT0vXFwoPzpbIlxcXC9iZm5ydF18dVtcZGEtZkEtRl17NH0pL2csaj0vIlteIlxcXHJcbl0qInx0cnVlfGZhbHNlfG51bGx8LT8oPzpcZCtcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvZyxEPS9eLW1zLS8sTD0vLShbXGRhLXpdKS9naSxIPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX0scT1mdW5jdGlvbihlKXsoYS5hZGRFdmVudExpc3RlbmVyfHwibG9hZCI9PT1lLnR5cGV8fCJjb21wbGV0ZSI9PT1hLnJlYWR5U3RhdGUpJiYoXygpLHgucmVhZHkoKSl9LF89ZnVuY3Rpb24oKXthLmFkZEV2ZW50TGlzdGVuZXI/KGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIscSwhMSksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixxLCExKSk6KGEuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIscSksZS5kZXRhY2hFdmVudCgib25sb2FkIixxKSl9O3guZm49eC5wcm90b3R5cGU9e2pxdWVyeTpmLGNvbnN0cnVjdG9yOngsaW5pdDpmdW5jdGlvbihlLG4scil7dmFyIGksbztpZighZSlyZXR1cm4gdGhpcztpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKGk9IjwiPT09ZS5jaGFyQXQoMCkmJiI+Ij09PWUuY2hhckF0KGUubGVuZ3RoLTEpJiZlLmxlbmd0aD49Mz9bbnVsbCxlLG51bGxdOk4uZXhlYyhlKSwhaXx8IWlbMV0mJm4pcmV0dXJuIW58fG4uanF1ZXJ5PyhufHxyKS5maW5kKGUpOnRoaXMuY29uc3RydWN0b3IobikuZmluZChlKTtpZihpWzFdKXtpZihuPW4gaW5zdGFuY2VvZiB4P25bMF06bix4Lm1lcmdlKHRoaXMseC5wYXJzZUhUTUwoaVsxXSxuJiZuLm5vZGVUeXBlP24ub3duZXJEb2N1bWVudHx8bjphLCEwKSksay50ZXN0KGlbMV0pJiZ4LmlzUGxhaW5PYmplY3QobikpZm9yKGkgaW4gbil4LmlzRnVuY3Rpb24odGhpc1tpXSk/dGhpc1tpXShuW2ldKTp0aGlzLmF0dHIoaSxuW2ldKTtyZXR1cm4gdGhpc31pZihvPWEuZ2V0RWxlbWVudEJ5SWQoaVsyXSksbyYmby5wYXJlbnROb2RlKXtpZihvLmlkIT09aVsyXSlyZXR1cm4gci5maW5kKGUpO3RoaXMubGVuZ3RoPTEsdGhpc1swXT1vfXJldHVybiB0aGlzLmNvbnRleHQ9YSx0aGlzLnNlbGVjdG9yPWUsdGhpc31yZXR1cm4gZS5ub2RlVHlwZT8odGhpcy5jb250ZXh0PXRoaXNbMF09ZSx0aGlzLmxlbmd0aD0xLHRoaXMpOnguaXNGdW5jdGlvbihlKT9yLnJlYWR5KGUpOihlLnNlbGVjdG9yIT09dCYmKHRoaXMuc2VsZWN0b3I9ZS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9ZS5jb250ZXh0KSx4Lm1ha2VBcnJheShlLHRoaXMpKX0sc2VsZWN0b3I6IiIsbGVuZ3RoOjAsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBnLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT90aGlzLnRvQXJyYXkoKTowPmU/dGhpc1t0aGlzLmxlbmd0aCtlXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9eC5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHQucHJldk9iamVjdD10aGlzLHQuY29udGV4dD10aGlzLmNvbnRleHQsdH0sZWFjaDpmdW5jdGlvbihlLHQpe3JldHVybiB4LmVhY2godGhpcyxlLHQpfSxyZWFkeTpmdW5jdGlvbihlKXtyZXR1cm4geC5yZWFkeS5wcm9taXNlKCkuZG9uZShlKSx0aGlzfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhnLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGVuZ3RoLG49K2UrKDA+ZT90OjApO3JldHVybiB0aGlzLnB1c2hTdGFjayhuPj0wJiZ0Pm4/W3RoaXNbbl1dOltdKX0sbWFwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayh4Lm1hcCh0aGlzLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuY2FsbCh0LG4sdCl9KSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IobnVsbCl9LHB1c2g6aCxzb3J0OltdLnNvcnQsc3BsaWNlOltdLnNwbGljZX0seC5mbi5pbml0LnByb3RvdHlwZT14LmZuLHguZXh0ZW5kPXguZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGUsbixyLGksbyxhLHM9YXJndW1lbnRzWzBdfHx7fSxsPTEsdT1hcmd1bWVudHMubGVuZ3RoLGM9ITE7Zm9yKCJib29sZWFuIj09dHlwZW9mIHMmJihjPXMscz1hcmd1bWVudHNbMV18fHt9LGw9MiksIm9iamVjdCI9PXR5cGVvZiBzfHx4LmlzRnVuY3Rpb24ocyl8fChzPXt9KSx1PT09bCYmKHM9dGhpcywtLWwpO3U+bDtsKyspaWYobnVsbCE9KG89YXJndW1lbnRzW2xdKSlmb3IoaSBpbiBvKWU9c1tpXSxyPW9baV0scyE9PXImJihjJiZyJiYoeC5pc1BsYWluT2JqZWN0KHIpfHwobj14LmlzQXJyYXkocikpKT8obj8obj0hMSxhPWUmJnguaXNBcnJheShlKT9lOltdKTphPWUmJnguaXNQbGFpbk9iamVjdChlKT9lOnt9LHNbaV09eC5leHRlbmQoYyxhLHIpKTpyIT09dCYmKHNbaV09cikpO3JldHVybiBzfSx4LmV4dGVuZCh7ZXhwYW5kbzoialF1ZXJ5IisoZitNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCIiKSxub0NvbmZsaWN0OmZ1bmN0aW9uKHQpe3JldHVybiBlLiQ9PT14JiYoZS4kPXUpLHQmJmUualF1ZXJ5PT09eCYmKGUualF1ZXJ5PWwpLHh9LGlzUmVhZHk6ITEscmVhZHlXYWl0OjEsaG9sZFJlYWR5OmZ1bmN0aW9uKGUpe2U/eC5yZWFkeVdhaXQrKzp4LnJlYWR5KCEwKX0scmVhZHk6ZnVuY3Rpb24oZSl7aWYoZT09PSEwPyEtLXgucmVhZHlXYWl0OiF4LmlzUmVhZHkpe2lmKCFhLmJvZHkpcmV0dXJuIHNldFRpbWVvdXQoeC5yZWFkeSk7eC5pc1JlYWR5PSEwLGUhPT0hMCYmLS14LnJlYWR5V2FpdD4wfHwobi5yZXNvbHZlV2l0aChhLFt4XSkseC5mbi50cmlnZ2VyJiZ4KGEpLnRyaWdnZXIoInJlYWR5Iikub2ZmKCJyZWFkeSIpKX19LGlzRnVuY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09PXgudHlwZShlKX0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iYXJyYXkiPT09eC50eXBlKGUpfSxpc1dpbmRvdzpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmZT09ZS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihlKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChlKSkmJmlzRmluaXRlKGUpfSx0eXBlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP2UrIiI6Im9iamVjdCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9jW3kuY2FsbChlKV18fCJvYmplY3QiOnR5cGVvZiBlfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciBuO2lmKCFlfHwib2JqZWN0IiE9PXgudHlwZShlKXx8ZS5ub2RlVHlwZXx8eC5pc1dpbmRvdyhlKSlyZXR1cm4hMTt0cnl7aWYoZS5jb25zdHJ1Y3RvciYmIXYuY2FsbChlLCJjb25zdHJ1Y3RvciIpJiYhdi5jYWxsKGUuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2gocil7cmV0dXJuITF9aWYoeC5zdXBwb3J0Lm93bkxhc3QpZm9yKG4gaW4gZSlyZXR1cm4gdi5jYWxsKGUsbik7Zm9yKG4gaW4gZSk7cmV0dXJuIG49PT10fHx2LmNhbGwoZSxuKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihlKXt2YXIgdDtmb3IodCBpbiBlKXJldHVybiExO3JldHVybiEwfSxlcnJvcjpmdW5jdGlvbihlKXt0aHJvdyBFcnJvcihlKX0scGFyc2VIVE1MOmZ1bmN0aW9uKGUsdCxuKXtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBudWxsOyJib29sZWFuIj09dHlwZW9mIHQmJihuPXQsdD0hMSksdD10fHxhO3ZhciByPWsuZXhlYyhlKSxpPSFuJiZbXTtyZXR1cm4gcj9bdC5jcmVhdGVFbGVtZW50KHJbMV0pXToocj14LmJ1aWxkRnJhZ21lbnQoW2VdLHQsaSksaSYmeChpKS5yZW1vdmUoKSx4Lm1lcmdlKFtdLHIuY2hpbGROb2RlcykpfSxwYXJzZUpTT046ZnVuY3Rpb24obil7cmV0dXJuIGUuSlNPTiYmZS5KU09OLnBhcnNlP2UuSlNPTi5wYXJzZShuKTpudWxsPT09bj9uOiJzdHJpbmciPT10eXBlb2YgbiYmKG49eC50cmltKG4pLG4mJkUudGVzdChuLnJlcGxhY2UoQSwiQCIpLnJlcGxhY2UoaiwiXSIpLnJlcGxhY2UoUywiIikpKT9GdW5jdGlvbigicmV0dXJuICIrbikoKTooeC5lcnJvcigiSW52YWxpZCBKU09OOiAiK24pLHQpfSxwYXJzZVhNTDpmdW5jdGlvbihuKXt2YXIgcixpO2lmKCFufHwic3RyaW5nIiE9dHlwZW9mIG4pcmV0dXJuIG51bGw7dHJ5e2UuRE9NUGFyc2VyPyhpPW5ldyBET01QYXJzZXIscj1pLnBhcnNlRnJvbVN0cmluZyhuLCJ0ZXh0L3htbCIpKToocj1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpLHIuYXN5bmM9ImZhbHNlIixyLmxvYWRYTUwobikpfWNhdGNoKG8pe3I9dH1yZXR1cm4gciYmci5kb2N1bWVudEVsZW1lbnQmJiFyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aHx8eC5lcnJvcigiSW52YWxpZCBYTUw6ICIrbikscn0sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbih0KXt0JiZ4LnRyaW0odCkmJihlLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKHQpe2UuZXZhbC5jYWxsKGUsdCl9KSh0KX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoRCwibXMtIikucmVwbGFjZShMLEgpfSxub2RlTmFtZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9MCxvPWUubGVuZ3RoLGE9TShlKTtpZihuKXtpZihhKXtmb3IoO28+aTtpKyspaWYocj10LmFwcGx5KGVbaV0sbikscj09PSExKWJyZWFrfWVsc2UgZm9yKGkgaW4gZSlpZihyPXQuYXBwbHkoZVtpXSxuKSxyPT09ITEpYnJlYWt9ZWxzZSBpZihhKXtmb3IoO28+aTtpKyspaWYocj10LmNhbGwoZVtpXSxpLGVbaV0pLHI9PT0hMSlicmVha31lbHNlIGZvcihpIGluIGUpaWYocj10LmNhbGwoZVtpXSxpLGVbaV0pLHI9PT0hMSlicmVhaztyZXR1cm4gZX0sdHJpbTpiJiYhYi5jYWxsKCJcdWZlZmZcdTAwYTAiKT9mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT8iIjpiLmNhbGwoZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOihlKyIiKS5yZXBsYWNlKEMsIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oZSx0KXt2YXIgbj10fHxbXTtyZXR1cm4gbnVsbCE9ZSYmKE0oT2JqZWN0KGUpKT94Lm1lcmdlKG4sInN0cmluZyI9PXR5cGVvZiBlP1tlXTplKTpoLmNhbGwobixlKSksbn0saW5BcnJheTpmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYodCl7aWYobSlyZXR1cm4gbS5jYWxsKHQsZSxuKTtmb3Iocj10Lmxlbmd0aCxuPW4/MD5uP01hdGgubWF4KDAscituKTpuOjA7cj5uO24rKylpZihuIGluIHQmJnRbbl09PT1lKXJldHVybiBufXJldHVybi0xfSxtZXJnZTpmdW5jdGlvbihlLG4pe3ZhciByPW4ubGVuZ3RoLGk9ZS5sZW5ndGgsbz0wO2lmKCJudW1iZXIiPT10eXBlb2Ygcilmb3IoO3I+bztvKyspZVtpKytdPW5bb107ZWxzZSB3aGlsZShuW29dIT09dCllW2krK109bltvKytdO3JldHVybiBlLmxlbmd0aD1pLGV9LGdyZXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9W10sbz0wLGE9ZS5sZW5ndGg7Zm9yKG49ISFuO2E+bztvKyspcj0hIXQoZVtvXSxvKSxuIT09ciYmaS5wdXNoKGVbb10pO3JldHVybiBpfSxtYXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9MCxvPWUubGVuZ3RoLGE9TShlKSxzPVtdO2lmKGEpZm9yKDtvPmk7aSsrKXI9dChlW2ldLGksbiksbnVsbCE9ciYmKHNbcy5sZW5ndGhdPXIpO2Vsc2UgZm9yKGkgaW4gZSlyPXQoZVtpXSxpLG4pLG51bGwhPXImJihzW3MubGVuZ3RoXT1yKTtyZXR1cm4gZC5hcHBseShbXSxzKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGUsbil7dmFyIHIsaSxvO3JldHVybiJzdHJpbmciPT10eXBlb2YgbiYmKG89ZVtuXSxuPWUsZT1vKSx4LmlzRnVuY3Rpb24oZSk/KHI9Zy5jYWxsKGFyZ3VtZW50cywyKSxpPWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkobnx8dGhpcyxyLmNvbmNhdChnLmNhbGwoYXJndW1lbnRzKSkpfSxpLmd1aWQ9ZS5ndWlkPWUuZ3VpZHx8eC5ndWlkKyssaSk6dH0sYWNjZXNzOmZ1bmN0aW9uKGUsbixyLGksbyxhLHMpe3ZhciBsPTAsdT1lLmxlbmd0aCxjPW51bGw9PXI7aWYoIm9iamVjdCI9PT14LnR5cGUocikpe289ITA7Zm9yKGwgaW4gcil4LmFjY2VzcyhlLG4sbCxyW2xdLCEwLGEscyl9ZWxzZSBpZihpIT09dCYmKG89ITAseC5pc0Z1bmN0aW9uKGkpfHwocz0hMCksYyYmKHM/KG4uY2FsbChlLGkpLG49bnVsbCk6KGM9bixuPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gYy5jYWxsKHgoZSksbil9KSksbikpZm9yKDt1Pmw7bCsrKW4oZVtsXSxyLHM/aTppLmNhbGwoZVtsXSxsLG4oZVtsXSxyKSkpO3JldHVybiBvP2U6Yz9uLmNhbGwoZSk6dT9uKGVbMF0scik6YX0sbm93OmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9LHN3YXA6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhPXt9O2ZvcihvIGluIHQpYVtvXT1lLnN0eWxlW29dLGUuc3R5bGVbb109dFtvXTtpPW4uYXBwbHkoZSxyfHxbXSk7Zm9yKG8gaW4gdCllLnN0eWxlW29dPWFbb107cmV0dXJuIGl9fSkseC5yZWFkeS5wcm9taXNlPWZ1bmN0aW9uKHQpe2lmKCFuKWlmKG49eC5EZWZlcnJlZCgpLCJjb21wbGV0ZSI9PT1hLnJlYWR5U3RhdGUpc2V0VGltZW91dCh4LnJlYWR5KTtlbHNlIGlmKGEuYWRkRXZlbnRMaXN0ZW5lcilhLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLHEsITEpLGUuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIscSwhMSk7ZWxzZXthLmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLHEpLGUuYXR0YWNoRXZlbnQoIm9ubG9hZCIscSk7dmFyIHI9ITE7dHJ5e3I9bnVsbD09ZS5mcmFtZUVsZW1lbnQmJmEuZG9jdW1lbnRFbGVtZW50fWNhdGNoKGkpe31yJiZyLmRvU2Nyb2xsJiZmdW5jdGlvbiBvKCl7aWYoIXguaXNSZWFkeSl7dHJ5e3IuZG9TY3JvbGwoImxlZnQiKX1jYXRjaChlKXtyZXR1cm4gc2V0VGltZW91dChvLDUwKX1fKCkseC5yZWFkeSgpfX0oKX1yZXR1cm4gbi5wcm9taXNlKHQpfSx4LmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IiLnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXtjWyJbb2JqZWN0ICIrdCsiXSJdPXQudG9Mb3dlckNhc2UoKX0pO2Z1bmN0aW9uIE0oZSl7dmFyIHQ9ZS5sZW5ndGgsbj14LnR5cGUoZSk7cmV0dXJuIHguaXNXaW5kb3coZSk/ITE6MT09PWUubm9kZVR5cGUmJnQ/ITA6ImFycmF5Ij09PW58fCJmdW5jdGlvbiIhPT1uJiYoMD09PXR8fCJudW1iZXIiPT10eXBlb2YgdCYmdD4wJiZ0LTEgaW4gZSl9cj14KGEpLGZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzLGwsdSxjLHAsZixkLGgsZyxtLHksdixiPSJzaXp6bGUiKy1uZXcgRGF0ZSx3PWUuZG9jdW1lbnQsVD0wLEM9MCxOPXN0KCksaz1zdCgpLEU9c3QoKSxTPSExLEE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXQ/KFM9ITAsMCk6MH0saj10eXBlb2YgdCxEPTE8PDMxLEw9e30uaGFzT3duUHJvcGVydHksSD1bXSxxPUgucG9wLF89SC5wdXNoLE09SC5wdXNoLE89SC5zbGljZSxGPUguaW5kZXhPZnx8ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPXRoaXMubGVuZ3RoO2Zvcig7bj50O3QrKylpZih0aGlzW3RdPT09ZSlyZXR1cm4gdDtyZXR1cm4tMX0sQj0iY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLFA9IltcXHgyMFxcdFxcclxcblxcZl0iLFI9Iig/OlxcXFwufFtcXHctXXxbXlxceDAwLVxceGEwXSkrIixXPVIucmVwbGFjZSgidyIsIncjIiksJD0iXFxbIitQKyIqKCIrUisiKSIrUCsiKig/OihbKl4kfCF+XT89KSIrUCsiKig/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCIrVysiKXwpfCkiK1ArIipcXF0iLEk9IjooIitSKyIpKD86XFwoKChbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCg/OlxcXFwufFteXFxcXCgpW1xcXV18IiskLnJlcGxhY2UoMyw4KSsiKSopfC4qKVxcKXwpIix6PVJlZ0V4cCgiXiIrUCsiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitQKyIrJCIsImciKSxYPVJlZ0V4cCgiXiIrUCsiKiwiK1ArIioiKSxVPVJlZ0V4cCgiXiIrUCsiKihbPit+XXwiK1ArIikiK1ArIioiKSxWPVJlZ0V4cChQKyIqWyt+XSIpLFk9UmVnRXhwKCI9IitQKyIqKFteXFxdJ1wiXSopIitQKyIqXFxdIiwiZyIpLEo9UmVnRXhwKEkpLEc9UmVnRXhwKCJeIitXKyIkIiksUT17SUQ6UmVnRXhwKCJeIygiK1IrIikiKSxDTEFTUzpSZWdFeHAoIl5cXC4oIitSKyIpIiksVEFHOlJlZ0V4cCgiXigiK1IucmVwbGFjZSgidyIsIncqIikrIikiKSxBVFRSOlJlZ0V4cCgiXiIrJCksUFNFVURPOlJlZ0V4cCgiXiIrSSksQ0hJTEQ6UmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiK1ArIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK1ArIiooPzooWystXXwpIitQKyIqKFxcZCspfCkpIitQKyIqXFwpfCkiLCJpIiksYm9vbDpSZWdFeHAoIl4oPzoiK0IrIikkIiwiaSIpLG5lZWRzQ29udGV4dDpSZWdFeHAoIl4iK1ArIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcKCIrUCsiKigoPzotXFxkKT9cXGQqKSIrUCsiKlxcKXwpKD89W14tXXwkKSIsImkiKX0sSz0vXltee10rXHtccypcW25hdGl2ZSBcdy8sWj0vXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLGV0PS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksdHQ9L15oXGQkL2ksbnQ9Lyd8XFwvZyxydD1SZWdFeHAoIlxcXFwoW1xcZGEtZl17MSw2fSIrUCsiP3woIitQKyIpfC4pIiwiaWciKSxpdD1mdW5jdGlvbihlLHQsbil7dmFyIHI9IjB4Iit0LTY1NTM2O3JldHVybiByIT09cnx8bj90OjA+cj9TdHJpbmcuZnJvbUNoYXJDb2RlKHIrNjU1MzYpOlN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8cj4+MTAsNTYzMjB8MTAyMyZyKX07dHJ5e00uYXBwbHkoSD1PLmNhbGwody5jaGlsZE5vZGVzKSx3LmNoaWxkTm9kZXMpLEhbdy5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2gob3Qpe009e2FwcGx5OkgubGVuZ3RoP2Z1bmN0aW9uKGUsdCl7Xy5hcHBseShlLE8uY2FsbCh0KSl9OmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5sZW5ndGgscj0wO3doaWxlKGVbbisrXT10W3IrK10pO2UubGVuZ3RoPW4tMX19fWZ1bmN0aW9uIGF0KGUsdCxuLGkpe3ZhciBvLGEscyxsLHUsYyxkLG0seSx4O2lmKCh0P3Qub3duZXJEb2N1bWVudHx8dDp3KSE9PWYmJnAodCksdD10fHxmLG49bnx8W10sIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbjtpZigxIT09KGw9dC5ub2RlVHlwZSkmJjkhPT1sKXJldHVybltdO2lmKGgmJiFpKXtpZihvPVouZXhlYyhlKSlpZihzPW9bMV0pe2lmKDk9PT1sKXtpZihhPXQuZ2V0RWxlbWVudEJ5SWQocyksIWF8fCFhLnBhcmVudE5vZGUpcmV0dXJuIG47aWYoYS5pZD09PXMpcmV0dXJuIG4ucHVzaChhKSxufWVsc2UgaWYodC5vd25lckRvY3VtZW50JiYoYT10Lm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocykpJiZ2KHQsYSkmJmEuaWQ9PT1zKXJldHVybiBuLnB1c2goYSksbn1lbHNle2lmKG9bMl0pcmV0dXJuIE0uYXBwbHkobix0LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpKSxuO2lmKChzPW9bM10pJiZyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSlyZXR1cm4gTS5hcHBseShuLHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShzKSksbn1pZihyLnFzYSYmKCFnfHwhZy50ZXN0KGUpKSl7aWYobT1kPWIseT10LHg9OT09PWwmJmUsMT09PWwmJiJvYmplY3QiIT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXtjPW10KGUpLChkPXQuZ2V0QXR0cmlidXRlKCJpZCIpKT9tPWQucmVwbGFjZShudCwiXFwkJiIpOnQuc2V0QXR0cmlidXRlKCJpZCIsbSksbT0iW2lkPSciK20rIiddICIsdT1jLmxlbmd0aDt3aGlsZSh1LS0pY1t1XT1tK3l0KGNbdV0pO3k9Vi50ZXN0KGUpJiZ0LnBhcmVudE5vZGV8fHQseD1jLmpvaW4oIiwiKX1pZih4KXRyeXtyZXR1cm4gTS5hcHBseShuLHkucXVlcnlTZWxlY3RvckFsbCh4KSksbn1jYXRjaChUKXt9ZmluYWxseXtkfHx0LnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiBrdChlLnJlcGxhY2UoeiwiJDEiKSx0LG4saSl9ZnVuY3Rpb24gc3QoKXt2YXIgZT1bXTtmdW5jdGlvbiB0KG4scil7cmV0dXJuIGUucHVzaChuKz0iICIpPm8uY2FjaGVMZW5ndGgmJmRlbGV0ZSB0W2Uuc2hpZnQoKV0sdFtuXT1yfXJldHVybiB0fWZ1bmN0aW9uIGx0KGUpe3JldHVybiBlW2JdPSEwLGV9ZnVuY3Rpb24gdXQoZSl7dmFyIHQ9Zi5jcmVhdGVFbGVtZW50KCJkaXYiKTt0cnl7cmV0dXJuISFlKHQpfWNhdGNoKG4pe3JldHVybiExfWZpbmFsbHl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksdD1udWxsfX1mdW5jdGlvbiBjdChlLHQpe3ZhciBuPWUuc3BsaXQoInwiKSxyPWUubGVuZ3RoO3doaWxlKHItLSlvLmF0dHJIYW5kbGVbbltyXV09dH1mdW5jdGlvbiBwdChlLHQpe3ZhciBuPXQmJmUscj1uJiYxPT09ZS5ub2RlVHlwZSYmMT09PXQubm9kZVR5cGUmJih+dC5zb3VyY2VJbmRleHx8RCktKH5lLnNvdXJjZUluZGV4fHxEKTtpZihyKXJldHVybiByO2lmKG4pd2hpbGUobj1uLm5leHRTaWJsaW5nKWlmKG49PT10KXJldHVybi0xO3JldHVybiBlPzE6LTF9ZnVuY3Rpb24gZnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09biYmdC50eXBlPT09ZX19ZnVuY3Rpb24gZHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oImlucHV0Ij09PW58fCJidXR0b24iPT09bikmJnQudHlwZT09PWV9fWZ1bmN0aW9uIGh0KGUpe3JldHVybiBsdChmdW5jdGlvbih0KXtyZXR1cm4gdD0rdCxsdChmdW5jdGlvbihuLHIpe3ZhciBpLG89ZShbXSxuLmxlbmd0aCx0KSxhPW8ubGVuZ3RoO3doaWxlKGEtLSluW2k9b1thXV0mJihuW2ldPSEocltpXT1uW2ldKSl9KX0pfXM9YXQuaXNYTUw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmKGUub3duZXJEb2N1bWVudHx8ZSkuZG9jdW1lbnRFbGVtZW50O3JldHVybiB0PyJIVE1MIiE9PXQubm9kZU5hbWU6ITF9LHI9YXQuc3VwcG9ydD17fSxwPWF0LnNldERvY3VtZW50PWZ1bmN0aW9uKGUpe3ZhciBuPWU/ZS5vd25lckRvY3VtZW50fHxlOncsaT1uLmRlZmF1bHRWaWV3O3JldHVybiBuIT09ZiYmOT09PW4ubm9kZVR5cGUmJm4uZG9jdW1lbnRFbGVtZW50PyhmPW4sZD1uLmRvY3VtZW50RWxlbWVudCxoPSFzKG4pLGkmJmkuYXR0YWNoRXZlbnQmJmkhPT1pLnRvcCYmaS5hdHRhY2hFdmVudCgib25iZWZvcmV1bmxvYWQiLGZ1bmN0aW9uKCl7cCgpfSksci5hdHRyaWJ1dGVzPXV0KGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsYXNzTmFtZT0iaSIsIWUuZ2V0QXR0cmlidXRlKCJjbGFzc05hbWUiKX0pLHIuZ2V0RWxlbWVudHNCeVRhZ05hbWU9dXQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYXBwZW5kQ2hpbGQobi5jcmVhdGVDb21tZW50KCIiKSksIWUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGh9KSxyLmdldEVsZW1lbnRzQnlDbGFzc05hbWU9dXQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSdhJz48L2Rpdj48ZGl2IGNsYXNzPSdhIGknPjwvZGl2PiIsZS5maXJzdENoaWxkLmNsYXNzTmFtZT0iaSIsMj09PWUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiaSIpLmxlbmd0aH0pLHIuZ2V0QnlJZD11dChmdW5jdGlvbihlKXtyZXR1cm4gZC5hcHBlbmRDaGlsZChlKS5pZD1iLCFuLmdldEVsZW1lbnRzQnlOYW1lfHwhbi5nZXRFbGVtZW50c0J5TmFtZShiKS5sZW5ndGh9KSxyLmdldEJ5SWQ/KG8uZmluZC5JRD1mdW5jdGlvbihlLHQpe2lmKHR5cGVvZiB0LmdldEVsZW1lbnRCeUlkIT09aiYmaCl7dmFyIG49dC5nZXRFbGVtZW50QnlJZChlKTtyZXR1cm4gbiYmbi5wYXJlbnROb2RlP1tuXTpbXX19LG8uZmlsdGVyLklEPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShydCxpdCk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSgiaWQiKT09PXR9fSk6KGRlbGV0ZSBvLmZpbmQuSUQsby5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHJ0LGl0KTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSE9PWomJmUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gbiYmbi52YWx1ZT09PXR9fSksby5maW5kLlRBRz1yLmdldEVsZW1lbnRzQnlUYWdOYW1lP2Z1bmN0aW9uKGUsbil7cmV0dXJuIHR5cGVvZiBuLmdldEVsZW1lbnRzQnlUYWdOYW1lIT09aj9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpOnR9OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPTAsbz10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpO2lmKCIqIj09PWUpe3doaWxlKG49b1tpKytdKTE9PT1uLm5vZGVUeXBlJiZyLnB1c2gobik7cmV0dXJuIHJ9cmV0dXJuIG99LG8uZmluZC5DTEFTUz1yLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGUsbil7cmV0dXJuIHR5cGVvZiBuLmdldEVsZW1lbnRzQnlDbGFzc05hbWUhPT1qJiZoP24uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKTp0fSxtPVtdLGc9W10sKHIucXNhPUsudGVzdChuLnF1ZXJ5U2VsZWN0b3JBbGwpKSYmKHV0KGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPSI8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+IixlLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fGcucHVzaCgiXFxbIitQKyIqKD86dmFsdWV8IitCKyIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aHx8Zy5wdXNoKCI6Y2hlY2tlZCIpfSksdXQoZnVuY3Rpb24oZSl7dmFyIHQ9bi5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3Quc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksZS5hcHBlbmRDaGlsZCh0KS5zZXRBdHRyaWJ1dGUoInQiLCIiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIlt0Xj0nJ10iKS5sZW5ndGgmJmcucHVzaCgiWypeJF09IitQKyIqKD86Jyd8XCJcIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RofHxnLnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksZS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4IiksZy5wdXNoKCIsLio6Iil9KSksKHIubWF0Y2hlc1NlbGVjdG9yPUsudGVzdCh5PWQud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxkLm1vek1hdGNoZXNTZWxlY3Rvcnx8ZC5vTWF0Y2hlc1NlbGVjdG9yfHxkLm1zTWF0Y2hlc1NlbGVjdG9yKSkmJnV0KGZ1bmN0aW9uKGUpe3IuZGlzY29ubmVjdGVkTWF0Y2g9eS5jYWxsKGUsImRpdiIpLHkuY2FsbChlLCJbcyE9JyddOngiKSxtLnB1c2goIiE9IixJKX0pLGc9Zy5sZW5ndGgmJlJlZ0V4cChnLmpvaW4oInwiKSksbT1tLmxlbmd0aCYmUmVnRXhwKG0uam9pbigifCIpKSx2PUsudGVzdChkLmNvbnRhaW5zKXx8ZC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihlLHQpe3ZhciBuPTk9PT1lLm5vZGVUeXBlP2UuZG9jdW1lbnRFbGVtZW50OmUscj10JiZ0LnBhcmVudE5vZGU7cmV0dXJuIGU9PT1yfHwhKCFyfHwxIT09ci5ub2RlVHlwZXx8IShuLmNvbnRhaW5zP24uY29udGFpbnMocik6ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmMTYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyKSkpfTpmdW5jdGlvbihlLHQpe2lmKHQpd2hpbGUodD10LnBhcmVudE5vZGUpaWYodD09PWUpcmV0dXJuITA7cmV0dXJuITF9LEE9ZC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihlLHQpe2lmKGU9PT10KXJldHVybiBTPSEwLDA7dmFyIGk9dC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KTtyZXR1cm4gaT8xJml8fCFyLnNvcnREZXRhY2hlZCYmdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKT09PWk/ZT09PW58fHYodyxlKT8tMTp0PT09bnx8dih3LHQpPzE6Yz9GLmNhbGwoYyxlKS1GLmNhbGwoYyx0KTowOjQmaT8tMToxOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24/LTE6MX06ZnVuY3Rpb24oZSx0KXt2YXIgcixpPTAsbz1lLnBhcmVudE5vZGUsYT10LnBhcmVudE5vZGUscz1bZV0sbD1bdF07aWYoZT09PXQpcmV0dXJuIFM9ITAsMDtpZighb3x8IWEpcmV0dXJuIGU9PT1uPy0xOnQ9PT1uPzE6bz8tMTphPzE6Yz9GLmNhbGwoYyxlKS1GLmNhbGwoYyx0KTowO2lmKG89PT1hKXJldHVybiBwdChlLHQpO3I9ZTt3aGlsZShyPXIucGFyZW50Tm9kZSlzLnVuc2hpZnQocik7cj10O3doaWxlKHI9ci5wYXJlbnROb2RlKWwudW5zaGlmdChyKTt3aGlsZShzW2ldPT09bFtpXSlpKys7cmV0dXJuIGk/cHQoc1tpXSxsW2ldKTpzW2ldPT09dz8tMTpsW2ldPT09dz8xOjB9LG4pOmZ9LGF0Lm1hdGNoZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXQoZSxudWxsLG51bGwsdCl9LGF0Lm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihlLHQpe2lmKChlLm93bmVyRG9jdW1lbnR8fGUpIT09ZiYmcChlKSx0PXQucmVwbGFjZShZLCI9JyQxJ10iKSwhKCFyLm1hdGNoZXNTZWxlY3Rvcnx8IWh8fG0mJm0udGVzdCh0KXx8ZyYmZy50ZXN0KHQpKSl0cnl7dmFyIG49eS5jYWxsKGUsdCk7aWYobnx8ci5kaXNjb25uZWN0ZWRNYXRjaHx8ZS5kb2N1bWVudCYmMTEhPT1lLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiBufWNhdGNoKGkpe31yZXR1cm4gYXQodCxmLG51bGwsW2VdKS5sZW5ndGg+MH0sYXQuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZS5vd25lckRvY3VtZW50fHxlKSE9PWYmJnAoZSksdihlLHQpfSxhdC5hdHRyPWZ1bmN0aW9uKGUsbil7KGUub3duZXJEb2N1bWVudHx8ZSkhPT1mJiZwKGUpO3ZhciBpPW8uYXR0ckhhbmRsZVtuLnRvTG93ZXJDYXNlKCldLGE9aSYmTC5jYWxsKG8uYXR0ckhhbmRsZSxuLnRvTG93ZXJDYXNlKCkpP2koZSxuLCFoKTp0O3JldHVybiBhPT09dD9yLmF0dHJpYnV0ZXN8fCFoP2UuZ2V0QXR0cmlidXRlKG4pOihhPWUuZ2V0QXR0cmlidXRlTm9kZShuKSkmJmEuc3BlY2lmaWVkP2EudmFsdWU6bnVsbDphfSxhdC5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIitlKX0sYXQudW5pcXVlU29ydD1mdW5jdGlvbihlKXt2YXIgdCxuPVtdLGk9MCxvPTA7aWYoUz0hci5kZXRlY3REdXBsaWNhdGVzLGM9IXIuc29ydFN0YWJsZSYmZS5zbGljZSgwKSxlLnNvcnQoQSksUyl7d2hpbGUodD1lW28rK10pdD09PWVbb10mJihpPW4ucHVzaChvKSk7d2hpbGUoaS0tKWUuc3BsaWNlKG5baV0sMSl9cmV0dXJuIGV9LGE9YXQuZ2V0VGV4dD1mdW5jdGlvbihlKXt2YXIgdCxuPSIiLHI9MCxpPWUubm9kZVR5cGU7aWYoaSl7aWYoMT09PWl8fDk9PT1pfHwxMT09PWkpe2lmKCJzdHJpbmciPT10eXBlb2YgZS50ZXh0Q29udGVudClyZXR1cm4gZS50ZXh0Q29udGVudDtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpbis9YShlKX1lbHNlIGlmKDM9PT1pfHw0PT09aSlyZXR1cm4gZS5ub2RlVmFsdWV9ZWxzZSBmb3IoO3Q9ZVtyXTtyKyspbis9YSh0KTtyZXR1cm4gbn0sbz1hdC5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzpsdCxtYXRjaDpRLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnJlcGxhY2UocnQsaXQpLGVbM109KGVbNF18fGVbNV18fCIiKS5yZXBsYWNlKHJ0LGl0KSwifj0iPT09ZVsyXSYmKGVbM109IiAiK2VbM10rIiAiKSxlLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0udG9Mb3dlckNhc2UoKSwibnRoIj09PWVbMV0uc2xpY2UoMCwzKT8oZVszXXx8YXQuZXJyb3IoZVswXSksZVs0XT0rKGVbNF0/ZVs1XSsoZVs2XXx8MSk6MiooImV2ZW4iPT09ZVszXXx8Im9kZCI9PT1lWzNdKSksZVs1XT0rKGVbN10rZVs4XXx8Im9kZCI9PT1lWzNdKSk6ZVszXSYmYXQuZXJyb3IoZVswXSksZX0sUFNFVURPOmZ1bmN0aW9uKGUpe3ZhciBuLHI9IWVbNV0mJmVbMl07cmV0dXJuIFEuQ0hJTEQudGVzdChlWzBdKT9udWxsOihlWzNdJiZlWzRdIT09dD9lWzJdPWVbNF06ciYmSi50ZXN0KHIpJiYobj1tdChyLCEwKSkmJihuPXIuaW5kZXhPZigiKSIsci5sZW5ndGgtbiktci5sZW5ndGgpJiYoZVswXT1lWzBdLnNsaWNlKDAsbiksZVsyXT1yLnNsaWNlKDAsbikpLGUuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UocnQsaXQpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09ZT9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09dH19LENMQVNTOmZ1bmN0aW9uKGUpe3ZhciB0PU5bZSsiICJdO3JldHVybiB0fHwodD1SZWdFeHAoIihefCIrUCsiKSIrZSsiKCIrUCsifCQpIikpJiZOKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHQudGVzdCgic3RyaW5nIj09dHlwZW9mIGUuY2xhc3NOYW1lJiZlLmNsYXNzTmFtZXx8dHlwZW9mIGUuZ2V0QXR0cmlidXRlIT09aiYmZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX0pfSxBVFRSOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIGk9YXQuYXR0cihyLGUpO3JldHVybiBudWxsPT1pPyIhPSI9PT10OnQ/KGkrPSIiLCI9Ij09PXQ/aT09PW46IiE9Ij09PXQ/aSE9PW46Il49Ij09PXQ/biYmMD09PWkuaW5kZXhPZihuKToiKj0iPT09dD9uJiZpLmluZGV4T2Yobik+LTE6IiQ9Ij09PXQ/biYmaS5zbGljZSgtbi5sZW5ndGgpPT09bjoifj0iPT09dD8oIiAiK2krIiAiKS5pbmRleE9mKG4pPi0xOiJ8PSI9PT10P2k9PT1ufHxpLnNsaWNlKDAsbi5sZW5ndGgrMSk9PT1uKyItIjohMSk6ITB9fSxDSElMRDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPSJudGgiIT09ZS5zbGljZSgwLDMpLGE9Imxhc3QiIT09ZS5zbGljZSgtNCkscz0ib2YtdHlwZSI9PT10O3JldHVybiAxPT09ciYmMD09PWk/ZnVuY3Rpb24oZSl7cmV0dXJuISFlLnBhcmVudE5vZGV9OmZ1bmN0aW9uKHQsbixsKXt2YXIgdSxjLHAsZixkLGgsZz1vIT09YT8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLG09dC5wYXJlbnROb2RlLHk9cyYmdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHY9IWwmJiFzO2lmKG0pe2lmKG8pe3doaWxlKGcpe3A9dDt3aGlsZShwPXBbZ10paWYocz9wLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT15OjE9PT1wLm5vZGVUeXBlKXJldHVybiExO2g9Zz0ib25seSI9PT1lJiYhaCYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZihoPVthP20uZmlyc3RDaGlsZDptLmxhc3RDaGlsZF0sYSYmdil7Yz1tW2JdfHwobVtiXT17fSksdT1jW2VdfHxbXSxkPXVbMF09PT1UJiZ1WzFdLGY9dVswXT09PVQmJnVbMl0scD1kJiZtLmNoaWxkTm9kZXNbZF07d2hpbGUocD0rK2QmJnAmJnBbZ118fChmPWQ9MCl8fGgucG9wKCkpaWYoMT09PXAubm9kZVR5cGUmJisrZiYmcD09PXQpe2NbZV09W1QsZCxmXTticmVha319ZWxzZSBpZih2JiYodT0odFtiXXx8KHRbYl09e30pKVtlXSkmJnVbMF09PT1UKWY9dVsxXTtlbHNlIHdoaWxlKHA9KytkJiZwJiZwW2ddfHwoZj1kPTApfHxoLnBvcCgpKWlmKChzP3Aubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXk6MT09PXAubm9kZVR5cGUpJiYrK2YmJih2JiYoKHBbYl18fChwW2JdPXt9KSlbZV09W1QsZl0pLHA9PT10KSlicmVhaztyZXR1cm4gZi09aSxmPT09cnx8MD09PWYlciYmZi9yPj0wfX19LFBTRVVETzpmdW5jdGlvbihlLHQpe3ZhciBuLHI9by5wc2V1ZG9zW2VdfHxvLnNldEZpbHRlcnNbZS50b0xvd2VyQ2FzZSgpXXx8YXQuZXJyb3IoInVuc3VwcG9ydGVkIHBzZXVkbzogIitlKTtyZXR1cm4gcltiXT9yKHQpOnIubGVuZ3RoPjE/KG49W2UsZSwiIix0XSxvLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT9sdChmdW5jdGlvbihlLG4pe3ZhciBpLG89cihlLHQpLGE9by5sZW5ndGg7d2hpbGUoYS0tKWk9Ri5jYWxsKGUsb1thXSksZVtpXT0hKG5baV09b1thXSl9KTpmdW5jdGlvbihlKXtyZXR1cm4gcihlLDAsbil9KTpyfX0scHNldWRvczp7bm90Omx0KGZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49W10scj1sKGUucmVwbGFjZSh6LCIkMSIpKTtyZXR1cm4gcltiXT9sdChmdW5jdGlvbihlLHQsbixpKXt2YXIgbyxhPXIoZSxudWxsLGksW10pLHM9ZS5sZW5ndGg7d2hpbGUocy0tKShvPWFbc10pJiYoZVtzXT0hKHRbc109bykpfSk6ZnVuY3Rpb24oZSxpLG8pe3JldHVybiB0WzBdPWUscih0LG51bGwsbyxuKSwhbi5wb3AoKX19KSxoYXM6bHQoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBhdChlLHQpLmxlbmd0aD4wfX0pLGNvbnRhaW5zOmx0KGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4odC50ZXh0Q29udGVudHx8dC5pbm5lclRleHR8fGEodCkpLmluZGV4T2YoZSk+LTF9fSksbGFuZzpsdChmdW5jdGlvbihlKXtyZXR1cm4gRy50ZXN0KGV8fCIiKXx8YXQuZXJyb3IoInVuc3VwcG9ydGVkIGxhbmc6ICIrZSksZT1lLnJlcGxhY2UocnQsaXQpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24odCl7dmFyIG47ZG8gaWYobj1oP3QubGFuZzp0LmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKXx8dC5nZXRBdHRyaWJ1dGUoImxhbmciKSlyZXR1cm4gbj1uLnRvTG93ZXJDYXNlKCksbj09PWV8fDA9PT1uLmluZGV4T2YoZSsiLSIpO3doaWxlKCh0PXQucGFyZW50Tm9kZSkmJjE9PT10Lm5vZGVUeXBlKTtyZXR1cm4hMX19KSx0YXJnZXQ6ZnVuY3Rpb24odCl7dmFyIG49ZS5sb2NhdGlvbiYmZS5sb2NhdGlvbi5oYXNoO3JldHVybiBuJiZuLnNsaWNlKDEpPT09dC5pZH0scm9vdDpmdW5jdGlvbihlKXtyZXR1cm4gZT09PWR9LGZvY3VzOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09Zi5hY3RpdmVFbGVtZW50JiYoIWYuaGFzRm9jdXN8fGYuaGFzRm9jdXMoKSkmJiEhKGUudHlwZXx8ZS5ocmVmfHx+ZS50YWJJbmRleCl9LGVuYWJsZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9PT0hMX0sZGlzYWJsZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9PT0hMH0sY2hlY2tlZDpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiEhZS5jaGVja2VkfHwib3B0aW9uIj09PXQmJiEhZS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsZS5zZWxlY3RlZD09PSEwfSxlbXB0eTpmdW5jdGlvbihlKXtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpaWYoZS5ub2RlTmFtZT4iQCJ8fDM9PT1lLm5vZGVUeXBlfHw0PT09ZS5ub2RlVHlwZSlyZXR1cm4hMTtyZXR1cm4hMH0scGFyZW50OmZ1bmN0aW9uKGUpe3JldHVybiFvLnBzZXVkb3MuZW1wdHkoZSl9LGhlYWRlcjpmdW5jdGlvbihlKXtyZXR1cm4gdHQudGVzdChlLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV0LnRlc3QoZS5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiJidXR0b24iPT09ZS50eXBlfHwiYnV0dG9uIj09PXR9LHRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmInRleHQiPT09ZS50eXBlJiYobnVsbD09KHQ9ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSl8fHQudG9Mb3dlckNhc2UoKT09PWUudHlwZSl9LGZpcnN0Omh0KGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDpodChmdW5jdGlvbihlLHQpe3JldHVyblt0LTFdfSksZXE6aHQoZnVuY3Rpb24oZSx0LG4pe3JldHVyblswPm4/bit0Om5dfSksZXZlbjpodChmdW5jdGlvbihlLHQpe3ZhciBuPTA7Zm9yKDt0Pm47bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxvZGQ6aHQoZnVuY3Rpb24oZSx0KXt2YXIgbj0xO2Zvcig7dD5uO24rPTIpZS5wdXNoKG4pO3JldHVybiBlfSksbHQ6aHQoZnVuY3Rpb24oZSx0LG4pe3ZhciByPTA+bj9uK3Q6bjtmb3IoOy0tcj49MDspZS5wdXNoKHIpO3JldHVybiBlfSksZ3Q6aHQoZnVuY3Rpb24oZSx0LG4pe3ZhciByPTA+bj9uK3Q6bjtmb3IoO3Q+KytyOyllLnB1c2gocik7cmV0dXJuIGV9KX19LG8ucHNldWRvcy5udGg9by5wc2V1ZG9zLmVxO2ZvcihuIGlue3JhZGlvOiEwLGNoZWNrYm94OiEwLGZpbGU6ITAscGFzc3dvcmQ6ITAsaW1hZ2U6ITB9KW8ucHNldWRvc1tuXT1mdChuKTtmb3IobiBpbntzdWJtaXQ6ITAscmVzZXQ6ITB9KW8ucHNldWRvc1tuXT1kdChuKTtmdW5jdGlvbiBndCgpe31ndC5wcm90b3R5cGU9by5maWx0ZXJzPW8ucHNldWRvcyxvLnNldEZpbHRlcnM9bmV3IGd0O2Z1bmN0aW9uIG10KGUsdCl7dmFyIG4scixpLGEscyxsLHUsYz1rW2UrIiAiXTtpZihjKXJldHVybiB0PzA6Yy5zbGljZSgwKTtzPWUsbD1bXSx1PW8ucHJlRmlsdGVyO3doaWxlKHMpeyghbnx8KHI9WC5leGVjKHMpKSkmJihyJiYocz1zLnNsaWNlKHJbMF0ubGVuZ3RoKXx8cyksbC5wdXNoKGk9W10pKSxuPSExLChyPVUuZXhlYyhzKSkmJihuPXIuc2hpZnQoKSxpLnB1c2goe3ZhbHVlOm4sdHlwZTpyWzBdLnJlcGxhY2UoeiwiICIpfSkscz1zLnNsaWNlKG4ubGVuZ3RoKSk7Zm9yKGEgaW4gby5maWx0ZXIpIShyPVFbYV0uZXhlYyhzKSl8fHVbYV0mJiEocj11W2FdKHIpKXx8KG49ci5zaGlmdCgpLGkucHVzaCh7dmFsdWU6bix0eXBlOmEsbWF0Y2hlczpyfSkscz1zLnNsaWNlKG4ubGVuZ3RoKSk7aWYoIW4pYnJlYWt9cmV0dXJuIHQ/cy5sZW5ndGg6cz9hdC5lcnJvcihlKTprKGUsbCkuc2xpY2UoMCl9ZnVuY3Rpb24geXQoZSl7dmFyIHQ9MCxuPWUubGVuZ3RoLHI9IiI7Zm9yKDtuPnQ7dCsrKXIrPWVbdF0udmFsdWU7cmV0dXJuIHJ9ZnVuY3Rpb24gdnQoZSx0LG4pe3ZhciByPXQuZGlyLG89biYmInBhcmVudE5vZGUiPT09cixhPUMrKztyZXR1cm4gdC5maXJzdD9mdW5jdGlvbih0LG4saSl7d2hpbGUodD10W3JdKWlmKDE9PT10Lm5vZGVUeXBlfHxvKXJldHVybiBlKHQsbixpKX06ZnVuY3Rpb24odCxuLHMpe3ZhciBsLHUsYyxwPVQrIiAiK2E7aWYocyl7d2hpbGUodD10W3JdKWlmKCgxPT09dC5ub2RlVHlwZXx8bykmJmUodCxuLHMpKXJldHVybiEwfWVsc2Ugd2hpbGUodD10W3JdKWlmKDE9PT10Lm5vZGVUeXBlfHxvKWlmKGM9dFtiXXx8KHRbYl09e30pLCh1PWNbcl0pJiZ1WzBdPT09cCl7aWYoKGw9dVsxXSk9PT0hMHx8bD09PWkpcmV0dXJuIGw9PT0hMH1lbHNlIGlmKHU9Y1tyXT1bcF0sdVsxXT1lKHQsbixzKXx8aSx1WzFdPT09ITApcmV0dXJuITB9fWZ1bmN0aW9uIGJ0KGUpe3JldHVybiBlLmxlbmd0aD4xP2Z1bmN0aW9uKHQsbixyKXt2YXIgaT1lLmxlbmd0aDt3aGlsZShpLS0paWYoIWVbaV0odCxuLHIpKXJldHVybiExO3JldHVybiEwfTplWzBdfWZ1bmN0aW9uIHh0KGUsdCxuLHIsaSl7dmFyIG8sYT1bXSxzPTAsbD1lLmxlbmd0aCx1PW51bGwhPXQ7Zm9yKDtsPnM7cysrKShvPWVbc10pJiYoIW58fG4obyxyLGkpKSYmKGEucHVzaChvKSx1JiZ0LnB1c2gocykpO3JldHVybiBhfWZ1bmN0aW9uIHd0KGUsdCxuLHIsaSxvKXtyZXR1cm4gciYmIXJbYl0mJihyPXd0KHIpKSxpJiYhaVtiXSYmKGk9d3QoaSxvKSksbHQoZnVuY3Rpb24obyxhLHMsbCl7dmFyIHUsYyxwLGY9W10sZD1bXSxoPWEubGVuZ3RoLGc9b3x8TnQodHx8IioiLHMubm9kZVR5cGU/W3NdOnMsW10pLG09IWV8fCFvJiZ0P2c6eHQoZyxmLGUscyxsKSx5PW4/aXx8KG8/ZTpofHxyKT9bXTphOm07aWYobiYmbihtLHkscyxsKSxyKXt1PXh0KHksZCkscih1LFtdLHMsbCksYz11Lmxlbmd0aDt3aGlsZShjLS0pKHA9dVtjXSkmJih5W2RbY11dPSEobVtkW2NdXT1wKSl9aWYobyl7aWYoaXx8ZSl7aWYoaSl7dT1bXSxjPXkubGVuZ3RoO3doaWxlKGMtLSkocD15W2NdKSYmdS5wdXNoKG1bY109cCk7aShudWxsLHk9W10sdSxsKX1jPXkubGVuZ3RoO3doaWxlKGMtLSkocD15W2NdKSYmKHU9aT9GLmNhbGwobyxwKTpmW2NdKT4tMSYmKG9bdV09IShhW3VdPXApKX19ZWxzZSB5PXh0KHk9PT1hP3kuc3BsaWNlKGgseS5sZW5ndGgpOnkpLGk/aShudWxsLGEseSxsKTpNLmFwcGx5KGEseSl9KX1mdW5jdGlvbiBUdChlKXt2YXIgdCxuLHIsaT1lLmxlbmd0aCxhPW8ucmVsYXRpdmVbZVswXS50eXBlXSxzPWF8fG8ucmVsYXRpdmVbIiAiXSxsPWE/MTowLGM9dnQoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10fSxzLCEwKSxwPXZ0KGZ1bmN0aW9uKGUpe3JldHVybiBGLmNhbGwodCxlKT4tMX0scywhMCksZj1bZnVuY3Rpb24oZSxuLHIpe3JldHVybiFhJiYocnx8biE9PXUpfHwoKHQ9bikubm9kZVR5cGU/YyhlLG4scik6cChlLG4scikpfV07Zm9yKDtpPmw7bCsrKWlmKG49by5yZWxhdGl2ZVtlW2xdLnR5cGVdKWY9W3Z0KGJ0KGYpLG4pXTtlbHNle2lmKG49by5maWx0ZXJbZVtsXS50eXBlXS5hcHBseShudWxsLGVbbF0ubWF0Y2hlcyksbltiXSl7Zm9yKHI9KytsO2k+cjtyKyspaWYoby5yZWxhdGl2ZVtlW3JdLnR5cGVdKWJyZWFrO3JldHVybiB3dChsPjEmJmJ0KGYpLGw+MSYmeXQoZS5zbGljZSgwLGwtMSkuY29uY2F0KHt2YWx1ZToiICI9PT1lW2wtMl0udHlwZT8iKiI6IiJ9KSkucmVwbGFjZSh6LCIkMSIpLG4scj5sJiZUdChlLnNsaWNlKGwscikpLGk+ciYmVHQoZT1lLnNsaWNlKHIpKSxpPnImJnl0KGUpKX1mLnB1c2gobil9cmV0dXJuIGJ0KGYpfWZ1bmN0aW9uIEN0KGUsdCl7dmFyIG49MCxyPXQubGVuZ3RoPjAsYT1lLmxlbmd0aD4wLHM9ZnVuY3Rpb24ocyxsLGMscCxkKXt2YXIgaCxnLG0seT1bXSx2PTAsYj0iMCIseD1zJiZbXSx3PW51bGwhPWQsQz11LE49c3x8YSYmby5maW5kLlRBRygiKiIsZCYmbC5wYXJlbnROb2RlfHxsKSxrPVQrPW51bGw9PUM/MTpNYXRoLnJhbmRvbSgpfHwuMTtmb3IodyYmKHU9bCE9PWYmJmwsaT1uKTtudWxsIT0oaD1OW2JdKTtiKyspe2lmKGEmJmgpe2c9MDt3aGlsZShtPWVbZysrXSlpZihtKGgsbCxjKSl7cC5wdXNoKGgpO2JyZWFrfXcmJihUPWssaT0rK24pfXImJigoaD0hbSYmaCkmJnYtLSxzJiZ4LnB1c2goaCkpfWlmKHYrPWIsciYmYiE9PXYpe2c9MDt3aGlsZShtPXRbZysrXSltKHgseSxsLGMpO2lmKHMpe2lmKHY+MCl3aGlsZShiLS0peFtiXXx8eVtiXXx8KHlbYl09cS5jYWxsKHApKTt5PXh0KHkpfU0uYXBwbHkocCx5KSx3JiYhcyYmeS5sZW5ndGg+MCYmdit0Lmxlbmd0aD4xJiZhdC51bmlxdWVTb3J0KHApfXJldHVybiB3JiYoVD1rLHU9QykseH07cmV0dXJuIHI/bHQocyk6c31sPWF0LmNvbXBpbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9W10sbz1FW2UrIiAiXTtpZighbyl7dHx8KHQ9bXQoZSkpLG49dC5sZW5ndGg7d2hpbGUobi0tKW89VHQodFtuXSksb1tiXT9yLnB1c2gobyk6aS5wdXNoKG8pO289RShlLEN0KGkscikpfXJldHVybiBvfTtmdW5jdGlvbiBOdChlLHQsbil7dmFyIHI9MCxpPXQubGVuZ3RoO2Zvcig7aT5yO3IrKylhdChlLHRbcl0sbik7cmV0dXJuIG59ZnVuY3Rpb24ga3QoZSx0LG4saSl7dmFyIGEscyx1LGMscCxmPW10KGUpO2lmKCFpJiYxPT09Zi5sZW5ndGgpe2lmKHM9ZlswXT1mWzBdLnNsaWNlKDApLHMubGVuZ3RoPjImJiJJRCI9PT0odT1zWzBdKS50eXBlJiZyLmdldEJ5SWQmJjk9PT10Lm5vZGVUeXBlJiZoJiZvLnJlbGF0aXZlW3NbMV0udHlwZV0pe2lmKHQ9KG8uZmluZC5JRCh1Lm1hdGNoZXNbMF0ucmVwbGFjZShydCxpdCksdCl8fFtdKVswXSwhdClyZXR1cm4gbjtlPWUuc2xpY2Uocy5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9YT1RLm5lZWRzQ29udGV4dC50ZXN0KGUpPzA6cy5sZW5ndGg7d2hpbGUoYS0tKXtpZih1PXNbYV0sby5yZWxhdGl2ZVtjPXUudHlwZV0pYnJlYWs7aWYoKHA9by5maW5kW2NdKSYmKGk9cCh1Lm1hdGNoZXNbMF0ucmVwbGFjZShydCxpdCksVi50ZXN0KHNbMF0udHlwZSkmJnQucGFyZW50Tm9kZXx8dCkpKXtpZihzLnNwbGljZShhLDEpLGU9aS5sZW5ndGgmJnl0KHMpLCFlKXJldHVybiBNLmFwcGx5KG4saSksbjticmVha319fXJldHVybiBsKGUsZikoaSx0LCFoLG4sVi50ZXN0KGUpKSxufXIuc29ydFN0YWJsZT1iLnNwbGl0KCIiKS5zb3J0KEEpLmpvaW4oIiIpPT09YixyLmRldGVjdER1cGxpY2F0ZXM9UyxwKCksci5zb3J0RGV0YWNoZWQ9dXQoZnVuY3Rpb24oZSl7cmV0dXJuIDEmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihmLmNyZWF0ZUVsZW1lbnQoImRpdiIpKX0pLHV0KGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGN0KCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihlLG4scil7cmV0dXJuIHI/dDplLmdldEF0dHJpYnV0ZShuLCJ0eXBlIj09PW4udG9Mb3dlckNhc2UoKT8xOjIpfSksci5hdHRyaWJ1dGVzJiZ1dChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxpbnB1dC8+IixlLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIpLCIiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgidmFsdWUiKX0pfHxjdCgidmFsdWUiLGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gcnx8ImlucHV0IiE9PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT90OmUuZGVmYXVsdFZhbHVlfSksdXQoZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWUuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpfSl8fGN0KEIsZnVuY3Rpb24oZSxuLHIpe3ZhciBpO3JldHVybiByP3Q6KGk9ZS5nZXRBdHRyaWJ1dGVOb2RlKG4pKSYmaS5zcGVjaWZpZWQ/aS52YWx1ZTplW25dPT09ITA/bi50b0xvd2VyQ2FzZSgpOm51bGx9KSx4LmZpbmQ9YXQseC5leHByPWF0LnNlbGVjdG9ycyx4LmV4cHJbIjoiXT14LmV4cHIucHNldWRvcyx4LnVuaXF1ZT1hdC51bmlxdWVTb3J0LHgudGV4dD1hdC5nZXRUZXh0LHguaXNYTUxEb2M9YXQuaXNYTUwseC5jb250YWlucz1hdC5jb250YWluc30oZSk7dmFyIE89e307ZnVuY3Rpb24gRihlKXt2YXIgdD1PW2VdPXt9O3JldHVybiB4LmVhY2goZS5tYXRjaChUKXx8W10sZnVuY3Rpb24oZSxuKXt0W25dPSEwfSksdH14LkNhbGxiYWNrcz1mdW5jdGlvbihlKXtlPSJzdHJpbmciPT10eXBlb2YgZT9PW2VdfHxGKGUpOnguZXh0ZW5kKHt9LGUpO3ZhciBuLHIsaSxvLGEscyxsPVtdLHU9IWUub25jZSYmW10sYz1mdW5jdGlvbih0KXtmb3Iocj1lLm1lbW9yeSYmdCxpPSEwLGE9c3x8MCxzPTAsbz1sLmxlbmd0aCxuPSEwO2wmJm8+YTthKyspaWYobFthXS5hcHBseSh0WzBdLHRbMV0pPT09ITEmJmUuc3RvcE9uRmFsc2Upe3I9ITE7YnJlYWt9bj0hMSxsJiYodT91Lmxlbmd0aCYmYyh1LnNoaWZ0KCkpOnI/bD1bXTpwLmRpc2FibGUoKSl9LHA9e2FkZDpmdW5jdGlvbigpe2lmKGwpe3ZhciB0PWwubGVuZ3RoOyhmdW5jdGlvbiBpKHQpe3guZWFjaCh0LGZ1bmN0aW9uKHQsbil7dmFyIHI9eC50eXBlKG4pOyJmdW5jdGlvbiI9PT1yP2UudW5pcXVlJiZwLmhhcyhuKXx8bC5wdXNoKG4pOm4mJm4ubGVuZ3RoJiYic3RyaW5nIiE9PXImJmkobil9KX0pKGFyZ3VtZW50cyksbj9vPWwubGVuZ3RoOnImJihzPXQsYyhyKSl9cmV0dXJuIHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiBsJiZ4LmVhY2goYXJndW1lbnRzLGZ1bmN0aW9uKGUsdCl7dmFyIHI7d2hpbGUoKHI9eC5pbkFycmF5KHQsbCxyKSk+LTEpbC5zcGxpY2UociwxKSxuJiYobz49ciYmby0tLGE+PXImJmEtLSl9KSx0aGlzfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/eC5pbkFycmF5KGUsbCk+LTE6ISghbHx8IWwubGVuZ3RoKX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gbD1bXSxvPTAsdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBsPXU9cj10LHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWx9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdT10LHJ8fHAuZGlzYWJsZSgpLHRoaXN9LGxvY2tlZDpmdW5jdGlvbigpe3JldHVybiF1fSxmaXJlV2l0aDpmdW5jdGlvbihlLHQpe3JldHVybiFsfHxpJiYhdXx8KHQ9dHx8W10sdD1bZSx0LnNsaWNlP3Quc2xpY2UoKTp0XSxuP3UucHVzaCh0KTpjKHQpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIHAuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFpfX07cmV0dXJuIHB9LHguZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbihlKXt2YXIgdD1bWyJyZXNvbHZlIiwiZG9uZSIseC5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIix4LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVqZWN0ZWQiXSxbIm5vdGlmeSIsInByb2dyZXNzIix4LkNhbGxiYWNrcygibWVtb3J5IildXSxuPSJwZW5kaW5nIixyPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBufSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gaS5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LHRoZW46ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7cmV0dXJuIHguRGVmZXJyZWQoZnVuY3Rpb24obil7eC5lYWNoKHQsZnVuY3Rpb24odCxvKXt2YXIgYT1vWzBdLHM9eC5pc0Z1bmN0aW9uKGVbdF0pJiZlW3RdO2lbb1sxXV0oZnVuY3Rpb24oKXt2YXIgZT1zJiZzLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlJiZ4LmlzRnVuY3Rpb24oZS5wcm9taXNlKT9lLnByb21pc2UoKS5kb25lKG4ucmVzb2x2ZSkuZmFpbChuLnJlamVjdCkucHJvZ3Jlc3Mobi5ub3RpZnkpOm5bYSsiV2l0aCJdKHRoaXM9PT1yP24ucHJvbWlzZSgpOnRoaXMscz9bZV06YXJndW1lbnRzKX0pfSksZT1udWxsfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lP3guZXh0ZW5kKGUscik6cn19LGk9e307cmV0dXJuIHIucGlwZT1yLnRoZW4seC5lYWNoKHQsZnVuY3Rpb24oZSxvKXt2YXIgYT1vWzJdLHM9b1szXTtyW29bMV1dPWEuYWRkLHMmJmEuYWRkKGZ1bmN0aW9uKCl7bj1zfSx0WzFeZV1bMl0uZGlzYWJsZSx0WzJdWzJdLmxvY2spLGlbb1swXV09ZnVuY3Rpb24oKXtyZXR1cm4gaVtvWzBdKyJXaXRoIl0odGhpcz09PWk/cjp0aGlzLGFyZ3VtZW50cyksdGhpc30saVtvWzBdKyJXaXRoIl09YS5maXJlV2l0aH0pLHIucHJvbWlzZShpKSxlJiZlLmNhbGwoaSxpKSxpfSx3aGVuOmZ1bmN0aW9uKGUpe3ZhciB0PTAsbj1nLmNhbGwoYXJndW1lbnRzKSxyPW4ubGVuZ3RoLGk9MSE9PXJ8fGUmJnguaXNGdW5jdGlvbihlLnByb21pc2UpP3I6MCxvPTE9PT1pP2U6eC5EZWZlcnJlZCgpLGE9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXt0W2VdPXRoaXMsbltlXT1hcmd1bWVudHMubGVuZ3RoPjE/Zy5jYWxsKGFyZ3VtZW50cyk6cixuPT09cz9vLm5vdGlmeVdpdGgodCxuKTotLWl8fG8ucmVzb2x2ZVdpdGgodCxuKX19LHMsbCx1O2lmKHI+MSlmb3Iocz1BcnJheShyKSxsPUFycmF5KHIpLHU9QXJyYXkocik7cj50O3QrKyluW3RdJiZ4LmlzRnVuY3Rpb24oblt0XS5wcm9taXNlKT9uW3RdLnByb21pc2UoKS5kb25lKGEodCx1LG4pKS5mYWlsKG8ucmVqZWN0KS5wcm9ncmVzcyhhKHQsbCxzKSk6LS1pO3JldHVybiBpfHxvLnJlc29sdmVXaXRoKHUsbiksby5wcm9taXNlKCl9fSkseC5zdXBwb3J0PWZ1bmN0aW9uKHQpe3ZhciBuLHIsbyxzLGwsdSxjLHAsZixkPWEuY3JlYXRlRWxlbWVudCgiZGl2Iik7aWYoZC5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxkLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixuPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKXx8W10scj1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF0sIXJ8fCFyLnN0eWxlfHwhbi5sZW5ndGgpcmV0dXJuIHQ7cz1hLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLHU9cy5hcHBlbmRDaGlsZChhLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSxvPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0sci5zdHlsZS5jc3NUZXh0PSJ0b3A6MXB4O2Zsb2F0OmxlZnQ7b3BhY2l0eTouNSIsdC5nZXRTZXRBdHRyaWJ1dGU9InQiIT09ZC5jbGFzc05hbWUsdC5sZWFkaW5nV2hpdGVzcGFjZT0zPT09ZC5maXJzdENoaWxkLm5vZGVUeXBlLHQudGJvZHk9IWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IikubGVuZ3RoLHQuaHRtbFNlcmlhbGl6ZT0hIWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsdC5zdHlsZT0vdG9wLy50ZXN0KHIuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSx0LmhyZWZOb3JtYWxpemVkPSIvYSI9PT1yLmdldEF0dHJpYnV0ZSgiaHJlZiIpLHQub3BhY2l0eT0vXjAuNS8udGVzdChyLnN0eWxlLm9wYWNpdHkpLHQuY3NzRmxvYXQ9ISFyLnN0eWxlLmNzc0Zsb2F0LHQuY2hlY2tPbj0hIW8udmFsdWUsdC5vcHRTZWxlY3RlZD11LnNlbGVjdGVkLHQuZW5jdHlwZT0hIWEuY3JlYXRlRWxlbWVudCgiZm9ybSIpLmVuY3R5cGUsdC5odG1sNUNsb25lPSI8Om5hdj48LzpuYXY+IiE9PWEuY3JlYXRlRWxlbWVudCgibmF2IikuY2xvbmVOb2RlKCEwKS5vdXRlckhUTUwsdC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PSExLHQuc2hyaW5rV3JhcEJsb2Nrcz0hMSx0LnBpeGVsUG9zaXRpb249ITEsdC5kZWxldGVFeHBhbmRvPSEwLHQubm9DbG9uZUV2ZW50PSEwLHQucmVsaWFibGVNYXJnaW5SaWdodD0hMCx0LmJveFNpemluZ1JlbGlhYmxlPSEwLG8uY2hlY2tlZD0hMCx0Lm5vQ2xvbmVDaGVja2VkPW8uY2xvbmVOb2RlKCEwKS5jaGVja2VkLHMuZGlzYWJsZWQ9ITAsdC5vcHREaXNhYmxlZD0hdS5kaXNhYmxlZDt0cnl7ZGVsZXRlIGQudGVzdH1jYXRjaChoKXt0LmRlbGV0ZUV4cGFuZG89ITF9bz1hLmNyZWF0ZUVsZW1lbnQoImlucHV0Iiksby5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksdC5pbnB1dD0iIj09PW8uZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpLG8udmFsdWU9InQiLG8uc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKSx0LnJhZGlvVmFsdWU9InQiPT09by52YWx1ZSxvLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsInQiKSxvLnNldEF0dHJpYnV0ZSgibmFtZSIsInQiKSxsPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGwuYXBwZW5kQ2hpbGQobyksdC5hcHBlbmRDaGVja2VkPW8uY2hlY2tlZCx0LmNoZWNrQ2xvbmU9bC5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsZC5hdHRhY2hFdmVudCYmKGQuYXR0YWNoRXZlbnQoIm9uY2xpY2siLGZ1bmN0aW9uKCl7dC5ub0Nsb25lRXZlbnQ9ITF9KSxkLmNsb25lTm9kZSghMCkuY2xpY2soKSk7Zm9yKGYgaW57c3VibWl0OiEwLGNoYW5nZTohMCxmb2N1c2luOiEwfSlkLnNldEF0dHJpYnV0ZShjPSJvbiIrZiwidCIpLHRbZisiQnViYmxlcyJdPWMgaW4gZXx8ZC5hdHRyaWJ1dGVzW2NdLmV4cGFuZG89PT0hMTtkLnN0eWxlLmJhY2tncm91bmRDbGlwPSJjb250ZW50LWJveCIsZC5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPSIiLHQuY2xlYXJDbG9uZVN0eWxlPSJjb250ZW50LWJveCI9PT1kLnN0eWxlLmJhY2tncm91bmRDbGlwO2ZvcihmIGluIHgodCkpYnJlYWs7cmV0dXJuIHQub3duTGFzdD0iMCIhPT1mLHgoZnVuY3Rpb24oKXt2YXIgbixyLG8scz0icGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7LXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94OyIsbD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07bCYmKG49YS5jcmVhdGVFbGVtZW50KCJkaXYiKSxuLnN0eWxlLmNzc1RleHQ9ImJvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDotOTk5OXB4O21hcmdpbi10b3A6MXB4IixsLmFwcGVuZENoaWxkKG4pLmFwcGVuZENoaWxkKGQpLGQuaW5uZXJIVE1MPSI8dGFibGU+PHRyPjx0ZD48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+IixvPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIiksb1swXS5zdHlsZS5jc3NUZXh0PSJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpub25lIixwPTA9PT1vWzBdLm9mZnNldEhlaWdodCxvWzBdLnN0eWxlLmRpc3BsYXk9IiIsb1sxXS5zdHlsZS5kaXNwbGF5PSJub25lIix0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cz1wJiYwPT09b1swXS5vZmZzZXRIZWlnaHQsZC5pbm5lckhUTUw9IiIsZC5zdHlsZS5jc3NUZXh0PSJib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxcHg7Ym9yZGVyOjFweDtkaXNwbGF5OmJsb2NrO3dpZHRoOjRweDttYXJnaW4tdG9wOjElO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxJTsiLHguc3dhcChsLG51bGwhPWwuc3R5bGUuem9vbT97em9vbToxfTp7fSxmdW5jdGlvbigpe3QuYm94U2l6aW5nPTQ9PT1kLm9mZnNldFdpZHRofSksZS5nZXRDb21wdXRlZFN0eWxlJiYodC5waXhlbFBvc2l0aW9uPSIxJSIhPT0oZS5nZXRDb21wdXRlZFN0eWxlKGQsbnVsbCl8fHt9KS50b3AsdC5ib3hTaXppbmdSZWxpYWJsZT0iNHB4Ij09PShlLmdldENvbXB1dGVkU3R5bGUoZCxudWxsKXx8e3dpZHRoOiI0cHgifSkud2lkdGgscj1kLmFwcGVuZENoaWxkKGEuY3JlYXRlRWxlbWVudCgiZGl2IikpLHIuc3R5bGUuY3NzVGV4dD1kLnN0eWxlLmNzc1RleHQ9cyxyLnN0eWxlLm1hcmdpblJpZ2h0PXIuc3R5bGUud2lkdGg9IjAiLGQuc3R5bGUud2lkdGg9IjFweCIsdC5yZWxpYWJsZU1hcmdpblJpZ2h0PSFwYXJzZUZsb2F0KChlLmdldENvbXB1dGVkU3R5bGUocixudWxsKXx8e30pLm1hcmdpblJpZ2h0KSksdHlwZW9mIGQuc3R5bGUuem9vbSE9PWkmJihkLmlubmVySFRNTD0iIixkLnN0eWxlLmNzc1RleHQ9cysid2lkdGg6MXB4O3BhZGRpbmc6MXB4O2Rpc3BsYXk6aW5saW5lO3pvb206MSIsdC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PTM9PT1kLm9mZnNldFdpZHRoLGQuc3R5bGUuZGlzcGxheT0iYmxvY2siLGQuaW5uZXJIVE1MPSI8ZGl2PjwvZGl2PiIsZC5maXJzdENoaWxkLnN0eWxlLndpZHRoPSI1cHgiLHQuc2hyaW5rV3JhcEJsb2Nrcz0zIT09ZC5vZmZzZXRXaWR0aCx0LmlubGluZUJsb2NrTmVlZHNMYXlvdXQmJihsLnN0eWxlLnpvb209MSkpLGwucmVtb3ZlQ2hpbGQobiksbj1kPW89cj1udWxsKX0pLG49cz1sPXU9cj1vPW51bGwsdAp9KHt9KTt2YXIgQj0vKD86XHtbXHNcU10qXH18XFtbXHNcU10qXF0pJC8sUD0vKFtBLVpdKS9nO2Z1bmN0aW9uIFIoZSxuLHIsaSl7aWYoeC5hY2NlcHREYXRhKGUpKXt2YXIgbyxhLHM9eC5leHBhbmRvLGw9ZS5ub2RlVHlwZSx1PWw/eC5jYWNoZTplLGM9bD9lW3NdOmVbc10mJnM7aWYoYyYmdVtjXSYmKGl8fHVbY10uZGF0YSl8fHIhPT10fHwic3RyaW5nIiE9dHlwZW9mIG4pcmV0dXJuIGN8fChjPWw/ZVtzXT1wLnBvcCgpfHx4Lmd1aWQrKzpzKSx1W2NdfHwodVtjXT1sP3t9Ont0b0pTT046eC5ub29wfSksKCJvYmplY3QiPT10eXBlb2Ygbnx8ImZ1bmN0aW9uIj09dHlwZW9mIG4pJiYoaT91W2NdPXguZXh0ZW5kKHVbY10sbik6dVtjXS5kYXRhPXguZXh0ZW5kKHVbY10uZGF0YSxuKSksYT11W2NdLGl8fChhLmRhdGF8fChhLmRhdGE9e30pLGE9YS5kYXRhKSxyIT09dCYmKGFbeC5jYW1lbENhc2UobildPXIpLCJzdHJpbmciPT10eXBlb2Ygbj8obz1hW25dLG51bGw9PW8mJihvPWFbeC5jYW1lbENhc2UobildKSk6bz1hLG99fWZ1bmN0aW9uIFcoZSx0LG4pe2lmKHguYWNjZXB0RGF0YShlKSl7dmFyIHIsaSxvPWUubm9kZVR5cGUsYT1vP3guY2FjaGU6ZSxzPW8/ZVt4LmV4cGFuZG9dOnguZXhwYW5kbztpZihhW3NdKXtpZih0JiYocj1uP2Fbc106YVtzXS5kYXRhKSl7eC5pc0FycmF5KHQpP3Q9dC5jb25jYXQoeC5tYXAodCx4LmNhbWVsQ2FzZSkpOnQgaW4gcj90PVt0XToodD14LmNhbWVsQ2FzZSh0KSx0PXQgaW4gcj9bdF06dC5zcGxpdCgiICIpKSxpPXQubGVuZ3RoO3doaWxlKGktLSlkZWxldGUgclt0W2ldXTtpZihuPyFJKHIpOiF4LmlzRW1wdHlPYmplY3QocikpcmV0dXJufShufHwoZGVsZXRlIGFbc10uZGF0YSxJKGFbc10pKSkmJihvP3guY2xlYW5EYXRhKFtlXSwhMCk6eC5zdXBwb3J0LmRlbGV0ZUV4cGFuZG98fGEhPWEud2luZG93P2RlbGV0ZSBhW3NdOmFbc109bnVsbCl9fX14LmV4dGVuZCh7Y2FjaGU6e30sbm9EYXRhOnthcHBsZXQ6ITAsZW1iZWQ6ITAsb2JqZWN0OiJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAifSxoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBlPWUubm9kZVR5cGU/eC5jYWNoZVtlW3guZXhwYW5kb11dOmVbeC5leHBhbmRvXSwhIWUmJiFJKGUpfSxkYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUihlLHQsbil9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gVyhlLHQpfSxfZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFIoZSx0LG4sITApfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiBXKGUsdCwhMCl9LGFjY2VwdERhdGE6ZnVuY3Rpb24oZSl7aWYoZS5ub2RlVHlwZSYmMSE9PWUubm9kZVR5cGUmJjkhPT1lLm5vZGVUeXBlKXJldHVybiExO3ZhciB0PWUubm9kZU5hbWUmJngubm9EYXRhW2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07cmV0dXJuIXR8fHQhPT0hMCYmZS5nZXRBdHRyaWJ1dGUoImNsYXNzaWQiKT09PXR9fSkseC5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oZSxuKXt2YXIgcixpLG89bnVsbCxhPTAscz10aGlzWzBdO2lmKGU9PT10KXtpZih0aGlzLmxlbmd0aCYmKG89eC5kYXRhKHMpLDE9PT1zLm5vZGVUeXBlJiYheC5fZGF0YShzLCJwYXJzZWRBdHRycyIpKSl7Zm9yKHI9cy5hdHRyaWJ1dGVzO3IubGVuZ3RoPmE7YSsrKWk9clthXS5uYW1lLDA9PT1pLmluZGV4T2YoImRhdGEtIikmJihpPXguY2FtZWxDYXNlKGkuc2xpY2UoNSkpLCQocyxpLG9baV0pKTt4Ll9kYXRhKHMsInBhcnNlZEF0dHJzIiwhMCl9cmV0dXJuIG99cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP3RoaXMuZWFjaChmdW5jdGlvbigpe3guZGF0YSh0aGlzLGUpfSk6YXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaChmdW5jdGlvbigpe3guZGF0YSh0aGlzLGUsbil9KTpzPyQocyxlLHguZGF0YShzLGUpKTpudWxsfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt4LnJlbW92ZURhdGEodGhpcyxlKX0pfX0pO2Z1bmN0aW9uICQoZSxuLHIpe2lmKHI9PT10JiYxPT09ZS5ub2RlVHlwZSl7dmFyIGk9ImRhdGEtIituLnJlcGxhY2UoUCwiLSQxIikudG9Mb3dlckNhc2UoKTtpZihyPWUuZ2V0QXR0cmlidXRlKGkpLCJzdHJpbmciPT10eXBlb2Ygcil7dHJ5e3I9InRydWUiPT09cj8hMDoiZmFsc2UiPT09cj8hMToibnVsbCI9PT1yP251bGw6K3IrIiI9PT1yPytyOkIudGVzdChyKT94LnBhcnNlSlNPTihyKTpyfWNhdGNoKG8pe314LmRhdGEoZSxuLHIpfWVsc2Ugcj10fXJldHVybiByfWZ1bmN0aW9uIEkoZSl7dmFyIHQ7Zm9yKHQgaW4gZSlpZigoImRhdGEiIT09dHx8IXguaXNFbXB0eU9iamVjdChlW3RdKSkmJiJ0b0pTT04iIT09dClyZXR1cm4hMTtyZXR1cm4hMH14LmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpO3JldHVybiBlPyhuPShufHwiZngiKSsicXVldWUiLGk9eC5fZGF0YShlLG4pLHImJighaXx8eC5pc0FycmF5KHIpP2k9eC5fZGF0YShlLG4seC5tYWtlQXJyYXkocikpOmkucHVzaChyKSksaXx8W10pOnR9LGRlcXVldWU6ZnVuY3Rpb24oZSx0KXt0PXR8fCJmeCI7dmFyIG49eC5xdWV1ZShlLHQpLHI9bi5sZW5ndGgsaT1uLnNoaWZ0KCksbz14Ll9xdWV1ZUhvb2tzKGUsdCksYT1mdW5jdGlvbigpe3guZGVxdWV1ZShlLHQpfTsiaW5wcm9ncmVzcyI9PT1pJiYoaT1uLnNoaWZ0KCksci0tKSxpJiYoImZ4Ij09PXQmJm4udW5zaGlmdCgiaW5wcm9ncmVzcyIpLGRlbGV0ZSBvLnN0b3AsaS5jYWxsKGUsYSxvKSksIXImJm8mJm8uZW1wdHkuZmlyZSgpfSxfcXVldWVIb29rczpmdW5jdGlvbihlLHQpe3ZhciBuPXQrInF1ZXVlSG9va3MiO3JldHVybiB4Ll9kYXRhKGUsbil8fHguX2RhdGEoZSxuLHtlbXB0eTp4LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXt4Ll9yZW1vdmVEYXRhKGUsdCsicXVldWUiKSx4Ll9yZW1vdmVEYXRhKGUsbil9KX0pfX0pLHguZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLG4pe3ZhciByPTI7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlJiYobj1lLGU9ImZ4IixyLS0pLHI+YXJndW1lbnRzLmxlbmd0aD94LnF1ZXVlKHRoaXNbMF0sZSk6bj09PXQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD14LnF1ZXVlKHRoaXMsZSxuKTt4Ll9xdWV1ZUhvb2tzKHRoaXMsZSksImZ4Ij09PWUmJiJpbnByb2dyZXNzIiE9PXRbMF0mJnguZGVxdWV1ZSh0aGlzLGUpfSl9LGRlcXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3guZGVxdWV1ZSh0aGlzLGUpfSl9LGRlbGF5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9eC5meD94LmZ4LnNwZWVkc1tlXXx8ZTplLHQ9dHx8ImZ4Iix0aGlzLnF1ZXVlKHQsZnVuY3Rpb24odCxuKXt2YXIgcj1zZXRUaW1lb3V0KHQsZSk7bi5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHIpfX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnF1ZXVlKGV8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsbil7dmFyIHIsaT0xLG89eC5EZWZlcnJlZCgpLGE9dGhpcyxzPXRoaXMubGVuZ3RoLGw9ZnVuY3Rpb24oKXstLWl8fG8ucmVzb2x2ZVdpdGgoYSxbYV0pfTsic3RyaW5nIiE9dHlwZW9mIGUmJihuPWUsZT10KSxlPWV8fCJmeCI7d2hpbGUocy0tKXI9eC5fZGF0YShhW3NdLGUrInF1ZXVlSG9va3MiKSxyJiZyLmVtcHR5JiYoaSsrLHIuZW1wdHkuYWRkKGwpKTtyZXR1cm4gbCgpLG8ucHJvbWlzZShuKX19KTt2YXIgeixYLFU9L1tcdFxyXG5cZl0vZyxWPS9cci9nLFk9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkL2ksSj0vXig/OmF8YXJlYSkkL2ksRz0vXig/OmNoZWNrZWR8c2VsZWN0ZWQpJC9pLFE9eC5zdXBwb3J0LmdldFNldEF0dHJpYnV0ZSxLPXguc3VwcG9ydC5pbnB1dDt4LmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQpe3JldHVybiB4LmFjY2Vzcyh0aGlzLHguYXR0cixlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5yZW1vdmVBdHRyKHRoaXMsZSl9KX0scHJvcDpmdW5jdGlvbihlLHQpe3JldHVybiB4LmFjY2Vzcyh0aGlzLHgucHJvcCxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gZT14LnByb3BGaXhbZV18fGUsdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dHJ5e3RoaXNbZV09dCxkZWxldGUgdGhpc1tlXX1jYXRjaChuKXt9fSl9LGFkZENsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYT0wLHM9dGhpcy5sZW5ndGgsbD0ic3RyaW5nIj09dHlwZW9mIGUmJmU7aWYoeC5pc0Z1bmN0aW9uKGUpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7eCh0aGlzKS5hZGRDbGFzcyhlLmNhbGwodGhpcyx0LHRoaXMuY2xhc3NOYW1lKSl9KTtpZihsKWZvcih0PShlfHwiIikubWF0Y2goVCl8fFtdO3M+YTthKyspaWYobj10aGlzW2FdLHI9MT09PW4ubm9kZVR5cGUmJihuLmNsYXNzTmFtZT8oIiAiK24uY2xhc3NOYW1lKyIgIikucmVwbGFjZShVLCIgIik6IiAiKSl7bz0wO3doaWxlKGk9dFtvKytdKTA+ci5pbmRleE9mKCIgIitpKyIgIikmJihyKz1pKyIgIik7bi5jbGFzc05hbWU9eC50cmltKHIpfXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGE9MCxzPXRoaXMubGVuZ3RoLGw9MD09PWFyZ3VtZW50cy5sZW5ndGh8fCJzdHJpbmciPT10eXBlb2YgZSYmZTtpZih4LmlzRnVuY3Rpb24oZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXt4KHRoaXMpLnJlbW92ZUNsYXNzKGUuY2FsbCh0aGlzLHQsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGwpZm9yKHQ9KGV8fCIiKS5tYXRjaChUKXx8W107cz5hO2ErKylpZihuPXRoaXNbYV0scj0xPT09bi5ub2RlVHlwZSYmKG4uY2xhc3NOYW1lPygiICIrbi5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKFUsIiAiKToiIikpe289MDt3aGlsZShpPXRbbysrXSl3aGlsZShyLmluZGV4T2YoIiAiK2krIiAiKT49MClyPXIucmVwbGFjZSgiICIraSsiICIsIiAiKTtuLmNsYXNzTmFtZT1lP3gudHJpbShyKToiIn1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2YgZTtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0JiYic3RyaW5nIj09PW4/dD90aGlzLmFkZENsYXNzKGUpOnRoaXMucmVtb3ZlQ2xhc3MoZSk6eC5pc0Z1bmN0aW9uKGUpP3RoaXMuZWFjaChmdW5jdGlvbihuKXt4KHRoaXMpLnRvZ2dsZUNsYXNzKGUuY2FsbCh0aGlzLG4sdGhpcy5jbGFzc05hbWUsdCksdCl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXtpZigic3RyaW5nIj09PW4pe3ZhciB0LHI9MCxvPXgodGhpcyksYT1lLm1hdGNoKFQpfHxbXTt3aGlsZSh0PWFbcisrXSlvLmhhc0NsYXNzKHQpP28ucmVtb3ZlQ2xhc3ModCk6by5hZGRDbGFzcyh0KX1lbHNlKG49PT1pfHwiYm9vbGVhbiI9PT1uKSYmKHRoaXMuY2xhc3NOYW1lJiZ4Ll9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iLHRoaXMuY2xhc3NOYW1lKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZXx8ZT09PSExPyIiOnguX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIil9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQ9IiAiK2UrIiAiLG49MCxyPXRoaXMubGVuZ3RoO2Zvcig7cj5uO24rKylpZigxPT09dGhpc1tuXS5ub2RlVHlwZSYmKCIgIit0aGlzW25dLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoVSwiICIpLmluZGV4T2YodCk+PTApcmV0dXJuITA7cmV0dXJuITF9LHZhbDpmdW5jdGlvbihlKXt2YXIgbixyLGksbz10aGlzWzBdO3tpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBpPXguaXNGdW5jdGlvbihlKSx0aGlzLmVhY2goZnVuY3Rpb24obil7dmFyIG87MT09PXRoaXMubm9kZVR5cGUmJihvPWk/ZS5jYWxsKHRoaXMsbix4KHRoaXMpLnZhbCgpKTplLG51bGw9PW8/bz0iIjoibnVtYmVyIj09dHlwZW9mIG8/bys9IiI6eC5pc0FycmF5KG8pJiYobz14Lm1hcChvLGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOmUrIiJ9KSkscj14LnZhbEhvb2tzW3RoaXMudHlwZV18fHgudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSxyJiYic2V0ImluIHImJnIuc2V0KHRoaXMsbywidmFsdWUiKSE9PXR8fCh0aGlzLnZhbHVlPW8pKX0pO2lmKG8pcmV0dXJuIHI9eC52YWxIb29rc1tvLnR5cGVdfHx4LnZhbEhvb2tzW28ubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sciYmImdldCJpbiByJiYobj1yLmdldChvLCJ2YWx1ZSIpKSE9PXQ/bjoobj1vLnZhbHVlLCJzdHJpbmciPT10eXBlb2Ygbj9uLnJlcGxhY2UoViwiIik6bnVsbD09bj8iIjpuKX19fSkseC5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihlKXt2YXIgdD14LmZpbmQuYXR0cihlLCJ2YWx1ZSIpO3JldHVybiBudWxsIT10P3Q6ZS50ZXh0fX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyPWUub3B0aW9ucyxpPWUuc2VsZWN0ZWRJbmRleCxvPSJzZWxlY3Qtb25lIj09PWUudHlwZXx8MD5pLGE9bz9udWxsOltdLHM9bz9pKzE6ci5sZW5ndGgsbD0wPmk/czpvP2k6MDtmb3IoO3M+bDtsKyspaWYobj1yW2xdLCEoIW4uc2VsZWN0ZWQmJmwhPT1pfHwoeC5zdXBwb3J0Lm9wdERpc2FibGVkP24uZGlzYWJsZWQ6bnVsbCE9PW4uZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpKXx8bi5wYXJlbnROb2RlLmRpc2FibGVkJiZ4Lm5vZGVOYW1lKG4ucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2lmKHQ9eChuKS52YWwoKSxvKXJldHVybiB0O2EucHVzaCh0KX1yZXR1cm4gYX0sc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpPWUub3B0aW9ucyxvPXgubWFrZUFycmF5KHQpLGE9aS5sZW5ndGg7d2hpbGUoYS0tKXI9aVthXSwoci5zZWxlY3RlZD14LmluQXJyYXkoeChyKS52YWwoKSxvKT49MCkmJihuPSEwKTtyZXR1cm4gbnx8KGUuc2VsZWN0ZWRJbmRleD0tMSksb319fSxhdHRyOmZ1bmN0aW9uKGUsbixyKXt2YXIgbyxhLHM9ZS5ub2RlVHlwZTtpZihlJiYzIT09cyYmOCE9PXMmJjIhPT1zKXJldHVybiB0eXBlb2YgZS5nZXRBdHRyaWJ1dGU9PT1pP3gucHJvcChlLG4scik6KDE9PT1zJiZ4LmlzWE1MRG9jKGUpfHwobj1uLnRvTG93ZXJDYXNlKCksbz14LmF0dHJIb29rc1tuXXx8KHguZXhwci5tYXRjaC5ib29sLnRlc3Qobik/WDp6KSkscj09PXQ/byYmImdldCJpbiBvJiZudWxsIT09KGE9by5nZXQoZSxuKSk/YTooYT14LmZpbmQuYXR0cihlLG4pLG51bGw9PWE/dDphKTpudWxsIT09cj9vJiYic2V0ImluIG8mJihhPW8uc2V0KGUscixuKSkhPT10P2E6KGUuc2V0QXR0cmlidXRlKG4scisiIikscik6KHgucmVtb3ZlQXR0cihlLG4pLHQpKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT0wLG89dCYmdC5tYXRjaChUKTtpZihvJiYxPT09ZS5ub2RlVHlwZSl3aGlsZShuPW9baSsrXSlyPXgucHJvcEZpeFtuXXx8bix4LmV4cHIubWF0Y2guYm9vbC50ZXN0KG4pP0smJlF8fCFHLnRlc3Qobik/ZVtyXT0hMTplW3guY2FtZWxDYXNlKCJkZWZhdWx0LSIrbildPWVbcl09ITE6eC5hdHRyKGUsbiwiIiksZS5yZW1vdmVBdHRyaWJ1dGUoUT9uOnIpfSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihlLHQpe2lmKCF4LnN1cHBvcnQucmFkaW9WYWx1ZSYmInJhZGlvIj09PXQmJngubm9kZU5hbWUoZSwiaW5wdXQiKSl7dmFyIG49ZS52YWx1ZTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInR5cGUiLHQpLG4mJihlLnZhbHVlPW4pLHR9fX19LHByb3BGaXg6eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUifSxwcm9wOmZ1bmN0aW9uKGUsbixyKXt2YXIgaSxvLGEscz1lLm5vZGVUeXBlO2lmKGUmJjMhPT1zJiY4IT09cyYmMiE9PXMpcmV0dXJuIGE9MSE9PXN8fCF4LmlzWE1MRG9jKGUpLGEmJihuPXgucHJvcEZpeFtuXXx8bixvPXgucHJvcEhvb2tzW25dKSxyIT09dD9vJiYic2V0ImluIG8mJihpPW8uc2V0KGUscixuKSkhPT10P2k6ZVtuXT1yOm8mJiJnZXQiaW4gbyYmbnVsbCE9PShpPW8uZ2V0KGUsbikpP2k6ZVtuXX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXguZmluZC5hdHRyKGUsInRhYmluZGV4Iik7cmV0dXJuIHQ/cGFyc2VJbnQodCwxMCk6WS50ZXN0KGUubm9kZU5hbWUpfHxKLnRlc3QoZS5ub2RlTmFtZSkmJmUuaHJlZj8wOi0xfX19fSksWD17c2V0OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD09PSExP3gucmVtb3ZlQXR0cihlLG4pOksmJlF8fCFHLnRlc3Qobik/ZS5zZXRBdHRyaWJ1dGUoIVEmJngucHJvcEZpeFtuXXx8bixuKTplW3guY2FtZWxDYXNlKCJkZWZhdWx0LSIrbildPWVbbl09ITAsbn19LHguZWFjaCh4LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goL1x3Ky9nKSxmdW5jdGlvbihlLG4pe3ZhciByPXguZXhwci5hdHRySGFuZGxlW25dfHx4LmZpbmQuYXR0cjt4LmV4cHIuYXR0ckhhbmRsZVtuXT1LJiZRfHwhRy50ZXN0KG4pP2Z1bmN0aW9uKGUsbixpKXt2YXIgbz14LmV4cHIuYXR0ckhhbmRsZVtuXSxhPWk/dDooeC5leHByLmF0dHJIYW5kbGVbbl09dCkhPXIoZSxuLGkpP24udG9Mb3dlckNhc2UoKTpudWxsO3JldHVybiB4LmV4cHIuYXR0ckhhbmRsZVtuXT1vLGF9OmZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gcj90OmVbeC5jYW1lbENhc2UoImRlZmF1bHQtIituKV0/bi50b0xvd2VyQ2FzZSgpOm51bGx9fSksSyYmUXx8KHguYXR0ckhvb2tzLnZhbHVlPXtzZXQ6ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB4Lm5vZGVOYW1lKGUsImlucHV0Iik/KGUuZGVmYXVsdFZhbHVlPW4sdCk6eiYmei5zZXQoZSxuLHIpfX0pLFF8fCh6PXtzZXQ6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpPWUuZ2V0QXR0cmlidXRlTm9kZShyKTtyZXR1cm4gaXx8ZS5zZXRBdHRyaWJ1dGVOb2RlKGk9ZS5vd25lckRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZShyKSksaS52YWx1ZT1uKz0iIiwidmFsdWUiPT09cnx8bj09PWUuZ2V0QXR0cmlidXRlKHIpP246dH19LHguZXhwci5hdHRySGFuZGxlLmlkPXguZXhwci5hdHRySGFuZGxlLm5hbWU9eC5leHByLmF0dHJIYW5kbGUuY29vcmRzPWZ1bmN0aW9uKGUsbixyKXt2YXIgaTtyZXR1cm4gcj90OihpPWUuZ2V0QXR0cmlidXRlTm9kZShuKSkmJiIiIT09aS52YWx1ZT9pLnZhbHVlOm51bGx9LHgudmFsSG9va3MuYnV0dG9uPXtnZXQ6ZnVuY3Rpb24oZSxuKXt2YXIgcj1lLmdldEF0dHJpYnV0ZU5vZGUobik7cmV0dXJuIHImJnIuc3BlY2lmaWVkP3IudmFsdWU6dH0sc2V0Onouc2V0fSx4LmF0dHJIb29rcy5jb250ZW50ZWRpdGFibGU9e3NldDpmdW5jdGlvbihlLHQsbil7ei5zZXQoZSwiIj09PXQ/ITE6dCxuKX19LHguZWFjaChbIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oZSxuKXt4LmF0dHJIb29rc1tuXT17c2V0OmZ1bmN0aW9uKGUscil7cmV0dXJuIiI9PT1yPyhlLnNldEF0dHJpYnV0ZShuLCJhdXRvIikscik6dH19fSkpLHguc3VwcG9ydC5ocmVmTm9ybWFsaXplZHx8eC5lYWNoKFsiaHJlZiIsInNyYyJdLGZ1bmN0aW9uKGUsdCl7eC5wcm9wSG9va3NbdF09e2dldDpmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUodCw0KX19fSkseC5zdXBwb3J0LnN0eWxlfHwoeC5hdHRySG9va3Muc3R5bGU9e2dldDpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdHlsZS5jc3NUZXh0fHx0fSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zdHlsZS5jc3NUZXh0PXQrIiJ9fSkseC5zdXBwb3J0Lm9wdFNlbGVjdGVkfHwoeC5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJih0LnNlbGVjdGVkSW5kZXgsdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCksbnVsbH19KSx4LmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe3gucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSx4LnN1cHBvcnQuZW5jdHlwZXx8KHgucHJvcEZpeC5lbmN0eXBlPSJlbmNvZGluZyIpLHguZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe3gudmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihlLG4pe3JldHVybiB4LmlzQXJyYXkobik/ZS5jaGVja2VkPXguaW5BcnJheSh4KGUpLnZhbCgpLG4pPj0wOnR9fSx4LnN1cHBvcnQuY2hlY2tPbnx8KHgudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjplLnZhbHVlfSl9KTt2YXIgWj0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksZXQ9L15rZXkvLHR0PS9eKD86bW91c2V8Y29udGV4dG1lbnUpfGNsaWNrLyxudD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8scnQ9L14oW14uXSopKD86XC4oLispfCkkLztmdW5jdGlvbiBpdCgpe3JldHVybiEwfWZ1bmN0aW9uIG90KCl7cmV0dXJuITF9ZnVuY3Rpb24gYXQoKXt0cnl7cmV0dXJuIGEuYWN0aXZlRWxlbWVudH1jYXRjaChlKXt9fXguZXZlbnQ9e2dsb2JhbDp7fSxhZGQ6ZnVuY3Rpb24oZSxuLHIsbyxhKXt2YXIgcyxsLHUsYyxwLGYsZCxoLGcsbSx5LHY9eC5fZGF0YShlKTtpZih2KXtyLmhhbmRsZXImJihjPXIscj1jLmhhbmRsZXIsYT1jLnNlbGVjdG9yKSxyLmd1aWR8fChyLmd1aWQ9eC5ndWlkKyspLChsPXYuZXZlbnRzKXx8KGw9di5ldmVudHM9e30pLChmPXYuaGFuZGxlKXx8KGY9di5oYW5kbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiB4PT09aXx8ZSYmeC5ldmVudC50cmlnZ2VyZWQ9PT1lLnR5cGU/dDp4LmV2ZW50LmRpc3BhdGNoLmFwcGx5KGYuZWxlbSxhcmd1bWVudHMpfSxmLmVsZW09ZSksbj0obnx8IiIpLm1hdGNoKFQpfHxbIiJdLHU9bi5sZW5ndGg7d2hpbGUodS0tKXM9cnQuZXhlYyhuW3VdKXx8W10sZz15PXNbMV0sbT0oc1syXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLGcmJihwPXguZXZlbnQuc3BlY2lhbFtnXXx8e30sZz0oYT9wLmRlbGVnYXRlVHlwZTpwLmJpbmRUeXBlKXx8ZyxwPXguZXZlbnQuc3BlY2lhbFtnXXx8e30sZD14LmV4dGVuZCh7dHlwZTpnLG9yaWdUeXBlOnksZGF0YTpvLGhhbmRsZXI6cixndWlkOnIuZ3VpZCxzZWxlY3RvcjphLG5lZWRzQ29udGV4dDphJiZ4LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoYSksbmFtZXNwYWNlOm0uam9pbigiLiIpfSxjKSwoaD1sW2ddKXx8KGg9bFtnXT1bXSxoLmRlbGVnYXRlQ291bnQ9MCxwLnNldHVwJiZwLnNldHVwLmNhbGwoZSxvLG0sZikhPT0hMXx8KGUuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIoZyxmLCExKTplLmF0dGFjaEV2ZW50JiZlLmF0dGFjaEV2ZW50KCJvbiIrZyxmKSkpLHAuYWRkJiYocC5hZGQuY2FsbChlLGQpLGQuaGFuZGxlci5ndWlkfHwoZC5oYW5kbGVyLmd1aWQ9ci5ndWlkKSksYT9oLnNwbGljZShoLmRlbGVnYXRlQ291bnQrKywwLGQpOmgucHVzaChkKSx4LmV2ZW50Lmdsb2JhbFtnXT0hMCk7ZT1udWxsfX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG8sYSxzLGwsdSxjLHAsZixkLGgsZyxtPXguaGFzRGF0YShlKSYmeC5fZGF0YShlKTtpZihtJiYoYz1tLmV2ZW50cykpe3Q9KHR8fCIiKS5tYXRjaChUKXx8WyIiXSx1PXQubGVuZ3RoO3doaWxlKHUtLSlpZihzPXJ0LmV4ZWModFt1XSl8fFtdLGQ9Zz1zWzFdLGg9KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkKXtwPXguZXZlbnQuc3BlY2lhbFtkXXx8e30sZD0ocj9wLmRlbGVnYXRlVHlwZTpwLmJpbmRUeXBlKXx8ZCxmPWNbZF18fFtdLHM9c1syXSYmUmVnRXhwKCIoXnxcXC4pIitoLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpLGw9bz1mLmxlbmd0aDt3aGlsZShvLS0pYT1mW29dLCFpJiZnIT09YS5vcmlnVHlwZXx8biYmbi5ndWlkIT09YS5ndWlkfHxzJiYhcy50ZXN0KGEubmFtZXNwYWNlKXx8ciYmciE9PWEuc2VsZWN0b3ImJigiKioiIT09cnx8IWEuc2VsZWN0b3IpfHwoZi5zcGxpY2UobywxKSxhLnNlbGVjdG9yJiZmLmRlbGVnYXRlQ291bnQtLSxwLnJlbW92ZSYmcC5yZW1vdmUuY2FsbChlLGEpKTtsJiYhZi5sZW5ndGgmJihwLnRlYXJkb3duJiZwLnRlYXJkb3duLmNhbGwoZSxoLG0uaGFuZGxlKSE9PSExfHx4LnJlbW92ZUV2ZW50KGUsZCxtLmhhbmRsZSksZGVsZXRlIGNbZF0pfWVsc2UgZm9yKGQgaW4gYyl4LmV2ZW50LnJlbW92ZShlLGQrdFt1XSxuLHIsITApO3guaXNFbXB0eU9iamVjdChjKSYmKGRlbGV0ZSBtLmhhbmRsZSx4Ll9yZW1vdmVEYXRhKGUsImV2ZW50cyIpKX19LHRyaWdnZXI6ZnVuY3Rpb24obixyLGksbyl7dmFyIHMsbCx1LGMscCxmLGQsaD1baXx8YV0sZz12LmNhbGwobiwidHlwZSIpP24udHlwZTpuLG09di5jYWxsKG4sIm5hbWVzcGFjZSIpP24ubmFtZXNwYWNlLnNwbGl0KCIuIik6W107aWYodT1mPWk9aXx8YSwzIT09aS5ub2RlVHlwZSYmOCE9PWkubm9kZVR5cGUmJiFudC50ZXN0KGcreC5ldmVudC50cmlnZ2VyZWQpJiYoZy5pbmRleE9mKCIuIik+PTAmJihtPWcuc3BsaXQoIi4iKSxnPW0uc2hpZnQoKSxtLnNvcnQoKSksbD0wPmcuaW5kZXhPZigiOiIpJiYib24iK2csbj1uW3guZXhwYW5kb10/bjpuZXcgeC5FdmVudChnLCJvYmplY3QiPT10eXBlb2YgbiYmbiksbi5pc1RyaWdnZXI9bz8yOjMsbi5uYW1lc3BhY2U9bS5qb2luKCIuIiksbi5uYW1lc3BhY2VfcmU9bi5uYW1lc3BhY2U/UmVnRXhwKCIoXnxcXC4pIittLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsbi5yZXN1bHQ9dCxuLnRhcmdldHx8KG4udGFyZ2V0PWkpLHI9bnVsbD09cj9bbl06eC5tYWtlQXJyYXkocixbbl0pLHA9eC5ldmVudC5zcGVjaWFsW2ddfHx7fSxvfHwhcC50cmlnZ2VyfHxwLnRyaWdnZXIuYXBwbHkoaSxyKSE9PSExKSl7aWYoIW8mJiFwLm5vQnViYmxlJiYheC5pc1dpbmRvdyhpKSl7Zm9yKGM9cC5kZWxlZ2F0ZVR5cGV8fGcsbnQudGVzdChjK2cpfHwodT11LnBhcmVudE5vZGUpO3U7dT11LnBhcmVudE5vZGUpaC5wdXNoKHUpLGY9dTtmPT09KGkub3duZXJEb2N1bWVudHx8YSkmJmgucHVzaChmLmRlZmF1bHRWaWV3fHxmLnBhcmVudFdpbmRvd3x8ZSl9ZD0wO3doaWxlKCh1PWhbZCsrXSkmJiFuLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpbi50eXBlPWQ+MT9jOnAuYmluZFR5cGV8fGcscz0oeC5fZGF0YSh1LCJldmVudHMiKXx8e30pW24udHlwZV0mJnguX2RhdGEodSwiaGFuZGxlIikscyYmcy5hcHBseSh1LHIpLHM9bCYmdVtsXSxzJiZ4LmFjY2VwdERhdGEodSkmJnMuYXBwbHkmJnMuYXBwbHkodSxyKT09PSExJiZuLnByZXZlbnREZWZhdWx0KCk7aWYobi50eXBlPWcsIW8mJiFuLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYoIXAuX2RlZmF1bHR8fHAuX2RlZmF1bHQuYXBwbHkoaC5wb3AoKSxyKT09PSExKSYmeC5hY2NlcHREYXRhKGkpJiZsJiZpW2ddJiYheC5pc1dpbmRvdyhpKSl7Zj1pW2xdLGYmJihpW2xdPW51bGwpLHguZXZlbnQudHJpZ2dlcmVkPWc7dHJ5e2lbZ10oKX1jYXRjaCh5KXt9eC5ldmVudC50cmlnZ2VyZWQ9dCxmJiYoaVtsXT1mKX1yZXR1cm4gbi5yZXN1bHR9fSxkaXNwYXRjaDpmdW5jdGlvbihlKXtlPXguZXZlbnQuZml4KGUpO3ZhciBuLHIsaSxvLGEscz1bXSxsPWcuY2FsbChhcmd1bWVudHMpLHU9KHguX2RhdGEodGhpcywiZXZlbnRzIil8fHt9KVtlLnR5cGVdfHxbXSxjPXguZXZlbnQuc3BlY2lhbFtlLnR5cGVdfHx7fTtpZihsWzBdPWUsZS5kZWxlZ2F0ZVRhcmdldD10aGlzLCFjLnByZURpc3BhdGNofHxjLnByZURpc3BhdGNoLmNhbGwodGhpcyxlKSE9PSExKXtzPXguZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLGUsdSksbj0wO3doaWxlKChvPXNbbisrXSkmJiFlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpe2UuY3VycmVudFRhcmdldD1vLmVsZW0sYT0wO3doaWxlKChpPW8uaGFuZGxlcnNbYSsrXSkmJiFlLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpKCFlLm5hbWVzcGFjZV9yZXx8ZS5uYW1lc3BhY2VfcmUudGVzdChpLm5hbWVzcGFjZSkpJiYoZS5oYW5kbGVPYmo9aSxlLmRhdGE9aS5kYXRhLHI9KCh4LmV2ZW50LnNwZWNpYWxbaS5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fGkuaGFuZGxlcikuYXBwbHkoby5lbGVtLGwpLHIhPT10JiYoZS5yZXN1bHQ9cik9PT0hMSYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGMucG9zdERpc3BhdGNoJiZjLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsZSksZS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihlLG4pe3ZhciByLGksbyxhLHM9W10sbD1uLmRlbGVnYXRlQ291bnQsdT1lLnRhcmdldDtpZihsJiZ1Lm5vZGVUeXBlJiYoIWUuYnV0dG9ufHwiY2xpY2siIT09ZS50eXBlKSlmb3IoO3UhPXRoaXM7dT11LnBhcmVudE5vZGV8fHRoaXMpaWYoMT09PXUubm9kZVR5cGUmJih1LmRpc2FibGVkIT09ITB8fCJjbGljayIhPT1lLnR5cGUpKXtmb3Iobz1bXSxhPTA7bD5hO2ErKylpPW5bYV0scj1pLnNlbGVjdG9yKyIgIixvW3JdPT09dCYmKG9bcl09aS5uZWVkc0NvbnRleHQ/eChyLHRoaXMpLmluZGV4KHUpPj0wOnguZmluZChyLHRoaXMsbnVsbCxbdV0pLmxlbmd0aCksb1tyXSYmby5wdXNoKGkpO28ubGVuZ3RoJiZzLnB1c2goe2VsZW06dSxoYW5kbGVyczpvfSl9cmV0dXJuIG4ubGVuZ3RoPmwmJnMucHVzaCh7ZWxlbTp0aGlzLGhhbmRsZXJzOm4uc2xpY2UobCl9KSxzfSxmaXg6ZnVuY3Rpb24oZSl7aWYoZVt4LmV4cGFuZG9dKXJldHVybiBlO3ZhciB0LG4scixpPWUudHlwZSxvPWUscz10aGlzLmZpeEhvb2tzW2ldO3N8fCh0aGlzLmZpeEhvb2tzW2ldPXM9dHQudGVzdChpKT90aGlzLm1vdXNlSG9va3M6ZXQudGVzdChpKT90aGlzLmtleUhvb2tzOnt9KSxyPXMucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQocy5wcm9wcyk6dGhpcy5wcm9wcyxlPW5ldyB4LkV2ZW50KG8pLHQ9ci5sZW5ndGg7d2hpbGUodC0tKW49clt0XSxlW25dPW9bbl07cmV0dXJuIGUudGFyZ2V0fHwoZS50YXJnZXQ9by5zcmNFbGVtZW50fHxhKSwzPT09ZS50YXJnZXQubm9kZVR5cGUmJihlLnRhcmdldD1lLnRhcmdldC5wYXJlbnROb2RlKSxlLm1ldGFLZXk9ISFlLm1ldGFLZXkscy5maWx0ZXI/cy5maWx0ZXIoZSxvKTplfSxwcm9wczoiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhvb2tzOnt9LGtleUhvb2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZS53aGljaCYmKGUud2hpY2g9bnVsbCE9dC5jaGFyQ29kZT90LmNoYXJDb2RlOnQua2V5Q29kZSksZX19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgZnJvbUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGUsbil7dmFyIHIsaSxvLHM9bi5idXR0b24sbD1uLmZyb21FbGVtZW50O3JldHVybiBudWxsPT1lLnBhZ2VYJiZudWxsIT1uLmNsaWVudFgmJihpPWUudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fGEsbz1pLmRvY3VtZW50RWxlbWVudCxyPWkuYm9keSxlLnBhZ2VYPW4uY2xpZW50WCsobyYmby5zY3JvbGxMZWZ0fHxyJiZyLnNjcm9sbExlZnR8fDApLShvJiZvLmNsaWVudExlZnR8fHImJnIuY2xpZW50TGVmdHx8MCksZS5wYWdlWT1uLmNsaWVudFkrKG8mJm8uc2Nyb2xsVG9wfHxyJiZyLnNjcm9sbFRvcHx8MCktKG8mJm8uY2xpZW50VG9wfHxyJiZyLmNsaWVudFRvcHx8MCkpLCFlLnJlbGF0ZWRUYXJnZXQmJmwmJihlLnJlbGF0ZWRUYXJnZXQ9bD09PWUudGFyZ2V0P24udG9FbGVtZW50OmwpLGUud2hpY2h8fHM9PT10fHwoZS53aGljaD0xJnM/MToyJnM/Mzo0JnM/MjowKSxlfX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7aWYodGhpcyE9PWF0KCkmJnRoaXMuZm9jdXMpdHJ5e3JldHVybiB0aGlzLmZvY3VzKCksITF9Y2F0Y2goZSl7fX0sZGVsZWdhdGVUeXBlOiJmb2N1c2luIn0sYmx1cjp7dHJpZ2dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzPT09YXQoKSYmdGhpcy5ibHVyPyh0aGlzLmJsdXIoKSwhMSk6dH0sZGVsZWdhdGVUeXBlOiJmb2N1c291dCJ9LGNsaWNrOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHgubm9kZU5hbWUodGhpcywiaW5wdXQiKSYmImNoZWNrYm94Ij09PXRoaXMudHlwZSYmdGhpcy5jbGljaz8odGhpcy5jbGljaygpLCExKTp0fSxfZGVmYXVsdDpmdW5jdGlvbihlKXtyZXR1cm4geC5ub2RlTmFtZShlLnRhcmdldCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7ZS5yZXN1bHQhPT10JiYoZS5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlPWUucmVzdWx0KX19fSxzaW11bGF0ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT14LmV4dGVuZChuZXcgeC5FdmVudCxuLHt0eXBlOmUsaXNTaW11bGF0ZWQ6ITAsb3JpZ2luYWxFdmVudDp7fX0pO3I/eC5ldmVudC50cmlnZ2VyKGksbnVsbCx0KTp4LmV2ZW50LmRpc3BhdGNoLmNhbGwodCxpKSxpLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZuLnByZXZlbnREZWZhdWx0KCl9fSx4LnJlbW92ZUV2ZW50PWEucmVtb3ZlRXZlbnRMaXN0ZW5lcj9mdW5jdGlvbihlLHQsbil7ZS5yZW1vdmVFdmVudExpc3RlbmVyJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLCExKX06ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSJvbiIrdDtlLmRldGFjaEV2ZW50JiYodHlwZW9mIGVbcl09PT1pJiYoZVtyXT1udWxsKSxlLmRldGFjaEV2ZW50KHIsbikpfSx4LkV2ZW50PWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiB4LkV2ZW50PyhlJiZlLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1lLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZS5kZWZhdWx0UHJldmVudGVkfHxlLnJldHVyblZhbHVlPT09ITF8fGUuZ2V0UHJldmVudERlZmF1bHQmJmUuZ2V0UHJldmVudERlZmF1bHQoKT9pdDpvdCk6dGhpcy50eXBlPWUsbiYmeC5leHRlbmQodGhpcyxuKSx0aGlzLnRpbWVTdGFtcD1lJiZlLnRpbWVTdGFtcHx8eC5ub3coKSx0aGlzW3guZXhwYW5kb109ITAsdCk6bmV3IHguRXZlbnQoZSxuKX0seC5FdmVudC5wcm90b3R5cGU9e2lzRGVmYXVsdFByZXZlbnRlZDpvdCxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpvdCxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpvdCxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1pdCxlJiYoZS5wcmV2ZW50RGVmYXVsdD9lLnByZXZlbnREZWZhdWx0KCk6ZS5yZXR1cm5WYWx1ZT0hMSl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPWl0LGUmJihlLnN0b3BQcm9wYWdhdGlvbiYmZS5zdG9wUHJvcGFnYXRpb24oKSxlLmNhbmNlbEJ1YmJsZT0hMCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9aXQsdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LHguZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9LGZ1bmN0aW9uKGUsdCl7eC5ldmVudC5zcGVjaWFsW2VdPXtkZWxlZ2F0ZVR5cGU6dCxiaW5kVHlwZTp0LGhhbmRsZTpmdW5jdGlvbihlKXt2YXIgbixyPXRoaXMsaT1lLnJlbGF0ZWRUYXJnZXQsbz1lLmhhbmRsZU9iajtyZXR1cm4oIWl8fGkhPT1yJiYheC5jb250YWlucyhyLGkpKSYmKGUudHlwZT1vLm9yaWdUeXBlLG49by5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlLnR5cGU9dCksbn19fSkseC5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXN8fCh4LmV2ZW50LnNwZWNpYWwuc3VibWl0PXtzZXR1cDpmdW5jdGlvbigpe3JldHVybiB4Lm5vZGVOYW1lKHRoaXMsImZvcm0iKT8hMTooeC5ldmVudC5hZGQodGhpcywiY2xpY2suX3N1Ym1pdCBrZXlwcmVzcy5fc3VibWl0IixmdW5jdGlvbihlKXt2YXIgbj1lLnRhcmdldCxyPXgubm9kZU5hbWUobiwiaW5wdXQiKXx8eC5ub2RlTmFtZShuLCJidXR0b24iKT9uLmZvcm06dDtyJiYheC5fZGF0YShyLCJzdWJtaXRCdWJibGVzIikmJih4LmV2ZW50LmFkZChyLCJzdWJtaXQuX3N1Ym1pdCIsZnVuY3Rpb24oZSl7ZS5fc3VibWl0X2J1YmJsZT0hMH0pLHguX2RhdGEociwic3VibWl0QnViYmxlcyIsITApKX0pLHQpfSxwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7ZS5fc3VibWl0X2J1YmJsZSYmKGRlbGV0ZSBlLl9zdWJtaXRfYnViYmxlLHRoaXMucGFyZW50Tm9kZSYmIWUuaXNUcmlnZ2VyJiZ4LmV2ZW50LnNpbXVsYXRlKCJzdWJtaXQiLHRoaXMucGFyZW50Tm9kZSxlLCEwKSl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7cmV0dXJuIHgubm9kZU5hbWUodGhpcywiZm9ybSIpPyExOih4LmV2ZW50LnJlbW92ZSh0aGlzLCIuX3N1Ym1pdCIpLHQpfX0pLHguc3VwcG9ydC5jaGFuZ2VCdWJibGVzfHwoeC5ldmVudC5zcGVjaWFsLmNoYW5nZT17c2V0dXA6ZnVuY3Rpb24oKXtyZXR1cm4gWi50ZXN0KHRoaXMubm9kZU5hbWUpPygoImNoZWNrYm94Ij09PXRoaXMudHlwZXx8InJhZGlvIj09PXRoaXMudHlwZSkmJih4LmV2ZW50LmFkZCh0aGlzLCJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihlKXsiY2hlY2tlZCI9PT1lLm9yaWdpbmFsRXZlbnQucHJvcGVydHlOYW1lJiYodGhpcy5fanVzdF9jaGFuZ2VkPSEwKX0pLHguZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9jaGFuZ2UiLGZ1bmN0aW9uKGUpe3RoaXMuX2p1c3RfY2hhbmdlZCYmIWUuaXNUcmlnZ2VyJiYodGhpcy5fanVzdF9jaGFuZ2VkPSExKSx4LmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMsZSwhMCl9KSksITEpOih4LmV2ZW50LmFkZCh0aGlzLCJiZWZvcmVhY3RpdmF0ZS5fY2hhbmdlIixmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldDtaLnRlc3QodC5ub2RlTmFtZSkmJiF4Ll9kYXRhKHQsImNoYW5nZUJ1YmJsZXMiKSYmKHguZXZlbnQuYWRkKHQsImNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihlKXshdGhpcy5wYXJlbnROb2RlfHxlLmlzU2ltdWxhdGVkfHxlLmlzVHJpZ2dlcnx8eC5ldmVudC5zaW11bGF0ZSgiY2hhbmdlIix0aGlzLnBhcmVudE5vZGUsZSwhMCl9KSx4Ll9kYXRhKHQsImNoYW5nZUJ1YmJsZXMiLCEwKSl9KSx0KX0saGFuZGxlOmZ1bmN0aW9uKGUpe3ZhciBuPWUudGFyZ2V0O3JldHVybiB0aGlzIT09bnx8ZS5pc1NpbXVsYXRlZHx8ZS5pc1RyaWdnZXJ8fCJyYWRpbyIhPT1uLnR5cGUmJiJjaGVja2JveCIhPT1uLnR5cGU/ZS5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dH0sdGVhcmRvd246ZnVuY3Rpb24oKXtyZXR1cm4geC5ldmVudC5yZW1vdmUodGhpcywiLl9jaGFuZ2UiKSwhWi50ZXN0KHRoaXMubm9kZU5hbWUpfX0pLHguc3VwcG9ydC5mb2N1c2luQnViYmxlc3x8eC5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihlLHQpe3ZhciBuPTAscj1mdW5jdGlvbihlKXt4LmV2ZW50LnNpbXVsYXRlKHQsZS50YXJnZXQseC5ldmVudC5maXgoZSksITApfTt4LmV2ZW50LnNwZWNpYWxbdF09e3NldHVwOmZ1bmN0aW9uKCl7MD09PW4rKyYmYS5hZGRFdmVudExpc3RlbmVyKGUsciwhMCl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7MD09PS0tbiYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGUsciwhMCl9fX0pLHguZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihlLG4scixpLG8pe3ZhciBhLHM7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXsic3RyaW5nIiE9dHlwZW9mIG4mJihyPXJ8fG4sbj10KTtmb3IoYSBpbiBlKXRoaXMub24oYSxuLHIsZVthXSxvKTtyZXR1cm4gdGhpc31pZihudWxsPT1yJiZudWxsPT1pPyhpPW4scj1uPXQpOm51bGw9PWkmJigic3RyaW5nIj09dHlwZW9mIG4/KGk9cixyPXQpOihpPXIscj1uLG49dCkpLGk9PT0hMSlpPW90O2Vsc2UgaWYoIWkpcmV0dXJuIHRoaXM7cmV0dXJuIDE9PT1vJiYocz1pLGk9ZnVuY3Rpb24oZSl7cmV0dXJuIHgoKS5vZmYoZSkscy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGkuZ3VpZD1zLmd1aWR8fChzLmd1aWQ9eC5ndWlkKyspKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt4LmV2ZW50LmFkZCh0aGlzLGUsaSxyLG4pfSl9LG9uZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5vbihlLHQsbixyLDEpfSxvZmY6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpLG87aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5oYW5kbGVPYmopcmV0dXJuIGk9ZS5oYW5kbGVPYmoseChlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoaS5uYW1lc3BhY2U/aS5vcmlnVHlwZSsiLiIraS5uYW1lc3BhY2U6aS5vcmlnVHlwZSxpLnNlbGVjdG9yLGkuaGFuZGxlciksdGhpcztpZigib2JqZWN0Ij09dHlwZW9mIGUpe2ZvcihvIGluIGUpdGhpcy5vZmYobyxuLGVbb10pO3JldHVybiB0aGlzfXJldHVybihuPT09ITF8fCJmdW5jdGlvbiI9PXR5cGVvZiBuKSYmKHI9bixuPXQpLHI9PT0hMSYmKHI9b3QpLHRoaXMuZWFjaChmdW5jdGlvbigpe3guZXZlbnQucmVtb3ZlKHRoaXMsZSxyLG4pfSl9LHRyaWdnZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5ldmVudC50cmlnZ2VyKGUsdCx0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihlLG4pe3ZhciByPXRoaXNbMF07cmV0dXJuIHI/eC5ldmVudC50cmlnZ2VyKGUsbixyLCEwKTp0fX0pO3ZhciBzdD0vXi5bXjojXFtcLixdKiQvLGx0PS9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLHV0PXguZXhwci5tYXRjaC5uZWVkc0NvbnRleHQsY3Q9e2NoaWxkcmVuOiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07eC5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXSxyPXRoaXMsaT1yLmxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIHRoaXMucHVzaFN0YWNrKHgoZSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHQ9MDtpPnQ7dCsrKWlmKHguY29udGFpbnMoclt0XSx0aGlzKSlyZXR1cm4hMH0pKTtmb3IodD0wO2k+dDt0KyspeC5maW5kKGUsclt0XSxuKTtyZXR1cm4gbj10aGlzLnB1c2hTdGFjayhpPjE/eC51bmlxdWUobik6biksbi5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yP3RoaXMuc2VsZWN0b3IrIiAiK2U6ZSxufSxoYXM6ZnVuY3Rpb24oZSl7dmFyIHQsbj14KGUsdGhpcykscj1uLmxlbmd0aDtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodD0wO3I+dDt0KyspaWYoeC5jb250YWlucyh0aGlzLG5bdF0pKXJldHVybiEwfSl9LG5vdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZnQodGhpcyxlfHxbXSwhMCkpfSxmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGZ0KHRoaXMsZXx8W10sITEpKX0saXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFmdCh0aGlzLCJzdHJpbmciPT10eXBlb2YgZSYmdXQudGVzdChlKT94KGUpOmV8fFtdLCExKS5sZW5ndGh9LGNsb3Nlc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10aGlzLmxlbmd0aCxvPVtdLGE9dXQudGVzdChlKXx8InN0cmluZyIhPXR5cGVvZiBlP3goZSx0fHx0aGlzLmNvbnRleHQpOjA7Zm9yKDtpPnI7cisrKWZvcihuPXRoaXNbcl07biYmbiE9PXQ7bj1uLnBhcmVudE5vZGUpaWYoMTE+bi5ub2RlVHlwZSYmKGE/YS5pbmRleChuKT4tMToxPT09bi5ub2RlVHlwZSYmeC5maW5kLm1hdGNoZXNTZWxlY3RvcihuLGUpKSl7bj1vLnB1c2gobik7YnJlYWt9cmV0dXJuIHRoaXMucHVzaFN0YWNrKG8ubGVuZ3RoPjE/eC51bmlxdWUobyk6byl9LGluZGV4OmZ1bmN0aW9uKGUpe3JldHVybiBlPyJzdHJpbmciPT10eXBlb2YgZT94LmluQXJyYXkodGhpc1swXSx4KGUpKTp4LmluQXJyYXkoZS5qcXVlcnk/ZVswXTplLHRoaXMpOnRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aDotMX0sYWRkOmZ1bmN0aW9uKGUsdCl7dmFyIG49InN0cmluZyI9PXR5cGVvZiBlP3goZSx0KTp4Lm1ha2VBcnJheShlJiZlLm5vZGVUeXBlP1tlXTplKSxyPXgubWVyZ2UodGhpcy5nZXQoKSxuKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soeC51bmlxdWUocikpfSxhZGRCYWNrOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFkZChudWxsPT1lP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKGUpKX19KTtmdW5jdGlvbiBwdChlLHQpe2RvIGU9ZVt0XTt3aGlsZShlJiYxIT09ZS5ub2RlVHlwZSk7cmV0dXJuIGV9eC5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiYxMSE9PXQubm9kZVR5cGU/dDpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiB4LmRpcihlLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHguZGlyKGUsInBhcmVudE5vZGUiLG4pfSxuZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBwdChlLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGUpe3JldHVybiBwdChlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihlKXtyZXR1cm4geC5kaXIoZSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihlKXtyZXR1cm4geC5kaXIoZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHguZGlyKGUsIm5leHRTaWJsaW5nIixuKX0scHJldlVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4geC5kaXIoZSwicHJldmlvdXNTaWJsaW5nIixuKX0sc2libGluZ3M6ZnVuY3Rpb24oZSl7cmV0dXJuIHguc2libGluZygoZS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxlKX0sY2hpbGRyZW46ZnVuY3Rpb24oZSl7cmV0dXJuIHguc2libGluZyhlLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihlKXtyZXR1cm4geC5ub2RlTmFtZShlLCJpZnJhbWUiKT9lLmNvbnRlbnREb2N1bWVudHx8ZS5jb250ZW50V2luZG93LmRvY3VtZW50OngubWVyZ2UoW10sZS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGUsdCl7eC5mbltlXT1mdW5jdGlvbihuLHIpe3ZhciBpPXgubWFwKHRoaXMsdCxuKTtyZXR1cm4iVW50aWwiIT09ZS5zbGljZSgtNSkmJihyPW4pLHImJiJzdHJpbmciPT10eXBlb2YgciYmKGk9eC5maWx0ZXIocixpKSksdGhpcy5sZW5ndGg+MSYmKGN0W2VdfHwoaT14LnVuaXF1ZShpKSksbHQudGVzdChlKSYmKGk9aS5yZXZlcnNlKCkpKSx0aGlzLnB1c2hTdGFjayhpKX19KSx4LmV4dGVuZCh7ZmlsdGVyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10WzBdO3JldHVybiBuJiYoZT0iOm5vdCgiK2UrIikiKSwxPT09dC5sZW5ndGgmJjE9PT1yLm5vZGVUeXBlP3guZmluZC5tYXRjaGVzU2VsZWN0b3IocixlKT9bcl06W106eC5maW5kLm1hdGNoZXMoZSx4LmdyZXAodCxmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9KSl9LGRpcjpmdW5jdGlvbihlLG4scil7dmFyIGk9W10sbz1lW25dO3doaWxlKG8mJjkhPT1vLm5vZGVUeXBlJiYocj09PXR8fDEhPT1vLm5vZGVUeXBlfHwheChvKS5pcyhyKSkpMT09PW8ubm9kZVR5cGUmJmkucHVzaChvKSxvPW9bbl07cmV0dXJuIGl9LHNpYmxpbmc6ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtmb3IoO2U7ZT1lLm5leHRTaWJsaW5nKTE9PT1lLm5vZGVUeXBlJiZlIT09dCYmbi5wdXNoKGUpO3JldHVybiBufX0pO2Z1bmN0aW9uIGZ0KGUsdCxuKXtpZih4LmlzRnVuY3Rpb24odCkpcmV0dXJuIHguZ3JlcChlLGZ1bmN0aW9uKGUscil7cmV0dXJuISF0LmNhbGwoZSxyLGUpIT09bn0pO2lmKHQubm9kZVR5cGUpcmV0dXJuIHguZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dCE9PW59KTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKHN0LnRlc3QodCkpcmV0dXJuIHguZmlsdGVyKHQsZSxuKTt0PXguZmlsdGVyKHQsZSl9cmV0dXJuIHguZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiB4LmluQXJyYXkoZSx0KT49MCE9PW59KX1mdW5jdGlvbiBkdChlKXt2YXIgdD1odC5zcGxpdCgifCIpLG49ZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7aWYobi5jcmVhdGVFbGVtZW50KXdoaWxlKHQubGVuZ3RoKW4uY3JlYXRlRWxlbWVudCh0LnBvcCgpKTtyZXR1cm4gbn12YXIgaHQ9ImFiYnJ8YXJ0aWNsZXxhc2lkZXxhdWRpb3xiZGl8Y2FudmFzfGRhdGF8ZGF0YWxpc3R8ZGV0YWlsc3xmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8aGVhZGVyfGhncm91cHxtYXJrfG1ldGVyfG5hdnxvdXRwdXR8cHJvZ3Jlc3N8c2VjdGlvbnxzdW1tYXJ5fHRpbWV8dmlkZW8iLGd0PS8galF1ZXJ5XGQrPSIoPzpudWxsfFxkKykiL2csbXQ9UmVnRXhwKCI8KD86IitodCsiKVtcXHMvPl0iLCJpIikseXQ9L15ccysvLHZ0PS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vZ2ksYnQ9LzwoW1x3Ol0rKS8seHQ9Lzx0Ym9keS9pLHd0PS88fCYjP1x3KzsvLFR0PS88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksQ3Q9L14oPzpjaGVja2JveHxyYWRpbykkL2ksTnQ9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksa3Q9L14kfFwvKD86amF2YXxlY21hKXNjcmlwdC9pLEV0PS9edHJ1ZVwvKC4qKS8sU3Q9L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nLEF0PXtvcHRpb246WzEsIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXSxsZWdlbmQ6WzEsIjxmaWVsZHNldD4iLCI8L2ZpZWxkc2V0PiJdLGFyZWE6WzEsIjxtYXA+IiwiPC9tYXA+Il0scGFyYW06WzEsIjxvYmplY3Q+IiwiPC9vYmplY3Q+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxfZGVmYXVsdDp4LnN1cHBvcnQuaHRtbFNlcmlhbGl6ZT9bMCwiIiwiIl06WzEsIlg8ZGl2PiIsIjwvZGl2PiJdfSxqdD1kdChhKSxEdD1qdC5hcHBlbmRDaGlsZChhLmNyZWF0ZUVsZW1lbnQoImRpdiIpKTtBdC5vcHRncm91cD1BdC5vcHRpb24sQXQudGJvZHk9QXQudGZvb3Q9QXQuY29sZ3JvdXA9QXQuY2FwdGlvbj1BdC50aGVhZCxBdC50aD1BdC50ZCx4LmZuLmV4dGVuZCh7dGV4dDpmdW5jdGlvbihlKXtyZXR1cm4geC5hY2Nlc3ModGhpcyxmdW5jdGlvbihlKXtyZXR1cm4gZT09PXQ/eC50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5hcHBlbmQoKHRoaXNbMF0mJnRoaXNbMF0ub3duZXJEb2N1bWVudHx8YSkuY3JlYXRlVGV4dE5vZGUoZSkpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHQ9THQodGhpcyxlKTt0LmFwcGVuZENoaWxkKGUpfX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgdD1MdCh0aGlzLGUpO3QuaW5zZXJ0QmVmb3JlKGUsdC5maXJzdENoaWxkKX19KX0sYmVmb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMpfSl9LGFmdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpfSl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9ZT94LmZpbHRlcihlLHRoaXMpOnRoaXMsaT0wO2Zvcig7bnVsbCE9KG49cltpXSk7aSsrKXR8fDEhPT1uLm5vZGVUeXBlfHx4LmNsZWFuRGF0YShGdChuKSksbi5wYXJlbnROb2RlJiYodCYmeC5jb250YWlucyhuLm93bmVyRG9jdW1lbnQsbikmJl90KEZ0KG4sInNjcmlwdCIpKSxuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobikpO3JldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpe3ZhciBlLHQ9MDtmb3IoO251bGwhPShlPXRoaXNbdF0pO3QrKyl7MT09PWUubm9kZVR5cGUmJnguY2xlYW5EYXRhKEZ0KGUsITEpKTt3aGlsZShlLmZpcnN0Q2hpbGQpZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpO2Uub3B0aW9ucyYmeC5ub2RlTmFtZShlLCJzZWxlY3QiKSYmKGUub3B0aW9ucy5sZW5ndGg9MCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9bnVsbD09ZT8hMTplLHQ9bnVsbD09dD9lOnQsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4geC5jbG9uZSh0aGlzLGUsdCl9KX0saHRtbDpmdW5jdGlvbihlKXtyZXR1cm4geC5hY2Nlc3ModGhpcyxmdW5jdGlvbihlKXt2YXIgbj10aGlzWzBdfHx7fSxyPTAsaT10aGlzLmxlbmd0aDtpZihlPT09dClyZXR1cm4gMT09PW4ubm9kZVR5cGU/bi5pbm5lckhUTUwucmVwbGFjZShndCwiIik6dDtpZighKCJzdHJpbmciIT10eXBlb2YgZXx8VHQudGVzdChlKXx8IXguc3VwcG9ydC5odG1sU2VyaWFsaXplJiZtdC50ZXN0KGUpfHwheC5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlJiZ5dC50ZXN0KGUpfHxBdFsoYnQuZXhlYyhlKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pKXtlPWUucmVwbGFjZSh2dCwiPCQxPjwvJDI+Iik7dHJ5e2Zvcig7aT5yO3IrKyluPXRoaXNbcl18fHt9LDE9PT1uLm5vZGVUeXBlJiYoeC5jbGVhbkRhdGEoRnQobiwhMSkpLG4uaW5uZXJIVE1MPWUpO249MH1jYXRjaChvKXt9fW4mJnRoaXMuZW1wdHkoKS5hcHBlbmQoZSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgZT14Lm1hcCh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybltlLm5leHRTaWJsaW5nLGUucGFyZW50Tm9kZV19KSx0PTA7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKG4pe3ZhciByPWVbdCsrXSxpPWVbdCsrXTtpJiYociYmci5wYXJlbnROb2RlIT09aSYmKHI9dGhpcy5uZXh0U2libGluZykseCh0aGlzKS5yZW1vdmUoKSxpLmluc2VydEJlZm9yZShuLHIpKX0sITApLHQ/dGhpczp0aGlzLnJlbW92ZSgpfSxkZXRhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVtb3ZlKGUsITApfSxkb21NYW5pcDpmdW5jdGlvbihlLHQsbil7ZT1kLmFwcGx5KFtdLGUpO3ZhciByLGksbyxhLHMsbCx1PTAsYz10aGlzLmxlbmd0aCxwPXRoaXMsZj1jLTEsaD1lWzBdLGc9eC5pc0Z1bmN0aW9uKGgpO2lmKGd8fCEoMT49Y3x8InN0cmluZyIhPXR5cGVvZiBofHx4LnN1cHBvcnQuY2hlY2tDbG9uZSkmJk50LnRlc3QoaCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihyKXt2YXIgaT1wLmVxKHIpO2cmJihlWzBdPWguY2FsbCh0aGlzLHIsaS5odG1sKCkpKSxpLmRvbU1hbmlwKGUsdCxuKX0pO2lmKGMmJihsPXguYnVpbGRGcmFnbWVudChlLHRoaXNbMF0ub3duZXJEb2N1bWVudCwhMSwhbiYmdGhpcykscj1sLmZpcnN0Q2hpbGQsMT09PWwuY2hpbGROb2Rlcy5sZW5ndGgmJihsPXIpLHIpKXtmb3IoYT14Lm1hcChGdChsLCJzY3JpcHQiKSxIdCksbz1hLmxlbmd0aDtjPnU7dSsrKWk9bCx1IT09ZiYmKGk9eC5jbG9uZShpLCEwLCEwKSxvJiZ4Lm1lcmdlKGEsRnQoaSwic2NyaXB0IikpKSx0LmNhbGwodGhpc1t1XSxpLHUpO2lmKG8pZm9yKHM9YVthLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LHgubWFwKGEscXQpLHU9MDtvPnU7dSsrKWk9YVt1XSxrdC50ZXN0KGkudHlwZXx8IiIpJiYheC5fZGF0YShpLCJnbG9iYWxFdmFsIikmJnguY29udGFpbnMocyxpKSYmKGkuc3JjP3guX2V2YWxVcmwoaS5zcmMpOnguZ2xvYmFsRXZhbCgoaS50ZXh0fHxpLnRleHRDb250ZW50fHxpLmlubmVySFRNTHx8IiIpLnJlcGxhY2UoU3QsIiIpKSk7bD1yPW51bGx9cmV0dXJuIHRoaXN9fSk7ZnVuY3Rpb24gTHQoZSx0KXtyZXR1cm4geC5ub2RlTmFtZShlLCJ0YWJsZSIpJiZ4Lm5vZGVOYW1lKDE9PT10Lm5vZGVUeXBlP3Q6dC5maXJzdENoaWxkLCJ0ciIpP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF18fGUuYXBwZW5kQ2hpbGQoZS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikpOmV9ZnVuY3Rpb24gSHQoZSl7cmV0dXJuIGUudHlwZT0obnVsbCE9PXguZmluZC5hdHRyKGUsInR5cGUiKSkrIi8iK2UudHlwZSxlfWZ1bmN0aW9uIHF0KGUpe3ZhciB0PUV0LmV4ZWMoZS50eXBlKTtyZXR1cm4gdD9lLnR5cGU9dFsxXTplLnJlbW92ZUF0dHJpYnV0ZSgidHlwZSIpLGV9ZnVuY3Rpb24gX3QoZSx0KXt2YXIgbixyPTA7Zm9yKDtudWxsIT0obj1lW3JdKTtyKyspeC5fZGF0YShuLCJnbG9iYWxFdmFsIiwhdHx8eC5fZGF0YSh0W3JdLCJnbG9iYWxFdmFsIikpfWZ1bmN0aW9uIE10KGUsdCl7aWYoMT09PXQubm9kZVR5cGUmJnguaGFzRGF0YShlKSl7dmFyIG4scixpLG89eC5fZGF0YShlKSxhPXguX2RhdGEodCxvKSxzPW8uZXZlbnRzO2lmKHMpe2RlbGV0ZSBhLmhhbmRsZSxhLmV2ZW50cz17fTtmb3IobiBpbiBzKWZvcihyPTAsaT1zW25dLmxlbmd0aDtpPnI7cisrKXguZXZlbnQuYWRkKHQsbixzW25dW3JdKX1hLmRhdGEmJihhLmRhdGE9eC5leHRlbmQoe30sYS5kYXRhKSl9fWZ1bmN0aW9uIE90KGUsdCl7dmFyIG4scixpO2lmKDE9PT10Lm5vZGVUeXBlKXtpZihuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwheC5zdXBwb3J0Lm5vQ2xvbmVFdmVudCYmdFt4LmV4cGFuZG9dKXtpPXguX2RhdGEodCk7Zm9yKHIgaW4gaS5ldmVudHMpeC5yZW1vdmVFdmVudCh0LHIsaS5oYW5kbGUpO3QucmVtb3ZlQXR0cmlidXRlKHguZXhwYW5kbyl9InNjcmlwdCI9PT1uJiZ0LnRleHQhPT1lLnRleHQ/KEh0KHQpLnRleHQ9ZS50ZXh0LHF0KHQpKToib2JqZWN0Ij09PW4/KHQucGFyZW50Tm9kZSYmKHQub3V0ZXJIVE1MPWUub3V0ZXJIVE1MKSx4LnN1cHBvcnQuaHRtbDVDbG9uZSYmZS5pbm5lckhUTUwmJiF4LnRyaW0odC5pbm5lckhUTUwpJiYodC5pbm5lckhUTUw9ZS5pbm5lckhUTUwpKToiaW5wdXQiPT09biYmQ3QudGVzdChlLnR5cGUpPyh0LmRlZmF1bHRDaGVja2VkPXQuY2hlY2tlZD1lLmNoZWNrZWQsdC52YWx1ZSE9PWUudmFsdWUmJih0LnZhbHVlPWUudmFsdWUpKToib3B0aW9uIj09PW4/dC5kZWZhdWx0U2VsZWN0ZWQ9dC5zZWxlY3RlZD1lLmRlZmF1bHRTZWxlY3RlZDooImlucHV0Ij09PW58fCJ0ZXh0YXJlYSI9PT1uKSYmKHQuZGVmYXVsdFZhbHVlPWUuZGVmYXVsdFZhbHVlKX19eC5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oZSx0KXt4LmZuW2VdPWZ1bmN0aW9uKGUpe3ZhciBuLHI9MCxpPVtdLG89eChlKSxhPW8ubGVuZ3RoLTE7Zm9yKDthPj1yO3IrKyluPXI9PT1hP3RoaXM6dGhpcy5jbG9uZSghMCkseChvW3JdKVt0XShuKSxoLmFwcGx5KGksbi5nZXQoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGkpfX0pO2Z1bmN0aW9uIEZ0KGUsbil7dmFyIHIsbyxhPTAscz10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9PWk/ZS5nZXRFbGVtZW50c0J5VGFnTmFtZShufHwiKiIpOnR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGwhPT1pP2UucXVlcnlTZWxlY3RvckFsbChufHwiKiIpOnQ7aWYoIXMpZm9yKHM9W10scj1lLmNoaWxkTm9kZXN8fGU7bnVsbCE9KG89clthXSk7YSsrKSFufHx4Lm5vZGVOYW1lKG8sbik/cy5wdXNoKG8pOngubWVyZ2UocyxGdChvLG4pKTtyZXR1cm4gbj09PXR8fG4mJngubm9kZU5hbWUoZSxuKT94Lm1lcmdlKFtlXSxzKTpzfWZ1bmN0aW9uIEJ0KGUpe0N0LnRlc3QoZS50eXBlKSYmKGUuZGVmYXVsdENoZWNrZWQ9ZS5jaGVja2VkKX14LmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHMsbD14LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKTtpZih4LnN1cHBvcnQuaHRtbDVDbG9uZXx8eC5pc1hNTERvYyhlKXx8IW10LnRlc3QoIjwiK2Uubm9kZU5hbWUrIj4iKT9vPWUuY2xvbmVOb2RlKCEwKTooRHQuaW5uZXJIVE1MPWUub3V0ZXJIVE1MLER0LnJlbW92ZUNoaWxkKG89RHQuZmlyc3RDaGlsZCkpLCEoeC5zdXBwb3J0Lm5vQ2xvbmVFdmVudCYmeC5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkfHwxIT09ZS5ub2RlVHlwZSYmMTEhPT1lLm5vZGVUeXBlfHx4LmlzWE1MRG9jKGUpKSlmb3Iocj1GdChvKSxzPUZ0KGUpLGE9MDtudWxsIT0oaT1zW2FdKTsrK2EpclthXSYmT3QoaSxyW2FdKTtpZih0KWlmKG4pZm9yKHM9c3x8RnQoZSkscj1yfHxGdChvKSxhPTA7bnVsbCE9KGk9c1thXSk7YSsrKU10KGksclthXSk7ZWxzZSBNdChlLG8pO3JldHVybiByPUZ0KG8sInNjcmlwdCIpLHIubGVuZ3RoPjAmJl90KHIsIWwmJkZ0KGUsInNjcmlwdCIpKSxyPXM9aT1udWxsLG99LGJ1aWxkRnJhZ21lbnQ6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHMsbCx1LGMscD1lLmxlbmd0aCxmPWR0KHQpLGQ9W10saD0wO2Zvcig7cD5oO2grKylpZihvPWVbaF0sb3x8MD09PW8paWYoIm9iamVjdCI9PT14LnR5cGUobykpeC5tZXJnZShkLG8ubm9kZVR5cGU/W29dOm8pO2Vsc2UgaWYod3QudGVzdChvKSl7cz1zfHxmLmFwcGVuZENoaWxkKHQuY3JlYXRlRWxlbWVudCgiZGl2IikpLGw9KGJ0LmV4ZWMobyl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksYz1BdFtsXXx8QXQuX2RlZmF1bHQscy5pbm5lckhUTUw9Y1sxXStvLnJlcGxhY2UodnQsIjwkMT48LyQyPiIpK2NbMl0saT1jWzBdO3doaWxlKGktLSlzPXMubGFzdENoaWxkO2lmKCF4LnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UmJnl0LnRlc3QobykmJmQucHVzaCh0LmNyZWF0ZVRleHROb2RlKHl0LmV4ZWMobylbMF0pKSwheC5zdXBwb3J0LnRib2R5KXtvPSJ0YWJsZSIhPT1sfHx4dC50ZXN0KG8pPyI8dGFibGU+IiE9PWNbMV18fHh0LnRlc3Qobyk/MDpzOnMuZmlyc3RDaGlsZCxpPW8mJm8uY2hpbGROb2Rlcy5sZW5ndGg7d2hpbGUoaS0tKXgubm9kZU5hbWUodT1vLmNoaWxkTm9kZXNbaV0sInRib2R5IikmJiF1LmNoaWxkTm9kZXMubGVuZ3RoJiZvLnJlbW92ZUNoaWxkKHUpfXgubWVyZ2UoZCxzLmNoaWxkTm9kZXMpLHMudGV4dENvbnRlbnQ9IiI7d2hpbGUocy5maXJzdENoaWxkKXMucmVtb3ZlQ2hpbGQocy5maXJzdENoaWxkKTtzPWYubGFzdENoaWxkfWVsc2UgZC5wdXNoKHQuY3JlYXRlVGV4dE5vZGUobykpO3MmJmYucmVtb3ZlQ2hpbGQocykseC5zdXBwb3J0LmFwcGVuZENoZWNrZWR8fHguZ3JlcChGdChkLCJpbnB1dCIpLEJ0KSxoPTA7d2hpbGUobz1kW2grK10paWYoKCFyfHwtMT09PXguaW5BcnJheShvLHIpKSYmKGE9eC5jb250YWlucyhvLm93bmVyRG9jdW1lbnQsbykscz1GdChmLmFwcGVuZENoaWxkKG8pLCJzY3JpcHQiKSxhJiZfdChzKSxuKSl7aT0wO3doaWxlKG89c1tpKytdKWt0LnRlc3Qoby50eXBlfHwiIikmJm4ucHVzaChvKX1yZXR1cm4gcz1udWxsLGZ9LGNsZWFuRGF0YTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsbyxhLHM9MCxsPXguZXhwYW5kbyx1PXguY2FjaGUsYz14LnN1cHBvcnQuZGVsZXRlRXhwYW5kbyxmPXguZXZlbnQuc3BlY2lhbDtmb3IoO251bGwhPShuPWVbc10pO3MrKylpZigodHx8eC5hY2NlcHREYXRhKG4pKSYmKG89bltsXSxhPW8mJnVbb10pKXtpZihhLmV2ZW50cylmb3IociBpbiBhLmV2ZW50cylmW3JdP3guZXZlbnQucmVtb3ZlKG4scik6eC5yZW1vdmVFdmVudChuLHIsYS5oYW5kbGUpOwp1W29dJiYoZGVsZXRlIHVbb10sYz9kZWxldGUgbltsXTp0eXBlb2Ygbi5yZW1vdmVBdHRyaWJ1dGUhPT1pP24ucmVtb3ZlQXR0cmlidXRlKGwpOm5bbF09bnVsbCxwLnB1c2gobykpfX0sX2V2YWxVcmw6ZnVuY3Rpb24oZSl7cmV0dXJuIHguYWpheCh7dXJsOmUsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0Iixhc3luYzohMSxnbG9iYWw6ITEsInRocm93cyI6ITB9KX19KSx4LmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihlKXtpZih4LmlzRnVuY3Rpb24oZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXt4KHRoaXMpLndyYXBBbGwoZS5jYWxsKHRoaXMsdCkpfSk7aWYodGhpc1swXSl7dmFyIHQ9eChlLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApO3RoaXNbMF0ucGFyZW50Tm9kZSYmdC5pbnNlcnRCZWZvcmUodGhpc1swXSksdC5tYXAoZnVuY3Rpb24oKXt2YXIgZT10aGlzO3doaWxlKGUuZmlyc3RDaGlsZCYmMT09PWUuZmlyc3RDaGlsZC5ub2RlVHlwZSllPWUuZmlyc3RDaGlsZDtyZXR1cm4gZX0pLmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKGUpe3JldHVybiB4LmlzRnVuY3Rpb24oZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3godGhpcykud3JhcElubmVyKGUuY2FsbCh0aGlzLHQpKX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PXgodGhpcyksbj10LmNvbnRlbnRzKCk7bi5sZW5ndGg/bi53cmFwQWxsKGUpOnQuYXBwZW5kKGUpfSl9LHdyYXA6ZnVuY3Rpb24oZSl7dmFyIHQ9eC5pc0Z1bmN0aW9uKGUpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24obil7eCh0aGlzKS53cmFwQWxsKHQ/ZS5jYWxsKHRoaXMsbik6ZSl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe3gubm9kZU5hbWUodGhpcywiYm9keSIpfHx4KHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX19KTt2YXIgUHQsUnQsV3QsJHQ9L2FscGhhXChbXildKlwpL2ksSXQ9L29wYWNpdHlccyo9XHMqKFteKV0qKS8senQ9L14odG9wfHJpZ2h0fGJvdHRvbXxsZWZ0KSQvLFh0PS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxVdD0vXm1hcmdpbi8sVnQ9UmVnRXhwKCJeKCIrdysiKSguKikkIiwiaSIpLFl0PVJlZ0V4cCgiXigiK3crIikoPyFweClbYS16JV0rJCIsImkiKSxKdD1SZWdFeHAoIl4oWystXSk9KCIrdysiKSIsImkiKSxHdD17Qk9EWToiYmxvY2sifSxRdD17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sS3Q9e2xldHRlclNwYWNpbmc6MCxmb250V2VpZ2h0OjQwMH0sWnQ9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxlbj1bIldlYmtpdCIsIk8iLCJNb3oiLCJtcyJdO2Z1bmN0aW9uIHRuKGUsdCl7aWYodCBpbiBlKXJldHVybiB0O3ZhciBuPXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKSxyPXQsaT1lbi5sZW5ndGg7d2hpbGUoaS0tKWlmKHQ9ZW5baV0rbix0IGluIGUpcmV0dXJuIHQ7cmV0dXJuIHJ9ZnVuY3Rpb24gbm4oZSx0KXtyZXR1cm4gZT10fHxlLCJub25lIj09PXguY3NzKGUsImRpc3BsYXkiKXx8IXguY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfWZ1bmN0aW9uIHJuKGUsdCl7dmFyIG4scixpLG89W10sYT0wLHM9ZS5sZW5ndGg7Zm9yKDtzPmE7YSsrKXI9ZVthXSxyLnN0eWxlJiYob1thXT14Ll9kYXRhKHIsIm9sZGRpc3BsYXkiKSxuPXIuc3R5bGUuZGlzcGxheSx0PyhvW2FdfHwibm9uZSIhPT1ufHwoci5zdHlsZS5kaXNwbGF5PSIiKSwiIj09PXIuc3R5bGUuZGlzcGxheSYmbm4ocikmJihvW2FdPXguX2RhdGEociwib2xkZGlzcGxheSIsbG4oci5ub2RlTmFtZSkpKSk6b1thXXx8KGk9bm4ociksKG4mJiJub25lIiE9PW58fCFpKSYmeC5fZGF0YShyLCJvbGRkaXNwbGF5IixpP246eC5jc3MociwiZGlzcGxheSIpKSkpO2ZvcihhPTA7cz5hO2ErKylyPWVbYV0sci5zdHlsZSYmKHQmJiJub25lIiE9PXIuc3R5bGUuZGlzcGxheSYmIiIhPT1yLnN0eWxlLmRpc3BsYXl8fChyLnN0eWxlLmRpc3BsYXk9dD9vW2FdfHwiIjoibm9uZSIpKTtyZXR1cm4gZX14LmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGUsbil7cmV0dXJuIHguYWNjZXNzKHRoaXMsZnVuY3Rpb24oZSxuLHIpe3ZhciBpLG8sYT17fSxzPTA7aWYoeC5pc0FycmF5KG4pKXtmb3Iobz1SdChlKSxpPW4ubGVuZ3RoO2k+cztzKyspYVtuW3NdXT14LmNzcyhlLG5bc10sITEsbyk7cmV0dXJuIGF9cmV0dXJuIHIhPT10P3guc3R5bGUoZSxuLHIpOnguY3NzKGUsbil9LGUsbixhcmd1bWVudHMubGVuZ3RoPjEpfSxzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIHJuKHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHJuKHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZT9lP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe25uKHRoaXMpP3godGhpcykuc2hvdygpOngodGhpcykuaGlkZSgpfSl9fSkseC5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oZSx0KXtpZih0KXt2YXIgbj1XdChlLCJvcGFjaXR5Iik7cmV0dXJuIiI9PT1uPyIxIjpufX19fSxjc3NOdW1iZXI6e2NvbHVtbkNvdW50OiEwLGZpbGxPcGFjaXR5OiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7ImZsb2F0Ijp4LnN1cHBvcnQuY3NzRmxvYXQ/ImNzc0Zsb2F0Ijoic3R5bGVGbG9hdCJ9LHN0eWxlOmZ1bmN0aW9uKGUsbixyLGkpe2lmKGUmJjMhPT1lLm5vZGVUeXBlJiY4IT09ZS5ub2RlVHlwZSYmZS5zdHlsZSl7dmFyIG8sYSxzLGw9eC5jYW1lbENhc2UobiksdT1lLnN0eWxlO2lmKG49eC5jc3NQcm9wc1tsXXx8KHguY3NzUHJvcHNbbF09dG4odSxsKSkscz14LmNzc0hvb2tzW25dfHx4LmNzc0hvb2tzW2xdLHI9PT10KXJldHVybiBzJiYiZ2V0ImluIHMmJihvPXMuZ2V0KGUsITEsaSkpIT09dD9vOnVbbl07aWYoYT10eXBlb2Ygciwic3RyaW5nIj09PWEmJihvPUp0LmV4ZWMocikpJiYocj0ob1sxXSsxKSpvWzJdK3BhcnNlRmxvYXQoeC5jc3MoZSxuKSksYT0ibnVtYmVyIiksIShudWxsPT1yfHwibnVtYmVyIj09PWEmJmlzTmFOKHIpfHwoIm51bWJlciIhPT1hfHx4LmNzc051bWJlcltsXXx8KHIrPSJweCIpLHguc3VwcG9ydC5jbGVhckNsb25lU3R5bGV8fCIiIT09cnx8MCE9PW4uaW5kZXhPZigiYmFja2dyb3VuZCIpfHwodVtuXT0iaW5oZXJpdCIpLHMmJiJzZXQiaW4gcyYmKHI9cy5zZXQoZSxyLGkpKT09PXQpKSl0cnl7dVtuXT1yfWNhdGNoKGMpe319fSxjc3M6ZnVuY3Rpb24oZSxuLHIsaSl7dmFyIG8sYSxzLGw9eC5jYW1lbENhc2Uobik7cmV0dXJuIG49eC5jc3NQcm9wc1tsXXx8KHguY3NzUHJvcHNbbF09dG4oZS5zdHlsZSxsKSkscz14LmNzc0hvb2tzW25dfHx4LmNzc0hvb2tzW2xdLHMmJiJnZXQiaW4gcyYmKGE9cy5nZXQoZSwhMCxyKSksYT09PXQmJihhPVd0KGUsbixpKSksIm5vcm1hbCI9PT1hJiZuIGluIEt0JiYoYT1LdFtuXSksIiI9PT1yfHxyPyhvPXBhcnNlRmxvYXQoYSkscj09PSEwfHx4LmlzTnVtZXJpYyhvKT9vfHwwOmEpOmF9fSksZS5nZXRDb21wdXRlZFN0eWxlPyhSdD1mdW5jdGlvbih0KXtyZXR1cm4gZS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCl9LFd0PWZ1bmN0aW9uKGUsbixyKXt2YXIgaSxvLGEscz1yfHxSdChlKSxsPXM/cy5nZXRQcm9wZXJ0eVZhbHVlKG4pfHxzW25dOnQsdT1lLnN0eWxlO3JldHVybiBzJiYoIiIhPT1sfHx4LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKXx8KGw9eC5zdHlsZShlLG4pKSxZdC50ZXN0KGwpJiZVdC50ZXN0KG4pJiYoaT11LndpZHRoLG89dS5taW5XaWR0aCxhPXUubWF4V2lkdGgsdS5taW5XaWR0aD11Lm1heFdpZHRoPXUud2lkdGg9bCxsPXMud2lkdGgsdS53aWR0aD1pLHUubWluV2lkdGg9byx1Lm1heFdpZHRoPWEpKSxsfSk6YS5kb2N1bWVudEVsZW1lbnQuY3VycmVudFN0eWxlJiYoUnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY3VycmVudFN0eWxlfSxXdD1mdW5jdGlvbihlLG4scil7dmFyIGksbyxhLHM9cnx8UnQoZSksbD1zP3Nbbl06dCx1PWUuc3R5bGU7cmV0dXJuIG51bGw9PWwmJnUmJnVbbl0mJihsPXVbbl0pLFl0LnRlc3QobCkmJiF6dC50ZXN0KG4pJiYoaT11LmxlZnQsbz1lLnJ1bnRpbWVTdHlsZSxhPW8mJm8ubGVmdCxhJiYoby5sZWZ0PWUuY3VycmVudFN0eWxlLmxlZnQpLHUubGVmdD0iZm9udFNpemUiPT09bj8iMWVtIjpsLGw9dS5waXhlbExlZnQrInB4Iix1LmxlZnQ9aSxhJiYoby5sZWZ0PWEpKSwiIj09PWw/ImF1dG8iOmx9KTtmdW5jdGlvbiBvbihlLHQsbil7dmFyIHI9VnQuZXhlYyh0KTtyZXR1cm4gcj9NYXRoLm1heCgwLHJbMV0tKG58fDApKSsoclsyXXx8InB4Iik6dH1mdW5jdGlvbiBhbihlLHQsbixyLGkpe3ZhciBvPW49PT0ocj8iYm9yZGVyIjoiY29udGVudCIpPzQ6IndpZHRoIj09PXQ/MTowLGE9MDtmb3IoOzQ+bztvKz0yKSJtYXJnaW4iPT09biYmKGErPXguY3NzKGUsbitadFtvXSwhMCxpKSkscj8oImNvbnRlbnQiPT09biYmKGEtPXguY3NzKGUsInBhZGRpbmciK1p0W29dLCEwLGkpKSwibWFyZ2luIiE9PW4mJihhLT14LmNzcyhlLCJib3JkZXIiK1p0W29dKyJXaWR0aCIsITAsaSkpKTooYSs9eC5jc3MoZSwicGFkZGluZyIrWnRbb10sITAsaSksInBhZGRpbmciIT09biYmKGErPXguY3NzKGUsImJvcmRlciIrWnRbb10rIldpZHRoIiwhMCxpKSkpO3JldHVybiBhfWZ1bmN0aW9uIHNuKGUsdCxuKXt2YXIgcj0hMCxpPSJ3aWR0aCI9PT10P2Uub2Zmc2V0V2lkdGg6ZS5vZmZzZXRIZWlnaHQsbz1SdChlKSxhPXguc3VwcG9ydC5ib3hTaXppbmcmJiJib3JkZXItYm94Ij09PXguY3NzKGUsImJveFNpemluZyIsITEsbyk7aWYoMD49aXx8bnVsbD09aSl7aWYoaT1XdChlLHQsbyksKDA+aXx8bnVsbD09aSkmJihpPWUuc3R5bGVbdF0pLFl0LnRlc3QoaSkpcmV0dXJuIGk7cj1hJiYoeC5zdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlfHxpPT09ZS5zdHlsZVt0XSksaT1wYXJzZUZsb2F0KGkpfHwwfXJldHVybiBpK2FuKGUsdCxufHwoYT8iYm9yZGVyIjoiY29udGVudCIpLHIsbykrInB4In1mdW5jdGlvbiBsbihlKXt2YXIgdD1hLG49R3RbZV07cmV0dXJuIG58fChuPXVuKGUsdCksIm5vbmUiIT09biYmbnx8KFB0PShQdHx8eCgiPGlmcmFtZSBmcmFtZWJvcmRlcj0nMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPiIpLmNzcygiY3NzVGV4dCIsImRpc3BsYXk6YmxvY2sgIWltcG9ydGFudCIpKS5hcHBlbmRUbyh0LmRvY3VtZW50RWxlbWVudCksdD0oUHRbMF0uY29udGVudFdpbmRvd3x8UHRbMF0uY29udGVudERvY3VtZW50KS5kb2N1bWVudCx0LndyaXRlKCI8IWRvY3R5cGUgaHRtbD48aHRtbD48Ym9keT4iKSx0LmNsb3NlKCksbj11bihlLHQpLFB0LmRldGFjaCgpKSxHdFtlXT1uKSxufWZ1bmN0aW9uIHVuKGUsdCl7dmFyIG49eCh0LmNyZWF0ZUVsZW1lbnQoZSkpLmFwcGVuZFRvKHQuYm9keSkscj14LmNzcyhuWzBdLCJkaXNwbGF5Iik7cmV0dXJuIG4ucmVtb3ZlKCkscn14LmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGUsbil7eC5jc3NIb29rc1tuXT17Z2V0OmZ1bmN0aW9uKGUscixpKXtyZXR1cm4gcj8wPT09ZS5vZmZzZXRXaWR0aCYmWHQudGVzdCh4LmNzcyhlLCJkaXNwbGF5IikpP3guc3dhcChlLFF0LGZ1bmN0aW9uKCl7cmV0dXJuIHNuKGUsbixpKX0pOnNuKGUsbixpKTp0fSxzZXQ6ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPXImJlJ0KGUpO3JldHVybiBvbihlLHQscj9hbihlLG4scix4LnN1cHBvcnQuYm94U2l6aW5nJiYiYm9yZGVyLWJveCI9PT14LmNzcyhlLCJib3hTaXppbmciLCExLGkpLGkpOjApfX19KSx4LnN1cHBvcnQub3BhY2l0eXx8KHguY3NzSG9va3Mub3BhY2l0eT17Z2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEl0LnRlc3QoKHQmJmUuY3VycmVudFN0eWxlP2UuY3VycmVudFN0eWxlLmZpbHRlcjplLnN0eWxlLmZpbHRlcil8fCIiKT8uMDEqcGFyc2VGbG9hdChSZWdFeHAuJDEpKyIiOnQ/IjEiOiIifSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnN0eWxlLHI9ZS5jdXJyZW50U3R5bGUsaT14LmlzTnVtZXJpYyh0KT8iYWxwaGEob3BhY2l0eT0iKzEwMCp0KyIpIjoiIixvPXImJnIuZmlsdGVyfHxuLmZpbHRlcnx8IiI7bi56b29tPTEsKHQ+PTF8fCIiPT09dCkmJiIiPT09eC50cmltKG8ucmVwbGFjZSgkdCwiIikpJiZuLnJlbW92ZUF0dHJpYnV0ZSYmKG4ucmVtb3ZlQXR0cmlidXRlKCJmaWx0ZXIiKSwiIj09PXR8fHImJiFyLmZpbHRlcil8fChuLmZpbHRlcj0kdC50ZXN0KG8pP28ucmVwbGFjZSgkdCxpKTpvKyIgIitpKX19KSx4KGZ1bmN0aW9uKCl7eC5zdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHR8fCh4LmNzc0hvb2tzLm1hcmdpblJpZ2h0PXtnZXQ6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbj94LnN3YXAoZSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0sV3QsW2UsIm1hcmdpblJpZ2h0Il0pOnR9fSksIXguc3VwcG9ydC5waXhlbFBvc2l0aW9uJiZ4LmZuLnBvc2l0aW9uJiZ4LmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24oZSxuKXt4LmNzc0hvb2tzW25dPXtnZXQ6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gcj8ocj1XdChlLG4pLFl0LnRlc3Qocik/eChlKS5wb3NpdGlvbigpW25dKyJweCI6cik6dH19fSl9KSx4LmV4cHImJnguZXhwci5maWx0ZXJzJiYoeC5leHByLmZpbHRlcnMuaGlkZGVuPWZ1bmN0aW9uKGUpe3JldHVybiAwPj1lLm9mZnNldFdpZHRoJiYwPj1lLm9mZnNldEhlaWdodHx8IXguc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMmJiJub25lIj09PShlLnN0eWxlJiZlLnN0eWxlLmRpc3BsYXl8fHguY3NzKGUsImRpc3BsYXkiKSl9LHguZXhwci5maWx0ZXJzLnZpc2libGU9ZnVuY3Rpb24oZSl7cmV0dXJuIXguZXhwci5maWx0ZXJzLmhpZGRlbihlKX0pLHguZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGUsdCl7eC5jc3NIb29rc1tlK3RdPXtleHBhbmQ6ZnVuY3Rpb24obil7dmFyIHI9MCxpPXt9LG89InN0cmluZyI9PXR5cGVvZiBuP24uc3BsaXQoIiAiKTpbbl07Zm9yKDs0PnI7cisrKWlbZStadFtyXSt0XT1vW3JdfHxvW3ItMl18fG9bMF07cmV0dXJuIGl9fSxVdC50ZXN0KGUpfHwoeC5jc3NIb29rc1tlK3RdLnNldD1vbil9KTt2YXIgY249LyUyMC9nLHBuPS9cW1xdJC8sZm49L1xyP1xuL2csZG49L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLGhuPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTt4LmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHgucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT14LnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gZT94Lm1ha2VBcnJheShlKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiF4KHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmaG4udGVzdCh0aGlzLm5vZGVOYW1lKSYmIWRuLnRlc3QoZSkmJih0aGlzLmNoZWNrZWR8fCFDdC50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPXgodGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDp4LmlzQXJyYXkobik/eC5tYXAobixmdW5jdGlvbihlKXtyZXR1cm57bmFtZTp0Lm5hbWUsdmFsdWU6ZS5yZXBsYWNlKGZuLCJcclxuIil9fSk6e25hbWU6dC5uYW1lLHZhbHVlOm4ucmVwbGFjZShmbiwiXHJcbiIpfX0pLmdldCgpfX0pLHgucGFyYW09ZnVuY3Rpb24oZSxuKXt2YXIgcixpPVtdLG89ZnVuY3Rpb24oZSx0KXt0PXguaXNGdW5jdGlvbih0KT90KCk6bnVsbD09dD8iIjp0LGlbaS5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChlKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpfTtpZihuPT09dCYmKG49eC5hamF4U2V0dGluZ3MmJnguYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKSx4LmlzQXJyYXkoZSl8fGUuanF1ZXJ5JiYheC5pc1BsYWluT2JqZWN0KGUpKXguZWFjaChlLGZ1bmN0aW9uKCl7byh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihyIGluIGUpZ24ocixlW3JdLG4sbyk7cmV0dXJuIGkuam9pbigiJiIpLnJlcGxhY2UoY24sIisiKX07ZnVuY3Rpb24gZ24oZSx0LG4scil7dmFyIGk7aWYoeC5pc0FycmF5KHQpKXguZWFjaCh0LGZ1bmN0aW9uKHQsaSl7bnx8cG4udGVzdChlKT9yKGUsaSk6Z24oZSsiWyIrKCJvYmplY3QiPT10eXBlb2YgaT90OiIiKSsiXSIsaSxuLHIpfSk7ZWxzZSBpZihufHwib2JqZWN0IiE9PXgudHlwZSh0KSlyKGUsdCk7ZWxzZSBmb3IoaSBpbiB0KWduKGUrIlsiK2krIl0iLHRbaV0sbixyKX14LmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXt4LmZuW3RdPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKHQsbnVsbCxlLG4pOnRoaXMudHJpZ2dlcih0KX19KSx4LmZuLmV4dGVuZCh7aG92ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGUpLm1vdXNlbGVhdmUodHx8ZSl9LGJpbmQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLm9uKGUsbnVsbCx0LG4pfSx1bmJpbmQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vZmYoZSxudWxsLHQpfSxkZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5vbih0LGUsbixyKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGUsIioqIik6dGhpcy5vZmYodCxlfHwiKioiLG4pfX0pO3ZhciBtbix5bix2bj14Lm5vdygpLGJuPS9cPy8seG49LyMuKiQvLHduPS8oWz8mXSlfPVteJl0qLyxUbj0vXiguKj8pOlsgXHRdKihbXlxyXG5dKilccj8kL2dtLENuPS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLE5uPS9eKD86R0VUfEhFQUQpJC8sa249L15cL1wvLyxFbj0vXihbXHcuKy1dKzopKD86XC9cLyhbXlwvPyM6XSopKD86OihcZCspfCl8KS8sU249eC5mbi5sb2FkLEFuPXt9LGpuPXt9LERuPSIqLyIuY29uY2F0KCIqIik7dHJ5e3luPW8uaHJlZn1jYXRjaChMbil7eW49YS5jcmVhdGVFbGVtZW50KCJhIikseW4uaHJlZj0iIix5bj15bi5ocmVmfW1uPUVuLmV4ZWMoeW4udG9Mb3dlckNhc2UoKSl8fFtdO2Z1bmN0aW9uIEhuKGUpe3JldHVybiBmdW5jdGlvbih0LG4peyJzdHJpbmciIT10eXBlb2YgdCYmKG49dCx0PSIqIik7dmFyIHIsaT0wLG89dC50b0xvd2VyQ2FzZSgpLm1hdGNoKFQpfHxbXTtpZih4LmlzRnVuY3Rpb24obikpd2hpbGUocj1vW2krK10pIisiPT09clswXT8ocj1yLnNsaWNlKDEpfHwiKiIsKGVbcl09ZVtyXXx8W10pLnVuc2hpZnQobikpOihlW3JdPWVbcl18fFtdKS5wdXNoKG4pfX1mdW5jdGlvbiBxbihlLG4scixpKXt2YXIgbz17fSxhPWU9PT1qbjtmdW5jdGlvbiBzKGwpe3ZhciB1O3JldHVybiBvW2xdPSEwLHguZWFjaChlW2xdfHxbXSxmdW5jdGlvbihlLGwpe3ZhciBjPWwobixyLGkpO3JldHVybiJzdHJpbmciIT10eXBlb2YgY3x8YXx8b1tjXT9hPyEodT1jKTp0OihuLmRhdGFUeXBlcy51bnNoaWZ0KGMpLHMoYyksITEpfSksdX1yZXR1cm4gcyhuLmRhdGFUeXBlc1swXSl8fCFvWyIqIl0mJnMoIioiKX1mdW5jdGlvbiBfbihlLG4pe3ZhciByLGksbz14LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKGkgaW4gbiluW2ldIT09dCYmKChvW2ldP2U6cnx8KHI9e30pKVtpXT1uW2ldKTtyZXR1cm4gciYmeC5leHRlbmQoITAsZSxyKSxlfXguZm4ubG9hZD1mdW5jdGlvbihlLG4scil7aWYoInN0cmluZyIhPXR5cGVvZiBlJiZTbilyZXR1cm4gU24uYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBpLG8sYSxzPXRoaXMsbD1lLmluZGV4T2YoIiAiKTtyZXR1cm4gbD49MCYmKGk9ZS5zbGljZShsLGUubGVuZ3RoKSxlPWUuc2xpY2UoMCxsKSkseC5pc0Z1bmN0aW9uKG4pPyhyPW4sbj10KTpuJiYib2JqZWN0Ij09dHlwZW9mIG4mJihhPSJQT1NUIikscy5sZW5ndGg+MCYmeC5hamF4KHt1cmw6ZSx0eXBlOmEsZGF0YVR5cGU6Imh0bWwiLGRhdGE6bn0pLmRvbmUoZnVuY3Rpb24oZSl7bz1hcmd1bWVudHMscy5odG1sKGk/eCgiPGRpdj4iKS5hcHBlbmQoeC5wYXJzZUhUTUwoZSkpLmZpbmQoaSk6ZSl9KS5jb21wbGV0ZShyJiZmdW5jdGlvbihlLHQpe3MuZWFjaChyLG98fFtlLnJlc3BvbnNlVGV4dCx0LGVdKX0pLHRoaXN9LHguZWFjaChbImFqYXhTdGFydCIsImFqYXhTdG9wIiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9yIiwiYWpheFN1Y2Nlc3MiLCJhamF4U2VuZCJdLGZ1bmN0aW9uKGUsdCl7eC5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vbih0LGUpfX0pLHguZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fSxhamF4U2V0dGluZ3M6e3VybDp5bix0eXBlOiJHRVQiLGlzTG9jYWw6Q24udGVzdChtblsxXSksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLGFjY2VwdHM6eyIqIjpEbix0ZXh0OiJ0ZXh0L3BsYWluIixodG1sOiJ0ZXh0L2h0bWwiLHhtbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0In0sY29udGVudHM6e3htbDoveG1sLyxodG1sOi9odG1sLyxqc29uOi9qc29uL30scmVzcG9uc2VGaWVsZHM6e3htbDoicmVzcG9uc2VYTUwiLHRleHQ6InJlc3BvbnNlVGV4dCIsanNvbjoicmVzcG9uc2VKU09OIn0sY29udmVydGVyczp7IiogdGV4dCI6U3RyaW5nLCJ0ZXh0IGh0bWwiOiEwLCJ0ZXh0IGpzb24iOngucGFyc2VKU09OLCJ0ZXh0IHhtbCI6eC5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e3VybDohMCxjb250ZXh0OiEwfX0sYWpheFNldHVwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/X24oX24oZSx4LmFqYXhTZXR0aW5ncyksdCk6X24oeC5hamF4U2V0dGluZ3MsZSl9LGFqYXhQcmVmaWx0ZXI6SG4oQW4pLGFqYXhUcmFuc3BvcnQ6SG4oam4pLGFqYXg6ZnVuY3Rpb24oZSxuKXsib2JqZWN0Ij09dHlwZW9mIGUmJihuPWUsZT10KSxuPW58fHt9O3ZhciByLGksbyxhLHMsbCx1LGMscD14LmFqYXhTZXR1cCh7fSxuKSxmPXAuY29udGV4dHx8cCxkPXAuY29udGV4dCYmKGYubm9kZVR5cGV8fGYuanF1ZXJ5KT94KGYpOnguZXZlbnQsaD14LkRlZmVycmVkKCksZz14LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxtPXAuc3RhdHVzQ29kZXx8e30seT17fSx2PXt9LGI9MCx3PSJjYW5jZWxlZCIsQz17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKDI9PT1iKXtpZighYyl7Yz17fTt3aGlsZSh0PVRuLmV4ZWMoYSkpY1t0WzFdLnRvTG93ZXJDYXNlKCldPXRbMl19dD1jW2UudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PXQ/bnVsbDp0fSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gMj09PWI/YTpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS50b0xvd2VyQ2FzZSgpO3JldHVybiBifHwoZT12W25dPXZbbl18fGUseVtlXT10KSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiBifHwocC5taW1lVHlwZT1lKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKGUpaWYoMj5iKWZvcih0IGluIGUpbVt0XT1bbVt0XSxlW3RdXTtlbHNlIEMuYWx3YXlzKGVbQy5zdGF0dXNdKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8dztyZXR1cm4gdSYmdS5hYm9ydCh0KSxrKDAsdCksdGhpc319O2lmKGgucHJvbWlzZShDKS5jb21wbGV0ZT1nLmFkZCxDLnN1Y2Nlc3M9Qy5kb25lLEMuZXJyb3I9Qy5mYWlsLHAudXJsPSgoZXx8cC51cmx8fHluKSsiIikucmVwbGFjZSh4biwiIikucmVwbGFjZShrbixtblsxXSsiLy8iKSxwLnR5cGU9bi5tZXRob2R8fG4udHlwZXx8cC5tZXRob2R8fHAudHlwZSxwLmRhdGFUeXBlcz14LnRyaW0ocC5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKFQpfHxbIiJdLG51bGw9PXAuY3Jvc3NEb21haW4mJihyPUVuLmV4ZWMocC51cmwudG9Mb3dlckNhc2UoKSkscC5jcm9zc0RvbWFpbj0hKCFyfHxyWzFdPT09bW5bMV0mJnJbMl09PT1tblsyXSYmKHJbM118fCgiaHR0cDoiPT09clsxXT8iODAiOiI0NDMiKSk9PT0obW5bM118fCgiaHR0cDoiPT09bW5bMV0/IjgwIjoiNDQzIikpKSkscC5kYXRhJiZwLnByb2Nlc3NEYXRhJiYic3RyaW5nIiE9dHlwZW9mIHAuZGF0YSYmKHAuZGF0YT14LnBhcmFtKHAuZGF0YSxwLnRyYWRpdGlvbmFsKSkscW4oQW4scCxuLEMpLDI9PT1iKXJldHVybiBDO2w9cC5nbG9iYWwsbCYmMD09PXguYWN0aXZlKysmJnguZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0IikscC50eXBlPXAudHlwZS50b1VwcGVyQ2FzZSgpLHAuaGFzQ29udGVudD0hTm4udGVzdChwLnR5cGUpLG89cC51cmwscC5oYXNDb250ZW50fHwocC5kYXRhJiYobz1wLnVybCs9KGJuLnRlc3Qobyk/IiYiOiI/IikrcC5kYXRhLGRlbGV0ZSBwLmRhdGEpLHAuY2FjaGU9PT0hMSYmKHAudXJsPXduLnRlc3Qobyk/by5yZXBsYWNlKHduLCIkMV89Iit2bisrKTpvKyhibi50ZXN0KG8pPyImIjoiPyIpKyJfPSIrdm4rKykpLHAuaWZNb2RpZmllZCYmKHgubGFzdE1vZGlmaWVkW29dJiZDLnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIix4Lmxhc3RNb2RpZmllZFtvXSkseC5ldGFnW29dJiZDLnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLHguZXRhZ1tvXSkpLChwLmRhdGEmJnAuaGFzQ29udGVudCYmcC5jb250ZW50VHlwZSE9PSExfHxuLmNvbnRlbnRUeXBlKSYmQy5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLHAuY29udGVudFR5cGUpLEMuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixwLmRhdGFUeXBlc1swXSYmcC5hY2NlcHRzW3AuZGF0YVR5cGVzWzBdXT9wLmFjY2VwdHNbcC5kYXRhVHlwZXNbMF1dKygiKiIhPT1wLmRhdGFUeXBlc1swXT8iLCAiK0RuKyI7IHE9MC4wMSI6IiIpOnAuYWNjZXB0c1siKiJdKTtmb3IoaSBpbiBwLmhlYWRlcnMpQy5zZXRSZXF1ZXN0SGVhZGVyKGkscC5oZWFkZXJzW2ldKTtpZihwLmJlZm9yZVNlbmQmJihwLmJlZm9yZVNlbmQuY2FsbChmLEMscCk9PT0hMXx8Mj09PWIpKXJldHVybiBDLmFib3J0KCk7dz0iYWJvcnQiO2ZvcihpIGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KUNbaV0ocFtpXSk7aWYodT1xbihqbixwLG4sQykpe0MucmVhZHlTdGF0ZT0xLGwmJmQudHJpZ2dlcigiYWpheFNlbmQiLFtDLHBdKSxwLmFzeW5jJiZwLnRpbWVvdXQ+MCYmKHM9c2V0VGltZW91dChmdW5jdGlvbigpe0MuYWJvcnQoInRpbWVvdXQiKX0scC50aW1lb3V0KSk7dHJ5e2I9MSx1LnNlbmQoeSxrKX1jYXRjaChOKXtpZighKDI+YikpdGhyb3cgTjtrKC0xLE4pfX1lbHNlIGsoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIGsoZSxuLHIsaSl7dmFyIGMseSx2LHcsVCxOPW47MiE9PWImJihiPTIscyYmY2xlYXJUaW1lb3V0KHMpLHU9dCxhPWl8fCIiLEMucmVhZHlTdGF0ZT1lPjA/NDowLGM9ZT49MjAwJiYzMDA+ZXx8MzA0PT09ZSxyJiYodz1NbihwLEMscikpLHc9T24ocCx3LEMsYyksYz8ocC5pZk1vZGlmaWVkJiYoVD1DLmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIiksVCYmKHgubGFzdE1vZGlmaWVkW29dPVQpLFQ9Qy5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpLFQmJih4LmV0YWdbb109VCkpLDIwND09PWV8fCJIRUFEIj09PXAudHlwZT9OPSJub2NvbnRlbnQiOjMwND09PWU/Tj0ibm90bW9kaWZpZWQiOihOPXcuc3RhdGUseT13LmRhdGEsdj13LmVycm9yLGM9IXYpKToodj1OLChlfHwhTikmJihOPSJlcnJvciIsMD5lJiYoZT0wKSkpLEMuc3RhdHVzPWUsQy5zdGF0dXNUZXh0PShufHxOKSsiIixjP2gucmVzb2x2ZVdpdGgoZixbeSxOLENdKTpoLnJlamVjdFdpdGgoZixbQyxOLHZdKSxDLnN0YXR1c0NvZGUobSksbT10LGwmJmQudHJpZ2dlcihjPyJhamF4U3VjY2VzcyI6ImFqYXhFcnJvciIsW0MscCxjP3k6dl0pLGcuZmlyZVdpdGgoZixbQyxOXSksbCYmKGQudHJpZ2dlcigiYWpheENvbXBsZXRlIixbQyxwXSksLS14LmFjdGl2ZXx8eC5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKSl9cmV0dXJuIEN9LGdldEpTT046ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB4LmdldChlLHQsbiwianNvbiIpfSxnZXRTY3JpcHQ6ZnVuY3Rpb24oZSxuKXtyZXR1cm4geC5nZXQoZSx0LG4sInNjcmlwdCIpfX0pLHguZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihlLG4pe3hbbl09ZnVuY3Rpb24oZSxyLGksbyl7cmV0dXJuIHguaXNGdW5jdGlvbihyKSYmKG89b3x8aSxpPXIscj10KSx4LmFqYXgoe3VybDplLHR5cGU6bixkYXRhVHlwZTpvLGRhdGE6cixzdWNjZXNzOml9KX19KTtmdW5jdGlvbiBNbihlLG4scil7dmFyIGksbyxhLHMsbD1lLmNvbnRlbnRzLHU9ZS5kYXRhVHlwZXM7d2hpbGUoIioiPT09dVswXSl1LnNoaWZ0KCksbz09PXQmJihvPWUubWltZVR5cGV8fG4uZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihvKWZvcihzIGluIGwpaWYobFtzXSYmbFtzXS50ZXN0KG8pKXt1LnVuc2hpZnQocyk7YnJlYWt9aWYodVswXWluIHIpYT11WzBdO2Vsc2V7Zm9yKHMgaW4gcil7aWYoIXVbMF18fGUuY29udmVydGVyc1tzKyIgIit1WzBdXSl7YT1zO2JyZWFrfWl8fChpPXMpfWE9YXx8aX1yZXR1cm4gYT8oYSE9PXVbMF0mJnUudW5zaGlmdChhKSxyW2FdKTp0fWZ1bmN0aW9uIE9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzLGwsdT17fSxjPWUuZGF0YVR5cGVzLnNsaWNlKCk7aWYoY1sxXSlmb3IoYSBpbiBlLmNvbnZlcnRlcnMpdVthLnRvTG93ZXJDYXNlKCldPWUuY29udmVydGVyc1thXTtvPWMuc2hpZnQoKTt3aGlsZShvKWlmKGUucmVzcG9uc2VGaWVsZHNbb10mJihuW2UucmVzcG9uc2VGaWVsZHNbb11dPXQpLCFsJiZyJiZlLmRhdGFGaWx0ZXImJih0PWUuZGF0YUZpbHRlcih0LGUuZGF0YVR5cGUpKSxsPW8sbz1jLnNoaWZ0KCkpaWYoIioiPT09bylvPWw7ZWxzZSBpZigiKiIhPT1sJiZsIT09byl7aWYoYT11W2wrIiAiK29dfHx1WyIqICIrb10sIWEpZm9yKGkgaW4gdSlpZihzPWkuc3BsaXQoIiAiKSxzWzFdPT09byYmKGE9dVtsKyIgIitzWzBdXXx8dVsiKiAiK3NbMF1dKSl7YT09PSEwP2E9dVtpXTp1W2ldIT09ITAmJihvPXNbMF0sYy51bnNoaWZ0KHNbMV0pKTticmVha31pZihhIT09ITApaWYoYSYmZVsidGhyb3dzIl0pdD1hKHQpO2Vsc2UgdHJ5e3Q9YSh0KX1jYXRjaChwKXtyZXR1cm57c3RhdGU6InBhcnNlcmVycm9yIixlcnJvcjphP3A6Ik5vIGNvbnZlcnNpb24gZnJvbSAiK2wrIiB0byAiK299fX1yZXR1cm57c3RhdGU6InN1Y2Nlc3MiLGRhdGE6dH19eC5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi8oPzpqYXZhfGVjbWEpc2NyaXB0L30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihlKXtyZXR1cm4geC5nbG9iYWxFdmFsKGUpLGV9fX0pLHguYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihlKXtlLmNhY2hlPT09dCYmKGUuY2FjaGU9ITEpLGUuY3Jvc3NEb21haW4mJihlLnR5cGU9IkdFVCIsZS5nbG9iYWw9ITEpfSkseC5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGUpe2lmKGUuY3Jvc3NEb21haW4pe3ZhciBuLHI9YS5oZWFkfHx4KCJoZWFkIilbMF18fGEuZG9jdW1lbnRFbGVtZW50O3JldHVybntzZW5kOmZ1bmN0aW9uKHQsaSl7bj1hLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLG4uYXN5bmM9ITAsZS5zY3JpcHRDaGFyc2V0JiYobi5jaGFyc2V0PWUuc2NyaXB0Q2hhcnNldCksbi5zcmM9ZS51cmwsbi5vbmxvYWQ9bi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oZSx0KXsodHx8IW4ucmVhZHlTdGF0ZXx8L2xvYWRlZHxjb21wbGV0ZS8udGVzdChuLnJlYWR5U3RhdGUpKSYmKG4ub25sb2FkPW4ub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsbi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobiksbj1udWxsLHR8fGkoMjAwLCJzdWNjZXNzIikpfSxyLmluc2VydEJlZm9yZShuLHIuZmlyc3RDaGlsZCl9LGFib3J0OmZ1bmN0aW9uKCl7biYmbi5vbmxvYWQodCwhMCl9fX19KTt2YXIgRm49W10sQm49Lyg9KVw/KD89JnwkKXxcP1w/Lzt4LmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9Rm4ucG9wKCl8fHguZXhwYW5kbysiXyIrdm4rKztyZXR1cm4gdGhpc1tlXT0hMCxlfX0pLHguYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24obixyLGkpe3ZhciBvLGEscyxsPW4uanNvbnAhPT0hMSYmKEJuLnRlc3Qobi51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2Ygbi5kYXRhJiYhKG4uY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmQm4udGVzdChuLmRhdGEpJiYiZGF0YSIpO3JldHVybiBsfHwianNvbnAiPT09bi5kYXRhVHlwZXNbMF0/KG89bi5qc29ucENhbGxiYWNrPXguaXNGdW5jdGlvbihuLmpzb25wQ2FsbGJhY2spP24uanNvbnBDYWxsYmFjaygpOm4uanNvbnBDYWxsYmFjayxsP25bbF09bltsXS5yZXBsYWNlKEJuLCIkMSIrbyk6bi5qc29ucCE9PSExJiYobi51cmwrPShibi50ZXN0KG4udXJsKT8iJiI6Ij8iKStuLmpzb25wKyI9IitvKSxuLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gc3x8eC5lcnJvcihvKyIgd2FzIG5vdCBjYWxsZWQiKSxzWzBdfSxuLmRhdGFUeXBlc1swXT0ianNvbiIsYT1lW29dLGVbb109ZnVuY3Rpb24oKXtzPWFyZ3VtZW50c30saS5hbHdheXMoZnVuY3Rpb24oKXtlW29dPWEsbltvXSYmKG4uanNvbnBDYWxsYmFjaz1yLmpzb25wQ2FsbGJhY2ssRm4ucHVzaChvKSkscyYmeC5pc0Z1bmN0aW9uKGEpJiZhKHNbMF0pLHM9YT10fSksInNjcmlwdCIpOnR9KTt2YXIgUG4sUm4sV249MCwkbj1lLkFjdGl2ZVhPYmplY3QmJmZ1bmN0aW9uKCl7dmFyIGU7Zm9yKGUgaW4gUG4pUG5bZV0odCwhMCl9O2Z1bmN0aW9uIEluKCl7dHJ5e3JldHVybiBuZXcgZS5YTUxIdHRwUmVxdWVzdH1jYXRjaCh0KXt9fWZ1bmN0aW9uIHpuKCl7dHJ5e3JldHVybiBuZXcgZS5BY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpfWNhdGNoKHQpe319eC5hamF4U2V0dGluZ3MueGhyPWUuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe3JldHVybiF0aGlzLmlzTG9jYWwmJkluKCl8fHpuKCl9OkluLFJuPXguYWpheFNldHRpbmdzLnhocigpLHguc3VwcG9ydC5jb3JzPSEhUm4mJiJ3aXRoQ3JlZGVudGlhbHMiaW4gUm4sUm49eC5zdXBwb3J0LmFqYXg9ISFSbixSbiYmeC5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKG4pe2lmKCFuLmNyb3NzRG9tYWlufHx4LnN1cHBvcnQuY29ycyl7dmFyIHI7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oaSxvKXt2YXIgYSxzLGw9bi54aHIoKTtpZihuLnVzZXJuYW1lP2wub3BlbihuLnR5cGUsbi51cmwsbi5hc3luYyxuLnVzZXJuYW1lLG4ucGFzc3dvcmQpOmwub3BlbihuLnR5cGUsbi51cmwsbi5hc3luYyksbi54aHJGaWVsZHMpZm9yKHMgaW4gbi54aHJGaWVsZHMpbFtzXT1uLnhockZpZWxkc1tzXTtuLm1pbWVUeXBlJiZsLm92ZXJyaWRlTWltZVR5cGUmJmwub3ZlcnJpZGVNaW1lVHlwZShuLm1pbWVUeXBlKSxuLmNyb3NzRG9tYWlufHxpWyJYLVJlcXVlc3RlZC1XaXRoIl18fChpWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0Iik7dHJ5e2ZvcihzIGluIGkpbC5zZXRSZXF1ZXN0SGVhZGVyKHMsaVtzXSl9Y2F0Y2godSl7fWwuc2VuZChuLmhhc0NvbnRlbnQmJm4uZGF0YXx8bnVsbCkscj1mdW5jdGlvbihlLGkpe3ZhciBzLHUsYyxwO3RyeXtpZihyJiYoaXx8ND09PWwucmVhZHlTdGF0ZSkpaWYocj10LGEmJihsLm9ucmVhZHlzdGF0ZWNoYW5nZT14Lm5vb3AsJG4mJmRlbGV0ZSBQblthXSksaSk0IT09bC5yZWFkeVN0YXRlJiZsLmFib3J0KCk7ZWxzZXtwPXt9LHM9bC5zdGF0dXMsdT1sLmdldEFsbFJlc3BvbnNlSGVhZGVycygpLCJzdHJpbmciPT10eXBlb2YgbC5yZXNwb25zZVRleHQmJihwLnRleHQ9bC5yZXNwb25zZVRleHQpO3RyeXtjPWwuc3RhdHVzVGV4dH1jYXRjaChmKXtjPSIifXN8fCFuLmlzTG9jYWx8fG4uY3Jvc3NEb21haW4/MTIyMz09PXMmJihzPTIwNCk6cz1wLnRleHQ/MjAwOjQwNH19Y2F0Y2goZCl7aXx8bygtMSxkKX1wJiZvKHMsYyxwLHUpfSxuLmFzeW5jPzQ9PT1sLnJlYWR5U3RhdGU/c2V0VGltZW91dChyKTooYT0rK1duLCRuJiYoUG58fChQbj17fSx4KGUpLnVubG9hZCgkbikpLFBuW2FdPXIpLGwub25yZWFkeXN0YXRlY2hhbmdlPXIpOnIoKX0sYWJvcnQ6ZnVuY3Rpb24oKXtyJiZyKHQsITApfX19fSk7dmFyIFhuLFVuLFZuPS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxZbj1SZWdFeHAoIl4oPzooWystXSk9fCkoIit3KyIpKFthLXolXSopJCIsImkiKSxKbj0vcXVldWVIb29rcyQvLEduPVtucl0sUW49eyIqIjpbZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNyZWF0ZVR3ZWVuKGUsdCkscj1uLmN1cigpLGk9WW4uZXhlYyh0KSxvPWkmJmlbM118fCh4LmNzc051bWJlcltlXT8iIjoicHgiKSxhPSh4LmNzc051bWJlcltlXXx8InB4IiE9PW8mJityKSYmWW4uZXhlYyh4LmNzcyhuLmVsZW0sZSkpLHM9MSxsPTIwO2lmKGEmJmFbM10hPT1vKXtvPW98fGFbM10saT1pfHxbXSxhPStyfHwxO2RvIHM9c3x8Ii41IixhLz1zLHguc3R5bGUobi5lbGVtLGUsYStvKTt3aGlsZShzIT09KHM9bi5jdXIoKS9yKSYmMSE9PXMmJi0tbCl9cmV0dXJuIGkmJihhPW4uc3RhcnQ9K2F8fCtyfHwwLG4udW5pdD1vLG4uZW5kPWlbMV0/YSsoaVsxXSsxKSppWzJdOitpWzJdKSxufV19O2Z1bmN0aW9uIEtuKCl7cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtYbj10fSksWG49eC5ub3coKX1mdW5jdGlvbiBabihlLHQsbil7dmFyIHIsaT0oUW5bdF18fFtdKS5jb25jYXQoUW5bIioiXSksbz0wLGE9aS5sZW5ndGg7Zm9yKDthPm87bysrKWlmKHI9aVtvXS5jYWxsKG4sdCxlKSlyZXR1cm4gcn1mdW5jdGlvbiBlcihlLHQsbil7dmFyIHIsaSxvPTAsYT1Hbi5sZW5ndGgscz14LkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIGwuZWxlbX0pLGw9ZnVuY3Rpb24oKXtpZihpKXJldHVybiExO3ZhciB0PVhufHxLbigpLG49TWF0aC5tYXgoMCx1LnN0YXJ0VGltZSt1LmR1cmF0aW9uLXQpLHI9bi91LmR1cmF0aW9ufHwwLG89MS1yLGE9MCxsPXUudHdlZW5zLmxlbmd0aDtmb3IoO2w+YTthKyspdS50d2VlbnNbYV0ucnVuKG8pO3JldHVybiBzLm5vdGlmeVdpdGgoZSxbdSxvLG5dKSwxPm8mJmw/bjoocy5yZXNvbHZlV2l0aChlLFt1XSksITEpfSx1PXMucHJvbWlzZSh7ZWxlbTplLHByb3BzOnguZXh0ZW5kKHt9LHQpLG9wdHM6eC5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LG4pLG9yaWdpbmFsUHJvcGVydGllczp0LG9yaWdpbmFsT3B0aW9uczpuLHN0YXJ0VGltZTpYbnx8S24oKSxkdXJhdGlvbjpuLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbih0LG4pe3ZhciByPXguVHdlZW4oZSx1Lm9wdHMsdCxuLHUub3B0cy5zcGVjaWFsRWFzaW5nW3RdfHx1Lm9wdHMuZWFzaW5nKTtyZXR1cm4gdS50d2VlbnMucHVzaChyKSxyfSxzdG9wOmZ1bmN0aW9uKHQpe3ZhciBuPTAscj10P3UudHdlZW5zLmxlbmd0aDowO2lmKGkpcmV0dXJuIHRoaXM7Zm9yKGk9ITA7cj5uO24rKyl1LnR3ZWVuc1tuXS5ydW4oMSk7cmV0dXJuIHQ/cy5yZXNvbHZlV2l0aChlLFt1LHRdKTpzLnJlamVjdFdpdGgoZSxbdSx0XSksdGhpc319KSxjPXUucHJvcHM7Zm9yKHRyKGMsdS5vcHRzLnNwZWNpYWxFYXNpbmcpO2E+bztvKyspaWYocj1HbltvXS5jYWxsKHUsZSxjLHUub3B0cykpcmV0dXJuIHI7cmV0dXJuIHgubWFwKGMsWm4sdSkseC5pc0Z1bmN0aW9uKHUub3B0cy5zdGFydCkmJnUub3B0cy5zdGFydC5jYWxsKGUsdSkseC5meC50aW1lcih4LmV4dGVuZChsLHtlbGVtOmUsYW5pbTp1LHF1ZXVlOnUub3B0cy5xdWV1ZX0pKSx1LnByb2dyZXNzKHUub3B0cy5wcm9ncmVzcykuZG9uZSh1Lm9wdHMuZG9uZSx1Lm9wdHMuY29tcGxldGUpLmZhaWwodS5vcHRzLmZhaWwpLmFsd2F5cyh1Lm9wdHMuYWx3YXlzKX1mdW5jdGlvbiB0cihlLHQpe3ZhciBuLHIsaSxvLGE7Zm9yKG4gaW4gZSlpZihyPXguY2FtZWxDYXNlKG4pLGk9dFtyXSxvPWVbbl0seC5pc0FycmF5KG8pJiYoaT1vWzFdLG89ZVtuXT1vWzBdKSxuIT09ciYmKGVbcl09byxkZWxldGUgZVtuXSksYT14LmNzc0hvb2tzW3JdLGEmJiJleHBhbmQiaW4gYSl7bz1hLmV4cGFuZChvKSxkZWxldGUgZVtyXTtmb3IobiBpbiBvKW4gaW4gZXx8KGVbbl09b1tuXSx0W25dPWkpfWVsc2UgdFtyXT1pfXguQW5pbWF0aW9uPXguZXh0ZW5kKGVyLHt0d2VlbmVyOmZ1bmN0aW9uKGUsdCl7eC5pc0Z1bmN0aW9uKGUpPyh0PWUsZT1bIioiXSk6ZT1lLnNwbGl0KCIgIik7dmFyIG4scj0wLGk9ZS5sZW5ndGg7Zm9yKDtpPnI7cisrKW49ZVtyXSxRbltuXT1RbltuXXx8W10sUW5bbl0udW5zaGlmdCh0KX0scHJlZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dD9Hbi51bnNoaWZ0KGUpOkduLnB1c2goZSl9fSk7ZnVuY3Rpb24gbnIoZSx0LG4pe3ZhciByLGksbyxhLHMsbCx1PXRoaXMsYz17fSxwPWUuc3R5bGUsZj1lLm5vZGVUeXBlJiZubihlKSxkPXguX2RhdGEoZSwiZnhzaG93Iik7bi5xdWV1ZXx8KHM9eC5fcXVldWVIb29rcyhlLCJmeCIpLG51bGw9PXMudW5xdWV1ZWQmJihzLnVucXVldWVkPTAsbD1zLmVtcHR5LmZpcmUscy5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7cy51bnF1ZXVlZHx8bCgpfSkscy51bnF1ZXVlZCsrLHUuYWx3YXlzKGZ1bmN0aW9uKCl7dS5hbHdheXMoZnVuY3Rpb24oKXtzLnVucXVldWVkLS0seC5xdWV1ZShlLCJmeCIpLmxlbmd0aHx8cy5lbXB0eS5maXJlKCl9KX0pKSwxPT09ZS5ub2RlVHlwZSYmKCJoZWlnaHQiaW4gdHx8IndpZHRoImluIHQpJiYobi5vdmVyZmxvdz1bcC5vdmVyZmxvdyxwLm92ZXJmbG93WCxwLm92ZXJmbG93WV0sImlubGluZSI9PT14LmNzcyhlLCJkaXNwbGF5IikmJiJub25lIj09PXguY3NzKGUsImZsb2F0IikmJih4LnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dCYmImlubGluZSIhPT1sbihlLm5vZGVOYW1lKT9wLnpvb209MTpwLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxuLm92ZXJmbG93JiYocC5vdmVyZmxvdz0iaGlkZGVuIix4LnN1cHBvcnQuc2hyaW5rV3JhcEJsb2Nrc3x8dS5hbHdheXMoZnVuY3Rpb24oKXtwLm92ZXJmbG93PW4ub3ZlcmZsb3dbMF0scC5vdmVyZmxvd1g9bi5vdmVyZmxvd1sxXSxwLm92ZXJmbG93WT1uLm92ZXJmbG93WzJdfSkpO2ZvcihyIGluIHQpaWYoaT10W3JdLFZuLmV4ZWMoaSkpe2lmKGRlbGV0ZSB0W3JdLG89b3x8InRvZ2dsZSI9PT1pLGk9PT0oZj8iaGlkZSI6InNob3ciKSljb250aW51ZTtjW3JdPWQmJmRbcl18fHguc3R5bGUoZSxyKX1pZigheC5pc0VtcHR5T2JqZWN0KGMpKXtkPyJoaWRkZW4iaW4gZCYmKGY9ZC5oaWRkZW4pOmQ9eC5fZGF0YShlLCJmeHNob3ciLHt9KSxvJiYoZC5oaWRkZW49IWYpLGY/eChlKS5zaG93KCk6dS5kb25lKGZ1bmN0aW9uKCl7eChlKS5oaWRlKCl9KSx1LmRvbmUoZnVuY3Rpb24oKXt2YXIgdDt4Ll9yZW1vdmVEYXRhKGUsImZ4c2hvdyIpO2Zvcih0IGluIGMpeC5zdHlsZShlLHQsY1t0XSl9KTtmb3IociBpbiBjKWE9Wm4oZj9kW3JdOjAscix1KSxyIGluIGR8fChkW3JdPWEuc3RhcnQsZiYmKGEuZW5kPWEuc3RhcnQsYS5zdGFydD0id2lkdGgiPT09cnx8ImhlaWdodCI9PT1yPzE6MCkpfX1mdW5jdGlvbiBycihlLHQsbixyLGkpe3JldHVybiBuZXcgcnIucHJvdG90eXBlLmluaXQoZSx0LG4scixpKX14LlR3ZWVuPXJyLHJyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cnIsaW5pdDpmdW5jdGlvbihlLHQsbixyLGksbyl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhpcy5lYXNpbmc9aXx8InN3aW5nIix0aGlzLm9wdGlvbnM9dCx0aGlzLnN0YXJ0PXRoaXMubm93PXRoaXMuY3VyKCksdGhpcy5lbmQ9cix0aGlzLnVuaXQ9b3x8KHguY3NzTnVtYmVyW25dPyIiOiJweCIpfSxjdXI6ZnVuY3Rpb24oKXt2YXIgZT1yci5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gZSYmZS5nZXQ/ZS5nZXQodGhpcyk6cnIucHJvcEhvb2tzLl9kZWZhdWx0LmdldCh0aGlzKX0scnVuOmZ1bmN0aW9uKGUpe3ZhciB0LG49cnIucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIHRoaXMucG9zPXQ9dGhpcy5vcHRpb25zLmR1cmF0aW9uP3guZWFzaW5nW3RoaXMuZWFzaW5nXShlLHRoaXMub3B0aW9ucy5kdXJhdGlvbiplLDAsMSx0aGlzLm9wdGlvbnMuZHVyYXRpb24pOmUsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKnQrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksbiYmbi5zZXQ/bi5zZXQodGhpcyk6cnIucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0scnIucHJvdG90eXBlLmluaXQucHJvdG90eXBlPXJyLnByb3RvdHlwZSxyci5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG51bGw9PWUuZWxlbVtlLnByb3BdfHxlLmVsZW0uc3R5bGUmJm51bGwhPWUuZWxlbS5zdHlsZVtlLnByb3BdPyh0PXguY3NzKGUuZWxlbSxlLnByb3AsIiIpLHQmJiJhdXRvIiE9PXQ/dDowKTplLmVsZW1bZS5wcm9wXX0sc2V0OmZ1bmN0aW9uKGUpe3guZnguc3RlcFtlLnByb3BdP3guZnguc3RlcFtlLnByb3BdKGUpOmUuZWxlbS5zdHlsZSYmKG51bGwhPWUuZWxlbS5zdHlsZVt4LmNzc1Byb3BzW2UucHJvcF1dfHx4LmNzc0hvb2tzW2UucHJvcF0pP3guc3R5bGUoZS5lbGVtLGUucHJvcCxlLm5vdytlLnVuaXQpOmUuZWxlbVtlLnByb3BdPWUubm93fX19LHJyLnByb3BIb29rcy5zY3JvbGxUb3A9cnIucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihlKXtlLmVsZW0ubm9kZVR5cGUmJmUuZWxlbS5wYXJlbnROb2RlJiYoZS5lbGVtW2UucHJvcF09ZS5ub3cpfX0seC5lYWNoKFsidG9nZ2xlIiwic2hvdyIsImhpZGUiXSxmdW5jdGlvbihlLHQpe3ZhciBuPXguZm5bdF07eC5mblt0XT1mdW5jdGlvbihlLHIsaSl7cmV0dXJuIG51bGw9PWV8fCJib29sZWFuIj09dHlwZW9mIGU/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKGlyKHQsITApLGUscixpKX19KSx4LmZuLmV4dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLmZpbHRlcihubikuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTp0fSxlLG4scil9LGFuaW1hdGU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9eC5pc0VtcHR5T2JqZWN0KGUpLG89eC5zcGVlZCh0LG4sciksYT1mdW5jdGlvbigpe3ZhciB0PWVyKHRoaXMseC5leHRlbmQoe30sZSksbyk7KGl8fHguX2RhdGEodGhpcywiZmluaXNoIikpJiZ0LnN0b3AoITApfTtyZXR1cm4gYS5maW5pc2g9YSxpfHxvLnF1ZXVlPT09ITE/dGhpcy5lYWNoKGEpOnRoaXMucXVldWUoby5xdWV1ZSxhKX0sc3RvcDpmdW5jdGlvbihlLG4scil7dmFyIGk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9wO2RlbGV0ZSBlLnN0b3AsdChyKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlJiYocj1uLG49ZSxlPXQpLG4mJmUhPT0hMSYmdGhpcy5xdWV1ZShlfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD0hMCxuPW51bGwhPWUmJmUrInF1ZXVlSG9va3MiLG89eC50aW1lcnMsYT14Ll9kYXRhKHRoaXMpO2lmKG4pYVtuXSYmYVtuXS5zdG9wJiZpKGFbbl0pO2Vsc2UgZm9yKG4gaW4gYSlhW25dJiZhW25dLnN0b3AmJkpuLnRlc3QobikmJmkoYVtuXSk7Zm9yKG49by5sZW5ndGg7bi0tOylvW25dLmVsZW0hPT10aGlzfHxudWxsIT1lJiZvW25dLnF1ZXVlIT09ZXx8KG9bbl0uYW5pbS5zdG9wKHIpLHQ9ITEsby5zcGxpY2UobiwxKSk7KHR8fCFyKSYmeC5kZXF1ZXVlKHRoaXMsZSl9KX0sZmluaXNoOmZ1bmN0aW9uKGUpe3JldHVybiBlIT09ITEmJihlPWV8fCJmeCIpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0LG49eC5fZGF0YSh0aGlzKSxyPW5bZSsicXVldWUiXSxpPW5bZSsicXVldWVIb29rcyJdLG89eC50aW1lcnMsYT1yP3IubGVuZ3RoOjA7Zm9yKG4uZmluaXNoPSEwLHgucXVldWUodGhpcyxlLFtdKSxpJiZpLnN0b3AmJmkuc3RvcC5jYWxsKHRoaXMsITApLHQ9by5sZW5ndGg7dC0tOylvW3RdLmVsZW09PT10aGlzJiZvW3RdLnF1ZXVlPT09ZSYmKG9bdF0uYW5pbS5zdG9wKCEwKSxvLnNwbGljZSh0LDEpKTtmb3IodD0wO2E+dDt0Kyspclt0XSYmclt0XS5maW5pc2gmJnJbdF0uZmluaXNoLmNhbGwodGhpcyk7ZGVsZXRlIG4uZmluaXNofSl9fSk7ZnVuY3Rpb24gaXIoZSx0KXt2YXIgbixyPXtoZWlnaHQ6ZX0saT0wO2Zvcih0PXQ/MTowOzQ+aTtpKz0yLXQpbj1adFtpXSxyWyJtYXJnaW4iK25dPXJbInBhZGRpbmciK25dPWU7cmV0dXJuIHQmJihyLm9wYWNpdHk9ci53aWR0aD1lKSxyfXguZWFjaCh7c2xpZGVEb3duOmlyKCJzaG93Iiksc2xpZGVVcDppcigiaGlkZSIpLHNsaWRlVG9nZ2xlOmlyKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGUsdCl7eC5mbltlXT1mdW5jdGlvbihlLG4scil7cmV0dXJuIHRoaXMuYW5pbWF0ZSh0LGUsbixyKX19KSx4LnNwZWVkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lJiYib2JqZWN0Ij09dHlwZW9mIGU/eC5leHRlbmQoe30sZSk6e2NvbXBsZXRlOm58fCFuJiZ0fHx4LmlzRnVuY3Rpb24oZSkmJmUsZHVyYXRpb246ZSxlYXNpbmc6biYmdHx8dCYmIXguaXNGdW5jdGlvbih0KSYmdH07cmV0dXJuIHIuZHVyYXRpb249eC5meC5vZmY/MDoibnVtYmVyIj09dHlwZW9mIHIuZHVyYXRpb24/ci5kdXJhdGlvbjpyLmR1cmF0aW9uIGluIHguZnguc3BlZWRzP3guZnguc3BlZWRzW3IuZHVyYXRpb25dOnguZnguc3BlZWRzLl9kZWZhdWx0LChudWxsPT1yLnF1ZXVlfHxyLnF1ZXVlPT09ITApJiYoci5xdWV1ZT0iZngiKSxyLm9sZD1yLmNvbXBsZXRlLHIuY29tcGxldGU9ZnVuY3Rpb24oKXt4LmlzRnVuY3Rpb24oci5vbGQpJiZyLm9sZC5jYWxsKHRoaXMpLHIucXVldWUmJnguZGVxdWV1ZSh0aGlzLHIucXVldWUpfSxyfSx4LmVhc2luZz17bGluZWFyOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxzd2luZzpmdW5jdGlvbihlKXtyZXR1cm4uNS1NYXRoLmNvcyhlKk1hdGguUEkpLzJ9fSx4LnRpbWVycz1bXSx4LmZ4PXJyLnByb3RvdHlwZS5pbml0LHguZngudGljaz1mdW5jdGlvbigpe3ZhciBlLG49eC50aW1lcnMscj0wO2ZvcihYbj14Lm5vdygpO24ubGVuZ3RoPnI7cisrKWU9bltyXSxlKCl8fG5bcl0hPT1lfHxuLnNwbGljZShyLS0sMSk7bi5sZW5ndGh8fHguZnguc3RvcCgpLFhuPXR9LHguZngudGltZXI9ZnVuY3Rpb24oZSl7ZSgpJiZ4LnRpbWVycy5wdXNoKGUpJiZ4LmZ4LnN0YXJ0KCl9LHguZnguaW50ZXJ2YWw9MTMseC5meC5zdGFydD1mdW5jdGlvbigpe1VufHwoVW49c2V0SW50ZXJ2YWwoeC5meC50aWNrLHguZnguaW50ZXJ2YWwpKX0seC5meC5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChVbiksVW49bnVsbH0seC5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0seC5meC5zdGVwPXt9LHguZXhwciYmeC5leHByLmZpbHRlcnMmJih4LmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihlKXtyZXR1cm4geC5ncmVwKHgudGltZXJzLGZ1bmN0aW9uKHQpe3JldHVybiBlPT09dC5lbGVtfSkubGVuZ3RofSkseC5mbi5vZmZzZXQ9ZnVuY3Rpb24oZSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZT09PXQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24odCl7eC5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsZSx0KX0pO3ZhciBuLHIsbz17dG9wOjAsbGVmdDowfSxhPXRoaXNbMF0scz1hJiZhLm93bmVyRG9jdW1lbnQ7aWYocylyZXR1cm4gbj1zLmRvY3VtZW50RWxlbWVudCx4LmNvbnRhaW5zKG4sYSk/KHR5cGVvZiBhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCE9PWkmJihvPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLHI9b3Iocykse3RvcDpvLnRvcCsoci5wYWdlWU9mZnNldHx8bi5zY3JvbGxUb3ApLShuLmNsaWVudFRvcHx8MCksbGVmdDpvLmxlZnQrKHIucGFnZVhPZmZzZXR8fG4uc2Nyb2xsTGVmdCktKG4uY2xpZW50TGVmdHx8MCl9KTpvfSx4Lm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj14LmNzcyhlLCJwb3NpdGlvbiIpOyJzdGF0aWMiPT09ciYmKGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIik7dmFyIGk9eChlKSxvPWkub2Zmc2V0KCksYT14LmNzcyhlLCJ0b3AiKSxzPXguY3NzKGUsImxlZnQiKSxsPSgiYWJzb2x1dGUiPT09cnx8ImZpeGVkIj09PXIpJiZ4LmluQXJyYXkoImF1dG8iLFthLHNdKT4tMSx1PXt9LGM9e30scCxmO2w/KGM9aS5wb3NpdGlvbigpLHA9Yy50b3AsZj1jLmxlZnQpOihwPXBhcnNlRmxvYXQoYSl8fDAsZj1wYXJzZUZsb2F0KHMpfHwwKSx4LmlzRnVuY3Rpb24odCkmJih0PXQuY2FsbChlLG4sbykpLG51bGwhPXQudG9wJiYodS50b3A9dC50b3Atby50b3ArcCksbnVsbCE9dC5sZWZ0JiYodS5sZWZ0PXQubGVmdC1vLmxlZnQrZiksInVzaW5nImluIHQ/dC51c2luZy5jYWxsKGUsdSk6aS5jc3ModSl9fSx4LmZuLmV4dGVuZCh7cG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgZSx0LG49e3RvcDowLGxlZnQ6MH0scj10aGlzWzBdO3JldHVybiJmaXhlZCI9PT14LmNzcyhyLCJwb3NpdGlvbiIpP3Q9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTooZT10aGlzLm9mZnNldFBhcmVudCgpLHQ9dGhpcy5vZmZzZXQoKSx4Lm5vZGVOYW1lKGVbMF0sImh0bWwiKXx8KG49ZS5vZmZzZXQoKSksbi50b3ArPXguY3NzKGVbMF0sImJvcmRlclRvcFdpZHRoIiwhMCksbi5sZWZ0Kz14LmNzcyhlWzBdLCJib3JkZXJMZWZ0V2lkdGgiLCEwKSkse3RvcDp0LnRvcC1uLnRvcC14LmNzcyhyLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OnQubGVmdC1uLmxlZnQteC5jc3MociwibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXMub2Zmc2V0UGFyZW50fHxzO3doaWxlKGUmJiF4Lm5vZGVOYW1lKGUsImh0bWwiKSYmInN0YXRpYyI9PT14LmNzcyhlLCJwb3NpdGlvbiIpKWU9ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGV8fHN9KX19KSx4LmVhY2goe3Njcm9sbExlZnQ6InBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24oZSxuKXt2YXIgcj0vWS8udGVzdChuKTt4LmZuW2VdPWZ1bmN0aW9uKGkpe3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUsaSxvKXt2YXIgYT1vcihlKTtyZXR1cm4gbz09PXQ/YT9uIGluIGE/YVtuXTphLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtpXTplW2ldOihhP2Euc2Nyb2xsVG8ocj94KGEpLnNjcm9sbExlZnQoKTpvLHI/bzp4KGEpLnNjcm9sbFRvcCgpKTplW2ldPW8sdCl9LGUsaSxhcmd1bWVudHMubGVuZ3RoLG51bGwpfX0pO2Z1bmN0aW9uIG9yKGUpe3JldHVybiB4LmlzV2luZG93KGUpP2U6OT09PWUubm9kZVR5cGU/ZS5kZWZhdWx0Vmlld3x8ZS5wYXJlbnRXaW5kb3c6ITF9eC5lYWNoKHtIZWlnaHQ6ImhlaWdodCIsV2lkdGg6IndpZHRoIn0sZnVuY3Rpb24oZSxuKXt4LmVhY2goe3BhZGRpbmc6ImlubmVyIitlLGNvbnRlbnQ6biwiIjoib3V0ZXIiK2V9LGZ1bmN0aW9uKHIsaSl7eC5mbltpXT1mdW5jdGlvbihpLG8pe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGgmJihyfHwiYm9vbGVhbiIhPXR5cGVvZiBpKSxzPXJ8fChpPT09ITB8fG89PT0hMD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuIHguYWNjZXNzKHRoaXMsZnVuY3Rpb24obixyLGkpe3ZhciBvO3JldHVybiB4LmlzV2luZG93KG4pP24uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2VdOjk9PT1uLm5vZGVUeXBlPyhvPW4uZG9jdW1lbnRFbGVtZW50LE1hdGgubWF4KG4uYm9keVsic2Nyb2xsIitlXSxvWyJzY3JvbGwiK2VdLG4uYm9keVsib2Zmc2V0IitlXSxvWyJvZmZzZXQiK2VdLG9bImNsaWVudCIrZV0pKTppPT09dD94LmNzcyhuLHIscyk6eC5zdHlsZShuLHIsaSxzKX0sbixhP2k6dCxhLG51bGwpfX0pfSkseC5mbi5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSx4LmZuLmFuZFNlbGY9eC5mbi5hZGRCYWNrLCJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9eDooZS5qUXVlcnk9ZS4kPXgsImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSl9KSh3aW5kb3cpOwo="}},"time_used":40,"timings":{"blocked":-1,"dns":1,"connect":8,"send":0,"wait":10,"receive":3,"ssl":17},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"detran-go-emissao-gov.site/dashboard/javascripts/all.js","fqdn":"detran-go-emissao-gov.site","domain":"detran-go-emissao-gov.site","tld":"site"},"ip":{"addr":"172.67.152.179","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://detran-go-emissao-gov.site/dashboard/","date":"2026-07-27T14:06:09.573Z","timestamp":1785161169573,"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":"detran-go-emissao-gov.site","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Sun, 26 Jul 2026 14:27:30 GMT","end":"Sat, 24 Oct 2026 15:26:12 GMT"},"fingerprint":{"sha1":"33:BD:B0:00:D4:4F:09:5C:59:02:3B:55:1C:94:52:31:7F:BD:F6:AE","sha256":"F4:70:53:78:85:5E:A4:5C:81:1D:85:52:5D:63:D9:95:2D:9A:2E:D2:93:00:F8:AC:EA:E4:AC:0B:59:BC:2A:A0"}}},"request":{"raw":"GET /dashboard/javascripts/all.js HTTP/1.1\r\nHost: detran-go-emissao-gov.site\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://detran-go-emissao-gov.site/dashboard/\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: no-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\ndate: Mon, 27 Jul 2026 14:06:10 GMT\r\nserver: cloudflare\r\nlast-modified: Tue, 22 Nov 2022 15:37:08 GMT\r\nreport-to: {\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=DAMITLuKXDLJY1kI%2FV6Re%2BSjtazj8EifAtrZvfPySSwVrerbsnId%2Fgd4jCzMtVRpHl%2BbEo3S0ZREHC3y%2Fh%2BTD8T9p%2F5t1fxYD44wCDMw6%2B9Wp5T7M%2B2Zl%2B5TM2qi6cAXnJ2%2BCm1OOSN5z5MiOQ%3D%3D\"}]}\r\nnel: {\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}\r\npriority: u=3,i=?0\r\ncontent-encoding: zstd\r\netag: W/\"2dfe1-5ee10f1d97100\"\r\ncontent-type: text/javascript\r\ncache-control: max-age=14400\r\ncf-cache-status: REVALIDATED\r\ncf-ray: a21c33fdddc87131-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":188385,"size_decoded":49573,"mime_type":"text/javascript","magic":"JavaScript source, Unicode text, UTF-8 text, with very long lines (9898)","md5":"83006561af55b7a96dd7e17d34ebfe8a","sha1":"049ace360d58b350e42d26b3f58d1e0e85d82be1","sha256":"0e7d03297babd3fd3f47fd63c3045a561db453ba8c3733e4b6d0be7e4453c126","sha512":"e426881b7ad07e95f0ca306abce2e8cb3996ad8209f1a0d971ce81b5b259a4de777e5dabb908e37ae265947434962a07e4df4441712c748c43ca8023a98d75fd","ssdeep":"3072:aL3PqpaK3ymxI8jdIn5uqlBV5gyBS/FpzarzCT71Ptk:aLfqpaK3ymxI8jdIn5uqlBV5/I/FpOrT","tlshash":"3404930d7af7202685a7707a5bdf5204b232801b550aed28bd7c83946f90a7852f6ffd","first_seen":"2023-03-07T12:09:32Z","last_seen":"2026-07-27T14:06:48.029441Z","times_seen":736,"resource_available":false,"data":"LyoKICogRm91bmRhdGlvbiBSZXNwb25zaXZlIExpYnJhcnkKICogaHR0cDovL2ZvdW5kYXRpb24uenVyYi5jb20KICogQ29weXJpZ2h0IDIwMTMsIFpVUkIKICogRnJlZSB0byB1c2UgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgogKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocAoqLwoKCihmdW5jdGlvbiAoJCwgd2luZG93LCBkb2N1bWVudCwgdW5kZWZpbmVkKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvLyBVc2VkIHRvIHJldHJpZXZlIEZvdW5kYXRpb24gbWVkaWEgcXVlcmllcyBmcm9tIENTUy4KICBpZigkKCdoZWFkJykuaGFzKCcuZm91bmRhdGlvbi1tcS1zbWFsbCcpLmxlbmd0aCA9PT0gMCkgewogICAgJCgnaGVhZCcpLmFwcGVuZCgnPG1ldGEgY2xhc3M9ImZvdW5kYXRpb24tbXEtc21hbGwiPicpOwogIH0KCiAgaWYoJCgnaGVhZCcpLmhhcygnLmZvdW5kYXRpb24tbXEtbWVkaXVtJykubGVuZ3RoID09PSAwKSB7CiAgICAkKCdoZWFkJykuYXBwZW5kKCc8bWV0YSBjbGFzcz0iZm91bmRhdGlvbi1tcS1tZWRpdW0iPicpOwogIH0KCiAgaWYoJCgnaGVhZCcpLmhhcygnLmZvdW5kYXRpb24tbXEtbGFyZ2UnKS5sZW5ndGggPT09IDApIHsKICAgICQoJ2hlYWQnKS5hcHBlbmQoJzxtZXRhIGNsYXNzPSJmb3VuZGF0aW9uLW1xLWxhcmdlIj4nKTsKICB9CgogIGlmKCQoJ2hlYWQnKS5oYXMoJy5mb3VuZGF0aW9uLW1xLXhsYXJnZScpLmxlbmd0aCA9PT0gMCkgewogICAgJCgnaGVhZCcpLmFwcGVuZCgnPG1ldGEgY2xhc3M9ImZvdW5kYXRpb24tbXEteGxhcmdlIj4nKTsKICB9CgogIGlmKCQoJ2hlYWQnKS5oYXMoJy5mb3VuZGF0aW9uLW1xLXh4bGFyZ2UnKS5sZW5ndGggPT09IDApIHsKICAgICQoJ2hlYWQnKS5hcHBlbmQoJzxtZXRhIGNsYXNzPSJmb3VuZGF0aW9uLW1xLXh4bGFyZ2UiPicpOwogIH0KCiAgLy8gRW1iZWQgRmFzdENsaWNrICh0aGlzIHNob3VsZCBiZSByZW1vdmVkIGxhdGVyKQogIGZ1bmN0aW9uIEZhc3RDbGljayhsYXllcil7J3VzZSBzdHJpY3QnO3ZhciBvbGRPbkNsaWNrLHNlbGY9dGhpczt0aGlzLnRyYWNraW5nQ2xpY2s9ZmFsc2U7dGhpcy50cmFja2luZ0NsaWNrU3RhcnQ9MDt0aGlzLnRhcmdldEVsZW1lbnQ9bnVsbDt0aGlzLnRvdWNoU3RhcnRYPTA7dGhpcy50b3VjaFN0YXJ0WT0wO3RoaXMubGFzdFRvdWNoSWRlbnRpZmllcj0wO3RoaXMudG91Y2hCb3VuZGFyeT0xMDt0aGlzLmxheWVyPWxheWVyO2lmKCFsYXllcnx8IWxheWVyLm5vZGVUeXBlKXt0aHJvdyBuZXcgVHlwZUVycm9yKCdMYXllciBtdXN0IGJlIGEgZG9jdW1lbnQgbm9kZScpO310aGlzLm9uQ2xpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gRmFzdENsaWNrLnByb3RvdHlwZS5vbkNsaWNrLmFwcGx5KHNlbGYsYXJndW1lbnRzKX07dGhpcy5vbk1vdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIEZhc3RDbGljay5wcm90b3R5cGUub25Nb3VzZS5hcHBseShzZWxmLGFyZ3VtZW50cyl9O3RoaXMub25Ub3VjaFN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIEZhc3RDbGljay5wcm90b3R5cGUub25Ub3VjaFN0YXJ0LmFwcGx5KHNlbGYsYXJndW1lbnRzKX07dGhpcy5vblRvdWNoTW92ZT1mdW5jdGlvbigpe3JldHVybiBGYXN0Q2xpY2sucHJvdG90eXBlLm9uVG91Y2hNb3ZlLmFwcGx5KHNlbGYsYXJndW1lbnRzKX07dGhpcy5vblRvdWNoRW5kPWZ1bmN0aW9uKCl7cmV0dXJuIEZhc3RDbGljay5wcm90b3R5cGUub25Ub3VjaEVuZC5hcHBseShzZWxmLGFyZ3VtZW50cyl9O3RoaXMub25Ub3VjaENhbmNlbD1mdW5jdGlvbigpe3JldHVybiBGYXN0Q2xpY2sucHJvdG90eXBlLm9uVG91Y2hDYW5jZWwuYXBwbHkoc2VsZixhcmd1bWVudHMpfTtpZihGYXN0Q2xpY2subm90TmVlZGVkKGxheWVyKSl7cmV0dXJufWlmKHRoaXMuZGV2aWNlSXNBbmRyb2lkKXtsYXllci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLHRoaXMub25Nb3VzZSx0cnVlKTtsYXllci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLHRoaXMub25Nb3VzZSx0cnVlKTtsYXllci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJyx0aGlzLm9uTW91c2UsdHJ1ZSl9bGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLHRoaXMub25DbGljayx0cnVlKTtsYXllci5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jyx0aGlzLm9uVG91Y2hTdGFydCxmYWxzZSk7bGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJyx0aGlzLm9uVG91Y2hNb3ZlLGZhbHNlKTtsYXllci5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsdGhpcy5vblRvdWNoRW5kLGZhbHNlKTtsYXllci5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsdGhpcy5vblRvdWNoQ2FuY2VsLGZhbHNlKTtpZighRXZlbnQucHJvdG90eXBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbil7bGF5ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0eXBlLGNhbGxiYWNrLGNhcHR1cmUpe3ZhciBybXY9Tm9kZS5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcjtpZih0eXBlPT09J2NsaWNrJyl7cm12LmNhbGwobGF5ZXIsdHlwZSxjYWxsYmFjay5oaWphY2tlZHx8Y2FsbGJhY2ssY2FwdHVyZSl9ZWxzZXtybXYuY2FsbChsYXllcix0eXBlLGNhbGxiYWNrLGNhcHR1cmUpfX07bGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0eXBlLGNhbGxiYWNrLGNhcHR1cmUpe3ZhciBhZHY9Tm9kZS5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcjtpZih0eXBlPT09J2NsaWNrJyl7YWR2LmNhbGwobGF5ZXIsdHlwZSxjYWxsYmFjay5oaWphY2tlZHx8KGNhbGxiYWNrLmhpamFja2VkPWZ1bmN0aW9uKGV2ZW50KXtpZighZXZlbnQucHJvcGFnYXRpb25TdG9wcGVkKXtjYWxsYmFjayhldmVudCl9fSksY2FwdHVyZSl9ZWxzZXthZHYuY2FsbChsYXllcix0eXBlLGNhbGxiYWNrLGNhcHR1cmUpfX19aWYodHlwZW9mIGxheWVyLm9uY2xpY2s9PT0nZnVuY3Rpb24nKXtvbGRPbkNsaWNrPWxheWVyLm9uY2xpY2s7bGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKGV2ZW50KXtvbGRPbkNsaWNrKGV2ZW50KX0sZmFsc2UpO2xheWVyLm9uY2xpY2s9bnVsbH19RmFzdENsaWNrLnByb3RvdHlwZS5kZXZpY2VJc0FuZHJvaWQ9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdBbmRyb2lkJyk+MDtGYXN0Q2xpY2sucHJvdG90eXBlLmRldmljZUlzSU9TPS9pUChhZHxob25lfG9kKS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtGYXN0Q2xpY2sucHJvdG90eXBlLmRldmljZUlzSU9TND1GYXN0Q2xpY2sucHJvdG90eXBlLmRldmljZUlzSU9TJiYoL09TIDRfXGQoX1xkKT8vKS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO0Zhc3RDbGljay5wcm90b3R5cGUuZGV2aWNlSXNJT1NXaXRoQmFkVGFyZ2V0PUZhc3RDbGljay5wcm90b3R5cGUuZGV2aWNlSXNJT1MmJigvT1MgKFs2LTldfFxkezJ9KV9cZC8pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7RmFzdENsaWNrLnByb3RvdHlwZS5uZWVkc0NsaWNrPWZ1bmN0aW9uKHRhcmdldCl7J3VzZSBzdHJpY3QnO3N3aXRjaCh0YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7Y2FzZSdidXR0b24nOmNhc2Unc2VsZWN0JzpjYXNlJ3RleHRhcmVhJzppZih0YXJnZXQuZGlzYWJsZWQpe3JldHVybiB0cnVlfWJyZWFrO2Nhc2UnaW5wdXQnOmlmKCh0aGlzLmRldmljZUlzSU9TJiZ0YXJnZXQudHlwZT09PSdmaWxlJyl8fHRhcmdldC5kaXNhYmxlZCl7cmV0dXJuIHRydWV9YnJlYWs7Y2FzZSdsYWJlbCc6Y2FzZSd2aWRlbyc6cmV0dXJuIHRydWV9cmV0dXJuKC9cYm5lZWRzY2xpY2tcYi8pLnRlc3QodGFyZ2V0LmNsYXNzTmFtZSl9O0Zhc3RDbGljay5wcm90b3R5cGUubmVlZHNGb2N1cz1mdW5jdGlvbih0YXJnZXQpeyd1c2Ugc3RyaWN0Jztzd2l0Y2godGFyZ2V0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe2Nhc2UndGV4dGFyZWEnOmNhc2Unc2VsZWN0JzpyZXR1cm4gdHJ1ZTtjYXNlJ2lucHV0Jzpzd2l0Y2godGFyZ2V0LnR5cGUpe2Nhc2UnYnV0dG9uJzpjYXNlJ2NoZWNrYm94JzpjYXNlJ2ZpbGUnOmNhc2UnaW1hZ2UnOmNhc2UncmFkaW8nOmNhc2Unc3VibWl0JzpyZXR1cm4gZmFsc2V9cmV0dXJuIXRhcmdldC5kaXNhYmxlZCYmIXRhcmdldC5yZWFkT25seTtkZWZhdWx0OnJldHVybigvXGJuZWVkc2ZvY3VzXGIvKS50ZXN0KHRhcmdldC5jbGFzc05hbWUpfX07RmFzdENsaWNrLnByb3RvdHlwZS5zZW5kQ2xpY2s9ZnVuY3Rpb24odGFyZ2V0RWxlbWVudCxldmVudCl7J3VzZSBzdHJpY3QnO3ZhciBjbGlja0V2ZW50LHRvdWNoO2lmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT10YXJnZXRFbGVtZW50KXtkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKX10b3VjaD1ldmVudC5jaGFuZ2VkVG91Y2hlc1swXTtjbGlja0V2ZW50PWRvY3VtZW50LmNyZWF0ZUV2ZW50KCdNb3VzZUV2ZW50cycpO2NsaWNrRXZlbnQuaW5pdE1vdXNlRXZlbnQoJ2NsaWNrJyx0cnVlLHRydWUsd2luZG93LDEsdG91Y2guc2NyZWVuWCx0b3VjaC5zY3JlZW5ZLHRvdWNoLmNsaWVudFgsdG91Y2guY2xpZW50WSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSwwLG51bGwpO2NsaWNrRXZlbnQuZm9yd2FyZGVkVG91Y2hFdmVudD10cnVlO3RhcmdldEVsZW1lbnQuZGlzcGF0Y2hFdmVudChjbGlja0V2ZW50KX07RmFzdENsaWNrLnByb3RvdHlwZS5mb2N1cz1mdW5jdGlvbih0YXJnZXRFbGVtZW50KXsndXNlIHN0cmljdCc7dmFyIGxlbmd0aDtpZih0aGlzLmRldmljZUlzSU9TJiZ0YXJnZXRFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKXtsZW5ndGg9dGFyZ2V0RWxlbWVudC52YWx1ZS5sZW5ndGg7dGFyZ2V0RWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShsZW5ndGgsbGVuZ3RoKX1lbHNle3RhcmdldEVsZW1lbnQuZm9jdXMoKX19O0Zhc3RDbGljay5wcm90b3R5cGUudXBkYXRlU2Nyb2xsUGFyZW50PWZ1bmN0aW9uKHRhcmdldEVsZW1lbnQpeyd1c2Ugc3RyaWN0Jzt2YXIgc2Nyb2xsUGFyZW50LHBhcmVudEVsZW1lbnQ7c2Nyb2xsUGFyZW50PXRhcmdldEVsZW1lbnQuZmFzdENsaWNrU2Nyb2xsUGFyZW50O2lmKCFzY3JvbGxQYXJlbnR8fCFzY3JvbGxQYXJlbnQuY29udGFpbnModGFyZ2V0RWxlbWVudCkpe3BhcmVudEVsZW1lbnQ9dGFyZ2V0RWxlbWVudDtkb3tpZihwYXJlbnRFbGVtZW50LnNjcm9sbEhlaWdodD5wYXJlbnRFbGVtZW50Lm9mZnNldEhlaWdodCl7c2Nyb2xsUGFyZW50PXBhcmVudEVsZW1lbnQ7dGFyZ2V0RWxlbWVudC5mYXN0Q2xpY2tTY3JvbGxQYXJlbnQ9cGFyZW50RWxlbWVudDticmVha31wYXJlbnRFbGVtZW50PXBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudH13aGlsZShwYXJlbnRFbGVtZW50KX1pZihzY3JvbGxQYXJlbnQpe3Njcm9sbFBhcmVudC5mYXN0Q2xpY2tMYXN0U2Nyb2xsVG9wPXNjcm9sbFBhcmVudC5zY3JvbGxUb3B9fTtGYXN0Q2xpY2sucHJvdG90eXBlLmdldFRhcmdldEVsZW1lbnRGcm9tRXZlbnRUYXJnZXQ9ZnVuY3Rpb24oZXZlbnRUYXJnZXQpeyd1c2Ugc3RyaWN0JztpZihldmVudFRhcmdldC5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFKXtyZXR1cm4gZXZlbnRUYXJnZXQucGFyZW50Tm9kZX1yZXR1cm4gZXZlbnRUYXJnZXR9O0Zhc3RDbGljay5wcm90b3R5cGUub25Ub3VjaFN0YXJ0PWZ1bmN0aW9uKGV2ZW50KXsndXNlIHN0cmljdCc7dmFyIHRhcmdldEVsZW1lbnQsdG91Y2gsc2VsZWN0aW9uO2lmKGV2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoPjEpe3JldHVybiB0cnVlfXRhcmdldEVsZW1lbnQ9dGhpcy5nZXRUYXJnZXRFbGVtZW50RnJvbUV2ZW50VGFyZ2V0KGV2ZW50LnRhcmdldCk7dG91Y2g9ZXZlbnQudGFyZ2V0VG91Y2hlc1swXTtpZih0aGlzLmRldmljZUlzSU9TKXtzZWxlY3Rpb249d2luZG93LmdldFNlbGVjdGlvbigpO2lmKHNlbGVjdGlvbi5yYW5nZUNvdW50JiYhc2VsZWN0aW9uLmlzQ29sbGFwc2VkKXtyZXR1cm4gdHJ1ZX1pZighdGhpcy5kZXZpY2VJc0lPUzQpe2lmKHRvdWNoLmlkZW50aWZpZXI9PT10aGlzLmxhc3RUb3VjaElkZW50aWZpZXIpe2V2ZW50LnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIGZhbHNlfXRoaXMubGFzdFRvdWNoSWRlbnRpZmllcj10b3VjaC5pZGVudGlmaWVyO3RoaXMudXBkYXRlU2Nyb2xsUGFyZW50KHRhcmdldEVsZW1lbnQpfX10aGlzLnRyYWNraW5nQ2xpY2s9dHJ1ZTt0aGlzLnRyYWNraW5nQ2xpY2tTdGFydD1ldmVudC50aW1lU3RhbXA7dGhpcy50YXJnZXRFbGVtZW50PXRhcmdldEVsZW1lbnQ7dGhpcy50b3VjaFN0YXJ0WD10b3VjaC5wYWdlWDt0aGlzLnRvdWNoU3RhcnRZPXRvdWNoLnBhZ2VZO2lmKChldmVudC50aW1lU3RhbXAtdGhpcy5sYXN0Q2xpY2tUaW1lKTwyMDApe2V2ZW50LnByZXZlbnREZWZhdWx0KCl9cmV0dXJuIHRydWV9O0Zhc3RDbGljay5wcm90b3R5cGUudG91Y2hIYXNNb3ZlZD1mdW5jdGlvbihldmVudCl7J3VzZSBzdHJpY3QnO3ZhciB0b3VjaD1ldmVudC5jaGFuZ2VkVG91Y2hlc1swXSxib3VuZGFyeT10aGlzLnRvdWNoQm91bmRhcnk7aWYoTWF0aC5hYnModG91Y2gucGFnZVgtdGhpcy50b3VjaFN0YXJ0WCk+Ym91bmRhcnl8fE1hdGguYWJzKHRvdWNoLnBhZ2VZLXRoaXMudG91Y2hTdGFydFkpPmJvdW5kYXJ5KXtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9O0Zhc3RDbGljay5wcm90b3R5cGUub25Ub3VjaE1vdmU9ZnVuY3Rpb24oZXZlbnQpeyd1c2Ugc3RyaWN0JztpZighdGhpcy50cmFja2luZ0NsaWNrKXtyZXR1cm4gdHJ1ZX1pZih0aGlzLnRhcmdldEVsZW1lbnQhPT10aGlzLmdldFRhcmdldEVsZW1lbnRGcm9tRXZlbnRUYXJnZXQoZXZlbnQudGFyZ2V0KXx8dGhpcy50b3VjaEhhc01vdmVkKGV2ZW50KSl7dGhpcy50cmFja2luZ0NsaWNrPWZhbHNlO3RoaXMudGFyZ2V0RWxlbWVudD1udWxsfXJldHVybiB0cnVlfTtGYXN0Q2xpY2sucHJvdG90eXBlLmZpbmRDb250cm9sPWZ1bmN0aW9uKGxhYmVsRWxlbWVudCl7J3VzZSBzdHJpY3QnO2lmKGxhYmVsRWxlbWVudC5jb250cm9sIT09dW5kZWZpbmVkKXtyZXR1cm4gbGFiZWxFbGVtZW50LmNvbnRyb2x9aWYobGFiZWxFbGVtZW50Lmh0bWxGb3Ipe3JldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChsYWJlbEVsZW1lbnQuaHRtbEZvcil9cmV0dXJuIGxhYmVsRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdidXR0b24sIGlucHV0Om5vdChbdHlwZT1oaWRkZW5dKSwga2V5Z2VuLCBtZXRlciwgb3V0cHV0LCBwcm9ncmVzcywgc2VsZWN0LCB0ZXh0YXJlYScpfTtGYXN0Q2xpY2sucHJvdG90eXBlLm9uVG91Y2hFbmQ9ZnVuY3Rpb24oZXZlbnQpeyd1c2Ugc3RyaWN0Jzt2YXIgZm9yRWxlbWVudCx0cmFja2luZ0NsaWNrU3RhcnQsdGFyZ2V0VGFnTmFtZSxzY3JvbGxQYXJlbnQsdG91Y2gsdGFyZ2V0RWxlbWVudD10aGlzLnRhcmdldEVsZW1lbnQ7aWYoIXRoaXMudHJhY2tpbmdDbGljayl7cmV0dXJuIHRydWV9aWYoKGV2ZW50LnRpbWVTdGFtcC10aGlzLmxhc3RDbGlja1RpbWUpPDIwMCl7dGhpcy5jYW5jZWxOZXh0Q2xpY2s9dHJ1ZTtyZXR1cm4gdHJ1ZX10aGlzLmxhc3RDbGlja1RpbWU9ZXZlbnQudGltZVN0YW1wO3RyYWNraW5nQ2xpY2tTdGFydD10aGlzLnRyYWNraW5nQ2xpY2tTdGFydDt0aGlzLnRyYWNraW5nQ2xpY2s9ZmFsc2U7dGhpcy50cmFja2luZ0NsaWNrU3RhcnQ9MDtpZih0aGlzLmRldmljZUlzSU9TV2l0aEJhZFRhcmdldCl7dG91Y2g9ZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07dGFyZ2V0RWxlbWVudD1kb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHRvdWNoLnBhZ2VYLXdpbmRvdy5wYWdlWE9mZnNldCx0b3VjaC5wYWdlWS13aW5kb3cucGFnZVlPZmZzZXQpfHx0YXJnZXRFbGVtZW50O3RhcmdldEVsZW1lbnQuZmFzdENsaWNrU2Nyb2xsUGFyZW50PXRoaXMudGFyZ2V0RWxlbWVudC5mYXN0Q2xpY2tTY3JvbGxQYXJlbnR9dGFyZ2V0VGFnTmFtZT10YXJnZXRFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtpZih0YXJnZXRUYWdOYW1lPT09J2xhYmVsJyl7Zm9yRWxlbWVudD10aGlzLmZpbmRDb250cm9sKHRhcmdldEVsZW1lbnQpO2lmKGZvckVsZW1lbnQpe3RoaXMuZm9jdXModGFyZ2V0RWxlbWVudCk7aWYodGhpcy5kZXZpY2VJc0FuZHJvaWQpe3JldHVybiBmYWxzZX10YXJnZXRFbGVtZW50PWZvckVsZW1lbnR9fWVsc2UgaWYodGhpcy5uZWVkc0ZvY3VzKHRhcmdldEVsZW1lbnQpKXtpZigoZXZlbnQudGltZVN0YW1wLXRyYWNraW5nQ2xpY2tTdGFydCk+MTAwfHwodGhpcy5kZXZpY2VJc0lPUyYmd2luZG93LnRvcCE9PXdpbmRvdyYmdGFyZ2V0VGFnTmFtZT09PSdpbnB1dCcpKXt0aGlzLnRhcmdldEVsZW1lbnQ9bnVsbDtyZXR1cm4gZmFsc2V9dGhpcy5mb2N1cyh0YXJnZXRFbGVtZW50KTtpZighdGhpcy5kZXZpY2VJc0lPUzR8fHRhcmdldFRhZ05hbWUhPT0nc2VsZWN0Jyl7dGhpcy50YXJnZXRFbGVtZW50PW51bGw7ZXZlbnQucHJldmVudERlZmF1bHQoKX1yZXR1cm4gZmFsc2V9aWYodGhpcy5kZXZpY2VJc0lPUyYmIXRoaXMuZGV2aWNlSXNJT1M0KXtzY3JvbGxQYXJlbnQ9dGFyZ2V0RWxlbWVudC5mYXN0Q2xpY2tTY3JvbGxQYXJlbnQ7aWYoc2Nyb2xsUGFyZW50JiZzY3JvbGxQYXJlbnQuZmFzdENsaWNrTGFzdFNjcm9sbFRvcCE9PXNjcm9sbFBhcmVudC5zY3JvbGxUb3Ape3JldHVybiB0cnVlfX1pZighdGhpcy5uZWVkc0NsaWNrKHRhcmdldEVsZW1lbnQpKXtldmVudC5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuc2VuZENsaWNrKHRhcmdldEVsZW1lbnQsZXZlbnQpfXJldHVybiBmYWxzZX07RmFzdENsaWNrLnByb3RvdHlwZS5vblRvdWNoQ2FuY2VsPWZ1bmN0aW9uKCl7J3VzZSBzdHJpY3QnO3RoaXMudHJhY2tpbmdDbGljaz1mYWxzZTt0aGlzLnRhcmdldEVsZW1lbnQ9bnVsbH07RmFzdENsaWNrLnByb3RvdHlwZS5vbk1vdXNlPWZ1bmN0aW9uKGV2ZW50KXsndXNlIHN0cmljdCc7aWYoIXRoaXMudGFyZ2V0RWxlbWVudCl7cmV0dXJuIHRydWV9aWYoZXZlbnQuZm9yd2FyZGVkVG91Y2hFdmVudCl7cmV0dXJuIHRydWV9aWYoIWV2ZW50LmNhbmNlbGFibGUpe3JldHVybiB0cnVlfWlmKCF0aGlzLm5lZWRzQ2xpY2sodGhpcy50YXJnZXRFbGVtZW50KXx8dGhpcy5jYW5jZWxOZXh0Q2xpY2spe2lmKGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbil7ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZWxzZXtldmVudC5wcm9wYWdhdGlvblN0b3BwZWQ9dHJ1ZX1ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtldmVudC5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX07RmFzdENsaWNrLnByb3RvdHlwZS5vbkNsaWNrPWZ1bmN0aW9uKGV2ZW50KXsndXNlIHN0cmljdCc7dmFyIHBlcm1pdHRlZDtpZih0aGlzLnRyYWNraW5nQ2xpY2spe3RoaXMudGFyZ2V0RWxlbWVudD1udWxsO3RoaXMudHJhY2tpbmdDbGljaz1mYWxzZTtyZXR1cm4gdHJ1ZX1pZihldmVudC50YXJnZXQudHlwZT09PSdzdWJtaXQnJiZldmVudC5kZXRhaWw9PT0wKXtyZXR1cm4gdHJ1ZX1wZXJtaXR0ZWQ9dGhpcy5vbk1vdXNlKGV2ZW50KTtpZighcGVybWl0dGVkKXt0aGlzLnRhcmdldEVsZW1lbnQ9bnVsbH1yZXR1cm4gcGVybWl0dGVkfTtGYXN0Q2xpY2sucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXsndXNlIHN0cmljdCc7dmFyIGxheWVyPXRoaXMubGF5ZXI7aWYodGhpcy5kZXZpY2VJc0FuZHJvaWQpe2xheWVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsdGhpcy5vbk1vdXNlLHRydWUpO2xheWVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsdGhpcy5vbk1vdXNlLHRydWUpO2xheWVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLHRoaXMub25Nb3VzZSx0cnVlKX1sYXllci5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsdGhpcy5vbkNsaWNrLHRydWUpO2xheWVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLHRoaXMub25Ub3VjaFN0YXJ0LGZhbHNlKTtsYXllci5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLHRoaXMub25Ub3VjaE1vdmUsZmFsc2UpO2xheWVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJyx0aGlzLm9uVG91Y2hFbmQsZmFsc2UpO2xheWVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoY2FuY2VsJyx0aGlzLm9uVG91Y2hDYW5jZWwsZmFsc2UpfTtGYXN0Q2xpY2subm90TmVlZGVkPWZ1bmN0aW9uKGxheWVyKXsndXNlIHN0cmljdCc7dmFyIG1ldGFWaWV3cG9ydDtpZih0eXBlb2Ygd2luZG93Lm9udG91Y2hzdGFydD09PSd1bmRlZmluZWQnKXtyZXR1cm4gdHJ1ZX1pZigoL0Nocm9tZVwvWzAtOV0rLykudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl7aWYoRmFzdENsaWNrLnByb3RvdHlwZS5kZXZpY2VJc0FuZHJvaWQpe21ldGFWaWV3cG9ydD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9dmlld3BvcnRdJyk7aWYobWV0YVZpZXdwb3J0JiZtZXRhVmlld3BvcnQuY29udGVudC5pbmRleE9mKCd1c2VyLXNjYWxhYmxlPW5vJykhPT0tMSl7cmV0dXJuIHRydWV9fWVsc2V7cmV0dXJuIHRydWV9fWlmKGxheWVyLnN0eWxlLm1zVG91Y2hBY3Rpb249PT0nbm9uZScpe3JldHVybiB0cnVlfXJldHVybiBmYWxzZX07RmFzdENsaWNrLmF0dGFjaD1mdW5jdGlvbihsYXllcil7J3VzZSBzdHJpY3QnO3JldHVybiBuZXcgRmFzdENsaWNrKGxheWVyKX07aWYodHlwZW9mIGRlZmluZSE9PSd1bmRlZmluZWQnJiZkZWZpbmUuYW1kKXtkZWZpbmUoZnVuY3Rpb24oKXsndXNlIHN0cmljdCc7cmV0dXJuIEZhc3RDbGlja30pfWVsc2UgaWYodHlwZW9mIG1vZHVsZSE9PSd1bmRlZmluZWQnJiZtb2R1bGUuZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9RmFzdENsaWNrLmF0dGFjaDttb2R1bGUuZXhwb3J0cy5GYXN0Q2xpY2s9RmFzdENsaWNrfWVsc2V7d2luZG93LkZhc3RDbGljaz1GYXN0Q2xpY2t9CgoKICAvLyBFbmFibGUgRmFzdENsaWNrCiAgaWYodHlwZW9mIEZhc3RDbGljayAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgIEZhc3RDbGljay5hdHRhY2goZG9jdW1lbnQuYm9keSk7CiAgfQoKICAvLyBwcml2YXRlIEZhc3QgU2VsZWN0b3Igd3JhcHBlciwKICAvLyByZXR1cm5zIGpRdWVyeSBvYmplY3QuIE9ubHkgdXNlIHdoZXJlCiAgLy8gZ2V0RWxlbWVudEJ5SWQgaXMgbm90IGF2YWlsYWJsZS4KICB2YXIgUyA9IGZ1bmN0aW9uIChzZWxlY3RvciwgY29udGV4dCkgewogICAgaWYgKHR5cGVvZiBzZWxlY3RvciA9PT0gJ3N0cmluZycpIHsKICAgICAgaWYgKGNvbnRleHQpIHsKICAgICAgICByZXR1cm4gJChjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKTsKICAgICAgfQoKICAgICAgcmV0dXJuICQoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpOwogICAgfQoKICAgIHJldHVybiAkKHNlbGVjdG9yLCBjb250ZXh0KTsKICB9OwoKICAvKgogICAgaHR0cHM6Ly9naXRodWIuY29tL3BhdWxpcmlzaC9tYXRjaE1lZGlhLmpzCiAgKi8KCiAgd2luZG93Lm1hdGNoTWVkaWEgPSB3aW5kb3cubWF0Y2hNZWRpYSB8fCAoZnVuY3Rpb24oIGRvYywgdW5kZWZpbmVkICkgewoKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICB2YXIgYm9vbCwKICAgICAgICBkb2NFbGVtID0gZG9jLmRvY3VtZW50RWxlbWVudCwKICAgICAgICByZWZOb2RlID0gZG9jRWxlbS5maXJzdEVsZW1lbnRDaGlsZCB8fCBkb2NFbGVtLmZpcnN0Q2hpbGQsCiAgICAgICAgLy8gZmFrZUJvZHkgcmVxdWlyZWQgZm9yIDxGRjQgd2hlbiBleGVjdXRlZCBpbiA8aGVhZD4KICAgICAgICBmYWtlQm9keSA9IGRvYy5jcmVhdGVFbGVtZW50KCAiYm9keSIgKSwKICAgICAgICBkaXYgPSBkb2MuY3JlYXRlRWxlbWVudCggImRpdiIgKTsKCiAgICBkaXYuaWQgPSAibXEtdGVzdC0xIjsKICAgIGRpdi5zdHlsZS5jc3NUZXh0ID0gInBvc2l0aW9uOmFic29sdXRlO3RvcDotMTAwZW0iOwogICAgZmFrZUJvZHkuc3R5bGUuYmFja2dyb3VuZCA9ICJub25lIjsKICAgIGZha2VCb2R5LmFwcGVuZENoaWxkKGRpdik7CgogICAgcmV0dXJuIGZ1bmN0aW9uKHEpewoKICAgICAgZGl2LmlubmVySFRNTCA9ICImc2h5OzxzdHlsZSBtZWRpYT1cIiIgKyBxICsgIlwiPiAjbXEtdGVzdC0xIHsgd2lkdGg6IDQycHg7IH08L3N0eWxlPiI7CgogICAgICBkb2NFbGVtLmluc2VydEJlZm9yZSggZmFrZUJvZHksIHJlZk5vZGUgKTsKICAgICAgYm9vbCA9IGRpdi5vZmZzZXRXaWR0aCA9PT0gNDI7CiAgICAgIGRvY0VsZW0ucmVtb3ZlQ2hpbGQoIGZha2VCb2R5ICk7CgogICAgICByZXR1cm4gewogICAgICAgIG1hdGNoZXM6IGJvb2wsCiAgICAgICAgbWVkaWE6IHEKICAgICAgfTsKCiAgICB9OwoKICB9KCBkb2N1bWVudCApKTsKCiAgLyoKICAgKiBqcXVlcnkucmVxdWVzdEFuaW1hdGlvbkZyYW1lCiAgICogaHR0cHM6Ly9naXRodWIuY29tL2duYXJmMzcvanF1ZXJ5LXJlcXVlc3RBbmltYXRpb25GcmFtZQogICAqIFJlcXVpcmVzIGpRdWVyeSAxLjgrCiAgICoKICAgKiBDb3B5cmlnaHQgKGMpIDIwMTIgQ29yZXkgRnJhbmcKICAgKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCiAgICovCgogIChmdW5jdGlvbiggJCApIHsKCiAgLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHBvbHlmaWxsIGFkYXB0ZWQgZnJvbSBFcmlrIE3DtmxsZXIKICAvLyBmaXhlcyBmcm9tIFBhdWwgSXJpc2ggYW5kIFRpbm8gWmlqZGVsCiAgLy8gaHR0cDovL3BhdWxpcmlzaC5jb20vMjAxMS9yZXF1ZXN0YW5pbWF0aW9uZnJhbWUtZm9yLXNtYXJ0LWFuaW1hdGluZy8KICAvLyBodHRwOi8vbXkub3BlcmEuY29tL2Vtb2xsZXIvYmxvZy8yMDExLzEyLzIwL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtZXItYW5pbWF0aW5nCgoKICB2YXIgYW5pbWF0aW5nLAogICAgbGFzdFRpbWUgPSAwLAogICAgdmVuZG9ycyA9IFsnd2Via2l0JywgJ21veiddLAogICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSwKICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lID0gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lOwoKICBmb3IoOyBsYXN0VGltZSA8IHZlbmRvcnMubGVuZ3RoICYmICFyZXF1ZXN0QW5pbWF0aW9uRnJhbWU7IGxhc3RUaW1lKyspIHsKICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHdpbmRvd1sgdmVuZG9yc1tsYXN0VGltZV0gKyAiUmVxdWVzdEFuaW1hdGlvbkZyYW1lIiBdOwogICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBjYW5jZWxBbmltYXRpb25GcmFtZSB8fAogICAgICB3aW5kb3dbIHZlbmRvcnNbbGFzdFRpbWVdICsgIkNhbmNlbEFuaW1hdGlvbkZyYW1lIiBdIHx8IAogICAgICB3aW5kb3dbIHZlbmRvcnNbbGFzdFRpbWVdICsgIkNhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSIgXTsKICB9CgogIGZ1bmN0aW9uIHJhZigpIHsKICAgIGlmICggYW5pbWF0aW5nICkgewogICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIHJhZiApOwogICAgICBqUXVlcnkuZngudGljaygpOwogICAgfQogIH0KCiAgaWYgKCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgKSB7CiAgICAvLyB1c2UgckFGCiAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lOwogICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gY2FuY2VsQW5pbWF0aW9uRnJhbWU7CiAgICBqUXVlcnkuZngudGltZXIgPSBmdW5jdGlvbiggdGltZXIgKSB7CiAgICAgIGlmICggdGltZXIoKSAmJiBqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICkgJiYgIWFuaW1hdGluZyApIHsKICAgICAgICBhbmltYXRpbmcgPSB0cnVlOwogICAgICAgIHJhZigpOwogICAgICB9CiAgICB9OwoKICAgIGpRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7CiAgICAgIGFuaW1hdGluZyA9IGZhbHNlOwogICAgfTsKICB9IGVsc2UgewogICAgLy8gcG9seWZpbGwKICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbiggY2FsbGJhY2ssIGVsZW1lbnQgKSB7CiAgICAgIHZhciBjdXJyVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpLAogICAgICAgIHRpbWVUb0NhbGwgPSBNYXRoLm1heCggMCwgMTYgLSAoIGN1cnJUaW1lIC0gbGFzdFRpbWUgKSApLAogICAgICAgIGlkID0gd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgewogICAgICAgICAgY2FsbGJhY2soIGN1cnJUaW1lICsgdGltZVRvQ2FsbCApOwogICAgICAgIH0sIHRpbWVUb0NhbGwgKTsKICAgICAgbGFzdFRpbWUgPSBjdXJyVGltZSArIHRpbWVUb0NhbGw7CiAgICAgIHJldHVybiBpZDsKICAgIH07CgogICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHsKICAgICAgY2xlYXJUaW1lb3V0KGlkKTsKICAgIH07CiAgICAgIAogIH0KCiAgfSggalF1ZXJ5ICkpOwoKCiAgZnVuY3Rpb24gcmVtb3ZlUXVvdGVzIChzdHJpbmcpIHsKICAgIGlmICh0eXBlb2Ygc3RyaW5nID09PSAnc3RyaW5nJyB8fCBzdHJpbmcgaW5zdGFuY2VvZiBTdHJpbmcpIHsKICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL15bXFwvJyJdK3woO1xzP30pK3xbXFwvJyJdKyQvZywgJycpOwogICAgfQoKICAgIHJldHVybiBzdHJpbmc7CiAgfQoKICB3aW5kb3cuRm91bmRhdGlvbiA9IHsKICAgIG5hbWUgOiAnRm91bmRhdGlvbicsCgogICAgdmVyc2lvbiA6ICc1LjAuMCcsCgogICAgbWVkaWFfcXVlcmllcyA6IHsKICAgICAgc21hbGwgOiBTKCcuZm91bmRhdGlvbi1tcS1zbWFsbCcpLmNzcygnZm9udC1mYW1pbHknKS5yZXBsYWNlKC9eW1wvXFwnIl0rfCg7XHM/fSkrfFtcL1xcJyJdKyQvZywgJycpLAogICAgICBtZWRpdW0gOiBTKCcuZm91bmRhdGlvbi1tcS1tZWRpdW0nKS5jc3MoJ2ZvbnQtZmFtaWx5JykucmVwbGFjZSgvXltcL1xcJyJdK3woO1xzP30pK3xbXC9cXCciXSskL2csICcnKSwKICAgICAgbGFyZ2UgOiBTKCcuZm91bmRhdGlvbi1tcS1sYXJnZScpLmNzcygnZm9udC1mYW1pbHknKS5yZXBsYWNlKC9eW1wvXFwnIl0rfCg7XHM/fSkrfFtcL1xcJyJdKyQvZywgJycpLAogICAgICB4bGFyZ2U6IFMoJy5mb3VuZGF0aW9uLW1xLXhsYXJnZScpLmNzcygnZm9udC1mYW1pbHknKS5yZXBsYWNlKC9eW1wvXFwnIl0rfCg7XHM/fSkrfFtcL1xcJyJdKyQvZywgJycpLAogICAgICB4eGxhcmdlOiBTKCcuZm91bmRhdGlvbi1tcS14eGxhcmdlJykuY3NzKCdmb250LWZhbWlseScpLnJlcGxhY2UoL15bXC9cXCciXSt8KDtccz99KSt8W1wvXFwnIl0rJC9nLCAnJykKICAgIH0sCgogICAgc3R5bGVzaGVldCA6ICQoJzxzdHlsZT48L3N0eWxlPicpLmFwcGVuZFRvKCdoZWFkJylbMF0uc2hlZXQsCgogICAgaW5pdCA6IGZ1bmN0aW9uIChzY29wZSwgbGlicmFyaWVzLCBtZXRob2QsIG9wdGlvbnMsIHJlc3BvbnNlKSB7CiAgICAgIHZhciBsaWJyYXJ5X2FyciwKICAgICAgICAgIGFyZ3MgPSBbc2NvcGUsIG1ldGhvZCwgb3B0aW9ucywgcmVzcG9uc2VdLAogICAgICAgICAgcmVzcG9uc2VzID0gW107CgogICAgICAvLyBjaGVjayBSVEwKICAgICAgdGhpcy5ydGwgPSAvcnRsL2kudGVzdChTKCdodG1sJykuYXR0cignZGlyJykpOwoKICAgICAgLy8gc2V0IGZvdW5kYXRpb24gZ2xvYmFsIHNjb3BlCiAgICAgIHRoaXMuc2NvcGUgPSBzY29wZSB8fCB0aGlzLnNjb3BlOwoKICAgICAgaWYgKGxpYnJhcmllcyAmJiB0eXBlb2YgbGlicmFyaWVzID09PSAnc3RyaW5nJyAmJiAhL3JlZmxvdy9pLnRlc3QobGlicmFyaWVzKSkgewogICAgICAgIGlmICh0aGlzLmxpYnMuaGFzT3duUHJvcGVydHkobGlicmFyaWVzKSkgewogICAgICAgICAgcmVzcG9uc2VzLnB1c2godGhpcy5pbml0X2xpYihsaWJyYXJpZXMsIGFyZ3MpKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZm9yICh2YXIgbGliIGluIHRoaXMubGlicykgewogICAgICAgICAgcmVzcG9uc2VzLnB1c2godGhpcy5pbml0X2xpYihsaWIsIGxpYnJhcmllcykpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuIHNjb3BlOwogICAgfSwKCiAgICBpbml0X2xpYiA6IGZ1bmN0aW9uIChsaWIsIGFyZ3MpIHsKICAgICAgaWYgKHRoaXMubGlicy5oYXNPd25Qcm9wZXJ0eShsaWIpKSB7CiAgICAgICAgdGhpcy5wYXRjaCh0aGlzLmxpYnNbbGliXSk7CgogICAgICAgIGlmIChhcmdzICYmIGFyZ3MuaGFzT3duUHJvcGVydHkobGliKSkgewogICAgICAgICAgcmV0dXJuIHRoaXMubGlic1tsaWJdLmluaXQuYXBwbHkodGhpcy5saWJzW2xpYl0sIFt0aGlzLnNjb3BlLCBhcmdzW2xpYl1dKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0aGlzLmxpYnNbbGliXS5pbml0LmFwcGx5KHRoaXMubGlic1tsaWJdLCBhcmdzKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHt9OwogICAgfSwKCiAgICBwYXRjaCA6IGZ1bmN0aW9uIChsaWIpIHsKICAgICAgbGliLnNjb3BlID0gdGhpcy5zY29wZTsKICAgICAgbGliWydkYXRhX29wdGlvbnMnXSA9IHRoaXMubGliX21ldGhvZHMuZGF0YV9vcHRpb25zOwogICAgICBsaWJbJ2JpbmRpbmdzJ10gPSB0aGlzLmxpYl9tZXRob2RzLmJpbmRpbmdzOwogICAgICBsaWJbJ1MnXSA9IFM7CiAgICAgIGxpYi5ydGwgPSB0aGlzLnJ0bDsKICAgIH0sCgogICAgaW5oZXJpdCA6IGZ1bmN0aW9uIChzY29wZSwgbWV0aG9kcykgewogICAgICB2YXIgbWV0aG9kc19hcnIgPSBtZXRob2RzLnNwbGl0KCcgJyk7CgogICAgICBmb3IgKHZhciBpID0gbWV0aG9kc19hcnIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICBpZiAodGhpcy5saWJfbWV0aG9kcy5oYXNPd25Qcm9wZXJ0eShtZXRob2RzX2FycltpXSkpIHsKICAgICAgICAgIHRoaXMubGlic1tzY29wZS5uYW1lXVttZXRob2RzX2FycltpXV0gPSB0aGlzLmxpYl9tZXRob2RzW21ldGhvZHNfYXJyW2ldXTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCgogICAgcmFuZG9tX3N0ciA6IGZ1bmN0aW9uIChsZW5ndGgpIHsKICAgICAgdmFyIGNoYXJzID0gJzAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Jy5zcGxpdCgnJyk7CgogICAgICBpZiAoIWxlbmd0aCkgewogICAgICAgIGxlbmd0aCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJzLmxlbmd0aCk7CiAgICAgIH0KCiAgICAgIHZhciBzdHIgPSAnJzsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIHN0ciArPSBjaGFyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFycy5sZW5ndGgpXTsKICAgICAgfQogICAgICByZXR1cm4gc3RyOwogICAgfSwKCiAgICBsaWJzIDoge30sCgogICAgLy8gbWV0aG9kcyB0aGF0IGNhbiBiZSBpbmhlcml0ZWQgaW4gbGlicmFyaWVzCiAgICBsaWJfbWV0aG9kcyA6IHsKICAgICAgdGhyb3R0bGUgOiBmdW5jdGlvbihmdW4sIGRlbGF5KSB7CiAgICAgICAgdmFyIHRpbWVyID0gbnVsbDsKCiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBjb250ZXh0ID0gdGhpcywgYXJncyA9IGFyZ3VtZW50czsKCiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpOwogICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgZnVuLmFwcGx5KGNvbnRleHQsIGFyZ3MpOwogICAgICAgICAgfSwgZGVsYXkpOwogICAgICAgIH07CiAgICAgIH0sCgogICAgICAvLyBwYXJzZXMgZGF0YS1vcHRpb25zIGF0dHJpYnV0ZQogICAgICBkYXRhX29wdGlvbnMgOiBmdW5jdGlvbiAoZWwpIHsKICAgICAgICB2YXIgb3B0cyA9IHt9LCBpaSwgcCwgb3B0c19hcnIsIG9wdHNfbGVuLAogICAgICAgICAgICBkYXRhX29wdGlvbnMgPSBlbC5kYXRhKCdvcHRpb25zJyk7CgogICAgICAgIGlmICh0eXBlb2YgZGF0YV9vcHRpb25zID09PSAnb2JqZWN0JykgewogICAgICAgICAgcmV0dXJuIGRhdGFfb3B0aW9uczsKICAgICAgICB9CgogICAgICAgIG9wdHNfYXJyID0gKGRhdGFfb3B0aW9ucyB8fCAnOicpLnNwbGl0KCc7JyksCiAgICAgICAgb3B0c19sZW4gPSBvcHRzX2Fyci5sZW5ndGg7CgogICAgICAgIGZ1bmN0aW9uIGlzTnVtYmVyIChvKSB7CiAgICAgICAgICByZXR1cm4gISBpc05hTiAoby0wKSAmJiBvICE9PSBudWxsICYmIG8gIT09ICIiICYmIG8gIT09IGZhbHNlICYmIG8gIT09IHRydWU7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiB0cmltKHN0cikgewogICAgICAgICAgaWYgKHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnKSByZXR1cm4gJC50cmltKHN0cik7CiAgICAgICAgICByZXR1cm4gc3RyOwogICAgICAgIH0KCiAgICAgICAgLy8gcGFyc2Ugb3B0aW9ucwogICAgICAgIGZvciAoaWkgPSBvcHRzX2xlbiAtIDE7IGlpID49IDA7IGlpLS0pIHsKICAgICAgICAgIHAgPSBvcHRzX2FycltpaV0uc3BsaXQoJzonKTsKCiAgICAgICAgICBpZiAoL3RydWUvaS50ZXN0KHBbMV0pKSBwWzFdID0gdHJ1ZTsKICAgICAgICAgIGlmICgvZmFsc2UvaS50ZXN0KHBbMV0pKSBwWzFdID0gZmFsc2U7CiAgICAgICAgICBpZiAoaXNOdW1iZXIocFsxXSkpIHBbMV0gPSBwYXJzZUludChwWzFdLCAxMCk7CgogICAgICAgICAgaWYgKHAubGVuZ3RoID09PSAyICYmIHBbMF0ubGVuZ3RoID4gMCkgewogICAgICAgICAgICBvcHRzW3RyaW0ocFswXSldID0gdHJpbShwWzFdKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBvcHRzOwogICAgICB9LAoKICAgICAgZGVsYXkgOiBmdW5jdGlvbiAoZnVuLCBkZWxheSkgewogICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgZGVsYXkpOwogICAgICB9LAoKICAgICAgLy8gdGVzdCBmb3IgZW1wdHkgb2JqZWN0IG9yIGFycmF5CiAgICAgIGVtcHR5IDogZnVuY3Rpb24gKG9iaikgewogICAgICAgIGlmIChvYmoubGVuZ3RoICYmIG9iai5sZW5ndGggPiAwKSAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKG9iai5sZW5ndGggJiYgb2JqLmxlbmd0aCA9PT0gMCkgIHJldHVybiB0cnVlOwoKICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CiAgICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9LAoKICAgICAgcmVnaXN0ZXJfbWVkaWEgOiBmdW5jdGlvbihtZWRpYSwgbWVkaWFfY2xhc3MpIHsKICAgICAgICBpZihGb3VuZGF0aW9uLm1lZGlhX3F1ZXJpZXNbbWVkaWFdID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICQoJ2hlYWQnKS5hcHBlbmQoJzxtZXRhIGNsYXNzPSInICsgbWVkaWFfY2xhc3MgKyAnIj4nKTsKICAgICAgICAgIEZvdW5kYXRpb24ubWVkaWFfcXVlcmllc1ttZWRpYV0gPSByZW1vdmVRdW90ZXMoJCgnLicgKyBtZWRpYV9jbGFzcykuY3NzKCdmb250LWZhbWlseScpKTsKICAgICAgICB9CiAgICAgIH0sCgogICAgICBhZGRDdXN0b21SdWxlIDogZnVuY3Rpb24ocnVsZSwgbWVkaWEpIHsKICAgICAgICBpZihtZWRpYSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICBGb3VuZGF0aW9uLnN0eWxlc2hlZXQuaW5zZXJ0UnVsZShydWxlLCBGb3VuZGF0aW9uLnN0eWxlc2hlZXQuY3NzUnVsZXMubGVuZ3RoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIHF1ZXJ5ID0gRm91bmRhdGlvbi5tZWRpYV9xdWVyaWVzW21lZGlhXTsKICAgICAgICAgIGlmKHF1ZXJ5ICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgRm91bmRhdGlvbi5zdHlsZXNoZWV0Lmluc2VydFJ1bGUoJ0BtZWRpYSAnICsgCiAgICAgICAgICAgICAgRm91bmRhdGlvbi5tZWRpYV9xdWVyaWVzW21lZGlhXSArICd7ICcgKyBydWxlICsgJyB9Jyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAoKICAgICAgbG9hZGVkIDogZnVuY3Rpb24gKGltYWdlLCBjYWxsYmFjaykgewogICAgICAgIGZ1bmN0aW9uIGxvYWRlZCAoKSB7CiAgICAgICAgICBjYWxsYmFjayhpbWFnZVswXSk7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBiaW5kTG9hZCAoKSB7CiAgICAgICAgICB0aGlzLm9uZSgnbG9hZCcsIGxvYWRlZCk7CgogICAgICAgICAgaWYgKC9NU0lFIChcZCtcLlxkKyk7Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSB7CiAgICAgICAgICAgIHZhciBzcmMgPSB0aGlzLmF0dHIoICdzcmMnICksCiAgICAgICAgICAgICAgICBwYXJhbSA9IHNyYy5tYXRjaCggL1w/LyApID8gJyYnIDogJz8nOwoKICAgICAgICAgICAgcGFyYW0gKz0gJ3JhbmRvbT0nICsgKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKICAgICAgICAgICAgdGhpcy5hdHRyKCdzcmMnLCBzcmMgKyBwYXJhbSk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIWltYWdlLmF0dHIoJ3NyYycpKSB7CiAgICAgICAgICBsb2FkZWQoKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmIChpbWFnZVswXS5jb21wbGV0ZSB8fCBpbWFnZVswXS5yZWFkeVN0YXRlID09PSA0KSB7CiAgICAgICAgICBsb2FkZWQoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYmluZExvYWQuY2FsbChpbWFnZSk7CiAgICAgICAgfQogICAgICB9LAoKICAgICAgYmluZGluZ3MgOiBmdW5jdGlvbiAobWV0aG9kLCBvcHRpb25zKSB7CiAgICAgICAgdmFyIHNlbGYgPSB0aGlzLAogICAgICAgICAgICBzaG91bGRfYmluZF9ldmVudHMgPSAhUyh0aGlzKS5kYXRhKHRoaXMubmFtZSArICctaW5pdCcpOwoKICAgICAgICBpZiAodHlwZW9mIG1ldGhvZCA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgIHJldHVybiB0aGlzW21ldGhvZF0uY2FsbCh0aGlzKTsKICAgICAgICB9CgogICAgICAgIGlmIChTKHRoaXMuc2NvcGUpLmlzKCdbZGF0YS0nICsgdGhpcy5uYW1lICsnXScpKSB7CiAgICAgICAgICBTKHRoaXMuc2NvcGUpLmRhdGEodGhpcy5uYW1lICsgJy1pbml0JywgJC5leHRlbmQoe30sIHRoaXMuc2V0dGluZ3MsIChvcHRpb25zIHx8IG1ldGhvZCksIHRoaXMuZGF0YV9vcHRpb25zKFModGhpcy5zY29wZSkpKSk7CgogICAgICAgICAgaWYgKHNob3VsZF9iaW5kX2V2ZW50cykgewogICAgICAgICAgICB0aGlzLmV2ZW50cyh0aGlzLnNjb3BlKTsKICAgICAgICAgIH0KCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIFMoJ1tkYXRhLScgKyB0aGlzLm5hbWUgKyAnXScsIHRoaXMuc2NvcGUpLmVhY2goZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgc2hvdWxkX2JpbmRfZXZlbnRzID0gIVModGhpcykuZGF0YShzZWxmLm5hbWUgKyAnLWluaXQnKTsKCiAgICAgICAgICAgIFModGhpcykuZGF0YShzZWxmLm5hbWUgKyAnLWluaXQnLCAkLmV4dGVuZCh7fSwgc2VsZi5zZXR0aW5ncywgKG9wdGlvbnMgfHwgbWV0aG9kKSwgc2VsZi5kYXRhX29wdGlvbnMoUyh0aGlzKSkpKTsKCiAgICAgICAgICAgIGlmIChzaG91bGRfYmluZF9ldmVudHMpIHsKICAgICAgICAgICAgICBzZWxmLmV2ZW50cyh0aGlzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfTsKCiAgJC5mbi5mb3VuZGF0aW9uID0gZnVuY3Rpb24gKCkgewogICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOwoKICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgewogICAgICBGb3VuZGF0aW9uLmluaXQuYXBwbHkoRm91bmRhdGlvbiwgW3RoaXNdLmNvbmNhdChhcmdzKSk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgfTsKCn0oalF1ZXJ5LCB0aGlzLCB0aGlzLmRvY3VtZW50KSk7Cgo7KGZ1bmN0aW9uICgkLCB3aW5kb3csIGRvY3VtZW50LCB1bmRlZmluZWQpIHsKICAndXNlIHN0cmljdCc7CgogIEZvdW5kYXRpb24ubGlicy5hYmlkZSA9IHsKICAgIG5hbWUgOiAnYWJpZGUnLAoKICAgIHZlcnNpb24gOiAnNS4wLjAnLAoKICAgIHNldHRpbmdzIDogewogICAgICBmb2N1c19vbl9pbnZhbGlkIDogdHJ1ZSwKICAgICAgdGltZW91dCA6IDEwMDAsCiAgICAgIHBhdHRlcm5zIDogewogICAgICAgIGFscGhhOiAvW2EtekEtWl0rLywKICAgICAgICBhbHBoYV9udW1lcmljIDogL1thLXpBLVowLTldKy8sCiAgICAgICAgaW50ZWdlcjogLy0/XGQrLywKICAgICAgICBudW1iZXI6IC8tPyg/OlxkK3xcZHsxLDN9KD86LFxkezN9KSspPyg/OlwuXGQrKT8vLAoKICAgICAgICAvLyBnZW5lcmljIHBhc3N3b3JkOiB1cHBlci1jYXNlLCBsb3dlci1jYXNlLCBudW1iZXIvc3BlY2lhbCBjaGFyYWN0ZXIsIGFuZCBtaW4gOCBjaGFyYWN0ZXJzCiAgICAgICAgcGFzc3dvcmQgOiAvKD89Xi57OCx9JCkoKD89LipcZCl8KD89LipcVyspKSg/IVsuXG5dKSg/PS4qW0EtWl0pKD89LipbYS16XSkuKiQvLAoKICAgICAgICAvLyBhbWV4LCB2aXNhLCBkaW5lcnMKICAgICAgICBjYXJkIDogL14oPzo0WzAtOV17MTJ9KD86WzAtOV17M30pP3w1WzEtNV1bMC05XXsxNH18Nig/OjAxMXw1WzAtOV1bMC05XSlbMC05XXsxMn18M1s0N11bMC05XXsxM318Myg/OjBbMC01XXxbNjhdWzAtOV0pWzAtOV17MTF9fCg/OjIxMzF8MTgwMHwzNVxkezN9KVxkezExfSkkLywKICAgICAgICBjdnYgOiAvXihbMC05XSl7Myw0fSQvLAoKICAgICAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9zdGF0ZXMtb2YtdGhlLXR5cGUtYXR0cmlidXRlLmh0bWwjdmFsaWQtZS1tYWlsLWFkZHJlc3MKICAgICAgICBlbWFpbCA6IC9eW2EtekEtWjAtOS4hIyQlJicqK1wvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLywKCiAgICAgICAgdXJsOiAvKGh0dHBzP3xmdHB8ZmlsZXxzc2gpOlwvXC8oKCgoW2EtekEtWl18XGR8LXxcLnxffH58W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pfCglW1xkYS1mXXsyfSl8WyFcJCYnXChcKVwqXCssOz1dfDopKkApPygoKFxkfFsxLTldXGR8MVxkXGR8MlswLTRdXGR8MjVbMC01XSlcLihcZHxbMS05XVxkfDFcZFxkfDJbMC00XVxkfDI1WzAtNV0pXC4oXGR8WzEtOV1cZHwxXGRcZHwyWzAtNF1cZHwyNVswLTVdKVwuKFxkfFsxLTldXGR8MVxkXGR8MlswLTRdXGR8MjVbMC01XSkpfCgoKFthLXpBLVpdfFxkfFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKXwoKFthLXpBLVpdfFxkfFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKShbYS16QS1aXXxcZHwtfFwufF98fnxbXHUwMEEwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkVGXSkqKFthLXpBLVpdfFxkfFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKSkpXC4pKygoW2EtekEtWl18W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pfCgoW2EtekEtWl18W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pKFthLXpBLVpdfFxkfC18XC58X3x+fFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKSooW2EtekEtWl18W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pKSlcLj8pKDpcZCopPykoXC8oKChbYS16QS1aXXxcZHwtfFwufF98fnxbXHUwMEEwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkVGXSl8KCVbXGRhLWZdezJ9KXxbIVwkJidcKFwpXCpcKyw7PV18OnxAKSsoXC8oKFthLXpBLVpdfFxkfC18XC58X3x+fFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKXwoJVtcZGEtZl17Mn0pfFshXCQmJ1woXClcKlwrLDs9XXw6fEApKikqKT8pPyhcPygoKFthLXpBLVpdfFxkfC18XC58X3x+fFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKXwoJVtcZGEtZl17Mn0pfFshXCQmJ1woXClcKlwrLDs9XXw6fEApfFtcdUUwMDAtXHVGOEZGXXxcL3xcPykqKT8oXCMoKChbYS16QS1aXXxcZHwtfFwufF98fnxbXHUwMEEwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkVGXSl8KCVbXGRhLWZdezJ9KXxbIVwkJidcKFwpXCpcKyw7PV18OnxAKXxcL3xcPykqKT8vLAogICAgICAgIC8vIGFiYy5kZQogICAgICAgIGRvbWFpbjogL14oW2EtekEtWjAtOV0oW2EtekEtWjAtOVwtXXswLDYxfVthLXpBLVowLTldKT9cLikrW2EtekEtWl17Miw2fSQvLAoKICAgICAgICBkYXRldGltZTogLyhbMC0yXVswLTldezN9KVwtKFswLTFdWzAtOV0pXC0oWzAtM11bMC05XSlUKFswLTVdWzAtOV0pXDooWzAtNV1bMC05XSlcOihbMC01XVswLTldKShafChbXC1cK10oWzAtMV1bMC05XSlcOjAwKSkvLAogICAgICAgIC8vIFlZWVktTU0tREQKICAgICAgICBkYXRlOiAvKD86MTl8MjApWzAtOV17Mn0tKD86KD86MFsxLTldfDFbMC0yXSktKD86MFsxLTldfDFbMC05XXwyWzAtOV0pfCg/Oig/ITAyKSg/OjBbMS05XXwxWzAtMl0pLSg/OjMwKSl8KD86KD86MFsxMzU3OF18MVswMl0pLTMxKSkvLAogICAgICAgIC8vIEhIOk1NOlNTCiAgICAgICAgdGltZSA6IC8oMFswLTldfDFbMC05XXwyWzAtM10pKDpbMC01XVswLTldKXsyfS8sCiAgICAgICAgZGF0ZUlTTzogL1xkezR9W1wvXC1dXGR7MSwyfVtcL1wtXVxkezEsMn0vLAogICAgICAgIC8vIE1NL0REL1lZWVkKICAgICAgICBtb250aF9kYXlfeWVhciA6IC8oMFsxLTldfDFbMDEyXSlbLSBcLy5dKDBbMS05XXxbMTJdWzAtOV18M1swMV0pWy0gXC8uXSgxOXwyMClcZFxkLywKCiAgICAgICAgLy8gI0ZGRiBvciAjRkZGRkZGCiAgICAgICAgY29sb3I6IC9eIz8oW2EtZkEtRjAtOV17Nn18W2EtZkEtRjAtOV17M30pJC8KICAgICAgfQogICAgfSwKCiAgICB0aW1lciA6IG51bGwsCgogICAgaW5pdCA6IGZ1bmN0aW9uIChzY29wZSwgbWV0aG9kLCBvcHRpb25zKSB7CiAgICAgIHRoaXMuYmluZGluZ3MobWV0aG9kLCBvcHRpb25zKTsKICAgIH0sCgogICAgZXZlbnRzIDogZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgIHZhciBzZWxmID0gdGhpcywKICAgICAgICAgIGZvcm0gPSAkKHNjb3BlKS5hdHRyKCdub3ZhbGlkYXRlJywgJ25vdmFsaWRhdGUnKSwKICAgICAgICAgIHNldHRpbmdzID0gZm9ybS5kYXRhKCdhYmlkZS1pbml0Jyk7CgogICAgICBmb3JtCiAgICAgICAgLm9mZignLmFiaWRlJykKICAgICAgICAub24oJ3N1Ym1pdC5mbmR0bi5hYmlkZSB2YWxpZGF0ZS5mbmR0bi5hYmlkZScsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICB2YXIgaXNfYWpheCA9IC9hamF4L2kudGVzdCgkKHRoaXMpLmF0dHIoJ2RhdGEtYWJpZGUnKSk7CiAgICAgICAgICByZXR1cm4gc2VsZi52YWxpZGF0ZSgkKHRoaXMpLmZpbmQoJ2lucHV0LCB0ZXh0YXJlYSwgc2VsZWN0JykuZ2V0KCksIGUsIGlzX2FqYXgpOwogICAgICAgIH0pCiAgICAgICAgLmZpbmQoJ2lucHV0LCB0ZXh0YXJlYSwgc2VsZWN0JykKICAgICAgICAgIC5vZmYoJy5hYmlkZScpCiAgICAgICAgICAub24oJ2JsdXIuZm5kdG4uYWJpZGUgY2hhbmdlLmZuZHRuLmFiaWRlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgc2VsZi52YWxpZGF0ZShbdGhpc10sIGUpOwogICAgICAgICAgfSkKICAgICAgICAgIC5vbigna2V5ZG93bi5mbmR0bi5hYmlkZScsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9ICQodGhpcykuY2xvc2VzdCgnZm9ybScpLmRhdGEoJ2FiaWRlLWluaXQnKTsKICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHNlbGYudGltZXIpOwogICAgICAgICAgICBzZWxmLnRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgc2VsZi52YWxpZGF0ZShbdGhpc10sIGUpOwogICAgICAgICAgICB9LmJpbmQodGhpcyksIHNldHRpbmdzLnRpbWVvdXQpOwogICAgICAgICAgfSk7CiAgICB9LAoKICAgIHZhbGlkYXRlIDogZnVuY3Rpb24gKGVscywgZSwgaXNfYWpheCkgewogICAgICB2YXIgdmFsaWRhdGlvbnMgPSB0aGlzLnBhcnNlX3BhdHRlcm5zKGVscyksCiAgICAgICAgICB2YWxpZGF0aW9uX2NvdW50ID0gdmFsaWRhdGlvbnMubGVuZ3RoLAogICAgICAgICAgZm9ybSA9ICQoZWxzWzBdKS5jbG9zZXN0KCdmb3JtJyksCiAgICAgICAgICBzdWJtaXRfZXZlbnQgPSAvc3VibWl0Ly50ZXN0KGUudHlwZSk7CgogICAgICBmb3IgKHZhciBpPTA7IGkgPCB2YWxpZGF0aW9uX2NvdW50OyBpKyspIHsKICAgICAgICBpZiAoIXZhbGlkYXRpb25zW2ldICYmIChzdWJtaXRfZXZlbnQgfHwgaXNfYWpheCkpIHsKICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmZvY3VzX29uX2ludmFsaWQpIGVsc1tpXS5mb2N1cygpOwogICAgICAgICAgZm9ybS50cmlnZ2VyKCdpbnZhbGlkJyk7CiAgICAgICAgICAkKGVsc1tpXSkuY2xvc2VzdCgnZm9ybScpLmF0dHIoJ2RhdGEtaW52YWxpZCcsICcnKTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGlmIChzdWJtaXRfZXZlbnQgfHwgaXNfYWpheCkgewogICAgICAgIGZvcm0udHJpZ2dlcigndmFsaWQnKTsKICAgICAgfQoKICAgICAgZm9ybS5yZW1vdmVBdHRyKCdkYXRhLWludmFsaWQnKTsKCiAgICAgIGlmIChpc19hamF4KSByZXR1cm4gZmFsc2U7CgogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0sCgogICAgcGFyc2VfcGF0dGVybnMgOiBmdW5jdGlvbiAoZWxzKSB7CiAgICAgIHZhciBjb3VudCA9IGVscy5sZW5ndGgsCiAgICAgICAgICBlbF9wYXR0ZXJucyA9IFtdOwoKICAgICAgZm9yICh2YXIgaSA9IGNvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICBlbF9wYXR0ZXJucy5wdXNoKHRoaXMucGF0dGVybihlbHNbaV0pKTsKICAgICAgfQoKICAgICAgcmV0dXJuIHRoaXMuY2hlY2tfdmFsaWRhdGlvbl9hbmRfYXBwbHlfc3R5bGVzKGVsX3BhdHRlcm5zKTsKICAgIH0sCgogICAgcGF0dGVybiA6IGZ1bmN0aW9uIChlbCkgewogICAgICB2YXIgdHlwZSA9IGVsLmdldEF0dHJpYnV0ZSgndHlwZScpLAogICAgICAgICAgcmVxdWlyZWQgPSB0eXBlb2YgZWwuZ2V0QXR0cmlidXRlKCdyZXF1aXJlZCcpID09PSAnc3RyaW5nJzsKCiAgICAgIGlmICh0aGlzLnNldHRpbmdzLnBhdHRlcm5zLmhhc093blByb3BlcnR5KHR5cGUpKSB7CiAgICAgICAgcmV0dXJuIFtlbCwgdGhpcy5zZXR0aW5ncy5wYXR0ZXJuc1t0eXBlXSwgcmVxdWlyZWRdOwogICAgICB9CgogICAgICB2YXIgcGF0dGVybiA9IGVsLmdldEF0dHJpYnV0ZSgncGF0dGVybicpIHx8ICcnOwoKICAgICAgaWYgKHRoaXMuc2V0dGluZ3MucGF0dGVybnMuaGFzT3duUHJvcGVydHkocGF0dGVybikgJiYgcGF0dGVybi5sZW5ndGggPiAwKSB7CiAgICAgICAgcmV0dXJuIFtlbCwgdGhpcy5zZXR0aW5ncy5wYXR0ZXJuc1twYXR0ZXJuXSwgcmVxdWlyZWRdOwogICAgICB9IGVsc2UgaWYgKHBhdHRlcm4ubGVuZ3RoID4gMCkgewogICAgICAgIHJldHVybiBbZWwsIG5ldyBSZWdFeHAocGF0dGVybiksIHJlcXVpcmVkXTsKICAgICAgfQoKICAgICAgcGF0dGVybiA9IC8uKi87CgogICAgICByZXR1cm4gW2VsLCBwYXR0ZXJuLCByZXF1aXJlZF07CiAgICB9LAoKICAgIGNoZWNrX3ZhbGlkYXRpb25fYW5kX2FwcGx5X3N0eWxlcyA6IGZ1bmN0aW9uIChlbF9wYXR0ZXJucykgewogICAgICB2YXIgY291bnQgPSBlbF9wYXR0ZXJucy5sZW5ndGgsCiAgICAgICAgICB2YWxpZGF0aW9ucyA9IFtdOwoKICAgICAgZm9yICh2YXIgaSA9IGNvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICB2YXIgZWwgPSBlbF9wYXR0ZXJuc1tpXVswXSwKICAgICAgICAgICAgcmVxdWlyZWQgPSBlbF9wYXR0ZXJuc1tpXVsyXSwKICAgICAgICAgICAgdmFsdWUgPSBlbC52YWx1ZSwKICAgICAgICAgICAgaXNfZXF1YWwgPSBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZXF1YWx0bycpLAogICAgICAgICAgICBpc19yYWRpbyA9IGVsLnR5cGUgPT09ICJyYWRpbyIsCiAgICAgICAgICAgIHZhbGlkX2xlbmd0aCA9IChyZXF1aXJlZCkgPyAoZWwudmFsdWUubGVuZ3RoID4gMCkgOiB0cnVlOwoKICAgICAgICBpZiAoaXNfcmFkaW8gJiYgcmVxdWlyZWQpIHsKICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2godGhpcy52YWxpZF9yYWRpbyhlbCwgcmVxdWlyZWQpKTsKICAgICAgICB9IGVsc2UgaWYgKGlzX2VxdWFsICYmIHJlcXVpcmVkKSB7CiAgICAgICAgICB2YWxpZGF0aW9ucy5wdXNoKHRoaXMudmFsaWRfZXF1YWwoZWwsIHJlcXVpcmVkKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChlbF9wYXR0ZXJuc1tpXVsxXS50ZXN0KHZhbHVlKSAmJiB2YWxpZF9sZW5ndGggfHwKICAgICAgICAgICAgIXJlcXVpcmVkICYmIGVsLnZhbHVlLmxlbmd0aCA8IDEpIHsKICAgICAgICAgICAgJChlbCkucmVtb3ZlQXR0cignZGF0YS1pbnZhbGlkJykucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ2Vycm9yJyk7CiAgICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2godHJ1ZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkKGVsKS5hdHRyKCdkYXRhLWludmFsaWQnLCAnJykucGFyZW50KCkuYWRkQ2xhc3MoJ2Vycm9yJyk7CiAgICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2goZmFsc2UpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuIHZhbGlkYXRpb25zOwogICAgfSwKCiAgICB2YWxpZF9yYWRpbyA6IGZ1bmN0aW9uIChlbCwgcmVxdWlyZWQpIHsKICAgICAgdmFyIG5hbWUgPSBlbC5nZXRBdHRyaWJ1dGUoJ25hbWUnKSwKICAgICAgICAgIGdyb3VwID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUobmFtZSksCiAgICAgICAgICBjb3VudCA9IGdyb3VwLmxlbmd0aCwKICAgICAgICAgIHZhbGlkID0gZmFsc2U7CgogICAgICBmb3IgKHZhciBpPTA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgaWYgKGdyb3VwW2ldLmNoZWNrZWQpIHZhbGlkID0gdHJ1ZTsKICAgICAgfQoKICAgICAgZm9yICh2YXIgaT0wOyBpIDwgY291bnQ7IGkrKykgewogICAgICAgIGlmICh2YWxpZCkgewogICAgICAgICAgJChncm91cFtpXSkucmVtb3ZlQXR0cignZGF0YS1pbnZhbGlkJykucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ2Vycm9yJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICQoZ3JvdXBbaV0pLmF0dHIoJ2RhdGEtaW52YWxpZCcsICcnKS5wYXJlbnQoKS5hZGRDbGFzcygnZXJyb3InKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiB2YWxpZDsKICAgIH0sCgogICAgdmFsaWRfZXF1YWw6IGZ1bmN0aW9uKGVsLCByZXF1aXJlZCkgewogICAgICB2YXIgZnJvbSAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZXF1YWx0bycpKS52YWx1ZSwKICAgICAgICAgIHRvICAgID0gZWwudmFsdWUsCiAgICAgICAgICB2YWxpZCA9IChmcm9tID09PSB0byk7CgogICAgICBpZiAodmFsaWQpIHsKICAgICAgICAkKGVsKS5yZW1vdmVBdHRyKCdkYXRhLWludmFsaWQnKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnZXJyb3InKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAkKGVsKS5hdHRyKCdkYXRhLWludmFsaWQnLCAnJykucGFyZW50KCkuYWRkQ2xhc3MoJ2Vycm9yJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiB2YWxpZDsKICAgIH0KICB9Owp9KGpRdWVyeSwgdGhpcywgdGhpcy5kb2N1bWVudCkpOwo7KGZ1bmN0aW9uICgkLCB3aW5kb3csIGRvY3VtZW50LCB1bmRlZmluZWQpIHsKICAndXNlIHN0cmljdCc7CgogIEZvdW5kYXRpb24ubGlicy5hY2NvcmRpb24gPSB7CiAgICBuYW1lIDogJ2FjY29yZGlvbicsCgogICAgdmVyc2lvbiA6ICc1LjAuMScsCgogICAgc2V0dGluZ3MgOiB7CiAgICAgIGFjdGl2ZV9jbGFzczogJ2FjdGl2ZScsCiAgICAgIHRvZ2dsZWFibGU6IHRydWUKICAgIH0sCgogICAgaW5pdCA6IGZ1bmN0aW9uIChzY29wZSwgbWV0aG9kLCBvcHRpb25zKSB7CiAgICAgIHRoaXMuYmluZGluZ3MobWV0aG9kLCBvcHRpb25zKTsKICAgIH0sCgogICAgZXZlbnRzIDogZnVuY3Rpb24gKCkgewogICAgICAkKHRoaXMuc2NvcGUpLm9mZignLmFjY29yZGlvbicpLm9uKCdjbGljay5mbmR0bi5hY2NvcmRpb24nLCAnW2RhdGEtYWNjb3JkaW9uXSA+IGRkID4gYScsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgdmFyIGFjY29yZGlvbiA9ICQodGhpcykucGFyZW50KCksCiAgICAgICAgICAgIHRhcmdldCA9ICQoJyMnICsgdGhpcy5ocmVmLnNwbGl0KCcjJylbMV0pLAogICAgICAgICAgICBzaWJsaW5ncyA9ICQoJz4gZGQgPiAuY29udGVudCcsIHRhcmdldC5jbG9zZXN0KCdbZGF0YS1hY2NvcmRpb25dJykpLAogICAgICAgICAgICBzZXR0aW5ncyA9IGFjY29yZGlvbi5wYXJlbnQoKS5kYXRhKCdhY2NvcmRpb24taW5pdCcpLAogICAgICAgICAgICBhY3RpdmUgPSAkKCc+IGRkID4gLmNvbnRlbnQuJyArIHNldHRpbmdzLmFjdGl2ZV9jbGFzcywgYWNjb3JkaW9uLnBhcmVudCgpKTsKCiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgICBpZiAoYWN0aXZlWzBdID09IHRhcmdldFswXSAmJiBzZXR0aW5ncy50b2dnbGVhYmxlKSB7CiAgICAgICAgICByZXR1cm4gdGFyZ2V0LnRvZ2dsZUNsYXNzKHNldHRpbmdzLmFjdGl2ZV9jbGFzcyk7CiAgICAgICAgfQoKICAgICAgICBzaWJsaW5ncy5yZW1vdmVDbGFzcyhzZXR0aW5ncy5hY3RpdmVfY2xhc3MpOwogICAgICAgIHRhcmdldC5hZGRDbGFzcyhzZXR0aW5ncy5hY3RpdmVfY2xhc3MpOwogICAgICB9KTsKICAgIH0sCgogICAgb2ZmIDogZnVuY3Rpb24gKCkge30sCgogICAgcmVmbG93IDogZnVuY3Rpb24gKCkge30KICB9Owp9KGpRdWVyeSwgdGhpcywgdGhpcy5kb2N1bWVudCkpOwoKOyhmdW5jdGlvbiAoJCwgd2luZG93LCBkb2N1bWVudCwgdW5kZWZpbmVkKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICBGb3VuZGF0aW9uLmxpYnMuYWxlcnQgPSB7CiAgICBuYW1lIDogJ2FsZXJ0JywKCiAgICB2ZXJzaW9uIDogJzUuMC4wJywKCiAgICBzZXR0aW5ncyA6IHsKICAgICAgYW5pbWF0aW9uOiAnZmFkZU91dCcsCiAgICAgIHNwZWVkOiAzMDAsIC8vIGZhZGUgb3V0IHNwZWVkCiAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbiAoKXt9CiAgICB9LAoKICAgIGluaXQgOiBmdW5jdGlvbiAoc2NvcGUsIG1ldGhvZCwgb3B0aW9ucykgewogICAgICB0aGlzLmJpbmRpbmdzKG1ldGhvZCwgb3B0aW9ucyk7CiAgICB9LAoKICAgIGV2ZW50cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgJCh0aGlzLnNjb3BlKS5vZmYoJy5hbGVydCcpLm9uKCdjbGljay5mbmR0bi5hbGVydCcsICdbZGF0YS1hbGVydF0gYS5jbG9zZScsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICB2YXIgYWxlcnRCb3ggPSAkKHRoaXMpLmNsb3Nlc3QoIltkYXRhLWFsZXJ0XSIpLAogICAgICAgICAgICAgIHNldHRpbmdzID0gYWxlcnRCb3guZGF0YSgnYWxlcnQtaW5pdCcpOwoKICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgYWxlcnRCb3hbc2V0dGluZ3MuYW5pbWF0aW9uXShzZXR0aW5ncy5zcGVlZCwgZnVuY3Rpb24gKCkgewogICAgICAgICAgJCh0aGlzKS50cmlnZ2VyKCdjbG9zZWQnKS5yZW1vdmUoKTsKICAgICAgICAgIHNldHRpbmdzLmNhbGxiYWNrKCk7CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfSwKCiAgICByZWZsb3cgOiBmdW5jdGlvbiAoKSB7fQogIH07Cn0oalF1ZXJ5LCB0aGlzLCB0aGlzLmRvY3VtZW50KSk7CjsoZnVuY3Rpb24gKCQsIHdpbmRvdywgZG9jdW1lbnQsIHVuZGVmaW5lZCkgewogICd1c2Ugc3RyaWN0JzsKCiAgRm91bmRhdGlvbi5saWJzLmNsZWFyaW5nID0gewogICAgbmFtZSA6ICdjbGVhcmluZycsCgogICAgdmVyc2lvbjogJzUuMC4wJywKCiAgICBzZXR0aW5ncyA6IHsKICAgICAgdGVtcGxhdGVzIDogewogICAgICAgIHZpZXdpbmcgOiAnPGEgaHJlZj0iIyIgY2xhc3M9ImNsZWFyaW5nLWNsb3NlIj4mdGltZXM7PC9hPicgKwogICAgICAgICAgJzxkaXYgY2xhc3M9InZpc2libGUtaW1nIiBzdHlsZT0iZGlzcGxheTogbm9uZSI+PGltZyBzcmM9Ii8vOjAiPicgKwogICAgICAgICAgJzxwIGNsYXNzPSJjbGVhcmluZy1jYXB0aW9uIj48L3A+PGEgaHJlZj0iIyIgY2xhc3M9ImNsZWFyaW5nLW1haW4tcHJldiI+PHNwYW4+PC9zcGFuPjwvYT4nICsKICAgICAgICAgICc8YSBocmVmPSIjIiBjbGFzcz0iY2xlYXJpbmctbWFpbi1uZXh0Ij48c3Bhbj48L3NwYW4+PC9hPjwvZGl2PicKICAgICAgfSwKCiAgICAgIC8vIGNvbW1hIGRlbGltaXRlZCBsaXN0IG9mIHNlbGVjdG9ycyB0aGF0LCBvbiBjbGljaywgd2lsbCBjbG9zZSBjbGVhcmluZywKICAgICAgLy8gYWRkICdkaXYuY2xlYXJpbmctYmxhY2tvdXQsIGRpdi52aXNpYmxlLWltZycgdG8gY2xvc2Ugb24gYmFja2dyb3VuZCBjbGljawogICAgICBjbG9zZV9zZWxlY3RvcnMgOiAnLmNsZWFyaW5nLWNsb3NlJywKCiAgICAgIC8vIGV2ZW50IGluaXRpYWxpemVycyBhbmQgbG9ja3MKICAgICAgaW5pdCA6IGZhbHNlLAogICAgICBsb2NrZWQgOiBmYWxzZQogICAgfSwKCiAgICBpbml0IDogZnVuY3Rpb24gKHNjb3BlLCBtZXRob2QsIG9wdGlvbnMpIHsKICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICBGb3VuZGF0aW9uLmluaGVyaXQodGhpcywgJ3Rocm90dGxlIGxvYWRlZCcpOwoKICAgICAgdGhpcy5iaW5kaW5ncyhtZXRob2QsIG9wdGlvbnMpOwoKICAgICAgaWYgKCQodGhpcy5zY29wZSkuaXMoJ1tkYXRhLWNsZWFyaW5nXScpKSB7CiAgICAgICAgdGhpcy5hc3NlbWJsZSgkKCdsaScsIHRoaXMuc2NvcGUpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAkKCdbZGF0YS1jbGVhcmluZ10nLCB0aGlzLnNjb3BlKS5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHNlbGYuYXNzZW1ibGUoJCgnbGknLCB0aGlzKSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0sCgogICAgZXZlbnRzIDogZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgIHZhciBzZWxmID0gdGhpczsKCiAgICAgICQodGhpcy5zY29wZSkKICAgICAgICAub2ZmKCcuY2xlYXJpbmcnKQogICAgICAgIC5vbignY2xpY2suZm5kdG4uY2xlYXJpbmcnLCAndWxbZGF0YS1jbGVhcmluZ10gbGknLAogICAgICAgICAgZnVuY3Rpb24gKGUsIGN1cnJlbnQsIHRhcmdldCkgewogICAgICAgICAgICB2YXIgY3VycmVudCA9IGN1cnJlbnQgfHwgJCh0aGlzKSwKICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldCB8fCBjdXJyZW50LAogICAgICAgICAgICAgICAgbmV4dCA9IGN1cnJlbnQubmV4dCgnbGknKSwKICAgICAgICAgICAgICAgIHNldHRpbmdzID0gY3VycmVudC5jbG9zZXN0KCdbZGF0YS1jbGVhcmluZ10nKS5kYXRhKCdjbGVhcmluZy1pbml0JyksCiAgICAgICAgICAgICAgICBpbWFnZSA9ICQoZS50YXJnZXQpOwoKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgICAgICAgaWYgKCFzZXR0aW5ncykgewogICAgICAgICAgICAgIHNlbGYuaW5pdCgpOwogICAgICAgICAgICAgIHNldHRpbmdzID0gY3VycmVudC5jbG9zZXN0KCdbZGF0YS1jbGVhcmluZ10nKS5kYXRhKCdjbGVhcmluZy1pbml0Jyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGlmIGNsZWFyaW5nIGlzIG9wZW4gYW5kIHRoZSBjdXJyZW50IGltYWdlIGlzCiAgICAgICAgICAgIC8vIGNsaWNrZWQsIGdvIHRvIHRoZSBuZXh0IGltYWdlIGluIHNlcXVlbmNlCiAgICAgICAgICAgIGlmICh0YXJnZXQuaGFzQ2xhc3MoJ3Zpc2libGUnKSAmJiAKICAgICAgICAgICAgICBjdXJyZW50WzBdID09PSB0YXJnZXRbMF0gJiYgCiAgICAgICAgICAgICAgbmV4dC5sZW5ndGggPiAwICYmIHNlbGYuaXNfb3BlbihjdXJyZW50KSkgewogICAgICAgICAgICAgIHRhcmdldCA9IG5leHQ7CiAgICAgICAgICAgICAgaW1hZ2UgPSAkKCdpbWcnLCB0YXJnZXQpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBzZXQgY3VycmVudCBhbmQgdGFyZ2V0IHRvIHRoZSBjbGlja2VkIGxpIGlmIG5vdCBvdGhlcndpc2UgZGVmaW5lZC4KICAgICAgICAgICAgc2VsZi5vcGVuKGltYWdlLCBjdXJyZW50LCB0YXJnZXQpOwogICAgICAgICAgICBzZWxmLnVwZGF0ZV9wYWRkbGVzKHRhcmdldCk7CiAgICAgICAgICB9KQoKICAgICAgICAub24oJ2NsaWNrLmZuZHRuLmNsZWFyaW5nJywgJy5jbGVhcmluZy1tYWluLW5leHQnLAogICAgICAgICAgZnVuY3Rpb24gKGUpIHsgc2VsZi5uYXYoZSwgJ25leHQnKSB9KQogICAgICAgIC5vbignY2xpY2suZm5kdG4uY2xlYXJpbmcnLCAnLmNsZWFyaW5nLW1haW4tcHJldicsCiAgICAgICAgICBmdW5jdGlvbiAoZSkgeyBzZWxmLm5hdihlLCAncHJldicpIH0pCiAgICAgICAgLm9uKCdjbGljay5mbmR0bi5jbGVhcmluZycsIHRoaXMuc2V0dGluZ3MuY2xvc2Vfc2VsZWN0b3JzLAogICAgICAgICAgZnVuY3Rpb24gKGUpIHsgRm91bmRhdGlvbi5saWJzLmNsZWFyaW5nLmNsb3NlKGUsIHRoaXMpIH0pCiAgICAgICAgLm9uKCdrZXlkb3duLmZuZHRuLmNsZWFyaW5nJywKICAgICAgICAgIGZ1bmN0aW9uIChlKSB7IHNlbGYua2V5ZG93bihlKSB9KTsKCiAgICAgICQod2luZG93KS5vZmYoJy5jbGVhcmluZycpLm9uKCdyZXNpemUuZm5kdG4uY2xlYXJpbmcnLAogICAgICAgIGZ1bmN0aW9uICgpIHsgc2VsZi5yZXNpemUoKSB9KTsKCiAgICAgIHRoaXMuc3dpcGVfZXZlbnRzKHNjb3BlKTsKICAgIH0sCgogICAgc3dpcGVfZXZlbnRzIDogZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgIHZhciBzZWxmID0gdGhpczsKCiAgICAgICQodGhpcy5zY29wZSkKICAgICAgICAub24oJ3RvdWNoc3RhcnQuZm5kdG4uY2xlYXJpbmcnLCAnLnZpc2libGUtaW1nJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgaWYgKCFlLnRvdWNoZXMpIHsgZSA9IGUub3JpZ2luYWxFdmVudDsgfQogICAgICAgICAgdmFyIGRhdGEgPSB7CiAgICAgICAgICAgICAgICBzdGFydF9wYWdlX3g6IGUudG91Y2hlc1swXS5wYWdlWCwKICAgICAgICAgICAgICAgIHN0YXJ0X3BhZ2VfeTogZS50b3VjaGVzWzBdLnBhZ2VZLAogICAgICAgICAgICAgICAgc3RhcnRfdGltZTogKG5ldyBEYXRlKCkpLmdldFRpbWUoKSwKICAgICAgICAgICAgICAgIGRlbHRhX3g6IDAsCiAgICAgICAgICAgICAgICBpc19zY3JvbGxpbmc6IHVuZGVmaW5lZAogICAgICAgICAgICAgIH07CgogICAgICAgICAgJCh0aGlzKS5kYXRhKCdzd2lwZS10cmFuc2l0aW9uJywgZGF0YSk7CiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIH0pCiAgICAgICAgLm9uKCd0b3VjaG1vdmUuZm5kdG4uY2xlYXJpbmcnLCAnLnZpc2libGUtaW1nJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgaWYgKCFlLnRvdWNoZXMpIHsgZSA9IGUub3JpZ2luYWxFdmVudDsgfQogICAgICAgICAgLy8gSWdub3JlIHBpbmNoL3pvb20gZXZlbnRzCiAgICAgICAgICBpZihlLnRvdWNoZXMubGVuZ3RoID4gMSB8fCBlLnNjYWxlICYmIGUuc2NhbGUgIT09IDEpIHJldHVybjsKCiAgICAgICAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YSgnc3dpcGUtdHJhbnNpdGlvbicpOwoKICAgICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgZGF0YSA9IHt9OwogICAgICAgICAgfQoKICAgICAgICAgIGRhdGEuZGVsdGFfeCA9IGUudG91Y2hlc1swXS5wYWdlWCAtIGRhdGEuc3RhcnRfcGFnZV94OwoKICAgICAgICAgIGlmICggdHlwZW9mIGRhdGEuaXNfc2Nyb2xsaW5nID09PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICBkYXRhLmlzX3Njcm9sbGluZyA9ICEhKCBkYXRhLmlzX3Njcm9sbGluZyB8fCBNYXRoLmFicyhkYXRhLmRlbHRhX3gpIDwgTWF0aC5hYnMoZS50b3VjaGVzWzBdLnBhZ2VZIC0gZGF0YS5zdGFydF9wYWdlX3kpICk7CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKCFkYXRhLmlzX3Njcm9sbGluZyAmJiAhZGF0YS5hY3RpdmUpIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICB2YXIgZGlyZWN0aW9uID0gKGRhdGEuZGVsdGFfeCA8IDApID8gJ25leHQnIDogJ3ByZXYnOwogICAgICAgICAgICBkYXRhLmFjdGl2ZSA9IHRydWU7CiAgICAgICAgICAgIHNlbGYubmF2KGUsIGRpcmVjdGlvbik7CiAgICAgICAgICB9CiAgICAgICAgfSkKICAgICAgICAub24oJ3RvdWNoZW5kLmZuZHRuLmNsZWFyaW5nJywgJy52aXNpYmxlLWltZycsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICQodGhpcykuZGF0YSgnc3dpcGUtdHJhbnNpdGlvbicsIHt9KTsKICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgfSk7CiAgICB9LAoKICAgIGFzc2VtYmxlIDogZnVuY3Rpb24gKCRsaSkgewogICAgICB2YXIgJGVsID0gJGxpLnBhcmVudCgpOwoKICAgICAgaWYgKCRlbC5wYXJlbnQoKS5oYXNDbGFzcygnY2Fyb3VzZWwnKSkgcmV0dXJuOwogICAgICAkZWwuYWZ0ZXIoJzxkaXYgaWQ9ImZvdW5kYXRpb25DbGVhcmluZ0hvbGRlciI+PC9kaXY+Jyk7CgogICAgICB2YXIgaG9sZGVyID0gJCgnI2ZvdW5kYXRpb25DbGVhcmluZ0hvbGRlcicpLAogICAgICAgICAgc2V0dGluZ3MgPSAkZWwuZGF0YSgnY2xlYXJpbmctaW5pdCcpLAogICAgICAgICAgZ3JpZCA9ICRlbC5kZXRhY2goKSwKICAgICAgICAgIGRhdGEgPSB7CiAgICAgICAgICAgIGdyaWQ6ICc8ZGl2IGNsYXNzPSJjYXJvdXNlbCI+JyArIGdyaWRbMF0ub3V0ZXJIVE1MICsgJzwvZGl2PicsCiAgICAgICAgICAgIHZpZXdpbmc6IHNldHRpbmdzLnRlbXBsYXRlcy52aWV3aW5nCiAgICAgICAgICB9LAogICAgICAgICAgd3JhcHBlciA9ICc8ZGl2IGNsYXNzPSJjbGVhcmluZy1hc3NlbWJsZWQiPjxkaXY+JyArIGRhdGEudmlld2luZyArCiAgICAgICAgICAgIGRhdGEuZ3JpZCArICc8L2Rpdj48L2Rpdj4nOwoKICAgICAgcmV0dXJuIGhvbGRlci5hZnRlcih3cmFwcGVyKS5yZW1vdmUoKTsKICAgIH0sCgogICAgb3BlbiA6IGZ1bmN0aW9uICgkaW1hZ2UsIGN1cnJlbnQsIHRhcmdldCkgewogICAgICB2YXIgcm9vdCA9IHRhcmdldC5jbG9zZXN0KCcuY2xlYXJpbmctYXNzZW1ibGVkJyksCiAgICAgICAgICBjb250YWluZXIgPSAkKCdkaXYnLCByb290KS5maXJzdCgpLAogICAgICAgICAgdmlzaWJsZV9pbWFnZSA9ICQoJy52aXNpYmxlLWltZycsIGNvbnRhaW5lciksCiAgICAgICAgICBpbWFnZSA9ICQoJ2ltZycsIHZpc2libGVfaW1hZ2UpLm5vdCgkaW1hZ2UpOwoKICAgICAgaWYgKCF0aGlzLmxvY2tlZCgpKSB7CiAgICAgICAgLy8gc2V0IHRoZSBpbWFnZSB0byB0aGUgc2VsZWN0ZWQgdGh1bWJuYWlsCiAgICAgICAgaW1hZ2UKICAgICAgICAgIC5hdHRyKCdzcmMnLCB0aGlzLmxvYWQoJGltYWdlKSkKICAgICAgICAgIC5jc3MoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7CgogICAgICAgIHRoaXMubG9hZGVkKGltYWdlLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBpbWFnZS5jc3MoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpOwogICAgICAgICAgLy8gdG9nZ2xlIHRoZSBnYWxsZXJ5CiAgICAgICAgICByb290LmFkZENsYXNzKCdjbGVhcmluZy1ibGFja291dCcpOwogICAgICAgICAgY29udGFpbmVyLmFkZENsYXNzKCdjbGVhcmluZy1jb250YWluZXInKTsKICAgICAgICAgIHZpc2libGVfaW1hZ2Uuc2hvdygpOwogICAgICAgICAgdGhpcy5maXhfaGVpZ2h0KHRhcmdldCkKICAgICAgICAgICAgLmNhcHRpb24oJCgnLmNsZWFyaW5nLWNhcHRpb24nLCB2aXNpYmxlX2ltYWdlKSwgJGltYWdlKQogICAgICAgICAgICAuY2VudGVyKGltYWdlKQogICAgICAgICAgICAuc2hpZnQoY3VycmVudCwgdGFyZ2V0LCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgdGFyZ2V0LnNpYmxpbmdzKCkucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKTsKICAgICAgICAgICAgICB0YXJnZXQuYWRkQ2xhc3MoJ3Zpc2libGUnKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfS5iaW5kKHRoaXMpKTsKICAgICAgfQogICAgfSwKCiAgICBjbG9zZSA6IGZ1bmN0aW9uIChlLCBlbCkgewogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CgogICAgICB2YXIgcm9vdCA9IChmdW5jdGlvbiAodGFyZ2V0KSB7CiAgICAgICAgICAgIGlmICgvYmxhY2tvdXQvLnRlc3QodGFyZ2V0LnNlbGVjdG9yKSkgewogICAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5jbG9zZXN0KCcuY2xlYXJpbmctYmxhY2tvdXQnKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSgkKGVsKSkpLCBjb250YWluZXIsIHZpc2libGVfaW1hZ2U7CgogICAgICBpZiAoZWwgPT09IGUudGFyZ2V0ICYmIHJvb3QpIHsKICAgICAgICBjb250YWluZXIgPSAkKCdkaXYnLCByb290KS5maXJzdCgpOwogICAgICAgIHZpc2libGVfaW1hZ2UgPSAkKCcudmlzaWJsZS1pbWcnLCBjb250YWluZXIpOwogICAgICAgIHRoaXMuc2V0dGluZ3MucHJldl9pbmRleCA9IDA7CiAgICAgICAgJCgndWxbZGF0YS1jbGVhcmluZ10nLCByb290KQogICAgICAgICAgLmF0dHIoJ3N0eWxlJywgJycpLmNsb3Nlc3QoJy5jbGVhcmluZy1ibGFja291dCcpCiAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ2NsZWFyaW5nLWJsYWNrb3V0Jyk7CiAgICAgICAgY29udGFpbmVyLnJlbW92ZUNsYXNzKCdjbGVhcmluZy1jb250YWluZXInKTsKICAgICAgICB2aXNpYmxlX2ltYWdlLmhpZGUoKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSwKCiAgICBpc19vcGVuIDogZnVuY3Rpb24gKGN1cnJlbnQpIHsKICAgICAgcmV0dXJuIGN1cnJlbnQucGFyZW50KCkucHJvcCgnc3R5bGUnKS5sZW5ndGggPiAwOwogICAgfSwKCiAgICBrZXlkb3duIDogZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIGNsZWFyaW5nID0gJCgndWxbZGF0YS1jbGVhcmluZ10nLCAnLmNsZWFyaW5nLWJsYWNrb3V0Jyk7CgogICAgICBpZiAoZS53aGljaCA9PT0gMzkpIHRoaXMuZ28oY2xlYXJpbmcsICduZXh0Jyk7CiAgICAgIGlmIChlLndoaWNoID09PSAzNykgdGhpcy5nbyhjbGVhcmluZywgJ3ByZXYnKTsKICAgICAgaWYgKGUud2hpY2ggPT09IDI3KSAkKCdhLmNsZWFyaW5nLWNsb3NlJykudHJpZ2dlcignY2xpY2snKTsKICAgIH0sCgogICAgbmF2IDogZnVuY3Rpb24gKGUsIGRpcmVjdGlvbikgewogICAgICB2YXIgY2xlYXJpbmcgPSAkKCd1bFtkYXRhLWNsZWFyaW5nXScsICcuY2xlYXJpbmctYmxhY2tvdXQnKTsKCiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgdGhpcy5nbyhjbGVhcmluZywgZGlyZWN0aW9uKTsKICAgIH0sCgogICAgcmVzaXplIDogZnVuY3Rpb24gKCkgewogICAgICB2YXIgaW1hZ2UgPSAkKCdpbWcnLCAnLmNsZWFyaW5nLWJsYWNrb3V0IC52aXNpYmxlLWltZycpOwoKICAgICAgaWYgKGltYWdlLmxlbmd0aCkgewogICAgICAgIHRoaXMuY2VudGVyKGltYWdlKTsKICAgICAgfQogICAgfSwKCiAgICAvLyB2aXN1YWwgYWRqdXN0bWVudHMKICAgIGZpeF9oZWlnaHQgOiBmdW5jdGlvbiAodGFyZ2V0KSB7CiAgICAgIHZhciBsaXMgPSB0YXJnZXQucGFyZW50KCkuY2hpbGRyZW4oKSwKICAgICAgICAgIHNlbGYgPSB0aGlzOwoKICAgICAgbGlzLmVhY2goZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGxpID0gJCh0aGlzKSwKICAgICAgICAgICAgICBpbWFnZSA9IGxpLmZpbmQoJ2ltZycpOwoKICAgICAgICAgIGlmIChsaS5oZWlnaHQoKSA+IGltYWdlLm91dGVySGVpZ2h0KCkpIHsKICAgICAgICAgICAgbGkuYWRkQ2xhc3MoJ2ZpeC1oZWlnaHQnKTsKICAgICAgICAgIH0KICAgICAgICB9KQogICAgICAgIC5jbG9zZXN0KCd1bCcpCiAgICAgICAgLndpZHRoKGxpcy5sZW5ndGggKiAxMDAgKyAnJScpOwoKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9LAoKICAgIHVwZGF0ZV9wYWRkbGVzIDogZnVuY3Rpb24gKHRhcmdldCkgewogICAgICB2YXIgdmlzaWJsZV9pbWFnZSA9IHRhcmdldAogICAgICAgIC5jbG9zZXN0KCcuY2Fyb3VzZWwnKQogICAgICAgIC5zaWJsaW5ncygnLnZpc2libGUtaW1nJyk7CgogICAgICBpZiAodGFyZ2V0Lm5leHQoKS5sZW5ndGggPiAwKSB7CiAgICAgICAgJCgnLmNsZWFyaW5nLW1haW4tbmV4dCcsIHZpc2libGVfaW1hZ2UpCiAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ2Rpc2FibGVkJyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgJCgnLmNsZWFyaW5nLW1haW4tbmV4dCcsIHZpc2libGVfaW1hZ2UpCiAgICAgICAgICAuYWRkQ2xhc3MoJ2Rpc2FibGVkJyk7CiAgICAgIH0KCiAgICAgIGlmICh0YXJnZXQucHJldigpLmxlbmd0aCA+IDApIHsKICAgICAgICAkKCcuY2xlYXJpbmctbWFpbi1wcmV2JywgdmlzaWJsZV9pbWFnZSkKICAgICAgICAgIC5yZW1vdmVDbGFzcygnZGlzYWJsZWQnKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAkKCcuY2xlYXJpbmctbWFpbi1wcmV2JywgdmlzaWJsZV9pbWFnZSkKICAgICAgICAgIC5hZGRDbGFzcygnZGlzYWJsZWQnKTsKICAgICAgfQogICAgfSwKCiAgICBjZW50ZXIgOiBmdW5jdGlvbiAodGFyZ2V0KSB7CiAgICAgIGlmICghdGhpcy5ydGwpIHsKICAgICAgICB0YXJnZXQuY3NzKHsKICAgICAgICAgIG1hcmdpbkxlZnQgOiAtKHRhcmdldC5vdXRlcldpZHRoKCkgLyAyKSwKICAgICAgICAgIG1hcmdpblRvcCA6IC0odGFyZ2V0Lm91dGVySGVpZ2h0KCkgLyAyKQogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIHRhcmdldC5jc3MoewogICAgICAgICAgbWFyZ2luUmlnaHQgOiAtKHRhcmdldC5vdXRlcldpZHRoKCkgLyAyKSwKICAgICAgICAgIG1hcmdpblRvcCA6IC0odGFyZ2V0Lm91dGVySGVpZ2h0KCkgLyAyKQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzOwogICAgfSwKCiAgICAvLyBpbWFnZSBsb2FkaW5nIGFuZCBwcmVsb2FkaW5nCgogICAgbG9hZCA6IGZ1bmN0aW9uICgkaW1hZ2UpIHsKICAgICAgaWYgKCRpbWFnZVswXS5ub2RlTmFtZSA9PT0gIkEiKSB7CiAgICAgICAgdmFyIGhyZWYgPSAkaW1hZ2UuYXR0cignaHJlZicpOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBocmVmID0gJGltYWdlLnBhcmVudCgpLmF0dHIoJ2hyZWYnKTsKICAgICAgfQoKICAgICAgdGhpcy5wcmVsb2FkKCRpbWFnZSk7CgogICAgICBpZiAoaHJlZikgcmV0dXJuIGhyZWY7CiAgICAgIHJldHVybiAkaW1hZ2UuYXR0cignc3JjJyk7CiAgICB9LAoKICAgIHByZWxvYWQgOiBmdW5jdGlvbiAoJGltYWdlKSB7CiAgICAgIHRoaXMKICAgICAgICAuaW1nKCRpbWFnZS5jbG9zZXN0KCdsaScpLm5leHQoKSkKICAgICAgICAuaW1nKCRpbWFnZS5jbG9zZXN0KCdsaScpLnByZXYoKSk7CiAgICB9LAoKICAgIGltZyA6IGZ1bmN0aW9uIChpbWcpIHsKICAgICAgaWYgKGltZy5sZW5ndGgpIHsKICAgICAgICB2YXIgbmV3X2ltZyA9IG5ldyBJbWFnZSgpLAogICAgICAgICAgICBuZXdfYSA9ICQoJ2EnLCBpbWcpOwoKICAgICAgICBpZiAobmV3X2EubGVuZ3RoKSB7CiAgICAgICAgICBuZXdfaW1nLnNyYyA9IG5ld19hLmF0dHIoJ2hyZWYnKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbmV3X2ltZy5zcmMgPSAkKCdpbWcnLCBpbWcpLmF0dHIoJ3NyYycpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0sCgogICAgLy8gaW1hZ2UgY2FwdGlvbgoKICAgIGNhcHRpb24gOiBmdW5jdGlvbiAoY29udGFpbmVyLCAkaW1hZ2UpIHsKICAgICAgdmFyIGNhcHRpb24gPSAkaW1hZ2UuZGF0YSgnY2FwdGlvbicpOwoKICAgICAgaWYgKGNhcHRpb24pIHsKICAgICAgICBjb250YWluZXIKICAgICAgICAgIC5odG1sKGNhcHRpb24pCiAgICAgICAgICAuc2hvdygpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnRhaW5lcgogICAgICAgICAgLnRleHQoJycpCiAgICAgICAgICAuaGlkZSgpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzOwogICAgfSwKCiAgICAvLyBkaXJlY3Rpb25hbCBtZXRob2RzCgogICAgZ28gOiBmdW5jdGlvbiAoJHVsLCBkaXJlY3Rpb24pIHsKICAgICAgdmFyIGN1cnJlbnQgPSAkKCcudmlzaWJsZScsICR1bCksCiAgICAgICAgICB0YXJnZXQgPSBjdXJyZW50W2RpcmVjdGlvbl0oKTsKCiAgICAgIGlmICh0YXJnZXQubGVuZ3RoKSB7CiAgICAgICAgJCgnaW1nJywgdGFyZ2V0KQogICAgICAgICAgLnRyaWdnZXIoJ2NsaWNrJywgW2N1cnJlbnQsIHRhcmdldF0pOwogICAgICB9CiAgICB9LAoKICAgIHNoaWZ0IDogZnVuY3Rpb24gKGN1cnJlbnQsIHRhcmdldCwgY2FsbGJhY2spIHsKICAgICAgdmFyIGNsZWFyaW5nID0gdGFyZ2V0LnBhcmVudCgpLAogICAgICAgICAgb2xkX2luZGV4ID0gdGhpcy5zZXR0aW5ncy5wcmV2X2luZGV4IHx8IHRhcmdldC5pbmRleCgpLAogICAgICAgICAgZGlyZWN0aW9uID0gdGhpcy5kaXJlY3Rpb24oY2xlYXJpbmcsIGN1cnJlbnQsIHRhcmdldCksCiAgICAgICAgICBsZWZ0ID0gcGFyc2VJbnQoY2xlYXJpbmcuY3NzKCdsZWZ0JyksIDEwKSwKICAgICAgICAgIHdpZHRoID0gdGFyZ2V0Lm91dGVyV2lkdGgoKSwKICAgICAgICAgIHNraXBfc2hpZnQ7CgogICAgICAvLyB3ZSB1c2UgalF1ZXJ5IGFuaW1hdGUgaW5zdGVhZCBvZiBDU1MgdHJhbnNpdGlvbnMgYmVjYXVzZSB3ZQogICAgICAvLyBuZWVkIGEgY2FsbGJhY2sgdG8gdW5sb2NrIHRoZSBuZXh0IGFuaW1hdGlvbgogICAgICBpZiAodGFyZ2V0LmluZGV4KCkgIT09IG9sZF9pbmRleCAmJiAhL3NraXAvLnRlc3QoZGlyZWN0aW9uKSl7CiAgICAgICAgaWYgKC9sZWZ0Ly50ZXN0KGRpcmVjdGlvbikpIHsKICAgICAgICAgIHRoaXMubG9jaygpOwogICAgICAgICAgY2xlYXJpbmcuYW5pbWF0ZSh7bGVmdCA6IGxlZnQgKyB3aWR0aH0sIDMwMCwgdGhpcy51bmxvY2soKSk7CiAgICAgICAgfSBlbHNlIGlmICgvcmlnaHQvLnRlc3QoZGlyZWN0aW9uKSkgewogICAgICAgICAgdGhpcy5sb2NrKCk7CiAgICAgICAgICBjbGVhcmluZy5hbmltYXRlKHtsZWZ0IDogbGVmdCAtIHdpZHRofSwgMzAwLCB0aGlzLnVubG9jaygpKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoL3NraXAvLnRlc3QoZGlyZWN0aW9uKSkgewogICAgICAgIC8vIHRoZSB0YXJnZXQgaW1hZ2UgaXMgbm90IGFkamFjZW50IHRvIHRoZSBjdXJyZW50IGltYWdlLCBzbwogICAgICAgIC8vIGRvIHdlIHNjcm9sbCByaWdodCBvciBub3QKICAgICAgICBza2lwX3NoaWZ0ID0gdGFyZ2V0LmluZGV4KCkgLSB0aGlzLnNldHRpbmdzLnVwX2NvdW50OwogICAgICAgIHRoaXMubG9jaygpOwoKICAgICAgICBpZiAoc2tpcF9zaGlmdCA+IDApIHsKICAgICAgICAgIGNsZWFyaW5nLmFuaW1hdGUoe2xlZnQgOiAtKHNraXBfc2hpZnQgKiB3aWR0aCl9LCAzMDAsIHRoaXMudW5sb2NrKCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjbGVhcmluZy5hbmltYXRlKHtsZWZ0IDogMH0sIDMwMCwgdGhpcy51bmxvY2soKSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBjYWxsYmFjaygpOwogICAgfSwKCiAgICBkaXJlY3Rpb24gOiBmdW5jdGlvbiAoJGVsLCBjdXJyZW50LCB0YXJnZXQpIHsKICAgICAgdmFyIGxpcyA9ICQoJ2xpJywgJGVsKSwKICAgICAgICAgIGxpX3dpZHRoID0gbGlzLm91dGVyV2lkdGgoKSArIChsaXMub3V0ZXJXaWR0aCgpIC8gNCksCiAgICAgICAgICB1cF9jb3VudCA9IE1hdGguZmxvb3IoJCgnLmNsZWFyaW5nLWNvbnRhaW5lcicpLm91dGVyV2lkdGgoKSAvIGxpX3dpZHRoKSAtIDEsCiAgICAgICAgICB0YXJnZXRfaW5kZXggPSBsaXMuaW5kZXgodGFyZ2V0KSwKICAgICAgICAgIHJlc3BvbnNlOwoKICAgICAgdGhpcy5zZXR0aW5ncy51cF9jb3VudCA9IHVwX2NvdW50OwoKICAgICAgaWYgKHRoaXMuYWRqYWNlbnQodGhpcy5zZXR0aW5ncy5wcmV2X2luZGV4LCB0YXJnZXRfaW5kZXgpKSB7CiAgICAgICAgaWYgKCh0YXJnZXRfaW5kZXggPiB1cF9jb3VudCkKICAgICAgICAgICYmIHRhcmdldF9pbmRleCA+IHRoaXMuc2V0dGluZ3MucHJldl9pbmRleCkgewogICAgICAgICAgcmVzcG9uc2UgPSAncmlnaHQnOwogICAgICAgIH0gZWxzZSBpZiAoKHRhcmdldF9pbmRleCA+IHVwX2NvdW50IC0gMSkKICAgICAgICAgICYmIHRhcmdldF9pbmRleCA8PSB0aGlzLnNldHRpbmdzLnByZXZfaW5kZXgpIHsKICAgICAgICAgIHJlc3BvbnNlID0gJ2xlZnQnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXNwb25zZSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICByZXNwb25zZSA9ICdza2lwJzsKICAgICAgfQoKICAgICAgdGhpcy5zZXR0aW5ncy5wcmV2X2luZGV4ID0gdGFyZ2V0X2luZGV4OwoKICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgfSwKCiAgICBhZGphY2VudCA6IGZ1bmN0aW9uIChjdXJyZW50X2luZGV4LCB0YXJnZXRfaW5kZXgpIHsKICAgICAgZm9yICh2YXIgaSA9IHRhcmdldF9pbmRleCArIDE7IGkgPj0gdGFyZ2V0X2luZGV4IC0gMTsgaS0tKSB7CiAgICAgICAgaWYgKGkgPT09IGN1cnJlbnRfaW5kZXgpIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0sCgogICAgLy8gbG9jayBtYW5hZ2VtZW50CgogICAgbG9jayA6IGZ1bmN0aW9uICgpIHsKICAgICAgdGhpcy5zZXR0aW5ncy5sb2NrZWQgPSB0cnVlOwogICAgfSwKCiAgICB1bmxvY2sgOiBmdW5jdGlvbiAoKSB7CiAgICAgIHRoaXMuc2V0dGluZ3MubG9ja2VkID0gZmFsc2U7CiAgICB9LAoKICAgIGxvY2tlZCA6IGZ1bmN0aW9uICgpIHsKICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MubG9ja2VkOwogICAgfSwKCiAgICBvZmYgOiBmdW5jdGlvbiAoKSB7CiAgICAgICQodGhpcy5zY29wZSkub2ZmKCcuZm5kdG4uY2xlYXJpbmcnKTsKICAgICAgJCh3aW5kb3cpLm9mZignLmZuZHRuLmNsZWFyaW5nJyk7CiAgICB9LAoKICAgIHJlZmxvdyA6IGZ1bmN0aW9uICgpIHsKICAgICAgdGhpcy5pbml0KCk7CiAgICB9CiAgfTsKCn0oalF1ZXJ5LCB0aGlzLCB0aGlzLmRvY3VtZW50KSk7Cgo7KGZ1bmN0aW9uICgkLCB3aW5kb3csIGRvY3VtZW50LCB1bmRlZmluZWQpIHsKICAndXNlIHN0cmljdCc7CgogIEZvdW5kYXRpb24ubGlicy5kcm9wZG93biA9IHsKICAgIG5hbWUgOiAnZHJvcGRvd24nLAoKICAgIHZlcnNpb24gOiAnNS4wLjAnLAoKICAgIHNldHRpbmdzIDogewogICAgICBhY3RpdmVfY2xhc3M6ICdvcGVuJywKICAgICAgaXNfaG92ZXI6IGZhbHNlLAogICAgICBvcGVuZWQ6IGZ1bmN0aW9uKCl7fSwKICAgICAgY2xvc2VkOiBmdW5jdGlvbigpe30KICAgIH0sCgogICAgaW5pdCA6IGZ1bmN0aW9uIChzY29wZSwgbWV0aG9kLCBvcHRpb25zKSB7CiAgICAgIEZvdW5kYXRpb24uaW5oZXJpdCh0aGlzLCAndGhyb3R0bGUnKTsKCiAgICAgIHRoaXMuYmluZGluZ3MobWV0aG9kLCBvcHRpb25zKTsKICAgIH0sCgogICAgZXZlbnRzIDogZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgIHZhciBzZWxmID0gdGhpczsKCiAgICAgICQodGhpcy5zY29wZSkKICAgICAgICAub2ZmKCcuZHJvcGRvd24nKQogICAgICAgIC5vbignY2xpY2suZm5kdG4uZHJvcGRvd24nLCAnW2RhdGEtZHJvcGRvd25dJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgIHZhciBzZXR0aW5ncyA9ICQodGhpcykuZGF0YSgnZHJvcGRvd24taW5pdCcpOwogICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgICAgIGlmICghc2V0dGluZ3MuaXNfaG92ZXIgfHwgTW9kZXJuaXpyLnRvdWNoKSBzZWxmLnRvZ2dsZSgkKHRoaXMpKTsKICAgICAgICB9KQogICAgICAgIC5vbignbW91c2VlbnRlci5mbmR0bi5kcm9wZG93bicsICdbZGF0YS1kcm9wZG93bl0sIFtkYXRhLWRyb3Bkb3duLWNvbnRlbnRdJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7CiAgICAgICAgICBjbGVhclRpbWVvdXQoc2VsZi50aW1lb3V0KTsKCiAgICAgICAgICBpZiAoJHRoaXMuZGF0YSgnZHJvcGRvd24nKSkgewogICAgICAgICAgICB2YXIgZHJvcGRvd24gPSAkKCcjJyArICR0aGlzLmRhdGEoJ2Ryb3Bkb3duJykpLAogICAgICAgICAgICAgICAgdGFyZ2V0ID0gJHRoaXM7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgZHJvcGRvd24gPSAkdGhpczsKICAgICAgICAgICAgICAgIHRhcmdldCA9ICQoIltkYXRhLWRyb3Bkb3duPSciICsgZHJvcGRvd24uYXR0cignaWQnKSArICInXSIpOwogICAgICAgICAgfQoKICAgICAgICAgIHZhciBzZXR0aW5ncyA9IHRhcmdldC5kYXRhKCdkcm9wZG93bi1pbml0Jyk7CiAgICAgICAgICBpZiAoc2V0dGluZ3MuaXNfaG92ZXIpIHNlbGYub3Blbi5hcHBseShzZWxmLCBbZHJvcGRvd24sIHRhcmdldF0pOwogICAgICAgIH0pCiAgICAgICAgLm9uKCdtb3VzZWxlYXZlLmZuZHRuLmRyb3Bkb3duJywgJ1tkYXRhLWRyb3Bkb3duXSwgW2RhdGEtZHJvcGRvd24tY29udGVudF0nLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsKICAgICAgICAgIHNlbGYudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBpZiAoJHRoaXMuZGF0YSgnZHJvcGRvd24nKSkgewogICAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9ICR0aGlzLmRhdGEoJ2Ryb3Bkb3duLWluaXQnKTsKICAgICAgICAgICAgICBpZiAoc2V0dGluZ3MuaXNfaG92ZXIpIHNlbGYuY2xvc2UuY2FsbChzZWxmLCAkKCcjJyArICR0aGlzLmRhdGEoJ2Ryb3Bkb3duJykpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gJCgnW2RhdGEtZHJvcGRvd249IicgKyAkKHRoaXMpLmF0dHIoJ2lkJykgKyAnIl0nKSwKICAgICAgICAgICAgICAgICAgc2V0dGluZ3MgPSB0YXJnZXQuZGF0YSgnZHJvcGRvd24taW5pdCcpOwogICAgICAgICAgICAgIGlmIChzZXR0aW5ncy5pc19ob3Zlcikgc2VsZi5jbG9zZS5jYWxsKHNlbGYsICR0aGlzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfS5iaW5kKHRoaXMpLCAxNTApOwogICAgICAgIH0pCiAgICAgICAgLm9uKCdjbGljay5mbmR0bi5kcm9wZG93bicsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICB2YXIgcGFyZW50ID0gJChlLnRhcmdldCkuY2xvc2VzdCgnW2RhdGEtZHJvcGRvd24tY29udGVudF0nKTsKCiAgICAgICAgICBpZiAoJChlLnRhcmdldCkuZGF0YSgnZHJvcGRvd24nKSB8fCAkKGUudGFyZ2V0KS5wYXJlbnQoKS5kYXRhKCdkcm9wZG93bicpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghKCQoZS50YXJnZXQpLmRhdGEoJ3JldmVhbElkJykpICYmIAogICAgICAgICAgICAocGFyZW50Lmxlbmd0aCA+IDAgJiYgKCQoZS50YXJnZXQpLmlzKCdbZGF0YS1kcm9wZG93bi1jb250ZW50XScpIHx8IAogICAgICAgICAgICAgICQuY29udGFpbnMocGFyZW50LmZpcnN0KClbMF0sIGUudGFyZ2V0KSkpKSB7CiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KCiAgICAgICAgICBzZWxmLmNsb3NlLmNhbGwoc2VsZiwgJCgnW2RhdGEtZHJvcGRvd24tY29udGVudF0nKSk7CiAgICAgICAgfSkKICAgICAgICAub24oJ29wZW5lZC5mbmR0bi5kcm9wZG93bicsICdbZGF0YS1kcm9wZG93bi1jb250ZW50XScsIHRoaXMuc2V0dGluZ3Mub3BlbmVkKQogICAgICAgIC5vbignY2xvc2VkLmZuZHRuLmRyb3Bkb3duJywgJ1tkYXRhLWRyb3Bkb3duLWNvbnRlbnRdJywgdGhpcy5zZXR0aW5ncy5jbG9zZWQpOwoKICAgICAgJCh3aW5kb3cpCiAgICAgICAgLm9mZignLmRyb3Bkb3duJykKICAgICAgICAub24oJ3Jlc2l6ZS5mbmR0bi5kcm9wZG93bicsIHNlbGYudGhyb3R0bGUoZnVuY3Rpb24gKCkgewogICAgICAgICAgc2VsZi5yZXNpemUuY2FsbChzZWxmKTsKICAgICAgICB9LCA1MCkpLnRyaWdnZXIoJ3Jlc2l6ZScpOwogICAgfSwKCiAgICBjbG9zZTogZnVuY3Rpb24gKGRyb3Bkb3duKSB7CiAgICAgIHZhciBzZWxmID0gdGhpczsKICAgICAgZHJvcGRvd24uZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3Moc2VsZi5zZXR0aW5ncy5hY3RpdmVfY2xhc3MpKSB7CiAgICAgICAgICAkKHRoaXMpCiAgICAgICAgICAgIC5jc3MoRm91bmRhdGlvbi5ydGwgPyAncmlnaHQnOidsZWZ0JywgJy05OTk5OXB4JykKICAgICAgICAgICAgLnJlbW92ZUNsYXNzKHNlbGYuc2V0dGluZ3MuYWN0aXZlX2NsYXNzKTsKICAgICAgICAgICQodGhpcykudHJpZ2dlcignY2xvc2VkJyk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCgogICAgb3BlbjogZnVuY3Rpb24gKGRyb3Bkb3duLCB0YXJnZXQpIHsKICAgICAgICB0aGlzCiAgICAgICAgICAuY3NzKGRyb3Bkb3duCiAgICAgICAgICAgIC5hZGRDbGFzcyh0aGlzLnNldHRpbmdzLmFjdGl2ZV9jbGFzcyksIHRhcmdldCk7CiAgICAgICAgZHJvcGRvd24udHJpZ2dlcignb3BlbmVkJyk7CiAgICB9LAoKICAgIHRvZ2dsZSA6IGZ1bmN0aW9uICh0YXJnZXQpIHsKICAgICAgdmFyIGRyb3Bkb3duID0gJCgnIycgKyB0YXJnZXQuZGF0YSgnZHJvcGRvd24nKSk7CiAgICAgIGlmIChkcm9wZG93bi5sZW5ndGggPT09IDApIHsKICAgICAgICAvLyBObyBkcm9wZG93biBmb3VuZCwgbm90IGNvbnRpbnVpbmcKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIHRoaXMuY2xvc2UuY2FsbCh0aGlzLCAkKCdbZGF0YS1kcm9wZG93bi1jb250ZW50XScpLm5vdChkcm9wZG93bikpOwoKICAgICAgaWYgKGRyb3Bkb3duLmhhc0NsYXNzKHRoaXMuc2V0dGluZ3MuYWN0aXZlX2NsYXNzKSkgewogICAgICAgIHRoaXMuY2xvc2UuY2FsbCh0aGlzLCBkcm9wZG93bik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5jbG9zZS5jYWxsKHRoaXMsICQoJ1tkYXRhLWRyb3Bkb3duLWNvbnRlbnRdJykpCiAgICAgICAgdGhpcy5vcGVuLmNhbGwodGhpcywgZHJvcGRvd24sIHRhcmdldCk7CiAgICAgIH0KICAgIH0sCgogICAgcmVzaXplIDogZnVuY3Rpb24gKCkgewogICAgICB2YXIgZHJvcGRvd24gPSAkKCdbZGF0YS1kcm9wZG93bi1jb250ZW50XS5vcGVuJyksCiAgICAgICAgICB0YXJnZXQgPSAkKCJbZGF0YS1kcm9wZG93bj0nIiArIGRyb3Bkb3duLmF0dHIoJ2lkJykgKyAiJ10iKTsKCiAgICAgIGlmIChkcm9wZG93bi5sZW5ndGggJiYgdGFyZ2V0Lmxlbmd0aCkgewogICAgICAgIHRoaXMuY3NzKGRyb3Bkb3duLCB0YXJnZXQpOwogICAgICB9CiAgICB9LAoKICAgIGNzcyA6IGZ1bmN0aW9uIChkcm9wZG93biwgdGFyZ2V0KSB7CiAgICAgIHZhciBvZmZzZXRfcGFyZW50ID0gZHJvcGRvd24ub2Zmc2V0UGFyZW50KCksCiAgICAgICAgICBwb3NpdGlvbiA9IHRhcmdldC5vZmZzZXQoKTsKCiAgICAgIHBvc2l0aW9uLnRvcCAtPSBvZmZzZXRfcGFyZW50Lm9mZnNldCgpLnRvcDsKICAgICAgcG9zaXRpb24ubGVmdCAtPSBvZmZzZXRfcGFyZW50Lm9mZnNldCgpLmxlZnQ7CgogICAgICBpZiAodGhpcy5zbWFsbCgpKSB7CiAgICAgICAgZHJvcGRvd24uY3NzKHsKICAgICAgICAgIHBvc2l0aW9uIDogJ2Fic29sdXRlJywKICAgICAgICAgIHdpZHRoOiAnOTUlJywKICAgICAgICAgICdtYXgtd2lkdGgnOiAnbm9uZScsCiAgICAgICAgICB0b3A6IHBvc2l0aW9uLnRvcCArIHRhcmdldC5vdXRlckhlaWdodCgpCiAgICAgICAgfSk7CiAgICAgICAgZHJvcGRvd24uY3NzKEZvdW5kYXRpb24ucnRsID8gJ3JpZ2h0JzonbGVmdCcsICcyLjUlJyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKCFGb3VuZGF0aW9uLnJ0bCAmJiAkKHdpbmRvdykud2lkdGgoKSA+IGRyb3Bkb3duLm91dGVyV2lkdGgoKSArIHRhcmdldC5vZmZzZXQoKS5sZWZ0KSB7CiAgICAgICAgICB2YXIgbGVmdCA9IHBvc2l0aW9uLmxlZnQ7CiAgICAgICAgICBpZiAoZHJvcGRvd24uaGFzQ2xhc3MoJ3JpZ2h0JykpIHsKICAgICAgICAgICAgZHJvcGRvd24ucmVtb3ZlQ2xhc3MoJ3JpZ2h0Jyk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmICghZHJvcGRvd24uaGFzQ2xhc3MoJ3JpZ2h0JykpIHsKICAgICAgICAgICAgZHJvcGRvd24uYWRkQ2xhc3MoJ3JpZ2h0Jyk7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgbGVmdCA9IHBvc2l0aW9uLmxlZnQgLSAoZHJvcGRvd24ub3V0ZXJXaWR0aCgpIC0gdGFyZ2V0Lm91dGVyV2lkdGgoKSk7CiAgICAgICAgfQoKICAgICAgICBkcm9wZG93bi5hdHRyKCdzdHlsZScsICcnKS5jc3MoewogICAgICAgICAgcG9zaXRpb24gOiAnYWJzb2x1dGUnLAogICAgICAgICAgdG9wOiBwb3NpdGlvbi50b3AgKyB0YXJnZXQub3V0ZXJIZWlnaHQoKSwKICAgICAgICAgIGxlZnQ6IGxlZnQKICAgICAgICB9KTsKICAgICAgfQoKICAgICAgcmV0dXJuIGRyb3Bkb3duOwogICAgfSwKCiAgICBzbWFsbCA6IGZ1bmN0aW9uICgpIHsKICAgICAgcmV0dXJuIG1hdGNoTWVkaWEoRm91bmRhdGlvbi5tZWRpYV9xdWVyaWVzLnNtYWxsKS5tYXRjaGVzICYmCiAgICAgICAgIW1hdGNoTWVkaWEoRm91bmRhdGlvbi5tZWRpYV9xdWVyaWVzLm1lZGl1bSkubWF0Y2hlczsKICAgIH0sCgogICAgb2ZmOiBmdW5jdGlvbiAoKSB7CiAgICAgICQodGhpcy5zY29wZSkub2ZmKCcuZm5kdG4uZHJvcGRvd24nKTsKICAgICAgJCgnaHRtbCwgYm9keScpLm9mZignLmZuZHRuLmRyb3Bkb3duJyk7CiAgICAgICQod2luZG93KS5vZmYoJy5mbmR0bi5kcm9wZG93bicpOwogICAgICAkKCdbZGF0YS1kcm9wZG93bi1jb250ZW50XScpLm9mZignLmZuZHRuLmRyb3Bkb3duJyk7CiAgICAgIHRoaXMuc2V0dGluZ3MuaW5pdCA9IGZhbHNlOwogICAgfSwKCiAgICByZWZsb3cgOiBmdW5jdGlvbiAoKSB7fQogIH07Cn0oalF1ZXJ5LCB0aGlzLCB0aGlzLmRvY3VtZW50KSk7Cgo7KGZ1bmN0aW9uICgkLCB3aW5kb3csIGRvY3VtZW50LCB1bmRlZmluZWQpIHsKICAndXNlIHN0cmljdCc7CgogIEZvdW5kYXRpb24ubGlicy5pbnRlcmNoYW5nZSA9IHsKICAgIG5hbWUgOiAnaW50ZXJjaGFuZ2UnLAoKICAgIHZlcnNpb24gOiAnNS4wLjAnLAoKICAgIGNhY2hlIDoge30sCgogICAgaW1hZ2VzX2xvYWRlZCA6IGZhbHNlLAogICAgbm9kZXNfbG9hZGVkIDogZmFsc2UsCgogICAgc2V0dGluZ3MgOiB7CiAgICAgIGxvYWRfYXR0ciA6ICdpbnRlcmNoYW5nZScsCgogICAgICBuYW1lZF9xdWVyaWVzIDogewogICAgICAgICdkZWZhdWx0JyA6IEZvdW5kYXRpb24ubWVkaWFfcXVlcmllcy5zbWFsbCwKICAgICAgICBzbWFsbCA6IEZvdW5kYXRpb24ubWVkaWFfcXVlcmllcy5zbWFsbCwKICAgICAgICBtZWRpdW0gOiBGb3VuZGF0aW9uLm1lZGlhX3F1ZXJpZXMubWVkaXVtLAogICAgICAgIGxhcmdlIDogRm91bmRhdGlvbi5tZWRpYV9xdWVyaWVzLmxhcmdlLAogICAgICAgIHhsYXJnZSA6IEZvdW5kYXRpb24ubWVkaWFfcXVlcmllcy54bGFyZ2UsCiAgICAgICAgeHhsYXJnZTogRm91bmRhdGlvbi5tZWRpYV9xdWVyaWVzLnh4bGFyZ2UsCiAgICAgICAgbGFuZHNjYXBlIDogJ29ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSknLAogICAgICAgIHBvcnRyYWl0IDogJ29ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KScsCiAgICAgICAgcmV0aW5hIDogJ29ubHkgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSwnICsgCiAgICAgICAgICAnb25seSBzY3JlZW4gYW5kIChtaW4tLW1vei1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLCcgKyAKICAgICAgICAgICdvbmx5IHNjcmVlbiBhbmQgKC1vLW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIvMSksJyArIAogICAgICAgICAgJ29ubHkgc2NyZWVuIGFuZCAobWluLWRldmljZS1waXhlbC1yYXRpbzogMiksJyArIAogICAgICAgICAgJ29ubHkgc2NyZWVuIGFuZCAobWluLXJlc29sdXRpb246IDE5MmRwaSksJyArIAogICAgICAgICAgJ29ubHkgc2NyZWVuIGFuZCAobWluLXJlc29sdXRpb246IDJkcHB4KScKICAgICAgfSwKCiAgICAgIGRpcmVjdGl2ZXMgOiB7CiAgICAgICAgcmVwbGFjZTogZnVuY3Rpb24gKGVsLCBwYXRoLCB0cmlnZ2VyKSB7CiAgICAgICAgICAvLyBUaGUgdHJpZ2dlciBhcmd1bWVudCwgaWYgY2FsbGVkIHdpdGhpbiB0aGUgZGlyZWN0aXZlLCBmaXJlcwogICAgICAgICAgLy8gYW4gZXZlbnQgbmFtZWQgYWZ0ZXIgdGhlIGRpcmVjdGl2ZSBvbiB0aGUgZWxlbWVudCwgcGFzc2luZwogICAgICAgICAgLy8gYW55IHBhcmFtZXRlcnMgYWxvbmcgdG8gdGhlIGV2ZW50IHRoYXQgeW91IHBhc3MgdG8gdHJpZ2dlci4KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBleC4gdHJpZ2dlcigpLCB0cmlnZ2VyKFthLCBiLCBjXSksIG9yIHRyaWdnZXIoYSwgYiwgYykKICAgICAgICAgIC8vCiAgICAgICAgICAvLyBUaGlzIGFsbG93cyB5b3UgdG8gYmluZCBhIGNhbGxiYWNrIGxpa2Ugc286CiAgICAgICAgICAvLyAkKCcjaW50ZXJjaGFuZ2VDb250YWluZXInKS5vbigncmVwbGFjZScsIGZ1bmN0aW9uIChlLCBhLCBiLCBjKSB7CiAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCQodGhpcykuaHRtbCgpLCBhLCBiLCBjKTsKICAgICAgICAgIC8vIH0pOwoKICAgICAgICAgIGlmICgvSU1HLy50ZXN0KGVsWzBdLm5vZGVOYW1lKSkgewogICAgICAgICAgICB2YXIgb3JpZ19wYXRoID0gZWxbMF0uc3JjOwoKICAgICAgICAgICAgaWYgKG5ldyBSZWdFeHAocGF0aCwgJ2knKS50ZXN0KG9yaWdfcGF0aCkpIHJldHVybjsKCiAgICAgICAgICAgIGVsWzBdLnNyYyA9IHBhdGg7CgogICAgICAgICAgICByZXR1cm4gdHJpZ2dlcihlbFswXS5zcmMpOwogICAgICAgICAgfQogICAgICAgICAgdmFyIGxhc3RfcGF0aCA9IGVsLmRhdGEoJ2ludGVyY2hhbmdlLWxhc3QtcGF0aCcpOwoKICAgICAgICAgIGlmIChsYXN0X3BhdGggPT0gcGF0aCkgcmV0dXJuOwoKICAgICAgICAgIHJldHVybiAkLmdldChwYXRoLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICAgICAgZWwuaHRtbChyZXNwb25zZSk7CiAgICAgICAgICAgIGVsLmRhdGEoJ2ludGVyY2hhbmdlLWxhc3QtcGF0aCcsIHBhdGgpOwogICAgICAgICAgICB0cmlnZ2VyKCk7CiAgICAgICAgICB9KTsKCiAgICAgICAgfQogICAgICB9CiAgICB9LAoKICAgIGluaXQgOiBmdW5jdGlvbiAoc2NvcGUsIG1ldGhvZCwgb3B0aW9ucykgewogICAgICBGb3VuZGF0aW9uLmluaGVyaXQodGhpcywgJ3Rocm90dGxlJyk7CgogICAgICB0aGlzLmRhdGFfYXR0ciA9ICdkYXRhLScgKyB0aGlzLnNldHRpbmdzLmxvYWRfYXR0cjsKCiAgICAgIHRoaXMuYmluZGluZ3MobWV0aG9kLCBvcHRpb25zKTsKICAgICAgdGhpcy5sb2FkKCdpbWFnZXMnKTsKICAgICAgdGhpcy5sb2FkKCdub2RlcycpOwogICAgfSwKCiAgICBldmVudHMgOiBmdW5jdGlvbiAoKSB7CiAgICAgIHZhciBzZWxmID0gdGhpczsKCiAgICAgICQod2luZG93KQogICAgICAgIC5vZmYoJy5pbnRlcmNoYW5nZScpCiAgICAgICAgLm9uKCdyZXNpemUuZm5kdG4uaW50ZXJjaGFuZ2UnLCBzZWxmLnRocm90dGxlKGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHNlbGYucmVzaXplLmNhbGwoc2VsZik7CiAgICAgICAgfSwgNTApKTsKCiAgICAgIHJldHVybiB0aGlzOwogICAgfSwKCiAgICByZXNpemUgOiBmdW5jdGlvbiAoKSB7CiAgICAgIHZhciBjYWNoZSA9IHRoaXMuY2FjaGU7CgogICAgICBpZighdGhpcy5pbWFnZXNfbG9hZGVkIHx8ICF0aGlzLm5vZGVzX2xvYWRlZCkgewogICAgICAgIHNldFRpbWVvdXQoJC5wcm94eSh0aGlzLnJlc2l6ZSwgdGhpcyksIDUwKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGZvciAodmFyIHV1aWQgaW4gY2FjaGUpIHsKICAgICAgICBpZiAoY2FjaGUuaGFzT3duUHJvcGVydHkodXVpZCkpIHsKICAgICAgICAgIHZhciBwYXNzZWQgPSB0aGlzLnJlc3VsdHModXVpZCwgY2FjaGVbdXVpZF0pOwoKICAgICAgICAgIGlmIChwYXNzZWQpIHsKICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5kaXJlY3RpdmVzW3Bhc3NlZAogICAgICAgICAgICAgIC5zY2VuYXJpb1sxXV0ocGFzc2VkLmVsLCBwYXNzZWQuc2NlbmFyaW9bMF0sIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNbMF0gaW5zdGFuY2VvZiBBcnJheSkgeyAKICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHNbMF07CiAgICAgICAgICAgICAgICB9IGVsc2UgeyAKICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHBhc3NlZC5lbC50cmlnZ2VyKHBhc3NlZC5zY2VuYXJpb1sxXSwgYXJncyk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgfSwKCiAgICByZXN1bHRzIDogZnVuY3Rpb24gKHV1aWQsIHNjZW5hcmlvcykgewogICAgICB2YXIgY291bnQgPSBzY2VuYXJpb3MubGVuZ3RoOwoKICAgICAgaWYgKGNvdW50ID4gMCkgewogICAgICAgIHZhciBlbCA9IHRoaXMuUygnW2RhdGEtdXVpZD0iJyArIHV1aWQgKyAnIl0nKTsKCiAgICAgICAgZm9yICh2YXIgaSA9IGNvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgIHZhciBtcSwgcnVsZSA9IHNjZW5hcmlvc1tpXVsyXTsKICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLm5hbWVkX3F1ZXJpZXMuaGFzT3duUHJvcGVydHkocnVsZSkpIHsKICAgICAgICAgICAgbXEgPSBtYXRjaE1lZGlhKHRoaXMuc2V0dGluZ3MubmFtZWRfcXVlcmllc1tydWxlXSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtcSA9IG1hdGNoTWVkaWEocnVsZSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobXEubWF0Y2hlcykgewogICAgICAgICAgICByZXR1cm4ge2VsOiBlbCwgc2NlbmFyaW86IHNjZW5hcmlvc1tpXX07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gZmFsc2U7CiAgICB9LAoKICAgIGxvYWQgOiBmdW5jdGlvbiAodHlwZSwgZm9yY2VfdXBkYXRlKSB7CiAgICAgIGlmICh0eXBlb2YgdGhpc1snY2FjaGVkXycgKyB0eXBlXSA9PT0gJ3VuZGVmaW5lZCcgfHwgZm9yY2VfdXBkYXRlKSB7CiAgICAgICAgdGhpc1sndXBkYXRlXycgKyB0eXBlXSgpOwogICAgICB9CgogICAgICByZXR1cm4gdGhpc1snY2FjaGVkXycgKyB0eXBlXTsKICAgIH0sCgogICAgdXBkYXRlX2ltYWdlcyA6IGZ1bmN0aW9uICgpIHsKICAgICAgdmFyIGltYWdlcyA9IHRoaXMuUygnaW1nWycgKyB0aGlzLmRhdGFfYXR0ciArICddJyksCiAgICAgICAgICBjb3VudCA9IGltYWdlcy5sZW5ndGgsCiAgICAgICAgICBsb2FkZWRfY291bnQgPSAwLAogICAgICAgICAgZGF0YV9hdHRyID0gdGhpcy5kYXRhX2F0dHI7CgogICAgICB0aGlzLmNhY2hlID0ge307CiAgICAgIHRoaXMuY2FjaGVkX2ltYWdlcyA9IFtdOwogICAgICB0aGlzLmltYWdlc19sb2FkZWQgPSAoY291bnQgPT09IDApOwoKICAgICAgZm9yICh2YXIgaSA9IGNvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICBsb2FkZWRfY291bnQrKzsKICAgICAgICBpZiAoaW1hZ2VzW2ldKSB7CiAgICAgICAgICB2YXIgc3RyID0gaW1hZ2VzW2ldLmdldEF0dHJpYnV0ZShkYXRhX2F0dHIpIHx8ICcnOwoKICAgICAgICAgIGlmIChzdHIubGVuZ3RoID4gMCkgewogICAgICAgICAgICB0aGlzLmNhY2hlZF9pbWFnZXMucHVzaChpbWFnZXNbaV0pOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYobG9hZGVkX2NvdW50ID09PSBjb3VudCkgewogICAgICAgICAgdGhpcy5pbWFnZXNfbG9hZGVkID0gdHJ1ZTsKICAgICAgICAgIHRoaXMuZW5oYW5jZSgnaW1hZ2VzJyk7CiAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gdGhpczsKICAgIH0sCgogICAgdXBkYXRlX25vZGVzIDogZnVuY3Rpb24gKCkgewogICAgICB2YXIgbm9kZXMgPSB0aGlzLlMoJ1snICsgdGhpcy5kYXRhX2F0dHIgKyAnXTpub3QoaW1nKScpLAogICAgICAgICAgY291bnQgPSBub2Rlcy5sZW5ndGgsCiAgICAgICAgICBsb2FkZWRfY291bnQgPSAwLAogICAgICAgICAgZGF0YV9hdHRyID0gdGhpcy5kYXRhX2F0dHI7CgogICAgICB0aGlzLmNhY2hlZF9ub2RlcyA9IFtdOwogICAgICAvLyBTZXQgbm9kZXNfbG9hZGVkIHRvIHRydWUgaWYgdGhlcmUgYXJlIG5vIG5vZGVzCiAgICAgIC8vIHRoaXMubm9kZXNfbG9hZGVkID0gZmFsc2U7CiAgICAgIHRoaXMubm9kZXNfbG9hZGVkID0gKGNvdW50ID09PSAwKTsKCgogICAgICBmb3IgKHZhciBpID0gY291bnQgLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIGxvYWRlZF9jb3VudCsrOwogICAgICAgIHZhciBzdHIgPSBub2Rlc1tpXS5nZXRBdHRyaWJ1dGUoZGF0YV9hdHRyKSB8fCAnJzsKCiAgICAgICAgaWYgKHN0ci5sZW5ndGggPiAwKSB7CiAgICAgICAgICB0aGlzLmNhY2hlZF9ub2Rlcy5wdXNoKG5vZGVzW2ldKTsKICAgICAgICB9CgogICAgICAgIGlmKGxvYWRlZF9jb3VudCA9PT0gY291bnQpIHsKICAgICAgICAgIHRoaXMubm9kZXNfbG9hZGVkID0gdHJ1ZTsKICAgICAgICAgIHRoaXMuZW5oYW5jZSgnbm9kZXMnKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzOwogICAgfSwKCiAgICBlbmhhbmNlIDogZnVuY3Rpb24gKHR5cGUpIHsKICAgICAgdmFyIGNvdW50ID0gdGhpc1snY2FjaGVkXycgKyB0eXBlXS5sZW5ndGg7CgogICAgICBmb3IgKHZhciBpID0gY291bnQgLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIHRoaXMub2JqZWN0KCQodGhpc1snY2FjaGVkXycgKyB0eXBlXVtpXSkpOwogICAgICB9CgogICAgICByZXR1cm4gJCh3aW5kb3cpLnRyaWdnZXIoJ3Jlc2l6ZScpOwogICAgfSwKCiAgICBwYXJzZV9wYXJhbXMgOiBmdW5jdGlvbiAocGF0aCwgZGlyZWN0aXZlLCBtcSkgewogICAgICByZXR1cm4gW3RoaXMudHJpbShwYXRoKSwgdGhpcy5jb252ZXJ0X2RpcmVjdGl2ZShkaXJlY3RpdmUpLCB0aGlzLnRyaW0obXEpXTsKICAgIH0sCgogICAgY29udmVydF9kaXJlY3RpdmUgOiBmdW5jdGlvbiAoZGlyZWN0aXZlKSB7CiAgICAgIHZhciB0cmltbWVkID0gdGhpcy50cmltKGRpcmVjdGl2ZSk7CgogICAgICBpZiAodHJpbW1lZC5sZW5ndGggPiAwKSB7CiAgICAgICAgcmV0dXJuIHRyaW1tZWQ7CiAgICAgIH0KCiAgICAgIHJldHVybiAncmVwbGFjZSc7CiAgICB9LAoKICAgIG9iamVjdCA6IGZ1bmN0aW9uKGVsKSB7CiAgICAgIHZhciByYXdfYXJyID0gdGhpcy5wYXJzZV9kYXRhX2F0dHIoZWwpLAogICAgICAgICAgc2NlbmFyaW9zID0gW10sIGNvdW50ID0gcmF3X2Fyci5sZW5ndGg7CgogICAgICBpZiAoY291bnQgPiAwKSB7CiAgICAgICAgZm9yICh2YXIgaSA9IGNvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgIHZhciBzcGxpdCA9IHJhd19hcnJbaV0uc3BsaXQoL1woKC4qPykoXCkpJC8pOwoKICAgICAgICAgIGlmIChzcGxpdC5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgIHZhciBjYWNoZWRfc3BsaXQgPSBzcGxpdFswXS5zcGxpdCgnLCcpLAogICAgICAgICAgICAgICAgcGFyYW1zID0gdGhpcy5wYXJzZV9wYXJhbXMoY2FjaGVkX3NwbGl0WzBdLAogICAgICAgICAgICAgICAgICBjYWNoZWRfc3BsaXRbMV0sIHNwbGl0WzFdKTsKCiAgICAgICAgICAgIHNjZW5hcmlvcy5wdXNoKHBhcmFtcyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gdGhpcy5zdG9yZShlbCwgc2NlbmFyaW9zKTsKICAgIH0sCgogICAgdXVpZCA6IGZ1bmN0aW9uIChzZXBhcmF0b3IpIHsKICAgICAgdmFyIGRlbGltID0gc2VwYXJhdG9yIHx8ICItIjsKCiAgICAgIGZ1bmN0aW9uIFM0KCkgewogICAgICAgIHJldHVybiAoKCgxICsgTWF0aC5yYW5kb20oKSkgKiAweDEwMDAwKSB8IDApLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSk7CiAgICAgIH0KCiAgICAgIHJldHVybiAoUzQoKSArIFM0KCkgKyBkZWxpbSArIFM0KCkgKyBkZWxpbSArIFM0KCkKICAgICAgICArIGRlbGltICsgUzQoKSArIGRlbGltICsgUzQoKSArIFM0KCkgKyBTNCgpKTsKICAgIH0sCgogICAgc3RvcmUgOiBmdW5jdGlvbiAoZWwsIHNjZW5hcmlvcykgewogICAgICB2YXIgdXVpZCA9IHRoaXMudXVpZCgpLAogICAgICAgICAgY3VycmVudF91dWlkID0gZWwuZGF0YSgndXVpZCcpOwoKICAgICAgaWYgKGN1cnJlbnRfdXVpZCkgcmV0dXJuIHRoaXMuY2FjaGVbY3VycmVudF91dWlkXTsKCiAgICAgIGVsLmF0dHIoJ2RhdGEtdXVpZCcsIHV1aWQpOwoKICAgICAgcmV0dXJuIHRoaXMuY2FjaGVbdXVpZF0gPSBzY2VuYXJpb3M7CiAgICB9LAoKICAgIHRyaW0gOiBmdW5jdGlvbihzdHIpIHsKICAgICAgaWYgKHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgcmV0dXJuICQudHJpbShzdHIpOwogICAgICB9CgogICAgICByZXR1cm4gc3RyOwogICAgfSwKCiAgICBwYXJzZV9kYXRhX2F0dHIgOiBmdW5jdGlvbiAoZWwpIHsKICAgICAgdmFyIHJhdyA9IGVsLmRhdGEodGhpcy5zZXR0aW5ncy5sb2FkX2F0dHIpLnNwbGl0KC9cWyguKj8pXF0vKSwKICAgICAgICAgIGNvdW50ID0gcmF3Lmxlbmd0aCwgb3V0cHV0ID0gW107CgogICAgICBmb3IgKHZhciBpID0gY291bnQgLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIGlmIChyYXdbaV0ucmVwbGFjZSgvW1xXXGRdKy8sICcnKS5sZW5ndGggPiA0KSB7CiAgICAgICAgICBvdXRwdXQucHVzaChyYXdbaV0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuIG91dHB1dDsKICAgIH0sCgogICAgcmVmbG93IDogZnVuY3Rpb24gKCkgewogICAgICB0aGlzLmxvYWQoJ2ltYWdlcycsIHRydWUpOwogICAgICB0aGlzLmxvYWQoJ25vZGVzJywgdHJ1ZSk7CiAgICB9CgogIH07Cgp9KGpRdWVyeSwgdGhpcywgdGhpcy5kb2N1bWVudCkpOwo7KGZ1bmN0aW9uICgkLCB3aW5kb3csIGRvY3VtZW50LCB1bmRlZmluZWQpIHsKICAndXNlIHN0cmljdCc7CgogIHZhciBNb2Rlcm5penIgPSBNb2Rlcm5penIgfHwgZmFsc2U7CgogIEZvdW5kYXRpb24ubGlicy5qb3lyaWRlID0gewogICAgbmFtZSA6ICdqb3lyaWRlJywKCiAgICB2ZXJzaW9uIDogJzUuMC4wJywKCiAgICBkZWZhdWx0cyA6IHsKICAgICAgZXhwb3NlICAgICAgICAgICAgICAgOiBmYWxzZSwgICAgICAvLyB0dXJuIG9uIG9yIG9mZiB0aGUgZXhwb3NlIGZlYXR1cmUKICAgICAgbW9kYWwgICAgICAgICAgICAgICAgOiB0cnVlLCAgICAgIC8vIFdoZXRoZXIgdG8gY292ZXIgcGFnZSB3aXRoIG1vZGFsIGR1cmluZyB0aGUgdG91cgogICAgICB0aXBfbG9jYXRpb24gICAgICAgICAgOiAnYm90dG9tJywgIC8vICd0b3AnIG9yICdib3R0b20nIGluIHJlbGF0aW9uIHRvIHBhcmVudAogICAgICBudWJfcG9zaXRpb24gICAgICAgICAgOiAnYXV0bycsICAgIC8vIG92ZXJyaWRlIG9uIGEgcGVyIHRvb2x0aXAgYmFzZXMKICAgICAgc2Nyb2xsX3NwZWVkICAgICAgICAgIDogMTUwMCwgICAgICAgLy8gUGFnZSBzY3JvbGxpbmcgc3BlZWQgaW4gbWlsbGlzZWNvbmRzLCAwID0gbm8gc2Nyb2xsIGFuaW1hdGlvbgogICAgICBzY3JvbGxfYW5pbWF0aW9uICAgICA6ICdsaW5lYXInLCAgIC8vIHN1cHBvcnRzICdzd2luZycgYW5kICdsaW5lYXInLCBleHRlbmQgd2l0aCBqUXVlcnkgVUkuCiAgICAgIHRpbWVyICAgICAgICAgICAgICAgIDogMCwgICAgICAgICAvLyAwID0gbm8gdGltZXIgLCBhbGwgb3RoZXIgbnVtYmVycyA9IHRpbWVyIGluIG1pbGxpc2Vjb25kcwogICAgICBzdGFydF90aW1lcl9vbl9jbGljayAgICA6IHRydWUsICAgICAgLy8gdHJ1ZSBvciBmYWxzZSAtIHRydWUgcmVxdWlyZXMgY2xpY2tpbmcgdGhlIGZpcnN0IGJ1dHRvbiBzdGFydCB0aGUgdGltZXIKICAgICAgc3RhcnRfb2Zmc2V0ICAgICAgICAgIDogMCwgICAgICAgICAvLyB0aGUgaW5kZXggb2YgdGhlIHRvb2x0aXAgeW91IHdhbnQgdG8gc3RhcnQgb24gKGluZGV4IG9mIHRoZSBsaSkKICAgICAgbmV4dF9idXR0b24gICAgICAgICAgIDogdHJ1ZSwgICAgICAvLyB0cnVlIG9yIGZhbHNlIHRvIGNvbnRyb2wgd2hldGhlciBhIG5leHQgYnV0dG9uIGlzIHVzZWQKICAgICAgdGlwX2FuaW1hdGlvbiAgICAgICAgIDogJ2ZhZGUnLCAgICAvLyAncG9wJyBvciAnZmFkZScgaW4gZWFjaCB0aXAKICAgICAgcGF1c2VfYWZ0ZXIgICAgICAgICAgIDogW10sICAgICAgICAvLyBhcnJheSBvZiBpbmRleGVzIHdoZXJlIHRvIHBhdXNlIHRoZSB0b3VyIGFmdGVyCiAgICAgIGV4cG9zZWQgICAgICAgICAgICAgIDogW10sICAgICAgICAvLyBhcnJheSBvZiBleHBvc2UgZWxlbWVudHMKICAgICAgdGlwX2FuaW1hdGlvbl9mYWRlX3NwZWVkOiAzMDAsICAgICAgIC8vIHdoZW4gdGlwQW5pbWF0aW9uID0gJ2ZhZGUnIHRoaXMgaXMgc3BlZWQgaW4gbWlsbGlzZWNvbmRzIGZvciB0aGUgdHJhbnNpdGlvbgogICAgICBjb29raWVfbW9uc3RlciAgICAgICAgOiBmYWxzZSwgICAgIC8vIHRydWUgb3IgZmFsc2UgdG8gY29udHJvbCB3aGV0aGVyIGNvb2tpZXMgYXJlIHVzZWQKICAgICAgY29va2llX25hbWUgICAgICAgICAgIDogJ2pveXJpZGUnLCAvLyBOYW1lIHRoZSBjb29raWUgeW91J2xsIHVzZQogICAgICBjb29raWVfZG9tYWluICAgICAgICAgOiBmYWxzZSwgICAgIC8vIFdpbGwgdGhpcyBjb29raWUgYmUgYXR0YWNoZWQgdG8gYSBkb21haW4sIGllLiAnLm5vdGFibGVhcHAuY29tJwogICAgICBjb29raWVfZXhwaXJlcyAgICAgICAgOiAzNjUsICAgICAgIC8vIHNldCB3aGVuIHlvdSB3b3VsZCBsaWtlIHRoZSBjb29raWUgdG8gZXhwaXJlLgogICAgICB0aXBfY29udGFpbmVyICAgICAgICAgOiAnYm9keScsICAgIC8vIFdoZXJlIHdpbGwgdGhlIHRpcCBiZSBhdHRhY2hlZAogICAgICB0aXBfbG9jYXRpb25fcGF0dGVybnMgOiB7CiAgICAgICAgdG9wOiBbJ2JvdHRvbSddLAogICAgICAgIGJvdHRvbTogW10sIC8vIGJvdHRvbSBzaG91bGQgbm90IG5lZWQgdG8gYmUgcmVwb3NpdGlvbmVkCiAgICAgICAgbGVmdDogWydyaWdodCcsICd0b3AnLCAnYm90dG9tJ10sCiAgICAgICAgcmlnaHQ6IFsnbGVmdCcsICd0b3AnLCAnYm90dG9tJ10KICAgICAgfSwKICAgICAgcG9zdF9yaWRlX2NhbGxiYWNrICAgICA6IGZ1bmN0aW9uICgpe30sICAgIC8vIEEgbWV0aG9kIHRvIGNhbGwgb25jZSB0aGUgdG91ciBjbG9zZXMgKGNhbmNlbGVkIG9yIGNvbXBsZXRlKQogICAgICBwb3N0X3N0ZXBfY2FsbGJhY2sgICAgIDogZnVuY3Rpb24gKCl7fSwgICAgLy8gQSBtZXRob2QgdG8gY2FsbCBhZnRlciBlYWNoIHN0ZXAKICAgICAgcHJlX3N0ZXBfY2FsbGJhY2sgICAgICA6IGZ1bmN0aW9uICgpe30sICAgIC8vIEEgbWV0aG9kIHRvIGNhbGwgYmVmb3JlIGVhY2ggc3RlcAogICAgICBwcmVfcmlkZV9jYWxsYmFjayAgICAgIDogZnVuY3Rpb24gKCl7fSwgICAgLy8gQSBtZXRob2QgdG8gY2FsbCBiZWZvcmUgdGhlIHRvdXIgc3RhcnRzIChwYXNzZWQgaW5kZXgsIHRpcCwgYW5kIGNsb25lZCBleHBvc2VkIGVsZW1lbnQpCiAgICAgIHBvc3RfZXhwb3NlX2NhbGxiYWNrICAgOiBmdW5jdGlvbiAoKXt9LCAgICAvLyBBIG1ldGhvZCB0byBjYWxsIGFmdGVyIGFuIGVsZW1lbnQgaGFzIGJlZW4gZXhwb3NlZAogICAgICB0ZW1wbGF0ZSA6IHsgLy8gSFRNTCBzZWdtZW50cyBmb3IgdGlwIGxheW91dAogICAgICAgIGxpbmsgICAgOiAnPGEgaHJlZj0iI2Nsb3NlIiBjbGFzcz0iam95cmlkZS1jbG9zZS10aXAiPiZ0aW1lczs8L2E+JywKICAgICAgICB0aW1lciAgIDogJzxkaXYgY2xhc3M9ImpveXJpZGUtdGltZXItaW5kaWNhdG9yLXdyYXAiPjxzcGFuIGNsYXNzPSJqb3lyaWRlLXRpbWVyLWluZGljYXRvciI+PC9zcGFuPjwvZGl2PicsCiAgICAgICAgdGlwICAgICA6ICc8ZGl2IGNsYXNzPSJqb3lyaWRlLXRpcC1ndWlkZSI+PHNwYW4gY2xhc3M9ImpveXJpZGUtbnViIj48L3NwYW4+PC9kaXY+JywKICAgICAgICB3cmFwcGVyIDogJzxkaXYgY2xhc3M9ImpveXJpZGUtY29udGVudC13cmFwcGVyIj48L2Rpdj4nLAogICAgICAgIGJ1dHRvbiAgOiAnPGEgaHJlZj0iIyIgY2xhc3M9InNtYWxsIGJ1dHRvbiBqb3lyaWRlLW5leHQtdGlwIj48L2E+JywKICAgICAgICBtb2RhbCAgIDogJzxkaXYgY2xhc3M9ImpveXJpZGUtbW9kYWwtYmciPjwvZGl2PicsCiAgICAgICAgZXhwb3NlICA6ICc8ZGl2IGNsYXNzPSJqb3lyaWRlLWV4cG9zZS13cmFwcGVyIj48L2Rpdj4nLAogICAgICAgIGV4cG9zZV9jb3ZlcjogJzxkaXYgY2xhc3M9ImpveXJpZGUtZXhwb3NlLWNvdmVyIj48L2Rpdj4nCiAgICAgIH0sCiAgICAgIGV4cG9zZV9hZGRfY2xhc3MgOiAnJyAvLyBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgY2xhc3MgbmFtZXMgdG8gYmUgYWRkZWQgdG8gZXhwb3NlZCBlbGVtZW50CiAgICB9LAoKICAgIGluaXQgOiBmdW5jdGlvbiAoc2NvcGUsIG1ldGhvZCwgb3B0aW9ucykgewogICAgICBGb3VuZGF0aW9uLmluaGVyaXQodGhpcywgJ3Rocm90dGxlIGRlbGF5Jyk7CgogICAgICB0aGlzLnNldHRpbmdzID0gdGhpcy5kZWZhdWx0czsKCiAgICAgIHRoaXMuYmluZGluZ3MobWV0aG9kLCBvcHRpb25zKQogICAgfSwKCiAgICBldmVudHMgOiBmdW5jdGlvbiAoKSB7CiAgICAgIHZhciBzZWxmID0gdGhpczsKCiAgICAgICQodGhpcy5zY29wZSkKICAgICAgICAub2ZmKCcuam95cmlkZScpCiAgICAgICAgLm9uKCdjbGljay5mbmR0bi5qb3lyaWRlJywgJy5qb3lyaWRlLW5leHQtdGlwLCAuam95cmlkZS1tb2RhbC1iZycsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CgogICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuJGxpLm5leHQoKS5sZW5ndGggPCAxKSB7CiAgICAgICAgICAgIHRoaXMuZW5kKCk7CiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2V0dGluZ3MudGltZXIgPiAwKSB7CiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNldHRpbmdzLmF1dG9tYXRlKTsKICAgICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgICAgIHRoaXMuc2hvdygpOwogICAgICAgICAgICB0aGlzLnN0YXJ0VGltZXIoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuaGlkZSgpOwogICAgICAgICAgICB0aGlzLnNob3coKTsKICAgICAgICAgIH0KCiAgICAgICAgfS5iaW5kKHRoaXMpKQoKICAgICAgICAub24oJ2NsaWNrLmZuZHRuLmpveXJpZGUnLCAnLmpveXJpZGUtY2xvc2UtdGlwJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuZW5kKCk7CiAgICAgICAgfS5iaW5kKHRoaXMpKTsKCiAgICAgICQod2luZG93KQogICAgICAgIC5vZmYoJy5qb3lyaWRlJykKICAgICAgICAub24oJ3Jlc2l6ZS5mbmR0bi5qb3lyaWRlJywgc2VsZi50aHJvdHRsZShmdW5jdGlvbiAoKSB7CiAgICAgICAgICBpZiAoJCgnW2RhdGEtam95cmlkZV0nKS5sZW5ndGggPiAwICYmIHNlbGYuc2V0dGluZ3MuJG5leHRfdGlwKSB7CiAgICAgICAgICAgIGlmIChzZWxmLnNldHRpbmdzLmV4cG9zZWQubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgIHZhciAkZWxzID0gJChzZWxmLnNldHRpbmdzLmV4cG9zZWQpOwoKICAgICAgICAgICAgICAkZWxzLmVhY2goZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsKICAgICAgICAgICAgICAgIHNlbGYudW5fZXhwb3NlKCR0aGlzKTsKICAgICAgICAgICAgICAgIHNlbGYuZXhwb3NlKCR0aGlzKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHNlbGYuaXNfcGhvbmUoKSkgewogICAgICAgICAgICAgIHNlbGYucG9zX3Bob25lKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgc2VsZi5wb3NfZGVmYXVsdChmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LCAxMDApKTsKICAgIH0sCgogICAgc3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgIHZhciBzZWxmID0gdGhpcywKICAgICAgICAgICR0aGlzID0gJCgnW2RhdGEtam95cmlkZV0nLCB0aGlzLnNjb3BlKSwKICAgICAgICAgIGludGVnZXJfc2V0dGluZ3MgPSBbJ3RpbWVyJywgJ3Njcm9sbFNwZWVkJywgJ3N0YXJ0T2Zmc2V0JywgJ3RpcEFuaW1hdGlvbkZhZGVTcGVlZCcsICdjb29raWVFeHBpcmVzJ10sCiAgICAgICAgICBpbnRfc2V0dGluZ3NfY291bnQgPSBpbnRlZ2VyX3NldHRpbmdzLmxlbmd0aDsKCiAgICAgIGlmICghJHRoaXMubGVuZ3RoID4gMCkgcmV0dXJuOwoKICAgICAgaWYgKCF0aGlzLnNldHRpbmdzLmluaXQpIHRoaXMuZXZlbnRzKCk7CgogICAgICB0aGlzLnNldHRpbmdzID0gJHRoaXMuZGF0YSgnam95cmlkZS1pbml0Jyk7CgogICAgICAvLyBub24gY29uZmlndXJlYWJsZSBzZXR0aW5ncwogICAgICB0aGlzLnNldHRpbmdzLiRjb250ZW50X2VsID0gJHRoaXM7CiAgICAgIHRoaXMuc2V0dGluZ3MuJGJvZHkgPSAkKHRoaXMuc2V0dGluZ3MudGlwX2NvbnRhaW5lcik7CiAgICAgIHRoaXMuc2V0dGluZ3MuYm9keV9vZmZzZXQgPSAkKHRoaXMuc2V0dGluZ3MudGlwX2NvbnRhaW5lcikucG9zaXRpb24oKTsKICAgICAgdGhpcy5zZXR0aW5ncy4kdGlwX2NvbnRlbnQgPSB0aGlzLnNldHRpbmdzLiRjb250ZW50X2VsLmZpbmQoJz4gbGknKTsKICAgICAgdGhpcy5zZXR0aW5ncy5wYXVzZWQgPSBmYWxzZTsKICAgICAgdGhpcy5zZXR0aW5ncy5hdHRlbXB0cyA9IDA7CgogICAgICAvLyBjYW4gd2UgY3JlYXRlIGNvb2tpZXM/CiAgICAgIGlmICh0eXBlb2YgJC5jb29raWUgIT09ICdmdW5jdGlvbicpIHsKICAgICAgICB0aGlzLnNldHRpbmdzLmNvb2tpZV9tb25zdGVyID0gZmFsc2U7CiAgICAgIH0KCiAgICAgIC8vIGdlbmVyYXRlIHRoZSB0aXBzIGFuZCBpbnNlcnQgaW50byBkb20uCiAgICAgIGlmICghdGhpcy5zZXR0aW5ncy5jb29raWVfbW9uc3RlciB8fCB0aGlzLnNldHRpbmdzLmNvb2tpZV9tb25zdGVyICYmICQuY29va2llKHRoaXMuc2V0dGluZ3MuY29va2llX25hbWUpID09PSBudWxsKSB7CiAgICAgICAgdGhpcy5zZXR0aW5ncy4kdGlwX2NvbnRlbnQuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHsKICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7CiAgICAgICAgICB0aGlzLnNldHRpbmdzID0gJC5leHRlbmQoe30sIHNlbGYuZGVmYXVsdHMsIHNlbGYuZGF0YV9vcHRpb25zKCR0aGlzKSkKCiAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBzZXR0aW5ncyBwYXJzZWQgZnJvbSBkYXRhX29wdGlvbnMgYXJlIGludGVnZXJzIHdoZXJlIG5lY2Vzc2FyeQogICAgICAgICAgZm9yICh2YXIgaSA9IGludF9zZXR0aW5nc19jb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgIHNlbGYuc2V0dGluZ3NbaW50ZWdlcl9zZXR0aW5nc1tpXV0gPSBwYXJzZUludChzZWxmLnNldHRpbmdzW2ludGVnZXJfc2V0dGluZ3NbaV1dLCAxMCk7CiAgICAgICAgICB9CiAgICAgICAgICBzZWxmLmNyZWF0ZSh7JGxpIDogJHRoaXMsIGluZGV4IDogaW5kZXh9KTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gc2hvdyBmaXJzdCB0aXAKICAgICAgICBpZiAoIXRoaXMuc2V0dGluZ3Muc3RhcnRfdGltZXJfb25fY2xpY2sgJiYgdGhpcy5zZXR0aW5ncy50aW1lciA+IDApIHsKICAgICAgICAgIHRoaXMuc2hvdygnaW5pdCcpOwogICAgICAgICAgdGhpcy5zdGFydFRpbWVyKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc2hvdygnaW5pdCcpOwogICAgICAgIH0KCiAgICAgIH0KICAgIH0sCgogICAgcmVzdW1lIDogZnVuY3Rpb24gKCkgewogICAgICB0aGlzLnNldF9saSgpOwogICAgICB0aGlzLnNob3coKTsKICAgIH0sCgogICAgdGlwX3RlbXBsYXRlIDogZnVuY3Rpb24gKG9wdHMpIHsKICAgICAgdmFyICRibGFuaywgY29udGVudDsKCiAgICAgIG9wdHMudGlwX2NsYXNzID0gb3B0cy50aXBfY2xhc3MgfHwgJyc7CgogICAgICAkYmxhbmsgPSAkKHRoaXMuc2V0dGluZ3MudGVtcGxhdGUudGlwKS5hZGRDbGFzcyhvcHRzLnRpcF9jbGFzcyk7CiAgICAgIGNvbnRlbnQgPSAkLnRyaW0oJChvcHRzLmxpKS5odG1sKCkpICsKICAgICAgICB0aGlzLmJ1dHRvbl90ZXh0KG9wdHMuYnV0dG9uX3RleHQpICsKICAgICAgICB0aGlzLnNldHRpbmdzLnRlbXBsYXRlLmxpbmsgKwogICAgICAgIHRoaXMudGltZXJfaW5zdGFuY2Uob3B0cy5pbmRleCk7CgogICAgICAkYmxhbmsuYXBwZW5kKCQodGhpcy5zZXR0aW5ncy50ZW1wbGF0ZS53cmFwcGVyKSk7CiAgICAgICRibGFuay5maXJzdCgpLmF0dHIoJ2RhdGEtaW5kZXgnLCBvcHRzLmluZGV4KTsKICAgICAgJCgnLmpveXJpZGUtY29udGVudC13cmFwcGVyJywgJGJsYW5rKS5hcHBlbmQoY29udGVudCk7CgogICAgICByZXR1cm4gJGJsYW5rWzBdOwogICAgfSwKCiAgICB0aW1lcl9pbnN0YW5jZSA6IGZ1bmN0aW9uIChpbmRleCkgewogICAgICB2YXIgdHh0OwoKICAgICAgaWYgKChpbmRleCA9PT0gMCAmJiB0aGlzLnNldHRpbmdzLnN0YXJ0X3RpbWVyX29uX2NsaWNrICYmIHRoaXMuc2V0dGluZ3MudGltZXIgPiAwKSB8fCB0aGlzLnNldHRpbmdzLnRpbWVyID09PSAwKSB7CiAgICAgICAgdHh0ID0gJyc7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdHh0ID0gJCh0aGlzLnNldHRpbmdzLnRlbXBsYXRlLnRpbWVyKVswXS5vdXRlckhUTUw7CiAgICAgIH0KICAgICAgcmV0dXJuIHR4dDsKICAgIH0sCgogICAgYnV0dG9uX3RleHQgOiBmdW5jdGlvbiAodHh0KSB7CiAgICAgIGlmICh0aGlzLnNldHRpbmdzLm5leHRfYnV0dG9uKSB7CiAgICAgICAgdHh0ID0gJC50cmltKHR4dCkgfHwgJ05leHQnOwogICAgICAgIHR4dCA9ICQodGhpcy5zZXR0aW5ncy50ZW1wbGF0ZS5idXR0b24pLmFwcGVuZCh0eHQpWzBdLm91dGVySFRNTDsKICAgICAgfSBlbHNlIHsKICAgICAgICB0eHQgPSAnJzsKICAgICAgfQogICAgICByZXR1cm4gdHh0OwogICAgfSwKCiAgICBjcmVhdGUgOiBmdW5jdGlvbiAob3B0cykgewogICAgICB2YXIgYnV0dG9uVGV4dCA9IG9wdHMuJGxpLmF0dHIoJ2RhdGEtYnV0dG9uJykgfHwgb3B0cy4kbGkuYXR0cignZGF0YS10ZXh0JyksCiAgICAgICAgdGlwQ2xhc3MgPSBvcHRzLiRsaS5hdHRyKCdjbGFzcycpLAogICAgICAgICR0aXBfY29udGVudCA9ICQodGhpcy50aXBfdGVtcGxhdGUoewogICAgICAgICAgdGlwX2NsYXNzIDogdGlwQ2xhc3MsCiAgICAgICAgICBpbmRleCA6IG9wdHMuaW5kZXgsCiAgICAgICAgICBidXR0b25fdGV4dCA6IGJ1dHRvblRleHQsCiAgICAgICAgICBsaSA6IG9wdHMuJGxpCiAgICAgICAgfSkpOwoKICAgICAgJCh0aGlzLnNldHRpbmdzLnRpcF9jb250YWluZXIpLmFwcGVuZCgkdGlwX2NvbnRlbnQpOwogICAgfSwKCiAgICBzaG93IDogZnVuY3Rpb24gKGluaXQpIHsKICAgICAgdmFyICR0aW1lciA9IG51bGw7CgogICAgICAvLyBhcmUgd2UgcGF1c2VkPwogICAgICBpZiAodGhpcy5zZXR0aW5ncy4kbGkgPT09IHVuZGVmaW5lZAogICAgICAgIHx8ICgkLmluQXJyYXkodGhpcy5zZXR0aW5ncy4kbGkuaW5kZXgoKSwgdGhpcy5zZXR0aW5ncy5wYXVzZV9hZnRlcikgPT09IC0xKSkgewoKICAgICAgICAvLyBkb24ndCBnbyB0byB0aGUgbmV4dCBsaSBpZiB0aGUgdG91ciB3YXMgcGF1c2VkCiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MucGF1c2VkKSB7CiAgICAgICAgICB0aGlzLnNldHRpbmdzLnBhdXNlZCA9IGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnNldF9saShpbml0KTsKICAgICAgICB9CgogICAgICAgIHRoaXMuc2V0dGluZ3MuYXR0ZW1wdHMgPSAwOwoKICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy4kbGkubGVuZ3RoICYmIHRoaXMuc2V0dGluZ3MuJHRhcmdldC5sZW5ndGggPiAwKSB7CiAgICAgICAgICBpZiAoaW5pdCkgeyAvL3J1biB3aGVuIHdlIGZpcnN0IHN0YXJ0CiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MucHJlX3JpZGVfY2FsbGJhY2sodGhpcy5zZXR0aW5ncy4kbGkuaW5kZXgoKSwgdGhpcy5zZXR0aW5ncy4kbmV4dF90aXApOwogICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5tb2RhbCkgewogICAgICAgICAgICAgIHRoaXMuc2hvd19tb2RhbCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgdGhpcy5zZXR0aW5ncy5wcmVfc3RlcF9jYWxsYmFjayh0aGlzLnNldHRpbmdzLiRsaS5pbmRleCgpLCB0aGlzLnNldHRpbmdzLiRuZXh0X3RpcCk7CgogICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MubW9kYWwgJiYgdGhpcy5zZXR0aW5ncy5leHBvc2UpIHsKICAgICAgICAgICAgdGhpcy5leHBvc2UoKTsKICAgICAgICAgIH0KCiAgICAgICAgICB0aGlzLnNldHRpbmdzLnRpcF9zZXR0aW5ncyA9ICQuZXh0ZW5kKHt9LCB0aGlzLnNldHRpbmdzLCB0aGlzLmRhdGFfb3B0aW9ucyh0aGlzLnNldHRpbmdzLiRsaSkpOwoKICAgICAgICAgIHRoaXMuc2V0dGluZ3MudGltZXIgPSBwYXJzZUludCh0aGlzLnNldHRpbmdzLnRpbWVyLCAxMCk7CgogICAgICAgICAgdGhpcy5zZXR0aW5ncy50aXBfc2V0dGluZ3MudGlwX2xvY2F0aW9uX3BhdHRlcm4gPSB0aGlzLnNldHRpbmdzLnRpcF9sb2NhdGlvbl9wYXR0ZXJuc1t0aGlzLnNldHRpbmdzLnRpcF9zZXR0aW5ncy50aXBfbG9jYXRpb25dOwoKICAgICAgICAgIC8vIHNjcm9sbCBpZiBub3QgbW9kYWwKICAgICAgICAgIGlmICghL2JvZHkvaS50ZXN0KHRoaXMuc2V0dGluZ3MuJHRhcmdldC5zZWxlY3RvcikpIHsKICAgICAgICAgICAgdGhpcy5zY3JvbGxfdG8oKTsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAodGhpcy5pc19waG9uZSgpKSB7CiAgICAgICAgICAgIHRoaXMucG9zX3Bob25lKHRydWUpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5wb3NfZGVmYXVsdCh0cnVlKTsKICAgICAgICAgIH0KCiAgICAgICAgICAkdGltZXIgPSB0aGlzLnNldHRpbmdzLiRuZXh0X3RpcC5maW5kKCcuam95cmlkZS10aW1lci1pbmRpY2F0b3InKTsKCiAgICAgICAgICBpZiAoL3BvcC9pLnRlc3QodGhpcy5zZXR0aW5ncy50aXBfYW5pbWF0aW9uKSkgewoKICAgICAgICAgICAgJHRpbWVyLndpZHRoKDApOwoKICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MudGltZXIgPiAwKSB7CgogICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MuJG5leHRfdGlwLnNob3coKTsKCiAgICAgICAgICAgICAgdGhpcy5kZWxheShmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAkdGltZXIuYW5pbWF0ZSh7CiAgICAgICAgICAgICAgICAgIHdpZHRoOiAkdGltZXIucGFyZW50KCkud2lkdGgoKQogICAgICAgICAgICAgICAgfSwgdGhpcy5zZXR0aW5ncy50aW1lciwgJ2xpbmVhcicpOwogICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgdGhpcy5zZXR0aW5ncy50aXBfYW5pbWF0aW9uX2ZhZGVfc3BlZWQpOwoKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aGlzLnNldHRpbmdzLiRuZXh0X3RpcC5zaG93KCk7CgogICAgICAgICAgICB9CgoKICAgICAgICAgIH0gZWxzZSBpZiAoL2ZhZGUvaS50ZXN0KHRoaXMuc2V0dGluZ3MudGlwX2FuaW1hdGlvbikpIHsKCiAgICAgICAgICAgICR0aW1lci53aWR0aCgwKTsKCiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLnRpbWVyID4gMCkgewoKICAgICAgICAgICAgICB0aGlzLnNldHRpbmdzLiRuZXh0X3RpcAogICAgICAgICAgICAgICAgLmZhZGVJbih0aGlzLnNldHRpbmdzLnRpcF9hbmltYXRpb25fZmFkZV9zcGVlZCkKICAgICAgICAgICAgICAgIC5zaG93KCk7CgogICAgICAgICAgICAgIHRoaXMuZGVsYXkoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgJHRpbWVyLmFuaW1hdGUoewogICAgICAgICAgICAgICAgICB3aWR0aDogJHRpbWVyLnBhcmVudCgpLndpZHRoKCkKICAgICAgICAgICAgICAgIH0sIHRoaXMuc2V0dGluZ3MudGltZXIsICdsaW5lYXInKTsKICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIHRoaXMuc2V0dGluZ3MudGlwX2FuaW1hdGlvbl9mYWRlU3BlZWQpOwoKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aGlzLnNldHRpbmdzLiRuZXh0X3RpcC5mYWRlSW4odGhpcy5zZXR0aW5ncy50aXBfYW5pbWF0aW9uX2ZhZGVfc3BlZWQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgdGhpcy5zZXR0aW5ncy4kY3VycmVudF90aXAgPSB0aGlzLnNldHRpbmdzLiRuZXh0X3RpcDsKCiAgICAgICAgLy8gc2tpcCBub24tZXhpc3RhbnQgdGFyZ2V0cwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZXR0aW5ncy4kbGkgJiYgdGhpcy5zZXR0aW5ncy4kdGFyZ2V0Lmxlbmd0aCA8IDEpIHsKCiAgICAgICAgICB0aGlzLnNob3coKTsKCiAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICB0aGlzLmVuZCgpOwoKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CgogICAgICAgIHRoaXMuc2V0dGluZ3MucGF1c2VkID0gdHJ1ZTsKCiAgICAgIH0KCiAgICB9LAoKICAgIGlzX3Bob25lIDogZnVuY3Rpb24gKCkgewogICAgICByZXR1cm4gbWF0Y2hNZWRpYShGb3VuZGF0aW9uLm1lZGlhX3F1ZXJpZXMuc21hbGwpLm1hdGNoZXMgJiYKICAgICAgICAhbWF0Y2hNZWRpYShGb3VuZGF0aW9uLm1lZGlhX3F1ZXJpZXMubWVkaXVtKS5tYXRjaGVzOwogICAgfSwKCiAgICBoaWRlIDogZnVuY3Rpb24gKCkgewogICAgICBpZiAodGhpcy5zZXR0aW5ncy5tb2RhbCAmJiB0aGlzLnNldHRpbmdzLmV4cG9zZSkgewogICAgICAgIHRoaXMudW5fZXhwb3NlKCk7CiAgICAgIH0KCiAgICAgIGlmICghdGhpcy5zZXR0aW5ncy5tb2RhbCkgewogICAgICAgICQoJy5qb3lyaWRlLW1vZGFsLWJnJykuaGlkZSgpOwogICAgICB9CgogICAgICAvLyBQcmV2ZW50IHNjcm9sbCBib3VuY2luZy4uLndhaXQgdG8gcmVtb3ZlIGZyb20gbGF5b3V0CiAgICAgIHRoaXMuc2V0dGluZ3MuJGN1cnJlbnRfdGlwLmNzcygndmlzaWJpbGl0eScsICdoaWRkZW4nKTsKICAgICAgc2V0VGltZW91dCgkLnByb3h5KGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuaGlkZSgpOwogICAgICAgIHRoaXMuY3NzKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTsKICAgICAgfSwgdGhpcy5zZXR0aW5ncy4kY3VycmVudF90aXApLCAwKTsKICAgICAgdGhpcy5zZXR0aW5ncy5wb3N0X3N0ZXBfY2FsbGJhY2sodGhpcy5zZXR0aW5ncy4kbGkuaW5kZXgoKSwKICAgICAgICB0aGlzLnNldHRpbmdzLiRjdXJyZW50X3RpcCk7CiAgICB9LAoKICAgIHNldF9saSA6IGZ1bmN0aW9uIChpbml0KSB7CiAgICAgIGlmIChpbml0KSB7CiAgICAgICAgdGhpcy5zZXR0aW5ncy4kbGkgPSB0aGlzLnNldHRpbmdzLiR0aXBfY29udGVudC5lcSh0aGlzLnNldHRpbmdzLnN0YXJ0X29mZnNldCk7CiAgICAgICAgdGhpcy5zZXRfbmV4dF90aXAoKTsKICAgICAgICB0aGlzLnNldHRpbmdzLiRjdXJyZW50X3RpcCA9IHRoaXMuc2V0dGluZ3MuJG5leHRfdGlwOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuc2V0dGluZ3MuJGxpID0gdGhpcy5zZXR0aW5ncy4kbGkubmV4dCgpOwogICAgICAgIHRoaXMuc2V0X25leHRfdGlwKCk7CiAgICAgIH0KCiAgICAgIHRoaXMuc2V0X3RhcmdldCgpOwogICAgfSwKCiAgICBzZXRfbmV4dF90aXAgOiBmdW5jdGlvbiAoKSB7CiAgICAgIHRoaXMuc2V0dGluZ3MuJG5leHRfdGlwID0gJCgiLmpveXJpZGUtdGlwLWd1aWRlIikuZXEodGhpcy5zZXR0aW5ncy4kbGkuaW5kZXgoKSk7CiAgICAgIHRoaXMuc2V0dGluZ3MuJG5leHRfdGlwLmRhdGEoJ2Nsb3NlZCcsICcnKTsKICAgIH0sCgogICAgc2V0X3RhcmdldCA6IGZ1bmN0aW9uICgpIHsKICAgICAgdmFyIGNsID0gdGhpcy5zZXR0aW5ncy4kbGkuYXR0cignZGF0YS1jbGFzcycpLAogICAgICAgICAgaWQgPSB0aGlzLnNldHRpbmdzLiRsaS5hdHRyKCdkYXRhLWlkJyksCiAgICAgICAgICAkc2VsID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICBpZiAoaWQpIHsKICAgICAgICAgICAgICByZXR1cm4gJChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGNsKSB7CiAgICAgICAgICAgICAgcmV0dXJuICQoJy4nICsgY2wpLmZpcnN0KCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcmV0dXJuICQoJ2JvZHknKTsKICAgICAgICAgICAgfQogICAgICAgICAgfTsKCiAgICAgIHRoaXMuc2V0dGluZ3MuJHRhcmdldCA9ICRzZWwoKTsKICAgIH0sCgogICAgc2Nyb2xsX3RvIDogZnVuY3Rpb24gKCkgewogICAgICB2YXIgd2luZG93X2hhbGYsIHRpcE9mZnNldDsKCiAgICAgIHdpbmRvd19oYWxmID0gJCh3aW5kb3cpLmhlaWdodCgpIC8gMjsKICAgICAgdGlwT2Zmc2V0ID0gTWF0aC5jZWlsKHRoaXMuc2V0dGluZ3MuJHRhcmdldC5vZmZzZXQoKS50b3AgLSB3aW5kb3dfaGFsZiArIHRoaXMuc2V0dGluZ3MuJG5leHRfdGlwLm91dGVySGVpZ2h0KCkpOwoKICAgICAgaWYgKHRpcE9mZnNldCA+IDApIHsKICAgICAgICAkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7CiAgICAgICAgICBzY3JvbGxUb3A6IHRpcE9mZnNldAogICAgICAgIH0sIHRoaXMuc2V0dGluZ3Muc2Nyb2xsX3NwZWVkLCAnc3dpbmcnKTsKICAgICAgfQogICAgfSwKCiAgICBwYXVzZWQgOiBmdW5jdGlvbiAoKSB7CiAgICAgIHJldHVybiAoJC5pbkFycmF5KCh0aGlzLnNldHRpbmdzLiRsaS5pbmRleCgpICsgMSksIHRoaXMuc2V0dGluZ3MucGF1c2VfYWZ0ZXIpID09PSAtMSk7CiAgICB9LAoKICAgIHJlc3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgIHRoaXMuaGlkZSgpOwogICAgICB0aGlzLnNldHRpbmdzLiRsaSA9IHVuZGVmaW5lZDsKICAgICAgdGhpcy5zaG93KCdpbml0Jyk7CiAgICB9LAoKICAgIHBvc19kZWZhdWx0IDogZnVuY3Rpb24gKGluaXQsIHJlc2l6aW5nKSB7CiAgICAgIHZhciBoYWxmX2ZvbGQgPSBNYXRoLmNlaWwoJCh3aW5kb3cpLmhlaWdodCgpIC8gMiksCiAgICAgICAgICB0aXBfcG9zaXRpb24gPSB0aGlzLnNldHRpbmdzLiRuZXh0X3RpcC5vZmZzZXQoKSwKICAgICAgICAgICRudWIgPSB0aGlzLnNldHRpbmdzLiRuZXh0X3RpcC5maW5kKCcuam95cmlkZS1udWInKSwKICAgICAgICAgIG51Yl93aWR0aCA9IE1hdGguY2VpbCgkbnViLm91dGVyV2lkdGgoKSAvIDIpLAogICAgICAgICAgbnViX2hlaWdodCA9IE1hdGguY2VpbCgkbnViLm91dGVySGVpZ2h0KCkgLyAyKSwKICAgICAgICAgIHRvZ2dsZSA9IGluaXQgfHwgZmFsc2U7CgogICAgICAvLyB0aXAgbXVzdCBub3QgYmUgImRpc3BsYXk6IG5vbmUiIHRvIGNhbGN1bGF0ZSBwb3NpdGlvbgogICAgICBpZiAodG9nZ2xlKSB7CiAgICAgICAgdGhpcy5zZXR0aW5ncy4kbmV4dF90aXAuY3NzKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpOwogICAgICAgIHRoaXMuc2V0dGluZ3MuJG5leHRfdGlwLnNob3coKTsKICAgICAgfQoKICAgICAgaWYgKHR5cGVvZiByZXNpemluZyA9PT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICByZXNpemluZyA9IGZhbHNlOwogICAgICB9CgogICAgICBpZiAoIS9ib2R5L2kudGVzdCh0aGlzLnNldHRpbmdzLiR0YXJnZXQuc2VsZWN0b3IpKSB7CgogICAgICAgICAgaWYgKHRoaXMuYm90dG9tKCkpIHsKICAgICAgICAgICAgdmFyIGxlZnRPZmZzZXQgPSB0aGlzLnNldHRpbmdzLiR0YXJnZXQub2Zmc2V0KCkubGVmdDsKICAgICAgICAgICAgaWYgKEZvdW5kYXRpb24ucnRsKSB7CiAgICAgICAgICAgICAgbGVmdE9mZnNldCA9IHRoaXMuc2V0dGluZ3MuJHRhcmdldC5vZmZzZXQoKS53aWR0aCAtIHRoaXMuc2V0dGluZ3MuJG5leHRfdGlwLndpZHRoKCkgKyBsZWZ0T2Zmc2V0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MuJG5leHRfdGlwLmNzcyh7CiAgICAgICAgICAgICAgdG9wOiAodGhpcy5zZXR0aW5ncy4kdGFyZ2V0Lm9mZnNldCgpLnRvcCArIG51Yl9oZWlnaHQgKyB0aGlzLnNldHRpbmdzLiR0YXJnZXQub3V0ZXJIZWlnaHQoKSksCiAgICAgICAgICAgICAgbGVmdDogbGVmdE9mZnNldH0pOwoKICAgICAgICAgICAgdGhpcy5udWJfcG9zaXRpb24oJG51YiwgdGhpcy5zZXR0aW5ncy50aXBfc2V0dGluZ3MubnViX3Bvc2l0aW9uLCAndG9wJyk7CgogICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRvcCgpKSB7CiAgICAgICAgICAgIHZhciBsZWZ0T2Zmc2V0ID0gdGhpcy5zZXR0aW5ncy4kdGFyZ2V0Lm9mZnNldCgpLmxlZnQ7CiAgICAgICAgICAgIGlmIChGb3VuZGF0aW9uLnJ0bCkgewogICAgICAgICAgICAgIGxlZnRPZmZzZXQgPSB0aGlzLnNldHRpbmdzLiR0YXJnZXQub2Zmc2V0KCkud2lkdGggLSB0aGlzLnNldHRpbmdzLiRuZXh0X3RpcC53aWR0aCgpICsgbGVmdE9mZnNldDsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnNldHRpbmdzLiRuZXh0X3RpcC5jc3MoewogICAgICAgICAgICAgIHRvcDogKHRoaXMuc2V0dGluZ3MuJHRhcmdldC5vZmZzZXQoKS50b3AgLSB0aGlzLnNldHRpbmdzLiRuZXh0X3RpcC5vdXRlckhlaWdodCgpIC0gbnViX2hlaWdodCksCiAgICAgICAgICAgICAgbGVmdDogbGVmdE9mZnNldH0pOwoKICAgICAgICAgICAgdGhpcy5udWJfcG9zaXRpb24oJG51YiwgdGhpcy5zZXR0aW5ncy50aXBfc2V0dGluZ3MubnViX3Bvc2l0aW9uLCAnYm90dG9tJyk7CgogICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJpZ2h0KCkpIHsKCiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MuJG5leHRfdGlwLmNzcyh7CiAgICAgICAgICAgICAgdG9wOiB0aGlzLnNldHRpbmdzLiR0YXJnZXQub2Zmc2V0KCkudG9wLAogICAgICAgICAgICAgIGxlZnQ6ICh0aGlzLm91dGVyV2lkdGgodGhpcy5zZXR0aW5ncy4kdGFyZ2V0KSArIHRoaXMuc2V0dGluZ3MuJHRhcmdldC5vZmZzZXQoKS5sZWZ0ICsgbnViX3dpZHRoKX0pOwoKICAgICAgICAgICAgdGhpcy5udWJfcG9zaXRpb24oJG51YiwgdGhpcy5zZXR0aW5ncy50aXBfc2V0dGluZ3MubnViX3Bvc2l0aW9uLCAnbGVmdCcpOwoKICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5sZWZ0KCkpIHsKCiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MuJG5leHRfdGlwLmNzcyh7CiAgICAgICAgICAgICAgdG9wOiB0aGlzLnNldHRpbmdzLiR0YXJnZXQub2Zmc2V0KCkudG9wLAogICAgICAgICAgICAgIGxlZnQ6ICh0aGlzLnNldHRpbmdzLiR0YXJnZXQub2Zmc2V0KCkubGVmdCAtIHRoaXMub3V0ZXJXaWR0aCh0aGlzLnNldHRpbmdzLiRuZXh0X3RpcCkgLSBudWJfd2lkdGgpfSk7CgogICAgICAgICAgICB0aGlzLm51Yl9wb3NpdGlvbigkbnViLCB0aGlzLnNldHRpbmdzLnRpcF9zZXR0aW5ncy5udWJfcG9zaXRpb24sICdyaWdodCcpOwoKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoIXRoaXMudmlzaWJsZSh0aGlzLmNvcm5lcnModGhpcy5zZXR0aW5ncy4kbmV4dF90aXApKSAmJiB0aGlzLnNldHRpbmdzLmF0dGVtcHRzIDwgdGhpcy5zZXR0aW5ncy50aXBfc2V0dGluZ3MudGlwX2xvY2F0aW9uX3BhdHRlcm4ubGVuZ3RoKSB7CgogICAgICAgICAgICAkbnViLnJlbW92ZUNsYXNzKCdib3R0b20nKQogICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygndG9wJykKICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3JpZ2h0JykKICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ2xlZnQnKTsKCiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MudGlwX3NldHRpbmdzLnRpcF9sb2NhdGlvbiA9IHRoaXMuc2V0dGluZ3MudGlwX3NldHRpbmdzLnRpcF9sb2NhdGlvbl9wYXR0ZXJuW3RoaXMuc2V0dGluZ3MuYXR0ZW1wdHNdOwoKICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5hdHRlbXB0cysrOwoKICAgICAgICAgICAgdGhpcy5wb3NfZGVmYXVsdCgpOwoKICAgICAgICAgIH0KCiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZXR0aW5ncy4kbGkubGVuZ3RoKSB7CgogICAgICAgIHRoaXMucG9zX21vZGFsKCRudWIpOwoKICAgICAgfQoKICAgICAgaWYgKHRvZ2dsZSkgewogICAgICAgIHRoaXMuc2V0dGluZ3MuJG5leHRfdGlwLmhpZGUoKTsKICAgICAgICB0aGlzLnNldHRpbmdzLiRuZXh0X3RpcC5jc3MoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpOwogICAgICB9CgogICAgfSwKCiAgICBwb3NfcGhvbmUgOiBmdW5jdGlvbiAoaW5pdCkgewogICAgICB2YXIgdGlwX2hlaWdodCA9IHRoaXMuc2V0dGluZ3MuJG5leHRfdGlwLm91dGVySGVpZ2h0KCksCiAgICAgICAgICB0aXBfb2Zmc2V0ID0gdGhpcy5zZXR0aW5ncy4kbmV4dF90aXAub2Zmc2V0KCksCiAgICAgICAgICB0YXJnZXRfaGVpZ2h0ID0gdGhpcy5zZXR0aW5ncy4kdGFyZ2V0Lm91dGVySGVpZ2h0KCksCiAgICAgICAgICAkbnViID0gJCgnLmpveXJpZGUtbnViJywgdGhpcy5zZXR0aW5ncy4kbmV4dF90aXApLAogICAgICAgICAgbnViX2hlaWdodCA9IE1hdGguY2VpbCgkbnViLm91dGVySGVpZ2h0KCkgLyAyKSwKICAgICAgICAgIHRvZ2dsZSA9IGluaXQgfHwgZmFsc2U7CgogICAgICAkbnViLnJlbW92ZUNsYXNzKCdib3R0b20nKQogICAgICAgIC5yZW1vdmVDbGFzcygndG9wJykKICAgICAgICAucmVtb3ZlQ2xhc3MoJ3JpZ2h0JykKICAgICAgICAucmVtb3ZlQ2xhc3MoJ2xlZnQnKTsKCiAgICAgIGlmICh0b2dnbGUpIHsKICAgICAgICB0aGlzLnNldHRpbmdzLiRuZXh0X3RpcC5jc3MoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7CiAgICAgICAgdGhpcy5zZXR0aW5ncy4kbmV4dF90aXAuc2hvdygpOwogICAgICB9CgogICAgICBpZiAoIS9ib2R5L2kudGVzdCh0aGlzLnNldHRpbmdzLiR0YXJnZXQuc2VsZWN0b3IpKSB7CgogICAgICAgIGlmICh0aGlzLnRvcCgpKSB7CgogICAgICAgICAgICB0aGlzLnNldHRpbmdzLiRuZXh0X3RpcC5vZmZzZXQoe3RvcDogdGhpcy5zZXR0aW5ncy4kdGFyZ2V0Lm9mZnNldCgpLnRvcCAtIHRpcF9oZWlnaHQgLSBudWJfaGVpZ2h0fSk7CiAgICAgICAgICAgICRudWIuYWRkQ2xhc3MoJ2JvdHRvbScpOwoKICAgICAgICB9IGVsc2UgewoKICAgICAgICAgIHRoaXMuc2V0dGluZ3MuJG5leHRfdGlwLm9mZnNldCh7dG9wOiB0aGlzLnNldHRpbmdzLiR0YXJnZXQub2Zmc2V0KCkudG9wICsgdGFyZ2V0X2hlaWdodCArIG51Yl9oZWlnaHR9KTsKICAgICAgICAgICRudWIuYWRkQ2xhc3MoJ3RvcCcpOwoKICAgICAgICB9CgogICAgICB9IGVsc2UgaWYgKHRoaXMuc2V0dGluZ3MuJGxpLmxlbmd0aCkgewogICAgICAgIHRoaXMucG9zX21vZGFsKCRudWIpOwogICAgICB9CgogICAgICBpZiAodG9nZ2xlKSB7CiAgICAgICAgdGhpcy5zZXR0aW5ncy4kbmV4dF90aXAuaGlkZSgpOwogICAgICAgIHRoaXMuc2V0dGluZ3MuJG5leHRfdGlwLmNzcygndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7CiAgICAgIH0KICAgIH0sCgogICAgcG9zX21vZGFsIDogZnVuY3Rpb24gKCRudWIpIHsKICAgICAgdGhpcy5jZW50ZXIoKTsKICAgICAgJG51Yi5oaWRlKCk7CgogICAgICB0aGlzLnNob3dfbW9kYWwoKTsKICAgIH0sCgogICAgc2hvd19tb2RhbCA6IGZ1bmN0aW9uICgpIHsKICAgICAgaWYgKCF0aGlzLnNldHRpbmdzLiRuZXh0X3RpcC5kYXRhKCdjbG9zZWQnKSkgewogICAgICAgIHZhciBqb3lyaWRlbW9kYWxiZyA9ICAkKCcuam95cmlkZS1tb2RhbC1iZycpOwogICAgICAgIGlmIChqb3lyaWRlbW9kYWxiZy5sZW5ndGggPCAxKSB7CiAgICAgICAgICAkKCdib2R5JykuYXBwZW5kKHRoaXMuc2V0dGluZ3MudGVtcGxhdGUubW9kYWwpLnNob3coKTsKICAgICAgICB9CgogICAgICAgIGlmICgvcG9wL2kudGVzdCh0aGlzLnNldHRpbmdzLnRpcF9hbmltYXRpb24pKSB7CiAgICAgICAgICAgIGpveXJpZGVtb2RhbGJnLnNob3coKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBqb3lyaWRlbW9kYWxiZy5mYWRlSW4odGhpcy5zZXR0aW5ncy50aXBfYW5pbWF0aW9uX2ZhZGVfc3BlZWQpOwogICAgICAgIH0KICAgICAgfQogICAgfSwKCiAgICBleHBvc2UgOiBmdW5jdGlvbiAoKSB7CiAgICAgIHZhciBleHBvc2UsCiAgICAgICAgICBleHBvc2VDb3ZlciwKICAgICAgICAgIGVsLAogICAgICAgICAgb3JpZ0NTUywKICAgICAgICAgIG9yaWdDbGFzc2VzLAogICAgICAgICAgcmFuZElkID0gJ2V4cG9zZS0nK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxMDAwMCk7CgogICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdIGluc3RhbmNlb2YgJCkgewogICAgICAgIGVsID0gYXJndW1lbnRzWzBdOwogICAgICB9IGVsc2UgaWYodGhpcy5zZXR0aW5ncy4kdGFyZ2V0ICYmICEvYm9keS9pLnRlc3QodGhpcy5zZXR0aW5ncy4kdGFyZ2V0LnNlbGVjdG9yKSl7CiAgICAgICAgZWwgPSB0aGlzLnNldHRpbmdzLiR0YXJnZXQ7CiAgICAgIH0gIGVsc2UgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgaWYoZWwubGVuZ3RoIDwgMSl7CiAgICAgICAgaWYod2luZG93LmNvbnNvbGUpewogICAgICAgICAgY29uc29sZS5lcnJvcignZWxlbWVudCBub3QgdmFsaWQnLCBlbCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgZXhwb3NlID0gJCh0aGlzLnNldHRpbmdzLnRlbXBsYXRlLmV4cG9zZSk7CiAgICAgIHRoaXMuc2V0dGluZ3MuJGJvZHkuYXBwZW5kKGV4cG9zZSk7CiAgICAgIGV4cG9zZS5jc3MoewogICAgICAgIHRvcDogZWwub2Zmc2V0KCkudG9wLAogICAgICAgIGxlZnQ6IGVsLm9mZnNldCgpLmxlZnQsCiAgICAgICAgd2lkdGg6IGVsLm91dGVyV2lkdGgodHJ1ZSksCiAgICAgICAgaGVpZ2h0OiBlbC5vdXRlckhlaWdodCh0cnVlKQogICAgICB9KTsKCiAgICAgIGV4cG9zZUNvdmVyID0gJCh0aGlzLnNldHRpbmdzLnRlbXBsYXRlLmV4cG9zZV9jb3Zlcik7CgogICAgICBvcmlnQ1NTID0gewogICAgICAgIHpJbmRleDogZWwuY3NzKCd6LWluZGV4JyksCiAgICAgICAgcG9zaXRpb246IGVsLmNzcygncG9zaXRpb24nKQogICAgICB9OwoKICAgICAgb3JpZ0NsYXNzZXMgPSBlbC5hdHRyKCdjbGFzcycpID09IG51bGwgPyAnJyA6IGVsLmF0dHIoJ2NsYXNzJyk7CgogICAgICBlbC5jc3MoJ3otaW5kZXgnLHBhcnNlSW50KGV4cG9zZS5jc3MoJ3otaW5kZXgnKSkrMSk7CgogICAgICBpZiAob3JpZ0NTUy5wb3NpdGlvbiA9PSAnc3RhdGljJykgewogICAgICAgIGVsLmNzcygncG9zaXRpb24nLCdyZWxhdGl2ZScpOwogICAgICB9CgogICAgICBlbC5kYXRhKCdleHBvc2UtY3NzJyxvcmlnQ1NTKTsKICAgICAgZWwuZGF0YSgnb3JpZy1jbGFzcycsIG9yaWdDbGFzc2VzKTsKICAgICAgZWwuYXR0cignY2xhc3MnLCBvcmlnQ2xhc3NlcyArICcgJyArIHRoaXMuc2V0dGluZ3MuZXhwb3NlX2FkZF9jbGFzcyk7CgogICAgICBleHBvc2VDb3Zlci5jc3MoewogICAgICAgIHRvcDogZWwub2Zmc2V0KCkudG9wLAogICAgICAgIGxlZnQ6IGVsLm9mZnNldCgpLmxlZnQsCiAgICAgICAgd2lkdGg6IGVsLm91dGVyV2lkdGgodHJ1ZSksCiAgICAgICAgaGVpZ2h0OiBlbC5vdXRlckhlaWdodCh0cnVlKQogICAgICB9KTsKCiAgICAgIGlmICh0aGlzLnNldHRpbmdzLm1vZGFsKSB0aGlzLnNob3dfbW9kYWwoKTsKCiAgICAgIHRoaXMuc2V0dGluZ3MuJGJvZHkuYXBwZW5kKGV4cG9zZUNvdmVyKTsKICAgICAgZXhwb3NlLmFkZENsYXNzKHJhbmRJZCk7CiAgICAgIGV4cG9zZUNvdmVyLmFkZENsYXNzKHJhbmRJZCk7CiAgICAgIGVsLmRhdGEoJ2V4cG9zZScsIHJhbmRJZCk7CiAgICAgIHRoaXMuc2V0dGluZ3MucG9zdF9leHBvc2VfY2FsbGJhY2sodGhpcy5zZXR0aW5ncy4kbGkuaW5kZXgoKSwgdGhpcy5zZXR0aW5ncy4kbmV4dF90aXAsIGVsKTsKICAgICAgdGhpcy5hZGRfZXhwb3NlZChlbCk7CiAgICB9LAoKICAgIHVuX2V4cG9zZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgdmFyIGV4cG9zZUlkLAogICAgICAgICAgZWwsCiAgICAgICAgICBleHBvc2UgLAogICAgICAgICAgb3JpZ0NTUywKICAgICAgICAgIG9yaWdDbGFzc2VzLAogICAgICAgICAgY2xlYXJBbGwgPSBmYWxzZTsKCiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gaW5zdGFuY2VvZiAkKSB7CiAgICAgICAgZWwgPSBhcmd1bWVudHNbMF07CiAgICAgIH0gZWxzZSBpZih0aGlzLnNldHRpbmdzLiR0YXJnZXQgJiYgIS9ib2R5L2kudGVzdCh0aGlzLnNldHRpbmdzLiR0YXJnZXQuc2VsZWN0b3IpKXsKICAgICAgICBlbCA9IHRoaXMuc2V0dGluZ3MuJHRhcmdldDsKICAgICAgfSAgZWxzZSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICBpZihlbC5sZW5ndGggPCAxKXsKICAgICAgICBpZiAod2luZG93LmNvbnNvbGUpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2VsZW1lbnQgbm90IHZhbGlkJywgZWwpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAgIGV4cG9zZUlkID0gZWwuZGF0YSgnZXhwb3NlJyk7CiAgICAgIGV4cG9zZSA9ICQoJy4nICsgZXhwb3NlSWQpOwoKICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7CiAgICAgICAgY2xlYXJBbGwgPSBhcmd1bWVudHNbMV07CiAgICAgIH0KCiAgICAgIGlmIChjbGVhckFsbCA9PT0gdHJ1ZSkgewogICAgICAgICQoJy5qb3lyaWRlLWV4cG9zZS13cmFwcGVyLC5qb3lyaWRlLWV4cG9zZS1jb3ZlcicpLnJlbW92ZSgpOwogICAgICB9IGVsc2UgewogICAgICAgIGV4cG9zZS5yZW1vdmUoKTsKICAgICAgfQoKICAgICAgb3JpZ0NTUyA9IGVsLmRhdGEoJ2V4cG9zZS1jc3MnKTsKCiAgICAgIGlmIChvcmlnQ1NTLnpJbmRleCA9PSAnYXV0bycpIHsKICAgICAgICBlbC5jc3MoJ3otaW5kZXgnLCAnJyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZWwuY3NzKCd6LWluZGV4Jywgb3JpZ0NTUy56SW5kZXgpOwogICAgICB9CgogICAgICBpZiAob3JpZ0NTUy5wb3NpdGlvbiAhPSBlbC5jc3MoJ3Bvc2l0aW9uJykpIHsKICAgICAgICBpZihvcmlnQ1NTLnBvc2l0aW9uID09ICdzdGF0aWMnKSB7Ly8gdGhpcyBpcyBkZWZhdWx0LCBubyBuZWVkIHRvIHNldCBpdC4KICAgICAgICAgIGVsLmNzcygncG9zaXRpb24nLCAnJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGVsLmNzcygncG9zaXRpb24nLCBvcmlnQ1NTLnBvc2l0aW9uKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIG9yaWdDbGFzc2VzID0gZWwuZGF0YSgnb3JpZy1jbGFzcycpOwogICAgICBlbC5hdHRyKCdjbGFzcycsIG9yaWdDbGFzc2VzKTsKICAgICAgZWwucmVtb3ZlRGF0YSgnb3JpZy1jbGFzc2VzJyk7CgogICAgICBlbC5yZW1vdmVEYXRhKCdleHBvc2UnKTsKICAgICAgZWwucmVtb3ZlRGF0YSgnZXhwb3NlLXotaW5kZXgnKTsKICAgICAgdGhpcy5yZW1vdmVfZXhwb3NlZChlbCk7CiAgICB9LAoKICAgIGFkZF9leHBvc2VkOiBmdW5jdGlvbihlbCl7CiAgICAgIHRoaXMuc2V0dGluZ3MuZXhwb3NlZCA9IHRoaXMuc2V0dGluZ3MuZXhwb3NlZCB8fCBbXTsKICAgICAgaWYgKGVsIGluc3RhbmNlb2YgJCB8fCB0eXBlb2YgZWwgPT09ICdvYmplY3QnKSB7CiAgICAgICAgdGhpcy5zZXR0aW5ncy5leHBvc2VkLnB1c2goZWxbMF0pOwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbCA9PSAnc3RyaW5nJykgewogICAgICAgIHRoaXMuc2V0dGluZ3MuZXhwb3NlZC5wdXNoKGVsKTsKICAgICAgfQogICAgfSwKCiAgICByZW1vdmVfZXhwb3NlZDogZnVuY3Rpb24oZWwpewogICAgICB2YXIgc2VhcmNoLCBjb3VudDsKICAgICAgaWYgKGVsIGluc3RhbmNlb2YgJCkgewogICAgICAgIHNlYXJjaCA9IGVsWzBdCiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVsID09ICdzdHJpbmcnKXsKICAgICAgICBzZWFyY2ggPSBlbDsKICAgICAgfQoKICAgICAgdGhpcy5zZXR0aW5ncy5leHBvc2VkID0gdGhpcy5zZXR0aW5ncy5leHBvc2VkIHx8IFtdOwogICAgICBjb3VudCA9IHRoaXMuc2V0dGluZ3MuZXhwb3NlZC5sZW5ndGg7CgogICAgICBmb3IgKHZhciBpPTA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZXhwb3NlZFtpXSA9PSBzZWFyY2gpIHsKICAgICAgICAgIHRoaXMuc2V0dGluZ3MuZXhwb3NlZC5zcGxpY2UoaSwgMSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9CiAgICB9LAoKICAgIGNlbnRlciA6IGZ1bmN0aW9uICgpIHsKICAgICAgdmFyICR3ID0gJCh3aW5kb3cpOwoKICAgICAgdGhpcy5zZXR0aW5ncy4kbmV4dF90aXAuY3NzKHsKICAgICAgICB0b3AgOiAoKCgkdy5oZWlnaHQoKSAtIHRoaXMuc2V0dGluZ3MuJG5leHRfdGlwLm91dGVySGVpZ2h0KCkpIC8gMikgKyAkdy5zY3JvbGxUb3AoKSksCiAgICAgICAgbGVmdCA6ICgoKCR3LndpZHRoKCkgLSB0aGlzLnNldHRpbmdzLiRuZXh0X3RpcC5vdXRlcldpZHRoKCkpIC8gMikgKyAkdy5zY3JvbGxMZWZ0KCkpCiAgICAgIH0pOwoKICAgICAgcmV0dXJuIHRydWU7CiAgICB9LAoKICAgIGJvdHRvbSA6IGZ1bmN0aW9uICgpIHsKICAgICAgcmV0dXJuIC9ib3R0b20vaS50ZXN0KHRoaXMuc2V0dGluZ3MudGlwX3NldHRpbmdzLnRpcF9sb2NhdGlvbik7CiAgICB9LAoKICAgIHRvcCA6IGZ1bmN0aW9uICgpIHsKICAgICAgcmV0dXJuIC90b3AvaS50ZXN0KHRoaXMuc2V0dGluZ3MudGlwX3NldHRpbmdzLnRpcF9sb2NhdGlvbik7CiAgICB9LAoKICAgIHJpZ2h0IDogZnVuY3Rpb24gKCkgewogICAgICByZXR1cm4gL3JpZ2h0L2kudGVzdCh0aGlzLnNldHRpbmdzLnRpcF9zZXR0aW5ncy50aXBfbG9jYXRpb24pOwogICAgfSwKCiAgICBsZWZ0IDogZnVuY3Rpb24gKCkgewogICAgICByZXR1cm4gL2xlZnQvaS50ZXN0KHRoaXMuc2V0dGluZ3MudGlwX3NldHRpbmdzLnRpcF9sb2NhdGlvbik7CiAgICB9LAoKICAgIGNvcm5lcnMgOiBmdW5jdGlvbiAoZWwpIHsKICAgICAgdmFyIHcgPSAkKHdpbmRvdyksCiAgICAgICAgICB3aW5kb3dfaGFsZiA9IHcuaGVpZ2h0KCkgLyAyLAogICAgICAgICAgLy91c2luZyB0aGlzIHRvIGNhbGN1bGF0ZSBzaW5jZSBzY3JvbGwgbWF5IG5vdCBoYXZlIGZpbmlzaGVkIHlldC4KICAgICAgICAgIHRpcE9mZnNldCA9IE1hdGguY2VpbCh0aGlzLnNldHRpbmdzLiR0YXJnZXQub2Zmc2V0KCkudG9wIC0gd2luZG93X2hhbGYgKyB0aGlzLnNldHRpbmdzLiRuZXh0X3RpcC5vdXRlckhlaWdodCgpKSwKICAgICAgICAgIHJpZ2h0ID0gdy53aWR0aCgpICsgdy5zY3JvbGxMZWZ0KCksCiAgICAgICAgICBvZmZzZXRCb3R0b20gPSAgdy5oZWlnaHQoKSArIHRpcE9mZnNldCwKICAgICAgICAgIGJvdHRvbSA9IHcuaGVpZ2h0KCkgKyB3LnNjcm9sbFRvcCgpLAogICAgICAgICAgdG9wID0gdy5zY3JvbGxUb3AoKTsKCiAgICAgIGlmICh0aXBPZmZzZXQgPCB0b3ApIHsKICAgICAgICBpZiAodGlwT2Zmc2V0IDwgMCkgewogICAgICAgICAgdG9wID0gMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdG9wID0gdGlwT2Zmc2V0OwogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKG9mZnNldEJvdHRvbSA+IGJvdHRvbSkgewogICAgICAgIGJvdHRvbSA9IG9mZnNldEJvdHRvbTsKICAgICAgfQoKICAgICAgcmV0dXJuIFsKICAgICAgICBlbC5vZmZzZXQoKS50b3AgPCB0b3AsCiAgICAgICAgcmlnaHQgPCBlbC5vZmZzZXQoKS5sZWZ0ICsgZWwub3V0ZXJXaWR0aCgpLAogICAgICAgIGJvdHRvbSA8IGVsLm9mZnNldCgpLnRvcCArIGVsLm91dGVySGVpZ2h0KCksCiAgICAgICAgdy5zY3JvbGxMZWZ0KCkgPiBlbC5vZmZzZXQoKS5sZWZ0CiAgICAgIF07CiAgICB9LAoKICAgIHZpc2libGUgOiBmdW5jdGlvbiAoaGlkZGVuX2Nvcm5lcnMpIHsKICAgICAgdmFyIGkgPSBoaWRkZW5fY29ybmVycy5sZW5ndGg7CgogICAgICB3aGlsZSAoaS0tKSB7CiAgICAgICAgaWYgKGhpZGRlbl9jb3JuZXJzW2ldKSByZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAgIHJldHVybiB0cnVlOwogICAgfSwKCiAgICBudWJfcG9zaXRpb24gOiBmdW5jdGlvbiAobnViLCBwb3MsIGRlZikgewogICAgICBpZiAocG9zID09PSAnYXV0bycpIHsKICAgICAgICBudWIuYWRkQ2xhc3MoZGVmKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBudWIuYWRkQ2xhc3MocG9zKTsKICAgICAgfQogICAgfSwKCiAgICBzdGFydFRpbWVyIDogZnVuY3Rpb24gKCkgewogICAgICBpZiAodGhpcy5zZXR0aW5ncy4kbGkubGVuZ3RoKSB7CiAgICAgICAgdGhpcy5zZXR0aW5ncy5hdXRvbWF0ZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgICB0aGlzLnNob3coKTsKICAgICAgICAgIHRoaXMuc3RhcnRUaW1lcigpOwogICAgICAgIH0uYmluZCh0aGlzKSwgdGhpcy5zZXR0aW5ncy50aW1lcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2V0dGluZ3MuYXV0b21hdGUpOwogICAgICB9CiAgICB9LAoKICAgIGVuZCA6IGZ1bmN0aW9uICgpIHsKICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuY29va2llX21vbnN0ZXIpIHsKICAgICAgICAkLmNvb2tpZSh0aGlzLnNldHRpbmdzLmNvb2tpZV9uYW1lLCAncmlkZGVuJywgeyBleHBpcmVzOiB0aGlzLnNldHRpbmdzLmNvb2tpZV9leHBpcmVzLCBkb21haW46IHRoaXMuc2V0dGluZ3MuY29va2llX2RvbWFpbiB9KTsKICAgICAgfQoKICAgICAgaWYgKHRoaXMuc2V0dGluZ3MudGltZXIgPiAwKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2V0dGluZ3MuYXV0b21hdGUpOwogICAgICB9CgogICAgICBpZiAodGhpcy5zZXR0aW5ncy5tb2RhbCAmJiB0aGlzLnNldHRpbmdzLmV4cG9zZSkgewogICAgICAgIHRoaXMudW5fZXhwb3NlKCk7CiAgICAgIH0KCiAgICAgIHRoaXMuc2V0dGluZ3MuJG5leHRfdGlwLmRhdGEoJ2Nsb3NlZCcsIHRydWUpOwoKICAgICAgJCgnLmpveXJpZGUtbW9kYWwtYmcnKS5oaWRlKCk7CiAgICAgIHRoaXMuc2V0dGluZ3MuJGN1cnJlbnRfdGlwLmhpZGUoKTsKICAgICAgdGhpcy5zZXR0aW5ncy5wb3N0X3N0ZXBfY2FsbGJhY2sodGhpcy5zZXR0aW5ncy4kbGkuaW5kZXgoKSwgdGhpcy5zZXR0aW5ncy4kY3VycmVudF90aXApOwogICAgICB0aGlzLnNldHRpbmdzLnBvc3RfcmlkZV9jYWxsYmFjayh0aGlzLnNldHRpbmdzLiRsaS5pbmRleCgpLCB0aGlzLnNldHRpbmdzLiRjdXJyZW50X3RpcCk7CiAgICAgICQoJy5qb3lyaWRlLXRpcC1ndWlkZScpLnJlbW92ZSgpOwogICAgfSwKCiAgICBvZmYgOiBmdW5jdGlvbiAoKSB7CiAgICAgICQodGhpcy5zY29wZSkub2ZmKCcuam95cmlkZScpOwogICAgICAkKHdpbmRvdykub2ZmKCcuam95cmlkZScpOwogICAgICAkKCcuam95cmlkZS1jbG9zZS10aXAsIC5qb3lyaWRlLW5leHQtdGlwLCAuam95cmlkZS1tb2RhbC1iZycpLm9mZignLmpveXJpZGUnKTsKICAgICAgJCgnLmpveXJpZGUtdGlwLWd1aWRlLCAuam95cmlkZS1tb2RhbC1iZycpLnJlbW92ZSgpOwogICAgICBjbGVhclRpbWVvdXQodGhpcy5zZXR0aW5ncy5hdXRvbWF0ZSk7CiAgICAgIHRoaXMuc2V0dGluZ3MgPSB7fTsKICAgIH0sCgogICAgcmVmbG93IDogZnVuY3Rpb24gKCkge30KICB9Owp9KGpRdWVyeSwgdGhpcywgdGhpcy5kb2N1bWVudCkpOwoKOyhmdW5jdGlvbiAoJCwgd2luZG93LCBkb2N1bWVudCwgdW5kZWZpbmVkKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICBGb3VuZGF0aW9uLmxpYnMubWFnZWxsYW4gPSB7CiAgICBuYW1lIDogJ21hZ2VsbGFuJywKCiAgICB2ZXJzaW9uIDogJzUuMC4wJywKCiAgICBzZXR0aW5ncyA6IHsKICAgICAgYWN0aXZlX2NsYXNzOiAnYWN0aXZlJywKICAgICAgdGhyZXNob2xkOiAwCiAgICB9LAoKICAgIGluaXQgOiBmdW5jdGlvbiAoc2NvcGUsIG1ldGhvZCwgb3B0aW9ucykgewogICAgICB0aGlzLmZpeGVkX21hZ2VsbGFuID0gJCgiW2RhdGEtbWFnZWxsYW4tZXhwZWRpdGlvbl0iKTsKICAgICAgdGhpcy5zZXRfdGhyZXNob2xkKCk7CiAgICAgIHRoaXMubGFzdF9kZXN0aW5hdGlvbiA9ICQoJ1tkYXRhLW1hZ2VsbGFuLWRlc3RpbmF0aW9uXScpLmxhc3QoKTsKICAgICAgdGhpcy5ldmVudHMoKTsKICAgIH0sCgogICAgZXZlbnRzIDogZnVuY3Rpb24gKCkgewogICAgICB2YXIgc2VsZiA9IHRoaXM7CgogICAgICAkKHRoaXMuc2NvcGUpCiAgICAgICAgLm9mZignLm1hZ2VsbGFuJykKICAgICAgICAub24oJ2Fycml2YWwuZm5kdG4ubWFnZWxsYW4nLCAnW2RhdGEtbWFnZWxsYW4tYXJyaXZhbF0nLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgdmFyICRkZXN0aW5hdGlvbiA9ICQodGhpcyksCiAgICAgICAgICAgICAgJGV4cGVkaXRpb24gPSAkZGVzdGluYXRpb24uY2xvc2VzdCgnW2RhdGEtbWFnZWxsYW4tZXhwZWRpdGlvbl0nKSwKICAgICAgICAgICAgICBhY3RpdmVfY2xhc3MgPSAkZXhwZWRpdGlvbi5hdHRyKCdkYXRhLW1hZ2VsbGFuLWFjdGl2ZS1jbGFzcycpCiAgICAgICAgICAgICAgICB8fCBzZWxmLnNldHRpbmdzLmFjdGl2ZV9jbGFzczsKCiAgICAgICAgICAgICRkZXN0aW5hdGlvbgogICAgICAgICAgICAgIC5jbG9zZXN0KCdbZGF0YS1tYWdlbGxhbi1leHBlZGl0aW9uXScpCiAgICAgICAgICAgICAgLmZpbmQoJ1tkYXRhLW1hZ2VsbGFuLWFycml2YWxdJykKICAgICAgICAgICAgICAubm90KCRkZXN0aW5hdGlvbikKICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoYWN0aXZlX2NsYXNzKTsKICAgICAgICAgICAgJGRlc3RpbmF0aW9uLmFkZENsYXNzKGFjdGl2ZV9jbGFzcyk7CiAgICAgICAgfSk7CgogICAgICB0aGlzLmZpeGVkX21hZ2VsbGFuCiAgICAgICAgLm9mZignLm1hZ2VsbGFuJykKICAgICAgICAub24oJ3VwZGF0ZS1wb3NpdGlvbi5mbmR0bi5tYWdlbGxhbicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyICRlbCA9ICQodGhpcyk7CiAgICAgICAgfSkKICAgICAgICAudHJpZ2dlcigndXBkYXRlLXBvc2l0aW9uJyk7CgogICAgICAkKHdpbmRvdykKICAgICAgICAub2ZmKCcubWFnZWxsYW4nKQogICAgICAgIC5vbigncmVzaXplLmZuZHRuLm1hZ2VsbGFuJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICB0aGlzLmZpeGVkX21hZ2VsbGFuLnRyaWdnZXIoJ3VwZGF0ZS1wb3NpdGlvbicpOwogICAgICAgIH0uYmluZCh0aGlzKSkKICAgICAgICAub24oJ3Njcm9sbC5mbmR0bi5tYWdlbGxhbicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyIHdpbmRvd1Njcm9sbFRvcCA9ICQod2luZG93KS5zY3JvbGxUb3AoKTsKICAgICAgICAgIHNlbGYuZml4ZWRfbWFnZWxsYW4uZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyICRleHBlZGl0aW9uID0gJCh0aGlzKTsKICAgICAgICAgICAgaWYgKHR5cGVvZiAkZXhwZWRpdGlvbi5kYXRhKCdtYWdlbGxhbi10b3Atb2Zmc2V0JykgPT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgICAgJGV4cGVkaXRpb24uZGF0YSgnbWFnZWxsYW4tdG9wLW9mZnNldCcsICRleHBlZGl0aW9uLm9mZnNldCgpLnRvcCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHR5cGVvZiAkZXhwZWRpdGlvbi5kYXRhKCdtYWdlbGxhbi1maXhlZC1wb3NpdGlvbicpID09PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICAgICRleHBlZGl0aW9uLmRhdGEoJ21hZ2VsbGFuLWZpeGVkLXBvc2l0aW9uJywgZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBmaXhlZF9wb3NpdGlvbiA9ICh3aW5kb3dTY3JvbGxUb3AgKyBzZWxmLnNldHRpbmdzLnRocmVzaG9sZCkgPiAkZXhwZWRpdGlvbi5kYXRhKCJtYWdlbGxhbi10b3Atb2Zmc2V0Iik7CiAgICAgICAgICAgIHZhciBhdHRyID0gJGV4cGVkaXRpb24uYXR0cignZGF0YS1tYWdlbGxhbi10b3Atb2Zmc2V0Jyk7CgogICAgICAgICAgICBpZiAoJGV4cGVkaXRpb24uZGF0YSgibWFnZWxsYW4tZml4ZWQtcG9zaXRpb24iKSAhPSBmaXhlZF9wb3NpdGlvbikgewogICAgICAgICAgICAgICRleHBlZGl0aW9uLmRhdGEoIm1hZ2VsbGFuLWZpeGVkLXBvc2l0aW9uIiwgZml4ZWRfcG9zaXRpb24pOwogICAgICAgICAgICAgIGlmIChmaXhlZF9wb3NpdGlvbikgewogICAgICAgICAgICAgICAgJGV4cGVkaXRpb24uYWRkQ2xhc3MoJ2ZpeGVkJyk7CiAgICAgICAgICAgICAgICAkZXhwZWRpdGlvbi5jc3Moe3Bvc2l0aW9uOiJmaXhlZCIsIHRvcDowfSk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRleHBlZGl0aW9uLnJlbW92ZUNsYXNzKCdmaXhlZCcpOwogICAgICAgICAgICAgICAgJGV4cGVkaXRpb24uY3NzKHtwb3NpdGlvbjoiIiwgdG9wOiIifSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChmaXhlZF9wb3NpdGlvbiAmJiB0eXBlb2YgYXR0ciAhPSAndW5kZWZpbmVkJyAmJiBhdHRyICE9IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAkZXhwZWRpdGlvbi5jc3Moe3Bvc2l0aW9uOiJmaXhlZCIsIHRvcDphdHRyICsgInB4In0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfSk7CgoKICAgICAgaWYgKHRoaXMubGFzdF9kZXN0aW5hdGlvbi5sZW5ndGggPiAwKSB7CiAgICAgICAgJCh3aW5kb3cpLm9uKCdzY3JvbGwuZm5kdG4ubWFnZWxsYW4nLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgdmFyIHdpbmRvd1Njcm9sbFRvcCA9ICQod2luZG93KS5zY3JvbGxUb3AoKSwKICAgICAgICAgICAgICBzY3JvbGx0b3BQbHVzSGVpZ2h0ID0gd2luZG93U2Nyb2xsVG9wICsgJCh3aW5kb3cpLmhlaWdodCgpLAogICAgICAgICAgICAgIGxhc3REZXN0aW5hdGlvblRvcCA9IE1hdGguY2VpbChzZWxmLmxhc3RfZGVzdGluYXRpb24ub2Zmc2V0KCkudG9wKTsKCiAgICAgICAgICAkKCdbZGF0YS1tYWdlbGxhbi1kZXN0aW5hdGlvbl0nKS5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyICRkZXN0aW5hdGlvbiA9ICQodGhpcyksCiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbl9uYW1lID0gJGRlc3RpbmF0aW9uLmF0dHIoJ2RhdGEtbWFnZWxsYW4tZGVzdGluYXRpb24nKSwKICAgICAgICAgICAgICAgIHRvcE9mZnNldCA9ICRkZXN0aW5hdGlvbi5vZmZzZXQoKS50b3AgLSAkZGVzdGluYXRpb24ub3V0ZXJIZWlnaHQodHJ1ZSkgLSB3aW5kb3dTY3JvbGxUb3A7CiAgICAgICAgICAgIGlmICh0b3BPZmZzZXQgPD0gc2VsZi5zZXR0aW5ncy50aHJlc2hvbGQpIHsKICAgICAgICAgICAgICAkKCJbZGF0YS1tYWdlbGxhbi1hcnJpdmFsPSciICsgZGVzdGluYXRpb25fbmFtZSArICInXSIpLnRyaWdnZXIoJ2Fycml2YWwnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBJbiBsYXJnZSBzY3JlZW5zIHdlIG1heSBoaXQgdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSBhbmQgZG9udCByZWFjaCB0aGUgdG9wIG9mIHRoZSBsYXN0IG1hZ2VsbGFuLWRlc3RpbmF0aW9uLCBzbyBsZXRzIGZvcmNlIGl0CiAgICAgICAgICAgIGlmIChzY3JvbGx0b3BQbHVzSGVpZ2h0ID49ICQoc2VsZi5zY29wZSkuaGVpZ2h0KCkgJiYgbGFzdERlc3RpbmF0aW9uVG9wID4gd2luZG93U2Nyb2xsVG9wICYmIGxhc3REZXN0aW5hdGlvblRvcCA8IHNjcm9sbHRvcFBsdXNIZWlnaHQpIHsKICAgICAgICAgICAgICAkKCdbZGF0YS1tYWdlbGxhbi1hcnJpdmFsXScpLmxhc3QoKS50cmlnZ2VyKCdhcnJpdmFsJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9CiAgICB9LAoKICAgIHNldF90aHJlc2hvbGQgOiBmdW5jdGlvbiAoKSB7CiAgICAgIGlmICh0eXBlb2YgdGhpcy5zZXR0aW5ncy50aHJlc2hvbGQgIT09ICdudW1iZXInKSB7CiAgICAgICAgdGhpcy5zZXR0aW5ncy50aHJlc2hvbGQgPSAodGhpcy5maXhlZF9tYWdlbGxhbi5sZW5ndGggPiAwKSA/CiAgICAgICAgICB0aGlzLmZpeGVkX21hZ2VsbGFuLm91dGVySGVpZ2h0KHRydWUpIDogMDsKICAgICAgfQogICAgfSwKCiAgICBvZmYgOiBmdW5jdGlvbiAoKSB7CiAgICAgICQodGhpcy5zY29wZSkub2ZmKCcuZm5kdG4ubWFnZWxsYW4nKTsKICAgICAgJCh3aW5kb3cpLm9mZignLmZuZHRuLm1hZ2VsbGFuJyk7CiAgICB9LAoKICAgIHJlZmxvdyA6IGZ1bmN0aW9uICgpIHt9CiAgfTsKfShqUXVlcnksIHRoaXMsIHRoaXMuZG9jdW1lbnQpKTsKCjsoZnVuY3Rpb24gKCQsIHdpbmRvdywgZG9jdW1lbnQsIHVuZGVmaW5lZCkgewogICd1c2Ugc3RyaWN0JzsKCiAgRm91bmRhdGlvbi5saWJzLm9mZmNhbnZhcyA9IHsKICAgIG5hbWUgOiAnb2ZmY2FudmFzJywKCiAgICB2ZXJzaW9uIDogJzUuMC4wJywKCiAgICBzZXR0aW5ncyA6IHt9LAoKICAgIGluaXQgOiBmdW5jdGlvbiAoc2NvcGUsIG1ldGhvZCwgb3B0aW9ucykgewogICAgICB0aGlzLmV2ZW50cygpOwogICAgfSwKCiAgICBldmVudHMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICQodGhpcy5zY29wZSkub2ZmKCcub2ZmY2FudmFzJykKICAgICAgICAub24oJ2NsaWNrLmZuZHRuLm9mZmNhbnZhcycsICcubGVmdC1vZmYtY2FudmFzLXRvZ2dsZScsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5vZmYtY2FudmFzLXdyYXAnKS50b2dnbGVDbGFzcygnbW92ZS1yaWdodCcpOwogICAgICAgIH0pCiAgICAgICAgLm9uKCdjbGljay5mbmR0bi5vZmZjYW52YXMnLCAnLmV4aXQtb2ZmLWNhbnZhcycsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAkKCIub2ZmLWNhbnZhcy13cmFwIikucmVtb3ZlQ2xhc3MoIm1vdmUtcmlnaHQiKTsKICAgICAgICB9KQogICAgICAgIC5vbignY2xpY2suZm5kdG4ub2ZmY2FudmFzJywgJy5yaWdodC1vZmYtY2FudmFzLXRvZ2dsZScsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoIi5vZmYtY2FudmFzLXdyYXAiKS50b2dnbGVDbGFzcygibW92ZS1sZWZ0Iik7CiAgICAgICAgfSkKICAgICAgICAub24oJ2NsaWNrLmZuZHRuLm9mZmNhbnZhcycsICcuZXhpdC1vZmYtY2FudmFzJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICQoIi5vZmYtY2FudmFzLXdyYXAiKS5yZW1vdmVDbGFzcygibW92ZS1sZWZ0Iik7CiAgICAgICAgfSk7CiAgICB9LAoKICAgIHJlZmxvdyA6IGZ1bmN0aW9uICgpIHt9CiAgfTsKfShqUXVlcnksIHRoaXMsIHRoaXMuZG9jdW1lbnQpKTsKOyhmdW5jdGlvbiAoJCwgd2luZG93LCBkb2N1bWVudCwgdW5kZWZpbmVkKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICB2YXIgbm9vcCA9IGZ1bmN0aW9uKCkge307CgogIHZhciBPcmJpdCA9IGZ1bmN0aW9uKGVsLCBzZXR0aW5ncykgewogICAgLy8gRG9uJ3QgcmVpbml0aWFsaXplIHBsdWdpbgogICAgaWYgKGVsLmhhc0NsYXNzKHNldHRpbmdzLnNsaWRlc19jb250YWluZXJfY2xhc3MpKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQoKICAgIHZhciBzZWxmID0gdGhpcywKICAgICAgICBjb250YWluZXIsCiAgICAgICAgc2xpZGVzX2NvbnRhaW5lciA9IGVsLAogICAgICAgIG51bWJlcl9jb250YWluZXIsCiAgICAgICAgYnVsbGV0c19jb250YWluZXIsCiAgICAgICAgdGltZXJfY29udGFpbmVyLAogICAgICAgIGlkeCA9IDAsCiAgICAgICAgYW5pbWF0ZSwKICAgICAgICB0aW1lciwKICAgICAgICBsb2NrZWQgPSBmYWxzZSwKICAgICAgICBhZGp1c3RfaGVpZ2h0X2FmdGVyID0gZmFsc2U7CgogICAgc2xpZGVzX2NvbnRhaW5lci5jaGlsZHJlbigpLmZpcnN0KCkuYWRkQ2xhc3Moc2V0dGluZ3MuYWN0aXZlX3NsaWRlX2NsYXNzKTsKCiAgICBzZWxmLnVwZGF0ZV9zbGlkZV9udW1iZXIgPSBmdW5jdGlvbihpbmRleCkgewogICAgICBpZiAoc2V0dGluZ3Muc2xpZGVfbnVtYmVyKSB7CiAgICAgICAgbnVtYmVyX2NvbnRhaW5lci5maW5kKCdzcGFuOmZpcnN0JykudGV4dChwYXJzZUludChpbmRleCkrMSk7CiAgICAgICAgbnVtYmVyX2NvbnRhaW5lci5maW5kKCdzcGFuOmxhc3QnKS50ZXh0KHNsaWRlc19jb250YWluZXIuY2hpbGRyZW4oKS5sZW5ndGgpOwogICAgICB9CiAgICAgIGlmIChzZXR0aW5ncy5idWxsZXRzKSB7CiAgICAgICAgYnVsbGV0c19jb250YWluZXIuY2hpbGRyZW4oKS5yZW1vdmVDbGFzcyhzZXR0aW5ncy5idWxsZXRzX2FjdGl2ZV9jbGFzcyk7CiAgICAgICAgJChidWxsZXRzX2NvbnRhaW5lci5jaGlsZHJlbigpLmdldChpbmRleCkpLmFkZENsYXNzKHNldHRpbmdzLmJ1bGxldHNfYWN0aXZlX2NsYXNzKTsKICAgICAgfQogICAgfTsKCiAgICBzZWxmLnVwZGF0ZV9hY3RpdmVfbGluayA9IGZ1bmN0aW9uKGluZGV4KSB7CiAgICAgIHZhciBsaW5rID0gJCgnYVtkYXRhLW9yYml0LWxpbms9Iicrc2xpZGVzX2NvbnRhaW5lci5jaGlsZHJlbigpLmVxKGluZGV4KS5hdHRyKCdkYXRhLW9yYml0LXNsaWRlJykrJyJdJyk7CiAgICAgIGxpbmsucGFyZW50cygndWwnKS5maW5kKCdbZGF0YS1vcmJpdC1saW5rXScpLnJlbW92ZUNsYXNzKHNldHRpbmdzLmJ1bGxldHNfYWN0aXZlX2NsYXNzKTsKICAgICAgbGluay5hZGRDbGFzcyhzZXR0aW5ncy5idWxsZXRzX2FjdGl2ZV9jbGFzcyk7CiAgICB9OwoKICAgIHNlbGYuYnVpbGRfbWFya3VwID0gZnVuY3Rpb24oKSB7CiAgICAgIHNsaWRlc19jb250YWluZXIud3JhcCgnPGRpdiBjbGFzcz0iJytzZXR0aW5ncy5jb250YWluZXJfY2xhc3MrJyI+PC9kaXY+Jyk7CiAgICAgIGNvbnRhaW5lciA9IHNsaWRlc19jb250YWluZXIucGFyZW50KCk7CiAgICAgIHNsaWRlc19jb250YWluZXIuYWRkQ2xhc3Moc2V0dGluZ3Muc2xpZGVzX2NvbnRhaW5lcl9jbGFzcyk7CiAgICAgIAogICAgICBpZiAoc2V0dGluZ3MubmF2aWdhdGlvbl9hcnJvd3MpIHsKICAgICAgICBjb250YWluZXIuYXBwZW5kKCQoJzxhIGhyZWY9IiMiPjxzcGFuPjwvc3Bhbj48L2E+JykuYWRkQ2xhc3Moc2V0dGluZ3MucHJldl9jbGFzcykpOwogICAgICAgIGNvbnRhaW5lci5hcHBlbmQoJCgnPGEgaHJlZj0iIyI+PHNwYW4+PC9zcGFuPjwvYT4nKS5hZGRDbGFzcyhzZXR0aW5ncy5uZXh0X2NsYXNzKSk7CiAgICAgIH0KCiAgICAgIGlmIChzZXR0aW5ncy50aW1lcikgewogICAgICAgIHRpbWVyX2NvbnRhaW5lciA9ICQoJzxkaXY+JykuYWRkQ2xhc3Moc2V0dGluZ3MudGltZXJfY29udGFpbmVyX2NsYXNzKTsKICAgICAgICB0aW1lcl9jb250YWluZXIuYXBwZW5kKCc8c3Bhbj4nKTsKICAgICAgICB0aW1lcl9jb250YWluZXIuYXBwZW5kKCQoJzxkaXY+JykuYWRkQ2xhc3Moc2V0dGluZ3MudGltZXJfcHJvZ3Jlc3NfY2xhc3MpKTsKICAgICAgICB0aW1lcl9jb250YWluZXIuYWRkQ2xhc3Moc2V0dGluZ3MudGltZXJfcGF1c2VkX2NsYXNzKTsKICAgICAgICBjb250YWluZXIuYXBwZW5kKHRpbWVyX2NvbnRhaW5lcik7CiAgICAgIH0KCiAgICAgIGlmIChzZXR0aW5ncy5zbGlkZV9udW1iZXIpIHsKICAgICAgICBudW1iZXJfY29udGFpbmVyID0gJCgnPGRpdj4nKS5hZGRDbGFzcyhzZXR0aW5ncy5zbGlkZV9udW1iZXJfY2xhc3MpOwogICAgICAgIG51bWJlcl9jb250YWluZXIuYXBwZW5kKCc8c3Bhbj48L3NwYW4+ICcgKyBzZXR0aW5ncy5zbGlkZV9udW1iZXJfdGV4dCArICcgPHNwYW4+PC9zcGFuPicpOwogICAgICAgIGNvbnRhaW5lci5hcHBlbmQobnVtYmVyX2NvbnRhaW5lcik7CiAgICAgIH0KCiAgICAgIGlmIChzZXR0aW5ncy5idWxsZXRzKSB7CiAgICAgICAgYnVsbGV0c19jb250YWluZXIgPSAkKCc8b2w+JykuYWRkQ2xhc3Moc2V0dGluZ3MuYnVsbGV0c19jb250YWluZXJfY2xhc3MpOwogICAgICAgIGNvbnRhaW5lci5hcHBlbmQoYnVsbGV0c19jb250YWluZXIpOwogICAgICAgIGJ1bGxldHNfY29udGFpbmVyLndyYXAoJzxkaXYgY2xhc3M9Im9yYml0LWJ1bGxldHMtY29udGFpbmVyIj48L2Rpdj4nKTsKICAgICAgICBzbGlkZXNfY29udGFpbmVyLmNoaWxkcmVuKCkuZWFjaChmdW5jdGlvbihpZHgsIGVsKSB7CiAgICAgICAgICB2YXIgYnVsbGV0ID0gJCgnPGxpPicpLmF0dHIoJ2RhdGEtb3JiaXQtc2xpZGUnLCBpZHgpOwogICAgICAgICAgYnVsbGV0c19jb250YWluZXIuYXBwZW5kKGJ1bGxldCk7CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIGlmIChzZXR0aW5ncy5zdGFja19vbl9zbWFsbCkgewogICAgICAgIGNvbnRhaW5lci5hZGRDbGFzcyhzZXR0aW5ncy5zdGFja19vbl9zbWFsbF9jbGFzcyk7CiAgICAgIH0KCiAgICAgIHNlbGYudXBkYXRlX3NsaWRlX251bWJlcigwKTsKICAgICAgc2VsZi51cGRhdGVfYWN0aXZlX2xpbmsoMCk7CiAgICB9OwoKICAgIHNlbGYuX2dvdG8gPSBmdW5jdGlvbihuZXh0X2lkeCwgc3RhcnRfdGltZXIpIHsKICAgICAgLy8gaWYgKGxvY2tlZCkge3JldHVybiBmYWxzZTt9CiAgICAgIGlmIChuZXh0X2lkeCA9PT0gaWR4KSB7cmV0dXJuIGZhbHNlO30KICAgICAgaWYgKHR5cGVvZiB0aW1lciA9PT0gJ29iamVjdCcpIHt0aW1lci5yZXN0YXJ0KCk7fQogICAgICB2YXIgc2xpZGVzID0gc2xpZGVzX2NvbnRhaW5lci5jaGlsZHJlbigpOwoKICAgICAgdmFyIGRpciA9ICduZXh0JzsKICAgICAgbG9ja2VkID0gdHJ1ZTsKICAgICAgaWYgKG5leHRfaWR4IDwgaWR4KSB7ZGlyID0gJ3ByZXYnO30KICAgICAgaWYgKG5leHRfaWR4ID49IHNsaWRlcy5sZW5ndGgpIHtuZXh0X2lkeCA9IDA7fQogICAgICBlbHNlIGlmIChuZXh0X2lkeCA8IDApIHtuZXh0X2lkeCA9IHNsaWRlcy5sZW5ndGggLSAxO30KICAgICAgCiAgICAgIHZhciBjdXJyZW50ID0gJChzbGlkZXMuZ2V0KGlkeCkpOwogICAgICB2YXIgbmV4dCA9ICQoc2xpZGVzLmdldChuZXh0X2lkeCkpOwoKICAgICAgY3VycmVudC5jc3MoJ3pJbmRleCcsIDIpOwogICAgICBjdXJyZW50LnJlbW92ZUNsYXNzKHNldHRpbmdzLmFjdGl2ZV9zbGlkZV9jbGFzcyk7CiAgICAgIG5leHQuY3NzKCd6SW5kZXgnLCA0KS5hZGRDbGFzcyhzZXR0aW5ncy5hY3RpdmVfc2xpZGVfY2xhc3MpOwoKICAgICAgc2xpZGVzX2NvbnRhaW5lci50cmlnZ2VyKCdiZWZvcmUtc2xpZGUtY2hhbmdlLmZuZHRuLm9yYml0Jyk7CiAgICAgIHNldHRpbmdzLmJlZm9yZV9zbGlkZV9jaGFuZ2UoKTsKICAgICAgc2VsZi51cGRhdGVfYWN0aXZlX2xpbmsobmV4dF9pZHgpOwogICAgICAKICAgICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHVubG9jayA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgaWR4ID0gbmV4dF9pZHg7CiAgICAgICAgICBsb2NrZWQgPSBmYWxzZTsKICAgICAgICAgIGlmIChzdGFydF90aW1lciA9PT0gdHJ1ZSkge3RpbWVyID0gc2VsZi5jcmVhdGVfdGltZXIoKTsgdGltZXIuc3RhcnQoKTt9CiAgICAgICAgICBzZWxmLnVwZGF0ZV9zbGlkZV9udW1iZXIoaWR4KTsKICAgICAgICAgIHNsaWRlc19jb250YWluZXIudHJpZ2dlcignYWZ0ZXItc2xpZGUtY2hhbmdlLmZuZHRuLm9yYml0Jyxbe3NsaWRlX251bWJlcjogaWR4LCB0b3RhbF9zbGlkZXM6IHNsaWRlcy5sZW5ndGh9XSk7CiAgICAgICAgICBzZXR0aW5ncy5hZnRlcl9zbGlkZV9jaGFuZ2UoaWR4LCBzbGlkZXMubGVuZ3RoKTsKICAgICAgICB9OwogICAgICAgIGlmIChzbGlkZXNfY29udGFpbmVyLmhlaWdodCgpICE9IG5leHQuaGVpZ2h0KCkgJiYgc2V0dGluZ3MudmFyaWFibGVfaGVpZ2h0KSB7CiAgICAgICAgICBzbGlkZXNfY29udGFpbmVyLmFuaW1hdGUoeydoZWlnaHQnOiBuZXh0LmhlaWdodCgpfSwgMjUwLCAnbGluZWFyJywgdW5sb2NrKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdW5sb2NrKCk7CiAgICAgICAgfQogICAgICB9OwoKICAgICAgaWYgKHNsaWRlcy5sZW5ndGggPT09IDEpIHtjYWxsYmFjaygpOyByZXR1cm4gZmFsc2U7fQoKICAgICAgdmFyIHN0YXJ0X2FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmIChkaXIgPT09ICduZXh0Jykge2FuaW1hdGUubmV4dChjdXJyZW50LCBuZXh0LCBjYWxsYmFjayk7fQogICAgICAgIGlmIChkaXIgPT09ICdwcmV2Jykge2FuaW1hdGUucHJldihjdXJyZW50LCBuZXh0LCBjYWxsYmFjayk7fSAgICAgICAgCiAgICAgIH07CgogICAgICBpZiAobmV4dC5oZWlnaHQoKSA+IHNsaWRlc19jb250YWluZXIuaGVpZ2h0KCkgJiYgc2V0dGluZ3MudmFyaWFibGVfaGVpZ2h0KSB7CiAgICAgICAgc2xpZGVzX2NvbnRhaW5lci5hbmltYXRlKHsnaGVpZ2h0JzogbmV4dC5oZWlnaHQoKX0sIDI1MCwgJ2xpbmVhcicsIHN0YXJ0X2FuaW1hdGlvbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3RhcnRfYW5pbWF0aW9uKCk7CiAgICAgIH0KICAgIH07CiAgICAKICAgIHNlbGYubmV4dCA9IGZ1bmN0aW9uKGUpIHsKICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBzZWxmLl9nb3RvKGlkeCArIDEpOwogICAgfTsKICAgIAogICAgc2VsZi5wcmV2ID0gZnVuY3Rpb24oZSkgewogICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOwogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHNlbGYuX2dvdG8oaWR4IC0gMSk7CiAgICB9OwoKICAgIHNlbGYubGlua19jdXN0b20gPSBmdW5jdGlvbihlKSB7CiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgdmFyIGxpbmsgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtb3JiaXQtbGluaycpOwogICAgICBpZiAoKHR5cGVvZiBsaW5rID09PSAnc3RyaW5nJykgJiYgKGxpbmsgPSAkLnRyaW0obGluaykpICE9ICIiKSB7CiAgICAgICAgdmFyIHNsaWRlID0gY29udGFpbmVyLmZpbmQoJ1tkYXRhLW9yYml0LXNsaWRlPScrbGluaysnXScpOwogICAgICAgIGlmIChzbGlkZS5pbmRleCgpICE9IC0xKSB7c2VsZi5fZ290byhzbGlkZS5pbmRleCgpKTt9CiAgICAgIH0KICAgIH07CgogICAgc2VsZi5saW5rX2J1bGxldCA9IGZ1bmN0aW9uKGUpIHsKICAgICAgdmFyIGluZGV4ID0gJCh0aGlzKS5hdHRyKCdkYXRhLW9yYml0LXNsaWRlJyk7CiAgICAgIGlmICgodHlwZW9mIGluZGV4ID09PSAnc3RyaW5nJykgJiYgKGluZGV4ID0gJC50cmltKGluZGV4KSkgIT0gIiIpIHsKICAgICAgICBzZWxmLl9nb3RvKHBhcnNlSW50KGluZGV4KSk7CiAgICAgIH0KICAgIH0KCiAgICBzZWxmLnRpbWVyX2NhbGxiYWNrID0gZnVuY3Rpb24oKSB7CiAgICAgIHNlbGYuX2dvdG8oaWR4ICsgMSwgdHJ1ZSk7CiAgICB9CiAgICAKICAgIHNlbGYuY29tcHV0ZV9kaW1lbnNpb25zID0gZnVuY3Rpb24oKSB7CiAgICAgIHZhciBjdXJyZW50ID0gJChzbGlkZXNfY29udGFpbmVyLmNoaWxkcmVuKCkuZ2V0KGlkeCkpOwogICAgICB2YXIgaCA9IGN1cnJlbnQuaGVpZ2h0KCk7CiAgICAgIGlmICghc2V0dGluZ3MudmFyaWFibGVfaGVpZ2h0KSB7CiAgICAgICAgc2xpZGVzX2NvbnRhaW5lci5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oKXsKICAgICAgICAgIGlmICgkKHRoaXMpLmhlaWdodCgpID4gaCkgeyBoID0gJCh0aGlzKS5oZWlnaHQoKTsgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHNsaWRlc19jb250YWluZXIuaGVpZ2h0KGgpOwogICAgfTsKCiAgICBzZWxmLmNyZWF0ZV90aW1lciA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdCA9IG5ldyBUaW1lcigKICAgICAgICBjb250YWluZXIuZmluZCgnLicrc2V0dGluZ3MudGltZXJfY29udGFpbmVyX2NsYXNzKSwgCiAgICAgICAgc2V0dGluZ3MsIAogICAgICAgIHNlbGYudGltZXJfY2FsbGJhY2sKICAgICAgKTsKICAgICAgcmV0dXJuIHQ7CiAgICB9OwoKICAgIHNlbGYuc3RvcF90aW1lciA9IGZ1bmN0aW9uKCkgewogICAgICBpZiAodHlwZW9mIHRpbWVyID09PSAnb2JqZWN0JykgdGltZXIuc3RvcCgpOwogICAgfTsKCiAgICBzZWxmLnRvZ2dsZV90aW1lciA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdCA9IGNvbnRhaW5lci5maW5kKCcuJytzZXR0aW5ncy50aW1lcl9jb250YWluZXJfY2xhc3MpOwogICAgICBpZiAodC5oYXNDbGFzcyhzZXR0aW5ncy50aW1lcl9wYXVzZWRfY2xhc3MpKSB7CiAgICAgICAgaWYgKHR5cGVvZiB0aW1lciA9PT0gJ3VuZGVmaW5lZCcpIHt0aW1lciA9IHNlbGYuY3JlYXRlX3RpbWVyKCk7fQogICAgICAgIHRpbWVyLnN0YXJ0KCk7ICAgICAKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBpZiAodHlwZW9mIHRpbWVyID09PSAnb2JqZWN0Jykge3RpbWVyLnN0b3AoKTt9CiAgICAgIH0KICAgIH07CgogICAgc2VsZi5pbml0ID0gZnVuY3Rpb24oKSB7CiAgICAgIHNlbGYuYnVpbGRfbWFya3VwKCk7CiAgICAgIGlmIChzZXR0aW5ncy50aW1lcikge3RpbWVyID0gc2VsZi5jcmVhdGVfdGltZXIoKTsgdGltZXIuc3RhcnQoKTt9CiAgICAgIGFuaW1hdGUgPSBuZXcgRmFkZUFuaW1hdGlvbihzZXR0aW5ncywgc2xpZGVzX2NvbnRhaW5lcik7CiAgICAgIGlmIChzZXR0aW5ncy5hbmltYXRpb24gPT09ICdzbGlkZScpIAogICAgICAgIGFuaW1hdGUgPSBuZXcgU2xpZGVBbmltYXRpb24oc2V0dGluZ3MsIHNsaWRlc19jb250YWluZXIpOyAgICAgICAgCiAgICAgIGNvbnRhaW5lci5vbignY2xpY2snLCAnLicrc2V0dGluZ3MubmV4dF9jbGFzcywgc2VsZi5uZXh0KTsKICAgICAgY29udGFpbmVyLm9uKCdjbGljaycsICcuJytzZXR0aW5ncy5wcmV2X2NsYXNzLCBzZWxmLnByZXYpOwogICAgICBjb250YWluZXIub24oJ2NsaWNrJywgJ1tkYXRhLW9yYml0LXNsaWRlXScsIHNlbGYubGlua19idWxsZXQpOwogICAgICBjb250YWluZXIub24oJ2NsaWNrJywgc2VsZi50b2dnbGVfdGltZXIpOwogICAgICBpZiAoc2V0dGluZ3Muc3dpcGUpIHsKICAgICAgICBjb250YWluZXIub24oJ3RvdWNoc3RhcnQuZm5kdG4ub3JiaXQnLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICBpZiAoIWUudG91Y2hlcykge2UgPSBlLm9yaWdpbmFsRXZlbnQ7fQogICAgICAgICAgdmFyIGRhdGEgPSB7CiAgICAgICAgICAgIHN0YXJ0X3BhZ2VfeDogZS50b3VjaGVzWzBdLnBhZ2VYLAogICAgICAgICAgICBzdGFydF9wYWdlX3k6IGUudG91Y2hlc1swXS5wYWdlWSwKICAgICAgICAgICAgc3RhcnRfdGltZTogKG5ldyBEYXRlKCkpLmdldFRpbWUoKSwKICAgICAgICAgICAgZGVsdGFfeDogMCwKICAgICAgICAgICAgaXNfc2Nyb2xsaW5nOiB1bmRlZmluZWQKICAgICAgICAgIH07CiAgICAgICAgICBjb250YWluZXIuZGF0YSgnc3dpcGUtdHJhbnNpdGlvbicsIGRhdGEpOwogICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICB9KQogICAgICAgIC5vbigndG91Y2htb3ZlLmZuZHRuLm9yYml0JywgZnVuY3Rpb24oZSkgewogICAgICAgICAgaWYgKCFlLnRvdWNoZXMpIHsgZSA9IGUub3JpZ2luYWxFdmVudDsgfQogICAgICAgICAgLy8gSWdub3JlIHBpbmNoL3pvb20gZXZlbnRzCiAgICAgICAgICBpZihlLnRvdWNoZXMubGVuZ3RoID4gMSB8fCBlLnNjYWxlICYmIGUuc2NhbGUgIT09IDEpIHJldHVybjsKCiAgICAgICAgICB2YXIgZGF0YSA9IGNvbnRhaW5lci5kYXRhKCdzd2lwZS10cmFuc2l0aW9uJyk7CiAgICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICd1bmRlZmluZWQnKSB7ZGF0YSA9IHt9O30KCiAgICAgICAgICBkYXRhLmRlbHRhX3ggPSBlLnRvdWNoZXNbMF0ucGFnZVggLSBkYXRhLnN0YXJ0X3BhZ2VfeDsKCiAgICAgICAgICBpZiAoIHR5cGVvZiBkYXRhLmlzX3Njcm9sbGluZyA9PT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgZGF0YS5pc19zY3JvbGxpbmcgPSAhISggZGF0YS5pc19zY3JvbGxpbmcgfHwgTWF0aC5hYnMoZGF0YS5kZWx0YV94KSA8IE1hdGguYWJzKGUudG91Y2hlc1swXS5wYWdlWSAtIGRhdGEuc3RhcnRfcGFnZV95KSApOwogICAgICAgICAgfQoKICAgICAgICAgIGlmICghZGF0YS5pc19zY3JvbGxpbmcgJiYgIWRhdGEuYWN0aXZlKSB7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgdmFyIGRpcmVjdGlvbiA9IChkYXRhLmRlbHRhX3ggPCAwKSA/IChpZHgrMSkgOiAoaWR4LTEpOwogICAgICAgICAgICBkYXRhLmFjdGl2ZSA9IHRydWU7CiAgICAgICAgICAgIHNlbGYuX2dvdG8oZGlyZWN0aW9uKTsKICAgICAgICAgIH0KICAgICAgICB9KQogICAgICAgIC5vbigndG91Y2hlbmQuZm5kdG4ub3JiaXQnLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICBjb250YWluZXIuZGF0YSgnc3dpcGUtdHJhbnNpdGlvbicsIHt9KTsKICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgfSkKICAgICAgfQogICAgICBjb250YWluZXIub24oJ21vdXNlZW50ZXIuZm5kdG4ub3JiaXQnLCBmdW5jdGlvbihlKSB7CiAgICAgICAgaWYgKHNldHRpbmdzLnRpbWVyICYmIHNldHRpbmdzLnBhdXNlX29uX2hvdmVyKSB7CiAgICAgICAgICBzZWxmLnN0b3BfdGltZXIoKTsKICAgICAgICB9CiAgICAgIH0pCiAgICAgIC5vbignbW91c2VsZWF2ZS5mbmR0bi5vcmJpdCcsIGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoc2V0dGluZ3MudGltZXIgJiYgc2V0dGluZ3MucmVzdW1lX29uX21vdXNlb3V0KSB7CiAgICAgICAgICB0aW1lci5zdGFydCgpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIAogICAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnW2RhdGEtb3JiaXQtbGlua10nLCBzZWxmLmxpbmtfY3VzdG9tKTsKICAgICAgJCh3aW5kb3cpLm9uKCdyZXNpemUnLCBzZWxmLmNvbXB1dGVfZGltZW5zaW9ucyk7CiAgICAgICQod2luZG93KS5vbignbG9hZCcsIHNlbGYuY29tcHV0ZV9kaW1lbnNpb25zKTsKICAgICAgJCh3aW5kb3cpLm9uKCdsb2FkJywgZnVuY3Rpb24oKXsKICAgICAgICBjb250YWluZXIucHJldignLnByZWxvYWRlcicpLmNzcygnZGlzcGxheScsICdub25lJyk7CiAgICAgIH0pOwogICAgICBzbGlkZXNfY29udGFpbmVyLnRyaWdnZXIoJ3JlYWR5LmZuZHRuLm9yYml0Jyk7CiAgICB9OwoKICAgIHNlbGYuaW5pdCgpOwogIH07CgogIHZhciBUaW1lciA9IGZ1bmN0aW9uKGVsLCBzZXR0aW5ncywgY2FsbGJhY2spIHsKICAgIHZhciBzZWxmID0gdGhpcywKICAgICAgICBkdXJhdGlvbiA9IHNldHRpbmdzLnRpbWVyX3NwZWVkLAogICAgICAgIHByb2dyZXNzID0gZWwuZmluZCgnLicrc2V0dGluZ3MudGltZXJfcHJvZ3Jlc3NfY2xhc3MpLAogICAgICAgIHN0YXJ0LCAKICAgICAgICB0aW1lb3V0LAogICAgICAgIGxlZnQgPSAtMTsKCiAgICB0aGlzLnVwZGF0ZV9wcm9ncmVzcyA9IGZ1bmN0aW9uKHcpIHsKICAgICAgdmFyIG5ld19wcm9ncmVzcyA9IHByb2dyZXNzLmNsb25lKCk7CiAgICAgIG5ld19wcm9ncmVzcy5hdHRyKCdzdHlsZScsICcnKTsKICAgICAgbmV3X3Byb2dyZXNzLmNzcygnd2lkdGgnLCB3KyclJyk7CiAgICAgIHByb2dyZXNzLnJlcGxhY2VXaXRoKG5ld19wcm9ncmVzcyk7CiAgICAgIHByb2dyZXNzID0gbmV3X3Byb2dyZXNzOwogICAgfTsKCiAgICB0aGlzLnJlc3RhcnQgPSBmdW5jdGlvbigpIHsKICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpOwogICAgICBlbC5hZGRDbGFzcyhzZXR0aW5ncy50aW1lcl9wYXVzZWRfY2xhc3MpOwogICAgICBsZWZ0ID0gLTE7CiAgICAgIHNlbGYudXBkYXRlX3Byb2dyZXNzKDApOwogICAgfTsKCiAgICB0aGlzLnN0YXJ0ID0gZnVuY3Rpb24oKSB7CiAgICAgIGlmICghZWwuaGFzQ2xhc3Moc2V0dGluZ3MudGltZXJfcGF1c2VkX2NsYXNzKSkge3JldHVybiB0cnVlO30KICAgICAgbGVmdCA9IChsZWZ0ID09PSAtMSkgPyBkdXJhdGlvbiA6IGxlZnQ7CiAgICAgIGVsLnJlbW92ZUNsYXNzKHNldHRpbmdzLnRpbWVyX3BhdXNlZF9jbGFzcyk7CiAgICAgIHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7CiAgICAgIHByb2dyZXNzLmFuaW1hdGUoeyd3aWR0aCc6ICcxMDAlJ30sIGxlZnQsICdsaW5lYXInKTsKICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgc2VsZi5yZXN0YXJ0KCk7CiAgICAgICAgY2FsbGJhY2soKTsKICAgICAgfSwgbGVmdCk7CiAgICAgIGVsLnRyaWdnZXIoJ3RpbWVyLXN0YXJ0ZWQuZm5kdG4ub3JiaXQnKQogICAgfTsKCiAgICB0aGlzLnN0b3AgPSBmdW5jdGlvbigpIHsKICAgICAgaWYgKGVsLmhhc0NsYXNzKHNldHRpbmdzLnRpbWVyX3BhdXNlZF9jbGFzcykpIHtyZXR1cm4gdHJ1ZTt9CiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTsKICAgICAgZWwuYWRkQ2xhc3Moc2V0dGluZ3MudGltZXJfcGF1c2VkX2NsYXNzKTsKICAgICAgdmFyIGVuZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwogICAgICBsZWZ0ID0gbGVmdCAtIChlbmQgLSBzdGFydCk7CiAgICAgIHZhciB3ID0gMTAwIC0gKChsZWZ0IC8gZHVyYXRpb24pICogMTAwKTsKICAgICAgc2VsZi51cGRhdGVfcHJvZ3Jlc3Modyk7CiAgICAgIGVsLnRyaWdnZXIoJ3RpbWVyLXN0b3BwZWQuZm5kdG4ub3JiaXQnKTsKICAgIH07CiAgfTsKICAKICB2YXIgU2xpZGVBbmltYXRpb24gPSBmdW5jdGlvbihzZXR0aW5ncywgY29udGFpbmVyKSB7CiAgICB2YXIgZHVyYXRpb24gPSBzZXR0aW5ncy5hbmltYXRpb25fc3BlZWQ7CiAgICB2YXIgaXNfcnRsID0gKCQoJ2h0bWxbZGlyPXJ0bF0nKS5sZW5ndGggPT09IDEpOwogICAgdmFyIG1hcmdpbiA9IGlzX3J0bCA/ICdtYXJnaW5SaWdodCcgOiAnbWFyZ2luTGVmdCc7CiAgICB2YXIgYW5pbU1hcmdpbiA9IHt9OwogICAgYW5pbU1hcmdpblttYXJnaW5dID0gJzAlJzsKCiAgICB0aGlzLm5leHQgPSBmdW5jdGlvbihjdXJyZW50LCBuZXh0LCBjYWxsYmFjaykgewogICAgICBjdXJyZW50LmFuaW1hdGUoe21hcmdpbkxlZnQ6Jy0xMDAlJ30sIGR1cmF0aW9uKTsKICAgICAgbmV4dC5hbmltYXRlKGFuaW1NYXJnaW4sIGR1cmF0aW9uLCBmdW5jdGlvbigpIHsKICAgICAgICBjdXJyZW50LmNzcyhtYXJnaW4sICcxMDAlJyk7CiAgICAgICAgY2FsbGJhY2soKTsKICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMucHJldiA9IGZ1bmN0aW9uKGN1cnJlbnQsIHByZXYsIGNhbGxiYWNrKSB7CiAgICAgIGN1cnJlbnQuYW5pbWF0ZSh7bWFyZ2luTGVmdDonMTAwJSd9LCBkdXJhdGlvbik7CiAgICAgIHByZXYuY3NzKG1hcmdpbiwgJy0xMDAlJyk7CiAgICAgIHByZXYuYW5pbWF0ZShhbmltTWFyZ2luLCBkdXJhdGlvbiwgZnVuY3Rpb24oKSB7CiAgICAgICAgY3VycmVudC5jc3MobWFyZ2luLCAnMTAwJScpOwogICAgICAgIGNhbGxiYWNrKCk7CiAgICAgIH0pOwogICAgfTsKICB9OwoKICB2YXIgRmFkZUFuaW1hdGlvbiA9IGZ1bmN0aW9uKHNldHRpbmdzLCBjb250YWluZXIpIHsKICAgIHZhciBkdXJhdGlvbiA9IHNldHRpbmdzLmFuaW1hdGlvbl9zcGVlZDsKICAgIHZhciBpc19ydGwgPSAoJCgnaHRtbFtkaXI9cnRsXScpLmxlbmd0aCA9PT0gMSk7CiAgICB2YXIgbWFyZ2luID0gaXNfcnRsID8gJ21hcmdpblJpZ2h0JyA6ICdtYXJnaW5MZWZ0JzsKCiAgICB0aGlzLm5leHQgPSBmdW5jdGlvbihjdXJyZW50LCBuZXh0LCBjYWxsYmFjaykgewogICAgICBuZXh0LmNzcyh7J21hcmdpbic6JzAlJywgJ29wYWNpdHknOicwLjAxJ30pOwogICAgICBuZXh0LmFuaW1hdGUoeydvcGFjaXR5JzonMSd9LCBkdXJhdGlvbiwgJ2xpbmVhcicsIGZ1bmN0aW9uKCkgewogICAgICAgIGN1cnJlbnQuY3NzKCdtYXJnaW4nLCAnMTAwJScpOwogICAgICAgIGNhbGxiYWNrKCk7CiAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLnByZXYgPSBmdW5jdGlvbihjdXJyZW50LCBwcmV2LCBjYWxsYmFjaykgewogICAgICBwcmV2LmNzcyh7J21hcmdpbic6JzAlJywgJ29wYWNpdHknOicwLjAxJ30pOwogICAgICBwcmV2LmFuaW1hdGUoeydvcGFjaXR5JzonMSd9LCBkdXJhdGlvbiwgJ2xpbmVhcicsIGZ1bmN0aW9uKCkgewogICAgICAgIGN1cnJlbnQuY3NzKCdtYXJnaW4nLCAnMTAwJScpOwogICAgICAgIGNhbGxiYWNrKCk7CiAgICAgIH0pOwogICAgfTsKICB9OwoKCiAgRm91bmRhdGlvbi5saWJzID0gRm91bmRhdGlvbi5saWJzIHx8IHt9OwoKICBGb3VuZGF0aW9uLmxpYnMub3JiaXQgPSB7CiAgICBuYW1lOiAnb3JiaXQnLAoKICAgIHZlcnNpb246ICc1LjAuMCcsCgogICAgc2V0dGluZ3M6IHsKICAgICAgYW5pbWF0aW9uOiAnc2xpZGUnLAogICAgICB0aW1lcl9zcGVlZDogMTAwMDAsCiAgICAgIHBhdXNlX29uX2hvdmVyOiB0cnVlLAogICAgICByZXN1bWVfb25fbW91c2VvdXQ6IGZhbHNlLAogICAgICBhbmltYXRpb25fc3BlZWQ6IDUwMCwKICAgICAgc3RhY2tfb25fc21hbGw6IGZhbHNlLAogICAgICBuYXZpZ2F0aW9uX2Fycm93czogdHJ1ZSwKICAgICAgc2xpZGVfbnVtYmVyOiB0cnVlLAogICAgICBzbGlkZV9udW1iZXJfdGV4dDogJ29mJywKICAgICAgY29udGFpbmVyX2NsYXNzOiAnb3JiaXQtY29udGFpbmVyJywKICAgICAgc3RhY2tfb25fc21hbGxfY2xhc3M6ICdvcmJpdC1zdGFjay1vbi1zbWFsbCcsCiAgICAgIG5leHRfY2xhc3M6ICdvcmJpdC1uZXh0JywKICAgICAgcHJldl9jbGFzczogJ29yYml0LXByZXYnLAogICAgICB0aW1lcl9jb250YWluZXJfY2xhc3M6ICdvcmJpdC10aW1lcicsCiAgICAgIHRpbWVyX3BhdXNlZF9jbGFzczogJ3BhdXNlZCcsCiAgICAgIHRpbWVyX3Byb2dyZXNzX2NsYXNzOiAnb3JiaXQtcHJvZ3Jlc3MnLAogICAgICBzbGlkZXNfY29udGFpbmVyX2NsYXNzOiAnb3JiaXQtc2xpZGVzLWNvbnRhaW5lcicsCiAgICAgIGJ1bGxldHNfY29udGFpbmVyX2NsYXNzOiAnb3JiaXQtYnVsbGV0cycsCiAgICAgIGJ1bGxldHNfYWN0aXZlX2NsYXNzOiAnYWN0aXZlJywKICAgICAgc2xpZGVfbnVtYmVyX2NsYXNzOiAnb3JiaXQtc2xpZGUtbnVtYmVyJywKICAgICAgY2FwdGlvbl9jbGFzczogJ29yYml0LWNhcHRpb24nLAogICAgICBhY3RpdmVfc2xpZGVfY2xhc3M6ICdhY3RpdmUnLAogICAgICBvcmJpdF90cmFuc2l0aW9uX2NsYXNzOiAnb3JiaXQtdHJhbnNpdGlvbmluZycsCiAgICAgIGJ1bGxldHM6IHRydWUsCiAgICAgIHRpbWVyOiB0cnVlLAogICAgICB2YXJpYWJsZV9oZWlnaHQ6IGZhbHNlLAogICAgICBzd2lwZTogdHJ1ZSwKICAgICAgYmVmb3JlX3NsaWRlX2NoYW5nZTogbm9vcCwKICAgICAgYWZ0ZXJfc2xpZGVfY2hhbmdlOiBub29wCiAgICB9LAoKICAgIGluaXQ6IGZ1bmN0aW9uIChzY29wZSwgbWV0aG9kLCBvcHRpb25zKSB7CiAgICAgIHZhciBzZWxmID0gdGhpczsKCiAgICAgIGlmICh0eXBlb2YgbWV0aG9kID09PSAnb2JqZWN0JykgewogICAgICAgICQuZXh0ZW5kKHRydWUsIHNlbGYuc2V0dGluZ3MsIG1ldGhvZCk7CiAgICAgIH0KCiAgICAgIGlmICgkKHNjb3BlKS5pcygnW2RhdGEtb3JiaXRdJykpIHsKICAgICAgICB2YXIgJGVsID0gJChzY29wZSk7CiAgICAgICAgdmFyIG9wdHMgPSBzZWxmLmRhdGFfb3B0aW9ucygkZWwpOwogICAgICAgIG5ldyBPcmJpdCgkZWwsICQuZXh0ZW5kKHt9LHNlbGYuc2V0dGluZ3MsIG9wdHMpKTsKICAgICAgfQoKICAgICAgJCgnW2RhdGEtb3JiaXRdJywgc2NvcGUpLmVhY2goZnVuY3Rpb24oaWR4LCBlbCkgewogICAgICAgIHZhciAkZWwgPSAkKGVsKTsKICAgICAgICB2YXIgb3B0cyA9IHNlbGYuZGF0YV9vcHRpb25zKCRlbCk7CiAgICAgICAgbmV3IE9yYml0KCRlbCwgJC5leHRlbmQoe30sc2VsZi5zZXR0aW5ncywgb3B0cykpOwogICAgICB9KTsKICAgIH0KICB9OwoKICAgIAp9KGpRdWVyeSwgdGhpcywgdGhpcy5kb2N1bWVudCkpOwoKOyhmdW5jdGlvbiAoJCwgd2luZG93LCBkb2N1bWVudCwgdW5kZWZpbmVkKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICBGb3VuZGF0aW9uLmxpYnMucmV2ZWFsID0gewogICAgbmFtZSA6ICdyZXZlYWwnLAoKICAgIHZlcnNpb24gOiAnNS4wLjAnLAoKICAgIGxvY2tlZCA6IGZhbHNlLAoKICAgIHNldHRpbmdzIDogewogICAgICBhbmltYXRpb246ICdmYWRlQW5kUG9wJywKICAgICAgYW5pbWF0aW9uX3NwZWVkOiAyNTAsCiAgICAgIGNsb3NlX29uX2JhY2tncm91bmRfY2xpY2s6IHRydWUsCiAgICAgIGNsb3NlX29uX2VzYzogdHJ1ZSwKICAgICAgZGlzbWlzc19tb2RhbF9jbGFzczogJ2Nsb3NlLXJldmVhbC1tb2RhbCcsCiAgICAgIGJnX2NsYXNzOiAncmV2ZWFsLW1vZGFsLWJnJywKICAgICAgb3BlbjogZnVuY3Rpb24oKXt9LAogICAgICBvcGVuZWQ6IGZ1bmN0aW9uKCl7fSwKICAgICAgY2xvc2U6IGZ1bmN0aW9uKCl7fSwKICAgICAgY2xvc2VkOiBmdW5jdGlvbigpe30sCiAgICAgIGJnIDogJCgnLnJldmVhbC1tb2RhbC1iZycpLAogICAgICBjc3MgOiB7CiAgICAgICAgb3BlbiA6IHsKICAgICAgICAgICdvcGFjaXR5JzogMCwKICAgICAgICAgICd2aXNpYmlsaXR5JzogJ3Zpc2libGUnLAogICAgICAgICAgJ2Rpc3BsYXknIDogJ2Jsb2NrJwogICAgICAgIH0sCiAgICAgICAgY2xvc2UgOiB7CiAgICAgICAgICAnb3BhY2l0eSc6IDEsCiAgICAgICAgICAndmlzaWJpbGl0eSc6ICdoaWRkZW4nLAogICAgICAgICAgJ2Rpc3BsYXknOiAnbm9uZScKICAgICAgICB9CiAgICAgIH0KICAgIH0sCgogICAgaW5pdCA6IGZ1bmN0aW9uIChzY29wZSwgbWV0aG9kLCBvcHRpb25zKSB7CiAgICAgIEZvdW5kYXRpb24uaW5oZXJpdCh0aGlzLCAnZGVsYXknKTsKCiAgICAgIHRoaXMuYmluZGluZ3MobWV0aG9kLCBvcHRpb25zKTsKICAgIH0sCgogICAgZXZlbnRzIDogZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgIHZhciBzZWxmID0gdGhpczsKCiAgICAgICQoJ1tkYXRhLXJldmVhbC1pZF0nLCB0aGlzLnNjb3BlKQogICAgICAgIC5vZmYoJy5yZXZlYWwnKQogICAgICAgIC5vbignY2xpY2suZm5kdG4ucmV2ZWFsJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKCiAgICAgICAgICBpZiAoIXNlbGYubG9ja2VkKSB7CiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gJCh0aGlzKSwKICAgICAgICAgICAgICAgIGFqYXggPSBlbGVtZW50LmRhdGEoJ3JldmVhbC1hamF4Jyk7CgogICAgICAgICAgICBzZWxmLmxvY2tlZCA9IHRydWU7CgogICAgICAgICAgICBpZiAodHlwZW9mIGFqYXggPT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgICAgc2VsZi5vcGVuLmNhbGwoc2VsZiwgZWxlbWVudCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdmFyIHVybCA9IGFqYXggPT09IHRydWUgPyBlbGVtZW50LmF0dHIoJ2hyZWYnKSA6IGFqYXg7CgogICAgICAgICAgICAgIHNlbGYub3Blbi5jYWxsKHNlbGYsIGVsZW1lbnQsIHt1cmw6IHVybH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAkKHRoaXMuc2NvcGUpCiAgICAgICAgLm9mZignLnJldmVhbCcpCiAgICAgICAgLm9uKCdjbGljay5mbmR0bi5yZXZlYWwnLCB0aGlzLmNsb3NlX3RhcmdldHMoKSwgZnVuY3Rpb24gKGUpIHsKCiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CgogICAgICAgICAgaWYgKCFzZWxmLmxvY2tlZCkgewogICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSAkKCdbZGF0YS1yZXZlYWxdLm9wZW4nKS5kYXRhKCdyZXZlYWwtaW5pdCcpLAogICAgICAgICAgICAgICAgYmdfY2xpY2tlZCA9ICQoZS50YXJnZXQpWzBdID09PSAkKCcuJyArIHNldHRpbmdzLmJnX2NsYXNzKVswXTsKCiAgICAgICAgICAgIGlmIChiZ19jbGlja2VkICYmICFzZXR0aW5ncy5jbG9zZV9vbl9iYWNrZ3JvdW5kX2NsaWNrKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBzZWxmLmxvY2tlZCA9IHRydWU7CiAgICAgICAgICAgIHNlbGYuY2xvc2UuY2FsbChzZWxmLCBiZ19jbGlja2VkID8gJCgnW2RhdGEtcmV2ZWFsXS5vcGVuJykgOiAkKHRoaXMpLmNsb3Nlc3QoJ1tkYXRhLXJldmVhbF0nKSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICBpZigkKCdbZGF0YS1yZXZlYWxdJywgdGhpcy5zY29wZSkubGVuZ3RoID4gMCkgewogICAgICAgICQodGhpcy5zY29wZSkKICAgICAgICAgIC8vIC5vZmYoJy5yZXZlYWwnKQogICAgICAgICAgLm9uKCdvcGVuLmZuZHRuLnJldmVhbCcsIHRoaXMuc2V0dGluZ3Mub3BlbikKICAgICAgICAgIC5vbignb3BlbmVkLmZuZHRuLnJldmVhbCcsIHRoaXMuc2V0dGluZ3Mub3BlbmVkKQogICAgICAgICAgLm9uKCdvcGVuZWQuZm5kdG4ucmV2ZWFsJywgdGhpcy5vcGVuX3ZpZGVvKQogICAgICAgICAgLm9uKCdjbG9zZS5mbmR0bi5yZXZlYWwnLCB0aGlzLnNldHRpbmdzLmNsb3NlKQogICAgICAgICAgLm9uKCdjbG9zZWQuZm5kdG4ucmV2ZWFsJywgdGhpcy5zZXR0aW5ncy5jbG9zZWQpCiAgICAgICAgICAub24oJ2Nsb3NlZC5mbmR0bi5yZXZlYWwnLCB0aGlzLmNsb3NlX3ZpZGVvKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAkKHRoaXMuc2NvcGUpCiAgICAgICAgICAvLyAub2ZmKCcucmV2ZWFsJykKICAgICAgICAgIC5vbignb3Blbi5mbmR0bi5yZXZlYWwnLCAnW2RhdGEtcmV2ZWFsXScsIHRoaXMuc2V0dGluZ3Mub3BlbikKICAgICAgICAgIC5vbignb3BlbmVkLmZuZHRuLnJldmVhbCcsICdbZGF0YS1yZXZlYWxdJywgdGhpcy5zZXR0aW5ncy5vcGVuZWQpCiAgICAgICAgICAub24oJ29wZW5lZC5mbmR0bi5yZXZlYWwnLCAnW2RhdGEtcmV2ZWFsXScsIHRoaXMub3Blbl92aWRlbykKICAgICAgICAgIC5vbignY2xvc2UuZm5kdG4ucmV2ZWFsJywgJ1tkYXRhLXJldmVhbF0nLCB0aGlzLnNldHRpbmdzLmNsb3NlKQogICAgICAgICAgLm9uKCdjbG9zZWQuZm5kdG4ucmV2ZWFsJywgJ1tkYXRhLXJldmVhbF0nLCB0aGlzLnNldHRpbmdzLmNsb3NlZCkKICAgICAgICAgIC5vbignY2xvc2VkLmZuZHRuLnJldmVhbCcsICdbZGF0YS1yZXZlYWxdJywgdGhpcy5jbG9zZV92aWRlbyk7CiAgICAgIH0KCiAgICAgICQoJ2JvZHknKS5vbigna2V5dXAuZm5kdG4ucmV2ZWFsJywgZnVuY3Rpb24gKCBldmVudCApIHsKICAgICAgICB2YXIgb3Blbl9tb2RhbCA9ICQoJ1tkYXRhLXJldmVhbF0ub3BlbicpLAogICAgICAgICAgICBzZXR0aW5ncyA9IG9wZW5fbW9kYWwuZGF0YSgncmV2ZWFsLWluaXQnKTsKICAgICAgICBpZiAoIGV2ZW50LndoaWNoID09PSAyNyAgJiYgc2V0dGluZ3MuY2xvc2Vfb25fZXNjKSB7IC8vIDI3IGlzIHRoZSBrZXljb2RlIGZvciB0aGUgRXNjYXBlIGtleQogICAgICAgICAgb3Blbl9tb2RhbC5mb3VuZGF0aW9uKCdyZXZlYWwnLCAnY2xvc2UnKTsKICAgICAgICB9CiAgICAgIH0pOwoKICAgICAgcmV0dXJuIHRydWU7CiAgICB9LAoKICAgIG9wZW4gOiBmdW5jdGlvbiAodGFyZ2V0LCBhamF4X3NldHRpbmdzKSB7CiAgICAgIGlmICh0YXJnZXQpIHsKICAgICAgICBpZiAodHlwZW9mIHRhcmdldC5zZWxlY3RvciAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgIHZhciBtb2RhbCA9ICQoJyMnICsgdGFyZ2V0LmRhdGEoJ3JldmVhbC1pZCcpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIG1vZGFsID0gJCh0aGlzLnNjb3BlKTsKCiAgICAgICAgICBhamF4X3NldHRpbmdzID0gdGFyZ2V0OwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgbW9kYWwgPSAkKHRoaXMuc2NvcGUpOwogICAgICB9CgogICAgICBpZiAoIW1vZGFsLmhhc0NsYXNzKCdvcGVuJykpIHsKICAgICAgICB2YXIgb3Blbl9tb2RhbCA9ICQoJ1tkYXRhLXJldmVhbF0ub3BlbicpOwoKICAgICAgICBpZiAodHlwZW9mIG1vZGFsLmRhdGEoJ2Nzcy10b3AnKSA9PT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgIG1vZGFsLmRhdGEoJ2Nzcy10b3AnLCBwYXJzZUludChtb2RhbC5jc3MoJ3RvcCcpLCAxMCkpCiAgICAgICAgICAgIC5kYXRhKCdvZmZzZXQnLCB0aGlzLmNhY2hlX29mZnNldChtb2RhbCkpOwogICAgICAgIH0KCiAgICAgICAgbW9kYWwudHJpZ2dlcignb3BlbicpOwoKICAgICAgICBpZiAob3Blbl9tb2RhbC5sZW5ndGggPCAxKSB7CiAgICAgICAgICB0aGlzLnRvZ2dsZV9iZygpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHR5cGVvZiBhamF4X3NldHRpbmdzID09PSAndW5kZWZpbmVkJyB8fCAhYWpheF9zZXR0aW5ncy51cmwpIHsKICAgICAgICAgIHRoaXMuaGlkZShvcGVuX21vZGFsLCB0aGlzLnNldHRpbmdzLmNzcy5jbG9zZSk7CiAgICAgICAgICB0aGlzLnNob3cobW9kYWwsIHRoaXMuc2V0dGluZ3MuY3NzLm9wZW4pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgc2VsZiA9IHRoaXMsCiAgICAgICAgICAgICAgb2xkX3N1Y2Nlc3MgPSB0eXBlb2YgYWpheF9zZXR0aW5ncy5zdWNjZXNzICE9PSAndW5kZWZpbmVkJyA/IGFqYXhfc2V0dGluZ3Muc3VjY2VzcyA6IG51bGw7CgogICAgICAgICAgJC5leHRlbmQoYWpheF9zZXR0aW5ncywgewogICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSwgdGV4dFN0YXR1cywganFYSFIpIHsKICAgICAgICAgICAgICBpZiAoICQuaXNGdW5jdGlvbihvbGRfc3VjY2VzcykgKSB7CiAgICAgICAgICAgICAgICBvbGRfc3VjY2VzcyhkYXRhLCB0ZXh0U3RhdHVzLCBqcVhIUik7CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBtb2RhbC5odG1sKGRhdGEpOwogICAgICAgICAgICAgICQobW9kYWwpLmZvdW5kYXRpb24oJ3NlY3Rpb24nLCAncmVmbG93Jyk7CgogICAgICAgICAgICAgIHNlbGYuaGlkZShvcGVuX21vZGFsLCBzZWxmLnNldHRpbmdzLmNzcy5jbG9zZSk7CiAgICAgICAgICAgICAgc2VsZi5zaG93KG1vZGFsLCBzZWxmLnNldHRpbmdzLmNzcy5vcGVuKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CgogICAgICAgICAgJC5hamF4KGFqYXhfc2V0dGluZ3MpOwogICAgICAgIH0KICAgICAgfQogICAgfSwKCiAgICBjbG9zZSA6IGZ1bmN0aW9uIChtb2RhbCkgewoKICAgICAgdmFyIG1vZGFsID0gbW9kYWwgJiYgbW9kYWwubGVuZ3RoID8gbW9kYWwgOiAkKHRoaXMuc2NvcGUpLAogICAgICAgICAgb3Blbl9tb2RhbHMgPSAkKCdbZGF0YS1yZXZlYWxdLm9wZW4nKTsKCiAgICAgIGlmIChvcGVuX21vZGFscy5sZW5ndGggPiAwKSB7CiAgICAgICAgdGhpcy5sb2NrZWQgPSB0cnVlOwogICAgICAgIG1vZGFsLnRyaWdnZXIoJ2Nsb3NlJyk7CiAgICAgICAgdGhpcy50b2dnbGVfYmcoKTsKICAgICAgICB0aGlzLmhpZGUob3Blbl9tb2RhbHMsIHRoaXMuc2V0dGluZ3MuY3NzLmNsb3NlKTsKICAgICAgfQogICAgfSwKCiAgICBjbG9zZV90YXJnZXRzIDogZnVuY3Rpb24gKCkgewogICAgICB2YXIgYmFzZSA9ICcuJyArIHRoaXMuc2V0dGluZ3MuZGlzbWlzc19tb2RhbF9jbGFzczsKCiAgICAgIGlmICh0aGlzLnNldHRpbmdzLmNsb3NlX29uX2JhY2tncm91bmRfY2xpY2spIHsKICAgICAgICByZXR1cm4gYmFzZSArICcsIC4nICsgdGhpcy5zZXR0aW5ncy5iZ19jbGFzczsKICAgICAgfQoKICAgICAgcmV0dXJuIGJhc2U7CiAgICB9LAoKICAgIHRvZ2dsZV9iZyA6IGZ1bmN0aW9uICgpIHsKICAgICAgaWYgKCQoJy4nICsgdGhpcy5zZXR0aW5ncy5iZ19jbGFzcykubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhpcy5zZXR0aW5ncy5iZyA9ICQoJzxkaXYgLz4nLCB7J2NsYXNzJzogdGhpcy5zZXR0aW5ncy5iZ19jbGFzc30pCiAgICAgICAgICAuYXBwZW5kVG8oJ2JvZHknKTsKICAgICAgfQoKICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuYmcuZmlsdGVyKCc6dmlzaWJsZScpLmxlbmd0aCA+IDApIHsKICAgICAgICB0aGlzLmhpZGUodGhpcy5zZXR0aW5ncy5iZyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5zaG93KHRoaXMuc2V0dGluZ3MuYmcpOwogICAgICB9CiAgICB9LAoKICAgIHNob3cgOiBmdW5jdGlvbiAoZWwsIGNzcykgewogICAgICAvLyBpcyBtb2RhbAogICAgICBpZiAoY3NzKSB7CiAgICAgICAgaWYgKGVsLnBhcmVudCgnYm9keScpLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgdmFyIHBsYWNlaG9sZGVyID0gZWwud3JhcCgnPGRpdiBzdHlsZT0iZGlzcGxheTogbm9uZTsiIC8+JykucGFyZW50KCk7CiAgICAgICAgICBlbC5vbignY2xvc2VkLmZuZHRuLnJldmVhbC53cmFwcGVkJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGVsLmRldGFjaCgpLmFwcGVuZFRvKHBsYWNlaG9sZGVyKTsKICAgICAgICAgICAgZWwudW53cmFwKCkudW5iaW5kKCdjbG9zZWQuZm5kdG4ucmV2ZWFsLndyYXBwZWQnKTsKICAgICAgICAgIH0pOwoKICAgICAgICAgIGVsLmRldGFjaCgpLmFwcGVuZFRvKCdib2R5Jyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoL3BvcC9pLnRlc3QodGhpcy5zZXR0aW5ncy5hbmltYXRpb24pKSB7CiAgICAgICAgICBjc3MudG9wID0gJCh3aW5kb3cpLnNjcm9sbFRvcCgpIC0gZWwuZGF0YSgnb2Zmc2V0JykgKyAncHgnOwogICAgICAgICAgdmFyIGVuZF9jc3MgPSB7CiAgICAgICAgICAgIHRvcDogJCh3aW5kb3cpLnNjcm9sbFRvcCgpICsgZWwuZGF0YSgnY3NzLXRvcCcpICsgJ3B4JywKICAgICAgICAgICAgb3BhY2l0eTogMQogICAgICAgICAgfTsKCiAgICAgICAgICByZXR1cm4gdGhpcy5kZWxheShmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiBlbAogICAgICAgICAgICAgIC5jc3MoY3NzKQogICAgICAgICAgICAgIC5hbmltYXRlKGVuZF9jc3MsIHRoaXMuc2V0dGluZ3MuYW5pbWF0aW9uX3NwZWVkLCAnbGluZWFyJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdGhpcy5sb2NrZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGVsLnRyaWdnZXIoJ29wZW5lZCcpOwogICAgICAgICAgICAgIH0uYmluZCh0aGlzKSkKICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ29wZW4nKTsKICAgICAgICAgIH0uYmluZCh0aGlzKSwgdGhpcy5zZXR0aW5ncy5hbmltYXRpb25fc3BlZWQgLyAyKTsKICAgICAgICB9CgogICAgICAgIGlmICgvZmFkZS9pLnRlc3QodGhpcy5zZXR0aW5ncy5hbmltYXRpb24pKSB7CiAgICAgICAgICB2YXIgZW5kX2NzcyA9IHtvcGFjaXR5OiAxfTsKCiAgICAgICAgICByZXR1cm4gdGhpcy5kZWxheShmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiBlbAogICAgICAgICAgICAgIC5jc3MoY3NzKQogICAgICAgICAgICAgIC5hbmltYXRlKGVuZF9jc3MsIHRoaXMuc2V0dGluZ3MuYW5pbWF0aW9uX3NwZWVkLCAnbGluZWFyJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdGhpcy5sb2NrZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGVsLnRyaWdnZXIoJ29wZW5lZCcpOwogICAgICAgICAgICAgIH0uYmluZCh0aGlzKSkKICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ29wZW4nKTsKICAgICAgICAgIH0uYmluZCh0aGlzKSwgdGhpcy5zZXR0aW5ncy5hbmltYXRpb25fc3BlZWQgLyAyKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBlbC5jc3MoY3NzKS5zaG93KCkuY3NzKHtvcGFjaXR5OiAxfSkuYWRkQ2xhc3MoJ29wZW4nKS50cmlnZ2VyKCdvcGVuZWQnKTsKICAgICAgfQoKICAgICAgLy8gc2hvdWxkIHdlIGFuaW1hdGUgdGhlIGJhY2tncm91bmQ/CiAgICAgIGlmICgvZmFkZS9pLnRlc3QodGhpcy5zZXR0aW5ncy5hbmltYXRpb24pKSB7CiAgICAgICAgcmV0dXJuIGVsLmZhZGVJbih0aGlzLnNldHRpbmdzLmFuaW1hdGlvbl9zcGVlZCAvIDIpOwogICAgICB9CgogICAgICByZXR1cm4gZWwuc2hvdygpOwogICAgfSwKCiAgICBoaWRlIDogZnVuY3Rpb24gKGVsLCBjc3MpIHsKICAgICAgLy8gaXMgbW9kYWwKICAgICAgaWYgKGNzcykgewogICAgICAgIGlmICgvcG9wL2kudGVzdCh0aGlzLnNldHRpbmdzLmFuaW1hdGlvbikpIHsKICAgICAgICAgIHZhciBlbmRfY3NzID0gewogICAgICAgICAgICB0b3A6IC0gJCh3aW5kb3cpLnNjcm9sbFRvcCgpIC0gZWwuZGF0YSgnb2Zmc2V0JykgKyAncHgnLAogICAgICAgICAgICBvcGFjaXR5OiAwCiAgICAgICAgICB9OwoKICAgICAgICAgIHJldHVybiB0aGlzLmRlbGF5KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIGVsCiAgICAgICAgICAgICAgLmFuaW1hdGUoZW5kX2NzcywgdGhpcy5zZXR0aW5ncy5hbmltYXRpb25fc3BlZWQsICdsaW5lYXInLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB0aGlzLmxvY2tlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgZWwuY3NzKGNzcykudHJpZ2dlcignY2xvc2VkJyk7CiAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKQogICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnb3BlbicpOwogICAgICAgICAgfS5iaW5kKHRoaXMpLCB0aGlzLnNldHRpbmdzLmFuaW1hdGlvbl9zcGVlZCAvIDIpOwogICAgICAgIH0KCiAgICAgICAgaWYgKC9mYWRlL2kudGVzdCh0aGlzLnNldHRpbmdzLmFuaW1hdGlvbikpIHsKICAgICAgICAgIHZhciBlbmRfY3NzID0ge29wYWNpdHk6IDB9OwoKICAgICAgICAgIHJldHVybiB0aGlzLmRlbGF5KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIGVsCiAgICAgICAgICAgICAgLmFuaW1hdGUoZW5kX2NzcywgdGhpcy5zZXR0aW5ncy5hbmltYXRpb25fc3BlZWQsICdsaW5lYXInLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB0aGlzLmxvY2tlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgZWwuY3NzKGNzcykudHJpZ2dlcignY2xvc2VkJyk7CiAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKQogICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnb3BlbicpOwogICAgICAgICAgfS5iaW5kKHRoaXMpLCB0aGlzLnNldHRpbmdzLmFuaW1hdGlvbl9zcGVlZCAvIDIpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGVsLmhpZGUoKS5jc3MoY3NzKS5yZW1vdmVDbGFzcygnb3BlbicpLnRyaWdnZXIoJ2Nsb3NlZCcpOwogICAgICB9CgogICAgICAvLyBzaG91bGQgd2UgYW5pbWF0ZSB0aGUgYmFja2dyb3VuZD8KICAgICAgaWYgKC9mYWRlL2kudGVzdCh0aGlzLnNldHRpbmdzLmFuaW1hdGlvbikpIHsKICAgICAgICByZXR1cm4gZWwuZmFkZU91dCh0aGlzLnNldHRpbmdzLmFuaW1hdGlvbl9zcGVlZCAvIDIpOwogICAgICB9CgogICAgICByZXR1cm4gZWwuaGlkZSgpOwogICAgfSwKCiAgICBjbG9zZV92aWRlbyA6IGZ1bmN0aW9uIChlKSB7CiAgICAgIHZhciB2aWRlbyA9ICQodGhpcykuZmluZCgnLmZsZXgtdmlkZW8nKSwKICAgICAgICAgIGlmcmFtZSA9IHZpZGVvLmZpbmQoJ2lmcmFtZScpOwoKICAgICAgaWYgKGlmcmFtZS5sZW5ndGggPiAwKSB7CiAgICAgICAgaWZyYW1lLmF0dHIoJ2RhdGEtc3JjJywgaWZyYW1lWzBdLnNyYyk7CiAgICAgICAgaWZyYW1lLmF0dHIoJ3NyYycsICdhYm91dDpibGFuaycpOwogICAgICAgIHZpZGVvLmhpZGUoKTsKICAgICAgfQogICAgfSwKCiAgICBvcGVuX3ZpZGVvIDogZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIHZpZGVvID0gJCh0aGlzKS5maW5kKCcuZmxleC12aWRlbycpLAogICAgICAgICAgaWZyYW1lID0gdmlkZW8uZmluZCgnaWZyYW1lJyk7CgogICAgICBpZiAoaWZyYW1lLmxlbmd0aCA+IDApIHsKICAgICAgICB2YXIgZGF0YV9zcmMgPSBpZnJhbWUuYXR0cignZGF0YS1zcmMnKTsKICAgICAgICBpZiAodHlwZW9mIGRhdGFfc3JjID09PSAnc3RyaW5nJykgewogICAgICAgICAgaWZyYW1lWzBdLnNyYyA9IGlmcmFtZS5hdHRyKCdkYXRhLXNyYycpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgc3JjID0gaWZyYW1lWzBdLnNyYzsKICAgICAgICAgIGlmcmFtZVswXS5zcmMgPSB1bmRlZmluZWQ7CiAgICAgICAgICBpZnJhbWVbMF0uc3JjID0gc3JjOwogICAgICAgIH0KICAgICAgICB2aWRlby5zaG93KCk7CiAgICAgIH0KICAgIH0sCgogICAgY2FjaGVfb2Zmc2V0IDogZnVuY3Rpb24gKG1vZGFsKSB7CiAgICAgIHZhciBvZmZzZXQgPSBtb2RhbC5zaG93KCkuaGVpZ2h0KCkgKyBwYXJzZUludChtb2RhbC5jc3MoJ3RvcCcpLCAxMCk7CgogICAgICBtb2RhbC5oaWRlKCk7CgogICAgICByZXR1cm4gb2Zmc2V0OwogICAgfSwKCiAgICBvZmYgOiBmdW5jdGlvbiAoKSB7CiAgICAgICQodGhpcy5zY29wZSkub2ZmKCcuZm5kdG4ucmV2ZWFsJyk7CiAgICB9LAoKICAgIHJlZmxvdyA6IGZ1bmN0aW9uICgpIHt9CiAgfTsKfShqUXVlcnksIHRoaXMsIHRoaXMuZG9jdW1lbnQpKTsKCi8qanNsaW50IHVucGFyYW06IHRydWUsIGJyb3dzZXI6IHRydWUsIGluZGVudDogMiAqLwo7KGZ1bmN0aW9uICgkLCB3aW5kb3csIGRvY3VtZW50LCB1bmRlZmluZWQpIHsKICAndXNlIHN0cmljdCc7CgogIEZvdW5kYXRpb24ubGlicy50YWIgPSB7CiAgICBuYW1lIDogJ3RhYicsCgogICAgdmVyc2lvbiA6ICc1LjAuMScsCgogICAgc2V0dGluZ3MgOiB7CiAgICAgIGFjdGl2ZV9jbGFzczogJ2FjdGl2ZScKICAgIH0sCgogICAgaW5pdCA6IGZ1bmN0aW9uIChzY29wZSwgbWV0aG9kLCBvcHRpb25zKSB7CiAgICAgIHRoaXMuYmluZGluZ3MobWV0aG9kLCBvcHRpb25zKTsKICAgIH0sCgogICAgZXZlbnRzIDogZnVuY3Rpb24gKCkgewogICAgICAkKHRoaXMuc2NvcGUpLm9mZignLnRhYicpLm9uKCdjbGljay5mbmR0bi50YWInLCAnW2RhdGEtdGFiXSA+IGRkID4gYScsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgICB2YXIgdGFiID0gJCh0aGlzKS5wYXJlbnQoKSwKICAgICAgICAgICAgdGFyZ2V0ID0gJCgnIycgKyB0aGlzLmhyZWYuc3BsaXQoJyMnKVsxXSksCiAgICAgICAgICAgIHNpYmxpbmdzID0gdGFiLnNpYmxpbmdzKCksCiAgICAgICAgICAgIHNldHRpbmdzID0gdGFiLmNsb3Nlc3QoJ1tkYXRhLXRhYl0nKS5kYXRhKCd0YWItaW5pdCcpOwoKICAgICAgICB0YWIuYWRkQ2xhc3Moc2V0dGluZ3MuYWN0aXZlX2NsYXNzKTsKICAgICAgICBzaWJsaW5ncy5yZW1vdmVDbGFzcyhzZXR0aW5ncy5hY3RpdmVfY2xhc3MpOwogICAgICAgIHRhcmdldC5zaWJsaW5ncygpLnJlbW92ZUNsYXNzKHNldHRpbmdzLmFjdGl2ZV9jbGFzcykuZW5kKCkuYWRkQ2xhc3Moc2V0dGluZ3MuYWN0aXZlX2NsYXNzKTsKICAgICAgfSk7CiAgICB9LAoKICAgIG9mZiA6IGZ1bmN0aW9uICgpIHt9LAoKICAgIHJlZmxvdyA6IGZ1bmN0aW9uICgpIHt9CiAgfTsKfShqUXVlcnksIHRoaXMsIHRoaXMuZG9jdW1lbnQpKTsKCjsoZnVuY3Rpb24gKCQsIHdpbmRvdywgZG9jdW1lbnQsIHVuZGVmaW5lZCkgewogICd1c2Ugc3RyaWN0JzsKCiAgRm91bmRhdGlvbi5saWJzLnRvb2x0aXAgPSB7CiAgICBuYW1lIDogJ3Rvb2x0aXAnLAoKICAgIHZlcnNpb24gOiAnNS4wLjAnLAoKICAgIHNldHRpbmdzIDogewogICAgICBhZGRpdGlvbmFsX2luaGVyaXRhYmxlX2NsYXNzZXMgOiBbXSwKICAgICAgdG9vbHRpcF9jbGFzcyA6ICcudG9vbHRpcCcsCiAgICAgIGFwcGVuZF90bzogJ2JvZHknLAogICAgICB0b3VjaF9jbG9zZV90ZXh0OiAnVGFwIFRvIENsb3NlJywKICAgICAgZGlzYWJsZV9mb3JfdG91Y2g6IGZhbHNlLAogICAgICB0aXBfdGVtcGxhdGUgOiBmdW5jdGlvbiAoc2VsZWN0b3IsIGNvbnRlbnQpIHsKICAgICAgICByZXR1cm4gJzxzcGFuIGRhdGEtc2VsZWN0b3I9IicgKyBzZWxlY3RvciArICciIGNsYXNzPSInIAogICAgICAgICAgKyBGb3VuZGF0aW9uLmxpYnMudG9vbHRpcC5zZXR0aW5ncy50b29sdGlwX2NsYXNzLnN1YnN0cmluZygxKSAKICAgICAgICAgICsgJyI+JyArIGNvbnRlbnQgKyAnPHNwYW4gY2xhc3M9Im51YiI+PC9zcGFuPjwvc3Bhbj4nOwogICAgICB9CiAgICB9LAoKICAgIGNhY2hlIDoge30sCgogICAgaW5pdCA6IGZ1bmN0aW9uIChzY29wZSwgbWV0aG9kLCBvcHRpb25zKSB7CiAgICAgIHRoaXMuYmluZGluZ3MobWV0aG9kLCBvcHRpb25zKTsKICAgIH0sCgogICAgZXZlbnRzIDogZnVuY3Rpb24gKCkgewogICAgICB2YXIgc2VsZiA9IHRoaXM7CgogICAgICBpZiAoTW9kZXJuaXpyLnRvdWNoKSB7CiAgICAgICAgJCh0aGlzLnNjb3BlKQogICAgICAgICAgLm9mZignLnRvb2x0aXAnKQogICAgICAgICAgLm9uKCdjbGljay5mbmR0bi50b29sdGlwIHRvdWNoc3RhcnQuZm5kdG4udG9vbHRpcCB0b3VjaGVuZC5mbmR0bi50b29sdGlwJywgCiAgICAgICAgICAgICdbZGF0YS10b29sdGlwXScsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9ICQuZXh0ZW5kKHt9LCBzZWxmLnNldHRpbmdzLCBzZWxmLmRhdGFfb3B0aW9ucygkKHRoaXMpKSk7CiAgICAgICAgICAgIGlmICghc2V0dGluZ3MuZGlzYWJsZV9mb3JfdG91Y2gpIHsKICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgJChzZXR0aW5ncy50b29sdGlwX2NsYXNzKS5oaWRlKCk7CiAgICAgICAgICAgICAgc2VsZi5zaG93T3JDcmVhdGVUaXAoJCh0aGlzKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pCiAgICAgICAgICAub24oJ2NsaWNrLmZuZHRuLnRvb2x0aXAgdG91Y2hzdGFydC5mbmR0bi50b29sdGlwIHRvdWNoZW5kLmZuZHRuLnRvb2x0aXAnLCAKICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy50b29sdGlwX2NsYXNzLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICQodGhpcykuZmFkZU91dCgxNTApOwogICAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgJCh0aGlzLnNjb3BlKQogICAgICAgICAgLm9mZignLnRvb2x0aXAnKQogICAgICAgICAgLm9uKCdtb3VzZWVudGVyLmZuZHRuLnRvb2x0aXAgbW91c2VsZWF2ZS5mbmR0bi50b29sdGlwJywgCiAgICAgICAgICAgICdbZGF0YS10b29sdGlwXScsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7CgogICAgICAgICAgICBpZiAoL2VudGVyfG92ZXIvaS50ZXN0KGUudHlwZSkpIHsKICAgICAgICAgICAgICBzZWxmLnNob3dPckNyZWF0ZVRpcCgkdGhpcyk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoZS50eXBlID09PSAnbW91c2VvdXQnIHx8IGUudHlwZSA9PT0gJ21vdXNlbGVhdmUnKSB7CiAgICAgICAgICAgICAgc2VsZi5oaWRlKCR0aGlzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgIH0KICAgIH0sCgogICAgc2hvd09yQ3JlYXRlVGlwIDogZnVuY3Rpb24gKCR0YXJnZXQpIHsKICAgICAgdmFyICR0aXAgPSB0aGlzLmdldFRpcCgkdGFyZ2V0KTsKCiAgICAgIGlmICgkdGlwICYmICR0aXAubGVuZ3RoID4gMCkgewogICAgICAgIHJldHVybiB0aGlzLnNob3coJHRhcmdldCk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZSgkdGFyZ2V0KTsKICAgIH0sCgogICAgZ2V0VGlwIDogZnVuY3Rpb24gKCR0YXJnZXQpIHsKICAgICAgdmFyIHNlbGVjdG9yID0gdGhpcy5zZWxlY3RvcigkdGFyZ2V0KSwKICAgICAgICAgIHRpcCA9IG51bGw7CgogICAgICBpZiAoc2VsZWN0b3IpIHsKICAgICAgICB0aXAgPSAkKCdzcGFuW2RhdGEtc2VsZWN0b3I9IicgKyBzZWxlY3RvciArICciXScgKyB0aGlzLnNldHRpbmdzLnRvb2x0aXBfY2xhc3MpOwogICAgICB9CgogICAgICByZXR1cm4gKHR5cGVvZiB0aXAgPT09ICdvYmplY3QnKSA/IHRpcCA6IGZhbHNlOwogICAgfSwKCiAgICBzZWxlY3RvciA6IGZ1bmN0aW9uICgkdGFyZ2V0KSB7CiAgICAgIHZhciBpZCA9ICR0YXJnZXQuYXR0cignaWQnKSwKICAgICAgICAgIGRhdGFTZWxlY3RvciA9ICR0YXJnZXQuYXR0cignZGF0YS10b29sdGlwJykgfHwgJHRhcmdldC5hdHRyKCdkYXRhLXNlbGVjdG9yJyk7CgogICAgICBpZiAoKGlkICYmIGlkLmxlbmd0aCA8IDEgfHwgIWlkKSAmJiB0eXBlb2YgZGF0YVNlbGVjdG9yICE9ICdzdHJpbmcnKSB7CiAgICAgICAgZGF0YVNlbGVjdG9yID0gJ3Rvb2x0aXAnICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDcpOwogICAgICAgICR0YXJnZXQuYXR0cignZGF0YS1zZWxlY3RvcicsIGRhdGFTZWxlY3Rvcik7CiAgICAgIH0KCiAgICAgIHJldHVybiAoaWQgJiYgaWQubGVuZ3RoID4gMCkgPyBpZCA6IGRhdGFTZWxlY3RvcjsKICAgIH0sCgogICAgY3JlYXRlIDogZnVuY3Rpb24gKCR0YXJnZXQpIHsKICAgICAgdmFyICR0aXAgPSAkKHRoaXMuc2V0dGluZ3MudGlwX3RlbXBsYXRlKHRoaXMuc2VsZWN0b3IoJHRhcmdldCksICQoJzxkaXY+PC9kaXY+JykuaHRtbCgkdGFyZ2V0LmF0dHIoJ3RpdGxlJykpLmh0bWwoKSkpLAogICAgICAgICAgY2xhc3NlcyA9IHRoaXMuaW5oZXJpdGFibGVfY2xhc3NlcygkdGFyZ2V0KTsKCiAgICAgICR0aXAuYWRkQ2xhc3MoY2xhc3NlcykuYXBwZW5kVG8odGhpcy5zZXR0aW5ncy5hcHBlbmRfdG8pOwogICAgICBpZiAoTW9kZXJuaXpyLnRvdWNoKSB7CiAgICAgICAgJHRpcC5hcHBlbmQoJzxzcGFuIGNsYXNzPSJ0YXAtdG8tY2xvc2UiPicrdGhpcy5zZXR0aW5ncy50b3VjaF9jbG9zZV90ZXh0Kyc8L3NwYW4+Jyk7CiAgICAgIH0KICAgICAgJHRhcmdldC5yZW1vdmVBdHRyKCd0aXRsZScpLmF0dHIoJ3RpdGxlJywnJyk7CiAgICAgIHRoaXMuc2hvdygkdGFyZ2V0KTsKICAgIH0sCgogICAgcmVwb3NpdGlvbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHRpcCwgY2xhc3NlcykgewogICAgICB2YXIgd2lkdGgsIG51YiwgbnViSGVpZ2h0LCBudWJXaWR0aCwgY29sdW1uLCBvYmpQb3M7CgogICAgICB0aXAuY3NzKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpLnNob3coKTsKCiAgICAgIHdpZHRoID0gdGFyZ2V0LmRhdGEoJ3dpZHRoJyk7CiAgICAgIG51YiA9IHRpcC5jaGlsZHJlbignLm51YicpOwogICAgICBudWJIZWlnaHQgPSBudWIub3V0ZXJIZWlnaHQoKTsKICAgICAgbnViV2lkdGggPSBudWIub3V0ZXJIZWlnaHQoKTsKCiAgICAgIG9ialBvcyA9IGZ1bmN0aW9uIChvYmosIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgd2lkdGgpIHsKICAgICAgICByZXR1cm4gb2JqLmNzcyh7CiAgICAgICAgICAndG9wJyA6ICh0b3ApID8gdG9wIDogJ2F1dG8nLAogICAgICAgICAgJ2JvdHRvbScgOiAoYm90dG9tKSA/IGJvdHRvbSA6ICdhdXRvJywKICAgICAgICAgICdsZWZ0JyA6IChsZWZ0KSA/IGxlZnQgOiAnYXV0bycsCiAgICAgICAgICAncmlnaHQnIDogKHJpZ2h0KSA/IHJpZ2h0IDogJ2F1dG8nLAogICAgICAgICAgJ3dpZHRoJyA6ICh3aWR0aCkgPyB3aWR0aCA6ICdhdXRvJwogICAgICAgIH0pLmVuZCgpOwogICAgICB9OwoKICAgICAgb2JqUG9zKHRpcCwgKHRhcmdldC5vZmZzZXQoKS50b3AgKyB0YXJnZXQub3V0ZXJIZWlnaHQoKSArIDEwKSwgJ2F1dG8nLCAnYXV0bycsIHRhcmdldC5vZmZzZXQoKS5sZWZ0LCB3aWR0aCk7CgogICAgICBpZiAodGhpcy5zbWFsbCgpKSB7CiAgICAgICAgb2JqUG9zKHRpcCwgKHRhcmdldC5vZmZzZXQoKS50b3AgKyB0YXJnZXQub3V0ZXJIZWlnaHQoKSArIDEwKSwgJ2F1dG8nLCAnYXV0bycsIDEyLjUsICQodGhpcy5zY29wZSkud2lkdGgoKSk7CiAgICAgICAgdGlwLmFkZENsYXNzKCd0aXAtb3ZlcnJpZGUnKTsKICAgICAgICBvYmpQb3MobnViLCAtbnViSGVpZ2h0LCAnYXV0bycsICdhdXRvJywgdGFyZ2V0Lm9mZnNldCgpLmxlZnQpOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBsZWZ0ID0gdGFyZ2V0Lm9mZnNldCgpLmxlZnQ7CiAgICAgICAgaWYgKEZvdW5kYXRpb24ucnRsKSB7CiAgICAgICAgICBsZWZ0ID0gdGFyZ2V0Lm9mZnNldCgpLmxlZnQgKyB0YXJnZXQub2Zmc2V0KCkud2lkdGggLSB0aXAub3V0ZXJXaWR0aCgpOwogICAgICAgIH0KICAgICAgICBvYmpQb3ModGlwLCAodGFyZ2V0Lm9mZnNldCgpLnRvcCArIHRhcmdldC5vdXRlckhlaWdodCgpICsgMTApLCAnYXV0bycsICdhdXRvJywgbGVmdCwgd2lkdGgpOwogICAgICAgIHRpcC5yZW1vdmVDbGFzcygndGlwLW92ZXJyaWRlJyk7CiAgICAgICAgaWYgKGNsYXNzZXMgJiYgY2xhc3Nlcy5pbmRleE9mKCd0aXAtdG9wJykgPiAtMSkgewogICAgICAgICAgb2JqUG9zKHRpcCwgKHRhcmdldC5vZmZzZXQoKS50b3AgLSB0aXAub3V0ZXJIZWlnaHQoKSksICdhdXRvJywgJ2F1dG8nLCBsZWZ0LCB3aWR0aCkKICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCd0aXAtb3ZlcnJpZGUnKTsKICAgICAgICB9IGVsc2UgaWYgKGNsYXNzZXMgJiYgY2xhc3Nlcy5pbmRleE9mKCd0aXAtbGVmdCcpID4gLTEpIHsKICAgICAgICAgIG9ialBvcyh0aXAsICh0YXJnZXQub2Zmc2V0KCkudG9wICsgKHRhcmdldC5vdXRlckhlaWdodCgpIC8gMikgLSBudWJIZWlnaHQqMi41KSwgJ2F1dG8nLCAnYXV0bycsICh0YXJnZXQub2Zmc2V0KCkubGVmdCAtIHRpcC5vdXRlcldpZHRoKCkgLSBudWJIZWlnaHQpLCB3aWR0aCkKICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCd0aXAtb3ZlcnJpZGUnKTsKICAgICAgICB9IGVsc2UgaWYgKGNsYXNzZXMgJiYgY2xhc3Nlcy5pbmRleE9mKCd0aXAtcmlnaHQnKSA+IC0xKSB7CiAgICAgICAgICBvYmpQb3ModGlwLCAodGFyZ2V0Lm9mZnNldCgpLnRvcCArICh0YXJnZXQub3V0ZXJIZWlnaHQoKSAvIDIpIC0gbnViSGVpZ2h0KjIuNSksICdhdXRvJywgJ2F1dG8nLCAodGFyZ2V0Lm9mZnNldCgpLmxlZnQgKyB0YXJnZXQub3V0ZXJXaWR0aCgpICsgbnViSGVpZ2h0KSwgd2lkdGgpCiAgICAgICAgICAgIC5yZW1vdmVDbGFzcygndGlwLW92ZXJyaWRlJyk7CiAgICAgICAgfQogICAgICB9CgogICAgICB0aXAuY3NzKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKS5oaWRlKCk7CiAgICB9LAoKICAgIHNtYWxsIDogZnVuY3Rpb24gKCkgewogICAgICByZXR1cm4gbWF0Y2hNZWRpYShGb3VuZGF0aW9uLm1lZGlhX3F1ZXJpZXMuc21hbGwpLm1hdGNoZXM7CiAgICB9LAoKICAgIGluaGVyaXRhYmxlX2NsYXNzZXMgOiBmdW5jdGlvbiAodGFyZ2V0KSB7CiAgICAgIHZhciBpbmhlcml0YWJsZXMgPSBbJ3RpcC10b3AnLCAndGlwLWxlZnQnLCAndGlwLWJvdHRvbScsICd0aXAtcmlnaHQnLCAnbm9yYWRpdXMnXS5jb25jYXQodGhpcy5zZXR0aW5ncy5hZGRpdGlvbmFsX2luaGVyaXRhYmxlX2NsYXNzZXMpLAogICAgICAgICAgY2xhc3NlcyA9IHRhcmdldC5hdHRyKCdjbGFzcycpLAogICAgICAgICAgZmlsdGVyZWQgPSBjbGFzc2VzID8gJC5tYXAoY2xhc3Nlcy5zcGxpdCgnICcpLCBmdW5jdGlvbiAoZWwsIGkpIHsKICAgICAgICAgICAgaWYgKCQuaW5BcnJheShlbCwgaW5oZXJpdGFibGVzKSAhPT0gLTEpIHsKICAgICAgICAgICAgICByZXR1cm4gZWw7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pLmpvaW4oJyAnKSA6ICcnOwoKICAgICAgcmV0dXJuICQudHJpbShmaWx0ZXJlZCk7CiAgICB9LAoKICAgIHNob3cgOiBmdW5jdGlvbiAoJHRhcmdldCkgewogICAgICB2YXIgJHRpcCA9IHRoaXMuZ2V0VGlwKCR0YXJnZXQpOwoKICAgICAgdGhpcy5yZXBvc2l0aW9uKCR0YXJnZXQsICR0aXAsICR0YXJnZXQuYXR0cignY2xhc3MnKSk7CiAgICAgICR0aXAuZmFkZUluKDE1MCk7CiAgICB9LAoKICAgIGhpZGUgOiBmdW5jdGlvbiAoJHRhcmdldCkgewogICAgICB2YXIgJHRpcCA9IHRoaXMuZ2V0VGlwKCR0YXJnZXQpOwoKICAgICAgJHRpcC5mYWRlT3V0KDE1MCk7CiAgICB9LAoKICAgIC8vIGRlcHJlY2F0ZSByZWxvYWQKICAgIHJlbG9hZCA6IGZ1bmN0aW9uICgpIHsKICAgICAgdmFyICRzZWxmID0gJCh0aGlzKTsKCiAgICAgIHJldHVybiAoJHNlbGYuZGF0YSgnZm5kdG4tdG9vbHRpcHMnKSkgPyAkc2VsZi5mb3VuZGF0aW9uVG9vbHRpcHMoJ2Rlc3Ryb3knKS5mb3VuZGF0aW9uVG9vbHRpcHMoJ2luaXQnKSA6ICRzZWxmLmZvdW5kYXRpb25Ub29sdGlwcygnaW5pdCcpOwogICAgfSwKCiAgICBvZmYgOiBmdW5jdGlvbiAoKSB7CiAgICAgICQodGhpcy5zY29wZSkub2ZmKCcuZm5kdG4udG9vbHRpcCcpOwogICAgICAkKHRoaXMuc2V0dGluZ3MudG9vbHRpcF9jbGFzcykuZWFjaChmdW5jdGlvbiAoaSkgewogICAgICAgICQoJ1tkYXRhLXRvb2x0aXBdJykuZ2V0KGkpLmF0dHIoJ3RpdGxlJywgJCh0aGlzKS50ZXh0KCkpOwogICAgICB9KS5yZW1vdmUoKTsKICAgIH0sCgogICAgcmVmbG93IDogZnVuY3Rpb24gKCkge30KICB9Owp9KGpRdWVyeSwgdGhpcywgdGhpcy5kb2N1bWVudCkpOwoKOyhmdW5jdGlvbiAoJCwgd2luZG93LCBkb2N1bWVudCwgdW5kZWZpbmVkKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICBGb3VuZGF0aW9uLmxpYnMudG9wYmFyID0gewogICAgbmFtZSA6ICd0b3BiYXInLAoKICAgIHZlcnNpb246ICc1LjAuMScsCgogICAgc2V0dGluZ3MgOiB7CiAgICAgIGluZGV4IDogMCwKICAgICAgc3RpY2t5X2NsYXNzIDogJ3N0aWNreScsCiAgICAgIGN1c3RvbV9iYWNrX3RleHQ6IHRydWUsCiAgICAgIGJhY2tfdGV4dDogJ0JhY2snLAogICAgICBpc19ob3ZlcjogdHJ1ZSwKICAgICAgbW9iaWxlX3Nob3dfcGFyZW50X2xpbms6IGZhbHNlLAogICAgICBzY3JvbGx0b3AgOiB0cnVlIC8vIGp1bXAgdG8gdG9wIHdoZW4gc3RpY2t5IG5hdiBtZW51IHRvZ2dsZSBpcyBjbGlja2VkCiAgICB9LAoKICAgIGluaXQgOiBmdW5jdGlvbiAoc2VjdGlvbiwgbWV0aG9kLCBvcHRpb25zKSB7CiAgICAgIEZvdW5kYXRpb24uaW5oZXJpdCh0aGlzLCAnYWRkQ3VzdG9tUnVsZSByZWdpc3Rlcl9tZWRpYSB0aHJvdHRsZScpOwogICAgICB2YXIgc2VsZiA9IHRoaXM7CgogICAgICBzZWxmLnJlZ2lzdGVyX21lZGlhKCd0b3BiYXInLCAnZm91bmRhdGlvbi1tcS10b3BiYXInKTsKCiAgICAgIHRoaXMuYmluZGluZ3MobWV0aG9kLCBvcHRpb25zKTsKCiAgICAgICQoJ1tkYXRhLXRvcGJhcl0nLCB0aGlzLnNjb3BlKS5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgdG9wYmFyID0gJCh0aGlzKSwKICAgICAgICAgICAgc2V0dGluZ3MgPSB0b3BiYXIuZGF0YSgndG9wYmFyLWluaXQnKSwKICAgICAgICAgICAgc2VjdGlvbiA9ICQoJ3NlY3Rpb24nLCB0aGlzKSwKICAgICAgICAgICAgdGl0bGViYXIgPSAkKCc+IHVsJywgdGhpcykuZmlyc3QoKTsKCiAgICAgICAgdG9wYmFyLmRhdGEoJ2luZGV4JywgMCk7CgogICAgICAgIHZhciB0b3BiYXJDb250YWluZXIgPSB0b3BiYXIucGFyZW50KCk7CiAgICAgICAgaWYodG9wYmFyQ29udGFpbmVyLmhhc0NsYXNzKCdmaXhlZCcpIHx8IHRvcGJhckNvbnRhaW5lci5oYXNDbGFzcyhzZXR0aW5ncy5zdGlja3lfY2xhc3MpKSB7CiAgICAgICAgICBzZWxmLnNldHRpbmdzLnN0aWNreV9jbGFzcyA9IHNldHRpbmdzLnN0aWNreV9jbGFzczsKICAgICAgICAgIHNlbGYuc2V0dGluZ3Muc3RpY2tfdG9wYmFyID0gdG9wYmFyOwogICAgICAgICAgdG9wYmFyLmRhdGEoJ2hlaWdodCcsIHRvcGJhckNvbnRhaW5lci5vdXRlckhlaWdodCgpKTsKICAgICAgICAgIHRvcGJhci5kYXRhKCdzdGlja3lvZmZzZXQnLCB0b3BiYXJDb250YWluZXIub2Zmc2V0KCkudG9wKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdG9wYmFyLmRhdGEoJ2hlaWdodCcsIHRvcGJhci5vdXRlckhlaWdodCgpKTsKICAgICAgICB9CgogICAgICAgIGlmICghc2V0dGluZ3MuYXNzZW1ibGVkKSBzZWxmLmFzc2VtYmxlKHRvcGJhcik7CgogICAgICAgIGlmIChzZXR0aW5ncy5pc19ob3ZlcikgewogICAgICAgICAgJCgnLmhhcy1kcm9wZG93bicsIHRvcGJhcikuYWRkQ2xhc3MoJ25vdC1jbGljaycpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAkKCcuaGFzLWRyb3Bkb3duJywgdG9wYmFyKS5yZW1vdmVDbGFzcygnbm90LWNsaWNrJyk7CiAgICAgICAgfQoKICAgICAgICAvLyBQYWQgYm9keSB3aGVuIHN0aWNreSAoc2Nyb2xsZWQpIG9yIGZpeGVkLgogICAgICAgIHNlbGYuYWRkQ3VzdG9tUnVsZSgnLmYtdG9wYmFyLWZpeGVkIHsgcGFkZGluZy10b3A6ICcgKyB0b3BiYXIuZGF0YSgnaGVpZ2h0JykgKyAncHggfScpOwoKICAgICAgICBpZiAodG9wYmFyQ29udGFpbmVyLmhhc0NsYXNzKCdmaXhlZCcpKSB7CiAgICAgICAgICAkKCdib2R5JykuYWRkQ2xhc3MoJ2YtdG9wYmFyLWZpeGVkJyk7CiAgICAgICAgfQogICAgICB9KTsKCiAgICB9LAoKICAgIHRvZ2dsZTogZnVuY3Rpb24gKHRvZ2dsZUVsKSB7CiAgICAgIHZhciBzZWxmID0gdGhpczsKCiAgICAgIGlmICh0b2dnbGVFbCkgewogICAgICAgIHZhciB0b3BiYXIgPSAkKHRvZ2dsZUVsKS5jbG9zZXN0KCdbZGF0YS10b3BiYXJdJyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHRvcGJhciA9ICQoJ1tkYXRhLXRvcGJhcl0nKTsKICAgICAgfQoKICAgICAgdmFyIHNldHRpbmdzID0gdG9wYmFyLmRhdGEoJ3RvcGJhci1pbml0Jyk7CgogICAgICB2YXIgc2VjdGlvbiA9ICQoJ3NlY3Rpb24sIC5zZWN0aW9uJywgdG9wYmFyKTsKCiAgICAgIGlmIChzZWxmLmJyZWFrcG9pbnQoKSkgewogICAgICAgIGlmICghc2VsZi5ydGwpIHsKICAgICAgICAgIHNlY3Rpb24uY3NzKHtsZWZ0OiAnMCUnfSk7CiAgICAgICAgICAkKCc+Lm5hbWUnLCBzZWN0aW9uKS5jc3Moe2xlZnQ6ICcxMDAlJ30pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZWN0aW9uLmNzcyh7cmlnaHQ6ICcwJSd9KTsKICAgICAgICAgICQoJz4ubmFtZScsIHNlY3Rpb24pLmNzcyh7cmlnaHQ6ICcxMDAlJ30pOwogICAgICAgIH0KCiAgICAgICAgJCgnbGkubW92ZWQnLCBzZWN0aW9uKS5yZW1vdmVDbGFzcygnbW92ZWQnKTsKICAgICAgICB0b3BiYXIuZGF0YSgnaW5kZXgnLCAwKTsKCiAgICAgICAgdG9wYmFyCiAgICAgICAgICAudG9nZ2xlQ2xhc3MoJ2V4cGFuZGVkJykKICAgICAgICAgIC5jc3MoJ2hlaWdodCcsICcnKTsKICAgICAgfQoKICAgICAgaWYgKHNldHRpbmdzLnNjcm9sbHRvcCkgewogICAgICAgIGlmICghdG9wYmFyLmhhc0NsYXNzKCdleHBhbmRlZCcpKSB7CiAgICAgICAgICBpZiAodG9wYmFyLmhhc0NsYXNzKCdmaXhlZCcpKSB7CiAgICAgICAgICAgIHRvcGJhci5wYXJlbnQoKS5hZGRDbGFzcygnZml4ZWQnKTsKICAgICAgICAgICAgdG9wYmFyLnJlbW92ZUNsYXNzKCdmaXhlZCcpOwogICAgICAgICAgICAkKCdib2R5JykuYWRkQ2xhc3MoJ2YtdG9wYmFyLWZpeGVkJyk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0b3BiYXIucGFyZW50KCkuaGFzQ2xhc3MoJ2ZpeGVkJykpIHsKICAgICAgICAgIGlmIChzZXR0aW5ncy5zY3JvbGx0b3ApIHsKICAgICAgICAgICAgdG9wYmFyLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdmaXhlZCcpOwogICAgICAgICAgICB0b3BiYXIuYWRkQ2xhc3MoJ2ZpeGVkJyk7CiAgICAgICAgICAgICQoJ2JvZHknKS5yZW1vdmVDbGFzcygnZi10b3BiYXItZml4ZWQnKTsKCiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLDApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0b3BiYXIucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ2V4cGFuZGVkJyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmKHRvcGJhci5wYXJlbnQoKS5oYXNDbGFzcyhzZWxmLnNldHRpbmdzLnN0aWNreV9jbGFzcykpIHsKICAgICAgICAgIHRvcGJhci5wYXJlbnQoKS5hZGRDbGFzcygnZml4ZWQnKTsKICAgICAgICB9CgogICAgICAgIGlmKHRvcGJhci5wYXJlbnQoKS5oYXNDbGFzcygnZml4ZWQnKSkgewogICAgICAgICAgaWYgKCF0b3BiYXIuaGFzQ2xhc3MoJ2V4cGFuZGVkJykpIHsKICAgICAgICAgICAgdG9wYmFyLnJlbW92ZUNsYXNzKCdmaXhlZCcpOwogICAgICAgICAgICB0b3BiYXIucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ2V4cGFuZGVkJyk7CiAgICAgICAgICAgIHNlbGYudXBkYXRlX3N0aWNreV9wb3NpdGlvbmluZygpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdG9wYmFyLmFkZENsYXNzKCdmaXhlZCcpOwogICAgICAgICAgICB0b3BiYXIucGFyZW50KCkuYWRkQ2xhc3MoJ2V4cGFuZGVkJyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAoKICAgIHRpbWVyIDogbnVsbCwKCiAgICBldmVudHMgOiBmdW5jdGlvbiAoYmFyKSB7CiAgICAgIHZhciBzZWxmID0gdGhpczsKICAgICAgJCh0aGlzLnNjb3BlKQogICAgICAgIC5vZmYoJy50b3BiYXInKQogICAgICAgIC5vbignY2xpY2suZm5kdG4udG9wYmFyJywgJ1tkYXRhLXRvcGJhcl0gLnRvZ2dsZS10b3BiYXInLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgc2VsZi50b2dnbGUodGhpcyk7CiAgICAgICAgfSkKICAgICAgICAub24oJ2NsaWNrLmZuZHRuLnRvcGJhcicsICdbZGF0YS10b3BiYXJdIGxpLmhhcy1kcm9wZG93bicsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICB2YXIgbGkgPSAkKHRoaXMpLAogICAgICAgICAgICAgIHRhcmdldCA9ICQoZS50YXJnZXQpLAogICAgICAgICAgICAgIHRvcGJhciA9IGxpLmNsb3Nlc3QoJ1tkYXRhLXRvcGJhcl0nKSwKICAgICAgICAgICAgICBzZXR0aW5ncyA9IHRvcGJhci5kYXRhKCd0b3BiYXItaW5pdCcpOwoKICAgICAgICAgIGlmKHRhcmdldC5kYXRhKCdyZXZlYWxJZCcpKSB7CiAgICAgICAgICAgIHNlbGYudG9nZ2xlKCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoc2VsZi5icmVha3BvaW50KCkpIHJldHVybjsKICAgICAgICAgIGlmIChzZXR0aW5ncy5pc19ob3ZlciAmJiAhTW9kZXJuaXpyLnRvdWNoKSByZXR1cm47CgogICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsKCiAgICAgICAgICBpZiAobGkuaGFzQ2xhc3MoJ2hvdmVyJykpIHsKICAgICAgICAgICAgbGkKICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ2hvdmVyJykKICAgICAgICAgICAgICAuZmluZCgnbGknKQogICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnaG92ZXInKTsKCiAgICAgICAgICAgIGxpLnBhcmVudHMoJ2xpLmhvdmVyJykKICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ2hvdmVyJyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsaS5hZGRDbGFzcygnaG92ZXInKTsKCiAgICAgICAgICAgIGlmICh0YXJnZXRbMF0ubm9kZU5hbWUgPT09ICdBJyAmJiB0YXJnZXQucGFyZW50KCkuaGFzQ2xhc3MoJ2hhcy1kcm9wZG93bicpKSB7CiAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSkKICAgICAgICAub24oJ2NsaWNrLmZuZHRuLnRvcGJhcicsICdbZGF0YS10b3BiYXJdIC5oYXMtZHJvcGRvd24+YScsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICBpZiAoc2VsZi5icmVha3BvaW50KCkpIHsKCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKCiAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyksCiAgICAgICAgICAgICAgICB0b3BiYXIgPSAkdGhpcy5jbG9zZXN0KCdbZGF0YS10b3BiYXJdJyksCiAgICAgICAgICAgICAgICBzZWN0aW9uID0gdG9wYmFyLmZpbmQoJ3NlY3Rpb24sIC5zZWN0aW9uJyksCiAgICAgICAgICAgICAgICBkcm9wZG93bkhlaWdodCA9ICR0aGlzLm5leHQoJy5kcm9wZG93bicpLm91dGVySGVpZ2h0KCksCiAgICAgICAgICAgICAgICAkc2VsZWN0ZWRMaSA9ICR0aGlzLmNsb3Nlc3QoJ2xpJyk7CgogICAgICAgICAgICB0b3BiYXIuZGF0YSgnaW5kZXgnLCB0b3BiYXIuZGF0YSgnaW5kZXgnKSArIDEpOwogICAgICAgICAgICAkc2VsZWN0ZWRMaS5hZGRDbGFzcygnbW92ZWQnKTsKCiAgICAgICAgICAgIGlmICghc2VsZi5ydGwpIHsKICAgICAgICAgICAgICBzZWN0aW9uLmNzcyh7bGVmdDogLSgxMDAgKiB0b3BiYXIuZGF0YSgnaW5kZXgnKSkgKyAnJSd9KTsKICAgICAgICAgICAgICBzZWN0aW9uLmZpbmQoJz4ubmFtZScpLmNzcyh7bGVmdDogMTAwICogdG9wYmFyLmRhdGEoJ2luZGV4JykgKyAnJSd9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBzZWN0aW9uLmNzcyh7cmlnaHQ6IC0oMTAwICogdG9wYmFyLmRhdGEoJ2luZGV4JykpICsgJyUnfSk7CiAgICAgICAgICAgICAgc2VjdGlvbi5maW5kKCc+Lm5hbWUnKS5jc3Moe3JpZ2h0OiAxMDAgKiB0b3BiYXIuZGF0YSgnaW5kZXgnKSArICclJ30pOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0b3BiYXIuY3NzKCdoZWlnaHQnLCAkdGhpcy5zaWJsaW5ncygndWwnKS5vdXRlckhlaWdodCh0cnVlKSArIHRvcGJhci5kYXRhKCdoZWlnaHQnKSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIAogICAgICAkKHdpbmRvdykub2ZmKCcudG9wYmFyJykub24oJ3Jlc2l6ZS5mbmR0bi50b3BiYXInLCBzZWxmLnRocm90dGxlKGZ1bmN0aW9uICgpIHsKICAgICAgICBzZWxmLnJlc2l6ZS5jYWxsKHNlbGYpOwogICAgICB9LCA1MCkpLnRyaWdnZXIoJ3Jlc2l6ZScpOwoKICAgICAgJCgnYm9keScpLm9mZignLnRvcGJhcicpLm9uKCdjbGljay5mbmR0bi50b3BiYXIgdG91Y2hzdGFydC5mbmR0bi50b3BiYXInLCBmdW5jdGlvbiAoZSkgewogICAgICAgIHZhciBwYXJlbnQgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KCdsaScpLmNsb3Nlc3QoJ2xpLmhvdmVyJyk7CgogICAgICAgIGlmIChwYXJlbnQubGVuZ3RoID4gMCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJCgnW2RhdGEtdG9wYmFyXSBsaScpLnJlbW92ZUNsYXNzKCdob3ZlcicpOwogICAgICB9KTsKCiAgICAgIC8vIEdvIHVwIGEgbGV2ZWwgb24gQ2xpY2sKICAgICAgJCh0aGlzLnNjb3BlKS5vbignY2xpY2suZm5kdG4udG9wYmFyJywgJ1tkYXRhLXRvcGJhcl0gLmhhcy1kcm9wZG93biAuYmFjaycsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpLAogICAgICAgICAgICB0b3BiYXIgPSAkdGhpcy5jbG9zZXN0KCdbZGF0YS10b3BiYXJdJyksCiAgICAgICAgICAgIHNlY3Rpb24gPSB0b3BiYXIuZmluZCgnc2VjdGlvbiwgLnNlY3Rpb24nKSwKICAgICAgICAgICAgc2V0dGluZ3MgPSB0b3BiYXIuZGF0YSgndG9wYmFyLWluaXQnKSwKICAgICAgICAgICAgJG1vdmVkTGkgPSAkdGhpcy5jbG9zZXN0KCdsaS5tb3ZlZCcpLAogICAgICAgICAgICAkcHJldmlvdXNMZXZlbFVsID0gJG1vdmVkTGkucGFyZW50KCk7CgogICAgICAgIHRvcGJhci5kYXRhKCdpbmRleCcsIHRvcGJhci5kYXRhKCdpbmRleCcpIC0gMSk7CgogICAgICAgIGlmICghc2VsZi5ydGwpIHsKICAgICAgICAgIHNlY3Rpb24uY3NzKHtsZWZ0OiAtKDEwMCAqIHRvcGJhci5kYXRhKCdpbmRleCcpKSArICclJ30pOwogICAgICAgICAgc2VjdGlvbi5maW5kKCc+Lm5hbWUnKS5jc3Moe2xlZnQ6IDEwMCAqIHRvcGJhci5kYXRhKCdpbmRleCcpICsgJyUnfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNlY3Rpb24uY3NzKHtyaWdodDogLSgxMDAgKiB0b3BiYXIuZGF0YSgnaW5kZXgnKSkgKyAnJSd9KTsKICAgICAgICAgIHNlY3Rpb24uZmluZCgnPi5uYW1lJykuY3NzKHtyaWdodDogMTAwICogdG9wYmFyLmRhdGEoJ2luZGV4JykgKyAnJSd9KTsKICAgICAgICB9CgogICAgICAgIGlmICh0b3BiYXIuZGF0YSgnaW5kZXgnKSA9PT0gMCkgewogICAgICAgICAgdG9wYmFyLmNzcygnaGVpZ2h0JywgJycpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0b3BiYXIuY3NzKCdoZWlnaHQnLCAkcHJldmlvdXNMZXZlbFVsLm91dGVySGVpZ2h0KHRydWUpICsgdG9wYmFyLmRhdGEoJ2hlaWdodCcpKTsKICAgICAgICB9CgogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgJG1vdmVkTGkucmVtb3ZlQ2xhc3MoJ21vdmVkJyk7CiAgICAgICAgfSwgMzAwKTsKICAgICAgfSk7CiAgICB9LAoKICAgIHJlc2l6ZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAkKCdbZGF0YS10b3BiYXJdJykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHRvcGJhciA9ICQodGhpcyksCiAgICAgICAgICAgIHNldHRpbmdzID0gdG9wYmFyLmRhdGEoJ3RvcGJhci1pbml0Jyk7CgogICAgICAgIHZhciBzdGlja3lDb250YWluZXIgPSB0b3BiYXIucGFyZW50KCcuJyArIHNlbGYuc2V0dGluZ3Muc3RpY2t5X2NsYXNzKTsKICAgICAgICB2YXIgc3RpY2t5T2Zmc2V0OwoKICAgICAgICBpZiAoIXNlbGYuYnJlYWtwb2ludCgpKSB7CiAgICAgICAgICB2YXIgZG9Ub2dnbGUgPSB0b3BiYXIuaGFzQ2xhc3MoJ2V4cGFuZGVkJyk7CiAgICAgICAgICB0b3BiYXIKICAgICAgICAgICAgLmNzcygnaGVpZ2h0JywgJycpCiAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnZXhwYW5kZWQnKQogICAgICAgICAgICAuZmluZCgnbGknKQogICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ2hvdmVyJyk7CgogICAgICAgICAgICBpZihkb1RvZ2dsZSkgewogICAgICAgICAgICAgIHNlbGYudG9nZ2xlKHRvcGJhcik7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmKHN0aWNreUNvbnRhaW5lci5sZW5ndGggPiAwKSB7CiAgICAgICAgICBpZihzdGlja3lDb250YWluZXIuaGFzQ2xhc3MoJ2ZpeGVkJykpIHsKICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBmaXhlZCB0byBhbGxvdyBmb3IgY29ycmVjdCBjYWxjdWxhdGlvbiBvZiB0aGUgb2Zmc2V0LgogICAgICAgICAgICBzdGlja3lDb250YWluZXIucmVtb3ZlQ2xhc3MoJ2ZpeGVkJyk7CgogICAgICAgICAgICBzdGlja3lPZmZzZXQgPSBzdGlja3lDb250YWluZXIub2Zmc2V0KCkudG9wOwogICAgICAgICAgICBpZigkKGRvY3VtZW50LmJvZHkpLmhhc0NsYXNzKCdmLXRvcGJhci1maXhlZCcpKSB7CiAgICAgICAgICAgICAgc3RpY2t5T2Zmc2V0IC09IHRvcGJhci5kYXRhKCdoZWlnaHQnKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdG9wYmFyLmRhdGEoJ3N0aWNreW9mZnNldCcsIHN0aWNreU9mZnNldCk7CiAgICAgICAgICAgIHN0aWNreUNvbnRhaW5lci5hZGRDbGFzcygnZml4ZWQnKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0aWNreU9mZnNldCA9IHN0aWNreUNvbnRhaW5lci5vZmZzZXQoKS50b3A7CiAgICAgICAgICAgIHRvcGJhci5kYXRhKCdzdGlja3lvZmZzZXQnLCBzdGlja3lPZmZzZXQpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgIH0pOwogICAgfSwKCiAgICBicmVha3BvaW50IDogZnVuY3Rpb24gKCkgewogICAgICByZXR1cm4gIW1hdGNoTWVkaWEoRm91bmRhdGlvbi5tZWRpYV9xdWVyaWVzWyd0b3BiYXInXSkubWF0Y2hlczsKICAgIH0sCgogICAgYXNzZW1ibGUgOiBmdW5jdGlvbiAodG9wYmFyKSB7CiAgICAgIHZhciBzZWxmID0gdGhpcywKICAgICAgICAgIHNldHRpbmdzID0gdG9wYmFyLmRhdGEoJ3RvcGJhci1pbml0JyksCiAgICAgICAgICBzZWN0aW9uID0gJCgnc2VjdGlvbicsIHRvcGJhciksCiAgICAgICAgICB0aXRsZWJhciA9ICQoJz4gdWwnLCB0b3BiYXIpLmZpcnN0KCk7CgogICAgICAvLyBQdWxsIGVsZW1lbnQgb3V0IG9mIHRoZSBET00gZm9yIG1hbmlwdWxhdGlvbgogICAgICBzZWN0aW9uLmRldGFjaCgpOwoKICAgICAgJCgnLmhhcy1kcm9wZG93bj5hJywgc2VjdGlvbikuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyICRsaW5rID0gJCh0aGlzKSwKICAgICAgICAgICAgJGRyb3Bkb3duID0gJGxpbmsuc2libGluZ3MoJy5kcm9wZG93bicpLAogICAgICAgICAgICB1cmwgPSAkbGluay5hdHRyKCdocmVmJyk7CgogICAgICAgIGlmIChzZXR0aW5ncy5tb2JpbGVfc2hvd19wYXJlbnRfbGluayAmJiB1cmwgJiYgdXJsLmxlbmd0aCA+IDEpIHsKICAgICAgICAgIHZhciAkdGl0bGVMaSA9ICQoJzxsaSBjbGFzcz0idGl0bGUgYmFjayBqcy1nZW5lcmF0ZWQiPjxoNT48YSBocmVmPSIjIj48L2E+PC9oNT48L2xpPjxsaT48YSBjbGFzcz0icGFyZW50LWxpbmsganMtZ2VuZXJhdGVkIiBocmVmPSInICsgdXJsICsgJyI+JyArICRsaW5rLnRleHQoKSArJzwvYT48L2xpPicpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgJHRpdGxlTGkgPSAkKCc8bGkgY2xhc3M9InRpdGxlIGJhY2sganMtZ2VuZXJhdGVkIj48aDU+PGEgaHJlZj0iIyI+PC9hPjwvaDU+PC9saT4nKTsKICAgICAgICB9CgogICAgICAgIC8vIENvcHkgbGluayB0byBzdWJuYXYKICAgICAgICBpZiAoc2V0dGluZ3MuY3VzdG9tX2JhY2tfdGV4dCA9PSB0cnVlKSB7CiAgICAgICAgICAkKCdoNT5hJywgJHRpdGxlTGkpLmh0bWwoc2V0dGluZ3MuYmFja190ZXh0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgJCgnaDU+YScsICR0aXRsZUxpKS5odG1sKCcmbGFxdW87ICcgKyAkbGluay5odG1sKCkpOwogICAgICAgIH0KICAgICAgICAkZHJvcGRvd24ucHJlcGVuZCgkdGl0bGVMaSk7CiAgICAgIH0pOwoKICAgICAgLy8gUHV0IGVsZW1lbnQgYmFjayBpbiB0aGUgRE9NCiAgICAgIHNlY3Rpb24uYXBwZW5kVG8odG9wYmFyKTsKCiAgICAgIC8vIGNoZWNrIGZvciBzdGlja3kKICAgICAgdGhpcy5zdGlja3koKTsKCiAgICAgIHRoaXMuYXNzZW1ibGVkKHRvcGJhcik7CiAgICB9LAoKICAgIGFzc2VtYmxlZCA6IGZ1bmN0aW9uICh0b3BiYXIpIHsKICAgICAgdG9wYmFyLmRhdGEoJ3RvcGJhci1pbml0JywgJC5leHRlbmQoe30sIHRvcGJhci5kYXRhKCd0b3BiYXItaW5pdCcpLCB7YXNzZW1ibGVkOiB0cnVlfSkpOwogICAgfSwKCiAgICBoZWlnaHQgOiBmdW5jdGlvbiAodWwpIHsKICAgICAgdmFyIHRvdGFsID0gMCwKICAgICAgICAgIHNlbGYgPSB0aGlzOwoKICAgICAgJCgnPiBsaScsIHVsKS5lYWNoKGZ1bmN0aW9uICgpIHsgdG90YWwgKz0gJCh0aGlzKS5vdXRlckhlaWdodCh0cnVlKTsgfSk7CgogICAgICByZXR1cm4gdG90YWw7CiAgICB9LAoKICAgIHN0aWNreSA6IGZ1bmN0aW9uICgpIHsKICAgICAgdmFyICR3aW5kb3cgPSAkKHdpbmRvdyksCiAgICAgICAgICBzZWxmID0gdGhpczsKCiAgICAgICQod2luZG93KS5vbignc2Nyb2xsJywgZnVuY3Rpb24oKSB7CiAgICAgICAgc2VsZi51cGRhdGVfc3RpY2t5X3Bvc2l0aW9uaW5nKCk7CiAgICAgIH0pOwogICAgfSwKCiAgICB1cGRhdGVfc3RpY2t5X3Bvc2l0aW9uaW5nOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIGtsYXNzID0gJy4nICsgdGhpcy5zZXR0aW5ncy5zdGlja3lfY2xhc3M7CiAgICAgIHZhciAkd2luZG93ID0gJCh3aW5kb3cpOwoKICAgICAgaWYgKCQoa2xhc3MpLmxlbmd0aCA+IDApIHsKICAgICAgICB2YXIgZGlzdGFuY2UgPSB0aGlzLnNldHRpbmdzLnN0aWNreV90b3BiYXIuZGF0YSgnc3RpY2t5b2Zmc2V0Jyk7CiAgICAgICAgaWYgKCEkKGtsYXNzKS5oYXNDbGFzcygnZXhwYW5kZWQnKSkgewogICAgICAgICAgaWYgKCR3aW5kb3cuc2Nyb2xsVG9wKCkgPiAoZGlzdGFuY2UpKSB7CiAgICAgICAgICAgIGlmICghJChrbGFzcykuaGFzQ2xhc3MoJ2ZpeGVkJykpIHsKICAgICAgICAgICAgICAkKGtsYXNzKS5hZGRDbGFzcygnZml4ZWQnKTsKICAgICAgICAgICAgICAkKCdib2R5JykuYWRkQ2xhc3MoJ2YtdG9wYmFyLWZpeGVkJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoJHdpbmRvdy5zY3JvbGxUb3AoKSA8PSBkaXN0YW5jZSkgewogICAgICAgICAgICBpZiAoJChrbGFzcykuaGFzQ2xhc3MoJ2ZpeGVkJykpIHsKICAgICAgICAgICAgICAkKGtsYXNzKS5yZW1vdmVDbGFzcygnZml4ZWQnKTsKICAgICAgICAgICAgICAkKCdib2R5JykucmVtb3ZlQ2xhc3MoJ2YtdG9wYmFyLWZpeGVkJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCgogICAgb2ZmIDogZnVuY3Rpb24gKCkgewogICAgICAkKHRoaXMuc2NvcGUpLm9mZignLmZuZHRuLnRvcGJhcicpOwogICAgICAkKHdpbmRvdykub2ZmKCcuZm5kdG4udG9wYmFyJyk7CiAgICB9LAoKICAgIHJlZmxvdyA6IGZ1bmN0aW9uICgpIHt9CiAgfTsKfShqUXVlcnksIHRoaXMsIHRoaXMuZG9jdW1lbnQpKTsKLyohCiAqIE1vZGVybml6ciB2Mi43LjEKICogd3d3Lm1vZGVybml6ci5jb20KICoKICogQ29weXJpZ2h0IChjKSBGYXJ1ayBBdGVzLCBQYXVsIElyaXNoLCBBbGV4IFNleHRvbgogKiBBdmFpbGFibGUgdW5kZXIgdGhlIEJTRCBhbmQgTUlUIGxpY2Vuc2VzOiB3d3cubW9kZXJuaXpyLmNvbS9saWNlbnNlLwogKi8KCi8qCiAqIE1vZGVybml6ciB0ZXN0cyB3aGljaCBuYXRpdmUgQ1NTMyBhbmQgSFRNTDUgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBpbgogKiB0aGUgY3VycmVudCBVQSBhbmQgbWFrZXMgdGhlIHJlc3VsdHMgYXZhaWxhYmxlIHRvIHlvdSBpbiB0d28gd2F5czoKICogYXMgcHJvcGVydGllcyBvbiBhIGdsb2JhbCBNb2Rlcm5penIgb2JqZWN0LCBhbmQgYXMgY2xhc3NlcyBvbiB0aGUKICogPGh0bWw+IGVsZW1lbnQuIFRoaXMgaW5mb3JtYXRpb24gYWxsb3dzIHlvdSB0byBwcm9ncmVzc2l2ZWx5IGVuaGFuY2UKICogeW91ciBwYWdlcyB3aXRoIGEgZ3JhbnVsYXIgbGV2ZWwgb2YgY29udHJvbCBvdmVyIHRoZSBleHBlcmllbmNlLgogKgogKiBNb2Rlcm5penIgaGFzIGFuIG9wdGlvbmFsIChub3QgaW5jbHVkZWQpIGNvbmRpdGlvbmFsIHJlc291cmNlIGxvYWRlcgogKiBjYWxsZWQgTW9kZXJuaXpyLmxvYWQoKSwgYmFzZWQgb24gWWVwbm9wZS5qcyAoeWVwbm9wZWpzLmNvbSkuCiAqIFRvIGdldCBhIGJ1aWxkIHRoYXQgaW5jbHVkZXMgTW9kZXJuaXpyLmxvYWQoKSwgYXMgd2VsbCBhcyBjaG9vc2luZwogKiB3aGljaCB0ZXN0cyB0byBpbmNsdWRlLCBnbyB0byB3d3cubW9kZXJuaXpyLmNvbS9kb3dubG9hZC8KICoKICogQXV0aG9ycyAgICAgICAgRmFydWsgQXRlcywgUGF1bCBJcmlzaCwgQWxleCBTZXh0b24KICogQ29udHJpYnV0b3JzICAgUnlhbiBTZWRkb24sIEJlbiBBbG1hbgogKi8KCgp3aW5kb3cuTW9kZXJuaXpyID0gKGZ1bmN0aW9uKCB3aW5kb3csIGRvY3VtZW50LCB1bmRlZmluZWQgKSB7CgogICAgdmFyIHZlcnNpb24gPSAnMi43LjEnLAoKICAgIE1vZGVybml6ciA9IHt9LAoKICAgIC8qPj5jc3NjbGFzc2VzKi8KICAgIC8vIG9wdGlvbiBmb3IgZW5hYmxpbmcgdGhlIEhUTUwgY2xhc3NlcyB0byBiZSBhZGRlZAogICAgZW5hYmxlQ2xhc3NlcyA9IHRydWUsCiAgICAvKj4+Y3NzY2xhc3NlcyovCgogICAgZG9jRWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwKCiAgICAvKioKICAgICAqIENyZWF0ZSBvdXIgIm1vZGVybml6ciIgZWxlbWVudCB0aGF0IHdlIGRvIG1vc3QgZmVhdHVyZSB0ZXN0cyBvbi4KICAgICAqLwogICAgbW9kID0gJ21vZGVybml6cicsCiAgICBtb2RFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChtb2QpLAogICAgbVN0eWxlID0gbW9kRWxlbS5zdHlsZSwKCiAgICAvKioKICAgICAqIENyZWF0ZSB0aGUgaW5wdXQgZWxlbWVudCBmb3IgdmFyaW91cyBXZWIgRm9ybXMgZmVhdHVyZSB0ZXN0cy4KICAgICAqLwogICAgaW5wdXRFbGVtIC8qPj5pbnB1dGVsZW0qLyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykgLyo+PmlucHV0ZWxlbSovICwKCiAgICAvKj4+c21pbGUqLwogICAgc21pbGUgPSAnOiknLAogICAgLyo+PnNtaWxlKi8KCiAgICB0b1N0cmluZyA9IHt9LnRvU3RyaW5nLAoKICAgIC8vIFRPRE8gOjogbWFrZSB0aGUgcHJlZml4ZXMgbW9yZSBncmFudWxhcgogICAgLyo+PnByZWZpeGVzKi8KICAgIC8vIExpc3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIHNldCBmb3IgY3NzIHRlc3RzLiBTZWUgdGlja2V0ICMyMQogICAgcHJlZml4ZXMgPSAnIC13ZWJraXQtIC1tb3otIC1vLSAtbXMtICcuc3BsaXQoJyAnKSwKICAgIC8qPj5wcmVmaXhlcyovCgogICAgLyo+PmRvbXByZWZpeGVzKi8KICAgIC8vIEZvbGxvd2luZyBzcGVjIGlzIHRvIGV4cG9zZSB2ZW5kb3Itc3BlY2lmaWMgc3R5bGUgcHJvcGVydGllcyBhczoKICAgIC8vICAgZWxlbS5zdHlsZS5XZWJraXRCb3JkZXJSYWRpdXMKICAgIC8vIGFuZCB0aGUgZm9sbG93aW5nIHdvdWxkIGJlIGluY29ycmVjdDoKICAgIC8vICAgZWxlbS5zdHlsZS53ZWJraXRCb3JkZXJSYWRpdXMKCiAgICAvLyBXZWJraXQgZ2hvc3RzIHRoZWlyIHByb3BlcnRpZXMgaW4gbG93ZXJjYXNlIGJ1dCBPcGVyYSAmIE1veiBkbyBub3QuCiAgICAvLyBNaWNyb3NvZnQgdXNlcyBhIGxvd2VyY2FzZSBgbXNgIGluc3RlYWQgb2YgdGhlIGNvcnJlY3QgYE1zYCBpbiBJRTgrCiAgICAvLyAgIGVyaWsuZWFlLm5ldC9hcmNoaXZlcy8yMDA4LzAzLzEwLzIxLjQ4LjEwLwoKICAgIC8vIE1vcmUgaGVyZTogZ2l0aHViLmNvbS9Nb2Rlcm5penIvTW9kZXJuaXpyL2lzc3Vlcy9pc3N1ZS8yMQogICAgb21QcmVmaXhlcyA9ICdXZWJraXQgTW96IE8gbXMnLAoKICAgIGNzc29tUHJlZml4ZXMgPSBvbVByZWZpeGVzLnNwbGl0KCcgJyksCgogICAgZG9tUHJlZml4ZXMgPSBvbVByZWZpeGVzLnRvTG93ZXJDYXNlKCkuc3BsaXQoJyAnKSwKICAgIC8qPj5kb21wcmVmaXhlcyovCgogICAgLyo+Pm5zKi8KICAgIG5zID0geydzdmcnOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnfSwKICAgIC8qPj5ucyovCgogICAgdGVzdHMgPSB7fSwKICAgIGlucHV0cyA9IHt9LAogICAgYXR0cnMgPSB7fSwKCiAgICBjbGFzc2VzID0gW10sCgogICAgc2xpY2UgPSBjbGFzc2VzLnNsaWNlLAoKICAgIGZlYXR1cmVOYW1lLCAvLyB1c2VkIGluIHRlc3RpbmcgbG9vcAoKCiAgICAvKj4+dGVzdHN0eWxlcyovCiAgICAvLyBJbmplY3QgZWxlbWVudCB3aXRoIHN0eWxlIGVsZW1lbnQgYW5kIHNvbWUgQ1NTIHJ1bGVzCiAgICBpbmplY3RFbGVtZW50V2l0aFN0eWxlcyA9IGZ1bmN0aW9uKCBydWxlLCBjYWxsYmFjaywgbm9kZXMsIHRlc3RuYW1lcyApIHsKCiAgICAgIHZhciBzdHlsZSwgcmV0LCBub2RlLCBkb2NPdmVyZmxvdywKICAgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLAogICAgICAgICAgLy8gQWZ0ZXIgcGFnZSBsb2FkIGluamVjdGluZyBhIGZha2UgYm9keSBkb2Vzbid0IHdvcmsgc28gY2hlY2sgaWYgYm9keSBleGlzdHMKICAgICAgICAgIGJvZHkgPSBkb2N1bWVudC5ib2R5LAogICAgICAgICAgLy8gSUU2IGFuZCA3IHdvbid0IHJldHVybiBvZmZzZXRXaWR0aCBvciBvZmZzZXRIZWlnaHQgdW5sZXNzIGl0J3MgaW4gdGhlIGJvZHkgZWxlbWVudCwgc28gd2UgZmFrZSBpdC4KICAgICAgICAgIGZha2VCb2R5ID0gYm9keSB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdib2R5Jyk7CgogICAgICBpZiAoIHBhcnNlSW50KG5vZGVzLCAxMCkgKSB7CiAgICAgICAgICAvLyBJbiBvcmRlciBub3QgdG8gZ2l2ZSBmYWxzZSBwb3NpdGl2ZXMgd2UgY3JlYXRlIGEgbm9kZSBmb3IgZWFjaCB0ZXN0CiAgICAgICAgICAvLyBUaGlzIGFsc28gYWxsb3dzIHRoZSBtZXRob2QgdG8gc2NhbGUgZm9yIHVuc3BlY2lmaWVkIHVzZXMKICAgICAgICAgIHdoaWxlICggbm9kZXMtLSApIHsKICAgICAgICAgICAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICAgICAgbm9kZS5pZCA9IHRlc3RuYW1lcyA/IHRlc3RuYW1lc1tub2Rlc10gOiBtb2QgKyAobm9kZXMgKyAxKTsKICAgICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQobm9kZSk7CiAgICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIDxzdHlsZT4gZWxlbWVudHMgaW4gSUU2LTkgYXJlIGNvbnNpZGVyZWQgJ05vU2NvcGUnIGVsZW1lbnRzIGFuZCB0aGVyZWZvcmUgd2lsbCBiZSByZW1vdmVkCiAgICAgIC8vIHdoZW4gaW5qZWN0ZWQgd2l0aCBpbm5lckhUTUwuIFRvIGdldCBhcm91bmQgdGhpcyB5b3UgbmVlZCB0byBwcmVwZW5kIHRoZSAnTm9TY29wZScgZWxlbWVudAogICAgICAvLyB3aXRoIGEgJ3Njb3BlZCcgZWxlbWVudCwgaW4gb3VyIGNhc2UgdGhlIHNvZnQtaHlwaGVuIGVudGl0eSBhcyBpdCB3b24ndCBtZXNzIHdpdGggb3VyIG1lYXN1cmVtZW50cy4KICAgICAgLy8gbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzM4OTclMjhWUy44NSUyOS5hc3B4CiAgICAgIC8vIERvY3VtZW50cyBzZXJ2ZWQgYXMgeG1sIHdpbGwgdGhyb3cgaWYgdXNpbmcgJnNoeTsgc28gdXNlIHhtbCBmcmllbmRseSBlbmNvZGVkIHZlcnNpb24uIFNlZSBpc3N1ZSAjMjc3CiAgICAgIHN0eWxlID0gWycmIzE3MzsnLCc8c3R5bGUgaWQ9InMnLCBtb2QsICciPicsIHJ1bGUsICc8L3N0eWxlPiddLmpvaW4oJycpOwogICAgICBkaXYuaWQgPSBtb2Q7CiAgICAgIC8vIElFNiB3aWxsIGZhbHNlIHBvc2l0aXZlIG9uIHNvbWUgdGVzdHMgZHVlIHRvIHRoZSBzdHlsZSBlbGVtZW50IGluc2lkZSB0aGUgdGVzdCBkaXYgc29tZWhvdyBpbnRlcmZlcmluZyBvZmZzZXRIZWlnaHQsIHNvIGluc2VydCBpdCBpbnRvIGJvZHkgb3IgZmFrZWJvZHkuCiAgICAgIC8vIE9wZXJhIHdpbGwgYWN0IGFsbCBxdWlya3kgd2hlbiBpbmplY3RpbmcgZWxlbWVudHMgaW4gZG9jdW1lbnRFbGVtZW50IHdoZW4gcGFnZSBpcyBzZXJ2ZWQgYXMgeG1sLCBuZWVkcyBmYWtlYm9keSB0b28uICMyNzAKICAgICAgKGJvZHkgPyBkaXYgOiBmYWtlQm9keSkuaW5uZXJIVE1MICs9IHN0eWxlOwogICAgICBmYWtlQm9keS5hcHBlbmRDaGlsZChkaXYpOwogICAgICBpZiAoICFib2R5ICkgewogICAgICAgICAgLy9hdm9pZCBjcmFzaGluZyBJRTgsIGlmIGJhY2tncm91bmQgaW1hZ2UgaXMgdXNlZAogICAgICAgICAgZmFrZUJvZHkuc3R5bGUuYmFja2dyb3VuZCA9ICcnOwogICAgICAgICAgLy9TYWZhcmkgNS4xMy81LjEuNCBPU1ggc3RvcHMgbG9hZGluZyBpZiA6Oi13ZWJraXQtc2Nyb2xsYmFyIGlzIHVzZWQgYW5kIHNjcm9sbGJhcnMgYXJlIHZpc2libGUKICAgICAgICAgIGZha2VCb2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7CiAgICAgICAgICBkb2NPdmVyZmxvdyA9IGRvY0VsZW1lbnQuc3R5bGUub3ZlcmZsb3c7CiAgICAgICAgICBkb2NFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7CiAgICAgICAgICBkb2NFbGVtZW50LmFwcGVuZENoaWxkKGZha2VCb2R5KTsKICAgICAgfQoKICAgICAgcmV0ID0gY2FsbGJhY2soZGl2LCBydWxlKTsKICAgICAgLy8gSWYgdGhpcyBpcyBkb25lIGFmdGVyIHBhZ2UgbG9hZCB3ZSBkb24ndCB3YW50IHRvIHJlbW92ZSB0aGUgYm9keSBzbyBjaGVjayBpZiBib2R5IGV4aXN0cwogICAgICBpZiAoICFib2R5ICkgewogICAgICAgICAgZmFrZUJvZHkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmYWtlQm9keSk7CiAgICAgICAgICBkb2NFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gZG9jT3ZlcmZsb3c7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkaXYpOwogICAgICB9CgogICAgICByZXR1cm4gISFyZXQ7CgogICAgfSwKICAgIC8qPj50ZXN0c3R5bGVzKi8KCiAgICAvKj4+bXEqLwogICAgLy8gYWRhcHRlZCBmcm9tIG1hdGNoTWVkaWEgcG9seWZpbGwKICAgIC8vIGJ5IFNjb3R0IEplaGwgYW5kIFBhdWwgSXJpc2gKICAgIC8vIGdpc3QuZ2l0aHViLmNvbS83ODY3NjgKICAgIHRlc3RNZWRpYVF1ZXJ5ID0gZnVuY3Rpb24oIG1xICkgewoKICAgICAgdmFyIG1hdGNoTWVkaWEgPSB3aW5kb3cubWF0Y2hNZWRpYSB8fCB3aW5kb3cubXNNYXRjaE1lZGlhOwogICAgICBpZiAoIG1hdGNoTWVkaWEgKSB7CiAgICAgICAgcmV0dXJuIG1hdGNoTWVkaWEobXEpLm1hdGNoZXM7CiAgICAgIH0KCiAgICAgIHZhciBib29sOwoKICAgICAgaW5qZWN0RWxlbWVudFdpdGhTdHlsZXMoJ0BtZWRpYSAnICsgbXEgKyAnIHsgIycgKyBtb2QgKyAnIHsgcG9zaXRpb246IGFic29sdXRlOyB9IH0nLCBmdW5jdGlvbiggbm9kZSApIHsKICAgICAgICBib29sID0gKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlID8KICAgICAgICAgICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBudWxsKSA6CiAgICAgICAgICAgICAgICAgIG5vZGUuY3VycmVudFN0eWxlKVsncG9zaXRpb24nXSA9PSAnYWJzb2x1dGUnOwogICAgICB9KTsKCiAgICAgIHJldHVybiBib29sOwoKICAgICB9LAogICAgIC8qPj5tcSovCgoKICAgIC8qPj5oYXNldmVudCovCiAgICAvLwogICAgLy8gaXNFdmVudFN1cHBvcnRlZCBkZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gZWxlbWVudCBzdXBwb3J0cyB0aGUgZ2l2ZW4gZXZlbnQKICAgIC8vIGthbmdheC5naXRodWIuY29tL2lzZXZlbnRzdXBwb3J0ZWQvCiAgICAvLwogICAgLy8gVGhlIGZvbGxvd2luZyByZXN1bHRzIGFyZSBrbm93biBpbmNvcnJlY3RzOgogICAgLy8gICBNb2Rlcm5penIuaGFzRXZlbnQoIndlYmtpdFRyYW5zaXRpb25FbmQiLCBlbGVtKSAvLyBmYWxzZSBuZWdhdGl2ZQogICAgLy8gICBNb2Rlcm5penIuaGFzRXZlbnQoInRleHRJbnB1dCIpIC8vIGluIFdlYmtpdC4gZ2l0aHViLmNvbS9Nb2Rlcm5penIvTW9kZXJuaXpyL2lzc3Vlcy8zMzMKICAgIC8vICAgLi4uCiAgICBpc0V2ZW50U3VwcG9ydGVkID0gKGZ1bmN0aW9uKCkgewoKICAgICAgdmFyIFRBR05BTUVTID0gewogICAgICAgICdzZWxlY3QnOiAnaW5wdXQnLCAnY2hhbmdlJzogJ2lucHV0JywKICAgICAgICAnc3VibWl0JzogJ2Zvcm0nLCAncmVzZXQnOiAnZm9ybScsCiAgICAgICAgJ2Vycm9yJzogJ2ltZycsICdsb2FkJzogJ2ltZycsICdhYm9ydCc6ICdpbWcnCiAgICAgIH07CgogICAgICBmdW5jdGlvbiBpc0V2ZW50U3VwcG9ydGVkKCBldmVudE5hbWUsIGVsZW1lbnQgKSB7CgogICAgICAgIGVsZW1lbnQgPSBlbGVtZW50IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoVEFHTkFNRVNbZXZlbnROYW1lXSB8fCAnZGl2Jyk7CiAgICAgICAgZXZlbnROYW1lID0gJ29uJyArIGV2ZW50TmFtZTsKCiAgICAgICAgLy8gV2hlbiB1c2luZyBgc2V0QXR0cmlidXRlYCwgSUUgc2tpcHMgInVubG9hZCIsIFdlYktpdCBza2lwcyAidW5sb2FkIiBhbmQgInJlc2l6ZSIsIHdoZXJlYXMgYGluYCAiY2F0Y2hlcyIgdGhvc2UKICAgICAgICB2YXIgaXNTdXBwb3J0ZWQgPSBldmVudE5hbWUgaW4gZWxlbWVudDsKCiAgICAgICAgaWYgKCAhaXNTdXBwb3J0ZWQgKSB7CiAgICAgICAgICAvLyBJZiBpdCBoYXMgbm8gYHNldEF0dHJpYnV0ZWAgKGkuZS4gZG9lc24ndCBpbXBsZW1lbnQgTm9kZSBpbnRlcmZhY2UpLCB0cnkgZ2VuZXJpYyBlbGVtZW50CiAgICAgICAgICBpZiAoICFlbGVtZW50LnNldEF0dHJpYnV0ZSApIHsKICAgICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCBlbGVtZW50LnNldEF0dHJpYnV0ZSAmJiBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSApIHsKICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoZXZlbnROYW1lLCAnJyk7CiAgICAgICAgICAgIGlzU3VwcG9ydGVkID0gaXMoZWxlbWVudFtldmVudE5hbWVdLCAnZnVuY3Rpb24nKTsKCiAgICAgICAgICAgIC8vIElmIHByb3BlcnR5IHdhcyBjcmVhdGVkLCAicmVtb3ZlIGl0IiAoYnkgc2V0dGluZyB2YWx1ZSB0byBgdW5kZWZpbmVkYCkKICAgICAgICAgICAgaWYgKCAhaXMoZWxlbWVudFtldmVudE5hbWVdLCAndW5kZWZpbmVkJykgKSB7CiAgICAgICAgICAgICAgZWxlbWVudFtldmVudE5hbWVdID0gdW5kZWZpbmVkOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGV2ZW50TmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBlbGVtZW50ID0gbnVsbDsKICAgICAgICByZXR1cm4gaXNTdXBwb3J0ZWQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGlzRXZlbnRTdXBwb3J0ZWQ7CiAgICB9KSgpLAogICAgLyo+Pmhhc2V2ZW50Ki8KCiAgICAvLyBUT0RPIDo6IEFkZCBmbGFnIGZvciBoYXNvd25wcm9wID8gZGlkbid0IGxhc3QgdGltZQoKICAgIC8vIGhhc093blByb3BlcnR5IHNoaW0gYnkga2FuZ2F4IG5lZWRlZCBmb3IgU2FmYXJpIDIuMCBzdXBwb3J0CiAgICBfaGFzT3duUHJvcGVydHkgPSAoe30pLmhhc093blByb3BlcnR5LCBoYXNPd25Qcm9wOwoKICAgIGlmICggIWlzKF9oYXNPd25Qcm9wZXJ0eSwgJ3VuZGVmaW5lZCcpICYmICFpcyhfaGFzT3duUHJvcGVydHkuY2FsbCwgJ3VuZGVmaW5lZCcpICkgewogICAgICBoYXNPd25Qcm9wID0gZnVuY3Rpb24gKG9iamVjdCwgcHJvcGVydHkpIHsKICAgICAgICByZXR1cm4gX2hhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7CiAgICAgIH07CiAgICB9CiAgICBlbHNlIHsKICAgICAgaGFzT3duUHJvcCA9IGZ1bmN0aW9uIChvYmplY3QsIHByb3BlcnR5KSB7IC8qIHllcywgdGhpcyBjYW4gZ2l2ZSBmYWxzZSBwb3NpdGl2ZXMvbmVnYXRpdmVzLCBidXQgbW9zdCBvZiB0aGUgdGltZSB3ZSBkb24ndCBjYXJlIGFib3V0IHRob3NlICovCiAgICAgICAgcmV0dXJuICgocHJvcGVydHkgaW4gb2JqZWN0KSAmJiBpcyhvYmplY3QuY29uc3RydWN0b3IucHJvdG90eXBlW3Byb3BlcnR5XSwgJ3VuZGVmaW5lZCcpKTsKICAgICAgfTsKICAgIH0KCiAgICAvLyBBZGFwdGVkIGZyb20gRVM1LXNoaW0gaHR0cHM6Ly9naXRodWIuY29tL2tyaXNrb3dhbC9lczUtc2hpbS9ibG9iL21hc3Rlci9lczUtc2hpbS5qcwogICAgLy8gZXM1LmdpdGh1Yi5jb20vI3gxNS4zLjQuNQoKICAgIGlmICghRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQpIHsKICAgICAgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHsKCiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXM7CgogICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSksCiAgICAgICAgICAgIGJvdW5kID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCkgewoKICAgICAgICAgICAgICB2YXIgRiA9IGZ1bmN0aW9uKCl7fTsKICAgICAgICAgICAgICBGLnByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7CiAgICAgICAgICAgICAgdmFyIHNlbGYgPSBuZXcgRigpOwoKICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFwcGx5KAogICAgICAgICAgICAgICAgICBzZWxmLAogICAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpCiAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICBpZiAoT2JqZWN0KHJlc3VsdCkgPT09IHJlc3VsdCkgewogICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gc2VsZjsKCiAgICAgICAgICAgIH0gZWxzZSB7CgogICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkoCiAgICAgICAgICAgICAgICAgIHRoYXQsCiAgICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkKICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgfQoKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gYm91bmQ7CiAgICAgIH07CiAgICB9CgogICAgLyoqCiAgICAgKiBzZXRDc3MgYXBwbGllcyBnaXZlbiBzdHlsZXMgdG8gdGhlIE1vZGVybml6ciBET00gbm9kZS4KICAgICAqLwogICAgZnVuY3Rpb24gc2V0Q3NzKCBzdHIgKSB7CiAgICAgICAgbVN0eWxlLmNzc1RleHQgPSBzdHI7CiAgICB9CgogICAgLyoqCiAgICAgKiBzZXRDc3NBbGwgZXh0cmFwb2xhdGVzIGFsbCB2ZW5kb3Itc3BlY2lmaWMgY3NzIHN0cmluZ3MuCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldENzc0FsbCggc3RyMSwgc3RyMiApIHsKICAgICAgICByZXR1cm4gc2V0Q3NzKHByZWZpeGVzLmpvaW4oc3RyMSArICc7JykgKyAoIHN0cjIgfHwgJycgKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBpcyByZXR1cm5zIGEgYm9vbGVhbiBmb3IgaWYgdHlwZW9mIG9iaiBpcyBleGFjdGx5IHR5cGUuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGlzKCBvYmosIHR5cGUgKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09IHR5cGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBjb250YWlucyByZXR1cm5zIGEgYm9vbGVhbiBmb3IgaWYgc3Vic3RyIGlzIGZvdW5kIHdpdGhpbiBzdHIuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNvbnRhaW5zKCBzdHIsIHN1YnN0ciApIHsKICAgICAgICByZXR1cm4gISF+KCcnICsgc3RyKS5pbmRleE9mKHN1YnN0cik7CiAgICB9CgogICAgLyo+PnRlc3Rwcm9wKi8KCiAgICAvLyB0ZXN0UHJvcHMgaXMgYSBnZW5lcmljIENTUyAvIERPTSBwcm9wZXJ0eSB0ZXN0LgoKICAgIC8vIEluIHRlc3Rpbmcgc3VwcG9ydCBmb3IgYSBnaXZlbiBDU1MgcHJvcGVydHksIGl0J3MgbGVnaXQgdG8gdGVzdDoKICAgIC8vICAgIGBlbGVtLnN0eWxlW3N0eWxlTmFtZV0gIT09IHVuZGVmaW5lZGAKICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBzdXBwb3J0ZWQgaXQgd2lsbCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLAogICAgLy8gaWYgdW5zdXBwb3J0ZWQgaXQgd2lsbCByZXR1cm4gdW5kZWZpbmVkLgoKICAgIC8vIFdlJ2xsIHRha2UgYWR2YW50YWdlIG9mIHRoaXMgcXVpY2sgdGVzdCBhbmQgc2tpcCBzZXR0aW5nIGEgc3R5bGUKICAgIC8vIG9uIG91ciBtb2Rlcm5penIgZWxlbWVudCwgYnV0IGluc3RlYWQganVzdCB0ZXN0aW5nIHVuZGVmaW5lZCB2cwogICAgLy8gZW1wdHkgc3RyaW5nLgoKICAgIC8vIEJlY2F1c2UgdGhlIHRlc3Rpbmcgb2YgdGhlIENTUyBwcm9wZXJ0eSBuYW1lcyAod2l0aCAiLSIsIGFzCiAgICAvLyBvcHBvc2VkIHRvIHRoZSBjYW1lbENhc2UgRE9NIHByb3BlcnRpZXMpIGlzIG5vbi1wb3J0YWJsZSBhbmQKICAgIC8vIG5vbi1zdGFuZGFyZCBidXQgd29ya3MgaW4gV2ViS2l0IGFuZCBJRSAoYnV0IG5vdCBHZWNrbyBvciBPcGVyYSksCiAgICAvLyB3ZSBleHBsaWNpdGx5IHJlamVjdCBwcm9wZXJ0aWVzIHdpdGggZGFzaGVzIHNvIHRoYXQgYXV0aG9ycwogICAgLy8gZGV2ZWxvcGluZyBpbiBXZWJLaXQgb3IgSUUgZmlyc3QgZG9uJ3QgZW5kIHVwIHdpdGgKICAgIC8vIGJyb3dzZXItc3BlY2lmaWMgY29udGVudCBieSBhY2NpZGVudC4KCiAgICBmdW5jdGlvbiB0ZXN0UHJvcHMoIHByb3BzLCBwcmVmaXhlZCApIHsKICAgICAgICBmb3IgKCB2YXIgaSBpbiBwcm9wcyApIHsKICAgICAgICAgICAgdmFyIHByb3AgPSBwcm9wc1tpXTsKICAgICAgICAgICAgaWYgKCAhY29udGFpbnMocHJvcCwgIi0iKSAmJiBtU3R5bGVbcHJvcF0gIT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgIHJldHVybiBwcmVmaXhlZCA9PSAncGZ4JyA/IHByb3AgOiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIC8qPj50ZXN0cHJvcCovCgogICAgLy8gVE9ETyA6OiBhZGQgdGVzdERPTVByb3BzCiAgICAvKioKICAgICAqIHRlc3RET01Qcm9wcyBpcyBhIGdlbmVyaWMgRE9NIHByb3BlcnR5IHRlc3Q7IGlmIGEgYnJvd3NlciBzdXBwb3J0cwogICAgICogICBhIGNlcnRhaW4gcHJvcGVydHksIGl0IHdvbid0IHJldHVybiB1bmRlZmluZWQgZm9yIGl0LgogICAgICovCiAgICBmdW5jdGlvbiB0ZXN0RE9NUHJvcHMoIHByb3BzLCBvYmosIGVsZW0gKSB7CiAgICAgICAgZm9yICggdmFyIGkgaW4gcHJvcHMgKSB7CiAgICAgICAgICAgIHZhciBpdGVtID0gb2JqW3Byb3BzW2ldXTsKICAgICAgICAgICAgaWYgKCBpdGVtICE9PSB1bmRlZmluZWQpIHsKCiAgICAgICAgICAgICAgICAvLyByZXR1cm4gdGhlIHByb3BlcnR5IG5hbWUgYXMgYSBzdHJpbmcKICAgICAgICAgICAgICAgIGlmIChlbGVtID09PSBmYWxzZSkgcmV0dXJuIHByb3BzW2ldOwoKICAgICAgICAgICAgICAgIC8vIGxldCdzIGJpbmQgYSBmdW5jdGlvbgogICAgICAgICAgICAgICAgaWYgKGlzKGl0ZW0sICdmdW5jdGlvbicpKXsKICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBhdXRvYmluZCB1bmxlc3Mgb3ZlcnJpZGUKICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uYmluZChlbGVtIHx8IG9iaik7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gcmV0dXJuIHRoZSB1bmJvdW5kIGZ1bmN0aW9uIG9yIG9iaiBvciB2YWx1ZQogICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qPj50ZXN0YWxscHJvcHMqLwogICAgLyoqCiAgICAgKiB0ZXN0UHJvcHNBbGwgdGVzdHMgYSBsaXN0IG9mIERPTSBwcm9wZXJ0aWVzIHdlIHdhbnQgdG8gY2hlY2sgYWdhaW5zdC4KICAgICAqICAgV2Ugc3BlY2lmeSBsaXRlcmFsbHkgQUxMIHBvc3NpYmxlIChrbm93biBhbmQvb3IgbGlrZWx5KSBwcm9wZXJ0aWVzIG9uCiAgICAgKiAgIHRoZSBlbGVtZW50IGluY2x1ZGluZyB0aGUgbm9uLXZlbmRvciBwcmVmaXhlZCBvbmUsIGZvciBmb3J3YXJkLQogICAgICogICBjb21wYXRpYmlsaXR5LgogICAgICovCiAgICBmdW5jdGlvbiB0ZXN0UHJvcHNBbGwoIHByb3AsIHByZWZpeGVkLCBlbGVtICkgewoKICAgICAgICB2YXIgdWNQcm9wICA9IHByb3AuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwcm9wLnNsaWNlKDEpLAogICAgICAgICAgICBwcm9wcyAgID0gKHByb3AgKyAnICcgKyBjc3NvbVByZWZpeGVzLmpvaW4odWNQcm9wICsgJyAnKSArIHVjUHJvcCkuc3BsaXQoJyAnKTsKCiAgICAgICAgLy8gZGlkIHRoZXkgY2FsbCAucHJlZml4ZWQoJ2JveFNpemluZycpIG9yIGFyZSB3ZSBqdXN0IHRlc3RpbmcgYSBwcm9wPwogICAgICAgIGlmKGlzKHByZWZpeGVkLCAic3RyaW5nIikgfHwgaXMocHJlZml4ZWQsICJ1bmRlZmluZWQiKSkgewogICAgICAgICAgcmV0dXJuIHRlc3RQcm9wcyhwcm9wcywgcHJlZml4ZWQpOwoKICAgICAgICAvLyBvdGhlcndpc2UsIHRoZXkgY2FsbGVkIC5wcmVmaXhlZCgncmVxdWVzdEFuaW1hdGlvbkZyYW1lJywgd2luZG93WywgZWxlbV0pCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHByb3BzID0gKHByb3AgKyAnICcgKyAoZG9tUHJlZml4ZXMpLmpvaW4odWNQcm9wICsgJyAnKSArIHVjUHJvcCkuc3BsaXQoJyAnKTsKICAgICAgICAgIHJldHVybiB0ZXN0RE9NUHJvcHMocHJvcHMsIHByZWZpeGVkLCBlbGVtKTsKICAgICAgICB9CiAgICB9CiAgICAvKj4+dGVzdGFsbHByb3BzKi8KCgogICAgLyoqCiAgICAgKiBUZXN0cwogICAgICogLS0tLS0KICAgICAqLwoKICAgIC8vIFRoZSAqbmV3KiBmbGV4Ym94CiAgICAvLyBkZXYudzMub3JnL2Nzc3dnL2NzczMtZmxleGJveAoKICAgIHRlc3RzWydmbGV4Ym94J10gPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRlc3RQcm9wc0FsbCgnZmxleFdyYXAnKTsKICAgIH07CgogICAgLy8gVGhlICpvbGQqIGZsZXhib3gKICAgIC8vIHd3dy53My5vcmcvVFIvMjAwOS9XRC1jc3MzLWZsZXhib3gtMjAwOTA3MjMvCgogICAgdGVzdHNbJ2ZsZXhib3hsZWdhY3knXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0ZXN0UHJvcHNBbGwoJ2JveERpcmVjdGlvbicpOwogICAgfTsKCiAgICAvLyBPbiB0aGUgUzYwIGFuZCBCQiBTdG9ybSwgZ2V0Q29udGV4dCBleGlzdHMsIGJ1dCBhbHdheXMgcmV0dXJucyB1bmRlZmluZWQKICAgIC8vIHNvIHdlIGFjdHVhbGx5IGhhdmUgdG8gY2FsbCBnZXRDb250ZXh0KCkgdG8gdmVyaWZ5CiAgICAvLyBnaXRodWIuY29tL01vZGVybml6ci9Nb2Rlcm5penIvaXNzdWVzL2lzc3VlLzk3LwoKICAgIHRlc3RzWydjYW52YXMnXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7CiAgICAgICAgcmV0dXJuICEhKGVsZW0uZ2V0Q29udGV4dCAmJiBlbGVtLmdldENvbnRleHQoJzJkJykpOwogICAgfTsKCiAgICB0ZXN0c1snY2FudmFzdGV4dCddID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICEhKE1vZGVybml6clsnY2FudmFzJ10gJiYgaXMoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykuZ2V0Q29udGV4dCgnMmQnKS5maWxsVGV4dCwgJ2Z1bmN0aW9uJykpOwogICAgfTsKCiAgICAvLyB3ZWJrLml0LzcwMTE3IGlzIHRyYWNraW5nIGEgbGVnaXQgV2ViR0wgZmVhdHVyZSBkZXRlY3QgcHJvcG9zYWwKCiAgICAvLyBXZSBkbyBhIHNvZnQgZGV0ZWN0IHdoaWNoIG1heSBmYWxzZSBwb3NpdGl2ZSBpbiBvcmRlciB0byBhdm9pZAogICAgLy8gYW4gZXhwZW5zaXZlIGNvbnRleHQgY3JlYXRpb246IGJ1Z3ppbC5sYS83MzI0NDEKCiAgICB0ZXN0c1snd2ViZ2wnXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAhIXdpbmRvdy5XZWJHTFJlbmRlcmluZ0NvbnRleHQ7CiAgICB9OwoKICAgIC8qCiAgICAgKiBUaGUgTW9kZXJuaXpyLnRvdWNoIHRlc3Qgb25seSBpbmRpY2F0ZXMgaWYgdGhlIGJyb3dzZXIgc3VwcG9ydHMKICAgICAqICAgIHRvdWNoIGV2ZW50cywgd2hpY2ggZG9lcyBub3QgbmVjZXNzYXJpbHkgcmVmbGVjdCBhIHRvdWNoc2NyZWVuCiAgICAgKiAgICBkZXZpY2UsIGFzIGV2aWRlbmNlZCBieSB0YWJsZXRzIHJ1bm5pbmcgV2luZG93cyA3IG9yLCBhbGFzLAogICAgICogICAgdGhlIFBhbG0gUHJlIC8gV2ViT1MgKHRvdWNoKSBwaG9uZXMuCiAgICAgKgogICAgICogQWRkaXRpb25hbGx5LCBDaHJvbWUgKGRlc2t0b3ApIHVzZWQgdG8gbGllIGFib3V0IGl0cyBzdXBwb3J0IG9uIHRoaXMsCiAgICAgKiAgICBidXQgdGhhdCBoYXMgc2luY2UgYmVlbiByZWN0aWZpZWQ6IGNyYnVnLmNvbS8zNjQxNQogICAgICoKICAgICAqIFdlIGFsc28gdGVzdCBmb3IgRmlyZWZveCA0IE11bHRpdG91Y2ggU3VwcG9ydC4KICAgICAqCiAgICAgKiBGb3IgbW9yZSBpbmZvLCBzZWU6IG1vZGVybml6ci5naXRodWIuY29tL01vZGVybml6ci90b3VjaC5odG1sCiAgICAgKi8KCiAgICB0ZXN0c1sndG91Y2gnXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBib29sOwoKICAgICAgICBpZigoJ29udG91Y2hzdGFydCcgaW4gd2luZG93KSB8fCB3aW5kb3cuRG9jdW1lbnRUb3VjaCAmJiBkb2N1bWVudCBpbnN0YW5jZW9mIERvY3VtZW50VG91Y2gpIHsKICAgICAgICAgIGJvb2wgPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbmplY3RFbGVtZW50V2l0aFN0eWxlcyhbJ0BtZWRpYSAoJyxwcmVmaXhlcy5qb2luKCd0b3VjaC1lbmFibGVkKSwoJyksbW9kLCcpJywneyNtb2Rlcm5penJ7dG9wOjlweDtwb3NpdGlvbjphYnNvbHV0ZX19J10uam9pbignJyksIGZ1bmN0aW9uKCBub2RlICkgewogICAgICAgICAgICBib29sID0gbm9kZS5vZmZzZXRUb3AgPT09IDk7CiAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBib29sOwogICAgfTsKCgogICAgLy8gZ2VvbG9jYXRpb24gaXMgb2Z0ZW4gY29uc2lkZXJlZCBhIHRyaXZpYWwgZmVhdHVyZSBkZXRlY3QuLi4KICAgIC8vIFR1cm5zIG91dCwgaXQncyBxdWl0ZSB0cmlja3kgdG8gZ2V0IHJpZ2h0OgogICAgLy8KICAgIC8vIFVzaW5nICEhbmF2aWdhdG9yLmdlb2xvY2F0aW9uIGRvZXMgdHdvIHRoaW5ncyB3ZSBkb24ndCB3YW50LiBJdDoKICAgIC8vICAgMS4gTGVha3MgbWVtb3J5IGluIElFOTogZ2l0aHViLmNvbS9Nb2Rlcm5penIvTW9kZXJuaXpyL2lzc3Vlcy81MTMKICAgIC8vICAgMi4gRGlzYWJsZXMgcGFnZSBjYWNoaW5nIGluIFdlYktpdDogd2Viay5pdC80Mzk1NgogICAgLy8KICAgIC8vIE1lYW53aGlsZSwgaW4gRmlyZWZveCA8IDgsIGFuIGFib3V0OmNvbmZpZyBzZXR0aW5nIGNvdWxkIGV4cG9zZQogICAgLy8gYSBmYWxzZSBwb3NpdGl2ZSB0aGF0IHdvdWxkIHRocm93IGFuIGV4Y2VwdGlvbjogYnVnemlsLmxhLzY4ODE1OAoKICAgIHRlc3RzWydnZW9sb2NhdGlvbiddID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICdnZW9sb2NhdGlvbicgaW4gbmF2aWdhdG9yOwogICAgfTsKCgogICAgdGVzdHNbJ3Bvc3RtZXNzYWdlJ10gPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuICEhd2luZG93LnBvc3RNZXNzYWdlOwogICAgfTsKCgogICAgLy8gQ2hyb21lIGluY29nbml0byBtb2RlIHVzZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIHdoZW4gdXNpbmcgb3BlbkRhdGFiYXNlCiAgICAvLyBJdCBkb2Vzbid0IGFueW1vcmUuCiAgICB0ZXN0c1snd2Vic3FsZGF0YWJhc2UnXSA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gISF3aW5kb3cub3BlbkRhdGFiYXNlOwogICAgfTsKCiAgICAvLyBWZW5kb3JzIGhhZCBpbmNvbnNpc3RlbnQgcHJlZml4aW5nIHdpdGggdGhlIGV4cGVyaW1lbnRhbCBJbmRleGVkIERCOgogICAgLy8gLSBXZWJraXQncyBpbXBsZW1lbnRhdGlvbiBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggd2Via2l0SW5kZXhlZERCCiAgICAvLyAtIEZpcmVmb3ggc2hpcHBlZCBtb3pfaW5kZXhlZERCIGJlZm9yZSBGRjRiOSwgYnV0IHNpbmNlIHRoZW4gaGFzIGJlZW4gbW96SW5kZXhlZERCCiAgICAvLyBGb3Igc3BlZWQsIHdlIGRvbid0IHRlc3QgdGhlIGxlZ2FjeSAoYW5kIGJldGEtb25seSkgaW5kZXhlZERCCiAgICB0ZXN0c1snaW5kZXhlZERCJ10gPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuICEhdGVzdFByb3BzQWxsKCJpbmRleGVkREIiLCB3aW5kb3cpOwogICAgfTsKCiAgICAvLyBkb2N1bWVudE1vZGUgbG9naWMgZnJvbSBZVUkgdG8gZmlsdGVyIG91dCBJRTggQ29tcGF0IE1vZGUKICAgIC8vICAgd2hpY2ggZmFsc2UgcG9zaXRpdmVzLgogICAgdGVzdHNbJ2hhc2hjaGFuZ2UnXSA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gaXNFdmVudFN1cHBvcnRlZCgnaGFzaGNoYW5nZScsIHdpbmRvdykgJiYgKGRvY3VtZW50LmRvY3VtZW50TW9kZSA9PT0gdW5kZWZpbmVkIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA+IDcpOwogICAgfTsKCiAgICAvLyBQZXIgMS42OgogICAgLy8gVGhpcyB1c2VkIHRvIGJlIE1vZGVybml6ci5oaXN0b3J5bWFuYWdlbWVudCBidXQgdGhlIGxvbmdlcgogICAgLy8gbmFtZSBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGEgc2hvcnRlciBhbmQgcHJvcGVydHktbWF0Y2hpbmcgb25lLgogICAgLy8gVGhlIG9sZCBBUEkgaXMgc3RpbGwgYXZhaWxhYmxlIGluIDEuNiwgYnV0IGFzIG9mIDIuMCB3aWxsIHRocm93IGEgd2FybmluZywKICAgIC8vIGFuZCBpbiB0aGUgZmlyc3QgcmVsZWFzZSB0aGVyZWFmdGVyIGRpc2FwcGVhciBlbnRpcmVseS4KICAgIHRlc3RzWydoaXN0b3J5J10gPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuICEhKHdpbmRvdy5oaXN0b3J5ICYmIGhpc3RvcnkucHVzaFN0YXRlKTsKICAgIH07CgogICAgdGVzdHNbJ2RyYWdhbmRkcm9wJ10gPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgcmV0dXJuICgnZHJhZ2dhYmxlJyBpbiBkaXYpIHx8ICgnb25kcmFnc3RhcnQnIGluIGRpdiAmJiAnb25kcm9wJyBpbiBkaXYpOwogICAgfTsKCiAgICAvLyBGRjMuNiB3YXMgRU9MJ2VkIG9uIDQvMjQvMTIsIGJ1dCB0aGUgRVNSIHZlcnNpb24gb2YgRkYxMAogICAgLy8gd2lsbCBiZSBzdXBwb3J0ZWQgdW50aWwgRkYxOSAoMi8xMi8xMyksIGF0IHdoaWNoIHRpbWUsIEVTUiBiZWNvbWVzIEZGMTcuCiAgICAvLyBGRjEwIHN0aWxsIHVzZXMgcHJlZml4ZXMsIHNvIGNoZWNrIGZvciBpdCB1bnRpbCB0aGVuLgogICAgLy8gZm9yIG1vcmUgRVNSIGluZm8sIHNlZTogbW96aWxsYS5vcmcvZW4tVVMvZmlyZWZveC9vcmdhbml6YXRpb25zL2ZhcS8KICAgIHRlc3RzWyd3ZWJzb2NrZXRzJ10gPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gJ1dlYlNvY2tldCcgaW4gd2luZG93IHx8ICdNb3pXZWJTb2NrZXQnIGluIHdpbmRvdzsKICAgIH07CgoKICAgIC8vIGNzcy10cmlja3MuY29tL3JnYmEtYnJvd3Nlci1zdXBwb3J0LwogICAgdGVzdHNbJ3JnYmEnXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIC8vIFNldCBhbiByZ2JhKCkgY29sb3IgYW5kIGNoZWNrIHRoZSByZXR1cm5lZCB2YWx1ZQoKICAgICAgICBzZXRDc3MoJ2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMjU1LDE1MCwuNSknKTsKCiAgICAgICAgcmV0dXJuIGNvbnRhaW5zKG1TdHlsZS5iYWNrZ3JvdW5kQ29sb3IsICdyZ2JhJyk7CiAgICB9OwoKICAgIHRlc3RzWydoc2xhJ10gPSBmdW5jdGlvbigpIHsKICAgICAgICAvLyBTYW1lIGFzIHJnYmEoKSwgaW4gZmFjdCwgYnJvd3NlcnMgcmUtbWFwIGhzbGEoKSB0byByZ2JhKCkgaW50ZXJuYWxseSwKICAgICAgICAvLyAgIGV4Y2VwdCBJRTkgd2hvIHJldGFpbnMgaXQgYXMgaHNsYQoKICAgICAgICBzZXRDc3MoJ2JhY2tncm91bmQtY29sb3I6aHNsYSgxMjAsNDAlLDEwMCUsLjUpJyk7CgogICAgICAgIHJldHVybiBjb250YWlucyhtU3R5bGUuYmFja2dyb3VuZENvbG9yLCAncmdiYScpIHx8IGNvbnRhaW5zKG1TdHlsZS5iYWNrZ3JvdW5kQ29sb3IsICdoc2xhJyk7CiAgICB9OwoKICAgIHRlc3RzWydtdWx0aXBsZWJncyddID0gZnVuY3Rpb24oKSB7CiAgICAgICAgLy8gU2V0dGluZyBtdWx0aXBsZSBpbWFnZXMgQU5EIGEgY29sb3Igb24gdGhlIGJhY2tncm91bmQgc2hvcnRoYW5kIHByb3BlcnR5CiAgICAgICAgLy8gIGFuZCB0aGVuIHF1ZXJ5aW5nIHRoZSBzdHlsZS5iYWNrZ3JvdW5kIHByb3BlcnR5IHZhbHVlIGZvciB0aGUgbnVtYmVyIG9mCiAgICAgICAgLy8gIG9jY3VycmVuY2VzIG9mICJ1cmwoIiBpcyBhIHJlbGlhYmxlIG1ldGhvZCBmb3IgZGV0ZWN0aW5nIEFDVFVBTCBzdXBwb3J0IGZvciB0aGlzIQoKICAgICAgICBzZXRDc3MoJ2JhY2tncm91bmQ6dXJsKGh0dHBzOi8vKSx1cmwoaHR0cHM6Ly8pLHJlZCB1cmwoaHR0cHM6Ly8pJyk7CgogICAgICAgIC8vIElmIHRoZSBVQSBzdXBwb3J0cyBtdWx0aXBsZSBiYWNrZ3JvdW5kcywgdGhlcmUgc2hvdWxkIGJlIHRocmVlIG9jY3VycmVuY2VzCiAgICAgICAgLy8gICBvZiB0aGUgc3RyaW5nICJ1cmwoIiBpbiB0aGUgcmV0dXJuIHZhbHVlIGZvciBlbGVtU3R5bGUuYmFja2dyb3VuZAoKICAgICAgICByZXR1cm4gKC8odXJsXHMqXCguKj8pezN9LykudGVzdChtU3R5bGUuYmFja2dyb3VuZCk7CiAgICB9OwoKCgogICAgLy8gdGhpcyB3aWxsIGZhbHNlIHBvc2l0aXZlIGluIE9wZXJhIE1pbmkKICAgIC8vICAgZ2l0aHViLmNvbS9Nb2Rlcm5penIvTW9kZXJuaXpyL2lzc3Vlcy8zOTYKCiAgICB0ZXN0c1snYmFja2dyb3VuZHNpemUnXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0ZXN0UHJvcHNBbGwoJ2JhY2tncm91bmRTaXplJyk7CiAgICB9OwoKICAgIHRlc3RzWydib3JkZXJpbWFnZSddID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRlc3RQcm9wc0FsbCgnYm9yZGVySW1hZ2UnKTsKICAgIH07CgoKICAgIC8vIFN1cGVyIGNvbXByZWhlbnNpdmUgdGFibGUgYWJvdXQgYWxsIHRoZSB1bmlxdWUgaW1wbGVtZW50YXRpb25zIG9mCiAgICAvLyBib3JkZXItcmFkaXVzOiBtdWRkbGVkcmFtYmxpbmdzLmNvbS90YWJsZS1vZi1jc3MzLWJvcmRlci1yYWRpdXMtY29tcGxpYW5jZQoKICAgIHRlc3RzWydib3JkZXJyYWRpdXMnXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0ZXN0UHJvcHNBbGwoJ2JvcmRlclJhZGl1cycpOwogICAgfTsKCiAgICAvLyBXZWJPUyB1bmZvcnR1bmF0ZWx5IGZhbHNlIHBvc2l0aXZlcyBvbiB0aGlzIHRlc3QuCiAgICB0ZXN0c1snYm94c2hhZG93J10gPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGVzdFByb3BzQWxsKCdib3hTaGFkb3cnKTsKICAgIH07CgogICAgLy8gRkYzLjAgd2lsbCBmYWxzZSBwb3NpdGl2ZSBvbiB0aGlzIHRlc3QKICAgIHRlc3RzWyd0ZXh0c2hhZG93J10gPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGUudGV4dFNoYWRvdyA9PT0gJyc7CiAgICB9OwoKCiAgICB0ZXN0c1snb3BhY2l0eSddID0gZnVuY3Rpb24oKSB7CiAgICAgICAgLy8gQnJvd3NlcnMgdGhhdCBhY3R1YWxseSBoYXZlIENTUyBPcGFjaXR5IGltcGxlbWVudGVkIGhhdmUgZG9uZSBzbwogICAgICAgIC8vICBhY2NvcmRpbmcgdG8gc3BlYywgd2hpY2ggbWVhbnMgdGhlaXIgcmV0dXJuIHZhbHVlcyBhcmUgd2l0aGluIHRoZQogICAgICAgIC8vICByYW5nZSBvZiBbMC4wLDEuMF0gLSBpbmNsdWRpbmcgdGhlIGxlYWRpbmcgemVyby4KCiAgICAgICAgc2V0Q3NzQWxsKCdvcGFjaXR5Oi41NScpOwoKICAgICAgICAvLyBUaGUgbm9uLWxpdGVyYWwgLiBpbiB0aGlzIHJlZ2V4IGlzIGludGVudGlvbmFsOgogICAgICAgIC8vICAgR2VybWFuIENocm9tZSByZXR1cm5zIHRoaXMgdmFsdWUgYXMgMCw1NQogICAgICAgIC8vIGdpdGh1Yi5jb20vTW9kZXJuaXpyL01vZGVybml6ci9pc3N1ZXMvI2lzc3VlLzU5L2NvbW1lbnQvNTE2NjMyCiAgICAgICAgcmV0dXJuICgvXjAuNTUkLykudGVzdChtU3R5bGUub3BhY2l0eSk7CiAgICB9OwoKCiAgICAvLyBOb3RlLCBBbmRyb2lkIDwgNCB3aWxsIHBhc3MgdGhpcyB0ZXN0LCBidXQgY2FuIG9ubHkgYW5pbWF0ZQogICAgLy8gICBhIHNpbmdsZSBwcm9wZXJ0eSBhdCBhIHRpbWUKICAgIC8vICAgZGFuZWRlbi5tZS8yMDExLzEyL3B1dHRpbmctdXAtd2l0aC1hbmRyb2lkcy1idWxsc2hpdC8KICAgIHRlc3RzWydjc3NhbmltYXRpb25zJ10gPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGVzdFByb3BzQWxsKCdhbmltYXRpb25OYW1lJyk7CiAgICB9OwoKCiAgICB0ZXN0c1snY3NzY29sdW1ucyddID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRlc3RQcm9wc0FsbCgnY29sdW1uQ291bnQnKTsKICAgIH07CgoKICAgIHRlc3RzWydjc3NncmFkaWVudHMnXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIC8qKgogICAgICAgICAqIEZvciBDU1MgR3JhZGllbnRzIHN5bnRheCwgcGxlYXNlIHNlZToKICAgICAgICAgKiB3ZWJraXQub3JnL2Jsb2cvMTc1L2ludHJvZHVjaW5nLWNzcy1ncmFkaWVudHMvCiAgICAgICAgICogZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0NTUy8tbW96LWxpbmVhci1ncmFkaWVudAogICAgICAgICAqIGRldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9DU1MvLW1vei1yYWRpYWwtZ3JhZGllbnQKICAgICAgICAgKiBkZXYudzMub3JnL2Nzc3dnL2NzczMtaW1hZ2VzLyNncmFkaWVudHMtCiAgICAgICAgICovCgogICAgICAgIHZhciBzdHIxID0gJ2JhY2tncm91bmQtaW1hZ2U6JywKICAgICAgICAgICAgc3RyMiA9ICdncmFkaWVudChsaW5lYXIsbGVmdCB0b3AscmlnaHQgYm90dG9tLGZyb20oIzlmOSksdG8od2hpdGUpKTsnLAogICAgICAgICAgICBzdHIzID0gJ2xpbmVhci1ncmFkaWVudChsZWZ0IHRvcCwjOWY5LCB3aGl0ZSk7JzsKCiAgICAgICAgc2V0Q3NzKAogICAgICAgICAgICAgLy8gbGVnYWN5IHdlYmtpdCBzeW50YXggKEZJWE1FOiByZW1vdmUgd2hlbiBzeW50YXggbm90IGluIHVzZSBhbnltb3JlKQogICAgICAgICAgICAgIChzdHIxICsgJy13ZWJraXQtICcuc3BsaXQoJyAnKS5qb2luKHN0cjIgKyBzdHIxKSArCiAgICAgICAgICAgICAvLyBzdGFuZGFyZCBzeW50YXggICAgICAgICAgICAgLy8gdHJhaWxpbmcgJ2JhY2tncm91bmQtaW1hZ2U6JwogICAgICAgICAgICAgIHByZWZpeGVzLmpvaW4oc3RyMyArIHN0cjEpKS5zbGljZSgwLCAtc3RyMS5sZW5ndGgpCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIGNvbnRhaW5zKG1TdHlsZS5iYWNrZ3JvdW5kSW1hZ2UsICdncmFkaWVudCcpOwogICAgfTsKCgogICAgdGVzdHNbJ2Nzc3JlZmxlY3Rpb25zJ10gPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGVzdFByb3BzQWxsKCdib3hSZWZsZWN0Jyk7CiAgICB9OwoKCiAgICB0ZXN0c1snY3NzdHJhbnNmb3JtcyddID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICEhdGVzdFByb3BzQWxsKCd0cmFuc2Zvcm0nKTsKICAgIH07CgoKICAgIHRlc3RzWydjc3N0cmFuc2Zvcm1zM2QnXSA9IGZ1bmN0aW9uKCkgewoKICAgICAgICB2YXIgcmV0ID0gISF0ZXN0UHJvcHNBbGwoJ3BlcnNwZWN0aXZlJyk7CgogICAgICAgIC8vIFdlYmtpdCdzIDNEIHRyYW5zZm9ybXMgYXJlIHBhc3NlZCBvZmYgdG8gdGhlIGJyb3dzZXIncyBvd24gZ3JhcGhpY3MgcmVuZGVyZXIuCiAgICAgICAgLy8gICBJdCB3b3JrcyBmaW5lIGluIFNhZmFyaSBvbiBMZW9wYXJkIGFuZCBTbm93IExlb3BhcmQsIGJ1dCBub3QgaW4gQ2hyb21lIGluCiAgICAgICAgLy8gICBzb21lIGNvbmRpdGlvbnMuIEFzIGEgcmVzdWx0LCBXZWJraXQgdHlwaWNhbGx5IHJlY29nbml6ZXMgdGhlIHN5bnRheCBidXQKICAgICAgICAvLyAgIHdpbGwgc29tZXRpbWVzIHRocm93IGEgZmFsc2UgcG9zaXRpdmUsIHRodXMgd2UgbXVzdCBkbyBhIG1vcmUgdGhvcm91Z2ggY2hlY2s6CiAgICAgICAgaWYgKCByZXQgJiYgJ3dlYmtpdFBlcnNwZWN0aXZlJyBpbiBkb2NFbGVtZW50LnN0eWxlICkgewoKICAgICAgICAgIC8vIFdlYmtpdCBhbGxvd3MgdGhpcyBtZWRpYSBxdWVyeSB0byBzdWNjZWVkIG9ubHkgaWYgdGhlIGZlYXR1cmUgaXMgZW5hYmxlZC4KICAgICAgICAgIC8vIGBAbWVkaWEgKHRyYW5zZm9ybS0zZCksKC13ZWJraXQtdHJhbnNmb3JtLTNkKXsgLi4uIH1gCiAgICAgICAgICBpbmplY3RFbGVtZW50V2l0aFN0eWxlcygnQG1lZGlhICh0cmFuc2Zvcm0tM2QpLCgtd2Via2l0LXRyYW5zZm9ybS0zZCl7I21vZGVybml6cntsZWZ0OjlweDtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6M3B4O319JywgZnVuY3Rpb24oIG5vZGUsIHJ1bGUgKSB7CiAgICAgICAgICAgIHJldCA9IG5vZGUub2Zmc2V0TGVmdCA9PT0gOSAmJiBub2RlLm9mZnNldEhlaWdodCA9PT0gMzsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0OwogICAgfTsKCgogICAgdGVzdHNbJ2Nzc3RyYW5zaXRpb25zJ10gPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGVzdFByb3BzQWxsKCd0cmFuc2l0aW9uJyk7CiAgICB9OwoKCiAgICAvKj4+Zm9udGZhY2UqLwogICAgLy8gQGZvbnQtZmFjZSBkZXRlY3Rpb24gcm91dGluZSBieSBEaWVnbyBQZXJpbmkKICAgIC8vIGphdmFzY3JpcHQubndib3guY29tL0NTU1N1cHBvcnQvCgogICAgLy8gZmFsc2UgcG9zaXRpdmVzOgogICAgLy8gICBXZWJPUyBnaXRodWIuY29tL01vZGVybml6ci9Nb2Rlcm5penIvaXNzdWVzLzM0MgogICAgLy8gICBXUDcgICBnaXRodWIuY29tL01vZGVybml6ci9Nb2Rlcm5penIvaXNzdWVzLzUzOAogICAgdGVzdHNbJ2ZvbnRmYWNlJ10gPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgYm9vbDsKCiAgICAgICAgaW5qZWN0RWxlbWVudFdpdGhTdHlsZXMoJ0Bmb250LWZhY2Uge2ZvbnQtZmFtaWx5OiJmb250IjtzcmM6dXJsKCJodHRwczovLyIpfScsIGZ1bmN0aW9uKCBub2RlLCBydWxlICkgewogICAgICAgICAgdmFyIHN0eWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Ntb2Rlcm5penInKSwKICAgICAgICAgICAgICBzaGVldCA9IHN0eWxlLnNoZWV0IHx8IHN0eWxlLnN0eWxlU2hlZXQsCiAgICAgICAgICAgICAgY3NzVGV4dCA9IHNoZWV0ID8gKHNoZWV0LmNzc1J1bGVzICYmIHNoZWV0LmNzc1J1bGVzWzBdID8gc2hlZXQuY3NzUnVsZXNbMF0uY3NzVGV4dCA6IHNoZWV0LmNzc1RleHQgfHwgJycpIDogJyc7CgogICAgICAgICAgYm9vbCA9IC9zcmMvaS50ZXN0KGNzc1RleHQpICYmIGNzc1RleHQuaW5kZXhPZihydWxlLnNwbGl0KCcgJylbMF0pID09PSAwOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gYm9vbDsKICAgIH07CiAgICAvKj4+Zm9udGZhY2UqLwoKICAgIC8vIENTUyBnZW5lcmF0ZWQgY29udGVudCBkZXRlY3Rpb24KICAgIHRlc3RzWydnZW5lcmF0ZWRjb250ZW50J10gPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgYm9vbDsKCiAgICAgICAgaW5qZWN0RWxlbWVudFdpdGhTdHlsZXMoWycjJyxtb2QsJ3tmb250OjAvMCBhfSMnLG1vZCwnOmFmdGVye2NvbnRlbnQ6Iicsc21pbGUsJyI7dmlzaWJpbGl0eTpoaWRkZW47Zm9udDozcHgvMSBhfSddLmpvaW4oJycpLCBmdW5jdGlvbiggbm9kZSApIHsKICAgICAgICAgIGJvb2wgPSBub2RlLm9mZnNldEhlaWdodCA+PSAzOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gYm9vbDsKICAgIH07CgoKCiAgICAvLyBUaGVzZSB0ZXN0cyBldmFsdWF0ZSBzdXBwb3J0IG9mIHRoZSB2aWRlby9hdWRpbyBlbGVtZW50cywgYXMgd2VsbCBhcwogICAgLy8gdGVzdGluZyB3aGF0IHR5cGVzIG9mIGNvbnRlbnQgdGhleSBzdXBwb3J0LgogICAgLy8KICAgIC8vIFdlJ3JlIHVzaW5nIHRoZSBCb29sZWFuIGNvbnN0cnVjdG9yIGhlcmUsIHNvIHRoYXQgd2UgY2FuIGV4dGVuZCB0aGUgdmFsdWUKICAgIC8vIGUuZy4gIE1vZGVybml6ci52aWRlbyAgICAgLy8gdHJ1ZQogICAgLy8gICAgICAgTW9kZXJuaXpyLnZpZGVvLm9nZyAvLyAncHJvYmFibHknCiAgICAvLwogICAgLy8gQ29kZWMgdmFsdWVzIGZyb20gOiBnaXRodWIuY29tL05pZWxzTGVlbmhlZXIvaHRtbDV0ZXN0L2Jsb2IvOTEwNmE4L2luZGV4Lmh0bWwjTDg0NQogICAgLy8gICAgICAgICAgICAgICAgICAgICB0aHggdG8gTmllbHNMZWVuaGVlciBhbmQgemNvcnBhbgoKICAgIC8vIE5vdGU6IGluIHNvbWUgb2xkZXIgYnJvd3NlcnMsICJubyIgd2FzIGEgcmV0dXJuIHZhbHVlIGluc3RlYWQgb2YgZW1wdHkgc3RyaW5nLgogICAgLy8gICBJdCB3YXMgbGl2ZSBpbiBGRjMuNS4wIGFuZCAzLjUuMSwgYnV0IGZpeGVkIGluIDMuNS4yCiAgICAvLyAgIEl0IHdhcyBhbHNvIGxpdmUgaW4gU2FmYXJpIDQuMC4wIC0gNC4wLjQsIGJ1dCBmaXhlZCBpbiA0LjAuNQoKICAgIHRlc3RzWyd2aWRlbyddID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpLAogICAgICAgICAgICBib29sID0gZmFsc2U7CgogICAgICAgIC8vIElFOSBSdW5uaW5nIG9uIFdpbmRvd3MgU2VydmVyIFNLVSBjYW4gY2F1c2UgYW4gZXhjZXB0aW9uIHRvIGJlIHRocm93biwgYnVnICMyMjQKICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAoIGJvb2wgPSAhIWVsZW0uY2FuUGxheVR5cGUgKSB7CiAgICAgICAgICAgICAgICBib29sICAgICAgPSBuZXcgQm9vbGVhbihib29sKTsKICAgICAgICAgICAgICAgIGJvb2wub2dnICA9IGVsZW0uY2FuUGxheVR5cGUoJ3ZpZGVvL29nZzsgY29kZWNzPSJ0aGVvcmEiJykgICAgICAucmVwbGFjZSgvXm5vJC8sJycpOwoKICAgICAgICAgICAgICAgIC8vIFdpdGhvdXQgUXVpY2tUaW1lLCB0aGlzIHZhbHVlIHdpbGwgYmUgYHVuZGVmaW5lZGAuIGdpdGh1Yi5jb20vTW9kZXJuaXpyL01vZGVybml6ci9pc3N1ZXMvNTQ2CiAgICAgICAgICAgICAgICBib29sLmgyNjQgPSBlbGVtLmNhblBsYXlUeXBlKCd2aWRlby9tcDQ7IGNvZGVjcz0iYXZjMS40MkUwMUUiJykgLnJlcGxhY2UoL15ubyQvLCcnKTsKCiAgICAgICAgICAgICAgICBib29sLndlYm0gPSBlbGVtLmNhblBsYXlUeXBlKCd2aWRlby93ZWJtOyBjb2RlY3M9InZwOCwgdm9yYmlzIicpLnJlcGxhY2UoL15ubyQvLCcnKTsKICAgICAgICAgICAgfQoKICAgICAgICB9IGNhdGNoKGUpIHsgfQoKICAgICAgICByZXR1cm4gYm9vbDsKICAgIH07CgogICAgdGVzdHNbJ2F1ZGlvJ10gPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2F1ZGlvJyksCiAgICAgICAgICAgIGJvb2wgPSBmYWxzZTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKCBib29sID0gISFlbGVtLmNhblBsYXlUeXBlICkgewogICAgICAgICAgICAgICAgYm9vbCAgICAgID0gbmV3IEJvb2xlYW4oYm9vbCk7CiAgICAgICAgICAgICAgICBib29sLm9nZyAgPSBlbGVtLmNhblBsYXlUeXBlKCdhdWRpby9vZ2c7IGNvZGVjcz0idm9yYmlzIicpLnJlcGxhY2UoL15ubyQvLCcnKTsKICAgICAgICAgICAgICAgIGJvb2wubXAzICA9IGVsZW0uY2FuUGxheVR5cGUoJ2F1ZGlvL21wZWc7JykgICAgICAgICAgICAgICAucmVwbGFjZSgvXm5vJC8sJycpOwoKICAgICAgICAgICAgICAgIC8vIE1pbWV0eXBlcyBhY2NlcHRlZDoKICAgICAgICAgICAgICAgIC8vICAgZGV2ZWxvcGVyLm1vemlsbGEub3JnL0VuL01lZGlhX2Zvcm1hdHNfc3VwcG9ydGVkX2J5X3RoZV9hdWRpb19hbmRfdmlkZW9fZWxlbWVudHMKICAgICAgICAgICAgICAgIC8vICAgYml0Lmx5L2lwaG9uZW9zY29kZWNzCiAgICAgICAgICAgICAgICBib29sLndhdiAgPSBlbGVtLmNhblBsYXlUeXBlKCdhdWRpby93YXY7IGNvZGVjcz0iMSInKSAgICAgLnJlcGxhY2UoL15ubyQvLCcnKTsKICAgICAgICAgICAgICAgIGJvb2wubTRhICA9ICggZWxlbS5jYW5QbGF5VHlwZSgnYXVkaW8veC1tNGE7JykgICAgICAgICAgICB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmNhblBsYXlUeXBlKCdhdWRpby9hYWM7JykpICAgICAgICAgICAgIC5yZXBsYWNlKC9ebm8kLywnJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoKGUpIHsgfQoKICAgICAgICByZXR1cm4gYm9vbDsKICAgIH07CgoKICAgIC8vIEluIEZGNCwgaWYgZGlzYWJsZWQsIHdpbmRvdy5sb2NhbFN0b3JhZ2Ugc2hvdWxkID09PSBudWxsLgoKICAgIC8vIE5vcm1hbGx5LCB3ZSBjb3VsZCBub3QgdGVzdCB0aGF0IGRpcmVjdGx5IGFuZCBuZWVkIHRvIGRvIGEKICAgIC8vICAgYCgnbG9jYWxTdG9yYWdlJyBpbiB3aW5kb3cpICYmIGAgdGVzdCBmaXJzdCBiZWNhdXNlIG90aGVyd2lzZSBGaXJlZm94IHdpbGwKICAgIC8vICAgdGhyb3cgYnVnemlsLmxhLzM2NTc3MiBpZiBjb29raWVzIGFyZSBkaXNhYmxlZAoKICAgIC8vIEFsc28gaW4gaU9TNSBQcml2YXRlIEJyb3dzaW5nIG1vZGUsIGF0dGVtcHRpbmcgdG8gdXNlIGxvY2FsU3RvcmFnZS5zZXRJdGVtCiAgICAvLyB3aWxsIHRocm93IHRoZSBleGNlcHRpb246CiAgICAvLyAgIFFVT1RBX0VYQ0VFREVEX0VSUlJPUiBET00gRXhjZXB0aW9uIDIyLgogICAgLy8gUGVjdWxpYXJseSwgZ2V0SXRlbSBhbmQgcmVtb3ZlSXRlbSBjYWxscyBkbyBub3QgdGhyb3cuCgogICAgLy8gQmVjYXVzZSB3ZSBhcmUgZm9yY2VkIHRvIHRyeS9jYXRjaCB0aGlzLCB3ZSdsbCBnbyBhZ2dyZXNzaXZlLgoKICAgIC8vIEp1c3QgRldJVzogSUU4IENvbXBhdCBtb2RlIHN1cHBvcnRzIHRoZXNlIGZlYXR1cmVzIGNvbXBsZXRlbHk6CiAgICAvLyAgIHd3dy5xdWlya3Ntb2RlLm9yZy9kb20vaHRtbDUuaHRtbAogICAgLy8gQnV0IElFOCBkb2Vzbid0IHN1cHBvcnQgZWl0aGVyIHdpdGggbG9jYWwgZmlsZXMKCiAgICB0ZXN0c1snbG9jYWxzdG9yYWdlJ10gPSBmdW5jdGlvbigpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShtb2QsIG1vZCk7CiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG1vZCk7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gY2F0Y2goZSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfTsKCiAgICB0ZXN0c1snc2Vzc2lvbnN0b3JhZ2UnXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0obW9kLCBtb2QpOwogICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKG1vZCk7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gY2F0Y2goZSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfTsKCgogICAgdGVzdHNbJ3dlYndvcmtlcnMnXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAhIXdpbmRvdy5Xb3JrZXI7CiAgICB9OwoKCiAgICB0ZXN0c1snYXBwbGljYXRpb25jYWNoZSddID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICEhd2luZG93LmFwcGxpY2F0aW9uQ2FjaGU7CiAgICB9OwoKCiAgICAvLyBUaGFua3MgdG8gRXJpayBEYWhsc3Ryb20KICAgIHRlc3RzWydzdmcnXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyAmJiAhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhucy5zdmcsICdzdmcnKS5jcmVhdGVTVkdSZWN0OwogICAgfTsKCiAgICAvLyBzcGVjaWZpY2FsbHkgZm9yIFNWRyBpbmxpbmUgaW4gSFRNTCwgbm90IHdpdGhpbiBYSFRNTAogICAgLy8gdGVzdCBwYWdlOiBwYXVsaXJpc2guY29tL2RlbW8vaW5saW5lLXN2ZwogICAgdGVzdHNbJ2lubGluZXN2ZyddID0gZnVuY3Rpb24oKSB7CiAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgZGl2LmlubmVySFRNTCA9ICc8c3ZnLz4nOwogICAgICByZXR1cm4gKGRpdi5maXJzdENoaWxkICYmIGRpdi5maXJzdENoaWxkLm5hbWVzcGFjZVVSSSkgPT0gbnMuc3ZnOwogICAgfTsKCiAgICAvLyBTVkcgU01JTCBhbmltYXRpb24KICAgIHRlc3RzWydzbWlsJ10gPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gISFkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMgJiYgL1NWR0FuaW1hdGUvLnRlc3QodG9TdHJpbmcuY2FsbChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobnMuc3ZnLCAnYW5pbWF0ZScpKSk7CiAgICB9OwoKICAgIC8vIFRoaXMgdGVzdCBpcyBvbmx5IGZvciBjbGlwIHBhdGhzIGluIFNWRyBwcm9wZXIsIG5vdCBjbGlwIHBhdGhzIG9uIEhUTUwgY29udGVudAogICAgLy8gZGVtbzogc3J1ZmFjdWx0eS5zcnUuZWR1L2RhdmlkLmRhaWxleS9zdmcvbmV3c3R1ZmYvY2xpcFBhdGg0LnN2ZwoKICAgIC8vIEhvd2V2ZXIgcmVhZCB0aGUgY29tbWVudHMgdG8gZGlnIGludG8gYXBwbHlpbmcgU1ZHIGNsaXBwYXRocyB0byBIVE1MIGNvbnRlbnQgaGVyZToKICAgIC8vICAgZ2l0aHViLmNvbS9Nb2Rlcm5penIvTW9kZXJuaXpyL2lzc3Vlcy8yMTMjaXNzdWVjb21tZW50LTExNDk0OTEKICAgIHRlc3RzWydzdmdjbGlwcGF0aHMnXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyAmJiAvU1ZHQ2xpcFBhdGgvLnRlc3QodG9TdHJpbmcuY2FsbChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobnMuc3ZnLCAnY2xpcFBhdGgnKSkpOwogICAgfTsKCiAgICAvKj4+d2ViZm9ybXMqLwogICAgLy8gaW5wdXQgZmVhdHVyZXMgYW5kIGlucHV0IHR5cGVzIGdvIGRpcmVjdGx5IG9udG8gdGhlIHJldCBvYmplY3QsIGJ5cGFzc2luZyB0aGUgdGVzdHMgbG9vcC4KICAgIC8vIEhvbGQgdGhpcyBndXkgdG8gZXhlY3V0ZSBpbiBhIG1vbWVudC4KICAgIGZ1bmN0aW9uIHdlYmZvcm1zKCkgewogICAgICAgIC8qPj5pbnB1dCovCiAgICAgICAgLy8gUnVuIHRocm91Z2ggSFRNTDUncyBuZXcgaW5wdXQgYXR0cmlidXRlcyB0byBzZWUgaWYgdGhlIFVBIHVuZGVyc3RhbmRzIGFueS4KICAgICAgICAvLyBXZSdyZSB1c2luZyBmIHdoaWNoIGlzIHRoZSA8aW5wdXQ+IGVsZW1lbnQgY3JlYXRlZCBlYXJseSBvbgogICAgICAgIC8vIE1pa2UgVGF5bHIgaGFzIGNyZWF0ZWQgYSBjb21wcmVoZW5zaXZlIHJlc291cmNlIGZvciB0ZXN0aW5nIHRoZXNlIGF0dHJpYnV0ZXMKICAgICAgICAvLyAgIHdoZW4gYXBwbGllZCB0byBhbGwgaW5wdXQgdHlwZXM6CiAgICAgICAgLy8gICBtaWtldGF5bHIuY29tL2NvZGUvaW5wdXQtdHlwZS1hdHRyLmh0bWwKICAgICAgICAvLyBzcGVjOiB3d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RoZS1pbnB1dC1lbGVtZW50Lmh0bWwjaW5wdXQtdHlwZS1hdHRyLXN1bW1hcnkKCiAgICAgICAgLy8gT25seSBpbnB1dCBwbGFjZWhvbGRlciBpcyB0ZXN0ZWQgd2hpbGUgdGV4dGFyZWEncyBwbGFjZWhvbGRlciBpcyBub3QuCiAgICAgICAgLy8gQ3VycmVudGx5IFNhZmFyaSA0IGFuZCBPcGVyYSAxMSBoYXZlIHN1cHBvcnQgb25seSBmb3IgdGhlIGlucHV0IHBsYWNlaG9sZGVyCiAgICAgICAgLy8gQm90aCB0ZXN0cyBhcmUgYXZhaWxhYmxlIGluIGZlYXR1cmUtZGV0ZWN0cy9mb3Jtcy1wbGFjZWhvbGRlci5qcwogICAgICAgIE1vZGVybml6clsnaW5wdXQnXSA9IChmdW5jdGlvbiggcHJvcHMgKSB7CiAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbGVuID0gcHJvcHMubGVuZ3RoOyBpIDwgbGVuOyBpKysgKSB7CiAgICAgICAgICAgICAgICBhdHRyc1sgcHJvcHNbaV0gXSA9ICEhKHByb3BzW2ldIGluIGlucHV0RWxlbSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGF0dHJzLmxpc3QpewogICAgICAgICAgICAgIC8vIHNhZmFyaSBmYWxzZSBwb3NpdGl2ZSdzIG9uIGRhdGFsaXN0OiB3ZWJrLml0Lzc0MjUyCiAgICAgICAgICAgICAgLy8gc2VlIGFsc28gZ2l0aHViLmNvbS9Nb2Rlcm5penIvTW9kZXJuaXpyL2lzc3Vlcy8xNDYKICAgICAgICAgICAgICBhdHRycy5saXN0ID0gISEoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGF0YWxpc3QnKSAmJiB3aW5kb3cuSFRNTERhdGFMaXN0RWxlbWVudCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGF0dHJzOwogICAgICAgIH0pKCdhdXRvY29tcGxldGUgYXV0b2ZvY3VzIGxpc3QgcGxhY2Vob2xkZXIgbWF4IG1pbiBtdWx0aXBsZSBwYXR0ZXJuIHJlcXVpcmVkIHN0ZXAnLnNwbGl0KCcgJykpOwogICAgICAgIC8qPj5pbnB1dCovCgogICAgICAgIC8qPj5pbnB1dHR5cGVzKi8KICAgICAgICAvLyBSdW4gdGhyb3VnaCBIVE1MNSdzIG5ldyBpbnB1dCB0eXBlcyB0byBzZWUgaWYgdGhlIFVBIHVuZGVyc3RhbmRzIGFueS4KICAgICAgICAvLyAgIFRoaXMgaXMgcHV0IGJlaGluZCB0aGUgdGVzdHMgcnVubG9vcCBiZWNhdXNlIGl0IGRvZXNuJ3QgcmV0dXJuIGEKICAgICAgICAvLyAgIHRydWUvZmFsc2UgbGlrZSBhbGwgdGhlIG90aGVyIHRlc3RzOyBpbnN0ZWFkLCBpdCByZXR1cm5zIGFuIG9iamVjdAogICAgICAgIC8vICAgY29udGFpbmluZyBlYWNoIGlucHV0IHR5cGUgd2l0aCBpdHMgY29ycmVzcG9uZGluZyB0cnVlL2ZhbHNlIHZhbHVlCgogICAgICAgIC8vIEJpZyB0aGFua3MgdG8gQG1pa2V0YXlsciBmb3IgdGhlIGh0bWw1IGZvcm1zIGV4cGVydGlzZS4gbWlrZXRheWxyLmNvbS8KICAgICAgICBNb2Rlcm5penJbJ2lucHV0dHlwZXMnXSA9IChmdW5jdGlvbihwcm9wcykgewoKICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBib29sLCBpbnB1dEVsZW1UeXBlLCBkZWZhdWx0VmlldywgbGVuID0gcHJvcHMubGVuZ3RoOyBpIDwgbGVuOyBpKysgKSB7CgogICAgICAgICAgICAgICAgaW5wdXRFbGVtLnNldEF0dHJpYnV0ZSgndHlwZScsIGlucHV0RWxlbVR5cGUgPSBwcm9wc1tpXSk7CiAgICAgICAgICAgICAgICBib29sID0gaW5wdXRFbGVtLnR5cGUgIT09ICd0ZXh0JzsKCiAgICAgICAgICAgICAgICAvLyBXZSBmaXJzdCBjaGVjayB0byBzZWUgaWYgdGhlIHR5cGUgd2UgZ2l2ZSBpdCBzdGlja3MuLgogICAgICAgICAgICAgICAgLy8gSWYgdGhlIHR5cGUgZG9lcywgd2UgZmVlZCBpdCBhIHRleHR1YWwgdmFsdWUsIHdoaWNoIHNob3VsZG4ndCBiZSB2YWxpZC4KICAgICAgICAgICAgICAgIC8vIElmIHRoZSB2YWx1ZSBkb2Vzbid0IHN0aWNrLCB3ZSBrbm93IHRoZXJlJ3MgaW5wdXQgc2FuaXRpemF0aW9uIHdoaWNoIGluZmVycyBhIGN1c3RvbSBVSQogICAgICAgICAgICAgICAgaWYgKCBib29sICkgewoKICAgICAgICAgICAgICAgICAgICBpbnB1dEVsZW0udmFsdWUgICAgICAgICA9IHNtaWxlOwogICAgICAgICAgICAgICAgICAgIGlucHV0RWxlbS5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlO3Zpc2liaWxpdHk6aGlkZGVuOyc7CgogICAgICAgICAgICAgICAgICAgIGlmICggL15yYW5nZSQvLnRlc3QoaW5wdXRFbGVtVHlwZSkgJiYgaW5wdXRFbGVtLnN0eWxlLldlYmtpdEFwcGVhcmFuY2UgIT09IHVuZGVmaW5lZCApIHsKCiAgICAgICAgICAgICAgICAgICAgICBkb2NFbGVtZW50LmFwcGVuZENoaWxkKGlucHV0RWxlbSk7CiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmlldyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3OwoKICAgICAgICAgICAgICAgICAgICAgIC8vIFNhZmFyaSAyLTQgYWxsb3dzIHRoZSBzbWlsZXkgYXMgYSB2YWx1ZSwgZGVzcGl0ZSBtYWtpbmcgYSBzbGlkZXIKICAgICAgICAgICAgICAgICAgICAgIGJvb2wgPSAgZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGlucHV0RWxlbSwgbnVsbCkuV2Via2l0QXBwZWFyYW5jZSAhPT0gJ3RleHRmaWVsZCcgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW9iaWxlIGFuZHJvaWQgd2ViIGJyb3dzZXIgaGFzIGZhbHNlIHBvc2l0aXZlLCBzbyBtdXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRoZSBoZWlnaHQgdG8gc2VlIGlmIHRoZSB3aWRnZXQgaXMgYWN0dWFsbHkgdGhlcmUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dEVsZW0ub2Zmc2V0SGVpZ2h0ICE9PSAwKTsKCiAgICAgICAgICAgICAgICAgICAgICBkb2NFbGVtZW50LnJlbW92ZUNoaWxkKGlucHV0RWxlbSk7CgogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIC9eKHNlYXJjaHx0ZWwpJC8udGVzdChpbnB1dEVsZW1UeXBlKSApewogICAgICAgICAgICAgICAgICAgICAgLy8gU3BlYyBkb2Vzbid0IGRlZmluZSBhbnkgc3BlY2lhbCBwYXJzaW5nIG9yIGRldGVjdGFibGUgVUkKICAgICAgICAgICAgICAgICAgICAgIC8vICAgYmVoYXZpb3JzIHNvIHdlIHBhc3MgdGhlc2UgdGhyb3VnaCBhcyB0cnVlCgogICAgICAgICAgICAgICAgICAgICAgLy8gSW50ZXJlc3RpbmdseSwgb3BlcmEgZmFpbHMgdGhlIGVhcmxpZXIgdGVzdCwgc28gaXQgZG9lc24ndAogICAgICAgICAgICAgICAgICAgICAgLy8gIGV2ZW4gbWFrZSBpdCBoZXJlLgoKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAvXih1cmx8ZW1haWwpJC8udGVzdChpbnB1dEVsZW1UeXBlKSApIHsKICAgICAgICAgICAgICAgICAgICAgIC8vIFJlYWwgdXJsIGFuZCBlbWFpbCBzdXBwb3J0IGNvbWVzIHdpdGggcHJlYmFrZWQgdmFsaWRhdGlvbi4KICAgICAgICAgICAgICAgICAgICAgIGJvb2wgPSBpbnB1dEVsZW0uY2hlY2tWYWxpZGl0eSAmJiBpbnB1dEVsZW0uY2hlY2tWYWxpZGl0eSgpID09PSBmYWxzZTsKCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSB1cGdyYWRlZCBpbnB1dCBjb21wb250ZW50IHJlamVjdHMgdGhlIDopIHRleHQsIHdlIGdvdCBhIHdpbm5lcgogICAgICAgICAgICAgICAgICAgICAgYm9vbCA9IGlucHV0RWxlbS52YWx1ZSAhPSBzbWlsZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaW5wdXRzWyBwcm9wc1tpXSBdID0gISFib29sOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBpbnB1dHM7CiAgICAgICAgfSkoJ3NlYXJjaCB0ZWwgdXJsIGVtYWlsIGRhdGV0aW1lIGRhdGUgbW9udGggd2VlayB0aW1lIGRhdGV0aW1lLWxvY2FsIG51bWJlciByYW5nZSBjb2xvcicuc3BsaXQoJyAnKSk7CiAgICAgICAgLyo+PmlucHV0dHlwZXMqLwogICAgfQogICAgLyo+PndlYmZvcm1zKi8KCgogICAgLy8gRW5kIG9mIHRlc3QgZGVmaW5pdGlvbnMKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKCiAgICAvLyBSdW4gdGhyb3VnaCBhbGwgdGVzdHMgYW5kIGRldGVjdCB0aGVpciBzdXBwb3J0IGluIHRoZSBjdXJyZW50IFVBLgogICAgLy8gdG9kbzogaHlwb3RoZXRpY2FsbHkgd2UgY291bGQgYmUgZG9pbmcgYW4gYXJyYXkgb2YgdGVzdHMgYW5kIHVzZSBhIGJhc2ljIGxvb3AgaGVyZS4KICAgIGZvciAoIHZhciBmZWF0dXJlIGluIHRlc3RzICkgewogICAgICAgIGlmICggaGFzT3duUHJvcCh0ZXN0cywgZmVhdHVyZSkgKSB7CiAgICAgICAgICAgIC8vIHJ1biB0aGUgdGVzdCwgdGhyb3cgdGhlIHJldHVybiB2YWx1ZSBpbnRvIHRoZSBNb2Rlcm5penIsCiAgICAgICAgICAgIC8vICAgdGhlbiBiYXNlZCBvbiB0aGF0IGJvb2xlYW4sIGRlZmluZSBhbiBhcHByb3ByaWF0ZSBjbGFzc05hbWUKICAgICAgICAgICAgLy8gICBhbmQgcHVzaCBpdCBpbnRvIGFuIGFycmF5IG9mIGNsYXNzZXMgd2UnbGwgam9pbiBsYXRlci4KICAgICAgICAgICAgZmVhdHVyZU5hbWUgID0gZmVhdHVyZS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICBNb2Rlcm5penJbZmVhdHVyZU5hbWVdID0gdGVzdHNbZmVhdHVyZV0oKTsKCiAgICAgICAgICAgIGNsYXNzZXMucHVzaCgoTW9kZXJuaXpyW2ZlYXR1cmVOYW1lXSA/ICcnIDogJ25vLScpICsgZmVhdHVyZU5hbWUpOwogICAgICAgIH0KICAgIH0KCiAgICAvKj4+d2ViZm9ybXMqLwogICAgLy8gaW5wdXQgdGVzdHMgbmVlZCB0byBydW4uCiAgICBNb2Rlcm5penIuaW5wdXQgfHwgd2ViZm9ybXMoKTsKICAgIC8qPj53ZWJmb3JtcyovCgoKICAgIC8qKgogICAgICogYWRkVGVzdCBhbGxvd3MgdGhlIHVzZXIgdG8gZGVmaW5lIHRoZWlyIG93biBmZWF0dXJlIHRlc3RzCiAgICAgKiB0aGUgcmVzdWx0IHdpbGwgYmUgYWRkZWQgb250byB0aGUgTW9kZXJuaXpyIG9iamVjdCwKICAgICAqIGFzIHdlbGwgYXMgYW4gYXBwcm9wcmlhdGUgY2xhc3NOYW1lIHNldCBvbiB0aGUgaHRtbCBlbGVtZW50CiAgICAgKgogICAgICogQHBhcmFtIGZlYXR1cmUgLSBTdHJpbmcgbmFtaW5nIHRoZSBmZWF0dXJlCiAgICAgKiBAcGFyYW0gdGVzdCAtIEZ1bmN0aW9uIHJldHVybmluZyB0cnVlIGlmIGZlYXR1cmUgaXMgc3VwcG9ydGVkLCBmYWxzZSBpZiBub3QKICAgICAqLwogICAgIE1vZGVybml6ci5hZGRUZXN0ID0gZnVuY3Rpb24gKCBmZWF0dXJlLCB0ZXN0ICkgewogICAgICAgaWYgKCB0eXBlb2YgZmVhdHVyZSA9PSAnb2JqZWN0JyApIHsKICAgICAgICAgZm9yICggdmFyIGtleSBpbiBmZWF0dXJlICkgewogICAgICAgICAgIGlmICggaGFzT3duUHJvcCggZmVhdHVyZSwga2V5ICkgKSB7CiAgICAgICAgICAgICBNb2Rlcm5penIuYWRkVGVzdCgga2V5LCBmZWF0dXJlWyBrZXkgXSApOwogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfSBlbHNlIHsKCiAgICAgICAgIGZlYXR1cmUgPSBmZWF0dXJlLnRvTG93ZXJDYXNlKCk7CgogICAgICAgICBpZiAoIE1vZGVybml6cltmZWF0dXJlXSAhPT0gdW5kZWZpbmVkICkgewogICAgICAgICAgIC8vIHdlJ3JlIGdvaW5nIHRvIHF1aXQgaWYgeW91J3JlIHRyeWluZyB0byBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgdGVzdAogICAgICAgICAgIC8vIGlmIHdlIHdlcmUgdG8gYWxsb3cgaXQsIHdlJ2QgZG8gdGhpczoKICAgICAgICAgICAvLyAgIHZhciByZSA9IG5ldyBSZWdFeHAoIlxcYihuby0pPyIgKyBmZWF0dXJlICsgIlxcYiIpOwogICAgICAgICAgIC8vICAgZG9jRWxlbWVudC5jbGFzc05hbWUgPSBkb2NFbGVtZW50LmNsYXNzTmFtZS5yZXBsYWNlKCByZSwgJycgKTsKICAgICAgICAgICAvLyBidXQsIG5vIHJseSwgc3R1ZmYgJ2VtLgogICAgICAgICAgIHJldHVybiBNb2Rlcm5penI7CiAgICAgICAgIH0KCiAgICAgICAgIHRlc3QgPSB0eXBlb2YgdGVzdCA9PSAnZnVuY3Rpb24nID8gdGVzdCgpIDogdGVzdDsKCiAgICAgICAgIGlmICh0eXBlb2YgZW5hYmxlQ2xhc3NlcyAhPT0gInVuZGVmaW5lZCIgJiYgZW5hYmxlQ2xhc3NlcykgewogICAgICAgICAgIGRvY0VsZW1lbnQuY2xhc3NOYW1lICs9ICcgJyArICh0ZXN0ID8gJycgOiAnbm8tJykgKyBmZWF0dXJlOwogICAgICAgICB9CiAgICAgICAgIE1vZGVybml6cltmZWF0dXJlXSA9IHRlc3Q7CgogICAgICAgfQoKICAgICAgIHJldHVybiBNb2Rlcm5penI7IC8vIGFsbG93IGNoYWluaW5nLgogICAgIH07CgoKICAgIC8vIFJlc2V0IG1vZEVsZW0uY3NzVGV4dCB0byBub3RoaW5nIHRvIHJlZHVjZSBtZW1vcnkgZm9vdHByaW50LgogICAgc2V0Q3NzKCcnKTsKICAgIG1vZEVsZW0gPSBpbnB1dEVsZW0gPSBudWxsOwoKICAgIC8qPj5zaGl2Ki8KICAgIC8qKgogICAgICogQHByZXNlcnZlIEhUTUw1IFNoaXYgcHJldjMuNy4xIHwgQGFmYXJrYXMgQGpkYWx0b24gQGpvbl9uZWFsIEByZW0gfCBNSVQvR1BMMiBMaWNlbnNlZAogICAgICovCiAgICA7KGZ1bmN0aW9uKHdpbmRvdywgZG9jdW1lbnQpIHsKICAgICAgICAvKmpzaGludCBldmlsOnRydWUgKi8KICAgICAgICAvKiogdmVyc2lvbiAqLwogICAgICAgIHZhciB2ZXJzaW9uID0gJzMuNy4wJzsKCiAgICAgICAgLyoqIFByZXNldCBvcHRpb25zICovCiAgICAgICAgdmFyIG9wdGlvbnMgPSB3aW5kb3cuaHRtbDUgfHwge307CgogICAgICAgIC8qKiBVc2VkIHRvIHNraXAgcHJvYmxlbSBlbGVtZW50cyAqLwogICAgICAgIHZhciByZVNraXAgPSAvXjx8Xig/OmJ1dHRvbnxtYXB8c2VsZWN0fHRleHRhcmVhfG9iamVjdHxpZnJhbWV8b3B0aW9ufG9wdGdyb3VwKSQvaTsKCiAgICAgICAgLyoqIE5vdCBhbGwgZWxlbWVudHMgY2FuIGJlIGNsb25lZCBpbiBJRSAqKi8KICAgICAgICB2YXIgc2F2ZUNsb25lcyA9IC9eKD86YXxifGNvZGV8ZGl2fGZpZWxkc2V0fGgxfGgyfGgzfGg0fGg1fGg2fGl8bGFiZWx8bGl8b2x8cHxxfHNwYW58c3Ryb25nfHN0eWxlfHRhYmxlfHRib2R5fHRkfHRofHRyfHVsKSQvaTsKCiAgICAgICAgLyoqIERldGVjdCB3aGV0aGVyIHRoZSBicm93c2VyIHN1cHBvcnRzIGRlZmF1bHQgaHRtbDUgc3R5bGVzICovCiAgICAgICAgdmFyIHN1cHBvcnRzSHRtbDVTdHlsZXM7CgogICAgICAgIC8qKiBOYW1lIG9mIHRoZSBleHBhbmRvLCB0byB3b3JrIHdpdGggbXVsdGlwbGUgZG9jdW1lbnRzIG9yIHRvIHJlLXNoaXYgb25lIGRvY3VtZW50ICovCiAgICAgICAgdmFyIGV4cGFuZG8gPSAnX2h0bWw1c2hpdic7CgogICAgICAgIC8qKiBUaGUgaWQgZm9yIHRoZSB0aGUgZG9jdW1lbnRzIGV4cGFuZG8gKi8KICAgICAgICB2YXIgZXhwYW5JRCA9IDA7CgogICAgICAgIC8qKiBDYWNoZWQgZGF0YSBmb3IgZWFjaCBkb2N1bWVudCAqLwogICAgICAgIHZhciBleHBhbmRvRGF0YSA9IHt9OwoKICAgICAgICAvKiogRGV0ZWN0IHdoZXRoZXIgdGhlIGJyb3dzZXIgc3VwcG9ydHMgdW5rbm93biBlbGVtZW50cyAqLwogICAgICAgIHZhciBzdXBwb3J0c1Vua25vd25FbGVtZW50czsKCiAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CiAgICAgICAgICAgIGEuaW5uZXJIVE1MID0gJzx4eXo+PC94eXo+JzsKICAgICAgICAgICAgLy9pZiB0aGUgaGlkZGVuIHByb3BlcnR5IGlzIGltcGxlbWVudGVkIHdlIGNhbiBhc3N1bWUsIHRoYXQgdGhlIGJyb3dzZXIgc3VwcG9ydHMgYmFzaWMgSFRNTDUgU3R5bGVzCiAgICAgICAgICAgIHN1cHBvcnRzSHRtbDVTdHlsZXMgPSAoJ2hpZGRlbicgaW4gYSk7CgogICAgICAgICAgICBzdXBwb3J0c1Vua25vd25FbGVtZW50cyA9IGEuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSB8fCAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgLy8gYXNzaWduIGEgZmFsc2UgcG9zaXRpdmUgaWYgdW5hYmxlIHRvIHNoaXYKICAgICAgICAgICAgICAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCkoJ2EnKTsKICAgICAgICAgICAgICB2YXIgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKICAgICAgICAgICAgICByZXR1cm4gKAogICAgICAgICAgICAgICAgdHlwZW9mIGZyYWcuY2xvbmVOb2RlID09ICd1bmRlZmluZWQnIHx8CiAgICAgICAgICAgICAgICB0eXBlb2YgZnJhZy5jcmVhdGVEb2N1bWVudEZyYWdtZW50ID09ICd1bmRlZmluZWQnIHx8CiAgICAgICAgICAgICAgICB0eXBlb2YgZnJhZy5jcmVhdGVFbGVtZW50ID09ICd1bmRlZmluZWQnCiAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfSgpKTsKICAgICAgICAgIH0gY2F0Y2goZSkgewogICAgICAgICAgICAvLyBhc3NpZ24gYSBmYWxzZSBwb3NpdGl2ZSBpZiBkZXRlY3Rpb24gZmFpbHMgPT4gdW5hYmxlIHRvIHNoaXYKICAgICAgICAgICAgc3VwcG9ydHNIdG1sNVN0eWxlcyA9IHRydWU7CiAgICAgICAgICAgIHN1cHBvcnRzVW5rbm93bkVsZW1lbnRzID0gdHJ1ZTsKICAgICAgICAgIH0KCiAgICAgICAgfSgpKTsKCiAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgogICAgICAgIC8qKgogICAgICAgICAqIENyZWF0ZXMgYSBzdHlsZSBzaGVldCB3aXRoIHRoZSBnaXZlbiBDU1MgdGV4dCBhbmQgYWRkcyBpdCB0byB0aGUgZG9jdW1lbnQuCiAgICAgICAgICogQHByaXZhdGUKICAgICAgICAgKiBAcGFyYW0ge0RvY3VtZW50fSBvd25lckRvY3VtZW50IFRoZSBkb2N1bWVudC4KICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gY3NzVGV4dCBUaGUgQ1NTIHRleHQuCiAgICAgICAgICogQHJldHVybnMge1N0eWxlU2hlZXR9IFRoZSBzdHlsZSBlbGVtZW50LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGFkZFN0eWxlU2hlZXQob3duZXJEb2N1bWVudCwgY3NzVGV4dCkgewogICAgICAgICAgdmFyIHAgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKSwKICAgICAgICAgIHBhcmVudCA9IG93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSB8fCBvd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKCiAgICAgICAgICBwLmlubmVySFRNTCA9ICd4PHN0eWxlPicgKyBjc3NUZXh0ICsgJzwvc3R5bGU+JzsKICAgICAgICAgIHJldHVybiBwYXJlbnQuaW5zZXJ0QmVmb3JlKHAubGFzdENoaWxkLCBwYXJlbnQuZmlyc3RDaGlsZCk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBgaHRtbDUuZWxlbWVudHNgIGFzIGFuIGFycmF5LgogICAgICAgICAqIEBwcml2YXRlCiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBBbiBhcnJheSBvZiBzaGl2ZWQgZWxlbWVudCBub2RlIG5hbWVzLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEVsZW1lbnRzKCkgewogICAgICAgICAgdmFyIGVsZW1lbnRzID0gaHRtbDUuZWxlbWVudHM7CiAgICAgICAgICByZXR1cm4gdHlwZW9mIGVsZW1lbnRzID09ICdzdHJpbmcnID8gZWxlbWVudHMuc3BsaXQoJyAnKSA6IGVsZW1lbnRzOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogUmV0dXJucyB0aGUgZGF0YSBhc3NvY2lhdGVkIHRvIHRoZSBnaXZlbiBkb2N1bWVudAogICAgICAgICAqIEBwcml2YXRlCiAgICAgICAgICogQHBhcmFtIHtEb2N1bWVudH0gb3duZXJEb2N1bWVudCBUaGUgZG9jdW1lbnQuCiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gQW4gb2JqZWN0IG9mIGRhdGEuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXhwYW5kb0RhdGEob3duZXJEb2N1bWVudCkgewogICAgICAgICAgdmFyIGRhdGEgPSBleHBhbmRvRGF0YVtvd25lckRvY3VtZW50W2V4cGFuZG9dXTsKICAgICAgICAgIGlmICghZGF0YSkgewogICAgICAgICAgICBkYXRhID0ge307CiAgICAgICAgICAgIGV4cGFuSUQrKzsKICAgICAgICAgICAgb3duZXJEb2N1bWVudFtleHBhbmRvXSA9IGV4cGFuSUQ7CiAgICAgICAgICAgIGV4cGFuZG9EYXRhW2V4cGFuSURdID0gZGF0YTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBkYXRhOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogcmV0dXJucyBhIHNoaXZlZCBlbGVtZW50IGZvciB0aGUgZ2l2ZW4gbm9kZU5hbWUgYW5kIGRvY3VtZW50CiAgICAgICAgICogQG1lbWJlck9mIGh0bWw1CiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5vZGVOYW1lIG5hbWUgb2YgdGhlIGVsZW1lbnQKICAgICAgICAgKiBAcGFyYW0ge0RvY3VtZW50fSBvd25lckRvY3VtZW50IFRoZSBjb250ZXh0IGRvY3VtZW50LgogICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBzaGl2ZWQgZWxlbWVudC4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KG5vZGVOYW1lLCBvd25lckRvY3VtZW50LCBkYXRhKXsKICAgICAgICAgIGlmICghb3duZXJEb2N1bWVudCkgewogICAgICAgICAgICBvd25lckRvY3VtZW50ID0gZG9jdW1lbnQ7CiAgICAgICAgICB9CiAgICAgICAgICBpZihzdXBwb3J0c1Vua25vd25FbGVtZW50cyl7CiAgICAgICAgICAgIHJldHVybiBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobm9kZU5hbWUpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFkYXRhKSB7CiAgICAgICAgICAgIGRhdGEgPSBnZXRFeHBhbmRvRGF0YShvd25lckRvY3VtZW50KTsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBub2RlOwoKICAgICAgICAgIGlmIChkYXRhLmNhY2hlW25vZGVOYW1lXSkgewogICAgICAgICAgICBub2RlID0gZGF0YS5jYWNoZVtub2RlTmFtZV0uY2xvbmVOb2RlKCk7CiAgICAgICAgICB9IGVsc2UgaWYgKHNhdmVDbG9uZXMudGVzdChub2RlTmFtZSkpIHsKICAgICAgICAgICAgbm9kZSA9IChkYXRhLmNhY2hlW25vZGVOYW1lXSA9IGRhdGEuY3JlYXRlRWxlbShub2RlTmFtZSkpLmNsb25lTm9kZSgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbm9kZSA9IGRhdGEuY3JlYXRlRWxlbShub2RlTmFtZSk7CiAgICAgICAgICB9CgogICAgICAgICAgLy8gQXZvaWQgYWRkaW5nIHNvbWUgZWxlbWVudHMgdG8gZnJhZ21lbnRzIGluIElFIDwgOSBiZWNhdXNlCiAgICAgICAgICAvLyAqIEF0dHJpYnV0ZXMgbGlrZSBgbmFtZWAgb3IgYHR5cGVgIGNhbm5vdCBiZSBzZXQvY2hhbmdlZCBvbmNlIGFuIGVsZW1lbnQKICAgICAgICAgIC8vICAgaXMgaW5zZXJ0ZWQgaW50byBhIGRvY3VtZW50L2ZyYWdtZW50CiAgICAgICAgICAvLyAqIExpbmsgZWxlbWVudHMgd2l0aCBgc3JjYCBhdHRyaWJ1dGVzIHRoYXQgYXJlIGluYWNjZXNzaWJsZSwgYXMgd2l0aAogICAgICAgICAgLy8gICBhIDQwMyByZXNwb25zZSwgd2lsbCBjYXVzZSB0aGUgdGFiL3dpbmRvdyB0byBjcmFzaAogICAgICAgICAgLy8gKiBTY3JpcHQgZWxlbWVudHMgYXBwZW5kZWQgdG8gZnJhZ21lbnRzIHdpbGwgZXhlY3V0ZSB3aGVuIHRoZWlyIGBzcmNgCiAgICAgICAgICAvLyAgIG9yIGB0ZXh0YCBwcm9wZXJ0eSBpcyBzZXQKICAgICAgICAgIHJldHVybiBub2RlLmNhbkhhdmVDaGlsZHJlbiAmJiAhcmVTa2lwLnRlc3Qobm9kZU5hbWUpICYmICFub2RlLnRhZ1VybiA/IGRhdGEuZnJhZy5hcHBlbmRDaGlsZChub2RlKSA6IG5vZGU7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiByZXR1cm5zIGEgc2hpdmVkIERvY3VtZW50RnJhZ21lbnQgZm9yIHRoZSBnaXZlbiBkb2N1bWVudAogICAgICAgICAqIEBtZW1iZXJPZiBodG1sNQogICAgICAgICAqIEBwYXJhbSB7RG9jdW1lbnR9IG93bmVyRG9jdW1lbnQgVGhlIGNvbnRleHQgZG9jdW1lbnQuCiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gVGhlIHNoaXZlZCBEb2N1bWVudEZyYWdtZW50LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGNyZWF0ZURvY3VtZW50RnJhZ21lbnQob3duZXJEb2N1bWVudCwgZGF0YSl7CiAgICAgICAgICBpZiAoIW93bmVyRG9jdW1lbnQpIHsKICAgICAgICAgICAgb3duZXJEb2N1bWVudCA9IGRvY3VtZW50OwogICAgICAgICAgfQogICAgICAgICAgaWYoc3VwcG9ydHNVbmtub3duRWxlbWVudHMpewogICAgICAgICAgICByZXR1cm4gb3duZXJEb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CiAgICAgICAgICB9CiAgICAgICAgICBkYXRhID0gZGF0YSB8fCBnZXRFeHBhbmRvRGF0YShvd25lckRvY3VtZW50KTsKICAgICAgICAgIHZhciBjbG9uZSA9IGRhdGEuZnJhZy5jbG9uZU5vZGUoKSwKICAgICAgICAgIGkgPSAwLAogICAgICAgICAgZWxlbXMgPSBnZXRFbGVtZW50cygpLAogICAgICAgICAgbCA9IGVsZW1zLmxlbmd0aDsKICAgICAgICAgIGZvcig7aTxsO2krKyl7CiAgICAgICAgICAgIGNsb25lLmNyZWF0ZUVsZW1lbnQoZWxlbXNbaV0pOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGNsb25lOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogU2hpdnMgdGhlIGBjcmVhdGVFbGVtZW50YCBhbmQgYGNyZWF0ZURvY3VtZW50RnJhZ21lbnRgIG1ldGhvZHMgb2YgdGhlIGRvY3VtZW50LgogICAgICAgICAqIEBwcml2YXRlCiAgICAgICAgICogQHBhcmFtIHtEb2N1bWVudHxEb2N1bWVudEZyYWdtZW50fSBvd25lckRvY3VtZW50IFRoZSBkb2N1bWVudC4KICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YSBvZiB0aGUgZG9jdW1lbnQuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2hpdk1ldGhvZHMob3duZXJEb2N1bWVudCwgZGF0YSkgewogICAgICAgICAgaWYgKCFkYXRhLmNhY2hlKSB7CiAgICAgICAgICAgIGRhdGEuY2FjaGUgPSB7fTsKICAgICAgICAgICAgZGF0YS5jcmVhdGVFbGVtID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50OwogICAgICAgICAgICBkYXRhLmNyZWF0ZUZyYWcgPSBvd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQ7CiAgICAgICAgICAgIGRhdGEuZnJhZyA9IGRhdGEuY3JlYXRlRnJhZygpOwogICAgICAgICAgfQoKCiAgICAgICAgICBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbihub2RlTmFtZSkgewogICAgICAgICAgICAvL2Fib3J0IHNoaXYKICAgICAgICAgICAgaWYgKCFodG1sNS5zaGl2TWV0aG9kcykgewogICAgICAgICAgICAgIHJldHVybiBkYXRhLmNyZWF0ZUVsZW0obm9kZU5hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KG5vZGVOYW1lLCBvd25lckRvY3VtZW50LCBkYXRhKTsKICAgICAgICAgIH07CgogICAgICAgICAgb3duZXJEb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50ID0gRnVuY3Rpb24oJ2gsZicsICdyZXR1cm4gZnVuY3Rpb24oKXsnICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2YXIgbj1mLmNsb25lTm9kZSgpLGM9bi5jcmVhdGVFbGVtZW50OycgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2guc2hpdk1ldGhvZHMmJignICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVucm9sbCB0aGUgYGNyZWF0ZUVsZW1lbnRgIGNhbGxzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRFbGVtZW50cygpLmpvaW4oKS5yZXBsYWNlKC9bXHdcLV0rL2csIGZ1bmN0aW9uKG5vZGVOYW1lKSB7CiAgICAgICAgICAgIGRhdGEuY3JlYXRlRWxlbShub2RlTmFtZSk7CiAgICAgICAgICAgIGRhdGEuZnJhZy5jcmVhdGVFbGVtZW50KG5vZGVOYW1lKTsKICAgICAgICAgICAgcmV0dXJuICdjKCInICsgbm9kZU5hbWUgKyAnIiknOwogICAgICAgICAgfSkgKwogICAgICAgICAgICAnKTtyZXR1cm4gbn0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkoaHRtbDUsIGRhdGEuZnJhZyk7CiAgICAgICAgfQoKICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCiAgICAgICAgLyoqCiAgICAgICAgICogU2hpdnMgdGhlIGdpdmVuIGRvY3VtZW50LgogICAgICAgICAqIEBtZW1iZXJPZiBodG1sNQogICAgICAgICAqIEBwYXJhbSB7RG9jdW1lbnR9IG93bmVyRG9jdW1lbnQgVGhlIGRvY3VtZW50IHRvIHNoaXYuCiAgICAgICAgICogQHJldHVybnMge0RvY3VtZW50fSBUaGUgc2hpdmVkIGRvY3VtZW50LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNoaXZEb2N1bWVudChvd25lckRvY3VtZW50KSB7CiAgICAgICAgICBpZiAoIW93bmVyRG9jdW1lbnQpIHsKICAgICAgICAgICAgb3duZXJEb2N1bWVudCA9IGRvY3VtZW50OwogICAgICAgICAgfQogICAgICAgICAgdmFyIGRhdGEgPSBnZXRFeHBhbmRvRGF0YShvd25lckRvY3VtZW50KTsKCiAgICAgICAgICBpZiAoaHRtbDUuc2hpdkNTUyAmJiAhc3VwcG9ydHNIdG1sNVN0eWxlcyAmJiAhZGF0YS5oYXNDU1MpIHsKICAgICAgICAgICAgZGF0YS5oYXNDU1MgPSAhIWFkZFN0eWxlU2hlZXQob3duZXJEb2N1bWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVjdHMgYmxvY2sgZGlzcGxheSBub3QgZGVmaW5lZCBpbiBJRTYvNy84LzkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FydGljbGUsYXNpZGUsZGlhbG9nLGZpZ2NhcHRpb24sZmlndXJlLGZvb3RlcixoZWFkZXIsaGdyb3VwLG1haW4sbmF2LHNlY3Rpb257ZGlzcGxheTpibG9ja30nICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGRzIHN0eWxpbmcgbm90IHByZXNlbnQgaW4gSUU2LzcvOC85CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmt7YmFja2dyb3VuZDojRkYwO2NvbG9yOiMwMDB9JyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGlkZXMgbm9uLXJlbmRlcmVkIGVsZW1lbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RlbXBsYXRle2Rpc3BsYXk6bm9uZX0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghc3VwcG9ydHNVbmtub3duRWxlbWVudHMpIHsKICAgICAgICAgICAgc2hpdk1ldGhvZHMob3duZXJEb2N1bWVudCwgZGF0YSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gb3duZXJEb2N1bWVudDsKICAgICAgICB9CgogICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgYGh0bWw1YCBvYmplY3QgaXMgZXhwb3NlZCBzbyB0aGF0IG1vcmUgZWxlbWVudHMgY2FuIGJlIHNoaXZlZCBhbmQKICAgICAgICAgKiBleGlzdGluZyBzaGl2aW5nIGNhbiBiZSBkZXRlY3RlZCBvbiBpZnJhbWVzLgogICAgICAgICAqIEB0eXBlIE9iamVjdAogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICoKICAgICAgICAgKiAvLyBvcHRpb25zIGNhbiBiZSBjaGFuZ2VkIGJlZm9yZSB0aGUgc2NyaXB0IGlzIGluY2x1ZGVkCiAgICAgICAgICogaHRtbDUgPSB7ICdlbGVtZW50cyc6ICdtYXJrIHNlY3Rpb24nLCAnc2hpdkNTUyc6IGZhbHNlLCAnc2hpdk1ldGhvZHMnOiBmYWxzZSB9OwogICAgICAgICAqLwogICAgICAgIHZhciBodG1sNSA9IHsKCiAgICAgICAgICAvKioKICAgICAgICAgICAqIEFuIGFycmF5IG9yIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgb2Ygbm9kZSBuYW1lcyBvZiB0aGUgZWxlbWVudHMgdG8gc2hpdi4KICAgICAgICAgICAqIEBtZW1iZXJPZiBodG1sNQogICAgICAgICAgICogQHR5cGUgQXJyYXl8U3RyaW5nCiAgICAgICAgICAgKi8KICAgICAgICAgICdlbGVtZW50cyc6IG9wdGlvbnMuZWxlbWVudHMgfHwgJ2FiYnIgYXJ0aWNsZSBhc2lkZSBhdWRpbyBiZGkgY2FudmFzIGRhdGEgZGF0YWxpc3QgZGV0YWlscyBkaWFsb2cgZmlnY2FwdGlvbiBmaWd1cmUgZm9vdGVyIGhlYWRlciBoZ3JvdXAgbWFpbiBtYXJrIG1ldGVyIG5hdiBvdXRwdXQgcHJvZ3Jlc3Mgc2VjdGlvbiBzdW1tYXJ5IHRlbXBsYXRlIHRpbWUgdmlkZW8nLAoKICAgICAgICAgIC8qKgogICAgICAgICAgICogY3VycmVudCB2ZXJzaW9uIG9mIGh0bWw1c2hpdgogICAgICAgICAgICovCiAgICAgICAgICAndmVyc2lvbic6IHZlcnNpb24sCgogICAgICAgICAgLyoqCiAgICAgICAgICAgKiBBIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgSFRNTDUgc3R5bGUgc2hlZXQgc2hvdWxkIGJlIGluc2VydGVkLgogICAgICAgICAgICogQG1lbWJlck9mIGh0bWw1CiAgICAgICAgICAgKiBAdHlwZSBCb29sZWFuCiAgICAgICAgICAgKi8KICAgICAgICAgICdzaGl2Q1NTJzogKG9wdGlvbnMuc2hpdkNTUyAhPT0gZmFsc2UpLAoKICAgICAgICAgIC8qKgogICAgICAgICAgICogSXMgZXF1YWwgdG8gdHJ1ZSBpZiBhIGJyb3dzZXIgc3VwcG9ydHMgY3JlYXRpbmcgdW5rbm93bi9IVE1MNSBlbGVtZW50cwogICAgICAgICAgICogQG1lbWJlck9mIGh0bWw1CiAgICAgICAgICAgKiBAdHlwZSBib29sZWFuCiAgICAgICAgICAgKi8KICAgICAgICAgICdzdXBwb3J0c1Vua25vd25FbGVtZW50cyc6IHN1cHBvcnRzVW5rbm93bkVsZW1lbnRzLAoKICAgICAgICAgIC8qKgogICAgICAgICAgICogQSBmbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIGRvY3VtZW50J3MgYGNyZWF0ZUVsZW1lbnRgIGFuZCBgY3JlYXRlRG9jdW1lbnRGcmFnbWVudGAKICAgICAgICAgICAqIG1ldGhvZHMgc2hvdWxkIGJlIG92ZXJ3cml0dGVuLgogICAgICAgICAgICogQG1lbWJlck9mIGh0bWw1CiAgICAgICAgICAgKiBAdHlwZSBCb29sZWFuCiAgICAgICAgICAgKi8KICAgICAgICAgICdzaGl2TWV0aG9kcyc6IChvcHRpb25zLnNoaXZNZXRob2RzICE9PSBmYWxzZSksCgogICAgICAgICAgLyoqCiAgICAgICAgICAgKiBBIHN0cmluZyB0byBkZXNjcmliZSB0aGUgdHlwZSBvZiBgaHRtbDVgIG9iamVjdCAoImRlZmF1bHQiIG9yICJkZWZhdWx0IHByaW50IikuCiAgICAgICAgICAgKiBAbWVtYmVyT2YgaHRtbDUKICAgICAgICAgICAqIEB0eXBlIFN0cmluZwogICAgICAgICAgICovCiAgICAgICAgICAndHlwZSc6ICdkZWZhdWx0JywKCiAgICAgICAgICAvLyBzaGl2cyB0aGUgZG9jdW1lbnQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgYGh0bWw1YCBvYmplY3Qgb3B0aW9ucwogICAgICAgICAgJ3NoaXZEb2N1bWVudCc6IHNoaXZEb2N1bWVudCwKCiAgICAgICAgICAvL2NyZWF0ZXMgYSBzaGl2ZWQgZWxlbWVudAogICAgICAgICAgY3JlYXRlRWxlbWVudDogY3JlYXRlRWxlbWVudCwKCiAgICAgICAgICAvL2NyZWF0ZXMgYSBzaGl2ZWQgZG9jdW1lbnRGcmFnbWVudAogICAgICAgICAgY3JlYXRlRG9jdW1lbnRGcmFnbWVudDogY3JlYXRlRG9jdW1lbnRGcmFnbWVudAogICAgICAgIH07CgogICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKICAgICAgICAvLyBleHBvc2UgaHRtbDUKICAgICAgICB3aW5kb3cuaHRtbDUgPSBodG1sNTsKCiAgICAgICAgLy8gc2hpdiB0aGUgZG9jdW1lbnQKICAgICAgICBzaGl2RG9jdW1lbnQoZG9jdW1lbnQpOwoKICAgIH0odGhpcywgZG9jdW1lbnQpKTsKICAgIC8qPj5zaGl2Ki8KCiAgICAvLyBBc3NpZ24gcHJpdmF0ZSBwcm9wZXJ0aWVzIHRvIHRoZSByZXR1cm4gb2JqZWN0IHdpdGggcHJlZml4CiAgICBNb2Rlcm5penIuX3ZlcnNpb24gICAgICA9IHZlcnNpb247CgogICAgLy8gZXhwb3NlIHRoZXNlIGZvciB0aGUgcGx1Z2luIEFQSS4gTG9vayBpbiB0aGUgc291cmNlIGZvciBob3cgdG8gam9pbigpIHRoZW0gYWdhaW5zdCB5b3VyIGlucHV0CiAgICAvKj4+cHJlZml4ZXMqLwogICAgTW9kZXJuaXpyLl9wcmVmaXhlcyAgICAgPSBwcmVmaXhlczsKICAgIC8qPj5wcmVmaXhlcyovCiAgICAvKj4+ZG9tcHJlZml4ZXMqLwogICAgTW9kZXJuaXpyLl9kb21QcmVmaXhlcyAgPSBkb21QcmVmaXhlczsKICAgIE1vZGVybml6ci5fY3Nzb21QcmVmaXhlcyAgPSBjc3NvbVByZWZpeGVzOwogICAgLyo+PmRvbXByZWZpeGVzKi8KCiAgICAvKj4+bXEqLwogICAgLy8gTW9kZXJuaXpyLm1xIHRlc3RzIGEgZ2l2ZW4gbWVkaWEgcXVlcnksIGxpdmUgYWdhaW5zdCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgd2luZG93CiAgICAvLyBBIGZldyBpbXBvcnRhbnQgbm90ZXM6CiAgICAvLyAgICogSWYgYSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgbWVkaWEgcXVlcmllcyBhdCBhbGwgKGVnLiBvbGRJRSkgdGhlIG1xKCkgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlCiAgICAvLyAgICogQSBtYXgtd2lkdGggb3Igb3JpZW50YXRpb24gcXVlcnkgd2lsbCBiZSBldmFsdWF0ZWQgYWdhaW5zdCB0aGUgY3VycmVudCBzdGF0ZSwgd2hpY2ggbWF5IGNoYW5nZSBsYXRlci4KICAgIC8vICAgKiBZb3UgbXVzdCBzcGVjaWZ5IHZhbHVlcy4gRWcuIElmIHlvdSBhcmUgdGVzdGluZyBzdXBwb3J0IGZvciB0aGUgbWluLXdpZHRoIG1lZGlhIHF1ZXJ5IHVzZToKICAgIC8vICAgICAgIE1vZGVybml6ci5tcSgnKG1pbi13aWR0aDowKScpCiAgICAvLyB1c2FnZToKICAgIC8vIE1vZGVybml6ci5tcSgnb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY4KScpCiAgICBNb2Rlcm5penIubXEgICAgICAgICAgICA9IHRlc3RNZWRpYVF1ZXJ5OwogICAgLyo+Pm1xKi8KCiAgICAvKj4+aGFzZXZlbnQqLwogICAgLy8gTW9kZXJuaXpyLmhhc0V2ZW50KCkgZGV0ZWN0cyBzdXBwb3J0IGZvciBhIGdpdmVuIGV2ZW50LCB3aXRoIGFuIG9wdGlvbmFsIGVsZW1lbnQgdG8gdGVzdCBvbgogICAgLy8gTW9kZXJuaXpyLmhhc0V2ZW50KCdnZXN0dXJlc3RhcnQnLCBlbGVtKQogICAgTW9kZXJuaXpyLmhhc0V2ZW50ICAgICAgPSBpc0V2ZW50U3VwcG9ydGVkOwogICAgLyo+Pmhhc2V2ZW50Ki8KCiAgICAvKj4+dGVzdHByb3AqLwogICAgLy8gTW9kZXJuaXpyLnRlc3RQcm9wKCkgaW52ZXN0aWdhdGVzIHdoZXRoZXIgYSBnaXZlbiBzdHlsZSBwcm9wZXJ0eSBpcyByZWNvZ25pemVkCiAgICAvLyBOb3RlIHRoYXQgdGhlIHByb3BlcnR5IG5hbWVzIG11c3QgYmUgcHJvdmlkZWQgaW4gdGhlIGNhbWVsQ2FzZSB2YXJpYW50LgogICAgLy8gTW9kZXJuaXpyLnRlc3RQcm9wKCdwb2ludGVyRXZlbnRzJykKICAgIE1vZGVybml6ci50ZXN0UHJvcCAgICAgID0gZnVuY3Rpb24ocHJvcCl7CiAgICAgICAgcmV0dXJuIHRlc3RQcm9wcyhbcHJvcF0pOwogICAgfTsKICAgIC8qPj50ZXN0cHJvcCovCgogICAgLyo+PnRlc3RhbGxwcm9wcyovCiAgICAvLyBNb2Rlcm5penIudGVzdEFsbFByb3BzKCkgaW52ZXN0aWdhdGVzIHdoZXRoZXIgYSBnaXZlbiBzdHlsZSBwcm9wZXJ0eSwKICAgIC8vICAgb3IgYW55IG9mIGl0cyB2ZW5kb3ItcHJlZml4ZWQgdmFyaWFudHMsIGlzIHJlY29nbml6ZWQKICAgIC8vIE5vdGUgdGhhdCB0aGUgcHJvcGVydHkgbmFtZXMgbXVzdCBiZSBwcm92aWRlZCBpbiB0aGUgY2FtZWxDYXNlIHZhcmlhbnQuCiAgICAvLyBNb2Rlcm5penIudGVzdEFsbFByb3BzKCdib3hTaXppbmcnKQogICAgTW9kZXJuaXpyLnRlc3RBbGxQcm9wcyAgPSB0ZXN0UHJvcHNBbGw7CiAgICAvKj4+dGVzdGFsbHByb3BzKi8KCgogICAgLyo+PnRlc3RzdHlsZXMqLwogICAgLy8gTW9kZXJuaXpyLnRlc3RTdHlsZXMoKSBhbGxvd3MgeW91IHRvIGFkZCBjdXN0b20gc3R5bGVzIHRvIHRoZSBkb2N1bWVudCBhbmQgdGVzdCBhbiBlbGVtZW50IGFmdGVyd2FyZHMKICAgIC8vIE1vZGVybml6ci50ZXN0U3R5bGVzKCcjbW9kZXJuaXpyIHsgcG9zaXRpb246YWJzb2x1dGUgfScsIGZ1bmN0aW9uKGVsZW0sIHJ1bGUpeyAuLi4gfSkKICAgIE1vZGVybml6ci50ZXN0U3R5bGVzICAgID0gaW5qZWN0RWxlbWVudFdpdGhTdHlsZXM7CiAgICAvKj4+dGVzdHN0eWxlcyovCgoKICAgIC8qPj5wcmVmaXhlZCovCiAgICAvLyBNb2Rlcm5penIucHJlZml4ZWQoKSByZXR1cm5zIHRoZSBwcmVmaXhlZCBvciBub25wcmVmaXhlZCBwcm9wZXJ0eSBuYW1lIHZhcmlhbnQgb2YgeW91ciBpbnB1dAogICAgLy8gTW9kZXJuaXpyLnByZWZpeGVkKCdib3hTaXppbmcnKSAvLyAnTW96Qm94U2l6aW5nJwoKICAgIC8vIFByb3BlcnRpZXMgbXVzdCBiZSBwYXNzZWQgYXMgZG9tLXN0eWxlIGNhbWVsY2FzZSwgcmF0aGVyIHRoYW4gYGJveC1zaXppbmdgIGh5cGVudGF0ZWQgc3R5bGUuCiAgICAvLyBSZXR1cm4gdmFsdWVzIHdpbGwgYWxzbyBiZSB0aGUgY2FtZWxDYXNlIHZhcmlhbnQsIGlmIHlvdSBuZWVkIHRvIHRyYW5zbGF0ZSB0aGF0IHRvIGh5cGVuYXRlZCBzdHlsZSB1c2U6CiAgICAvLwogICAgLy8gICAgIHN0ci5yZXBsYWNlKC8oW0EtWl0pL2csIGZ1bmN0aW9uKHN0cixtMSl7IHJldHVybiAnLScgKyBtMS50b0xvd2VyQ2FzZSgpOyB9KS5yZXBsYWNlKC9ebXMtLywnLW1zLScpOwoKICAgIC8vIElmIHlvdSdyZSB0cnlpbmcgdG8gYXNjZXJ0YWluIHdoaWNoIHRyYW5zaXRpb24gZW5kIGV2ZW50IHRvIGJpbmQgdG8sIHlvdSBtaWdodCBkbyBzb21ldGhpbmcgbGlrZS4uLgogICAgLy8KICAgIC8vICAgICB2YXIgdHJhbnNFbmRFdmVudE5hbWVzID0gewogICAgLy8gICAgICAgJ1dlYmtpdFRyYW5zaXRpb24nIDogJ3dlYmtpdFRyYW5zaXRpb25FbmQnLAogICAgLy8gICAgICAgJ01velRyYW5zaXRpb24nICAgIDogJ3RyYW5zaXRpb25lbmQnLAogICAgLy8gICAgICAgJ09UcmFuc2l0aW9uJyAgICAgIDogJ29UcmFuc2l0aW9uRW5kJywKICAgIC8vICAgICAgICdtc1RyYW5zaXRpb24nICAgICA6ICdNU1RyYW5zaXRpb25FbmQnLAogICAgLy8gICAgICAgJ3RyYW5zaXRpb24nICAgICAgIDogJ3RyYW5zaXRpb25lbmQnCiAgICAvLyAgICAgfSwKICAgIC8vICAgICB0cmFuc0VuZEV2ZW50TmFtZSA9IHRyYW5zRW5kRXZlbnROYW1lc1sgTW9kZXJuaXpyLnByZWZpeGVkKCd0cmFuc2l0aW9uJykgXTsKCiAgICBNb2Rlcm5penIucHJlZml4ZWQgICAgICA9IGZ1bmN0aW9uKHByb3AsIG9iaiwgZWxlbSl7CiAgICAgIGlmKCFvYmopIHsKICAgICAgICByZXR1cm4gdGVzdFByb3BzQWxsKHByb3AsICdwZngnKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBUZXN0aW5nIERPTSBwcm9wZXJ0eSBlLmcuIE1vZGVybml6ci5wcmVmaXhlZCgncmVxdWVzdEFuaW1hdGlvbkZyYW1lJywgd2luZG93KSAvLyAnbW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lJwogICAgICAgIHJldHVybiB0ZXN0UHJvcHNBbGwocHJvcCwgb2JqLCBlbGVtKTsKICAgICAgfQogICAgfTsKICAgIC8qPj5wcmVmaXhlZCovCgoKICAgIC8qPj5jc3NjbGFzc2VzKi8KICAgIC8vIFJlbW92ZSAibm8tanMiIGNsYXNzIGZyb20gPGh0bWw+IGVsZW1lbnQsIGlmIGl0IGV4aXN0czoKICAgIGRvY0VsZW1lbnQuY2xhc3NOYW1lID0gZG9jRWxlbWVudC5jbGFzc05hbWUucmVwbGFjZSgvKF58XHMpbm8tanMoXHN8JCkvLCAnJDEkMicpICsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIG5ldyBjbGFzc2VzIHRvIHRoZSA8aHRtbD4gZWxlbWVudC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbmFibGVDbGFzc2VzID8gJyBqcyAnICsgY2xhc3Nlcy5qb2luKCcgJykgOiAnJyk7CiAgICAvKj4+Y3NzY2xhc3NlcyovCgogICAgcmV0dXJuIE1vZGVybml6cjsKCn0pKHRoaXMsIHRoaXMuZG9jdW1lbnQpOwoKCgokKGRvY3VtZW50KS5mb3VuZGF0aW9uKCk7CgoKICAvLyB0d2VldCBpdCBmb3JtCiAgJCgnZm9ybSN0d2VldCcpLnN1Ym1pdChmdW5jdGlvbihldmVudCkgewogICAgd2luZG93Lm9wZW4oJCh0aGlzKS5hdHRyKCdhY3Rpb24nKSArICc/JyArICQodGhpcykuc2VyaWFsaXplKCksICdfYmxhbmsnLCAnc2Nyb2xsYmFycz1ubyxtZW51YmFyPW5vLGhlaWdodD00MDAsd2lkdGg9NTAwLHJlc2l6YWJsZT15ZXMsdG9vbGJhcj1ubyxzdGF0dXM9bm8nKTsKICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgfSk7CiAKICAvLyBzdWJzdGl0dXRlIEAyeCBpbWFnZXMgd2hlcmUgYXZhaWxhYmxlCiAgaWYgKHdpbmRvdy5pc1JldGluYSgpKSB7CiAgICBjb25zb2xlLmxvZygibG9hZGluZyByZXRpbmEgaW1hZ2VzLi4iKTsKICAgIHZhciByZXBsYWNlbWVudDsKICAgICQoJ2ltZ1tkYXRhLTJ4XScpLmVhY2goZnVuY3Rpb24oaSwgaW1nKSB7CiAgICAgIHJlcGxhY2VtZW50ID0gJChpbWcpLmNsb25lKCkuYXR0cignc3JjJywgJChpbWcpLmRhdGEoJzJ4JykpIHx8IGltZzsKICAgICAgLy8gb25seSByZXBsYWNlIG9uY2UgdGhlIHJlcGxhY2VtZW50IGlzIGxvYWRlZAogICAgICByZXBsYWNlbWVudC5sb2FkKGZ1bmN0aW9uKCkgewogICAgICAgICQoaW1nKS5yZXBsYWNlV2l0aCgkKHRoaXMpKTsKICAgICAgfSk7CiAgICB9KTsKICB9CgogIGlmICh3aW5kb3cuaXNMaW51eDY0KSB7CiAgICAkKCdhW2RhdGEteDY0LWhyZWZdJykuZWFjaChmdW5jdGlvbihpKSB7CiAgICAgICQodGhpcykuYXR0cignaHJlZicsICQodGhpcykuZGF0YSgneDY0LWhyZWYnKSk7CiAgICB9KTsKICB9CgogICQoJ2FbZGF0YS1kZWxheWVkLWhyZWZdJykuY2xpY2soZnVuY3Rpb24oZXZlbnQpIHsKICAgIHdpbmRvdy5vcGVuKCQodGhpcykuZGF0YSgnZGVsYXllZC1ocmVmJyksICdfYmxhbmsnKTsKICAgIHdpbmRvdy5sb2NhdGlvbiA9ICQodGhpcykuYXR0cignaHJlZicpOwogICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICB9KTsKCiAgLy8gRkFRIGFjY29yZGlvbnMKICB2YXIgcGFuZWxzID0gJCgnZGwuYWNjb3JkaW9uID4gZGQnKS5oaWRlKCk7CiAgdmFyIGRyYXdzID0gJCgnZGwuYWNjb3JkaW9uID4gZHQnKS5jc3MoJ2N1cnNvcicsICdwb2ludGVyJyk7CiAgZHJhd3MuY2xpY2soZnVuY3Rpb24oKSB7CiAgICBwYW5lbHMuc2xpZGVVcCgpOwogICAgdmFyIG5leHQgPSAkKHRoaXMpLm5leHQoKQogICAgaWYgKG5leHQuaXMoJzpoaWRkZW4nKSkKICAgICAgbmV4dC5zbGlkZURvd24oKTsKICAgIHJldHVybiBmYWxzZTsKICB9KTsKCiAgLy8gU2hvdyBzZWN0aW9uIGlmIGFuY2hvciBwcm92aWRlZAogIHZhciBhbmNob3IgPSB3aW5kb3cubG9jYXRpb24uaGFzaDsKICBpZihhbmNob3IgIT09ICcnKXsKICAgICQoJ2RsLmFjY29yZGlvbiA+IGRkJyArIGFuY2hvcikuc2hvdygpOwogIH0KfSk7CgpmdW5jdGlvbiB0cnVuY2F0ZSh0ZXh0LCBsZW5ndGgpIHsKICBsZW5ndGggPSBsZW5ndGggfHwgMTAwOwogIHJldHVybiAkLnRyaW0oc3RyaXAodGV4dCkpLnN1YnN0cmluZygwLCBsZW5ndGgpLnRyaW0odGhpcykgKyAiLi4uIjsKfQoKZnVuY3Rpb24gc3RyaXAoaHRtbCkgewogICB2YXIgdG1wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7CiAgIHRtcC5pbm5lckhUTUwgPSBodG1sOwogICByZXR1cm4gdG1wLnRleHRDb250ZW50IHx8IHRtcC5pbm5lclRleHQgfHwgIiI7Cn0KCi8vIFJldGluYSBkZXRlY3Rpb24Kd2luZG93LmlzUmV0aW5hID0gZnVuY3Rpb24oKSB7CiAgdmFyIG1lZGlhUXVlcnkgPSAiKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMS41KSxcCiAgICAgICAgICAgICAgICAgICAgKG1pbi0tbW96LWRldmljZS1waXhlbC1yYXRpbzogMS41KSxcCiAgICAgICAgICAgICAgICAgICAgKC1vLW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDMvMiksXAogICAgICAgICAgICAgICAgICAgIChtaW4tcmVzb2x1dGlvbjogMS41ZHBweCkiOwoKICByZXR1cm4gd2luZG93LmRldmljZVBpeGVsUmF0aW8gPiAxIHx8ICh3aW5kb3cubWF0Y2hNZWRpYSAmJiB3aW5kb3cubWF0Y2hNZWRpYShtZWRpYVF1ZXJ5KS5tYXRjaGVzKQp9CgovLyBMaW51eCB4NjQgZGV0ZWN0aW9uCndpbmRvdy5pc0xpbnV4NjQgPSBmdW5jdGlvbigpIHsKICByZXR1cm4gd2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybS5zdWJzdHIoMCwgNSkgPT0gIkxpbnV4IiAmJiB3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLnN1YnN0cigtMiwyKSA9PSAiNjQiOwp9CjsK"}},"time_used":607,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":601,"receive":6,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"detran-go-emissao-gov.site/dashboard/images/fastly-logo.png","fqdn":"detran-go-emissao-gov.site","domain":"detran-go-emissao-gov.site","tld":"site"},"ip":{"addr":"172.67.152.179","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"img","requested_by":"https://detran-go-emissao-gov.site/dashboard/","date":"2026-07-27T14:06:09.581Z","timestamp":1785161169581,"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":"detran-go-emissao-gov.site","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Sun, 26 Jul 2026 14:27:30 GMT","end":"Sat, 24 Oct 2026 15:26:12 GMT"},"fingerprint":{"sha1":"33:BD:B0:00:D4:4F:09:5C:59:02:3B:55:1C:94:52:31:7F:BD:F6:AE","sha256":"F4:70:53:78:85:5E:A4:5C:81:1D:85:52:5D:63:D9:95:2D:9A:2E:D2:93:00:F8:AC:EA:E4:AC:0B:59:BC:2A:A0"}}},"request":{"raw":"GET /dashboard/images/fastly-logo.png HTTP/1.1\r\nHost: detran-go-emissao-gov.site\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://detran-go-emissao-gov.site/dashboard/\r\nSec-Fetch-Dest: image\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\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\ndate: Mon, 27 Jul 2026 14:06:10 GMT\r\nserver: cloudflare\r\nlast-modified: Tue, 22 Nov 2022 15:37:06 GMT\r\netag: \"6ea-5ee10f1baec80\"\r\naccept-ranges: bytes\r\npriority: u=5,i\r\nserver-timing: cfExtPri\r\nreport-to: {\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=OgCIDVlSqRTSB0gt7%2BkjSKyNlNN29KmijySdYq35jM5exajVoCGlz4SaKKaJTSLz8Dvq9r5vfXUDvFv5LINxOtQRFwrTe62j2HfUwR75zW7qqJ4xQK%2BFFCm2p3rYWUUVVeGkSzbuuDix0n4Cow%3D%3D\"}]}\r\ncontent-type: image/png\r\ncache-control: max-age=14400\r\ncf-cache-status: REVALIDATED\r\nnel: {\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}\r\ncf-ray: a21c33fdedcb7131-OSL\r\nalt-svc: h3=\":443\"; ma=86400\r\ncontent-length: 1770\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":1770,"size_decoded":2485,"mime_type":"image/png","magic":"PNG image data, 48 x 19, 8-bit/color RGBA, non-interlaced","md5":"b9b0f486080438e47a0901e597d0ded8","sha1":"08360cb5849187fd585847a75a56e4519e5c7c77","sha256":"ce826facd2ee6f8e94edd9a72fc0b543ca77a41ce1f648729f2438b47ac4500b","sha512":"87df1e8dd89aaf9fe8c7650dfae0b14fcc0f1f5b954e6d1d0ea76a46c396a00d78914e5a0f2160bf58beba78d9bf229bcd6ad4382d977d4c43be1cf0612a78ba","ssdeep":"","tlshash":"1031e95eef512e068bdaa8c131f90232c652cc809ee0fd666085c86905c32f55d5caca","first_seen":"2023-05-08T16:45:43Z","last_seen":"2026-07-27T14:06:48.03025Z","times_seen":773,"resource_available":false,"data":"iVBORw0KGgoAAAANSUhEUgAAADAAAAATCAYAAADWOo4fAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEMjBGMzZFMUNDRjkxMUU0QUVBQ0ZCNTY0ODdDQkMxRiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEMjBGMzZFMkNDRjkxMUU0QUVBQ0ZCNTY0ODdDQkMxRiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjI0M0U4RkNBQ0NGOTExRTRBRUFDRkI1NjQ4N0NCQzFGIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkQyMEYzNkUwQ0NGOTExRTRBRUFDRkI1NjQ4N0NCQzFGIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+hkyFOgAAA1xJREFUeNrUl1tIFGEUxx0vuJaVJrVkZUVRagqJFSVFF7QeIimKpEDISxRBl+eCAh/rKUryQbJeSiSKqIh6CFKSLppBQqIWQaWbkeZ919Wd/qf+Xx0H1kVayA78mJkz323Ody7fWLZtR/zPEh1EPx1YYBiMhXGuGUAs1gcCIBLM5FwDwD/ZQSMdz3PBTdAC2kFVGI21juO+Am7qkkAj9Tnh2IFCsIf3PhIuiaWBfGreKJAMXOSvP2ABry/BLtCr3sWAU2A2uATaJjmXCTY/3cfo/Fx8IJwx0EG0xIEDYDm4RjdYRX9+pha4mIaQsbuBB3Q5xvKHbV8lC5HT4JP9S3pAPSjgu8Og3f4jHtDC+zZggWhwGQzZ46WfY6/l8xhoBJXADXqpzwEnwVPwhNSCFI5bR51cb4EYWZvegWwwR2WhVLrNUVDucAW3CsQR6raBI9TVgFaQArYz05gdkoyzFPQ4XCvA+dezTQR3L4ZxskGt4fXvNmoHXKCC1ngI4kEa8FL3iFZKBWUgQH0z+x/nczdIUuPGgViwhe8HwArqZQf6qM+lVXeqncrl7iaC99SXg2lmfJ1GvcT4qOTlPGYPsUQBqGfAnQfVDm9s4jURNIArYD8t61Mp29SBYUd/i/PeB81sv4/txfpLWJMqwFCwOhCpBhNZqIK6h0Gbz4976+hXB86CQQZyEbjOjDZPGcekz2ASUPVnL5gFivlcC95MVMic8pHX+Sw64ntltEqWsqhJgfIug4uXHfgKMkGp4wNGQsx7A/RzN2W3N1NfGaoSm8I1yus96tys0FvBGg66WxUoOSLE0/IfwFVQwmsE+4+perKMBtEyoO47wR3eHwIJ4DO4O1EaLWJ6E3nHlCb6E3ZokXRbyvsmUA1uqwAtAcmqvZdzLQLfqZM+q9V6NjnmOEd9OshgcI/7gOeODp2mEShWeV+kAzxWz/I+jxlpVOnlvoZZQ8aqUu+/gWz1ASLH1Hos1iIzThr1hTR2lDxb6jidyW0NMIgHedAyDVysDS7meKmyGxmQrQx0i/HiZuXu4jstK+kSX+gWWXQri4c6j2orLryDrpNPXQJdv/tntpmC/wPpPG8dZBzZPMm+mMxZ6F+J7O4DVnAjZ4Itfip+QBzT7TBd8gK4OFGHHwIMAFU7QR6Sr0lJAAAAAElFTkSuQmCC"}},"time_used":606,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":606,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"detran-go-emissao-gov.site/dashboard/images/social-icons.png","fqdn":"detran-go-emissao-gov.site","domain":"detran-go-emissao-gov.site","tld":"site"},"ip":{"addr":"172.67.152.179","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"img","requested_by":"https://detran-go-emissao-gov.site/dashboard/","date":"2026-07-27T14:06:10.265Z","timestamp":1785161170265,"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":"detran-go-emissao-gov.site","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Sun, 26 Jul 2026 14:27:30 GMT","end":"Sat, 24 Oct 2026 15:26:12 GMT"},"fingerprint":{"sha1":"33:BD:B0:00:D4:4F:09:5C:59:02:3B:55:1C:94:52:31:7F:BD:F6:AE","sha256":"F4:70:53:78:85:5E:A4:5C:81:1D:85:52:5D:63:D9:95:2D:9A:2E:D2:93:00:F8:AC:EA:E4:AC:0B:59:BC:2A:A0"}}},"request":{"raw":"GET /dashboard/images/social-icons.png HTTP/1.1\r\nHost: detran-go-emissao-gov.site\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://detran-go-emissao-gov.site/dashboard/stylesheets/all.css\r\nSec-Fetch-Dest: image\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=4, 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\ndate: Mon, 27 Jul 2026 14:06:10 GMT\r\nserver: cloudflare\r\nlast-modified: Tue, 22 Nov 2022 15:37:07 GMT\r\netag: \"d21-5ee10f1ca2ec0\"\r\naccept-ranges: bytes\r\npriority: u=4,i\r\nserver-timing: cfExtPri\r\nreport-to: {\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=bphjvYT%2FlX%2Fs2Fin%2BybEKSQIo%2BcqQTQvcdZsrwNHxBUGh4Wc2gBAghAKkuTCgBqNb3KnxdhUe%2FH0iYbwXJ4XDEXz3t%2B8e9F0BytXAQbvNaNlWNU5d%2FrrjmqKQKA76b%2BpceQZvyEljd0Asn3wFg%3D%3D\"}]}\r\ncontent-type: image/png\r\ncache-control: max-age=14400\r\ncf-cache-status: REVALIDATED\r\nnel: {\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}\r\ncf-ray: a21c34022e047131-OSL\r\nalt-svc: h3=\":443\"; ma=86400\r\ncontent-length: 3361\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":3361,"size_decoded":4088,"mime_type":"image/png","magic":"PNG image data, 75 x 25, 8-bit/color RGBA, non-interlaced","md5":"059948fd70b704766312bac33debdc53","sha1":"003b4edaeb7d73eb235d74b391b1d7599e7d341e","sha256":"5877c306e97839d8d50872cf8b94105362fe1e7fe7432d2536e916950769b486","sha512":"3f256faedd5e49eabe742c999005b06a22aba01455905e13f9caec0608162cd68c99fced4a0def079377e5f7e07770026df02789b70d264159bf19a1c3a2474a","ssdeep":"","tlshash":"fb612a5cdaf55962aa88d8d104ae403f8a264b80dad8d4ff748b48c448529b6945a1fb","first_seen":"2023-05-08T16:45:43Z","last_seen":"2026-07-27T14:06:48.031143Z","times_seen":772,"resource_available":false,"data":"iVBORw0KGgoAAAANSUhEUgAAAEsAAAAZCAYAAAB5CNMWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjVCMURBRTBBNUFEMTExRTNCRDA2RUYzMURENDFGRDJBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjVCMURBRTBCNUFEMTExRTNCRDA2RUYzMURENDFGRDJBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NUIxREFFMDg1QUQxMTFFM0JEMDZFRjMxREQ0MUZEMkEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NUIxREFFMDk1QUQxMTFFM0JEMDZFRjMxREQ0MUZEMkEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6gJWBtAAAJlElEQVR42txZCWwU1xn+ZnZn79ve9Xp9gDnCYXADJdDShIRWaaENjQi0gKKkuaOoggqRVApNFVIlUQNqQukFUZtEBbWChgANhFQpSqGlQAgUwuUzOBjW93p37T1nZ6b/e2sbtj4AG0ekvzS2ZufNvPm//f7v/95b4cGtdUEANoxcdNXt/AAjPcdb4TdGfA49/SnEyIb9RjxEEHLPNe3Gz3G1PBhYnSM8WedQExIIIY1Q6YqnEU+koWpZ0ERRgNthhkHSQVW1y3MIgp2hqGVkIKOALoLOchBn92t0j2A0QtBLfVAfLA89btLQ6UTECKTm9i6MK81DxQQ/B0dRNCRTMhpbO5GSFehEoRcIpaMdSmcUok4HwWAEJEpPRwfDQ1PB0NZUBaLdAdFshZZOXclV9pBB3+mmBIsxp7MryRn19KN34P57voR8tzVnzCM/2Y5/flwPf76NkyNdXwdzeQU89yyGYep0SG4PCFnI8VgvWJI7DzCYkG4OonX9i0jVVEJH49R0GnKwAXqLFfqCQqiZzLWBJXRjfLWYPcqG24qtMOpFnGlO4L2qMH/pyQVmBKNphBPKkMHKZFR0RJN4ZdW38P1vV/TPPDFboj3hfWwFvCt/iraqarQcOQjB7kTRwvtgvuKejsP/ghZqQ+LgPg6uaLdD6YpC7/HC9+IvEaupRnT3NkhmMzRBvDpYPpuEaQEL3q+ODJjM1wioR2/z9pZAOQGUb9UjzUpEVjlYwxHy1o4Y5swYPSBQWfaJTJJ6w/PwD3HxrztxYcWDsFBWMgF+ad0LmLBxC/wVU4lYKtI1Z9G48kkYSwKQAiX0ENK8WDvEEhuc9y5FurISiS2vw8DBEvroWR+wip0GLLs1D367hLeOtfV5yQIC84lZvj6ff32sg///qCEGl0k/ZGax94snZNwxoyzn82BLFG++c5xYp0Ai7WpojMDtNPWWQToWR9ura+B0OyAVlYIID1tdNWoeWwLrngOwe/NR8MATUM/XILzjT1CTCSihdmTaWqBzZN9dbgoiHbwEWZWhkeZJXj800r+eb6UPWLF0Nsm5lHyJy4AdpztwmsqsJyb5zAMmmiBWfRpKoj2eGTKzWGkxcXc7TDmfb9j8b7yycT+Ki1z8vNBrh91ipKaXTSRFIMjhDsCVDyWZ5oJiGjMBlhPH0PCbVzF5zct8nGvhMoS3b4aU54V99l3IhNshFZbwa2afD/n3LYXV44FCupU4e4o3AUGv7x+sytYkzrUkOCjj8kx45s5C1LWncDwYQ21bEgGHNGCiNXR9b1Vk+J4KvHHlRFs4jrJRHhT7Hbyxscs9QHULHZ1r3DLoIEIgiWAMlQoCSBz6EKl4AkYL2Y3iUQSADOus2+FbtSZnDvfkKXBv/HMWfDrOLbgL5mgzdJ78/sFiZcYAG+02wixlRW5snpEfV4tkRhuiTmXbSrClE4kk2YJgBJHOZM6YCAn++YYQ1yI9MS/gcxADhR6fBclPXYzsQDqZgkSiJbB6pvLRmyzIkKVIXqiHceIkmkyE3leA2MljuLR9K9JUigaXG0XfW4bYpYtoevcdmOg8Fg5DlJPQWW0Da5bNKGJhuRuKev2Jt8bkIYElExuYXfjBwunwkkVg3urL5UU5Y5bMr8DUW/zI91gRJ0uxZ38lYsQc5r1YmPwk2qPGIkKd0FZm57aBm1piH9M5oVusU2QR0sQsta4KsedXQCbNMk2YwsGKVFWi+dkfwVlAtsNogjUQAMhOaIrSP1is5A6c78Scsus39Scb40MCK03mUiJFXvXQ7bBaDP2OWTxvyuWKo3Lbte8sv68HLK5ji5YhuHsPDEUyNToqRWKREgpTKRbANv4WPubSxvVIRcgujC6D2eWBwWKBoaSUXzMWBmAZRYffD1XUZ3uHcrlRif292B+OtuLvtVFuBa41WrpkVLUmh1GGQHv42sA+U9uMMJXplUCxKFl6P3wLvoumw6eQCEeRaG1FR3Ujih9fDpFE+sKGtWja9TZ0JOiMbTKrHub0lQzCpz9B+9EjEKlsmcfqL3NxMJE16IRrTnjrJ6FhdUAusE7zNY0PEagMLKZdvXoZys4/e9suTFr9NBd/WZYx6ecvoPSBR/DphnWo+tlz1PlKoVJ2bNnEzC8cLijhEBqeXILkpnWw5OdBE8XrW+6wUpzoNaHIabjqy398McaPoQZjCNOslzb+Ay6yDC2kWUvJkM6sKOkd88dd/8HJykYUFThwqqoZeS4Lv6cn9i9dhJLFyxCYNx8VL61D2UOPQ0fm0lJcggtb3sTpZ38M58QJVGtkN+QM+SeBc0VmHZWYbTEbIJCnYt/bQGvrAcGq70hh9d8u4u7xTjKpHuiE/lnGNO63h1uGZRUkvY53w7+8T+WTynbD8nEFOWC9++E5vL33FIoKnXDaTPCS0HNmdEe8qRnHn38Op3+xFkaPC3O37YS9W6dqf7+JOoAJgoXdkyHDSnrG1tWCRgxTqUQFWnibssvoQXYh+rUObrOO24ZRZB+m09JHHACoQ5914fWPWqBqw8KqtwyZ0WQva6Bv2G7NtSoFeTaMKfFwZrH5rgSK64nTBbPNASUeR2f9Z5BjXZeF/95FOLn/CCz0mcFsoU6vZsU/SypyGNQ12daPMPi6uA9YFoOIb4xzYmaJtf/EmMA2JfBBbQQngnHc6NAGWcgPdk2V00hQ55O7uhBNqqjeshm+r8zOrjpWPoNkYxC1G9bDOW40zG5y6KrCgWKAicQwQdS4kRW06wDrfCiFHWdCOEsuvojceh4ZPD09JENfZwet92rbk3yXIZJUcDNFurMT+bdOQ/606TDQcsVRNibn+rS1r5H/GoOza1Zzl28t8GYZRvArpOci5acSevpB2NWvZgWjMj++SDF/9164p81A69HDXL9SHSGc+d2vkVc+Ff45d/Ix459aDmvpaJx46mEOrtFqzQo621ElHWNyoAnCF2vzb0gbhnoJ782/G82HD9FCOsnpoZKh1JOwB2bNxFfX/wrOKRUIfGcBOpevRM26lyFRA9B0WSYxHWTHYPul/zdg7V0wH7GWNliLi7kF6Am2e3Bh3wHEvjkX8/YfhHX8RARI8Ovf2IRMPAadzdprFzizCKqBwBI/h19G7J/HHKqgs9vHjs0Biu+oknN3TZmESGMI59Zmt2lMRcUw+vzIpJK9IKkMKC27VT/YrzuNI/17W88a/Xr24NnuQziavGI9qOaY0P+dIwUJBlWxCTqhLzc0BZbCPMTqz3O3TtaeQNTR+k/gdoHfkTVZ3b8G9TtP138FGAAf4wdELH4hqAAAAABJRU5ErkJggg=="}},"time_used":626,"timings":{"blocked":0,"dns":0,"connect":0,"send":0,"wait":626,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}}]}
