From d0d00bf62c1e1182696fc1c8ad93b706c506c5db Mon Sep 17 00:00:00 2001 From: Dominik Klein Date: Tue, 6 Jul 2021 17:43:56 +0000 Subject: [PATCH] Fixes #3631, fixes #3645 - Freshdesk import subdomain selection fails. --- .../import_freshdesk_controller.rb | 19 +- lib/user_agent.rb | 9 +- spec/requests/import_freshdesk_spec.rb | 27 ++ ...desk_url_check_check_invalid_subdomain.yml | 57 +++ ...shdesk_url_check_check_valid_subdomain.yml | 68 ++++ ...h_special_configuration_e_g_sso_oauth_.yml | 69 ++++ ..._fields_validation_invalid_credentials.yml | 267 +++++------- ...esk_fields_validation_invalid_hostname.yml | 57 +-- ...k_fields_validation_shows_start_button.yml | 133 ++---- ...sk_fields_validation_valid_credentials.yml | 381 +++++++----------- ...hdesk_fields_validation_valid_hostname.yml | 57 +-- ..._progress_shows_organizations_progress.yml | 78 ++++ .../freshdesk/import_progress_setup.yml | 123 ++---- test/integration/user_agent_test.rb | 2 + 14 files changed, 665 insertions(+), 682 deletions(-) create mode 100644 spec/requests/import_freshdesk_spec.rb create mode 100644 test/data/vcr_cassettes/requests/import_freshdesk/importfreshdesk_post_api_v1_import_freshdesk_url_check_check_invalid_subdomain.yml create mode 100644 test/data/vcr_cassettes/requests/import_freshdesk/importfreshdesk_post_api_v1_import_freshdesk_url_check_check_valid_subdomain.yml create mode 100644 test/data/vcr_cassettes/requests/import_freshdesk/importfreshdesk_post_api_v1_import_freshdesk_url_check_check_valid_subdomain_with_special_configuration_e_g_sso_oauth_.yml create mode 100644 test/data/vcr_cassettes/system/import/freshdesk/import_freshdesk_import_progress_shows_organizations_progress.yml diff --git a/app/controllers/import_freshdesk_controller.rb b/app/controllers/import_freshdesk_controller.rb index 2df6380b9..00dda7178 100644 --- a/app/controllers/import_freshdesk_controller.rb +++ b/app/controllers/import_freshdesk_controller.rb @@ -14,9 +14,12 @@ class ImportFreshdeskController < ApplicationController return end - response = UserAgent.request(params[:url]) + endpoint = "#{params[:url]}/api/v2" + endpoint.gsub!(%r{([^:])//+}, '\\1/') - if !response.success? + response = UserAgent.request("#{endpoint}/contacts") + + if response.header.nil? || !response.header['x-freshdesk-api-version'] render json: { result: 'invalid', message_human: url_check_human_error_message(response.error.to_s), @@ -25,18 +28,6 @@ class ImportFreshdeskController < ApplicationController return end - # Check if maybe a redirect is implemented. - if !response.body.match?(%r{#{params[:url]}}) - render json: { - result: 'invalid', - message_human: 'Hostname not found!', - } - return - end - - endpoint = "#{params[:url]}/api/v2" - endpoint.gsub!(%r{([^:])//+}, '\\1/') - Setting.set('import_freshdesk_endpoint', endpoint) render json: { diff --git a/lib/user_agent.rb b/lib/user_agent.rb index d20483ba9..29a79fafd 100644 --- a/lib/user_agent.rb +++ b/lib/user_agent.rb @@ -453,19 +453,22 @@ returns error: "No such file #{uri}, 404!", success: false, code: response.code, + header: response.each_header.to_h, ) when Net::HTTPClientError return Result.new( error: "Client Error: #{response.inspect}!", success: false, code: response.code, - body: response.body + body: response.body, + header: response.each_header.to_h, ) when Net::HTTPInternalServerError return Result.new( error: "Server Error: #{response.inspect}!", success: false, code: response.code, + header: response.each_header.to_h, ) when Net::HTTPRedirection raise 'Too many redirections for the original URL, halting.' if count <= 0 @@ -483,6 +486,7 @@ returns content_type: response['Content-Type'], success: true, code: response.code, + header: response.each_header.to_h, ) end @@ -546,7 +550,7 @@ returns class Result - attr_reader :error, :body, :data, :code, :content_type + attr_reader :error, :body, :data, :code, :content_type, :header def initialize(options) @success = options[:success] @@ -555,6 +559,7 @@ returns @code = options[:code] @content_type = options[:content_type] @error = options[:error] + @header = options[:header] end def success? diff --git a/spec/requests/import_freshdesk_spec.rb b/spec/requests/import_freshdesk_spec.rb new file mode 100644 index 000000000..f0b996fb0 --- /dev/null +++ b/spec/requests/import_freshdesk_spec.rb @@ -0,0 +1,27 @@ +# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/ + +require 'rails_helper' + +RSpec.describe 'ImportFreshdesk', type: :request, set_up: false, authenticated_as: false, required_envs: %w[IMPORT_FRESHDESK_ENDPOINT_SUBDOMAIN] do + let(:action) { nil } + let(:endpoint) { "/api/v1/import/freshdesk/#{action}" } + + describe 'POST /api/v1/import/freshdesk/url_check', :use_vcr do + let(:action) { 'url_check' } + + it 'check invalid subdomain' do + post endpoint, params: { url: 'https://reallybadexample.freshdesk.com' }, as: :json + expect(json_response['result']).to eq('invalid') + end + + it 'check valid subdomain' do + post endpoint, params: { url: "https://#{ENV['IMPORT_FRESHDESK_ENDPOINT_SUBDOMAIN']}.freshdesk.com" }, as: :json + expect(json_response['result']).to eq('ok') + end + + it 'check valid subdomain with special configuration (e.g. SSO / OAUTH)' do + post endpoint, params: { url: 'https://example.freshdesk.com' }, as: :json + expect(json_response['result']).to eq('ok') + end + end +end diff --git a/test/data/vcr_cassettes/requests/import_freshdesk/importfreshdesk_post_api_v1_import_freshdesk_url_check_check_invalid_subdomain.yml b/test/data/vcr_cassettes/requests/import_freshdesk/importfreshdesk_post_api_v1_import_freshdesk_url_check_check_invalid_subdomain.yml new file mode 100644 index 000000000..0772855f2 --- /dev/null +++ b/test/data/vcr_cassettes/requests/import_freshdesk/importfreshdesk_post_api_v1_import_freshdesk_url_check_check_invalid_subdomain.yml @@ -0,0 +1,57 @@ +--- +http_interactions: +- request: + method: get + uri: https://reallybadexample.freshdesk.com/api/v2/contacts + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Zammad User Agent + Host: + - reallybadexample.freshdesk.com + response: + status: + code: 404 + message: Not Found + headers: + Date: + - Fri, 02 Jul 2021 13:50:52 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 404 Not Found + X-Request-Id: + - a2b52e91-304f-45d0-9a9f-c561bd4ab7b6 + X-Rack-Cache: + - miss + Cache-Control: + - no-cache + X-Xss-Protection: + - 1; mode=block + X-Ua-Compatible: + - IE=Edge,chrome=1 + X-Content-Type-Options: + - nosniff + X-Fw-Ratelimiting-Managed: + - 'false' + X-Envoy-Upstream-Service-Time: + - '34' + X-Trace-Id: + - 00-b5935665b002c157f9507abedbfddb3c-484e6fec463479ed-00 + Server: + - fwe + body: + encoding: ASCII-8BIT + string: " " + recorded_at: Fri, 02 Jul 2021 13:50:52 GMT +recorded_with: VCR 6.0.0 diff --git a/test/data/vcr_cassettes/requests/import_freshdesk/importfreshdesk_post_api_v1_import_freshdesk_url_check_check_valid_subdomain.yml b/test/data/vcr_cassettes/requests/import_freshdesk/importfreshdesk_post_api_v1_import_freshdesk_url_check_check_valid_subdomain.yml new file mode 100644 index 000000000..0afff0fad --- /dev/null +++ b/test/data/vcr_cassettes/requests/import_freshdesk/importfreshdesk_post_api_v1_import_freshdesk_url_check_check_valid_subdomain.yml @@ -0,0 +1,68 @@ +--- +http_interactions: +- request: + method: get + uri: https://.freshdesk.com/api/v2/contacts + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Zammad User Agent + Host: + - ".freshdesk.com" + response: + status: + code: 401 + message: Unauthorized + headers: + Date: + - Fri, 02 Jul 2021 13:50:52 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 401 Unauthorized + X-Request-Id: + - adecf6f7-532b-4a6b-b28f-22c2dbb72818 + X-Freshdesk-Api-Version: + - latest=v2; requested=v2 + X-Rack-Cache: + - miss + Cache-Control: + - no-cache + X-Xss-Protection: + - 1; mode=block + X-Ua-Compatible: + - IE=Edge,chrome=1 + X-Content-Type-Options: + - nosniff + Set-Cookie: + - _x_w=5_2; path=/; HttpOnly; secure + X-Fw-Ratelimiting-Managed: + - 'true' + X-Ratelimit-Total: + - '40' + X-Ratelimit-Remaining: + - '39' + X-Ratelimit-Used-Currentrequest: + - '1' + X-Envoy-Upstream-Service-Time: + - '35' + X-Trace-Id: + - 00-2737df9995dcf3e1e34c1ee5b8a525f7-44657fcc6d9a6433-00 + Server: + - fwe + body: + encoding: UTF-8 + string: '{"code":"invalid_credentials","message":"You have to be logged in to + perform this action."}' + recorded_at: Fri, 02 Jul 2021 13:50:52 GMT +recorded_with: VCR 6.0.0 diff --git a/test/data/vcr_cassettes/requests/import_freshdesk/importfreshdesk_post_api_v1_import_freshdesk_url_check_check_valid_subdomain_with_special_configuration_e_g_sso_oauth_.yml b/test/data/vcr_cassettes/requests/import_freshdesk/importfreshdesk_post_api_v1_import_freshdesk_url_check_check_valid_subdomain_with_special_configuration_e_g_sso_oauth_.yml new file mode 100644 index 000000000..ae8ce1e40 --- /dev/null +++ b/test/data/vcr_cassettes/requests/import_freshdesk/importfreshdesk_post_api_v1_import_freshdesk_url_check_check_valid_subdomain_with_special_configuration_e_g_sso_oauth_.yml @@ -0,0 +1,69 @@ +--- +http_interactions: +- request: + method: get + uri: https://example.freshdesk.com/api/v2/contacts + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Zammad User Agent + Host: + - example.freshdesk.com + response: + status: + code: 401 + message: Unauthorized + headers: + Date: + - Fri, 02 Jul 2021 13:50:52 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 401 Unauthorized + X-Ratelimit-Remaining: + - '4998' + X-Ratelimit-Total: + - '5000' + X-Request-Id: + - f252fac3-343c-4f56-9306-56012f116d74 + X-Freshdesk-Api-Version: + - latest=v2; requested=v2 + X-Rack-Cache: + - miss + Cache-Control: + - no-cache + X-Xss-Protection: + - 1; mode=block + X-Ratelimit-Used-Currentrequest: + - '1' + X-Ua-Compatible: + - IE=Edge,chrome=1 + X-Content-Type-Options: + - nosniff + Set-Cookie: + - _x_m=x_a; path=/; HttpOnly; secure + - _x_w=39_1; path=/; HttpOnly; secure + X-Fw-Ratelimiting-Managed: + - 'false' + X-Envoy-Upstream-Service-Time: + - '58' + X-Trace-Id: + - 00-f37a5fc3bc948c193eb81c7049f6fd66-135d0d9947976cfe-00 + Server: + - fwe + body: + encoding: UTF-8 + string: '{"code":"invalid_credentials","message":"You have to be logged in to + perform this action."}' + recorded_at: Fri, 02 Jul 2021 13:50:52 GMT +recorded_with: VCR 6.0.0 diff --git a/test/data/vcr_cassettes/system/import/freshdesk/import_freshdesk_fields_validation_invalid_credentials.yml b/test/data/vcr_cassettes/system/import/freshdesk/import_freshdesk_fields_validation_invalid_credentials.yml index 1d2bf3930..8887010cb 100644 --- a/test/data/vcr_cassettes/system/import/freshdesk/import_freshdesk_fields_validation_invalid_credentials.yml +++ b/test/data/vcr_cassettes/system/import/freshdesk/import_freshdesk_fields_validation_invalid_credentials.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: get - uri: https://.freshdesk.com/ + uri: https://.freshdesk.com/api/v2/contacts body: encoding: US-ASCII string: '' @@ -15,153 +15,13 @@ http_interactions: - Zammad User Agent Host: - ".freshdesk.com" - response: - status: - code: 302 - message: Found - headers: - Date: - - Wed, 30 Jun 2021 09:10:28 GMT - Content-Type: - - text/html; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 302 Found - X-Rack-Cache: - - miss - Cache-Control: - - no-cache, no-store, max-age=0, must-revalidate - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - Pragma: - - no-cache - X-Xss-Protection: - - 1; mode=block - X-Request-Id: - - e12059ca-fc2a-405f-88ea-d5dbda1e3976 - Location: - - https://.freshdesk.com/support/home - X-Ua-Compatible: - - IE=Edge,chrome=1 - X-Frame-Options: - - SAMEORIGIN - X-Content-Type-Options: - - nosniff - Expires: - - Fri, 01 Jan 1990 00:00:00 GMT - Set-Cookie: - - _x_w=5_2; path=/; HttpOnly; secure - X-Envoy-Upstream-Service-Time: - - '30' - X-Trace-Id: - - 00-5f80c95431c562da826fd06cb5345dfc-852bfb6647c314a4-00 - Server: - - fwe - body: - encoding: UTF-8 - string: You are being redirected. - recorded_at: Wed, 30 Jun 2021 09:10:28 GMT -- request: - method: get - uri: https://.freshdesk.com/support/home - body: - encoding: US-ASCII - string: '' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - User-Agent: - - Zammad User Agent - Host: - - ".freshdesk.com" - response: - status: - code: 200 - message: OK - headers: - Date: - - Wed, 30 Jun 2021 09:10:28 GMT - Content-Type: - - text/html; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 200 OK - Cache-Control: - - max-age=0, private, must-revalidate - X-Ratelimit-Limit: - - '300' - X-Ratelimit-Reset: - - '300621091128' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - X-Ratelimit-Remaining: - - '199' - - '299' - X-Xss-Protection: - - 1; mode=block - X-Request-Id: - - 2599f8ae-ed3d-4c9e-8704-ab846c6f11f5 - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - W/"634d4f1b6de28ba7fc5e4535e774d734" - X-Content-Type-Options: - - nosniff - X-Rack-Cache: - - miss - Set-Cookie: - - _x_w=5_2; path=/; HttpOnly; secure - X-Fw-Ratelimiting-Managed: - - 'true' - X-Ratelimit-Total: - - '200' - X-Ratelimit-Used-Currentrequest: - - '1' - X-Envoy-Upstream-Service-Time: - - '47' - X-Trace-Id: - - 00-770b1c2579679aa0eac134a8cf869e91-0fc7e85fa5d13f6f-00 - Server: - - fwe - body: - encoding: ASCII-8BIT - string: !binary |- - PCFET0NUWVBFIGh0bWw+CgogICAgICAgIDwhLS1baWYgbHQgSUUgN10+PGh0bWwgY2xhc3M9Im5vLWpzIGllNiIgbGFuZz0iZW4iIGRpcj0ibHRyIiBkYXRhLWRhdGUtZm9ybWF0PSJub25fdXMiPjwhW2VuZGlmXS0tPgogICAgICAgIDwhLS1baWYgSUUgN10+PGh0bWwgY2xhc3M9Im5vLWpzIGllNyIgbGFuZz0iZW4iIGRpcj0ibHRyIiBkYXRhLWRhdGUtZm9ybWF0PSJub25fdXMiPjwhW2VuZGlmXS0tPgogICAgICAgIDwhLS1baWYgSUUgOF0+PGh0bWwgY2xhc3M9Im5vLWpzIGllOCIgbGFuZz0iZW4iIGRpcj0ibHRyIiBkYXRhLWRhdGUtZm9ybWF0PSJub25fdXMiPjwhW2VuZGlmXS0tPgogICAgICAgIDwhLS1baWYgSUUgOV0+PGh0bWwgY2xhc3M9Im5vLWpzIGllOSIgbGFuZz0iZW4iIGRpcj0ibHRyIiBkYXRhLWRhdGUtZm9ybWF0PSJub25fdXMiPjwhW2VuZGlmXS0tPgogICAgICAgIDwhLS1baWYgSUUgMTBdPjxodG1sIGNsYXNzPSJuby1qcyBpZTEwIiBsYW5nPSJlbiIgZGlyPSJsdHIiIGRhdGEtZGF0ZS1mb3JtYXQ9Im5vbl91cyI+PCFbZW5kaWZdLS0+CiAgICAgICAgPCEtLVtpZiAoZ3QgSUUgMTApfCEoSUUpXT48IS0tPjxodG1sIGNsYXNzPSJuby1qcyAiIGxhbmc9ImVuIiBkaXI9Imx0ciIgZGF0YS1kYXRlLWZvcm1hdD0ibm9uX3VzIj48IS0tPCFbZW5kaWZdLS0+Cgk8aGVhZD4KCQkKCQk8IS0tIFRpdGxlIGZvciB0aGUgcGFnZSAtLT4KPHRpdGxlPiBTdXBwb3J0IDogWmFtbWFkIEdtYkggPC90aXRsZT4KCjwhLS0gTWV0YSBpbmZvcm1hdGlvbiAtLT4KCiAgICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgogICAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UsY2hyb21lPTEiIC8+CiAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSAiIiAvPgogICAgICA8bWV0YSBuYW1lPSJhdXRob3IiIGNvbnRlbnQ9ICIiIC8+CiAgICAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IlN1cHBvcnQiIC8+ICA8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwczovLzxJTVBPUlRfRlJFU0hERVNLX0VORFBPSU5UX1NVQkRPTUFJTj4uZnJlc2hkZXNrLmNvbS9zdXBwb3J0L3NvbHV0aW9ucyIgLz4gIDxtZXRhIHByb3BlcnR5PSJvZzppbWFnZSIgY29udGVudD0iL2Fzc2V0cy9taXNjL2xvZ28ucG5nPzcwMjAxNyIgLz4gIDxtZXRhIHByb3BlcnR5PSJvZzpzaXRlX25hbWUiIGNvbnRlbnQ9IlphbW1hZCBHbWJIIiAvPiAgPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9ImFydGljbGUiIC8+ICA8bWV0YSBuYW1lPSJ0d2l0dGVyOnRpdGxlIiBjb250ZW50PSJTdXBwb3J0IiAvPiAgPG1ldGEgbmFtZT0idHdpdHRlcjp1cmwiIGNvbnRlbnQ9Imh0dHBzOi8vPElNUE9SVF9GUkVTSERFU0tfRU5EUE9JTlRfU1VCRE9NQUlOPi5mcmVzaGRlc2suY29tL3N1cHBvcnQvc29sdXRpb25zIiAvPiAgPG1ldGEgbmFtZT0idHdpdHRlcjppbWFnZSIgY29udGVudD0iL2Fzc2V0cy9taXNjL2xvZ28ucG5nPzcwMjAxNyIgLz4gIDxtZXRhIG5hbWU9InR3aXR0ZXI6Y2FyZCIgY29udGVudD0ic3VtbWFyeSIgLz4gIDxsaW5rIHJlbD0iY2Fub25pY2FsIiBocmVmPSJodHRwczovLzxJTVBPUlRfRlJFU0hERVNLX0VORFBPSU5UX1NVQkRPTUFJTj4uZnJlc2hkZXNrLmNvbS9zdXBwb3J0L3NvbHV0aW9ucyIgLz4gCgo8IS0tIFJlc3BvbnNpdmUgc2V0dGluZyAtLT4KPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBocmVmPSIvYXNzZXRzL3RvdWNoL3RvdWNoLWljb24taXBob25lLnBuZyIgLz4KICAgICAgICA8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSI3Mng3MiIgaHJlZj0iL2Fzc2V0cy90b3VjaC90b3VjaC1pY29uLWlwYWQucG5nIiAvPgogICAgICAgIDxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgc2l6ZXM9IjExNHgxMTQiIGhyZWY9Ii9hc3NldHMvdG91Y2gvdG91Y2gtaWNvbi1pcGhvbmUtcmV0aW5hLnBuZyIgLz4KICAgICAgICA8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSIxNDR4MTQ0IiBocmVmPSIvYXNzZXRzL3RvdWNoL3RvdWNoLWljb24taXBhZC1yZXRpbmEucG5nIiAvPgogICAgICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIHVzZXItc2NhbGFibGU9bm8sIGluaXRpYWwtc2NhbGU9MS4wIiAvPiAKCQkKCQk8IS0tIEFkZGluZyBtZXRhIHRhZyBmb3IgQ1NSRiB0b2tlbiAtLT4KCQk8bWV0YSBjb250ZW50PSJhdXRoZW50aWNpdHlfdG9rZW4iIG5hbWU9ImNzcmYtcGFyYW0iIC8+CjxtZXRhIGNvbnRlbnQ9InZzdUNNUHRabCtQL2pFaGJodGJJcVZXT2dROGJuU0RSV2pkYWgyRXNkSUU9IiBuYW1lPSJjc3JmLXRva2VuIiAvPgoJCTwhLS0gRW5kIG1ldGEgdGFnIGZvciBDU1JGIHRva2VuIC0tPgoJCQoJCTwhLS0gRmF2IGljb24gZm9yIHBvcnRhbCAtLT4KCQk8bGluayByZWw9J3Nob3J0Y3V0IGljb24nIGhyZWY9Jy9hc3NldHMvbWlzYy9mYXZpY29uLmljbz83MDIwMTcnIC8+CgoJCTwhLS0gQmFzZSBzdHlsZXNoZWV0IC0tPgogCgkJPGxpbmsgaHJlZj0iaHR0cHM6Ly9ldWMtYXNzZXRzNS5mcmVzaGRlc2suY29tL2Fzc2V0cy9jZG4vcG9ydGFsX3ByaW50LWEzODlmMWVmM2U4NzI2MWU3MjY0ZTNlNzA0MTZkNzA0LmNzcyIgbWVkaWE9InByaW50IiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiAvPgoJICAJCTxsaW5rIGhyZWY9Imh0dHBzOi8vZXVjLWFzc2V0czIuZnJlc2hkZXNrLmNvbS9hc3NldHMvY2RuL2ZhbGNvbl9wb3J0YWxfdXRpbHMtMTE2MzYyOTQ2OTRkMGVmMjI4N2YwYTAxNzA4NTJjNDYuY3NzIiBtZWRpYT0ic2NyZWVuIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiAvPgkKCgkJCgkJPCEtLSBUaGVtZSBzdHlsZXNoZWV0IC0tPgoKCQk8bGluayBocmVmPSIvc3VwcG9ydC90aGVtZS5jc3M/dj0yJmFtcDtkPTE2MjA2MzIzMjQiIG1lZGlhPSJzY3JlZW4iIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgoKCQk8IS0tIEdvb2dsZSBmb250IHVybCBpZiBwcmVzZW50IC0tPgoJCTxsaW5rIGhyZWY9J2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Tb3VyY2UrU2FucytQcm86cmVndWxhcixpdGFsaWMsNjAwLDcwMCw3MDBpdGFsaWN8UG9wcGluczpyZWd1bGFyLDYwMCw3MDAnIHJlbD0nc3R5bGVzaGVldCcgdHlwZT0ndGV4dC9jc3MnPgoKCQk8IS0tIEluY2x1ZGluZyBkZWZhdWx0IHBvcnRhbCBiYXNlZCBzY3JpcHQgZnJhbWV3b3JrIGF0IHRoZSB0b3AgLS0+CgkJCTxzY3JpcHQgc3JjPSJodHRwczovL2V1Yy1hc3NldHMxMC5mcmVzaGRlc2suY29tL2Fzc2V0cy9jZG4vcG9ydGFsX2hlYWQtOTBhM2EzYjUxYzBjZDdhMDlmNzlkYzU3MWE4NmQxYTcuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CgkJPCEtLSBJbmNsdWRpbmcgc3ludGV4aGlnaGxpZ2h0ZXIgZm9yIHBvcnRhbCAtLT4KCQk8c2NyaXB0IHNyYz0iaHR0cHM6Ly9ldWMtYXNzZXRzNi5mcmVzaGRlc2suY29tL2Fzc2V0cy9jZG4vcHJpc20tODBlNGQ5NWFhY2JjOWExMzM0ZDA2ZjIyYTIyNGU4YjEuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CgoJCQoKCQk8IS0tIEFjY2VzcyBwb3J0YWwgc2V0dGluZ3MgaW5mb3JtYXRpb24gdmlhIGphdmFzY3JpcHQgLS0+CgkJIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4gICAgIHZhciBwb3J0YWwgPSB7Imxhbmd1YWdlIjoiZW4iLCJuYW1lIjoiWmFtbWFkIEdtYkgiLCJjb250YWN0X2luZm8iOiIiLCJjdXJyZW50X3BhZ2VfbmFtZSI6InBvcnRhbF9ob21lIiwiY3VycmVudF90YWIiOiJob21lIiwidmF1bHRfc2VydmljZSI6eyJ1cmwiOiJodHRwczovL3ZhdWx0LXNlcnZpY2UtZXUuZnJlc2h3b3Jrcy5jb20vZGF0YSIsIm1heF90cnkiOjIsInByb2R1Y3RfbmFtZSI6ImZkIn0sImN1cnJlbnRfYWNjb3VudF9pZCI6MTg5MDU2MCwicHJlZmVyZW5jZXMiOnsiYmdfY29sb3IiOiIjZjNmNWY3IiwiaGVhZGVyX2NvbG9yIjoiI2ZmZmZmZiIsImhlbHBfY2VudGVyX2NvbG9yIjoiI2YzZjVmNyIsImZvb3Rlcl9jb2xvciI6IiMxODMyNDciLCJ0YWJfY29sb3IiOiIjZmZmZmZmIiwidGFiX2hvdmVyX2NvbG9yIjoiIzAyYjg3NSIsImJ0bl9iYWNrZ3JvdW5kIjoiI2YzZjVmNyIsImJ0bl9wcmltYXJ5X2JhY2tncm91bmQiOiIjMDJiODc1IiwiYmFzZUZvbnQiOiJTb3VyY2UgU2FucyBQcm8iLCJ0ZXh0Q29sb3IiOiIjMTgzMjQ3IiwiaGVhZGluZ3NGb250IjoiUG9wcGlucyIsImhlYWRpbmdzQ29sb3IiOiIjMTgzMjQ3IiwibGlua0NvbG9yIjoiIzE4MzI0NyIsImxpbmtDb2xvckhvdmVyIjoiIzI3NTNkNyIsImlucHV0Rm9jdXNSaW5nQ29sb3IiOiIjMDJCODc1Iiwibm9uUmVzcG9uc2l2ZSI6ZmFsc2UsInBlcnNvbmFsaXplZF9hcnRpY2xlcyI6dHJ1ZX0sImltYWdlX3BsYWNlaG9sZGVycyI6eyJzcGFjZXIiOiJodHRwczovL2V1Yy1hc3NldHMxMC5mcmVzaGRlc2suY29tL2Fzc2V0cy9taXNjL3NwYWNlci5naWYiLCJwcm9maWxlX3RodW1iIjoiaHR0cHM6Ly9ldWMtYXNzZXRzMy5mcmVzaGRlc2suY29tL2Fzc2V0cy9taXNjL3Byb2ZpbGVfYmxhbmtfdGh1bWItZTFhMzQwMzNiMzA3M2NiODBmNWJlY2MwYjY0NGJmY2EuanBnIiwicHJvZmlsZV9tZWRpdW0iOiJodHRwczovL2V1Yy1hc3NldHM0LmZyZXNoZGVzay5jb20vYXNzZXRzL21pc2MvcHJvZmlsZV9ibGFua19tZWRpdW0tNGFlMjI4MGE0NjBlYWUzYzg3MGFjYjdhNzU0NWI3ZTUuanBnIn0sImZhbGNvbl9wb3J0YWxfdGhlbWUiOnRydWV9OyAgICAgdmFyIGF0dGFjaG1lbnRfc2l6ZSA9IDIwOyAgPC9zY3JpcHQ+IAoKCgkJCgk8L2hlYWQ+Cgk8Ym9keT4KICAgICAgICAgICAgCQoJCQoJCQoJCQoJPGhlYWRlciBjbGFzcz0iYmFubmVyIj4KCQk8ZGl2IGNsYXNzPSJiYW5uZXItd3JhcHBlciBwYWdlIj4KCQkJPGRpdiBjbGFzcz0iYmFubmVyLXRpdGxlIj4KCQkJCTxhIGhyZWY9Ii9zdXBwb3J0L2hvbWUiY2xhc3M9J3BvcnRhbC1sb2dvJz48c3BhbiBjbGFzcz0icG9ydGFsLWltZyI+PGk+PC9pPgogICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPScvYXNzZXRzL21pc2MvbG9nby5wbmcnIGFsdD0iTG9nbyIKICAgICAgICAgICAgICAgICAgICAgICAgb25lcnJvcj0iZGVmYXVsdF9pbWFnZV9lcnJvcih0aGlzKSIgZGF0YS10eXBlPSJsb2dvIiAvPgogICAgICAgICAgICAgICAgIDwvc3Bhbj48L2E+CgkJCQk8aDEgY2xhc3M9ImVsbGlwc2lzIGhlYWRpbmciPlphbW1hZCBHbWJIPC9oMT4KCQkJPC9kaXY+CgkJCTxuYXYgY2xhc3M9ImJhbm5lci1uYXYiPgoJCQkJIDxkaXYgY2xhc3M9IndlbGNvbWUiPldlbGNvbWUgPGI+PC9iPiA8L2Rpdj4gIDxiPjxhIGhyZWY9Ii9zdXBwb3J0L2xvZ2luIj48Yj5Mb2dpbjwvYj48L2E+PC9iPiAmbmJzcDs8Yj48YSBocmVmPSIvc3VwcG9ydC9zaWdudXAiPjxiPlNpZ24gdXA8L2I+PC9hPjwvYj4KCQkJPC9uYXY+CgkJPC9kaXY+Cgk8L2hlYWRlcj4KCTxuYXYgY2xhc3M9InBhZ2UtdGFicyI+CgkJPGRpdiBjbGFzcz0icGFnZSBuby1wYWRkaW5nIG5vLWhlYWRlci10YWJzIj4KCQkJCgkJCQk8YSBkYXRhLXRvZ2dsZS1kb209IiNoZWFkZXItdGFicyIgaHJlZj0iIyIgZGF0YS1hbmltYXRlZD0idHJ1ZSIgY2xhc3M9Im1vYmlsZS1pY29uLW5hdi1tZW51IHNob3ctaW4tbW9iaWxlIj48L2E+CgkJCQk8ZGl2IGNsYXNzPSJuYXYtbGluayIgaWQ9ImhlYWRlci10YWJzIj4KCQkJCQkKCQkJCQkJCgkJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9ob21lIiBjbGFzcz0iYWN0aXZlIj5Ib21lPC9hPgoJCQkJCQkKCQkJCQkKCQkJCQkJCgkJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9zb2x1dGlvbnMiIGNsYXNzPSIiPlNvbHV0aW9uczwvYT4KCQkJCQkJCgkJCQkJCgkJCQk8L2Rpdj4KCQkJCgkJPC9kaXY+Cgk8L25hdj4KCjwhLS0gU2VhcmNoIGFuZCBwYWdlIGxpbmtzIGZvciB0aGUgcGFnZSAtLT4KCgoKPGRpdiBjbGFzcz0icGFnZSI+CgkKCQoJPCEtLSBTZWFyY2ggYW5kIHBhZ2UgbGlua3MgZm9yIHRoZSBwYWdlIC0tPgoJCgkJPHNlY3Rpb24gY2xhc3M9ImhlbHAtY2VudGVyIHJvdW5kZWQtNiI+CQoJCQk8ZGl2IGNsYXNzPSJoYy1zZWFyY2giPgoJCQkJPGRpdiBjbGFzcz0iaGMtc2VhcmNoLWMiPgoJCQkJCTxoMiBjbGFzcz0iaGVhZGluZyBoaWRlLWluLW1vYmlsZSI+SG93IGNhbiB3ZSBoZWxwIHlvdSB0b2RheT88L2gyPgoJCQkJCTxmb3JtIGNsYXNzPSJoYy1zZWFyY2gtZm9ybSBwcmludC0tcmVtb3ZlIiBhdXRvY29tcGxldGU9Im9mZiIgYWN0aW9uPSIvc3VwcG9ydC9zZWFyY2giIGlkPSJoYy1zZWFyY2gtZm9ybSIgZGF0YS1jc3JmLWlnbm9yZT0idHJ1ZSI+Cgk8ZGl2IGNsYXNzPSJoYy1zZWFyY2gtaW5wdXQiPgoJPGxhYmVsIGZvcj0ic3VwcG9ydC1zZWFyY2gtaW5wdXQiIGNsYXNzPSJoaWRlIj5FbnRlciB5b3VyIHNlYXJjaCB0ZXJtIGhlcmUuLi48L2xhYmVsPgoJCTxpbnB1dCBwbGFjZWhvbGRlcj0iRW50ZXIgeW91ciBzZWFyY2ggdGVybSBoZXJlLi4uIiB0eXBlPSJ0ZXh0IiAKCQkJbmFtZT0idGVybSIgY2xhc3M9InNwZWNpYWwiIHZhbHVlPSIiIAogICAgICAgICAgICByZWw9InBhZ2Utc2VhcmNoIiBkYXRhLW1heC1tYXRjaGVzPSIxMCIgaWQ9InN1cHBvcnQtc2VhcmNoLWlucHV0Ij4KCTwvZGl2PgoJPGRpdiBjbGFzcz0iaGMtc2VhcmNoLWJ1dHRvbiI+CgkJPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiB0eXBlPSJzdWJtaXQiIGF1dG9jb21wbGV0ZT0ib2ZmIj4KCQkJPGkgY2xhc3M9Im1vYmlsZS1pY29uLXNlYXJjaCBoaWRlLXRhYmxldCI+PC9pPgoJCQk8c3BhbiBjbGFzcz0iaGlkZS1pbi1tb2JpbGUiPgoJCQkJU2VhcmNoCgkJCTwvc3Bhbj4KCQk8L2J1dHRvbj4JCgk8L2Rpdj4KPC9mb3JtPgoJCQkJPC9kaXY+CgkJCTwvZGl2PgoJCQk8ZGl2IGNsYXNzPSJoYy1uYXYgIj4JCQkJCgkJCQkgPG5hdj4gICA8ZGl2PgogICAgICAgICAgICAgIDxhIGhyZWY9Ii9zdXBwb3J0L3RpY2tldHMvbmV3IiBjbGFzcz0ibW9iaWxlLWljb24tbmF2LW5ld3RpY2tldCBuZXctdGlja2V0IGVsbGlwc2lzIiB0aXRsZT0iTmV3IHN1cHBvcnQgdGlja2V0Ij4KICAgICAgICAgICAgICAgIDxzcGFuPiBOZXcgc3VwcG9ydCB0aWNrZXQgPC9zcGFuPgogICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC9kaXY+ICAgPGRpdj4KICAgICAgICAgICAgICA8YSBocmVmPSIvc3VwcG9ydC90aWNrZXRzIiBjbGFzcz0ibW9iaWxlLWljb24tbmF2LXN0YXR1cyBjaGVjay1zdGF0dXMgZWxsaXBzaXMiIHRpdGxlPSJDaGVjayB0aWNrZXQgc3RhdHVzIj4KICAgICAgICAgICAgICAgIDxzcGFuPkNoZWNrIHRpY2tldCBzdGF0dXM8L3NwYW4+CiAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L2Rpdj4gIDwvbmF2PgoJCQk8L2Rpdj4KCQk8L3NlY3Rpb24+CgkKCgk8IS0tIE5vdGlmaWNhdGlvbiBNZXNzYWdlcyAtLT4KCSA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC13aXRoLWNsb3NlIG5vdGljZSIgaWQ9Im5vdGljZWFqYXgiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij48L2Rpdj4gCgoJCgk8ZGl2IGNsYXNzPSJjLXdyYXBwZXIiPgkJCgkJCjxzZWN0aW9uIGNsYXNzPSJtYWluIGNvbnRlbnQgcm91bmRlZC02IG1pbi1oZWlnaHQtb24tZGVza3RvcCBmYy1wb3J0YWwtc29sdXRpb24taG9tZSIgaWQ9InNvbHV0aW9ucy1pbmRleC1ob21lIj4KCTxoMiBjbGFzcz0iaGVhZGluZyI+S25vd2xlZGdlIGJhc2U8L2gyPgoJCgkJCgkJPGRpdiBjbGFzcz0iY3MtcyI+CgkJCTxoMyBjbGFzcz0iaGVhZGluZyI+PGEgaHJlZj0iL3N1cHBvcnQvc29sdXRpb25zLzgwMDAwMjgyNjY0Ij5HZW5lcmFsPC9hPjwvaDM+CgkJCTxkaXYgY2xhc3M9ImNzLWctYyI+CgkJCQkKCQkJCQk8c2VjdGlvbiBjbGFzcz0iY3MtZyBhcnRpY2xlLWxpc3QiPgoJCQkJCQk8ZGl2IGNsYXNzPSJsaXN0LWxlYWQiPgoJCQkJCQkJPGEgaHJlZj0iL3N1cHBvcnQvc29sdXRpb25zL2ZvbGRlcnMvODAwMDA0MTc1OTAiIHRpdGxlPSJGQVEiPiBGQVEgPHNwYW4gY2xhc3M9J2l0ZW0tY291bnQnPjA8L3NwYW4+PC9hPgoJCQkJCQk8L2Rpdj4KCQkJCQkJCgkJCQkJPC9zZWN0aW9uPgoJCQkJCgkJCQkJPHNlY3Rpb24gY2xhc3M9ImNzLWcgYXJ0aWNsZS1saXN0Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGlzdC1sZWFkIj4KCQkJCQkJCTxhIGhyZWY9Ii9zdXBwb3J0L3NvbHV0aW9ucy9mb2xkZXJzLzgwMDAwNDE3NTkxIiB0aXRsZT0iR2V0dGluZyBTdGFydGVkIj4gR2V0dGluZyBTdGFydGVkIDxzcGFuIGNsYXNzPSdpdGVtLWNvdW50Jz4wPC9zcGFuPjwvYT4KCQkJCQkJPC9kaXY+CgkJCQkJCQoJCQkJCTwvc2VjdGlvbj4KCQkJCQoJCQk8L2Rpdj4KCQk8L2Rpdj4JCgkJCgkKCQkKCQk8ZGl2IGNsYXNzPSJjcy1zIj4KCQkJPGgzIGNsYXNzPSJoZWFkaW5nIj48YSBocmVmPSIvc3VwcG9ydC9zb2x1dGlvbnMvODAwMDAyODI2OTMiPkdldHRpbmcgc3RhcnRlZCB3aXRoIHVzPC9hPjwvaDM+CgkJCTxkaXYgY2xhc3M9ImNzLWctYyI+CgkJCQkKCQkJCQk8c2VjdGlvbiBjbGFzcz0iY3MtZyBhcnRpY2xlLWxpc3QiPgoJCQkJCQk8ZGl2IGNsYXNzPSJsaXN0LWxlYWQiPgoJCQkJCQkJPGEgaHJlZj0iL3N1cHBvcnQvc29sdXRpb25zL2ZvbGRlcnMvODAwMDA0MTc2MzQiIHRpdGxlPSJZb3VyIGFjY291bnQiPiBZb3VyIGFjY291bnQgPHNwYW4gY2xhc3M9J2l0ZW0tY291bnQnPjA8L3NwYW4+PC9hPgoJCQkJCQk8L2Rpdj4KCQkJCQkJCgkJCQkJPC9zZWN0aW9uPgoJCQkJCgkJCQkJPHNlY3Rpb24gY2xhc3M9ImNzLWcgYXJ0aWNsZS1saXN0Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGlzdC1sZWFkIj4KCQkJCQkJCTxhIGhyZWY9Ii9zdXBwb3J0L3NvbHV0aW9ucy9mb2xkZXJzLzgwMDAwNDE3NjM1IiB0aXRsZT0iWW91ciBkb2N1bWVudHMiPiBZb3VyIGRvY3VtZW50cyA8c3BhbiBjbGFzcz0naXRlbS1jb3VudCc+MDwvc3Bhbj48L2E+CgkJCQkJCTwvZGl2PgoJCQkJCQkKCQkJCQk8L3NlY3Rpb24+CgkJCQkKCQkJPC9kaXY+CgkJPC9kaXY+CQoJCQoJCgkJCgkJPGRpdiBjbGFzcz0iY3MtcyI+CgkJCTxoMyBjbGFzcz0iaGVhZGluZyI+PGEgaHJlZj0iL3N1cHBvcnQvc29sdXRpb25zLzgwMDAwMjgyNjk0Ij5GQVFzOjwvYT48L2gzPgoJCQk8ZGl2IGNsYXNzPSJjcy1nLWMiPgoJCQkJCgkJCQkJPHNlY3Rpb24gY2xhc3M9ImNzLWcgYXJ0aWNsZS1saXN0Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGlzdC1sZWFkIj4KCQkJCQkJCTxhIGhyZWY9Ii9zdXBwb3J0L3NvbHV0aW9ucy9mb2xkZXJzLzgwMDAwNDE3NjM2IiB0aXRsZT0iVHJpYWwgRkFRcyI+IFRyaWFsIEZBUXMgPHNwYW4gY2xhc3M9J2l0ZW0tY291bnQnPjA8L3NwYW4+PC9hPgoJCQkJCQk8L2Rpdj4KCQkJCQkJCgkJCQkJPC9zZWN0aW9uPgoJCQkJCgkJCTwvZGl2PgoJCTwvZGl2PgkKCQkKCQoJCQoJCTxkaXYgY2xhc3M9ImNzLXMiPgoJCQk8aDMgY2xhc3M9ImhlYWRpbmciPjxhIGhyZWY9Ii9zdXBwb3J0L3NvbHV0aW9ucy84MDAwMDI4MjY5NSI+RmlsZXMgYW5kIGZvbGRlcnM8L2E+PC9oMz4KCQkJPGRpdiBjbGFzcz0iY3MtZy1jIj4KCQkJCQoJCQkJCTxzZWN0aW9uIGNsYXNzPSJjcy1nIGFydGljbGUtbGlzdCI+CgkJCQkJCTxkaXYgY2xhc3M9Imxpc3QtbGVhZCI+CgkJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9zb2x1dGlvbnMvZm9sZGVycy84MDAwMDQxNzYzNyIgdGl0bGU9IlNoYXJlZCBmaWxlcyI+IFNoYXJlZCBmaWxlcyA8c3BhbiBjbGFzcz0naXRlbS1jb3VudCc+MDwvc3Bhbj48L2E+CgkJCQkJCTwvZGl2PgoJCQkJCQkKCQkJCQk8L3NlY3Rpb24+CgkJCQkKCQkJCQk8c2VjdGlvbiBjbGFzcz0iY3MtZyBhcnRpY2xlLWxpc3QiPgoJCQkJCQk8ZGl2IGNsYXNzPSJsaXN0LWxlYWQiPgoJCQkJCQkJPGEgaHJlZj0iL3N1cHBvcnQvc29sdXRpb25zL2ZvbGRlcnMvODAwMDA0MTc2MzgiIHRpdGxlPSJEZWxldGVkIGZpbGVzIj4gRGVsZXRlZCBmaWxlcyA8c3BhbiBjbGFzcz0naXRlbS1jb3VudCc+MDwvc3Bhbj48L2E+CgkJCQkJCTwvZGl2PgoJCQkJCQkKCQkJCQk8L3NlY3Rpb24+CgkJCQkKCQkJPC9kaXY+CgkJPC9kaXY+CQoJCQoJCgkJCgkJPGRpdiBjbGFzcz0iY3MtcyI+CgkJCTxoMyBjbGFzcz0iaGVhZGluZyI+PGEgaHJlZj0iL3N1cHBvcnQvc29sdXRpb25zLzgwMDAwMjgyNjk2Ij5QcmVtaXVtIGNsdWI8L2E+PC9oMz4KCQkJPGRpdiBjbGFzcz0iY3MtZy1jIj4KCQkJCQoJCQkJCTxzZWN0aW9uIGNsYXNzPSJjcy1nIGFydGljbGUtbGlzdCI+CgkJCQkJCTxkaXYgY2xhc3M9Imxpc3QtbGVhZCI+CgkJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9zb2x1dGlvbnMvZm9sZGVycy84MDAwMDQxNzYzOSIgdGl0bGU9IlByZW1pdW0gZmVhdHVyZXMiPiBQcmVtaXVtIGZlYXR1cmVzIDxzcGFuIGNsYXNzPSdpdGVtLWNvdW50Jz4wPC9zcGFuPjwvYT4KCQkJCQkJPC9kaXY+CgkJCQkJCQoJCQkJCTwvc2VjdGlvbj4KCQkJCQoJCQkJCTxzZWN0aW9uIGNsYXNzPSJjcy1nIGFydGljbGUtbGlzdCI+CgkJCQkJCTxkaXYgY2xhc3M9Imxpc3QtbGVhZCI+CgkJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9zb2x1dGlvbnMvZm9sZGVycy84MDAwMDQxNzY0MCIgdGl0bGU9IlByZW1pdW0gc3Vic2NyaXB0aW9uIj4gUHJlbWl1bSBzdWJzY3JpcHRpb24gPHNwYW4gY2xhc3M9J2l0ZW0tY291bnQnPjA8L3NwYW4+PC9hPgoJCQkJCQk8L2Rpdj4KCQkJCQkJCgkJCQkJPC9zZWN0aW9uPgoJCQkJCgkJCTwvZGl2PgoJCTwvZGl2PgkKCQkKCQo8L3NlY3Rpb24+CgoKCgk8L2Rpdj4KCQoKCQoKPC9kaXY+CgoJPGZvb3RlciBjbGFzcz0iZm9vdGVyIHJvdW5kZWQtNiI+CgkJPG5hdiBjbGFzcz0iZm9vdGVyLWxpbmtzIHBhZ2Ugbm8tcGFkZGluZyI+CgkJCQoJCQkJCQoJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9ob21lIiBjbGFzcz0iYWN0aXZlIj5Ib21lPC9hPgoJCQkJCQoJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9zb2x1dGlvbnMiIGNsYXNzPSIiPlNvbHV0aW9uczwvYT4KCQkJCQkKCQkJCgkJCQoJCQkgIDxhIGhyZWY9IiNwb3J0YWwtY29va2llLWluZm8iIHJlbD0iZnJlc2hkaWFsb2ciIGRhdGEtbGF6eS1sb2FkPSJ0cnVlIiBjbGFzcz0iY29va2llLWxpbmsiCiAgICAgICAgZGF0YS13aWR0aD0iNDUwcHgiIHRpdGxlPSJXaHkgd2UgbG92ZSBDb29raWVzIiBkYXRhLXRlbXBsYXRlLWZvb3Rlcj0iIj4KICAgICAgICBDb29raWUgcG9saWN5CiAgICAgIDwvYT4gPGRpdiBpZD0icG9ydGFsLWNvb2tpZS1pbmZvIiBjbGFzcz0iaGlkZSI+PHRleHRhcmVhPgogICAgICAgIDxwPldlIHVzZSBjb29raWVzIHRvIHRyeSBhbmQgZ2l2ZSB5b3UgYSBiZXR0ZXIgZXhwZXJpZW5jZSBpbiBGcmVzaGRlc2suIDwvcD4KICAgICAgICA8cD5Zb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgd2hhdCBraW5kIG9mIGNvb2tpZXMgd2UgdXNlLCB3aHksIGFuZCBob3cgZnJvbSBvdXIgPGEgaHJlZj0iaHR0cDovL2ZyZXNoZGVzay5jb20vcHJpdmFjeS8iIHRhcmdldD0iX2JsYW5rIj5Qcml2YWN5IFBvbGljeTwvYT4uIElmIHlvdSBoYXRlIGNvb2tpZXMsIG9yIGFyZSBqdXN0IG9uIGEgZGlldCwgeW91IGNhbiBkaXNhYmxlIHRoZW0gYWx0b2dldGhlciB0b28uIEp1c3Qgbm90ZSB0aGF0IHRoZSBGcmVzaGRlc2sgc2VydmljZSBpcyBwcmV0dHkgYmlnIG9uIHNvbWUgY29va2llcyAod2UgbG92ZSB0aGUgY2hvY28tY2hpcCBvbmVzKSwgYW5kIHNvbWUgcG9ydGlvbnMgb2YgRnJlc2hkZXNrIG1heSBub3Qgd29yayBwcm9wZXJseSBpZiB5b3UgZGlzYWJsZSBjb29raWVzLjwvcD4KICAgICAgICA8cD5XZeKAmWxsIGFsc28gYXNzdW1lIHlvdSBhZ3JlZSB0byB0aGUgd2F5IHdlIHVzZSBjb29raWVzIGFuZCBhcmUgb2sgd2l0aCBpdCBhcyBkZXNjcmliZWQgaW4gb3VyIDxhIGhyZWY9Imh0dHA6Ly9mcmVzaGRlc2suY29tL3ByaXZhY3kvIiB0YXJnZXQ9Il9ibGFuayI+UHJpdmFjeSBQb2xpY3k8L2E+LCB1bmxlc3MgeW91IGNob29zZSB0byBkaXNhYmxlIHRoZW0gYWx0b2dldGhlciB0aHJvdWdoIHlvdXIgYnJvd3Nlci48L3A+CiAgICAgIDwvdGV4dGFyZWE+PC9kaXY+IAoJCTwvbmF2PgoJPC9mb290ZXI+CgkgIDxkaXYgY2xhc3M9ImNvcHlyaWdodCI+CiAgICAgICAgPGEgaHJlZj1odHRwczovL2ZyZXNoZGVzay5jb20vP3V0bV9zb3VyY2U9cG9ydGFsJnV0bV9tZWRpdW09cmVmbGluayZ1dG1fY2FtcGFpZ249cG9ydGFsX3JlZmxpbmsgdGFyZ2V0PSJfYmxhbmsiPiBIZWxwIERlc2sgU29mdHdhcmUgPC9hPgogICAgICAgIGJ5IEZyZXNoZGVzawogICAgICA8L2Rpdj4gCgoKCgoJCQk8c2NyaXB0IHNyYz0iaHR0cHM6Ly9ldWMtYXNzZXRzMi5mcmVzaGRlc2suY29tL2Fzc2V0cy9jZG4vcG9ydGFsX2JvdHRvbS1jNzA0MjBjNTlkZjk1MmY3YWI0ZjhjNGU5MzAxY2M4Ni5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4KCQk8c2NyaXB0IHNyYz0iaHR0cHM6Ly9ldWMtYXNzZXRzOC5mcmVzaGRlc2suY29tL2Fzc2V0cy9jZG4vcmVkYWN0b3ItYmUwOTI2NDY4NjdhZmI0M2UzMGQxMDY3YWI3OWM5YTcuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CgkJPHNjcmlwdCBzcmM9Imh0dHBzOi8vZXVjLWFzc2V0czguZnJlc2hkZXNrLmNvbS9hc3NldHMvY2RuL2xhbmcvZW4tZDU4ZDY4OTEyMzY0ZWE2OGEwMWJkZTkzMjc3NGY5ZGQuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CgkJPCEtLSBmb3IgaTE4bi1qcyB0cmFuc2xhdGlvbnMgLS0+CiAgCQk8c2NyaXB0IHNyYz0iaHR0cHM6Ly9ldWMtYXNzZXRzOS5mcmVzaGRlc2suY29tL2Fzc2V0cy9jZG4vaTE4bi9wb3J0YWwvZW4tZTc1N2QzYjNmMDMzNjBlZjZkMWM3Y2Y0MjY0Y2RiYjQuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CgkJPCEtLSBJbmNsdWRpbmcgZGVmYXVsdCBwb3J0YWwgYmFzZWQgc2NyaXB0IGF0IHRoZSBib3R0b20gLS0+CgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLzwhW0NEQVRBWwoJCglqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewoJCQkJCQoJCS8vIFNldHRpbmcgdGhlIGxvY2FsZSBmb3IgbW9tZW50IGpzCgkJbW9tZW50LmxhbmcoJ2VuJyk7CgoJCXZhciB2YWxpZGF0aW9uX21lYXNzYWdlcyA9IHsicmVxdWlyZWQiOiJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIsInJlbW90ZSI6IlBsZWFzZSBmaXggdGhpcyBmaWVsZC4iLCJlbWFpbCI6IlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuIiwidXJsIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgVVJMLiIsImRhdGUiOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlLiIsImRhdGVJU08iOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlICggSVNPICkuIiwibnVtYmVyIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgbnVtYmVyLiIsImRpZ2l0cyI6IlBsZWFzZSBlbnRlciBvbmx5IGRpZ2l0cy4iLCJjcmVkaXRjYXJkIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgY3JlZGl0IGNhcmQgbnVtYmVyLiIsImVxdWFsVG8iOiJQbGVhc2UgZW50ZXIgdGhlIHNhbWUgdmFsdWUgYWdhaW4uIiwidHdvX2RlY2ltYWxfcGxhY2Vfd2FybmluZyI6IlZhbHVlIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiAyIGRlY2ltYWwgZGlnaXRzIiwic2VsZWN0X2F0bGVhc3Rfb25lIjoiU2VsZWN0IGF0IGxlYXN0IG9uZSBvcHRpb24uIiwic2VsZWN0Ml9taW5pbXVtX2xpbWl0IjoiUGxlYXNlIHR5cGUgJXtjaGFyX2NvdW50fSBvciBtb3JlIGxldHRlcnMiLCJzZWxlY3QyX21heGltdW1fbGltaXQiOiJZb3UgY2FuIG9ubHkgc2VsZWN0ICV7bGltaXR9ICV7Y29udGFpbmVyfSIsIm1heGxlbmd0aCI6IlBsZWFzZSBlbnRlciBubyBtb3JlIHRoYW4gezB9IGNoYXJhY3RlcnMuIiwibWlubGVuZ3RoIjoiUGxlYXNlIGVudGVyIGF0IGxlYXN0IHswfSBjaGFyYWN0ZXJzLiIsInJhbmdlbGVuZ3RoIjoiUGxlYXNlIGVudGVyIGEgdmFsdWUgYmV0d2VlbiB7MH0gYW5kIHsxfSBjaGFyYWN0ZXJzIGxvbmcuIiwicmFuZ2UiOiJQbGVhc2UgZW50ZXIgYSB2YWx1ZSBiZXR3ZWVuIHswfSBhbmQgezF9LiIsIm1heCI6IlBsZWFzZSBlbnRlciBhIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB7MH0uIiwibWluIjoiUGxlYXNlIGVudGVyIGEgdmFsdWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHswfS4iLCJzZWxlY3QyX21heGltdW1fbGltaXRfanEiOiJZb3UgY2FuIG9ubHkgc2VsZWN0IHswfSB7MX0iLCJmYWNlYm9va19saW1pdF9leGNlZWQiOiJZb3VyIEZhY2Vib29rIHJlcGx5IHdhcyBvdmVyIDgwMDAgY2hhcmFjdGVycy4gWW91J2xsIGhhdmUgdG8gYmUgbW9yZSBjbGV2ZXIuIiwibWVzc2VuZ2VyX2xpbWl0X2V4Y2VlZGVkIjoiT29wcyEgWW91IGhhdmUgZXhjZWVkZWQgTWVzc2VuZ2VyIFBsYXRmb3JtJ3MgY2hhcmFjdGVyIGxpbWl0LiBQbGVhc2UgbW9kaWZ5IHlvdXIgcmVzcG9uc2UuIiwibm90X2VxdWFsX3RvIjoiVGhpcyBlbGVtZW50IHNob3VsZCBub3QgYmUgZXF1YWwgdG8iLCJlbWFpbF9hZGRyZXNzX2ludmFsaWQiOiJPbmUgb3IgbW9yZSBlbWFpbCBhZGRyZXNzZXMgYXJlIGludmFsaWQuIiwidHdpdHRlcl9saW1pdF9leGNlZWQiOiJPb3BzISBZb3UgaGF2ZSBleGNlZWRlZCBUd2l0dGVyJ3MgY2hhcmFjdGVyIGxpbWl0LiBZb3UnbGwgaGF2ZSB0byBtb2RpZnkgeW91ciByZXNwb25zZS4iLCJwYXNzd29yZF9kb2VzX25vdF9tYXRjaCI6IlRoZSBwYXNzd29yZHMgZG9uJ3QgbWF0Y2guIFBsZWFzZSB0cnkgYWdhaW4uIiwidmFsaWRfaG91cnMiOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBob3Vycy4iLCJyZXBseV9saW1pdF9leGNlZWQiOiJZb3VyIHJlcGx5IHdhcyBvdmVyIDIwMDAgY2hhcmFjdGVycy4gWW91J2xsIGhhdmUgdG8gYmUgbW9yZSBjbGV2ZXIuIiwidXJsX2Zvcm1hdCI6IkludmFsaWQgVVJMIGZvcm1hdCIsInVybF93aXRob3V0X3NsYXNoIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgVVJMIHdpdGhvdXQgJy8nIiwibGlua19iYWNrX3VybCI6IlBsZWFzZSBlbnRlciBhIHZhbGlkIGxpbmtiYWNrIFVSTCIsInJlcXVlc3Rlcl92YWxpZGF0aW9uIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgcmVxdWVzdGVyIGRldGFpbHMgb3IgPGEgaHJlZj1cIiNcIiBpZD1cImFkZF9yZXF1ZXN0ZXJfYnRuX3Byb3h5XCI+YWRkIG5ldyByZXF1ZXN0ZXIuPC9hPiIsImFnZW50X3ZhbGlkYXRpb24iOiJQbGVhc2UgZW50ZXIgdmFsaWQgYWdlbnQgZGV0YWlscyIsImVtYWlsX29yX3Bob25lIjoiUGxlYXNlIGVudGVyIGEgRW1haWwgb3IgUGhvbmUgTnVtYmVyIiwidXBsb2FkX21iX2xpbWl0IjoiVXBsb2FkIGV4Y2VlZHMgdGhlIGF2YWlsYWJsZSAxNU1CIGxpbWl0IiwiaW52YWxpZF9pbWFnZSI6IkludmFsaWQgaW1hZ2UgZm9ybWF0IiwiYXRsZWFzdF9vbmVfcm9sZSI6IkF0IGxlYXN0IG9uZSByb2xlIGlzIHJlcXVpcmVkIGZvciB0aGUgYWdlbnQiLCJpbnZhbGlkX3RpbWUiOiJJbnZhbGlkIHRpbWUuIiwicmVtb3RlX2ZhaWwiOiJSZW1vdGUgdmFsaWRhdGlvbiBmYWlsZWQiLCJ0cmltX3NwYWNlcyI6IkF1dG8gdHJpbSBvZiBsZWFkaW5nICYgdHJhaWxpbmcgd2hpdGVzcGFjZSIsImhleF9jb2xvcl9pbnZhbGlkIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgaGV4IGNvbG9yIHZhbHVlLiIsIm5hbWVfZHVwbGljYXRpb24iOiJUaGUgbmFtZSBhbHJlYWR5IGV4aXN0cy4iLCJpbnZhbGlkX3ZhbHVlIjoiSW52YWxpZCB2YWx1ZSIsImludmFsaWRfcmVnZXgiOiJJbnZhbGlkIFJlZ3VsYXIgRXhwcmVzc2lvbiIsInNhbWVfZm9sZGVyIjoiQ2Fubm90IG1vdmUgdG8gdGhlIHNhbWUgZm9sZGVyLiIsIm1heGxlbmd0aF8yNTUiOiJQbGVhc2UgZW50ZXIgbGVzcyB0aGFuIDI1NSBjaGFyYWN0ZXJzIiwiZGVjaW1hbF9kaWdpdF92YWxpZCI6IlZhbHVlIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiAyIGRlY2ltYWwgZGlnaXRzIiwiYXRsZWFzdF9vbmVfZmllbGQiOiJQbGVhc2UgZmlsbCBhdCBsZWFzdCB7MH0gb2YgdGhlc2UgZmllbGRzLiIsImF0bGVhc3Rfb25lX3BvcnRhbCI6IlNlbGVjdCBhdGxlYXN0IG9uZSBwb3J0YWwuIiwiY3VzdG9tX2hlYWRlciI6IlBsZWFzZSB0eXBlIGN1c3RvbSBoZWFkZXIgaW4gdGhlIGZvcm1hdCAtICBoZWFkZXIgOiB2YWx1ZSIsInNhbWVfcGFzc3dvcmQiOiJTaG91bGQgYmUgc2FtZSBhcyBQYXNzd29yZCIsInNlbGVjdDJfbm9fbWF0Y2giOiJObyBtYXRjaGluZyAle2NvbnRhaW5lcn0gZm91bmQiLCJpbnRlZ3JhdGlvbl9ub19tYXRjaCI6Im5vIG1hdGNoaW5nIGRhdGEuLi4iLCJ0aW1lIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgdGltZSIsInZhbGlkX2NvbnRhY3QiOiJQbGVhc2UgYWRkIGEgdmFsaWQgY29udGFjdCIsImZpZWxkX2ludmFsaWQiOiJUaGlzIGZpZWxkIGlzIGludmFsaWQifQkKCgkJalF1ZXJ5LmV4dGVuZChqUXVlcnkudmFsaWRhdG9yLm1lc3NhZ2VzLCB2YWxpZGF0aW9uX21lYXNzYWdlcyApOwoKCgkJalF1ZXJ5KCIuY2FsbF9kdXJhdGlvbiIpLmVhY2goZnVuY3Rpb24gKCkgewoJCQl2YXIgZm9ybWF0LHRpbWU7CgkJCWlmIChqUXVlcnkodGhpcykuZGF0YSgidGltZSIpID09PSB1bmRlZmluZWQpIHsgcmV0dXJuOyB9CgkJCWlmKGpRdWVyeSh0aGlzKS5oYXNDbGFzcygnZnJlc2hjYWxsZXInKSl7IHJldHVybjsgfQoJCQl0aW1lID0galF1ZXJ5KHRoaXMpLmRhdGEoInRpbWUiKTsKCQkJaWYgKHRpbWU+PTM2MDApIHsKCQkJIGZvcm1hdCA9ICJoaDptbTpzcyI7CgkJCX0gZWxzZSB7CgkJCQlmb3JtYXQgPSAibW06c3MiOwoJCQl9CgkJCWpRdWVyeSh0aGlzKS5odG1sKHRpbWUudG9UaW1lKGZvcm1hdCkpOwoJCX0pOwoJfSk7CgoJLy8gU2hvcnRjdXRzIHZhcmlhYmxlcwoJdmFyIFNob3J0Y3V0cyA9IHsiZ2xvYmFsIjp7ImhlbHAiOiI/Iiwic2F2ZSI6Im1vZCtyZXR1cm4iLCJjYW5jZWwiOiJlc2MiLCJzZWFyY2giOiIvIiwic3RhdHVzX2RpYWxvZyI6Im1vZCthbHQrcmV0dXJuIiwic2F2ZV9jdWN0b21pemF0aW9uIjoibW9kK3NoaWZ0K3MifSwiYXBwX25hdiI6eyJkYXNoYm9hcmQiOiJnIGQiLCJ0aWNrZXRzIjoiZyB0Iiwic29jaWFsIjoiZyBlIiwic29sdXRpb25zIjoiZyBzIiwiZm9ydW1zIjoiZyBmIiwiY3VzdG9tZXJzIjoiZyBjIiwicmVwb3J0cyI6ImcgciIsImFkbWluIjoiZyBhIiwidGlja2V0X25ldyI6ImcgbiIsImNvbXBvc2VfZW1haWwiOiJnIG0ifSwicGFnaW5hdGlvbiI6eyJwcmV2aW91cyI6ImFsdCtsZWZ0IiwibmV4dCI6ImFsdCtyaWdodCIsImFsdF9wcmV2aW91cyI6ImoiLCJhbHRfbmV4dCI6ImsifSwidGlja2V0X2xpc3QiOnsidGlja2V0X3Nob3ciOiJyZXR1cm4iLCJzZWxlY3QiOiJ4Iiwic2VsZWN0X2FsbCI6InNoaWZ0K3giLCJzZWFyY2hfdmlldyI6InYiLCJzaG93X2Rlc2NyaXB0aW9uIjoic3BhY2UiLCJ1bndhdGNoIjoidyIsImRlbGV0ZSI6IiMiLCJwaWNrdXAiOiJAIiwic3BhbSI6IiEiLCJjbG9zZSI6In4iLCJzaWxlbnRfY2xvc2UiOiJhbHQrc2hpZnQrYCIsInVuZG8iOiJ6IiwicmVwbHkiOiJyIiwiZm9yd2FyZCI6ImYiLCJhZGRfbm90ZSI6Im4iLCJzY2VuYXJpbyI6InMifSwidGlja2V0X2RldGFpbCI6eyJ0b2dnbGVfd2F0Y2hlciI6InciLCJyZXBseSI6InIiLCJmb3J3YXJkIjoiZiIsImFkZF9ub3RlIjoibiIsImNsb3NlIjoifiIsInNpbGVudF9jbG9zZSI6ImFsdCtzaGlmdCtgIiwiYWRkX3RpbWUiOiJtIiwic3BhbSI6IiEiLCJkZWxldGUiOiIjIiwic2hvd19hY3Rpdml0aWVzX3RvZ2dsZSI6In0iLCJwcm9wZXJ0aWVzIjoicCIsImV4cGFuZCI6Il0iLCJ1bmRvIjoieiIsInNlbGVjdF93YXRjaGVyIjoic2hpZnQrdyIsImdvX3RvX25leHQiOlsiaiIsImRvd24iXSwiZ29fdG9fcHJldmlvdXMiOlsiayIsInVwIl0sInNjZW5hcmlvIjoicyIsInBpY2t1cCI6IkAiLCJjb2xsYWJvcmF0aW9uIjoiZCJ9LCJzb2NpYWxfc3RyZWFtIjp7InNlYXJjaCI6InMiLCJnb190b19uZXh0IjpbImoiLCJkb3duIl0sImdvX3RvX3ByZXZpb3VzIjpbImsiLCJ1cCJdLCJvcGVuX3N0cmVhbSI6WyJzcGFjZSIsInJldHVybiJdLCJjbG9zZSI6ImVzYyIsInJlcGx5IjoiciIsInJldHdlZXQiOiJzaGlmdCtyIn0sInBvcnRhbF9jdXN0b21pemF0aW9ucyI6eyJwcmV2aWV3IjoibW9kK3NoaWZ0K3AifSwiZGlzY3Vzc2lvbnMiOnsidG9nZ2xlX2ZvbGxvd2luZyI6InciLCJhZGRfZm9sbG93ZXIiOiJzaGlmdCt3IiwicmVwbHlfdG9waWMiOiJyIn19OwoJCgkvLyBEYXRlIGZvcm1hdHMKCXZhciBEQVRFX0ZPUk1BVFMgPSB7Im5vbl91cyI6eyJtb21lbnRfZGF0ZV93aXRoX3dlZWsiOiJkZGQsIEQgTU1NLCBZWVlZIiwiZGF0ZXBpY2tlciI6ImQgTSwgeXkiLCJkYXRlcGlja2VyX2VzY2FwZWQiOiJkIE0geXkiLCJkYXRlcGlja2VyX2Z1bGxfZGF0ZSI6IkQsIGQgTSwgeXkiLCJtZWRpdW1EYXRlIjoiZCBNTU0sIHl5eXkifSwidXMiOnsibW9tZW50X2RhdGVfd2l0aF93ZWVrIjoiZGRkLCBNTU0gRCwgWVlZWSIsImRhdGVwaWNrZXIiOiJNIGQsIHl5IiwiZGF0ZXBpY2tlcl9lc2NhcGVkIjoiTSBkIHl5IiwiZGF0ZXBpY2tlcl9mdWxsX2RhdGUiOiJELCBNIGQsIHl5IiwibWVkaXVtRGF0ZSI6Ik1NTSBkLCB5eXl5In19OwoKCXZhciBsYW5nID0geyAKCQlsb2FkaW5nVGV4dDogIlBsZWFzZSBXYWl0Li4uIiwKCQl2aWV3QWxsVGlja2V0czogIlZpZXcgYWxsIHRpY2tldHMiCgl9OwoKCi8vXV0+Cjwvc2NyaXB0PiAKCgkJCgoJCQoJCQoJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICAJCUkxOG4uZGVmYXVsdExvY2FsZSA9ICJlbiI7CiAgICAgCQlJMThuLmxvY2FsZSA9ICJlbiI7CgkJPC9zY3JpcHQ+CgkJCiAgICAKCTwvYm9keT4KPC9odG1sPg== - recorded_at: Wed, 30 Jun 2021 09:10:28 GMT -- request: - method: get - uri: https://.freshdesk.com/api/v2/agents/me - body: - encoding: US-ASCII - string: '' - headers: - Content-Type: - - application/json - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - User-Agent: - - Ruby - Host: - - ".freshdesk.com" - Authorization: - - Basic MW52NGwxZFQwSzNOOlg= response: status: code: 401 message: Unauthorized headers: Date: - - Wed, 30 Jun 2021 09:10:29 GMT + - Fri, 02 Jul 2021 17:06:20 GMT Content-Type: - application/json; charset=utf-8 Transfer-Encoding: @@ -170,41 +30,41 @@ http_interactions: - keep-alive Status: - 401 Unauthorized - Cache-Control: - - no-cache, private - X-Xss-Protection: - - 1; mode=block X-Request-Id: - - 83bb384d-c761-436d-98b8-fff9ccb21717 - X-Ua-Compatible: - - IE=Edge,chrome=1 - X-Content-Type-Options: - - nosniff + - 2e63f677-9401-4c0f-be3b-09452148e5aa X-Freshdesk-Api-Version: - latest=v2; requested=v2 X-Rack-Cache: - miss + Cache-Control: + - no-cache + X-Xss-Protection: + - 1; mode=block + X-Ua-Compatible: + - IE=Edge,chrome=1 + X-Content-Type-Options: + - nosniff Set-Cookie: - _x_w=5_2; path=/; HttpOnly; secure X-Fw-Ratelimiting-Managed: - 'true' X-Ratelimit-Total: - - '100' + - '40' X-Ratelimit-Remaining: - - '99' + - '39' X-Ratelimit-Used-Currentrequest: - '1' X-Envoy-Upstream-Service-Time: - - '76' + - '33' X-Trace-Id: - - 00-7bd1b871daf0687cfedd4078d0c52489-bd98c410abd4e2b7-00 + - 00-145e8f2b02698d2ce2900f4f616e4988-3dedbca8f1ce26b7-00 Server: - fwe body: encoding: UTF-8 string: '{"code":"invalid_credentials","message":"You have to be logged in to perform this action."}' - recorded_at: Wed, 30 Jun 2021 09:10:29 GMT + recorded_at: Fri, 02 Jul 2021 17:06:20 GMT - request: method: get uri: https://.freshdesk.com/api/v2/agents/me @@ -230,7 +90,7 @@ http_interactions: message: Unauthorized headers: Date: - - Wed, 30 Jun 2021 09:10:30 GMT + - Fri, 02 Jul 2021 17:06:22 GMT Content-Type: - application/json; charset=utf-8 Transfer-Encoding: @@ -239,20 +99,20 @@ http_interactions: - keep-alive Status: - 401 Unauthorized - Cache-Control: - - no-cache, private - X-Xss-Protection: - - 1; mode=block X-Request-Id: - - 51b3f33f-d4af-42b3-9bc9-dafaff530e2d - X-Ua-Compatible: - - IE=Edge,chrome=1 - X-Content-Type-Options: - - nosniff + - d42c365d-e4f9-4630-a854-fd9df3ccd492 X-Freshdesk-Api-Version: - latest=v2; requested=v2 X-Rack-Cache: - miss + Cache-Control: + - no-cache, private + X-Xss-Protection: + - 1; mode=block + X-Ua-Compatible: + - IE=Edge,chrome=1 + X-Content-Type-Options: + - nosniff Set-Cookie: - _x_w=5_2; path=/; HttpOnly; secure X-Fw-Ratelimiting-Managed: @@ -264,14 +124,83 @@ http_interactions: X-Ratelimit-Used-Currentrequest: - '1' X-Envoy-Upstream-Service-Time: - - '67' + - '30' X-Trace-Id: - - 00-da3196bb20fcd78bfa0560c364fe3a02-34ca41c5419fb49d-00 + - 00-23eaa754c0267bfd394c79555a57ab33-9419b7e2834dca13-00 Server: - fwe body: encoding: UTF-8 string: '{"code":"invalid_credentials","message":"You have to be logged in to perform this action."}' - recorded_at: Wed, 30 Jun 2021 09:10:30 GMT + recorded_at: Fri, 02 Jul 2021 17:06:22 GMT +- request: + method: get + uri: https://.freshdesk.com/api/v2/agents/me + body: + encoding: US-ASCII + string: '' + headers: + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + Host: + - ".freshdesk.com" + Authorization: + - Basic MW52NGwxZFQwSzNOOlg= + response: + status: + code: 401 + message: Unauthorized + headers: + Date: + - Fri, 02 Jul 2021 17:06:22 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 401 Unauthorized + X-Request-Id: + - c1a30c87-f725-40bf-b5af-1f35408ab1b7 + X-Freshdesk-Api-Version: + - latest=v2; requested=v2 + X-Rack-Cache: + - miss + Cache-Control: + - no-cache, private + X-Xss-Protection: + - 1; mode=block + X-Ua-Compatible: + - IE=Edge,chrome=1 + X-Content-Type-Options: + - nosniff + Set-Cookie: + - _x_w=5_2; path=/; HttpOnly; secure + X-Fw-Ratelimiting-Managed: + - 'true' + X-Ratelimit-Total: + - '100' + X-Ratelimit-Remaining: + - '97' + X-Ratelimit-Used-Currentrequest: + - '1' + X-Envoy-Upstream-Service-Time: + - '38' + X-Trace-Id: + - 00-6fb57292c47b89dcf35159f5bf216f66-43bb559927582d60-00 + Server: + - fwe + body: + encoding: UTF-8 + string: '{"code":"invalid_credentials","message":"You have to be logged in to + perform this action."}' + recorded_at: Fri, 02 Jul 2021 17:06:22 GMT recorded_with: VCR 6.0.0 diff --git a/test/data/vcr_cassettes/system/import/freshdesk/import_freshdesk_fields_validation_invalid_hostname.yml b/test/data/vcr_cassettes/system/import/freshdesk/import_freshdesk_fields_validation_invalid_hostname.yml index b3117c935..b603fd819 100644 --- a/test/data/vcr_cassettes/system/import/freshdesk/import_freshdesk_fields_validation_invalid_hostname.yml +++ b/test/data/vcr_cassettes/system/import/freshdesk/import_freshdesk_fields_validation_invalid_hostname.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: get - uri: https://reallybadexample.freshdesk.com/ + uri: https://reallybadexample.freshdesk.com/api/v2/contacts body: encoding: US-ASCII string: '' @@ -17,56 +17,41 @@ http_interactions: - reallybadexample.freshdesk.com response: status: - code: 200 - message: OK + code: 404 + message: Not Found headers: Date: - - Wed, 30 Jun 2021 09:10:23 GMT + - Fri, 02 Jul 2021 17:06:16 GMT Content-Type: - - text/html; charset=utf-8 + - application/json; charset=utf-8 Transfer-Encoding: - chunked Connection: - keep-alive Status: - - 200 OK - Cache-Control: - - max-age=0, private, must-revalidate - X-Xss-Protection: - - 1; mode=block + - 404 Not Found X-Request-Id: - - 60005b71-aa9e-4615-b5e6-1787b42e890a - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - W/"1f9efcb8395f73f1b213752ae9941ad3" - X-Frame-Options: - - SAMEORIGIN - X-Content-Type-Options: - - nosniff + - 200f4a46-412a-4e8a-b417-2639ef0c7dfe X-Rack-Cache: - miss + Cache-Control: + - no-cache + X-Xss-Protection: + - 1; mode=block + X-Ua-Compatible: + - IE=Edge,chrome=1 + X-Content-Type-Options: + - nosniff + X-Fw-Ratelimiting-Managed: + - 'false' X-Envoy-Upstream-Service-Time: - - '27' + - '902' X-Trace-Id: - - 00-35567a8fbfd7346dc95ea2a8b0c9320b-f68d5ac26a465810-00 + - 00-616a357299270485862d4b040120e5ef-32eb6e8fbf69042e-00 Server: - fwe body: encoding: ASCII-8BIT - string: "\n\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\tThere is no - helpdesk here!\n\t\n\t\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\"Freshdesk\"\n\t\t\t\t\t\t

