@envive-ai/react-hooks 0.1.4 → 0.1.6
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/dist/amplitudeContext-CHzas7Cf.d.cts +52 -0
- package/dist/amplitudeContext-D-7fmVh1.cjs +356 -0
- package/dist/amplitudeContext-hY3caPC6.js +322 -0
- package/dist/amplitudeContext-tJ4y-SzX.d.ts +52 -0
- package/dist/api-DjeZXxl_.js +207 -0
- package/dist/api-_JaUnIUj.cjs +292 -0
- package/dist/app-CjsQ2_n-.js +132 -0
- package/dist/app-CnKRZ9RW.cjs +178 -0
- package/dist/application/models/graphql/index.cjs +3 -12
- package/dist/application/models/graphql/index.d.cts +1 -1
- package/dist/application/models/graphql/index.d.ts +1 -1
- package/dist/application/models/graphql/index.js +1 -10
- package/dist/application/models/guards/api/index.cjs +1 -2
- package/dist/application/models/guards/api/index.d.cts +2 -2
- package/dist/application/models/guards/api/index.d.ts +2 -2
- package/dist/application/models/guards/api/index.js +1 -2
- package/dist/application/models/index.cjs +48 -54
- package/dist/application/models/index.d.cts +7 -9
- package/dist/application/models/index.d.ts +7 -9
- package/dist/application/models/index.js +7 -11
- package/dist/application/models/utilityTypes/index.cjs +1 -1
- package/dist/application/models/utilityTypes/index.d.cts +1 -1
- package/dist/application/models/utilityTypes/index.d.ts +1 -1
- package/dist/application/models/utilityTypes/index.js +1 -1
- package/dist/application/models/variantInfo/index.cjs +1 -1
- package/dist/application/models/variantInfo/index.d.cts +1 -1
- package/dist/application/models/variantInfo/index.d.ts +1 -1
- package/dist/application/models/variantInfo/index.js +1 -1
- package/dist/application/utils/index.cjs +40 -37
- package/dist/application/utils/index.d.cts +18 -14
- package/dist/application/utils/index.d.ts +17 -13
- package/dist/application/utils/index.js +13 -10
- package/dist/{atomStore-JwGb7pcy.cjs → atomStore-B4jIaDPd.cjs} +1 -1
- package/dist/{atomStore-B1cgmbP0.js → atomStore-D8pjE1vL.js} +1 -1
- package/dist/atoms/app/index.cjs +14 -16
- package/dist/atoms/app/index.d.cts +20 -19
- package/dist/atoms/app/index.d.ts +20 -19
- package/dist/atoms/app/index.js +10 -11
- package/dist/atoms/atomStore/index.cjs +2 -1
- package/dist/atoms/atomStore/index.d.cts +1 -1
- package/dist/atoms/atomStore/index.js +2 -1
- package/dist/atoms/chat/index.cjs +44 -40
- package/dist/atoms/chat/index.d.cts +35 -36
- package/dist/atoms/chat/index.d.ts +35 -36
- package/dist/atoms/chat/index.js +14 -10
- package/dist/atoms/globalSearch/index.cjs +1 -1
- package/dist/atoms/globalSearch/index.d.cts +5 -5
- package/dist/atoms/globalSearch/index.d.ts +5 -5
- package/dist/atoms/globalSearch/index.js +1 -1
- package/dist/atoms/org/index.cjs +26 -37
- package/dist/atoms/org/index.d.cts +37 -47
- package/dist/atoms/org/index.d.ts +37 -47
- package/dist/atoms/org/index.js +11 -11
- package/dist/atoms/search/index.cjs +47 -41
- package/dist/atoms/search/index.d.cts +7 -9
- package/dist/atoms/search/index.d.ts +7 -9
- package/dist/atoms/search/index.js +16 -10
- package/dist/bandolier-DYEz4-8C.js +1229 -0
- package/dist/bandolier-o_-xrbOV.cjs +1229 -0
- package/dist/carpe-CsG5jCcl.cjs +607 -0
- package/dist/carpe-DONk00bZ.js +605 -0
- package/dist/cdnUtils-32v8bDX9.cjs +16 -0
- package/dist/cdnUtils-E4tLBt2g.js +11 -0
- package/dist/{chat-BgONoYU7.cjs → chat-BubCW1as.cjs} +1 -1
- package/dist/chat-CO7cRkaq.cjs +506 -0
- package/dist/{chat-CLJ4NWcN.js → chat-CV6MXeID.js} +1 -1
- package/dist/chat-hcRc4RRd.js +285 -0
- package/dist/{components-CV1fhAkj.js → components-B4T3Uzth.js} +1 -1
- package/dist/{components-BKZbet67.cjs → components-Cw9WjA6g.cjs} +1 -1
- package/dist/config/locators/components/chat/index.cjs +1 -1
- package/dist/config/locators/components/chat/index.d.cts +1 -1
- package/dist/config/locators/components/chat/index.d.ts +1 -1
- package/dist/config/locators/components/chat/index.js +1 -1
- package/dist/config/locators/components/chat/variants/index.d.ts +1 -1
- package/dist/config/locators/components/index.cjs +1 -1
- package/dist/config/locators/components/index.d.cts +1 -1
- package/dist/config/locators/components/index.d.ts +1 -1
- package/dist/config/locators/components/index.js +1 -1
- package/dist/config/locators/index.cjs +4 -4
- package/dist/config/locators/index.d.cts +2 -2
- package/dist/config/locators/index.d.ts +3 -3
- package/dist/config/locators/index.js +4 -4
- package/dist/contexts/index.cjs +45 -14
- package/dist/contexts/index.d.cts +10 -78
- package/dist/contexts/index.d.ts +10 -78
- package/dist/contexts/index.js +22 -11
- package/dist/contexts-B4ihTBsV.cjs +2980 -0
- package/dist/contexts-DGlr7M1o.js +2596 -0
- package/dist/coterie-CKB93qfz.cjs +239 -0
- package/dist/{coterie-yQ-_JXSw.cjs → coterie-DHcj2fRE.js} +64 -65
- package/dist/{custservice-types-C83itZmy.cjs → custservice-types-Dy0kc9TW.cjs} +1 -1
- package/dist/{custservice-types-DPQ-4TI6.js → custservice-types-mnIunabv.js} +1 -1
- package/dist/default-BnB4p0Se.cjs +234 -0
- package/dist/default-D6f5Dyt7.js +199 -0
- package/dist/default-ZKkE5zT4.cjs +4 -0
- package/dist/default-legGZJwI.js +4 -0
- package/dist/{divIds-DEL_-qU0.cjs → divIds-2dJlU3z8.cjs} +1 -15
- package/dist/{divIds-CWkntTsx.js → divIds-BUrN2vY-.js} +2 -4
- package/dist/dreamlandBaby-BiRYYFav.js +346 -0
- package/dist/dreamlandBaby-zuvmfzfD.cjs +346 -0
- package/dist/{embedded-C5uJqmuD.js → embedded-BJLWIriJ.js} +1 -1
- package/dist/{embedded--2L0F4b5.cjs → embedded-Dl79TJLC.cjs} +1 -1
- package/dist/{entrypoints-CNUvSgnk.js → entrypoints-Bs3pn6EV.js} +1 -1
- package/dist/{entrypoints-DM9Sm18O.cjs → entrypoints-Dqi5pzWH.cjs} +1 -1
- package/dist/enviveConfig-BccuzS2a.cjs +240 -0
- package/dist/enviveConfig-CzhTz8Aa.js +152 -0
- package/dist/events/index.cjs +1 -1
- package/dist/events/index.d.cts +1 -1
- package/dist/events/index.js +1 -1
- package/dist/{events-ClCDFK7t.js → events-BrLpaNxh.js} +1 -1
- package/dist/{events-Da7gpmGv.cjs → events-DwT6cEwI.cjs} +1 -1
- package/dist/fiveCbd-DwTTwC2j.cjs +613 -0
- package/dist/fiveCbd-Dz2NouOF.js +613 -0
- package/dist/forLoveAndLemons-DqSdyD6S.js +665 -0
- package/dist/forLoveAndLemons-Ud6mPrV3.cjs +667 -0
- package/dist/{globalSearch-b0wC7ZEO.js → globalSearch-B6THR7Jx.js} +1 -1
- package/dist/{globalSearch-BTeZxvk1.cjs → globalSearch-BFvEg53C.cjs} +1 -1
- package/dist/graphql-BNW60InJ.cjs +128 -0
- package/dist/graphql-CjB8wHzm.js +74 -0
- package/dist/graphqlConfig-CYt6tWII.js +30 -0
- package/dist/graphqlConfig-DicykC-o.cjs +61 -0
- package/dist/greenpan-B_EbPkSP.js +397 -0
- package/dist/greenpan-kPE4fJgd.cjs +397 -0
- package/dist/grooveLife-Ckuir319.js +342 -0
- package/dist/grooveLife-DKSEQp1F.cjs +342 -0
- package/dist/homegrownCannabis-BVPa2pqe.js +410 -0
- package/dist/homegrownCannabis-BwIAkxuA.cjs +410 -0
- package/dist/hooks/index.cjs +40 -16
- package/dist/hooks/index.d.cts +122 -95
- package/dist/hooks/index.d.ts +122 -95
- package/dist/hooks/index.js +22 -11
- package/dist/{index-D46Rd0io.d.cts → index-B0NW9KTj.d.cts} +1 -1
- package/dist/{index-jBATkcc_.d.cts → index-BDPWBU3h.d.cts} +1 -1
- package/dist/index-BMPtlgac.d.ts +191 -0
- package/dist/{index-BTK5uzs6.d.cts → index-Bmub8e38.d.cts} +1 -1
- package/dist/{index-C62lPpy4.d.cts → index-Byb45OPg.d.cts} +1 -1
- package/dist/{index-DPx8s5YH.d.ts → index-C6KdON7d.d.ts} +1 -1
- package/dist/index-C7pGDl1A.d.ts +1609 -0
- package/dist/{index-CYtsPztZ.d.cts → index-C9lgsCWp.d.cts} +32 -32
- package/dist/{index-BzgkfbNO.d.cts → index-CESxqFso.d.cts} +1 -1
- package/dist/{index-C_C0tLeD.d.ts → index-Cc-wBCn6.d.ts} +32 -32
- package/dist/{index-Cx9e-fRi.d.ts → index-CcIG01PJ.d.ts} +2 -2
- package/dist/{index-ClJ0nMsR.d.cts → index-CiWEYzXl.d.cts} +2 -2
- package/dist/{index-CKKkTsms.d.ts → index-Cqg6ltII.d.ts} +1 -1
- package/dist/{index-CExtydIH.d.ts → index-DOii3C6b.d.ts} +1 -1
- package/dist/index-DTu2X-YS.d.cts +1609 -0
- package/dist/index-OEifcBsm.d.cts +191 -0
- package/dist/{index-Dxpscrvz.d.ts → index-PGF8BvxQ.d.ts} +1 -1
- package/dist/{index-D2VaMPA3.d.ts → index-ylUiJvnr.d.ts} +1 -1
- package/dist/interceptors/index.cjs +2 -12
- package/dist/interceptors/index.d.cts +8 -13
- package/dist/interceptors/index.d.ts +8 -13
- package/dist/interceptors/index.js +2 -11
- package/dist/jackArcher-B39OEIj6.cjs +727 -0
- package/dist/{jackArcher-CXf_IAmC.js → jackArcher-BwkWGybC.js} +24 -25
- package/dist/jordanCraig-CxRH_jLi.js +1786 -0
- package/dist/jordanCraig-RwmWw-jM.cjs +1786 -0
- package/dist/kindredBravely-D78VwL20.cjs +490 -0
- package/dist/kindredBravely-DQDpAzdl.js +490 -0
- package/dist/kutFromTheKloth-TcXQkIti.js +369 -0
- package/dist/kutFromTheKloth-dXRrNti0.cjs +369 -0
- package/dist/larryAndSerges-Bh5XEXsZ.js +262 -0
- package/dist/larryAndSerges-COdBzOzu.cjs +262 -0
- package/dist/leapsAndRebounds-BbXnqkl5.cjs +360 -0
- package/dist/leapsAndRebounds-mjCaH1k-.js +360 -0
- package/dist/longevityrx-DdV3v26F.cjs +320 -0
- package/dist/longevityrx-DfPDfvAt.js +320 -0
- package/dist/lookOptic-DgXFGBPP.cjs +282 -0
- package/dist/{lookOptic-BGhU4910.js → lookOptic-FgVW1afF.js} +19 -20
- package/dist/mantraBrand-C5gVm3rk.cjs +750 -0
- package/dist/{mantraBrand-DrqG9uqO.js → mantraBrand-uV8HCDR8.js} +22 -23
- package/dist/medterra-BtDpr1Hw.cjs +583 -0
- package/dist/medterra-DgzE7-mj.js +583 -0
- package/dist/modells-CJjsxOIR.js +484 -0
- package/dist/modells-Ck5KbRFj.cjs +484 -0
- package/dist/models-BkXg5eIP.cjs +1534 -0
- package/dist/models-UZ6HszfZ.js +1281 -0
- package/dist/{nodeSelector-BiCDowlK.d.ts → nodeSelector-BxrS2S_k.d.ts} +1 -1
- package/dist/{nodeSelector-B3bPtEjX.d.cts → nodeSelector-Dm4S-10n.d.cts} +1 -1
- package/dist/org-C2RrBVQR.cjs +81 -0
- package/dist/org-xMytX--e.js +38 -0
- package/dist/orgAnalyticsConfig-BJ2A1RZ-.cjs +39 -0
- package/dist/orgAnalyticsConfig-ClrFy2qH.js +14 -0
- package/dist/pressedFloral-Bteoboms.js +661 -0
- package/dist/pressedFloral-CexgV-xy.cjs +661 -0
- package/dist/search-BMOAmrmY.js +459 -0
- package/dist/search-Df0Ifneg.cjs +672 -0
- package/dist/{search-filter-types-BNTLVXqQ.d.cts → search-filter-types-DosbseF3.d.cts} +1 -1
- package/dist/{search-filter-types-DkmH1TxJ.d.ts → search-filter-types-fZf91Pdw.d.ts} +1 -1
- package/dist/skinPerfection-BGzq9lq-.cjs +334 -0
- package/dist/skinPerfection-BlvcEcUE.js +334 -0
- package/dist/snapSupplements-CbbGzAgO.cjs +285 -0
- package/dist/snapSupplements-kcsPAOm9.js +285 -0
- package/dist/{socialProofClasses-ky69yppk.cjs → socialProofClasses-Db8gzsfi.cjs} +1 -1
- package/dist/{socialProofClasses-DdzG1tZy.js → socialProofClasses-kwDvwLOZ.js} +1 -1
- package/dist/spanx-B4WFA_rI.js +661 -0
- package/dist/spanx-BWoE4F8b.cjs +663 -0
- package/dist/spanxStaging-BOrOjhXn.js +845 -0
- package/dist/spanxStaging-BfdfIug4.cjs +848 -0
- package/dist/{suggestionBarV2-types-CwOXzIKq.js → suggestionBarV2-types-IMMOmCir.js} +1 -1
- package/dist/{suggestionBarV2-types-Dc4-zJlV.cjs → suggestionBarV2-types-nnGNgFvR.cjs} +1 -1
- package/dist/supergoop-22dd5_BS.js +323 -0
- package/dist/supergoop-B-a4cku2.cjs +323 -0
- package/dist/{test-types-CXVJxTeu.d.ts → test-types-C9b_OdfO.d.ts} +1 -1
- package/dist/{test-types-CuOq25VT.d.cts → test-types-CgVJtwUr.d.cts} +1 -1
- package/dist/types/index.cjs +2 -2
- package/dist/types/index.d.cts +2 -2
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.js +2 -2
- package/dist/types--pr1GQQx.js +154 -0
- package/dist/types-BVSyY3Hk.cjs +196 -0
- package/dist/{uniqueVintage-Cui74mlJ.js → uniqueVintage-CJXiNNe7.js} +19 -20
- package/dist/uniqueVintage-D0jzJWlo.cjs +1213 -0
- package/dist/useMessageInterceptor-B87e3yu3.cjs +33 -0
- package/dist/useMessageInterceptor-Bb7YRaWk.js +25 -0
- package/dist/userIdentityContext-BPqvVIg0.d.cts +20 -0
- package/dist/userIdentityContext-wbCRmlzp.d.ts +20 -0
- package/dist/utils-C9ZSCx12.js +888 -0
- package/dist/utils-D5HO61hG.cjs +1016 -0
- package/dist/variantInfo-DbVxA1yE.js +1 -0
- package/dist/variantInfo-orXoPBCU.cjs +0 -0
- package/dist/venaCbd-Bhhu_qUf.cjs +365 -0
- package/dist/venaCbd-CanovPS_.js +365 -0
- package/dist/westonJonBoucher-BC0x1ktI.cjs +422 -0
- package/dist/{westonJonBoucher-C95EuCl-.js → westonJonBoucher-BUu1_wP1.js} +19 -20
- package/dist/wineEnthusiast-BlCryfil.cjs +940 -0
- package/dist/{wineEnthusiast-DeTFY8Gm.js → wineEnthusiast-Ck1x5iJq.js} +19 -20
- package/dist/wolfMattress-D9Mjq-HP.js +372 -0
- package/dist/wolfMattress-JssghhC-.cjs +372 -0
- package/dist/wolfTactical-C6exYhL7.cjs +349 -0
- package/dist/wolfTactical-CnV3KQdI.js +349 -0
- package/package.json +101 -19
- package/src/{adapters/spiffy/commerce/api.ts → application/commerce-api.ts} +31 -23
- package/src/application/models/colorsConfig.ts +18 -18
- package/src/application/models/frontendConfig.ts +3 -3
- package/src/application/models/graphql/queries/getMerchantColorsQuery.ts +1 -1
- package/src/application/models/graphql/queries/getMerchantFrontendConfigQuery.ts +1 -1
- package/src/application/models/index.ts +0 -2
- package/src/application/models/localStorageEventListener.ts +2 -2
- package/src/application/models/supportedOrgs.ts +1 -1
- package/src/application/models/utils/snakeToCamelTransformer.ts +8 -8
- package/src/application/models/validators/validateGraphQLColorsConfig.ts +0 -21
- package/src/application/models/validators/validateGraphQLFrontendConfig.ts +2 -2
- package/src/application/utils/analyticsUtils.ts +53 -22
- package/src/application/utils/cdnUtils.ts +11 -0
- package/src/atoms/amplitude/amplitudeTrackEventAtom.ts +15 -0
- package/src/atoms/app/index.ts +7 -17
- package/src/atoms/app/variant.ts +13 -4
- package/src/atoms/chat/chatState.ts +28 -18
- package/src/atoms/chat/messageQueue.ts +36 -5
- package/src/atoms/chat/replies.ts +45 -37
- package/src/atoms/envive/enviveConfig.ts +10 -6
- package/src/atoms/org/graphqlConfig.ts +21 -4
- package/src/atoms/org/index.ts +7 -7
- package/src/atoms/org/newOrgConfigAtom.ts +8 -0
- package/src/atoms/org/orgPageConfig.ts +6 -5
- package/src/atoms/search/chatSearch.ts +11 -5
- package/src/atoms/search/searchAPI.ts +68 -48
- package/src/atoms/search/searchServiceAdapter.ts +25 -0
- package/src/contexts/amplitudeContext.tsx +466 -0
- package/src/contexts/cdnContext.tsx +48 -0
- package/src/contexts/chatContext.tsx +15 -12
- package/src/contexts/enviveConfigContext.tsx +22 -17
- package/src/contexts/enviveCssContext.tsx +34 -5
- package/src/contexts/featureFlagContext.tsx +193 -0
- package/src/contexts/featureFlagServiceContext.tsx +87 -0
- package/src/contexts/graphqlContext.tsx +165 -0
- package/src/contexts/index.ts +13 -3
- package/src/contexts/localStorageContext.tsx +159 -0
- package/src/contexts/newOrgConfigContext.tsx +104 -0
- package/src/contexts/orgConfigContext.tsx +92 -92
- package/src/contexts/searchContext.tsx +187 -0
- package/src/contexts/sessionStorageContext.tsx +80 -0
- package/src/contexts/shopifyUrlContext.tsx +97 -0
- package/src/contexts/types.ts +12 -8
- package/src/contexts/userIdentityContext.tsx +197 -0
- package/src/events/registerAnalyticsListeners.ts +32 -38
- package/src/hooks/index.ts +10 -6
- package/src/hooks/useAmplitudeOperations.ts +35 -0
- package/src/hooks/useAppDetails.ts +49 -0
- package/src/hooks/useCdnOperations.ts +16 -0
- package/src/hooks/useChatToggle.ts +5 -4
- package/src/hooks/useChatToggleAnalytics.ts +15 -0
- package/src/hooks/useGraphQLConfig.ts +63 -0
- package/src/hooks/useIdentifyUser.ts +33 -0
- package/src/hooks/useImageResolver.ts +18 -10
- package/src/hooks/useLocalStorageOperations.ts +92 -0
- package/src/hooks/useNewOrgConfig.ts +7 -0
- package/src/hooks/useSearch.tsx +21 -18
- package/src/hooks/useSearchOperations.ts +97 -0
- package/src/hooks/useSessionStorageOperations.ts +28 -0
- package/src/hooks/useShopifyUrlOperations.ts +45 -0
- package/src/hooks/useTrackComponentVisibleEvent.ts +12 -8
- package/src/hooks/useUpdateAnalyticsProps.ts +28 -17
- package/src/interceptors/index.ts +0 -1
- package/src/interceptors/useMessageInterceptor.ts +5 -8
- package/src/merchants/bandolier/bandolier.ts +10 -28
- package/src/merchants/carpe/carpe.ts +5 -8
- package/src/merchants/coterie/coterie.ts +3 -6
- package/src/merchants/default.ts +73 -70
- package/src/merchants/domInsertion.ts +30 -0
- package/src/merchants/dreamlandBaby/dreamlandBaby.ts +12 -6
- package/src/merchants/fiveCbd/fiveCbd.ts +7 -13
- package/src/merchants/forLoveAndLemons/forLoveAndLemons.ts +44 -14
- package/src/merchants/greenpan/greenpan.ts +6 -12
- package/src/merchants/gridInsertion.ts +19 -0
- package/src/merchants/grooveLife/grooveLife.ts +13 -7
- package/src/merchants/homegrownCannabis/homegrownCannabis.ts +12 -6
- package/src/merchants/jackArcher/jackArcher.ts +26 -11
- package/src/merchants/jordanCraig/jordanCraig.ts +5 -5
- package/src/merchants/kindredBravely/kindredBravely.ts +16 -7
- package/src/merchants/kutFromTheKloth/kutFromTheKloth.ts +9 -6
- package/src/merchants/larryAndSerges/larryAndSerges.ts +6 -2
- package/src/merchants/leapsAndRebounds/leapsAndRebounds.ts +7 -7
- package/src/merchants/longevityrx/longevityrx.ts +14 -8
- package/src/merchants/lookOptic/lookOptic.ts +6 -6
- package/src/merchants/mantraBrand/mantraBrand.ts +14 -8
- package/src/merchants/medterra/medterra.ts +14 -11
- package/src/merchants/modells/modells.ts +6 -9
- package/src/merchants/pressedFloral/pressedFloral.ts +7 -13
- package/src/merchants/skinPerfection/skinPerfection.ts +13 -7
- package/src/merchants/snapSupplements/snapSupplements.ts +13 -10
- package/src/merchants/spanx/spanx.ts +6 -6
- package/src/merchants/spanx/spanxStaging.ts +6 -12
- package/src/merchants/supergoop/supergoop.ts +11 -12
- package/src/merchants/uniqueVintage/uniqueVintage.ts +6 -6
- package/src/merchants/venaCbd/venaCbd.ts +6 -9
- package/src/merchants/westonJonBoucher/westonJonBoucher.ts +6 -6
- package/src/merchants/wineEnthusiast/wineEnthusiast.ts +6 -6
- package/src/merchants/wolfMattress/wolfMattress.ts +3 -3
- package/src/merchants/wolfTactical/wolfTactical.ts +5 -11
- package/src/types/config-versions.ts +6 -0
- package/src/types.ts +0 -53
- package/dist/adapters/amplitude/index.cjs +0 -14
- package/dist/adapters/amplitude/index.d.cts +0 -6
- package/dist/adapters/amplitude/index.d.ts +0 -6
- package/dist/adapters/amplitude/index.js +0 -12
- package/dist/api-B2euFL-5.cjs +0 -269
- package/dist/api-XRr_lAG6.js +0 -190
- package/dist/application/config/index.cjs +0 -43
- package/dist/application/config/index.d.cts +0 -15
- package/dist/application/config/index.d.ts +0 -15
- package/dist/application/config/index.js +0 -41
- package/dist/application/service/customerService/index.cjs +0 -4
- package/dist/application/service/customerService/index.d.cts +0 -3
- package/dist/application/service/customerService/index.d.ts +0 -3
- package/dist/application/service/customerService/index.js +0 -4
- package/dist/application/service/index.cjs +0 -41
- package/dist/application/service/index.d.cts +0 -399
- package/dist/application/service/index.d.ts +0 -399
- package/dist/application/service/index.js +0 -12
- package/dist/bandolier-B76-OE75.cjs +0 -1230
- package/dist/bandolier-DRn_x1g1.js +0 -1230
- package/dist/carpe-kHi4RLB5.cjs +0 -608
- package/dist/carpe-qrSU99gq.js +0 -606
- package/dist/contexts-CQDwe3rK.cjs +0 -14333
- package/dist/contexts-e2sM-B9g.js +0 -12919
- package/dist/coterie-mMirPcHP.js +0 -240
- package/dist/customerService-BG1uNZZ1.cjs +0 -36
- package/dist/customerService-BHQRnLhC.js +0 -23
- package/dist/default-8Jfv8ehQ.cjs +0 -199
- package/dist/default-C8PQf-38.js +0 -176
- package/dist/default-LukSiCz1.js +0 -4
- package/dist/default-rJSJ887P.cjs +0 -4
- package/dist/dreamlandBaby-DHltv12Z.cjs +0 -347
- package/dist/dreamlandBaby-cG0HM9bt.js +0 -347
- package/dist/featureFlagService-5wdmW02z.d.ts +0 -18
- package/dist/featureFlagService-DaelrXEk.d.cts +0 -18
- package/dist/fiveCbd-Cvnwh03g.cjs +0 -614
- package/dist/fiveCbd-DhYMlsf9.js +0 -614
- package/dist/forLoveAndLemons-C8DuUexW.js +0 -666
- package/dist/forLoveAndLemons-DR6a1zjJ.cjs +0 -668
- package/dist/greenpan-B4Pu65kV.js +0 -398
- package/dist/greenpan-BL5p6j7f.cjs +0 -398
- package/dist/grooveLife-DjKWHoN3.cjs +0 -343
- package/dist/grooveLife-JK0TyaPz.js +0 -343
- package/dist/homegrownCannabis-DxqSDkmS.js +0 -411
- package/dist/homegrownCannabis-ZnfCqW-m.cjs +0 -411
- package/dist/index-BfuO9b0Q.d.ts +0 -749
- package/dist/index-CNsGWfS6.d.cts +0 -749
- package/dist/index-DFL1dIT_.d.ts +0 -7
- package/dist/index-MFbPQ8Ji.d.ts +0 -95
- package/dist/index-VSFakgAI.d.cts +0 -95
- package/dist/index-zZjcds15.d.cts +0 -7
- package/dist/jackArcher-mGkojXek.cjs +0 -728
- package/dist/jordanCraig-BvCvPRoR.js +0 -1787
- package/dist/jordanCraig-Dv8pVCiS.cjs +0 -1787
- package/dist/kindredBravely-UQP7wiNu.cjs +0 -491
- package/dist/kindredBravely-X8F_LNph.js +0 -491
- package/dist/kutFromTheKloth-BhYKk3CN.cjs +0 -370
- package/dist/kutFromTheKloth-D1xsTSJr.js +0 -370
- package/dist/larryAndSerges-1411NuZa.cjs +0 -262
- package/dist/larryAndSerges-DVIRLItu.js +0 -262
- package/dist/leapsAndRebounds-BJ8mwr33.js +0 -361
- package/dist/leapsAndRebounds-UcP9EJVO.cjs +0 -361
- package/dist/logger-Dln20ans.cjs +0 -26
- package/dist/logger-pdEEY8T2.js +0 -20
- package/dist/longevityrx-BFSv9GF5.cjs +0 -321
- package/dist/longevityrx-Cp6wleWr.js +0 -321
- package/dist/lookOptic-KieSqskd.cjs +0 -283
- package/dist/mantraBrand-CHQw-0nw.cjs +0 -751
- package/dist/medterra-CLG6Co1C.cjs +0 -584
- package/dist/medterra-D8ZX9NZC.js +0 -584
- package/dist/modells-BzyPwN2m.cjs +0 -485
- package/dist/modells-CAfqOCW4.js +0 -485
- package/dist/orgConfigResults--dAwtw3W.d.ts +0 -881
- package/dist/orgConfigResults-BL0XBA6x.d.cts +0 -881
- package/dist/pressedFloral-DULBuQwR.cjs +0 -662
- package/dist/pressedFloral-Dp-7Fk3S.js +0 -662
- package/dist/skinPerfection-BxuYCeJX.js +0 -335
- package/dist/skinPerfection-Cd3XZ6By.cjs +0 -335
- package/dist/snapSupplements-Bf6htPM0.js +0 -286
- package/dist/snapSupplements-ZFnXyMuZ.cjs +0 -286
- package/dist/spanx-CwDPQaGj.js +0 -662
- package/dist/spanx-Cyd4qDlK.cjs +0 -664
- package/dist/spanxStaging-D43nyAGy.js +0 -846
- package/dist/spanxStaging-ijbYnHzr.cjs +0 -849
- package/dist/supergoop-BnbFG7hm.cjs +0 -338
- package/dist/supergoop-CY043wIg.js +0 -336
- package/dist/types-BF_CJeck.js +0 -177
- package/dist/types-CD4LFta-.d.cts +0 -33
- package/dist/types-CNH4sfF-.cjs +0 -231
- package/dist/types-DBdI0j89.d.ts +0 -33
- package/dist/uniqueVintage-R2Jcu1y1.cjs +0 -1214
- package/dist/variant-CKVRF2-W.d.ts +0 -13
- package/dist/variant-raYuOP4L.d.cts +0 -13
- package/dist/venaCbd-o5_vOp4e.js +0 -366
- package/dist/venaCbd-r-IxEVc1.cjs +0 -366
- package/dist/westonJonBoucher-DjGEW3ZB.cjs +0 -423
- package/dist/wineEnthusiast-DvfcV5B3.cjs +0 -941
- package/dist/wolfMattress-6xPfOJt3.js +0 -373
- package/dist/wolfMattress-BjGnGKjP.cjs +0 -373
- package/dist/wolfTactical-Bi3WZu0m.cjs +0 -350
- package/dist/wolfTactical-C_F9-oPX.js +0 -350
- package/src/adapters/amplitude/amplitudeAdapter.ts +0 -477
- package/src/adapters/amplitude/index.ts +0 -2
- package/src/adapters/amplitude/stubAmplitudeAdapter.ts +0 -34
- package/src/adapters/spiffy/commerce/graphql.ts +0 -219
- package/src/application/config/generalStaticConfig.ts +0 -40
- package/src/application/config/index.ts +0 -1
- package/src/application/models/domMutationContinuation.ts +0 -7
- package/src/application/models/domObservationStrategy.ts +0 -9
- package/src/application/service/cachingService.ts +0 -84
- package/src/application/service/cdnService.ts +0 -20
- package/src/application/service/customerService/index.ts +0 -8
- package/src/application/service/customerService/providers/UnsupportedCustomerService.ts +0 -15
- package/src/application/service/domMutationObserver.ts +0 -320
- package/src/application/service/domMutations/GridInsertionService.ts +0 -123
- package/src/application/service/domMutations/dataLayer/dataLayerEventsListener.ts +0 -99
- package/src/application/service/domMutations/domInsertionService.ts +0 -90
- package/src/application/service/domMutations/domMutationListener.ts +0 -15
- package/src/application/service/domMutations/domMutationListenerState.ts +0 -52
- package/src/application/service/domMutations/floatingChat/embeddedChatsPlacementsListener.ts +0 -41
- package/src/application/service/domMutations/gladly/gladlyListener.ts +0 -61
- package/src/application/service/domMutations/spiffy/orgs/common/kustomerVisibilityListener.ts +0 -41
- package/src/application/service/domMutations/spiffy/orgs/common/orgsCommonDataLayerListener.ts +0 -119
- package/src/application/service/featureFlagService.ts +0 -130
- package/src/application/service/index.ts +0 -31
- package/src/application/service/kustomerIntegrationService.ts +0 -111
- package/src/application/service/localStorageService.ts +0 -77
- package/src/application/service/pageVariantService.ts +0 -866
- package/src/application/service/searchService.ts +0 -147
- package/src/application/service/sessionStorageService.ts +0 -27
- package/src/application/service/shopifyUrlService.ts +0 -63
- package/src/application/service/userIdentityService.ts +0 -114
- package/src/application/service/windowChatToggleService.ts +0 -80
- package/src/application/service/windowDataLayerService.ts +0 -181
- package/src/application/service/windowFrontendConfigService.ts +0 -129
- package/src/atoms/org/merchantCss.ts +0 -158
- package/src/atoms/org/org.ts +0 -291
- package/src/atoms/org/orgUIConfig.ts +0 -142
- package/src/enabled-features.ts +0 -83
- package/src/hooks/useDynamicVariants.ts +0 -210
- package/src/hooks/useFileUpload.ts +0 -63
- package/src/hooks/useHideElements.ts +0 -82
- package/src/hooks/useHorizontalScrollAnimation.ts +0 -115
- package/src/hooks/useReducedMotionWithOverride.ts +0 -15
- package/src/hooks/useSnapControl.ts +0 -155
- package/src/interceptors/useFormEscalation.ts +0 -57
- /package/dist/{variantInfo-CzhR5W6h.js → atomStore-CZnUUsrr.js} +0 -0
- /package/dist/{variantInfo-CNRTY0gH.cjs → atomStore-KSoFS3Jj.cjs} +0 -0
- /package/dist/{utilityTypes-C4h2wgAK.cjs → locators-0YYZu9n4.cjs} +0 -0
- /package/dist/{utilityTypes-BVikejDo.js → locators-fBXS_pxP.js} +0 -0
- /package/dist/{locators-Dc5ZT0aF.js → utilityTypes-8sETsYPk.js} +0 -0
- /package/dist/{locators-lQMJj830.cjs → utilityTypes-COShxVir.cjs} +0 -0
- /package/src/{application/service/customerService/types.ts → types/customerService.ts} +0 -0
- /package/src/{adapters/spiffy/commerce → types}/exceptions/sessionExceptions.ts +0 -0
- /package/src/{adapters/spiffy/commerce → types}/exceptions/unsupportedProductExceptions.ts +0 -0
|
@@ -0,0 +1,1609 @@
|
|
|
1
|
+
import { GetMerchantColorsQueryData } from "./index-Bmub8e38.cjs";
|
|
2
|
+
import { AcceptableFormFieldType, ApiFormResponseAttributes, ApiPageResponseAttributes, OrderResponseAttributes as OrderResponseAttributes$1, PageResponseAttributes, ProductResponseAttributes, Response as Response$1, ReviewResponseAttributes, SearchProductFilterAttributes, SearchProductResponseAttributes, SearchResponseAttributes, TextResponseAttributes } from "./index-CiWEYzXl.cjs";
|
|
3
|
+
import { CamelCasedPropertiesDeep, NonRecursiveType, UnknownArray, UpperCaseCharacters, WordSeparators } from "./index-CESxqFso.cjs";
|
|
4
|
+
import { ChatState, SuggestionBarLocationForMetrics, TestProps } from "./test-types-CgVJtwUr.cjs";
|
|
5
|
+
import { VariantInfo } from "./index-B0NW9KTj.cjs";
|
|
6
|
+
import { Context, CustServiceAttachment, FormSubmittedAttributes, FormType, FulfillmentDisplayStatus, GenerationParams, OrderItemInfo, OrderResponseAttributes, OrganizationConfig, OrganizationSettings, OrganizationStatusEnum, PDPAttributes, PLPAttributes, PLPIdAttributes, PageVisitCategory, ProductSearchFilterResponseAttributes, ProductSearchResponse, ProductSearchResponseAttributes, QueryTypedAttributes, SearchAttributes, SearchResponseProduct, StatsigExperiment, StatsigFeatureGate, Suggestion, SuggestionClickedAttributes, SupportedEventProductCategory, UserEvent, UserEventCategory } from "@spiffy-ai/commerce-api-client";
|
|
7
|
+
|
|
8
|
+
//#region src/application/models/cachedValue.d.ts
|
|
9
|
+
interface CachedValue {
|
|
10
|
+
value: unknown;
|
|
11
|
+
expiry: number;
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
//#region src/application/models/chatElementDisplayLocation.d.ts
|
|
15
|
+
declare enum ChatElementDisplayLocation {
|
|
16
|
+
IN_CHAT = "in_chat",
|
|
17
|
+
CHAT_PREVIEW = "chat_preview",
|
|
18
|
+
FLOATING_BUTTON = "floating_button",
|
|
19
|
+
HELP_ME_CHOOSE = "help_me_choose",
|
|
20
|
+
PLP_IMAGE_BANNER = "plp_image_banner",
|
|
21
|
+
TOP_REVIEWS_SNIPPET = "top_reviews_snippet",
|
|
22
|
+
BOTTOM_REVIEWS_SNIPPET = "bottom_reviews_snippet",
|
|
23
|
+
BLOCK_BACK_BUTTON = "block_back_button",
|
|
24
|
+
SWITCH_TO_AGENT = "switch_to_agent",
|
|
25
|
+
CONVERSATIONAL_SEARCH = "conversational_search",
|
|
26
|
+
GLOBAL_SEARCH_ENTRYPOINT = "global_search_entrypoint",
|
|
27
|
+
SEARCH_NAV_ENTRYPOINT = "search_nav_entrypoint",
|
|
28
|
+
SEARCH_PROMPT = "search_prompt",
|
|
29
|
+
SEARCH_PROMPT_BUTTON = "search_prompt_button",
|
|
30
|
+
PRODUCT_GRID = "product_grid",
|
|
31
|
+
UNSPECIFIED = "unspecified",
|
|
32
|
+
FILTER_MODAL = "filter_modal",
|
|
33
|
+
PROMPT_CARD = "prompt_card",
|
|
34
|
+
WINDOW_API_CALL = "window_api_call",
|
|
35
|
+
}
|
|
36
|
+
//#endregion
|
|
37
|
+
//#region src/application/models/clientDetails.d.ts
|
|
38
|
+
interface ClientDetails {
|
|
39
|
+
os?: string;
|
|
40
|
+
osVersion?: string;
|
|
41
|
+
deviceBrand?: string;
|
|
42
|
+
deviceManufacturer?: string;
|
|
43
|
+
deviceModel?: string;
|
|
44
|
+
carrier?: string;
|
|
45
|
+
country?: string;
|
|
46
|
+
region?: string;
|
|
47
|
+
browser?: string;
|
|
48
|
+
browserVersion?: string;
|
|
49
|
+
browserIpAddress?: string;
|
|
50
|
+
userAgent?: string;
|
|
51
|
+
}
|
|
52
|
+
//#endregion
|
|
53
|
+
//#region src/application/models/colorsConfig.d.ts
|
|
54
|
+
declare enum ColorNames {
|
|
55
|
+
TextPrimary = "text-primary",
|
|
56
|
+
TextSecondary = "text-secondary",
|
|
57
|
+
TextAccent = "text-accent",
|
|
58
|
+
TextLink = "text-link",
|
|
59
|
+
TextLight = "text-light",
|
|
60
|
+
BackgroundPrimary = "background-primary",
|
|
61
|
+
BackgroundSecondary = "background-secondary",
|
|
62
|
+
BackgroundSecondaryDark = "background-secondary-dark",
|
|
63
|
+
BackgroundTertiary = "background-tertiary",
|
|
64
|
+
BackgroundDark = "background-dark",
|
|
65
|
+
BackgroundLight = "background-light",
|
|
66
|
+
BackgroundSaturated = "background-saturated",
|
|
67
|
+
BorderLight = "border-light",
|
|
68
|
+
BorderMedium = "border-medium",
|
|
69
|
+
BorderDark = "border-dark",
|
|
70
|
+
BorderOutline = "border-outline",
|
|
71
|
+
AccentPrimary = "accent-primary",
|
|
72
|
+
AccentSecondary = "accent-secondary",
|
|
73
|
+
}
|
|
74
|
+
type ColorMapping = { [key in ColorNames]: string };
|
|
75
|
+
declare const colorVar: (color: ColorNames) => string;
|
|
76
|
+
//#endregion
|
|
77
|
+
//#region src/application/models/conversationalSearchIds.d.ts
|
|
78
|
+
type ConversationalSearchIds = {
|
|
79
|
+
conversationalSearchEntrypointId?: string;
|
|
80
|
+
conversationalSearchInputId?: string;
|
|
81
|
+
conversationalSearchModalId?: string;
|
|
82
|
+
};
|
|
83
|
+
//#endregion
|
|
84
|
+
//#region src/application/models/dataLayer.d.ts
|
|
85
|
+
/**
|
|
86
|
+
* Base interface for common properties across all ecommerce events
|
|
87
|
+
*/
|
|
88
|
+
interface BaseEcommerceEvent {
|
|
89
|
+
event: string;
|
|
90
|
+
ecommerce: UAEcommerceData | GA4EcommerceData;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Legacy universal analytics data. The actual payload contains more fields, but we
|
|
94
|
+
* only need the ones listed below.
|
|
95
|
+
*/
|
|
96
|
+
interface UAEcommerceData {
|
|
97
|
+
add: {
|
|
98
|
+
products: {
|
|
99
|
+
name: string;
|
|
100
|
+
category: string;
|
|
101
|
+
price: string;
|
|
102
|
+
quantity: string;
|
|
103
|
+
}[];
|
|
104
|
+
currencyCode: string;
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Google Analytics 4 data. The actual payload contains more fields, but we
|
|
109
|
+
* only need the ones listed below.
|
|
110
|
+
*/
|
|
111
|
+
interface GA4EcommerceData {
|
|
112
|
+
currency: string;
|
|
113
|
+
items: {
|
|
114
|
+
item_name: string;
|
|
115
|
+
item_category: string;
|
|
116
|
+
price: number;
|
|
117
|
+
quantity: number;
|
|
118
|
+
}[];
|
|
119
|
+
}
|
|
120
|
+
interface UAEcommerceEvent extends BaseEcommerceEvent {
|
|
121
|
+
ecommerce: UAEcommerceData;
|
|
122
|
+
}
|
|
123
|
+
interface GA4EcommerceEvent extends BaseEcommerceEvent {
|
|
124
|
+
ecommerce: GA4EcommerceData;
|
|
125
|
+
}
|
|
126
|
+
//#endregion
|
|
127
|
+
//#region src/application/models/events.d.ts
|
|
128
|
+
declare enum SpiffyEventName {
|
|
129
|
+
WidgetOpen = "spiffy:widgetopen",
|
|
130
|
+
WidgetClose = "spiffy:widgetclose",
|
|
131
|
+
}
|
|
132
|
+
//#endregion
|
|
133
|
+
//#region src/application/models/featureGates.d.ts
|
|
134
|
+
declare enum FeatureGates {
|
|
135
|
+
IsClientSessionEnabled = "is_client_session_enabled",
|
|
136
|
+
IsNewFeatureEnabled = "is_new_feature_enabled",
|
|
137
|
+
IsFineTunedModel8b = "is_fine_tuned_model_8b",
|
|
138
|
+
IsIntegratedCXEnabled = "is_integrated_cx_enabled",
|
|
139
|
+
IsNonShapewearEnabled = "is_non_shapewear_enabled",
|
|
140
|
+
IsImageBannerEnabled = "is_image_banner_enabled",
|
|
141
|
+
IsOrderLookupEnabled = "is_order_lookup_enabled",
|
|
142
|
+
IsSummarizeReviewsEnabled = "is_summarize_reviews_enabled",
|
|
143
|
+
IsGlobalSearchEnabled = "is_global_search_enabled",
|
|
144
|
+
IsImagePromptEnabled = "is_image_prompt_enabled",
|
|
145
|
+
IsWatermarkEnabled = "is_watermark_enabled",
|
|
146
|
+
IsInferenceRegion0 = "is_inference_region_0",
|
|
147
|
+
IsGraphQLUIConfigsEnabled = "is_graphql_ui_configs_enabled",
|
|
148
|
+
IsGraphQLPageConfigsEnabled = "is_graphql_page_configs_enabled",
|
|
149
|
+
IsGraphQLComponentConfigsEnabled = "is_graphql_component_configs_enabled",
|
|
150
|
+
IsChatVariantEnabled = "is_chat_variant_enabled",
|
|
151
|
+
IsChatVariantAEnabled = "is_chat_variant_a_enabled",
|
|
152
|
+
IsChatVariantBEnabled = "is_chat_variant_b_enabled",
|
|
153
|
+
IsUserQueryAlwaysEnabled = "is_user_query_always_enabled",
|
|
154
|
+
}
|
|
155
|
+
//#endregion
|
|
156
|
+
//#region src/types/customerService.d.ts
|
|
157
|
+
declare enum CustomerServiceType {
|
|
158
|
+
shopify = "shopify",
|
|
159
|
+
gorgias = "gorgias",
|
|
160
|
+
kustomer = "kustomer",
|
|
161
|
+
groove = "groove",
|
|
162
|
+
tidio = "tidio",
|
|
163
|
+
zowie = "zowie",
|
|
164
|
+
redo = "redo",
|
|
165
|
+
gladly = "gladly",
|
|
166
|
+
richpanel = "richpanel",
|
|
167
|
+
zendesk = "zendesk",
|
|
168
|
+
unsupported = "unsupported",
|
|
169
|
+
}
|
|
170
|
+
declare enum CustomerServiceIntegrationMode {
|
|
171
|
+
none = "none",
|
|
172
|
+
simple = "simple",
|
|
173
|
+
full = "full",
|
|
174
|
+
}
|
|
175
|
+
//#endregion
|
|
176
|
+
//#region src/merchants/gridInsertion.d.ts
|
|
177
|
+
declare enum GridInsertionType {
|
|
178
|
+
FIXED_1 = "fixed-1",
|
|
179
|
+
FIXED_2 = "fixed-2",
|
|
180
|
+
FIXED_3 = "fixed-3",
|
|
181
|
+
FIXED_4 = "fixed-4",
|
|
182
|
+
FIXED_5 = "fixed-5",
|
|
183
|
+
FIXED_6 = "fixed-6",
|
|
184
|
+
FIXED_7 = "fixed-7",
|
|
185
|
+
FIXED_8 = "fixed-8",
|
|
186
|
+
FIXED_9 = "fixed-9",
|
|
187
|
+
FIXED_12 = "fixed-12",
|
|
188
|
+
FIXED_13 = "fixed-13",
|
|
189
|
+
ROW_1 = "row-1",
|
|
190
|
+
ROW_2 = "row-2",
|
|
191
|
+
ROW_3 = "row-3",
|
|
192
|
+
ROW_4 = "row-4",
|
|
193
|
+
}
|
|
194
|
+
//#endregion
|
|
195
|
+
//#region src/merchants/domInsertion.d.ts
|
|
196
|
+
declare enum DOMInsertionType {
|
|
197
|
+
AFTER = "after",
|
|
198
|
+
BEFORE = "before",
|
|
199
|
+
ADJACENT_AFTER_BEGIN = "adjacent-after-begin",
|
|
200
|
+
ADJACENT_BEFORE_BEGIN = "adjacent-before-begin",
|
|
201
|
+
ADJACENT_AFTER_END = "adjacent-after-end",
|
|
202
|
+
ADJACENT_BEFORE_END = "adjacent-before-end",
|
|
203
|
+
APPEND_CHILD = "append-child",
|
|
204
|
+
NONE = "none",
|
|
205
|
+
}
|
|
206
|
+
//#endregion
|
|
207
|
+
//#region src/application/models/api/orgAnalyticsConfig.d.ts
|
|
208
|
+
interface OrgAnalyticsConfig {
|
|
209
|
+
amplitude?: OrgAnalyticsAmplitudeConfig;
|
|
210
|
+
customerService?: OrgAnalyticsCustomerServiceConfig;
|
|
211
|
+
googleAnalytics?: OrgAnalyticsGoogleAnalyticsConfig;
|
|
212
|
+
}
|
|
213
|
+
interface OrgAnalyticsAmplitudeConfig {
|
|
214
|
+
sessionReplayEnabled: boolean;
|
|
215
|
+
sessionReplaySampleRate: number;
|
|
216
|
+
trackingEnabled: boolean;
|
|
217
|
+
}
|
|
218
|
+
interface OrgAnalyticsCustomerServiceConfig {
|
|
219
|
+
provider: string;
|
|
220
|
+
}
|
|
221
|
+
interface OrgAnalyticsGoogleAnalyticsConfig {
|
|
222
|
+
measurementId?: string;
|
|
223
|
+
}
|
|
224
|
+
//#endregion
|
|
225
|
+
//#region src/application/models/api/organizationConfig.d.ts
|
|
226
|
+
interface OrganizationConfig$1 {
|
|
227
|
+
createdAt: string;
|
|
228
|
+
namespace: string;
|
|
229
|
+
isLatest: boolean;
|
|
230
|
+
version: string;
|
|
231
|
+
updatedAt: string;
|
|
232
|
+
config: OrgAnalyticsConfig;
|
|
233
|
+
organizationId?: string;
|
|
234
|
+
id?: string;
|
|
235
|
+
}
|
|
236
|
+
//#endregion
|
|
237
|
+
//#region src/application/models/api/orgConfigResults.d.ts
|
|
238
|
+
interface OrgConfigExperiment {
|
|
239
|
+
group?: string;
|
|
240
|
+
groupName?: string;
|
|
241
|
+
name?: string;
|
|
242
|
+
ruleId?: string;
|
|
243
|
+
value?: Record<string, unknown>;
|
|
244
|
+
}
|
|
245
|
+
interface OrgConfigFeatureGate {
|
|
246
|
+
groupName?: string;
|
|
247
|
+
name?: string;
|
|
248
|
+
ruleId?: string;
|
|
249
|
+
value?: boolean;
|
|
250
|
+
}
|
|
251
|
+
interface Organization {
|
|
252
|
+
id: string;
|
|
253
|
+
displayName: string;
|
|
254
|
+
domain: string;
|
|
255
|
+
shortName: string;
|
|
256
|
+
status: OrganizationStatusEnum;
|
|
257
|
+
createdAt?: string;
|
|
258
|
+
updatedAt?: string;
|
|
259
|
+
}
|
|
260
|
+
interface OrganizationSettings$1 {
|
|
261
|
+
org: Organization;
|
|
262
|
+
settings: Record<string, unknown>;
|
|
263
|
+
}
|
|
264
|
+
interface OrgConfig {
|
|
265
|
+
configs: OrganizationConfig$1[];
|
|
266
|
+
experiments: OrgConfigExperiment[];
|
|
267
|
+
gates: OrgConfigFeatureGate[];
|
|
268
|
+
org: OrganizationSettings$1;
|
|
269
|
+
colorsConfig?: ColorMapping;
|
|
270
|
+
frontendConfig?: FrontendConfig;
|
|
271
|
+
}
|
|
272
|
+
//#endregion
|
|
273
|
+
//#region src/contexts/types.d.ts
|
|
274
|
+
type ShowFloatingButtonOptions = "always" | "after-interaction-on-mobile-always-desktop" | "after-interaction-anywhere" | "never";
|
|
275
|
+
type FloatingEntryPointConfig = {
|
|
276
|
+
position: "bottom-left" | "middle-left" | "middle-right" | "bottom-right";
|
|
277
|
+
expansionText?: {
|
|
278
|
+
pdp: string;
|
|
279
|
+
plp: string;
|
|
280
|
+
};
|
|
281
|
+
minimizedColor: string;
|
|
282
|
+
expandedColor: string;
|
|
283
|
+
textColor?: string;
|
|
284
|
+
showOption: ShowFloatingButtonOptions;
|
|
285
|
+
iconSVGSrc?: string;
|
|
286
|
+
iconSize?: number;
|
|
287
|
+
iconStrokeColor?: string;
|
|
288
|
+
iconFillColor?: string;
|
|
289
|
+
height?: number;
|
|
290
|
+
fontSize?: number;
|
|
291
|
+
};
|
|
292
|
+
type WelcomeSectionVariant = "standard" | "outlined";
|
|
293
|
+
type WelcomeSectionColorVariant = "standard" | "accent" | "brand" | "light";
|
|
294
|
+
type WelcomeSectionConfig = {
|
|
295
|
+
variant: WelcomeSectionVariant;
|
|
296
|
+
colorVariant?: WelcomeSectionColorVariant;
|
|
297
|
+
title?: string;
|
|
298
|
+
subtitle?: string;
|
|
299
|
+
iconName?: string;
|
|
300
|
+
imageSrc?: string;
|
|
301
|
+
};
|
|
302
|
+
type ChatPreviewConfig = {
|
|
303
|
+
variant: "flat" | "filled" | "outlined";
|
|
304
|
+
largeProductComparison?: boolean;
|
|
305
|
+
filledBackgroundColor: string;
|
|
306
|
+
iconFillColor: string;
|
|
307
|
+
buttonTextColor?: string;
|
|
308
|
+
buttonTextSecondaryColor?: string;
|
|
309
|
+
buttonTextHoverColor?: string;
|
|
310
|
+
buttonBackgroundColor: string;
|
|
311
|
+
buttonBackgroundHoverColor: string;
|
|
312
|
+
buttonBorderColor?: string;
|
|
313
|
+
buttonBorderHoverColor?: string;
|
|
314
|
+
copies: {
|
|
315
|
+
pdp: string[];
|
|
316
|
+
plp: string[];
|
|
317
|
+
};
|
|
318
|
+
staticSuggestionCopies?: {
|
|
319
|
+
pdp: string[];
|
|
320
|
+
plp: string[];
|
|
321
|
+
};
|
|
322
|
+
staticPLPImages?: string[];
|
|
323
|
+
footerConfig?: ChatPreviewFooterConfig;
|
|
324
|
+
headerConfig?: ChatPreviewHeaderConfig;
|
|
325
|
+
topMargin?: number;
|
|
326
|
+
};
|
|
327
|
+
type ChatPreviewHeaderConfig = {
|
|
328
|
+
title?: string;
|
|
329
|
+
imageSrc?: string;
|
|
330
|
+
imageHeight?: number;
|
|
331
|
+
sparklesColor?: string;
|
|
332
|
+
fontSize?: string;
|
|
333
|
+
iconWidth?: string;
|
|
334
|
+
iconHeight?: string;
|
|
335
|
+
};
|
|
336
|
+
interface ChatPreviewFooterConfig {
|
|
337
|
+
hasFade?: boolean;
|
|
338
|
+
suggestionButtonVariant?: "dark" | "light" | "outlined";
|
|
339
|
+
suggestionsBackground?: string;
|
|
340
|
+
replyButtonIcon?: "send" | "magnifyingGlass" | "thinMagnifyingGlass" | "searchIcon";
|
|
341
|
+
replyButtonText?: string;
|
|
342
|
+
replyInputHasShadow?: boolean;
|
|
343
|
+
replyInputHasBorder?: boolean;
|
|
344
|
+
backgroundColor?: string;
|
|
345
|
+
}
|
|
346
|
+
type ProductReviewStyleVariant = "standard" | "bordered";
|
|
347
|
+
type ProductReviewColorVariant = "neutral" | "brand" | "premium";
|
|
348
|
+
interface ProductReviewConfig {
|
|
349
|
+
styleVariant: ProductReviewStyleVariant;
|
|
350
|
+
colorVariant: ProductReviewColorVariant;
|
|
351
|
+
verifiedBuyerTitle: string;
|
|
352
|
+
incentivizedReviewFlag?: boolean;
|
|
353
|
+
}
|
|
354
|
+
type PageCardVariant = "filled" | "outlined" | "minimal";
|
|
355
|
+
type PageCardHoverVariant = "none" | "shadow" | "lift";
|
|
356
|
+
type PageCardIconVariant = "primary" | "accent" | "background" | "none";
|
|
357
|
+
type PageCardConfig = {
|
|
358
|
+
variant: PageCardVariant;
|
|
359
|
+
hoverVariant: PageCardHoverVariant;
|
|
360
|
+
iconVariant: PageCardIconVariant;
|
|
361
|
+
};
|
|
362
|
+
type ProductCardVariant = "filled" | "bordered" | "minimal" | "transparentBordered";
|
|
363
|
+
type ProductCardHoverVariant = "backgroundDark" | "none";
|
|
364
|
+
type ProductCardLayoutVariant = "normal" | "tall" | "square";
|
|
365
|
+
interface ProductCardConfig {
|
|
366
|
+
variant: ProductCardVariant;
|
|
367
|
+
hoverVariant: ProductCardHoverVariant;
|
|
368
|
+
layoutVariant: ProductCardLayoutVariant;
|
|
369
|
+
pricePrefix?: string;
|
|
370
|
+
}
|
|
371
|
+
type CSSwitchConfig = {
|
|
372
|
+
variant: "attached" | "detached";
|
|
373
|
+
backgroundColor: string;
|
|
374
|
+
borderColor: string;
|
|
375
|
+
selectedTextColor: string;
|
|
376
|
+
selectedBackgroundColor?: string;
|
|
377
|
+
unselectedTextColor: string;
|
|
378
|
+
unselectedBackgroundColor?: string;
|
|
379
|
+
supportTitle?: string;
|
|
380
|
+
spiffyTitle?: string;
|
|
381
|
+
spiffyTitleHasLogo?: boolean;
|
|
382
|
+
};
|
|
383
|
+
type ChatHeaderConfig = {
|
|
384
|
+
collapsedColor: string;
|
|
385
|
+
expandedColor: string;
|
|
386
|
+
chevronColor: string;
|
|
387
|
+
imageSrc?: string;
|
|
388
|
+
icon?: React.FunctionComponent<React.SVGProps<SVGSVGElement>>;
|
|
389
|
+
closeIcon?: React.FunctionComponent<React.SVGProps<SVGSVGElement>>;
|
|
390
|
+
borderBottom?: string;
|
|
391
|
+
headerBarHeightPartialView: number;
|
|
392
|
+
headerBarHeightFullView: number;
|
|
393
|
+
customerSupportSwitchConfig?: CSSwitchConfig;
|
|
394
|
+
};
|
|
395
|
+
type SimpleCustomerServiceIntegration = {
|
|
396
|
+
integrationMode: CustomerServiceIntegrationMode;
|
|
397
|
+
provider: CustomerServiceType;
|
|
398
|
+
useUnifiedButton?: boolean;
|
|
399
|
+
maxfileUploadSize?: number;
|
|
400
|
+
};
|
|
401
|
+
type FullCustomerServiceIntegration = {
|
|
402
|
+
integrationMode: CustomerServiceIntegrationMode;
|
|
403
|
+
provider: CustomerServiceType;
|
|
404
|
+
useUnifiedButton?: boolean;
|
|
405
|
+
chatEnabledDuringBusinessHours?: boolean;
|
|
406
|
+
showNameInput?: boolean;
|
|
407
|
+
formAiName?: string;
|
|
408
|
+
welcomeTitle: string;
|
|
409
|
+
welcomeDescription: string;
|
|
410
|
+
showWelcomeOnForm?: boolean;
|
|
411
|
+
contactSubjectOptions?: string[];
|
|
412
|
+
getCustomWaitingMessage?: (name?: string) => string;
|
|
413
|
+
withinBusinessHoursMessage?: string;
|
|
414
|
+
withinBusinessHoursWaitingMessage?: string;
|
|
415
|
+
outsideBusinessHoursMessage?: string;
|
|
416
|
+
outsideBusinessHoursWaitingMessage?: string;
|
|
417
|
+
withinBusinessHoursFormMessage?: string;
|
|
418
|
+
outsideBusinessHoursFormMessage?: string;
|
|
419
|
+
suggestedAIQuestions?: string[];
|
|
420
|
+
businessHoursPolling?: number;
|
|
421
|
+
maxfileUploadSize?: number;
|
|
422
|
+
/**
|
|
423
|
+
* @deprecated This is handled by the BE.
|
|
424
|
+
*/
|
|
425
|
+
businessHoursStartUTC?: string;
|
|
426
|
+
/**
|
|
427
|
+
* @deprecated This is handled by the BE.
|
|
428
|
+
*/
|
|
429
|
+
businessHoursEndUTC?: string;
|
|
430
|
+
/**
|
|
431
|
+
* @deprecated This is handled by the BE.
|
|
432
|
+
*/
|
|
433
|
+
businessHoursTimezone?: string;
|
|
434
|
+
showAISuggestionsWithinBusinessHours?: boolean;
|
|
435
|
+
waitingMessagePosition?: "BEFORE_MESSAGES" | "AFTER_MESSAGES";
|
|
436
|
+
legalMessage?: string;
|
|
437
|
+
withinBusinessHoursInitialState?: ChatState;
|
|
438
|
+
outsideBusinessHoursInitialState?: ChatState;
|
|
439
|
+
withinBusinessHoursButtontext?: string;
|
|
440
|
+
outsideBusinessHoursButtontext?: string;
|
|
441
|
+
reopenChatMessage: string;
|
|
442
|
+
};
|
|
443
|
+
type CustomerServiceIntegration = SimpleCustomerServiceIntegration | FullCustomerServiceIntegration;
|
|
444
|
+
type ConversationalSeach = {
|
|
445
|
+
enabled?: boolean;
|
|
446
|
+
replyInput?: ReplyInputConfig;
|
|
447
|
+
suggestions?: string[];
|
|
448
|
+
entrypointBgColor?: string;
|
|
449
|
+
entrypointTextColor?: string;
|
|
450
|
+
entrypointBtnColor?: string;
|
|
451
|
+
entrypointBtnTextColor?: string;
|
|
452
|
+
entrypointBtnBorderColor?: string;
|
|
453
|
+
entrypointContainer?: string;
|
|
454
|
+
entrypointTrigger?: string;
|
|
455
|
+
productGridContainer?: string;
|
|
456
|
+
generalSearchBtn?: string;
|
|
457
|
+
pageContent?: string;
|
|
458
|
+
searchContent?: string;
|
|
459
|
+
sortingTitle?: string;
|
|
460
|
+
selectionTitle?: string;
|
|
461
|
+
sortingFont?: string;
|
|
462
|
+
optionsFont?: string;
|
|
463
|
+
sortingButtonText?: string;
|
|
464
|
+
};
|
|
465
|
+
type ChatMessageVariant = "standard" | "premium" | "accent";
|
|
466
|
+
interface ChatMessageConfig {
|
|
467
|
+
assistantChatTitle: string;
|
|
468
|
+
variant: ChatMessageVariant;
|
|
469
|
+
productLink: {
|
|
470
|
+
variant: ProductLinkVariant;
|
|
471
|
+
hoverVariant: ProductLinkHoverVariant;
|
|
472
|
+
iconVariant: ProductLinkIconVariant;
|
|
473
|
+
};
|
|
474
|
+
}
|
|
475
|
+
interface ReplyInputConfig {
|
|
476
|
+
size?: "md" | "lg";
|
|
477
|
+
sendIcon: "arrowUp" | "send" | "search";
|
|
478
|
+
placeholder?: string;
|
|
479
|
+
}
|
|
480
|
+
interface PartialViewConfig {
|
|
481
|
+
maxHeight: number;
|
|
482
|
+
borderRadius?: string;
|
|
483
|
+
}
|
|
484
|
+
type ProductLinkIconVariant = "accentPrimary" | "backgroundPrimary" | "backgroundPrimaryDark" | "borderLight" | "backgroundSaturated";
|
|
485
|
+
type ProductLinkVariant = "textLink";
|
|
486
|
+
type ProductLinkHoverVariant = "backgroundDark";
|
|
487
|
+
type SearchCardVariant = "backgroundPrimary" | "backgroundSecondary" | "backgroundSecondaryDark" | "backgroundLight" | "backgroundSaturated";
|
|
488
|
+
type SuggestionButtonVariant = "outlined" | "outlinedLight" | "primary" | "secondary" | "tertiary" | "dark" | "darkAccent" | "darkPrimary" | "secondaryDark" | "secondaryAccent" | "transparent" | "transparentDark" | "lightDark";
|
|
489
|
+
interface SuggestionButtonConfig {
|
|
490
|
+
variant?: SuggestionButtonVariant;
|
|
491
|
+
hoverVariant?: SuggestionButtonVariant;
|
|
492
|
+
answerVariant?: SuggestionButtonVariant;
|
|
493
|
+
borderRadius?: "sm" | "md" | "lg";
|
|
494
|
+
}
|
|
495
|
+
type NumRows = "default" | "alwaysOneRow" | "alwaysTwoRows" | "twoRowsOnMobile";
|
|
496
|
+
interface AlphabeticFilterSorting {
|
|
497
|
+
type: "alphabetic";
|
|
498
|
+
}
|
|
499
|
+
interface ProductCountFilterSorting {
|
|
500
|
+
type: "productCount";
|
|
501
|
+
}
|
|
502
|
+
interface CustomFilterSorting {
|
|
503
|
+
type: "custom";
|
|
504
|
+
map: Record<string, number>;
|
|
505
|
+
}
|
|
506
|
+
type FilterSorting = AlphabeticFilterSorting | ProductCountFilterSorting | CustomFilterSorting;
|
|
507
|
+
interface BaseFilterConfig {
|
|
508
|
+
filterId: string;
|
|
509
|
+
displayName: string;
|
|
510
|
+
}
|
|
511
|
+
interface DynamicFilterConfig extends BaseFilterConfig {
|
|
512
|
+
type: "dynamic";
|
|
513
|
+
attribute: string;
|
|
514
|
+
sorting: FilterSorting;
|
|
515
|
+
}
|
|
516
|
+
interface PriceFilterConfig extends BaseFilterConfig {
|
|
517
|
+
type: "price";
|
|
518
|
+
bucketSize: number;
|
|
519
|
+
}
|
|
520
|
+
type FilterAttribute = DynamicFilterConfig | PriceFilterConfig;
|
|
521
|
+
type SearchZeroStateVariant = "backgroundTertiary" | "backgroundDark" | "backgroundPrimary";
|
|
522
|
+
type SearchZeroStateLayout = "input" | "icon";
|
|
523
|
+
type SearchInputVariant = "standard";
|
|
524
|
+
type SearchIconVariant = "thin" | "bold";
|
|
525
|
+
type SearchFilterSidebarVariant = "darkButton" | "lightButton";
|
|
526
|
+
type ProductGridVariant = "standard" | "square";
|
|
527
|
+
type UserQueryButtonIcon = "magnifyingGlass" | "send" | "magnifyingGlassThin" | "sendArrow" | "searchIcon";
|
|
528
|
+
interface UserQueryButtonConfig {
|
|
529
|
+
variant?: "box" | "underlineLight" | "underlineDark";
|
|
530
|
+
placeholderText?: string;
|
|
531
|
+
icon: UserQueryButtonIcon;
|
|
532
|
+
}
|
|
533
|
+
interface TermsAndConditionsConfig {
|
|
534
|
+
copy: string;
|
|
535
|
+
link: string;
|
|
536
|
+
linkText: string;
|
|
537
|
+
}
|
|
538
|
+
interface MerchantVariantSettings {
|
|
539
|
+
dynamicVariants: {
|
|
540
|
+
enabled: boolean;
|
|
541
|
+
refreshInterval?: number;
|
|
542
|
+
};
|
|
543
|
+
}
|
|
544
|
+
interface FloatingChatConfig {
|
|
545
|
+
enableWatermark: boolean;
|
|
546
|
+
userQueryInputEnabled: boolean;
|
|
547
|
+
ignoreFirstModelResponse?: boolean;
|
|
548
|
+
neverShowSingleProductCards?: boolean;
|
|
549
|
+
termsAndConditionsConfig?: TermsAndConditionsConfig;
|
|
550
|
+
suggestionButtonConfig?: SuggestionButtonConfig;
|
|
551
|
+
replyInputConfig: ReplyInputConfig;
|
|
552
|
+
}
|
|
553
|
+
interface SearchConfig {
|
|
554
|
+
enableGlobalSearch: boolean;
|
|
555
|
+
searchFilterConfig: FilterAttribute[];
|
|
556
|
+
redirectSearchResultsUrl?: string;
|
|
557
|
+
additiveDynamicFilters?: boolean;
|
|
558
|
+
}
|
|
559
|
+
type OrgUIConfig = {
|
|
560
|
+
shortName: string;
|
|
561
|
+
id?: string;
|
|
562
|
+
floatingEntrypointConfig?: FloatingEntryPointConfig;
|
|
563
|
+
chatPreviewConfig?: ChatPreviewConfig;
|
|
564
|
+
customerServiceIntegration: CustomerServiceIntegration;
|
|
565
|
+
conversationalSearch?: ConversationalSeach;
|
|
566
|
+
merchantOverrideCss?: string;
|
|
567
|
+
hiddenElementSelectors?: string[];
|
|
568
|
+
merchantVariantSettings?: MerchantVariantSettings;
|
|
569
|
+
floatingChatConfig: FloatingChatConfig;
|
|
570
|
+
searchConfig: SearchConfig;
|
|
571
|
+
chatHeader: ChatHeaderConfig;
|
|
572
|
+
stickyAgentSwitchSuggestion?: boolean;
|
|
573
|
+
partialViewConfig: PartialViewConfig;
|
|
574
|
+
welcomeSectionConfig?: WelcomeSectionConfig;
|
|
575
|
+
productCardConfig?: ProductCardConfig;
|
|
576
|
+
productReviewConfig?: ProductReviewConfig;
|
|
577
|
+
pageCardConfig?: PageCardConfig;
|
|
578
|
+
chatMessageConfig: ChatMessageConfig;
|
|
579
|
+
};
|
|
580
|
+
type InsertionPoint = {
|
|
581
|
+
selector: string;
|
|
582
|
+
selectionIndex?: number;
|
|
583
|
+
insertionType: DOMInsertionType;
|
|
584
|
+
};
|
|
585
|
+
type URLTest = "shopify" | "null";
|
|
586
|
+
type IdExtractor = "shopify-product-id" | "shopify-collection-id" | "shopify-product-variant-id" | "url-resolver-product-id" | "url-resolver-plp-id" | "null";
|
|
587
|
+
declare enum CategoryExtractorType {
|
|
588
|
+
VisitCategoryMap = "VisitCategoryMap",
|
|
589
|
+
VisitCategoryDefault = "VisitCategoryDefault",
|
|
590
|
+
}
|
|
591
|
+
interface BaseCategoryExtractor<T extends CategoryExtractorType> {
|
|
592
|
+
type: T;
|
|
593
|
+
}
|
|
594
|
+
interface VisitCategoryMap extends BaseCategoryExtractor<CategoryExtractorType.VisitCategoryMap> {
|
|
595
|
+
map: { [key in PageVisitCategory]?: string[] };
|
|
596
|
+
}
|
|
597
|
+
interface VisitCategoryDefault extends BaseCategoryExtractor<CategoryExtractorType.VisitCategoryDefault> {
|
|
598
|
+
value: PageVisitCategory;
|
|
599
|
+
}
|
|
600
|
+
type CategoryExtractor = VisitCategoryMap | VisitCategoryDefault;
|
|
601
|
+
type WrappingElement = {
|
|
602
|
+
className: string;
|
|
603
|
+
element: string;
|
|
604
|
+
insertionType: DOMInsertionType;
|
|
605
|
+
};
|
|
606
|
+
declare enum PageVariantTestType {
|
|
607
|
+
ShopifyPLP = "ShopifyPLP",
|
|
608
|
+
ShopifyPDP = "ShopifyPDP",
|
|
609
|
+
PageCategory = "PageCategory",
|
|
610
|
+
CatalogCategory = "CatalogCategory",
|
|
611
|
+
TopCatalogCategory = "TopCatalogCategory",
|
|
612
|
+
HasReviews = "HasReviews",
|
|
613
|
+
InCollection = "InCollection",
|
|
614
|
+
HasMerchantTag = "HasMerchantTag",
|
|
615
|
+
FeatureGate = "FeatureGate",
|
|
616
|
+
PlpId = "PlpId",
|
|
617
|
+
QueryParam = "QueryParam",
|
|
618
|
+
ProductId = "ProductId",
|
|
619
|
+
UserHasInteracted = "UserHasInteracted",
|
|
620
|
+
UserHasNotInteracted = "UserHasNotInteracted",
|
|
621
|
+
isLoading = "isLoading",
|
|
622
|
+
isProductComparison = "isProductComparison",
|
|
623
|
+
Fallback = "Fallback",
|
|
624
|
+
UrlResolver = "UrlResolver",
|
|
625
|
+
Null = "null",
|
|
626
|
+
}
|
|
627
|
+
interface BasePageVariantTest<T extends PageVariantTestType> {
|
|
628
|
+
testType: T;
|
|
629
|
+
}
|
|
630
|
+
interface TopCatalogCategory extends BasePageVariantTest<PageVariantTestType.TopCatalogCategory> {
|
|
631
|
+
topCategory: string[];
|
|
632
|
+
}
|
|
633
|
+
interface CatalogCategoryTest extends BasePageVariantTest<PageVariantTestType.CatalogCategory> {
|
|
634
|
+
category: SupportedEventProductCategory;
|
|
635
|
+
}
|
|
636
|
+
interface HasReviewsTest extends BasePageVariantTest<PageVariantTestType.HasReviews> {
|
|
637
|
+
reviewMinimum?: number;
|
|
638
|
+
}
|
|
639
|
+
interface InCollectionTest extends BasePageVariantTest<PageVariantTestType.InCollection> {
|
|
640
|
+
collections: string[];
|
|
641
|
+
}
|
|
642
|
+
interface HasMerchantTagTest extends BasePageVariantTest<PageVariantTestType.HasMerchantTag> {
|
|
643
|
+
merchantTags: string[];
|
|
644
|
+
}
|
|
645
|
+
interface ShopifyPLPURLTest extends BasePageVariantTest<PageVariantTestType.ShopifyPLP> {}
|
|
646
|
+
interface ShopifyPDPURLTest extends BasePageVariantTest<PageVariantTestType.ShopifyPDP> {}
|
|
647
|
+
interface PageCategoryTest extends BasePageVariantTest<PageVariantTestType.PageCategory> {
|
|
648
|
+
extractor: CategoryExtractor;
|
|
649
|
+
}
|
|
650
|
+
interface FeatureGateTest extends BasePageVariantTest<PageVariantTestType.FeatureGate> {
|
|
651
|
+
featureGate: FeatureGates;
|
|
652
|
+
}
|
|
653
|
+
interface ProductIdTest extends BasePageVariantTest<PageVariantTestType.ProductId> {
|
|
654
|
+
productIdExtractor: IdExtractor;
|
|
655
|
+
productIds: string[];
|
|
656
|
+
}
|
|
657
|
+
interface PlpIdTest extends BasePageVariantTest<PageVariantTestType.PlpId> {
|
|
658
|
+
plpIdExtractor: IdExtractor;
|
|
659
|
+
plpIds: string[];
|
|
660
|
+
}
|
|
661
|
+
interface QueryParamTest extends BasePageVariantTest<PageVariantTestType.QueryParam> {
|
|
662
|
+
queryParam: string;
|
|
663
|
+
}
|
|
664
|
+
interface UserHasInteractedTest extends BasePageVariantTest<PageVariantTestType.UserHasInteracted> {}
|
|
665
|
+
interface UserHasNotInteractedTest extends BasePageVariantTest<PageVariantTestType.UserHasNotInteracted> {}
|
|
666
|
+
interface IsLoadingTest extends BasePageVariantTest<PageVariantTestType.isLoading> {}
|
|
667
|
+
interface IsProductComparison extends BasePageVariantTest<PageVariantTestType.isProductComparison> {}
|
|
668
|
+
interface PageFallbackTest extends BasePageVariantTest<PageVariantTestType.Fallback> {}
|
|
669
|
+
interface UrlResolverTest extends BasePageVariantTest<PageVariantTestType.UrlResolver> {}
|
|
670
|
+
type PageVariantTest = PageCategoryTest | ShopifyPLPURLTest | ShopifyPDPURLTest | CatalogCategoryTest | TopCatalogCategory | HasReviewsTest | InCollectionTest | HasMerchantTagTest | FeatureGateTest | ProductIdTest | PlpIdTest | QueryParamTest | UserHasInteractedTest | UserHasNotInteractedTest | IsLoadingTest | IsProductComparison | PageFallbackTest | UrlResolverTest;
|
|
671
|
+
/**
|
|
672
|
+
* Configuration for the social proof embedded widget
|
|
673
|
+
*
|
|
674
|
+
* @param headerTitle - The title text to display in the widget header
|
|
675
|
+
* @param staticSuggestions - A list of strings to display as suggestions in the widget
|
|
676
|
+
* @param suggestionButtonVariantDefault - The variant of the suggestion button to display in the widget footer
|
|
677
|
+
* @param suggestionButtonVariantAccent - The variant of the suggestion button to display in the widget body
|
|
678
|
+
* @param staticImageIndex - Index of the imageUrl to use from the product response
|
|
679
|
+
*/
|
|
680
|
+
interface SocialProofConfig {
|
|
681
|
+
customerQuery: string;
|
|
682
|
+
headerTitle: string;
|
|
683
|
+
staticPLPImagesLayout?: "grid" | "horizontal";
|
|
684
|
+
headerFontFamily?: string;
|
|
685
|
+
staticPLPImageNames?: string[];
|
|
686
|
+
staticImageIndex?: number;
|
|
687
|
+
suggestionButtonStrings: string[];
|
|
688
|
+
suggestionButtonVariantDefault: SuggestionButtonVariant;
|
|
689
|
+
suggestionButtonVariantAccent?: SuggestionButtonVariant;
|
|
690
|
+
suggestionButtonDataAttributes?: Record<string, string>;
|
|
691
|
+
userQueryButtonConfig?: UserQueryButtonConfig;
|
|
692
|
+
logoName?: string;
|
|
693
|
+
}
|
|
694
|
+
/**
|
|
695
|
+
* Configuration for creating the mount point for a widget
|
|
696
|
+
*
|
|
697
|
+
* @param className - Optional class name to apply to the mount point. Tailwind classes are supported
|
|
698
|
+
* and encouraged. Use this parameter to style the mounting container for the widget.
|
|
699
|
+
*/
|
|
700
|
+
type WidgetMountingConfig = {
|
|
701
|
+
mountingConfigId: string;
|
|
702
|
+
containerId: string;
|
|
703
|
+
testId: string;
|
|
704
|
+
parentInsertionPoint?: InsertionPoint;
|
|
705
|
+
insertionPoint: InsertionPoint;
|
|
706
|
+
gridInsertionType?: GridInsertionType;
|
|
707
|
+
wrappingElement?: WrappingElement;
|
|
708
|
+
divCheckSelector?: string;
|
|
709
|
+
suppressionSelector?: string;
|
|
710
|
+
style?: Partial<CSSStyleDeclaration>;
|
|
711
|
+
className?: string;
|
|
712
|
+
dataAttributes?: Record<string, string>;
|
|
713
|
+
};
|
|
714
|
+
type StaticWidgetMounting = {
|
|
715
|
+
mountingConfigId: string;
|
|
716
|
+
widgetConfigId: string;
|
|
717
|
+
};
|
|
718
|
+
type DynamicWidgetMounting = {
|
|
719
|
+
mountingConfigId: string;
|
|
720
|
+
mountingPointWidgets: WidgetDisplayTests[];
|
|
721
|
+
};
|
|
722
|
+
type WidgetDisplayTests = {
|
|
723
|
+
tests: PageVariantTest[];
|
|
724
|
+
widgetConfigId: string;
|
|
725
|
+
};
|
|
726
|
+
type WidgetMounting = StaticWidgetMounting | DynamicWidgetMounting;
|
|
727
|
+
declare enum WidgetType {
|
|
728
|
+
ChatPreview = "ChatPreview",
|
|
729
|
+
SocialProofV2 = "SocialProofV2",
|
|
730
|
+
ChatPreviewV2 = "ChatPreviewV2",
|
|
731
|
+
ChatPreviewIsLoading = "ChatPreviewIsLoading",
|
|
732
|
+
ChatPreviewPostInteraction = "ChatPreviewPostInteraction",
|
|
733
|
+
ChatPreviewProductComparison = "ChatPreviewProductComparison",
|
|
734
|
+
SuggestionBar = "SuggestionBar",
|
|
735
|
+
SuggestionBarV2 = "SuggestionBarV2",
|
|
736
|
+
ImagePromptCard = "ImagePromptCard",
|
|
737
|
+
ImageBanner = "ImageBanner",
|
|
738
|
+
SingleImagePrompt = "SingleImagePrompt",
|
|
739
|
+
SearchPrompt = "SearchPrompt",
|
|
740
|
+
SearchZeroStateEntryPoint = "SearchZeroStateEntryPoint",
|
|
741
|
+
SearchResultsEntryPoint = "SearchResultsEntryPoint",
|
|
742
|
+
SearchOverlayHost = "SearchOverlayHost",
|
|
743
|
+
NoOp = "NoOp",
|
|
744
|
+
}
|
|
745
|
+
type WidgetConfig = ChatPreviewWidgetConfig | SocialProofV2WidgetConfig | ChatPreviewV2WidgetConfig | ChatPreviewPostInteractionWidgetConfig | ChatPreviewIsLoadingWidgetConfig | ChatPreviewProductComparisonWidgetConfig | SuggestionBarWidgetV2Config | ImagePromptWidgetConfig | ImageBannerWidgetConfig | SingleImagePromptWidgetConfig | SearchPromptWidgetConfig | SearchEntryPointWidgetConfig | SearchResultsEntryPointWidgetConfig | SearchOverlayHostWidgetConfig | NoOpWidgetConfig;
|
|
746
|
+
interface BaseWidgetConfig<T extends WidgetType> {
|
|
747
|
+
widgetConfigId: string;
|
|
748
|
+
type: T;
|
|
749
|
+
contentId?: string;
|
|
750
|
+
}
|
|
751
|
+
interface ImageBannerWidgetConfig extends BaseWidgetConfig<WidgetType.ImageBanner> {
|
|
752
|
+
imageSrc: string;
|
|
753
|
+
title: string;
|
|
754
|
+
subtitle: string;
|
|
755
|
+
assistantMessage: string;
|
|
756
|
+
}
|
|
757
|
+
interface ChatPreviewWidgetConfig extends BaseWidgetConfig<WidgetType.ChatPreview> {
|
|
758
|
+
variant: "filled" | "flat" | "outlined";
|
|
759
|
+
addSeparators?: boolean;
|
|
760
|
+
socialProofConfig?: SocialProofConfig;
|
|
761
|
+
footerConfig?: ChatPreviewFooterConfig;
|
|
762
|
+
}
|
|
763
|
+
interface ChatPreviewHeaderV2Config {
|
|
764
|
+
title?: string;
|
|
765
|
+
imageSrc?: string;
|
|
766
|
+
imageHeight?: number;
|
|
767
|
+
}
|
|
768
|
+
type SingleImageConfig = {
|
|
769
|
+
layout: "single";
|
|
770
|
+
imageIndex: number;
|
|
771
|
+
};
|
|
772
|
+
type MultiImageConfig = {
|
|
773
|
+
layout: "grid" | "horizontal";
|
|
774
|
+
imageNames: string[];
|
|
775
|
+
};
|
|
776
|
+
type SocialProofImageConfig = SingleImageConfig | MultiImageConfig;
|
|
777
|
+
type ChatPreviewSuggestionButtonConfig = {
|
|
778
|
+
buttonStrings: string[];
|
|
779
|
+
accentButtonVariants?: {
|
|
780
|
+
button: SuggestionButtonVariant;
|
|
781
|
+
hover: SuggestionButtonVariant;
|
|
782
|
+
};
|
|
783
|
+
buttonVariants: {
|
|
784
|
+
button: SuggestionButtonVariant;
|
|
785
|
+
hover: SuggestionButtonVariant;
|
|
786
|
+
};
|
|
787
|
+
numRows?: NumRows;
|
|
788
|
+
};
|
|
789
|
+
type ChatPreviewAnimatedTextConfig = {
|
|
790
|
+
leadingText: string;
|
|
791
|
+
animatedStrings: string[];
|
|
792
|
+
};
|
|
793
|
+
type ChatPreviewVariant = {
|
|
794
|
+
variant: "flat";
|
|
795
|
+
} | {
|
|
796
|
+
variant: "filled";
|
|
797
|
+
backgroundFillColor: string;
|
|
798
|
+
} | {
|
|
799
|
+
variant: "outlined";
|
|
800
|
+
};
|
|
801
|
+
interface BaseChatPreviewConfig {
|
|
802
|
+
headerConfig: ChatPreviewHeaderV2Config;
|
|
803
|
+
suggestionButtonsConfig: ChatPreviewSuggestionButtonConfig;
|
|
804
|
+
userQueryButtonConfig: UserQueryButtonConfig;
|
|
805
|
+
chatPreviewVariant: ChatPreviewVariant;
|
|
806
|
+
addSeparators?: boolean;
|
|
807
|
+
}
|
|
808
|
+
interface ChatPreviewPostInteractionWidgetConfig extends BaseWidgetConfig<WidgetType.ChatPreviewPostInteraction>, BaseChatPreviewConfig {
|
|
809
|
+
chatPreviewVariant: ChatPreviewVariant;
|
|
810
|
+
addSeparators?: boolean;
|
|
811
|
+
}
|
|
812
|
+
interface ChatPreviewIsLoadingWidgetConfig extends BaseWidgetConfig<WidgetType.ChatPreviewIsLoading>, BaseChatPreviewConfig {}
|
|
813
|
+
interface ChatPreviewProductComparisonWidgetConfig extends BaseWidgetConfig<WidgetType.ChatPreviewProductComparison>, BaseChatPreviewConfig {
|
|
814
|
+
useLargeProductComparison?: boolean;
|
|
815
|
+
}
|
|
816
|
+
interface ChatPreviewV2WidgetConfig extends BaseWidgetConfig<WidgetType.ChatPreviewV2>, BaseChatPreviewConfig {
|
|
817
|
+
animatedTextConfig: ChatPreviewAnimatedTextConfig;
|
|
818
|
+
}
|
|
819
|
+
interface SocialProofV2WidgetConfig extends BaseWidgetConfig<WidgetType.SocialProofV2>, BaseChatPreviewConfig {
|
|
820
|
+
customerQuery?: string;
|
|
821
|
+
imageConfig: SocialProofImageConfig;
|
|
822
|
+
}
|
|
823
|
+
interface SuggestionBarWidgetV2Config extends BaseWidgetConfig<WidgetType.SuggestionBarV2> {
|
|
824
|
+
metricDisplayLocation: ChatElementDisplayLocation;
|
|
825
|
+
location: SuggestionBarLocationForMetrics;
|
|
826
|
+
variant: SuggestionButtonVariant;
|
|
827
|
+
hoverVariant: SuggestionButtonVariant;
|
|
828
|
+
buttonTexts: {
|
|
829
|
+
default: string[];
|
|
830
|
+
productSpecific?: {
|
|
831
|
+
[productId: string]: string[];
|
|
832
|
+
};
|
|
833
|
+
};
|
|
834
|
+
boldFirstButton?: boolean;
|
|
835
|
+
twoRowsOnMobile?: boolean;
|
|
836
|
+
animationSpeed?: "standard" | "slow" | "none";
|
|
837
|
+
buttonBorderRadius?: "sm" | "md" | "lg";
|
|
838
|
+
}
|
|
839
|
+
interface ImagePromptWidgetConfig extends BaseWidgetConfig<WidgetType.ImagePromptCard> {
|
|
840
|
+
url: string;
|
|
841
|
+
lightText?: boolean;
|
|
842
|
+
title: string;
|
|
843
|
+
subtitle: string[];
|
|
844
|
+
staticSuggestionCopies: string[];
|
|
845
|
+
userQueryButtonConfig: UserQueryButtonConfig;
|
|
846
|
+
fallbackBackgroundColor?: string;
|
|
847
|
+
}
|
|
848
|
+
interface SingleImagePromptWidgetConfig extends BaseWidgetConfig<WidgetType.SingleImagePrompt> {
|
|
849
|
+
title: string;
|
|
850
|
+
staticSuggestionCopies: string[];
|
|
851
|
+
userQueryButtonConfig: UserQueryButtonConfig;
|
|
852
|
+
}
|
|
853
|
+
interface SearchEntryPointWidgetConfig extends BaseWidgetConfig<WidgetType.SearchZeroStateEntryPoint> {
|
|
854
|
+
searchZeroStateVariant: SearchZeroStateVariant;
|
|
855
|
+
searchInputVariant: SearchInputVariant;
|
|
856
|
+
searchIconVariant?: SearchIconVariant;
|
|
857
|
+
searchIconSize?: number;
|
|
858
|
+
suggestionButtonConfig: SuggestionButtonConfig;
|
|
859
|
+
layout: SearchZeroStateLayout;
|
|
860
|
+
searchBoxPlaceholder: string;
|
|
861
|
+
animationSpeed?: "standard" | "slow" | "none";
|
|
862
|
+
compactLabel?: string;
|
|
863
|
+
initialSuggestions?: string[];
|
|
864
|
+
usingPortal?: boolean;
|
|
865
|
+
}
|
|
866
|
+
interface NoOpWidgetConfig extends BaseWidgetConfig<WidgetType.NoOp> {}
|
|
867
|
+
interface SearchOverlayHostWidgetConfig extends BaseWidgetConfig<WidgetType.SearchOverlayHost> {}
|
|
868
|
+
interface SearchResultsEntryPointWidgetConfig extends BaseWidgetConfig<WidgetType.SearchResultsEntryPoint> {
|
|
869
|
+
searchInputVariant: SearchInputVariant;
|
|
870
|
+
searchFilterSidebarVariant: SearchFilterSidebarVariant;
|
|
871
|
+
productGridVariant: ProductGridVariant;
|
|
872
|
+
searchBoxPlaceholder: string;
|
|
873
|
+
noResultsFoundText?: string;
|
|
874
|
+
}
|
|
875
|
+
interface WidgetHeaderProps extends TestProps {
|
|
876
|
+
title?: string;
|
|
877
|
+
logo?: string;
|
|
878
|
+
logoHeight?: number;
|
|
879
|
+
orgShortName: string;
|
|
880
|
+
variant?: SearchPromptVariant;
|
|
881
|
+
}
|
|
882
|
+
interface UserQueryOptions {
|
|
883
|
+
footerVariant?: "standard";
|
|
884
|
+
replyButtonText?: string;
|
|
885
|
+
replyButtonIcon?: "magnifyingGlass" | "send" | "thinMagnifyingGlass" | "ai-search";
|
|
886
|
+
}
|
|
887
|
+
type SearchPromptVariant = "primary";
|
|
888
|
+
interface SearchPromptWidgetConfig extends BaseWidgetConfig<WidgetType.SearchPrompt> {
|
|
889
|
+
variant: SearchPromptVariant;
|
|
890
|
+
title: string;
|
|
891
|
+
headerConfig: WidgetHeaderProps;
|
|
892
|
+
suggestionButtons: {
|
|
893
|
+
variant: SuggestionButtonVariant;
|
|
894
|
+
hoverVariant: SuggestionButtonVariant;
|
|
895
|
+
buttonTexts: string[];
|
|
896
|
+
};
|
|
897
|
+
footerConfig?: UserQueryOptions;
|
|
898
|
+
}
|
|
899
|
+
type PageVariantBase = {
|
|
900
|
+
variantId: string;
|
|
901
|
+
widgetMounting: WidgetMounting[];
|
|
902
|
+
variantTests: PageVariantTest[];
|
|
903
|
+
};
|
|
904
|
+
type PLPPageVariant = PageVariantBase & {
|
|
905
|
+
variantType: "plp";
|
|
906
|
+
plpIdExtractor: IdExtractor;
|
|
907
|
+
};
|
|
908
|
+
type PDPPageVariant = PageVariantBase & {
|
|
909
|
+
variantType: "pdp";
|
|
910
|
+
parentProductIdExtractor?: IdExtractor;
|
|
911
|
+
productIdExtractor: IdExtractor;
|
|
912
|
+
};
|
|
913
|
+
type VisitPageVariant = PageVariantBase & {
|
|
914
|
+
variantType: "page_visit";
|
|
915
|
+
};
|
|
916
|
+
type OtherPageVariant = PageVariantBase & {
|
|
917
|
+
variantType: "other";
|
|
918
|
+
};
|
|
919
|
+
type HomePageVariant = PageVariantBase & {
|
|
920
|
+
variantType: "homepage";
|
|
921
|
+
};
|
|
922
|
+
type SearchPageVariant = PageVariantBase & {
|
|
923
|
+
variantType: "search";
|
|
924
|
+
};
|
|
925
|
+
type PageVariantConfig = PLPPageVariant | PDPPageVariant | VisitPageVariant | OtherPageVariant | HomePageVariant | SearchPageVariant;
|
|
926
|
+
type OrgPageConfig = {
|
|
927
|
+
pageVariants: PageVariantConfig[];
|
|
928
|
+
widgetConfigs: Record<string, WidgetConfig>;
|
|
929
|
+
mountingConfigs: Record<string, WidgetMountingConfig>;
|
|
930
|
+
};
|
|
931
|
+
type OrgConfig$1 = OrgUIConfig;
|
|
932
|
+
interface EnviveConfig {
|
|
933
|
+
amplitudeApiKey?: string;
|
|
934
|
+
dataResidency?: string;
|
|
935
|
+
env?: string;
|
|
936
|
+
baseUrl?: string;
|
|
937
|
+
reactAppName?: string;
|
|
938
|
+
cdnUrl?: string;
|
|
939
|
+
contextSource?: string;
|
|
940
|
+
orgLevelApiKey?: string;
|
|
941
|
+
orgShortName?: string;
|
|
942
|
+
identifyingPrefix?: string;
|
|
943
|
+
featureOverrides?: Record<string, boolean>;
|
|
944
|
+
variantUrlOverride?: string;
|
|
945
|
+
variantInfoOverride?: any;
|
|
946
|
+
show?: boolean;
|
|
947
|
+
publicKey?: string;
|
|
948
|
+
featureGates?: OrgConfigFeatureGate[];
|
|
949
|
+
}
|
|
950
|
+
//#endregion
|
|
951
|
+
//#region src/application/models/frontendConfig.d.ts
|
|
952
|
+
interface FrontendConfig {
|
|
953
|
+
merchant_override_css?: string;
|
|
954
|
+
pageVariants?: PageVariantConfig[];
|
|
955
|
+
mountingConfigs?: Record<string, WidgetMountingConfig>;
|
|
956
|
+
widgetConfigs?: Record<string, WidgetConfig>;
|
|
957
|
+
uiConfigs?: Omit<OrgUIConfig, "merchantOverrideCss">;
|
|
958
|
+
}
|
|
959
|
+
//#endregion
|
|
960
|
+
//#region src/application/models/googleAnalyticsEvents.d.ts
|
|
961
|
+
declare enum GoogleAnalyticsEvents {
|
|
962
|
+
ADD_TO_CART_v1 = "add_to_cart",
|
|
963
|
+
ADD_TO_CART_v2 = "addToCart",
|
|
964
|
+
}
|
|
965
|
+
//#endregion
|
|
966
|
+
//#region src/application/models/message.d.ts
|
|
967
|
+
declare enum MessageRole {
|
|
968
|
+
User = "user",
|
|
969
|
+
Assistant = "assistant",
|
|
970
|
+
}
|
|
971
|
+
declare enum MessageType {
|
|
972
|
+
Text = "text",
|
|
973
|
+
SuggestionClicked = "suggestion_clicked",
|
|
974
|
+
Product = "product",
|
|
975
|
+
ProductSearch = "product_search",
|
|
976
|
+
Review = "review",
|
|
977
|
+
QueryTyped = "query_typed",
|
|
978
|
+
Separator = "separator",
|
|
979
|
+
Page = "page",
|
|
980
|
+
Search = "search",
|
|
981
|
+
Attachment = "attachment",
|
|
982
|
+
CXAgentResponse = "cx_agent_response",
|
|
983
|
+
Form = "form",
|
|
984
|
+
Order = "order",
|
|
985
|
+
ProductSearchFilter = "product_search_filter",
|
|
986
|
+
}
|
|
987
|
+
type Message = {
|
|
988
|
+
id: string;
|
|
989
|
+
role: MessageRole;
|
|
990
|
+
createdAt: string;
|
|
991
|
+
} & (TextMessageMetadata | QueryTypedMetadata | SuggestionMessageMetadata | ProductMessageMetadata | ProductSearchMessageMetadata | ReviewMessageMetadata | SeparatorMessageMetadata | PageMessageMetadata | SearchMessageMetadata | AttachmentMetadata | CXAgentResponseMetadata | FormMessageMetadata | OrderMessageMetadata | ProductSearchFilterMetadata);
|
|
992
|
+
type AttachmentMetadata = {
|
|
993
|
+
type: MessageType.Attachment;
|
|
994
|
+
metadata: {
|
|
995
|
+
message?: string;
|
|
996
|
+
attachment: CustServiceAttachment[];
|
|
997
|
+
};
|
|
998
|
+
};
|
|
999
|
+
type CXAgentResponseMetadata = {
|
|
1000
|
+
type: MessageType.CXAgentResponse;
|
|
1001
|
+
metadata: {
|
|
1002
|
+
message: string;
|
|
1003
|
+
agentName: string;
|
|
1004
|
+
};
|
|
1005
|
+
};
|
|
1006
|
+
type TextMessageMetadata = {
|
|
1007
|
+
type: MessageType.Text;
|
|
1008
|
+
metadata: TextResponseAttributes['attributes'];
|
|
1009
|
+
};
|
|
1010
|
+
type QueryTypedMetadata = {
|
|
1011
|
+
type: MessageType.QueryTyped;
|
|
1012
|
+
metadata: TextResponseAttributes['attributes'];
|
|
1013
|
+
};
|
|
1014
|
+
type SuggestionMessageMetadata = {
|
|
1015
|
+
type: MessageType.SuggestionClicked;
|
|
1016
|
+
metadata: {
|
|
1017
|
+
suggestionId: string;
|
|
1018
|
+
suggestionContent: string;
|
|
1019
|
+
};
|
|
1020
|
+
};
|
|
1021
|
+
type ProductMessageMetadata = {
|
|
1022
|
+
type: MessageType.Product;
|
|
1023
|
+
metadata: ProductResponseAttributes['attributes'];
|
|
1024
|
+
};
|
|
1025
|
+
type ProductSearchMessageMetadata = {
|
|
1026
|
+
type: MessageType.ProductSearch;
|
|
1027
|
+
metadata: SearchProductResponseAttributes['attributes'];
|
|
1028
|
+
};
|
|
1029
|
+
type ReviewMessageMetadata = {
|
|
1030
|
+
type: MessageType.Review;
|
|
1031
|
+
metadata: ReviewResponseAttributes['attributes'];
|
|
1032
|
+
};
|
|
1033
|
+
type SeparatorMessageMetadata = {
|
|
1034
|
+
type: MessageType.Separator;
|
|
1035
|
+
};
|
|
1036
|
+
type PageMessageMetadata = {
|
|
1037
|
+
type: MessageType.Page;
|
|
1038
|
+
metadata: PageResponseAttributes['attributes'];
|
|
1039
|
+
};
|
|
1040
|
+
type SearchMessageMetadata = {
|
|
1041
|
+
type: MessageType.Search;
|
|
1042
|
+
metadata: SearchResponseAttributes['attributes'];
|
|
1043
|
+
};
|
|
1044
|
+
type ProductSearchFilterMetadata = {
|
|
1045
|
+
type: MessageType.ProductSearchFilter;
|
|
1046
|
+
metadata: SearchProductFilterAttributes['attributes'];
|
|
1047
|
+
};
|
|
1048
|
+
type FormField = {
|
|
1049
|
+
key: string;
|
|
1050
|
+
title: string;
|
|
1051
|
+
type: AcceptableFormFieldType;
|
|
1052
|
+
required: boolean;
|
|
1053
|
+
format?: 'email';
|
|
1054
|
+
value?: string;
|
|
1055
|
+
};
|
|
1056
|
+
type FormMessageMetadata = {
|
|
1057
|
+
type: MessageType.Form;
|
|
1058
|
+
metadata: {
|
|
1059
|
+
formType?: FormType;
|
|
1060
|
+
fields: FormField[];
|
|
1061
|
+
};
|
|
1062
|
+
};
|
|
1063
|
+
type OrderMessageMetadata = {
|
|
1064
|
+
type: MessageType.Order;
|
|
1065
|
+
metadata: OrderResponseAttributes$1['attributes'];
|
|
1066
|
+
};
|
|
1067
|
+
//#endregion
|
|
1068
|
+
//#region src/application/models/mobilePLPChatPlacementParameter.d.ts
|
|
1069
|
+
interface MobilePLPChatPlacementParameter {
|
|
1070
|
+
rowIndex: number;
|
|
1071
|
+
}
|
|
1072
|
+
//#endregion
|
|
1073
|
+
//#region src/application/models/orgsEnum.d.ts
|
|
1074
|
+
declare const OrgShortName: {
|
|
1075
|
+
readonly Coterie: "coterie";
|
|
1076
|
+
readonly ForLoveAndLemons: "for-love-and-lemons";
|
|
1077
|
+
readonly Greenpan: "greenpan";
|
|
1078
|
+
readonly JordanCraig: "jordan-craig";
|
|
1079
|
+
readonly LarryAndSerges: "larry_and_serges";
|
|
1080
|
+
readonly LeapsAndRebounds: "leaps-and-rebounds";
|
|
1081
|
+
readonly MantraBrand: "mantra-brand";
|
|
1082
|
+
readonly Spanx: "spanx";
|
|
1083
|
+
readonly SpanxStaging: "staging-spanx";
|
|
1084
|
+
readonly Supergoop: "supergoop";
|
|
1085
|
+
readonly UniqueVintage: "unique-vintage";
|
|
1086
|
+
readonly JackArcher: "jack-archer";
|
|
1087
|
+
readonly SkinPerfection: "skin-perfection";
|
|
1088
|
+
readonly LookOptic: "look-optic";
|
|
1089
|
+
readonly FiveCbd: "five-cbd";
|
|
1090
|
+
readonly SnapSupplements: "snap-supplements";
|
|
1091
|
+
readonly Longevityrx: "longevityrx";
|
|
1092
|
+
readonly VenaCbd: "vena-cbd";
|
|
1093
|
+
readonly Medterra: "medterra";
|
|
1094
|
+
readonly Modells: "modells";
|
|
1095
|
+
readonly PressedFloral: "pressed-floral";
|
|
1096
|
+
readonly KindredBravely: "kindred-bravely";
|
|
1097
|
+
readonly WineEnthusiast: "wine-enthusiast";
|
|
1098
|
+
readonly HomegrownCannabis: "homegrown-cannabis";
|
|
1099
|
+
readonly DreamlandBaby: "dreamland-baby";
|
|
1100
|
+
readonly Bandolier: "bandolier";
|
|
1101
|
+
readonly WestonJonBoucher: "weston-jon-boucher";
|
|
1102
|
+
readonly KutFromTheKloth: "kut-from-the-kloth";
|
|
1103
|
+
readonly GrooveLife: "groove-life";
|
|
1104
|
+
readonly Carpe: "carpe";
|
|
1105
|
+
readonly WolfTactical: "wolf-tactical";
|
|
1106
|
+
readonly WolfMattress: "wolfmattress";
|
|
1107
|
+
readonly Default: "default";
|
|
1108
|
+
};
|
|
1109
|
+
//#endregion
|
|
1110
|
+
//#region src/application/models/productExperiment.d.ts
|
|
1111
|
+
declare enum ProductExperiment {
|
|
1112
|
+
Default = "default",
|
|
1113
|
+
}
|
|
1114
|
+
//#endregion
|
|
1115
|
+
//#region src/application/models/spanxTakeAQuizCtaParameter.d.ts
|
|
1116
|
+
interface SpanxTakeAQuizCtaParameter {
|
|
1117
|
+
text?: string;
|
|
1118
|
+
value?: string;
|
|
1119
|
+
}
|
|
1120
|
+
//#endregion
|
|
1121
|
+
//#region src/application/models/spiffyWidgets.d.ts
|
|
1122
|
+
/**
|
|
1123
|
+
* Enum of all widget names. These are widgets that are rendered and integrated into
|
|
1124
|
+
* a merchant's website.
|
|
1125
|
+
*/
|
|
1126
|
+
declare enum SpiffyWidgets {
|
|
1127
|
+
ImageBanner = "image_banner",
|
|
1128
|
+
ImagePromptCard = "image_prompt_card",
|
|
1129
|
+
SingleImagePrompt = "single_image_prompt",
|
|
1130
|
+
EmbeddedWidget = "embedded_widget",
|
|
1131
|
+
FloatingButton = "floating_button",
|
|
1132
|
+
SuggestionBar = "suggestion_bar",
|
|
1133
|
+
SearchPrompt = "search_prompt",
|
|
1134
|
+
GlobalSearch = "global_search",
|
|
1135
|
+
SearchResults = "search_results",
|
|
1136
|
+
GlobalSearchEntryPoint = "global_search_entry_point",
|
|
1137
|
+
}
|
|
1138
|
+
//#endregion
|
|
1139
|
+
//#region src/application/models/supportedOrgs.d.ts
|
|
1140
|
+
type BasicOrgInfoType = {
|
|
1141
|
+
shortName: string;
|
|
1142
|
+
name: string;
|
|
1143
|
+
domain: string;
|
|
1144
|
+
defaultProductId: string;
|
|
1145
|
+
alwaysEnabledMerchants: boolean;
|
|
1146
|
+
orgUIConfig: () => OrgUIConfig | undefined;
|
|
1147
|
+
orgPageConfig: () => OrgPageConfig;
|
|
1148
|
+
orgColors: () => ColorMapping | {};
|
|
1149
|
+
};
|
|
1150
|
+
declare const getOrgInfo: (orgShortName?: string) => Promise<BasicOrgInfoType>;
|
|
1151
|
+
//#endregion
|
|
1152
|
+
//#region src/application/models/api/context.d.ts
|
|
1153
|
+
interface Context$1 extends CamelCasedPropertiesDeep<Context> {}
|
|
1154
|
+
//#endregion
|
|
1155
|
+
//#region src/application/models/api/generationParams.d.ts
|
|
1156
|
+
interface GenerationParams$1 extends CamelCasedPropertiesDeep<GenerationParams> {}
|
|
1157
|
+
//#endregion
|
|
1158
|
+
//#region src/application/models/api/userEvent.d.ts
|
|
1159
|
+
interface PDPAttributes$1 extends CamelCasedPropertiesDeep<PDPAttributes> {}
|
|
1160
|
+
interface PLPAttributes$1 extends CamelCasedPropertiesDeep<PLPAttributes> {}
|
|
1161
|
+
interface SearchAttributes$1 extends CamelCasedPropertiesDeep<SearchAttributes> {}
|
|
1162
|
+
interface QueryTypedAttributes$1 extends CamelCasedPropertiesDeep<QueryTypedAttributes> {}
|
|
1163
|
+
interface FormSubmittedAttributes$1 {
|
|
1164
|
+
filledSchema: Record<string, unknown>;
|
|
1165
|
+
formResponseId: string;
|
|
1166
|
+
formType: FormType;
|
|
1167
|
+
}
|
|
1168
|
+
interface PageVisitAttributes {
|
|
1169
|
+
url: string;
|
|
1170
|
+
pageVisitCategory: PageVisitCategory;
|
|
1171
|
+
}
|
|
1172
|
+
interface SuggestionClickedAttributes$1 extends CamelCasedPropertiesDeep<SuggestionClickedAttributes> {}
|
|
1173
|
+
type UserEventAttributes = PDPAttributes$1 | PLPAttributes$1 | QueryTypedAttributes$1 | SearchAttributes$1 | SuggestionClickedAttributes$1 | PageVisitAttributes;
|
|
1174
|
+
interface PDPUserEvent {
|
|
1175
|
+
category: UserEventCategory.PdpVisit | UserEventCategory.AddToCart;
|
|
1176
|
+
attributes: PDPAttributes$1;
|
|
1177
|
+
}
|
|
1178
|
+
interface PLPUserEvent {
|
|
1179
|
+
category: UserEventCategory.PlpVisit;
|
|
1180
|
+
attributes: PLPAttributes$1;
|
|
1181
|
+
}
|
|
1182
|
+
interface QueryTypedUserEvent {
|
|
1183
|
+
category: UserEventCategory.QueryTyped;
|
|
1184
|
+
attributes: QueryTypedAttributes$1;
|
|
1185
|
+
}
|
|
1186
|
+
interface SearchUserEvent {
|
|
1187
|
+
category: UserEventCategory.Search;
|
|
1188
|
+
attributes: SearchAttributes$1;
|
|
1189
|
+
}
|
|
1190
|
+
interface SuggestionsClickedUserEvent {
|
|
1191
|
+
category: UserEventCategory.SuggestionClicked;
|
|
1192
|
+
attributes: SuggestionClickedAttributes$1;
|
|
1193
|
+
}
|
|
1194
|
+
interface AppLoadedUserEvent {
|
|
1195
|
+
category: UserEventCategory.AppLoaded;
|
|
1196
|
+
}
|
|
1197
|
+
interface AppUnloadedEvent {
|
|
1198
|
+
category: UserEventCategory.AppUnloaded;
|
|
1199
|
+
}
|
|
1200
|
+
interface PageVisitEvent {
|
|
1201
|
+
category: UserEventCategory.PageVisit;
|
|
1202
|
+
attributes: PageVisitAttributes;
|
|
1203
|
+
}
|
|
1204
|
+
interface FormSubmitted {
|
|
1205
|
+
category: UserEventCategory.FormSubmitted;
|
|
1206
|
+
attributes: FormSubmittedAttributes$1;
|
|
1207
|
+
}
|
|
1208
|
+
type UserEvent$1 = CamelCasedPropertiesDeep<Pick<UserEvent, 'event_id' | 'category' | 'created_at'>> & (SuggestionsClickedUserEvent | AppLoadedUserEvent | PDPUserEvent | QueryTypedUserEvent | SearchUserEvent | AppUnloadedEvent | PLPUserEvent | PageVisitEvent | FormSubmitted);
|
|
1209
|
+
//#endregion
|
|
1210
|
+
//#region src/application/models/api/nextMessageRequest.d.ts
|
|
1211
|
+
interface NextMessageRequest$1 {
|
|
1212
|
+
id: string;
|
|
1213
|
+
context: Context$1;
|
|
1214
|
+
userEvents?: UserEvent$1[];
|
|
1215
|
+
featureFlags?: Record<string, boolean>;
|
|
1216
|
+
generationParams?: GenerationParams$1;
|
|
1217
|
+
}
|
|
1218
|
+
//#endregion
|
|
1219
|
+
//#region src/application/models/api/search.d.ts
|
|
1220
|
+
interface ProductSearchResponse$1 extends CamelCasedPropertiesDeep<ProductSearchResponse> {}
|
|
1221
|
+
interface ProductSearchResponseAttributes$1 extends CamelCasedPropertiesDeep<ProductSearchResponseAttributes> {}
|
|
1222
|
+
interface SearchResult {
|
|
1223
|
+
products: SearchResponseProduct[];
|
|
1224
|
+
filters: string[];
|
|
1225
|
+
generatedQuery?: string;
|
|
1226
|
+
totalProductCount: number;
|
|
1227
|
+
searchResponseId: string;
|
|
1228
|
+
}
|
|
1229
|
+
interface SearchParams {
|
|
1230
|
+
query: string;
|
|
1231
|
+
limit?: number;
|
|
1232
|
+
}
|
|
1233
|
+
//#endregion
|
|
1234
|
+
//#region src/application/models/api/suggestion.d.ts
|
|
1235
|
+
interface Suggestion$1 extends CamelCasedPropertiesDeep<Suggestion> {}
|
|
1236
|
+
//#endregion
|
|
1237
|
+
//#region src/application/models/api/supportedEventRequest.d.ts
|
|
1238
|
+
interface SupportedEventRequest$1 {
|
|
1239
|
+
id: string;
|
|
1240
|
+
context: Context$1;
|
|
1241
|
+
userEvent: UserEvent$1;
|
|
1242
|
+
}
|
|
1243
|
+
//#endregion
|
|
1244
|
+
//#region src/application/models/graphql/queries/getMerchantOrgIdQuery.d.ts
|
|
1245
|
+
declare const getMerchantOrgIdQuery = "\n query {\n me {\n org {\n id\n }\n }\n }\n";
|
|
1246
|
+
//#endregion
|
|
1247
|
+
//#region src/application/models/guards/isBaseEcommerceEvent.d.ts
|
|
1248
|
+
/**
|
|
1249
|
+
* Checks if an event is a base Google Analytics ecommerce event.
|
|
1250
|
+
*
|
|
1251
|
+
* @param data The event to check.
|
|
1252
|
+
*
|
|
1253
|
+
* @returns True if the event is a base ecommerce event, false otherwise.
|
|
1254
|
+
*/
|
|
1255
|
+
declare const isBaseEcommerceEvent: (data: unknown) => data is BaseEcommerceEvent;
|
|
1256
|
+
//#endregion
|
|
1257
|
+
//#region src/application/models/guards/isGA4EcommerceEvent.d.ts
|
|
1258
|
+
/**
|
|
1259
|
+
* Checks if an event is a Google Analytics 4 ecommerce event.
|
|
1260
|
+
*
|
|
1261
|
+
* @param data The event to check.
|
|
1262
|
+
*
|
|
1263
|
+
* @returns True if the event is a GA4 ecommerce event, false otherwise.
|
|
1264
|
+
*/
|
|
1265
|
+
declare const isGA4EcommerceEvent: (data: unknown) => data is GA4EcommerceEvent;
|
|
1266
|
+
//#endregion
|
|
1267
|
+
//#region src/application/models/guards/isLegacyUAEcommerceEvent.d.ts
|
|
1268
|
+
/**
|
|
1269
|
+
* Checks if an event is a legacy Universal Analytics ecommerce event.
|
|
1270
|
+
*
|
|
1271
|
+
* @param data The event to check.
|
|
1272
|
+
*
|
|
1273
|
+
* @returns True if the event is a legacy UA ecommerce event, false otherwise.
|
|
1274
|
+
*/
|
|
1275
|
+
declare const isLegacyUAEcommerceEvent: (data: unknown) => data is UAEcommerceEvent;
|
|
1276
|
+
//#endregion
|
|
1277
|
+
//#region src/application/models/guards/isMobilePLPChatPlacementParameter.d.ts
|
|
1278
|
+
interface MobilePlpChatPlacementParameter {
|
|
1279
|
+
row_index: number;
|
|
1280
|
+
}
|
|
1281
|
+
declare const isMobilePLPChatPlacementParameter: (value: unknown) => value is MobilePlpChatPlacementParameter;
|
|
1282
|
+
//#endregion
|
|
1283
|
+
//#region src/application/models/guards/isSpanxTakeAQuizCtaParameter.d.ts
|
|
1284
|
+
declare const isSpanxTakeAQuizCtaParameter: (value: unknown) => value is SpanxTakeAQuizCtaParameter;
|
|
1285
|
+
//#endregion
|
|
1286
|
+
//#region src/application/models/guards/isVariantInfo.d.ts
|
|
1287
|
+
/**
|
|
1288
|
+
* Type guard to check if an object is a valid VariantInfo.
|
|
1289
|
+
*
|
|
1290
|
+
* @param variantInfo - The unknown object to check.
|
|
1291
|
+
*
|
|
1292
|
+
* @returns True if the data is a valid VariantInfo object, false otherwise.
|
|
1293
|
+
*/
|
|
1294
|
+
declare const isVariantInfo: (variantInfo: unknown) => variantInfo is VariantInfo;
|
|
1295
|
+
//#endregion
|
|
1296
|
+
//#region src/application/models/guards/utils.d.ts
|
|
1297
|
+
/**
|
|
1298
|
+
* Checks if an object has a property of a specific type
|
|
1299
|
+
*
|
|
1300
|
+
* @param obj - The object to check
|
|
1301
|
+
* @param prop - The property name to check
|
|
1302
|
+
* @param type - The expected type of the property
|
|
1303
|
+
* @param isOptional - Whether the property is optional (defaults to false)
|
|
1304
|
+
*
|
|
1305
|
+
* @returns boolean indicating if the object has the property of the specified type
|
|
1306
|
+
*/
|
|
1307
|
+
declare const hasPropertyOfType: <T extends object>(obj: unknown, prop: keyof T, type: "string" | "number" | "boolean" | "object" | "array", isOptional?: boolean) => obj is T;
|
|
1308
|
+
//#endregion
|
|
1309
|
+
//#region src/application/models/guards/api/isApiFormResponse.d.ts
|
|
1310
|
+
/**
|
|
1311
|
+
* Type guard to check if the provided data has the all of the properties (with the correct types) of
|
|
1312
|
+
* a FormResponseAttribute
|
|
1313
|
+
*
|
|
1314
|
+
* @param data - The data to check
|
|
1315
|
+
*
|
|
1316
|
+
* @returns true if the data has the correct properties, false otherwise
|
|
1317
|
+
*/
|
|
1318
|
+
declare const isApiFormResponseAttributes: (data: unknown) => data is ApiFormResponseAttributes;
|
|
1319
|
+
//#endregion
|
|
1320
|
+
//#region src/application/models/guards/api/isApiFormSubmittedResponseAttributes.d.ts
|
|
1321
|
+
declare const isApiFormSubmittedResponseAttributes: (data: unknown) => data is FormSubmittedAttributes;
|
|
1322
|
+
//#endregion
|
|
1323
|
+
//#region src/application/models/guards/api/isApiOrderResponseAttributes.d.ts
|
|
1324
|
+
interface ApiOrderItemInfo extends Omit<OrderItemInfo, 'delivered_at' | 'estimated_delivery_at' | 'in_transit_at'> {
|
|
1325
|
+
delivered_at?: string;
|
|
1326
|
+
estimated_delivery_at?: string;
|
|
1327
|
+
in_transit_at?: string;
|
|
1328
|
+
}
|
|
1329
|
+
interface ApiOrderResponseAttributes extends Omit<OrderResponseAttributes, 'created_at' | 'latest_event_date' | 'line_items'> {
|
|
1330
|
+
created_at: string;
|
|
1331
|
+
latest_event_date: string;
|
|
1332
|
+
line_items: ApiOrderItemInfo[];
|
|
1333
|
+
}
|
|
1334
|
+
declare const isApiOrderResponseAttributes: (data: unknown) => data is ApiOrderResponseAttributes;
|
|
1335
|
+
//#endregion
|
|
1336
|
+
//#region src/application/models/guards/api/isApiOrganizationConfig.d.ts
|
|
1337
|
+
interface ApiOrgAnalyticsConfigAmplitude {
|
|
1338
|
+
session_replay_enabled: boolean;
|
|
1339
|
+
session_replay_sample_rate: number;
|
|
1340
|
+
tracking_enabled: boolean;
|
|
1341
|
+
}
|
|
1342
|
+
interface ApiOrgAnalyticsConfigCustomerService {
|
|
1343
|
+
provider: string;
|
|
1344
|
+
}
|
|
1345
|
+
interface ApiOrgAnalyticsConfigGoogleAnalytics {
|
|
1346
|
+
measurement_id: string;
|
|
1347
|
+
}
|
|
1348
|
+
interface ApiOrgAnalyticsConfig {
|
|
1349
|
+
amplitude?: ApiOrgAnalyticsConfigAmplitude;
|
|
1350
|
+
customer_service?: ApiOrgAnalyticsConfigCustomerService;
|
|
1351
|
+
google_analytics?: ApiOrgAnalyticsConfigGoogleAnalytics;
|
|
1352
|
+
}
|
|
1353
|
+
interface ApiOrganizationConfig extends OrganizationConfig {
|
|
1354
|
+
config: ApiOrgAnalyticsConfig;
|
|
1355
|
+
}
|
|
1356
|
+
/**
|
|
1357
|
+
*
|
|
1358
|
+
* @param data
|
|
1359
|
+
* @returns
|
|
1360
|
+
*/
|
|
1361
|
+
declare const isApiOrganizationConfig: (data: unknown) => data is ApiOrganizationConfig;
|
|
1362
|
+
//#endregion
|
|
1363
|
+
//#region src/application/models/guards/api/isApiOrgConfigResults.d.ts
|
|
1364
|
+
interface ApiOrgConfigResults {
|
|
1365
|
+
configs: ApiOrganizationConfig[];
|
|
1366
|
+
experiments: StatsigExperiment[];
|
|
1367
|
+
gates: StatsigFeatureGate[];
|
|
1368
|
+
org: OrganizationSettings;
|
|
1369
|
+
}
|
|
1370
|
+
/**
|
|
1371
|
+
*
|
|
1372
|
+
* @param data
|
|
1373
|
+
* @returns
|
|
1374
|
+
*/
|
|
1375
|
+
declare const isApiOrgConfigResults: (data: unknown) => data is Required<ApiOrgConfigResults>;
|
|
1376
|
+
//#endregion
|
|
1377
|
+
//#region src/application/models/guards/api/isApiPageResponseAttributes.d.ts
|
|
1378
|
+
declare const isApiPageResponseAttributes: (obj: unknown) => obj is ApiPageResponseAttributes;
|
|
1379
|
+
//#endregion
|
|
1380
|
+
//#region src/application/models/guards/api/isApiPLPEventAttributes.d.ts
|
|
1381
|
+
declare const isApiPLPIdAttribute: (data: unknown) => data is PLPIdAttributes;
|
|
1382
|
+
declare const isApiPLPEventAttributes: (data: unknown) => data is PLPAttributes;
|
|
1383
|
+
//#endregion
|
|
1384
|
+
//#region src/application/models/guards/api/isApiProductSearchFilterAttributes.d.ts
|
|
1385
|
+
declare const isApiProductSearchFilterResponseAttributes: (attributes: unknown) => attributes is ProductSearchFilterResponseAttributes;
|
|
1386
|
+
//#endregion
|
|
1387
|
+
//#region src/application/models/guards/graphQL/isGraphQLColorsConfig.d.ts
|
|
1388
|
+
declare const isGraphQLColorsConfig: (data: unknown) => data is GetMerchantColorsQueryData;
|
|
1389
|
+
//#endregion
|
|
1390
|
+
//#region src/application/models/utilityTypes/delimiterCase.d.ts
|
|
1391
|
+
type UpperCaseToLowerCase<T extends string> = T extends Uppercase<T> ? Lowercase<T> : T;
|
|
1392
|
+
type SplitIncludingDelimiters_<Source extends string, Delimiter extends string> = Source extends '' ? [] : Source extends `${infer FirstPart}${Delimiter}${infer SecondPart}` ? Source extends `${FirstPart}${infer UsedDelimiter}${SecondPart}` ? UsedDelimiter extends Delimiter ? Source extends `${infer FirstPart}${UsedDelimiter}${infer SecondPart}` ? [...SplitIncludingDelimiters<FirstPart, Delimiter>, UsedDelimiter, ...SplitIncludingDelimiters<SecondPart, Delimiter>] : never : never : never : [Source];
|
|
1393
|
+
/**
|
|
1394
|
+
* Unlike a simpler split, this one includes the delimiter splitted on in the resulting array literal. This is to enable splitting on, for example, upper-case characters.
|
|
1395
|
+
*
|
|
1396
|
+
* @category Template literal
|
|
1397
|
+
*/
|
|
1398
|
+
type SplitIncludingDelimiters<Source extends string, Delimiter extends string> = SplitIncludingDelimiters_<UpperCaseToLowerCase<Source>, Delimiter>;
|
|
1399
|
+
/**
|
|
1400
|
+
*Format a specific part of the splitted string literal that `StringArrayToDelimiterCase<>` fuses together, ensuring desired casing.
|
|
1401
|
+
*
|
|
1402
|
+
*@see StringArrayToDelimiterCase
|
|
1403
|
+
*/
|
|
1404
|
+
type StringPartToDelimiterCase<StringPart extends string, Start extends boolean, UsedWordSeparators extends string, UsedUpperCaseCharacters extends string, Delimiter extends string> = StringPart extends UsedWordSeparators ? Delimiter : Start extends true ? Lowercase<StringPart> : StringPart extends UsedUpperCaseCharacters ? `${Delimiter}${Lowercase<StringPart>}` : StringPart;
|
|
1405
|
+
/**
|
|
1406
|
+
* Takes the result of a splitted string literal and recursively concatenates it together into the desired casing.
|
|
1407
|
+
*
|
|
1408
|
+
* It receives `UsedWordSeparators` and `UsedUpperCaseCharacters` as input to ensure it's fully encapsulated.
|
|
1409
|
+
*
|
|
1410
|
+
* @see SplitIncludingDelimiters
|
|
1411
|
+
*/
|
|
1412
|
+
type StringArrayToDelimiterCase<Parts extends readonly any[], Start extends boolean, UsedWordSeparators extends string, UsedUpperCaseCharacters extends string, Delimiter extends string> = Parts extends [`${infer FirstPart}`, ...infer RemainingParts] ? `${StringPartToDelimiterCase<FirstPart, Start, UsedWordSeparators, UsedUpperCaseCharacters, Delimiter>}${StringArrayToDelimiterCase<RemainingParts, false, UsedWordSeparators, UsedUpperCaseCharacters, Delimiter>}` : Parts extends [string] ? string : '';
|
|
1413
|
+
/**
|
|
1414
|
+
* Convert a string literal to a custom string delimiter casing.
|
|
1415
|
+
*
|
|
1416
|
+
* This can be useful when, for example, converting a camel-cased object property to an oddly cased one.
|
|
1417
|
+
*
|
|
1418
|
+
* @see KebabCase
|
|
1419
|
+
* @see SnakeCase
|
|
1420
|
+
*
|
|
1421
|
+
* @example
|
|
1422
|
+
* ```
|
|
1423
|
+
* import type {DelimiterCase} from 'type-fest';
|
|
1424
|
+
*
|
|
1425
|
+
* // Simple
|
|
1426
|
+
*
|
|
1427
|
+
* const someVariable: DelimiterCase<'fooBar', '#'> = 'foo#bar';
|
|
1428
|
+
*
|
|
1429
|
+
* // Advanced
|
|
1430
|
+
*
|
|
1431
|
+
* type OddlyCasedProperties<T> = {
|
|
1432
|
+
* [K in keyof T as DelimiterCase<K, '#'>]: T[K]
|
|
1433
|
+
* };
|
|
1434
|
+
*
|
|
1435
|
+
* interface SomeOptions {
|
|
1436
|
+
* dryRun: boolean;
|
|
1437
|
+
* includeFile: string;
|
|
1438
|
+
* foo: number;
|
|
1439
|
+
* }
|
|
1440
|
+
*
|
|
1441
|
+
* const rawCliOptions: OddlyCasedProperties<SomeOptions> = {
|
|
1442
|
+
* 'dry#run': true,
|
|
1443
|
+
* 'include#file': 'bar.js',
|
|
1444
|
+
* foo: 123
|
|
1445
|
+
* };
|
|
1446
|
+
* ```
|
|
1447
|
+
*
|
|
1448
|
+
* @category Change case
|
|
1449
|
+
* @category Template literal
|
|
1450
|
+
*/
|
|
1451
|
+
type DelimiterCase<Value, Delimiter extends string> = string extends Value ? Value : Value extends string ? StringArrayToDelimiterCase<SplitIncludingDelimiters<Value, WordSeparators | UpperCaseCharacters>, true, WordSeparators, UpperCaseCharacters, Delimiter> : Value;
|
|
1452
|
+
//#endregion
|
|
1453
|
+
//#region src/application/models/utilityTypes/delimiterCasedPropertiesDeep.d.ts
|
|
1454
|
+
/**
|
|
1455
|
+
* Convert object properties to delimiter case recursively.
|
|
1456
|
+
*
|
|
1457
|
+
* This can be useful when, for example, converting some API types from a different style.
|
|
1458
|
+
*
|
|
1459
|
+
* @see DelimiterCase
|
|
1460
|
+
* @see DelimiterCasedProperties
|
|
1461
|
+
*
|
|
1462
|
+
* @example
|
|
1463
|
+
* ```
|
|
1464
|
+
* import type {DelimiterCasedPropertiesDeep} from 'type-fest';
|
|
1465
|
+
*
|
|
1466
|
+
* interface User {
|
|
1467
|
+
* userId: number;
|
|
1468
|
+
* userName: string;
|
|
1469
|
+
* }
|
|
1470
|
+
*
|
|
1471
|
+
* interface UserWithFriends {
|
|
1472
|
+
* userInfo: User;
|
|
1473
|
+
* userFriends: User[];
|
|
1474
|
+
* }
|
|
1475
|
+
*
|
|
1476
|
+
* const result: DelimiterCasedPropertiesDeep<UserWithFriends, '-'> = {
|
|
1477
|
+
* 'user-info': {
|
|
1478
|
+
* 'user-id': 1,
|
|
1479
|
+
* 'user-name': 'Tom',
|
|
1480
|
+
* },
|
|
1481
|
+
* 'user-friends': [
|
|
1482
|
+
* {
|
|
1483
|
+
* 'user-id': 2,
|
|
1484
|
+
* 'user-name': 'Jerry',
|
|
1485
|
+
* },
|
|
1486
|
+
* {
|
|
1487
|
+
* 'user-id': 3,
|
|
1488
|
+
* 'user-name': 'Spike',
|
|
1489
|
+
* },
|
|
1490
|
+
* ],
|
|
1491
|
+
* };
|
|
1492
|
+
* ```
|
|
1493
|
+
*
|
|
1494
|
+
* @category Change case
|
|
1495
|
+
* @category Template literal
|
|
1496
|
+
* @category Object
|
|
1497
|
+
*/
|
|
1498
|
+
type DelimiterCasedPropertiesDeep<Value, Delimiter extends string> = Value extends NonRecursiveType ? Value : Value extends UnknownArray ? DelimiterCasedPropertiesArrayDeep<Value, Delimiter> : Value extends Set<infer U> ? Set<DelimiterCasedPropertiesDeep<U, Delimiter>> : { [K in keyof Value as DelimiterCase<K, Delimiter>]: DelimiterCasedPropertiesDeep<Value[K], Delimiter> };
|
|
1499
|
+
type DelimiterCasedPropertiesArrayDeep<Value extends UnknownArray, Delimiter extends string> = Value extends [] ? [] : Value extends [infer U, ...infer V] ? [DelimiterCasedPropertiesDeep<U, Delimiter>, ...DelimiterCasedPropertiesDeep<V, Delimiter>] : Value extends readonly [infer U, ...infer V] ? readonly [DelimiterCasedPropertiesDeep<U, Delimiter>, ...DelimiterCasedPropertiesDeep<V, Delimiter>] : Value extends readonly [...infer U, infer V] ? [...DelimiterCasedPropertiesDeep<U, Delimiter>, DelimiterCasedPropertiesDeep<V, Delimiter>] : Value extends readonly [...infer U, infer V] ? readonly [...DelimiterCasedPropertiesDeep<U, Delimiter>, DelimiterCasedPropertiesDeep<V, Delimiter>] : Value extends Array<infer U> ? Array<DelimiterCasedPropertiesDeep<U, Delimiter>> : Value extends ReadonlyArray<infer U> ? ReadonlyArray<DelimiterCasedPropertiesDeep<U, Delimiter>> : never;
|
|
1500
|
+
//#endregion
|
|
1501
|
+
//#region src/application/models/utilityTypes/snakeCasedPropertiesDeep.d.ts
|
|
1502
|
+
/**
|
|
1503
|
+
* Convert object properties to snake case recursively.
|
|
1504
|
+
*
|
|
1505
|
+
* This can be useful when, for example, converting some API types from a different style.
|
|
1506
|
+
*
|
|
1507
|
+
* @see SnakeCase
|
|
1508
|
+
* @see SnakeCasedProperties
|
|
1509
|
+
*
|
|
1510
|
+
* @example
|
|
1511
|
+
* ```
|
|
1512
|
+
* import type {SnakeCasedPropertiesDeep} from 'type-fest';
|
|
1513
|
+
*
|
|
1514
|
+
* interface User {
|
|
1515
|
+
* userId: number;
|
|
1516
|
+
* userName: string;
|
|
1517
|
+
* }
|
|
1518
|
+
*
|
|
1519
|
+
* interface UserWithFriends {
|
|
1520
|
+
* userInfo: User;
|
|
1521
|
+
* userFriends: User[];
|
|
1522
|
+
* }
|
|
1523
|
+
*
|
|
1524
|
+
* const result: SnakeCasedPropertiesDeep<UserWithFriends> = {
|
|
1525
|
+
* user_info: {
|
|
1526
|
+
* user_id: 1,
|
|
1527
|
+
* user_name: 'Tom',
|
|
1528
|
+
* },
|
|
1529
|
+
* user_friends: [
|
|
1530
|
+
* {
|
|
1531
|
+
* user_id: 2,
|
|
1532
|
+
* user_name: 'Jerry',
|
|
1533
|
+
* },
|
|
1534
|
+
* {
|
|
1535
|
+
* user_id: 3,
|
|
1536
|
+
* user_name: 'Spike',
|
|
1537
|
+
* },
|
|
1538
|
+
* ],
|
|
1539
|
+
* };
|
|
1540
|
+
* ```
|
|
1541
|
+
*
|
|
1542
|
+
* @category Change case
|
|
1543
|
+
* @category Template literal
|
|
1544
|
+
* @category Object
|
|
1545
|
+
*/
|
|
1546
|
+
type SnakeCasedPropertiesDeep<Value> = DelimiterCasedPropertiesDeep<Value, '_'>;
|
|
1547
|
+
//#endregion
|
|
1548
|
+
//#region src/application/models/utils/snakeToCamelTransformer.d.ts
|
|
1549
|
+
/**
|
|
1550
|
+
* Generic utility to transform snake_case object keys to camelCase at runtime.
|
|
1551
|
+
* This is the runtime equivalent of the CamelCasedPropertiesDeep type utility.
|
|
1552
|
+
*/
|
|
1553
|
+
/**
|
|
1554
|
+
* Recursively transforms all object keys from snake_case to camelCase
|
|
1555
|
+
*/
|
|
1556
|
+
declare const transformSnakeToCamel: (obj: unknown) => unknown;
|
|
1557
|
+
/**
|
|
1558
|
+
* Recursively transforms all object keys from camelCase to snake_case
|
|
1559
|
+
*/
|
|
1560
|
+
declare const transformCamelToSnake: (obj: unknown) => unknown;
|
|
1561
|
+
//#endregion
|
|
1562
|
+
//#region src/application/models/utils/stringToFulfillmentDisplayStatusEnumValue.d.ts
|
|
1563
|
+
/**
|
|
1564
|
+
* Converts a string to a FulfillmentDisplayStatus enum value.
|
|
1565
|
+
*
|
|
1566
|
+
* @param status - The string to convert.
|
|
1567
|
+
*
|
|
1568
|
+
* @returns The FulfillmentDisplayStatus enum value or undefined if the string
|
|
1569
|
+
* does not map to a valid enum
|
|
1570
|
+
*/
|
|
1571
|
+
declare const stringToFulfillmentDisplayStatusEnumValue: (status: string) => FulfillmentDisplayStatus | undefined;
|
|
1572
|
+
//#endregion
|
|
1573
|
+
//#region src/application/models/validators/validateGraphQLColorsConfig.d.ts
|
|
1574
|
+
declare const validateGraphQLColorsConfig: (data: unknown) => ColorMapping | undefined;
|
|
1575
|
+
//#endregion
|
|
1576
|
+
//#region src/application/models/validators/validateGraphQLFrontendConfig.d.ts
|
|
1577
|
+
declare const validateAndTransformPageVariants: (config: Record<string, unknown>) => PageVariantConfig;
|
|
1578
|
+
declare const validateAndTransformMountingConfig: (config: Record<string, unknown>, configKey: string) => WidgetMountingConfig;
|
|
1579
|
+
declare const validateAndTransformWidgetConfig: (config: Record<string, unknown>, configKey: string) => WidgetConfig;
|
|
1580
|
+
declare const validateGraphQLFrontendConfig: (data: unknown) => FrontendConfig | undefined;
|
|
1581
|
+
//#endregion
|
|
1582
|
+
//#region src/application/models/validators/validateGraphQLOrgId.d.ts
|
|
1583
|
+
declare const validateGraphQLOrgId: (data: unknown) => string | undefined;
|
|
1584
|
+
//#endregion
|
|
1585
|
+
//#region src/application/models/validators/validateMobilePLPChatPlacementParameter.d.ts
|
|
1586
|
+
declare const validateMobilePLPChatPlacementParameter: (value: unknown) => MobilePLPChatPlacementParameter | undefined;
|
|
1587
|
+
//#endregion
|
|
1588
|
+
//#region src/application/models/validators/validateOrganizationConfig.d.ts
|
|
1589
|
+
declare const validateOrganizationConfig: (data: unknown) => OrganizationConfig$1 | undefined;
|
|
1590
|
+
//#endregion
|
|
1591
|
+
//#region src/application/models/validators/validateOrgConfigResults.d.ts
|
|
1592
|
+
/**
|
|
1593
|
+
*
|
|
1594
|
+
* @param data
|
|
1595
|
+
* @returns
|
|
1596
|
+
*/
|
|
1597
|
+
declare const validateOrgConfigResults: (data: unknown) => OrgConfig | undefined;
|
|
1598
|
+
//#endregion
|
|
1599
|
+
//#region src/application/models/validators/validateResponse.d.ts
|
|
1600
|
+
declare const validateResponse: (data: unknown) => Response$1 | undefined;
|
|
1601
|
+
//#endregion
|
|
1602
|
+
//#region src/application/models/validators/validateSuggestion.d.ts
|
|
1603
|
+
declare const validateSuggestion: (data: unknown) => Suggestion$1 | undefined;
|
|
1604
|
+
//#endregion
|
|
1605
|
+
//#region src/application/models/validators/validateUserEvent.d.ts
|
|
1606
|
+
declare const validateUserEvent: (data: unknown) => UserEvent$1 | undefined;
|
|
1607
|
+
//#endregion
|
|
1608
|
+
export { ApiOrderItemInfo, ApiOrderResponseAttributes, ApiOrganizationConfig, AppLoadedUserEvent, AppUnloadedEvent, BaseEcommerceEvent, BasicOrgInfoType, type CachedValue, type CategoryExtractor, CategoryExtractorType, ChatElementDisplayLocation, type ChatMessageConfig, type ChatMessageVariant, type ChatPreviewConfig, type ChatPreviewFooterConfig, type ChatPreviewHeaderConfig, type ChatPreviewHeaderV2Config, type ChatPreviewIsLoadingWidgetConfig, type ChatPreviewPostInteractionWidgetConfig, type ChatPreviewProductComparisonWidgetConfig, type ChatPreviewSuggestionButtonConfig, type ChatPreviewV2WidgetConfig, type ChatPreviewVariant, type ChatPreviewWidgetConfig, type ClientDetails, type ColorMapping, ColorNames, Context$1 as Context, ConversationalSearchIds, type CustomerServiceIntegration, DelimiterCase, DelimiterCasedPropertiesDeep, type DynamicWidgetMounting, EnviveConfig, FeatureGates, FilterAttribute, type FloatingEntryPointConfig, FormField, FormSubmitted, FormSubmittedAttributes$1 as FormSubmittedAttributes, FrontendConfig, type FullCustomerServiceIntegration, GA4EcommerceEvent, GenerationParams$1 as GenerationParams, GoogleAnalyticsEvents, type HomePageVariant, type IdExtractor, type ImageBannerWidgetConfig, type ImagePromptWidgetConfig, type InsertionPoint, Message, MessageRole, MessageType, MobilePLPChatPlacementParameter, type MultiImageConfig, NextMessageRequest$1 as NextMessageRequest, type NoOpWidgetConfig, type NumRows, OrgAnalyticsAmplitudeConfig, OrgAnalyticsConfig, OrgAnalyticsCustomerServiceConfig, OrgAnalyticsGoogleAnalyticsConfig, OrgConfig$1 as OrgConfig, OrgConfig as OrgConfig$1, OrgConfigExperiment, OrgConfigFeatureGate, OrgPageConfig, OrgShortName, type OrgUIConfig, Organization, OrganizationConfig$1 as OrganizationConfig, OrganizationSettings$1 as OrganizationSettings, type OtherPageVariant, PDPAttributes$1 as PDPAttributes, type PDPPageVariant, PDPUserEvent, PLPAttributes$1 as PLPAttributes, type PLPPageVariant, PLPUserEvent, type PageCardConfig, type PageCardHoverVariant, type PageCardIconVariant, type PageCardVariant, PageVariantConfig, PageVariantTest, PageVariantTestType, PageVisitAttributes, PageVisitEvent, type ProductCardConfig, type ProductCardHoverVariant, type ProductCardLayoutVariant, type ProductCardVariant, ProductExperiment, ProductGridVariant, type ProductLinkHoverVariant, type ProductLinkIconVariant, type ProductLinkVariant, ProductMessageMetadata, type ProductReviewColorVariant, type ProductReviewConfig, type ProductReviewStyleVariant, ProductSearchMessageMetadata, ProductSearchResponse$1 as ProductSearchResponse, ProductSearchResponseAttributes$1 as ProductSearchResponseAttributes, QueryTypedAttributes$1 as QueryTypedAttributes, QueryTypedUserEvent, SearchAttributes$1 as SearchAttributes, type SearchCardVariant, type SearchEntryPointWidgetConfig, SearchFilterSidebarVariant, SearchIconVariant, SearchInputVariant, type SearchOverlayHostWidgetConfig, type SearchPageVariant, SearchParams, type SearchPromptVariant, type SearchPromptWidgetConfig, SearchResult, type SearchResultsEntryPointWidgetConfig, SearchUserEvent, SearchZeroStateLayout, SearchZeroStateVariant, type ShowFloatingButtonOptions, type SingleImagePromptWidgetConfig, SnakeCasedPropertiesDeep, type SocialProofConfig, type SocialProofV2WidgetConfig, SpanxTakeAQuizCtaParameter, SpiffyEventName, SpiffyWidgets, SplitIncludingDelimiters, type StaticWidgetMounting, Suggestion$1 as Suggestion, type SuggestionBarWidgetV2Config, type SuggestionButtonConfig, type SuggestionButtonVariant, SuggestionClickedAttributes$1 as SuggestionClickedAttributes, SuggestionsClickedUserEvent, SupportedEventRequest$1 as SupportedEventRequest, UAEcommerceEvent, type URLTest, UserEvent$1 as UserEvent, UserEventAttributes, type UserQueryButtonConfig, type UserQueryButtonIcon, UserQueryOptions, type VisitPageVariant, type WelcomeSectionColorVariant, type WelcomeSectionConfig, type WelcomeSectionVariant, type WidgetConfig, type WidgetDisplayTests, WidgetHeaderProps, type WidgetMounting, WidgetMountingConfig, WidgetType, type WrappingElement, colorVar, getMerchantOrgIdQuery, getOrgInfo, hasPropertyOfType, isApiFormResponseAttributes, isApiFormSubmittedResponseAttributes, isApiOrderResponseAttributes, isApiOrgConfigResults, isApiOrganizationConfig, isApiPLPEventAttributes, isApiPLPIdAttribute, isApiPageResponseAttributes, isApiProductSearchFilterResponseAttributes, isBaseEcommerceEvent, isGA4EcommerceEvent, isGraphQLColorsConfig, isLegacyUAEcommerceEvent, isMobilePLPChatPlacementParameter, isSpanxTakeAQuizCtaParameter, isVariantInfo, stringToFulfillmentDisplayStatusEnumValue, transformCamelToSnake, transformSnakeToCamel, validateAndTransformMountingConfig, validateAndTransformPageVariants, validateAndTransformWidgetConfig, validateGraphQLColorsConfig, validateGraphQLFrontendConfig, validateGraphQLOrgId, validateMobilePLPChatPlacementParameter, validateOrgConfigResults, validateOrganizationConfig, validateResponse, validateSuggestion, validateUserEvent };
|
|
1609
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtRFR1MlgtWVMuZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jYWNoZWRWYWx1ZS5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbi5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jbGllbnREZXRhaWxzLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2NvbG9yc0NvbmZpZy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jb252ZXJzYXRpb25hbFNlYXJjaElkcy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9kYXRhTGF5ZXIuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZXZlbnRzLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2ZlYXR1cmVHYXRlcy5kLnRzIiwiLi4vc3JjL3R5cGVzL2N1c3RvbWVyU2VydmljZS5kLnRzIiwiLi4vc3JjL21lcmNoYW50cy9ncmlkSW5zZXJ0aW9uLmQudHMiLCIuLi9zcmMvbWVyY2hhbnRzL2RvbUluc2VydGlvbi5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvb3JnQW5hbHl0aWNzQ29uZmlnLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9vcmdhbml6YXRpb25Db25maWcuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL29yZ0NvbmZpZ1Jlc3VsdHMuZC50cyIsIi4uL3NyYy9jb250ZXh0cy90eXBlcy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9mcm9udGVuZENvbmZpZy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9nb29nbGVBbmFseXRpY3NFdmVudHMuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvbWVzc2FnZS5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9tb2JpbGVQTFBDaGF0UGxhY2VtZW50UGFyYW1ldGVyLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL29yZ3NFbnVtLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3Byb2R1Y3RFeHBlcmltZW50LmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3NwYW54VGFrZUFRdWl6Q3RhUGFyYW1ldGVyLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3NwaWZmeVdpZGdldHMuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvc3VwcG9ydGVkT3Jncy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvY29udGV4dC5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvZ2VuZXJhdGlvblBhcmFtcy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvdXNlckV2ZW50LmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9uZXh0TWVzc2FnZVJlcXVlc3QuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3NlYXJjaC5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvc3VnZ2VzdGlvbi5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvc3VwcG9ydGVkRXZlbnRSZXF1ZXN0LmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2dyYXBocWwvcXVlcmllcy9nZXRNZXJjaGFudE9yZ0lkUXVlcnkuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2lzQmFzZUVjb21tZXJjZUV2ZW50LmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9pc0dBNEVjb21tZXJjZUV2ZW50LmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9pc0xlZ2FjeVVBRWNvbW1lcmNlRXZlbnQuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2lzTW9iaWxlUExQQ2hhdFBsYWNlbWVudFBhcmFtZXRlci5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvaXNTcGFueFRha2VBUXVpekN0YVBhcmFtZXRlci5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvaXNWYXJpYW50SW5mby5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvdXRpbHMuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaUZvcm1SZXNwb25zZS5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpRm9ybVN1Ym1pdHRlZFJlc3BvbnNlQXR0cmlidXRlcy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXMuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaU9yZ2FuaXphdGlvbkNvbmZpZy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpT3JnQ29uZmlnUmVzdWx0cy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUGFnZVJlc3BvbnNlQXR0cmlidXRlcy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUExQRXZlbnRBdHRyaWJ1dGVzLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlQcm9kdWN0U2VhcmNoRmlsdGVyQXR0cmlidXRlcy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvZ3JhcGhRTC9pc0dyYXBoUUxDb2xvcnNDb25maWcuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbGl0eVR5cGVzL2RlbGltaXRlckNhc2UuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbGl0eVR5cGVzL2RlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXAuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbGl0eVR5cGVzL3NuYWtlQ2FzZWRQcm9wZXJ0aWVzRGVlcC5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlscy9zbmFrZVRvQ2FtZWxUcmFuc2Zvcm1lci5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlscy9zdHJpbmdUb0Z1bGZpbGxtZW50RGlzcGxheVN0YXR1c0VudW1WYWx1ZS5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlR3JhcGhRTENvbG9yc0NvbmZpZy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlR3JhcGhRTEZyb250ZW5kQ29uZmlnLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVHcmFwaFFMT3JnSWQuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZU1vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXIuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZU9yZ2FuaXphdGlvbkNvbmZpZy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlT3JnQ29uZmlnUmVzdWx0cy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlUmVzcG9uc2UuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZVN1Z2dlc3Rpb24uZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZVVzZXJFdmVudC5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImludGVyZmFjZSBDYWNoZWRWYWx1ZSB7XG4gICAgdmFsdWU6IHVua25vd247XG4gICAgZXhwaXJ5OiBudW1iZXI7XG59XG5leHBvcnQgdHlwZSB7IENhY2hlZFZhbHVlIH07XG4iLCJleHBvcnQgZGVjbGFyZSBlbnVtIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uIHtcbiAgICBJTl9DSEFUID0gXCJpbl9jaGF0XCIsXG4gICAgQ0hBVF9QUkVWSUVXID0gXCJjaGF0X3ByZXZpZXdcIixcbiAgICBGTE9BVElOR19CVVRUT04gPSBcImZsb2F0aW5nX2J1dHRvblwiLFxuICAgIEhFTFBfTUVfQ0hPT1NFID0gXCJoZWxwX21lX2Nob29zZVwiLFxuICAgIFBMUF9JTUFHRV9CQU5ORVIgPSBcInBscF9pbWFnZV9iYW5uZXJcIixcbiAgICBUT1BfUkVWSUVXU19TTklQUEVUID0gXCJ0b3BfcmV2aWV3c19zbmlwcGV0XCIsXG4gICAgQk9UVE9NX1JFVklFV1NfU05JUFBFVCA9IFwiYm90dG9tX3Jldmlld3Nfc25pcHBldFwiLFxuICAgIEJMT0NLX0JBQ0tfQlVUVE9OID0gXCJibG9ja19iYWNrX2J1dHRvblwiLFxuICAgIFNXSVRDSF9UT19BR0VOVCA9IFwic3dpdGNoX3RvX2FnZW50XCIsXG4gICAgQ09OVkVSU0FUSU9OQUxfU0VBUkNIID0gXCJjb252ZXJzYXRpb25hbF9zZWFyY2hcIixcbiAgICBHTE9CQUxfU0VBUkNIX0VOVFJZUE9JTlQgPSBcImdsb2JhbF9zZWFyY2hfZW50cnlwb2ludFwiLFxuICAgIFNFQVJDSF9OQVZfRU5UUllQT0lOVCA9IFwic2VhcmNoX25hdl9lbnRyeXBvaW50XCIsXG4gICAgU0VBUkNIX1BST01QVCA9IFwic2VhcmNoX3Byb21wdFwiLFxuICAgIFNFQVJDSF9QUk9NUFRfQlVUVE9OID0gXCJzZWFyY2hfcHJvbXB0X2J1dHRvblwiLFxuICAgIFBST0RVQ1RfR1JJRCA9IFwicHJvZHVjdF9ncmlkXCIsXG4gICAgVU5TUEVDSUZJRUQgPSBcInVuc3BlY2lmaWVkXCIsXG4gICAgRklMVEVSX01PREFMID0gXCJmaWx0ZXJfbW9kYWxcIixcbiAgICBQUk9NUFRfQ0FSRCA9IFwicHJvbXB0X2NhcmRcIixcbiAgICBXSU5ET1dfQVBJX0NBTEwgPSBcIndpbmRvd19hcGlfY2FsbFwiXG59XG4iLCJpbnRlcmZhY2UgQ2xpZW50RGV0YWlscyB7XG4gICAgb3M/OiBzdHJpbmc7XG4gICAgb3NWZXJzaW9uPzogc3RyaW5nO1xuICAgIGRldmljZUJyYW5kPzogc3RyaW5nO1xuICAgIGRldmljZU1hbnVmYWN0dXJlcj86IHN0cmluZztcbiAgICBkZXZpY2VNb2RlbD86IHN0cmluZztcbiAgICBjYXJyaWVyPzogc3RyaW5nO1xuICAgIGNvdW50cnk/OiBzdHJpbmc7XG4gICAgcmVnaW9uPzogc3RyaW5nO1xuICAgIGJyb3dzZXI/OiBzdHJpbmc7XG4gICAgYnJvd3NlclZlcnNpb24/OiBzdHJpbmc7XG4gICAgYnJvd3NlcklwQWRkcmVzcz86IHN0cmluZztcbiAgICB1c2VyQWdlbnQ/OiBzdHJpbmc7XG59XG5leHBvcnQgdHlwZSB7IENsaWVudERldGFpbHMsIH07XG4iLCJkZWNsYXJlIGVudW0gQ29sb3JOYW1lcyB7XG4gICAgVGV4dFByaW1hcnkgPSBcInRleHQtcHJpbWFyeVwiLFxuICAgIFRleHRTZWNvbmRhcnkgPSBcInRleHQtc2Vjb25kYXJ5XCIsXG4gICAgVGV4dEFjY2VudCA9IFwidGV4dC1hY2NlbnRcIixcbiAgICBUZXh0TGluayA9IFwidGV4dC1saW5rXCIsXG4gICAgVGV4dExpZ2h0ID0gXCJ0ZXh0LWxpZ2h0XCIsXG4gICAgQmFja2dyb3VuZFByaW1hcnkgPSBcImJhY2tncm91bmQtcHJpbWFyeVwiLFxuICAgIEJhY2tncm91bmRTZWNvbmRhcnkgPSBcImJhY2tncm91bmQtc2Vjb25kYXJ5XCIsXG4gICAgQmFja2dyb3VuZFNlY29uZGFyeURhcmsgPSBcImJhY2tncm91bmQtc2Vjb25kYXJ5LWRhcmtcIixcbiAgICBCYWNrZ3JvdW5kVGVydGlhcnkgPSBcImJhY2tncm91bmQtdGVydGlhcnlcIixcbiAgICBCYWNrZ3JvdW5kRGFyayA9IFwiYmFja2dyb3VuZC1kYXJrXCIsXG4gICAgQmFja2dyb3VuZExpZ2h0ID0gXCJiYWNrZ3JvdW5kLWxpZ2h0XCIsXG4gICAgQmFja2dyb3VuZFNhdHVyYXRlZCA9IFwiYmFja2dyb3VuZC1zYXR1cmF0ZWRcIixcbiAgICBCb3JkZXJMaWdodCA9IFwiYm9yZGVyLWxpZ2h0XCIsXG4gICAgQm9yZGVyTWVkaXVtID0gXCJib3JkZXItbWVkaXVtXCIsXG4gICAgQm9yZGVyRGFyayA9IFwiYm9yZGVyLWRhcmtcIixcbiAgICBCb3JkZXJPdXRsaW5lID0gXCJib3JkZXItb3V0bGluZVwiLFxuICAgIEFjY2VudFByaW1hcnkgPSBcImFjY2VudC1wcmltYXJ5XCIsXG4gICAgQWNjZW50U2Vjb25kYXJ5ID0gXCJhY2NlbnQtc2Vjb25kYXJ5XCJcbn1cbnR5cGUgQ29sb3JNYXBwaW5nID0ge1xuICAgIFtrZXkgaW4gQ29sb3JOYW1lc106IHN0cmluZztcbn07XG5kZWNsYXJlIGNvbnN0IGNvbG9yVmFyOiAoY29sb3I6IENvbG9yTmFtZXMpID0+IHN0cmluZztcbmV4cG9ydCB7IENvbG9yTmFtZXMsIGNvbG9yVmFyIH07XG5leHBvcnQgdHlwZSB7IENvbG9yTWFwcGluZyB9O1xuIiwiZXhwb3J0IHR5cGUgQ29udmVyc2F0aW9uYWxTZWFyY2hJZHMgPSB7XG4gICAgY29udmVyc2F0aW9uYWxTZWFyY2hFbnRyeXBvaW50SWQ/OiBzdHJpbmc7XG4gICAgY29udmVyc2F0aW9uYWxTZWFyY2hJbnB1dElkPzogc3RyaW5nO1xuICAgIGNvbnZlcnNhdGlvbmFsU2VhcmNoTW9kYWxJZD86IHN0cmluZztcbn07XG4iLCIvKipcbiAqIEJhc2UgaW50ZXJmYWNlIGZvciBjb21tb24gcHJvcGVydGllcyBhY3Jvc3MgYWxsIGVjb21tZXJjZSBldmVudHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlRWNvbW1lcmNlRXZlbnQge1xuICAgIGV2ZW50OiBzdHJpbmc7XG4gICAgZWNvbW1lcmNlOiBVQUVjb21tZXJjZURhdGEgfCBHQTRFY29tbWVyY2VEYXRhO1xufVxuLyoqXG4gKiBMZWdhY3kgdW5pdmVyc2FsIGFuYWx5dGljcyBkYXRhLiBUaGUgYWN0dWFsIHBheWxvYWQgY29udGFpbnMgbW9yZSBmaWVsZHMsIGJ1dCB3ZVxuICogb25seSBuZWVkIHRoZSBvbmVzIGxpc3RlZCBiZWxvdy5cbiAqL1xuaW50ZXJmYWNlIFVBRWNvbW1lcmNlRGF0YSB7XG4gICAgYWRkOiB7XG4gICAgICAgIHByb2R1Y3RzOiB7XG4gICAgICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgICAgICBjYXRlZ29yeTogc3RyaW5nO1xuICAgICAgICAgICAgcHJpY2U6IHN0cmluZztcbiAgICAgICAgICAgIHF1YW50aXR5OiBzdHJpbmc7XG4gICAgICAgIH1bXTtcbiAgICAgICAgY3VycmVuY3lDb2RlOiBzdHJpbmc7XG4gICAgfTtcbn1cbi8qKlxuICogR29vZ2xlIEFuYWx5dGljcyA0IGRhdGEuIFRoZSBhY3R1YWwgcGF5bG9hZCBjb250YWlucyBtb3JlIGZpZWxkcywgYnV0IHdlXG4gKiBvbmx5IG5lZWQgdGhlIG9uZXMgbGlzdGVkIGJlbG93LlxuICovXG5pbnRlcmZhY2UgR0E0RWNvbW1lcmNlRGF0YSB7XG4gICAgY3VycmVuY3k6IHN0cmluZztcbiAgICBpdGVtczoge1xuICAgICAgICBpdGVtX25hbWU6IHN0cmluZztcbiAgICAgICAgaXRlbV9jYXRlZ29yeTogc3RyaW5nO1xuICAgICAgICBwcmljZTogbnVtYmVyO1xuICAgICAgICBxdWFudGl0eTogbnVtYmVyO1xuICAgIH1bXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVUFFY29tbWVyY2VFdmVudCBleHRlbmRzIEJhc2VFY29tbWVyY2VFdmVudCB7XG4gICAgZWNvbW1lcmNlOiBVQUVjb21tZXJjZURhdGE7XG59XG5leHBvcnQgaW50ZXJmYWNlIEdBNEVjb21tZXJjZUV2ZW50IGV4dGVuZHMgQmFzZUVjb21tZXJjZUV2ZW50IHtcbiAgICBlY29tbWVyY2U6IEdBNEVjb21tZXJjZURhdGE7XG59XG5leHBvcnQge307XG4iLCJleHBvcnQgZGVjbGFyZSBlbnVtIFNwaWZmeUV2ZW50TmFtZSB7XG4gICAgV2lkZ2V0T3BlbiA9IFwic3BpZmZ5OndpZGdldG9wZW5cIixcbiAgICBXaWRnZXRDbG9zZSA9IFwic3BpZmZ5OndpZGdldGNsb3NlXCJcbn1cbiIsImV4cG9ydCBkZWNsYXJlIGVudW0gRmVhdHVyZUdhdGVzIHtcbiAgICBJc0NsaWVudFNlc3Npb25FbmFibGVkID0gXCJpc19jbGllbnRfc2Vzc2lvbl9lbmFibGVkXCIsXG4gICAgSXNOZXdGZWF0dXJlRW5hYmxlZCA9IFwiaXNfbmV3X2ZlYXR1cmVfZW5hYmxlZFwiLFxuICAgIElzRmluZVR1bmVkTW9kZWw4YiA9IFwiaXNfZmluZV90dW5lZF9tb2RlbF84YlwiLFxuICAgIElzSW50ZWdyYXRlZENYRW5hYmxlZCA9IFwiaXNfaW50ZWdyYXRlZF9jeF9lbmFibGVkXCIsXG4gICAgSXNOb25TaGFwZXdlYXJFbmFibGVkID0gXCJpc19ub25fc2hhcGV3ZWFyX2VuYWJsZWRcIixcbiAgICBJc0ltYWdlQmFubmVyRW5hYmxlZCA9IFwiaXNfaW1hZ2VfYmFubmVyX2VuYWJsZWRcIixcbiAgICBJc09yZGVyTG9va3VwRW5hYmxlZCA9IFwiaXNfb3JkZXJfbG9va3VwX2VuYWJsZWRcIixcbiAgICBJc1N1bW1hcml6ZVJldmlld3NFbmFibGVkID0gXCJpc19zdW1tYXJpemVfcmV2aWV3c19lbmFibGVkXCIsXG4gICAgSXNHbG9iYWxTZWFyY2hFbmFibGVkID0gXCJpc19nbG9iYWxfc2VhcmNoX2VuYWJsZWRcIixcbiAgICBJc0ltYWdlUHJvbXB0RW5hYmxlZCA9IFwiaXNfaW1hZ2VfcHJvbXB0X2VuYWJsZWRcIixcbiAgICBJc1dhdGVybWFya0VuYWJsZWQgPSBcImlzX3dhdGVybWFya19lbmFibGVkXCIsXG4gICAgSXNJbmZlcmVuY2VSZWdpb24wID0gXCJpc19pbmZlcmVuY2VfcmVnaW9uXzBcIixcbiAgICBJc0dyYXBoUUxVSUNvbmZpZ3NFbmFibGVkID0gXCJpc19ncmFwaHFsX3VpX2NvbmZpZ3NfZW5hYmxlZFwiLFxuICAgIElzR3JhcGhRTFBhZ2VDb25maWdzRW5hYmxlZCA9IFwiaXNfZ3JhcGhxbF9wYWdlX2NvbmZpZ3NfZW5hYmxlZFwiLFxuICAgIElzR3JhcGhRTENvbXBvbmVudENvbmZpZ3NFbmFibGVkID0gXCJpc19ncmFwaHFsX2NvbXBvbmVudF9jb25maWdzX2VuYWJsZWRcIixcbiAgICBJc0NoYXRWYXJpYW50RW5hYmxlZCA9IFwiaXNfY2hhdF92YXJpYW50X2VuYWJsZWRcIixcbiAgICBJc0NoYXRWYXJpYW50QUVuYWJsZWQgPSBcImlzX2NoYXRfdmFyaWFudF9hX2VuYWJsZWRcIixcbiAgICBJc0NoYXRWYXJpYW50QkVuYWJsZWQgPSBcImlzX2NoYXRfdmFyaWFudF9iX2VuYWJsZWRcIixcbiAgICBJc1VzZXJRdWVyeUFsd2F5c0VuYWJsZWQgPSBcImlzX3VzZXJfcXVlcnlfYWx3YXlzX2VuYWJsZWRcIlxufVxuIiwiaW1wb3J0IHsgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIgfSBmcm9tIFwiQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50XCI7XG5leHBvcnQgZGVjbGFyZSBlbnVtIEN1c3RvbWVyU2VydmljZVR5cGUge1xuICAgIHNob3BpZnkgPSBcInNob3BpZnlcIixcbiAgICBnb3JnaWFzID0gXCJnb3JnaWFzXCIsXG4gICAga3VzdG9tZXIgPSBcImt1c3RvbWVyXCIsXG4gICAgZ3Jvb3ZlID0gXCJncm9vdmVcIixcbiAgICB0aWRpbyA9IFwidGlkaW9cIixcbiAgICB6b3dpZSA9IFwiem93aWVcIixcbiAgICByZWRvID0gXCJyZWRvXCIsXG4gICAgZ2xhZGx5ID0gXCJnbGFkbHlcIixcbiAgICByaWNocGFuZWwgPSBcInJpY2hwYW5lbFwiLFxuICAgIHplbmRlc2sgPSBcInplbmRlc2tcIixcbiAgICB1bnN1cHBvcnRlZCA9IFwidW5zdXBwb3J0ZWRcIlxufVxuZXhwb3J0IGRlY2xhcmUgZW51bSBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbk1vZGUge1xuICAgIG5vbmUgPSBcIm5vbmVcIixcbiAgICBzaW1wbGUgPSBcInNpbXBsZVwiLFxuICAgIGZ1bGwgPSBcImZ1bGxcIlxufVxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbiB7XG4gICAgcHJvdmlkZXI6IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyO1xuICAgIHN1cHBvcnRlZEludGVncmF0aW9uTW9kZXM6IEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uTW9kZVtdO1xuICAgIGFsbG93RmlsZVVwbG9hZD86IGJvb2xlYW47XG4gICAgbWF4ZmlsZVVwbG9hZFNpemU/OiBudW1iZXI7XG4gICAgb25Td2l0Y2hUb0FnZW50OiAoKSA9PiB2b2lkO1xuICAgIGlzRW5hYmxlZDogKCkgPT4gYm9vbGVhbjtcbiAgICBpc0J1c2luZXNzSG91cnM6IChhcGlLZXk/OiBzdHJpbmcsIGFwaUVuZHBvaW50Pzogc3RyaW5nKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xufVxuIiwiZGVjbGFyZSBlbnVtIEdyaWRJbnNlcnRpb25UeXBlIHtcbiAgICBGSVhFRF8xID0gXCJmaXhlZC0xXCIsXG4gICAgRklYRURfMiA9IFwiZml4ZWQtMlwiLFxuICAgIEZJWEVEXzMgPSBcImZpeGVkLTNcIixcbiAgICBGSVhFRF80ID0gXCJmaXhlZC00XCIsXG4gICAgRklYRURfNSA9IFwiZml4ZWQtNVwiLFxuICAgIEZJWEVEXzYgPSBcImZpeGVkLTZcIixcbiAgICBGSVhFRF83ID0gXCJmaXhlZC03XCIsXG4gICAgRklYRURfOCA9IFwiZml4ZWQtOFwiLFxuICAgIEZJWEVEXzkgPSBcImZpeGVkLTlcIixcbiAgICBGSVhFRF8xMiA9IFwiZml4ZWQtMTJcIixcbiAgICBGSVhFRF8xMyA9IFwiZml4ZWQtMTNcIixcbiAgICBST1dfMSA9IFwicm93LTFcIixcbiAgICBST1dfMiA9IFwicm93LTJcIixcbiAgICBST1dfMyA9IFwicm93LTNcIixcbiAgICBST1dfNCA9IFwicm93LTRcIlxufVxuZXhwb3J0IHsgR3JpZEluc2VydGlvblR5cGUgfTtcbiIsImRlY2xhcmUgZW51bSBET01JbnNlcnRpb25UeXBlIHtcbiAgICBBRlRFUiA9IFwiYWZ0ZXJcIixcbiAgICBCRUZPUkUgPSBcImJlZm9yZVwiLFxuICAgIEFESkFDRU5UX0FGVEVSX0JFR0lOID0gXCJhZGphY2VudC1hZnRlci1iZWdpblwiLFxuICAgIEFESkFDRU5UX0JFRk9SRV9CRUdJTiA9IFwiYWRqYWNlbnQtYmVmb3JlLWJlZ2luXCIsXG4gICAgQURKQUNFTlRfQUZURVJfRU5EID0gXCJhZGphY2VudC1hZnRlci1lbmRcIixcbiAgICBBREpBQ0VOVF9CRUZPUkVfRU5EID0gXCJhZGphY2VudC1iZWZvcmUtZW5kXCIsXG4gICAgQVBQRU5EX0NISUxEID0gXCJhcHBlbmQtY2hpbGRcIixcbiAgICBOT05FID0gXCJub25lXCJcbn1cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IERPTUluc2VydGlvblR5cGVUb0luc2VydFBvc2l0aW9uOiAodHlwZTogRE9NSW5zZXJ0aW9uVHlwZSkgPT4gSW5zZXJ0UG9zaXRpb247XG5leHBvcnQgeyBET01JbnNlcnRpb25UeXBlIH07XG4iLCJleHBvcnQgaW50ZXJmYWNlIE9yZ0FuYWx5dGljc0NvbmZpZyB7XG4gICAgYW1wbGl0dWRlPzogT3JnQW5hbHl0aWNzQW1wbGl0dWRlQ29uZmlnO1xuICAgIGN1c3RvbWVyU2VydmljZT86IE9yZ0FuYWx5dGljc0N1c3RvbWVyU2VydmljZUNvbmZpZztcbiAgICBnb29nbGVBbmFseXRpY3M/OiBPcmdBbmFseXRpY3NHb29nbGVBbmFseXRpY3NDb25maWc7XG59XG5leHBvcnQgaW50ZXJmYWNlIE9yZ0FuYWx5dGljc0FtcGxpdHVkZUNvbmZpZyB7XG4gICAgc2Vzc2lvblJlcGxheUVuYWJsZWQ6IGJvb2xlYW47XG4gICAgc2Vzc2lvblJlcGxheVNhbXBsZVJhdGU6IG51bWJlcjtcbiAgICB0cmFja2luZ0VuYWJsZWQ6IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIE9yZ0FuYWx5dGljc0N1c3RvbWVyU2VydmljZUNvbmZpZyB7XG4gICAgcHJvdmlkZXI6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgT3JnQW5hbHl0aWNzR29vZ2xlQW5hbHl0aWNzQ29uZmlnIHtcbiAgICBtZWFzdXJlbWVudElkPzogc3RyaW5nO1xufVxuIiwiaW1wb3J0IHsgT3JnQW5hbHl0aWNzQ29uZmlnIH0gZnJvbSAnLi9vcmdBbmFseXRpY3NDb25maWcnO1xuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6YXRpb25Db25maWcge1xuICAgIGNyZWF0ZWRBdDogc3RyaW5nO1xuICAgIG5hbWVzcGFjZTogc3RyaW5nO1xuICAgIGlzTGF0ZXN0OiBib29sZWFuO1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICB1cGRhdGVkQXQ6IHN0cmluZztcbiAgICBjb25maWc6IE9yZ0FuYWx5dGljc0NvbmZpZztcbiAgICBvcmdhbml6YXRpb25JZD86IHN0cmluZztcbiAgICBpZD86IHN0cmluZztcbn1cbiIsImltcG9ydCB7IE9yZ2FuaXphdGlvblN0YXR1c0VudW0gfSBmcm9tIFwiQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50XCI7XG5pbXBvcnQgeyBPcmdhbml6YXRpb25Db25maWcgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvb3JnYW5pemF0aW9uQ29uZmlnXCI7XG5pbXBvcnQgeyBDb2xvck1hcHBpbmcgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9jb2xvcnNDb25maWdcIjtcbmltcG9ydCB7IEZyb250ZW5kQ29uZmlnIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZnJvbnRlbmRDb25maWdcIjtcbmV4cG9ydCBpbnRlcmZhY2UgT3JnQ29uZmlnRXhwZXJpbWVudCB7XG4gICAgZ3JvdXA/OiBzdHJpbmc7XG4gICAgZ3JvdXBOYW1lPzogc3RyaW5nO1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgcnVsZUlkPzogc3RyaW5nO1xuICAgIHZhbHVlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5leHBvcnQgaW50ZXJmYWNlIE9yZ0NvbmZpZ0ZlYXR1cmVHYXRlIHtcbiAgICBncm91cE5hbWU/OiBzdHJpbmc7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICBydWxlSWQ/OiBzdHJpbmc7XG4gICAgdmFsdWU/OiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6YXRpb24ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgICBkb21haW46IHN0cmluZztcbiAgICBzaG9ydE5hbWU6IHN0cmluZztcbiAgICBzdGF0dXM6IE9yZ2FuaXphdGlvblN0YXR1c0VudW07XG4gICAgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICAgIHVwZGF0ZWRBdD86IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemF0aW9uU2V0dGluZ3Mge1xuICAgIG9yZzogT3JnYW5pemF0aW9uO1xuICAgIHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgT3JnQ29uZmlnIHtcbiAgICBjb25maWdzOiBPcmdhbml6YXRpb25Db25maWdbXTtcbiAgICBleHBlcmltZW50czogT3JnQ29uZmlnRXhwZXJpbWVudFtdO1xuICAgIGdhdGVzOiBPcmdDb25maWdGZWF0dXJlR2F0ZVtdO1xuICAgIG9yZzogT3JnYW5pemF0aW9uU2V0dGluZ3M7XG4gICAgY29sb3JzQ29uZmlnPzogQ29sb3JNYXBwaW5nO1xuICAgIGZyb250ZW5kQ29uZmlnPzogRnJvbnRlbmRDb25maWc7XG59XG4iLCJpbXBvcnQgeyBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL2NoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uXCI7XG5pbXBvcnQgeyBDb2xvck1hcHBpbmcsIENvbG9yTmFtZXMsIGNvbG9yVmFyIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvY29sb3JzQ29uZmlnXCI7XG5pbXBvcnQgeyBGZWF0dXJlR2F0ZXMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9mZWF0dXJlR2F0ZXNcIjtcbmltcG9ydCB7IEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uTW9kZSwgQ3VzdG9tZXJTZXJ2aWNlVHlwZSB9IGZyb20gXCJzcmMvdHlwZXMvY3VzdG9tZXJTZXJ2aWNlXCI7XG5pbXBvcnQgeyBHcmlkSW5zZXJ0aW9uVHlwZSB9IGZyb20gXCJzcmMvbWVyY2hhbnRzL2dyaWRJbnNlcnRpb25cIjtcbmltcG9ydCB7IERPTUluc2VydGlvblR5cGUgfSBmcm9tIFwic3JjL21lcmNoYW50cy9kb21JbnNlcnRpb25cIjtcbmltcG9ydCB0eXBlIHsgUGFnZVZpc2l0Q2F0ZWdvcnksIFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5IH0gZnJvbSBcIkBzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudFwiO1xuaW1wb3J0IHsgQ2hhdFN0YXRlIH0gZnJvbSBcInNyYy90eXBlcy9jdXN0c2VydmljZS10eXBlc1wiO1xuaW1wb3J0IHsgU3VnZ2VzdGlvbkJhckxvY2F0aW9uRm9yTWV0cmljcyB9IGZyb20gXCJzcmMvdHlwZXMvc3VnZ2VzdGlvbkJhclYyLXR5cGVzXCI7XG5pbXBvcnQgeyBUZXN0UHJvcHMgfSBmcm9tIFwic3JjL3R5cGVzL3Rlc3QtdHlwZXNcIjtcbmltcG9ydCB7IE9yZ0NvbmZpZ0ZlYXR1cmVHYXRlIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL29yZ0NvbmZpZ1Jlc3VsdHNcIjtcbnR5cGUgU2hvd0Zsb2F0aW5nQnV0dG9uT3B0aW9ucyA9IFwiYWx3YXlzXCIgfCBcImFmdGVyLWludGVyYWN0aW9uLW9uLW1vYmlsZS1hbHdheXMtZGVza3RvcFwiIHwgXCJhZnRlci1pbnRlcmFjdGlvbi1hbnl3aGVyZVwiIHwgXCJuZXZlclwiO1xudHlwZSBGbG9hdGluZ0VudHJ5UG9pbnRDb25maWcgPSB7XG4gICAgcG9zaXRpb246IFwiYm90dG9tLWxlZnRcIiB8IFwibWlkZGxlLWxlZnRcIiB8IFwibWlkZGxlLXJpZ2h0XCIgfCBcImJvdHRvbS1yaWdodFwiO1xuICAgIGV4cGFuc2lvblRleHQ/OiB7XG4gICAgICAgIHBkcDogc3RyaW5nO1xuICAgICAgICBwbHA6IHN0cmluZztcbiAgICB9O1xuICAgIG1pbmltaXplZENvbG9yOiBzdHJpbmc7XG4gICAgZXhwYW5kZWRDb2xvcjogc3RyaW5nO1xuICAgIHRleHRDb2xvcj86IHN0cmluZztcbiAgICBzaG93T3B0aW9uOiBTaG93RmxvYXRpbmdCdXR0b25PcHRpb25zO1xuICAgIGljb25TVkdTcmM/OiBzdHJpbmc7XG4gICAgaWNvblNpemU/OiBudW1iZXI7XG4gICAgaWNvblN0cm9rZUNvbG9yPzogc3RyaW5nO1xuICAgIGljb25GaWxsQ29sb3I/OiBzdHJpbmc7XG4gICAgaGVpZ2h0PzogbnVtYmVyO1xuICAgIGZvbnRTaXplPzogbnVtYmVyO1xufTtcbnR5cGUgV2VsY29tZVNlY3Rpb25WYXJpYW50ID0gXCJzdGFuZGFyZFwiIHwgXCJvdXRsaW5lZFwiO1xudHlwZSBXZWxjb21lU2VjdGlvbkNvbG9yVmFyaWFudCA9IFwic3RhbmRhcmRcIiB8IFwiYWNjZW50XCIgfCBcImJyYW5kXCIgfCBcImxpZ2h0XCI7XG50eXBlIFdlbGNvbWVTZWN0aW9uQ29uZmlnID0ge1xuICAgIHZhcmlhbnQ6IFdlbGNvbWVTZWN0aW9uVmFyaWFudDtcbiAgICBjb2xvclZhcmlhbnQ/OiBXZWxjb21lU2VjdGlvbkNvbG9yVmFyaWFudDtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICBzdWJ0aXRsZT86IHN0cmluZztcbiAgICBpY29uTmFtZT86IHN0cmluZztcbiAgICBpbWFnZVNyYz86IHN0cmluZztcbn07XG50eXBlIENoYXRQcmV2aWV3Q29uZmlnID0ge1xuICAgIHZhcmlhbnQ6IFwiZmxhdFwiIHwgXCJmaWxsZWRcIiB8IFwib3V0bGluZWRcIjtcbiAgICBsYXJnZVByb2R1Y3RDb21wYXJpc29uPzogYm9vbGVhbjtcbiAgICBmaWxsZWRCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgICBpY29uRmlsbENvbG9yOiBzdHJpbmc7XG4gICAgYnV0dG9uVGV4dENvbG9yPzogc3RyaW5nO1xuICAgIGJ1dHRvblRleHRTZWNvbmRhcnlDb2xvcj86IHN0cmluZztcbiAgICBidXR0b25UZXh0SG92ZXJDb2xvcj86IHN0cmluZztcbiAgICBidXR0b25CYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgICBidXR0b25CYWNrZ3JvdW5kSG92ZXJDb2xvcjogc3RyaW5nO1xuICAgIGJ1dHRvbkJvcmRlckNvbG9yPzogc3RyaW5nO1xuICAgIGJ1dHRvbkJvcmRlckhvdmVyQ29sb3I/OiBzdHJpbmc7XG4gICAgY29waWVzOiB7XG4gICAgICAgIHBkcDogc3RyaW5nW107XG4gICAgICAgIHBscDogc3RyaW5nW107XG4gICAgfTtcbiAgICBzdGF0aWNTdWdnZXN0aW9uQ29waWVzPzoge1xuICAgICAgICBwZHA6IHN0cmluZ1tdO1xuICAgICAgICBwbHA6IHN0cmluZ1tdO1xuICAgIH07XG4gICAgc3RhdGljUExQSW1hZ2VzPzogc3RyaW5nW107XG4gICAgZm9vdGVyQ29uZmlnPzogQ2hhdFByZXZpZXdGb290ZXJDb25maWc7XG4gICAgaGVhZGVyQ29uZmlnPzogQ2hhdFByZXZpZXdIZWFkZXJDb25maWc7XG4gICAgdG9wTWFyZ2luPzogbnVtYmVyO1xufTtcbnR5cGUgQ2hhdFByZXZpZXdIZWFkZXJDb25maWcgPSB7XG4gICAgdGl0bGU/OiBzdHJpbmc7XG4gICAgaW1hZ2VTcmM/OiBzdHJpbmc7XG4gICAgaW1hZ2VIZWlnaHQ/OiBudW1iZXI7XG4gICAgc3BhcmtsZXNDb2xvcj86IHN0cmluZztcbiAgICBmb250U2l6ZT86IHN0cmluZztcbiAgICBpY29uV2lkdGg/OiBzdHJpbmc7XG4gICAgaWNvbkhlaWdodD86IHN0cmluZztcbn07XG5pbnRlcmZhY2UgQ2hhdFByZXZpZXdGb290ZXJDb25maWcge1xuICAgIGhhc0ZhZGU/OiBib29sZWFuO1xuICAgIHN1Z2dlc3Rpb25CdXR0b25WYXJpYW50PzogXCJkYXJrXCIgfCBcImxpZ2h0XCIgfCBcIm91dGxpbmVkXCI7XG4gICAgc3VnZ2VzdGlvbnNCYWNrZ3JvdW5kPzogc3RyaW5nO1xuICAgIHJlcGx5QnV0dG9uSWNvbj86IFwic2VuZFwiIHwgXCJtYWduaWZ5aW5nR2xhc3NcIiB8IFwidGhpbk1hZ25pZnlpbmdHbGFzc1wiIHwgXCJzZWFyY2hJY29uXCI7XG4gICAgcmVwbHlCdXR0b25UZXh0Pzogc3RyaW5nO1xuICAgIHJlcGx5SW5wdXRIYXNTaGFkb3c/OiBib29sZWFuO1xuICAgIHJlcGx5SW5wdXRIYXNCb3JkZXI/OiBib29sZWFuO1xuICAgIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbn1cbnR5cGUgUHJvZHVjdFJldmlld1N0eWxlVmFyaWFudCA9IFwic3RhbmRhcmRcIiB8IFwiYm9yZGVyZWRcIjtcbnR5cGUgUHJvZHVjdFJldmlld0NvbG9yVmFyaWFudCA9IFwibmV1dHJhbFwiIHwgXCJicmFuZFwiIHwgXCJwcmVtaXVtXCI7XG5pbnRlcmZhY2UgUHJvZHVjdFJldmlld0NvbmZpZyB7XG4gICAgc3R5bGVWYXJpYW50OiBQcm9kdWN0UmV2aWV3U3R5bGVWYXJpYW50O1xuICAgIGNvbG9yVmFyaWFudDogUHJvZHVjdFJldmlld0NvbG9yVmFyaWFudDtcbiAgICB2ZXJpZmllZEJ1eWVyVGl0bGU6IHN0cmluZztcbiAgICBpbmNlbnRpdml6ZWRSZXZpZXdGbGFnPzogYm9vbGVhbjtcbn1cbnR5cGUgUGFnZUNhcmRWYXJpYW50ID0gXCJmaWxsZWRcIiB8IFwib3V0bGluZWRcIiB8IFwibWluaW1hbFwiO1xudHlwZSBQYWdlQ2FyZEhvdmVyVmFyaWFudCA9IFwibm9uZVwiIHwgXCJzaGFkb3dcIiB8IFwibGlmdFwiO1xudHlwZSBQYWdlQ2FyZEljb25WYXJpYW50ID0gXCJwcmltYXJ5XCIgfCBcImFjY2VudFwiIHwgXCJiYWNrZ3JvdW5kXCIgfCBcIm5vbmVcIjtcbnR5cGUgUGFnZUNhcmRDb25maWcgPSB7XG4gICAgdmFyaWFudDogUGFnZUNhcmRWYXJpYW50O1xuICAgIGhvdmVyVmFyaWFudDogUGFnZUNhcmRIb3ZlclZhcmlhbnQ7XG4gICAgaWNvblZhcmlhbnQ6IFBhZ2VDYXJkSWNvblZhcmlhbnQ7XG59O1xudHlwZSBQcm9kdWN0Q2FyZFZhcmlhbnQgPSBcImZpbGxlZFwiIHwgXCJib3JkZXJlZFwiIHwgXCJtaW5pbWFsXCIgfCBcInRyYW5zcGFyZW50Qm9yZGVyZWRcIjtcbnR5cGUgUHJvZHVjdENhcmRIb3ZlclZhcmlhbnQgPSBcImJhY2tncm91bmREYXJrXCIgfCBcIm5vbmVcIjtcbnR5cGUgUHJvZHVjdENhcmRMYXlvdXRWYXJpYW50ID0gXCJub3JtYWxcIiB8IFwidGFsbFwiIHwgXCJzcXVhcmVcIjtcbmludGVyZmFjZSBQcm9kdWN0Q2FyZENvbmZpZyB7XG4gICAgdmFyaWFudDogUHJvZHVjdENhcmRWYXJpYW50O1xuICAgIGhvdmVyVmFyaWFudDogUHJvZHVjdENhcmRIb3ZlclZhcmlhbnQ7XG4gICAgbGF5b3V0VmFyaWFudDogUHJvZHVjdENhcmRMYXlvdXRWYXJpYW50O1xuICAgIHByaWNlUHJlZml4Pzogc3RyaW5nO1xufVxudHlwZSBDU1N3aXRjaENvbmZpZyA9IHtcbiAgICB2YXJpYW50OiBcImF0dGFjaGVkXCIgfCBcImRldGFjaGVkXCI7XG4gICAgYmFja2dyb3VuZENvbG9yOiBzdHJpbmc7XG4gICAgYm9yZGVyQ29sb3I6IHN0cmluZztcbiAgICBzZWxlY3RlZFRleHRDb2xvcjogc3RyaW5nO1xuICAgIHNlbGVjdGVkQmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICAgIHVuc2VsZWN0ZWRUZXh0Q29sb3I6IHN0cmluZztcbiAgICB1bnNlbGVjdGVkQmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICAgIHN1cHBvcnRUaXRsZT86IHN0cmluZztcbiAgICBzcGlmZnlUaXRsZT86IHN0cmluZztcbiAgICBzcGlmZnlUaXRsZUhhc0xvZ28/OiBib29sZWFuO1xufTtcbnR5cGUgQ2hhdEhlYWRlckNvbmZpZyA9IHtcbiAgICBjb2xsYXBzZWRDb2xvcjogc3RyaW5nO1xuICAgIGV4cGFuZGVkQ29sb3I6IHN0cmluZztcbiAgICBjaGV2cm9uQ29sb3I6IHN0cmluZztcbiAgICBpbWFnZVNyYz86IHN0cmluZztcbiAgICBpY29uPzogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8UmVhY3QuU1ZHUHJvcHM8U1ZHU1ZHRWxlbWVudD4+O1xuICAgIGNsb3NlSWNvbj86IFJlYWN0LkZ1bmN0aW9uQ29tcG9uZW50PFJlYWN0LlNWR1Byb3BzPFNWR1NWR0VsZW1lbnQ+PjtcbiAgICBib3JkZXJCb3R0b20/OiBzdHJpbmc7XG4gICAgaGVhZGVyQmFySGVpZ2h0UGFydGlhbFZpZXc6IG51bWJlcjtcbiAgICBoZWFkZXJCYXJIZWlnaHRGdWxsVmlldzogbnVtYmVyO1xuICAgIGN1c3RvbWVyU3VwcG9ydFN3aXRjaENvbmZpZz86IENTU3dpdGNoQ29uZmlnO1xufTtcbnR5cGUgU2ltcGxlQ3VzdG9tZXJTZXJ2aWNlSW50ZWdyYXRpb24gPSB7XG4gICAgaW50ZWdyYXRpb25Nb2RlOiBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbk1vZGU7XG4gICAgcHJvdmlkZXI6IEN1c3RvbWVyU2VydmljZVR5cGU7XG4gICAgdXNlVW5pZmllZEJ1dHRvbj86IGJvb2xlYW47XG4gICAgbWF4ZmlsZVVwbG9hZFNpemU/OiBudW1iZXI7XG59O1xudHlwZSBGdWxsQ3VzdG9tZXJTZXJ2aWNlSW50ZWdyYXRpb24gPSB7XG4gICAgaW50ZWdyYXRpb25Nb2RlOiBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbk1vZGU7XG4gICAgcHJvdmlkZXI6IEN1c3RvbWVyU2VydmljZVR5cGU7XG4gICAgdXNlVW5pZmllZEJ1dHRvbj86IGJvb2xlYW47XG4gICAgY2hhdEVuYWJsZWREdXJpbmdCdXNpbmVzc0hvdXJzPzogYm9vbGVhbjtcbiAgICBzaG93TmFtZUlucHV0PzogYm9vbGVhbjtcbiAgICBmb3JtQWlOYW1lPzogc3RyaW5nO1xuICAgIHdlbGNvbWVUaXRsZTogc3RyaW5nO1xuICAgIHdlbGNvbWVEZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIHNob3dXZWxjb21lT25Gb3JtPzogYm9vbGVhbjtcbiAgICBjb250YWN0U3ViamVjdE9wdGlvbnM/OiBzdHJpbmdbXTtcbiAgICBnZXRDdXN0b21XYWl0aW5nTWVzc2FnZT86IChuYW1lPzogc3RyaW5nKSA9PiBzdHJpbmc7XG4gICAgd2l0aGluQnVzaW5lc3NIb3Vyc01lc3NhZ2U/OiBzdHJpbmc7XG4gICAgd2l0aGluQnVzaW5lc3NIb3Vyc1dhaXRpbmdNZXNzYWdlPzogc3RyaW5nO1xuICAgIG91dHNpZGVCdXNpbmVzc0hvdXJzTWVzc2FnZT86IHN0cmluZztcbiAgICBvdXRzaWRlQnVzaW5lc3NIb3Vyc1dhaXRpbmdNZXNzYWdlPzogc3RyaW5nO1xuICAgIHdpdGhpbkJ1c2luZXNzSG91cnNGb3JtTWVzc2FnZT86IHN0cmluZztcbiAgICBvdXRzaWRlQnVzaW5lc3NIb3Vyc0Zvcm1NZXNzYWdlPzogc3RyaW5nO1xuICAgIHN1Z2dlc3RlZEFJUXVlc3Rpb25zPzogc3RyaW5nW107XG4gICAgYnVzaW5lc3NIb3Vyc1BvbGxpbmc/OiBudW1iZXI7XG4gICAgbWF4ZmlsZVVwbG9hZFNpemU/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBCRS5cbiAgICAgKi9cbiAgICBidXNpbmVzc0hvdXJzU3RhcnRVVEM/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBCRS5cbiAgICAgKi9cbiAgICBidXNpbmVzc0hvdXJzRW5kVVRDPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFRoaXMgaXMgaGFuZGxlZCBieSB0aGUgQkUuXG4gICAgICovXG4gICAgYnVzaW5lc3NIb3Vyc1RpbWV6b25lPzogc3RyaW5nO1xuICAgIHNob3dBSVN1Z2dlc3Rpb25zV2l0aGluQnVzaW5lc3NIb3Vycz86IGJvb2xlYW47XG4gICAgd2FpdGluZ01lc3NhZ2VQb3NpdGlvbj86IFwiQkVGT1JFX01FU1NBR0VTXCIgfCBcIkFGVEVSX01FU1NBR0VTXCI7XG4gICAgbGVnYWxNZXNzYWdlPzogc3RyaW5nO1xuICAgIHdpdGhpbkJ1c2luZXNzSG91cnNJbml0aWFsU3RhdGU/OiBDaGF0U3RhdGU7XG4gICAgb3V0c2lkZUJ1c2luZXNzSG91cnNJbml0aWFsU3RhdGU/OiBDaGF0U3RhdGU7XG4gICAgd2l0aGluQnVzaW5lc3NIb3Vyc0J1dHRvbnRleHQ/OiBzdHJpbmc7XG4gICAgb3V0c2lkZUJ1c2luZXNzSG91cnNCdXR0b250ZXh0Pzogc3RyaW5nO1xuICAgIHJlb3BlbkNoYXRNZXNzYWdlOiBzdHJpbmc7XG59O1xudHlwZSBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbiA9IFNpbXBsZUN1c3RvbWVyU2VydmljZUludGVncmF0aW9uIHwgRnVsbEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uO1xudHlwZSBDb252ZXJzYXRpb25hbFNlYWNoID0ge1xuICAgIGVuYWJsZWQ/OiBib29sZWFuO1xuICAgIHJlcGx5SW5wdXQ/OiBSZXBseUlucHV0Q29uZmlnO1xuICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW107XG4gICAgZW50cnlwb2ludEJnQ29sb3I/OiBzdHJpbmc7XG4gICAgZW50cnlwb2ludFRleHRDb2xvcj86IHN0cmluZztcbiAgICBlbnRyeXBvaW50QnRuQ29sb3I/OiBzdHJpbmc7XG4gICAgZW50cnlwb2ludEJ0blRleHRDb2xvcj86IHN0cmluZztcbiAgICBlbnRyeXBvaW50QnRuQm9yZGVyQ29sb3I/OiBzdHJpbmc7XG4gICAgZW50cnlwb2ludENvbnRhaW5lcj86IHN0cmluZztcbiAgICBlbnRyeXBvaW50VHJpZ2dlcj86IHN0cmluZztcbiAgICBwcm9kdWN0R3JpZENvbnRhaW5lcj86IHN0cmluZztcbiAgICBnZW5lcmFsU2VhcmNoQnRuPzogc3RyaW5nO1xuICAgIHBhZ2VDb250ZW50Pzogc3RyaW5nO1xuICAgIHNlYXJjaENvbnRlbnQ/OiBzdHJpbmc7XG4gICAgc29ydGluZ1RpdGxlPzogc3RyaW5nO1xuICAgIHNlbGVjdGlvblRpdGxlPzogc3RyaW5nO1xuICAgIHNvcnRpbmdGb250Pzogc3RyaW5nO1xuICAgIG9wdGlvbnNGb250Pzogc3RyaW5nO1xuICAgIHNvcnRpbmdCdXR0b25UZXh0Pzogc3RyaW5nO1xufTtcbnR5cGUgQ2hhdE1lc3NhZ2VWYXJpYW50ID0gXCJzdGFuZGFyZFwiIHwgXCJwcmVtaXVtXCIgfCBcImFjY2VudFwiO1xuaW50ZXJmYWNlIENoYXRNZXNzYWdlQ29uZmlnIHtcbiAgICBhc3Npc3RhbnRDaGF0VGl0bGU6IHN0cmluZztcbiAgICB2YXJpYW50OiBDaGF0TWVzc2FnZVZhcmlhbnQ7XG4gICAgcHJvZHVjdExpbms6IHtcbiAgICAgICAgdmFyaWFudDogUHJvZHVjdExpbmtWYXJpYW50O1xuICAgICAgICBob3ZlclZhcmlhbnQ6IFByb2R1Y3RMaW5rSG92ZXJWYXJpYW50O1xuICAgICAgICBpY29uVmFyaWFudDogUHJvZHVjdExpbmtJY29uVmFyaWFudDtcbiAgICB9O1xufVxuaW50ZXJmYWNlIFJlcGx5SW5wdXRDb25maWcge1xuICAgIHNpemU/OiBcIm1kXCIgfCBcImxnXCI7XG4gICAgc2VuZEljb246IFwiYXJyb3dVcFwiIHwgXCJzZW5kXCIgfCBcInNlYXJjaFwiO1xuICAgIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xufVxuaW50ZXJmYWNlIFBhcnRpYWxWaWV3Q29uZmlnIHtcbiAgICBtYXhIZWlnaHQ6IG51bWJlcjtcbiAgICBib3JkZXJSYWRpdXM/OiBzdHJpbmc7XG59XG50eXBlIFByb2R1Y3RMaW5rSWNvblZhcmlhbnQgPSBcImFjY2VudFByaW1hcnlcIiB8IFwiYmFja2dyb3VuZFByaW1hcnlcIiB8IFwiYmFja2dyb3VuZFByaW1hcnlEYXJrXCIgfCBcImJvcmRlckxpZ2h0XCIgfCBcImJhY2tncm91bmRTYXR1cmF0ZWRcIjtcbnR5cGUgUHJvZHVjdExpbmtWYXJpYW50ID0gXCJ0ZXh0TGlua1wiO1xudHlwZSBQcm9kdWN0TGlua0hvdmVyVmFyaWFudCA9IFwiYmFja2dyb3VuZERhcmtcIjtcbnR5cGUgU2VhcmNoQ2FyZFZhcmlhbnQgPSBcImJhY2tncm91bmRQcmltYXJ5XCIgfCBcImJhY2tncm91bmRTZWNvbmRhcnlcIiB8IFwiYmFja2dyb3VuZFNlY29uZGFyeURhcmtcIiB8IFwiYmFja2dyb3VuZExpZ2h0XCIgfCBcImJhY2tncm91bmRTYXR1cmF0ZWRcIjtcbnR5cGUgU3VnZ2VzdGlvbkJ1dHRvblZhcmlhbnQgPSBcIm91dGxpbmVkXCIgfCBcIm91dGxpbmVkTGlnaHRcIiB8IFwicHJpbWFyeVwiIHwgXCJzZWNvbmRhcnlcIiB8IFwidGVydGlhcnlcIiB8IFwiZGFya1wiIHwgXCJkYXJrQWNjZW50XCIgfCBcImRhcmtQcmltYXJ5XCIgfCBcInNlY29uZGFyeURhcmtcIiB8IFwic2Vjb25kYXJ5QWNjZW50XCIgfCBcInRyYW5zcGFyZW50XCIgfCBcInRyYW5zcGFyZW50RGFya1wiIHwgXCJsaWdodERhcmtcIjtcbmludGVyZmFjZSBTdWdnZXN0aW9uQnV0dG9uQ29uZmlnIHtcbiAgICB2YXJpYW50PzogU3VnZ2VzdGlvbkJ1dHRvblZhcmlhbnQ7XG4gICAgaG92ZXJWYXJpYW50PzogU3VnZ2VzdGlvbkJ1dHRvblZhcmlhbnQ7XG4gICAgYW5zd2VyVmFyaWFudD86IFN1Z2dlc3Rpb25CdXR0b25WYXJpYW50O1xuICAgIGJvcmRlclJhZGl1cz86IFwic21cIiB8IFwibWRcIiB8IFwibGdcIjtcbn1cbnR5cGUgTnVtUm93cyA9IFwiZGVmYXVsdFwiIHwgXCJhbHdheXNPbmVSb3dcIiB8IFwiYWx3YXlzVHdvUm93c1wiIHwgXCJ0d29Sb3dzT25Nb2JpbGVcIjtcbmludGVyZmFjZSBBbHBoYWJldGljRmlsdGVyU29ydGluZyB7XG4gICAgdHlwZTogXCJhbHBoYWJldGljXCI7XG59XG5pbnRlcmZhY2UgUHJvZHVjdENvdW50RmlsdGVyU29ydGluZyB7XG4gICAgdHlwZTogXCJwcm9kdWN0Q291bnRcIjtcbn1cbmludGVyZmFjZSBDdXN0b21GaWx0ZXJTb3J0aW5nIHtcbiAgICB0eXBlOiBcImN1c3RvbVwiO1xuICAgIG1hcDogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbn1cbnR5cGUgRmlsdGVyU29ydGluZyA9IEFscGhhYmV0aWNGaWx0ZXJTb3J0aW5nIHwgUHJvZHVjdENvdW50RmlsdGVyU29ydGluZyB8IEN1c3RvbUZpbHRlclNvcnRpbmc7XG5pbnRlcmZhY2UgQmFzZUZpbHRlckNvbmZpZyB7XG4gICAgZmlsdGVySWQ6IHN0cmluZztcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nO1xufVxuaW50ZXJmYWNlIER5bmFtaWNGaWx0ZXJDb25maWcgZXh0ZW5kcyBCYXNlRmlsdGVyQ29uZmlnIHtcbiAgICB0eXBlOiBcImR5bmFtaWNcIjtcbiAgICBhdHRyaWJ1dGU6IHN0cmluZztcbiAgICBzb3J0aW5nOiBGaWx0ZXJTb3J0aW5nO1xufVxuaW50ZXJmYWNlIFByaWNlRmlsdGVyQ29uZmlnIGV4dGVuZHMgQmFzZUZpbHRlckNvbmZpZyB7XG4gICAgdHlwZTogXCJwcmljZVwiO1xuICAgIGJ1Y2tldFNpemU6IG51bWJlcjtcbn1cbmV4cG9ydCB0eXBlIEZpbHRlckF0dHJpYnV0ZSA9IER5bmFtaWNGaWx0ZXJDb25maWcgfCBQcmljZUZpbHRlckNvbmZpZztcbmV4cG9ydCB0eXBlIFNlYXJjaFplcm9TdGF0ZVZhcmlhbnQgPSBcImJhY2tncm91bmRUZXJ0aWFyeVwiIHwgXCJiYWNrZ3JvdW5kRGFya1wiIHwgXCJiYWNrZ3JvdW5kUHJpbWFyeVwiO1xuZXhwb3J0IHR5cGUgU2VhcmNoWmVyb1N0YXRlTGF5b3V0ID0gXCJpbnB1dFwiIHwgXCJpY29uXCI7XG5leHBvcnQgdHlwZSBTZWFyY2hJbnB1dFZhcmlhbnQgPSBcInN0YW5kYXJkXCI7XG5leHBvcnQgdHlwZSBTZWFyY2hJY29uVmFyaWFudCA9IFwidGhpblwiIHwgXCJib2xkXCI7XG5leHBvcnQgdHlwZSBTZWFyY2hGaWx0ZXJTaWRlYmFyVmFyaWFudCA9IFwiZGFya0J1dHRvblwiIHwgXCJsaWdodEJ1dHRvblwiO1xuZXhwb3J0IHR5cGUgUHJvZHVjdEdyaWRWYXJpYW50ID0gXCJzdGFuZGFyZFwiIHwgXCJzcXVhcmVcIjtcbnR5cGUgVXNlclF1ZXJ5QnV0dG9uSWNvbiA9IFwibWFnbmlmeWluZ0dsYXNzXCIgfCBcInNlbmRcIiB8IFwibWFnbmlmeWluZ0dsYXNzVGhpblwiIHwgXCJzZW5kQXJyb3dcIiB8IFwic2VhcmNoSWNvblwiO1xuaW50ZXJmYWNlIFVzZXJRdWVyeUJ1dHRvbkNvbmZpZyB7XG4gICAgdmFyaWFudD86IFwiYm94XCIgfCBcInVuZGVybGluZUxpZ2h0XCIgfCBcInVuZGVybGluZURhcmtcIjtcbiAgICBwbGFjZWhvbGRlclRleHQ/OiBzdHJpbmc7XG4gICAgaWNvbjogVXNlclF1ZXJ5QnV0dG9uSWNvbjtcbn1cbmludGVyZmFjZSBUZXJtc0FuZENvbmRpdGlvbnNDb25maWcge1xuICAgIGNvcHk6IHN0cmluZztcbiAgICBsaW5rOiBzdHJpbmc7XG4gICAgbGlua1RleHQ6IHN0cmluZztcbn1cbmludGVyZmFjZSBNZXJjaGFudFZhcmlhbnRTZXR0aW5ncyB7XG4gICAgZHluYW1pY1ZhcmlhbnRzOiB7XG4gICAgICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgICAgIHJlZnJlc2hJbnRlcnZhbD86IG51bWJlcjtcbiAgICB9O1xufVxuaW50ZXJmYWNlIEZsb2F0aW5nQ2hhdENvbmZpZyB7XG4gICAgZW5hYmxlV2F0ZXJtYXJrOiBib29sZWFuO1xuICAgIHVzZXJRdWVyeUlucHV0RW5hYmxlZDogYm9vbGVhbjtcbiAgICBpZ25vcmVGaXJzdE1vZGVsUmVzcG9uc2U/OiBib29sZWFuO1xuICAgIG5ldmVyU2hvd1NpbmdsZVByb2R1Y3RDYXJkcz86IGJvb2xlYW47XG4gICAgdGVybXNBbmRDb25kaXRpb25zQ29uZmlnPzogVGVybXNBbmRDb25kaXRpb25zQ29uZmlnO1xuICAgIHN1Z2dlc3Rpb25CdXR0b25Db25maWc/OiBTdWdnZXN0aW9uQnV0dG9uQ29uZmlnO1xuICAgIHJlcGx5SW5wdXRDb25maWc6IFJlcGx5SW5wdXRDb25maWc7XG59XG5pbnRlcmZhY2UgU2VhcmNoQ29uZmlnIHtcbiAgICBlbmFibGVHbG9iYWxTZWFyY2g6IGJvb2xlYW47XG4gICAgc2VhcmNoRmlsdGVyQ29uZmlnOiBGaWx0ZXJBdHRyaWJ1dGVbXTtcbiAgICByZWRpcmVjdFNlYXJjaFJlc3VsdHNVcmw/OiBzdHJpbmc7XG4gICAgYWRkaXRpdmVEeW5hbWljRmlsdGVycz86IGJvb2xlYW47XG59XG50eXBlIE9yZ1VJQ29uZmlnID0ge1xuICAgIHNob3J0TmFtZTogc3RyaW5nO1xuICAgIGlkPzogc3RyaW5nO1xuICAgIGZsb2F0aW5nRW50cnlwb2ludENvbmZpZz86IEZsb2F0aW5nRW50cnlQb2ludENvbmZpZztcbiAgICBjaGF0UHJldmlld0NvbmZpZz86IENoYXRQcmV2aWV3Q29uZmlnO1xuICAgIGN1c3RvbWVyU2VydmljZUludGVncmF0aW9uOiBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbjtcbiAgICBjb252ZXJzYXRpb25hbFNlYXJjaD86IENvbnZlcnNhdGlvbmFsU2VhY2g7XG4gICAgbWVyY2hhbnRPdmVycmlkZUNzcz86IHN0cmluZztcbiAgICBoaWRkZW5FbGVtZW50U2VsZWN0b3JzPzogc3RyaW5nW107XG4gICAgbWVyY2hhbnRWYXJpYW50U2V0dGluZ3M/OiBNZXJjaGFudFZhcmlhbnRTZXR0aW5ncztcbiAgICBmbG9hdGluZ0NoYXRDb25maWc6IEZsb2F0aW5nQ2hhdENvbmZpZztcbiAgICBzZWFyY2hDb25maWc6IFNlYXJjaENvbmZpZztcbiAgICBjaGF0SGVhZGVyOiBDaGF0SGVhZGVyQ29uZmlnO1xuICAgIHN0aWNreUFnZW50U3dpdGNoU3VnZ2VzdGlvbj86IGJvb2xlYW47XG4gICAgcGFydGlhbFZpZXdDb25maWc6IFBhcnRpYWxWaWV3Q29uZmlnO1xuICAgIHdlbGNvbWVTZWN0aW9uQ29uZmlnPzogV2VsY29tZVNlY3Rpb25Db25maWc7XG4gICAgcHJvZHVjdENhcmRDb25maWc/OiBQcm9kdWN0Q2FyZENvbmZpZztcbiAgICBwcm9kdWN0UmV2aWV3Q29uZmlnPzogUHJvZHVjdFJldmlld0NvbmZpZztcbiAgICBwYWdlQ2FyZENvbmZpZz86IFBhZ2VDYXJkQ29uZmlnO1xuICAgIGNoYXRNZXNzYWdlQ29uZmlnOiBDaGF0TWVzc2FnZUNvbmZpZztcbn07XG50eXBlIEluc2VydGlvblBvaW50ID0ge1xuICAgIHNlbGVjdG9yOiBzdHJpbmc7XG4gICAgc2VsZWN0aW9uSW5kZXg/OiBudW1iZXI7XG4gICAgaW5zZXJ0aW9uVHlwZTogRE9NSW5zZXJ0aW9uVHlwZTtcbn07XG50eXBlIFVSTFRlc3QgPSBcInNob3BpZnlcIiB8IFwibnVsbFwiO1xudHlwZSBJZEV4dHJhY3RvciA9IFwic2hvcGlmeS1wcm9kdWN0LWlkXCIgfCBcInNob3BpZnktY29sbGVjdGlvbi1pZFwiIHwgXCJzaG9waWZ5LXByb2R1Y3QtdmFyaWFudC1pZFwiIHwgXCJ1cmwtcmVzb2x2ZXItcHJvZHVjdC1pZFwiIHwgXCJ1cmwtcmVzb2x2ZXItcGxwLWlkXCIgfCBcIm51bGxcIjtcbmRlY2xhcmUgZW51bSBDYXRlZ29yeUV4dHJhY3RvclR5cGUge1xuICAgIFZpc2l0Q2F0ZWdvcnlNYXAgPSBcIlZpc2l0Q2F0ZWdvcnlNYXBcIixcbiAgICBWaXNpdENhdGVnb3J5RGVmYXVsdCA9IFwiVmlzaXRDYXRlZ29yeURlZmF1bHRcIlxufVxuaW50ZXJmYWNlIEJhc2VDYXRlZ29yeUV4dHJhY3RvcjxUIGV4dGVuZHMgQ2F0ZWdvcnlFeHRyYWN0b3JUeXBlPiB7XG4gICAgdHlwZTogVDtcbn1cbmludGVyZmFjZSBWaXNpdENhdGVnb3J5TWFwIGV4dGVuZHMgQmFzZUNhdGVnb3J5RXh0cmFjdG9yPENhdGVnb3J5RXh0cmFjdG9yVHlwZS5WaXNpdENhdGVnb3J5TWFwPiB7XG4gICAgbWFwOiB7XG4gICAgICAgIFtrZXkgaW4gUGFnZVZpc2l0Q2F0ZWdvcnldPzogc3RyaW5nW107XG4gICAgfTtcbn1cbmludGVyZmFjZSBWaXNpdENhdGVnb3J5RGVmYXVsdCBleHRlbmRzIEJhc2VDYXRlZ29yeUV4dHJhY3RvcjxDYXRlZ29yeUV4dHJhY3RvclR5cGUuVmlzaXRDYXRlZ29yeURlZmF1bHQ+IHtcbiAgICB2YWx1ZTogUGFnZVZpc2l0Q2F0ZWdvcnk7XG59XG50eXBlIENhdGVnb3J5RXh0cmFjdG9yID0gVmlzaXRDYXRlZ29yeU1hcCB8IFZpc2l0Q2F0ZWdvcnlEZWZhdWx0O1xudHlwZSBXcmFwcGluZ0VsZW1lbnQgPSB7XG4gICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgZWxlbWVudDogc3RyaW5nO1xuICAgIGluc2VydGlvblR5cGU6IERPTUluc2VydGlvblR5cGU7XG59O1xuZGVjbGFyZSBlbnVtIFBhZ2VWYXJpYW50VGVzdFR5cGUge1xuICAgIFNob3BpZnlQTFAgPSBcIlNob3BpZnlQTFBcIixcbiAgICBTaG9waWZ5UERQID0gXCJTaG9waWZ5UERQXCIsXG4gICAgUGFnZUNhdGVnb3J5ID0gXCJQYWdlQ2F0ZWdvcnlcIixcbiAgICBDYXRhbG9nQ2F0ZWdvcnkgPSBcIkNhdGFsb2dDYXRlZ29yeVwiLFxuICAgIFRvcENhdGFsb2dDYXRlZ29yeSA9IFwiVG9wQ2F0YWxvZ0NhdGVnb3J5XCIsXG4gICAgSGFzUmV2aWV3cyA9IFwiSGFzUmV2aWV3c1wiLFxuICAgIEluQ29sbGVjdGlvbiA9IFwiSW5Db2xsZWN0aW9uXCIsXG4gICAgSGFzTWVyY2hhbnRUYWcgPSBcIkhhc01lcmNoYW50VGFnXCIsXG4gICAgRmVhdHVyZUdhdGUgPSBcIkZlYXR1cmVHYXRlXCIsXG4gICAgUGxwSWQgPSBcIlBscElkXCIsXG4gICAgUXVlcnlQYXJhbSA9IFwiUXVlcnlQYXJhbVwiLFxuICAgIFByb2R1Y3RJZCA9IFwiUHJvZHVjdElkXCIsXG4gICAgVXNlckhhc0ludGVyYWN0ZWQgPSBcIlVzZXJIYXNJbnRlcmFjdGVkXCIsXG4gICAgVXNlckhhc05vdEludGVyYWN0ZWQgPSBcIlVzZXJIYXNOb3RJbnRlcmFjdGVkXCIsXG4gICAgaXNMb2FkaW5nID0gXCJpc0xvYWRpbmdcIixcbiAgICBpc1Byb2R1Y3RDb21wYXJpc29uID0gXCJpc1Byb2R1Y3RDb21wYXJpc29uXCIsXG4gICAgRmFsbGJhY2sgPSBcIkZhbGxiYWNrXCIsXG4gICAgVXJsUmVzb2x2ZXIgPSBcIlVybFJlc29sdmVyXCIsXG4gICAgTnVsbCA9IFwibnVsbFwiXG59XG5pbnRlcmZhY2UgQmFzZVBhZ2VWYXJpYW50VGVzdDxUIGV4dGVuZHMgUGFnZVZhcmlhbnRUZXN0VHlwZT4ge1xuICAgIHRlc3RUeXBlOiBUO1xufVxuaW50ZXJmYWNlIFRvcENhdGFsb2dDYXRlZ29yeSBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5Ub3BDYXRhbG9nQ2F0ZWdvcnk+IHtcbiAgICB0b3BDYXRlZ29yeTogc3RyaW5nW107XG59XG5pbnRlcmZhY2UgQ2F0YWxvZ0NhdGVnb3J5VGVzdCBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5DYXRhbG9nQ2F0ZWdvcnk+IHtcbiAgICBjYXRlZ29yeTogU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnk7XG59XG5pbnRlcmZhY2UgSGFzUmV2aWV3c1Rlc3QgZXh0ZW5kcyBCYXNlUGFnZVZhcmlhbnRUZXN0PFBhZ2VWYXJpYW50VGVzdFR5cGUuSGFzUmV2aWV3cz4ge1xuICAgIHJldmlld01pbmltdW0/OiBudW1iZXI7XG59XG5pbnRlcmZhY2UgSW5Db2xsZWN0aW9uVGVzdCBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5JbkNvbGxlY3Rpb24+IHtcbiAgICBjb2xsZWN0aW9uczogc3RyaW5nW107XG59XG5pbnRlcmZhY2UgSGFzTWVyY2hhbnRUYWdUZXN0IGV4dGVuZHMgQmFzZVBhZ2VWYXJpYW50VGVzdDxQYWdlVmFyaWFudFRlc3RUeXBlLkhhc01lcmNoYW50VGFnPiB7XG4gICAgbWVyY2hhbnRUYWdzOiBzdHJpbmdbXTtcbn1cbmludGVyZmFjZSBTaG9waWZ5UExQVVJMVGVzdCBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5TaG9waWZ5UExQPiB7XG59XG5pbnRlcmZhY2UgU2hvcGlmeVBEUFVSTFRlc3QgZXh0ZW5kcyBCYXNlUGFnZVZhcmlhbnRUZXN0PFBhZ2VWYXJpYW50VGVzdFR5cGUuU2hvcGlmeVBEUD4ge1xufVxuaW50ZXJmYWNlIFBhZ2VDYXRlZ29yeVRlc3QgZXh0ZW5kcyBCYXNlUGFnZVZhcmlhbnRUZXN0PFBhZ2VWYXJpYW50VGVzdFR5cGUuUGFnZUNhdGVnb3J5PiB7XG4gICAgZXh0cmFjdG9yOiBDYXRlZ29yeUV4dHJhY3Rvcjtcbn1cbmludGVyZmFjZSBGZWF0dXJlR2F0ZVRlc3QgZXh0ZW5kcyBCYXNlUGFnZVZhcmlhbnRUZXN0PFBhZ2VWYXJpYW50VGVzdFR5cGUuRmVhdHVyZUdhdGU+IHtcbiAgICBmZWF0dXJlR2F0ZTogRmVhdHVyZUdhdGVzO1xufVxuaW50ZXJmYWNlIFByb2R1Y3RJZFRlc3QgZXh0ZW5kcyBCYXNlUGFnZVZhcmlhbnRUZXN0PFBhZ2VWYXJpYW50VGVzdFR5cGUuUHJvZHVjdElkPiB7XG4gICAgcHJvZHVjdElkRXh0cmFjdG9yOiBJZEV4dHJhY3RvcjtcbiAgICBwcm9kdWN0SWRzOiBzdHJpbmdbXTtcbn1cbmludGVyZmFjZSBQbHBJZFRlc3QgZXh0ZW5kcyBCYXNlUGFnZVZhcmlhbnRUZXN0PFBhZ2VWYXJpYW50VGVzdFR5cGUuUGxwSWQ+IHtcbiAgICBwbHBJZEV4dHJhY3RvcjogSWRFeHRyYWN0b3I7XG4gICAgcGxwSWRzOiBzdHJpbmdbXTtcbn1cbmludGVyZmFjZSBRdWVyeVBhcmFtVGVzdCBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5RdWVyeVBhcmFtPiB7XG4gICAgcXVlcnlQYXJhbTogc3RyaW5nO1xufVxuaW50ZXJmYWNlIFVzZXJIYXNJbnRlcmFjdGVkVGVzdCBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5Vc2VySGFzSW50ZXJhY3RlZD4ge1xufVxuaW50ZXJmYWNlIFVzZXJIYXNOb3RJbnRlcmFjdGVkVGVzdCBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5Vc2VySGFzTm90SW50ZXJhY3RlZD4ge1xufVxuaW50ZXJmYWNlIElzTG9hZGluZ1Rlc3QgZXh0ZW5kcyBCYXNlUGFnZVZhcmlhbnRUZXN0PFBhZ2VWYXJpYW50VGVzdFR5cGUuaXNMb2FkaW5nPiB7XG59XG5pbnRlcmZhY2UgSXNQcm9kdWN0Q29tcGFyaXNvbiBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5pc1Byb2R1Y3RDb21wYXJpc29uPiB7XG59XG5pbnRlcmZhY2UgUGFnZUZhbGxiYWNrVGVzdCBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5GYWxsYmFjaz4ge1xufVxuaW50ZXJmYWNlIFVybFJlc29sdmVyVGVzdCBleHRlbmRzIEJhc2VQYWdlVmFyaWFudFRlc3Q8UGFnZVZhcmlhbnRUZXN0VHlwZS5VcmxSZXNvbHZlcj4ge1xufVxuZXhwb3J0IHR5cGUgUGFnZVZhcmlhbnRUZXN0ID0gUGFnZUNhdGVnb3J5VGVzdCB8IFNob3BpZnlQTFBVUkxUZXN0IHwgU2hvcGlmeVBEUFVSTFRlc3QgfCBDYXRhbG9nQ2F0ZWdvcnlUZXN0IHwgVG9wQ2F0YWxvZ0NhdGVnb3J5IHwgSGFzUmV2aWV3c1Rlc3QgfCBJbkNvbGxlY3Rpb25UZXN0IHwgSGFzTWVyY2hhbnRUYWdUZXN0IHwgRmVhdHVyZUdhdGVUZXN0IHwgUHJvZHVjdElkVGVzdCB8IFBscElkVGVzdCB8IFF1ZXJ5UGFyYW1UZXN0IHwgVXNlckhhc0ludGVyYWN0ZWRUZXN0IHwgVXNlckhhc05vdEludGVyYWN0ZWRUZXN0IHwgSXNMb2FkaW5nVGVzdCB8IElzUHJvZHVjdENvbXBhcmlzb24gfCBQYWdlRmFsbGJhY2tUZXN0IHwgVXJsUmVzb2x2ZXJUZXN0O1xuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgc29jaWFsIHByb29mIGVtYmVkZGVkIHdpZGdldFxuICpcbiAqIEBwYXJhbSBoZWFkZXJUaXRsZSAtIFRoZSB0aXRsZSB0ZXh0IHRvIGRpc3BsYXkgaW4gdGhlIHdpZGdldCBoZWFkZXJcbiAqIEBwYXJhbSBzdGF0aWNTdWdnZXN0aW9ucyAtIEEgbGlzdCBvZiBzdHJpbmdzIHRvIGRpc3BsYXkgYXMgc3VnZ2VzdGlvbnMgaW4gdGhlIHdpZGdldFxuICogQHBhcmFtIHN1Z2dlc3Rpb25CdXR0b25WYXJpYW50RGVmYXVsdCAtIFRoZSB2YXJpYW50IG9mIHRoZSBzdWdnZXN0aW9uIGJ1dHRvbiB0byBkaXNwbGF5IGluIHRoZSB3aWRnZXQgZm9vdGVyXG4gKiBAcGFyYW0gc3VnZ2VzdGlvbkJ1dHRvblZhcmlhbnRBY2NlbnQgLSBUaGUgdmFyaWFudCBvZiB0aGUgc3VnZ2VzdGlvbiBidXR0b24gdG8gZGlzcGxheSBpbiB0aGUgd2lkZ2V0IGJvZHlcbiAqIEBwYXJhbSBzdGF0aWNJbWFnZUluZGV4IC0gSW5kZXggb2YgdGhlIGltYWdlVXJsIHRvIHVzZSBmcm9tIHRoZSBwcm9kdWN0IHJlc3BvbnNlXG4gKi9cbmludGVyZmFjZSBTb2NpYWxQcm9vZkNvbmZpZyB7XG4gICAgY3VzdG9tZXJRdWVyeTogc3RyaW5nO1xuICAgIGhlYWRlclRpdGxlOiBzdHJpbmc7XG4gICAgc3RhdGljUExQSW1hZ2VzTGF5b3V0PzogXCJncmlkXCIgfCBcImhvcml6b250YWxcIjtcbiAgICBoZWFkZXJGb250RmFtaWx5Pzogc3RyaW5nO1xuICAgIHN0YXRpY1BMUEltYWdlTmFtZXM/OiBzdHJpbmdbXTtcbiAgICBzdGF0aWNJbWFnZUluZGV4PzogbnVtYmVyO1xuICAgIHN1Z2dlc3Rpb25CdXR0b25TdHJpbmdzOiBzdHJpbmdbXTtcbiAgICBzdWdnZXN0aW9uQnV0dG9uVmFyaWFudERlZmF1bHQ6IFN1Z2dlc3Rpb25CdXR0b25WYXJpYW50O1xuICAgIHN1Z2dlc3Rpb25CdXR0b25WYXJpYW50QWNjZW50PzogU3VnZ2VzdGlvbkJ1dHRvblZhcmlhbnQ7XG4gICAgc3VnZ2VzdGlvbkJ1dHRvbkRhdGFBdHRyaWJ1dGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICB1c2VyUXVlcnlCdXR0b25Db25maWc/OiBVc2VyUXVlcnlCdXR0b25Db25maWc7XG4gICAgbG9nb05hbWU/OiBzdHJpbmc7XG59XG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGNyZWF0aW5nIHRoZSBtb3VudCBwb2ludCBmb3IgYSB3aWRnZXRcbiAqXG4gKiBAcGFyYW0gY2xhc3NOYW1lIC0gT3B0aW9uYWwgY2xhc3MgbmFtZSB0byBhcHBseSB0byB0aGUgbW91bnQgcG9pbnQuIFRhaWx3aW5kIGNsYXNzZXMgYXJlIHN1cHBvcnRlZFxuICogYW5kIGVuY291cmFnZWQuIFVzZSB0aGlzIHBhcmFtZXRlciB0byBzdHlsZSB0aGUgbW91bnRpbmcgY29udGFpbmVyIGZvciB0aGUgd2lkZ2V0LlxuICovXG5leHBvcnQgdHlwZSBXaWRnZXRNb3VudGluZ0NvbmZpZyA9IHtcbiAgICBtb3VudGluZ0NvbmZpZ0lkOiBzdHJpbmc7XG4gICAgY29udGFpbmVySWQ6IHN0cmluZztcbiAgICB0ZXN0SWQ6IHN0cmluZztcbiAgICBwYXJlbnRJbnNlcnRpb25Qb2ludD86IEluc2VydGlvblBvaW50O1xuICAgIGluc2VydGlvblBvaW50OiBJbnNlcnRpb25Qb2ludDtcbiAgICBncmlkSW5zZXJ0aW9uVHlwZT86IEdyaWRJbnNlcnRpb25UeXBlO1xuICAgIHdyYXBwaW5nRWxlbWVudD86IFdyYXBwaW5nRWxlbWVudDtcbiAgICBkaXZDaGVja1NlbGVjdG9yPzogc3RyaW5nO1xuICAgIHN1cHByZXNzaW9uU2VsZWN0b3I/OiBzdHJpbmc7XG4gICAgc3R5bGU/OiBQYXJ0aWFsPENTU1N0eWxlRGVjbGFyYXRpb24+O1xuICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICBkYXRhQXR0cmlidXRlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xudHlwZSBTdGF0aWNXaWRnZXRNb3VudGluZyA9IHtcbiAgICBtb3VudGluZ0NvbmZpZ0lkOiBzdHJpbmc7XG4gICAgd2lkZ2V0Q29uZmlnSWQ6IHN0cmluZztcbn07XG50eXBlIER5bmFtaWNXaWRnZXRNb3VudGluZyA9IHtcbiAgICBtb3VudGluZ0NvbmZpZ0lkOiBzdHJpbmc7XG4gICAgbW91bnRpbmdQb2ludFdpZGdldHM6IFdpZGdldERpc3BsYXlUZXN0c1tdO1xufTtcbnR5cGUgV2lkZ2V0RGlzcGxheVRlc3RzID0ge1xuICAgIHRlc3RzOiBQYWdlVmFyaWFudFRlc3RbXTtcbiAgICB3aWRnZXRDb25maWdJZDogc3RyaW5nO1xufTtcbnR5cGUgV2lkZ2V0TW91bnRpbmcgPSBTdGF0aWNXaWRnZXRNb3VudGluZyB8IER5bmFtaWNXaWRnZXRNb3VudGluZztcbmRlY2xhcmUgZW51bSBXaWRnZXRUeXBlIHtcbiAgICBDaGF0UHJldmlldyA9IFwiQ2hhdFByZXZpZXdcIixcbiAgICBTb2NpYWxQcm9vZlYyID0gXCJTb2NpYWxQcm9vZlYyXCIsXG4gICAgQ2hhdFByZXZpZXdWMiA9IFwiQ2hhdFByZXZpZXdWMlwiLFxuICAgIENoYXRQcmV2aWV3SXNMb2FkaW5nID0gXCJDaGF0UHJldmlld0lzTG9hZGluZ1wiLFxuICAgIENoYXRQcmV2aWV3UG9zdEludGVyYWN0aW9uID0gXCJDaGF0UHJldmlld1Bvc3RJbnRlcmFjdGlvblwiLFxuICAgIENoYXRQcmV2aWV3UHJvZHVjdENvbXBhcmlzb24gPSBcIkNoYXRQcmV2aWV3UHJvZHVjdENvbXBhcmlzb25cIixcbiAgICBTdWdnZXN0aW9uQmFyID0gXCJTdWdnZXN0aW9uQmFyXCIsXG4gICAgU3VnZ2VzdGlvbkJhclYyID0gXCJTdWdnZXN0aW9uQmFyVjJcIixcbiAgICBJbWFnZVByb21wdENhcmQgPSBcIkltYWdlUHJvbXB0Q2FyZFwiLFxuICAgIEltYWdlQmFubmVyID0gXCJJbWFnZUJhbm5lclwiLFxuICAgIFNpbmdsZUltYWdlUHJvbXB0ID0gXCJTaW5nbGVJbWFnZVByb21wdFwiLFxuICAgIFNlYXJjaFByb21wdCA9IFwiU2VhcmNoUHJvbXB0XCIsXG4gICAgU2VhcmNoWmVyb1N0YXRlRW50cnlQb2ludCA9IFwiU2VhcmNoWmVyb1N0YXRlRW50cnlQb2ludFwiLFxuICAgIFNlYXJjaFJlc3VsdHNFbnRyeVBvaW50ID0gXCJTZWFyY2hSZXN1bHRzRW50cnlQb2ludFwiLFxuICAgIFNlYXJjaE92ZXJsYXlIb3N0ID0gXCJTZWFyY2hPdmVybGF5SG9zdFwiLFxuICAgIE5vT3AgPSBcIk5vT3BcIlxufVxudHlwZSBXaWRnZXRDb25maWcgPSBDaGF0UHJldmlld1dpZGdldENvbmZpZyB8IFNvY2lhbFByb29mVjJXaWRnZXRDb25maWcgfCBDaGF0UHJldmlld1YyV2lkZ2V0Q29uZmlnIHwgQ2hhdFByZXZpZXdQb3N0SW50ZXJhY3Rpb25XaWRnZXRDb25maWcgfCBDaGF0UHJldmlld0lzTG9hZGluZ1dpZGdldENvbmZpZyB8IENoYXRQcmV2aWV3UHJvZHVjdENvbXBhcmlzb25XaWRnZXRDb25maWcgfCBTdWdnZXN0aW9uQmFyV2lkZ2V0VjJDb25maWcgfCBJbWFnZVByb21wdFdpZGdldENvbmZpZyB8IEltYWdlQmFubmVyV2lkZ2V0Q29uZmlnIHwgU2luZ2xlSW1hZ2VQcm9tcHRXaWRnZXRDb25maWcgfCBTZWFyY2hQcm9tcHRXaWRnZXRDb25maWcgfCBTZWFyY2hFbnRyeVBvaW50V2lkZ2V0Q29uZmlnIHwgU2VhcmNoUmVzdWx0c0VudHJ5UG9pbnRXaWRnZXRDb25maWcgfCBTZWFyY2hPdmVybGF5SG9zdFdpZGdldENvbmZpZyB8IE5vT3BXaWRnZXRDb25maWc7XG5pbnRlcmZhY2UgQmFzZVdpZGdldENvbmZpZzxUIGV4dGVuZHMgV2lkZ2V0VHlwZT4ge1xuICAgIHdpZGdldENvbmZpZ0lkOiBzdHJpbmc7XG4gICAgdHlwZTogVDtcbiAgICBjb250ZW50SWQ/OiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgSW1hZ2VCYW5uZXJXaWRnZXRDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuSW1hZ2VCYW5uZXI+IHtcbiAgICBpbWFnZVNyYzogc3RyaW5nO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgc3VidGl0bGU6IHN0cmluZztcbiAgICBhc3Npc3RhbnRNZXNzYWdlOiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgQ2hhdFByZXZpZXdXaWRnZXRDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuQ2hhdFByZXZpZXc+IHtcbiAgICB2YXJpYW50OiBcImZpbGxlZFwiIHwgXCJmbGF0XCIgfCBcIm91dGxpbmVkXCI7XG4gICAgYWRkU2VwYXJhdG9ycz86IGJvb2xlYW47XG4gICAgc29jaWFsUHJvb2ZDb25maWc/OiBTb2NpYWxQcm9vZkNvbmZpZztcbiAgICBmb290ZXJDb25maWc/OiBDaGF0UHJldmlld0Zvb3RlckNvbmZpZztcbn1cbmludGVyZmFjZSBDaGF0UHJldmlld0hlYWRlclYyQ29uZmlnIHtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICBpbWFnZVNyYz86IHN0cmluZztcbiAgICBpbWFnZUhlaWdodD86IG51bWJlcjtcbn1cbnR5cGUgU2luZ2xlSW1hZ2VDb25maWcgPSB7XG4gICAgbGF5b3V0OiBcInNpbmdsZVwiO1xuICAgIGltYWdlSW5kZXg6IG51bWJlcjtcbn07XG50eXBlIE11bHRpSW1hZ2VDb25maWcgPSB7XG4gICAgbGF5b3V0OiBcImdyaWRcIiB8IFwiaG9yaXpvbnRhbFwiO1xuICAgIGltYWdlTmFtZXM6IHN0cmluZ1tdO1xufTtcbnR5cGUgU29jaWFsUHJvb2ZJbWFnZUNvbmZpZyA9IFNpbmdsZUltYWdlQ29uZmlnIHwgTXVsdGlJbWFnZUNvbmZpZztcbnR5cGUgQ2hhdFByZXZpZXdTdWdnZXN0aW9uQnV0dG9uQ29uZmlnID0ge1xuICAgIGJ1dHRvblN0cmluZ3M6IHN0cmluZ1tdO1xuICAgIGFjY2VudEJ1dHRvblZhcmlhbnRzPzoge1xuICAgICAgICBidXR0b246IFN1Z2dlc3Rpb25CdXR0b25WYXJpYW50O1xuICAgICAgICBob3ZlcjogU3VnZ2VzdGlvbkJ1dHRvblZhcmlhbnQ7XG4gICAgfTtcbiAgICBidXR0b25WYXJpYW50czoge1xuICAgICAgICBidXR0b246IFN1Z2dlc3Rpb25CdXR0b25WYXJpYW50O1xuICAgICAgICBob3ZlcjogU3VnZ2VzdGlvbkJ1dHRvblZhcmlhbnQ7XG4gICAgfTtcbiAgICBudW1Sb3dzPzogTnVtUm93cztcbn07XG50eXBlIENoYXRQcmV2aWV3QW5pbWF0ZWRUZXh0Q29uZmlnID0ge1xuICAgIGxlYWRpbmdUZXh0OiBzdHJpbmc7XG4gICAgYW5pbWF0ZWRTdHJpbmdzOiBzdHJpbmdbXTtcbn07XG50eXBlIENoYXRQcmV2aWV3VmFyaWFudCA9IHtcbiAgICB2YXJpYW50OiBcImZsYXRcIjtcbn0gfCB7XG4gICAgdmFyaWFudDogXCJmaWxsZWRcIjtcbiAgICBiYWNrZ3JvdW5kRmlsbENvbG9yOiBzdHJpbmc7XG59IHwge1xuICAgIHZhcmlhbnQ6IFwib3V0bGluZWRcIjtcbn07XG5pbnRlcmZhY2UgQmFzZUNoYXRQcmV2aWV3Q29uZmlnIHtcbiAgICBoZWFkZXJDb25maWc6IENoYXRQcmV2aWV3SGVhZGVyVjJDb25maWc7XG4gICAgc3VnZ2VzdGlvbkJ1dHRvbnNDb25maWc6IENoYXRQcmV2aWV3U3VnZ2VzdGlvbkJ1dHRvbkNvbmZpZztcbiAgICB1c2VyUXVlcnlCdXR0b25Db25maWc6IFVzZXJRdWVyeUJ1dHRvbkNvbmZpZztcbiAgICBjaGF0UHJldmlld1ZhcmlhbnQ6IENoYXRQcmV2aWV3VmFyaWFudDtcbiAgICBhZGRTZXBhcmF0b3JzPzogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBDaGF0UHJldmlld1Bvc3RJbnRlcmFjdGlvbldpZGdldENvbmZpZyBleHRlbmRzIEJhc2VXaWRnZXRDb25maWc8V2lkZ2V0VHlwZS5DaGF0UHJldmlld1Bvc3RJbnRlcmFjdGlvbj4sIEJhc2VDaGF0UHJldmlld0NvbmZpZyB7XG4gICAgY2hhdFByZXZpZXdWYXJpYW50OiBDaGF0UHJldmlld1ZhcmlhbnQ7XG4gICAgYWRkU2VwYXJhdG9ycz86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgQ2hhdFByZXZpZXdJc0xvYWRpbmdXaWRnZXRDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuQ2hhdFByZXZpZXdJc0xvYWRpbmc+LCBCYXNlQ2hhdFByZXZpZXdDb25maWcge1xufVxuaW50ZXJmYWNlIENoYXRQcmV2aWV3UHJvZHVjdENvbXBhcmlzb25XaWRnZXRDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuQ2hhdFByZXZpZXdQcm9kdWN0Q29tcGFyaXNvbj4sIEJhc2VDaGF0UHJldmlld0NvbmZpZyB7XG4gICAgdXNlTGFyZ2VQcm9kdWN0Q29tcGFyaXNvbj86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgQ2hhdFByZXZpZXdWMldpZGdldENvbmZpZyBleHRlbmRzIEJhc2VXaWRnZXRDb25maWc8V2lkZ2V0VHlwZS5DaGF0UHJldmlld1YyPiwgQmFzZUNoYXRQcmV2aWV3Q29uZmlnIHtcbiAgICBhbmltYXRlZFRleHRDb25maWc6IENoYXRQcmV2aWV3QW5pbWF0ZWRUZXh0Q29uZmlnO1xufVxuaW50ZXJmYWNlIFNvY2lhbFByb29mVjJXaWRnZXRDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuU29jaWFsUHJvb2ZWMj4sIEJhc2VDaGF0UHJldmlld0NvbmZpZyB7XG4gICAgY3VzdG9tZXJRdWVyeT86IHN0cmluZztcbiAgICBpbWFnZUNvbmZpZzogU29jaWFsUHJvb2ZJbWFnZUNvbmZpZztcbn1cbmludGVyZmFjZSBTdWdnZXN0aW9uQmFyV2lkZ2V0VjJDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuU3VnZ2VzdGlvbkJhclYyPiB7XG4gICAgbWV0cmljRGlzcGxheUxvY2F0aW9uOiBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbjtcbiAgICBsb2NhdGlvbjogU3VnZ2VzdGlvbkJhckxvY2F0aW9uRm9yTWV0cmljcztcbiAgICB2YXJpYW50OiBTdWdnZXN0aW9uQnV0dG9uVmFyaWFudDtcbiAgICBob3ZlclZhcmlhbnQ6IFN1Z2dlc3Rpb25CdXR0b25WYXJpYW50O1xuICAgIGJ1dHRvblRleHRzOiB7XG4gICAgICAgIGRlZmF1bHQ6IHN0cmluZ1tdO1xuICAgICAgICBwcm9kdWN0U3BlY2lmaWM/OiB7XG4gICAgICAgICAgICBbcHJvZHVjdElkOiBzdHJpbmddOiBzdHJpbmdbXTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGJvbGRGaXJzdEJ1dHRvbj86IGJvb2xlYW47XG4gICAgdHdvUm93c09uTW9iaWxlPzogYm9vbGVhbjtcbiAgICBhbmltYXRpb25TcGVlZD86IFwic3RhbmRhcmRcIiB8IFwic2xvd1wiIHwgXCJub25lXCI7XG4gICAgYnV0dG9uQm9yZGVyUmFkaXVzPzogXCJzbVwiIHwgXCJtZFwiIHwgXCJsZ1wiO1xufVxuaW50ZXJmYWNlIEltYWdlUHJvbXB0V2lkZ2V0Q29uZmlnIGV4dGVuZHMgQmFzZVdpZGdldENvbmZpZzxXaWRnZXRUeXBlLkltYWdlUHJvbXB0Q2FyZD4ge1xuICAgIHVybDogc3RyaW5nO1xuICAgIGxpZ2h0VGV4dD86IGJvb2xlYW47XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBzdWJ0aXRsZTogc3RyaW5nW107XG4gICAgc3RhdGljU3VnZ2VzdGlvbkNvcGllczogc3RyaW5nW107XG4gICAgdXNlclF1ZXJ5QnV0dG9uQ29uZmlnOiBVc2VyUXVlcnlCdXR0b25Db25maWc7XG4gICAgZmFsbGJhY2tCYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgU2luZ2xlSW1hZ2VQcm9tcHRXaWRnZXRDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuU2luZ2xlSW1hZ2VQcm9tcHQ+IHtcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIHN0YXRpY1N1Z2dlc3Rpb25Db3BpZXM6IHN0cmluZ1tdO1xuICAgIHVzZXJRdWVyeUJ1dHRvbkNvbmZpZzogVXNlclF1ZXJ5QnV0dG9uQ29uZmlnO1xufVxuaW50ZXJmYWNlIFNlYXJjaEVudHJ5UG9pbnRXaWRnZXRDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuU2VhcmNoWmVyb1N0YXRlRW50cnlQb2ludD4ge1xuICAgIHNlYXJjaFplcm9TdGF0ZVZhcmlhbnQ6IFNlYXJjaFplcm9TdGF0ZVZhcmlhbnQ7XG4gICAgc2VhcmNoSW5wdXRWYXJpYW50OiBTZWFyY2hJbnB1dFZhcmlhbnQ7XG4gICAgc2VhcmNoSWNvblZhcmlhbnQ/OiBTZWFyY2hJY29uVmFyaWFudDtcbiAgICBzZWFyY2hJY29uU2l6ZT86IG51bWJlcjtcbiAgICBzdWdnZXN0aW9uQnV0dG9uQ29uZmlnOiBTdWdnZXN0aW9uQnV0dG9uQ29uZmlnO1xuICAgIGxheW91dDogU2VhcmNoWmVyb1N0YXRlTGF5b3V0O1xuICAgIHNlYXJjaEJveFBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gICAgYW5pbWF0aW9uU3BlZWQ/OiBcInN0YW5kYXJkXCIgfCBcInNsb3dcIiB8IFwibm9uZVwiO1xuICAgIGNvbXBhY3RMYWJlbD86IHN0cmluZztcbiAgICBpbml0aWFsU3VnZ2VzdGlvbnM/OiBzdHJpbmdbXTtcbiAgICB1c2luZ1BvcnRhbD86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgTm9PcFdpZGdldENvbmZpZyBleHRlbmRzIEJhc2VXaWRnZXRDb25maWc8V2lkZ2V0VHlwZS5Ob09wPiB7XG59XG5pbnRlcmZhY2UgU2VhcmNoT3ZlcmxheUhvc3RXaWRnZXRDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGUuU2VhcmNoT3ZlcmxheUhvc3Q+IHtcbn1cbmludGVyZmFjZSBTZWFyY2hSZXN1bHRzRW50cnlQb2ludFdpZGdldENvbmZpZyBleHRlbmRzIEJhc2VXaWRnZXRDb25maWc8V2lkZ2V0VHlwZS5TZWFyY2hSZXN1bHRzRW50cnlQb2ludD4ge1xuICAgIHNlYXJjaElucHV0VmFyaWFudDogU2VhcmNoSW5wdXRWYXJpYW50O1xuICAgIHNlYXJjaEZpbHRlclNpZGViYXJWYXJpYW50OiBTZWFyY2hGaWx0ZXJTaWRlYmFyVmFyaWFudDtcbiAgICBwcm9kdWN0R3JpZFZhcmlhbnQ6IFByb2R1Y3RHcmlkVmFyaWFudDtcbiAgICBzZWFyY2hCb3hQbGFjZWhvbGRlcjogc3RyaW5nO1xuICAgIG5vUmVzdWx0c0ZvdW5kVGV4dD86IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgV2lkZ2V0SGVhZGVyUHJvcHMgZXh0ZW5kcyBUZXN0UHJvcHMge1xuICAgIHRpdGxlPzogc3RyaW5nO1xuICAgIGxvZ28/OiBzdHJpbmc7XG4gICAgbG9nb0hlaWdodD86IG51bWJlcjtcbiAgICBvcmdTaG9ydE5hbWU6IHN0cmluZztcbiAgICB2YXJpYW50PzogU2VhcmNoUHJvbXB0VmFyaWFudDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclF1ZXJ5T3B0aW9ucyB7XG4gICAgZm9vdGVyVmFyaWFudD86IFwic3RhbmRhcmRcIjtcbiAgICByZXBseUJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gICAgcmVwbHlCdXR0b25JY29uPzogXCJtYWduaWZ5aW5nR2xhc3NcIiB8IFwic2VuZFwiIHwgXCJ0aGluTWFnbmlmeWluZ0dsYXNzXCIgfCBcImFpLXNlYXJjaFwiO1xufVxudHlwZSBTZWFyY2hQcm9tcHRWYXJpYW50ID0gXCJwcmltYXJ5XCI7XG5pbnRlcmZhY2UgU2VhcmNoUHJvbXB0V2lkZ2V0Q29uZmlnIGV4dGVuZHMgQmFzZVdpZGdldENvbmZpZzxXaWRnZXRUeXBlLlNlYXJjaFByb21wdD4ge1xuICAgIHZhcmlhbnQ6IFNlYXJjaFByb21wdFZhcmlhbnQ7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBoZWFkZXJDb25maWc6IFdpZGdldEhlYWRlclByb3BzO1xuICAgIHN1Z2dlc3Rpb25CdXR0b25zOiB7XG4gICAgICAgIHZhcmlhbnQ6IFN1Z2dlc3Rpb25CdXR0b25WYXJpYW50O1xuICAgICAgICBob3ZlclZhcmlhbnQ6IFN1Z2dlc3Rpb25CdXR0b25WYXJpYW50O1xuICAgICAgICBidXR0b25UZXh0czogc3RyaW5nW107XG4gICAgfTtcbiAgICBmb290ZXJDb25maWc/OiBVc2VyUXVlcnlPcHRpb25zO1xufVxudHlwZSBQYWdlVmFyaWFudEJhc2UgPSB7XG4gICAgdmFyaWFudElkOiBzdHJpbmc7XG4gICAgd2lkZ2V0TW91bnRpbmc6IFdpZGdldE1vdW50aW5nW107XG4gICAgdmFyaWFudFRlc3RzOiBQYWdlVmFyaWFudFRlc3RbXTtcbn07XG50eXBlIFBMUFBhZ2VWYXJpYW50ID0gUGFnZVZhcmlhbnRCYXNlICYge1xuICAgIHZhcmlhbnRUeXBlOiBcInBscFwiO1xuICAgIHBscElkRXh0cmFjdG9yOiBJZEV4dHJhY3Rvcjtcbn07XG50eXBlIFBEUFBhZ2VWYXJpYW50ID0gUGFnZVZhcmlhbnRCYXNlICYge1xuICAgIHZhcmlhbnRUeXBlOiBcInBkcFwiO1xuICAgIHBhcmVudFByb2R1Y3RJZEV4dHJhY3Rvcj86IElkRXh0cmFjdG9yO1xuICAgIHByb2R1Y3RJZEV4dHJhY3RvcjogSWRFeHRyYWN0b3I7XG59O1xudHlwZSBWaXNpdFBhZ2VWYXJpYW50ID0gUGFnZVZhcmlhbnRCYXNlICYge1xuICAgIHZhcmlhbnRUeXBlOiBcInBhZ2VfdmlzaXRcIjtcbn07XG50eXBlIE90aGVyUGFnZVZhcmlhbnQgPSBQYWdlVmFyaWFudEJhc2UgJiB7XG4gICAgdmFyaWFudFR5cGU6IFwib3RoZXJcIjtcbn07XG50eXBlIEhvbWVQYWdlVmFyaWFudCA9IFBhZ2VWYXJpYW50QmFzZSAmIHtcbiAgICB2YXJpYW50VHlwZTogXCJob21lcGFnZVwiO1xufTtcbnR5cGUgU2VhcmNoUGFnZVZhcmlhbnQgPSBQYWdlVmFyaWFudEJhc2UgJiB7XG4gICAgdmFyaWFudFR5cGU6IFwic2VhcmNoXCI7XG59O1xuZXhwb3J0IHR5cGUgUGFnZVZhcmlhbnRDb25maWcgPSBQTFBQYWdlVmFyaWFudCB8IFBEUFBhZ2VWYXJpYW50IHwgVmlzaXRQYWdlVmFyaWFudCB8IE90aGVyUGFnZVZhcmlhbnQgfCBIb21lUGFnZVZhcmlhbnQgfCBTZWFyY2hQYWdlVmFyaWFudDtcbmV4cG9ydCB0eXBlIE9yZ1BhZ2VDb25maWcgPSB7XG4gICAgcGFnZVZhcmlhbnRzOiBQYWdlVmFyaWFudENvbmZpZ1tdO1xuICAgIHdpZGdldENvbmZpZ3M6IFJlY29yZDxzdHJpbmcsIFdpZGdldENvbmZpZz47XG4gICAgbW91bnRpbmdDb25maWdzOiBSZWNvcmQ8c3RyaW5nLCBXaWRnZXRNb3VudGluZ0NvbmZpZz47XG59O1xuZXhwb3J0IHR5cGUgT3JnQ29uZmlnID0gT3JnVUlDb25maWc7XG5leHBvcnQgeyBDYXRlZ29yeUV4dHJhY3RvclR5cGUsIENvbG9yTmFtZXMsIGNvbG9yVmFyLCBQYWdlVmFyaWFudFRlc3RUeXBlLCBXaWRnZXRUeXBlLCB9O1xuZXhwb3J0IGludGVyZmFjZSBFbnZpdmVDb25maWcge1xuICAgIGFtcGxpdHVkZUFwaUtleT86IHN0cmluZztcbiAgICBkYXRhUmVzaWRlbmN5Pzogc3RyaW5nO1xuICAgIGVudj86IHN0cmluZztcbiAgICBiYXNlVXJsPzogc3RyaW5nO1xuICAgIHJlYWN0QXBwTmFtZT86IHN0cmluZztcbiAgICBjZG5Vcmw/OiBzdHJpbmc7XG4gICAgY29udGV4dFNvdXJjZT86IHN0cmluZztcbiAgICBvcmdMZXZlbEFwaUtleT86IHN0cmluZztcbiAgICBvcmdTaG9ydE5hbWU/OiBzdHJpbmc7XG4gICAgaWRlbnRpZnlpbmdQcmVmaXg/OiBzdHJpbmc7XG4gICAgZmVhdHVyZU92ZXJyaWRlcz86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuICAgIHZhcmlhbnRVcmxPdmVycmlkZT86IHN0cmluZztcbiAgICB2YXJpYW50SW5mb092ZXJyaWRlPzogYW55O1xuICAgIHNob3c/OiBib29sZWFuO1xuICAgIHB1YmxpY0tleT86IHN0cmluZztcbiAgICBmZWF0dXJlR2F0ZXM/OiBPcmdDb25maWdGZWF0dXJlR2F0ZVtdO1xufVxuZXhwb3J0IHR5cGUgeyBDYXRlZ29yeUV4dHJhY3RvciwgQ2hhdE1lc3NhZ2VWYXJpYW50LCBDaGF0TWVzc2FnZUNvbmZpZywgQ2hhdFByZXZpZXdDb25maWcsIENoYXRQcmV2aWV3SXNMb2FkaW5nV2lkZ2V0Q29uZmlnLCBDaGF0UHJldmlld1Bvc3RJbnRlcmFjdGlvbldpZGdldENvbmZpZywgQ2hhdFByZXZpZXdQcm9kdWN0Q29tcGFyaXNvbldpZGdldENvbmZpZywgQ2hhdFByZXZpZXdTdWdnZXN0aW9uQnV0dG9uQ29uZmlnLCBTb2NpYWxQcm9vZlYyV2lkZ2V0Q29uZmlnLCBDaGF0UHJldmlld0hlYWRlclYyQ29uZmlnLCBDaGF0UHJldmlld1YyV2lkZ2V0Q29uZmlnLCBDaGF0UHJldmlld0Zvb3RlckNvbmZpZywgQ2hhdFByZXZpZXdIZWFkZXJDb25maWcsIENoYXRQcmV2aWV3V2lkZ2V0Q29uZmlnLCBDaGF0UHJldmlld1ZhcmlhbnQsIENvbG9yTWFwcGluZywgQ3VzdG9tZXJTZXJ2aWNlSW50ZWdyYXRpb24sIEZsb2F0aW5nRW50cnlQb2ludENvbmZpZywgRnVsbEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uLCBJZEV4dHJhY3RvciwgSW1hZ2VCYW5uZXJXaWRnZXRDb25maWcsIEltYWdlUHJvbXB0V2lkZ2V0Q29uZmlnLCBJbnNlcnRpb25Qb2ludCwgTXVsdGlJbWFnZUNvbmZpZywgT3JnVUlDb25maWcsIFBhZ2VDYXJkQ29uZmlnLCBQYWdlQ2FyZFZhcmlhbnQsIFBhZ2VDYXJkSG92ZXJWYXJpYW50LCBQYWdlQ2FyZEljb25WYXJpYW50LCBQcm9kdWN0Q2FyZENvbmZpZywgUHJvZHVjdENhcmRWYXJpYW50LCBQcm9kdWN0Q2FyZExheW91dFZhcmlhbnQsIFByb2R1Y3RDYXJkSG92ZXJWYXJpYW50LCBQcm9kdWN0TGlua0hvdmVyVmFyaWFudCwgUHJvZHVjdExpbmtJY29uVmFyaWFudCwgUHJvZHVjdExpbmtWYXJpYW50LCBQcm9kdWN0UmV2aWV3Q29uZmlnLCBQcm9kdWN0UmV2aWV3U3R5bGVWYXJpYW50LCBQcm9kdWN0UmV2aWV3Q29sb3JWYXJpYW50LCBTZWFyY2hQcm9tcHRWYXJpYW50LCBTZWFyY2hQcm9tcHRXaWRnZXRDb25maWcsIFNlYXJjaFJlc3VsdHNFbnRyeVBvaW50V2lkZ2V0Q29uZmlnLCBTaG93RmxvYXRpbmdCdXR0b25PcHRpb25zLCBTaW5nbGVJbWFnZVByb21wdFdpZGdldENvbmZpZywgU2VhcmNoRW50cnlQb2ludFdpZGdldENvbmZpZywgU2VhcmNoT3ZlcmxheUhvc3RXaWRnZXRDb25maWcsIFNvY2lhbFByb29mQ29uZmlnLCBTdWdnZXN0aW9uQmFyV2lkZ2V0VjJDb25maWcsIFN1Z2dlc3Rpb25CdXR0b25Db25maWcsIFN1Z2dlc3Rpb25CdXR0b25WYXJpYW50LCBVUkxUZXN0LCBVc2VyUXVlcnlCdXR0b25Db25maWcsIFVzZXJRdWVyeUJ1dHRvbkljb24sIFdlbGNvbWVTZWN0aW9uQ29uZmlnLCBXZWxjb21lU2VjdGlvblZhcmlhbnQsIFdlbGNvbWVTZWN0aW9uQ29sb3JWYXJpYW50LCBXaWRnZXRDb25maWcsIFdyYXBwaW5nRWxlbWVudCwgU2VhcmNoQ2FyZFZhcmlhbnQsIFdpZGdldERpc3BsYXlUZXN0cywgTm9PcFdpZGdldENvbmZpZywgV2lkZ2V0TW91bnRpbmcsIFN0YXRpY1dpZGdldE1vdW50aW5nLCBEeW5hbWljV2lkZ2V0TW91bnRpbmcsIFBEUFBhZ2VWYXJpYW50LCBQTFBQYWdlVmFyaWFudCwgVmlzaXRQYWdlVmFyaWFudCwgT3RoZXJQYWdlVmFyaWFudCwgSG9tZVBhZ2VWYXJpYW50LCBTZWFyY2hQYWdlVmFyaWFudCwgTnVtUm93cywgfTtcbiIsImltcG9ydCB7IFBhZ2VWYXJpYW50Q29uZmlnLCBXaWRnZXRNb3VudGluZ0NvbmZpZywgV2lkZ2V0Q29uZmlnLCBPcmdVSUNvbmZpZyB9IGZyb20gXCJzcmMvY29udGV4dHMvdHlwZXNcIjtcbmV4cG9ydCBpbnRlcmZhY2UgRnJvbnRlbmRDb25maWcge1xuICAgIG1lcmNoYW50X292ZXJyaWRlX2Nzcz86IHN0cmluZztcbiAgICBwYWdlVmFyaWFudHM/OiBQYWdlVmFyaWFudENvbmZpZ1tdO1xuICAgIG1vdW50aW5nQ29uZmlncz86IFJlY29yZDxzdHJpbmcsIFdpZGdldE1vdW50aW5nQ29uZmlnPjtcbiAgICB3aWRnZXRDb25maWdzPzogUmVjb3JkPHN0cmluZywgV2lkZ2V0Q29uZmlnPjtcbiAgICB1aUNvbmZpZ3M/OiBPbWl0PE9yZ1VJQ29uZmlnLCBcIm1lcmNoYW50T3ZlcnJpZGVDc3NcIj47XG59XG4iLCJkZWNsYXJlIGVudW0gR29vZ2xlQW5hbHl0aWNzRXZlbnRzIHtcbiAgICBBRERfVE9fQ0FSVF92MSA9IFwiYWRkX3RvX2NhcnRcIixcbiAgICBBRERfVE9fQ0FSVF92MiA9IFwiYWRkVG9DYXJ0XCJcbn1cbmV4cG9ydCB7IEdvb2dsZUFuYWx5dGljc0V2ZW50cyB9O1xuIiwiaW1wb3J0IHsgQ3VzdFNlcnZpY2VBdHRhY2htZW50LCBGb3JtVHlwZSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBPcmRlclJlc3BvbnNlQXR0cmlidXRlcywgUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcywgUmV2aWV3UmVzcG9uc2VBdHRyaWJ1dGVzLCBQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzLCBUZXh0UmVzcG9uc2VBdHRyaWJ1dGVzLCBTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMsIFNlYXJjaFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMsIEFjY2VwdGFibGVGb3JtRmllbGRUeXBlLCBTZWFyY2hQcm9kdWN0RmlsdGVyQXR0cmlidXRlcyB9IGZyb20gJy4vYXBpL3Jlc3BvbnNlJztcbmV4cG9ydCBkZWNsYXJlIGVudW0gTWVzc2FnZVJvbGUge1xuICAgIFVzZXIgPSBcInVzZXJcIixcbiAgICBBc3Npc3RhbnQgPSBcImFzc2lzdGFudFwiXG59XG5leHBvcnQgZGVjbGFyZSBlbnVtIE1lc3NhZ2VUeXBlIHtcbiAgICBUZXh0ID0gXCJ0ZXh0XCIsXG4gICAgU3VnZ2VzdGlvbkNsaWNrZWQgPSBcInN1Z2dlc3Rpb25fY2xpY2tlZFwiLFxuICAgIFByb2R1Y3QgPSBcInByb2R1Y3RcIixcbiAgICBQcm9kdWN0U2VhcmNoID0gXCJwcm9kdWN0X3NlYXJjaFwiLFxuICAgIFJldmlldyA9IFwicmV2aWV3XCIsXG4gICAgUXVlcnlUeXBlZCA9IFwicXVlcnlfdHlwZWRcIixcbiAgICBTZXBhcmF0b3IgPSBcInNlcGFyYXRvclwiLFxuICAgIFBhZ2UgPSBcInBhZ2VcIixcbiAgICBTZWFyY2ggPSBcInNlYXJjaFwiLFxuICAgIEF0dGFjaG1lbnQgPSBcImF0dGFjaG1lbnRcIixcbiAgICBDWEFnZW50UmVzcG9uc2UgPSBcImN4X2FnZW50X3Jlc3BvbnNlXCIsXG4gICAgRm9ybSA9IFwiZm9ybVwiLFxuICAgIE9yZGVyID0gXCJvcmRlclwiLFxuICAgIFByb2R1Y3RTZWFyY2hGaWx0ZXIgPSBcInByb2R1Y3Rfc2VhcmNoX2ZpbHRlclwiXG59XG5leHBvcnQgdHlwZSBNZXNzYWdlID0ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgcm9sZTogTWVzc2FnZVJvbGU7XG4gICAgY3JlYXRlZEF0OiBzdHJpbmc7XG59ICYgKFRleHRNZXNzYWdlTWV0YWRhdGEgfCBRdWVyeVR5cGVkTWV0YWRhdGEgfCBTdWdnZXN0aW9uTWVzc2FnZU1ldGFkYXRhIHwgUHJvZHVjdE1lc3NhZ2VNZXRhZGF0YSB8IFByb2R1Y3RTZWFyY2hNZXNzYWdlTWV0YWRhdGEgfCBSZXZpZXdNZXNzYWdlTWV0YWRhdGEgfCBTZXBhcmF0b3JNZXNzYWdlTWV0YWRhdGEgfCBQYWdlTWVzc2FnZU1ldGFkYXRhIHwgU2VhcmNoTWVzc2FnZU1ldGFkYXRhIHwgQXR0YWNobWVudE1ldGFkYXRhIHwgQ1hBZ2VudFJlc3BvbnNlTWV0YWRhdGEgfCBGb3JtTWVzc2FnZU1ldGFkYXRhIHwgT3JkZXJNZXNzYWdlTWV0YWRhdGEgfCBQcm9kdWN0U2VhcmNoRmlsdGVyTWV0YWRhdGEpO1xudHlwZSBBdHRhY2htZW50TWV0YWRhdGEgPSB7XG4gICAgdHlwZTogTWVzc2FnZVR5cGUuQXR0YWNobWVudDtcbiAgICBtZXRhZGF0YToge1xuICAgICAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgICAgICBhdHRhY2htZW50OiBDdXN0U2VydmljZUF0dGFjaG1lbnRbXTtcbiAgICB9O1xufTtcbnR5cGUgQ1hBZ2VudFJlc3BvbnNlTWV0YWRhdGEgPSB7XG4gICAgdHlwZTogTWVzc2FnZVR5cGUuQ1hBZ2VudFJlc3BvbnNlO1xuICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICAgICAgYWdlbnROYW1lOiBzdHJpbmc7XG4gICAgfTtcbn07XG50eXBlIFRleHRNZXNzYWdlTWV0YWRhdGEgPSB7XG4gICAgdHlwZTogTWVzc2FnZVR5cGUuVGV4dDtcbiAgICBtZXRhZGF0YTogVGV4dFJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddO1xufTtcbnR5cGUgUXVlcnlUeXBlZE1ldGFkYXRhID0ge1xuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlF1ZXJ5VHlwZWQ7XG4gICAgbWV0YWRhdGE6IFRleHRSZXNwb25zZUF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXTtcbn07XG50eXBlIFN1Z2dlc3Rpb25NZXNzYWdlTWV0YWRhdGEgPSB7XG4gICAgdHlwZTogTWVzc2FnZVR5cGUuU3VnZ2VzdGlvbkNsaWNrZWQ7XG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICAgc3VnZ2VzdGlvbklkOiBzdHJpbmc7XG4gICAgICAgIHN1Z2dlc3Rpb25Db250ZW50OiBzdHJpbmc7XG4gICAgfTtcbn07XG5leHBvcnQgdHlwZSBQcm9kdWN0TWVzc2FnZU1ldGFkYXRhID0ge1xuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlByb2R1Y3Q7XG4gICAgbWV0YWRhdGE6IFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXTtcbn07XG5leHBvcnQgdHlwZSBQcm9kdWN0U2VhcmNoTWVzc2FnZU1ldGFkYXRhID0ge1xuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlByb2R1Y3RTZWFyY2g7XG4gICAgbWV0YWRhdGE6IFNlYXJjaFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXTtcbn07XG50eXBlIFJldmlld01lc3NhZ2VNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBNZXNzYWdlVHlwZS5SZXZpZXc7XG4gICAgbWV0YWRhdGE6IFJldmlld1Jlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddO1xufTtcbnR5cGUgU2VwYXJhdG9yTWVzc2FnZU1ldGFkYXRhID0ge1xuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlNlcGFyYXRvcjtcbn07XG50eXBlIFBhZ2VNZXNzYWdlTWV0YWRhdGEgPSB7XG4gICAgdHlwZTogTWVzc2FnZVR5cGUuUGFnZTtcbiAgICBtZXRhZGF0YTogUGFnZVJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddO1xufTtcbnR5cGUgU2VhcmNoTWVzc2FnZU1ldGFkYXRhID0ge1xuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlNlYXJjaDtcbiAgICBtZXRhZGF0YTogU2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzWydhdHRyaWJ1dGVzJ107XG59O1xudHlwZSBQcm9kdWN0U2VhcmNoRmlsdGVyTWV0YWRhdGEgPSB7XG4gICAgdHlwZTogTWVzc2FnZVR5cGUuUHJvZHVjdFNlYXJjaEZpbHRlcjtcbiAgICBtZXRhZGF0YTogU2VhcmNoUHJvZHVjdEZpbHRlckF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXTtcbn07XG5leHBvcnQgdHlwZSBGb3JtRmllbGQgPSB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICB0eXBlOiBBY2NlcHRhYmxlRm9ybUZpZWxkVHlwZTtcbiAgICByZXF1aXJlZDogYm9vbGVhbjtcbiAgICBmb3JtYXQ/OiAnZW1haWwnO1xuICAgIHZhbHVlPzogc3RyaW5nO1xufTtcbnR5cGUgRm9ybU1lc3NhZ2VNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBNZXNzYWdlVHlwZS5Gb3JtO1xuICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIGZvcm1UeXBlPzogRm9ybVR5cGU7XG4gICAgICAgIGZpZWxkczogRm9ybUZpZWxkW107XG4gICAgfTtcbn07XG50eXBlIE9yZGVyTWVzc2FnZU1ldGFkYXRhID0ge1xuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLk9yZGVyO1xuICAgIG1ldGFkYXRhOiBPcmRlclJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddO1xufTtcbmV4cG9ydCB7fTtcbiIsImV4cG9ydCBpbnRlcmZhY2UgTW9iaWxlUExQQ2hhdFBsYWNlbWVudFBhcmFtZXRlciB7XG4gICAgcm93SW5kZXg6IG51bWJlcjtcbn1cbiIsImV4cG9ydCBkZWNsYXJlIGNvbnN0IE9yZ1Nob3J0TmFtZToge1xuICAgIHJlYWRvbmx5IENvdGVyaWU6IFwiY290ZXJpZVwiO1xuICAgIHJlYWRvbmx5IEZvckxvdmVBbmRMZW1vbnM6IFwiZm9yLWxvdmUtYW5kLWxlbW9uc1wiO1xuICAgIHJlYWRvbmx5IEdyZWVucGFuOiBcImdyZWVucGFuXCI7XG4gICAgcmVhZG9ubHkgSm9yZGFuQ3JhaWc6IFwiam9yZGFuLWNyYWlnXCI7XG4gICAgcmVhZG9ubHkgTGFycnlBbmRTZXJnZXM6IFwibGFycnlfYW5kX3Nlcmdlc1wiO1xuICAgIHJlYWRvbmx5IExlYXBzQW5kUmVib3VuZHM6IFwibGVhcHMtYW5kLXJlYm91bmRzXCI7XG4gICAgcmVhZG9ubHkgTWFudHJhQnJhbmQ6IFwibWFudHJhLWJyYW5kXCI7XG4gICAgcmVhZG9ubHkgU3Bhbng6IFwic3BhbnhcIjtcbiAgICByZWFkb25seSBTcGFueFN0YWdpbmc6IFwic3RhZ2luZy1zcGFueFwiO1xuICAgIHJlYWRvbmx5IFN1cGVyZ29vcDogXCJzdXBlcmdvb3BcIjtcbiAgICByZWFkb25seSBVbmlxdWVWaW50YWdlOiBcInVuaXF1ZS12aW50YWdlXCI7XG4gICAgcmVhZG9ubHkgSmFja0FyY2hlcjogXCJqYWNrLWFyY2hlclwiO1xuICAgIHJlYWRvbmx5IFNraW5QZXJmZWN0aW9uOiBcInNraW4tcGVyZmVjdGlvblwiO1xuICAgIHJlYWRvbmx5IExvb2tPcHRpYzogXCJsb29rLW9wdGljXCI7XG4gICAgcmVhZG9ubHkgRml2ZUNiZDogXCJmaXZlLWNiZFwiO1xuICAgIHJlYWRvbmx5IFNuYXBTdXBwbGVtZW50czogXCJzbmFwLXN1cHBsZW1lbnRzXCI7XG4gICAgcmVhZG9ubHkgTG9uZ2V2aXR5cng6IFwibG9uZ2V2aXR5cnhcIjtcbiAgICByZWFkb25seSBWZW5hQ2JkOiBcInZlbmEtY2JkXCI7XG4gICAgcmVhZG9ubHkgTWVkdGVycmE6IFwibWVkdGVycmFcIjtcbiAgICByZWFkb25seSBNb2RlbGxzOiBcIm1vZGVsbHNcIjtcbiAgICByZWFkb25seSBQcmVzc2VkRmxvcmFsOiBcInByZXNzZWQtZmxvcmFsXCI7XG4gICAgcmVhZG9ubHkgS2luZHJlZEJyYXZlbHk6IFwia2luZHJlZC1icmF2ZWx5XCI7XG4gICAgcmVhZG9ubHkgV2luZUVudGh1c2lhc3Q6IFwid2luZS1lbnRodXNpYXN0XCI7XG4gICAgcmVhZG9ubHkgSG9tZWdyb3duQ2FubmFiaXM6IFwiaG9tZWdyb3duLWNhbm5hYmlzXCI7XG4gICAgcmVhZG9ubHkgRHJlYW1sYW5kQmFieTogXCJkcmVhbWxhbmQtYmFieVwiO1xuICAgIHJlYWRvbmx5IEJhbmRvbGllcjogXCJiYW5kb2xpZXJcIjtcbiAgICByZWFkb25seSBXZXN0b25Kb25Cb3VjaGVyOiBcIndlc3Rvbi1qb24tYm91Y2hlclwiO1xuICAgIHJlYWRvbmx5IEt1dEZyb21UaGVLbG90aDogXCJrdXQtZnJvbS10aGUta2xvdGhcIjtcbiAgICByZWFkb25seSBHcm9vdmVMaWZlOiBcImdyb292ZS1saWZlXCI7XG4gICAgcmVhZG9ubHkgQ2FycGU6IFwiY2FycGVcIjtcbiAgICByZWFkb25seSBXb2xmVGFjdGljYWw6IFwid29sZi10YWN0aWNhbFwiO1xuICAgIHJlYWRvbmx5IFdvbGZNYXR0cmVzczogXCJ3b2xmbWF0dHJlc3NcIjtcbiAgICByZWFkb25seSBEZWZhdWx0OiBcImRlZmF1bHRcIjtcbn07XG4iLCJleHBvcnQgZGVjbGFyZSBlbnVtIFByb2R1Y3RFeHBlcmltZW50IHtcbiAgICBEZWZhdWx0ID0gXCJkZWZhdWx0XCJcbn1cbiIsImV4cG9ydCBpbnRlcmZhY2UgU3BhbnhUYWtlQVF1aXpDdGFQYXJhbWV0ZXIge1xuICAgIHRleHQ/OiBzdHJpbmc7XG4gICAgdmFsdWU/OiBzdHJpbmc7XG59XG4iLCIvKipcbiAqIEVudW0gb2YgYWxsIHdpZGdldCBuYW1lcy4gVGhlc2UgYXJlIHdpZGdldHMgdGhhdCBhcmUgcmVuZGVyZWQgYW5kIGludGVncmF0ZWQgaW50b1xuICogYSBtZXJjaGFudCdzIHdlYnNpdGUuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGVudW0gU3BpZmZ5V2lkZ2V0cyB7XG4gICAgSW1hZ2VCYW5uZXIgPSBcImltYWdlX2Jhbm5lclwiLFxuICAgIEltYWdlUHJvbXB0Q2FyZCA9IFwiaW1hZ2VfcHJvbXB0X2NhcmRcIixcbiAgICBTaW5nbGVJbWFnZVByb21wdCA9IFwic2luZ2xlX2ltYWdlX3Byb21wdFwiLFxuICAgIEVtYmVkZGVkV2lkZ2V0ID0gXCJlbWJlZGRlZF93aWRnZXRcIixcbiAgICBGbG9hdGluZ0J1dHRvbiA9IFwiZmxvYXRpbmdfYnV0dG9uXCIsXG4gICAgU3VnZ2VzdGlvbkJhciA9IFwic3VnZ2VzdGlvbl9iYXJcIixcbiAgICBTZWFyY2hQcm9tcHQgPSBcInNlYXJjaF9wcm9tcHRcIixcbiAgICBHbG9iYWxTZWFyY2ggPSBcImdsb2JhbF9zZWFyY2hcIixcbiAgICBTZWFyY2hSZXN1bHRzID0gXCJzZWFyY2hfcmVzdWx0c1wiLFxuICAgIEdsb2JhbFNlYXJjaEVudHJ5UG9pbnQgPSBcImdsb2JhbF9zZWFyY2hfZW50cnlfcG9pbnRcIlxufVxuIiwiaW1wb3J0IHsgQ29sb3JNYXBwaW5nLCBPcmdQYWdlQ29uZmlnLCBPcmdVSUNvbmZpZyB9IGZyb20gXCJzcmMvY29udGV4dHMvdHlwZXNcIjtcbmV4cG9ydCB7IE9yZ1Nob3J0TmFtZSB9IGZyb20gXCIuL29yZ3NFbnVtXCI7XG5leHBvcnQgdHlwZSBCYXNpY09yZ0luZm9UeXBlID0ge1xuICAgIHNob3J0TmFtZTogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkb21haW46IHN0cmluZztcbiAgICBkZWZhdWx0UHJvZHVjdElkOiBzdHJpbmc7XG4gICAgYWx3YXlzRW5hYmxlZE1lcmNoYW50czogYm9vbGVhbjtcbiAgICBvcmdVSUNvbmZpZzogKCkgPT4gT3JnVUlDb25maWcgfCB1bmRlZmluZWQ7XG4gICAgb3JnUGFnZUNvbmZpZzogKCkgPT4gT3JnUGFnZUNvbmZpZztcbiAgICBvcmdDb2xvcnM6ICgpID0+IENvbG9yTWFwcGluZyB8IHt9O1xufTtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGdldE9yZ0luZm86IChvcmdTaG9ydE5hbWU/OiBzdHJpbmcpID0+IFByb21pc2U8QmFzaWNPcmdJbmZvVHlwZT47XG4iLCJpbXBvcnQgeyBDb250ZXh0IGFzIEFwaUNvbnRleHQgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlsaXR5VHlwZXMnO1xuZXhwb3J0IGludGVyZmFjZSBDb250ZXh0IGV4dGVuZHMgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaUNvbnRleHQ+IHtcbn1cbiIsImltcG9ydCB7IEdlbmVyYXRpb25QYXJhbXMgYXMgQXBpR2VuZXJhdGlvblBhcmFtcyB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXAgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3V0aWxpdHlUeXBlcyc7XG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRpb25QYXJhbXMgZXh0ZW5kcyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpR2VuZXJhdGlvblBhcmFtcz4ge1xufVxuIiwiaW1wb3J0IHsgUERQQXR0cmlidXRlcyBhcyBBcGlQRFBBdHRyaWJ1dGVzLCBQTFBBdHRyaWJ1dGVzIGFzIEFwaVBMUEF0dHJpYnV0ZXMsIFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzIGFzIEFwaVF1ZXJ5VHlwZWRBdHRyaWJ1dGVzLCBTZWFyY2hBdHRyaWJ1dGVzIGFzIEFwaVNlYXJjaEF0dHJpYnV0ZXMsIFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcyBhcyBBcGlTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMsIFVzZXJFdmVudCBhcyBBcGlVc2VyRXZlbnQsIEZvcm1UeXBlLCBQYWdlVmlzaXRDYXRlZ29yeSwgVXNlckV2ZW50Q2F0ZWdvcnkgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlsaXR5VHlwZXMnO1xuZXhwb3J0IGludGVyZmFjZSBQRFBBdHRyaWJ1dGVzIGV4dGVuZHMgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaVBEUEF0dHJpYnV0ZXM+IHtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUExQQXR0cmlidXRlcyBleHRlbmRzIENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxBcGlQTFBBdHRyaWJ1dGVzPiB7XG59XG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaEF0dHJpYnV0ZXMgZXh0ZW5kcyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpU2VhcmNoQXR0cmlidXRlcz4ge1xufVxuZXhwb3J0IGludGVyZmFjZSBRdWVyeVR5cGVkQXR0cmlidXRlcyBleHRlbmRzIENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxBcGlRdWVyeVR5cGVkQXR0cmlidXRlcz4ge1xufVxuZXhwb3J0IGludGVyZmFjZSBGb3JtU3VibWl0dGVkQXR0cmlidXRlcyB7XG4gICAgZmlsbGVkU2NoZW1hOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBmb3JtUmVzcG9uc2VJZDogc3RyaW5nO1xuICAgIGZvcm1UeXBlOiBGb3JtVHlwZTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZVZpc2l0QXR0cmlidXRlcyB7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgcGFnZVZpc2l0Q2F0ZWdvcnk6IFBhZ2VWaXNpdENhdGVnb3J5O1xufVxuZXhwb3J0IGludGVyZmFjZSBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMgZXh0ZW5kcyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzPiB7XG59XG5leHBvcnQgdHlwZSBVc2VyRXZlbnRBdHRyaWJ1dGVzID0gUERQQXR0cmlidXRlcyB8IFBMUEF0dHJpYnV0ZXMgfCBRdWVyeVR5cGVkQXR0cmlidXRlcyB8IFNlYXJjaEF0dHJpYnV0ZXMgfCBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMgfCBQYWdlVmlzaXRBdHRyaWJ1dGVzO1xuZXhwb3J0IGludGVyZmFjZSBQRFBVc2VyRXZlbnQge1xuICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5QZHBWaXNpdCB8IFVzZXJFdmVudENhdGVnb3J5LkFkZFRvQ2FydDtcbiAgICBhdHRyaWJ1dGVzOiBQRFBBdHRyaWJ1dGVzO1xufVxuZXhwb3J0IGludGVyZmFjZSBQTFBVc2VyRXZlbnQge1xuICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5QbHBWaXNpdDtcbiAgICBhdHRyaWJ1dGVzOiBQTFBBdHRyaWJ1dGVzO1xufVxuZXhwb3J0IGludGVyZmFjZSBRdWVyeVR5cGVkVXNlckV2ZW50IHtcbiAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuUXVlcnlUeXBlZDtcbiAgICBhdHRyaWJ1dGVzOiBRdWVyeVR5cGVkQXR0cmlidXRlcztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoVXNlckV2ZW50IHtcbiAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuU2VhcmNoO1xuICAgIGF0dHJpYnV0ZXM6IFNlYXJjaEF0dHJpYnV0ZXM7XG59XG5leHBvcnQgaW50ZXJmYWNlIFN1Z2dlc3Rpb25zQ2xpY2tlZFVzZXJFdmVudCB7XG4gICAgY2F0ZWdvcnk6IFVzZXJFdmVudENhdGVnb3J5LlN1Z2dlc3Rpb25DbGlja2VkO1xuICAgIGF0dHJpYnV0ZXM6IFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQXBwTG9hZGVkVXNlckV2ZW50IHtcbiAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuQXBwTG9hZGVkO1xufVxuZXhwb3J0IGludGVyZmFjZSBBcHBVbmxvYWRlZEV2ZW50IHtcbiAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuQXBwVW5sb2FkZWQ7XG59XG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VWaXNpdEV2ZW50IHtcbiAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuUGFnZVZpc2l0O1xuICAgIGF0dHJpYnV0ZXM6IFBhZ2VWaXNpdEF0dHJpYnV0ZXM7XG59XG5leHBvcnQgaW50ZXJmYWNlIEZvcm1TdWJtaXR0ZWQge1xuICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5Gb3JtU3VibWl0dGVkO1xuICAgIGF0dHJpYnV0ZXM6IEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzO1xufVxuZXhwb3J0IHR5cGUgVXNlckV2ZW50ID0gQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPFBpY2s8QXBpVXNlckV2ZW50LCAnZXZlbnRfaWQnIHwgJ2NhdGVnb3J5JyB8ICdjcmVhdGVkX2F0Jz4+ICYgKFN1Z2dlc3Rpb25zQ2xpY2tlZFVzZXJFdmVudCB8IEFwcExvYWRlZFVzZXJFdmVudCB8IFBEUFVzZXJFdmVudCB8IFF1ZXJ5VHlwZWRVc2VyRXZlbnQgfCBTZWFyY2hVc2VyRXZlbnQgfCBBcHBVbmxvYWRlZEV2ZW50IHwgUExQVXNlckV2ZW50IHwgUGFnZVZpc2l0RXZlbnQgfCBGb3JtU3VibWl0dGVkKTtcbiIsImltcG9ydCB7IENvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHsgVXNlckV2ZW50IH0gZnJvbSAnLi91c2VyRXZlbnQnO1xuaW1wb3J0IHsgR2VuZXJhdGlvblBhcmFtcyB9IGZyb20gJy4vZ2VuZXJhdGlvblBhcmFtcyc7XG5leHBvcnQgaW50ZXJmYWNlIE5leHRNZXNzYWdlUmVxdWVzdCB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjb250ZXh0OiBDb250ZXh0O1xuICAgIHVzZXJFdmVudHM/OiBVc2VyRXZlbnRbXTtcbiAgICBmZWF0dXJlRmxhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgICBnZW5lcmF0aW9uUGFyYW1zPzogR2VuZXJhdGlvblBhcmFtcztcbn1cbiIsImltcG9ydCB7IFByb2R1Y3RTZWFyY2hSZXNwb25zZSBhcyBBcGlQcm9kdWN0U2VhcmNoUmVzcG9uc2UsIFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMgYXMgQXBpUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcywgU2VhcmNoUmVzcG9uc2VQcm9kdWN0IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbGl0eVR5cGVzJztcbmV4cG9ydCBpbnRlcmZhY2UgUHJvZHVjdFNlYXJjaFJlc3BvbnNlIGV4dGVuZHMgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaVByb2R1Y3RTZWFyY2hSZXNwb25zZT4ge1xufVxuZXhwb3J0IGludGVyZmFjZSBQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzIGV4dGVuZHMgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaVByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXM+IHtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUmVzdWx0IHtcbiAgICBwcm9kdWN0czogU2VhcmNoUmVzcG9uc2VQcm9kdWN0W107XG4gICAgZmlsdGVyczogc3RyaW5nW107XG4gICAgZ2VuZXJhdGVkUXVlcnk/OiBzdHJpbmc7XG4gICAgdG90YWxQcm9kdWN0Q291bnQ6IG51bWJlcjtcbiAgICBzZWFyY2hSZXNwb25zZUlkOiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFBhcmFtcyB7XG4gICAgcXVlcnk6IHN0cmluZztcbiAgICBsaW1pdD86IG51bWJlcjtcbn1cbiIsImltcG9ydCB7IFN1Z2dlc3Rpb24gYXMgQXBpU3VnZ2VzdGlvbiB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXAgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3V0aWxpdHlUeXBlcyc7XG5leHBvcnQgaW50ZXJmYWNlIFN1Z2dlc3Rpb24gZXh0ZW5kcyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpU3VnZ2VzdGlvbj4ge1xufVxuIiwiaW1wb3J0IHsgVXNlckV2ZW50IH0gZnJvbSAnLi91c2VyRXZlbnQnO1xuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCc7XG5leHBvcnQgaW50ZXJmYWNlIFN1cHBvcnRlZEV2ZW50UmVxdWVzdCB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjb250ZXh0OiBDb250ZXh0O1xuICAgIHVzZXJFdmVudDogVXNlckV2ZW50O1xufVxuIiwiZGVjbGFyZSBjb25zdCBnZXRNZXJjaGFudE9yZ0lkUXVlcnkgPSBcIlxcbiAgcXVlcnkge1xcbiAgICBtZSB7XFxuICAgICAgb3JnIHtcXG4gICAgICAgIGlkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI7XG5leHBvcnQgeyBnZXRNZXJjaGFudE9yZ0lkUXVlcnkgfTtcbiIsImltcG9ydCB0eXBlIHsgQmFzZUVjb21tZXJjZUV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG4vKipcbiAqIENoZWNrcyBpZiBhbiBldmVudCBpcyBhIGJhc2UgR29vZ2xlIEFuYWx5dGljcyBlY29tbWVyY2UgZXZlbnQuXG4gKlxuICogQHBhcmFtIGRhdGEgVGhlIGV2ZW50IHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGV2ZW50IGlzIGEgYmFzZSBlY29tbWVyY2UgZXZlbnQsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNCYXNlRWNvbW1lcmNlRXZlbnQ6IChkYXRhOiB1bmtub3duKSA9PiBkYXRhIGlzIEJhc2VFY29tbWVyY2VFdmVudDtcbiIsImltcG9ydCB0eXBlIHsgR0E0RWNvbW1lcmNlRXZlbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbi8qKlxuICogQ2hlY2tzIGlmIGFuIGV2ZW50IGlzIGEgR29vZ2xlIEFuYWx5dGljcyA0IGVjb21tZXJjZSBldmVudC5cbiAqXG4gKiBAcGFyYW0gZGF0YSBUaGUgZXZlbnQgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgYSBHQTQgZWNvbW1lcmNlIGV2ZW50LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzR0E0RWNvbW1lcmNlRXZlbnQ6IChkYXRhOiB1bmtub3duKSA9PiBkYXRhIGlzIEdBNEVjb21tZXJjZUV2ZW50O1xuIiwiaW1wb3J0IHR5cGUgeyBVQUVjb21tZXJjZUV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG4vKipcbiAqIENoZWNrcyBpZiBhbiBldmVudCBpcyBhIGxlZ2FjeSBVbml2ZXJzYWwgQW5hbHl0aWNzIGVjb21tZXJjZSBldmVudC5cbiAqXG4gKiBAcGFyYW0gZGF0YSBUaGUgZXZlbnQgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgYSBsZWdhY3kgVUEgZWNvbW1lcmNlIGV2ZW50LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzTGVnYWN5VUFFY29tbWVyY2VFdmVudDogKGRhdGE6IHVua25vd24pID0+IGRhdGEgaXMgVUFFY29tbWVyY2VFdmVudDtcbiIsImludGVyZmFjZSBNb2JpbGVQbHBDaGF0UGxhY2VtZW50UGFyYW1ldGVyIHtcbiAgICByb3dfaW5kZXg6IG51bWJlcjtcbn1cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzTW9iaWxlUExQQ2hhdFBsYWNlbWVudFBhcmFtZXRlcjogKHZhbHVlOiB1bmtub3duKSA9PiB2YWx1ZSBpcyBNb2JpbGVQbHBDaGF0UGxhY2VtZW50UGFyYW1ldGVyO1xuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHsgU3BhbnhUYWtlQVF1aXpDdGFQYXJhbWV0ZXIgfSBmcm9tICcuLi9zcGFueFRha2VBUXVpekN0YVBhcmFtZXRlcic7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBpc1NwYW54VGFrZUFRdWl6Q3RhUGFyYW1ldGVyOiAodmFsdWU6IHVua25vd24pID0+IHZhbHVlIGlzIFNwYW54VGFrZUFRdWl6Q3RhUGFyYW1ldGVyO1xuIiwiaW1wb3J0IHsgVmFyaWFudEluZm8gfSBmcm9tICcuLi92YXJpYW50SW5mbyc7XG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIGEgdmFsaWQgVmFyaWFudEluZm8uXG4gKlxuICogQHBhcmFtIHZhcmlhbnRJbmZvIC0gVGhlIHVua25vd24gb2JqZWN0IHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGRhdGEgaXMgYSB2YWxpZCBWYXJpYW50SW5mbyBvYmplY3QsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNWYXJpYW50SW5mbzogKHZhcmlhbnRJbmZvOiB1bmtub3duKSA9PiB2YXJpYW50SW5mbyBpcyBWYXJpYW50SW5mbztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eSBvZiBhIHNwZWNpZmljIHR5cGVcbiAqXG4gKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCB0byBjaGVja1xuICogQHBhcmFtIHByb3AgLSBUaGUgcHJvcGVydHkgbmFtZSB0byBjaGVja1xuICogQHBhcmFtIHR5cGUgLSBUaGUgZXhwZWN0ZWQgdHlwZSBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBpc09wdGlvbmFsIC0gV2hldGhlciB0aGUgcHJvcGVydHkgaXMgb3B0aW9uYWwgKGRlZmF1bHRzIHRvIGZhbHNlKVxuICpcbiAqIEByZXR1cm5zIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgb2JqZWN0IGhhcyB0aGUgcHJvcGVydHkgb2YgdGhlIHNwZWNpZmllZCB0eXBlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGhhc1Byb3BlcnR5T2ZUeXBlOiA8VCBleHRlbmRzIG9iamVjdD4ob2JqOiB1bmtub3duLCBwcm9wOiBrZXlvZiBULCB0eXBlOiBcInN0cmluZ1wiIHwgXCJudW1iZXJcIiB8IFwiYm9vbGVhblwiIHwgXCJvYmplY3RcIiB8IFwiYXJyYXlcIiwgaXNPcHRpb25hbD86IGJvb2xlYW4pID0+IG9iaiBpcyBUO1xuIiwiaW1wb3J0IHsgQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3Jlc3BvbnNlR2VuZXJpY3MnO1xuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIHRoZSBwcm92aWRlZCBkYXRhIGhhcyB0aGUgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzICh3aXRoIHRoZSBjb3JyZWN0IHR5cGVzKSBvZlxuICogYSBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVcbiAqXG4gKiBAcGFyYW0gZGF0YSAtIFRoZSBkYXRhIHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgZGF0YSBoYXMgdGhlIGNvcnJlY3QgcHJvcGVydGllcywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlczogKGRhdGE6IHVua25vd24pID0+IGRhdGEgaXMgQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlcztcbiIsImltcG9ydCB7IEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzQXBpRm9ybVN1Ym1pdHRlZFJlc3BvbnNlQXR0cmlidXRlczogKGRhdGE6IHVua25vd24pID0+IGRhdGEgaXMgRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXM7XG4iLCJpbXBvcnQgeyBPcmRlckl0ZW1JbmZvLCBPcmRlclJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5leHBvcnQgaW50ZXJmYWNlIEFwaU9yZGVySXRlbUluZm8gZXh0ZW5kcyBPbWl0PE9yZGVySXRlbUluZm8sICdkZWxpdmVyZWRfYXQnIHwgJ2VzdGltYXRlZF9kZWxpdmVyeV9hdCcgfCAnaW5fdHJhbnNpdF9hdCc+IHtcbiAgICBkZWxpdmVyZWRfYXQ/OiBzdHJpbmc7XG4gICAgZXN0aW1hdGVkX2RlbGl2ZXJ5X2F0Pzogc3RyaW5nO1xuICAgIGluX3RyYW5zaXRfYXQ/OiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIEFwaU9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzIGV4dGVuZHMgT21pdDxPcmRlclJlc3BvbnNlQXR0cmlidXRlcywgJ2NyZWF0ZWRfYXQnIHwgJ2xhdGVzdF9ldmVudF9kYXRlJyB8ICdsaW5lX2l0ZW1zJz4ge1xuICAgIGNyZWF0ZWRfYXQ6IHN0cmluZztcbiAgICBsYXRlc3RfZXZlbnRfZGF0ZTogc3RyaW5nO1xuICAgIGxpbmVfaXRlbXM6IEFwaU9yZGVySXRlbUluZm9bXTtcbn1cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzQXBpT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXM6IChkYXRhOiB1bmtub3duKSA9PiBkYXRhIGlzIEFwaU9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzO1xuIiwiaW1wb3J0IHsgT3JnYW5pemF0aW9uQ29uZmlnIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmludGVyZmFjZSBBcGlPcmdBbmFseXRpY3NDb25maWdBbXBsaXR1ZGUge1xuICAgIHNlc3Npb25fcmVwbGF5X2VuYWJsZWQ6IGJvb2xlYW47XG4gICAgc2Vzc2lvbl9yZXBsYXlfc2FtcGxlX3JhdGU6IG51bWJlcjtcbiAgICB0cmFja2luZ19lbmFibGVkOiBib29sZWFuO1xufVxuaW50ZXJmYWNlIEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0N1c3RvbWVyU2VydmljZSB7XG4gICAgcHJvdmlkZXI6IHN0cmluZztcbn1cbmludGVyZmFjZSBBcGlPcmdBbmFseXRpY3NDb25maWdHb29nbGVBbmFseXRpY3Mge1xuICAgIG1lYXN1cmVtZW50X2lkOiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgQXBpT3JnQW5hbHl0aWNzQ29uZmlnIHtcbiAgICBhbXBsaXR1ZGU/OiBBcGlPcmdBbmFseXRpY3NDb25maWdBbXBsaXR1ZGU7XG4gICAgY3VzdG9tZXJfc2VydmljZT86IEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0N1c3RvbWVyU2VydmljZTtcbiAgICBnb29nbGVfYW5hbHl0aWNzPzogQXBpT3JnQW5hbHl0aWNzQ29uZmlnR29vZ2xlQW5hbHl0aWNzO1xufVxuZXhwb3J0IGludGVyZmFjZSBBcGlPcmdhbml6YXRpb25Db25maWcgZXh0ZW5kcyBPcmdhbml6YXRpb25Db25maWcge1xuICAgIGNvbmZpZzogQXBpT3JnQW5hbHl0aWNzQ29uZmlnO1xufVxuLyoqXG4gKlxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzQXBpT3JnYW5pemF0aW9uQ29uZmlnOiAoZGF0YTogdW5rbm93bikgPT4gZGF0YSBpcyBBcGlPcmdhbml6YXRpb25Db25maWc7XG5leHBvcnQge307XG4iLCJpbXBvcnQgeyBTdGF0c2lnRXhwZXJpbWVudCBhcyBBcGlPcmdDb25maWdFeHBlcmltZW50LCBTdGF0c2lnRmVhdHVyZUdhdGUgYXMgQXBpT3JnQ29uZmlnRmVhdHVyZUdhdGUsIE9yZ2FuaXphdGlvblNldHRpbmdzIGFzIEFwaU9yZ0NvbmZpZ09yZ2FuaXphdGlvblNldHRpbmdzIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IEFwaU9yZ2FuaXphdGlvbkNvbmZpZyB9IGZyb20gJy4vaXNBcGlPcmdhbml6YXRpb25Db25maWcnO1xuaW50ZXJmYWNlIEFwaU9yZ0NvbmZpZ1Jlc3VsdHMge1xuICAgIGNvbmZpZ3M6IEFwaU9yZ2FuaXphdGlvbkNvbmZpZ1tdO1xuICAgIGV4cGVyaW1lbnRzOiBBcGlPcmdDb25maWdFeHBlcmltZW50W107XG4gICAgZ2F0ZXM6IEFwaU9yZ0NvbmZpZ0ZlYXR1cmVHYXRlW107XG4gICAgb3JnOiBBcGlPcmdDb25maWdPcmdhbml6YXRpb25TZXR0aW5ncztcbn1cbi8qKlxuICpcbiAqIEBwYXJhbSBkYXRhXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZGVjbGFyZSBjb25zdCBpc0FwaU9yZ0NvbmZpZ1Jlc3VsdHM6IChkYXRhOiB1bmtub3duKSA9PiBkYXRhIGlzIFJlcXVpcmVkPEFwaU9yZ0NvbmZpZ1Jlc3VsdHM+O1xuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHsgQXBpUGFnZVJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3Jlc3BvbnNlR2VuZXJpY3MnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNBcGlQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzOiAob2JqOiB1bmtub3duKSA9PiBvYmogaXMgQXBpUGFnZVJlc3BvbnNlQXR0cmlidXRlcztcbiIsImltcG9ydCB7IFBMUEF0dHJpYnV0ZXMsIFBMUElkQXR0cmlidXRlcyB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBpc0FwaVBMUElkQXR0cmlidXRlOiAoZGF0YTogdW5rbm93bikgPT4gZGF0YSBpcyBQTFBJZEF0dHJpYnV0ZXM7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBpc0FwaVBMUEV2ZW50QXR0cmlidXRlczogKGRhdGE6IHVua25vd24pID0+IGRhdGEgaXMgUExQQXR0cmlidXRlcztcbiIsImltcG9ydCB7IFByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNBcGlQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzOiAoYXR0cmlidXRlczogdW5rbm93bikgPT4gYXR0cmlidXRlcyBpcyBQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzO1xuIiwiaW1wb3J0IHsgR2V0TWVyY2hhbnRDb2xvcnNRdWVyeURhdGEgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2dyYXBocWwnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNHcmFwaFFMQ29sb3JzQ29uZmlnOiAoZGF0YTogdW5rbm93bikgPT4gZGF0YSBpcyBHZXRNZXJjaGFudENvbG9yc1F1ZXJ5RGF0YTtcbiIsImltcG9ydCB0eXBlIHsgVXBwZXJDYXNlQ2hhcmFjdGVycywgV29yZFNlcGFyYXRvcnMgfSBmcm9tICcuL2ludGVybmFsJztcbnR5cGUgVXBwZXJDYXNlVG9Mb3dlckNhc2U8VCBleHRlbmRzIHN0cmluZz4gPSBUIGV4dGVuZHMgVXBwZXJjYXNlPFQ+ID8gTG93ZXJjYXNlPFQ+IDogVDtcbnR5cGUgU3BsaXRJbmNsdWRpbmdEZWxpbWl0ZXJzXzxTb3VyY2UgZXh0ZW5kcyBzdHJpbmcsIERlbGltaXRlciBleHRlbmRzIHN0cmluZz4gPSBTb3VyY2UgZXh0ZW5kcyAnJyA/IFtdIDogU291cmNlIGV4dGVuZHMgYCR7aW5mZXIgRmlyc3RQYXJ0fSR7RGVsaW1pdGVyfSR7aW5mZXIgU2Vjb25kUGFydH1gID8gU291cmNlIGV4dGVuZHMgYCR7Rmlyc3RQYXJ0fSR7aW5mZXIgVXNlZERlbGltaXRlcn0ke1NlY29uZFBhcnR9YCA/IFVzZWREZWxpbWl0ZXIgZXh0ZW5kcyBEZWxpbWl0ZXIgPyBTb3VyY2UgZXh0ZW5kcyBgJHtpbmZlciBGaXJzdFBhcnR9JHtVc2VkRGVsaW1pdGVyfSR7aW5mZXIgU2Vjb25kUGFydH1gID8gW1xuICAgIC4uLlNwbGl0SW5jbHVkaW5nRGVsaW1pdGVyczxGaXJzdFBhcnQsIERlbGltaXRlcj4sXG4gICAgVXNlZERlbGltaXRlcixcbiAgICAuLi5TcGxpdEluY2x1ZGluZ0RlbGltaXRlcnM8U2Vjb25kUGFydCwgRGVsaW1pdGVyPlxuXSA6IG5ldmVyIDogbmV2ZXIgOiBuZXZlciA6IFtTb3VyY2VdO1xuLyoqXG4gKiBVbmxpa2UgYSBzaW1wbGVyIHNwbGl0LCB0aGlzIG9uZSBpbmNsdWRlcyB0aGUgZGVsaW1pdGVyIHNwbGl0dGVkIG9uIGluIHRoZSByZXN1bHRpbmcgYXJyYXkgbGl0ZXJhbC4gVGhpcyBpcyB0byBlbmFibGUgc3BsaXR0aW5nIG9uLCBmb3IgZXhhbXBsZSwgdXBwZXItY2FzZSBjaGFyYWN0ZXJzLlxuICpcbiAqIEBjYXRlZ29yeSBUZW1wbGF0ZSBsaXRlcmFsXG4gKi9cbmV4cG9ydCB0eXBlIFNwbGl0SW5jbHVkaW5nRGVsaW1pdGVyczxTb3VyY2UgZXh0ZW5kcyBzdHJpbmcsIERlbGltaXRlciBleHRlbmRzIHN0cmluZz4gPSBTcGxpdEluY2x1ZGluZ0RlbGltaXRlcnNfPFVwcGVyQ2FzZVRvTG93ZXJDYXNlPFNvdXJjZT4sIERlbGltaXRlcj47XG4vKipcbiAqRm9ybWF0IGEgc3BlY2lmaWMgcGFydCBvZiB0aGUgc3BsaXR0ZWQgc3RyaW5nIGxpdGVyYWwgdGhhdCBgU3RyaW5nQXJyYXlUb0RlbGltaXRlckNhc2U8PmAgZnVzZXMgdG9nZXRoZXIsIGVuc3VyaW5nIGRlc2lyZWQgY2FzaW5nLlxuICpcbiAqQHNlZSBTdHJpbmdBcnJheVRvRGVsaW1pdGVyQ2FzZVxuICovXG50eXBlIFN0cmluZ1BhcnRUb0RlbGltaXRlckNhc2U8U3RyaW5nUGFydCBleHRlbmRzIHN0cmluZywgU3RhcnQgZXh0ZW5kcyBib29sZWFuLCBVc2VkV29yZFNlcGFyYXRvcnMgZXh0ZW5kcyBzdHJpbmcsIFVzZWRVcHBlckNhc2VDaGFyYWN0ZXJzIGV4dGVuZHMgc3RyaW5nLCBEZWxpbWl0ZXIgZXh0ZW5kcyBzdHJpbmc+ID0gU3RyaW5nUGFydCBleHRlbmRzIFVzZWRXb3JkU2VwYXJhdG9ycyA/IERlbGltaXRlciA6IFN0YXJ0IGV4dGVuZHMgdHJ1ZSA/IExvd2VyY2FzZTxTdHJpbmdQYXJ0PiA6IFN0cmluZ1BhcnQgZXh0ZW5kcyBVc2VkVXBwZXJDYXNlQ2hhcmFjdGVycyA/IGAke0RlbGltaXRlcn0ke0xvd2VyY2FzZTxTdHJpbmdQYXJ0Pn1gIDogU3RyaW5nUGFydDtcbi8qKlxuICogVGFrZXMgdGhlIHJlc3VsdCBvZiBhIHNwbGl0dGVkIHN0cmluZyBsaXRlcmFsIGFuZCByZWN1cnNpdmVseSBjb25jYXRlbmF0ZXMgaXQgdG9nZXRoZXIgaW50byB0aGUgZGVzaXJlZCBjYXNpbmcuXG4gKlxuICogSXQgcmVjZWl2ZXMgYFVzZWRXb3JkU2VwYXJhdG9yc2AgYW5kIGBVc2VkVXBwZXJDYXNlQ2hhcmFjdGVyc2AgYXMgaW5wdXQgdG8gZW5zdXJlIGl0J3MgZnVsbHkgZW5jYXBzdWxhdGVkLlxuICpcbiAqIEBzZWUgU3BsaXRJbmNsdWRpbmdEZWxpbWl0ZXJzXG4gKi9cbnR5cGUgU3RyaW5nQXJyYXlUb0RlbGltaXRlckNhc2U8UGFydHMgZXh0ZW5kcyByZWFkb25seSBhbnlbXSwgU3RhcnQgZXh0ZW5kcyBib29sZWFuLCBVc2VkV29yZFNlcGFyYXRvcnMgZXh0ZW5kcyBzdHJpbmcsIFVzZWRVcHBlckNhc2VDaGFyYWN0ZXJzIGV4dGVuZHMgc3RyaW5nLCBEZWxpbWl0ZXIgZXh0ZW5kcyBzdHJpbmc+ID0gUGFydHMgZXh0ZW5kcyBbYCR7aW5mZXIgRmlyc3RQYXJ0fWAsIC4uLmluZmVyIFJlbWFpbmluZ1BhcnRzXSA/IGAke1N0cmluZ1BhcnRUb0RlbGltaXRlckNhc2U8Rmlyc3RQYXJ0LCBTdGFydCwgVXNlZFdvcmRTZXBhcmF0b3JzLCBVc2VkVXBwZXJDYXNlQ2hhcmFjdGVycywgRGVsaW1pdGVyPn0ke1N0cmluZ0FycmF5VG9EZWxpbWl0ZXJDYXNlPFJlbWFpbmluZ1BhcnRzLCBmYWxzZSwgVXNlZFdvcmRTZXBhcmF0b3JzLCBVc2VkVXBwZXJDYXNlQ2hhcmFjdGVycywgRGVsaW1pdGVyPn1gIDogUGFydHMgZXh0ZW5kcyBbc3RyaW5nXSA/IHN0cmluZyA6ICcnO1xuLyoqXG4gKiBDb252ZXJ0IGEgc3RyaW5nIGxpdGVyYWwgdG8gYSBjdXN0b20gc3RyaW5nIGRlbGltaXRlciBjYXNpbmcuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4sIGZvciBleGFtcGxlLCBjb252ZXJ0aW5nIGEgY2FtZWwtY2FzZWQgb2JqZWN0IHByb3BlcnR5IHRvIGFuIG9kZGx5IGNhc2VkIG9uZS5cbiAqXG4gKiBAc2VlIEtlYmFiQ2FzZVxuICogQHNlZSBTbmFrZUNhc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgXG4gKiBpbXBvcnQgdHlwZSB7RGVsaW1pdGVyQ2FzZX0gZnJvbSAndHlwZS1mZXN0JztcbiAqXG4gKiAvLyBTaW1wbGVcbiAqXG4gKiBjb25zdCBzb21lVmFyaWFibGU6IERlbGltaXRlckNhc2U8J2Zvb0JhcicsICcjJz4gPSAnZm9vI2Jhcic7XG4gKlxuICogLy8gQWR2YW5jZWRcbiAqXG4gKiB0eXBlIE9kZGx5Q2FzZWRQcm9wZXJ0aWVzPFQ+ID0ge1xuICogXHRbSyBpbiBrZXlvZiBUIGFzIERlbGltaXRlckNhc2U8SywgJyMnPl06IFRbS11cbiAqIH07XG4gKlxuICogaW50ZXJmYWNlIFNvbWVPcHRpb25zIHtcbiAqIFx0ZHJ5UnVuOiBib29sZWFuO1xuICogXHRpbmNsdWRlRmlsZTogc3RyaW5nO1xuICogXHRmb286IG51bWJlcjtcbiAqIH1cbiAqXG4gKiBjb25zdCByYXdDbGlPcHRpb25zOiBPZGRseUNhc2VkUHJvcGVydGllczxTb21lT3B0aW9ucz4gPSB7XG4gKiBcdCdkcnkjcnVuJzogdHJ1ZSxcbiAqIFx0J2luY2x1ZGUjZmlsZSc6ICdiYXIuanMnLFxuICogXHRmb286IDEyM1xuICogfTtcbiAqIGBgYFxuICpcbiAqIEBjYXRlZ29yeSBDaGFuZ2UgY2FzZVxuICogQGNhdGVnb3J5IFRlbXBsYXRlIGxpdGVyYWxcbiAqL1xuZXhwb3J0IHR5cGUgRGVsaW1pdGVyQ2FzZTxWYWx1ZSwgRGVsaW1pdGVyIGV4dGVuZHMgc3RyaW5nPiA9IHN0cmluZyBleHRlbmRzIFZhbHVlID8gVmFsdWUgOiBWYWx1ZSBleHRlbmRzIHN0cmluZyA/IFN0cmluZ0FycmF5VG9EZWxpbWl0ZXJDYXNlPFNwbGl0SW5jbHVkaW5nRGVsaW1pdGVyczxWYWx1ZSwgV29yZFNlcGFyYXRvcnMgfCBVcHBlckNhc2VDaGFyYWN0ZXJzPiwgdHJ1ZSwgV29yZFNlcGFyYXRvcnMsIFVwcGVyQ2FzZUNoYXJhY3RlcnMsIERlbGltaXRlcj4gOiBWYWx1ZTtcbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIHsgRGVsaW1pdGVyQ2FzZSB9IGZyb20gJy4vZGVsaW1pdGVyQ2FzZSc7XG5pbXBvcnQgdHlwZSB7IE5vblJlY3Vyc2l2ZVR5cGUgfSBmcm9tICcuL2ludGVybmFsJztcbmltcG9ydCB0eXBlIHsgVW5rbm93bkFycmF5IH0gZnJvbSAnLi91bmtub3duQXJyYXknO1xuLyoqXG4gKiBDb252ZXJ0IG9iamVjdCBwcm9wZXJ0aWVzIHRvIGRlbGltaXRlciBjYXNlIHJlY3Vyc2l2ZWx5LlxuICpcbiAqIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuLCBmb3IgZXhhbXBsZSwgY29udmVydGluZyBzb21lIEFQSSB0eXBlcyBmcm9tIGEgZGlmZmVyZW50IHN0eWxlLlxuICpcbiAqIEBzZWUgRGVsaW1pdGVyQ2FzZVxuICogQHNlZSBEZWxpbWl0ZXJDYXNlZFByb3BlcnRpZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgXG4gKiBpbXBvcnQgdHlwZSB7RGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcH0gZnJvbSAndHlwZS1mZXN0JztcbiAqXG4gKiBpbnRlcmZhY2UgVXNlciB7XG4gKiBcdHVzZXJJZDogbnVtYmVyO1xuICogXHR1c2VyTmFtZTogc3RyaW5nO1xuICogfVxuICpcbiAqIGludGVyZmFjZSBVc2VyV2l0aEZyaWVuZHMge1xuICogXHR1c2VySW5mbzogVXNlcjtcbiAqIFx0dXNlckZyaWVuZHM6IFVzZXJbXTtcbiAqIH1cbiAqXG4gKiBjb25zdCByZXN1bHQ6IERlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8VXNlcldpdGhGcmllbmRzLCAnLSc+ID0ge1xuICogXHQndXNlci1pbmZvJzoge1xuICogXHQndXNlci1pZCc6IDEsXG4gKiBcdFx0J3VzZXItbmFtZSc6ICdUb20nLFxuICogXHR9LFxuICogXHQndXNlci1mcmllbmRzJzogW1xuICogXHRcdHtcbiAqIFx0XHRcdCd1c2VyLWlkJzogMixcbiAqIFx0XHRcdCd1c2VyLW5hbWUnOiAnSmVycnknLFxuICogXHRcdH0sXG4gKiBcdFx0e1xuICogXHRcdFx0J3VzZXItaWQnOiAzLFxuICogXHRcdFx0J3VzZXItbmFtZSc6ICdTcGlrZScsXG4gKiBcdFx0fSxcbiAqIFx0XSxcbiAqIH07XG4gKiBgYGBcbiAqXG4gKiBAY2F0ZWdvcnkgQ2hhbmdlIGNhc2VcbiAqIEBjYXRlZ29yeSBUZW1wbGF0ZSBsaXRlcmFsXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKi9cbmV4cG9ydCB0eXBlIERlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8VmFsdWUsIERlbGltaXRlciBleHRlbmRzIHN0cmluZz4gPSBWYWx1ZSBleHRlbmRzIE5vblJlY3Vyc2l2ZVR5cGUgPyBWYWx1ZSA6IFZhbHVlIGV4dGVuZHMgVW5rbm93bkFycmF5ID8gRGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzQXJyYXlEZWVwPFZhbHVlLCBEZWxpbWl0ZXI+IDogVmFsdWUgZXh0ZW5kcyBTZXQ8aW5mZXIgVT4gPyBTZXQ8RGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcDxVLCBEZWxpbWl0ZXI+PiA6IHtcbiAgICBbSyBpbiBrZXlvZiBWYWx1ZSBhcyBEZWxpbWl0ZXJDYXNlPEssIERlbGltaXRlcj5dOiBEZWxpbWl0ZXJDYXNlZFByb3BlcnRpZXNEZWVwPFZhbHVlW0tdLCBEZWxpbWl0ZXI+O1xufTtcbnR5cGUgRGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzQXJyYXlEZWVwPFZhbHVlIGV4dGVuZHMgVW5rbm93bkFycmF5LCBEZWxpbWl0ZXIgZXh0ZW5kcyBzdHJpbmc+ID0gVmFsdWUgZXh0ZW5kcyBbXSA/IFtdIDogVmFsdWUgZXh0ZW5kcyBbaW5mZXIgVSwgLi4uaW5mZXIgVl0gPyBbRGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcDxVLCBEZWxpbWl0ZXI+LCAuLi5EZWxpbWl0ZXJDYXNlZFByb3BlcnRpZXNEZWVwPFYsIERlbGltaXRlcj5dIDogVmFsdWUgZXh0ZW5kcyByZWFkb25seSBbaW5mZXIgVSwgLi4uaW5mZXIgVl0gPyByZWFkb25seSBbXG4gICAgRGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcDxVLCBEZWxpbWl0ZXI+LFxuICAgIC4uLkRlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8ViwgRGVsaW1pdGVyPlxuXSA6IFZhbHVlIGV4dGVuZHMgcmVhZG9ubHkgWy4uLmluZmVyIFUsIGluZmVyIFZdID8gW1xuICAgIC4uLkRlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8VSwgRGVsaW1pdGVyPixcbiAgICBEZWxpbWl0ZXJDYXNlZFByb3BlcnRpZXNEZWVwPFYsIERlbGltaXRlcj5cbl0gOiBWYWx1ZSBleHRlbmRzIHJlYWRvbmx5IFsuLi5pbmZlciBVLCBpbmZlciBWXSA/IHJlYWRvbmx5IFtcbiAgICAuLi5EZWxpbWl0ZXJDYXNlZFByb3BlcnRpZXNEZWVwPFUsIERlbGltaXRlcj4sXG4gICAgRGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcDxWLCBEZWxpbWl0ZXI+XG5dIDogVmFsdWUgZXh0ZW5kcyBBcnJheTxpbmZlciBVPiA/IEFycmF5PERlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8VSwgRGVsaW1pdGVyPj4gOiBWYWx1ZSBleHRlbmRzIFJlYWRvbmx5QXJyYXk8aW5mZXIgVT4gPyBSZWFkb25seUFycmF5PERlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8VSwgRGVsaW1pdGVyPj4gOiBuZXZlcjtcbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIHsgRGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcCB9IGZyb20gJy4vZGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcCc7XG4vKipcbiAqIENvbnZlcnQgb2JqZWN0IHByb3BlcnRpZXMgdG8gc25ha2UgY2FzZSByZWN1cnNpdmVseS5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiwgZm9yIGV4YW1wbGUsIGNvbnZlcnRpbmcgc29tZSBBUEkgdHlwZXMgZnJvbSBhIGRpZmZlcmVudCBzdHlsZS5cbiAqXG4gKiBAc2VlIFNuYWtlQ2FzZVxuICogQHNlZSBTbmFrZUNhc2VkUHJvcGVydGllc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqIGltcG9ydCB0eXBlIHtTbmFrZUNhc2VkUHJvcGVydGllc0RlZXB9IGZyb20gJ3R5cGUtZmVzdCc7XG4gKlxuICogaW50ZXJmYWNlIFVzZXIge1xuICogXHR1c2VySWQ6IG51bWJlcjtcbiAqIFx0dXNlck5hbWU6IHN0cmluZztcbiAqIH1cbiAqXG4gKiBpbnRlcmZhY2UgVXNlcldpdGhGcmllbmRzIHtcbiAqIFx0dXNlckluZm86IFVzZXI7XG4gKiBcdHVzZXJGcmllbmRzOiBVc2VyW107XG4gKiB9XG4gKlxuICogY29uc3QgcmVzdWx0OiBTbmFrZUNhc2VkUHJvcGVydGllc0RlZXA8VXNlcldpdGhGcmllbmRzPiA9IHtcbiAqIFx0dXNlcl9pbmZvOiB7XG4gKiBcdFx0dXNlcl9pZDogMSxcbiAqIFx0XHR1c2VyX25hbWU6ICdUb20nLFxuICogXHR9LFxuICogXHR1c2VyX2ZyaWVuZHM6IFtcbiAqIFx0XHR7XG4gKiBcdFx0XHR1c2VyX2lkOiAyLFxuICogXHRcdFx0dXNlcl9uYW1lOiAnSmVycnknLFxuICogXHRcdH0sXG4gKiBcdFx0e1xuICogXHRcdFx0dXNlcl9pZDogMyxcbiAqIFx0XHRcdHVzZXJfbmFtZTogJ1NwaWtlJyxcbiAqIFx0XHR9LFxuICogXHRdLFxuICogfTtcbiAqIGBgYFxuICpcbiAqIEBjYXRlZ29yeSBDaGFuZ2UgY2FzZVxuICogQGNhdGVnb3J5IFRlbXBsYXRlIGxpdGVyYWxcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqL1xuZXhwb3J0IHR5cGUgU25ha2VDYXNlZFByb3BlcnRpZXNEZWVwPFZhbHVlPiA9IERlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8VmFsdWUsICdfJz47XG4iLCIvKipcbiAqIEdlbmVyaWMgdXRpbGl0eSB0byB0cmFuc2Zvcm0gc25ha2VfY2FzZSBvYmplY3Qga2V5cyB0byBjYW1lbENhc2UgYXQgcnVudGltZS5cbiAqIFRoaXMgaXMgdGhlIHJ1bnRpbWUgZXF1aXZhbGVudCBvZiB0aGUgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwIHR5cGUgdXRpbGl0eS5cbiAqL1xuLyoqXG4gKiBSZWN1cnNpdmVseSB0cmFuc2Zvcm1zIGFsbCBvYmplY3Qga2V5cyBmcm9tIHNuYWtlX2Nhc2UgdG8gY2FtZWxDYXNlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHRyYW5zZm9ybVNuYWtlVG9DYW1lbDogKG9iajogdW5rbm93bikgPT4gdW5rbm93bjtcbi8qKlxuICogUmVjdXJzaXZlbHkgdHJhbnNmb3JtcyBhbGwgb2JqZWN0IGtleXMgZnJvbSBjYW1lbENhc2UgdG8gc25ha2VfY2FzZVxuICovXG5leHBvcnQgZGVjbGFyZSBjb25zdCB0cmFuc2Zvcm1DYW1lbFRvU25ha2U6IChvYmo6IHVua25vd24pID0+IHVua25vd247XG4iLCJpbXBvcnQgeyBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuLyoqXG4gKiBDb252ZXJ0cyBhIHN0cmluZyB0byBhIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyBlbnVtIHZhbHVlLlxuICpcbiAqIEBwYXJhbSBzdGF0dXMgLSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKlxuICogQHJldHVybnMgVGhlIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyBlbnVtIHZhbHVlIG9yIHVuZGVmaW5lZCBpZiB0aGUgc3RyaW5nXG4gKiBkb2VzIG5vdCBtYXAgdG8gYSB2YWxpZCBlbnVtXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHN0cmluZ1RvRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzRW51bVZhbHVlOiAoc3RhdHVzOiBzdHJpbmcpID0+IEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyB8IHVuZGVmaW5lZDtcbiIsImltcG9ydCB7IENvbG9yTWFwcGluZyB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL2NvbG9yc0NvbmZpZ1wiO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdmFsaWRhdGVHcmFwaFFMQ29sb3JzQ29uZmlnOiAoZGF0YTogdW5rbm93bikgPT4gQ29sb3JNYXBwaW5nIHwgdW5kZWZpbmVkO1xuIiwiaW1wb3J0IHsgRnJvbnRlbmRDb25maWcgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2Zyb250ZW5kQ29uZmlnJztcbmltcG9ydCB7IFdpZGdldENvbmZpZywgUGFnZVZhcmlhbnRDb25maWcsIFdpZGdldE1vdW50aW5nQ29uZmlnIH0gZnJvbSAnc3JjL2NvbnRleHRzL3R5cGVzJztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHZhbGlkYXRlQW5kVHJhbnNmb3JtUGFnZVZhcmlhbnRzOiAoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gUGFnZVZhcmlhbnRDb25maWc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCB2YWxpZGF0ZUFuZFRyYW5zZm9ybU1vdW50aW5nQ29uZmlnOiAoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgY29uZmlnS2V5OiBzdHJpbmcpID0+IFdpZGdldE1vdW50aW5nQ29uZmlnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdmFsaWRhdGVBbmRUcmFuc2Zvcm1XaWRnZXRDb25maWc6IChjb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBjb25maWdLZXk6IHN0cmluZykgPT4gV2lkZ2V0Q29uZmlnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdmFsaWRhdGVHcmFwaFFMRnJvbnRlbmRDb25maWc6IChkYXRhOiB1bmtub3duKSA9PiBGcm9udGVuZENvbmZpZyB8IHVuZGVmaW5lZDtcbiIsImV4cG9ydCBkZWNsYXJlIGNvbnN0IHZhbGlkYXRlR3JhcGhRTE9yZ0lkOiAoZGF0YTogdW5rbm93bikgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuIiwiaW1wb3J0IHsgTW9iaWxlUExQQ2hhdFBsYWNlbWVudFBhcmFtZXRlciB9IGZyb20gJy4uL21vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXInO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdmFsaWRhdGVNb2JpbGVQTFBDaGF0UGxhY2VtZW50UGFyYW1ldGVyOiAodmFsdWU6IHVua25vd24pID0+IE1vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXIgfCB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgeyBPcmdhbml6YXRpb25Db25maWcgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9vcmdhbml6YXRpb25Db25maWcnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdmFsaWRhdGVPcmdhbml6YXRpb25Db25maWc6IChkYXRhOiB1bmtub3duKSA9PiBPcmdhbml6YXRpb25Db25maWcgfCB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgeyBPcmdDb25maWcgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9vcmdDb25maWdSZXN1bHRzJztcbi8qKlxuICpcbiAqIEBwYXJhbSBkYXRhXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZGVjbGFyZSBjb25zdCB2YWxpZGF0ZU9yZ0NvbmZpZ1Jlc3VsdHM6IChkYXRhOiB1bmtub3duKSA9PiBPcmdDb25maWcgfCB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgeyBSZXNwb25zZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvaW5kZXgnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdmFsaWRhdGVSZXNwb25zZTogKGRhdGE6IHVua25vd24pID0+IFJlc3BvbnNlIHwgdW5kZWZpbmVkO1xuIiwiaW1wb3J0IHsgU3VnZ2VzdGlvbiB9IGZyb20gJy4uL2FwaS9zdWdnZXN0aW9uJztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHZhbGlkYXRlU3VnZ2VzdGlvbjogKGRhdGE6IHVua25vd24pID0+IFN1Z2dlc3Rpb24gfCB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgeyBVc2VyRXZlbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2luZGV4JztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHZhbGlkYXRlVXNlckV2ZW50OiAoZGF0YTogdW5rbm93bikgPT4gVXNlckV2ZW50IHwgdW5kZWZpbmVkO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUksY0FBYyxDQUFDLElBQUc7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
|