diff --git a/docs/categories/all.html b/docs/categories/all.html
index 5dd1da4a..ea7a5c04 100644
--- a/docs/categories/all.html
+++ b/docs/categories/all.html
@@ -253,7 +253,7 @@
No
Yes |
Yes |
- 4470 |
+ 4471 |
@@ -353,7 +353,7 @@ Yes |
Yes |
No |
- 191 |
+ 192 |
@@ -376,7 +376,7 @@ Yes |
Yes |
Yes |
- 5446 |
+ 5456 |
@@ -399,7 +399,7 @@ No |
Yes |
No |
- 1641 |
+ 1642 |
@@ -462,7 +462,7 @@ Yes |
Yes |
Yes |
- 23163 |
+ 23170 |
@@ -548,7 +548,7 @@ No |
Yes |
No |
- 657 |
+ 658 |
@@ -571,7 +571,7 @@ Yes |
Yes |
No |
- 1335 |
+ 1336 |
@@ -883,7 +883,7 @@ No |
Yes |
Yes |
- 21058 |
+ 21066 |
@@ -929,7 +929,7 @@ No |
Yes |
Yes |
- 2742 |
+ 2750 |
@@ -1406,7 +1406,7 @@ Yes |
Yes |
Yes |
- 4177 |
+ 4182 |
@@ -1429,7 +1429,7 @@ Yes |
Yes |
Yes |
- 1314 |
+ 1315 |
@@ -1560,7 +1560,7 @@ No |
Yes |
Yes |
- 3413 |
+ 3415 |
@@ -1606,7 +1606,7 @@ No |
Yes |
Yes |
- 885 |
+ 886 |
@@ -1675,7 +1675,7 @@ No |
Yes |
Yes |
- 8413 |
+ 8415 |
@@ -1721,7 +1721,7 @@ No |
Yes |
No |
- 1832 |
+ 1833 |
@@ -1807,7 +1807,7 @@ No |
Yes |
No |
- 1656 |
+ 1657 |
@@ -1853,7 +1853,7 @@ No |
Yes |
Yes |
- 4170 |
+ 4172 |
@@ -2050,7 +2050,7 @@ Yes |
Yes |
Yes |
- 890 |
+ 893 |
@@ -2094,7 +2094,7 @@ No |
Yes |
Yes |
- 866 |
+ 867 |
@@ -2161,7 +2161,7 @@ Yes |
Yes |
Yes |
- 775 |
+ 776 |
@@ -2203,7 +2203,7 @@ No |
Yes |
Yes |
- 116 |
+ 115 |
@@ -2442,7 +2442,7 @@ No |
Yes |
Yes |
- 1370 |
+ 1371 |
@@ -2662,7 +2662,7 @@ No |
Yes |
Yes |
- 6663 |
+ 6665 |
@@ -2708,7 +2708,7 @@ No |
Yes |
Yes |
- 16843 |
+ 16844 |
@@ -2729,7 +2729,7 @@ No |
Yes |
Yes |
- 4569 |
+ 4570 |
@@ -3052,7 +3052,7 @@ Yes |
Yes |
Yes |
- 1132 |
+ 1131 |
@@ -3231,7 +3231,7 @@ No |
Yes |
No |
- 4982 |
+ 4984 |
@@ -3367,7 +3367,7 @@ Yes |
Yes |
No |
- 3873 |
+ 3874 |
@@ -3390,7 +3390,7 @@ No |
Yes |
No |
- 4057 |
+ 4061 |
@@ -3436,7 +3436,7 @@ Yes |
Yes |
No |
- 733 |
+ 734 |
@@ -3589,7 +3589,7 @@ No |
Yes |
Yes |
- 12411 |
+ 12420 |
@@ -3830,7 +3830,7 @@ No |
Yes |
No |
- 28026 |
+ 28034 |
@@ -3982,7 +3982,7 @@ Yes |
Yes |
No |
- 1230 |
+ 1231 |
@@ -4005,7 +4005,7 @@ Yes |
Yes |
Yes |
- 1681 |
+ 1683 |
@@ -4097,7 +4097,7 @@ Yes |
Yes |
No |
- 1098 |
+ 1099 |
@@ -4277,7 +4277,7 @@ Yes |
Yes |
Yes |
- 95 |
+ 96 |
@@ -4321,7 +4321,7 @@ Yes |
Yes |
Yes |
- 538 |
+ 539 |
@@ -4849,7 +4849,7 @@ Yes |
Yes |
Yes |
- 2534 |
+ 2535 |
@@ -4916,7 +4916,7 @@ Yes |
Yes |
No |
- 1334 |
+ 1336 |
@@ -5073,7 +5073,7 @@ No |
Yes |
No |
- 733 |
+ 736 |
@@ -5096,7 +5096,7 @@ Yes |
Yes |
No |
- 1794 |
+ 1797 |
@@ -5165,7 +5165,7 @@ Yes |
Yes |
No |
- 23 |
+ 24 |
@@ -5234,7 +5234,7 @@ No |
Yes |
No |
- 74774 |
+ 74807 |
@@ -5257,7 +5257,7 @@ Yes |
Yes |
No |
- 26213 |
+ 26216 |
@@ -5280,7 +5280,7 @@ Yes |
Yes |
No |
- 23163 |
+ 23170 |
@@ -5322,7 +5322,7 @@ No |
Yes |
No |
- 6195 |
+ 6196 |
@@ -5345,7 +5345,7 @@ No |
Yes |
No |
- 5800 |
+ 5805 |
@@ -5368,7 +5368,7 @@ Yes |
Yes |
Yes |
- 5351 |
+ 5363 |
@@ -5389,7 +5389,7 @@ No |
Yes |
No |
- 4038 |
+ 4039 |
@@ -5410,7 +5410,7 @@ No |
Yes |
No |
- 3808 |
+ 3810 |
@@ -5433,7 +5433,7 @@ No |
Yes |
No |
- 3225 |
+ 3227 |
@@ -5454,7 +5454,7 @@ No |
Yes |
No |
- 2671 |
+ 2675 |
@@ -5496,7 +5496,7 @@ No |
Yes |
No |
- 2268 |
+ 2269 |
@@ -5540,7 +5540,7 @@ No |
Yes |
No |
- 2187 |
+ 2190 |
@@ -5561,7 +5561,7 @@ No |
Yes |
No |
- 2059 |
+ 2060 |
@@ -5605,7 +5605,7 @@ No |
Yes |
No |
- 1397 |
+ 1399 |
@@ -5626,7 +5626,7 @@ No |
Yes |
No |
- 1379 |
+ 1380 |
@@ -5647,7 +5647,7 @@ No |
Yes |
No |
- 1251 |
+ 1255 |
@@ -5731,7 +5731,7 @@ No |
Yes |
No |
- 870 |
+ 885 |
@@ -5815,7 +5815,7 @@ No |
Yes |
No |
- 701 |
+ 702 |
@@ -5922,7 +5922,7 @@ Yes |
Yes |
No |
- 608 |
+ 609 |
@@ -5943,7 +5943,7 @@ No |
Yes |
No |
- 592 |
+ 593 |
@@ -6006,7 +6006,7 @@ No |
Yes |
No |
- 486 |
+ 488 |
@@ -6048,7 +6048,7 @@ No |
Yes |
No |
- 481 |
+ 483 |
@@ -6069,7 +6069,7 @@ No |
Yes |
No |
- 471 |
+ 472 |
@@ -6090,7 +6090,7 @@ No |
Yes |
No |
- 454 |
+ 455 |
@@ -6216,7 +6216,7 @@ No |
Yes |
No |
- 404 |
+ 405 |
@@ -6321,7 +6321,7 @@ No |
Yes |
No |
- 353 |
+ 355 |
@@ -6470,7 +6470,7 @@ No |
Yes |
No |
- 289 |
+ 290 |
@@ -6682,7 +6682,7 @@ No |
Yes |
No |
- 237 |
+ 240 |
@@ -6787,7 +6787,7 @@ No |
Yes |
No |
- 212 |
+ 213 |
@@ -6915,7 +6915,7 @@ No |
Yes |
No |
- 198 |
+ 199 |
@@ -6936,7 +6936,7 @@ No |
Yes |
No |
- 193 |
+ 194 |
@@ -7104,7 +7104,7 @@ No |
Yes |
No |
- 172 |
+ 173 |
@@ -7272,7 +7272,7 @@ Yes |
Yes |
No |
- 151 |
+ 152 |
@@ -7400,7 +7400,7 @@ No |
Yes |
No |
- 130 |
+ 137 |
@@ -7568,7 +7568,7 @@ No |
Yes |
No |
- 109 |
+ 110 |
@@ -7736,7 +7736,7 @@ No |
Yes |
No |
- 103 |
+ 102 |
@@ -8473,7 +8473,7 @@ No |
Yes |
No |
- 52 |
+ 53 |
@@ -9216,7 +9216,7 @@ No |
Yes |
No |
- 35 |
+ 34 |
@@ -9615,7 +9615,7 @@ No |
Yes |
No |
- 27 |
+ 28 |
@@ -9657,7 +9657,7 @@ No |
Yes |
No |
- 27 |
+ 28 |
@@ -13916,7 +13916,7 @@
swrlab |
- 🤝 SWR Audio Lab - Public Documentation and Principles |
+ 🤝 SWR Audio Lab |
No
|
@@ -16826,7 +16826,7 @@ No |
Yes |
No |
- 3 |
+ 4 |
@@ -19354,14 +19354,14 @@
- trust |
- Python-Client Python-Server OpenAPI generator in Rust, Web Integration Specification / Trust |
+ python-openapi-generator-rust |
+ Typesafe Python Client and Server OpenAPI generator written in Rust / Trust |
No
|
- Link
+ Link
|
Yes |
@@ -19370,7 +19370,7 @@ 1 |
-
+
@@ -24743,7 +24743,7 @@ Yes |
No |
No |
- 40 |
+ 41 |
@@ -24997,7 +24997,7 @@ No |
Yes |
Yes |
- 2743 |
+ 2748 |
@@ -26702,7 +26702,7 @@ Yes |
Yes |
Yes |
- 615 |
+ 616 |
@@ -26786,7 +26786,7 @@ No |
Yes |
No |
- 25483 |
+ 25500 |
@@ -30930,7 +30930,7 @@ No |
No |
No |
- 1370 |
+ 1371 |
@@ -31897,7 +31897,7 @@ No |
Yes |
No |
- 4913 |
+ 4914 |
@@ -31941,7 +31941,7 @@ No |
Yes |
Yes |
- 2549 |
+ 2550 |
@@ -33136,7 +33136,7 @@ Connexion (link)
|
Stars |
- 4470 |
+ 4471 |
Watchers |
@@ -33152,7 +33152,7 @@ Connexion (link)
Last Updated |
- 2024-08-19T23:34:53Z |
+ 2024-08-21T02:02:35Z |
Archived |
@@ -33391,7 +33391,7 @@ Rate My OpenAPI (link)
Stars |
- 191 |
+ 192 |
Watchers |
@@ -33407,7 +33407,7 @@ Rate My OpenAPI (link)
Last Updated |
- 2024-08-19T12:58:58Z |
+ 2024-08-20T14:55:48Z |
Archived |
@@ -33442,11 +33442,11 @@ Scalar (link)
Stars |
- 5446 |
+ 5456 |
Watchers |
- 20 |
+ 19 |
Forks |
@@ -33458,7 +33458,7 @@ Scalar (link)
Last Updated |
- 2024-08-20T03:14:38Z |
+ 2024-08-21T02:46:23Z |
Archived |
@@ -33493,7 +33493,7 @@ Scribe (link)
Stars |
- 1641 |
+ 1642 |
Watchers |
@@ -33501,7 +33501,7 @@ Scribe (link)
Forks |
- 289 |
+ 290 |
Created |
@@ -33509,7 +33509,7 @@ Scribe (link)
Last Updated |
- 2024-08-20T00:56:05Z |
+ 2024-08-20T17:49:29Z |
Archived |
@@ -33646,7 +33646,7 @@ ReDoc (link)
Stars |
- 23163 |
+ 23170 |
Watchers |
@@ -33662,7 +33662,7 @@ ReDoc (link)
Last Updated |
- 2024-08-20T01:50:55Z |
+ 2024-08-21T01:09:32Z |
Archived |
@@ -33850,7 +33850,7 @@ oasdiff (link)
Stars |
- 657 |
+ 658 |
Watchers |
@@ -33866,7 +33866,7 @@ oasdiff (link)
Last Updated |
- 2024-08-19T09:35:43Z |
+ 2024-08-20T10:55:33Z |
Archived |
@@ -33901,7 +33901,7 @@ optic diff (link)
Stars |
- 1335 |
+ 1336 |
Watchers |
@@ -33917,7 +33917,7 @@ optic diff (link)
Last Updated |
- 2024-08-17T06:41:01Z |
+ 2024-08-20T09:01:35Z |
Archived |
@@ -34615,7 +34615,7 @@ OpenAPI Generator (link)
Stars |
- 21058 |
+ 21066 |
Watchers |
@@ -34623,7 +34623,7 @@ OpenAPI Generator (link)
Forks |
- 6382 |
+ 6388 |
Created |
@@ -34631,7 +34631,7 @@ OpenAPI Generator (link)
Last Updated |
- 2024-08-20T01:50:16Z |
+ 2024-08-21T01:06:53Z |
Archived |
@@ -34717,7 +34717,7 @@ Kiota Api Client Generator (link)
Stars |
- 2742 |
+ 2750 |
Watchers |
@@ -34725,7 +34725,7 @@ Kiota Api Client Generator (link)
Forks |
- 184 |
+ 185 |
Created |
@@ -34733,7 +34733,7 @@ Kiota Api Client Generator (link)
Last Updated |
- 2024-08-20T02:16:53Z |
+ 2024-08-21T01:55:03Z |
Archived |
@@ -35082,7 +35082,7 @@ Swagger Editor (link)
Forks |
- 2236 |
+ 2235 |
Created |
@@ -35345,7 +35345,7 @@ Hackolade (link)
Last Updated |
- 2024-07-25T12:13:42Z |
+ 2024-08-20T12:20:54Z |
Archived |
@@ -35388,7 +35388,7 @@ Apicurio Studio (link)
Forks |
- 492 |
+ 493 |
Created |
@@ -35396,7 +35396,7 @@ Apicurio Studio (link)
Last Updated |
- 2024-08-15T15:06:30Z |
+ 2024-08-20T15:08:17Z |
Archived |
@@ -35839,7 +35839,7 @@ Prism (link)
Stars |
- 4177 |
+ 4182 |
Watchers |
@@ -35855,7 +35855,7 @@ Prism (link)
Last Updated |
- 2024-08-19T04:00:29Z |
+ 2024-08-20T19:32:20Z |
Archived |
@@ -35890,7 +35890,7 @@ Microcks (link)
Stars |
- 1314 |
+ 1315 |
Watchers |
@@ -35906,7 +35906,7 @@ Microcks (link)
Last Updated |
- 2024-08-19T07:39:04Z |
+ 2024-08-20T11:39:25Z |
Archived |
@@ -36196,7 +36196,7 @@ tsoa (link)
Stars |
- 3413 |
+ 3415 |
Watchers |
@@ -36212,7 +36212,7 @@ tsoa (link)
Last Updated |
- 2024-08-19T11:10:06Z |
+ 2024-08-20T14:16:09Z |
Archived |
@@ -36298,7 +36298,7 @@ express-openapi (link)
Stars |
- 885 |
+ 886 |
Watchers |
@@ -36314,7 +36314,7 @@ express-openapi (link)
Last Updated |
- 2024-07-30T16:02:01Z |
+ 2024-08-20T19:28:20Z |
Archived |
@@ -36451,7 +36451,7 @@ API Platform (link)
Stars |
- 8413 |
+ 8415 |
Watchers |
@@ -36459,7 +36459,7 @@ API Platform (link)
Forks |
- 950 |
+ 951 |
Created |
@@ -36467,7 +36467,7 @@ API Platform (link)
Last Updated |
- 2024-08-19T03:30:05Z |
+ 2024-08-20T12:47:05Z |
Archived |
@@ -36553,7 +36553,7 @@ Fusio (link)
Stars |
- 1832 |
+ 1833 |
Watchers |
@@ -36569,7 +36569,7 @@ Fusio (link)
Last Updated |
- 2024-08-18T14:57:47Z |
+ 2024-08-20T15:08:19Z |
Archived |
@@ -36757,7 +36757,7 @@ @nestjs/swagger (link)
Stars |
- 1656 |
+ 1657 |
Watchers |
@@ -36765,7 +36765,7 @@ @nestjs/swagger (link)
Forks |
- 457 |
+ 458 |
Created |
@@ -36773,7 +36773,7 @@ @nestjs/swagger (link)
Last Updated |
- 2024-08-20T03:05:52Z |
+ 2024-08-20T19:01:47Z |
Archived |
@@ -36859,7 +36859,7 @@ Dredd (link)
Stars |
- 4170 |
+ 4172 |
Watchers |
@@ -36875,7 +36875,7 @@ Dredd (link)
Last Updated |
- 2024-08-19T08:16:12Z |
+ 2024-08-20T11:05:45Z |
Archived |
@@ -36914,7 +36914,7 @@ express-openapi-validator (link)
Watchers |
- 18 |
+ 19 |
Forks |
@@ -36926,7 +36926,7 @@ express-openapi-validator (link)
Last Updated |
- 2024-08-19T08:29:17Z |
+ 2024-08-20T21:39:51Z |
Archived |
@@ -37232,7 +37232,7 @@ OpenAPI Style Validator (link)
Last Updated |
- 2024-08-16T01:38:44Z |
+ 2024-08-20T20:10:26Z |
Archived |
@@ -37318,7 +37318,7 @@ Redocly CLI (link)
Stars |
- 890 |
+ 893 |
Watchers |
@@ -37326,7 +37326,7 @@ Redocly CLI (link)
Forks |
- 134 |
+ 135 |
Created |
@@ -37334,7 +37334,7 @@ Redocly CLI (link)
Last Updated |
- 2024-08-19T12:15:28Z |
+ 2024-08-21T01:08:13Z |
Archived |
@@ -37420,7 +37420,7 @@ committee (link)
Stars |
- 866 |
+ 867 |
Watchers |
@@ -37436,7 +37436,7 @@ committee (link)
Last Updated |
- 2024-08-09T09:39:02Z |
+ 2024-08-20T19:23:17Z |
Archived |
@@ -37573,7 +37573,7 @@ swagger-parser (link)
Stars |
- 775 |
+ 776 |
Watchers |
@@ -37589,7 +37589,7 @@ swagger-parser (link)
Last Updated |
- 2024-08-04T17:43:56Z |
+ 2024-08-20T08:06:30Z |
Archived |
@@ -37675,7 +37675,7 @@ openapi-snippet (link)
Stars |
- 116 |
+ 115 |
Watchers |
@@ -37691,7 +37691,7 @@ openapi-snippet (link)
Last Updated |
- 2024-08-13T12:52:25Z |
+ 2024-08-20T13:38:58Z |
Archived |
@@ -37989,7 +37989,7 @@ openapi-psr7-validator (link)
Forks |
- 90 |
+ 91 |
Created |
@@ -38201,7 +38201,7 @@ psx-api (link)
Last Updated |
- 2024-07-13T00:18:30Z |
+ 2024-08-20T21:12:36Z |
Archived |
@@ -38236,7 +38236,7 @@ Microsoft/OpenAPI.NET (link)
Stars |
- 1370 |
+ 1371 |
Watchers |
@@ -38252,7 +38252,7 @@ Microsoft/OpenAPI.NET (link)
Last Updated |
- 2024-08-19T21:41:28Z |
+ 2024-08-20T06:31:48Z |
Archived |
@@ -38746,7 +38746,7 @@ NSwag (link)
Stars |
- 6663 |
+ 6665 |
Watchers |
@@ -38754,7 +38754,7 @@ NSwag (link)
Forks |
- 1229 |
+ 1230 |
Created |
@@ -38762,7 +38762,7 @@ NSwag (link)
Last Updated |
- 2024-08-19T11:29:09Z |
+ 2024-08-20T14:43:30Z |
Archived |
@@ -38848,7 +38848,7 @@ Swagger-Codegen (link)
Stars |
- 16843 |
+ 16844 |
Watchers |
@@ -38864,7 +38864,7 @@ Swagger-Codegen (link)
Last Updated |
- 2024-08-20T02:40:36Z |
+ 2024-08-20T18:28:33Z |
Archived |
@@ -38899,11 +38899,11 @@ Azure AutoRest (link)
Stars |
- 4569 |
+ 4570 |
Watchers |
- 874 |
+ 875 |
Forks |
@@ -38915,7 +38915,7 @@ Azure AutoRest (link)
Last Updated |
- 2024-08-19T08:31:22Z |
+ 2024-08-20T21:30:27Z |
Archived |
@@ -39664,7 +39664,7 @@ cats (link)
Stars |
- 1132 |
+ 1131 |
Watchers |
@@ -39680,7 +39680,7 @@ cats (link)
Last Updated |
- 2024-08-16T09:25:40Z |
+ 2024-08-20T15:20:53Z |
Archived |
@@ -40072,7 +40072,7 @@ mitmproxy2swagger (link)
Stars |
- 4982 |
+ 4984 |
Watchers |
@@ -40088,7 +40088,7 @@ mitmproxy2swagger (link)
Last Updated |
- 2024-08-18T21:48:38Z |
+ 2024-08-20T11:49:37Z |
Archived |
@@ -40378,7 +40378,7 @@ OpenAPI DevTools (link)
Stars |
- 3873 |
+ 3874 |
Watchers |
@@ -40394,7 +40394,7 @@ OpenAPI DevTools (link)
Last Updated |
- 2024-08-19T04:03:55Z |
+ 2024-08-20T15:30:32Z |
Archived |
@@ -40429,7 +40429,7 @@ TypeSpec (link)
Stars |
- 4057 |
+ 4061 |
Watchers |
@@ -40445,7 +40445,7 @@ TypeSpec (link)
Last Updated |
- 2024-08-20T02:14:01Z |
+ 2024-08-20T23:48:58Z |
Archived |
@@ -40531,7 +40531,7 @@ Restish (link)
Stars |
- 733 |
+ 734 |
Watchers |
@@ -40547,7 +40547,7 @@ Restish (link)
Last Updated |
- 2024-08-20T00:18:49Z |
+ 2024-08-20T17:34:42Z |
Archived |
@@ -40790,7 +40790,7 @@ SpringFox (link)
Watchers |
- 266 |
+ 265 |
Forks |
@@ -40888,7 +40888,7 @@ OWASP ZAP (link)
Stars |
- 12411 |
+ 12420 |
Watchers |
@@ -40896,7 +40896,7 @@ OWASP ZAP (link)
Forks |
- 2219 |
+ 2222 |
Created |
@@ -40904,7 +40904,7 @@ OWASP ZAP (link)
Last Updated |
- 2024-08-19T23:18:50Z |
+ 2024-08-20T23:51:20Z |
Archived |
@@ -41449,15 +41449,15 @@ Django REST Framework (link)
Stars |
- 28026 |
+ 28034 |
Watchers |
- 623 |
+ 622 |
Forks |
- 6794 |
+ 6795 |
Created |
@@ -41465,7 +41465,7 @@ Django REST Framework (link)
Last Updated |
- 2024-08-20T02:42:01Z |
+ 2024-08-20T23:27:57Z |
Archived |
@@ -41806,7 +41806,7 @@ openapi-python-client (link)
Stars |
- 1230 |
+ 1231 |
Watchers |
@@ -41822,7 +41822,7 @@ openapi-python-client (link)
Last Updated |
- 2024-08-19T02:14:07Z |
+ 2024-08-20T19:41:39Z |
Archived |
@@ -41857,7 +41857,7 @@ Elements (link)
Stars |
- 1681 |
+ 1683 |
Watchers |
@@ -41865,7 +41865,7 @@ Elements (link)
Forks |
- 195 |
+ 196 |
Created |
@@ -41873,7 +41873,7 @@ Elements (link)
Last Updated |
- 2024-08-19T21:02:48Z |
+ 2024-08-20T19:33:19Z |
Archived |
@@ -42061,7 +42061,7 @@ Cherrybomb (link)
Stars |
- 1098 |
+ 1099 |
Watchers |
@@ -42077,7 +42077,7 @@ Cherrybomb (link)
Last Updated |
- 2024-08-16T23:26:35Z |
+ 2024-08-20T23:48:24Z |
Archived |
@@ -42469,7 +42469,7 @@ Counterfact (link)
Stars |
- 95 |
+ 96 |
Watchers |
@@ -42485,7 +42485,7 @@ Counterfact (link)
Last Updated |
- 2024-08-17T12:50:27Z |
+ 2024-08-20T13:09:08Z |
Archived |
@@ -42571,7 +42571,7 @@ vacuum (link)
Stars |
- 538 |
+ 539 |
Watchers |
@@ -42587,7 +42587,7 @@ vacuum (link)
Last Updated |
- 2024-08-19T17:07:43Z |
+ 2024-08-20T12:04:00Z |
Archived |
@@ -43199,7 +43199,7 @@ Specmatic (link)
Last Updated |
- 2024-08-18T20:40:42Z |
+ 2024-08-20T18:14:40Z |
Archived |
@@ -43795,7 +43795,7 @@ 🌿 Fern (link)
Stars |
- 2534 |
+ 2535 |
Watchers |
@@ -43811,7 +43811,7 @@ 🌿 Fern (link)
Last Updated |
- 2024-08-20T03:13:13Z |
+ 2024-08-21T01:34:51Z |
Archived |
@@ -43948,7 +43948,7 @@ Swift OpenAPI Generator (link)
Stars |
- 1334 |
+ 1336 |
Watchers |
@@ -43964,7 +43964,7 @@ Swift OpenAPI Generator (link)
Last Updated |
- 2024-08-20T00:04:22Z |
+ 2024-08-20T19:24:09Z |
Archived |
@@ -44305,7 +44305,7 @@ Fuego (link)
Stars |
- 733 |
+ 736 |
Watchers |
@@ -44321,7 +44321,7 @@ Fuego (link)
Last Updated |
- 2024-08-20T00:57:14Z |
+ 2024-08-20T21:54:41Z |
Archived |
@@ -44356,7 +44356,7 @@ Huma (link)
Stars |
- 1794 |
+ 1797 |
Watchers |
@@ -44364,7 +44364,7 @@ Huma (link)
Forks |
- 136 |
+ 138 |
Created |
@@ -44372,7 +44372,7 @@ Huma (link)
Last Updated |
- 2024-08-19T15:47:04Z |
+ 2024-08-21T02:55:37Z |
Archived |
@@ -44509,7 +44509,7 @@ OpenAPI Qraft (link)
Stars |
- 23 |
+ 24 |
Watchers |
@@ -44525,7 +44525,7 @@ OpenAPI Qraft (link)
Last Updated |
- 2024-08-19T20:11:16Z |
+ 2024-08-21T03:25:10Z |
Archived |
@@ -44662,7 +44662,7 @@ FastAPI (link)
Stars |
- 74774 |
+ 74807 |
Watchers |
@@ -44670,7 +44670,7 @@ FastAPI (link)
Forks |
- 6295 |
+ 6298 |
Created |
@@ -44678,7 +44678,7 @@ FastAPI (link)
Last Updated |
- 2024-08-20T03:25:40Z |
+ 2024-08-21T03:23:09Z |
Archived |
@@ -44713,7 +44713,7 @@ swagger-ui (link)
Stars |
- 26213 |
+ 26216 |
Watchers |
@@ -44729,7 +44729,7 @@ swagger-ui (link)
Last Updated |
- 2024-08-20T03:08:47Z |
+ 2024-08-20T23:03:38Z |
Archived |
@@ -44764,7 +44764,7 @@ Redoc (link)
Stars |
- 23163 |
+ 23170 |
Watchers |
@@ -44780,7 +44780,7 @@ Redoc (link)
Last Updated |
- 2024-08-20T01:50:55Z |
+ 2024-08-21T01:09:32Z |
Archived |
@@ -44823,7 +44823,7 @@ swagger-core (link)
Forks |
- 2171 |
+ 2170 |
Created |
@@ -44866,7 +44866,7 @@ mockoon (link)
Stars |
- 6195 |
+ 6196 |
Watchers |
@@ -44882,7 +44882,7 @@ mockoon (link)
Last Updated |
- 2024-08-19T20:20:36Z |
+ 2024-08-20T09:50:15Z |
Archived |
@@ -44917,7 +44917,7 @@ OpenAPI Server Code Generator (oapi-cod
Stars |
- 5800 |
+ 5805 |
Watchers |
@@ -44925,7 +44925,7 @@ OpenAPI Server Code Generator (oapi-cod
Forks |
- 826 |
+ 827 |
Created |
@@ -44933,7 +44933,7 @@ OpenAPI Server Code Generator (oapi-cod
Last Updated |
- 2024-08-19T18:06:45Z |
+ 2024-08-20T19:30:42Z |
Archived |
@@ -44968,7 +44968,7 @@ OpenAPI TypeScript (link)
Stars |
- 5351 |
+ 5363 |
Watchers |
@@ -44984,7 +44984,7 @@ OpenAPI TypeScript (link)
Last Updated |
- 2024-08-20T03:14:29Z |
+ 2024-08-21T02:54:36Z |
Archived |
@@ -45019,7 +45019,7 @@ knife4j (link)
Stars |
- 4038 |
+ 4039 |
Watchers |
@@ -45035,7 +45035,7 @@ knife4j (link)
Last Updated |
- 2024-08-19T10:15:55Z |
+ 2024-08-20T05:02:40Z |
Archived |
@@ -45070,7 +45070,7 @@ openapi-directory (link)
Stars |
- 3808 |
+ 3810 |
Watchers |
@@ -45078,7 +45078,7 @@ openapi-directory (link)
Forks |
- 569 |
+ 570 |
Created |
@@ -45086,7 +45086,7 @@ openapi-directory (link)
Last Updated |
- 2024-08-20T03:10:11Z |
+ 2024-08-20T15:49:08Z |
Archived |
@@ -45121,7 +45121,7 @@ springdoc-openapi (link)
Stars |
- 3225 |
+ 3227 |
Watchers |
@@ -45137,7 +45137,7 @@ springdoc-openapi (link)
Last Updated |
- 2024-08-19T10:47:26Z |
+ 2024-08-20T12:22:36Z |
Archived |
@@ -45172,7 +45172,7 @@ uvicorn-gunicorn-fastapi-docker (link)<
Stars |
- 2671 |
+ 2675 |
Watchers |
@@ -45188,7 +45188,7 @@ uvicorn-gunicorn-fastapi-docker (link)<
Last Updated |
- 2024-08-19T16:10:59Z |
+ 2024-08-21T02:22:04Z |
Archived |
@@ -45239,7 +45239,7 @@ swagger-js (link)
Last Updated |
- 2024-08-15T08:43:25Z |
+ 2024-08-20T23:06:53Z |
Archived |
@@ -45274,7 +45274,7 @@ drf-spectacular (link)
Stars |
- 2268 |
+ 2269 |
Watchers |
@@ -45290,7 +45290,7 @@ drf-spectacular (link)
Last Updated |
- 2024-08-19T13:38:27Z |
+ 2024-08-20T06:28:40Z |
Archived |
@@ -45333,7 +45333,7 @@ Schemathesis (link)
Forks |
- 152 |
+ 153 |
Created |
@@ -45341,7 +45341,7 @@ Schemathesis (link)
Last Updated |
- 2024-08-19T22:00:47Z |
+ 2024-08-20T19:37:57Z |
Archived |
@@ -45376,7 +45376,7 @@ msgspec (link)
Stars |
- 2187 |
+ 2190 |
Watchers |
@@ -45392,7 +45392,7 @@ msgspec (link)
Last Updated |
- 2024-08-19T20:18:49Z |
+ 2024-08-20T17:00:32Z |
Archived |
@@ -45427,7 +45427,7 @@ gnostic (link)
Stars |
- 2059 |
+ 2060 |
Watchers |
@@ -45435,7 +45435,7 @@ gnostic (link)
Forks |
- 243 |
+ 242 |
Created |
@@ -45443,7 +45443,7 @@ gnostic (link)
Last Updated |
- 2024-08-19T06:31:42Z |
+ 2024-08-20T05:59:13Z |
Archived |
@@ -45494,7 +45494,7 @@ rapidoc (link)
Last Updated |
- 2024-08-19T15:39:38Z |
+ 2024-08-20T12:27:46Z |
Archived |
@@ -45529,7 +45529,7 @@ OpenAPI-gui (link)
Stars |
- 1397 |
+ 1399 |
Watchers |
@@ -45545,7 +45545,7 @@ OpenAPI-gui (link)
Last Updated |
- 2024-08-18T20:33:17Z |
+ 2024-08-20T13:45:17Z |
Archived |
@@ -45580,7 +45580,7 @@ openapi-generator-cli (link)
Stars |
- 1379 |
+ 1380 |
Watchers |
@@ -45596,7 +45596,7 @@ openapi-generator-cli (link)
Last Updated |
- 2024-08-20T02:56:13Z |
+ 2024-08-20T22:26:52Z |
Archived |
@@ -45631,7 +45631,7 @@ ogen (link)
Stars |
- 1251 |
+ 1255 |
Watchers |
@@ -45647,7 +45647,7 @@ ogen (link)
Last Updated |
- 2024-08-19T06:47:34Z |
+ 2024-08-20T14:33:25Z |
Archived |
@@ -45698,7 +45698,7 @@ apispec (link)
Last Updated |
- 2024-08-12T21:48:25Z |
+ 2024-08-20T16:01:42Z |
Archived |
@@ -45835,7 +45835,7 @@ openapi-ts (link)
Stars |
- 870 |
+ 885 |
Watchers |
@@ -45851,7 +45851,7 @@ openapi-ts (link)
Last Updated |
- 2024-08-19T20:00:21Z |
+ 2024-08-21T03:22:43Z |
Archived |
@@ -46039,7 +46039,7 @@ oas-kit (link)
Stars |
- 701 |
+ 702 |
Watchers |
@@ -46055,7 +46055,7 @@ oas-kit (link)
Last Updated |
- 2024-08-10T03:02:19Z |
+ 2024-08-20T10:06:53Z |
Archived |
@@ -46294,7 +46294,7 @@ openapi-tui (link)
Stars |
- 608 |
+ 609 |
Watchers |
@@ -46310,7 +46310,7 @@ openapi-tui (link)
Last Updated |
- 2024-08-17T04:25:05Z |
+ 2024-08-20T10:36:51Z |
Archived |
@@ -46345,7 +46345,7 @@ generator-express-no-stress (link)
Stars |
- 592 |
+ 593 |
Watchers |
@@ -46361,7 +46361,7 @@ generator-express-no-stress (link)
Last Updated |
- 2024-07-27T19:07:59Z |
+ 2024-08-20T22:38:33Z |
Archived |
@@ -46455,7 +46455,7 @@ docusaurus-openapi (link)
Forks |
- 81 |
+ 82 |
Created |
@@ -46498,7 +46498,7 @@ oazapfts (link)
Stars |
- 486 |
+ 488 |
Watchers |
@@ -46514,7 +46514,7 @@ oazapfts (link)
Last Updated |
- 2024-08-19T06:56:04Z |
+ 2024-08-20T19:25:50Z |
Archived |
@@ -46600,7 +46600,7 @@ openapi-codegen (link)
Stars |
- 481 |
+ 483 |
Watchers |
@@ -46616,7 +46616,7 @@ openapi-codegen (link)
Last Updated |
- 2024-08-19T06:17:18Z |
+ 2024-08-20T19:40:07Z |
Archived |
@@ -46651,7 +46651,7 @@ stackql (link)
Stars |
- 471 |
+ 472 |
Watchers |
@@ -46667,7 +46667,7 @@ stackql (link)
Last Updated |
- 2024-08-19T22:11:58Z |
+ 2024-08-20T06:08:54Z |
Archived |
@@ -46702,7 +46702,7 @@ swagger-autogen (link)
Stars |
- 454 |
+ 455 |
Watchers |
@@ -46718,7 +46718,7 @@ swagger-autogen (link)
Last Updated |
- 2024-08-17T19:52:00Z |
+ 2024-08-20T09:33:05Z |
Archived |
@@ -47008,7 +47008,7 @@ safrs (link)
Stars |
- 404 |
+ 405 |
Watchers |
@@ -47024,7 +47024,7 @@ safrs (link)
Last Updated |
- 2024-08-02T04:10:02Z |
+ 2024-08-21T03:23:01Z |
Archived |
@@ -47263,7 +47263,7 @@ fastapi-clean-example (link)
Stars |
- 353 |
+ 355 |
Watchers |
@@ -47279,7 +47279,7 @@ fastapi-clean-example (link)
Last Updated |
- 2024-08-19T08:11:05Z |
+ 2024-08-21T03:02:30Z |
Archived |
@@ -47534,7 +47534,7 @@ openapi-core (link)
Last Updated |
- 2024-08-20T01:36:31Z |
+ 2024-08-20T10:15:11Z |
Archived |
@@ -47620,7 +47620,7 @@ modelina (link)
Stars |
- 289 |
+ 290 |
Watchers |
@@ -47636,7 +47636,7 @@ modelina (link)
Last Updated |
- 2024-08-16T13:34:26Z |
+ 2024-08-20T17:46:23Z |
Archived |
@@ -48130,7 +48130,7 @@ zod-openapi (link)
Stars |
- 237 |
+ 240 |
Watchers |
@@ -48146,7 +48146,7 @@ zod-openapi (link)
Last Updated |
- 2024-08-18T08:35:05Z |
+ 2024-08-20T23:27:52Z |
Archived |
@@ -48385,7 +48385,7 @@ express-jsdoc-swagger (link)
Stars |
- 212 |
+ 213 |
Watchers |
@@ -48401,7 +48401,7 @@ express-jsdoc-swagger (link)
Last Updated |
- 2024-07-18T16:29:58Z |
+ 2024-08-20T04:55:16Z |
Archived |
@@ -48691,7 +48691,7 @@ fastify-openapi-glue (link)
Stars |
- 198 |
+ 199 |
Watchers |
@@ -48707,7 +48707,7 @@ fastify-openapi-glue (link)
Last Updated |
- 2024-08-17T17:08:22Z |
+ 2024-08-20T14:59:53Z |
Archived |
@@ -48742,7 +48742,7 @@ openapi-typescript-code-generator (link
Stars |
- 193 |
+ 194 |
Watchers |
@@ -48758,7 +48758,7 @@ openapi-typescript-code-generator (link
Last Updated |
- 2024-07-11T02:26:37Z |
+ 2024-08-20T19:35:49Z |
Archived |
@@ -49115,7 +49115,7 @@ speakeasy (link)
Last Updated |
- 2024-08-19T14:15:11Z |
+ 2024-08-20T16:22:14Z |
Archived |
@@ -49150,7 +49150,7 @@ paypal-rest-api-specifications (link)
Stars |
- 172 |
+ 173 |
Watchers |
@@ -49166,7 +49166,7 @@ paypal-rest-api-specifications (link)
Last Updated |
- 2024-08-14T18:32:09Z |
+ 2024-08-20T22:11:15Z |
Archived |
@@ -49268,7 +49268,7 @@ refitter (link)
Last Updated |
- 2024-08-17T05:52:56Z |
+ 2024-08-20T12:40:00Z |
Archived |
@@ -49558,7 +49558,7 @@ openapi-starter (link)
Stars |
- 151 |
+ 152 |
Watchers |
@@ -49574,7 +49574,7 @@ openapi-starter (link)
Last Updated |
- 2024-08-17T08:26:55Z |
+ 2024-08-20T06:06:11Z |
Archived |
@@ -49864,7 +49864,7 @@ typescript-backend-toolkit (link)
Stars |
- 130 |
+ 137 |
Watchers |
@@ -49872,7 +49872,7 @@ typescript-backend-toolkit (link)
Forks |
- 23 |
+ 24 |
Created |
@@ -49880,7 +49880,7 @@ typescript-backend-toolkit (link)
Last Updated |
- 2024-08-19T18:36:53Z |
+ 2024-08-21T00:34:52Z |
Archived |
@@ -50272,7 +50272,7 @@ spring-boot-3-jwt-auth (link)
Stars |
- 109 |
+ 110 |
Watchers |
@@ -50288,7 +50288,7 @@ spring-boot-3-jwt-auth (link)
Last Updated |
- 2024-07-17T15:49:28Z |
+ 2024-08-20T12:57:24Z |
Archived |
@@ -50492,7 +50492,7 @@ openapi (link)
Last Updated |
- 2024-08-13T13:35:13Z |
+ 2024-08-20T16:39:07Z |
Archived |
@@ -50594,7 +50594,7 @@ moclojer (link)
Last Updated |
- 2024-08-12T20:43:05Z |
+ 2024-08-20T20:13:48Z |
Archived |
@@ -50680,7 +50680,7 @@ openapi4j (link)
Stars |
- 103 |
+ 102 |
Watchers |
@@ -50696,7 +50696,7 @@ openapi4j (link)
Last Updated |
- 2024-04-11T10:01:36Z |
+ 2024-08-20T05:33:44Z |
Archived |
@@ -50798,7 +50798,7 @@ tools.openapis.org (link)
Last Updated |
- 2024-08-19T03:28:02Z |
+ 2024-08-20T03:36:53Z |
Archived |
@@ -51249,7 +51249,7 @@ jellyfin-sdk-kotlin (link)
Forks |
- 41 |
+ 42 |
Created |
@@ -51716,7 +51716,7 @@ apidom (link)
Last Updated |
- 2024-08-19T23:27:56Z |
+ 2024-08-20T23:53:56Z |
Archived |
@@ -52218,7 +52218,7 @@ openapi (link)
Forks |
- 90 |
+ 89 |
Created |
@@ -52465,7 +52465,7 @@ sideko (link)
Stars |
- 52 |
+ 53 |
Watchers |
@@ -52481,7 +52481,7 @@ sideko (link)
Last Updated |
- 2024-08-14T13:47:11Z |
+ 2024-08-20T03:52:05Z |
Archived |
@@ -52622,7 +52622,7 @@ amala (link)
Watchers |
- 6 |
+ 5 |
Forks |
@@ -52677,7 +52677,7 @@ swaggerhub-cli (link)
Forks |
- 13 |
+ 14 |
Created |
@@ -54250,7 +54250,7 @@ openapi-schemas (link)
Stars |
- 35 |
+ 34 |
Watchers |
@@ -54266,7 +54266,7 @@ openapi-schemas (link)
Last Updated |
- 2024-04-26T01:06:22Z |
+ 2024-08-20T05:33:54Z |
Archived |
@@ -54470,7 +54470,7 @@ openapi-examples (link)
Last Updated |
- 2024-08-18T00:25:12Z |
+ 2024-08-21T00:22:35Z |
Archived |
@@ -55219,7 +55219,7 @@ hcloud-openapi (link)
Stars |
- 27 |
+ 28 |
Watchers |
@@ -55235,7 +55235,7 @@ hcloud-openapi (link)
Last Updated |
- 2024-08-09T10:57:36Z |
+ 2024-08-20T22:20:17Z |
Archived |
@@ -55321,7 +55321,7 @@ openapi-extract (link)
Stars |
- 27 |
+ 28 |
Watchers |
@@ -55337,7 +55337,7 @@ openapi-extract (link)
Last Updated |
- 2024-06-06T23:46:19Z |
+ 2024-08-20T10:03:54Z |
Archived |
@@ -57071,7 +57071,7 @@ go-oas3 (link)
Last Updated |
- 2024-08-19T13:57:59Z |
+ 2024-08-20T14:54:25Z |
Archived |
@@ -57581,7 +57581,7 @@ redocly-cli-cookbook (link)
Last Updated |
- 2024-08-15T14:26:53Z |
+ 2024-08-20T07:59:01Z |
Archived |
@@ -57887,7 +57887,7 @@ api-typing (link)
Last Updated |
- 2024-07-31T13:33:35Z |
+ 2024-08-20T07:51:30Z |
Archived |
@@ -60131,7 +60131,7 @@ fastify-flux (link)
Last Updated |
- 2024-08-19T08:53:40Z |
+ 2024-08-20T16:24:02Z |
Archived |
@@ -65690,7 +65690,7 @@ swrlab (link)
Last Updated |
- 2024-08-02T11:46:09Z |
+ 2024-08-20T11:29:39Z |
Archived |
@@ -65996,7 +65996,7 @@ openapi-specs (link)
Last Updated |
- 2024-08-08T20:39:57Z |
+ 2024-08-20T10:18:52Z |
Archived |
@@ -68240,7 +68240,7 @@ angular-demo-application-source (link)<
Last Updated |
- 2024-07-12T17:21:46Z |
+ 2024-08-20T13:36:33Z |
Archived |
@@ -70586,7 +70586,7 @@ openapi-server-url-templating (link)
Last Updated |
- 2024-08-09T23:00:32Z |
+ 2024-08-20T22:27:53Z |
Archived |
@@ -72712,7 +72712,7 @@ docserver (link)
Stars |
- 3 |
+ 4 |
Watchers |
@@ -72728,7 +72728,7 @@ docserver (link)
Last Updated |
- 2023-09-22T16:20:55Z |
+ 2024-08-20T08:02:50Z |
Archived |
@@ -74411,7 +74411,7 @@ openapi-path-templating (link)
Last Updated |
- 2024-08-07T19:04:00Z |
+ 2024-08-20T18:14:52Z |
Archived |
@@ -78864,10 +78864,10 @@ tomcat-embedded-openapi (link)
-
Last Updated |
- 2024-08-19T17:57:10Z |
+ 2024-08-20T17:27:24Z |
Archived |
@@ -90935,7 +90935,7 @@ eventbridge (link)
Last Updated |
- 2024-08-09T17:24:36Z |
+ 2024-08-20T12:20:41Z |
Archived |
@@ -91853,7 +91853,7 @@ utoipa (link)
Last Updated |
- 2024-08-19T18:10:57Z |
+ 2024-08-20T20:23:14Z |
Archived |
@@ -91939,7 +91939,7 @@ oas_rails (link)
Stars |
- 40 |
+ 41 |
Watchers |
@@ -91955,7 +91955,7 @@ oas_rails (link)
Last Updated |
- 2024-08-19T14:39:32Z |
+ 2024-08-20T15:45:32Z |
Archived |
@@ -92551,7 +92551,7 @@ orval (link)
Stars |
- 2743 |
+ 2748 |
Watchers |
@@ -92559,7 +92559,7 @@ orval (link)
Forks |
- 308 |
+ 309 |
Created |
@@ -92567,7 +92567,7 @@ orval (link)
Last Updated |
- 2024-08-20T01:55:37Z |
+ 2024-08-20T21:57:49Z |
Archived |
@@ -94046,7 +94046,7 @@ EvoMaster (link)
Last Updated |
- 2024-08-19T06:52:11Z |
+ 2024-08-20T18:22:19Z |
Archived |
@@ -96682,7 +96682,7 @@ kubb (link)
Stars |
- 615 |
+ 616 |
Watchers |
@@ -96690,7 +96690,7 @@ kubb (link)
Forks |
- 44 |
+ 45 |
Created |
@@ -96698,7 +96698,7 @@ kubb (link)
Last Updated |
- 2024-08-19T03:14:33Z |
+ 2024-08-20T20:09:31Z |
Archived |
@@ -96886,7 +96886,7 @@ full-stack-fastapi-template (link)
Stars |
- 25483 |
+ 25500 |
Watchers |
@@ -96894,7 +96894,7 @@ full-stack-fastapi-template (link)
Forks |
- 4363 |
+ 4367 |
Created |
@@ -96902,7 +96902,7 @@ full-stack-fastapi-template (link)
Last Updated |
- 2024-08-20T02:37:01Z |
+ 2024-08-21T02:45:08Z |
Archived |
@@ -106941,7 +106941,7 @@ swagger-models (link)
Forks |
- 2171 |
+ 2170 |
Created |
@@ -106984,7 +106984,7 @@ Microsoft.OpenApi.net (link)
Stars |
- 1370 |
+ 1371 |
Watchers |
@@ -107000,7 +107000,7 @@ Microsoft.OpenApi.net (link)
Last Updated |
- 2024-08-19T21:41:28Z |
+ 2024-08-20T06:31:48Z |
Archived |
@@ -107765,7 +107765,7 @@ PHP-CRUD-API (link)
Last Updated |
- 2024-08-15T21:53:19Z |
+ 2024-08-20T09:57:48Z |
Archived |
@@ -108012,7 +108012,7 @@ zero-rails_openapi (link)
Forks |
- 21 |
+ 20 |
Created |
@@ -109279,11 +109279,11 @@ LoopBack 4 (link)
Stars |
- 4913 |
+ 4914 |
Watchers |
- 137 |
+ 136 |
Forks |
@@ -109295,7 +109295,7 @@ LoopBack 4 (link)
Last Updated |
- 2024-08-19T18:56:09Z |
+ 2024-08-20T07:31:57Z |
Archived |
@@ -109381,7 +109381,7 @@ RESTler (link)
Stars |
- 2549 |
+ 2550 |
Watchers |
@@ -109389,7 +109389,7 @@ RESTler (link)
Forks |
- 289 |
+ 288 |
Created |
@@ -109397,7 +109397,7 @@ RESTler (link)
Last Updated |
- 2024-08-19T10:10:56Z |
+ 2024-08-20T10:54:30Z |
Archived |
@@ -110927,7 +110927,7 @@ pyswagger (link)
Last Updated |
- 2024-07-17T19:59:27Z |
+ 2024-08-20T07:13:21Z |
Archived |
@@ -125197,10 +125197,10 @@ odata2openapi (link)
document
- .getElementById("53fec6c82b59b3e470d51c6bf9d59f4d-open-button")
+ .getElementById("543ce5060a72d51fc2b5db044476e02f-open-button")
.onclick = function () {
const wrapper = document.getElementById("tool-content")
- const content = document.getElementById("53fec6c82b59b3e470d51c6bf9d59f4d-info")
+ const content = document.getElementById("543ce5060a72d51fc2b5db044476e02f-info")
content.removeAttribute("hidden")
diff --git a/docs/categories/auto-generators.html b/docs/categories/auto-generators.html
index e929419e..45488b31 100644
--- a/docs/categories/auto-generators.html
+++ b/docs/categories/auto-generators.html
@@ -91,7 +91,7 @@ No
Yes |
No |
- 4982 |
+ 4984 |
@@ -227,7 +227,7 @@ Yes |
Yes |
No |
- 3873 |
+ 3874 |
@@ -250,7 +250,7 @@ No |
Yes |
No |
- 4057 |
+ 4061 |
@@ -273,7 +273,7 @@ No |
Yes |
No |
- 733 |
+ 736 |
@@ -296,7 +296,7 @@ Yes |
Yes |
No |
- 1794 |
+ 1797 |
@@ -350,7 +350,7 @@ mitmproxy2swagger (link)
|
Stars |
- 4982 |
+ 4984 |
Watchers |
@@ -366,7 +366,7 @@ mitmproxy2swagger (link)
Last Updated |
- 2024-08-18T21:48:38Z |
+ 2024-08-20T11:49:37Z |
Archived |
@@ -656,7 +656,7 @@ OpenAPI DevTools (link)
Stars |
- 3873 |
+ 3874 |
Watchers |
@@ -672,7 +672,7 @@ OpenAPI DevTools (link)
Last Updated |
- 2024-08-19T04:03:55Z |
+ 2024-08-20T15:30:32Z |
Archived |
@@ -707,7 +707,7 @@ TypeSpec (link)
Stars |
- 4057 |
+ 4061 |
Watchers |
@@ -723,7 +723,7 @@ TypeSpec (link)
Last Updated |
- 2024-08-20T02:14:01Z |
+ 2024-08-20T23:48:58Z |
Archived |
@@ -758,7 +758,7 @@ Fuego (link)
Stars |
- 733 |
+ 736 |
Watchers |
@@ -774,7 +774,7 @@ Fuego (link)
Last Updated |
- 2024-08-20T00:57:14Z |
+ 2024-08-20T21:54:41Z |
Archived |
@@ -809,7 +809,7 @@ Huma (link)
Stars |
- 1794 |
+ 1797 |
Watchers |
@@ -817,7 +817,7 @@ Huma (link)
Forks |
- 136 |
+ 138 |
Created |
@@ -825,7 +825,7 @@ Huma (link)
Last Updated |
- 2024-08-19T15:47:04Z |
+ 2024-08-21T02:55:37Z |
Archived |
diff --git a/docs/categories/code-generators.html b/docs/categories/code-generators.html
index 4c331766..921a3440 100644
--- a/docs/categories/code-generators.html
+++ b/docs/categories/code-generators.html
@@ -114,7 +114,7 @@ No
Yes |
Yes |
- 21058 |
+ 21066 |
@@ -160,7 +160,7 @@ No |
Yes |
Yes |
- 2742 |
+ 2750 |
@@ -248,7 +248,7 @@ No |
Yes |
Yes |
- 16843 |
+ 16844 |
@@ -340,7 +340,7 @@ Yes |
Yes |
Yes |
- 2534 |
+ 2535 |
@@ -363,7 +363,7 @@ Yes |
Yes |
No |
- 23 |
+ 24 |
@@ -386,7 +386,7 @@ Yes |
Yes |
No |
- 26213 |
+ 26216 |
@@ -430,7 +430,7 @@ No |
Yes |
No |
- 5800 |
+ 5805 |
@@ -472,7 +472,7 @@ No |
Yes |
No |
- 1379 |
+ 1380 |
@@ -558,7 +558,7 @@ No |
Yes |
No |
- 172 |
+ 173 |
@@ -1381,7 +1381,7 @@ No |
Yes |
Yes |
- 2743 |
+ 2748 |
@@ -1591,7 +1591,7 @@ Yes |
Yes |
Yes |
- 615 |
+ 616 |
@@ -2168,7 +2168,7 @@ OpenAPI Generator (link)
|
Stars |
- 21058 |
+ 21066 |
Watchers |
@@ -2176,7 +2176,7 @@ OpenAPI Generator (link)
Forks |
- 6382 |
+ 6388 |
Created |
@@ -2184,7 +2184,7 @@ OpenAPI Generator (link)
Last Updated |
- 2024-08-20T01:50:16Z |
+ 2024-08-21T01:06:53Z |
Archived |
@@ -2270,7 +2270,7 @@ Kiota Api Client Generator (link)
Stars |
- 2742 |
+ 2750 |
Watchers |
@@ -2278,7 +2278,7 @@ Kiota Api Client Generator (link)
Forks |
- 184 |
+ 185 |
Created |
@@ -2286,7 +2286,7 @@ Kiota Api Client Generator (link)
Last Updated |
- 2024-08-20T02:16:53Z |
+ 2024-08-21T01:55:03Z |
Archived |
@@ -2474,7 +2474,7 @@ Swagger-Codegen (link)
Stars |
- 16843 |
+ 16844 |
Watchers |
@@ -2490,7 +2490,7 @@ Swagger-Codegen (link)
Last Updated |
- 2024-08-20T02:40:36Z |
+ 2024-08-20T18:28:33Z |
Archived |
@@ -2678,7 +2678,7 @@ 🌿 Fern (link)
Stars |
- 2534 |
+ 2535 |
Watchers |
@@ -2694,7 +2694,7 @@ 🌿 Fern (link)
Last Updated |
- 2024-08-20T03:13:13Z |
+ 2024-08-21T01:34:51Z |
Archived |
@@ -2729,7 +2729,7 @@ OpenAPI Qraft (link)
Stars |
- 23 |
+ 24 |
Watchers |
@@ -2745,7 +2745,7 @@ OpenAPI Qraft (link)
Last Updated |
- 2024-08-19T20:11:16Z |
+ 2024-08-21T03:25:10Z |
Archived |
@@ -2780,7 +2780,7 @@ swagger-ui (link)
Stars |
- 26213 |
+ 26216 |
Watchers |
@@ -2796,7 +2796,7 @@ swagger-ui (link)
Last Updated |
- 2024-08-20T03:08:47Z |
+ 2024-08-20T23:03:38Z |
Archived |
@@ -2839,7 +2839,7 @@ swagger-core (link)
Forks |
- 2171 |
+ 2170 |
Created |
@@ -2882,7 +2882,7 @@ OpenAPI Server Code Generator (oapi-cod
Stars |
- 5800 |
+ 5805 |
Watchers |
@@ -2890,7 +2890,7 @@ OpenAPI Server Code Generator (oapi-cod
Forks |
- 826 |
+ 827 |
Created |
@@ -2898,7 +2898,7 @@ OpenAPI Server Code Generator (oapi-cod
Last Updated |
- 2024-08-19T18:06:45Z |
+ 2024-08-20T19:30:42Z |
Archived |
@@ -2949,7 +2949,7 @@ swagger-js (link)
Last Updated |
- 2024-08-15T08:43:25Z |
+ 2024-08-20T23:06:53Z |
Archived |
@@ -2984,7 +2984,7 @@ openapi-generator-cli (link)
Stars |
- 1379 |
+ 1380 |
Watchers |
@@ -3000,7 +3000,7 @@ openapi-generator-cli (link)
Last Updated |
- 2024-08-20T02:56:13Z |
+ 2024-08-20T22:26:52Z |
Archived |
@@ -3188,7 +3188,7 @@ paypal-rest-api-specifications (link)
Stars |
- 172 |
+ 173 |
Watchers |
@@ -3204,7 +3204,7 @@ paypal-rest-api-specifications (link)
Last Updated |
- 2024-08-14T18:32:09Z |
+ 2024-08-20T22:11:15Z |
Archived |
@@ -3349,7 +3349,7 @@ swaggerhub-cli (link)
Forks |
- 13 |
+ 14 |
Created |
@@ -5177,7 +5177,7 @@ orval (link)
Stars |
- 2743 |
+ 2748 |
Watchers |
@@ -5185,7 +5185,7 @@ orval (link)
Forks |
- 308 |
+ 309 |
Created |
@@ -5193,7 +5193,7 @@ orval (link)
Last Updated |
- 2024-08-20T01:55:37Z |
+ 2024-08-20T21:57:49Z |
Archived |
@@ -5687,7 +5687,7 @@ kubb (link)
Stars |
- 615 |
+ 616 |
Watchers |
@@ -5695,7 +5695,7 @@ kubb (link)
Forks |
- 44 |
+ 45 |
Created |
@@ -5703,7 +5703,7 @@ kubb (link)
Last Updated |
- 2024-08-19T03:14:33Z |
+ 2024-08-20T20:09:31Z |
Archived |
@@ -6358,7 +6358,7 @@ swagger-models (link)
Forks |
- 2171 |
+ 2170 |
Created |
@@ -6511,7 +6511,7 @@ zero-rails_openapi (link)
Forks |
- 21 |
+ 20 |
Created |
diff --git a/docs/categories/converters.html b/docs/categories/converters.html
index 27d8ae81..eb32a101 100644
--- a/docs/categories/converters.html
+++ b/docs/categories/converters.html
@@ -470,7 +470,7 @@ Yes
Yes |
No |
- 1230 |
+ 1231 |
@@ -581,7 +581,7 @@ Yes |
Yes |
Yes |
- 5351 |
+ 5363 |
@@ -602,7 +602,7 @@ No |
Yes |
No |
- 2059 |
+ 2060 |
@@ -623,7 +623,7 @@ No |
Yes |
No |
- 701 |
+ 702 |
@@ -2008,7 +2008,7 @@ openapi-python-client (link)
|
Stars |
- 1230 |
+ 1231 |
Watchers |
@@ -2024,7 +2024,7 @@ openapi-python-client (link)
Last Updated |
- 2024-08-19T02:14:07Z |
+ 2024-08-20T19:41:39Z |
Archived |
@@ -2263,7 +2263,7 @@ OpenAPI TypeScript (link)
Stars |
- 5351 |
+ 5363 |
Watchers |
@@ -2279,7 +2279,7 @@ OpenAPI TypeScript (link)
Last Updated |
- 2024-08-20T03:14:29Z |
+ 2024-08-21T02:54:36Z |
Archived |
@@ -2314,7 +2314,7 @@ gnostic (link)
Stars |
- 2059 |
+ 2060 |
Watchers |
@@ -2322,7 +2322,7 @@ gnostic (link)
Forks |
- 243 |
+ 242 |
Created |
@@ -2330,7 +2330,7 @@ gnostic (link)
Last Updated |
- 2024-08-19T06:31:42Z |
+ 2024-08-20T05:59:13Z |
Archived |
@@ -2365,7 +2365,7 @@ oas-kit (link)
Stars |
- 701 |
+ 702 |
Watchers |
@@ -2381,7 +2381,7 @@ oas-kit (link)
Last Updated |
- 2024-08-10T03:02:19Z |
+ 2024-08-20T10:06:53Z |
Archived |
@@ -3452,7 +3452,7 @@ pyswagger (link)
Last Updated |
- 2024-07-17T19:59:27Z |
+ 2024-08-20T07:13:21Z |
Archived |
diff --git a/docs/categories/data-validators.html b/docs/categories/data-validators.html
index c1dfd8b4..891965d8 100644
--- a/docs/categories/data-validators.html
+++ b/docs/categories/data-validators.html
@@ -112,7 +112,7 @@ No
Yes |
Yes |
- 3413 |
+ 3415 |
@@ -221,7 +221,7 @@ No |
Yes |
Yes |
- 866 |
+ 867 |
@@ -506,7 +506,7 @@ Yes |
Yes |
Yes |
- 538 |
+ 539 |
@@ -642,7 +642,7 @@ No |
Yes |
No |
- 733 |
+ 736 |
@@ -665,7 +665,7 @@ Yes |
Yes |
No |
- 1794 |
+ 1797 |
@@ -751,7 +751,7 @@ No |
Yes |
No |
- 198 |
+ 199 |
@@ -814,7 +814,7 @@ No |
Yes |
No |
- 103 |
+ 102 |
@@ -1998,7 +1998,7 @@ tsoa (link)
|
Stars |
- 3413 |
+ 3415 |
Watchers |
@@ -2014,7 +2014,7 @@ tsoa (link)
Last Updated |
- 2024-08-19T11:10:06Z |
+ 2024-08-20T14:16:09Z |
Archived |
@@ -2053,7 +2053,7 @@ express-openapi-validator (link)
Watchers |
- 18 |
+ 19 |
Forks |
@@ -2065,7 +2065,7 @@ express-openapi-validator (link)
Last Updated |
- 2024-08-19T08:29:17Z |
+ 2024-08-20T21:39:51Z |
Archived |
@@ -2253,7 +2253,7 @@ committee (link)
Stars |
- 866 |
+ 867 |
Watchers |
@@ -2269,7 +2269,7 @@ committee (link)
Last Updated |
- 2024-08-09T09:39:02Z |
+ 2024-08-20T19:23:17Z |
Archived |
@@ -2516,7 +2516,7 @@ openapi-psr7-validator (link)
Forks |
- 90 |
+ 91 |
Created |
@@ -2916,7 +2916,7 @@ vacuum (link)
Stars |
- 538 |
+ 539 |
Watchers |
@@ -2932,7 +2932,7 @@ vacuum (link)
Last Updated |
- 2024-08-19T17:07:43Z |
+ 2024-08-20T12:04:00Z |
Archived |
@@ -3222,7 +3222,7 @@ Fuego (link)
Stars |
- 733 |
+ 736 |
Watchers |
@@ -3238,7 +3238,7 @@ Fuego (link)
Last Updated |
- 2024-08-20T00:57:14Z |
+ 2024-08-20T21:54:41Z |
Archived |
@@ -3273,7 +3273,7 @@ Huma (link)
Stars |
- 1794 |
+ 1797 |
Watchers |
@@ -3281,7 +3281,7 @@ Huma (link)
Forks |
- 136 |
+ 138 |
Created |
@@ -3289,7 +3289,7 @@ Huma (link)
Last Updated |
- 2024-08-19T15:47:04Z |
+ 2024-08-21T02:55:37Z |
Archived |
@@ -3391,7 +3391,7 @@ openapi-core (link)
Last Updated |
- 2024-08-20T01:36:31Z |
+ 2024-08-20T10:15:11Z |
Archived |
@@ -3477,7 +3477,7 @@ fastify-openapi-glue (link)
Stars |
- 198 |
+ 199 |
Watchers |
@@ -3493,7 +3493,7 @@ fastify-openapi-glue (link)
Last Updated |
- 2024-08-17T17:08:22Z |
+ 2024-08-20T14:59:53Z |
Archived |
@@ -3630,7 +3630,7 @@ openapi4j (link)
Stars |
- 103 |
+ 102 |
Watchers |
@@ -3646,7 +3646,7 @@ openapi4j (link)
Last Updated |
- 2024-04-11T10:01:36Z |
+ 2024-08-20T05:33:44Z |
Archived |
@@ -4207,7 +4207,7 @@ fastify-flux (link)
Last Updated |
- 2024-08-19T08:53:40Z |
+ 2024-08-20T16:24:02Z |
Archived |
diff --git a/docs/categories/description-validators.html b/docs/categories/description-validators.html
index 7c521634..59fd41db 100644
--- a/docs/categories/description-validators.html
+++ b/docs/categories/description-validators.html
@@ -131,7 +131,7 @@ Yes
Yes |
No |
- 191 |
+ 192 |
@@ -281,7 +281,7 @@ Yes |
Yes |
Yes |
- 890 |
+ 893 |
@@ -436,7 +436,7 @@ Yes |
Yes |
No |
- 1098 |
+ 1099 |
@@ -459,7 +459,7 @@ Yes |
Yes |
Yes |
- 538 |
+ 539 |
@@ -614,7 +614,7 @@ No |
Yes |
No |
- 592 |
+ 593 |
@@ -1759,7 +1759,7 @@ Rate My OpenAPI (link)
|
Stars |
- 191 |
+ 192 |
Watchers |
@@ -1775,7 +1775,7 @@ Rate My OpenAPI (link)
Last Updated |
- 2024-08-19T12:58:58Z |
+ 2024-08-20T14:55:48Z |
Archived |
@@ -1865,7 +1865,7 @@ express-openapi-validator (link)
Watchers |
- 18 |
+ 19 |
Forks |
@@ -1877,7 +1877,7 @@ express-openapi-validator (link)
Last Updated |
- 2024-08-19T08:29:17Z |
+ 2024-08-20T21:39:51Z |
Archived |
@@ -2030,7 +2030,7 @@ OpenAPI Style Validator (link)
Last Updated |
- 2024-08-16T01:38:44Z |
+ 2024-08-20T20:10:26Z |
Archived |
@@ -2116,7 +2116,7 @@ Redocly CLI (link)
Stars |
- 890 |
+ 893 |
Watchers |
@@ -2124,7 +2124,7 @@ Redocly CLI (link)
Forks |
- 134 |
+ 135 |
Created |
@@ -2132,7 +2132,7 @@ Redocly CLI (link)
Last Updated |
- 2024-08-19T12:15:28Z |
+ 2024-08-21T01:08:13Z |
Archived |
@@ -2473,7 +2473,7 @@ Cherrybomb (link)
Stars |
- 1098 |
+ 1099 |
Watchers |
@@ -2489,7 +2489,7 @@ Cherrybomb (link)
Last Updated |
- 2024-08-16T23:26:35Z |
+ 2024-08-20T23:48:24Z |
Archived |
@@ -2524,7 +2524,7 @@ vacuum (link)
Stars |
- 538 |
+ 539 |
Watchers |
@@ -2540,7 +2540,7 @@ vacuum (link)
Last Updated |
- 2024-08-19T17:07:43Z |
+ 2024-08-20T12:04:00Z |
Archived |
@@ -2881,7 +2881,7 @@ generator-express-no-stress (link)
Stars |
- 592 |
+ 593 |
Watchers |
@@ -2897,7 +2897,7 @@ generator-express-no-stress (link)
Last Updated |
- 2024-07-27T19:07:59Z |
+ 2024-08-20T22:38:33Z |
Archived |
diff --git a/docs/categories/documentation.html b/docs/categories/documentation.html
index 4925b808..5a8d03e5 100644
--- a/docs/categories/documentation.html
+++ b/docs/categories/documentation.html
@@ -188,7 +188,7 @@ Yes
Yes |
Yes |
- 5446 |
+ 5456 |
@@ -211,7 +211,7 @@ No |
Yes |
No |
- 1641 |
+ 1642 |
@@ -255,7 +255,7 @@ Yes |
Yes |
Yes |
- 23163 |
+ 23170 |
@@ -540,7 +540,7 @@ Yes |
Yes |
Yes |
- 890 |
+ 893 |
@@ -630,7 +630,7 @@ Yes |
Yes |
No |
- 3873 |
+ 3874 |
@@ -653,7 +653,7 @@ Yes |
Yes |
No |
- 733 |
+ 734 |
@@ -718,7 +718,7 @@ Yes |
Yes |
Yes |
- 1681 |
+ 1683 |
@@ -955,7 +955,7 @@ Yes |
Yes |
Yes |
- 2534 |
+ 2535 |
@@ -2607,11 +2607,11 @@ Scalar (link)
|
Stars |
- 5446 |
+ 5456 |
Watchers |
- 20 |
+ 19 |
Forks |
@@ -2623,7 +2623,7 @@ Scalar (link)
Last Updated |
- 2024-08-20T03:14:38Z |
+ 2024-08-21T02:46:23Z |
Archived |
@@ -2658,7 +2658,7 @@ Scribe (link)
Stars |
- 1641 |
+ 1642 |
Watchers |
@@ -2666,7 +2666,7 @@ Scribe (link)
Forks |
- 289 |
+ 290 |
Created |
@@ -2674,7 +2674,7 @@ Scribe (link)
Last Updated |
- 2024-08-20T00:56:05Z |
+ 2024-08-20T17:49:29Z |
Archived |
@@ -2760,7 +2760,7 @@ ReDoc (link)
Stars |
- 23163 |
+ 23170 |
Watchers |
@@ -2776,7 +2776,7 @@ ReDoc (link)
Last Updated |
- 2024-08-20T01:50:55Z |
+ 2024-08-21T01:09:32Z |
Archived |
@@ -3423,7 +3423,7 @@ Redocly CLI (link)
Stars |
- 890 |
+ 893 |
Watchers |
@@ -3431,7 +3431,7 @@ Redocly CLI (link)
Forks |
- 134 |
+ 135 |
Created |
@@ -3439,7 +3439,7 @@ Redocly CLI (link)
Last Updated |
- 2024-08-19T12:15:28Z |
+ 2024-08-21T01:08:13Z |
Archived |
@@ -3627,7 +3627,7 @@ OpenAPI DevTools (link)
Stars |
- 3873 |
+ 3874 |
Watchers |
@@ -3643,7 +3643,7 @@ OpenAPI DevTools (link)
Last Updated |
- 2024-08-19T04:03:55Z |
+ 2024-08-20T15:30:32Z |
Archived |
@@ -3678,7 +3678,7 @@ Restish (link)
Stars |
- 733 |
+ 734 |
Watchers |
@@ -3694,7 +3694,7 @@ Restish (link)
Last Updated |
- 2024-08-20T00:18:49Z |
+ 2024-08-20T17:34:42Z |
Archived |
@@ -3831,7 +3831,7 @@ Elements (link)
Stars |
- 1681 |
+ 1683 |
Watchers |
@@ -3839,7 +3839,7 @@ Elements (link)
Forks |
- 195 |
+ 196 |
Created |
@@ -3847,7 +3847,7 @@ Elements (link)
Last Updated |
- 2024-08-19T21:02:48Z |
+ 2024-08-20T19:33:19Z |
Archived |
@@ -4392,7 +4392,7 @@ 🌿 Fern (link)
Stars |
- 2534 |
+ 2535 |
Watchers |
@@ -4408,7 +4408,7 @@ 🌿 Fern (link)
Last Updated |
- 2024-08-20T03:13:13Z |
+ 2024-08-21T01:34:51Z |
Archived |
@@ -4663,7 +4663,7 @@ rapidoc (link)
Last Updated |
- 2024-08-19T15:39:38Z |
+ 2024-08-20T12:27:46Z |
Archived |
diff --git a/docs/categories/editors.html b/docs/categories/editors.html
index b527db9b..484bdd7c 100644
--- a/docs/categories/editors.html
+++ b/docs/categories/editors.html
@@ -91,7 +91,7 @@ No
Yes |
No |
- 1397 |
+ 1399 |
@@ -261,7 +261,7 @@ OpenAPI-gui (link)
|
Stars |
- 1397 |
+ 1399 |
Watchers |
@@ -277,7 +277,7 @@ OpenAPI-gui (link)
Last Updated |
- 2024-08-18T20:33:17Z |
+ 2024-08-20T13:45:17Z |
Archived |
diff --git a/docs/categories/gateway.html b/docs/categories/gateway.html
index 62a17da8..d085d1a0 100644
--- a/docs/categories/gateway.html
+++ b/docs/categories/gateway.html
@@ -110,7 +110,7 @@ No
Yes |
No |
- 1832 |
+ 1833 |
@@ -345,7 +345,7 @@ Fusio (link)
|
Stars |
- 1832 |
+ 1833 |
Watchers |
@@ -361,7 +361,7 @@ Fusio (link)
Last Updated |
- 2024-08-18T14:57:47Z |
+ 2024-08-20T15:08:19Z |
Archived |
diff --git a/docs/categories/gui-editors.html b/docs/categories/gui-editors.html
index 629456d1..5c34b1f1 100644
--- a/docs/categories/gui-editors.html
+++ b/docs/categories/gui-editors.html
@@ -637,7 +637,7 @@ Hackolade (link)
Last Updated |
- 2024-07-25T12:13:42Z |
+ 2024-08-20T12:20:54Z |
Archived |
@@ -680,7 +680,7 @@ Apicurio Studio (link)
Forks |
- 492 |
+ 493 |
Created |
@@ -688,7 +688,7 @@ Apicurio Studio (link)
Last Updated |
- 2024-08-15T15:06:30Z |
+ 2024-08-20T15:08:17Z |
Archived |
diff --git a/docs/categories/learning.html b/docs/categories/learning.html
index b634aaaa..7cedca3a 100644
--- a/docs/categories/learning.html
+++ b/docs/categories/learning.html
@@ -91,7 +91,7 @@ Yes
Yes |
No |
- 1335 |
+ 1336 |
@@ -346,7 +346,7 @@ optic diff (link)
|
Stars |
- 1335 |
+ 1336 |
Watchers |
@@ -362,7 +362,7 @@ optic diff (link)
Last Updated |
- 2024-08-17T06:41:01Z |
+ 2024-08-20T09:01:35Z |
Archived |
diff --git a/docs/categories/low-level-tooling.html b/docs/categories/low-level-tooling.html
index d032ed12..622a2213 100644
--- a/docs/categories/low-level-tooling.html
+++ b/docs/categories/low-level-tooling.html
@@ -91,7 +91,7 @@ No
Yes |
No |
- 3225 |
+ 3227 |
@@ -528,7 +528,7 @@
swrlab |
- 🤝 SWR Audio Lab - Public Documentation and Principles |
+ 🤝 SWR Audio Lab |
No
|
@@ -1321,7 +1321,7 @@ No |
No |
No |
- 1370 |
+ 1371 |
@@ -1461,7 +1461,7 @@ springdoc-openapi (link)
|
Stars |
- 3225 |
+ 3227 |
Watchers |
@@ -1477,7 +1477,7 @@ springdoc-openapi (link)
Last Updated |
- 2024-08-19T10:47:26Z |
+ 2024-08-20T12:22:36Z |
Archived |
@@ -2548,7 +2548,7 @@ swrlab (link)
Last Updated |
- 2024-08-02T11:46:09Z |
+ 2024-08-20T11:29:39Z |
Archived |
@@ -4376,7 +4376,7 @@ swagger-models (link)
Forks |
- 2171 |
+ 2170 |
Created |
@@ -4419,7 +4419,7 @@ Microsoft.OpenApi.net (link)
Stars |
- 1370 |
+ 1371 |
Watchers |
@@ -4435,7 +4435,7 @@ Microsoft.OpenApi.net (link)
Last Updated |
- 2024-08-19T21:41:28Z |
+ 2024-08-20T06:31:48Z |
Archived |
diff --git a/docs/categories/mock-testing.html b/docs/categories/mock-testing.html
index 1047f39c..408169ce 100644
--- a/docs/categories/mock-testing.html
+++ b/docs/categories/mock-testing.html
@@ -91,7 +91,7 @@ Yes
Yes |
Yes |
- 1314 |
+ 1315 |
@@ -145,7 +145,7 @@ Microcks (link)
|
Stars |
- 1314 |
+ 1315 |
Watchers |
@@ -161,7 +161,7 @@ Microcks (link)
Last Updated |
- 2024-08-19T07:39:04Z |
+ 2024-08-20T11:39:25Z |
Archived |
diff --git a/docs/categories/mock.html b/docs/categories/mock.html
index 24b6c2c6..27677e84 100644
--- a/docs/categories/mock.html
+++ b/docs/categories/mock.html
@@ -110,7 +110,7 @@ Yes
Yes |
Yes |
- 4177 |
+ 4182 |
@@ -304,7 +304,7 @@ Yes |
Yes |
Yes |
- 95 |
+ 96 |
@@ -543,7 +543,7 @@ No |
Yes |
Yes |
- 2743 |
+ 2748 |
@@ -821,7 +821,7 @@ Prism (link)
|
Stars |
- 4177 |
+ 4182 |
Watchers |
@@ -837,7 +837,7 @@ Prism (link)
Last Updated |
- 2024-08-19T04:00:29Z |
+ 2024-08-20T19:32:20Z |
Archived |
@@ -1280,7 +1280,7 @@ Counterfact (link)
Stars |
- 95 |
+ 96 |
Watchers |
@@ -1296,7 +1296,7 @@ Counterfact (link)
Last Updated |
- 2024-08-17T12:50:27Z |
+ 2024-08-20T13:09:08Z |
Archived |
@@ -1449,7 +1449,7 @@ Specmatic (link)
Last Updated |
- 2024-08-18T20:40:42Z |
+ 2024-08-20T18:14:40Z |
Archived |
@@ -1841,7 +1841,7 @@ orval (link)
Stars |
- 2743 |
+ 2748 |
Watchers |
@@ -1849,7 +1849,7 @@ orval (link)
Forks |
- 308 |
+ 309 |
Created |
@@ -1857,7 +1857,7 @@ orval (link)
Last Updated |
- 2024-08-20T01:55:37Z |
+ 2024-08-20T21:57:49Z |
Archived |
diff --git a/docs/categories/parsers.html b/docs/categories/parsers.html
index 14a133b5..4e28712a 100644
--- a/docs/categories/parsers.html
+++ b/docs/categories/parsers.html
@@ -91,7 +91,7 @@ Yes
Yes |
Yes |
- 23163 |
+ 23170 |
@@ -114,7 +114,7 @@ No |
Yes |
No |
- 657 |
+ 658 |
@@ -474,7 +474,7 @@ No |
Yes |
Yes |
- 3413 |
+ 3415 |
@@ -587,7 +587,7 @@ Yes |
Yes |
Yes |
- 775 |
+ 776 |
@@ -629,7 +629,7 @@ No |
Yes |
Yes |
- 116 |
+ 115 |
@@ -828,7 +828,7 @@ No |
Yes |
Yes |
- 1370 |
+ 1371 |
@@ -1414,7 +1414,7 @@ Yes |
Yes |
No |
- 1230 |
+ 1231 |
@@ -1824,7 +1824,7 @@ Yes |
Yes |
No |
- 23163 |
+ 23170 |
@@ -1845,7 +1845,7 @@ No |
Yes |
No |
- 1379 |
+ 1380 |
@@ -1866,7 +1866,7 @@ No |
Yes |
No |
- 1251 |
+ 1255 |
@@ -1971,7 +1971,7 @@ No |
Yes |
No |
- 701 |
+ 702 |
@@ -2034,7 +2034,7 @@ Yes |
Yes |
No |
- 608 |
+ 609 |
@@ -2055,7 +2055,7 @@ No |
Yes |
No |
- 486 |
+ 488 |
@@ -2097,7 +2097,7 @@ No |
Yes |
No |
- 454 |
+ 455 |
@@ -2267,7 +2267,7 @@ No |
Yes |
No |
- 237 |
+ 240 |
@@ -2416,7 +2416,7 @@ No |
Yes |
No |
- 198 |
+ 199 |
@@ -2542,7 +2542,7 @@ Yes |
Yes |
No |
- 151 |
+ 152 |
@@ -2796,7 +2796,7 @@ No |
Yes |
No |
- 103 |
+ 102 |
@@ -3516,7 +3516,7 @@ No |
Yes |
No |
- 35 |
+ 34 |
@@ -3663,7 +3663,7 @@ No |
Yes |
No |
- 27 |
+ 28 |
@@ -6399,7 +6399,7 @@ No |
Yes |
No |
- 3 |
+ 4 |
@@ -7121,14 +7121,14 @@
- trust |
- Python-Client Python-Server OpenAPI generator in Rust, Web Integration Specification / Trust |
+ python-openapi-generator-rust |
+ Typesafe Python Client and Server OpenAPI generator written in Rust / Trust |
No
|
- Link
+ Link
|
Yes |
@@ -7137,7 +7137,7 @@ 1 |
-
+
|
@@ -8961,7 +8961,7 @@ Yes
No |
No |
- 40 |
+ 41 |
@@ -10456,7 +10456,7 @@ No |
No |
No |
- 1370 |
+ 1371 |
@@ -10944,7 +10944,7 @@ ReDoc (link)
|
Stars |
- 23163 |
+ 23170 |
Watchers |
@@ -10960,7 +10960,7 @@ ReDoc (link)
Last Updated |
- 2024-08-20T01:50:55Z |
+ 2024-08-21T01:09:32Z |
Archived |
@@ -10995,7 +10995,7 @@ oasdiff (link)
Stars |
- 657 |
+ 658 |
Watchers |
@@ -11011,7 +11011,7 @@ oasdiff (link)
Last Updated |
- 2024-08-19T09:35:43Z |
+ 2024-08-20T10:55:33Z |
Archived |
@@ -11470,7 +11470,7 @@ Hackolade (link)
Last Updated |
- 2024-07-25T12:13:42Z |
+ 2024-08-20T12:20:54Z |
Archived |
@@ -11811,7 +11811,7 @@ tsoa (link)
Stars |
- 3413 |
+ 3415 |
Watchers |
@@ -11827,7 +11827,7 @@ tsoa (link)
Last Updated |
- 2024-08-19T11:10:06Z |
+ 2024-08-20T14:16:09Z |
Archived |
@@ -12066,7 +12066,7 @@ swagger-parser (link)
Stars |
- 775 |
+ 776 |
Watchers |
@@ -12082,7 +12082,7 @@ swagger-parser (link)
Last Updated |
- 2024-08-04T17:43:56Z |
+ 2024-08-20T08:06:30Z |
Archived |
@@ -12168,7 +12168,7 @@ openapi-snippet (link)
Stars |
- 116 |
+ 115 |
Watchers |
@@ -12184,7 +12184,7 @@ openapi-snippet (link)
Last Updated |
- 2024-08-13T12:52:25Z |
+ 2024-08-20T13:38:58Z |
Archived |
@@ -12592,7 +12592,7 @@ psx-api (link)
Last Updated |
- 2024-07-13T00:18:30Z |
+ 2024-08-20T21:12:36Z |
Archived |
@@ -12627,7 +12627,7 @@ Microsoft/OpenAPI.NET (link)
Stars |
- 1370 |
+ 1371 |
Watchers |
@@ -12643,7 +12643,7 @@ Microsoft/OpenAPI.NET (link)
Last Updated |
- 2024-08-19T21:41:28Z |
+ 2024-08-20T06:31:48Z |
Archived |
@@ -13953,7 +13953,7 @@ openapi-python-client (link)
Stars |
- 1230 |
+ 1231 |
Watchers |
@@ -13969,7 +13969,7 @@ openapi-python-client (link)
Last Updated |
- 2024-08-19T02:14:07Z |
+ 2024-08-20T19:41:39Z |
Archived |
@@ -14871,7 +14871,7 @@ Redoc (link)
Stars |
- 23163 |
+ 23170 |
Watchers |
@@ -14887,7 +14887,7 @@ Redoc (link)
Last Updated |
- 2024-08-20T01:50:55Z |
+ 2024-08-21T01:09:32Z |
Archived |
@@ -14922,7 +14922,7 @@ openapi-generator-cli (link)
Stars |
- 1379 |
+ 1380 |
Watchers |
@@ -14938,7 +14938,7 @@ openapi-generator-cli (link)
Last Updated |
- 2024-08-20T02:56:13Z |
+ 2024-08-20T22:26:52Z |
Archived |
@@ -14973,7 +14973,7 @@ ogen (link)
Stars |
- 1251 |
+ 1255 |
Watchers |
@@ -14989,7 +14989,7 @@ ogen (link)
Last Updated |
- 2024-08-19T06:47:34Z |
+ 2024-08-20T14:33:25Z |
Archived |
@@ -15040,7 +15040,7 @@ apispec (link)
Last Updated |
- 2024-08-12T21:48:25Z |
+ 2024-08-20T16:01:42Z |
Archived |
@@ -15228,7 +15228,7 @@ oas-kit (link)
Stars |
- 701 |
+ 702 |
Watchers |
@@ -15244,7 +15244,7 @@ oas-kit (link)
Last Updated |
- 2024-08-10T03:02:19Z |
+ 2024-08-20T10:06:53Z |
Archived |
@@ -15381,7 +15381,7 @@ openapi-tui (link)
Stars |
- 608 |
+ 609 |
Watchers |
@@ -15397,7 +15397,7 @@ openapi-tui (link)
Last Updated |
- 2024-08-17T04:25:05Z |
+ 2024-08-20T10:36:51Z |
Archived |
@@ -15432,7 +15432,7 @@ oazapfts (link)
Stars |
- 486 |
+ 488 |
Watchers |
@@ -15448,7 +15448,7 @@ oazapfts (link)
Last Updated |
- 2024-08-19T06:56:04Z |
+ 2024-08-20T19:25:50Z |
Archived |
@@ -15534,7 +15534,7 @@ swagger-autogen (link)
Stars |
- 454 |
+ 455 |
Watchers |
@@ -15550,7 +15550,7 @@ swagger-autogen (link)
Last Updated |
- 2024-08-17T19:52:00Z |
+ 2024-08-20T09:33:05Z |
Archived |
@@ -15856,7 +15856,7 @@ openapi-core (link)
Last Updated |
- 2024-08-20T01:36:31Z |
+ 2024-08-20T10:15:11Z |
Archived |
@@ -15942,7 +15942,7 @@ zod-openapi (link)
Stars |
- 237 |
+ 240 |
Watchers |
@@ -15958,7 +15958,7 @@ zod-openapi (link)
Last Updated |
- 2024-08-18T08:35:05Z |
+ 2024-08-20T23:27:52Z |
Archived |
@@ -16299,7 +16299,7 @@ fastify-openapi-glue (link)
Stars |
- 198 |
+ 199 |
Watchers |
@@ -16315,7 +16315,7 @@ fastify-openapi-glue (link)
Last Updated |
- 2024-08-17T17:08:22Z |
+ 2024-08-20T14:59:53Z |
Archived |
@@ -16468,7 +16468,7 @@ speakeasy (link)
Last Updated |
- 2024-08-19T14:15:11Z |
+ 2024-08-20T16:22:14Z |
Archived |
@@ -16519,7 +16519,7 @@ refitter (link)
Last Updated |
- 2024-08-17T05:52:56Z |
+ 2024-08-20T12:40:00Z |
Archived |
@@ -16605,7 +16605,7 @@ openapi-starter (link)
Stars |
- 151 |
+ 152 |
Watchers |
@@ -16621,7 +16621,7 @@ openapi-starter (link)
Last Updated |
- 2024-08-17T08:26:55Z |
+ 2024-08-20T06:06:11Z |
Archived |
@@ -17182,7 +17182,7 @@ openapi (link)
Last Updated |
- 2024-08-13T13:35:13Z |
+ 2024-08-20T16:39:07Z |
Archived |
@@ -17217,7 +17217,7 @@ openapi4j (link)
Stars |
- 103 |
+ 102 |
Watchers |
@@ -17233,7 +17233,7 @@ openapi4j (link)
Last Updated |
- 2024-04-11T10:01:36Z |
+ 2024-08-20T05:33:44Z |
Archived |
@@ -17794,7 +17794,7 @@ apidom (link)
Last Updated |
- 2024-08-19T23:27:56Z |
+ 2024-08-20T23:53:56Z |
Archived |
@@ -18092,7 +18092,7 @@ openapi (link)
Forks |
- 90 |
+ 89 |
Created |
@@ -18951,7 +18951,7 @@ openapi-schemas (link)
Stars |
- 35 |
+ 34 |
Watchers |
@@ -18967,7 +18967,7 @@ openapi-schemas (link)
Last Updated |
- 2024-04-26T01:06:22Z |
+ 2024-08-20T05:33:54Z |
Archived |
@@ -19120,7 +19120,7 @@ openapi-examples (link)
Last Updated |
- 2024-08-18T00:25:12Z |
+ 2024-08-21T00:22:35Z |
Archived |
@@ -19308,7 +19308,7 @@ openapi-extract (link)
Stars |
- 27 |
+ 28 |
Watchers |
@@ -19324,7 +19324,7 @@ openapi-extract (link)
Last Updated |
- 2024-06-06T23:46:19Z |
+ 2024-08-20T10:03:54Z |
Archived |
@@ -20242,7 +20242,7 @@ go-oas3 (link)
Last Updated |
- 2024-08-19T13:57:59Z |
+ 2024-08-20T14:54:25Z |
Archived |
@@ -20548,7 +20548,7 @@ api-typing (link)
Last Updated |
- 2024-07-31T13:33:35Z |
+ 2024-08-20T07:51:30Z |
Archived |
@@ -21568,7 +21568,7 @@ fastify-flux (link)
Last Updated |
- 2024-08-19T08:53:40Z |
+ 2024-08-20T16:24:02Z |
Archived |
@@ -25036,7 +25036,7 @@ openapi-server-url-templating (link)
Last Updated |
- 2024-08-09T23:00:32Z |
+ 2024-08-20T22:27:53Z |
Archived |
@@ -25938,7 +25938,7 @@ docserver (link)
Stars |
- 3 |
+ 4 |
Watchers |
@@ -25954,7 +25954,7 @@ docserver (link)
Last Updated |
- 2023-09-22T16:20:55Z |
+ 2024-08-20T08:02:50Z |
Archived |
@@ -26362,7 +26362,7 @@ openapi-path-templating (link)
Last Updated |
- 2024-08-07T19:04:00Z |
+ 2024-08-20T18:14:52Z |
Archived |
@@ -27704,10 +27704,10 @@
Last Updated |
- 2024-08-19T17:57:10Z |
+ 2024-08-20T17:27:24Z |
Archived |
@@ -32125,7 +32125,7 @@ utoipa (link)
Last Updated |
- 2024-08-19T18:10:57Z |
+ 2024-08-20T20:23:14Z |
Archived |
@@ -32160,7 +32160,7 @@ oas_rails (link)
Stars |
- 40 |
+ 41 |
Watchers |
@@ -32176,7 +32176,7 @@ oas_rails (link)
Last Updated |
- 2024-08-19T14:39:32Z |
+ 2024-08-20T15:45:32Z |
Archived |
@@ -35781,7 +35781,7 @@ Microsoft.OpenApi.net (link)
Stars |
- 1370 |
+ 1371 |
Watchers |
@@ -35797,7 +35797,7 @@ Microsoft.OpenApi.net (link)
Last Updated |
- 2024-08-19T21:41:28Z |
+ 2024-08-20T06:31:48Z |
Archived |
@@ -42204,10 +42204,10 @@ prettyrestdoc (link)
document
- .getElementById("53fec6c82b59b3e470d51c6bf9d59f4d-open-button")
+ .getElementById("543ce5060a72d51fc2b5db044476e02f-open-button")
.onclick = function () {
const wrapper = document.getElementById("tool-content")
- const content = document.getElementById("53fec6c82b59b3e470d51c6bf9d59f4d-info")
+ const content = document.getElementById("543ce5060a72d51fc2b5db044476e02f-info")
content.removeAttribute("hidden")
diff --git a/docs/categories/schema-validators.html b/docs/categories/schema-validators.html
index 94b952ea..17422eae 100644
--- a/docs/categories/schema-validators.html
+++ b/docs/categories/schema-validators.html
@@ -112,7 +112,7 @@ No
Yes |
No |
- 103 |
+ 102 |
@@ -217,7 +217,7 @@ openapi4j (link)
|
Stars |
- 103 |
+ 102 |
Watchers |
@@ -233,7 +233,7 @@ openapi4j (link)
Last Updated |
- 2024-04-11T10:01:36Z |
+ 2024-08-20T05:33:44Z |
Archived |
diff --git a/docs/categories/sdk.html b/docs/categories/sdk.html
index aba4d448..8715e295 100644
--- a/docs/categories/sdk.html
+++ b/docs/categories/sdk.html
@@ -114,7 +114,7 @@ No
Yes |
Yes |
- 21058 |
+ 21066 |
@@ -160,7 +160,7 @@ No |
Yes |
Yes |
- 2742 |
+ 2750 |
@@ -206,7 +206,7 @@ Yes |
Yes |
Yes |
- 1314 |
+ 1315 |
@@ -359,7 +359,7 @@ No |
Yes |
Yes |
- 6663 |
+ 6665 |
@@ -403,7 +403,7 @@ No |
Yes |
Yes |
- 4569 |
+ 4570 |
@@ -514,7 +514,7 @@ No |
Yes |
Yes |
- 12411 |
+ 12420 |
@@ -652,7 +652,7 @@ Yes |
Yes |
Yes |
- 95 |
+ 96 |
@@ -742,7 +742,7 @@ Yes |
Yes |
Yes |
- 2534 |
+ 2535 |
@@ -809,7 +809,7 @@ Yes |
Yes |
No |
- 1334 |
+ 1336 |
@@ -832,7 +832,7 @@ Yes |
Yes |
No |
- 23 |
+ 24 |
@@ -855,7 +855,7 @@ Yes |
Yes |
Yes |
- 5351 |
+ 5363 |
@@ -876,7 +876,7 @@ No |
Yes |
No |
- 4038 |
+ 4039 |
@@ -897,7 +897,7 @@ No |
Yes |
No |
- 3808 |
+ 3810 |
@@ -918,7 +918,7 @@ No |
Yes |
No |
- 870 |
+ 885 |
@@ -1044,7 +1044,7 @@ No |
Yes |
No |
- 193 |
+ 194 |
@@ -1149,7 +1149,7 @@ No |
Yes |
No |
- 52 |
+ 53 |
@@ -3146,7 +3146,7 @@ OpenAPI Generator (link)
|
Stars |
- 21058 |
+ 21066 |
Watchers |
@@ -3154,7 +3154,7 @@ OpenAPI Generator (link)
Forks |
- 6382 |
+ 6388 |
Created |
@@ -3162,7 +3162,7 @@ OpenAPI Generator (link)
Last Updated |
- 2024-08-20T01:50:16Z |
+ 2024-08-21T01:06:53Z |
Archived |
@@ -3248,7 +3248,7 @@ Kiota Api Client Generator (link)
Stars |
- 2742 |
+ 2750 |
Watchers |
@@ -3256,7 +3256,7 @@ Kiota Api Client Generator (link)
Forks |
- 184 |
+ 185 |
Created |
@@ -3264,7 +3264,7 @@ Kiota Api Client Generator (link)
Last Updated |
- 2024-08-20T02:16:53Z |
+ 2024-08-21T01:55:03Z |
Archived |
@@ -3350,7 +3350,7 @@ Microcks (link)
Stars |
- 1314 |
+ 1315 |
Watchers |
@@ -3366,7 +3366,7 @@ Microcks (link)
Last Updated |
- 2024-08-19T07:39:04Z |
+ 2024-08-20T11:39:25Z |
Archived |
@@ -3707,7 +3707,7 @@ NSwag (link)
Stars |
- 6663 |
+ 6665 |
Watchers |
@@ -3715,7 +3715,7 @@ NSwag (link)
Forks |
- 1229 |
+ 1230 |
Created |
@@ -3723,7 +3723,7 @@ NSwag (link)
Last Updated |
- 2024-08-19T11:29:09Z |
+ 2024-08-20T14:43:30Z |
Archived |
@@ -3809,11 +3809,11 @@ Azure AutoRest (link)
Stars |
- 4569 |
+ 4570 |
Watchers |
- 874 |
+ 875 |
Forks |
@@ -3825,7 +3825,7 @@ Azure AutoRest (link)
Last Updated |
- 2024-08-19T08:31:22Z |
+ 2024-08-20T21:30:27Z |
Archived |
@@ -4064,7 +4064,7 @@ OWASP ZAP (link)
Stars |
- 12411 |
+ 12420 |
Watchers |
@@ -4072,7 +4072,7 @@ OWASP ZAP (link)
Forks |
- 2219 |
+ 2222 |
Created |
@@ -4080,7 +4080,7 @@ OWASP ZAP (link)
Last Updated |
- 2024-08-19T23:18:50Z |
+ 2024-08-20T23:51:20Z |
Archived |
@@ -4370,7 +4370,7 @@ Counterfact (link)
Stars |
- 95 |
+ 96 |
Watchers |
@@ -4386,7 +4386,7 @@ Counterfact (link)
Last Updated |
- 2024-08-17T12:50:27Z |
+ 2024-08-20T13:09:08Z |
Archived |
@@ -4574,7 +4574,7 @@ 🌿 Fern (link)
Stars |
- 2534 |
+ 2535 |
Watchers |
@@ -4590,7 +4590,7 @@ 🌿 Fern (link)
Last Updated |
- 2024-08-20T03:13:13Z |
+ 2024-08-21T01:34:51Z |
Archived |
@@ -4727,7 +4727,7 @@ Swift OpenAPI Generator (link)
Stars |
- 1334 |
+ 1336 |
Watchers |
@@ -4743,7 +4743,7 @@ Swift OpenAPI Generator (link)
Last Updated |
- 2024-08-20T00:04:22Z |
+ 2024-08-20T19:24:09Z |
Archived |
@@ -4778,7 +4778,7 @@ OpenAPI Qraft (link)
Stars |
- 23 |
+ 24 |
Watchers |
@@ -4794,7 +4794,7 @@ OpenAPI Qraft (link)
Last Updated |
- 2024-08-19T20:11:16Z |
+ 2024-08-21T03:25:10Z |
Archived |
@@ -4829,7 +4829,7 @@ OpenAPI TypeScript (link)
Stars |
- 5351 |
+ 5363 |
Watchers |
@@ -4845,7 +4845,7 @@ OpenAPI TypeScript (link)
Last Updated |
- 2024-08-20T03:14:29Z |
+ 2024-08-21T02:54:36Z |
Archived |
@@ -4880,7 +4880,7 @@ knife4j (link)
Stars |
- 4038 |
+ 4039 |
Watchers |
@@ -4896,7 +4896,7 @@ knife4j (link)
Last Updated |
- 2024-08-19T10:15:55Z |
+ 2024-08-20T05:02:40Z |
Archived |
@@ -4931,7 +4931,7 @@ openapi-directory (link)
Stars |
- 3808 |
+ 3810 |
Watchers |
@@ -4939,7 +4939,7 @@ openapi-directory (link)
Forks |
- 569 |
+ 570 |
Created |
@@ -4947,7 +4947,7 @@ openapi-directory (link)
Last Updated |
- 2024-08-20T03:10:11Z |
+ 2024-08-20T15:49:08Z |
Archived |
@@ -4982,7 +4982,7 @@ openapi-ts (link)
Stars |
- 870 |
+ 885 |
Watchers |
@@ -4998,7 +4998,7 @@ openapi-ts (link)
Last Updated |
- 2024-08-19T20:00:21Z |
+ 2024-08-21T03:22:43Z |
Archived |
@@ -5041,7 +5041,7 @@ docusaurus-openapi (link)
Forks |
- 81 |
+ 82 |
Created |
@@ -5288,7 +5288,7 @@ openapi-typescript-code-generator (link
Stars |
- 193 |
+ 194 |
Watchers |
@@ -5304,7 +5304,7 @@ openapi-typescript-code-generator (link
Last Updated |
- 2024-07-11T02:26:37Z |
+ 2024-08-20T19:35:49Z |
Archived |
@@ -5543,7 +5543,7 @@ sideko (link)
Stars |
- 52 |
+ 53 |
Watchers |
@@ -5559,7 +5559,7 @@ sideko (link)
Last Updated |
- 2024-08-14T13:47:11Z |
+ 2024-08-20T03:52:05Z |
Archived |
diff --git a/docs/categories/security.html b/docs/categories/security.html
index fcb4bf9a..831c4bb8 100644
--- a/docs/categories/security.html
+++ b/docs/categories/security.html
@@ -91,7 +91,7 @@ Yes
Yes |
No |
- 191 |
+ 192 |
@@ -198,7 +198,7 @@ Yes |
Yes |
Yes |
- 1132 |
+ 1131 |
@@ -240,7 +240,7 @@ No |
Yes |
Yes |
- 12411 |
+ 12420 |
@@ -326,7 +326,7 @@ No |
Yes |
Yes |
- 2549 |
+ 2550 |
@@ -380,7 +380,7 @@ Rate My OpenAPI (link)
|
Stars |
- 191 |
+ 192 |
Watchers |
@@ -396,7 +396,7 @@ Rate My OpenAPI (link)
Last Updated |
- 2024-08-19T12:58:58Z |
+ 2024-08-20T14:55:48Z |
Archived |
@@ -635,7 +635,7 @@ cats (link)
Stars |
- 1132 |
+ 1131 |
Watchers |
@@ -651,7 +651,7 @@ cats (link)
Last Updated |
- 2024-08-16T09:25:40Z |
+ 2024-08-20T15:20:53Z |
Archived |
@@ -737,7 +737,7 @@ OWASP ZAP (link)
Stars |
- 12411 |
+ 12420 |
Watchers |
@@ -745,7 +745,7 @@ OWASP ZAP (link)
Forks |
- 2219 |
+ 2222 |
Created |
@@ -753,7 +753,7 @@ OWASP ZAP (link)
Last Updated |
- 2024-08-19T23:18:50Z |
+ 2024-08-20T23:51:20Z |
Archived |
@@ -941,7 +941,7 @@ RESTler (link)
Stars |
- 2549 |
+ 2550 |
Watchers |
@@ -949,7 +949,7 @@ RESTler (link)
Forks |
- 289 |
+ 288 |
Created |
@@ -957,7 +957,7 @@ RESTler (link)
Last Updated |
- 2024-08-19T10:10:56Z |
+ 2024-08-20T10:54:30Z |
Archived |
diff --git a/docs/categories/server-implementations.html b/docs/categories/server-implementations.html
index 1e2e9c88..8a9fa5bc 100644
--- a/docs/categories/server-implementations.html
+++ b/docs/categories/server-implementations.html
@@ -91,7 +91,7 @@ No
Yes |
Yes |
- 4470 |
+ 4471 |
@@ -114,7 +114,7 @@ Yes |
Yes |
No |
- 191 |
+ 192 |
@@ -160,7 +160,7 @@ Yes |
Yes |
No |
- 1335 |
+ 1336 |
@@ -344,7 +344,7 @@ Yes |
Yes |
Yes |
- 4177 |
+ 4182 |
@@ -367,7 +367,7 @@ No |
Yes |
Yes |
- 8413 |
+ 8415 |
@@ -390,7 +390,7 @@ No |
Yes |
No |
- 1832 |
+ 1833 |
@@ -434,7 +434,7 @@ Yes |
Yes |
Yes |
- 890 |
+ 893 |
@@ -457,7 +457,7 @@ Yes |
Yes |
Yes |
- 1132 |
+ 1131 |
@@ -480,7 +480,7 @@ No |
Yes |
No |
- 4982 |
+ 4984 |
@@ -549,7 +549,7 @@ No |
Yes |
No |
- 4057 |
+ 4061 |
@@ -616,7 +616,7 @@ No |
Yes |
No |
- 28026 |
+ 28034 |
@@ -685,7 +685,7 @@ Yes |
Yes |
Yes |
- 95 |
+ 96 |
@@ -754,7 +754,7 @@ No |
Yes |
No |
- 74774 |
+ 74807 |
@@ -777,7 +777,7 @@ No |
Yes |
No |
- 3225 |
+ 3227 |
@@ -798,7 +798,7 @@ No |
Yes |
No |
- 2671 |
+ 2675 |
@@ -819,7 +819,7 @@ No |
Yes |
No |
- 2268 |
+ 2269 |
@@ -863,7 +863,7 @@ No |
Yes |
No |
- 2187 |
+ 2190 |
@@ -907,7 +907,7 @@ No |
Yes |
No |
- 1397 |
+ 1399 |
@@ -993,7 +993,7 @@ No |
Yes |
No |
- 471 |
+ 472 |
@@ -1056,7 +1056,7 @@ No |
Yes |
No |
- 404 |
+ 405 |
@@ -1119,7 +1119,7 @@ No |
Yes |
No |
- 353 |
+ 355 |
@@ -1394,7 +1394,7 @@ No |
Yes |
No |
- 130 |
+ 137 |
@@ -1415,7 +1415,7 @@ No |
Yes |
No |
- 109 |
+ 110 |
@@ -3526,7 +3526,7 @@
swrlab |
- 🤝 SWR Audio Lab - Public Documentation and Principles |
+ 🤝 SWR Audio Lab |
No
|
@@ -9065,7 +9065,7 @@ No |
Yes |
No |
- 25483 |
+ 25500 |
@@ -11506,7 +11506,7 @@ Connexion (link)
|
Stars |
- 4470 |
+ 4471 |
Watchers |
@@ -11522,7 +11522,7 @@ Connexion (link)
Last Updated |
- 2024-08-19T23:34:53Z |
+ 2024-08-21T02:02:35Z |
Archived |
@@ -11557,7 +11557,7 @@ Rate My OpenAPI (link)
Stars |
- 191 |
+ 192 |
Watchers |
@@ -11573,7 +11573,7 @@ Rate My OpenAPI (link)
Last Updated |
- 2024-08-19T12:58:58Z |
+ 2024-08-20T14:55:48Z |
Archived |
@@ -11659,7 +11659,7 @@ optic diff (link)
Stars |
- 1335 |
+ 1336 |
Watchers |
@@ -11675,7 +11675,7 @@ optic diff (link)
Last Updated |
- 2024-08-17T06:41:01Z |
+ 2024-08-20T09:01:35Z |
Archived |
@@ -11973,7 +11973,7 @@ Swagger Editor (link)
Forks |
- 2236 |
+ 2235 |
Created |
@@ -12024,7 +12024,7 @@ Apicurio Studio (link)
Forks |
- 492 |
+ 493 |
Created |
@@ -12032,7 +12032,7 @@ Apicurio Studio (link)
Last Updated |
- 2024-08-15T15:06:30Z |
+ 2024-08-20T15:08:17Z |
Archived |
@@ -12067,7 +12067,7 @@ Prism (link)
Stars |
- 4177 |
+ 4182 |
Watchers |
@@ -12083,7 +12083,7 @@ Prism (link)
Last Updated |
- 2024-08-19T04:00:29Z |
+ 2024-08-20T19:32:20Z |
Archived |
@@ -12118,7 +12118,7 @@ API Platform (link)
Stars |
- 8413 |
+ 8415 |
Watchers |
@@ -12126,7 +12126,7 @@ API Platform (link)
Forks |
- 950 |
+ 951 |
Created |
@@ -12134,7 +12134,7 @@ API Platform (link)
Last Updated |
- 2024-08-19T03:30:05Z |
+ 2024-08-20T12:47:05Z |
Archived |
@@ -12169,7 +12169,7 @@ Fusio (link)
Stars |
- 1832 |
+ 1833 |
Watchers |
@@ -12185,7 +12185,7 @@ Fusio (link)
Last Updated |
- 2024-08-18T14:57:47Z |
+ 2024-08-20T15:08:19Z |
Archived |
@@ -12271,7 +12271,7 @@ Redocly CLI (link)
Stars |
- 890 |
+ 893 |
Watchers |
@@ -12279,7 +12279,7 @@ Redocly CLI (link)
Forks |
- 134 |
+ 135 |
Created |
@@ -12287,7 +12287,7 @@ Redocly CLI (link)
Last Updated |
- 2024-08-19T12:15:28Z |
+ 2024-08-21T01:08:13Z |
Archived |
@@ -12322,7 +12322,7 @@ cats (link)
Stars |
- 1132 |
+ 1131 |
Watchers |
@@ -12338,7 +12338,7 @@ cats (link)
Last Updated |
- 2024-08-16T09:25:40Z |
+ 2024-08-20T15:20:53Z |
Archived |
@@ -12373,7 +12373,7 @@ mitmproxy2swagger (link)
Stars |
- 4982 |
+ 4984 |
Watchers |
@@ -12389,7 +12389,7 @@ mitmproxy2swagger (link)
Last Updated |
- 2024-08-18T21:48:38Z |
+ 2024-08-20T11:49:37Z |
Archived |
@@ -12526,7 +12526,7 @@ TypeSpec (link)
Stars |
- 4057 |
+ 4061 |
Watchers |
@@ -12542,7 +12542,7 @@ TypeSpec (link)
Last Updated |
- 2024-08-20T02:14:01Z |
+ 2024-08-20T23:48:58Z |
Archived |
@@ -12679,15 +12679,15 @@ Django REST Framework (link)
Stars |
- 28026 |
+ 28034 |
Watchers |
- 623 |
+ 622 |
Forks |
- 6794 |
+ 6795 |
Created |
@@ -12695,7 +12695,7 @@ Django REST Framework (link)
Last Updated |
- 2024-08-20T02:42:01Z |
+ 2024-08-20T23:27:57Z |
Archived |
@@ -12832,7 +12832,7 @@ Counterfact (link)
Stars |
- 95 |
+ 96 |
Watchers |
@@ -12848,7 +12848,7 @@ Counterfact (link)
Last Updated |
- 2024-08-17T12:50:27Z |
+ 2024-08-20T13:09:08Z |
Archived |
@@ -12985,7 +12985,7 @@ FastAPI (link)
Stars |
- 74774 |
+ 74807 |
Watchers |
@@ -12993,7 +12993,7 @@ FastAPI (link)
Forks |
- 6295 |
+ 6298 |
Created |
@@ -13001,7 +13001,7 @@ FastAPI (link)
Last Updated |
- 2024-08-20T03:25:40Z |
+ 2024-08-21T03:23:09Z |
Archived |
@@ -13036,7 +13036,7 @@ springdoc-openapi (link)
Stars |
- 3225 |
+ 3227 |
Watchers |
@@ -13052,7 +13052,7 @@ springdoc-openapi (link)
Last Updated |
- 2024-08-19T10:47:26Z |
+ 2024-08-20T12:22:36Z |
Archived |
@@ -13087,7 +13087,7 @@ uvicorn-gunicorn-fastapi-docker (link)<
Stars |
- 2671 |
+ 2675 |
Watchers |
@@ -13103,7 +13103,7 @@ uvicorn-gunicorn-fastapi-docker (link)<
Last Updated |
- 2024-08-19T16:10:59Z |
+ 2024-08-21T02:22:04Z |
Archived |
@@ -13138,7 +13138,7 @@ drf-spectacular (link)
Stars |
- 2268 |
+ 2269 |
Watchers |
@@ -13154,7 +13154,7 @@ drf-spectacular (link)
Last Updated |
- 2024-08-19T13:38:27Z |
+ 2024-08-20T06:28:40Z |
Archived |
@@ -13197,7 +13197,7 @@ Schemathesis (link)
Forks |
- 152 |
+ 153 |
Created |
@@ -13205,7 +13205,7 @@ Schemathesis (link)
Last Updated |
- 2024-08-19T22:00:47Z |
+ 2024-08-20T19:37:57Z |
Archived |
@@ -13240,7 +13240,7 @@ msgspec (link)
Stars |
- 2187 |
+ 2190 |
Watchers |
@@ -13256,7 +13256,7 @@ msgspec (link)
Last Updated |
- 2024-08-19T20:18:49Z |
+ 2024-08-20T17:00:32Z |
Archived |
@@ -13307,7 +13307,7 @@ rapidoc (link)
Last Updated |
- 2024-08-19T15:39:38Z |
+ 2024-08-20T12:27:46Z |
Archived |
@@ -13342,7 +13342,7 @@ OpenAPI-gui (link)
Stars |
- 1397 |
+ 1399 |
Watchers |
@@ -13358,7 +13358,7 @@ OpenAPI-gui (link)
Last Updated |
- 2024-08-18T20:33:17Z |
+ 2024-08-20T13:45:17Z |
Archived |
@@ -13546,7 +13546,7 @@ stackql (link)
Stars |
- 471 |
+ 472 |
Watchers |
@@ -13562,7 +13562,7 @@ stackql (link)
Last Updated |
- 2024-08-19T22:11:58Z |
+ 2024-08-20T06:08:54Z |
Archived |
@@ -13699,7 +13699,7 @@ safrs (link)
Stars |
- 404 |
+ 405 |
Watchers |
@@ -13715,7 +13715,7 @@ safrs (link)
Last Updated |
- 2024-08-02T04:10:02Z |
+ 2024-08-21T03:23:01Z |
Archived |
@@ -13852,7 +13852,7 @@ fastapi-clean-example (link)
Stars |
- 353 |
+ 355 |
Watchers |
@@ -13868,7 +13868,7 @@ fastapi-clean-example (link)
Last Updated |
- 2024-08-19T08:11:05Z |
+ 2024-08-21T03:02:30Z |
Archived |
@@ -14515,7 +14515,7 @@ typescript-backend-toolkit (link)
Stars |
- 130 |
+ 137 |
Watchers |
@@ -14523,7 +14523,7 @@ typescript-backend-toolkit (link)
Forks |
- 23 |
+ 24 |
Created |
@@ -14531,7 +14531,7 @@ typescript-backend-toolkit (link)
Last Updated |
- 2024-08-19T18:36:53Z |
+ 2024-08-21T00:34:52Z |
Archived |
@@ -14566,7 +14566,7 @@ spring-boot-3-jwt-auth (link)
Stars |
- 109 |
+ 110 |
Watchers |
@@ -14582,7 +14582,7 @@ spring-boot-3-jwt-auth (link)
Last Updated |
- 2024-07-17T15:49:28Z |
+ 2024-08-20T12:57:24Z |
Archived |
@@ -14837,7 +14837,7 @@ tools.openapis.org (link)
Last Updated |
- 2024-08-19T03:28:02Z |
+ 2024-08-20T03:36:53Z |
Archived |
@@ -15131,7 +15131,7 @@ amala (link)
Watchers |
- 6 |
+ 5 |
Forks |
@@ -16928,7 +16928,7 @@ redocly-cli-cookbook (link)
Last Updated |
- 2024-08-15T14:26:53Z |
+ 2024-08-20T07:59:01Z |
Archived |
@@ -19733,7 +19733,7 @@ swrlab (link)
Last Updated |
- 2024-08-02T11:46:09Z |
+ 2024-08-20T11:29:39Z |
Archived |
@@ -20855,7 +20855,7 @@ angular-demo-application-source (link)<
Last Updated |
- 2024-07-12T17:21:46Z |
+ 2024-08-20T13:36:33Z |
Archived |
@@ -30290,7 +30290,7 @@ eventbridge (link)
Last Updated |
- 2024-08-09T17:24:36Z |
+ 2024-08-20T12:20:41Z |
Archived |
@@ -33130,7 +33130,7 @@ full-stack-fastapi-template (link)
Stars |
- 25483 |
+ 25500 |
Watchers |
@@ -33138,7 +33138,7 @@ full-stack-fastapi-template (link)
Forks |
- 4363 |
+ 4367 |
Created |
@@ -33146,7 +33146,7 @@ full-stack-fastapi-template (link)
Last Updated |
- 2024-08-20T02:37:01Z |
+ 2024-08-21T02:45:08Z |
Archived |
@@ -37787,7 +37787,7 @@ PHP-CRUD-API (link)
Last Updated |
- 2024-08-15T21:53:19Z |
+ 2024-08-20T09:57:48Z |
Archived |
@@ -38909,7 +38909,7 @@ pyswagger (link)
Last Updated |
- 2024-07-17T19:59:27Z |
+ 2024-08-20T07:13:21Z |
Archived |
diff --git a/docs/categories/server.html b/docs/categories/server.html
index 5b483f59..0eac17e6 100644
--- a/docs/categories/server.html
+++ b/docs/categories/server.html
@@ -91,7 +91,7 @@ No
Yes |
Yes |
- 4470 |
+ 4471 |
@@ -114,7 +114,7 @@ No |
Yes |
Yes |
- 3413 |
+ 3415 |
@@ -160,7 +160,7 @@ No |
Yes |
Yes |
- 885 |
+ 886 |
@@ -229,7 +229,7 @@ No |
Yes |
Yes |
- 8413 |
+ 8415 |
@@ -275,7 +275,7 @@ No |
Yes |
No |
- 1832 |
+ 1833 |
@@ -342,7 +342,7 @@ No |
Yes |
No |
- 1656 |
+ 1657 |
@@ -546,7 +546,7 @@ Yes |
Yes |
Yes |
- 2534 |
+ 2535 |
@@ -569,7 +569,7 @@ Yes |
Yes |
No |
- 1334 |
+ 1336 |
@@ -592,7 +592,7 @@ No |
Yes |
No |
- 733 |
+ 736 |
@@ -615,7 +615,7 @@ Yes |
Yes |
No |
- 1794 |
+ 1797 |
@@ -2771,7 +2771,7 @@ No |
Yes |
No |
- 4913 |
+ 4914 |
@@ -2892,7 +2892,7 @@ Connexion (link)
|
Stars |
- 4470 |
+ 4471 |
Watchers |
@@ -2908,7 +2908,7 @@ Connexion (link)
Last Updated |
- 2024-08-19T23:34:53Z |
+ 2024-08-21T02:02:35Z |
Archived |
@@ -2943,7 +2943,7 @@ tsoa (link)
Stars |
- 3413 |
+ 3415 |
Watchers |
@@ -2959,7 +2959,7 @@ tsoa (link)
Last Updated |
- 2024-08-19T11:10:06Z |
+ 2024-08-20T14:16:09Z |
Archived |
@@ -3045,7 +3045,7 @@ express-openapi (link)
Stars |
- 885 |
+ 886 |
Watchers |
@@ -3061,7 +3061,7 @@ express-openapi (link)
Last Updated |
- 2024-07-30T16:02:01Z |
+ 2024-08-20T19:28:20Z |
Archived |
@@ -3198,7 +3198,7 @@ API Platform (link)
Stars |
- 8413 |
+ 8415 |
Watchers |
@@ -3206,7 +3206,7 @@ API Platform (link)
Forks |
- 950 |
+ 951 |
Created |
@@ -3214,7 +3214,7 @@ API Platform (link)
Last Updated |
- 2024-08-19T03:30:05Z |
+ 2024-08-20T12:47:05Z |
Archived |
@@ -3300,7 +3300,7 @@ Fusio (link)
Stars |
- 1832 |
+ 1833 |
Watchers |
@@ -3316,7 +3316,7 @@ Fusio (link)
Last Updated |
- 2024-08-18T14:57:47Z |
+ 2024-08-20T15:08:19Z |
Archived |
@@ -3453,7 +3453,7 @@ @nestjs/swagger (link)
Stars |
- 1656 |
+ 1657 |
Watchers |
@@ -3461,7 +3461,7 @@ @nestjs/swagger (link)
Forks |
- 457 |
+ 458 |
Created |
@@ -3469,7 +3469,7 @@ @nestjs/swagger (link)
Last Updated |
- 2024-08-20T03:05:52Z |
+ 2024-08-20T19:01:47Z |
Archived |
@@ -3661,7 +3661,7 @@ SpringFox (link)
Watchers |
- 266 |
+ 265 |
Forks |
@@ -3912,7 +3912,7 @@ 🌿 Fern (link)
Stars |
- 2534 |
+ 2535 |
Watchers |
@@ -3928,7 +3928,7 @@ 🌿 Fern (link)
Last Updated |
- 2024-08-20T03:13:13Z |
+ 2024-08-21T01:34:51Z |
Archived |
@@ -3963,7 +3963,7 @@ Swift OpenAPI Generator (link)
Stars |
- 1334 |
+ 1336 |
Watchers |
@@ -3979,7 +3979,7 @@ Swift OpenAPI Generator (link)
Last Updated |
- 2024-08-20T00:04:22Z |
+ 2024-08-20T19:24:09Z |
Archived |
@@ -4014,7 +4014,7 @@ Fuego (link)
Stars |
- 733 |
+ 736 |
Watchers |
@@ -4030,7 +4030,7 @@ Fuego (link)
Last Updated |
- 2024-08-20T00:57:14Z |
+ 2024-08-20T21:54:41Z |
Archived |
@@ -4065,7 +4065,7 @@ Huma (link)
Stars |
- 1794 |
+ 1797 |
Watchers |
@@ -4073,7 +4073,7 @@ Huma (link)
Forks |
- 136 |
+ 138 |
Created |
@@ -4081,7 +4081,7 @@ Huma (link)
Last Updated |
- 2024-08-19T15:47:04Z |
+ 2024-08-21T02:55:37Z |
Archived |
@@ -7549,7 +7549,7 @@ eventbridge (link)
Last Updated |
- 2024-08-09T17:24:36Z |
+ 2024-08-20T12:20:41Z |
Archived |
@@ -9267,11 +9267,11 @@ LoopBack 4 (link)
Stars |
- 4913 |
+ 4914 |
Watchers |
- 137 |
+ 136 |
Forks |
@@ -9283,7 +9283,7 @@ LoopBack 4 (link)
Last Updated |
- 2024-08-19T18:56:09Z |
+ 2024-08-20T07:31:57Z |
Archived |
diff --git a/docs/categories/testing-tools.html b/docs/categories/testing-tools.html
index 8998af41..fc6a2981 100644
--- a/docs/categories/testing-tools.html
+++ b/docs/categories/testing-tools.html
@@ -250,7 +250,7 @@ Schemathesis (link)
Forks |
- 152 |
+ 153 |
Created |
@@ -258,7 +258,7 @@ Schemathesis (link)
Last Updated |
- 2024-08-19T22:00:47Z |
+ 2024-08-20T19:37:57Z |
Archived |
diff --git a/docs/categories/testing.html b/docs/categories/testing.html
index 395d1179..1b38b33f 100644
--- a/docs/categories/testing.html
+++ b/docs/categories/testing.html
@@ -173,7 +173,7 @@ No
Yes |
Yes |
- 4170 |
+ 4172 |
@@ -368,7 +368,7 @@ Yes |
Yes |
No |
- 733 |
+ 734 |
@@ -717,7 +717,7 @@ No |
Yes |
No |
- 6195 |
+ 6196 |
@@ -759,7 +759,7 @@ No |
Yes |
No |
- 481 |
+ 483 |
@@ -801,7 +801,7 @@ No |
Yes |
No |
- 212 |
+ 213 |
@@ -1011,7 +1011,7 @@ No |
Yes |
No |
- 27 |
+ 28 |
@@ -2640,7 +2640,7 @@ No |
Yes |
Yes |
- 2549 |
+ 2550 |
@@ -2938,7 +2938,7 @@ Dredd (link)
|
Stars |
- 4170 |
+ 4172 |
Watchers |
@@ -2954,7 +2954,7 @@ Dredd (link)
Last Updated |
- 2024-08-19T08:16:12Z |
+ 2024-08-20T11:05:45Z |
Archived |
@@ -3397,7 +3397,7 @@ Restish (link)
Stars |
- 733 |
+ 734 |
Watchers |
@@ -3413,7 +3413,7 @@ Restish (link)
Last Updated |
- 2024-08-20T00:18:49Z |
+ 2024-08-20T17:34:42Z |
Archived |
@@ -3974,7 +3974,7 @@ Specmatic (link)
Last Updated |
- 2024-08-18T20:40:42Z |
+ 2024-08-20T18:14:40Z |
Archived |
@@ -4213,7 +4213,7 @@ mockoon (link)
Stars |
- 6195 |
+ 6196 |
Watchers |
@@ -4229,7 +4229,7 @@ mockoon (link)
Last Updated |
- 2024-08-19T20:20:36Z |
+ 2024-08-20T09:50:15Z |
Archived |
@@ -4315,7 +4315,7 @@ openapi-codegen (link)
Stars |
- 481 |
+ 483 |
Watchers |
@@ -4331,7 +4331,7 @@ openapi-codegen (link)
Last Updated |
- 2024-08-19T06:17:18Z |
+ 2024-08-20T19:40:07Z |
Archived |
@@ -4417,7 +4417,7 @@ express-jsdoc-swagger (link)
Stars |
- 212 |
+ 213 |
Watchers |
@@ -4433,7 +4433,7 @@ express-jsdoc-swagger (link)
Last Updated |
- 2024-07-18T16:29:58Z |
+ 2024-08-20T04:55:16Z |
Archived |
@@ -4637,7 +4637,7 @@ openapi (link)
Last Updated |
- 2024-08-13T13:35:13Z |
+ 2024-08-20T16:39:07Z |
Archived |
@@ -4688,7 +4688,7 @@ moclojer (link)
Last Updated |
- 2024-08-12T20:43:05Z |
+ 2024-08-20T20:13:48Z |
Archived |
@@ -4731,7 +4731,7 @@ jellyfin-sdk-kotlin (link)
Forks |
- 41 |
+ 42 |
Created |
@@ -4927,7 +4927,7 @@ hcloud-openapi (link)
Stars |
- 27 |
+ 28 |
Watchers |
@@ -4943,7 +4943,7 @@ hcloud-openapi (link)
Last Updated |
- 2024-08-09T10:57:36Z |
+ 2024-08-20T22:20:17Z |
Archived |
@@ -5708,7 +5708,7 @@ openapi-specs (link)
Last Updated |
- 2024-08-08T20:39:57Z |
+ 2024-08-20T10:18:52Z |
Archived |
@@ -7442,7 +7442,7 @@ EvoMaster (link)
Last Updated |
- 2024-08-19T06:52:11Z |
+ 2024-08-20T18:22:19Z |
Archived |
@@ -8854,7 +8854,7 @@ RESTler (link)
Stars |
- 2549 |
+ 2550 |
Watchers |
@@ -8862,7 +8862,7 @@ RESTler (link)
Forks |
- 289 |
+ 288 |
Created |
@@ -8870,7 +8870,7 @@ RESTler (link)
Last Updated |
- 2024-08-19T10:10:56Z |
+ 2024-08-20T10:54:30Z |
Archived |
diff --git a/docs/categories/text-editors.html b/docs/categories/text-editors.html
index 453fb3a2..f2fa145d 100644
--- a/docs/categories/text-editors.html
+++ b/docs/categories/text-editors.html
@@ -602,7 +602,7 @@ Swagger Editor (link)
Forks |
- 2236 |
+ 2235 |
Created |
diff --git a/docs/categories/unclassified.html b/docs/categories/unclassified.html
index c546575f..85498b34 100644
--- a/docs/categories/unclassified.html
+++ b/docs/categories/unclassified.html
@@ -89,7 +89,7 @@ No
Yes |
No |
- 289 |
+ 290 |
@@ -1200,7 +1200,7 @@ modelina (link)
|
Stars |
- 289 |
+ 290 |
Watchers |
@@ -1216,7 +1216,7 @@ modelina (link)
Last Updated |
- 2024-08-16T13:34:26Z |
+ 2024-08-20T17:46:23Z |
Archived |
diff --git a/docs/categories/user-interfaces.html b/docs/categories/user-interfaces.html
index c7ec5f8b..9a3d1784 100644
--- a/docs/categories/user-interfaces.html
+++ b/docs/categories/user-interfaces.html
@@ -91,7 +91,7 @@ Yes
Yes |
No |
- 26213 |
+ 26216 |
@@ -114,7 +114,7 @@ Yes |
Yes |
No |
- 23163 |
+ 23170 |
@@ -275,7 +275,7 @@ swagger-ui (link)
|
Stars |
- 26213 |
+ 26216 |
Watchers |
@@ -291,7 +291,7 @@ swagger-ui (link)
Last Updated |
- 2024-08-20T03:08:47Z |
+ 2024-08-20T23:03:38Z |
Archived |
@@ -326,7 +326,7 @@ Redoc (link)
Stars |
- 23163 |
+ 23170 |
Watchers |
@@ -342,7 +342,7 @@ Redoc (link)
Last Updated |
- 2024-08-20T01:50:55Z |
+ 2024-08-21T01:09:32Z |
Archived |
diff --git a/src/_data/tools.yaml b/src/_data/tools.yaml
index 2254a7d9..90f23efa 100644
--- a/src/_data/tools.yaml
+++ b/src/_data/tools.yaml
@@ -159,17 +159,17 @@
Connexion is a modern Python web framework that makes spec-first and
api-first development easy.
created: '2015-05-19T13:05:58Z'
- updated: '2024-08-19T23:34:53Z'
+ updated: '2024-08-21T02:02:35Z'
language: Python
archived: false
- stars: 4470
+ stars: 4471
watchers: 84
forks: 758
owner: spec-first
logo: https://avatars.githubusercontent.com/u/58754196?v=4
license: Apache-2.0
- repoEtag: '"fc140983fb1e1617cb187a0f68894e38e69294ff3dd55cb07c2652ab7b3bd233"'
- repoLastModified: Mon, 19 Aug 2024 23:34:53 GMT
+ repoEtag: '"f112ae7de5ae6caed8878269bb62a56c116042b9658b581e3fe5389ca7df07d0"'
+ repoLastModified: Wed, 21 Aug 2024 02:02:35 GMT
foundInMaster: true
homepage: https://github.com/zalando/connexion
id: 2d575abdf2671028868058b2442d9131
@@ -258,17 +258,17 @@
repositoryId: 653466139
description: null
created: '2023-06-14T05:39:38Z'
- updated: '2024-08-19T12:58:58Z'
+ updated: '2024-08-20T14:55:48Z'
language: TypeScript
archived: false
- stars: 191
+ stars: 192
watchers: 4
forks: 4
owner: zuplo
logo: https://avatars.githubusercontent.com/u/85497839?v=4
license: MIT
- repoEtag: '"ac07845dd432fae812cf487b5154f3140751c9f68b01d52a5c21f4431de2360f"'
- repoLastModified: Mon, 19 Aug 2024 12:58:58 GMT
+ repoEtag: '"6c630775d23a656d8f8762c65b0ecde57be8145017337bc85edf8dc6e143a952"'
+ repoLastModified: Tue, 20 Aug 2024 14:55:48 GMT
foundInMaster: true
- source:
- https://openapi.tools/
@@ -291,17 +291,17 @@
repositoryId: 679280065
description: Beautiful API references from OpenAPI/Swagger files ✨
created: '2023-08-16T13:42:32Z'
- updated: '2024-08-20T03:14:38Z'
+ updated: '2024-08-21T02:46:23Z'
language: TypeScript
archived: false
- stars: 5446
- watchers: 20
+ stars: 5456
+ watchers: 19
forks: 162
owner: scalar
logo: https://avatars.githubusercontent.com/u/301879?v=4
license: MIT
- repoEtag: '"a0572eea0c33f88bb7e1f06ce759fa6d917b92fd6f182d527d3bad08166474ab"'
- repoLastModified: Tue, 20 Aug 2024 03:14:38 GMT
+ repoEtag: '"d66aa8a20543dd39c2c4d08d307e9160603f005f69a44ba97efb830b0444b35f"'
+ repoLastModified: Wed, 21 Aug 2024 02:46:23 GMT
foundInMaster: true
- source: https://openapi.tools/
name: Scribe
@@ -322,17 +322,17 @@
repositoryId: 260729799
description: Generate API documentation for humans from your Laravel codebase.✍
created: '2020-05-02T16:36:45Z'
- updated: '2024-08-20T00:56:05Z'
+ updated: '2024-08-20T17:49:29Z'
language: PHP
archived: false
- stars: 1641
+ stars: 1642
watchers: 17
- forks: 289
+ forks: 290
owner: knuckleswtf
logo: https://avatars.githubusercontent.com/u/63367037?v=4
license: MIT
- repoEtag: '"e88078c5691c145f2e742702844e1569510c51d7897678484567f35aaa35cdac"'
- repoLastModified: Tue, 20 Aug 2024 00:56:05 GMT
+ repoEtag: '"d516574ef3baee2552e997e7371b404ea3898e2b0b9f780a50bbef682bb4172f"'
+ repoLastModified: Tue, 20 Aug 2024 17:49:29 GMT
foundInMaster: true
- source: https://openapi.tools/
name: Supermodel
@@ -379,17 +379,17 @@
repositoryId: 45250726
description: 📘 OpenAPI/Swagger-generated API Reference Documentation
created: '2015-10-30T12:53:02Z'
- updated: '2024-08-20T01:50:55Z'
+ updated: '2024-08-21T01:09:32Z'
language: TypeScript
archived: false
- stars: 23163
+ stars: 23170
watchers: 295
forks: 2280
owner: Redocly
logo: https://avatars.githubusercontent.com/u/32099856?v=4
license: MIT
- repoEtag: '"f4aeed61504b65a0b1b542c5bed46daffbcbb6036d575bbfc1b1187a0690dfcd"'
- repoLastModified: Tue, 20 Aug 2024 01:50:55 GMT
+ repoEtag: '"92d76fdc402ff5fc2994a01722b4ae2e5dab4057936ffbccea85fe59c4696b46"'
+ repoLastModified: Wed, 21 Aug 2024 01:09:32 GMT
foundInMaster: true
- source: https://openapi.tools/
name: RestCase Docs
@@ -460,7 +460,7 @@
owner: rookie-luochao
logo: https://avatars.githubusercontent.com/u/22948077?v=4
license: MIT
- repoEtag: '"6bd01097fee0924a1b148037bb28a0156703e6321dec78a5fa81674027331710"'
+ repoEtag: '"070a1efb6d58b49eeea90925d6a4d73a57de3ed1fd7083f59ac2d956eb588b19"'
repoLastModified: Mon, 19 Aug 2024 15:17:05 GMT
category:
- Documentation
@@ -482,23 +482,23 @@
v3: true
repositoryMetadata:
base64Readme: >-
- ClshW0NJXShodHRwczovL2dpdGh1Yi5jb20vVHVmaW4vb2FzZGlmZi93b3JrZmxvd3MvZ28vYmFkZ2Uuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL1R1ZmluL29hc2RpZmYvYWN0aW9ucykKWyFbY29kZWNvdl0oaHR0cHM6Ly9jb2RlY292LmlvL2doL3R1ZmluL29hc2RpZmYvYnJhbmNoL21haW4vZ3JhcGgvYmFkZ2Uuc3ZnP3Rva2VuPVk4Qk02WDc3SlkpXShodHRwczovL2NvZGVjb3YuaW8vZ2gvdHVmaW4vb2FzZGlmZikKWyFbR28gUmVwb3J0IENhcmRdKGh0dHBzOi8vZ29yZXBvcnRjYXJkLmNvbS9iYWRnZS9naXRodWIuY29tL3R1ZmluL29hc2RpZmYpXShodHRwczovL2dvcmVwb3J0Y2FyZC5jb20vcmVwb3J0L2dpdGh1Yi5jb20vdHVmaW4vb2FzZGlmZikKWyFbR29Eb2NdKGh0dHBzOi8vZ29kb2Mub3JnL2dpdGh1Yi5jb20vdHVmaW4vb2FzZGlmZj9zdGF0dXMuc3ZnKV0oaHR0cHM6Ly9nb2RvYy5vcmcvZ2l0aHViLmNvbS90dWZpbi9vYXNkaWZmKQpbIVtEb2NrZXIgSW1hZ2UgVmVyc2lvbl0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9kb2NrZXIvdi90dWZpbi9vYXNkaWZmP3NvcnQ9c2VtdmVyKV0oaHR0cHM6Ly9odWIuZG9ja2VyLmNvbS9yL3R1ZmluL29hc2RpZmYvdGFncykKWyFbU2xhY2tdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2Uvc2xhY2stJiM2NDtvYXNkaWZmLWdyZWVuLnN2Zz9sb2dvPXNsYWNrKV0oaHR0cHM6Ly9qb2luLnNsYWNrLmNvbS90L29hc2RpZmYvc2hhcmVkX2ludml0ZS96dC0xd3ZvN3dvaXMtdHRuY05CbXlqeVJYcUJ6eWd+UDZvQSkKCiFbb2FzZGlmZiBiYW5uZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS95b25hdGFubWdyL29hc2RpZmYvYXNzZXRzLzMxOTEzNDk1L2FjOWIxNTRlLTcyZDEtNDk2OS1iYzNiLWY1MjdiYmU3NzUxZCkKCgpDb21tYW5kLWxpbmUgYW5kIEdvIHBhY2thZ2UgdG8gY29tcGFyZSBhbmQgZGV0ZWN0IGJyZWFraW5nIGNoYW5nZXMgaW4gT3BlbkFQSSBzcGVjcy4KCiMjIEluc3RhbGxhdGlvbgoKIyMjIEluc3RhbGwgd2l0aCBHbwpgYGBiYXNoCmdvIGluc3RhbGwgZ2l0aHViLmNvbS90dWZpbi9vYXNkaWZmQGxhdGVzdApgYGAKCiMjIyBJbnN0YWxsIG9uIG1hY09TIHdpdGggQnJldwpgYGBiYXNoCmJyZXcgdGFwIHR1ZmluL2hvbWVicmV3LXR1ZmluCmJyZXcgaW5zdGFsbCBvYXNkaWZmCmBgYAoKIyMjIEluc3RhbGwgb24gbWFjT1MgYW5kIExpbnV4IHVzaW5nIGN1cmwKCmBgYGJhc2gKY3VybCAtZnNTTCBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdHVmaW4vb2FzZGlmZi9tYWluL2luc3RhbGwuc2ggfCBzaApgYGAKCiMjIyBNYW51YWxseSBpbnN0YWxsIG9uIG1hY09TLCBXaW5kb3dzIGFuZCBMaW51eApDb3B5IGJpbmFyaWVzIGZyb20gW2xhdGVzdCByZWxlYXNlXShodHRwczovL2dpdGh1Yi5jb20vVHVmaW4vb2FzZGlmZi9yZWxlYXNlcy8pCgoKIyMgVHJ5IGl0CgojIyMgTG9jYWxseQpgYGAKb2FzZGlmZiBjaGFuZ2Vsb2cgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL1R1ZmluL29hc2RpZmYvbWFpbi9kYXRhL29wZW5hcGktdGVzdDEueWFtbCBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vVHVmaW4vb2FzZGlmZi9tYWluL2RhdGEvb3BlbmFwaS10ZXN0NS55YW1sCmBgYAoKIyMjIFdpdGggRG9ja2VyCmBgYApkb2NrZXIgcnVuIC0tcm0gLXQgdHVmaW4vb2FzZGlmZiBjaGFuZ2Vsb2cgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL1R1ZmluL29hc2RpZmYvbWFpbi9kYXRhL29wZW5hcGktdGVzdDEueWFtbCBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vVHVmaW4vb2FzZGlmZi9tYWluL2RhdGEvb3BlbmFwaS10ZXN0NS55YW1sCmBgYAoKIyMgRmVhdHVyZXMgCi0gRGV0ZWN0IFticmVha2luZyBjaGFuZ2VzXShCUkVBS0lORy1DSEFOR0VTLm1kKQotIERpc3BsYXkgYSB1c2VyLWZyaWVuZGx5IFtjaGFuZ2Vsb2ddKEJSRUFLSU5HLUNIQU5HRVMubWQpIG9mIGFsbCBpbXBvcnRhbnQgQVBJIGNoYW5nZXMKLSBHZW5lcmF0ZSBjb21wcmVoZW5zaXZlIFtkaWZmXShESUZGLm1kKSByZXBvcnRzIGluY2x1ZGluZyBhbGwgYXNwZWN0cyBvZiBbT3BlbkFQSSBTcGVjaWZpY2F0aW9uXShodHRwczovL3N3YWdnZXIuaW8vc3BlY2lmaWNhdGlvbi8pOiBwYXRocywgb3BlcmF0aW9ucywgcGFyYW1ldGVycywgcmVxdWVzdCBib2RpZXMsIHJlc3BvbnNlcywgc2NoZW1hcywgZW51bXMsIGNhbGxiYWNrcywgc2VjdXJpdHkgZXRjLgotIE91dHB1dCByZXBvcnRzIGluIFlBTUwsIEpTT04sIFRleHQsIE1hcmtkb3duLCBIVE1MLCBKVW5pdCBYTUwgb3IgdGhlIFtnaXRodWIgYWN0aW9ucyBhbm5vdGF0aW9uIGZvcm1hdF0oaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy91c2luZy13b3JrZmxvd3Mvd29ya2Zsb3ctY29tbWFuZHMtZm9yLWdpdGh1Yi1hY3Rpb25zI3NldHRpbmctYS13YXJuaW5nLW1lc3NhZ2UpCi0gQ29tcGFyZSBsb2NhbCBmaWxlcyBvciByZW1vdGUgZmlsZXMgb3ZlciBodHRwL3MKLSBDb21wYXJlIHNwZWNzIGluIFlBTUwgb3IgSlNPTiBmb3JtYXQKLSBbQ29tcGFyZSB0d28gY29sbGVjdGlvbnMgb2Ygc3BlY3NdKENPTVBPU0VELm1kKQotIFtBUEkgZGVwcmVjYXRpb25dKERFUFJFQ0FUSU9OLm1kKQotIFtBUEkgc3RhYmlsaXR5IGxldmVsc10oU1RBQklMSVRZLm1kKQotIFtNdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBlbmRwb2ludF0oTUFUQ0hJTkctRU5EUE9JTlRTLm1kI2R1cGxpY2F0ZS1lbmRwb2ludHMpCi0gW01lcmdlIGFsbE9mIHNjaGVtYXNdKEFMTE9GLm1kKQotIFtNZXJnZSBjb21tb24gcGFyYW1ldGVyc10oQ09NTU9OLVBBUkFNUy5tZCkKLSBbQ2FzZS1pbnNlbnNpdGl2ZSBoZWFkZXIgY29tcGFyaXNvbl0oSEVBREVSLURJRkYubWQpCi0gW1BhdGggcHJlZml4IG1vZGlmaWNhdGlvbl0oUEFUSC1QUkVGSVgubWQpCi0gW1BhdGggcGFyYW1ldGVyIHJlbmFtaW5nXShQQVRILVBBUkFNLVJFTkFNRS5tZCkKLSBbRXhjbHVkaW5nIGNlcnRhaW4ga2luZHMgb2YgY2hhbmdlc10oRElGRi5tZCNleGNsdWRpbmctc3BlY2lmaWMta2luZHMtb2YtY2hhbmdlcykKLSBbVHJhY2tpbmcgY2hhbmdlcyB0byBPcGVuQVBJIEV4dGVuc2lvbnNdKERJRkYubWQjb3BlbmFwaS1leHRlbnNpb25zKQotIFtGaWx0ZXJpbmcgZW5kcG9pbnRzXShGSUxURVJJTkctRU5EUE9JTlRTLm1kKQotIFtFeHRlbmRpbmcgYnJlYWtpbmcgY2hhbmdlcyB3aXRoIGN1c3RvbSBjaGVja3NdKENVU1RPTUlaSU5HLUNIRUNLUy5tZCkKLSBMb2NhbGl6YXRpb246IGRpc3BsYXkgYnJlYWtpbmcgY2hhbmdlcyBhbmQgY2hhbmdlbG9nIG1lc3NhZ2VzIGluIEVuZ2xpc2ggb3IgUnVzc2lhbiAoW3BsZWFzZSBjb250cmlidXRlIHN1cHBvcnQgZm9yIHlvdXIgbGFuZ3VhZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9UdWZpbi9vYXNkaWZmL2lzc3Vlcy8zODMpKQotIFtDdXN0b21pemUgd2l0aCBjb25maWd1cmF0aW9uIGZpbGVzXShDT05GSUctRklMRVMubWQpCi0gW1J1biBmcm9tIERvY2tlcl0oRE9DS0VSLm1kKQotIFtJbnRlZ3JhdGUgaW4gR2l0SHViXShodHRwczovL2dpdGh1Yi5jb20vb2FzZGlmZi9naXRodWItZGVtby90cmVlL21haW4pCi0gW0dpdEh1YiBBY3Rpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9vYXNkaWZmL29hc2RpZmYtYWN0aW9uKQotIFtDbG91ZCBTZXJ2aWNlXShPQVNESUZGLVNFUlZJQ0UubWQpCi0gW09wZW5BUEkgU3luYzogR2V0IG5vdGlmaWVkIHdoZW4gYW4gQVBJIHByb3ZpZGVyIGJyZWFrcyB0aGUgQVBJXShodHRwczovL2dpdGh1Yi5jb20vb2FzZGlmZi9zeW5jLykKLSBbRW1iZWQgaW4geW91ciBnbyBwcm9ncmFtXShHTy5tZCkKCiMjIERlbW8KPGltZyBzcmM9Ii4vZGVtby5zdmciPgoKIyMgVGhlIG1haW4gY29tbWFuZHMKLSBbZGlmZl0oRElGRi5tZCk6IHRoZSBkaWZmIGJldHdlZW4gT3BlbkFQSSBzcGVjcywgZnVsbHkgZGV0YWlsZWQKLSBbYnJlYWtpbmddKEJSRUFLSU5HLUNIQU5HRVMubWQpOiBicmVha2luZyBjaGFuZ2VzIGJldHdlZW4gT3BlbkFQSSBzcGVjcyAgCi0gW2NoYW5nZWxvZ10oQlJFQUtJTkctQ0hBTkdFUy5tZCk6IGltcG9ydGFudCBjaGFuZ2VzIGJldHdlZW4gT3BlbkFQSSBzcGVjcyBpbmNsdWRpbmcgYnJlYWtpbmcgYW5kIG5vbi1icmVha2luZyBjaGFuZ2VzCi0gW2ZsYXR0ZW5dKEFMTE9GLm1kKTogcmVwbGFjZSBhbGwgaW5zdGFuY2VzIG9mIGFsbE9mIGJ5IGEgbWVyZ2VkIGVxdWl2YWxlbnQKLSBjaGVja3M6IGRpc3BsYXlzIHRoZSBkaWZmZXJlbnQgY2hlY2tzIHRoYXQgb2FzZGlmZiBydW5zIHRvIGRldGVjdCBjaGFuZ2VzCgojIyBDcmVkaXRzClRoaXMgcHJvamVjdCByZWxpZXMgb24gdGhlIGV4Y2VsbGVudCBpbXBsZW1lbnRhdGlvbiBvZiBPcGVuQVBJIDMuMCBmb3IgR286IFtraW4tb3BlbmFwaV0oaHR0cHM6Ly9naXRodWIuY29tL2dldGtpbi9raW4tb3BlbmFwaSkuCgojIyBGZWVkYmFjawpXZSB3ZWxjb21lIHlvdXIgZmVlZGJhY2suICAKSWYgeW91IGhhdmUgaWRlYXMgZm9yIGltcHJvdmVtZW50IG9yIGFkZGl0aW9uYWwgbmVlZHMgYXJvdW5kIEFQSXMsIHBsZWFzZSBbbGV0IHVzIGtub3ddKGh0dHBzOi8vZ2l0aHViLmNvbS9UdWZpbi9vYXNkaWZmL2Rpc2N1c3Npb25zL25ldz9jYXRlZ29yeT1pZGVhcykuCg==
- readmeEtag: '"4f1236beb611e64db11e2305677705df3e9dddd8"'
- readmeLastModified: Wed, 14 Aug 2024 09:07:21 GMT
+ ClshW0NJXShodHRwczovL2dpdGh1Yi5jb20vVHVmaW4vb2FzZGlmZi93b3JrZmxvd3MvZ28vYmFkZ2Uuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL1R1ZmluL29hc2RpZmYvYWN0aW9ucykKWyFbY29kZWNvdl0oaHR0cHM6Ly9jb2RlY292LmlvL2doL3R1ZmluL29hc2RpZmYvYnJhbmNoL21haW4vZ3JhcGgvYmFkZ2Uuc3ZnP3Rva2VuPVk4Qk02WDc3SlkpXShodHRwczovL2NvZGVjb3YuaW8vZ2gvdHVmaW4vb2FzZGlmZikKWyFbR28gUmVwb3J0IENhcmRdKGh0dHBzOi8vZ29yZXBvcnRjYXJkLmNvbS9iYWRnZS9naXRodWIuY29tL3R1ZmluL29hc2RpZmYpXShodHRwczovL2dvcmVwb3J0Y2FyZC5jb20vcmVwb3J0L2dpdGh1Yi5jb20vdHVmaW4vb2FzZGlmZikKWyFbR29Eb2NdKGh0dHBzOi8vZ29kb2Mub3JnL2dpdGh1Yi5jb20vdHVmaW4vb2FzZGlmZj9zdGF0dXMuc3ZnKV0oaHR0cHM6Ly9nb2RvYy5vcmcvZ2l0aHViLmNvbS90dWZpbi9vYXNkaWZmKQpbIVtEb2NrZXIgSW1hZ2UgVmVyc2lvbl0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9kb2NrZXIvdi90dWZpbi9vYXNkaWZmP3NvcnQ9c2VtdmVyKV0oaHR0cHM6Ly9odWIuZG9ja2VyLmNvbS9yL3R1ZmluL29hc2RpZmYvdGFncykKWyFbU2xhY2tdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2Uvc2xhY2stJiM2NDtvYXNkaWZmLWdyZWVuLnN2Zz9sb2dvPXNsYWNrKV0oaHR0cHM6Ly9qb2luLnNsYWNrLmNvbS90L29hc2RpZmYvc2hhcmVkX2ludml0ZS96dC0xd3ZvN3dvaXMtdHRuY05CbXlqeVJYcUJ6eWd+UDZvQSkKCiFbb2FzZGlmZiBiYW5uZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS95b25hdGFubWdyL29hc2RpZmYvYXNzZXRzLzMxOTEzNDk1L2FjOWIxNTRlLTcyZDEtNDk2OS1iYzNiLWY1MjdiYmU3NzUxZCkKCgpDb21tYW5kLWxpbmUgYW5kIEdvIHBhY2thZ2UgdG8gY29tcGFyZSBhbmQgZGV0ZWN0IGJyZWFraW5nIGNoYW5nZXMgaW4gT3BlbkFQSSBzcGVjcy4KCiMjIEluc3RhbGxhdGlvbgoKIyMjIEluc3RhbGwgd2l0aCBHbwpgYGBiYXNoCmdvIGluc3RhbGwgZ2l0aHViLmNvbS90dWZpbi9vYXNkaWZmQGxhdGVzdApgYGAKCiMjIyBJbnN0YWxsIG9uIG1hY09TIHdpdGggQnJldwpgYGBiYXNoCmJyZXcgdGFwIHR1ZmluL2hvbWVicmV3LXR1ZmluCmJyZXcgaW5zdGFsbCBvYXNkaWZmCmBgYAoKIyMjIEluc3RhbGwgb24gbWFjT1MgYW5kIExpbnV4IHVzaW5nIGN1cmwKCmBgYGJhc2gKY3VybCAtZnNTTCBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdHVmaW4vb2FzZGlmZi9tYWluL2luc3RhbGwuc2ggfCBzaApgYGAKCiMjIyBJbnN0YWxsIHdpdGggYXNkZgoKaHR0cHM6Ly9naXRodWIuY29tL29hc2RpZmYvYXNkZi1vYXNkaWZmCgojIyMgTWFudWFsbHkgaW5zdGFsbCBvbiBtYWNPUywgV2luZG93cyBhbmQgTGludXgKQ29weSBiaW5hcmllcyBmcm9tIFtsYXRlc3QgcmVsZWFzZV0oaHR0cHM6Ly9naXRodWIuY29tL1R1ZmluL29hc2RpZmYvcmVsZWFzZXMvKQoKCiMjIFRyeSBpdAoKIyMjIExvY2FsbHkKYGBgCm9hc2RpZmYgY2hhbmdlbG9nIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9UdWZpbi9vYXNkaWZmL21haW4vZGF0YS9vcGVuYXBpLXRlc3QxLnlhbWwgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL1R1ZmluL29hc2RpZmYvbWFpbi9kYXRhL29wZW5hcGktdGVzdDUueWFtbApgYGAKCiMjIyBXaXRoIERvY2tlcgpgYGAKZG9ja2VyIHJ1biAtLXJtIC10IHR1ZmluL29hc2RpZmYgY2hhbmdlbG9nIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9UdWZpbi9vYXNkaWZmL21haW4vZGF0YS9vcGVuYXBpLXRlc3QxLnlhbWwgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL1R1ZmluL29hc2RpZmYvbWFpbi9kYXRhL29wZW5hcGktdGVzdDUueWFtbApgYGAKCiMjIEZlYXR1cmVzIAotIERldGVjdCBbYnJlYWtpbmcgY2hhbmdlc10oQlJFQUtJTkctQ0hBTkdFUy5tZCkKLSBEaXNwbGF5IGEgdXNlci1mcmllbmRseSBbY2hhbmdlbG9nXShCUkVBS0lORy1DSEFOR0VTLm1kKSBvZiBhbGwgaW1wb3J0YW50IEFQSSBjaGFuZ2VzCi0gR2VuZXJhdGUgY29tcHJlaGVuc2l2ZSBbZGlmZl0oRElGRi5tZCkgcmVwb3J0cyBpbmNsdWRpbmcgYWxsIGFzcGVjdHMgb2YgW09wZW5BUEkgU3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9zd2FnZ2VyLmlvL3NwZWNpZmljYXRpb24vKTogcGF0aHMsIG9wZXJhdGlvbnMsIHBhcmFtZXRlcnMsIHJlcXVlc3QgYm9kaWVzLCByZXNwb25zZXMsIHNjaGVtYXMsIGVudW1zLCBjYWxsYmFja3MsIHNlY3VyaXR5IGV0Yy4KLSBPdXRwdXQgcmVwb3J0cyBpbiBZQU1MLCBKU09OLCBUZXh0LCBNYXJrZG93biwgSFRNTCwgSlVuaXQgWE1MIG9yIHRoZSBbZ2l0aHViIGFjdGlvbnMgYW5ub3RhdGlvbiBmb3JtYXRdKGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvdXNpbmctd29ya2Zsb3dzL3dvcmtmbG93LWNvbW1hbmRzLWZvci1naXRodWItYWN0aW9ucyNzZXR0aW5nLWEtd2FybmluZy1tZXNzYWdlKQotIENvbXBhcmUgbG9jYWwgZmlsZXMgb3IgcmVtb3RlIGZpbGVzIG92ZXIgaHR0cC9zCi0gQ29tcGFyZSBzcGVjcyBpbiBZQU1MIG9yIEpTT04gZm9ybWF0Ci0gW0NvbXBhcmUgdHdvIGNvbGxlY3Rpb25zIG9mIHNwZWNzXShDT01QT1NFRC5tZCkKLSBbQVBJIGRlcHJlY2F0aW9uXShERVBSRUNBVElPTi5tZCkKLSBbQVBJIHN0YWJpbGl0eSBsZXZlbHNdKFNUQUJJTElUWS5tZCkKLSBbTXVsdGlwbGUgdmVyc2lvbnMgb2YgdGhlIHNhbWUgZW5kcG9pbnRdKE1BVENISU5HLUVORFBPSU5UUy5tZCNkdXBsaWNhdGUtZW5kcG9pbnRzKQotIFtNZXJnZSBhbGxPZiBzY2hlbWFzXShBTExPRi5tZCkKLSBbTWVyZ2UgY29tbW9uIHBhcmFtZXRlcnNdKENPTU1PTi1QQVJBTVMubWQpCi0gW0Nhc2UtaW5zZW5zaXRpdmUgaGVhZGVyIGNvbXBhcmlzb25dKEhFQURFUi1ESUZGLm1kKQotIFtQYXRoIHByZWZpeCBtb2RpZmljYXRpb25dKFBBVEgtUFJFRklYLm1kKQotIFtQYXRoIHBhcmFtZXRlciByZW5hbWluZ10oUEFUSC1QQVJBTS1SRU5BTUUubWQpCi0gW0V4Y2x1ZGluZyBjZXJ0YWluIGtpbmRzIG9mIGNoYW5nZXNdKERJRkYubWQjZXhjbHVkaW5nLXNwZWNpZmljLWtpbmRzLW9mLWNoYW5nZXMpCi0gW1RyYWNraW5nIGNoYW5nZXMgdG8gT3BlbkFQSSBFeHRlbnNpb25zXShESUZGLm1kI29wZW5hcGktZXh0ZW5zaW9ucykKLSBbRmlsdGVyaW5nIGVuZHBvaW50c10oRklMVEVSSU5HLUVORFBPSU5UUy5tZCkKLSBbRXh0ZW5kaW5nIGJyZWFraW5nIGNoYW5nZXMgd2l0aCBjdXN0b20gY2hlY2tzXShDVVNUT01JWklORy1DSEVDS1MubWQpCi0gTG9jYWxpemF0aW9uOiBkaXNwbGF5IGJyZWFraW5nIGNoYW5nZXMgYW5kIGNoYW5nZWxvZyBtZXNzYWdlcyBpbiBFbmdsaXNoIG9yIFJ1c3NpYW4gKFtwbGVhc2UgY29udHJpYnV0ZSBzdXBwb3J0IGZvciB5b3VyIGxhbmd1YWdlXShodHRwczovL2dpdGh1Yi5jb20vVHVmaW4vb2FzZGlmZi9pc3N1ZXMvMzgzKSkKLSBbQ3VzdG9taXplIHdpdGggY29uZmlndXJhdGlvbiBmaWxlc10oQ09ORklHLUZJTEVTLm1kKQotIFtSdW4gZnJvbSBEb2NrZXJdKERPQ0tFUi5tZCkKLSBbSW50ZWdyYXRlIGluIEdpdEh1Yl0oaHR0cHM6Ly9naXRodWIuY29tL29hc2RpZmYvZ2l0aHViLWRlbW8vdHJlZS9tYWluKQotIFtHaXRIdWIgQWN0aW9uXShodHRwczovL2dpdGh1Yi5jb20vb2FzZGlmZi9vYXNkaWZmLWFjdGlvbikKLSBbQ2xvdWQgU2VydmljZV0oT0FTRElGRi1TRVJWSUNFLm1kKQotIFtPcGVuQVBJIFN5bmM6IEdldCBub3RpZmllZCB3aGVuIGFuIEFQSSBwcm92aWRlciBicmVha3MgdGhlIEFQSV0oaHR0cHM6Ly9naXRodWIuY29tL29hc2RpZmYvc3luYy8pCi0gW0VtYmVkIGluIHlvdXIgZ28gcHJvZ3JhbV0oR08ubWQpCgojIyBEZW1vCjxpbWcgc3JjPSIuL2RlbW8uc3ZnIj4KCiMjIFRoZSBtYWluIGNvbW1hbmRzCi0gW2RpZmZdKERJRkYubWQpOiB0aGUgZGlmZiBiZXR3ZWVuIE9wZW5BUEkgc3BlY3MsIGZ1bGx5IGRldGFpbGVkCi0gW2JyZWFraW5nXShCUkVBS0lORy1DSEFOR0VTLm1kKTogYnJlYWtpbmcgY2hhbmdlcyBiZXR3ZWVuIE9wZW5BUEkgc3BlY3MgIAotIFtjaGFuZ2Vsb2ddKEJSRUFLSU5HLUNIQU5HRVMubWQpOiBpbXBvcnRhbnQgY2hhbmdlcyBiZXR3ZWVuIE9wZW5BUEkgc3BlY3MgaW5jbHVkaW5nIGJyZWFraW5nIGFuZCBub24tYnJlYWtpbmcgY2hhbmdlcwotIFtmbGF0dGVuXShBTExPRi5tZCk6IHJlcGxhY2UgYWxsIGluc3RhbmNlcyBvZiBhbGxPZiBieSBhIG1lcmdlZCBlcXVpdmFsZW50Ci0gY2hlY2tzOiBkaXNwbGF5cyB0aGUgZGlmZmVyZW50IGNoZWNrcyB0aGF0IG9hc2RpZmYgcnVucyB0byBkZXRlY3QgY2hhbmdlcwoKIyMgQ3JlZGl0cwpUaGlzIHByb2plY3QgcmVsaWVzIG9uIHRoZSBleGNlbGxlbnQgaW1wbGVtZW50YXRpb24gb2YgT3BlbkFQSSAzLjAgZm9yIEdvOiBba2luLW9wZW5hcGldKGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRraW4va2luLW9wZW5hcGkpLgoKIyMgRmVlZGJhY2sKV2Ugd2VsY29tZSB5b3VyIGZlZWRiYWNrLiAgCklmIHlvdSBoYXZlIGlkZWFzIGZvciBpbXByb3ZlbWVudCBvciBhZGRpdGlvbmFsIG5lZWRzIGFyb3VuZCBBUElzLCBwbGVhc2UgW2xldCB1cyBrbm93XShodHRwczovL2dpdGh1Yi5jb20vVHVmaW4vb2FzZGlmZi9kaXNjdXNzaW9ucy9uZXc/Y2F0ZWdvcnk9aWRlYXMpLgo=
+ readmeEtag: '"04b4b2231613f556fcbe1672917e1a9e850cb5c0"'
+ readmeLastModified: Tue, 20 Aug 2024 08:46:59 GMT
repositoryId: 337689065
description: OpenAPI Diff and Breaking Changes
created: '2021-02-10T10:28:36Z'
- updated: '2024-08-19T09:35:43Z'
+ updated: '2024-08-20T10:55:33Z'
language: Go
archived: false
- stars: 657
+ stars: 658
watchers: 11
forks: 59
owner: Tufin
logo: https://avatars.githubusercontent.com/u/5352131?v=4
license: Apache-2.0
- repoEtag: '"5e99723c5e73bfaa4830074eb9fb0c8412a074bdfc90e7cc949890c22b78bf76"'
- repoLastModified: Mon, 19 Aug 2024 09:35:43 GMT
+ repoEtag: '"4a3f13479e8db5daed7a1144abe1a3f0a0aeb0a30f01e1fec9be49c707ad903b"'
+ repoLastModified: Tue, 20 Aug 2024 10:55:33 GMT
foundInMaster: true
name: oasdiff
language: Go
@@ -546,17 +546,17 @@
changes, publish accurate documentation and improve the design of your
APIs.
created: '2018-03-02T17:02:50Z'
- updated: '2024-08-17T06:41:01Z'
+ updated: '2024-08-20T09:01:35Z'
language: TypeScript
archived: false
- stars: 1335
+ stars: 1336
watchers: 11
forks: 74
owner: opticdev
logo: https://avatars.githubusercontent.com/u/34556970?v=4
license: MIT
- repoEtag: '"0db8aa17ae39aa96e7bbcb2d4f412f5140ede0ebdfc1f646b5ea6e00df43e3fb"'
- repoLastModified: Sat, 17 Aug 2024 06:41:01 GMT
+ repoEtag: '"dd4d6858c55d840718502886af4a06c07e2301391eac60f5a69e8dc0230ed668"'
+ repoLastModified: Tue, 20 Aug 2024 09:01:35 GMT
foundInMaster: true
id: 8c3d08406ca659662808d51ddc10b4e4
v3_1: true
@@ -1011,17 +1011,17 @@
generation), server stubs, documentation and configuration automatically
given an OpenAPI Spec (v2, v3)
created: '2018-05-12T09:57:56Z'
- updated: '2024-08-20T01:50:16Z'
+ updated: '2024-08-21T01:06:53Z'
language: Java
archived: false
- stars: 21058
+ stars: 21066
watchers: 219
- forks: 6382
+ forks: 6388
owner: OpenAPITools
logo: https://avatars.githubusercontent.com/u/37325267?v=4
license: Apache-2.0
- repoEtag: '"34babdfebb9645ae7310c759c050396e8496c7746b2356d8558c54c122667b62"'
- repoLastModified: Tue, 20 Aug 2024 01:50:16 GMT
+ repoEtag: '"f7bed9cde3b7d3375d5d1d720278ee7ce24eb6e964746c406799c5c83a200bce"'
+ repoLastModified: Wed, 21 Aug 2024 01:06:53 GMT
foundInMaster: true
id: 0418f8afcd0196c648d1a46c0c5c20d1
v3_1_link: https://github.com/OpenAPITools/openapi-generator/issues/9083
@@ -1095,17 +1095,17 @@
repositoryId: 323665366
description: OpenAPI based HTTP Client code generator
created: '2020-12-22T15:35:49Z'
- updated: '2024-08-20T02:16:53Z'
+ updated: '2024-08-21T01:55:03Z'
language: C#
archived: false
- stars: 2742
+ stars: 2750
watchers: 44
- forks: 184
+ forks: 185
owner: microsoft
logo: https://avatars.githubusercontent.com/u/6154722?v=4
license: MIT
- repoEtag: '"ffa89134a964f6ffdd88e87a752810f66df2e647b995b05571e70a30b78c4612"'
- repoLastModified: Tue, 20 Aug 2024 02:16:53 GMT
+ repoEtag: '"3fe0554fadae1d7437298a79b1d83751d845ba7ce36e6bde1060060849d47c04"'
+ repoLastModified: Wed, 21 Aug 2024 01:55:03 GMT
foundInMaster: true
- source: https://openapi.tools/
name: FabriKt
@@ -1340,11 +1340,11 @@
archived: false
stars: 8833
watchers: 258
- forks: 2236
+ forks: 2235
owner: swagger-api
logo: https://avatars.githubusercontent.com/u/7658037?v=4
license: Apache-2.0
- repoEtag: '"f2162dc9620a4ab70bc9dbc50d01cb259a919bf4ceb52dda8c6ffd3e59da6d95"'
+ repoEtag: '"71ca766f861b75af1ea363d8e86a0f1438bef26916a0bb124fed4c9db675d19e"'
repoLastModified: Mon, 19 Aug 2024 10:15:45 GMT
foundInMaster: true
id: 951cf61d12c812ef9b201ad76b5d278d
@@ -1452,7 +1452,7 @@
repositoryId: 192987405
description: Hackolade(https://hackolade.com) plugin for OpenAPI 3 API documentation
created: '2019-06-20T21:05:49Z'
- updated: '2024-07-25T12:13:42Z'
+ updated: '2024-08-20T12:20:54Z'
language: JavaScript
archived: false
stars: 14
@@ -1461,8 +1461,8 @@
owner: hackolade
logo: https://avatars.githubusercontent.com/u/20265734?v=4
license: NOASSERTION
- repoEtag: '"8a1550d92539882d62ad8860a38bcb4c054df97ea8534c60f17fded2ff4f6b66"'
- repoLastModified: Thu, 25 Jul 2024 12:13:42 GMT
+ repoEtag: '"52a839623c20a24769bd271568151ae1af5bb0cd20d0680a2282a42704ba1e79"'
+ repoLastModified: Tue, 20 Aug 2024 12:20:54 GMT
foundInMaster: true
id: 0ca14e83c7b680313bbc57c0a56e6c05
v3_1: true
@@ -1489,17 +1489,17 @@
repositoryId: 69595482
description: Open Source API Design
created: '2016-09-29T18:22:33Z'
- updated: '2024-08-15T15:06:30Z'
+ updated: '2024-08-20T15:08:17Z'
language: TypeScript
archived: false
stars: 972
watchers: 43
- forks: 492
+ forks: 493
owner: Apicurio
logo: https://avatars.githubusercontent.com/u/28107283?v=4
license: Apache-2.0
- repoEtag: '"7a76380d4140f1fb710f89ac2f2eadcaba13154702ead2ba1f78f93bd6539b1c"'
- repoLastModified: Thu, 15 Aug 2024 15:06:30 GMT
+ repoEtag: '"11ec9529e0981129aba23919362f581810ceb03b168b4a632157ed52fa928451"'
+ repoLastModified: Tue, 20 Aug 2024 15:08:17 GMT
foundInMaster: true
homepage: https://github.com/Apicurio/apicurio-studio
id: efe9656e80c1bf6304903ca5a60fe5a6
@@ -1705,17 +1705,17 @@
Turn any OpenAPI2/3 and Postman Collection file into an API server with
mocking, transformations and validations.
created: '2016-03-18T03:52:09Z'
- updated: '2024-08-19T04:00:29Z'
+ updated: '2024-08-20T19:32:20Z'
language: TypeScript
archived: false
- stars: 4177
+ stars: 4182
watchers: 54
forks: 343
owner: stoplightio
logo: https://avatars.githubusercontent.com/u/10767217?v=4
license: Apache-2.0
- repoEtag: '"7a389f9adf93282d2b0326d36f24c2aa897ab10d778878762521718b7c7f1a96"'
- repoLastModified: Mon, 19 Aug 2024 04:00:29 GMT
+ repoEtag: '"06d082a6ce48a7aeeb4a5b9e8969a5820a18e8aadfa86ca28244b15cf993ad8f"'
+ repoLastModified: Tue, 20 Aug 2024 19:32:20 GMT
foundInMaster: true
useMasterProperties: true
id: 15aad8cd322242e03733b07f2a37890a
@@ -1748,17 +1748,17 @@
The open source, cloud native tool for API Mocking and Testing. Microcks
is a Cloud Native Computing Foundation sandbox project 🚀
created: '2015-02-23T15:46:09Z'
- updated: '2024-08-19T07:39:04Z'
+ updated: '2024-08-20T11:39:25Z'
language: Java
archived: false
- stars: 1314
+ stars: 1315
watchers: 22
forks: 208
owner: microcks
logo: https://avatars.githubusercontent.com/u/11051048?v=4
license: Apache-2.0
- repoEtag: '"e09a6ea26e6e5f1a451d7f78f87dcb407ab3f9e3da94994a67be0778576101f0"'
- repoLastModified: Mon, 19 Aug 2024 07:39:04 GMT
+ repoEtag: '"49a4b4e69e87e3b05c6652873d6d2e14bc26ffd1f4ad754676a6d6e28c3e2956"'
+ repoLastModified: Tue, 20 Aug 2024 11:39:25 GMT
foundInMaster: true
id: 1c0e918b5a733b0f1726199e3ea101d6
- source: https://openapi.tools/
@@ -1927,17 +1927,17 @@
repositoryId: 61366800
description: Build OpenAPI-compliant REST APIs using TypeScript and Node
created: '2016-06-17T10:42:50Z'
- updated: '2024-08-19T11:10:06Z'
+ updated: '2024-08-20T14:16:09Z'
language: TypeScript
archived: false
- stars: 3413
+ stars: 3415
watchers: 29
forks: 488
owner: lukeautry
logo: https://avatars.githubusercontent.com/u/8770560?v=4
license: MIT
- repoEtag: '"4a1c98b592b209bf1bbc6269a4c3231a9b38b6e5e488d92f19c29507b6da08c6"'
- repoLastModified: Mon, 19 Aug 2024 11:10:06 GMT
+ repoEtag: '"6bb5b5f291499a873a683264ffeae884b46e72810033e05bd27dd593ec5538cd"'
+ repoLastModified: Tue, 20 Aug 2024 14:16:09 GMT
foundInMaster: true
id: 2529db76d3d9f042b0c624f65b13fc41
- source: https://openapi.tools/
@@ -2003,17 +2003,17 @@
repositoryId: 48869446
description: A Monorepo of various packages to power OpenAPI in node
created: '2016-01-01T04:28:48Z'
- updated: '2024-07-30T16:02:01Z'
+ updated: '2024-08-20T19:28:20Z'
language: JavaScript
archived: false
- stars: 885
+ stars: 886
watchers: 13
forks: 234
owner: kogosoftwarellc
logo: https://avatars.githubusercontent.com/u/15419153?v=4
license: MIT
- repoEtag: '"59902d281593b959efaa65cae507a1b103941c8b224cdf01a3bea0626afa350e"'
- repoLastModified: Tue, 30 Jul 2024 16:02:01 GMT
+ repoEtag: '"dda75e466eccdc04e66fdb646c1a5a0001676008c5c556b1e0b0ae20e5566b73"'
+ repoLastModified: Tue, 20 Aug 2024 19:28:20 GMT
foundInMaster: true
- source: https://openapi.tools/
name: BaucisJS + baucis-openapi3
@@ -2106,17 +2106,17 @@
🕸️ Create REST and GraphQL APIs, scaffold Jamstack webapps, stream
changes in real-time.
created: '2015-03-06T21:46:05Z'
- updated: '2024-08-19T03:30:05Z'
+ updated: '2024-08-20T12:47:05Z'
language: TypeScript
archived: false
- stars: 8413
+ stars: 8415
watchers: 213
- forks: 950
+ forks: 951
owner: api-platform
logo: https://avatars.githubusercontent.com/u/13420081?v=4
license: MIT
- repoEtag: '"fa1299cfdfcea020f9bbd22b41376db608bd71c6a17a04b7918a0c0a9151208f"'
- repoLastModified: Mon, 19 Aug 2024 03:30:05 GMT
+ repoEtag: '"7628dc7299751fb9ac9c3fe51cfa5d5902aaeae201dce43c226b4082bcfb23c4"'
+ repoLastModified: Tue, 20 Aug 2024 12:47:05 GMT
foundInMaster: true
id: d14f5904300aabf1ceef4660a6b3d57e
- source: https://openapi.tools/
@@ -2172,17 +2172,17 @@
repositoryId: 39904377
description: Open source API management platform
created: '2015-07-29T16:34:52Z'
- updated: '2024-08-18T14:57:47Z'
+ updated: '2024-08-20T15:08:19Z'
language: PHP
archived: false
- stars: 1832
+ stars: 1833
watchers: 58
forks: 218
owner: apioo
logo: https://avatars.githubusercontent.com/u/18172950?v=4
license: Apache-2.0
- repoEtag: '"542719a2713a42dc7ab243a4b3032fde519898d29dbb733a461a5cb678a806b2"'
- repoLastModified: Sun, 18 Aug 2024 14:57:47 GMT
+ repoEtag: '"6be5c69bc8ecb9628309dee511b70190414610ee5565d50ea00080fbf6bca3ee"'
+ repoLastModified: Tue, 20 Aug 2024 15:08:19 GMT
foundInMaster: true
id: 5458da680012a142d20e79ac150bc4ab
- source:
@@ -2288,17 +2288,17 @@
repositoryId: 105440153
description: 'OpenAPI (Swagger) module for Nest framework (node.js) :earth_americas:'
created: '2017-10-01T12:20:24Z'
- updated: '2024-08-20T03:05:52Z'
+ updated: '2024-08-20T19:01:47Z'
language: TypeScript
archived: false
- stars: 1656
+ stars: 1657
watchers: 31
- forks: 457
+ forks: 458
owner: nestjs
logo: https://avatars.githubusercontent.com/u/28507035?v=4
license: MIT
- repoEtag: '"2932707cf1865ae6c7ce54a3640213866d2c261168ac729ba1e41dff959ccb23"'
- repoLastModified: Tue, 20 Aug 2024 03:05:52 GMT
+ repoEtag: '"1d3f3b233ea694b6aeab332cd46b1a8fcf4de94a8b5920b4fe18108b8e799fcf"'
+ repoLastModified: Tue, 20 Aug 2024 19:01:47 GMT
foundInMaster: true
id: 7071babd9853fc901c5decfa9b465b67
- source:
@@ -2361,17 +2361,17 @@
repositoryId: 12590052
description: Language-agnostic HTTP API Testing Tool
created: '2013-09-04T12:21:35Z'
- updated: '2024-08-19T08:16:12Z'
+ updated: '2024-08-20T11:05:45Z'
language: JavaScript
archived: false
- stars: 4170
+ stars: 4172
watchers: 76
forks: 279
owner: apiaryio
logo: https://avatars.githubusercontent.com/u/765943?v=4
license: MIT
- repoEtag: '"aaab76e8d604b6fc34b53df826e6bce6328b6e65aee926f92653d81be1ed50d3"'
- repoLastModified: Mon, 19 Aug 2024 08:16:12 GMT
+ repoEtag: '"b53b556c5bb03f436b0239953e113c8fb0e35da3165cb9c690198a7cc1d43d79"'
+ repoLastModified: Tue, 20 Aug 2024 11:05:45 GMT
foundInMaster: true
id: bb2e4b0879fce0d8706dcebfd2c10a4c
- source:
@@ -2396,17 +2396,17 @@
🦋 Auto-validates api requests, responses, and securities using ExpressJS
and an OpenAPI 3.x specification
created: '2019-03-19T19:08:05Z'
- updated: '2024-08-19T08:29:17Z'
+ updated: '2024-08-20T21:39:51Z'
language: TypeScript
archived: false
stars: 897
- watchers: 18
+ watchers: 19
forks: 203
owner: cdimascio
logo: https://avatars.githubusercontent.com/u/4706618?v=4
license: MIT
- repoEtag: '"33f6bd2d197fa37f418ed9d162a6e609122919da54bb4fb07a3766a70e76f208"'
- repoLastModified: Mon, 19 Aug 2024 08:29:17 GMT
+ repoEtag: '"538fc9025f774c18eec48360284080e01e334c0dab1976e1d6aeaf69d5180834"'
+ repoLastModified: Tue, 20 Aug 2024 21:39:51 GMT
foundInMaster: true
id: 3a27bc1a71642e0c1c020c41dc66e206
- source: https://openapi.tools/
@@ -2478,7 +2478,7 @@
owner: apideck-libraries
logo: https://avatars.githubusercontent.com/u/73573473?v=4
license: Apache-2.0
- repoEtag: '"9ccd493e484c316183968ca026208eaeadf0a206708f03a0a01c05e738eba26b"'
+ repoEtag: '"624aafd35f958419f400d33f49b28b5975774378ac6326fc02347dd97b6e31f3"'
repoLastModified: Mon, 19 Aug 2024 17:22:59 GMT
foundInMaster: true
id: a03cdb329f630a946a946dfe26802c43
@@ -2623,7 +2623,7 @@
A customizable style validator to make sure your OpenAPI spec follows your
organization's standards.
created: '2017-08-22T16:53:13Z'
- updated: '2024-08-16T01:38:44Z'
+ updated: '2024-08-20T20:10:26Z'
language: Java
archived: false
stars: 201
@@ -2632,8 +2632,8 @@
owner: OpenAPITools
logo: https://avatars.githubusercontent.com/u/37325267?v=4
license: Apache-2.0
- repoEtag: '"a3ddf5c8b78014c6439652a06c8477209cef91b696666b9b761c0bf7d29c4110"'
- repoLastModified: Fri, 16 Aug 2024 01:38:44 GMT
+ repoEtag: '"01b3cb61b2a03ca3e4b876b43bf497a7933acac6eabc3ecf217160c5912608a7"'
+ repoLastModified: Tue, 20 Aug 2024 20:10:26 GMT
foundInMaster: true
id: 30d322c922366df3f6f8fb9c681b2139
- source: https://openapi.tools/
@@ -2683,17 +2683,17 @@
⚒️ Redocly CLI makes OpenAPI easy. Lint/validate to any standard, generate
beautiful docs, and more.
created: '2019-09-10T14:56:25Z'
- updated: '2024-08-19T12:15:28Z'
+ updated: '2024-08-21T01:08:13Z'
language: TypeScript
archived: false
- stars: 890
+ stars: 893
watchers: 28
- forks: 134
+ forks: 135
owner: Redocly
logo: https://avatars.githubusercontent.com/u/32099856?v=4
license: MIT
- repoEtag: '"1c12e012490bc4bf6e57970ca91337b104e4775c2a3ad8072aca732237e833b3"'
- repoLastModified: Mon, 19 Aug 2024 12:15:28 GMT
+ repoEtag: '"ad3bef1534806d7f7b708787fe24c49475a2640354f52b3436011afbb8da1cc0"'
+ repoLastModified: Wed, 21 Aug 2024 01:08:13 GMT
category:
- Description Validators
- Documentation
@@ -2772,17 +2772,17 @@
repositoryId: 14134534
description: A collection of Rack middleware to support JSON Schema.
created: '2013-11-05T07:05:45Z'
- updated: '2024-08-09T09:39:02Z'
+ updated: '2024-08-20T19:23:17Z'
language: Ruby
archived: false
- stars: 866
+ stars: 867
watchers: 16
forks: 132
owner: interagent
logo: https://avatars.githubusercontent.com/u/7388387?v=4
license: MIT
- repoEtag: '"922956835e70e984dbd5d5cdcd3d09510b889da349787fa1c11fa5143e89fa40"'
- repoLastModified: Fri, 09 Aug 2024 09:39:02 GMT
+ repoEtag: '"c9f84d5ea6a59d50440719c77120ada0702a29638506ad0d052fea47fd0089a6"'
+ repoLastModified: Tue, 20 Aug 2024 19:23:17 GMT
foundInMaster: true
id: 64f8f7a816e2d8825abd1a213d9e3fb5
- source:
@@ -2878,17 +2878,17 @@
repositoryId: 18997610
description: Swagger Spec to Java POJOs
created: '2014-04-21T16:00:22Z'
- updated: '2024-08-04T17:43:56Z'
+ updated: '2024-08-20T08:06:30Z'
language: Java
archived: false
- stars: 775
+ stars: 776
watchers: 45
forks: 524
owner: swagger-api
logo: https://avatars.githubusercontent.com/u/7658037?v=4
license: Apache-2.0
- repoEtag: '"4c9226270dbfea79a26e42e127e3227ca6c267aba93ec4f091775e1a2f05dad0"'
- repoLastModified: Sun, 04 Aug 2024 17:43:56 GMT
+ repoEtag: '"e6a68cadda1c5809be3df83fbbd21c9b07b6575f2d2c444640d51fc85d96f49b"'
+ repoLastModified: Tue, 20 Aug 2024 08:06:30 GMT
foundInMaster: true
id: 45f46a8f7ac698cfe3926303bf3dff9d
v3_1_link: https://github.com/swagger-api/swagger-parser/pull/1730
@@ -2948,17 +2948,17 @@
repositoryId: 66855599
description: Generates code snippets for given Swagger / Open API documents
created: '2016-08-29T15:24:00Z'
- updated: '2024-08-13T12:52:25Z'
+ updated: '2024-08-20T13:38:58Z'
language: JavaScript
archived: false
- stars: 116
+ stars: 115
watchers: 6
forks: 66
owner: ErikWittern
logo: https://avatars.githubusercontent.com/u/1745998?v=4
license: MIT
- repoEtag: '"473ef774a105dcfd91383fe7df6482bd504445008528e4c2a18fcc207eec5e9f"'
- repoLastModified: Tue, 13 Aug 2024 12:52:25 GMT
+ repoEtag: '"383b587cc5567de4cfcb7b423813c806e19db91e791165e9a65a81e79cb46202"'
+ repoLastModified: Tue, 20 Aug 2024 13:38:58 GMT
foundInMaster: true
id: fbf76c5bdaef3297eb35739ca2ca0954
- source: https://openapi.tools/
@@ -3127,11 +3127,11 @@
archived: false
stars: 522
watchers: 23
- forks: 90
+ forks: 91
owner: thephpleague
logo: https://avatars.githubusercontent.com/u/527621?v=4
license: MIT
- repoEtag: '"d2cf37a071ff6c5cac224c2f575815ca0b618855acb86798f0cd1016011dde7a"'
+ repoEtag: '"2612a2b6793b17d0fb3e4688991876af79f1e17ff08b74c3d6c1a8f25e4a2f3d"'
repoLastModified: Wed, 14 Aug 2024 00:51:30 GMT
foundInMaster: true
v3_1_link: https://github.com/thephpleague/openapi-psr7-validator/issues/163
@@ -3244,13 +3244,13 @@
v3: true
repositoryMetadata:
base64Readme: >-
- CiMgQVBJCgpUaGUgQVBJIGNvbXBvbmVudCBpcyB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBbVHlwZUFQSV0oaHR0cHM6Ly90eXBlYXBpLm9yZy8pIHNwZWNpZmljYXRpb24uCkl0IHByb3ZpZGVzIG1vZGVscyB0byBkZXNjcmliZSBhbiBSRVNUIEFQSSBhbmQgZ2VuZXJhdGUgYmFzZWQgb24gdGhvc2UgbW9kZWxzIGRpZmZlcmVudCBvdXRwdXRzLiBZb3UgY2FuIGNyZWF0ZSB0aG9zZQptb2RlbHMgZWl0aGVyIGJ5IHBhcnNpbmcgYSBUeXBlQVBJIG9yIE9wZW5BUEkgc3BlY2lmaWNhdGlvbiBvciBieSB1c2luZyBQSFAgQXR0cmlidXRlcy4gQmFzZWQgb24gdGhvc2UgbW9kZWxzIGl0IGlzIHRoZW4KcG9zc2libGUgdG8gZ2VuZXJhdGUgaS5lLiBjbGllbnQgU0RLcy4KCiMjIFVzYWdlCgpUaGUgcm9vdCBtb2RlbCBvYmplY3QgaXMgY2FsbGVkIGEgYFNwZWNpZmljYXRpb25gIHdoaWNoIGNvbnRhaW5zIGBPcGVyYXRpb25zYCBhbmQgYERlZmluaXRpb25zYC4gRWFjaCBvcGVyYXRpb24KbWFwcyB0byBhIHNwZWNpZmljIFJFU1QgQVBJIGVuZHBvaW50IGFuZCB0aGUgZGVmaW5pdGlvbnMgcmVwcmVzZW50IHRoZSBzY2hlbWFzIHRvIGRlc2NyaWJlIHRoZSBKU09OIHJlcXVlc3Qgb3IgcmVzcG9uc2UKcGF5bG9hZC4KCiMjIyBGcmFtZXdvcmsKCllvdSBjYW4gdXNlIFBIUCBhdHRyaWJ1dGVzIHRvIGRlc2NyaWJlIHRoZSBzdHJ1Y3R1cmUgb2YgeW91ciBlbmRwb2ludHMuIFlvdSBjYW4gdGhlbiB1c2UgdGhlIGF0dHJpYnV0ZSBwYXJzZXIgKGBQU1hcQXBpXFBhcnNlclxBdHRyaWJ1dGVgKQp0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGEgc3BlY2lmaWNhdGlvbiBmb3IgeW91ciBjb250cm9sbGVyLiBBIGNvbnRyb2xsZXIgY2xhc3MgY291bGQgdGhlbiBsb29rIGxpa2U6CgpgYGBwaHAKPD9waHAKCmNsYXNzIE15Q29udHJvbGxlcgp7CiAgICAjW0dldF0KICAgICNbUGF0aCgnL215L2VuZHBvaW50LzppZCcpXQogICAgcHVibGljIGZ1bmN0aW9uIGdldE1vZGVsKGludCAkaWQsIGludCAkeWVhcik6IFxNeVxSZXNwb25zZVxNb2RlbAogICAgewogICAgICAgIC8vIEBUT0RPIGltcGxlbWVudAogICAgfQogICAgCiAgICAjW1Bvc3RdCiAgICAjW1BhdGgoJy9teS9lbmRwb2ludCcpXQogICAgcHVibGljIGZ1bmN0aW9uIGluc2VydE1vZGVsKFxNeVxSZXF1ZXN0XE1vZGVsICRtb2RlbCk6IFxNeVxSZXNwb25zZVxNb2RlbAogICAgewogICAgICAgIC8vIEBUT0RPIGltcGxlbWVudAogICAgfQp9CgpgYGAKClRoaXMgd291bGQgYmUgdGhlbiBlbm91Z2ggZm9yIHRoZSBBUEkgY29tcG9uZW50IHRvIGdlbmVyYXRlIGVpdGhlciBhbiBPcGVuQVBJIHNwZWNpZmljYXRpb24gb3IgYSBjbGllbnQgU0RLLgpOb3RlIHRoaXMgbGlicmFyeSBvbmx5IG5lZWRzIHRoZSBtZXRhIGluZm9ybWF0aW9uLCBpZiB5b3UgY2FuIGdldCB0aG9zZSBtZXRhIGluZm9ybWF0aW9uIGF0IHlvdXIgZnJhbWV3b3JrIGluIGFub3RoZXIKd2F5IHlvdSBjYW4gYWxzbyBpbXBsZW1lbnQgYSBjdXN0b20gYFBhcnNlckludGVyZmFjZWAuCgojIyMgU3RhbmRhbG9uZQoKQmVzaWRlIHRoZSBmcmFtZXdvcmsgaW50ZWdyYXRpb24geW91IGNhbiB1c2UgdGhpcyBjb21wb25lbnQgYWxzbyB0byBzaW1wbHkgcGFyc2UgZXhpc3RpbmcgVHlwZUFQSSBzcGVjaWZpY2F0aW9uIGFuZApnZW5lcmF0ZSBzcGVjaWZpYyBvdXRwdXQuIFRoZSBmb2xsb3dpbmcgaXMgYSBzaW1wbGUgZXhhbXBsZSBob3cgdG8gdXNlIHRoZSBQSFAgQVBJIGFuZCBob3cgdG8gZ2VuZXJhdGUgY29kZS4KCmBgYHBocAo8P3BocAoKLy8gdXNlIHRoZSBBUEkgbWFuYWdlciB0byBvYnRhaW4gYSBzcGVjaWZpY2F0aW9uIGZyb20gZGlmZmVyZW50IHNvdXJjZXMKJG1hbmFnZXIgPSBuZXcgXFBTWFxBcGlcQXBpTWFuYWdlcihuZXcgXFBTWFxTY2hlbWFcU2NoZW1hTWFuYWdlcigpKTsKCi8vIHJlYWRzIHRoZSBUeXBlQVBJIHNwZWNpZmljYXRpb24gYW5kIGdlbmVyYXRlcyBhIHNwZWNpZmljYXRpb24KJHNwZWNpZmljYXRpb24gPSAkbWFuYWdlci0+Z2V0QXBpKCcuL3R5cGVhcGkuanNvbicpOwoKLy8gY29udGFpbnMgYWxsIHNjaGVtYSB0eXBlIGRlZmluaXRpb25zCiRkZWZpbml0aW9ucyA9ICRzcGVjaWZpY2F0aW9uLT5nZXREZWZpbml0aW9ucygpOwoKLy8gcmV0dXJucyB0aGUgcmVzb3VyY2UgZm9vIGZyb20gdGhlIHNwZWNpZmljYXRpb24KJG9wZXJhdGlvbiA9ICRzcGVjaWZpY2F0aW9uLT5nZXRPcGVyYXRpb25zKCktPmdldCgnbXkub3BlcmF0aW9uJyk7CgovLyByZXR1cm5zIGFsbCBhdmFpbGFibGUgYXJndW1lbnRzCiRvcGVyYXRpb24tPmdldEFyZ3VtZW50cygpOwoKLy8gcmV0dXJucyB0aGUgcmV0dXJuIHR5cGUKJG9wZXJhdGlvbi0+Z2V0UmV0dXJuKCk7CgovLyByZXR1cm5zIGFsbCBleGNlcHRpb25zIHdoaWNoIGFyZSBkZXNjcmliZWQKJG9wZXJhdGlvbi0+Z2V0VGhyb3dzKCk7CgovLyByZXR1cm5zIHRoZSBhc3NpZ25lZCBIVFRQIG1ldGhvZAokb3BlcmF0aW9uLT5nZXRNZXRob2QoKTsKCi8vIHJldHVybnMgdGhlIGFzc2lnbmVkIEhUVFAgcGF0aAokb3BlcmF0aW9uLT5nZXRQYXRoKCk7CgovLyBjcmVhdGVzIGEgUEhQIGNsaWVudCB3aGljaCBjb25zdW1lcyB0aGUgZGVmaW5lZCBvcGVyYXRpb25zCiRyZWdpc3RyeSA9IFxQU1hcQXBpXEdlbmVyYXRvckZhY3Rvcnk6OmZyb21Mb2NhbCgpLT5mYWN0b3J5KCk7CiRnZW5lcmF0b3IgPSAkcmVnaXN0cnktPmdldEdlbmVyYXRvcihcUFNYXEFwaVxSZXBvc2l0b3J5XExvY2FsUmVwb3NpdG9yeTo6Q0xJRU5UX1BIUCkKCiRzb3VyY2UgPSAkZ2VuZXJhdG9yLT5nZW5lcmF0ZSgkcmVzb3VyY2UpOwoKYGBgCgojIyBHZW5lcmF0b3IKCiMjIyBDbGllbnQKCi0gUEhQCi0gVHlwZXNjcmlwdAoKIyMjIE1hcmt1cAoKLSBDbGllbnQKLSBIVE1MCi0gTWFya2Rvd24KCiMjIyBTcGVjCgotIFtPcGVuQVBJXShodHRwczovL2dpdGh1Yi5jb20vT0FJL09wZW5BUEktU3BlY2lmaWNhdGlvbikKLSBbVHlwZUFQSV0oaHR0cHM6Ly90eXBlYXBpLm9yZy8pCg==
- readmeEtag: '"d4486d2a3668f720ac82627a61a430593d7929db"'
- readmeLastModified: Sat, 13 Jul 2024 00:18:00 GMT
+ CiMgQVBJCgpUaGUgQVBJIGNvbXBvbmVudCBpcyB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBbVHlwZUFQSV0oaHR0cHM6Ly90eXBlYXBpLm9yZy8pIHNwZWNpZmljYXRpb24uCkl0IHByb3ZpZGVzIG1vZGVscyB0byBkZXNjcmliZSBhbiBSRVNUIEFQSSBhbmQgZ2VuZXJhdGUgYmFzZWQgb24gdGhvc2UgbW9kZWxzIGRpZmZlcmVudCBvdXRwdXRzLiBZb3UgY2FuIGNyZWF0ZSB0aG9zZQptb2RlbHMgZWl0aGVyIGJ5IHBhcnNpbmcgYSBUeXBlQVBJIG9yIE9wZW5BUEkgc3BlY2lmaWNhdGlvbiBvciBieSB1c2luZyBQSFAgQXR0cmlidXRlcy4gQmFzZWQgb24gdGhvc2UgbW9kZWxzIGl0IGlzIHRoZW4KcG9zc2libGUgdG8gZ2VuZXJhdGUgaS5lLiBjbGllbnQgU0RLcy4KCiMjIFVzYWdlCgpUaGUgcm9vdCBtb2RlbCBvYmplY3QgaXMgY2FsbGVkIGEgYFNwZWNpZmljYXRpb25gIHdoaWNoIGNvbnRhaW5zIGBPcGVyYXRpb25zYCBhbmQgYERlZmluaXRpb25zYC4gRWFjaCBvcGVyYXRpb24KbWFwcyB0byBhIHNwZWNpZmljIFJFU1QgQVBJIGVuZHBvaW50IGFuZCB0aGUgZGVmaW5pdGlvbnMgcmVwcmVzZW50IHRoZSBzY2hlbWFzIHRvIGRlc2NyaWJlIHRoZSBKU09OIHJlcXVlc3Qgb3IgcmVzcG9uc2UKcGF5bG9hZC4KCiMjIyBGcmFtZXdvcmsKCllvdSBjYW4gdXNlIFBIUCBhdHRyaWJ1dGVzIHRvIGRlc2NyaWJlIHRoZSBzdHJ1Y3R1cmUgb2YgeW91ciBlbmRwb2ludHMuIFlvdSBjYW4gdGhlbiB1c2UgdGhlIGF0dHJpYnV0ZSBwYXJzZXIgKGBQU1hcQXBpXFBhcnNlclxBdHRyaWJ1dGVgKQp0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGEgc3BlY2lmaWNhdGlvbiBmb3IgeW91ciBjb250cm9sbGVyLiBBIGNvbnRyb2xsZXIgY2xhc3MgY291bGQgdGhlbiBsb29rIGxpa2U6CgpgYGBwaHAKPD9waHAKCmNsYXNzIE15Q29udHJvbGxlcgp7CiAgICAjW0dldF0KICAgICNbUGF0aCgnL215L2VuZHBvaW50LzppZCcpXQogICAgcHVibGljIGZ1bmN0aW9uIGdldE1vZGVsKCNbUGFyYW1dIGludCAkaWQsICNbUXVlcnldIGludCAkeWVhcik6IFxNeVxSZXNwb25zZVxNb2RlbAogICAgewogICAgICAgIC8vIEBUT0RPIGltcGxlbWVudAogICAgfQogICAgCiAgICAjW1Bvc3RdCiAgICAjW1BhdGgoJy9teS9lbmRwb2ludCcpXQogICAgcHVibGljIGZ1bmN0aW9uIGluc2VydE1vZGVsKCNbQm9keV0gXE15XFJlcXVlc3RcTW9kZWwgJG1vZGVsKTogXE15XFJlc3BvbnNlXE1vZGVsCiAgICB7CiAgICAgICAgLy8gQFRPRE8gaW1wbGVtZW50CiAgICB9Cn0KCmBgYAoKVGhpcyB3b3VsZCBiZSB0aGVuIGVub3VnaCBmb3IgdGhlIEFQSSBjb21wb25lbnQgdG8gZ2VuZXJhdGUgZWl0aGVyIGFuIE9wZW5BUEkgc3BlY2lmaWNhdGlvbiBvciBhIGNsaWVudCBTREsuCk5vdGUgdGhpcyBsaWJyYXJ5IG9ubHkgbmVlZHMgdGhlIG1ldGEgaW5mb3JtYXRpb24sIGlmIHlvdSBjYW4gZ2V0IHRob3NlIG1ldGEgaW5mb3JtYXRpb24gYXQgeW91ciBmcmFtZXdvcmsgaW4gYW5vdGhlcgp3YXkgeW91IGNhbiBhbHNvIGltcGxlbWVudCBhIGN1c3RvbSBgUGFyc2VySW50ZXJmYWNlYC4KCiMjIyBTdGFuZGFsb25lCgpCZXNpZGUgdGhlIGZyYW1ld29yayBpbnRlZ3JhdGlvbiB5b3UgY2FuIHVzZSB0aGlzIGNvbXBvbmVudCBhbHNvIHRvIHNpbXBseSBwYXJzZSBleGlzdGluZyBUeXBlQVBJIHNwZWNpZmljYXRpb24gYW5kCmdlbmVyYXRlIHNwZWNpZmljIG91dHB1dC4gVGhlIGZvbGxvd2luZyBpcyBhIHNpbXBsZSBleGFtcGxlIGhvdyB0byB1c2UgdGhlIFBIUCBBUEkgYW5kIGhvdyB0byBnZW5lcmF0ZSBjb2RlLgoKYGBgcGhwCjw/cGhwCgovLyB1c2UgdGhlIEFQSSBtYW5hZ2VyIHRvIG9idGFpbiBhIHNwZWNpZmljYXRpb24gZnJvbSBkaWZmZXJlbnQgc291cmNlcwokbWFuYWdlciA9IG5ldyBcUFNYXEFwaVxBcGlNYW5hZ2VyKG5ldyBcUFNYXFNjaGVtYVxTY2hlbWFNYW5hZ2VyKCkpOwoKLy8gcmVhZHMgdGhlIFR5cGVBUEkgc3BlY2lmaWNhdGlvbiBhbmQgZ2VuZXJhdGVzIGEgc3BlY2lmaWNhdGlvbgokc3BlY2lmaWNhdGlvbiA9ICRtYW5hZ2VyLT5nZXRBcGkoJy4vdHlwZWFwaS5qc29uJyk7CgovLyBjb250YWlucyBhbGwgc2NoZW1hIHR5cGUgZGVmaW5pdGlvbnMKJGRlZmluaXRpb25zID0gJHNwZWNpZmljYXRpb24tPmdldERlZmluaXRpb25zKCk7CgovLyByZXR1cm5zIHRoZSByZXNvdXJjZSBmb28gZnJvbSB0aGUgc3BlY2lmaWNhdGlvbgokb3BlcmF0aW9uID0gJHNwZWNpZmljYXRpb24tPmdldE9wZXJhdGlvbnMoKS0+Z2V0KCdteS5vcGVyYXRpb24nKTsKCi8vIHJldHVybnMgYWxsIGF2YWlsYWJsZSBhcmd1bWVudHMKJG9wZXJhdGlvbi0+Z2V0QXJndW1lbnRzKCk7CgovLyByZXR1cm5zIHRoZSByZXR1cm4gdHlwZQokb3BlcmF0aW9uLT5nZXRSZXR1cm4oKTsKCi8vIHJldHVybnMgYWxsIGV4Y2VwdGlvbnMgd2hpY2ggYXJlIGRlc2NyaWJlZAokb3BlcmF0aW9uLT5nZXRUaHJvd3MoKTsKCi8vIHJldHVybnMgdGhlIGFzc2lnbmVkIEhUVFAgbWV0aG9kCiRvcGVyYXRpb24tPmdldE1ldGhvZCgpOwoKLy8gcmV0dXJucyB0aGUgYXNzaWduZWQgSFRUUCBwYXRoCiRvcGVyYXRpb24tPmdldFBhdGgoKTsKCi8vIGNyZWF0ZXMgYSBQSFAgY2xpZW50IHdoaWNoIGNvbnN1bWVzIHRoZSBkZWZpbmVkIG9wZXJhdGlvbnMKJHJlZ2lzdHJ5ID0gXFBTWFxBcGlcR2VuZXJhdG9yRmFjdG9yeTo6ZnJvbUxvY2FsKCktPmZhY3RvcnkoKTsKJGdlbmVyYXRvciA9ICRyZWdpc3RyeS0+Z2V0R2VuZXJhdG9yKFxQU1hcQXBpXFJlcG9zaXRvcnlcTG9jYWxSZXBvc2l0b3J5OjpDTElFTlRfUEhQKQoKJHNvdXJjZSA9ICRnZW5lcmF0b3ItPmdlbmVyYXRlKCRyZXNvdXJjZSk7CgpgYGAKCiMjIEdlbmVyYXRvcgoKIyMjIENsaWVudAoKLSBQSFAKLSBUeXBlc2NyaXB0CgojIyMgTWFya3VwCgotIENsaWVudAotIEhUTUwKLSBNYXJrZG93bgoKIyMjIFNwZWMKCi0gW09wZW5BUEldKGh0dHBzOi8vZ2l0aHViLmNvbS9PQUkvT3BlbkFQSS1TcGVjaWZpY2F0aW9uKQotIFtUeXBlQVBJXShodHRwczovL3R5cGVhcGkub3JnLykK
+ readmeEtag: '"b2824140b37957c3f5d888e0cff37aa7f4d1885f"'
+ readmeLastModified: Tue, 20 Aug 2024 21:12:15 GMT
repositoryId: 55149439
description: Parse and generate API specification formats
created: '2016-03-31T12:39:05Z'
- updated: '2024-07-13T00:18:30Z'
+ updated: '2024-08-20T21:12:36Z'
language: PHP
archived: false
stars: 35
@@ -3259,8 +3259,8 @@
owner: apioo
logo: https://avatars.githubusercontent.com/u/18172950?v=4
license: Apache-2.0
- repoEtag: '"f5dd8fec6c15ff038121519c964380eec5c1a8205cb092ca94879141bde9b0c1"'
- repoLastModified: Sat, 13 Jul 2024 00:18:30 GMT
+ repoEtag: '"0d0d150bf6dad1cad0c5da673e7f4fe5b761def898452d733d59af46a0d82c7b"'
+ repoLastModified: Tue, 20 Aug 2024 21:12:36 GMT
foundInMaster: true
id: ee32e280cf10ca5103c9b9e144021b91
- source: https://openapi.tools/
@@ -3284,17 +3284,17 @@
in .NET along with common serializers to extract raw OpenAPI JSON and YAML
documents from the model.
created: '2017-07-14T00:24:14Z'
- updated: '2024-08-19T21:41:28Z'
+ updated: '2024-08-20T06:31:48Z'
language: C#
archived: false
- stars: 1370
+ stars: 1371
watchers: 64
forks: 231
owner: microsoft
logo: https://avatars.githubusercontent.com/u/6154722?v=4
license: MIT
- repoEtag: '"409ddf1ca203fcc1325dfafccba5a3a95b9e213dafce48a2dbb6f004379f7d00"'
- repoLastModified: Mon, 19 Aug 2024 21:41:28 GMT
+ repoEtag: '"6303621542ff357488895c313c0280d1fa7e9d50233c057a08337acabfad1e75"'
+ repoLastModified: Tue, 20 Aug 2024 06:31:48 GMT
foundInMaster: true
id: 1066748bb5b1f114a70856a29fee4aa7
- source:
@@ -3594,17 +3594,17 @@
repositoryId: 41822320
description: 'The Swagger/OpenAPI toolchain for .NET, ASP.NET Core and TypeScript. '
created: '2015-09-02T19:11:57Z'
- updated: '2024-08-19T11:29:09Z'
+ updated: '2024-08-20T14:43:30Z'
language: C#
archived: false
- stars: 6663
+ stars: 6665
watchers: 163
- forks: 1229
+ forks: 1230
owner: RicoSuter
logo: https://avatars.githubusercontent.com/u/2603405?v=4
license: MIT
- repoEtag: '"255ede8328a9f8ab731e03db0a6ce55a6f0ade30210844475fded23bd3f38232"'
- repoLastModified: Mon, 19 Aug 2024 11:29:09 GMT
+ repoEtag: '"a6eb28d25b1a30fc1b12d7776ca54577c311f85fa45aa6bc0515ac527fa62032"'
+ repoLastModified: Tue, 20 Aug 2024 14:43:30 GMT
foundInMaster: true
id: 93636e95435e95198d7d15c9d507f0d3
- source: https://openapi.tools/
@@ -3667,17 +3667,17 @@
documentation, API clients and server stubs in different languages by
parsing your OpenAPI / Swagger definition.
created: '2011-07-06T14:26:48Z'
- updated: '2024-08-20T02:40:36Z'
+ updated: '2024-08-20T18:28:33Z'
language: Mustache
archived: false
- stars: 16843
+ stars: 16844
watchers: 413
forks: 6022
owner: swagger-api
logo: https://avatars.githubusercontent.com/u/7658037?v=4
license: Apache-2.0
- repoEtag: '"ce79bcbee1c2050ab6c8cdca570a6c8b5721b0732d59af1b29dc200d6bd8855c"'
- repoLastModified: Tue, 20 Aug 2024 02:40:36 GMT
+ repoEtag: '"04a778da363f71add756088a2006081957dbbb30ac6ef0338e500ffa3d67d1dd"'
+ repoLastModified: Tue, 20 Aug 2024 18:28:33 GMT
foundInMaster: true
id: eda1e66e1b7805496e42f57851791a32
- source: https://openapi.tools/
@@ -3701,17 +3701,17 @@
OpenAPI (f.k.a Swagger) Specification code generator. Supports C#,
PowerShell, Go, Java, Node.js, TypeScript, Python
created: '2015-02-20T23:02:54Z'
- updated: '2024-08-19T08:31:22Z'
+ updated: '2024-08-20T21:30:27Z'
language: TypeScript
archived: false
- stars: 4569
- watchers: 874
+ stars: 4570
+ watchers: 875
forks: 729
owner: Azure
logo: https://avatars.githubusercontent.com/u/6844498?v=4
license: MIT
- repoEtag: '"ed21685251560d23b19339d86bd554172bb19a32020f240a48cc0c74737a9790"'
- repoLastModified: Mon, 19 Aug 2024 08:31:22 GMT
+ repoEtag: '"b7ffc984d360e08c1dd2819d9036f59f8080eaebd45c7488e3f256b1ab5b7b8b"'
+ repoLastModified: Tue, 20 Aug 2024 21:30:27 GMT
foundInMaster: true
id: 648d92bca90bf58cd74407e0bcad2936
- source: https://openapi.tools/
@@ -4136,17 +4136,17 @@
configuration and no coding effort. Tests are self-healing and do not
require maintenance.
created: '2020-04-02T13:14:39Z'
- updated: '2024-08-16T09:25:40Z'
+ updated: '2024-08-20T15:20:53Z'
language: Java
archived: false
- stars: 1132
+ stars: 1131
watchers: 14
forks: 73
owner: Endava
logo: https://avatars.githubusercontent.com/u/19396140?v=4
license: Apache-2.0
- repoEtag: '"ea9c39ac443791915cb961f89ba50137fbf0d2fec8cea37237be0deb35e755eb"'
- repoLastModified: Fri, 16 Aug 2024 09:25:40 GMT
+ repoEtag: '"a2fe506daa3889d016b54bebd556609ceaf5751c7c95168b118b982ebd2b1228"'
+ repoLastModified: Tue, 20 Aug 2024 15:20:53 GMT
foundInMaster: true
- source: https://openapi.tools/
name: API Insights
@@ -4379,16 +4379,16 @@
repositoryId: 491304964
description: Automagically reverse-engineer REST APIs via capturing traffic
created: '2022-05-11T23:48:49Z'
- updated: '2024-08-18T21:48:38Z'
+ updated: '2024-08-20T11:49:37Z'
language: HTML
archived: false
- stars: 4982
+ stars: 4984
watchers: 21
forks: 217
owner: alufers
logo: https://avatars.githubusercontent.com/u/5400940?v=4
- repoEtag: '"ecda802d8762893ec268845371ece14d76547c97e2dcb6eaecb6791ad88dedec"'
- repoLastModified: Sun, 18 Aug 2024 21:48:38 GMT
+ repoEtag: '"16f4049782ca503b765bdaa7da5ba10a64e9eb7b6f2d314a3fe6a30ad7482b63"'
+ repoLastModified: Tue, 20 Aug 2024 11:49:37 GMT
foundInMaster: true
- source: https://openapi.tools/
name: OpenApiSpecGeneratorPlugin
@@ -4423,7 +4423,7 @@
owner: microsoft
logo: https://avatars.githubusercontent.com/u/6154722?v=4
license: MIT
- repoEtag: '"829c911af8305a5054735a1a28acfb1c8044ef96b7f595bd0c54b13c3302a956"'
+ repoEtag: '"376e1f5ab6c7cfd05f8dccbfb3d52f62557b69f3242ec8d0f0ed651218dcfbdb"'
repoLastModified: Sun, 18 Aug 2024 19:44:45 GMT
foundInMaster: true
- source: https://openapi.tools/
@@ -4557,17 +4557,17 @@
repositoryId: 709571808
description: Browser extension that generates API specs for any app or website
created: '2023-10-25T00:36:06Z'
- updated: '2024-08-19T04:03:55Z'
+ updated: '2024-08-20T15:30:32Z'
language: TypeScript
archived: false
- stars: 3873
+ stars: 3874
watchers: 21
forks: 68
owner: AndrewWalsh
logo: https://avatars.githubusercontent.com/u/15863952?v=4
license: MIT
- repoEtag: '"f63b9d13a2fbad374931e29f2813180a07f65a4a491ce3ce105f3e67f7fb9497"'
- repoLastModified: Mon, 19 Aug 2024 04:03:55 GMT
+ repoEtag: '"0cd7865c09474a5f73f6e965113fbfd7d4a85ed60757b984469413b11e840f00"'
+ repoLastModified: Tue, 20 Aug 2024 15:30:32 GMT
category:
- Auto Generators
- Documentation
@@ -4594,17 +4594,17 @@
repositoryId: 381857226
description: null
created: '2021-06-30T23:29:49Z'
- updated: '2024-08-20T02:14:01Z'
+ updated: '2024-08-20T23:48:58Z'
language: TypeScript
archived: false
- stars: 4057
+ stars: 4061
watchers: 32
forks: 188
owner: microsoft
logo: https://avatars.githubusercontent.com/u/6154722?v=4
license: MIT
- repoEtag: '"fe9bea15da7e7b385753ad16e49ac2d6ee74e496bff107bd36f0e1945ddff259"'
- repoLastModified: Tue, 20 Aug 2024 02:14:01 GMT
+ repoEtag: '"59194b97153f8efc50c0d68301409770413796ddca1685b5c184b6edf01dbae4"'
+ repoLastModified: Tue, 20 Aug 2024 23:48:58 GMT
category:
- Auto Generators
- Server Implementations
@@ -4681,17 +4681,17 @@
Restish is a CLI for interacting with REST-ish HTTP APIs with some nice
features built-in
created: '2020-05-15T06:45:59Z'
- updated: '2024-08-20T00:18:49Z'
+ updated: '2024-08-20T17:34:42Z'
language: Go
archived: false
- stars: 733
+ stars: 734
watchers: 7
forks: 69
owner: danielgtaylor
logo: https://avatars.githubusercontent.com/u/106826?v=4
license: MIT
- repoEtag: '"8bbc926f89317f6673087ab3d1fcb5cdec592561785608b03bd2aeb9f5dca7d0"'
- repoLastModified: Tue, 20 Aug 2024 00:18:49 GMT
+ repoEtag: '"bf8696201e6a0996a832e367d263d37aa158d7401c59b71ad9672d64cda1ffc5"'
+ repoLastModified: Tue, 20 Aug 2024 17:34:42 GMT
foundInMaster: true
id: 22a8c610015b1b9d89af39221beabe66
v3_1: true
@@ -4725,7 +4725,7 @@
owner: codekie
logo: https://avatars.githubusercontent.com/u/1512840?v=4
license: MIT
- repoEtag: '"a500b4c05c56247340d353f850e4cb983d5147d36b21aad121d2c026e2d652d9"'
+ repoEtag: '"9b963e1d0234a8c19ee12a88231666fd4600aaf0d803c14bc41bed8248627caa"'
repoLastModified: Thu, 01 Aug 2024 11:37:23 GMT
foundInMaster: true
id: 301e3f380f248daf345a88c8971d2a71
@@ -4798,7 +4798,7 @@
owner: thim81
logo: https://avatars.githubusercontent.com/u/952446?v=4
license: MIT
- repoEtag: '"a1694ee134da7ebedb6e3951cd811e6767a2894a50ffc3583f08f1137dbaf80c"'
+ repoEtag: '"69a13bc8ffcbd1efe7a8bbf223126b395bc110dcab3623a4a41a5c2bf6e6980a"'
repoLastModified: Mon, 19 Aug 2024 16:18:06 GMT
foundInMaster: true
id: 788dd625de099d0d3403fe30067f3743
@@ -4834,7 +4834,7 @@
owner: github
logo: https://avatars.githubusercontent.com/u/9919?v=4
license: MIT
- repoEtag: '"a7701ce844c9a956ba1cbc2f8aa5d9b36f182cbdb682ad090b7de9373596f2c7"'
+ repoEtag: '"35a870910ec94fb1efd98d3248011c96e39070a81fe9a8bb545e906436c17de6"'
repoLastModified: Wed, 31 Jul 2024 03:12:30 GMT
foundInMaster: true
id: ec6a7a1e4a69a9beeb95bdebb88cb36d
@@ -4864,12 +4864,12 @@
language: Java
archived: false
stars: 5921
- watchers: 266
+ watchers: 265
forks: 1533
owner: springfox
logo: https://avatars.githubusercontent.com/u/11529357?v=4
license: Apache-2.0
- repoEtag: '"369a24d2472efb7a7fcf533a458a5a2dd0fa6e179d46904c415637ce826de9ff"'
+ repoEtag: '"5ac11fc9cb73df6c1e1b7b6e065be5e5ecc1af1ae74147b285d523a49734090e"'
repoLastModified: Mon, 19 Aug 2024 02:51:13 GMT
foundInMaster: true
id: 2addde4c497bf582f20025ccac2cda86
@@ -4928,17 +4928,17 @@
repositoryId: 36817565
description: The ZAP core project
created: '2015-06-03T16:55:01Z'
- updated: '2024-08-19T23:18:50Z'
+ updated: '2024-08-20T23:51:20Z'
language: Java
archived: false
- stars: 12411
+ stars: 12420
watchers: 395
- forks: 2219
+ forks: 2222
owner: zaproxy
logo: https://avatars.githubusercontent.com/u/6716868?v=4
license: Apache-2.0
- repoEtag: '"52cd6f6b0f1c5229b0845d8844b9a384d70db1b97e914dc76b2ddf9a95167a27"'
- repoLastModified: Mon, 19 Aug 2024 23:18:50 GMT
+ repoEtag: '"1d44fb9e81a6fe1051982b5013e49c0a73bfb6bbe941acee49dd1cef4b382005"'
+ repoLastModified: Tue, 20 Aug 2024 23:51:20 GMT
foundInMaster: true
id: 9eedc1be44837a65f912bcf562844f39
- source:
@@ -5272,17 +5272,17 @@
repositoryId: 1431547
description: Web APIs for Django. 🎸
created: '2011-03-02T17:13:56Z'
- updated: '2024-08-20T02:42:01Z'
+ updated: '2024-08-20T23:27:57Z'
language: Python
archived: false
- stars: 28026
- watchers: 623
- forks: 6794
+ stars: 28034
+ watchers: 622
+ forks: 6795
owner: encode
logo: https://avatars.githubusercontent.com/u/19159390?v=4
license: NOASSERTION
- repoEtag: '"a458bdfd85840993735c1958494b7a08a25a68f4e108ac678e7cb5744b060f61"'
- repoLastModified: Tue, 20 Aug 2024 02:42:01 GMT
+ repoEtag: '"5951697a5f49450c3aa591c90026e4f53014ea69901f2e544ff609e6532a6326"'
+ repoLastModified: Tue, 20 Aug 2024 23:27:57 GMT
foundInMaster: true
id: fb8994c078a380cc3510b024f6ed1202
category: Server Implementations
@@ -5316,7 +5316,7 @@
owner: isa-group
logo: https://avatars.githubusercontent.com/u/2708867?v=4
license: LGPL-3.0
- repoEtag: '"05b397f204456fe71cb999893a0ab8bf04a631d6acd6aa5faa8ca9e45e3d874d"'
+ repoEtag: '"79639a43faff8143790c4d39216202085edd998d407c0f94c63d4bd5121c0eb9"'
repoLastModified: Mon, 19 Aug 2024 14:34:01 GMT
foundInMaster: true
id: 9115f26fa9e7b17b844a0f10b9814db7
@@ -5467,17 +5467,17 @@
repositoryId: 240776275
description: Generate modern Python clients from OpenAPI
created: '2020-02-15T19:33:46Z'
- updated: '2024-08-19T02:14:07Z'
+ updated: '2024-08-20T19:41:39Z'
language: Python
archived: false
- stars: 1230
+ stars: 1231
watchers: 14
forks: 193
owner: openapi-generators
logo: https://avatars.githubusercontent.com/u/84925606?v=4
license: MIT
- repoEtag: '"aed9320c113b15d33d91851210a3e40e5ada6dfdd0c80c78c5fbf50be9d71ede"'
- repoLastModified: Mon, 19 Aug 2024 02:14:07 GMT
+ repoEtag: '"deb982b03d6dae1298c9a89863ba301f09905295a73591a0b081bee13adf20aa"'
+ repoLastModified: Tue, 20 Aug 2024 19:41:39 GMT
foundInMaster: true
id: 784ec4adac4e47e4211ea74ef36dd5a5
v3_1: true
@@ -5507,17 +5507,17 @@
Build beautiful, interactive API Docs with embeddable React or Web
Components, powered by OpenAPI and Markdown.
created: '2019-05-03T01:05:01Z'
- updated: '2024-08-19T21:02:48Z'
+ updated: '2024-08-20T19:33:19Z'
language: TypeScript
archived: false
- stars: 1681
+ stars: 1683
watchers: 18
- forks: 195
+ forks: 196
owner: stoplightio
logo: https://avatars.githubusercontent.com/u/10767217?v=4
license: Apache-2.0
- repoEtag: '"7d5da3694a2b51d7b49b7e5ac8309ee9bd29c832b98da5ea0b38a4b08dc13a65"'
- repoLastModified: Mon, 19 Aug 2024 21:02:48 GMT
+ repoEtag: '"e1de79654af780b1c7cd7b3d294911ecac7c6bdf4b1dfae16aa9a6429162b805"'
+ repoLastModified: Tue, 20 Aug 2024 19:33:19 GMT
foundInMaster: true
id: 2f94cc1fc980953b17a9979d4ff2e7ec
- source:
@@ -5643,17 +5643,17 @@
undefined user behaviour by auditing your API specifications, validating
them and running API security tests.
created: '2021-11-17T07:02:22Z'
- updated: '2024-08-16T23:26:35Z'
+ updated: '2024-08-20T23:48:24Z'
language: Rust
archived: false
- stars: 1098
+ stars: 1099
watchers: 12
forks: 78
owner: blst-security
logo: https://avatars.githubusercontent.com/u/54233087?v=4
license: Apache-2.0
- repoEtag: '"bea7497825ca9468f95b6dfd424f025202f293d86c855c34eb805f417dc54fb7"'
- repoLastModified: Fri, 16 Aug 2024 23:26:35 GMT
+ repoEtag: '"5036de2a887c67f195d3c9f29cf1b2bf67cf04544d0e3eb47439c13b45b8e72d"'
+ repoLastModified: Tue, 20 Aug 2024 23:48:24 GMT
foundInMaster: true
name: Cherrybomb
category: Description Validators
@@ -5919,17 +5919,17 @@
repositoryId: 479515560
description: OpenAPI / Swagger to TypeScript generator and mock server
created: '2022-04-08T19:32:15Z'
- updated: '2024-08-17T12:50:27Z'
+ updated: '2024-08-20T13:09:08Z'
language: TypeScript
archived: false
- stars: 95
+ stars: 96
watchers: 7
forks: 13
owner: pmcelhaney
logo: https://avatars.githubusercontent.com/u/51504?v=4
license: MIT
- repoEtag: '"267080d1010e5410b1b99fbad49b71ac26918d87909c2a04218fef77413f1617"'
- repoLastModified: Sat, 17 Aug 2024 12:50:27 GMT
+ repoEtag: '"1a168c6b2f764943fc11a2e84428854aa1724b63bec88d3617371558160bdf5d"'
+ repoLastModified: Tue, 20 Aug 2024 13:09:08 GMT
category:
- Mock
- SDK
@@ -5982,17 +5982,17 @@
you can think. vacuum is compatible with Spectral rulesets and generates
compatible reports.
created: '2021-10-10T18:24:19Z'
- updated: '2024-08-19T17:07:43Z'
+ updated: '2024-08-20T12:04:00Z'
language: Go
archived: false
- stars: 538
+ stars: 539
watchers: 8
forks: 42
owner: daveshanley
logo: https://avatars.githubusercontent.com/u/187345?v=4
license: MIT
- repoEtag: '"cceabfd7218eb8a7027b72c49dd31dd6efc604df3e37c97ac0fa3427e5eff179"'
- repoLastModified: Mon, 19 Aug 2024 17:07:43 GMT
+ repoEtag: '"c71bd497a2f385ab71a286151637efcaaf008b49cb8228cbc09d898000be7e39"'
+ repoLastModified: Tue, 20 Aug 2024 12:04:00 GMT
foundInMaster: true
category:
- Description Validators
@@ -6382,7 +6382,7 @@
Development - Collaboratively Design & Independently Deploy MicroServices
& MicroFrontends.
created: '2020-03-16T13:33:07Z'
- updated: '2024-08-18T20:40:42Z'
+ updated: '2024-08-20T18:14:40Z'
language: Kotlin
archived: false
stars: 258
@@ -6391,8 +6391,8 @@
owner: znsio
logo: https://avatars.githubusercontent.com/u/75619722?v=4
license: MIT
- repoEtag: '"9f2e54e9f802443dc87848a46fdfbda018b0370e94a4914468ccf50bb265af3d"'
- repoLastModified: Sun, 18 Aug 2024 20:40:42 GMT
+ repoEtag: '"910e9a6272d02cb88a1576ada9cdecb1d3654fcbe2dc4aae02520f0f38e6cc18"'
+ repoLastModified: Tue, 20 Aug 2024 18:14:40 GMT
foundInMaster: true
- source:
- https://openapi.tools/
@@ -6741,7 +6741,7 @@
owner: rswag
logo: https://avatars.githubusercontent.com/u/55741034?v=4
license: MIT
- repoEtag: '"69f426f702b713c467fb4b10cb9e27e0e48ab2b98c75381c2cc9fdb4627c58c6"'
+ repoEtag: '"da2aef9b3e16bf39126730991fced80eaf07daaf76aa5560a53672be0b985d1d"'
repoLastModified: Sun, 18 Aug 2024 20:34:02 GMT
foundInMaster: true
v3_1_link: https://github.com/rswag/rswag/pull/714
@@ -6780,23 +6780,23 @@
id: 9a06b3cc23e65a92ab1f012b26743de1
repositoryMetadata:
base64Readme: >-
- PGJyLz4KPGRpdiBhbGlnbj0iY2VudGVyIj4KICA8YSBocmVmPSJodHRwczovL3d3dy5idWlsZHdpdGhmZXJuLmNvbS8/dXRtX3NvdXJjZT1naXRodWImdXRtX21lZGl1bT1yZWFkbWUmdXRtX2NhbXBhaWduPWZlcm4mdXRtX2NvbnRlbnQ9bG9nbyI+CiAgICA8aW1nIHNyYz0iL2Zlcm4vaW1hZ2VzL2xvZ28tcHJpbWFyeS5wbmciIGhlaWdodD0iODAiIGFsaWduPSJjZW50ZXIiIGFsdD0iaGVhZGVyIiAvPgogIDwvYT4KPGJyLz4KCjxici8+CgpbIVsyMDIzIFkgQ29tYmluYXRvciBTdGFydHVwXShodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL1klMjBDb21iaW5hdG9yLTIwMjMtb3JhbmdlKV0oaHR0cHM6Ly93d3cueWNvbWJpbmF0b3IuY29tL2NvbXBhbmllcy9mZXJuKQohW0xpY2Vuc2VdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvTGljZW5zZS1NSVQtYmx1ZSkKClshW0Rpc2NvcmRdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvSm9pbiUyME91ciUyMENvbW11bml0eS1ibGFjaz9sb2dvPWRpc2NvcmQpXShodHRwczovL2Rpc2NvcmQuY29tL2ludml0ZS9Ka2tYdW1QemNHKQpbIVtEb2N1bWVudGF0aW9uXShodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL1JlYWQlMjBvdXIlMjBEb2N1bWVudGF0aW9uLWJsYWNrP2xvZ289Ym9vayldKGh0dHBzOi8vYnVpbGR3aXRoZmVybi5jb20vbGVhcm4vaG9tZT91dG1fc291cmNlPWZlcm4tYXBpL2Zlcm4vcmVhZG1lLXJlYWQtb3VyLWRvY3VtZW50YXRpb24pCgo8L2Rpdj4KCkZlcm4gaXMgYSB0b29sa2l0IHRoYXQgYWxsb3dzIHlvdSB0byBpbnB1dCB5b3VyIEFQSSBEZWZpbml0aW9uIGFuZCBvdXRwdXQgU0RLcyBhbmQgQVBJIGRvY3VtZW50YXRpb24uIEZlcm4gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBPcGVuQVBJIHNwZWNpZmljYXRpb24gKGZvcm1lcmx5IFN3YWdnZXIpLgoKPGRpdiBhbGlnbj0iY2VudGVyIj4KICAgIDxpbWcgc3JjPSIvZmVybi9pbWFnZXMvb3ZlcnZpZXcucG5nIiB3aWR0aD0iNzAwIiBhbHQ9Ik92ZXJ2aWV3IERpYWdyYW0iPgo8L2Rpdj4KCiMjIPCfjL8gU0RLcwoKVGhlIEZlcm4gdG9vbGtpdCBpcyBhdmFpbGFibGUgdmlhIGEgY29tbWFuZCBsaW5lIGludGVyZmFjZSAoQ0xJKSBhbmQgcmVxdWlyZXMgTm9kZSAxOCsuIFRvIGluc3RhbGwgaXQsIHJ1bjoKCmBgYGJhc2gKbnBtIGluc3RhbGwgLWcgZmVybi1hcGkKYGBgCgpJbml0aWFsaXplIEZlcm4gd2l0aCB5b3VyIE9wZW5BUEkgc3BlYzoKCmBgYGJhc2gKZmVybiBpbml0IC0tb3BlbmFwaSAuL3BhdGgvdG8vb3BlbmFwaS55bWwKIyBvcgpmZXJuIGluaXQgLS1vcGVuYXBpIGh0dHBzOi8vbGluay5idWlsZHdpdGhmZXJuLmNvbS9wZXRzdG9yZS1vcGVuYXBpCmBgYAoKWW91ciBkaXJlY3Rvcnkgc2hvdWxkIGxvb2sgbGlrZSB0aGUgZm9sbG93aW5nOgoKYGBgeWFtbApmZXJuLwrilJzilIAgZmVybi5jb25maWcuanNvbgrilJzilIAgZ2VuZXJhdG9ycy55bWwgIyBnZW5lcmF0b3JzIHlvdSdyZSB1c2luZwrilJTilIAgb3BlbmFwaS8KICDilJTilIAgb3BlbmFwaS5qc29uICMgeW91ciBvcGVuYXBpIGRvY3VtZW50CmBgYAoKRmluYWxseSwgdG8gaW52b2tlIHRoZSBnZW5lcmF0b3IsIHJ1bjoKCmBgYGJhc2gKZmVybiBnZW5lcmF0ZQpgYGAKCvCfjokgT25jZSB0aGUgY29tbWFuZCBjb21wbGV0ZXMsIHlvdSdsbCBzZWUgeW91ciBTREsgaW4gYC9nZW5lcmF0ZWQvc2Rrcy90eXBlc2NyaXB0YC4KCiMjIPCfjL8gQVBJIERvY3VtZW50YXRpb24KCkZlcm4gY2FuIGFsc28gYnVpbGQgYW5kIGhvc3QgYSBkb2N1bWVudGF0aW9uIHdlYnNpdGUgd2l0aCBhbiBhdXRvLWdlbmVyYXRlZCBBUEkgcmVmZXJlbmNlLiBXcml0ZSBhZGRpdGlvbmFsIHBhZ2VzIGluIG1hcmtkb3duIGFuZCBoYXZlIHRoZW0gdmVyc2lvbmVkIHdpdGggZ2l0LiBTZWFyY2gsIFNFTywgZGFyayBtb2RlLCBhbmQgcG9wdWxhciBjb21wb25lbnRzIGFyZSBwcm92aWRlZCBvdXQtb2YtdGhlLWJveC4gUGx1cywgeW91IGNhbiBjdXN0b21pemUgdGhlIGNvbG9ycywgZm9udCwgbG9nbywgYW5kIGRvbWFpbiBuYW1lLgoKQ2hlY2sgb3V0IGRvY3MgYnVpbHQgd2l0aCBGZXJuOgoKLSBbZG9jcy52ZWxsdW0uYWldKGh0dHBzOi8vZG9jcy52ZWxsdW0uYWkpCi0gW2RvY3Muc3VwZXJhZ2VudC5zaF0oaHR0cHM6Ly9kb2NzLnN1cGVyYWdlbnQuc2gvKQotIFtkb2NzLmh1bWUuYWldKGh0dHBzOi8vZG9jcy5odW1lLmFpLykKCkdldCBzdGFydGVkIFtoZXJlXShodHRwczovL2dpdGh1Yi5jb20vZmVybi1hcGkvZG9jcy1zdGFydGVyLW9wZW5hcGkpLgoKIyMg8J+MvyBHZW5lcmF0b3JzCgpHZW5lcmF0b3JzIGFyZSBwcm9jZXNzIHRoYXQgdGFrZSB5b3VyIEFQSSBEZWZpbml0aW9uIGFzIGlucHV0IGFuZCBvdXRwdXQgYXJ0aWZhY3RzIChTREtzLApQb3N0bWFuIENvbGxlY3Rpb25zLCBTZXJ2ZXIgYm9pbGVycGxhdGUsIGV0Yy4pLiBUbyBhZGQgYSBnZW5lcmF0b3IgcnVuIGBmZXJuIGFkZCA8Z2VuZXJhdG9yIGlkPmAKCiMjIyBTREsgR2VuZXJhdG9ycwoKfCBHZW5lcmF0b3IgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExhdGVzdCBWZXJzaW9uIHwgQ2hhbmdlbG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW50cnlwb2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfAp8IGBmZXJuYXBpL2Zlcm4tdHlwZXNjcmlwdC1ub2RlLXNka2AgICAgIHwgWyFbVHlwZXNjcmlwdCBHZW5lcmF0b3IgVmVyc2lvbl0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9kb2NrZXIvdi9mZXJuYXBpL2Zlcm4tdHlwZXNjcmlwdC1ub2RlLXNkayldKC4vZ2VuZXJhdG9ycy90eXBlc2NyaXB0L3Nkay9WRVJTSU9OKSB8IFtDSEFOR0VMT0cubWRdKC4vZ2VuZXJhdG9ycy90eXBlc2NyaXB0L3Nkay9DSEFOR0VMT0cubWQpICAgICB8IFtjbGkudHNdKC4vZ2VuZXJhdG9ycy90eXBlc2NyaXB0L3Nkay9jbGkvc3JjL25vZGVDbGkudHMpICAgICAgICAgICAgICAgICAgICAgICAgfAp8IGBmZXJuYXBpL2Zlcm4tcHl0aG9uLXNka2AgICAgICAgICAgICAgIHwgWyFbUHl0aG9uIEdlbmVyYXRvciBWZXJzaW9uXShodHRwczovL2ltZy5zaGllbGRzLmlvL2RvY2tlci92L2Zlcm5hcGkvZmVybi1weXRob24tc2RrKV0oLi9nZW5lcmF0b3JzL3B5dGhvbi9zZGsvVkVSU0lPTikgICAgICAgICAgICAgICAgICB8IFtDSEFOR0VMT0cubWRdKC4vZ2VuZXJhdG9ycy9weXRob24vc2RrL0NIQU5HRUxPRy5tZCkgICAgICAgICB8IFtjbGkucHldKC4vZ2VuZXJhdG9ycy9weXRob24vc3JjL2Zlcm5fcHl0aG9uL2dlbmVyYXRvcnMvc2RrL2NsaS5weSkgICAgICAgICAgICAgfAp8IGBmZXJuYXBpL2Zlcm4tamF2YS1zZGtgICAgICAgICAgICAgICAgIHwgWyFbSmF2YSBHZW5lcmF0b3IgVmVyc2lvbl0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9kb2NrZXIvdi9mZXJuYXBpL2Zlcm4tamF2YS1zZGspXSguL2dlbmVyYXRvcnMvamF2YS9zZGsvVkVSU0lPTikgICAgICAgICAgICAgICAgICAgICAgICB8IFtDSEFOR0VMT0cubWRdKC4vZ2VuZXJhdG9ycy9qYXZhL3Nkay9DSEFOR0VMT0cubWQpICAgICAgICAgICB8IFtDbGkuamF2YV0oLi9nZW5lcmF0b3JzL2phdmEvc2RrL3NyYy9tYWluL2phdmEvY29tL2Zlcm4vamF2YS9jbGllbnQvQ2xpLmphdmEpICAgfAp8IGBmZXJuYXBpL2Zlcm4tcnVieS1zZGtgICAgICAgICAgICAgICAgIHwgWyFbUnVieSBHZW5lcmF0b3IgVmVyc2lvbl0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9kb2NrZXIvdi9mZXJuYXBpL2Zlcm4tcnVieS1zZGspXSguL2dlbmVyYXRvcnMvcnVieS9zZGsvVkVSU0lPTikgICAgICAgICAgICAgICAgICAgICAgICB8IFtDSEFOR0VMT0cubWRdKC4vZ2VuZXJhdG9ycy9ydWJ5L3Nkay9DSEFOR0VMT0cubWQpICAgICAgICAgICB8IFtjbGkudHNdKC4vZ2VuZXJhdG9ycy9ydWJ5L3Nkay9zcmMvY2xpLnRzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IGBmZXJuYXBpL2Zlcm4tZ28tc2RrYCAgICAgICAgICAgICAgICAgIHwgWyFbR28gR2VuZXJhdG9yIFZlcnNpb25dKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZG9ja2VyL3YvZmVybmFwaS9mZXJuLWdvLXNkayldKC4vZ2VuZXJhdG9ycy9nby9zZGsvVkVSU0lPTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtDSEFOR0VMT0cubWRdKC4vZ2VuZXJhdG9ycy9nby9zZGsvQ0hBTkdFTE9HLm1kKSAgICAgICAgICAgICB8IFttYWluLmdvXSguL2dlbmVyYXRvcnMvZ28vY21kL2Zlcm4tZ28tc2RrL21haW4uZ28pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IGBmZXJuYXBpL2Zlcm4tY3NoYXJwLXNka2AgICAgICAgICAgICAgIHwgWyFbQyMgR2VuZXJhdG9yIFZlcnNpb25dKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZG9ja2VyL3YvZmVybmFwaS9mZXJuLWNzaGFycC1zZGspXSguL2dlbmVyYXRvcnMvY3NoYXJwL3Nkay9WRVJTSU9OKSAgICAgICAgICAgICAgICAgICAgICB8IFtDSEFOR0VMT0cubWRdKC4vZ2VuZXJhdG9ycy9jc2hhcnAvc2RrL0NIQU5HRUxPRy5tZCkgICAgICAgICB8IFtjbGkudHNdKC4vZ2VuZXJhdG9ycy9jc2hhcnAvc2RrL3NyYy9jbGkudHMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAoKIyMjIFNlcnZlci1zaWRlIEdlbmVyYXRvcnMKCkZlcm4ncyBzZXJ2ZXItc2lkZSBnZW5lcmF0b3JzIG91dHB1dCBib2lsZXJwbGF0ZSBhcHBsaWNhdGlvbiBjb2RlIChtb2RlbHMgYW5kIG5ldHdvcmtpbmcgbG9naWMpLiBUaGlzIGlzIGludGVuZGVkIGZvciBzcGVjLWZpcnN0IG9yIEFQSS1maXJzdCBkZXZlbG9wZXJzLAp3aG8gd3JpdGUgdGhlaXIgQVBJIGRlZmluaXRpb24gKGFzIGFuIE9wZW5BUEkgc3BlYyBvciBGZXJuIGRlZmluaXRpb24pIGFuZCB3YW50IHRvIGdlbmVyYXRlIGJhY2tlbmQgY29kZS4KCnwgR2VuZXJhdG9yIElEICAgICAgICAgICAgICAgICAgfCBMYXRlc3QgVmVyc2lvbiB8IENoYW5nZWxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVudHJ5cG9pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfAp8IGBmZXJuYXBpL2Zlcm4tdHlwZXNjcmlwdC1leHByZXNzYCB8IFshW1R5cGVzY3JpcHQgRXhwcmVzcyBTZXJ2ZXIgR2VuZXJhdG9yIFZlcnNpb25dKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZG9ja2VyL3YvZmVybmFwaS9mZXJuLXR5cGVzY3JpcHQtZXhwcmVzcyldKC4vZ2VuZXJhdG9ycy90eXBlc2NyaXB0L2V4cHJlc3MvVkVSU0lPTikgfCBbQ0hBTkdFTE9HLm1kXSguL2dlbmVyYXRvcnMvdHlwZXNjcmlwdC9leHByZXNzL0NIQU5HRUxPRy5tZCkgfCBbY2xpLnRzXSguL2dlbmVyYXRvcnMvdHlwZXNjcmlwdC9leHByZXNzL2NsaS9zcmMvY2xpLnRzKSAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgYGZlcm5hcGkvZmVybi1mYXN0YXBpLXNlcnZlcmAgfCBbIVtQeXRob24gRmFzdEFQSSBTZXJ2ZXIgR2VuZXJhdG9yIFZlcnNpb25dKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZG9ja2VyL3YvZmVybmFwaS9mZXJuLWZhc3RhcGktc2VydmVyKV0oLi9nZW5lcmF0b3JzL3B5dGhvbi9mYXN0YXBpL1ZFUlNJT04pIHwgW0NIQU5HRUxPRy5tZF0oLi9nZW5lcmF0b3JzL3B5dGhvbi9mYXN0YXBpL0NIQU5HRUxPRy5tZCkgICAgIHwgW2NsaS5weV0oLi9nZW5lcmF0b3JzL3B5dGhvbi9zcmMvZmVybl9weXRob24vZ2VuZXJhdG9ycy9zZGsvY2xpLnB5KSAgICAgICAgICAgICAgfAp8IGBmZXJuYXBpL2Zlcm4tamF2YS1zcHJpbmdgICAgIHwgWyFbSmF2YSBTcHJpbmcgU2VydmVyIEdlbmVyYXRvciBWZXJzaW9uXShodHRwczovL2ltZy5zaGllbGRzLmlvL2RvY2tlci92L2Zlcm5hcGkvZmVybi1qYXZhLXNwcmluZyldKC4vZ2VuZXJhdG9ycy9qYXZhL3NwcmluZy9WRVJTSU9OKSB8IFtDSEFOR0VMT0cubWRdKC4vZ2VuZXJhdG9ycy9qYXZhL3NwcmluZy9DSEFOR0VMT0cubWQpICAgICAgICB8IFtDbGkuamF2YV0oLi9nZW5lcmF0b3JzL2phdmEvc3ByaW5nL3NyYy9tYWluL2phdmEvY29tL2Zlcm4vamF2YS9zcHJpbmcvQ2xpLmphdmEpIHwKCiMjIyBNb2RlbCBHZW5lcmF0b3JzCgpGZXJuJ3MgbW9kZWwgZ2VuZXJhdG9ycyB3aWxsIG91dHB1dCBzY2hlbWFzIG9yIHR5cGVzIGRlZmluZWQgaW4geW91ciBPcGVuQVBJIHNwZWMgb3IgRmVybiBEZWZpbml0aW9uLgoKfCBHZW5lcmF0b3IgSUQgICAgICAgICAgICAgICAgICB8IExhdGVzdCBWZXJzaW9uIHwgQ2hhbmdlbG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW50cnlwb2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8CnwgYGZlcm5hcGkvZmVybi1weWRhbnRpYy1tb2RlbGAgfCBbIVtQeWRhbnRpYyBNb2RlbCBHZW5lcmF0b3IgVmVyc2lvbl0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9kb2NrZXIvdi9mZXJuYXBpL2Zlcm4tcHlkYW50aWMtbW9kZWwpXSguL2dlbmVyYXRvcnMvcHl0aG9uL3B5ZGFudGljL1ZFUlNJT04pIHwgW0NIQU5HRUxPRy5tZF0oLi9nZW5lcmF0b3JzL3B5dGhvbi9weWRhbnRpYy9DSEFOR0VMT0cubWQpIHwgW2NsaS5weV0oLi9nZW5lcmF0b3JzL3B5dGhvbi9zcmMvZmVybl9weXRob24vZ2VuZXJhdG9ycy9zZGsvY2xpLnB5KSAgICAgICAgICAgfAp8IGBmZXJuYXBpL2phdmEtbW9kZWxgICAgICB8IFshW0phdmEgTW9kZWwgR2VuZXJhdG9yIFZlcnNpb25dKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZG9ja2VyL3YvZmVybmFwaS9qYXZhLW1vZGVsKV0oLi9nZW5lcmF0b3JzL2phdmEvbW9kZWwvVkVSU0lPTikgfCBbQ0hBTkdFTE9HLm1kXSguL2dlbmVyYXRvcnMvamF2YS9tb2RlbC9DSEFOR0VMT0cubWQpICAgICAgICB8IFtDbGkuamF2YV0oLi9nZW5lcmF0b3JzL2phdmEvc2RrL3NyYy9tYWluL2phdmEvY29tL2Zlcm4vamF2YS9jbGllbnQvQ2xpLmphdmEpIHwKfCBgZmVybmFwaS9mZXJuLXJ1YnktbW9kZWxgICAgICB8IFshW1J1YnkgTW9kZWwgR2VuZXJhdG9yIFZlcnNpb25dKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZG9ja2VyL3YvZmVybmFwaS9mZXJuLXJ1YnktbW9kZWwpXSguL2dlbmVyYXRvcnMvcnVieS9tb2RlbC9WRVJTSU9OKXwgW0NIQU5HRUxPRy5tZF0oLi9nZW5lcmF0b3JzL3J1YnkvbW9kZWwvQ0hBTkdFTE9HLm1kKSAgICAgIHwgW2NsaS50c10oLi9nZW5lcmF0b3JzL3J1YnkvbW9kZWwvc3JjL2NsaS50cykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAoKIyMjIFNwZWMgR2VuZXJhdG9ycwoKRmVybidzIHNwZWMgZ2VuZXJhdG9ycyBjYW4gb3V0cHV0IGFuIE9wZW5BUEkgc3BlYyBvciBhIFBvc3RtYW4gY29sbGVjdGlvbi4KCj4gKipOb3RlKio6IFRoZSBPcGVuQVBJIHNwZWMgZ2VuZXJhdG9yIGlzIHByaW1hcmx5IGludGVuZGVkIGZvciBGZXJuIERlZmluaXRpb24gdXNlcnMuIFRoaXMgcHJldmVudHMgbG9jay1pbiBzbyB0aGF0IG9uZSBjYW4gYWx3YXlzIGV4cG9ydCB0byBPcGVuQVBJLgoKfCBHZW5lcmF0b3IgSUQgICAgICAgICAgIHwgTGF0ZXN0IFZlcnNpb24gfCBDaGFuZ2Vsb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW50cnlwb2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwKfCBgZmVybmFwaS9mZXJuLW9wZW5hcGlgIHwgWyFbT3BlbkFQSSBHZW5lcmF0b3IgVmVyc2lvbl0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9kb2NrZXIvdi9mZXJuYXBpL2Zlcm4tb3BlbmFwaSldKC4vZ2VuZXJhdG9ycy9vcGVuYXBpL1ZFUlNJT04pIHwgW0NIQU5HRUxPRy5tZF0oLi9nZW5lcmF0b3JzL29wZW5hcGkvQ0hBTkdFTE9HLm1kKSB8IFtjbGkudHNdKC4vZ2VuZXJhdG9ycy9vcGVuYXBpL3NyYy9jbGkudHMpICB8CnwgYGZlcm5hcGkvZmVybi1wb3N0bWFuYCB8IFshW1Bvc3RtYW4gR2VuZXJhdG9yIFZlcnNpb25dKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZG9ja2VyL3YvZmVybmFwaS9mZXJuLXBvc3RtYW4pXSguL2dlbmVyYXRvcnMvcG9zdG1hbi9WRVJTSU9OKSB8IFtDSEFOR0VMT0cubWRdKC4vZ2VuZXJhdG9ycy9wb3N0bWFuL0NIQU5HRUxPRy5tZCkgfCBbY2xpLnRzXSguL2dlbmVyYXRvcnMvcG9zdG1hbi9zcmMvY2xpLnRzKSB8CgojIyDwn4y/IENMSSBDb21tYW5kcwoKSGVyZSdzIGEgcXVpY2sgbG9vayBhdCB0aGUgbW9zdCBwb3B1bGFyIENMSSBjb21tYW5kcy4gVmlldyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgW2FsbCBDTEkgY29tbWFuZHNdKGh0dHBzOi8vYnVpbGR3aXRoZmVybi5jb20vbGVhcm4vY2xpLWFwaS9jbGktcmVmZXJlbmNlL2NvbW1hbmRzKS4KCmBmZXJuIGluaXRgOiBhZGRzIGEgbmV3IHN0YXJ0ZXIgQVBJIHRvIHlvdXIgcmVwb3NpdG9yeS4KCmBmZXJuIGNoZWNrYDogdmFsaWRhdGUgeW91ciBBUEkgZGVmaW5pdGlvbiBhbmQgRmVybiBjb25maWd1cmF0aW9uLgoKYGZlcm4gZ2VuZXJhdGVgOiBydW4gdGhlIGdlbmVyYXRvcnMgc3BlY2lmaWVkIGluIGBnZW5lcmF0b3JzLnltbGAgaW4gdGhlIGNsb3VkLgoKYGZlcm4gZ2VuZXJhdGUgLS1sb2NhbGA6IHJ1biB0aGUgZ2VuZXJhdG9ycyBzcGVjaWZpZWQgaW4gYGdlbmVyYXRvcnMueW1sYCBpbiBkb2NrZXIgbG9jYWxseS4KCmBmZXJuIGFkZCA8Z2VuZXJhdG9yPmA6IGluY2x1ZGUgYSBuZXcgZ2VuZXJhdG9yIGluIHlvdXIgYGdlbmVyYXRvcnMueW1sYC4gRm9yIGV4YW1wbGUsIGBmZXJuIGFkZCBmZXJuLXB5dGhvbi1zZGtgLgoKIyMgQWR2YW5jZWQKCiMjIyBBUEkgRmlyc3QKCkZlcm4gc3VwcG9ydHMgZGV2ZWxvcGVycyBhbmQgdGVhbXMgdGhhdCB3YW50IHRvIGJlIEFQSS1maXJzdCBvciBTcGVjLWZpcnN0LgoKRGVmaW5lIHlvdXIgQVBJLCBhbmQgdXNlIEZlcm4gdG8gZ2VuZXJhdGUgbW9kZWxzLCBuZXR3b3JraW5nIGNvZGUgYW5kIGJvaWxlcnBsYXRlIGFwcGxpY2F0aW9uIGNvZGUuIFRoZSBnZW5lcmF0ZWQgY29kZSBhZGRzCnR5cGUgc2FmZXR5IHRvIHlvdXIgQVBJIGltcGxlbWVudGF0aW9uIC0gaWYgeW91ciBiYWNrZW5kIGRvZXNuJ3QgaW1wbGVtZW50IHRoZSBBUEkgY29ycmVjdGx5LCBpdCB3b24ndCBjb21waWxlLgoKRnJhbWV3b3JrcyBjdXJyZW50bHkgc3VwcG9ydGVkOgoKLSBbRXhwcmVzc10oLi9nZW5lcmF0b3JzL3R5cGVzY3JpcHQpCi0gW1NwcmluZyBCb290XSguL2dlbmVyYXRvcnMvamF2YSkKLSBbRmFzdEFQSV0oLi9nZW5lcmF0b3JzL3B5dGhvbikKCiMjIyBGZXJuIERlZmluaXRpb24KCldoaWxlIHdlIGFyZSBiaWcgZmFucyBvZiBPcGVuQVBJLCB3ZSBrbm93IGl0IGlzbid0IHRoZSBfZWFzaWVzdF8gZm9ybWF0IHRvIHJlYWQgYW5kIHdyaXRlLiBJZiB5b3UncmUgbG9va2luZyBmb3IgYW4gYWx0ZXJuYXRpdmUsCmdpdmUgdGhlIEZlcm4gRGVmaW5pdGlvbiBhIHRyeS4KCkluc3RhbGwgdGhlIEZlcm4gQ0xJIGFuZCBpbml0aWFsaXplIGEgRmVybiBQcm9qZWN0LgoKYGBgYmFzaApucG0gaW5zdGFsbCAtZyBmZXJuLWFwaQpmZXJuIGluaXQKYGBgCgpUaGlzIHdpbGwgY3JlYXRlIHRoZSBmb2xsb3dpbmcgZm9sZGVyIHN0cnVjdHVyZSBpbiB5b3VyIHByb2plY3Q6CgpgYGB5YW1sCmZlcm4vCuKUnOKUgCBmZXJuLmNvbmZpZy5qc29uICMgcm9vdC1sZXZlbCBjb25maWd1cmF0aW9uCuKUnOKUgCBnZW5lcmF0b3JzLnltbCAjIGdlbmVyYXRvcnMgeW91J3JlIHVzaW5nCuKUlOKUgCBkZWZpbml0aW9uLwogIOKUnOKUgCBhcGkueW1sICAjIEFQSS1sZXZlbCBjb25maWd1cmF0aW9uCiAg4pSU4pSAIGltZGIueW1sICMgZW5kcG9pbnRzLCB0eXBlcywgYW5kIGVycm9ycwpgYGAKCkhlcmUncyB3aGF0IHRoZSBgaW1kYi55bWxgIHN0YXJ0ZXIgZmlsZSBsb29rcyBsaWtlOgoKYGBgeWFtbAp0eXBlczoKICBNb3ZpZUlkOiBzdHJpbmcKCiAgTW92aWU6CiAgICBwcm9wZXJ0aWVzOgogICAgICBpZDogTW92aWVJZAogICAgICB0aXRsZTogc3RyaW5nCiAgICAgIHJhdGluZzoKICAgICAgICB0eXBlOiBkb3VibGUKICAgICAgICBkb2NzOiBUaGUgcmF0aW5nIHNjYWxlIGlzIG9uZSB0byBmaXZlIHN0YXJzCgogIENyZWF0ZU1vdmllUmVxdWVzdDoKICAgIHByb3BlcnRpZXM6CiAgICAgIHRpdGxlOiBzdHJpbmcKICAgICAgcmF0aW5nOiBkb3VibGUKCnNlcnZpY2U6CiAgYXV0aDogZmFsc2UKICBiYXNlLXBhdGg6IC9tb3ZpZXMKICBlbmRwb2ludHM6CiAgICBjcmVhdGVNb3ZpZToKICAgICAgZG9jczogQWRkIGEgbW92aWUgdG8gdGhlIGRhdGFiYXNlCiAgICAgIG1ldGhvZDogUE9TVAogICAgICBwYXRoOiAvY3JlYXRlLW1vdmllCiAgICAgIHJlcXVlc3Q6IENyZWF0ZU1vdmllUmVxdWVzdAogICAgICByZXNwb25zZTogTW92aWVJZAoKICAgIGdldE1vdmllOgogICAgICBtZXRob2Q6IEdFVAogICAgICBwYXRoOiAve21vdmllSWR9CiAgICAgIHBhdGgtcGFyYW1ldGVyczoKICAgICAgICBtb3ZpZUlkOiBNb3ZpZUlkCiAgICAgIHJlc3BvbnNlOiBNb3ZpZQogICAgICBlcnJvcnM6CiAgICAgICAgLSBNb3ZpZURvZXNOb3RFeGlzdEVycm9yCgplcnJvcnM6CiAgTW92aWVEb2VzTm90RXhpc3RFcnJvcjoKICAgIHN0YXR1cy1jb2RlOiA0MDQKICAgIHR5cGU6IE1vdmllSWQKYGBgCgpDaGVja291dCBvcGVuIHNvdXJjZSBwcm9qZWN0cyB0aGF0IGFyZSB1c2luZyBGZXJuIERlZmluaXRpb25zOgoKLSBbTWV0cmlwb3J0XShodHRwczovL2dpdGh1Yi5jb20vbWV0cmlwb3J0L21ldHJpcG9ydC90cmVlL2RldmVsb3AvZmVybi9kZWZpbml0aW9uKQotIFtSaXZldF0oaHR0cHM6Ly9naXRodWIuY29tL3JpdmV0LWdnL3JpdmV0L3RyZWUvbWFpbi9mZXJuL2RlZmluaXRpb24pCi0gW1JldmVydF0oaHR0cHM6Ly9naXRodWIuY29tL3JldmVydGluYy9yZXZlcnQvdHJlZS9tYWluL2Zlcm4vZGVmaW5pdGlvbikKCiMjIEluc3BpcmF0aW9uCgpGZXJuIGlzIGluc3BpcmVkIGJ5IGludGVybmFsIHRvb2xpbmcgYnVpbHQgdG8gZW5oYW5jZSB0aGUgZGV2ZWxvcGVyIGV4cGVyaWVuY2UuIFdlIHN0YW5kIG9uIHRoZSBzaG91bGRlcnMgb2YgZ2lhbnRzLiBXaGlsZSB0ZWFtcyB3ZXJlIHJlc3BvbnNpYmxlIGZvciBidWlsZGluZyB0aGUgZm9sbG93aW5nIHRvb2xzLCB3ZSB3YW50IHRvIGdpdmUgYSBzaG91dCBvdXQgdG8gTWFyayBFbGxpb3QgKGNyZWF0b3Igb2YgQ29uanVyZSBhdCBQYWxhbnRpciksIE1pY2hhZWwgRG93bGluZyAoY3JlYXRvciBvZiBTbWl0aHkgYXQgQVdTKSwgYW5kIElhbiBNY0NyeXN0YWwgKGNyZWF0b3Igb2YgU3RyaXBlIERvY3MpLgoKIyMgQ29tbXVuaXR5CgpbSm9pbiBvdXIgRGlzY29yZCFdKGh0dHBzOi8vZGlzY29yZC5jb20vaW52aXRlL0pra1h1bVB6Y0cpIFdlIGFyZSBoZXJlIHRvIGFuc3dlciBxdWVzdGlvbnMgYW5kIGhlbHAgeW91IGdldCB0aGUgbW9zdCBvdXQgb2YgRmVybi4KCiMjIENvbnRyaWJ1dGluZwoKV2Ugd2VsY29tZSBjb21tdW5pdHkgY29udHJpYnV0aW9ucy4gRm9yIGd1aWRlbGluZXMsIHJlZmVyIHRvIG91ciBbQ09OVFJJQlVUSU5HLm1kXSgvQ09OVFJJQlVUSU5HLm1kKS4KCiFbRmVybiBDb250cmlidXRvcnNdKGh0dHBzOi8vY29udHJpYi5yb2Nrcy9pbWFnZT9yZXBvPWZlcm4tYXBpL2Zlcm4pCg==
- readmeEtag: '"e87147bd94d92867564c5255dd2183f16a1c2248"'
- readmeLastModified: Fri, 16 Aug 2024 21:26:47 GMT
+ PGJyLz4KPGRpdiBhbGlnbj0iY2VudGVyIj4KICA8YSBocmVmPSJodHRwczovL3d3dy5idWlsZHdpdGhmZXJuLmNvbS8/dXRtX3NvdXJjZT1naXRodWImdXRtX21lZGl1bT1yZWFkbWUmdXRtX2NhbXBhaWduPWZlcm4mdXRtX2NvbnRlbnQ9bG9nbyI+CiAgICA8aW1nIHNyYz0iL2Zlcm4vaW1hZ2VzL2xvZ28tcHJpbWFyeS5wbmciIGhlaWdodD0iODAiIGFsaWduPSJjZW50ZXIiIGFsdD0iaGVhZGVyIiAvPgogIDwvYT4KPGJyLz4KCjxici8+CgpbIVsyMDIzIFkgQ29tYmluYXRvciBTdGFydHVwXShodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL1klMjBDb21iaW5hdG9yLTIwMjMtb3JhbmdlKV0oaHR0cHM6Ly93d3cueWNvbWJpbmF0b3IuY29tL2NvbXBhbmllcy9mZXJuKQohW0xpY2Vuc2VdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvTGljZW5zZS1NSVQtYmx1ZSkKClshW0Rpc2NvcmRdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvSm9pbiUyME91ciUyMENvbW11bml0eS1ibGFjaz9sb2dvPWRpc2NvcmQpXShodHRwczovL2Rpc2NvcmQuY29tL2ludml0ZS9Ka2tYdW1QemNHKQpbIVtEb2N1bWVudGF0aW9uXShodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL1JlYWQlMjBvdXIlMjBEb2N1bWVudGF0aW9uLWJsYWNrP2xvZ289Ym9vayldKGh0dHBzOi8vYnVpbGR3aXRoZmVybi5jb20vbGVhcm4vaG9tZT91dG1fc291cmNlPWZlcm4tYXBpL2Zlcm4vcmVhZG1lLXJlYWQtb3VyLWRvY3VtZW50YXRpb24pCgo8L2Rpdj4KCkZlcm4gaXMgYSB0b29sa2l0IHRoYXQgYWxsb3dzIHlvdSB0byBpbnB1dCB5b3VyIEFQSSBEZWZpbml0aW9uIGFuZCBvdXRwdXQgU0RLcyBhbmQgQVBJIGRvY3VtZW50YXRpb24uIEZlcm4gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBPcGVuQVBJIHNwZWNpZmljYXRpb24gKGZvcm1lcmx5IFN3YWdnZXIpLgoKPGRpdiBhbGlnbj0iY2VudGVyIj4KICAgIDxpbWcgc3JjPSIvZmVybi9pbWFnZXMvb3ZlcnZpZXcucG5nIiB3aWR0aD0iNzAwIiBhbHQ9Ik92ZXJ2aWV3IERpYWdyYW0iPgo8L2Rpdj4KCiMjIPCfjL8gU0RLcwoKVGhlIEZlcm4gdG9vbGtpdCBpcyBhdmFpbGFibGUgdmlhIGEgY29tbWFuZCBsaW5lIGludGVyZmFjZSAoQ0xJKSBhbmQgcmVxdWlyZXMgTm9kZSAxOCsuIFRvIGluc3RhbGwgaXQsIHJ1bjoKCmBgYGJhc2gKbnBtIGluc3RhbGwgLWcgZmVybi1hcGkKYGBgCgpJbml0aWFsaXplIEZlcm4gd2l0aCB5b3VyIE9wZW5BUEkgc3BlYzoKCmBgYGJhc2gKZmVybiBpbml0IC0tb3BlbmFwaSAuL3BhdGgvdG8vb3BlbmFwaS55bWwKIyBvcgpmZXJuIGluaXQgLS1vcGVuYXBpIGh0dHBzOi8vbGluay5idWlsZHdpdGhmZXJuLmNvbS9wZXRzdG9yZS1vcGVuYXBpCmBgYAoKWW91ciBkaXJlY3Rvcnkgc2hvdWxkIGxvb2sgbGlrZSB0aGUgZm9sbG93aW5nOgoKYGBgeWFtbApmZXJuLwrilJzilIAgZmVybi5jb25maWcuanNvbgrilJzilIAgZ2VuZXJhdG9ycy55bWwgIyBnZW5lcmF0b3JzIHlvdSdyZSB1c2luZwrilJTilIAgb3BlbmFwaS8KICDilJTilIAgb3BlbmFwaS5qc29uICMgeW91ciBvcGVuYXBpIGRvY3VtZW50CmBgYAoKRmluYWxseSwgdG8gaW52b2tlIHRoZSBnZW5lcmF0b3IsIHJ1bjoKCmBgYGJhc2gKZmVybiBnZW5lcmF0ZQpgYGAKCvCfjokgT25jZSB0aGUgY29tbWFuZCBjb21wbGV0ZXMsIHlvdSdsbCBzZWUgeW91ciBTREsgaW4gYC9nZW5lcmF0ZWQvc2Rrcy90eXBlc2NyaXB0YC4KCiMjIPCfjL8gQVBJIERvY3VtZW50YXRpb24KCkZlcm4gY2FuIGFsc28gYnVpbGQgYW5kIGhvc3QgYSBkb2N1bWVudGF0aW9uIHdlYnNpdGUgd2l0aCBhbiBhdXRvLWdlbmVyYXRlZCBBUEkgcmVmZXJlbmNlLiBXcml0ZSBhZGRpdGlvbmFsIHBhZ2VzIGluIG1hcmtkb3duIGFuZCBoYXZlIHRoZW0gdmVyc2lvbmVkIHdpdGggZ2l0LiBTZWFyY2gsIFNFTywgZGFyayBtb2RlLCBhbmQgcG9wdWxhciBjb21wb25lbnRzIGFyZSBwcm92aWRlZCBvdXQtb2YtdGhlLWJveC4gUGx1cywgeW91IGNhbiBjdXN0b21pemUgdGhlIGNvbG9ycywgZm9udCwgbG9nbywgYW5kIGRvbWFpbiBuYW1lLgoKQ2hlY2sgb3V0IGRvY3MgYnVpbHQgd2l0aCBGZXJuOgoKLSBbZG9jcy52ZWxsdW0uYWldKGh0dHBzOi8vZG9jcy52ZWxsdW0uYWkpCi0gW2RvY3Muc3VwZXJhZ2VudC5zaF0oaHR0cHM6Ly9kb2NzLnN1cGVyYWdlbnQuc2gvKQotIFtkb2NzLmh1bWUuYWldKGh0dHBzOi8vZG9jcy5odW1lLmFpLykKCkdldCBzdGFydGVkIFtoZXJlXShodHRwczovL2dpdGh1Yi5jb20vZmVybi1hcGkvZG9jcy1zdGFydGVyLW9wZW5hcGkpLgoKIyMg8J+MvyBHZW5lcmF0b3JzCgpHZW5lcmF0b3JzIGFyZSBwcm9jZXNzIHRoYXQgdGFrZSB5b3VyIEFQSSBEZWZpbml0aW9uIGFzIGlucHV0IGFuZCBvdXRwdXQgYXJ0aWZhY3RzIChTREtzLApQb3N0bWFuIENvbGxlY3Rpb25zLCBTZXJ2ZXIgYm9pbGVycGxhdGUsIGV0Yy4pLiBUbyBhZGQgYSBnZW5lcmF0b3IgcnVuIGBmZXJuIGFkZCA8Z2VuZXJhdG9yIGlkPmAKCiMjIyBTREsgR2VuZXJhdG9ycwoKfCBHZW5lcmF0b3IgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExhdGVzdCBWZXJzaW9uIHwgQ2hhbmdlbG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW50cnlwb2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfAp8IGBmZXJuYXBpL2Zlcm4tdHlwZXNjcmlwdC1ub2RlLXNka2AgICAgIHwgWyFbVHlwZXNjcmlwdCBHZW5lcmF0b3IgVmVyc2lvbl0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9kb2NrZXIvdi9mZXJuYXBpL2Zlcm4tdHlwZXNjcmlwdC1ub2RlLXNkayldKC4vZ2VuZXJhdG9ycy90eXBlc2NyaXB0L3Nkay9WRVJTSU9OKSB8IFtDSEFOR0VMT0cubWRdKC4vZ2VuZXJhdG9ycy90eXBlc2NyaXB0L3Nkay9DSEFOR0VMT0cubWQpICAgICB8IFtjbGkudHNdKC4vZ2VuZXJhdG9ycy90eXBlc2NyaXB0L3Nkay9jbGkvc3JjL25vZGVDbGkudHMpICAgICAgICAgICAgICAgICAgICAgICAgfAp8IGBmZXJuYXBpL2Zlcm4tcHl0aG9uLXNka2AgICAgICAgICAgICAgIHwgWyFbUHl0aG9uIEdlbmVyYXRvciBWZXJzaW9uXShodHRwczovL2ltZy5zaGllbGRzLmlvL2RvY2tlci92L2Zlcm5hcGkvZmVybi1weXRob24tc2RrKV0oLi9nZW5lcmF0b3JzL3B5dGhvbi9zZGsvVkVSU0lPTikgICAgICAgICAgICAgICAgICB8IFtDSEFOR0VMT0cubWRdKC4vZ2VuZXJhdG9ycy9weXRob24vc2RrL0NIQU5HRUxPRy5tZCkgICAgICAgICB8IFtjbGkucHldKC4vZ2VuZXJhdG9ycy9weXRob24vc3JjL2Zlcm5fcHl0aG9uL2dlbmVyYXRvcnMvc2RrL2NsaS5weSkgICAgICAgICAgICAgfAp8IGBmZXJuYXBpL2Zlcm4tamF2YS1zZGtgICAgICAgICAgICAgICAgIHwgWyFbSmF2YSBHZW5lcmF0b3IgVmVyc2lvbl0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9kb2NrZXIvdi9mZXJuYXBpL2Zlcm4tamF2YS1zZGspXSguL2dlbmVyYXRvcnMvamF2YS9zZGsvVkVSU0lPTikgICAgICAgICAgICAgICAgICAgICAgICB8IFtDSEFOR0VMT0cubWRdKC4vZ2VuZXJhdG9ycy9qYXZhL3Nkay9DSEFOR0VMT0cubWQpICAgICAgICAgICB8IFtDbGkuamF2YV0oLi9nZW5lcmF0b3JzL2phdmEvc2RrL3NyYy9tYWluL2phdmEvY29tL2Zlcm4vamF2YS9jbGllbnQvQ2xpLmphdmEpICAgfAp8IGBmZXJuYXBpL2Zlcm4tcnVieS1zZGtgICAgICAgICAgICAgICAgIHwgWyFbUnVieSBHZW5lcmF0b3IgVmVyc2lvbl0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9kb2NrZXIvdi9mZXJuYXBpL2Zlcm4tcnVieS1zZGspXSguL2dlbmVyYXRvcnMvcnVieS9zZGsvVkVSU0lPTikgICAgICAgICAgICAgICAgICAgICAgICB8IFtDSEFOR0VMT0cubWRdKC4vZ2VuZXJhdG9ycy9ydWJ5L3Nkay9DSEFOR0VMT0cubWQpICAgICAgICAgICB8IFtjbGkudHNdKC4vZ2VuZXJhdG9ycy9ydWJ5L3Nkay9zcmMvY2xpLnRzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IGBmZXJuYXBpL2Zlcm4tZ28tc2RrYCAgICAgICAgICAgICAgICAgIHwgWyFbR28gR2VuZXJhdG9yIFZlcnNpb25dKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZG9ja2VyL3YvZmVybmFwaS9mZXJuLWdvLXNkayldKC4vZ2VuZXJhdG9ycy9nby9WRVJTSU9OKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW0NIQU5HRUxPRy5tZF0oLi9nZW5lcmF0b3JzL2dvL3Nkay9DSEFOR0VMT0cubWQpICAgICAgICAgICAgIHwgW21haW4uZ29dKC4vZ2VuZXJhdG9ycy9nby9jbWQvZmVybi1nby1zZGsvbWFpbi5nbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgYGZlcm5hcGkvZmVybi1jc2hhcnAtc2RrYCAgICAgICAgICAgICAgfCBbIVtDIyBHZW5lcmF0b3IgVmVyc2lvbl0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9kb2NrZXIvdi9mZXJuYXBpL2Zlcm4tY3NoYXJwLXNkayldKC4vZ2VuZXJhdG9ycy9jc2hhcnAvc2RrL1ZFUlNJT04pICAgICAgICAgICAgICAgICAgICAgIHwgW0NIQU5HRUxPRy5tZF0oLi9nZW5lcmF0b3JzL2NzaGFycC9zZGsvQ0hBTkdFTE9HLm1kKSAgICAgICAgIHwgW2NsaS50c10oLi9nZW5lcmF0b3JzL2NzaGFycC9zZGsvc3JjL2NsaS50cykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CgojIyMgU2VydmVyLXNpZGUgR2VuZXJhdG9ycwoKRmVybidzIHNlcnZlci1zaWRlIGdlbmVyYXRvcnMgb3V0cHV0IGJvaWxlcnBsYXRlIGFwcGxpY2F0aW9uIGNvZGUgKG1vZGVscyBhbmQgbmV0d29ya2luZyBsb2dpYykuIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHNwZWMtZmlyc3Qgb3IgQVBJLWZpcnN0IGRldmVsb3BlcnMsCndobyB3cml0ZSB0aGVpciBBUEkgZGVmaW5pdGlvbiAoYXMgYW4gT3BlbkFQSSBzcGVjIG9yIEZlcm4gZGVmaW5pdGlvbikgYW5kIHdhbnQgdG8gZ2VuZXJhdGUgYmFja2VuZCBjb2RlLgoKfCBHZW5lcmF0b3IgSUQgICAgICAgICAgICAgICAgICB8IExhdGVzdCBWZXJzaW9uIHwgQ2hhbmdlbG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW50cnlwb2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8CnwgYGZlcm5hcGkvZmVybi10eXBlc2NyaXB0LWV4cHJlc3NgIHwgWyFbVHlwZXNjcmlwdCBFeHByZXNzIFNlcnZlciBHZW5lcmF0b3IgVmVyc2lvbl0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9kb2NrZXIvdi9mZXJuYXBpL2Zlcm4tdHlwZXNjcmlwdC1leHByZXNzKV0oLi9nZW5lcmF0b3JzL3R5cGVzY3JpcHQvZXhwcmVzcy9WRVJTSU9OKSB8IFtDSEFOR0VMT0cubWRdKC4vZ2VuZXJhdG9ycy90eXBlc2NyaXB0L2V4cHJlc3MvQ0hBTkdFTE9HLm1kKSB8IFtjbGkudHNdKC4vZ2VuZXJhdG9ycy90eXBlc2NyaXB0L2V4cHJlc3MvY2xpL3NyYy9jbGkudHMpICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBgZmVybmFwaS9mZXJuLWZhc3RhcGktc2VydmVyYCB8IFshW1B5dGhvbiBGYXN0QVBJIFNlcnZlciBHZW5lcmF0b3IgVmVyc2lvbl0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9kb2NrZXIvdi9mZXJuYXBpL2Zlcm4tZmFzdGFwaS1zZXJ2ZXIpXSguL2dlbmVyYXRvcnMvcHl0aG9uL2Zhc3RhcGkvVkVSU0lPTikgfCBbQ0hBTkdFTE9HLm1kXSguL2dlbmVyYXRvcnMvcHl0aG9uL2Zhc3RhcGkvQ0hBTkdFTE9HLm1kKSAgICAgfCBbY2xpLnB5XSguL2dlbmVyYXRvcnMvcHl0aG9uL3NyYy9mZXJuX3B5dGhvbi9nZW5lcmF0b3JzL3Nkay9jbGkucHkpICAgICAgICAgICAgICB8CnwgYGZlcm5hcGkvZmVybi1qYXZhLXNwcmluZ2AgICAgfCBbIVtKYXZhIFNwcmluZyBTZXJ2ZXIgR2VuZXJhdG9yIFZlcnNpb25dKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZG9ja2VyL3YvZmVybmFwaS9mZXJuLWphdmEtc3ByaW5nKV0oLi9nZW5lcmF0b3JzL2phdmEvc3ByaW5nL1ZFUlNJT04pIHwgW0NIQU5HRUxPRy5tZF0oLi9nZW5lcmF0b3JzL2phdmEvc3ByaW5nL0NIQU5HRUxPRy5tZCkgICAgICAgIHwgW0NsaS5qYXZhXSguL2dlbmVyYXRvcnMvamF2YS9zcHJpbmcvc3JjL21haW4vamF2YS9jb20vZmVybi9qYXZhL3NwcmluZy9DbGkuamF2YSkgfAoKIyMjIE1vZGVsIEdlbmVyYXRvcnMKCkZlcm4ncyBtb2RlbCBnZW5lcmF0b3JzIHdpbGwgb3V0cHV0IHNjaGVtYXMgb3IgdHlwZXMgZGVmaW5lZCBpbiB5b3VyIE9wZW5BUEkgc3BlYyBvciBGZXJuIERlZmluaXRpb24uCgp8IEdlbmVyYXRvciBJRCAgICAgICAgICAgICAgICAgIHwgTGF0ZXN0IFZlcnNpb24gfCBDaGFuZ2Vsb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFbnRyeXBvaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwKfCBgZmVybmFwaS9mZXJuLXB5ZGFudGljLW1vZGVsYCB8IFshW1B5ZGFudGljIE1vZGVsIEdlbmVyYXRvciBWZXJzaW9uXShodHRwczovL2ltZy5zaGllbGRzLmlvL2RvY2tlci92L2Zlcm5hcGkvZmVybi1weWRhbnRpYy1tb2RlbCldKC4vZ2VuZXJhdG9ycy9weXRob24vcHlkYW50aWMvVkVSU0lPTikgfCBbQ0hBTkdFTE9HLm1kXSguL2dlbmVyYXRvcnMvcHl0aG9uL3B5ZGFudGljL0NIQU5HRUxPRy5tZCkgfCBbY2xpLnB5XSguL2dlbmVyYXRvcnMvcHl0aG9uL3NyYy9mZXJuX3B5dGhvbi9nZW5lcmF0b3JzL3Nkay9jbGkucHkpICAgICAgICAgICB8CnwgYGZlcm5hcGkvamF2YS1tb2RlbGAgICAgIHwgWyFbSmF2YSBNb2RlbCBHZW5lcmF0b3IgVmVyc2lvbl0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9kb2NrZXIvdi9mZXJuYXBpL2phdmEtbW9kZWwpXSguL2dlbmVyYXRvcnMvamF2YS9tb2RlbC9WRVJTSU9OKSB8IFtDSEFOR0VMT0cubWRdKC4vZ2VuZXJhdG9ycy9qYXZhL21vZGVsL0NIQU5HRUxPRy5tZCkgICAgICAgIHwgW0NsaS5qYXZhXSguL2dlbmVyYXRvcnMvamF2YS9zZGsvc3JjL21haW4vamF2YS9jb20vZmVybi9qYXZhL2NsaWVudC9DbGkuamF2YSkgfAp8IGBmZXJuYXBpL2Zlcm4tcnVieS1tb2RlbGAgICAgIHwgWyFbUnVieSBNb2RlbCBHZW5lcmF0b3IgVmVyc2lvbl0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9kb2NrZXIvdi9mZXJuYXBpL2Zlcm4tcnVieS1tb2RlbCldKC4vZ2VuZXJhdG9ycy9ydWJ5L21vZGVsL1ZFUlNJT04pfCBbQ0hBTkdFTE9HLm1kXSguL2dlbmVyYXRvcnMvcnVieS9tb2RlbC9DSEFOR0VMT0cubWQpICAgICAgfCBbY2xpLnRzXSguL2dlbmVyYXRvcnMvcnVieS9tb2RlbC9zcmMvY2xpLnRzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CgojIyMgU3BlYyBHZW5lcmF0b3JzCgpGZXJuJ3Mgc3BlYyBnZW5lcmF0b3JzIGNhbiBvdXRwdXQgYW4gT3BlbkFQSSBzcGVjIG9yIGEgUG9zdG1hbiBjb2xsZWN0aW9uLgoKPiAqKk5vdGUqKjogVGhlIE9wZW5BUEkgc3BlYyBnZW5lcmF0b3IgaXMgcHJpbWFybHkgaW50ZW5kZWQgZm9yIEZlcm4gRGVmaW5pdGlvbiB1c2Vycy4gVGhpcyBwcmV2ZW50cyBsb2NrLWluIHNvIHRoYXQgb25lIGNhbiBhbHdheXMgZXhwb3J0IHRvIE9wZW5BUEkuCgp8IEdlbmVyYXRvciBJRCAgICAgICAgICAgfCBMYXRlc3QgVmVyc2lvbiB8IENoYW5nZWxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFbnRyeXBvaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfAp8IGBmZXJuYXBpL2Zlcm4tb3BlbmFwaWAgfCBbIVtPcGVuQVBJIEdlbmVyYXRvciBWZXJzaW9uXShodHRwczovL2ltZy5zaGllbGRzLmlvL2RvY2tlci92L2Zlcm5hcGkvZmVybi1vcGVuYXBpKV0oLi9nZW5lcmF0b3JzL29wZW5hcGkvVkVSU0lPTikgfCBbQ0hBTkdFTE9HLm1kXSguL2dlbmVyYXRvcnMvb3BlbmFwaS9DSEFOR0VMT0cubWQpIHwgW2NsaS50c10oLi9nZW5lcmF0b3JzL29wZW5hcGkvc3JjL2NsaS50cykgIHwKfCBgZmVybmFwaS9mZXJuLXBvc3RtYW5gIHwgWyFbUG9zdG1hbiBHZW5lcmF0b3IgVmVyc2lvbl0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9kb2NrZXIvdi9mZXJuYXBpL2Zlcm4tcG9zdG1hbildKC4vZ2VuZXJhdG9ycy9wb3N0bWFuL1ZFUlNJT04pIHwgW0NIQU5HRUxPRy5tZF0oLi9nZW5lcmF0b3JzL3Bvc3RtYW4vQ0hBTkdFTE9HLm1kKSB8IFtjbGkudHNdKC4vZ2VuZXJhdG9ycy9wb3N0bWFuL3NyYy9jbGkudHMpIHwKCiMjIPCfjL8gQ0xJIENvbW1hbmRzCgpIZXJlJ3MgYSBxdWljayBsb29rIGF0IHRoZSBtb3N0IHBvcHVsYXIgQ0xJIGNvbW1hbmRzLiBWaWV3IHRoZSBkb2N1bWVudGF0aW9uIGZvciBbYWxsIENMSSBjb21tYW5kc10oaHR0cHM6Ly9idWlsZHdpdGhmZXJuLmNvbS9sZWFybi9jbGktYXBpL2NsaS1yZWZlcmVuY2UvY29tbWFuZHMpLgoKYGZlcm4gaW5pdGA6IGFkZHMgYSBuZXcgc3RhcnRlciBBUEkgdG8geW91ciByZXBvc2l0b3J5LgoKYGZlcm4gY2hlY2tgOiB2YWxpZGF0ZSB5b3VyIEFQSSBkZWZpbml0aW9uIGFuZCBGZXJuIGNvbmZpZ3VyYXRpb24uCgpgZmVybiBnZW5lcmF0ZWA6IHJ1biB0aGUgZ2VuZXJhdG9ycyBzcGVjaWZpZWQgaW4gYGdlbmVyYXRvcnMueW1sYCBpbiB0aGUgY2xvdWQuCgpgZmVybiBnZW5lcmF0ZSAtLWxvY2FsYDogcnVuIHRoZSBnZW5lcmF0b3JzIHNwZWNpZmllZCBpbiBgZ2VuZXJhdG9ycy55bWxgIGluIGRvY2tlciBsb2NhbGx5LgoKYGZlcm4gYWRkIDxnZW5lcmF0b3I+YDogaW5jbHVkZSBhIG5ldyBnZW5lcmF0b3IgaW4geW91ciBgZ2VuZXJhdG9ycy55bWxgLiBGb3IgZXhhbXBsZSwgYGZlcm4gYWRkIGZlcm4tcHl0aG9uLXNka2AuCgojIyBBZHZhbmNlZAoKIyMjIEFQSSBGaXJzdAoKRmVybiBzdXBwb3J0cyBkZXZlbG9wZXJzIGFuZCB0ZWFtcyB0aGF0IHdhbnQgdG8gYmUgQVBJLWZpcnN0IG9yIFNwZWMtZmlyc3QuCgpEZWZpbmUgeW91ciBBUEksIGFuZCB1c2UgRmVybiB0byBnZW5lcmF0ZSBtb2RlbHMsIG5ldHdvcmtpbmcgY29kZSBhbmQgYm9pbGVycGxhdGUgYXBwbGljYXRpb24gY29kZS4gVGhlIGdlbmVyYXRlZCBjb2RlIGFkZHMKdHlwZSBzYWZldHkgdG8geW91ciBBUEkgaW1wbGVtZW50YXRpb24gLSBpZiB5b3VyIGJhY2tlbmQgZG9lc24ndCBpbXBsZW1lbnQgdGhlIEFQSSBjb3JyZWN0bHksIGl0IHdvbid0IGNvbXBpbGUuCgpGcmFtZXdvcmtzIGN1cnJlbnRseSBzdXBwb3J0ZWQ6CgotIFtFeHByZXNzXSguL2dlbmVyYXRvcnMvdHlwZXNjcmlwdCkKLSBbU3ByaW5nIEJvb3RdKC4vZ2VuZXJhdG9ycy9qYXZhKQotIFtGYXN0QVBJXSguL2dlbmVyYXRvcnMvcHl0aG9uKQoKIyMjIEZlcm4gRGVmaW5pdGlvbgoKV2hpbGUgd2UgYXJlIGJpZyBmYW5zIG9mIE9wZW5BUEksIHdlIGtub3cgaXQgaXNuJ3QgdGhlIF9lYXNpZXN0XyBmb3JtYXQgdG8gcmVhZCBhbmQgd3JpdGUuIElmIHlvdSdyZSBsb29raW5nIGZvciBhbiBhbHRlcm5hdGl2ZSwKZ2l2ZSB0aGUgRmVybiBEZWZpbml0aW9uIGEgdHJ5LgoKSW5zdGFsbCB0aGUgRmVybiBDTEkgYW5kIGluaXRpYWxpemUgYSBGZXJuIFByb2plY3QuCgpgYGBiYXNoCm5wbSBpbnN0YWxsIC1nIGZlcm4tYXBpCmZlcm4gaW5pdApgYGAKClRoaXMgd2lsbCBjcmVhdGUgdGhlIGZvbGxvd2luZyBmb2xkZXIgc3RydWN0dXJlIGluIHlvdXIgcHJvamVjdDoKCmBgYHlhbWwKZmVybi8K4pSc4pSAIGZlcm4uY29uZmlnLmpzb24gIyByb290LWxldmVsIGNvbmZpZ3VyYXRpb24K4pSc4pSAIGdlbmVyYXRvcnMueW1sICMgZ2VuZXJhdG9ycyB5b3UncmUgdXNpbmcK4pSU4pSAIGRlZmluaXRpb24vCiAg4pSc4pSAIGFwaS55bWwgICMgQVBJLWxldmVsIGNvbmZpZ3VyYXRpb24KICDilJTilIAgaW1kYi55bWwgIyBlbmRwb2ludHMsIHR5cGVzLCBhbmQgZXJyb3JzCmBgYAoKSGVyZSdzIHdoYXQgdGhlIGBpbWRiLnltbGAgc3RhcnRlciBmaWxlIGxvb2tzIGxpa2U6CgpgYGB5YW1sCnR5cGVzOgogIE1vdmllSWQ6IHN0cmluZwoKICBNb3ZpZToKICAgIHByb3BlcnRpZXM6CiAgICAgIGlkOiBNb3ZpZUlkCiAgICAgIHRpdGxlOiBzdHJpbmcKICAgICAgcmF0aW5nOgogICAgICAgIHR5cGU6IGRvdWJsZQogICAgICAgIGRvY3M6IFRoZSByYXRpbmcgc2NhbGUgaXMgb25lIHRvIGZpdmUgc3RhcnMKCiAgQ3JlYXRlTW92aWVSZXF1ZXN0OgogICAgcHJvcGVydGllczoKICAgICAgdGl0bGU6IHN0cmluZwogICAgICByYXRpbmc6IGRvdWJsZQoKc2VydmljZToKICBhdXRoOiBmYWxzZQogIGJhc2UtcGF0aDogL21vdmllcwogIGVuZHBvaW50czoKICAgIGNyZWF0ZU1vdmllOgogICAgICBkb2NzOiBBZGQgYSBtb3ZpZSB0byB0aGUgZGF0YWJhc2UKICAgICAgbWV0aG9kOiBQT1NUCiAgICAgIHBhdGg6IC9jcmVhdGUtbW92aWUKICAgICAgcmVxdWVzdDogQ3JlYXRlTW92aWVSZXF1ZXN0CiAgICAgIHJlc3BvbnNlOiBNb3ZpZUlkCgogICAgZ2V0TW92aWU6CiAgICAgIG1ldGhvZDogR0VUCiAgICAgIHBhdGg6IC97bW92aWVJZH0KICAgICAgcGF0aC1wYXJhbWV0ZXJzOgogICAgICAgIG1vdmllSWQ6IE1vdmllSWQKICAgICAgcmVzcG9uc2U6IE1vdmllCiAgICAgIGVycm9yczoKICAgICAgICAtIE1vdmllRG9lc05vdEV4aXN0RXJyb3IKCmVycm9yczoKICBNb3ZpZURvZXNOb3RFeGlzdEVycm9yOgogICAgc3RhdHVzLWNvZGU6IDQwNAogICAgdHlwZTogTW92aWVJZApgYGAKCkNoZWNrb3V0IG9wZW4gc291cmNlIHByb2plY3RzIHRoYXQgYXJlIHVzaW5nIEZlcm4gRGVmaW5pdGlvbnM6CgotIFtNZXRyaXBvcnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9tZXRyaXBvcnQvbWV0cmlwb3J0L3RyZWUvZGV2ZWxvcC9mZXJuL2RlZmluaXRpb24pCi0gW1JpdmV0XShodHRwczovL2dpdGh1Yi5jb20vcml2ZXQtZ2cvcml2ZXQvdHJlZS9tYWluL2Zlcm4vZGVmaW5pdGlvbikKLSBbUmV2ZXJ0XShodHRwczovL2dpdGh1Yi5jb20vcmV2ZXJ0aW5jL3JldmVydC90cmVlL21haW4vZmVybi9kZWZpbml0aW9uKQoKIyMgSW5zcGlyYXRpb24KCkZlcm4gaXMgaW5zcGlyZWQgYnkgaW50ZXJuYWwgdG9vbGluZyBidWlsdCB0byBlbmhhbmNlIHRoZSBkZXZlbG9wZXIgZXhwZXJpZW5jZS4gV2Ugc3RhbmQgb24gdGhlIHNob3VsZGVycyBvZiBnaWFudHMuIFdoaWxlIHRlYW1zIHdlcmUgcmVzcG9uc2libGUgZm9yIGJ1aWxkaW5nIHRoZSBmb2xsb3dpbmcgdG9vbHMsIHdlIHdhbnQgdG8gZ2l2ZSBhIHNob3V0IG91dCB0byBNYXJrIEVsbGlvdCAoY3JlYXRvciBvZiBDb25qdXJlIGF0IFBhbGFudGlyKSwgTWljaGFlbCBEb3dsaW5nIChjcmVhdG9yIG9mIFNtaXRoeSBhdCBBV1MpLCBhbmQgSWFuIE1jQ3J5c3RhbCAoY3JlYXRvciBvZiBTdHJpcGUgRG9jcykuCgojIyBDb21tdW5pdHkKCltKb2luIG91ciBEaXNjb3JkIV0oaHR0cHM6Ly9kaXNjb3JkLmNvbS9pbnZpdGUvSmtrWHVtUHpjRykgV2UgYXJlIGhlcmUgdG8gYW5zd2VyIHF1ZXN0aW9ucyBhbmQgaGVscCB5b3UgZ2V0IHRoZSBtb3N0IG91dCBvZiBGZXJuLgoKIyMgQ29udHJpYnV0aW5nCgpXZSB3ZWxjb21lIGNvbW11bml0eSBjb250cmlidXRpb25zLiBGb3IgZ3VpZGVsaW5lcywgcmVmZXIgdG8gb3VyIFtDT05UUklCVVRJTkcubWRdKC9DT05UUklCVVRJTkcubWQpLgoKIVtGZXJuIENvbnRyaWJ1dG9yc10oaHR0cHM6Ly9jb250cmliLnJvY2tzL2ltYWdlP3JlcG89ZmVybi1hcGkvZmVybikK
+ readmeEtag: '"f91fc0de768ec8cac265500855dead6c06877600"'
+ readmeLastModified: Wed, 21 Aug 2024 01:34:45 GMT
repositoryId: 476820102
description: Input OpenAPI. Output SDKs and Docs.
created: '2022-04-01T17:56:54Z'
- updated: '2024-08-20T03:13:13Z'
+ updated: '2024-08-21T01:34:51Z'
language: TypeScript
archived: false
- stars: 2534
+ stars: 2535
watchers: 18
forks: 128
owner: fern-api
logo: https://avatars.githubusercontent.com/u/102944815?v=4
license: MIT
- repoEtag: '"77d10a822e285174d79c47735cce8b0c69a4d003f090597e03ade612bb2b83af"'
- repoLastModified: Tue, 20 Aug 2024 03:13:13 GMT
+ repoEtag: '"2526f3dc435929d337519aba80cd3efd4c2df56497a1c501a3f53f39ff42dac8"'
+ repoLastModified: Wed, 21 Aug 2024 01:34:51 GMT
foundInMaster: true
sponsored: true
testimonial: >
@@ -6900,17 +6900,17 @@
repositoryId: 630566794
description: Generate Swift client and server code from an OpenAPI document.
created: '2023-04-20T16:50:53Z'
- updated: '2024-08-20T00:04:22Z'
+ updated: '2024-08-20T19:24:09Z'
language: Swift
archived: false
- stars: 1334
+ stars: 1336
watchers: 106
forks: 98
owner: apple
logo: https://avatars.githubusercontent.com/u/10639145?v=4
license: Apache-2.0
- repoEtag: '"d755e2733e52c99bc43609b97a3b886444b3722d78d19a414bb54cd65e6c3b95"'
- repoLastModified: Tue, 20 Aug 2024 00:04:22 GMT
+ repoEtag: '"c4b06bf1c4736108fb538d8687b86894fd8b1cb3cc5a26018cfed5fdf2f63296"'
+ repoLastModified: Tue, 20 Aug 2024 19:24:09 GMT
foundInMaster: true
- source:
- https://openapi.tools/
@@ -7138,17 +7138,17 @@
repositoryId: 706256859
description: Golang Fuego - web framework generating OpenAPI 3 spec from source code
created: '2023-10-17T15:36:43Z'
- updated: '2024-08-20T00:57:14Z'
+ updated: '2024-08-20T21:54:41Z'
language: Go
archived: false
- stars: 733
+ stars: 736
watchers: 6
forks: 32
owner: go-fuego
logo: https://avatars.githubusercontent.com/u/148255240?v=4
license: MIT
- repoEtag: '"e2aac04e74b216b2399e2d62399223a687048f3cf1791b2f6467cdece8a9bcba"'
- repoLastModified: Tue, 20 Aug 2024 00:57:14 GMT
+ repoEtag: '"0807b1c2cd8d037dea955f6e0c3cbbd573f628fa612b8edee123209063c713a8"'
+ repoLastModified: Tue, 20 Aug 2024 21:54:41 GMT
foundInMaster: true
- source:
- https://openapi.tools/
@@ -7164,17 +7164,17 @@
repositoryId: 245763170
description: Huma REST/HTTP API Framework for Golang with OpenAPI 3.1
created: '2020-03-08T06:19:51Z'
- updated: '2024-08-19T15:47:04Z'
+ updated: '2024-08-21T02:55:37Z'
language: Go
archived: false
- stars: 1794
+ stars: 1797
watchers: 28
- forks: 136
+ forks: 138
owner: danielgtaylor
logo: https://avatars.githubusercontent.com/u/106826?v=4
license: MIT
- repoEtag: '"8bb8531bdb3c68c4014324af5092aeedb8241c8c9f6cfde1da5379bc2f003760"'
- repoLastModified: Mon, 19 Aug 2024 15:47:04 GMT
+ repoEtag: '"16f277107b9e85219e4b4958a38a1fb496d7a8d2044db4b243194e32dfc40a6f"'
+ repoLastModified: Wed, 21 Aug 2024 02:55:37 GMT
foundInMaster: true
category:
- Auto Generators
@@ -7282,17 +7282,17 @@
repositoryId: 755634410
description: Generate a type-safe OpenAPI client for your React app
created: '2024-02-10T19:15:33Z'
- updated: '2024-08-19T20:11:16Z'
+ updated: '2024-08-21T03:25:10Z'
language: TypeScript
archived: false
- stars: 23
+ stars: 24
watchers: 2
forks: 3
owner: OpenAPI-Qraft
logo: https://avatars.githubusercontent.com/u/159651230?v=4
license: MIT
- repoEtag: '"a034c777da72f84642360ac6a389da76417fe4d4ed52f5902998de9f0e436664"'
- repoLastModified: Mon, 19 Aug 2024 20:11:16 GMT
+ repoEtag: '"441b9f1ee22a549f91d40135144cb1d4b851fd53072fb3329970610208b4e43c"'
+ repoLastModified: Wed, 21 Aug 2024 03:25:10 GMT
foundInMaster: true
- source: https://openapi.tools/
name: Mojolicious::Plugin::OpenAPI::Modern
@@ -7380,17 +7380,17 @@
FastAPI framework, high performance, easy to learn, fast to code, ready
for production
created: '2018-12-08T08:21:47Z'
- updated: '2024-08-20T03:25:40Z'
+ updated: '2024-08-21T03:23:09Z'
language: Python
archived: false
- stars: 74774
+ stars: 74807
watchers: 666
- forks: 6295
+ forks: 6298
owner: fastapi
logo: https://avatars.githubusercontent.com/u/156354296?v=4
license: MIT
- repoEtag: '"643a6910ee1aeda16c38bedccd4c6a8af05645a5625dbea7cf3f64f1e9cd16a5"'
- repoLastModified: Tue, 20 Aug 2024 03:25:40 GMT
+ repoEtag: '"a9a46c8f51e1759fff3ef66eabf4ecf685aa49494911ae3749e135bedd606668"'
+ repoLastModified: Wed, 21 Aug 2024 03:23:09 GMT
foundInMaster: true
id: 01f8d446752c39de698f67e8d2352229
oldLocations:
@@ -7410,17 +7410,17 @@
Swagger UI is a collection of HTML, JavaScript, and CSS assets that
dynamically generate beautiful documentation from a Swagger-compliant API.
created: '2011-07-15T22:56:39Z'
- updated: '2024-08-20T03:08:47Z'
+ updated: '2024-08-20T23:03:38Z'
language: JavaScript
archived: false
- stars: 26213
+ stars: 26216
watchers: 650
forks: 8897
owner: swagger-api
logo: https://avatars.githubusercontent.com/u/7658037?v=4
license: Apache-2.0
- repoEtag: '"32a7a97314102bfb0565588a6bb0ec8871b960db8fad8e52adef649caa8e6dbd"'
- repoLastModified: Tue, 20 Aug 2024 03:08:47 GMT
+ repoEtag: '"5922b426bd2bf846dc6b9aecbcae2184245078aff209df8bcdd32fb093181c21"'
+ repoLastModified: Tue, 20 Aug 2024 23:03:38 GMT
foundInMaster: true
name: swagger-ui
homepage: https://github.com/swagger-api/swagger-UI
@@ -7453,17 +7453,17 @@
repositoryId: 45250726
description: 📘 OpenAPI/Swagger-generated API Reference Documentation
created: '2015-10-30T12:53:02Z'
- updated: '2024-08-20T01:50:55Z'
+ updated: '2024-08-21T01:09:32Z'
language: TypeScript
archived: false
- stars: 23163
+ stars: 23170
watchers: 295
forks: 2280
owner: Redocly
logo: https://avatars.githubusercontent.com/u/32099856?v=4
license: MIT
- repoEtag: '"f4aeed61504b65a0b1b542c5bed46daffbcbb6036d575bbfc1b1187a0690dfcd"'
- repoLastModified: Tue, 20 Aug 2024 01:50:55 GMT
+ repoEtag: '"92d76fdc402ff5fc2994a01722b4ae2e5dab4057936ffbccea85fe59c4696b46"'
+ repoLastModified: Wed, 21 Aug 2024 01:09:32 GMT
foundInMaster: true
v3_1: true
id: 2725d6db6977c1dd12ceaf9701787e07
@@ -7487,11 +7487,11 @@
archived: false
stars: 7370
watchers: 310
- forks: 2171
+ forks: 2170
owner: swagger-api
logo: https://avatars.githubusercontent.com/u/7658037?v=4
license: Apache-2.0
- repoEtag: '"22c870ea9969e66b2d07e789f103be141b04011643cf4f75c0c660dc0141bf11"'
+ repoEtag: '"25c58fa09d1347b1a827d5fe1e2a3960ac7cad1d36807df1c1acf9b74e71da8d"'
repoLastModified: Mon, 19 Aug 2024 09:21:15 GMT
foundInMaster: true
category: Code Generators
@@ -7509,17 +7509,17 @@
Mockoon is the easiest and quickest way to run mock APIs locally. No
remote deployment, no account required, open source.
created: '2017-07-17T13:19:16Z'
- updated: '2024-08-19T20:20:36Z'
+ updated: '2024-08-20T09:50:15Z'
language: TypeScript
archived: false
- stars: 6195
+ stars: 6196
watchers: 60
forks: 362
owner: mockoon
logo: https://avatars.githubusercontent.com/u/49429147?v=4
license: NOASSERTION
- repoEtag: '"b93d37daeea8ae1709b1ef07f3f399bf35249449026a759522366bf9f8cc5161"'
- repoLastModified: Mon, 19 Aug 2024 20:20:36 GMT
+ repoEtag: '"2888fcd3b64a59c03b9dae06ae32af0f7face7b4fbb379cebd7a32c73ceca153"'
+ repoLastModified: Tue, 20 Aug 2024 09:50:15 GMT
foundInMaster: true
category: Testing
id: 8728dfca2c1908dbecdcddd31597fad4
@@ -7536,23 +7536,23 @@
v3: true
repositoryMetadata:
base64Readme: >-
- IyBgb2FwaS1jb2RlZ2VuYAoKYG9hcGktY29kZWdlbmAgaXMgYSBjb21tYW5kLWxpbmUgdG9vbCBhbmQgbGlicmFyeSB0byBjb252ZXJ0IE9wZW5BUEkgc3BlY2lmaWNhdGlvbnMgdG8gR28gY29kZSwgYmUgaXQgW3NlcnZlci1zaWRlIGltcGxlbWVudGF0aW9uc10oI2dlbmVyYXRpbmctc2VydmVyLXNpZGUtYm9pbGVycGxhdGUpLCBbQVBJIGNsaWVudHNdKCNnZW5lcmF0aW5nLWFwaS1jbGllbnRzKSwgb3Igc2ltcGx5IFtIVFRQIG1vZGVsc10oI2dlbmVyYXRpbmctYXBpLW1vZGVscykuCgpVc2luZyBgb2FwaS1jb2RlZ2VuYCBhbGxvd3MgeW91IHRvIHJlZHVjZSB0aGUgYm9pbGVycGxhdGUgcmVxdWlyZWQgdG8gY3JlYXRlIG9yIGludGVncmF0ZSB3aXRoIHNlcnZpY2VzIGJhc2VkIG9uIFtPcGVuQVBJIDMuMF0oaHR0cHM6Ly9naXRodWIuY29tL09BSS9PcGVuQVBJLVNwZWNpZmljYXRpb24vYmxvYi9tYWluL3ZlcnNpb25zLzMuMC4wLm1kKSwgYW5kIGluc3RlYWQgZm9jdXMgb24gd3JpdGluZyB5b3VyIGJ1c2luZXNzIGxvZ2ljLCBhbmQgd29ya2luZyBvbiB0aGUgcmVhbCB2YWx1ZS1hZGQgZm9yIHlvdXIgb3JnYW5pc2F0aW9uLgoKV2l0aCBgb2FwaS1jb2RlZ2VuYCwgdGhlcmUgYXJlIGEgZmV3IFtLZXkgRGVzaWduIERlY2lzaW9uc10oI2tleS1kZXNpZ24tZGVjaXNpb25zKSB3ZSd2ZSBtYWRlLCBpbmNsdWRpbmc6CgotIGlkaW9tYXRpYyBHbywgd2hlcmUgcG9zc2libGUKLSBmYWlybHkgc2ltcGxlIGdlbmVyYXRlZCBjb2RlLCBlcnJpbmcgb24gdGhlIHNpZGUgb2YgZHVwbGljYXRlIGNvZGUgb3ZlciBuaWNlbHkgcmVmYWN0b3JlZCBjb2RlCi0gc3VwcG9ydGluZyBhcyBtdWNoIG9mIE9wZW5BUEkgMy54IGFzIGlzIHBvc3NpYmxlLCBhbG9uZ3NpZGUgR28ncyB0eXBlIHN5c3RlbQoKYG9hcGktY29kZWdlbmAgaXMgb25lIHBhcnQgb2YgYSB3aWRlciBlY29zeXN0ZW0sIHdoaWNoIGNhbiBiZSBmb3VuZCBkZXNjcmliZWQgaW4gZnVydGhlciBkZXRhaWwgaW4gdGhlIFtvYXBpLWNvZGVnZW4gb3JnYW5pc2F0aW9uIG9uIEdpdEh1Yl0oaHR0cHM6Ly9naXRodWIuY29tL29hcGktY29kZWdlbikuCgrimqDvuI8gVGhpcyBSRUFETUUgbWF5IGJlIGZvciB0aGUgbGF0ZXN0IGRldmVsb3BtZW50IHZlcnNpb24sIHdoaWNoIG1heSBjb250YWluIHVucmVsZWFzZWQgY2hhbmdlcy4gUGxlYXNlIGVuc3VyZSB5b3UncmUgbG9va2luZyBhdCB0aGUgUkVBRE1FIGZvciB0aGUgbGF0ZXN0IHJlbGVhc2UgdmVyc2lvbi4KCiMjIEFjdGlvbiBSZXF1aXJlZDogVGhlIHJlcG9zaXRvcnkgZm9yIHRoaXMgcHJvamVjdCBoYXMgY2hhbmdlZAoKQXMgYW5ub3VuY2VkIGluIFtNYXkgMjAyNF0oaHR0cHM6Ly9naXRodWIuY29tL29hcGktY29kZWdlbi9vYXBpLWNvZGVnZW4vZGlzY3Vzc2lvbnMvMTYwNSksCndlIGhhdmUgbW92ZWQgdGhlIHByb2plY3QgZnJvbSB0aGUgZGVlcG1hcCBvcmdhbml6YXRpb24gdG8gb3VyIG93biBvcmdhbml6YXRpb24sIGFuZCB5b3Ugd2lsbCBuZWVkIHRvIHVwZGF0ZSB5b3VyCmltcG9ydCBwYXRocyB0byBwdWxsIHVwZGF0ZXMgcGFzdCB0aGlzIHBvaW50LiBZb3UgbmVlZCB0byBkbyBhIHJlY3Vyc2l2ZSBzZWFyY2gvcmVwbGFjZSBmcm9tCmBnaXRodWIuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL3YyYCB0byBgZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vb2FwaS1jb2RlZ2VuL3YyYC4KCj4gWyFJTVBPUlRBTlRdCj4gYG9hcGktY29kZWdlbmAgbW92ZWQgdG8gaXRzIG5ldyBob21lIHdpdGggdGhlIHZlcnNpb24gdGFnIGB2Mi4zLjBgLgoKSWYgeW91IGFyZSB1c2luZyBgdjIuMi4wYCBvciBiZWxvdywgcGxlYXNlIGluc3RhbGwgbGlrZSBzbzoKCmBgYHNoCiMgZm9yIHRoZSBiaW5hcnkgaW5zdGFsbApnbyBpbnN0YWxsIGdpdGh1Yi5jb20vZGVlcG1hcC9vYXBpLWNvZGVnZW4vdjIvY21kL29hcGktY29kZWdlbkB2Mi4yLjAKYGBgCgpJZiB5b3UgYXJlIHVzaW5nIGB2Mi4zLjBgIG9yIGFib3ZlLCBwbGVhc2UgaW5zdGFsbCBsaWtlIHNvLCB1c2luZyB0aGUgbmV3IG1vZHVsZSBpbXBvcnQgcGF0aDoKCmBgYHNoCiMgZm9yIHRoZSBiaW5hcnkgaW5zdGFsbApnbyBpbnN0YWxsIGdpdGh1Yi5jb20vb2FwaS1jb2RlZ2VuL29hcGktY29kZWdlbi92Mi9jbWQvb2FwaS1jb2RlZ2VuQGxhdGVzdApgYGAKCiMjIEluc3RhbGwKCkl0IGlzIHJlY29tbWVuZGVkIHRvIGZvbGxvdyBbdGhlIGB0b29scy5nb2AgcGF0dGVybl0oaHR0cHM6Ly93d3cuanZ0Lm1lL3Bvc3RzLzIwMjIvMDYvMTUvZ28tdG9vbHMtZGVwZW5kZW5jeS1tYW5hZ2VtZW50LykgZm9yIG1hbmFnaW5nIHRoZSBkZXBlbmRlbmN5IG9mIGBvYXBpLWNvZGVnZW5gIGFsb25nc2lkZSB5b3VyIGNvcmUgYXBwbGljYXRpb24uCgpUaGlzIHdvdWxkIGdpdmUgeW91IGEgYHRvb2xzL3Rvb2xzLmdvYDoKCmBgYGdvCi8vZ286YnVpbGQgdG9vbHMKLy8gK2J1aWxkIHRvb2xzCgpwYWNrYWdlIG1haW4KCmltcG9ydCAoCglfICJnaXRodWIuY29tL29hcGktY29kZWdlbi9vYXBpLWNvZGVnZW4vdjIvY21kL29hcGktY29kZWdlbiIKKQpgYGAKClRoZW4sIGVhY2ggaW52b2NhdGlvbiBvZiBgb2FwaS1jb2RlZ2VuYCB3b3VsZCBiZSB1c2VkIGxpa2Ugc286CgpgYGBnbwovL2dvOmdlbmVyYXRlIGdvIHJ1biBnaXRodWIuY29tL29hcGktY29kZWdlbi9vYXBpLWNvZGVnZW4vdjIvY21kL29hcGktY29kZWdlbiAtLWNvbmZpZz1jb25maWcueWFtbCAuLi8uLi9hcGkueWFtbApgYGAKCkFsdGVybmF0aXZlbHksIHlvdSBjYW4gaW5zdGFsbCBpdCBhcyBhIGJpbmFyeSB3aXRoOgoKYGBgc2gKJCBnbyBpbnN0YWxsIGdpdGh1Yi5jb20vb2FwaS1jb2RlZ2VuL29hcGktY29kZWdlbi92Mi9jbWQvb2FwaS1jb2RlZ2VuQGxhdGVzdAokIG9hcGktY29kZWdlbiAtdmVyc2lvbgpgYGAKCldoaWNoIHRoZW4gbWVhbnMgeW91IGNhbiBpbnZva2UgaXQgbGlrZSBzbzoKCmBgYGdvCi8vZ286Z2VuZXJhdGUgb2FwaS1jb2RlZ2VuIC0tY29uZmlnPWNvbmZpZy55YW1sIC4uLy4uL2FwaS55YW1sCmBgYAoKIyMjIFBpbm5pbmcgdG8gY29tbWl0cwoKV2hpbGUgdGhlIHByb2plY3QgZG9lcyBub3QgKFt5ZXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9kZWVwbWFwL29hcGktY29kZWdlbi9pc3N1ZXMvMTUxOSkpIGhhdmUgYSBkZWZpbmVkIHJlbGVhc2UgY2FkZW5jZSwgdGhlcmUgbWF5IGJlIGNhc2VzIHdoZXJlIHlvdSB3YW50IHRvIHB1bGwgaW4geWV0LXVucmVsZWFzZWQgY2hhbmdlcyB0byB5b3VyIGNvZGViYXNlLgoKVGhlcmVmb3JlLCB5b3UgbWF5IHdhbnQgdG8gcGluIHlvdXIgZGVwZW5kZW5jeSBvbiBgb2FwaS1jb2RlZ2VuYCB0byBhIGdpdmVuIGNvbW1pdCBoYXNoLCByYXRoZXIgdGhhbiBhIHRhZy4KClRoaXMgaXMgKipvZmZpY2lhbGx5IHJlY29tbWVuZGVkKiogZm9yIGNvbnN1bWVycyBvZiBgb2FwaS1jb2RlZ2VuYCwgd2hvIHdhbnQgZmVhdHVyZXMvYnVnIGZpeGVzIHRoYXQgaGF2ZW4ndCB5ZXQgYmVlbiByZWxlYXNlZC4KCldlIGFpbSB0byBrZWVwIHRoZSBkZWZhdWx0IGJyYW5jaCByZWFkeS10by1yZWxlYXNlIHNvIHlvdSBzaG91bGQgYmUgYWJsZSB0byBzYWZlbHkgcGluLgoKVG8gZG8gc28sIHlvdSBjYW4gcnVuOgoKYGBgc2gKIyBwaW4gdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9uIHRoZSBkZWZhdWx0IGJyYW5jaAokIGdvIGdldCBnaXRodWIuY29tL29hcGktY29kZWdlbi9vYXBpLWNvZGVnZW4vdjJAbWFpbgojIGFsdGVybmF0aXZlbHksIHRvIGEgY29tbWl0IGhhc2ggaS5lLiBodHRwczovL2dpdGh1Yi5jb20vZGVlcG1hcC9vYXBpLWNvZGVnZW4vY29tbWl0LzcxZTkxNmM1OTY4OGE2Mzc5YjU3NzRkZmU1OTA0ZWMyMjJiOWE1MzcKJCBnbyBnZXQgZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vb2FwaS1jb2RlZ2VuL3YyQDcxZTkxNmM1OTY4OGE2Mzc5YjU3NzRkZmU1OTA0ZWMyMjJiOWE1MzcKYGBgCgpUaGlzIHdpbGwgdGhlbiBtYWtlIGEgY2hhbmdlIHN1Y2ggYXM6CgpgYGBkaWZmCmRpZmYgLS1naXQgZ28ubW9kIGdvLm1vZAppbmRleCA0NGYyOWE0Li40MzZhNzgwIDEwMDY0NAotLS0gZ28ubW9kCisrKyBnby5tb2QKQEAgLTIsMjEgKzIsMjAgQEAKLXJlcXVpcmUgZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vb2FwaS1jb2RlZ2VuL3YyIHYyLjEuMAorcmVxdWlyZSBnaXRodWIuY29tL29hcGktY29kZWdlbi9vYXBpLWNvZGVnZW4vdjIgdjIuMS4xLTAuMjAyNDAzMzEyMTI1MTQtODBmMGI5NzhlZjE2CmBgYAoKIyMgVXNhZ2UKCmBvYXBpLWNvZGVnZW5gIGlzIGxhcmdlbHkgY29uZmlndXJlZCB1c2luZyBhIFlBTUwgY29uZmlndXJhdGlvbiBmaWxlLCB0byBzaW1wbGlmeSB0aGUgbnVtYmVyIG9mIGZsYWdzIHRoYXQgdXNlcnMgbmVlZCB0byByZW1lbWJlciwgYW5kIHRvIG1ha2UgcmVhZGluZyB0aGUgYGdvOmdlbmVyYXRlYCBjb21tYW5kIGxlc3MgZGF1bnRpbmcuCgpGb3IgZnVsbCBkZXRhaWxzIG9mIHdoYXQgaXMgc3VwcG9ydGVkLCBpdCdzIHdvcnRoIGNoZWNraW5nIG91dCBbdGhlIEdvRG9jIGZvciBgY29kZWdlbi5Db25maWd1cmF0aW9uYF0oaHR0cHM6Ly9wa2cuZ28uZGV2L2dpdGh1Yi5jb20vb2FwaS1jb2RlZ2VuL29hcGktY29kZWdlbi92Mi9wa2cvY29kZWdlbiNDb25maWd1cmF0aW9uKS4KCldlIGFsc28gaGF2ZSBbYSBKU09OIFNjaGVtYV0oY29uZmlndXJhdGlvbi1zY2hlbWEuanNvbikgdGhhdCBjYW4gYmUgdXNlZCBieSBJREVzL2VkaXRvcnMgd2l0aCB0aGUgTGFuZ3VhZ2UgU2VydmVyIFByb3RvY29sIChMU1ApIHRvIHBlcmZvcm0gaW50ZWxsaWdlbnQgc3VnZ2VzdGlvbnMsIGkuZS46CgpgYGB5YW1sCiMgeWFtbC1sYW5ndWFnZS1zZXJ2ZXI6ICRzY2hlbWE9aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL0hFQUQvY29uZmlndXJhdGlvbi1zY2hlbWEuanNvbgpwYWNrYWdlOiBhcGkKIyAuLi4KYGBgCgojIyMgQmFja3dhcmRzIGNvbXBhdGliaWxpdHkKCkFsdGhvdWdoIHdlIHN0cml2ZSB0byByZXRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgLSBhcyBhIHByb2plY3QgdGhhdCdzIHVzaW5nIGEgc3RhYmxlIEFQSSBwZXIgU2VtVmVyIC0gdGhlcmUgYXJlIHNvbWV0aW1lcyBvcHBvcnR1bml0aWVzIHdlIG11c3QgdGFrZSB0byBmaXggYSBidWcgdGhhdCBjb3VsZCBjYXVzZSBhIGJyZWFraW5nIGNoYW5nZSBmb3IgW3Blb3BsZSByZWx5aW5nIHVwb24gdGhlIGJlaGF2aW91cl0oaHR0cHM6Ly94a2NkLmNvbS8xMTcyLykuCgpJbiB0aGlzIGNhc2UsIHdlIHdpbGwgZXhwb3NlIGEgW2NvbXBhdGliaWxpdHkgb3B0aW9uXShodHRwczovL3BrZy5nby5kZXYvZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vb2FwaS1jb2RlZ2VuL3YyL3BrZy9jb2RlZ2VuI0NvbXBhdGliaWxpdHlPcHRpb25zKSB0byByZXN0b3JlIG9sZCBiZWhhdmlvdXIuCgojIyBGZWF0dXJlcwoKQXQgYSBoaWdoIGxldmVsLCBgb2FwaS1jb2RlZ2VuYCBzdXBwb3J0czoKCi0gR2VuZXJhdGluZyBzZXJ2ZXItc2lkZSBib2lsZXJwbGF0ZSBmb3IgW2EgbnVtYmVyIG9mIHNlcnZlcnNdKCNzdXBwb3J0ZWQtc2VydmVycykgKFtkb2NzXSgjZ2VuZXJhdGluZy1zZXJ2ZXItc2lkZS1ib2lsZXJwbGF0ZSkpCi0gR2VuZXJhdGluZyBjbGllbnQgQVBJIGJvaWxlcnBsYXRlIChbZG9jc10oI2dlbmVyYXRpbmctYXBpLWNsaWVudHMpKQotIEdlbmVyYXRpbmcgdGhlIHR5cGVzIChbZG9jc10oI2dlbmVyYXRpbmctYXBpLW1vZGVscykpCi0gU3BsaXR0aW5nIGxhcmdlIE9wZW5BUEkgc3BlY3MgYWNyb3NzIG11bHRpcGxlIHBhY2thZ2VzKFtkb2NzXSgjaW1wb3J0LW1hcHBpbmcpKQogIC0gVGhpcyBpcyBhbHNvIGtub3duIGFzICJJbXBvcnQgTWFwcGluZyIgb3IgImV4dGVybmFsIHJlZmVyZW5jZXMiIGFjcm9zcyBvdXIgZG9jdW1lbnRhdGlvbiAvIGRpc2N1c3Npb24gaW4gR2l0SHViIGlzc3VlcwoKIyMgV2hhdCBkb2VzIGl0IGxvb2sgbGlrZT8KCkJlbG93IHdlIGNhbiBzZWUgYSB0cmltbWVkIGRvd24gZXhhbXBsZSB0YWtlbiBmcm9tIHRoZSBPcGVuQVBJIFBldHN0b3JlIFtleGFtcGxlXShleGFtcGxlcy9wZXRzdG9yZS1leHBhbmRlZC9zdGRodHRwL2FwaS9wZXRzdG9yZS5nZW4uZ28pOgoKYGBgZ28KLy8gZ2VuZXJhdGVkIGNvZGUKCnR5cGUgU2VydmVySW50ZXJmYWNlIGludGVyZmFjZSB7CgkvLyAuLi4KCS8vIFJldHVybnMgYWxsIHBldHMKCS8vIChHRVQgL3BldHMpCglGaW5kUGV0cyh3IGh0dHAuUmVzcG9uc2VXcml0ZXIsIHIgKmh0dHAuUmVxdWVzdCwgcGFyYW1zIEZpbmRQZXRzUGFyYW1zKQoJLy8gLi4uCn0KCi8vIEZpbmRQZXRzIG9wZXJhdGlvbiBtaWRkbGV3YXJlCmZ1bmMgKHNpdyAqU2VydmVySW50ZXJmYWNlV3JhcHBlcikgRmluZFBldHModyBodHRwLlJlc3BvbnNlV3JpdGVyLCByICpodHRwLlJlcXVlc3QpIHsKCgl2YXIgZXJyIGVycm9yCgoJLy8gUGFyYW1ldGVyIG9iamVjdCB3aGVyZSB3ZSB3aWxsIHVubWFyc2hhbCBhbGwgcGFyYW1ldGVycyBmcm9tIHRoZSBjb250ZXh0Cgl2YXIgcGFyYW1zIEZpbmRQZXRzUGFyYW1zCgoJLy8gLS0tLS0tLS0tLS0tLSBPcHRpb25hbCBxdWVyeSBwYXJhbWV0ZXIgInRhZ3MiIC0tLS0tLS0tLS0tLS0KCgllcnIgPSBydW50aW1lLkJpbmRRdWVyeVBhcmFtZXRlcigiZm9ybSIsIHRydWUsIGZhbHNlLCAidGFncyIsIHIuVVJMLlF1ZXJ5KCksICZwYXJhbXMuVGFncykKCWlmIGVyciAhPSBuaWwgewoJCXNpdy5FcnJvckhhbmRsZXJGdW5jKHcsIHIsICZJbnZhbGlkUGFyYW1Gb3JtYXRFcnJvcntQYXJhbU5hbWU6ICJ0YWdzIiwgRXJyOiBlcnJ9KQoJCXJldHVybgoJfQoKCS8vIC0tLS0tLS0tLS0tLS0gT3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVyICJsaW1pdCIgLS0tLS0tLS0tLS0tLQoKCWVyciA9IHJ1bnRpbWUuQmluZFF1ZXJ5UGFyYW1ldGVyKCJmb3JtIiwgdHJ1ZSwgZmFsc2UsICJsaW1pdCIsIHIuVVJMLlF1ZXJ5KCksICZwYXJhbXMuTGltaXQpCglpZiBlcnIgIT0gbmlsIHsKCQlzaXcuRXJyb3JIYW5kbGVyRnVuYyh3LCByLCAmSW52YWxpZFBhcmFtRm9ybWF0RXJyb3J7UGFyYW1OYW1lOiAibGltaXQiLCBFcnI6IGVycn0pCgkJcmV0dXJuCgl9CgoJaGFuZGxlciA6PSBodHRwLkhhbmRsZXIoaHR0cC5IYW5kbGVyRnVuYyhmdW5jKHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0KSB7CgkJc2l3LkhhbmRsZXIuRmluZFBldHModywgciwgcGFyYW1zKQoJfSkpCgoJZm9yIF8sIG1pZGRsZXdhcmUgOj0gcmFuZ2Ugc2l3LkhhbmRsZXJNaWRkbGV3YXJlcyB7CgkJaGFuZGxlciA9IG1pZGRsZXdhcmUoaGFuZGxlcikKCX0KCgloYW5kbGVyLlNlcnZlSFRUUCh3LCByKQp9CgovLyBIYW5kbGVyV2l0aE9wdGlvbnMgY3JlYXRlcyBodHRwLkhhbmRsZXIgd2l0aCBhZGRpdGlvbmFsIG9wdGlvbnMKZnVuYyBIYW5kbGVyV2l0aE9wdGlvbnMoc2kgU2VydmVySW50ZXJmYWNlLCBvcHRpb25zIFN0ZEhUVFBTZXJ2ZXJPcHRpb25zKSBodHRwLkhhbmRsZXIgewoJbSA6PSBvcHRpb25zLkJhc2VSb3V0ZXIKCglpZiBtID09IG5pbCB7CgkJbSA9IGh0dHAuTmV3U2VydmVNdXgoKQoJfQoJaWYgb3B0aW9ucy5FcnJvckhhbmRsZXJGdW5jID09IG5pbCB7CgkJb3B0aW9ucy5FcnJvckhhbmRsZXJGdW5jID0gZnVuYyh3IGh0dHAuUmVzcG9uc2VXcml0ZXIsIHIgKmh0dHAuUmVxdWVzdCwgZXJyIGVycm9yKSB7CgkJCWh0dHAuRXJyb3IodywgZXJyLkVycm9yKCksIGh0dHAuU3RhdHVzQmFkUmVxdWVzdCkKCQl9Cgl9CgoJd3JhcHBlciA6PSBTZXJ2ZXJJbnRlcmZhY2VXcmFwcGVyewoJCUhhbmRsZXI6ICAgICAgICAgICAgc2ksCgkJSGFuZGxlck1pZGRsZXdhcmVzOiBvcHRpb25zLk1pZGRsZXdhcmVzLAoJCUVycm9ySGFuZGxlckZ1bmM6ICAgb3B0aW9ucy5FcnJvckhhbmRsZXJGdW5jLAoJfQoKCW0uSGFuZGxlRnVuYygiR0VUICIrb3B0aW9ucy5CYXNlVVJMKyIvcGV0cyIsIHdyYXBwZXIuRmluZFBldHMpCgoJcmV0dXJuIG0KfQpgYGAKClRoZW4sIGluIHlvdXIgb3duIGNvZGUsIHlvdSBpbXBsZW1lbnQgdGhlIHVuZGVybHlpbmcgbG9naWMgZm9yIHRoZSBgRmluZFBldHNgIGltcGxlbWVudGF0aW9uOgoKYGBgZ28KdHlwZSBQZXRTdG9yZSBzdHJ1Y3QgewoJUGV0cyAgIG1hcFtpbnQ2NF1QZXQKCU5leHRJZCBpbnQ2NAoJTG9jayAgIHN5bmMuTXV0ZXgKfQoKLy8gTWFrZSBzdXJlIHdlIGNvbmZvcm0gdG8gU2VydmVySW50ZXJmYWNlCgp2YXIgXyBTZXJ2ZXJJbnRlcmZhY2UgPSAoKlBldFN0b3JlKShuaWwpCgpmdW5jIE5ld1BldFN0b3JlKCkgKlBldFN0b3JlIHsKCXJldHVybiAmUGV0U3RvcmV7CgkJUGV0czogICBtYWtlKG1hcFtpbnQ2NF1QZXQpLAoJCU5leHRJZDogMTAwMCwKCX0KfQoKLy8gRmluZFBldHMgaW1wbGVtZW50cyBhbGwgdGhlIGhhbmRsZXJzIGluIHRoZSBTZXJ2ZXJJbnRlcmZhY2UKZnVuYyAocCAqUGV0U3RvcmUpIEZpbmRQZXRzKHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0LCBwYXJhbXMgRmluZFBldHNQYXJhbXMpIHsKCXAuTG9jay5Mb2NrKCkKCWRlZmVyIHAuTG9jay5VbmxvY2soKQoKCXZhciByZXN1bHQgW11QZXQKCglmb3IgXywgcGV0IDo9IHJhbmdlIHAuUGV0cyB7CgkJaWYgcGFyYW1zLlRhZ3MgIT0gbmlsIHsKCQkJLy8gSWYgd2UgaGF2ZSB0YWdzLCAgZmlsdGVyIHBldHMgYnkgdGFnCgkJCWZvciBfLCB0IDo9IHJhbmdlICpwYXJhbXMuVGFncyB7CgkJCQlpZiBwZXQuVGFnICE9IG5pbCAmJiAoKnBldC5UYWcgPT0gdCkgewoJCQkJCXJlc3VsdCA9IGFwcGVuZChyZXN1bHQsIHBldCkKCQkJCX0KCQkJfQoJCX0gZWxzZSB7CgkJCS8vIEFkZCBhbGwgcGV0cyBpZiB3ZSdyZSBub3QgZmlsdGVyaW5nCgkJCXJlc3VsdCA9IGFwcGVuZChyZXN1bHQsIHBldCkKCQl9CgoJCWlmIHBhcmFtcy5MaW1pdCAhPSBuaWwgewoJCQlsIDo9IGludCgqcGFyYW1zLkxpbWl0KQoJCQlpZiBsZW4ocmVzdWx0KSA+PSBsIHsKCQkJCS8vIFdlJ3JlIGF0IHRoZSBsaW1pdAoJCQkJYnJlYWsKCQkJfQoJCX0KCX0KCgl3LldyaXRlSGVhZGVyKGh0dHAuU3RhdHVzT0spCglfID0ganNvbi5OZXdFbmNvZGVyKHcpLkVuY29kZShyZXN1bHQpCn0KYGBgCgpBcyB3ZSBjYW4gc2VlLCBgb2FwaS1jb2RlZ2VuYCBzaW1wbGlmaWVzIHNvbWUgb2YgdGhlIGJvaWxlcnBsYXRlIGJ5IHRha2luZyBwYXJhbWV0ZXJzIG91dCBvZiB0aGUgcmVxdWVzdCBhbmQgaW5zdGVhZCBhbGxvd3MgdXMgdG8gZm9jdXMgb24gdGhlIGltcGxlbWVudGF0aW9uLgoKWW91J2xsIG5vdGUgdGhhdCB0aGVyZSdzIHN0aWxsIGEgYml0IG1vcmUgbWFyc2hhbGluZyBvZiByZXF1ZXN0L3Jlc3BvbnNlIGRhdGEsIHdoaWNoIGlzIGZ1cnRoZXIgcmVkdWNlZCBieSB1c2luZyB0aGUgW1N0cmljdCBzZXJ2ZXJdKCNzdHJpY3Qtc2VydmVyKSBmdW5jdGlvbmFsaXR5LgoKPGEgbmFtZT0id2hhdC1kb2VzLWl0LWxvb2stbGlrZS1zdHJpY3QiPjwvYT4KV2hlbiB1c2luZyB0aGUgc3RyaWN0IHNlcnZlciwgeW91J2xsIGhhdmUgdGhlIGZvbGxvd2luZyBnZW5lcmF0ZWQgY29kZToKCmBgYGdvCi8vIFN0cmljdFNlcnZlckludGVyZmFjZSByZXByZXNlbnRzIGFsbCBzZXJ2ZXIgaGFuZGxlcnMuCnR5cGUgU3RyaWN0U2VydmVySW50ZXJmYWNlIGludGVyZmFjZSB7CgkvLyAuLi4KCS8vIFJldHVybnMgYWxsIHBldHMKCS8vIChHRVQgL3BldHMpCglGaW5kUGV0cyhjdHggY29udGV4dC5Db250ZXh0LCByZXF1ZXN0IEZpbmRQZXRzUmVxdWVzdE9iamVjdCkgKEZpbmRQZXRzUmVzcG9uc2VPYmplY3QsIGVycm9yKQoJLy8gLi4uCn0KCmZ1bmMgTmV3U3RyaWN0SGFuZGxlcldpdGhPcHRpb25zKHNzaSBTdHJpY3RTZXJ2ZXJJbnRlcmZhY2UsIG1pZGRsZXdhcmVzIFtdU3RyaWN0TWlkZGxld2FyZUZ1bmMsIG9wdGlvbnMgU3RyaWN0SFRUUFNlcnZlck9wdGlvbnMpIFNlcnZlckludGVyZmFjZSB7CglyZXR1cm4gJnN0cmljdEhhbmRsZXJ7c3NpOiBzc2ksIG1pZGRsZXdhcmVzOiBtaWRkbGV3YXJlcywgb3B0aW9uczogb3B0aW9uc30KfQoKLy8gRmluZFBldHMgb3BlcmF0aW9uIG1pZGRsZXdhcmUKZnVuYyAoc2ggKnN0cmljdEhhbmRsZXIpIEZpbmRQZXRzKHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0LCBwYXJhbXMgRmluZFBldHNQYXJhbXMpIHsKCXZhciByZXF1ZXN0IEZpbmRQZXRzUmVxdWVzdE9iamVjdAoKCXJlcXVlc3QuUGFyYW1zID0gcGFyYW1zCgoJaGFuZGxlciA6PSBmdW5jKGN0eCBjb250ZXh0LkNvbnRleHQsIHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0LCByZXF1ZXN0IGludGVyZmFjZXt9KSAoaW50ZXJmYWNle30sIGVycm9yKSB7CgkJcmV0dXJuIHNoLnNzaS5GaW5kUGV0cyhjdHgsIHJlcXVlc3QuKEZpbmRQZXRzUmVxdWVzdE9iamVjdCkpCgl9Cglmb3IgXywgbWlkZGxld2FyZSA6PSByYW5nZSBzaC5taWRkbGV3YXJlcyB7CgkJaGFuZGxlciA9IG1pZGRsZXdhcmUoaGFuZGxlciwgIkZpbmRQZXRzIikKCX0KCglyZXNwb25zZSwgZXJyIDo9IGhhbmRsZXIoci5Db250ZXh0KCksIHcsIHIsIHJlcXVlc3QpCgoJaWYgZXJyICE9IG5pbCB7CgkJc2gub3B0aW9ucy5SZXNwb25zZUVycm9ySGFuZGxlckZ1bmModywgciwgZXJyKQoJfSBlbHNlIGlmIHZhbGlkUmVzcG9uc2UsIG9rIDo9IHJlc3BvbnNlLihGaW5kUGV0c1Jlc3BvbnNlT2JqZWN0KTsgb2sgewoJCWlmIGVyciA6PSB2YWxpZFJlc3BvbnNlLlZpc2l0RmluZFBldHNSZXNwb25zZSh3KTsgZXJyICE9IG5pbCB7CgkJCXNoLm9wdGlvbnMuUmVzcG9uc2VFcnJvckhhbmRsZXJGdW5jKHcsIHIsIGVycikKCQl9Cgl9IGVsc2UgaWYgcmVzcG9uc2UgIT0gbmlsIHsKCQlzaC5vcHRpb25zLlJlc3BvbnNlRXJyb3JIYW5kbGVyRnVuYyh3LCByLCBmbXQuRXJyb3JmKCJ1bmV4cGVjdGVkIHJlc3BvbnNlIHR5cGU6ICVUIiwgcmVzcG9uc2UpKQoJfQp9CmBgYAoKVGhlbiwgaW4geW91ciBvd24gY29kZSwgeW91IGltcGxlbWVudCB0aGUgdW5kZXJseWluZyBsb2dpYyBmb3IgdGhlIGBGaW5kUGV0c2AgaW1wbGVtZW50YXRpb246CgpgYGBnbwovLyBNYWtlIHN1cmUgd2UgY29uZm9ybSB0byBTdHJpY3RTZXJ2ZXJJbnRlcmZhY2UKCnZhciBfIFN0cmljdFNlcnZlckludGVyZmFjZSA9ICgqUGV0U3RvcmUpKG5pbCkKCmZ1bmMgTmV3UGV0U3RvcmUoKSAqUGV0U3RvcmUgewoJcmV0dXJuICZQZXRTdG9yZXsKCQlQZXRzOiAgIG1ha2UobWFwW2ludDY0XVBldCksCgkJTmV4dElkOiAxMDAwLAoJfQp9CgovLyBGaW5kUGV0cyBpbXBsZW1lbnRzIGFsbCB0aGUgaGFuZGxlcnMgaW4gdGhlIFNlcnZlckludGVyZmFjZQpmdW5jIChwICpQZXRTdG9yZSkgRmluZFBldHMoY3R4IGNvbnRleHQuQ29udGV4dCwgcmVxdWVzdCBGaW5kUGV0c1JlcXVlc3RPYmplY3QpIChGaW5kUGV0c1Jlc3BvbnNlT2JqZWN0LCBlcnJvcikgewoJcC5Mb2NrLkxvY2soKQoJZGVmZXIgcC5Mb2NrLlVubG9jaygpCgoJdmFyIHJlc3VsdCBbXVBldAoKCWZvciBfLCBwZXQgOj0gcmFuZ2UgcC5QZXRzIHsKCQlpZiByZXF1ZXN0LlBhcmFtcy5UYWdzICE9IG5pbCB7CgkJCS8vIElmIHdlIGhhdmUgdGFncywgIGZpbHRlciBwZXRzIGJ5IHRhZwoJCQlmb3IgXywgdCA6PSByYW5nZSAqcmVxdWVzdC5QYXJhbXMuVGFncyB7CgkJCQlpZiBwZXQuVGFnICE9IG5pbCAmJiAoKnBldC5UYWcgPT0gdCkgewoJCQkJCXJlc3VsdCA9IGFwcGVuZChyZXN1bHQsIHBldCkKCQkJCX0KCQkJfQoJCX0gZWxzZSB7CgkJCS8vIEFkZCBhbGwgcGV0cyBpZiB3ZSdyZSBub3QgZmlsdGVyaW5nCgkJCXJlc3VsdCA9IGFwcGVuZChyZXN1bHQsIHBldCkKCQl9CgoJCWlmIHJlcXVlc3QuUGFyYW1zLkxpbWl0ICE9IG5pbCB7CgkJCWwgOj0gaW50KCpyZXF1ZXN0LlBhcmFtcy5MaW1pdCkKCQkJaWYgbGVuKHJlc3VsdCkgPj0gbCB7CgkJCQkvLyBXZSdyZSBhdCB0aGUgbGltaXQKCQkJCWJyZWFrCgkJCX0KCQl9Cgl9CgoJcmV0dXJuIEZpbmRQZXRzMjAwSlNPTlJlc3BvbnNlKHJlc3VsdCksIG5pbAp9CmBgYAoKV2UgY2FuIHNlZSB0aGF0IHRoaXMgcHJvdmlkZXMgdGhlIGJlc3QgbWVhbnMgdG8gZm9jdXMgb24gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBidXNpbmVzcyBsb2dpYyB3aXRoaW4gdGhlIGVuZHBvaW50LCByYXRoZXIgdGhhbiAodW4pbWFyc2hhbGxpbmcgdHlwZXMgdG8gYW5kIGZyb20gSlNPTiwgb3Igd3JhbmdsaW5nIGNvb2tpZXMgb3IgaGVhZGVycy4KCiMjIEtleSBkZXNpZ24gZGVjaXNpb25zCgotIFByb2R1Y2UgYW4gaW50ZXJmYWNlIHRoYXQgY2FuIGJlIHNhdGlzZmllZCBieSB5b3VyIGltcGxlbWVudGF0aW9uLCB3aXRoIHJlZHVjZWQgYm9pbGVycGxhdGUKLSBCdWxrIHByb2Nlc3NpbmcgYW5kIHBhcnNpbmcgb2YgT3BlbkFQSSBkb2N1bWVudCBpbiBHbwotIFJlc3VsdGluZyBvdXRwdXQgaXMgdXNpbmcgR28ncyBgdGV4dC90ZW1wbGF0ZWBzLCB3aGljaCBhcmUgdXNlci1vdmVycmlkYWJsZQotIEF0dGVtcHRzIHRvIHByb2R1Y2UgSWRpb21hdGljIEdvCi0gU2luZ2xlLWZpbGUgb3V0cHV0Ci0gU3VwcG9ydCBtdWx0aXBsZSBPcGVuQVBJIGZpbGVzIGJ5IGhhdmluZyBhIHBhY2thZ2UtcGVyLU9wZW5BUEkgZmlsZQotIFN1cHBvcnQgb2YgT3BlbkFQSSAzLjAKICAtIE9wZW5BUEkgMy4xIHN1cHBvcnQgaXMgW2F3YWl0aW5nIHVwc3RyZWFtIHN1cHBvcnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9kZWVwbWFwL29hcGktY29kZWdlbi9pc3N1ZXMvMzczKQogIC0gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgaW5jbHVkZSBPcGVuQVBJIDIuMCAoYWthIFN3YWdnZXIpCi0gRXh0cmFjdCBwYXJhbWV0ZXJzIGZyb20gcmVxdWVzdHMsIHRvIHJlZHVjZSB3b3JrIHJlcXVpcmVkIGJ5IHlvdXIgaW1wbGVtZW50YXRpb24KLSBJbXBsaWNpdCBgYWRkaXRpb25hbFByb3BlcnRpZXNgIGFyZSBpZ25vcmVkIGJ5IGRlZmF1bHQgKFttb3JlIGRldGFpbHNdKCNhZGRpdGlvbmFsLXByb3BlcnRpZXMtYWRkaXRpb25hbHByb3BlcnRpZXMpKQotIFBydW5lIHVudXNlZCB0eXBlcyBieSBkZWZhdWx0CgojIyBHZW5lcmF0aW5nIHNlcnZlci1zaWRlIGJvaWxlcnBsYXRlCgpgb2FwaS1jb2RlZ2VuYCBzaGluZXMgYnkgbWFraW5nIGl0IGZhaXJseSBzdHJhaWdodGZvcndhcmQgKG5vdGUgdGhhdCB0aGlzIGlzIGEgcHVycG9zZWZ1bCBjaG9pY2Ugb2Ygd29yZGluZyBoZXJlIC0gd2Ugd2FudCB0byBhdm9pZCB3b3JkcyBsaWtlICJlYXN5IikgdG8gZ2VuZXJhdGUgdGhlIHNlcnZlci1zaWRlIGJvaWxlcnBsYXRlIGZvciBhIGJhY2tlbmQgQVBJLgoKQmVsb3cgeW91IGNhbiBmaW5kIHRoZSBzdXBwb3J0ZWQgc2VydmVycywgYW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIGltcGxlbWVudCBhIHNlcnZlciB1c2luZyB0aGVtLgoKVG8gcHJvdmlkZSB5b3UgYSBmdWxseSBUZXN0IERyaXZlbiBEZXZlbG9wbWVudCBzdHlsZSB0ZXN0IGhhcm5lc3MgdG8gY29uZmlybSB5b3UgYXJlIGZvbGxvd2luZyB0aGUgc3BlY2lmaWNhdGlvbiwgeW91IGNvdWxkIHVzZSBhIHRvb2wgc3VjaCBhcyBbb3BlbmFwaS50YW5uYS5kZXYvZ28vdmFsaWRhdG9yXShodHRwczovL29wZW5hcGkudGFubmEuZGV2L2dvL3ZhbGlkYXRvci8pLCBvciBjcmFmdCB5b3VyIG93bi4KCiMjIyBTdXBwb3J0ZWQgU2VydmVycwoKUmlnaHQgbm93LCB3ZSBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgc2VydmVycywgYW5kIGFyZSBzdXBwb3J0aXZlIG9mIGFkZGluZyBuZXcgc2VydmVycywgdG9vIQoKPHRhYmxlPgoKPHRyPgo8dGg+ClNlcnZlcgo8L3RoPgo8dGg+Cjxjb2RlPmdlbmVyYXRlPC9jb2RlPiBmbGFnIHRvIGVuYWJsZSBjb2RlIGdlbmVyYXRpb24KPC90aD4KPHRoPgpFeGFtcGxlIHVzYWdlCjwvdGg+CjwvdHI+Cgo8dHI+Cjx0ZD4KCltDaGldKGh0dHBzOi8vZ2l0aHViLmNvbS9nby1jaGkvY2hpKQoKPC90ZD4KPHRkPgo8Y29kZT5jaGktc2VydmVyPC9jb2RlPgo8L3RkPgo8dGQ+CgoKRm9yIGEgQ2hpIHNlcnZlciwgeW91IHdpbGwgd2FudCBhIGNvbmZpZ3VyYXRpb24gZmlsZSBzdWNoIGFzOgoKYGBgeWFtbAojIHlhbWwtbGFuZ3VhZ2Utc2VydmVyOiAuLi4KcGFja2FnZTogYXBpCmdlbmVyYXRlOgogIGNoaS1zZXJ2ZXI6IHRydWUKICBtb2RlbHM6IHRydWUKb3V0cHV0OiBnZW4uZ28KYGBgCgpUbyBpbXBsZW1lbnQgdGhpcywgY2hlY2sgb3V0IFt0aGUgQ2hpIGRvY3NdKCNpbXBsLWNoaSkuCgo8L3RkPgo8L3RyPgoKPHRyPgo8dGQ+CgpbRWNob10oaHR0cHM6Ly9naXRodWIuY29tL2xhYnN0YWNrL2VjaG8pCgo8L3RkPgo8dGQ+Cjxjb2RlPmVjaG8tc2VydmVyPC9jb2RlPgo8L3RkPgo8dGQ+CgpGb3IgYW4gRWNobyBzZXJ2ZXIsIHlvdSB3aWxsIHdhbnQgYSBjb25maWd1cmF0aW9uIGZpbGUgc3VjaCBhczoKCmBgYHlhbWwKIyB5YW1sLWxhbmd1YWdlLXNlcnZlcjogLi4uCnBhY2thZ2U6IGFwaQpnZW5lcmF0ZToKICBlY2hvLXNlcnZlcjogdHJ1ZQogIG1vZGVsczogdHJ1ZQpvdXRwdXQ6IGdlbi5nbwpgYGAKClRvIGltcGxlbWVudCB0aGlzLCBjaGVjayBvdXQgW3RoZSBFY2hvIGRvY3NdKCNpbXBsLWVjaG8pLgoKPC90ZD4KPC90cj4KCjx0cj4KPHRkPgoKW0ZpYmVyXShodHRwczovL2dpdGh1Yi5jb20vZ29maWJlci9maWJlcikKCjwvdGQ+Cjx0ZD4KPGNvZGU+ZmliZXItc2VydmVyPC9jb2RlPgo8L3RkPgoKPHRkPgoKRm9yIGEgRmliZXIgc2VydmVyLCB5b3Ugd2lsbCB3YW50IGEgY29uZmlndXJhdGlvbiBmaWxlIHN1Y2ggYXM6CgpgYGB5YW1sCiMgeWFtbC1sYW5ndWFnZS1zZXJ2ZXI6IC4uLgpwYWNrYWdlOiBhcGkKZ2VuZXJhdGU6CiAgZmliZXItc2VydmVyOiB0cnVlCiAgbW9kZWxzOiB0cnVlCm91dHB1dDogZ2VuLmdvCmBgYAoKVG8gaW1wbGVtZW50IHRoaXMsIGNoZWNrIG91dCBbdGhlIEZpYmVyIGRvY3NdKCNpbXBsLWZpYmVyKS4KCjwvdGQ+CjwvdHI+CgoKPHRyPgo8dGQ+CgpbR2luXShodHRwczovL2dpdGh1Yi5jb20vZ2luLWdvbmljL2dpbikKCjwvdGQ+Cjx0ZD4KPGNvZGU+Z2luLXNlcnZlcjwvY29kZT4KPC90ZD4KPHRkPgoKRm9yIGEgR2luIHNlcnZlciwgeW91IHdpbGwgd2FudCBhIGNvbmZpZ3VyYXRpb24gZmlsZSBzdWNoIGFzOgoKYGBgeWFtbAojIHlhbWwtbGFuZ3VhZ2Utc2VydmVyOiAuLi4KcGFja2FnZTogYXBpCmdlbmVyYXRlOgogIGdpbi1zZXJ2ZXI6IHRydWUKICBtb2RlbHM6IHRydWUKb3V0cHV0OiBnZW4uZ28KYGBgCgpUbyBpbXBsZW1lbnQgdGhpcywgY2hlY2sgb3V0IFt0aGUgR2luIGRvY3NdKCNpbXBsLWdpbikuCgo8L3RkPgoKPC90cj4KCjx0cj4KPHRkPgoKW2dvcmlsbGEvbXV4XShodHRwczovL2dpdGh1Yi5jb20vZ29yaWxsYS9tdXgpCgo8L3RkPgo8dGQ+Cjxjb2RlPmdvcmlsbGEtc2VydmVyPC9jb2RlPgo8L3RkPgoKPHRkPgoKRm9yIGEgZ29yaWxsYS9tdXggc2VydmVyLCB5b3Ugd2lsbCB3YW50IGEgY29uZmlndXJhdGlvbiBmaWxlIHN1Y2ggYXM6CgpgYGB5YW1sCiMgeWFtbC1sYW5ndWFnZS1zZXJ2ZXI6IC4uLgpwYWNrYWdlOiBhcGkKZ2VuZXJhdGU6CiAgZ29yaWxsYS1zZXJ2ZXI6IHRydWUKICBtb2RlbHM6IHRydWUKb3V0cHV0OiBnZW4uZ28KYGBgCgpUbyBpbXBsZW1lbnQgdGhpcywgY2hlY2sgb3V0IFt0aGUgZ29yaWxsYS9tdXggZG9jc10oI2ltcGwtZ29yaWxsYW11eCkuCgo8L3RkPgo8L3RyPgoKPHRyPgo8dGQ+CgpbSXJpc10oaHR0cHM6Ly9naXRodWIuY29tL2thdGFyYXMvaXJpcykKCjwvdGQ+Cjx0ZD4KPGNvZGU+aXJpcy1zZXJ2ZXI8L2NvZGU+CjwvdGQ+Cgo8dGQ+CgpGb3IgYSBJcmlzIHNlcnZlciwgeW91IHdpbGwgd2FudCBhIGNvbmZpZ3VyYXRpb24gZmlsZSBzdWNoIGFzOgoKYGBgeWFtbAojIHlhbWwtbGFuZ3VhZ2Utc2VydmVyOiAuLi4KcGFja2FnZTogYXBpCmdlbmVyYXRlOgogIGlyaXMtc2VydmVyOiB0cnVlCiAgbW9kZWxzOiB0cnVlCm91dHB1dDogZ2VuLmdvCmBgYAoKVG8gaW1wbGVtZW50IHRoaXMsIGNoZWNrIG91dCBbdGhlIElyaXMgZG9jc10oI2ltcGwtaXJpcykuCgo8L3RkPgo8L3RyPgoKPHRyPgo8dGQ+CgpbMS4yMisgYG5ldC9odHRwYF0oaHR0cHM6Ly9wa2cuZ28uZGV2L25ldC9odHRwKQoKPC90ZD4KPHRkPgo8Y29kZT5zdGQtaHR0cC1zZXJ2ZXI8L2NvZGU+CjwvdGQ+Cgo8dGQ+CgpUbyB1c2UgcHVyZWx5IGBuZXQvaHR0cGAgKGZvciBHbyAxLjIyKyksIHlvdSB3aWxsIHdhbnQgYSBjb25maWd1cmF0aW9uIGZpbGUgc3VjaCBhczoKCmBgYHlhbWwKIyB5YW1sLWxhbmd1YWdlLXNlcnZlcjogLi4uCnBhY2thZ2U6IGFwaQpnZW5lcmF0ZToKICBzdGQtaHR0cC1zZXJ2ZXI6IHRydWUKICBtb2RlbHM6IHRydWUKb3V0cHV0OiBnZW4uZ28KYGBgCgpUbyBpbXBsZW1lbnQgdGhpcywgY2hlY2sgb3V0IFt0aGUgR28gMS4yMisgYG5ldC9odHRwYCBkb2NzXSgjaW1wbC1zdGRodHRwKS4KCjwvdGQ+CjwvdHI+Cgo8L3RhYmxlPgoKIyMjIEdvIDEuMjIrIGBuZXQvaHR0cGAKPGEgbmFtZT0iaW1wbC1zdGRodHRwIj48L2E+CgpBcyBvZiBHbyAxLjIyLCBlbmhhbmNlbWVudHMgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIHJvdXRpbmcgb2YgdGhlIGBuZXQvaHR0cGAgcGFja2FnZSBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSwgd2hpY2ggbWFrZXMgaXQgYSBncmVhdCBzdGFydGluZyBwb2ludCBmb3IgaW1wbGVtZW50aW5nIGEgc2VydmVyIHdpdGgsIGJlZm9yZSBuZWVkaW5nIHRvIHJlYWNoIGZvciBhbm90aGVyIHJvdXRlciBvciBhIGZ1bGwgZnJhbWV3b3JrLgoKRm9yIGluc3RhbmNlLCBsZXQncyB0YWtlIHRoaXMgc3RyYWlnaHRmb3J3YXJkIHNwZWNpZmljYXRpb246CgpgYGB5YW1sCm9wZW5hcGk6ICIzLjAuMCIKaW5mbzoKICB2ZXJzaW9uOiAxLjAuMAogIHRpdGxlOiBNaW5pbWFsIHBpbmcgQVBJIHNlcnZlcgpwYXRoczoKICAvcGluZzoKICAgIGdldDoKICAgICAgcmVzcG9uc2VzOgogICAgICAgICcyMDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IHBldCByZXNwb25zZQogICAgICAgICAgY29udGVudDoKICAgICAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICAgICAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvUG9uZycKY29tcG9uZW50czoKICBzY2hlbWFzOgogICAgIyBiYXNlIHR5cGVzCiAgICBQb25nOgogICAgICB0eXBlOiBvYmplY3QKICAgICAgcmVxdWlyZWQ6CiAgICAgICAgLSBwaW5nCiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgcGluZzoKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgZXhhbXBsZTogcG9uZwpgYGAKClRoaXMgdGhlbiBnZW5lcmF0ZXMgY29kZSBzdWNoIGFzOgoKYGBgZ28KLy8gUG9uZyBkZWZpbmVzIG1vZGVsIGZvciBQb25nLgp0eXBlIFBvbmcgc3RydWN0IHsKCVBpbmcgc3RyaW5nIGBqc29uOiJwaW5nImAKfQoKLy8gU2VydmVySW50ZXJmYWNlIHJlcHJlc2VudHMgYWxsIHNlcnZlciBoYW5kbGVycy4KdHlwZSBTZXJ2ZXJJbnRlcmZhY2UgaW50ZXJmYWNlIHsKCgkvLyAoR0VUIC9waW5nKQoJR2V0UGluZyh3IGh0dHAuUmVzcG9uc2VXcml0ZXIsIHIgKmh0dHAuUmVxdWVzdCkKfQoKZnVuYyBIYW5kbGVyRnJvbU11eChzaSBTZXJ2ZXJJbnRlcmZhY2UsIG0gKmh0dHAuU2VydmVNdXgpIGh0dHAuSGFuZGxlciB7CglyZXR1cm4gSGFuZGxlcldpdGhPcHRpb25zKHNpLCBTdGRIVFRQU2VydmVyT3B0aW9uc3sKCQlCYXNlUm91dGVyOiBtLAoJfSkKfQoKLy8gSGFuZGxlcldpdGhPcHRpb25zIGNyZWF0ZXMgaHR0cC5IYW5kbGVyIHdpdGggYWRkaXRpb25hbCBvcHRpb25zCmZ1bmMgSGFuZGxlcldpdGhPcHRpb25zKHNpIFNlcnZlckludGVyZmFjZSwgb3B0aW9ucyBTdGRIVFRQU2VydmVyT3B0aW9ucykgaHR0cC5IYW5kbGVyIHsKCW0gOj0gb3B0aW9ucy5CYXNlUm91dGVyCgoJLy8gLi4uIG9taXR0ZWQgZm9yIGJyZXZpdHkKCgltLkhhbmRsZUZ1bmMoIkdFVCAiK29wdGlvbnMuQmFzZVVSTCsiL3BpbmciLCB3cmFwcGVyLkdldFBpbmcpCgoJcmV0dXJuIG0KfQpgYGAKClRvIGltcGxlbWVudCB0aGlzIEhUVFAgc2VydmVyLCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBvdXIgW2BhcGkvaW1wbC5nb2BdKGV4YW1wbGVzL21pbmltYWwtc2VydmVyL3N0ZGh0dHAvYXBpL2ltcGwuZ28pOgoKYGBgZ28KaW1wb3J0ICgKCSJlbmNvZGluZy9qc29uIgoJIm5ldC9odHRwIgopCgovLyBvcHRpb25hbCBjb2RlIG9taXR0ZWQKCnR5cGUgU2VydmVyIHN0cnVjdHt9CgpmdW5jIE5ld1NlcnZlcigpIFNlcnZlciB7CglyZXR1cm4gU2VydmVye30KfQoKLy8gKEdFVCAvcGluZykKZnVuYyAoU2VydmVyKSBHZXRQaW5nKHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0KSB7CglyZXNwIDo9IFBvbmd7CgkJUGluZzogInBvbmciLAoJfQoKCXcuV3JpdGVIZWFkZXIoaHR0cC5TdGF0dXNPSykKCV8gPSBqc29uLk5ld0VuY29kZXIodykuRW5jb2RlKHJlc3ApCn0KYGBgCgpOb3cgd2UndmUgZ290IG91ciBpbXBsZW1lbnRhdGlvbiwgd2UgY2FuIHRoZW4gd3JpdGUgdGhlIGZvbGxvd2luZyBjb2RlIHRvIHdpcmUgaXQgdXAgYW5kIGdldCBhIHJ1bm5pbmcgc2VydmVyOgoKYGBgZ28KaW1wb3J0ICgKCSJsb2ciCgkibmV0L2h0dHAiCgoJImdpdGh1Yi5jb20vb2FwaS1jb2RlZ2VuL29hcGktY29kZWdlbi92Mi9leGFtcGxlcy9taW5pbWFsLXNlcnZlci9zdGRodHRwL2FwaSIKKQoKZnVuYyBtYWluKCkgewoJLy8gY3JlYXRlIGEgdHlwZSB0aGF0IHNhdGlzZmllcyB0aGUgYGFwaS5TZXJ2ZXJJbnRlcmZhY2VgLCB3aGljaCBjb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBldmVyeSBvcGVyYXRpb24gZnJvbSB0aGUgZ2VuZXJhdGVkIGNvZGUKCXNlcnZlciA6PSBhcGkuTmV3U2VydmVyKCkKCglyIDo9IGh0dHAuTmV3U2VydmVNdXgoKQoKCS8vIGdldCBhbiBgaHR0cC5IYW5kbGVyYCB0aGF0IHdlIGNhbiB1c2UKCWggOj0gYXBpLkhhbmRsZXJGcm9tTXV4KHNlcnZlciwgcikKCglzIDo9ICZodHRwLlNlcnZlcnsKCQlIYW5kbGVyOiBoLAoJCUFkZHI6ICAgICIwLjAuMC4wOjgwODAiLAoJfQoKCS8vIEFuZCB3ZSBzZXJ2ZSBIVFRQIHVudGlsIHRoZSB3b3JsZCBlbmRzLgoJbG9nLkZhdGFsKHMuTGlzdGVuQW5kU2VydmUoKSkKfQpgYGAKCj4gWyFOT1RFXQo+IFRoaXMgZG9lc24ndCBpbmNsdWRlIFt2YWxpZGF0aW9uIG9mIGluY29taW5nIHJlcXVlc3RzXSgjcmVxdWVzdHJlc3BvbnNlLXZhbGlkYXRpb24tbWlkZGxld2FyZSkuCgo+IFshTk9URV0KPiBJZiB5b3UgZmVlbCBsaWtlIHlvdSd2ZSBkb25lIGV2ZXJ5dGhpbmcgcmlnaHQsIGJ1dCBhcmUgc3RpbGwgcmVjZWl2aW5nIGA0MDQgcGFnZSBub3QgZm91bmRgIGVycm9ycywgbWFrZSBzdXJlIHRoYXQgeW91J3ZlIGdvdCB0aGUgYGdvYCBkaXJlY3RpdmUgaW4geW91ciBgZ28ubW9kYCB1cGRhdGVkIHRvOgoKYGBgZ28ubW9kCmdvIDEuMjIKYGBgCgo8L2RldGFpbHM+CgojIyMgQ2hpCjxhIG5hbWU9ImltcGwtY2hpIj48L2E+CgpGb3IgaW5zdGFuY2UsIGxldCdzIHRha2UgdGhpcyBzdHJhaWdodGZvcndhcmQgc3BlY2lmaWNhdGlvbjoKCmBgYHlhbWwKb3BlbmFwaTogIjMuMC4wIgppbmZvOgogIHZlcnNpb246IDEuMC4wCiAgdGl0bGU6IE1pbmltYWwgcGluZyBBUEkgc2VydmVyCnBhdGhzOgogIC9waW5nOgogICAgZ2V0OgogICAgICByZXNwb25zZXM6CiAgICAgICAgJzIwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogcGV0IHJlc3BvbnNlCiAgICAgICAgICBjb250ZW50OgogICAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9Qb25nJwpjb21wb25lbnRzOgogIHNjaGVtYXM6CiAgICAjIGJhc2UgdHlwZXMKICAgIFBvbmc6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICByZXF1aXJlZDoKICAgICAgICAtIHBpbmcKICAgICAgcHJvcGVydGllczoKICAgICAgICBwaW5nOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICBleGFtcGxlOiBwb25nCmBgYAoKVGhpcyB0aGVuIGdlbmVyYXRlcyBjb2RlIHN1Y2ggYXM6CgpgYGBnbwovLyBQb25nIGRlZmluZXMgbW9kZWwgZm9yIFBvbmcuCnR5cGUgUG9uZyBzdHJ1Y3QgewoJUGluZyBzdHJpbmcgYGpzb246InBpbmciYAp9CgovLyBTZXJ2ZXJJbnRlcmZhY2UgcmVwcmVzZW50cyBhbGwgc2VydmVyIGhhbmRsZXJzLgp0eXBlIFNlcnZlckludGVyZmFjZSBpbnRlcmZhY2UgewoKCS8vIChHRVQgL3BpbmcpCglHZXRQaW5nKHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0KQp9CgovLyBIYW5kbGVyRnJvbU11eCBjcmVhdGVzIGh0dHAuSGFuZGxlciB3aXRoIHJvdXRpbmcgbWF0Y2hpbmcgT3BlbkFQSSBzcGVjIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBtdXguCmZ1bmMgSGFuZGxlckZyb21NdXgoc2kgU2VydmVySW50ZXJmYWNlLCByICptdXguUm91dGVyKSBodHRwLkhhbmRsZXIgewoJcmV0dXJuIEhhbmRsZXJXaXRoT3B0aW9ucyhzaSwgQ2hpU2VydmVyT3B0aW9uc3sKCQlCYXNlUm91dGVyOiByLAoJfSkKfQoKLy8gSGFuZGxlcldpdGhPcHRpb25zIGNyZWF0ZXMgaHR0cC5IYW5kbGVyIHdpdGggYWRkaXRpb25hbCBvcHRpb25zCmZ1bmMgSGFuZGxlcldpdGhPcHRpb25zKHNpIFNlcnZlckludGVyZmFjZSwgb3B0aW9ucyBDaGlTZXJ2ZXJPcHRpb25zKSBodHRwLkhhbmRsZXIgewoJciA6PSBvcHRpb25zLkJhc2VSb3V0ZXIKCgkvLyAuLi4KCglyLkdyb3VwKGZ1bmMociBjaGkuUm91dGVyKSB7CgkJci5HZXQob3B0aW9ucy5CYXNlVVJMKyIvcGluZyIsIHdyYXBwZXIuR2V0UGluZykKCX0pCgoJcmV0dXJuIHIKfQpgYGAKClRvIGltcGxlbWVudCB0aGlzIEhUVFAgc2VydmVyLCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBvdXIgW2BhcGkvaW1wbC5nb2BdKGV4YW1wbGVzL21pbmltYWwtc2VydmVyL2NoaS9hcGkvaW1wbC5nbyk6CgpgYGBnbwppbXBvcnQgKAoJImVuY29kaW5nL2pzb24iCgkibmV0L2h0dHAiCikKCi8vIG9wdGlvbmFsIGNvZGUgb21pdHRlZAoKdHlwZSBTZXJ2ZXIgc3RydWN0e30KCmZ1bmMgTmV3U2VydmVyKCkgU2VydmVyIHsKCXJldHVybiBTZXJ2ZXJ7fQp9CgovLyAoR0VUIC9waW5nKQpmdW5jIChTZXJ2ZXIpIEdldFBpbmcodyBodHRwLlJlc3BvbnNlV3JpdGVyLCByICpodHRwLlJlcXVlc3QpIHsKCXJlc3AgOj0gUG9uZ3sKCQlQaW5nOiAicG9uZyIsCgl9CgoJdy5Xcml0ZUhlYWRlcihodHRwLlN0YXR1c09LKQoJXyA9IGpzb24uTmV3RW5jb2Rlcih3KS5FbmNvZGUocmVzcCkKfQpgYGAKCk5vdyB3ZSd2ZSBnb3Qgb3VyIGltcGxlbWVudGF0aW9uLCB3ZSBjYW4gdGhlbiB3cml0ZSB0aGUgZm9sbG93aW5nIGNvZGUgdG8gd2lyZSBpdCB1cCBhbmQgZ2V0IGEgcnVubmluZyBzZXJ2ZXI6CgpgYGBnbwppbXBvcnQgKAoJImxvZyIKCSJuZXQvaHR0cCIKCgkiZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vb2FwaS1jb2RlZ2VuL3YyL2V4YW1wbGVzL21pbmltYWwtc2VydmVyL2NoaS9hcGkiCgkiZ2l0aHViLmNvbS9nby1jaGkvY2hpL3Y1IgopCgpmdW5jIG1haW4oKSB7CgkvLyBjcmVhdGUgYSB0eXBlIHRoYXQgc2F0aXNmaWVzIHRoZSBgYXBpLlNlcnZlckludGVyZmFjZWAsIHdoaWNoIGNvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIG9mIGV2ZXJ5IG9wZXJhdGlvbiBmcm9tIHRoZSBnZW5lcmF0ZWQgY29kZQoJc2VydmVyIDo9IGFwaS5OZXdTZXJ2ZXIoKQoKCXIgOj0gY2hpLk5ld011eCgpCgoJLy8gZ2V0IGFuIGBodHRwLkhhbmRsZXJgIHRoYXQgd2UgY2FuIHVzZQoJaCA6PSBhcGkuSGFuZGxlckZyb21NdXgoc2VydmVyLCByKQoKCXMgOj0gJmh0dHAuU2VydmVyewoJCUhhbmRsZXI6IGgsCgkJQWRkcjogICAgIjAuMC4wLjA6ODA4MCIsCgl9CgoJLy8gQW5kIHdlIHNlcnZlIEhUVFAgdW50aWwgdGhlIHdvcmxkIGVuZHMuCglsb2cuRmF0YWwocy5MaXN0ZW5BbmRTZXJ2ZSgpKQp9CmBgYAoKPiBbIU5PVEVdCj4gVGhpcyBkb2Vzbid0IGluY2x1ZGUgW3ZhbGlkYXRpb24gb2YgaW5jb21pbmcgcmVxdWVzdHNdKCNyZXF1ZXN0cmVzcG9uc2UtdmFsaWRhdGlvbi1taWRkbGV3YXJlKS4KCiMjIyBnb3JpbGxhL211eAo8YSBuYW1lPSJpbXBsLWdvcmlsbGFtdXgiPjwvYT4KCkZvciBpbnN0YW5jZSwgbGV0J3MgdGFrZSB0aGlzIHN0cmFpZ2h0Zm9yd2FyZCBzcGVjaWZpY2F0aW9uOgoKYGBgeWFtbApvcGVuYXBpOiAiMy4wLjAiCmluZm86CiAgdmVyc2lvbjogMS4wLjAKICB0aXRsZTogTWluaW1hbCBwaW5nIEFQSSBzZXJ2ZXIKcGF0aHM6CiAgL3Bpbmc6CiAgICBnZXQ6CiAgICAgIHJlc3BvbnNlczoKICAgICAgICAnMjAwJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBwZXQgcmVzcG9uc2UKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL1BvbmcnCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgICMgYmFzZSB0eXBlcwogICAgUG9uZzoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gcGluZwogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIHBpbmc6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgIGV4YW1wbGU6IHBvbmcKYGBgCgpUaGlzIHRoZW4gZ2VuZXJhdGVzIGNvZGUgc3VjaCBhczoKCmBgYGdvCi8vIFBvbmcgZGVmaW5lcyBtb2RlbCBmb3IgUG9uZy4KdHlwZSBQb25nIHN0cnVjdCB7CglQaW5nIHN0cmluZyBganNvbjoicGluZyJgCn0KCi8vIFNlcnZlckludGVyZmFjZSByZXByZXNlbnRzIGFsbCBzZXJ2ZXIgaGFuZGxlcnMuCnR5cGUgU2VydmVySW50ZXJmYWNlIGludGVyZmFjZSB7CgoJLy8gKEdFVCAvcGluZykKCUdldFBpbmcodyBodHRwLlJlc3BvbnNlV3JpdGVyLCByICpodHRwLlJlcXVlc3QpCn0KCi8vIEhhbmRsZXJGcm9tTXV4IGNyZWF0ZXMgaHR0cC5IYW5kbGVyIHdpdGggcm91dGluZyBtYXRjaGluZyBPcGVuQVBJIHNwZWMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIG11eC4KZnVuYyBIYW5kbGVyRnJvbU11eChzaSBTZXJ2ZXJJbnRlcmZhY2UsIHIgKm11eC5Sb3V0ZXIpIGh0dHAuSGFuZGxlciB7CglyZXR1cm4gSGFuZGxlcldpdGhPcHRpb25zKHNpLCBHb3JpbGxhU2VydmVyT3B0aW9uc3sKCQlCYXNlUm91dGVyOiByLAoJfSkKfQoKLy8gSGFuZGxlcldpdGhPcHRpb25zIGNyZWF0ZXMgaHR0cC5IYW5kbGVyIHdpdGggYWRkaXRpb25hbCBvcHRpb25zCmZ1bmMgSGFuZGxlcldpdGhPcHRpb25zKHNpIFNlcnZlckludGVyZmFjZSwgb3B0aW9ucyBHb3JpbGxhU2VydmVyT3B0aW9ucykgaHR0cC5IYW5kbGVyIHsKCXIgOj0gb3B0aW9ucy5CYXNlUm91dGVyCgoJLy8gLi4uCgoJci5IYW5kbGVGdW5jKG9wdGlvbnMuQmFzZVVSTCsiL3BpbmciLCB3cmFwcGVyLkdldFBpbmcpLk1ldGhvZHMoIkdFVCIpCgoJcmV0dXJuIHIKfQpgYGAKClRvIGltcGxlbWVudCB0aGlzIEhUVFAgc2VydmVyLCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBvdXIgW2BhcGkvaW1wbC5nb2BdKGV4YW1wbGVzL21pbmltYWwtc2VydmVyL2dvcmlsbGFtdXgvYXBpL2ltcGwuZ28pOgoKYGBgZ28KaW1wb3J0ICgKCSJlbmNvZGluZy9qc29uIgoJIm5ldC9odHRwIgopCgovLyBvcHRpb25hbCBjb2RlIG9taXR0ZWQKCnR5cGUgU2VydmVyIHN0cnVjdHt9CgpmdW5jIE5ld1NlcnZlcigpIFNlcnZlciB7CglyZXR1cm4gU2VydmVye30KfQoKLy8gKEdFVCAvcGluZykKZnVuYyAoU2VydmVyKSBHZXRQaW5nKHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0KSB7CglyZXNwIDo9IFBvbmd7CgkJUGluZzogInBvbmciLAoJfQoKCXcuV3JpdGVIZWFkZXIoaHR0cC5TdGF0dXNPSykKCV8gPSBqc29uLk5ld0VuY29kZXIodykuRW5jb2RlKHJlc3ApCn0KYGBgCgpOb3cgd2UndmUgZ290IG91ciBpbXBsZW1lbnRhdGlvbiwgd2UgY2FuIHRoZW4gd3JpdGUgdGhlIGZvbGxvd2luZyBjb2RlIHRvIHdpcmUgaXQgdXAgYW5kIGdldCBhIHJ1bm5pbmcgc2VydmVyOgoKYGBgZ28KaW1wb3J0ICgKCSJsb2ciCgkibmV0L2h0dHAiCgoJImdpdGh1Yi5jb20vb2FwaS1jb2RlZ2VuL29hcGktY29kZWdlbi92Mi9leGFtcGxlcy9taW5pbWFsLXNlcnZlci9nb3JpbGxhbXV4L2FwaSIKCSJnaXRodWIuY29tL2dvcmlsbGEvbXV4IgopCgpmdW5jIG1haW4oKSB7CgkvLyBjcmVhdGUgYSB0eXBlIHRoYXQgc2F0aXNmaWVzIHRoZSBgYXBpLlNlcnZlckludGVyZmFjZWAsIHdoaWNoIGNvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIG9mIGV2ZXJ5IG9wZXJhdGlvbiBmcm9tIHRoZSBnZW5lcmF0ZWQgY29kZQoJc2VydmVyIDo9IGFwaS5OZXdTZXJ2ZXIoKQoKCXIgOj0gbXV4Lk5ld1JvdXRlcigpCgoJLy8gZ2V0IGFuIGBodHRwLkhhbmRsZXJgIHRoYXQgd2UgY2FuIHVzZQoJaCA6PSBhcGkuSGFuZGxlckZyb21NdXgoc2VydmVyLCByKQoKCXMgOj0gJmh0dHAuU2VydmVyewoJCUhhbmRsZXI6IGgsCgkJQWRkcjogICAgIjAuMC4wLjA6ODA4MCIsCgl9CgoJLy8gQW5kIHdlIHNlcnZlIEhUVFAgdW50aWwgdGhlIHdvcmxkIGVuZHMuCglsb2cuRmF0YWwocy5MaXN0ZW5BbmRTZXJ2ZSgpKQp9CmBgYAoKPiBbIU5PVEVdCj4gVGhpcyBkb2Vzbid0IGluY2x1ZGUgW3ZhbGlkYXRpb24gb2YgaW5jb21pbmcgcmVxdWVzdHNdKCNyZXF1ZXN0cmVzcG9uc2UtdmFsaWRhdGlvbi1taWRkbGV3YXJlKS4KCiMjIyBFY2hvIHNlcnZlcgo8YSBuYW1lPSJpbXBsLWVjaG8iPjwvYT4KCkZvciBpbnN0YW5jZSwgbGV0J3MgdGFrZSB0aGlzIHN0cmFpZ2h0Zm9yd2FyZCBzcGVjaWZpY2F0aW9uOgoKYGBgeWFtbApvcGVuYXBpOiAiMy4wLjAiCmluZm86CiAgdmVyc2lvbjogMS4wLjAKICB0aXRsZTogTWluaW1hbCBwaW5nIEFQSSBzZXJ2ZXIKcGF0aHM6CiAgL3Bpbmc6CiAgICBnZXQ6CiAgICAgIHJlc3BvbnNlczoKICAgICAgICAnMjAwJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBwZXQgcmVzcG9uc2UKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL1BvbmcnCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgICMgYmFzZSB0eXBlcwogICAgUG9uZzoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gcGluZwogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIHBpbmc6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgIGV4YW1wbGU6IHBvbmcKYGBgCgpUaGlzIHRoZW4gZ2VuZXJhdGVzIGNvZGUgc3VjaCBhczoKCmBgYGdvCi8vIFBvbmcgZGVmaW5lcyBtb2RlbCBmb3IgUG9uZy4KdHlwZSBQb25nIHN0cnVjdCB7CglQaW5nIHN0cmluZyBganNvbjoicGluZyJgCn0KCi8vIFNlcnZlckludGVyZmFjZSByZXByZXNlbnRzIGFsbCBzZXJ2ZXIgaGFuZGxlcnMuCnR5cGUgU2VydmVySW50ZXJmYWNlIGludGVyZmFjZSB7CgoJLy8gKEdFVCAvcGluZykKCUdldFBpbmcoY3R4IGVjaG8uQ29udGV4dCkgZXJyb3IKfQoKLy8gVGhpcyBpcyBhIHNpbXBsZSBpbnRlcmZhY2Ugd2hpY2ggc3BlY2lmaWVzIGVjaG8uUm91dGUgYWRkaXRpb24gZnVuY3Rpb25zIHdoaWNoCi8vIGFyZSBwcmVzZW50IG9uIGJvdGggZWNoby5FY2hvIGFuZCBlY2hvLkdyb3VwLCBzaW5jZSB3ZSB3YW50IHRvIGFsbG93IHVzaW5nCi8vIGVpdGhlciBvZiB0aGVtIGZvciBwYXRoIHJlZ2lzdHJhdGlvbgp0eXBlIEVjaG9Sb3V0ZXIgaW50ZXJmYWNlIHsKCS8vIC4uLgoJR0VUKHBhdGggc3RyaW5nLCBoIGVjaG8uSGFuZGxlckZ1bmMsIG0gLi4uZWNoby5NaWRkbGV3YXJlRnVuYykgKmVjaG8uUm91dGUKCS8vIC4uLgp9CgovLyBSZWdpc3RlckhhbmRsZXJzIGFkZHMgZWFjaCBzZXJ2ZXIgcm91dGUgdG8gdGhlIEVjaG9Sb3V0ZXIuCmZ1bmMgUmVnaXN0ZXJIYW5kbGVycyhyb3V0ZXIgRWNob1JvdXRlciwgc2kgU2VydmVySW50ZXJmYWNlKSB7CglSZWdpc3RlckhhbmRsZXJzV2l0aEJhc2VVUkwocm91dGVyLCBzaSwgIiIpCn0KCi8vIFJlZ2lzdGVycyBoYW5kbGVycywgYW5kIHByZXBlbmRzIEJhc2VVUkwgdG8gdGhlIHBhdGhzLCBzbyB0aGF0IHRoZSBwYXRocwovLyBjYW4gYmUgc2VydmVkIHVuZGVyIGEgcHJlZml4LgpmdW5jIFJlZ2lzdGVySGFuZGxlcnNXaXRoQmFzZVVSTChyb3V0ZXIgRWNob1JvdXRlciwgc2kgU2VydmVySW50ZXJmYWNlLCBiYXNlVVJMIHN0cmluZykgewoJLy8gLi4uCgoJcm91dGVyLkdFVChiYXNlVVJMKyIvcGluZyIsIHdyYXBwZXIuR2V0UGluZykKCn0KYGBgCgpUbyBpbXBsZW1lbnQgdGhpcyBIVFRQIHNlcnZlciwgd2UgbmVlZCB0byB3cml0ZSB0aGUgZm9sbG93aW5nIGNvZGUgaW4gb3VyIFtgYXBpL2ltcGwuZ29gXShleGFtcGxlcy9taW5pbWFsLXNlcnZlci9lY2hvL2FwaS9pbXBsLmdvKToKCmBgYGdvCmltcG9ydCAoCgkibmV0L2h0dHAiCgoJImdpdGh1Yi5jb20vbGFic3RhY2svZWNoby92NCIKKQoKLy8gb3B0aW9uYWwgY29kZSBvbWl0dGVkCgp0eXBlIFNlcnZlciBzdHJ1Y3R7fQoKZnVuYyBOZXdTZXJ2ZXIoKSBTZXJ2ZXIgewoJcmV0dXJuIFNlcnZlcnt9Cn0KCi8vIChHRVQgL3BpbmcpCmZ1bmMgKFNlcnZlcikgR2V0UGluZyhjdHggZWNoby5Db250ZXh0KSBlcnJvciB7CglyZXNwIDo9IFBvbmd7CgkJUGluZzogInBvbmciLAoJfQoKCXJldHVybiBjdHguSlNPTihodHRwLlN0YXR1c09LLCByZXNwKQp9CmBgYAoKTm93IHdlJ3ZlIGdvdCBvdXIgaW1wbGVtZW50YXRpb24sIHdlIGNhbiB0aGVuIHdyaXRlIHRoZSBmb2xsb3dpbmcgY29kZSB0byB3aXJlIGl0IHVwIGFuZCBnZXQgYSBydW5uaW5nIHNlcnZlcjoKCmBgYGdvCmltcG9ydCAoCgkibG9nIgoKCSJnaXRodWIuY29tL29hcGktY29kZWdlbi9vYXBpLWNvZGVnZW4vdjIvZXhhbXBsZXMvbWluaW1hbC1zZXJ2ZXIvZWNoby9hcGkiCgkiZ2l0aHViLmNvbS9sYWJzdGFjay9lY2hvL3Y0IgopCgpmdW5jIG1haW4oKSB7CgkvLyBjcmVhdGUgYSB0eXBlIHRoYXQgc2F0aXNmaWVzIHRoZSBgYXBpLlNlcnZlckludGVyZmFjZWAsIHdoaWNoIGNvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIG9mIGV2ZXJ5IG9wZXJhdGlvbiBmcm9tIHRoZSBnZW5lcmF0ZWQgY29kZQoJc2VydmVyIDo9IGFwaS5OZXdTZXJ2ZXIoKQoKCWUgOj0gZWNoby5OZXcoKQoKCWFwaS5SZWdpc3RlckhhbmRsZXJzKGUsIHNlcnZlcikKCgkvLyBBbmQgd2Ugc2VydmUgSFRUUCB1bnRpbCB0aGUgd29ybGQgZW5kcy4KCWxvZy5GYXRhbChlLlN0YXJ0KCIwLjAuMC4wOjgwODAiKSkKfQpgYGAKCj4gWyFOT1RFXQo+IFRoaXMgZG9lc24ndCBpbmNsdWRlIFt2YWxpZGF0aW9uIG9mIGluY29taW5nIHJlcXVlc3RzXSgjcmVxdWVzdHJlc3BvbnNlLXZhbGlkYXRpb24tbWlkZGxld2FyZSkuCgojIyMgRmliZXIgc2VydmVyCjxhIG5hbWU9ImltcGwtZmliZXIiPjwvYT4KCkZvciBpbnN0YW5jZSwgbGV0J3MgdGFrZSB0aGlzIHN0cmFpZ2h0Zm9yd2FyZCBzcGVjaWZpY2F0aW9uOgoKYGBgeWFtbApvcGVuYXBpOiAiMy4wLjAiCmluZm86CiAgdmVyc2lvbjogMS4wLjAKICB0aXRsZTogTWluaW1hbCBwaW5nIEFQSSBzZXJ2ZXIKcGF0aHM6CiAgL3Bpbmc6CiAgICBnZXQ6CiAgICAgIHJlc3BvbnNlczoKICAgICAgICAnMjAwJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBwZXQgcmVzcG9uc2UKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL1BvbmcnCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgICMgYmFzZSB0eXBlcwogICAgUG9uZzoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gcGluZwogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIHBpbmc6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgIGV4YW1wbGU6IHBvbmcKYGBgCgpUaGlzIHRoZW4gZ2VuZXJhdGVzIGNvZGUgc3VjaCBhczoKCmBgYGdvCi8vIFBvbmcgZGVmaW5lcyBtb2RlbCBmb3IgUG9uZy4KdHlwZSBQb25nIHN0cnVjdCB7CglQaW5nIHN0cmluZyBganNvbjoicGluZyJgCn0KCi8vIFNlcnZlckludGVyZmFjZSByZXByZXNlbnRzIGFsbCBzZXJ2ZXIgaGFuZGxlcnMuCnR5cGUgU2VydmVySW50ZXJmYWNlIGludGVyZmFjZSB7CgoJLy8gKEdFVCAvcGluZykKCUdldFBpbmcoYyAqZmliZXIuQ3R4KSBlcnJvcgp9CgovLyBSZWdpc3RlckhhbmRsZXJzIGNyZWF0ZXMgaHR0cC5IYW5kbGVyIHdpdGggcm91dGluZyBtYXRjaGluZyBPcGVuQVBJIHNwZWMuCmZ1bmMgUmVnaXN0ZXJIYW5kbGVycyhyb3V0ZXIgZmliZXIuUm91dGVyLCBzaSBTZXJ2ZXJJbnRlcmZhY2UpIHsKCVJlZ2lzdGVySGFuZGxlcnNXaXRoT3B0aW9ucyhyb3V0ZXIsIHNpLCBGaWJlclNlcnZlck9wdGlvbnN7fSkKfQoKLy8gUmVnaXN0ZXJIYW5kbGVyc1dpdGhPcHRpb25zIGNyZWF0ZXMgaHR0cC5IYW5kbGVyIHdpdGggYWRkaXRpb25hbCBvcHRpb25zCmZ1bmMgUmVnaXN0ZXJIYW5kbGVyc1dpdGhPcHRpb25zKHJvdXRlciBmaWJlci5Sb3V0ZXIsIHNpIFNlcnZlckludGVyZmFjZSwgb3B0aW9ucyBGaWJlclNlcnZlck9wdGlvbnMpIHsKCS8vIC4uLgoKCXJvdXRlci5HZXQob3B0aW9ucy5CYXNlVVJMKyIvcGluZyIsIHdyYXBwZXIuR2V0UGluZykKfQpgYGAKClRvIGltcGxlbWVudCB0aGlzIEhUVFAgc2VydmVyLCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBvdXIgW2BhcGkvaW1wbC5nb2BdKGV4YW1wbGVzL21pbmltYWwtc2VydmVyL2ZpYmVyL2FwaS9pbXBsLmdvKToKCmBgYGdvCmltcG9ydCAoCgkibmV0L2h0dHAiCgoJImdpdGh1Yi5jb20vZ29maWJlci9maWJlci92MiIKKQoKLy8gZW5zdXJlIHRoYXQgd2UndmUgY29uZm9ybWVkIHRvIHRoZSBgU2VydmVySW50ZXJmYWNlYCB3aXRoIGEgY29tcGlsZS10aW1lIGNoZWNrCnZhciBfIFNlcnZlckludGVyZmFjZSA9ICgqU2VydmVyKShuaWwpCgp0eXBlIFNlcnZlciBzdHJ1Y3R7fQoKZnVuYyBOZXdTZXJ2ZXIoKSBTZXJ2ZXIgewoJcmV0dXJuIFNlcnZlcnt9Cn0KCi8vIChHRVQgL3BpbmcpCmZ1bmMgKFNlcnZlcikgR2V0UGluZyhjdHggKmZpYmVyLkN0eCkgZXJyb3IgewoJcmVzcCA6PSBQb25newoJCVBpbmc6ICJwb25nIiwKCX0KCglyZXR1cm4gY3R4LgoJCVN0YXR1cyhodHRwLlN0YXR1c09LKS4KCQlKU09OKHJlc3ApCn0KYGBgCgpOb3cgd2UndmUgZ290IG91ciBpbXBsZW1lbnRhdGlvbiwgd2UgY2FuIHRoZW4gd3JpdGUgdGhlIGZvbGxvd2luZyBjb2RlIHRvIHdpcmUgaXQgdXAgYW5kIGdldCBhIHJ1bm5pbmcgc2VydmVyOgoKYGBgZ28KaW1wb3J0ICgKCSJsb2ciCgoJImdpdGh1Yi5jb20vb2FwaS1jb2RlZ2VuL29hcGktY29kZWdlbi92Mi9leGFtcGxlcy9taW5pbWFsLXNlcnZlci9maWJlci9hcGkiCgkiZ2l0aHViLmNvbS9nb2ZpYmVyL2ZpYmVyL3YyIgopCgpmdW5jIG1haW4oKSB7CgkvLyBjcmVhdGUgYSB0eXBlIHRoYXQgc2F0aXNmaWVzIHRoZSBgYXBpLlNlcnZlckludGVyZmFjZWAsIHdoaWNoIGNvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIG9mIGV2ZXJ5IG9wZXJhdGlvbiBmcm9tIHRoZSBnZW5lcmF0ZWQgY29kZQoJc2VydmVyIDo9IGFwaS5OZXdTZXJ2ZXIoKQoKCWFwcCA6PSBmaWJlci5OZXcoKQoKCWFwaS5SZWdpc3RlckhhbmRsZXJzKGFwcCwgc2VydmVyKQoKCS8vIEFuZCB3ZSBzZXJ2ZSBIVFRQIHVudGlsIHRoZSB3b3JsZCBlbmRzLgoJbG9nLkZhdGFsKGFwcC5MaXN0ZW4oIjAuMC4wLjA6ODA4MCIpKQp9CmBgYAoKPiBbIU5PVEVdCj4gVGhpcyBkb2Vzbid0IGluY2x1ZGUgW3ZhbGlkYXRpb24gb2YgaW5jb21pbmcgcmVxdWVzdHNdKCNyZXF1ZXN0cmVzcG9uc2UtdmFsaWRhdGlvbi1taWRkbGV3YXJlKS4KCiMjIyBHaW4gc2VydmVyCjxhIG5hbWU9ImltcGwtZ2luIj48L2E+CgpGb3IgaW5zdGFuY2UsIGxldCdzIHRha2UgdGhpcyBzdHJhaWdodGZvcndhcmQgc3BlY2lmaWNhdGlvbjoKCmBgYHlhbWwKb3BlbmFwaTogIjMuMC4wIgppbmZvOgogIHZlcnNpb246IDEuMC4wCiAgdGl0bGU6IE1pbmltYWwgcGluZyBBUEkgc2VydmVyCnBhdGhzOgogIC9waW5nOgogICAgZ2V0OgogICAgICByZXNwb25zZXM6CiAgICAgICAgJzIwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogcGV0IHJlc3BvbnNlCiAgICAgICAgICBjb250ZW50OgogICAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9Qb25nJwpjb21wb25lbnRzOgogIHNjaGVtYXM6CiAgICAjIGJhc2UgdHlwZXMKICAgIFBvbmc6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICByZXF1aXJlZDoKICAgICAgICAtIHBpbmcKICAgICAgcHJvcGVydGllczoKICAgICAgICBwaW5nOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICBleGFtcGxlOiBwb25nCmBgYAoKVGhpcyB0aGVuIGdlbmVyYXRlcyBjb2RlIHN1Y2ggYXM6CgpgYGBnbwovLyBQb25nIGRlZmluZXMgbW9kZWwgZm9yIFBvbmcuCnR5cGUgUG9uZyBzdHJ1Y3QgewoJUGluZyBzdHJpbmcgYGpzb246InBpbmciYAp9CgovLyBTZXJ2ZXJJbnRlcmZhY2UgcmVwcmVzZW50cyBhbGwgc2VydmVyIGhhbmRsZXJzLgp0eXBlIFNlcnZlckludGVyZmFjZSBpbnRlcmZhY2UgewoKCS8vIChHRVQgL3BpbmcpCglHZXRQaW5nKGMgKmdpbi5Db250ZXh0KQp9CgovLyBSZWdpc3RlckhhbmRsZXJzIGNyZWF0ZXMgaHR0cC5IYW5kbGVyIHdpdGggcm91dGluZyBtYXRjaGluZyBPcGVuQVBJIHNwZWMuCmZ1bmMgUmVnaXN0ZXJIYW5kbGVycyhyb3V0ZXIgZ2luLklSb3V0ZXIsIHNpIFNlcnZlckludGVyZmFjZSkgewoJUmVnaXN0ZXJIYW5kbGVyc1dpdGhPcHRpb25zKHJvdXRlciwgc2ksIEdpblNlcnZlck9wdGlvbnN7fSkKfQoKLy8gUmVnaXN0ZXJIYW5kbGVyc1dpdGhPcHRpb25zIGNyZWF0ZXMgaHR0cC5IYW5kbGVyIHdpdGggYWRkaXRpb25hbCBvcHRpb25zCmZ1bmMgUmVnaXN0ZXJIYW5kbGVyc1dpdGhPcHRpb25zKHJvdXRlciBnaW4uSVJvdXRlciwgc2kgU2VydmVySW50ZXJmYWNlLCBvcHRpb25zIEdpblNlcnZlck9wdGlvbnMpIHsKCS8vIC4uLgoKCXJvdXRlci5HRVQob3B0aW9ucy5CYXNlVVJMKyIvcGluZyIsIHdyYXBwZXIuR2V0UGluZykKfQpgYGAKClRvIGltcGxlbWVudCB0aGlzIEhUVFAgc2VydmVyLCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBvdXIgW2BhcGkvaW1wbC5nb2BdKGV4YW1wbGVzL21pbmltYWwtc2VydmVyL2dvcmlsbGFtdXgvYXBpL2ltcGwuZ28pOgoKYGBgZ28KaW1wb3J0ICgKCSJuZXQvaHR0cCIKCgkiZ2l0aHViLmNvbS9naW4tZ29uaWMvZ2luIgopCgovLyBvcHRpb25hbCBjb2RlIG9taXR0ZWQKCnR5cGUgU2VydmVyIHN0cnVjdHt9CgpmdW5jIE5ld1NlcnZlcigpIFNlcnZlciB7CglyZXR1cm4gU2VydmVye30KfQoKLy8gKEdFVCAvcGluZykKZnVuYyAoU2VydmVyKSBHZXRQaW5nKGN0eCAqZ2luLkNvbnRleHQpIHsKCXJlc3AgOj0gUG9uZ3sKCQlQaW5nOiAicG9uZyIsCgl9CgoJY3R4LkpTT04oaHR0cC5TdGF0dXNPSywgcmVzcCkKfQpgYGAKCk5vdyB3ZSd2ZSBnb3Qgb3VyIGltcGxlbWVudGF0aW9uLCB3ZSBjYW4gdGhlbiB3cml0ZSB0aGUgZm9sbG93aW5nIGNvZGUgdG8gd2lyZSBpdCB1cCBhbmQgZ2V0IGEgcnVubmluZyBzZXJ2ZXI6CgpgYGBnbwppbXBvcnQgKAoJImxvZyIKCSJuZXQvaHR0cCIKCgkiZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vb2FwaS1jb2RlZ2VuL3YyL2V4YW1wbGVzL21pbmltYWwtc2VydmVyL2dpbi9hcGkiCgkiZ2l0aHViLmNvbS9naW4tZ29uaWMvZ2luIgopCgpmdW5jIG1haW4oKSB7CgkvLyBjcmVhdGUgYSB0eXBlIHRoYXQgc2F0aXNmaWVzIHRoZSBgYXBpLlNlcnZlckludGVyZmFjZWAsIHdoaWNoIGNvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIG9mIGV2ZXJ5IG9wZXJhdGlvbiBmcm9tIHRoZSBnZW5lcmF0ZWQgY29kZQoJc2VydmVyIDo9IGFwaS5OZXdTZXJ2ZXIoKQoKCXIgOj0gZ2luLkRlZmF1bHQoKQoKCWFwaS5SZWdpc3RlckhhbmRsZXJzKHIsIHNlcnZlcikKCgkvLyBBbmQgd2Ugc2VydmUgSFRUUCB1bnRpbCB0aGUgd29ybGQgZW5kcy4KCglzIDo9ICZodHRwLlNlcnZlcnsKCQlIYW5kbGVyOiByLAoJCUFkZHI6ICAgICIwLjAuMC4wOjgwODAiLAoJfQoKCS8vIEFuZCB3ZSBzZXJ2ZSBIVFRQIHVudGlsIHRoZSB3b3JsZCBlbmRzLgoJbG9nLkZhdGFsKHMuTGlzdGVuQW5kU2VydmUoKSkKfQpgYGAKCj4gWyFOT1RFXQo+IFRoaXMgZG9lc24ndCBpbmNsdWRlIFt2YWxpZGF0aW9uIG9mIGluY29taW5nIHJlcXVlc3RzXSgjcmVxdWVzdHJlc3BvbnNlLXZhbGlkYXRpb24tbWlkZGxld2FyZSkuCgojIyMgSXJpcyBzZXJ2ZXIKPGEgbmFtZT0iaW1wbC1pcmlzIj48L2E+CgpGb3IgaW5zdGFuY2UsIGxldCdzIHRha2UgdGhpcyBzdHJhaWdodGZvcndhcmQgc3BlY2lmaWNhdGlvbjoKCmBgYHlhbWwKb3BlbmFwaTogIjMuMC4wIgppbmZvOgogIHZlcnNpb246IDEuMC4wCiAgdGl0bGU6IE1pbmltYWwgcGluZyBBUEkgc2VydmVyCnBhdGhzOgogIC9waW5nOgogICAgZ2V0OgogICAgICByZXNwb25zZXM6CiAgICAgICAgJzIwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogcGV0IHJlc3BvbnNlCiAgICAgICAgICBjb250ZW50OgogICAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9Qb25nJwpjb21wb25lbnRzOgogIHNjaGVtYXM6CiAgICAjIGJhc2UgdHlwZXMKICAgIFBvbmc6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICByZXF1aXJlZDoKICAgICAgICAtIHBpbmcKICAgICAgcHJvcGVydGllczoKICAgICAgICBwaW5nOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICBleGFtcGxlOiBwb25nCmBgYAoKVGhpcyB0aGVuIGdlbmVyYXRlcyBjb2RlIHN1Y2ggYXM6CgpgYGBnbwovLyBQb25nIGRlZmluZXMgbW9kZWwgZm9yIFBvbmcuCnR5cGUgUG9uZyBzdHJ1Y3QgewoJUGluZyBzdHJpbmcgYGpzb246InBpbmciYAp9CgovLyBTZXJ2ZXJJbnRlcmZhY2UgcmVwcmVzZW50cyBhbGwgc2VydmVyIGhhbmRsZXJzLgp0eXBlIFNlcnZlckludGVyZmFjZSBpbnRlcmZhY2UgewoKCS8vIChHRVQgL3BpbmcpCglHZXRQaW5nKGN0eCBpcmlzLkNvbnRleHQpCn0KCi8vIFJlZ2lzdGVySGFuZGxlcnMgY3JlYXRlcyBodHRwLkhhbmRsZXIgd2l0aCByb3V0aW5nIG1hdGNoaW5nIE9wZW5BUEkgc3BlYy4KZnVuYyBSZWdpc3RlckhhbmRsZXJzKHJvdXRlciAqaXJpcy5BcHBsaWNhdGlvbiwgc2kgU2VydmVySW50ZXJmYWNlKSB7CglSZWdpc3RlckhhbmRsZXJzV2l0aE9wdGlvbnMocm91dGVyLCBzaSwgSXJpc1NlcnZlck9wdGlvbnN7fSkKfQoKLy8gUmVnaXN0ZXJIYW5kbGVyc1dpdGhPcHRpb25zIGNyZWF0ZXMgaHR0cC5IYW5kbGVyIHdpdGggYWRkaXRpb25hbCBvcHRpb25zCmZ1bmMgUmVnaXN0ZXJIYW5kbGVyc1dpdGhPcHRpb25zKHJvdXRlciAqaXJpcy5BcHBsaWNhdGlvbiwgc2kgU2VydmVySW50ZXJmYWNlLCBvcHRpb25zIElyaXNTZXJ2ZXJPcHRpb25zKSB7CgkvLyAuLi4KCglyb3V0ZXIuR2V0KG9wdGlvbnMuQmFzZVVSTCsiL3BpbmciLCB3cmFwcGVyLkdldFBpbmcpCgoJcm91dGVyLkJ1aWxkKCkKfQpgYGAKClRvIGltcGxlbWVudCB0aGlzIEhUVFAgc2VydmVyLCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBvdXIgW2BhcGkvaW1wbC5nb2BdKGV4YW1wbGVzL21pbmltYWwtc2VydmVyL2dvcmlsbGFtdXgvYXBpL2ltcGwuZ28pOgoKYGBgZ28KaW1wb3J0ICgKCSJuZXQvaHR0cCIKCgkiZ2l0aHViLmNvbS9rYXRhcmFzL2lyaXMvdjEyIgopCgovLyBvcHRpb25hbCBjb2RlIG9taXR0ZWQKCnR5cGUgU2VydmVyIHN0cnVjdHt9CgpmdW5jIE5ld1NlcnZlcigpIFNlcnZlciB7CglyZXR1cm4gU2VydmVye30KfQoKLy8gKEdFVCAvcGluZykKZnVuYyAoU2VydmVyKSBHZXRQaW5nKGN0eCBpcmlzLkNvbnRleHQpIHsKCXJlc3AgOj0gUG9uZ3sKCQlQaW5nOiAicG9uZyIsCgl9CgoJY3R4LlN0YXR1c0NvZGUoaHR0cC5TdGF0dXNPSykKCV8gPSBjdHguSlNPTihyZXNwKQp9CmBgYAoKTm93IHdlJ3ZlIGdvdCBvdXIgaW1wbGVtZW50YXRpb24sIHdlIGNhbiB0aGVuIHdyaXRlIHRoZSBmb2xsb3dpbmcgY29kZSB0byB3aXJlIGl0IHVwIGFuZCBnZXQgYSBydW5uaW5nIHNlcnZlcjoKCmBgYGdvCmltcG9ydCAoCgkibG9nIgoKCSJnaXRodWIuY29tL29hcGktY29kZWdlbi9vYXBpLWNvZGVnZW4vdjIvZXhhbXBsZXMvbWluaW1hbC1zZXJ2ZXIvaXJpcy9hcGkiCgkiZ2l0aHViLmNvbS9rYXRhcmFzL2lyaXMvdjEyIgopCgpmdW5jIG1haW4oKSB7CgkvLyBjcmVhdGUgYSB0eXBlIHRoYXQgc2F0aXNmaWVzIHRoZSBgYXBpLlNlcnZlckludGVyZmFjZWAsIHdoaWNoIGNvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIG9mIGV2ZXJ5IG9wZXJhdGlvbiBmcm9tIHRoZSBnZW5lcmF0ZWQgY29kZQoJc2VydmVyIDo9IGFwaS5OZXdTZXJ2ZXIoKQoKCWkgOj0gaXJpcy5EZWZhdWx0KCkKCglhcGkuUmVnaXN0ZXJIYW5kbGVycyhpLCBzZXJ2ZXIpCgoJLy8gQW5kIHdlIHNlcnZlIEhUVFAgdW50aWwgdGhlIHdvcmxkIGVuZHMuCglsb2cuRmF0YWwoaS5MaXN0ZW4oIjAuMC4wLjA6ODA4MCIpKQp9CmBgYAoKPiBbIU5PVEVdCj4gVGhpcyBkb2Vzbid0IGluY2x1ZGUgW3ZhbGlkYXRpb24gb2YgaW5jb21pbmcgcmVxdWVzdHNdKCNyZXF1ZXN0cmVzcG9uc2UtdmFsaWRhdGlvbi1taWRkbGV3YXJlKS4KCiMjIyBTdHJpY3Qgc2VydmVyCgpgb2FwaS1jb2RlZ2VuYCBhbHNvIHN1cHBvcnRzIGdlbmVyYXRpbmcgYSBzZXJ2ZXIgdGhhdCBpcyBtdWNoIG1vcmUgc3RyaWN0IHdpdGggdGhlIGNvbnRyYWN0IHRoYXQgdGhlIGltcGxlbWVudGVyIHJlcXVpcmVzLCBhbmQgdGFrZXMgaW5zcGlyYXRpb24gZnJvbSBzZXJ2ZXItc2lkZSBjb2RlIGdlbmVyYXRpb24gZm9yIFJQQyBzZXJ2ZXJzLgoKVGhpcyB0YWtlcyB0aGUgYm9pbGVycGxhdGUgcmVkdWN0aW9uIGZyb20gdGhlIG5vbi1zdHJpY3Qgc2VydmVycyBhbmQgYWRkcyBhZGRpdGlvbmFsIGJvaWxlcnBsYXRlIHJlZHVjdGlvbiwgYWxsb3dpbmcgeW91IHRvIG1ha2UgdGhlIGZvbGxvd2luZyBjaGFuZ2VzIHRvIHlvdXIgZnVuY3Rpb24gc2lnbmF0dXJlczoKCmBgYGRpZmYKLUZpbmRQZXRzKHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0LCBwYXJhbXMgRmluZFBldHNQYXJhbXMpCitGaW5kUGV0cyhjdHggY29udGV4dC5Db250ZXh0LCByZXF1ZXN0IEZpbmRQZXRzUmVxdWVzdE9iamVjdCkgKEZpbmRQZXRzUmVzcG9uc2VPYmplY3QsIGVycm9yKQpgYGAKClRoaXMgaXMgdGhlIGhpZ2hlc3QgbGV2ZWwgb2Ygc3RyaWN0bmVzcyB0aGF0IGBvYXBpLWNvZGVnZW5gIHN1cHBvcnRzIHJpZ2h0IG5vdywgYW5kIGl0J3MgYSBnb29kIGlkZWEgdG8gc3RhcnQgd2l0aCB0aGlzIGlmIHlvdSB3YW50IHRoZSBtb3N0IGd1YXJkcmFpbHMgdG8gc2ltcGxpZnkgZGV2ZWxvcGluZyB5b3VyIEFQSXMuCgpUaGUgc3RyaWN0IHNlcnZlciBoYXMgc3VwcG9ydCBmb3I6CgotIG11bHRpcGxlIHJlcXVlc3QvcmVzcG9uc2UgbWVkaWEgdHlwZXMgYW5kIHN0YXR1cyBjb2RlcyBvbiBhIGdpdmVuIG9wZXJhdGlvbgotIGZpcnN0LWNsYXNzIHN1cHBvcnQgZm9yIGBtdWx0aXBhcnQvZm9ybS1kYXRhYCBhbmQgYGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZGAgcmVxdWVzdHMKLSByZXR1cm5pbmcgYW4gW0hUVFAgNTAwIEludGVybmFsIFNlcnZlciBFcnJvcl0oaHR0cHM6Ly9odHRwLmNhdC81MDApLCB3aGVuIGFuIGBlcnJvcmAgaXMgcmV0dXJuZWQgZnJvbSBhIGZ1bmN0aW9uCi0gYXV0b21hZ2ljICh1biltYXJzaGFsbGluZyBvZiByZXF1ZXN0L3Jlc3BvbnNlcywgYW5kIHNldHRpbmcgYGNvbnRlbnQtdHlwZWAgYW5kIEhUVFAgc3RhdHVzIGNvZGVzIG9uIHJlc3BvbnNlcwotIGJpbmRpbmcgcmVxdWVzdCB2YWx1ZXMgdG8gYSBzdHJ1Y3QsIGEgYG11bHRpcGFydC5SZWFkZXJgIG9yIHByb3ZpZGluZyBhIGBpby5SZWFkZXJgCgpZb3UgY2FuIHNlZSBhIGxpdHRsZSBtb3JlIGRldGFpbCBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUgaW4gdGhlIFsiV2hhdCBkb2VzIGl0IGxvb2sgbGlrZSJdKCN3aGF0LWRvZXMtaXQtbG9vay1saWtlLXN0cmljdCkgc2VjdGlvbi4KCj4gWyFOT1RFXQo+IFRvIGNvbmZpZ3VyZSB0aGUgc3RyaWN0IHNlcnZlciBnZW5lcmF0aW9uLCB5b3UgbXVzdCBzcGVjaWZ5IGFub3RoZXIgc2VydmVyIHRvIGJlIGdlbmVyYXRlZC4gRm9yIGluc3RhbmNlOgoKYGBgeWFtbAojIHlhbWwtbGFuZ3VhZ2Utc2VydmVyOiAkc2NoZW1hPWh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9kZWVwbWFwL29hcGktY29kZWdlbi9IRUFEL2NvbmZpZ3VyYXRpb24tc2NoZW1hLmpzb24KcGFja2FnZTogYXBpCmdlbmVyYXRlOgogICMgTk9URSBhbm90aGVyIHNlcnZlciBtdXN0IGJlIGFkZGVkIQogIGNoaS1zZXJ2ZXI6IHRydWUKICBzdHJpY3Qtc2VydmVyOiB0cnVlCm91dHB1dDogc2VydmVyLmdlbi5nbwpgYGAKCj4gWyFOT1RFXQo+IFRoaXMgZG9lc24ndCBpbmNsdWRlIFt2YWxpZGF0aW9uIG9mIGluY29taW5nIHJlcXVlc3RzXSgjcmVxdWVzdHJlc3BvbnNlLXZhbGlkYXRpb24tbWlkZGxld2FyZSkuCgojIyBHZW5lcmF0aW5nIEFQSSBjbGllbnRzCgpBcyB3ZWxsIGFzIGdlbmVyYXRpbmcgdGhlIHNlcnZlci1zaWRlIGJvaWxlcnBsYXRlLCBgb2FwaS1jb2RlZ2VuYCBjYW4gYWxzbyBnZW5lcmF0ZSBBUEkgY2xpZW50cy4KClRoaXMgYWltcyB0byBiZSBhbiBBUEkgY2xpZW50IHRoYXQgY2FuIGJlIHVzZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgbWV0aG9kcyBvZiB0aGUgQVBJLCBhbmQgaXMgcGVyZmVjdGx5IHN1aXRlZCBmb3IgcHJvZHVjdGlvbiB1c2FnZS4KCkhvd2V2ZXIsIGlmIHlvdSB3ZXJlIGxvb2tpbmcgZm9yIGEgc2xpZ2h0bHkgbW9yZSBTREstc3R5bGUgYXBwcm9hY2gsIG9yIGEgbWl4IG9mIGdlbmVyYXRlZCB0ZXN0cyBhbmQvb3IgZG9jdW1lbnRhdGlvbiwgdGhpcyBBUEkgY2xpZW50IG1heSBub3QgYmUgZm9yIHlvdSwgYW5kIHlvdSBtYXkgd2FudCB0byBsb29rIGF0IGFsdGVybmF0ZSB0b29saW5nLgoKRm9yIGluc3RhbmNlLCBnaXZlbiBhbiBgYXBpLnlhbWxgOgoKYGBgeWFtbApvcGVuYXBpOiAiMy4wLjAiCmluZm86CiAgdmVyc2lvbjogMS4wLjAKICB0aXRsZTogR2VuZXJhdGUgbW9kZWxzCnBhdGhzOgogIC9jbGllbnQ6CiAgICBnZXQ6CiAgICAgIG9wZXJhdGlvbklkOiBnZXRDbGllbnQKICAgICAgcmVzcG9uc2VzOgogICAgICAgIDIwMDoKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICAgJHJlZjogIiMvY29tcG9uZW50cy9zY2hlbWFzL0NsaWVudFR5cGUiCiAgICBwdXQ6CiAgICAgIG9wZXJhdGlvbklkOiB1cGRhdGVDbGllbnQKICAgICAgcmVzcG9uc2VzOgogICAgICAgIDQwMDoKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICAgdHlwZTogb2JqZWN0CiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOgogICAgICAgICAgICAgICAgICBjb2RlOgogICAgICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgICAgcmVxdWlyZWQ6CiAgICAgICAgICAgICAgICAtIGNvZGUKY29tcG9uZW50czoKICBzY2hlbWFzOgogICAgQ2xpZW50VHlwZToKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gbmFtZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG5hbWU6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICMgTk9URSB0aGF0IHRoaXMgaXMgbm90IGdlbmVyYXRlZCBieSBkZWZhdWx0IGJlY2F1c2UgaXQncyBub3QgcmVmZXJlbmNlZC4gSWYgeW91IHdhbnQgaXQsIHlvdSBuZWVkIHRvIHVzZSB0aGUgZm9sbG93aW5nIFlBTUwgY29uZmlndXJhdGlvbjoKICAgICMKICAgICMgb3V0cHV0LW9wdGlvbnM6CiAgICAjICAgc2tpcC1wcnVuZTogdHJ1ZQogICAgVW5yZWZlcmVuY2VkOgogICAgICB0eXBlOiBvYmplY3QKICAgICAgcmVxdWlyZWQ6CiAgICAgICAgLSBpZAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIGlkOgogICAgICAgICAgdHlwZTogaW50ZWdlcgpgYGAKCkFuZCBhIGBjZmcueWFtbGA6CgpgYGB5YW1sCiMgeWFtbC1sYW5ndWFnZS1zZXJ2ZXI6ICRzY2hlbWE9aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL0hFQUQvY29uZmlndXJhdGlvbi1zY2hlbWEuanNvbgpwYWNrYWdlOiBjbGllbnQKb3V0cHV0OiBjbGllbnQuZ2VuLmdvCmdlbmVyYXRlOgogIG1vZGVsczogdHJ1ZQogIGNsaWVudDogdHJ1ZQpgYGAKCkFuZCBhIGBnZW5lcmF0ZS5nb2A6CgpgYGBnbwpwYWNrYWdlIGNsaWVudAoKLy9nbzpnZW5lcmF0ZSBnbyBydW4gZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vb2FwaS1jb2RlZ2VuL3YyL2NtZC9vYXBpLWNvZGVnZW4gLWNvbmZpZyBjZmcueWFtbCBhcGkueWFtbApgYGAKClRoaXMgd291bGQgdGhlbiBnZW5lcmF0ZToKCmBgYGdvCnBhY2thZ2UgY2xpZW50CgovLyAuLi4KCi8vIENsaWVudFR5cGUgZGVmaW5lcyBtb2RlbCBmb3IgQ2xpZW50VHlwZS4KdHlwZSBDbGllbnRUeXBlIHN0cnVjdCB7CglOYW1lIHN0cmluZyBganNvbjoibmFtZSJgCn0KCi8vIC4uLgoKLy8gQ2xpZW50IHdoaWNoIGNvbmZvcm1zIHRvIHRoZSBPcGVuQVBJMyBzcGVjaWZpY2F0aW9uIGZvciB0aGlzIHNlcnZpY2UuCnR5cGUgQ2xpZW50IHN0cnVjdCB7CgkvLyBUaGUgZW5kcG9pbnQgb2YgdGhlIHNlcnZlciBjb25mb3JtaW5nIHRvIHRoaXMgaW50ZXJmYWNlLCB3aXRoIHNjaGVtZSwKCS8vIGh0dHBzOi8vYXBpLmRlZXBtYXAuY29tIGZvciBleGFtcGxlLiBUaGlzIGNhbiBjb250YWluIGEgcGF0aCByZWxhdGl2ZQoJLy8gdG8gdGhlIHNlcnZlciwgc3VjaCBhcyBodHRwczovL2FwaS5kZWVwbWFwLmNvbS9kZXYtdGVzdCwgYW5kIGFsbCB0aGUKCS8vIHBhdGhzIGluIHRoZSBzd2FnZ2VyIHNwZWMgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgc2VydmVyLgoJU2VydmVyIHN0cmluZwoKCS8vIERvZXIgZm9yIHBlcmZvcm1pbmcgcmVxdWVzdHMsIHR5cGljYWxseSBhICpodHRwLkNsaWVudCB3aXRoIGFueQoJLy8gY3VzdG9taXplZCBzZXR0aW5ncywgc3VjaCBhcyBjZXJ0aWZpY2F0ZSBjaGFpbnMuCglDbGllbnQgSHR0cFJlcXVlc3REb2VyCgoJLy8gQSBsaXN0IG9mIGNhbGxiYWNrcyBmb3IgbW9kaWZ5aW5nIHJlcXVlc3RzIHdoaWNoIGFyZSBnZW5lcmF0ZWQgYmVmb3JlIHNlbmRpbmcgb3ZlcgoJLy8gdGhlIG5ldHdvcmsuCglSZXF1ZXN0RWRpdG9ycyBbXVJlcXVlc3RFZGl0b3JGbgp9CgovLyAuLi4KCi8vIFRoZSBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGNsaWVudCBhYm92ZS4KdHlwZSBDbGllbnRJbnRlcmZhY2UgaW50ZXJmYWNlIHsKCS8vIEdldENsaWVudCByZXF1ZXN0CglHZXRDbGllbnQoY3R4IGNvbnRleHQuQ29udGV4dCwgcmVxRWRpdG9ycyAuLi5SZXF1ZXN0RWRpdG9yRm4pICgqaHR0cC5SZXNwb25zZSwgZXJyb3IpCgoJLy8gVXBkYXRlQ2xpZW50IHJlcXVlc3QKCVVwZGF0ZUNsaWVudChjdHggY29udGV4dC5Db250ZXh0LCByZXFFZGl0b3JzIC4uLlJlcXVlc3RFZGl0b3JGbikgKCpodHRwLlJlc3BvbnNlLCBlcnJvcikKfQoKLy8gLi4uCgovLyBDbGllbnRXaXRoUmVzcG9uc2VzSW50ZXJmYWNlIGlzIHRoZSBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGNsaWVudCB3aXRoIHJlc3BvbnNlcyBhYm92ZS4KdHlwZSBDbGllbnRXaXRoUmVzcG9uc2VzSW50ZXJmYWNlIGludGVyZmFjZSB7CgkvLyBHZXRDbGllbnRXaXRoUmVzcG9uc2UgcmVxdWVzdAoJR2V0Q2xpZW50V2l0aFJlc3BvbnNlKGN0eCBjb250ZXh0LkNvbnRleHQsIHJlcUVkaXRvcnMgLi4uUmVxdWVzdEVkaXRvckZuKSAoKkdldENsaWVudFJlc3BvbnNlLCBlcnJvcikKCgkvLyBVcGRhdGVDbGllbnRXaXRoUmVzcG9uc2UgcmVxdWVzdAoJVXBkYXRlQ2xpZW50V2l0aFJlc3BvbnNlKGN0eCBjb250ZXh0LkNvbnRleHQsIHJlcUVkaXRvcnMgLi4uUmVxdWVzdEVkaXRvckZuKSAoKlVwZGF0ZUNsaWVudFJlc3BvbnNlLCBlcnJvcikKfQoKdHlwZSBHZXRDbGllbnRSZXNwb25zZSBzdHJ1Y3QgewoJQm9keSAgICAgICAgIFtdYnl0ZQoJSFRUUFJlc3BvbnNlICpodHRwLlJlc3BvbnNlCglKU09OMjAwICAgICAgKkNsaWVudFR5cGUKfQoKLy8gLi4uCmBgYAoKV2l0aCB0aGlzIGdlbmVyYXRlZCBjbGllbnQsIGl0IGlzIHRoZW4gcG9zc2libGUgdG8gY29uc3RydWN0IGFuZCB1dGlsaXNlIHRoZSBjbGllbnQsIGZvciBpbnN0YW5jZToKCmBgYGdvCnBhY2thZ2UgY2xpZW50X3Rlc3QKCmltcG9ydCAoCgkiY29udGV4dCIKCSJmbXQiCgkibG9nIgoJIm5ldC9odHRwIgoKCSJnaXRodWIuY29tL29hcGktY29kZWdlbi9vYXBpLWNvZGVnZW4vdjIvZXhhbXBsZXMvY2xpZW50IgopCgpmdW5jIFRlc3RDbGllbnRfY2FuQ2FsbCgpIHsKCS8vIGN1c3RvbSBIVFRQIGNsaWVudAoJaGMgOj0gaHR0cC5DbGllbnR7fQoKCS8vIHdpdGggYSByYXcgaHR0cC5SZXNwb25zZQoJewoJCWMsIGVyciA6PSBjbGllbnQuTmV3Q2xpZW50KCJodHRwOi8vbG9jYWxob3N0OjEyMzQiLCBjbGllbnQuV2l0aEhUVFBDbGllbnQoJmhjKSkKCQlpZiBlcnIgIT0gbmlsIHsKCQkJbG9nLkZhdGFsKGVycikKCQl9CgoJCXJlc3AsIGVyciA6PSBjLkdldENsaWVudChjb250ZXh0LlRPRE8oKSkKCQlpZiBlcnIgIT0gbmlsIHsKCQkJbG9nLkZhdGFsKGVycikKCQl9CgkJaWYgcmVzcC5TdGF0dXNDb2RlICE9IGh0dHAuU3RhdHVzT0sgewoJCQlsb2cuRmF0YWxmKCJFeHBlY3RlZCBIVFRQIDIwMCBidXQgcmVjZWl2ZWQgJWQiLCByZXNwLlN0YXR1c0NvZGUpCgkJfQoJfQoKCS8vIG9yIHRvIGdldCBhIHN0cnVjdCB3aXRoIHRoZSBwYXJzZWQgcmVzcG9uc2UgYm9keQoJewoJCWMsIGVyciA6PSBjbGllbnQuTmV3Q2xpZW50V2l0aFJlc3BvbnNlcygiaHR0cDovL2xvY2FsaG9zdDoxMjM0IiwgY2xpZW50LldpdGhIVFRQQ2xpZW50KCZoYykpCgkJaWYgZXJyICE9IG5pbCB7CgkJCWxvZy5GYXRhbChlcnIpCgkJfQoKCQlyZXNwLCBlcnIgOj0gYy5HZXRDbGllbnRXaXRoUmVzcG9uc2UoY29udGV4dC5UT0RPKCkpCgkJaWYgZXJyICE9IG5pbCB7CgkJCWxvZy5GYXRhbChlcnIpCgkJfQoJCWlmIHJlc3AuU3RhdHVzQ29kZSgpICE9IGh0dHAuU3RhdHVzT0sgewoJCQlsb2cuRmF0YWxmKCJFeHBlY3RlZCBIVFRQIDIwMCBidXQgcmVjZWl2ZWQgJWQiLCByZXNwLlN0YXR1c0NvZGUoKSkKCQl9CgoJCWZtdC5QcmludGYoInJlc3AuSlNPTjIwMDogJXZcbiIsIHJlc3AuSlNPTjIwMCkKCX0KCn0KYGBgCgojIyBHZW5lcmF0aW5nIEFQSSBtb2RlbHMKCklmIHlvdSdyZSBsb29raW5nIHRvIG9ubHkgZ2VuZXJhdGUgdGhlIG1vZGVscyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBhIHJlbW90ZSBzZXJ2aWNlLCBmb3IgaW5zdGFuY2UgaWYgeW91IG5lZWQgdG8gaGFuZC1yb2xsIHRoZSBBUEkgY2xpZW50IGZvciB3aGF0ZXZlciByZWFzb24sIHlvdSBjYW4gZG8gdGhpcyBhcy1pcy4KCj4gWyFUSVBdCj4gVHJ5IHRvIGRlZmluZSBhcyBtdWNoIGFzIHBvc3NpYmxlIHdpdGhpbiB0aGUgYCMvY29tcG9uZW50cy9zY2hlbWFzYCBvYmplY3QsIGFzIGBvYXBpLWNvZGVnZW5gIHdpbGwgZ2VuZXJhdGUgYWxsIHRoZSB0eXBlcyBoZXJlLgo+Cj4gQWx0aG91Z2ggd2UgY2FuIGdlbmVyYXRlIHNvbWUgdHlwZXMgYmFzZWQgb24gaW5saW5lIGRlZmluaXRpb25zIGluIGkuZS4gYSBwYXRoJ3MgcmVzcG9uc2UgdHlwZSwgaXQgaXNuJ3QgYWx3YXlzIHBvc3NpYmxlIHRvIGRvIHRoaXMsIG9yIGlmIGl0IGlzIGdlbmVyYXRlZCwgY2FuIGJlIGEgbGl0dGxlIGF3a3dhcmQgdG8gd29yayB3aXRoIGFzIGl0IG1heSBiZSBkZWZpbmVkIGFzIGFuIGFub255bW91cyBzdHJ1Y3QuCgpGb3IgaW5zdGFuY2UsIGdpdmVuIGFuIGBhcGkueWFtbGA6CgpgYGB5YW1sCm9wZW5hcGk6ICIzLjAuMCIKaW5mbzoKICB2ZXJzaW9uOiAxLjAuMAogIHRpdGxlOiBHZW5lcmF0ZSBtb2RlbHMKcGF0aHM6CiAgL2NsaWVudDoKICAgIGdldDoKICAgICAgb3BlcmF0aW9uSWQ6IGdldENsaWVudAogICAgICByZXNwb25zZXM6CiAgICAgICAgMjAwOgogICAgICAgICAgY29udGVudDoKICAgICAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICAgICAjIE5PVEUgdGhhdCBDbGllbnQgaXMgZ2VuZXJhdGVkIGhlcmUsIGJlY2F1c2UgaXQncyB3aXRoaW4gIy9jb21wb25lbnRzL3NjaGVtYXMKICAgICAgICAgICAgICAgICRyZWY6ICIjL2NvbXBvbmVudHMvc2NoZW1hcy9DbGllbnQiCiAgICBwdXQ6CiAgICAgIG9wZXJhdGlvbklkOiB1cGRhdGVDbGllbnQKICAgICAgcmVzcG9uc2VzOgogICAgICAgIDQwMDoKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgIyBOT1RFIHRoYXQgdGhpcyBhbm9ueW1vdXMgb2JqZWN0IGlzIC9ub3QvIGdlbmVyYXRlZCBiZWNhdXNlIGl0J3MgYW4gYW5vbnltb3VzLCBidXQgd291bGQgYmUgZ2VuZXJhdGVkIGlmIHVzaW5nIGBnZW5lcmF0ZTogY2xpZW50YAogICAgICAgICAgICAgICMgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWVwbWFwL29hcGktY29kZWdlbi9pc3N1ZXMvMTUxMgogICAgICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgICAgIHR5cGU6IG9iamVjdAogICAgICAgICAgICAgICAgcHJvcGVydGllczoKICAgICAgICAgICAgICAgICAgY29kZToKICAgICAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgICAgIHJlcXVpcmVkOgogICAgICAgICAgICAgICAgLSBjb2RlCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgIENsaWVudDoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gbmFtZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG5hbWU6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICMgTk9URSB0aGF0IHRoaXMgaXMgbm90IGdlbmVyYXRlZCBieSBkZWZhdWx0IGJlY2F1c2UgaXQncyBub3QgcmVmZXJlbmNlZC4gSWYgeW91IHdhbnQgaXQsIHlvdSBuZWVkIHRvIHVzZSB0aGUgZm9sbG93aW5nIFlBTUwgY29uZmlndXJhdGlvbjoKICAgICMKICAgICMgb3V0cHV0LW9wdGlvbnM6CiAgICAjICAgc2tpcC1wcnVuZTogdHJ1ZQogICAgVW5yZWZlcmVuY2VkOgogICAgICB0eXBlOiBvYmplY3QKICAgICAgcmVxdWlyZWQ6CiAgICAgICAgLSBpZAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIGlkOgogICAgICAgICAgdHlwZTogaW50ZWdlcgpgYGAKCkFuZCBhIGBjZmcueWFtbGA6CgpgYGB5YW1sCiMgeWFtbC1sYW5ndWFnZS1zZXJ2ZXI6ICRzY2hlbWE9aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL0hFQUQvY29uZmlndXJhdGlvbi1zY2hlbWEuanNvbgpwYWNrYWdlOiBvbmx5bW9kZWxzCm91dHB1dDogb25seS1tb2RlbHMuZ2VuLmdvCmdlbmVyYXRlOgogIG1vZGVsczogdHJ1ZQpgYGAKCkFuZCBhIGBnZW5lcmF0ZS5nb2A6CgpgYGBnbwpwYWNrYWdlIG9ubHltb2RlbHMKCi8vZ286Z2VuZXJhdGUgZ28gcnVuIGdpdGh1Yi5jb20vb2FwaS1jb2RlZ2VuL29hcGktY29kZWdlbi92Mi9jbWQvb2FwaS1jb2RlZ2VuIC1jb25maWcgY2ZnLnlhbWwgYXBpLnlhbWwKYGBgCgpUaGlzIHdvdWxkIHRoZW4gZ2VuZXJhdGU6CgpgYGBnbwpwYWNrYWdlIG9ubHltb2RlbHMKCi8vIENsaWVudCBkZWZpbmVzIG1vZGVsIGZvciBDbGllbnQuCnR5cGUgQ2xpZW50IHN0cnVjdCB7CglOYW1lIHN0cmluZyBganNvbjoibmFtZSJgCn0KYGBgCgpJZiB5b3Ugd2lzaCB0byBhbHNvIGdlbmVyYXRlIHRoZSBgVW5yZWZlcmVuY2VkYCB0eXBlLCB5b3Ugd291bGQgbmVlZCB0aGUgZm9sbG93aW5nIGBjZmcueWFtbGA6CgpgYGB5YW1sCiMgeWFtbC1sYW5ndWFnZS1zZXJ2ZXI6ICRzY2hlbWE9aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL0hFQUQvY29uZmlndXJhdGlvbi1zY2hlbWEuanNvbgpwYWNrYWdlOiBvbmx5bW9kZWxzCm91dHB1dDogb25seS1tb2RlbHMuZ2VuLmdvCmdlbmVyYXRlOgogIG1vZGVsczogdHJ1ZQpvdXRwdXQtb3B0aW9uczoKICAjIE5PVEUgdGhhdCB0aGlzIGlzIG9ubHkgcmVxdWlyZWQgZm9yIHRoZSBgVW5yZWZlcmVuY2VkYCB0eXBlCiAgc2tpcC1wcnVuZTogdHJ1ZQpgYGAKCkZvciBhIGNvbXBsZXRlIGV4YW1wbGUgc2VlIFtgZXhhbXBsZXMvb25seS1tb2RlbHNgXShleGFtcGxlcy9vbmx5LW1vZGVscykuCgojIyBTcGxpdHRpbmcgbGFyZ2UgT3BlbkFQSSBzcGVjcyBhY3Jvc3MgbXVsdGlwbGUgcGFja2FnZXMgKGFrYSAiSW1wb3J0IE1hcHBpbmciIG9yICJleHRlcm5hbCByZWZlcmVuY2VzIikKPGEgbmFtZT1pbXBvcnQtbWFwcGluZz48L2E+CgpXaGVuIHlvdSd2ZSBnb3QgYSBsYXJnZSBPcGVuQVBJIHNwZWNpZmljYXRpb24sIHlvdSBtYXkgZmluZCBpdCB1c2VmdWwgdG8gc3BsaXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBzcGVjIGFjcm9zcyBtdWx0aXBsZSBmaWxlcywgdXNpbmcgZXh0ZXJuYWwgcmVmZXJlbmNlcywgc3VjaCBhczoKCmBgYHlhbWwKY29tcG9uZW50czoKICBzY2hlbWFzOgogICAgVXNlcjoKICAgICAgJHJlZjogJy4uL2NvbW1vbi9hcGkueWFtbCMvY29tcG9uZW50cy9zY2hlbWFzL1VzZXInCmBgYAoKVGhpcyBpcyBzdXBwb3J0ZWQgYnkgYG9hcGktY29kZWdlbmAsIHRocm91Z2ggdGhlIGFiaWxpdHkgdG8gcGVyZm9ybSAiSW1wb3J0IE1hcHBpbmciLgoKRm9yIGluc3RhbmNlLCBsZXQncyBzYXkgdGhhdCB3ZSBoYXZlIGEgbGFyZ2UgQVBJLCB3aGljaCBoYXMgYSB1c2VyLWZhY2luZyBBUEkgYW5kIGFuIGFkbWluIEFQSSwgYm90aCBvZiB3aGljaCB1c2UgYSBjb21tb24gc2V0IG9mIEFQSSBtb2RlbHMuCgpJbiB0aGlzIGNhc2UsIHdlIG1heSBoYXZlIGFuIEFkbWluIEFQSSB0aGF0IGxvb2tzIGxpa2U6CgpgYGB5YW1sCiMgYWRtaW4vYXBpLnlhbWwKb3BlbmFwaTogIjMuMC4wIgppbmZvOgogIHZlcnNpb246IDEuMC4wCiAgdGl0bGU6IEFkbWluIEFQSQogIGRlc2NyaXB0aW9uOiBUaGUgYWRtaW4tb25seSBwb3J0aW9uIG9mIHRoZSBBUEksIHdoaWNoIGhhcyBpdHMgb3duIHNlcGFyYXRlIE9wZW5BUEkgc3BlYwp0YWdzOgogIC0gbmFtZTogYWRtaW4KICAgIGRlc2NyaXB0aW9uOiBBZG1pbiBBUEkgZW5kcG9pbnRzCiAgLSBuYW1lOiB1c2VyCiAgICBkZXNjcmlwdGlvbjogQVBJIGVuZHBvaW50IHRoYXQgcGVydGFpbnMgdG8gdXNlciBkYXRhCnBhdGhzOgogIC9hZG1pbi91c2VyL3tpZH06CiAgICBnZXQ6CiAgICAgIHRhZ3M6CiAgICAgICAgLSBhZG1pbgogICAgICAgIC0gdXNlcgogICAgICBzdW1tYXJ5OiBHZXQgYSB1c2VyJ3MgZGV0YWlscwogICAgICBvcGVyYXRpb25JZDogZ2V0VXNlckJ5SWQKICAgICAgcGFyYW1ldGVyczoKICAgICAgICAtIG5hbWU6IGlkCiAgICAgICAgICBpbjogcGF0aAogICAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgIGZvcm1hdDogdXVpZAogICAgICByZXNwb25zZXM6CiAgICAgICAgMjAwOgogICAgICAgICAgZGVzY3JpcHRpb246IFN1Y2Nlc3MKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL1VzZXInCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgIFVzZXI6CiAgICAgICRyZWY6ICcuLi9jb21tb24vYXBpLnlhbWwjL2NvbXBvbmVudHMvc2NoZW1hcy9Vc2VyJwpgYGAKClRoaXMgcmVmZXJlbmNlcyB0aGUgY29tbW9uIHNwZWM6CgpgYGB5YW1sCiMgY29tbW9uL2FwaS55YW1sCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgIFVzZXI6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UKICAgICAgcHJvcGVydGllczoKICAgICAgICBuYW1lOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gbmFtZQpgYGAKCkFuZCBmaW5hbGx5IHdlIGhhdmUgb3VyIGNvbmZpZ3VyYXRpb24gZmlsZToKCmBgYHlhbWwKIyB5YW1sLWxhbmd1YWdlLXNlcnZlcjogJHNjaGVtYT1odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZGVlcG1hcC9vYXBpLWNvZGVnZW4vSEVBRC9jb25maWd1cmF0aW9uLXNjaGVtYS5qc29uCiMgYWRtaW4vY2ZnLnlhbWwKcGFja2FnZTogYWRtaW4Kb3V0cHV0OiBzZXJ2ZXIuZ2VuLmdvCmdlbmVyYXRlOgogIG1vZGVsczogdHJ1ZQogIGNoaS1zZXJ2ZXI6IHRydWUKb3V0cHV0LW9wdGlvbnM6CiAgIyB0byBtYWtlIHN1cmUgdGhhdCBhbGwgdHlwZXMgYXJlIGdlbmVyYXRlZAogIHNraXAtcHJ1bmU6IHRydWUKIyBOT1RFIHRoYXQgdGhpcyB3b24ndCB3b3JrLCBhcyBpdCdzIG1pc3NpbmcgYGltcG9ydC1tYXBwaW5nYApgYGAKCklmIHdlIHdlcmUgdG8gcnVuIGBvYXBpLWNvZGVnZW5gLCB0aGlzIHdpbGwgZmFpbCB3aXRoIHRoZSBmb2xsb3dpbmcgZXJyb3IKCmBgYAplcnJvciBnZW5lcmF0aW5nIGNvZGU6IGVycm9yIGNyZWF0aW5nIG9wZXJhdGlvbiBkZWZpbml0aW9uczogZXJyb3IgZ2VuZXJhdGluZyByZXNwb25zZSBkZWZpbml0aW9uczogZXJyb3IgZ2VuZXJhdGluZyByZXF1ZXN0IGJvZHkgZGVmaW5pdGlvbjogZXJyb3IgdHVybmluZyByZWZlcmVuY2UgKC4uL2NvbW1vbi9hcGkueWFtbCMvY29tcG9uZW50cy9zY2hlbWFzL1VzZXIpIGludG8gYSBHbyB0eXBlOiB1bnJlY29nbml6ZWQgZXh0ZXJuYWwgcmVmZXJlbmNlICcuLi9jb21tb24vYXBpLnlhbWwnOyBwbGVhc2UgcHJvdmlkZSB0aGUga25vd24gaW1wb3J0IGZvciB0aGlzIHJlZmVyZW5jZSB1c2luZyBvcHRpb24gLS1pbXBvcnQtbWFwcGluZwpgYGAKClRoaXMgaXMgYmVjYXVzZSBgb2FwaS1jb2RlZ2VuYCByZXF1aXJlczoKCmBgYHlhbWwKIyB5YW1sLWxhbmd1YWdlLXNlcnZlcjogJHNjaGVtYT1odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZGVlcG1hcC9vYXBpLWNvZGVnZW4vSEVBRC9jb25maWd1cmF0aW9uLXNjaGVtYS5qc29uCnBhY2thZ2U6IGFkbWluCm91dHB1dDogc2VydmVyLmdlbi5nbwpnZW5lcmF0ZToKICBtb2RlbHM6IHRydWUKICBjaGktc2VydmVyOiB0cnVlCm91dHB1dC1vcHRpb25zOgogICMgdG8gbWFrZSBzdXJlIHRoYXQgYWxsIHR5cGVzIGFyZSBnZW5lcmF0ZWQKICBza2lwLXBydW5lOiB0cnVlCmltcG9ydC1tYXBwaW5nOgogICMgZm9yIGEgZ2l2ZW4gZmlsZS9VUkwgdGhhdCBpcyAkcmVmJ2QsIHBvaW50IGBvYXBpLWNvZGVnZW5gIHRvIHRoZSBHbyBwYWNrYWdlIHRoYXQgdGhpcyBzcGVjIGlzIGdlbmVyYXRlZCBpbnRvLCB0byBwZXJmb3JtIEdvIHBhY2thZ2UgaW1wb3J0cwogIC4uL2NvbW1vbi9hcGkueWFtbDogZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vb2FwaS1jb2RlZ2VuL3YyL2V4YW1wbGVzL2ltcG9ydC1tYXBwaW5nL2NvbW1vbgpgYGAKClRoaXMgd2lsbCB0aGVuIGdlbmVyYXRlIHRoZSBmb2xsb3dpbmcgY29kZToKCmBgYGdvCnBhY2thZ2UgYWRtaW4KCmltcG9ydCAoCgkvLyAuLi4KCWV4dGVybmFsUmVmMCAiZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vb2FwaS1jb2RlZ2VuL3YyL2V4YW1wbGVzL2ltcG9ydC1tYXBwaW5nL2NvbW1vbiIKKQoKLy8gVXNlciBkZWZpbmVzIG1vZGVsIGZvciBVc2VyLgp0eXBlIFVzZXIgPSBleHRlcm5hbFJlZjAuVXNlcgpgYGAKCklmIHlvdSBkb24ndCB3YW50IHRvIGRvIHRoaXMsIGFuIGFsdGVybmF0ZSBvcHRpb24gaXMgdG8gW2J1bmRsZSB5b3VyIG11bHRpcGxlIE9wZW5BUEkgZmlsZXNdKGh0dHBzOi8vd3d3Lmp2dC5tZS9wb3N0cy8yMDIyLzAyLzEwL2J1bmRsZS1vcGVuYXBpLykgaW50byBhIHNpbmdsZSBzcGVjLgoKQ2hlY2sgb3V0IFt0aGUgaW1wb3J0LW1hcHBpbmcgZXhhbXBsZV0oZXhhbXBsZXMvaW1wb3J0LW1hcHBpbmcvKSBmb3IgdGhlIGZ1bGwgY29kZS4KCiMjIEdlbmVyYXRpbmcgTnVsbGFibGUgdHlwZXMKCkl0J3MgcG9zc2libGUgdGhhdCB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGRldGVybWluZSB3aGV0aGVyIGEgZmllbGQgaXNuJ3Qgc2VudCwgaXMgc2VudCBhcyBgbnVsbGAgb3IgaGFzIGEgdmFsdWUuCgpGb3IgaW5zdGFuY2UsIGlmIHlvdSBoYWQgdGhlIGZvbGxvd2luZyBPcGVuQVBJIHByb3BlcnR5OgoKYGBgeWFtbApTOgogIHR5cGU6IG9iamVjdAogIHByb3BlcnRpZXM6CiAgICBGaWVsZDoKICAgICAgdHlwZTogc3RyaW5nCiAgICAgIG51bGxhYmxlOiB0cnVlCiAgICByZXF1aXJlZDogW10KYGBgCgpUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaW4gYG9hcGktY29kZWdlbmAgaXMgdG8gZ2VuZXJhdGU6CgpgYGBnbwp0eXBlIFMgc3RydWN0IHsKCUZpZWxkICpzdHJpbmcgYGpzb246ImZpZWxkLG9taXRlbXB0eSJgCn0KYGBgCgpIb3dldmVyLCB5b3UgbG9zZSB0aGUgYWJpbGl0eSB0byB1bmRlcnN0YW5kIHRoZSB0aHJlZSBjYXNlcywgYXMgdGhlcmUncyBubyB3YXkgdG8gZGlzdGluZ3Vpc2ggdHdvIG9mIHRoZSB0eXBlcyBmcm9tIGVhY2ggb3RoZXI6CgotIGlzIHRoaXMgZmllbGQgbm90IHNlbnQ/IChDYW4gYmUgY2hlY2tlZCB3aXRoIGBTLkZpZWxkID09IG5pbGApCi0gaXMgdGhpcyBmaWVsZCBgbnVsbGA/IChDYW4gYmUgY2hlY2tlZCB3aXRoIGBTLkZpZWxkID09IG5pbGApCi0gZG9lcyB0aGlzIGZpZWxkIGhhdmUgYSB2YWx1ZT8gKGBTLkZpZWxkICE9IG5pbCAmJiAqUy5GaWVsZCA9PSAiMTIzImApCgpBcyBvZiBgb2FwaS1jb2RlZ2VuYCBbdjIuMS4wXShodHRwczovL2dpdGh1Yi5jb20vZGVlcG1hcC9vYXBpLWNvZGVnZW4vcmVsZWFzZXMvdGFnL3YyLjEuMCkgaXQgaXMgbm93IHBvc3NpYmxlIHRvIHJlcHJlc2VudCB0aGlzIHdpdGggdGhlIGBudWxsYWJsZS5OdWxsYWJsZWAgdHlwZSBmcm9tIFtvdXIgbmV3IGxpYnJhcnksIG9hcGktY29kZWdlbi9udWxsYWJsZV0oaHR0cHM6Ly9naXRodWIuY29tL29hcGktY29kZWdlbi9udWxsYWJsZSkuCgpJZiB5b3UgY29uZmlndXJlIHlvdXIgZ2VuZXJhdG9yJ3MgT3V0cHV0IE9wdGlvbnMgdG8gb3B0LWluIHRvIHRoaXMgYmVoYXZpb3VyLCBhcyBzbzoKCmBgYHlhbWwKb3V0cHV0LW9wdGlvbnM6CiAgbnVsbGFibGUtdHlwZTogdHJ1ZQpgYGAKCllvdSB3aWxsIG5vdyByZWNlaXZlIHRoZSBmb2xsb3dpbmcgb3V0cHV0OgoKYGBgZ28KdHlwZSBTIHN0cnVjdCB7CiAgICAvLyBub3RlIHRoYXQgdGhlcmUncyBubyBwb2ludGVyIGhlcmUsIGp1c3QgYG9taXRlbXB0eWAKICAgIEZpZWxkIG51bGxhYmxlLk51bGxhYmxlW3N0cmluZ10gYGpzb246ImZpZWxkLG9taXRlbXB0eSJgCn0KYGBgCgojIyBPcGVuQVBJIGV4dGVuc2lvbnMKCkFzIHdlbGwgYXMgdGhlIGNvcmUgT3BlbkFQSSBzdXBwb3J0LCB3ZSBhbHNvIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBPcGVuQVBJIGV4dGVuc2lvbnMsIGFzIGRlbm90ZWQgYnkgdGhlIFtPcGVuQVBJIFNwZWNpZmljYXRpb24gRXh0ZW5zaW9uc10oaHR0cHM6Ly9zcGVjLm9wZW5hcGlzLm9yZy9vYXMvdjMuMC4zI3NwZWNpZmljYXRpb24tZXh0ZW5zaW9ucykuCgo8dGFibGU+Cgo8dHI+Cjx0aD4KRXh0ZW5zaW9uCjwvdGg+Cjx0aD4KRGVzY3JpcHRpb24KPC90aD4KPHRoPgpFeGFtcGxlIHVzYWdlCjwvdGg+CjwvdHI+Cgo8dHI+Cjx0ZD4KCmB4LWdvLXR5cGVgIDxicj4KYHgtZ28tdHlwZS1pbXBvcnRgCgo8L3RkPgo8dGQ+Ck92ZXJyaWRlIHRoZSBnZW5lcmF0ZWQgdHlwZSBkZWZpbml0aW9uIChhbmQgb3B0aW9uYWxseSwgYWRkIGFuIGltcG9ydCBmcm9tIGFub3RoZXIgcGFja2FnZSkKPC90ZD4KPHRkPgo8ZGV0YWlscz4KClVzaW5nIHRoZSBgeC1nby10eXBlYCAoYW5kIG9wdGlvbmFsbHksIGB4LWdvLXR5cGUtaW1wb3J0YCB3aGVuIHlvdSBuZWVkIHRvIGltcG9ydCBhbm90aGVyIHBhY2thZ2UpIGFsbG93cyBvdmVycmlkaW5nIHRoZSB0eXBlIHRoYXQgYG9hcGktY29kZWdlbmAgZGV0ZXJtaW5lZCB0aGUgZ2VuZXJhdGVkIHR5cGUgc2hvdWxkIGJlLgoKV2UgY2FuIHNlZSB0aGlzIGF0IHBsYXkgd2l0aCB0aGUgZm9sbG93aW5nIHNjaGVtYXM6CgpgYGB5YW1sCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgIENsaWVudDoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gbmFtZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG5hbWU6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBpZDoKICAgICAgICAgIHR5cGU6IG51bWJlcgogICAgQ2xpZW50V2l0aEV4dGVuc2lvbjoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gbmFtZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG5hbWU6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICMgdGhpcyBpcyBhIGJpdCBvZiBhIGNvbnRyaXZlZCBleGFtcGxlLCBhcyB5b3UgY291bGQgaW5zdGVhZCB1c2UKICAgICAgICAgICMgYGZvcm1hdDogdXVpZGAgYnV0IGl0IGV4cGxhaW5zIGhvdyB5b3UnZCBkbyB0aGlzIHdoZW4gdGhlcmUgbWF5IGJlCiAgICAgICAgICAjIGEgY2xhc2gsIGZvciBpbnN0YW5jZSBpZiB5b3UgYWxyZWFkeSBoYWQgYSBgdXVpZGAgcGFja2FnZSB0aGF0IHdhcwogICAgICAgICAgIyBiZWluZyBpbXBvcnRlZCwgb3IgLi4uCiAgICAgICAgICB4LWdvLXR5cGU6IGdvb2dsZXV1aWQuVVVJRAogICAgICAgICAgeC1nby10eXBlLWltcG9ydDoKICAgICAgICAgICAgcGF0aDogZ2l0aHViLmNvbS9nb29nbGUvdXVpZAogICAgICAgICAgICBuYW1lOiBnb29nbGV1dWlkCiAgICAgICAgaWQ6CiAgICAgICAgICB0eXBlOiBudW1iZXIKICAgICAgICAgICMgLi4uIHRoaXMgaXMgYWxzbyBhIGJpdCBvZiBhIGNvbnRyaXZlZCBleGFtcGxlLCBhcyB5b3UgY291bGQgdXNlCiAgICAgICAgICAjIGB0eXBlOiBpbnRlZ2VyYCBidXQgaW4gdGhlIGNhc2UgdGhhdCB5b3Uga25vdyBiZXR0ZXIgdGhhbiB3aGF0CiAgICAgICAgICAjIG9hcGktY29kZWdlbiBpcyBnZW5lcmF0aW5nLCBsaWtlIHNvOgogICAgICAgICAgeC1nby10eXBlOiBpbnQ2NApgYGAKCkZyb20gaGVyZSwgd2Ugbm93IGdldCB0d28gZGlmZmVyZW50IG1vZGVsczoKCmBgYGdvCi8vIENsaWVudCBkZWZpbmVzIG1vZGVsIGZvciBDbGllbnQuCnR5cGUgQ2xpZW50IHN0cnVjdCB7CglJZCAgICpmbG9hdDMyIGBqc29uOiJpZCxvbWl0ZW1wdHkiYAoJTmFtZSBzdHJpbmcgICBganNvbjoibmFtZSJgCn0KCi8vIENsaWVudFdpdGhFeHRlbnNpb24gZGVmaW5lcyBtb2RlbCBmb3IgQ2xpZW50V2l0aEV4dGVuc2lvbi4KdHlwZSBDbGllbnRXaXRoRXh0ZW5zaW9uIHN0cnVjdCB7CglJZCAgICppbnQ2NCAgICAgICAgICBganNvbjoiaWQsb21pdGVtcHR5ImAKCU5hbWUgZ29vZ2xldXVpZC5VVUlEIGBqc29uOiJuYW1lImAKfQpgYGAKCllvdSBjYW4gc2VlIHRoaXMgaW4gbW9yZSBkZXRhaWwgaW4gW3RoZSBleGFtcGxlIGNvZGVdKGV4YW1wbGVzL2V4dGVuc2lvbnMveGdvdHlwZS8pLgoKPC9kZXRhaWxzPgo8L3RkPgo8L3RyPgoKPHRyPgo8dGQ+CgpgeC1nby10eXBlLXNraXAtb3B0aW9uYWwtcG9pbnRlcmAKCjwvdGQ+Cjx0ZD4KRG8gbm90IGFkZCBhIHBvaW50ZXIgdHlwZSBmb3Igb3B0aW9uYWwgZmllbGRzIGluIHN0cnVjdHMKPC90ZD4KPHRkPgo8ZGV0YWlscz4KCkJ5IGRlZmF1bHQsIGBvYXBpLWNvZGVnZW5gIHdpbGwgZ2VuZXJhdGUgYSBwb2ludGVyIGZvciBvcHRpb25hbCBmaWVsZHMuCgpVc2luZyB0aGUgYHgtZ28tdHlwZS1za2lwLW9wdGlvbmFsLXBvaW50ZXJgIGV4dGVuc2lvbiBhbGxvd3Mgb21pdHRpbmcgdGhhdCBwb2ludGVyLgoKV2UgY2FuIHNlZSB0aGlzIGF0IHBsYXkgd2l0aCB0aGUgZm9sbG93aW5nIHNjaGVtYXM6CgpgYGB5YW1sCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgIENsaWVudDoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gbmFtZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG5hbWU6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBpZDoKICAgICAgICAgIHR5cGU6IG51bWJlcgogICAgQ2xpZW50V2l0aEV4dGVuc2lvbjoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gbmFtZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG5hbWU6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBpZDoKICAgICAgICAgIHR5cGU6IG51bWJlcgogICAgICAgICAgeC1nby10eXBlLXNraXAtb3B0aW9uYWwtcG9pbnRlcjogdHJ1ZQpgYGAKCkZyb20gaGVyZSwgd2Ugbm93IGdldCB0d28gZGlmZmVyZW50IG1vZGVsczoKCmBgYGdvCi8vIENsaWVudCBkZWZpbmVzIG1vZGVsIGZvciBDbGllbnQuCnR5cGUgQ2xpZW50IHN0cnVjdCB7CglJZCAgICpmbG9hdDMyIGBqc29uOiJpZCxvbWl0ZW1wdHkiYAoJTmFtZSBzdHJpbmcgICBganNvbjoibmFtZSJgCn0KCi8vIENsaWVudFdpdGhFeHRlbnNpb24gZGVmaW5lcyBtb2RlbCBmb3IgQ2xpZW50V2l0aEV4dGVuc2lvbi4KdHlwZSBDbGllbnRXaXRoRXh0ZW5zaW9uIHN0cnVjdCB7CglJZCAgIGZsb2F0MzIgYGpzb246ImlkLG9taXRlbXB0eSJgCglOYW1lIHN0cmluZyAgYGpzb246Im5hbWUiYAp9CmBgYAoKWW91IGNhbiBzZWUgdGhpcyBpbiBtb3JlIGRldGFpbCBpbiBbdGhlIGV4YW1wbGUgY29kZV0oZXhhbXBsZXMvZXh0ZW5zaW9ucy94Z290eXBlc2tpcG9wdGlvbmFscG9pbnRlci8pLgoKPC9kZXRhaWxzPgo8L3RkPgo8L3RyPgoKPHRyPgo8dGQ+CgpgeC1nby1uYW1lYAoKPC90ZD4KPHRkPgpPdmVycmlkZSB0aGUgZ2VuZXJhdGVkIG5hbWUgb2YgYSBmaWVsZCBvciBhIHR5cGUKPC90ZD4KPHRkPgo8ZGV0YWlscz4KCkJ5IGRlZmF1bHQsIGBvYXBpLWNvZGVnZW5gIHdpbGwgYXR0ZW1wdCB0byBnZW5lcmF0ZSB0aGUgbmFtZSBvZiBmaWVsZHMgYW5kIHR5cGVzIGluIGFzIGJlc3QgYSB3YXkgaXQgY2FuLgoKSG93ZXZlciwgc29tZXRpbWVzLCB0aGUgbmFtZSBkb2Vzbid0IHF1aXRlIGZpdCB3aGF0IHlvdXIgY29kZWJhc2Ugc3RhbmRhcmRzIGFyZSwgb3IgdGhlIGludGVudCBvZiB0aGUgZmllbGQsIHNvIHlvdSBjYW4gb3ZlcnJpZGUgaXQgd2l0aCBgeC1nby1uYW1lYC4KCldlIGNhbiBzZWUgdGhpcyBhdCBwbGF5IHdpdGggdGhlIGZvbGxvd2luZyBzY2hlbWFzOgoKYGBgeWFtbApvcGVuYXBpOiAiMy4wLjAiCmluZm86CiAgdmVyc2lvbjogMS4wLjAKICB0aXRsZTogeC1nby1uYW1lCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgIENsaWVudDoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gbmFtZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG5hbWU6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBpZDoKICAgICAgICAgIHR5cGU6IG51bWJlcgogICAgQ2xpZW50V2l0aEV4dGVuc2lvbjoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgICMgY2FuIGJlIHVzZWQgb24gYSB0eXBlCiAgICAgIHgtZ28tbmFtZTogQ2xpZW50UmVuYW1lZEJ5RXh0ZW5zaW9uCiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gbmFtZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG5hbWU6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBpZDoKICAgICAgICAgIHR5cGU6IG51bWJlcgogICAgICAgICAgIyBvciBvbiBhIGZpZWxkCiAgICAgICAgICB4LWdvLW5hbWU6IEFjY291bnRJZGVudGlmaWVyCmBgYAoKRnJvbSBoZXJlLCB3ZSBub3cgZ2V0IHR3byBkaWZmZXJlbnQgbW9kZWxzOgoKYGBgZ28KLy8gQ2xpZW50IGRlZmluZXMgbW9kZWwgZm9yIENsaWVudC4KdHlwZSBDbGllbnQgc3RydWN0IHsKCUlkICAgKmZsb2F0MzIgYGpzb246ImlkLG9taXRlbXB0eSJgCglOYW1lIHN0cmluZyAgIGBqc29uOiJuYW1lImAKfQoKLy8gQ2xpZW50UmVuYW1lZEJ5RXh0ZW5zaW9uIGRlZmluZXMgbW9kZWwgZm9yIENsaWVudFdpdGhFeHRlbnNpb24uCnR5cGUgQ2xpZW50UmVuYW1lZEJ5RXh0ZW5zaW9uIHN0cnVjdCB7CglBY2NvdW50SWRlbnRpZmllciAqZmxvYXQzMiBganNvbjoiaWQsb21pdGVtcHR5ImAKCU5hbWUgICAgICAgICAgICAgIHN0cmluZyAgIGBqc29uOiJuYW1lImAKfQpgYGAKCllvdSBjYW4gc2VlIHRoaXMgaW4gbW9yZSBkZXRhaWwgaW4gW3RoZSBleGFtcGxlIGNvZGVdKGV4YW1wbGVzL2V4dGVuc2lvbnMveGdvbmFtZS8pLgoKPC9kZXRhaWxzPgo8L3RkPgo8L3RyPgoKPHRyPgo8dGQ+CgpgeC1nby10eXBlLW5hbWVgCgo8L3RkPgo8dGQ+Ck92ZXJyaWRlIHRoZSBnZW5lcmF0ZWQgbmFtZSBvZiBhIHR5cGUKPC90ZD4KPHRkPgo8ZGV0YWlscz4KCj4gWyFOT1RFXQo+IE5vdGljZSB0aGF0IHRoaXMgaXMgc3VidGx5IGRpZmZlcmVudCB0byB0aGUgYHgtZ28tbmFtZWAsIHdoaWNoIGFsc28gYXBwbGllcyB0byBfZmllbGRzXyB3aXRoaW4gYHN0cnVjdGBzLgoKQnkgZGVmYXVsdCwgYG9hcGktY29kZWdlbmAgd2lsbCBhdHRlbXB0IHRvIGdlbmVyYXRlIHRoZSBuYW1lIG9mIHR5cGVzIGluIGFzIGJlc3QgYSB3YXkgaXQgY2FuLgoKSG93ZXZlciwgc29tZXRpbWVzLCB0aGUgbmFtZSBkb2Vzbid0IHF1aXRlIGZpdCB3aGF0IHlvdXIgY29kZWJhc2Ugc3RhbmRhcmRzIGFyZSwgb3IgdGhlIGludGVudCBvZiB0aGUgZmllbGQsIHNvIHlvdSBjYW4gb3ZlcnJpZGUgaXQgd2l0aCBgeC1nby1uYW1lYC4KCldlIGNhbiBzZWUgdGhpcyBhdCBwbGF5IHdpdGggdGhlIGZvbGxvd2luZyBzY2hlbWFzOgoKYGBgeWFtbApvcGVuYXBpOiAiMy4wLjAiCmluZm86CiAgdmVyc2lvbjogMS4wLjAKICB0aXRsZTogeC1nby10eXBlLW5hbWUKY29tcG9uZW50czoKICBzY2hlbWFzOgogICAgQ2xpZW50OgogICAgICB0eXBlOiBvYmplY3QKICAgICAgcmVxdWlyZWQ6CiAgICAgICAgLSBuYW1lCiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgbmFtZToKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIGlkOgogICAgICAgICAgdHlwZTogbnVtYmVyCiAgICBDbGllbnRXaXRoRXh0ZW5zaW9uOgogICAgICB0eXBlOiBvYmplY3QKICAgICAgeC1nby10eXBlLW5hbWU6IENsaWVudFJlbmFtZWRCeUV4dGVuc2lvbgogICAgICByZXF1aXJlZDoKICAgICAgICAtIG5hbWUKICAgICAgcHJvcGVydGllczoKICAgICAgICBuYW1lOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgaWQ6CiAgICAgICAgICB0eXBlOiBudW1iZXIKICAgICAgICAgICMgTk9URSBhdHRlbXB0aW5nIGEgYHgtZ28tdHlwZS1uYW1lYCBoZXJlIGlzIGEgbm8tb3AsIGFzIHdlJ3JlIG5vdCBwcm9kdWNpbmcgYSBfdHlwZV8gb25seSBhIF9maWVsZF8KICAgICAgICAgIHgtZ28tdHlwZS1uYW1lOiBUaGlzV2lsbE5vdEJlVXNlZApgYGAKCkZyb20gaGVyZSwgd2Ugbm93IGdldCB0d28gZGlmZmVyZW50IG1vZGVscyBhbmQgYSB0eXBlIGFsaWFzOgoKYGBgZ28KLy8gQ2xpZW50IGRlZmluZXMgbW9kZWwgZm9yIENsaWVudC4KdHlwZSBDbGllbnQgc3RydWN0IHsKCUlkICAgKmZsb2F0MzIgYGpzb246ImlkLG9taXRlbXB0eSJgCglOYW1lIHN0cmluZyAgIGBqc29uOiJuYW1lImAKfQoKLy8gQ2xpZW50V2l0aEV4dGVuc2lvbiBkZWZpbmVzIG1vZGVsIGZvciBDbGllbnRXaXRoRXh0ZW5zaW9uLgp0eXBlIENsaWVudFdpdGhFeHRlbnNpb24gPSBDbGllbnRSZW5hbWVkQnlFeHRlbnNpb24KCi8vIENsaWVudFJlbmFtZWRCeUV4dGVuc2lvbiBkZWZpbmVzIG1vZGVsIGZvciAuCnR5cGUgQ2xpZW50UmVuYW1lZEJ5RXh0ZW5zaW9uIHN0cnVjdCB7CglJZCAgICpmbG9hdDMyIGBqc29uOiJpZCxvbWl0ZW1wdHkiYAoJTmFtZSBzdHJpbmcgICBganNvbjoibmFtZSJgCn0KYGBgCgpZb3UgY2FuIHNlZSB0aGlzIGluIG1vcmUgZGV0YWlsIGluIFt0aGUgZXhhbXBsZSBjb2RlXShleGFtcGxlcy9leHRlbnNpb25zL3hnb3R5cGVuYW1lLykuCgo8L2RldGFpbHM+CjwvdGQ+CjwvdHI+Cgo8dHI+Cjx0ZD4KCmB4LW9taXRlbXB0eWAKCjwvdGQ+Cjx0ZD4KRm9yY2UgdGhlIHByZXNlbmNlIG9mIHRoZSBKU09OIHRhZyBgb21pdGVtcHR5YCBvbiBhIGZpZWxkCjwvdGQ+Cjx0ZD4KPGRldGFpbHM+CgpJbiBhIGNhc2UgdGhhdCB5b3UgbWF5IHdhbnQgdG8gYWRkIHRoZSBKU09OIHN0cnVjdCB0YWcgYG9taXRlbXB0eWAgdG8gdHlwZXMgdGhhdCBkb24ndCBoYXZlIG9uZSBnZW5lcmF0ZWQgYnkgZGVmYXVsdCAtIGZvciBpbnN0YW5jZSBhIHJlcXVpcmVkIGZpZWxkIC0geW91IGNhbiB1c2UgdGhlIGB4LW9taXRlbXB0eWAgZXh0ZW5zaW9uLgoKV2UgY2FuIHNlZSB0aGlzIGF0IHBsYXkgd2l0aCB0aGUgZm9sbG93aW5nIHNjaGVtYXM6CgpgYGB5YW1sCm9wZW5hcGk6ICIzLjAuMCIKaW5mbzoKICB2ZXJzaW9uOiAxLjAuMAogIHRpdGxlOiB4LW9taXRlbXB0eQpjb21wb25lbnRzOgogIHNjaGVtYXM6CiAgICBDbGllbnQ6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICByZXF1aXJlZDoKICAgICAgICAtIG5hbWUKICAgICAgcHJvcGVydGllczoKICAgICAgICBuYW1lOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgaWQ6CiAgICAgICAgICB0eXBlOiBudW1iZXIKICAgIENsaWVudFdpdGhFeHRlbnNpb246CiAgICAgIHR5cGU6IG9iamVjdAogICAgICByZXF1aXJlZDoKICAgICAgICAtIG5hbWUKICAgICAgcHJvcGVydGllczoKICAgICAgICBuYW1lOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAjIGZvciBzb21lIHJlYXNvbiwgeW91IG1heSB3YW50IHRoaXMgYmVoYXZpb3VyLCBldmVuIHRob3VnaCBpdCdzIGEgcmVxdWlyZWQgZmllbGQKICAgICAgICAgIHgtb21pdGVtcHR5OiB0cnVlCiAgICAgICAgaWQ6CiAgICAgICAgICB0eXBlOiBudW1iZXIKYGBgCgpGcm9tIGhlcmUsIHdlIG5vdyBnZXQgdHdvIGRpZmZlcmVudCBtb2RlbHM6CgpgYGBnbwovLyBDbGllbnQgZGVmaW5lcyBtb2RlbCBmb3IgQ2xpZW50Lgp0eXBlIENsaWVudCBzdHJ1Y3QgewoJSWQgICAqZmxvYXQzMiBganNvbjoiaWQsb21pdGVtcHR5ImAKCU5hbWUgc3RyaW5nICAgYGpzb246Im5hbWUiYAp9CgovLyBDbGllbnRXaXRoRXh0ZW5zaW9uIGRlZmluZXMgbW9kZWwgZm9yIENsaWVudFdpdGhFeHRlbnNpb24uCnR5cGUgQ2xpZW50V2l0aEV4dGVuc2lvbiBzdHJ1Y3QgewoJSWQgICAqZmxvYXQzMiBganNvbjoiaWQsb21pdGVtcHR5ImAKCU5hbWUgc3RyaW5nICAgYGpzb246Im5hbWUsb21pdGVtcHR5ImAKfQpgYGAKCk5vdGljZSB0aGF0IHRoZSBgQ29tcGxleEZpZWxkYCBpcyBzdGlsbCBnZW5lcmF0ZWQgaW4gZnVsbCwgYnV0IHRoZSB0eXBlIHdpbGwgdGhlbiBiZSBpZ25vcmVkIHdpdGggSlNPTiBtYXJzaGFsbGluZy4KCllvdSBjYW4gc2VlIHRoaXMgaW4gbW9yZSBkZXRhaWwgaW4gW3RoZSBleGFtcGxlIGNvZGVdKGV4YW1wbGVzL2V4dGVuc2lvbnMveGdvanNvbmlnbm9yZS8pLgoKPC9kZXRhaWxzPgo8L3RkPgo8L3RyPgoKPHRyPgo8dGQ+CgpgeC1nby1qc29uLWlnbm9yZWAKCjwvdGQ+Cjx0ZD4KV2hlbiAodW4pbWFyc2hhbGluZyBKU09OLCBpZ25vcmUgZmllbGQocykKPC90ZD4KPHRkPgo8ZGV0YWlscz4KCkJ5IGRlZmF1bHQsIGBvYXBpLWNvZGVnZW5gIHdpbGwgZ2VuZXJhdGUgYGpzb246Ii4uLiJgIHN0cnVjdCB0YWdzIGZvciBhbGwgZmllbGRzIGluIGEgc3RydWN0LCBzbyBKU09OICh1biltYXJzaGFsaW5nIHdvcmtzLgoKSG93ZXZlciwgc29tZXRpbWVzLCB5b3Ugd2FudCB0byBvbWl0IGZpZWxkcywgd2hpY2ggY2FuIGJlIGRvbmUgd2l0aCB0aGUgYHgtZ28tanNvbi1pZ25vcmVgIGV4dGVuc2lvbi4KCldlIGNhbiBzZWUgdGhpcyBhdCBwbGF5IHdpdGggdGhlIGZvbGxvd2luZyBzY2hlbWFzOgoKYGBgeWFtbApvcGVuYXBpOiAiMy4wLjAiCmluZm86CiAgdmVyc2lvbjogMS4wLjAKICB0aXRsZTogeC1nby1qc29uLWlnbm9yZQpjb21wb25lbnRzOgogIHNjaGVtYXM6CiAgICBDbGllbnQ6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICByZXF1aXJlZDoKICAgICAgICAtIG5hbWUKICAgICAgcHJvcGVydGllczoKICAgICAgICBuYW1lOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgY29tcGxleEZpZWxkOgogICAgICAgICAgdHlwZTogb2JqZWN0CiAgICAgICAgICBwcm9wZXJ0aWVzOgogICAgICAgICAgICBuYW1lOgogICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICBhY2NvdW50TmFtZToKICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICMgLi4uCiAgICBDbGllbnRXaXRoRXh0ZW5zaW9uOgogICAgICB0eXBlOiBvYmplY3QKICAgICAgcmVxdWlyZWQ6CiAgICAgICAgLSBuYW1lCiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgbmFtZToKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIGNvbXBsZXhGaWVsZDoKICAgICAgICAgIHR5cGU6IG9iamVjdAogICAgICAgICAgcHJvcGVydGllczoKICAgICAgICAgICAgbmFtZToKICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgYWNjb3VudE5hbWU6CiAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAjIC4uLgogICAgICAgICAgeC1nby1qc29uLWlnbm9yZTogdHJ1ZQpgYGAKCkZyb20gaGVyZSwgd2Ugbm93IGdldCB0d28gZGlmZmVyZW50IG1vZGVsczoKCmBgYGdvCi8vIENsaWVudCBkZWZpbmVzIG1vZGVsIGZvciBDbGllbnQuCnR5cGUgQ2xpZW50IHN0cnVjdCB7CglDb21wbGV4RmllbGQgKnN0cnVjdCB7CgkJQWNjb3VudE5hbWUgKnN0cmluZyBganNvbjoiYWNjb3VudE5hbWUsb21pdGVtcHR5ImAKCQlOYW1lICAgICAgICAqc3RyaW5nIGBqc29uOiJuYW1lLG9taXRlbXB0eSJgCgl9IGBqc29uOiJjb21wbGV4RmllbGQsb21pdGVtcHR5ImAKCU5hbWUgc3RyaW5nIGBqc29uOiJuYW1lImAKfQoKLy8gQ2xpZW50V2l0aEV4dGVuc2lvbiBkZWZpbmVzIG1vZGVsIGZvciBDbGllbnRXaXRoRXh0ZW5zaW9uLgp0eXBlIENsaWVudFdpdGhFeHRlbnNpb24gc3RydWN0IHsKCUNvbXBsZXhGaWVsZCAqc3RydWN0IHsKCQlBY2NvdW50TmFtZSAqc3RyaW5nIGBqc29uOiJhY2NvdW50TmFtZSxvbWl0ZW1wdHkiYAoJCU5hbWUgICAgICAgICpzdHJpbmcgYGpzb246Im5hbWUsb21pdGVtcHR5ImAKCX0gYGpzb246Ii0iYAoJTmFtZSBzdHJpbmcgYGpzb246Im5hbWUiYAp9CmBgYAoKTm90aWNlIHRoYXQgdGhlIGBDb21wbGV4RmllbGRgIGlzIHN0aWxsIGdlbmVyYXRlZCBpbiBmdWxsLCBidXQgdGhlIHR5cGUgd2lsbCB0aGVuIGJlIGlnbm9yZWQgd2l0aCBKU09OIG1hcnNoYWxsaW5nLgoKWW91IGNhbiBzZWUgdGhpcyBpbiBtb3JlIGRldGFpbCBpbiBbdGhlIGV4YW1wbGUgY29kZV0oZXhhbXBsZXMvZXh0ZW5zaW9ucy94Z29qc29uaWdub3JlLykuCgo8L2RldGFpbHM+CjwvdGQ+CjwvdHI+Cgo8dHI+Cjx0ZD4KCmB4LW9hcGktY29kZWdlbi1leHRyYS10YWdzYAoKPC90ZD4KPHRkPgpHZW5lcmF0ZSBhcmJpdHJhcnkgc3RydWN0IHRhZ3MgdG8gZmllbGRzCjwvdGQ+Cjx0ZD4KPGRldGFpbHM+CgpJZiB5b3UncmUgbWFraW5nIHVzZSBvZiBhIGZpZWxkJ3Mgc3RydWN0IHRhZ3MgdG8gaS5lLiBhcHBseSB2YWxpZGF0aW9uLCBkZWNpZGUgd2hldGhlciBzb21ldGhpbmcgc2hvdWxkIGJlIGxvZ2dlZCwgZXRjLCB5b3UgY2FuIHVzZSBgeC1vYXBpLWNvZGVnZW4tZXh0cmEtdGFnc2AgdG8gc2V0IGFkZGl0aW9uYWwgdGFncyBmb3IgeW91ciBnZW5lcmF0ZWQgdHlwZXMuCgpXZSBjYW4gc2VlIHRoaXMgYXQgcGxheSB3aXRoIHRoZSBmb2xsb3dpbmcgc2NoZW1hczoKCmBgYHlhbWwKb3BlbmFwaTogIjMuMC4wIgppbmZvOgogIHZlcnNpb246IDEuMC4wCiAgdGl0bGU6IHgtb2FwaS1jb2RlZ2VuLWV4dHJhLXRhZ3MKY29tcG9uZW50czoKICBzY2hlbWFzOgogICAgQ2xpZW50OgogICAgICB0eXBlOiBvYmplY3QKICAgICAgcmVxdWlyZWQ6CiAgICAgICAgLSBuYW1lCiAgICAgICAgLSBpZAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG5hbWU6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBpZDoKICAgICAgICAgIHR5cGU6IG51bWJlcgogICAgQ2xpZW50V2l0aEV4dGVuc2lvbjoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gbmFtZQogICAgICAgIC0gaWQKICAgICAgcHJvcGVydGllczoKICAgICAgICBuYW1lOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgaWQ6CiAgICAgICAgICB0eXBlOiBudW1iZXIKICAgICAgICAgIHgtb2FwaS1jb2RlZ2VuLWV4dHJhLXRhZ3M6CiAgICAgICAgICAgIHZhbGlkYXRlOiAicmVxdWlyZWQsbWluPTEsbWF4PTI1NiIKICAgICAgICAgICAgc2FmZS10by1sb2c6ICJ0cnVlIgogICAgICAgICAgICBnb3JtOiBwcmltYXJ5a2V5CmBgYAoKRnJvbSBoZXJlLCB3ZSBub3cgZ2V0IHR3byBkaWZmZXJlbnQgbW9kZWxzOgoKYGBgZ28KLy8gQ2xpZW50IGRlZmluZXMgbW9kZWwgZm9yIENsaWVudC4KdHlwZSBDbGllbnQgc3RydWN0IHsKCUlkICAgZmxvYXQzMiBganNvbjoiaWQiYAoJTmFtZSBzdHJpbmcgIGBqc29uOiJuYW1lImAKfQoKLy8gQ2xpZW50V2l0aEV4dGVuc2lvbiBkZWZpbmVzIG1vZGVsIGZvciBDbGllbnRXaXRoRXh0ZW5zaW9uLgp0eXBlIENsaWVudFdpdGhFeHRlbnNpb24gc3RydWN0IHsKCUlkICAgZmxvYXQzMiBgZ29ybToicHJpbWFyeWtleSIganNvbjoiaWQiIHNhZmUtdG8tbG9nOiJ0cnVlIiB2YWxpZGF0ZToicmVxdWlyZWQsbWluPTEsbWF4PTI1NiJgCglOYW1lIHN0cmluZyAgYGpzb246Im5hbWUiYAp9CmBgYAoKWW91IGNhbiBzZWUgdGhpcyBpbiBtb3JlIGRldGFpbCBpbiBbdGhlIGV4YW1wbGUgY29kZV0oZXhhbXBsZXMvZXh0ZW5zaW9ucy94b2FwaWNvZGVnZW5leHRyYXRhZ3MvKS4KCjwvZGV0YWlscz4KPC90ZD4KPC90cj4KCjx0cj4KPHRkPgoKYHgtZW51bS12YXJuYW1lc2AgLyBgeC1lbnVtTmFtZXNgCgo8L3RkPgo8dGQ+Ck92ZXJyaWRlIGdlbmVyYXRlZCB2YXJpYWJsZSBuYW1lcyBmb3IgZW51bSBjb25zdGFudHMKPC90ZD4KPHRkPgo8ZGV0YWlscz4KCldoZW4gY29uc3VtaW5nIGFuIGVudW0gdmFsdWUgZnJvbSBhbiBleHRlcm5hbCBzeXN0ZW0sIHRoZSBuYW1lIG1heSBub3QgcHJvZHVjZSBhIG5pY2UgdmFyaWFibGUgbmFtZS4gVXNpbmcgdGhlIGB4LWVudW0tdmFybmFtZXNgIGV4dGVuc2lvbiBhbGxvd3Mgb3ZlcnJpZGluZyB0aGUgbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIHZhcmlhYmxlIG5hbWVzLgoKV2UgY2FuIHNlZSB0aGlzIGF0IHBsYXkgd2l0aCB0aGUgZm9sbG93aW5nIHNjaGVtYXM6CgpgYGB5YW1sCm9wZW5hcGk6ICIzLjAuMCIKaW5mbzoKICB2ZXJzaW9uOiAxLjAuMAogIHRpdGxlOiB4LWVudW1OYW1lcyBhbmQgeC1lbnVtLXZhcm5hbWVzCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgIENsaWVudFR5cGU6CiAgICAgIHR5cGU6IHN0cmluZwogICAgICBlbnVtOgogICAgICAgIC0gQUNUCiAgICAgICAgLSBFWFAKICAgIENsaWVudFR5cGVXaXRoTmFtZXNFeHRlbnNpb246CiAgICAgIHR5cGU6IHN0cmluZwogICAgICBlbnVtOgogICAgICAgIC0gQUNUCiAgICAgICAgLSBFWFAKICAgICAgeC1lbnVtTmFtZXM6CiAgICAgICAgLSBBY3RpdmUKICAgICAgICAtIEV4cGlyZWQKICAgIENsaWVudFR5cGVXaXRoVmFyTmFtZXNFeHRlbnNpb246CiAgICAgIHR5cGU6IHN0cmluZwogICAgICBlbnVtOgogICAgICAgIC0gQUNUCiAgICAgICAgLSBFWFAKICAgICAgeC1lbnVtLXZhcm5hbWVzOgogICAgICAgIC0gQWN0aXZlCiAgICAgICAgLSBFeHBpcmVkCmBgYAoKRnJvbSBoZXJlLCB3ZSBub3cgZ2V0IHR3byBkaWZmZXJlbnQgZm9ybXMgb2YgdGhlIHNhbWUgZW51bSBkZWZpbml0aW9uLgoKYGBgZ28KLy8gRGVmaW5lcyB2YWx1ZXMgZm9yIENsaWVudFR5cGUuCmNvbnN0ICgKCUFDVCBDbGllbnRUeXBlID0gIkFDVCIKCUVYUCBDbGllbnRUeXBlID0gIkVYUCIKKQoKLy8gQ2xpZW50VHlwZSBkZWZpbmVzIG1vZGVsIGZvciBDbGllbnRUeXBlLgp0eXBlIENsaWVudFR5cGUgc3RyaW5nCgovLyBEZWZpbmVzIHZhbHVlcyBmb3IgQ2xpZW50VHlwZVdpdGhFeHRlbnNpb24uCmNvbnN0ICgKCUFjdGl2ZSAgQ2xpZW50VHlwZVdpdGhFeHRlbnNpb24gPSAiQUNUIgoJRXhwaXJlZCBDbGllbnRUeXBlV2l0aEV4dGVuc2lvbiA9ICJFWFAiCikKCi8vIENsaWVudFR5cGVXaXRoRXh0ZW5zaW9uIGRlZmluZXMgbW9kZWwgZm9yIENsaWVudFR5cGVXaXRoRXh0ZW5zaW9uLgp0eXBlIENsaWVudFR5cGVXaXRoRXh0ZW5zaW9uIHN0cmluZwpgYGAKCllvdSBjYW4gc2VlIHRoaXMgaW4gbW9yZSBkZXRhaWwgaW4gW3RoZSBleGFtcGxlIGNvZGVdKGV4YW1wbGVzL2V4dGVuc2lvbnMveGVudW12YXJuYW1lcy8pLgoKPC9kZXRhaWxzPgo8L3RkPgo8L3RyPgoKPHRyPgo8dGQ+CgpgeC1kZXByZWNhdGVkLXJlYXNvbmAKCjwvdGQ+Cjx0ZD4KQWRkIGEgR29Eb2MgZGVwcmVjYXRpb24gd2FybmluZyB0byBhIHR5cGUKPC90ZD4KPHRkPgo8ZGV0YWlscz4KCldoZW4gYW4gT3BlbkFQSSB0eXBlIGlzIGRlcHJlY2F0ZWQsIGEgZGVwcmVjYXRpb24gd2FybmluZyBjYW4gYmUgYWRkZWQgaW4gdGhlIEdvRG9jIHVzaW5nIGB4LWRlcHJlY2F0ZWQtcmVhc29uYC4KCldlIGNhbiBzZWUgdGhpcyBhdCBwbGF5IHdpdGggdGhlIGZvbGxvd2luZyBzY2hlbWFzOgoKYGBgeWFtbApvcGVuYXBpOiAiMy4wLjAiCmluZm86CiAgdmVyc2lvbjogMS4wLjAKICB0aXRsZTogeC1kZXByZWNhdGVkLXJlYXNvbgpjb21wb25lbnRzOgogIHNjaGVtYXM6CiAgICBDbGllbnQ6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICByZXF1aXJlZDoKICAgICAgICAtIG5hbWUKICAgICAgcHJvcGVydGllczoKICAgICAgICBuYW1lOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgaWQ6CiAgICAgICAgICB0eXBlOiBudW1iZXIKICAgIENsaWVudFdpdGhFeHRlbnNpb246CiAgICAgIHR5cGU6IG9iamVjdAogICAgICByZXF1aXJlZDoKICAgICAgICAtIG5hbWUKICAgICAgcHJvcGVydGllczoKICAgICAgICBuYW1lOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICBkZXByZWNhdGVkOiB0cnVlCiAgICAgICAgICB4LWRlcHJlY2F0ZWQtcmVhc29uOiBEb24ndCB1c2UgYmVjYXVzZSByZWFzb25zCiAgICAgICAgaWQ6CiAgICAgICAgICB0eXBlOiBudW1iZXIKICAgICAgICAgICMgTk9URSB0aGF0IHRoaXMgZG9lc24ndCBnZW5lcmF0ZSwgYXMgbm8gYGRlcHJlY2F0ZWQ6IHRydWVgIGlzIHNldAogICAgICAgICAgeC1kZXByZWNhdGVkLXJlYXNvbjogTk9URSB5b3Ugc2hvdWxkbid0IHNlZSB0aGlzLCBhcyB5b3UndmUgbm90IGRlcHJlY2F0ZWQgdGhpcyBmaWVsZApgYGAKCkZyb20gaGVyZSwgd2Ugbm93IGdldCB0d28gZGlmZmVyZW50IGZvcm1zIG9mIHRoZSBzYW1lIGVudW0gZGVmaW5pdGlvbi4KCmBgYGdvCi8vIENsaWVudCBkZWZpbmVzIG1vZGVsIGZvciBDbGllbnQuCnR5cGUgQ2xpZW50IHN0cnVjdCB7CglJZCAgICpmbG9hdDMyIGBqc29uOiJpZCxvbWl0ZW1wdHkiYAoJTmFtZSBzdHJpbmcgICBganNvbjoibmFtZSJgCn0KCi8vIENsaWVudFdpdGhFeHRlbnNpb24gZGVmaW5lcyBtb2RlbCBmb3IgQ2xpZW50V2l0aEV4dGVuc2lvbi4KdHlwZSBDbGllbnRXaXRoRXh0ZW5zaW9uIHN0cnVjdCB7CglJZCAqZmxvYXQzMiBganNvbjoiaWQsb21pdGVtcHR5ImAKCS8vIERlcHJlY2F0ZWQ6IERvbid0IHVzZSBiZWNhdXNlIHJlYXNvbnMKCU5hbWUgc3RyaW5nIGBqc29uOiJuYW1lImAKfQpgYGAKCk5vdGljZSB0aGF0IGJlY2F1c2Ugd2UndmUgbm90IHNldCBgZGVwcmVjYXRlZDogdHJ1ZWAgdG8gdGhlIGBuYW1lYCBmaWVsZCwgaXQgZG9lc24ndCBnZW5lcmF0ZSBhIGRlcHJlY2F0aW9uIHdhcm5pbmcuCgpZb3UgY2FuIHNlZSB0aGlzIGluIG1vcmUgZGV0YWlsIGluIFt0aGUgZXhhbXBsZSBjb2RlXShleGFtcGxlcy9leHRlbnNpb25zL3hkZXByZWNhdGVkcmVhc29uLykuCgo8L2RldGFpbHM+CjwvdGQ+CjwvdHI+Cgo8dHI+Cjx0ZD4KCmB4LW9yZGVyYAoKPC90ZD4KPHRkPgpFeHBsaWNpdGx5IG9yZGVyIHN0cnVjdCBmaWVsZHMKPC90ZD4KPHRkPgo8ZGV0YWlscz4KCldoZXRoZXIgeW91IGxpa2UgY2VydGFpbiBmaWVsZHMgYmVpbmcgb3JkZXJlZCBiZWZvcmUgb3RoZXJzLCBvciB5b3Ugd2FudCB0byBwZXJmb3JtIG1vcmUgZWZmaWNpZW50IHBhY2tpbmcgb2YgeW91ciBzdHJ1Y3RzLCB0aGUgYHgtb3JkZXJgIGV4dGVuc2lvbiBpcyBoZXJlIGZvciB5b3UuCgpOb3RlIHRoYXQgYHgtb3JkZXJgIGlzIDEtaW5kZXhlZCAtIGB4LW9yZGVyOiAwYCBpcyBub3QgYSB2YWxpZCB2YWx1ZS4KCldoZW4gYW4gT3BlbkFQSSB0eXBlIGlzIGRlcHJlY2F0ZWQsIGEgZGVwcmVjYXRpb24gd2FybmluZyBjYW4gYmUgYWRkZWQgaW4gdGhlIEdvRG9jIHVzaW5nIGB4LWRlcHJlY2F0ZWQtcmVhc29uYC4KCldlIGNhbiBzZWUgdGhpcyBhdCBwbGF5IHdpdGggdGhlIGZvbGxvd2luZyBzY2hlbWFzOgoKYGBgeWFtbApvcGVuYXBpOiAiMy4wLjAiCmluZm86CiAgdmVyc2lvbjogMS4wLjAKICB0aXRsZTogeC1vcmRlcgpjb21wb25lbnRzOgogIHNjaGVtYXM6CiAgICBDbGllbnQ6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICByZXF1aXJlZDoKICAgICAgICAtIG5hbWUKICAgICAgcHJvcGVydGllczoKICAgICAgICBhX25hbWU6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBpZDoKICAgICAgICAgIHR5cGU6IG51bWJlcgogICAgQ2xpZW50V2l0aEV4dGVuc2lvbjoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gbmFtZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIGFfbmFtZToKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgeC1vcmRlcjogMgogICAgICAgIGlkOgogICAgICAgICAgdHlwZTogbnVtYmVyCiAgICAgICAgICB4LW9yZGVyOiAxCmBgYAoKRnJvbSBoZXJlLCB3ZSBub3cgZ2V0IHR3byBkaWZmZXJlbnQgZm9ybXMgb2YgdGhlIHNhbWUgdHlwZSBkZWZpbml0aW9uLgoKYGBgZ28KLy8gQ2xpZW50IGRlZmluZXMgbW9kZWwgZm9yIENsaWVudC4KdHlwZSBDbGllbnQgc3RydWN0IHsKCUFOYW1lICpzdHJpbmcgIGBqc29uOiJhX25hbWUsb21pdGVtcHR5ImAKCUlkICAgICpmbG9hdDMyIGBqc29uOiJpZCxvbWl0ZW1wdHkiYAp9CgovLyBDbGllbnRXaXRoRXh0ZW5zaW9uIGRlZmluZXMgbW9kZWwgZm9yIENsaWVudFdpdGhFeHRlbnNpb24uCnR5cGUgQ2xpZW50V2l0aEV4dGVuc2lvbiBzdHJ1Y3QgewoJSWQgICAgKmZsb2F0MzIgYGpzb246ImlkLG9taXRlbXB0eSJgCglBTmFtZSAqc3RyaW5nICBganNvbjoiYV9uYW1lLG9taXRlbXB0eSJgCn0KYGBgCgpZb3UgY2FuIHNlZSB0aGlzIGluIG1vcmUgZGV0YWlsIGluIFt0aGUgZXhhbXBsZSBjb2RlXShleGFtcGxlcy9leHRlbnNpb25zL3hvcmRlci8pLgoKPC9kZXRhaWxzPgo8L3RkPgo8L3RyPgoKPHRyPgo8dGQ+CgpgeC1vYXBpLWNvZGVnZW4tb25seS1ob25vdXItZ28tbmFtZWAKCjwvdGQ+Cjx0ZD4KT25seSBob25vdXIgdGhlIGB4LWdvLW5hbWVgIHdoZW4gZ2VuZXJhdGluZyBmaWVsZCBuYW1lcwo8L3RkPgo8dGQ+CjxkZXRhaWxzPgoKPiBbIVdBUk5JTkddCj4gVXNpbmcgdGhpcyBvcHRpb24gbWF5IGxlYWQgdG8gY2FzZXMgd2hlcmUgYG9hcGktY29kZWdlbmAncyByZXdyaXRpbmcgb2YgZmllbGQgbmFtZXMgdG8gcHJldmVudCBjbGFzaGVzIHdpdGggb3RoZXIgdHlwZXMsIG9yIHRvIHByZXZlbnQgaW5jbHVkaW5nIGNoYXJhY3RlcnMgdGhhdCBtYXkgbm90IGJlIHZhbGlkIEdvIGZpZWxkIG5hbWVzLgoKSW4gc29tZSBjYXNlcywgeW91IG1heSBub3Qgd2FudCB1c2UgdGhlIGluYnVpbHQgb3B0aW9ucyBmb3IgY29udmVydGluZyBhbiBPcGVuQVBJIGZpZWxkIG5hbWUgdG8gYSBHbyBmaWVsZCBuYW1lLCBzdWNoIGFzIHRoZSBgbmFtZS1ub3JtYWxpemVyOiAiVG9DYW1lbENhc2VXaXRoSW5pdGlhbGlzbXMiYCwgYW5kIGluc3RlYWQgdHJ1c3QgdGhlIG5hbWUgdGhhdCB5b3UndmUgZGVmaW5lZCBmb3IgdGhlIHR5cGUgYmV0dGVyLgoKSW4gdGhpcyBjYXNlLCB5b3UgY2FuIHVzZSBgeC1vYXBpLWNvZGVnZW4tb25seS1ob25vdXItZ28tbmFtZWAgdG8gZW5mb3JjZSB0aGlzLCBhbG9uZ3NpZGUgc3BlY2lmeWluZyB0aGUgYGFsbG93LXVuZXhwb3J0ZWQtc3RydWN0LWZpZWxkLW5hbWVzYCBjb21wYXRpYmlsaXR5IG9wdGlvbi4KClRoaXMgYWxsb3dzIHlvdSB0byB0YWtlIGEgc3BlYyBzdWNoIGFzOgoKYGBgeWFtbApvcGVuYXBpOiAiMy4wLjAiCmluZm86CiAgdmVyc2lvbjogMS4wLjAKICB0aXRsZTogeC1vYXBpLWNvZGVnZW4tb25seS1ob25vdXItZ28tbmFtZQpjb21wb25lbnRzOgogIHNjaGVtYXM6CiAgICBUeXBlV2l0aFVuZXhwb3J0ZWRGaWVsZDoKICAgICAgZGVzY3JpcHRpb246IEEgc3RydWN0IHdpbGwgYmUgb3V0cHV0IHdoZXJlIG9uZSBvZiB0aGUgZmllbGRzIGlzIG5vdCBleHBvcnRlZAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG5hbWU6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBpZDoKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgIyBOT1RFIHRoYXQgdGhlcmUgaXMgYW4gZXhwbGljaXQgdXNhZ2Ugb2YgYSBsb3dlcmNhc2UgY2hhcmFjdGVyCiAgICAgICAgICB4LWdvLW5hbWU6IGFjY291bnRJZGVudGlmaWVyCiAgICAgICAgICB4LW9hcGktY29kZWdlbi1leHRyYS10YWdzOgogICAgICAgICAgICBqc29uOiAiLSIKICAgICAgICAgIHgtb2FwaS1jb2RlZ2VuLW9ubHktaG9ub3VyLWdvLW5hbWU6IHRydWUKYGBgCgpBbmQgd2UnbGwgZ2VuZXJhdGU6CgpgYGBnbwovLyBUeXBlV2l0aFVuZXhwb3J0ZWRGaWVsZCBBIHN0cnVjdCB3aWxsIGJlIG91dHB1dCB3aGVyZSBvbmUgb2YgdGhlIGZpZWxkcyBpcyBub3QgZXhwb3J0ZWQKdHlwZSBUeXBlV2l0aFVuZXhwb3J0ZWRGaWVsZCBzdHJ1Y3QgewoJYWNjb3VudElkZW50aWZpZXIgKnN0cmluZyBganNvbjoiLSJgCglOYW1lICAgICAgICAgICAgICAqc3RyaW5nIGBqc29uOiJuYW1lLG9taXRlbXB0eSJgCn0KYGBgCgpZb3UgY2FuIHNlZSB0aGlzIGluIG1vcmUgZGV0YWlsIGluIFt0aGUgZXhhbXBsZSBjb2RlXShleGFtcGxlcy9leHRlbnNpb25zL3hvYXBpY29kZWdlbm9ubHlob25vdXJnb25hbWUpLgoKPC9kZXRhaWxzPgo8L3RkPgo8L3RyPgoKPC90YWJsZT4KCiMjIFJlcXVlc3QvcmVzcG9uc2UgdmFsaWRhdGlvbiBtaWRkbGV3YXJlCgpUaGUgZ2VuZXJhdGVkIGNvZGUgdGhhdCBgb2FwaS1jb2RlZ2VuYCBwcm9kdWNlcyBoYXMgc29tZSB2YWxpZGF0aW9uIGZvciBzb21lIGluY29taW5nIGRhdGEsIHN1Y2ggYXMgY2hlY2tpbmcgZm9yIHJlcXVpcmVkIGhlYWRlcnMsIGFuZCB3aGVuIHVzaW5nIHRoZSBbc3RyaWN0IHNlcnZlcl0oI3N0cmljdC1zZXJ2ZXIpIHlvdSBnZXQgc29tZSBtb3JlIHZhbGlkYXRpb24gYXJvdW5kIHRoZSBjb3JyZWN0IHVzYWdlIG9mIHRoZSByZXNwb25zZSB0eXBlcy4KCkhvd2V2ZXIsIHRoaXMgbGVhdmVzIGEgbG90IG9mIHZhbGlkYXRpb24gdGhhdCBuZWVkcyB0byBiZSBkb25lLCB3aGljaCBjYW4gYmUgdGVkaW91cyB0byBoYW5kLXdyaXRlIHRoaXMgbG9naWMsIGVzcGVjaWFsbHkgZm9yIGxhcmdlIG9yIGNvbXBsZXggT3BlbkFQSSBzcGVjaWZpY2F0aW9ucy4KClRvIHNpbXBsaWZ5IHRoaXMsIHdlIHVzZSBhIG1pZGRsZXdhcmUsIHdoaWNoIHByb3ZpZGVzIHRoZSByZXF1ZXN0IHZhbGlkYXRpb24uIFRoZSBtaWRkbGV3YXJlIHlvdSB3YW50IHRvIHVzZSBkZXBlbmRzIG9uIHRoZSBzZXJ2ZXIgeW91J3JlIHVzaW5nOgoKPHRhYmxlPgoKPHRyPgo8dGg+ClNlcnZlcgo8L3RoPgo8dGg+Ck1pZGRsZXdhcmUgbGlicmFyeQo8L3RoPgo8L3RyPgoKPHRyPgo8dGQ+CgpbQ2hpXShodHRwczovL2dpdGh1Yi5jb20vZ28tY2hpL2NoaSkKCjwvdGQ+Cjx0ZD4KCltuZXRodHRwLW1pZGRsZXdhcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vbmV0aHR0cC1taWRkbGV3YXJlKQoKPC90ZD4KPC90cj4KCjx0cj4KPHRkPgoKW0VjaG9dKGh0dHBzOi8vZ2l0aHViLmNvbS9sYWJzdGFjay9lY2hvKQoKPC90ZD4KPHRkPgoKW2VjaG8tbWlkZGxld2FyZV0oaHR0cHM6Ly9naXRodWIuY29tL29hcGktY29kZWdlbi9lY2hvLW1pZGRsZXdhcmUpCgo8L3RkPgo8L3RyPgoKPHRyPgo8dGQ+CgpbRmliZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9nb2ZpYmVyL2ZpYmVyKQoKPC90ZD4KPHRkPgoKW2ZpYmVyLW1pZGRsZXdhcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vZmliZXItbWlkZGxld2FyZSkKCjwvdGQ+Cgo8L3RyPgoKCjx0cj4KPHRkPgoKW0dpbl0oaHR0cHM6Ly9naXRodWIuY29tL2dpbi1nb25pYy9naW4pCgo8L3RkPgo8dGQ+CgpbZ2luLW1pZGRsZXdhcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vZ2luLW1pZGRsZXdhcmUpCgo8L3RkPgo8L3RyPgoKPHRyPgo8dGQ+CgpbZ29yaWxsYS9tdXhdKGh0dHBzOi8vZ2l0aHViLmNvbS9nb3JpbGxhL211eCkKCjwvdGQ+Cjx0ZD4KCltuZXRodHRwLW1pZGRsZXdhcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vbmV0aHR0cC1taWRkbGV3YXJlKQoKPC90ZD4KCjwvdHI+Cgo8dHI+Cjx0ZD4KCltJcmlzXShodHRwczovL2dpdGh1Yi5jb20va2F0YXJhcy9pcmlzKQoKPC90ZD4KPHRkPgoKW2lyaXMtbWlkZGxld2FyZV0oaHR0cHM6Ly9naXRodWIuY29tL29hcGktY29kZWdlbi9pcmlzLW1pZGRsZXdhcmUpCgo8L3RkPgoKPC90cj4KCjx0cj4KPHRkPgoKWzEuMjIrIGBuZXQvaHR0cGBdKGh0dHBzOi8vcGtnLmdvLmRldi9uZXQvaHR0cCkKCjwvdGQ+Cjx0ZD4KCltuZXRodHRwLW1pZGRsZXdhcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vbmV0aHR0cC1taWRkbGV3YXJlKQoKPC90ZD4KCjwvdHI+Cgo8L3RhYmxlPgoKPiBbIU5PVEVdCj4gSXQgaXMgW25vdCBjdXJyZW50bHkgcG9zc2libGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9kZWVwbWFwL29hcGktY29kZWdlbi9pc3N1ZXMvMTAzOCkgdG8gdmFsaWRhdGUgdGhlIEhUVFAgcmVzcG9uc2Ugd2l0aCBhIG1pZGRsZXdhcmUuCgo+IFshTk9URV0KPiBXZSdyZSBhbHNvIFtleHBsb3JpbmddKGh0dHBzOi8vZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vZXhwL2lzc3Vlcy8xKSB0aGUgdXNlIG9mIFtsaWJvcGVuYXBpLXZhbGlkYXRvcl0oaHR0cHM6Ly9naXRodWIuY29tL3BiMzNmL2xpYm9wZW5hcGktdmFsaWRhdG9yLykgZm9yIHJlcXVlc3QvcmVzcG9uc2UgdmFsaWRhdGlvbiBtaWRkbGV3YXJlCgojIyBJbXBsZW1lbnRpbmcgc2VjdXJpdHkKCklmIHlvdSdyZSB1c2luZyBhIHNwZWNpZmljYXRpb24gd2l0aCBbU2VjdXJpdHkgU2NoZW1lc10oaHR0cHM6Ly9zcGVjLm9wZW5hcGlzLm9yZy9vYXMvdjMuMC4zI3NlY3VyaXR5LXNjaGVtZS1vYmplY3QpIGFuZCBbU2VjdXJpdHkgUmVxdWlyZW1lbnRzXShodHRwczovL3NwZWMub3BlbmFwaXMub3JnL29hcy92My4wLjMjc2VjdXJpdHktcmVxdWlyZW1lbnQtb2JqZWN0KSwgeW91J2xsIHdhbnQgdG8gYXV0aGVudGljYXRlIGFuZCBhdXRob3JpemUgcmVxdWVzdHMuCgojIyMgT24gdGhlIHNlcnZlcgoKPiBbIU5PVEVdCj4gT3V0LW9mLXRoZS1ib3gsIHRoZSBzZXJ2ZXItc2lkZSBjb2RlIGdlbmVyYXRlZCBieSBgb2FwaS1jb2RlZ2VuYCBkb2VzIG5vdCBwcm92aWRlIHNlY3VyaXR5IHZhbGlkYXRpb24uCj4KPiBUbyBwZXJmb3JtIGF1dGhlbnRpY2F0aW9uLCB5b3Ugd2lsbCBuZWVkIHRvIHVzZSB0aGUgW3ZhbGlkYXRpb24gbWlkZGxld2FyZV0oI3JlcXVlc3QtcmVzcG9uc2UtdmFsaWRhdGlvbi1taWRkbGV3YXJlKS4KPgo+IEluIHRoZSBmdXR1cmUsIHdlIHBsYW4gdG8gW2ltcGxlbWVudCBzZXJ2ZXItc2lkZSB2YWxpZGF0aW9uIGluIHRoZSBnZW5lcmF0ZWQgY29kZV0oaHR0cHM6Ly9naXRodWIuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL2lzc3Vlcy8xNTI0KQoKVG8gc2VlIGhvdyB0aGlzIGNhbiB3b3JrLCBjaGVjayBvdXQgdGhlIFthdXRoZW50aWNhdGVkIEFQSSBleGFtcGxlXShleGFtcGxlcy9hdXRoZW50aWNhdGVkLWFwaS9lY2hvKS4KCiMjIyBPbiB0aGUgY2xpZW50CgpXaXRoIGEgZ2VuZXJhdGVkIGNsaWVudCwgeW91J2xsIHdhbnQgdG8gdXNlIHRoZSBjbGllbnQncyBnZW5lcmF0ZWQgYFdpdGhSZXF1ZXN0RWRpdG9yRm5gIGZ1bmN0aW9uIHRvIHBhc3MgaW4gYSBnaXZlbiByZXF1ZXN0IGVkaXRvciBgUmVxdWVzdEVkaXRvckZuYC4KCkZvciBpbnN0YW5jZToKCmBgYGdvCmltcG9ydCAoCgkiY29udGV4dCIKCSJmbXQiCgkibG9nIgoKCSJnaXRodWIuY29tL29hcGktY29kZWdlbi9vYXBpLWNvZGVnZW4vdjIvcGtnL3NlY3VyaXR5cHJvdmlkZXIiCikKCmZ1bmMgbWFpbigpIHsKCWJhc2ljQXV0aCwgZXJyIDo9IHNlY3VyaXR5cHJvdmlkZXIuTmV3U2VjdXJpdHlQcm92aWRlckJhc2ljQXV0aCgibXlfdXNlciIsICJteV9wYXNzIikKCWlmIGVyciAhPSBuaWwgewoJCWxvZy5GYXRhbChlcnIpCgl9CgoJY2xpZW50LCBlcnIgOj0gTmV3Q2xpZW50KCJodHRwczovLy4uLi4iLCBXaXRoUmVxdWVzdEVkaXRvckZuKGJhc2ljQXV0aC5JbnRlcmNlcHQpKQoJaWYgZXJyICE9IG5pbCB7CgkJbG9nLkZhdGFsKGVycikKCX0KCglyZXNwLCBlcnIgOj0gY2xpZW50LkdldENsaWVudChjb250ZXh0LlRPRE8oKSkKCWlmIGVyciAhPSBuaWwgewoJCWxvZy5GYXRhbChlcnIpCgl9CglmbXQuUHJpbnRmKCJyZXNwLlN0YXR1c0NvZGU6ICV2XG4iLCByZXNwLlN0YXR1c0NvZGUpCn0KYGBgCgpOb3RpY2UgdGhhdCB3ZSdyZSB1c2luZyBhIHByZS1idWlsdCBwcm92aWRlciBmcm9tIHRoZSBbYHBrZy9zZWN1cml0eXByb3ZpZGVyYCBwYWNrYWdlXShodHRwczovL3BrZy5nby5kZXYvZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vb2FwaS1jb2RlZ2VuL3YyL3BrZy9zZWN1cml0eXByb3ZpZGVyKSwgd2hpY2ggaGFzIHNvbWUgaW5idWlsdCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBvZiBhdXRoZW50aWNhdGlvbiwgdG9vLgoKIyMgQ3VzdG9tIGNvZGUgZ2VuZXJhdGlvbgoKSXQgaXMgcG9zc2libGUgdG8gZXh0ZW5kIHRoZSBpbmJ1aWx0IGNvZGUgZ2VuZXJhdGlvbiBmcm9tIGBvYXBpLWNvZGVnZW5gIHVzaW5nIEdvJ3MgYHRleHQvdGVtcGxhdGVgcy4KCllvdSBjYW4gc3BlY2lmeSwgdGhyb3VnaCB5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZSwgdGhlIGBvdXRwdXQtb3B0aW9ucy51c2VyLXRlbXBsYXRlc2Agc2V0dGluZyB0byBvdmVycmlkZSB0aGUgaW5idWlsdCB0ZW1wbGF0ZXMgYW5kIHVzZSBhIHVzZXItZGVmaW5lZCB0ZW1wbGF0ZS4KCj4gWyFOT1RFXQo+IEZpbGVuYW1lcyBnaXZlbiB0byB0aGUgYHVzZXItdGVtcGxhdGVzYCBjb25maWd1cmF0aW9uIG11c3QgKipleGFjdGx5KiogbWF0Y2ggdGhlIGZpbGVuYW1lIHRoYXQgYG9hcGktY29kZWdlbmAgaXMgbG9va2luZyBmb3IKCiMjIyBMb2NhbCBwYXRocwoKV2l0aGluIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlLCB5b3UgY2FuIHNwZWNpZnkgcmVsYXRpdmUgb3IgYWJzb2x1dGUgcGF0aHMgdG8gYSBmaWxlIHRvIHJlZmVyZW5jZSBmb3IgdGhlIHRlbXBsYXRlLCBzdWNoIGFzOgoKYGBgeWFtbAojIHlhbWwtbGFuZ3VhZ2Utc2VydmVyOiAkc2NoZW1hPWh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9kZWVwbWFwL29hcGktY29kZWdlbi9IRUFEL2NvbmZpZ3VyYXRpb24tc2NoZW1hLmpzb24KIyAuLi4Kb3V0cHV0LW9wdGlvbnM6CiAgdXNlci10ZW1wbGF0ZXM6CiAgICBjbGllbnQtd2l0aC1yZXNwb25zZXMudG1wbDogLi9jdXN0b20tdGVtcGxhdGUudG1wbAogICAgYWRkaXRpb25hbC1wcm9wZXJ0aWVzLnRtcGw6IC90bXAvZm9vLmJhcgogICAgdHlwZWRlZi50bXBsOiBuby1wcmVmaXgudG1wbApgYGAKCj4gWyFXQVJOXQo+IFdlIGRvIG5vdCBpbnRlcnBvbGF0ZSBgfmAgb3IgYCRIT01FYCAob3Igb3RoZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzKSBpbiBwYXRocyBnaXZlbgoKIyMjIEhUVFBTIHBhdGhzCgpJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBIVFRQUyBVUkxzLgoKPiBbIVdBUk5JTkddCj4gQWx0aG91Z2ggcG9zc2libGUsIHRoaXMgZG9lcyBsZWFkIHRvIGBvYXBpLWNvZGVnZW5gIGV4ZWN1dGlvbnMgbm90IG5lY2Vzc2FyaWx5IGJlaW5nIHJlcHJvZHVjaWJsZS4gSXQncyByZWNvbW1lbmRlZCB0byB2ZW5kb3IgKGNvcHkpIHRoZSBPcGVuQVBJIHNwZWMgaW50byB5b3VyIGNvZGViYXNlIGFuZCByZWZlcmVuY2UgaXQgbG9jYWxseQo+Cj4gU2VlIFt0aGlzIGJsb2cgcG9zdF0oaHR0cHM6Ly93d3cuanZ0Lm1lL3Bvc3RzLzIwMjQvMDQvMjcvZ2l0aHViLWFjdGlvbnMtdXBkYXRlLWZpbGUvKSBmb3IgYW4gZXhhbXBsZSBvZiBob3cgdG8gdXNlIEdpdEh1YiBBY3Rpb25zIHRvIG1hbmFnZSB0aGUgdXBkYXRlcyBvZiBmaWxlcyBhY3Jvc3MgcmVwb3MKPgo+IFRoaXMgd2lsbCBiZSBkaXNhYmxlZCBieSBkZWZhdWx0IChidXQgcG9zc2libGUgdG8gdHVybiBiYWNrIG9uIHZpYSBjb25maWd1cmF0aW9uKSBbaW4gdGhlIGZ1dHVyZV0oaHR0cHM6Ly9naXRodWIuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL2lzc3Vlcy8xNTY0KQoKVG8gdXNlIGl0LCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb246CgpgYGB5YW1sCiMgeWFtbC1sYW5ndWFnZS1zZXJ2ZXI6ICRzY2hlbWE9aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL0hFQUQvY29uZmlndXJhdGlvbi1zY2hlbWEuanNvbgojIC4uLgpvdXRwdXQtb3B0aW9uczoKICB1c2VyLXRlbXBsYXRlczoKICAgICMgVGhlIGZvbGxvd2luZyBhcmUgcmVmZXJlbmNpbmcgYSB2ZXJzaW9uIG9mIHRoZSBkZWZhdWx0IGNsaWVudC13aXRoLXJlc3BvbnNlcy50bXBsIGZpbGUsIGJ1dCBsb2FkZWQgaW4gdGhyb3VnaCBHaXRIdWIncyByYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tLiBUaGUgZ2VuZXJhbCBmb3JtIHRvIHVzZSByYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tIGlzIGFzIGZvbGxvd3MgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzx1c2VybmFtZT4vPHByb2plY3Q+Lzxjb21taXRpc2g+L3BhdGgvdG8vdGVtcGxhdGUvdGVtcGxhdGUudG1wbAoKICAgICMgQWx0ZXJuYXRpdmVseSB1c2luZyByYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tIHdpdGggYSBoYXNoCiAgICBjbGllbnQtd2l0aC1yZXNwb25zZXMudG1wbDogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL2FkNWVhZGE0ZjNjY2MyOGE4ODQ3N2NlZjYyZWEyMWMxN2ZjOGFhMDEvcGtnL2NvZGVnZW4vdGVtcGxhdGVzL2NsaWVudC13aXRoLXJlc3BvbnNlcy50bXBsCiAgICAjIEFsdGVybmF0aXZlbHkgdXNpbmcgcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSB3aXRoIGEgdGFnCiAgICBjbGllbnQtd2l0aC1yZXNwb25zZXMudG1wbDogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL3YyLjEuMC9wa2cvY29kZWdlbi90ZW1wbGF0ZXMvY2xpZW50LXdpdGgtcmVzcG9uc2VzLnRtcGwKICAgICMgQWx0ZXJuYXRpdmVseSB1c2luZyByYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tIHdpdGggYSBicmFuY2gKICAgIGNsaWVudC13aXRoLXJlc3BvbnNlcy50bXBsOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZGVlcG1hcC9vYXBpLWNvZGVnZW4vbWFzdGVyL3BrZy9jb2RlZ2VuL3RlbXBsYXRlcy9jbGllbnQtd2l0aC1yZXNwb25zZXMudG1wbApgYGAKCj4gWyFXQVJOSU5HXQo+IElmIHVzaW5nIFVSTHMgdGhhdCBwdWxsIGxvY2F0aW9ucyBmcm9tIGEgR2l0IHJlcG8sIHN1Y2ggYXMgYHJhdy5naXRodWJ1c2VyY29udGVudC5jb21gLCBpdCBpcyBzdHJvbmdseSBlbmNvdXJhZ2VkIHRvIHVzZSBhIHRhZyBvciBhIHJhdyBjb21taXQgaGFzaCBpbnN0ZWFkIG9mIGEgYnJhbmNoIGxpa2UgYG1haW5gLiBUcmFja2luZyBhIGJyYW5jaCBjYW4gbGVhZCB0byB1bmV4cGVjdGVkIEFQSSBkcmlmdCwgYW5kIGxvc3Mgb2YgdGhlIGFiaWxpdHkgdG8gcmVwcm9kdWNlIGEgYnVpbGQuCgojIyMgSW5saW5lIHRlbXBsYXRlCgpJdCdzIGFsc28gcG9zc2libGUgdG8gc2V0IHRoZSB0ZW1wbGF0ZXMgaW5saW5lIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGU6CgpgYGB5YW1sCiMgeWFtbC1sYW5ndWFnZS1zZXJ2ZXI6ICRzY2hlbWE9aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL0hFQUQvY29uZmlndXJhdGlvbi1zY2hlbWEuanNvbgojIC4uLgpvdXRwdXQtb3B0aW9uczoKICB1c2VyLXRlbXBsYXRlczoKICAgICMgTk9URSB0aGUgdXNlIG9mIHRoZSBgfGAgKHBpcGUgc3ltYm9sKSBoZXJlIHRvIGRlbm90ZSB0aGF0IHRoaXMgaXMgYQogICAgIyBtdWx0aS1saW5lIHN0YXRlbWVudCB0aGF0IHNob3VsZCBwcmVzZXJ2ZSBuZXdsaW5lcy4gTW9yZSByZWFkaW5nOgogICAgIyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTg3MDgxNTYvMjI1NzAzOCBhbmQKICAgICMgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE1MzY1Mjk2LzIyNTcwMzgKICAgIGNsaWVudC13aXRoLXJlc3BvbnNlcy50bXBsOiB8CiAgICAgICAgLy8gQ2xpZW50V2l0aFJlc3BvbnNlcyBidWlsZHMgb24gQ2xpZW50SW50ZXJmYWNlIHRvIG9mZmVyIHJlc3BvbnNlIHBheWxvYWRzCiAgICAgICAgdHlwZSBDbGllbnRXaXRoUmVzcG9uc2VzIHN0cnVjdCB7CiAgICAgICAgICAgIENsaWVudEludGVyZmFjZQogICAgICAgIH0KICAgICAgICAuLi4KYGBgCgojIyMgVXNpbmcgdGhlIEdvIHBhY2thZ2UKCkFsdGVybmF0aXZlbHksIHlvdSBhcmUgYWJsZSB0byB1c2UgdGhlIHVuZGVybHlpbmcgY29kZSBnZW5lcmF0aW9uIGFzIGEgcGFja2FnZSwgd2hpY2ggW3dpbGwgYmUgZG9jdW1lbnRlZCBpbiB0aGUgZnV0dXJlXShodHRwczovL2dpdGh1Yi5jb20vZGVlcG1hcC9vYXBpLWNvZGVnZW4vaXNzdWVzLzE0ODcpLgoKIyMgQWRkaXRpb25hbCBQcm9wZXJ0aWVzIChgYWRkaXRpb25hbFByb3BlcnRpZXNgKQoKW09wZW5BUEkgU2NoZW1hc10oaHR0cHM6Ly9zcGVjLm9wZW5hcGlzLm9yZy9vYXMvdjMuMC4zLmh0bWwjc2NoZW1hLW9iamVjdCkgaW1wbGljaXRseSBhY2NlcHQgYGFkZGl0aW9uYWxQcm9wZXJ0aWVzYCwgbWVhbmluZyB0aGF0IGFueSBmaWVsZHMgcHJvdmlkZWQsIGJ1dCBub3QgZXhwbGljaXRseSBkZWZpbmVkIHZpYSBwcm9wZXJ0aWVzIG9uIHRoZSBzY2hlbWEgYXJlIGFjY2VwdGVkIGFzIGlucHV0LCBhbmQgcHJvcGFnYXRlZC4gV2hlbiB1bnNwZWNpZmllZCwgT3BlbkFQSSBkZWZpbmVzIHRoYXQgdGhlIGBhZGRpdGlvbmFsUHJvcGVydGllc2AgZmllbGQgaXMgYXNzdW1lZCB0byBiZSBgdHJ1ZWAuCgpGb3Igc2ltcGxpY2l0eSwgYW5kIHRvIHJlbW92ZSBhIGZhaXIgYml0IG9mIGR1cGxpY2F0aW9uIGFuZCBib2lsZXJwbGF0ZSwgYG9hcGktY29kZWdlbmAgZGVjaWRlcyB0byBpZ25vcmUgdGhlIGltcGxpY2l0IGBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZWAsIGFuZCBpbnN0ZWFkIHJlcXVpcmVzIHlvdSB0byBzcGVjaWZ5IHRoZSBgYWRkaXRpb25hbFByb3BlcnRpZXNgIGtleSB0byBnZW5lcmF0ZSB0aGUgYm9pbGVycGxhdGUuCgo+IFshTk9URV0KPiBJbiB0aGUgZnV0dXJlIFt0aGlzIHdpbGwgYmUgcG9zc2libGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9kZWVwbWFwL29hcGktY29kZWdlbi9pc3N1ZXMvMTUxNCkgdG8gZGlzYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHksIGFuZCBob25vdXIgdGhlIGltcGxpY2l0IGBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZWAKCkJlbG93IHlvdSBjYW4gc2VlIHNvbWUgZXhhbXBsZXMgb2YgaG93IGBhZGRpdGlvbmFsUHJvcGVydGllc2AgYWZmZWN0cyB0aGUgZ2VuZXJhdGVkIGNvZGUuCgojIyMgSW1wbGljaXQgYGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlYCAvIG5vIGBhZGRpdGlvbmFsUHJvcGVydGllc2Agc2V0CgpgYGB5YW1sCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgIFRoaW5nOgogICAgICB0eXBlOiBvYmplY3QKICAgICAgcmVxdWlyZWQ6CiAgICAgICAgLSBpZAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIGlkOgogICAgICAgICAgdHlwZTogaW50ZWdlcgogICAgICAjIGltcGxpY2l0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlCmBgYAoKV2lsbCBnZW5lcmF0ZToKCmBgYGdvCi8vIFRoaW5nIGRlZmluZXMgbW9kZWwgZm9yIFRoaW5nLgp0eXBlIFRoaW5nIHN0cnVjdCB7CglJZCBpbnQgYGpzb246ImlkImAKfQoKLy8gd2l0aCBubyBnZW5lcmF0ZWQgYm9pbGVycGxhdGUgbm9yIHRoZSBgQWRkaXRpb25hbFByb3BlcnRpZXNgIGZpZWxkCmBgYAoKIyMjIEV4cGxpY2l0IGBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZWAKCmBgYHlhbWwKY29tcG9uZW50czoKICBzY2hlbWFzOgogICAgVGhpbmc6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICByZXF1aXJlZDoKICAgICAgICAtIGlkCiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgaWQ6CiAgICAgICAgICB0eXBlOiBpbnRlZ2VyCiAgICAgICMgZXhwbGljaXQgdHJ1ZQogICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZQpgYGAKCldpbGwgZ2VuZXJhdGU6CgpgYGBnbwovLyBUaGluZyBkZWZpbmVzIG1vZGVsIGZvciBUaGluZy4KdHlwZSBUaGluZyBzdHJ1Y3QgewoJSWQgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICBganNvbjoiaWQiYAoJQWRkaXRpb25hbFByb3BlcnRpZXMgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSBganNvbjoiLSJgCn0KCi8vIHdpdGggZ2VuZXJhdGVkIGJvaWxlcnBsYXRlIGJlbG93CmBgYAoKPGRldGFpbHM+Cgo8c3VtbWFyeT5Cb2lsZXJwbGF0ZTwvc3VtbWFyeT4KCmBgYGdvCgovLyBHZXR0ZXIgZm9yIGFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgVGhpbmcuIFJldHVybnMgdGhlIHNwZWNpZmllZAovLyBlbGVtZW50IGFuZCB3aGV0aGVyIGl0IHdhcyBmb3VuZApmdW5jIChhIFRoaW5nKSBHZXQoZmllbGROYW1lIHN0cmluZykgKHZhbHVlIGludGVyZmFjZXt9LCBmb3VuZCBib29sKSB7CglpZiBhLkFkZGl0aW9uYWxQcm9wZXJ0aWVzICE9IG5pbCB7CgkJdmFsdWUsIGZvdW5kID0gYS5BZGRpdGlvbmFsUHJvcGVydGllc1tmaWVsZE5hbWVdCgl9CglyZXR1cm4KfQoKLy8gU2V0dGVyIGZvciBhZGRpdGlvbmFsIHByb3BlcnRpZXMgZm9yIFRoaW5nCmZ1bmMgKGEgKlRoaW5nKSBTZXQoZmllbGROYW1lIHN0cmluZywgdmFsdWUgaW50ZXJmYWNle30pIHsKCWlmIGEuQWRkaXRpb25hbFByb3BlcnRpZXMgPT0gbmlsIHsKCQlhLkFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gbWFrZShtYXBbc3RyaW5nXWludGVyZmFjZXt9KQoJfQoJYS5BZGRpdGlvbmFsUHJvcGVydGllc1tmaWVsZE5hbWVdID0gdmFsdWUKfQoKLy8gT3ZlcnJpZGUgZGVmYXVsdCBKU09OIGhhbmRsaW5nIGZvciBUaGluZyB0byBoYW5kbGUgQWRkaXRpb25hbFByb3BlcnRpZXMKZnVuYyAoYSAqVGhpbmcpIFVubWFyc2hhbEpTT04oYiBbXWJ5dGUpIGVycm9yIHsKCW9iamVjdCA6PSBtYWtlKG1hcFtzdHJpbmddanNvbi5SYXdNZXNzYWdlKQoJZXJyIDo9IGpzb24uVW5tYXJzaGFsKGIsICZvYmplY3QpCglpZiBlcnIgIT0gbmlsIHsKCQlyZXR1cm4gZXJyCgl9CgoJaWYgcmF3LCBmb3VuZCA6PSBvYmplY3RbImlkIl07IGZvdW5kIHsKCQllcnIgPSBqc29uLlVubWFyc2hhbChyYXcsICZhLklkKQoJCWlmIGVyciAhPSBuaWwgewoJCQlyZXR1cm4gZm10LkVycm9yZigiZXJyb3IgcmVhZGluZyAnaWQnOiAldyIsIGVycikKCQl9CgkJZGVsZXRlKG9iamVjdCwgImlkIikKCX0KCglpZiBsZW4ob2JqZWN0KSAhPSAwIHsKCQlhLkFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gbWFrZShtYXBbc3RyaW5nXWludGVyZmFjZXt9KQoJCWZvciBmaWVsZE5hbWUsIGZpZWxkQnVmIDo9IHJhbmdlIG9iamVjdCB7CgkJCXZhciBmaWVsZFZhbCBpbnRlcmZhY2V7fQoJCQllcnIgOj0ganNvbi5Vbm1hcnNoYWwoZmllbGRCdWYsICZmaWVsZFZhbCkKCQkJaWYgZXJyICE9IG5pbCB7CgkJCQlyZXR1cm4gZm10LkVycm9yZigiZXJyb3IgdW5tYXJzaGFsaW5nIGZpZWxkICVzOiAldyIsIGZpZWxkTmFtZSwgZXJyKQoJCQl9CgkJCWEuQWRkaXRpb25hbFByb3BlcnRpZXNbZmllbGROYW1lXSA9IGZpZWxkVmFsCgkJfQoJfQoJcmV0dXJuIG5pbAp9CgovLyBPdmVycmlkZSBkZWZhdWx0IEpTT04gaGFuZGxpbmcgZm9yIFRoaW5nIHRvIGhhbmRsZSBBZGRpdGlvbmFsUHJvcGVydGllcwpmdW5jIChhIFRoaW5nKSBNYXJzaGFsSlNPTigpIChbXWJ5dGUsIGVycm9yKSB7Cgl2YXIgZXJyIGVycm9yCglvYmplY3QgOj0gbWFrZShtYXBbc3RyaW5nXWpzb24uUmF3TWVzc2FnZSkKCglvYmplY3RbImlkIl0sIGVyciA9IGpzb24uTWFyc2hhbChhLklkKQoJaWYgZXJyICE9IG5pbCB7CgkJcmV0dXJuIG5pbCwgZm10LkVycm9yZigiZXJyb3IgbWFyc2hhbGluZyAnaWQnOiAldyIsIGVycikKCX0KCglmb3IgZmllbGROYW1lLCBmaWVsZCA6PSByYW5nZSBhLkFkZGl0aW9uYWxQcm9wZXJ0aWVzIHsKCQlvYmplY3RbZmllbGROYW1lXSwgZXJyID0ganNvbi5NYXJzaGFsKGZpZWxkKQoJCWlmIGVyciAhPSBuaWwgewoJCQlyZXR1cm4gbmlsLCBmbXQuRXJyb3JmKCJlcnJvciBtYXJzaGFsaW5nICclcyc6ICV3IiwgZmllbGROYW1lLCBlcnIpCgkJfQoJfQoJcmV0dXJuIGpzb24uTWFyc2hhbChvYmplY3QpCn0KYGBgCgo8L2RldGFpbHM+CgoKIyMjIGBhZGRpdGlvbmFsUHJvcGVydGllc2AgYXMgYGludGVnZXJgcwoKYGBgeWFtbApjb21wb25lbnRzOgogIHNjaGVtYXM6CiAgICBUaGluZzoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gaWQKICAgICAgcHJvcGVydGllczoKICAgICAgICBpZDoKICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgIyBzaW1wbGUgdHlwZQogICAgICBhZGRpdGlvbmFsUHJvcGVydGllczoKICAgICAgICB0eXBlOiBpbnRlZ2VyCmBgYAoKV2lsbCBnZW5lcmF0ZToKCmBgYGdvCi8vIFRoaW5nIGRlZmluZXMgbW9kZWwgZm9yIFRoaW5nLgp0eXBlIFRoaW5nIHN0cnVjdCB7CglJZCAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICBganNvbjoiaWQiYAoJQWRkaXRpb25hbFByb3BlcnRpZXMgbWFwW3N0cmluZ11pbnQgYGpzb246Ii0iYAp9CgovLyB3aXRoIGdlbmVyYXRlZCBib2lsZXJwbGF0ZSBiZWxvdwpgYGAKCjxkZXRhaWxzPgoKPHN1bW1hcnk+Qm9pbGVycGxhdGU8L3N1bW1hcnk+CgpgYGBnbwovLyBHZXR0ZXIgZm9yIGFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgVGhpbmcuIFJldHVybnMgdGhlIHNwZWNpZmllZAovLyBlbGVtZW50IGFuZCB3aGV0aGVyIGl0IHdhcyBmb3VuZApmdW5jIChhIFRoaW5nKSBHZXQoZmllbGROYW1lIHN0cmluZykgKHZhbHVlIGludCwgZm91bmQgYm9vbCkgewoJaWYgYS5BZGRpdGlvbmFsUHJvcGVydGllcyAhPSBuaWwgewoJCXZhbHVlLCBmb3VuZCA9IGEuQWRkaXRpb25hbFByb3BlcnRpZXNbZmllbGROYW1lXQoJfQoJcmV0dXJuCn0KCi8vIFNldHRlciBmb3IgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGZvciBUaGluZwpmdW5jIChhICpUaGluZykgU2V0KGZpZWxkTmFtZSBzdHJpbmcsIHZhbHVlIGludCkgewoJaWYgYS5BZGRpdGlvbmFsUHJvcGVydGllcyA9PSBuaWwgewoJCWEuQWRkaXRpb25hbFByb3BlcnRpZXMgPSBtYWtlKG1hcFtzdHJpbmddaW50KQoJfQoJYS5BZGRpdGlvbmFsUHJvcGVydGllc1tmaWVsZE5hbWVdID0gdmFsdWUKfQoKLy8gT3ZlcnJpZGUgZGVmYXVsdCBKU09OIGhhbmRsaW5nIGZvciBUaGluZyB0byBoYW5kbGUgQWRkaXRpb25hbFByb3BlcnRpZXMKZnVuYyAoYSAqVGhpbmcpIFVubWFyc2hhbEpTT04oYiBbXWJ5dGUpIGVycm9yIHsKCW9iamVjdCA6PSBtYWtlKG1hcFtzdHJpbmddanNvbi5SYXdNZXNzYWdlKQoJZXJyIDo9IGpzb24uVW5tYXJzaGFsKGIsICZvYmplY3QpCglpZiBlcnIgIT0gbmlsIHsKCQlyZXR1cm4gZXJyCgl9CgoJaWYgcmF3LCBmb3VuZCA6PSBvYmplY3RbImlkIl07IGZvdW5kIHsKCQllcnIgPSBqc29uLlVubWFyc2hhbChyYXcsICZhLklkKQoJCWlmIGVyciAhPSBuaWwgewoJCQlyZXR1cm4gZm10LkVycm9yZigiZXJyb3IgcmVhZGluZyAnaWQnOiAldyIsIGVycikKCQl9CgkJZGVsZXRlKG9iamVjdCwgImlkIikKCX0KCglpZiBsZW4ob2JqZWN0KSAhPSAwIHsKCQlhLkFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gbWFrZShtYXBbc3RyaW5nXWludCkKCQlmb3IgZmllbGROYW1lLCBmaWVsZEJ1ZiA6PSByYW5nZSBvYmplY3QgewoJCQl2YXIgZmllbGRWYWwgaW50CgkJCWVyciA6PSBqc29uLlVubWFyc2hhbChmaWVsZEJ1ZiwgJmZpZWxkVmFsKQoJCQlpZiBlcnIgIT0gbmlsIHsKCQkJCXJldHVybiBmbXQuRXJyb3JmKCJlcnJvciB1bm1hcnNoYWxpbmcgZmllbGQgJXM6ICV3IiwgZmllbGROYW1lLCBlcnIpCgkJCX0KCQkJYS5BZGRpdGlvbmFsUHJvcGVydGllc1tmaWVsZE5hbWVdID0gZmllbGRWYWwKCQl9Cgl9CglyZXR1cm4gbmlsCn0KCi8vIE92ZXJyaWRlIGRlZmF1bHQgSlNPTiBoYW5kbGluZyBmb3IgVGhpbmcgdG8gaGFuZGxlIEFkZGl0aW9uYWxQcm9wZXJ0aWVzCmZ1bmMgKGEgVGhpbmcpIE1hcnNoYWxKU09OKCkgKFtdYnl0ZSwgZXJyb3IpIHsKCXZhciBlcnIgZXJyb3IKCW9iamVjdCA6PSBtYWtlKG1hcFtzdHJpbmddanNvbi5SYXdNZXNzYWdlKQoKCW9iamVjdFsiaWQiXSwgZXJyID0ganNvbi5NYXJzaGFsKGEuSWQpCglpZiBlcnIgIT0gbmlsIHsKCQlyZXR1cm4gbmlsLCBmbXQuRXJyb3JmKCJlcnJvciBtYXJzaGFsaW5nICdpZCc6ICV3IiwgZXJyKQoJfQoKCWZvciBmaWVsZE5hbWUsIGZpZWxkIDo9IHJhbmdlIGEuQWRkaXRpb25hbFByb3BlcnRpZXMgewoJCW9iamVjdFtmaWVsZE5hbWVdLCBlcnIgPSBqc29uLk1hcnNoYWwoZmllbGQpCgkJaWYgZXJyICE9IG5pbCB7CgkJCXJldHVybiBuaWwsIGZtdC5FcnJvcmYoImVycm9yIG1hcnNoYWxpbmcgJyVzJzogJXciLCBmaWVsZE5hbWUsIGVycikKCQl9Cgl9CglyZXR1cm4ganNvbi5NYXJzaGFsKG9iamVjdCkKfQpgYGAKCjwvZGV0YWlscz4KCiMjIyBgYWRkaXRpb25hbFByb3BlcnRpZXNgIHdpdGggYW4gb2JqZWN0CgpgYGB5YW1sCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgIFRoaW5nOgogICAgICB0eXBlOiBvYmplY3QKICAgICAgcmVxdWlyZWQ6CiAgICAgICAgLSBpZAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIGlkOgogICAgICAgICAgdHlwZTogaW50ZWdlcgogICAgICAjIG9iamVjdAogICAgICBhZGRpdGlvbmFsUHJvcGVydGllczoKICAgICAgICB0eXBlOiBvYmplY3QKICAgICAgICBwcm9wZXJ0aWVzOgogICAgICAgICAgZm9vOgogICAgICAgICAgICB0eXBlOiBzdHJpbmcKYGBgCgpXaWxsIGdlbmVyYXRlOgoKYGBgZ28KLy8gVGhpbmcgZGVmaW5lcyBtb2RlbCBmb3IgVGhpbmcuCnR5cGUgVGhpbmcgc3RydWN0IHsKCUlkICAgICAgICAgICAgICAgICAgIGludCBganNvbjoiaWQiYAoJQWRkaXRpb25hbFByb3BlcnRpZXMgbWFwW3N0cmluZ11zdHJ1Y3QgewoJCUZvbyAqc3RyaW5nIGBqc29uOiJmb28sb21pdGVtcHR5ImAKCX0gYGpzb246Ii0iYAp9CgovLyB3aXRoIGdlbmVyYXRlZCBib2lsZXJwbGF0ZSBiZWxvdwpgYGAKCjxkZXRhaWxzPgoKPHN1bW1hcnk+Qm9pbGVycGxhdGU8L3N1bW1hcnk+CgpgYGBnbwovLyBHZXR0ZXIgZm9yIGFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgVGhpbmcuIFJldHVybnMgdGhlIHNwZWNpZmllZAovLyBlbGVtZW50IGFuZCB3aGV0aGVyIGl0IHdhcyBmb3VuZApmdW5jIChhIFRoaW5nKSBHZXQoZmllbGROYW1lIHN0cmluZykgKHZhbHVlIHN0cnVjdCB7CglGb28gKnN0cmluZyBganNvbjoiZm9vLG9taXRlbXB0eSJgCn0sIGZvdW5kIGJvb2wpIHsKCWlmIGEuQWRkaXRpb25hbFByb3BlcnRpZXMgIT0gbmlsIHsKCQl2YWx1ZSwgZm91bmQgPSBhLkFkZGl0aW9uYWxQcm9wZXJ0aWVzW2ZpZWxkTmFtZV0KCX0KCXJldHVybgp9CgovLyBTZXR0ZXIgZm9yIGFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgVGhpbmcKZnVuYyAoYSAqVGhpbmcpIFNldChmaWVsZE5hbWUgc3RyaW5nLCB2YWx1ZSBzdHJ1Y3QgewoJRm9vICpzdHJpbmcgYGpzb246ImZvbyxvbWl0ZW1wdHkiYAp9KSB7CglpZiBhLkFkZGl0aW9uYWxQcm9wZXJ0aWVzID09IG5pbCB7CgkJYS5BZGRpdGlvbmFsUHJvcGVydGllcyA9IG1ha2UobWFwW3N0cmluZ11zdHJ1Y3QgewoJCQlGb28gKnN0cmluZyBganNvbjoiZm9vLG9taXRlbXB0eSJgCgkJfSkKCX0KCWEuQWRkaXRpb25hbFByb3BlcnRpZXNbZmllbGROYW1lXSA9IHZhbHVlCn0KCi8vIE92ZXJyaWRlIGRlZmF1bHQgSlNPTiBoYW5kbGluZyBmb3IgVGhpbmcgdG8gaGFuZGxlIEFkZGl0aW9uYWxQcm9wZXJ0aWVzCmZ1bmMgKGEgKlRoaW5nKSBVbm1hcnNoYWxKU09OKGIgW11ieXRlKSBlcnJvciB7CglvYmplY3QgOj0gbWFrZShtYXBbc3RyaW5nXWpzb24uUmF3TWVzc2FnZSkKCWVyciA6PSBqc29uLlVubWFyc2hhbChiLCAmb2JqZWN0KQoJaWYgZXJyICE9IG5pbCB7CgkJcmV0dXJuIGVycgoJfQoKCWlmIHJhdywgZm91bmQgOj0gb2JqZWN0WyJpZCJdOyBmb3VuZCB7CgkJZXJyID0ganNvbi5Vbm1hcnNoYWwocmF3LCAmYS5JZCkKCQlpZiBlcnIgIT0gbmlsIHsKCQkJcmV0dXJuIGZtdC5FcnJvcmYoImVycm9yIHJlYWRpbmcgJ2lkJzogJXciLCBlcnIpCgkJfQoJCWRlbGV0ZShvYmplY3QsICJpZCIpCgl9CgoJaWYgbGVuKG9iamVjdCkgIT0gMCB7CgkJYS5BZGRpdGlvbmFsUHJvcGVydGllcyA9IG1ha2UobWFwW3N0cmluZ11zdHJ1Y3QgewoJCQlGb28gKnN0cmluZyBganNvbjoiZm9vLG9taXRlbXB0eSJgCgkJfSkKCQlmb3IgZmllbGROYW1lLCBmaWVsZEJ1ZiA6PSByYW5nZSBvYmplY3QgewoJCQl2YXIgZmllbGRWYWwgc3RydWN0IHsKCQkJCUZvbyAqc3RyaW5nIGBqc29uOiJmb28sb21pdGVtcHR5ImAKCQkJfQoJCQllcnIgOj0ganNvbi5Vbm1hcnNoYWwoZmllbGRCdWYsICZmaWVsZFZhbCkKCQkJaWYgZXJyICE9IG5pbCB7CgkJCQlyZXR1cm4gZm10LkVycm9yZigiZXJyb3IgdW5tYXJzaGFsaW5nIGZpZWxkICVzOiAldyIsIGZpZWxkTmFtZSwgZXJyKQoJCQl9CgkJCWEuQWRkaXRpb25hbFByb3BlcnRpZXNbZmllbGROYW1lXSA9IGZpZWxkVmFsCgkJfQoJfQoJcmV0dXJuIG5pbAp9CgovLyBPdmVycmlkZSBkZWZhdWx0IEpTT04gaGFuZGxpbmcgZm9yIFRoaW5nIHRvIGhhbmRsZSBBZGRpdGlvbmFsUHJvcGVydGllcwpmdW5jIChhIFRoaW5nKSBNYXJzaGFsSlNPTigpIChbXWJ5dGUsIGVycm9yKSB7Cgl2YXIgZXJyIGVycm9yCglvYmplY3QgOj0gbWFrZShtYXBbc3RyaW5nXWpzb24uUmF3TWVzc2FnZSkKCglvYmplY3RbImlkIl0sIGVyciA9IGpzb24uTWFyc2hhbChhLklkKQoJaWYgZXJyICE9IG5pbCB7CgkJcmV0dXJuIG5pbCwgZm10LkVycm9yZigiZXJyb3IgbWFyc2hhbGluZyAnaWQnOiAldyIsIGVycikKCX0KCglmb3IgZmllbGROYW1lLCBmaWVsZCA6PSByYW5nZSBhLkFkZGl0aW9uYWxQcm9wZXJ0aWVzIHsKCQlvYmplY3RbZmllbGROYW1lXSwgZXJyID0ganNvbi5NYXJzaGFsKGZpZWxkKQoJCWlmIGVyciAhPSBuaWwgewoJCQlyZXR1cm4gbmlsLCBmbXQuRXJyb3JmKCJlcnJvciBtYXJzaGFsaW5nICclcyc6ICV3IiwgZmllbGROYW1lLCBlcnIpCgkJfQoJfQoJcmV0dXJuIGpzb24uTWFyc2hhbChvYmplY3QpCn0KYGBgCgo8L2RldGFpbHM+CgojIyBDaGFuZ2luZyB0aGUgbmFtZXMgb2YgZ2VuZXJhdGVkIHR5cGVzCgpBcyBvZiBgb2FwaS1jb2RlZ2VuYCB2Mi4yLjAsIGl0IGlzIG5vdyBwb3NzaWJsZSB0byB1c2UgdGhlIGBvdXRwdXQtb3B0aW9uc2AgY29uZmlndXJhdGlvbidzIGBuYW1lLW5vcm1hbGl6ZXJgIHRvIGRlZmluZSB0aGUgbG9naWMgZm9yIGhvdyB0byBjb252ZXJ0IGFuIE9wZW5BUEkgbmFtZSAoaS5lLiBhbiBPcGVyYXRpb24gSUQgb3IgYSBTY2hlbWEgbmFtZSkgYW5kIGNvbnN0cnVjdCBhIEdvIHR5cGUgbmFtZS4KCjxkZXRhaWxzPgoKPHN1bW1hcnk+RXhhbXBsZSwgdXNpbmcgZGVmYXVsdCBjb25maWd1cmF0aW9uPC9zdW1tYXJ5PgoKQnkgZGVmYXVsdCwgYG9hcGktY29kZWdlbmAgd2lsbCBwZXJmb3JtIGNhbWVsLWNhc2UgY29udmVyc2lvbiwgc28gZm9yIGEgc3BlYyBzdWNoIGFzOgoKYGBgeWFtbApvcGVuYXBpOiAiMy4wLjAiCmluZm86CiAgdmVyc2lvbjogMS4wLjAKICB0aXRsZTogRXhhbXBsZSBjb2RlIGZvciB0aGUgYG5hbWUtbm9ybWFsaXplcmAgb3V0cHV0IG9wdGlvbgpwYXRoczoKICAvYXBpL3BldHMve3BldElkfToKICAgIGdldDoKICAgICAgc3VtbWFyeTogR2V0IHBldCBnaXZlbiBpZGVudGlmaWVyLgogICAgICBvcGVyYXRpb25JZDogZ2V0SHR0cFBldAogICAgICBwYXJhbWV0ZXJzOgogICAgICAtIG5hbWU6IHBldElkCiAgICAgICAgaW46IHBhdGgKICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgIHNjaGVtYToKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICByZXNwb25zZXM6CiAgICAgICAgJzIwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogdmFsaWQgcGV0CiAgICAgICAgICBjb250ZW50OgogICAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9QZXQnCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgIFBldDoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gdXVpZAogICAgICAgIC0gbmFtZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIHV1aWQ6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgIGRlc2NyaXB0aW9uOiBUaGUgcGV0IHV1aWQuCiAgICAgICAgbmFtZToKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgZGVzY3JpcHRpb246IFRoZSBuYW1lIG9mIHRoZSBwZXQuCiAgICBFcnJvcjoKICAgICAgcmVxdWlyZWQ6CiAgICAgICAgLSBjb2RlCiAgICAgICAgLSBtZXNzYWdlCiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgY29kZToKICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAgIGZvcm1hdDogaW50MzIKICAgICAgICAgIGRlc2NyaXB0aW9uOiBFcnJvciBjb2RlCiAgICAgICAgbWVzc2FnZToKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgZGVzY3JpcHRpb246IEVycm9yIG1lc3NhZ2UKICAgIE9uZU9mMnRoaW5nczoKICAgICAgZGVzY3JpcHRpb246ICJOb3RpY2UgdGhhdCB0aGUgYHRoaW5nc2AgaXMgbm90IGNhcGl0YWxpc2VkIgogICAgICBvbmVPZjoKICAgICAgICAtIHR5cGU6IG9iamVjdAogICAgICAgICAgcmVxdWlyZWQ6CiAgICAgICAgICAgIC0gaWQKICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgIGlkOgogICAgICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAtIHR5cGU6IG9iamVjdAogICAgICAgICAgcmVxdWlyZWQ6CiAgICAgICAgICAgIC0gaWQKICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgIGlkOgogICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgIGZvcm1hdDogdXVpZApgYGAKClRoaXMgd2lsbCBwcm9kdWNlOgoKYGBgZ28KLy8gT25lT2YydGhpbmdzIE5vdGljZSB0aGF0IHRoZSBgdGhpbmdzYCBpcyBub3QgY2FwaXRhbGlzZWQKdHlwZSBPbmVPZjJ0aGluZ3Mgc3RydWN0IHsKCXVuaW9uIGpzb24uUmF3TWVzc2FnZQp9CgovLyBQZXQgZGVmaW5lcyBtb2RlbCBmb3IgUGV0Lgp0eXBlIFBldCBzdHJ1Y3QgewoJLy8gTmFtZSBUaGUgbmFtZSBvZiB0aGUgcGV0LgoJTmFtZSBzdHJpbmcgYGpzb246Im5hbWUiYAoKCS8vIFV1aWQgVGhlIHBldCB1dWlkLgoJVXVpZCBzdHJpbmcgYGpzb246InV1aWQiYAp9CgovLyBUaGUgaW50ZXJmYWNlIHNwZWNpZmljYXRpb24gZm9yIHRoZSBjbGllbnQgYWJvdmUuCnR5cGUgQ2xpZW50SW50ZXJmYWNlIGludGVyZmFjZSB7CgkvLyBHZXRIdHRwUGV0IHJlcXVlc3QKCUdldEh0dHBQZXQoY3R4IGNvbnRleHQuQ29udGV4dCwgcGV0SWQgc3RyaW5nLCByZXFFZGl0b3JzIC4uLlJlcXVlc3RFZGl0b3JGbikgKCpodHRwLlJlc3BvbnNlLCBlcnJvcikKfQpgYGAKCjwvZGV0YWlscz4KCjxkZXRhaWxzPgoKPHN1bW1hcnk+RXhhbXBsZSwgdXNpbmcgPGNvZGU+VG9DYW1lbENhc2VXaXRoSW5pdGlhbGlzbXM8L2NvZGU+PC9zdW1tYXJ5PgoKQnkgZGVmYXVsdCwgYG9hcGktY29kZWdlbmAgd2lsbCBwZXJmb3JtIGNhbWVsLWNhc2UgY29udmVyc2lvbiwgc28gZm9yIGEgc3BlYyBzdWNoIGFzOgoKYGBgeWFtbApvcGVuYXBpOiAiMy4wLjAiCmluZm86CiAgdmVyc2lvbjogMS4wLjAKICB0aXRsZTogRXhhbXBsZSBjb2RlIGZvciB0aGUgYG5hbWUtbm9ybWFsaXplcmAgb3V0cHV0IG9wdGlvbgpwYXRoczoKICAvYXBpL3BldHMve3BldElkfToKICAgIGdldDoKICAgICAgc3VtbWFyeTogR2V0IHBldCBnaXZlbiBpZGVudGlmaWVyLgogICAgICBvcGVyYXRpb25JZDogZ2V0SHR0cFBldAogICAgICBwYXJhbWV0ZXJzOgogICAgICAtIG5hbWU6IHBldElkCiAgICAgICAgaW46IHBhdGgKICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgIHNjaGVtYToKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICByZXNwb25zZXM6CiAgICAgICAgJzIwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogdmFsaWQgcGV0CiAgICAgICAgICBjb250ZW50OgogICAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9QZXQnCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgIFBldDoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gdXVpZAogICAgICAgIC0gbmFtZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIHV1aWQ6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgIGRlc2NyaXB0aW9uOiBUaGUgcGV0IHV1aWQuCiAgICAgICAgbmFtZToKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgZGVzY3JpcHRpb246IFRoZSBuYW1lIG9mIHRoZSBwZXQuCiAgICBFcnJvcjoKICAgICAgcmVxdWlyZWQ6CiAgICAgICAgLSBjb2RlCiAgICAgICAgLSBtZXNzYWdlCiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgY29kZToKICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAgIGZvcm1hdDogaW50MzIKICAgICAgICAgIGRlc2NyaXB0aW9uOiBFcnJvciBjb2RlCiAgICAgICAgbWVzc2FnZToKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgZGVzY3JpcHRpb246IEVycm9yIG1lc3NhZ2UKICAgIE9uZU9mMnRoaW5nczoKICAgICAgZGVzY3JpcHRpb246ICJOb3RpY2UgdGhhdCB0aGUgYHRoaW5nc2AgaXMgbm90IGNhcGl0YWxpc2VkIgogICAgICBvbmVPZjoKICAgICAgICAtIHR5cGU6IG9iamVjdAogICAgICAgICAgcmVxdWlyZWQ6CiAgICAgICAgICAgIC0gaWQKICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgIGlkOgogICAgICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAtIHR5cGU6IG9iamVjdAogICAgICAgICAgcmVxdWlyZWQ6CiAgICAgICAgICAgIC0gaWQKICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgIGlkOgogICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgIGZvcm1hdDogdXVpZApgYGAKClRoaXMgd2lsbCBwcm9kdWNlOgoKYGBgZ28KLy8gT25lT2YydGhpbmdzIE5vdGljZSB0aGF0IHRoZSBgdGhpbmdzYCBpcyBub3QgY2FwaXRhbGlzZWQKdHlwZSBPbmVPZjJ0aGluZ3Mgc3RydWN0IHsKCXVuaW9uIGpzb24uUmF3TWVzc2FnZQp9CgovLyBQZXQgZGVmaW5lcyBtb2RlbCBmb3IgUGV0Lgp0eXBlIFBldCBzdHJ1Y3QgewoJLy8gTmFtZSBUaGUgbmFtZSBvZiB0aGUgcGV0LgoJTmFtZSBzdHJpbmcgYGpzb246Im5hbWUiYAoKCS8vIFVVSUQgVGhlIHBldCB1dWlkLgoJVVVJRCBzdHJpbmcgYGpzb246InV1aWQiYAp9CgovLyBUaGUgaW50ZXJmYWNlIHNwZWNpZmljYXRpb24gZm9yIHRoZSBjbGllbnQgYWJvdmUuCnR5cGUgQ2xpZW50SW50ZXJmYWNlIGludGVyZmFjZSB7CgkvLyBHZXRIVFRQUGV0IHJlcXVlc3QKCUdldEhUVFBQZXQoY3R4IGNvbnRleHQuQ29udGV4dCwgcGV0SUQgc3RyaW5nLCByZXFFZGl0b3JzIC4uLlJlcXVlc3RFZGl0b3JGbikgKCpodHRwLlJlc3BvbnNlLCBlcnJvcikKfQpgYGAKCjwvZGV0YWlscz4KCgpGb3IgbW9yZSBkZXRhaWxzIG9mIHdoYXQgdGhlIHJlc3VsdGluZyBjb2RlIGxvb2tzIGxpa2UsIGNoZWNrIG91dCBbdGhlIHRlc3QgY2FzZXNdKGludGVybmFsL3Rlc3Qvb3V0cHV0b3B0aW9ucy9uYW1lLW5vcm1hbGl6ZXIvKS4KCiMjIEV4YW1wbGVzCgpUaGUgW2V4YW1wbGVzIGRpcmVjdG9yeV0oZXhhbXBsZXMpIGNvbnRhaW5zIHNvbWUgYWRkaXRpb25hbCBjYXNlcyB3aGljaCBhcmUgdXNlZnVsIGV4YW1wbGVzIGZvciBob3cgdG8gdXNlIGBvYXBpLWNvZGVnZW5gLCBpbmNsdWRpbmcgaG93IHlvdSdkIHRha2UgdGhlIFBldHN0b3JlIEFQSSBhbmQgaW1wbGVtZW50IGl0IHdpdGggYG9hcGktY29kZWdlbmAuCgpZb3UgY291bGQgYWxzbyBmaW5kIHNvbWUgY2FzZXMgb2YgaG93IHRoZSBwcm9qZWN0IGNhbiBiZSB1c2VkIGJ5IGNoZWNraW5nIG91dCBvdXIgW2ludGVybmFsIHRlc3QgY2FzZXNdKGludGVybmFsL3Rlc3QpIHdoaWNoIGFyZSByZWFsLXdvcmxkIHVzYWdlcyB0aGF0IG1ha2UgdXAgb3VyIHJlZ3Jlc3Npb24gdGVzdHMuCgojIyMgQmxvZyBwb3N0cwoKV2UgbG92ZSByZWFkaW5nIHBvc3RzIGJ5IHRoZSBjb21tdW5pdHkgYWJvdXQgaG93IHRvIHVzZSB0aGUgcHJvamVjdC4KCkhlcmUgYXJlIGEgZmV3IHdlJ3ZlIGZvdW5kIGFyb3VuZCB0aGUgV2ViOgoKLSBbQnVpbGRpbmcgYSBHbyBSRVNUZnVsIEFQSSB3aXRoIGRlc2lnbi1maXJzdCBPcGVuQVBJIGNvbnRyYWN0c10oaHR0cHM6Ly93d3cuanZ0Lm1lL3Bvc3RzLzIwMjIvMDcvMTIvZ28tb3BlbmFwaS1zZXJ2ZXIvKQotIFtBIFByYWN0aWNhbCBHdWlkZSB0byBVc2luZyBvYXBpLWNvZGVnZW4gaW4gR29sYW5nIEFQSSBEZXZlbG9wbWVudCB3aXRoIHRoZSBGaWJlciBGcmFtZXdvcmtdKGh0dHBzOi8vbWVkaXVtLmNvbS9AZmlraWhhbGFuL2EtcHJhY3RpY2FsLWd1aWRlLXRvLXVzaW5nLW9hcGktY29kZWdlbi1pbi1nb2xhbmctYXBpLWRldmVsb3BtZW50LXdpdGgtdGhlLWZpYmVyLWZyYW1ld29yay1iY2UyYTU5MzgwYWUpCi0gW0dlbmVyYXRpbmcgR28gc2VydmVyIGNvZGUgZnJvbSBPcGVuQVBJIDMgZGVmaW5pdGlvbnNdKGh0dHBzOi8vbGRlai5ubC9wb3N0L2dlbmVyYXRpbmctZ28tZnJvbS1vcGVuYXBpLTMvKQotIFtHbyBDbGllbnQgQ29kZSBHZW5lcmF0aW9uIGZyb20gU3dhZ2dlciBhbmQgT3BlbkFQSV0oaHR0cHM6Ly9tZWRpdW0uY29tL0BreW9kby10ZWNoL2dvLWNsaWVudC1jb2RlLWdlbmVyYXRpb24tZnJvbS1zd2FnZ2VyLWFuZC1vcGVuYXBpLWEwNTc2ODMxODM2YykKLSBbR28gb2FwaS1jb2RlZ2VuICsgcmVxdWVzdCB2YWxpZGF0aW9uXShodHRwczovL2Jsb2cuY29tbWl0c21hcnQuY29tL2dvLW9hcGktY29kZWdlbi1yZXF1ZXN0LXZhbGlkYXRpb24tMjg1Mzk4YjM3ZGM4KQoKR290IG9uZSB0byBhZGQ/IFBsZWFzZSByYWlzZSBhIFBSIQoKIyMgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMgKEZBUXMpCgojIyMgSG93IGRvZXMgYG9hcGktY29kZWdlbmAgaGFuZGxlIGBhbnlPZmAsIGBhbGxPZmAgYW5kIGBvbmVPZmA/Cgpgb2FwaS1jb2RlZ2VuYCBzdXBwb3J0cyBgYW55T2ZgLCBgYWxsT2ZgIGFuZCBgb25lT2ZgIGZvciBnZW5lcmF0ZWQgY29kZS4KCkZvciBpbnN0YW5jZSwgdGhyb3VnaCB0aGUgZm9sbG93aW5nIE9wZW5BUEkgc3BlYzoKCmBgYHlhbWwKb3BlbmFwaTogIjMuMC4wIgppbmZvOgogIHZlcnNpb246IDEuMC4wCiAgdGl0bGU6IFVzaW5nIGNvbXBsZXggc2NoZW1hcwogIGRlc2NyaXB0aW9uOiBBbiBleGFtcGxlIG9mIGBhbnlPZmAsIGBhbGxPZmAgYW5kIGBvbmVPZmAKY29tcG9uZW50czoKICBzY2hlbWFzOgogICAgIyBiYXNlIHR5cGVzCiAgICBDbGllbnQ6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICByZXF1aXJlZDoKICAgICAgICAtIG5hbWUKICAgICAgcHJvcGVydGllczoKICAgICAgICBuYW1lOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICBJZGVudGl0eToKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gaXNzdWVyCiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgaXNzdWVyOgogICAgICAgICAgdHlwZTogc3RyaW5nCgogICAgIyBhbGxPZiBwZXJmb3JtcyBhIHVuaW9uIG9mIGFsbCB0eXBlcyBkZWZpbmVkCiAgICBDbGllbnRXaXRoSWQ6CiAgICAgIGFsbE9mOgogICAgICAgIC0gJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL0NsaWVudCcKICAgICAgICAtIHByb3BlcnRpZXM6CiAgICAgICAgICAgIGlkOgogICAgICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAgIHJlcXVpcmVkOgogICAgICAgICAgICAtIGlkCgogICAgIyBhbGxPZiBwZXJmb3JtcyBhIHVuaW9uIG9mIGFsbCB0eXBlcyBkZWZpbmVkLCBidXQgaWYgdGhlcmUncyBhIGR1cGxpY2F0ZSBmaWVsZCBkZWZpbmVkLCBpdCdsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgbGFzdCBzY2hlbWEKICAgICMgaHR0cHM6Ly9naXRodWIuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL2lzc3Vlcy8xNTY5CiAgICBJZGVudGl0eVdpdGhEdXBsaWNhdGVGaWVsZDoKICAgICAgYWxsT2Y6CiAgICAgICAgIyBgaXNzdWVyYCB3aWxsIGJlIGlnbm9yZWQKICAgICAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9JZGVudGl0eScKICAgICAgICAjIGBpc3N1ZXJgIHdpbGwgYmUgaWdub3JlZAogICAgICAgIC0gcHJvcGVydGllczoKICAgICAgICAgICAgaXNzdWVyOgogICAgICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAjIGBpc3N1ZXJgIHdpbGwgdGFrZSBwcmVjZWRlbmNlCiAgICAgICAgLSBwcm9wZXJ0aWVzOgogICAgICAgICAgICBpc3N1ZXI6CiAgICAgICAgICAgICAgdHlwZTogb2JqZWN0CiAgICAgICAgICAgICAgcHJvcGVydGllczoKICAgICAgICAgICAgICAgIG5hbWU6CiAgICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgIHJlcXVpcmVkOgogICAgICAgICAgICAgICAgLSBuYW1lCgogICAgIyBhbnlPZiByZXN1bHRzIGluIGEgdHlwZSB0aGF0IGhhcyBhbiBgQXNDbGllbnRgL2BNZXJnZUNsaWVudGAvYEZyb21DbGllbnRgIGFuZCBhbiBgQXNJZGVudGl0eWAvYE1lcmdlSWRlbnRpdHlgL2BGcm9tSWRlbnRpdHlgIG1ldGhvZCBzbyB5b3UgY2FuIGNob29zZSB3aGljaCBvZiB0aGVtIHlvdSB3YW50IHRvIHJldHJpZXZlCiAgICBDbGllbnRBbmRNYXliZUlkZW50aXR5OgogICAgICBhbnlPZjoKICAgICAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9DbGllbnQnCiAgICAgICAgLSAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvSWRlbnRpdHknCgogICAgIyBvbmVPZiByZXN1bHRzIGluIGEgdHlwZSB0aGF0IGhhcyBhbiBgQXNDbGllbnRgL2BNZXJnZUNsaWVudGAvYEZyb21DbGllbnRgIGFuZCBhbiBgQXNJZGVudGl0eWAvYE1lcmdlSWRlbnRpdHlgL2BGcm9tSWRlbnRpdHlgIG1ldGhvZCBzbyB5b3UgY2FuIGNob29zZSB3aGljaCBvZiB0aGVtIHlvdSB3YW50IHRvIHJldHJpZXZlCiAgICBDbGllbnRPcklkZW50aXR5OgogICAgICBvbmVPZjoKICAgICAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9DbGllbnQnCiAgICAgICAgLSAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvSWRlbnRpdHknCmBgYAoKVGhpcyByZXN1bHRzIGluIHRoZSBmb2xsb3dpbmcgdHlwZXM6Cgo8ZGV0YWlscz4KCjxzdW1tYXJ5PkJhc2UgdHlwZXM8L3N1bW1hcnk+CgpgYGBnbwovLyBDbGllbnQgZGVmaW5lcyBtb2RlbCBmb3IgQ2xpZW50Lgp0eXBlIENsaWVudCBzdHJ1Y3QgewoJTmFtZSBzdHJpbmcgYGpzb246Im5hbWUiYAp9CgovLyBJZGVudGl0eSBkZWZpbmVzIG1vZGVsIGZvciBJZGVudGl0eS4KdHlwZSBJZGVudGl0eSBzdHJ1Y3QgewoJSXNzdWVyIHN0cmluZyBganNvbjoiaXNzdWVyImAKfQpgYGAKCjwvZGV0YWlscz4KCjxkZXRhaWxzPgoKPHN1bW1hcnk+PGNvZGU+YWxsT2Y8L2NvZGU+PC9zdW1tYXJ5PgoKYGBgZ28KLy8gQ2xpZW50V2l0aElkIGRlZmluZXMgbW9kZWwgZm9yIENsaWVudFdpdGhJZC4KdHlwZSBDbGllbnRXaXRoSWQgc3RydWN0IHsKCUlkICAgaW50ICAgIGBqc29uOiJpZCJgCglOYW1lIHN0cmluZyBganNvbjoibmFtZSJgCn0KCi8vIElkZW50aXR5V2l0aER1cGxpY2F0ZUZpZWxkIGRlZmluZXMgbW9kZWwgZm9yIElkZW50aXR5V2l0aER1cGxpY2F0ZUZpZWxkLgp0eXBlIElkZW50aXR5V2l0aER1cGxpY2F0ZUZpZWxkIHN0cnVjdCB7CglJc3N1ZXIgc3RydWN0IHsKCQlOYW1lIHN0cmluZyBganNvbjoibmFtZSJgCgl9IGBqc29uOiJpc3N1ZXIiYAp9CmBgYAoKPC9kZXRhaWxzPgoKPGRldGFpbHM+Cgo8c3VtbWFyeT48Y29kZT5hbnlPZjwvY29kZT48L3N1bW1hcnk+CgpgYGBnbwppbXBvcnQgKAoJImVuY29kaW5nL2pzb24iCgoJImdpdGh1Yi5jb20vb2FwaS1jb2RlZ2VuL3J1bnRpbWUiCikKCi8vIENsaWVudEFuZE1heWJlSWRlbnRpdHkgZGVmaW5lcyBtb2RlbCBmb3IgQ2xpZW50QW5kTWF5YmVJZGVudGl0eS4KdHlwZSBDbGllbnRBbmRNYXliZUlkZW50aXR5IHN0cnVjdCB7Cgl1bmlvbiBqc29uLlJhd01lc3NhZ2UKfQoKLy8gQXNDbGllbnQgcmV0dXJucyB0aGUgdW5pb24gZGF0YSBpbnNpZGUgdGhlIENsaWVudEFuZE1heWJlSWRlbnRpdHkgYXMgYSBDbGllbnQKZnVuYyAodCBDbGllbnRBbmRNYXliZUlkZW50aXR5KSBBc0NsaWVudCgpIChDbGllbnQsIGVycm9yKSB7Cgl2YXIgYm9keSBDbGllbnQKCWVyciA6PSBqc29uLlVubWFyc2hhbCh0LnVuaW9uLCAmYm9keSkKCXJldHVybiBib2R5LCBlcnIKfQoKLy8gRnJvbUNsaWVudCBvdmVyd3JpdGVzIGFueSB1bmlvbiBkYXRhIGluc2lkZSB0aGUgQ2xpZW50QW5kTWF5YmVJZGVudGl0eSBhcyB0aGUgcHJvdmlkZWQgQ2xpZW50CmZ1bmMgKHQgKkNsaWVudEFuZE1heWJlSWRlbnRpdHkpIEZyb21DbGllbnQodiBDbGllbnQpIGVycm9yIHsKCWIsIGVyciA6PSBqc29uLk1hcnNoYWwodikKCXQudW5pb24gPSBiCglyZXR1cm4gZXJyCn0KCi8vIE1lcmdlQ2xpZW50IHBlcmZvcm1zIGEgbWVyZ2Ugd2l0aCBhbnkgdW5pb24gZGF0YSBpbnNpZGUgdGhlIENsaWVudEFuZE1heWJlSWRlbnRpdHksIHVzaW5nIHRoZSBwcm92aWRlZCBDbGllbnQKZnVuYyAodCAqQ2xpZW50QW5kTWF5YmVJZGVudGl0eSkgTWVyZ2VDbGllbnQodiBDbGllbnQpIGVycm9yIHsKCWIsIGVyciA6PSBqc29uLk1hcnNoYWwodikKCWlmIGVyciAhPSBuaWwgewoJCXJldHVybiBlcnIKCX0KCgltZXJnZWQsIGVyciA6PSBydW50aW1lLkpTT05NZXJnZSh0LnVuaW9uLCBiKQoJdC51bmlvbiA9IG1lcmdlZAoJcmV0dXJuIGVycgp9CgovLyBBc0lkZW50aXR5IHJldHVybnMgdGhlIHVuaW9uIGRhdGEgaW5zaWRlIHRoZSBDbGllbnRBbmRNYXliZUlkZW50aXR5IGFzIGEgSWRlbnRpdHkKZnVuYyAodCBDbGllbnRBbmRNYXliZUlkZW50aXR5KSBBc0lkZW50aXR5KCkgKElkZW50aXR5LCBlcnJvcikgewoJdmFyIGJvZHkgSWRlbnRpdHkKCWVyciA6PSBqc29uLlVubWFyc2hhbCh0LnVuaW9uLCAmYm9keSkKCXJldHVybiBib2R5LCBlcnIKfQoKLy8gRnJvbUlkZW50aXR5IG92ZXJ3cml0ZXMgYW55IHVuaW9uIGRhdGEgaW5zaWRlIHRoZSBDbGllbnRBbmRNYXliZUlkZW50aXR5IGFzIHRoZSBwcm92aWRlZCBJZGVudGl0eQpmdW5jICh0ICpDbGllbnRBbmRNYXliZUlkZW50aXR5KSBGcm9tSWRlbnRpdHkodiBJZGVudGl0eSkgZXJyb3IgewoJYiwgZXJyIDo9IGpzb24uTWFyc2hhbCh2KQoJdC51bmlvbiA9IGIKCXJldHVybiBlcnIKfQoKLy8gTWVyZ2VJZGVudGl0eSBwZXJmb3JtcyBhIG1lcmdlIHdpdGggYW55IHVuaW9uIGRhdGEgaW5zaWRlIHRoZSBDbGllbnRBbmRNYXliZUlkZW50aXR5LCB1c2luZyB0aGUgcHJvdmlkZWQgSWRlbnRpdHkKZnVuYyAodCAqQ2xpZW50QW5kTWF5YmVJZGVudGl0eSkgTWVyZ2VJZGVudGl0eSh2IElkZW50aXR5KSBlcnJvciB7CgliLCBlcnIgOj0ganNvbi5NYXJzaGFsKHYpCglpZiBlcnIgIT0gbmlsIHsKCQlyZXR1cm4gZXJyCgl9CgoJbWVyZ2VkLCBlcnIgOj0gcnVudGltZS5KU09OTWVyZ2UodC51bmlvbiwgYikKCXQudW5pb24gPSBtZXJnZWQKCXJldHVybiBlcnIKfQoKZnVuYyAodCBDbGllbnRBbmRNYXliZUlkZW50aXR5KSBNYXJzaGFsSlNPTigpIChbXWJ5dGUsIGVycm9yKSB7CgliLCBlcnIgOj0gdC51bmlvbi5NYXJzaGFsSlNPTigpCglyZXR1cm4gYiwgZXJyCn0KCmZ1bmMgKHQgKkNsaWVudEFuZE1heWJlSWRlbnRpdHkpIFVubWFyc2hhbEpTT04oYiBbXWJ5dGUpIGVycm9yIHsKCWVyciA6PSB0LnVuaW9uLlVubWFyc2hhbEpTT04oYikKCXJldHVybiBlcnIKfQoKCmBgYAoKPC9kZXRhaWxzPgoKPGRldGFpbHM+Cgo8c3VtbWFyeT48Y29kZT5vbmVPZjwvY29kZT48L3N1bW1hcnk+CgpgYGBnbwovLyBBc0NsaWVudCByZXR1cm5zIHRoZSB1bmlvbiBkYXRhIGluc2lkZSB0aGUgQ2xpZW50T3JJZGVudGl0eSBhcyBhIENsaWVudApmdW5jICh0IENsaWVudE9ySWRlbnRpdHkpIEFzQ2xpZW50KCkgKENsaWVudCwgZXJyb3IpIHsKCXZhciBib2R5IENsaWVudAoJZXJyIDo9IGpzb24uVW5tYXJzaGFsKHQudW5pb24sICZib2R5KQoJcmV0dXJuIGJvZHksIGVycgp9CgovLyBGcm9tQ2xpZW50IG92ZXJ3cml0ZXMgYW55IHVuaW9uIGRhdGEgaW5zaWRlIHRoZSBDbGllbnRPcklkZW50aXR5IGFzIHRoZSBwcm92aWRlZCBDbGllbnQKZnVuYyAodCAqQ2xpZW50T3JJZGVudGl0eSkgRnJvbUNsaWVudCh2IENsaWVudCkgZXJyb3IgewoJYiwgZXJyIDo9IGpzb24uTWFyc2hhbCh2KQoJdC51bmlvbiA9IGIKCXJldHVybiBlcnIKfQoKLy8gTWVyZ2VDbGllbnQgcGVyZm9ybXMgYSBtZXJnZSB3aXRoIGFueSB1bmlvbiBkYXRhIGluc2lkZSB0aGUgQ2xpZW50T3JJZGVudGl0eSwgdXNpbmcgdGhlIHByb3ZpZGVkIENsaWVudApmdW5jICh0ICpDbGllbnRPcklkZW50aXR5KSBNZXJnZUNsaWVudCh2IENsaWVudCkgZXJyb3IgewoJYiwgZXJyIDo9IGpzb24uTWFyc2hhbCh2KQoJaWYgZXJyICE9IG5pbCB7CgkJcmV0dXJuIGVycgoJfQoKCW1lcmdlZCwgZXJyIDo9IHJ1bnRpbWUuSlNPTk1lcmdlKHQudW5pb24sIGIpCgl0LnVuaW9uID0gbWVyZ2VkCglyZXR1cm4gZXJyCn0KCi8vIEFzSWRlbnRpdHkgcmV0dXJucyB0aGUgdW5pb24gZGF0YSBpbnNpZGUgdGhlIENsaWVudE9ySWRlbnRpdHkgYXMgYSBJZGVudGl0eQpmdW5jICh0IENsaWVudE9ySWRlbnRpdHkpIEFzSWRlbnRpdHkoKSAoSWRlbnRpdHksIGVycm9yKSB7Cgl2YXIgYm9keSBJZGVudGl0eQoJZXJyIDo9IGpzb24uVW5tYXJzaGFsKHQudW5pb24sICZib2R5KQoJcmV0dXJuIGJvZHksIGVycgp9CgovLyBGcm9tSWRlbnRpdHkgb3ZlcndyaXRlcyBhbnkgdW5pb24gZGF0YSBpbnNpZGUgdGhlIENsaWVudE9ySWRlbnRpdHkgYXMgdGhlIHByb3ZpZGVkIElkZW50aXR5CmZ1bmMgKHQgKkNsaWVudE9ySWRlbnRpdHkpIEZyb21JZGVudGl0eSh2IElkZW50aXR5KSBlcnJvciB7CgliLCBlcnIgOj0ganNvbi5NYXJzaGFsKHYpCgl0LnVuaW9uID0gYgoJcmV0dXJuIGVycgp9CgovLyBNZXJnZUlkZW50aXR5IHBlcmZvcm1zIGEgbWVyZ2Ugd2l0aCBhbnkgdW5pb24gZGF0YSBpbnNpZGUgdGhlIENsaWVudE9ySWRlbnRpdHksIHVzaW5nIHRoZSBwcm92aWRlZCBJZGVudGl0eQpmdW5jICh0ICpDbGllbnRPcklkZW50aXR5KSBNZXJnZUlkZW50aXR5KHYgSWRlbnRpdHkpIGVycm9yIHsKCWIsIGVyciA6PSBqc29uLk1hcnNoYWwodikKCWlmIGVyciAhPSBuaWwgewoJCXJldHVybiBlcnIKCX0KCgltZXJnZWQsIGVyciA6PSBydW50aW1lLkpTT05NZXJnZSh0LnVuaW9uLCBiKQoJdC51bmlvbiA9IG1lcmdlZAoJcmV0dXJuIGVycgp9CgpmdW5jICh0IENsaWVudE9ySWRlbnRpdHkpIE1hcnNoYWxKU09OKCkgKFtdYnl0ZSwgZXJyb3IpIHsKCWIsIGVyciA6PSB0LnVuaW9uLk1hcnNoYWxKU09OKCkKCXJldHVybiBiLCBlcnIKfQoKZnVuYyAodCAqQ2xpZW50T3JJZGVudGl0eSkgVW5tYXJzaGFsSlNPTihiIFtdYnl0ZSkgZXJyb3IgewoJZXJyIDo9IHQudW5pb24uVW5tYXJzaGFsSlNPTihiKQoJcmV0dXJuIGVycgp9CmBgYAoKPC9kZXRhaWxzPgoKRm9yIG1vcmUgaW5mbywgY2hlY2sgb3V0IFt0aGUgZXhhbXBsZSBjb2RlXShleGFtcGxlcy9hbnlvZi1hbGxvZi1vbmVvZi8pLgoKIyMjIEhvdyBjYW4gSSBpZ25vcmUgcGFydHMgb2YgdGhlIHNwZWMgSSBkb24ndCBjYXJlIGFib3V0PwoKQnkgZGVmYXVsdCwgYG9hcGktY29kZWdlbmAgd2lsbCBnZW5lcmF0ZSBldmVyeXRoaW5nIGZyb20gdGhlIHNwZWNpZmljYXRpb24uCgpJZiB5b3UnZCBsaWtlIHRvIHJlZHVjZSB3aGF0J3MgZ2VuZXJhdGVkLCB5b3UgY2FuIHVzZSBvbmUgb2YgYSBmZXcgb3B0aW9ucyBpbiBbdGhlIGNvbmZpZ3VyYXRpb24gZmlsZV0oI3VzYWdlKSB0byB0dW5lIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSByZXN1bHRpbmcgb3V0cHV0OgoKYGBgeWFtbAojIHlhbWwtbGFuZ3VhZ2Utc2VydmVyOiAkc2NoZW1hPWh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9kZWVwbWFwL29hcGktY29kZWdlbi9IRUFEL2NvbmZpZ3VyYXRpb24tc2NoZW1hLmpzb24Kb3V0cHV0LW9wdGlvbnM6CiAgaW5jbHVkZS10YWdzOiBbXQogIGV4Y2x1ZGUtdGFnczogW10KICBpbmNsdWRlLW9wZXJhdGlvbi1pZHM6IFtdCiAgZXhjbHVkZS1vcGVyYXRpb24taWRzOiBbXQogIGV4Y2x1ZGUtc2NoZW1hczogW10KYGBgCgpDaGVjayBbdGhlIGRvY3NdKGh0dHBzOi8vcGtnLmdvLmRldi9naXRodWIuY29tL29hcGktY29kZWdlbi9vYXBpLWNvZGVnZW4vdjIvcGtnL2NvZGVnZW4jT3V0cHV0T3B0aW9ucykgZm9yIG1vcmUgZGV0YWlscyBvZiB1c2FnZS4KCiMjIyBTaG91bGQgSSBjb21taXQgdGhlIGdlbmVyYXRlZCBjb2RlPwoKV2UgcmVjb21tZW5kIGRvaW5nIHNvLCB5ZXMsIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6CgotIEl0IG1lYW5zIGl0J3MgZWFzaWVyIHRvIHZpZXcgdGhlIGltcGFjdCBvZiBhIGNoYW5nZSAtIGJlIGl0IGR1ZSB0byBhbiB1cGdyYWRlIG9mIGBvYXBpLWNvZGVnZW5gLCBvciBhIGNoYW5nZSB0byB5b3VyIHNwZWMgLSBhbmQgaGFzIGhlbHBlZCBjYXRjaCAocG9zc2libHkpIGJyZWFraW5nIGNoYW5nZXMgaW4gdGhlIHBhc3QgbW9yZSBlYXNpbHkKLSBJdCB0aGVuIGFsbG93cyB5b3VyIGNvZGViYXNlIHRvIGJlIGNvbnN1bWVkIGFzIGEgbGlicmFyeSwgYXMgYWxsIHRoZSBmaWxlcyBhcmUgY29tbWl0dGVkCgpUaGlzIG1lYW5zIHlvdSdsbCBuZWVkIHRvIGhhdmUgeW91ciBDSS9DRCBwaXBlbGluZSB2YWxpZGF0ZSB0aGF0IGdlbmVyYXRlZCBmaWxlcyBhcmUgYWxsIHVwLXRvLWRhdGUsIGJ1dCB0aGF0J3MgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIHBpZWNlIG9mIHdvcmsuCgojIyMgU2hvdWxkIEkgbGludCB0aGUgZ2VuZXJhdGVkIGNvZGU/CgpXZSByZWFsbHkgYXNrIHRoYXQgeW91IGRvbid0LiBBbHRob3VnaCBpdCBpbnRlbmRzIHRvIGJlIGlkaW9tYXRpYyBHbyBjb2RlLCBpdCdzIG5vdCBleHBlY3RlZCB0byBwYXNzIGFsbCB0aGUgdmFyaW91cyBsaW50aW5nIHJ1bGVzIHRoYXQgeW91ciBwcm9qZWN0IG1heSBhcHBseS4KCj4gWyFOT1RFXQo+IFdlIHdpbGwsIG9uIG9jY2FzaW9uLCBpbXByb3ZlIHRoZSBnZW5lcmF0ZWQgY29kZSB0byBmaXggc29tZSBsaW50aW5nIHdhcm5pbmdzLCBzdWNoIGFzIHRob3NlIGZyb20gYGdvIHZldGAsIGJ1dCB0aGlzIHNob3VsZCBub3QgYmUgYW4gZXhwZWN0ZWQgY2hhbmdlLgoKIyMjIEkndmUganVzdCB1cGRhdGVkIG15IHZlcnNpb24gb2YgYGtpbi1vcGVuYXBpYCwgYW5kIG5vdyBJIGNhbid0IGJ1aWxkIG15IGNvZGUg8J+YoAoKVGhlIFtraW4tb3BlbmFwaV0oaHR0cHM6Ly9naXRodWIuY29tL2dldGtpbi9raW4tb3BlbmFwaSkgcHJvamVjdCAtIHdoaWNoIHdlIPCfkpwgZm9yIHByb3ZpZGluZyBhIGdyZWF0IGxpYnJhcnkgYW5kIHNldCBvZiB0b29saW5nIGZvciBpbnRlcmFjdGluZyB3aXRoIE9wZW5BUEkgLSBpcyBhIHByZS12MSByZWxlYXNlLCB3aGljaCBtZWFucyB0aGF0IHRoZXkncmUgd2l0aGluIHRoZWlyIHJpZ2h0cyB0byBwdXNoIGJyZWFraW5nIGNoYW5nZXMuCgpUaGlzIG1heSBsZWFkIHRvIGJyZWFrYWdlIGluIHlvdXIgY29uc3VtaW5nIGNvZGUsIGFuZCBpZiBzbywgc29ycnkgdGhhdCdzIGhhcHBlbmVkIQoKV2UnbGwgYmUgYXdhcmUgb2YgdGhlIGlzc3VlLCBhbmQgd2lsbCB3b3JrIHRvIHVwZGF0ZSBib3RoIHRoZSBjb3JlIGBvYXBpLWNvZGVnZW5gIGFuZCB0aGUgbWlkZGxld2FyZXMgYWNjb3JkaW5nbHkuCgojIyBTcG9uc29ycwoKRm9yIHRoZSBtb3N0IHBhcnQsIGBvYXBpLWNvZGVnZW5gIGlzIG1haW50YWluZWQgaW4gdHdvIGJ1c3kgcGVvcGxlcycgZnJlZSB0aW1lLiBBcyBub3RlZCBpbiBbQ3JlYXRpbmcgYSBtb3JlIHN1c3RhaW5hYmxlIG1vZGVsIGZvciBgb2FwaS1jb2RlZ2VuYCBpbiB0aGUgZnV0dXJlXShodHRwczovL2dpdGh1Yi5jb20vZGVlcG1hcC9vYXBpLWNvZGVnZW4vZGlzY3Vzc2lvbnMvMTYwNiksIHdlJ3JlIGxvb2tpbmcgdG8gbWFrZSB0aGlzIGEgbW9yZSBzdXN0YWluYWJsZSBwcm9qZWN0IGluIHRoZSBmdXR1cmUuCgpXZSdyZSB2ZXJ5IGFwcHJlY2lhdGl2ZSBvZiBbdGhlIG1hbnkgY29udHJpYnV0b3JzIG92ZXIgdGhlIHllYXJzXShodHRwczovL2dpdGh1Yi5jb20vZGVlcG1hcC9vYXBpLWNvZGVnZW4vZ3JhcGhzL2NvbnRyaWJ1dG9ycykgYW5kIHRoZSBvbmdvaW5nIHVzZSBvZiB0aGUgcHJvamVjdCDwn5KcCgpQbGVhc2UgY29uc2lkZXIgc3BvbnNvcmluZyB1cyB0aHJvdWdoIEdpdEh1YiBTcG9uc29ycyBlaXRoZXIgW29uIHRoZSBvcmdhbmlzYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9vYXBpLWNvZGVnZW4vKSBvciBbZGlyZWN0bHkgZm9yIEphbWllXShodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvamFtaWV0YW5uYS8pLCB3aGljaCBoZWxwcyB3b3JrIHRvd2FyZHMgdXMgYmVpbmcgYWJsZSB0byBtYWludGFpbiB0aGUgcHJvamVjdCBsb25nIHRlcm0uCgpTZWUgW3RoaXMgYmxvZyBwb3N0IGZyb20gVGlkZWxpZnRdKGh0dHBzOi8vYmxvZy50aWRlbGlmdC5jb20vcGF5aW5nLW1haW50YWluZXJzLXRoZS1ob3d0bykgZm9yIG1vcmUgZGV0YWlscyBvbiBob3cgdG8gdGFsayB0byB5b3VyIGNvbXBhbnkgYWJvdXQgc3BvbnNvcmluZyBtYWludGFpbmVycyBvZiAoT3BlbiBTb3VyY2UpIHByb2plY3RzIHlvdSBkZXBlbmQgb24uCgpXZSBhcmUgY3VycmVudGx5IGdlbmVyb3VzbHkgc3BvbnNvcmVkIGJ5IHRoZSBmb2xsb3dpbmcgZm9sa3MsIGVhY2ggb2Ygd2hvbSBwcm92aWRlIHNwb25zb3JzaGlwIGZvciAxIGhvdXIgb2Ygd29yayBhIG1vbnRoOgoKPHAgYWxpZ249ImNlbnRlciI+Cgk8YSBocmVmPSJodHRwczovL3d3dy5kZXZ6ZXJvLmlvL2xwL2Rldi1lbnZpcm9ubWVudD91dG1fY2FtcGFpZ249Z2l0aHViJnV0bV9zb3VyY2U9b2FwaS1jb2RlZ2VuJTIwcmVwbyZ1dG1fbWVkaXVtPWdpdGh1YiUyMHNwb25zb3JzaGlwIj4KCQk8cGljdHVyZT4KCQkgIDxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIiBzcmNzZXQ9Ii5naXRodWIvc3BvbnNvcnMvZGV2emVyby1saWdodC5zdmciPgoJCSAgPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIgc3Jjc2V0PSIuZ2l0aHViL3Nwb25zb3JzL2Rldnplcm8tZGFyay5zdmciPgoJCSAgPGltZyBhbHQ9IkRldlplcm8gbG9nbyIgc3JjPSIuZ2l0aHViL3Nwb25zb3JzL2Rldnplcm8tZGFyay5zdmciIGhlaWdodD0iMTAwcHgiPgoJCTwvcGljdHVyZT4KCTwvYT4KPC9wPgoKPHAgYWxpZ249ImNlbnRlciI+Cgk8YSBocmVmPSJodHRwczovL3NwZWFrZWFzeS5jb20/dXRtX3NvdXJjZT1vYXBpLWNvZGVnZW4rcmVwbyZ1dG1fbWVkaXVtPWdpdGh1YitzcG9uc29yc2hpcCI+CgkJPHBpY3R1cmU+CgkJICA8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIgc3Jjc2V0PSIuZ2l0aHViL3Nwb25zb3JzL3NwZWFrZWFzeS1saWdodC5zdmciPgoJCSAgPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIgc3Jjc2V0PSIuZ2l0aHViL3Nwb25zb3JzL3NwZWFrZWFzeS1kYXJrLnN2ZyI+CgkJICA8aW1nIGFsdD0iU3BlYWtlYXN5IGxvZ28iIHNyYz0iLmdpdGh1Yi9zcG9uc29ycy9zcGVha2Vhc3ktZGFyay5zdmciIGhlaWdodD0iMTAwcHgiPgoJCTwvcGljdHVyZT4KCTwvYT4KPC9wPgoKPHAgYWxpZ249ImNlbnRlciI+Cgk8YSBocmVmPSJodHRwczovL2VsYXN0aWMuY28/dXRtX3NvdXJjZT1vYXBpLWNvZGVnZW4rcmVwbyZ1dG1fbWVkaXVtPWdpdGh1YitzcG9uc29yc2hpcCI+CgkJPHBpY3R1cmU+CgkJICA8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIgc3Jjc2V0PSIuZ2l0aHViL3Nwb25zb3JzL2VsYXN0aWMtbGlnaHQuc3ZnIj4KCQkgIDxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiIHNyY3NldD0iLmdpdGh1Yi9zcG9uc29ycy9lbGFzdGljLWRhcmsuc3ZnIj4KCQkgIDxpbWcgYWx0PSJFbGFzdGljIGxvZ28iIHNyYz0iLmdpdGh1Yi9zcG9uc29ycy9lbGFzdGljLWRhcmsuc3ZnIiBoZWlnaHQ9IjEwMHB4Ij4KCQk8L3BpY3R1cmU+Cgk8L2E+CjwvcD4KCihOb3RlIHRoYXQgdGhlIG9yZGVyIG9mIGFwcGVhcmFuY2UgdGhlIG9yZGVyIGluIHdoaWNoIHNwb25zb3JzaGlwIHdhcyByZWNlaXZlZCkK
- readmeEtag: '"38d6671ce1f86d66a003fe607fee28737d021e16"'
- readmeLastModified: Fri, 16 Aug 2024 13:30:31 GMT
+ IyBgb2FwaS1jb2RlZ2VuYAoKYG9hcGktY29kZWdlbmAgaXMgYSBjb21tYW5kLWxpbmUgdG9vbCBhbmQgbGlicmFyeSB0byBjb252ZXJ0IE9wZW5BUEkgc3BlY2lmaWNhdGlvbnMgdG8gR28gY29kZSwgYmUgaXQgW3NlcnZlci1zaWRlIGltcGxlbWVudGF0aW9uc10oI2dlbmVyYXRpbmctc2VydmVyLXNpZGUtYm9pbGVycGxhdGUpLCBbQVBJIGNsaWVudHNdKCNnZW5lcmF0aW5nLWFwaS1jbGllbnRzKSwgb3Igc2ltcGx5IFtIVFRQIG1vZGVsc10oI2dlbmVyYXRpbmctYXBpLW1vZGVscykuCgpVc2luZyBgb2FwaS1jb2RlZ2VuYCBhbGxvd3MgeW91IHRvIHJlZHVjZSB0aGUgYm9pbGVycGxhdGUgcmVxdWlyZWQgdG8gY3JlYXRlIG9yIGludGVncmF0ZSB3aXRoIHNlcnZpY2VzIGJhc2VkIG9uIFtPcGVuQVBJIDMuMF0oaHR0cHM6Ly9naXRodWIuY29tL09BSS9PcGVuQVBJLVNwZWNpZmljYXRpb24vYmxvYi9tYWluL3ZlcnNpb25zLzMuMC4wLm1kKSwgYW5kIGluc3RlYWQgZm9jdXMgb24gd3JpdGluZyB5b3VyIGJ1c2luZXNzIGxvZ2ljLCBhbmQgd29ya2luZyBvbiB0aGUgcmVhbCB2YWx1ZS1hZGQgZm9yIHlvdXIgb3JnYW5pc2F0aW9uLgoKV2l0aCBgb2FwaS1jb2RlZ2VuYCwgdGhlcmUgYXJlIGEgZmV3IFtLZXkgRGVzaWduIERlY2lzaW9uc10oI2tleS1kZXNpZ24tZGVjaXNpb25zKSB3ZSd2ZSBtYWRlLCBpbmNsdWRpbmc6CgotIGlkaW9tYXRpYyBHbywgd2hlcmUgcG9zc2libGUKLSBmYWlybHkgc2ltcGxlIGdlbmVyYXRlZCBjb2RlLCBlcnJpbmcgb24gdGhlIHNpZGUgb2YgZHVwbGljYXRlIGNvZGUgb3ZlciBuaWNlbHkgcmVmYWN0b3JlZCBjb2RlCi0gc3VwcG9ydGluZyBhcyBtdWNoIG9mIE9wZW5BUEkgMy54IGFzIGlzIHBvc3NpYmxlLCBhbG9uZ3NpZGUgR28ncyB0eXBlIHN5c3RlbQoKYG9hcGktY29kZWdlbmAgaXMgb25lIHBhcnQgb2YgYSB3aWRlciBlY29zeXN0ZW0sIHdoaWNoIGNhbiBiZSBmb3VuZCBkZXNjcmliZWQgaW4gZnVydGhlciBkZXRhaWwgaW4gdGhlIFtvYXBpLWNvZGVnZW4gb3JnYW5pc2F0aW9uIG9uIEdpdEh1Yl0oaHR0cHM6Ly9naXRodWIuY29tL29hcGktY29kZWdlbikuCgrimqDvuI8gVGhpcyBSRUFETUUgbWF5IGJlIGZvciB0aGUgbGF0ZXN0IGRldmVsb3BtZW50IHZlcnNpb24sIHdoaWNoIG1heSBjb250YWluIHVucmVsZWFzZWQgY2hhbmdlcy4gUGxlYXNlIGVuc3VyZSB5b3UncmUgbG9va2luZyBhdCB0aGUgUkVBRE1FIGZvciB0aGUgbGF0ZXN0IHJlbGVhc2UgdmVyc2lvbi4KCiMjIEFjdGlvbiBSZXF1aXJlZDogVGhlIHJlcG9zaXRvcnkgZm9yIHRoaXMgcHJvamVjdCBoYXMgY2hhbmdlZAoKQXMgYW5ub3VuY2VkIGluIFtNYXkgMjAyNF0oaHR0cHM6Ly9naXRodWIuY29tL29hcGktY29kZWdlbi9vYXBpLWNvZGVnZW4vZGlzY3Vzc2lvbnMvMTYwNSksCndlIGhhdmUgbW92ZWQgdGhlIHByb2plY3QgZnJvbSB0aGUgZGVlcG1hcCBvcmdhbml6YXRpb24gdG8gb3VyIG93biBvcmdhbml6YXRpb24sIGFuZCB5b3Ugd2lsbCBuZWVkIHRvIHVwZGF0ZSB5b3VyCmltcG9ydCBwYXRocyB0byBwdWxsIHVwZGF0ZXMgcGFzdCB0aGlzIHBvaW50LiBZb3UgbmVlZCB0byBkbyBhIHJlY3Vyc2l2ZSBzZWFyY2gvcmVwbGFjZSBmcm9tCmBnaXRodWIuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL3YyYCB0byBgZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vb2FwaS1jb2RlZ2VuL3YyYC4KCj4gWyFJTVBPUlRBTlRdCj4gYG9hcGktY29kZWdlbmAgbW92ZWQgdG8gaXRzIG5ldyBob21lIHdpdGggdGhlIHZlcnNpb24gdGFnIGB2Mi4zLjBgLgoKSWYgeW91IGFyZSB1c2luZyBgdjIuMi4wYCBvciBiZWxvdywgcGxlYXNlIGluc3RhbGwgbGlrZSBzbzoKCmBgYHNoCiMgZm9yIHRoZSBiaW5hcnkgaW5zdGFsbApnbyBpbnN0YWxsIGdpdGh1Yi5jb20vZGVlcG1hcC9vYXBpLWNvZGVnZW4vdjIvY21kL29hcGktY29kZWdlbkB2Mi4yLjAKYGBgCgpJZiB5b3UgYXJlIHVzaW5nIGB2Mi4zLjBgIG9yIGFib3ZlLCBwbGVhc2UgaW5zdGFsbCBsaWtlIHNvLCB1c2luZyB0aGUgbmV3IG1vZHVsZSBpbXBvcnQgcGF0aDoKCmBgYHNoCiMgZm9yIHRoZSBiaW5hcnkgaW5zdGFsbApnbyBpbnN0YWxsIGdpdGh1Yi5jb20vb2FwaS1jb2RlZ2VuL29hcGktY29kZWdlbi92Mi9jbWQvb2FwaS1jb2RlZ2VuQGxhdGVzdApgYGAKCiMjIEluc3RhbGwKCkl0IGlzIHJlY29tbWVuZGVkIHRvIGZvbGxvdyBbdGhlIGB0b29scy5nb2AgcGF0dGVybl0oaHR0cHM6Ly93d3cuanZ0Lm1lL3Bvc3RzLzIwMjIvMDYvMTUvZ28tdG9vbHMtZGVwZW5kZW5jeS1tYW5hZ2VtZW50LykgZm9yIG1hbmFnaW5nIHRoZSBkZXBlbmRlbmN5IG9mIGBvYXBpLWNvZGVnZW5gIGFsb25nc2lkZSB5b3VyIGNvcmUgYXBwbGljYXRpb24uCgpUaGlzIHdvdWxkIGdpdmUgeW91IGEgYHRvb2xzL3Rvb2xzLmdvYDoKCmBgYGdvCi8vZ286YnVpbGQgdG9vbHMKLy8gK2J1aWxkIHRvb2xzCgpwYWNrYWdlIG1haW4KCmltcG9ydCAoCglfICJnaXRodWIuY29tL29hcGktY29kZWdlbi9vYXBpLWNvZGVnZW4vdjIvY21kL29hcGktY29kZWdlbiIKKQpgYGAKClRoZW4sIGVhY2ggaW52b2NhdGlvbiBvZiBgb2FwaS1jb2RlZ2VuYCB3b3VsZCBiZSB1c2VkIGxpa2Ugc286CgpgYGBnbwovL2dvOmdlbmVyYXRlIGdvIHJ1biBnaXRodWIuY29tL29hcGktY29kZWdlbi9vYXBpLWNvZGVnZW4vdjIvY21kL29hcGktY29kZWdlbiAtLWNvbmZpZz1jb25maWcueWFtbCAuLi8uLi9hcGkueWFtbApgYGAKCkFsdGVybmF0aXZlbHksIHlvdSBjYW4gaW5zdGFsbCBpdCBhcyBhIGJpbmFyeSB3aXRoOgoKYGBgc2gKJCBnbyBpbnN0YWxsIGdpdGh1Yi5jb20vb2FwaS1jb2RlZ2VuL29hcGktY29kZWdlbi92Mi9jbWQvb2FwaS1jb2RlZ2VuQGxhdGVzdAokIG9hcGktY29kZWdlbiAtdmVyc2lvbgpgYGAKCldoaWNoIHRoZW4gbWVhbnMgeW91IGNhbiBpbnZva2UgaXQgbGlrZSBzbzoKCmBgYGdvCi8vZ286Z2VuZXJhdGUgb2FwaS1jb2RlZ2VuIC0tY29uZmlnPWNvbmZpZy55YW1sIC4uLy4uL2FwaS55YW1sCmBgYAoKIyMjIFBpbm5pbmcgdG8gY29tbWl0cwoKV2hpbGUgdGhlIHByb2plY3QgZG9lcyBub3QgKFt5ZXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9kZWVwbWFwL29hcGktY29kZWdlbi9pc3N1ZXMvMTUxOSkpIGhhdmUgYSBkZWZpbmVkIHJlbGVhc2UgY2FkZW5jZSwgdGhlcmUgbWF5IGJlIGNhc2VzIHdoZXJlIHlvdSB3YW50IHRvIHB1bGwgaW4geWV0LXVucmVsZWFzZWQgY2hhbmdlcyB0byB5b3VyIGNvZGViYXNlLgoKVGhlcmVmb3JlLCB5b3UgbWF5IHdhbnQgdG8gcGluIHlvdXIgZGVwZW5kZW5jeSBvbiBgb2FwaS1jb2RlZ2VuYCB0byBhIGdpdmVuIGNvbW1pdCBoYXNoLCByYXRoZXIgdGhhbiBhIHRhZy4KClRoaXMgaXMgKipvZmZpY2lhbGx5IHJlY29tbWVuZGVkKiogZm9yIGNvbnN1bWVycyBvZiBgb2FwaS1jb2RlZ2VuYCwgd2hvIHdhbnQgZmVhdHVyZXMvYnVnIGZpeGVzIHRoYXQgaGF2ZW4ndCB5ZXQgYmVlbiByZWxlYXNlZC4KCldlIGFpbSB0byBrZWVwIHRoZSBkZWZhdWx0IGJyYW5jaCByZWFkeS10by1yZWxlYXNlIHNvIHlvdSBzaG91bGQgYmUgYWJsZSB0byBzYWZlbHkgcGluLgoKVG8gZG8gc28sIHlvdSBjYW4gcnVuOgoKYGBgc2gKIyBwaW4gdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9uIHRoZSBkZWZhdWx0IGJyYW5jaAokIGdvIGdldCBnaXRodWIuY29tL29hcGktY29kZWdlbi9vYXBpLWNvZGVnZW4vdjJAbWFpbgojIGFsdGVybmF0aXZlbHksIHRvIGEgY29tbWl0IGhhc2ggaS5lLiBodHRwczovL2dpdGh1Yi5jb20vZGVlcG1hcC9vYXBpLWNvZGVnZW4vY29tbWl0LzcxZTkxNmM1OTY4OGE2Mzc5YjU3NzRkZmU1OTA0ZWMyMjJiOWE1MzcKJCBnbyBnZXQgZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vb2FwaS1jb2RlZ2VuL3YyQDcxZTkxNmM1OTY4OGE2Mzc5YjU3NzRkZmU1OTA0ZWMyMjJiOWE1MzcKYGBgCgpUaGlzIHdpbGwgdGhlbiBtYWtlIGEgY2hhbmdlIHN1Y2ggYXM6CgpgYGBkaWZmCmRpZmYgLS1naXQgZ28ubW9kIGdvLm1vZAppbmRleCA0NGYyOWE0Li40MzZhNzgwIDEwMDY0NAotLS0gZ28ubW9kCisrKyBnby5tb2QKQEAgLTIsMjEgKzIsMjAgQEAKLXJlcXVpcmUgZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vb2FwaS1jb2RlZ2VuL3YyIHYyLjEuMAorcmVxdWlyZSBnaXRodWIuY29tL29hcGktY29kZWdlbi9vYXBpLWNvZGVnZW4vdjIgdjIuMS4xLTAuMjAyNDAzMzEyMTI1MTQtODBmMGI5NzhlZjE2CmBgYAoKIyMgVXNhZ2UKCmBvYXBpLWNvZGVnZW5gIGlzIGxhcmdlbHkgY29uZmlndXJlZCB1c2luZyBhIFlBTUwgY29uZmlndXJhdGlvbiBmaWxlLCB0byBzaW1wbGlmeSB0aGUgbnVtYmVyIG9mIGZsYWdzIHRoYXQgdXNlcnMgbmVlZCB0byByZW1lbWJlciwgYW5kIHRvIG1ha2UgcmVhZGluZyB0aGUgYGdvOmdlbmVyYXRlYCBjb21tYW5kIGxlc3MgZGF1bnRpbmcuCgpGb3IgZnVsbCBkZXRhaWxzIG9mIHdoYXQgaXMgc3VwcG9ydGVkLCBpdCdzIHdvcnRoIGNoZWNraW5nIG91dCBbdGhlIEdvRG9jIGZvciBgY29kZWdlbi5Db25maWd1cmF0aW9uYF0oaHR0cHM6Ly9wa2cuZ28uZGV2L2dpdGh1Yi5jb20vb2FwaS1jb2RlZ2VuL29hcGktY29kZWdlbi92Mi9wa2cvY29kZWdlbiNDb25maWd1cmF0aW9uKS4KCldlIGFsc28gaGF2ZSBbYSBKU09OIFNjaGVtYV0oY29uZmlndXJhdGlvbi1zY2hlbWEuanNvbikgdGhhdCBjYW4gYmUgdXNlZCBieSBJREVzL2VkaXRvcnMgd2l0aCB0aGUgTGFuZ3VhZ2UgU2VydmVyIFByb3RvY29sIChMU1ApIHRvIHBlcmZvcm0gaW50ZWxsaWdlbnQgc3VnZ2VzdGlvbnMsIGkuZS46CgpgYGB5YW1sCiMgeWFtbC1sYW5ndWFnZS1zZXJ2ZXI6ICRzY2hlbWE9aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL0hFQUQvY29uZmlndXJhdGlvbi1zY2hlbWEuanNvbgpwYWNrYWdlOiBhcGkKIyAuLi4KYGBgCgojIyMgQmFja3dhcmRzIGNvbXBhdGliaWxpdHkKCkFsdGhvdWdoIHdlIHN0cml2ZSB0byByZXRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgLSBhcyBhIHByb2plY3QgdGhhdCdzIHVzaW5nIGEgc3RhYmxlIEFQSSBwZXIgU2VtVmVyIC0gdGhlcmUgYXJlIHNvbWV0aW1lcyBvcHBvcnR1bml0aWVzIHdlIG11c3QgdGFrZSB0byBmaXggYSBidWcgdGhhdCBjb3VsZCBjYXVzZSBhIGJyZWFraW5nIGNoYW5nZSBmb3IgW3Blb3BsZSByZWx5aW5nIHVwb24gdGhlIGJlaGF2aW91cl0oaHR0cHM6Ly94a2NkLmNvbS8xMTcyLykuCgpJbiB0aGlzIGNhc2UsIHdlIHdpbGwgZXhwb3NlIGEgW2NvbXBhdGliaWxpdHkgb3B0aW9uXShodHRwczovL3BrZy5nby5kZXYvZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vb2FwaS1jb2RlZ2VuL3YyL3BrZy9jb2RlZ2VuI0NvbXBhdGliaWxpdHlPcHRpb25zKSB0byByZXN0b3JlIG9sZCBiZWhhdmlvdXIuCgojIyBGZWF0dXJlcwoKQXQgYSBoaWdoIGxldmVsLCBgb2FwaS1jb2RlZ2VuYCBzdXBwb3J0czoKCi0gR2VuZXJhdGluZyBzZXJ2ZXItc2lkZSBib2lsZXJwbGF0ZSBmb3IgW2EgbnVtYmVyIG9mIHNlcnZlcnNdKCNzdXBwb3J0ZWQtc2VydmVycykgKFtkb2NzXSgjZ2VuZXJhdGluZy1zZXJ2ZXItc2lkZS1ib2lsZXJwbGF0ZSkpCi0gR2VuZXJhdGluZyBjbGllbnQgQVBJIGJvaWxlcnBsYXRlIChbZG9jc10oI2dlbmVyYXRpbmctYXBpLWNsaWVudHMpKQotIEdlbmVyYXRpbmcgdGhlIHR5cGVzIChbZG9jc10oI2dlbmVyYXRpbmctYXBpLW1vZGVscykpCi0gU3BsaXR0aW5nIGxhcmdlIE9wZW5BUEkgc3BlY3MgYWNyb3NzIG11bHRpcGxlIHBhY2thZ2VzKFtkb2NzXSgjaW1wb3J0LW1hcHBpbmcpKQogIC0gVGhpcyBpcyBhbHNvIGtub3duIGFzICJJbXBvcnQgTWFwcGluZyIgb3IgImV4dGVybmFsIHJlZmVyZW5jZXMiIGFjcm9zcyBvdXIgZG9jdW1lbnRhdGlvbiAvIGRpc2N1c3Npb24gaW4gR2l0SHViIGlzc3VlcwoKIyMgV2hhdCBkb2VzIGl0IGxvb2sgbGlrZT8KCkJlbG93IHdlIGNhbiBzZWUgYSB0cmltbWVkIGRvd24gZXhhbXBsZSB0YWtlbiBmcm9tIHRoZSBPcGVuQVBJIFBldHN0b3JlIFtleGFtcGxlXShleGFtcGxlcy9wZXRzdG9yZS1leHBhbmRlZC9zdGRodHRwL2FwaS9wZXRzdG9yZS5nZW4uZ28pOgoKYGBgZ28KLy8gZ2VuZXJhdGVkIGNvZGUKCnR5cGUgU2VydmVySW50ZXJmYWNlIGludGVyZmFjZSB7CgkvLyAuLi4KCS8vIFJldHVybnMgYWxsIHBldHMKCS8vIChHRVQgL3BldHMpCglGaW5kUGV0cyh3IGh0dHAuUmVzcG9uc2VXcml0ZXIsIHIgKmh0dHAuUmVxdWVzdCwgcGFyYW1zIEZpbmRQZXRzUGFyYW1zKQoJLy8gLi4uCn0KCi8vIEZpbmRQZXRzIG9wZXJhdGlvbiBtaWRkbGV3YXJlCmZ1bmMgKHNpdyAqU2VydmVySW50ZXJmYWNlV3JhcHBlcikgRmluZFBldHModyBodHRwLlJlc3BvbnNlV3JpdGVyLCByICpodHRwLlJlcXVlc3QpIHsKCgl2YXIgZXJyIGVycm9yCgoJLy8gUGFyYW1ldGVyIG9iamVjdCB3aGVyZSB3ZSB3aWxsIHVubWFyc2hhbCBhbGwgcGFyYW1ldGVycyBmcm9tIHRoZSBjb250ZXh0Cgl2YXIgcGFyYW1zIEZpbmRQZXRzUGFyYW1zCgoJLy8gLS0tLS0tLS0tLS0tLSBPcHRpb25hbCBxdWVyeSBwYXJhbWV0ZXIgInRhZ3MiIC0tLS0tLS0tLS0tLS0KCgllcnIgPSBydW50aW1lLkJpbmRRdWVyeVBhcmFtZXRlcigiZm9ybSIsIHRydWUsIGZhbHNlLCAidGFncyIsIHIuVVJMLlF1ZXJ5KCksICZwYXJhbXMuVGFncykKCWlmIGVyciAhPSBuaWwgewoJCXNpdy5FcnJvckhhbmRsZXJGdW5jKHcsIHIsICZJbnZhbGlkUGFyYW1Gb3JtYXRFcnJvcntQYXJhbU5hbWU6ICJ0YWdzIiwgRXJyOiBlcnJ9KQoJCXJldHVybgoJfQoKCS8vIC0tLS0tLS0tLS0tLS0gT3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVyICJsaW1pdCIgLS0tLS0tLS0tLS0tLQoKCWVyciA9IHJ1bnRpbWUuQmluZFF1ZXJ5UGFyYW1ldGVyKCJmb3JtIiwgdHJ1ZSwgZmFsc2UsICJsaW1pdCIsIHIuVVJMLlF1ZXJ5KCksICZwYXJhbXMuTGltaXQpCglpZiBlcnIgIT0gbmlsIHsKCQlzaXcuRXJyb3JIYW5kbGVyRnVuYyh3LCByLCAmSW52YWxpZFBhcmFtRm9ybWF0RXJyb3J7UGFyYW1OYW1lOiAibGltaXQiLCBFcnI6IGVycn0pCgkJcmV0dXJuCgl9CgoJaGFuZGxlciA6PSBodHRwLkhhbmRsZXIoaHR0cC5IYW5kbGVyRnVuYyhmdW5jKHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0KSB7CgkJc2l3LkhhbmRsZXIuRmluZFBldHModywgciwgcGFyYW1zKQoJfSkpCgoJZm9yIF8sIG1pZGRsZXdhcmUgOj0gcmFuZ2Ugc2l3LkhhbmRsZXJNaWRkbGV3YXJlcyB7CgkJaGFuZGxlciA9IG1pZGRsZXdhcmUoaGFuZGxlcikKCX0KCgloYW5kbGVyLlNlcnZlSFRUUCh3LCByKQp9CgovLyBIYW5kbGVyV2l0aE9wdGlvbnMgY3JlYXRlcyBodHRwLkhhbmRsZXIgd2l0aCBhZGRpdGlvbmFsIG9wdGlvbnMKZnVuYyBIYW5kbGVyV2l0aE9wdGlvbnMoc2kgU2VydmVySW50ZXJmYWNlLCBvcHRpb25zIFN0ZEhUVFBTZXJ2ZXJPcHRpb25zKSBodHRwLkhhbmRsZXIgewoJbSA6PSBvcHRpb25zLkJhc2VSb3V0ZXIKCglpZiBtID09IG5pbCB7CgkJbSA9IGh0dHAuTmV3U2VydmVNdXgoKQoJfQoJaWYgb3B0aW9ucy5FcnJvckhhbmRsZXJGdW5jID09IG5pbCB7CgkJb3B0aW9ucy5FcnJvckhhbmRsZXJGdW5jID0gZnVuYyh3IGh0dHAuUmVzcG9uc2VXcml0ZXIsIHIgKmh0dHAuUmVxdWVzdCwgZXJyIGVycm9yKSB7CgkJCWh0dHAuRXJyb3IodywgZXJyLkVycm9yKCksIGh0dHAuU3RhdHVzQmFkUmVxdWVzdCkKCQl9Cgl9CgoJd3JhcHBlciA6PSBTZXJ2ZXJJbnRlcmZhY2VXcmFwcGVyewoJCUhhbmRsZXI6ICAgICAgICAgICAgc2ksCgkJSGFuZGxlck1pZGRsZXdhcmVzOiBvcHRpb25zLk1pZGRsZXdhcmVzLAoJCUVycm9ySGFuZGxlckZ1bmM6ICAgb3B0aW9ucy5FcnJvckhhbmRsZXJGdW5jLAoJfQoKCW0uSGFuZGxlRnVuYygiR0VUICIrb3B0aW9ucy5CYXNlVVJMKyIvcGV0cyIsIHdyYXBwZXIuRmluZFBldHMpCgoJcmV0dXJuIG0KfQpgYGAKClRoZW4sIGluIHlvdXIgb3duIGNvZGUsIHlvdSBpbXBsZW1lbnQgdGhlIHVuZGVybHlpbmcgbG9naWMgZm9yIHRoZSBgRmluZFBldHNgIGltcGxlbWVudGF0aW9uOgoKYGBgZ28KdHlwZSBQZXRTdG9yZSBzdHJ1Y3QgewoJUGV0cyAgIG1hcFtpbnQ2NF1QZXQKCU5leHRJZCBpbnQ2NAoJTG9jayAgIHN5bmMuTXV0ZXgKfQoKLy8gTWFrZSBzdXJlIHdlIGNvbmZvcm0gdG8gU2VydmVySW50ZXJmYWNlCgp2YXIgXyBTZXJ2ZXJJbnRlcmZhY2UgPSAoKlBldFN0b3JlKShuaWwpCgpmdW5jIE5ld1BldFN0b3JlKCkgKlBldFN0b3JlIHsKCXJldHVybiAmUGV0U3RvcmV7CgkJUGV0czogICBtYWtlKG1hcFtpbnQ2NF1QZXQpLAoJCU5leHRJZDogMTAwMCwKCX0KfQoKLy8gRmluZFBldHMgaW1wbGVtZW50cyBhbGwgdGhlIGhhbmRsZXJzIGluIHRoZSBTZXJ2ZXJJbnRlcmZhY2UKZnVuYyAocCAqUGV0U3RvcmUpIEZpbmRQZXRzKHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0LCBwYXJhbXMgRmluZFBldHNQYXJhbXMpIHsKCXAuTG9jay5Mb2NrKCkKCWRlZmVyIHAuTG9jay5VbmxvY2soKQoKCXZhciByZXN1bHQgW11QZXQKCglmb3IgXywgcGV0IDo9IHJhbmdlIHAuUGV0cyB7CgkJaWYgcGFyYW1zLlRhZ3MgIT0gbmlsIHsKCQkJLy8gSWYgd2UgaGF2ZSB0YWdzLCAgZmlsdGVyIHBldHMgYnkgdGFnCgkJCWZvciBfLCB0IDo9IHJhbmdlICpwYXJhbXMuVGFncyB7CgkJCQlpZiBwZXQuVGFnICE9IG5pbCAmJiAoKnBldC5UYWcgPT0gdCkgewoJCQkJCXJlc3VsdCA9IGFwcGVuZChyZXN1bHQsIHBldCkKCQkJCX0KCQkJfQoJCX0gZWxzZSB7CgkJCS8vIEFkZCBhbGwgcGV0cyBpZiB3ZSdyZSBub3QgZmlsdGVyaW5nCgkJCXJlc3VsdCA9IGFwcGVuZChyZXN1bHQsIHBldCkKCQl9CgoJCWlmIHBhcmFtcy5MaW1pdCAhPSBuaWwgewoJCQlsIDo9IGludCgqcGFyYW1zLkxpbWl0KQoJCQlpZiBsZW4ocmVzdWx0KSA+PSBsIHsKCQkJCS8vIFdlJ3JlIGF0IHRoZSBsaW1pdAoJCQkJYnJlYWsKCQkJfQoJCX0KCX0KCgl3LldyaXRlSGVhZGVyKGh0dHAuU3RhdHVzT0spCglfID0ganNvbi5OZXdFbmNvZGVyKHcpLkVuY29kZShyZXN1bHQpCn0KYGBgCgpBcyB3ZSBjYW4gc2VlLCBgb2FwaS1jb2RlZ2VuYCBzaW1wbGlmaWVzIHNvbWUgb2YgdGhlIGJvaWxlcnBsYXRlIGJ5IHRha2luZyBwYXJhbWV0ZXJzIG91dCBvZiB0aGUgcmVxdWVzdCBhbmQgaW5zdGVhZCBhbGxvd3MgdXMgdG8gZm9jdXMgb24gdGhlIGltcGxlbWVudGF0aW9uLgoKWW91J2xsIG5vdGUgdGhhdCB0aGVyZSdzIHN0aWxsIGEgYml0IG1vcmUgbWFyc2hhbGluZyBvZiByZXF1ZXN0L3Jlc3BvbnNlIGRhdGEsIHdoaWNoIGlzIGZ1cnRoZXIgcmVkdWNlZCBieSB1c2luZyB0aGUgW1N0cmljdCBzZXJ2ZXJdKCNzdHJpY3Qtc2VydmVyKSBmdW5jdGlvbmFsaXR5LgoKPGEgbmFtZT0id2hhdC1kb2VzLWl0LWxvb2stbGlrZS1zdHJpY3QiPjwvYT4KV2hlbiB1c2luZyB0aGUgc3RyaWN0IHNlcnZlciwgeW91J2xsIGhhdmUgdGhlIGZvbGxvd2luZyBnZW5lcmF0ZWQgY29kZToKCmBgYGdvCi8vIFN0cmljdFNlcnZlckludGVyZmFjZSByZXByZXNlbnRzIGFsbCBzZXJ2ZXIgaGFuZGxlcnMuCnR5cGUgU3RyaWN0U2VydmVySW50ZXJmYWNlIGludGVyZmFjZSB7CgkvLyAuLi4KCS8vIFJldHVybnMgYWxsIHBldHMKCS8vIChHRVQgL3BldHMpCglGaW5kUGV0cyhjdHggY29udGV4dC5Db250ZXh0LCByZXF1ZXN0IEZpbmRQZXRzUmVxdWVzdE9iamVjdCkgKEZpbmRQZXRzUmVzcG9uc2VPYmplY3QsIGVycm9yKQoJLy8gLi4uCn0KCmZ1bmMgTmV3U3RyaWN0SGFuZGxlcldpdGhPcHRpb25zKHNzaSBTdHJpY3RTZXJ2ZXJJbnRlcmZhY2UsIG1pZGRsZXdhcmVzIFtdU3RyaWN0TWlkZGxld2FyZUZ1bmMsIG9wdGlvbnMgU3RyaWN0SFRUUFNlcnZlck9wdGlvbnMpIFNlcnZlckludGVyZmFjZSB7CglyZXR1cm4gJnN0cmljdEhhbmRsZXJ7c3NpOiBzc2ksIG1pZGRsZXdhcmVzOiBtaWRkbGV3YXJlcywgb3B0aW9uczogb3B0aW9uc30KfQoKLy8gRmluZFBldHMgb3BlcmF0aW9uIG1pZGRsZXdhcmUKZnVuYyAoc2ggKnN0cmljdEhhbmRsZXIpIEZpbmRQZXRzKHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0LCBwYXJhbXMgRmluZFBldHNQYXJhbXMpIHsKCXZhciByZXF1ZXN0IEZpbmRQZXRzUmVxdWVzdE9iamVjdAoKCXJlcXVlc3QuUGFyYW1zID0gcGFyYW1zCgoJaGFuZGxlciA6PSBmdW5jKGN0eCBjb250ZXh0LkNvbnRleHQsIHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0LCByZXF1ZXN0IGludGVyZmFjZXt9KSAoaW50ZXJmYWNle30sIGVycm9yKSB7CgkJcmV0dXJuIHNoLnNzaS5GaW5kUGV0cyhjdHgsIHJlcXVlc3QuKEZpbmRQZXRzUmVxdWVzdE9iamVjdCkpCgl9Cglmb3IgXywgbWlkZGxld2FyZSA6PSByYW5nZSBzaC5taWRkbGV3YXJlcyB7CgkJaGFuZGxlciA9IG1pZGRsZXdhcmUoaGFuZGxlciwgIkZpbmRQZXRzIikKCX0KCglyZXNwb25zZSwgZXJyIDo9IGhhbmRsZXIoci5Db250ZXh0KCksIHcsIHIsIHJlcXVlc3QpCgoJaWYgZXJyICE9IG5pbCB7CgkJc2gub3B0aW9ucy5SZXNwb25zZUVycm9ySGFuZGxlckZ1bmModywgciwgZXJyKQoJfSBlbHNlIGlmIHZhbGlkUmVzcG9uc2UsIG9rIDo9IHJlc3BvbnNlLihGaW5kUGV0c1Jlc3BvbnNlT2JqZWN0KTsgb2sgewoJCWlmIGVyciA6PSB2YWxpZFJlc3BvbnNlLlZpc2l0RmluZFBldHNSZXNwb25zZSh3KTsgZXJyICE9IG5pbCB7CgkJCXNoLm9wdGlvbnMuUmVzcG9uc2VFcnJvckhhbmRsZXJGdW5jKHcsIHIsIGVycikKCQl9Cgl9IGVsc2UgaWYgcmVzcG9uc2UgIT0gbmlsIHsKCQlzaC5vcHRpb25zLlJlc3BvbnNlRXJyb3JIYW5kbGVyRnVuYyh3LCByLCBmbXQuRXJyb3JmKCJ1bmV4cGVjdGVkIHJlc3BvbnNlIHR5cGU6ICVUIiwgcmVzcG9uc2UpKQoJfQp9CmBgYAoKVGhlbiwgaW4geW91ciBvd24gY29kZSwgeW91IGltcGxlbWVudCB0aGUgdW5kZXJseWluZyBsb2dpYyBmb3IgdGhlIGBGaW5kUGV0c2AgaW1wbGVtZW50YXRpb246CgpgYGBnbwovLyBNYWtlIHN1cmUgd2UgY29uZm9ybSB0byBTdHJpY3RTZXJ2ZXJJbnRlcmZhY2UKCnZhciBfIFN0cmljdFNlcnZlckludGVyZmFjZSA9ICgqUGV0U3RvcmUpKG5pbCkKCmZ1bmMgTmV3UGV0U3RvcmUoKSAqUGV0U3RvcmUgewoJcmV0dXJuICZQZXRTdG9yZXsKCQlQZXRzOiAgIG1ha2UobWFwW2ludDY0XVBldCksCgkJTmV4dElkOiAxMDAwLAoJfQp9CgovLyBGaW5kUGV0cyBpbXBsZW1lbnRzIGFsbCB0aGUgaGFuZGxlcnMgaW4gdGhlIFNlcnZlckludGVyZmFjZQpmdW5jIChwICpQZXRTdG9yZSkgRmluZFBldHMoY3R4IGNvbnRleHQuQ29udGV4dCwgcmVxdWVzdCBGaW5kUGV0c1JlcXVlc3RPYmplY3QpIChGaW5kUGV0c1Jlc3BvbnNlT2JqZWN0LCBlcnJvcikgewoJcC5Mb2NrLkxvY2soKQoJZGVmZXIgcC5Mb2NrLlVubG9jaygpCgoJdmFyIHJlc3VsdCBbXVBldAoKCWZvciBfLCBwZXQgOj0gcmFuZ2UgcC5QZXRzIHsKCQlpZiByZXF1ZXN0LlBhcmFtcy5UYWdzICE9IG5pbCB7CgkJCS8vIElmIHdlIGhhdmUgdGFncywgIGZpbHRlciBwZXRzIGJ5IHRhZwoJCQlmb3IgXywgdCA6PSByYW5nZSAqcmVxdWVzdC5QYXJhbXMuVGFncyB7CgkJCQlpZiBwZXQuVGFnICE9IG5pbCAmJiAoKnBldC5UYWcgPT0gdCkgewoJCQkJCXJlc3VsdCA9IGFwcGVuZChyZXN1bHQsIHBldCkKCQkJCX0KCQkJfQoJCX0gZWxzZSB7CgkJCS8vIEFkZCBhbGwgcGV0cyBpZiB3ZSdyZSBub3QgZmlsdGVyaW5nCgkJCXJlc3VsdCA9IGFwcGVuZChyZXN1bHQsIHBldCkKCQl9CgoJCWlmIHJlcXVlc3QuUGFyYW1zLkxpbWl0ICE9IG5pbCB7CgkJCWwgOj0gaW50KCpyZXF1ZXN0LlBhcmFtcy5MaW1pdCkKCQkJaWYgbGVuKHJlc3VsdCkgPj0gbCB7CgkJCQkvLyBXZSdyZSBhdCB0aGUgbGltaXQKCQkJCWJyZWFrCgkJCX0KCQl9Cgl9CgoJcmV0dXJuIEZpbmRQZXRzMjAwSlNPTlJlc3BvbnNlKHJlc3VsdCksIG5pbAp9CmBgYAoKV2UgY2FuIHNlZSB0aGF0IHRoaXMgcHJvdmlkZXMgdGhlIGJlc3QgbWVhbnMgdG8gZm9jdXMgb24gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBidXNpbmVzcyBsb2dpYyB3aXRoaW4gdGhlIGVuZHBvaW50LCByYXRoZXIgdGhhbiAodW4pbWFyc2hhbGxpbmcgdHlwZXMgdG8gYW5kIGZyb20gSlNPTiwgb3Igd3JhbmdsaW5nIGNvb2tpZXMgb3IgaGVhZGVycy4KCiMjIEtleSBkZXNpZ24gZGVjaXNpb25zCgotIFByb2R1Y2UgYW4gaW50ZXJmYWNlIHRoYXQgY2FuIGJlIHNhdGlzZmllZCBieSB5b3VyIGltcGxlbWVudGF0aW9uLCB3aXRoIHJlZHVjZWQgYm9pbGVycGxhdGUKLSBCdWxrIHByb2Nlc3NpbmcgYW5kIHBhcnNpbmcgb2YgT3BlbkFQSSBkb2N1bWVudCBpbiBHbwotIFJlc3VsdGluZyBvdXRwdXQgaXMgdXNpbmcgR28ncyBgdGV4dC90ZW1wbGF0ZWBzLCB3aGljaCBhcmUgdXNlci1vdmVycmlkYWJsZQotIEF0dGVtcHRzIHRvIHByb2R1Y2UgSWRpb21hdGljIEdvCi0gU2luZ2xlLWZpbGUgb3V0cHV0Ci0gU3VwcG9ydCBtdWx0aXBsZSBPcGVuQVBJIGZpbGVzIGJ5IGhhdmluZyBhIHBhY2thZ2UtcGVyLU9wZW5BUEkgZmlsZQotIFN1cHBvcnQgb2YgT3BlbkFQSSAzLjAKICAtIE9wZW5BUEkgMy4xIHN1cHBvcnQgaXMgW2F3YWl0aW5nIHVwc3RyZWFtIHN1cHBvcnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9kZWVwbWFwL29hcGktY29kZWdlbi9pc3N1ZXMvMzczKQogIC0gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgaW5jbHVkZSBPcGVuQVBJIDIuMCAoYWthIFN3YWdnZXIpCi0gRXh0cmFjdCBwYXJhbWV0ZXJzIGZyb20gcmVxdWVzdHMsIHRvIHJlZHVjZSB3b3JrIHJlcXVpcmVkIGJ5IHlvdXIgaW1wbGVtZW50YXRpb24KLSBJbXBsaWNpdCBgYWRkaXRpb25hbFByb3BlcnRpZXNgIGFyZSBpZ25vcmVkIGJ5IGRlZmF1bHQgKFttb3JlIGRldGFpbHNdKCNhZGRpdGlvbmFsLXByb3BlcnRpZXMtYWRkaXRpb25hbHByb3BlcnRpZXMpKQotIFBydW5lIHVudXNlZCB0eXBlcyBieSBkZWZhdWx0CgojIyBHZW5lcmF0aW5nIHNlcnZlci1zaWRlIGJvaWxlcnBsYXRlCgpgb2FwaS1jb2RlZ2VuYCBzaGluZXMgYnkgbWFraW5nIGl0IGZhaXJseSBzdHJhaWdodGZvcndhcmQgKG5vdGUgdGhhdCB0aGlzIGlzIGEgcHVycG9zZWZ1bCBjaG9pY2Ugb2Ygd29yZGluZyBoZXJlIC0gd2Ugd2FudCB0byBhdm9pZCB3b3JkcyBsaWtlICJlYXN5IikgdG8gZ2VuZXJhdGUgdGhlIHNlcnZlci1zaWRlIGJvaWxlcnBsYXRlIGZvciBhIGJhY2tlbmQgQVBJLgoKQmVsb3cgeW91IGNhbiBmaW5kIHRoZSBzdXBwb3J0ZWQgc2VydmVycywgYW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIGltcGxlbWVudCBhIHNlcnZlciB1c2luZyB0aGVtLgoKVG8gcHJvdmlkZSB5b3UgYSBmdWxseSBUZXN0IERyaXZlbiBEZXZlbG9wbWVudCBzdHlsZSB0ZXN0IGhhcm5lc3MgdG8gY29uZmlybSB5b3UgYXJlIGZvbGxvd2luZyB0aGUgc3BlY2lmaWNhdGlvbiwgeW91IGNvdWxkIHVzZSBhIHRvb2wgc3VjaCBhcyBbb3BlbmFwaS50YW5uYS5kZXYvZ28vdmFsaWRhdG9yXShodHRwczovL29wZW5hcGkudGFubmEuZGV2L2dvL3ZhbGlkYXRvci8pLCBvciBjcmFmdCB5b3VyIG93bi4KCiMjIyBTdXBwb3J0ZWQgU2VydmVycwoKUmlnaHQgbm93LCB3ZSBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgc2VydmVycywgYW5kIGFyZSBzdXBwb3J0aXZlIG9mIGFkZGluZyBuZXcgc2VydmVycywgdG9vIQoKPHRhYmxlPgoKPHRyPgo8dGg+ClNlcnZlcgo8L3RoPgo8dGg+Cjxjb2RlPmdlbmVyYXRlPC9jb2RlPiBmbGFnIHRvIGVuYWJsZSBjb2RlIGdlbmVyYXRpb24KPC90aD4KPHRoPgpFeGFtcGxlIHVzYWdlCjwvdGg+CjwvdHI+Cgo8dHI+Cjx0ZD4KCltDaGldKGh0dHBzOi8vZ2l0aHViLmNvbS9nby1jaGkvY2hpKQoKPC90ZD4KPHRkPgo8Y29kZT5jaGktc2VydmVyPC9jb2RlPgo8L3RkPgo8dGQ+CgoKRm9yIGEgQ2hpIHNlcnZlciwgeW91IHdpbGwgd2FudCBhIGNvbmZpZ3VyYXRpb24gZmlsZSBzdWNoIGFzOgoKYGBgeWFtbAojIHlhbWwtbGFuZ3VhZ2Utc2VydmVyOiAuLi4KcGFja2FnZTogYXBpCmdlbmVyYXRlOgogIGNoaS1zZXJ2ZXI6IHRydWUKICBtb2RlbHM6IHRydWUKb3V0cHV0OiBnZW4uZ28KYGBgCgpUbyBpbXBsZW1lbnQgdGhpcywgY2hlY2sgb3V0IFt0aGUgQ2hpIGRvY3NdKCNpbXBsLWNoaSkuCgo8L3RkPgo8L3RyPgoKPHRyPgo8dGQ+CgpbRWNob10oaHR0cHM6Ly9naXRodWIuY29tL2xhYnN0YWNrL2VjaG8pCgo8L3RkPgo8dGQ+Cjxjb2RlPmVjaG8tc2VydmVyPC9jb2RlPgo8L3RkPgo8dGQ+CgpGb3IgYW4gRWNobyBzZXJ2ZXIsIHlvdSB3aWxsIHdhbnQgYSBjb25maWd1cmF0aW9uIGZpbGUgc3VjaCBhczoKCmBgYHlhbWwKIyB5YW1sLWxhbmd1YWdlLXNlcnZlcjogLi4uCnBhY2thZ2U6IGFwaQpnZW5lcmF0ZToKICBlY2hvLXNlcnZlcjogdHJ1ZQogIG1vZGVsczogdHJ1ZQpvdXRwdXQ6IGdlbi5nbwpgYGAKClRvIGltcGxlbWVudCB0aGlzLCBjaGVjayBvdXQgW3RoZSBFY2hvIGRvY3NdKCNpbXBsLWVjaG8pLgoKPC90ZD4KPC90cj4KCjx0cj4KPHRkPgoKW0ZpYmVyXShodHRwczovL2dpdGh1Yi5jb20vZ29maWJlci9maWJlcikKCjwvdGQ+Cjx0ZD4KPGNvZGU+ZmliZXItc2VydmVyPC9jb2RlPgo8L3RkPgoKPHRkPgoKRm9yIGEgRmliZXIgc2VydmVyLCB5b3Ugd2lsbCB3YW50IGEgY29uZmlndXJhdGlvbiBmaWxlIHN1Y2ggYXM6CgpgYGB5YW1sCiMgeWFtbC1sYW5ndWFnZS1zZXJ2ZXI6IC4uLgpwYWNrYWdlOiBhcGkKZ2VuZXJhdGU6CiAgZmliZXItc2VydmVyOiB0cnVlCiAgbW9kZWxzOiB0cnVlCm91dHB1dDogZ2VuLmdvCmBgYAoKVG8gaW1wbGVtZW50IHRoaXMsIGNoZWNrIG91dCBbdGhlIEZpYmVyIGRvY3NdKCNpbXBsLWZpYmVyKS4KCjwvdGQ+CjwvdHI+CgoKPHRyPgo8dGQ+CgpbR2luXShodHRwczovL2dpdGh1Yi5jb20vZ2luLWdvbmljL2dpbikKCjwvdGQ+Cjx0ZD4KPGNvZGU+Z2luLXNlcnZlcjwvY29kZT4KPC90ZD4KPHRkPgoKRm9yIGEgR2luIHNlcnZlciwgeW91IHdpbGwgd2FudCBhIGNvbmZpZ3VyYXRpb24gZmlsZSBzdWNoIGFzOgoKYGBgeWFtbAojIHlhbWwtbGFuZ3VhZ2Utc2VydmVyOiAuLi4KcGFja2FnZTogYXBpCmdlbmVyYXRlOgogIGdpbi1zZXJ2ZXI6IHRydWUKICBtb2RlbHM6IHRydWUKb3V0cHV0OiBnZW4uZ28KYGBgCgpUbyBpbXBsZW1lbnQgdGhpcywgY2hlY2sgb3V0IFt0aGUgR2luIGRvY3NdKCNpbXBsLWdpbikuCgo8L3RkPgoKPC90cj4KCjx0cj4KPHRkPgoKW2dvcmlsbGEvbXV4XShodHRwczovL2dpdGh1Yi5jb20vZ29yaWxsYS9tdXgpCgo8L3RkPgo8dGQ+Cjxjb2RlPmdvcmlsbGEtc2VydmVyPC9jb2RlPgo8L3RkPgoKPHRkPgoKRm9yIGEgZ29yaWxsYS9tdXggc2VydmVyLCB5b3Ugd2lsbCB3YW50IGEgY29uZmlndXJhdGlvbiBmaWxlIHN1Y2ggYXM6CgpgYGB5YW1sCiMgeWFtbC1sYW5ndWFnZS1zZXJ2ZXI6IC4uLgpwYWNrYWdlOiBhcGkKZ2VuZXJhdGU6CiAgZ29yaWxsYS1zZXJ2ZXI6IHRydWUKICBtb2RlbHM6IHRydWUKb3V0cHV0OiBnZW4uZ28KYGBgCgpUbyBpbXBsZW1lbnQgdGhpcywgY2hlY2sgb3V0IFt0aGUgZ29yaWxsYS9tdXggZG9jc10oI2ltcGwtZ29yaWxsYW11eCkuCgo8L3RkPgo8L3RyPgoKPHRyPgo8dGQ+CgpbSXJpc10oaHR0cHM6Ly9naXRodWIuY29tL2thdGFyYXMvaXJpcykKCjwvdGQ+Cjx0ZD4KPGNvZGU+aXJpcy1zZXJ2ZXI8L2NvZGU+CjwvdGQ+Cgo8dGQ+CgpGb3IgYSBJcmlzIHNlcnZlciwgeW91IHdpbGwgd2FudCBhIGNvbmZpZ3VyYXRpb24gZmlsZSBzdWNoIGFzOgoKYGBgeWFtbAojIHlhbWwtbGFuZ3VhZ2Utc2VydmVyOiAuLi4KcGFja2FnZTogYXBpCmdlbmVyYXRlOgogIGlyaXMtc2VydmVyOiB0cnVlCiAgbW9kZWxzOiB0cnVlCm91dHB1dDogZ2VuLmdvCmBgYAoKVG8gaW1wbGVtZW50IHRoaXMsIGNoZWNrIG91dCBbdGhlIElyaXMgZG9jc10oI2ltcGwtaXJpcykuCgo8L3RkPgo8L3RyPgoKPHRyPgo8dGQ+CgpbMS4yMisgYG5ldC9odHRwYF0oaHR0cHM6Ly9wa2cuZ28uZGV2L25ldC9odHRwKQoKPC90ZD4KPHRkPgo8Y29kZT5zdGQtaHR0cC1zZXJ2ZXI8L2NvZGU+CjwvdGQ+Cgo8dGQ+CgpUbyB1c2UgcHVyZWx5IGBuZXQvaHR0cGAgKGZvciBHbyAxLjIyKyksIHlvdSB3aWxsIHdhbnQgYSBjb25maWd1cmF0aW9uIGZpbGUgc3VjaCBhczoKCmBgYHlhbWwKIyB5YW1sLWxhbmd1YWdlLXNlcnZlcjogLi4uCnBhY2thZ2U6IGFwaQpnZW5lcmF0ZToKICBzdGQtaHR0cC1zZXJ2ZXI6IHRydWUKICBtb2RlbHM6IHRydWUKb3V0cHV0OiBnZW4uZ28KYGBgCgpUbyBpbXBsZW1lbnQgdGhpcywgY2hlY2sgb3V0IFt0aGUgR28gMS4yMisgYG5ldC9odHRwYCBkb2NzXSgjaW1wbC1zdGRodHRwKS4KCjwvdGQ+CjwvdHI+Cgo8L3RhYmxlPgoKIyMjIEdvIDEuMjIrIGBuZXQvaHR0cGAKPGEgbmFtZT0iaW1wbC1zdGRodHRwIj48L2E+CgpBcyBvZiBHbyAxLjIyLCBlbmhhbmNlbWVudHMgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIHJvdXRpbmcgb2YgdGhlIGBuZXQvaHR0cGAgcGFja2FnZSBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSwgd2hpY2ggbWFrZXMgaXQgYSBncmVhdCBzdGFydGluZyBwb2ludCBmb3IgaW1wbGVtZW50aW5nIGEgc2VydmVyIHdpdGgsIGJlZm9yZSBuZWVkaW5nIHRvIHJlYWNoIGZvciBhbm90aGVyIHJvdXRlciBvciBhIGZ1bGwgZnJhbWV3b3JrLgoKRm9yIGluc3RhbmNlLCBsZXQncyB0YWtlIHRoaXMgc3RyYWlnaHRmb3J3YXJkIHNwZWNpZmljYXRpb246CgpgYGB5YW1sCm9wZW5hcGk6ICIzLjAuMCIKaW5mbzoKICB2ZXJzaW9uOiAxLjAuMAogIHRpdGxlOiBNaW5pbWFsIHBpbmcgQVBJIHNlcnZlcgpwYXRoczoKICAvcGluZzoKICAgIGdldDoKICAgICAgcmVzcG9uc2VzOgogICAgICAgICcyMDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IHBldCByZXNwb25zZQogICAgICAgICAgY29udGVudDoKICAgICAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICAgICAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvUG9uZycKY29tcG9uZW50czoKICBzY2hlbWFzOgogICAgIyBiYXNlIHR5cGVzCiAgICBQb25nOgogICAgICB0eXBlOiBvYmplY3QKICAgICAgcmVxdWlyZWQ6CiAgICAgICAgLSBwaW5nCiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgcGluZzoKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgZXhhbXBsZTogcG9uZwpgYGAKClRoaXMgdGhlbiBnZW5lcmF0ZXMgY29kZSBzdWNoIGFzOgoKYGBgZ28KLy8gUG9uZyBkZWZpbmVzIG1vZGVsIGZvciBQb25nLgp0eXBlIFBvbmcgc3RydWN0IHsKCVBpbmcgc3RyaW5nIGBqc29uOiJwaW5nImAKfQoKLy8gU2VydmVySW50ZXJmYWNlIHJlcHJlc2VudHMgYWxsIHNlcnZlciBoYW5kbGVycy4KdHlwZSBTZXJ2ZXJJbnRlcmZhY2UgaW50ZXJmYWNlIHsKCgkvLyAoR0VUIC9waW5nKQoJR2V0UGluZyh3IGh0dHAuUmVzcG9uc2VXcml0ZXIsIHIgKmh0dHAuUmVxdWVzdCkKfQoKZnVuYyBIYW5kbGVyRnJvbU11eChzaSBTZXJ2ZXJJbnRlcmZhY2UsIG0gKmh0dHAuU2VydmVNdXgpIGh0dHAuSGFuZGxlciB7CglyZXR1cm4gSGFuZGxlcldpdGhPcHRpb25zKHNpLCBTdGRIVFRQU2VydmVyT3B0aW9uc3sKCQlCYXNlUm91dGVyOiBtLAoJfSkKfQoKLy8gSGFuZGxlcldpdGhPcHRpb25zIGNyZWF0ZXMgaHR0cC5IYW5kbGVyIHdpdGggYWRkaXRpb25hbCBvcHRpb25zCmZ1bmMgSGFuZGxlcldpdGhPcHRpb25zKHNpIFNlcnZlckludGVyZmFjZSwgb3B0aW9ucyBTdGRIVFRQU2VydmVyT3B0aW9ucykgaHR0cC5IYW5kbGVyIHsKCW0gOj0gb3B0aW9ucy5CYXNlUm91dGVyCgoJLy8gLi4uIG9taXR0ZWQgZm9yIGJyZXZpdHkKCgltLkhhbmRsZUZ1bmMoIkdFVCAiK29wdGlvbnMuQmFzZVVSTCsiL3BpbmciLCB3cmFwcGVyLkdldFBpbmcpCgoJcmV0dXJuIG0KfQpgYGAKClRvIGltcGxlbWVudCB0aGlzIEhUVFAgc2VydmVyLCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBvdXIgW2BhcGkvaW1wbC5nb2BdKGV4YW1wbGVzL21pbmltYWwtc2VydmVyL3N0ZGh0dHAvYXBpL2ltcGwuZ28pOgoKYGBgZ28KaW1wb3J0ICgKCSJlbmNvZGluZy9qc29uIgoJIm5ldC9odHRwIgopCgovLyBvcHRpb25hbCBjb2RlIG9taXR0ZWQKCnR5cGUgU2VydmVyIHN0cnVjdHt9CgpmdW5jIE5ld1NlcnZlcigpIFNlcnZlciB7CglyZXR1cm4gU2VydmVye30KfQoKLy8gKEdFVCAvcGluZykKZnVuYyAoU2VydmVyKSBHZXRQaW5nKHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0KSB7CglyZXNwIDo9IFBvbmd7CgkJUGluZzogInBvbmciLAoJfQoKCXcuV3JpdGVIZWFkZXIoaHR0cC5TdGF0dXNPSykKCV8gPSBqc29uLk5ld0VuY29kZXIodykuRW5jb2RlKHJlc3ApCn0KYGBgCgpOb3cgd2UndmUgZ290IG91ciBpbXBsZW1lbnRhdGlvbiwgd2UgY2FuIHRoZW4gd3JpdGUgdGhlIGZvbGxvd2luZyBjb2RlIHRvIHdpcmUgaXQgdXAgYW5kIGdldCBhIHJ1bm5pbmcgc2VydmVyOgoKYGBgZ28KaW1wb3J0ICgKCSJsb2ciCgkibmV0L2h0dHAiCgoJImdpdGh1Yi5jb20vb2FwaS1jb2RlZ2VuL29hcGktY29kZWdlbi92Mi9leGFtcGxlcy9taW5pbWFsLXNlcnZlci9zdGRodHRwL2FwaSIKKQoKZnVuYyBtYWluKCkgewoJLy8gY3JlYXRlIGEgdHlwZSB0aGF0IHNhdGlzZmllcyB0aGUgYGFwaS5TZXJ2ZXJJbnRlcmZhY2VgLCB3aGljaCBjb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBldmVyeSBvcGVyYXRpb24gZnJvbSB0aGUgZ2VuZXJhdGVkIGNvZGUKCXNlcnZlciA6PSBhcGkuTmV3U2VydmVyKCkKCglyIDo9IGh0dHAuTmV3U2VydmVNdXgoKQoKCS8vIGdldCBhbiBgaHR0cC5IYW5kbGVyYCB0aGF0IHdlIGNhbiB1c2UKCWggOj0gYXBpLkhhbmRsZXJGcm9tTXV4KHNlcnZlciwgcikKCglzIDo9ICZodHRwLlNlcnZlcnsKCQlIYW5kbGVyOiBoLAoJCUFkZHI6ICAgICIwLjAuMC4wOjgwODAiLAoJfQoKCS8vIEFuZCB3ZSBzZXJ2ZSBIVFRQIHVudGlsIHRoZSB3b3JsZCBlbmRzLgoJbG9nLkZhdGFsKHMuTGlzdGVuQW5kU2VydmUoKSkKfQpgYGAKCj4gWyFOT1RFXQo+IFRoaXMgZG9lc24ndCBpbmNsdWRlIFt2YWxpZGF0aW9uIG9mIGluY29taW5nIHJlcXVlc3RzXSgjcmVxdWVzdHJlc3BvbnNlLXZhbGlkYXRpb24tbWlkZGxld2FyZSkuCgo+IFshTk9URV0KPiBJZiB5b3UgZmVlbCBsaWtlIHlvdSd2ZSBkb25lIGV2ZXJ5dGhpbmcgcmlnaHQsIGJ1dCBhcmUgc3RpbGwgcmVjZWl2aW5nIGA0MDQgcGFnZSBub3QgZm91bmRgIGVycm9ycywgbWFrZSBzdXJlIHRoYXQgeW91J3ZlIGdvdCB0aGUgYGdvYCBkaXJlY3RpdmUgaW4geW91ciBgZ28ubW9kYCB1cGRhdGVkIHRvOgoKYGBgZ28ubW9kCmdvIDEuMjIKYGBgCgo8L2RldGFpbHM+CgojIyMgQ2hpCjxhIG5hbWU9ImltcGwtY2hpIj48L2E+CgpGb3IgaW5zdGFuY2UsIGxldCdzIHRha2UgdGhpcyBzdHJhaWdodGZvcndhcmQgc3BlY2lmaWNhdGlvbjoKCmBgYHlhbWwKb3BlbmFwaTogIjMuMC4wIgppbmZvOgogIHZlcnNpb246IDEuMC4wCiAgdGl0bGU6IE1pbmltYWwgcGluZyBBUEkgc2VydmVyCnBhdGhzOgogIC9waW5nOgogICAgZ2V0OgogICAgICByZXNwb25zZXM6CiAgICAgICAgJzIwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogcGV0IHJlc3BvbnNlCiAgICAgICAgICBjb250ZW50OgogICAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9Qb25nJwpjb21wb25lbnRzOgogIHNjaGVtYXM6CiAgICAjIGJhc2UgdHlwZXMKICAgIFBvbmc6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICByZXF1aXJlZDoKICAgICAgICAtIHBpbmcKICAgICAgcHJvcGVydGllczoKICAgICAgICBwaW5nOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICBleGFtcGxlOiBwb25nCmBgYAoKVGhpcyB0aGVuIGdlbmVyYXRlcyBjb2RlIHN1Y2ggYXM6CgpgYGBnbwovLyBQb25nIGRlZmluZXMgbW9kZWwgZm9yIFBvbmcuCnR5cGUgUG9uZyBzdHJ1Y3QgewoJUGluZyBzdHJpbmcgYGpzb246InBpbmciYAp9CgovLyBTZXJ2ZXJJbnRlcmZhY2UgcmVwcmVzZW50cyBhbGwgc2VydmVyIGhhbmRsZXJzLgp0eXBlIFNlcnZlckludGVyZmFjZSBpbnRlcmZhY2UgewoKCS8vIChHRVQgL3BpbmcpCglHZXRQaW5nKHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0KQp9CgovLyBIYW5kbGVyRnJvbU11eCBjcmVhdGVzIGh0dHAuSGFuZGxlciB3aXRoIHJvdXRpbmcgbWF0Y2hpbmcgT3BlbkFQSSBzcGVjIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBtdXguCmZ1bmMgSGFuZGxlckZyb21NdXgoc2kgU2VydmVySW50ZXJmYWNlLCByICptdXguUm91dGVyKSBodHRwLkhhbmRsZXIgewoJcmV0dXJuIEhhbmRsZXJXaXRoT3B0aW9ucyhzaSwgQ2hpU2VydmVyT3B0aW9uc3sKCQlCYXNlUm91dGVyOiByLAoJfSkKfQoKLy8gSGFuZGxlcldpdGhPcHRpb25zIGNyZWF0ZXMgaHR0cC5IYW5kbGVyIHdpdGggYWRkaXRpb25hbCBvcHRpb25zCmZ1bmMgSGFuZGxlcldpdGhPcHRpb25zKHNpIFNlcnZlckludGVyZmFjZSwgb3B0aW9ucyBDaGlTZXJ2ZXJPcHRpb25zKSBodHRwLkhhbmRsZXIgewoJciA6PSBvcHRpb25zLkJhc2VSb3V0ZXIKCgkvLyAuLi4KCglyLkdyb3VwKGZ1bmMociBjaGkuUm91dGVyKSB7CgkJci5HZXQob3B0aW9ucy5CYXNlVVJMKyIvcGluZyIsIHdyYXBwZXIuR2V0UGluZykKCX0pCgoJcmV0dXJuIHIKfQpgYGAKClRvIGltcGxlbWVudCB0aGlzIEhUVFAgc2VydmVyLCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBvdXIgW2BhcGkvaW1wbC5nb2BdKGV4YW1wbGVzL21pbmltYWwtc2VydmVyL2NoaS9hcGkvaW1wbC5nbyk6CgpgYGBnbwppbXBvcnQgKAoJImVuY29kaW5nL2pzb24iCgkibmV0L2h0dHAiCikKCi8vIG9wdGlvbmFsIGNvZGUgb21pdHRlZAoKdHlwZSBTZXJ2ZXIgc3RydWN0e30KCmZ1bmMgTmV3U2VydmVyKCkgU2VydmVyIHsKCXJldHVybiBTZXJ2ZXJ7fQp9CgovLyAoR0VUIC9waW5nKQpmdW5jIChTZXJ2ZXIpIEdldFBpbmcodyBodHRwLlJlc3BvbnNlV3JpdGVyLCByICpodHRwLlJlcXVlc3QpIHsKCXJlc3AgOj0gUG9uZ3sKCQlQaW5nOiAicG9uZyIsCgl9CgoJdy5Xcml0ZUhlYWRlcihodHRwLlN0YXR1c09LKQoJXyA9IGpzb24uTmV3RW5jb2Rlcih3KS5FbmNvZGUocmVzcCkKfQpgYGAKCk5vdyB3ZSd2ZSBnb3Qgb3VyIGltcGxlbWVudGF0aW9uLCB3ZSBjYW4gdGhlbiB3cml0ZSB0aGUgZm9sbG93aW5nIGNvZGUgdG8gd2lyZSBpdCB1cCBhbmQgZ2V0IGEgcnVubmluZyBzZXJ2ZXI6CgpgYGBnbwppbXBvcnQgKAoJImxvZyIKCSJuZXQvaHR0cCIKCgkiZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vb2FwaS1jb2RlZ2VuL3YyL2V4YW1wbGVzL21pbmltYWwtc2VydmVyL2NoaS9hcGkiCgkiZ2l0aHViLmNvbS9nby1jaGkvY2hpL3Y1IgopCgpmdW5jIG1haW4oKSB7CgkvLyBjcmVhdGUgYSB0eXBlIHRoYXQgc2F0aXNmaWVzIHRoZSBgYXBpLlNlcnZlckludGVyZmFjZWAsIHdoaWNoIGNvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIG9mIGV2ZXJ5IG9wZXJhdGlvbiBmcm9tIHRoZSBnZW5lcmF0ZWQgY29kZQoJc2VydmVyIDo9IGFwaS5OZXdTZXJ2ZXIoKQoKCXIgOj0gY2hpLk5ld011eCgpCgoJLy8gZ2V0IGFuIGBodHRwLkhhbmRsZXJgIHRoYXQgd2UgY2FuIHVzZQoJaCA6PSBhcGkuSGFuZGxlckZyb21NdXgoc2VydmVyLCByKQoKCXMgOj0gJmh0dHAuU2VydmVyewoJCUhhbmRsZXI6IGgsCgkJQWRkcjogICAgIjAuMC4wLjA6ODA4MCIsCgl9CgoJLy8gQW5kIHdlIHNlcnZlIEhUVFAgdW50aWwgdGhlIHdvcmxkIGVuZHMuCglsb2cuRmF0YWwocy5MaXN0ZW5BbmRTZXJ2ZSgpKQp9CmBgYAoKPiBbIU5PVEVdCj4gVGhpcyBkb2Vzbid0IGluY2x1ZGUgW3ZhbGlkYXRpb24gb2YgaW5jb21pbmcgcmVxdWVzdHNdKCNyZXF1ZXN0cmVzcG9uc2UtdmFsaWRhdGlvbi1taWRkbGV3YXJlKS4KCiMjIyBnb3JpbGxhL211eAo8YSBuYW1lPSJpbXBsLWdvcmlsbGFtdXgiPjwvYT4KCkZvciBpbnN0YW5jZSwgbGV0J3MgdGFrZSB0aGlzIHN0cmFpZ2h0Zm9yd2FyZCBzcGVjaWZpY2F0aW9uOgoKYGBgeWFtbApvcGVuYXBpOiAiMy4wLjAiCmluZm86CiAgdmVyc2lvbjogMS4wLjAKICB0aXRsZTogTWluaW1hbCBwaW5nIEFQSSBzZXJ2ZXIKcGF0aHM6CiAgL3Bpbmc6CiAgICBnZXQ6CiAgICAgIHJlc3BvbnNlczoKICAgICAgICAnMjAwJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBwZXQgcmVzcG9uc2UKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL1BvbmcnCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgICMgYmFzZSB0eXBlcwogICAgUG9uZzoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gcGluZwogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIHBpbmc6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgIGV4YW1wbGU6IHBvbmcKYGBgCgpUaGlzIHRoZW4gZ2VuZXJhdGVzIGNvZGUgc3VjaCBhczoKCmBgYGdvCi8vIFBvbmcgZGVmaW5lcyBtb2RlbCBmb3IgUG9uZy4KdHlwZSBQb25nIHN0cnVjdCB7CglQaW5nIHN0cmluZyBganNvbjoicGluZyJgCn0KCi8vIFNlcnZlckludGVyZmFjZSByZXByZXNlbnRzIGFsbCBzZXJ2ZXIgaGFuZGxlcnMuCnR5cGUgU2VydmVySW50ZXJmYWNlIGludGVyZmFjZSB7CgoJLy8gKEdFVCAvcGluZykKCUdldFBpbmcodyBodHRwLlJlc3BvbnNlV3JpdGVyLCByICpodHRwLlJlcXVlc3QpCn0KCi8vIEhhbmRsZXJGcm9tTXV4IGNyZWF0ZXMgaHR0cC5IYW5kbGVyIHdpdGggcm91dGluZyBtYXRjaGluZyBPcGVuQVBJIHNwZWMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIG11eC4KZnVuYyBIYW5kbGVyRnJvbU11eChzaSBTZXJ2ZXJJbnRlcmZhY2UsIHIgKm11eC5Sb3V0ZXIpIGh0dHAuSGFuZGxlciB7CglyZXR1cm4gSGFuZGxlcldpdGhPcHRpb25zKHNpLCBHb3JpbGxhU2VydmVyT3B0aW9uc3sKCQlCYXNlUm91dGVyOiByLAoJfSkKfQoKLy8gSGFuZGxlcldpdGhPcHRpb25zIGNyZWF0ZXMgaHR0cC5IYW5kbGVyIHdpdGggYWRkaXRpb25hbCBvcHRpb25zCmZ1bmMgSGFuZGxlcldpdGhPcHRpb25zKHNpIFNlcnZlckludGVyZmFjZSwgb3B0aW9ucyBHb3JpbGxhU2VydmVyT3B0aW9ucykgaHR0cC5IYW5kbGVyIHsKCXIgOj0gb3B0aW9ucy5CYXNlUm91dGVyCgoJLy8gLi4uCgoJci5IYW5kbGVGdW5jKG9wdGlvbnMuQmFzZVVSTCsiL3BpbmciLCB3cmFwcGVyLkdldFBpbmcpLk1ldGhvZHMoIkdFVCIpCgoJcmV0dXJuIHIKfQpgYGAKClRvIGltcGxlbWVudCB0aGlzIEhUVFAgc2VydmVyLCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBvdXIgW2BhcGkvaW1wbC5nb2BdKGV4YW1wbGVzL21pbmltYWwtc2VydmVyL2dvcmlsbGFtdXgvYXBpL2ltcGwuZ28pOgoKYGBgZ28KaW1wb3J0ICgKCSJlbmNvZGluZy9qc29uIgoJIm5ldC9odHRwIgopCgovLyBvcHRpb25hbCBjb2RlIG9taXR0ZWQKCnR5cGUgU2VydmVyIHN0cnVjdHt9CgpmdW5jIE5ld1NlcnZlcigpIFNlcnZlciB7CglyZXR1cm4gU2VydmVye30KfQoKLy8gKEdFVCAvcGluZykKZnVuYyAoU2VydmVyKSBHZXRQaW5nKHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0KSB7CglyZXNwIDo9IFBvbmd7CgkJUGluZzogInBvbmciLAoJfQoKCXcuV3JpdGVIZWFkZXIoaHR0cC5TdGF0dXNPSykKCV8gPSBqc29uLk5ld0VuY29kZXIodykuRW5jb2RlKHJlc3ApCn0KYGBgCgpOb3cgd2UndmUgZ290IG91ciBpbXBsZW1lbnRhdGlvbiwgd2UgY2FuIHRoZW4gd3JpdGUgdGhlIGZvbGxvd2luZyBjb2RlIHRvIHdpcmUgaXQgdXAgYW5kIGdldCBhIHJ1bm5pbmcgc2VydmVyOgoKYGBgZ28KaW1wb3J0ICgKCSJsb2ciCgkibmV0L2h0dHAiCgoJImdpdGh1Yi5jb20vb2FwaS1jb2RlZ2VuL29hcGktY29kZWdlbi92Mi9leGFtcGxlcy9taW5pbWFsLXNlcnZlci9nb3JpbGxhbXV4L2FwaSIKCSJnaXRodWIuY29tL2dvcmlsbGEvbXV4IgopCgpmdW5jIG1haW4oKSB7CgkvLyBjcmVhdGUgYSB0eXBlIHRoYXQgc2F0aXNmaWVzIHRoZSBgYXBpLlNlcnZlckludGVyZmFjZWAsIHdoaWNoIGNvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIG9mIGV2ZXJ5IG9wZXJhdGlvbiBmcm9tIHRoZSBnZW5lcmF0ZWQgY29kZQoJc2VydmVyIDo9IGFwaS5OZXdTZXJ2ZXIoKQoKCXIgOj0gbXV4Lk5ld1JvdXRlcigpCgoJLy8gZ2V0IGFuIGBodHRwLkhhbmRsZXJgIHRoYXQgd2UgY2FuIHVzZQoJaCA6PSBhcGkuSGFuZGxlckZyb21NdXgoc2VydmVyLCByKQoKCXMgOj0gJmh0dHAuU2VydmVyewoJCUhhbmRsZXI6IGgsCgkJQWRkcjogICAgIjAuMC4wLjA6ODA4MCIsCgl9CgoJLy8gQW5kIHdlIHNlcnZlIEhUVFAgdW50aWwgdGhlIHdvcmxkIGVuZHMuCglsb2cuRmF0YWwocy5MaXN0ZW5BbmRTZXJ2ZSgpKQp9CmBgYAoKPiBbIU5PVEVdCj4gVGhpcyBkb2Vzbid0IGluY2x1ZGUgW3ZhbGlkYXRpb24gb2YgaW5jb21pbmcgcmVxdWVzdHNdKCNyZXF1ZXN0cmVzcG9uc2UtdmFsaWRhdGlvbi1taWRkbGV3YXJlKS4KCiMjIyBFY2hvIHNlcnZlcgo8YSBuYW1lPSJpbXBsLWVjaG8iPjwvYT4KCkZvciBpbnN0YW5jZSwgbGV0J3MgdGFrZSB0aGlzIHN0cmFpZ2h0Zm9yd2FyZCBzcGVjaWZpY2F0aW9uOgoKYGBgeWFtbApvcGVuYXBpOiAiMy4wLjAiCmluZm86CiAgdmVyc2lvbjogMS4wLjAKICB0aXRsZTogTWluaW1hbCBwaW5nIEFQSSBzZXJ2ZXIKcGF0aHM6CiAgL3Bpbmc6CiAgICBnZXQ6CiAgICAgIHJlc3BvbnNlczoKICAgICAgICAnMjAwJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBwZXQgcmVzcG9uc2UKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL1BvbmcnCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgICMgYmFzZSB0eXBlcwogICAgUG9uZzoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gcGluZwogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIHBpbmc6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgIGV4YW1wbGU6IHBvbmcKYGBgCgpUaGlzIHRoZW4gZ2VuZXJhdGVzIGNvZGUgc3VjaCBhczoKCmBgYGdvCi8vIFBvbmcgZGVmaW5lcyBtb2RlbCBmb3IgUG9uZy4KdHlwZSBQb25nIHN0cnVjdCB7CglQaW5nIHN0cmluZyBganNvbjoicGluZyJgCn0KCi8vIFNlcnZlckludGVyZmFjZSByZXByZXNlbnRzIGFsbCBzZXJ2ZXIgaGFuZGxlcnMuCnR5cGUgU2VydmVySW50ZXJmYWNlIGludGVyZmFjZSB7CgoJLy8gKEdFVCAvcGluZykKCUdldFBpbmcoY3R4IGVjaG8uQ29udGV4dCkgZXJyb3IKfQoKLy8gVGhpcyBpcyBhIHNpbXBsZSBpbnRlcmZhY2Ugd2hpY2ggc3BlY2lmaWVzIGVjaG8uUm91dGUgYWRkaXRpb24gZnVuY3Rpb25zIHdoaWNoCi8vIGFyZSBwcmVzZW50IG9uIGJvdGggZWNoby5FY2hvIGFuZCBlY2hvLkdyb3VwLCBzaW5jZSB3ZSB3YW50IHRvIGFsbG93IHVzaW5nCi8vIGVpdGhlciBvZiB0aGVtIGZvciBwYXRoIHJlZ2lzdHJhdGlvbgp0eXBlIEVjaG9Sb3V0ZXIgaW50ZXJmYWNlIHsKCS8vIC4uLgoJR0VUKHBhdGggc3RyaW5nLCBoIGVjaG8uSGFuZGxlckZ1bmMsIG0gLi4uZWNoby5NaWRkbGV3YXJlRnVuYykgKmVjaG8uUm91dGUKCS8vIC4uLgp9CgovLyBSZWdpc3RlckhhbmRsZXJzIGFkZHMgZWFjaCBzZXJ2ZXIgcm91dGUgdG8gdGhlIEVjaG9Sb3V0ZXIuCmZ1bmMgUmVnaXN0ZXJIYW5kbGVycyhyb3V0ZXIgRWNob1JvdXRlciwgc2kgU2VydmVySW50ZXJmYWNlKSB7CglSZWdpc3RlckhhbmRsZXJzV2l0aEJhc2VVUkwocm91dGVyLCBzaSwgIiIpCn0KCi8vIFJlZ2lzdGVycyBoYW5kbGVycywgYW5kIHByZXBlbmRzIEJhc2VVUkwgdG8gdGhlIHBhdGhzLCBzbyB0aGF0IHRoZSBwYXRocwovLyBjYW4gYmUgc2VydmVkIHVuZGVyIGEgcHJlZml4LgpmdW5jIFJlZ2lzdGVySGFuZGxlcnNXaXRoQmFzZVVSTChyb3V0ZXIgRWNob1JvdXRlciwgc2kgU2VydmVySW50ZXJmYWNlLCBiYXNlVVJMIHN0cmluZykgewoJLy8gLi4uCgoJcm91dGVyLkdFVChiYXNlVVJMKyIvcGluZyIsIHdyYXBwZXIuR2V0UGluZykKCn0KYGBgCgpUbyBpbXBsZW1lbnQgdGhpcyBIVFRQIHNlcnZlciwgd2UgbmVlZCB0byB3cml0ZSB0aGUgZm9sbG93aW5nIGNvZGUgaW4gb3VyIFtgYXBpL2ltcGwuZ29gXShleGFtcGxlcy9taW5pbWFsLXNlcnZlci9lY2hvL2FwaS9pbXBsLmdvKToKCmBgYGdvCmltcG9ydCAoCgkibmV0L2h0dHAiCgoJImdpdGh1Yi5jb20vbGFic3RhY2svZWNoby92NCIKKQoKLy8gb3B0aW9uYWwgY29kZSBvbWl0dGVkCgp0eXBlIFNlcnZlciBzdHJ1Y3R7fQoKZnVuYyBOZXdTZXJ2ZXIoKSBTZXJ2ZXIgewoJcmV0dXJuIFNlcnZlcnt9Cn0KCi8vIChHRVQgL3BpbmcpCmZ1bmMgKFNlcnZlcikgR2V0UGluZyhjdHggZWNoby5Db250ZXh0KSBlcnJvciB7CglyZXNwIDo9IFBvbmd7CgkJUGluZzogInBvbmciLAoJfQoKCXJldHVybiBjdHguSlNPTihodHRwLlN0YXR1c09LLCByZXNwKQp9CmBgYAoKTm93IHdlJ3ZlIGdvdCBvdXIgaW1wbGVtZW50YXRpb24sIHdlIGNhbiB0aGVuIHdyaXRlIHRoZSBmb2xsb3dpbmcgY29kZSB0byB3aXJlIGl0IHVwIGFuZCBnZXQgYSBydW5uaW5nIHNlcnZlcjoKCmBgYGdvCmltcG9ydCAoCgkibG9nIgoKCSJnaXRodWIuY29tL29hcGktY29kZWdlbi9vYXBpLWNvZGVnZW4vdjIvZXhhbXBsZXMvbWluaW1hbC1zZXJ2ZXIvZWNoby9hcGkiCgkiZ2l0aHViLmNvbS9sYWJzdGFjay9lY2hvL3Y0IgopCgpmdW5jIG1haW4oKSB7CgkvLyBjcmVhdGUgYSB0eXBlIHRoYXQgc2F0aXNmaWVzIHRoZSBgYXBpLlNlcnZlckludGVyZmFjZWAsIHdoaWNoIGNvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIG9mIGV2ZXJ5IG9wZXJhdGlvbiBmcm9tIHRoZSBnZW5lcmF0ZWQgY29kZQoJc2VydmVyIDo9IGFwaS5OZXdTZXJ2ZXIoKQoKCWUgOj0gZWNoby5OZXcoKQoKCWFwaS5SZWdpc3RlckhhbmRsZXJzKGUsIHNlcnZlcikKCgkvLyBBbmQgd2Ugc2VydmUgSFRUUCB1bnRpbCB0aGUgd29ybGQgZW5kcy4KCWxvZy5GYXRhbChlLlN0YXJ0KCIwLjAuMC4wOjgwODAiKSkKfQpgYGAKCj4gWyFOT1RFXQo+IFRoaXMgZG9lc24ndCBpbmNsdWRlIFt2YWxpZGF0aW9uIG9mIGluY29taW5nIHJlcXVlc3RzXSgjcmVxdWVzdHJlc3BvbnNlLXZhbGlkYXRpb24tbWlkZGxld2FyZSkuCgojIyMgRmliZXIgc2VydmVyCjxhIG5hbWU9ImltcGwtZmliZXIiPjwvYT4KCkZvciBpbnN0YW5jZSwgbGV0J3MgdGFrZSB0aGlzIHN0cmFpZ2h0Zm9yd2FyZCBzcGVjaWZpY2F0aW9uOgoKYGBgeWFtbApvcGVuYXBpOiAiMy4wLjAiCmluZm86CiAgdmVyc2lvbjogMS4wLjAKICB0aXRsZTogTWluaW1hbCBwaW5nIEFQSSBzZXJ2ZXIKcGF0aHM6CiAgL3Bpbmc6CiAgICBnZXQ6CiAgICAgIHJlc3BvbnNlczoKICAgICAgICAnMjAwJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBwZXQgcmVzcG9uc2UKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL1BvbmcnCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgICMgYmFzZSB0eXBlcwogICAgUG9uZzoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gcGluZwogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIHBpbmc6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgIGV4YW1wbGU6IHBvbmcKYGBgCgpUaGlzIHRoZW4gZ2VuZXJhdGVzIGNvZGUgc3VjaCBhczoKCmBgYGdvCi8vIFBvbmcgZGVmaW5lcyBtb2RlbCBmb3IgUG9uZy4KdHlwZSBQb25nIHN0cnVjdCB7CglQaW5nIHN0cmluZyBganNvbjoicGluZyJgCn0KCi8vIFNlcnZlckludGVyZmFjZSByZXByZXNlbnRzIGFsbCBzZXJ2ZXIgaGFuZGxlcnMuCnR5cGUgU2VydmVySW50ZXJmYWNlIGludGVyZmFjZSB7CgoJLy8gKEdFVCAvcGluZykKCUdldFBpbmcoYyAqZmliZXIuQ3R4KSBlcnJvcgp9CgovLyBSZWdpc3RlckhhbmRsZXJzIGNyZWF0ZXMgaHR0cC5IYW5kbGVyIHdpdGggcm91dGluZyBtYXRjaGluZyBPcGVuQVBJIHNwZWMuCmZ1bmMgUmVnaXN0ZXJIYW5kbGVycyhyb3V0ZXIgZmliZXIuUm91dGVyLCBzaSBTZXJ2ZXJJbnRlcmZhY2UpIHsKCVJlZ2lzdGVySGFuZGxlcnNXaXRoT3B0aW9ucyhyb3V0ZXIsIHNpLCBGaWJlclNlcnZlck9wdGlvbnN7fSkKfQoKLy8gUmVnaXN0ZXJIYW5kbGVyc1dpdGhPcHRpb25zIGNyZWF0ZXMgaHR0cC5IYW5kbGVyIHdpdGggYWRkaXRpb25hbCBvcHRpb25zCmZ1bmMgUmVnaXN0ZXJIYW5kbGVyc1dpdGhPcHRpb25zKHJvdXRlciBmaWJlci5Sb3V0ZXIsIHNpIFNlcnZlckludGVyZmFjZSwgb3B0aW9ucyBGaWJlclNlcnZlck9wdGlvbnMpIHsKCS8vIC4uLgoKCXJvdXRlci5HZXQob3B0aW9ucy5CYXNlVVJMKyIvcGluZyIsIHdyYXBwZXIuR2V0UGluZykKfQpgYGAKClRvIGltcGxlbWVudCB0aGlzIEhUVFAgc2VydmVyLCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBvdXIgW2BhcGkvaW1wbC5nb2BdKGV4YW1wbGVzL21pbmltYWwtc2VydmVyL2ZpYmVyL2FwaS9pbXBsLmdvKToKCmBgYGdvCmltcG9ydCAoCgkibmV0L2h0dHAiCgoJImdpdGh1Yi5jb20vZ29maWJlci9maWJlci92MiIKKQoKLy8gZW5zdXJlIHRoYXQgd2UndmUgY29uZm9ybWVkIHRvIHRoZSBgU2VydmVySW50ZXJmYWNlYCB3aXRoIGEgY29tcGlsZS10aW1lIGNoZWNrCnZhciBfIFNlcnZlckludGVyZmFjZSA9ICgqU2VydmVyKShuaWwpCgp0eXBlIFNlcnZlciBzdHJ1Y3R7fQoKZnVuYyBOZXdTZXJ2ZXIoKSBTZXJ2ZXIgewoJcmV0dXJuIFNlcnZlcnt9Cn0KCi8vIChHRVQgL3BpbmcpCmZ1bmMgKFNlcnZlcikgR2V0UGluZyhjdHggKmZpYmVyLkN0eCkgZXJyb3IgewoJcmVzcCA6PSBQb25newoJCVBpbmc6ICJwb25nIiwKCX0KCglyZXR1cm4gY3R4LgoJCVN0YXR1cyhodHRwLlN0YXR1c09LKS4KCQlKU09OKHJlc3ApCn0KYGBgCgpOb3cgd2UndmUgZ290IG91ciBpbXBsZW1lbnRhdGlvbiwgd2UgY2FuIHRoZW4gd3JpdGUgdGhlIGZvbGxvd2luZyBjb2RlIHRvIHdpcmUgaXQgdXAgYW5kIGdldCBhIHJ1bm5pbmcgc2VydmVyOgoKYGBgZ28KaW1wb3J0ICgKCSJsb2ciCgoJImdpdGh1Yi5jb20vb2FwaS1jb2RlZ2VuL29hcGktY29kZWdlbi92Mi9leGFtcGxlcy9taW5pbWFsLXNlcnZlci9maWJlci9hcGkiCgkiZ2l0aHViLmNvbS9nb2ZpYmVyL2ZpYmVyL3YyIgopCgpmdW5jIG1haW4oKSB7CgkvLyBjcmVhdGUgYSB0eXBlIHRoYXQgc2F0aXNmaWVzIHRoZSBgYXBpLlNlcnZlckludGVyZmFjZWAsIHdoaWNoIGNvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIG9mIGV2ZXJ5IG9wZXJhdGlvbiBmcm9tIHRoZSBnZW5lcmF0ZWQgY29kZQoJc2VydmVyIDo9IGFwaS5OZXdTZXJ2ZXIoKQoKCWFwcCA6PSBmaWJlci5OZXcoKQoKCWFwaS5SZWdpc3RlckhhbmRsZXJzKGFwcCwgc2VydmVyKQoKCS8vIEFuZCB3ZSBzZXJ2ZSBIVFRQIHVudGlsIHRoZSB3b3JsZCBlbmRzLgoJbG9nLkZhdGFsKGFwcC5MaXN0ZW4oIjAuMC4wLjA6ODA4MCIpKQp9CmBgYAoKPiBbIU5PVEVdCj4gVGhpcyBkb2Vzbid0IGluY2x1ZGUgW3ZhbGlkYXRpb24gb2YgaW5jb21pbmcgcmVxdWVzdHNdKCNyZXF1ZXN0cmVzcG9uc2UtdmFsaWRhdGlvbi1taWRkbGV3YXJlKS4KCiMjIyBHaW4gc2VydmVyCjxhIG5hbWU9ImltcGwtZ2luIj48L2E+CgpGb3IgaW5zdGFuY2UsIGxldCdzIHRha2UgdGhpcyBzdHJhaWdodGZvcndhcmQgc3BlY2lmaWNhdGlvbjoKCmBgYHlhbWwKb3BlbmFwaTogIjMuMC4wIgppbmZvOgogIHZlcnNpb246IDEuMC4wCiAgdGl0bGU6IE1pbmltYWwgcGluZyBBUEkgc2VydmVyCnBhdGhzOgogIC9waW5nOgogICAgZ2V0OgogICAgICByZXNwb25zZXM6CiAgICAgICAgJzIwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogcGV0IHJlc3BvbnNlCiAgICAgICAgICBjb250ZW50OgogICAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9Qb25nJwpjb21wb25lbnRzOgogIHNjaGVtYXM6CiAgICAjIGJhc2UgdHlwZXMKICAgIFBvbmc6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICByZXF1aXJlZDoKICAgICAgICAtIHBpbmcKICAgICAgcHJvcGVydGllczoKICAgICAgICBwaW5nOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICBleGFtcGxlOiBwb25nCmBgYAoKVGhpcyB0aGVuIGdlbmVyYXRlcyBjb2RlIHN1Y2ggYXM6CgpgYGBnbwovLyBQb25nIGRlZmluZXMgbW9kZWwgZm9yIFBvbmcuCnR5cGUgUG9uZyBzdHJ1Y3QgewoJUGluZyBzdHJpbmcgYGpzb246InBpbmciYAp9CgovLyBTZXJ2ZXJJbnRlcmZhY2UgcmVwcmVzZW50cyBhbGwgc2VydmVyIGhhbmRsZXJzLgp0eXBlIFNlcnZlckludGVyZmFjZSBpbnRlcmZhY2UgewoKCS8vIChHRVQgL3BpbmcpCglHZXRQaW5nKGMgKmdpbi5Db250ZXh0KQp9CgovLyBSZWdpc3RlckhhbmRsZXJzIGNyZWF0ZXMgaHR0cC5IYW5kbGVyIHdpdGggcm91dGluZyBtYXRjaGluZyBPcGVuQVBJIHNwZWMuCmZ1bmMgUmVnaXN0ZXJIYW5kbGVycyhyb3V0ZXIgZ2luLklSb3V0ZXIsIHNpIFNlcnZlckludGVyZmFjZSkgewoJUmVnaXN0ZXJIYW5kbGVyc1dpdGhPcHRpb25zKHJvdXRlciwgc2ksIEdpblNlcnZlck9wdGlvbnN7fSkKfQoKLy8gUmVnaXN0ZXJIYW5kbGVyc1dpdGhPcHRpb25zIGNyZWF0ZXMgaHR0cC5IYW5kbGVyIHdpdGggYWRkaXRpb25hbCBvcHRpb25zCmZ1bmMgUmVnaXN0ZXJIYW5kbGVyc1dpdGhPcHRpb25zKHJvdXRlciBnaW4uSVJvdXRlciwgc2kgU2VydmVySW50ZXJmYWNlLCBvcHRpb25zIEdpblNlcnZlck9wdGlvbnMpIHsKCS8vIC4uLgoKCXJvdXRlci5HRVQob3B0aW9ucy5CYXNlVVJMKyIvcGluZyIsIHdyYXBwZXIuR2V0UGluZykKfQpgYGAKClRvIGltcGxlbWVudCB0aGlzIEhUVFAgc2VydmVyLCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBvdXIgW2BhcGkvaW1wbC5nb2BdKGV4YW1wbGVzL21pbmltYWwtc2VydmVyL2dvcmlsbGFtdXgvYXBpL2ltcGwuZ28pOgoKYGBgZ28KaW1wb3J0ICgKCSJuZXQvaHR0cCIKCgkiZ2l0aHViLmNvbS9naW4tZ29uaWMvZ2luIgopCgovLyBvcHRpb25hbCBjb2RlIG9taXR0ZWQKCnR5cGUgU2VydmVyIHN0cnVjdHt9CgpmdW5jIE5ld1NlcnZlcigpIFNlcnZlciB7CglyZXR1cm4gU2VydmVye30KfQoKLy8gKEdFVCAvcGluZykKZnVuYyAoU2VydmVyKSBHZXRQaW5nKGN0eCAqZ2luLkNvbnRleHQpIHsKCXJlc3AgOj0gUG9uZ3sKCQlQaW5nOiAicG9uZyIsCgl9CgoJY3R4LkpTT04oaHR0cC5TdGF0dXNPSywgcmVzcCkKfQpgYGAKCk5vdyB3ZSd2ZSBnb3Qgb3VyIGltcGxlbWVudGF0aW9uLCB3ZSBjYW4gdGhlbiB3cml0ZSB0aGUgZm9sbG93aW5nIGNvZGUgdG8gd2lyZSBpdCB1cCBhbmQgZ2V0IGEgcnVubmluZyBzZXJ2ZXI6CgpgYGBnbwppbXBvcnQgKAoJImxvZyIKCSJuZXQvaHR0cCIKCgkiZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vb2FwaS1jb2RlZ2VuL3YyL2V4YW1wbGVzL21pbmltYWwtc2VydmVyL2dpbi9hcGkiCgkiZ2l0aHViLmNvbS9naW4tZ29uaWMvZ2luIgopCgpmdW5jIG1haW4oKSB7CgkvLyBjcmVhdGUgYSB0eXBlIHRoYXQgc2F0aXNmaWVzIHRoZSBgYXBpLlNlcnZlckludGVyZmFjZWAsIHdoaWNoIGNvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIG9mIGV2ZXJ5IG9wZXJhdGlvbiBmcm9tIHRoZSBnZW5lcmF0ZWQgY29kZQoJc2VydmVyIDo9IGFwaS5OZXdTZXJ2ZXIoKQoKCXIgOj0gZ2luLkRlZmF1bHQoKQoKCWFwaS5SZWdpc3RlckhhbmRsZXJzKHIsIHNlcnZlcikKCgkvLyBBbmQgd2Ugc2VydmUgSFRUUCB1bnRpbCB0aGUgd29ybGQgZW5kcy4KCglzIDo9ICZodHRwLlNlcnZlcnsKCQlIYW5kbGVyOiByLAoJCUFkZHI6ICAgICIwLjAuMC4wOjgwODAiLAoJfQoKCS8vIEFuZCB3ZSBzZXJ2ZSBIVFRQIHVudGlsIHRoZSB3b3JsZCBlbmRzLgoJbG9nLkZhdGFsKHMuTGlzdGVuQW5kU2VydmUoKSkKfQpgYGAKCj4gWyFOT1RFXQo+IFRoaXMgZG9lc24ndCBpbmNsdWRlIFt2YWxpZGF0aW9uIG9mIGluY29taW5nIHJlcXVlc3RzXSgjcmVxdWVzdHJlc3BvbnNlLXZhbGlkYXRpb24tbWlkZGxld2FyZSkuCgojIyMgSXJpcyBzZXJ2ZXIKPGEgbmFtZT0iaW1wbC1pcmlzIj48L2E+CgpGb3IgaW5zdGFuY2UsIGxldCdzIHRha2UgdGhpcyBzdHJhaWdodGZvcndhcmQgc3BlY2lmaWNhdGlvbjoKCmBgYHlhbWwKb3BlbmFwaTogIjMuMC4wIgppbmZvOgogIHZlcnNpb246IDEuMC4wCiAgdGl0bGU6IE1pbmltYWwgcGluZyBBUEkgc2VydmVyCnBhdGhzOgogIC9waW5nOgogICAgZ2V0OgogICAgICByZXNwb25zZXM6CiAgICAgICAgJzIwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogcGV0IHJlc3BvbnNlCiAgICAgICAgICBjb250ZW50OgogICAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9Qb25nJwpjb21wb25lbnRzOgogIHNjaGVtYXM6CiAgICAjIGJhc2UgdHlwZXMKICAgIFBvbmc6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICByZXF1aXJlZDoKICAgICAgICAtIHBpbmcKICAgICAgcHJvcGVydGllczoKICAgICAgICBwaW5nOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICBleGFtcGxlOiBwb25nCmBgYAoKVGhpcyB0aGVuIGdlbmVyYXRlcyBjb2RlIHN1Y2ggYXM6CgpgYGBnbwovLyBQb25nIGRlZmluZXMgbW9kZWwgZm9yIFBvbmcuCnR5cGUgUG9uZyBzdHJ1Y3QgewoJUGluZyBzdHJpbmcgYGpzb246InBpbmciYAp9CgovLyBTZXJ2ZXJJbnRlcmZhY2UgcmVwcmVzZW50cyBhbGwgc2VydmVyIGhhbmRsZXJzLgp0eXBlIFNlcnZlckludGVyZmFjZSBpbnRlcmZhY2UgewoKCS8vIChHRVQgL3BpbmcpCglHZXRQaW5nKGN0eCBpcmlzLkNvbnRleHQpCn0KCi8vIFJlZ2lzdGVySGFuZGxlcnMgY3JlYXRlcyBodHRwLkhhbmRsZXIgd2l0aCByb3V0aW5nIG1hdGNoaW5nIE9wZW5BUEkgc3BlYy4KZnVuYyBSZWdpc3RlckhhbmRsZXJzKHJvdXRlciAqaXJpcy5BcHBsaWNhdGlvbiwgc2kgU2VydmVySW50ZXJmYWNlKSB7CglSZWdpc3RlckhhbmRsZXJzV2l0aE9wdGlvbnMocm91dGVyLCBzaSwgSXJpc1NlcnZlck9wdGlvbnN7fSkKfQoKLy8gUmVnaXN0ZXJIYW5kbGVyc1dpdGhPcHRpb25zIGNyZWF0ZXMgaHR0cC5IYW5kbGVyIHdpdGggYWRkaXRpb25hbCBvcHRpb25zCmZ1bmMgUmVnaXN0ZXJIYW5kbGVyc1dpdGhPcHRpb25zKHJvdXRlciAqaXJpcy5BcHBsaWNhdGlvbiwgc2kgU2VydmVySW50ZXJmYWNlLCBvcHRpb25zIElyaXNTZXJ2ZXJPcHRpb25zKSB7CgkvLyAuLi4KCglyb3V0ZXIuR2V0KG9wdGlvbnMuQmFzZVVSTCsiL3BpbmciLCB3cmFwcGVyLkdldFBpbmcpCgoJcm91dGVyLkJ1aWxkKCkKfQpgYGAKClRvIGltcGxlbWVudCB0aGlzIEhUVFAgc2VydmVyLCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBvdXIgW2BhcGkvaW1wbC5nb2BdKGV4YW1wbGVzL21pbmltYWwtc2VydmVyL2dvcmlsbGFtdXgvYXBpL2ltcGwuZ28pOgoKYGBgZ28KaW1wb3J0ICgKCSJuZXQvaHR0cCIKCgkiZ2l0aHViLmNvbS9rYXRhcmFzL2lyaXMvdjEyIgopCgovLyBvcHRpb25hbCBjb2RlIG9taXR0ZWQKCnR5cGUgU2VydmVyIHN0cnVjdHt9CgpmdW5jIE5ld1NlcnZlcigpIFNlcnZlciB7CglyZXR1cm4gU2VydmVye30KfQoKLy8gKEdFVCAvcGluZykKZnVuYyAoU2VydmVyKSBHZXRQaW5nKGN0eCBpcmlzLkNvbnRleHQpIHsKCXJlc3AgOj0gUG9uZ3sKCQlQaW5nOiAicG9uZyIsCgl9CgoJY3R4LlN0YXR1c0NvZGUoaHR0cC5TdGF0dXNPSykKCV8gPSBjdHguSlNPTihyZXNwKQp9CmBgYAoKTm93IHdlJ3ZlIGdvdCBvdXIgaW1wbGVtZW50YXRpb24sIHdlIGNhbiB0aGVuIHdyaXRlIHRoZSBmb2xsb3dpbmcgY29kZSB0byB3aXJlIGl0IHVwIGFuZCBnZXQgYSBydW5uaW5nIHNlcnZlcjoKCmBgYGdvCmltcG9ydCAoCgkibG9nIgoKCSJnaXRodWIuY29tL29hcGktY29kZWdlbi9vYXBpLWNvZGVnZW4vdjIvZXhhbXBsZXMvbWluaW1hbC1zZXJ2ZXIvaXJpcy9hcGkiCgkiZ2l0aHViLmNvbS9rYXRhcmFzL2lyaXMvdjEyIgopCgpmdW5jIG1haW4oKSB7CgkvLyBjcmVhdGUgYSB0eXBlIHRoYXQgc2F0aXNmaWVzIHRoZSBgYXBpLlNlcnZlckludGVyZmFjZWAsIHdoaWNoIGNvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIG9mIGV2ZXJ5IG9wZXJhdGlvbiBmcm9tIHRoZSBnZW5lcmF0ZWQgY29kZQoJc2VydmVyIDo9IGFwaS5OZXdTZXJ2ZXIoKQoKCWkgOj0gaXJpcy5EZWZhdWx0KCkKCglhcGkuUmVnaXN0ZXJIYW5kbGVycyhpLCBzZXJ2ZXIpCgoJLy8gQW5kIHdlIHNlcnZlIEhUVFAgdW50aWwgdGhlIHdvcmxkIGVuZHMuCglsb2cuRmF0YWwoaS5MaXN0ZW4oIjAuMC4wLjA6ODA4MCIpKQp9CmBgYAoKPiBbIU5PVEVdCj4gVGhpcyBkb2Vzbid0IGluY2x1ZGUgW3ZhbGlkYXRpb24gb2YgaW5jb21pbmcgcmVxdWVzdHNdKCNyZXF1ZXN0cmVzcG9uc2UtdmFsaWRhdGlvbi1taWRkbGV3YXJlKS4KCiMjIyBTdHJpY3Qgc2VydmVyCgpgb2FwaS1jb2RlZ2VuYCBhbHNvIHN1cHBvcnRzIGdlbmVyYXRpbmcgYSBzZXJ2ZXIgdGhhdCBpcyBtdWNoIG1vcmUgc3RyaWN0IHdpdGggdGhlIGNvbnRyYWN0IHRoYXQgdGhlIGltcGxlbWVudGVyIHJlcXVpcmVzLCBhbmQgdGFrZXMgaW5zcGlyYXRpb24gZnJvbSBzZXJ2ZXItc2lkZSBjb2RlIGdlbmVyYXRpb24gZm9yIFJQQyBzZXJ2ZXJzLgoKVGhpcyB0YWtlcyB0aGUgYm9pbGVycGxhdGUgcmVkdWN0aW9uIGZyb20gdGhlIG5vbi1zdHJpY3Qgc2VydmVycyBhbmQgYWRkcyBhZGRpdGlvbmFsIGJvaWxlcnBsYXRlIHJlZHVjdGlvbiwgYWxsb3dpbmcgeW91IHRvIG1ha2UgdGhlIGZvbGxvd2luZyBjaGFuZ2VzIHRvIHlvdXIgZnVuY3Rpb24gc2lnbmF0dXJlczoKCmBgYGRpZmYKLUZpbmRQZXRzKHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0LCBwYXJhbXMgRmluZFBldHNQYXJhbXMpCitGaW5kUGV0cyhjdHggY29udGV4dC5Db250ZXh0LCByZXF1ZXN0IEZpbmRQZXRzUmVxdWVzdE9iamVjdCkgKEZpbmRQZXRzUmVzcG9uc2VPYmplY3QsIGVycm9yKQpgYGAKClRoaXMgaXMgdGhlIGhpZ2hlc3QgbGV2ZWwgb2Ygc3RyaWN0bmVzcyB0aGF0IGBvYXBpLWNvZGVnZW5gIHN1cHBvcnRzIHJpZ2h0IG5vdywgYW5kIGl0J3MgYSBnb29kIGlkZWEgdG8gc3RhcnQgd2l0aCB0aGlzIGlmIHlvdSB3YW50IHRoZSBtb3N0IGd1YXJkcmFpbHMgdG8gc2ltcGxpZnkgZGV2ZWxvcGluZyB5b3VyIEFQSXMuCgpUaGUgc3RyaWN0IHNlcnZlciBoYXMgc3VwcG9ydCBmb3I6CgotIG11bHRpcGxlIHJlcXVlc3QvcmVzcG9uc2UgbWVkaWEgdHlwZXMgYW5kIHN0YXR1cyBjb2RlcyBvbiBhIGdpdmVuIG9wZXJhdGlvbgotIGZpcnN0LWNsYXNzIHN1cHBvcnQgZm9yIGBtdWx0aXBhcnQvZm9ybS1kYXRhYCBhbmQgYGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZGAgcmVxdWVzdHMKLSByZXR1cm5pbmcgYW4gW0hUVFAgNTAwIEludGVybmFsIFNlcnZlciBFcnJvcl0oaHR0cHM6Ly9odHRwLmNhdC81MDApLCB3aGVuIGFuIGBlcnJvcmAgaXMgcmV0dXJuZWQgZnJvbSBhIGZ1bmN0aW9uCi0gYXV0b21hZ2ljICh1biltYXJzaGFsbGluZyBvZiByZXF1ZXN0L3Jlc3BvbnNlcywgYW5kIHNldHRpbmcgYGNvbnRlbnQtdHlwZWAgYW5kIEhUVFAgc3RhdHVzIGNvZGVzIG9uIHJlc3BvbnNlcwotIGJpbmRpbmcgcmVxdWVzdCB2YWx1ZXMgdG8gYSBzdHJ1Y3QsIGEgYG11bHRpcGFydC5SZWFkZXJgIG9yIHByb3ZpZGluZyBhIGBpby5SZWFkZXJgCgpZb3UgY2FuIHNlZSBhIGxpdHRsZSBtb3JlIGRldGFpbCBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUgaW4gdGhlIFsiV2hhdCBkb2VzIGl0IGxvb2sgbGlrZSJdKCN3aGF0LWRvZXMtaXQtbG9vay1saWtlLXN0cmljdCkgc2VjdGlvbi4KCj4gWyFOT1RFXQo+IFRvIGNvbmZpZ3VyZSB0aGUgc3RyaWN0IHNlcnZlciBnZW5lcmF0aW9uLCB5b3UgbXVzdCBzcGVjaWZ5IGFub3RoZXIgc2VydmVyIHRvIGJlIGdlbmVyYXRlZC4gRm9yIGluc3RhbmNlOgoKYGBgeWFtbAojIHlhbWwtbGFuZ3VhZ2Utc2VydmVyOiAkc2NoZW1hPWh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9kZWVwbWFwL29hcGktY29kZWdlbi9IRUFEL2NvbmZpZ3VyYXRpb24tc2NoZW1hLmpzb24KcGFja2FnZTogYXBpCmdlbmVyYXRlOgogICMgTk9URSBhbm90aGVyIHNlcnZlciBtdXN0IGJlIGFkZGVkIQogIGNoaS1zZXJ2ZXI6IHRydWUKICBzdHJpY3Qtc2VydmVyOiB0cnVlCm91dHB1dDogc2VydmVyLmdlbi5nbwpgYGAKCj4gWyFOT1RFXQo+IFRoaXMgZG9lc24ndCBpbmNsdWRlIFt2YWxpZGF0aW9uIG9mIGluY29taW5nIHJlcXVlc3RzXSgjcmVxdWVzdHJlc3BvbnNlLXZhbGlkYXRpb24tbWlkZGxld2FyZSkuCgojIyBHZW5lcmF0aW5nIEFQSSBjbGllbnRzCgpBcyB3ZWxsIGFzIGdlbmVyYXRpbmcgdGhlIHNlcnZlci1zaWRlIGJvaWxlcnBsYXRlLCBgb2FwaS1jb2RlZ2VuYCBjYW4gYWxzbyBnZW5lcmF0ZSBBUEkgY2xpZW50cy4KClRoaXMgYWltcyB0byBiZSBhbiBBUEkgY2xpZW50IHRoYXQgY2FuIGJlIHVzZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgbWV0aG9kcyBvZiB0aGUgQVBJLCBhbmQgaXMgcGVyZmVjdGx5IHN1aXRlZCBmb3IgcHJvZHVjdGlvbiB1c2FnZS4KCkhvd2V2ZXIsIGlmIHlvdSB3ZXJlIGxvb2tpbmcgZm9yIGEgc2xpZ2h0bHkgbW9yZSBTREstc3R5bGUgYXBwcm9hY2gsIG9yIGEgbWl4IG9mIGdlbmVyYXRlZCB0ZXN0cyBhbmQvb3IgZG9jdW1lbnRhdGlvbiwgdGhpcyBBUEkgY2xpZW50IG1heSBub3QgYmUgZm9yIHlvdSwgYW5kIHlvdSBtYXkgd2FudCB0byBsb29rIGF0IGFsdGVybmF0ZSB0b29saW5nLgoKRm9yIGluc3RhbmNlLCBnaXZlbiBhbiBgYXBpLnlhbWxgOgoKYGBgeWFtbApvcGVuYXBpOiAiMy4wLjAiCmluZm86CiAgdmVyc2lvbjogMS4wLjAKICB0aXRsZTogR2VuZXJhdGUgbW9kZWxzCnBhdGhzOgogIC9jbGllbnQ6CiAgICBnZXQ6CiAgICAgIG9wZXJhdGlvbklkOiBnZXRDbGllbnQKICAgICAgcmVzcG9uc2VzOgogICAgICAgIDIwMDoKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICAgJHJlZjogIiMvY29tcG9uZW50cy9zY2hlbWFzL0NsaWVudFR5cGUiCiAgICBwdXQ6CiAgICAgIG9wZXJhdGlvbklkOiB1cGRhdGVDbGllbnQKICAgICAgcmVzcG9uc2VzOgogICAgICAgIDQwMDoKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICAgdHlwZTogb2JqZWN0CiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOgogICAgICAgICAgICAgICAgICBjb2RlOgogICAgICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgICAgcmVxdWlyZWQ6CiAgICAgICAgICAgICAgICAtIGNvZGUKY29tcG9uZW50czoKICBzY2hlbWFzOgogICAgQ2xpZW50VHlwZToKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gbmFtZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG5hbWU6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICMgTk9URSB0aGF0IHRoaXMgaXMgbm90IGdlbmVyYXRlZCBieSBkZWZhdWx0IGJlY2F1c2UgaXQncyBub3QgcmVmZXJlbmNlZC4gSWYgeW91IHdhbnQgaXQsIHlvdSBuZWVkIHRvIHVzZSB0aGUgZm9sbG93aW5nIFlBTUwgY29uZmlndXJhdGlvbjoKICAgICMKICAgICMgb3V0cHV0LW9wdGlvbnM6CiAgICAjICAgc2tpcC1wcnVuZTogdHJ1ZQogICAgVW5yZWZlcmVuY2VkOgogICAgICB0eXBlOiBvYmplY3QKICAgICAgcmVxdWlyZWQ6CiAgICAgICAgLSBpZAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIGlkOgogICAgICAgICAgdHlwZTogaW50ZWdlcgpgYGAKCkFuZCBhIGBjZmcueWFtbGA6CgpgYGB5YW1sCiMgeWFtbC1sYW5ndWFnZS1zZXJ2ZXI6ICRzY2hlbWE9aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL0hFQUQvY29uZmlndXJhdGlvbi1zY2hlbWEuanNvbgpwYWNrYWdlOiBjbGllbnQKb3V0cHV0OiBjbGllbnQuZ2VuLmdvCmdlbmVyYXRlOgogIG1vZGVsczogdHJ1ZQogIGNsaWVudDogdHJ1ZQpgYGAKCkFuZCBhIGBnZW5lcmF0ZS5nb2A6CgpgYGBnbwpwYWNrYWdlIGNsaWVudAoKLy9nbzpnZW5lcmF0ZSBnbyBydW4gZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vb2FwaS1jb2RlZ2VuL3YyL2NtZC9vYXBpLWNvZGVnZW4gLWNvbmZpZyBjZmcueWFtbCBhcGkueWFtbApgYGAKClRoaXMgd291bGQgdGhlbiBnZW5lcmF0ZToKCmBgYGdvCnBhY2thZ2UgY2xpZW50CgovLyAuLi4KCi8vIENsaWVudFR5cGUgZGVmaW5lcyBtb2RlbCBmb3IgQ2xpZW50VHlwZS4KdHlwZSBDbGllbnRUeXBlIHN0cnVjdCB7CglOYW1lIHN0cmluZyBganNvbjoibmFtZSJgCn0KCi8vIC4uLgoKLy8gQ2xpZW50IHdoaWNoIGNvbmZvcm1zIHRvIHRoZSBPcGVuQVBJMyBzcGVjaWZpY2F0aW9uIGZvciB0aGlzIHNlcnZpY2UuCnR5cGUgQ2xpZW50IHN0cnVjdCB7CgkvLyBUaGUgZW5kcG9pbnQgb2YgdGhlIHNlcnZlciBjb25mb3JtaW5nIHRvIHRoaXMgaW50ZXJmYWNlLCB3aXRoIHNjaGVtZSwKCS8vIGh0dHBzOi8vYXBpLmRlZXBtYXAuY29tIGZvciBleGFtcGxlLiBUaGlzIGNhbiBjb250YWluIGEgcGF0aCByZWxhdGl2ZQoJLy8gdG8gdGhlIHNlcnZlciwgc3VjaCBhcyBodHRwczovL2FwaS5kZWVwbWFwLmNvbS9kZXYtdGVzdCwgYW5kIGFsbCB0aGUKCS8vIHBhdGhzIGluIHRoZSBzd2FnZ2VyIHNwZWMgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgc2VydmVyLgoJU2VydmVyIHN0cmluZwoKCS8vIERvZXIgZm9yIHBlcmZvcm1pbmcgcmVxdWVzdHMsIHR5cGljYWxseSBhICpodHRwLkNsaWVudCB3aXRoIGFueQoJLy8gY3VzdG9taXplZCBzZXR0aW5ncywgc3VjaCBhcyBjZXJ0aWZpY2F0ZSBjaGFpbnMuCglDbGllbnQgSHR0cFJlcXVlc3REb2VyCgoJLy8gQSBsaXN0IG9mIGNhbGxiYWNrcyBmb3IgbW9kaWZ5aW5nIHJlcXVlc3RzIHdoaWNoIGFyZSBnZW5lcmF0ZWQgYmVmb3JlIHNlbmRpbmcgb3ZlcgoJLy8gdGhlIG5ldHdvcmsuCglSZXF1ZXN0RWRpdG9ycyBbXVJlcXVlc3RFZGl0b3JGbgp9CgovLyAuLi4KCi8vIFRoZSBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGNsaWVudCBhYm92ZS4KdHlwZSBDbGllbnRJbnRlcmZhY2UgaW50ZXJmYWNlIHsKCS8vIEdldENsaWVudCByZXF1ZXN0CglHZXRDbGllbnQoY3R4IGNvbnRleHQuQ29udGV4dCwgcmVxRWRpdG9ycyAuLi5SZXF1ZXN0RWRpdG9yRm4pICgqaHR0cC5SZXNwb25zZSwgZXJyb3IpCgoJLy8gVXBkYXRlQ2xpZW50IHJlcXVlc3QKCVVwZGF0ZUNsaWVudChjdHggY29udGV4dC5Db250ZXh0LCByZXFFZGl0b3JzIC4uLlJlcXVlc3RFZGl0b3JGbikgKCpodHRwLlJlc3BvbnNlLCBlcnJvcikKfQoKLy8gLi4uCgovLyBDbGllbnRXaXRoUmVzcG9uc2VzSW50ZXJmYWNlIGlzIHRoZSBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGNsaWVudCB3aXRoIHJlc3BvbnNlcyBhYm92ZS4KdHlwZSBDbGllbnRXaXRoUmVzcG9uc2VzSW50ZXJmYWNlIGludGVyZmFjZSB7CgkvLyBHZXRDbGllbnRXaXRoUmVzcG9uc2UgcmVxdWVzdAoJR2V0Q2xpZW50V2l0aFJlc3BvbnNlKGN0eCBjb250ZXh0LkNvbnRleHQsIHJlcUVkaXRvcnMgLi4uUmVxdWVzdEVkaXRvckZuKSAoKkdldENsaWVudFJlc3BvbnNlLCBlcnJvcikKCgkvLyBVcGRhdGVDbGllbnRXaXRoUmVzcG9uc2UgcmVxdWVzdAoJVXBkYXRlQ2xpZW50V2l0aFJlc3BvbnNlKGN0eCBjb250ZXh0LkNvbnRleHQsIHJlcUVkaXRvcnMgLi4uUmVxdWVzdEVkaXRvckZuKSAoKlVwZGF0ZUNsaWVudFJlc3BvbnNlLCBlcnJvcikKfQoKdHlwZSBHZXRDbGllbnRSZXNwb25zZSBzdHJ1Y3QgewoJQm9keSAgICAgICAgIFtdYnl0ZQoJSFRUUFJlc3BvbnNlICpodHRwLlJlc3BvbnNlCglKU09OMjAwICAgICAgKkNsaWVudFR5cGUKfQoKLy8gLi4uCmBgYAoKV2l0aCB0aGlzIGdlbmVyYXRlZCBjbGllbnQsIGl0IGlzIHRoZW4gcG9zc2libGUgdG8gY29uc3RydWN0IGFuZCB1dGlsaXNlIHRoZSBjbGllbnQsIGZvciBpbnN0YW5jZToKCmBgYGdvCnBhY2thZ2UgY2xpZW50X3Rlc3QKCmltcG9ydCAoCgkiY29udGV4dCIKCSJmbXQiCgkibG9nIgoJIm5ldC9odHRwIgoKCSJnaXRodWIuY29tL29hcGktY29kZWdlbi9vYXBpLWNvZGVnZW4vdjIvZXhhbXBsZXMvY2xpZW50IgopCgpmdW5jIFRlc3RDbGllbnRfY2FuQ2FsbCgpIHsKCS8vIGN1c3RvbSBIVFRQIGNsaWVudAoJaGMgOj0gaHR0cC5DbGllbnR7fQoKCS8vIHdpdGggYSByYXcgaHR0cC5SZXNwb25zZQoJewoJCWMsIGVyciA6PSBjbGllbnQuTmV3Q2xpZW50KCJodHRwOi8vbG9jYWxob3N0OjEyMzQiLCBjbGllbnQuV2l0aEhUVFBDbGllbnQoJmhjKSkKCQlpZiBlcnIgIT0gbmlsIHsKCQkJbG9nLkZhdGFsKGVycikKCQl9CgoJCXJlc3AsIGVyciA6PSBjLkdldENsaWVudChjb250ZXh0LlRPRE8oKSkKCQlpZiBlcnIgIT0gbmlsIHsKCQkJbG9nLkZhdGFsKGVycikKCQl9CgkJaWYgcmVzcC5TdGF0dXNDb2RlICE9IGh0dHAuU3RhdHVzT0sgewoJCQlsb2cuRmF0YWxmKCJFeHBlY3RlZCBIVFRQIDIwMCBidXQgcmVjZWl2ZWQgJWQiLCByZXNwLlN0YXR1c0NvZGUpCgkJfQoJfQoKCS8vIG9yIHRvIGdldCBhIHN0cnVjdCB3aXRoIHRoZSBwYXJzZWQgcmVzcG9uc2UgYm9keQoJewoJCWMsIGVyciA6PSBjbGllbnQuTmV3Q2xpZW50V2l0aFJlc3BvbnNlcygiaHR0cDovL2xvY2FsaG9zdDoxMjM0IiwgY2xpZW50LldpdGhIVFRQQ2xpZW50KCZoYykpCgkJaWYgZXJyICE9IG5pbCB7CgkJCWxvZy5GYXRhbChlcnIpCgkJfQoKCQlyZXNwLCBlcnIgOj0gYy5HZXRDbGllbnRXaXRoUmVzcG9uc2UoY29udGV4dC5UT0RPKCkpCgkJaWYgZXJyICE9IG5pbCB7CgkJCWxvZy5GYXRhbChlcnIpCgkJfQoJCWlmIHJlc3AuU3RhdHVzQ29kZSgpICE9IGh0dHAuU3RhdHVzT0sgewoJCQlsb2cuRmF0YWxmKCJFeHBlY3RlZCBIVFRQIDIwMCBidXQgcmVjZWl2ZWQgJWQiLCByZXNwLlN0YXR1c0NvZGUoKSkKCQl9CgoJCWZtdC5QcmludGYoInJlc3AuSlNPTjIwMDogJXZcbiIsIHJlc3AuSlNPTjIwMCkKCX0KCn0KYGBgCgojIyBHZW5lcmF0aW5nIEFQSSBtb2RlbHMKCklmIHlvdSdyZSBsb29raW5nIHRvIG9ubHkgZ2VuZXJhdGUgdGhlIG1vZGVscyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBhIHJlbW90ZSBzZXJ2aWNlLCBmb3IgaW5zdGFuY2UgaWYgeW91IG5lZWQgdG8gaGFuZC1yb2xsIHRoZSBBUEkgY2xpZW50IGZvciB3aGF0ZXZlciByZWFzb24sIHlvdSBjYW4gZG8gdGhpcyBhcy1pcy4KCj4gWyFUSVBdCj4gVHJ5IHRvIGRlZmluZSBhcyBtdWNoIGFzIHBvc3NpYmxlIHdpdGhpbiB0aGUgYCMvY29tcG9uZW50cy9zY2hlbWFzYCBvYmplY3QsIGFzIGBvYXBpLWNvZGVnZW5gIHdpbGwgZ2VuZXJhdGUgYWxsIHRoZSB0eXBlcyBoZXJlLgo+Cj4gQWx0aG91Z2ggd2UgY2FuIGdlbmVyYXRlIHNvbWUgdHlwZXMgYmFzZWQgb24gaW5saW5lIGRlZmluaXRpb25zIGluIGkuZS4gYSBwYXRoJ3MgcmVzcG9uc2UgdHlwZSwgaXQgaXNuJ3QgYWx3YXlzIHBvc3NpYmxlIHRvIGRvIHRoaXMsIG9yIGlmIGl0IGlzIGdlbmVyYXRlZCwgY2FuIGJlIGEgbGl0dGxlIGF3a3dhcmQgdG8gd29yayB3aXRoIGFzIGl0IG1heSBiZSBkZWZpbmVkIGFzIGFuIGFub255bW91cyBzdHJ1Y3QuCgpGb3IgaW5zdGFuY2UsIGdpdmVuIGFuIGBhcGkueWFtbGA6CgpgYGB5YW1sCm9wZW5hcGk6ICIzLjAuMCIKaW5mbzoKICB2ZXJzaW9uOiAxLjAuMAogIHRpdGxlOiBHZW5lcmF0ZSBtb2RlbHMKcGF0aHM6CiAgL2NsaWVudDoKICAgIGdldDoKICAgICAgb3BlcmF0aW9uSWQ6IGdldENsaWVudAogICAgICByZXNwb25zZXM6CiAgICAgICAgMjAwOgogICAgICAgICAgY29udGVudDoKICAgICAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICAgICAjIE5PVEUgdGhhdCBDbGllbnQgaXMgZ2VuZXJhdGVkIGhlcmUsIGJlY2F1c2UgaXQncyB3aXRoaW4gIy9jb21wb25lbnRzL3NjaGVtYXMKICAgICAgICAgICAgICAgICRyZWY6ICIjL2NvbXBvbmVudHMvc2NoZW1hcy9DbGllbnQiCiAgICBwdXQ6CiAgICAgIG9wZXJhdGlvbklkOiB1cGRhdGVDbGllbnQKICAgICAgcmVzcG9uc2VzOgogICAgICAgIDQwMDoKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgIyBOT1RFIHRoYXQgdGhpcyBhbm9ueW1vdXMgb2JqZWN0IGlzIC9ub3QvIGdlbmVyYXRlZCBiZWNhdXNlIGl0J3MgYW4gYW5vbnltb3VzLCBidXQgd291bGQgYmUgZ2VuZXJhdGVkIGlmIHVzaW5nIGBnZW5lcmF0ZTogY2xpZW50YAogICAgICAgICAgICAgICMgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWVwbWFwL29hcGktY29kZWdlbi9pc3N1ZXMvMTUxMgogICAgICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgICAgIHR5cGU6IG9iamVjdAogICAgICAgICAgICAgICAgcHJvcGVydGllczoKICAgICAgICAgICAgICAgICAgY29kZToKICAgICAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgICAgIHJlcXVpcmVkOgogICAgICAgICAgICAgICAgLSBjb2RlCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgIENsaWVudDoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gbmFtZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG5hbWU6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICMgTk9URSB0aGF0IHRoaXMgaXMgbm90IGdlbmVyYXRlZCBieSBkZWZhdWx0IGJlY2F1c2UgaXQncyBub3QgcmVmZXJlbmNlZC4gSWYgeW91IHdhbnQgaXQsIHlvdSBuZWVkIHRvIHVzZSB0aGUgZm9sbG93aW5nIFlBTUwgY29uZmlndXJhdGlvbjoKICAgICMKICAgICMgb3V0cHV0LW9wdGlvbnM6CiAgICAjICAgc2tpcC1wcnVuZTogdHJ1ZQogICAgVW5yZWZlcmVuY2VkOgogICAgICB0eXBlOiBvYmplY3QKICAgICAgcmVxdWlyZWQ6CiAgICAgICAgLSBpZAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIGlkOgogICAgICAgICAgdHlwZTogaW50ZWdlcgpgYGAKCkFuZCBhIGBjZmcueWFtbGA6CgpgYGB5YW1sCiMgeWFtbC1sYW5ndWFnZS1zZXJ2ZXI6ICRzY2hlbWE9aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL0hFQUQvY29uZmlndXJhdGlvbi1zY2hlbWEuanNvbgpwYWNrYWdlOiBvbmx5bW9kZWxzCm91dHB1dDogb25seS1tb2RlbHMuZ2VuLmdvCmdlbmVyYXRlOgogIG1vZGVsczogdHJ1ZQpgYGAKCkFuZCBhIGBnZW5lcmF0ZS5nb2A6CgpgYGBnbwpwYWNrYWdlIG9ubHltb2RlbHMKCi8vZ286Z2VuZXJhdGUgZ28gcnVuIGdpdGh1Yi5jb20vb2FwaS1jb2RlZ2VuL29hcGktY29kZWdlbi92Mi9jbWQvb2FwaS1jb2RlZ2VuIC1jb25maWcgY2ZnLnlhbWwgYXBpLnlhbWwKYGBgCgpUaGlzIHdvdWxkIHRoZW4gZ2VuZXJhdGU6CgpgYGBnbwpwYWNrYWdlIG9ubHltb2RlbHMKCi8vIENsaWVudCBkZWZpbmVzIG1vZGVsIGZvciBDbGllbnQuCnR5cGUgQ2xpZW50IHN0cnVjdCB7CglOYW1lIHN0cmluZyBganNvbjoibmFtZSJgCn0KYGBgCgpJZiB5b3Ugd2lzaCB0byBhbHNvIGdlbmVyYXRlIHRoZSBgVW5yZWZlcmVuY2VkYCB0eXBlLCB5b3Ugd291bGQgbmVlZCB0aGUgZm9sbG93aW5nIGBjZmcueWFtbGA6CgpgYGB5YW1sCiMgeWFtbC1sYW5ndWFnZS1zZXJ2ZXI6ICRzY2hlbWE9aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL0hFQUQvY29uZmlndXJhdGlvbi1zY2hlbWEuanNvbgpwYWNrYWdlOiBvbmx5bW9kZWxzCm91dHB1dDogb25seS1tb2RlbHMuZ2VuLmdvCmdlbmVyYXRlOgogIG1vZGVsczogdHJ1ZQpvdXRwdXQtb3B0aW9uczoKICAjIE5PVEUgdGhhdCB0aGlzIGlzIG9ubHkgcmVxdWlyZWQgZm9yIHRoZSBgVW5yZWZlcmVuY2VkYCB0eXBlCiAgc2tpcC1wcnVuZTogdHJ1ZQpgYGAKCkZvciBhIGNvbXBsZXRlIGV4YW1wbGUgc2VlIFtgZXhhbXBsZXMvb25seS1tb2RlbHNgXShleGFtcGxlcy9vbmx5LW1vZGVscykuCgojIyBTcGxpdHRpbmcgbGFyZ2UgT3BlbkFQSSBzcGVjcyBhY3Jvc3MgbXVsdGlwbGUgcGFja2FnZXMgKGFrYSAiSW1wb3J0IE1hcHBpbmciIG9yICJleHRlcm5hbCByZWZlcmVuY2VzIikKPGEgbmFtZT1pbXBvcnQtbWFwcGluZz48L2E+CgpXaGVuIHlvdSd2ZSBnb3QgYSBsYXJnZSBPcGVuQVBJIHNwZWNpZmljYXRpb24sIHlvdSBtYXkgZmluZCBpdCB1c2VmdWwgdG8gc3BsaXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBzcGVjIGFjcm9zcyBtdWx0aXBsZSBmaWxlcywgdXNpbmcgZXh0ZXJuYWwgcmVmZXJlbmNlcywgc3VjaCBhczoKCmBgYHlhbWwKY29tcG9uZW50czoKICBzY2hlbWFzOgogICAgVXNlcjoKICAgICAgJHJlZjogJy4uL2NvbW1vbi9hcGkueWFtbCMvY29tcG9uZW50cy9zY2hlbWFzL1VzZXInCmBgYAoKVGhpcyBpcyBzdXBwb3J0ZWQgYnkgYG9hcGktY29kZWdlbmAsIHRocm91Z2ggdGhlIGFiaWxpdHkgdG8gcGVyZm9ybSAiSW1wb3J0IE1hcHBpbmciLgoKRm9yIGluc3RhbmNlLCBsZXQncyBzYXkgdGhhdCB3ZSBoYXZlIGEgbGFyZ2UgQVBJLCB3aGljaCBoYXMgYSB1c2VyLWZhY2luZyBBUEkgYW5kIGFuIGFkbWluIEFQSSwgYm90aCBvZiB3aGljaCB1c2UgYSBjb21tb24gc2V0IG9mIEFQSSBtb2RlbHMuCgpJbiB0aGlzIGNhc2UsIHdlIG1heSBoYXZlIGFuIEFkbWluIEFQSSB0aGF0IGxvb2tzIGxpa2U6CgpgYGB5YW1sCiMgYWRtaW4vYXBpLnlhbWwKb3BlbmFwaTogIjMuMC4wIgppbmZvOgogIHZlcnNpb246IDEuMC4wCiAgdGl0bGU6IEFkbWluIEFQSQogIGRlc2NyaXB0aW9uOiBUaGUgYWRtaW4tb25seSBwb3J0aW9uIG9mIHRoZSBBUEksIHdoaWNoIGhhcyBpdHMgb3duIHNlcGFyYXRlIE9wZW5BUEkgc3BlYwp0YWdzOgogIC0gbmFtZTogYWRtaW4KICAgIGRlc2NyaXB0aW9uOiBBZG1pbiBBUEkgZW5kcG9pbnRzCiAgLSBuYW1lOiB1c2VyCiAgICBkZXNjcmlwdGlvbjogQVBJIGVuZHBvaW50IHRoYXQgcGVydGFpbnMgdG8gdXNlciBkYXRhCnBhdGhzOgogIC9hZG1pbi91c2VyL3tpZH06CiAgICBnZXQ6CiAgICAgIHRhZ3M6CiAgICAgICAgLSBhZG1pbgogICAgICAgIC0gdXNlcgogICAgICBzdW1tYXJ5OiBHZXQgYSB1c2VyJ3MgZGV0YWlscwogICAgICBvcGVyYXRpb25JZDogZ2V0VXNlckJ5SWQKICAgICAgcGFyYW1ldGVyczoKICAgICAgICAtIG5hbWU6IGlkCiAgICAgICAgICBpbjogcGF0aAogICAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgIGZvcm1hdDogdXVpZAogICAgICByZXNwb25zZXM6CiAgICAgICAgMjAwOgogICAgICAgICAgZGVzY3JpcHRpb246IFN1Y2Nlc3MKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL1VzZXInCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgIFVzZXI6CiAgICAgICRyZWY6ICcuLi9jb21tb24vYXBpLnlhbWwjL2NvbXBvbmVudHMvc2NoZW1hcy9Vc2VyJwpgYGAKClRoaXMgcmVmZXJlbmNlcyB0aGUgY29tbW9uIHNwZWM6CgpgYGB5YW1sCiMgY29tbW9uL2FwaS55YW1sCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgIFVzZXI6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UKICAgICAgcHJvcGVydGllczoKICAgICAgICBuYW1lOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gbmFtZQpgYGAKCkFuZCBmaW5hbGx5IHdlIGhhdmUgb3VyIGNvbmZpZ3VyYXRpb24gZmlsZToKCmBgYHlhbWwKIyB5YW1sLWxhbmd1YWdlLXNlcnZlcjogJHNjaGVtYT1odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZGVlcG1hcC9vYXBpLWNvZGVnZW4vSEVBRC9jb25maWd1cmF0aW9uLXNjaGVtYS5qc29uCiMgYWRtaW4vY2ZnLnlhbWwKcGFja2FnZTogYWRtaW4Kb3V0cHV0OiBzZXJ2ZXIuZ2VuLmdvCmdlbmVyYXRlOgogIG1vZGVsczogdHJ1ZQogIGNoaS1zZXJ2ZXI6IHRydWUKb3V0cHV0LW9wdGlvbnM6CiAgIyB0byBtYWtlIHN1cmUgdGhhdCBhbGwgdHlwZXMgYXJlIGdlbmVyYXRlZAogIHNraXAtcHJ1bmU6IHRydWUKIyBOT1RFIHRoYXQgdGhpcyB3b24ndCB3b3JrLCBhcyBpdCdzIG1pc3NpbmcgYGltcG9ydC1tYXBwaW5nYApgYGAKCklmIHdlIHdlcmUgdG8gcnVuIGBvYXBpLWNvZGVnZW5gLCB0aGlzIHdpbGwgZmFpbCB3aXRoIHRoZSBmb2xsb3dpbmcgZXJyb3IKCmBgYAplcnJvciBnZW5lcmF0aW5nIGNvZGU6IGVycm9yIGNyZWF0aW5nIG9wZXJhdGlvbiBkZWZpbml0aW9uczogZXJyb3IgZ2VuZXJhdGluZyByZXNwb25zZSBkZWZpbml0aW9uczogZXJyb3IgZ2VuZXJhdGluZyByZXF1ZXN0IGJvZHkgZGVmaW5pdGlvbjogZXJyb3IgdHVybmluZyByZWZlcmVuY2UgKC4uL2NvbW1vbi9hcGkueWFtbCMvY29tcG9uZW50cy9zY2hlbWFzL1VzZXIpIGludG8gYSBHbyB0eXBlOiB1bnJlY29nbml6ZWQgZXh0ZXJuYWwgcmVmZXJlbmNlICcuLi9jb21tb24vYXBpLnlhbWwnOyBwbGVhc2UgcHJvdmlkZSB0aGUga25vd24gaW1wb3J0IGZvciB0aGlzIHJlZmVyZW5jZSB1c2luZyBvcHRpb24gLS1pbXBvcnQtbWFwcGluZwpgYGAKClRoaXMgaXMgYmVjYXVzZSBgb2FwaS1jb2RlZ2VuYCByZXF1aXJlczoKCmBgYHlhbWwKIyB5YW1sLWxhbmd1YWdlLXNlcnZlcjogJHNjaGVtYT1odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZGVlcG1hcC9vYXBpLWNvZGVnZW4vSEVBRC9jb25maWd1cmF0aW9uLXNjaGVtYS5qc29uCnBhY2thZ2U6IGFkbWluCm91dHB1dDogc2VydmVyLmdlbi5nbwpnZW5lcmF0ZToKICBtb2RlbHM6IHRydWUKICBjaGktc2VydmVyOiB0cnVlCm91dHB1dC1vcHRpb25zOgogICMgdG8gbWFrZSBzdXJlIHRoYXQgYWxsIHR5cGVzIGFyZSBnZW5lcmF0ZWQKICBza2lwLXBydW5lOiB0cnVlCmltcG9ydC1tYXBwaW5nOgogICMgZm9yIGEgZ2l2ZW4gZmlsZS9VUkwgdGhhdCBpcyAkcmVmJ2QsIHBvaW50IGBvYXBpLWNvZGVnZW5gIHRvIHRoZSBHbyBwYWNrYWdlIHRoYXQgdGhpcyBzcGVjIGlzIGdlbmVyYXRlZCBpbnRvLCB0byBwZXJmb3JtIEdvIHBhY2thZ2UgaW1wb3J0cwogIC4uL2NvbW1vbi9hcGkueWFtbDogZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vb2FwaS1jb2RlZ2VuL3YyL2V4YW1wbGVzL2ltcG9ydC1tYXBwaW5nL2NvbW1vbgpgYGAKClRoaXMgd2lsbCB0aGVuIGdlbmVyYXRlIHRoZSBmb2xsb3dpbmcgY29kZToKCmBgYGdvCnBhY2thZ2UgYWRtaW4KCmltcG9ydCAoCgkvLyAuLi4KCWV4dGVybmFsUmVmMCAiZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vb2FwaS1jb2RlZ2VuL3YyL2V4YW1wbGVzL2ltcG9ydC1tYXBwaW5nL2NvbW1vbiIKKQoKLy8gVXNlciBkZWZpbmVzIG1vZGVsIGZvciBVc2VyLgp0eXBlIFVzZXIgPSBleHRlcm5hbFJlZjAuVXNlcgpgYGAKCklmIHlvdSBkb24ndCB3YW50IHRvIGRvIHRoaXMsIGFuIGFsdGVybmF0ZSBvcHRpb24gaXMgdG8gW2J1bmRsZSB5b3VyIG11bHRpcGxlIE9wZW5BUEkgZmlsZXNdKGh0dHBzOi8vd3d3Lmp2dC5tZS9wb3N0cy8yMDIyLzAyLzEwL2J1bmRsZS1vcGVuYXBpLykgaW50byBhIHNpbmdsZSBzcGVjLgoKQ2hlY2sgb3V0IFt0aGUgaW1wb3J0LW1hcHBpbmcgZXhhbXBsZV0oZXhhbXBsZXMvaW1wb3J0LW1hcHBpbmcvKSBmb3IgdGhlIGZ1bGwgY29kZS4KCiMjIE1vZGlmeWluZyB0aGUgaW5wdXQgT3BlbkFQSSBTcGVjaWZpY2F0aW9uCgpQcmlvciB0byBgb2FwaS1jb2RlZ2VuYCB2Mi40LjAsIHVzZXJzIHdpc2hpbmcgdG8gb3ZlcnJpZGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiwgZm9yIGluc3RhbmNlIHRha2luZyBhZHZhbnRhZ2Ugb2YgZXh0ZW5zaW9ucyBzdWNoIGFzIGB4LWdvLXR5cGVgICB3b3VsZCBuZWVkIHRvIG1vZGlmeSB0aGUgT3BlbkFQSSBzcGVjaWZpY2F0aW9uIHRoZXkgYXJlIHVzaW5nLgoKSW4gYSBsb3Qgb2YgY2FzZXMsIHRoaXMgT3BlbkFQSSBzcGVjaWZpY2F0aW9uIHdvdWxkIGJlIHByb2R1Y2VkIGJ5IGEgZGlmZmVyZW50IHRlYW0gdG8gdGhlIGNvbnN1bWVycyAob3IgZXZlbiBhIGRpZmZlcmVudCBjb21wYW55KSBhbmQgc28gYXNraW5nIHRoZW0gdG8gbWFrZSBjaGFuZ2VzIGxpa2UgdGhpcyB3ZXJlIHVucmVhc29uYWJsZS4KClRoaXMgd291bGQgbGVhZCB0byB0aGUgQVBJIGNvbnN1bWVycyBuZWVkaW5nIHRvIHZlbmRvciB0aGUgc3BlY2lmaWNhdGlvbiBmcm9tIHRoZSBwcm9kdWNlciAod2hpY2ggaXMgW291ciByZWNvbW1lbmRhdGlvbiBhbnl3YXldKCNodHRwcy1wYXRocykpIGFuZCB0aGVuIG1ha2UgYW55IG51bWJlciBvZiBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBzcGVjaWZpY2F0aW9uIHRvIG1ha2UgaXQgZ2VuZXJhdGUgY29kZSB0aGF0IGxvb2tzIHJlYXNvbmFibGUuCgpIb3dldmVyLCBpbiB0aGUgY2FzZSB0aGF0IGEgY29uc3VtZXIgd291bGQgdXBkYXRlIHRoZWlyIHNwZWNpZmljYXRpb24sIHRoZXkgd291bGQgbGlrZWx5IGVuZCB1cCB3aXRoIGEgbnVtYmVyIG9mIG1lcmdlIGNvbmZsaWN0cy4KCk5vdywgYXMgb2YgYG9hcGktY29kZWdlbmAgdjIuNC4wLCBpdCBpcyBub3cgcG9zc2libGUgdG8gbWFrZSBjaGFuZ2VzIHRvIHRoZSBpbnB1dCBPcGVuQVBJIHNwZWNpZmljYXRpb24gX3dpdGhvdXQgbmVlZGluZyB0byBtb2RpZnkgaXQgZGlyZWN0bHlfLgoKVGhpcyB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIFtPcGVuQVBJIE92ZXJsYXkgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL09BSS9PdmVybGF5LVNwZWNpZmljYXRpb24pLCB3aGljaCBpcyBhIHN0YWJsZSBzcGVjaWZpY2F0aW9uLgoKPiBbIUNBVVRJT05dCj4gQmV3YXJlISBIZXJlIChtYXkpIGJlIGRyYWdvbnMuCj4KPiBUaGUgT3ZlcmxheSBzcGVjaWZpY2F0aW9uIHJlcXVpcmVzIHRoZSB1c2Ugb2YgSlNPTiBQYXRoLCB3aGljaCBzb21lIHVzZXJzIG1heSBmaW5kIGRpZmZpY3VsdCB0byB3cml0ZSBhbmQvb3IgbWFpbnRhaW4uCj4KPiBXZSBzdGlsbCBoZWF2aWx5IHJlY29tbWVuZCB1c2luZyBPdmVybGF5IGZ1bmN0aW9uYWxpdHksIGJ1dCB3b3VsZCBsaWtlIHVzZXJzIHRvIGJlIGF3YXJlIG9mIHRoaXMuCj4KPiBUaGVyZSBpcyBhIFtwcm9wb3NlZCBtb2RpZmljYXRpb24gdG8gdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9PQUkvT3ZlcmxheS1TcGVjaWZpY2F0aW9uL3B1bGwvMzIpIHdoaWNoIHdvdWxkIHJlbGF4IHRoZSBuZWVkIGZvciBKU09OIFBhdGggYXMgdGhlIHRhcmdldGluZyBtZWNoYW5pc20uCgpGb3IgaW5zdGFuY2UsIGxldCdzIHNheSB0aGF0IHdlIGhhdmUgdGhlIGZvbGxvd2luZyBPcGVuQVBJIHNwZWNpZmljYXRpb24sIHdoaWNoIHByb3ZpZGVzIGluc2lnaHQgaW50byBhbiBpbnRlcm5hbCBlbmRwb2ludCB0aGF0IHdlIHNob3VsZCBub3QgYmUgZ2VuZXJhdGluZyBhbnkgY29kZSBmb3IgKGRlbm90ZWQgYnkgYHgtaW50ZXJuYWxgKToKCmBgYHlhbWwKb3BlbmFwaTogIjMuMC4wIgppbmZvOgogIHZlcnNpb246IDEuMC4wCiAgdGl0bGU6ICJFeGFtcGxlIHRvIGluZGljYXRlIGhvdyB0byB1c2UgdGhlIE9wZW5BUEkgT3ZlcmxheSBzcGVjaWZpY2F0aW9uIChodHRwczovL2dpdGh1Yi5jb20vT0FJL092ZXJsYXktU3BlY2lmaWNhdGlvbikiCnBhdGhzOgogIC9waW5nOgogICAgZ2V0OgogICAgICByZXNwb25zZXM6CiAgICAgICAgJzIwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogcGV0IHJlc3BvbnNlCiAgICAgICAgICBjb250ZW50OgogICAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9Qb25nJwogICAgZGVsZXRlOgogICAgICB4LWludGVybmFsOiB0cnVlCiAgICAgIHJlc3BvbnNlczoKICAgICAgICAnMjAyJzoKICAgICAgICAgIGNvbnRlbnQ6IHt9CmBgYAoKSWYgd2Ugd2VyZSB0byBydW4gYG9hcGktY29kZWdlbmAgd2l0aCBvdXQtb2YtdGhlLWJveCBmdW5jdGlvbmFsaXR5LCB0aGlzIHdvdWxkIHRoZW4gbGVhZCB0byB0aGUgREVMRVRFIGVuZHBvaW50IGJlaW5nIGdlbmVyYXRlZCwgd2hpY2ggd2UgZG9uJ3Qgd2FudC4KCkluc3RlYWQsIHdlIGNhbiBkZWZpbmUgdGhlIGZvbGxvd2luZyBgb3ZlcmxheS55YW1sYDoKCgpgYGB5YW1sCm92ZXJsYXk6IDEuMC4wCmluZm86CiAgdGl0bGU6IE92ZXJsYXkKICB2ZXJzaW9uOiAwLjAuMAphY3Rpb25zOgotIHRhcmdldDogJC5wYXRocy4qWz8oQC54LWludGVybmFsKV0KICBkZXNjcmlwdGlvbjogUmVtb3ZlIGludGVybmFsIGVuZHBvaW50cyAobm90ZWQgYnkgeC1pbnRlcm5hbCkKICByZW1vdmU6IHRydWUKLSB0YXJnZXQ6ICQucGF0aHMuKi4qWz8oQC54LWludGVybmFsKV0KICBkZXNjcmlwdGlvbjogUmVtb3ZlIGludGVybmFsIGVuZHBvaW50cyAobm90ZWQgYnkgeC1pbnRlcm5hbCkKICByZW1vdmU6IHRydWUKYGBgCgpBbmQgb3VyIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgYG9hcGktY29kZWdlbmA6CgpgYGB5YW1sCiMgeWFtbC1sYW5ndWFnZS1zZXJ2ZXI6ICRzY2hlbWE9aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL0hFQUQvY29uZmlndXJhdGlvbi1zY2hlbWEuanNvbgpwYWNrYWdlOiBhcGkKb3V0cHV0OiBwaW5nLmdlbi5nbwpnZW5lcmF0ZToKICBtb2RlbHM6IHRydWUKICBnb3JpbGxhLXNlcnZlcjogdHJ1ZQogIGVtYmVkZGVkLXNwZWM6IHRydWUKb3V0cHV0LW9wdGlvbnM6CiAgb3ZlcmxheToKICAgIHBhdGg6IG92ZXJsYXkueWFtbApgYGAKClRoaXMgdGhlbiBjb21wbGV0ZWx5IHJlbW92ZXMgdGhlIERFTEVURSBlbmRwb2ludCBfYmVmb3JlXyB3ZSBldmVuIHN0YXJ0IHRvIHBhcnNlIHRoZSBzcGVjaWZpY2F0aW9uIGluIGBvYXBpLWNvZGVnZW5gLCBzbyBpdCdzIGFzIGlmIHlvdXIgc3BlY2lmaWNhdGlvbiB3YXMgcHJvdmlkZWQgd2l0aG91dCB0aGF0IGVuZHBvaW50LgoKQ2hlY2sgb3V0IFt0aGUgb3ZlcmxheSBleGFtcGxlXShleGFtcGxlcy9vdmVybGF5LykgZm9yIHRoZSBmdWxsIGNvZGUsIGFuZCBzb21lIG1vcmUgY29tcGxleCBleGFtcGxlcy4KCiMjIEdlbmVyYXRpbmcgTnVsbGFibGUgdHlwZXMKCkl0J3MgcG9zc2libGUgdGhhdCB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGRldGVybWluZSB3aGV0aGVyIGEgZmllbGQgaXNuJ3Qgc2VudCwgaXMgc2VudCBhcyBgbnVsbGAgb3IgaGFzIGEgdmFsdWUuCgpGb3IgaW5zdGFuY2UsIGlmIHlvdSBoYWQgdGhlIGZvbGxvd2luZyBPcGVuQVBJIHByb3BlcnR5OgoKYGBgeWFtbApTOgogIHR5cGU6IG9iamVjdAogIHByb3BlcnRpZXM6CiAgICBGaWVsZDoKICAgICAgdHlwZTogc3RyaW5nCiAgICAgIG51bGxhYmxlOiB0cnVlCiAgICByZXF1aXJlZDogW10KYGBgCgpUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaW4gYG9hcGktY29kZWdlbmAgaXMgdG8gZ2VuZXJhdGU6CgpgYGBnbwp0eXBlIFMgc3RydWN0IHsKCUZpZWxkICpzdHJpbmcgYGpzb246ImZpZWxkLG9taXRlbXB0eSJgCn0KYGBgCgpIb3dldmVyLCB5b3UgbG9zZSB0aGUgYWJpbGl0eSB0byB1bmRlcnN0YW5kIHRoZSB0aHJlZSBjYXNlcywgYXMgdGhlcmUncyBubyB3YXkgdG8gZGlzdGluZ3Vpc2ggdHdvIG9mIHRoZSB0eXBlcyBmcm9tIGVhY2ggb3RoZXI6CgotIGlzIHRoaXMgZmllbGQgbm90IHNlbnQ/IChDYW4gYmUgY2hlY2tlZCB3aXRoIGBTLkZpZWxkID09IG5pbGApCi0gaXMgdGhpcyBmaWVsZCBgbnVsbGA/IChDYW4gYmUgY2hlY2tlZCB3aXRoIGBTLkZpZWxkID09IG5pbGApCi0gZG9lcyB0aGlzIGZpZWxkIGhhdmUgYSB2YWx1ZT8gKGBTLkZpZWxkICE9IG5pbCAmJiAqUy5GaWVsZCA9PSAiMTIzImApCgpBcyBvZiBgb2FwaS1jb2RlZ2VuYCBbdjIuMS4wXShodHRwczovL2dpdGh1Yi5jb20vZGVlcG1hcC9vYXBpLWNvZGVnZW4vcmVsZWFzZXMvdGFnL3YyLjEuMCkgaXQgaXMgbm93IHBvc3NpYmxlIHRvIHJlcHJlc2VudCB0aGlzIHdpdGggdGhlIGBudWxsYWJsZS5OdWxsYWJsZWAgdHlwZSBmcm9tIFtvdXIgbmV3IGxpYnJhcnksIG9hcGktY29kZWdlbi9udWxsYWJsZV0oaHR0cHM6Ly9naXRodWIuY29tL29hcGktY29kZWdlbi9udWxsYWJsZSkuCgpJZiB5b3UgY29uZmlndXJlIHlvdXIgZ2VuZXJhdG9yJ3MgT3V0cHV0IE9wdGlvbnMgdG8gb3B0LWluIHRvIHRoaXMgYmVoYXZpb3VyLCBhcyBzbzoKCmBgYHlhbWwKb3V0cHV0LW9wdGlvbnM6CiAgbnVsbGFibGUtdHlwZTogdHJ1ZQpgYGAKCllvdSB3aWxsIG5vdyByZWNlaXZlIHRoZSBmb2xsb3dpbmcgb3V0cHV0OgoKYGBgZ28KdHlwZSBTIHN0cnVjdCB7CiAgICAvLyBub3RlIHRoYXQgdGhlcmUncyBubyBwb2ludGVyIGhlcmUsIGp1c3QgYG9taXRlbXB0eWAKICAgIEZpZWxkIG51bGxhYmxlLk51bGxhYmxlW3N0cmluZ10gYGpzb246ImZpZWxkLG9taXRlbXB0eSJgCn0KYGBgCgojIyBPcGVuQVBJIGV4dGVuc2lvbnMKCkFzIHdlbGwgYXMgdGhlIGNvcmUgT3BlbkFQSSBzdXBwb3J0LCB3ZSBhbHNvIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBPcGVuQVBJIGV4dGVuc2lvbnMsIGFzIGRlbm90ZWQgYnkgdGhlIFtPcGVuQVBJIFNwZWNpZmljYXRpb24gRXh0ZW5zaW9uc10oaHR0cHM6Ly9zcGVjLm9wZW5hcGlzLm9yZy9vYXMvdjMuMC4zI3NwZWNpZmljYXRpb24tZXh0ZW5zaW9ucykuCgo8dGFibGU+Cgo8dHI+Cjx0aD4KRXh0ZW5zaW9uCjwvdGg+Cjx0aD4KRGVzY3JpcHRpb24KPC90aD4KPHRoPgpFeGFtcGxlIHVzYWdlCjwvdGg+CjwvdHI+Cgo8dHI+Cjx0ZD4KCmB4LWdvLXR5cGVgIDxicj4KYHgtZ28tdHlwZS1pbXBvcnRgCgo8L3RkPgo8dGQ+Ck92ZXJyaWRlIHRoZSBnZW5lcmF0ZWQgdHlwZSBkZWZpbml0aW9uIChhbmQgb3B0aW9uYWxseSwgYWRkIGFuIGltcG9ydCBmcm9tIGFub3RoZXIgcGFja2FnZSkKPC90ZD4KPHRkPgo8ZGV0YWlscz4KClVzaW5nIHRoZSBgeC1nby10eXBlYCAoYW5kIG9wdGlvbmFsbHksIGB4LWdvLXR5cGUtaW1wb3J0YCB3aGVuIHlvdSBuZWVkIHRvIGltcG9ydCBhbm90aGVyIHBhY2thZ2UpIGFsbG93cyBvdmVycmlkaW5nIHRoZSB0eXBlIHRoYXQgYG9hcGktY29kZWdlbmAgZGV0ZXJtaW5lZCB0aGUgZ2VuZXJhdGVkIHR5cGUgc2hvdWxkIGJlLgoKV2UgY2FuIHNlZSB0aGlzIGF0IHBsYXkgd2l0aCB0aGUgZm9sbG93aW5nIHNjaGVtYXM6CgpgYGB5YW1sCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgIENsaWVudDoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gbmFtZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG5hbWU6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBpZDoKICAgICAgICAgIHR5cGU6IG51bWJlcgogICAgQ2xpZW50V2l0aEV4dGVuc2lvbjoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gbmFtZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG5hbWU6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICMgdGhpcyBpcyBhIGJpdCBvZiBhIGNvbnRyaXZlZCBleGFtcGxlLCBhcyB5b3UgY291bGQgaW5zdGVhZCB1c2UKICAgICAgICAgICMgYGZvcm1hdDogdXVpZGAgYnV0IGl0IGV4cGxhaW5zIGhvdyB5b3UnZCBkbyB0aGlzIHdoZW4gdGhlcmUgbWF5IGJlCiAgICAgICAgICAjIGEgY2xhc2gsIGZvciBpbnN0YW5jZSBpZiB5b3UgYWxyZWFkeSBoYWQgYSBgdXVpZGAgcGFja2FnZSB0aGF0IHdhcwogICAgICAgICAgIyBiZWluZyBpbXBvcnRlZCwgb3IgLi4uCiAgICAgICAgICB4LWdvLXR5cGU6IGdvb2dsZXV1aWQuVVVJRAogICAgICAgICAgeC1nby10eXBlLWltcG9ydDoKICAgICAgICAgICAgcGF0aDogZ2l0aHViLmNvbS9nb29nbGUvdXVpZAogICAgICAgICAgICBuYW1lOiBnb29nbGV1dWlkCiAgICAgICAgaWQ6CiAgICAgICAgICB0eXBlOiBudW1iZXIKICAgICAgICAgICMgLi4uIHRoaXMgaXMgYWxzbyBhIGJpdCBvZiBhIGNvbnRyaXZlZCBleGFtcGxlLCBhcyB5b3UgY291bGQgdXNlCiAgICAgICAgICAjIGB0eXBlOiBpbnRlZ2VyYCBidXQgaW4gdGhlIGNhc2UgdGhhdCB5b3Uga25vdyBiZXR0ZXIgdGhhbiB3aGF0CiAgICAgICAgICAjIG9hcGktY29kZWdlbiBpcyBnZW5lcmF0aW5nLCBsaWtlIHNvOgogICAgICAgICAgeC1nby10eXBlOiBpbnQ2NApgYGAKCkZyb20gaGVyZSwgd2Ugbm93IGdldCB0d28gZGlmZmVyZW50IG1vZGVsczoKCmBgYGdvCi8vIENsaWVudCBkZWZpbmVzIG1vZGVsIGZvciBDbGllbnQuCnR5cGUgQ2xpZW50IHN0cnVjdCB7CglJZCAgICpmbG9hdDMyIGBqc29uOiJpZCxvbWl0ZW1wdHkiYAoJTmFtZSBzdHJpbmcgICBganNvbjoibmFtZSJgCn0KCi8vIENsaWVudFdpdGhFeHRlbnNpb24gZGVmaW5lcyBtb2RlbCBmb3IgQ2xpZW50V2l0aEV4dGVuc2lvbi4KdHlwZSBDbGllbnRXaXRoRXh0ZW5zaW9uIHN0cnVjdCB7CglJZCAgICppbnQ2NCAgICAgICAgICBganNvbjoiaWQsb21pdGVtcHR5ImAKCU5hbWUgZ29vZ2xldXVpZC5VVUlEIGBqc29uOiJuYW1lImAKfQpgYGAKCllvdSBjYW4gc2VlIHRoaXMgaW4gbW9yZSBkZXRhaWwgaW4gW3RoZSBleGFtcGxlIGNvZGVdKGV4YW1wbGVzL2V4dGVuc2lvbnMveGdvdHlwZS8pLgoKPC9kZXRhaWxzPgo8L3RkPgo8L3RyPgoKPHRyPgo8dGQ+CgpgeC1nby10eXBlLXNraXAtb3B0aW9uYWwtcG9pbnRlcmAKCjwvdGQ+Cjx0ZD4KRG8gbm90IGFkZCBhIHBvaW50ZXIgdHlwZSBmb3Igb3B0aW9uYWwgZmllbGRzIGluIHN0cnVjdHMKPC90ZD4KPHRkPgo8ZGV0YWlscz4KCkJ5IGRlZmF1bHQsIGBvYXBpLWNvZGVnZW5gIHdpbGwgZ2VuZXJhdGUgYSBwb2ludGVyIGZvciBvcHRpb25hbCBmaWVsZHMuCgpVc2luZyB0aGUgYHgtZ28tdHlwZS1za2lwLW9wdGlvbmFsLXBvaW50ZXJgIGV4dGVuc2lvbiBhbGxvd3Mgb21pdHRpbmcgdGhhdCBwb2ludGVyLgoKV2UgY2FuIHNlZSB0aGlzIGF0IHBsYXkgd2l0aCB0aGUgZm9sbG93aW5nIHNjaGVtYXM6CgpgYGB5YW1sCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgIENsaWVudDoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gbmFtZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG5hbWU6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBpZDoKICAgICAgICAgIHR5cGU6IG51bWJlcgogICAgQ2xpZW50V2l0aEV4dGVuc2lvbjoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gbmFtZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG5hbWU6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBpZDoKICAgICAgICAgIHR5cGU6IG51bWJlcgogICAgICAgICAgeC1nby10eXBlLXNraXAtb3B0aW9uYWwtcG9pbnRlcjogdHJ1ZQpgYGAKCkZyb20gaGVyZSwgd2Ugbm93IGdldCB0d28gZGlmZmVyZW50IG1vZGVsczoKCmBgYGdvCi8vIENsaWVudCBkZWZpbmVzIG1vZGVsIGZvciBDbGllbnQuCnR5cGUgQ2xpZW50IHN0cnVjdCB7CglJZCAgICpmbG9hdDMyIGBqc29uOiJpZCxvbWl0ZW1wdHkiYAoJTmFtZSBzdHJpbmcgICBganNvbjoibmFtZSJgCn0KCi8vIENsaWVudFdpdGhFeHRlbnNpb24gZGVmaW5lcyBtb2RlbCBmb3IgQ2xpZW50V2l0aEV4dGVuc2lvbi4KdHlwZSBDbGllbnRXaXRoRXh0ZW5zaW9uIHN0cnVjdCB7CglJZCAgIGZsb2F0MzIgYGpzb246ImlkLG9taXRlbXB0eSJgCglOYW1lIHN0cmluZyAgYGpzb246Im5hbWUiYAp9CmBgYAoKWW91IGNhbiBzZWUgdGhpcyBpbiBtb3JlIGRldGFpbCBpbiBbdGhlIGV4YW1wbGUgY29kZV0oZXhhbXBsZXMvZXh0ZW5zaW9ucy94Z290eXBlc2tpcG9wdGlvbmFscG9pbnRlci8pLgoKPC9kZXRhaWxzPgo8L3RkPgo8L3RyPgoKPHRyPgo8dGQ+CgpgeC1nby1uYW1lYAoKPC90ZD4KPHRkPgpPdmVycmlkZSB0aGUgZ2VuZXJhdGVkIG5hbWUgb2YgYSBmaWVsZCBvciBhIHR5cGUKPC90ZD4KPHRkPgo8ZGV0YWlscz4KCkJ5IGRlZmF1bHQsIGBvYXBpLWNvZGVnZW5gIHdpbGwgYXR0ZW1wdCB0byBnZW5lcmF0ZSB0aGUgbmFtZSBvZiBmaWVsZHMgYW5kIHR5cGVzIGluIGFzIGJlc3QgYSB3YXkgaXQgY2FuLgoKSG93ZXZlciwgc29tZXRpbWVzLCB0aGUgbmFtZSBkb2Vzbid0IHF1aXRlIGZpdCB3aGF0IHlvdXIgY29kZWJhc2Ugc3RhbmRhcmRzIGFyZSwgb3IgdGhlIGludGVudCBvZiB0aGUgZmllbGQsIHNvIHlvdSBjYW4gb3ZlcnJpZGUgaXQgd2l0aCBgeC1nby1uYW1lYC4KCldlIGNhbiBzZWUgdGhpcyBhdCBwbGF5IHdpdGggdGhlIGZvbGxvd2luZyBzY2hlbWFzOgoKYGBgeWFtbApvcGVuYXBpOiAiMy4wLjAiCmluZm86CiAgdmVyc2lvbjogMS4wLjAKICB0aXRsZTogeC1nby1uYW1lCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgIENsaWVudDoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gbmFtZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG5hbWU6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBpZDoKICAgICAgICAgIHR5cGU6IG51bWJlcgogICAgQ2xpZW50V2l0aEV4dGVuc2lvbjoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgICMgY2FuIGJlIHVzZWQgb24gYSB0eXBlCiAgICAgIHgtZ28tbmFtZTogQ2xpZW50UmVuYW1lZEJ5RXh0ZW5zaW9uCiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gbmFtZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG5hbWU6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBpZDoKICAgICAgICAgIHR5cGU6IG51bWJlcgogICAgICAgICAgIyBvciBvbiBhIGZpZWxkCiAgICAgICAgICB4LWdvLW5hbWU6IEFjY291bnRJZGVudGlmaWVyCmBgYAoKRnJvbSBoZXJlLCB3ZSBub3cgZ2V0IHR3byBkaWZmZXJlbnQgbW9kZWxzOgoKYGBgZ28KLy8gQ2xpZW50IGRlZmluZXMgbW9kZWwgZm9yIENsaWVudC4KdHlwZSBDbGllbnQgc3RydWN0IHsKCUlkICAgKmZsb2F0MzIgYGpzb246ImlkLG9taXRlbXB0eSJgCglOYW1lIHN0cmluZyAgIGBqc29uOiJuYW1lImAKfQoKLy8gQ2xpZW50UmVuYW1lZEJ5RXh0ZW5zaW9uIGRlZmluZXMgbW9kZWwgZm9yIENsaWVudFdpdGhFeHRlbnNpb24uCnR5cGUgQ2xpZW50UmVuYW1lZEJ5RXh0ZW5zaW9uIHN0cnVjdCB7CglBY2NvdW50SWRlbnRpZmllciAqZmxvYXQzMiBganNvbjoiaWQsb21pdGVtcHR5ImAKCU5hbWUgICAgICAgICAgICAgIHN0cmluZyAgIGBqc29uOiJuYW1lImAKfQpgYGAKCllvdSBjYW4gc2VlIHRoaXMgaW4gbW9yZSBkZXRhaWwgaW4gW3RoZSBleGFtcGxlIGNvZGVdKGV4YW1wbGVzL2V4dGVuc2lvbnMveGdvbmFtZS8pLgoKPC9kZXRhaWxzPgo8L3RkPgo8L3RyPgoKPHRyPgo8dGQ+CgpgeC1nby10eXBlLW5hbWVgCgo8L3RkPgo8dGQ+Ck92ZXJyaWRlIHRoZSBnZW5lcmF0ZWQgbmFtZSBvZiBhIHR5cGUKPC90ZD4KPHRkPgo8ZGV0YWlscz4KCj4gWyFOT1RFXQo+IE5vdGljZSB0aGF0IHRoaXMgaXMgc3VidGx5IGRpZmZlcmVudCB0byB0aGUgYHgtZ28tbmFtZWAsIHdoaWNoIGFsc28gYXBwbGllcyB0byBfZmllbGRzXyB3aXRoaW4gYHN0cnVjdGBzLgoKQnkgZGVmYXVsdCwgYG9hcGktY29kZWdlbmAgd2lsbCBhdHRlbXB0IHRvIGdlbmVyYXRlIHRoZSBuYW1lIG9mIHR5cGVzIGluIGFzIGJlc3QgYSB3YXkgaXQgY2FuLgoKSG93ZXZlciwgc29tZXRpbWVzLCB0aGUgbmFtZSBkb2Vzbid0IHF1aXRlIGZpdCB3aGF0IHlvdXIgY29kZWJhc2Ugc3RhbmRhcmRzIGFyZSwgb3IgdGhlIGludGVudCBvZiB0aGUgZmllbGQsIHNvIHlvdSBjYW4gb3ZlcnJpZGUgaXQgd2l0aCBgeC1nby1uYW1lYC4KCldlIGNhbiBzZWUgdGhpcyBhdCBwbGF5IHdpdGggdGhlIGZvbGxvd2luZyBzY2hlbWFzOgoKYGBgeWFtbApvcGVuYXBpOiAiMy4wLjAiCmluZm86CiAgdmVyc2lvbjogMS4wLjAKICB0aXRsZTogeC1nby10eXBlLW5hbWUKY29tcG9uZW50czoKICBzY2hlbWFzOgogICAgQ2xpZW50OgogICAgICB0eXBlOiBvYmplY3QKICAgICAgcmVxdWlyZWQ6CiAgICAgICAgLSBuYW1lCiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgbmFtZToKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIGlkOgogICAgICAgICAgdHlwZTogbnVtYmVyCiAgICBDbGllbnRXaXRoRXh0ZW5zaW9uOgogICAgICB0eXBlOiBvYmplY3QKICAgICAgeC1nby10eXBlLW5hbWU6IENsaWVudFJlbmFtZWRCeUV4dGVuc2lvbgogICAgICByZXF1aXJlZDoKICAgICAgICAtIG5hbWUKICAgICAgcHJvcGVydGllczoKICAgICAgICBuYW1lOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgaWQ6CiAgICAgICAgICB0eXBlOiBudW1iZXIKICAgICAgICAgICMgTk9URSBhdHRlbXB0aW5nIGEgYHgtZ28tdHlwZS1uYW1lYCBoZXJlIGlzIGEgbm8tb3AsIGFzIHdlJ3JlIG5vdCBwcm9kdWNpbmcgYSBfdHlwZV8gb25seSBhIF9maWVsZF8KICAgICAgICAgIHgtZ28tdHlwZS1uYW1lOiBUaGlzV2lsbE5vdEJlVXNlZApgYGAKCkZyb20gaGVyZSwgd2Ugbm93IGdldCB0d28gZGlmZmVyZW50IG1vZGVscyBhbmQgYSB0eXBlIGFsaWFzOgoKYGBgZ28KLy8gQ2xpZW50IGRlZmluZXMgbW9kZWwgZm9yIENsaWVudC4KdHlwZSBDbGllbnQgc3RydWN0IHsKCUlkICAgKmZsb2F0MzIgYGpzb246ImlkLG9taXRlbXB0eSJgCglOYW1lIHN0cmluZyAgIGBqc29uOiJuYW1lImAKfQoKLy8gQ2xpZW50V2l0aEV4dGVuc2lvbiBkZWZpbmVzIG1vZGVsIGZvciBDbGllbnRXaXRoRXh0ZW5zaW9uLgp0eXBlIENsaWVudFdpdGhFeHRlbnNpb24gPSBDbGllbnRSZW5hbWVkQnlFeHRlbnNpb24KCi8vIENsaWVudFJlbmFtZWRCeUV4dGVuc2lvbiBkZWZpbmVzIG1vZGVsIGZvciAuCnR5cGUgQ2xpZW50UmVuYW1lZEJ5RXh0ZW5zaW9uIHN0cnVjdCB7CglJZCAgICpmbG9hdDMyIGBqc29uOiJpZCxvbWl0ZW1wdHkiYAoJTmFtZSBzdHJpbmcgICBganNvbjoibmFtZSJgCn0KYGBgCgpZb3UgY2FuIHNlZSB0aGlzIGluIG1vcmUgZGV0YWlsIGluIFt0aGUgZXhhbXBsZSBjb2RlXShleGFtcGxlcy9leHRlbnNpb25zL3hnb3R5cGVuYW1lLykuCgo8L2RldGFpbHM+CjwvdGQ+CjwvdHI+Cgo8dHI+Cjx0ZD4KCmB4LW9taXRlbXB0eWAKCjwvdGQ+Cjx0ZD4KRm9yY2UgdGhlIHByZXNlbmNlIG9mIHRoZSBKU09OIHRhZyBgb21pdGVtcHR5YCBvbiBhIGZpZWxkCjwvdGQ+Cjx0ZD4KPGRldGFpbHM+CgpJbiBhIGNhc2UgdGhhdCB5b3UgbWF5IHdhbnQgdG8gYWRkIHRoZSBKU09OIHN0cnVjdCB0YWcgYG9taXRlbXB0eWAgdG8gdHlwZXMgdGhhdCBkb24ndCBoYXZlIG9uZSBnZW5lcmF0ZWQgYnkgZGVmYXVsdCAtIGZvciBpbnN0YW5jZSBhIHJlcXVpcmVkIGZpZWxkIC0geW91IGNhbiB1c2UgdGhlIGB4LW9taXRlbXB0eWAgZXh0ZW5zaW9uLgoKV2UgY2FuIHNlZSB0aGlzIGF0IHBsYXkgd2l0aCB0aGUgZm9sbG93aW5nIHNjaGVtYXM6CgpgYGB5YW1sCm9wZW5hcGk6ICIzLjAuMCIKaW5mbzoKICB2ZXJzaW9uOiAxLjAuMAogIHRpdGxlOiB4LW9taXRlbXB0eQpjb21wb25lbnRzOgogIHNjaGVtYXM6CiAgICBDbGllbnQ6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICByZXF1aXJlZDoKICAgICAgICAtIG5hbWUKICAgICAgcHJvcGVydGllczoKICAgICAgICBuYW1lOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgaWQ6CiAgICAgICAgICB0eXBlOiBudW1iZXIKICAgIENsaWVudFdpdGhFeHRlbnNpb246CiAgICAgIHR5cGU6IG9iamVjdAogICAgICByZXF1aXJlZDoKICAgICAgICAtIG5hbWUKICAgICAgcHJvcGVydGllczoKICAgICAgICBuYW1lOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAjIGZvciBzb21lIHJlYXNvbiwgeW91IG1heSB3YW50IHRoaXMgYmVoYXZpb3VyLCBldmVuIHRob3VnaCBpdCdzIGEgcmVxdWlyZWQgZmllbGQKICAgICAgICAgIHgtb21pdGVtcHR5OiB0cnVlCiAgICAgICAgaWQ6CiAgICAgICAgICB0eXBlOiBudW1iZXIKYGBgCgpGcm9tIGhlcmUsIHdlIG5vdyBnZXQgdHdvIGRpZmZlcmVudCBtb2RlbHM6CgpgYGBnbwovLyBDbGllbnQgZGVmaW5lcyBtb2RlbCBmb3IgQ2xpZW50Lgp0eXBlIENsaWVudCBzdHJ1Y3QgewoJSWQgICAqZmxvYXQzMiBganNvbjoiaWQsb21pdGVtcHR5ImAKCU5hbWUgc3RyaW5nICAgYGpzb246Im5hbWUiYAp9CgovLyBDbGllbnRXaXRoRXh0ZW5zaW9uIGRlZmluZXMgbW9kZWwgZm9yIENsaWVudFdpdGhFeHRlbnNpb24uCnR5cGUgQ2xpZW50V2l0aEV4dGVuc2lvbiBzdHJ1Y3QgewoJSWQgICAqZmxvYXQzMiBganNvbjoiaWQsb21pdGVtcHR5ImAKCU5hbWUgc3RyaW5nICAgYGpzb246Im5hbWUsb21pdGVtcHR5ImAKfQpgYGAKCk5vdGljZSB0aGF0IHRoZSBgQ29tcGxleEZpZWxkYCBpcyBzdGlsbCBnZW5lcmF0ZWQgaW4gZnVsbCwgYnV0IHRoZSB0eXBlIHdpbGwgdGhlbiBiZSBpZ25vcmVkIHdpdGggSlNPTiBtYXJzaGFsbGluZy4KCllvdSBjYW4gc2VlIHRoaXMgaW4gbW9yZSBkZXRhaWwgaW4gW3RoZSBleGFtcGxlIGNvZGVdKGV4YW1wbGVzL2V4dGVuc2lvbnMveGdvanNvbmlnbm9yZS8pLgoKPC9kZXRhaWxzPgo8L3RkPgo8L3RyPgoKPHRyPgo8dGQ+CgpgeC1nby1qc29uLWlnbm9yZWAKCjwvdGQ+Cjx0ZD4KV2hlbiAodW4pbWFyc2hhbGluZyBKU09OLCBpZ25vcmUgZmllbGQocykKPC90ZD4KPHRkPgo8ZGV0YWlscz4KCkJ5IGRlZmF1bHQsIGBvYXBpLWNvZGVnZW5gIHdpbGwgZ2VuZXJhdGUgYGpzb246Ii4uLiJgIHN0cnVjdCB0YWdzIGZvciBhbGwgZmllbGRzIGluIGEgc3RydWN0LCBzbyBKU09OICh1biltYXJzaGFsaW5nIHdvcmtzLgoKSG93ZXZlciwgc29tZXRpbWVzLCB5b3Ugd2FudCB0byBvbWl0IGZpZWxkcywgd2hpY2ggY2FuIGJlIGRvbmUgd2l0aCB0aGUgYHgtZ28tanNvbi1pZ25vcmVgIGV4dGVuc2lvbi4KCldlIGNhbiBzZWUgdGhpcyBhdCBwbGF5IHdpdGggdGhlIGZvbGxvd2luZyBzY2hlbWFzOgoKYGBgeWFtbApvcGVuYXBpOiAiMy4wLjAiCmluZm86CiAgdmVyc2lvbjogMS4wLjAKICB0aXRsZTogeC1nby1qc29uLWlnbm9yZQpjb21wb25lbnRzOgogIHNjaGVtYXM6CiAgICBDbGllbnQ6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICByZXF1aXJlZDoKICAgICAgICAtIG5hbWUKICAgICAgcHJvcGVydGllczoKICAgICAgICBuYW1lOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgY29tcGxleEZpZWxkOgogICAgICAgICAgdHlwZTogb2JqZWN0CiAgICAgICAgICBwcm9wZXJ0aWVzOgogICAgICAgICAgICBuYW1lOgogICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICBhY2NvdW50TmFtZToKICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICMgLi4uCiAgICBDbGllbnRXaXRoRXh0ZW5zaW9uOgogICAgICB0eXBlOiBvYmplY3QKICAgICAgcmVxdWlyZWQ6CiAgICAgICAgLSBuYW1lCiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgbmFtZToKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIGNvbXBsZXhGaWVsZDoKICAgICAgICAgIHR5cGU6IG9iamVjdAogICAgICAgICAgcHJvcGVydGllczoKICAgICAgICAgICAgbmFtZToKICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgYWNjb3VudE5hbWU6CiAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAjIC4uLgogICAgICAgICAgeC1nby1qc29uLWlnbm9yZTogdHJ1ZQpgYGAKCkZyb20gaGVyZSwgd2Ugbm93IGdldCB0d28gZGlmZmVyZW50IG1vZGVsczoKCmBgYGdvCi8vIENsaWVudCBkZWZpbmVzIG1vZGVsIGZvciBDbGllbnQuCnR5cGUgQ2xpZW50IHN0cnVjdCB7CglDb21wbGV4RmllbGQgKnN0cnVjdCB7CgkJQWNjb3VudE5hbWUgKnN0cmluZyBganNvbjoiYWNjb3VudE5hbWUsb21pdGVtcHR5ImAKCQlOYW1lICAgICAgICAqc3RyaW5nIGBqc29uOiJuYW1lLG9taXRlbXB0eSJgCgl9IGBqc29uOiJjb21wbGV4RmllbGQsb21pdGVtcHR5ImAKCU5hbWUgc3RyaW5nIGBqc29uOiJuYW1lImAKfQoKLy8gQ2xpZW50V2l0aEV4dGVuc2lvbiBkZWZpbmVzIG1vZGVsIGZvciBDbGllbnRXaXRoRXh0ZW5zaW9uLgp0eXBlIENsaWVudFdpdGhFeHRlbnNpb24gc3RydWN0IHsKCUNvbXBsZXhGaWVsZCAqc3RydWN0IHsKCQlBY2NvdW50TmFtZSAqc3RyaW5nIGBqc29uOiJhY2NvdW50TmFtZSxvbWl0ZW1wdHkiYAoJCU5hbWUgICAgICAgICpzdHJpbmcgYGpzb246Im5hbWUsb21pdGVtcHR5ImAKCX0gYGpzb246Ii0iYAoJTmFtZSBzdHJpbmcgYGpzb246Im5hbWUiYAp9CmBgYAoKTm90aWNlIHRoYXQgdGhlIGBDb21wbGV4RmllbGRgIGlzIHN0aWxsIGdlbmVyYXRlZCBpbiBmdWxsLCBidXQgdGhlIHR5cGUgd2lsbCB0aGVuIGJlIGlnbm9yZWQgd2l0aCBKU09OIG1hcnNoYWxsaW5nLgoKWW91IGNhbiBzZWUgdGhpcyBpbiBtb3JlIGRldGFpbCBpbiBbdGhlIGV4YW1wbGUgY29kZV0oZXhhbXBsZXMvZXh0ZW5zaW9ucy94Z29qc29uaWdub3JlLykuCgo8L2RldGFpbHM+CjwvdGQ+CjwvdHI+Cgo8dHI+Cjx0ZD4KCmB4LW9hcGktY29kZWdlbi1leHRyYS10YWdzYAoKPC90ZD4KPHRkPgpHZW5lcmF0ZSBhcmJpdHJhcnkgc3RydWN0IHRhZ3MgdG8gZmllbGRzCjwvdGQ+Cjx0ZD4KPGRldGFpbHM+CgpJZiB5b3UncmUgbWFraW5nIHVzZSBvZiBhIGZpZWxkJ3Mgc3RydWN0IHRhZ3MgdG8gaS5lLiBhcHBseSB2YWxpZGF0aW9uLCBkZWNpZGUgd2hldGhlciBzb21ldGhpbmcgc2hvdWxkIGJlIGxvZ2dlZCwgZXRjLCB5b3UgY2FuIHVzZSBgeC1vYXBpLWNvZGVnZW4tZXh0cmEtdGFnc2AgdG8gc2V0IGFkZGl0aW9uYWwgdGFncyBmb3IgeW91ciBnZW5lcmF0ZWQgdHlwZXMuCgpXZSBjYW4gc2VlIHRoaXMgYXQgcGxheSB3aXRoIHRoZSBmb2xsb3dpbmcgc2NoZW1hczoKCmBgYHlhbWwKb3BlbmFwaTogIjMuMC4wIgppbmZvOgogIHZlcnNpb246IDEuMC4wCiAgdGl0bGU6IHgtb2FwaS1jb2RlZ2VuLWV4dHJhLXRhZ3MKY29tcG9uZW50czoKICBzY2hlbWFzOgogICAgQ2xpZW50OgogICAgICB0eXBlOiBvYmplY3QKICAgICAgcmVxdWlyZWQ6CiAgICAgICAgLSBuYW1lCiAgICAgICAgLSBpZAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG5hbWU6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBpZDoKICAgICAgICAgIHR5cGU6IG51bWJlcgogICAgQ2xpZW50V2l0aEV4dGVuc2lvbjoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gbmFtZQogICAgICAgIC0gaWQKICAgICAgcHJvcGVydGllczoKICAgICAgICBuYW1lOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgaWQ6CiAgICAgICAgICB0eXBlOiBudW1iZXIKICAgICAgICAgIHgtb2FwaS1jb2RlZ2VuLWV4dHJhLXRhZ3M6CiAgICAgICAgICAgIHZhbGlkYXRlOiAicmVxdWlyZWQsbWluPTEsbWF4PTI1NiIKICAgICAgICAgICAgc2FmZS10by1sb2c6ICJ0cnVlIgogICAgICAgICAgICBnb3JtOiBwcmltYXJ5a2V5CmBgYAoKRnJvbSBoZXJlLCB3ZSBub3cgZ2V0IHR3byBkaWZmZXJlbnQgbW9kZWxzOgoKYGBgZ28KLy8gQ2xpZW50IGRlZmluZXMgbW9kZWwgZm9yIENsaWVudC4KdHlwZSBDbGllbnQgc3RydWN0IHsKCUlkICAgZmxvYXQzMiBganNvbjoiaWQiYAoJTmFtZSBzdHJpbmcgIGBqc29uOiJuYW1lImAKfQoKLy8gQ2xpZW50V2l0aEV4dGVuc2lvbiBkZWZpbmVzIG1vZGVsIGZvciBDbGllbnRXaXRoRXh0ZW5zaW9uLgp0eXBlIENsaWVudFdpdGhFeHRlbnNpb24gc3RydWN0IHsKCUlkICAgZmxvYXQzMiBgZ29ybToicHJpbWFyeWtleSIganNvbjoiaWQiIHNhZmUtdG8tbG9nOiJ0cnVlIiB2YWxpZGF0ZToicmVxdWlyZWQsbWluPTEsbWF4PTI1NiJgCglOYW1lIHN0cmluZyAgYGpzb246Im5hbWUiYAp9CmBgYAoKWW91IGNhbiBzZWUgdGhpcyBpbiBtb3JlIGRldGFpbCBpbiBbdGhlIGV4YW1wbGUgY29kZV0oZXhhbXBsZXMvZXh0ZW5zaW9ucy94b2FwaWNvZGVnZW5leHRyYXRhZ3MvKS4KCjwvZGV0YWlscz4KPC90ZD4KPC90cj4KCjx0cj4KPHRkPgoKYHgtZW51bS12YXJuYW1lc2AgLyBgeC1lbnVtTmFtZXNgCgo8L3RkPgo8dGQ+Ck92ZXJyaWRlIGdlbmVyYXRlZCB2YXJpYWJsZSBuYW1lcyBmb3IgZW51bSBjb25zdGFudHMKPC90ZD4KPHRkPgo8ZGV0YWlscz4KCldoZW4gY29uc3VtaW5nIGFuIGVudW0gdmFsdWUgZnJvbSBhbiBleHRlcm5hbCBzeXN0ZW0sIHRoZSBuYW1lIG1heSBub3QgcHJvZHVjZSBhIG5pY2UgdmFyaWFibGUgbmFtZS4gVXNpbmcgdGhlIGB4LWVudW0tdmFybmFtZXNgIGV4dGVuc2lvbiBhbGxvd3Mgb3ZlcnJpZGluZyB0aGUgbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIHZhcmlhYmxlIG5hbWVzLgoKV2UgY2FuIHNlZSB0aGlzIGF0IHBsYXkgd2l0aCB0aGUgZm9sbG93aW5nIHNjaGVtYXM6CgpgYGB5YW1sCm9wZW5hcGk6ICIzLjAuMCIKaW5mbzoKICB2ZXJzaW9uOiAxLjAuMAogIHRpdGxlOiB4LWVudW1OYW1lcyBhbmQgeC1lbnVtLXZhcm5hbWVzCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgIENsaWVudFR5cGU6CiAgICAgIHR5cGU6IHN0cmluZwogICAgICBlbnVtOgogICAgICAgIC0gQUNUCiAgICAgICAgLSBFWFAKICAgIENsaWVudFR5cGVXaXRoTmFtZXNFeHRlbnNpb246CiAgICAgIHR5cGU6IHN0cmluZwogICAgICBlbnVtOgogICAgICAgIC0gQUNUCiAgICAgICAgLSBFWFAKICAgICAgeC1lbnVtTmFtZXM6CiAgICAgICAgLSBBY3RpdmUKICAgICAgICAtIEV4cGlyZWQKICAgIENsaWVudFR5cGVXaXRoVmFyTmFtZXNFeHRlbnNpb246CiAgICAgIHR5cGU6IHN0cmluZwogICAgICBlbnVtOgogICAgICAgIC0gQUNUCiAgICAgICAgLSBFWFAKICAgICAgeC1lbnVtLXZhcm5hbWVzOgogICAgICAgIC0gQWN0aXZlCiAgICAgICAgLSBFeHBpcmVkCmBgYAoKRnJvbSBoZXJlLCB3ZSBub3cgZ2V0IHR3byBkaWZmZXJlbnQgZm9ybXMgb2YgdGhlIHNhbWUgZW51bSBkZWZpbml0aW9uLgoKYGBgZ28KLy8gRGVmaW5lcyB2YWx1ZXMgZm9yIENsaWVudFR5cGUuCmNvbnN0ICgKCUFDVCBDbGllbnRUeXBlID0gIkFDVCIKCUVYUCBDbGllbnRUeXBlID0gIkVYUCIKKQoKLy8gQ2xpZW50VHlwZSBkZWZpbmVzIG1vZGVsIGZvciBDbGllbnRUeXBlLgp0eXBlIENsaWVudFR5cGUgc3RyaW5nCgovLyBEZWZpbmVzIHZhbHVlcyBmb3IgQ2xpZW50VHlwZVdpdGhFeHRlbnNpb24uCmNvbnN0ICgKCUFjdGl2ZSAgQ2xpZW50VHlwZVdpdGhFeHRlbnNpb24gPSAiQUNUIgoJRXhwaXJlZCBDbGllbnRUeXBlV2l0aEV4dGVuc2lvbiA9ICJFWFAiCikKCi8vIENsaWVudFR5cGVXaXRoRXh0ZW5zaW9uIGRlZmluZXMgbW9kZWwgZm9yIENsaWVudFR5cGVXaXRoRXh0ZW5zaW9uLgp0eXBlIENsaWVudFR5cGVXaXRoRXh0ZW5zaW9uIHN0cmluZwpgYGAKCllvdSBjYW4gc2VlIHRoaXMgaW4gbW9yZSBkZXRhaWwgaW4gW3RoZSBleGFtcGxlIGNvZGVdKGV4YW1wbGVzL2V4dGVuc2lvbnMveGVudW12YXJuYW1lcy8pLgoKPC9kZXRhaWxzPgo8L3RkPgo8L3RyPgoKPHRyPgo8dGQ+CgpgeC1kZXByZWNhdGVkLXJlYXNvbmAKCjwvdGQ+Cjx0ZD4KQWRkIGEgR29Eb2MgZGVwcmVjYXRpb24gd2FybmluZyB0byBhIHR5cGUKPC90ZD4KPHRkPgo8ZGV0YWlscz4KCldoZW4gYW4gT3BlbkFQSSB0eXBlIGlzIGRlcHJlY2F0ZWQsIGEgZGVwcmVjYXRpb24gd2FybmluZyBjYW4gYmUgYWRkZWQgaW4gdGhlIEdvRG9jIHVzaW5nIGB4LWRlcHJlY2F0ZWQtcmVhc29uYC4KCldlIGNhbiBzZWUgdGhpcyBhdCBwbGF5IHdpdGggdGhlIGZvbGxvd2luZyBzY2hlbWFzOgoKYGBgeWFtbApvcGVuYXBpOiAiMy4wLjAiCmluZm86CiAgdmVyc2lvbjogMS4wLjAKICB0aXRsZTogeC1kZXByZWNhdGVkLXJlYXNvbgpjb21wb25lbnRzOgogIHNjaGVtYXM6CiAgICBDbGllbnQ6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICByZXF1aXJlZDoKICAgICAgICAtIG5hbWUKICAgICAgcHJvcGVydGllczoKICAgICAgICBuYW1lOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgaWQ6CiAgICAgICAgICB0eXBlOiBudW1iZXIKICAgIENsaWVudFdpdGhFeHRlbnNpb246CiAgICAgIHR5cGU6IG9iamVjdAogICAgICByZXF1aXJlZDoKICAgICAgICAtIG5hbWUKICAgICAgcHJvcGVydGllczoKICAgICAgICBuYW1lOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICBkZXByZWNhdGVkOiB0cnVlCiAgICAgICAgICB4LWRlcHJlY2F0ZWQtcmVhc29uOiBEb24ndCB1c2UgYmVjYXVzZSByZWFzb25zCiAgICAgICAgaWQ6CiAgICAgICAgICB0eXBlOiBudW1iZXIKICAgICAgICAgICMgTk9URSB0aGF0IHRoaXMgZG9lc24ndCBnZW5lcmF0ZSwgYXMgbm8gYGRlcHJlY2F0ZWQ6IHRydWVgIGlzIHNldAogICAgICAgICAgeC1kZXByZWNhdGVkLXJlYXNvbjogTk9URSB5b3Ugc2hvdWxkbid0IHNlZSB0aGlzLCBhcyB5b3UndmUgbm90IGRlcHJlY2F0ZWQgdGhpcyBmaWVsZApgYGAKCkZyb20gaGVyZSwgd2Ugbm93IGdldCB0d28gZGlmZmVyZW50IGZvcm1zIG9mIHRoZSBzYW1lIGVudW0gZGVmaW5pdGlvbi4KCmBgYGdvCi8vIENsaWVudCBkZWZpbmVzIG1vZGVsIGZvciBDbGllbnQuCnR5cGUgQ2xpZW50IHN0cnVjdCB7CglJZCAgICpmbG9hdDMyIGBqc29uOiJpZCxvbWl0ZW1wdHkiYAoJTmFtZSBzdHJpbmcgICBganNvbjoibmFtZSJgCn0KCi8vIENsaWVudFdpdGhFeHRlbnNpb24gZGVmaW5lcyBtb2RlbCBmb3IgQ2xpZW50V2l0aEV4dGVuc2lvbi4KdHlwZSBDbGllbnRXaXRoRXh0ZW5zaW9uIHN0cnVjdCB7CglJZCAqZmxvYXQzMiBganNvbjoiaWQsb21pdGVtcHR5ImAKCS8vIERlcHJlY2F0ZWQ6IERvbid0IHVzZSBiZWNhdXNlIHJlYXNvbnMKCU5hbWUgc3RyaW5nIGBqc29uOiJuYW1lImAKfQpgYGAKCk5vdGljZSB0aGF0IGJlY2F1c2Ugd2UndmUgbm90IHNldCBgZGVwcmVjYXRlZDogdHJ1ZWAgdG8gdGhlIGBuYW1lYCBmaWVsZCwgaXQgZG9lc24ndCBnZW5lcmF0ZSBhIGRlcHJlY2F0aW9uIHdhcm5pbmcuCgpZb3UgY2FuIHNlZSB0aGlzIGluIG1vcmUgZGV0YWlsIGluIFt0aGUgZXhhbXBsZSBjb2RlXShleGFtcGxlcy9leHRlbnNpb25zL3hkZXByZWNhdGVkcmVhc29uLykuCgo8L2RldGFpbHM+CjwvdGQ+CjwvdHI+Cgo8dHI+Cjx0ZD4KCmB4LW9yZGVyYAoKPC90ZD4KPHRkPgpFeHBsaWNpdGx5IG9yZGVyIHN0cnVjdCBmaWVsZHMKPC90ZD4KPHRkPgo8ZGV0YWlscz4KCldoZXRoZXIgeW91IGxpa2UgY2VydGFpbiBmaWVsZHMgYmVpbmcgb3JkZXJlZCBiZWZvcmUgb3RoZXJzLCBvciB5b3Ugd2FudCB0byBwZXJmb3JtIG1vcmUgZWZmaWNpZW50IHBhY2tpbmcgb2YgeW91ciBzdHJ1Y3RzLCB0aGUgYHgtb3JkZXJgIGV4dGVuc2lvbiBpcyBoZXJlIGZvciB5b3UuCgpOb3RlIHRoYXQgYHgtb3JkZXJgIGlzIDEtaW5kZXhlZCAtIGB4LW9yZGVyOiAwYCBpcyBub3QgYSB2YWxpZCB2YWx1ZS4KCldoZW4gYW4gT3BlbkFQSSB0eXBlIGlzIGRlcHJlY2F0ZWQsIGEgZGVwcmVjYXRpb24gd2FybmluZyBjYW4gYmUgYWRkZWQgaW4gdGhlIEdvRG9jIHVzaW5nIGB4LWRlcHJlY2F0ZWQtcmVhc29uYC4KCldlIGNhbiBzZWUgdGhpcyBhdCBwbGF5IHdpdGggdGhlIGZvbGxvd2luZyBzY2hlbWFzOgoKYGBgeWFtbApvcGVuYXBpOiAiMy4wLjAiCmluZm86CiAgdmVyc2lvbjogMS4wLjAKICB0aXRsZTogeC1vcmRlcgpjb21wb25lbnRzOgogIHNjaGVtYXM6CiAgICBDbGllbnQ6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICByZXF1aXJlZDoKICAgICAgICAtIG5hbWUKICAgICAgcHJvcGVydGllczoKICAgICAgICBhX25hbWU6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBpZDoKICAgICAgICAgIHR5cGU6IG51bWJlcgogICAgQ2xpZW50V2l0aEV4dGVuc2lvbjoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gbmFtZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIGFfbmFtZToKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgeC1vcmRlcjogMgogICAgICAgIGlkOgogICAgICAgICAgdHlwZTogbnVtYmVyCiAgICAgICAgICB4LW9yZGVyOiAxCmBgYAoKRnJvbSBoZXJlLCB3ZSBub3cgZ2V0IHR3byBkaWZmZXJlbnQgZm9ybXMgb2YgdGhlIHNhbWUgdHlwZSBkZWZpbml0aW9uLgoKYGBgZ28KLy8gQ2xpZW50IGRlZmluZXMgbW9kZWwgZm9yIENsaWVudC4KdHlwZSBDbGllbnQgc3RydWN0IHsKCUFOYW1lICpzdHJpbmcgIGBqc29uOiJhX25hbWUsb21pdGVtcHR5ImAKCUlkICAgICpmbG9hdDMyIGBqc29uOiJpZCxvbWl0ZW1wdHkiYAp9CgovLyBDbGllbnRXaXRoRXh0ZW5zaW9uIGRlZmluZXMgbW9kZWwgZm9yIENsaWVudFdpdGhFeHRlbnNpb24uCnR5cGUgQ2xpZW50V2l0aEV4dGVuc2lvbiBzdHJ1Y3QgewoJSWQgICAgKmZsb2F0MzIgYGpzb246ImlkLG9taXRlbXB0eSJgCglBTmFtZSAqc3RyaW5nICBganNvbjoiYV9uYW1lLG9taXRlbXB0eSJgCn0KYGBgCgpZb3UgY2FuIHNlZSB0aGlzIGluIG1vcmUgZGV0YWlsIGluIFt0aGUgZXhhbXBsZSBjb2RlXShleGFtcGxlcy9leHRlbnNpb25zL3hvcmRlci8pLgoKPC9kZXRhaWxzPgo8L3RkPgo8L3RyPgoKPHRyPgo8dGQ+CgpgeC1vYXBpLWNvZGVnZW4tb25seS1ob25vdXItZ28tbmFtZWAKCjwvdGQ+Cjx0ZD4KT25seSBob25vdXIgdGhlIGB4LWdvLW5hbWVgIHdoZW4gZ2VuZXJhdGluZyBmaWVsZCBuYW1lcwo8L3RkPgo8dGQ+CjxkZXRhaWxzPgoKPiBbIVdBUk5JTkddCj4gVXNpbmcgdGhpcyBvcHRpb24gbWF5IGxlYWQgdG8gY2FzZXMgd2hlcmUgYG9hcGktY29kZWdlbmAncyByZXdyaXRpbmcgb2YgZmllbGQgbmFtZXMgdG8gcHJldmVudCBjbGFzaGVzIHdpdGggb3RoZXIgdHlwZXMsIG9yIHRvIHByZXZlbnQgaW5jbHVkaW5nIGNoYXJhY3RlcnMgdGhhdCBtYXkgbm90IGJlIHZhbGlkIEdvIGZpZWxkIG5hbWVzLgoKSW4gc29tZSBjYXNlcywgeW91IG1heSBub3Qgd2FudCB1c2UgdGhlIGluYnVpbHQgb3B0aW9ucyBmb3IgY29udmVydGluZyBhbiBPcGVuQVBJIGZpZWxkIG5hbWUgdG8gYSBHbyBmaWVsZCBuYW1lLCBzdWNoIGFzIHRoZSBgbmFtZS1ub3JtYWxpemVyOiAiVG9DYW1lbENhc2VXaXRoSW5pdGlhbGlzbXMiYCwgYW5kIGluc3RlYWQgdHJ1c3QgdGhlIG5hbWUgdGhhdCB5b3UndmUgZGVmaW5lZCBmb3IgdGhlIHR5cGUgYmV0dGVyLgoKSW4gdGhpcyBjYXNlLCB5b3UgY2FuIHVzZSBgeC1vYXBpLWNvZGVnZW4tb25seS1ob25vdXItZ28tbmFtZWAgdG8gZW5mb3JjZSB0aGlzLCBhbG9uZ3NpZGUgc3BlY2lmeWluZyB0aGUgYGFsbG93LXVuZXhwb3J0ZWQtc3RydWN0LWZpZWxkLW5hbWVzYCBjb21wYXRpYmlsaXR5IG9wdGlvbi4KClRoaXMgYWxsb3dzIHlvdSB0byB0YWtlIGEgc3BlYyBzdWNoIGFzOgoKYGBgeWFtbApvcGVuYXBpOiAiMy4wLjAiCmluZm86CiAgdmVyc2lvbjogMS4wLjAKICB0aXRsZTogeC1vYXBpLWNvZGVnZW4tb25seS1ob25vdXItZ28tbmFtZQpjb21wb25lbnRzOgogIHNjaGVtYXM6CiAgICBUeXBlV2l0aFVuZXhwb3J0ZWRGaWVsZDoKICAgICAgZGVzY3JpcHRpb246IEEgc3RydWN0IHdpbGwgYmUgb3V0cHV0IHdoZXJlIG9uZSBvZiB0aGUgZmllbGRzIGlzIG5vdCBleHBvcnRlZAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG5hbWU6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBpZDoKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgIyBOT1RFIHRoYXQgdGhlcmUgaXMgYW4gZXhwbGljaXQgdXNhZ2Ugb2YgYSBsb3dlcmNhc2UgY2hhcmFjdGVyCiAgICAgICAgICB4LWdvLW5hbWU6IGFjY291bnRJZGVudGlmaWVyCiAgICAgICAgICB4LW9hcGktY29kZWdlbi1leHRyYS10YWdzOgogICAgICAgICAgICBqc29uOiAiLSIKICAgICAgICAgIHgtb2FwaS1jb2RlZ2VuLW9ubHktaG9ub3VyLWdvLW5hbWU6IHRydWUKYGBgCgpBbmQgd2UnbGwgZ2VuZXJhdGU6CgpgYGBnbwovLyBUeXBlV2l0aFVuZXhwb3J0ZWRGaWVsZCBBIHN0cnVjdCB3aWxsIGJlIG91dHB1dCB3aGVyZSBvbmUgb2YgdGhlIGZpZWxkcyBpcyBub3QgZXhwb3J0ZWQKdHlwZSBUeXBlV2l0aFVuZXhwb3J0ZWRGaWVsZCBzdHJ1Y3QgewoJYWNjb3VudElkZW50aWZpZXIgKnN0cmluZyBganNvbjoiLSJgCglOYW1lICAgICAgICAgICAgICAqc3RyaW5nIGBqc29uOiJuYW1lLG9taXRlbXB0eSJgCn0KYGBgCgpZb3UgY2FuIHNlZSB0aGlzIGluIG1vcmUgZGV0YWlsIGluIFt0aGUgZXhhbXBsZSBjb2RlXShleGFtcGxlcy9leHRlbnNpb25zL3hvYXBpY29kZWdlbm9ubHlob25vdXJnb25hbWUpLgoKPC9kZXRhaWxzPgo8L3RkPgo8L3RyPgoKPC90YWJsZT4KCiMjIFJlcXVlc3QvcmVzcG9uc2UgdmFsaWRhdGlvbiBtaWRkbGV3YXJlCgpUaGUgZ2VuZXJhdGVkIGNvZGUgdGhhdCBgb2FwaS1jb2RlZ2VuYCBwcm9kdWNlcyBoYXMgc29tZSB2YWxpZGF0aW9uIGZvciBzb21lIGluY29taW5nIGRhdGEsIHN1Y2ggYXMgY2hlY2tpbmcgZm9yIHJlcXVpcmVkIGhlYWRlcnMsIGFuZCB3aGVuIHVzaW5nIHRoZSBbc3RyaWN0IHNlcnZlcl0oI3N0cmljdC1zZXJ2ZXIpIHlvdSBnZXQgc29tZSBtb3JlIHZhbGlkYXRpb24gYXJvdW5kIHRoZSBjb3JyZWN0IHVzYWdlIG9mIHRoZSByZXNwb25zZSB0eXBlcy4KCkhvd2V2ZXIsIHRoaXMgbGVhdmVzIGEgbG90IG9mIHZhbGlkYXRpb24gdGhhdCBuZWVkcyB0byBiZSBkb25lLCB3aGljaCBjYW4gYmUgdGVkaW91cyB0byBoYW5kLXdyaXRlIHRoaXMgbG9naWMsIGVzcGVjaWFsbHkgZm9yIGxhcmdlIG9yIGNvbXBsZXggT3BlbkFQSSBzcGVjaWZpY2F0aW9ucy4KClRvIHNpbXBsaWZ5IHRoaXMsIHdlIHVzZSBhIG1pZGRsZXdhcmUsIHdoaWNoIHByb3ZpZGVzIHRoZSByZXF1ZXN0IHZhbGlkYXRpb24uIFRoZSBtaWRkbGV3YXJlIHlvdSB3YW50IHRvIHVzZSBkZXBlbmRzIG9uIHRoZSBzZXJ2ZXIgeW91J3JlIHVzaW5nOgoKPHRhYmxlPgoKPHRyPgo8dGg+ClNlcnZlcgo8L3RoPgo8dGg+Ck1pZGRsZXdhcmUgbGlicmFyeQo8L3RoPgo8L3RyPgoKPHRyPgo8dGQ+CgpbQ2hpXShodHRwczovL2dpdGh1Yi5jb20vZ28tY2hpL2NoaSkKCjwvdGQ+Cjx0ZD4KCltuZXRodHRwLW1pZGRsZXdhcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vbmV0aHR0cC1taWRkbGV3YXJlKQoKPC90ZD4KPC90cj4KCjx0cj4KPHRkPgoKW0VjaG9dKGh0dHBzOi8vZ2l0aHViLmNvbS9sYWJzdGFjay9lY2hvKQoKPC90ZD4KPHRkPgoKW2VjaG8tbWlkZGxld2FyZV0oaHR0cHM6Ly9naXRodWIuY29tL29hcGktY29kZWdlbi9lY2hvLW1pZGRsZXdhcmUpCgo8L3RkPgo8L3RyPgoKPHRyPgo8dGQ+CgpbRmliZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9nb2ZpYmVyL2ZpYmVyKQoKPC90ZD4KPHRkPgoKW2ZpYmVyLW1pZGRsZXdhcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vZmliZXItbWlkZGxld2FyZSkKCjwvdGQ+Cgo8L3RyPgoKCjx0cj4KPHRkPgoKW0dpbl0oaHR0cHM6Ly9naXRodWIuY29tL2dpbi1nb25pYy9naW4pCgo8L3RkPgo8dGQ+CgpbZ2luLW1pZGRsZXdhcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vZ2luLW1pZGRsZXdhcmUpCgo8L3RkPgo8L3RyPgoKPHRyPgo8dGQ+CgpbZ29yaWxsYS9tdXhdKGh0dHBzOi8vZ2l0aHViLmNvbS9nb3JpbGxhL211eCkKCjwvdGQ+Cjx0ZD4KCltuZXRodHRwLW1pZGRsZXdhcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vbmV0aHR0cC1taWRkbGV3YXJlKQoKPC90ZD4KCjwvdHI+Cgo8dHI+Cjx0ZD4KCltJcmlzXShodHRwczovL2dpdGh1Yi5jb20va2F0YXJhcy9pcmlzKQoKPC90ZD4KPHRkPgoKW2lyaXMtbWlkZGxld2FyZV0oaHR0cHM6Ly9naXRodWIuY29tL29hcGktY29kZWdlbi9pcmlzLW1pZGRsZXdhcmUpCgo8L3RkPgoKPC90cj4KCjx0cj4KPHRkPgoKWzEuMjIrIGBuZXQvaHR0cGBdKGh0dHBzOi8vcGtnLmdvLmRldi9uZXQvaHR0cCkKCjwvdGQ+Cjx0ZD4KCltuZXRodHRwLW1pZGRsZXdhcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vbmV0aHR0cC1taWRkbGV3YXJlKQoKPC90ZD4KCjwvdHI+Cgo8L3RhYmxlPgoKPiBbIU5PVEVdCj4gSXQgaXMgW25vdCBjdXJyZW50bHkgcG9zc2libGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9kZWVwbWFwL29hcGktY29kZWdlbi9pc3N1ZXMvMTAzOCkgdG8gdmFsaWRhdGUgdGhlIEhUVFAgcmVzcG9uc2Ugd2l0aCBhIG1pZGRsZXdhcmUuCgo+IFshTk9URV0KPiBXZSdyZSBhbHNvIFtleHBsb3JpbmddKGh0dHBzOi8vZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vZXhwL2lzc3Vlcy8xKSB0aGUgdXNlIG9mIFtsaWJvcGVuYXBpLXZhbGlkYXRvcl0oaHR0cHM6Ly9naXRodWIuY29tL3BiMzNmL2xpYm9wZW5hcGktdmFsaWRhdG9yLykgZm9yIHJlcXVlc3QvcmVzcG9uc2UgdmFsaWRhdGlvbiBtaWRkbGV3YXJlCgojIyBJbXBsZW1lbnRpbmcgc2VjdXJpdHkKCklmIHlvdSdyZSB1c2luZyBhIHNwZWNpZmljYXRpb24gd2l0aCBbU2VjdXJpdHkgU2NoZW1lc10oaHR0cHM6Ly9zcGVjLm9wZW5hcGlzLm9yZy9vYXMvdjMuMC4zI3NlY3VyaXR5LXNjaGVtZS1vYmplY3QpIGFuZCBbU2VjdXJpdHkgUmVxdWlyZW1lbnRzXShodHRwczovL3NwZWMub3BlbmFwaXMub3JnL29hcy92My4wLjMjc2VjdXJpdHktcmVxdWlyZW1lbnQtb2JqZWN0KSwgeW91J2xsIHdhbnQgdG8gYXV0aGVudGljYXRlIGFuZCBhdXRob3JpemUgcmVxdWVzdHMuCgojIyMgT24gdGhlIHNlcnZlcgoKPiBbIU5PVEVdCj4gT3V0LW9mLXRoZS1ib3gsIHRoZSBzZXJ2ZXItc2lkZSBjb2RlIGdlbmVyYXRlZCBieSBgb2FwaS1jb2RlZ2VuYCBkb2VzIG5vdCBwcm92aWRlIHNlY3VyaXR5IHZhbGlkYXRpb24uCj4KPiBUbyBwZXJmb3JtIGF1dGhlbnRpY2F0aW9uLCB5b3Ugd2lsbCBuZWVkIHRvIHVzZSB0aGUgW3ZhbGlkYXRpb24gbWlkZGxld2FyZV0oI3JlcXVlc3QtcmVzcG9uc2UtdmFsaWRhdGlvbi1taWRkbGV3YXJlKS4KPgo+IEluIHRoZSBmdXR1cmUsIHdlIHBsYW4gdG8gW2ltcGxlbWVudCBzZXJ2ZXItc2lkZSB2YWxpZGF0aW9uIGluIHRoZSBnZW5lcmF0ZWQgY29kZV0oaHR0cHM6Ly9naXRodWIuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL2lzc3Vlcy8xNTI0KQoKVG8gc2VlIGhvdyB0aGlzIGNhbiB3b3JrLCBjaGVjayBvdXQgdGhlIFthdXRoZW50aWNhdGVkIEFQSSBleGFtcGxlXShleGFtcGxlcy9hdXRoZW50aWNhdGVkLWFwaS9lY2hvKS4KCiMjIyBPbiB0aGUgY2xpZW50CgpXaXRoIGEgZ2VuZXJhdGVkIGNsaWVudCwgeW91J2xsIHdhbnQgdG8gdXNlIHRoZSBjbGllbnQncyBnZW5lcmF0ZWQgYFdpdGhSZXF1ZXN0RWRpdG9yRm5gIGZ1bmN0aW9uIHRvIHBhc3MgaW4gYSBnaXZlbiByZXF1ZXN0IGVkaXRvciBgUmVxdWVzdEVkaXRvckZuYC4KCkZvciBpbnN0YW5jZToKCmBgYGdvCmltcG9ydCAoCgkiY29udGV4dCIKCSJmbXQiCgkibG9nIgoKCSJnaXRodWIuY29tL29hcGktY29kZWdlbi9vYXBpLWNvZGVnZW4vdjIvcGtnL3NlY3VyaXR5cHJvdmlkZXIiCikKCmZ1bmMgbWFpbigpIHsKCWJhc2ljQXV0aCwgZXJyIDo9IHNlY3VyaXR5cHJvdmlkZXIuTmV3U2VjdXJpdHlQcm92aWRlckJhc2ljQXV0aCgibXlfdXNlciIsICJteV9wYXNzIikKCWlmIGVyciAhPSBuaWwgewoJCWxvZy5GYXRhbChlcnIpCgl9CgoJY2xpZW50LCBlcnIgOj0gTmV3Q2xpZW50KCJodHRwczovLy4uLi4iLCBXaXRoUmVxdWVzdEVkaXRvckZuKGJhc2ljQXV0aC5JbnRlcmNlcHQpKQoJaWYgZXJyICE9IG5pbCB7CgkJbG9nLkZhdGFsKGVycikKCX0KCglyZXNwLCBlcnIgOj0gY2xpZW50LkdldENsaWVudChjb250ZXh0LlRPRE8oKSkKCWlmIGVyciAhPSBuaWwgewoJCWxvZy5GYXRhbChlcnIpCgl9CglmbXQuUHJpbnRmKCJyZXNwLlN0YXR1c0NvZGU6ICV2XG4iLCByZXNwLlN0YXR1c0NvZGUpCn0KYGBgCgpOb3RpY2UgdGhhdCB3ZSdyZSB1c2luZyBhIHByZS1idWlsdCBwcm92aWRlciBmcm9tIHRoZSBbYHBrZy9zZWN1cml0eXByb3ZpZGVyYCBwYWNrYWdlXShodHRwczovL3BrZy5nby5kZXYvZ2l0aHViLmNvbS9vYXBpLWNvZGVnZW4vb2FwaS1jb2RlZ2VuL3YyL3BrZy9zZWN1cml0eXByb3ZpZGVyKSwgd2hpY2ggaGFzIHNvbWUgaW5idWlsdCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBvZiBhdXRoZW50aWNhdGlvbiwgdG9vLgoKIyMgQ3VzdG9tIGNvZGUgZ2VuZXJhdGlvbgoKSXQgaXMgcG9zc2libGUgdG8gZXh0ZW5kIHRoZSBpbmJ1aWx0IGNvZGUgZ2VuZXJhdGlvbiBmcm9tIGBvYXBpLWNvZGVnZW5gIHVzaW5nIEdvJ3MgYHRleHQvdGVtcGxhdGVgcy4KCllvdSBjYW4gc3BlY2lmeSwgdGhyb3VnaCB5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZSwgdGhlIGBvdXRwdXQtb3B0aW9ucy51c2VyLXRlbXBsYXRlc2Agc2V0dGluZyB0byBvdmVycmlkZSB0aGUgaW5idWlsdCB0ZW1wbGF0ZXMgYW5kIHVzZSBhIHVzZXItZGVmaW5lZCB0ZW1wbGF0ZS4KCj4gWyFOT1RFXQo+IEZpbGVuYW1lcyBnaXZlbiB0byB0aGUgYHVzZXItdGVtcGxhdGVzYCBjb25maWd1cmF0aW9uIG11c3QgKipleGFjdGx5KiogbWF0Y2ggdGhlIGZpbGVuYW1lIHRoYXQgYG9hcGktY29kZWdlbmAgaXMgbG9va2luZyBmb3IKCiMjIyBMb2NhbCBwYXRocwoKV2l0aGluIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlLCB5b3UgY2FuIHNwZWNpZnkgcmVsYXRpdmUgb3IgYWJzb2x1dGUgcGF0aHMgdG8gYSBmaWxlIHRvIHJlZmVyZW5jZSBmb3IgdGhlIHRlbXBsYXRlLCBzdWNoIGFzOgoKYGBgeWFtbAojIHlhbWwtbGFuZ3VhZ2Utc2VydmVyOiAkc2NoZW1hPWh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9kZWVwbWFwL29hcGktY29kZWdlbi9IRUFEL2NvbmZpZ3VyYXRpb24tc2NoZW1hLmpzb24KIyAuLi4Kb3V0cHV0LW9wdGlvbnM6CiAgdXNlci10ZW1wbGF0ZXM6CiAgICBjbGllbnQtd2l0aC1yZXNwb25zZXMudG1wbDogLi9jdXN0b20tdGVtcGxhdGUudG1wbAogICAgYWRkaXRpb25hbC1wcm9wZXJ0aWVzLnRtcGw6IC90bXAvZm9vLmJhcgogICAgdHlwZWRlZi50bXBsOiBuby1wcmVmaXgudG1wbApgYGAKCj4gWyFXQVJOXQo+IFdlIGRvIG5vdCBpbnRlcnBvbGF0ZSBgfmAgb3IgYCRIT01FYCAob3Igb3RoZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzKSBpbiBwYXRocyBnaXZlbgoKIyMjIEhUVFBTIHBhdGhzCgpJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBIVFRQUyBVUkxzLgoKPiBbIVdBUk5JTkddCj4gQWx0aG91Z2ggcG9zc2libGUsIHRoaXMgZG9lcyBsZWFkIHRvIGBvYXBpLWNvZGVnZW5gIGV4ZWN1dGlvbnMgbm90IG5lY2Vzc2FyaWx5IGJlaW5nIHJlcHJvZHVjaWJsZS4gSXQncyByZWNvbW1lbmRlZCB0byB2ZW5kb3IgKGNvcHkpIHRoZSBPcGVuQVBJIHNwZWMgaW50byB5b3VyIGNvZGViYXNlIGFuZCByZWZlcmVuY2UgaXQgbG9jYWxseQo+Cj4gU2VlIFt0aGlzIGJsb2cgcG9zdF0oaHR0cHM6Ly93d3cuanZ0Lm1lL3Bvc3RzLzIwMjQvMDQvMjcvZ2l0aHViLWFjdGlvbnMtdXBkYXRlLWZpbGUvKSBmb3IgYW4gZXhhbXBsZSBvZiBob3cgdG8gdXNlIEdpdEh1YiBBY3Rpb25zIHRvIG1hbmFnZSB0aGUgdXBkYXRlcyBvZiBmaWxlcyBhY3Jvc3MgcmVwb3MKPgo+IFRoaXMgd2lsbCBiZSBkaXNhYmxlZCBieSBkZWZhdWx0IChidXQgcG9zc2libGUgdG8gdHVybiBiYWNrIG9uIHZpYSBjb25maWd1cmF0aW9uKSBbaW4gdGhlIGZ1dHVyZV0oaHR0cHM6Ly9naXRodWIuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL2lzc3Vlcy8xNTY0KQoKVG8gdXNlIGl0LCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb246CgpgYGB5YW1sCiMgeWFtbC1sYW5ndWFnZS1zZXJ2ZXI6ICRzY2hlbWE9aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL0hFQUQvY29uZmlndXJhdGlvbi1zY2hlbWEuanNvbgojIC4uLgpvdXRwdXQtb3B0aW9uczoKICB1c2VyLXRlbXBsYXRlczoKICAgICMgVGhlIGZvbGxvd2luZyBhcmUgcmVmZXJlbmNpbmcgYSB2ZXJzaW9uIG9mIHRoZSBkZWZhdWx0IGNsaWVudC13aXRoLXJlc3BvbnNlcy50bXBsIGZpbGUsIGJ1dCBsb2FkZWQgaW4gdGhyb3VnaCBHaXRIdWIncyByYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tLiBUaGUgZ2VuZXJhbCBmb3JtIHRvIHVzZSByYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tIGlzIGFzIGZvbGxvd3MgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzx1c2VybmFtZT4vPHByb2plY3Q+Lzxjb21taXRpc2g+L3BhdGgvdG8vdGVtcGxhdGUvdGVtcGxhdGUudG1wbAoKICAgICMgQWx0ZXJuYXRpdmVseSB1c2luZyByYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tIHdpdGggYSBoYXNoCiAgICBjbGllbnQtd2l0aC1yZXNwb25zZXMudG1wbDogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL2FkNWVhZGE0ZjNjY2MyOGE4ODQ3N2NlZjYyZWEyMWMxN2ZjOGFhMDEvcGtnL2NvZGVnZW4vdGVtcGxhdGVzL2NsaWVudC13aXRoLXJlc3BvbnNlcy50bXBsCiAgICAjIEFsdGVybmF0aXZlbHkgdXNpbmcgcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSB3aXRoIGEgdGFnCiAgICBjbGllbnQtd2l0aC1yZXNwb25zZXMudG1wbDogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL3YyLjEuMC9wa2cvY29kZWdlbi90ZW1wbGF0ZXMvY2xpZW50LXdpdGgtcmVzcG9uc2VzLnRtcGwKICAgICMgQWx0ZXJuYXRpdmVseSB1c2luZyByYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tIHdpdGggYSBicmFuY2gKICAgIGNsaWVudC13aXRoLXJlc3BvbnNlcy50bXBsOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZGVlcG1hcC9vYXBpLWNvZGVnZW4vbWFzdGVyL3BrZy9jb2RlZ2VuL3RlbXBsYXRlcy9jbGllbnQtd2l0aC1yZXNwb25zZXMudG1wbApgYGAKCj4gWyFXQVJOSU5HXQo+IElmIHVzaW5nIFVSTHMgdGhhdCBwdWxsIGxvY2F0aW9ucyBmcm9tIGEgR2l0IHJlcG8sIHN1Y2ggYXMgYHJhdy5naXRodWJ1c2VyY29udGVudC5jb21gLCBpdCBpcyBzdHJvbmdseSBlbmNvdXJhZ2VkIHRvIHVzZSBhIHRhZyBvciBhIHJhdyBjb21taXQgaGFzaCBpbnN0ZWFkIG9mIGEgYnJhbmNoIGxpa2UgYG1haW5gLiBUcmFja2luZyBhIGJyYW5jaCBjYW4gbGVhZCB0byB1bmV4cGVjdGVkIEFQSSBkcmlmdCwgYW5kIGxvc3Mgb2YgdGhlIGFiaWxpdHkgdG8gcmVwcm9kdWNlIGEgYnVpbGQuCgojIyMgSW5saW5lIHRlbXBsYXRlCgpJdCdzIGFsc28gcG9zc2libGUgdG8gc2V0IHRoZSB0ZW1wbGF0ZXMgaW5saW5lIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGU6CgpgYGB5YW1sCiMgeWFtbC1sYW5ndWFnZS1zZXJ2ZXI6ICRzY2hlbWE9aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL0hFQUQvY29uZmlndXJhdGlvbi1zY2hlbWEuanNvbgojIC4uLgpvdXRwdXQtb3B0aW9uczoKICB1c2VyLXRlbXBsYXRlczoKICAgICMgTk9URSB0aGUgdXNlIG9mIHRoZSBgfGAgKHBpcGUgc3ltYm9sKSBoZXJlIHRvIGRlbm90ZSB0aGF0IHRoaXMgaXMgYQogICAgIyBtdWx0aS1saW5lIHN0YXRlbWVudCB0aGF0IHNob3VsZCBwcmVzZXJ2ZSBuZXdsaW5lcy4gTW9yZSByZWFkaW5nOgogICAgIyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTg3MDgxNTYvMjI1NzAzOCBhbmQKICAgICMgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE1MzY1Mjk2LzIyNTcwMzgKICAgIGNsaWVudC13aXRoLXJlc3BvbnNlcy50bXBsOiB8CiAgICAgICAgLy8gQ2xpZW50V2l0aFJlc3BvbnNlcyBidWlsZHMgb24gQ2xpZW50SW50ZXJmYWNlIHRvIG9mZmVyIHJlc3BvbnNlIHBheWxvYWRzCiAgICAgICAgdHlwZSBDbGllbnRXaXRoUmVzcG9uc2VzIHN0cnVjdCB7CiAgICAgICAgICAgIENsaWVudEludGVyZmFjZQogICAgICAgIH0KICAgICAgICAuLi4KYGBgCgojIyMgVXNpbmcgdGhlIEdvIHBhY2thZ2UKCkFsdGVybmF0aXZlbHksIHlvdSBhcmUgYWJsZSB0byB1c2UgdGhlIHVuZGVybHlpbmcgY29kZSBnZW5lcmF0aW9uIGFzIGEgcGFja2FnZSwgd2hpY2ggW3dpbGwgYmUgZG9jdW1lbnRlZCBpbiB0aGUgZnV0dXJlXShodHRwczovL2dpdGh1Yi5jb20vZGVlcG1hcC9vYXBpLWNvZGVnZW4vaXNzdWVzLzE0ODcpLgoKIyMgQWRkaXRpb25hbCBQcm9wZXJ0aWVzIChgYWRkaXRpb25hbFByb3BlcnRpZXNgKQoKW09wZW5BUEkgU2NoZW1hc10oaHR0cHM6Ly9zcGVjLm9wZW5hcGlzLm9yZy9vYXMvdjMuMC4zLmh0bWwjc2NoZW1hLW9iamVjdCkgaW1wbGljaXRseSBhY2NlcHQgYGFkZGl0aW9uYWxQcm9wZXJ0aWVzYCwgbWVhbmluZyB0aGF0IGFueSBmaWVsZHMgcHJvdmlkZWQsIGJ1dCBub3QgZXhwbGljaXRseSBkZWZpbmVkIHZpYSBwcm9wZXJ0aWVzIG9uIHRoZSBzY2hlbWEgYXJlIGFjY2VwdGVkIGFzIGlucHV0LCBhbmQgcHJvcGFnYXRlZC4gV2hlbiB1bnNwZWNpZmllZCwgT3BlbkFQSSBkZWZpbmVzIHRoYXQgdGhlIGBhZGRpdGlvbmFsUHJvcGVydGllc2AgZmllbGQgaXMgYXNzdW1lZCB0byBiZSBgdHJ1ZWAuCgpGb3Igc2ltcGxpY2l0eSwgYW5kIHRvIHJlbW92ZSBhIGZhaXIgYml0IG9mIGR1cGxpY2F0aW9uIGFuZCBib2lsZXJwbGF0ZSwgYG9hcGktY29kZWdlbmAgZGVjaWRlcyB0byBpZ25vcmUgdGhlIGltcGxpY2l0IGBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZWAsIGFuZCBpbnN0ZWFkIHJlcXVpcmVzIHlvdSB0byBzcGVjaWZ5IHRoZSBgYWRkaXRpb25hbFByb3BlcnRpZXNgIGtleSB0byBnZW5lcmF0ZSB0aGUgYm9pbGVycGxhdGUuCgo+IFshTk9URV0KPiBJbiB0aGUgZnV0dXJlIFt0aGlzIHdpbGwgYmUgcG9zc2libGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9kZWVwbWFwL29hcGktY29kZWdlbi9pc3N1ZXMvMTUxNCkgdG8gZGlzYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHksIGFuZCBob25vdXIgdGhlIGltcGxpY2l0IGBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZWAKCkJlbG93IHlvdSBjYW4gc2VlIHNvbWUgZXhhbXBsZXMgb2YgaG93IGBhZGRpdGlvbmFsUHJvcGVydGllc2AgYWZmZWN0cyB0aGUgZ2VuZXJhdGVkIGNvZGUuCgojIyMgSW1wbGljaXQgYGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlYCAvIG5vIGBhZGRpdGlvbmFsUHJvcGVydGllc2Agc2V0CgpgYGB5YW1sCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgIFRoaW5nOgogICAgICB0eXBlOiBvYmplY3QKICAgICAgcmVxdWlyZWQ6CiAgICAgICAgLSBpZAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIGlkOgogICAgICAgICAgdHlwZTogaW50ZWdlcgogICAgICAjIGltcGxpY2l0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlCmBgYAoKV2lsbCBnZW5lcmF0ZToKCmBgYGdvCi8vIFRoaW5nIGRlZmluZXMgbW9kZWwgZm9yIFRoaW5nLgp0eXBlIFRoaW5nIHN0cnVjdCB7CglJZCBpbnQgYGpzb246ImlkImAKfQoKLy8gd2l0aCBubyBnZW5lcmF0ZWQgYm9pbGVycGxhdGUgbm9yIHRoZSBgQWRkaXRpb25hbFByb3BlcnRpZXNgIGZpZWxkCmBgYAoKIyMjIEV4cGxpY2l0IGBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZWAKCmBgYHlhbWwKY29tcG9uZW50czoKICBzY2hlbWFzOgogICAgVGhpbmc6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICByZXF1aXJlZDoKICAgICAgICAtIGlkCiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgaWQ6CiAgICAgICAgICB0eXBlOiBpbnRlZ2VyCiAgICAgICMgZXhwbGljaXQgdHJ1ZQogICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZQpgYGAKCldpbGwgZ2VuZXJhdGU6CgpgYGBnbwovLyBUaGluZyBkZWZpbmVzIG1vZGVsIGZvciBUaGluZy4KdHlwZSBUaGluZyBzdHJ1Y3QgewoJSWQgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICBganNvbjoiaWQiYAoJQWRkaXRpb25hbFByb3BlcnRpZXMgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSBganNvbjoiLSJgCn0KCi8vIHdpdGggZ2VuZXJhdGVkIGJvaWxlcnBsYXRlIGJlbG93CmBgYAoKPGRldGFpbHM+Cgo8c3VtbWFyeT5Cb2lsZXJwbGF0ZTwvc3VtbWFyeT4KCmBgYGdvCgovLyBHZXR0ZXIgZm9yIGFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgVGhpbmcuIFJldHVybnMgdGhlIHNwZWNpZmllZAovLyBlbGVtZW50IGFuZCB3aGV0aGVyIGl0IHdhcyBmb3VuZApmdW5jIChhIFRoaW5nKSBHZXQoZmllbGROYW1lIHN0cmluZykgKHZhbHVlIGludGVyZmFjZXt9LCBmb3VuZCBib29sKSB7CglpZiBhLkFkZGl0aW9uYWxQcm9wZXJ0aWVzICE9IG5pbCB7CgkJdmFsdWUsIGZvdW5kID0gYS5BZGRpdGlvbmFsUHJvcGVydGllc1tmaWVsZE5hbWVdCgl9CglyZXR1cm4KfQoKLy8gU2V0dGVyIGZvciBhZGRpdGlvbmFsIHByb3BlcnRpZXMgZm9yIFRoaW5nCmZ1bmMgKGEgKlRoaW5nKSBTZXQoZmllbGROYW1lIHN0cmluZywgdmFsdWUgaW50ZXJmYWNle30pIHsKCWlmIGEuQWRkaXRpb25hbFByb3BlcnRpZXMgPT0gbmlsIHsKCQlhLkFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gbWFrZShtYXBbc3RyaW5nXWludGVyZmFjZXt9KQoJfQoJYS5BZGRpdGlvbmFsUHJvcGVydGllc1tmaWVsZE5hbWVdID0gdmFsdWUKfQoKLy8gT3ZlcnJpZGUgZGVmYXVsdCBKU09OIGhhbmRsaW5nIGZvciBUaGluZyB0byBoYW5kbGUgQWRkaXRpb25hbFByb3BlcnRpZXMKZnVuYyAoYSAqVGhpbmcpIFVubWFyc2hhbEpTT04oYiBbXWJ5dGUpIGVycm9yIHsKCW9iamVjdCA6PSBtYWtlKG1hcFtzdHJpbmddanNvbi5SYXdNZXNzYWdlKQoJZXJyIDo9IGpzb24uVW5tYXJzaGFsKGIsICZvYmplY3QpCglpZiBlcnIgIT0gbmlsIHsKCQlyZXR1cm4gZXJyCgl9CgoJaWYgcmF3LCBmb3VuZCA6PSBvYmplY3RbImlkIl07IGZvdW5kIHsKCQllcnIgPSBqc29uLlVubWFyc2hhbChyYXcsICZhLklkKQoJCWlmIGVyciAhPSBuaWwgewoJCQlyZXR1cm4gZm10LkVycm9yZigiZXJyb3IgcmVhZGluZyAnaWQnOiAldyIsIGVycikKCQl9CgkJZGVsZXRlKG9iamVjdCwgImlkIikKCX0KCglpZiBsZW4ob2JqZWN0KSAhPSAwIHsKCQlhLkFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gbWFrZShtYXBbc3RyaW5nXWludGVyZmFjZXt9KQoJCWZvciBmaWVsZE5hbWUsIGZpZWxkQnVmIDo9IHJhbmdlIG9iamVjdCB7CgkJCXZhciBmaWVsZFZhbCBpbnRlcmZhY2V7fQoJCQllcnIgOj0ganNvbi5Vbm1hcnNoYWwoZmllbGRCdWYsICZmaWVsZFZhbCkKCQkJaWYgZXJyICE9IG5pbCB7CgkJCQlyZXR1cm4gZm10LkVycm9yZigiZXJyb3IgdW5tYXJzaGFsaW5nIGZpZWxkICVzOiAldyIsIGZpZWxkTmFtZSwgZXJyKQoJCQl9CgkJCWEuQWRkaXRpb25hbFByb3BlcnRpZXNbZmllbGROYW1lXSA9IGZpZWxkVmFsCgkJfQoJfQoJcmV0dXJuIG5pbAp9CgovLyBPdmVycmlkZSBkZWZhdWx0IEpTT04gaGFuZGxpbmcgZm9yIFRoaW5nIHRvIGhhbmRsZSBBZGRpdGlvbmFsUHJvcGVydGllcwpmdW5jIChhIFRoaW5nKSBNYXJzaGFsSlNPTigpIChbXWJ5dGUsIGVycm9yKSB7Cgl2YXIgZXJyIGVycm9yCglvYmplY3QgOj0gbWFrZShtYXBbc3RyaW5nXWpzb24uUmF3TWVzc2FnZSkKCglvYmplY3RbImlkIl0sIGVyciA9IGpzb24uTWFyc2hhbChhLklkKQoJaWYgZXJyICE9IG5pbCB7CgkJcmV0dXJuIG5pbCwgZm10LkVycm9yZigiZXJyb3IgbWFyc2hhbGluZyAnaWQnOiAldyIsIGVycikKCX0KCglmb3IgZmllbGROYW1lLCBmaWVsZCA6PSByYW5nZSBhLkFkZGl0aW9uYWxQcm9wZXJ0aWVzIHsKCQlvYmplY3RbZmllbGROYW1lXSwgZXJyID0ganNvbi5NYXJzaGFsKGZpZWxkKQoJCWlmIGVyciAhPSBuaWwgewoJCQlyZXR1cm4gbmlsLCBmbXQuRXJyb3JmKCJlcnJvciBtYXJzaGFsaW5nICclcyc6ICV3IiwgZmllbGROYW1lLCBlcnIpCgkJfQoJfQoJcmV0dXJuIGpzb24uTWFyc2hhbChvYmplY3QpCn0KYGBgCgo8L2RldGFpbHM+CgoKIyMjIGBhZGRpdGlvbmFsUHJvcGVydGllc2AgYXMgYGludGVnZXJgcwoKYGBgeWFtbApjb21wb25lbnRzOgogIHNjaGVtYXM6CiAgICBUaGluZzoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gaWQKICAgICAgcHJvcGVydGllczoKICAgICAgICBpZDoKICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgIyBzaW1wbGUgdHlwZQogICAgICBhZGRpdGlvbmFsUHJvcGVydGllczoKICAgICAgICB0eXBlOiBpbnRlZ2VyCmBgYAoKV2lsbCBnZW5lcmF0ZToKCmBgYGdvCi8vIFRoaW5nIGRlZmluZXMgbW9kZWwgZm9yIFRoaW5nLgp0eXBlIFRoaW5nIHN0cnVjdCB7CglJZCAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICBganNvbjoiaWQiYAoJQWRkaXRpb25hbFByb3BlcnRpZXMgbWFwW3N0cmluZ11pbnQgYGpzb246Ii0iYAp9CgovLyB3aXRoIGdlbmVyYXRlZCBib2lsZXJwbGF0ZSBiZWxvdwpgYGAKCjxkZXRhaWxzPgoKPHN1bW1hcnk+Qm9pbGVycGxhdGU8L3N1bW1hcnk+CgpgYGBnbwovLyBHZXR0ZXIgZm9yIGFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgVGhpbmcuIFJldHVybnMgdGhlIHNwZWNpZmllZAovLyBlbGVtZW50IGFuZCB3aGV0aGVyIGl0IHdhcyBmb3VuZApmdW5jIChhIFRoaW5nKSBHZXQoZmllbGROYW1lIHN0cmluZykgKHZhbHVlIGludCwgZm91bmQgYm9vbCkgewoJaWYgYS5BZGRpdGlvbmFsUHJvcGVydGllcyAhPSBuaWwgewoJCXZhbHVlLCBmb3VuZCA9IGEuQWRkaXRpb25hbFByb3BlcnRpZXNbZmllbGROYW1lXQoJfQoJcmV0dXJuCn0KCi8vIFNldHRlciBmb3IgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGZvciBUaGluZwpmdW5jIChhICpUaGluZykgU2V0KGZpZWxkTmFtZSBzdHJpbmcsIHZhbHVlIGludCkgewoJaWYgYS5BZGRpdGlvbmFsUHJvcGVydGllcyA9PSBuaWwgewoJCWEuQWRkaXRpb25hbFByb3BlcnRpZXMgPSBtYWtlKG1hcFtzdHJpbmddaW50KQoJfQoJYS5BZGRpdGlvbmFsUHJvcGVydGllc1tmaWVsZE5hbWVdID0gdmFsdWUKfQoKLy8gT3ZlcnJpZGUgZGVmYXVsdCBKU09OIGhhbmRsaW5nIGZvciBUaGluZyB0byBoYW5kbGUgQWRkaXRpb25hbFByb3BlcnRpZXMKZnVuYyAoYSAqVGhpbmcpIFVubWFyc2hhbEpTT04oYiBbXWJ5dGUpIGVycm9yIHsKCW9iamVjdCA6PSBtYWtlKG1hcFtzdHJpbmddanNvbi5SYXdNZXNzYWdlKQoJZXJyIDo9IGpzb24uVW5tYXJzaGFsKGIsICZvYmplY3QpCglpZiBlcnIgIT0gbmlsIHsKCQlyZXR1cm4gZXJyCgl9CgoJaWYgcmF3LCBmb3VuZCA6PSBvYmplY3RbImlkIl07IGZvdW5kIHsKCQllcnIgPSBqc29uLlVubWFyc2hhbChyYXcsICZhLklkKQoJCWlmIGVyciAhPSBuaWwgewoJCQlyZXR1cm4gZm10LkVycm9yZigiZXJyb3IgcmVhZGluZyAnaWQnOiAldyIsIGVycikKCQl9CgkJZGVsZXRlKG9iamVjdCwgImlkIikKCX0KCglpZiBsZW4ob2JqZWN0KSAhPSAwIHsKCQlhLkFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gbWFrZShtYXBbc3RyaW5nXWludCkKCQlmb3IgZmllbGROYW1lLCBmaWVsZEJ1ZiA6PSByYW5nZSBvYmplY3QgewoJCQl2YXIgZmllbGRWYWwgaW50CgkJCWVyciA6PSBqc29uLlVubWFyc2hhbChmaWVsZEJ1ZiwgJmZpZWxkVmFsKQoJCQlpZiBlcnIgIT0gbmlsIHsKCQkJCXJldHVybiBmbXQuRXJyb3JmKCJlcnJvciB1bm1hcnNoYWxpbmcgZmllbGQgJXM6ICV3IiwgZmllbGROYW1lLCBlcnIpCgkJCX0KCQkJYS5BZGRpdGlvbmFsUHJvcGVydGllc1tmaWVsZE5hbWVdID0gZmllbGRWYWwKCQl9Cgl9CglyZXR1cm4gbmlsCn0KCi8vIE92ZXJyaWRlIGRlZmF1bHQgSlNPTiBoYW5kbGluZyBmb3IgVGhpbmcgdG8gaGFuZGxlIEFkZGl0aW9uYWxQcm9wZXJ0aWVzCmZ1bmMgKGEgVGhpbmcpIE1hcnNoYWxKU09OKCkgKFtdYnl0ZSwgZXJyb3IpIHsKCXZhciBlcnIgZXJyb3IKCW9iamVjdCA6PSBtYWtlKG1hcFtzdHJpbmddanNvbi5SYXdNZXNzYWdlKQoKCW9iamVjdFsiaWQiXSwgZXJyID0ganNvbi5NYXJzaGFsKGEuSWQpCglpZiBlcnIgIT0gbmlsIHsKCQlyZXR1cm4gbmlsLCBmbXQuRXJyb3JmKCJlcnJvciBtYXJzaGFsaW5nICdpZCc6ICV3IiwgZXJyKQoJfQoKCWZvciBmaWVsZE5hbWUsIGZpZWxkIDo9IHJhbmdlIGEuQWRkaXRpb25hbFByb3BlcnRpZXMgewoJCW9iamVjdFtmaWVsZE5hbWVdLCBlcnIgPSBqc29uLk1hcnNoYWwoZmllbGQpCgkJaWYgZXJyICE9IG5pbCB7CgkJCXJldHVybiBuaWwsIGZtdC5FcnJvcmYoImVycm9yIG1hcnNoYWxpbmcgJyVzJzogJXciLCBmaWVsZE5hbWUsIGVycikKCQl9Cgl9CglyZXR1cm4ganNvbi5NYXJzaGFsKG9iamVjdCkKfQpgYGAKCjwvZGV0YWlscz4KCiMjIyBgYWRkaXRpb25hbFByb3BlcnRpZXNgIHdpdGggYW4gb2JqZWN0CgpgYGB5YW1sCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgIFRoaW5nOgogICAgICB0eXBlOiBvYmplY3QKICAgICAgcmVxdWlyZWQ6CiAgICAgICAgLSBpZAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIGlkOgogICAgICAgICAgdHlwZTogaW50ZWdlcgogICAgICAjIG9iamVjdAogICAgICBhZGRpdGlvbmFsUHJvcGVydGllczoKICAgICAgICB0eXBlOiBvYmplY3QKICAgICAgICBwcm9wZXJ0aWVzOgogICAgICAgICAgZm9vOgogICAgICAgICAgICB0eXBlOiBzdHJpbmcKYGBgCgpXaWxsIGdlbmVyYXRlOgoKYGBgZ28KLy8gVGhpbmcgZGVmaW5lcyBtb2RlbCBmb3IgVGhpbmcuCnR5cGUgVGhpbmcgc3RydWN0IHsKCUlkICAgICAgICAgICAgICAgICAgIGludCBganNvbjoiaWQiYAoJQWRkaXRpb25hbFByb3BlcnRpZXMgbWFwW3N0cmluZ11zdHJ1Y3QgewoJCUZvbyAqc3RyaW5nIGBqc29uOiJmb28sb21pdGVtcHR5ImAKCX0gYGpzb246Ii0iYAp9CgovLyB3aXRoIGdlbmVyYXRlZCBib2lsZXJwbGF0ZSBiZWxvdwpgYGAKCjxkZXRhaWxzPgoKPHN1bW1hcnk+Qm9pbGVycGxhdGU8L3N1bW1hcnk+CgpgYGBnbwovLyBHZXR0ZXIgZm9yIGFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgVGhpbmcuIFJldHVybnMgdGhlIHNwZWNpZmllZAovLyBlbGVtZW50IGFuZCB3aGV0aGVyIGl0IHdhcyBmb3VuZApmdW5jIChhIFRoaW5nKSBHZXQoZmllbGROYW1lIHN0cmluZykgKHZhbHVlIHN0cnVjdCB7CglGb28gKnN0cmluZyBganNvbjoiZm9vLG9taXRlbXB0eSJgCn0sIGZvdW5kIGJvb2wpIHsKCWlmIGEuQWRkaXRpb25hbFByb3BlcnRpZXMgIT0gbmlsIHsKCQl2YWx1ZSwgZm91bmQgPSBhLkFkZGl0aW9uYWxQcm9wZXJ0aWVzW2ZpZWxkTmFtZV0KCX0KCXJldHVybgp9CgovLyBTZXR0ZXIgZm9yIGFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgVGhpbmcKZnVuYyAoYSAqVGhpbmcpIFNldChmaWVsZE5hbWUgc3RyaW5nLCB2YWx1ZSBzdHJ1Y3QgewoJRm9vICpzdHJpbmcgYGpzb246ImZvbyxvbWl0ZW1wdHkiYAp9KSB7CglpZiBhLkFkZGl0aW9uYWxQcm9wZXJ0aWVzID09IG5pbCB7CgkJYS5BZGRpdGlvbmFsUHJvcGVydGllcyA9IG1ha2UobWFwW3N0cmluZ11zdHJ1Y3QgewoJCQlGb28gKnN0cmluZyBganNvbjoiZm9vLG9taXRlbXB0eSJgCgkJfSkKCX0KCWEuQWRkaXRpb25hbFByb3BlcnRpZXNbZmllbGROYW1lXSA9IHZhbHVlCn0KCi8vIE92ZXJyaWRlIGRlZmF1bHQgSlNPTiBoYW5kbGluZyBmb3IgVGhpbmcgdG8gaGFuZGxlIEFkZGl0aW9uYWxQcm9wZXJ0aWVzCmZ1bmMgKGEgKlRoaW5nKSBVbm1hcnNoYWxKU09OKGIgW11ieXRlKSBlcnJvciB7CglvYmplY3QgOj0gbWFrZShtYXBbc3RyaW5nXWpzb24uUmF3TWVzc2FnZSkKCWVyciA6PSBqc29uLlVubWFyc2hhbChiLCAmb2JqZWN0KQoJaWYgZXJyICE9IG5pbCB7CgkJcmV0dXJuIGVycgoJfQoKCWlmIHJhdywgZm91bmQgOj0gb2JqZWN0WyJpZCJdOyBmb3VuZCB7CgkJZXJyID0ganNvbi5Vbm1hcnNoYWwocmF3LCAmYS5JZCkKCQlpZiBlcnIgIT0gbmlsIHsKCQkJcmV0dXJuIGZtdC5FcnJvcmYoImVycm9yIHJlYWRpbmcgJ2lkJzogJXciLCBlcnIpCgkJfQoJCWRlbGV0ZShvYmplY3QsICJpZCIpCgl9CgoJaWYgbGVuKG9iamVjdCkgIT0gMCB7CgkJYS5BZGRpdGlvbmFsUHJvcGVydGllcyA9IG1ha2UobWFwW3N0cmluZ11zdHJ1Y3QgewoJCQlGb28gKnN0cmluZyBganNvbjoiZm9vLG9taXRlbXB0eSJgCgkJfSkKCQlmb3IgZmllbGROYW1lLCBmaWVsZEJ1ZiA6PSByYW5nZSBvYmplY3QgewoJCQl2YXIgZmllbGRWYWwgc3RydWN0IHsKCQkJCUZvbyAqc3RyaW5nIGBqc29uOiJmb28sb21pdGVtcHR5ImAKCQkJfQoJCQllcnIgOj0ganNvbi5Vbm1hcnNoYWwoZmllbGRCdWYsICZmaWVsZFZhbCkKCQkJaWYgZXJyICE9IG5pbCB7CgkJCQlyZXR1cm4gZm10LkVycm9yZigiZXJyb3IgdW5tYXJzaGFsaW5nIGZpZWxkICVzOiAldyIsIGZpZWxkTmFtZSwgZXJyKQoJCQl9CgkJCWEuQWRkaXRpb25hbFByb3BlcnRpZXNbZmllbGROYW1lXSA9IGZpZWxkVmFsCgkJfQoJfQoJcmV0dXJuIG5pbAp9CgovLyBPdmVycmlkZSBkZWZhdWx0IEpTT04gaGFuZGxpbmcgZm9yIFRoaW5nIHRvIGhhbmRsZSBBZGRpdGlvbmFsUHJvcGVydGllcwpmdW5jIChhIFRoaW5nKSBNYXJzaGFsSlNPTigpIChbXWJ5dGUsIGVycm9yKSB7Cgl2YXIgZXJyIGVycm9yCglvYmplY3QgOj0gbWFrZShtYXBbc3RyaW5nXWpzb24uUmF3TWVzc2FnZSkKCglvYmplY3RbImlkIl0sIGVyciA9IGpzb24uTWFyc2hhbChhLklkKQoJaWYgZXJyICE9IG5pbCB7CgkJcmV0dXJuIG5pbCwgZm10LkVycm9yZigiZXJyb3IgbWFyc2hhbGluZyAnaWQnOiAldyIsIGVycikKCX0KCglmb3IgZmllbGROYW1lLCBmaWVsZCA6PSByYW5nZSBhLkFkZGl0aW9uYWxQcm9wZXJ0aWVzIHsKCQlvYmplY3RbZmllbGROYW1lXSwgZXJyID0ganNvbi5NYXJzaGFsKGZpZWxkKQoJCWlmIGVyciAhPSBuaWwgewoJCQlyZXR1cm4gbmlsLCBmbXQuRXJyb3JmKCJlcnJvciBtYXJzaGFsaW5nICclcyc6ICV3IiwgZmllbGROYW1lLCBlcnIpCgkJfQoJfQoJcmV0dXJuIGpzb24uTWFyc2hhbChvYmplY3QpCn0KYGBgCgo8L2RldGFpbHM+CgojIyBDaGFuZ2luZyB0aGUgbmFtZXMgb2YgZ2VuZXJhdGVkIHR5cGVzCgpBcyBvZiBgb2FwaS1jb2RlZ2VuYCB2Mi4yLjAsIGl0IGlzIG5vdyBwb3NzaWJsZSB0byB1c2UgdGhlIGBvdXRwdXQtb3B0aW9uc2AgY29uZmlndXJhdGlvbidzIGBuYW1lLW5vcm1hbGl6ZXJgIHRvIGRlZmluZSB0aGUgbG9naWMgZm9yIGhvdyB0byBjb252ZXJ0IGFuIE9wZW5BUEkgbmFtZSAoaS5lLiBhbiBPcGVyYXRpb24gSUQgb3IgYSBTY2hlbWEgbmFtZSkgYW5kIGNvbnN0cnVjdCBhIEdvIHR5cGUgbmFtZS4KCjxkZXRhaWxzPgoKPHN1bW1hcnk+RXhhbXBsZSwgdXNpbmcgZGVmYXVsdCBjb25maWd1cmF0aW9uPC9zdW1tYXJ5PgoKQnkgZGVmYXVsdCwgYG9hcGktY29kZWdlbmAgd2lsbCBwZXJmb3JtIGNhbWVsLWNhc2UgY29udmVyc2lvbiwgc28gZm9yIGEgc3BlYyBzdWNoIGFzOgoKYGBgeWFtbApvcGVuYXBpOiAiMy4wLjAiCmluZm86CiAgdmVyc2lvbjogMS4wLjAKICB0aXRsZTogRXhhbXBsZSBjb2RlIGZvciB0aGUgYG5hbWUtbm9ybWFsaXplcmAgb3V0cHV0IG9wdGlvbgpwYXRoczoKICAvYXBpL3BldHMve3BldElkfToKICAgIGdldDoKICAgICAgc3VtbWFyeTogR2V0IHBldCBnaXZlbiBpZGVudGlmaWVyLgogICAgICBvcGVyYXRpb25JZDogZ2V0SHR0cFBldAogICAgICBwYXJhbWV0ZXJzOgogICAgICAtIG5hbWU6IHBldElkCiAgICAgICAgaW46IHBhdGgKICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgIHNjaGVtYToKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICByZXNwb25zZXM6CiAgICAgICAgJzIwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogdmFsaWQgcGV0CiAgICAgICAgICBjb250ZW50OgogICAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9QZXQnCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgIFBldDoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gdXVpZAogICAgICAgIC0gbmFtZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIHV1aWQ6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgIGRlc2NyaXB0aW9uOiBUaGUgcGV0IHV1aWQuCiAgICAgICAgbmFtZToKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgZGVzY3JpcHRpb246IFRoZSBuYW1lIG9mIHRoZSBwZXQuCiAgICBFcnJvcjoKICAgICAgcmVxdWlyZWQ6CiAgICAgICAgLSBjb2RlCiAgICAgICAgLSBtZXNzYWdlCiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgY29kZToKICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAgIGZvcm1hdDogaW50MzIKICAgICAgICAgIGRlc2NyaXB0aW9uOiBFcnJvciBjb2RlCiAgICAgICAgbWVzc2FnZToKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgZGVzY3JpcHRpb246IEVycm9yIG1lc3NhZ2UKICAgIE9uZU9mMnRoaW5nczoKICAgICAgZGVzY3JpcHRpb246ICJOb3RpY2UgdGhhdCB0aGUgYHRoaW5nc2AgaXMgbm90IGNhcGl0YWxpc2VkIgogICAgICBvbmVPZjoKICAgICAgICAtIHR5cGU6IG9iamVjdAogICAgICAgICAgcmVxdWlyZWQ6CiAgICAgICAgICAgIC0gaWQKICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgIGlkOgogICAgICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAtIHR5cGU6IG9iamVjdAogICAgICAgICAgcmVxdWlyZWQ6CiAgICAgICAgICAgIC0gaWQKICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgIGlkOgogICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgIGZvcm1hdDogdXVpZApgYGAKClRoaXMgd2lsbCBwcm9kdWNlOgoKYGBgZ28KLy8gT25lT2YydGhpbmdzIE5vdGljZSB0aGF0IHRoZSBgdGhpbmdzYCBpcyBub3QgY2FwaXRhbGlzZWQKdHlwZSBPbmVPZjJ0aGluZ3Mgc3RydWN0IHsKCXVuaW9uIGpzb24uUmF3TWVzc2FnZQp9CgovLyBQZXQgZGVmaW5lcyBtb2RlbCBmb3IgUGV0Lgp0eXBlIFBldCBzdHJ1Y3QgewoJLy8gTmFtZSBUaGUgbmFtZSBvZiB0aGUgcGV0LgoJTmFtZSBzdHJpbmcgYGpzb246Im5hbWUiYAoKCS8vIFV1aWQgVGhlIHBldCB1dWlkLgoJVXVpZCBzdHJpbmcgYGpzb246InV1aWQiYAp9CgovLyBUaGUgaW50ZXJmYWNlIHNwZWNpZmljYXRpb24gZm9yIHRoZSBjbGllbnQgYWJvdmUuCnR5cGUgQ2xpZW50SW50ZXJmYWNlIGludGVyZmFjZSB7CgkvLyBHZXRIdHRwUGV0IHJlcXVlc3QKCUdldEh0dHBQZXQoY3R4IGNvbnRleHQuQ29udGV4dCwgcGV0SWQgc3RyaW5nLCByZXFFZGl0b3JzIC4uLlJlcXVlc3RFZGl0b3JGbikgKCpodHRwLlJlc3BvbnNlLCBlcnJvcikKfQpgYGAKCjwvZGV0YWlscz4KCjxkZXRhaWxzPgoKPHN1bW1hcnk+RXhhbXBsZSwgdXNpbmcgPGNvZGU+VG9DYW1lbENhc2VXaXRoSW5pdGlhbGlzbXM8L2NvZGU+PC9zdW1tYXJ5PgoKQnkgZGVmYXVsdCwgYG9hcGktY29kZWdlbmAgd2lsbCBwZXJmb3JtIGNhbWVsLWNhc2UgY29udmVyc2lvbiwgc28gZm9yIGEgc3BlYyBzdWNoIGFzOgoKYGBgeWFtbApvcGVuYXBpOiAiMy4wLjAiCmluZm86CiAgdmVyc2lvbjogMS4wLjAKICB0aXRsZTogRXhhbXBsZSBjb2RlIGZvciB0aGUgYG5hbWUtbm9ybWFsaXplcmAgb3V0cHV0IG9wdGlvbgpwYXRoczoKICAvYXBpL3BldHMve3BldElkfToKICAgIGdldDoKICAgICAgc3VtbWFyeTogR2V0IHBldCBnaXZlbiBpZGVudGlmaWVyLgogICAgICBvcGVyYXRpb25JZDogZ2V0SHR0cFBldAogICAgICBwYXJhbWV0ZXJzOgogICAgICAtIG5hbWU6IHBldElkCiAgICAgICAgaW46IHBhdGgKICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgIHNjaGVtYToKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICByZXNwb25zZXM6CiAgICAgICAgJzIwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogdmFsaWQgcGV0CiAgICAgICAgICBjb250ZW50OgogICAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9QZXQnCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgIFBldDoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gdXVpZAogICAgICAgIC0gbmFtZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIHV1aWQ6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgIGRlc2NyaXB0aW9uOiBUaGUgcGV0IHV1aWQuCiAgICAgICAgbmFtZToKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgZGVzY3JpcHRpb246IFRoZSBuYW1lIG9mIHRoZSBwZXQuCiAgICBFcnJvcjoKICAgICAgcmVxdWlyZWQ6CiAgICAgICAgLSBjb2RlCiAgICAgICAgLSBtZXNzYWdlCiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgY29kZToKICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAgIGZvcm1hdDogaW50MzIKICAgICAgICAgIGRlc2NyaXB0aW9uOiBFcnJvciBjb2RlCiAgICAgICAgbWVzc2FnZToKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgZGVzY3JpcHRpb246IEVycm9yIG1lc3NhZ2UKICAgIE9uZU9mMnRoaW5nczoKICAgICAgZGVzY3JpcHRpb246ICJOb3RpY2UgdGhhdCB0aGUgYHRoaW5nc2AgaXMgbm90IGNhcGl0YWxpc2VkIgogICAgICBvbmVPZjoKICAgICAgICAtIHR5cGU6IG9iamVjdAogICAgICAgICAgcmVxdWlyZWQ6CiAgICAgICAgICAgIC0gaWQKICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgIGlkOgogICAgICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAtIHR5cGU6IG9iamVjdAogICAgICAgICAgcmVxdWlyZWQ6CiAgICAgICAgICAgIC0gaWQKICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgIGlkOgogICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgIGZvcm1hdDogdXVpZApgYGAKClRoaXMgd2lsbCBwcm9kdWNlOgoKYGBgZ28KLy8gT25lT2YydGhpbmdzIE5vdGljZSB0aGF0IHRoZSBgdGhpbmdzYCBpcyBub3QgY2FwaXRhbGlzZWQKdHlwZSBPbmVPZjJ0aGluZ3Mgc3RydWN0IHsKCXVuaW9uIGpzb24uUmF3TWVzc2FnZQp9CgovLyBQZXQgZGVmaW5lcyBtb2RlbCBmb3IgUGV0Lgp0eXBlIFBldCBzdHJ1Y3QgewoJLy8gTmFtZSBUaGUgbmFtZSBvZiB0aGUgcGV0LgoJTmFtZSBzdHJpbmcgYGpzb246Im5hbWUiYAoKCS8vIFVVSUQgVGhlIHBldCB1dWlkLgoJVVVJRCBzdHJpbmcgYGpzb246InV1aWQiYAp9CgovLyBUaGUgaW50ZXJmYWNlIHNwZWNpZmljYXRpb24gZm9yIHRoZSBjbGllbnQgYWJvdmUuCnR5cGUgQ2xpZW50SW50ZXJmYWNlIGludGVyZmFjZSB7CgkvLyBHZXRIVFRQUGV0IHJlcXVlc3QKCUdldEhUVFBQZXQoY3R4IGNvbnRleHQuQ29udGV4dCwgcGV0SUQgc3RyaW5nLCByZXFFZGl0b3JzIC4uLlJlcXVlc3RFZGl0b3JGbikgKCpodHRwLlJlc3BvbnNlLCBlcnJvcikKfQpgYGAKCjwvZGV0YWlscz4KCgpGb3IgbW9yZSBkZXRhaWxzIG9mIHdoYXQgdGhlIHJlc3VsdGluZyBjb2RlIGxvb2tzIGxpa2UsIGNoZWNrIG91dCBbdGhlIHRlc3QgY2FzZXNdKGludGVybmFsL3Rlc3Qvb3V0cHV0b3B0aW9ucy9uYW1lLW5vcm1hbGl6ZXIvKS4KCiMjIEV4YW1wbGVzCgpUaGUgW2V4YW1wbGVzIGRpcmVjdG9yeV0oZXhhbXBsZXMpIGNvbnRhaW5zIHNvbWUgYWRkaXRpb25hbCBjYXNlcyB3aGljaCBhcmUgdXNlZnVsIGV4YW1wbGVzIGZvciBob3cgdG8gdXNlIGBvYXBpLWNvZGVnZW5gLCBpbmNsdWRpbmcgaG93IHlvdSdkIHRha2UgdGhlIFBldHN0b3JlIEFQSSBhbmQgaW1wbGVtZW50IGl0IHdpdGggYG9hcGktY29kZWdlbmAuCgpZb3UgY291bGQgYWxzbyBmaW5kIHNvbWUgY2FzZXMgb2YgaG93IHRoZSBwcm9qZWN0IGNhbiBiZSB1c2VkIGJ5IGNoZWNraW5nIG91dCBvdXIgW2ludGVybmFsIHRlc3QgY2FzZXNdKGludGVybmFsL3Rlc3QpIHdoaWNoIGFyZSByZWFsLXdvcmxkIHVzYWdlcyB0aGF0IG1ha2UgdXAgb3VyIHJlZ3Jlc3Npb24gdGVzdHMuCgojIyMgQmxvZyBwb3N0cwoKV2UgbG92ZSByZWFkaW5nIHBvc3RzIGJ5IHRoZSBjb21tdW5pdHkgYWJvdXQgaG93IHRvIHVzZSB0aGUgcHJvamVjdC4KCkhlcmUgYXJlIGEgZmV3IHdlJ3ZlIGZvdW5kIGFyb3VuZCB0aGUgV2ViOgoKLSBbQnVpbGRpbmcgYSBHbyBSRVNUZnVsIEFQSSB3aXRoIGRlc2lnbi1maXJzdCBPcGVuQVBJIGNvbnRyYWN0c10oaHR0cHM6Ly93d3cuanZ0Lm1lL3Bvc3RzLzIwMjIvMDcvMTIvZ28tb3BlbmFwaS1zZXJ2ZXIvKQotIFtBIFByYWN0aWNhbCBHdWlkZSB0byBVc2luZyBvYXBpLWNvZGVnZW4gaW4gR29sYW5nIEFQSSBEZXZlbG9wbWVudCB3aXRoIHRoZSBGaWJlciBGcmFtZXdvcmtdKGh0dHBzOi8vbWVkaXVtLmNvbS9AZmlraWhhbGFuL2EtcHJhY3RpY2FsLWd1aWRlLXRvLXVzaW5nLW9hcGktY29kZWdlbi1pbi1nb2xhbmctYXBpLWRldmVsb3BtZW50LXdpdGgtdGhlLWZpYmVyLWZyYW1ld29yay1iY2UyYTU5MzgwYWUpCi0gW0dlbmVyYXRpbmcgR28gc2VydmVyIGNvZGUgZnJvbSBPcGVuQVBJIDMgZGVmaW5pdGlvbnNdKGh0dHBzOi8vbGRlai5ubC9wb3N0L2dlbmVyYXRpbmctZ28tZnJvbS1vcGVuYXBpLTMvKQotIFtHbyBDbGllbnQgQ29kZSBHZW5lcmF0aW9uIGZyb20gU3dhZ2dlciBhbmQgT3BlbkFQSV0oaHR0cHM6Ly9tZWRpdW0uY29tL0BreW9kby10ZWNoL2dvLWNsaWVudC1jb2RlLWdlbmVyYXRpb24tZnJvbS1zd2FnZ2VyLWFuZC1vcGVuYXBpLWEwNTc2ODMxODM2YykKLSBbR28gb2FwaS1jb2RlZ2VuICsgcmVxdWVzdCB2YWxpZGF0aW9uXShodHRwczovL2Jsb2cuY29tbWl0c21hcnQuY29tL2dvLW9hcGktY29kZWdlbi1yZXF1ZXN0LXZhbGlkYXRpb24tMjg1Mzk4YjM3ZGM4KQoKR290IG9uZSB0byBhZGQ/IFBsZWFzZSByYWlzZSBhIFBSIQoKIyMgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMgKEZBUXMpCgojIyMgSG93IGRvZXMgYG9hcGktY29kZWdlbmAgaGFuZGxlIGBhbnlPZmAsIGBhbGxPZmAgYW5kIGBvbmVPZmA/Cgpgb2FwaS1jb2RlZ2VuYCBzdXBwb3J0cyBgYW55T2ZgLCBgYWxsT2ZgIGFuZCBgb25lT2ZgIGZvciBnZW5lcmF0ZWQgY29kZS4KCkZvciBpbnN0YW5jZSwgdGhyb3VnaCB0aGUgZm9sbG93aW5nIE9wZW5BUEkgc3BlYzoKCmBgYHlhbWwKb3BlbmFwaTogIjMuMC4wIgppbmZvOgogIHZlcnNpb246IDEuMC4wCiAgdGl0bGU6IFVzaW5nIGNvbXBsZXggc2NoZW1hcwogIGRlc2NyaXB0aW9uOiBBbiBleGFtcGxlIG9mIGBhbnlPZmAsIGBhbGxPZmAgYW5kIGBvbmVPZmAKY29tcG9uZW50czoKICBzY2hlbWFzOgogICAgIyBiYXNlIHR5cGVzCiAgICBDbGllbnQ6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICByZXF1aXJlZDoKICAgICAgICAtIG5hbWUKICAgICAgcHJvcGVydGllczoKICAgICAgICBuYW1lOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICBJZGVudGl0eToKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gaXNzdWVyCiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgaXNzdWVyOgogICAgICAgICAgdHlwZTogc3RyaW5nCgogICAgIyBhbGxPZiBwZXJmb3JtcyBhIHVuaW9uIG9mIGFsbCB0eXBlcyBkZWZpbmVkCiAgICBDbGllbnRXaXRoSWQ6CiAgICAgIGFsbE9mOgogICAgICAgIC0gJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL0NsaWVudCcKICAgICAgICAtIHByb3BlcnRpZXM6CiAgICAgICAgICAgIGlkOgogICAgICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAgIHJlcXVpcmVkOgogICAgICAgICAgICAtIGlkCgogICAgIyBhbGxPZiBwZXJmb3JtcyBhIHVuaW9uIG9mIGFsbCB0eXBlcyBkZWZpbmVkLCBidXQgaWYgdGhlcmUncyBhIGR1cGxpY2F0ZSBmaWVsZCBkZWZpbmVkLCBpdCdsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgbGFzdCBzY2hlbWEKICAgICMgaHR0cHM6Ly9naXRodWIuY29tL2RlZXBtYXAvb2FwaS1jb2RlZ2VuL2lzc3Vlcy8xNTY5CiAgICBJZGVudGl0eVdpdGhEdXBsaWNhdGVGaWVsZDoKICAgICAgYWxsT2Y6CiAgICAgICAgIyBgaXNzdWVyYCB3aWxsIGJlIGlnbm9yZWQKICAgICAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9JZGVudGl0eScKICAgICAgICAjIGBpc3N1ZXJgIHdpbGwgYmUgaWdub3JlZAogICAgICAgIC0gcHJvcGVydGllczoKICAgICAgICAgICAgaXNzdWVyOgogICAgICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAjIGBpc3N1ZXJgIHdpbGwgdGFrZSBwcmVjZWRlbmNlCiAgICAgICAgLSBwcm9wZXJ0aWVzOgogICAgICAgICAgICBpc3N1ZXI6CiAgICAgICAgICAgICAgdHlwZTogb2JqZWN0CiAgICAgICAgICAgICAgcHJvcGVydGllczoKICAgICAgICAgICAgICAgIG5hbWU6CiAgICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgIHJlcXVpcmVkOgogICAgICAgICAgICAgICAgLSBuYW1lCgogICAgIyBhbnlPZiByZXN1bHRzIGluIGEgdHlwZSB0aGF0IGhhcyBhbiBgQXNDbGllbnRgL2BNZXJnZUNsaWVudGAvYEZyb21DbGllbnRgIGFuZCBhbiBgQXNJZGVudGl0eWAvYE1lcmdlSWRlbnRpdHlgL2BGcm9tSWRlbnRpdHlgIG1ldGhvZCBzbyB5b3UgY2FuIGNob29zZSB3aGljaCBvZiB0aGVtIHlvdSB3YW50IHRvIHJldHJpZXZlCiAgICBDbGllbnRBbmRNYXliZUlkZW50aXR5OgogICAgICBhbnlPZjoKICAgICAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9DbGllbnQnCiAgICAgICAgLSAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvSWRlbnRpdHknCgogICAgIyBvbmVPZiByZXN1bHRzIGluIGEgdHlwZSB0aGF0IGhhcyBhbiBgQXNDbGllbnRgL2BNZXJnZUNsaWVudGAvYEZyb21DbGllbnRgIGFuZCBhbiBgQXNJZGVudGl0eWAvYE1lcmdlSWRlbnRpdHlgL2BGcm9tSWRlbnRpdHlgIG1ldGhvZCBzbyB5b3UgY2FuIGNob29zZSB3aGljaCBvZiB0aGVtIHlvdSB3YW50IHRvIHJldHJpZXZlCiAgICBDbGllbnRPcklkZW50aXR5OgogICAgICBvbmVPZjoKICAgICAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9DbGllbnQnCiAgICAgICAgLSAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvSWRlbnRpdHknCmBgYAoKVGhpcyByZXN1bHRzIGluIHRoZSBmb2xsb3dpbmcgdHlwZXM6Cgo8ZGV0YWlscz4KCjxzdW1tYXJ5PkJhc2UgdHlwZXM8L3N1bW1hcnk+CgpgYGBnbwovLyBDbGllbnQgZGVmaW5lcyBtb2RlbCBmb3IgQ2xpZW50Lgp0eXBlIENsaWVudCBzdHJ1Y3QgewoJTmFtZSBzdHJpbmcgYGpzb246Im5hbWUiYAp9CgovLyBJZGVudGl0eSBkZWZpbmVzIG1vZGVsIGZvciBJZGVudGl0eS4KdHlwZSBJZGVudGl0eSBzdHJ1Y3QgewoJSXNzdWVyIHN0cmluZyBganNvbjoiaXNzdWVyImAKfQpgYGAKCjwvZGV0YWlscz4KCjxkZXRhaWxzPgoKPHN1bW1hcnk+PGNvZGU+YWxsT2Y8L2NvZGU+PC9zdW1tYXJ5PgoKYGBgZ28KLy8gQ2xpZW50V2l0aElkIGRlZmluZXMgbW9kZWwgZm9yIENsaWVudFdpdGhJZC4KdHlwZSBDbGllbnRXaXRoSWQgc3RydWN0IHsKCUlkICAgaW50ICAgIGBqc29uOiJpZCJgCglOYW1lIHN0cmluZyBganNvbjoibmFtZSJgCn0KCi8vIElkZW50aXR5V2l0aER1cGxpY2F0ZUZpZWxkIGRlZmluZXMgbW9kZWwgZm9yIElkZW50aXR5V2l0aER1cGxpY2F0ZUZpZWxkLgp0eXBlIElkZW50aXR5V2l0aER1cGxpY2F0ZUZpZWxkIHN0cnVjdCB7CglJc3N1ZXIgc3RydWN0IHsKCQlOYW1lIHN0cmluZyBganNvbjoibmFtZSJgCgl9IGBqc29uOiJpc3N1ZXIiYAp9CmBgYAoKPC9kZXRhaWxzPgoKPGRldGFpbHM+Cgo8c3VtbWFyeT48Y29kZT5hbnlPZjwvY29kZT48L3N1bW1hcnk+CgpgYGBnbwppbXBvcnQgKAoJImVuY29kaW5nL2pzb24iCgoJImdpdGh1Yi5jb20vb2FwaS1jb2RlZ2VuL3J1bnRpbWUiCikKCi8vIENsaWVudEFuZE1heWJlSWRlbnRpdHkgZGVmaW5lcyBtb2RlbCBmb3IgQ2xpZW50QW5kTWF5YmVJZGVudGl0eS4KdHlwZSBDbGllbnRBbmRNYXliZUlkZW50aXR5IHN0cnVjdCB7Cgl1bmlvbiBqc29uLlJhd01lc3NhZ2UKfQoKLy8gQXNDbGllbnQgcmV0dXJucyB0aGUgdW5pb24gZGF0YSBpbnNpZGUgdGhlIENsaWVudEFuZE1heWJlSWRlbnRpdHkgYXMgYSBDbGllbnQKZnVuYyAodCBDbGllbnRBbmRNYXliZUlkZW50aXR5KSBBc0NsaWVudCgpIChDbGllbnQsIGVycm9yKSB7Cgl2YXIgYm9keSBDbGllbnQKCWVyciA6PSBqc29uLlVubWFyc2hhbCh0LnVuaW9uLCAmYm9keSkKCXJldHVybiBib2R5LCBlcnIKfQoKLy8gRnJvbUNsaWVudCBvdmVyd3JpdGVzIGFueSB1bmlvbiBkYXRhIGluc2lkZSB0aGUgQ2xpZW50QW5kTWF5YmVJZGVudGl0eSBhcyB0aGUgcHJvdmlkZWQgQ2xpZW50CmZ1bmMgKHQgKkNsaWVudEFuZE1heWJlSWRlbnRpdHkpIEZyb21DbGllbnQodiBDbGllbnQpIGVycm9yIHsKCWIsIGVyciA6PSBqc29uLk1hcnNoYWwodikKCXQudW5pb24gPSBiCglyZXR1cm4gZXJyCn0KCi8vIE1lcmdlQ2xpZW50IHBlcmZvcm1zIGEgbWVyZ2Ugd2l0aCBhbnkgdW5pb24gZGF0YSBpbnNpZGUgdGhlIENsaWVudEFuZE1heWJlSWRlbnRpdHksIHVzaW5nIHRoZSBwcm92aWRlZCBDbGllbnQKZnVuYyAodCAqQ2xpZW50QW5kTWF5YmVJZGVudGl0eSkgTWVyZ2VDbGllbnQodiBDbGllbnQpIGVycm9yIHsKCWIsIGVyciA6PSBqc29uLk1hcnNoYWwodikKCWlmIGVyciAhPSBuaWwgewoJCXJldHVybiBlcnIKCX0KCgltZXJnZWQsIGVyciA6PSBydW50aW1lLkpTT05NZXJnZSh0LnVuaW9uLCBiKQoJdC51bmlvbiA9IG1lcmdlZAoJcmV0dXJuIGVycgp9CgovLyBBc0lkZW50aXR5IHJldHVybnMgdGhlIHVuaW9uIGRhdGEgaW5zaWRlIHRoZSBDbGllbnRBbmRNYXliZUlkZW50aXR5IGFzIGEgSWRlbnRpdHkKZnVuYyAodCBDbGllbnRBbmRNYXliZUlkZW50aXR5KSBBc0lkZW50aXR5KCkgKElkZW50aXR5LCBlcnJvcikgewoJdmFyIGJvZHkgSWRlbnRpdHkKCWVyciA6PSBqc29uLlVubWFyc2hhbCh0LnVuaW9uLCAmYm9keSkKCXJldHVybiBib2R5LCBlcnIKfQoKLy8gRnJvbUlkZW50aXR5IG92ZXJ3cml0ZXMgYW55IHVuaW9uIGRhdGEgaW5zaWRlIHRoZSBDbGllbnRBbmRNYXliZUlkZW50aXR5IGFzIHRoZSBwcm92aWRlZCBJZGVudGl0eQpmdW5jICh0ICpDbGllbnRBbmRNYXliZUlkZW50aXR5KSBGcm9tSWRlbnRpdHkodiBJZGVudGl0eSkgZXJyb3IgewoJYiwgZXJyIDo9IGpzb24uTWFyc2hhbCh2KQoJdC51bmlvbiA9IGIKCXJldHVybiBlcnIKfQoKLy8gTWVyZ2VJZGVudGl0eSBwZXJmb3JtcyBhIG1lcmdlIHdpdGggYW55IHVuaW9uIGRhdGEgaW5zaWRlIHRoZSBDbGllbnRBbmRNYXliZUlkZW50aXR5LCB1c2luZyB0aGUgcHJvdmlkZWQgSWRlbnRpdHkKZnVuYyAodCAqQ2xpZW50QW5kTWF5YmVJZGVudGl0eSkgTWVyZ2VJZGVudGl0eSh2IElkZW50aXR5KSBlcnJvciB7CgliLCBlcnIgOj0ganNvbi5NYXJzaGFsKHYpCglpZiBlcnIgIT0gbmlsIHsKCQlyZXR1cm4gZXJyCgl9CgoJbWVyZ2VkLCBlcnIgOj0gcnVudGltZS5KU09OTWVyZ2UodC51bmlvbiwgYikKCXQudW5pb24gPSBtZXJnZWQKCXJldHVybiBlcnIKfQoKZnVuYyAodCBDbGllbnRBbmRNYXliZUlkZW50aXR5KSBNYXJzaGFsSlNPTigpIChbXWJ5dGUsIGVycm9yKSB7CgliLCBlcnIgOj0gdC51bmlvbi5NYXJzaGFsSlNPTigpCglyZXR1cm4gYiwgZXJyCn0KCmZ1bmMgKHQgKkNsaWVudEFuZE1heWJlSWRlbnRpdHkpIFVubWFyc2hhbEpTT04oYiBbXWJ5dGUpIGVycm9yIHsKCWVyciA6PSB0LnVuaW9uLlVubWFyc2hhbEpTT04oYikKCXJldHVybiBlcnIKfQoKCmBgYAoKPC9kZXRhaWxzPgoKPGRldGFpbHM+Cgo8c3VtbWFyeT48Y29kZT5vbmVPZjwvY29kZT48L3N1bW1hcnk+CgpgYGBnbwovLyBBc0NsaWVudCByZXR1cm5zIHRoZSB1bmlvbiBkYXRhIGluc2lkZSB0aGUgQ2xpZW50T3JJZGVudGl0eSBhcyBhIENsaWVudApmdW5jICh0IENsaWVudE9ySWRlbnRpdHkpIEFzQ2xpZW50KCkgKENsaWVudCwgZXJyb3IpIHsKCXZhciBib2R5IENsaWVudAoJZXJyIDo9IGpzb24uVW5tYXJzaGFsKHQudW5pb24sICZib2R5KQoJcmV0dXJuIGJvZHksIGVycgp9CgovLyBGcm9tQ2xpZW50IG92ZXJ3cml0ZXMgYW55IHVuaW9uIGRhdGEgaW5zaWRlIHRoZSBDbGllbnRPcklkZW50aXR5IGFzIHRoZSBwcm92aWRlZCBDbGllbnQKZnVuYyAodCAqQ2xpZW50T3JJZGVudGl0eSkgRnJvbUNsaWVudCh2IENsaWVudCkgZXJyb3IgewoJYiwgZXJyIDo9IGpzb24uTWFyc2hhbCh2KQoJdC51bmlvbiA9IGIKCXJldHVybiBlcnIKfQoKLy8gTWVyZ2VDbGllbnQgcGVyZm9ybXMgYSBtZXJnZSB3aXRoIGFueSB1bmlvbiBkYXRhIGluc2lkZSB0aGUgQ2xpZW50T3JJZGVudGl0eSwgdXNpbmcgdGhlIHByb3ZpZGVkIENsaWVudApmdW5jICh0ICpDbGllbnRPcklkZW50aXR5KSBNZXJnZUNsaWVudCh2IENsaWVudCkgZXJyb3IgewoJYiwgZXJyIDo9IGpzb24uTWFyc2hhbCh2KQoJaWYgZXJyICE9IG5pbCB7CgkJcmV0dXJuIGVycgoJfQoKCW1lcmdlZCwgZXJyIDo9IHJ1bnRpbWUuSlNPTk1lcmdlKHQudW5pb24sIGIpCgl0LnVuaW9uID0gbWVyZ2VkCglyZXR1cm4gZXJyCn0KCi8vIEFzSWRlbnRpdHkgcmV0dXJucyB0aGUgdW5pb24gZGF0YSBpbnNpZGUgdGhlIENsaWVudE9ySWRlbnRpdHkgYXMgYSBJZGVudGl0eQpmdW5jICh0IENsaWVudE9ySWRlbnRpdHkpIEFzSWRlbnRpdHkoKSAoSWRlbnRpdHksIGVycm9yKSB7Cgl2YXIgYm9keSBJZGVudGl0eQoJZXJyIDo9IGpzb24uVW5tYXJzaGFsKHQudW5pb24sICZib2R5KQoJcmV0dXJuIGJvZHksIGVycgp9CgovLyBGcm9tSWRlbnRpdHkgb3ZlcndyaXRlcyBhbnkgdW5pb24gZGF0YSBpbnNpZGUgdGhlIENsaWVudE9ySWRlbnRpdHkgYXMgdGhlIHByb3ZpZGVkIElkZW50aXR5CmZ1bmMgKHQgKkNsaWVudE9ySWRlbnRpdHkpIEZyb21JZGVudGl0eSh2IElkZW50aXR5KSBlcnJvciB7CgliLCBlcnIgOj0ganNvbi5NYXJzaGFsKHYpCgl0LnVuaW9uID0gYgoJcmV0dXJuIGVycgp9CgovLyBNZXJnZUlkZW50aXR5IHBlcmZvcm1zIGEgbWVyZ2Ugd2l0aCBhbnkgdW5pb24gZGF0YSBpbnNpZGUgdGhlIENsaWVudE9ySWRlbnRpdHksIHVzaW5nIHRoZSBwcm92aWRlZCBJZGVudGl0eQpmdW5jICh0ICpDbGllbnRPcklkZW50aXR5KSBNZXJnZUlkZW50aXR5KHYgSWRlbnRpdHkpIGVycm9yIHsKCWIsIGVyciA6PSBqc29uLk1hcnNoYWwodikKCWlmIGVyciAhPSBuaWwgewoJCXJldHVybiBlcnIKCX0KCgltZXJnZWQsIGVyciA6PSBydW50aW1lLkpTT05NZXJnZSh0LnVuaW9uLCBiKQoJdC51bmlvbiA9IG1lcmdlZAoJcmV0dXJuIGVycgp9CgpmdW5jICh0IENsaWVudE9ySWRlbnRpdHkpIE1hcnNoYWxKU09OKCkgKFtdYnl0ZSwgZXJyb3IpIHsKCWIsIGVyciA6PSB0LnVuaW9uLk1hcnNoYWxKU09OKCkKCXJldHVybiBiLCBlcnIKfQoKZnVuYyAodCAqQ2xpZW50T3JJZGVudGl0eSkgVW5tYXJzaGFsSlNPTihiIFtdYnl0ZSkgZXJyb3IgewoJZXJyIDo9IHQudW5pb24uVW5tYXJzaGFsSlNPTihiKQoJcmV0dXJuIGVycgp9CmBgYAoKPC9kZXRhaWxzPgoKRm9yIG1vcmUgaW5mbywgY2hlY2sgb3V0IFt0aGUgZXhhbXBsZSBjb2RlXShleGFtcGxlcy9hbnlvZi1hbGxvZi1vbmVvZi8pLgoKIyMjIEhvdyBjYW4gSSBpZ25vcmUgcGFydHMgb2YgdGhlIHNwZWMgSSBkb24ndCBjYXJlIGFib3V0PwoKQnkgZGVmYXVsdCwgYG9hcGktY29kZWdlbmAgd2lsbCBnZW5lcmF0ZSBldmVyeXRoaW5nIGZyb20gdGhlIHNwZWNpZmljYXRpb24uCgpJZiB5b3UnZCBsaWtlIHRvIHJlZHVjZSB3aGF0J3MgZ2VuZXJhdGVkLCB5b3UgY2FuIHVzZSBvbmUgb2YgYSBmZXcgb3B0aW9ucyBpbiBbdGhlIGNvbmZpZ3VyYXRpb24gZmlsZV0oI3VzYWdlKSB0byB0dW5lIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSByZXN1bHRpbmcgb3V0cHV0OgoKYGBgeWFtbAojIHlhbWwtbGFuZ3VhZ2Utc2VydmVyOiAkc2NoZW1hPWh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9kZWVwbWFwL29hcGktY29kZWdlbi9IRUFEL2NvbmZpZ3VyYXRpb24tc2NoZW1hLmpzb24Kb3V0cHV0LW9wdGlvbnM6CiAgaW5jbHVkZS10YWdzOiBbXQogIGV4Y2x1ZGUtdGFnczogW10KICBpbmNsdWRlLW9wZXJhdGlvbi1pZHM6IFtdCiAgZXhjbHVkZS1vcGVyYXRpb24taWRzOiBbXQogIGV4Y2x1ZGUtc2NoZW1hczogW10KYGBgCgpDaGVjayBbdGhlIGRvY3NdKGh0dHBzOi8vcGtnLmdvLmRldi9naXRodWIuY29tL29hcGktY29kZWdlbi9vYXBpLWNvZGVnZW4vdjIvcGtnL2NvZGVnZW4jT3V0cHV0T3B0aW9ucykgZm9yIG1vcmUgZGV0YWlscyBvZiB1c2FnZS4KCiMjIyBTaG91bGQgSSBjb21taXQgdGhlIGdlbmVyYXRlZCBjb2RlPwoKV2UgcmVjb21tZW5kIGRvaW5nIHNvLCB5ZXMsIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6CgotIEl0IG1lYW5zIGl0J3MgZWFzaWVyIHRvIHZpZXcgdGhlIGltcGFjdCBvZiBhIGNoYW5nZSAtIGJlIGl0IGR1ZSB0byBhbiB1cGdyYWRlIG9mIGBvYXBpLWNvZGVnZW5gLCBvciBhIGNoYW5nZSB0byB5b3VyIHNwZWMgLSBhbmQgaGFzIGhlbHBlZCBjYXRjaCAocG9zc2libHkpIGJyZWFraW5nIGNoYW5nZXMgaW4gdGhlIHBhc3QgbW9yZSBlYXNpbHkKLSBJdCB0aGVuIGFsbG93cyB5b3VyIGNvZGViYXNlIHRvIGJlIGNvbnN1bWVkIGFzIGEgbGlicmFyeSwgYXMgYWxsIHRoZSBmaWxlcyBhcmUgY29tbWl0dGVkCgpUaGlzIG1lYW5zIHlvdSdsbCBuZWVkIHRvIGhhdmUgeW91ciBDSS9DRCBwaXBlbGluZSB2YWxpZGF0ZSB0aGF0IGdlbmVyYXRlZCBmaWxlcyBhcmUgYWxsIHVwLXRvLWRhdGUsIGJ1dCB0aGF0J3MgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIHBpZWNlIG9mIHdvcmsuCgojIyMgU2hvdWxkIEkgbGludCB0aGUgZ2VuZXJhdGVkIGNvZGU/CgpXZSByZWFsbHkgYXNrIHRoYXQgeW91IGRvbid0LiBBbHRob3VnaCBpdCBpbnRlbmRzIHRvIGJlIGlkaW9tYXRpYyBHbyBjb2RlLCBpdCdzIG5vdCBleHBlY3RlZCB0byBwYXNzIGFsbCB0aGUgdmFyaW91cyBsaW50aW5nIHJ1bGVzIHRoYXQgeW91ciBwcm9qZWN0IG1heSBhcHBseS4KCj4gWyFOT1RFXQo+IFdlIHdpbGwsIG9uIG9jY2FzaW9uLCBpbXByb3ZlIHRoZSBnZW5lcmF0ZWQgY29kZSB0byBmaXggc29tZSBsaW50aW5nIHdhcm5pbmdzLCBzdWNoIGFzIHRob3NlIGZyb20gYGdvIHZldGAsIGJ1dCB0aGlzIHNob3VsZCBub3QgYmUgYW4gZXhwZWN0ZWQgY2hhbmdlLgoKIyMjIEkndmUganVzdCB1cGRhdGVkIG15IHZlcnNpb24gb2YgYGtpbi1vcGVuYXBpYCwgYW5kIG5vdyBJIGNhbid0IGJ1aWxkIG15IGNvZGUg8J+YoAoKVGhlIFtraW4tb3BlbmFwaV0oaHR0cHM6Ly9naXRodWIuY29tL2dldGtpbi9raW4tb3BlbmFwaSkgcHJvamVjdCAtIHdoaWNoIHdlIPCfkpwgZm9yIHByb3ZpZGluZyBhIGdyZWF0IGxpYnJhcnkgYW5kIHNldCBvZiB0b29saW5nIGZvciBpbnRlcmFjdGluZyB3aXRoIE9wZW5BUEkgLSBpcyBhIHByZS12MSByZWxlYXNlLCB3aGljaCBtZWFucyB0aGF0IHRoZXkncmUgd2l0aGluIHRoZWlyIHJpZ2h0cyB0byBwdXNoIGJyZWFraW5nIGNoYW5nZXMuCgpUaGlzIG1heSBsZWFkIHRvIGJyZWFrYWdlIGluIHlvdXIgY29uc3VtaW5nIGNvZGUsIGFuZCBpZiBzbywgc29ycnkgdGhhdCdzIGhhcHBlbmVkIQoKV2UnbGwgYmUgYXdhcmUgb2YgdGhlIGlzc3VlLCBhbmQgd2lsbCB3b3JrIHRvIHVwZGF0ZSBib3RoIHRoZSBjb3JlIGBvYXBpLWNvZGVnZW5gIGFuZCB0aGUgbWlkZGxld2FyZXMgYWNjb3JkaW5nbHkuCgojIyBTcG9uc29ycwoKRm9yIHRoZSBtb3N0IHBhcnQsIGBvYXBpLWNvZGVnZW5gIGlzIG1haW50YWluZWQgaW4gdHdvIGJ1c3kgcGVvcGxlcycgZnJlZSB0aW1lLiBBcyBub3RlZCBpbiBbQ3JlYXRpbmcgYSBtb3JlIHN1c3RhaW5hYmxlIG1vZGVsIGZvciBgb2FwaS1jb2RlZ2VuYCBpbiB0aGUgZnV0dXJlXShodHRwczovL2dpdGh1Yi5jb20vZGVlcG1hcC9vYXBpLWNvZGVnZW4vZGlzY3Vzc2lvbnMvMTYwNiksIHdlJ3JlIGxvb2tpbmcgdG8gbWFrZSB0aGlzIGEgbW9yZSBzdXN0YWluYWJsZSBwcm9qZWN0IGluIHRoZSBmdXR1cmUuCgpXZSdyZSB2ZXJ5IGFwcHJlY2lhdGl2ZSBvZiBbdGhlIG1hbnkgY29udHJpYnV0b3JzIG92ZXIgdGhlIHllYXJzXShodHRwczovL2dpdGh1Yi5jb20vZGVlcG1hcC9vYXBpLWNvZGVnZW4vZ3JhcGhzL2NvbnRyaWJ1dG9ycykgYW5kIHRoZSBvbmdvaW5nIHVzZSBvZiB0aGUgcHJvamVjdCDwn5KcCgpQbGVhc2UgY29uc2lkZXIgc3BvbnNvcmluZyB1cyB0aHJvdWdoIEdpdEh1YiBTcG9uc29ycyBlaXRoZXIgW29uIHRoZSBvcmdhbmlzYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9vYXBpLWNvZGVnZW4vKSBvciBbZGlyZWN0bHkgZm9yIEphbWllXShodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvamFtaWV0YW5uYS8pLCB3aGljaCBoZWxwcyB3b3JrIHRvd2FyZHMgdXMgYmVpbmcgYWJsZSB0byBtYWludGFpbiB0aGUgcHJvamVjdCBsb25nIHRlcm0uCgpTZWUgW3RoaXMgYmxvZyBwb3N0IGZyb20gVGlkZWxpZnRdKGh0dHBzOi8vYmxvZy50aWRlbGlmdC5jb20vcGF5aW5nLW1haW50YWluZXJzLXRoZS1ob3d0bykgZm9yIG1vcmUgZGV0YWlscyBvbiBob3cgdG8gdGFsayB0byB5b3VyIGNvbXBhbnkgYWJvdXQgc3BvbnNvcmluZyBtYWludGFpbmVycyBvZiAoT3BlbiBTb3VyY2UpIHByb2plY3RzIHlvdSBkZXBlbmQgb24uCgpXZSBhcmUgY3VycmVudGx5IGdlbmVyb3VzbHkgc3BvbnNvcmVkIGJ5IHRoZSBmb2xsb3dpbmcgZm9sa3MsIGVhY2ggb2Ygd2hvbSBwcm92aWRlIHNwb25zb3JzaGlwIGZvciAxIGhvdXIgb2Ygd29yayBhIG1vbnRoOgoKPHAgYWxpZ249ImNlbnRlciI+Cgk8YSBocmVmPSJodHRwczovL3d3dy5kZXZ6ZXJvLmlvL2xwL2Rldi1lbnZpcm9ubWVudD91dG1fY2FtcGFpZ249Z2l0aHViJnV0bV9zb3VyY2U9b2FwaS1jb2RlZ2VuJTIwcmVwbyZ1dG1fbWVkaXVtPWdpdGh1YiUyMHNwb25zb3JzaGlwIj4KCQk8cGljdHVyZT4KCQkgIDxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIiBzcmNzZXQ9Ii5naXRodWIvc3BvbnNvcnMvZGV2emVyby1saWdodC5zdmciPgoJCSAgPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIgc3Jjc2V0PSIuZ2l0aHViL3Nwb25zb3JzL2Rldnplcm8tZGFyay5zdmciPgoJCSAgPGltZyBhbHQ9IkRldlplcm8gbG9nbyIgc3JjPSIuZ2l0aHViL3Nwb25zb3JzL2Rldnplcm8tZGFyay5zdmciIGhlaWdodD0iMTAwcHgiPgoJCTwvcGljdHVyZT4KCTwvYT4KPC9wPgoKPHAgYWxpZ249ImNlbnRlciI+Cgk8YSBocmVmPSJodHRwczovL3NwZWFrZWFzeS5jb20/dXRtX3NvdXJjZT1vYXBpLWNvZGVnZW4rcmVwbyZ1dG1fbWVkaXVtPWdpdGh1YitzcG9uc29yc2hpcCI+CgkJPHBpY3R1cmU+CgkJICA8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIgc3Jjc2V0PSIuZ2l0aHViL3Nwb25zb3JzL3NwZWFrZWFzeS1saWdodC5zdmciPgoJCSAgPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIgc3Jjc2V0PSIuZ2l0aHViL3Nwb25zb3JzL3NwZWFrZWFzeS1kYXJrLnN2ZyI+CgkJICA8aW1nIGFsdD0iU3BlYWtlYXN5IGxvZ28iIHNyYz0iLmdpdGh1Yi9zcG9uc29ycy9zcGVha2Vhc3ktZGFyay5zdmciIGhlaWdodD0iMTAwcHgiPgoJCTwvcGljdHVyZT4KCTwvYT4KPC9wPgoKPHAgYWxpZ249ImNlbnRlciI+Cgk8YSBocmVmPSJodHRwczovL2VsYXN0aWMuY28/dXRtX3NvdXJjZT1vYXBpLWNvZGVnZW4rcmVwbyZ1dG1fbWVkaXVtPWdpdGh1YitzcG9uc29yc2hpcCI+CgkJPHBpY3R1cmU+CgkJICA8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIgc3Jjc2V0PSIuZ2l0aHViL3Nwb25zb3JzL2VsYXN0aWMtbGlnaHQuc3ZnIj4KCQkgIDxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiIHNyY3NldD0iLmdpdGh1Yi9zcG9uc29ycy9lbGFzdGljLWRhcmsuc3ZnIj4KCQkgIDxpbWcgYWx0PSJFbGFzdGljIGxvZ28iIHNyYz0iLmdpdGh1Yi9zcG9uc29ycy9lbGFzdGljLWRhcmsuc3ZnIiBoZWlnaHQ9IjEwMHB4Ij4KCQk8L3BpY3R1cmU+Cgk8L2E+CjwvcD4KCihOb3RlIHRoYXQgdGhlIG9yZGVyIG9mIGFwcGVhcmFuY2UgdGhlIG9yZGVyIGluIHdoaWNoIHNwb25zb3JzaGlwIHdhcyByZWNlaXZlZCkK
+ readmeEtag: '"07857cbcb36fee4d25530b7ceb85180f8d07a6b1"'
+ readmeLastModified: Tue, 20 Aug 2024 11:45:25 GMT
repositoryId: 173009358
description: Generate Go client and server boilerplate from OpenAPI 3 specifications
created: '2019-02-27T23:59:59Z'
- updated: '2024-08-19T18:06:45Z'
+ updated: '2024-08-20T19:30:42Z'
language: Go
archived: false
- stars: 5800
+ stars: 5805
watchers: 37
- forks: 826
+ forks: 827
owner: oapi-codegen
logo: https://avatars.githubusercontent.com/u/142752710?v=4
license: Apache-2.0
- repoEtag: '"0d51012f6719defeca1f40870e3d5f5f36509a95567cf8dd707f1ab7ebab9a96"'
- repoLastModified: Mon, 19 Aug 2024 18:06:45 GMT
+ repoEtag: '"25f8acf6b87a5c85ca7c0af2e71b872157e2905d6cead6bb0768835302b31347"'
+ repoLastModified: Tue, 20 Aug 2024 19:30:42 GMT
foundInMaster: true
id: 770a221110cc4ef0e399089f5caf8694
oldLocations:
@@ -7581,17 +7581,17 @@
repositoryId: 161691324
description: Generate TypeScript types from OpenAPI 3 specs
created: '2018-12-13T20:28:01Z'
- updated: '2024-08-20T03:14:29Z'
+ updated: '2024-08-21T02:54:36Z'
language: TypeScript
archived: false
- stars: 5351
+ stars: 5363
watchers: 24
forks: 442
owner: openapi-ts
logo: https://avatars.githubusercontent.com/u/172838200?v=4
license: MIT
- repoEtag: '"27bee6465e7482d9391473e764e4a2cd971e911922d6b361ef2c788abd49ffd1"'
- repoLastModified: Tue, 20 Aug 2024 03:14:29 GMT
+ repoEtag: '"06387b23300b9d31bdeadecd3c751f4c736cb7dd90e5d5e4e7cd8f5d513a35e7"'
+ repoLastModified: Wed, 21 Aug 2024 02:54:36 GMT
foundInMaster: true
oldLocations:
- https://github.com/drwpow/openapi-typescript
@@ -7607,17 +7607,17 @@
repositoryId: 88701696
description: Knife4j is a set of Swagger2 and OpenAPI3 All-in-one enhancement solution
created: '2017-04-19T04:44:28Z'
- updated: '2024-08-19T10:15:55Z'
+ updated: '2024-08-20T05:02:40Z'
language: HTML
archived: false
- stars: 4038
+ stars: 4039
watchers: 75
forks: 612
owner: xiaoymin
logo: https://avatars.githubusercontent.com/u/7894406?v=4
license: Apache-2.0
- repoEtag: '"519683ca50f03167e8819df15c7a125aeb475815005952d02f2229d5965497ca"'
- repoLastModified: Mon, 19 Aug 2024 10:15:55 GMT
+ repoEtag: '"2d8bbccfcc0abb36179573068bbd4ce5e1a939a2df55f8f018750b82ae50dfe2"'
+ repoLastModified: Tue, 20 Aug 2024 05:02:40 GMT
category: SDK
foundInMaster: true
- source: openapi3 tags
@@ -7633,17 +7633,17 @@
🌐 Wikipedia for Web APIs. Directory of REST API definitions in OpenAPI
2.0/3.x format
created: '2015-02-22T19:58:12Z'
- updated: '2024-08-20T03:10:11Z'
+ updated: '2024-08-20T15:49:08Z'
language: null
archived: false
- stars: 3808
+ stars: 3810
watchers: 113
- forks: 569
+ forks: 570
owner: APIs-guru
logo: https://avatars.githubusercontent.com/u/10975548?v=4
license: CC0-1.0
- repoEtag: '"f2f014a8cff1622bf8e85191786e084fee5bbb88290474c53f25c66bd0c3868a"'
- repoLastModified: Tue, 20 Aug 2024 03:10:11 GMT
+ repoEtag: '"c283354c9ce49e9fb89140ea1b2da283948676e65860d5c6a35f5c48e0fc2084"'
+ repoLastModified: Tue, 20 Aug 2024 15:49:08 GMT
foundInMaster: true
category: SDK
id: 667f2aef78d9d19418fbd6c0a7835abb
@@ -7667,17 +7667,17 @@
repositoryId: 196475719
description: Library for OpenAPI 3 with spring-boot
created: '2019-07-11T23:08:20Z'
- updated: '2024-08-19T10:47:26Z'
+ updated: '2024-08-20T12:22:36Z'
language: Java
archived: false
- stars: 3225
+ stars: 3227
watchers: 42
forks: 487
owner: springdoc
logo: https://avatars.githubusercontent.com/u/52804136?v=4
license: Apache-2.0
- repoEtag: '"e95ccc59732fa13f738bc9d1fa586f50af1930be9366f50f940412c9e3b8eea3"'
- repoLastModified: Mon, 19 Aug 2024 10:47:26 GMT
+ repoEtag: '"0f55f74c0fd4be27868690f2a8759573fa133f04578e7408ca7825b5fb722192"'
+ repoLastModified: Tue, 20 Aug 2024 12:22:36 GMT
foundInMaster: true
id: 901410cec129651fcf7374c79f824f27
- source: openapi3 tags
@@ -7693,17 +7693,17 @@
Docker image with Uvicorn managed by Gunicorn for high-performance FastAPI
web applications in Python with performance auto-tuning.
created: '2019-01-04T17:33:29Z'
- updated: '2024-08-19T16:10:59Z'
+ updated: '2024-08-21T02:22:04Z'
language: Python
archived: false
- stars: 2671
+ stars: 2675
watchers: 25
forks: 330
owner: tiangolo
logo: https://avatars.githubusercontent.com/u/1326112?v=4
license: MIT
- repoEtag: '"dbfd58006d5f55c451072ef4b7f2979b6696b396474fa4b02997d9aeca319bb9"'
- repoLastModified: Mon, 19 Aug 2024 16:10:59 GMT
+ repoEtag: '"79a0097e6ab81ebf8dd6de6c671343ce65d1fffaa1f0f9eea3efdca8f1ae4ba6"'
+ repoLastModified: Wed, 21 Aug 2024 02:22:04 GMT
foundInMaster: true
category: Server Implementations
id: d0f3fc0bd35fcadacc8ed2c531780739
@@ -7722,7 +7722,7 @@
Javascript library to connect to swagger-enabled APIs via browser or
nodejs
created: '2012-02-16T00:08:43Z'
- updated: '2024-08-15T08:43:25Z'
+ updated: '2024-08-20T23:06:53Z'
language: JavaScript
archived: false
stars: 2606
@@ -7731,8 +7731,8 @@
owner: swagger-api
logo: https://avatars.githubusercontent.com/u/7658037?v=4
license: Apache-2.0
- repoEtag: '"5323907b2aacd626975bfb0f0a1f1babb64999e8624682b4482dad71822b9775"'
- repoLastModified: Thu, 15 Aug 2024 08:43:25 GMT
+ repoEtag: '"7914aa507ad09bcc4b4fe948c28514f874e00b039471b7caf9b9266bb4581580"'
+ repoLastModified: Tue, 20 Aug 2024 23:06:53 GMT
foundInMaster: true
category: Code Generators
id: 5f98b79464c0723b688cff46ee3500c6
@@ -7748,17 +7748,17 @@
repositoryId: 244234763
description: Sane and flexible OpenAPI 3 schema generation for Django REST framework.
created: '2020-03-01T22:36:54Z'
- updated: '2024-08-19T13:38:27Z'
+ updated: '2024-08-20T06:28:40Z'
language: Python
archived: false
- stars: 2268
+ stars: 2269
watchers: 11
forks: 252
owner: tfranzel
logo: https://avatars.githubusercontent.com/u/13507857?v=4
license: BSD-3-Clause
- repoEtag: '"7b1d47751a03839fd60f4d635952d49cf3a83720fb7256c00e8c08e5c7b289f4"'
- repoLastModified: Mon, 19 Aug 2024 13:38:27 GMT
+ repoEtag: '"96c3cb279af0d2fdf3d2a2ea46a5e8c4fb3aae56e2d711a14614310b80ed52e4"'
+ repoLastModified: Tue, 20 Aug 2024 06:28:40 GMT
foundInMaster: true
category: Server Implementations
id: 520f5c66c3e42a7b3fbface4f156c1dc
@@ -7782,17 +7782,17 @@
repositoryId: 203157084
description: Supercharge your API testing, catch bugs, and ensure compliance
created: '2019-08-19T11:13:01Z'
- updated: '2024-08-19T22:00:47Z'
+ updated: '2024-08-20T19:37:57Z'
language: Python
archived: false
stars: 2215
watchers: 20
- forks: 152
+ forks: 153
owner: schemathesis
logo: https://avatars.githubusercontent.com/u/70383271?v=4
license: MIT
- repoEtag: '"97fd3b7f84bbad1c72f052405f5840a221e9e922ea1ba6bc41b9a01f93ebe6b2"'
- repoLastModified: Mon, 19 Aug 2024 22:00:47 GMT
+ repoEtag: '"7d55f57ee77294cbe8f7ba246246f736c0a8984244c0cd4181b1e411bde4c6a3"'
+ repoLastModified: Tue, 20 Aug 2024 19:37:57 GMT
foundInMaster: true
id: f4032fb371a703acffa691c0f1239d45
oldLocations:
@@ -7811,17 +7811,17 @@
A fast serialization and validation library, with builtin support for
JSON, MessagePack, YAML, and TOML
created: '2021-01-26T02:53:57Z'
- updated: '2024-08-19T20:18:49Z'
+ updated: '2024-08-20T17:00:32Z'
language: Python
archived: false
- stars: 2187
+ stars: 2190
watchers: 19
forks: 62
owner: jcrist
logo: https://avatars.githubusercontent.com/u/2783717?v=4
license: BSD-3-Clause
- repoEtag: '"b314e107aca50f5a671593d4a9a737142e972bdc6531c5d31fd9376f05a93ed8"'
- repoLastModified: Mon, 19 Aug 2024 20:18:49 GMT
+ repoEtag: '"af1991acdd083634583f55306f77c9fa9b7d5cd1d6dd2b3394c292114f974e73"'
+ repoLastModified: Tue, 20 Aug 2024 17:00:32 GMT
category: Server Implementations
foundInMaster: true
- source: openapi3 tags
@@ -7837,17 +7837,17 @@
A compiler for APIs described by the OpenAPI Specification with plugins
for code generation and other API support tasks.
created: '2016-11-15T19:21:53Z'
- updated: '2024-08-19T06:31:42Z'
+ updated: '2024-08-20T05:59:13Z'
language: Go
archived: false
- stars: 2059
+ stars: 2060
watchers: 38
- forks: 243
+ forks: 242
owner: google
logo: https://avatars.githubusercontent.com/u/1342004?v=4
license: Apache-2.0
- repoEtag: '"e9cc14e257aa5e9a12f5d6d63445711043d91855a4a091b18f2aeffe2545ed98"'
- repoLastModified: Mon, 19 Aug 2024 06:31:42 GMT
+ repoEtag: '"c6ac05581804a8b4565eb3bb2d038e100fbf074dcb27ea9a6a6d1e34a4ba8c39"'
+ repoLastModified: Tue, 20 Aug 2024 05:59:13 GMT
foundInMaster: true
category: Converters
id: 46e070512676eb0fd196ee199e6a0b34
@@ -7864,7 +7864,7 @@
repositoryId: 165951750
description: RapiDoc -WebComponent for OpenAPI Spec
created: '2019-01-16T01:29:58Z'
- updated: '2024-08-19T15:39:38Z'
+ updated: '2024-08-20T12:27:46Z'
language: JavaScript
archived: false
stars: 1640
@@ -7873,8 +7873,8 @@
owner: rapi-doc
logo: https://avatars.githubusercontent.com/u/104180085?v=4
license: MIT
- repoEtag: '"98a8d30b7b7e9c1a5c7a46f3845e7bac82bad084f0fc630d49e097fc943543b4"'
- repoLastModified: Mon, 19 Aug 2024 15:39:38 GMT
+ repoEtag: '"c4693fd1b8247b736df7d7c46f664f4e0c40c1b6e189852620c10d5466fcd030"'
+ repoLastModified: Tue, 20 Aug 2024 12:27:46 GMT
foundInMaster: true
category:
- Documentation
@@ -7900,17 +7900,17 @@
repositoryId: 71986592
description: GUI / visual editor for creating and editing OpenAPI / Swagger definitions
created: '2016-10-26T09:15:55Z'
- updated: '2024-08-18T20:33:17Z'
+ updated: '2024-08-20T13:45:17Z'
language: JavaScript
archived: false
- stars: 1397
+ stars: 1399
watchers: 42
forks: 169
owner: Mermade
logo: https://avatars.githubusercontent.com/u/15950345?v=4
license: MIT
- repoEtag: '"8f525189284537d473e6f0c80ca83bd4fdc2410f5f5fb020dd0a958a801d0a27"'
- repoLastModified: Sun, 18 Aug 2024 20:33:17 GMT
+ repoEtag: '"90cc3e0a9bda806cfe7f9ee135ffbe5757c9a0ee37946f9021c834745d79e203"'
+ repoLastModified: Tue, 20 Aug 2024 13:45:17 GMT
foundInMaster: true
id: 71f1a528dc0a6366fb580d1b8c703ea8
- source: openapi3 tags
@@ -7926,17 +7926,17 @@
A node package wrapper for
https://github.com/OpenAPITools/openapi-generator
created: '2018-10-26T10:21:23Z'
- updated: '2024-08-20T02:56:13Z'
+ updated: '2024-08-20T22:26:52Z'
language: TypeScript
archived: false
- stars: 1379
+ stars: 1380
watchers: 18
forks: 141
owner: OpenAPITools
logo: https://avatars.githubusercontent.com/u/37325267?v=4
license: Apache-2.0
- repoEtag: '"af348533cfbed77e5b90aa619a3a4600cadf792b5fbed8ee989d7235b42ff93f"'
- repoLastModified: Tue, 20 Aug 2024 02:56:13 GMT
+ repoEtag: '"2219026c3f5fa353e1bac4e86ce72af9e1cdd4deec37645ec3b844533eb9a03d"'
+ repoLastModified: Tue, 20 Aug 2024 22:26:52 GMT
foundInMaster: true
category:
- Code Generators
@@ -7954,17 +7954,17 @@
repositoryId: 372032505
description: OpenAPI v3 code generator for go
created: '2021-05-29T17:25:48Z'
- updated: '2024-08-19T06:47:34Z'
+ updated: '2024-08-20T14:33:25Z'
language: Go
archived: false
- stars: 1251
+ stars: 1255
watchers: 16
forks: 73
owner: ogen-go
logo: https://avatars.githubusercontent.com/u/85122432?v=4
license: Apache-2.0
- repoEtag: '"eccbd4db80ffe9c3cf9c7033e6080b680d3a5e56cdf890001340cd442a7b5b28"'
- repoLastModified: Mon, 19 Aug 2024 06:47:34 GMT
+ repoEtag: '"3ae7d7b55f7f0614c403a33b0c43a0a7bff943d53c0a89830a1f2902ec4ff8e9"'
+ repoLastModified: Tue, 20 Aug 2024 14:33:25 GMT
category: Parsers
foundInMaster: true
- source: openapi3 tags
@@ -7980,7 +7980,7 @@
A pluggable API specification generator. Currently supports the OpenAPI
Specification (f.k.a. the Swagger specification)..
created: '2014-10-18T23:48:49Z'
- updated: '2024-08-12T21:48:25Z'
+ updated: '2024-08-20T16:01:42Z'
language: Python
archived: false
stars: 1163
@@ -7989,8 +7989,8 @@
owner: marshmallow-code
logo: https://avatars.githubusercontent.com/u/10334301?v=4
license: MIT
- repoEtag: '"91ddb4c53768c541615c30bb6789eb99582ff0b2a0abd618730fbea6cf38b807"'
- repoLastModified: Mon, 12 Aug 2024 21:48:25 GMT
+ repoEtag: '"16162ef6440c02de6bc68ab16ff99d415938528e0e474757e1042a395b580e06"'
+ repoLastModified: Tue, 20 Aug 2024 16:01:42 GMT
foundInMaster: true
category: Parsers
id: c1528764f05dd585ca47886dd6dabb86
@@ -8058,17 +8058,17 @@
repositoryId: 741524414
description: ✨ Turn your OpenAPI specification into a beautiful TypeScript client
created: '2024-01-10T15:19:25Z'
- updated: '2024-08-19T20:00:21Z'
+ updated: '2024-08-21T03:22:43Z'
language: TypeScript
archived: false
- stars: 870
+ stars: 885
watchers: 6
forks: 69
owner: hey-api
logo: https://avatars.githubusercontent.com/u/164436240?v=4
license: MIT
- repoEtag: '"c5276ee8c6bdfb1ca65fb52a1aa2eda659d10eb5bfe9587a1e4e5a27b08640d8"'
- repoLastModified: Mon, 19 Aug 2024 20:00:21 GMT
+ repoEtag: '"51554c8fe3514a674a430fe935cd7d0ab9be193770c1a581948949e10a06a149"'
+ repoLastModified: Wed, 21 Aug 2024 03:22:43 GMT
category: SDK
foundInMaster: true
- source: openapi3 tags
@@ -8118,7 +8118,7 @@
owner: OpenAPITools
logo: https://avatars.githubusercontent.com/u/37325267?v=4
license: Apache-2.0
- repoEtag: '"9ddaa09e1821f0858d92a61408034a15686c4f138e198e79a1ac679760af88ed"'
+ repoEtag: '"1800ed870d3a730aaa7d0d3be8f98158e561ee37dba304b3d7dfeacdc80b5318"'
repoLastModified: Mon, 19 Aug 2024 12:07:40 GMT
foundInMaster: true
category: Parsers
@@ -8163,17 +8163,17 @@
repositoryId: 71464935
description: Convert Swagger 2.0 definitions to OpenAPI 3.0 and resolve/validate/lint
created: '2016-10-20T13:17:42Z'
- updated: '2024-08-10T03:02:19Z'
+ updated: '2024-08-20T10:06:53Z'
language: JavaScript
archived: false
- stars: 701
+ stars: 702
watchers: 15
forks: 129
owner: Mermade
logo: https://avatars.githubusercontent.com/u/15950345?v=4
license: BSD-3-Clause
- repoEtag: '"38842b937aaf70ba32b52c6dfcd86552fc5da1d47192272c84955719fa57f963"'
- repoLastModified: Sat, 10 Aug 2024 03:02:19 GMT
+ repoEtag: '"1bc6a09a62a5d38c00c5711a180f6629ee4ec4dd10531d3e25fe9f78642da9d8"'
+ repoLastModified: Tue, 20 Aug 2024 10:06:53 GMT
foundInMaster: true
category:
- Converters
@@ -8325,17 +8325,17 @@
repositoryId: 766082951
description: Terminal UI to list, browse and run APIs defined with openapi spec.
created: '2024-03-02T09:42:10Z'
- updated: '2024-08-17T04:25:05Z'
+ updated: '2024-08-20T10:36:51Z'
language: Rust
archived: false
- stars: 608
+ stars: 609
watchers: 5
forks: 15
owner: zaghaghi
logo: https://avatars.githubusercontent.com/u/111259?v=4
license: MIT
- repoEtag: '"e7a62d819dc83d312287fa819395d4066b72966fa2b489803f068ebcda11558b"'
- repoLastModified: Sat, 17 Aug 2024 04:25:05 GMT
+ repoEtag: '"138bb487e186860421640087708b311ba07033c1f1a466c905ed448c329c2948"'
+ repoLastModified: Tue, 20 Aug 2024 10:36:51 GMT
category: Parsers
foundInMaster: true
- source: openapi3 tags
@@ -8349,17 +8349,17 @@
repositoryId: 80230875
description: 🚂 A Yeoman generator for Express.js based 12-factor apps and apis
created: '2017-01-27T17:45:14Z'
- updated: '2024-07-27T19:07:59Z'
+ updated: '2024-08-20T22:38:33Z'
language: JavaScript
archived: false
- stars: 592
+ stars: 593
watchers: 23
forks: 82
owner: cdimascio
logo: https://avatars.githubusercontent.com/u/4706618?v=4
license: MIT
- repoEtag: '"e92c675dae256b451a7f7bf4fd5f0222b08287f239a8a1e4cdbc7ee27d1775a5"'
- repoLastModified: Sat, 27 Jul 2024 19:07:59 GMT
+ repoEtag: '"a92eab1f66a686db115b3973d1e63af6d1986d9e89dc6bebeb9be0b99488f388"'
+ repoLastModified: Tue, 20 Aug 2024 22:38:33 GMT
foundInMaster: true
category: Description Validators
id: a4618ff5d41070e7337f3e3d8c2805d7
@@ -8406,11 +8406,11 @@
archived: false
stars: 493
watchers: 9
- forks: 81
+ forks: 82
owner: cloud-annotations
logo: https://avatars.githubusercontent.com/u/47490031?v=4
license: MIT
- repoEtag: '"aec85ef374ed2a7972a231f639441f72c27e8792c4e0112180f3c78995462b2c"'
+ repoEtag: '"825afc30032412d4c66b6932756874ba3bf705a15a4f1d6bf0be4da57d3ff4bf"'
repoLastModified: Wed, 14 Aug 2024 19:00:27 GMT
foundInMaster: true
category: SDK
@@ -8427,16 +8427,16 @@
repositoryId: 182983428
description: Generate TypeScript clients to tap into OpenAPI servers
created: '2019-04-23T09:40:41Z'
- updated: '2024-08-19T06:56:04Z'
+ updated: '2024-08-20T19:25:50Z'
language: TypeScript
archived: false
- stars: 486
+ stars: 488
watchers: 7
forks: 78
owner: oazapfts
logo: https://avatars.githubusercontent.com/u/119607625?v=4
- repoEtag: '"46fb59732a4a6fd75185fb15b04cfa22dc85c97f16cd821ada26f1f51356ba7b"'
- repoLastModified: Mon, 19 Aug 2024 06:56:04 GMT
+ repoEtag: '"69c68438d8663941ca680c97d5c32cdd4f5314ebc927874978fa6e7ea7ce552e"'
+ repoLastModified: Tue, 20 Aug 2024 19:25:50 GMT
category: Parsers
foundInMaster: true
oldLocations:
@@ -8480,16 +8480,16 @@
repositoryId: 417437020
description: A tool for generating code base on an OpenAPI schema.
created: '2021-10-15T09:08:51Z'
- updated: '2024-08-19T06:17:18Z'
+ updated: '2024-08-20T19:40:07Z'
language: TypeScript
archived: false
- stars: 481
+ stars: 483
watchers: 6
forks: 61
owner: fabien0102
logo: https://avatars.githubusercontent.com/u/1761469?v=4
- repoEtag: '"cca484ec330c61faf96eb35c9a7f472f0152ce6664258bffa7497ee398d8ca52"'
- repoLastModified: Mon, 19 Aug 2024 06:17:18 GMT
+ repoEtag: '"f8eb2ad250a07d00ecdfbbe9fcc9f35cfbb29a172caad5cf29d625e3cb2dd1ff"'
+ repoLastModified: Tue, 20 Aug 2024 19:40:07 GMT
category: Testing
foundInMaster: true
- source: openapi3 tags
@@ -8506,17 +8506,17 @@
Query, provision and operate Cloud and SaaS resources and APIs using an
extensible SQL based framework
created: '2022-01-03T08:20:06Z'
- updated: '2024-08-19T22:11:58Z'
+ updated: '2024-08-20T06:08:54Z'
language: Go
archived: false
- stars: 471
+ stars: 472
watchers: 11
forks: 43
owner: stackql
logo: https://avatars.githubusercontent.com/u/95105302?v=4
license: MIT
- repoEtag: '"b16fca79bff1e17b2c0cc81e65aa5040de602ccb18fbbe6b2618735bc6972f5a"'
- repoLastModified: Mon, 19 Aug 2024 22:11:58 GMT
+ repoEtag: '"ef1866d3a6f2d6ba8722bc6cf4b39de560fcdf5908f1e3a56537f2962304e108"'
+ repoLastModified: Tue, 20 Aug 2024 06:08:54 GMT
category: Server Implementations
foundInMaster: true
- source: openapi3 tags
@@ -8536,17 +8536,17 @@
response status codes and parameters. At the end, it generates the .json
file containing the Swagger format specification.
created: '2020-04-13T01:37:33Z'
- updated: '2024-08-17T19:52:00Z'
+ updated: '2024-08-20T09:33:05Z'
language: JavaScript
archived: false
- stars: 454
+ stars: 455
watchers: 5
forks: 62
owner: swagger-autogen
logo: https://avatars.githubusercontent.com/u/137681762?v=4
license: MIT
- repoEtag: '"899b8e6fb80feddf043668b59e30cc4cc8a13c8755cc78d232a6510fce574855"'
- repoLastModified: Sat, 17 Aug 2024 19:52:00 GMT
+ repoEtag: '"24dcdec313c537369e95ec7339d1f0e149b71060d750e3a7e573bd79a1d15e68"'
+ repoLastModified: Tue, 20 Aug 2024 09:33:05 GMT
category: Parsers
foundInMaster: true
oldLocations:
@@ -8693,17 +8693,17 @@
repositoryId: 104184487
description: SqlAlchemy Flask-Restful Swagger Json:API OpenAPI
created: '2017-09-20T07:56:55Z'
- updated: '2024-08-02T04:10:02Z'
+ updated: '2024-08-21T03:23:01Z'
language: Python
archived: false
- stars: 404
+ stars: 405
watchers: 14
forks: 72
owner: thomaxxl
logo: https://avatars.githubusercontent.com/u/4190750?v=4
license: GPL-3.0
- repoEtag: '"92966239e48d24245e5c3df13a9be1bc2b0164cc61bdcaf239cfbb1b1af89393"'
- repoLastModified: Fri, 02 Aug 2024 04:10:02 GMT
+ repoEtag: '"dec93c8deeee91f01aa7c28908437603babb2b3ed51803d43fef6357790a7326"'
+ repoLastModified: Wed, 21 Aug 2024 03:23:01 GMT
foundInMaster: true
category: Server Implementations
id: 1ccc4d969c768f04576d518679fb6489
@@ -8830,17 +8830,17 @@
repositoryId: 479982630
description: Clean Architecture Example using FastAPI framework
created: '2022-04-10T10:23:51Z'
- updated: '2024-08-19T08:11:05Z'
+ updated: '2024-08-21T03:02:30Z'
language: Python
archived: false
- stars: 353
+ stars: 355
watchers: 4
forks: 51
owner: 0xTheProDev
logo: https://avatars.githubusercontent.com/u/14367736?v=4
license: MIT
- repoEtag: '"e131c8639ede644c2cf757b4fa366c937959b581bef9c70d6b7d19b56920c5fc"'
- repoLastModified: Mon, 19 Aug 2024 08:11:05 GMT
+ repoEtag: '"2da3d0df8d4e8e0891438ded749bba06a0e9978b35ffd21fdde0bf40cb51ed45"'
+ repoLastModified: Wed, 21 Aug 2024 03:02:30 GMT
category: Server Implementations
foundInMaster: true
oldLocations:
@@ -8930,7 +8930,7 @@
owner: ethereum
logo: https://avatars.githubusercontent.com/u/6250754?v=4
license: CC0-1.0
- repoEtag: '"04c79cc284ae67d9fd5d6d292ce993b04e0a55aa0d978a7cec99216c45872507"'
+ repoEtag: '"e74a2b587d1d4b843bd6d26e5a8db5bd03e429837ac5d98a286476baa2843036"'
repoLastModified: Mon, 19 Aug 2024 11:05:01 GMT
foundInMaster: true
category:
@@ -8978,7 +8978,7 @@
Openapi-core is a Python library that adds client-side and server-side
support for the OpenAPI v3.0 and OpenAPI v3.1 specification.
created: '2017-09-20T10:25:35Z'
- updated: '2024-08-20T01:36:31Z'
+ updated: '2024-08-20T10:15:11Z'
language: Python
archived: false
stars: 296
@@ -8987,8 +8987,8 @@
owner: python-openapi
logo: https://avatars.githubusercontent.com/u/126442889?v=4
license: BSD-3-Clause
- repoEtag: '"eb1416aebb6b6b80ea399f22887a7737e47c62a3cdd6f6b95abebaadb49d5c1d"'
- repoLastModified: Tue, 20 Aug 2024 01:36:31 GMT
+ repoEtag: '"b70265f010d164a854d686ab6aeb798ea4079ddcbf6af8c1ff5b4be85ee46a3c"'
+ repoLastModified: Tue, 20 Aug 2024 10:15:11 GMT
category:
- Data Validators
- Parsers
@@ -9035,17 +9035,17 @@
A library for generating typed models based on inputs such as AsyncAPI,
OpenAPI, and JSON Schema documents with high customization
created: '2021-01-21T12:27:51Z'
- updated: '2024-08-16T13:34:26Z'
+ updated: '2024-08-20T17:46:23Z'
language: TypeScript
archived: false
- stars: 289
+ stars: 290
watchers: 7
forks: 170
owner: asyncapi
logo: https://avatars.githubusercontent.com/u/16401334?v=4
license: Apache-2.0
- repoEtag: '"d63c09c05232d6cf8af4046c9cb5085e9aa324d44274a7e16aae6b9f05fa948b"'
- repoLastModified: Fri, 16 Aug 2024 13:34:26 GMT
+ repoEtag: '"4d8618a8e65e04b4b97a638c4354201452dee8217f4a1d36882635a47126c5e6"'
+ repoLastModified: Tue, 20 Aug 2024 17:46:23 GMT
foundInMaster: true
- source: openapi3 tags
repository: https://github.com/abersheeran/kui
@@ -9128,7 +9128,7 @@
owner: dymmond
logo: https://avatars.githubusercontent.com/u/65982469?v=4
license: MIT
- repoEtag: '"69bf50437e4124fc0a426fbfb7733353c6d68642ef7de2bd2f7047736079a43d"'
+ repoEtag: '"171d82dc8c2e4236a1b58c42df4f67ba82774a36ceaa6b484fc5a1737b051ac2"'
repoLastModified: Fri, 16 Aug 2024 08:18:28 GMT
category: Server Implementations
foundInMaster: true
@@ -9184,7 +9184,7 @@
owner: swaggest
logo: https://avatars.githubusercontent.com/u/19609628?v=4
license: MIT
- repoEtag: '"9ee31119da20737bf8fdf69e9f9608b9397e855a60adf92af63a841645841351"'
+ repoEtag: '"817147b9a6ff0df9202011a40aa5b2499431353aecce024f18973a31a143bf99"'
repoLastModified: Tue, 13 Aug 2024 23:28:58 GMT
foundInMaster: true
id: 042e78fafa5f6cb0dbca01c64778ab3f
@@ -9311,17 +9311,17 @@
repositoryId: 628179878
description: Use Zod Schemas to create OpenAPI v3.x documentation
created: '2023-04-15T06:28:51Z'
- updated: '2024-08-18T08:35:05Z'
+ updated: '2024-08-20T23:27:52Z'
language: TypeScript
archived: false
- stars: 237
+ stars: 240
watchers: 2
forks: 11
owner: samchungy
logo: https://avatars.githubusercontent.com/u/18017094?v=4
license: MIT
- repoEtag: '"48e83f8395a128bbb7a674bdff49b8e0225cf9176c6986ca8ab0881cc80c77c2"'
- repoLastModified: Sun, 18 Aug 2024 08:35:05 GMT
+ repoEtag: '"bc0515bd250265b9eb3d25cbc05470f45395d0f7362c4ab599582f5b51158a59"'
+ repoLastModified: Tue, 20 Aug 2024 23:27:52 GMT
category: Parsers
foundInMaster: true
- source: openapi3 tags
@@ -9438,17 +9438,17 @@
repositoryId: 266211454
description: Swagger OpenAPI 3.x generator
created: '2020-05-22T21:31:03Z'
- updated: '2024-07-18T16:29:58Z'
+ updated: '2024-08-20T04:55:16Z'
language: JavaScript
archived: false
- stars: 212
+ stars: 213
watchers: 4
forks: 30
owner: BRIKEV
logo: https://avatars.githubusercontent.com/u/59850028?v=4
license: MIT
- repoEtag: '"583a01ccf5af95e5beb8034eb791e13741ac70690507d8b1568844de15e86f1f"'
- repoLastModified: Thu, 18 Jul 2024 16:29:58 GMT
+ repoEtag: '"0aaa1e0c2737b658af5c2df18669b631fae56580d0e43102ab3dda03d668718e"'
+ repoLastModified: Tue, 20 Aug 2024 04:55:16 GMT
foundInMaster: true
category: Testing
id: af37c15464a7e49379863279ecd6694b
@@ -9524,7 +9524,7 @@
owner: microsoft
logo: https://avatars.githubusercontent.com/u/6154722?v=4
license: MIT
- repoEtag: '"3783e05ebde923e969656f5c1a16eb6b0f300d765df69030c5bb933742c98d46"'
+ repoEtag: '"776d67f8ca401334ed46b0c134c9d85eee1c2fe41e9d6e99bab3b09c13a92333"'
repoLastModified: Fri, 16 Aug 2024 05:10:21 GMT
foundInMaster: true
category:
@@ -9608,17 +9608,17 @@
A plugin for the Fastify webserver to autogenerate a Fastify
configuration based on a OpenApi(v2/v3) specification.
created: '2018-06-30T19:02:58Z'
- updated: '2024-08-17T17:08:22Z'
+ updated: '2024-08-20T14:59:53Z'
language: JavaScript
archived: false
- stars: 198
+ stars: 199
watchers: 6
forks: 34
owner: seriousme
logo: https://avatars.githubusercontent.com/u/3322396?v=4
license: MIT
- repoEtag: '"a5a712b0b0b6acb7106b9b4b859c9c94329849a44fbe0156bf35bed9768ac6ea"'
- repoLastModified: Sat, 17 Aug 2024 17:08:22 GMT
+ repoEtag: '"27c357e7dd12b6129cedd1c642d6d6a956610e3cecde985e01557af729f976d6"'
+ repoLastModified: Tue, 20 Aug 2024 14:59:53 GMT
foundInMaster: true
category:
- Data Validators
@@ -9635,17 +9635,17 @@
repositoryId: 321679344
description: TypeScript code generator via OpenAPI scheme.
created: '2020-12-15T13:40:09Z'
- updated: '2024-07-11T02:26:37Z'
+ updated: '2024-08-20T19:35:49Z'
language: TypeScript
archived: false
- stars: 193
+ stars: 194
watchers: 5
forks: 16
owner: Himenon
logo: https://avatars.githubusercontent.com/u/6715229?v=4
license: MIT
- repoEtag: '"2bbebb8758b900c63822e50ab621fbe335d558f42c906e7f3fe3237eab7d5686"'
- repoLastModified: Thu, 11 Jul 2024 02:26:37 GMT
+ repoEtag: '"5909205942a47b3e8e5b5c8466aeacb61c63848d7dff32286d70689af1328041"'
+ repoLastModified: Tue, 20 Aug 2024 19:35:49 GMT
foundInMaster: true
category: SDK
id: fda6dd851e4578e64350df218e79cdaa
@@ -9829,7 +9829,7 @@
repositoryId: 543052826
description: Speakeasy CLI - Enterprise developer experience for your API
created: '2022-09-29T10:13:15Z'
- updated: '2024-08-19T14:15:11Z'
+ updated: '2024-08-20T16:22:14Z'
language: JavaScript
archived: false
stars: 173
@@ -9838,8 +9838,8 @@
owner: speakeasy-api
logo: https://avatars.githubusercontent.com/u/91446104?v=4
license: NOASSERTION
- repoEtag: '"aff5b394868d3703cfc154f8cf7a111c95fd2a6f876c4e226c2a6bf33a63de56"'
- repoLastModified: Mon, 19 Aug 2024 14:15:11 GMT
+ repoEtag: '"cc2984288a4f631b33b86ac83069bb83929369761f79a6fa85c804d7322b2ca1"'
+ repoLastModified: Tue, 20 Aug 2024 16:22:14 GMT
category: Parsers
foundInMaster: true
- source: openapi3 tags
@@ -9854,17 +9854,17 @@
repositoryId: 673944158
description: This repository contains the specification files for PayPal REST APIs.
created: '2023-08-02T19:26:26Z'
- updated: '2024-08-14T18:32:09Z'
+ updated: '2024-08-20T22:11:15Z'
language: null
archived: false
- stars: 172
+ stars: 173
watchers: 19
forks: 123
owner: paypal
logo: https://avatars.githubusercontent.com/u/476675?v=4
license: Apache-2.0
- repoEtag: '"133ac5c5cf8e9c9a4f1a59c92818ba2569c4938769cd4f210dd59b73e1725543"'
- repoLastModified: Wed, 14 Aug 2024 18:32:09 GMT
+ repoEtag: '"00b5d53f217f8e6f6fa567ea5544807959b0d6de26a94bd20484e98e614e19ba"'
+ repoLastModified: Tue, 20 Aug 2024 22:11:15 GMT
category: Code Generators
foundInMaster: true
- source: openapi3 tags
@@ -9906,7 +9906,7 @@
A tool for generating Refit interfaces and contracts from OpenAPI
specifications
created: '2023-02-07T23:18:12Z'
- updated: '2024-08-17T05:52:56Z'
+ updated: '2024-08-20T12:40:00Z'
language: C#
archived: false
stars: 170
@@ -9915,8 +9915,8 @@
owner: christianhelle
logo: https://avatars.githubusercontent.com/u/710400?v=4
license: MIT
- repoEtag: '"28b7da540f82899c728c6a598e79e0a01671bf042a9ef8822ae05c1a3c8f5dd2"'
- repoLastModified: Sat, 17 Aug 2024 05:52:56 GMT
+ repoEtag: '"8360edfeadb1f340cd9e075b3112a6b8579ce97259c2e14537d2891ee878b3b1"'
+ repoLastModified: Tue, 20 Aug 2024 12:40:00 GMT
category: Parsers
foundInMaster: true
- source: openapi3 tags
@@ -9992,7 +9992,7 @@
owner: christianhelle
logo: https://avatars.githubusercontent.com/u/710400?v=4
license: GPL-3.0
- repoEtag: '"875944129d6b3f78d1f53b6327c68a90407c2dbd45133b3e7504f1413c034d77"'
+ repoEtag: '"c8be64c41b2d67c60592864e3c8b71a8302d18548fd853471e38fcefe28eda9e"'
repoLastModified: Mon, 19 Aug 2024 12:40:27 GMT
category: SDK
foundInMaster: true
@@ -10062,17 +10062,17 @@
repositoryId: 294444776
description: OpenAPI starter repository
created: '2020-09-10T15:11:31Z'
- updated: '2024-08-17T08:26:55Z'
+ updated: '2024-08-20T06:06:11Z'
language: C#
archived: false
- stars: 151
+ stars: 152
watchers: 19
forks: 112
owner: Redocly
logo: https://avatars.githubusercontent.com/u/32099856?v=4
license: MIT
- repoEtag: '"294abdbafa8d5ac4f8ebf001d80c374cbadcec491717c043225d0d685ae73b3e"'
- repoLastModified: Sat, 17 Aug 2024 08:26:55 GMT
+ repoEtag: '"b011e589363e5c598a74e740bb04455c86541d5a4dee53626e8a2ada31e68692"'
+ repoLastModified: Tue, 20 Aug 2024 06:06:11 GMT
foundInMaster: true
v3_1: true
category: Parsers
@@ -10206,7 +10206,7 @@
owner: netwo-io
logo: https://avatars.githubusercontent.com/u/64151169?v=4
license: MIT
- repoEtag: '"fe941cfb73fa814cd12a97a8e269600df791a5b187ec8265d6e966e6f2c0fc10"'
+ repoEtag: '"1840a49ccf3d437483a6a4bb028744c4d631a620244eba22a464a3c019439354"'
repoLastModified: Tue, 13 Aug 2024 09:19:48 GMT
category: Parsers
foundInMaster: true
@@ -10225,17 +10225,17 @@
Autogenered docs, Zod - BullMQ - Nodemailer - Docker - MongoDB (Mongoose)
- Socket.io
created: '2024-08-11T02:19:59Z'
- updated: '2024-08-19T18:36:53Z'
+ updated: '2024-08-21T00:34:52Z'
language: TypeScript
archived: false
- stars: 130
+ stars: 137
watchers: 1
- forks: 23
+ forks: 24
owner: muneebhashone
logo: https://avatars.githubusercontent.com/u/88892379?v=4
license: MIT
- repoEtag: '"d681e1790be3321755d81e74b726c8e00cfd46434b45549362587231be150e7c"'
- repoLastModified: Mon, 19 Aug 2024 18:36:53 GMT
+ repoEtag: '"aa050ee9ad04035beb3e5c22681887ae1cc95b87b5483f356c0fae4215bea3dc"'
+ repoLastModified: Wed, 21 Aug 2024 00:34:52 GMT
category: Server Implementations
foundInMaster: true
- source: openapi3 tags
@@ -10442,17 +10442,17 @@
:key: Sample Spring boot application secured using JWT auth in custom
header(X-Auth-Token).
created: '2016-02-07T11:17:36Z'
- updated: '2024-07-17T15:49:28Z'
+ updated: '2024-08-20T12:57:24Z'
language: Java
archived: false
- stars: 109
+ stars: 110
watchers: 7
forks: 30
owner: Nasruddin
logo: https://avatars.githubusercontent.com/u/2290767?v=4
license: MIT
- repoEtag: '"ee454d17a562d0896a5eaed427bf7a8aae5fb74d783ab4c604eefcc1fd9c99eb"'
- repoLastModified: Wed, 17 Jul 2024 15:49:28 GMT
+ repoEtag: '"09c11fd002f526dc95652c6a8f1781a9d6cdc26449f8a10553ec4990604457eb"'
+ repoLastModified: Tue, 20 Aug 2024 12:57:24 GMT
foundInMaster: true
category: Server Implementations
id: bb56c80ba4c7463e50ddc2959f3113f1
@@ -10552,7 +10552,7 @@
repositoryId: 264196717
description: The OpenAPI v3 specification for DigitalOcean's public API.
created: '2020-05-15T13:10:36Z'
- updated: '2024-08-13T13:35:13Z'
+ updated: '2024-08-20T16:39:07Z'
language: JavaScript
archived: false
stars: 106
@@ -10561,8 +10561,8 @@
owner: digitalocean
logo: https://avatars.githubusercontent.com/u/4650108?v=4
license: Apache-2.0
- repoEtag: '"ab6566478c284a7b57e4d7296ee30fb95a979f9ecdaa3427215bf457257e83b1"'
- repoLastModified: Tue, 13 Aug 2024 13:35:13 GMT
+ repoEtag: '"6a69f9154ffb18824cf9126aebe80e2ed5fb92563b3234362e3fd5b3dddddcbc"'
+ repoLastModified: Tue, 20 Aug 2024 16:39:07 GMT
foundInMaster: true
category:
- Testing
@@ -10609,7 +10609,7 @@
Simple and efficient HTTP mock server with specification in yaml, edn or
OpenAPI
created: '2022-02-23T10:49:57Z'
- updated: '2024-08-12T20:43:05Z'
+ updated: '2024-08-20T20:13:48Z'
language: Clojure
archived: false
stars: 105
@@ -10618,8 +10618,8 @@
owner: moclojer
logo: https://avatars.githubusercontent.com/u/103039458?v=4
license: MIT
- repoEtag: '"6226355d64ce09ac8b333d68cb46863691f5611c538a605483dcbfce4cef86b6"'
- repoLastModified: Mon, 12 Aug 2024 20:43:05 GMT
+ repoEtag: '"dd386c7a92c2dcbc16b1d6a0cb7c2e79aac1327f8d91ec63e84532189c2e390b"'
+ repoLastModified: Tue, 20 Aug 2024 20:13:48 GMT
category: Testing
foundInMaster: true
oldLocations:
@@ -10672,17 +10672,17 @@
repositoryId: 218804581
description: OpenAPI 3 parser, JSON schema and request validator.
created: '2019-10-31T15:59:35Z'
- updated: '2024-04-11T10:01:36Z'
+ updated: '2024-08-20T05:33:44Z'
language: Java
archived: true
- stars: 103
+ stars: 102
watchers: 5
forks: 43
owner: openapi4j
logo: https://avatars.githubusercontent.com/u/39759775?v=4
license: Apache-2.0
- repoEtag: '"d60c5ee3c5d9be98ae85e92653730a1088b43dcec1f68338bfbfc9f90a8e73eb"'
- repoLastModified: Thu, 11 Apr 2024 10:01:36 GMT
+ repoEtag: '"707cf4a36732540d9a62afa97721215e24e1ba74d85bc851f4fd2d477a90fb11"'
+ repoLastModified: Tue, 20 Aug 2024 05:33:44 GMT
foundInMaster: true
id: c5b32630ea7cd375c61c41563e2a2f09
- source: openapi3 tags
@@ -10724,7 +10724,7 @@
A collection of open-source and commercial tools for creating your APIs
with OpenAPI - Sourced from and published for the community
created: '2022-01-14T19:24:14Z'
- updated: '2024-08-19T03:28:02Z'
+ updated: '2024-08-20T03:36:53Z'
language: JavaScript
archived: false
stars: 96
@@ -10732,8 +10732,8 @@
forks: 26
owner: OAI
logo: https://avatars.githubusercontent.com/u/16343502?v=4
- repoEtag: '"7f1e8a019f4b7ae8246f0a602801e0e5430cfc6bc4dcd0be382cf5672162d7a9"'
- repoLastModified: Mon, 19 Aug 2024 03:28:02 GMT
+ repoEtag: '"f57367a84ab89f056995d048cd3b1c293ce256b4e040b1a74086e8153341f788"'
+ repoLastModified: Tue, 20 Aug 2024 03:36:53 GMT
category: Server Implementations
foundInMaster: true
oldLocations:
@@ -10973,11 +10973,11 @@
archived: false
stars: 82
watchers: 10
- forks: 41
+ forks: 42
owner: jellyfin
logo: https://avatars.githubusercontent.com/u/45698031?v=4
license: LGPL-3.0
- repoEtag: '"e2269c05298a099abe8bfd2888d613d34c7f7af14aeca26c4aa2743ba3d90ac5"'
+ repoEtag: '"f54fa4758f7cc1d1545820b23e933365d793eea1d9e683b2ed99c80677547f1a"'
repoLastModified: Sat, 10 Aug 2024 03:48:58 GMT
foundInMaster: true
category: Testing
@@ -11162,7 +11162,7 @@
owner: christianhelle
logo: https://avatars.githubusercontent.com/u/710400?v=4
license: MIT
- repoEtag: '"a336c50a7a2f2d6484ec62ae929553f0c1c9e8c94b7d55a0042079c53cc9a56e"'
+ repoEtag: '"7fbcb0f261684472f2c55c87496b955ae7a402be66fe13b06cff4415582cacd8"'
repoLastModified: Sat, 17 Aug 2024 06:24:09 GMT
category: Parsers
foundInMaster: true
@@ -11211,7 +11211,7 @@
repositoryId: 249737066
description: Semantic parser for API specifications
created: '2020-03-24T14:55:51Z'
- updated: '2024-08-19T23:27:56Z'
+ updated: '2024-08-20T23:53:56Z'
language: TypeScript
archived: false
stars: 67
@@ -11219,8 +11219,8 @@
forks: 15
owner: swagger-api
logo: https://avatars.githubusercontent.com/u/7658037?v=4
- repoEtag: '"4b17160a3740e92ec2113e75945f93e23fe5ecc7e09359e24f896fc59c24874e"'
- repoLastModified: Mon, 19 Aug 2024 23:27:56 GMT
+ repoEtag: '"cd18a2899cbef3b0b2e747cdbeb65d46dcbaa5ec04137ba1c9fedd558849eead"'
+ repoLastModified: Tue, 20 Aug 2024 23:53:56 GMT
category: Parsers
foundInMaster: true
- source: openapi3 tags
@@ -11403,7 +11403,7 @@
forks: 23
owner: italia
logo: https://avatars.githubusercontent.com/u/15377824?v=4
- repoEtag: '"2f21e06d52942500d8e72f1af4eb4a338107e9c81622d493b3ffe8090dc96f8a"'
+ repoEtag: '"73923eb3e25b472361117e755ef3d5c697174d4218886e0dcf1128f35388d715"'
repoLastModified: Tue, 23 Jul 2024 12:45:07 GMT
foundInMaster: true
category: Description Validators
@@ -11476,10 +11476,10 @@
archived: false
stars: 56
watchers: 5
- forks: 90
+ forks: 89
owner: eazybytes
logo: https://avatars.githubusercontent.com/u/79041235?v=4
- repoEtag: '"d15cd2045823108bf1bfd93fcd7f3d14bdd364de80880942b0cd269a976634d1"'
+ repoEtag: '"a11ef607c23e15666e05d7996abdbf75dd04f4d851f662dd9c66ac03eab326f7"'
repoLastModified: Thu, 01 Aug 2024 14:35:13 GMT
category: Parsers
foundInMaster: true
@@ -11603,17 +11603,17 @@
repositoryId: 699872484
description: Generate SDKs and docs for your API
created: '2023-10-03T14:04:44Z'
- updated: '2024-08-14T13:47:11Z'
+ updated: '2024-08-20T03:52:05Z'
language: Rust
archived: false
- stars: 52
+ stars: 53
watchers: 4
forks: 2
owner: Sideko-Inc
logo: https://avatars.githubusercontent.com/u/122366043?v=4
license: NOASSERTION
- repoEtag: '"c298e67f07fd2b6961e054e3bd93f18aff58d83017bb295cb4b22b6fc264f08c"'
- repoLastModified: Wed, 14 Aug 2024 13:47:11 GMT
+ repoEtag: '"897761a40ad91dc75b706a913026b536310737f78854f78fcaa569cdbed6b2de"'
+ repoLastModified: Tue, 20 Aug 2024 03:52:05 GMT
category: SDK
foundInMaster: true
oldLocations:
@@ -11692,12 +11692,12 @@
language: TypeScript
archived: false
stars: 51
- watchers: 6
+ watchers: 5
forks: 8
owner: iyobo
logo: https://avatars.githubusercontent.com/u/5804246?v=4
license: MIT
- repoEtag: '"6e426538dc5898eb23c397a3b20bbfcaedbfc1186fc4078cb14065435cc1ddc0"'
+ repoEtag: '"7f10cfa190fbeedd4258e1c39c0a4f45e7ab6546c40ed02c5a530ab4171131fe"'
repoLastModified: Fri, 02 Aug 2024 07:23:52 GMT
foundInMaster: true
category: Server Implementations
@@ -11718,11 +11718,11 @@
archived: false
stars: 49
watchers: 35
- forks: 13
+ forks: 14
owner: SmartBear
logo: https://avatars.githubusercontent.com/u/1644671?v=4
license: Apache-2.0
- repoEtag: '"d5900362fce605e161331cd8cd6299d350bf467ae250f0a617d6a4b27ef98188"'
+ repoEtag: '"8fdc5fffed8a78f10a7c76b919df4153a8fbbde73af85f58f7f0769116677479"'
repoLastModified: Wed, 07 Aug 2024 10:32:10 GMT
foundInMaster: true
category: Code Generators
@@ -11874,7 +11874,7 @@
forks: 26
owner: piomin
logo: https://avatars.githubusercontent.com/u/2892502?v=4
- repoEtag: '"f25bc613fad2aafb795c1b19357efd1098ab8f9e91173891b2845ae5aac97884"'
+ repoEtag: '"ef3446cdb45dbd9a2d967ccf54145a379273f798f952b0837170048cab8c1ce2"'
repoLastModified: Mon, 19 Aug 2024 02:14:29 GMT
foundInMaster: true
category: SDK
@@ -12152,7 +12152,7 @@
owner: Backbase
logo: https://avatars.githubusercontent.com/u/1914334?v=4
license: NOASSERTION
- repoEtag: '"c5117906d3189ce62add8a0cb276e647afc546124f98be57bfd6551ca978b20b"'
+ repoEtag: '"d2f6bd682759a41fcfb7b476b56e93da25c6b7acb8641d4b8825f7d25bb0585a"'
repoLastModified: Tue, 13 Aug 2024 10:18:16 GMT
foundInMaster: true
category: SDK
@@ -12265,7 +12265,7 @@
owner: JaredCE
logo: https://avatars.githubusercontent.com/u/770400?v=4
license: MIT
- repoEtag: '"16d30bd6f621724e98b60ef5f63db50e7489260536ce797f9fd02633090c48cb"'
+ repoEtag: '"23497202802317057e9538a394066c1c2f38805c4bd8cd35de5b97957ba94cc8"'
repoLastModified: Tue, 30 Jul 2024 14:38:16 GMT
category: Parsers
foundInMaster: true
@@ -12556,17 +12556,17 @@
repositoryId: 193236806
description: JSON Schemas for every version of the OpenAPI Specification
created: '2019-06-22T13:26:54Z'
- updated: '2024-04-26T01:06:22Z'
+ updated: '2024-08-20T05:33:54Z'
language: JavaScript
archived: false
- stars: 35
+ stars: 34
watchers: 3
forks: 4
owner: APIDevTools
logo: https://avatars.githubusercontent.com/u/43750074?v=4
license: MIT
- repoEtag: '"2adb6c699423d9060cc4ae4a2409375125a5cf03554625525f54e80a95bd8961"'
- repoLastModified: Fri, 26 Apr 2024 01:06:22 GMT
+ repoEtag: '"fce6bf42ff612fb1d41a11aa44ca2d6b2466ea3689d44cba70f2f271d1b00499"'
+ repoLastModified: Tue, 20 Aug 2024 05:33:54 GMT
foundInMaster: true
category: Parsers
id: 1dbb49e9733b078e9e04a157e4d9dc56
@@ -12664,7 +12664,7 @@
public APIs on the internet. This dataset also includes descriptions,
categories, uptime metrics, and media assets for every API.
created: '2024-01-26T19:30:01Z'
- updated: '2024-08-18T00:25:12Z'
+ updated: '2024-08-21T00:22:35Z'
language: null
archived: false
stars: 33
@@ -12672,8 +12672,8 @@
forks: 3
owner: konfig-sdks
logo: https://avatars.githubusercontent.com/u/156027835?v=4
- repoEtag: '"f8cb8bca68f5224343b8fede7a117a167017310d9dd91e24340f60bc3475672d"'
- repoLastModified: Sun, 18 Aug 2024 00:25:12 GMT
+ repoEtag: '"2330f633f3762c19b1f2945a4cd0a0848a6b8a362a3d645bad8ad377bf795022"'
+ repoLastModified: Wed, 21 Aug 2024 00:22:35 GMT
category: Parsers
foundInMaster: true
- source: openapi3 tags
@@ -12751,7 +12751,7 @@
owner: data-fair
logo: https://avatars.githubusercontent.com/u/83776320?v=4
license: AGPL-3.0
- repoEtag: '"b28d05b8c2e6ec6d2c38ef3aab4073023460635bebed60d5eac23b509fdf0547"'
+ repoEtag: '"efff7678d7a7cfe2b421fe92a601b30898aa5efe7aceb705d7f2b1fa43803d64"'
repoLastModified: Mon, 19 Aug 2024 09:09:20 GMT
foundInMaster: true
category:
@@ -12908,7 +12908,7 @@
owner: kota65535
logo: https://avatars.githubusercontent.com/u/10975834?v=4
license: MIT
- repoEtag: '"c4123f2db75ea1f3b2fc48d5d56a8ec21948b19fb68a820e109b1727e4e2fde2"'
+ repoEtag: '"2254008e1d5d143a1e09f01680d7f1855f6d9b10e604c18603b5e120ad9587e1"'
repoLastModified: Tue, 23 Apr 2024 08:20:39 GMT
category: Parsers
foundInMaster: true
@@ -13059,17 +13059,17 @@
This is the unofficial OpenAPI description of the Hetzner Cloud API. It
allows automatic code generation for the hcloud API.
created: '2020-05-25T13:26:36Z'
- updated: '2024-08-09T10:57:36Z'
+ updated: '2024-08-20T22:20:17Z'
language: TypeScript
archived: false
- stars: 27
+ stars: 28
watchers: 4
forks: 4
owner: MaximilianKoestler
logo: https://avatars.githubusercontent.com/u/6814304?v=4
license: MIT
- repoEtag: '"84446250556ac951e022b1f4d6917dc7ff5c864e73330f923086ec33cc2b51ab"'
- repoLastModified: Fri, 09 Aug 2024 10:57:36 GMT
+ repoEtag: '"206668476b161e543e1a3283814b81bcd110bbafc2e1301ce12dfc673442336a"'
+ repoLastModified: Tue, 20 Aug 2024 22:20:17 GMT
foundInMaster: true
category: Testing
id: faad796cc6069f33f77380c65a4256f3
@@ -13093,7 +13093,7 @@
owner: hei-school
logo: https://avatars.githubusercontent.com/u/88576095?v=4
license: MIT
- repoEtag: '"f0fd24a70b220f7dba08fd6cc0c23027deed05c1262ddcccec120de6fbc7ad8a"'
+ repoEtag: '"a3607e2f405295443711ff825237f6b7733109aa5f89810c93d30e942627e02f"'
repoLastModified: Fri, 16 Aug 2024 08:38:51 GMT
foundInMaster: true
category: Code Generators
@@ -13109,17 +13109,17 @@
repositoryId: 118493814
description: Extract single paths/operations from OpenAPI definitions
created: '2018-01-22T17:56:20Z'
- updated: '2024-06-06T23:46:19Z'
+ updated: '2024-08-20T10:03:54Z'
language: JavaScript
archived: false
- stars: 27
+ stars: 28
watchers: 4
forks: 9
owner: Mermade
logo: https://avatars.githubusercontent.com/u/15950345?v=4
license: BSD-3-Clause
- repoEtag: '"e1bc5239a02d0d6bf1a20efd9a6a90689c88fb607bb1baf9f59ae4e92049e3c0"'
- repoLastModified: Thu, 06 Jun 2024 23:46:19 GMT
+ repoEtag: '"f974cba645a14bebba27be7aa6322910d93d2a021e73b125528eb2919e780f7c"'
+ repoLastModified: Tue, 20 Aug 2024 10:03:54 GMT
foundInMaster: true
category: Parsers
id: 8345bfb16b8aa0dc647fa5b2ab90b100
@@ -14005,7 +14005,7 @@
repositoryId: 315667251
description: Open API v3 server code generator
created: '2020-11-24T15:03:56Z'
- updated: '2024-08-19T13:57:59Z'
+ updated: '2024-08-20T14:54:25Z'
language: Go
archived: false
stars: 20
@@ -14014,8 +14014,8 @@
owner: mikekonan
logo: https://avatars.githubusercontent.com/u/36304777?v=4
license: MIT
- repoEtag: '"4f65d0d259adee3e5402e6b83a630cb401ddc28c49249b58071f268d75675913"'
- repoLastModified: Mon, 19 Aug 2024 13:57:59 GMT
+ repoEtag: '"e8dc919f23a3a8a7c871ddf604ecbc6c3f27e801c731314689e3c6c176ba2e7f"'
+ repoLastModified: Tue, 20 Aug 2024 14:54:25 GMT
foundInMaster: true
category: Parsers
id: 15bb9572a91297aa6595fb0450194d91
@@ -14277,7 +14277,7 @@
A community-created collection of configuration, plugins and techniques
for getting the best from Redocly CLI in every situation.
created: '2023-09-28T15:12:02Z'
- updated: '2024-08-15T14:26:53Z'
+ updated: '2024-08-20T07:59:01Z'
language: JavaScript
archived: false
stars: 18
@@ -14286,8 +14286,8 @@
owner: Redocly
logo: https://avatars.githubusercontent.com/u/32099856?v=4
license: MIT
- repoEtag: '"703c0d87452b0325c3e77f00049bf21186b63d98b3d09aecc192728d7ecf9436"'
- repoLastModified: Thu, 15 Aug 2024 14:26:53 GMT
+ repoEtag: '"79028164caceee969733003e59bea0f0e63287bcc57bff34ab037e40c964b56d"'
+ repoLastModified: Tue, 20 Aug 2024 07:59:01 GMT
category: Server Implementations
foundInMaster: true
- source: openapi3 tags
@@ -14428,7 +14428,7 @@
repositoryId: 530271572
description: Axios based HTTP client with type hint
created: '2022-08-29T15:06:26Z'
- updated: '2024-07-31T13:33:35Z'
+ updated: '2024-08-20T07:51:30Z'
language: TypeScript
archived: false
stars: 18
@@ -14437,8 +14437,8 @@
owner: yinzhenyu-su
logo: https://avatars.githubusercontent.com/u/16461374?v=4
license: MIT
- repoEtag: '"c505348c9eda0fe1cd4592f0561110fee248f8b0410329429b4c2e1bad4cf01d"'
- repoLastModified: Wed, 31 Jul 2024 13:33:35 GMT
+ repoEtag: '"b9f59746c03cba02853129e7c1e76f0462da7de0037d5c216839e4c640bd0bc0"'
+ repoLastModified: Tue, 20 Aug 2024 07:51:30 GMT
category: Parsers
foundInMaster: true
- source: openapi3 tags
@@ -15621,7 +15621,7 @@
Delightful API development: Focused on developer experience and
performance.
created: '2021-12-16T16:23:45Z'
- updated: '2024-08-19T08:53:40Z'
+ updated: '2024-08-20T16:24:02Z'
language: TypeScript
archived: false
stars: 12
@@ -15630,8 +15630,8 @@
owner: Jnig
logo: https://avatars.githubusercontent.com/u/3729585?v=4
license: MIT
- repoEtag: '"f2618d588a08b0bcc676310f4f7a0455e059ce974041d3d696d8778f064e082a"'
- repoLastModified: Mon, 19 Aug 2024 08:53:40 GMT
+ repoEtag: '"2c9ac7c534186eba6bc14f0bc96dc7b5a390b766043fb9a00a72ca515ece1ec1"'
+ repoLastModified: Tue, 20 Aug 2024 16:24:02 GMT
category:
- Data Validators
- Parsers
@@ -17876,7 +17876,7 @@
owner: meabed
logo: https://avatars.githubusercontent.com/u/45731?v=4
license: MIT
- repoEtag: '"a61c5f9aad7c4c5ff2ff2fc4addfb49baced3e228b6ff03fae26fface8059e33"'
+ repoEtag: '"6c64396f7c8598947cce702bc5aa82783bd7e84f3c5df6b5f4728dbfc6962f8b"'
repoLastModified: Fri, 12 Jan 2024 18:23:08 GMT
foundInMaster: true
category:
@@ -18498,13 +18498,13 @@
id: 75fd16ecc0ecd5ba9a0051b517b3bdaa
repositoryMetadata:
base64Readme: >-
- IyBTV1IgQXVkaW8gTGFiCgojIyBQcmluY2lwbGVzCgpMZWFybiBhYm91dCBvdXIgRW5naW5lZXJpbmcgYW5kIFByb2plY3QgUHJpbmNpcGxlcyBpbiBbUFJJTkNJUExFUy5tZF0oUFJJTkNJUExFUy5tZCkuCgojIyBPcGVuQVBJIERvY3VtZW50YXRpb24KCllvdSBjYW4gZmluZCB0aGUgT3BlbkFQSSBkb2N1bWVudGF0aW9uIGluIFsvb3BlbmFwaV0oLi9vcGVuYXBpLykuCgojIyBNb3JlIGZyb20gdGhlIEF1ZGlvIExhYgoKLSBPdXIgTm9kZUpTIHRvb2xzOiBbYEBzd3JsYWIvbm9kZS11dGlsc2BdKGh0dHBzOi8vZ2l0aHViLmNvbS9zd3JsYWIvbm9kZS11dGlscykgLyBvbiBbbnBtIGBAc3dybGFiL3V0aWxzYF0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQHN3cmxhYi91dGlscykKLSBQdWJsaWMgcmVwb3NpdG9yaWVzIG9uIEdpdEh1YjogW3N3cmxhYi9yZXBvc2l0b3JpZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9vcmdzL3N3cmxhYi9yZXBvc2l0b3JpZXM/cT0mdHlwZT1wdWJsaWMmbGFuZ3VhZ2U9JnNvcnQ9bmFtZSkKLSBQdWJsaWMgcGFja2FnZXMgb24gbnBtOiBbbnBtanMuY29tL29yZy9zd3JsYWJdKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9vcmcvc3dybGFiKQoKIyMgTW9yZSBEb2N1bWVudHMKClRoZXkgY2FuIGFsbCBiZSBmb3VuZCBpbiBbL2RvY3NdKC4vZG9jcy8pLgoKLSBbQUNDT1VOVCBMSU5LSU5HXShkb2NzL0FDQ09VTlQtTElOS0lORy5tZCkgLSBIYW5kbGluZyBhY2NvdW50IGxpbmtpbmcgZm9yIEFSRCBsb2dpbgotIFtBVVRIRU5USUNBVElPTl0oZG9jcy9BVVRIRU5USUNBVElPTi5tZCkgLSBIYW5kbGluZyB0aGUgUmFkaW9odWIgdG9rZW4gYXV0aAotIFtTVFJFQU1JTkddKGRvY3MvU1RSRUFNSU5HLm1kKSAtIEhvdyB0byBoYW5kbGUgcmFkaW8gc3RyZWFtIHJlcXVlc3RzIGFuZCBpbnRlcmFjdGlvbgoKIyMgUHVibGljIEtleQoKWW91IGNhbiBmaW5kIG91ciBwdWJsaWMga2V5IGZvciBgbGFiIFthdF0gc3dyLmRlYCBvbiBba2V5cy5vcGVucGdwLm9yZ10oaHR0cHM6Ly9rZXlzLm9wZW5wZ3Aub3JnL3NlYXJjaD9xPWxhYiU0MHN3ci5kZSkuCg==
- readmeEtag: '"ab9b9385413634de13f86977e241acb1bdd8d8e4"'
- readmeLastModified: Fri, 02 Aug 2024 11:46:03 GMT
+ IyBTV1IgQXVkaW8gTGFiCgojIyBQcmluY2lwbGVzCgpMZWFybiBhYm91dCBvdXIgRW5naW5lZXJpbmcgYW5kIFByb2plY3QgUHJpbmNpcGxlcyBpbiBbUFJJTkNJUExFUy5tZF0oUFJJTkNJUExFUy5tZCkuCgojIyBNb3JlIGZyb20gdGhlIEF1ZGlvIExhYgoKLSBPdXIgTm9kZUpTIHRvb2xzOiBbYEBzd3JsYWIvbm9kZS11dGlsc2BdKGh0dHBzOi8vZ2l0aHViLmNvbS9zd3JsYWIvbm9kZS11dGlscykgLyBvbiBbbnBtIGBAc3dybGFiL3V0aWxzYF0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQHN3cmxhYi91dGlscykKLSBQdWJsaWMgcmVwb3NpdG9yaWVzIG9uIEdpdEh1YjogW3N3cmxhYi9yZXBvc2l0b3JpZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9vcmdzL3N3cmxhYi9yZXBvc2l0b3JpZXM/cT0mdHlwZT1wdWJsaWMmbGFuZ3VhZ2U9JnNvcnQ9bmFtZSkKLSBQdWJsaWMgcGFja2FnZXMgb24gbnBtOiBbbnBtanMuY29tL29yZy9zd3JsYWJdKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9vcmcvc3dybGFiKQoKIyMgUHVibGljIEtleQoKWW91IGNhbiBmaW5kIG91ciBwdWJsaWMga2V5IGZvciBgbGFiIFthdF0gc3dyLmRlYCBvbiBba2V5cy5vcGVucGdwLm9yZ10oaHR0cHM6Ly9rZXlzLm9wZW5wZ3Aub3JnL3NlYXJjaD9xPWxhYiU0MHN3ci5kZSkuCg==
+ readmeEtag: '"34d717782e4b50612edcaabd42453ab3d4264abc"'
+ readmeLastModified: Tue, 20 Aug 2024 11:29:35 GMT
repositoryId: 208029195
- description: 🤝 SWR Audio Lab - Public Documentation and Principles
+ description: 🤝 SWR Audio Lab
created: '2019-09-12T10:52:47Z'
- updated: '2024-08-02T11:46:09Z'
+ updated: '2024-08-20T11:29:39Z'
language: null
archived: false
stars: 6
@@ -18512,8 +18512,8 @@
forks: 0
owner: swrlab
logo: https://avatars.githubusercontent.com/u/55231245?v=4
- repoEtag: '"a65ca5012b54268f1533766bcd28f6ffc47e2448d3b6433f3007f99428b65188"'
- repoLastModified: Fri, 02 Aug 2024 11:46:09 GMT
+ repoEtag: '"1ec7451abde667cea65277c86e225997819db8f0dee15ec06444cb8ace82c886"'
+ repoLastModified: Tue, 20 Aug 2024 11:29:39 GMT
category:
- Low-level Tooling
- Server Implementations
@@ -18663,7 +18663,7 @@
repositoryId: 318430456
description: The OpenAPI specifications for the Apideck APIs.
created: '2020-12-04T06:55:12Z'
- updated: '2024-08-08T20:39:57Z'
+ updated: '2024-08-20T10:18:52Z'
language: null
archived: false
stars: 6
@@ -18672,8 +18672,8 @@
owner: apideck-libraries
logo: https://avatars.githubusercontent.com/u/73573473?v=4
license: MIT
- repoEtag: '"f5556471ba2158c57aef4eb9f55fefb91841e576fd42d6f53b5bdf3a6241968b"'
- repoLastModified: Thu, 08 Aug 2024 20:39:57 GMT
+ repoEtag: '"5b811b23ba34890de411fb9923886e588ac4c6de7a2128b30976fb702634d7dd"'
+ repoLastModified: Tue, 20 Aug 2024 10:18:52 GMT
foundInMaster: true
category: Testing
id: c977303d84eebe1aa3c23e0a1f6d548d
@@ -19807,13 +19807,13 @@
v3: true
repositoryMetadata:
base64Readme: >-
- IyBUb3VyT3B0aW1pemVyIEFuZ3VsYXIgRGVtbyBBcHBsaWNhdGlvbiAtIFNvdXJjZQoKPGEgaHJlZj0iaHR0cHM6Ly9kbmEtZXZvbHV0aW9ucy5jb20vIiB0YXJnZXQ9Il9ibGFuayI+PGltZyBzcmM9Imh0dHBzOi8vZG9jcy5kbmEtZXZvbHV0aW9ucy5jb20vaW5kZXhyZXMvZG5hLXRlbXAtbG9nby5wbmciIHdpZHRoPSIxMTAiCnRpdGxlPSJETkEtRXZvbHV0aW9ucyIgYWx0PSJETkEtRXZvbHV0aW9ucyI+PC9hPgoKVG8gdXRpbGl6ZSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vRE5BLUV2b2x1dGlvbnMvRG9ja2VyLVJFU1QtVG91ck9wdGltaXplci9ibG9iL21haW4vUkVBRE1FLm1kI2hvdy10by1zdGFydC1qb3B0dG91cm9wdGltaXplci1kb2NrZXIiIHRhcmdldD0iX2JsYW5rIj5KT3B0VG91ck9wdGltaXplci1Eb2NrZXI8L2E+LCB3ZSBjcmVhdGVkIGFuIEFuZ3VsYXItRGVtbyBhcHBsaWNhdGlvbi4gVGhpcyBkZW1vIGFwcGxpY2F0aW9uIGlzIGhvc3RlZCBvbiA8YSBocmVmPSJodHRwczovL2F6dXJlLm1pY3Jvc29mdC5jb20vIiB0YXJnZXQ9Il9ibGFuayI+TWljcm9zb2Z0IEF6dXJlPC9hPiBhbmQgaXMgbWFkZSBhdmFpbGFibGUgdmlhIDxhIGhyZWY9Imh0dHBzOi8vZGVtby5kbmEtZXZvbHV0aW9ucy5jb20vIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9kZW1vLmRuYS1ldm9sdXRpb25zLmNvbTwvYT4uIEhlcmUgd2Ugd291bGQgbGlrZSB0byBzaGFyZSB0aGUgbGF0ZXN0IHNvdXJjZS1jb2RlIG9mIHRoaXMgcHJvamVjdC4gVGhpcyBpcyBub3QgYSBjbGFzc2ljYWwgIkhlbGxvIFdvcmxkIiBwcm9qZWN0LCBhcyBpdCBpcyB1c2luZyBtdWx0aXBsZSBkZXBlbmRlbmNpZXMgYW5kIGFkdmFuY2VkIGNvbmNlcHRzLiBIb3dldmVyLCBmZWVsIGZyZWUgdG8gZXhwbG9yZSB0aGUgcHJvamVjdCBhbmQgZXh0cmFjdCB3aGF0ZXZlciB5b3UgbmVlZCB0byBnZXQgc3RhcnRlZCB3aXRoIEpPcHQuCgoqKlVwZGF0ZSBKdWx5IDEydGggMjAyNDoqKgoKRnJvbSBub3cgb24sIHRoZSBBbmd1bGFyIERlbW8gdXNlcyBBbmd1bGFyIDE4LiBXZSBhbHNvIHVwZGF0ZWQvdXBncmFkZWQgbXVsdGlwbGUgb3RoZXIgZGVwZW5kZW5jaWVzLiBUaGUgZ2VuZXJhdGVkIG1vZGVscyBhcmUgdXNpbmcgSk9wdC5Ub3VyT3B0aW1pemVyIHdpdGggKip2ZXJzaW9uIDEuMi43IG9yIGhpZ2hlcioqLgoKKipVcGRhdGUgSmFudWFyeSA3dGggMjAyNDoqKgoKRnJvbSBub3cgb24sIHRoZSBBbmd1bGFyIERlbW8gdXNlcyBBbmd1bGFyIDE3LiBXZSBhbHNvIHVwZGF0ZWQvdXBncmFkZWQgbXVsdGlwbGUgb3RoZXIgZGVwZW5kZW5jaWVzLiBUaGUgZ2VuZXJhdGVkIG1vZGVscyBhcmUgdXNpbmcgSk9wdC5Ub3VyT3B0aW1pemVyIHdpdGggKip2ZXJzaW9uIDEuMi42IG9yIGhpZ2hlcioqLiBJbiBhZGRpdGlvbiwgYSAiZnJlZSBtb3ZpbmcgZXhhbXBsZSIgd2FzIGFkZGVkLiBOb2RlcyBhbmQgUmVzb3VyY2VzIGNhbiBiZSBmcmVlbHkgcG9zaXRpb25lZCB2aWEgZHJhZyBhbmQgZHJvcC4KCioqVXBkYXRlIEp1bmUgOHRoIDIwMjE6KioKCkZyb20gbm93IG9uLCB0aGUgQW5ndWxhciBEZW1vIHVzZXMgb3VyIG5ldyBzd2FnZ2VyIGRlZmluaXRpb24gKHNlZSAKPGEgaHJlZj0iaHR0cHM6Ly9zd2FnZ2VyLmRuYS1ldm9sdXRpb25zLmNvbS92My9hcGktZG9jcy9PcHRpbWl6ZSIgdGFyZ2V0PSJfYmxhbmsiPnN3YWdnZXIuZG5hLWV2b2x1dGlvbnMuY29tL3YzL2FwaS1kb2NzL09wdGltaXplPC9hPikuIFRoaXMgcmVxdWlyZXMgdXNpbmcgSk9wdC5Ub3VyT3B0aW1pemVyIHdpdGggKip2ZXJzaW9uIDEuMC4zIG9yIGhpZ2hlcioqLiBUaGlzIHN3YWdnZXIgZGVmaW5pdGlvbiBoYXMgdGhlIGFkdmFudGFnZSB0aGF0IGl0IGVuYWJsZXMgYWxtb3N0IGFsbCBmZWF0dXJlcyBvZiBKT3B0IGF0IHRoZSBSRVNULWVuZHBvaW50LgoKKipVcGRhdGUgMjFzdCBTZXB0ZW1iZXIgMjAyMToqKgpUaGUgcmVwbGFjZW1lbnQgZGVzY3JpYmVkIGluICpVcGRhdGUgSnVuZSAyMDIxKiBpcyBubyBsb25nZXIgbmVjZXNzYXJ5LiBIb3dldmVyLCBtb2RlbHMgYWxyZWFkeSBjcmVhdGVkIG5lZWQgdG8gYmUgcmVjcmVhdGVkLiBGdXJ0aGVyLCB0aGUgbGVnYWN5IGVuZHBvaW50IGlzIGRyb3BwZWQsIGFuZCB0aGUgbWFpbi1lbmRwb2ludCBjaGFuZ2VkIHRvIDxhIGhyZWY9Imh0dHBzOi8vc3dhZ2dlci5kbmEtZXZvbHV0aW9ucy5jb20vdjMvYXBpLWRvY3MvT3B0aW1pemUiIHRhcmdldD0iX2JsYW5rIj5zd2FnZ2VyLmRuYS1ldm9sdXRpb25zLmNvbS92My9hcGktZG9jcy9PcHRpbWl6ZTwvYT4uCgotLS0KCiMgQ29udGFjdAoKSWYgeW91IG5lZWQgYW55IGhlbHAsIHBsZWFzZSBjb250YWN0IHVzIHZpYSBvdXIgY29tcGFueSB3ZWJzaXRlIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmRuYS1ldm9sdXRpb25zLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPnd3dy5kbmEtZXZvbHV0aW9ucy5jb208L2E+IG9yIHdyaXRlIGFuIGVtYWlsIHRvIDxhIGhyZWY9Im1haWx0bzppbmZvQGRuYS1ldm9sdXRpb25zLmNvbSI+aW5mb0BkbmEtZXZvbHV0aW9ucy5jb208L2E+LgoKLS0tCgojIyBGdXJ0aGVyIERvY3VtZW50YXRpb24gYW5kIGhlbHBmdWwgTGlua3MKCk91ciBjb250ZW50OgotIEZ1cnRoZXIgZG9jdW1lbnRhdGlvbiAtIDxhIGhyZWY9Imh0dHBzOi8vZG9jcy5kbmEtZXZvbHV0aW9ucy5jb20iIHRhcmdldD0iX2JsYW5rIj5kb2NzLmRuYS1ldm9sdXRpb25zLmNvbTwvYT4KLSBTcGVjaWFsIGZlYXR1cmVzCS0gPGEgaHJlZj0iaHR0cHM6Ly9kb2NzLmRuYS1ldm9sdXRpb25zLmNvbS9vdmVydmlld19kb2NzL3NwZWNpYWxfZmVhdHVyZXMvU3BlY2lhbF9GZWF0dXJlcy5odG1sIiB0YXJnZXQ9Il9ibGFuayI+T3ZlcnZpZXcgb2Ygc3BlY2lhbCBmZWF0dXJlczwvYT4KLSBPdXIgY29tcGFueSB3ZWJzaXRlIC0gPGEgaHJlZj0iaHR0cHM6Ly93d3cuZG5hLWV2b2x1dGlvbnMuY29tIiB0YXJnZXQ9Il9ibGFuayI+d3d3LmRuYS1ldm9sdXRpb25zLmNvbTwvYT4KLSBPdXIgb2ZmaWNpYWwgcmVwb3NpdG9yeSAtIDxhIGhyZWY9Imh0dHBzOi8vcHVibGljLnJlcG8uZG5hLWV2b2x1dGlvbnMuY29tIiB0YXJnZXQ9Il9ibGFuayI+cHVibGljLnJlcG8uZG5hLWV2b2x1dGlvbnMuY29tPC9hPgotIE91ciBvZmZpY2lhbCBKYXZhRG9jcyAtIDxhIGhyZWY9Imh0dHBzOi8vcHVibGljLmphdmFkb2MuZG5hLWV2b2x1dGlvbnMuY29tIiB0YXJnZXQ9Il9ibGFuayI+cHVibGljLmphdmFkb2MuZG5hLWV2b2x1dGlvbnMuY29tPC9hPgotIE91ciBZb3VUdWJlIGNoYW5uZWwgLSA8YSBocmVmPSJodHRwczovL3d3dy55b3V0dWJlLmNvbS9jaGFubmVsL1VDemZaakpMcDVScms3VTJVS3NPZjhGdyIgdGFyZ2V0PSJfYmxhbmsiPkROQSBUdXRvcmlhbHM8L2E+Ci0gT3VyIERvY2tlckh1YiBjaGFubmVsIC0gPGEgaHJlZj0iaHR0cHM6Ly9odWIuZG9ja2VyLmNvbS91L2RuYWV2b2x1dGlvbnMiIHRhcmdldD0iX2JsYW5rIj5ETkEgRG9ja2VySHViPC9hPgotIE91ciBMaW5rZWRJbiBjaGFubmVsIC0gPGEgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbXBhbnkvZG5hLWV2b2x1dGlvbnMvIiB0YXJnZXQ9Il9ibGFuayI+RE5BIExpbmtlZEluPC9hPgoKVGhpcmQtcGFydHk6Ci0gPGEgaHJlZj0iaHR0cHM6Ly9hbmd1bGFyLmlvL2NsaSIgdGFyZ2V0PSJfYmxhbmsiPkFuZ3VsYXIgQ0xJPC9hPgotIDxhIGhyZWY9Imh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL0BvcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3ItY2xpIiB0YXJnZXQ9Il9ibGFuayI+T3BlbiBBcGkgR2VuZXJhdG9yPC9hPgotIDxhIGhyZWY9Imh0dHBzOi8vd3d3Lm1va2thcHBzLmRlL2Jsb2cvaG93LXRvLWdlbmVyYXRlLWFuZ3VsYXItYW5kLXNwcmluZy1jb2RlLWZyb20tb3Blbi1hcGktc3BlY2lmaWNhdGlvbi8iIHRhcmdldD0iX2JsYW5rIj5HZW5lcmF0ZSBBbmd1bGFyIGFuZCBTcHJpbmcgY29kZSBmcm9tIE9wZW5BcGk8L2E+Ci0gPGEgaHJlZj0iaHR0cHM6Ly9tYXRlcmlhbC5hbmd1bGFyLmlvLyIgdGFyZ2V0PSJfYmxhbmsiPkFuZ3VsYXIgTWF0ZXJpYWw8L2E+CgotLS0KCiMjIE92ZXJ2aWV3CgoqIFtHZW5lcmFsIC0gRE5BIERlbW8gQXBwbGljYXRpb25dKCNnZW5lcmFsLWRuYS1kZW1vLWFwcGxpY2F0aW9uKQoqIFtTZXJ2ZSB3aXRoIERvY2tlciAocmVjb21tZW5kZWQpXSgjc2VydmUtd2l0aC1kb2NrZXItcmVjb21tZW5kZWQpCiogW1NlcnZlIHdpdGhvdXQgRG9ja2VyXSgjc2VydmUtd2l0aG91dC1kb2NrZXIpCiogW1VwZGF0ZS9HZW5lcmF0ZSB0aGUgdHlwZXNjcmlwdCBtb2RlbHMgdXNpbmcgT3BlbkFwaSBHZW5lcmF0b3JdKCN1cGRhdGUtZ2VuZXJhdGUtdGhlLXR5cGVzY3JpcHQtbW9kZWxzLXVzaW5nLW9wZW5hcGktZ2VuZXJhdG9yKQoqIFtWaWRlbyAtIEhvdyB0byB1c2UgdGhlIERlbW8tQXBwbGljYXRpb25dKCN2aWRlby1ob3ctdG8tdXNlLXRoZS1kZW1vLWFwcGxpY2F0aW9uKQoqIFtXaGF0J3MgbmV4dD9dKCN3aGF0LXMtbmV4dCkKCi0tLQoKIyMgR2VuZXJhbCAtIEROQSBEZW1vIEFwcGxpY2F0aW9uCgpUaGUgYW5ndWxhci1kZW1vIGFwcGxpY2F0aW9uIHdhcyBnZW5lcmF0ZWQgd2l0aCA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyLWNsaSIgdGFyZ2V0PSJfYmxhbmsiPkFuZ3VsYXIgQ0xJPC9hPi4gRnVydGhlciwgd2UgdXRpbGl6ZWQgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL09wZW5BUElUb29scy9vcGVuYXBpLWdlbmVyYXRvciIgdGFyZ2V0PSJfYmxhbmsiPk9wZW5BcGkgR2VuZXJhdG9yPC9hPiB0byBhdXRvbWF0aWNhbGx5IGNyZWF0ZSB0aGUgcmVxdWlyZWQgVHlwZVNjcmlwdCBtb2RlbHMgZnJvbSB0aGUgT3BlbkFwaSBkZWZpbml0aW9uIHByb3ZpZGVkIGZyb20gb3VyIFN3YWdnZXIgZW5kcG9pbnQgb2YgSk9wdFRvdXJPcHRpbWl6ZXIuCgo8aW1nIHNyYz0iaHR0cHM6Ly9kbmEtZXZvbHV0aW9ucy5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjAvMTEvaG93LXRvLXZpZGVvLXByZXYuZ2lmIiB3aWR0aD0iNDUwIgp0aXRsZT0iRE5BLUV2b2x1dGlvbnMgRGVtbyBBcHBsaWNhdGlvbiBQcmV2aWV3IiBhbHQ9IkROQS1Fdm9sdXRpb25zIERlbW8gQXBwbGljYXRpb24gUHJldmlldyI+CgotLS0KCiMjIFNlcnZlIHdpdGggRG9ja2VyIChyZWNvbW1lbmRlZCkKCldlIHJlY29tbWVuZCBzZXJ2aW5nIHRoZSBEZW1vIEFwcGxpY2F0aW9uIHdpdGggZG9ja2VyLCBlc3BlY2lhbGx5IHdoZW4geW91IGFyZSBuZXcgdG8gQW5ndWxhci4gVGhlIGRvY2tlciBidWlsZCB3aWxsIGluc3RhbGwgYWxsIHRoZSByZXF1aXJlZCBkZXBlbmRlbmNpZXMgZm9yIHlvdS4gWW91IGNhbiBtb2RpZnkgdGhlIGNvZGUgaW4geW91ciBkZXNpcmVkIElERSBhbmQgYnVpbGQgeW91ciBjdXN0b20gaW1hZ2UuCgojIyMgUHJlcmVxdWlzaXRlcwoKMSkgSW5zdGFsbCBhIERvY2tlciBlbnZpcm9ubWVudCBhbmQgbWFrZSBzdXJlIGBgZG9ja2VyYGAgaXMgYXZhaWxhYmxlIGluIHlvdXIgY29tbWFuZCBsaW5lLgoKMikgRXZlbiB0aG91Z2ggdGhlIERlbW8tQXBwbGljYXRpb24gbmVlZHMgbm8gVG91ck9wdGltaXplciB0byBzdGFydCwgeW91IG5lZWQgdG8gcHJvdmlkZSBhIHJ1bm5pbmcgVG91ck9wdGltaXplciBpbnN0YW5jZSB0byB0ZXN0IHRoZSBmdWxsIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIERlbW8tQXBwbGljYXRpb24uIFBsZWFzZSByZWFkIHRoZSBkb2N1bWVudGF0aW9uIG9uIGhvdyB0byA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vRE5BLUV2b2x1dGlvbnMvRG9ja2VyLVJFU1QtVG91ck9wdGltaXplci9ibG9iL21haW4vUkVBRE1FLm1kI2hvdy10by1zdGFydC1qb3B0dG91cm9wdGltaXplci1kb2NrZXIiIHRhcmdldD0iX2JsYW5rIj5zdGFydCB0aGUgVG91ck9wdGltaXplcjwvYT4uCgoKIyMjIFN0YXJ0IHRoZSBpbWFnZQoKUGxlYXNlIHZpc2l0IDxhIGhyZWY9Imh0dHBzOi8vaHViLmRvY2tlci5jb20vcmVwb3NpdG9yeS9kb2NrZXIvZG5hZXZvbHV0aW9ucy9qb3B0X2RlbW9hcHBsaWNhdGlvbi9nZW5lcmFsIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9odWIuZG9ja2VyLmNvbS9yZXBvc2l0b3J5L2RvY2tlci9kbmFldm9sdXRpb25zL2pvcHRfZGVtb2FwcGxpY2F0aW9uL2dlbmVyYWw8L2E+IGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpZiB5b3Ugd2FudCB0byBzdGFydCB0aGUgcHJlLWJ1aWx0IGltYWdlIHdpdGhvdXQgdXNpbmcgdGhlIHNvdXJjZXMuIAoKIyMjIEJ1aWxkIHRoZSBpbWFnZSBmcm9tIHNjcmF0Y2gKCjEpIENsb25lIHRoaXMgcmVwb3NpdG9yeSBhbmQgb3BlbiBpdCBpbiB5b3VyIGRlc2lyZWQgSURFIChlLmcuIDxhIGhyZWY9Imh0dHBzOi8vY29kZS52aXN1YWxzdHVkaW8uY29tLyIgdGFyZ2V0PSJfYmxhbmsiPlZpc3VhbCBTdHVkaW8gQ29kZTwvYT4pIGFuZCBtb2RpZnkgdGhlIGNvZGUgaWYgeW91IGxpa2UuCjIpIDxhIGhyZWY9Imh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2VuZ2luZS9yZWZlcmVuY2UvY29tbWFuZGxpbmUvYnVpbGQvIiB0YXJnZXQ9Il9ibGFuayI+QnVpbGQ8L2E+IHRoZSBkb2NrZXIgaW1hZ2UgdXNpbmcgdGhlIGBgRG9ja2VyZmlsZWBgIGluIHRoZSBtYWluIHByb2plY3QgcGF0aCwgYnkgcnVubmluZzoKCkFUVEVOVElPTjogTm9kZS5qcyBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgY2FuIGJlIHF1aXRlIG1lbW9yeSBjb25zdW1pbmcuIFNvIG1ha2Ugc3VyZSB5b3VyIGRvY2tlciBlbnZpcm9ubWVudCBoYXMgYXQgbGVhc3QgNCBHQiBvZiBSYW0uIAoKYGBgeG1sCmRvY2tlciBidWlsZCAtdCBkbmFfY3VzdG9tX2RlbW9faW1hZ2UgLgpgYGAKCiMjIyBSdW4gYSBjb250YWluZXIKCjEpIFJ1biB0aGUgaW1hZ2UgYmFzZWQgb24geW91ciBmcmVzaGx5IGNyZWF0ZWQgaW1hZ2U6CgpgYGB4bWwKZG9ja2VyIHJ1biAtZCAtLXJtIFwKCS0tbmFtZSBteUpPcHRUb3VyT3B0aW1pemVyRGVtbyBcCgktcCAzMDAwOjgwIFwKCS12ICR7UFdEfTovdXNyL3NyYy9hcHAgXAoJLWUgSk9QVF9TV0FHR0VSX0hPU1Q9Imh0dHA6Ly9sb2NhbGhvc3QiIFwKCS1lIEpPUFRfU1dBR0dFUl9QT1JUPSI4MDgxIiBcCglkbmFfY3VzdG9tX2RlbW9faW1hZ2UKYGBgCgpTYW1lIGNvbW1hbmQgYXMgYSBzaW5nbGUgbGluZToKCmBgYHhtbApkb2NrZXIgcnVuIC1kIC0tcm0gLS1uYW1lIG15Sk9wdFRvdXJPcHRpbWl6ZXJEZW1vIC1wIDMwMDA6ODAgLXYgJHtQV0R9Oi91c3Ivc3JjL2FwcCAtZSBKT1BUX1NXQUdHRVJfSE9TVD0iaHR0cDovL2xvY2FsaG9zdCIgLWUgSk9QVF9TV0FHR0VSX1BPUlQ9IjgwODEiIGRuYV9jdXN0b21fZGVtb19pbWFnZQpgYGAKCk9wZW4gPGEgaHJlZj0iaHR0cDovL2xvY2FsaG9zdDozMDAwIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2xvY2FsaG9zdDozMDAwPC9hPiwgYW5kIHlvdSBzaG91bGQgc2VlIHRoZSBEZW1vIEFwcGxpY2F0aW9uLiBJZiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vRE5BLUV2b2x1dGlvbnMvRG9ja2VyLVJFU1QtVG91ck9wdGltaXplci9ibG9iL21haW4vUkVBRE1FLm1kI2hvdy10by1zdGFydC1qb3B0dG91cm9wdGltaXplci1kb2NrZXIiIHRhcmdldD0iX2JsYW5rIj5KT3B0VG91ck9wdGltaXplcjwvYT4gaXMgbm90IHJ1bm5pbmcgaW4gdGhlIGJhY2tncm91bmQsIHlvdSBjYW4gKipOT1QqKiBzdGFydCBhbnkgT3B0aW1pemF0aW9uLiBIb3dldmVyLCB5b3Ugc2hvdWxkIHNlZSB0aGUgc3RhcnRpbmcgcGFnZSBvZiB0aGUgRGVtbyBBcHBsaWNhdGlvbi4gQnkgZGVmYXVsdCwgdGhlIFRvdXJPcHRpbWl6ZXIgaXMgYXNzdW1lZCB0byBiZSBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL2xvY2FsaG9zdDo4MDgxIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2xvY2FsaG9zdDo4MDgxPC9hPiBhbmQgaXMgc3RhcnRlZCB3aXRoIHRoZSAiY29ycyIgcHJvZmlsZS4gWW91IGNhbiBhZGp1c3QgdGhlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIGhvc3QgYW5kIHBvcnQgaW4gdGhlIGBgZW52aXJvbm1lbnQudHNgYCBmaWxlLgoKWW91IGNhbiBwcm92aWRlIHRocmVlIGVudmlyb25tZW50IHZhcmlhYmxlczoKKiBgYEpPUFRfU1dBR0dFUl9IT1NUYGA6IFRoZSBhZGRyZXNzIG9mIHlvdXIgcnVubmluZyBUb3VyT3B0aW1pemVyLiBJZiB5b3UgcnVuIHRoZSBkb2NrZXIgaW1hZ2Ugb2YgdGhlIFRvdXJPcHRpbWl6ZXIgbG9jYWxseSwgdGhpcyBpcyBgYGh0dHA6Ly9sb2NhbGhvc3RgYC4KKiBgYEpPUFRfU1dBR0dFUl9QT1JUYGA6IFRoZSBwb3J0IG9mIHlvdXIgcnVubmluZyBUb3VyT3B0aW1pemVyLiBJZiB5b3UgcnVuIHRoZSBkb2NrZXIgaW1hZ2Ugb2YgdGhlIFRvdXJPcHRpbWl6ZXIgbG9jYWxseSwgdGhpcyBpcyBgYDgwODFgYC4KKiBgYElOUFJPRFVDVElPTmBgOiBUaGlzIHZhbHVlIGlzIGBgZmFsc2VgYCBieSBkZWZhdWx0LiBJZiB5b3UgYXJlIGNoYW5naW5nIGl0IHRvIGBgdHJ1ZWBgLCBvdXIgb2ZmaWNpYWwgVG91ck9wdGltaXplciBlbmRwb2ludCBpcyB1c2VkIGJ5IGRlZmF1bHQuIEhvd2V2ZXIsICoqdHJ5IHRvIGF2b2lkIHRoaXMqKiwgYXMgd2UgYXJlIGdvaW5nIHRvIGJsb2NrIElQcyB3aXRoIHRvbyBtYW55IHJlcXVlc3RzLiBGdXJ0aGVyLCBvdXIgb2ZmaWNpYWwgZW5kcG9pbnQgaGFzIGEgbGltaXRhdGlvbiBvZiAyMCBlbGVtZW50cyB0byBiZSBvcHRpbWl6ZWQsIHJlZ2FyZGxlc3Mgb2YgeW91ciBsaWNlbnNlLiBZb3UgY2FuIGNoYW5nZSB0aGUgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCBzZXR0aW5ncyBieSBlZGl0aW5nIHRoZSBmaWxlOiBgYGVudmlyb25tZW50LnByb2QudHNgYC4KCgotLS0KCiMjIFNlcnZlIHdpdGhvdXQgRG9ja2VyCgpPZiBjb3Vyc2UsIHlvdSBjYW4gaG9zdCB0aGUgRGVtby1BcHBsaWNhdGlvbiBBbmd1bGFyIFByb2plY3QgbG9jYWxseSB3aXRob3V0IHVzaW5nIGRvY2tlci4gSG93ZXZlciwgeW91IGhhdmUgdG8gbWFrZSBzdXJlIHlvdXIgZW52aXJvbm1lbnQgaXMgc2V0IHVwIGNvcnJlY3RseS4KCiMjIyBQcmVyZXF1aXNpdGVzIChmb3IgdXNpbmcgYGBucG1gYCBhbmQgYGBuZ2BgKQoKMSkgRmlyc3QsIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSA8YSBocmVmPSJodHRwczovL3d3dy5ucG1qcy5jb20vZ2V0LW5wbSIgdGFyZ2V0PSJfYmxhbmsiPm5wbSAoTm9kZSBQYWNrYWdlIE1hbmFnZXIpPC9hPiBpcyBpbnN0YWxsZWQuICAgCgoyKSBGdXJ0aGVyLCB5b3UgbmVlZCB0byBpbnN0YWxsIDxhIGhyZWY9Imh0dHBzOi8vYW5ndWxhci5pby9jbGkiIHRhcmdldD0iX2JsYW5rIj5uZyAoQW5ndWxhciBDTEkpPC9hPgoKMykgRXZlbiB0aG91Z2ggdGhlIERlbW8tQXBwbGljYXRpb24gbmVlZHMgbm8gVG91ck9wdGltaXplciB0byBzdGFydCwgeW91IG5lZWQgdG8gcHJvdmlkZSBhIHJ1bm5pbmcgVG91ck9wdGltaXplciBpbnN0YW5jZSB0byB0ZXN0IHRoZSBmdWxsIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIERlbW8tQXBwbGljYXRpb24uIFBsZWFzZSByZWFkIHRoZSBkb2N1bWVudGF0aW9uIG9uIGhvdyB0byA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vRE5BLUV2b2x1dGlvbnMvRG9ja2VyLVJFU1QtVG91ck9wdGltaXplci9ibG9iL21haW4vUkVBRE1FLm1kI2hvdy10by1zdGFydC1qb3B0dG91cm9wdGltaXplci1kb2NrZXIiIHRhcmdldD0iX2JsYW5rIj5zdGFydCB0aGUgVG91ck9wdGltaXplcjwvYT4uCgoKIyMjIFNlcnZlIHRoZSBEZW1vIEFwcGxpY2F0aW9uCgoxLiBDbG9uZSB0aGlzIHJlcG9zaXRvcnkgYW5kIG9wZW4gaXQgaW4geW91ciBkZXNpcmVkIElERSAoZS5nLiA8YSBocmVmPSJodHRwczovL2NvZGUudmlzdWFsc3R1ZGlvLmNvbS8iIHRhcmdldD0iX2JsYW5rIj5WaXN1YWwgU3R1ZGlvIENvZGU8L2E+KSBpZiB5b3UgbGlrZSB0byBtb2RpZnkgdGhlIGNvZGUuCgoyLiBZb3UgY2FuIHNlcnZlIHRoZSBwcm9qZWN0IGJ5IHVzaW5nIGBgbmcgc2VydmVgYCBmcm9tIHdpdGhpbiB0aGUgcHJvamVjdCBwYXRoLgoKMy4gT3BlbiA8YSBocmVmPSJodHRwOi8vbG9jYWxob3N0OjUwMDAiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vbG9jYWxob3N0OjUwMDA8L2E+LCBhbmQgeW91IHNob3VsZCBzZWUgdGhlIERlbW8gQXBwbGljYXRpb24uIElmIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9ETkEtRXZvbHV0aW9ucy9Eb2NrZXItUkVTVC1Ub3VyT3B0aW1pemVyL2Jsb2IvbWFpbi9SRUFETUUubWQjaG93LXRvLXN0YXJ0LWpvcHR0b3Vyb3B0aW1pemVyLWRvY2tlciIgdGFyZ2V0PSJfYmxhbmsiPkpPcHRUb3VyT3B0aW1pemVyPC9hPiBpcyBub3QgcnVubmluZyBpbiB0aGUgYmFja2dyb3VuZCwgeW91IGNhbiAqKk5PVCoqIHN0YXJ0IGFueSBPcHRpbWl6YXRpb24uIEhvd2V2ZXIsIHlvdSBzaG91bGQgc2VlIHRoZSBzdGFydGluZyBwYWdlIG9mIHRoZSBEZW1vIEFwcGxpY2F0aW9uLiBCeSBkZWZhdWx0LCB0aGUgVG91ck9wdGltaXplciBpcyBhc3N1bWVkIHRvIGJlIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vbG9jYWxob3N0OjgwODEiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vbG9jYWxob3N0OjgwODE8L2E+IGFuZCBpcyBzdGFydGVkIHdpdGggdGhlICJjb3JzIiBwcm9maWxlLiBZb3UgY2FuIGFkanVzdCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgaG9zdCBhbmQgcG9ydCBpbiB0aGUgYGBlbnZpcm9ubWVudC50c2BgIGZpbGUuIFRoZSBkZWZhdWx0IHBvcnQsIHRoZSBEZW1vIEFwcGxpY2F0aW9uIGlzIGhvc3RlZCwgaXMgcG9ydCA1MDAwLCB5b3UgY2FuIGNoYW5nZSB0aGlzIGJlaGF2aW9yIGluIHRoZSBgYGFuZ3VsYXIuanNvbmBgLgoKKFBsZWFzZSBhbHNvIHJlYWQgdGhlIDxhIGhyZWY9Imh0dHBzOi8vYW5ndWxhci5pby9jbGkvYnVpbGQiIHRhcmdldD0iX2JsYW5rIj5Bbmd1bGFyIERvY3VtZW50YXRpb248L2E+IHRvIGdldCBmdXJ0aGVyIGhlbHAgb24gaG93IHRvIGJ1aWxkIHByb2plY3RzLikKCgotLS0KIyMgVXBkYXRlL0dlbmVyYXRlIHRoZSBUeXBlU2NyaXB0IG1vZGVscyB1c2luZyBPcGVuQXBpIEdlbmVyYXRvcgoKSWYgeW91IHdvdWxkIGxpa2UgdG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSB0aGUgbW9kZWxzIGJhc2VkIG9uIHRoZSA8YSBocmVmPSJodHRwczovL3N3YWdnZXIuZG5hLWV2b2x1dGlvbnMuY29tL3YzL2FwaS1kb2NzIiB0YXJnZXQ9Il9ibGFuayI+bGF0ZXN0IFN3YWdnZXIgQVBJLURvY3M8L2E+IG9mIHRoZQo8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vRE5BLUV2b2x1dGlvbnMvRG9ja2VyLVJFU1QtVG91ck9wdGltaXplciIgdGFyZ2V0PSJfYmxhbmsiPlRvdXJPcHRpbWl6ZXI8L2E+LCB5b3Ugd2lsbCBoYXZlIHRvIGluc3RhbGwgPGEgaHJlZj0iaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQG9wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvci1jbGkiIHRhcmdldD0iX2JsYW5rIj5PcGVuYXBpLUdlbmVyYXRvci1DTEk8L2E+LgoKTm90ZTogT3BlbkFwaUdlbmVyYXRvciBjYW4gYWxzbyBiZSBydW4gYXMgRG9ja2VyIGNvbnRhaW5lciBvciBNYXZlbiBkZXBlZGVuY3kuCgojIyMgQ3JlYXRlIGEgdG91cm9wdGltaXplcl9zcGVjLmpzb24gZmlsZQpUaGUgYGB0b3Vyb3B0aW1pemVyX3NwZWMuanNvbmBgIGNvbnRhaW5pbmcgdGhlIEFQSS1Eb2NzIGlzIG5vdCBwYXJ0IG9mIHRoaXMgcmVwb3NpdG9yeS4gQ29weSBhbmQgcGFzdGUgdGhlIFN3YWdnZXIgZGVmaW5pdGlvbiB1bmRlciA8YSBocmVmPSJodHRwczovL3N3YWdnZXIuZG5hLWV2b2x1dGlvbnMuY29tL3YzL2FwaS1kb2NzIiB0YXJnZXQ9Il9ibGFuayI+c3dhZ2dlci5kbmEtZXZvbHV0aW9ucy5jb20vdjMvYXBpLWRvY3M8L2E+IChvciBmcm9tIDxhIGhyZWY9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MS92My9hcGktZG9jcyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9sb2NhbGhvc3Q6ODA4MS92My9hcGktZG9jczwvYT4gb3IgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL0ROQS1Fdm9sdXRpb25zL0phdmEtUkVTVC1DbGllbnQtRXhhbXBsZXMvdHJlZS9tYXN0ZXIvc3JjL21haW4vcmVzb3VyY2VzL3N3YWdnZXIvdG91cm9wdGltaXplci9zcGVjL3RvdXJvcHRpbWl6ZXJfc3BlYy5qc29uIiB0YXJnZXQ9Il9ibGFuayI+R2l0SHViPC9hPikgaW50byBhIG5ldyBmaWxlIGNhbGxlZCBgYHRvdXJvcHRpbWl6ZXJfc3BlYy5qc29uYGAuCgoqKlVwZGF0ZSBKdW5lIDIwMjE6KioKCk5hdGl2ZSBKU09OIGlzIGFsc28gc3VwcG9ydGVkIGZyb20gbm93IG9uLgoKIyMjIE1ha2UgdGhlIHRvdXJvcHRpbWl6ZXJfc3BlYy5qc29uIGF2YWlsYWJsZQoKV2l0aGluIHRoZSBmaWxlIGBgcGFja2FnZS5qc29uYGAgb2YgdGhlIERlbW8tQXBwbGljYXRpb24gcHJvamVjdCwgdGhlIHNjcmlwdCBgYG5wbSBydW4gZ2VuZXJhdGU6YXBpYGAgaXMgZGVmaW5lZC4gSXQgZXhwZWN0cyB0aGUgYGB0b3Vyb3B0aW1pemVyX3NwZWMuanNvbmBgIHRvIGJlIHNhdmVkIGF0IGBgLi4vb3BlbmFwaS90b3Vyb3B0aW1pemVyX3NwZWMuanNvbmBgLiBNZWFuaW5nLCB5b3Ugd2lsbCBoYXZlIHRvIGNyZWF0ZSBhIG5ldyBmb2xkZXIgY2FsbGVkIGBgb3BlbmFwaWBgIG5leHQgdG8geW91ciBwcm9qZWN0IGZvbGRlciAoTk9UIGluc2lkZSB0aGUgcHJvamVjdCBmb2xkZXIgaXRzZWxmKSBhbmQgc2F2ZSB5b3VyIGBgdG91cm9wdGltaXplcl9zcGVjLmpzb25gYCBpbnNpZGUgdGhlIGBgb3BlbmFwaWBgIGZvbGRlci4KCklmIHRoaXMgaXMgZG9uZSwgeW91IGNhbiBjYWxsOgoKYGBgeG1sCm5wbSBydW4gZ2VuZXJhdGU6YXBpCmBgYAoKdG8gdXBkYXRlL2dlbmVyYXRlIHRoZSBUeXBlU2NyaXB0IG1vZGVscy4KCi0tLQoKIyMgVmlkZW8gLSBIb3cgdG8gdXNlIHRoZSBEZW1vLUFwcGxpY2F0aW9uCgpDbGljayB0byBvcGVuIHZpZGVvOgoKPGEgaHJlZj0iaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj0ycTdjWVlBckttOCAiIHRhcmdldD0iX2JsYW5rIj48aW1nIHNyYz0iaHR0cHM6Ly9pbWcueW91dHViZS5jb20vdmkvMnE3Y1lZQXJLbTgvbWF4cmVzZGVmYXVsdC5qcGciIHdpZHRoPSI1MDAiCnRpdGxlPSJUdXRvcmlhbCAtIEhvdyB0byB1c2UgdGhlIERlbW8tQXBwbGljYXRpb24iIGFsdD0iVHV0b3JpYWwgLSBIb3cgdG8gdXNlIHRoZSBEZW1vLUFwcGxpY2F0aW9uIj48L2E+Ci0tLQoKIyMgV2hhdCdzIG5leHQ/CgpXZSBhcmUgZ29pbmcgdG8gcHVibGlzaCBzb21lIHR1dG9yaWFscyBvbiAiaG93IHRvIGNyZWF0ZSB5b3VyIG93biBleGFtcGxlcyIuIEZ1cnRoZXIsIHdlIGFyZSBnb2luZyB0byBnaXZlIHNvbWUgbW9yZSBpbnNpZGVzIG9uIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIERlbW8tQXBwbGljYXRpb24uCgotLS0KCiMjIFRPRE8ncwoKKiBJbXByb3ZlIGluLWNvZGUgZG9jdW1lbnRhdGlvbi4KCi0tLQoKIyMgQWdyZWVtZW50CkZvciByZWFkaW5nIG91ciBsaWNlbnNlIGFncmVlbWVudCBhbmQgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gYWJvdXQgbGljZW5zZSBwbGFucywgcGxlYXNlIHZpc2l0IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmRuYS1ldm9sdXRpb25zLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPnd3dy5kbmEtZXZvbHV0aW9ucy5jb208L2E+LgoKLS0tIAoKIyMgQXV0aG9ycwpBIHByb2R1Y3QgYnkgW2RuYS1ldm9sdXRpb25zIF0oaHR0cHM6Ly93d3cuZG5hLWV2b2x1dGlvbnMuY29tKSZjb3B5OwoK
- readmeEtag: '"0c0288f5abdd2ff97fd5fe35167eb45f8d6f9caa"'
- readmeLastModified: Fri, 12 Jul 2024 17:16:06 GMT
+ IyBUb3VyT3B0aW1pemVyIEFuZ3VsYXIgRGVtbyBBcHBsaWNhdGlvbiAtIFNvdXJjZQoKPGEgaHJlZj0iaHR0cHM6Ly9kbmEtZXZvbHV0aW9ucy5jb20vIiB0YXJnZXQ9Il9ibGFuayI+PGltZyBzcmM9Imh0dHBzOi8vZG9jcy5kbmEtZXZvbHV0aW9ucy5jb20vaW5kZXhyZXMvZG5hLXRlbXAtbG9nby5wbmciIHdpZHRoPSIxMTAiCnRpdGxlPSJETkEtRXZvbHV0aW9ucyIgYWx0PSJETkEtRXZvbHV0aW9ucyI+PC9hPgoKVG8gdXRpbGl6ZSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vRE5BLUV2b2x1dGlvbnMvRG9ja2VyLVJFU1QtVG91ck9wdGltaXplci9ibG9iL21haW4vUkVBRE1FLm1kI2hvdy10by1zdGFydC1qb3B0dG91cm9wdGltaXplci1kb2NrZXIiIHRhcmdldD0iX2JsYW5rIj5KT3B0VG91ck9wdGltaXplci1Eb2NrZXI8L2E+LCB3ZSBjcmVhdGVkIGFuIEFuZ3VsYXItRGVtbyBhcHBsaWNhdGlvbi4gVGhpcyBkZW1vIGFwcGxpY2F0aW9uIGlzIGhvc3RlZCBvbiA8YSBocmVmPSJodHRwczovL2F6dXJlLm1pY3Jvc29mdC5jb20vIiB0YXJnZXQ9Il9ibGFuayI+TWljcm9zb2Z0IEF6dXJlPC9hPiBhbmQgaXMgbWFkZSBhdmFpbGFibGUgdmlhIDxhIGhyZWY9Imh0dHBzOi8vZGVtby5kbmEtZXZvbHV0aW9ucy5jb20vIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9kZW1vLmRuYS1ldm9sdXRpb25zLmNvbTwvYT4uIEhlcmUgd2Ugd291bGQgbGlrZSB0byBzaGFyZSB0aGUgbGF0ZXN0IHNvdXJjZS1jb2RlIG9mIHRoaXMgcHJvamVjdC4gVGhpcyBpcyBub3QgYSBjbGFzc2ljYWwgIkhlbGxvIFdvcmxkIiBwcm9qZWN0LCBhcyBpdCBpcyB1c2luZyBtdWx0aXBsZSBkZXBlbmRlbmNpZXMgYW5kIGFkdmFuY2VkIGNvbmNlcHRzLiBIb3dldmVyLCBmZWVsIGZyZWUgdG8gZXhwbG9yZSB0aGUgcHJvamVjdCBhbmQgZXh0cmFjdCB3aGF0ZXZlciB5b3UgbmVlZCB0byBnZXQgc3RhcnRlZCB3aXRoIEpPcHQuCgoqKlVwZGF0ZSBKdWx5IDEydGggMjAyNDoqKgoKRnJvbSBub3cgb24sIHRoZSBBbmd1bGFyIERlbW8gdXNlcyBBbmd1bGFyIDE4LiBXZSBhbHNvIHVwZGF0ZWQvdXBncmFkZWQgbXVsdGlwbGUgb3RoZXIgZGVwZW5kZW5jaWVzLiBUaGUgZ2VuZXJhdGVkIG1vZGVscyBhcmUgdXNpbmcgSk9wdC5Ub3VyT3B0aW1pemVyIHdpdGggKip2ZXJzaW9uIDEuMi43IG9yIGhpZ2hlcioqLgoKKipVcGRhdGUgSmFudWFyeSA3dGggMjAyNDoqKgoKRnJvbSBub3cgb24sIHRoZSBBbmd1bGFyIERlbW8gdXNlcyBBbmd1bGFyIDE3LiBXZSBhbHNvIHVwZGF0ZWQvdXBncmFkZWQgbXVsdGlwbGUgb3RoZXIgZGVwZW5kZW5jaWVzLiBUaGUgZ2VuZXJhdGVkIG1vZGVscyBhcmUgdXNpbmcgSk9wdC5Ub3VyT3B0aW1pemVyIHdpdGggKip2ZXJzaW9uIDEuMi42IG9yIGhpZ2hlcioqLiBJbiBhZGRpdGlvbiwgYSAiZnJlZSBtb3ZpbmcgZXhhbXBsZSIgd2FzIGFkZGVkLiBOb2RlcyBhbmQgUmVzb3VyY2VzIGNhbiBiZSBmcmVlbHkgcG9zaXRpb25lZCB2aWEgZHJhZyBhbmQgZHJvcC4KCioqVXBkYXRlIEp1bmUgOHRoIDIwMjE6KioKCkZyb20gbm93IG9uLCB0aGUgQW5ndWxhciBEZW1vIHVzZXMgb3VyIG5ldyBzd2FnZ2VyIGRlZmluaXRpb24gKHNlZSAKPGEgaHJlZj0iaHR0cHM6Ly9zd2FnZ2VyLmRuYS1ldm9sdXRpb25zLmNvbS92My9hcGktZG9jcy9PcHRpbWl6ZSIgdGFyZ2V0PSJfYmxhbmsiPnN3YWdnZXIuZG5hLWV2b2x1dGlvbnMuY29tL3YzL2FwaS1kb2NzL09wdGltaXplPC9hPikuIFRoaXMgcmVxdWlyZXMgdXNpbmcgSk9wdC5Ub3VyT3B0aW1pemVyIHdpdGggKip2ZXJzaW9uIDEuMC4zIG9yIGhpZ2hlcioqLiBUaGlzIHN3YWdnZXIgZGVmaW5pdGlvbiBoYXMgdGhlIGFkdmFudGFnZSB0aGF0IGl0IGVuYWJsZXMgYWxtb3N0IGFsbCBmZWF0dXJlcyBvZiBKT3B0IGF0IHRoZSBSRVNULWVuZHBvaW50LgoKKipVcGRhdGUgMjFzdCBTZXB0ZW1iZXIgMjAyMToqKgpUaGUgcmVwbGFjZW1lbnQgZGVzY3JpYmVkIGluICpVcGRhdGUgSnVuZSAyMDIxKiBpcyBubyBsb25nZXIgbmVjZXNzYXJ5LiBIb3dldmVyLCBtb2RlbHMgYWxyZWFkeSBjcmVhdGVkIG5lZWQgdG8gYmUgcmVjcmVhdGVkLiBGdXJ0aGVyLCB0aGUgbGVnYWN5IGVuZHBvaW50IGlzIGRyb3BwZWQsIGFuZCB0aGUgbWFpbi1lbmRwb2ludCBjaGFuZ2VkIHRvIDxhIGhyZWY9Imh0dHBzOi8vc3dhZ2dlci5kbmEtZXZvbHV0aW9ucy5jb20vdjMvYXBpLWRvY3MvT3B0aW1pemUiIHRhcmdldD0iX2JsYW5rIj5zd2FnZ2VyLmRuYS1ldm9sdXRpb25zLmNvbS92My9hcGktZG9jcy9PcHRpbWl6ZTwvYT4uCgotLS0KCiMgQ29udGFjdAoKSWYgeW91IG5lZWQgYW55IGhlbHAsIHBsZWFzZSBjb250YWN0IHVzIHZpYSBvdXIgY29tcGFueSB3ZWJzaXRlIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmRuYS1ldm9sdXRpb25zLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPnd3dy5kbmEtZXZvbHV0aW9ucy5jb208L2E+IG9yIHdyaXRlIGFuIGVtYWlsIHRvIDxhIGhyZWY9Im1haWx0bzppbmZvQGRuYS1ldm9sdXRpb25zLmNvbSI+aW5mb0BkbmEtZXZvbHV0aW9ucy5jb208L2E+LgoKLS0tCgojIyBGdXJ0aGVyIERvY3VtZW50YXRpb24gYW5kIGhlbHBmdWwgTGlua3MKCk91ciBjb250ZW50OgotIEZ1cnRoZXIgZG9jdW1lbnRhdGlvbiAtIDxhIGhyZWY9Imh0dHBzOi8vZG9jcy5kbmEtZXZvbHV0aW9ucy5jb20iIHRhcmdldD0iX2JsYW5rIj5kb2NzLmRuYS1ldm9sdXRpb25zLmNvbTwvYT4KLSBTcGVjaWFsIGZlYXR1cmVzCS0gPGEgaHJlZj0iaHR0cHM6Ly9kb2NzLmRuYS1ldm9sdXRpb25zLmNvbS9vdmVydmlld19kb2NzL3NwZWNpYWxfZmVhdHVyZXMvU3BlY2lhbF9GZWF0dXJlcy5odG1sIiB0YXJnZXQ9Il9ibGFuayI+T3ZlcnZpZXcgb2Ygc3BlY2lhbCBmZWF0dXJlczwvYT4KLSBPdXIgY29tcGFueSB3ZWJzaXRlIC0gPGEgaHJlZj0iaHR0cHM6Ly93d3cuZG5hLWV2b2x1dGlvbnMuY29tIiB0YXJnZXQ9Il9ibGFuayI+d3d3LmRuYS1ldm9sdXRpb25zLmNvbTwvYT4KLSBPdXIgb2ZmaWNpYWwgcmVwb3NpdG9yeSAtIDxhIGhyZWY9Imh0dHBzOi8vcHVibGljLnJlcG8uZG5hLWV2b2x1dGlvbnMuY29tIiB0YXJnZXQ9Il9ibGFuayI+cHVibGljLnJlcG8uZG5hLWV2b2x1dGlvbnMuY29tPC9hPgotIE91ciBvZmZpY2lhbCBKYXZhRG9jcyAtIDxhIGhyZWY9Imh0dHBzOi8vcHVibGljLmphdmFkb2MuZG5hLWV2b2x1dGlvbnMuY29tIiB0YXJnZXQ9Il9ibGFuayI+cHVibGljLmphdmFkb2MuZG5hLWV2b2x1dGlvbnMuY29tPC9hPgotIE91ciBZb3VUdWJlIGNoYW5uZWwgLSA8YSBocmVmPSJodHRwczovL3d3dy55b3V0dWJlLmNvbS9jaGFubmVsL1VDemZaakpMcDVScms3VTJVS3NPZjhGdyIgdGFyZ2V0PSJfYmxhbmsiPkROQSBUdXRvcmlhbHM8L2E+Ci0gT3VyIERvY2tlckh1YiBjaGFubmVsIC0gPGEgaHJlZj0iaHR0cHM6Ly9odWIuZG9ja2VyLmNvbS91L2RuYWV2b2x1dGlvbnMiIHRhcmdldD0iX2JsYW5rIj5ETkEgRG9ja2VySHViPC9hPgotIE91ciBMaW5rZWRJbiBjaGFubmVsIC0gPGEgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbXBhbnkvZG5hLWV2b2x1dGlvbnMvIiB0YXJnZXQ9Il9ibGFuayI+RE5BIExpbmtlZEluPC9hPgoKVGhpcmQtcGFydHk6Ci0gPGEgaHJlZj0iaHR0cHM6Ly9hbmd1bGFyLmlvL2NsaSIgdGFyZ2V0PSJfYmxhbmsiPkFuZ3VsYXIgQ0xJPC9hPgotIDxhIGhyZWY9Imh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL0BvcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3ItY2xpIiB0YXJnZXQ9Il9ibGFuayI+T3BlbiBBcGkgR2VuZXJhdG9yPC9hPgotIDxhIGhyZWY9Imh0dHBzOi8vd3d3Lm1va2thcHBzLmRlL2Jsb2cvaG93LXRvLWdlbmVyYXRlLWFuZ3VsYXItYW5kLXNwcmluZy1jb2RlLWZyb20tb3Blbi1hcGktc3BlY2lmaWNhdGlvbi8iIHRhcmdldD0iX2JsYW5rIj5HZW5lcmF0ZSBBbmd1bGFyIGFuZCBTcHJpbmcgY29kZSBmcm9tIE9wZW5BcGk8L2E+Ci0gPGEgaHJlZj0iaHR0cHM6Ly9tYXRlcmlhbC5hbmd1bGFyLmlvLyIgdGFyZ2V0PSJfYmxhbmsiPkFuZ3VsYXIgTWF0ZXJpYWw8L2E+CgotLS0KCiMjIE92ZXJ2aWV3CgoqIFtHZW5lcmFsIC0gRE5BIERlbW8gQXBwbGljYXRpb25dKCNnZW5lcmFsLWRuYS1kZW1vLWFwcGxpY2F0aW9uKQoqIFtTZXJ2ZSB3aXRoIERvY2tlciAocmVjb21tZW5kZWQpXSgjc2VydmUtd2l0aC1kb2NrZXItcmVjb21tZW5kZWQpCiogW1NlcnZlIHdpdGhvdXQgRG9ja2VyXSgjc2VydmUtd2l0aG91dC1kb2NrZXIpCiogW1VwZGF0ZS9HZW5lcmF0ZSB0aGUgdHlwZXNjcmlwdCBtb2RlbHMgdXNpbmcgT3BlbkFwaSBHZW5lcmF0b3JdKCN1cGRhdGUtZ2VuZXJhdGUtdGhlLXR5cGVzY3JpcHQtbW9kZWxzLXVzaW5nLW9wZW5hcGktZ2VuZXJhdG9yKQoqIFtWaWRlbyAtIEhvdyB0byB1c2UgdGhlIERlbW8tQXBwbGljYXRpb25dKCN2aWRlby1ob3ctdG8tdXNlLXRoZS1kZW1vLWFwcGxpY2F0aW9uKQoqIFtXaGF0J3MgbmV4dD9dKCN3aGF0LXMtbmV4dCkKCi0tLQoKIyMgR2VuZXJhbCAtIEROQSBEZW1vIEFwcGxpY2F0aW9uCgpUaGUgYW5ndWxhci1kZW1vIGFwcGxpY2F0aW9uIHdhcyBnZW5lcmF0ZWQgd2l0aCA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyLWNsaSIgdGFyZ2V0PSJfYmxhbmsiPkFuZ3VsYXIgQ0xJPC9hPi4gRnVydGhlciwgd2UgdXRpbGl6ZWQgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL09wZW5BUElUb29scy9vcGVuYXBpLWdlbmVyYXRvciIgdGFyZ2V0PSJfYmxhbmsiPk9wZW5BcGkgR2VuZXJhdG9yPC9hPiB0byBhdXRvbWF0aWNhbGx5IGNyZWF0ZSB0aGUgcmVxdWlyZWQgVHlwZVNjcmlwdCBtb2RlbHMgZnJvbSB0aGUgT3BlbkFwaSBkZWZpbml0aW9uIHByb3ZpZGVkIGZyb20gb3VyIFN3YWdnZXIgZW5kcG9pbnQgb2YgSk9wdFRvdXJPcHRpbWl6ZXIuCgo8aW1nIHNyYz0iaHR0cHM6Ly9kbmEtZXZvbHV0aW9ucy5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjAvMTEvaG93LXRvLXZpZGVvLXByZXYuZ2lmIiB3aWR0aD0iNDUwIgp0aXRsZT0iRE5BLUV2b2x1dGlvbnMgRGVtbyBBcHBsaWNhdGlvbiBQcmV2aWV3IiBhbHQ9IkROQS1Fdm9sdXRpb25zIERlbW8gQXBwbGljYXRpb24gUHJldmlldyI+CgpbIVtPcGVuIGluIFN0YWNrQmxpdHpdKGh0dHBzOi8vZGV2ZWxvcGVyLnN0YWNrYmxpdHouY29tL2ltZy9vcGVuX2luX3N0YWNrYmxpdHouc3ZnKV0oaHR0cHM6Ly9zdGFja2JsaXR6LmNvbS9naXRodWIvRE5BLUV2b2x1dGlvbnMvQW5ndWxhci1EZW1vLUFwcGxpY2F0aW9uLVNvdXJjZSkKCi0tLQoKIyMgU2VydmUgd2l0aCBEb2NrZXIgKHJlY29tbWVuZGVkKQoKV2UgcmVjb21tZW5kIHNlcnZpbmcgdGhlIERlbW8gQXBwbGljYXRpb24gd2l0aCBkb2NrZXIsIGVzcGVjaWFsbHkgd2hlbiB5b3UgYXJlIG5ldyB0byBBbmd1bGFyLiBUaGUgZG9ja2VyIGJ1aWxkIHdpbGwgaW5zdGFsbCBhbGwgdGhlIHJlcXVpcmVkIGRlcGVuZGVuY2llcyBmb3IgeW91LiBZb3UgY2FuIG1vZGlmeSB0aGUgY29kZSBpbiB5b3VyIGRlc2lyZWQgSURFIGFuZCBidWlsZCB5b3VyIGN1c3RvbSBpbWFnZS4KCiMjIyBQcmVyZXF1aXNpdGVzCgoxKSBJbnN0YWxsIGEgRG9ja2VyIGVudmlyb25tZW50IGFuZCBtYWtlIHN1cmUgYGBkb2NrZXJgYCBpcyBhdmFpbGFibGUgaW4geW91ciBjb21tYW5kIGxpbmUuCgoyKSBFdmVuIHRob3VnaCB0aGUgRGVtby1BcHBsaWNhdGlvbiBuZWVkcyBubyBUb3VyT3B0aW1pemVyIHRvIHN0YXJ0LCB5b3UgbmVlZCB0byBwcm92aWRlIGEgcnVubmluZyBUb3VyT3B0aW1pemVyIGluc3RhbmNlIHRvIHRlc3QgdGhlIGZ1bGwgZnVuY3Rpb25hbGl0eSBvZiB0aGUgRGVtby1BcHBsaWNhdGlvbi4gUGxlYXNlIHJlYWQgdGhlIGRvY3VtZW50YXRpb24gb24gaG93IHRvIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9ETkEtRXZvbHV0aW9ucy9Eb2NrZXItUkVTVC1Ub3VyT3B0aW1pemVyL2Jsb2IvbWFpbi9SRUFETUUubWQjaG93LXRvLXN0YXJ0LWpvcHR0b3Vyb3B0aW1pemVyLWRvY2tlciIgdGFyZ2V0PSJfYmxhbmsiPnN0YXJ0IHRoZSBUb3VyT3B0aW1pemVyPC9hPi4KCgojIyMgU3RhcnQgdGhlIGltYWdlCgpQbGVhc2UgdmlzaXQgPGEgaHJlZj0iaHR0cHM6Ly9odWIuZG9ja2VyLmNvbS9yZXBvc2l0b3J5L2RvY2tlci9kbmFldm9sdXRpb25zL2pvcHRfZGVtb2FwcGxpY2F0aW9uL2dlbmVyYWwiIHRhcmdldD0iX2JsYW5rIj5odHRwczovL2h1Yi5kb2NrZXIuY29tL3JlcG9zaXRvcnkvZG9ja2VyL2RuYWV2b2x1dGlvbnMvam9wdF9kZW1vYXBwbGljYXRpb24vZ2VuZXJhbDwvYT4gYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGlmIHlvdSB3YW50IHRvIHN0YXJ0IHRoZSBwcmUtYnVpbHQgaW1hZ2Ugd2l0aG91dCB1c2luZyB0aGUgc291cmNlcy4gCgojIyMgQnVpbGQgdGhlIGltYWdlIGZyb20gc2NyYXRjaAoKMSkgQ2xvbmUgdGhpcyByZXBvc2l0b3J5IGFuZCBvcGVuIGl0IGluIHlvdXIgZGVzaXJlZCBJREUgKGUuZy4gPGEgaHJlZj0iaHR0cHM6Ly9jb2RlLnZpc3VhbHN0dWRpby5jb20vIiB0YXJnZXQ9Il9ibGFuayI+VmlzdWFsIFN0dWRpbyBDb2RlPC9hPikgYW5kIG1vZGlmeSB0aGUgY29kZSBpZiB5b3UgbGlrZS4KMikgPGEgaHJlZj0iaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9jb21tYW5kbGluZS9idWlsZC8iIHRhcmdldD0iX2JsYW5rIj5CdWlsZDwvYT4gdGhlIGRvY2tlciBpbWFnZSB1c2luZyB0aGUgYGBEb2NrZXJmaWxlYGAgaW4gdGhlIG1haW4gcHJvamVjdCBwYXRoLCBieSBydW5uaW5nOgoKQVRURU5USU9OOiBOb2RlLmpzIGR1cmluZyB0aGUgYnVpbGQgcHJvY2VzcyBjYW4gYmUgcXVpdGUgbWVtb3J5IGNvbnN1bWluZy4gU28gbWFrZSBzdXJlIHlvdXIgZG9ja2VyIGVudmlyb25tZW50IGhhcyBhdCBsZWFzdCA0IEdCIG9mIFJhbS4gCgpgYGB4bWwKZG9ja2VyIGJ1aWxkIC10IGRuYV9jdXN0b21fZGVtb19pbWFnZSAuCmBgYAoKIyMjIFJ1biBhIGNvbnRhaW5lcgoKMSkgUnVuIHRoZSBpbWFnZSBiYXNlZCBvbiB5b3VyIGZyZXNobHkgY3JlYXRlZCBpbWFnZToKCmBgYHhtbApkb2NrZXIgcnVuIC1kIC0tcm0gXAoJLS1uYW1lIG15Sk9wdFRvdXJPcHRpbWl6ZXJEZW1vIFwKCS1wIDMwMDA6ODAgXAoJLXYgJHtQV0R9Oi91c3Ivc3JjL2FwcCBcCgktZSBKT1BUX1NXQUdHRVJfSE9TVD0iaHR0cDovL2xvY2FsaG9zdCIgXAoJLWUgSk9QVF9TV0FHR0VSX1BPUlQ9IjgwODEiIFwKCWRuYV9jdXN0b21fZGVtb19pbWFnZQpgYGAKClNhbWUgY29tbWFuZCBhcyBhIHNpbmdsZSBsaW5lOgoKYGBgeG1sCmRvY2tlciBydW4gLWQgLS1ybSAtLW5hbWUgbXlKT3B0VG91ck9wdGltaXplckRlbW8gLXAgMzAwMDo4MCAtdiAke1BXRH06L3Vzci9zcmMvYXBwIC1lIEpPUFRfU1dBR0dFUl9IT1NUPSJodHRwOi8vbG9jYWxob3N0IiAtZSBKT1BUX1NXQUdHRVJfUE9SVD0iODA4MSIgZG5hX2N1c3RvbV9kZW1vX2ltYWdlCmBgYAoKT3BlbiA8YSBocmVmPSJodHRwOi8vbG9jYWxob3N0OjMwMDAiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vbG9jYWxob3N0OjMwMDA8L2E+LCBhbmQgeW91IHNob3VsZCBzZWUgdGhlIERlbW8gQXBwbGljYXRpb24uIElmIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9ETkEtRXZvbHV0aW9ucy9Eb2NrZXItUkVTVC1Ub3VyT3B0aW1pemVyL2Jsb2IvbWFpbi9SRUFETUUubWQjaG93LXRvLXN0YXJ0LWpvcHR0b3Vyb3B0aW1pemVyLWRvY2tlciIgdGFyZ2V0PSJfYmxhbmsiPkpPcHRUb3VyT3B0aW1pemVyPC9hPiBpcyBub3QgcnVubmluZyBpbiB0aGUgYmFja2dyb3VuZCwgeW91IGNhbiAqKk5PVCoqIHN0YXJ0IGFueSBPcHRpbWl6YXRpb24uIEhvd2V2ZXIsIHlvdSBzaG91bGQgc2VlIHRoZSBzdGFydGluZyBwYWdlIG9mIHRoZSBEZW1vIEFwcGxpY2F0aW9uLiBCeSBkZWZhdWx0LCB0aGUgVG91ck9wdGltaXplciBpcyBhc3N1bWVkIHRvIGJlIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vbG9jYWxob3N0OjgwODEiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vbG9jYWxob3N0OjgwODE8L2E+IGFuZCBpcyBzdGFydGVkIHdpdGggdGhlICJjb3JzIiBwcm9maWxlLiBZb3UgY2FuIGFkanVzdCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgaG9zdCBhbmQgcG9ydCBpbiB0aGUgYGBlbnZpcm9ubWVudC50c2BgIGZpbGUuCgpZb3UgY2FuIHByb3ZpZGUgdGhyZWUgZW52aXJvbm1lbnQgdmFyaWFibGVzOgoqIGBgSk9QVF9TV0FHR0VSX0hPU1RgYDogVGhlIGFkZHJlc3Mgb2YgeW91ciBydW5uaW5nIFRvdXJPcHRpbWl6ZXIuIElmIHlvdSBydW4gdGhlIGRvY2tlciBpbWFnZSBvZiB0aGUgVG91ck9wdGltaXplciBsb2NhbGx5LCB0aGlzIGlzIGBgaHR0cDovL2xvY2FsaG9zdGBgLgoqIGBgSk9QVF9TV0FHR0VSX1BPUlRgYDogVGhlIHBvcnQgb2YgeW91ciBydW5uaW5nIFRvdXJPcHRpbWl6ZXIuIElmIHlvdSBydW4gdGhlIGRvY2tlciBpbWFnZSBvZiB0aGUgVG91ck9wdGltaXplciBsb2NhbGx5LCB0aGlzIGlzIGBgODA4MWBgLgoqIGBgSU5QUk9EVUNUSU9OYGA6IFRoaXMgdmFsdWUgaXMgYGBmYWxzZWBgIGJ5IGRlZmF1bHQuIElmIHlvdSBhcmUgY2hhbmdpbmcgaXQgdG8gYGB0cnVlYGAsIG91ciBvZmZpY2lhbCBUb3VyT3B0aW1pemVyIGVuZHBvaW50IGlzIHVzZWQgYnkgZGVmYXVsdC4gSG93ZXZlciwgKip0cnkgdG8gYXZvaWQgdGhpcyoqLCBhcyB3ZSBhcmUgZ29pbmcgdG8gYmxvY2sgSVBzIHdpdGggdG9vIG1hbnkgcmVxdWVzdHMuIEZ1cnRoZXIsIG91ciBvZmZpY2lhbCBlbmRwb2ludCBoYXMgYSBsaW1pdGF0aW9uIG9mIDIwIGVsZW1lbnRzIHRvIGJlIG9wdGltaXplZCwgcmVnYXJkbGVzcyBvZiB5b3VyIGxpY2Vuc2UuIFlvdSBjYW4gY2hhbmdlIHRoZSBwcm9kdWN0aW9uIGVudmlyb25tZW50IHNldHRpbmdzIGJ5IGVkaXRpbmcgdGhlIGZpbGU6IGBgZW52aXJvbm1lbnQucHJvZC50c2BgLgoKCi0tLQoKIyMgU2VydmUgd2l0aG91dCBEb2NrZXIKCk9mIGNvdXJzZSwgeW91IGNhbiBob3N0IHRoZSBEZW1vLUFwcGxpY2F0aW9uIEFuZ3VsYXIgUHJvamVjdCBsb2NhbGx5IHdpdGhvdXQgdXNpbmcgZG9ja2VyLiBIb3dldmVyLCB5b3UgaGF2ZSB0byBtYWtlIHN1cmUgeW91ciBlbnZpcm9ubWVudCBpcyBzZXQgdXAgY29ycmVjdGx5LgoKIyMjIFByZXJlcXVpc2l0ZXMgKGZvciB1c2luZyBgYG5wbWBgIGFuZCBgYG5nYGApCgoxKSBGaXJzdCwgeW91IG5lZWQgdG8gbWFrZSBzdXJlIDxhIGhyZWY9Imh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9nZXQtbnBtIiB0YXJnZXQ9Il9ibGFuayI+bnBtIChOb2RlIFBhY2thZ2UgTWFuYWdlcik8L2E+IGlzIGluc3RhbGxlZC4gICAKCjIpIEZ1cnRoZXIsIHlvdSBuZWVkIHRvIGluc3RhbGwgPGEgaHJlZj0iaHR0cHM6Ly9hbmd1bGFyLmlvL2NsaSIgdGFyZ2V0PSJfYmxhbmsiPm5nIChBbmd1bGFyIENMSSk8L2E+CgozKSBFdmVuIHRob3VnaCB0aGUgRGVtby1BcHBsaWNhdGlvbiBuZWVkcyBubyBUb3VyT3B0aW1pemVyIHRvIHN0YXJ0LCB5b3UgbmVlZCB0byBwcm92aWRlIGEgcnVubmluZyBUb3VyT3B0aW1pemVyIGluc3RhbmNlIHRvIHRlc3QgdGhlIGZ1bGwgZnVuY3Rpb25hbGl0eSBvZiB0aGUgRGVtby1BcHBsaWNhdGlvbi4gUGxlYXNlIHJlYWQgdGhlIGRvY3VtZW50YXRpb24gb24gaG93IHRvIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9ETkEtRXZvbHV0aW9ucy9Eb2NrZXItUkVTVC1Ub3VyT3B0aW1pemVyL2Jsb2IvbWFpbi9SRUFETUUubWQjaG93LXRvLXN0YXJ0LWpvcHR0b3Vyb3B0aW1pemVyLWRvY2tlciIgdGFyZ2V0PSJfYmxhbmsiPnN0YXJ0IHRoZSBUb3VyT3B0aW1pemVyPC9hPi4KCgojIyMgU2VydmUgdGhlIERlbW8gQXBwbGljYXRpb24KCjEuIENsb25lIHRoaXMgcmVwb3NpdG9yeSBhbmQgb3BlbiBpdCBpbiB5b3VyIGRlc2lyZWQgSURFIChlLmcuIDxhIGhyZWY9Imh0dHBzOi8vY29kZS52aXN1YWxzdHVkaW8uY29tLyIgdGFyZ2V0PSJfYmxhbmsiPlZpc3VhbCBTdHVkaW8gQ29kZTwvYT4pIGlmIHlvdSBsaWtlIHRvIG1vZGlmeSB0aGUgY29kZS4KCjIuIFlvdSBjYW4gc2VydmUgdGhlIHByb2plY3QgYnkgdXNpbmcgYGBuZyBzZXJ2ZWBgIGZyb20gd2l0aGluIHRoZSBwcm9qZWN0IHBhdGguCgozLiBPcGVuIDxhIGhyZWY9Imh0dHA6Ly9sb2NhbGhvc3Q6NTAwMCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9sb2NhbGhvc3Q6NTAwMDwvYT4sIGFuZCB5b3Ugc2hvdWxkIHNlZSB0aGUgRGVtbyBBcHBsaWNhdGlvbi4gSWYgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL0ROQS1Fdm9sdXRpb25zL0RvY2tlci1SRVNULVRvdXJPcHRpbWl6ZXIvYmxvYi9tYWluL1JFQURNRS5tZCNob3ctdG8tc3RhcnQtam9wdHRvdXJvcHRpbWl6ZXItZG9ja2VyIiB0YXJnZXQ9Il9ibGFuayI+Sk9wdFRvdXJPcHRpbWl6ZXI8L2E+IGlzIG5vdCBydW5uaW5nIGluIHRoZSBiYWNrZ3JvdW5kLCB5b3UgY2FuICoqTk9UKiogc3RhcnQgYW55IE9wdGltaXphdGlvbi4gSG93ZXZlciwgeW91IHNob3VsZCBzZWUgdGhlIHN0YXJ0aW5nIHBhZ2Ugb2YgdGhlIERlbW8gQXBwbGljYXRpb24uIEJ5IGRlZmF1bHQsIHRoZSBUb3VyT3B0aW1pemVyIGlzIGFzc3VtZWQgdG8gYmUgYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MSIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9sb2NhbGhvc3Q6ODA4MTwvYT4gYW5kIGlzIHN0YXJ0ZWQgd2l0aCB0aGUgImNvcnMiIHByb2ZpbGUuIFlvdSBjYW4gYWRqdXN0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciBob3N0IGFuZCBwb3J0IGluIHRoZSBgYGVudmlyb25tZW50LnRzYGAgZmlsZS4gVGhlIGRlZmF1bHQgcG9ydCwgdGhlIERlbW8gQXBwbGljYXRpb24gaXMgaG9zdGVkLCBpcyBwb3J0IDUwMDAsIHlvdSBjYW4gY2hhbmdlIHRoaXMgYmVoYXZpb3IgaW4gdGhlIGBgYW5ndWxhci5qc29uYGAuCgooUGxlYXNlIGFsc28gcmVhZCB0aGUgPGEgaHJlZj0iaHR0cHM6Ly9hbmd1bGFyLmlvL2NsaS9idWlsZCIgdGFyZ2V0PSJfYmxhbmsiPkFuZ3VsYXIgRG9jdW1lbnRhdGlvbjwvYT4gdG8gZ2V0IGZ1cnRoZXIgaGVscCBvbiBob3cgdG8gYnVpbGQgcHJvamVjdHMuKQoKCi0tLQojIyBVcGRhdGUvR2VuZXJhdGUgdGhlIFR5cGVTY3JpcHQgbW9kZWxzIHVzaW5nIE9wZW5BcGkgR2VuZXJhdG9yCgpJZiB5b3Ugd291bGQgbGlrZSB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIHRoZSBtb2RlbHMgYmFzZWQgb24gdGhlIDxhIGhyZWY9Imh0dHBzOi8vc3dhZ2dlci5kbmEtZXZvbHV0aW9ucy5jb20vdjMvYXBpLWRvY3MiIHRhcmdldD0iX2JsYW5rIj5sYXRlc3QgU3dhZ2dlciBBUEktRG9jczwvYT4gb2YgdGhlCjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9ETkEtRXZvbHV0aW9ucy9Eb2NrZXItUkVTVC1Ub3VyT3B0aW1pemVyIiB0YXJnZXQ9Il9ibGFuayI+VG91ck9wdGltaXplcjwvYT4sIHlvdSB3aWxsIGhhdmUgdG8gaW5zdGFsbCA8YSBocmVmPSJodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9Ab3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yLWNsaSIgdGFyZ2V0PSJfYmxhbmsiPk9wZW5hcGktR2VuZXJhdG9yLUNMSTwvYT4uCgpOb3RlOiBPcGVuQXBpR2VuZXJhdG9yIGNhbiBhbHNvIGJlIHJ1biBhcyBEb2NrZXIgY29udGFpbmVyIG9yIE1hdmVuIGRlcGVkZW5jeS4KCiMjIyBDcmVhdGUgYSB0b3Vyb3B0aW1pemVyX3NwZWMuanNvbiBmaWxlClRoZSBgYHRvdXJvcHRpbWl6ZXJfc3BlYy5qc29uYGAgY29udGFpbmluZyB0aGUgQVBJLURvY3MgaXMgbm90IHBhcnQgb2YgdGhpcyByZXBvc2l0b3J5LiBDb3B5IGFuZCBwYXN0ZSB0aGUgU3dhZ2dlciBkZWZpbml0aW9uIHVuZGVyIDxhIGhyZWY9Imh0dHBzOi8vc3dhZ2dlci5kbmEtZXZvbHV0aW9ucy5jb20vdjMvYXBpLWRvY3MiIHRhcmdldD0iX2JsYW5rIj5zd2FnZ2VyLmRuYS1ldm9sdXRpb25zLmNvbS92My9hcGktZG9jczwvYT4gKG9yIGZyb20gPGEgaHJlZj0iaHR0cDovL2xvY2FsaG9zdDo4MDgxL3YzL2FwaS1kb2NzIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2xvY2FsaG9zdDo4MDgxL3YzL2FwaS1kb2NzPC9hPiBvciA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vRE5BLUV2b2x1dGlvbnMvSmF2YS1SRVNULUNsaWVudC1FeGFtcGxlcy90cmVlL21hc3Rlci9zcmMvbWFpbi9yZXNvdXJjZXMvc3dhZ2dlci90b3Vyb3B0aW1pemVyL3NwZWMvdG91cm9wdGltaXplcl9zcGVjLmpzb24iIHRhcmdldD0iX2JsYW5rIj5HaXRIdWI8L2E+KSBpbnRvIGEgbmV3IGZpbGUgY2FsbGVkIGBgdG91cm9wdGltaXplcl9zcGVjLmpzb25gYC4KCioqVXBkYXRlIEp1bmUgMjAyMToqKgoKTmF0aXZlIEpTT04gaXMgYWxzbyBzdXBwb3J0ZWQgZnJvbSBub3cgb24uCgojIyMgTWFrZSB0aGUgdG91cm9wdGltaXplcl9zcGVjLmpzb24gYXZhaWxhYmxlCgpXaXRoaW4gdGhlIGZpbGUgYGBwYWNrYWdlLmpzb25gYCBvZiB0aGUgRGVtby1BcHBsaWNhdGlvbiBwcm9qZWN0LCB0aGUgc2NyaXB0IGBgbnBtIHJ1biBnZW5lcmF0ZTphcGlgYCBpcyBkZWZpbmVkLiBJdCBleHBlY3RzIHRoZSBgYHRvdXJvcHRpbWl6ZXJfc3BlYy5qc29uYGAgdG8gYmUgc2F2ZWQgYXQgYGAuLi9vcGVuYXBpL3RvdXJvcHRpbWl6ZXJfc3BlYy5qc29uYGAuIE1lYW5pbmcsIHlvdSB3aWxsIGhhdmUgdG8gY3JlYXRlIGEgbmV3IGZvbGRlciBjYWxsZWQgYGBvcGVuYXBpYGAgbmV4dCB0byB5b3VyIHByb2plY3QgZm9sZGVyIChOT1QgaW5zaWRlIHRoZSBwcm9qZWN0IGZvbGRlciBpdHNlbGYpIGFuZCBzYXZlIHlvdXIgYGB0b3Vyb3B0aW1pemVyX3NwZWMuanNvbmBgIGluc2lkZSB0aGUgYGBvcGVuYXBpYGAgZm9sZGVyLgoKSWYgdGhpcyBpcyBkb25lLCB5b3UgY2FuIGNhbGw6CgpgYGB4bWwKbnBtIHJ1biBnZW5lcmF0ZTphcGkKYGBgCgp0byB1cGRhdGUvZ2VuZXJhdGUgdGhlIFR5cGVTY3JpcHQgbW9kZWxzLgoKLS0tCgojIyBWaWRlbyAtIEhvdyB0byB1c2UgdGhlIERlbW8tQXBwbGljYXRpb24KCkNsaWNrIHRvIG9wZW4gdmlkZW86Cgo8YSBocmVmPSJodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PTJxN2NZWUFyS204ICIgdGFyZ2V0PSJfYmxhbmsiPjxpbWcgc3JjPSJodHRwczovL2ltZy55b3V0dWJlLmNvbS92aS8ycTdjWVlBckttOC9tYXhyZXNkZWZhdWx0LmpwZyIgd2lkdGg9IjUwMCIKdGl0bGU9IlR1dG9yaWFsIC0gSG93IHRvIHVzZSB0aGUgRGVtby1BcHBsaWNhdGlvbiIgYWx0PSJUdXRvcmlhbCAtIEhvdyB0byB1c2UgdGhlIERlbW8tQXBwbGljYXRpb24iPjwvYT4KLS0tCgojIyBXaGF0J3MgbmV4dD8KCldlIGFyZSBnb2luZyB0byBwdWJsaXNoIHNvbWUgdHV0b3JpYWxzIG9uICJob3cgdG8gY3JlYXRlIHlvdXIgb3duIGV4YW1wbGVzIi4gRnVydGhlciwgd2UgYXJlIGdvaW5nIHRvIGdpdmUgc29tZSBtb3JlIGluc2lkZXMgb24gdGhlIHN0cnVjdHVyZSBvZiB0aGUgRGVtby1BcHBsaWNhdGlvbi4KCi0tLQoKIyMgVE9ETydzCgoqIEltcHJvdmUgaW4tY29kZSBkb2N1bWVudGF0aW9uLgoKLS0tCgojIyBBZ3JlZW1lbnQKRm9yIHJlYWRpbmcgb3VyIGxpY2Vuc2UgYWdyZWVtZW50IGFuZCBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiBhYm91dCBsaWNlbnNlIHBsYW5zLCBwbGVhc2UgdmlzaXQgPGEgaHJlZj0iaHR0cHM6Ly93d3cuZG5hLWV2b2x1dGlvbnMuY29tIiB0YXJnZXQ9Il9ibGFuayI+d3d3LmRuYS1ldm9sdXRpb25zLmNvbTwvYT4uCgotLS0gCgojIyBBdXRob3JzCkEgcHJvZHVjdCBieSBbZG5hLWV2b2x1dGlvbnMgXShodHRwczovL3d3dy5kbmEtZXZvbHV0aW9ucy5jb20pJmNvcHk7Cgo=
+ readmeEtag: '"b9882c45218afe3d9d2a74d4a655b17a77916e2c"'
+ readmeLastModified: Tue, 20 Aug 2024 13:36:19 GMT
repositoryId: 340891355
description: The latest source code of our Angular-Demo Application.
created: '2021-02-21T12:03:16Z'
- updated: '2024-07-12T17:21:46Z'
+ updated: '2024-08-20T13:36:33Z'
language: TypeScript
archived: false
stars: 4
@@ -19821,8 +19821,8 @@
forks: 2
owner: DNA-Evolutions
logo: https://avatars.githubusercontent.com/u/62150493?v=4
- repoEtag: '"5b7aa6de692461c916920245facabe656a8e5df1368b9c9283431fd8c5b9efaa"'
- repoLastModified: Fri, 12 Jul 2024 17:21:46 GMT
+ repoEtag: '"8d7631e966cdd2906dc07729ad20f0d703b9162d5fac3c92037ecdf03e8b68ae"'
+ repoLastModified: Tue, 20 Aug 2024 13:36:33 GMT
foundInMaster: true
category: Server Implementations
id: 32f0648c116dcc86eaec5b5beec2a428
@@ -20999,7 +20999,7 @@
OpenAPI Server URL templating parser, validator and substitution
mechanism.
created: '2024-06-03T08:05:16Z'
- updated: '2024-08-09T23:00:32Z'
+ updated: '2024-08-20T22:27:53Z'
language: JavaScript
archived: false
stars: 3
@@ -21008,8 +21008,8 @@
owner: swaggerexpert
logo: https://avatars.githubusercontent.com/u/172408630?v=4
license: Apache-2.0
- repoEtag: '"9f53d2524c0af542b14c6baba3e0f235334d75e18d4f56710ea67946c1b10850"'
- repoLastModified: Fri, 09 Aug 2024 23:00:32 GMT
+ repoEtag: '"3114f9cebbf414f533cea4fe94cce7800b0ae23553e05651b22d7a429816bddd"'
+ repoLastModified: Tue, 20 Aug 2024 22:27:53 GMT
category: Parsers
foundInMaster: true
- source: openapi3 tags
@@ -22104,17 +22104,17 @@
repositoryId: 469345400
description: Merge and Serve OpenAPI/Swagger Documents
created: '2022-03-13T11:03:23Z'
- updated: '2023-09-22T16:20:55Z'
+ updated: '2024-08-20T08:02:50Z'
language: Java
archived: false
- stars: 3
+ stars: 4
watchers: 1
forks: 0
owner: clowre
logo: https://avatars.githubusercontent.com/u/91081481?v=4
license: MIT
- repoEtag: '"0d5e36d80c552918d6f5f1fd6cd69cd2de71f1ed87dcb31eba224f93e38e6c50"'
- repoLastModified: Fri, 22 Sep 2023 16:20:55 GMT
+ repoEtag: '"f10e026bd3d8d8039dd87893620d26950ce1db6a54ffdc86068a6bf70f299c1a"'
+ repoLastModified: Tue, 20 Aug 2024 08:02:50 GMT
foundInMaster: true
category: Parsers
id: a0183f83fb00660e796a6fd36906afc6
@@ -22296,7 +22296,7 @@
owner: tidepool-org
logo: https://avatars.githubusercontent.com/u/4390820?v=4
license: BSD-2-Clause
- repoEtag: '"0e1353cb3688b4c4933dcda32c4dbd18a3adf56186e9b5cb3f64aa83274f3e3a"'
+ repoEtag: '"61e56a5a4d1c6ad014eceab966ef95cd4b476656777a4043c35d1aded4d91fc5"'
repoLastModified: Tue, 13 Aug 2024 21:16:17 GMT
category: Server Implementations
foundInMaster: true
@@ -22965,7 +22965,7 @@
repositoryId: 730126319
description: OpenAPI Path Templating parser, validator and resolver.
created: '2023-12-11T09:07:36Z'
- updated: '2024-08-07T19:04:00Z'
+ updated: '2024-08-20T18:14:52Z'
language: JavaScript
archived: false
stars: 2
@@ -22974,8 +22974,8 @@
owner: swaggerexpert
logo: https://avatars.githubusercontent.com/u/172408630?v=4
license: Apache-2.0
- repoEtag: '"492681b3252ca03f7aebb44618f2fbcd7e280063015ab79354825afcf2047fa5"'
- repoLastModified: Wed, 07 Aug 2024 19:04:00 GMT
+ repoEtag: '"3f9f6bd6fccfecb7ee420a7f0aebdbf57539a8a0e40944d228adf01f59c32264"'
+ repoLastModified: Tue, 20 Aug 2024 18:14:52 GMT
category: Parsers
foundInMaster: true
- source: openapi3 tags
@@ -25240,10 +25240,10 @@
- source:
- openapi3 tags
- openapi31 tags
- repository: https://github.com/wkarwacki/trust
+ repository: https://github.com/wkarwacki/python-openapi-generator-rust
v3: true
v3_1: true
- id: 53fec6c82b59b3e470d51c6bf9d59f4d
+ id: 543ce5060a72d51fc2b5db044476e02f
repositoryMetadata:
base64Readme: >-
PHA+CiAgPGI+UHl0aG9uIFNlcnZlciBPcGVuQVBJIEdlbmVyYXRvciwgUHl0aG9uIENsaWVudCBPcGVuQVBJIEdlbmVyYXRvciwgS290bGluIFNlcnZlciBPcGVuQVBJIEdlbmVyYXRvcjwvYj4KPC9wPgoKLS0tCgo8cCBhbGlnbj0iY2VudGVyIj4KICA8Yj5Eb2N1bWVudGF0aW9uLCBzb3VyY2UgY29kZTogPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3drYXJ3YWNraS90cnVzdCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vZ2l0aHViLmNvbS93a2Fyd2Fja2kvdHJ1c3Q8L2E+PC9iPgo8L3A+CgotLS0KIyBUcnVzdCBTcGVjCgpUcnVzdCBTcGVjIGlzIGEgd2ViIGludGVncmF0aW9uIHNwZWNpZmljYXRpb24gYW5kIGEgc2V0IG9mIGNvZGUgZ2VuZXJhdG9ycyBhaW1pbmcgdG8gYmUgYSBzdWJzdGl0dXRlIGZvciBPcGVuQVBJLiBJdCBwcm92aWRlcyBhIHVuaWZpZWQgd2F5IHRvIGRlc2NyaWJlIGRhdGEgdHJhbnNmZXIgaW50ZXJmYWNlcyBhbmQgZ2VuZXJhdGVzIG1vZGVybiwgdHlwZS1zYWZlIGNvZGUuCgojIyBUYWJsZSBvZiBDb250ZW50cwotIFsqKnRsZHI7IEkganVzdCB3YW50IHRvIGdsdWUgbXkgc2VydmljZXMgdG9nZXRoZXIqKl0oI2ktanVzdC13YW50LXRvLWdsdWUtbXktc2VydmljZXMtdG9nZXRoZXIpCi0gW1NwZWNpZmljYXRpb25dKCNzcGVjaWZpY2F0aW9uKQogIC0gW092ZXJ2aWV3XSgjb3ZlcnZpZXcpCiAgLSBbQ29tbW9uIFVzZSBDYXNlc10oI2NvbW1vbi11c2UtY2FzZXMpCiAgLSBbT3BlbkFQSSBDb252ZXJzaW9uXSgjb3BlbmFwaS1jb252ZXJzaW9uKQotIFtDb2RlIEdlbmVyYXRpb25dKCNjb2RlLWdlbmVyYXRpb24pCiAgLSBbVXNhZ2VdKCN1c2FnZSkKICAgIC0gW1dpdGggRG9ja2VyXSgjd2l0aC1kb2NrZXIpCiAgICAtIFtGcm9tIFNvdXJjZV0oI2Zyb20tc291cmNlKQogIC0gW1N1cHBvcnRlZCBHZW5lcmF0b3JzXSgjc3VwcG9ydGVkLWdlbmVyYXRvcnMpCiAgICAtIFtFeHBlcmltZW50YWwgR2VuZXJhdG9yc10oI2V4cGVyaW1lbnRhbC1nZW5lcmF0b3JzKQoKIyMgSSBqdXN0IHdhbnQgdG8gZ2x1ZSBteSBzZXJ2aWNlcyB0b2dldGhlcgpJbnN0YWxsIFRydXN0OgpgYGBzaGVsbAokIHBpcCBpbnN0YWxsIHRydXN0c3BlY2NsaQpgYGAKVGhlbiwgcnVuOgpgYGBzaGVsbAokIHRydXN0CgpVc2FnZTogdHJ1c3QgPENPTU1BTkQ+CgpDb21tYW5kczoKZnJvbS1vcGVuLWFwaSAgCnRvLW9wZW4tYXBpICAgIApnZW5lcmF0ZSAgICAgICAKaGVscCAgICAgICAgICAgUHJpbnQgdGhpcyBtZXNzYWdlIG9yIHRoZSBoZWxwIG9mIHRoZSBnaXZlbiBzdWJjb21tYW5kKHMpCgpPcHRpb25zOgotaCwgLS1oZWxwICBQcmludCBoZWxwCmBgYAoKLSBJZiB5b3UgYWxyZWFkeSBoYXZlIGFuIE9wZW5BUEkgc3BlYzoKICAxLiBmaXJzdCBjb252ZXJ0IGl0IHRvIFRydXN0IHNwZWMgd2l0aCBgZnJvbS1vcGVuLWFwaWAgY29tbWFuZAogIDIuIGFuZCB0aGVuIGdlbmVyYXRlIHRoZSBnbHVlIGNvZGUgd2l0aCBgZ2VuZXJhdGVgIGNvbW1hbmQuCgogID4gOmV4Y2xhbWF0aW9uOiBOb3RlIHRoYXQgeW91IG1heSBlYXNpbHkgYXV0b21hdGUgdGhlIHdob2xlIHByb2Nlc3MgY29tYmluaW5nIHRoZSB0d28gc3RlcHMgYWJvdmUsIGhvd2V2ZXIgaXQgaXMgcmVjb21tZW5kZWQgdG8gbWFrZSBhIG1pZ3JhdGlvbiBvbmNlIGFuZCBsZXZlcmFnZSBUcnVzdCBzcGVjJ3MgZXhwcmVzc2l2ZW5lc3MgaW4gbG9uZy10ZXJtLgoKLSAqKldpdGhvdXQgYW4gT3BlbkFQSSBzcGVjOioqCiAgLSBTdGFydCBkaXJlY3RseSB3aXRoIFRydXN0IHNwZWMuCgotICoqVG8gY29udGludWUgdXNpbmcgT3BlbkFQSSBmb3IgY29kZSBnZW5lcmF0aW9uOioqCiAgLSBVc2UgVHJ1c3Qgc3BlYyBhcyBhbiBpbnRlcm1lZGlhdGUgZm9ybWF0IHdpdGggdGhlIGB0by1vcGVuLWFwaWAgY29tbWFuZC4KCiMjIFNwZWNpZmljYXRpb24KVHJ1c3Qgc3BlY2lmaWNhdGlvbiBlbmhhbmNlcyBjdXJyZW50IGludGVncmF0aW9uIHN0YW5kYXJkcyBsaWtlIFtPcGVuQVBJXShodHRwczovL2dpdGh1Yi5jb20vT0FJL09wZW5BUEktU3BlY2lmaWNhdGlvbikuIEtleSBiZW5lZml0cyBpbmNsdWRlOgotICoqQ2xlYXIgTm90YXRpb24qKiAtIFNpbmdsZSB3YXkgdG8gbW9kZWwgYW5kIGludGVycHJldCBhbiBBUEkuCi0gKipHZW5lcmljIFR5cGVzKiogLSBDdXN0b21pemFibGUgdHlwZXMgd2l0aCBwYXJhbWV0ZXJzIGZvciBkaWZmZXJlbnQgY29udGV4dHMuCi0gKipNaW5pbWFsaXN0aWMqKiAtIFNpbXBsZSwgZWZmaWNpZW50IGxhbmd1YWdlIHdpdGhvdXQgcmVkdW5kYW50IGZlYXR1cmVzLgotICoqV2ViIFN5c3RlbSBJbnRlZ3JhdGlvbiBGb2N1c2VkKiogLSBJZGVhbCBmb3IgdHlwZS1zYWZlIHN5c3RlbSBpbnRlZ3JhdGlvbi4KLSAqKkhpZ2hseSBDdXN0b21pemFibGUqKiAtIEV4dGVuc2l2ZSBbaGFuZGxlYmFyc10oaHR0cHM6Ly9naXRodWIuY29tL3N1bm5nODcvaGFuZGxlYmFycy1ydXN0KSBoZWxwZXJzIGZvciB0ZW1wbGF0ZSBtb2RpZmljYXRpb24uCi0gKipQcm90b2NvbC1BZ25vc3RpYyoqIC0gRGVzaWduZWQgZm9yIEhUVFAgYnV0IGFwcGxpY2FibGUgdG8gYW55IEFQSSB0eXBlLgoKSXQgYWRkcmVzc2VzIGluaGVyZW50IE9wZW5BUEkgaXNzdWVzIHdpdGg6Ci0gKipFbmNsb3NlZCBBbGdlYnJhaWMgRGF0YSBUeXBlcyoqIC0gQWxsIHN1YnR5cGVzIG9mIGFuIEFEVCBhcmUgZ3JvdXBlZCBpbiBhIHNpbmdsZSBgYWR0YCBub2RlLgoKIyMjIE92ZXJ2aWV3CkV4YW1wbGVzIGFuZCBtb3JlIHVzYWdlIGRldGFpbHMgY2FuIGJlIGZvdW5kIGluIFt0ZXN0c10oaHR0cHM6Ly9naXRodWIuY29tL3drYXJ3YWNraS90cnVzdC90cmVlL21hc3Rlci9zcmMvbGliL3Rlc3QpLgoKKipEYXRhIFR5cGVzOioqCi0gKipTaW1wbGUgVHlwZXM6KioKICAtIGB0eXBlOiBib29sYCAtIGVxdWl2YWxlbnQgdG8gT3BlbkFQSSBgdHlwZTogYm9vbGVhbmAKICAtIGB0eXBlOiBpbnRgIC0gZXF1aXZhbGVudCB0byBPcGVuQVBJIGB0eXBlOiBpbnRlZ2VyYCB3aXRoIGBmb3JtYXQ6IGludDY0YAogIC0gYHR5cGU6IGRlY2AgLSBlcXVpdmFsZW50IHRvIE9wZW5BUEkgYHR5cGU6IG51bWJlcmAKICAtIGB0eXBlOiBzdHJgIC0gZXF1aXZhbGVudCB0byBPcGVuQVBJIGB0eXBlOiBzdHJpbmdgCiAgLSBgdHlwZTogZW51bWAgLSBlcXVpdmFsZW50IHRvIE9wZW5BUEkgYHR5cGU6IHN0cmluZ2Agd2l0aCBgZW51bWAKLSAqKkNvbXBsZXggVHlwZXM6KioKICAtIGB0eXBlOiBvYmpgIC0gZXF1aXZhbGVudCB0byBPcGVuQVBJIGB0eXBlOiBvYmplY3RgCiAgLSBgdHlwZTogc2VxYCAtIGVxdWl2YWxlbnQgdG8gT3BlbkFQSSBgdHlwZTogYXJyYXlgCiAgLSBgdHlwZTogbWFwYCAtIGVxdWl2YWxlbnQgdG8gT3BlbkFQSSBgdHlwZTogb2JqZWN0YCB3aXRoIGBhZGRpdGlvbmFsUHJvcGVydGllc2AKLSAqKlNwZWNpYWwgVHlwZXM6KioKICAtIGB0eXBlOiBhbGlhc2AgLSBlcXVpdmFsZW50IHRvIE9wZW5BUEkgYCRyZWZgCiAgLSBgdHlwZTogc3RydWN0YCAtIGVxdWl2YWxlbnQgdG8gT3BlbkFQSSBlbXB0eSBzY2hlbWEgKGB7fWApCiAgLSBgdHlwZTogY29uc3RgIC0gZXF1aXZhbGVudCB0byBPcGVuQVBJIGBjb25zdGAKCiMjIyBDb21tb24gVXNlIENhc2VzCgoqKkluY2x1ZGluZyBWYXJpYWJsZXMgZnJvbSBPdGhlciBUeXBlczoqKgogIGBgYHlhbWwKICBQYXJlbnQ6CiAgICB0eXBlOiBvYmoKICAgIHZhcnM6CiAgICAgIHBhcmVudFZhcjoKICAgICAgICB0eXBlOiBkZWMKICBBbm90aGVyUGFyZW50OgogICAgdHlwZTogb2JqCiAgICB2YXJzOgogICAgICBhbm90aGVyUGFyZW50VmFyOgogICAgICAgIHR5cGU6IGJvb2wKICBXaXRoUGFyZW50c1ZhcnM6CiAgICB0eXBlOiBvYmoKICAgIG1peDoKICAgICAgLSBwYXRoOiAiZGVmcy5QYXJlbnQiCiAgICAgIC0gcGF0aDogImRlZnMuQW5vdGhlclBhcmVudCIKICAgIHZhcnM6CiAgICAgIG93blZhcjoKICAgICAgICB0eXBlOiBpbnQKICBgYGAKUmVzdWx0cyBpbjoKICBgYGBqc29uCiAgewogICAgInBhcmVudFZhciI6IDEuMCwKICAgICJhbm90aGVyUGFyZW50VmFyIjogdHJ1ZSwKICAgICJvd25WYXIiOiAxCiAgfQogIGBgYAoKKipBbGdlYnJhaWMgRGF0YSBUeXBlcyAoVW5pb24gVHlwZXMpOioqCiAgYGBgeWFtbAogIEFkdFR5cGU6CiAgICB0eXBlOiBvYmoKICAgIHZhcnM6IAogICAgICBkaXNjcmltaW5hdG9yVmFyOgogICAgICAgIHR5cGU6IHN0cgogICAgICBzb21lT3RoZXJWYXI6CiAgICAgICAgdHlwZTogZGVjCiAgICBhZHQ6CiAgICAgIHZhcjogZGlzY3JpbWluYXRvclZhcgogICAgICBtYXA6CiAgICAgICAgZmlyc3RTdWJ0eXBlOgogICAgICAgICAgdmFyczoKICAgICAgICAgICAgZmlyc3RTdWJ0eXBlVmFyOgogICAgICAgICAgICAgIHR5cGU6IGludAogICAgICAgIHNlY29uZFN1YnR5cGU6CiAgICAgICAgICB2YXJzOgogICAgICAgICAgICBzZWNvbmRTdWJ0eXBlVmFyOgogICAgICAgICAgICAgIHR5cGU6IGJvb2wKICBgYGAKSW50ZXJwcmV0ZWQgYXM6CiAgYGBganNvbgogIHsKICAgICJkaXNjcmltaW5hdG9yVmFyIjogImZpcnN0U3VidHlwZSIsCiAgICAic29tZU90aGVyVmFyIjogMS4wLAogICAgImZpcnN0U3VidHlwZVZhciI6IDEKICB9CiAgYGBgCiAgYGBganNvbgogIHsKICAgICJkaXNjcmltaW5hdG9yVmFyIjogInNlY29uZFN1YnR5cGUiLAogICAgInNvbWVPdGhlclZhciI6IDEuMCwKICAgICJzZWNvbmRTdWJ0eXBlVmFyIjogdHJ1ZQogIH0KICBgYGAKCgoqKkdlbmVyaWMgVHlwZXM6KioKICBgYGB5YW1sCiAgZGVmczoKICAgIFNvbWVOYW1lZFN0cmluZzoKICAgICAgdHlwZTogc3RyCiAgICBQYXJhbWV0ZXJpemVkVHlwZToKICAgICAgdHlwZTogb2JqCiAgICAgIHZhcnM6CiAgICAgICAgdmFyT2ZQYXJhbUFiY1R5cGU6CiAgICAgICAgICBwYXJhbTogUGFyYW1BYmMgIyB0byBkZWNsYXJlIGEgZ2VuZXJpYyB0eXBlLCB5b3UgbmVlZCB0byBzaW1wbHkgdXNlIGEgJ3BhcmFtJyBrZXl3b3JkCiAgICAgICAgdmFyT2ZQYXJhbVh5elR5cGU6CiAgICAgICAgICBwYXJhbTogUGFyYW1YeXogIyBzaW1pbGFybHkgdG8gdGhlIGFib3ZlLCB0aGlzIHRpbWUgd2l0aCBhIGRpZmZlcmVudCBuYW1lCiAgICAgICAgYW5vdGVyVmFyT2ZQYXJhbVh5elR5cGU6CiAgICAgICAgICBwYXJhbTogUGFyYW1YeXogIyBzaW1pbGFybHkgdG8gdGhlIGFib3ZlLCB0aGlzIHRpbWUgd2l0aCBhIGRpZmZlcmVudCBuYW1lCiAgICBTdWJ0eXBlT2ZQYXJhbWV0ZXJpemVkVHlwZToKICAgICAgdHlwZTogb2JqCiAgICAgIGV4dDogIyBleHRlbmRpbmcgYSBnZW5lcmljIHR5cGUKICAgICAgICBwYXRoOiAnZGVmcy5QYXJhbWV0ZXJpemVkVHlwZScKICAgICAgICBhcmdzOiAjIHdpdGggYmVsb3cgdHlwZS1hcmd1bWVudHMKICAgICAgICAgIFBhcmFtQWJjOgogICAgICAgICAgICB0eXBlOiBib29sCiAgICAgICAgICBQYXJhbVh5ejoKICAgICAgICAgICAgcGF0aDogJ2RlZnMuU29tZVR5cGUnCiAgYGBgCkVxdWl2YWxlbnQgdG86CiAgYGBgamF2YQogIGludGVyZmFjZSBQYXJhbWV0ZXJpemVkVHlwZTxQYXJhbUFiYywgUGFyYW1YeXo+IHsgCiAgICBQYXJhbUFiYyB2YXJPZlBhcmFtQWJjVHlwZTsgCiAgICBQYXJhbVh5eiB2YXJPZlBhcmFtWHl6VHlwZTsgCiAgICBQYXJhbVh5eiBhbm90ZXJWYXJPZlBhcmFtWHl6VHlwZTsgCiAgfQogIGludGVyZmFjZSBTdWJ0eXBlT2ZQYXJhbWV0ZXJpemVkVHlwZSBleHRlbmRzIFBhcmFtZXRlcml6ZWRUeXBlPEJvb2xlYW4sIFNvbWVUeXBlPiB7IH0KICBgYGAKCiMjIyBPcGVuQVBJIENvbnZlcnNpb24KCiogQ29udHJvbCB0aGUgbGF5b3V0IG9mIHRoZSBnZW5lcmF0ZWQgVHJ1c3Qgc3BlYyB3aXRoIHRoZSBgLWxgIG9wdGlvbi4gRm9yIGluc3RhbmNlLCBzZXR0aW5nIGl0IHRvIGB0YWdgIG9yZ2FuaXplcyB0aGUgVHJ1c3Qgc3BlYyBieSBPcGVuQVBJIHRhZ3MsIGFzIHNob3duIGluIHRoaXMgW2V4YW1wbGVdKGh0dHBzOi8vZ2l0aHViLmNvbS93a2Fyd2Fja2kvdHJ1c3QvYmxvYi9tYXN0ZXIvdGVzdC9pbnRlZ3JhdGlvbi9zcGVjcy9vcGVuYXBpX2Zhc3RhcGkvYXBpLnltbCNMOSkuCgojIyBDb2RlIEdlbmVyYXRpb24KCiMjIyBVc2FnZQoKIyMjIyBXaXRoIERvY2tlcgpQcmVyZXF1aXNpdGVzOgotIFtEb2NrZXJdKGh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2VuZ2luZS9pbnN0YWxsLykKICBgYGBzaGVsbAogICQgLi9kb2NrZXIvYnVpbGQuc2gKICAkIGRvY2tlciBydW4gdHJ1c3QKICBgYGAKCiMjIyMgRnJvbSBTb3VyY2UKUHJlcmVxdWlzaXRlczoKLSBbUnVzdF0oaHR0cHM6Ly93d3cucnVzdC1sYW5nLm9yZy90b29scy9pbnN0YWxsKQogIGBgYHNoZWxsCiAgJCBjYXJnbyBydW4gdHJ1c3QKICBgYGAKCiMjIyBTdXBwb3J0ZWQgR2VuZXJhdG9yczoKLSBQeXRob24gSFRUUCBTZXJ2ZXIgKFtmYXN0YXBpXShodHRwczovL2dpdGh1Yi5jb20vdGlhbmdvbG8vZmFzdGFwaSkpCi0gUHl0aG9uIEhUVFAgQ2xpZW50IChbaHR0cHhdKGh0dHBzOi8vZ2l0aHViLmNvbS9lbmNvZGUvaHR0cHgpKQoKIyMjIyBFeHBlcmltZW50YWwgR2VuZXJhdG9yczoKPiA6ZXhjbGFtYXRpb246IE5vdCBmdWxseSBpbXBsZW1lbnRlZC4gVXNlIGF0IHlvdXIgb3duIHJpc2suCgotIEtvdGxpbiBIVFRQIFNlcnZlciAoW3NwcmluZ10oaHR0cHM6Ly9naXRodWIuY29tL3NwcmluZy1wcm9qZWN0cy9zcHJpbmctZnJhbWV3b3JrKSkKLSBTY2FsYSBIVFRQIFNlcnZlciAoW2Nhc2tdKGh0dHBzOi8vZ2l0aHViLmNvbS9jb20tbGloYW95aS9jYXNrKSk=
@@ -25251,10 +25251,10 @@
readmeLastModified: Thu, 15 Aug 2024 20:26:34 GMT
repositoryId: 834278095
description: >-
- Python-Client Python-Server OpenAPI generator in Rust, Web Integration
- Specification / Trust
+ Typesafe Python Client and Server OpenAPI generator written in Rust /
+ Trust
created: '2024-07-26T20:36:55Z'
- updated: '2024-08-19T17:57:10Z'
+ updated: '2024-08-20T17:27:24Z'
language: Rust
archived: false
stars: 1
@@ -25263,10 +25263,12 @@
owner: wkarwacki
logo: https://avatars.githubusercontent.com/u/79852127?v=4
license: Apache-2.0
- repoEtag: '"246dddeed5aafb96719cbdf54f2cc93fac642a827b87038e610b125182a36391"'
- repoLastModified: Mon, 19 Aug 2024 17:57:10 GMT
+ repoEtag: '"074587cd206962d280374c52627606285256fcf88129805ddc13c5e7d824646e"'
+ repoLastModified: Tue, 20 Aug 2024 17:27:24 GMT
category: Parsers
foundInMaster: true
+ oldLocations:
+ - https://github.com/wkarwacki/trust
- source: openapi3 tags
repository: https://github.com/smartrecruiters/openapi-schemas-validator
v3: true
@@ -31392,7 +31394,7 @@
Hackolade(https://hackolade.com) plugin for AWS EventBridge Schema
Registry
created: '2020-06-13T07:58:44Z'
- updated: '2024-08-09T17:24:36Z'
+ updated: '2024-08-20T12:20:41Z'
language: JavaScript
archived: false
stars: 0
@@ -31401,8 +31403,8 @@
owner: hackolade
logo: https://avatars.githubusercontent.com/u/20265734?v=4
license: NOASSERTION
- repoEtag: '"1eee973838e888ada30a86ed53192188bc9aaae87c28d6aeaf08fbdea68c497d"'
- repoLastModified: Fri, 09 Aug 2024 17:24:36 GMT
+ repoEtag: '"d331f52cca41fc050a7652209a5113700c2c89b8c236d8dda28be90b5d72f1be"'
+ repoLastModified: Tue, 20 Aug 2024 12:20:41 GMT
foundInMaster: true
category:
- Server
@@ -31861,7 +31863,7 @@
Simple, Fast, Code first and Compile time generated OpenAPI documentation
for Rust
created: '2021-09-30T22:00:31Z'
- updated: '2024-08-19T18:10:57Z'
+ updated: '2024-08-20T20:23:14Z'
language: Rust
archived: false
stars: 2097
@@ -31870,8 +31872,8 @@
owner: juhaku
logo: https://avatars.githubusercontent.com/u/26358664?v=4
license: Apache-2.0
- repoEtag: '"1c38bd1663914d0f7cb70dabb8be7945bed4c76e1ddd76bfd8b81f69109ca5e3"'
- repoLastModified: Mon, 19 Aug 2024 18:10:57 GMT
+ repoEtag: '"3572f5a5b8e881d61df43becd008d2aa560f2e473b94695093ca89bd1025ab1b"'
+ repoLastModified: Tue, 20 Aug 2024 20:23:14 GMT
foundInMaster: true
category: Parsers
id: 14269a89115b3be71493769fca4d995e
@@ -31917,17 +31919,17 @@
Rails engine for generate automatic interactive documentation in your
rails APIs.
created: '2024-07-21T16:44:36Z'
- updated: '2024-08-19T14:39:32Z'
+ updated: '2024-08-20T15:45:32Z'
language: Ruby
archived: false
- stars: 40
+ stars: 41
watchers: 3
forks: 0
owner: a-chacon
logo: https://avatars.githubusercontent.com/u/39093711?v=4
license: GPL-3.0
- repoEtag: '"e4b1a762653305be88c5071a5eac35e3819b93c5e475383c635b518d357eec0f"'
- repoLastModified: Mon, 19 Aug 2024 14:39:32 GMT
+ repoEtag: '"1da19f96f8f3e0b76bd3790a346af0d32f30eab25f0e645dc8d5f414b3627530"'
+ repoLastModified: Tue, 20 Aug 2024 15:45:32 GMT
category: Parsers
foundInMaster: true
- source: openapi31 tags
@@ -32244,17 +32246,17 @@
(TypeScript) from any valid OpenAPI v3 or Swagger v2 specification, either
in yaml or json formats. 🍺
created: '2020-02-05T08:31:50Z'
- updated: '2024-08-20T01:55:37Z'
+ updated: '2024-08-20T21:57:49Z'
language: TypeScript
archived: false
- stars: 2743
+ stars: 2748
watchers: 11
- forks: 308
+ forks: 309
owner: orval-labs
logo: https://avatars.githubusercontent.com/u/176128704?v=4
license: MIT
- repoEtag: '"95c078038e6ccc4609a7489226cd06fc1d7c5289b35db183104c8273ee5c7aef"'
- repoLastModified: Tue, 20 Aug 2024 01:55:37 GMT
+ repoEtag: '"299034f3e1e27c511dd8a12c578d1cd21fc186ac148fd06b3b9ac165e8dd06f2"'
+ repoLastModified: Tue, 20 Aug 2024 21:57:49 GMT
foundInMaster: true
oldLocations:
- https://github.com/anymaniax/orval
@@ -32373,7 +32375,7 @@
owner: Sudokuru
logo: https://avatars.githubusercontent.com/u/114212382?v=4
license: GPL-3.0
- repoEtag: '"31dff5f037a129201d6476dccefa1113c438082851d6a8dd7b7096b9b443f7e0"'
+ repoEtag: '"5ef795db2a8bac19e79a119e483f6830ebb1183b1e25b9f29060990bedf063e5"'
repoLastModified: Mon, 12 Aug 2024 00:46:09 GMT
category: Server Implementations
foundInMaster: true
@@ -32983,7 +32985,7 @@
applications. Currently targeting whitebox and blackbox testing of Web
APIs, like REST, GraphQL and RPC (e.g., gRPC and Thrift).
created: '2017-05-25T09:11:23Z'
- updated: '2024-08-19T06:52:11Z'
+ updated: '2024-08-20T18:22:19Z'
language: Kotlin
archived: false
stars: 469
@@ -32992,8 +32994,8 @@
owner: WebFuzzing
logo: https://avatars.githubusercontent.com/u/29148026?v=4
license: LGPL-3.0
- repoEtag: '"421bf9a750fd15c70afabd19fe9a865f732b15fa48f28f9ee80b6b6a7724551b"'
- repoLastModified: Mon, 19 Aug 2024 06:52:11 GMT
+ repoEtag: '"f3563be0a94be9ef62039dcf63c6cf8bfd41c994febe3b90e7922f7cdbcea34d"'
+ repoLastModified: Tue, 20 Aug 2024 18:22:19 GMT
foundInMaster: true
id: d1d3d85149c4a9437dbdbf157cf3d7c7
oldLocations:
@@ -34311,17 +34313,17 @@
repositoryId: 586543156
description: 'Kubb is deprecated. I recommend Orval as an alternative. '
created: '2023-01-08T14:15:23Z'
- updated: '2024-08-19T03:14:33Z'
+ updated: '2024-08-20T20:09:31Z'
language: TypeScript
archived: false
- stars: 615
+ stars: 616
watchers: 5
- forks: 44
+ forks: 45
owner: kubb-labs
logo: https://avatars.githubusercontent.com/u/122118236?v=4
license: MIT
- repoEtag: '"9e1c1289f75a48a334b97b4aa698931c87c3c45dde10c1f314798d00ef09e518"'
- repoLastModified: Mon, 19 Aug 2024 03:14:33 GMT
+ repoEtag: '"2e8e4e35f51890fdb35bbf6a640bbd3ba00745d754a821d1eb7ec1063c6fc853"'
+ repoLastModified: Tue, 20 Aug 2024 20:09:31 GMT
foundInMaster: true
oldLocations:
- https://github.com/kubb-project/kubb
@@ -34402,7 +34404,7 @@
forks: 29
owner: apicat
logo: https://avatars.githubusercontent.com/u/64158984?v=4
- repoEtag: '"65d0f3f98aa2795b5fb5583b130b43d5ba10ffddfeb3406cd2652596f113f867"'
+ repoEtag: '"2f3d68704d492fa2b8bba97e2bb501649592b43d62a34a6889a8a201906cc2d0"'
repoLastModified: Sun, 18 Aug 2024 02:19:38 GMT
category: Server Implementations
foundInMaster: true
@@ -34419,17 +34421,17 @@
Full stack, modern web application template. Using FastAPI, React,
SQLModel, PostgreSQL, Docker, GitHub Actions, automatic HTTPS and more.
created: '2019-02-23T15:08:34Z'
- updated: '2024-08-20T02:37:01Z'
+ updated: '2024-08-21T02:45:08Z'
language: TypeScript
archived: false
- stars: 25483
+ stars: 25500
watchers: 270
- forks: 4363
+ forks: 4367
owner: fastapi
logo: https://avatars.githubusercontent.com/u/156354296?v=4
license: MIT
- repoEtag: '"9474d5318af2c194b4bfdd17ff8ecaa51ad5966f283f797ab3bcb8f842423525"'
- repoLastModified: Tue, 20 Aug 2024 02:37:01 GMT
+ repoEtag: '"98435771d70582a233e27104138bd320ef35176867a716f9ed2fa82deb31786f"'
+ repoLastModified: Wed, 21 Aug 2024 02:45:08 GMT
foundInMaster: true
category: Server Implementations
id: 0354007b562b4efc3f08ce3da7f03afb
@@ -39394,11 +39396,11 @@
archived: false
stars: 7370
watchers: 310
- forks: 2171
+ forks: 2170
owner: swagger-api
logo: https://avatars.githubusercontent.com/u/7658037?v=4
license: Apache-2.0
- repoEtag: '"22c870ea9969e66b2d07e789f103be141b04011643cf4f75c0c660dc0141bf11"'
+ repoEtag: '"25c58fa09d1347b1a827d5fe1e2a3960ac7cad1d36807df1c1acf9b74e71da8d"'
repoLastModified: Mon, 19 Aug 2024 09:21:15 GMT
id: 266d60df2d48ad8a47539de3c1071f3a
- source: IMPLEMENTATIONS.md
@@ -39422,17 +39424,17 @@
in .NET along with common serializers to extract raw OpenAPI JSON and YAML
documents from the model.
created: '2017-07-14T00:24:14Z'
- updated: '2024-08-19T21:41:28Z'
+ updated: '2024-08-20T06:31:48Z'
language: C#
archived: false
- stars: 1370
+ stars: 1371
watchers: 64
forks: 231
owner: microsoft
logo: https://avatars.githubusercontent.com/u/6154722?v=4
license: MIT
- repoEtag: '"409ddf1ca203fcc1325dfafccba5a3a95b9e213dafce48a2dbb6f004379f7d00"'
- repoLastModified: Mon, 19 Aug 2024 21:41:28 GMT
+ repoEtag: '"6303621542ff357488895c313c0280d1fa7e9d50233c057a08337acabfad1e75"'
+ repoLastModified: Tue, 20 Aug 2024 06:31:48 GMT
id: f3215034d64cfcbcc28a4bdb0205a075
- source: IMPLEMENTATIONS.md
name: openapi-validator
@@ -39503,7 +39505,7 @@
owner: char0n
logo: https://avatars.githubusercontent.com/u/193286?v=4
license: Apache-2.0
- repoEtag: '"0ee8d143dc65d93582f58f1841583490955c900fd86a828accfa18e21ae37f1a"'
+ repoEtag: '"b33056591fab092d09ea6ebb385998b892233e105039142ed4f42d18777a3e28"'
repoLastModified: Fri, 09 Aug 2024 20:47:52 GMT
foundInMaster: true
- source: IMPLEMENTATIONS.md
@@ -39731,7 +39733,7 @@
repositoryId: 30567860
description: Single file PHP script that adds a REST API to a SQL database
created: '2015-02-10T01:08:52Z'
- updated: '2024-08-15T21:53:19Z'
+ updated: '2024-08-20T09:57:48Z'
language: PHP
archived: false
stars: 3574
@@ -39740,8 +39742,8 @@
owner: mevdschee
logo: https://avatars.githubusercontent.com/u/1288217?v=4
license: MIT
- repoEtag: '"fa9efeca7759157158edc1d1883c52b4e7c24300d3ea3aa0f1666863ad74ea1e"'
- repoLastModified: Thu, 15 Aug 2024 21:53:19 GMT
+ repoEtag: '"5895b7024482a6f8a07d7718a0aeb2d0f981fad9712859d04844e2bd5c8eba60"'
+ repoLastModified: Tue, 20 Aug 2024 09:57:48 GMT
id: 84a7be428932f7789a8ad1a220b22216
- source: IMPLEMENTATIONS.md
name: Fastify OpenAPI v3
@@ -39878,11 +39880,11 @@
archived: false
stars: 166
watchers: 4
- forks: 21
+ forks: 20
owner: zhandao
logo: https://avatars.githubusercontent.com/u/24402029?v=4
license: MIT
- repoEtag: '"76d1ea02f283bfb402b25ba799599768e92250d1fdfc08e2576be02cb2bedc05"'
+ repoEtag: '"f3a16dc08dc7188d6fe5840dc86b306908d529a6ca53969d1ebd1d2e5a070f1f"'
repoLastModified: Wed, 24 Jul 2024 12:40:29 GMT
id: b6b6454891a26e88286d7f79814c63b0
- source: IMPLEMENTATIONS.md
@@ -40393,7 +40395,7 @@
owner: openclarity
logo: https://avatars.githubusercontent.com/u/89657786?v=4
license: Apache-2.0
- repoEtag: '"44dbbdb0d50606a29748ad7bf30580c0f8f307a1a089736f11cceeee9b2b86fe"'
+ repoEtag: '"e6d9365abd543b3c0f1965bd986b10c738c3741cc6c486eefc4c5138b99f7cf9"'
repoLastModified: Sat, 17 Aug 2024 03:48:27 GMT
foundInMaster: true
id: 68b981acc13af75d4eb8c04143885e13
@@ -40607,17 +40609,17 @@
LoopBack makes it easy to build modern API applications that require
complex integrations.
created: '2017-01-09T17:27:14Z'
- updated: '2024-08-19T18:56:09Z'
+ updated: '2024-08-20T07:31:57Z'
language: TypeScript
archived: false
- stars: 4913
- watchers: 137
+ stars: 4914
+ watchers: 136
forks: 1060
owner: loopbackio
logo: https://avatars.githubusercontent.com/u/22173486?v=4
license: NOASSERTION
- repoEtag: '"0c7667bb014c1418ca0cb89605abd8d5d4863dcec473082b0b869385e0792371"'
- repoLastModified: Mon, 19 Aug 2024 18:56:09 GMT
+ repoEtag: '"4b61b351c4cd8f14531535c8671a45263012e76ad5bca16cf22f4340ba91e16e"'
+ repoLastModified: Tue, 20 Aug 2024 07:31:57 GMT
foundInMaster: true
id: 9132c25ad468bed25b9dbbe3a352abc2
v3: true
@@ -40689,17 +40691,17 @@
testing cloud services through their REST APIs and finding security and
reliability bugs in these services.
created: '2020-07-24T21:40:11Z'
- updated: '2024-08-19T10:10:56Z'
+ updated: '2024-08-20T10:54:30Z'
language: Python
archived: false
- stars: 2549
+ stars: 2550
watchers: 36
- forks: 289
+ forks: 288
owner: microsoft
logo: https://avatars.githubusercontent.com/u/6154722?v=4
license: MIT
- repoEtag: '"4b352f1da46041b9e85ae5c70a70952c502259edf45ae31bb65e1f8fd71886ba"'
- repoLastModified: Mon, 19 Aug 2024 10:10:56 GMT
+ repoEtag: '"44be0f355a25dbc6314715436d379b972ad30cf4aa936ac82733e44ebdad4489"'
+ repoLastModified: Tue, 20 Aug 2024 10:54:30 GMT
foundInMaster: true
oldLocations:
- https://github.com/microsoft/restler
@@ -41472,7 +41474,7 @@
An OpenAPI (fka Swagger) client & converter in python, which is type-safe,
dynamic, spec-compliant.
created: '2014-07-27T06:47:30Z'
- updated: '2024-07-17T19:59:27Z'
+ updated: '2024-08-20T07:13:21Z'
language: Python
archived: false
stars: 382
@@ -41481,8 +41483,8 @@
owner: pyopenapi
logo: https://avatars.githubusercontent.com/u/35984678?v=4
license: MIT
- repoEtag: '"cb1b4969321932ec82cd13de7b8dca7efd88753f5ffc7e86648db42150985793"'
- repoLastModified: Wed, 17 Jul 2024 19:59:27 GMT
+ repoEtag: '"6f772f128506dc7e6ee1ccb5fdb54f707186f9cf0acee49f7ca993d5d50289ba"'
+ repoLastModified: Tue, 20 Aug 2024 07:13:21 GMT
foundInMaster: true
v3_link: https://github.com/mission-liao/pyswagger/blob/develop/docs/md/news.md
id: 83585666ce7c5a42bc3e5463ac9b3c47