We - couldn't find

\n\t\t\t\t\t\t

- May be this is still fresh!

\n\t\t\t\t\t\t

You can claim it now at - http://www.freshdesk.com/signup

\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t\t\t\n\n" - recorded_at: Wed, 30 Jun 2021 09:10:23 GMT + string: " " + recorded_at: Fri, 02 Jul 2021 17:06:16 GMT recorded_with: VCR 6.0.0 diff --git a/test/data/vcr_cassettes/system/import/freshdesk/import_freshdesk_fields_validation_shows_start_button.yml b/test/data/vcr_cassettes/system/import/freshdesk/import_freshdesk_fields_validation_shows_start_button.yml index 71bc13613..a2be587ac 100644 --- a/test/data/vcr_cassettes/system/import/freshdesk/import_freshdesk_fields_validation_shows_start_button.yml +++ b/test/data/vcr_cassettes/system/import/freshdesk/import_freshdesk_fields_validation_shows_start_button.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: get - uri: https://.freshdesk.com/ + uri: https://.freshdesk.com/api/v2/contacts body: encoding: US-ASCII string: '' @@ -17,125 +17,54 @@ http_interactions: - ".freshdesk.com" response: status: - code: 302 - message: Found + code: 401 + message: Unauthorized headers: Date: - - Wed, 30 Jun 2021 09:10:36 GMT + - Fri, 02 Jul 2021 17:06:27 GMT Content-Type: - - text/html; charset=utf-8 + - application/json; charset=utf-8 Transfer-Encoding: - chunked Connection: - keep-alive Status: - - 302 Found + - 401 Unauthorized + X-Request-Id: + - 88e25c54-4030-47ae-b722-18b422c28fc8 + X-Freshdesk-Api-Version: + - latest=v2; requested=v2 X-Rack-Cache: - miss Cache-Control: - - no-cache, no-store, max-age=0, must-revalidate - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - Pragma: - no-cache X-Xss-Protection: - 1; mode=block - X-Request-Id: - - 5de39e41-f4f0-4cb8-aa6c-fcfa88f1d801 - Location: - - https://.freshdesk.com/support/home X-Ua-Compatible: - IE=Edge,chrome=1 - X-Frame-Options: - - SAMEORIGIN X-Content-Type-Options: - nosniff - Expires: - - Fri, 01 Jan 1990 00:00:00 GMT - Set-Cookie: - - _x_w=5_2; path=/; HttpOnly; secure - X-Envoy-Upstream-Service-Time: - - '25' - X-Trace-Id: - - 00-f6de9efbeb30a8012d2f88581a916f8a-a032a3585f847bec-00 - Server: - - fwe - body: - encoding: UTF-8 - string: You are being redirected. - recorded_at: Wed, 30 Jun 2021 09:10:36 GMT -- request: - method: get - uri: https://.freshdesk.com/support/home - body: - encoding: US-ASCII - string: '' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - User-Agent: - - Zammad User Agent - Host: - - ".freshdesk.com" - response: - status: - code: 200 - message: OK - headers: - Date: - - Wed, 30 Jun 2021 09:10:36 GMT - Content-Type: - - text/html; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 200 OK - Cache-Control: - - max-age=0, private, must-revalidate - X-Ratelimit-Limit: - - '300' - X-Ratelimit-Reset: - - '300621091128' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - X-Ratelimit-Remaining: - - '197' - - '297' - X-Xss-Protection: - - 1; mode=block - X-Request-Id: - - 96f627e7-f235-4dcc-bd88-faf31394661f - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - W/"634d4f1b6de28ba7fc5e4535e774d734" - X-Content-Type-Options: - - nosniff - X-Rack-Cache: - - miss Set-Cookie: - _x_w=5_2; path=/; HttpOnly; secure X-Fw-Ratelimiting-Managed: - 'true' X-Ratelimit-Total: - - '200' + - '40' + X-Ratelimit-Remaining: + - '37' X-Ratelimit-Used-Currentrequest: - '1' X-Envoy-Upstream-Service-Time: - - '48' + - '31' X-Trace-Id: - - 00-c3981c92835483208711a967d25221bb-ab7ec01bdede37ea-00 + - 00-1c1f649281457de1806d4886dab13c2f-6b61ac894a9f055d-00 Server: - fwe body: - encoding: ASCII-8BIT - string: !binary |- - PCFET0NUWVBFIGh0bWw+CgogICAgICAgIDwhLS1baWYgbHQgSUUgN10+PGh0bWwgY2xhc3M9Im5vLWpzIGllNiIgbGFuZz0iZW4iIGRpcj0ibHRyIiBkYXRhLWRhdGUtZm9ybWF0PSJub25fdXMiPjwhW2VuZGlmXS0tPgogICAgICAgIDwhLS1baWYgSUUgN10+PGh0bWwgY2xhc3M9Im5vLWpzIGllNyIgbGFuZz0iZW4iIGRpcj0ibHRyIiBkYXRhLWRhdGUtZm9ybWF0PSJub25fdXMiPjwhW2VuZGlmXS0tPgogICAgICAgIDwhLS1baWYgSUUgOF0+PGh0bWwgY2xhc3M9Im5vLWpzIGllOCIgbGFuZz0iZW4iIGRpcj0ibHRyIiBkYXRhLWRhdGUtZm9ybWF0PSJub25fdXMiPjwhW2VuZGlmXS0tPgogICAgICAgIDwhLS1baWYgSUUgOV0+PGh0bWwgY2xhc3M9Im5vLWpzIGllOSIgbGFuZz0iZW4iIGRpcj0ibHRyIiBkYXRhLWRhdGUtZm9ybWF0PSJub25fdXMiPjwhW2VuZGlmXS0tPgogICAgICAgIDwhLS1baWYgSUUgMTBdPjxodG1sIGNsYXNzPSJuby1qcyBpZTEwIiBsYW5nPSJlbiIgZGlyPSJsdHIiIGRhdGEtZGF0ZS1mb3JtYXQ9Im5vbl91cyI+PCFbZW5kaWZdLS0+CiAgICAgICAgPCEtLVtpZiAoZ3QgSUUgMTApfCEoSUUpXT48IS0tPjxodG1sIGNsYXNzPSJuby1qcyAiIGxhbmc9ImVuIiBkaXI9Imx0ciIgZGF0YS1kYXRlLWZvcm1hdD0ibm9uX3VzIj48IS0tPCFbZW5kaWZdLS0+Cgk8aGVhZD4KCQkKCQk8IS0tIFRpdGxlIGZvciB0aGUgcGFnZSAtLT4KPHRpdGxlPiBTdXBwb3J0IDogWmFtbWFkIEdtYkggPC90aXRsZT4KCjwhLS0gTWV0YSBpbmZvcm1hdGlvbiAtLT4KCiAgICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgogICAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UsY2hyb21lPTEiIC8+CiAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSAiIiAvPgogICAgICA8bWV0YSBuYW1lPSJhdXRob3IiIGNvbnRlbnQ9ICIiIC8+CiAgICAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IlN1cHBvcnQiIC8+ICA8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwczovLzxJTVBPUlRfRlJFU0hERVNLX0VORFBPSU5UX1NVQkRPTUFJTj4uZnJlc2hkZXNrLmNvbS9zdXBwb3J0L3NvbHV0aW9ucyIgLz4gIDxtZXRhIHByb3BlcnR5PSJvZzppbWFnZSIgY29udGVudD0iL2Fzc2V0cy9taXNjL2xvZ28ucG5nPzcwMjAxNyIgLz4gIDxtZXRhIHByb3BlcnR5PSJvZzpzaXRlX25hbWUiIGNvbnRlbnQ9IlphbW1hZCBHbWJIIiAvPiAgPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9ImFydGljbGUiIC8+ICA8bWV0YSBuYW1lPSJ0d2l0dGVyOnRpdGxlIiBjb250ZW50PSJTdXBwb3J0IiAvPiAgPG1ldGEgbmFtZT0idHdpdHRlcjp1cmwiIGNvbnRlbnQ9Imh0dHBzOi8vPElNUE9SVF9GUkVTSERFU0tfRU5EUE9JTlRfU1VCRE9NQUlOPi5mcmVzaGRlc2suY29tL3N1cHBvcnQvc29sdXRpb25zIiAvPiAgPG1ldGEgbmFtZT0idHdpdHRlcjppbWFnZSIgY29udGVudD0iL2Fzc2V0cy9taXNjL2xvZ28ucG5nPzcwMjAxNyIgLz4gIDxtZXRhIG5hbWU9InR3aXR0ZXI6Y2FyZCIgY29udGVudD0ic3VtbWFyeSIgLz4gIDxsaW5rIHJlbD0iY2Fub25pY2FsIiBocmVmPSJodHRwczovLzxJTVBPUlRfRlJFU0hERVNLX0VORFBPSU5UX1NVQkRPTUFJTj4uZnJlc2hkZXNrLmNvbS9zdXBwb3J0L3NvbHV0aW9ucyIgLz4gCgo8IS0tIFJlc3BvbnNpdmUgc2V0dGluZyAtLT4KPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBocmVmPSIvYXNzZXRzL3RvdWNoL3RvdWNoLWljb24taXBob25lLnBuZyIgLz4KICAgICAgICA8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSI3Mng3MiIgaHJlZj0iL2Fzc2V0cy90b3VjaC90b3VjaC1pY29uLWlwYWQucG5nIiAvPgogICAgICAgIDxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgc2l6ZXM9IjExNHgxMTQiIGhyZWY9Ii9hc3NldHMvdG91Y2gvdG91Y2gtaWNvbi1pcGhvbmUtcmV0aW5hLnBuZyIgLz4KICAgICAgICA8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSIxNDR4MTQ0IiBocmVmPSIvYXNzZXRzL3RvdWNoL3RvdWNoLWljb24taXBhZC1yZXRpbmEucG5nIiAvPgogICAgICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIHVzZXItc2NhbGFibGU9bm8sIGluaXRpYWwtc2NhbGU9MS4wIiAvPiAKCQkKCQk8IS0tIEFkZGluZyBtZXRhIHRhZyBmb3IgQ1NSRiB0b2tlbiAtLT4KCQk8bWV0YSBjb250ZW50PSJhdXRoZW50aWNpdHlfdG9rZW4iIG5hbWU9ImNzcmYtcGFyYW0iIC8+CjxtZXRhIGNvbnRlbnQ9InZzdUNNUHRabCtQL2pFaGJodGJJcVZXT2dROGJuU0RSV2pkYWgyRXNkSUU9IiBuYW1lPSJjc3JmLXRva2VuIiAvPgoJCTwhLS0gRW5kIG1ldGEgdGFnIGZvciBDU1JGIHRva2VuIC0tPgoJCQoJCTwhLS0gRmF2IGljb24gZm9yIHBvcnRhbCAtLT4KCQk8bGluayByZWw9J3Nob3J0Y3V0IGljb24nIGhyZWY9Jy9hc3NldHMvbWlzYy9mYXZpY29uLmljbz83MDIwMTcnIC8+CgoJCTwhLS0gQmFzZSBzdHlsZXNoZWV0IC0tPgogCgkJPGxpbmsgaHJlZj0iaHR0cHM6Ly9ldWMtYXNzZXRzNS5mcmVzaGRlc2suY29tL2Fzc2V0cy9jZG4vcG9ydGFsX3ByaW50LWEzODlmMWVmM2U4NzI2MWU3MjY0ZTNlNzA0MTZkNzA0LmNzcyIgbWVkaWE9InByaW50IiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiAvPgoJICAJCTxsaW5rIGhyZWY9Imh0dHBzOi8vZXVjLWFzc2V0czIuZnJlc2hkZXNrLmNvbS9hc3NldHMvY2RuL2ZhbGNvbl9wb3J0YWxfdXRpbHMtMTE2MzYyOTQ2OTRkMGVmMjI4N2YwYTAxNzA4NTJjNDYuY3NzIiBtZWRpYT0ic2NyZWVuIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiAvPgkKCgkJCgkJPCEtLSBUaGVtZSBzdHlsZXNoZWV0IC0tPgoKCQk8bGluayBocmVmPSIvc3VwcG9ydC90aGVtZS5jc3M/dj0yJmFtcDtkPTE2MjA2MzIzMjQiIG1lZGlhPSJzY3JlZW4iIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgoKCQk8IS0tIEdvb2dsZSBmb250IHVybCBpZiBwcmVzZW50IC0tPgoJCTxsaW5rIGhyZWY9J2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Tb3VyY2UrU2FucytQcm86cmVndWxhcixpdGFsaWMsNjAwLDcwMCw3MDBpdGFsaWN8UG9wcGluczpyZWd1bGFyLDYwMCw3MDAnIHJlbD0nc3R5bGVzaGVldCcgdHlwZT0ndGV4dC9jc3MnPgoKCQk8IS0tIEluY2x1ZGluZyBkZWZhdWx0IHBvcnRhbCBiYXNlZCBzY3JpcHQgZnJhbWV3b3JrIGF0IHRoZSB0b3AgLS0+CgkJCTxzY3JpcHQgc3JjPSJodHRwczovL2V1Yy1hc3NldHMxMC5mcmVzaGRlc2suY29tL2Fzc2V0cy9jZG4vcG9ydGFsX2hlYWQtOTBhM2EzYjUxYzBjZDdhMDlmNzlkYzU3MWE4NmQxYTcuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CgkJPCEtLSBJbmNsdWRpbmcgc3ludGV4aGlnaGxpZ2h0ZXIgZm9yIHBvcnRhbCAtLT4KCQk8c2NyaXB0IHNyYz0iaHR0cHM6Ly9ldWMtYXNzZXRzNi5mcmVzaGRlc2suY29tL2Fzc2V0cy9jZG4vcHJpc20tODBlNGQ5NWFhY2JjOWExMzM0ZDA2ZjIyYTIyNGU4YjEuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CgoJCQoKCQk8IS0tIEFjY2VzcyBwb3J0YWwgc2V0dGluZ3MgaW5mb3JtYXRpb24gdmlhIGphdmFzY3JpcHQgLS0+CgkJIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4gICAgIHZhciBwb3J0YWwgPSB7Imxhbmd1YWdlIjoiZW4iLCJuYW1lIjoiWmFtbWFkIEdtYkgiLCJjb250YWN0X2luZm8iOiIiLCJjdXJyZW50X3BhZ2VfbmFtZSI6InBvcnRhbF9ob21lIiwiY3VycmVudF90YWIiOiJob21lIiwidmF1bHRfc2VydmljZSI6eyJ1cmwiOiJodHRwczovL3ZhdWx0LXNlcnZpY2UtZXUuZnJlc2h3b3Jrcy5jb20vZGF0YSIsIm1heF90cnkiOjIsInByb2R1Y3RfbmFtZSI6ImZkIn0sImN1cnJlbnRfYWNjb3VudF9pZCI6MTg5MDU2MCwicHJlZmVyZW5jZXMiOnsiYmdfY29sb3IiOiIjZjNmNWY3IiwiaGVhZGVyX2NvbG9yIjoiI2ZmZmZmZiIsImhlbHBfY2VudGVyX2NvbG9yIjoiI2YzZjVmNyIsImZvb3Rlcl9jb2xvciI6IiMxODMyNDciLCJ0YWJfY29sb3IiOiIjZmZmZmZmIiwidGFiX2hvdmVyX2NvbG9yIjoiIzAyYjg3NSIsImJ0bl9iYWNrZ3JvdW5kIjoiI2YzZjVmNyIsImJ0bl9wcmltYXJ5X2JhY2tncm91bmQiOiIjMDJiODc1IiwiYmFzZUZvbnQiOiJTb3VyY2UgU2FucyBQcm8iLCJ0ZXh0Q29sb3IiOiIjMTgzMjQ3IiwiaGVhZGluZ3NGb250IjoiUG9wcGlucyIsImhlYWRpbmdzQ29sb3IiOiIjMTgzMjQ3IiwibGlua0NvbG9yIjoiIzE4MzI0NyIsImxpbmtDb2xvckhvdmVyIjoiIzI3NTNkNyIsImlucHV0Rm9jdXNSaW5nQ29sb3IiOiIjMDJCODc1Iiwibm9uUmVzcG9uc2l2ZSI6ZmFsc2UsInBlcnNvbmFsaXplZF9hcnRpY2xlcyI6dHJ1ZX0sImltYWdlX3BsYWNlaG9sZGVycyI6eyJzcGFjZXIiOiJodHRwczovL2V1Yy1hc3NldHMxMC5mcmVzaGRlc2suY29tL2Fzc2V0cy9taXNjL3NwYWNlci5naWYiLCJwcm9maWxlX3RodW1iIjoiaHR0cHM6Ly9ldWMtYXNzZXRzMy5mcmVzaGRlc2suY29tL2Fzc2V0cy9taXNjL3Byb2ZpbGVfYmxhbmtfdGh1bWItZTFhMzQwMzNiMzA3M2NiODBmNWJlY2MwYjY0NGJmY2EuanBnIiwicHJvZmlsZV9tZWRpdW0iOiJodHRwczovL2V1Yy1hc3NldHM0LmZyZXNoZGVzay5jb20vYXNzZXRzL21pc2MvcHJvZmlsZV9ibGFua19tZWRpdW0tNGFlMjI4MGE0NjBlYWUzYzg3MGFjYjdhNzU0NWI3ZTUuanBnIn0sImZhbGNvbl9wb3J0YWxfdGhlbWUiOnRydWV9OyAgICAgdmFyIGF0dGFjaG1lbnRfc2l6ZSA9IDIwOyAgPC9zY3JpcHQ+IAoKCgkJCgk8L2hlYWQ+Cgk8Ym9keT4KICAgICAgICAgICAgCQoJCQoJCQoJCQoJPGhlYWRlciBjbGFzcz0iYmFubmVyIj4KCQk8ZGl2IGNsYXNzPSJiYW5uZXItd3JhcHBlciBwYWdlIj4KCQkJPGRpdiBjbGFzcz0iYmFubmVyLXRpdGxlIj4KCQkJCTxhIGhyZWY9Ii9zdXBwb3J0L2hvbWUiY2xhc3M9J3BvcnRhbC1sb2dvJz48c3BhbiBjbGFzcz0icG9ydGFsLWltZyI+PGk+PC9pPgogICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPScvYXNzZXRzL21pc2MvbG9nby5wbmcnIGFsdD0iTG9nbyIKICAgICAgICAgICAgICAgICAgICAgICAgb25lcnJvcj0iZGVmYXVsdF9pbWFnZV9lcnJvcih0aGlzKSIgZGF0YS10eXBlPSJsb2dvIiAvPgogICAgICAgICAgICAgICAgIDwvc3Bhbj48L2E+CgkJCQk8aDEgY2xhc3M9ImVsbGlwc2lzIGhlYWRpbmciPlphbW1hZCBHbWJIPC9oMT4KCQkJPC9kaXY+CgkJCTxuYXYgY2xhc3M9ImJhbm5lci1uYXYiPgoJCQkJIDxkaXYgY2xhc3M9IndlbGNvbWUiPldlbGNvbWUgPGI+PC9iPiA8L2Rpdj4gIDxiPjxhIGhyZWY9Ii9zdXBwb3J0L2xvZ2luIj48Yj5Mb2dpbjwvYj48L2E+PC9iPiAmbmJzcDs8Yj48YSBocmVmPSIvc3VwcG9ydC9zaWdudXAiPjxiPlNpZ24gdXA8L2I+PC9hPjwvYj4KCQkJPC9uYXY+CgkJPC9kaXY+Cgk8L2hlYWRlcj4KCTxuYXYgY2xhc3M9InBhZ2UtdGFicyI+CgkJPGRpdiBjbGFzcz0icGFnZSBuby1wYWRkaW5nIG5vLWhlYWRlci10YWJzIj4KCQkJCgkJCQk8YSBkYXRhLXRvZ2dsZS1kb209IiNoZWFkZXItdGFicyIgaHJlZj0iIyIgZGF0YS1hbmltYXRlZD0idHJ1ZSIgY2xhc3M9Im1vYmlsZS1pY29uLW5hdi1tZW51IHNob3ctaW4tbW9iaWxlIj48L2E+CgkJCQk8ZGl2IGNsYXNzPSJuYXYtbGluayIgaWQ9ImhlYWRlci10YWJzIj4KCQkJCQkKCQkJCQkJCgkJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9ob21lIiBjbGFzcz0iYWN0aXZlIj5Ib21lPC9hPgoJCQkJCQkKCQkJCQkKCQkJCQkJCgkJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9zb2x1dGlvbnMiIGNsYXNzPSIiPlNvbHV0aW9uczwvYT4KCQkJCQkJCgkJCQkJCgkJCQk8L2Rpdj4KCQkJCgkJPC9kaXY+Cgk8L25hdj4KCjwhLS0gU2VhcmNoIGFuZCBwYWdlIGxpbmtzIGZvciB0aGUgcGFnZSAtLT4KCgoKPGRpdiBjbGFzcz0icGFnZSI+CgkKCQoJPCEtLSBTZWFyY2ggYW5kIHBhZ2UgbGlua3MgZm9yIHRoZSBwYWdlIC0tPgoJCgkJPHNlY3Rpb24gY2xhc3M9ImhlbHAtY2VudGVyIHJvdW5kZWQtNiI+CQoJCQk8ZGl2IGNsYXNzPSJoYy1zZWFyY2giPgoJCQkJPGRpdiBjbGFzcz0iaGMtc2VhcmNoLWMiPgoJCQkJCTxoMiBjbGFzcz0iaGVhZGluZyBoaWRlLWluLW1vYmlsZSI+SG93IGNhbiB3ZSBoZWxwIHlvdSB0b2RheT88L2gyPgoJCQkJCTxmb3JtIGNsYXNzPSJoYy1zZWFyY2gtZm9ybSBwcmludC0tcmVtb3ZlIiBhdXRvY29tcGxldGU9Im9mZiIgYWN0aW9uPSIvc3VwcG9ydC9zZWFyY2giIGlkPSJoYy1zZWFyY2gtZm9ybSIgZGF0YS1jc3JmLWlnbm9yZT0idHJ1ZSI+Cgk8ZGl2IGNsYXNzPSJoYy1zZWFyY2gtaW5wdXQiPgoJPGxhYmVsIGZvcj0ic3VwcG9ydC1zZWFyY2gtaW5wdXQiIGNsYXNzPSJoaWRlIj5FbnRlciB5b3VyIHNlYXJjaCB0ZXJtIGhlcmUuLi48L2xhYmVsPgoJCTxpbnB1dCBwbGFjZWhvbGRlcj0iRW50ZXIgeW91ciBzZWFyY2ggdGVybSBoZXJlLi4uIiB0eXBlPSJ0ZXh0IiAKCQkJbmFtZT0idGVybSIgY2xhc3M9InNwZWNpYWwiIHZhbHVlPSIiIAogICAgICAgICAgICByZWw9InBhZ2Utc2VhcmNoIiBkYXRhLW1heC1tYXRjaGVzPSIxMCIgaWQ9InN1cHBvcnQtc2VhcmNoLWlucHV0Ij4KCTwvZGl2PgoJPGRpdiBjbGFzcz0iaGMtc2VhcmNoLWJ1dHRvbiI+CgkJPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiB0eXBlPSJzdWJtaXQiIGF1dG9jb21wbGV0ZT0ib2ZmIj4KCQkJPGkgY2xhc3M9Im1vYmlsZS1pY29uLXNlYXJjaCBoaWRlLXRhYmxldCI+PC9pPgoJCQk8c3BhbiBjbGFzcz0iaGlkZS1pbi1tb2JpbGUiPgoJCQkJU2VhcmNoCgkJCTwvc3Bhbj4KCQk8L2J1dHRvbj4JCgk8L2Rpdj4KPC9mb3JtPgoJCQkJPC9kaXY+CgkJCTwvZGl2PgoJCQk8ZGl2IGNsYXNzPSJoYy1uYXYgIj4JCQkJCgkJCQkgPG5hdj4gICA8ZGl2PgogICAgICAgICAgICAgIDxhIGhyZWY9Ii9zdXBwb3J0L3RpY2tldHMvbmV3IiBjbGFzcz0ibW9iaWxlLWljb24tbmF2LW5ld3RpY2tldCBuZXctdGlja2V0IGVsbGlwc2lzIiB0aXRsZT0iTmV3IHN1cHBvcnQgdGlja2V0Ij4KICAgICAgICAgICAgICAgIDxzcGFuPiBOZXcgc3VwcG9ydCB0aWNrZXQgPC9zcGFuPgogICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC9kaXY+ICAgPGRpdj4KICAgICAgICAgICAgICA8YSBocmVmPSIvc3VwcG9ydC90aWNrZXRzIiBjbGFzcz0ibW9iaWxlLWljb24tbmF2LXN0YXR1cyBjaGVjay1zdGF0dXMgZWxsaXBzaXMiIHRpdGxlPSJDaGVjayB0aWNrZXQgc3RhdHVzIj4KICAgICAgICAgICAgICAgIDxzcGFuPkNoZWNrIHRpY2tldCBzdGF0dXM8L3NwYW4+CiAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L2Rpdj4gIDwvbmF2PgoJCQk8L2Rpdj4KCQk8L3NlY3Rpb24+CgkKCgk8IS0tIE5vdGlmaWNhdGlvbiBNZXNzYWdlcyAtLT4KCSA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC13aXRoLWNsb3NlIG5vdGljZSIgaWQ9Im5vdGljZWFqYXgiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij48L2Rpdj4gCgoJCgk8ZGl2IGNsYXNzPSJjLXdyYXBwZXIiPgkJCgkJCjxzZWN0aW9uIGNsYXNzPSJtYWluIGNvbnRlbnQgcm91bmRlZC02IG1pbi1oZWlnaHQtb24tZGVza3RvcCBmYy1wb3J0YWwtc29sdXRpb24taG9tZSIgaWQ9InNvbHV0aW9ucy1pbmRleC1ob21lIj4KCTxoMiBjbGFzcz0iaGVhZGluZyI+S25vd2xlZGdlIGJhc2U8L2gyPgoJCgkJCgkJPGRpdiBjbGFzcz0iY3MtcyI+CgkJCTxoMyBjbGFzcz0iaGVhZGluZyI+PGEgaHJlZj0iL3N1cHBvcnQvc29sdXRpb25zLzgwMDAwMjgyNjY0Ij5HZW5lcmFsPC9hPjwvaDM+CgkJCTxkaXYgY2xhc3M9ImNzLWctYyI+CgkJCQkKCQkJCQk8c2VjdGlvbiBjbGFzcz0iY3MtZyBhcnRpY2xlLWxpc3QiPgoJCQkJCQk8ZGl2IGNsYXNzPSJsaXN0LWxlYWQiPgoJCQkJCQkJPGEgaHJlZj0iL3N1cHBvcnQvc29sdXRpb25zL2ZvbGRlcnMvODAwMDA0MTc1OTAiIHRpdGxlPSJGQVEiPiBGQVEgPHNwYW4gY2xhc3M9J2l0ZW0tY291bnQnPjA8L3NwYW4+PC9hPgoJCQkJCQk8L2Rpdj4KCQkJCQkJCgkJCQkJPC9zZWN0aW9uPgoJCQkJCgkJCQkJPHNlY3Rpb24gY2xhc3M9ImNzLWcgYXJ0aWNsZS1saXN0Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGlzdC1sZWFkIj4KCQkJCQkJCTxhIGhyZWY9Ii9zdXBwb3J0L3NvbHV0aW9ucy9mb2xkZXJzLzgwMDAwNDE3NTkxIiB0aXRsZT0iR2V0dGluZyBTdGFydGVkIj4gR2V0dGluZyBTdGFydGVkIDxzcGFuIGNsYXNzPSdpdGVtLWNvdW50Jz4wPC9zcGFuPjwvYT4KCQkJCQkJPC9kaXY+CgkJCQkJCQoJCQkJCTwvc2VjdGlvbj4KCQkJCQoJCQk8L2Rpdj4KCQk8L2Rpdj4JCgkJCgkKCQkKCQk8ZGl2IGNsYXNzPSJjcy1zIj4KCQkJPGgzIGNsYXNzPSJoZWFkaW5nIj48YSBocmVmPSIvc3VwcG9ydC9zb2x1dGlvbnMvODAwMDAyODI2OTMiPkdldHRpbmcgc3RhcnRlZCB3aXRoIHVzPC9hPjwvaDM+CgkJCTxkaXYgY2xhc3M9ImNzLWctYyI+CgkJCQkKCQkJCQk8c2VjdGlvbiBjbGFzcz0iY3MtZyBhcnRpY2xlLWxpc3QiPgoJCQkJCQk8ZGl2IGNsYXNzPSJsaXN0LWxlYWQiPgoJCQkJCQkJPGEgaHJlZj0iL3N1cHBvcnQvc29sdXRpb25zL2ZvbGRlcnMvODAwMDA0MTc2MzQiIHRpdGxlPSJZb3VyIGFjY291bnQiPiBZb3VyIGFjY291bnQgPHNwYW4gY2xhc3M9J2l0ZW0tY291bnQnPjA8L3NwYW4+PC9hPgoJCQkJCQk8L2Rpdj4KCQkJCQkJCgkJCQkJPC9zZWN0aW9uPgoJCQkJCgkJCQkJPHNlY3Rpb24gY2xhc3M9ImNzLWcgYXJ0aWNsZS1saXN0Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGlzdC1sZWFkIj4KCQkJCQkJCTxhIGhyZWY9Ii9zdXBwb3J0L3NvbHV0aW9ucy9mb2xkZXJzLzgwMDAwNDE3NjM1IiB0aXRsZT0iWW91ciBkb2N1bWVudHMiPiBZb3VyIGRvY3VtZW50cyA8c3BhbiBjbGFzcz0naXRlbS1jb3VudCc+MDwvc3Bhbj48L2E+CgkJCQkJCTwvZGl2PgoJCQkJCQkKCQkJCQk8L3NlY3Rpb24+CgkJCQkKCQkJPC9kaXY+CgkJPC9kaXY+CQoJCQoJCgkJCgkJPGRpdiBjbGFzcz0iY3MtcyI+CgkJCTxoMyBjbGFzcz0iaGVhZGluZyI+PGEgaHJlZj0iL3N1cHBvcnQvc29sdXRpb25zLzgwMDAwMjgyNjk0Ij5GQVFzOjwvYT48L2gzPgoJCQk8ZGl2IGNsYXNzPSJjcy1nLWMiPgoJCQkJCgkJCQkJPHNlY3Rpb24gY2xhc3M9ImNzLWcgYXJ0aWNsZS1saXN0Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGlzdC1sZWFkIj4KCQkJCQkJCTxhIGhyZWY9Ii9zdXBwb3J0L3NvbHV0aW9ucy9mb2xkZXJzLzgwMDAwNDE3NjM2IiB0aXRsZT0iVHJpYWwgRkFRcyI+IFRyaWFsIEZBUXMgPHNwYW4gY2xhc3M9J2l0ZW0tY291bnQnPjA8L3NwYW4+PC9hPgoJCQkJCQk8L2Rpdj4KCQkJCQkJCgkJCQkJPC9zZWN0aW9uPgoJCQkJCgkJCTwvZGl2PgoJCTwvZGl2PgkKCQkKCQoJCQoJCTxkaXYgY2xhc3M9ImNzLXMiPgoJCQk8aDMgY2xhc3M9ImhlYWRpbmciPjxhIGhyZWY9Ii9zdXBwb3J0L3NvbHV0aW9ucy84MDAwMDI4MjY5NSI+RmlsZXMgYW5kIGZvbGRlcnM8L2E+PC9oMz4KCQkJPGRpdiBjbGFzcz0iY3MtZy1jIj4KCQkJCQoJCQkJCTxzZWN0aW9uIGNsYXNzPSJjcy1nIGFydGljbGUtbGlzdCI+CgkJCQkJCTxkaXYgY2xhc3M9Imxpc3QtbGVhZCI+CgkJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9zb2x1dGlvbnMvZm9sZGVycy84MDAwMDQxNzYzNyIgdGl0bGU9IlNoYXJlZCBmaWxlcyI+IFNoYXJlZCBmaWxlcyA8c3BhbiBjbGFzcz0naXRlbS1jb3VudCc+MDwvc3Bhbj48L2E+CgkJCQkJCTwvZGl2PgoJCQkJCQkKCQkJCQk8L3NlY3Rpb24+CgkJCQkKCQkJCQk8c2VjdGlvbiBjbGFzcz0iY3MtZyBhcnRpY2xlLWxpc3QiPgoJCQkJCQk8ZGl2IGNsYXNzPSJsaXN0LWxlYWQiPgoJCQkJCQkJPGEgaHJlZj0iL3N1cHBvcnQvc29sdXRpb25zL2ZvbGRlcnMvODAwMDA0MTc2MzgiIHRpdGxlPSJEZWxldGVkIGZpbGVzIj4gRGVsZXRlZCBmaWxlcyA8c3BhbiBjbGFzcz0naXRlbS1jb3VudCc+MDwvc3Bhbj48L2E+CgkJCQkJCTwvZGl2PgoJCQkJCQkKCQkJCQk8L3NlY3Rpb24+CgkJCQkKCQkJPC9kaXY+CgkJPC9kaXY+CQoJCQoJCgkJCgkJPGRpdiBjbGFzcz0iY3MtcyI+CgkJCTxoMyBjbGFzcz0iaGVhZGluZyI+PGEgaHJlZj0iL3N1cHBvcnQvc29sdXRpb25zLzgwMDAwMjgyNjk2Ij5QcmVtaXVtIGNsdWI8L2E+PC9oMz4KCQkJPGRpdiBjbGFzcz0iY3MtZy1jIj4KCQkJCQoJCQkJCTxzZWN0aW9uIGNsYXNzPSJjcy1nIGFydGljbGUtbGlzdCI+CgkJCQkJCTxkaXYgY2xhc3M9Imxpc3QtbGVhZCI+CgkJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9zb2x1dGlvbnMvZm9sZGVycy84MDAwMDQxNzYzOSIgdGl0bGU9IlByZW1pdW0gZmVhdHVyZXMiPiBQcmVtaXVtIGZlYXR1cmVzIDxzcGFuIGNsYXNzPSdpdGVtLWNvdW50Jz4wPC9zcGFuPjwvYT4KCQkJCQkJPC9kaXY+CgkJCQkJCQoJCQkJCTwvc2VjdGlvbj4KCQkJCQoJCQkJCTxzZWN0aW9uIGNsYXNzPSJjcy1nIGFydGljbGUtbGlzdCI+CgkJCQkJCTxkaXYgY2xhc3M9Imxpc3QtbGVhZCI+CgkJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9zb2x1dGlvbnMvZm9sZGVycy84MDAwMDQxNzY0MCIgdGl0bGU9IlByZW1pdW0gc3Vic2NyaXB0aW9uIj4gUHJlbWl1bSBzdWJzY3JpcHRpb24gPHNwYW4gY2xhc3M9J2l0ZW0tY291bnQnPjA8L3NwYW4+PC9hPgoJCQkJCQk8L2Rpdj4KCQkJCQkJCgkJCQkJPC9zZWN0aW9uPgoJCQkJCgkJCTwvZGl2PgoJCTwvZGl2PgkKCQkKCQo8L3NlY3Rpb24+CgoKCgk8L2Rpdj4KCQoKCQoKPC9kaXY+CgoJPGZvb3RlciBjbGFzcz0iZm9vdGVyIHJvdW5kZWQtNiI+CgkJPG5hdiBjbGFzcz0iZm9vdGVyLWxpbmtzIHBhZ2Ugbm8tcGFkZGluZyI+CgkJCQoJCQkJCQoJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9ob21lIiBjbGFzcz0iYWN0aXZlIj5Ib21lPC9hPgoJCQkJCQoJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9zb2x1dGlvbnMiIGNsYXNzPSIiPlNvbHV0aW9uczwvYT4KCQkJCQkKCQkJCgkJCQoJCQkgIDxhIGhyZWY9IiNwb3J0YWwtY29va2llLWluZm8iIHJlbD0iZnJlc2hkaWFsb2ciIGRhdGEtbGF6eS1sb2FkPSJ0cnVlIiBjbGFzcz0iY29va2llLWxpbmsiCiAgICAgICAgZGF0YS13aWR0aD0iNDUwcHgiIHRpdGxlPSJXaHkgd2UgbG92ZSBDb29raWVzIiBkYXRhLXRlbXBsYXRlLWZvb3Rlcj0iIj4KICAgICAgICBDb29raWUgcG9saWN5CiAgICAgIDwvYT4gPGRpdiBpZD0icG9ydGFsLWNvb2tpZS1pbmZvIiBjbGFzcz0iaGlkZSI+PHRleHRhcmVhPgogICAgICAgIDxwPldlIHVzZSBjb29raWVzIHRvIHRyeSBhbmQgZ2l2ZSB5b3UgYSBiZXR0ZXIgZXhwZXJpZW5jZSBpbiBGcmVzaGRlc2suIDwvcD4KICAgICAgICA8cD5Zb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgd2hhdCBraW5kIG9mIGNvb2tpZXMgd2UgdXNlLCB3aHksIGFuZCBob3cgZnJvbSBvdXIgPGEgaHJlZj0iaHR0cDovL2ZyZXNoZGVzay5jb20vcHJpdmFjeS8iIHRhcmdldD0iX2JsYW5rIj5Qcml2YWN5IFBvbGljeTwvYT4uIElmIHlvdSBoYXRlIGNvb2tpZXMsIG9yIGFyZSBqdXN0IG9uIGEgZGlldCwgeW91IGNhbiBkaXNhYmxlIHRoZW0gYWx0b2dldGhlciB0b28uIEp1c3Qgbm90ZSB0aGF0IHRoZSBGcmVzaGRlc2sgc2VydmljZSBpcyBwcmV0dHkgYmlnIG9uIHNvbWUgY29va2llcyAod2UgbG92ZSB0aGUgY2hvY28tY2hpcCBvbmVzKSwgYW5kIHNvbWUgcG9ydGlvbnMgb2YgRnJlc2hkZXNrIG1heSBub3Qgd29yayBwcm9wZXJseSBpZiB5b3UgZGlzYWJsZSBjb29raWVzLjwvcD4KICAgICAgICA8cD5XZeKAmWxsIGFsc28gYXNzdW1lIHlvdSBhZ3JlZSB0byB0aGUgd2F5IHdlIHVzZSBjb29raWVzIGFuZCBhcmUgb2sgd2l0aCBpdCBhcyBkZXNjcmliZWQgaW4gb3VyIDxhIGhyZWY9Imh0dHA6Ly9mcmVzaGRlc2suY29tL3ByaXZhY3kvIiB0YXJnZXQ9Il9ibGFuayI+UHJpdmFjeSBQb2xpY3k8L2E+LCB1bmxlc3MgeW91IGNob29zZSB0byBkaXNhYmxlIHRoZW0gYWx0b2dldGhlciB0aHJvdWdoIHlvdXIgYnJvd3Nlci48L3A+CiAgICAgIDwvdGV4dGFyZWE+PC9kaXY+IAoJCTwvbmF2PgoJPC9mb290ZXI+CgkgIDxkaXYgY2xhc3M9ImNvcHlyaWdodCI+CiAgICAgICAgPGEgaHJlZj1odHRwczovL2ZyZXNoZGVzay5jb20vP3V0bV9zb3VyY2U9cG9ydGFsJnV0bV9tZWRpdW09cmVmbGluayZ1dG1fY2FtcGFpZ249cG9ydGFsX3JlZmxpbmsgdGFyZ2V0PSJfYmxhbmsiPiBIZWxwIERlc2sgU29mdHdhcmUgPC9hPgogICAgICAgIGJ5IEZyZXNoZGVzawogICAgICA8L2Rpdj4gCgoKCgoJCQk8c2NyaXB0IHNyYz0iaHR0cHM6Ly9ldWMtYXNzZXRzMi5mcmVzaGRlc2suY29tL2Fzc2V0cy9jZG4vcG9ydGFsX2JvdHRvbS1jNzA0MjBjNTlkZjk1MmY3YWI0ZjhjNGU5MzAxY2M4Ni5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4KCQk8c2NyaXB0IHNyYz0iaHR0cHM6Ly9ldWMtYXNzZXRzOC5mcmVzaGRlc2suY29tL2Fzc2V0cy9jZG4vcmVkYWN0b3ItYmUwOTI2NDY4NjdhZmI0M2UzMGQxMDY3YWI3OWM5YTcuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CgkJPHNjcmlwdCBzcmM9Imh0dHBzOi8vZXVjLWFzc2V0czguZnJlc2hkZXNrLmNvbS9hc3NldHMvY2RuL2xhbmcvZW4tZDU4ZDY4OTEyMzY0ZWE2OGEwMWJkZTkzMjc3NGY5ZGQuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CgkJPCEtLSBmb3IgaTE4bi1qcyB0cmFuc2xhdGlvbnMgLS0+CiAgCQk8c2NyaXB0IHNyYz0iaHR0cHM6Ly9ldWMtYXNzZXRzOS5mcmVzaGRlc2suY29tL2Fzc2V0cy9jZG4vaTE4bi9wb3J0YWwvZW4tZTc1N2QzYjNmMDMzNjBlZjZkMWM3Y2Y0MjY0Y2RiYjQuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CgkJPCEtLSBJbmNsdWRpbmcgZGVmYXVsdCBwb3J0YWwgYmFzZWQgc2NyaXB0IGF0IHRoZSBib3R0b20gLS0+CgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLzwhW0NEQVRBWwoJCglqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewoJCQkJCQoJCS8vIFNldHRpbmcgdGhlIGxvY2FsZSBmb3IgbW9tZW50IGpzCgkJbW9tZW50LmxhbmcoJ2VuJyk7CgoJCXZhciB2YWxpZGF0aW9uX21lYXNzYWdlcyA9IHsicmVxdWlyZWQiOiJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIsInJlbW90ZSI6IlBsZWFzZSBmaXggdGhpcyBmaWVsZC4iLCJlbWFpbCI6IlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuIiwidXJsIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgVVJMLiIsImRhdGUiOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlLiIsImRhdGVJU08iOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlICggSVNPICkuIiwibnVtYmVyIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgbnVtYmVyLiIsImRpZ2l0cyI6IlBsZWFzZSBlbnRlciBvbmx5IGRpZ2l0cy4iLCJjcmVkaXRjYXJkIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgY3JlZGl0IGNhcmQgbnVtYmVyLiIsImVxdWFsVG8iOiJQbGVhc2UgZW50ZXIgdGhlIHNhbWUgdmFsdWUgYWdhaW4uIiwidHdvX2RlY2ltYWxfcGxhY2Vfd2FybmluZyI6IlZhbHVlIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiAyIGRlY2ltYWwgZGlnaXRzIiwic2VsZWN0X2F0bGVhc3Rfb25lIjoiU2VsZWN0IGF0IGxlYXN0IG9uZSBvcHRpb24uIiwic2VsZWN0Ml9taW5pbXVtX2xpbWl0IjoiUGxlYXNlIHR5cGUgJXtjaGFyX2NvdW50fSBvciBtb3JlIGxldHRlcnMiLCJzZWxlY3QyX21heGltdW1fbGltaXQiOiJZb3UgY2FuIG9ubHkgc2VsZWN0ICV7bGltaXR9ICV7Y29udGFpbmVyfSIsIm1heGxlbmd0aCI6IlBsZWFzZSBlbnRlciBubyBtb3JlIHRoYW4gezB9IGNoYXJhY3RlcnMuIiwibWlubGVuZ3RoIjoiUGxlYXNlIGVudGVyIGF0IGxlYXN0IHswfSBjaGFyYWN0ZXJzLiIsInJhbmdlbGVuZ3RoIjoiUGxlYXNlIGVudGVyIGEgdmFsdWUgYmV0d2VlbiB7MH0gYW5kIHsxfSBjaGFyYWN0ZXJzIGxvbmcuIiwicmFuZ2UiOiJQbGVhc2UgZW50ZXIgYSB2YWx1ZSBiZXR3ZWVuIHswfSBhbmQgezF9LiIsIm1heCI6IlBsZWFzZSBlbnRlciBhIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB7MH0uIiwibWluIjoiUGxlYXNlIGVudGVyIGEgdmFsdWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHswfS4iLCJzZWxlY3QyX21heGltdW1fbGltaXRfanEiOiJZb3UgY2FuIG9ubHkgc2VsZWN0IHswfSB7MX0iLCJmYWNlYm9va19saW1pdF9leGNlZWQiOiJZb3VyIEZhY2Vib29rIHJlcGx5IHdhcyBvdmVyIDgwMDAgY2hhcmFjdGVycy4gWW91J2xsIGhhdmUgdG8gYmUgbW9yZSBjbGV2ZXIuIiwibWVzc2VuZ2VyX2xpbWl0X2V4Y2VlZGVkIjoiT29wcyEgWW91IGhhdmUgZXhjZWVkZWQgTWVzc2VuZ2VyIFBsYXRmb3JtJ3MgY2hhcmFjdGVyIGxpbWl0LiBQbGVhc2UgbW9kaWZ5IHlvdXIgcmVzcG9uc2UuIiwibm90X2VxdWFsX3RvIjoiVGhpcyBlbGVtZW50IHNob3VsZCBub3QgYmUgZXF1YWwgdG8iLCJlbWFpbF9hZGRyZXNzX2ludmFsaWQiOiJPbmUgb3IgbW9yZSBlbWFpbCBhZGRyZXNzZXMgYXJlIGludmFsaWQuIiwidHdpdHRlcl9saW1pdF9leGNlZWQiOiJPb3BzISBZb3UgaGF2ZSBleGNlZWRlZCBUd2l0dGVyJ3MgY2hhcmFjdGVyIGxpbWl0LiBZb3UnbGwgaGF2ZSB0byBtb2RpZnkgeW91ciByZXNwb25zZS4iLCJwYXNzd29yZF9kb2VzX25vdF9tYXRjaCI6IlRoZSBwYXNzd29yZHMgZG9uJ3QgbWF0Y2guIFBsZWFzZSB0cnkgYWdhaW4uIiwidmFsaWRfaG91cnMiOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBob3Vycy4iLCJyZXBseV9saW1pdF9leGNlZWQiOiJZb3VyIHJlcGx5IHdhcyBvdmVyIDIwMDAgY2hhcmFjdGVycy4gWW91J2xsIGhhdmUgdG8gYmUgbW9yZSBjbGV2ZXIuIiwidXJsX2Zvcm1hdCI6IkludmFsaWQgVVJMIGZvcm1hdCIsInVybF93aXRob3V0X3NsYXNoIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgVVJMIHdpdGhvdXQgJy8nIiwibGlua19iYWNrX3VybCI6IlBsZWFzZSBlbnRlciBhIHZhbGlkIGxpbmtiYWNrIFVSTCIsInJlcXVlc3Rlcl92YWxpZGF0aW9uIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgcmVxdWVzdGVyIGRldGFpbHMgb3IgPGEgaHJlZj1cIiNcIiBpZD1cImFkZF9yZXF1ZXN0ZXJfYnRuX3Byb3h5XCI+YWRkIG5ldyByZXF1ZXN0ZXIuPC9hPiIsImFnZW50X3ZhbGlkYXRpb24iOiJQbGVhc2UgZW50ZXIgdmFsaWQgYWdlbnQgZGV0YWlscyIsImVtYWlsX29yX3Bob25lIjoiUGxlYXNlIGVudGVyIGEgRW1haWwgb3IgUGhvbmUgTnVtYmVyIiwidXBsb2FkX21iX2xpbWl0IjoiVXBsb2FkIGV4Y2VlZHMgdGhlIGF2YWlsYWJsZSAxNU1CIGxpbWl0IiwiaW52YWxpZF9pbWFnZSI6IkludmFsaWQgaW1hZ2UgZm9ybWF0IiwiYXRsZWFzdF9vbmVfcm9sZSI6IkF0IGxlYXN0IG9uZSByb2xlIGlzIHJlcXVpcmVkIGZvciB0aGUgYWdlbnQiLCJpbnZhbGlkX3RpbWUiOiJJbnZhbGlkIHRpbWUuIiwicmVtb3RlX2ZhaWwiOiJSZW1vdGUgdmFsaWRhdGlvbiBmYWlsZWQiLCJ0cmltX3NwYWNlcyI6IkF1dG8gdHJpbSBvZiBsZWFkaW5nICYgdHJhaWxpbmcgd2hpdGVzcGFjZSIsImhleF9jb2xvcl9pbnZhbGlkIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgaGV4IGNvbG9yIHZhbHVlLiIsIm5hbWVfZHVwbGljYXRpb24iOiJUaGUgbmFtZSBhbHJlYWR5IGV4aXN0cy4iLCJpbnZhbGlkX3ZhbHVlIjoiSW52YWxpZCB2YWx1ZSIsImludmFsaWRfcmVnZXgiOiJJbnZhbGlkIFJlZ3VsYXIgRXhwcmVzc2lvbiIsInNhbWVfZm9sZGVyIjoiQ2Fubm90IG1vdmUgdG8gdGhlIHNhbWUgZm9sZGVyLiIsIm1heGxlbmd0aF8yNTUiOiJQbGVhc2UgZW50ZXIgbGVzcyB0aGFuIDI1NSBjaGFyYWN0ZXJzIiwiZGVjaW1hbF9kaWdpdF92YWxpZCI6IlZhbHVlIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiAyIGRlY2ltYWwgZGlnaXRzIiwiYXRsZWFzdF9vbmVfZmllbGQiOiJQbGVhc2UgZmlsbCBhdCBsZWFzdCB7MH0gb2YgdGhlc2UgZmllbGRzLiIsImF0bGVhc3Rfb25lX3BvcnRhbCI6IlNlbGVjdCBhdGxlYXN0IG9uZSBwb3J0YWwuIiwiY3VzdG9tX2hlYWRlciI6IlBsZWFzZSB0eXBlIGN1c3RvbSBoZWFkZXIgaW4gdGhlIGZvcm1hdCAtICBoZWFkZXIgOiB2YWx1ZSIsInNhbWVfcGFzc3dvcmQiOiJTaG91bGQgYmUgc2FtZSBhcyBQYXNzd29yZCIsInNlbGVjdDJfbm9fbWF0Y2giOiJObyBtYXRjaGluZyAle2NvbnRhaW5lcn0gZm91bmQiLCJpbnRlZ3JhdGlvbl9ub19tYXRjaCI6Im5vIG1hdGNoaW5nIGRhdGEuLi4iLCJ0aW1lIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgdGltZSIsInZhbGlkX2NvbnRhY3QiOiJQbGVhc2UgYWRkIGEgdmFsaWQgY29udGFjdCIsImZpZWxkX2ludmFsaWQiOiJUaGlzIGZpZWxkIGlzIGludmFsaWQifQkKCgkJalF1ZXJ5LmV4dGVuZChqUXVlcnkudmFsaWRhdG9yLm1lc3NhZ2VzLCB2YWxpZGF0aW9uX21lYXNzYWdlcyApOwoKCgkJalF1ZXJ5KCIuY2FsbF9kdXJhdGlvbiIpLmVhY2goZnVuY3Rpb24gKCkgewoJCQl2YXIgZm9ybWF0LHRpbWU7CgkJCWlmIChqUXVlcnkodGhpcykuZGF0YSgidGltZSIpID09PSB1bmRlZmluZWQpIHsgcmV0dXJuOyB9CgkJCWlmKGpRdWVyeSh0aGlzKS5oYXNDbGFzcygnZnJlc2hjYWxsZXInKSl7IHJldHVybjsgfQoJCQl0aW1lID0galF1ZXJ5KHRoaXMpLmRhdGEoInRpbWUiKTsKCQkJaWYgKHRpbWU+PTM2MDApIHsKCQkJIGZvcm1hdCA9ICJoaDptbTpzcyI7CgkJCX0gZWxzZSB7CgkJCQlmb3JtYXQgPSAibW06c3MiOwoJCQl9CgkJCWpRdWVyeSh0aGlzKS5odG1sKHRpbWUudG9UaW1lKGZvcm1hdCkpOwoJCX0pOwoJfSk7CgoJLy8gU2hvcnRjdXRzIHZhcmlhYmxlcwoJdmFyIFNob3J0Y3V0cyA9IHsiZ2xvYmFsIjp7ImhlbHAiOiI/Iiwic2F2ZSI6Im1vZCtyZXR1cm4iLCJjYW5jZWwiOiJlc2MiLCJzZWFyY2giOiIvIiwic3RhdHVzX2RpYWxvZyI6Im1vZCthbHQrcmV0dXJuIiwic2F2ZV9jdWN0b21pemF0aW9uIjoibW9kK3NoaWZ0K3MifSwiYXBwX25hdiI6eyJkYXNoYm9hcmQiOiJnIGQiLCJ0aWNrZXRzIjoiZyB0Iiwic29jaWFsIjoiZyBlIiwic29sdXRpb25zIjoiZyBzIiwiZm9ydW1zIjoiZyBmIiwiY3VzdG9tZXJzIjoiZyBjIiwicmVwb3J0cyI6ImcgciIsImFkbWluIjoiZyBhIiwidGlja2V0X25ldyI6ImcgbiIsImNvbXBvc2VfZW1haWwiOiJnIG0ifSwicGFnaW5hdGlvbiI6eyJwcmV2aW91cyI6ImFsdCtsZWZ0IiwibmV4dCI6ImFsdCtyaWdodCIsImFsdF9wcmV2aW91cyI6ImoiLCJhbHRfbmV4dCI6ImsifSwidGlja2V0X2xpc3QiOnsidGlja2V0X3Nob3ciOiJyZXR1cm4iLCJzZWxlY3QiOiJ4Iiwic2VsZWN0X2FsbCI6InNoaWZ0K3giLCJzZWFyY2hfdmlldyI6InYiLCJzaG93X2Rlc2NyaXB0aW9uIjoic3BhY2UiLCJ1bndhdGNoIjoidyIsImRlbGV0ZSI6IiMiLCJwaWNrdXAiOiJAIiwic3BhbSI6IiEiLCJjbG9zZSI6In4iLCJzaWxlbnRfY2xvc2UiOiJhbHQrc2hpZnQrYCIsInVuZG8iOiJ6IiwicmVwbHkiOiJyIiwiZm9yd2FyZCI6ImYiLCJhZGRfbm90ZSI6Im4iLCJzY2VuYXJpbyI6InMifSwidGlja2V0X2RldGFpbCI6eyJ0b2dnbGVfd2F0Y2hlciI6InciLCJyZXBseSI6InIiLCJmb3J3YXJkIjoiZiIsImFkZF9ub3RlIjoibiIsImNsb3NlIjoifiIsInNpbGVudF9jbG9zZSI6ImFsdCtzaGlmdCtgIiwiYWRkX3RpbWUiOiJtIiwic3BhbSI6IiEiLCJkZWxldGUiOiIjIiwic2hvd19hY3Rpdml0aWVzX3RvZ2dsZSI6In0iLCJwcm9wZXJ0aWVzIjoicCIsImV4cGFuZCI6Il0iLCJ1bmRvIjoieiIsInNlbGVjdF93YXRjaGVyIjoic2hpZnQrdyIsImdvX3RvX25leHQiOlsiaiIsImRvd24iXSwiZ29fdG9fcHJldmlvdXMiOlsiayIsInVwIl0sInNjZW5hcmlvIjoicyIsInBpY2t1cCI6IkAiLCJjb2xsYWJvcmF0aW9uIjoiZCJ9LCJzb2NpYWxfc3RyZWFtIjp7InNlYXJjaCI6InMiLCJnb190b19uZXh0IjpbImoiLCJkb3duIl0sImdvX3RvX3ByZXZpb3VzIjpbImsiLCJ1cCJdLCJvcGVuX3N0cmVhbSI6WyJzcGFjZSIsInJldHVybiJdLCJjbG9zZSI6ImVzYyIsInJlcGx5IjoiciIsInJldHdlZXQiOiJzaGlmdCtyIn0sInBvcnRhbF9jdXN0b21pemF0aW9ucyI6eyJwcmV2aWV3IjoibW9kK3NoaWZ0K3AifSwiZGlzY3Vzc2lvbnMiOnsidG9nZ2xlX2ZvbGxvd2luZyI6InciLCJhZGRfZm9sbG93ZXIiOiJzaGlmdCt3IiwicmVwbHlfdG9waWMiOiJyIn19OwoJCgkvLyBEYXRlIGZvcm1hdHMKCXZhciBEQVRFX0ZPUk1BVFMgPSB7Im5vbl91cyI6eyJtb21lbnRfZGF0ZV93aXRoX3dlZWsiOiJkZGQsIEQgTU1NLCBZWVlZIiwiZGF0ZXBpY2tlciI6ImQgTSwgeXkiLCJkYXRlcGlja2VyX2VzY2FwZWQiOiJkIE0geXkiLCJkYXRlcGlja2VyX2Z1bGxfZGF0ZSI6IkQsIGQgTSwgeXkiLCJtZWRpdW1EYXRlIjoiZCBNTU0sIHl5eXkifSwidXMiOnsibW9tZW50X2RhdGVfd2l0aF93ZWVrIjoiZGRkLCBNTU0gRCwgWVlZWSIsImRhdGVwaWNrZXIiOiJNIGQsIHl5IiwiZGF0ZXBpY2tlcl9lc2NhcGVkIjoiTSBkIHl5IiwiZGF0ZXBpY2tlcl9mdWxsX2RhdGUiOiJELCBNIGQsIHl5IiwibWVkaXVtRGF0ZSI6Ik1NTSBkLCB5eXl5In19OwoKCXZhciBsYW5nID0geyAKCQlsb2FkaW5nVGV4dDogIlBsZWFzZSBXYWl0Li4uIiwKCQl2aWV3QWxsVGlja2V0czogIlZpZXcgYWxsIHRpY2tldHMiCgl9OwoKCi8vXV0+Cjwvc2NyaXB0PiAKCgkJCgoJCQoJCQoJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICAJCUkxOG4uZGVmYXVsdExvY2FsZSA9ICJlbiI7CiAgICAgCQlJMThuLmxvY2FsZSA9ICJlbiI7CgkJPC9zY3JpcHQ+CgkJCiAgICAKCTwvYm9keT4KPC9odG1sPg== - recorded_at: Wed, 30 Jun 2021 09:10:36 GMT + encoding: UTF-8 + string: '{"code":"invalid_credentials","message":"You have to be logged in to + perform this action."}' + recorded_at: Fri, 02 Jul 2021 17:06:27 GMT - request: method: get uri: https://.freshdesk.com/api/v2/agents/me @@ -161,7 +90,7 @@ http_interactions: message: OK headers: Date: - - Wed, 30 Jun 2021 09:10:38 GMT + - Fri, 02 Jul 2021 17:06:28 GMT Content-Type: - application/json; charset=utf-8 Transfer-Encoding: @@ -170,26 +99,26 @@ http_interactions: - keep-alive Status: - 200 OK + Pragma: + - no-cache + X-Request-Id: + - 89c1b015-7196-4436-85c6-e0c69124366d + X-Freshdesk-Api-Version: + - latest=v2; requested=v2 X-Rack-Cache: - miss Cache-Control: - must-revalidate, no-cache, no-store, private, max-age=0 - Pragma: - - no-cache X-Xss-Protection: - 1; mode=block - X-Request-Id: - - db205223-ccc7-4ef5-928a-4d6695ff57a7 X-Ua-Compatible: - IE=Edge,chrome=1 X-Content-Type-Options: - nosniff - X-Freshdesk-Api-Version: - - latest=v2; requested=v2 Expires: - Wed, 13 Oct 2010 00:00:00 UTC Set-Cookie: - - _helpkit_session=BAh7B0kiD3Nlc3Npb25faWQGOgZFVEkiJTBjNjc3Mzk5ZmMzMTc1YmZlMTQ4M2RlMTBhYzcwZTE0BjsAVEkiEF9jc3JmX3Rva2VuBjsARkkiMTB1dGFaZWRFUjh6R0ZnWmgzVGp1YkQwQm9kTmxHRDhxZFNXVVpvbjhlNmc9BjsARg%3D%3D--684a2d494a38c2e19a47e4a84c12c3ddfb5d1402; + - _helpkit_session=BAh7B0kiD3Nlc3Npb25faWQGOgZFVEkiJTAyYTU2MTY3NTIwMzNkZWI4YzRhNjc3NDVhNTIwODk1BjsAVEkiEF9jc3JmX3Rva2VuBjsARkkiMXZiMktSb2tVZUFiZFNMd01tdDh4QmZrYytrQyttbUZta2Q4MmRxUis5aWs9BjsARg%3D%3D--f0265d3ae3abd09d70b9a795e42cd4904caa4e47; path=/; HttpOnly; secure - _x_w=5_2; path=/; HttpOnly; secure X-Fw-Ratelimiting-Managed: @@ -197,18 +126,18 @@ http_interactions: X-Ratelimit-Total: - '100' X-Ratelimit-Remaining: - - '95' + - '92' X-Ratelimit-Used-Currentrequest: - '1' X-Envoy-Upstream-Service-Time: - - '231' + - '63' X-Trace-Id: - - 00-cdb9b20b349c699d5f3bb729639a12f7-1e73f3b9b0e51798-00 + - 00-d3cdc65ae441713e724c94001ed3bbe9-9e4b391525ebb2d3-00 Server: - fwe body: encoding: ASCII-8BIT string: '{"available":false,"occasional":false,"id":80014400475,"ticket_scope":1,"signature":null,"group_ids":[],"role_ids":[80000198826],"skill_ids":[],"available_since":null,"contact":{"active":true,"email":"info@.org","job_title":null,"language":"en","mobile":null,"name":"Thorsten Eckel","phone":null,"time_zone":"Eastern Time (US & Canada)","created_at":"2021-04-09T13:23:58Z","updated_at":"2021-04-09T13:31:00Z","last_login_at":"2021-06-04T06:55:46Z"},"created_at":"2021-04-09T13:23:58Z","updated_at":"2021-06-08T09:56:50Z","type":"support_agent"}' - recorded_at: Wed, 30 Jun 2021 09:10:38 GMT + recorded_at: Fri, 02 Jul 2021 17:06:28 GMT recorded_with: VCR 6.0.0 diff --git a/test/data/vcr_cassettes/system/import/freshdesk/import_freshdesk_fields_validation_valid_credentials.yml b/test/data/vcr_cassettes/system/import/freshdesk/import_freshdesk_fields_validation_valid_credentials.yml index bc1d9a7d4..56584bbd1 100644 --- a/test/data/vcr_cassettes/system/import/freshdesk/import_freshdesk_fields_validation_valid_credentials.yml +++ b/test/data/vcr_cassettes/system/import/freshdesk/import_freshdesk_fields_validation_valid_credentials.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: get - uri: https://.freshdesk.com/ + uri: https://.freshdesk.com/api/v2/contacts body: encoding: US-ASCII string: '' @@ -17,102 +17,29 @@ http_interactions: - ".freshdesk.com" response: status: - code: 302 - message: Found + code: 401 + message: Unauthorized headers: Date: - - Wed, 30 Jun 2021 09:10:32 GMT + - Fri, 02 Jul 2021 17:06:23 GMT Content-Type: - - text/html; charset=utf-8 + - application/json; charset=utf-8 Transfer-Encoding: - chunked Connection: - keep-alive Status: - - 302 Found + - 401 Unauthorized + X-Request-Id: + - 262fe662-8486-4316-b974-df293f704f50 + X-Freshdesk-Api-Version: + - latest=v2; requested=v2 X-Rack-Cache: - miss Cache-Control: - - no-cache, no-store, max-age=0, must-revalidate - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - Pragma: - no-cache X-Xss-Protection: - 1; mode=block - X-Request-Id: - - 659c6c95-3d7d-41e9-9486-14ed07e9251f - Location: - - https://.freshdesk.com/support/home - X-Ua-Compatible: - - IE=Edge,chrome=1 - X-Frame-Options: - - SAMEORIGIN - X-Content-Type-Options: - - nosniff - Expires: - - Fri, 01 Jan 1990 00:00:00 GMT - Set-Cookie: - - _x_w=5_2; path=/; HttpOnly; secure - X-Envoy-Upstream-Service-Time: - - '29' - X-Trace-Id: - - 00-3bc0a46feb6e7307944e5448c13fe6b4-1c3ef1d4d62f860b-00 - Server: - - fwe - body: - encoding: UTF-8 - string: You are being redirected. - recorded_at: Wed, 30 Jun 2021 09:10:32 GMT -- request: - method: get - uri: https://.freshdesk.com/support/home - body: - encoding: US-ASCII - string: '' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - User-Agent: - - Zammad User Agent - Host: - - ".freshdesk.com" - response: - status: - code: 200 - message: OK - headers: - Date: - - Wed, 30 Jun 2021 09:10:32 GMT - Content-Type: - - text/html; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 200 OK - X-Ratelimit-Limit: - - '300' - X-Ratelimit-Reset: - - '300621091128' - X-Ratelimit-Remaining: - - '198' - - '298' - X-Request-Id: - - bd7f835d-7e0c-4e0c-a478-15187acea835 - Etag: - - W/"634d4f1b6de28ba7fc5e4535e774d734" - X-Rack-Cache: - - miss - Cache-Control: - - max-age=0, private, must-revalidate - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - X-Xss-Protection: - - 1; mode=block X-Ua-Compatible: - IE=Edge,chrome=1 X-Content-Type-Options: @@ -122,156 +49,158 @@ http_interactions: X-Fw-Ratelimiting-Managed: - 'true' X-Ratelimit-Total: - - '200' - X-Ratelimit-Used-Currentrequest: - - '1' - X-Envoy-Upstream-Service-Time: - - '49' - X-Trace-Id: - - 00-d25c7714cfcf15c18818451b0b6202a6-8424e6abf074cb96-00 - Server: - - fwe - body: - encoding: ASCII-8BIT - string: !binary |- - PCFET0NUWVBFIGh0bWw+CgogICAgICAgIDwhLS1baWYgbHQgSUUgN10+PGh0bWwgY2xhc3M9Im5vLWpzIGllNiIgbGFuZz0iZW4iIGRpcj0ibHRyIiBkYXRhLWRhdGUtZm9ybWF0PSJub25fdXMiPjwhW2VuZGlmXS0tPgogICAgICAgIDwhLS1baWYgSUUgN10+PGh0bWwgY2xhc3M9Im5vLWpzIGllNyIgbGFuZz0iZW4iIGRpcj0ibHRyIiBkYXRhLWRhdGUtZm9ybWF0PSJub25fdXMiPjwhW2VuZGlmXS0tPgogICAgICAgIDwhLS1baWYgSUUgOF0+PGh0bWwgY2xhc3M9Im5vLWpzIGllOCIgbGFuZz0iZW4iIGRpcj0ibHRyIiBkYXRhLWRhdGUtZm9ybWF0PSJub25fdXMiPjwhW2VuZGlmXS0tPgogICAgICAgIDwhLS1baWYgSUUgOV0+PGh0bWwgY2xhc3M9Im5vLWpzIGllOSIgbGFuZz0iZW4iIGRpcj0ibHRyIiBkYXRhLWRhdGUtZm9ybWF0PSJub25fdXMiPjwhW2VuZGlmXS0tPgogICAgICAgIDwhLS1baWYgSUUgMTBdPjxodG1sIGNsYXNzPSJuby1qcyBpZTEwIiBsYW5nPSJlbiIgZGlyPSJsdHIiIGRhdGEtZGF0ZS1mb3JtYXQ9Im5vbl91cyI+PCFbZW5kaWZdLS0+CiAgICAgICAgPCEtLVtpZiAoZ3QgSUUgMTApfCEoSUUpXT48IS0tPjxodG1sIGNsYXNzPSJuby1qcyAiIGxhbmc9ImVuIiBkaXI9Imx0ciIgZGF0YS1kYXRlLWZvcm1hdD0ibm9uX3VzIj48IS0tPCFbZW5kaWZdLS0+Cgk8aGVhZD4KCQkKCQk8IS0tIFRpdGxlIGZvciB0aGUgcGFnZSAtLT4KPHRpdGxlPiBTdXBwb3J0IDogWmFtbWFkIEdtYkggPC90aXRsZT4KCjwhLS0gTWV0YSBpbmZvcm1hdGlvbiAtLT4KCiAgICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgogICAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UsY2hyb21lPTEiIC8+CiAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSAiIiAvPgogICAgICA8bWV0YSBuYW1lPSJhdXRob3IiIGNvbnRlbnQ9ICIiIC8+CiAgICAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IlN1cHBvcnQiIC8+ICA8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwczovLzxJTVBPUlRfRlJFU0hERVNLX0VORFBPSU5UX1NVQkRPTUFJTj4uZnJlc2hkZXNrLmNvbS9zdXBwb3J0L3NvbHV0aW9ucyIgLz4gIDxtZXRhIHByb3BlcnR5PSJvZzppbWFnZSIgY29udGVudD0iL2Fzc2V0cy9taXNjL2xvZ28ucG5nPzcwMjAxNyIgLz4gIDxtZXRhIHByb3BlcnR5PSJvZzpzaXRlX25hbWUiIGNvbnRlbnQ9IlphbW1hZCBHbWJIIiAvPiAgPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9ImFydGljbGUiIC8+ICA8bWV0YSBuYW1lPSJ0d2l0dGVyOnRpdGxlIiBjb250ZW50PSJTdXBwb3J0IiAvPiAgPG1ldGEgbmFtZT0idHdpdHRlcjp1cmwiIGNvbnRlbnQ9Imh0dHBzOi8vPElNUE9SVF9GUkVTSERFU0tfRU5EUE9JTlRfU1VCRE9NQUlOPi5mcmVzaGRlc2suY29tL3N1cHBvcnQvc29sdXRpb25zIiAvPiAgPG1ldGEgbmFtZT0idHdpdHRlcjppbWFnZSIgY29udGVudD0iL2Fzc2V0cy9taXNjL2xvZ28ucG5nPzcwMjAxNyIgLz4gIDxtZXRhIG5hbWU9InR3aXR0ZXI6Y2FyZCIgY29udGVudD0ic3VtbWFyeSIgLz4gIDxsaW5rIHJlbD0iY2Fub25pY2FsIiBocmVmPSJodHRwczovLzxJTVBPUlRfRlJFU0hERVNLX0VORFBPSU5UX1NVQkRPTUFJTj4uZnJlc2hkZXNrLmNvbS9zdXBwb3J0L3NvbHV0aW9ucyIgLz4gCgo8IS0tIFJlc3BvbnNpdmUgc2V0dGluZyAtLT4KPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBocmVmPSIvYXNzZXRzL3RvdWNoL3RvdWNoLWljb24taXBob25lLnBuZyIgLz4KICAgICAgICA8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSI3Mng3MiIgaHJlZj0iL2Fzc2V0cy90b3VjaC90b3VjaC1pY29uLWlwYWQucG5nIiAvPgogICAgICAgIDxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgc2l6ZXM9IjExNHgxMTQiIGhyZWY9Ii9hc3NldHMvdG91Y2gvdG91Y2gtaWNvbi1pcGhvbmUtcmV0aW5hLnBuZyIgLz4KICAgICAgICA8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSIxNDR4MTQ0IiBocmVmPSIvYXNzZXRzL3RvdWNoL3RvdWNoLWljb24taXBhZC1yZXRpbmEucG5nIiAvPgogICAgICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIHVzZXItc2NhbGFibGU9bm8sIGluaXRpYWwtc2NhbGU9MS4wIiAvPiAKCQkKCQk8IS0tIEFkZGluZyBtZXRhIHRhZyBmb3IgQ1NSRiB0b2tlbiAtLT4KCQk8bWV0YSBjb250ZW50PSJhdXRoZW50aWNpdHlfdG9rZW4iIG5hbWU9ImNzcmYtcGFyYW0iIC8+CjxtZXRhIGNvbnRlbnQ9InZzdUNNUHRabCtQL2pFaGJodGJJcVZXT2dROGJuU0RSV2pkYWgyRXNkSUU9IiBuYW1lPSJjc3JmLXRva2VuIiAvPgoJCTwhLS0gRW5kIG1ldGEgdGFnIGZvciBDU1JGIHRva2VuIC0tPgoJCQoJCTwhLS0gRmF2IGljb24gZm9yIHBvcnRhbCAtLT4KCQk8bGluayByZWw9J3Nob3J0Y3V0IGljb24nIGhyZWY9Jy9hc3NldHMvbWlzYy9mYXZpY29uLmljbz83MDIwMTcnIC8+CgoJCTwhLS0gQmFzZSBzdHlsZXNoZWV0IC0tPgogCgkJPGxpbmsgaHJlZj0iaHR0cHM6Ly9ldWMtYXNzZXRzNS5mcmVzaGRlc2suY29tL2Fzc2V0cy9jZG4vcG9ydGFsX3ByaW50LWEzODlmMWVmM2U4NzI2MWU3MjY0ZTNlNzA0MTZkNzA0LmNzcyIgbWVkaWE9InByaW50IiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiAvPgoJICAJCTxsaW5rIGhyZWY9Imh0dHBzOi8vZXVjLWFzc2V0czIuZnJlc2hkZXNrLmNvbS9hc3NldHMvY2RuL2ZhbGNvbl9wb3J0YWxfdXRpbHMtMTE2MzYyOTQ2OTRkMGVmMjI4N2YwYTAxNzA4NTJjNDYuY3NzIiBtZWRpYT0ic2NyZWVuIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiAvPgkKCgkJCgkJPCEtLSBUaGVtZSBzdHlsZXNoZWV0IC0tPgoKCQk8bGluayBocmVmPSIvc3VwcG9ydC90aGVtZS5jc3M/dj0yJmFtcDtkPTE2MjA2MzIzMjQiIG1lZGlhPSJzY3JlZW4iIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgoKCQk8IS0tIEdvb2dsZSBmb250IHVybCBpZiBwcmVzZW50IC0tPgoJCTxsaW5rIGhyZWY9J2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Tb3VyY2UrU2FucytQcm86cmVndWxhcixpdGFsaWMsNjAwLDcwMCw3MDBpdGFsaWN8UG9wcGluczpyZWd1bGFyLDYwMCw3MDAnIHJlbD0nc3R5bGVzaGVldCcgdHlwZT0ndGV4dC9jc3MnPgoKCQk8IS0tIEluY2x1ZGluZyBkZWZhdWx0IHBvcnRhbCBiYXNlZCBzY3JpcHQgZnJhbWV3b3JrIGF0IHRoZSB0b3AgLS0+CgkJCTxzY3JpcHQgc3JjPSJodHRwczovL2V1Yy1hc3NldHMxMC5mcmVzaGRlc2suY29tL2Fzc2V0cy9jZG4vcG9ydGFsX2hlYWQtOTBhM2EzYjUxYzBjZDdhMDlmNzlkYzU3MWE4NmQxYTcuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CgkJPCEtLSBJbmNsdWRpbmcgc3ludGV4aGlnaGxpZ2h0ZXIgZm9yIHBvcnRhbCAtLT4KCQk8c2NyaXB0IHNyYz0iaHR0cHM6Ly9ldWMtYXNzZXRzNi5mcmVzaGRlc2suY29tL2Fzc2V0cy9jZG4vcHJpc20tODBlNGQ5NWFhY2JjOWExMzM0ZDA2ZjIyYTIyNGU4YjEuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CgoJCQoKCQk8IS0tIEFjY2VzcyBwb3J0YWwgc2V0dGluZ3MgaW5mb3JtYXRpb24gdmlhIGphdmFzY3JpcHQgLS0+CgkJIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4gICAgIHZhciBwb3J0YWwgPSB7Imxhbmd1YWdlIjoiZW4iLCJuYW1lIjoiWmFtbWFkIEdtYkgiLCJjb250YWN0X2luZm8iOiIiLCJjdXJyZW50X3BhZ2VfbmFtZSI6InBvcnRhbF9ob21lIiwiY3VycmVudF90YWIiOiJob21lIiwidmF1bHRfc2VydmljZSI6eyJ1cmwiOiJodHRwczovL3ZhdWx0LXNlcnZpY2UtZXUuZnJlc2h3b3Jrcy5jb20vZGF0YSIsIm1heF90cnkiOjIsInByb2R1Y3RfbmFtZSI6ImZkIn0sImN1cnJlbnRfYWNjb3VudF9pZCI6MTg5MDU2MCwicHJlZmVyZW5jZXMiOnsiYmdfY29sb3IiOiIjZjNmNWY3IiwiaGVhZGVyX2NvbG9yIjoiI2ZmZmZmZiIsImhlbHBfY2VudGVyX2NvbG9yIjoiI2YzZjVmNyIsImZvb3Rlcl9jb2xvciI6IiMxODMyNDciLCJ0YWJfY29sb3IiOiIjZmZmZmZmIiwidGFiX2hvdmVyX2NvbG9yIjoiIzAyYjg3NSIsImJ0bl9iYWNrZ3JvdW5kIjoiI2YzZjVmNyIsImJ0bl9wcmltYXJ5X2JhY2tncm91bmQiOiIjMDJiODc1IiwiYmFzZUZvbnQiOiJTb3VyY2UgU2FucyBQcm8iLCJ0ZXh0Q29sb3IiOiIjMTgzMjQ3IiwiaGVhZGluZ3NGb250IjoiUG9wcGlucyIsImhlYWRpbmdzQ29sb3IiOiIjMTgzMjQ3IiwibGlua0NvbG9yIjoiIzE4MzI0NyIsImxpbmtDb2xvckhvdmVyIjoiIzI3NTNkNyIsImlucHV0Rm9jdXNSaW5nQ29sb3IiOiIjMDJCODc1Iiwibm9uUmVzcG9uc2l2ZSI6ZmFsc2UsInBlcnNvbmFsaXplZF9hcnRpY2xlcyI6dHJ1ZX0sImltYWdlX3BsYWNlaG9sZGVycyI6eyJzcGFjZXIiOiJodHRwczovL2V1Yy1hc3NldHMxMC5mcmVzaGRlc2suY29tL2Fzc2V0cy9taXNjL3NwYWNlci5naWYiLCJwcm9maWxlX3RodW1iIjoiaHR0cHM6Ly9ldWMtYXNzZXRzMy5mcmVzaGRlc2suY29tL2Fzc2V0cy9taXNjL3Byb2ZpbGVfYmxhbmtfdGh1bWItZTFhMzQwMzNiMzA3M2NiODBmNWJlY2MwYjY0NGJmY2EuanBnIiwicHJvZmlsZV9tZWRpdW0iOiJodHRwczovL2V1Yy1hc3NldHM0LmZyZXNoZGVzay5jb20vYXNzZXRzL21pc2MvcHJvZmlsZV9ibGFua19tZWRpdW0tNGFlMjI4MGE0NjBlYWUzYzg3MGFjYjdhNzU0NWI3ZTUuanBnIn0sImZhbGNvbl9wb3J0YWxfdGhlbWUiOnRydWV9OyAgICAgdmFyIGF0dGFjaG1lbnRfc2l6ZSA9IDIwOyAgPC9zY3JpcHQ+IAoKCgkJCgk8L2hlYWQ+Cgk8Ym9keT4KICAgICAgICAgICAgCQoJCQoJCQoJCQoJPGhlYWRlciBjbGFzcz0iYmFubmVyIj4KCQk8ZGl2IGNsYXNzPSJiYW5uZXItd3JhcHBlciBwYWdlIj4KCQkJPGRpdiBjbGFzcz0iYmFubmVyLXRpdGxlIj4KCQkJCTxhIGhyZWY9Ii9zdXBwb3J0L2hvbWUiY2xhc3M9J3BvcnRhbC1sb2dvJz48c3BhbiBjbGFzcz0icG9ydGFsLWltZyI+PGk+PC9pPgogICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPScvYXNzZXRzL21pc2MvbG9nby5wbmcnIGFsdD0iTG9nbyIKICAgICAgICAgICAgICAgICAgICAgICAgb25lcnJvcj0iZGVmYXVsdF9pbWFnZV9lcnJvcih0aGlzKSIgZGF0YS10eXBlPSJsb2dvIiAvPgogICAgICAgICAgICAgICAgIDwvc3Bhbj48L2E+CgkJCQk8aDEgY2xhc3M9ImVsbGlwc2lzIGhlYWRpbmciPlphbW1hZCBHbWJIPC9oMT4KCQkJPC9kaXY+CgkJCTxuYXYgY2xhc3M9ImJhbm5lci1uYXYiPgoJCQkJIDxkaXYgY2xhc3M9IndlbGNvbWUiPldlbGNvbWUgPGI+PC9iPiA8L2Rpdj4gIDxiPjxhIGhyZWY9Ii9zdXBwb3J0L2xvZ2luIj48Yj5Mb2dpbjwvYj48L2E+PC9iPiAmbmJzcDs8Yj48YSBocmVmPSIvc3VwcG9ydC9zaWdudXAiPjxiPlNpZ24gdXA8L2I+PC9hPjwvYj4KCQkJPC9uYXY+CgkJPC9kaXY+Cgk8L2hlYWRlcj4KCTxuYXYgY2xhc3M9InBhZ2UtdGFicyI+CgkJPGRpdiBjbGFzcz0icGFnZSBuby1wYWRkaW5nIG5vLWhlYWRlci10YWJzIj4KCQkJCgkJCQk8YSBkYXRhLXRvZ2dsZS1kb209IiNoZWFkZXItdGFicyIgaHJlZj0iIyIgZGF0YS1hbmltYXRlZD0idHJ1ZSIgY2xhc3M9Im1vYmlsZS1pY29uLW5hdi1tZW51IHNob3ctaW4tbW9iaWxlIj48L2E+CgkJCQk8ZGl2IGNsYXNzPSJuYXYtbGluayIgaWQ9ImhlYWRlci10YWJzIj4KCQkJCQkKCQkJCQkJCgkJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9ob21lIiBjbGFzcz0iYWN0aXZlIj5Ib21lPC9hPgoJCQkJCQkKCQkJCQkKCQkJCQkJCgkJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9zb2x1dGlvbnMiIGNsYXNzPSIiPlNvbHV0aW9uczwvYT4KCQkJCQkJCgkJCQkJCgkJCQk8L2Rpdj4KCQkJCgkJPC9kaXY+Cgk8L25hdj4KCjwhLS0gU2VhcmNoIGFuZCBwYWdlIGxpbmtzIGZvciB0aGUgcGFnZSAtLT4KCgoKPGRpdiBjbGFzcz0icGFnZSI+CgkKCQoJPCEtLSBTZWFyY2ggYW5kIHBhZ2UgbGlua3MgZm9yIHRoZSBwYWdlIC0tPgoJCgkJPHNlY3Rpb24gY2xhc3M9ImhlbHAtY2VudGVyIHJvdW5kZWQtNiI+CQoJCQk8ZGl2IGNsYXNzPSJoYy1zZWFyY2giPgoJCQkJPGRpdiBjbGFzcz0iaGMtc2VhcmNoLWMiPgoJCQkJCTxoMiBjbGFzcz0iaGVhZGluZyBoaWRlLWluLW1vYmlsZSI+SG93IGNhbiB3ZSBoZWxwIHlvdSB0b2RheT88L2gyPgoJCQkJCTxmb3JtIGNsYXNzPSJoYy1zZWFyY2gtZm9ybSBwcmludC0tcmVtb3ZlIiBhdXRvY29tcGxldGU9Im9mZiIgYWN0aW9uPSIvc3VwcG9ydC9zZWFyY2giIGlkPSJoYy1zZWFyY2gtZm9ybSIgZGF0YS1jc3JmLWlnbm9yZT0idHJ1ZSI+Cgk8ZGl2IGNsYXNzPSJoYy1zZWFyY2gtaW5wdXQiPgoJPGxhYmVsIGZvcj0ic3VwcG9ydC1zZWFyY2gtaW5wdXQiIGNsYXNzPSJoaWRlIj5FbnRlciB5b3VyIHNlYXJjaCB0ZXJtIGhlcmUuLi48L2xhYmVsPgoJCTxpbnB1dCBwbGFjZWhvbGRlcj0iRW50ZXIgeW91ciBzZWFyY2ggdGVybSBoZXJlLi4uIiB0eXBlPSJ0ZXh0IiAKCQkJbmFtZT0idGVybSIgY2xhc3M9InNwZWNpYWwiIHZhbHVlPSIiIAogICAgICAgICAgICByZWw9InBhZ2Utc2VhcmNoIiBkYXRhLW1heC1tYXRjaGVzPSIxMCIgaWQ9InN1cHBvcnQtc2VhcmNoLWlucHV0Ij4KCTwvZGl2PgoJPGRpdiBjbGFzcz0iaGMtc2VhcmNoLWJ1dHRvbiI+CgkJPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiB0eXBlPSJzdWJtaXQiIGF1dG9jb21wbGV0ZT0ib2ZmIj4KCQkJPGkgY2xhc3M9Im1vYmlsZS1pY29uLXNlYXJjaCBoaWRlLXRhYmxldCI+PC9pPgoJCQk8c3BhbiBjbGFzcz0iaGlkZS1pbi1tb2JpbGUiPgoJCQkJU2VhcmNoCgkJCTwvc3Bhbj4KCQk8L2J1dHRvbj4JCgk8L2Rpdj4KPC9mb3JtPgoJCQkJPC9kaXY+CgkJCTwvZGl2PgoJCQk8ZGl2IGNsYXNzPSJoYy1uYXYgIj4JCQkJCgkJCQkgPG5hdj4gICA8ZGl2PgogICAgICAgICAgICAgIDxhIGhyZWY9Ii9zdXBwb3J0L3RpY2tldHMvbmV3IiBjbGFzcz0ibW9iaWxlLWljb24tbmF2LW5ld3RpY2tldCBuZXctdGlja2V0IGVsbGlwc2lzIiB0aXRsZT0iTmV3IHN1cHBvcnQgdGlja2V0Ij4KICAgICAgICAgICAgICAgIDxzcGFuPiBOZXcgc3VwcG9ydCB0aWNrZXQgPC9zcGFuPgogICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC9kaXY+ICAgPGRpdj4KICAgICAgICAgICAgICA8YSBocmVmPSIvc3VwcG9ydC90aWNrZXRzIiBjbGFzcz0ibW9iaWxlLWljb24tbmF2LXN0YXR1cyBjaGVjay1zdGF0dXMgZWxsaXBzaXMiIHRpdGxlPSJDaGVjayB0aWNrZXQgc3RhdHVzIj4KICAgICAgICAgICAgICAgIDxzcGFuPkNoZWNrIHRpY2tldCBzdGF0dXM8L3NwYW4+CiAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L2Rpdj4gIDwvbmF2PgoJCQk8L2Rpdj4KCQk8L3NlY3Rpb24+CgkKCgk8IS0tIE5vdGlmaWNhdGlvbiBNZXNzYWdlcyAtLT4KCSA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC13aXRoLWNsb3NlIG5vdGljZSIgaWQ9Im5vdGljZWFqYXgiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij48L2Rpdj4gCgoJCgk8ZGl2IGNsYXNzPSJjLXdyYXBwZXIiPgkJCgkJCjxzZWN0aW9uIGNsYXNzPSJtYWluIGNvbnRlbnQgcm91bmRlZC02IG1pbi1oZWlnaHQtb24tZGVza3RvcCBmYy1wb3J0YWwtc29sdXRpb24taG9tZSIgaWQ9InNvbHV0aW9ucy1pbmRleC1ob21lIj4KCTxoMiBjbGFzcz0iaGVhZGluZyI+S25vd2xlZGdlIGJhc2U8L2gyPgoJCgkJCgkJPGRpdiBjbGFzcz0iY3MtcyI+CgkJCTxoMyBjbGFzcz0iaGVhZGluZyI+PGEgaHJlZj0iL3N1cHBvcnQvc29sdXRpb25zLzgwMDAwMjgyNjY0Ij5HZW5lcmFsPC9hPjwvaDM+CgkJCTxkaXYgY2xhc3M9ImNzLWctYyI+CgkJCQkKCQkJCQk8c2VjdGlvbiBjbGFzcz0iY3MtZyBhcnRpY2xlLWxpc3QiPgoJCQkJCQk8ZGl2IGNsYXNzPSJsaXN0LWxlYWQiPgoJCQkJCQkJPGEgaHJlZj0iL3N1cHBvcnQvc29sdXRpb25zL2ZvbGRlcnMvODAwMDA0MTc1OTAiIHRpdGxlPSJGQVEiPiBGQVEgPHNwYW4gY2xhc3M9J2l0ZW0tY291bnQnPjA8L3NwYW4+PC9hPgoJCQkJCQk8L2Rpdj4KCQkJCQkJCgkJCQkJPC9zZWN0aW9uPgoJCQkJCgkJCQkJPHNlY3Rpb24gY2xhc3M9ImNzLWcgYXJ0aWNsZS1saXN0Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGlzdC1sZWFkIj4KCQkJCQkJCTxhIGhyZWY9Ii9zdXBwb3J0L3NvbHV0aW9ucy9mb2xkZXJzLzgwMDAwNDE3NTkxIiB0aXRsZT0iR2V0dGluZyBTdGFydGVkIj4gR2V0dGluZyBTdGFydGVkIDxzcGFuIGNsYXNzPSdpdGVtLWNvdW50Jz4wPC9zcGFuPjwvYT4KCQkJCQkJPC9kaXY+CgkJCQkJCQoJCQkJCTwvc2VjdGlvbj4KCQkJCQoJCQk8L2Rpdj4KCQk8L2Rpdj4JCgkJCgkKCQkKCQk8ZGl2IGNsYXNzPSJjcy1zIj4KCQkJPGgzIGNsYXNzPSJoZWFkaW5nIj48YSBocmVmPSIvc3VwcG9ydC9zb2x1dGlvbnMvODAwMDAyODI2OTMiPkdldHRpbmcgc3RhcnRlZCB3aXRoIHVzPC9hPjwvaDM+CgkJCTxkaXYgY2xhc3M9ImNzLWctYyI+CgkJCQkKCQkJCQk8c2VjdGlvbiBjbGFzcz0iY3MtZyBhcnRpY2xlLWxpc3QiPgoJCQkJCQk8ZGl2IGNsYXNzPSJsaXN0LWxlYWQiPgoJCQkJCQkJPGEgaHJlZj0iL3N1cHBvcnQvc29sdXRpb25zL2ZvbGRlcnMvODAwMDA0MTc2MzQiIHRpdGxlPSJZb3VyIGFjY291bnQiPiBZb3VyIGFjY291bnQgPHNwYW4gY2xhc3M9J2l0ZW0tY291bnQnPjA8L3NwYW4+PC9hPgoJCQkJCQk8L2Rpdj4KCQkJCQkJCgkJCQkJPC9zZWN0aW9uPgoJCQkJCgkJCQkJPHNlY3Rpb24gY2xhc3M9ImNzLWcgYXJ0aWNsZS1saXN0Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGlzdC1sZWFkIj4KCQkJCQkJCTxhIGhyZWY9Ii9zdXBwb3J0L3NvbHV0aW9ucy9mb2xkZXJzLzgwMDAwNDE3NjM1IiB0aXRsZT0iWW91ciBkb2N1bWVudHMiPiBZb3VyIGRvY3VtZW50cyA8c3BhbiBjbGFzcz0naXRlbS1jb3VudCc+MDwvc3Bhbj48L2E+CgkJCQkJCTwvZGl2PgoJCQkJCQkKCQkJCQk8L3NlY3Rpb24+CgkJCQkKCQkJPC9kaXY+CgkJPC9kaXY+CQoJCQoJCgkJCgkJPGRpdiBjbGFzcz0iY3MtcyI+CgkJCTxoMyBjbGFzcz0iaGVhZGluZyI+PGEgaHJlZj0iL3N1cHBvcnQvc29sdXRpb25zLzgwMDAwMjgyNjk0Ij5GQVFzOjwvYT48L2gzPgoJCQk8ZGl2IGNsYXNzPSJjcy1nLWMiPgoJCQkJCgkJCQkJPHNlY3Rpb24gY2xhc3M9ImNzLWcgYXJ0aWNsZS1saXN0Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGlzdC1sZWFkIj4KCQkJCQkJCTxhIGhyZWY9Ii9zdXBwb3J0L3NvbHV0aW9ucy9mb2xkZXJzLzgwMDAwNDE3NjM2IiB0aXRsZT0iVHJpYWwgRkFRcyI+IFRyaWFsIEZBUXMgPHNwYW4gY2xhc3M9J2l0ZW0tY291bnQnPjA8L3NwYW4+PC9hPgoJCQkJCQk8L2Rpdj4KCQkJCQkJCgkJCQkJPC9zZWN0aW9uPgoJCQkJCgkJCTwvZGl2PgoJCTwvZGl2PgkKCQkKCQoJCQoJCTxkaXYgY2xhc3M9ImNzLXMiPgoJCQk8aDMgY2xhc3M9ImhlYWRpbmciPjxhIGhyZWY9Ii9zdXBwb3J0L3NvbHV0aW9ucy84MDAwMDI4MjY5NSI+RmlsZXMgYW5kIGZvbGRlcnM8L2E+PC9oMz4KCQkJPGRpdiBjbGFzcz0iY3MtZy1jIj4KCQkJCQoJCQkJCTxzZWN0aW9uIGNsYXNzPSJjcy1nIGFydGljbGUtbGlzdCI+CgkJCQkJCTxkaXYgY2xhc3M9Imxpc3QtbGVhZCI+CgkJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9zb2x1dGlvbnMvZm9sZGVycy84MDAwMDQxNzYzNyIgdGl0bGU9IlNoYXJlZCBmaWxlcyI+IFNoYXJlZCBmaWxlcyA8c3BhbiBjbGFzcz0naXRlbS1jb3VudCc+MDwvc3Bhbj48L2E+CgkJCQkJCTwvZGl2PgoJCQkJCQkKCQkJCQk8L3NlY3Rpb24+CgkJCQkKCQkJCQk8c2VjdGlvbiBjbGFzcz0iY3MtZyBhcnRpY2xlLWxpc3QiPgoJCQkJCQk8ZGl2IGNsYXNzPSJsaXN0LWxlYWQiPgoJCQkJCQkJPGEgaHJlZj0iL3N1cHBvcnQvc29sdXRpb25zL2ZvbGRlcnMvODAwMDA0MTc2MzgiIHRpdGxlPSJEZWxldGVkIGZpbGVzIj4gRGVsZXRlZCBmaWxlcyA8c3BhbiBjbGFzcz0naXRlbS1jb3VudCc+MDwvc3Bhbj48L2E+CgkJCQkJCTwvZGl2PgoJCQkJCQkKCQkJCQk8L3NlY3Rpb24+CgkJCQkKCQkJPC9kaXY+CgkJPC9kaXY+CQoJCQoJCgkJCgkJPGRpdiBjbGFzcz0iY3MtcyI+CgkJCTxoMyBjbGFzcz0iaGVhZGluZyI+PGEgaHJlZj0iL3N1cHBvcnQvc29sdXRpb25zLzgwMDAwMjgyNjk2Ij5QcmVtaXVtIGNsdWI8L2E+PC9oMz4KCQkJPGRpdiBjbGFzcz0iY3MtZy1jIj4KCQkJCQoJCQkJCTxzZWN0aW9uIGNsYXNzPSJjcy1nIGFydGljbGUtbGlzdCI+CgkJCQkJCTxkaXYgY2xhc3M9Imxpc3QtbGVhZCI+CgkJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9zb2x1dGlvbnMvZm9sZGVycy84MDAwMDQxNzYzOSIgdGl0bGU9IlByZW1pdW0gZmVhdHVyZXMiPiBQcmVtaXVtIGZlYXR1cmVzIDxzcGFuIGNsYXNzPSdpdGVtLWNvdW50Jz4wPC9zcGFuPjwvYT4KCQkJCQkJPC9kaXY+CgkJCQkJCQoJCQkJCTwvc2VjdGlvbj4KCQkJCQoJCQkJCTxzZWN0aW9uIGNsYXNzPSJjcy1nIGFydGljbGUtbGlzdCI+CgkJCQkJCTxkaXYgY2xhc3M9Imxpc3QtbGVhZCI+CgkJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9zb2x1dGlvbnMvZm9sZGVycy84MDAwMDQxNzY0MCIgdGl0bGU9IlByZW1pdW0gc3Vic2NyaXB0aW9uIj4gUHJlbWl1bSBzdWJzY3JpcHRpb24gPHNwYW4gY2xhc3M9J2l0ZW0tY291bnQnPjA8L3NwYW4+PC9hPgoJCQkJCQk8L2Rpdj4KCQkJCQkJCgkJCQkJPC9zZWN0aW9uPgoJCQkJCgkJCTwvZGl2PgoJCTwvZGl2PgkKCQkKCQo8L3NlY3Rpb24+CgoKCgk8L2Rpdj4KCQoKCQoKPC9kaXY+CgoJPGZvb3RlciBjbGFzcz0iZm9vdGVyIHJvdW5kZWQtNiI+CgkJPG5hdiBjbGFzcz0iZm9vdGVyLWxpbmtzIHBhZ2Ugbm8tcGFkZGluZyI+CgkJCQoJCQkJCQoJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9ob21lIiBjbGFzcz0iYWN0aXZlIj5Ib21lPC9hPgoJCQkJCQoJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9zb2x1dGlvbnMiIGNsYXNzPSIiPlNvbHV0aW9uczwvYT4KCQkJCQkKCQkJCgkJCQoJCQkgIDxhIGhyZWY9IiNwb3J0YWwtY29va2llLWluZm8iIHJlbD0iZnJlc2hkaWFsb2ciIGRhdGEtbGF6eS1sb2FkPSJ0cnVlIiBjbGFzcz0iY29va2llLWxpbmsiCiAgICAgICAgZGF0YS13aWR0aD0iNDUwcHgiIHRpdGxlPSJXaHkgd2UgbG92ZSBDb29raWVzIiBkYXRhLXRlbXBsYXRlLWZvb3Rlcj0iIj4KICAgICAgICBDb29raWUgcG9saWN5CiAgICAgIDwvYT4gPGRpdiBpZD0icG9ydGFsLWNvb2tpZS1pbmZvIiBjbGFzcz0iaGlkZSI+PHRleHRhcmVhPgogICAgICAgIDxwPldlIHVzZSBjb29raWVzIHRvIHRyeSBhbmQgZ2l2ZSB5b3UgYSBiZXR0ZXIgZXhwZXJpZW5jZSBpbiBGcmVzaGRlc2suIDwvcD4KICAgICAgICA8cD5Zb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgd2hhdCBraW5kIG9mIGNvb2tpZXMgd2UgdXNlLCB3aHksIGFuZCBob3cgZnJvbSBvdXIgPGEgaHJlZj0iaHR0cDovL2ZyZXNoZGVzay5jb20vcHJpdmFjeS8iIHRhcmdldD0iX2JsYW5rIj5Qcml2YWN5IFBvbGljeTwvYT4uIElmIHlvdSBoYXRlIGNvb2tpZXMsIG9yIGFyZSBqdXN0IG9uIGEgZGlldCwgeW91IGNhbiBkaXNhYmxlIHRoZW0gYWx0b2dldGhlciB0b28uIEp1c3Qgbm90ZSB0aGF0IHRoZSBGcmVzaGRlc2sgc2VydmljZSBpcyBwcmV0dHkgYmlnIG9uIHNvbWUgY29va2llcyAod2UgbG92ZSB0aGUgY2hvY28tY2hpcCBvbmVzKSwgYW5kIHNvbWUgcG9ydGlvbnMgb2YgRnJlc2hkZXNrIG1heSBub3Qgd29yayBwcm9wZXJseSBpZiB5b3UgZGlzYWJsZSBjb29raWVzLjwvcD4KICAgICAgICA8cD5XZeKAmWxsIGFsc28gYXNzdW1lIHlvdSBhZ3JlZSB0byB0aGUgd2F5IHdlIHVzZSBjb29raWVzIGFuZCBhcmUgb2sgd2l0aCBpdCBhcyBkZXNjcmliZWQgaW4gb3VyIDxhIGhyZWY9Imh0dHA6Ly9mcmVzaGRlc2suY29tL3ByaXZhY3kvIiB0YXJnZXQ9Il9ibGFuayI+UHJpdmFjeSBQb2xpY3k8L2E+LCB1bmxlc3MgeW91IGNob29zZSB0byBkaXNhYmxlIHRoZW0gYWx0b2dldGhlciB0aHJvdWdoIHlvdXIgYnJvd3Nlci48L3A+CiAgICAgIDwvdGV4dGFyZWE+PC9kaXY+IAoJCTwvbmF2PgoJPC9mb290ZXI+CgkgIDxkaXYgY2xhc3M9ImNvcHlyaWdodCI+CiAgICAgICAgPGEgaHJlZj1odHRwczovL2ZyZXNoZGVzay5jb20vP3V0bV9zb3VyY2U9cG9ydGFsJnV0bV9tZWRpdW09cmVmbGluayZ1dG1fY2FtcGFpZ249cG9ydGFsX3JlZmxpbmsgdGFyZ2V0PSJfYmxhbmsiPiBIZWxwIERlc2sgU29mdHdhcmUgPC9hPgogICAgICAgIGJ5IEZyZXNoZGVzawogICAgICA8L2Rpdj4gCgoKCgoJCQk8c2NyaXB0IHNyYz0iaHR0cHM6Ly9ldWMtYXNzZXRzMi5mcmVzaGRlc2suY29tL2Fzc2V0cy9jZG4vcG9ydGFsX2JvdHRvbS1jNzA0MjBjNTlkZjk1MmY3YWI0ZjhjNGU5MzAxY2M4Ni5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4KCQk8c2NyaXB0IHNyYz0iaHR0cHM6Ly9ldWMtYXNzZXRzOC5mcmVzaGRlc2suY29tL2Fzc2V0cy9jZG4vcmVkYWN0b3ItYmUwOTI2NDY4NjdhZmI0M2UzMGQxMDY3YWI3OWM5YTcuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CgkJPHNjcmlwdCBzcmM9Imh0dHBzOi8vZXVjLWFzc2V0czguZnJlc2hkZXNrLmNvbS9hc3NldHMvY2RuL2xhbmcvZW4tZDU4ZDY4OTEyMzY0ZWE2OGEwMWJkZTkzMjc3NGY5ZGQuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CgkJPCEtLSBmb3IgaTE4bi1qcyB0cmFuc2xhdGlvbnMgLS0+CiAgCQk8c2NyaXB0IHNyYz0iaHR0cHM6Ly9ldWMtYXNzZXRzOS5mcmVzaGRlc2suY29tL2Fzc2V0cy9jZG4vaTE4bi9wb3J0YWwvZW4tZTc1N2QzYjNmMDMzNjBlZjZkMWM3Y2Y0MjY0Y2RiYjQuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CgkJPCEtLSBJbmNsdWRpbmcgZGVmYXVsdCBwb3J0YWwgYmFzZWQgc2NyaXB0IGF0IHRoZSBib3R0b20gLS0+CgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLzwhW0NEQVRBWwoJCglqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewoJCQkJCQoJCS8vIFNldHRpbmcgdGhlIGxvY2FsZSBmb3IgbW9tZW50IGpzCgkJbW9tZW50LmxhbmcoJ2VuJyk7CgoJCXZhciB2YWxpZGF0aW9uX21lYXNzYWdlcyA9IHsicmVxdWlyZWQiOiJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIsInJlbW90ZSI6IlBsZWFzZSBmaXggdGhpcyBmaWVsZC4iLCJlbWFpbCI6IlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuIiwidXJsIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgVVJMLiIsImRhdGUiOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlLiIsImRhdGVJU08iOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlICggSVNPICkuIiwibnVtYmVyIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgbnVtYmVyLiIsImRpZ2l0cyI6IlBsZWFzZSBlbnRlciBvbmx5IGRpZ2l0cy4iLCJjcmVkaXRjYXJkIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgY3JlZGl0IGNhcmQgbnVtYmVyLiIsImVxdWFsVG8iOiJQbGVhc2UgZW50ZXIgdGhlIHNhbWUgdmFsdWUgYWdhaW4uIiwidHdvX2RlY2ltYWxfcGxhY2Vfd2FybmluZyI6IlZhbHVlIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiAyIGRlY2ltYWwgZGlnaXRzIiwic2VsZWN0X2F0bGVhc3Rfb25lIjoiU2VsZWN0IGF0IGxlYXN0IG9uZSBvcHRpb24uIiwic2VsZWN0Ml9taW5pbXVtX2xpbWl0IjoiUGxlYXNlIHR5cGUgJXtjaGFyX2NvdW50fSBvciBtb3JlIGxldHRlcnMiLCJzZWxlY3QyX21heGltdW1fbGltaXQiOiJZb3UgY2FuIG9ubHkgc2VsZWN0ICV7bGltaXR9ICV7Y29udGFpbmVyfSIsIm1heGxlbmd0aCI6IlBsZWFzZSBlbnRlciBubyBtb3JlIHRoYW4gezB9IGNoYXJhY3RlcnMuIiwibWlubGVuZ3RoIjoiUGxlYXNlIGVudGVyIGF0IGxlYXN0IHswfSBjaGFyYWN0ZXJzLiIsInJhbmdlbGVuZ3RoIjoiUGxlYXNlIGVudGVyIGEgdmFsdWUgYmV0d2VlbiB7MH0gYW5kIHsxfSBjaGFyYWN0ZXJzIGxvbmcuIiwicmFuZ2UiOiJQbGVhc2UgZW50ZXIgYSB2YWx1ZSBiZXR3ZWVuIHswfSBhbmQgezF9LiIsIm1heCI6IlBsZWFzZSBlbnRlciBhIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB7MH0uIiwibWluIjoiUGxlYXNlIGVudGVyIGEgdmFsdWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHswfS4iLCJzZWxlY3QyX21heGltdW1fbGltaXRfanEiOiJZb3UgY2FuIG9ubHkgc2VsZWN0IHswfSB7MX0iLCJmYWNlYm9va19saW1pdF9leGNlZWQiOiJZb3VyIEZhY2Vib29rIHJlcGx5IHdhcyBvdmVyIDgwMDAgY2hhcmFjdGVycy4gWW91J2xsIGhhdmUgdG8gYmUgbW9yZSBjbGV2ZXIuIiwibWVzc2VuZ2VyX2xpbWl0X2V4Y2VlZGVkIjoiT29wcyEgWW91IGhhdmUgZXhjZWVkZWQgTWVzc2VuZ2VyIFBsYXRmb3JtJ3MgY2hhcmFjdGVyIGxpbWl0LiBQbGVhc2UgbW9kaWZ5IHlvdXIgcmVzcG9uc2UuIiwibm90X2VxdWFsX3RvIjoiVGhpcyBlbGVtZW50IHNob3VsZCBub3QgYmUgZXF1YWwgdG8iLCJlbWFpbF9hZGRyZXNzX2ludmFsaWQiOiJPbmUgb3IgbW9yZSBlbWFpbCBhZGRyZXNzZXMgYXJlIGludmFsaWQuIiwidHdpdHRlcl9saW1pdF9leGNlZWQiOiJPb3BzISBZb3UgaGF2ZSBleGNlZWRlZCBUd2l0dGVyJ3MgY2hhcmFjdGVyIGxpbWl0LiBZb3UnbGwgaGF2ZSB0byBtb2RpZnkgeW91ciByZXNwb25zZS4iLCJwYXNzd29yZF9kb2VzX25vdF9tYXRjaCI6IlRoZSBwYXNzd29yZHMgZG9uJ3QgbWF0Y2guIFBsZWFzZSB0cnkgYWdhaW4uIiwidmFsaWRfaG91cnMiOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBob3Vycy4iLCJyZXBseV9saW1pdF9leGNlZWQiOiJZb3VyIHJlcGx5IHdhcyBvdmVyIDIwMDAgY2hhcmFjdGVycy4gWW91J2xsIGhhdmUgdG8gYmUgbW9yZSBjbGV2ZXIuIiwidXJsX2Zvcm1hdCI6IkludmFsaWQgVVJMIGZvcm1hdCIsInVybF93aXRob3V0X3NsYXNoIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgVVJMIHdpdGhvdXQgJy8nIiwibGlua19iYWNrX3VybCI6IlBsZWFzZSBlbnRlciBhIHZhbGlkIGxpbmtiYWNrIFVSTCIsInJlcXVlc3Rlcl92YWxpZGF0aW9uIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgcmVxdWVzdGVyIGRldGFpbHMgb3IgPGEgaHJlZj1cIiNcIiBpZD1cImFkZF9yZXF1ZXN0ZXJfYnRuX3Byb3h5XCI+YWRkIG5ldyByZXF1ZXN0ZXIuPC9hPiIsImFnZW50X3ZhbGlkYXRpb24iOiJQbGVhc2UgZW50ZXIgdmFsaWQgYWdlbnQgZGV0YWlscyIsImVtYWlsX29yX3Bob25lIjoiUGxlYXNlIGVudGVyIGEgRW1haWwgb3IgUGhvbmUgTnVtYmVyIiwidXBsb2FkX21iX2xpbWl0IjoiVXBsb2FkIGV4Y2VlZHMgdGhlIGF2YWlsYWJsZSAxNU1CIGxpbWl0IiwiaW52YWxpZF9pbWFnZSI6IkludmFsaWQgaW1hZ2UgZm9ybWF0IiwiYXRsZWFzdF9vbmVfcm9sZSI6IkF0IGxlYXN0IG9uZSByb2xlIGlzIHJlcXVpcmVkIGZvciB0aGUgYWdlbnQiLCJpbnZhbGlkX3RpbWUiOiJJbnZhbGlkIHRpbWUuIiwicmVtb3RlX2ZhaWwiOiJSZW1vdGUgdmFsaWRhdGlvbiBmYWlsZWQiLCJ0cmltX3NwYWNlcyI6IkF1dG8gdHJpbSBvZiBsZWFkaW5nICYgdHJhaWxpbmcgd2hpdGVzcGFjZSIsImhleF9jb2xvcl9pbnZhbGlkIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgaGV4IGNvbG9yIHZhbHVlLiIsIm5hbWVfZHVwbGljYXRpb24iOiJUaGUgbmFtZSBhbHJlYWR5IGV4aXN0cy4iLCJpbnZhbGlkX3ZhbHVlIjoiSW52YWxpZCB2YWx1ZSIsImludmFsaWRfcmVnZXgiOiJJbnZhbGlkIFJlZ3VsYXIgRXhwcmVzc2lvbiIsInNhbWVfZm9sZGVyIjoiQ2Fubm90IG1vdmUgdG8gdGhlIHNhbWUgZm9sZGVyLiIsIm1heGxlbmd0aF8yNTUiOiJQbGVhc2UgZW50ZXIgbGVzcyB0aGFuIDI1NSBjaGFyYWN0ZXJzIiwiZGVjaW1hbF9kaWdpdF92YWxpZCI6IlZhbHVlIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiAyIGRlY2ltYWwgZGlnaXRzIiwiYXRsZWFzdF9vbmVfZmllbGQiOiJQbGVhc2UgZmlsbCBhdCBsZWFzdCB7MH0gb2YgdGhlc2UgZmllbGRzLiIsImF0bGVhc3Rfb25lX3BvcnRhbCI6IlNlbGVjdCBhdGxlYXN0IG9uZSBwb3J0YWwuIiwiY3VzdG9tX2hlYWRlciI6IlBsZWFzZSB0eXBlIGN1c3RvbSBoZWFkZXIgaW4gdGhlIGZvcm1hdCAtICBoZWFkZXIgOiB2YWx1ZSIsInNhbWVfcGFzc3dvcmQiOiJTaG91bGQgYmUgc2FtZSBhcyBQYXNzd29yZCIsInNlbGVjdDJfbm9fbWF0Y2giOiJObyBtYXRjaGluZyAle2NvbnRhaW5lcn0gZm91bmQiLCJpbnRlZ3JhdGlvbl9ub19tYXRjaCI6Im5vIG1hdGNoaW5nIGRhdGEuLi4iLCJ0aW1lIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgdGltZSIsInZhbGlkX2NvbnRhY3QiOiJQbGVhc2UgYWRkIGEgdmFsaWQgY29udGFjdCIsImZpZWxkX2ludmFsaWQiOiJUaGlzIGZpZWxkIGlzIGludmFsaWQifQkKCgkJalF1ZXJ5LmV4dGVuZChqUXVlcnkudmFsaWRhdG9yLm1lc3NhZ2VzLCB2YWxpZGF0aW9uX21lYXNzYWdlcyApOwoKCgkJalF1ZXJ5KCIuY2FsbF9kdXJhdGlvbiIpLmVhY2goZnVuY3Rpb24gKCkgewoJCQl2YXIgZm9ybWF0LHRpbWU7CgkJCWlmIChqUXVlcnkodGhpcykuZGF0YSgidGltZSIpID09PSB1bmRlZmluZWQpIHsgcmV0dXJuOyB9CgkJCWlmKGpRdWVyeSh0aGlzKS5oYXNDbGFzcygnZnJlc2hjYWxsZXInKSl7IHJldHVybjsgfQoJCQl0aW1lID0galF1ZXJ5KHRoaXMpLmRhdGEoInRpbWUiKTsKCQkJaWYgKHRpbWU+PTM2MDApIHsKCQkJIGZvcm1hdCA9ICJoaDptbTpzcyI7CgkJCX0gZWxzZSB7CgkJCQlmb3JtYXQgPSAibW06c3MiOwoJCQl9CgkJCWpRdWVyeSh0aGlzKS5odG1sKHRpbWUudG9UaW1lKGZvcm1hdCkpOwoJCX0pOwoJfSk7CgoJLy8gU2hvcnRjdXRzIHZhcmlhYmxlcwoJdmFyIFNob3J0Y3V0cyA9IHsiZ2xvYmFsIjp7ImhlbHAiOiI/Iiwic2F2ZSI6Im1vZCtyZXR1cm4iLCJjYW5jZWwiOiJlc2MiLCJzZWFyY2giOiIvIiwic3RhdHVzX2RpYWxvZyI6Im1vZCthbHQrcmV0dXJuIiwic2F2ZV9jdWN0b21pemF0aW9uIjoibW9kK3NoaWZ0K3MifSwiYXBwX25hdiI6eyJkYXNoYm9hcmQiOiJnIGQiLCJ0aWNrZXRzIjoiZyB0Iiwic29jaWFsIjoiZyBlIiwic29sdXRpb25zIjoiZyBzIiwiZm9ydW1zIjoiZyBmIiwiY3VzdG9tZXJzIjoiZyBjIiwicmVwb3J0cyI6ImcgciIsImFkbWluIjoiZyBhIiwidGlja2V0X25ldyI6ImcgbiIsImNvbXBvc2VfZW1haWwiOiJnIG0ifSwicGFnaW5hdGlvbiI6eyJwcmV2aW91cyI6ImFsdCtsZWZ0IiwibmV4dCI6ImFsdCtyaWdodCIsImFsdF9wcmV2aW91cyI6ImoiLCJhbHRfbmV4dCI6ImsifSwidGlja2V0X2xpc3QiOnsidGlja2V0X3Nob3ciOiJyZXR1cm4iLCJzZWxlY3QiOiJ4Iiwic2VsZWN0X2FsbCI6InNoaWZ0K3giLCJzZWFyY2hfdmlldyI6InYiLCJzaG93X2Rlc2NyaXB0aW9uIjoic3BhY2UiLCJ1bndhdGNoIjoidyIsImRlbGV0ZSI6IiMiLCJwaWNrdXAiOiJAIiwic3BhbSI6IiEiLCJjbG9zZSI6In4iLCJzaWxlbnRfY2xvc2UiOiJhbHQrc2hpZnQrYCIsInVuZG8iOiJ6IiwicmVwbHkiOiJyIiwiZm9yd2FyZCI6ImYiLCJhZGRfbm90ZSI6Im4iLCJzY2VuYXJpbyI6InMifSwidGlja2V0X2RldGFpbCI6eyJ0b2dnbGVfd2F0Y2hlciI6InciLCJyZXBseSI6InIiLCJmb3J3YXJkIjoiZiIsImFkZF9ub3RlIjoibiIsImNsb3NlIjoifiIsInNpbGVudF9jbG9zZSI6ImFsdCtzaGlmdCtgIiwiYWRkX3RpbWUiOiJtIiwic3BhbSI6IiEiLCJkZWxldGUiOiIjIiwic2hvd19hY3Rpdml0aWVzX3RvZ2dsZSI6In0iLCJwcm9wZXJ0aWVzIjoicCIsImV4cGFuZCI6Il0iLCJ1bmRvIjoieiIsInNlbGVjdF93YXRjaGVyIjoic2hpZnQrdyIsImdvX3RvX25leHQiOlsiaiIsImRvd24iXSwiZ29fdG9fcHJldmlvdXMiOlsiayIsInVwIl0sInNjZW5hcmlvIjoicyIsInBpY2t1cCI6IkAiLCJjb2xsYWJvcmF0aW9uIjoiZCJ9LCJzb2NpYWxfc3RyZWFtIjp7InNlYXJjaCI6InMiLCJnb190b19uZXh0IjpbImoiLCJkb3duIl0sImdvX3RvX3ByZXZpb3VzIjpbImsiLCJ1cCJdLCJvcGVuX3N0cmVhbSI6WyJzcGFjZSIsInJldHVybiJdLCJjbG9zZSI6ImVzYyIsInJlcGx5IjoiciIsInJldHdlZXQiOiJzaGlmdCtyIn0sInBvcnRhbF9jdXN0b21pemF0aW9ucyI6eyJwcmV2aWV3IjoibW9kK3NoaWZ0K3AifSwiZGlzY3Vzc2lvbnMiOnsidG9nZ2xlX2ZvbGxvd2luZyI6InciLCJhZGRfZm9sbG93ZXIiOiJzaGlmdCt3IiwicmVwbHlfdG9waWMiOiJyIn19OwoJCgkvLyBEYXRlIGZvcm1hdHMKCXZhciBEQVRFX0ZPUk1BVFMgPSB7Im5vbl91cyI6eyJtb21lbnRfZGF0ZV93aXRoX3dlZWsiOiJkZGQsIEQgTU1NLCBZWVlZIiwiZGF0ZXBpY2tlciI6ImQgTSwgeXkiLCJkYXRlcGlja2VyX2VzY2FwZWQiOiJkIE0geXkiLCJkYXRlcGlja2VyX2Z1bGxfZGF0ZSI6IkQsIGQgTSwgeXkiLCJtZWRpdW1EYXRlIjoiZCBNTU0sIHl5eXkifSwidXMiOnsibW9tZW50X2RhdGVfd2l0aF93ZWVrIjoiZGRkLCBNTU0gRCwgWVlZWSIsImRhdGVwaWNrZXIiOiJNIGQsIHl5IiwiZGF0ZXBpY2tlcl9lc2NhcGVkIjoiTSBkIHl5IiwiZGF0ZXBpY2tlcl9mdWxsX2RhdGUiOiJELCBNIGQsIHl5IiwibWVkaXVtRGF0ZSI6Ik1NTSBkLCB5eXl5In19OwoKCXZhciBsYW5nID0geyAKCQlsb2FkaW5nVGV4dDogIlBsZWFzZSBXYWl0Li4uIiwKCQl2aWV3QWxsVGlja2V0czogIlZpZXcgYWxsIHRpY2tldHMiCgl9OwoKCi8vXV0+Cjwvc2NyaXB0PiAKCgkJCgoJCQoJCQoJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICAJCUkxOG4uZGVmYXVsdExvY2FsZSA9ICJlbiI7CiAgICAgCQlJMThuLmxvY2FsZSA9ICJlbiI7CgkJPC9zY3JpcHQ+CgkJCiAgICAKCTwvYm9keT4KPC9odG1sPg== - recorded_at: Wed, 30 Jun 2021 09:10:32 GMT -- request: - method: get - uri: https://.freshdesk.com/api/v2/agents/me - body: - encoding: US-ASCII - string: '' - headers: - Content-Type: - - application/json - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - User-Agent: - - Ruby - Host: - - ".freshdesk.com" - Authorization: - - Basic MW52NGwxZFQwSzNOOlg= - response: - status: - code: 401 - message: Unauthorized - headers: - Date: - - Wed, 30 Jun 2021 09:10:34 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 401 Unauthorized - Cache-Control: - - no-cache, private - X-Xss-Protection: - - 1; mode=block - X-Request-Id: - - a363f0a8-4e6d-47ac-b5d0-8e85dd90dd13 - X-Ua-Compatible: - - IE=Edge,chrome=1 - X-Content-Type-Options: - - nosniff - X-Freshdesk-Api-Version: - - latest=v2; requested=v2 - X-Rack-Cache: - - miss - Set-Cookie: - - _x_w=5_2; path=/; HttpOnly; secure - X-Fw-Ratelimiting-Managed: - - 'true' - X-Ratelimit-Total: - - '100' + - '40' X-Ratelimit-Remaining: - - '97' - X-Ratelimit-Used-Currentrequest: - - '1' - X-Envoy-Upstream-Service-Time: - - '62' - X-Trace-Id: - - 00-f5ceb2c40d6765f55d54574eef4ddc3d-6ee971bb58fafd65-00 - Server: - - fwe - body: - encoding: UTF-8 - string: '{"code":"invalid_credentials","message":"You have to be logged in to - perform this action."}' - recorded_at: Wed, 30 Jun 2021 09:10:34 GMT -- request: - method: get - uri: https://.freshdesk.com/api/v2/agents/me - body: - encoding: US-ASCII - string: '' - headers: - Content-Type: - - application/json - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - User-Agent: - - Ruby - Host: - - ".freshdesk.com" - Authorization: - - Basic MW52NGwxZFQwSzNOOlg= - response: - status: - code: 401 - message: Unauthorized - headers: - Date: - - Wed, 30 Jun 2021 09:10:34 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 401 Unauthorized - X-Request-Id: - - 9f3dd0ea-5053-439d-9c38-4438de4025f2 - X-Freshdesk-Api-Version: - - latest=v2; requested=v2 - X-Rack-Cache: - - miss - Cache-Control: - - no-cache, private - X-Xss-Protection: - - 1; mode=block - X-Ua-Compatible: - - IE=Edge,chrome=1 - X-Content-Type-Options: - - nosniff - Set-Cookie: - - _x_w=5_2; path=/; HttpOnly; secure - X-Fw-Ratelimiting-Managed: - - 'true' - X-Ratelimit-Total: - - '100' - X-Ratelimit-Remaining: - - '96' - X-Ratelimit-Used-Currentrequest: - - '1' - X-Envoy-Upstream-Service-Time: - '38' + X-Ratelimit-Used-Currentrequest: + - '1' + X-Envoy-Upstream-Service-Time: + - '36' X-Trace-Id: - - 00-404246d926c414ea50b9a0edb35bee40-73ba3d8ae6aa3a44-00 + - 00-4f440d7bb5e7f826dfbd5dc01a8fa92d-f4b5245d48142109-00 Server: - fwe body: encoding: UTF-8 string: '{"code":"invalid_credentials","message":"You have to be logged in to perform this action."}' - recorded_at: Wed, 30 Jun 2021 09:10:34 GMT + recorded_at: Fri, 02 Jul 2021 17:06:23 GMT +- request: + method: get + uri: https://.freshdesk.com/api/v2/agents/me + body: + encoding: US-ASCII + string: '' + headers: + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + Host: + - ".freshdesk.com" + Authorization: + - Basic MW52NGwxZFQwSzNOOlg= + response: + status: + code: 401 + message: Unauthorized + headers: + Date: + - Fri, 02 Jul 2021 17:06:25 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 401 Unauthorized + X-Request-Id: + - 7e415a16-de0a-4b75-a116-828e5bcaf9fc + X-Freshdesk-Api-Version: + - latest=v2; requested=v2 + X-Rack-Cache: + - miss + Cache-Control: + - no-cache, private + X-Xss-Protection: + - 1; mode=block + X-Ua-Compatible: + - IE=Edge,chrome=1 + X-Content-Type-Options: + - nosniff + Set-Cookie: + - _x_w=5_2; path=/; HttpOnly; secure + X-Fw-Ratelimiting-Managed: + - 'true' + X-Ratelimit-Total: + - '100' + X-Ratelimit-Remaining: + - '95' + X-Ratelimit-Used-Currentrequest: + - '1' + X-Envoy-Upstream-Service-Time: + - '39' + X-Trace-Id: + - 00-ad29ebb187bd9fa578b0a5fce0d1e5f3-731e1b5906db477a-00 + Server: + - fwe + body: + encoding: UTF-8 + string: '{"code":"invalid_credentials","message":"You have to be logged in to + perform this action."}' + recorded_at: Fri, 02 Jul 2021 17:06:25 GMT +- request: + method: get + uri: https://.freshdesk.com/api/v2/agents/me + body: + encoding: US-ASCII + string: '' + headers: + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + Host: + - ".freshdesk.com" + Authorization: + - Basic MW52NGwxZFQwSzNOOlg= + response: + status: + code: 401 + message: Unauthorized + headers: + Date: + - Fri, 02 Jul 2021 17:06:25 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 401 Unauthorized + X-Request-Id: + - daa1345a-5ddb-4fc5-8d5c-9e0aca066592 + X-Freshdesk-Api-Version: + - latest=v2; requested=v2 + X-Rack-Cache: + - miss + Cache-Control: + - no-cache, private + X-Xss-Protection: + - 1; mode=block + X-Ua-Compatible: + - IE=Edge,chrome=1 + X-Content-Type-Options: + - nosniff + Set-Cookie: + - _x_w=5_2; path=/; HttpOnly; secure + X-Fw-Ratelimiting-Managed: + - 'true' + X-Ratelimit-Total: + - '100' + X-Ratelimit-Remaining: + - '94' + X-Ratelimit-Used-Currentrequest: + - '1' + X-Envoy-Upstream-Service-Time: + - '34' + X-Trace-Id: + - 00-ccc686cbe819b7f7fa128656364bdcdb-9b4e5cab85db1987-00 + Server: + - fwe + body: + encoding: UTF-8 + string: '{"code":"invalid_credentials","message":"You have to be logged in to + perform this action."}' + recorded_at: Fri, 02 Jul 2021 17:06:25 GMT recorded_with: VCR 6.0.0 diff --git a/test/data/vcr_cassettes/system/import/freshdesk/import_freshdesk_fields_validation_valid_hostname.yml b/test/data/vcr_cassettes/system/import/freshdesk/import_freshdesk_fields_validation_valid_hostname.yml index c4fce5fe5..4e7978dff 100644 --- a/test/data/vcr_cassettes/system/import/freshdesk/import_freshdesk_fields_validation_valid_hostname.yml +++ b/test/data/vcr_cassettes/system/import/freshdesk/import_freshdesk_fields_validation_valid_hostname.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: get - uri: https://reallybadexample.freshdesk.com/ + uri: https://reallybadexample.freshdesk.com/api/v2/contacts body: encoding: US-ASCII string: '' @@ -17,56 +17,41 @@ http_interactions: - reallybadexample.freshdesk.com response: status: - code: 200 - message: OK + code: 404 + message: Not Found headers: Date: - - Wed, 30 Jun 2021 09:10:25 GMT + - Fri, 02 Jul 2021 17:06:18 GMT Content-Type: - - text/html; charset=utf-8 + - application/json; charset=utf-8 Transfer-Encoding: - chunked Connection: - keep-alive Status: - - 200 OK - Cache-Control: - - max-age=0, private, must-revalidate - X-Xss-Protection: - - 1; mode=block + - 404 Not Found X-Request-Id: - - decbd7ab-516e-489c-b22f-ee24fb52e8eb - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - W/"1f9efcb8395f73f1b213752ae9941ad3" - X-Frame-Options: - - SAMEORIGIN - X-Content-Type-Options: - - nosniff + - ea835512-a5f9-4872-bcf0-102168c453a6 X-Rack-Cache: - miss + Cache-Control: + - no-cache + X-Xss-Protection: + - 1; mode=block + X-Ua-Compatible: + - IE=Edge,chrome=1 + X-Content-Type-Options: + - nosniff + X-Fw-Ratelimiting-Managed: + - 'false' X-Envoy-Upstream-Service-Time: - - '22' + - '31' X-Trace-Id: - - 00-9f384d36e91558f80aa90fd756df07d1-bfa5e51d6fac7500-00 + - 00-4aeca9c6614c654f313a692679670477-54a60f5fbd984c56-00 Server: - fwe body: encoding: ASCII-8BIT - string: "\n\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\tThere is no - helpdesk here!\n\t\n\t\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\"Freshdesk\"\n\t\t\t\t\t\t

