diff --git a/locator/locate.dart b/locator/locate.dart index b54a06e..4d1bee0 100644 --- a/locator/locate.dart +++ b/locator/locate.dart @@ -4,16 +4,13 @@ import 'dart:io'; Future main(List args) async { var client = new HttpClient(); - var request = await client.postUrl(Uri.parse("https://lcdn-locator.apple.com/lcdn/locate")); + var request = await client + .postUrl(Uri.parse("https://lcdn-locator.apple.com/lcdn/locate")); request.writeln(json.encode({ "ranked-results": true, "locator-tag": "#f5cfd4d0", - "local-addresses": [ - args[0] - ], - "public-address-ranges": [ - [] - ], + "local-addresses": [args[0]], + "public-address-ranges": [[]], "locator-software": [ { "build": "19A578c", diff --git a/server/README.md b/server/README.md index b06a8aa..efd3854 100644 --- a/server/README.md +++ b/server/README.md @@ -57,7 +57,7 @@ A few things to note, the path of the request seems to be the path of the asset ```text Cache URL: http://10.0.0.60:54439/2019FallSeed/mobileassets/061-28461/73D248DA-E92B-11E9-87BD-36A73FE00C7B/com_apple_MobileAsset_SoftwareUpdateDocumentation/a080e3173e75180afa7ea1a15f469ed839f60260.zip?source=updates-http.cdn-apple.com -Source URL: http://updates-http.cdn-apple.com:443/2019FallSeed/mobileassets/061-28461/73D248DA-E92B-11E9-87BD-36A73FE00C7B/com_apple_MobileAsset_SoftwareUpdateDocumentation/a080e3173e75180afa7ea1a15f469ed839f60260.zip +Source URL: http://updates-http.cdn-apple.com/2019FallSeed/mobileassets/061-28461/73D248DA-E92B-11E9-87BD-36A73FE00C7B/com_apple_MobileAsset_SoftwareUpdateDocumentation/a080e3173e75180afa7ea1a15f469ed839f60260.zip ``` The cache server should then download the URL if it is not in the cache, and stream the results while downloading. diff --git a/server/build-cache-url.dart b/server/build-cache-url.dart index 2492d09..311f40b 100644 --- a/server/build-cache-url.dart +++ b/server/build-cache-url.dart @@ -2,8 +2,9 @@ void main(List args) { var cacheServerUrl = Uri.parse(args[0]); var sourceDataUrl = Uri.parse(args[1]); - var url = cacheServerUrl.replace(path: sourceDataUrl.path, queryParameters: { - "source": sourceDataUrl.host - }..addAll(sourceDataUrl.queryParameters)); + var url = cacheServerUrl.replace( + path: sourceDataUrl.path, + queryParameters: {"source": sourceDataUrl.host} + ..addAll(sourceDataUrl.queryParameters)); print(url); } diff --git a/server/build-source-url.dart b/server/build-source-url.dart index 6c335d1..064f8df 100644 --- a/server/build-source-url.dart +++ b/server/build-source-url.dart @@ -2,10 +2,15 @@ void main(List args) { var cacheServerUrl = Uri.parse(args[0]); var sourceHost = cacheServerUrl.queryParameters["source"]; - var newUrlParams = new Map.from(cacheServerUrl.queryParameters); + var newUrlParams = + new Map.from(cacheServerUrl.queryParameters); newUrlParams.remove("source"); - var url = cacheServerUrl.replace(scheme: "http", port: 443, host: sourceHost, queryParameters: newUrlParams); + var url = cacheServerUrl.replace( + scheme: "http", + port: 80, + host: sourceHost, + queryParameters: newUrlParams); var urlString = url.toString(); if (urlString.endsWith("?")) { urlString = urlString.substring(0, urlString.length - 1); diff --git a/server/config.plist b/server/config.plist new file mode 100644 index 0000000..a70eb9b --- /dev/null +++ b/server/config.plist @@ -0,0 +1,443 @@ +MIJTBQYJKoZIhvcNAQcCoIJS9jCCUvICAQExDTALBglghkgBZQMEAgEwgkMeBgkq +hkiG9w0BBwGggkMPBIJDCzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVU +Ri04Ij8+CjwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJ +U1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlM +aXN0LTEuMC5kdGQiPgo8cGxpc3QgdmVyc2lvbj0iMS4wIj4KPGRpY3Q+Cgk8a2V5 +PmNlcnRpZmljYXRlVVJMPC9rZXk+Cgk8c3RyaW5nPmh0dHBzOi8vbGNkbi1yZWdp +c3RyYXRpb24uYXBwbGUuY29tL3Jlc291cmNlL2NlcnQuY2VyPC9zdHJpbmc+Cgk8 +a2V5PmVzdGFibGlzaG1lbnRVUkw8L2tleT4KCTxzdHJpbmc+aHR0cHM6Ly9sY2Ru +LXJlZ2lzdHJhdGlvbi5hcHBsZS5jb20vbGNkbi9zZXNzaW9uPC9zdHJpbmc+Cgk8 +a2V5PnJlZ2lzdHJhdGlvblVSTDwva2V5PgoJPHN0cmluZz5odHRwczovL2xjZG4t +cmVnaXN0cmF0aW9uLmFwcGxlLmNvbS9sY2RuL3JlZ2lzdGVyPC9zdHJpbmc+Cgk8 +a2V5PmRlcmVnaXN0cmF0aW9uVVJMPC9rZXk+Cgk8c3RyaW5nPmh0dHBzOi8vbGNk +bi1yZWdpc3RyYXRpb24uYXBwbGUuY29tL2xjZG4vZGVyZWdpc3Rlcjwvc3RyaW5n +PgoJPGtleT5ibGFja0xpc3RVUkw8L2tleT4KCTxzdHJpbmc+aHR0cDovL3N1Y29u +ZmlnLmFwcGxlLmNvbS9yZXNvdXJjZS9yZWdpc3RyYXRpb24vdjEvYmxhY2tsaXN0 +LnBsaXN0PC9zdHJpbmc+Cgk8a2V5PnN0YXRpc3RpY3NVUkw8L2tleT4KCTxzdHJp +bmc+aHR0cHM6Ly94cC1jZG4uYXBwbGUuY29tL3JlcG9ydC8yL3hwX2Nkbl9yZWNl +aXB0PC9zdHJpbmc+Cgk8a2V5PndoaXRlTGlzdGVkSG9zdHM8L2tleT4KCTxhcnJh +eT4KCQk8c3RyaW5nPnN3Y2RuLmFwcGxlLmNvbTo4MDwvc3RyaW5nPgoJCTxzdHJp +bmc+dmFsaWRhdGlvbi5pc3UuYXBwbGUuY29tOjgwPC9zdHJpbmc+CgkJPHN0cmlu +Zz5hcHBsZG5sZC5hcHBsZS5jb206ODA8L3N0cmluZz4KCQk8c3RyaW5nPm9zY2Ru +LmFwcGxlLmNvbTo4MDwvc3RyaW5nPgoJCTxzdHJpbmc+c3dkaXN0LmFwcGxlLmNv +bTo0NDM8L3N0cmluZz4KCQk8c3RyaW5nPnN3ZG93bmxvYWQuYXBwbGUuY29tOjgw +PC9zdHJpbmc+CgkJPHN0cmluZz5zd2Rvd25sb2FkLmFwcGxlLmNvbTo0NDM8L3N0 +cmluZz4KCQk8c3RyaW5nPmF1ZGlvY29udGVudGRvd25sb2FkLmFwcGxlLmNvbTo4 +MDwvc3RyaW5nPgoJCTxzdHJpbmc+YXVkaW9jb250ZW50ZG93bmxvYWQuYXBwbGUu +Y29tOjQ0Mzwvc3RyaW5nPgoJCTxzdHJpbmc+ZGVpbW9zLmFwcGxlLmNvbTo4MDwv +c3RyaW5nPgoJCTxzdHJpbmc+ZGVpbW9zMy5hcHBsZS5jb206ODA8L3N0cmluZz4K +CQk8c3RyaW5nPmJhc2VqdW1wZXIuYXBwbGUuY29tOjgwPC9zdHJpbmc+CgkJPHN0 +cmluZz5iYXNlanVtcGVyLmFwcGxlLmNvbTo0NDM8L3N0cmluZz4KCQk8c3RyaW5n +PnBsYXlncm91bmRzLWFzc2V0cy1jZG4uYXBwbGUuY29tOjQ0Mzwvc3RyaW5nPgoJ +CTxzdHJpbmc+cGxheWdyb3VuZHMtY2RuLmFwcGxlLmNvbTo0NDM8L3N0cmluZz4K +CQk8c3RyaW5nPnVwZGF0ZXMuY2RuLWFwcGxlLmNvbTo0NDM8L3N0cmluZz4KCQk8 +c3RyaW5nPnVwZGF0ZXMtaHR0cC5jZG4tYXBwbGUuY29tOjgwPC9zdHJpbmc+CgkJ +PHN0cmluZz5zeWx2YW4uYXBwbGUuY29tOjgwPC9zdHJpbmc+CgkJPHN0cmluZz5z +eWx2YW4uYXBwbGUuY29tOjQ0Mzwvc3RyaW5nPgoJCTxzdHJpbmc+ZGV2aW1hZ2Vz +LWNkbi5hcHBsZS5jb206ODA8L3N0cmluZz4KCQk8c3RyaW5nPmRldmltYWdlcy1j +ZG4uYXBwbGUuY29tOjQ0Mzwvc3RyaW5nPgoJCTxzdHJpbmc+ZG93bmxvYWQuZGV2 +ZWxvcGVyLmFwcGxlLmNvbTo4MDwvc3RyaW5nPgoJCTxzdHJpbmc+ZG93bmxvYWQu +ZGV2ZWxvcGVyLmFwcGxlLmNvbTo0NDM8L3N0cmluZz4KCTwvYXJyYXk+Cgk8a2V5 +PndoaXRlTGlzdGVkRG9tYWluczwva2V5PgoJPGFycmF5PgoJCTxzdHJpbmc+cGhv +Ym9zLmFwcGxlLmNvbTo4MDwvc3RyaW5nPgoJCTxzdHJpbmc+aXR1bmVzLmFwcGxl +LmNvbTo4MDwvc3RyaW5nPgoJCTxzdHJpbmc+aXR1bmVzLmFwcGxlLmNvbTo0NDM8 +L3N0cmluZz4KCQk8c3RyaW5nPmFzc2V0cy5pdHVuZXMuY29tOjgwPC9zdHJpbmc+ +CgkJPHN0cmluZz5hc3NldHMuaXR1bmVzLmNvbTo0NDM8L3N0cmluZz4KCTwvYXJy +YXk+Cgk8a2V5PmFzc2V0VHlwZU1hcDwva2V5PgoJPGFycmF5PgoJCTxkaWN0PgoJ +CQk8a2V5Pmhvc3Q8L2tleT4KCQkJPGFycmF5PgoJCQkJPHN0cmluZz5zd2Rpc3Qu +YXBwbGUuY29tPC9zdHJpbmc+CgkJCTwvYXJyYXk+CgkJCTxrZXk+bWFwPC9rZXk+ +CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+dHlwZTwva2V5PgoJCQkJ +CTxzdHJpbmc+c3dkaXN0PC9zdHJpbmc+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+ +CgkJPC9kaWN0PgoJCTxkaWN0PgoJCQk8a2V5Pmhvc3Q8L2tleT4KCQkJPGFycmF5 +PgoJCQkJPHN0cmluZz5zd2Rvd25sb2FkLmFwcGxlLmNvbTwvc3RyaW5nPgoJCQk8 +L2FycmF5PgoJCQk8a2V5Pm1hcDwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4K +CQkJCQk8a2V5PnR5cGU8L2tleT4KCQkJCQk8c3RyaW5nPnN3ZG93bmxvYWQ8L3N0 +cmluZz4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q+CgkJPGRpY3Q+ +CgkJCTxrZXk+aG9zdDwva2V5PgoJCQk8YXJyYXk+CgkJCQk8c3RyaW5nPnN3Y2Ru +LmFwcGxlLmNvbTwvc3RyaW5nPgoJCQk8L2FycmF5PgoJCQk8a2V5Pm1hcDwva2V5 +PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PnR5cGU8L2tleT4KCQkJ +CQk8c3RyaW5nPnN3Y2RuPC9zdHJpbmc+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+ +CgkJPC9kaWN0PgoJCTxkaWN0PgoJCQk8a2V5Pmhvc3Q8L2tleT4KCQkJPGFycmF5 +PgoJCQkJPHN0cmluZz5vc2Nkbi5hcHBsZS5jb208L3N0cmluZz4KCQkJPC9hcnJh +eT4KCQkJPGtleT5tYXA8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJ +PGtleT50eXBlPC9rZXk+CgkJCQkJPHN0cmluZz5vc2Nkbjwvc3RyaW5nPgoJCQkJ +PC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8ZGljdD4KCQkJPGtleT5o +b3N0PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxzdHJpbmc+dmFsaWRhdGlvbi5pc3Uu +YXBwbGUuY29tPC9zdHJpbmc+CgkJCTwvYXJyYXk+CgkJCTxrZXk+bWFwPC9rZXk+ +CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+dHlwZTwva2V5PgoJCQkJ +CTxzdHJpbmc+dmFsaWRhdGlvbjwvc3RyaW5nPgoJCQkJPC9kaWN0PgoJCQk8L2Fy +cmF5PgoJCTwvZGljdD4KCQk8ZGljdD4KCQkJPGtleT5ob3N0PC9rZXk+CgkJCTxh +cnJheT4KCQkJCTxzdHJpbmc+YXBwbGRubGQuYXBwbGUuY29tPC9zdHJpbmc+CgkJ +CTwvYXJyYXk+CgkJCTxrZXk+bWFwPC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0 +PgoJCQkJCTxrZXk+dHlwZTwva2V5PgoJCQkJCTxzdHJpbmc+YXBwbGRubGQ8L3N0 +cmluZz4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q+CgkJPGRpY3Q+ +CgkJCTxrZXk+aG9zdDwva2V5PgoJCQk8YXJyYXk+CgkJCQk8c3RyaW5nPmJhc2Vq +dW1wZXIuYXBwbGUuY29tPC9zdHJpbmc+CgkJCTwvYXJyYXk+CgkJCTxrZXk+bWFw +PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+dHlwZTwva2V5 +PgoJCQkJCTxzdHJpbmc+YmFzZWp1bXBlcjwvc3RyaW5nPgoJCQkJPC9kaWN0PgoJ +CQk8L2FycmF5PgoJCTwvZGljdD4KCQk8ZGljdD4KCQkJPGtleT5ob3N0PC9rZXk+ +CgkJCTxhcnJheT4KCQkJCTxzdHJpbmc+cGxheWdyb3VuZHMtYXNzZXRzLWNkbi5h +cHBsZS5jb208L3N0cmluZz4KCQkJCTxzdHJpbmc+cGxheWdyb3VuZHMtY2RuLmFw +cGxlLmNvbTwvc3RyaW5nPgoJCQk8L2FycmF5PgoJCQk8a2V5Pm1hcDwva2V5PgoJ +CQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PnR5cGU8L2tleT4KCQkJCQk8 +c3RyaW5nPnBsYXlncm91bmRzPC9zdHJpbmc+CgkJCQk8L2RpY3Q+CgkJCTwvYXJy +YXk+CgkJPC9kaWN0PgoJCTxkaWN0PgoJCQk8a2V5Pmhvc3Q8L2tleT4KCQkJPGFy +cmF5PgoJCQkJPHN0cmluZz5zeWx2YW4uYXBwbGUuY29tPC9zdHJpbmc+CgkJCTwv +YXJyYXk+CgkJCTxrZXk+bWFwPC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJ +CQkJCTxrZXk+dHlwZTwva2V5PgoJCQkJCTxzdHJpbmc+c3lsdmFuPC9zdHJpbmc+ +CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxkaWN0PgoJCQk8 +a2V5Pmhvc3Q8L2tleT4KCQkJPGFycmF5PgoJCQkJPHN0cmluZz5kZXZpbWFnZXMt +Y2RuLmFwcGxlLmNvbTwvc3RyaW5nPgoJCQkJPHN0cmluZz5kb3dubG9hZC5kZXZl +bG9wZXIuYXBwbGUuY29tPC9zdHJpbmc+CgkJCTwvYXJyYXk+CgkJCTxrZXk+bWFw +PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+dHlwZTwva2V5 +PgoJCQkJCTxzdHJpbmc+ZGV2PC9zdHJpbmc+CgkJCQk8L2RpY3Q+CgkJCTwvYXJy +YXk+CgkJPC9kaWN0PgoJCTxkaWN0PgoJCQk8a2V5Pmhvc3Q8L2tleT4KCQkJPGFy +cmF5PgoJCQkJPHN0cmluZz5hdWRpb2NvbnRlbnRkb3dubG9hZC5hcHBsZS5jb208 +L3N0cmluZz4KCQkJPC9hcnJheT4KCQkJPGtleT5tYXA8L2tleT4KCQkJPGFycmF5 +PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT50eXBlPC9rZXk+CgkJCQkJPHN0cmluZz5n +Ym5kPC9zdHJpbmc+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJ +CTxkaWN0PgoJCQk8a2V5Pmhvc3Q8L2tleT4KCQkJPGFycmF5PgoJCQkJPHN0cmlu +Zz5vZHIuYXNzZXRzLml0dW5lcy5jb208L3N0cmluZz4KCQkJCTxzdHJpbmc+b2Ry +Lml0dW5lcy5hcHBsZS5jb208L3N0cmluZz4KCQkJPC9hcnJheT4KCQkJPGtleT5t +YXA8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT50eXBlPC9r +ZXk+CgkJCQkJPHN0cmluZz5vZHI8L3N0cmluZz4KCQkJCTwvZGljdD4KCQkJPC9h +cnJheT4KCQk8L2RpY3Q+CgkJPGRpY3Q+CgkJCTxrZXk+aG9zdDwva2V5PgoJCQk8 +YXJyYXk+CgkJCQk8c3RyaW5nPnAxLXUuaXR1bmVzLmFwcGxlLmNvbTwvc3RyaW5n +PgoJCQkJPHN0cmluZz5wMi11Lml0dW5lcy5hcHBsZS5jb208L3N0cmluZz4KCQkJ +CTxzdHJpbmc+ZGVpbW9zLmFwcGxlLmNvbTwvc3RyaW5nPgoJCQkJPHN0cmluZz5k +ZWltb3MzLmFwcGxlLmNvbTwvc3RyaW5nPgoJCQkJPHN0cmluZz5pdHVuZXN1LmFz +c2V0cy5pdHVuZXMuY29tPC9zdHJpbmc+CgkJCQk8c3RyaW5nPml0dW5lc3UuaXR1 +bmVzLmFwcGxlLmNvbTwvc3RyaW5nPgoJCQkJPHN0cmluZz5pdHVuZXN1LWFzc2V0 +cy5pdHVuZXMuYXBwbGUuY29tPC9zdHJpbmc+CgkJCTwvYXJyYXk+CgkJCTxrZXk+ +bWFwPC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+dHlwZTwv +a2V5PgoJCQkJCTxzdHJpbmc+aXR1bmVzdTwvc3RyaW5nPgoJCQkJPC9kaWN0PgoJ +CQk8L2FycmF5PgoJCTwvZGljdD4KCQk8ZGljdD4KCQkJPGtleT5ob3N0PC9rZXk+ +CgkJCTxhcnJheT4KCQkJCTxzdHJpbmc+Ki5waG9ib3MuYXBwbGUuY29tPC9zdHJp +bmc+CgkJCQk8c3RyaW5nPioudi5waG9ib3MuYXBwbGUuY29tPC9zdHJpbmc+CgkJ +CQk8c3RyaW5nPiouYXNzZXRzLml0dW5lcy5jb208L3N0cmluZz4KCQkJCTxzdHJp +bmc+Ym9va3MuaXR1bmVzLmFwcGxlLmNvbTwvc3RyaW5nPgoJCQkJPHN0cmluZz5p +b3NhcHBzLml0dW5lcy5hcHBsZS5jb208L3N0cmluZz4KCQkJCTxzdHJpbmc+b3N4 +YXBwcy5pdHVuZXMuYXBwbGUuY29tPC9zdHJpbmc+CgkJCTwvYXJyYXk+CgkJCTxr +ZXk+bWFwPC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+cGF0 +aDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHN0cmluZz4vKi9QdXJwbGUqLyou +emlwPC9zdHJpbmc+CgkJCQkJCTxzdHJpbmc+LyovUHVycGxlKi8qLnBrZzwvc3Ry +aW5nPgoJCQkJCQk8c3RyaW5nPi8qL1B1cnBsZSovKi5pcGE8L3N0cmluZz4KCQkJ +CQk8L2FycmF5PgoJCQkJCTxrZXk+dHlwZTwva2V5PgoJCQkJCTxzdHJpbmc+QXBw +czwvc3RyaW5nPgoJCQkJPC9kaWN0PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5wYXRo +PC9rZXk+CgkJCQkJPGFycmF5PgoJCQkJCQk8c3RyaW5nPi8qL1B1YmxpY2F0aW9u +Ki8qPC9zdHJpbmc+CgkJCQkJPC9hcnJheT4KCQkJCQk8a2V5PnR5cGU8L2tleT4K +CQkJCQk8c3RyaW5nPmlCb29rczwvc3RyaW5nPgoJCQkJPC9kaWN0PgoJCQkJPGRp +Y3Q+CgkJCQkJPGtleT5wYXRoPC9rZXk+CgkJCQkJPGFycmF5PgoJCQkJCQk8c3Ry +aW5nPi8qL1ZpZGVvLypmLm00djwvc3RyaW5nPgoJCQkJCQk8c3RyaW5nPi8qL1Zp +ZGVvLypmLm1vdjwvc3RyaW5nPgoJCQkJCTwvYXJyYXk+CgkJCQkJPGtleT50eXBl +PC9rZXk+CgkJCQkJPHN0cmluZz5Nb3ZpZXM8L3N0cmluZz4KCQkJCTwvZGljdD4K +CQkJCTxkaWN0PgoJCQkJCTxrZXk+cGF0aDwva2V5PgoJCQkJCTxhcnJheT4KCQkJ +CQkJPHN0cmluZz4vKi9GZWF0dXJlcy8qLm00cDwvc3RyaW5nPgoJCQkJCQk8c3Ry +aW5nPi8qL0ZlYXR1cmVzLyoubTRhPC9zdHJpbmc+CgkJCQkJCTxzdHJpbmc+Lyov +RmVhdHVyZXMvKi5tcDQ8L3N0cmluZz4KCQkJCQkJPHN0cmluZz4vKi9NdXNpYy8q +Lm00cDwvc3RyaW5nPgoJCQkJCQk8c3RyaW5nPi8qL011c2ljLyoubTRhPC9zdHJp +bmc+CgkJCQkJCTxzdHJpbmc+LyovTXVzaWMvKi5tcDQ8L3N0cmluZz4KCQkJCQk8 +L2FycmF5PgoJCQkJCTxrZXk+dHlwZTwva2V5PgoJCQkJCTxzdHJpbmc+U29uZ3M8 +L3N0cmluZz4KCQkJCTwvZGljdD4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+cGF0aDwv +a2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHN0cmluZz4vKi9Db2JhbHQqPC9zdHJp +bmc+CgkJCQkJPC9hcnJheT4KCQkJCQk8a2V5PnR5cGU8L2tleT4KCQkJCQk8c3Ry +aW5nPml0dW5lc3U8L3N0cmluZz4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8 +L2RpY3Q+CgkJPGRpY3Q+CgkJCTxrZXk+aG9zdDwva2V5PgoJCQk8YXJyYXk+CgkJ +CQk8c3RyaW5nPio8L3N0cmluZz4KCQkJPC9hcnJheT4KCQkJPGtleT5tYXA8L2tl +eT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT50eXBlPC9rZXk+CgkJ +CQkJPHN0cmluZz5pY2xvdWQ8L3N0cmluZz4KCQkJCQk8a2V5Pm5hbWVzcGFjZTwv +a2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHN0cmluZz5pY2xvdWQ8L3N0cmluZz4K +CQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+cGF0aDwva2V5PgoJCQkJCTxhcnJheT4K +CQkJCQkJPHN0cmluZz5uL2E8L3N0cmluZz4KCQkJCQk8L2FycmF5PgoJCQkJPC9k +aWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCTwvYXJyYXk+Cgk8a2V5Pm1lZGlh +VHlwZU1hcDwva2V5PgoJPGFycmF5PgoJCTxkaWN0PgoJCQk8a2V5Pm5hbWVzcGFj +ZTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8c3RyaW5nPmljbG91ZDwvc3RyaW5nPgoJ +CQk8L2FycmF5PgoJCQk8a2V5PnBhdGg8L2tleT4KCQkJPGFycmF5PgoJCQkJPHN0 +cmluZz5uL2E8L3N0cmluZz4KCQkJPC9hcnJheT4KCQkJPGtleT50eXBlPC9rZXk+ +CgkJCTxzdHJpbmc+aUNsb3VkPC9zdHJpbmc+CgkJPC9kaWN0PgoJCTxkaWN0PgoJ +CQk8a2V5PnBhdGg8L2tleT4KCQkJPGFycmF5PgoJCQkJPHN0cmluZz4vKi9Db2Jh +bHQqPC9zdHJpbmc+CgkJCQk8c3RyaW5nPi9XZWJPYmplY3RzL0NvcmUud29hL0Rv +d25sb2FkKjwvc3RyaW5nPgoJCQkJPHN0cmluZz4vV2ViT2JqZWN0cy9Db3JlLndv +YS9GZWVkKjwvc3RyaW5nPgoJCQkJPHN0cmluZz4vV2ViT2JqZWN0cy9Db3JlLndv +YS9TdWJzY3JpcHRpb24qPC9zdHJpbmc+CgkJCTwvYXJyYXk+CgkJCTxrZXk+dHlw +ZTwva2V5PgoJCQk8c3RyaW5nPmlUdW5lcyBVPC9zdHJpbmc+CgkJPC9kaWN0PgoJ +CTxkaWN0PgoJCQk8a2V5PnBhdGg8L2tleT4KCQkJPGFycmF5PgoJCQkJPHN0cmlu +Zz4qLmVwdWI8L3N0cmluZz4KCQkJCTxzdHJpbmc+Ki5pYm9va3M8L3N0cmluZz4K +CQkJPC9hcnJheT4KCQkJPGtleT50eXBlPC9rZXk+CgkJCTxzdHJpbmc+Qm9va3M8 +L3N0cmluZz4KCQk8L2RpY3Q+CgkJPGRpY3Q+CgkJCTxrZXk+cGF0aDwva2V5PgoJ +CQk8YXJyYXk+CgkJCQk8c3RyaW5nPipbYUFdcHBsZVt0VF1bdlZdKjwvc3RyaW5n +PgoJCQkJPHN0cmluZz4qdHZbb09dW3NTXSo8L3N0cmluZz4KCQkJCTxzdHJpbmc+ +Ki9WaWRlb3MvKi5bbU1dW29PXVt2Vl08L3N0cmluZz4KCQkJPC9hcnJheT4KCQkJ +PGtleT50eXBlPC9rZXk+CgkJCTxzdHJpbmc+QXBwbGUgVFYgU29mdHdhcmU8L3N0 +cmluZz4KCQk8L2RpY3Q+CgkJPGRpY3Q+CgkJCTxrZXk+cGF0aDwva2V5PgoJCQk8 +YXJyYXk+CgkJCQk8c3RyaW5nPiouaXBhPC9zdHJpbmc+CgkJCQk8c3RyaW5nPiou +aXBkPC9zdHJpbmc+CgkJCQk8c3RyaW5nPiouaXBzdzwvc3RyaW5nPgoJCQkJPHN0 +cmluZz4qLmFzc2V0cGFjazwvc3RyaW5nPgoJCQkJPHN0cmluZz4vaW9zKjwvc3Ry +aW5nPgoJCQkJPHN0cmluZz4vaU9TKjwvc3RyaW5nPgoJCQk8L2FycmF5PgoJCQk8 +a2V5PnR5cGU8L2tleT4KCQkJPHN0cmluZz5pT1MgU29mdHdhcmU8L3N0cmluZz4K +CQk8L2RpY3Q+CgkJPGRpY3Q+CgkJCTxrZXk+cGF0aDwva2V5PgoJCQk8YXJyYXk+ +CgkJCQk8c3RyaW5nPioucGtnPC9zdHJpbmc+CgkJCQk8c3RyaW5nPiouZG1nPC9z +dHJpbmc+CgkJCTwvYXJyYXk+CgkJCTxrZXk+dHlwZTwva2V5PgoJCQk8c3RyaW5n +Pk1hYyBTb2Z0d2FyZTwvc3RyaW5nPgoJCTwvZGljdD4KCQk8ZGljdD4KCQkJPGtl +eT5wYXRoPC9rZXk+CgkJCTxhcnJheT4KCQkJCTxzdHJpbmc+Ki5tNHY8L3N0cmlu +Zz4KCQkJCTxzdHJpbmc+Ki5tb3Y8L3N0cmluZz4KCQkJPC9hcnJheT4KCQkJPGtl +eT50eXBlPC9rZXk+CgkJCTxzdHJpbmc+TW92aWVzPC9zdHJpbmc+CgkJPC9kaWN0 +PgoJCTxkaWN0PgoJCQk8a2V5PnBhdGg8L2tleT4KCQkJPGFycmF5PgoJCQkJPHN0 +cmluZz4qLm00cDwvc3RyaW5nPgoJCQkJPHN0cmluZz4qLm00YTwvc3RyaW5nPgoJ +CQkJPHN0cmluZz4qLm1wNDwvc3RyaW5nPgoJCQk8L2FycmF5PgoJCQk8a2V5PnR5 +cGU8L2tleT4KCQkJPHN0cmluZz5NdXNpYzwvc3RyaW5nPgoJCTwvZGljdD4KCQk8 +ZGljdD4KCQkJPGtleT50eXBlPC9rZXk+CgkJCTxzdHJpbmc+T3RoZXI8L3N0cmlu +Zz4KCQk8L2RpY3Q+Cgk8L2FycmF5PgoJPGtleT5tZWRpYVR5cGVPcmRlcjwva2V5 +PgoJPGFycmF5PgoJCTxzdHJpbmc+TWFjIFNvZnR3YXJlPC9zdHJpbmc+CgkJPHN0 +cmluZz5pT1MgU29mdHdhcmU8L3N0cmluZz4KCQk8c3RyaW5nPkFwcGxlIFRWIFNv +ZnR3YXJlPC9zdHJpbmc+CgkJPHN0cmluZz5pQ2xvdWQ8L3N0cmluZz4KCQk8c3Ry +aW5nPkJvb2tzPC9zdHJpbmc+CgkJPHN0cmluZz5pVHVuZXMgVTwvc3RyaW5nPgoJ +CTxzdHJpbmc+TW92aWVzPC9zdHJpbmc+CgkJPHN0cmluZz5NdXNpYzwvc3RyaW5n +PgoJCTxzdHJpbmc+T3RoZXI8L3N0cmluZz4KCTwvYXJyYXk+Cgk8a2V5Pm1lZGlh +VHlwZVN0cmluZ3M8L2tleT4KCTxkaWN0PgoJCTxrZXk+ZGU8L2tleT4KCQk8ZGlj +dD4KCQkJPGtleT5BcHBsZSBUViBTb2Z0d2FyZTwva2V5PgoJCQk8c3RyaW5nPkFw +cGxlIFRWLVNvZnR3YXJlPC9zdHJpbmc+CgkJCTxrZXk+Qm9va3M8L2tleT4KCQkJ +PHN0cmluZz5Cw7xjaGVyPC9zdHJpbmc+CgkJCTxrZXk+aUNsb3VkPC9rZXk+CgkJ +CTxzdHJpbmc+aUNsb3VkPC9zdHJpbmc+CgkJCTxrZXk+aU9TIFNvZnR3YXJlPC9r +ZXk+CgkJCTxzdHJpbmc+aU9TLVNvZnR3YXJlPC9zdHJpbmc+CgkJCTxrZXk+aVR1 +bmVzIFU8L2tleT4KCQkJPHN0cmluZz5pVHVuZXMgVTwvc3RyaW5nPgoJCQk8a2V5 +Pk1hYyBTb2Z0d2FyZTwva2V5PgoJCQk8c3RyaW5nPk1hYy1Tb2Z0d2FyZTwvc3Ry +aW5nPgoJCQk8a2V5Pk1vdmllczwva2V5PgoJCQk8c3RyaW5nPkZpbG1lPC9zdHJp +bmc+CgkJCTxrZXk+TXVzaWM8L2tleT4KCQkJPHN0cmluZz5NdXNpazwvc3RyaW5n +PgoJCQk8a2V5Pk90aGVyPC9rZXk+CgkJCTxzdHJpbmc+QW5kZXJlczwvc3RyaW5n +PgoJCTwvZGljdD4KCQk8a2V5PmVuPC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+QXBw +bGUgVFYgU29mdHdhcmU8L2tleT4KCQkJPHN0cmluZz5BcHBsZSBUViBTb2Z0d2Fy +ZTwvc3RyaW5nPgoJCQk8a2V5PkJvb2tzPC9rZXk+CgkJCTxzdHJpbmc+Qm9va3M8 +L3N0cmluZz4KCQkJPGtleT5pQ2xvdWQ8L2tleT4KCQkJPHN0cmluZz5pQ2xvdWQ8 +L3N0cmluZz4KCQkJPGtleT5pT1MgU29mdHdhcmU8L2tleT4KCQkJPHN0cmluZz5p +T1MgU29mdHdhcmU8L3N0cmluZz4KCQkJPGtleT5pVHVuZXMgVTwva2V5PgoJCQk8 +c3RyaW5nPmlUdW5lcyBVPC9zdHJpbmc+CgkJCTxrZXk+TWFjIFNvZnR3YXJlPC9r +ZXk+CgkJCTxzdHJpbmc+TWFjIFNvZnR3YXJlPC9zdHJpbmc+CgkJCTxrZXk+TW92 +aWVzPC9rZXk+CgkJCTxzdHJpbmc+TW92aWVzPC9zdHJpbmc+CgkJCTxrZXk+TXVz +aWM8L2tleT4KCQkJPHN0cmluZz5NdXNpYzwvc3RyaW5nPgoJCQk8a2V5Pk90aGVy +PC9rZXk+CgkJCTxzdHJpbmc+T3RoZXI8L3N0cmluZz4KCQk8L2RpY3Q+CgkJPGtl +eT5lczwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PkFwcGxlIFRWIFNvZnR3YXJlPC9r +ZXk+CgkJCTxzdHJpbmc+U29mdHdhcmUgQXBwbGUgVFY8L3N0cmluZz4KCQkJPGtl +eT5Cb29rczwva2V5PgoJCQk8c3RyaW5nPkxpYnJvczwvc3RyaW5nPgoJCQk8a2V5 +PmlDbG91ZDwva2V5PgoJCQk8c3RyaW5nPmlDbG91ZDwvc3RyaW5nPgoJCQk8a2V5 +PmlPUyBTb2Z0d2FyZTwva2V5PgoJCQk8c3RyaW5nPlNvZnR3YXJlIGlPUzwvc3Ry +aW5nPgoJCQk8a2V5PmlUdW5lcyBVPC9rZXk+CgkJCTxzdHJpbmc+aVR1bmVzIFU8 +L3N0cmluZz4KCQkJPGtleT5NYWMgU29mdHdhcmU8L2tleT4KCQkJPHN0cmluZz5T +b2Z0d2FyZSBNYWM8L3N0cmluZz4KCQkJPGtleT5Nb3ZpZXM8L2tleT4KCQkJPHN0 +cmluZz5QZWzDrWN1bGFzPC9zdHJpbmc+CgkJCTxrZXk+TXVzaWM8L2tleT4KCQkJ +PHN0cmluZz5Nw7pzaWNhPC9zdHJpbmc+CgkJCTxrZXk+T3RoZXI8L2tleT4KCQkJ +PHN0cmluZz5PdHJvczwvc3RyaW5nPgoJCTwvZGljdD4KCQk8a2V5PmZyPC9rZXk+ +CgkJPGRpY3Q+CgkJCTxrZXk+QXBwbGUgVFYgU29mdHdhcmU8L2tleT4KCQkJPHN0 +cmluZz5Mb2dpY2llbHMgQXBwbGUgVFY8L3N0cmluZz4KCQkJPGtleT5Cb29rczwv +a2V5PgoJCQk8c3RyaW5nPkxpdnJlczwvc3RyaW5nPgoJCQk8a2V5PmlDbG91ZDwv +a2V5PgoJCQk8c3RyaW5nPmlDbG91ZDwvc3RyaW5nPgoJCQk8a2V5PmlPUyBTb2Z0 +d2FyZTwva2V5PgoJCQk8c3RyaW5nPkxvZ2ljaWVscyBpT1M8L3N0cmluZz4KCQkJ +PGtleT5pVHVuZXMgVTwva2V5PgoJCQk8c3RyaW5nPmlUdW5lcyBVPC9zdHJpbmc+ +CgkJCTxrZXk+TWFjIFNvZnR3YXJlPC9rZXk+CgkJCTxzdHJpbmc+TG9naWNpZWxz +IE1hYzwvc3RyaW5nPgoJCQk8a2V5Pk1vdmllczwva2V5PgoJCQk8c3RyaW5nPkZp +bG1zPC9zdHJpbmc+CgkJCTxrZXk+TXVzaWM8L2tleT4KCQkJPHN0cmluZz5NdXNp +cXVlPC9zdHJpbmc+CgkJCTxrZXk+T3RoZXI8L2tleT4KCQkJPHN0cmluZz5BdXRy +ZXM8L3N0cmluZz4KCQk8L2RpY3Q+CgkJPGtleT5pdDwva2V5PgoJCTxkaWN0PgoJ +CQk8a2V5PkFwcGxlIFRWIFNvZnR3YXJlPC9rZXk+CgkJCTxzdHJpbmc+U29mdHdh +cmUgQXBwbGUgVFY8L3N0cmluZz4KCQkJPGtleT5Cb29rczwva2V5PgoJCQk8c3Ry +aW5nPkxpYnJpPC9zdHJpbmc+CgkJCTxrZXk+aUNsb3VkPC9rZXk+CgkJCTxzdHJp +bmc+aUNsb3VkPC9zdHJpbmc+CgkJCTxrZXk+aU9TIFNvZnR3YXJlPC9rZXk+CgkJ +CTxzdHJpbmc+U29mdHdhcmUgaU9TPC9zdHJpbmc+CgkJCTxrZXk+aVR1bmVzIFU8 +L2tleT4KCQkJPHN0cmluZz5pVHVuZXMgVTwvc3RyaW5nPgoJCQk8a2V5Pk1hYyBT +b2Z0d2FyZTwva2V5PgoJCQk8c3RyaW5nPlNvZnR3YXJlIE1hYzwvc3RyaW5nPgoJ +CQk8a2V5Pk1vdmllczwva2V5PgoJCQk8c3RyaW5nPkZpbG08L3N0cmluZz4KCQkJ +PGtleT5NdXNpYzwva2V5PgoJCQk8c3RyaW5nPk11c2ljYTwvc3RyaW5nPgoJCQk8 +a2V5Pk90aGVyPC9rZXk+CgkJCTxzdHJpbmc+QWx0cm88L3N0cmluZz4KCQk8L2Rp +Y3Q+CgkJPGtleT5qYTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PkFwcGxlIFRWIFNv +ZnR3YXJlPC9rZXk+CgkJCTxzdHJpbmc+QXBwbGUgVFYg44K944OV44OI44Km44Kn +44KiPC9zdHJpbmc+CgkJCTxrZXk+Qm9va3M8L2tleT4KCQkJPHN0cmluZz7jg5bj +g4Pjgq88L3N0cmluZz4KCQkJPGtleT5pQ2xvdWQ8L2tleT4KCQkJPHN0cmluZz5p +Q2xvdWQ8L3N0cmluZz4KCQkJPGtleT5pT1MgU29mdHdhcmU8L2tleT4KCQkJPHN0 +cmluZz5pT1Mg44K944OV44OI44Km44Kn44KiPC9zdHJpbmc+CgkJCTxrZXk+aVR1 +bmVzIFU8L2tleT4KCQkJPHN0cmluZz5pVHVuZXMgVTwvc3RyaW5nPgoJCQk8a2V5 +Pk1hYyBTb2Z0d2FyZTwva2V5PgoJCQk8c3RyaW5nPk1hYyDjgr3jg5Xjg4jjgqbj +gqfjgqI8L3N0cmluZz4KCQkJPGtleT5Nb3ZpZXM8L2tleT4KCQkJPHN0cmluZz7j +g6Djg7zjg5Pjg7w8L3N0cmluZz4KCQkJPGtleT5NdXNpYzwva2V5PgoJCQk8c3Ry +aW5nPuODn+ODpeODvOOCuOODg+OCrzwvc3RyaW5nPgoJCQk8a2V5Pk90aGVyPC9r +ZXk+CgkJCTxzdHJpbmc+44Gd44Gu5LuWPC9zdHJpbmc+CgkJPC9kaWN0PgoJCTxr +ZXk+a288L2tleT4KCQk8ZGljdD4KCQkJPGtleT5BcHBsZSBUViBTb2Z0d2FyZTwv +a2V5PgoJCQk8c3RyaW5nPkFwcGxlIFRWIOyGjO2UhO2KuOybqOyWtDwvc3RyaW5n +PgoJCQk8a2V5PkJvb2tzPC9rZXk+CgkJCTxzdHJpbmc+7LGFPC9zdHJpbmc+CgkJ +CTxrZXk+aUNsb3VkPC9rZXk+CgkJCTxzdHJpbmc+aUNsb3VkPC9zdHJpbmc+CgkJ +CTxrZXk+aU9TIFNvZnR3YXJlPC9rZXk+CgkJCTxzdHJpbmc+aU9TIOyGjO2UhO2K +uOybqOyWtDwvc3RyaW5nPgoJCQk8a2V5PmlUdW5lcyBVPC9rZXk+CgkJCTxzdHJp +bmc+aVR1bmVzIFU8L3N0cmluZz4KCQkJPGtleT5NYWMgU29mdHdhcmU8L2tleT4K +CQkJPHN0cmluZz5NYWMg7IaM7ZSE7Yq47Juo7Ja0PC9zdHJpbmc+CgkJCTxrZXk+ +TW92aWVzPC9rZXk+CgkJCTxzdHJpbmc+64+Z7JiB7IOBPC9zdHJpbmc+CgkJCTxr +ZXk+TXVzaWM8L2tleT4KCQkJPHN0cmluZz7snYzslYU8L3N0cmluZz4KCQkJPGtl +eT5PdGhlcjwva2V5PgoJCQk8c3RyaW5nPuq4sO2DgDwvc3RyaW5nPgoJCTwvZGlj +dD4KCQk8a2V5Pm5sPC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+QXBwbGUgVFYgU29m +dHdhcmU8L2tleT4KCQkJPHN0cmluZz5BcHBsZSBUVi1zb2Z0d2FyZTwvc3RyaW5n +PgoJCQk8a2V5PkJvb2tzPC9rZXk+CgkJCTxzdHJpbmc+Qm9la2VuPC9zdHJpbmc+ +CgkJCTxrZXk+aUNsb3VkPC9rZXk+CgkJCTxzdHJpbmc+aUNsb3VkPC9zdHJpbmc+ +CgkJCTxrZXk+aU9TIFNvZnR3YXJlPC9rZXk+CgkJCTxzdHJpbmc+aU9TLXNvZnR3 +YXJlPC9zdHJpbmc+CgkJCTxrZXk+aVR1bmVzIFU8L2tleT4KCQkJPHN0cmluZz5p +VHVuZXMgVTwvc3RyaW5nPgoJCQk8a2V5Pk1hYyBTb2Z0d2FyZTwva2V5PgoJCQk8 +c3RyaW5nPk1hYy1zb2Z0d2FyZTwvc3RyaW5nPgoJCQk8a2V5Pk1vdmllczwva2V5 +PgoJCQk8c3RyaW5nPkZpbG1zPC9zdHJpbmc+CgkJCTxrZXk+TXVzaWM8L2tleT4K +CQkJPHN0cmluZz5NdXppZWs8L3N0cmluZz4KCQkJPGtleT5PdGhlcjwva2V5PgoJ +CQk8c3RyaW5nPk92ZXJpZzwvc3RyaW5nPgoJCTwvZGljdD4KCQk8a2V5PnpoX0NO +PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+QXBwbGUgVFYgU29mdHdhcmU8L2tleT4K +CQkJPHN0cmluZz5BcHBsZSBUViDova/ku7Y8L3N0cmluZz4KCQkJPGtleT5Cb29r +czwva2V5PgoJCQk8c3RyaW5nPuWbvuS5pjwvc3RyaW5nPgoJCQk8a2V5PmlDbG91 +ZDwva2V5PgoJCQk8c3RyaW5nPmlDbG91ZDwvc3RyaW5nPgoJCQk8a2V5PmlPUyBT +b2Z0d2FyZTwva2V5PgoJCQk8c3RyaW5nPmlPUyDova/ku7Y8L3N0cmluZz4KCQkJ +PGtleT5pVHVuZXMgVTwva2V5PgoJCQk8c3RyaW5nPmlUdW5lcyBVPC9zdHJpbmc+ +CgkJCTxrZXk+TWFjIFNvZnR3YXJlPC9rZXk+CgkJCTxzdHJpbmc+TWFjIOi9r+S7 +tjwvc3RyaW5nPgoJCQk8a2V5Pk1vdmllczwva2V5PgoJCQk8c3RyaW5nPuW9seeJ +hzwvc3RyaW5nPgoJCQk8a2V5Pk11c2ljPC9rZXk+CgkJCTxzdHJpbmc+6Z+z5LmQ +PC9zdHJpbmc+CgkJCTxrZXk+T3RoZXI8L2tleT4KCQkJPHN0cmluZz7lhbbku5Y8 +L3N0cmluZz4KCQk8L2RpY3Q+CgkJPGtleT56aC1DTjwva2V5PgoJCTxkaWN0PgoJ +CQk8a2V5PkFwcGxlIFRWIFNvZnR3YXJlPC9rZXk+CgkJCTxzdHJpbmc+QXBwbGUg +VFYg6L2v5Lu2PC9zdHJpbmc+CgkJCTxrZXk+Qm9va3M8L2tleT4KCQkJPHN0cmlu +Zz7lm77kuaY8L3N0cmluZz4KCQkJPGtleT5pQ2xvdWQ8L2tleT4KCQkJPHN0cmlu +Zz5pQ2xvdWQ8L3N0cmluZz4KCQkJPGtleT5pT1MgU29mdHdhcmU8L2tleT4KCQkJ +PHN0cmluZz5pT1Mg6L2v5Lu2PC9zdHJpbmc+CgkJCTxrZXk+aVR1bmVzIFU8L2tl +eT4KCQkJPHN0cmluZz5pVHVuZXMgVTwvc3RyaW5nPgoJCQk8a2V5Pk1hYyBTb2Z0 +d2FyZTwva2V5PgoJCQk8c3RyaW5nPk1hYyDova/ku7Y8L3N0cmluZz4KCQkJPGtl +eT5Nb3ZpZXM8L2tleT4KCQkJPHN0cmluZz7lvbHniYc8L3N0cmluZz4KCQkJPGtl +eT5NdXNpYzwva2V5PgoJCQk8c3RyaW5nPumfs+S5kDwvc3RyaW5nPgoJCQk8a2V5 +Pk90aGVyPC9rZXk+CgkJCTxzdHJpbmc+5YW25LuWPC9zdHJpbmc+CgkJPC9kaWN0 +PgoJCTxrZXk+emgtSGFuczwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PkFwcGxlIFRW +IFNvZnR3YXJlPC9rZXk+CgkJCTxzdHJpbmc+QXBwbGUgVFYg6L2v5Lu2PC9zdHJp +bmc+CgkJCTxrZXk+Qm9va3M8L2tleT4KCQkJPHN0cmluZz7lm77kuaY8L3N0cmlu +Zz4KCQkJPGtleT5pQ2xvdWQ8L2tleT4KCQkJPHN0cmluZz5pQ2xvdWQ8L3N0cmlu +Zz4KCQkJPGtleT5pT1MgU29mdHdhcmU8L2tleT4KCQkJPHN0cmluZz5pT1Mg6L2v +5Lu2PC9zdHJpbmc+CgkJCTxrZXk+aVR1bmVzIFU8L2tleT4KCQkJPHN0cmluZz5p +VHVuZXMgVTwvc3RyaW5nPgoJCQk8a2V5Pk1hYyBTb2Z0d2FyZTwva2V5PgoJCQk8 +c3RyaW5nPk1hYyDova/ku7Y8L3N0cmluZz4KCQkJPGtleT5Nb3ZpZXM8L2tleT4K +CQkJPHN0cmluZz7lvbHniYc8L3N0cmluZz4KCQkJPGtleT5NdXNpYzwva2V5PgoJ +CQk8c3RyaW5nPumfs+S5kDwvc3RyaW5nPgoJCQk8a2V5Pk90aGVyPC9rZXk+CgkJ +CTxzdHJpbmc+5YW25LuWPC9zdHJpbmc+CgkJPC9kaWN0PgoJCTxrZXk+emhfVFc8 +L2tleT4KCQk8ZGljdD4KCQkJPGtleT5BcHBsZSBUViBTb2Z0d2FyZTwva2V5PgoJ +CQk8c3RyaW5nPkFwcGxlIFRWIOi7n+mrlDwvc3RyaW5nPgoJCQk8a2V5PkJvb2tz +PC9rZXk+CgkJCTxzdHJpbmc+5pu457GNPC9zdHJpbmc+CgkJCTxrZXk+aUNsb3Vk +PC9rZXk+CgkJCTxzdHJpbmc+aUNsb3VkPC9zdHJpbmc+CgkJCTxrZXk+aU9TIFNv +ZnR3YXJlPC9rZXk+CgkJCTxzdHJpbmc+aU9TIOi7n+mrlDwvc3RyaW5nPgoJCQk8 +a2V5PmlUdW5lcyBVPC9rZXk+CgkJCTxzdHJpbmc+aVR1bmVzIFU8L3N0cmluZz4K +CQkJPGtleT5NYWMgU29mdHdhcmU8L2tleT4KCQkJPHN0cmluZz5NYWMg6Luf6auU +PC9zdHJpbmc+CgkJCTxrZXk+TW92aWVzPC9rZXk+CgkJCTxzdHJpbmc+5b2x54mH +PC9zdHJpbmc+CgkJCTxrZXk+TXVzaWM8L2tleT4KCQkJPHN0cmluZz7pn7PmqII8 +L3N0cmluZz4KCQkJPGtleT5PdGhlcjwva2V5PgoJCQk8c3RyaW5nPuWFtuS7ljwv +c3RyaW5nPgoJCTwvZGljdD4KCQk8a2V5PnpoLVRXPC9rZXk+CgkJPGRpY3Q+CgkJ +CTxrZXk+QXBwbGUgVFYgU29mdHdhcmU8L2tleT4KCQkJPHN0cmluZz5BcHBsZSBU +ViDou5/pq5Q8L3N0cmluZz4KCQkJPGtleT5Cb29rczwva2V5PgoJCQk8c3RyaW5n +PuabuOexjTwvc3RyaW5nPgoJCQk8a2V5PmlDbG91ZDwva2V5PgoJCQk8c3RyaW5n +PmlDbG91ZDwvc3RyaW5nPgoJCQk8a2V5PmlPUyBTb2Z0d2FyZTwva2V5PgoJCQk8 +c3RyaW5nPmlPUyDou5/pq5Q8L3N0cmluZz4KCQkJPGtleT5pVHVuZXMgVTwva2V5 +PgoJCQk8c3RyaW5nPmlUdW5lcyBVPC9zdHJpbmc+CgkJCTxrZXk+TWFjIFNvZnR3 +YXJlPC9rZXk+CgkJCTxzdHJpbmc+TWFjIOi7n+mrlDwvc3RyaW5nPgoJCQk8a2V5 +Pk1vdmllczwva2V5PgoJCQk8c3RyaW5nPuW9seeJhzwvc3RyaW5nPgoJCQk8a2V5 +Pk11c2ljPC9rZXk+CgkJCTxzdHJpbmc+6Z+z5qiCPC9zdHJpbmc+CgkJCTxrZXk+ +T3RoZXI8L2tleT4KCQkJPHN0cmluZz7lhbbku5Y8L3N0cmluZz4KCQk8L2RpY3Q+ +CgkJPGtleT56aC1IYW50PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+QXBwbGUgVFYg +U29mdHdhcmU8L2tleT4KCQkJPHN0cmluZz5BcHBsZSBUViDou5/pq5Q8L3N0cmlu +Zz4KCQkJPGtleT5Cb29rczwva2V5PgoJCQk8c3RyaW5nPuabuOexjTwvc3RyaW5n +PgoJCQk8a2V5PmlDbG91ZDwva2V5PgoJCQk8c3RyaW5nPmlDbG91ZDwvc3RyaW5n +PgoJCQk8a2V5PmlPUyBTb2Z0d2FyZTwva2V5PgoJCQk8c3RyaW5nPmlPUyDou5/p +q5Q8L3N0cmluZz4KCQkJPGtleT5pVHVuZXMgVTwva2V5PgoJCQk8c3RyaW5nPmlU +dW5lcyBVPC9zdHJpbmc+CgkJCTxrZXk+TWFjIFNvZnR3YXJlPC9rZXk+CgkJCTxz +dHJpbmc+TWFjIOi7n+mrlDwvc3RyaW5nPgoJCQk8a2V5Pk1vdmllczwva2V5PgoJ +CQk8c3RyaW5nPuW9seeJhzwvc3RyaW5nPgoJCQk8a2V5Pk11c2ljPC9rZXk+CgkJ +CTxzdHJpbmc+6Z+z5qiCPC9zdHJpbmc+CgkJCTxrZXk+T3RoZXI8L2tleT4KCQkJ +PHN0cmluZz7lhbbku5Y8L3N0cmluZz4KCQk8L2RpY3Q+Cgk8L2RpY3Q+Cgk8a2V5 +PmFzc2V0TmFtZXNwYWNlczwva2V5PgoJPGFycmF5PgoJCTxzdHJpbmc+aWNsb3Vk +PC9zdHJpbmc+Cgk8L2FycmF5PgoJPGtleT5wdXNoVG9waWM8L2tleT4KCTxzdHJp +bmc+Y29tLmFwcGxlLmFzc2V0Y2FjaGU8L3N0cmluZz4KCTxrZXk+aWNsb3VkU2ln +bmF0dXJlSGVhZGVyPC9rZXk+Cgk8c3RyaW5nPlgtQXBwbGUtQ2FjaGUtaUNsb3Vk +PC9zdHJpbmc+Cgk8a2V5PmljbG91ZFNpZ25hdHVyZUtleXM8L2tleT4KCTxhcnJh +eT4KCQk8ZGljdD4KCQkJPGtleT52ZXJzaW9uPC9rZXk+CgkJCTxzdHJpbmc+MTwv +c3RyaW5nPgoJCQk8a2V5PnB1YmxpY0tleXM8L2tleT4KCQkJPGFycmF5PgoJCQkJ +PGRhdGE+TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFZ1hNS3FS +WWc5OU1XMm4yWUQ0Yi9sZnhMcDlUcGkxejYzMXJIZ0h3QkFHQi8vNU9rcEtVcVJ6 +UTRnR2IzQ0g4bXVHMnVjQ1cybTJCQU8rdlUzbDRzSXc9PTwvZGF0YT4KCQkJPC9h +cnJheT4KCQk8L2RpY3Q+Cgk8L2FycmF5Pgo8L2RpY3Q+CjwvcGxpc3Q+CqCCDREw +ggQTMIIC+6ADAgECAghgJU5WgRbP8TANBgkqhkiG9w0BAQsFADBiMQswCQYDVQQG +EwJVUzETMBEGA1UEChMKQXBwbGUgSW5jLjEmMCQGA1UECxMdQXBwbGUgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkxFjAUBgNVBAMTDUFwcGxlIFJvb3QgQ0EwHhcNMTIw +OTEzMjIzNTM3WhcNMjcwOTEzMjIzNTM3WjCBhzE7MDkGA1UEAwwyQXBwbGUgU3lz +dGVtIEludGVncmF0aW9uIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJjAkBgNV +BAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRMwEQYDVQQKDApBcHBs +ZSBJbmMuMQswCQYDVQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAJ5I9o+rG4mlnzRHtjgwp7BipJmEKnRLR1tmNWn+lwFkGJ0K+NczKmTYvANP +zU2AkNLDxdGMwXP2WlBwzeCUNYLEWcq6qZS9iDZ6Mt8IKeCcGRxoAmCH/C6KPDdN +fIG7bG9yRfWzlmZeq5dUUAPAQfy1qPd43kyaZ/RNJ1SeyHXqjHbBtXnjYM6YITh7 +mlPoV2kT8PCGkS6tdblTSjD2bZaOXufppRbntFvn6W5P5zjaUzlgDv3QCxlSXXk6 +XXsNGZFylA4DphTK3Xon7SIh62cBwJhP93iBNPsISLbspNtg052nRmxQphRKMO53 +h2S2srSS/EWzgFm9hZwv0ddZ4w8CAwEAAaOBpjCBozAdBgNVHQ4EFgQUEnV8R5L9 +g+O+LvxZf2dDgTUQRewwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBQr0GlH +lHYJ/vRrjS5ApvdHTX8IXjAuBgNVHR8EJzAlMCOgIaAfhh1odHRwOi8vY3JsLmFw +cGxlLmNvbS9yb290LmNybDAOBgNVHQ8BAf8EBAMCAQYwEAYKKoZIhvdjZAYCCgQC +BQAwDQYJKoZIhvcNAQELBQADggEBAKo9OIqWm8eUlz0+Wx8JQ+EabmpN1ji7im0A +yZPcPqLDKpfBTwegoxRs2QuazbHPfMBndRLuLrAoFxh+cz20BJE5fDf7vTQBoN53 +p1u2R45zOo97Y1jEo20ZTZ2e1j6+GFPpME3Sre9L9qSEzyX86g0zWFEA4kv+dNlH +E56n1zdq6icMbH6Kk+5gEDAb9VkqFE/Yf+ew5j3+cuDIUiEVNxhZ1HxcjVULm/s6 +dQ/2Bim2wn+Nlc5od3Ou3oH6zglysWzO5JSehfjcusRfd+meA5k0jczcn1aY7Sjt +BlaA6lI6lcRkjwzZV73CqY2gOuJsWip72vaBGgMXawwM2r2OIwYwggQ3MIIDH6AD +AgECAggKI1PJkLIDIjANBgkqhkiG9w0BAQsFADCBhzE7MDkGA1UEAwwyQXBwbGUg +U3lzdGVtIEludGVncmF0aW9uIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJjAk +BgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRMwEQYDVQQKDApB +cHBsZSBJbmMuMQswCQYDVQQGEwJVUzAeFw0xMzA3MTcxOTU3MTlaFw0yMTA3MTUx +OTU3MTlaMF4xHzAdBgNVBAMMFkFwcGxlIFNVIENvbmZpZ3VyYXRpb24xGTAXBgNV +BAsMEFNVIENvbmZpZ3VyYXRpb24xEzARBgNVBAoMCkFwcGxlIEluYy4xCzAJBgNV +BAYTAlVTMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArHdoifOOmfS3 +D0nsd9eYiqrhA1apQ9qGrN30RlJHZ5rcgTWUrQmICexnMU+7WRlJ8eWehvnVUe0B +EBp11T+qB9yu79lUcm/CCQe2OA2YD5HKrjCc2t/z+iF/XgYb65HFSf7wrUbiKs0H +krQ4mtHWKv3gfSoNsGXahVNE9hUAIltN+XIiwbw8OeosUxEX4IiJnMYWFtZzWwid +wA8RzpjnNeX3vYhdpeST7U30BeQMmdK9mTBj612GF+ceVusp4NgCZAb1K9G7OdEN +RKCaqJcWopMgxDr/DdyGHz5+eVmbDxdyIWu2ZfIclGfslkRljq1FIXCVOfl0RU8z +pfT0sYi7gwIDAQABo4HOMIHLMD4GCCsGAQUFBwEBBDIwMDAuBggrBgEFBQcwAYYi +aHR0cDovL29jc3AuYXBwbGUuY29tL29jc3AwNC1hc2kwMTAdBgNVHQ4EFgQUgHSc +hCeCa2GfwsYdwxLrqAqxMAIwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBQSdXxH +kv2D474u/Fl/Z0OBNRBF7DAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0lAQH/BAwwCgYI +KwYBBQUHAwMwEwYKKoZIhvdjZAYSAQEB/wQCBQAwDQYJKoZIhvcNAQELBQADggEB +AJIPePTvAOZNA05LxoLuLOk8J7rq9OstKIoMtBV1GaVkkhJifxFljFdekD2fOXM4 +8HYaZHATetjSW1h8i/uy1va/t/6MU2gC0MQViChp70dTtYD4a/tDTQL9lw0t5Gsr +wYPQCnavUie0fQX/cDF9iceLTNFlqgRwnoAl7Uwyq1efcSpXQ7DhPBO3BI579R6d +kGqVAm3w9Fs4FchB9GDesDgfuzjEbl7BBFCluM99++hZySUGd506Nto0ewFsb0XW +cqK9V9YSTZ7E/XLozteHKgCGoKr+zYM/iyxfA6RocSBBUAALQElB4xi6h4JDuXUz +AwdQsUPrn31zw2yN+xkmEccwggS7MIIDo6ADAgECAgECMA0GCSqGSIb3DQEBBQUA +MGIxCzAJBgNVBAYTAlVTMRMwEQYDVQQKEwpBcHBsZSBJbmMuMSYwJAYDVQQLEx1B +cHBsZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEWMBQGA1UEAxMNQXBwbGUgUm9v +dCBDQTAeFw0wNjA0MjUyMTQwMzZaFw0zNTAyMDkyMTQwMzZaMGIxCzAJBgNVBAYT +AlVTMRMwEQYDVQQKEwpBcHBsZSBJbmMuMSYwJAYDVQQLEx1BcHBsZSBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTEWMBQGA1UEAxMNQXBwbGUgUm9vdCBDQTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBAOSRqQkfkdseR1DrBe1eeYQt6zaiV0xV +7IsZid75S2z1B6siMALoGD74UAnTf0GomPnRymacJGsR0KO75Bsqwx+VnnoMpEeL +W9QWNzPLxA9NzhRp0ckZcvVdDtV/X5vyJQO6VY9NXQ3xZDUjFUsVWR2zlPf2nJ7P +ULrBWFBnjwi0IPfLrCwgb3C2PwEwjLdDzw+dPfMrSSgayP7OtbkO2V4c1ss9tTqt +9A8OAJILsSEWLnTVPA3bYharo3GSR1NVwa8vQbP4++NwzeajTEV+H0xrUJZBicR0 +YgsQg0GHM4qBsTBY7FoEMoxos48d3mVz/2deZbxJ2HafMxRloXeUyS0CAwEAAaOC +AXowggF2MA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBQr0GlHlHYJ/vRrjS5ApvdHTX8IXjAfBgNVHSMEGDAWgBQr0GlHlHYJ/vRrjS5A +pvdHTX8IXjCCAREGA1UdIASCAQgwggEEMIIBAAYJKoZIhvdjZAUBMIHyMCoGCCsG +AQUFBwIBFh5odHRwczovL3d3dy5hcHBsZS5jb20vYXBwbGVjYS8wgcMGCCsGAQUF +BwICMIG2GoGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFy +dHkgYXNzdW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3Rh +bmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBw +b2xpY3kgYW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wDQYJ +KoZIhvcNAQEFBQADggEBAFw2mUwteLftjJvc83eb8nbSdzBPwR+Fg4UbmT1HN/Kp +m0COLNSxkBLYvvRzm+7SZA/LeU802KI++Xj/a8gH7H05g4tTINM4xLG/mk8Ka/8r +/FmnBQl8F0BWER5007eLIztHo9VvJOLr0bdw3w9F4SfK8W147ee1Fxeo3H4iNcol +1dkP1mvUoiQjEfehrI9zgWDGG1sJL5Ky+ERI8GA4nhX1PSZnIIozavcNgs/e66Mv ++VNqW2TAYzN39zoHLFbr2g8hDtq6cxlPtdk2f8GHVdmnmbkyQvvY1XGefqFStxu9 +k0IkEirHDx22TZxeY8hLgBdQqorV2uT80AkHN7B1dSExggKlMIICoQIBATCBlDCB +hzE7MDkGA1UEAwwyQXBwbGUgU3lzdGVtIEludGVncmF0aW9uIDIgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkxJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MRMwEQYDVQQKDApBcHBsZSBJbmMuMQswCQYDVQQGEwJVUwIICiNTyZCy +AyIwCwYJYIZIAWUDBAIBoIHkMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJ +KoZIhvcNAQkFMQ8XDTE5MDExNDE3MTEwOFowLwYJKoZIhvcNAQkEMSIEIB/+QqKo +Jyfu4lS7yVn8FHatZiD0ZhGCtjTTiHfxKrGoMHkGCSqGSIb3DQEJDzFsMGowCwYJ +YIZIAWUDBAEqMAsGCWCGSAFlAwQBFjALBglghkgBZQMEAQIwCgYIKoZIhvcNAwcw +DgYIKoZIhvcNAwICAgCAMA0GCCqGSIb3DQMCAgFAMAcGBSsOAwIHMA0GCCqGSIb3 +DQMCAgEoMA0GCSqGSIb3DQEBAQUABIIBAECw0JXXvwnceLt61TkzrBw0GUvl8NEW +jdG8pjNY8eNRCcv1SoQQIoLvvvW9smIoAuRtx2bpOUOjec/o2YfRS5JDk1LiUhW2 +WM1rOYoj0zgHHg/+ONYZ/m39Dvd2alijp5SnrCK9ehnplcSSqEvFs9BJK+tT6kIZ +Ts0IHY3EkGNrWetjVcOUMDYahzkb/NkVglf18vNzjUKV3im7+xrDNgihnYLmQj6w +fjnr0TrNA04Mgb/sBPbPmbZa2amc8WZx45iWT6RUfWK2uZ5WFUstLakSmkW7H4mN +aQ21ygj1RzeB+PE2dT9oFR2vyb45iRiOAS6/sg5mxN+4mD1zOrYppS8= diff --git a/server/download-config.dart b/server/download-config.dart new file mode 100644 index 0000000..d2125fe --- /dev/null +++ b/server/download-config.dart @@ -0,0 +1,15 @@ + +import 'dart:async'; +import 'dart:convert'; +import 'dart:io'; + +Future main(List args) async { + var client = new HttpClient(); + var request = await client.getUrl(Uri.parse("http://suconfig.apple.com/resource/registration/v1/config.plist")); + var response = await request.close(); + var signedXmlBase64 = await utf8.decodeStream(response); + var begin = signedXmlBase64.substring(85); + print(begin); + client.close(); +} +