merchi_checkout
Version:
Merchi's custom checkout step form
466 lines • 50.6 kB
JavaScript
import { ProductType, Role } from './types';
export var isoCountries = {
AF: "Afghanistan",
AX: "Aland Islands",
AL: "Albania",
DZ: "Algeria",
AS: "American Samoa",
AD: "Andorra",
AO: "Angola",
AI: "Anguilla",
AQ: "Antarctica",
AG: "Antigua And Barbuda",
AR: "Argentina",
AM: "Armenia",
AW: "Aruba",
AU: "Australia",
AT: "Austria",
AZ: "Azerbaijan",
BS: "Bahamas",
BH: "Bahrain",
BD: "Bangladesh",
BB: "Barbados",
BY: "Belarus",
BE: "Belgium",
BZ: "Belize",
BJ: "Benin",
BM: "Bermuda",
BT: "Bhutan",
BO: "Bolivia",
BA: "Bosnia And Herzegovina",
BW: "Botswana",
BV: "Bouvet Island",
BR: "Brazil",
IO: "British Indian Ocean Territory",
BN: "Brunei Darussalam",
BG: "Bulgaria",
BF: "Burkina Faso",
BI: "Burundi",
KH: "Cambodia",
CM: "Cameroon",
CA: "Canada",
CV: "Cape Verde",
KY: "Cayman Islands",
CF: "Central African Republic",
TD: "Chad",
CL: "Chile",
CN: "China",
CX: "Christmas Island",
CC: "Cocos (Keeling) Islands",
CO: "Colombia",
KM: "Comoros",
CG: "Congo",
CD: "Congo, Democratic Republic",
CK: "Cook Islands",
CR: "Costa Rica",
CI: "Cote D'Ivoire",
HR: "Croatia",
CU: "Cuba",
CY: "Cyprus",
CZ: "Czech Republic",
DK: "Denmark",
DJ: "Djibouti",
DM: "Dominica",
DO: "Dominican Republic",
EC: "Ecuador",
EG: "Egypt",
SV: "El Salvador",
GQ: "Equatorial Guinea",
ER: "Eritrea",
EE: "Estonia",
ET: "Ethiopia",
FK: "Falkland Islands (Malvinas)",
FO: "Faroe Islands",
FJ: "Fiji",
FI: "Finland",
FR: "France",
GF: "French Guiana",
PF: "French Polynesia",
TF: "French Southern Territories",
GA: "Gabon",
GM: "Gambia",
GE: "Georgia",
DE: "Germany",
GH: "Ghana",
GI: "Gibraltar",
GR: "Greece",
GL: "Greenland",
GD: "Grenada",
GP: "Guadeloupe",
GU: "Guam",
GT: "Guatemala",
GG: "Guernsey",
GN: "Guinea",
GW: "Guinea-Bissau",
GY: "Guyana",
HT: "Haiti",
HM: "Heard Island & Mcdonald Islands",
VA: "Holy See (Vatican City State)",
HN: "Honduras",
HK: "Hong Kong",
HU: "Hungary",
IS: "Iceland",
IN: "India",
ID: "Indonesia",
IR: "Iran, Islamic Republic Of",
IQ: "Iraq",
IE: "Ireland",
IM: "Isle Of Man",
IL: "Israel",
IT: "Italy",
JM: "Jamaica",
JP: "Japan",
JE: "Jersey",
JO: "Jordan",
KZ: "Kazakhstan",
KE: "Kenya",
KI: "Kiribati",
KR: "Korea",
KW: "Kuwait",
KG: "Kyrgyzstan",
LA: "Lao People's Democratic Republic",
LV: "Latvia",
LB: "Lebanon",
LS: "Lesotho",
LR: "Liberia",
LY: "Libyan Arab Jamahiriya",
LI: "Liechtenstein",
LT: "Lithuania",
LU: "Luxembourg",
MO: "Macao",
MK: "Macedonia",
MG: "Madagascar",
MW: "Malawi",
MY: "Malaysia",
MV: "Maldives",
ML: "Mali",
MT: "Malta",
MH: "Marshall Islands",
MQ: "Martinique",
MR: "Mauritania",
MU: "Mauritius",
YT: "Mayotte",
MX: "Mexico",
FM: "Micronesia, Federated States Of",
MD: "Moldova",
MC: "Monaco",
MN: "Mongolia",
ME: "Montenegro",
MS: "Montserrat",
MA: "Morocco",
MZ: "Mozambique",
MM: "Myanmar",
NA: "Namibia",
NR: "Nauru",
NP: "Nepal",
NL: "Netherlands",
AN: "Netherlands Antilles",
NC: "New Caledonia",
NZ: "New Zealand",
NI: "Nicaragua",
NE: "Niger",
NG: "Nigeria",
NU: "Niue",
NF: "Norfolk Island",
MP: "Northern Mariana Islands",
NO: "Norway",
OM: "Oman",
PK: "Pakistan",
PW: "Palau",
PS: "Palestinian Territory, Occupied",
PA: "Panama",
PG: "Papua New Guinea",
PY: "Paraguay",
PE: "Peru",
PH: "Philippines",
PN: "Pitcairn",
PL: "Poland",
PT: "Portugal",
PR: "Puerto Rico",
QA: "Qatar",
RE: "Reunion",
RO: "Romania",
RU: "Russian Federation",
RW: "Rwanda",
BL: "Saint Barthelemy",
SH: "Saint Helena",
KN: "Saint Kitts And Nevis",
LC: "Saint Lucia",
MF: "Saint Martin",
PM: "Saint Pierre And Miquelon",
VC: "Saint Vincent And Grenadines",
WS: "Samoa",
SM: "San Marino",
ST: "Sao Tome And Principe",
SA: "Saudi Arabia",
SN: "Senegal",
RS: "Serbia",
SC: "Seychelles",
SL: "Sierra Leone",
SG: "Singapore",
SK: "Slovakia",
SI: "Slovenia",
SB: "Solomon Islands",
SO: "Somalia",
ZA: "South Africa",
GS: "South Georgia And Sandwich Isl.",
ES: "Spain",
LK: "Sri Lanka",
SD: "Sudan",
SR: "Suriname",
SJ: "Svalbard And Jan Mayen",
SZ: "Swaziland",
SE: "Sweden",
CH: "Switzerland",
SY: "Syrian Arab Republic",
TW: "Taiwan",
TJ: "Tajikistan",
TZ: "Tanzania",
TH: "Thailand",
TL: "Timor-Leste",
TG: "Togo",
TK: "Tokelau",
TO: "Tonga",
TT: "Trinidad And Tobago",
TN: "Tunisia",
TR: "Turkey",
TM: "Turkmenistan",
TC: "Turks And Caicos Islands",
TV: "Tuvalu",
UG: "Uganda",
UA: "Ukraine",
AE: "United Arab Emirates",
GB: "United Kingdom",
US: "United States",
UM: "United States Outlying Islands",
UY: "Uruguay",
UZ: "Uzbekistan",
VU: "Vanuatu",
VE: "Venezuela",
VN: "Viet Nam",
VG: "Virgin Islands, British",
VI: "Virgin Islands, U.S.",
WF: "Wallis And Futuna",
EH: "Western Sahara",
YE: "Yemen",
ZM: "Zambia",
ZW: "Zimbabwe"
};
export function userDomainsByRoles(user, roles) {
var eD = user && user.enrolledDomains ? user.enrolledDomains : [];
var domains = [];
var i = 0;
for (i; i < eD.length; i++) {
var e = eD[i];
if (roles.includes(e.role)) {
domains.push(e.domain);
}
}
return domains;
}
export function userAdminDomains(user) {
return userDomainsByRoles(user, [Role.ADMIN, Role.MANAGER]);
}
export function isProductSupplierMOD(product) {
var productType = product && product.productType;
return product && [String(ProductType.SUPPLIER_MOD), String(ProductType.SUPPLIER_RESELL_MOD)].includes(String(productType));
}
export function isUserRegistered(user) {
var id = user ? user.id : null;
return id !== undefined && id !== null && id > 0;
}
export function isRegisteredAndHasStore(user) {
var id = user ? user.id : null;
return id !== undefined && id !== null && id > 0 && user.hasStore;
}
var supportedNumbers = {
AU: 'Australia (+61)',
AE: 'United Arab Emirates (+971)',
BH: 'Bahrain (+973)',
CN: 'China (+86)',
DK: 'Denmark (+45)',
ES: 'Spain (+34)',
FR: 'France (+33)',
GB: 'United Kingdom (+44)',
HK: 'Hong Kong (+852)',
ID: 'Indonesia (+62)',
IN: 'India (+91)',
IT: 'Italy (+39)',
KR: 'South Korea (+82)',
NC: 'New Caledonia (+687)',
NZ: 'New Zealand (+64)',
OM: 'Oman (+968)',
PH: 'Philippines (+63)',
PT: 'Portugal (+351)',
QA: 'Qatar (+974)',
SE: 'Sweden (+46)',
SG: 'Singapore (+65)',
TH: 'Thailand (+66)',
US: 'United States (+1)',
ZA: 'South Africa (+27)'
};
export var phoneOptions = Object.keys(supportedNumbers).map(function (key) {
return {
value: key,
label: supportedNumbers[key]
};
});
export var addressComponentsSettings = {
administrative_area_level_1: 'short_name',
administrative_area_level_2: 'short_name',
country: 'short_name',
establishment: 'long_name',
floor: 'short_name',
locality: 'long_name',
postal_code: 'short_name',
premise: 'short_name',
room: 'long_name',
route: 'short_name',
street_number: 'short_name',
sublocality: 'long_name',
subpremise: 'short_name'
};
export function geoSuggestResultAsNewAddress(resp) {
var addressComponents = resp && resp.gmaps ? resp.gmaps.address_components : null;
var name = resp && resp.gmaps && resp.gmaps.name;
var address = {
city: '',
country: '',
lineOne: name ? name : '',
lineTwo: '',
postcode: '',
state: ''
};
var i;
if (addressComponents) {
for (i = 0; i < addressComponents.length; i++) {
var addrComponent = addressComponents[i];
var addrTypes = addrComponent.types;
var addrType = addrTypes.length > 0 ? addrTypes[0] : null;
var componentSetting = addrType ? addressComponentsSettings[addrType] : null;
if (componentSetting) {
var addressVal = addrComponent[componentSetting];
switch (addrType) {
case 'establishment':
case 'room':
case 'floor':
case 'street_number':
case 'premise':
case 'subpremise':
case 'route':
var oldLineOne = address.lineOne;
address.lineOne = oldLineOne.includes(addressVal) ? oldLineOne : "".concat(oldLineOne, " ").concat(addressVal);
break;
case 'locality':
case 'sublocality':
var oldCity = address.city ? "".concat(address.city, " ") : '';
address.city = oldCity + addressVal;
break;
case 'administrative_area_level_1':
address.state = addressVal;
break;
case 'administrative_area_level_2':
break;
case 'country':
address.country = addressVal;
break;
case 'postal_code':
address.postcode = addressVal;
break;
default:
break;
}
}
}
return address;
}
return null;
}
export function addressInOneLine(address) {
var a = address ? address : {};
var city = a.city,
country = a.country,
lineOne = a.lineOne,
lineTwo = a.lineTwo,
postcode = a.postcode,
state = a.state;
var l1 = lineOne ? "".concat(lineOne, " ") : '';
var l2 = lineTwo ? "".concat(lineTwo, " ") : '';
var c = city ? "".concat(city, " ") : '';
var s = state ? "".concat(state, " ") : '';
var p = postcode ? "".concat(postcode, " ") : '';
var countryFull = country ? isoCountries[country] : '';
return l1 + l2 + c + s + p + countryFull;
}
export var FieldType = /*#__PURE__*/function (FieldType) {
FieldType[FieldType["TEXT_INPUT"] = 1] = "TEXT_INPUT";
FieldType[FieldType["SELECT"] = 2] = "SELECT";
FieldType[FieldType["FILE_UPLOAD"] = 3] = "FILE_UPLOAD";
FieldType[FieldType["TEXT_AREA"] = 4] = "TEXT_AREA";
FieldType[FieldType["NUMBER_INPUT"] = 5] = "NUMBER_INPUT";
FieldType[FieldType["CHECKBOX"] = 6] = "CHECKBOX";
FieldType[FieldType["RADIO"] = 7] = "RADIO";
FieldType[FieldType["FIELD_INSTRUCTIONS"] = 8] = "FIELD_INSTRUCTIONS";
FieldType[FieldType["IMAGE_SELECT"] = 9] = "IMAGE_SELECT";
FieldType[FieldType["COLOUR_PICKER"] = 10] = "COLOUR_PICKER";
FieldType[FieldType["COLOUR_SELECT"] = 11] = "COLOUR_SELECT";
return FieldType;
}({});
export function isSelectable(fieldType) {
return [FieldType.SELECT, FieldType.CHECKBOX, FieldType.RADIO, FieldType.IMAGE_SELECT, FieldType.COLOUR_SELECT].includes(fieldType);
}
export function isInstructionsType(fieldType) {
return String(FieldType.FIELD_INSTRUCTIONS) === String(fieldType);
}
export var countryDefaultDict = function countryDefaultDict(currency) {
return {
currency: currency
};
};
export var supportedCountryDefaults = {
AE: countryDefaultDict('USD'),
AU: countryDefaultDict('AUD'),
BH: countryDefaultDict('USD'),
CH: countryDefaultDict('CNY'),
DK: countryDefaultDict('EUR'),
ES: countryDefaultDict('EUR'),
FR: countryDefaultDict('EUR'),
GB: countryDefaultDict('GBP'),
HK: countryDefaultDict('HKD'),
ID: countryDefaultDict('USD'),
IN: countryDefaultDict('INR'),
IT: countryDefaultDict('EUR'),
KR: countryDefaultDict('USD'),
NC: countryDefaultDict('USD'),
NZ: countryDefaultDict('NZD'),
OM: countryDefaultDict('USD'),
PH: countryDefaultDict('USD'),
PT: countryDefaultDict('EUR'),
QA: countryDefaultDict('USD'),
SE: countryDefaultDict('USD'),
SG: countryDefaultDict('SGD'),
TH: countryDefaultDict('USD'),
US: countryDefaultDict('USD'),
ZA: countryDefaultDict('USD')
};
export var supportedCountryDefaultsWithDefault = function supportedCountryDefaultsWithDefault(countryCode) {
var defaultCountryValues = supportedCountryDefaults[countryCode];
return defaultCountryValues ? defaultCountryValues : supportedCountryDefaults.AU;
};
export function cleanClientFiles(clientFiles) {
return clientFiles.map(function (clientFile) {
return clientFile.file;
});
}
export function appendClientToOwnDraft(job) {
var ownDrafts = job.ownDrafts;
if (job.ownDrafts && job.ownDrafts.length) {
job.ownDrafts[0].designer = job.client;
}
return job;
}
export function redirectOnSuccess(url, redirectWithValue, value) {
var cleanUrl = url.replace('%27', '').replace('%91', '').replace('%92', '').replace('%93', '').replace('%94', '');
window.location.href = decodeURI(redirectWithValue ? "".concat(cleanUrl, "merchiValue=").concat(value) : cleanUrl);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9kdWN0VHlwZSIsIlJvbGUiLCJpc29Db3VudHJpZXMiLCJBRiIsIkFYIiwiQUwiLCJEWiIsIkFTIiwiQUQiLCJBTyIsIkFJIiwiQVEiLCJBRyIsIkFSIiwiQU0iLCJBVyIsIkFVIiwiQVQiLCJBWiIsIkJTIiwiQkgiLCJCRCIsIkJCIiwiQlkiLCJCRSIsIkJaIiwiQkoiLCJCTSIsIkJUIiwiQk8iLCJCQSIsIkJXIiwiQlYiLCJCUiIsIklPIiwiQk4iLCJCRyIsIkJGIiwiQkkiLCJLSCIsIkNNIiwiQ0EiLCJDViIsIktZIiwiQ0YiLCJURCIsIkNMIiwiQ04iLCJDWCIsIkNDIiwiQ08iLCJLTSIsIkNHIiwiQ0QiLCJDSyIsIkNSIiwiQ0kiLCJIUiIsIkNVIiwiQ1kiLCJDWiIsIkRLIiwiREoiLCJETSIsIkRPIiwiRUMiLCJFRyIsIlNWIiwiR1EiLCJFUiIsIkVFIiwiRVQiLCJGSyIsIkZPIiwiRkoiLCJGSSIsIkZSIiwiR0YiLCJQRiIsIlRGIiwiR0EiLCJHTSIsIkdFIiwiREUiLCJHSCIsIkdJIiwiR1IiLCJHTCIsIkdEIiwiR1AiLCJHVSIsIkdUIiwiR0ciLCJHTiIsIkdXIiwiR1kiLCJIVCIsIkhNIiwiVkEiLCJITiIsIkhLIiwiSFUiLCJJUyIsIklOIiwiSUQiLCJJUiIsIklRIiwiSUUiLCJJTSIsIklMIiwiSVQiLCJKTSIsIkpQIiwiSkUiLCJKTyIsIktaIiwiS0UiLCJLSSIsIktSIiwiS1ciLCJLRyIsIkxBIiwiTFYiLCJMQiIsIkxTIiwiTFIiLCJMWSIsIkxJIiwiTFQiLCJMVSIsIk1PIiwiTUsiLCJNRyIsIk1XIiwiTVkiLCJNViIsIk1MIiwiTVQiLCJNSCIsIk1RIiwiTVIiLCJNVSIsIllUIiwiTVgiLCJGTSIsIk1EIiwiTUMiLCJNTiIsIk1FIiwiTVMiLCJNQSIsIk1aIiwiTU0iLCJOQSIsIk5SIiwiTlAiLCJOTCIsIkFOIiwiTkMiLCJOWiIsIk5JIiwiTkUiLCJORyIsIk5VIiwiTkYiLCJNUCIsIk5PIiwiT00iLCJQSyIsIlBXIiwiUFMiLCJQQSIsIlBHIiwiUFkiLCJQRSIsIlBIIiwiUE4iLCJQTCIsIlBUIiwiUFIiLCJRQSIsIlJFIiwiUk8iLCJSVSIsIlJXIiwiQkwiLCJTSCIsIktOIiwiTEMiLCJNRiIsIlBNIiwiVkMiLCJXUyIsIlNNIiwiU1QiLCJTQSIsIlNOIiwiUlMiLCJTQyIsIlNMIiwiU0ciLCJTSyIsIlNJIiwiU0IiLCJTTyIsIlpBIiwiR1MiLCJFUyIsIkxLIiwiU0QiLCJTUiIsIlNKIiwiU1oiLCJTRSIsIkNIIiwiU1kiLCJUVyIsIlRKIiwiVFoiLCJUSCIsIlRMIiwiVEciLCJUSyIsIlRPIiwiVFQiLCJUTiIsIlRSIiwiVE0iLCJUQyIsIlRWIiwiVUciLCJVQSIsIkFFIiwiR0IiLCJVUyIsIlVNIiwiVVkiLCJVWiIsIlZVIiwiVkUiLCJWTiIsIlZHIiwiVkkiLCJXRiIsIkVIIiwiWUUiLCJaTSIsIlpXIiwidXNlckRvbWFpbnNCeVJvbGVzIiwidXNlciIsInJvbGVzIiwiZUQiLCJlbnJvbGxlZERvbWFpbnMiLCJkb21haW5zIiwiaSIsImxlbmd0aCIsImUiLCJpbmNsdWRlcyIsInJvbGUiLCJwdXNoIiwiZG9tYWluIiwidXNlckFkbWluRG9tYWlucyIsIkFETUlOIiwiTUFOQUdFUiIsImlzUHJvZHVjdFN1cHBsaWVyTU9EIiwicHJvZHVjdCIsInByb2R1Y3RUeXBlIiwiU3RyaW5nIiwiU1VQUExJRVJfTU9EIiwiU1VQUExJRVJfUkVTRUxMX01PRCIsImlzVXNlclJlZ2lzdGVyZWQiLCJpZCIsInVuZGVmaW5lZCIsImlzUmVnaXN0ZXJlZEFuZEhhc1N0b3JlIiwiaGFzU3RvcmUiLCJzdXBwb3J0ZWROdW1iZXJzIiwicGhvbmVPcHRpb25zIiwiT2JqZWN0Iiwia2V5cyIsIm1hcCIsImtleSIsInZhbHVlIiwibGFiZWwiLCJhZGRyZXNzQ29tcG9uZW50c1NldHRpbmdzIiwiYWRtaW5pc3RyYXRpdmVfYXJlYV9sZXZlbF8xIiwiYWRtaW5pc3RyYXRpdmVfYXJlYV9sZXZlbF8yIiwiY291bnRyeSIsImVzdGFibGlzaG1lbnQiLCJmbG9vciIsImxvY2FsaXR5IiwicG9zdGFsX2NvZGUiLCJwcmVtaXNlIiwicm9vbSIsInJvdXRlIiwic3RyZWV0X251bWJlciIsInN1YmxvY2FsaXR5Iiwic3VicHJlbWlzZSIsImdlb1N1Z2dlc3RSZXN1bHRBc05ld0FkZHJlc3MiLCJyZXNwIiwiYWRkcmVzc0NvbXBvbmVudHMiLCJnbWFwcyIsImFkZHJlc3NfY29tcG9uZW50cyIsIm5hbWUiLCJhZGRyZXNzIiwiY2l0eSIsImxpbmVPbmUiLCJsaW5lVHdvIiwicG9zdGNvZGUiLCJzdGF0ZSIsImFkZHJDb21wb25lbnQiLCJhZGRyVHlwZXMiLCJ0eXBlcyIsImFkZHJUeXBlIiwiY29tcG9uZW50U2V0dGluZyIsImFkZHJlc3NWYWwiLCJvbGRMaW5lT25lIiwiY29uY2F0Iiwib2xkQ2l0eSIsImFkZHJlc3NJbk9uZUxpbmUiLCJhIiwibDEiLCJsMiIsImMiLCJzIiwicCIsImNvdW50cnlGdWxsIiwiRmllbGRUeXBlIiwiaXNTZWxlY3RhYmxlIiwiZmllbGRUeXBlIiwiU0VMRUNUIiwiQ0hFQ0tCT1giLCJSQURJTyIsIklNQUdFX1NFTEVDVCIsIkNPTE9VUl9TRUxFQ1QiLCJpc0luc3RydWN0aW9uc1R5cGUiLCJGSUVMRF9JTlNUUlVDVElPTlMiLCJjb3VudHJ5RGVmYXVsdERpY3QiLCJjdXJyZW5jeSIsInN1cHBvcnRlZENvdW50cnlEZWZhdWx0cyIsInN1cHBvcnRlZENvdW50cnlEZWZhdWx0c1dpdGhEZWZhdWx0IiwiY291bnRyeUNvZGUiLCJkZWZhdWx0Q291bnRyeVZhbHVlcyIsImNsZWFuQ2xpZW50RmlsZXMiLCJjbGllbnRGaWxlcyIsImNsaWVudEZpbGUiLCJmaWxlIiwiYXBwZW5kQ2xpZW50VG9Pd25EcmFmdCIsImpvYiIsIm93bkRyYWZ0cyIsImRlc2lnbmVyIiwiY2xpZW50IiwicmVkaXJlY3RPblN1Y2Nlc3MiLCJ1cmwiLCJyZWRpcmVjdFdpdGhWYWx1ZSIsImNsZWFuVXJsIiwicmVwbGFjZSIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImRlY29kZVVSSSJdLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9kdWN0VHlwZSwgUm9sZSB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgaXNvQ291bnRyaWVzOiBhbnkgPSB7XG4gIEFGOiBcIkFmZ2hhbmlzdGFuXCIsXG4gIEFYOiBcIkFsYW5kIElzbGFuZHNcIixcbiAgQUw6IFwiQWxiYW5pYVwiLFxuICBEWjogXCJBbGdlcmlhXCIsXG4gIEFTOiBcIkFtZXJpY2FuIFNhbW9hXCIsXG4gIEFEOiBcIkFuZG9ycmFcIixcbiAgQU86IFwiQW5nb2xhXCIsXG4gIEFJOiBcIkFuZ3VpbGxhXCIsXG4gIEFROiBcIkFudGFyY3RpY2FcIixcbiAgQUc6IFwiQW50aWd1YSBBbmQgQmFyYnVkYVwiLFxuICBBUjogXCJBcmdlbnRpbmFcIixcbiAgQU06IFwiQXJtZW5pYVwiLFxuICBBVzogXCJBcnViYVwiLFxuICBBVTogXCJBdXN0cmFsaWFcIixcbiAgQVQ6IFwiQXVzdHJpYVwiLFxuICBBWjogXCJBemVyYmFpamFuXCIsXG4gIEJTOiBcIkJhaGFtYXNcIixcbiAgQkg6IFwiQmFocmFpblwiLFxuICBCRDogXCJCYW5nbGFkZXNoXCIsXG4gIEJCOiBcIkJhcmJhZG9zXCIsXG4gIEJZOiBcIkJlbGFydXNcIixcbiAgQkU6IFwiQmVsZ2l1bVwiLFxuICBCWjogXCJCZWxpemVcIixcbiAgQko6IFwiQmVuaW5cIixcbiAgQk06IFwiQmVybXVkYVwiLFxuICBCVDogXCJCaHV0YW5cIixcbiAgQk86IFwiQm9saXZpYVwiLFxuICBCQTogXCJCb3NuaWEgQW5kIEhlcnplZ292aW5hXCIsXG4gIEJXOiBcIkJvdHN3YW5hXCIsXG4gIEJWOiBcIkJvdXZldCBJc2xhbmRcIixcbiAgQlI6IFwiQnJhemlsXCIsXG4gIElPOiBcIkJyaXRpc2ggSW5kaWFuIE9jZWFuIFRlcnJpdG9yeVwiLFxuICBCTjogXCJCcnVuZWkgRGFydXNzYWxhbVwiLFxuICBCRzogXCJCdWxnYXJpYVwiLFxuICBCRjogXCJCdXJraW5hIEZhc29cIixcbiAgQkk6IFwiQnVydW5kaVwiLFxuICBLSDogXCJDYW1ib2RpYVwiLFxuICBDTTogXCJDYW1lcm9vblwiLFxuICBDQTogXCJDYW5hZGFcIixcbiAgQ1Y6IFwiQ2FwZSBWZXJkZVwiLFxuICBLWTogXCJDYXltYW4gSXNsYW5kc1wiLFxuICBDRjogXCJDZW50cmFsIEFmcmljYW4gUmVwdWJsaWNcIixcbiAgVEQ6IFwiQ2hhZFwiLFxuICBDTDogXCJDaGlsZVwiLFxuICBDTjogXCJDaGluYVwiLFxuICBDWDogXCJDaHJpc3RtYXMgSXNsYW5kXCIsXG4gIENDOiBcIkNvY29zIChLZWVsaW5nKSBJc2xhbmRzXCIsXG4gIENPOiBcIkNvbG9tYmlhXCIsXG4gIEtNOiBcIkNvbW9yb3NcIixcbiAgQ0c6IFwiQ29uZ29cIixcbiAgQ0Q6IFwiQ29uZ28sIERlbW9jcmF0aWMgUmVwdWJsaWNcIixcbiAgQ0s6IFwiQ29vayBJc2xhbmRzXCIsXG4gIENSOiBcIkNvc3RhIFJpY2FcIixcbiAgQ0k6IFwiQ290ZSBEJ0l2b2lyZVwiLFxuICBIUjogXCJDcm9hdGlhXCIsXG4gIENVOiBcIkN1YmFcIixcbiAgQ1k6IFwiQ3lwcnVzXCIsXG4gIENaOiBcIkN6ZWNoIFJlcHVibGljXCIsXG4gIERLOiBcIkRlbm1hcmtcIixcbiAgREo6IFwiRGppYm91dGlcIixcbiAgRE06IFwiRG9taW5pY2FcIixcbiAgRE86IFwiRG9taW5pY2FuIFJlcHVibGljXCIsXG4gIEVDOiBcIkVjdWFkb3JcIixcbiAgRUc6IFwiRWd5cHRcIixcbiAgU1Y6IFwiRWwgU2FsdmFkb3JcIixcbiAgR1E6IFwiRXF1YXRvcmlhbCBHdWluZWFcIixcbiAgRVI6IFwiRXJpdHJlYVwiLFxuICBFRTogXCJFc3RvbmlhXCIsXG4gIEVUOiBcIkV0aGlvcGlhXCIsXG4gIEZLOiBcIkZhbGtsYW5kIElzbGFuZHMgKE1hbHZpbmFzKVwiLFxuICBGTzogXCJGYXJvZSBJc2xhbmRzXCIsXG4gIEZKOiBcIkZpamlcIixcbiAgRkk6IFwiRmlubGFuZFwiLFxuICBGUjogXCJGcmFuY2VcIixcbiAgR0Y6IFwiRnJlbmNoIEd1aWFuYVwiLFxuICBQRjogXCJGcmVuY2ggUG9seW5lc2lhXCIsXG4gIFRGOiBcIkZyZW5jaCBTb3V0aGVybiBUZXJyaXRvcmllc1wiLFxuICBHQTogXCJHYWJvblwiLFxuICBHTTogXCJHYW1iaWFcIixcbiAgR0U6IFwiR2VvcmdpYVwiLFxuICBERTogXCJHZXJtYW55XCIsXG4gIEdIOiBcIkdoYW5hXCIsXG4gIEdJOiBcIkdpYnJhbHRhclwiLFxuICBHUjogXCJHcmVlY2VcIixcbiAgR0w6IFwiR3JlZW5sYW5kXCIsXG4gIEdEOiBcIkdyZW5hZGFcIixcbiAgR1A6IFwiR3VhZGVsb3VwZVwiLFxuICBHVTogXCJHdWFtXCIsXG4gIEdUOiBcIkd1YXRlbWFsYVwiLFxuICBHRzogXCJHdWVybnNleVwiLFxuICBHTjogXCJHdWluZWFcIixcbiAgR1c6IFwiR3VpbmVhLUJpc3NhdVwiLFxuICBHWTogXCJHdXlhbmFcIixcbiAgSFQ6IFwiSGFpdGlcIixcbiAgSE06IFwiSGVhcmQgSXNsYW5kICYgTWNkb25hbGQgSXNsYW5kc1wiLFxuICBWQTogXCJIb2x5IFNlZSAoVmF0aWNhbiBDaXR5IFN0YXRlKVwiLFxuICBITjogXCJIb25kdXJhc1wiLFxuICBISzogXCJIb25nIEtvbmdcIixcbiAgSFU6IFwiSHVuZ2FyeVwiLFxuICBJUzogXCJJY2VsYW5kXCIsXG4gIElOOiBcIkluZGlhXCIsXG4gIElEOiBcIkluZG9uZXNpYVwiLFxuICBJUjogXCJJcmFuLCBJc2xhbWljIFJlcHVibGljIE9mXCIsXG4gIElROiBcIklyYXFcIixcbiAgSUU6IFwiSXJlbGFuZFwiLFxuICBJTTogXCJJc2xlIE9mIE1hblwiLFxuICBJTDogXCJJc3JhZWxcIixcbiAgSVQ6IFwiSXRhbHlcIixcbiAgSk06IFwiSmFtYWljYVwiLFxuICBKUDogXCJKYXBhblwiLFxuICBKRTogXCJKZXJzZXlcIixcbiAgSk86IFwiSm9yZGFuXCIsXG4gIEtaOiBcIkthemFraHN0YW5cIixcbiAgS0U6IFwiS2VueWFcIixcbiAgS0k6IFwiS2lyaWJhdGlcIixcbiAgS1I6IFwiS29yZWFcIixcbiAgS1c6IFwiS3V3YWl0XCIsXG4gIEtHOiBcIkt5cmd5enN0YW5cIixcbiAgTEE6IFwiTGFvIFBlb3BsZSdzIERlbW9jcmF0aWMgUmVwdWJsaWNcIixcbiAgTFY6IFwiTGF0dmlhXCIsXG4gIExCOiBcIkxlYmFub25cIixcbiAgTFM6IFwiTGVzb3Rob1wiLFxuICBMUjogXCJMaWJlcmlhXCIsXG4gIExZOiBcIkxpYnlhbiBBcmFiIEphbWFoaXJpeWFcIixcbiAgTEk6IFwiTGllY2h0ZW5zdGVpblwiLFxuICBMVDogXCJMaXRodWFuaWFcIixcbiAgTFU6IFwiTHV4ZW1ib3VyZ1wiLFxuICBNTzogXCJNYWNhb1wiLFxuICBNSzogXCJNYWNlZG9uaWFcIixcbiAgTUc6IFwiTWFkYWdhc2NhclwiLFxuICBNVzogXCJNYWxhd2lcIixcbiAgTVk6IFwiTWFsYXlzaWFcIixcbiAgTVY6IFwiTWFsZGl2ZXNcIixcbiAgTUw6IFwiTWFsaVwiLFxuICBNVDogXCJNYWx0YVwiLFxuICBNSDogXCJNYXJzaGFsbCBJc2xhbmRzXCIsXG4gIE1ROiBcIk1hcnRpbmlxdWVcIixcbiAgTVI6IFwiTWF1cml0YW5pYVwiLFxuICBNVTogXCJNYXVyaXRpdXNcIixcbiAgWVQ6IFwiTWF5b3R0ZVwiLFxuICBNWDogXCJNZXhpY29cIixcbiAgRk06IFwiTWljcm9uZXNpYSwgRmVkZXJhdGVkIFN0YXRlcyBPZlwiLFxuICBNRDogXCJNb2xkb3ZhXCIsXG4gIE1DOiBcIk1vbmFjb1wiLFxuICBNTjogXCJNb25nb2xpYVwiLFxuICBNRTogXCJNb250ZW5lZ3JvXCIsXG4gIE1TOiBcIk1vbnRzZXJyYXRcIixcbiAgTUE6IFwiTW9yb2Njb1wiLFxuICBNWjogXCJNb3phbWJpcXVlXCIsXG4gIE1NOiBcIk15YW5tYXJcIixcbiAgTkE6IFwiTmFtaWJpYVwiLFxuICBOUjogXCJOYXVydVwiLFxuICBOUDogXCJOZXBhbFwiLFxuICBOTDogXCJOZXRoZXJsYW5kc1wiLFxuICBBTjogXCJOZXRoZXJsYW5kcyBBbnRpbGxlc1wiLFxuICBOQzogXCJOZXcgQ2FsZWRvbmlhXCIsXG4gIE5aOiBcIk5ldyBaZWFsYW5kXCIsXG4gIE5JOiBcIk5pY2FyYWd1YVwiLFxuICBORTogXCJOaWdlclwiLFxuICBORzogXCJOaWdlcmlhXCIsXG4gIE5VOiBcIk5pdWVcIixcbiAgTkY6IFwiTm9yZm9sayBJc2xhbmRcIixcbiAgTVA6IFwiTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzXCIsXG4gIE5POiBcIk5vcndheVwiLFxuICBPTTogXCJPbWFuXCIsXG4gIFBLOiBcIlBha2lzdGFuXCIsXG4gIFBXOiBcIlBhbGF1XCIsXG4gIFBTOiBcIlBhbGVzdGluaWFuIFRlcnJpdG9yeSwgT2NjdXBpZWRcIixcbiAgUEE6IFwiUGFuYW1hXCIsXG4gIFBHOiBcIlBhcHVhIE5ldyBHdWluZWFcIixcbiAgUFk6IFwiUGFyYWd1YXlcIixcbiAgUEU6IFwiUGVydVwiLFxuICBQSDogXCJQaGlsaXBwaW5lc1wiLFxuICBQTjogXCJQaXRjYWlyblwiLFxuICBQTDogXCJQb2xhbmRcIixcbiAgUFQ6IFwiUG9ydHVnYWxcIixcbiAgUFI6IFwiUHVlcnRvIFJpY29cIixcbiAgUUE6IFwiUWF0YXJcIixcbiAgUkU6IFwiUmV1bmlvblwiLFxuICBSTzogXCJSb21hbmlhXCIsXG4gIFJVOiBcIlJ1c3NpYW4gRmVkZXJhdGlvblwiLFxuICBSVzogXCJSd2FuZGFcIixcbiAgQkw6IFwiU2FpbnQgQmFydGhlbGVteVwiLFxuICBTSDogXCJTYWludCBIZWxlbmFcIixcbiAgS046IFwiU2FpbnQgS2l0dHMgQW5kIE5ldmlzXCIsXG4gIExDOiBcIlNhaW50IEx1Y2lhXCIsXG4gIE1GOiBcIlNhaW50IE1hcnRpblwiLFxuICBQTTogXCJTYWludCBQaWVycmUgQW5kIE1pcXVlbG9uXCIsXG4gIFZDOiBcIlNhaW50IFZpbmNlbnQgQW5kIEdyZW5hZGluZXNcIixcbiAgV1M6IFwiU2Ftb2FcIixcbiAgU006IFwiU2FuIE1hcmlub1wiLFxuICBTVDogXCJTYW8gVG9tZSBBbmQgUHJpbmNpcGVcIixcbiAgU0E6IFwiU2F1ZGkgQXJhYmlhXCIsXG4gIFNOOiBcIlNlbmVnYWxcIixcbiAgUlM6IFwiU2VyYmlhXCIsXG4gIFNDOiBcIlNleWNoZWxsZXNcIixcbiAgU0w6IFwiU2llcnJhIExlb25lXCIsXG4gIFNHOiBcIlNpbmdhcG9yZVwiLFxuICBTSzogXCJTbG92YWtpYVwiLFxuICBTSTogXCJTbG92ZW5pYVwiLFxuICBTQjogXCJTb2xvbW9uIElzbGFuZHNcIixcbiAgU086IFwiU29tYWxpYVwiLFxuICBaQTogXCJTb3V0aCBBZnJpY2FcIixcbiAgR1M6IFwiU291dGggR2VvcmdpYSBBbmQgU2FuZHdpY2ggSXNsLlwiLFxuICBFUzogXCJTcGFpblwiLFxuICBMSzogXCJTcmkgTGFua2FcIixcbiAgU0Q6IFwiU3VkYW5cIixcbiAgU1I6IFwiU3VyaW5hbWVcIixcbiAgU0o6IFwiU3ZhbGJhcmQgQW5kIEphbiBNYXllblwiLFxuICBTWjogXCJTd2F6aWxhbmRcIixcbiAgU0U6IFwiU3dlZGVuXCIsXG4gIENIOiBcIlN3aXR6ZXJsYW5kXCIsXG4gIFNZOiBcIlN5cmlhbiBBcmFiIFJlcHVibGljXCIsXG4gIFRXOiBcIlRhaXdhblwiLFxuICBUSjogXCJUYWppa2lzdGFuXCIsXG4gIFRaOiBcIlRhbnphbmlhXCIsXG4gIFRIOiBcIlRoYWlsYW5kXCIsXG4gIFRMOiBcIlRpbW9yLUxlc3RlXCIsXG4gIFRHOiBcIlRvZ29cIixcbiAgVEs6IFwiVG9rZWxhdVwiLFxuICBUTzogXCJUb25nYVwiLFxuICBUVDogXCJUcmluaWRhZCBBbmQgVG9iYWdvXCIsXG4gIFROOiBcIlR1bmlzaWFcIixcbiAgVFI6IFwiVHVya2V5XCIsXG4gIFRNOiBcIlR1cmttZW5pc3RhblwiLFxuICBUQzogXCJUdXJrcyBBbmQgQ2FpY29zIElzbGFuZHNcIixcbiAgVFY6IFwiVHV2YWx1XCIsXG4gIFVHOiBcIlVnYW5kYVwiLFxuICBVQTogXCJVa3JhaW5lXCIsXG4gIEFFOiBcIlVuaXRlZCBBcmFiIEVtaXJhdGVzXCIsXG4gIEdCOiBcIlVuaXRlZCBLaW5nZG9tXCIsXG4gIFVTOiBcIlVuaXRlZCBTdGF0ZXNcIixcbiAgVU06IFwiVW5pdGVkIFN0YXRlcyBPdXRseWluZyBJc2xhbmRzXCIsXG4gIFVZOiBcIlVydWd1YXlcIixcbiAgVVo6IFwiVXpiZWtpc3RhblwiLFxuICBWVTogXCJWYW51YXR1XCIsXG4gIFZFOiBcIlZlbmV6dWVsYVwiLFxuICBWTjogXCJWaWV0IE5hbVwiLFxuICBWRzogXCJWaXJnaW4gSXNsYW5kcywgQnJpdGlzaFwiLFxuICBWSTogXCJWaXJnaW4gSXNsYW5kcywgVS5TLlwiLFxuICBXRjogXCJXYWxsaXMgQW5kIEZ1dHVuYVwiLFxuICBFSDogXCJXZXN0ZXJuIFNhaGFyYVwiLFxuICBZRTogXCJZZW1lblwiLFxuICBaTTogXCJaYW1iaWFcIixcbiAgWlc6IFwiWmltYmFid2VcIlxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZXJEb21haW5zQnlSb2xlcyh1c2VyOiBhbnksIHJvbGVzOiBBcnJheTxudW1iZXI+KSB7XG4gIGNvbnN0IGVEID0gdXNlciAmJiB1c2VyLmVucm9sbGVkRG9tYWlucyA/IHVzZXIuZW5yb2xsZWREb21haW5zIDogW107XG4gIGNvbnN0IGRvbWFpbnMgPSBbXTtcbiAgbGV0IGkgPSAwO1xuICBmb3IgKGk7IGkgPCBlRC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGUgPSBlRFtpXTtcbiAgICBpZiAocm9sZXMuaW5jbHVkZXMoZS5yb2xlKSkge1xuICAgICAgZG9tYWlucy5wdXNoKGUuZG9tYWluKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRvbWFpbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VyQWRtaW5Eb21haW5zKHVzZXI6IGFueSkge1xuICByZXR1cm4gdXNlckRvbWFpbnNCeVJvbGVzKHVzZXIsIFtSb2xlLkFETUlOLCBSb2xlLk1BTkFHRVJdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvZHVjdFN1cHBsaWVyTU9EKHByb2R1Y3Q6IGFueSkge1xuICBjb25zdCBwcm9kdWN0VHlwZSA9IHByb2R1Y3QgJiYgcHJvZHVjdC5wcm9kdWN0VHlwZVxuICByZXR1cm4gcHJvZHVjdCAmJiBbXG4gICAgU3RyaW5nKFByb2R1Y3RUeXBlLlNVUFBMSUVSX01PRCksXG4gICAgU3RyaW5nKFByb2R1Y3RUeXBlLlNVUFBMSUVSX1JFU0VMTF9NT0QpXG4gIF0uaW5jbHVkZXMoU3RyaW5nKHByb2R1Y3RUeXBlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1VzZXJSZWdpc3RlcmVkKHVzZXI6IGFueSkge1xuICBjb25zdCBpZCA9IHVzZXIgPyB1c2VyLmlkIDogbnVsbDtcbiAgcmV0dXJuIGlkICE9PSB1bmRlZmluZWQgJiYgaWQgIT09IG51bGwgJiYgaWQgPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWdpc3RlcmVkQW5kSGFzU3RvcmUodXNlcjogYW55KSB7XG4gIGNvbnN0IGlkID0gdXNlciA/IHVzZXIuaWQgOiBudWxsO1xuICByZXR1cm4gaWQgIT09IHVuZGVmaW5lZCAmJiBpZCAhPT0gbnVsbCAmJiBpZCA+IDAgJiYgdXNlci5oYXNTdG9yZTtcbn1cblxuY29uc3Qgc3VwcG9ydGVkTnVtYmVyczogYW55ID0ge1xuICBBVTogJ0F1c3RyYWxpYSAoKzYxKScsXG4gIEFFOiAnVW5pdGVkIEFyYWIgRW1pcmF0ZXMgKCs5NzEpJyxcbiAgQkg6ICdCYWhyYWluICgrOTczKScsXG4gIENOOiAnQ2hpbmEgKCs4NiknLFxuICBESzogJ0Rlbm1hcmsgKCs0NSknLFxuICBFUzogJ1NwYWluICgrMzQpJyxcbiAgRlI6ICdGcmFuY2UgKCszMyknLFxuICBHQjogJ1VuaXRlZCBLaW5nZG9tICgrNDQpJyxcbiAgSEs6ICdIb25nIEtvbmcgKCs4NTIpJyxcbiAgSUQ6ICdJbmRvbmVzaWEgKCs2MiknLFxuICBJTjogJ0luZGlhICgrOTEpJyxcbiAgSVQ6ICdJdGFseSAoKzM5KScsXG4gIEtSOiAnU291dGggS29yZWEgKCs4MiknLFxuICBOQzogJ05ldyBDYWxlZG9uaWEgKCs2ODcpJyxcbiAgTlo6ICdOZXcgWmVhbGFuZCAoKzY0KScsXG4gIE9NOiAnT21hbiAoKzk2OCknLFxuICBQSDogJ1BoaWxpcHBpbmVzICgrNjMpJyxcbiAgUFQ6ICdQb3J0dWdhbCAoKzM1MSknLFxuICBRQTogJ1FhdGFyICgrOTc0KScsXG4gIFNFOiAnU3dlZGVuICgrNDYpJyxcbiAgU0c6ICdTaW5nYXBvcmUgKCs2NSknLFxuICBUSDogJ1RoYWlsYW5kICgrNjYpJyxcbiAgVVM6ICdVbml0ZWQgU3RhdGVzICgrMSknLFxuICBaQTogJ1NvdXRoIEFmcmljYSAoKzI3KScsXG59O1xuXG5leHBvcnQgY29uc3QgcGhvbmVPcHRpb25zID0gT2JqZWN0LmtleXMoc3VwcG9ydGVkTnVtYmVycykubWFwKChrZXkpID0+ICh7XG4gIHZhbHVlOiBrZXksXG4gIGxhYmVsOiBzdXBwb3J0ZWROdW1iZXJzW2tleV0sXG59KSk7XG5cbmV4cG9ydCBjb25zdCBhZGRyZXNzQ29tcG9uZW50c1NldHRpbmdzOiBhbnkgPSB7XG4gIGFkbWluaXN0cmF0aXZlX2FyZWFfbGV2ZWxfMTogJ3Nob3J0X25hbWUnLFxuICBhZG1pbmlzdHJhdGl2ZV9hcmVhX2xldmVsXzI6ICdzaG9ydF9uYW1lJyxcbiAgY291bnRyeTogJ3Nob3J0X25hbWUnLFxuICBlc3RhYmxpc2htZW50OiAnbG9uZ19uYW1lJyxcbiAgZmxvb3I6ICdzaG9ydF9uYW1lJyxcbiAgbG9jYWxpdHk6ICdsb25nX25hbWUnLFxuICBwb3N0YWxfY29kZTogJ3Nob3J0X25hbWUnLFxuICBwcmVtaXNlOiAnc2hvcnRfbmFtZScsXG4gIHJvb206ICdsb25nX25hbWUnLFxuICByb3V0ZTogJ3Nob3J0X25hbWUnLFxuICBzdHJlZXRfbnVtYmVyOiAnc2hvcnRfbmFtZScsXG4gIHN1YmxvY2FsaXR5OiAnbG9uZ19uYW1lJyxcbiAgc3VicHJlbWlzZTogJ3Nob3J0X25hbWUnLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdlb1N1Z2dlc3RSZXN1bHRBc05ld0FkZHJlc3MocmVzcDogYW55KSB7XG4gIGNvbnN0IGFkZHJlc3NDb21wb25lbnRzID0gcmVzcCAmJiByZXNwLmdtYXBzID9cbiAgICByZXNwLmdtYXBzLmFkZHJlc3NfY29tcG9uZW50cyA6IG51bGw7XG4gIGNvbnN0IG5hbWUgPSByZXNwICYmIHJlc3AuZ21hcHMgJiYgcmVzcC5nbWFwcy5uYW1lO1xuICBjb25zdCBhZGRyZXNzID0ge1xuICAgIGNpdHk6ICcnLFxuICAgIGNvdW50cnk6ICcnLFxuICAgIGxpbmVPbmU6IG5hbWUgPyBuYW1lIDogJycsXG4gICAgbGluZVR3bzogJycsXG4gICAgcG9zdGNvZGU6ICcnLFxuICAgIHN0YXRlOiAnJyxcbiAgfTtcbiAgbGV0IGk7XG4gIGlmIChhZGRyZXNzQ29tcG9uZW50cykge1xuICAgIGZvciAoaSA9IDA7IGkgPCBhZGRyZXNzQ29tcG9uZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYWRkckNvbXBvbmVudCA9IGFkZHJlc3NDb21wb25lbnRzW2ldO1xuICAgICAgY29uc3QgYWRkclR5cGVzID0gYWRkckNvbXBvbmVudC50eXBlcztcbiAgICAgIGNvbnN0IGFkZHJUeXBlID0gYWRkclR5cGVzLmxlbmd0aCA+IDAgPyBhZGRyVHlwZXNbMF0gOiBudWxsO1xuICAgICAgY29uc3QgY29tcG9uZW50U2V0dGluZyA9IGFkZHJUeXBlID9cbiAgICAgICAgYWRkcmVzc0NvbXBvbmVudHNTZXR0aW5nc1thZGRyVHlwZV0gOiBudWxsO1xuICAgICAgaWYgKGNvbXBvbmVudFNldHRpbmcpIHtcbiAgICAgICAgY29uc3QgYWRkcmVzc1ZhbCA9IGFkZHJDb21wb25lbnRbY29tcG9uZW50U2V0dGluZ107XG4gICAgICAgIHN3aXRjaCAoYWRkclR5cGUpIHtcbiAgICAgICAgICBjYXNlICdlc3RhYmxpc2htZW50JzpcbiAgICAgICAgICBjYXNlICdyb29tJzpcbiAgICAgICAgICBjYXNlICdmbG9vcic6XG4gICAgICAgICAgY2FzZSAnc3RyZWV0X251bWJlcic6XG4gICAgICAgICAgY2FzZSAncHJlbWlzZSc6XG4gICAgICAgICAgY2FzZSAnc3VicHJlbWlzZSc6XG4gICAgICAgICAgY2FzZSAncm91dGUnOlxuICAgICAgICAgICAgY29uc3Qgb2xkTGluZU9uZSA9IGFkZHJlc3MubGluZU9uZTtcbiAgICAgICAgICAgIGFkZHJlc3MubGluZU9uZSA9IG9sZExpbmVPbmUuaW5jbHVkZXMoYWRkcmVzc1ZhbCkgP1xuICAgICAgICAgICAgICBvbGRMaW5lT25lIDogYCR7b2xkTGluZU9uZX0gJHthZGRyZXNzVmFsfWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdsb2NhbGl0eSc6XG4gICAgICAgICAgY2FzZSAnc3VibG9jYWxpdHknOlxuICAgICAgICAgICAgY29uc3Qgb2xkQ2l0eSA9IGFkZHJlc3MuY2l0eSA/IGAke2FkZHJlc3MuY2l0eX0gYCA6ICcnXG4gICAgICAgICAgICBhZGRyZXNzLmNpdHkgPSBvbGRDaXR5ICsgYWRkcmVzc1ZhbDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2FkbWluaXN0cmF0aXZlX2FyZWFfbGV2ZWxfMSc6XG4gICAgICAgICAgICBhZGRyZXNzLnN0YXRlID0gYWRkcmVzc1ZhbDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2FkbWluaXN0cmF0aXZlX2FyZWFfbGV2ZWxfMic6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdjb3VudHJ5JzpcbiAgICAgICAgICAgIGFkZHJlc3MuY291bnRyeSA9IGFkZHJlc3NWYWw7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdwb3N0YWxfY29kZSc6XG4gICAgICAgICAgICBhZGRyZXNzLnBvc3Rjb2RlID0gYWRkcmVzc1ZhbDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWRkcmVzcztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZHJlc3NJbk9uZUxpbmUoYWRkcmVzczogYW55KSB7XG4gIGNvbnN0IGEgPSBhZGRyZXNzID8gYWRkcmVzcyA6IHt9O1xuICBjb25zdCB7XG4gICAgY2l0eSxcbiAgICBjb3VudHJ5LFxuICAgIGxpbmVPbmUsXG4gICAgbGluZVR3byxcbiAgICBwb3N0Y29kZSxcbiAgICBzdGF0ZVxuICB9ID0gYTtcbiAgY29uc3QgbDEgPSBsaW5lT25lID8gYCR7bGluZU9uZX0gYCA6ICcnO1xuICBjb25zdCBsMiA9IGxpbmVUd28gPyBgJHtsaW5lVHdvfSBgIDogJyc7XG4gIGNvbnN0IGMgPSBjaXR5ID8gYCR7Y2l0eX0gYCA6ICcnO1xuICBjb25zdCBzID0gc3RhdGUgPyBgJHtzdGF0ZX0gYCA6ICcnO1xuICBjb25zdCBwID0gcG9zdGNvZGUgPyBgJHtwb3N0Y29kZX0gYCA6ICcnO1xuICBjb25zdCBjb3VudHJ5RnVsbCA9IGNvdW50cnkgPyBpc29Db3VudHJpZXNbY291bnRyeV0gOiAnJztcbiAgcmV0dXJuIGwxICsgbDIgKyBjICsgcyArIHAgKyBjb3VudHJ5RnVsbDtcbn1cblxuZXhwb3J0IGVudW0gRmllbGRUeXBlIHtcbiAgVEVYVF9JTlBVVCA9IDEsXG4gIFNFTEVDVCA9IDIsXG4gIEZJTEVfVVBMT0FEID0gMyxcbiAgVEVYVF9BUkVBID0gNCxcbiAgTlVNQkVSX0lOUFVUID0gNSxcbiAgQ0hFQ0tCT1ggPSA2LFxuICBSQURJTyA9IDcsXG4gIEZJRUxEX0lOU1RSVUNUSU9OUyA9IDgsXG4gIElNQUdFX1NFTEVDVCA9IDksXG4gIENPTE9VUl9QSUNLRVIgPSAxMCxcbiAgQ09MT1VSX1NFTEVDVCA9IDExLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTZWxlY3RhYmxlKGZpZWxkVHlwZTogbnVtYmVyKSB7XG4gIHJldHVybiBbXG4gICAgRmllbGRUeXBlLlNFTEVDVCxcbiAgICBGaWVsZFR5cGUuQ0hFQ0tCT1gsXG4gICAgRmllbGRUeXBlLlJBRElPLFxuICAgIEZpZWxkVHlwZS5JTUFHRV9TRUxFQ1QsXG4gICAgRmllbGRUeXBlLkNPTE9VUl9TRUxFQ1RcbiAgXS5pbmNsdWRlcyhmaWVsZFR5cGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJbnN0cnVjdGlvbnNUeXBlKGZpZWxkVHlwZTogbnVtYmVyKSB7XG4gIHJldHVybiBTdHJpbmcoRmllbGRUeXBlLkZJRUxEX0lOU1RSVUNUSU9OUykgPT09IFN0cmluZyhmaWVsZFR5cGUpO1xufVxuXG5leHBvcnQgY29uc3QgY291bnRyeURlZmF1bHREaWN0ID0gKGN1cnJlbmN5OiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIHtjdXJyZW5jeTogY3VycmVuY3l9O1xufTtcbiAgXG5leHBvcnQgY29uc3Qgc3VwcG9ydGVkQ291bnRyeURlZmF1bHRzOiBhbnkgPSB7XG4gIEFFOiBjb3VudHJ5RGVmYXVsdERpY3QoJ1VTRCcpLFxuICBBVTogY291bnRyeURlZmF1bHREaWN0KCdBVUQnKSxcbiAgQkg6IGNvdW50cnlEZWZhdWx0RGljdCgnVVNEJyksXG4gIENIOiBjb3VudHJ5RGVmYXVsdERpY3QoJ0NOWScpLFxuICBESzogY291bnRyeURlZmF1bHREaWN0KCdFVVInKSxcbiAgRVM6IGNvdW50cnlEZWZhdWx0RGljdCgnRVVSJyksXG4gIEZSOiBjb3VudHJ5RGVmYXVsdERpY3QoJ0VVUicpLFxuICBHQjogY291bnRyeURlZmF1bHREaWN0KCdHQlAnKSxcbiAgSEs6IGNvdW50cnlEZWZhdWx0RGljdCgnSEtEJyksXG4gIElEOiBjb3VudHJ5RGVmYXVsdERpY3QoJ1VTRCcpLFxuICBJTjogY291bnRyeURlZmF1bHREaWN0KCdJTlInKSxcbiAgSVQ6IGNvdW50cnlEZWZhdWx0RGljdCgnRVVSJyksXG4gIEtSOiBjb3VudHJ5RGVmYXVsdERpY3QoJ1VTRCcpLFxuICBOQzogY291bnRyeURlZmF1bHREaWN0KCdVU0QnKSxcbiAgTlo6IGNvdW50cnlEZWZhdWx0RGljdCgnTlpEJyksXG4gIE9NOiBjb3VudHJ5RGVmYXVsdERpY3QoJ1VTRCcpLFxuICBQSDogY291bnRyeURlZmF1bHREaWN0KCdVU0QnKSxcbiAgUFQ6IGNvdW50cnlEZWZhdWx0RGljdCgnRVVSJyksXG4gIFFBOiBjb3VudHJ5RGVmYXVsdERpY3QoJ1VTRCcpLFxuICBTRTogY291bnRyeURlZmF1bHREaWN0KCdVU0QnKSxcbiAgU0c6IGNvdW50cnlEZWZhdWx0RGljdCgnU0dEJyksXG4gIFRIOiBjb3VudHJ5RGVmYXVsdERpY3QoJ1VTRCcpLFxuICBVUzogY291bnRyeURlZmF1bHREaWN0KCdVU0QnKSxcbiAgWkE6IGNvdW50cnlEZWZhdWx0RGljdCgnVVNEJyksXG59O1xuICBcbmV4cG9ydCBjb25zdCBzdXBwb3J0ZWRDb3VudHJ5RGVmYXVsdHNXaXRoRGVmYXVsdCA9IChjb3VudHJ5Q29kZTogYW55KSA9PiB7XG4gIGNvbnN0IGRlZmF1bHRDb3VudHJ5VmFsdWVzID0gc3VwcG9ydGVkQ291bnRyeURlZmF1bHRzW2NvdW50cnlDb2RlXTtcbiAgcmV0dXJuIGRlZmF1bHRDb3VudHJ5VmFsdWVzID8gZGVmYXVsdENvdW50cnlWYWx1ZXMgOiBzdXBwb3J0ZWRDb3VudHJ5RGVmYXVsdHMuQVU7XG59O1xuXG5pbnRlcmZhY2UgQ2xpZW50RmlsZUFuZE9iamVjdElkIHtcbiAgZmlsZTogYW55O1xuICBvYmplY3RJZDogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5DbGllbnRGaWxlcyhjbGllbnRGaWxlczogQ2xpZW50RmlsZUFuZE9iamVjdElkW10pIHtcbiAgcmV0dXJuIGNsaWVudEZpbGVzLm1hcCgoY2xpZW50RmlsZTogQ2xpZW50RmlsZUFuZE9iamVjdElkKSA9PiBjbGllbnRGaWxlLmZpbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kQ2xpZW50VG9Pd25EcmFmdChqb2I6IGFueSkge1xuICBjb25zdCB7IG93bkRyYWZ0cyB9ID0gam9iO1xuICBpZiAoam9iLm93bkRyYWZ0cyAmJiBqb2Iub3duRHJhZnRzLmxlbmd0aCkge1xuICAgIGpvYi5vd25EcmFmdHNbMF0uZGVzaWduZXIgPSBqb2IuY2xpZW50O1xuICB9XG4gIHJldHVybiBqb2I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWRpcmVjdE9uU3VjY2VzcyhcbiAgdXJsOiBzdHJpbmcsIHJlZGlyZWN0V2l0aFZhbHVlPzogYm9vbGVhbiwgdmFsdWU/OiBhbnkpIHtcbiAgbGV0IGNsZWFuVXJsID0gdXJsLlxuICAgIHJlcGxhY2UoJyUyNycsICcnKS5cbiAgICByZXBsYWNlKCclOTEnLCAnJykuXG4gICAgcmVwbGFjZSgnJTkyJywgJycpLlxuICAgIHJlcGxhY2UoJyU5MycsICcnKS5cbiAgICByZXBsYWNlKCclOTQnLCAnJyk7XG4gIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gZGVjb2RlVVJJKFxuICAgIHJlZGlyZWN0V2l0aFZhbHVlID8gYCR7Y2xlYW5Vcmx9bWVyY2hpVmFsdWU9JHt2YWx1ZX1gIDogY2xlYW5VcmxcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsV0FBVyxFQUFFQyxJQUFJLFFBQVEsU0FBUztBQUUzQyxPQUFPLElBQU1DLFlBQWlCLEdBQUc7RUFDL0JDLEVBQUUsRUFBRSxhQUFhO0VBQ2pCQyxFQUFFLEVBQUUsZUFBZTtFQUNuQkMsRUFBRSxFQUFFLFNBQVM7RUFDYkMsRUFBRSxFQUFFLFNBQVM7RUFDYkMsRUFBRSxFQUFFLGdCQUFnQjtFQUNwQkMsRUFBRSxFQUFFLFNBQVM7RUFDYkMsRUFBRSxFQUFFLFFBQVE7RUFDWkMsRUFBRSxFQUFFLFVBQVU7RUFDZEMsRUFBRSxFQUFFLFlBQVk7RUFDaEJDLEVBQUUsRUFBRSxxQkFBcUI7RUFDekJDLEVBQUUsRUFBRSxXQUFXO0VBQ2ZDLEVBQUUsRUFBRSxTQUFTO0VBQ2JDLEVBQUUsRUFBRSxPQUFPO0VB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