We - couldn't find

\n\t\t\t\t\t\t

- May be this is still fresh!

\n\t\t\t\t\t\t

You can claim it now at - http://www.freshdesk.com/signup

\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t\t\t\n\n" - recorded_at: Wed, 30 Jun 2021 09:10:26 GMT + string: " " + recorded_at: Fri, 02 Jul 2021 17:06:18 GMT recorded_with: VCR 6.0.0 diff --git a/test/data/vcr_cassettes/system/import/freshdesk/import_freshdesk_import_progress_shows_organizations_progress.yml b/test/data/vcr_cassettes/system/import/freshdesk/import_freshdesk_import_progress_shows_organizations_progress.yml new file mode 100644 index 000000000..19f61a360 --- /dev/null +++ b/test/data/vcr_cassettes/system/import/freshdesk/import_freshdesk_import_progress_shows_organizations_progress.yml @@ -0,0 +1,78 @@ +--- +http_interactions: +- request: + method: get + uri: https://.freshdesk.com/api/v2/agents/me + body: + encoding: US-ASCII + string: '' + headers: + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + Host: + - ".freshdesk.com" + Authorization: + - Basic MWlPRmFiVjFYc1kwZ3h0eU9ud1E6WA== + response: + status: + code: 200 + message: OK + headers: + Date: + - Sat, 03 Jul 2021 06:18:11 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Pragma: + - no-cache + X-Request-Id: + - 4e07257c-5b3a-4a2b-8c32-17f7088aa701 + X-Freshdesk-Api-Version: + - latest=v2; requested=v2 + X-Rack-Cache: + - miss + Cache-Control: + - must-revalidate, no-cache, no-store, private, max-age=0 + X-Xss-Protection: + - 1; mode=block + X-Ua-Compatible: + - IE=Edge,chrome=1 + X-Content-Type-Options: + - nosniff + Expires: + - Wed, 13 Oct 2010 00:00:00 UTC + Set-Cookie: + - _helpkit_session=BAh7B0kiD3Nlc3Npb25faWQGOgZFVEkiJWRiNWJjYjE2MjJhNjYzODY5NTZjMDY1OWEwOTI0ODZjBjsAVEkiEF9jc3JmX3Rva2VuBjsARkkiMUJ1clZXWU42c0pQb21BdytWQUFWczVwb2pHZXdvckNYQVZuTEVFaDE0U0E9BjsARg%3D%3D--98cd298564a0bfe7396d38be08f58ed98127adad; + path=/; HttpOnly; secure + - _x_w=5_2; path=/; HttpOnly; secure + X-Fw-Ratelimiting-Managed: + - 'true' + X-Ratelimit-Total: + - '100' + X-Ratelimit-Remaining: + - '99' + X-Ratelimit-Used-Currentrequest: + - '1' + X-Envoy-Upstream-Service-Time: + - '45' + X-Trace-Id: + - 00-f906ee496f5f50e1c8766cb5323ad55f-2a5d9f13ea92af0d-00 + Server: + - fwe + body: + encoding: ASCII-8BIT + string: '{"available":false,"occasional":false,"id":80014400475,"ticket_scope":1,"signature":null,"group_ids":[],"role_ids":[80000198826],"skill_ids":[],"available_since":null,"contact":{"active":true,"email":"info@.org","job_title":null,"language":"en","mobile":null,"name":"Thorsten + Eckel","phone":null,"time_zone":"Eastern Time (US & Canada)","created_at":"2021-04-09T13:23:58Z","updated_at":"2021-04-09T13:31:00Z","last_login_at":"2021-06-04T06:55:46Z"},"created_at":"2021-04-09T13:23:58Z","updated_at":"2021-06-08T09:56:50Z","type":"support_agent"}' + recorded_at: Sat, 03 Jul 2021 06:18:12 GMT +recorded_with: VCR 6.0.0 diff --git a/test/data/vcr_cassettes/system/import/freshdesk/import_progress_setup.yml b/test/data/vcr_cassettes/system/import/freshdesk/import_progress_setup.yml index c90db51cd..31a076f54 100644 --- a/test/data/vcr_cassettes/system/import/freshdesk/import_progress_setup.yml +++ b/test/data/vcr_cassettes/system/import/freshdesk/import_progress_setup.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: get - uri: https://.freshdesk.com/ + uri: https://.freshdesk.com/api/v2/contacts body: encoding: US-ASCII string: '' @@ -17,102 +17,29 @@ http_interactions: - ".freshdesk.com" response: status: - code: 302 - message: Found + code: 401 + message: Unauthorized headers: Date: - - Wed, 30 Jun 2021 09:10:40 GMT + - Fri, 02 Jul 2021 17:06:30 GMT Content-Type: - - text/html; charset=utf-8 + - application/json; charset=utf-8 Transfer-Encoding: - chunked Connection: - keep-alive Status: - - 302 Found + - 401 Unauthorized + X-Request-Id: + - 66aac436-9efb-4643-a8ca-e4250e5ba347 + X-Freshdesk-Api-Version: + - latest=v2; requested=v2 X-Rack-Cache: - miss Cache-Control: - - no-cache, no-store, max-age=0, must-revalidate - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - Pragma: - no-cache X-Xss-Protection: - 1; mode=block - X-Request-Id: - - 6ad2ab9e-9f47-4a34-b046-776d8bc2d31b - Location: - - https://.freshdesk.com/support/home - X-Ua-Compatible: - - IE=Edge,chrome=1 - X-Frame-Options: - - SAMEORIGIN - X-Content-Type-Options: - - nosniff - Expires: - - Fri, 01 Jan 1990 00:00:00 GMT - Set-Cookie: - - _x_w=5_2; path=/; HttpOnly; secure - X-Envoy-Upstream-Service-Time: - - '25' - X-Trace-Id: - - 00-39f7316ed19fadf798650446905b58c1-ca94c96c5f8209d9-00 - Server: - - fwe - body: - encoding: UTF-8 - string: You are being redirected. - recorded_at: Wed, 30 Jun 2021 09:10:40 GMT -- request: - method: get - uri: https://.freshdesk.com/support/home - body: - encoding: US-ASCII - string: '' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - User-Agent: - - Zammad User Agent - Host: - - ".freshdesk.com" - response: - status: - code: 200 - message: OK - headers: - Date: - - Wed, 30 Jun 2021 09:10:40 GMT - Content-Type: - - text/html; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 200 OK - X-Ratelimit-Limit: - - '300' - X-Ratelimit-Reset: - - '300621091128' - X-Ratelimit-Remaining: - - '196' - - '296' - X-Request-Id: - - 74bf3b84-7234-4b85-b500-a205b06c8faa - Etag: - - W/"634d4f1b6de28ba7fc5e4535e774d734" - X-Rack-Cache: - - miss - Cache-Control: - - max-age=0, private, must-revalidate - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - X-Xss-Protection: - - 1; mode=block X-Ua-Compatible: - IE=Edge,chrome=1 X-Content-Type-Options: @@ -122,20 +49,22 @@ http_interactions: X-Fw-Ratelimiting-Managed: - 'true' X-Ratelimit-Total: - - '200' + - '40' + X-Ratelimit-Remaining: + - '36' X-Ratelimit-Used-Currentrequest: - '1' X-Envoy-Upstream-Service-Time: - - '42' + - '30' X-Trace-Id: - - 00-0414dc296d72176864c0582e7c732b0a-1566f064dbb2a55d-00 + - 00-88a9c09bf2c30bcef8eea4f252e63c6b-0b6c0658c2370f17-00 Server: - fwe body: - encoding: ASCII-8BIT - string: !binary |- - PCFET0NUWVBFIGh0bWw+CgogICAgICAgIDwhLS1baWYgbHQgSUUgN10+PGh0bWwgY2xhc3M9Im5vLWpzIGllNiIgbGFuZz0iZW4iIGRpcj0ibHRyIiBkYXRhLWRhdGUtZm9ybWF0PSJub25fdXMiPjwhW2VuZGlmXS0tPgogICAgICAgIDwhLS1baWYgSUUgN10+PGh0bWwgY2xhc3M9Im5vLWpzIGllNyIgbGFuZz0iZW4iIGRpcj0ibHRyIiBkYXRhLWRhdGUtZm9ybWF0PSJub25fdXMiPjwhW2VuZGlmXS0tPgogICAgICAgIDwhLS1baWYgSUUgOF0+PGh0bWwgY2xhc3M9Im5vLWpzIGllOCIgbGFuZz0iZW4iIGRpcj0ibHRyIiBkYXRhLWRhdGUtZm9ybWF0PSJub25fdXMiPjwhW2VuZGlmXS0tPgogICAgICAgIDwhLS1baWYgSUUgOV0+PGh0bWwgY2xhc3M9Im5vLWpzIGllOSIgbGFuZz0iZW4iIGRpcj0ibHRyIiBkYXRhLWRhdGUtZm9ybWF0PSJub25fdXMiPjwhW2VuZGlmXS0tPgogICAgICAgIDwhLS1baWYgSUUgMTBdPjxodG1sIGNsYXNzPSJuby1qcyBpZTEwIiBsYW5nPSJlbiIgZGlyPSJsdHIiIGRhdGEtZGF0ZS1mb3JtYXQ9Im5vbl91cyI+PCFbZW5kaWZdLS0+CiAgICAgICAgPCEtLVtpZiAoZ3QgSUUgMTApfCEoSUUpXT48IS0tPjxodG1sIGNsYXNzPSJuby1qcyAiIGxhbmc9ImVuIiBkaXI9Imx0ciIgZGF0YS1kYXRlLWZvcm1hdD0ibm9uX3VzIj48IS0tPCFbZW5kaWZdLS0+Cgk8aGVhZD4KCQkKCQk8IS0tIFRpdGxlIGZvciB0aGUgcGFnZSAtLT4KPHRpdGxlPiBTdXBwb3J0IDogWmFtbWFkIEdtYkggPC90aXRsZT4KCjwhLS0gTWV0YSBpbmZvcm1hdGlvbiAtLT4KCiAgICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgogICAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UsY2hyb21lPTEiIC8+CiAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSAiIiAvPgogICAgICA8bWV0YSBuYW1lPSJhdXRob3IiIGNvbnRlbnQ9ICIiIC8+CiAgICAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IlN1cHBvcnQiIC8+ICA8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwczovLzxJTVBPUlRfRlJFU0hERVNLX0VORFBPSU5UX1NVQkRPTUFJTj4uZnJlc2hkZXNrLmNvbS9zdXBwb3J0L3NvbHV0aW9ucyIgLz4gIDxtZXRhIHByb3BlcnR5PSJvZzppbWFnZSIgY29udGVudD0iL2Fzc2V0cy9taXNjL2xvZ28ucG5nPzcwMjAxNyIgLz4gIDxtZXRhIHByb3BlcnR5PSJvZzpzaXRlX25hbWUiIGNvbnRlbnQ9IlphbW1hZCBHbWJIIiAvPiAgPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9ImFydGljbGUiIC8+ICA8bWV0YSBuYW1lPSJ0d2l0dGVyOnRpdGxlIiBjb250ZW50PSJTdXBwb3J0IiAvPiAgPG1ldGEgbmFtZT0idHdpdHRlcjp1cmwiIGNvbnRlbnQ9Imh0dHBzOi8vPElNUE9SVF9GUkVTSERFU0tfRU5EUE9JTlRfU1VCRE9NQUlOPi5mcmVzaGRlc2suY29tL3N1cHBvcnQvc29sdXRpb25zIiAvPiAgPG1ldGEgbmFtZT0idHdpdHRlcjppbWFnZSIgY29udGVudD0iL2Fzc2V0cy9taXNjL2xvZ28ucG5nPzcwMjAxNyIgLz4gIDxtZXRhIG5hbWU9InR3aXR0ZXI6Y2FyZCIgY29udGVudD0ic3VtbWFyeSIgLz4gIDxsaW5rIHJlbD0iY2Fub25pY2FsIiBocmVmPSJodHRwczovLzxJTVBPUlRfRlJFU0hERVNLX0VORFBPSU5UX1NVQkRPTUFJTj4uZnJlc2hkZXNrLmNvbS9zdXBwb3J0L3NvbHV0aW9ucyIgLz4gCgo8IS0tIFJlc3BvbnNpdmUgc2V0dGluZyAtLT4KPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBocmVmPSIvYXNzZXRzL3RvdWNoL3RvdWNoLWljb24taXBob25lLnBuZyIgLz4KICAgICAgICA8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSI3Mng3MiIgaHJlZj0iL2Fzc2V0cy90b3VjaC90b3VjaC1pY29uLWlwYWQucG5nIiAvPgogICAgICAgIDxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgc2l6ZXM9IjExNHgxMTQiIGhyZWY9Ii9hc3NldHMvdG91Y2gvdG91Y2gtaWNvbi1pcGhvbmUtcmV0aW5hLnBuZyIgLz4KICAgICAgICA8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSIxNDR4MTQ0IiBocmVmPSIvYXNzZXRzL3RvdWNoL3RvdWNoLWljb24taXBhZC1yZXRpbmEucG5nIiAvPgogICAgICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIHVzZXItc2NhbGFibGU9bm8sIGluaXRpYWwtc2NhbGU9MS4wIiAvPiAKCQkKCQk8IS0tIEFkZGluZyBtZXRhIHRhZyBmb3IgQ1NSRiB0b2tlbiAtLT4KCQk8bWV0YSBjb250ZW50PSJhdXRoZW50aWNpdHlfdG9rZW4iIG5hbWU9ImNzcmYtcGFyYW0iIC8+CjxtZXRhIGNvbnRlbnQ9InZzdUNNUHRabCtQL2pFaGJodGJJcVZXT2dROGJuU0RSV2pkYWgyRXNkSUU9IiBuYW1lPSJjc3JmLXRva2VuIiAvPgoJCTwhLS0gRW5kIG1ldGEgdGFnIGZvciBDU1JGIHRva2VuIC0tPgoJCQoJCTwhLS0gRmF2IGljb24gZm9yIHBvcnRhbCAtLT4KCQk8bGluayByZWw9J3Nob3J0Y3V0IGljb24nIGhyZWY9Jy9hc3NldHMvbWlzYy9mYXZpY29uLmljbz83MDIwMTcnIC8+CgoJCTwhLS0gQmFzZSBzdHlsZXNoZWV0IC0tPgogCgkJPGxpbmsgaHJlZj0iaHR0cHM6Ly9ldWMtYXNzZXRzNS5mcmVzaGRlc2suY29tL2Fzc2V0cy9jZG4vcG9ydGFsX3ByaW50LWEzODlmMWVmM2U4NzI2MWU3MjY0ZTNlNzA0MTZkNzA0LmNzcyIgbWVkaWE9InByaW50IiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiAvPgoJICAJCTxsaW5rIGhyZWY9Imh0dHBzOi8vZXVjLWFzc2V0czIuZnJlc2hkZXNrLmNvbS9hc3NldHMvY2RuL2ZhbGNvbl9wb3J0YWxfdXRpbHMtMTE2MzYyOTQ2OTRkMGVmMjI4N2YwYTAxNzA4NTJjNDYuY3NzIiBtZWRpYT0ic2NyZWVuIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiAvPgkKCgkJCgkJPCEtLSBUaGVtZSBzdHlsZXNoZWV0IC0tPgoKCQk8bGluayBocmVmPSIvc3VwcG9ydC90aGVtZS5jc3M/dj0yJmFtcDtkPTE2MjA2MzIzMjQiIG1lZGlhPSJzY3JlZW4iIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgoKCQk8IS0tIEdvb2dsZSBmb250IHVybCBpZiBwcmVzZW50IC0tPgoJCTxsaW5rIGhyZWY9J2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Tb3VyY2UrU2FucytQcm86cmVndWxhcixpdGFsaWMsNjAwLDcwMCw3MDBpdGFsaWN8UG9wcGluczpyZWd1bGFyLDYwMCw3MDAnIHJlbD0nc3R5bGVzaGVldCcgdHlwZT0ndGV4dC9jc3MnPgoKCQk8IS0tIEluY2x1ZGluZyBkZWZhdWx0IHBvcnRhbCBiYXNlZCBzY3JpcHQgZnJhbWV3b3JrIGF0IHRoZSB0b3AgLS0+CgkJCTxzY3JpcHQgc3JjPSJodHRwczovL2V1Yy1hc3NldHMxMC5mcmVzaGRlc2suY29tL2Fzc2V0cy9jZG4vcG9ydGFsX2hlYWQtOTBhM2EzYjUxYzBjZDdhMDlmNzlkYzU3MWE4NmQxYTcuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CgkJPCEtLSBJbmNsdWRpbmcgc3ludGV4aGlnaGxpZ2h0ZXIgZm9yIHBvcnRhbCAtLT4KCQk8c2NyaXB0IHNyYz0iaHR0cHM6Ly9ldWMtYXNzZXRzNi5mcmVzaGRlc2suY29tL2Fzc2V0cy9jZG4vcHJpc20tODBlNGQ5NWFhY2JjOWExMzM0ZDA2ZjIyYTIyNGU4YjEuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CgoJCQoKCQk8IS0tIEFjY2VzcyBwb3J0YWwgc2V0dGluZ3MgaW5mb3JtYXRpb24gdmlhIGphdmFzY3JpcHQgLS0+CgkJIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4gICAgIHZhciBwb3J0YWwgPSB7Imxhbmd1YWdlIjoiZW4iLCJuYW1lIjoiWmFtbWFkIEdtYkgiLCJjb250YWN0X2luZm8iOiIiLCJjdXJyZW50X3BhZ2VfbmFtZSI6InBvcnRhbF9ob21lIiwiY3VycmVudF90YWIiOiJob21lIiwidmF1bHRfc2VydmljZSI6eyJ1cmwiOiJodHRwczovL3ZhdWx0LXNlcnZpY2UtZXUuZnJlc2h3b3Jrcy5jb20vZGF0YSIsIm1heF90cnkiOjIsInByb2R1Y3RfbmFtZSI6ImZkIn0sImN1cnJlbnRfYWNjb3VudF9pZCI6MTg5MDU2MCwicHJlZmVyZW5jZXMiOnsiYmdfY29sb3IiOiIjZjNmNWY3IiwiaGVhZGVyX2NvbG9yIjoiI2ZmZmZmZiIsImhlbHBfY2VudGVyX2NvbG9yIjoiI2YzZjVmNyIsImZvb3Rlcl9jb2xvciI6IiMxODMyNDciLCJ0YWJfY29sb3IiOiIjZmZmZmZmIiwidGFiX2hvdmVyX2NvbG9yIjoiIzAyYjg3NSIsImJ0bl9iYWNrZ3JvdW5kIjoiI2YzZjVmNyIsImJ0bl9wcmltYXJ5X2JhY2tncm91bmQiOiIjMDJiODc1IiwiYmFzZUZvbnQiOiJTb3VyY2UgU2FucyBQcm8iLCJ0ZXh0Q29sb3IiOiIjMTgzMjQ3IiwiaGVhZGluZ3NGb250IjoiUG9wcGlucyIsImhlYWRpbmdzQ29sb3IiOiIjMTgzMjQ3IiwibGlua0NvbG9yIjoiIzE4MzI0NyIsImxpbmtDb2xvckhvdmVyIjoiIzI3NTNkNyIsImlucHV0Rm9jdXNSaW5nQ29sb3IiOiIjMDJCODc1Iiwibm9uUmVzcG9uc2l2ZSI6ZmFsc2UsInBlcnNvbmFsaXplZF9hcnRpY2xlcyI6dHJ1ZX0sImltYWdlX3BsYWNlaG9sZGVycyI6eyJzcGFjZXIiOiJodHRwczovL2V1Yy1hc3NldHMxMC5mcmVzaGRlc2suY29tL2Fzc2V0cy9taXNjL3NwYWNlci5naWYiLCJwcm9maWxlX3RodW1iIjoiaHR0cHM6Ly9ldWMtYXNzZXRzMy5mcmVzaGRlc2suY29tL2Fzc2V0cy9taXNjL3Byb2ZpbGVfYmxhbmtfdGh1bWItZTFhMzQwMzNiMzA3M2NiODBmNWJlY2MwYjY0NGJmY2EuanBnIiwicHJvZmlsZV9tZWRpdW0iOiJodHRwczovL2V1Yy1hc3NldHM0LmZyZXNoZGVzay5jb20vYXNzZXRzL21pc2MvcHJvZmlsZV9ibGFua19tZWRpdW0tNGFlMjI4MGE0NjBlYWUzYzg3MGFjYjdhNzU0NWI3ZTUuanBnIn0sImZhbGNvbl9wb3J0YWxfdGhlbWUiOnRydWV9OyAgICAgdmFyIGF0dGFjaG1lbnRfc2l6ZSA9IDIwOyAgPC9zY3JpcHQ+IAoKCgkJCgk8L2hlYWQ+Cgk8Ym9keT4KICAgICAgICAgICAgCQoJCQoJCQoJCQoJPGhlYWRlciBjbGFzcz0iYmFubmVyIj4KCQk8ZGl2IGNsYXNzPSJiYW5uZXItd3JhcHBlciBwYWdlIj4KCQkJPGRpdiBjbGFzcz0iYmFubmVyLXRpdGxlIj4KCQkJCTxhIGhyZWY9Ii9zdXBwb3J0L2hvbWUiY2xhc3M9J3BvcnRhbC1sb2dvJz48c3BhbiBjbGFzcz0icG9ydGFsLWltZyI+PGk+PC9pPgogICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPScvYXNzZXRzL21pc2MvbG9nby5wbmcnIGFsdD0iTG9nbyIKICAgICAgICAgICAgICAgICAgICAgICAgb25lcnJvcj0iZGVmYXVsdF9pbWFnZV9lcnJvcih0aGlzKSIgZGF0YS10eXBlPSJsb2dvIiAvPgogICAgICAgICAgICAgICAgIDwvc3Bhbj48L2E+CgkJCQk8aDEgY2xhc3M9ImVsbGlwc2lzIGhlYWRpbmciPlphbW1hZCBHbWJIPC9oMT4KCQkJPC9kaXY+CgkJCTxuYXYgY2xhc3M9ImJhbm5lci1uYXYiPgoJCQkJIDxkaXYgY2xhc3M9IndlbGNvbWUiPldlbGNvbWUgPGI+PC9iPiA8L2Rpdj4gIDxiPjxhIGhyZWY9Ii9zdXBwb3J0L2xvZ2luIj48Yj5Mb2dpbjwvYj48L2E+PC9iPiAmbmJzcDs8Yj48YSBocmVmPSIvc3VwcG9ydC9zaWdudXAiPjxiPlNpZ24gdXA8L2I+PC9hPjwvYj4KCQkJPC9uYXY+CgkJPC9kaXY+Cgk8L2hlYWRlcj4KCTxuYXYgY2xhc3M9InBhZ2UtdGFicyI+CgkJPGRpdiBjbGFzcz0icGFnZSBuby1wYWRkaW5nIG5vLWhlYWRlci10YWJzIj4KCQkJCgkJCQk8YSBkYXRhLXRvZ2dsZS1kb209IiNoZWFkZXItdGFicyIgaHJlZj0iIyIgZGF0YS1hbmltYXRlZD0idHJ1ZSIgY2xhc3M9Im1vYmlsZS1pY29uLW5hdi1tZW51IHNob3ctaW4tbW9iaWxlIj48L2E+CgkJCQk8ZGl2IGNsYXNzPSJuYXYtbGluayIgaWQ9ImhlYWRlci10YWJzIj4KCQkJCQkKCQkJCQkJCgkJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9ob21lIiBjbGFzcz0iYWN0aXZlIj5Ib21lPC9hPgoJCQkJCQkKCQkJCQkKCQkJCQkJCgkJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9zb2x1dGlvbnMiIGNsYXNzPSIiPlNvbHV0aW9uczwvYT4KCQkJCQkJCgkJCQkJCgkJCQk8L2Rpdj4KCQkJCgkJPC9kaXY+Cgk8L25hdj4KCjwhLS0gU2VhcmNoIGFuZCBwYWdlIGxpbmtzIGZvciB0aGUgcGFnZSAtLT4KCgoKPGRpdiBjbGFzcz0icGFnZSI+CgkKCQoJPCEtLSBTZWFyY2ggYW5kIHBhZ2UgbGlua3MgZm9yIHRoZSBwYWdlIC0tPgoJCgkJPHNlY3Rpb24gY2xhc3M9ImhlbHAtY2VudGVyIHJvdW5kZWQtNiI+CQoJCQk8ZGl2IGNsYXNzPSJoYy1zZWFyY2giPgoJCQkJPGRpdiBjbGFzcz0iaGMtc2VhcmNoLWMiPgoJCQkJCTxoMiBjbGFzcz0iaGVhZGluZyBoaWRlLWluLW1vYmlsZSI+SG93IGNhbiB3ZSBoZWxwIHlvdSB0b2RheT88L2gyPgoJCQkJCTxmb3JtIGNsYXNzPSJoYy1zZWFyY2gtZm9ybSBwcmludC0tcmVtb3ZlIiBhdXRvY29tcGxldGU9Im9mZiIgYWN0aW9uPSIvc3VwcG9ydC9zZWFyY2giIGlkPSJoYy1zZWFyY2gtZm9ybSIgZGF0YS1jc3JmLWlnbm9yZT0idHJ1ZSI+Cgk8ZGl2IGNsYXNzPSJoYy1zZWFyY2gtaW5wdXQiPgoJPGxhYmVsIGZvcj0ic3VwcG9ydC1zZWFyY2gtaW5wdXQiIGNsYXNzPSJoaWRlIj5FbnRlciB5b3VyIHNlYXJjaCB0ZXJtIGhlcmUuLi48L2xhYmVsPgoJCTxpbnB1dCBwbGFjZWhvbGRlcj0iRW50ZXIgeW91ciBzZWFyY2ggdGVybSBoZXJlLi4uIiB0eXBlPSJ0ZXh0IiAKCQkJbmFtZT0idGVybSIgY2xhc3M9InNwZWNpYWwiIHZhbHVlPSIiIAogICAgICAgICAgICByZWw9InBhZ2Utc2VhcmNoIiBkYXRhLW1heC1tYXRjaGVzPSIxMCIgaWQ9InN1cHBvcnQtc2VhcmNoLWlucHV0Ij4KCTwvZGl2PgoJPGRpdiBjbGFzcz0iaGMtc2VhcmNoLWJ1dHRvbiI+CgkJPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiB0eXBlPSJzdWJtaXQiIGF1dG9jb21wbGV0ZT0ib2ZmIj4KCQkJPGkgY2xhc3M9Im1vYmlsZS1pY29uLXNlYXJjaCBoaWRlLXRhYmxldCI+PC9pPgoJCQk8c3BhbiBjbGFzcz0iaGlkZS1pbi1tb2JpbGUiPgoJCQkJU2VhcmNoCgkJCTwvc3Bhbj4KCQk8L2J1dHRvbj4JCgk8L2Rpdj4KPC9mb3JtPgoJCQkJPC9kaXY+CgkJCTwvZGl2PgoJCQk8ZGl2IGNsYXNzPSJoYy1uYXYgIj4JCQkJCgkJCQkgPG5hdj4gICA8ZGl2PgogICAgICAgICAgICAgIDxhIGhyZWY9Ii9zdXBwb3J0L3RpY2tldHMvbmV3IiBjbGFzcz0ibW9iaWxlLWljb24tbmF2LW5ld3RpY2tldCBuZXctdGlja2V0IGVsbGlwc2lzIiB0aXRsZT0iTmV3IHN1cHBvcnQgdGlja2V0Ij4KICAgICAgICAgICAgICAgIDxzcGFuPiBOZXcgc3VwcG9ydCB0aWNrZXQgPC9zcGFuPgogICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC9kaXY+ICAgPGRpdj4KICAgICAgICAgICAgICA8YSBocmVmPSIvc3VwcG9ydC90aWNrZXRzIiBjbGFzcz0ibW9iaWxlLWljb24tbmF2LXN0YXR1cyBjaGVjay1zdGF0dXMgZWxsaXBzaXMiIHRpdGxlPSJDaGVjayB0aWNrZXQgc3RhdHVzIj4KICAgICAgICAgICAgICAgIDxzcGFuPkNoZWNrIHRpY2tldCBzdGF0dXM8L3NwYW4+CiAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L2Rpdj4gIDwvbmF2PgoJCQk8L2Rpdj4KCQk8L3NlY3Rpb24+CgkKCgk8IS0tIE5vdGlmaWNhdGlvbiBNZXNzYWdlcyAtLT4KCSA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC13aXRoLWNsb3NlIG5vdGljZSIgaWQ9Im5vdGljZWFqYXgiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij48L2Rpdj4gCgoJCgk8ZGl2IGNsYXNzPSJjLXdyYXBwZXIiPgkJCgkJCjxzZWN0aW9uIGNsYXNzPSJtYWluIGNvbnRlbnQgcm91bmRlZC02IG1pbi1oZWlnaHQtb24tZGVza3RvcCBmYy1wb3J0YWwtc29sdXRpb24taG9tZSIgaWQ9InNvbHV0aW9ucy1pbmRleC1ob21lIj4KCTxoMiBjbGFzcz0iaGVhZGluZyI+S25vd2xlZGdlIGJhc2U8L2gyPgoJCgkJCgkJPGRpdiBjbGFzcz0iY3MtcyI+CgkJCTxoMyBjbGFzcz0iaGVhZGluZyI+PGEgaHJlZj0iL3N1cHBvcnQvc29sdXRpb25zLzgwMDAwMjgyNjY0Ij5HZW5lcmFsPC9hPjwvaDM+CgkJCTxkaXYgY2xhc3M9ImNzLWctYyI+CgkJCQkKCQkJCQk8c2VjdGlvbiBjbGFzcz0iY3MtZyBhcnRpY2xlLWxpc3QiPgoJCQkJCQk8ZGl2IGNsYXNzPSJsaXN0LWxlYWQiPgoJCQkJCQkJPGEgaHJlZj0iL3N1cHBvcnQvc29sdXRpb25zL2ZvbGRlcnMvODAwMDA0MTc1OTAiIHRpdGxlPSJGQVEiPiBGQVEgPHNwYW4gY2xhc3M9J2l0ZW0tY291bnQnPjA8L3NwYW4+PC9hPgoJCQkJCQk8L2Rpdj4KCQkJCQkJCgkJCQkJPC9zZWN0aW9uPgoJCQkJCgkJCQkJPHNlY3Rpb24gY2xhc3M9ImNzLWcgYXJ0aWNsZS1saXN0Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGlzdC1sZWFkIj4KCQkJCQkJCTxhIGhyZWY9Ii9zdXBwb3J0L3NvbHV0aW9ucy9mb2xkZXJzLzgwMDAwNDE3NTkxIiB0aXRsZT0iR2V0dGluZyBTdGFydGVkIj4gR2V0dGluZyBTdGFydGVkIDxzcGFuIGNsYXNzPSdpdGVtLWNvdW50Jz4wPC9zcGFuPjwvYT4KCQkJCQkJPC9kaXY+CgkJCQkJCQoJCQkJCTwvc2VjdGlvbj4KCQkJCQoJCQk8L2Rpdj4KCQk8L2Rpdj4JCgkJCgkKCQkKCQk8ZGl2IGNsYXNzPSJjcy1zIj4KCQkJPGgzIGNsYXNzPSJoZWFkaW5nIj48YSBocmVmPSIvc3VwcG9ydC9zb2x1dGlvbnMvODAwMDAyODI2OTMiPkdldHRpbmcgc3RhcnRlZCB3aXRoIHVzPC9hPjwvaDM+CgkJCTxkaXYgY2xhc3M9ImNzLWctYyI+CgkJCQkKCQkJCQk8c2VjdGlvbiBjbGFzcz0iY3MtZyBhcnRpY2xlLWxpc3QiPgoJCQkJCQk8ZGl2IGNsYXNzPSJsaXN0LWxlYWQiPgoJCQkJCQkJPGEgaHJlZj0iL3N1cHBvcnQvc29sdXRpb25zL2ZvbGRlcnMvODAwMDA0MTc2MzQiIHRpdGxlPSJZb3VyIGFjY291bnQiPiBZb3VyIGFjY291bnQgPHNwYW4gY2xhc3M9J2l0ZW0tY291bnQnPjA8L3NwYW4+PC9hPgoJCQkJCQk8L2Rpdj4KCQkJCQkJCgkJCQkJPC9zZWN0aW9uPgoJCQkJCgkJCQkJPHNlY3Rpb24gY2xhc3M9ImNzLWcgYXJ0aWNsZS1saXN0Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGlzdC1sZWFkIj4KCQkJCQkJCTxhIGhyZWY9Ii9zdXBwb3J0L3NvbHV0aW9ucy9mb2xkZXJzLzgwMDAwNDE3NjM1IiB0aXRsZT0iWW91ciBkb2N1bWVudHMiPiBZb3VyIGRvY3VtZW50cyA8c3BhbiBjbGFzcz0naXRlbS1jb3VudCc+MDwvc3Bhbj48L2E+CgkJCQkJCTwvZGl2PgoJCQkJCQkKCQkJCQk8L3NlY3Rpb24+CgkJCQkKCQkJPC9kaXY+CgkJPC9kaXY+CQoJCQoJCgkJCgkJPGRpdiBjbGFzcz0iY3MtcyI+CgkJCTxoMyBjbGFzcz0iaGVhZGluZyI+PGEgaHJlZj0iL3N1cHBvcnQvc29sdXRpb25zLzgwMDAwMjgyNjk0Ij5GQVFzOjwvYT48L2gzPgoJCQk8ZGl2IGNsYXNzPSJjcy1nLWMiPgoJCQkJCgkJCQkJPHNlY3Rpb24gY2xhc3M9ImNzLWcgYXJ0aWNsZS1saXN0Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGlzdC1sZWFkIj4KCQkJCQkJCTxhIGhyZWY9Ii9zdXBwb3J0L3NvbHV0aW9ucy9mb2xkZXJzLzgwMDAwNDE3NjM2IiB0aXRsZT0iVHJpYWwgRkFRcyI+IFRyaWFsIEZBUXMgPHNwYW4gY2xhc3M9J2l0ZW0tY291bnQnPjA8L3NwYW4+PC9hPgoJCQkJCQk8L2Rpdj4KCQkJCQkJCgkJCQkJPC9zZWN0aW9uPgoJCQkJCgkJCTwvZGl2PgoJCTwvZGl2PgkKCQkKCQoJCQoJCTxkaXYgY2xhc3M9ImNzLXMiPgoJCQk8aDMgY2xhc3M9ImhlYWRpbmciPjxhIGhyZWY9Ii9zdXBwb3J0L3NvbHV0aW9ucy84MDAwMDI4MjY5NSI+RmlsZXMgYW5kIGZvbGRlcnM8L2E+PC9oMz4KCQkJPGRpdiBjbGFzcz0iY3MtZy1jIj4KCQkJCQoJCQkJCTxzZWN0aW9uIGNsYXNzPSJjcy1nIGFydGljbGUtbGlzdCI+CgkJCQkJCTxkaXYgY2xhc3M9Imxpc3QtbGVhZCI+CgkJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9zb2x1dGlvbnMvZm9sZGVycy84MDAwMDQxNzYzNyIgdGl0bGU9IlNoYXJlZCBmaWxlcyI+IFNoYXJlZCBmaWxlcyA8c3BhbiBjbGFzcz0naXRlbS1jb3VudCc+MDwvc3Bhbj48L2E+CgkJCQkJCTwvZGl2PgoJCQkJCQkKCQkJCQk8L3NlY3Rpb24+CgkJCQkKCQkJCQk8c2VjdGlvbiBjbGFzcz0iY3MtZyBhcnRpY2xlLWxpc3QiPgoJCQkJCQk8ZGl2IGNsYXNzPSJsaXN0LWxlYWQiPgoJCQkJCQkJPGEgaHJlZj0iL3N1cHBvcnQvc29sdXRpb25zL2ZvbGRlcnMvODAwMDA0MTc2MzgiIHRpdGxlPSJEZWxldGVkIGZpbGVzIj4gRGVsZXRlZCBmaWxlcyA8c3BhbiBjbGFzcz0naXRlbS1jb3VudCc+MDwvc3Bhbj48L2E+CgkJCQkJCTwvZGl2PgoJCQkJCQkKCQkJCQk8L3NlY3Rpb24+CgkJCQkKCQkJPC9kaXY+CgkJPC9kaXY+CQoJCQoJCgkJCgkJPGRpdiBjbGFzcz0iY3MtcyI+CgkJCTxoMyBjbGFzcz0iaGVhZGluZyI+PGEgaHJlZj0iL3N1cHBvcnQvc29sdXRpb25zLzgwMDAwMjgyNjk2Ij5QcmVtaXVtIGNsdWI8L2E+PC9oMz4KCQkJPGRpdiBjbGFzcz0iY3MtZy1jIj4KCQkJCQoJCQkJCTxzZWN0aW9uIGNsYXNzPSJjcy1nIGFydGljbGUtbGlzdCI+CgkJCQkJCTxkaXYgY2xhc3M9Imxpc3QtbGVhZCI+CgkJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9zb2x1dGlvbnMvZm9sZGVycy84MDAwMDQxNzYzOSIgdGl0bGU9IlByZW1pdW0gZmVhdHVyZXMiPiBQcmVtaXVtIGZlYXR1cmVzIDxzcGFuIGNsYXNzPSdpdGVtLWNvdW50Jz4wPC9zcGFuPjwvYT4KCQkJCQkJPC9kaXY+CgkJCQkJCQoJCQkJCTwvc2VjdGlvbj4KCQkJCQoJCQkJCTxzZWN0aW9uIGNsYXNzPSJjcy1nIGFydGljbGUtbGlzdCI+CgkJCQkJCTxkaXYgY2xhc3M9Imxpc3QtbGVhZCI+CgkJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9zb2x1dGlvbnMvZm9sZGVycy84MDAwMDQxNzY0MCIgdGl0bGU9IlByZW1pdW0gc3Vic2NyaXB0aW9uIj4gUHJlbWl1bSBzdWJzY3JpcHRpb24gPHNwYW4gY2xhc3M9J2l0ZW0tY291bnQnPjA8L3NwYW4+PC9hPgoJCQkJCQk8L2Rpdj4KCQkJCQkJCgkJCQkJPC9zZWN0aW9uPgoJCQkJCgkJCTwvZGl2PgoJCTwvZGl2PgkKCQkKCQo8L3NlY3Rpb24+CgoKCgk8L2Rpdj4KCQoKCQoKPC9kaXY+CgoJPGZvb3RlciBjbGFzcz0iZm9vdGVyIHJvdW5kZWQtNiI+CgkJPG5hdiBjbGFzcz0iZm9vdGVyLWxpbmtzIHBhZ2Ugbm8tcGFkZGluZyI+CgkJCQoJCQkJCQoJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9ob21lIiBjbGFzcz0iYWN0aXZlIj5Ib21lPC9hPgoJCQkJCQoJCQkJCQk8YSBocmVmPSIvc3VwcG9ydC9zb2x1dGlvbnMiIGNsYXNzPSIiPlNvbHV0aW9uczwvYT4KCQkJCQkKCQkJCgkJCQoJCQkgIDxhIGhyZWY9IiNwb3J0YWwtY29va2llLWluZm8iIHJlbD0iZnJlc2hkaWFsb2ciIGRhdGEtbGF6eS1sb2FkPSJ0cnVlIiBjbGFzcz0iY29va2llLWxpbmsiCiAgICAgICAgZGF0YS13aWR0aD0iNDUwcHgiIHRpdGxlPSJXaHkgd2UgbG92ZSBDb29raWVzIiBkYXRhLXRlbXBsYXRlLWZvb3Rlcj0iIj4KICAgICAgICBDb29raWUgcG9saWN5CiAgICAgIDwvYT4gPGRpdiBpZD0icG9ydGFsLWNvb2tpZS1pbmZvIiBjbGFzcz0iaGlkZSI+PHRleHRhcmVhPgogICAgICAgIDxwPldlIHVzZSBjb29raWVzIHRvIHRyeSBhbmQgZ2l2ZSB5b3UgYSBiZXR0ZXIgZXhwZXJpZW5jZSBpbiBGcmVzaGRlc2suIDwvcD4KICAgICAgICA8cD5Zb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgd2hhdCBraW5kIG9mIGNvb2tpZXMgd2UgdXNlLCB3aHksIGFuZCBob3cgZnJvbSBvdXIgPGEgaHJlZj0iaHR0cDovL2ZyZXNoZGVzay5jb20vcHJpdmFjeS8iIHRhcmdldD0iX2JsYW5rIj5Qcml2YWN5IFBvbGljeTwvYT4uIElmIHlvdSBoYXRlIGNvb2tpZXMsIG9yIGFyZSBqdXN0IG9uIGEgZGlldCwgeW91IGNhbiBkaXNhYmxlIHRoZW0gYWx0b2dldGhlciB0b28uIEp1c3Qgbm90ZSB0aGF0IHRoZSBGcmVzaGRlc2sgc2VydmljZSBpcyBwcmV0dHkgYmlnIG9uIHNvbWUgY29va2llcyAod2UgbG92ZSB0aGUgY2hvY28tY2hpcCBvbmVzKSwgYW5kIHNvbWUgcG9ydGlvbnMgb2YgRnJlc2hkZXNrIG1heSBub3Qgd29yayBwcm9wZXJseSBpZiB5b3UgZGlzYWJsZSBjb29raWVzLjwvcD4KICAgICAgICA8cD5XZeKAmWxsIGFsc28gYXNzdW1lIHlvdSBhZ3JlZSB0byB0aGUgd2F5IHdlIHVzZSBjb29raWVzIGFuZCBhcmUgb2sgd2l0aCBpdCBhcyBkZXNjcmliZWQgaW4gb3VyIDxhIGhyZWY9Imh0dHA6Ly9mcmVzaGRlc2suY29tL3ByaXZhY3kvIiB0YXJnZXQ9Il9ibGFuayI+UHJpdmFjeSBQb2xpY3k8L2E+LCB1bmxlc3MgeW91IGNob29zZSB0byBkaXNhYmxlIHRoZW0gYWx0b2dldGhlciB0aHJvdWdoIHlvdXIgYnJvd3Nlci48L3A+CiAgICAgIDwvdGV4dGFyZWE+PC9kaXY+IAoJCTwvbmF2PgoJPC9mb290ZXI+CgkgIDxkaXYgY2xhc3M9ImNvcHlyaWdodCI+CiAgICAgICAgPGEgaHJlZj1odHRwczovL2ZyZXNoZGVzay5jb20vP3V0bV9zb3VyY2U9cG9ydGFsJnV0bV9tZWRpdW09cmVmbGluayZ1dG1fY2FtcGFpZ249cG9ydGFsX3JlZmxpbmsgdGFyZ2V0PSJfYmxhbmsiPiBIZWxwIERlc2sgU29mdHdhcmUgPC9hPgogICAgICAgIGJ5IEZyZXNoZGVzawogICAgICA8L2Rpdj4gCgoKCgoJCQk8c2NyaXB0IHNyYz0iaHR0cHM6Ly9ldWMtYXNzZXRzMi5mcmVzaGRlc2suY29tL2Fzc2V0cy9jZG4vcG9ydGFsX2JvdHRvbS1jNzA0MjBjNTlkZjk1MmY3YWI0ZjhjNGU5MzAxY2M4Ni5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4KCQk8c2NyaXB0IHNyYz0iaHR0cHM6Ly9ldWMtYXNzZXRzOC5mcmVzaGRlc2suY29tL2Fzc2V0cy9jZG4vcmVkYWN0b3ItYmUwOTI2NDY4NjdhZmI0M2UzMGQxMDY3YWI3OWM5YTcuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CgkJPHNjcmlwdCBzcmM9Imh0dHBzOi8vZXVjLWFzc2V0czguZnJlc2hkZXNrLmNvbS9hc3NldHMvY2RuL2xhbmcvZW4tZDU4ZDY4OTEyMzY0ZWE2OGEwMWJkZTkzMjc3NGY5ZGQuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CgkJPCEtLSBmb3IgaTE4bi1qcyB0cmFuc2xhdGlvbnMgLS0+CiAgCQk8c2NyaXB0IHNyYz0iaHR0cHM6Ly9ldWMtYXNzZXRzOS5mcmVzaGRlc2suY29tL2Fzc2V0cy9jZG4vaTE4bi9wb3J0YWwvZW4tZTc1N2QzYjNmMDMzNjBlZjZkMWM3Y2Y0MjY0Y2RiYjQuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CgkJPCEtLSBJbmNsdWRpbmcgZGVmYXVsdCBwb3J0YWwgYmFzZWQgc2NyaXB0IGF0IHRoZSBib3R0b20gLS0+CgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLzwhW0NEQVRBWwoJCglqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewoJCQkJCQoJCS8vIFNldHRpbmcgdGhlIGxvY2FsZSBmb3IgbW9tZW50IGpzCgkJbW9tZW50LmxhbmcoJ2VuJyk7CgoJCXZhciB2YWxpZGF0aW9uX21lYXNzYWdlcyA9IHsicmVxdWlyZWQiOiJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIsInJlbW90ZSI6IlBsZWFzZSBmaXggdGhpcyBmaWVsZC4iLCJlbWFpbCI6IlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuIiwidXJsIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgVVJMLiIsImRhdGUiOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlLiIsImRhdGVJU08iOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlICggSVNPICkuIiwibnVtYmVyIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgbnVtYmVyLiIsImRpZ2l0cyI6IlBsZWFzZSBlbnRlciBvbmx5IGRpZ2l0cy4iLCJjcmVkaXRjYXJkIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgY3JlZGl0IGNhcmQgbnVtYmVyLiIsImVxdWFsVG8iOiJQbGVhc2UgZW50ZXIgdGhlIHNhbWUgdmFsdWUgYWdhaW4uIiwidHdvX2RlY2ltYWxfcGxhY2Vfd2FybmluZyI6IlZhbHVlIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiAyIGRlY2ltYWwgZGlnaXRzIiwic2VsZWN0X2F0bGVhc3Rfb25lIjoiU2VsZWN0IGF0IGxlYXN0IG9uZSBvcHRpb24uIiwic2VsZWN0Ml9taW5pbXVtX2xpbWl0IjoiUGxlYXNlIHR5cGUgJXtjaGFyX2NvdW50fSBvciBtb3JlIGxldHRlcnMiLCJzZWxlY3QyX21heGltdW1fbGltaXQiOiJZb3UgY2FuIG9ubHkgc2VsZWN0ICV7bGltaXR9ICV7Y29udGFpbmVyfSIsIm1heGxlbmd0aCI6IlBsZWFzZSBlbnRlciBubyBtb3JlIHRoYW4gezB9IGNoYXJhY3RlcnMuIiwibWlubGVuZ3RoIjoiUGxlYXNlIGVudGVyIGF0IGxlYXN0IHswfSBjaGFyYWN0ZXJzLiIsInJhbmdlbGVuZ3RoIjoiUGxlYXNlIGVudGVyIGEgdmFsdWUgYmV0d2VlbiB7MH0gYW5kIHsxfSBjaGFyYWN0ZXJzIGxvbmcuIiwicmFuZ2UiOiJQbGVhc2UgZW50ZXIgYSB2YWx1ZSBiZXR3ZWVuIHswfSBhbmQgezF9LiIsIm1heCI6IlBsZWFzZSBlbnRlciBhIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB7MH0uIiwibWluIjoiUGxlYXNlIGVudGVyIGEgdmFsdWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHswfS4iLCJzZWxlY3QyX21heGltdW1fbGltaXRfanEiOiJZb3UgY2FuIG9ubHkgc2VsZWN0IHswfSB7MX0iLCJmYWNlYm9va19saW1pdF9leGNlZWQiOiJZb3VyIEZhY2Vib29rIHJlcGx5IHdhcyBvdmVyIDgwMDAgY2hhcmFjdGVycy4gWW91J2xsIGhhdmUgdG8gYmUgbW9yZSBjbGV2ZXIuIiwibWVzc2VuZ2VyX2xpbWl0X2V4Y2VlZGVkIjoiT29wcyEgWW91IGhhdmUgZXhjZWVkZWQgTWVzc2VuZ2VyIFBsYXRmb3JtJ3MgY2hhcmFjdGVyIGxpbWl0LiBQbGVhc2UgbW9kaWZ5IHlvdXIgcmVzcG9uc2UuIiwibm90X2VxdWFsX3RvIjoiVGhpcyBlbGVtZW50IHNob3VsZCBub3QgYmUgZXF1YWwgdG8iLCJlbWFpbF9hZGRyZXNzX2ludmFsaWQiOiJPbmUgb3IgbW9yZSBlbWFpbCBhZGRyZXNzZXMgYXJlIGludmFsaWQuIiwidHdpdHRlcl9saW1pdF9leGNlZWQiOiJPb3BzISBZb3UgaGF2ZSBleGNlZWRlZCBUd2l0dGVyJ3MgY2hhcmFjdGVyIGxpbWl0LiBZb3UnbGwgaGF2ZSB0byBtb2RpZnkgeW91ciByZXNwb25zZS4iLCJwYXNzd29yZF9kb2VzX25vdF9tYXRjaCI6IlRoZSBwYXNzd29yZHMgZG9uJ3QgbWF0Y2guIFBsZWFzZSB0cnkgYWdhaW4uIiwidmFsaWRfaG91cnMiOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBob3Vycy4iLCJyZXBseV9saW1pdF9leGNlZWQiOiJZb3VyIHJlcGx5IHdhcyBvdmVyIDIwMDAgY2hhcmFjdGVycy4gWW91J2xsIGhhdmUgdG8gYmUgbW9yZSBjbGV2ZXIuIiwidXJsX2Zvcm1hdCI6IkludmFsaWQgVVJMIGZvcm1hdCIsInVybF93aXRob3V0X3NsYXNoIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgVVJMIHdpdGhvdXQgJy8nIiwibGlua19iYWNrX3VybCI6IlBsZWFzZSBlbnRlciBhIHZhbGlkIGxpbmtiYWNrIFVSTCIsInJlcXVlc3Rlcl92YWxpZGF0aW9uIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgcmVxdWVzdGVyIGRldGFpbHMgb3IgPGEgaHJlZj1cIiNcIiBpZD1cImFkZF9yZXF1ZXN0ZXJfYnRuX3Byb3h5XCI+YWRkIG5ldyByZXF1ZXN0ZXIuPC9hPiIsImFnZW50X3ZhbGlkYXRpb24iOiJQbGVhc2UgZW50ZXIgdmFsaWQgYWdlbnQgZGV0YWlscyIsImVtYWlsX29yX3Bob25lIjoiUGxlYXNlIGVudGVyIGEgRW1haWwgb3IgUGhvbmUgTnVtYmVyIiwidXBsb2FkX21iX2xpbWl0IjoiVXBsb2FkIGV4Y2VlZHMgdGhlIGF2YWlsYWJsZSAxNU1CIGxpbWl0IiwiaW52YWxpZF9pbWFnZSI6IkludmFsaWQgaW1hZ2UgZm9ybWF0IiwiYXRsZWFzdF9vbmVfcm9sZSI6IkF0IGxlYXN0IG9uZSByb2xlIGlzIHJlcXVpcmVkIGZvciB0aGUgYWdlbnQiLCJpbnZhbGlkX3RpbWUiOiJJbnZhbGlkIHRpbWUuIiwicmVtb3RlX2ZhaWwiOiJSZW1vdGUgdmFsaWRhdGlvbiBmYWlsZWQiLCJ0cmltX3NwYWNlcyI6IkF1dG8gdHJpbSBvZiBsZWFkaW5nICYgdHJhaWxpbmcgd2hpdGVzcGFjZSIsImhleF9jb2xvcl9pbnZhbGlkIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgaGV4IGNvbG9yIHZhbHVlLiIsIm5hbWVfZHVwbGljYXRpb24iOiJUaGUgbmFtZSBhbHJlYWR5IGV4aXN0cy4iLCJpbnZhbGlkX3ZhbHVlIjoiSW52YWxpZCB2YWx1ZSIsImludmFsaWRfcmVnZXgiOiJJbnZhbGlkIFJlZ3VsYXIgRXhwcmVzc2lvbiIsInNhbWVfZm9sZGVyIjoiQ2Fubm90IG1vdmUgdG8gdGhlIHNhbWUgZm9sZGVyLiIsIm1heGxlbmd0aF8yNTUiOiJQbGVhc2UgZW50ZXIgbGVzcyB0aGFuIDI1NSBjaGFyYWN0ZXJzIiwiZGVjaW1hbF9kaWdpdF92YWxpZCI6IlZhbHVlIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiAyIGRlY2ltYWwgZGlnaXRzIiwiYXRsZWFzdF9vbmVfZmllbGQiOiJQbGVhc2UgZmlsbCBhdCBsZWFzdCB7MH0gb2YgdGhlc2UgZmllbGRzLiIsImF0bGVhc3Rfb25lX3BvcnRhbCI6IlNlbGVjdCBhdGxlYXN0IG9uZSBwb3J0YWwuIiwiY3VzdG9tX2hlYWRlciI6IlBsZWFzZSB0eXBlIGN1c3RvbSBoZWFkZXIgaW4gdGhlIGZvcm1hdCAtICBoZWFkZXIgOiB2YWx1ZSIsInNhbWVfcGFzc3dvcmQiOiJTaG91bGQgYmUgc2FtZSBhcyBQYXNzd29yZCIsInNlbGVjdDJfbm9fbWF0Y2giOiJObyBtYXRjaGluZyAle2NvbnRhaW5lcn0gZm91bmQiLCJpbnRlZ3JhdGlvbl9ub19tYXRjaCI6Im5vIG1hdGNoaW5nIGRhdGEuLi4iLCJ0aW1lIjoiUGxlYXNlIGVudGVyIGEgdmFsaWQgdGltZSIsInZhbGlkX2NvbnRhY3QiOiJQbGVhc2UgYWRkIGEgdmFsaWQgY29udGFjdCIsImZpZWxkX2ludmFsaWQiOiJUaGlzIGZpZWxkIGlzIGludmFsaWQifQkKCgkJalF1ZXJ5LmV4dGVuZChqUXVlcnkudmFsaWRhdG9yLm1lc3NhZ2VzLCB2YWxpZGF0aW9uX21lYXNzYWdlcyApOwoKCgkJalF1ZXJ5KCIuY2FsbF9kdXJhdGlvbiIpLmVhY2goZnVuY3Rpb24gKCkgewoJCQl2YXIgZm9ybWF0LHRpbWU7CgkJCWlmIChqUXVlcnkodGhpcykuZGF0YSgidGltZSIpID09PSB1bmRlZmluZWQpIHsgcmV0dXJuOyB9CgkJCWlmKGpRdWVyeSh0aGlzKS5oYXNDbGFzcygnZnJlc2hjYWxsZXInKSl7IHJldHVybjsgfQoJCQl0aW1lID0galF1ZXJ5KHRoaXMpLmRhdGEoInRpbWUiKTsKCQkJaWYgKHRpbWU+PTM2MDApIHsKCQkJIGZvcm1hdCA9ICJoaDptbTpzcyI7CgkJCX0gZWxzZSB7CgkJCQlmb3JtYXQgPSAibW06c3MiOwoJCQl9CgkJCWpRdWVyeSh0aGlzKS5odG1sKHRpbWUudG9UaW1lKGZvcm1hdCkpOwoJCX0pOwoJfSk7CgoJLy8gU2hvcnRjdXRzIHZhcmlhYmxlcwoJdmFyIFNob3J0Y3V0cyA9IHsiZ2xvYmFsIjp7ImhlbHAiOiI/Iiwic2F2ZSI6Im1vZCtyZXR1cm4iLCJjYW5jZWwiOiJlc2MiLCJzZWFyY2giOiIvIiwic3RhdHVzX2RpYWxvZyI6Im1vZCthbHQrcmV0dXJuIiwic2F2ZV9jdWN0b21pemF0aW9uIjoibW9kK3NoaWZ0K3MifSwiYXBwX25hdiI6eyJkYXNoYm9hcmQiOiJnIGQiLCJ0aWNrZXRzIjoiZyB0Iiwic29jaWFsIjoiZyBlIiwic29sdXRpb25zIjoiZyBzIiwiZm9ydW1zIjoiZyBmIiwiY3VzdG9tZXJzIjoiZyBjIiwicmVwb3J0cyI6ImcgciIsImFkbWluIjoiZyBhIiwidGlja2V0X25ldyI6ImcgbiIsImNvbXBvc2VfZW1haWwiOiJnIG0ifSwicGFnaW5hdGlvbiI6eyJwcmV2aW91cyI6ImFsdCtsZWZ0IiwibmV4dCI6ImFsdCtyaWdodCIsImFsdF9wcmV2aW91cyI6ImoiLCJhbHRfbmV4dCI6ImsifSwidGlja2V0X2xpc3QiOnsidGlja2V0X3Nob3ciOiJyZXR1cm4iLCJzZWxlY3QiOiJ4Iiwic2VsZWN0X2FsbCI6InNoaWZ0K3giLCJzZWFyY2hfdmlldyI6InYiLCJzaG93X2Rlc2NyaXB0aW9uIjoic3BhY2UiLCJ1bndhdGNoIjoidyIsImRlbGV0ZSI6IiMiLCJwaWNrdXAiOiJAIiwic3BhbSI6IiEiLCJjbG9zZSI6In4iLCJzaWxlbnRfY2xvc2UiOiJhbHQrc2hpZnQrYCIsInVuZG8iOiJ6IiwicmVwbHkiOiJyIiwiZm9yd2FyZCI6ImYiLCJhZGRfbm90ZSI6Im4iLCJzY2VuYXJpbyI6InMifSwidGlja2V0X2RldGFpbCI6eyJ0b2dnbGVfd2F0Y2hlciI6InciLCJyZXBseSI6InIiLCJmb3J3YXJkIjoiZiIsImFkZF9ub3RlIjoibiIsImNsb3NlIjoifiIsInNpbGVudF9jbG9zZSI6ImFsdCtzaGlmdCtgIiwiYWRkX3RpbWUiOiJtIiwic3BhbSI6IiEiLCJkZWxldGUiOiIjIiwic2hvd19hY3Rpdml0aWVzX3RvZ2dsZSI6In0iLCJwcm9wZXJ0aWVzIjoicCIsImV4cGFuZCI6Il0iLCJ1bmRvIjoieiIsInNlbGVjdF93YXRjaGVyIjoic2hpZnQrdyIsImdvX3RvX25leHQiOlsiaiIsImRvd24iXSwiZ29fdG9fcHJldmlvdXMiOlsiayIsInVwIl0sInNjZW5hcmlvIjoicyIsInBpY2t1cCI6IkAiLCJjb2xsYWJvcmF0aW9uIjoiZCJ9LCJzb2NpYWxfc3RyZWFtIjp7InNlYXJjaCI6InMiLCJnb190b19uZXh0IjpbImoiLCJkb3duIl0sImdvX3RvX3ByZXZpb3VzIjpbImsiLCJ1cCJdLCJvcGVuX3N0cmVhbSI6WyJzcGFjZSIsInJldHVybiJdLCJjbG9zZSI6ImVzYyIsInJlcGx5IjoiciIsInJldHdlZXQiOiJzaGlmdCtyIn0sInBvcnRhbF9jdXN0b21pemF0aW9ucyI6eyJwcmV2aWV3IjoibW9kK3NoaWZ0K3AifSwiZGlzY3Vzc2lvbnMiOnsidG9nZ2xlX2ZvbGxvd2luZyI6InciLCJhZGRfZm9sbG93ZXIiOiJzaGlmdCt3IiwicmVwbHlfdG9waWMiOiJyIn19OwoJCgkvLyBEYXRlIGZvcm1hdHMKCXZhciBEQVRFX0ZPUk1BVFMgPSB7Im5vbl91cyI6eyJtb21lbnRfZGF0ZV93aXRoX3dlZWsiOiJkZGQsIEQgTU1NLCBZWVlZIiwiZGF0ZXBpY2tlciI6ImQgTSwgeXkiLCJkYXRlcGlja2VyX2VzY2FwZWQiOiJkIE0geXkiLCJkYXRlcGlja2VyX2Z1bGxfZGF0ZSI6IkQsIGQgTSwgeXkiLCJtZWRpdW1EYXRlIjoiZCBNTU0sIHl5eXkifSwidXMiOnsibW9tZW50X2RhdGVfd2l0aF93ZWVrIjoiZGRkLCBNTU0gRCwgWVlZWSIsImRhdGVwaWNrZXIiOiJNIGQsIHl5IiwiZGF0ZXBpY2tlcl9lc2NhcGVkIjoiTSBkIHl5IiwiZGF0ZXBpY2tlcl9mdWxsX2RhdGUiOiJELCBNIGQsIHl5IiwibWVkaXVtRGF0ZSI6Ik1NTSBkLCB5eXl5In19OwoKCXZhciBsYW5nID0geyAKCQlsb2FkaW5nVGV4dDogIlBsZWFzZSBXYWl0Li4uIiwKCQl2aWV3QWxsVGlja2V0czogIlZpZXcgYWxsIHRpY2tldHMiCgl9OwoKCi8vXV0+Cjwvc2NyaXB0PiAKCgkJCgoJCQoJCQoJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICAJCUkxOG4uZGVmYXVsdExvY2FsZSA9ICJlbiI7CiAgICAgCQlJMThuLmxvY2FsZSA9ICJlbiI7CgkJPC9zY3JpcHQ+CgkJCiAgICAKCTwvYm9keT4KPC9odG1sPg== - recorded_at: Wed, 30 Jun 2021 09:10:40 GMT + encoding: UTF-8 + string: '{"code":"invalid_credentials","message":"You have to be logged in to + perform this action."}' + recorded_at: Fri, 02 Jul 2021 17:06:30 GMT - request: method: get uri: https://.freshdesk.com/api/v2/agents/me @@ -161,7 +90,7 @@ http_interactions: message: OK headers: Date: - - Wed, 30 Jun 2021 09:10:41 GMT + - Fri, 02 Jul 2021 17:06:32 GMT Content-Type: - application/json; charset=utf-8 Transfer-Encoding: @@ -173,7 +102,7 @@ http_interactions: Pragma: - no-cache X-Request-Id: - - bddb6f2d-a4e1-4eb0-b65c-6c5c56cd18b8 + - '096094d7-b196-941f-bbe3-22acc2b2bbe1' X-Freshdesk-Api-Version: - latest=v2; requested=v2 X-Rack-Cache: @@ -189,7 +118,7 @@ http_interactions: Expires: - Wed, 13 Oct 2010 00:00:00 UTC Set-Cookie: - - _helpkit_session=BAh7B0kiD3Nlc3Npb25faWQGOgZFVEkiJTE2YjdjMDU2MDBmZTExNjIzNzE3MDlmMmQyMWZlNjVjBjsAVEkiEF9jc3JmX3Rva2VuBjsARkkiMUpwdnF0bTZrNm5Rc002YU51TXdhRVpCckxKdWw3WE9pM3lyeTFENUp6R1k9BjsARg%3D%3D--a2a251d795cef76184871e5bc23d877ce3f14901; + - _helpkit_session=BAh7B0kiD3Nlc3Npb25faWQGOgZFVEkiJTdkNzE4MWMzYjQzMjMxNTYzZTFhN2Y5MTE3ZjM2MjQ5BjsAVEkiEF9jc3JmX3Rva2VuBjsARkkiMXorVFhHeEY1YU5VcW5xZjBaaE9BTllMZTM5azdHL3ZZTmphQkpXWVJhWEE9BjsARg%3D%3D--9f8399eb8b8434c862f21cfd38da18f3479ca5be; path=/; HttpOnly; secure - _x_w=5_2; path=/; HttpOnly; secure X-Fw-Ratelimiting-Managed: @@ -197,18 +126,18 @@ http_interactions: X-Ratelimit-Total: - '100' X-Ratelimit-Remaining: - - '94' + - '90' X-Ratelimit-Used-Currentrequest: - '1' X-Envoy-Upstream-Service-Time: - - '57' + - '62' X-Trace-Id: - - 00-d0b4a817e7a16f236aa87cf2512ffa42-7b70980fbed5e3ec-00 + - 00-42555d29af204cf817095f7d2dce5178-00cb4ebcca7ebfe1-01 Server: - fwe body: encoding: ASCII-8BIT string: '{"available":false,"occasional":false,"id":80014400475,"ticket_scope":1,"signature":null,"group_ids":[],"role_ids":[80000198826],"skill_ids":[],"available_since":null,"contact":{"active":true,"email":"info@.org","job_title":null,"language":"en","mobile":null,"name":"Thorsten Eckel","phone":null,"time_zone":"Eastern Time (US & Canada)","created_at":"2021-04-09T13:23:58Z","updated_at":"2021-04-09T13:31:00Z","last_login_at":"2021-06-04T06:55:46Z"},"created_at":"2021-04-09T13:23:58Z","updated_at":"2021-06-08T09:56:50Z","type":"support_agent"}' - recorded_at: Wed, 30 Jun 2021 09:10:41 GMT + recorded_at: Fri, 02 Jul 2021 17:06:32 GMT recorded_with: VCR 6.0.0 diff --git a/test/integration/user_agent_test.rb b/test/integration/user_agent_test.rb index b1f4fa6c9..5e90bbed7 100644 --- a/test/integration/user_agent_test.rb +++ b/test/integration/user_agent_test.rb @@ -25,6 +25,8 @@ class UserAgentTest < ActiveSupport::TestCase assert_equal(true, result.success?) assert_equal('200', result.code) assert_equal(String, result.body.class) + assert_equal(Hash, result.header.class) + assert_equal('application/json; charset=utf-8', result.header['content-type']) assert(result.body.include?('"get"')) assert(result.body.include?('"123"')) assert(result.body.include?('"content_type_requested":null'))