@merchi/product-form 1.19.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +272 -0
- package/lib/actions/jobs.d.ts +3 -0
- package/lib/actions/jobs.js +80 -0
- package/lib/actions/leads.d.ts +7 -0
- package/lib/actions/leads.js +67 -0
- package/lib/components/AlertVariationSellerEditable.d.ts +6 -0
- package/lib/components/AlertVariationSellerEditable.js +46 -0
- package/lib/components/Collapse.d.ts +3 -0
- package/lib/components/Collapse.js +34 -0
- package/lib/components/DateCountdown.d.ts +44 -0
- package/lib/components/DateCountdown.js +188 -0
- package/lib/components/DropzoneInput.d.ts +10 -0
- package/lib/components/DropzoneInput.js +169 -0
- package/lib/components/DynamicVariationInput.d.ts +9 -0
- package/lib/components/DynamicVariationInput.js +71 -0
- package/lib/components/FormLead.d.ts +10 -0
- package/lib/components/FormLead.js +215 -0
- package/lib/components/GroupInventory.d.ts +6 -0
- package/lib/components/GroupInventory.js +16 -0
- package/lib/components/InputGroupQuantity.d.ts +8 -0
- package/lib/components/InputGroupQuantity.js +117 -0
- package/lib/components/InputHiddenStatic.d.ts +8 -0
- package/lib/components/InputHiddenStatic.js +24 -0
- package/lib/components/InputProductQuantity.d.ts +7 -0
- package/lib/components/InputProductQuantity.js +102 -0
- package/lib/components/InventoryStatus.d.ts +7 -0
- package/lib/components/InventoryStatus.js +67 -0
- package/lib/components/MerchiProductForm.d.ts +62 -0
- package/lib/components/MerchiProductForm.js +51 -0
- package/lib/components/PriceMatrix.d.ts +27 -0
- package/lib/components/PriceMatrix.js +106 -0
- package/lib/components/ProductButtonsSubmit.d.ts +3 -0
- package/lib/components/ProductButtonsSubmit.js +52 -0
- package/lib/components/ProductFeatureDeadline.d.ts +3 -0
- package/lib/components/ProductFeatureDeadline.js +25 -0
- package/lib/components/ProductGroupBuyStatus.d.ts +3 -0
- package/lib/components/ProductGroupBuyStatus.js +47 -0
- package/lib/components/ProductPriceMatrix.d.ts +3 -0
- package/lib/components/ProductPriceMatrix.js +51 -0
- package/lib/components/ProductTitle.d.ts +3 -0
- package/lib/components/ProductTitle.js +36 -0
- package/lib/components/ProductTotalCost.d.ts +3 -0
- package/lib/components/ProductTotalCost.js +74 -0
- package/lib/components/ProductUnitPrice.d.ts +7 -0
- package/lib/components/ProductUnitPrice.js +51 -0
- package/lib/components/TooltipElement.d.ts +9 -0
- package/lib/components/TooltipElement.js +35 -0
- package/lib/components/VariationAreaInput.d.ts +8 -0
- package/lib/components/VariationAreaInput.js +219 -0
- package/lib/components/VariationCheckBoxOrRadioOption.d.ts +10 -0
- package/lib/components/VariationCheckBoxOrRadioOption.js +82 -0
- package/lib/components/VariationCheckboxRadio.d.ts +17 -0
- package/lib/components/VariationCheckboxRadio.js +57 -0
- package/lib/components/VariationColourExtractInput.d.ts +8 -0
- package/lib/components/VariationColourExtractInput.js +395 -0
- package/lib/components/VariationError.d.ts +7 -0
- package/lib/components/VariationError.js +52 -0
- package/lib/components/VariationFieldInputInstructions.d.ts +10 -0
- package/lib/components/VariationFieldInputInstructions.js +50 -0
- package/lib/components/VariationFieldInstructions.d.ts +3 -0
- package/lib/components/VariationFieldInstructions.js +22 -0
- package/lib/components/VariationFieldNameAndCostInputs.d.ts +7 -0
- package/lib/components/VariationFieldNameAndCostInputs.js +34 -0
- package/lib/components/VariationFieldOptionDefaultInputs.d.ts +7 -0
- package/lib/components/VariationFieldOptionDefaultInputs.js +48 -0
- package/lib/components/VariationFieldStaticValues.d.ts +8 -0
- package/lib/components/VariationFieldStaticValues.js +57 -0
- package/lib/components/VariationFileInput.d.ts +8 -0
- package/lib/components/VariationFileInput.js +229 -0
- package/lib/components/VariationInput.d.ts +11 -0
- package/lib/components/VariationInput.js +97 -0
- package/lib/components/VariationLabel.d.ts +11 -0
- package/lib/components/VariationLabel.js +85 -0
- package/lib/components/VariationOptionColour.d.ts +8 -0
- package/lib/components/VariationOptionColour.js +50 -0
- package/lib/components/VariationOptionImage.d.ts +8 -0
- package/lib/components/VariationOptionImage.js +52 -0
- package/lib/components/VariationSelect.d.ts +8 -0
- package/lib/components/VariationSelect.js +66 -0
- package/lib/components/VariationSelectElements.d.ts +16 -0
- package/lib/components/VariationSelectElements.js +141 -0
- package/lib/components/VariationTurnaroundTime.d.ts +9 -0
- package/lib/components/VariationTurnaroundTime.js +156 -0
- package/lib/components/Variations.d.ts +9 -0
- package/lib/components/Variations.js +109 -0
- package/lib/components/VariationsGroups.d.ts +8 -0
- package/lib/components/VariationsGroups.js +79 -0
- package/lib/components/buttons/ButtonAddGroup.d.ts +7 -0
- package/lib/components/buttons/ButtonAddGroup.js +38 -0
- package/lib/components/buttons/ButtonProductSubmit.d.ts +7 -0
- package/lib/components/buttons/ButtonProductSubmit.js +33 -0
- package/lib/components/buttons/ButtonRemoveGroup.d.ts +8 -0
- package/lib/components/buttons/ButtonRemoveGroup.js +25 -0
- package/lib/components/buttons/index.d.ts +4 -0
- package/lib/components/buttons/index.js +5 -0
- package/lib/components/cost.d.ts +11 -0
- package/lib/components/cost.js +44 -0
- package/lib/components/currency.d.ts +16 -0
- package/lib/components/currency.js +184 -0
- package/lib/components/drafts/DraftApprovePanel.d.ts +6 -0
- package/lib/components/drafts/DraftApprovePanel.js +315 -0
- package/lib/components/drafts/DraftCanvas.d.ts +13 -0
- package/lib/components/drafts/DraftCanvas.js +496 -0
- package/lib/components/drafts/DraftDesignerSheet.d.ts +9 -0
- package/lib/components/drafts/DraftDesignerSheet.js +685 -0
- package/lib/components/drafts/ProductDraftsHost.d.ts +3 -0
- package/lib/components/drafts/ProductDraftsHost.js +207 -0
- package/lib/components/drafts/useHtmlImage.d.ts +1 -0
- package/lib/components/drafts/useHtmlImage.js +45 -0
- package/lib/components/icons/IconChecked.d.ts +3 -0
- package/lib/components/icons/IconChecked.js +10 -0
- package/lib/components/icons/IconCheckedOrNoStock.d.ts +7 -0
- package/lib/components/icons/IconCheckedOrNoStock.js +13 -0
- package/lib/components/icons/IconCountryFlag.d.ts +8 -0
- package/lib/components/icons/IconCountryFlag.js +27 -0
- package/lib/components/icons/IconFile.d.ts +7 -0
- package/lib/components/icons/IconFile.js +41 -0
- package/lib/components/icons/IconNoStock.d.ts +3 -0
- package/lib/components/icons/IconNoStock.js +12 -0
- package/lib/components/icons/index.d.ts +5 -0
- package/lib/components/icons/index.js +6 -0
- package/lib/components/quoteAfterFieldChange.d.ts +7 -0
- package/lib/components/quoteAfterFieldChange.js +11 -0
- package/lib/components/quoteAfterFieldChange.test.js +58 -0
- package/lib/components/utils.d.ts +26 -0
- package/lib/components/utils.js +500 -0
- package/lib/context/MerchiProductFormProvider.d.ts +177 -0
- package/lib/context/MerchiProductFormProvider.js +1020 -0
- package/lib/images/product-not-found.png +0 -0
- package/lib/index.d.ts +42 -0
- package/lib/index.js +41 -0
- package/lib/styles/globals.css +1590 -0
- package/lib/styles/globals.css.map +1 -0
- package/lib/styles/globals.scss +1698 -0
- package/lib/utils/area.d.ts +77 -0
- package/lib/utils/area.js +298 -0
- package/lib/utils/cleanFormVariationJson.d.ts +5 -0
- package/lib/utils/cleanFormVariationJson.js +39 -0
- package/lib/utils/cleanFormVariationJson.test.js +54 -0
- package/lib/utils/countries.d.ts +7 -0
- package/lib/utils/countries.js +290 -0
- package/lib/utils/currency.d.ts +2 -0
- package/lib/utils/currency.js +188 -0
- package/lib/utils/draftExport.d.ts +21 -0
- package/lib/utils/draftExport.js +481 -0
- package/lib/utils/draftExport.test.js +78 -0
- package/lib/utils/draftFonts.d.ts +55 -0
- package/lib/utils/draftFonts.js +68 -0
- package/lib/utils/draftStorage.d.ts +25 -0
- package/lib/utils/draftStorage.js +148 -0
- package/lib/utils/draftStorage.test.js +125 -0
- package/lib/utils/draftTemplates.d.ts +87 -0
- package/lib/utils/draftTemplates.js +579 -0
- package/lib/utils/draftTemplates.test.js +476 -0
- package/lib/utils/formErrors.d.ts +2 -0
- package/lib/utils/formErrors.js +29 -0
- package/lib/utils/index.d.ts +3 -0
- package/lib/utils/index.js +4 -0
- package/lib/utils/priceMatrix.d.ts +57 -0
- package/lib/utils/priceMatrix.js +82 -0
- package/lib/utils/priceMatrix.test.js +200 -0
- package/lib/utils/products.d.ts +40 -0
- package/lib/utils/products.js +68 -0
- package/lib/utils/quantity.d.ts +7 -0
- package/lib/utils/quantity.js +19 -0
- package/lib/utils/quantity.test.js +42 -0
- package/lib/utils/reconcileVariations.d.ts +25 -0
- package/lib/utils/reconcileVariations.js +246 -0
- package/lib/utils/reconcileVariations.test.js +239 -0
- package/lib/utils/selectedVariationCosts.d.ts +6 -0
- package/lib/utils/selectedVariationCosts.js +59 -0
- package/lib/utils/selectedVariationCosts.test.js +66 -0
- package/lib/utils/selections.d.ts +23 -0
- package/lib/utils/selections.js +76 -0
- package/lib/utils/selections.test.js +159 -0
- package/lib/utils/singleOptionVariation.d.ts +2 -0
- package/lib/utils/singleOptionVariation.js +22 -0
- package/lib/utils/singleOptionVariation.test.js +59 -0
- package/lib/utils/supportedNumbers.d.ts +1 -0
- package/lib/utils/supportedNumbers.js +27 -0
- package/lib/utils/types.d.ts +114 -0
- package/lib/utils/types.js +50 -0
- package/lib/utils/url.d.ts +3 -0
- package/lib/utils/url.js +65 -0
- package/lib/utils/variationFields.d.ts +5 -0
- package/lib/utils/variationFields.js +116 -0
- package/lib/utils/variationFields.test.js +108 -0
- package/package.json +93 -0
|
@@ -0,0 +1,1020 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
5
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
6
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
7
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
8
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
9
|
+
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
10
|
+
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
11
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
12
|
+
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
13
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
14
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
15
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
16
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
17
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
18
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
19
|
+
import * as React from 'react';
|
|
20
|
+
import { createContext, useContext, useState } from 'react';
|
|
21
|
+
import { useForm } from 'react-hook-form';
|
|
22
|
+
import { fetchJobQuote } from '../actions/jobs';
|
|
23
|
+
import { productHasGroups } from '../utils/products';
|
|
24
|
+
import { getMerchiSourceJobTags } from '../components/utils';
|
|
25
|
+
import { productAllowsClientDesign } from '../utils/draftTemplates';
|
|
26
|
+
import { loadArtworkPath, loadDrafts } from '../utils/draftStorage';
|
|
27
|
+
import ProductDraftsHost from '../components/drafts/ProductDraftsHost';
|
|
28
|
+
import { buildEmptyVariationFromField, cleanJobVariationsAndGroups, syncJobSelectedOptionsFromValues } from '../components/utils';
|
|
29
|
+
import { pricing } from '@merchi/sdk';
|
|
30
|
+
import { toSelections } from '../utils/selections';
|
|
31
|
+
import { scrollToFirstFormError } from '../utils/formErrors';
|
|
32
|
+
import { buildDesiredVariationsFromFields, productFieldsForPricingFields, reconcileVariations } from '../utils/reconcileVariations';
|
|
33
|
+
import { groupFieldTemplates as groupFieldTemplatesFromProduct, liftIndependentVariationsFromGroups, sanitizeProductVariationFields } from '../utils/variationFields';
|
|
34
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
35
|
+
var MerchiProductFormContext = /*#__PURE__*/createContext({
|
|
36
|
+
apiUrl: '',
|
|
37
|
+
allowAddToCart: false,
|
|
38
|
+
btnNameAddToCart: undefined,
|
|
39
|
+
classNameAlertSellerEditable: undefined,
|
|
40
|
+
classNameButtonSubmit: undefined,
|
|
41
|
+
classNameButtonGroupAdd: undefined,
|
|
42
|
+
classNameButtonGroupRemove: undefined,
|
|
43
|
+
classNameButtonsSubmitContainer: undefined,
|
|
44
|
+
classNameButtonApproveDrafts: undefined,
|
|
45
|
+
classNameButtonCloseDrafts: undefined,
|
|
46
|
+
classNameDraftButtonContainer: undefined,
|
|
47
|
+
classNameDraftCta: undefined,
|
|
48
|
+
classNameDraftGroupContainer: undefined,
|
|
49
|
+
classNameDraftGroupTitle: undefined,
|
|
50
|
+
classNameDraftSheet: undefined,
|
|
51
|
+
classNameDraftToolbar: undefined,
|
|
52
|
+
classNameFileUploadContainer: undefined,
|
|
53
|
+
classNameFileUpload: undefined,
|
|
54
|
+
classNameFilePreviewContainer: undefined,
|
|
55
|
+
classNameFileUploadTextContainer: undefined,
|
|
56
|
+
classNameFilePreviewIconWrapper: undefined,
|
|
57
|
+
classNameFileUploadButton: undefined,
|
|
58
|
+
classNameFileUploadIcon: undefined,
|
|
59
|
+
classNameFileUploadIconSecond: undefined,
|
|
60
|
+
classNameFileUploadIconContainer: undefined,
|
|
61
|
+
classNameFileListItem: undefined,
|
|
62
|
+
classNameFileButtonDelete: undefined,
|
|
63
|
+
classNameFileListItemContainer: undefined,
|
|
64
|
+
classNameGroupsContainer: undefined,
|
|
65
|
+
classNameGroupPriceContainer: undefined,
|
|
66
|
+
classNameInput: undefined,
|
|
67
|
+
classNameInputContainer: undefined,
|
|
68
|
+
classNameInventoryStatus: undefined,
|
|
69
|
+
classNameOptionContainer: undefined,
|
|
70
|
+
classNameOptionInput: undefined,
|
|
71
|
+
classNameOptionLabel: undefined,
|
|
72
|
+
classNameOptionSuper: undefined,
|
|
73
|
+
classNameOptionsCheckboxRadioContainer: undefined,
|
|
74
|
+
classNameOptionImage: undefined,
|
|
75
|
+
classNameOptionImageContainer: undefined,
|
|
76
|
+
classNameOptionColour: undefined,
|
|
77
|
+
classNameOptionColourContainer: undefined,
|
|
78
|
+
classNameProductTitle: undefined,
|
|
79
|
+
classNameProductOriginTitle: undefined,
|
|
80
|
+
classNameProductTotalContainer: undefined,
|
|
81
|
+
classNameProductTotal: undefined,
|
|
82
|
+
classNameQuantityLabelContainer: undefined,
|
|
83
|
+
classNameUnitPrice: undefined,
|
|
84
|
+
classNamePriceMatrix: undefined,
|
|
85
|
+
control: {},
|
|
86
|
+
currentUser: {},
|
|
87
|
+
draftApproveCallback: null,
|
|
88
|
+
getQuote: function getQuote() {},
|
|
89
|
+
hcaptchaSiteKey: undefined,
|
|
90
|
+
pricingRules: undefined,
|
|
91
|
+
hideCost: false,
|
|
92
|
+
hideCountry: false,
|
|
93
|
+
hideDomainName: false,
|
|
94
|
+
hideCalculatedPrice: false,
|
|
95
|
+
hideQuantityField: false,
|
|
96
|
+
hideRequestQuotationButton: false,
|
|
97
|
+
hidePaymentUpfrontButton: false,
|
|
98
|
+
hideTitle: false,
|
|
99
|
+
hookForm: {},
|
|
100
|
+
isCartItem: false,
|
|
101
|
+
initJob: undefined,
|
|
102
|
+
isDraftDesignerOpen: false,
|
|
103
|
+
isDraftModalOpen: false,
|
|
104
|
+
consumePendingCheckout: function consumePendingCheckout() {
|
|
105
|
+
return null;
|
|
106
|
+
},
|
|
107
|
+
job: {},
|
|
108
|
+
loading: false,
|
|
109
|
+
inventoryLoading: false,
|
|
110
|
+
onAddToCart: function onAddToCart() {},
|
|
111
|
+
onBuyNow: function onBuyNow() {},
|
|
112
|
+
onGetQuote: function onGetQuote() {},
|
|
113
|
+
onSubmit: function onSubmit() {},
|
|
114
|
+
product: {},
|
|
115
|
+
productFormId: undefined,
|
|
116
|
+
setClient: function setClient() {},
|
|
117
|
+
setIsDraftDesignerOpen: function setIsDraftDesignerOpen() {},
|
|
118
|
+
setIsDraftModalOpen: function setIsDraftModalOpen() {},
|
|
119
|
+
setJob: function setJob(job) {},
|
|
120
|
+
setLoading: function setLoading(loading) {},
|
|
121
|
+
showAlert: function showAlert(alert) {},
|
|
122
|
+
showCurrency: false,
|
|
123
|
+
showCurrencyCode: false,
|
|
124
|
+
showFeatureDeadline: false,
|
|
125
|
+
showGroupBuyStatus: false,
|
|
126
|
+
showPriceMatrix: true,
|
|
127
|
+
showUnitPrice: false
|
|
128
|
+
});
|
|
129
|
+
export var useMerchiFormContext = function useMerchiFormContext() {
|
|
130
|
+
return useContext(MerchiProductFormContext);
|
|
131
|
+
};
|
|
132
|
+
export var MerchiProductFormProvider = function MerchiProductFormProvider(_ref) {
|
|
133
|
+
var _ref$apiUrl = _ref.apiUrl,
|
|
134
|
+
apiUrl = _ref$apiUrl === void 0 ? 'https://api.merchi.co/v6/' : _ref$apiUrl,
|
|
135
|
+
allowAddToCart = _ref.allowAddToCart,
|
|
136
|
+
btnNameAddToCart = _ref.btnNameAddToCart,
|
|
137
|
+
_ref$classNameAlertSe = _ref.classNameAlertSellerEditable,
|
|
138
|
+
classNameAlertSellerEditable = _ref$classNameAlertSe === void 0 ? 'alert alert-light' : _ref$classNameAlertSe,
|
|
139
|
+
_ref$classNameButtonS = _ref.classNameButtonSubmit,
|
|
140
|
+
classNameButtonSubmit = _ref$classNameButtonS === void 0 ? 'btn btn-primary merchi-embed-form_button-submit' : _ref$classNameButtonS,
|
|
141
|
+
_ref$classNameButtonG = _ref.classNameButtonGroupAdd,
|
|
142
|
+
classNameButtonGroupAdd = _ref$classNameButtonG === void 0 ? 'btn btn-white' : _ref$classNameButtonG,
|
|
143
|
+
_ref$classNameButtonG2 = _ref.classNameButtonGroupRemove,
|
|
144
|
+
classNameButtonGroupRemove = _ref$classNameButtonG2 === void 0 ? 'btn btn-danger' : _ref$classNameButtonG2,
|
|
145
|
+
_ref$classNameButtons = _ref.classNameButtonsSubmitContainer,
|
|
146
|
+
classNameButtonsSubmitContainer = _ref$classNameButtons === void 0 ? 'merchi-product-buttons-submit-container' : _ref$classNameButtons,
|
|
147
|
+
_ref$classNameButtonA = _ref.classNameButtonApproveDrafts,
|
|
148
|
+
classNameButtonApproveDrafts = _ref$classNameButtonA === void 0 ? 'btn btn-success' : _ref$classNameButtonA,
|
|
149
|
+
_ref$classNameButtonC = _ref.classNameButtonCloseDrafts,
|
|
150
|
+
classNameButtonCloseDrafts = _ref$classNameButtonC === void 0 ? 'btn btn-secondary' : _ref$classNameButtonC,
|
|
151
|
+
_ref$classNameDraftBu = _ref.classNameDraftButtonContainer,
|
|
152
|
+
classNameDraftButtonContainer = _ref$classNameDraftBu === void 0 ? 'merchi-product-draft-button-container' : _ref$classNameDraftBu,
|
|
153
|
+
_ref$classNameDraftCt = _ref.classNameDraftCta,
|
|
154
|
+
classNameDraftCta = _ref$classNameDraftCt === void 0 ? 'merchi-product-draft-cta' : _ref$classNameDraftCt,
|
|
155
|
+
_ref$classNameDraftGr = _ref.classNameDraftGroupContainer,
|
|
156
|
+
classNameDraftGroupContainer = _ref$classNameDraftGr === void 0 ? 'merchi-product-draft-group-container' : _ref$classNameDraftGr,
|
|
157
|
+
_ref$classNameDraftGr2 = _ref.classNameDraftGroupTitle,
|
|
158
|
+
classNameDraftGroupTitle = _ref$classNameDraftGr2 === void 0 ? 'merchi-product-draft-group-title' : _ref$classNameDraftGr2,
|
|
159
|
+
_ref$classNameDraftSh = _ref.classNameDraftSheet,
|
|
160
|
+
classNameDraftSheet = _ref$classNameDraftSh === void 0 ? 'merchi-product-draft-sheet' : _ref$classNameDraftSh,
|
|
161
|
+
_ref$classNameDraftTo = _ref.classNameDraftToolbar,
|
|
162
|
+
classNameDraftToolbar = _ref$classNameDraftTo === void 0 ? 'merchi-product-draft-toolbar' : _ref$classNameDraftTo,
|
|
163
|
+
_ref$classNameFileUpl = _ref.classNameFileUploadContainer,
|
|
164
|
+
classNameFileUploadContainer = _ref$classNameFileUpl === void 0 ? 'merchi-input-file-container' : _ref$classNameFileUpl,
|
|
165
|
+
_ref$classNameFileUpl2 = _ref.classNameFileUpload,
|
|
166
|
+
classNameFileUpload = _ref$classNameFileUpl2 === void 0 ? 'merchi-embed-form_dropzone' : _ref$classNameFileUpl2,
|
|
167
|
+
_ref$classNameFilePre = _ref.classNameFilePreviewContainer,
|
|
168
|
+
classNameFilePreviewContainer = _ref$classNameFilePre === void 0 ? 'uploaded-variation-file' : _ref$classNameFilePre,
|
|
169
|
+
_ref$classNameFileUpl3 = _ref.classNameFileUploadTextContainer,
|
|
170
|
+
classNameFileUploadTextContainer = _ref$classNameFileUpl3 === void 0 ? 'merchi-embed-form_dropzone-text-container' : _ref$classNameFileUpl3,
|
|
171
|
+
_ref$classNameFilePre2 = _ref.classNameFilePreviewIconWrapper,
|
|
172
|
+
classNameFilePreviewIconWrapper = _ref$classNameFilePre2 === void 0 ? 'uploaded-variation-file-icon-wrapper' : _ref$classNameFilePre2,
|
|
173
|
+
_ref$classNameFileUpl4 = _ref.classNameFileUploadButton,
|
|
174
|
+
classNameFileUploadButton = _ref$classNameFileUpl4 === void 0 ? 'btn btn-sm btn-link ml-auto' : _ref$classNameFileUpl4,
|
|
175
|
+
_ref$classNameFileUpl5 = _ref.classNameFileUploadIcon,
|
|
176
|
+
classNameFileUploadIcon = _ref$classNameFileUpl5 === void 0 ? 'merchi-embed-form_dropzone-icon' : _ref$classNameFileUpl5,
|
|
177
|
+
_ref$classNameFileUpl6 = _ref.classNameFileUploadIconSecond,
|
|
178
|
+
classNameFileUploadIconSecond = _ref$classNameFileUpl6 === void 0 ? 'merchi-embed-form_dropzone-icon-plus' : _ref$classNameFileUpl6,
|
|
179
|
+
_ref$classNameFileUpl7 = _ref.classNameFileUploadIconContainer,
|
|
180
|
+
classNameFileUploadIconContainer = _ref$classNameFileUpl7 === void 0 ? 'merchi-embed-form_dropzone-icon-container' : _ref$classNameFileUpl7,
|
|
181
|
+
_ref$classNameFileLis = _ref.classNameFileListItem,
|
|
182
|
+
classNameFileListItem = _ref$classNameFileLis === void 0 ? 'list-group-item no-z-index-hover' : _ref$classNameFileLis,
|
|
183
|
+
_ref$classNameFileBut = _ref.classNameFileButtonDownload,
|
|
184
|
+
classNameFileButtonDownload = _ref$classNameFileBut === void 0 ? 'btn btn-sm btn-secondary' : _ref$classNameFileBut,
|
|
185
|
+
_ref$classNameFileBut2 = _ref.classNameFileButtonDelete,
|
|
186
|
+
classNameFileButtonDelete = _ref$classNameFileBut2 === void 0 ? 'btn btn-sm btn-danger ml-2' : _ref$classNameFileBut2,
|
|
187
|
+
_ref$classNameFileLis2 = _ref.classNameFileListItemContainer,
|
|
188
|
+
classNameFileListItemContainer = _ref$classNameFileLis2 === void 0 ? 'list-group' : _ref$classNameFileLis2,
|
|
189
|
+
_ref$classNameGroupsC = _ref.classNameGroupsContainer,
|
|
190
|
+
classNameGroupsContainer = _ref$classNameGroupsC === void 0 ? 'merchi-embed-form_product-group-container' : _ref$classNameGroupsC,
|
|
191
|
+
_ref$classNameGroupPr = _ref.classNameGroupPriceContainer,
|
|
192
|
+
classNameGroupPriceContainer = _ref$classNameGroupPr === void 0 ? 'merchi-embed-form_product-group-total-cost' : _ref$classNameGroupPr,
|
|
193
|
+
_ref$classNameInput = _ref.classNameInput,
|
|
194
|
+
classNameInput = _ref$classNameInput === void 0 ? 'form-control' : _ref$classNameInput,
|
|
195
|
+
_ref$classNameInvento = _ref.classNameInventoryStatus,
|
|
196
|
+
classNameInventoryStatus = _ref$classNameInvento === void 0 ? 'flex-fill' : _ref$classNameInvento,
|
|
197
|
+
_ref$classNameInputCo = _ref.classNameInputContainer,
|
|
198
|
+
classNameInputContainer = _ref$classNameInputCo === void 0 ? 'merchi-embed-form_product-group-input-qty-container' : _ref$classNameInputCo,
|
|
199
|
+
_ref$classNameOptionC = _ref.classNameOptionContainer,
|
|
200
|
+
classNameOptionContainer = _ref$classNameOptionC === void 0 ? 'merchi-embed-form_checkbox_radio-item' : _ref$classNameOptionC,
|
|
201
|
+
_ref$classNameOptionI = _ref.classNameOptionInput,
|
|
202
|
+
classNameOptionInput = _ref$classNameOptionI === void 0 ? 'merchi-embed-form_checkbox_radio-input' : _ref$classNameOptionI,
|
|
203
|
+
_ref$classNameOptionL = _ref.classNameOptionLabel,
|
|
204
|
+
classNameOptionLabel = _ref$classNameOptionL === void 0 ? 'merchi-embed-form_checkbox_radio-label' : _ref$classNameOptionL,
|
|
205
|
+
_ref$classNameOptionS = _ref.classNameOptionSuper,
|
|
206
|
+
classNameOptionSuper = _ref$classNameOptionS === void 0 ? 'merchi-embed-form_checkbox_radio-super' : _ref$classNameOptionS,
|
|
207
|
+
_ref$classNameOptions = _ref.classNameOptionsCheckboxRadioContainer,
|
|
208
|
+
classNameOptionsCheckboxRadioContainer = _ref$classNameOptions === void 0 ? '' : _ref$classNameOptions,
|
|
209
|
+
_ref$classNameOptionI2 = _ref.classNameOptionImage,
|
|
210
|
+
classNameOptionImage = _ref$classNameOptionI2 === void 0 ? 'merchi-embed-form_image-select-option-item-img' : _ref$classNameOptionI2,
|
|
211
|
+
_ref$classNameOptionI3 = _ref.classNameOptionImageContainer,
|
|
212
|
+
classNameOptionImageContainer = _ref$classNameOptionI3 === void 0 ? 'merchi-embed-form_image-select-option-item-container' : _ref$classNameOptionI3,
|
|
213
|
+
_ref$classNameOptionC2 = _ref.classNameOptionColour,
|
|
214
|
+
classNameOptionColour = _ref$classNameOptionC2 === void 0 ? 'merchi-embed-form_color-select-option' : _ref$classNameOptionC2,
|
|
215
|
+
_ref$classNameOptionC3 = _ref.classNameOptionColourContainer,
|
|
216
|
+
classNameOptionColourContainer = _ref$classNameOptionC3 === void 0 ? 'merchi-embed-form_color-select-item' : _ref$classNameOptionC3,
|
|
217
|
+
_ref$classNameProduct = _ref.classNameProductTitle,
|
|
218
|
+
classNameProductTitle = _ref$classNameProduct === void 0 ? 'merchi-product-title' : _ref$classNameProduct,
|
|
219
|
+
_ref$classNameProduct2 = _ref.classNameProductOriginTitle,
|
|
220
|
+
classNameProductOriginTitle = _ref$classNameProduct2 === void 0 ? 'merchi-product-origin-title' : _ref$classNameProduct2,
|
|
221
|
+
_ref$classNameProduct3 = _ref.classNameProductTotal,
|
|
222
|
+
classNameProductTotal = _ref$classNameProduct3 === void 0 ? 'merchi-embed-form_summary-product-cost' : _ref$classNameProduct3,
|
|
223
|
+
_ref$classNameProduct4 = _ref.classNameProductTotalContainer,
|
|
224
|
+
classNameProductTotalContainer = _ref$classNameProduct4 === void 0 ? 'merchi-embed-form_summary-product-cost-container' : _ref$classNameProduct4,
|
|
225
|
+
_ref$classNameQuantit = _ref.classNameQuantityLabelContainer,
|
|
226
|
+
classNameQuantityLabelContainer = _ref$classNameQuantit === void 0 ? 'merchi-embed-form_quantity-label-container' : _ref$classNameQuantit,
|
|
227
|
+
classNameUnitPrice = _ref.classNameUnitPrice,
|
|
228
|
+
classNamePriceMatrix = _ref.classNamePriceMatrix,
|
|
229
|
+
children = _ref.children,
|
|
230
|
+
currentUser = _ref.currentUser,
|
|
231
|
+
hcaptchaSiteKey = _ref.hcaptchaSiteKey,
|
|
232
|
+
hideCost = _ref.hideCost,
|
|
233
|
+
_ref$hideCountry = _ref.hideCountry,
|
|
234
|
+
hideCountry = _ref$hideCountry === void 0 ? false : _ref$hideCountry,
|
|
235
|
+
hideCalculatedPrice = _ref.hideCalculatedPrice,
|
|
236
|
+
_ref$hideDomainName = _ref.hideDomainName,
|
|
237
|
+
hideDomainName = _ref$hideDomainName === void 0 ? false : _ref$hideDomainName,
|
|
238
|
+
hideQuantityField = _ref.hideQuantityField,
|
|
239
|
+
hideRequestQuotationButton = _ref.hideRequestQuotationButton,
|
|
240
|
+
hidePaymentUpfrontButton = _ref.hidePaymentUpfrontButton,
|
|
241
|
+
_ref$hideTitle = _ref.hideTitle,
|
|
242
|
+
hideTitle = _ref$hideTitle === void 0 ? false : _ref$hideTitle,
|
|
243
|
+
isCartItem = _ref.isCartItem,
|
|
244
|
+
initJob = _ref.initJob,
|
|
245
|
+
initProduct = _ref.initProduct,
|
|
246
|
+
pricingRulesProp = _ref.pricingRules,
|
|
247
|
+
onAddToCart = _ref.onAddToCart,
|
|
248
|
+
onBuyNow = _ref.onBuyNow,
|
|
249
|
+
onGetQuote = _ref.onGetQuote,
|
|
250
|
+
onSubmit = _ref.onSubmit,
|
|
251
|
+
productFormId = _ref.productFormId,
|
|
252
|
+
showCurrency = _ref.showCurrency,
|
|
253
|
+
showCurrencyCode = _ref.showCurrencyCode,
|
|
254
|
+
showFeatureDeadline = _ref.showFeatureDeadline,
|
|
255
|
+
showGroupBuyStatus = _ref.showGroupBuyStatus,
|
|
256
|
+
_ref$showPriceMatrix = _ref.showPriceMatrix,
|
|
257
|
+
showPriceMatrix = _ref$showPriceMatrix === void 0 ? true : _ref$showPriceMatrix,
|
|
258
|
+
showUnitPrice = _ref.showUnitPrice;
|
|
259
|
+
var product = sanitizeProductVariationFields(initProduct);
|
|
260
|
+
var defaultJob = liftIndependentVariationsFromGroups(initJob || product.defaultJob || {}, product);
|
|
261
|
+
var hookForm = useForm({
|
|
262
|
+
defaultValues: defaultJob,
|
|
263
|
+
// Re-check rules as the user edits after the first validation attempt.
|
|
264
|
+
reValidateMode: 'onChange'
|
|
265
|
+
});
|
|
266
|
+
var _useState = useState(currentUser),
|
|
267
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
268
|
+
client = _useState2[0],
|
|
269
|
+
setClient = _useState2[1];
|
|
270
|
+
var _useState3 = useState(null),
|
|
271
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
272
|
+
alert = _useState4[0],
|
|
273
|
+
showAlert = _useState4[1];
|
|
274
|
+
var _useState5 = useState(null),
|
|
275
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
276
|
+
draftApproveCallback = _useState6[0],
|
|
277
|
+
setDraftAppproveCallback = _useState6[1];
|
|
278
|
+
var _useState7 = useState(defaultJob),
|
|
279
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
280
|
+
job = _useState8[0],
|
|
281
|
+
setJob = _useState8[1];
|
|
282
|
+
var _useState9 = useState(false),
|
|
283
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
284
|
+
loading = _useState0[0],
|
|
285
|
+
setLoading = _useState0[1];
|
|
286
|
+
var _useState1 = useState(false),
|
|
287
|
+
_useState10 = _slicedToArray(_useState1, 2),
|
|
288
|
+
inventoryLoading = _useState10[0],
|
|
289
|
+
setInventoryLoading = _useState10[1];
|
|
290
|
+
var control = hookForm.control,
|
|
291
|
+
getValues = hookForm.getValues,
|
|
292
|
+
handleSubmit = hookForm.handleSubmit,
|
|
293
|
+
reset = hookForm.reset,
|
|
294
|
+
trigger = hookForm.trigger;
|
|
295
|
+
var doSubmit = onSubmit ? handleSubmit(onSubmit, function () {
|
|
296
|
+
scrollToFirstFormError();
|
|
297
|
+
}) : undefined;
|
|
298
|
+
|
|
299
|
+
/** Run field rules (including MOQ) before buy / cart / quote actions. */
|
|
300
|
+
var validateForm = /*#__PURE__*/function () {
|
|
301
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
|
|
302
|
+
var valid;
|
|
303
|
+
return _regenerator().w(function (_context) {
|
|
304
|
+
while (1) switch (_context.n) {
|
|
305
|
+
case 0:
|
|
306
|
+
_context.n = 1;
|
|
307
|
+
return trigger();
|
|
308
|
+
case 1:
|
|
309
|
+
valid = _context.v;
|
|
310
|
+
if (!valid) {
|
|
311
|
+
scrollToFirstFormError();
|
|
312
|
+
}
|
|
313
|
+
return _context.a(2, valid);
|
|
314
|
+
}
|
|
315
|
+
}, _callee);
|
|
316
|
+
}));
|
|
317
|
+
return function validateForm() {
|
|
318
|
+
return _ref2.apply(this, arguments);
|
|
319
|
+
};
|
|
320
|
+
}();
|
|
321
|
+
var tags = getMerchiSourceJobTags();
|
|
322
|
+
var inventoryRefreshTimer = React.useRef(null);
|
|
323
|
+
var serverQuoteTimer = React.useRef(null);
|
|
324
|
+
var quoteRequestId = React.useRef(0);
|
|
325
|
+
var SERVER_QUOTE_DEBOUNCE_MS = 1000;
|
|
326
|
+
|
|
327
|
+
// Client-side quoting is driven solely by the product's clientSideCalculation
|
|
328
|
+
// attribute (set by the manager). It is the single source of truth.
|
|
329
|
+
var clientSideEnabled = Boolean(initProduct === null || initProduct === void 0 ? void 0 : initProduct.clientSideCalculation);
|
|
330
|
+
|
|
331
|
+
// Fetch pricing-rules for client-side quoting and the bulk price table.
|
|
332
|
+
// A `pricingRules` prop, if supplied, overrides the fetch.
|
|
333
|
+
var _useState11 = useState(null),
|
|
334
|
+
_useState12 = _slicedToArray(_useState11, 2),
|
|
335
|
+
fetchedPricingRules = _useState12[0],
|
|
336
|
+
setFetchedPricingRules = _useState12[1];
|
|
337
|
+
var pricingRules = pricingRulesProp || fetchedPricingRules;
|
|
338
|
+
React.useEffect(function () {
|
|
339
|
+
if (!clientSideEnabled && !showPriceMatrix || pricingRulesProp || !(initProduct !== null && initProduct !== void 0 && initProduct.id)) {
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
var cancelled = false;
|
|
343
|
+
_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
|
|
344
|
+
var base, res, rules, _t;
|
|
345
|
+
return _regenerator().w(function (_context2) {
|
|
346
|
+
while (1) switch (_context2.p = _context2.n) {
|
|
347
|
+
case 0:
|
|
348
|
+
_context2.p = 0;
|
|
349
|
+
base = apiUrl.endsWith('/') ? apiUrl : "".concat(apiUrl, "/");
|
|
350
|
+
_context2.n = 1;
|
|
351
|
+
return fetch("".concat(base, "products/").concat(initProduct.id, "/pricing-rules/"));
|
|
352
|
+
case 1:
|
|
353
|
+
res = _context2.v;
|
|
354
|
+
if (res.ok) {
|
|
355
|
+
_context2.n = 2;
|
|
356
|
+
break;
|
|
357
|
+
}
|
|
358
|
+
return _context2.a(2);
|
|
359
|
+
case 2:
|
|
360
|
+
_context2.n = 3;
|
|
361
|
+
return res.json();
|
|
362
|
+
case 3:
|
|
363
|
+
rules = _context2.v;
|
|
364
|
+
if (!cancelled) setFetchedPricingRules(rules);
|
|
365
|
+
_context2.n = 5;
|
|
366
|
+
break;
|
|
367
|
+
case 4:
|
|
368
|
+
_context2.p = 4;
|
|
369
|
+
_t = _context2.v;
|
|
370
|
+
case 5:
|
|
371
|
+
return _context2.a(2);
|
|
372
|
+
}
|
|
373
|
+
}, _callee2, null, [[0, 4]]);
|
|
374
|
+
}))();
|
|
375
|
+
return function () {
|
|
376
|
+
cancelled = true;
|
|
377
|
+
};
|
|
378
|
+
}, [clientSideEnabled, showPriceMatrix, pricingRulesProp, initProduct === null || initProduct === void 0 ? void 0 : initProduct.id, apiUrl]);
|
|
379
|
+
React.useEffect(function () {
|
|
380
|
+
return function () {
|
|
381
|
+
if (serverQuoteTimer.current) {
|
|
382
|
+
clearTimeout(serverQuoteTimer.current);
|
|
383
|
+
}
|
|
384
|
+
};
|
|
385
|
+
}, []);
|
|
386
|
+
function variationsHaveFieldMetadata(jobValues) {
|
|
387
|
+
var check = function check(variations) {
|
|
388
|
+
return !Array.isArray(variations) || variations.every(function (variation) {
|
|
389
|
+
var _variation$variationF;
|
|
390
|
+
return (variation === null || variation === void 0 || (_variation$variationF = variation.variationField) === null || _variation$variationF === void 0 ? void 0 : _variation$variationF.fieldType) != null;
|
|
391
|
+
});
|
|
392
|
+
};
|
|
393
|
+
if (!check(jobValues === null || jobValues === void 0 ? void 0 : jobValues.variations)) return false;
|
|
394
|
+
if (Array.isArray(jobValues === null || jobValues === void 0 ? void 0 : jobValues.variationsGroups)) {
|
|
395
|
+
return jobValues.variationsGroups.every(function (group) {
|
|
396
|
+
return check(group === null || group === void 0 ? void 0 : group.variations);
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
return true;
|
|
400
|
+
}
|
|
401
|
+
function applyOptionVisibility(variations, visibleOptionIds, unavailableOptionIds) {
|
|
402
|
+
var changed = false;
|
|
403
|
+
(variations || []).forEach(function (variation) {
|
|
404
|
+
(variation.selectableOptions || []).forEach(function (option) {
|
|
405
|
+
// Mirror the server's per-option isVisible (selectedBy resolution).
|
|
406
|
+
var isVisible = visibleOptionIds.has(option.optionId);
|
|
407
|
+
if (option.isVisible !== isVisible) {
|
|
408
|
+
option.isVisible = isVisible;
|
|
409
|
+
changed = true;
|
|
410
|
+
}
|
|
411
|
+
// Combination-aware availability: an option is unavailable when the
|
|
412
|
+
// combination of (current inventory selections + this option) has no
|
|
413
|
+
// matching stock. Non-inventory products yield an empty set -> all
|
|
414
|
+
// available.
|
|
415
|
+
var available = !unavailableOptionIds.has(option.optionId);
|
|
416
|
+
if (option.available !== available) {
|
|
417
|
+
option.available = available;
|
|
418
|
+
changed = true;
|
|
419
|
+
}
|
|
420
|
+
});
|
|
421
|
+
});
|
|
422
|
+
return changed;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
// For inventory-limited products, refresh quantity-dependent inventory
|
|
426
|
+
// (group inventoryCount/inventorySufficient) from the authoritative server in
|
|
427
|
+
// the background, debounced, and merge it through setJob (which renders
|
|
428
|
+
// without a form reset, so the viewport never jumps). The client price stays
|
|
429
|
+
// instant; the inventory badge catches up a beat later.
|
|
430
|
+
function resetFormPreservingScroll(values) {
|
|
431
|
+
var hasWindow = typeof window !== 'undefined';
|
|
432
|
+
var scrollParent = findScrollParent();
|
|
433
|
+
var scrollX = hasWindow ? window.scrollX : 0;
|
|
434
|
+
var scrollY = hasWindow ? window.scrollY : 0;
|
|
435
|
+
var parentTop = scrollParent ? scrollParent.scrollTop : 0;
|
|
436
|
+
var parentLeft = scrollParent ? scrollParent.scrollLeft : 0;
|
|
437
|
+
reset(values);
|
|
438
|
+
if (hasWindow && typeof window.requestAnimationFrame === 'function') {
|
|
439
|
+
window.requestAnimationFrame(function () {
|
|
440
|
+
if (scrollParent) {
|
|
441
|
+
scrollParent.scrollTop = parentTop;
|
|
442
|
+
scrollParent.scrollLeft = parentLeft;
|
|
443
|
+
} else {
|
|
444
|
+
window.scrollTo(scrollX, scrollY);
|
|
445
|
+
}
|
|
446
|
+
});
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
function findScrollParent() {
|
|
450
|
+
if (typeof document === 'undefined') return null;
|
|
451
|
+
var active = document.activeElement;
|
|
452
|
+
var node = active;
|
|
453
|
+
while (node && node !== document.body) {
|
|
454
|
+
var style = window.getComputedStyle(node);
|
|
455
|
+
var canScrollY = (style.overflowY === 'auto' || style.overflowY === 'scroll') && node.scrollHeight > node.clientHeight;
|
|
456
|
+
if (canScrollY) return node;
|
|
457
|
+
// Radix ScrollArea viewport
|
|
458
|
+
if (node.getAttribute('data-slot') === 'scroll-area-viewport') return node;
|
|
459
|
+
node = node.parentElement;
|
|
460
|
+
}
|
|
461
|
+
var viewport = document.querySelector('[data-slot="dialog-content"] [data-slot="scroll-area-viewport"]');
|
|
462
|
+
return viewport;
|
|
463
|
+
}
|
|
464
|
+
function formQuantitiesMatchRequest(formValues, requestData, product) {
|
|
465
|
+
if (productHasGroups(product)) {
|
|
466
|
+
var groups = requestData.variationsGroups || [];
|
|
467
|
+
return groups.every(function (group, index) {
|
|
468
|
+
var _formValues$variation;
|
|
469
|
+
return Number(group.quantity) === Number((_formValues$variation = formValues.variationsGroups) === null || _formValues$variation === void 0 || (_formValues$variation = _formValues$variation[index]) === null || _formValues$variation === void 0 ? void 0 : _formValues$variation.quantity);
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
return Number(requestData.quantity) === Number(formValues.quantity);
|
|
473
|
+
}
|
|
474
|
+
function applyServerQuote(formValues, serverJob) {
|
|
475
|
+
var cleanedFormValues = cleanJobVariationsAndGroups(_objectSpread({}, formValues));
|
|
476
|
+
// Adopt fields the server added/removed via fill_dynamic_variations, while
|
|
477
|
+
// preserving the user's in-progress values (quantity edits, selections).
|
|
478
|
+
// Match by variationField.id / optionId — index sync breaks when the
|
|
479
|
+
// conditional field list changes length or order.
|
|
480
|
+
var independentReconcile = reconcileVariations(cleanedFormValues.variations, serverJob.variations);
|
|
481
|
+
var visibilityChanged = independentReconcile.visibilityChanged;
|
|
482
|
+
var mergedJob = _objectSpread(_objectSpread({}, cleanedFormValues), {}, {
|
|
483
|
+
variations: independentReconcile.variations,
|
|
484
|
+
cost: serverJob.cost,
|
|
485
|
+
costPerUnit: serverJob.costPerUnit,
|
|
486
|
+
taxAmount: serverJob.taxAmount,
|
|
487
|
+
totalCost: serverJob.totalCost,
|
|
488
|
+
currency: serverJob.currency,
|
|
489
|
+
inventoryCount: serverJob.inventoryCount,
|
|
490
|
+
inventorySufficient: serverJob.inventorySufficient
|
|
491
|
+
});
|
|
492
|
+
if (Array.isArray(cleanedFormValues.variationsGroups) && Array.isArray(serverJob.variationsGroups)) {
|
|
493
|
+
mergedJob.variationsGroups = cleanedFormValues.variationsGroups.map(function (group, index) {
|
|
494
|
+
var serverGroup = serverJob.variationsGroups[index];
|
|
495
|
+
if (!serverGroup) return group;
|
|
496
|
+
var groupReconcile = reconcileVariations(group.variations, serverGroup.variations);
|
|
497
|
+
if (groupReconcile.visibilityChanged) {
|
|
498
|
+
visibilityChanged = true;
|
|
499
|
+
}
|
|
500
|
+
return _objectSpread(_objectSpread({}, group), {}, {
|
|
501
|
+
variations: groupReconcile.variations,
|
|
502
|
+
groupCost: serverGroup.groupCost,
|
|
503
|
+
inventoryCount: serverGroup.inventoryCount,
|
|
504
|
+
inventorySufficient: serverGroup.inventorySufficient,
|
|
505
|
+
matchingInventories: serverGroup.matchingInventories
|
|
506
|
+
});
|
|
507
|
+
});
|
|
508
|
+
}
|
|
509
|
+
return {
|
|
510
|
+
mergedJob: mergedJob,
|
|
511
|
+
visibilityChanged: visibilityChanged
|
|
512
|
+
};
|
|
513
|
+
}
|
|
514
|
+
function mergeInventory(prev, serverJob) {
|
|
515
|
+
if (!prev) return prev;
|
|
516
|
+
var merged = _objectSpread(_objectSpread({}, prev), {}, {
|
|
517
|
+
inventoryCount: serverJob.inventoryCount,
|
|
518
|
+
inventorySufficient: serverJob.inventorySufficient
|
|
519
|
+
});
|
|
520
|
+
if (Array.isArray(prev.variationsGroups) && Array.isArray(serverJob.variationsGroups)) {
|
|
521
|
+
merged.variationsGroups = prev.variationsGroups.map(function (g, i) {
|
|
522
|
+
var sg = serverJob.variationsGroups[i];
|
|
523
|
+
if (!sg) return g;
|
|
524
|
+
return _objectSpread(_objectSpread({}, g), {}, {
|
|
525
|
+
inventoryCount: sg.inventoryCount,
|
|
526
|
+
inventorySufficient: sg.inventorySufficient,
|
|
527
|
+
matchingInventories: sg.matchingInventories
|
|
528
|
+
});
|
|
529
|
+
});
|
|
530
|
+
}
|
|
531
|
+
return merged;
|
|
532
|
+
}
|
|
533
|
+
function scheduleInventoryRefresh(cleanedValues) {
|
|
534
|
+
if (!pricingRules || !pricingRules.needsInventory) return;
|
|
535
|
+
if (inventoryRefreshTimer.current) {
|
|
536
|
+
clearTimeout(inventoryRefreshTimer.current);
|
|
537
|
+
}
|
|
538
|
+
// Show the loading state in the inventory pills from the moment a change is
|
|
539
|
+
// made until the authoritative stock comes back (covers the debounce wait
|
|
540
|
+
// and the request). This is separate from `loading` so the instant client
|
|
541
|
+
// price never flickers to a spinner.
|
|
542
|
+
setInventoryLoading(true);
|
|
543
|
+
inventoryRefreshTimer.current = setTimeout(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
|
|
544
|
+
var data, r, serverJob, _t2;
|
|
545
|
+
return _regenerator().w(function (_context3) {
|
|
546
|
+
while (1) switch (_context3.p = _context3.n) {
|
|
547
|
+
case 0:
|
|
548
|
+
_context3.p = 0;
|
|
549
|
+
data = _objectSpread(_objectSpread({}, cleanedValues), {}, {
|
|
550
|
+
product: {
|
|
551
|
+
id: initProduct.id
|
|
552
|
+
}
|
|
553
|
+
});
|
|
554
|
+
if (productHasGroups(product)) {
|
|
555
|
+
delete data.quantity;
|
|
556
|
+
}
|
|
557
|
+
_context3.n = 1;
|
|
558
|
+
return fetchJobQuote(data, apiUrl);
|
|
559
|
+
case 1:
|
|
560
|
+
r = _context3.v;
|
|
561
|
+
serverJob = r.toJson();
|
|
562
|
+
setJob(function (prev) {
|
|
563
|
+
return mergeInventory(prev, serverJob);
|
|
564
|
+
});
|
|
565
|
+
_context3.n = 3;
|
|
566
|
+
break;
|
|
567
|
+
case 2:
|
|
568
|
+
_context3.p = 2;
|
|
569
|
+
_t2 = _context3.v;
|
|
570
|
+
case 3:
|
|
571
|
+
_context3.p = 3;
|
|
572
|
+
setInventoryLoading(false);
|
|
573
|
+
return _context3.f(3);
|
|
574
|
+
case 4:
|
|
575
|
+
return _context3.a(2);
|
|
576
|
+
}
|
|
577
|
+
}, _callee3, null, [[0, 2, 3, 4]]);
|
|
578
|
+
})), 450);
|
|
579
|
+
}
|
|
580
|
+
function applyClientQuote(values) {
|
|
581
|
+
var selections = toSelections(values, pricingRules);
|
|
582
|
+
var result = pricing.estimateQuote(pricingRules, selections);
|
|
583
|
+
if ('unsupported' in result) return null;
|
|
584
|
+
// Visibility AND availability are scoped per container, mirroring the
|
|
585
|
+
// server: independent variations resolve against independent selections
|
|
586
|
+
// only; each group resolves against its own selections + independent.
|
|
587
|
+
// Other groups never leak in. Availability is combination-aware: an option
|
|
588
|
+
// is disabled when (current inventory selections + that option) has no
|
|
589
|
+
// matching stock.
|
|
590
|
+
// Field membership mirrors fill_dynamic_variations: gated fields are
|
|
591
|
+
// added/removed via resolveVisibleFields + product field templates.
|
|
592
|
+
var independentScope = {
|
|
593
|
+
quantity: selections.quantity,
|
|
594
|
+
fieldValues: selections.fieldValues
|
|
595
|
+
};
|
|
596
|
+
var independentVisibleFields = pricing.resolveVisibleFields(pricingRules, independentScope);
|
|
597
|
+
var independentFieldTemplates = productFieldsForPricingFields(pricingRules.fields, product);
|
|
598
|
+
var desiredIndependent = buildDesiredVariationsFromFields(values.variations, independentFieldTemplates !== null && independentFieldTemplates !== void 0 ? independentFieldTemplates : product === null || product === void 0 ? void 0 : product.independentVariationFields, independentVisibleFields, buildEmptyVariationFromField);
|
|
599
|
+
var independentReconcile = reconcileVariations(values.variations, desiredIndependent);
|
|
600
|
+
values.variations = independentReconcile.variations;
|
|
601
|
+
var independentVisible = pricing.resolveVisibleOptionIds(pricingRules, independentScope);
|
|
602
|
+
var independentUnavailable = pricing.resolveUnavailableOptionIds(pricingRules, independentScope);
|
|
603
|
+
var visibilityChanged = independentReconcile.visibilityChanged || applyOptionVisibility(values.variations, independentVisible, independentUnavailable);
|
|
604
|
+
if (pricingRules.hasGroups && Array.isArray(values.variationsGroups)) {
|
|
605
|
+
values.variationsGroups.forEach(function (g, i) {
|
|
606
|
+
var _result$groupCosts$i;
|
|
607
|
+
g.groupCost = (_result$groupCosts$i = result.groupCosts[i]) !== null && _result$groupCosts$i !== void 0 ? _result$groupCosts$i : 0;
|
|
608
|
+
var groupScope = {
|
|
609
|
+
fieldValues: selections.fieldValues,
|
|
610
|
+
groups: selections.groups ? [selections.groups[i]] : []
|
|
611
|
+
};
|
|
612
|
+
var groupVisibleFields = pricing.resolveVisibleFields(pricingRules, groupScope);
|
|
613
|
+
var groupFieldTemplates = productFieldsForPricingFields(pricingRules.groupFields, product);
|
|
614
|
+
var desiredGroup = buildDesiredVariationsFromFields(g.variations, groupFieldTemplates !== null && groupFieldTemplates !== void 0 ? groupFieldTemplates : groupFieldTemplatesFromProduct(product), groupVisibleFields, buildEmptyVariationFromField);
|
|
615
|
+
var groupReconcile = reconcileVariations(g.variations, desiredGroup);
|
|
616
|
+
g.variations = groupReconcile.variations;
|
|
617
|
+
if (groupReconcile.visibilityChanged) {
|
|
618
|
+
visibilityChanged = true;
|
|
619
|
+
}
|
|
620
|
+
var groupVisible = pricing.resolveVisibleOptionIds(pricingRules, groupScope);
|
|
621
|
+
var groupUnavailable = pricing.resolveUnavailableOptionIds(pricingRules, groupScope);
|
|
622
|
+
if (applyOptionVisibility(g.variations, groupVisible, groupUnavailable)) {
|
|
623
|
+
visibilityChanged = true;
|
|
624
|
+
}
|
|
625
|
+
});
|
|
626
|
+
}
|
|
627
|
+
var nextJob = syncJobSelectedOptionsFromValues(_objectSpread(_objectSpread({}, values), {}, {
|
|
628
|
+
cost: result.cost,
|
|
629
|
+
costPerUnit: result.costPerUnit,
|
|
630
|
+
taxAmount: result.taxAmount,
|
|
631
|
+
totalCost: result.totalCost,
|
|
632
|
+
currency: result.currency
|
|
633
|
+
}));
|
|
634
|
+
setJob(nextJob);
|
|
635
|
+
// Only re-seed the form when option/field visibility actually changed —
|
|
636
|
+
// i.e. on selection changes, not on quantity edits. Cost/group-cost updates
|
|
637
|
+
// flow through setJob without a reset. reset() makes useFieldArray remount
|
|
638
|
+
// its items, which makes the browser lose the scroll position; capture and
|
|
639
|
+
// restore it so the viewport doesn't jump when toggling a select.
|
|
640
|
+
// Never reset with variations that lost variationField — that collapses
|
|
641
|
+
// the form (DynamicVariationInput cannot render without field metadata).
|
|
642
|
+
if (visibilityChanged && variationsHaveFieldMetadata(nextJob)) {
|
|
643
|
+
resetFormPreservingScroll(nextJob);
|
|
644
|
+
}
|
|
645
|
+
return nextJob;
|
|
646
|
+
}
|
|
647
|
+
function executeServerQuote() {
|
|
648
|
+
return _executeServerQuote.apply(this, arguments);
|
|
649
|
+
}
|
|
650
|
+
function _executeServerQuote() {
|
|
651
|
+
_executeServerQuote = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee0() {
|
|
652
|
+
var values, cleanedValues, requestId, data, r, serverJob, currentValues, _applyServerQuote, mergedJob, visibilityChanged, message, _t4;
|
|
653
|
+
return _regenerator().w(function (_context0) {
|
|
654
|
+
while (1) switch (_context0.p = _context0.n) {
|
|
655
|
+
case 0:
|
|
656
|
+
values = getValues();
|
|
657
|
+
cleanedValues = cleanJobVariationsAndGroups(values);
|
|
658
|
+
requestId = ++quoteRequestId.current;
|
|
659
|
+
setLoading(true);
|
|
660
|
+
data = _objectSpread(_objectSpread({}, cleanedValues), {}, {
|
|
661
|
+
product: {
|
|
662
|
+
id: initProduct.id
|
|
663
|
+
}
|
|
664
|
+
});
|
|
665
|
+
if (productHasGroups(product)) {
|
|
666
|
+
// if the product has group variation fields we delete quantity
|
|
667
|
+
// because each group has it's own quantity
|
|
668
|
+
delete data.quantity;
|
|
669
|
+
}
|
|
670
|
+
_context0.p = 1;
|
|
671
|
+
_context0.n = 2;
|
|
672
|
+
return fetchJobQuote(data, apiUrl);
|
|
673
|
+
case 2:
|
|
674
|
+
r = _context0.v;
|
|
675
|
+
if (!(requestId !== quoteRequestId.current)) {
|
|
676
|
+
_context0.n = 3;
|
|
677
|
+
break;
|
|
678
|
+
}
|
|
679
|
+
return _context0.a(2, null);
|
|
680
|
+
case 3:
|
|
681
|
+
serverJob = r.toJson();
|
|
682
|
+
currentValues = getValues();
|
|
683
|
+
if (formQuantitiesMatchRequest(currentValues, data, product)) {
|
|
684
|
+
_context0.n = 4;
|
|
685
|
+
break;
|
|
686
|
+
}
|
|
687
|
+
return _context0.a(2, null);
|
|
688
|
+
case 4:
|
|
689
|
+
_applyServerQuote = applyServerQuote(currentValues, serverJob), mergedJob = _applyServerQuote.mergedJob, visibilityChanged = _applyServerQuote.visibilityChanged;
|
|
690
|
+
setJob(mergedJob);
|
|
691
|
+
// Keep the user's in-progress quantity values; only re-seed the form when
|
|
692
|
+
// option visibility changed (mirrors client-side quoting).
|
|
693
|
+
if (visibilityChanged && variationsHaveFieldMetadata(mergedJob)) {
|
|
694
|
+
resetFormPreservingScroll(mergedJob);
|
|
695
|
+
}
|
|
696
|
+
return _context0.a(2, mergedJob);
|
|
697
|
+
case 5:
|
|
698
|
+
_context0.p = 5;
|
|
699
|
+
_t4 = _context0.v;
|
|
700
|
+
message = _t4.errorMessage || _t4.message || 'Server error';
|
|
701
|
+
showAlert({
|
|
702
|
+
message: message
|
|
703
|
+
});
|
|
704
|
+
console.error(message);
|
|
705
|
+
return _context0.a(2, null);
|
|
706
|
+
case 6:
|
|
707
|
+
_context0.p = 6;
|
|
708
|
+
if (requestId === quoteRequestId.current) {
|
|
709
|
+
setLoading(false);
|
|
710
|
+
}
|
|
711
|
+
return _context0.f(6);
|
|
712
|
+
case 7:
|
|
713
|
+
return _context0.a(2);
|
|
714
|
+
}
|
|
715
|
+
}, _callee0, null, [[1, 5, 6, 7]]);
|
|
716
|
+
}));
|
|
717
|
+
return _executeServerQuote.apply(this, arguments);
|
|
718
|
+
}
|
|
719
|
+
function getQuote(options) {
|
|
720
|
+
var values = getValues();
|
|
721
|
+
var cleanedValues = cleanJobVariationsAndGroups(values);
|
|
722
|
+
if (clientSideEnabled && pricingRules) {
|
|
723
|
+
try {
|
|
724
|
+
var clientJob = applyClientQuote(cleanedValues);
|
|
725
|
+
if (clientJob) {
|
|
726
|
+
scheduleInventoryRefresh(cleanedValues);
|
|
727
|
+
return Promise.resolve(clientJob);
|
|
728
|
+
}
|
|
729
|
+
} catch (e) {
|
|
730
|
+
// fall through to server on any client-calc error
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
if (options !== null && options !== void 0 && options.immediate) {
|
|
734
|
+
if (serverQuoteTimer.current) {
|
|
735
|
+
clearTimeout(serverQuoteTimer.current);
|
|
736
|
+
serverQuoteTimer.current = null;
|
|
737
|
+
}
|
|
738
|
+
return executeServerQuote();
|
|
739
|
+
}
|
|
740
|
+
return new Promise(function (resolve) {
|
|
741
|
+
if (serverQuoteTimer.current) {
|
|
742
|
+
clearTimeout(serverQuoteTimer.current);
|
|
743
|
+
}
|
|
744
|
+
serverQuoteTimer.current = setTimeout(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
|
|
745
|
+
var _t3;
|
|
746
|
+
return _regenerator().w(function (_context4) {
|
|
747
|
+
while (1) switch (_context4.n) {
|
|
748
|
+
case 0:
|
|
749
|
+
serverQuoteTimer.current = null;
|
|
750
|
+
_t3 = resolve;
|
|
751
|
+
_context4.n = 1;
|
|
752
|
+
return executeServerQuote();
|
|
753
|
+
case 1:
|
|
754
|
+
_t3(_context4.v);
|
|
755
|
+
case 2:
|
|
756
|
+
return _context4.a(2);
|
|
757
|
+
}
|
|
758
|
+
}, _callee4);
|
|
759
|
+
})), SERVER_QUOTE_DEBOUNCE_MS);
|
|
760
|
+
});
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
// When pricing rules arrive (async fetch), re-quote so Area/other
|
|
764
|
+
// client-side costs apply without requiring another field edit.
|
|
765
|
+
var appliedClientRulesRef = React.useRef(null);
|
|
766
|
+
React.useEffect(function () {
|
|
767
|
+
if (!clientSideEnabled || !pricingRules || pricingRules.unsupported) {
|
|
768
|
+
return;
|
|
769
|
+
}
|
|
770
|
+
if (appliedClientRulesRef.current === pricingRules) {
|
|
771
|
+
return;
|
|
772
|
+
}
|
|
773
|
+
appliedClientRulesRef.current = pricingRules;
|
|
774
|
+
getQuote();
|
|
775
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
776
|
+
}, [clientSideEnabled, pricingRules]);
|
|
777
|
+
var _useState13 = useState(false),
|
|
778
|
+
_useState14 = _slicedToArray(_useState13, 2),
|
|
779
|
+
isDraftModalOpen = _useState14[0],
|
|
780
|
+
setIsDraftModalOpen = _useState14[1];
|
|
781
|
+
var _useState15 = useState(false),
|
|
782
|
+
_useState16 = _slicedToArray(_useState15, 2),
|
|
783
|
+
isDraftDesignerOpen = _useState16[0],
|
|
784
|
+
setIsDraftDesignerOpen = _useState16[1];
|
|
785
|
+
var pendingCheckoutRef = React.useRef(null);
|
|
786
|
+
var consumePendingCheckout = function consumePendingCheckout() {
|
|
787
|
+
var pending = pendingCheckoutRef.current;
|
|
788
|
+
pendingCheckoutRef.current = null;
|
|
789
|
+
return pending;
|
|
790
|
+
};
|
|
791
|
+
var runDraftCheckout = /*#__PURE__*/function () {
|
|
792
|
+
var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(proceed) {
|
|
793
|
+
var quoted, jobData, drafts, hasSaved;
|
|
794
|
+
return _regenerator().w(function (_context6) {
|
|
795
|
+
while (1) switch (_context6.n) {
|
|
796
|
+
case 0:
|
|
797
|
+
_context6.n = 1;
|
|
798
|
+
return validateForm();
|
|
799
|
+
case 1:
|
|
800
|
+
if (_context6.v) {
|
|
801
|
+
_context6.n = 2;
|
|
802
|
+
break;
|
|
803
|
+
}
|
|
804
|
+
return _context6.a(2);
|
|
805
|
+
case 2:
|
|
806
|
+
_context6.n = 3;
|
|
807
|
+
return getQuote({
|
|
808
|
+
immediate: true
|
|
809
|
+
});
|
|
810
|
+
case 3:
|
|
811
|
+
quoted = _context6.v;
|
|
812
|
+
if (quoted) {
|
|
813
|
+
_context6.n = 4;
|
|
814
|
+
break;
|
|
815
|
+
}
|
|
816
|
+
return _context6.a(2);
|
|
817
|
+
case 4:
|
|
818
|
+
jobData = liftIndependentVariationsFromGroups(quoted, product);
|
|
819
|
+
if (productAllowsClientDesign(initProduct)) {
|
|
820
|
+
_context6.n = 5;
|
|
821
|
+
break;
|
|
822
|
+
}
|
|
823
|
+
proceed(jobData);
|
|
824
|
+
return _context6.a(2);
|
|
825
|
+
case 5:
|
|
826
|
+
if (!(loadArtworkPath(initProduct.id) === 'service')) {
|
|
827
|
+
_context6.n = 6;
|
|
828
|
+
break;
|
|
829
|
+
}
|
|
830
|
+
proceed(_objectSpread(_objectSpread({}, jobData), {}, {
|
|
831
|
+
ownDrafts: [],
|
|
832
|
+
clientFiles: []
|
|
833
|
+
}));
|
|
834
|
+
return _context6.a(2);
|
|
835
|
+
case 6:
|
|
836
|
+
drafts = loadDrafts(initProduct.id);
|
|
837
|
+
hasSaved = drafts.some(function (draft) {
|
|
838
|
+
var _draft$templateData;
|
|
839
|
+
return draft.productId === initProduct.id && ((_draft$templateData = draft.templateData) === null || _draft$templateData === void 0 ? void 0 : _draft$templateData.length);
|
|
840
|
+
});
|
|
841
|
+
if (!hasSaved) {
|
|
842
|
+
_context6.n = 7;
|
|
843
|
+
break;
|
|
844
|
+
}
|
|
845
|
+
setDraftAppproveCallback(function () {
|
|
846
|
+
return /*#__PURE__*/function () {
|
|
847
|
+
var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(draftJobData) {
|
|
848
|
+
return _regenerator().w(function (_context5) {
|
|
849
|
+
while (1) switch (_context5.n) {
|
|
850
|
+
case 0:
|
|
851
|
+
proceed(draftJobData || jobData);
|
|
852
|
+
return _context5.a(2, Promise.resolve());
|
|
853
|
+
}
|
|
854
|
+
}, _callee5);
|
|
855
|
+
}));
|
|
856
|
+
return function (_x2) {
|
|
857
|
+
return _ref7.apply(this, arguments);
|
|
858
|
+
};
|
|
859
|
+
}();
|
|
860
|
+
});
|
|
861
|
+
setIsDraftModalOpen(true);
|
|
862
|
+
return _context6.a(2);
|
|
863
|
+
case 7:
|
|
864
|
+
proceed(jobData);
|
|
865
|
+
case 8:
|
|
866
|
+
return _context6.a(2);
|
|
867
|
+
}
|
|
868
|
+
}, _callee6);
|
|
869
|
+
}));
|
|
870
|
+
return function runDraftCheckout(_x) {
|
|
871
|
+
return _ref6.apply(this, arguments);
|
|
872
|
+
};
|
|
873
|
+
}();
|
|
874
|
+
var addToCart = onAddToCart ? /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7() {
|
|
875
|
+
return _regenerator().w(function (_context7) {
|
|
876
|
+
while (1) switch (_context7.n) {
|
|
877
|
+
case 0:
|
|
878
|
+
_context7.n = 1;
|
|
879
|
+
return runDraftCheckout(function (jobData) {
|
|
880
|
+
if (!jobData.product) jobData.product = {
|
|
881
|
+
id: initProduct.id
|
|
882
|
+
};
|
|
883
|
+
setTimeout(function () {
|
|
884
|
+
onAddToCart(_objectSpread(_objectSpread({}, jobData), {}, {
|
|
885
|
+
tags: tags
|
|
886
|
+
}));
|
|
887
|
+
}, 0);
|
|
888
|
+
});
|
|
889
|
+
case 1:
|
|
890
|
+
return _context7.a(2);
|
|
891
|
+
}
|
|
892
|
+
}, _callee7);
|
|
893
|
+
})) : undefined;
|
|
894
|
+
var buyNow = onBuyNow ? /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8() {
|
|
895
|
+
return _regenerator().w(function (_context8) {
|
|
896
|
+
while (1) switch (_context8.n) {
|
|
897
|
+
case 0:
|
|
898
|
+
_context8.n = 1;
|
|
899
|
+
return runDraftCheckout(function (jobData) {
|
|
900
|
+
onBuyNow(_objectSpread({}, jobData));
|
|
901
|
+
});
|
|
902
|
+
case 1:
|
|
903
|
+
return _context8.a(2);
|
|
904
|
+
}
|
|
905
|
+
}, _callee8);
|
|
906
|
+
})) : undefined;
|
|
907
|
+
var getSubmitQuote = onGetQuote ? /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee9() {
|
|
908
|
+
return _regenerator().w(function (_context9) {
|
|
909
|
+
while (1) switch (_context9.n) {
|
|
910
|
+
case 0:
|
|
911
|
+
_context9.n = 1;
|
|
912
|
+
return runDraftCheckout(function (jobData) {
|
|
913
|
+
onGetQuote(_objectSpread({}, jobData));
|
|
914
|
+
});
|
|
915
|
+
case 1:
|
|
916
|
+
return _context9.a(2);
|
|
917
|
+
}
|
|
918
|
+
}, _callee9);
|
|
919
|
+
})) : undefined;
|
|
920
|
+
return /*#__PURE__*/_jsxs(MerchiProductFormContext.Provider, {
|
|
921
|
+
value: {
|
|
922
|
+
apiUrl: apiUrl,
|
|
923
|
+
allowAddToCart: allowAddToCart,
|
|
924
|
+
btnNameAddToCart: btnNameAddToCart,
|
|
925
|
+
classNameAlertSellerEditable: classNameAlertSellerEditable,
|
|
926
|
+
classNameButtonSubmit: classNameButtonSubmit,
|
|
927
|
+
classNameButtonGroupAdd: classNameButtonGroupAdd,
|
|
928
|
+
classNameButtonGroupRemove: classNameButtonGroupRemove,
|
|
929
|
+
classNameButtonsSubmitContainer: classNameButtonsSubmitContainer,
|
|
930
|
+
classNameButtonApproveDrafts: classNameButtonApproveDrafts,
|
|
931
|
+
classNameButtonCloseDrafts: classNameButtonCloseDrafts,
|
|
932
|
+
classNameDraftButtonContainer: classNameDraftButtonContainer,
|
|
933
|
+
classNameDraftCta: classNameDraftCta,
|
|
934
|
+
classNameDraftGroupContainer: classNameDraftGroupContainer,
|
|
935
|
+
classNameDraftGroupTitle: classNameDraftGroupTitle,
|
|
936
|
+
classNameDraftSheet: classNameDraftSheet,
|
|
937
|
+
classNameDraftToolbar: classNameDraftToolbar,
|
|
938
|
+
classNameFileUploadContainer: classNameFileUploadContainer,
|
|
939
|
+
classNameFileUpload: classNameFileUpload,
|
|
940
|
+
classNameFilePreviewContainer: classNameFilePreviewContainer,
|
|
941
|
+
classNameFileUploadTextContainer: classNameFileUploadTextContainer,
|
|
942
|
+
classNameFilePreviewIconWrapper: classNameFilePreviewIconWrapper,
|
|
943
|
+
classNameFileUploadButton: classNameFileUploadButton,
|
|
944
|
+
classNameFileUploadIcon: classNameFileUploadIcon,
|
|
945
|
+
classNameFileUploadIconSecond: classNameFileUploadIconSecond,
|
|
946
|
+
classNameFileUploadIconContainer: classNameFileUploadIconContainer,
|
|
947
|
+
classNameFileListItem: classNameFileListItem,
|
|
948
|
+
classNameFileButtonDownload: classNameFileButtonDownload,
|
|
949
|
+
classNameFileButtonDelete: classNameFileButtonDelete,
|
|
950
|
+
classNameFileListItemContainer: classNameFileListItemContainer,
|
|
951
|
+
classNameGroupsContainer: classNameGroupsContainer,
|
|
952
|
+
classNameGroupPriceContainer: classNameGroupPriceContainer,
|
|
953
|
+
classNameInput: classNameInput,
|
|
954
|
+
classNameInputContainer: classNameInputContainer,
|
|
955
|
+
classNameInventoryStatus: classNameInventoryStatus,
|
|
956
|
+
classNameOptionContainer: classNameOptionContainer,
|
|
957
|
+
classNameOptionInput: classNameOptionInput,
|
|
958
|
+
classNameOptionLabel: classNameOptionLabel,
|
|
959
|
+
classNameOptionSuper: classNameOptionSuper,
|
|
960
|
+
classNameOptionsCheckboxRadioContainer: classNameOptionsCheckboxRadioContainer,
|
|
961
|
+
classNameOptionImage: classNameOptionImage,
|
|
962
|
+
classNameOptionImageContainer: classNameOptionImageContainer,
|
|
963
|
+
classNameOptionColour: classNameOptionColour,
|
|
964
|
+
classNameOptionColourContainer: classNameOptionColourContainer,
|
|
965
|
+
classNameProductTitle: classNameProductTitle,
|
|
966
|
+
classNameProductOriginTitle: classNameProductOriginTitle,
|
|
967
|
+
classNameProductTotalContainer: classNameProductTotalContainer,
|
|
968
|
+
classNameProductTotal: classNameProductTotal,
|
|
969
|
+
classNameQuantityLabelContainer: classNameQuantityLabelContainer,
|
|
970
|
+
classNameUnitPrice: classNameUnitPrice,
|
|
971
|
+
classNamePriceMatrix: classNamePriceMatrix,
|
|
972
|
+
client: client,
|
|
973
|
+
control: control,
|
|
974
|
+
draftApproveCallback: draftApproveCallback,
|
|
975
|
+
getQuote: getQuote,
|
|
976
|
+
hcaptchaSiteKey: hcaptchaSiteKey,
|
|
977
|
+
pricingRules: pricingRules,
|
|
978
|
+
hideCost: hideCost,
|
|
979
|
+
hideCountry: hideCountry,
|
|
980
|
+
hideCalculatedPrice: hideCalculatedPrice,
|
|
981
|
+
hideDomainName: hideDomainName,
|
|
982
|
+
hideQuantityField: hideQuantityField,
|
|
983
|
+
hideRequestQuotationButton: hideRequestQuotationButton,
|
|
984
|
+
hidePaymentUpfrontButton: hidePaymentUpfrontButton,
|
|
985
|
+
hideTitle: hideTitle,
|
|
986
|
+
hookForm: hookForm,
|
|
987
|
+
isCartItem: isCartItem,
|
|
988
|
+
isDraftDesignerOpen: isDraftDesignerOpen,
|
|
989
|
+
isDraftModalOpen: isDraftModalOpen,
|
|
990
|
+
consumePendingCheckout: consumePendingCheckout,
|
|
991
|
+
job: job,
|
|
992
|
+
loading: loading,
|
|
993
|
+
inventoryLoading: inventoryLoading,
|
|
994
|
+
onAddToCart: addToCart,
|
|
995
|
+
onBuyNow: buyNow,
|
|
996
|
+
onGetQuote: getSubmitQuote,
|
|
997
|
+
onSubmit: onSubmit,
|
|
998
|
+
product: product,
|
|
999
|
+
productFormId: productFormId,
|
|
1000
|
+
setClient: setClient,
|
|
1001
|
+
setIsDraftDesignerOpen: setIsDraftDesignerOpen,
|
|
1002
|
+
setIsDraftModalOpen: setIsDraftModalOpen,
|
|
1003
|
+
setJob: setJob,
|
|
1004
|
+
setLoading: setLoading,
|
|
1005
|
+
showAlert: showAlert,
|
|
1006
|
+
showCurrency: showCurrency,
|
|
1007
|
+
showCurrencyCode: showCurrencyCode,
|
|
1008
|
+
showFeatureDeadline: showFeatureDeadline,
|
|
1009
|
+
showGroupBuyStatus: showGroupBuyStatus,
|
|
1010
|
+
showPriceMatrix: showPriceMatrix,
|
|
1011
|
+
showUnitPrice: showUnitPrice
|
|
1012
|
+
},
|
|
1013
|
+
children: [productFormId ? /*#__PURE__*/_jsx("form", {
|
|
1014
|
+
id: productFormId,
|
|
1015
|
+
onSubmit: doSubmit,
|
|
1016
|
+
children: children
|
|
1017
|
+
}) : children, /*#__PURE__*/_jsx(ProductDraftsHost, {})]
|
|
1018
|
+
});
|
|
1019
|
+
};
|
|
1020
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfdG9Qcm9wZXJ0eUtleSIsInZhbHVlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJpIiwiX3RvUHJpbWl0aXZlIiwidG9QcmltaXRpdmUiLCJjYWxsIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiX3JlZ2VuZXJhdG9yIiwibiIsInRvU3RyaW5nVGFnIiwiYyIsIkdlbmVyYXRvciIsInUiLCJjcmVhdGUiLCJfcmVnZW5lcmF0b3JEZWZpbmUyIiwiZiIsInAiLCJ5IiwiRyIsInYiLCJhIiwiZCIsImJpbmQiLCJsIiwiZG9uZSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiZGlzcGxheU5hbWUiLCJ3IiwibSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9uZXh0IiwiX3Rocm93IiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJuZXh0IiwiaXNBcnJheSIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsInVzZUNvbnRleHQiLCJ1c2VTdGF0ZSIsInVzZUZvcm0iLCJmZXRjaEpvYlF1b3RlIiwicHJvZHVjdEhhc0dyb3VwcyIsImdldE1lcmNoaVNvdXJjZUpvYlRhZ3MiLCJwcm9kdWN0QWxsb3dzQ2xpZW50RGVzaWduIiwibG9hZEFydHdvcmtQYXRoIiwibG9hZERyYWZ0cyIsIlByb2R1Y3REcmFmdHNIb3N0IiwiYnVpbGRFbXB0eVZhcmlhdGlvbkZyb21GaWVsZCIsImNsZWFuSm9iVmFyaWF0aW9uc0FuZEdyb3VwcyIsInN5bmNKb2JTZWxlY3RlZE9wdGlvbnNGcm9tVmFsdWVzIiwicHJpY2luZyIsInRvU2VsZWN0aW9ucyIsInNjcm9sbFRvRmlyc3RGb3JtRXJyb3IiLCJidWlsZERlc2lyZWRWYXJpYXRpb25zRnJvbUZpZWxkcyIsInByb2R1Y3RGaWVsZHNGb3JQcmljaW5nRmllbGRzIiwicmVjb25jaWxlVmFyaWF0aW9ucyIsImdyb3VwRmllbGRUZW1wbGF0ZXMiLCJncm91cEZpZWxkVGVtcGxhdGVzRnJvbVByb2R1Y3QiLCJsaWZ0SW5kZXBlbmRlbnRWYXJpYXRpb25zRnJvbUdyb3VwcyIsInNhbml0aXplUHJvZHVjdFZhcmlhdGlvbkZpZWxkcyIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJNZXJjaGlQcm9kdWN0Rm9ybUNvbnRleHQiLCJhcGlVcmwiLCJhbGxvd0FkZFRvQ2FydCIsImJ0bk5hbWVBZGRUb0NhcnQiLCJ1bmRlZmluZWQiLCJjbGFzc05hbWVBbGVydFNlbGxlckVkaXRhYmxlIiwiY2xhc3NOYW1lQnV0dG9uU3VibWl0IiwiY2xhc3NOYW1lQnV0dG9uR3JvdXBBZGQiLCJjbGFzc05hbWVCdXR0b25Hcm91cFJlbW92ZSIsImNsYXNzTmFtZUJ1dHRvbnNTdWJtaXRDb250YWluZXIiLCJjbGFzc05hbWVCdXR0b25BcHByb3ZlRHJhZnRzIiwiY2xhc3NOYW1lQnV0dG9uQ2xvc2VEcmFmdHMiLCJjbGFzc05hbWVEcmFmdEJ1dHRvbkNvbnRhaW5lciIsImNsYXNzTmFtZURyYWZ0Q3RhIiwiY2xhc3NOYW1lRHJhZnRHcm91cENvbnRhaW5lciIsImNsYXNzTmFtZURyYWZ0R3JvdXBUaXRsZSIsImNsYXNzTmFtZURyYWZ0U2hlZXQiLCJjbGFzc05hbWVEcmFmdFRvb2xiYXIiLCJjbGFzc05hbWVGaWxlVXBsb2FkQ29udGFpbmVyIiwiY2xhc3NOYW1lRmlsZVVwbG9hZCIsImNsYXNzTmFtZUZpbGVQcmV2aWV3Q29udGFpbmVyIiwiY2xhc3NOYW1lRmlsZVVwbG9hZFRleHRDb250YWluZXIiLCJjbGFzc05hbWVGaWxlUHJldmlld0ljb25XcmFwcGVyIiwiY2xhc3NOYW1lRmlsZVVwbG9hZEJ1dHRvbiIsImNsYXNzTmFtZUZpbGVVcGxvYWRJY29uIiwiY2xhc3NOYW1lRmlsZVVwbG9hZEljb25TZWNvbmQiLCJjbGFzc05hbWVGaWxlVXBsb2FkSWNvbkNvbnRhaW5lciIsImNsYXNzTmFtZUZpbGVMaXN0SXRlbSIsImNsYXNzTmFtZUZpbGVCdXR0b25EZWxldGUiLCJjbGFzc05hbWVGaWxlTGlzdEl0ZW1Db250YWluZXIiLCJjbGFzc05hbWVHcm91cHNDb250YWluZXIiLCJjbGFzc05hbWVHcm91cFByaWNlQ29udGFpbmVyIiwiY2xhc3NOYW1lSW5wdXQiLCJjbGFzc05hbWVJbnB1dENvbnRhaW5lciIsImNsYXNzTmFtZUludmVudG9yeVN0YXR1cyIsImNsYXNzTmFtZU9wdGlvbkNvbnRhaW5lciIsImNsYXNzTmFtZU9wdGlvbklucHV0IiwiY2xhc3NOYW1lT3B0aW9uTGFiZWwiLCJjbGFzc05hbWVPcHRpb25TdXBlciIsImNsYXNzTmFtZU9wdGlvbnNDaGVja2JveFJhZGlvQ29udGFpbmVyIiwiY2xhc3NOYW1lT3B0aW9uSW1hZ2UiLCJjbGFzc05hbWVPcHRpb25JbWFnZUNvbnRhaW5lciIsImNsYXNzTmFtZU9wdGlvbkNvbG91ciIsImNsYXNzTmFtZU9wdGlvbkNvbG91ckNvbnRhaW5lciIsImNsYXNzTmFtZVByb2R1Y3RUaXRsZSIsImNsYXNzTmFtZVByb2R1Y3RPcmlnaW5UaXRsZSIsImNsYXNzTmFtZVByb2R1Y3RUb3RhbENvbnRhaW5lciIsImNsYXNzTmFtZVByb2R1Y3RUb3RhbCIsImNsYXNzTmFtZVF1YW50aXR5TGFiZWxDb250YWluZXIiLCJjbGFzc05hbWVVbml0UHJpY2UiLCJjbGFzc05hbWVQcmljZU1hdHJpeCIsImNvbnRyb2wiLCJjdXJyZW50VXNlciIsImRyYWZ0QXBwcm92ZUNhbGxiYWNrIiwiZ2V0UXVvdGUiLCJoY2FwdGNoYVNpdGVLZXkiLCJwcmljaW5nUnVsZXMiLCJoaWRlQ29zdCIsImhpZGVDb3VudHJ5IiwiaGlkZURvbWFpbk5hbWUiLCJoaWRlQ2FsY3VsYXRlZFByaWNlIiwiaGlkZVF1YW50aXR5RmllbGQiLCJoaWRlUmVxdWVzdFF1b3RhdGlvbkJ1dHRvbiIsImhpZGVQYXltZW50VXBmcm9udEJ1dHRvbiIsImhpZGVUaXRsZSIsImhvb2tGb3JtIiwiaXNDYXJ0SXRlbSIsImluaXRKb2IiLCJpc0RyYWZ0RGVzaWduZXJPcGVuIiwiaXNEcmFmdE1vZGFsT3BlbiIsImNvbnN1bWVQZW5kaW5nQ2hlY2tvdXQiLCJqb2IiLCJsb2FkaW5nIiwiaW52ZW50b3J5TG9hZGluZyIsIm9uQWRkVG9DYXJ0Iiwib25CdXlOb3ciLCJvbkdldFF1b3RlIiwib25TdWJtaXQiLCJwcm9kdWN0IiwicHJvZHVjdEZvcm1JZCIsInNldENsaWVudCIsInNldElzRHJhZnREZXNpZ25lck9wZW4iLCJzZXRJc0RyYWZ0TW9kYWxPcGVuIiwic2V0Sm9iIiwic2V0TG9hZGluZyIsInNob3dBbGVydCIsImFsZXJ0Iiwic2hvd0N1cnJlbmN5Iiwic2hvd0N1cnJlbmN5Q29kZSIsInNob3dGZWF0dXJlRGVhZGxpbmUiLCJzaG93R3JvdXBCdXlTdGF0dXMiLCJzaG93UHJpY2VNYXRyaXgiLCJzaG93VW5pdFByaWNlIiwidXNlTWVyY2hpRm9ybUNvbnRleHQiLCJNZXJjaGlQcm9kdWN0Rm9ybVByb3ZpZGVyIiwiX3JlZiIsIl9yZWYkYXBpVXJsIiwiX3JlZiRjbGFzc05hbWVBbGVydFNlIiwiX3JlZiRjbGFzc05hbWVCdXR0b25TIiwiX3JlZiRjbGFzc05hbWVCdXR0b25HIiwiX3JlZiRjbGFzc05hbWVCdXR0b25HMiIsIl9yZWYkY2xhc3NOYW1lQnV0dG9ucyIsIl9yZWYkY2xhc3NOYW1lQnV0dG9uQSIsIl9yZWYkY2xhc3NOYW1lQnV0dG9uQyIsIl9yZWYkY2xhc3NOYW1lRHJhZnRCdSIsIl9yZWYkY2xhc3NOYW1lRHJhZnRDdCIsIl9yZWYkY2xhc3NOYW1lRHJhZnRHciIsIl9yZWYkY2xhc3NOYW1lRHJhZnRHcjIiLCJfcmVmJGNsYXNzTmFtZURyYWZ0U2giLCJfcmVmJGNsYXNzTmFtZURyYWZ0VG8iLCJfcmVmJGNsYXNzTmFtZUZpbGVVcGwiLCJfcmVmJGNsYXNzTmFtZUZpbGVVcGwyIiwiX3JlZiRjbGFzc05hbWVGaWxlUHJlIiwiX3JlZiRjbGFzc05hbWVGaWxlVXBsMyIsIl9yZWYkY2xhc3NOYW1lRmlsZVByZTIiLCJfcmVmJGNsYXNzTmFtZUZpbGVVcGw0IiwiX3JlZiRjbGFzc05hbWVGaWxlVXBsNSIsIl9yZWYkY2xhc3NOYW1lRmlsZVVwbDYiLCJfcmVmJGNsYXNzTmFtZUZpbGVVcGw3IiwiX3JlZiRjbGFzc05hbWVGaWxlTGlzIiwiX3JlZiRjbGFzc05hbWVGaWxlQnV0IiwiY2xhc3NOYW1lRmlsZUJ1dHRvbkRvd25sb2FkIiwiX3JlZiRjbGFzc05hbWVGaWxlQnV0MiIsIl9yZWYkY2xhc3NOYW1lRmlsZUxpczIiLCJfcmVmJGNsYXNzTmFtZUdyb3Vwc0MiLCJfcmVmJGNsYXNzTmFtZUdyb3VwUHIiLCJfcmVmJGNsYXNzTmFtZUlucHV0IiwiX3JlZiRjbGFzc05hbWVJbnZlbnRvIiwiX3JlZiRjbGFzc05hbWVJbnB1dENvIiwiX3JlZiRjbGFzc05hbWVPcHRpb25DIiwiX3JlZiRjbGFzc05hbWVPcHRpb25JIiwiX3JlZiRjbGFzc05hbWVPcHRpb25MIiwiX3JlZiRjbGFzc05hbWVPcHRpb25TIiwiX3JlZiRjbGFzc05hbWVPcHRpb25zIiwiX3JlZiRjbGFzc05hbWVPcHRpb25JMiIsIl9yZWYkY2xhc3NOYW1lT3B0aW9uSTMiLCJfcmVmJGNsYXNzTmFtZU9wdGlvbkMyIiwiX3JlZiRjbGFzc05hbWVPcHRpb25DMyIsIl9yZWYkY2xhc3NOYW1lUHJvZHVjdCIsIl9yZWYkY2xhc3NOYW1lUHJvZHVjdDIiLCJfcmVmJGNsYXNzTmFtZVByb2R1Y3QzIiwiX3JlZiRjbGFzc05hbWVQcm9kdWN0NCIsIl9yZWYkY2xhc3NOYW1lUXVhbnRpdCIsImNoaWxkcmVuIiwiX3JlZiRoaWRlQ291bnRyeSIsIl9yZWYkaGlkZURvbWFpbk5hbWUiLCJfcmVmJGhpZGVUaXRsZSIsImluaXRQcm9kdWN0IiwicHJpY2luZ1J1bGVzUHJvcCIsIl9yZWYkc2hvd1ByaWNlTWF0cml4IiwiZGVmYXVsdEpvYiIsImRlZmF1bHRWYWx1ZXMiLCJyZVZhbGlkYXRlTW9kZSIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJjbGllbnQiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2V0RHJhZnRBcHBwcm92ZUNhbGxiYWNrIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsInNldEludmVudG9yeUxvYWRpbmciLCJnZXRWYWx1ZXMiLCJoYW5kbGVTdWJtaXQiLCJyZXNldCIsInRyaWdnZXIiLCJkb1N1Ym1pdCIsInZhbGlkYXRlRm9ybSIsIl9yZWYyIiwiX2NhbGxlZSIsInZhbGlkIiwiX2NvbnRleHQiLCJ0YWdzIiwiaW52ZW50b3J5UmVmcmVzaFRpbWVyIiwidXNlUmVmIiwic2VydmVyUXVvdGVUaW1lciIsInF1b3RlUmVxdWVzdElkIiwiU0VSVkVSX1FVT1RFX0RFQk9VTkNFX01TIiwiY2xpZW50U2lkZUVuYWJsZWQiLCJCb29sZWFuIiwiY2xpZW50U2lkZUNhbGN1bGF0aW9uIiwiX3VzZVN0YXRlMTEiLCJfdXNlU3RhdGUxMiIsImZldGNoZWRQcmljaW5nUnVsZXMiLCJzZXRGZXRjaGVkUHJpY2luZ1J1bGVzIiwidXNlRWZmZWN0IiwiaWQiLCJjYW5jZWxsZWQiLCJfY2FsbGVlMiIsImJhc2UiLCJyZXMiLCJydWxlcyIsIl90IiwiX2NvbnRleHQyIiwiZW5kc1dpdGgiLCJjb25jYXQiLCJmZXRjaCIsIm9rIiwianNvbiIsImN1cnJlbnQiLCJjbGVhclRpbWVvdXQiLCJ2YXJpYXRpb25zSGF2ZUZpZWxkTWV0YWRhdGEiLCJqb2JWYWx1ZXMiLCJjaGVjayIsInZhcmlhdGlvbnMiLCJldmVyeSIsInZhcmlhdGlvbiIsIl92YXJpYXRpb24kdmFyaWF0aW9uRiIsInZhcmlhdGlvbkZpZWxkIiwiZmllbGRUeXBlIiwidmFyaWF0aW9uc0dyb3VwcyIsImdyb3VwIiwiYXBwbHlPcHRpb25WaXNpYmlsaXR5IiwidmlzaWJsZU9wdGlvbklkcyIsInVuYXZhaWxhYmxlT3B0aW9uSWRzIiwiY2hhbmdlZCIsInNlbGVjdGFibGVPcHRpb25zIiwib3B0aW9uIiwiaXNWaXNpYmxlIiwiaGFzIiwib3B0aW9uSWQiLCJhdmFpbGFibGUiLCJyZXNldEZvcm1QcmVzZXJ2aW5nU2Nyb2xsIiwidmFsdWVzIiwiaGFzV2luZG93Iiwid2luZG93Iiwic2Nyb2xsUGFyZW50IiwiZmluZFNjcm9sbFBhcmVudCIsInNjcm9sbFgiLCJzY3JvbGxZIiwicGFyZW50VG9wIiwic2Nyb2xsVG9wIiwicGFyZW50TGVmdCIsInNjcm9sbExlZnQiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJzY3JvbGxUbyIsImRvY3VtZW50IiwiYWN0aXZlIiwiYWN0aXZlRWxlbWVudCIsIm5vZGUiLCJib2R5Iiwic3R5bGUiLCJnZXRDb21wdXRlZFN0eWxlIiwiY2FuU2Nyb2xsWSIsIm92ZXJmbG93WSIsInNjcm9sbEhlaWdodCIsImNsaWVudEhlaWdodCIsImdldEF0dHJpYnV0ZSIsInBhcmVudEVsZW1lbnQiLCJ2aWV3cG9ydCIsInF1ZXJ5U2VsZWN0b3IiLCJmb3JtUXVhbnRpdGllc01hdGNoUmVxdWVzdCIsImZvcm1WYWx1ZXMiLCJyZXF1ZXN0RGF0YSIsImdyb3VwcyIsImluZGV4IiwiX2Zvcm1WYWx1ZXMkdmFyaWF0aW9uIiwicXVhbnRpdHkiLCJhcHBseVNlcnZlclF1b3RlIiwic2VydmVySm9iIiwiY2xlYW5lZEZvcm1WYWx1ZXMiLCJpbmRlcGVuZGVudFJlY29uY2lsZSIsInZpc2liaWxpdHlDaGFuZ2VkIiwibWVyZ2VkSm9iIiwiY29zdCIsImNvc3RQZXJVbml0IiwidGF4QW1vdW50IiwidG90YWxDb3N0IiwiY3VycmVuY3kiLCJpbnZlbnRvcnlDb3VudCIsImludmVudG9yeVN1ZmZpY2llbnQiLCJtYXAiLCJzZXJ2ZXJHcm91cCIsImdyb3VwUmVjb25jaWxlIiwiZ3JvdXBDb3N0IiwibWF0Y2hpbmdJbnZlbnRvcmllcyIsIm1lcmdlSW52ZW50b3J5IiwicHJldiIsIm1lcmdlZCIsImciLCJzZyIsInNjaGVkdWxlSW52ZW50b3J5UmVmcmVzaCIsImNsZWFuZWRWYWx1ZXMiLCJuZWVkc0ludmVudG9yeSIsInNldFRpbWVvdXQiLCJfY2FsbGVlMyIsImRhdGEiLCJfdDIiLCJfY29udGV4dDMiLCJ0b0pzb24iLCJhcHBseUNsaWVudFF1b3RlIiwic2VsZWN0aW9ucyIsInJlc3VsdCIsImVzdGltYXRlUXVvdGUiLCJpbmRlcGVuZGVudFNjb3BlIiwiZmllbGRWYWx1ZXMiLCJpbmRlcGVuZGVudFZpc2libGVGaWVsZHMiLCJyZXNvbHZlVmlzaWJsZUZpZWxkcyIsImluZGVwZW5kZW50RmllbGRUZW1wbGF0ZXMiLCJmaWVsZHMiLCJkZXNpcmVkSW5kZXBlbmRlbnQiLCJpbmRlcGVuZGVudFZhcmlhdGlvbkZpZWxkcyIsImluZGVwZW5kZW50VmlzaWJsZSIsInJlc29sdmVWaXNpYmxlT3B0aW9uSWRzIiwiaW5kZXBlbmRlbnRVbmF2YWlsYWJsZSIsInJlc29sdmVVbmF2YWlsYWJsZU9wdGlvbklkcyIsImhhc0dyb3VwcyIsIl9yZXN1bHQkZ3JvdXBDb3N0cyRpIiwiZ3JvdXBDb3N0cyIsImdyb3VwU2NvcGUiLCJncm91cFZpc2libGVGaWVsZHMiLCJncm91cEZpZWxkcyIsImRlc2lyZWRHcm91cCIsImdyb3VwVmlzaWJsZSIsImdyb3VwVW5hdmFpbGFibGUiLCJuZXh0Sm9iIiwiZXhlY3V0ZVNlcnZlclF1b3RlIiwiX2V4ZWN1dGVTZXJ2ZXJRdW90ZSIsIl9jYWxsZWUwIiwicmVxdWVzdElkIiwiY3VycmVudFZhbHVlcyIsIl9hcHBseVNlcnZlclF1b3RlIiwibWVzc2FnZSIsIl90NCIsIl9jb250ZXh0MCIsImVycm9yTWVzc2FnZSIsImNvbnNvbGUiLCJlcnJvciIsIm9wdGlvbnMiLCJjbGllbnRKb2IiLCJpbW1lZGlhdGUiLCJfY2FsbGVlNCIsIl90MyIsIl9jb250ZXh0NCIsImFwcGxpZWRDbGllbnRSdWxlc1JlZiIsInVuc3VwcG9ydGVkIiwiX3VzZVN0YXRlMTMiLCJfdXNlU3RhdGUxNCIsIl91c2VTdGF0ZTE1IiwiX3VzZVN0YXRlMTYiLCJwZW5kaW5nQ2hlY2tvdXRSZWYiLCJwZW5kaW5nIiwicnVuRHJhZnRDaGVja291dCIsIl9yZWY2IiwiX2NhbGxlZTYiLCJwcm9jZWVkIiwicXVvdGVkIiwiam9iRGF0YSIsImRyYWZ0cyIsImhhc1NhdmVkIiwiX2NvbnRleHQ2Iiwib3duRHJhZnRzIiwiY2xpZW50RmlsZXMiLCJzb21lIiwiZHJhZnQiLCJfZHJhZnQkdGVtcGxhdGVEYXRhIiwicHJvZHVjdElkIiwidGVtcGxhdGVEYXRhIiwiX3JlZjciLCJfY2FsbGVlNSIsImRyYWZ0Sm9iRGF0YSIsIl9jb250ZXh0NSIsIl94MiIsIl94IiwiYWRkVG9DYXJ0IiwiX2NhbGxlZTciLCJfY29udGV4dDciLCJidXlOb3ciLCJfY2FsbGVlOCIsIl9jb250ZXh0OCIsImdldFN1Ym1pdFF1b3RlIiwiX2NhbGxlZTkiLCJfY29udGV4dDkiLCJQcm92aWRlciJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L01lcmNoaVByb2R1Y3RGb3JtUHJvdmlkZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIFJlYWN0Tm9kZSwgdXNlQ29udGV4dCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VGb3JtIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IGZldGNoSm9iUXVvdGUgfSBmcm9tICcuLi9hY3Rpb25zL2pvYnMnO1xuaW1wb3J0IHsgcHJvZHVjdEhhc0dyb3VwcyB9IGZyb20gJy4uL3V0aWxzL3Byb2R1Y3RzJztcbmltcG9ydCB7IGdldE1lcmNoaVNvdXJjZUpvYlRhZ3MgfSBmcm9tICcuLi9jb21wb25lbnRzL3V0aWxzJztcbmltcG9ydCB7IERyYWZ0VGVtcGxhdGVEYXRhIH0gZnJvbSAnLi4vdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgcHJvZHVjdEFsbG93c0NsaWVudERlc2lnbiB9IGZyb20gJy4uL3V0aWxzL2RyYWZ0VGVtcGxhdGVzJztcbmltcG9ydCB7XG4gIGxvYWRBcnR3b3JrUGF0aCxcbiAgbG9hZERyYWZ0cyxcbn0gZnJvbSAnLi4vdXRpbHMvZHJhZnRTdG9yYWdlJztcbmltcG9ydCBQcm9kdWN0RHJhZnRzSG9zdCBmcm9tICcuLi9jb21wb25lbnRzL2RyYWZ0cy9Qcm9kdWN0RHJhZnRzSG9zdCc7XG5pbXBvcnQge1xuICBidWlsZEVtcHR5VmFyaWF0aW9uRnJvbUZpZWxkLFxuICBjbGVhbkpvYlZhcmlhdGlvbnNBbmRHcm91cHMsXG4gIHN5bmNKb2JTZWxlY3RlZE9wdGlvbnNGcm9tVmFsdWVzLFxufSBmcm9tICcuLi9jb21wb25lbnRzL3V0aWxzJztcbmltcG9ydCB7IHByaWNpbmcgfSBmcm9tICdAbWVyY2hpL3Nkayc7XG5pbXBvcnQgeyB0b1NlbGVjdGlvbnMgfSBmcm9tICcuLi91dGlscy9zZWxlY3Rpb25zJztcbmltcG9ydCB7IHNjcm9sbFRvRmlyc3RGb3JtRXJyb3IgfSBmcm9tICcuLi91dGlscy9mb3JtRXJyb3JzJztcbmltcG9ydCB7XG4gIGJ1aWxkRGVzaXJlZFZhcmlhdGlvbnNGcm9tRmllbGRzLFxuICBwcm9kdWN0RmllbGRzRm9yUHJpY2luZ0ZpZWxkcyxcbiAgcmVjb25jaWxlVmFyaWF0aW9ucyxcbn0gZnJvbSAnLi4vdXRpbHMvcmVjb25jaWxlVmFyaWF0aW9ucyc7XG5pbXBvcnQge1xuICBncm91cEZpZWxkVGVtcGxhdGVzIGFzIGdyb3VwRmllbGRUZW1wbGF0ZXNGcm9tUHJvZHVjdCxcbiAgbGlmdEluZGVwZW5kZW50VmFyaWF0aW9uc0Zyb21Hcm91cHMsXG4gIHNhbml0aXplUHJvZHVjdFZhcmlhdGlvbkZpZWxkcyxcbn0gZnJvbSAnLi4vdXRpbHMvdmFyaWF0aW9uRmllbGRzJztcbnR5cGUgRm9ybU1ldGhvZHMgPSBSZXR1cm5UeXBlPHR5cGVvZiB1c2VGb3JtPjtcblxuaW50ZXJmYWNlIElNZXJjaGlQcm9kdWN0Rm9ybSB7XG4gIGFwaVVybD86IHN0cmluZztcbiAgYWxsb3dBZGRUb0NhcnQ/OiBib29sZWFuO1xuICBidG5OYW1lQWRkVG9DYXJ0Pzogc3RyaW5nO1xuICBjbGFzc05hbWVBbGVydFNlbGxlckVkaXRhYmxlPzogc3RyaW5nO1xuICBjbGFzc05hbWVCdXR0b25TdWJtaXQ/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUJ1dHRvbkdyb3VwQWRkPzogc3RyaW5nO1xuICBjbGFzc05hbWVCdXR0b25Hcm91cFJlbW92ZT86IHN0cmluZztcbiAgY2xhc3NOYW1lQnV0dG9uc1N1Ym1pdENvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lQnV0dG9uQXBwcm92ZURyYWZ0cz86IHN0cmluZztcbiAgY2xhc3NOYW1lQnV0dG9uQ2xvc2VEcmFmdHM/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZURyYWZ0QnV0dG9uQ29udGFpbmVyPzogc3RyaW5nO1xuICBjbGFzc05hbWVEcmFmdEN0YT86IHN0cmluZztcbiAgY2xhc3NOYW1lRHJhZnRHcm91cENvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lRHJhZnRHcm91cFRpdGxlPzogc3RyaW5nO1xuICBjbGFzc05hbWVEcmFmdFNoZWV0Pzogc3RyaW5nO1xuICBjbGFzc05hbWVEcmFmdFRvb2xiYXI/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUZpbGVVcGxvYWRDb250YWluZXI/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUZpbGVVcGxvYWQ/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUZpbGVQcmV2aWV3Q29udGFpbmVyPzogc3RyaW5nO1xuICBjbGFzc05hbWVGaWxlVXBsb2FkVGV4dENvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lRmlsZVByZXZpZXdJY29uV3JhcHBlcj86IHN0cmluZztcbiAgY2xhc3NOYW1lRmlsZVVwbG9hZEJ1dHRvbj86IHN0cmluZztcbiAgY2xhc3NOYW1lRmlsZVVwbG9hZEljb24/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUZpbGVVcGxvYWRJY29uU2Vjb25kPzogc3RyaW5nO1xuICBjbGFzc05hbWVGaWxlVXBsb2FkSWNvbkNvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lRmlsZUxpc3RJdGVtPzogc3RyaW5nO1xuICBjbGFzc05hbWVGaWxlQnV0dG9uRG93bmxvYWQ/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUZpbGVCdXR0b25EZWxldGU/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUZpbGVMaXN0SXRlbUNvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lR3JvdXBzQ29udGFpbmVyPzogc3RyaW5nO1xuICBjbGFzc05hbWVHcm91cFByaWNlQ29udGFpbmVyPzogc3RyaW5nO1xuICBjbGFzc05hbWVJbnB1dD86IHN0cmluZztcbiAgY2xhc3NOYW1lSW5wdXRDb250YWluZXI/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUludmVudG9yeVN0YXR1cz86IHN0cmluZztcbiAgY2xhc3NOYW1lT3B0aW9uQ29udGFpbmVyPzogc3RyaW5nO1xuICBjbGFzc05hbWVPcHRpb25JbnB1dD86IHN0cmluZztcbiAgY2xhc3NOYW1lT3B0aW9uTGFiZWw/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZU9wdGlvblN1cGVyPzogc3RyaW5nO1xuICBjbGFzc05hbWVPcHRpb25zQ2hlY2tib3hSYWRpb0NvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lT3B0aW9uSW1hZ2U/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZU9wdGlvbkltYWdlQ29udGFpbmVyPzogc3RyaW5nO1xuICBjbGFzc05hbWVPcHRpb25Db2xvdXI/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZU9wdGlvbkNvbG91ckNvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lUHJvZHVjdFRpdGxlPzogc3RyaW5nO1xuICBjbGFzc05hbWVQcm9kdWN0T3JpZ2luVGl0bGU/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZVByb2R1Y3RUb3RhbENvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lUHJvZHVjdFRvdGFsPzogc3RyaW5nO1xuICBjbGFzc05hbWVRdWFudGl0eUxhYmVsQ29udGFpbmVyPzogc3RyaW5nO1xuICBjbGFzc05hbWVVbml0UHJpY2U/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZVByaWNlTWF0cml4Pzogc3RyaW5nO1xuICBjb250cm9sOiBhbnk7XG4gIGN1cnJlbnRVc2VyPzogYW55O1xuICBkcmFmdEFwcHJvdmVDYWxsYmFjazogKChqb2I6IGFueSkgPT4gUHJvbWlzZTx2b2lkPikgfCBudWxsO1xuICBnZXRRdW90ZTogYW55O1xuICBoY2FwdGNoYVNpdGVLZXk/OiBzdHJpbmc7XG4gIHByaWNpbmdSdWxlcz86IGFueTtcbiAgaGlkZUNvc3Q/OiBib29sZWFuO1xuICBoaWRlQ291bnRyeT86IGJvb2xlYW47XG4gIGhpZGVDYWxjdWxhdGVkUHJpY2U/OiBib29sZWFuO1xuICBoaWRlRG9tYWluTmFtZT86IGJvb2xlYW47XG4gIGhpZGVRdWFudGl0eUZpZWxkPzogYm9vbGVhbjtcbiAgaGlkZVJlcXVlc3RRdW90YXRpb25CdXR0b24/OiBib29sZWFuO1xuICBoaWRlUGF5bWVudFVwZnJvbnRCdXR0b24/OiBib29sZWFuO1xuICBoaWRlVGl0bGU/OiBib29sZWFuO1xuICBob29rRm9ybTogRm9ybU1ldGhvZHM7XG4gIGlzQ2FydEl0ZW0/OiBib29sZWFuO1xuICBpbml0Sm9iPzogYW55O1xuICBpc0RyYWZ0RGVzaWduZXJPcGVuOiBib29sZWFuO1xuICBpc0RyYWZ0TW9kYWxPcGVuOiBib29sZWFuO1xuICBjb25zdW1lUGVuZGluZ0NoZWNrb3V0PzogKCkgPT4gKCgpID0+IHZvaWQpIHwgbnVsbDtcbiAgam9iOiBhbnk7XG4gIGxvYWRpbmc6IGJvb2xlYW47XG4gIGludmVudG9yeUxvYWRpbmc/OiBib29sZWFuO1xuICBvbkFkZFRvQ2FydD86ICgpID0+IHZvaWQ7XG4gIG9uQnV5Tm93PzogKCkgPT4gdm9pZDtcbiAgb25HZXRRdW90ZT86ICgpID0+IHZvaWQ7XG4gIG9uU3VibWl0PzogKGpvYkRhdGE6IGFueSkgPT4gdm9pZDtcbiAgcHJvZHVjdDogYW55O1xuICBwcm9kdWN0Rm9ybUlkPzogc3RyaW5nO1xuICBzZXRDbGllbnQ6IChjbGllbnQ6IGFueSkgPT4gdm9pZDtcbiAgc2V0SXNEcmFmdERlc2lnbmVyT3BlbjogKGlzT3BlbjogYm9vbGVhbikgPT4gdm9pZDtcbiAgc2V0SXNEcmFmdE1vZGFsT3BlbjogKGlzT3BlbjogYm9vbGVhbikgPT4gdm9pZDtcbiAgc2V0Sm9iOiAoam9iOiBhbnkpID0+IHZvaWQ7XG4gIHNldExvYWRpbmc6IChsb2FkaW5nOiBib29sZWFuKSA9PiB2b2lkO1xuICBzaG93QWxlcnQ6IChhbGVydDogYW55KSA9PiB2b2lkO1xuICBzaG93Q3VycmVuY3k/OiBib29sZWFuO1xuICBzaG93Q3VycmVuY3lDb2RlPzogYm9vbGVhbjtcbiAgc2hvd0ZlYXR1cmVEZWFkbGluZT86IGJvb2xlYW47XG4gIHNob3dHcm91cEJ1eVN0YXR1cz86IGJvb2xlYW47XG4gIHNob3dQcmljZU1hdHJpeD86IGJvb2xlYW47XG4gIHNob3dVbml0UHJpY2U/OiBib29sZWFuO1xufVxuXG5jb25zdCBNZXJjaGlQcm9kdWN0Rm9ybUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PElNZXJjaGlQcm9kdWN0Rm9ybT4oe1xuICBhcGlVcmw6ICcnLFxuICBhbGxvd0FkZFRvQ2FydDogZmFsc2UsXG4gIGJ0bk5hbWVBZGRUb0NhcnQ6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lQWxlcnRTZWxsZXJFZGl0YWJsZTogdW5kZWZpbmVkLFxuICBjbGFzc05hbWVCdXR0b25TdWJtaXQ6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lQnV0dG9uR3JvdXBBZGQ6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lQnV0dG9uR3JvdXBSZW1vdmU6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lQnV0dG9uc1N1Ym1pdENvbnRhaW5lcjogdW5kZWZpbmVkLFxuICBjbGFzc05hbWVCdXR0b25BcHByb3ZlRHJhZnRzOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZUJ1dHRvbkNsb3NlRHJhZnRzOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZURyYWZ0QnV0dG9uQ29udGFpbmVyOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZURyYWZ0Q3RhOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZURyYWZ0R3JvdXBDb250YWluZXI6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lRHJhZnRHcm91cFRpdGxlOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZURyYWZ0U2hlZXQ6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lRHJhZnRUb29sYmFyOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZUZpbGVVcGxvYWRDb250YWluZXI6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lRmlsZVVwbG9hZDogdW5kZWZpbmVkLFxuICBjbGFzc05hbWVGaWxlUHJldmlld0NvbnRhaW5lcjogdW5kZWZpbmVkLFxuICBjbGFzc05hbWVGaWxlVXBsb2FkVGV4dENvbnRhaW5lcjogdW5kZWZpbmVkLFxuICBjbGFzc05hbWVGaWxlUHJldmlld0ljb25XcmFwcGVyOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZUZpbGVVcGxvYWRCdXR0b246IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lRmlsZVVwbG9hZEljb246IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lRmlsZVVwbG9hZEljb25TZWNvbmQ6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lRmlsZVVwbG9hZEljb25Db250YWluZXI6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lRmlsZUxpc3RJdGVtOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZUZpbGVCdXR0b25EZWxldGU6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lRmlsZUxpc3RJdGVtQ29udGFpbmVyOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZUdyb3Vwc0NvbnRhaW5lcjogdW5kZWZpbmVkLFxuICBjbGFzc05hbWVHcm91cFByaWNlQ29udGFpbmVyOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZUlucHV0OiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZUlucHV0Q29udGFpbmVyOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZUludmVudG9yeVN0YXR1czogdW5kZWZpbmVkLFxuICBjbGFzc05hbWVPcHRpb25Db250YWluZXI6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lT3B0aW9uSW5wdXQ6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lT3B0aW9uTGFiZWw6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lT3B0aW9uU3VwZXI6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lT3B0aW9uc0NoZWNrYm94UmFkaW9Db250YWluZXI6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lT3B0aW9uSW1hZ2U6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lT3B0aW9uSW1hZ2VDb250YWluZXI6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lT3B0aW9uQ29sb3VyOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZU9wdGlvbkNvbG91ckNvbnRhaW5lcjogdW5kZWZpbmVkLFxuICBjbGFzc05hbWVQcm9kdWN0VGl0bGU6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lUHJvZHVjdE9yaWdpblRpdGxlOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZVByb2R1Y3RUb3RhbENvbnRhaW5lcjogdW5kZWZpbmVkLFxuICBjbGFzc05hbWVQcm9kdWN0VG90YWw6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lUXVhbnRpdHlMYWJlbENvbnRhaW5lcjogdW5kZWZpbmVkLFxuICBjbGFzc05hbWVVbml0UHJpY2U6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lUHJpY2VNYXRyaXg6IHVuZGVmaW5lZCxcbiAgY29udHJvbDoge30sXG4gIGN1cnJlbnRVc2VyOiB7fSxcbiAgZHJhZnRBcHByb3ZlQ2FsbGJhY2s6IG51bGwsXG4gIGdldFF1b3RlKCkgeyB9LFxuICBoY2FwdGNoYVNpdGVLZXk6IHVuZGVmaW5lZCxcbiAgcHJpY2luZ1J1bGVzOiB1bmRlZmluZWQsXG4gIGhpZGVDb3N0OiBmYWxzZSxcbiAgaGlkZUNvdW50cnk6IGZhbHNlLFxuICBoaWRlRG9tYWluTmFtZTogZmFsc2UsXG4gIGhpZGVDYWxjdWxhdGVkUHJpY2U6IGZhbHNlLFxuICBoaWRlUXVhbnRpdHlGaWVsZDogZmFsc2UsXG4gIGhpZGVSZXF1ZXN0UXVvdGF0aW9uQnV0dG9uOiBmYWxzZSxcbiAgaGlkZVBheW1lbnRVcGZyb250QnV0dG9uOiBmYWxzZSxcbiAgaGlkZVRpdGxlOiBmYWxzZSxcbiAgaG9va0Zvcm06IHt9IGFzIGFueSxcbiAgaXNDYXJ0SXRlbTogZmFsc2UsXG4gIGluaXRKb2I6IHVuZGVmaW5lZCxcbiAgaXNEcmFmdERlc2lnbmVyT3BlbjogZmFsc2UsXG4gIGlzRHJhZnRNb2RhbE9wZW46IGZhbHNlLFxuICBjb25zdW1lUGVuZGluZ0NoZWNrb3V0KCkgeyByZXR1cm4gbnVsbDsgfSxcbiAgam9iOiB7fSxcbiAgbG9hZGluZzogZmFsc2UsXG4gIGludmVudG9yeUxvYWRpbmc6IGZhbHNlLFxuICBvbkFkZFRvQ2FydCgpIHsgfSxcbiAgb25CdXlOb3coKSB7IH0sXG4gIG9uR2V0UXVvdGUoKSB7IH0sXG4gIG9uU3VibWl0KCkgeyB9LFxuICBwcm9kdWN0OiB7fSxcbiAgcHJvZHVjdEZvcm1JZDogdW5kZWZpbmVkLFxuICBzZXRDbGllbnQoKSB7IH0sXG4gIHNldElzRHJhZnREZXNpZ25lck9wZW4oKSB7IH0sXG4gIHNldElzRHJhZnRNb2RhbE9wZW4oKSB7IH0sXG4gIHNldEpvYihqb2IpIHsgfSxcbiAgc2V0TG9hZGluZyhsb2FkaW5nKSB7IH0sXG4gIHNob3dBbGVydChhbGVydCkgeyB9LFxuICBzaG93Q3VycmVuY3k6IGZhbHNlLFxuICBzaG93Q3VycmVuY3lDb2RlOiBmYWxzZSxcbiAgc2hvd0ZlYXR1cmVEZWFkbGluZTogZmFsc2UsXG4gIHNob3dHcm91cEJ1eVN0YXR1czogZmFsc2UsXG4gIHNob3dQcmljZU1hdHJpeDogdHJ1ZSxcbiAgc2hvd1VuaXRQcmljZTogZmFsc2UsXG59KTtcblxuZXhwb3J0IGNvbnN0IHVzZU1lcmNoaUZvcm1Db250ZXh0ID0gKCkgPT4gdXNlQ29udGV4dChNZXJjaGlQcm9kdWN0Rm9ybUNvbnRleHQpO1xuXG5leHBvcnQgY29uc3QgTWVyY2hpUHJvZHVjdEZvcm1Qcm92aWRlciA9ICh7XG4gIGFwaVVybCA9ICdodHRwczovL2FwaS5tZXJjaGkuY28vdjYvJyxcbiAgYWxsb3dBZGRUb0NhcnQsXG4gIGJ0bk5hbWVBZGRUb0NhcnQsXG4gIGNsYXNzTmFtZUFsZXJ0U2VsbGVyRWRpdGFibGUgPSAnYWxlcnQgYWxlcnQtbGlnaHQnLFxuICBjbGFzc05hbWVCdXR0b25TdWJtaXQgPSAnYnRuIGJ0bi1wcmltYXJ5IG1lcmNoaS1lbWJlZC1mb3JtX2J1dHRvbi1zdWJtaXQnLFxuICBjbGFzc05hbWVCdXR0b25Hcm91cEFkZCA9ICdidG4gYnRuLXdoaXRlJyxcbiAgY2xhc3NOYW1lQnV0dG9uR3JvdXBSZW1vdmUgPSAnYnRuIGJ0bi1kYW5nZXInLFxuICBjbGFzc05hbWVCdXR0b25zU3VibWl0Q29udGFpbmVyID0gJ21lcmNoaS1wcm9kdWN0LWJ1dHRvbnMtc3VibWl0LWNvbnRhaW5lcicsXG4gIGNsYXNzTmFtZUJ1dHRvbkFwcHJvdmVEcmFmdHMgPSAnYnRuIGJ0bi1zdWNjZXNzJyxcbiAgY2xhc3NOYW1lQnV0dG9uQ2xvc2VEcmFmdHMgPSAnYnRuIGJ0bi1zZWNvbmRhcnknLFxuICBjbGFzc05hbWVEcmFmdEJ1dHRvbkNvbnRhaW5lciA9ICdtZXJjaGktcHJvZHVjdC1kcmFmdC1idXR0b24tY29udGFpbmVyJyxcbiAgY2xhc3NOYW1lRHJhZnRDdGEgPSAnbWVyY2hpLXByb2R1Y3QtZHJhZnQtY3RhJyxcbiAgY2xhc3NOYW1lRHJhZnRHcm91cENvbnRhaW5lciA9ICdtZXJjaGktcHJvZHVjdC1kcmFmdC1ncm91cC1jb250YWluZXInLFxuICBjbGFzc05hbWVEcmFmdEdyb3VwVGl0bGUgPSAnbWVyY2hpLXByb2R1Y3QtZHJhZnQtZ3JvdXAtdGl0bGUnLFxuICBjbGFzc05hbWVEcmFmdFNoZWV0ID0gJ21lcmNoaS1wcm9kdWN0LWRyYWZ0LXNoZWV0JyxcbiAgY2xhc3NOYW1lRHJhZnRUb29sYmFyID0gJ21lcmNoaS1wcm9kdWN0LWRyYWZ0LXRvb2xiYXInLFxuICBjbGFzc05hbWVGaWxlVXBsb2FkQ29udGFpbmVyID0gJ21lcmNoaS1pbnB1dC1maWxlLWNvbnRhaW5lcicsXG4gIGNsYXNzTmFtZUZpbGVVcGxvYWQgPSAnbWVyY2hpLWVtYmVkLWZvcm1fZHJvcHpvbmUnLFxuICBjbGFzc05hbWVGaWxlUHJldmlld0NvbnRhaW5lciA9ICd1cGxvYWRlZC12YXJpYXRpb24tZmlsZScsXG4gIGNsYXNzTmFtZUZpbGVVcGxvYWRUZXh0Q29udGFpbmVyID0gJ21lcmNoaS1lbWJlZC1mb3JtX2Ryb3B6b25lLXRleHQtY29udGFpbmVyJyxcbiAgY2xhc3NOYW1lRmlsZVByZXZpZXdJY29uV3JhcHBlciA9ICd1cGxvYWRlZC12YXJpYXRpb24tZmlsZS1pY29uLXdyYXBwZXInLFxuICBjbGFzc05hbWVGaWxlVXBsb2FkQnV0dG9uID0gJ2J0biBidG4tc20gYnRuLWxpbmsgbWwtYXV0bycsXG4gIGNsYXNzTmFtZUZpbGVVcGxvYWRJY29uID0gJ21lcmNoaS1lbWJlZC1mb3JtX2Ryb3B6b25lLWljb24nLFxuICBjbGFzc05hbWVGaWxlVXBsb2FkSWNvblNlY29uZCA9ICdtZXJjaGktZW1iZWQtZm9ybV9kcm9wem9uZS1pY29uLXBsdXMnLFxuICBjbGFzc05hbWVGaWxlVXBsb2FkSWNvbkNvbnRhaW5lciA9ICdtZXJjaGktZW1iZWQtZm9ybV9kcm9wem9uZS1pY29uLWNvbnRhaW5lcicsXG4gIGNsYXNzTmFtZUZpbGVMaXN0SXRlbSA9ICdsaXN0LWdyb3VwLWl0ZW0gbm8tei1pbmRleC1ob3ZlcicsXG4gIGNsYXNzTmFtZUZpbGVCdXR0b25Eb3dubG9hZCA9ICdidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnknLFxuICBjbGFzc05hbWVGaWxlQnV0dG9uRGVsZXRlID0gJ2J0biBidG4tc20gYnRuLWRhbmdlciBtbC0yJyxcbiAgY2xhc3NOYW1lRmlsZUxpc3RJdGVtQ29udGFpbmVyID0gJ2xpc3QtZ3JvdXAnLFxuICBjbGFzc05hbWVHcm91cHNDb250YWluZXIgPSAnbWVyY2hpLWVtYmVkLWZvcm1fcHJvZHVjdC1ncm91cC1jb250YWluZXInLFxuICBjbGFzc05hbWVHcm91cFByaWNlQ29udGFpbmVyID0gJ21lcmNoaS1lbWJlZC1mb3JtX3Byb2R1Y3QtZ3JvdXAtdG90YWwtY29zdCcsXG4gIGNsYXNzTmFtZUlucHV0ID0gJ2Zvcm0tY29udHJvbCcsXG4gIGNsYXNzTmFtZUludmVudG9yeVN0YXR1cyA9ICdmbGV4LWZpbGwnLFxuICBjbGFzc05hbWVJbnB1dENvbnRhaW5lciA9ICdtZXJjaGktZW1iZWQtZm9ybV9wcm9kdWN0LWdyb3VwLWlucHV0LXF0eS1jb250YWluZXInLFxuICBjbGFzc05hbWVPcHRpb25Db250YWluZXIgPSAnbWVyY2hpLWVtYmVkLWZvcm1fY2hlY2tib3hfcmFkaW8taXRlbScsXG4gIGNsYXNzTmFtZU9wdGlvbklucHV0ID0gJ21lcmNoaS1lbWJlZC1mb3JtX2NoZWNrYm94X3JhZGlvLWlucHV0JyxcbiAgY2xhc3NOYW1lT3B0aW9uTGFiZWwgPSAnbWVyY2hpLWVtYmVkLWZvcm1fY2hlY2tib3hfcmFkaW8tbGFiZWwnLFxuICBjbGFzc05hbWVPcHRpb25TdXBlciA9ICdtZXJjaGktZW1iZWQtZm9ybV9jaGVja2JveF9yYWRpby1zdXBlcicsXG4gIGNsYXNzTmFtZU9wdGlvbnNDaGVja2JveFJhZGlvQ29udGFpbmVyID0gJycsXG4gIGNsYXNzTmFtZU9wdGlvbkltYWdlID0gJ21lcmNoaS1lbWJlZC1mb3JtX2ltYWdlLXNlbGVjdC1vcHRpb24taXRlbS1pbWcnLFxuICBjbGFzc05hbWVPcHRpb25JbWFnZUNvbnRhaW5lciA9ICdtZXJjaGktZW1iZWQtZm9ybV9pbWFnZS1zZWxlY3Qtb3B0aW9uLWl0ZW0tY29udGFpbmVyJyxcbiAgY2xhc3NOYW1lT3B0aW9uQ29sb3VyID0gJ21lcmNoaS1lbWJlZC1mb3JtX2NvbG9yLXNlbGVjdC1vcHRpb24nLFxuICBjbGFzc05hbWVPcHRpb25Db2xvdXJDb250YWluZXIgPSAnbWVyY2hpLWVtYmVkLWZvcm1fY29sb3Itc2VsZWN0LWl0ZW0nLFxuICBjbGFzc05hbWVQcm9kdWN0VGl0bGUgPSAnbWVyY2hpLXByb2R1Y3QtdGl0bGUnLFxuICBjbGFzc05hbWVQcm9kdWN0T3JpZ2luVGl0bGUgPSAnbWVyY2hpLXByb2R1Y3Qtb3JpZ2luLXRpdGxlJyxcbiAgY2xhc3NOYW1lUHJvZHVjdFRvdGFsID0gJ21lcmNoaS1lbWJlZC1mb3JtX3N1bW1hcnktcHJvZHVjdC1jb3N0JyxcbiAgY2xhc3NOYW1lUHJvZHVjdFRvdGFsQ29udGFpbmVyID0gJ21lcmNoaS1lbWJlZC1mb3JtX3N1bW1hcnktcHJvZHVjdC1jb3N0LWNvbnRhaW5lcicsXG4gIGNsYXNzTmFtZVF1YW50aXR5TGFiZWxDb250YWluZXIgPSAnbWVyY2hpLWVtYmVkLWZvcm1fcXVhbnRpdHktbGFiZWwtY29udGFpbmVyJyxcbiAgY2xhc3NOYW1lVW5pdFByaWNlLFxuICBjbGFzc05hbWVQcmljZU1hdHJpeCxcbiAgY2hpbGRyZW4sXG4gIGN1cnJlbnRVc2VyLFxuICBoY2FwdGNoYVNpdGVLZXksXG4gIGhpZGVDb3N0LFxuICBoaWRlQ291bnRyeSA9IGZhbHNlLFxuICBoaWRlQ2FsY3VsYXRlZFByaWNlLFxuICBoaWRlRG9tYWluTmFtZSA9IGZhbHNlLFxuICBoaWRlUXVhbnRpdHlGaWVsZCxcbiAgaGlkZVJlcXVlc3RRdW90YXRpb25CdXR0b24sXG4gIGhpZGVQYXltZW50VXBmcm9udEJ1dHRvbixcbiAgaGlkZVRpdGxlID0gZmFsc2UsXG4gIGlzQ2FydEl0ZW0sXG4gIGluaXRKb2IsXG4gIGluaXRQcm9kdWN0LFxuICBwcmljaW5nUnVsZXM6IHByaWNpbmdSdWxlc1Byb3AsXG4gIG9uQWRkVG9DYXJ0LFxuICBvbkJ1eU5vdyxcbiAgb25HZXRRdW90ZSxcbiAgb25TdWJtaXQsXG4gIHByb2R1Y3RGb3JtSWQsXG4gIHNob3dDdXJyZW5jeSxcbiAgc2hvd0N1cnJlbmN5Q29kZSxcbiAgc2hvd0ZlYXR1cmVEZWFkbGluZSxcbiAgc2hvd0dyb3VwQnV5U3RhdHVzLFxuICBzaG93UHJpY2VNYXRyaXggPSB0cnVlLFxuICBzaG93VW5pdFByaWNlLFxufToge1xuICBhcGlVcmw/OiBzdHJpbmc7XG4gIGFsbG93QWRkVG9DYXJ0PzogYm9vbGVhbjtcbiAgYnRuTmFtZUFkZFRvQ2FydD86IHN0cmluZztcbiAgY2xhc3NOYW1lQWxlcnRTZWxsZXJFZGl0YWJsZT86IHN0cmluZztcbiAgY2xhc3NOYW1lQnV0dG9uU3VibWl0Pzogc3RyaW5nO1xuICBjbGFzc05hbWVCdXR0b25Hcm91cEFkZD86IHN0cmluZztcbiAgY2xhc3NOYW1lQnV0dG9uR3JvdXBSZW1vdmU/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUJ1dHRvbnNTdWJtaXRDb250YWluZXI/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUJ1dHRvbkFwcHJvdmVEcmFmdHM/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUJ1dHRvbkNsb3NlRHJhZnRzPzogc3RyaW5nO1xuICBjbGFzc05hbWVEcmFmdEJ1dHRvbkNvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lRHJhZnRDdGE/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZURyYWZ0R3JvdXBDb250YWluZXI/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZURyYWZ0R3JvdXBUaXRsZT86IHN0cmluZztcbiAgY2xhc3NOYW1lRHJhZnRTaGVldD86IHN0cmluZztcbiAgY2xhc3NOYW1lRHJhZnRUb29sYmFyPzogc3RyaW5nO1xuICBjbGFzc05hbWVGaWxlVXBsb2FkQ29udGFpbmVyPzogc3RyaW5nO1xuICBjbGFzc05hbWVGaWxlVXBsb2FkPzogc3RyaW5nO1xuICBjbGFzc05hbWVGaWxlUHJldmlld0NvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lRmlsZVVwbG9hZFRleHRDb250YWluZXI/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUZpbGVQcmV2aWV3SWNvbldyYXBwZXI/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUZpbGVVcGxvYWRCdXR0b24/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUZpbGVVcGxvYWRJY29uPzogc3RyaW5nO1xuICBjbGFzc05hbWVGaWxlVXBsb2FkSWNvblNlY29uZD86IHN0cmluZztcbiAgY2xhc3NOYW1lRmlsZVVwbG9hZEljb25Db250YWluZXI/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUZpbGVMaXN0SXRlbT86IHN0cmluZztcbiAgY2xhc3NOYW1lRmlsZUJ1dHRvbkRvd25sb2FkPzogc3RyaW5nO1xuICBjbGFzc05hbWVGaWxlQnV0dG9uRGVsZXRlPzogc3RyaW5nO1xuICBjbGFzc05hbWVGaWxlTGlzdEl0ZW1Db250YWluZXI/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUdyb3Vwc0NvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lR3JvdXBQcmljZUNvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lSW5wdXQ/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUlucHV0Q29udGFpbmVyPzogc3RyaW5nO1xuICBjbGFzc05hbWVJbnZlbnRvcnlTdGF0dXM/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZU9wdGlvbkNvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lT3B0aW9uSW5wdXQ/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZU9wdGlvbkxhYmVsPzogc3RyaW5nO1xuICBjbGFzc05hbWVPcHRpb25TdXBlcj86IHN0cmluZztcbiAgY2xhc3NOYW1lT3B0aW9uc0NoZWNrYm94UmFkaW9Db250YWluZXI/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZU9wdGlvbkltYWdlPzogc3RyaW5nO1xuICBjbGFzc05hbWVPcHRpb25JbWFnZUNvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lT3B0aW9uQ29sb3VyPzogc3RyaW5nO1xuICBjbGFzc05hbWVQcm9kdWN0VGl0bGU/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZVByb2R1Y3RPcmlnaW5UaXRsZT86IHN0cmluZztcbiAgY2xhc3NOYW1lUHJvZHVjdFRvdGFsQ29udGFpbmVyPzogc3RyaW5nO1xuICBjbGFzc05hbWVQcm9kdWN0VG90YWw/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZU9wdGlvbkNvbG91ckNvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lUXVhbnRpdHlMYWJlbENvbnRhaW5lcj86IHN0cmluZztcbiAgY2xhc3NOYW1lVW5pdFByaWNlPzogc3RyaW5nO1xuICBjbGFzc05hbWVQcmljZU1hdHJpeD86IHN0cmluZztcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY3VycmVudFVzZXI/OiBhbnk7XG4gIGhjYXB0Y2hhU2l0ZUtleT86IHN0cmluZztcbiAgaGlkZUNhbGN1bGF0ZWRQcmljZT86IGJvb2xlYW47XG4gIGhpZGVDb3N0PzogYm9vbGVhbjtcbiAgaGlkZUNvdW50cnk/OiBib29sZWFuO1xuICBoaWRlRG9tYWluTmFtZT86IGJvb2xlYW47XG4gIGhpZGVRdWFudGl0eUZpZWxkPzogYm9vbGVhbjtcbiAgaGlkZVJlcXVlc3RRdW90YXRpb25CdXR0b24/OiBib29sZWFuO1xuICBoaWRlUGF5bWVudFVwZnJvbnRCdXR0b24/OiBib29sZWFuO1xuICBoaWRlVGl0bGU/OiBib29sZWFuO1xuICBpc0NhcnRJdGVtPzogYm9vbGVhbjtcbiAgaW5pdEpvYj86IGFueTtcbiAgaW5pdFByb2R1Y3Q6IGFueTtcbiAgcHJpY2luZ1J1bGVzPzogYW55O1xuICBvbkFkZFRvQ2FydD86IChqb2I6IGFueSkgPT4gdm9pZDtcbiAgb25CdXlOb3c/OiAoam9iOiBhbnkpID0+IHZvaWQ7XG4gIG9uR2V0UXVvdGU/OiAoam9iOiBhbnkpID0+IHZvaWQ7XG4gIG9uU3VibWl0PzogKGpvYjogYW55KSA9PiB2b2lkO1xuICBwcm9kdWN0Rm9ybUlkPzogc3RyaW5nO1xuICBzaG93Q3VycmVuY3k/OiBib29sZWFuO1xuICBzaG93Q3VycmVuY3lDb2RlPzogYm9vbGVhbjtcbiAgc2hvd0ZlYXR1cmVEZWFkbGluZT86IGJvb2xlYW47XG4gIHNob3dHcm91cEJ1eVN0YXR1cz86IGJvb2xlYW47XG4gIHNob3dQcmljZU1hdHJpeD86IGJvb2xlYW47XG4gIHNob3dVbml0UHJpY2U/OiBib29sZWFuO1xufSkgPT4ge1xuICBjb25zdCBwcm9kdWN0ID0gc2FuaXRpemVQcm9kdWN0VmFyaWF0aW9uRmllbGRzKGluaXRQcm9kdWN0KTtcbiAgY29uc3QgZGVmYXVsdEpvYiA9IGxpZnRJbmRlcGVuZGVudFZhcmlhdGlvbnNGcm9tR3JvdXBzKFxuICAgIGluaXRKb2IgfHwgcHJvZHVjdC5kZWZhdWx0Sm9iIHx8IHt9LFxuICAgIHByb2R1Y3RcbiAgKTtcbiAgY29uc3QgaG9va0Zvcm0gPSB1c2VGb3JtKHtcbiAgICBkZWZhdWx0VmFsdWVzOiBkZWZhdWx0Sm9iLFxuICAgIC8vIFJlLWNoZWNrIHJ1bGVzIGFzIHRoZSB1c2VyIGVkaXRzIGFmdGVyIHRoZSBmaXJzdCB2YWxpZGF0aW9uIGF0dGVtcHQuXG4gICAgcmVWYWxpZGF0ZU1vZGU6ICdvbkNoYW5nZScsXG4gIH0pO1xuICBjb25zdCBbY2xpZW50LCBzZXRDbGllbnRdID0gdXNlU3RhdGUoY3VycmVudFVzZXIpO1xuICBjb25zdCBbYWxlcnQsIHNob3dBbGVydF0gPSB1c2VTdGF0ZSgobnVsbCBhcyBhbnkpKTtcbiAgY29uc3QgW2RyYWZ0QXBwcm92ZUNhbGxiYWNrLCBzZXREcmFmdEFwcHByb3ZlQ2FsbGJhY2tdID0gdXNlU3RhdGU8KChqb2I6IGFueSkgPT4gUHJvbWlzZTx2b2lkPikgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2pvYiwgc2V0Sm9iXSA9IHVzZVN0YXRlPGFueT4oZGVmYXVsdEpvYik7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2ludmVudG9yeUxvYWRpbmcsIHNldEludmVudG9yeUxvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCB7IGNvbnRyb2wsIGdldFZhbHVlcywgaGFuZGxlU3VibWl0LCByZXNldCwgdHJpZ2dlciB9ID0gaG9va0Zvcm07XG4gIGNvbnN0IGRvU3VibWl0ID0gb25TdWJtaXRcbiAgICA/IGhhbmRsZVN1Ym1pdChvblN1Ym1pdCwgKCkgPT4ge1xuICAgICAgICBzY3JvbGxUb0ZpcnN0Rm9ybUVycm9yKCk7XG4gICAgICB9KVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIC8qKiBSdW4gZmllbGQgcnVsZXMgKGluY2x1ZGluZyBNT1EpIGJlZm9yZSBidXkgLyBjYXJ0IC8gcXVvdGUgYWN0aW9ucy4gKi9cbiAgY29uc3QgdmFsaWRhdGVGb3JtID0gYXN5bmMgKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGNvbnN0IHZhbGlkID0gYXdhaXQgdHJpZ2dlcigpO1xuICAgIGlmICghdmFsaWQpIHtcbiAgICAgIHNjcm9sbFRvRmlyc3RGb3JtRXJyb3IoKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkO1xuICB9O1xuXG4gIGNvbnN0IHRhZ3MgPSBnZXRNZXJjaGlTb3VyY2VKb2JUYWdzKCk7XG5cbiAgY29uc3QgaW52ZW50b3J5UmVmcmVzaFRpbWVyID0gUmVhY3QudXNlUmVmPGFueT4obnVsbCk7XG4gIGNvbnN0IHNlcnZlclF1b3RlVGltZXIgPSBSZWFjdC51c2VSZWY8YW55PihudWxsKTtcbiAgY29uc3QgcXVvdGVSZXF1ZXN0SWQgPSBSZWFjdC51c2VSZWYoMCk7XG4gIGNvbnN0IFNFUlZFUl9RVU9URV9ERUJPVU5DRV9NUyA9IDEwMDA7XG5cbiAgLy8gQ2xpZW50LXNpZGUgcXVvdGluZyBpcyBkcml2ZW4gc29sZWx5IGJ5IHRoZSBwcm9kdWN0J3MgY2xpZW50U2lkZUNhbGN1bGF0aW9uXG4gIC8vIGF0dHJpYnV0ZSAoc2V0IGJ5IHRoZSBtYW5hZ2VyKS4gSXQgaXMgdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGguXG4gIGNvbnN0IGNsaWVudFNpZGVFbmFibGVkID0gQm9vbGVhbihpbml0UHJvZHVjdD8uY2xpZW50U2lkZUNhbGN1bGF0aW9uKTtcblxuICAvLyBGZXRjaCBwcmljaW5nLXJ1bGVzIGZvciBjbGllbnQtc2lkZSBxdW90aW5nIGFuZCB0aGUgYnVsayBwcmljZSB0YWJsZS5cbiAgLy8gQSBgcHJpY2luZ1J1bGVzYCBwcm9wLCBpZiBzdXBwbGllZCwgb3ZlcnJpZGVzIHRoZSBmZXRjaC5cbiAgY29uc3QgW2ZldGNoZWRQcmljaW5nUnVsZXMsIHNldEZldGNoZWRQcmljaW5nUnVsZXNdID0gdXNlU3RhdGU8YW55PihudWxsKTtcbiAgY29uc3QgcHJpY2luZ1J1bGVzID0gcHJpY2luZ1J1bGVzUHJvcCB8fCBmZXRjaGVkUHJpY2luZ1J1bGVzO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgKCFjbGllbnRTaWRlRW5hYmxlZCAmJiAhc2hvd1ByaWNlTWF0cml4KSB8fFxuICAgICAgcHJpY2luZ1J1bGVzUHJvcCB8fFxuICAgICAgIWluaXRQcm9kdWN0Py5pZFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJhc2UgPSBhcGlVcmwuZW5kc1dpdGgoJy8nKSA/IGFwaVVybCA6IGAke2FwaVVybH0vYDtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7YmFzZX1wcm9kdWN0cy8ke2luaXRQcm9kdWN0LmlkfS9wcmljaW5nLXJ1bGVzL2ApO1xuICAgICAgICBpZiAoIXJlcy5vaykgcmV0dXJuO1xuICAgICAgICBjb25zdCBydWxlcyA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAgIGlmICghY2FuY2VsbGVkKSBzZXRGZXRjaGVkUHJpY2luZ1J1bGVzKHJ1bGVzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gQmVzdC1lZmZvcnQ6IGZvcm0gZmFsbHMgYmFjayB0byBzZXJ2ZXItc2lkZSBxdW90aW5nIG9uIGZhaWx1cmUuXG4gICAgICB9XG4gICAgfSkoKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICB9O1xuICB9LCBbY2xpZW50U2lkZUVuYWJsZWQsIHNob3dQcmljZU1hdHJpeCwgcHJpY2luZ1J1bGVzUHJvcCwgaW5pdFByb2R1Y3Q/LmlkLCBhcGlVcmxdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4gKCkgPT4ge1xuICAgIGlmIChzZXJ2ZXJRdW90ZVRpbWVyLmN1cnJlbnQpIHtcbiAgICAgIGNsZWFyVGltZW91dChzZXJ2ZXJRdW90ZVRpbWVyLmN1cnJlbnQpO1xuICAgIH1cbiAgfSwgW10pO1xuXG4gIGZ1bmN0aW9uIHZhcmlhdGlvbnNIYXZlRmllbGRNZXRhZGF0YShqb2JWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNoZWNrID0gKHZhcmlhdGlvbnM6IGFueVtdIHwgdW5kZWZpbmVkKSA9PlxuICAgICAgIUFycmF5LmlzQXJyYXkodmFyaWF0aW9ucykgfHxcbiAgICAgIHZhcmlhdGlvbnMuZXZlcnkoKHZhcmlhdGlvbikgPT4gdmFyaWF0aW9uPy52YXJpYXRpb25GaWVsZD8uZmllbGRUeXBlICE9IG51bGwpO1xuICAgIGlmICghY2hlY2soam9iVmFsdWVzPy52YXJpYXRpb25zKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGpvYlZhbHVlcz8udmFyaWF0aW9uc0dyb3VwcykpIHtcbiAgICAgIHJldHVybiBqb2JWYWx1ZXMudmFyaWF0aW9uc0dyb3Vwcy5ldmVyeSgoZ3JvdXA6IGFueSkgPT5cbiAgICAgICAgY2hlY2soZ3JvdXA/LnZhcmlhdGlvbnMpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5T3B0aW9uVmlzaWJpbGl0eShcbiAgICB2YXJpYXRpb25zOiBhbnlbXSxcbiAgICB2aXNpYmxlT3B0aW9uSWRzOiBTZXQ8bnVtYmVyPixcbiAgICB1bmF2YWlsYWJsZU9wdGlvbklkczogU2V0PG51bWJlcj5cbiAgKTogYm9vbGVhbiB7XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICAodmFyaWF0aW9ucyB8fCBbXSkuZm9yRWFjaCgodmFyaWF0aW9uOiBhbnkpID0+IHtcbiAgICAgICh2YXJpYXRpb24uc2VsZWN0YWJsZU9wdGlvbnMgfHwgW10pLmZvckVhY2goKG9wdGlvbjogYW55KSA9PiB7XG4gICAgICAgIC8vIE1pcnJvciB0aGUgc2VydmVyJ3MgcGVyLW9wdGlvbiBpc1Zpc2libGUgKHNlbGVjdGVkQnkgcmVzb2x1dGlvbikuXG4gICAgICAgIGNvbnN0IGlzVmlzaWJsZSA9IHZpc2libGVPcHRpb25JZHMuaGFzKG9wdGlvbi5vcHRpb25JZCk7XG4gICAgICAgIGlmIChvcHRpb24uaXNWaXNpYmxlICE9PSBpc1Zpc2libGUpIHtcbiAgICAgICAgICBvcHRpb24uaXNWaXNpYmxlID0gaXNWaXNpYmxlO1xuICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIENvbWJpbmF0aW9uLWF3YXJlIGF2YWlsYWJpbGl0eTogYW4gb3B0aW9uIGlzIHVuYXZhaWxhYmxlIHdoZW4gdGhlXG4gICAgICAgIC8vIGNvbWJpbmF0aW9uIG9mIChjdXJyZW50IGludmVudG9yeSBzZWxlY3Rpb25zICsgdGhpcyBvcHRpb24pIGhhcyBub1xuICAgICAgICAvLyBtYXRjaGluZyBzdG9jay4gTm9uLWludmVudG9yeSBwcm9kdWN0cyB5aWVsZCBhbiBlbXB0eSBzZXQgLT4gYWxsXG4gICAgICAgIC8vIGF2YWlsYWJsZS5cbiAgICAgICAgY29uc3QgYXZhaWxhYmxlID0gIXVuYXZhaWxhYmxlT3B0aW9uSWRzLmhhcyhvcHRpb24ub3B0aW9uSWQpO1xuICAgICAgICBpZiAob3B0aW9uLmF2YWlsYWJsZSAhPT0gYXZhaWxhYmxlKSB7XG4gICAgICAgICAgb3B0aW9uLmF2YWlsYWJsZSA9IGF2YWlsYWJsZTtcbiAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNoYW5nZWQ7XG4gIH1cblxuICAvLyBGb3IgaW52ZW50b3J5LWxpbWl0ZWQgcHJvZHVjdHMsIHJlZnJlc2ggcXVhbnRpdHktZGVwZW5kZW50IGludmVudG9yeVxuICAvLyAoZ3JvdXAgaW52ZW50b3J5Q291bnQvaW52ZW50b3J5U3VmZmljaWVudCkgZnJvbSB0aGUgYXV0aG9yaXRhdGl2ZSBzZXJ2ZXIgaW5cbiAgLy8gdGhlIGJhY2tncm91bmQsIGRlYm91bmNlZCwgYW5kIG1lcmdlIGl0IHRocm91Z2ggc2V0Sm9iICh3aGljaCByZW5kZXJzXG4gIC8vIHdpdGhvdXQgYSBmb3JtIHJlc2V0LCBzbyB0aGUgdmlld3BvcnQgbmV2ZXIganVtcHMpLiBUaGUgY2xpZW50IHByaWNlIHN0YXlzXG4gIC8vIGluc3RhbnQ7IHRoZSBpbnZlbnRvcnkgYmFkZ2UgY2F0Y2hlcyB1cCBhIGJlYXQgbGF0ZXIuXG4gIGZ1bmN0aW9uIHJlc2V0Rm9ybVByZXNlcnZpbmdTY3JvbGwodmFsdWVzOiBhbnkpIHtcbiAgICBjb25zdCBoYXNXaW5kb3cgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbiAgICBjb25zdCBzY3JvbGxQYXJlbnQgPSBmaW5kU2Nyb2xsUGFyZW50KCk7XG4gICAgY29uc3Qgc2Nyb2xsWCA9IGhhc1dpbmRvdyA/IHdpbmRvdy5zY3JvbGxYIDogMDtcbiAgICBjb25zdCBzY3JvbGxZID0gaGFzV2luZG93ID8gd2luZG93LnNjcm9sbFkgOiAwO1xuICAgIGNvbnN0IHBhcmVudFRvcCA9IHNjcm9sbFBhcmVudCA/IHNjcm9sbFBhcmVudC5zY3JvbGxUb3AgOiAwO1xuICAgIGNvbnN0IHBhcmVudExlZnQgPSBzY3JvbGxQYXJlbnQgPyBzY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCA6IDA7XG4gICAgcmVzZXQodmFsdWVzKTtcbiAgICBpZiAoaGFzV2luZG93ICYmIHR5cGVvZiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgaWYgKHNjcm9sbFBhcmVudCkge1xuICAgICAgICAgIHNjcm9sbFBhcmVudC5zY3JvbGxUb3AgPSBwYXJlbnRUb3A7XG4gICAgICAgICAgc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQgPSBwYXJlbnRMZWZ0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbyhzY3JvbGxYLCBzY3JvbGxZKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZmluZFNjcm9sbFBhcmVudCgpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBhY3RpdmUgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBsZXQgbm9kZTogSFRNTEVsZW1lbnQgfCBudWxsID0gYWN0aXZlO1xuICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgIGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSk7XG4gICAgICBjb25zdCBjYW5TY3JvbGxZID1cbiAgICAgICAgKHN0eWxlLm92ZXJmbG93WSA9PT0gJ2F1dG8nIHx8IHN0eWxlLm92ZXJmbG93WSA9PT0gJ3Njcm9sbCcpICYmXG4gICAgICAgIG5vZGUuc2Nyb2xsSGVpZ2h0ID4gbm9kZS5jbGllbnRIZWlnaHQ7XG4gICAgICBpZiAoY2FuU2Nyb2xsWSkgcmV0dXJuIG5vZGU7XG4gICAgICAvLyBSYWRpeCBTY3JvbGxBcmVhIHZpZXdwb3J0XG4gICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2xvdCcpID09PSAnc2Nyb2xsLWFyZWEtdmlld3BvcnQnKSByZXR1cm4gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuICAgIGNvbnN0IHZpZXdwb3J0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICdbZGF0YS1zbG90PVwiZGlhbG9nLWNvbnRlbnRcIl0gW2RhdGEtc2xvdD1cInNjcm9sbC1hcmVhLXZpZXdwb3J0XCJdJ1xuICAgICkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIHJldHVybiB2aWV3cG9ydDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1RdWFudGl0aWVzTWF0Y2hSZXF1ZXN0KFxuICAgIGZvcm1WYWx1ZXM6IGFueSxcbiAgICByZXF1ZXN0RGF0YTogYW55LFxuICAgIHByb2R1Y3Q6IGFueVxuICApOiBib29sZWFuIHtcbiAgICBpZiAocHJvZHVjdEhhc0dyb3Vwcyhwcm9kdWN0KSkge1xuICAgICAgY29uc3QgZ3JvdXBzID0gcmVxdWVzdERhdGEudmFyaWF0aW9uc0dyb3VwcyB8fCBbXTtcbiAgICAgIHJldHVybiBncm91cHMuZXZlcnkoKGdyb3VwOiBhbnksIGluZGV4OiBudW1iZXIpID0+XG4gICAgICAgIE51bWJlcihncm91cC5xdWFudGl0eSkgPT09IE51bWJlcihmb3JtVmFsdWVzLnZhcmlhdGlvbnNHcm91cHM/LltpbmRleF0/LnF1YW50aXR5KVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIE51bWJlcihyZXF1ZXN0RGF0YS5xdWFudGl0eSkgPT09IE51bWJlcihmb3JtVmFsdWVzLnF1YW50aXR5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5U2VydmVyUXVvdGUoZm9ybVZhbHVlczogYW55LCBzZXJ2ZXJKb2I6IGFueSkge1xuICAgIGNvbnN0IGNsZWFuZWRGb3JtVmFsdWVzID0gY2xlYW5Kb2JWYXJpYXRpb25zQW5kR3JvdXBzKHsgLi4uZm9ybVZhbHVlcyB9KTtcbiAgICAvLyBBZG9wdCBmaWVsZHMgdGhlIHNlcnZlciBhZGRlZC9yZW1vdmVkIHZpYSBmaWxsX2R5bmFtaWNfdmFyaWF0aW9ucywgd2hpbGVcbiAgICAvLyBwcmVzZXJ2aW5nIHRoZSB1c2VyJ3MgaW4tcHJvZ3Jlc3MgdmFsdWVzIChxdWFudGl0eSBlZGl0cywgc2VsZWN0aW9ucykuXG4gICAgLy8gTWF0Y2ggYnkgdmFyaWF0aW9uRmllbGQuaWQgLyBvcHRpb25JZCDigJQgaW5kZXggc3luYyBicmVha3Mgd2hlbiB0aGVcbiAgICAvLyBjb25kaXRpb25hbCBmaWVsZCBsaXN0IGNoYW5nZXMgbGVuZ3RoIG9yIG9yZGVyLlxuICAgIGNvbnN0IGluZGVwZW5kZW50UmVjb25jaWxlID0gcmVjb25jaWxlVmFyaWF0aW9ucyhcbiAgICAgIGNsZWFuZWRGb3JtVmFsdWVzLnZhcmlhdGlvbnMsXG4gICAgICBzZXJ2ZXJKb2IudmFyaWF0aW9uc1xuICAgICk7XG4gICAgbGV0IHZpc2liaWxpdHlDaGFuZ2VkID0gaW5kZXBlbmRlbnRSZWNvbmNpbGUudmlzaWJpbGl0eUNoYW5nZWQ7XG4gICAgY29uc3QgbWVyZ2VkSm9iOiBhbnkgPSB7XG4gICAgICAuLi5jbGVhbmVkRm9ybVZhbHVlcyxcbiAgICAgIHZhcmlhdGlvbnM6IGluZGVwZW5kZW50UmVjb25jaWxlLnZhcmlhdGlvbnMsXG4gICAgICBjb3N0OiBzZXJ2ZXJKb2IuY29zdCxcbiAgICAgIGNvc3RQZXJVbml0OiBzZXJ2ZXJKb2IuY29zdFBlclVuaXQsXG4gICAgICB0YXhBbW91bnQ6IHNlcnZlckpvYi50YXhBbW91bnQsXG4gICAgICB0b3RhbENvc3Q6IHNlcnZlckpvYi50b3RhbENvc3QsXG4gICAgICBjdXJyZW5jeTogc2VydmVySm9iLmN1cnJlbmN5LFxuICAgICAgaW52ZW50b3J5Q291bnQ6IHNlcnZlckpvYi5pbnZlbnRvcnlDb3VudCxcbiAgICAgIGludmVudG9yeVN1ZmZpY2llbnQ6IHNlcnZlckpvYi5pbnZlbnRvcnlTdWZmaWNpZW50LFxuICAgIH07XG4gICAgaWYgKFxuICAgICAgQXJyYXkuaXNBcnJheShjbGVhbmVkRm9ybVZhbHVlcy52YXJpYXRpb25zR3JvdXBzKVxuICAgICAgJiYgQXJyYXkuaXNBcnJheShzZXJ2ZXJKb2IudmFyaWF0aW9uc0dyb3VwcylcbiAgICApIHtcbiAgICAgIG1lcmdlZEpvYi52YXJpYXRpb25zR3JvdXBzID0gY2xlYW5lZEZvcm1WYWx1ZXMudmFyaWF0aW9uc0dyb3Vwcy5tYXAoXG4gICAgICAgIChncm91cDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2VydmVyR3JvdXAgPSBzZXJ2ZXJKb2IudmFyaWF0aW9uc0dyb3Vwc1tpbmRleF07XG4gICAgICAgICAgaWYgKCFzZXJ2ZXJHcm91cCkgcmV0dXJuIGdyb3VwO1xuICAgICAgICAgIGNvbnN0IGdyb3VwUmVjb25jaWxlID0gcmVjb25jaWxlVmFyaWF0aW9ucyhcbiAgICAgICAgICAgIGdyb3VwLnZhcmlhdGlvbnMsXG4gICAgICAgICAgICBzZXJ2ZXJHcm91cC52YXJpYXRpb25zXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZ3JvdXBSZWNvbmNpbGUudmlzaWJpbGl0eUNoYW5nZWQpIHtcbiAgICAgICAgICAgIHZpc2liaWxpdHlDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmdyb3VwLFxuICAgICAgICAgICAgdmFyaWF0aW9uczogZ3JvdXBSZWNvbmNpbGUudmFyaWF0aW9ucyxcbiAgICAgICAgICAgIGdyb3VwQ29zdDogc2VydmVyR3JvdXAuZ3JvdXBDb3N0LFxuICAgICAgICAgICAgaW52ZW50b3J5Q291bnQ6IHNlcnZlckdyb3VwLmludmVudG9yeUNvdW50LFxuICAgICAgICAgICAgaW52ZW50b3J5U3VmZmljaWVudDogc2VydmVyR3JvdXAuaW52ZW50b3J5U3VmZmljaWVudCxcbiAgICAgICAgICAgIG1hdGNoaW5nSW52ZW50b3JpZXM6IHNlcnZlckdyb3VwLm1hdGNoaW5nSW52ZW50b3JpZXMsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgbWVyZ2VkSm9iLCB2aXNpYmlsaXR5Q2hhbmdlZCB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbWVyZ2VJbnZlbnRvcnkocHJldjogYW55LCBzZXJ2ZXJKb2I6IGFueSkge1xuICAgIGlmICghcHJldikgcmV0dXJuIHByZXY7XG4gICAgY29uc3QgbWVyZ2VkOiBhbnkgPSB7XG4gICAgICAuLi5wcmV2LFxuICAgICAgaW52ZW50b3J5Q291bnQ6IHNlcnZlckpvYi5pbnZlbnRvcnlDb3VudCxcbiAgICAgIGludmVudG9yeVN1ZmZpY2llbnQ6IHNlcnZlckpvYi5pbnZlbnRvcnlTdWZmaWNpZW50LFxuICAgIH07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJldi52YXJpYXRpb25zR3JvdXBzKSAmJiBBcnJheS5pc0FycmF5KHNlcnZlckpvYi52YXJpYXRpb25zR3JvdXBzKSkge1xuICAgICAgbWVyZ2VkLnZhcmlhdGlvbnNHcm91cHMgPSBwcmV2LnZhcmlhdGlvbnNHcm91cHMubWFwKChnOiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBzZyA9IHNlcnZlckpvYi52YXJpYXRpb25zR3JvdXBzW2ldO1xuICAgICAgICBpZiAoIXNnKSByZXR1cm4gZztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5nLFxuICAgICAgICAgIGludmVudG9yeUNvdW50OiBzZy5pbnZlbnRvcnlDb3VudCxcbiAgICAgICAgICBpbnZlbnRvcnlTdWZmaWNpZW50OiBzZy5pbnZlbnRvcnlTdWZmaWNpZW50LFxuICAgICAgICAgIG1hdGNoaW5nSW52ZW50b3JpZXM6IHNnLm1hdGNoaW5nSW52ZW50b3JpZXMsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNjaGVkdWxlSW52ZW50b3J5UmVmcmVzaChjbGVhbmVkVmFsdWVzOiBhbnkpIHtcbiAgICBpZiAoIXByaWNpbmdSdWxlcyB8fCAhcHJpY2luZ1J1bGVzLm5lZWRzSW52ZW50b3J5KSByZXR1cm47XG4gICAgaWYgKGludmVudG9yeVJlZnJlc2hUaW1lci5jdXJyZW50KSB7XG4gICAgICBjbGVhclRpbWVvdXQoaW52ZW50b3J5UmVmcmVzaFRpbWVyLmN1cnJlbnQpO1xuICAgIH1cbiAgICAvLyBTaG93IHRoZSBsb2FkaW5nIHN0YXRlIGluIHRoZSBpbnZlbnRvcnkgcGlsbHMgZnJvbSB0aGUgbW9tZW50IGEgY2hhbmdlIGlzXG4gICAgLy8gbWFkZSB1bnRpbCB0aGUgYXV0aG9yaXRhdGl2ZSBzdG9jayBjb21lcyBiYWNrIChjb3ZlcnMgdGhlIGRlYm91bmNlIHdhaXRcbiAgICAvLyBhbmQgdGhlIHJlcXVlc3QpLiBUaGlzIGlzIHNlcGFyYXRlIGZyb20gYGxvYWRpbmdgIHNvIHRoZSBpbnN0YW50IGNsaWVudFxuICAgIC8vIHByaWNlIG5ldmVyIGZsaWNrZXJzIHRvIGEgc3Bpbm5lci5cbiAgICBzZXRJbnZlbnRvcnlMb2FkaW5nKHRydWUpO1xuICAgIGludmVudG9yeVJlZnJlc2hUaW1lci5jdXJyZW50ID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBsZXQgZGF0YSA9IHsgLi4uY2xlYW5lZFZhbHVlcywgcHJvZHVjdDogeyBpZDogaW5pdFByb2R1Y3QuaWQgfSB9O1xuICAgICAgICBpZiAocHJvZHVjdEhhc0dyb3Vwcyhwcm9kdWN0KSkge1xuICAgICAgICAgIGRlbGV0ZSBkYXRhLnF1YW50aXR5O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHIgPSBhd2FpdCBmZXRjaEpvYlF1b3RlKGRhdGEsIGFwaVVybCk7XG4gICAgICAgIGNvbnN0IHNlcnZlckpvYiA9IHIudG9Kc29uKCk7XG4gICAgICAgIHNldEpvYigocHJldjogYW55KSA9PiBtZXJnZUludmVudG9yeShwcmV2LCBzZXJ2ZXJKb2IpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gQmVzdC1lZmZvcnQ6IGlmIHRoZSBpbnZlbnRvcnkgcmVmcmVzaCBmYWlscyB0aGUgcHJpY2UgaXMgdW5hZmZlY3RlZC5cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldEludmVudG9yeUxvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH0sIDQ1MCk7XG4gIH1cblxuICBmdW5jdGlvbiBhcHBseUNsaWVudFF1b3RlKHZhbHVlczogYW55KSB7XG4gICAgY29uc3Qgc2VsZWN0aW9ucyA9IHRvU2VsZWN0aW9ucyh2YWx1ZXMsIHByaWNpbmdSdWxlcyk7XG4gICAgY29uc3QgcmVzdWx0ID0gcHJpY2luZy5lc3RpbWF0ZVF1b3RlKHByaWNpbmdSdWxlcywgc2VsZWN0aW9ucyk7XG4gICAgaWYgKCd1bnN1cHBvcnRlZCcgaW4gcmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICAvLyBWaXNpYmlsaXR5IEFORCBhdmFpbGFiaWxpdHkgYXJlIHNjb3BlZCBwZXIgY29udGFpbmVyLCBtaXJyb3JpbmcgdGhlXG4gICAgLy8gc2VydmVyOiBpbmRlcGVuZGVudCB2YXJpYXRpb25zIHJlc29sdmUgYWdhaW5zdCBpbmRlcGVuZGVudCBzZWxlY3Rpb25zXG4gICAgLy8gb25seTsgZWFjaCBncm91cCByZXNvbHZlcyBhZ2FpbnN0IGl0cyBvd24gc2VsZWN0aW9ucyArIGluZGVwZW5kZW50LlxuICAgIC8vIE90aGVyIGdyb3VwcyBuZXZlciBsZWFrIGluLiBBdmFpbGFiaWxpdHkgaXMgY29tYmluYXRpb24tYXdhcmU6IGFuIG9wdGlvblxuICAgIC8vIGlzIGRpc2FibGVkIHdoZW4gKGN1cnJlbnQgaW52ZW50b3J5IHNlbGVjdGlvbnMgKyB0aGF0IG9wdGlvbikgaGFzIG5vXG4gICAgLy8gbWF0Y2hpbmcgc3RvY2suXG4gICAgLy8gRmllbGQgbWVtYmVyc2hpcCBtaXJyb3JzIGZpbGxfZHluYW1pY192YXJpYXRpb25zOiBnYXRlZCBmaWVsZHMgYXJlXG4gICAgLy8gYWRkZWQvcmVtb3ZlZCB2aWEgcmVzb2x2ZVZpc2libGVGaWVsZHMgKyBwcm9kdWN0IGZpZWxkIHRlbXBsYXRlcy5cbiAgICBjb25zdCBpbmRlcGVuZGVudFNjb3BlID0ge1xuICAgICAgcXVhbnRpdHk6IHNlbGVjdGlvbnMucXVhbnRpdHksXG4gICAgICBmaWVsZFZhbHVlczogc2VsZWN0aW9ucy5maWVsZFZhbHVlcyxcbiAgICB9O1xuICAgIGNvbnN0IGluZGVwZW5kZW50VmlzaWJsZUZpZWxkcyA9IHByaWNpbmcucmVzb2x2ZVZpc2libGVGaWVsZHMoXG4gICAgICBwcmljaW5nUnVsZXMsXG4gICAgICBpbmRlcGVuZGVudFNjb3BlXG4gICAgKTtcbiAgICBjb25zdCBpbmRlcGVuZGVudEZpZWxkVGVtcGxhdGVzID1cbiAgICAgIHByb2R1Y3RGaWVsZHNGb3JQcmljaW5nRmllbGRzKHByaWNpbmdSdWxlcy5maWVsZHMsIHByb2R1Y3QpO1xuICAgIGNvbnN0IGRlc2lyZWRJbmRlcGVuZGVudCA9IGJ1aWxkRGVzaXJlZFZhcmlhdGlvbnNGcm9tRmllbGRzKFxuICAgICAgdmFsdWVzLnZhcmlhdGlvbnMsXG4gICAgICBpbmRlcGVuZGVudEZpZWxkVGVtcGxhdGVzID8/IHByb2R1Y3Q/LmluZGVwZW5kZW50VmFyaWF0aW9uRmllbGRzLFxuICAgICAgaW5kZXBlbmRlbnRWaXNpYmxlRmllbGRzLFxuICAgICAgYnVpbGRFbXB0eVZhcmlhdGlvbkZyb21GaWVsZFxuICAgICk7XG4gICAgY29uc3QgaW5kZXBlbmRlbnRSZWNvbmNpbGUgPSByZWNvbmNpbGVWYXJpYXRpb25zKFxuICAgICAgdmFsdWVzLnZhcmlhdGlvbnMsXG4gICAgICBkZXNpcmVkSW5kZXBlbmRlbnRcbiAgICApO1xuICAgIHZhbHVlcy52YXJpYXRpb25zID0gaW5kZXBlbmRlbnRSZWNvbmNpbGUudmFyaWF0aW9ucztcblxuICAgIGNvbnN0IGluZGVwZW5kZW50VmlzaWJsZSA9IHByaWNpbmcucmVzb2x2ZVZpc2libGVPcHRpb25JZHMocHJpY2luZ1J1bGVzLCBpbmRlcGVuZGVudFNjb3BlKTtcbiAgICBjb25zdCBpbmRlcGVuZGVudFVuYXZhaWxhYmxlID0gcHJpY2luZy5yZXNvbHZlVW5hdmFpbGFibGVPcHRpb25JZHMocHJpY2luZ1J1bGVzLCBpbmRlcGVuZGVudFNjb3BlKTtcbiAgICBsZXQgdmlzaWJpbGl0eUNoYW5nZWQgPVxuICAgICAgaW5kZXBlbmRlbnRSZWNvbmNpbGUudmlzaWJpbGl0eUNoYW5nZWQgfHxcbiAgICAgIGFwcGx5T3B0aW9uVmlzaWJpbGl0eShcbiAgICAgICAgdmFsdWVzLnZhcmlhdGlvbnMsIGluZGVwZW5kZW50VmlzaWJsZSwgaW5kZXBlbmRlbnRVbmF2YWlsYWJsZVxuICAgICAgKTtcbiAgICBpZiAocHJpY2luZ1J1bGVzLmhhc0dyb3VwcyAmJiBBcnJheS5pc0FycmF5KHZhbHVlcy52YXJpYXRpb25zR3JvdXBzKSkge1xuICAgICAgdmFsdWVzLnZhcmlhdGlvbnNHcm91cHMuZm9yRWFjaCgoZzogYW55LCBpOiBudW1iZXIpID0+IHtcbiAgICAgICAgZy5ncm91cENvc3QgPSByZXN1bHQuZ3JvdXBDb3N0c1tpXSA/PyAwO1xuICAgICAgICBjb25zdCBncm91cFNjb3BlID0ge1xuICAgICAgICAgIGZpZWxkVmFsdWVzOiBzZWxlY3Rpb25zLmZpZWxkVmFsdWVzLFxuICAgICAgICAgIGdyb3Vwczogc2VsZWN0aW9ucy5ncm91cHMgPyBbc2VsZWN0aW9ucy5ncm91cHNbaV1dIDogW10sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGdyb3VwVmlzaWJsZUZpZWxkcyA9IHByaWNpbmcucmVzb2x2ZVZpc2libGVGaWVsZHMoXG4gICAgICAgICAgcHJpY2luZ1J1bGVzLFxuICAgICAgICAgIGdyb3VwU2NvcGVcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZ3JvdXBGaWVsZFRlbXBsYXRlcyA9XG4gICAgICAgICAgcHJvZHVjdEZpZWxkc0ZvclByaWNpbmdGaWVsZHMocHJpY2luZ1J1bGVzLmdyb3VwRmllbGRzLCBwcm9kdWN0KTtcbiAgICAgICAgY29uc3QgZGVzaXJlZEdyb3VwID0gYnVpbGREZXNpcmVkVmFyaWF0aW9uc0Zyb21GaWVsZHMoXG4gICAgICAgICAgZy52YXJpYXRpb25zLFxuICAgICAgICAgIGdyb3VwRmllbGRUZW1wbGF0ZXMgPz8gZ3JvdXBGaWVsZFRlbXBsYXRlc0Zyb21Qcm9kdWN0KHByb2R1Y3QpLFxuICAgICAgICAgIGdyb3VwVmlzaWJsZUZpZWxkcyxcbiAgICAgICAgICBidWlsZEVtcHR5VmFyaWF0aW9uRnJvbUZpZWxkXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGdyb3VwUmVjb25jaWxlID0gcmVjb25jaWxlVmFyaWF0aW9ucyhnLnZhcmlhdGlvbnMsIGRlc2lyZWRHcm91cCk7XG4gICAgICAgIGcudmFyaWF0aW9ucyA9IGdyb3VwUmVjb25jaWxlLnZhcmlhdGlvbnM7XG4gICAgICAgIGlmIChncm91cFJlY29uY2lsZS52aXNpYmlsaXR5Q2hhbmdlZCkge1xuICAgICAgICAgIHZpc2liaWxpdHlDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBncm91cFZpc2libGUgPSBwcmljaW5nLnJlc29sdmVWaXNpYmxlT3B0aW9uSWRzKHByaWNpbmdSdWxlcywgZ3JvdXBTY29wZSk7XG4gICAgICAgIGNvbnN0IGdyb3VwVW5hdmFpbGFibGUgPSBwcmljaW5nLnJlc29sdmVVbmF2YWlsYWJsZU9wdGlvbklkcyhwcmljaW5nUnVsZXMsIGdyb3VwU2NvcGUpO1xuICAgICAgICBpZiAoYXBwbHlPcHRpb25WaXNpYmlsaXR5KGcudmFyaWF0aW9ucywgZ3JvdXBWaXNpYmxlLCBncm91cFVuYXZhaWxhYmxlKSkge1xuICAgICAgICAgIHZpc2liaWxpdHlDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IG5leHRKb2IgPSBzeW5jSm9iU2VsZWN0ZWRPcHRpb25zRnJvbVZhbHVlcyh7XG4gICAgICAuLi52YWx1ZXMsXG4gICAgICBjb3N0OiByZXN1bHQuY29zdCxcbiAgICAgIGNvc3RQZXJVbml0OiByZXN1bHQuY29zdFBlclVuaXQsXG4gICAgICB0YXhBbW91bnQ6IHJlc3VsdC50YXhBbW91bnQsXG4gICAgICB0b3RhbENvc3Q6IHJlc3VsdC50b3RhbENvc3QsXG4gICAgICBjdXJyZW5jeTogcmVzdWx0LmN1cnJlbmN5LFxuICAgIH0pO1xuICAgIHNldEpvYihuZXh0Sm9iKTtcbiAgICAvLyBPbmx5IHJlLXNlZWQgdGhlIGZvcm0gd2hlbiBvcHRpb24vZmllbGQgdmlzaWJpbGl0eSBhY3R1YWxseSBjaGFuZ2VkIOKAlFxuICAgIC8vIGkuZS4gb24gc2VsZWN0aW9uIGNoYW5nZXMsIG5vdCBvbiBxdWFudGl0eSBlZGl0cy4gQ29zdC9ncm91cC1jb3N0IHVwZGF0ZXNcbiAgICAvLyBmbG93IHRocm91Z2ggc2V0Sm9iIHdpdGhvdXQgYSByZXNldC4gcmVzZXQoKSBtYWtlcyB1c2VGaWVsZEFycmF5IHJlbW91bnRcbiAgICAvLyBpdHMgaXRlbXMsIHdoaWNoIG1ha2VzIHRoZSBicm93c2VyIGxvc2UgdGhlIHNjcm9sbCBwb3NpdGlvbjsgY2FwdHVyZSBhbmRcbiAgICAvLyByZXN0b3JlIGl0IHNvIHRoZSB2aWV3cG9ydCBkb2Vzbid0IGp1bXAgd2hlbiB0b2dnbGluZyBhIHNlbGVjdC5cbiAgICAvLyBOZXZlciByZXNldCB3aXRoIHZhcmlhdGlvbnMgdGhhdCBsb3N0IHZhcmlhdGlvbkZpZWxkIOKAlCB0aGF0IGNvbGxhcHNlc1xuICAgIC8vIHRoZSBmb3JtIChEeW5hbWljVmFyaWF0aW9uSW5wdXQgY2Fubm90IHJlbmRlciB3aXRob3V0IGZpZWxkIG1ldGFkYXRhKS5cbiAgICBpZiAodmlzaWJpbGl0eUNoYW5nZWQgJiYgdmFyaWF0aW9uc0hhdmVGaWVsZE1ldGFkYXRhKG5leHRKb2IpKSB7XG4gICAgICByZXNldEZvcm1QcmVzZXJ2aW5nU2Nyb2xsKG5leHRKb2IpO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dEpvYjtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVTZXJ2ZXJRdW90ZSgpOiBQcm9taXNlPGFueSB8IG51bGw+IHtcbiAgICBjb25zdCB2YWx1ZXMgPSBnZXRWYWx1ZXMoKTtcbiAgICBjb25zdCBjbGVhbmVkVmFsdWVzID0gY2xlYW5Kb2JWYXJpYXRpb25zQW5kR3JvdXBzKHZhbHVlcyk7XG4gICAgY29uc3QgcmVxdWVzdElkID0gKytxdW90ZVJlcXVlc3RJZC5jdXJyZW50O1xuICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgbGV0IGRhdGEgPSB7IC4uLmNsZWFuZWRWYWx1ZXMsIHByb2R1Y3Q6IHsgaWQ6IGluaXRQcm9kdWN0LmlkIH0gfTtcbiAgICBpZiAocHJvZHVjdEhhc0dyb3Vwcyhwcm9kdWN0KSkge1xuICAgICAgLy8gaWYgdGhlIHByb2R1Y3QgaGFzIGdyb3VwIHZhcmlhdGlvbiBmaWVsZHMgd2UgZGVsZXRlIHF1YW50aXR5XG4gICAgICAvLyBiZWNhdXNlIGVhY2ggZ3JvdXAgaGFzIGl0J3Mgb3duIHF1YW50aXR5XG4gICAgICBkZWxldGUgZGF0YS5xdWFudGl0eTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCBmZXRjaEpvYlF1b3RlKGRhdGEsIGFwaVVybCk7XG4gICAgICBpZiAocmVxdWVzdElkICE9PSBxdW90ZVJlcXVlc3RJZC5jdXJyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VydmVySm9iID0gci50b0pzb24oKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZXMgPSBnZXRWYWx1ZXMoKTtcbiAgICAgIGlmICghZm9ybVF1YW50aXRpZXNNYXRjaFJlcXVlc3QoY3VycmVudFZhbHVlcywgZGF0YSwgcHJvZHVjdCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCB7IG1lcmdlZEpvYiwgdmlzaWJpbGl0eUNoYW5nZWQgfSA9IGFwcGx5U2VydmVyUXVvdGUoY3VycmVudFZhbHVlcywgc2VydmVySm9iKTtcbiAgICAgIHNldEpvYihtZXJnZWRKb2IpO1xuICAgICAgLy8gS2VlcCB0aGUgdXNlcidzIGluLXByb2dyZXNzIHF1YW50aXR5IHZhbHVlczsgb25seSByZS1zZWVkIHRoZSBmb3JtIHdoZW5cbiAgICAgIC8vIG9wdGlvbiB2aXNpYmlsaXR5IGNoYW5nZWQgKG1pcnJvcnMgY2xpZW50LXNpZGUgcXVvdGluZykuXG4gICAgICBpZiAodmlzaWJpbGl0eUNoYW5nZWQgJiYgdmFyaWF0aW9uc0hhdmVGaWVsZE1ldGFkYXRhKG1lcmdlZEpvYikpIHtcbiAgICAgICAgcmVzZXRGb3JtUHJlc2VydmluZ1Njcm9sbChtZXJnZWRKb2IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1lcmdlZEpvYjtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlLmVycm9yTWVzc2FnZSB8fCBlLm1lc3NhZ2UgfHwgJ1NlcnZlciBlcnJvcic7XG4gICAgICBzaG93QWxlcnQoeyBtZXNzYWdlIH0pO1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocmVxdWVzdElkID09PSBxdW90ZVJlcXVlc3RJZC5jdXJyZW50KSB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFF1b3RlKG9wdGlvbnM/OiB7IGltbWVkaWF0ZT86IGJvb2xlYW4gfSk6IFByb21pc2U8YW55IHwgbnVsbD4ge1xuICAgIGNvbnN0IHZhbHVlcyA9IGdldFZhbHVlcygpO1xuICAgIGNvbnN0IGNsZWFuZWRWYWx1ZXMgPSBjbGVhbkpvYlZhcmlhdGlvbnNBbmRHcm91cHModmFsdWVzKTtcbiAgICBpZiAoY2xpZW50U2lkZUVuYWJsZWQgJiYgcHJpY2luZ1J1bGVzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjbGllbnRKb2IgPSBhcHBseUNsaWVudFF1b3RlKGNsZWFuZWRWYWx1ZXMpO1xuICAgICAgICBpZiAoY2xpZW50Sm9iKSB7XG4gICAgICAgICAgc2NoZWR1bGVJbnZlbnRvcnlSZWZyZXNoKGNsZWFuZWRWYWx1ZXMpO1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY2xpZW50Sm9iKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBmYWxsIHRocm91Z2ggdG8gc2VydmVyIG9uIGFueSBjbGllbnQtY2FsYyBlcnJvclxuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uaW1tZWRpYXRlKSB7XG4gICAgICBpZiAoc2VydmVyUXVvdGVUaW1lci5jdXJyZW50KSB7XG4gICAgICAgIGNsZWFyVGltZW91dChzZXJ2ZXJRdW90ZVRpbWVyLmN1cnJlbnQpO1xuICAgICAgICBzZXJ2ZXJRdW90ZVRpbWVyLmN1cnJlbnQgPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4ZWN1dGVTZXJ2ZXJRdW90ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmIChzZXJ2ZXJRdW90ZVRpbWVyLmN1cnJlbnQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHNlcnZlclF1b3RlVGltZXIuY3VycmVudCk7XG4gICAgICB9XG4gICAgICBzZXJ2ZXJRdW90ZVRpbWVyLmN1cnJlbnQgPSBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgc2VydmVyUXVvdGVUaW1lci5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgcmVzb2x2ZShhd2FpdCBleGVjdXRlU2VydmVyUXVvdGUoKSk7XG4gICAgICB9LCBTRVJWRVJfUVVPVEVfREVCT1VOQ0VfTVMpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gV2hlbiBwcmljaW5nIHJ1bGVzIGFycml2ZSAoYXN5bmMgZmV0Y2gpLCByZS1xdW90ZSBzbyBBcmVhL290aGVyXG4gIC8vIGNsaWVudC1zaWRlIGNvc3RzIGFwcGx5IHdpdGhvdXQgcmVxdWlyaW5nIGFub3RoZXIgZmllbGQgZWRpdC5cbiAgY29uc3QgYXBwbGllZENsaWVudFJ1bGVzUmVmID0gUmVhY3QudXNlUmVmPGFueT4obnVsbCk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjbGllbnRTaWRlRW5hYmxlZCB8fCAhcHJpY2luZ1J1bGVzIHx8IHByaWNpbmdSdWxlcy51bnN1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoYXBwbGllZENsaWVudFJ1bGVzUmVmLmN1cnJlbnQgPT09IHByaWNpbmdSdWxlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhcHBsaWVkQ2xpZW50UnVsZXNSZWYuY3VycmVudCA9IHByaWNpbmdSdWxlcztcbiAgICBnZXRRdW90ZSgpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW2NsaWVudFNpZGVFbmFibGVkLCBwcmljaW5nUnVsZXNdKTtcblxuICBjb25zdCBbaXNEcmFmdE1vZGFsT3Blbiwgc2V0SXNEcmFmdE1vZGFsT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc0RyYWZ0RGVzaWduZXJPcGVuLCBzZXRJc0RyYWZ0RGVzaWduZXJPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgcGVuZGluZ0NoZWNrb3V0UmVmID0gUmVhY3QudXNlUmVmPCgoKSA9PiB2b2lkKSB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGNvbnN1bWVQZW5kaW5nQ2hlY2tvdXQgPSAoKSA9PiB7XG4gICAgY29uc3QgcGVuZGluZyA9IHBlbmRpbmdDaGVja291dFJlZi5jdXJyZW50O1xuICAgIHBlbmRpbmdDaGVja291dFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICByZXR1cm4gcGVuZGluZztcbiAgfTtcblxuICBjb25zdCBydW5EcmFmdENoZWNrb3V0ID0gYXN5bmMgKFxuICAgIHByb2NlZWQ6IChqb2JEYXRhOiBhbnkpID0+IHZvaWQsXG4gICkgPT4ge1xuICAgIGlmICghKGF3YWl0IHZhbGlkYXRlRm9ybSgpKSkgcmV0dXJuO1xuICAgIGNvbnN0IHF1b3RlZCA9IGF3YWl0IGdldFF1b3RlKHsgaW1tZWRpYXRlOiB0cnVlIH0pO1xuICAgIGlmICghcXVvdGVkKSByZXR1cm47XG4gICAgY29uc3Qgam9iRGF0YSA9IGxpZnRJbmRlcGVuZGVudFZhcmlhdGlvbnNGcm9tR3JvdXBzKHF1b3RlZCwgcHJvZHVjdCk7XG5cbiAgICBpZiAoIXByb2R1Y3RBbGxvd3NDbGllbnREZXNpZ24oaW5pdFByb2R1Y3QpKSB7XG4gICAgICBwcm9jZWVkKGpvYkRhdGEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChsb2FkQXJ0d29ya1BhdGgoaW5pdFByb2R1Y3QuaWQpID09PSAnc2VydmljZScpIHtcbiAgICAgIHByb2NlZWQoe1xuICAgICAgICAuLi5qb2JEYXRhLFxuICAgICAgICBvd25EcmFmdHM6IFtdLFxuICAgICAgICBjbGllbnRGaWxlczogW10sXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkcmFmdHMgPSBsb2FkRHJhZnRzKGluaXRQcm9kdWN0LmlkKTtcbiAgICBjb25zdCBoYXNTYXZlZCA9IGRyYWZ0cy5zb21lKFxuICAgICAgKGRyYWZ0OiBEcmFmdFRlbXBsYXRlRGF0YSkgPT5cbiAgICAgICAgZHJhZnQucHJvZHVjdElkID09PSBpbml0UHJvZHVjdC5pZCAmJiBkcmFmdC50ZW1wbGF0ZURhdGE/Lmxlbmd0aFxuICAgICk7XG4gICAgaWYgKGhhc1NhdmVkKSB7XG4gICAgICBzZXREcmFmdEFwcHByb3ZlQ2FsbGJhY2soKCkgPT4gYXN5bmMgKGRyYWZ0Sm9iRGF0YTogYW55KSA9PiB7XG4gICAgICAgIHByb2NlZWQoZHJhZnRKb2JEYXRhIHx8IGpvYkRhdGEpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICAgIHNldElzRHJhZnRNb2RhbE9wZW4odHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJvY2VlZChqb2JEYXRhKTtcbiAgfTtcblxuICBjb25zdCBhZGRUb0NhcnQgPSBvbkFkZFRvQ2FydFxuICAgID8gYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgcnVuRHJhZnRDaGVja291dCgoam9iRGF0YSkgPT4ge1xuICAgICAgICBpZiAoIWpvYkRhdGEucHJvZHVjdCkgam9iRGF0YS5wcm9kdWN0ID0geyBpZDogaW5pdFByb2R1Y3QuaWQgfTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgb25BZGRUb0NhcnQoeyAuLi5qb2JEYXRhLCB0YWdzIH0pO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBidXlOb3cgPSBvbkJ1eU5vd1xuICAgID8gYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgcnVuRHJhZnRDaGVja291dCgoam9iRGF0YSkgPT4ge1xuICAgICAgICBvbkJ1eU5vdyh7IC4uLmpvYkRhdGEgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGdldFN1Ym1pdFF1b3RlID0gb25HZXRRdW90ZVxuICAgID8gYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgcnVuRHJhZnRDaGVja291dCgoam9iRGF0YSkgPT4ge1xuICAgICAgICBvbkdldFF1b3RlKHsgLi4uam9iRGF0YSB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4gKFxuICAgIDxNZXJjaGlQcm9kdWN0Rm9ybUNvbnRleHQuUHJvdmlkZXJcbiAgICAgIHZhbHVlPXtcbiAgICAgICAge1xuICAgICAgICAgIGFwaVVybCxcbiAgICAgICAgICBhbGxvd0FkZFRvQ2FydCxcbiAgICAgICAgICBidG5OYW1lQWRkVG9DYXJ0LFxuICAgICAgICAgIGNsYXNzTmFtZUFsZXJ0U2VsbGVyRWRpdGFibGUsXG4gICAgICAgICAgY2xhc3NOYW1lQnV0dG9uU3VibWl0LFxuICAgICAgICAgIGNsYXNzTmFtZUJ1dHRvbkdyb3VwQWRkLFxuICAgICAgICAgIGNsYXNzTmFtZUJ1dHRvbkdyb3VwUmVtb3ZlLFxuICAgICAgICAgIGNsYXNzTmFtZUJ1dHRvbnNTdWJtaXRDb250YWluZXIsXG4gICAgICAgICAgY2xhc3NOYW1lQnV0dG9uQXBwcm92ZURyYWZ0cyxcbiAgICAgICAgICBjbGFzc05hbWVCdXR0b25DbG9zZURyYWZ0cyxcbiAgICAgICAgICBjbGFzc05hbWVEcmFmdEJ1dHRvbkNvbnRhaW5lcixcbiAgICAgICAgICBjbGFzc05hbWVEcmFmdEN0YSxcbiAgICAgICAgICBjbGFzc05hbWVEcmFmdEdyb3VwQ29udGFpbmVyLFxuICAgICAgICAgIGNsYXNzTmFtZURyYWZ0R3JvdXBUaXRsZSxcbiAgICAgICAgICBjbGFzc05hbWVEcmFmdFNoZWV0LFxuICAgICAgICAgIGNsYXNzTmFtZURyYWZ0VG9vbGJhcixcbiAgICAgICAgICBjbGFzc05hbWVGaWxlVXBsb2FkQ29udGFpbmVyLFxuICAgICAgICAgIGNsYXNzTmFtZUZpbGVVcGxvYWQsXG4gICAgICAgICAgY2xhc3NOYW1lRmlsZVByZXZpZXdDb250YWluZXIsXG4gICAgICAgICAgY2xhc3NOYW1lRmlsZVVwbG9hZFRleHRDb250YWluZXIsXG4gICAgICAgICAgY2xhc3NOYW1lRmlsZVByZXZpZXdJY29uV3JhcHBlcixcbiAgICAgICAgICBjbGFzc05hbWVGaWxlVXBsb2FkQnV0dG9uLFxuICAgICAgICAgIGNsYXNzTmFtZUZpbGVVcGxvYWRJY29uLFxuICAgICAgICAgIGNsYXNzTmFtZUZpbGVVcGxvYWRJY29uU2Vjb25kLFxuICAgICAgICAgIGNsYXNzTmFtZUZpbGVVcGxvYWRJY29uQ29udGFpbmVyLFxuICAgICAgICAgIGNsYXNzTmFtZUZpbGVMaXN0SXRlbSxcbiAgICAgICAgICBjbGFzc05hbWVGaWxlQnV0dG9uRG93bmxvYWQsXG4gICAgICAgICAgY2xhc3NOYW1lRmlsZUJ1dHRvbkRlbGV0ZSxcbiAgICAgICAgICBjbGFzc05hbWVGaWxlTGlzdEl0ZW1Db250YWluZXIsXG4gICAgICAgICAgY2xhc3NOYW1lR3JvdXBzQ29udGFpbmVyLFxuICAgICAgICAgIGNsYXNzTmFtZUdyb3VwUHJpY2VDb250YWluZXIsXG4gICAgICAgICAgY2xhc3NOYW1lSW5wdXQsXG4gICAgICAgICAgY2xhc3NOYW1lSW5wdXRDb250YWluZXIsXG4gICAgICAgICAgY2xhc3NOYW1lSW52ZW50b3J5U3RhdHVzLFxuICAgICAgICAgIGNsYXNzTmFtZU9wdGlvbkNvbnRhaW5lcixcbiAgICAgICAgICBjbGFzc05hbWVPcHRpb25JbnB1dCxcbiAgICAgICAgICBjbGFzc05hbWVPcHRpb25MYWJlbCxcbiAgICAgICAgICBjbGFzc05hbWVPcHRpb25TdXBlcixcbiAgICAgICAgICBjbGFzc05hbWVPcHRpb25zQ2hlY2tib3hSYWRpb0NvbnRhaW5lcixcbiAgICAgICAgICBjbGFzc05hbWVPcHRpb25JbWFnZSxcbiAgICAgICAgICBjbGFzc05hbWVPcHRpb25JbWFnZUNvbnRhaW5lcixcbiAgICAgICAgICBjbGFzc05hbWVPcHRpb25Db2xvdXIsXG4gICAgICAgICAgY2xhc3NOYW1lT3B0aW9uQ29sb3VyQ29udGFpbmVyLFxuICAgICAgICAgIGNsYXNzTmFtZVByb2R1Y3RUaXRsZSxcbiAgICAgICAgICBjbGFzc05hbWVQcm9kdWN0T3JpZ2luVGl0bGUsXG4gICAgICAgICAgY2xhc3NOYW1lUHJvZHVjdFRvdGFsQ29udGFpbmVyLFxuICAgICAgICAgIGNsYXNzTmFtZVByb2R1Y3RUb3RhbCxcbiAgICAgICAgICBjbGFzc05hbWVRdWFudGl0eUxhYmVsQ29udGFpbmVyLFxuICAgICAgICAgIGNsYXNzTmFtZVVuaXRQcmljZSxcbiAgICAgICAgICBjbGFzc05hbWVQcmljZU1hdHJpeCxcbiAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgY29udHJvbCxcbiAgICAgICAgICBkcmFmdEFwcHJvdmVDYWxsYmFjayxcbiAgICAgICAgICBnZXRRdW90ZSxcbiAgICAgICAgICBoY2FwdGNoYVNpdGVLZXksXG4gICAgICAgICAgcHJpY2luZ1J1bGVzLFxuICAgICAgICAgIGhpZGVDb3N0LFxuICAgICAgICAgIGhpZGVDb3VudHJ5LFxuICAgICAgICAgIGhpZGVDYWxjdWxhdGVkUHJpY2UsXG4gICAgICAgICAgaGlkZURvbWFpbk5hbWUsXG4gICAgICAgICAgaGlkZVF1YW50aXR5RmllbGQsXG4gICAgICAgICAgaGlkZVJlcXVlc3RRdW90YXRpb25CdXR0b24sXG4gICAgICAgICAgaGlkZVBheW1lbnRVcGZyb250QnV0dG9uLFxuICAgICAgICAgIGhpZGVUaXRsZSxcbiAgICAgICAgICBob29rRm9ybSxcbiAgICAgICAgICBpc0NhcnRJdGVtLFxuICAgICAgICAgIGlzRHJhZnREZXNpZ25lck9wZW4sXG4gICAgICAgICAgaXNEcmFmdE1vZGFsT3BlbixcbiAgICAgICAgICBjb25zdW1lUGVuZGluZ0NoZWNrb3V0LFxuICAgICAgICAgIGpvYixcbiAgICAgICAgICBsb2FkaW5nLFxuICAgICAgICAgIGludmVudG9yeUxvYWRpbmcsXG4gICAgICAgICAgb25BZGRUb0NhcnQ6IGFkZFRvQ2FydCxcbiAgICAgICAgICBvbkJ1eU5vdzogYnV5Tm93LFxuICAgICAgICAgIG9uR2V0UXVvdGU6IGdldFN1Ym1pdFF1b3RlLFxuICAgICAgICAgIG9uU3VibWl0LFxuICAgICAgICAgIHByb2R1Y3QsXG4gICAgICAgICAgcHJvZHVjdEZvcm1JZCxcbiAgICAgICAgICBzZXRDbGllbnQsXG4gICAgICAgICAgc2V0SXNEcmFmdERlc2lnbmVyT3BlbixcbiAgICAgICAgICBzZXRJc0RyYWZ0TW9kYWxPcGVuLFxuICAgICAgICAgIHNldEpvYixcbiAgICAgICAgICBzZXRMb2FkaW5nLFxuICAgICAgICAgIHNob3dBbGVydCxcbiAgICAgICAgICBzaG93Q3VycmVuY3ksXG4gICAgICAgICAgc2hvd0N1cnJlbmN5Q29kZSxcbiAgICAgICAgICBzaG93RmVhdHVyZURlYWRsaW5lLFxuICAgICAgICAgIHNob3dHcm91cEJ1eVN0YXR1cyxcbiAgICAgICAgICBzaG93UHJpY2VNYXRyaXgsXG4gICAgICAgICAgc2hvd1VuaXRQcmljZSxcbiAgICAgICAgfSBhcyBhbnlcbiAgICAgIH1cbiAgICA+XG4gICAgICB7cHJvZHVjdEZvcm1JZCA/IChcbiAgICAgICAgPGZvcm0gaWQ9e3Byb2R1Y3RGb3JtSWR9IG9uU3VibWl0PXtkb1N1Ym1pdH0+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Zvcm0+XG4gICAgICApIDogY2hpbGRyZW59XG4gICAgICA8UHJvZHVjdERyYWZ0c0hvc3QgLz5cbiAgICA8L01lcmNoaVByb2R1Y3RGb3JtQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG4iXSwi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
|